@robota-sdk/agent-command 3.0.0-beta.85 → 3.0.0-beta.87

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.
Files changed (62) hide show
  1. package/CHANGELOG.md +64 -12
  2. package/README.md +6 -3
  3. package/dist/node/index.cjs +72 -70
  4. package/dist/node/index.d.cts +16 -8
  5. package/dist/node/index.d.cts.map +1 -1
  6. package/dist/node/index.d.ts +16 -8
  7. package/dist/node/index.d.ts.map +1 -1
  8. package/dist/node/index.js +51 -49
  9. package/dist/node/index.js.map +1 -1
  10. package/package.json +15 -13
  11. package/src/agent/__tests__/agent-command.test.ts +5 -5
  12. package/src/agent/agent-command-module.ts +1 -1
  13. package/src/background/__tests__/background-command-module.test.ts +6 -6
  14. package/src/default/__tests__/__snapshots__/model-exposure.test.ts.snap +15 -4
  15. package/src/default/__tests__/default-command-modules.test.ts +2 -2
  16. package/src/default/__tests__/model-exposure.test.ts +18 -5
  17. package/src/default/__tests__/org-policy-forwarding.test.ts +1 -1
  18. package/src/default/default-command-modules.ts +2 -2
  19. package/src/devices/devices-command-module.ts +1 -1
  20. package/src/doctor/__tests__/doctor-command-module.test.ts +10 -10
  21. package/src/doctor/__tests__/doctor-display-vocabulary.test.ts +1 -1
  22. package/src/doctor/__tests__/doctor-fixture.ts +14 -14
  23. package/src/doctor/__tests__/doctor-runner.test.ts +57 -57
  24. package/src/doctor/doctor-storage-probe.ts +1 -1
  25. package/src/doctor/doctor-types.ts +2 -2
  26. package/src/editor/__tests__/editor-command-functional.test.ts +1 -1
  27. package/src/fork/__tests__/fork-command.test.ts +1 -1
  28. package/src/fork/fork-command-module.ts +1 -1
  29. package/src/git/__tests__/git-command-module.test.ts +1 -1
  30. package/src/handoff/__tests__/handoff-command-module.test.ts +1 -1
  31. package/src/handoff/handoff-command-module.ts +1 -1
  32. package/src/keybindings/keybindings-command-module.ts +1 -1
  33. package/src/mcp-activation/__tests__/mcp-activation-command.test.ts +8 -8
  34. package/src/mcp-activation/__tests__/mcp-model-view.test.ts +43 -12
  35. package/src/mcp-activation/__tests__/mcp-skill-command.test.ts +141 -0
  36. package/src/mcp-activation/mcp-activation-command-module.ts +27 -2
  37. package/src/mcp-activation/mcp-activation-command.ts +149 -15
  38. package/src/mcp-activation/mcp-model-notice.ts +19 -5
  39. package/src/mcp-activation/mcp-model-status.ts +7 -2
  40. package/src/memory/__tests__/memory-command-module.test.ts +89 -16
  41. package/src/memory/memory-command-module.ts +4 -1
  42. package/src/memory/memory-command.ts +53 -1
  43. package/src/peers/__tests__/peers-command-module.test.ts +1 -1
  44. package/src/peers/peers-command-module.ts +1 -1
  45. package/src/permissions/__tests__/permissions-command-module.test.ts +4 -4
  46. package/src/plugin/__tests__/plugin-active-turn.test.ts +100 -0
  47. package/src/plugin/__tests__/plugin-command-module.test.ts +7 -7
  48. package/src/plugin/plugin-command-module.ts +4 -0
  49. package/src/provider/provider-startup.ts +4 -2
  50. package/src/remote-control/__tests__/remote-control-command.test.ts +2 -2
  51. package/src/rewind/__tests__/rewind-command-module.test.ts +4 -3
  52. package/src/rewind/rewind-command.ts +27 -21
  53. package/src/schedule/schedule-command-module.ts +1 -1
  54. package/src/session/__tests__/session-command-module.test.ts +2 -2
  55. package/src/skills/__tests__/skill-read-command.test.ts +64 -0
  56. package/src/skills/__tests__/skills-command-module.test.ts +2 -1
  57. package/src/skills/skill-read-command.ts +60 -0
  58. package/src/skills/skills-command-module.ts +3 -2
  59. package/src/terminal-client/__tests__/terminal-client-commands.test.ts +1 -1
  60. package/src/theme/__tests__/theme-command.test.ts +1 -1
  61. package/src/theme/theme-command-module.ts +1 -1
  62. package/src/user-local/__tests__/user-local-command.test.ts +16 -16
package/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # @robota-sdk/agent-command
2
2
 
3
+ ## 3.0.0-beta.87
4
+
5
+ ### Patch Changes
6
+
7
+ - Release the migrated Robota product with its public SDK namespace, robota command, compatible SDK exports, internal product configuration, and verified CLI startup and delivery corrections.
8
+ - 7d9cc66: Keep host-declared inline human controls reachable during active turns. Plugin disable and uninstall can withdraw future dispatch without changing model invocation or host command policy.
9
+ - 7d9cc66: Allow authenticated attached users to correct and forget project memory while preserving host remote-command policy and rejecting model curation.
10
+ - 7d9cc66: Add user-only project memory topic correction and forgetting, prevent automatic restoration after restart, refresh retained startup context, and reconcile semantic recall with current durable source content.
11
+ - 7d9cc66: Add explicit MCP Skills selection, bounded supervisor access and persistent host content consent.
12
+ Users can inspect verified instructions, approve the exact content fingerprint and withdraw consent;
13
+ models can discover metadata only. Consent stays separate from server admission and model-turn activation.
14
+ - 7d9cc66: Route discovered MCP Skills through the shared skill command runtime with lazy verified content, source-bound invocation names, current user consent and execution-owned activation cleanup. Keep remote shell expressions inert and defer queued user skill reads until their own turn executes.
15
+ - 7d9cc66: Expose verified skill supporting resources only within their owning turn or fork, using the current host consent and manifest.
16
+ - Updated dependencies
17
+ - Updated dependencies [66af868]
18
+ - Updated dependencies [7d9cc66]
19
+ - Updated dependencies [7d9cc66]
20
+ - Updated dependencies [7d9cc66]
21
+ - Updated dependencies [7d9cc66]
22
+ - Updated dependencies [7d9cc66]
23
+ - Updated dependencies [7d9cc66]
24
+ - Updated dependencies [7d9cc66]
25
+ - Updated dependencies [7d9cc66]
26
+ - Updated dependencies [7d9cc66]
27
+ - Updated dependencies [7d9cc66]
28
+ - Updated dependencies [7d9cc66]
29
+ - Updated dependencies [7d9cc66]
30
+ - Updated dependencies [7d9cc66]
31
+ - Updated dependencies [7d9cc66]
32
+ - Updated dependencies [7d9cc66]
33
+ - Updated dependencies [7d9cc66]
34
+ - Updated dependencies [7d9cc66]
35
+ - Updated dependencies [7d9cc66]
36
+ - Updated dependencies [7d9cc66]
37
+ - @robota-sdk/agent-core@3.0.0-beta.87
38
+ - @robota-sdk/agent-framework@3.0.0-beta.87
39
+ - @robota-sdk/agent-interface-command@3.0.0-beta.87
40
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.87
41
+ - @robota-sdk/agent-interface-session@3.0.0-beta.87
42
+ - @robota-sdk/agent-preset@3.0.0-beta.87
43
+
44
+ ## 3.0.0-beta.86
45
+
46
+ ### Patch Changes
47
+
48
+ - @robota-sdk/agent-core@3.0.0-beta.86
49
+ - @robota-sdk/agent-framework@3.0.0-beta.86
50
+ - @robota-sdk/agent-interface-command@3.0.0-beta.86
51
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.86
52
+ - @robota-sdk/agent-interface-session@3.0.0-beta.86
53
+ - @robota-sdk/agent-preset@3.0.0-beta.86
54
+
3
55
  ## 3.0.0-beta.85
4
56
 
5
57
  ### Patch Changes
@@ -8,7 +60,7 @@
8
60
  with command completion. Disabled plugins stop being executable after reload, and unreadable
9
61
  settings clear the plugin skill snapshot. Hook changes require a new session.
10
62
  - db35dcd: MCP approvals now outlive the process, and an approval takes effect at once. The `robota` CLI keeps
11
- activation decisions in `~/.robota/mcp-approvals.json` (owner-only) unless the host passes its own
63
+ activation decisions in `$PRODUCT_USER_STATE_DIR/mcp-approvals.json` (owner-only) unless the host passes its own
12
64
  `mcpApprovalStore`, so an approved server connects at later starts until its definition changes.
13
65
  `/mcp approve <server>` now also connects the server in the running session, the way `/mcp reload`
14
66
  does, instead of waiting for a restart. A remote server without OAuth therefore connects once
@@ -167,7 +219,7 @@
167
219
  - Session notices keep only `session-error` and `protocol-error`.
168
220
  - The state gains `commandCatalog` and `sessionStatus`.
169
221
  - `agent-command` registers `/theme` and `/keybindings` even without a terminal. They then answer
170
- that they belong to the robota terminal, instead of being unknown.
222
+ that they belong to the Robota terminal, instead of being unknown.
171
223
  - `agent-framework`:
172
224
  - `InteractiveSession.getStatusSnapshot()`.
173
225
  - The main-thread row previews the last chat message instead of the last record's type.
@@ -237,7 +289,7 @@
237
289
  stays inside the project (every platform but Linux), none is composed: a checkpoint could be
238
290
  neither saved nor restored there.
239
291
  - `agent-command` (patch): where a session has no checkpoints, `/rewind` says why: a restricted
240
- workspace is told to run `robota trust --yes` and restart robota, and a host that cannot write
292
+ workspace is told to run `robota trust --yes` and restart Robota, and a host that cannot write
241
293
  the project safely says so. `/rewind list` reports this as a failed command instead of throwing.
242
294
  - `agent-framework` (minor): a checkpoint operation on a session without a store throws
243
295
  `EditCheckpointsUnavailableError`, whose `reason` is `host-cannot-write-project`,
@@ -295,7 +347,7 @@
295
347
  The tool reaches only files inside the workspace whose path does not look like it holds secrets
296
348
  (`.env*`, `~/.ssh`, keys and credentials), and it does not exist in a turn a peer's message started.
297
349
  - The receiving operator approves every file. A received file is kept as an inert copy (mode 0600)
298
- under `~/.robota/peer-files/<sender>/`. It is never run and never placed in the model's context.
350
+ under `$PRODUCT_USER_STATE_DIR/peer-files/<sender>/`. It is never run and never placed in the model's context.
299
351
  The conversation is told only its name, size and sha256. A name that leaves that directory is
300
352
  refused, a symbolic link is never written through, and nothing is overwritten.
301
353
  - Transfers travel on a channel of their own (a separate connection on this host, a separate data
@@ -358,7 +410,7 @@
358
410
  pairwise secret (`derivePairRendezvous(...).relayInbox()`).
359
411
  - `agent-cli` — a device holding the signing key reissues its roster and revocation list before they
360
412
  expire while an interactive session runs. The host can open this device's mesh endpoint from the
361
- identity under `~/.robota/devices`, saving newer lists a peer hands over; no command starts it yet.
413
+ identity under `$PRODUCT_USER_STATE_DIR/devices`, saving newer lists a peer hands over; no command starts it yet.
362
414
  - `agent-command` — `/devices add|join` still reports that enrolment is not available yet.
363
415
 
364
416
  - Updated dependencies [c7f9203]
@@ -375,7 +427,7 @@
375
427
 
376
428
  - 44fc732: Add `/devices` for this device's identity among the user's devices: `list`, `init` (creates the identity: a recovery phrase, the master-certified signing key, this device's keys and certificate, the first roster and revocation list), `revoke <device-id>` (signing key only, no phrase; confirmed at the terminal) and `recover` (rotates the signing key from the phrase and revokes the old ones). Enrolling another device (`add` / `join`) comes with the device connection.
377
429
 
378
- The recovery phrase never enters the session: it is shown once and read with no echo on the controlling terminal (opened apart from the session's input), on the alternate screen that is cleared afterwards, and never reaches prompt history, conversation history, transcripts, traces or the model. Without an interactive terminal the phrase commands refuse. `/devices` is operator-only: never model-invocable and refused from remote surfaces. Private keys live in the host credential store; certificates, roster, revocation lists and sequence marks are kept in owner-only files under `~/.robota/devices`.
430
+ The recovery phrase never enters the session: it is shown once and read with no echo on the controlling terminal (opened apart from the session's input), on the alternate screen that is cleared afterwards, and never reaches prompt history, conversation history, transcripts, traces or the model. Without an interactive terminal the phrase commands refuse. `/devices` is operator-only: never model-invocable and refused from remote surfaces. Private keys live in the host credential store; certificates, roster, revocation lists and sequence marks are kept in owner-only files under `$PRODUCT_USER_STATE_DIR/devices`.
379
431
 
380
432
  `agent-remote-pairing` adds `isRecoveryPhraseWord`, so a phrase can be checked one word at a time.
381
433
 
@@ -456,9 +508,9 @@
456
508
 
457
509
  ### Patch Changes
458
510
 
459
- - ec5e477: Add a credential store port (`ICredentialStore` in `agent-core`) and keep the CLI's secrets behind it: the OS keychain through the optional `@napi-rs/keyring` binding (macOS Keychain, Windows Credential Manager, Linux Secret Service), else an owner-only file under `~/.robota/credentials`. The backend is chosen at first use, recorded, and named by `/remote-control status`; a recorded keychain that stops working fails closed instead of degrading to the file.
511
+ - ec5e477: Add a credential store port (`ICredentialStore` in `agent-core`) and keep the CLI's secrets behind it: the OS keychain through the optional `@napi-rs/keyring` binding (macOS Keychain, Windows Credential Manager, Linux Secret Service), else an owner-only file under `$PRODUCT_USER_STATE_DIR/credentials`. The backend is chosen at first use, recorded, and named by `/remote-control status`; a recorded keychain that stops working fails closed instead of degrading to the file.
460
512
 
461
- The remote-control host identity key moves into the store. The old `~/.robota/remote-host-identity.json` may have been copied by backups or dotfile sync, so it is not carried over: on the first run after upgrading a new host key is generated, the old file is removed, and the operator is told once that trusted devices must pair again.
513
+ The remote-control host identity key moves into the store. The old `$PRODUCT_USER_STATE_DIR/remote-host-identity.json` may have been copied by backups or dotfile sync, so it is not carried over: on the first run after upgrading a new host key is generated, the old file is removed, and the operator is told once that trusted devices must pair again.
462
514
 
463
515
  - 007fd90: Authority per connection: pairing stays with the local operator, and driving needs the operator's yes.
464
516
 
@@ -583,7 +635,7 @@
583
635
  with an advisor. Sending history to a destination (provider type and endpoint host) the main model
584
636
  does not already use needs a one-time consent per destination, kept in the user settings file; a
585
637
  refusal is remembered for the session. The organization's `allowedProviders` applies, and
586
- `ROBOTA_DISABLE_ADVISOR=1` turns it off completely. In-process subagents inherit the advisor, bound
638
+ `PRODUCT_DISABLE_ADVISOR=1` turns it off completely. In-process subagents inherit the advisor, bound
587
639
  to their own conversation; child-process subagents do not get it.
588
640
 
589
641
  **`@robota-sdk/agent-framework` is `major` for one reason: `ICommandHostSessionAccess` gains a
@@ -648,10 +700,10 @@
648
700
 
649
701
  - af2f2ad: `/cd <directory>` continues the conversation in another directory.
650
702
 
651
- - **A move is a new session in the target directory.** In the TUI, robota saves a copy of the
703
+ - **A move is a new session in the target directory.** In the TUI, Robota saves a copy of the
652
704
  conversation where the target's session store will find it, ends the current run through its
653
705
  normal end-of-life flow, and starts again in the target directory resuming that copy. The target's
654
- settings, trust decision, tools, skills and `AGENTS.md` apply, exactly as if robota had been
706
+ settings, trust decision, tools, skills and `AGENTS.md` apply, exactly as if Robota had been
655
707
  launched there. The process boundary makes the move atomic, so no tool call can straddle it.
656
708
  - **The system prompt is kept as recorded**, so a provider's prompt cache survives. One appended
657
709
  `<workspace-move>` message tells the model the new directory, and which project instructions now
@@ -993,7 +1045,7 @@
993
1045
 
994
1046
  - **Preset system (PRESET-001~017):** new `@robota-sdk/agent-preset` package layering framework
995
1047
  assembly options into named, selectable profiles (`default`, `autonomous-builder`, `careful-reviewer`,
996
- `neutral-executor`) plus user-authored external presets loaded from `~/.robota/presets/*.json`.
1048
+ `neutral-executor`) plus user-authored external presets loaded from `$PRODUCT_USER_STATE_DIR/presets/*.json`.
997
1049
  - **Live preset switching:** `/preset` command (list + active marker + switch) and a TUI active-preset
998
1050
  display. Switching live re-applies permission posture, model/effort, persona, command-module
999
1051
  selection, parallel-subagents gating, and a self-verification system-prompt section via the single
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # @robota-sdk/agent-command
2
2
 
3
- The slash-command (`/cmd`) implementations for Robota agents, as command modules you register with an
4
- `agent-framework` runtime. The `robota` CLI builds its command set from this package; your own agent can
3
+ The slash-command (`/cmd`) implementations for agents, as command modules you register with an
4
+ `agent-framework` runtime. The configured CLI builds its command set from this package; your own agent can
5
5
  take the whole default set, a filtered subset, or individual modules.
6
6
 
7
7
  ## Installation
@@ -67,9 +67,12 @@ provides `/schedule`, `/monitor`, and `/loop`.
67
67
  | Agents and work | `/agent`, `/background`, `/goal`, `/plan`, `/schedule`, `/monitor`, `/loop` |
68
68
  | Terminal | `/shell`, `/editor`, `/keybindings`, `/theme`, `/statusline` |
69
69
  | Project and tools | `/git`, `/memory`, `/skills`, `/mcp`, `/plugin`, `/reload-plugins` |
70
+
70
71
  | Settings and state | `/settings`, `/reset`, `/user-local`, `/doctor` |
71
72
  | Other sessions | `/peers`, `/handoff`, `/events`, `/remote-control`, `/devices` |
72
73
 
74
+ `/memory correct <user|feedback|project|reference> <topic> <text>` replaces **every entry** in that topic. `/memory forget <topic>` removes the source topic file and its active index entries. Both operations are user-only and block subsequent automatic or model additions to that topic; use `correct` to deliberately restore it. Project memory retains only the current replacement or a topic tombstone in `lifecycle.json`, which remains authoritative if source cleanup is interrupted. Historical transcripts and backups remain. A configured semantic backend must support `removeTopic` for these commands; an index cleanup failure is reported, while active recall continues to read current durable source content. The next model turn refreshes its retained startup memory.
75
+
73
76
  `/doctor` and `/devices` are registered only when the host supplies their inputs (`doctorInputs`,
74
77
  `devicesPort`). `/shell`, `/editor`, `/keybindings` and `/theme` belong to the terminal the user sits at:
75
78
  a terminal attached to a workspace daemon runs them itself (see `createTerminalClientCommands`).
@@ -94,4 +97,4 @@ authority-backed store is refused explicitly.
94
97
  ## Documentation
95
98
 
96
99
  - [docs/SPEC.md](./docs/SPEC.md) — package contract and per-command guarantees
97
- - [CLI guide](../../content/guide/cli.md) — using the commands in the `robota` CLI
100
+ - [CLI guide](../../content/guide/cli.md) — using the commands in the configured CLI