@staff0rd/assist 0.962.0 → 0.964.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 CHANGED
@@ -150,7 +150,7 @@ Every command supports `--help` for full detail on its flags and behaviour.
150
150
  - `--checkout-only` - Skip the review; check the PR out and leave an idle Claude session in it. In a clone whose remote is on Azure DevOps it checks out with `az repos pr checkout` instead of `gh` (see [Azure DevOps PRs](#azure-devops-prs))
151
151
  - `--high-level` - Open the high-level review checklist in the web preview pane and post it to the PR as an Approve, Comment or Request changes review. Comments on lines selected in a diff or a test's source are either sent to the agent or added to the review, where those on lines in the PR diff post as line-level comments. See [docs/high-level-review.md](docs/high-level-review.md)
152
152
  - `--configure` - With `--high-level`: configure the checklist's `review.highLevel.*` keys instead of reviewing
153
- - `--scope <repo|project>` - With `--configure`: write to this repo's override in the shared assist database or the project `assist.yml` instead of asking
153
+ - `--scope <db|git>` - With `--configure`: write to repo (db), this repo's override in the shared assist database, or repo (git), the repo's `assist.yml`, instead of asking
154
154
  - `--answer <key=value>` - With `--configure`: answer one key without prompting, repeatable; an empty value leaves the key unset
155
155
  - `--address-comments` - Start an Address Comments session for the PR once comments are posted and the review submitted
156
156
  - `--announce` - Announce the PR in Slack at the end of the chain
@@ -176,7 +176,7 @@ Every command supports `--help` for full detail on its flags and behaviour.
176
176
  - `assist news remove <url>` - Remove a feed URL from `news.feeds`
177
177
  - `news.feeds` - The feed URLs, stored in the assist database so every machine shares them; `assist config set news.feeds <url1>,<url2>` replaces the whole list
178
178
  - `assist releases [list]` - Print the release promotion streams declared in `releases.streams`
179
- - `assist releases configure --streams <file> [--scope <project|repo>]` - Write release streams from a JSON or YAML file (`-` for stdin) to `releases.streams`, in the project `assist.yml` (default) or this repo's shared override in the assist database
179
+ - `assist releases configure --streams <file> [--scope <git|db>]` - Write release streams from a JSON or YAML file (`-` for stdin) to `releases.streams`, in repo (git), the repo's `assist.yml` (default), or repo (db), this repo's shared override in the assist database
180
180
 
181
181
  ### Backlog
182
182
 
@@ -237,12 +237,12 @@ A run entry's relative `cwd` (and a `link` path) resolves against the **repo roo
237
237
  - `assist config keys [filter]` - List every config key with its type, default, effect and setter, optionally filtered by name
238
238
  - `assist config get <key>` - Get a config value; secret values are hidden unless `--reveal` is passed
239
239
  - `assist config list` - List the config values that are set, with secret values hidden
240
- - `assist config set <key> <value>` - Set a config value. `--global` writes to `~/.assist.yml`; `-g --repo [name]` writes a per-repo override to the shared assist database, so every node on that database sees it; `--user` writes user (db), a layer in the shared database that applies to every repo on every node, below `~/.assist.yml` (array keys such as `advice.rules` and `deny` concatenate with its entries first; `database.*` and `sync.autoConfirm` stay in `~/.assist.yml`)
241
- - `assist config unset <key>` - Remove a config value so the key falls back to the global value or schema default (`-g` targets `~/.assist.yml`; `-g --repo [name]` removes it from the shared per-repo override; `--user` removes it from user (db))
240
+ - `assist config set <key> <value>` - Set a config value. With no scope flag it writes repo (git), the repo's `assist.yml`; `--repo [name]` writes repo (db), a per-repo override in the shared assist database that every node on that database sees; `--node` writes user (node), this node's `~/.assist.yml`; `--user` writes user (db), a layer in the shared database that applies to every repo on every node. Precedence is repo (git) > repo (db) > user (node) > user (db); array keys such as `advice.rules` and `deny` concatenate across scopes, user (db) entries first. `database.*` and `sync.autoConfirm` stay in user (node)
241
+ - `assist config unset <key>` - Remove a config value so the key falls back to a lower scope or the schema default, taking the same `--repo [name]`, `--node` and `--user` flags
242
242
  - `assist config import-repos` - Move this machine's `~/.assist.yml` `repos:` overrides into the shared database: prints a per-key diff against each repo's shared override, then on confirmation writes the keys and removes `repos:` from `~/.assist.yml`
243
243
  - `assist config import-user [keys...]` - Move keys (default `advice.rules`) from this node's `~/.assist.yml` into user (db): prints a diff against user (db) (array keys gain only the entries it lacks), then on confirmation writes them and removes the keys from `~/.assist.yml`. `loadConfig` warns while `~/.assist.yml` holds `advice.rules` entries user (db) lacks
244
244
 
245
- The web config page's "This repo" scope reads and writes the same shared override. Each node mirrors the shared per-repo overrides into `~/.assist/repo-config-cache.json` when its daemon starts, every minute while it runs, and after its own repo-scope writes, and resolves config from that snapshot, so an unreachable database leaves the last snapshot in effect. A `repos:` entry in `~/.assist.yml` still applies, with a warning naming `assist config import-repos`, until the shared database holds an override for that repo, after which it is ignored.
245
+ The web config page's "repo (db)" scope reads and writes the same shared override. Each node mirrors the shared per-repo overrides into `~/.assist/repo-config-cache.json` when its daemon starts, every minute while it runs, and after its own repo-scope writes, and resolves config from that snapshot, so an unreachable database leaves the last snapshot in effect. A `repos:` entry in `~/.assist.yml` still applies, with a warning naming `assist config import-repos`, until the shared database holds an override for that repo, after which it is ignored.
246
246
 
247
247
  The Config tab of the sessions web dashboard never shows secret values; their fields are write-only.
248
248
 
@@ -294,8 +294,8 @@ Rules are `- **<code>** — **<title>** — <text>` bullets, the title optional,
294
294
  - `assist cli-hook add <cli>` - Discover a CLI's commands and auto-permit read-only ones
295
295
  - `assist cli-hook check <command> [--tool <tool>]` - Check whether a command would be auto-approved
296
296
  - `assist cli-hook deny` - List all deny rules
297
- - `assist cli-hook deny add <pattern> <message>` - Add a deny rule for a command pattern
298
- - `assist cli-hook deny remove <pattern>` - Remove a deny rule by pattern
297
+ - `assist cli-hook deny add <pattern> <message> [--node]` - Add a deny rule for a command pattern to the repo's `assist.yml`, or with `--node` to user (node), this node's `~/.assist.yml`
298
+ - `assist cli-hook deny remove <pattern> [--node]` - Remove a deny rule by pattern
299
299
  - `assist codex-hook` - Codex hook that auto-approves read-only commands and reports session status to the sessions dashboard
300
300
  - `assist pi-hook` - pi permission gate that auto-approves read-only commands
301
301
  - `assist edit-hook` - PreToolUse hook that blocks `Edit`/`Write`/`MultiEdit` calls from adding, changing, or removing a `// assist-maintainability-override` marker, or from introducing a code comment (use `code-comment set`/`confirm` for the rare comment that belongs)
@@ -303,7 +303,7 @@ Rules are `- **<code>** — **<title>** — <text>` bullets, the title optional,
303
303
  - `assist code-comment confirm <pin>` - Insert the pinned comment at its file/line
304
304
  - `assist db-migration unlock` - Ask a human to approve creating the next migration module
305
305
  - `assist db-migration confirm <pin>` - Confirm a pin from `db-migration unlock`, letting that migration's file be written once
306
- - `assist advise [--hook] [--explain]` - Print the advice fragments that apply to the current repo; `--hook` runs it as a SessionStart hook and `--explain` shows why each fragment was or wasn't included. `advice.sections` forces a fragment in or out by name, `advice.verify` replaces the verify fragment's text, `advice.extra` appends repo notes and `advice.rules` (`{ title, text }` entries, global and repo lists concatenated, global first) adds a "Your rules" section
306
+ - `assist advise [--hook] [--explain]` - Print the advice fragments that apply to the current repo; `--hook` runs it as a SessionStart hook and `--explain` shows why each fragment was or wasn't included. `advice.sections` forces a fragment in or out by name, `advice.verify` replaces the verify fragment's text, `advice.extra` appends repo notes and `advice.rules` (`{ title, text }` entries, concatenated across every scope, user (db) first) adds a "Your rules" section
307
307
  - `assist notify` - Show desktop notification from JSON stdin (macOS, Windows, WSL)
308
308
  - `assist status-line` - Format Claude Code status line from JSON stdin
309
309
 
@@ -323,7 +323,7 @@ Rules are `- **<code>** — **<title>** — <text>` bullets, the title optional,
323
323
  - `assist jira auth` - Authenticate with Jira via API token
324
324
  - `assist jira ac <issue-key>` - Print acceptance criteria for a Jira issue
325
325
  - `assist jira view <issue-key>` - Print the title and description of a Jira issue
326
- - `assist miro extract [name] [--items <file>] [--top-left <id|link> --bottom-right <id|link>] [--ignore <file>] [--out <file>] [--board <id>] [--frame <id>] [--save <name>] [-g] [-r [repo]]` - Extract the text of every box inside a rectangle on a Miro board as an ordered YAML list. Omit the anchors to pick them in the web preview pane; `--save <name>` saves the selection under `miro.extracts` so `assist miro extract <name>` replays it
326
+ - `assist miro extract [name] [--items <file>] [--top-left <id|link> --bottom-right <id|link>] [--ignore <file>] [--out <file>] [--board <id>] [--frame <id>] [--save <name>] [--node] [-r [repo]]` - Extract the text of every box inside a rectangle on a Miro board as an ordered YAML list. Omit the anchors to pick them in the web preview pane; `--save <name>` saves the selection under `miro.extracts` so `assist miro extract <name>` replays it, in the repo's `assist.yml`, or with `--node` in user (node) or `-r [repo]` in repo (db)
327
327
  - `assist litellm list-models [--json]` - List the model ids the configured LiteLLM proxy serves
328
328
  - `assist ravendb auth add` - Add a new RavenDB connection
329
329
  - `assist ravendb auth list` - List configured RavenDB connections
@@ -428,7 +428,7 @@ Rules are `- **<code>** — **<title>** — <text>` bullets, the title optional,
428
428
 
429
429
  Web sessions are owned by a long-lived daemon process, not the web server: the server is a thin client relaying WebSocket traffic to the daemon over a local IPC socket (`~/.assist/daemon/daemon.sock`; per-user named pipe `\\.\pipe\assist-sessions-daemon-<user>` on Windows). Restarting the web server leaves sessions running with scrollback intact. The daemon logs to `~/.assist/daemon/daemon.log` and auto-exits once no sessions remain and no client has connected for 60 seconds. See [docs/session-lifecycle.md](docs/session-lifecycle.md).
430
430
 
431
- When assist is installed as a git clone, each daemon keeps that install current in the background: it runs `assist watch wait --pull --build` in the clone lap after lap, with no session card, logging each lap to `daemon.log` (prefixed `auto-update:`) and to the clone's history in `~/.assist/watchers/`. If the clone cannot fast-forward, the daemon starts one claude session in it that rebases (or merges) onto the upstream without force-pushing or resetting, pushes, rebuilds and closes; the loop pauses until that session ends. A rebuilt version takes effect once the daemon and web server are restarted. The version badge in the web UI opens the Updates page, which lists every node with its running and built version, restart advice and history, and offers Restart per node or for every ready node, Pause/Resume (a pause persists across daemon restarts) and Check now (an immediate fetch). Turn it off with `assist config set autoUpdate.enabled false -g`.
431
+ When assist is installed as a git clone, each daemon keeps that install current in the background: it runs `assist watch wait --pull --build` in the clone lap after lap, with no session card, logging each lap to `daemon.log` (prefixed `auto-update:`) and to the clone's history in `~/.assist/watchers/`. If the clone cannot fast-forward, the daemon starts one claude session in it that rebases (or merges) onto the upstream without force-pushing or resetting, pushes, rebuilds and closes; the loop pauses until that session ends. A rebuilt version takes effect once the daemon and web server are restarted. The version badge in the web UI opens the Updates page, which lists every node with its running and built version, restart advice and history, and offers Restart per node or for every ready node, Pause/Resume (a pause persists across daemon restarts) and Check now (an immediate fetch). Turn it off with `assist config set autoUpdate.enabled false --node`.
432
432
 
433
433
  The topnav's **+** button (or Ctrl+N / Alt+N; Cmd+N on macOS) opens the new-session dialog, which replaces the old draft / bug / prompt / design topnav buttons. Its mode selector picks `draft`, `bug`, `prompt` or `design`; in `prompt` mode a harness selector under it picks Claude, Codex or pi when those are exposed, and Up/Down moves between the two rows. `design` launches an interactive `claude` session with the vendored design system prompt appended via `--append-system-prompt`. Left/Right change the mode or harness, and Tab steps through a selector's options before moving on to the next control.
434
434
 
@@ -442,7 +442,7 @@ Every hotkey is Alt plus a left-hand key, one keyboard row per screen region, an
442
442
 
443
443
  Keys whose target is on Sessions return there first. Ctrl+/ (Cmd+/ on macOS) or the menu's **Keyboard shortcuts** item opens a sheet listing every sessions-view shortcut. The top-level tabs, the new-session button, the repo picker, the top-bar add agent / VS Code / done buttons, the active session's diff counts, the version badge, the config cog and the menu button show their chord in their tooltip on hover and keyboard focus.
444
444
 
445
- Each shortcut's chord can be overridden under `sessions.hotkeys.<action>`, e.g. `assist config set sessions.hotkeys.focusTerminal Ctrl+Alt+J -g`; restart the web server and reload the page to apply it. `assist sessions web --help` lists every action with its default. A chord is modifiers plus one key joined by `+`, such as `Alt+S`, `Ctrl+Shift+K` or `Mod+/`: the modifiers are `Ctrl`, `Alt` (`Option`), `Shift`, `Meta` (`Cmd`) and `Mod` (Cmd on macOS, Ctrl elsewhere), at least one of them other than Shift, and the key is a letter, digit, punctuation, `F1`–`F12` or a named key such as `Enter` or `ArrowUp`. Keys match the physical key, so macOS Option chords work. `navTab` takes modifiers only (e.g. `Ctrl+Alt`); its digits stay 1–6. An override replaces all of an action's default chords, and `assist config set` rejects an invalid chord. Tab card-cycling is fixed.
445
+ Each shortcut's chord can be overridden under `sessions.hotkeys.<action>`, e.g. `assist config set sessions.hotkeys.focusTerminal Ctrl+Alt+J --node`; restart the web server and reload the page to apply it. `assist sessions web --help` lists every action with its default. A chord is modifiers plus one key joined by `+`, such as `Alt+S`, `Ctrl+Shift+K` or `Mod+/`: the modifiers are `Ctrl`, `Alt` (`Option`), `Shift`, `Meta` (`Cmd`) and `Mod` (Cmd on macOS, Ctrl elsewhere), at least one of them other than Shift, and the key is a letter, digit, punctuation, `F1`–`F12` or a named key such as `Enter` or `ArrowUp`. Keys match the physical key, so macOS Option chords work. `navTab` takes modifiers only (e.g. `Ctrl+Alt`); its digits stay 1–6. An override replaces all of an action's default chords, and `assist config set` rejects an invalid chord. Tab card-cycling is fixed.
446
446
 
447
447
  Every live session card carries an **add-agent** button (👥) that starts a second agent inside that session's existing workspace rather than allocating a new one. While several agents share a workspace, only the last one to leave triggers teardown.
448
448
 
@@ -494,6 +494,8 @@ Needs macOS with Xcode, an iOS simulator or a device, and the Tailscale app on t
494
494
  3. `npm run ios:run` to pick a simulator or connected device, or `npm run ios:open` to build and run from Xcode (a device needs your Apple ID team set under **Signing & Capabilities**).
495
495
  4. On first launch, enter the home node's URL, e.g. `https://mac.<tailnet>.ts.net:3100`. It is stored on the device.
496
496
 
497
+ The app uses a phone layout rather than the desktop one. The session list groups sessions by status with **Needs you** (waiting and errored) first; pull down to refresh, tap **Done** to expand finished sessions, and use the clock icon for history. Tap a session to open it full screen: the terminal is read-only and never resizes the shared pty, so pinch to zoom and drag to pan. Type in the reply field (Return adds a line, the send button submits) or use the key strip for `1`/`2`/`3`, arrows, Esc, Tab and ⌃C.
498
+
497
499
  ### Session config keys
498
500
 
499
501
  - `sessions.nodeName` — this install's node label. Defaults to the OS hostname, suffixed `-wsl` under WSL.
@@ -544,12 +546,12 @@ The **Next** tab (`/next`) recommends what to do next, in this order:
544
546
  **Start session** runs in the item's local clone: PRs open the review dialog, issues open the new-session dialog, and pickups are assigned to you and moved to In Progress first. Project pickups need the gh `project` scope. See `assist sessions web --help` for each key.
545
547
 
546
548
  ```bash
547
- assist config set next.peers alice,bob -g --repo
548
- assist config set next.repos my-org,other/web -g --repo
549
- assist config set next.projects my-org/3,my-org/5 -g --repo
550
- assist config set next.pickStatuses Ready,Todo -g --repo
551
- assist config set next.excludeLabels blocked,spike -g --repo
552
- assist config set next.excludeTypes Epic -g --repo
549
+ assist config set next.peers alice,bob --repo
550
+ assist config set next.repos my-org,other/web --repo
551
+ assist config set next.projects my-org/3,my-org/5 --repo
552
+ assist config set next.pickStatuses Ready,Todo --repo
553
+ assist config set next.excludeLabels blocked,spike --repo
554
+ assist config set next.excludeTypes Epic --repo
553
555
  ```
554
556
 
555
557
  ## Parallel work
@@ -27,7 +27,7 @@ Write the raw response pages to a file (e.g. `board-items.json`) **exactly as re
27
27
 
28
28
  With no anchor flags the command renders the dump in the assist web UI preview pane, where the user clicks the top-left then the bottom-right box. **That needs the assist web UI running and this conversation attached to an assist session** — without one the command fails naming both flags rather than hanging. If it fails that way, tell the user to start the web UI (or supply the two ids).
29
29
 
30
- Pass `--save <name>` on a first-time run. The interactive "save this selection?" prompt only appears on a TTY, so an agent run that omits `--save` picks anchors and then discards them. Add `-g` (or `-g -r [repo]`) only if the user asks for a config level other than the project `assist.yml`; the command prints the file it wrote and, on later runs, the file the extract came from.
30
+ Pass `--save <name>` on a first-time run. The interactive "save this selection?" prompt only appears on a TTY, so an agent run that omits `--save` picks anchors and then discards them. Add `--node` (user (node)) or `-r [repo]` (repo (db)) only if the user asks for a config scope other than repo (git), the repo's `assist.yml`; the command prints the file it wrote and, on later runs, the file the extract came from.
31
31
 
32
32
  Add `--ignore <file>` (a YAML list of box texts) to drop banners and containers, and `--out <file>` to write the YAML with a provenance header instead of printing it.
33
33
 
@@ -35,8 +35,8 @@ A job with `uses: <owner>/<name>/.github/workflows/<file>@<ref>` calls a reusabl
35
35
 
36
36
  Show the nodes and edges you intend to write, and say which workflow file each node came from — including the reusable ones, so the user can see the chain you followed. Ask them to accept or edit, and ask which config file it goes to:
37
37
 
38
- - `project` — the repo's own `assist.yml`, checked in, so the team sees the same graph
39
- - `repo` — this repo's block in `~/.assist.yml`, personal to this machine
38
+ - `git` — repo (git), the repo's own `assist.yml`, checked in, so the team sees the same graph
39
+ - `db` — repo (db), this repo's override in the shared assist database, personal to the user and seen by every node
40
40
 
41
41
  Ask rather than guess: which jobs deserve a node at all, how jobs split into streams, what to call a stream, and any environment name that is computed rather than written literally.
42
42
 
@@ -45,7 +45,7 @@ Ask rather than guess: which jobs deserve a node at all, how jobs split into str
45
45
  Write the accepted streams to a JSON file and pass it in. Run the command from the repo you are in, never from another checkout: the config it writes belongs to the directory it runs in, whichever repos its streams point at. Set `repo` on any stream that releases another repo; one left out defaults to the repo you are in.
46
46
 
47
47
  ```
48
- assist releases configure --scope project --streams /tmp/streams.json
48
+ assist releases configure --scope git --streams /tmp/streams.json
49
49
  ```
50
50
 
51
51
  ```json
@@ -35,8 +35,8 @@ Do not ask in chat. Write the proposal as markdown to a scratch file with the Wr
35
35
  - `descriptionWordCap` with its value
36
36
  - `collapsedPaths`, each glob as its own bullet like the others
37
37
  - the scope you propose, with the other one named so the user can swap it:
38
- - `repo` — this repo's override in the shared assist database, personal to the user and seen by every node (propose this unless the user has said otherwise)
39
- - `project` — the repo's own `assist.yml`, a file to check in so the team reviews against the same globs; only when the user asks for it, since it leaves a new file in a repo they may not own
38
+ - `db` — repo (db), this repo's override in the shared assist database, personal to the user and seen by every node (propose this unless the user has said otherwise)
39
+ - `git` — repo (git), the repo's own `assist.yml`, a file to check in so the team reviews against the same globs; only when the user asks for it, since it leaves a new file in a repo they may not own
40
40
 
41
41
  Then run, **as a background task**, doing no other work until it returns:
42
42
 
@@ -55,7 +55,7 @@ Outside a web session `assist ask` only prints the markdown and exits 0 without
55
55
  Pass every key, so nothing is prompted for — you have already asked:
56
56
 
57
57
  ```
58
- assist review --high-level --configure --scope repo \
58
+ assist review --high-level --configure --scope db \
59
59
  --answer 'review.highLevel.criticalPaths=**/*.graphql,en-AU/translation.json' \
60
60
  --answer 'review.highLevel.uiPaths=src/ui/**' \
61
61
  --answer 'review.highLevel.descriptionWordCap=300' \