@staff0rd/assist 0.751.0 → 0.753.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -30
- package/allowed.cli-reads +0 -1
- package/allowed.cli-writes +0 -1
- package/claude/settings.json +1 -22
- package/claude/skills/review-ci/scripts/review.mjs +111 -111
- package/dist/allowed.cli-reads +0 -1
- package/dist/allowed.cli-writes +0 -1
- package/dist/commands/sessions/web/bundle.js +1 -1
- package/dist/index.js +1863 -2328
- package/package.json +1 -1
- package/claude/commands/handover.md +0 -65
- package/claude/commands/journal.md +0 -74
- package/claude/commands/recall.md +0 -55
- package/claude/commands/standup.md +0 -35
- package/claude/commands/voice-logs.md +0 -5
- package/claude/commands/voice-setup.md +0 -5
- package/claude/commands/voice-start.md +0 -5
- package/claude/commands/voice-status.md +0 -5
- package/claude/commands/voice-stop.md +0 -5
- package/dist/commands/voice/python/CLAUDE.md +0 -11
- package/dist/commands/voice/python/audio_capture.py +0 -52
- package/dist/commands/voice/python/check_mi.py +0 -21
- package/dist/commands/voice/python/dispatch.py +0 -14
- package/dist/commands/voice/python/keyboard.py +0 -73
- package/dist/commands/voice/python/list_devices.py +0 -20
- package/dist/commands/voice/python/logger.py +0 -38
- package/dist/commands/voice/python/pyproject.toml +0 -26
- package/dist/commands/voice/python/setup_models.py +0 -91
- package/dist/commands/voice/python/smart_turn.py +0 -63
- package/dist/commands/voice/python/stt.py +0 -54
- package/dist/commands/voice/python/uv.lock +0 -5946
- package/dist/commands/voice/python/vad.py +0 -50
- package/dist/commands/voice/python/voice_daemon.py +0 -528
- package/dist/commands/voice/python/wake_word.py +0 -26
package/README.md
CHANGED
|
@@ -52,13 +52,11 @@ After installation, the `assist` command will be available globally. You can als
|
|
|
52
52
|
- `/fix-conflict [--rebase]` - Resolve the current PR branch's conflicts against the remote default, verify, then push; merges by default, `--rebase` replays the branch and pushes with `--force-with-lease`
|
|
53
53
|
- `/fix-rules [dir]` - Put existing rules into the `## Rules` format `assist rules` reads
|
|
54
54
|
- `/forward-comments` - Split a coarse PR comment into per-line review comments, attributed to the original reviewer
|
|
55
|
-
- `/handover` - Write a session handover note for the next conversation
|
|
56
55
|
- `/pr` - Raise a PR with a concise description, then watch CI in the background
|
|
57
56
|
- `/prs-slack <number> [--no-confirm]` - Post a PR's title and URL to the Slack channel configured in `prs.slack`; `--no-confirm` skips the confirmation and posts straight away (used by chained announces)
|
|
58
57
|
- `/prs-status [channel] <owner/repo>...` - Post an overview of the open PRs across the named repos to Slack: a summary line in the channel, the PRs grouped by what they are waiting on in its thread; the channel falls back to `slack.channel`
|
|
59
58
|
- `/refactor` - Run refactoring checks for code quality
|
|
60
59
|
- `/prompts` - Analyze denied tool calls and suggest settings changes to auto-allow recurring prompts
|
|
61
|
-
- `/recall` - Recall the most recent handover note for this repo
|
|
62
60
|
- `/run-logs [session-id|group]` - Read a run session's output via `assist sessions output` — a session id, or else a server group (default `default`) for this repo — and summarise its errors and relevant lines
|
|
63
61
|
- `/releases-configure` - Set this repo's release promotion topology: read its workflow files, follow every `uses:` reusable-workflow call to whatever depth it nests, flatten the `needs:` graph across those boundaries into nodes and edges, put the graph to the user to accept or edit, then write it with `assist releases configure --streams ...` to the project `assist.yml` or this repo's block in `~/.assist.yml`. The repo is the one you are in — it is never passed
|
|
64
62
|
- `/refine` - Refine an existing backlog item through conversation
|
|
@@ -70,10 +68,8 @@ After installation, the `assist` command will be available globally. You can als
|
|
|
70
68
|
- `/review-pr-comments` - Process PR review comments one by one
|
|
71
69
|
- `/jira [action] [KEY] [args]` - Jira actions: `view`, `associate`, `update`, `started`, `done`, `help`. `[KEY]` is optional — it resolves from the session's backlog item
|
|
72
70
|
- `/github [action] [ref] [args]` - GitHub issue actions: `view`, `edit`, `associate`, `update`, `started`, `done`, `help`. `[ref]` is optional — it resolves from the session's backlog item. A bare `/github <ref>` runs `edit`, which opens the issue in the web preview pane; outside a web session the command prints the issue to chat instead
|
|
73
|
-
- `/journal` - Append a journal entry summarising recent work
|
|
74
71
|
- `/next [id]` - Signal completion and chain into the next backlog item
|
|
75
72
|
- `/slack-post [channel] [--thread <ts-or-permalink>] <what to say>` - Compose a markdown message, preview it in the web pane via `assist slack post`, then post the approved body to that Slack channel with the Slack MCP connector and report the permalink. The channel falls back to `slack.channel`; `--thread` posts the message as a reply in that thread. Asked for a thread of several messages, it composes all of them up front and previews the batch in a single `assist slack post --parts` call — a pane per message, in order — and posts nothing until every one is approved: the first message opens the thread and the rest follow under the `thread_ts` it returns, or all of them reply under the resolved `thread_ts` when `--thread` was given. A rejection posts nothing at all; the rejected message is revised in its working file and the whole batch re-previewed from the first message
|
|
76
|
-
- `/standup` - Summarise recent journal entries as a standup update
|
|
77
73
|
- `/subtask <text>` - Add a sub-task to the session's current backlog item
|
|
78
74
|
- `/strip-code-comments` - Strip redundant comments from tracked source files
|
|
79
75
|
- `/sync` - Sync commands and settings to ~/.claude
|
|
@@ -91,11 +87,6 @@ After installation, the `assist` command will be available globally. You can als
|
|
|
91
87
|
- `/verify` - Run all verification commands in parallel
|
|
92
88
|
- `/verify-new` - Add a new verify:\* run command to assist.yml
|
|
93
89
|
- `/transcripts` - Format and summarise meeting transcripts end to end
|
|
94
|
-
- `/voice-setup` - Download required voice models (VAD, STT)
|
|
95
|
-
- `/voice-start` - Start the voice interaction daemon
|
|
96
|
-
- `/voice-stop` - Stop the voice interaction daemon
|
|
97
|
-
- `/voice-status` - Check voice daemon status
|
|
98
|
-
- `/voice-logs` - Show recent voice daemon logs
|
|
99
90
|
|
|
100
91
|
## CLI Commands
|
|
101
92
|
|
|
@@ -109,6 +100,7 @@ Every command supports `--help` for full detail on its flags and behaviour.
|
|
|
109
100
|
- `assist backup schedule remove` - Remove the backup schedule block from the crontab
|
|
110
101
|
- `assist db migrate` - Apply pending backlog database migrations in order
|
|
111
102
|
- `assist db status` - Report whether the database is in sync with the build's bundled migrations
|
|
103
|
+
- `assist db drop-retired` - Drop retired tables left by removed features (e.g. `handovers`), showing each table's row count and asking for confirmation first
|
|
112
104
|
|
|
113
105
|
### Git and GitHub
|
|
114
106
|
|
|
@@ -341,10 +333,6 @@ The Config tab of the sessions web dashboard never receives secret values: `GET
|
|
|
341
333
|
- `assist netcap extract-linkedin-posts [file]` - Parse a netcap capture into structured LinkedIn posts, written to `posts.json` beside the capture
|
|
342
334
|
- `assist criteria-extension [--sign]` - Print the directory to load the [acceptance criteria outliner extension](#acceptance-criteria-outliner-extension) unpacked from (copies to `C:\tools\criteria-extension` under WSL); `--sign` signs it on AMO's unlisted channel and prints the `.xpi` for a permanent Firefox install
|
|
343
335
|
- `assist screenshot <process>` - Capture a screenshot of a running application window (`screenshot.outputDir`, default `./screenshots`)
|
|
344
|
-
- `assist handover save --summary <s>` - Save a session handover note (content from stdin), scoped by the repo's git origin
|
|
345
|
-
- `assist handover list` - List unrecalled handovers for this repo, most recent first
|
|
346
|
-
- `assist handover recall [id]` - Print an unrecalled handover and mark it recalled (most recent by default)
|
|
347
|
-
- `assist handover load` - SessionStart hook entry point advising how many unrecalled handovers exist
|
|
348
336
|
- `assist mermaid export [file.md]` - Render each fenced mermaid block to `<stem>-<index>.svg` via [Kroki](https://kroki.io) (`--out`, `--index`, `mermaid.krokiUrl`)
|
|
349
337
|
- `assist prompts` - Show top 10 denied tool calls by frequency with count and repo breakdown
|
|
350
338
|
- `assist chart [--title <title>]` - Draw a terminal line chart of a `label value` series piped in on stdin, one pair per line, separated by a comma, tab or whitespace. Points are charted in the order given — nothing is sorted or aggregated — and the chart closes on q, Esc or Ctrl-C. The y axis fits the data range with 20% padding rather than starting at zero, so a series that only moves in its third decimal still reads as a shape; a flat series is padded so the line does not sit on the axis. Blank lines are skipped, fewer than two points prints `Not enough data points to chart.`, and a non-numeric value exits 1 naming the line
|
|
@@ -372,19 +360,13 @@ The Config tab of the sessions web dashboard never receives secret values: `GET
|
|
|
372
360
|
- `assist complexity maintainability [pattern]` - Calculate maintainability index per file (`--ignore <glob>`, plus `complexity.ignore`). A file can declare its own threshold with a `// assist-maintainability-override: N` comment in its first ~10 lines, replacing `--threshold` for that file only
|
|
373
361
|
- `assist complexity sloc [pattern]` - Count source lines of code per file
|
|
374
362
|
|
|
375
|
-
### Transcripts
|
|
363
|
+
### Transcripts
|
|
376
364
|
|
|
377
365
|
- `assist transcript configure` - Configure transcript directories
|
|
378
366
|
- `assist transcript clean <path>` - Clean any .vtt file and write the result to stdout (`--format <md|vtt>`, default `md`). Markdown chat log: `assist transcript clean ./raw.vtt > clean.md`; cleaned WebVTT with timings preserved: `assist transcript clean ./raw.vtt --format vtt > fixed.vtt`. `--timestamps` prefixes each markdown speaker turn with `[hh:mm:ss]`, so passages can be cited as ranges for `merge --select`: `assist transcript clean ./raw.vtt --format md --timestamps`
|
|
379
367
|
- `assist transcript list` - List raw .vtt filenames waiting in the pick-up directory
|
|
380
368
|
- `assist transcript merge <path...>` - Collapse several .vtt files into one transcript with `NOTE` provenance, rebasing cue times onto a continuous timeline (`--out <path>` to write a file instead of stdout): `assist transcript merge ./a.vtt ./b.vtt --out ./refinement.vtt`. `--select <file|->` takes keep/removed JSON (`-` reads it from stdin) naming the ranges to keep, so only those passages survive and the dropped ones are counted in the header: `assist transcript merge ./a.vtt ./b.vtt --select ./selection.json`. `--no-provenance` omits every `NOTE` — the Collapsed-from header, the per-passage source marks and the removed count — for an output going somewhere the source names and cut points should not follow: `assist transcript merge ./a.vtt ./b.vtt --select ./selection.json --no-provenance`. `--widen-audience` retunes the language for a reader who was not in the call: the casual asides pitched at the people who were — an intensifier before a word, emphasis after a wh-word, a standalone interjection — are deleted, along with any cue that is nothing but one, leaving anything that carries meaning (verb, idiom, decision marker, predicate adjective, noun, reported speech) for you to judge: `assist transcript merge ./a.vtt ./b.vtt --no-provenance --widen-audience`
|
|
381
369
|
- `assist transcript move <file>` - Convert a raw .vtt to a dated markdown transcript and archive the original
|
|
382
|
-
- `assist voice setup` - Download required voice models (VAD, STT)
|
|
383
|
-
- `assist voice start [--foreground]` - Start the voice daemon (always-on, listens for wake word)
|
|
384
|
-
- `assist voice stop` - Stop the voice daemon
|
|
385
|
-
- `assist voice status` - Check voice daemon status and recent events
|
|
386
|
-
- `assist voice devices` - List available audio input devices
|
|
387
|
-
- `assist voice logs [-n <count>]` - Show recent voice daemon log entries
|
|
388
370
|
|
|
389
371
|
### Sessions
|
|
390
372
|
|
|
@@ -397,7 +379,6 @@ The Config tab of the sessions web dashboard never receives secret values: `GET
|
|
|
397
379
|
- `assist sessions nodes [--json]` - List this node and every linked node with its link state (see [Linked nodes](#linked-nodes))
|
|
398
380
|
- `assist sessions nodes link <name> [url] [--tailscale <host> --port <port>] [--ssh <alias> --port <port>] [--local-port <port>]` - Link a peer node by its web server URL, its Tailscale name, or over an ssh tunnel
|
|
399
381
|
- `assist sessions nodes unlink <name>` - Remove a linked node
|
|
400
|
-
- `assist sessions nodes serve [-p, --port <port>]` - Expose this node's web server on the tailnet with `tailscale serve` and print the command that links it
|
|
401
382
|
- `assist sessions nodes doctor [name] [--json]` - Probe each hop of every link (or one) and stop at the first failure with a remediation
|
|
402
383
|
- `assist sessions nodes logs <name> [-n, --lines <count>] [--json]` - Tail a linked node's `daemon.log` through its web server
|
|
403
384
|
- `assist sessions set-status <status>` - Report the current session's status (`running`/`waiting`) to the daemon; invoked by the Claude Code hooks the daemon wires into each session
|
|
@@ -437,7 +418,6 @@ Each assist install is a **node** with its own daemon and web server. A node can
|
|
|
437
418
|
- `assist sessions nodes [--json]` — this node and each link's state (connected / connecting / disconnected / version-blocked), peer version and last error.
|
|
438
419
|
- `assist sessions nodes link <name> <url>` — link a peer by its web server URL, e.g. `assist sessions nodes link <name> http://127.0.0.1:<port>`. `<name>` must match the peer's `sessions.nodeName`. A running daemon picks up the change immediately; the command confirms the reload, or warns when the daemon could not be notified. With `--tailscale <host> --port <port>` it writes a url link to `https://<host>.<tailnet>.ts.net:<port>`, reading the tailnet's MagicDNS suffix from `tailscale status --json` (`tailscale.exe` under WSL); see [Linking machines over Tailscale](#linking-machines-over-tailscale). With `--ssh <alias> --port <port>` the link goes over ssh instead: the daemon keeps `ssh -N -L <local-port>:127.0.0.1:<port> <alias>` up, restarting it behind the link's circuit breaker and logging its stderr to `daemon.log` as `link <name> ssh:`, and the link and `?node=` panel requests dial the local end. `--local-port` defaults to 43000 + `port` % 1000, bumped past any other link's.
|
|
439
420
|
- `assist sessions nodes unlink <name>` — remove a link.
|
|
440
|
-
- `assist sessions nodes serve [-p, --port <port>]` — runs `tailscale serve --bg --https=<port> http://127.0.0.1:<port>` for this node's web server port (default 3100; `tailscale.exe` under WSL), skipping it when `tailscale serve status --json` already proxies that port there, then prints the `https://<host>.<tailnet>.ts.net:<port>` URL and the `assist sessions nodes link <this node> --tailscale <host> --port <port>` command to run on other nodes.
|
|
441
421
|
- `assist sessions nodes doctor [name] [--json]` — probes each link's hops in order: for a `*.ts.net` link, local Tailscale running and the peer host online in `tailscale status`; for an ssh link, the SSH agent (the alias's `IdentityAgent` answering `ssh-add -l`), `ssh -o BatchMode=yes <alias>` reach and auth, and the local tunnel port accepting; then the peer's web server (`GET /api/health`, including that its `nodeName` matches the link), the peer's daemon (as its health reports it), a WebSocket `hello` (version and protocol), then this node's own link state. It stops at the first failing hop and prints the raw error with a remediation, and exits 1 on any failure. On WSL with no links, it reports a Windows node answering on `127.0.0.1:3101` and prints the command that links it.
|
|
442
422
|
- `assist sessions nodes logs <name> [-n, --lines <count>] [--json]` — tail a linked node's `daemon.log` (default 200 lines) through its web server's `GET /api/daemon-log`; naming this node reads the local log.
|
|
443
423
|
- `sessions.linkVersionCheck` — reaction to a version mismatch with a linked node: `block` (default) heals an older peer by calling its `POST /api/self-update` (runs `assist update`, then restarts its daemon and web server) and reconnects, latching with an error if the gap remains or this node is the older side (a latched link re-checks the peer every minute and reconnects once the versions match); `warn` proceeds anyway; `off` skips the check.
|
|
@@ -449,13 +429,7 @@ With more than one node, a machine picker appears in the top nav and a machine s
|
|
|
449
429
|
The sessions web server listens on `127.0.0.1` only. Each peer exposes it on its tailnet name with `tailscale serve`, and the linking node dials it over HTTPS, so links keep working off the home network.
|
|
450
430
|
|
|
451
431
|
1. Install Tailscale on every machine and sign in to the same tailnet. In the admin console's DNS page, turn on MagicDNS and HTTPS certificates. On WSL the Tailscale CLI is the Windows one, `tailscale.exe`.
|
|
452
|
-
2.
|
|
453
|
-
|
|
454
|
-
```
|
|
455
|
-
assist sessions nodes serve --port 3100 # in WSL
|
|
456
|
-
assist sessions nodes serve --port 3101 # in Windows
|
|
457
|
-
```
|
|
458
|
-
|
|
432
|
+
2. Each web server serves its own port on the tailnet when it starts: `tailscale serve --bg --https=<port> http://127.0.0.1:<port>`, skipped when `tailscale serve status --json` already proxies that port there, when Tailscale is not installed or running, or when `sessions.tailscaleServe` is false. It logs one `tailscale serve:` line to its stdout. On a PC whose WSL node serves 3100 and Windows node 3101, both go through the Windows Tailscale (WSL's through `tailscale.exe`, reaching its `127.0.0.1:3100` through localhost forwarding), retrying when their writes to its serve config collide at login.
|
|
459
433
|
3. Link the nodes by Tailscale host name. From the Mac to both PC nodes:
|
|
460
434
|
|
|
461
435
|
```
|
|
@@ -463,7 +437,7 @@ The sessions web server listens on `127.0.0.1` only. Each peer exposes it on its
|
|
|
463
437
|
assist sessions nodes link pc-windows --tailscale pc --port 3101
|
|
464
438
|
```
|
|
465
439
|
|
|
466
|
-
4. Check each link with `assist sessions nodes doctor`; a failed web hop on a `*.ts.net` link
|
|
440
|
+
4. Check each link with `assist sessions nodes doctor`; a failed web hop on a `*.ts.net` link points at the `tailscale serve:` line in the peer's web server log.
|
|
467
441
|
|
|
468
442
|
#### Linking machines over ssh
|
|
469
443
|
|
|
@@ -496,6 +470,7 @@ A remote node is reached through an ssh tunnel to its loopback web server, with
|
|
|
496
470
|
### Session config keys
|
|
497
471
|
|
|
498
472
|
- `sessions.nodeName` — this install's node label, shown at the top of the web UI's hamburger menu and reported by `GET /api/health` (with the assist version, protocol and whether the daemon is reachable). Defaults to the OS hostname, suffixed `-wsl` under WSL.
|
|
473
|
+
- `sessions.tailscaleServe` — defaults to **true**: the web server exposes its port on the tailnet with `tailscale serve` when it starts (see [Linking machines over Tailscale](#linking-machines-over-tailscale)). Set it false to keep that node off the tailnet.
|
|
499
474
|
- `sessions.includeCommittedChanges` — defaults to **true**: the card's change counts, the `/diff` view and its scope picker cover the commits recorded against the session's backlog item as well as uncommitted work, so the change link survives the agent committing. Each committed path is diffed against the parent of the earliest of those commits that touched it, so nothing outside the item's own commits is shown. Set it false to count and diff only uncommitted changes. A session whose item has no recorded commits and a clean tree still shows nothing either way.
|
|
500
475
|
- `sessions.topBar` — defaults to **true**: a sticky top bar inside the terminal panel carrying the session's ids, backlog chip and story name, the phase caption, elapsed time, the Continue/Auto-run/Dismiss switches and the session actions. Set it false to keep all of that on the card instead.
|
|
501
476
|
- `sessions.floatWaiting` — defaults to **true**: sessions that have been `waiting` on input for longer than the threshold float above the other cards, longest waiting first. Set it false to keep the star-only ordering; starred sessions still sort above everything.
|
package/allowed.cli-reads
CHANGED
package/allowed.cli-writes
CHANGED
package/claude/settings.json
CHANGED
|
@@ -40,10 +40,7 @@
|
|
|
40
40
|
"SessionStart": [
|
|
41
41
|
{
|
|
42
42
|
"matcher": "",
|
|
43
|
-
"hooks": [
|
|
44
|
-
{ "type": "command", "command": "assist handover load" },
|
|
45
|
-
{ "type": "command", "command": "assist advise --hook" }
|
|
46
|
-
]
|
|
43
|
+
"hooks": [{ "type": "command", "command": "assist advise --hook" }]
|
|
47
44
|
}
|
|
48
45
|
]
|
|
49
46
|
},
|
|
@@ -55,26 +52,12 @@
|
|
|
55
52
|
"SlashCommand(/refactor)",
|
|
56
53
|
"SlashCommand(/review-pr-comments)",
|
|
57
54
|
"SlashCommand(/transcripts)",
|
|
58
|
-
"SlashCommand(/voice-setup)",
|
|
59
|
-
"SlashCommand(/voice-start)",
|
|
60
|
-
"SlashCommand(/voice-stop)",
|
|
61
|
-
"SlashCommand(/voice-status)",
|
|
62
|
-
"SlashCommand(/voice-logs)",
|
|
63
|
-
"SlashCommand(/journal)",
|
|
64
|
-
"SlashCommand(/standup)",
|
|
65
55
|
"Skill(verify)",
|
|
66
56
|
"Skill(commit)",
|
|
67
57
|
"Skill(devlog)",
|
|
68
58
|
"Skill(refactor)",
|
|
69
59
|
"Skill(review-pr-comments)",
|
|
70
60
|
"Skill(transcripts)",
|
|
71
|
-
"Skill(journal)",
|
|
72
|
-
"Skill(standup)",
|
|
73
|
-
"Skill(voice-setup)",
|
|
74
|
-
"Skill(voice-start)",
|
|
75
|
-
"Skill(voice-stop)",
|
|
76
|
-
"Skill(voice-status)",
|
|
77
|
-
"Skill(voice-logs)",
|
|
78
61
|
"Skill(jira)",
|
|
79
62
|
"SlashCommand(/jira)",
|
|
80
63
|
"Skill(github)",
|
|
@@ -96,10 +79,6 @@
|
|
|
96
79
|
"SlashCommand(/test-cover)",
|
|
97
80
|
"Skill(test-review)",
|
|
98
81
|
"SlashCommand(/test-review)",
|
|
99
|
-
"Skill(handover)",
|
|
100
|
-
"SlashCommand(/handover)",
|
|
101
|
-
"Skill(recall)",
|
|
102
|
-
"SlashCommand(/recall)",
|
|
103
82
|
"Skill(strip-code-comments)",
|
|
104
83
|
"SlashCommand(/strip-code-comments)",
|
|
105
84
|
"Skill(subtask)",
|