@robota-sdk/agent-transport 3.0.0-beta.79 → 3.0.0-beta.82

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 (113) hide show
  1. package/README.md +84 -26
  2. package/dist/browser/client.d.ts +2 -0
  3. package/dist/browser/client.js +1 -0
  4. package/dist/browser/index.d.ts +520 -0
  5. package/dist/browser/index.d.ts.map +1 -0
  6. package/dist/browser/index.js +2 -0
  7. package/dist/browser/index.js.map +1 -0
  8. package/dist/browser/message-decoders-BB8n-H2X.d.ts +252 -0
  9. package/dist/browser/message-decoders-BB8n-H2X.d.ts.map +1 -0
  10. package/dist/browser/message-decoders-CDmDoZPR.js +2 -0
  11. package/dist/browser/message-decoders-CDmDoZPR.js.map +1 -0
  12. package/dist/node/index.cjs +1 -1
  13. package/dist/node/index.d.cts +766 -0
  14. package/dist/node/index.d.cts.map +1 -0
  15. package/dist/node/index.d.ts +765 -27
  16. package/dist/node/index.d.ts.map +1 -1
  17. package/dist/node/index.js +1 -1
  18. package/dist/node/index.js.map +1 -1
  19. package/dist/node/node.cjs +1 -0
  20. package/dist/node/node.d.cts +216 -0
  21. package/dist/node/node.d.cts.map +1 -0
  22. package/dist/node/node.d.ts +216 -0
  23. package/dist/node/node.d.ts.map +1 -0
  24. package/dist/node/node.js +2 -0
  25. package/dist/node/node.js.map +1 -0
  26. package/package.json +68 -47
  27. package/src/__tests__/access-token-verifier.test.ts +672 -0
  28. package/src/__tests__/admission.test.ts +130 -0
  29. package/src/__tests__/channel-frames.test.ts +214 -0
  30. package/src/__tests__/driver-attribution-capability.test.ts +83 -0
  31. package/src/__tests__/file-transfer.test.ts +281 -0
  32. package/src/__tests__/handoff-chunking.test.ts +215 -0
  33. package/src/__tests__/handoff-manifest.test.ts +52 -0
  34. package/src/__tests__/message-decoders.test.ts +249 -0
  35. package/src/__tests__/outbound-delivery.test.ts +558 -0
  36. package/src/__tests__/peer-message-ledger.test.ts +200 -0
  37. package/src/__tests__/personal-usage-report.test.ts +193 -0
  38. package/src/__tests__/resume-buffer.test.ts +93 -0
  39. package/src/__tests__/session-event-delivery.test.ts +101 -0
  40. package/src/__tests__/session-message-handler-e5.test.ts +99 -0
  41. package/src/__tests__/session-message-handler.test.ts +590 -0
  42. package/src/__tests__/session-resume-bridge.test.ts +406 -0
  43. package/src/__tests__/submit-prompt-shape.test.ts +78 -0
  44. package/src/__tests__/usage-report-carrier.test.ts +98 -0
  45. package/src/__tests__/ws-broadcast-events.test.ts +84 -0
  46. package/src/background-messages.ts +169 -0
  47. package/src/channel-frames.ts +182 -0
  48. package/src/client.ts +9 -0
  49. package/src/handoff-chunking.ts +235 -0
  50. package/src/index.ts +112 -3
  51. package/src/message-decoders.ts +229 -0
  52. package/src/message-parser.ts +33 -0
  53. package/src/node/access-token-verifier.ts +363 -0
  54. package/src/node/admission.ts +153 -0
  55. package/src/node/file-transfer.ts +530 -0
  56. package/src/node/handoff-manifest.ts +77 -0
  57. package/src/node/index.ts +27 -0
  58. package/src/outbound-delivery.ts +231 -0
  59. package/src/peer-message-ledger.ts +193 -0
  60. package/src/protocol-session.ts +28 -0
  61. package/src/resume-buffer.ts +123 -0
  62. package/src/session-events.ts +198 -0
  63. package/src/session-message-handler.ts +282 -0
  64. package/src/session-query-messages.ts +42 -0
  65. package/src/session-resume-bridge.ts +252 -0
  66. package/src/usage-messages.ts +195 -0
  67. package/src/wire-messages.ts +165 -0
  68. package/dist/node/headless/index.cjs +0 -1
  69. package/dist/node/headless/index.d.ts +0 -2
  70. package/dist/node/headless/index.js +0 -1
  71. package/dist/node/headless-DG_MEbf0.js +0 -19
  72. package/dist/node/headless-DG_MEbf0.js.map +0 -1
  73. package/dist/node/headless-xq77JBq0.cjs +0 -18
  74. package/dist/node/index-CrJ2Lhn3.d.ts +0 -96
  75. package/dist/node/index-CrJ2Lhn3.d.ts.map +0 -1
  76. package/dist/node/index-JIvzrtaA.d.ts +0 -52
  77. package/dist/node/index-JIvzrtaA.d.ts.map +0 -1
  78. package/dist/node/index-JTD_xtEQ.d.ts +0 -96
  79. package/dist/node/index-JTD_xtEQ.d.ts.map +0 -1
  80. package/dist/node/index-y_HBOfzO.d.ts +0 -52
  81. package/dist/node/index-y_HBOfzO.d.ts.map +0 -1
  82. package/dist/node/programmatic/index.cjs +0 -1
  83. package/dist/node/programmatic/index.d.ts +0 -2
  84. package/dist/node/programmatic/index.js +0 -1
  85. package/dist/node/programmatic-6wLf68qJ.cjs +0 -1
  86. package/dist/node/programmatic-70dxIXtS.js +0 -2
  87. package/dist/node/programmatic-70dxIXtS.js.map +0 -1
  88. package/dist/node/testing/index.cjs +0 -1
  89. package/dist/node/testing/index.d.ts +0 -2
  90. package/dist/node/testing/index.js +0 -1
  91. package/src/__tests__/programmatic/programmatic-ask-user.test.ts +0 -32
  92. package/src/__tests__/programmatic/programmatic-driver.test.ts +0 -107
  93. package/src/__tests__/programmatic/programmatic-flows.test.ts +0 -140
  94. package/src/__tests__/transport-registry.stop-all.test.ts +0 -53
  95. package/src/headless/HeadlessInteractionChannel.ts +0 -129
  96. package/src/headless/__tests__/headless-channel-options.test.ts +0 -106
  97. package/src/headless/__tests__/headless-goal-runner.test.ts +0 -108
  98. package/src/headless/__tests__/headless-provider-failure.integration.test.ts +0 -143
  99. package/src/headless/__tests__/headless-runner-initialization.test.ts +0 -45
  100. package/src/headless/__tests__/headless-runner.test.ts +0 -508
  101. package/src/headless/__tests__/headless-skill-activation.integration.test.ts +0 -430
  102. package/src/headless/__tests__/headless-transport.test.ts +0 -267
  103. package/src/headless/cli-input.ts +0 -50
  104. package/src/headless/headless-runner.ts +0 -230
  105. package/src/headless/headless-stream-json.ts +0 -148
  106. package/src/headless/headless-transport.ts +0 -43
  107. package/src/headless/index.ts +0 -8
  108. package/src/headless/print-terminal.ts +0 -57
  109. package/src/programmatic/ProgrammaticInteractionChannel.ts +0 -82
  110. package/src/programmatic/createProgrammaticAgent.ts +0 -71
  111. package/src/programmatic/index.ts +0 -5
  112. package/src/testing/index.ts +0 -10
  113. package/src/transport-registry.ts +0 -103
package/README.md CHANGED
@@ -1,6 +1,42 @@
1
1
  # Agent Transport
2
2
 
3
- Protocol-level transport adapters for the Robota SDK — headless, HTTP, WebSocket, MCP, and TUI (Ink/React terminal UI).
3
+ Browser-safe transport protocol and delivery substrate for the Robota SDK. The root exports shared
4
+ wire messages, session bridging, channel codecs, and delivery helpers. Browser decoders are also
5
+ available from `./client`; Node-only admission and handoff integrity helpers are available from
6
+ `./node`.
7
+
8
+ ## Handoff offer migration
9
+
10
+ `@robota-sdk/agent-transport/node` no longer exports `buildHandoffManifest`,
11
+ `IBuildManifestInput`, `ISourceRuntimeState`, or `TManifestResult`. Handoff readiness and inventory
12
+ classification belong to `@robota-sdk/agent-interface-session-mobility`. A host composing a handoff
13
+ should check readiness before serializing, then pass the integrity of those exact bytes to the
14
+ mobility offer policy:
15
+
16
+ ```typescript
17
+ import {
18
+ assessHandoffReadiness,
19
+ prepareHandoffOffer,
20
+ type IPrepareHandoffOfferInput,
21
+ } from '@robota-sdk/agent-interface-session-mobility';
22
+ import { sealHandoffRecord } from '@robota-sdk/agent-transport/node';
23
+
24
+ function buildOffer(request: Omit<IPrepareHandoffOfferInput, 'integrity'>) {
25
+ const readiness = assessHandoffReadiness(request.runtime);
26
+ if (!readiness.ready) return readiness;
27
+
28
+ const { serialized, integrity } = sealHandoffRecord(request.record);
29
+ const offer = prepareHandoffOffer({ ...request, integrity });
30
+ if (!offer.built) return offer;
31
+
32
+ // Send serialized unchanged: offer.manifest.integrity describes these exact bytes.
33
+ return { manifest: offer.manifest, serialized };
34
+ }
35
+ ```
36
+
37
+ For types, use `ISourceRuntimeState`, `IPrepareHandoffOfferInput`, and `THandoffOfferResult` from
38
+ session mobility. `IPrepareHandoffOfferInput` includes the integrity metadata produced by
39
+ `sealHandoffRecord`; the serialized payload remains a separate transport value.
4
40
 
5
41
  ## Installation
6
42
 
@@ -10,20 +46,30 @@ npm install @robota-sdk/agent-transport
10
46
 
11
47
  ## Available Transports
12
48
 
13
- | Transport | Sub-path | Description |
14
- | --------- | ------------ | ------------------------------------------------------- |
15
- | Headless | `./headless` | Non-interactive text / JSON / stream-JSON output |
16
- | HTTP | `./http` | Hono-based REST adapter (Node.js / CF Workers / Lambda) |
17
- | WebSocket | `./ws` | Framework-agnostic real-time bidirectional adapter |
18
- | MCP | `./mcp` | Model Context Protocol server adapter |
19
- | TUI | `./tui` | Ink/React terminal UI components and `TuiTransport` |
49
+ Headless execution belongs to `agent-framework`. HTTP, WebSocket, MCP, and WebRTC ship as standalone
50
+ transport packages.
51
+
52
+ | Transport | Package / Sub-path | Description |
53
+ | --------- | ------------------------------------ | ------------------------------------------------------- |
54
+ | Headless | `@robota-sdk/agent-framework` | Non-interactive text / JSON / stream-JSON output |
55
+ | HTTP | `@robota-sdk/agent-transport-http` | Hono-based REST adapter (Node.js / CF Workers / Lambda) |
56
+ | WebSocket | `@robota-sdk/agent-transport-ws` | Framework-agnostic real-time bidirectional adapter |
57
+ | MCP | `@robota-sdk/agent-transport-mcp` | Model Context Protocol server adapter |
58
+ | WebRTC | `@robota-sdk/agent-transport-webrtc` | Peer-to-peer data-channel adapter |
59
+
60
+ Scripted-provider test fixtures live in `@robota-sdk/agent-core/testing` (the former `./testing`
61
+ pass-through was removed, issue #2052).
62
+
63
+ All session-owning entry points treat `cwd` as provenance, not project trust. Pass a host-issued
64
+ `TWorkspaceProjectAccess` decision through `projectAccess`; omitting it creates a Restricted session
65
+ that does not load project contributions.
20
66
 
21
67
  ## Quick Start
22
68
 
23
69
  ### Headless
24
70
 
25
71
  ```typescript
26
- import { createHeadlessTransport } from '@robota-sdk/agent-transport/headless';
72
+ import { createHeadlessTransport } from '@robota-sdk/agent-framework';
27
73
 
28
74
  const transport = createHeadlessTransport({ outputFormat: 'text', prompt: 'Hello!' });
29
75
  ```
@@ -52,47 +98,59 @@ import { createMcpTransport } from '@robota-sdk/agent-transport-mcp';
52
98
  const transport = createMcpTransport({ name: 'my-agent', version: '1.0.0' });
53
99
  ```
54
100
 
55
- ### TUI (Ink/React)
101
+ ### TUI presentation (Ink/React)
56
102
 
57
103
  ```typescript
58
- import { TuiTransport } from '@robota-sdk/agent-transport-tui';
59
- import type { IRenderOptions } from '@robota-sdk/agent-transport-tui';
104
+ import { renderApp } from '@robota-sdk/agent-ui-terminal';
105
+ import type { IRenderOptions } from '@robota-sdk/agent-ui-terminal';
60
106
 
61
107
  declare const options: IRenderOptions;
62
- const transport = new TuiTransport(options);
108
+ await renderApp(options);
63
109
  ```
64
110
 
65
- > React and Ink dependencies are confined to the `./tui` sub-path. Importing from
66
- > other sub-paths keeps your bundle React-free.
111
+ > React and Ink dependencies are confined to the standalone
112
+ > `@robota-sdk/agent-ui-terminal` package. This core package stays React-free.
67
113
 
68
114
  ## Sub-path Imports
69
115
 
70
116
  Import only what you need to keep bundles small:
71
117
 
72
118
  ```typescript
73
- import { createHeadlessTransport } from '@robota-sdk/agent-transport/headless';
119
+ import { createHeadlessTransport } from '@robota-sdk/agent-framework';
74
120
  import { WsTransport } from '@robota-sdk/agent-transport-ws';
75
- import type { TServerMessage } from '@robota-sdk/agent-transport-ws';
121
+ import type { TServerMessage } from '@robota-sdk/agent-transport';
76
122
  import { createHttpTransport } from '@robota-sdk/agent-transport-http';
77
123
  import { createMcpTransport } from '@robota-sdk/agent-transport-mcp';
78
- import { TuiTransport } from '@robota-sdk/agent-transport-tui';
124
+ import { renderApp } from '@robota-sdk/agent-ui-terminal';
79
125
  ```
80
126
 
81
- Root import re-exports all transports:
82
-
83
- <!-- doc-example-skip: intentional ellipsis fragment (import surface overview, not runnable) -->
127
+ The framework root owns headless and programmatic surfaces plus `TransportRegistry`. The transport
128
+ root owns transport-neutral wire messages, session bridging, channel codecs, and delivery helpers;
129
+ browser decoders are also available from `@robota-sdk/agent-transport/client`, while Node-only
130
+ admission and handoff integrity helpers live under `@robota-sdk/agent-transport/node`.
84
131
 
85
132
  ```typescript
86
- import { createHeadlessTransport, WsTransport, TuiTransport, ... } from '@robota-sdk/agent-transport';
133
+ import { createHeadlessTransport } from '@robota-sdk/agent-framework';
87
134
  ```
88
135
 
136
+ `TransportRegistry` accepts the discriminated base service/runner adapter union. It rejects active
137
+ restart before mutation, rolls partial startup back in reverse order, reports real runner failure
138
+ immediately, and returns a complete ordered aggregate whose pending runners become registry-owned
139
+ `abandoned` records on stop or rollback.
140
+
89
141
  ## Dependencies
90
142
 
91
- - `@robota-sdk/agent-core`
143
+ - `@robota-sdk/agent-interface-analytics`
144
+ - `@robota-sdk/agent-interface-command`
145
+ - `@robota-sdk/agent-interface-execution`
146
+ - `@robota-sdk/agent-interface-session`
147
+ - `@robota-sdk/agent-interface-session-mobility`
92
148
  - `@robota-sdk/agent-interface-transport`
93
- - `@robota-sdk/agent-framework`
94
- - `ws`, `hono`, `@modelcontextprotocol/sdk`, `zod`
95
- - `react`, `ink`, `ink-select-input`, `ink-spinner`, `ink-text-input`, `chalk`, `marked`, `marked-terminal`, `string-width` _(TUI sub-path only)_
149
+
150
+ The heavier protocol dependencies (`ws`, `hono`, `@modelcontextprotocol/sdk`,
151
+ `react`, `ink`, and friends) now live in the split transport packages
152
+ (`@robota-sdk/agent-transport-{http,ws,mcp}`) and presentation packages
153
+ (`@robota-sdk/agent-ui-{terminal,web}`).
96
154
 
97
155
  ## Links
98
156
 
@@ -0,0 +1,2 @@
1
+ import { a as decodeServerMessage, c as TServerMessage, i as decodeFrame, n as TMessageDecodeResult, o as TClientMessage, r as decodeClientMessage, s as TSeqServerMessage, t as MAX_INBOUND_FRAME_BYTES } from "./message-decoders-BB8n-H2X.js";
2
+ export { MAX_INBOUND_FRAME_BYTES, type TClientMessage, type TMessageDecodeResult, type TSeqServerMessage, type TServerMessage, decodeClientMessage, decodeFrame, decodeServerMessage };
@@ -0,0 +1 @@
1
+ import{i as e,n as t,r as n,t as r}from"./message-decoders-CDmDoZPR.js";export{r as MAX_INBOUND_FRAME_BYTES,t as decodeClientMessage,n as decodeFrame,e as decodeServerMessage};