@staff0rd/assist 0.962.0 → 0.963.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
@@ -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