@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.
- package/CHANGELOG.md +64 -12
- package/README.md +6 -3
- package/dist/node/index.cjs +72 -70
- package/dist/node/index.d.cts +16 -8
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.ts +16 -8
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +51 -49
- package/dist/node/index.js.map +1 -1
- package/package.json +15 -13
- package/src/agent/__tests__/agent-command.test.ts +5 -5
- package/src/agent/agent-command-module.ts +1 -1
- package/src/background/__tests__/background-command-module.test.ts +6 -6
- package/src/default/__tests__/__snapshots__/model-exposure.test.ts.snap +15 -4
- package/src/default/__tests__/default-command-modules.test.ts +2 -2
- package/src/default/__tests__/model-exposure.test.ts +18 -5
- package/src/default/__tests__/org-policy-forwarding.test.ts +1 -1
- package/src/default/default-command-modules.ts +2 -2
- package/src/devices/devices-command-module.ts +1 -1
- package/src/doctor/__tests__/doctor-command-module.test.ts +10 -10
- package/src/doctor/__tests__/doctor-display-vocabulary.test.ts +1 -1
- package/src/doctor/__tests__/doctor-fixture.ts +14 -14
- package/src/doctor/__tests__/doctor-runner.test.ts +57 -57
- package/src/doctor/doctor-storage-probe.ts +1 -1
- package/src/doctor/doctor-types.ts +2 -2
- package/src/editor/__tests__/editor-command-functional.test.ts +1 -1
- package/src/fork/__tests__/fork-command.test.ts +1 -1
- package/src/fork/fork-command-module.ts +1 -1
- package/src/git/__tests__/git-command-module.test.ts +1 -1
- package/src/handoff/__tests__/handoff-command-module.test.ts +1 -1
- package/src/handoff/handoff-command-module.ts +1 -1
- package/src/keybindings/keybindings-command-module.ts +1 -1
- package/src/mcp-activation/__tests__/mcp-activation-command.test.ts +8 -8
- package/src/mcp-activation/__tests__/mcp-model-view.test.ts +43 -12
- package/src/mcp-activation/__tests__/mcp-skill-command.test.ts +141 -0
- package/src/mcp-activation/mcp-activation-command-module.ts +27 -2
- package/src/mcp-activation/mcp-activation-command.ts +149 -15
- package/src/mcp-activation/mcp-model-notice.ts +19 -5
- package/src/mcp-activation/mcp-model-status.ts +7 -2
- package/src/memory/__tests__/memory-command-module.test.ts +89 -16
- package/src/memory/memory-command-module.ts +4 -1
- package/src/memory/memory-command.ts +53 -1
- package/src/peers/__tests__/peers-command-module.test.ts +1 -1
- package/src/peers/peers-command-module.ts +1 -1
- package/src/permissions/__tests__/permissions-command-module.test.ts +4 -4
- package/src/plugin/__tests__/plugin-active-turn.test.ts +100 -0
- package/src/plugin/__tests__/plugin-command-module.test.ts +7 -7
- package/src/plugin/plugin-command-module.ts +4 -0
- package/src/provider/provider-startup.ts +4 -2
- package/src/remote-control/__tests__/remote-control-command.test.ts +2 -2
- package/src/rewind/__tests__/rewind-command-module.test.ts +4 -3
- package/src/rewind/rewind-command.ts +27 -21
- package/src/schedule/schedule-command-module.ts +1 -1
- package/src/session/__tests__/session-command-module.test.ts +2 -2
- package/src/skills/__tests__/skill-read-command.test.ts +64 -0
- package/src/skills/__tests__/skills-command-module.test.ts +2 -1
- package/src/skills/skill-read-command.ts +60 -0
- package/src/skills/skills-command-module.ts +3 -2
- package/src/terminal-client/__tests__/terminal-client-commands.test.ts +1 -1
- package/src/theme/__tests__/theme-command.test.ts +1 -1
- package/src/theme/theme-command-module.ts +1 -1
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
`
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
4
|
-
`agent-framework` runtime. The
|
|
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
|
|
100
|
+
- [CLI guide](../../content/guide/cli.md) — using the commands in the configured CLI
|