@robota-sdk/agent-transport 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 CHANGED
@@ -1,5 +1,42 @@
1
1
  # @robota-sdk/agent-transport
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
+ - Updated dependencies
9
+ - Updated dependencies [66af868]
10
+ - Updated dependencies [7d9cc66]
11
+ - Updated dependencies [7d9cc66]
12
+ - Updated dependencies [7d9cc66]
13
+ - Updated dependencies [7d9cc66]
14
+ - Updated dependencies [7d9cc66]
15
+ - Updated dependencies [7d9cc66]
16
+ - Updated dependencies [7d9cc66]
17
+ - Updated dependencies [7d9cc66]
18
+ - Updated dependencies [7d9cc66]
19
+ - Updated dependencies [7d9cc66]
20
+ - @robota-sdk/agent-core@3.0.0-beta.87
21
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.87
22
+ - @robota-sdk/agent-interface-command@3.0.0-beta.87
23
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.87
24
+ - @robota-sdk/agent-interface-session@3.0.0-beta.87
25
+ - @robota-sdk/agent-interface-session-mobility@3.0.0-beta.87
26
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.87
27
+
28
+ ## 3.0.0-beta.86
29
+
30
+ ### Patch Changes
31
+
32
+ - @robota-sdk/agent-core@3.0.0-beta.86
33
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.86
34
+ - @robota-sdk/agent-interface-command@3.0.0-beta.86
35
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.86
36
+ - @robota-sdk/agent-interface-session@3.0.0-beta.86
37
+ - @robota-sdk/agent-interface-session-mobility@3.0.0-beta.86
38
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.86
39
+
3
40
  ## 3.0.0-beta.85
4
41
 
5
42
  ### Patch Changes
@@ -87,7 +124,7 @@
87
124
  - Session notices keep only `session-error` and `protocol-error`.
88
125
  - The state gains `commandCatalog` and `sessionStatus`.
89
126
  - `agent-command` registers `/theme` and `/keybindings` even without a terminal. They then answer
90
- that they belong to the robota terminal, instead of being unknown.
127
+ that they belong to the Robota terminal, instead of being unknown.
91
128
  - `agent-framework`:
92
129
  - `InteractiveSession.getStatusSnapshot()`.
93
130
  - The main-thread row previews the last chat message instead of the last record's type.
@@ -311,7 +348,7 @@
311
348
  The tool reaches only files inside the workspace whose path does not look like it holds secrets
312
349
  (`.env*`, `~/.ssh`, keys and credentials), and it does not exist in a turn a peer's message started.
313
350
  - The receiving operator approves every file. A received file is kept as an inert copy (mode 0600)
314
- under `~/.robota/peer-files/<sender>/`. It is never run and never placed in the model's context.
351
+ under `$PRODUCT_USER_STATE_DIR/peer-files/<sender>/`. It is never run and never placed in the model's context.
315
352
  The conversation is told only its name, size and sha256. A name that leaves that directory is
316
353
  refused, a symbolic link is never written through, and nothing is overwritten.
317
354
  - Transfers travel on a channel of their own (a separate connection on this host, a separate data
@@ -467,7 +504,7 @@
467
504
  project/user definitions > injected > built-in. `AgentDefinitionLoader` now dedupes within that tier
468
505
  (first wins). Absent ⇒ unchanged behavior.
469
506
  - **`@robota-sdk/agent-transport` / `@robota-sdk/agent-transport-tui`** — forward the optional
470
- `agentDefinitions` through the headless and TUI channels so every robota surface carries the seam.
507
+ `agentDefinitions` through the headless and TUI channels so every Robota surface carries the seam.
471
508
  - **`@robota-sdk/agent-cli`** — `robota`'s identity (branding, provider surface, presets,
472
509
  `packs: [codingPack]`, base command modules, injected transports/runners/subagent factory) is declared as
473
510
  data in a product profile and folded by `assembleProduct`. The coding command modules (`/shell`,
@@ -481,7 +518,7 @@
481
518
  autocomplete popup rather than mid-list, because they arrive from `pack-coding` and both surfaces render in
482
519
  module-insertion order. Same commands, same behavior, different position.
483
520
 
484
- - 0116a29: ARCH-006 completion — robota's capability packs now OWN its tool surface, and `pack-coding` is built by a
521
+ - 0116a29: ARCH-006 completion — Robota's capability packs now OWN its tool surface, and `pack-coding` is built by a
485
522
  context-bound factory.
486
523
 
487
524
  - **`@robota-sdk/pack-coding` (BREAKING)** — the module-level `codingPack` constant is **removed** and
@@ -495,9 +532,9 @@
495
532
  products in one process get independently-scoped file tools. Migration: replace `codingPack` with
496
533
  `createCodingPack({ cwd: process.cwd() })`.
497
534
  - **`@robota-sdk/agent-cli`** — `robota`'s packs are built from the shell's resolved `cwd`
498
- (`createRobotaPacks({ cwd })`) before command setup, and the runtime seam passes
499
- `ROBOTA_PACKS_OWN_TOOL_SURFACE` (an empty `defaultTools`) so the framework's `createDefaultTools()` tier
500
- is REPLACED. Every tool robota runs now arrives from a capability pack: dropping a pack drops its tools,
535
+ (`createProductCapabilityPacks({ cwd })`) before command setup, and the runtime seam passes
536
+ `PRODUCT_PACKS_OWN_TOOL_SURFACE` (an empty `defaultTools`) so the framework's `createDefaultTools()` tier
537
+ is REPLACED. Every tool Robota runs now arrives from a capability pack: dropping a pack drops its tools,
501
538
  exactly as it already dropped its command modules and subagents.
502
539
  - **`@robota-sdk/agent-transport` / `@robota-sdk/agent-transport-tui`** — forward the optional
503
540
  `additionalTools` and `defaultTools` through the headless and TUI channels, mirroring the existing
@@ -527,7 +564,7 @@
527
564
  branch events through protocol transports, and render deterministic bounded notices in the TUI.
528
565
  Transport-owned delivery failures now enter the owning carrier cleanup lifecycle without reversing
529
566
  an already-committed session operation.
530
- - 3244fb8: Fix a headless-run race (CI-001): the headless runner now resolves its exit code only AFTER the underlying `session.submit()` operation has fully settled, not off the terminal `complete`/`interrupted`/`error` event alone. Those events fire from inside the turn, BEFORE the turn's awaited `finally` runs session persistence / checkpoint finalize, so `run()`/`start()` previously returned while the session was still writing `.robota/` under cwd — a race a caller (or a test's cleanup) could lose (`ENOTEMPTY`). Each run now also emits exactly one terminal record. No change to exit codes or output shape.
567
+ - 3244fb8: Fix a headless-run race (CI-001): the headless runner now resolves its exit code only AFTER the underlying `session.submit()` operation has fully settled, not off the terminal `complete`/`interrupted`/`error` event alone. Those events fire from inside the turn, BEFORE the turn's awaited `finally` runs session persistence / checkpoint finalize, so `run()`/`start()` previously returned while the session was still writing `$PRODUCT_PROJECT_STATE_DIR/` under cwd — a race a caller (or a test's cleanup) could lose (`ENOTEMPTY`). Each run now also emits exactly one terminal record. No change to exit codes or output shape.
531
568
  - 4f3c075: Assemble complete, verified package generations before switching build output; preserve the previous generation on build failure and pack only verified regular-file images. Include copied CLI web assets in affected-build ordering and artifact transfer. Preserve the CLI version in managed build paths. Public runtime contracts remain compatible (patch).
532
569
  - Updated dependencies [9c19c50]
533
570
  - Updated dependencies [7b6234c]
@@ -661,7 +698,7 @@
661
698
 
662
699
  - **Preset system (PRESET-001~017):** new `@robota-sdk/agent-preset` package layering framework
663
700
  assembly options into named, selectable profiles (`default`, `autonomous-builder`, `careful-reviewer`,
664
- `neutral-executor`) plus user-authored external presets loaded from `~/.robota/presets/*.json`.
701
+ `neutral-executor`) plus user-authored external presets loaded from `$PRODUCT_USER_STATE_DIR/presets/*.json`.
665
702
  - **Live preset switching:** `/preset` command (list + active marker + switch) and a TUI active-preset
666
703
  display. Switching live re-applies permission posture, model/effort, persona, command-module
667
704
  selection, parallel-subagents gating, and a self-verification system-prompt section via the single
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @robota-sdk/agent-transport
2
2
 
3
- The shared protocol layer under every Robota transport. It defines the transport-neutral wire messages
3
+ The shared protocol layer under every agent runtime transport. It defines the transport-neutral wire messages
4
4
  (`TClientMessage` / `TServerMessage`), the session bridge that turns those messages into calls on a live
5
5
  session, and the delivery helpers a carrier needs (backpressure, resumable delivery, channel framing,
6
6
  handoff payload chunking). The WebSocket and WebRTC transports carry its wire protocol, and the HTTP and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robota-sdk/agent-transport",
3
- "version": "3.0.0-beta.85",
3
+ "version": "3.0.0-beta.87",
4
4
  "description": "Carrier-neutral wire protocol, session dispatch and delivery for Robota SDK transports",
5
5
  "type": "module",
6
6
  "main": "dist/node/index.js",
@@ -70,15 +70,6 @@
70
70
  },
71
71
  "./package.json": "./package.json"
72
72
  },
73
- "repository": {
74
- "type": "git",
75
- "url": "https://github.com/woojubb/robota.git",
76
- "directory": "packages/agent-transport"
77
- },
78
- "homepage": "https://docs.robota.io/en/packages/agent-transport/",
79
- "bugs": {
80
- "url": "https://github.com/woojubb/robota/issues"
81
- },
82
73
  "engines": {
83
74
  "node": ">=22.12.0"
84
75
  },
@@ -89,13 +80,13 @@
89
80
  ],
90
81
  "dependencies": {
91
82
  "jose": "6.2.3",
92
- "@robota-sdk/agent-interface-command": "3.0.0-beta.85",
93
- "@robota-sdk/agent-interface-session": "3.0.0-beta.85",
94
- "@robota-sdk/agent-core": "3.0.0-beta.85",
95
- "@robota-sdk/agent-interface-execution": "3.0.0-beta.85",
96
- "@robota-sdk/agent-interface-analytics": "3.0.0-beta.85",
97
- "@robota-sdk/agent-interface-session-mobility": "3.0.0-beta.85",
98
- "@robota-sdk/agent-interface-transport": "3.0.0-beta.85"
83
+ "@robota-sdk/agent-interface-analytics": "3.0.0-beta.87",
84
+ "@robota-sdk/agent-interface-command": "3.0.0-beta.87",
85
+ "@robota-sdk/agent-interface-execution": "3.0.0-beta.87",
86
+ "@robota-sdk/agent-interface-session": "3.0.0-beta.87",
87
+ "@robota-sdk/agent-core": "3.0.0-beta.87",
88
+ "@robota-sdk/agent-interface-transport": "3.0.0-beta.87",
89
+ "@robota-sdk/agent-interface-session-mobility": "3.0.0-beta.87"
99
90
  },
100
91
  "devDependencies": {
101
92
  "rimraf": "^5.0.10",
@@ -111,6 +102,14 @@
111
102
  "volta": {
112
103
  "extends": "../../package.json"
113
104
  },
105
+ "repository": {
106
+ "type": "git",
107
+ "url": "https://github.com/woojubb/robota"
108
+ },
109
+ "bugs": {
110
+ "url": "https://github.com/woojubb/robota/issues"
111
+ },
112
+ "homepage": "https://robota.io/",
114
113
  "scripts": {
115
114
  "build": "rimraf dist && tsdown",
116
115
  "build:js": "pnpm run build",
@@ -26,13 +26,13 @@ function response() {
26
26
  describe('shared bearer resource-server gate', () => {
27
27
  it('places the RFC 9728 metadata before the resource path and points every challenge at it', () => {
28
28
  const resource = describeProtectedResource({
29
- resource: 'https://robota.example/hooks/events/ci',
29
+ resource: 'https://agent.example.invalid/hooks/events/ci',
30
30
  issuer: 'https://auth.example',
31
31
  scopes: ['a', 'b'],
32
32
  label: 'Test',
33
33
  });
34
34
  expect(resource.wellKnownPath).toBe('/.well-known/oauth-protected-resource/hooks/events/ci');
35
- const metadata = 'https://robota.example/.well-known/oauth-protected-resource/hooks/events/ci';
35
+ const metadata = 'https://agent.example.invalid/.well-known/oauth-protected-resource/hooks/events/ci';
36
36
  expect(resource.challenges).toEqual({
37
37
  missing: `Bearer resource_metadata="${metadata}"`,
38
38
  invalid: `Bearer error="invalid_token", resource_metadata="${metadata}"`,
@@ -42,7 +42,7 @@ describe('shared bearer resource-server gate', () => {
42
42
 
43
43
  it('believes X-Forwarded-For only from a trusted proxy, and only its rightmost untrusted hop', () => {
44
44
  const server = createBearerResourceServer({
45
- publicUrl: 'https://robota.example',
45
+ publicUrl: 'https://agent.example.invalid',
46
46
  trustedProxies: ['127.0.0.1', '10.0.0.2'],
47
47
  label: 'Test',
48
48
  });
@@ -94,22 +94,22 @@ describe('shared bearer resource-server gate', () => {
94
94
  it('checks Host and Origin against the public URL and counts only the failures it is told of', () => {
95
95
  let clock = 0;
96
96
  const server = createBearerResourceServer({
97
- publicUrl: 'https://robota.example/hooks',
97
+ publicUrl: 'https://agent.example.invalid/hooks',
98
98
  label: 'Test',
99
99
  now: () => clock,
100
100
  });
101
101
  const ok = response();
102
- expect(server.checkNames(request({ host: 'robota.example' }), ok.res)).toBe(true);
102
+ expect(server.checkNames(request({ host: 'agent.example.invalid' }), ok.res)).toBe(true);
103
103
  expect(
104
104
  server.checkNames(
105
- request({ host: 'robota.example:443', origin: 'https://robota.example' }),
105
+ request({ host: 'agent.example.invalid:443', origin: 'https://agent.example.invalid' }),
106
106
  ok.res,
107
107
  ),
108
108
  ).toBe(true);
109
109
  const bad = response();
110
110
  expect(server.checkNames(request({ host: '127.0.0.1' }), bad.res)).toBe(false);
111
111
  expect(bad.written.status).toBe(403);
112
- const peer = request({ host: 'robota.example' }, '203.0.113.9');
112
+ const peer = request({ host: 'agent.example.invalid' }, '203.0.113.9');
113
113
  let last = server.fail(peer);
114
114
  for (let index = 1; index < 21; index += 1) last = server.fail(peer);
115
115
  expect(last).toMatchObject({ remote: 'public', throttled: true });
@@ -255,7 +255,7 @@ const SERVER_SAMPLES: Readonly<Record<TServerMessage['type'], TServerMessage>> =
255
255
  project_memory: {
256
256
  type: 'project_memory',
257
257
  requestId: 'project-memory-1',
258
- result: { kind: 'memory', content: '# Memory', path: '.robota/memory/MEMORY.md', truncated: false },
258
+ result: { kind: 'memory', content: '# Memory', path: '.fixture-state/memory/MEMORY.md', truncated: false },
259
259
  },
260
260
  background_task_event: { type: 'background_task_event', event: {} as never },
261
261
  background_job_group_event: { type: 'background_job_group_event', event: {} as never },
@@ -629,10 +629,10 @@ describe('decodeClientMessage (issue #2045)', () => {
629
629
  it.each([
630
630
  { field: 'mcpServerEnabled', serverId: 'docs', enabled: true },
631
631
  { field: 'reloadMcpServers' },
632
- { field: 'pluginEnabled', pluginId: 'formatter@robota', enabled: false },
632
+ { field: 'pluginEnabled', pluginId: 'formatter@fixture-agent', enabled: false },
633
633
  { field: 'reloadPlugins' },
634
- { field: 'installPlugin', pluginId: 'linter@robota' },
635
- { field: 'uninstallPlugin', pluginId: 'formatter@robota' },
634
+ { field: 'installPlugin', pluginId: 'linter@fixture-agent' },
635
+ { field: 'uninstallPlugin', pluginId: 'formatter@fixture-agent' },
636
636
  ] as const)('accepts the $field settings patch (#3282 §4 part b-2)', (patch) => {
637
637
  const message = { type: 'update-settings' as const, requestId: 'r', patch };
638
638
  expect(decodeClientMessage(JSON.parse(JSON.stringify(message)))).toEqual({
@@ -177,10 +177,10 @@ describe('settings messages (#3282 §4a)', () => {
177
177
  it.each([
178
178
  { field: 'mcpServerEnabled', serverId: 'docs', enabled: false },
179
179
  { field: 'reloadMcpServers' },
180
- { field: 'pluginEnabled', pluginId: 'formatter@robota', enabled: true },
180
+ { field: 'pluginEnabled', pluginId: 'formatter@fixture-agent', enabled: true },
181
181
  { field: 'reloadPlugins' },
182
- { field: 'installPlugin', pluginId: 'linter@robota' },
183
- { field: 'uninstallPlugin', pluginId: 'formatter@robota' },
182
+ { field: 'installPlugin', pluginId: 'linter@fixture-agent' },
183
+ { field: 'uninstallPlugin', pluginId: 'formatter@fixture-agent' },
184
184
  ] as const)('round-trips the $field patch through the reporter', async (patch) => {
185
185
  const reporter = createReporter();
186
186
  const client = attach({ reporter });