@robota-sdk/agent-transport 3.0.0-beta.86 → 3.0.0-beta.88

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.88
4
+
5
+ ### Patch Changes
6
+
7
+ - @robota-sdk/agent-core@3.0.0-beta.88
8
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.88
9
+ - @robota-sdk/agent-interface-command@3.0.0-beta.88
10
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.88
11
+ - @robota-sdk/agent-interface-session@3.0.0-beta.88
12
+ - @robota-sdk/agent-interface-session-mobility@3.0.0-beta.88
13
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.88
14
+
15
+ ## 3.0.0-beta.87
16
+
17
+ ### Patch Changes
18
+
19
+ - 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.
20
+ - Updated dependencies
21
+ - Updated dependencies [66af868]
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
+ - @robota-sdk/agent-core@3.0.0-beta.87
33
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.87
34
+ - @robota-sdk/agent-interface-command@3.0.0-beta.87
35
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.87
36
+ - @robota-sdk/agent-interface-session@3.0.0-beta.87
37
+ - @robota-sdk/agent-interface-session-mobility@3.0.0-beta.87
38
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.87
39
+
3
40
  ## 3.0.0-beta.86
4
41
 
5
42
  ### Patch Changes
@@ -99,7 +136,7 @@
99
136
  - Session notices keep only `session-error` and `protocol-error`.
100
137
  - The state gains `commandCatalog` and `sessionStatus`.
101
138
  - `agent-command` registers `/theme` and `/keybindings` even without a terminal. They then answer
102
- that they belong to the robota terminal, instead of being unknown.
139
+ that they belong to the Robota terminal, instead of being unknown.
103
140
  - `agent-framework`:
104
141
  - `InteractiveSession.getStatusSnapshot()`.
105
142
  - The main-thread row previews the last chat message instead of the last record's type.
@@ -323,7 +360,7 @@
323
360
  The tool reaches only files inside the workspace whose path does not look like it holds secrets
324
361
  (`.env*`, `~/.ssh`, keys and credentials), and it does not exist in a turn a peer's message started.
325
362
  - The receiving operator approves every file. A received file is kept as an inert copy (mode 0600)
326
- under `~/.robota/peer-files/<sender>/`. It is never run and never placed in the model's context.
363
+ under `$PRODUCT_USER_STATE_DIR/peer-files/<sender>/`. It is never run and never placed in the model's context.
327
364
  The conversation is told only its name, size and sha256. A name that leaves that directory is
328
365
  refused, a symbolic link is never written through, and nothing is overwritten.
329
366
  - Transfers travel on a channel of their own (a separate connection on this host, a separate data
@@ -479,7 +516,7 @@
479
516
  project/user definitions > injected > built-in. `AgentDefinitionLoader` now dedupes within that tier
480
517
  (first wins). Absent ⇒ unchanged behavior.
481
518
  - **`@robota-sdk/agent-transport` / `@robota-sdk/agent-transport-tui`** — forward the optional
482
- `agentDefinitions` through the headless and TUI channels so every robota surface carries the seam.
519
+ `agentDefinitions` through the headless and TUI channels so every Robota surface carries the seam.
483
520
  - **`@robota-sdk/agent-cli`** — `robota`'s identity (branding, provider surface, presets,
484
521
  `packs: [codingPack]`, base command modules, injected transports/runners/subagent factory) is declared as
485
522
  data in a product profile and folded by `assembleProduct`. The coding command modules (`/shell`,
@@ -493,7 +530,7 @@
493
530
  autocomplete popup rather than mid-list, because they arrive from `pack-coding` and both surfaces render in
494
531
  module-insertion order. Same commands, same behavior, different position.
495
532
 
496
- - 0116a29: ARCH-006 completion — robota's capability packs now OWN its tool surface, and `pack-coding` is built by a
533
+ - 0116a29: ARCH-006 completion — Robota's capability packs now OWN its tool surface, and `pack-coding` is built by a
497
534
  context-bound factory.
498
535
 
499
536
  - **`@robota-sdk/pack-coding` (BREAKING)** — the module-level `codingPack` constant is **removed** and
@@ -507,9 +544,9 @@
507
544
  products in one process get independently-scoped file tools. Migration: replace `codingPack` with
508
545
  `createCodingPack({ cwd: process.cwd() })`.
509
546
  - **`@robota-sdk/agent-cli`** — `robota`'s packs are built from the shell's resolved `cwd`
510
- (`createRobotaPacks({ cwd })`) before command setup, and the runtime seam passes
511
- `ROBOTA_PACKS_OWN_TOOL_SURFACE` (an empty `defaultTools`) so the framework's `createDefaultTools()` tier
512
- is REPLACED. Every tool robota runs now arrives from a capability pack: dropping a pack drops its tools,
547
+ (`createProductCapabilityPacks({ cwd })`) before command setup, and the runtime seam passes
548
+ `PRODUCT_PACKS_OWN_TOOL_SURFACE` (an empty `defaultTools`) so the framework's `createDefaultTools()` tier
549
+ is REPLACED. Every tool Robota runs now arrives from a capability pack: dropping a pack drops its tools,
513
550
  exactly as it already dropped its command modules and subagents.
514
551
  - **`@robota-sdk/agent-transport` / `@robota-sdk/agent-transport-tui`** — forward the optional
515
552
  `additionalTools` and `defaultTools` through the headless and TUI channels, mirroring the existing
@@ -539,7 +576,7 @@
539
576
  branch events through protocol transports, and render deterministic bounded notices in the TUI.
540
577
  Transport-owned delivery failures now enter the owning carrier cleanup lifecycle without reversing
541
578
  an already-committed session operation.
542
- - 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.
579
+ - 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.
543
580
  - 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).
544
581
  - Updated dependencies [9c19c50]
545
582
  - Updated dependencies [7b6234c]
@@ -673,7 +710,7 @@
673
710
 
674
711
  - **Preset system (PRESET-001~017):** new `@robota-sdk/agent-preset` package layering framework
675
712
  assembly options into named, selectable profiles (`default`, `autonomous-builder`, `careful-reviewer`,
676
- `neutral-executor`) plus user-authored external presets loaded from `~/.robota/presets/*.json`.
713
+ `neutral-executor`) plus user-authored external presets loaded from `$PRODUCT_USER_STATE_DIR/presets/*.json`.
677
714
  - **Live preset switching:** `/preset` command (list + active marker + switch) and a TUI active-preset
678
715
  display. Switching live re-applies permission posture, model/effort, persona, command-module
679
716
  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.86",
3
+ "version": "3.0.0-beta.88",
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-core": "3.0.0-beta.86",
93
- "@robota-sdk/agent-interface-analytics": "3.0.0-beta.86",
94
- "@robota-sdk/agent-interface-command": "3.0.0-beta.86",
95
- "@robota-sdk/agent-interface-execution": "3.0.0-beta.86",
96
- "@robota-sdk/agent-interface-session": "3.0.0-beta.86",
97
- "@robota-sdk/agent-interface-session-mobility": "3.0.0-beta.86",
98
- "@robota-sdk/agent-interface-transport": "3.0.0-beta.86"
83
+ "@robota-sdk/agent-core": "3.0.0-beta.88",
84
+ "@robota-sdk/agent-interface-analytics": "3.0.0-beta.88",
85
+ "@robota-sdk/agent-interface-command": "3.0.0-beta.88",
86
+ "@robota-sdk/agent-interface-execution": "3.0.0-beta.88",
87
+ "@robota-sdk/agent-interface-session": "3.0.0-beta.88",
88
+ "@robota-sdk/agent-interface-session-mobility": "3.0.0-beta.88",
89
+ "@robota-sdk/agent-interface-transport": "3.0.0-beta.88"
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 });