Commit Graph

591 Commits

Author SHA1 Message Date
Will Pfleger
b4d8574e1d Merge remote-tracking branch 'origin/main' into test/cli-612-613
* origin/main:
  fix(infra): pin PGDATA path for forward-compatible Postgres upgrades (#707)
  fix(deps): upgrade redis 1.0 and deadpool-redis 0.23 together (#703)
  Fix SPROUT_SHARE_IDENTITY worktree dev workflow breaks (#702)
  fix(mobile): rename IOSOptions/MacOsOptions to AppleOptions (#706)
  fix(frontend): remove deprecated baseUrl for TypeScript 6 compatibility (#705)
  fix(deps): upgrade getrandom to 0.4 with fill() rename (#704)
  feat(sprout-agent): auto-fallback to Databricks OAuth (#699)
  fix(relay): avoid websocket writes in stall watchdog (#697)
2026-05-21 17:58:41 -04:00
Will Pfleger
cfd5a82c7b fix(infra): pin PGDATA path for forward-compatible Postgres upgrades (#707) 2026-05-21 17:57:03 -04:00
Will Pfleger
d0d2670fe2 fix(deps): upgrade redis 1.0 and deadpool-redis 0.23 together (#703) 2026-05-21 17:55:44 -04:00
Will Pfleger
091e38ff0a Fix SPROUT_SHARE_IDENTITY worktree dev workflow breaks (#702) 2026-05-21 17:53:20 -04:00
Will Pfleger
4404162f0e fix(mobile): rename IOSOptions/MacOsOptions to AppleOptions (#706) 2026-05-21 17:41:16 -04:00
Will Pfleger
6fe557852c fix(frontend): remove deprecated baseUrl for TypeScript 6 compatibility (#705) 2026-05-21 17:40:54 -04:00
Will Pfleger
d4f55cee3c fix(deps): upgrade getrandom to 0.4 with fill() rename (#704) 2026-05-21 17:40:18 -04:00
tlongwell-block
962dd7dced feat(sprout-agent): auto-fallback to Databricks OAuth (#699)
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
2026-05-21 13:05:58 -04:00
tlongwell-block
4373a13fb3 fix(relay): avoid websocket writes in stall watchdog (#697)
Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Dawn (sprout agent) <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
2026-05-21 12:56:12 -04:00
Will Pfleger
4ee1a5b65a Merge remote-tracking branch 'origin/cli-agent-skill' into test/cli-612-613
* origin/cli-agent-skill:
  docs(cli-skill): update skill file to match CLI parity changes
  style: fix rustfmt formatting after rebase
  fix(nest): update skill content for CLI parity changes
  fix(nest): correct skill content inaccuracies + chmod intermediate dirs
  feat(nest): add sprout-cli agent skill to nest initialization
2026-05-21 12:32:07 -04:00
Will Pfleger
5a097dc20b Merge remote-tracking branch 'origin/cli-agent-parity' into test/cli-612-613
* origin/cli-agent-parity:
  docs: add sprout-cli section and common gotchas to AGENTS.md
  style: fix rustfmt formatting in channels.rs and messages.rs
  fix(cli): fix search p-gate, visibility filter, and forum post routing
  docs: update TESTING.md runbooks for normalized CLI output
  style: fix rustfmt formatting in sprout-cli
  fix(cli): address review findings — data correctness, DRY, determinism
  fix(cli): normalize output and fix wrong Nostr kinds across all commands
2026-05-21 12:32:00 -04:00
Will Pfleger
bcb8279f34 docs(cli-skill): update skill file to match CLI parity changes
Brings the agent skill file to parity with all 62 CLI subcommands
across 13 command groups after PR #612's output normalization and bug
fixes. Adds 5 missing command groups (social, repos, upload, mem,
pack), 5 missing subcommands in existing groups (channels update/
add-member/remove-member, workflows update/delete), missing flags
(--file, --mention, --kinds, --depth-limit, --limit), fixes output
contract inaccuracies (channels get pubkey field, workflows list
pubkey, exit code 5, feed description), and restructures the Quick
Reference table by output pattern for scannability.
2026-05-21 12:12:34 -04:00
tlongwell-block
fa9e26fa5c feat(sprout-agent): Databricks provider with OAuth 2.0 PKCE auth (#698)
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Dawn (sprout agent) <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
2026-05-21 12:08:24 -04:00
Will Pfleger
b47491bf55 docs: add sprout-cli section and common gotchas to AGENTS.md 2026-05-21 11:54:09 -04:00
Will Pfleger
388877188b style: fix rustfmt formatting in channels.rs and messages.rs 2026-05-21 11:49:12 -04:00
Will Pfleger
058a498b57 fix(cli): fix search p-gate, visibility filter, and forum post routing
Three bugs found during E2E testing against a local relay:

1. `messages search` sent no `kinds` filter, triggering the relay's
   p-gate (403). Now sends `kinds: [9, 40002, 45001, 45003]` matching
   the MCP server's search implementation.

2. `channels list --visibility open` always returned `[]` because the
   filter checked for `["visibility", "open"]` tags, but the relay
   emits `["public"]`/`["private"]` per NIP-29. Rewritten to match
   the relay's actual tag convention.

3. `--kind` flag on `messages send` was dead code (`#[allow(dead_code)]`).
   Now routes to `build_forum_post` (kind 45001) and `build_forum_comment`
   (kind 45003) SDK builders, enabling forum voting via CLI.

TESTING.md updated with relay behavior notes for channels leave
(last-owner guard), workflows trigger (DB indexing delay), workflows
update (missing --channel flag), and corrected expected error messages.
2026-05-21 11:31:35 -04:00
benthecarman
300b51b02a Add Ubuntu desktop release artifacts (#693)
Signed-off-by: benthecarman <benthecarman@live.com>
v0.0.17
2026-05-21 10:09:28 -04:00
renovate[bot]
26a2107523 chore(deps): update rust crate tokio to v1.52.3 (#658)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-21 01:27:18 +00:00
renovate[bot]
1220e9938a chore(deps): update all non-major dependencies (#650)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-21 01:26:47 +00:00
renovate[bot]
aff627d901 chore(deps): update rust crate sherpa-onnx to v1.13.2 (#657)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-21 01:26:24 +00:00
renovate[bot]
f7eae0a6cf chore(deps): update dependency nostr-tools to v2.23.5 (#681)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-21 01:24:40 +00:00
renovate[bot]
740d2545ea chore(deps): update tanstack-router monorepo (#659)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 23:10:05 +00:00
renovate[bot]
e08a971abf chore(deps): update rust crate dashmap to v6.2.1 (#652)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 23:09:12 +00:00
renovate[bot]
9df214d43a chore(deps): update rust crate tower-http to v0.6.11 (#647)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 23:08:56 +00:00
renovate[bot]
109c7d9a8a chore(deps): update rust crate reqwest to v0.13.3 (#639)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 23:08:09 +00:00
renovate[bot]
7d4c129002 chore(deps): update rust crate sherpa-onnx to v1.12.40 (#640)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 23:07:37 +00:00
renovate[bot]
97eacb86f4 chore(deps): update dependency @tanstack/react-query to v5.100.11 (#635)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 23:06:59 +00:00
renovate[bot]
0dd9a05948 fix(deps): update rust crate sha2 to 0.11 (#665)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:54:25 +00:00
renovate[bot]
55abbfdec6 fix(deps): update rust crate bzip2 to 0.6 (#661)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:52:18 +00:00
renovate[bot]
f55dc46c4c chore(deps): update rust crate uuid to v1.23.1 (#648)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:50:02 +00:00
renovate[bot]
3935885bb9 chore(deps): update rust crate tauri-plugin-dialog to v2.7.1 (#644)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:49:41 +00:00
renovate[bot]
8082019cb6 chore(deps): update tanstack-router monorepo (#649)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:49:22 +00:00
renovate[bot]
42d9eafabd chore(deps): update rust crate tokio to v1.51.3 (#646)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:49:13 +00:00
renovate[bot]
576ef8cf86 chore(deps): update rust crate tauri-plugin-opener to v2.5.4 (#645)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:48:56 +00:00
renovate[bot]
73b4cb797e chore(deps): update rust crate tauri to v2.11.2 (#642)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:48:26 +00:00
renovate[bot]
881ed204bb chore(deps): update rust crate metrics to v0.24.6 (#638)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:47:35 +00:00
renovate[bot]
cbe6f415bd chore(deps): update rust crate tar to v0.4.46 (#641)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:47:24 +00:00
renovate[bot]
420aedecd1 chore(deps): update dependency @tauri-apps/cli to v2.11.2 (#636)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:47:06 +00:00
renovate[bot]
584c7ae818 chore(deps): update dependency @playwright/test to v1.60.0 (#651)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:39:49 +00:00
renovate[bot]
9f4adcc74c chore(deps): update rust crate rmcp to v1.7.0 (#656)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:39:39 +00:00
renovate[bot]
3ab836d8e0 chore(deps): update dependency shiki to v4.1.0 (#682)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:37:56 +00:00
renovate[bot]
72f57d7d6d chore(deps): update react monorepo to v19.2.6 (#637)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:34:20 +00:00
Will Pfleger
a0264f48cd docs: update TESTING.md runbooks for normalized CLI output
channels/workflows/DMs create responses now return entity IDs
(channel_id, workflow_id, dm_id) instead of bare id. All write
commands return {event_id, accepted, message}. canvas get outputs
raw markdown, not JSON. users get always returns an array.

Add expected-output comments throughout so testers can verify
correctness without reading the source.
2026-05-20 18:12:34 -04:00
Will Pfleger
ee912d5478 fix(renovate): re-enable automerge for non-major updates (#680) 2026-05-20 22:00:32 +00:00
Will Pfleger
c950d60454 style: fix rustfmt formatting in sprout-cli
Reformat long method chains and closure expressions that rustfmt
flagged during CI. No logic changes.
2026-05-20 17:57:15 -04:00
Will Pfleger
0cf0d106e7 fix(cli): address review findings — data correctness, DRY, determinism
Crossfire review (Codex + Gemini) surfaced 15 issues the Claude agents
missed. Critical: p-tag role read from wrong index (empty relay_url at
index 2 vs actual role at index 3), cmd_open_dm panics on malformed
pubkey, users get returns inconsistent types, channels query wrong Nostr
kind (41 vs 39000). Also: DM open now parses relay-assigned channel_id,
canvas not-found returns null, thread filter restricts to message kinds,
query() delegates to query_multi(), normalize_events takes &[Value],
extract_channel_metadata and print_create_response DRY helpers,
workflows get normalized, empty reaction content defaults to "+",
reactions sorted deterministically.
2026-05-20 17:57:15 -04:00
Will Pfleger
5a53383897 fix(cli): normalize output and fix wrong Nostr kinds across all commands
Comprehensive audit revealed the CLI queried wrong Nostr kinds (channels
list used kind:39002 instead of 41, dms list used 41010 instead of 41001,
workflow runs used 46020 instead of [46001,46002,46003]), used wrong tag
filters (#h instead of #d), discarded generated IDs from create commands,
and returned raw Nostr events with sig fields instead of structured data.

Adds query_multi() for compound queries, normalize_write_response() for
consistent {event_id, accepted, message} write output, normalize_events()
for stripping sig and reshaping reads, and extract_d_tag/extract_p_tags
helpers. All 25+ write handlers and 10+ read handlers now produce
structured output matching the MCP server.
2026-05-20 17:57:15 -04:00
Will Pfleger
3474e1e5f0 style: fix rustfmt formatting after rebase
Reformat code after rebasing onto main (which includes PR #614's
nest.rs additions). No logic changes.
2026-05-20 17:56:37 -04:00
Will Pfleger
f60f36e6b1 fix(nest): update skill content for CLI parity changes
Sync SKILL.md descriptions with post-review CLI output shapes: canvas
get returns markdown string or null (not event array), reactions get
returns grouped {emoji, count, pubkeys} (not raw events), users get
always returns array, workflows get documents normalized shape, workflows
runs notes empty-result limitation. Quick reference table updated.
2026-05-20 17:56:37 -04:00
Will Pfleger
8339e5f832 fix(nest): correct skill content inaccuracies + chmod intermediate dirs
Four inaccuracies in nest_skill.md caught by comparing against CLI source:

1. canvas get returns a JSON array of kind:40100 events (markdown in
   `content`), not a plain markdown string. Agents parsing this as a
   raw string would get the Nostr event wrapper, not the content.

2. reactions get returns a raw JSON array of kind:7 events, not the
   aggregated {"reactions": [...]} shape. No aggregation happens in
   cmd_get_reactions.

3. Error stderr category field values were placeholder text ("input error",
   "network/relay error") instead of the actual enum values emitted by
   error.rs: user_error, relay_error, network_error, auth_error, key_error.

4. set-presence documents as working but cmd_set_presence has an explicit
   comment noting it always fails — kind:20001 is ephemeral and the relay
   rejects it over HTTP POST. Added a "this will fail" caveat.

Also fixes a permission gap in nest.rs: create_dir_all(".claude/skills/
sprout-cli") created the intermediate .claude/ and .claude/skills/ dirs
with umask-default permissions (typically 755), but only the final
sprout-cli/ dir was chmod'd to 700. Lock down all three dirs in the
skill path, matching how NEST_DIRS are handled. Test updated to assert
all three dirs get 700 on Unix.

Docstring for ensure_nest_at updated to mention SKILL.md.
2026-05-20 17:56:37 -04:00