subharness 0.0.4 → 0.0.7

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 (303) hide show
  1. package/README.md +95 -9
  2. package/dist/adapters/claude-process.d.ts +3 -0
  3. package/dist/adapters/claude-process.js +19 -2
  4. package/dist/adapters/claude-process.js.map +1 -1
  5. package/dist/adapters/claude-result.d.ts +2 -0
  6. package/dist/adapters/claude-result.js +22 -0
  7. package/dist/adapters/claude-result.js.map +1 -0
  8. package/dist/adapters/claude-tools.d.ts +6 -2
  9. package/dist/adapters/claude-tools.js +14 -12
  10. package/dist/adapters/claude-tools.js.map +1 -1
  11. package/dist/adapters/claude-worker-client.d.ts +49 -0
  12. package/dist/adapters/claude-worker-client.js +359 -0
  13. package/dist/adapters/claude-worker-client.js.map +1 -0
  14. package/dist/adapters/claude-worker-process.d.ts +20 -0
  15. package/dist/adapters/claude-worker-process.js +76 -0
  16. package/dist/adapters/claude-worker-process.js.map +1 -0
  17. package/dist/adapters/claude-worker-protocol.d.ts +38 -0
  18. package/dist/adapters/claude-worker-protocol.js +2 -0
  19. package/dist/adapters/claude-worker-protocol.js.map +1 -0
  20. package/dist/adapters/claude-worker.d.ts +1 -0
  21. package/dist/adapters/claude-worker.js +126 -0
  22. package/dist/adapters/claude-worker.js.map +1 -0
  23. package/dist/adapters/claude.d.ts +16 -6
  24. package/dist/adapters/claude.js +164 -75
  25. package/dist/adapters/claude.js.map +1 -1
  26. package/dist/adapters/codex.js +4 -1
  27. package/dist/adapters/codex.js.map +1 -1
  28. package/dist/adapters/copilot-permissions.d.ts +26 -0
  29. package/dist/adapters/copilot-permissions.js +121 -0
  30. package/dist/adapters/copilot-permissions.js.map +1 -0
  31. package/dist/adapters/copilot-tools.d.ts +12 -0
  32. package/dist/adapters/copilot-tools.js +61 -0
  33. package/dist/adapters/copilot-tools.js.map +1 -0
  34. package/dist/adapters/copilot.d.ts +108 -0
  35. package/dist/adapters/copilot.js +819 -0
  36. package/dist/adapters/copilot.js.map +1 -0
  37. package/dist/adapters/cursor-cli-approvals.d.ts +2 -0
  38. package/dist/adapters/cursor-cli-approvals.js +83 -0
  39. package/dist/adapters/cursor-cli-approvals.js.map +1 -0
  40. package/dist/adapters/cursor-cli-model.d.ts +4 -0
  41. package/dist/adapters/cursor-cli-model.js +64 -0
  42. package/dist/adapters/cursor-cli-model.js.map +1 -0
  43. package/dist/adapters/cursor-cli-session.d.ts +32 -0
  44. package/dist/adapters/cursor-cli-session.js +316 -0
  45. package/dist/adapters/cursor-cli-session.js.map +1 -0
  46. package/dist/adapters/cursor-cli-tools.d.ts +20 -0
  47. package/dist/adapters/cursor-cli-tools.js +181 -0
  48. package/dist/adapters/cursor-cli-tools.js.map +1 -0
  49. package/dist/adapters/cursor-cli.d.ts +2 -0
  50. package/dist/adapters/cursor-cli.js +306 -0
  51. package/dist/adapters/cursor-cli.js.map +1 -0
  52. package/dist/adapters/cursor-model.d.ts +7 -0
  53. package/dist/adapters/cursor-model.js +67 -0
  54. package/dist/adapters/cursor-model.js.map +1 -0
  55. package/dist/adapters/cursor-rpc.d.ts +42 -0
  56. package/dist/adapters/cursor-rpc.js +271 -0
  57. package/dist/adapters/cursor-rpc.js.map +1 -0
  58. package/dist/adapters/cursor-session.d.ts +4 -0
  59. package/dist/adapters/cursor-session.js +327 -0
  60. package/dist/adapters/cursor-session.js.map +1 -0
  61. package/dist/adapters/cursor-startup.d.ts +16 -0
  62. package/dist/adapters/cursor-startup.js +74 -0
  63. package/dist/adapters/cursor-startup.js.map +1 -0
  64. package/dist/adapters/cursor-tools.d.ts +11 -0
  65. package/dist/adapters/cursor-tools.js +49 -0
  66. package/dist/adapters/cursor-tools.js.map +1 -0
  67. package/dist/adapters/cursor.d.ts +6 -0
  68. package/dist/adapters/cursor.js +17 -0
  69. package/dist/adapters/cursor.js.map +1 -0
  70. package/dist/adapters/fx-auth.d.ts +12 -2
  71. package/dist/adapters/fx-auth.js +51 -61
  72. package/dist/adapters/fx-auth.js.map +1 -1
  73. package/dist/adapters/fx-profile.d.ts +8 -0
  74. package/dist/adapters/fx-profile.js +101 -0
  75. package/dist/adapters/fx-profile.js.map +1 -0
  76. package/dist/adapters/fx-rpc.d.ts +2 -0
  77. package/dist/adapters/fx-rpc.js +30 -4
  78. package/dist/adapters/fx-rpc.js.map +1 -1
  79. package/dist/adapters/fx-status.d.ts +2 -0
  80. package/dist/adapters/fx-status.js +96 -0
  81. package/dist/adapters/fx-status.js.map +1 -0
  82. package/dist/adapters/fx.js +28 -12
  83. package/dist/adapters/fx.js.map +1 -1
  84. package/dist/adapters/opencode-access.d.ts +13 -0
  85. package/dist/adapters/opencode-access.js +76 -0
  86. package/dist/adapters/opencode-access.js.map +1 -0
  87. package/dist/adapters/opencode-config.d.ts +11 -0
  88. package/dist/adapters/opencode-config.js +238 -0
  89. package/dist/adapters/opencode-config.js.map +1 -0
  90. package/dist/adapters/opencode-http.d.ts +28 -0
  91. package/dist/adapters/opencode-http.js +297 -0
  92. package/dist/adapters/opencode-http.js.map +1 -0
  93. package/dist/adapters/opencode-tools.d.ts +19 -0
  94. package/dist/adapters/opencode-tools.js +127 -0
  95. package/dist/adapters/opencode-tools.js.map +1 -0
  96. package/dist/adapters/opencode.d.ts +2 -0
  97. package/dist/adapters/opencode.js +569 -0
  98. package/dist/adapters/opencode.js.map +1 -0
  99. package/dist/adapters/rpc.d.ts +3 -0
  100. package/dist/adapters/rpc.js +45 -4
  101. package/dist/adapters/rpc.js.map +1 -1
  102. package/dist/adapters/types.d.ts +5 -0
  103. package/dist/adapters/types.js.map +1 -1
  104. package/dist/approvals/types.d.ts +1 -1
  105. package/dist/approvals/types.js.map +1 -1
  106. package/dist/cli/args.d.ts +1 -1
  107. package/dist/cli/args.js +4 -1
  108. package/dist/cli/args.js.map +1 -1
  109. package/dist/cli/catalog-worker.js.map +1 -1
  110. package/dist/cli/dashboard-client.js +20 -31
  111. package/dist/cli/dashboard-client.js.map +1 -1
  112. package/dist/cli/dashboard-controller.d.ts +7 -0
  113. package/dist/cli/dashboard-controller.js +27 -0
  114. package/dist/cli/dashboard-controller.js.map +1 -0
  115. package/dist/cli/dashboard-detail-view.d.ts +1 -1
  116. package/dist/cli/dashboard-detail-view.js +3 -4
  117. package/dist/cli/dashboard-detail-view.js.map +1 -1
  118. package/dist/cli/dashboard-history-view.js.map +1 -1
  119. package/dist/cli/dashboard-input.d.ts +1 -1
  120. package/dist/cli/dashboard-input.js +11 -1
  121. package/dist/cli/dashboard-input.js.map +1 -1
  122. package/dist/cli/dashboard-layout.js +3 -3
  123. package/dist/cli/dashboard-layout.js.map +1 -1
  124. package/dist/cli/dashboard-renderer.js.map +1 -1
  125. package/dist/cli/dashboard-style.js +2 -2
  126. package/dist/cli/dashboard-style.js.map +1 -1
  127. package/dist/cli/dashboard.d.ts +2 -2
  128. package/dist/cli/dashboard.js +7 -32
  129. package/dist/cli/dashboard.js.map +1 -1
  130. package/dist/cli/help.d.ts +1 -1
  131. package/dist/cli/help.js +30 -12
  132. package/dist/cli/help.js.map +1 -1
  133. package/dist/cli/main.js +55 -43
  134. package/dist/cli/main.js.map +1 -1
  135. package/dist/config/access-provenance.d.ts +10 -0
  136. package/dist/config/access-provenance.js +31 -0
  137. package/dist/config/access-provenance.js.map +1 -0
  138. package/dist/config/access.d.ts +12 -2
  139. package/dist/config/access.js +125 -27
  140. package/dist/config/access.js.map +1 -1
  141. package/dist/config/loader.js +1 -0
  142. package/dist/config/loader.js.map +1 -1
  143. package/dist/config/oidc.js +4 -2
  144. package/dist/config/oidc.js.map +1 -1
  145. package/dist/config/project.js +2 -1
  146. package/dist/config/project.js.map +1 -1
  147. package/dist/config/resolve-access.js +24 -10
  148. package/dist/config/resolve-access.js.map +1 -1
  149. package/dist/errors.d.ts +2 -2
  150. package/dist/errors.js.map +1 -1
  151. package/dist/index.d.ts +8 -2
  152. package/dist/index.js +4 -1
  153. package/dist/index.js.map +1 -1
  154. package/dist/process-diagnostics.d.ts +2 -0
  155. package/dist/process-diagnostics.js +11 -0
  156. package/dist/process-diagnostics.js.map +1 -0
  157. package/dist/runtime/access-errors.d.ts +4 -0
  158. package/dist/runtime/access-errors.js +25 -0
  159. package/dist/runtime/access-errors.js.map +1 -0
  160. package/dist/runtime/approval-registry.d.ts +9 -0
  161. package/dist/runtime/approval-registry.js +144 -5
  162. package/dist/runtime/approval-registry.js.map +1 -1
  163. package/dist/runtime/capture.d.ts +22 -0
  164. package/dist/runtime/capture.js +320 -0
  165. package/dist/runtime/capture.js.map +1 -0
  166. package/dist/runtime/catalog.d.ts +39 -0
  167. package/dist/runtime/catalog.js +84 -0
  168. package/dist/runtime/catalog.js.map +1 -0
  169. package/dist/runtime/client.d.ts +2 -1
  170. package/dist/runtime/client.js +74 -47
  171. package/dist/runtime/client.js.map +1 -1
  172. package/dist/runtime/coordinator.d.ts +44 -7
  173. package/dist/runtime/coordinator.js +265 -31
  174. package/dist/runtime/coordinator.js.map +1 -1
  175. package/dist/runtime/daemon.js +12 -6
  176. package/dist/runtime/daemon.js.map +1 -1
  177. package/dist/runtime/dashboard-sanitize.d.ts +2 -0
  178. package/dist/runtime/dashboard-sanitize.js +7 -0
  179. package/dist/runtime/dashboard-sanitize.js.map +1 -0
  180. package/dist/runtime/dashboard-workspace.js +5 -1
  181. package/dist/runtime/dashboard-workspace.js.map +1 -1
  182. package/dist/runtime/dashboard.d.ts +1 -1
  183. package/dist/runtime/dashboard.js +2 -3
  184. package/dist/runtime/dashboard.js.map +1 -1
  185. package/dist/runtime/definition.d.ts +6 -1
  186. package/dist/runtime/definition.js +42 -2
  187. package/dist/runtime/definition.js.map +1 -1
  188. package/dist/runtime/native-owner.js +7 -1
  189. package/dist/runtime/native-owner.js.map +1 -1
  190. package/dist/runtime/pagination.d.ts +9 -0
  191. package/dist/runtime/pagination.js +36 -0
  192. package/dist/runtime/pagination.js.map +1 -0
  193. package/dist/runtime/sdk-observation.d.ts +8 -0
  194. package/dist/runtime/sdk-observation.js +75 -0
  195. package/dist/runtime/sdk-observation.js.map +1 -0
  196. package/dist/runtime/sdk-projection.d.ts +8 -0
  197. package/dist/runtime/sdk-projection.js +19 -0
  198. package/dist/runtime/sdk-projection.js.map +1 -0
  199. package/dist/runtime/sdk-service.d.ts +11 -0
  200. package/dist/runtime/sdk-service.js +109 -0
  201. package/dist/runtime/sdk-service.js.map +1 -0
  202. package/dist/runtime/select-native.d.ts +4 -1
  203. package/dist/runtime/select-native.js +28 -13
  204. package/dist/runtime/select-native.js.map +1 -1
  205. package/dist/runtime/service.d.ts +11 -1
  206. package/dist/runtime/service.js +178 -3
  207. package/dist/runtime/service.js.map +1 -1
  208. package/dist/runtime/session-launcher.js +1 -1
  209. package/dist/runtime/session-launcher.js.map +1 -1
  210. package/dist/runtime/snapshots.d.ts +103 -0
  211. package/dist/runtime/snapshots.js +124 -0
  212. package/dist/runtime/snapshots.js.map +1 -0
  213. package/dist/runtime/state.d.ts +26 -0
  214. package/dist/runtime/state.js +86 -17
  215. package/dist/runtime/state.js.map +1 -1
  216. package/dist/runtime/task-data.d.ts +38 -0
  217. package/dist/runtime/task-data.js +2 -0
  218. package/dist/runtime/task-data.js.map +1 -0
  219. package/dist/runtime/transport.d.ts +13 -0
  220. package/dist/runtime/transport.js +166 -0
  221. package/dist/runtime/transport.js.map +1 -0
  222. package/dist/runtime/types.d.ts +28 -9
  223. package/dist/runtime/types.js.map +1 -1
  224. package/dist/runtime/worker-client.js +40 -13
  225. package/dist/runtime/worker-client.js.map +1 -1
  226. package/dist/runtime/worker-server.js +105 -24
  227. package/dist/runtime/worker-server.js.map +1 -1
  228. package/dist/sdk/connected-types.d.ts +42 -0
  229. package/dist/sdk/connected-types.js +2 -0
  230. package/dist/sdk/connected-types.js.map +1 -0
  231. package/dist/sdk/connected.d.ts +3 -0
  232. package/dist/sdk/connected.js +232 -0
  233. package/dist/sdk/connected.js.map +1 -0
  234. package/dist/sdk/definitions.d.ts +4 -1
  235. package/dist/sdk/definitions.js +16 -2
  236. package/dist/sdk/definitions.js.map +1 -1
  237. package/dist/sdk/execution-definition.d.ts +3 -0
  238. package/dist/sdk/execution-definition.js +59 -0
  239. package/dist/sdk/execution-definition.js.map +1 -0
  240. package/dist/sdk/execution-driver.d.ts +6 -0
  241. package/dist/sdk/execution-driver.js +86 -0
  242. package/dist/sdk/execution-driver.js.map +1 -0
  243. package/dist/sdk/execution-observation.d.ts +3 -0
  244. package/dist/sdk/execution-observation.js +35 -0
  245. package/dist/sdk/execution-observation.js.map +1 -0
  246. package/dist/sdk/execution-options.d.ts +17 -0
  247. package/dist/sdk/execution-options.js +115 -0
  248. package/dist/sdk/execution-options.js.map +1 -0
  249. package/dist/sdk/execution-types.d.ts +72 -0
  250. package/dist/sdk/execution-types.js +2 -0
  251. package/dist/sdk/execution-types.js.map +1 -0
  252. package/dist/sdk/execution.d.ts +3 -0
  253. package/dist/sdk/execution.js +3 -0
  254. package/dist/sdk/execution.js.map +1 -0
  255. package/dist/sdk/hosted-error.d.ts +3 -0
  256. package/dist/sdk/hosted-error.js +14 -0
  257. package/dist/sdk/hosted-error.js.map +1 -0
  258. package/dist/sdk/hosted.d.ts +23 -0
  259. package/dist/sdk/hosted.js +204 -0
  260. package/dist/sdk/hosted.js.map +1 -0
  261. package/dist/sdk/permission-validation.js +10 -1
  262. package/dist/sdk/permission-validation.js.map +1 -1
  263. package/dist/sdk/runner.d.ts +5 -0
  264. package/dist/sdk/runner.js +107 -0
  265. package/dist/sdk/runner.js.map +1 -0
  266. package/dist/sdk/tools.js +4 -1
  267. package/dist/sdk/tools.js.map +1 -1
  268. package/dist/sdk/types.d.ts +29 -1
  269. package/dist/sdk/types.js.map +1 -1
  270. package/package.json +6 -3
  271. package/sdk/access-config.md +60 -4
  272. package/sdk/adapter-contract.md +13 -3
  273. package/sdk/additional-harnesses.md +43 -0
  274. package/sdk/agent-skill.md +2 -2
  275. package/sdk/agent.md +6 -4
  276. package/sdk/approvals.md +5 -1
  277. package/sdk/authentication.md +1 -1
  278. package/sdk/cli/dashboard-design.md +6 -0
  279. package/sdk/cli/index.md +9 -6
  280. package/sdk/cli/output.md +3 -1
  281. package/sdk/completion-notifications.md +2 -0
  282. package/sdk/config.md +1 -1
  283. package/sdk/copilot.md +53 -0
  284. package/sdk/cursor.md +68 -0
  285. package/sdk/diagnostics.md +29 -0
  286. package/sdk/distribution.md +5 -3
  287. package/sdk/evals.md +1 -1
  288. package/sdk/examples/chat-tool.ts +126 -0
  289. package/sdk/execution.md +743 -0
  290. package/sdk/fx.md +50 -5
  291. package/sdk/harnesses.md +13 -13
  292. package/sdk/index.md +45 -20
  293. package/sdk/message-delivery.md +2 -0
  294. package/sdk/opencode.md +57 -0
  295. package/sdk/permissions.md +6 -2
  296. package/sdk/plugins/sub-agents.md +4 -2
  297. package/sdk/project-team.md +25 -1
  298. package/sdk/sessions.md +2 -0
  299. package/sdk/tools.md +4 -2
  300. package/sdk/v1-runtime.md +8 -6
  301. package/dist/cli/catalog.d.ts +0 -26
  302. package/dist/cli/catalog.js +0 -41
  303. package/dist/cli/catalog.js.map +0 -1
@@ -0,0 +1,232 @@
1
+ import { AgentError } from '../errors.js';
2
+ import { connect as connectCoordinator } from '../runtime/client.js';
3
+ import { resolveStateDirectory } from '../runtime/state.js';
4
+ import { CoordinatorTransport } from '../runtime/transport.js';
5
+ import { delivery, observeOptions, validateCwd, validatePrompt, watchOptions } from './execution-options.js';
6
+ export async function connect(options) {
7
+ const selected = connectOptions(options);
8
+ const directory = resolveStateDirectory(selected.stateDirectory);
9
+ const endpoint = await connectCoordinator(selected.start ?? true, { directory, capability: 'sdk-v1' });
10
+ return new ConnectedClient(new CoordinatorTransport(endpoint), directory);
11
+ }
12
+ class ConnectedClient {
13
+ transport;
14
+ directory;
15
+ open = true;
16
+ agents = {
17
+ list: async (options) => {
18
+ this.assertOpen();
19
+ exact(options, ['cwd'], 'Agent list options');
20
+ const selectedEnv = selectedEnvironment(undefined, this.directory);
21
+ const selectedCwd = options.cwd;
22
+ const cwd = await validateCwd(selectedCwd);
23
+ this.assertOpen();
24
+ return this.transport.one({ command: 'sdk-agent-list', cwd, env: selectedEnv });
25
+ },
26
+ check: async (options) => {
27
+ this.assertOpen();
28
+ const selected = await connectedOptions(options, this.directory);
29
+ this.assertOpen();
30
+ await this.transport.one({ command: 'sdk-agent-check', ...selected });
31
+ },
32
+ };
33
+ sessions = {
34
+ create: async (options) => {
35
+ this.assertOpen();
36
+ const selected = await connectedOptions(options, this.directory);
37
+ this.assertOpen();
38
+ const response = await this.transport.one({ command: 'sdk-session-create', ...selected });
39
+ return new ConnectedSession(this, response.sessionId);
40
+ },
41
+ list: async (options) => {
42
+ this.assertOpen();
43
+ const selected = pageOptions(options);
44
+ return this.transport.one({ command: 'sdk-session-list', ...selected });
45
+ },
46
+ get: async (id) => {
47
+ this.assertOpen();
48
+ const selected = idValue(id, 'Session ID');
49
+ await this.transport.one({ command: 'sdk-session-get', id: selected });
50
+ return new ConnectedSession(this, selected);
51
+ },
52
+ };
53
+ tasks = {
54
+ list: async (options) => {
55
+ this.assertOpen();
56
+ const selected = taskPageOptions(options);
57
+ return this.transport.one({ command: 'sdk-task-list', ...selected });
58
+ },
59
+ get: async (id) => {
60
+ this.assertOpen();
61
+ const selected = idValue(id, 'Task ID');
62
+ const snapshot = await this.transport.one({ command: 'sdk-task-get', id: selected });
63
+ return new ConnectedTask(this, selected, snapshot.sessionId);
64
+ },
65
+ };
66
+ approvals = { respond: async (requestId, response) => {
67
+ this.assertOpen();
68
+ await this.transport.one({ command: 'sdk-approval-respond', id: idValue(requestId, 'Approval ID'), response });
69
+ } };
70
+ constructor(transport, directory) {
71
+ this.transport = transport;
72
+ this.directory = directory;
73
+ }
74
+ async disconnect() { if (!this.open)
75
+ return; this.open = false; this.transport.disconnect(); }
76
+ assertOpen() {
77
+ if (!this.open)
78
+ throw new AgentError('COORDINATOR_UNAVAILABLE', 'The coordinator client is disconnected.');
79
+ }
80
+ }
81
+ class ConnectedSession {
82
+ client;
83
+ id;
84
+ constructor(client, id) {
85
+ this.client = client;
86
+ this.id = id;
87
+ }
88
+ async prompt(text, options) {
89
+ this.client.assertOpen();
90
+ validatePrompt(text);
91
+ const requestedDelivery = delivery(options);
92
+ const receipt = await this.client.transport.one({
93
+ command: 'sdk-session-prompt', id: this.id, prompt: text, delivery: requestedDelivery,
94
+ });
95
+ return { task: new ConnectedTask(this.client, receipt.taskId, receipt.sessionId), requestedDelivery,
96
+ effectiveDelivery: receipt.delivery ?? requestedDelivery,
97
+ ...(receipt.paused ? { paused: true, blockedByTaskId: receipt.blockedByTaskId } : {}) };
98
+ }
99
+ async snapshot() {
100
+ this.client.assertOpen();
101
+ return this.client.transport.one({ command: 'sdk-session-get', id: this.id });
102
+ }
103
+ async close() {
104
+ this.client.assertOpen();
105
+ await this.client.transport.one({ command: 'sdk-session-close', id: this.id });
106
+ }
107
+ }
108
+ class ConnectedTask {
109
+ client;
110
+ id;
111
+ sessionId;
112
+ resultPromise;
113
+ constructor(client, id, sessionId) {
114
+ this.client = client;
115
+ this.id = id;
116
+ this.sessionId = sessionId;
117
+ }
118
+ get result() {
119
+ if (!this.resultPromise) {
120
+ try {
121
+ this.client.assertOpen();
122
+ this.resultPromise = this.client.transport.one({ command: 'sdk-task-result', id: this.id });
123
+ }
124
+ catch (error) {
125
+ this.resultPromise = Promise.reject(error);
126
+ }
127
+ void this.resultPromise.catch(() => undefined);
128
+ }
129
+ return this.resultPromise;
130
+ }
131
+ async snapshot() {
132
+ this.client.assertOpen();
133
+ return this.client.transport.one({ command: 'sdk-task-snapshot', id: this.id });
134
+ }
135
+ async inspect() {
136
+ this.client.assertOpen();
137
+ return this.client.transport.one({ command: 'sdk-task-inspect', id: this.id });
138
+ }
139
+ watch(options) {
140
+ this.client.assertOpen();
141
+ const selected = watchOptions(options);
142
+ return this.client.transport.stream({ command: 'sdk-task-watch', id: this.id }, selected.signal);
143
+ }
144
+ responses(options) {
145
+ this.client.assertOpen();
146
+ const selected = observeOptions(options);
147
+ return this.client.transport.stream({ command: 'sdk-task-responses', id: this.id, ...(selected.after === undefined ? {} : { after: selected.after }) }, selected.signal);
148
+ }
149
+ async cancel() {
150
+ this.client.assertOpen();
151
+ return this.client.transport.one({ command: 'sdk-task-cancel', id: this.id });
152
+ }
153
+ }
154
+ function connectOptions(value) {
155
+ if (value === undefined)
156
+ return {};
157
+ exact(value, ['start', 'stateDirectory'], 'Connect options');
158
+ if (value.start !== undefined && typeof value.start !== 'boolean')
159
+ invalid('Connect start must be a boolean.');
160
+ if (value.stateDirectory !== undefined && typeof value.stateDirectory !== 'string')
161
+ invalid('Connect state directory must be a string.');
162
+ return value;
163
+ }
164
+ async function connectedOptions(value, directory) {
165
+ exact(value, ['agent', 'cwd', 'env'], 'Connected session options');
166
+ const agent = cloneAgent(value.agent);
167
+ const selectedCwd = value.cwd;
168
+ const env = selectedEnvironment(value.env, directory);
169
+ const cwd = await validateCwd(selectedCwd);
170
+ return { agent, cwd, env };
171
+ }
172
+ function cloneAgent(value) {
173
+ if (typeof value === 'string')
174
+ return value;
175
+ if (!value || typeof value !== 'object')
176
+ invalid('Connected agent must be an ID or harness configuration.');
177
+ try {
178
+ return structuredClone(value);
179
+ }
180
+ catch {
181
+ return invalid('Connected harness configuration must contain serializable values.');
182
+ }
183
+ }
184
+ function selectedEnvironment(source, directory) {
185
+ const selected = source ?? process.env;
186
+ if (!selected || typeof selected !== 'object' || Array.isArray(selected))
187
+ invalid('Connected environment must be an object.');
188
+ // Callers may intentionally replace the environment without NODE_ENV even when frameworks augment ProcessEnv.
189
+ const env = {};
190
+ for (const key of Reflect.ownKeys(selected)) {
191
+ if (typeof key !== 'string')
192
+ invalid('Connected environment keys must be strings.');
193
+ const value = selected[key];
194
+ if (value !== undefined && typeof value !== 'string')
195
+ invalid('Connected environment values must be strings or undefined.');
196
+ if (value !== undefined)
197
+ env[key] = value;
198
+ }
199
+ delete env.AGENT_PARENT_TOKEN;
200
+ delete env.AGENT_CLI_PATH;
201
+ env.AGENT_STATE_DIR = directory;
202
+ return env;
203
+ }
204
+ function pageOptions(value) {
205
+ if (value === undefined)
206
+ return {};
207
+ exact(value, ['limit', 'cursor'], 'Page options');
208
+ if (value.limit !== undefined && (!Number.isSafeInteger(value.limit) || value.limit <= 0))
209
+ invalid('Page limit must be a positive integer.');
210
+ if (value.cursor !== undefined && typeof value.cursor !== 'string')
211
+ invalid('Page cursor must be a string.');
212
+ return value;
213
+ }
214
+ function taskPageOptions(value) {
215
+ if (value === undefined)
216
+ return {};
217
+ exact(value, ['limit', 'cursor', 'sessionId'], 'Task page options');
218
+ const page = pageOptions({ ...(value.limit === undefined ? {} : { limit: value.limit }), ...(value.cursor === undefined ? {} : { cursor: value.cursor }) });
219
+ return { ...page, ...(value.sessionId === undefined ? {} : { sessionId: idValue(value.sessionId, 'Session ID') }) };
220
+ }
221
+ function exact(value, fields, label) {
222
+ if (!value || typeof value !== 'object' || Array.isArray(value)
223
+ || Reflect.ownKeys(value).some(key => typeof key !== 'string' || !fields.includes(key)))
224
+ invalid(`${label} must contain only supported fields.`);
225
+ }
226
+ function idValue(value, label) {
227
+ if (typeof value !== 'string' || !value)
228
+ invalid(`${label} must be a nonempty string.`);
229
+ return value;
230
+ }
231
+ function invalid(message) { throw new AgentError('INVALID_ARGUMENT', message); }
232
+ //# sourceMappingURL=connected.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connected.js","sourceRoot":"","sources":["../../src/sdk/connected.ts"],"names":[],"mappings":"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","sourcesContent":["import { AgentError } from '../errors.js';\nimport { connect as connectCoordinator } from '../runtime/client.js';\nimport { resolveStateDirectory } from '../runtime/state.js';\nimport { CoordinatorTransport } from '../runtime/transport.js';\nimport { delivery, observeOptions, validateCwd, validatePrompt, watchOptions } from './execution-options.js';\nimport type {\n ApprovalResponse, Delivery, Page, PageOptions, PromptReceipt, SessionHandle, SessionSnapshot,\n TaskDetails, TaskHandle, TaskResult, TaskSnapshot,\n} from './execution-types.js';\nimport type { AgentSummary, Client, ConnectedSessionOptions, ConnectOptions } from './connected-types.js';\n\nexport async function connect(options?:ConnectOptions):Promise<Client> {\n const selected=connectOptions(options);\n const directory=resolveStateDirectory(selected.stateDirectory);\n const endpoint=await connectCoordinator(selected.start ?? true,{directory,capability:'sdk-v1'});\n return new ConnectedClient(new CoordinatorTransport(endpoint),directory);\n}\n\nclass ConnectedClient implements Client {\n private open=true;\n readonly agents={\n list:async(options:{readonly cwd:string}):Promise<{readonly items:readonly AgentSummary[]}>=>{\n this.assertOpen(); exact(options,['cwd'],'Agent list options');\n const selectedEnv=selectedEnvironment(undefined,this.directory);\n const selectedCwd=options.cwd;\n const cwd=await validateCwd(selectedCwd);\n this.assertOpen();\n return this.transport.one({command:'sdk-agent-list',cwd,env:selectedEnv});\n },\n check:async(options:ConnectedSessionOptions):Promise<void>=>{\n this.assertOpen(); const selected=await connectedOptions(options,this.directory);\n this.assertOpen();\n await this.transport.one({command:'sdk-agent-check',...selected});\n },\n };\n readonly sessions={\n create:async(options:ConnectedSessionOptions):Promise<SessionHandle>=>{\n this.assertOpen(); const selected=await connectedOptions(options,this.directory); this.assertOpen();\n const response=await this.transport.one<{sessionId:string}>({command:'sdk-session-create',...selected});\n return new ConnectedSession(this,response.sessionId);\n },\n list:async(options?:PageOptions)=>{\n this.assertOpen(); const selected=pageOptions(options);\n return this.transport.one<Page<import('./execution-types.js').SessionSummary>>({command:'sdk-session-list',...selected});\n },\n get:async(id:string):Promise<SessionHandle>=>{\n this.assertOpen(); const selected=idValue(id,'Session ID');\n await this.transport.one<SessionSnapshot>({command:'sdk-session-get',id:selected});\n return new ConnectedSession(this,selected);\n },\n };\n readonly tasks={\n list:async(options?:PageOptions&{readonly sessionId?:string})=>{\n this.assertOpen(); const selected=taskPageOptions(options);\n return this.transport.one<Page<import('./execution-types.js').TaskSummary>>({command:'sdk-task-list',...selected});\n },\n get:async(id:string):Promise<TaskHandle>=>{\n this.assertOpen(); const selected=idValue(id,'Task ID');\n const snapshot=await this.transport.one<TaskSnapshot>({command:'sdk-task-get',id:selected});\n return new ConnectedTask(this,selected,snapshot.sessionId);\n },\n };\n readonly approvals={respond:async(requestId:string,response:ApprovalResponse):Promise<void>=>{\n this.assertOpen();\n await this.transport.one({command:'sdk-approval-respond',id:idValue(requestId,'Approval ID'),response});\n }};\n constructor(readonly transport:CoordinatorTransport,private readonly directory:string) {}\n async disconnect():Promise<void> { if (!this.open) return; this.open=false; this.transport.disconnect(); }\n assertOpen():void {\n if (!this.open) throw new AgentError('COORDINATOR_UNAVAILABLE','The coordinator client is disconnected.');\n }\n}\n\nclass ConnectedSession implements SessionHandle {\n constructor(private readonly client:ConnectedClient,readonly id:string) {}\n async prompt(text:string,options?:{readonly delivery?:Delivery}):Promise<PromptReceipt> {\n this.client.assertOpen(); validatePrompt(text); const requestedDelivery=delivery(options);\n const receipt=await this.client.transport.one<{taskId:string;sessionId:string;delivery?:Delivery;paused?:true;blockedByTaskId?:string}>({\n command:'sdk-session-prompt',id:this.id,prompt:text,delivery:requestedDelivery,\n });\n return {task:new ConnectedTask(this.client,receipt.taskId,receipt.sessionId),requestedDelivery,\n effectiveDelivery:receipt.delivery ?? requestedDelivery,\n ...(receipt.paused ? {paused:true as const,blockedByTaskId:receipt.blockedByTaskId!} : {})};\n }\n async snapshot():Promise<SessionSnapshot> {\n this.client.assertOpen(); return this.client.transport.one({command:'sdk-session-get',id:this.id});\n }\n async close():Promise<void> {\n this.client.assertOpen(); await this.client.transport.one({command:'sdk-session-close',id:this.id});\n }\n}\n\nclass ConnectedTask implements TaskHandle {\n private resultPromise?:Promise<TaskResult>;\n constructor(private readonly client:ConnectedClient,readonly id:string,readonly sessionId:string) {}\n get result():Promise<TaskResult> {\n if (!this.resultPromise) {\n try {\n this.client.assertOpen();\n this.resultPromise=this.client.transport.one({command:'sdk-task-result',id:this.id});\n } catch (error) { this.resultPromise=Promise.reject(error); }\n void this.resultPromise.catch(()=>undefined);\n }\n return this.resultPromise;\n }\n async snapshot():Promise<TaskSnapshot> {\n this.client.assertOpen(); return this.client.transport.one({command:'sdk-task-snapshot',id:this.id});\n }\n async inspect():Promise<TaskDetails> {\n this.client.assertOpen(); return this.client.transport.one({command:'sdk-task-inspect',id:this.id});\n }\n watch(options?:{readonly signal?:AbortSignal}):AsyncIterable<TaskSnapshot> {\n this.client.assertOpen(); const selected=watchOptions(options);\n return this.client.transport.stream({command:'sdk-task-watch',id:this.id},selected.signal);\n }\n responses(options?:{readonly after?:string;readonly signal?:AbortSignal}) {\n this.client.assertOpen(); const selected=observeOptions(options);\n return this.client.transport.stream<import('./execution-types.js').CompleteResponse>(\n {command:'sdk-task-responses',id:this.id,...(selected.after === undefined ? {} : {after:selected.after})},selected.signal);\n }\n async cancel():Promise<TaskSnapshot> {\n this.client.assertOpen(); return this.client.transport.one({command:'sdk-task-cancel',id:this.id});\n }\n}\n\nfunction connectOptions(value:ConnectOptions|undefined):ConnectOptions {\n if (value === undefined) return {};\n exact(value,['start','stateDirectory'],'Connect options');\n if (value.start !== undefined && typeof value.start !== 'boolean') invalid('Connect start must be a boolean.');\n if (value.stateDirectory !== undefined && typeof value.stateDirectory !== 'string') invalid('Connect state directory must be a string.');\n return value;\n}\nasync function connectedOptions(value:ConnectedSessionOptions,directory:string) {\n exact(value,['agent','cwd','env'],'Connected session options');\n const agent=cloneAgent(value.agent);\n const selectedCwd=value.cwd;\n const env=selectedEnvironment(value.env,directory);\n const cwd=await validateCwd(selectedCwd);\n return {agent,cwd,env};\n}\nfunction cloneAgent(value:ConnectedSessionOptions['agent']):ConnectedSessionOptions['agent'] {\n if (typeof value === 'string') return value;\n if (!value || typeof value !== 'object') invalid('Connected agent must be an ID or harness configuration.');\n try { return structuredClone(value); }\n catch { return invalid('Connected harness configuration must contain serializable values.'); }\n}\nfunction selectedEnvironment(source:Readonly<Record<string,string|undefined>>|undefined,directory:string):NodeJS.ProcessEnv {\n const selected=source ?? process.env;\n if (!selected || typeof selected !== 'object' || Array.isArray(selected)) invalid('Connected environment must be an object.');\n // Callers may intentionally replace the environment without NODE_ENV even when frameworks augment ProcessEnv.\n const env={} as NodeJS.ProcessEnv;\n for (const key of Reflect.ownKeys(selected)) {\n if (typeof key !== 'string') invalid('Connected environment keys must be strings.');\n const value=selected[key];\n if (value !== undefined && typeof value !== 'string') invalid('Connected environment values must be strings or undefined.');\n if (value !== undefined) env[key]=value;\n }\n delete env.AGENT_PARENT_TOKEN; delete env.AGENT_CLI_PATH;\n env.AGENT_STATE_DIR=directory;\n return env;\n}\nfunction pageOptions(value:PageOptions|undefined):PageOptions {\n if (value === undefined) return {};\n exact(value,['limit','cursor'],'Page options');\n if (value.limit !== undefined && (!Number.isSafeInteger(value.limit) || value.limit <= 0)) invalid('Page limit must be a positive integer.');\n if (value.cursor !== undefined && typeof value.cursor !== 'string') invalid('Page cursor must be a string.');\n return value;\n}\nfunction taskPageOptions(value:(PageOptions&{readonly sessionId?:string})|undefined) {\n if (value === undefined) return {};\n exact(value,['limit','cursor','sessionId'],'Task page options');\n const page=pageOptions({...(value.limit === undefined ? {} : {limit:value.limit}),...(value.cursor === undefined ? {} : {cursor:value.cursor})});\n return {...page,...(value.sessionId === undefined ? {} : {sessionId:idValue(value.sessionId,'Session ID')})};\n}\nfunction exact(value:unknown,fields:readonly string[],label:string):asserts value is Record<string,any> {\n if (!value || typeof value !== 'object' || Array.isArray(value)\n || Reflect.ownKeys(value).some(key=>typeof key !== 'string' || !fields.includes(key))) invalid(`${label} must contain only supported fields.`);\n}\nfunction idValue(value:unknown,label:string):string {\n if (typeof value !== 'string' || !value) invalid(`${label} must be a nonempty string.`); return value;\n}\nfunction invalid(message:string):never { throw new AgentError('INVALID_ARGUMENT',message); }\n\nexport type { AgentSummary, Client, ConnectedSessionOptions, ConnectOptions } from './connected-types.js';\n"]}
@@ -1,6 +1,9 @@
1
- import type { AgentDefinition, ClaudeCodeConfig, ClaudeCodeOptions, CodexConfig, CodexOptions, FxConfig, FxOptions } from "./types.js";
1
+ import type { AgentDefinition, ClaudeCodeConfig, ClaudeCodeOptions, CodexConfig, CodexOptions, FxConfig, FxOptions, OpencodeConfig, OpencodeOptions, CopilotConfig, CopilotOptions, CursorConfig, CursorOptions } from "./types.js";
2
2
  export declare function codex(options: CodexOptions): CodexConfig;
3
3
  export declare function claudeCode(options: ClaudeCodeOptions): ClaudeCodeConfig;
4
4
  export declare function fx(options: FxOptions): FxConfig;
5
+ export declare function opencode(options: OpencodeOptions): OpencodeConfig;
6
+ export declare function copilot(options: CopilotOptions): CopilotConfig;
7
+ export declare function cursor(options: CursorOptions): CursorConfig;
5
8
  export declare function agent(definition: AgentDefinition): AgentDefinition;
6
9
  export declare function validateAgent(value: unknown, ancestors?: Set<unknown>): asserts value is AgentDefinition;
@@ -4,10 +4,12 @@ import { validateTool } from "./tools.js";
4
4
  function validateHarness(value, configured = false, expectedKind) {
5
5
  object(value);
6
6
  const candidate = configured ? value.kind : expectedKind;
7
- if (candidate !== "codex" && candidate !== "claudeCode" && candidate !== "fx")
7
+ if (!["codex", "claudeCode", "fx", "opencode", "copilot", "cursor"].includes(candidate))
8
8
  invalid("Unsupported harness kind.");
9
9
  const kind = candidate;
10
- const fields = ["model", "effort"];
10
+ const fields = ["model"];
11
+ if (kind === "codex" || kind === "claudeCode" || kind === "fx")
12
+ fields.push("effort");
11
13
  if (kind === "codex" || kind === "claudeCode")
12
14
  fields.push("fast");
13
15
  fields.push(...permissionOptionFields(kind));
@@ -45,6 +47,18 @@ export function fx(options) {
45
47
  validateHarness(options, false, "fx");
46
48
  return Object.freeze({ ...options, kind: "fx" });
47
49
  }
50
+ export function opencode(options) {
51
+ validateHarness(options, false, "opencode");
52
+ return Object.freeze({ ...options, kind: "opencode" });
53
+ }
54
+ export function copilot(options) {
55
+ validateHarness(options, false, "copilot");
56
+ return Object.freeze({ ...options, kind: "copilot" });
57
+ }
58
+ export function cursor(options) {
59
+ validateHarness(options, false, "cursor");
60
+ return Object.freeze({ ...options, kind: "cursor" });
61
+ }
48
62
  export function agent(definition) {
49
63
  validateAgent(definition);
50
64
  return Object.freeze({
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/sdk/definitions.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,SAAS,eAAe,CAAC,KAAc,EAAE,UAAU,GAAG,KAAK,EAAE,YAAoC;IAC/F,MAAM,CAAC,KAAK,CAAC,CAAC;IACd,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;IACzD,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,YAAY,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACpH,MAAM,IAAI,GAA0B,SAAS,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,YAAY;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACpG,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClF,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe;IAC3C,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAgB,CAAC,EAAE,CAAC;QAClG,OAAO,CAAC,yDAAyD,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAqB;IACzC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAA0B;IACnD,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IAC9C,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,OAAO;QACV,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,OAAkB;IACnC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,UAA2B;IAC/C,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,UAAU;QACb,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3F,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,SAAS,GAAG,IAAI,GAAG,EAAW;IAC1E,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACxF,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,2DAA2D,CAAC,CAAC;IAC/F,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjF,IAAI,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,CAAC,mCAAmC,CAAC,CAAC;IACpE,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import type {\n AgentDefinition,\n ClaudeCodeConfig,\n ClaudeCodeOptions,\n CodexConfig,\n CodexOptions,\n FxConfig,\n FxOptions,\n HarnessConfig,\n} from \"./types.js\";\nimport { invalid, nonempty, object, validName } from \"./validation.js\";\nimport { permissionOptionFields, validateHarnessPermissions } from \"./permission-validation.js\";\nimport { validateTool } from \"./tools.js\";\n\nfunction validateHarness(value: unknown, configured = false, expectedKind?: HarnessConfig[\"kind\"]): void {\n object(value);\n const candidate = configured ? value.kind : expectedKind;\n if (candidate !== \"codex\" && candidate !== \"claudeCode\" && candidate !== \"fx\") invalid(\"Unsupported harness kind.\");\n const kind: HarnessConfig[\"kind\"] = candidate;\n const fields = [\"model\", \"effort\"];\n if (kind === \"codex\" || kind === \"claudeCode\") fields.push(\"fast\");\n fields.push(...permissionOptionFields(kind));\n object(value, configured ? [\"kind\", ...fields] : fields);\n nonempty(value.model, \"Model\");\n if (value.effort !== undefined) nonempty(value.effort, \"Effort\");\n if (value.fast !== undefined && typeof value.fast !== \"boolean\") invalid(\"fast must be a boolean.\");\n if (configured && value.kind === \"claudeCode\") validateClaudeEffort(value.effort);\n validateHarnessPermissions(kind, value);\n}\n\nfunction validateClaudeEffort(effort: unknown): void {\n if (effort !== undefined && ![\"low\", \"medium\", \"high\", \"xhigh\", \"max\"].includes(effort as string)) {\n invalid(\"Claude effort must be low, medium, high, xhigh, or max.\");\n }\n}\n\nexport function codex(options: CodexOptions): CodexConfig {\n validateHarness(options, false, \"codex\");\n return Object.freeze({ ...options, kind: \"codex\", fast: options.fast ?? false });\n}\n\nexport function claudeCode(options: ClaudeCodeOptions): ClaudeCodeConfig {\n validateHarness(options, false, \"claudeCode\");\n validateClaudeEffort(options.effort);\n return Object.freeze({\n ...options,\n ...(options.allowedTools ? { allowedTools: Object.freeze([...options.allowedTools]) } : {}),\n ...(options.disallowedTools ? { disallowedTools: Object.freeze([...options.disallowedTools]) } : {}),\n kind: \"claudeCode\",\n fast: options.fast ?? false,\n });\n}\n\nexport function fx(options: FxOptions): FxConfig {\n validateHarness(options, false, \"fx\");\n return Object.freeze({ ...options, kind: \"fx\" });\n}\n\nexport function agent(definition: AgentDefinition): AgentDefinition {\n validateAgent(definition);\n return Object.freeze({\n ...definition,\n ...(Array.isArray(definition.harness) ? { harness: Object.freeze([...definition.harness]) } : {}),\n ...(definition.tools ? { tools: Object.freeze({ ...definition.tools }) } : {}),\n ...(definition.subagents ? { subagents: Object.freeze({ ...definition.subagents }) } : {}),\n });\n}\n\nexport function validateAgent(value: unknown, ancestors = new Set<unknown>()): asserts value is AgentDefinition {\n object(value, [\"name\", \"description\", \"instructions\", \"harness\", \"tools\", \"subagents\"]);\n if (ancestors.has(value)) invalid(\"Subagent definitions cannot contain recursive references.\");\n validName(value.name);\n nonempty(value.description, \"Description\");\n nonempty(value.instructions, \"Instructions\");\n const harnesses = Array.isArray(value.harness) ? value.harness : [value.harness];\n if (!harnesses.length) invalid(\"At least one harness is required.\");\n harnesses.forEach((harness) => validateHarness(harness, true));\n if (value.tools !== undefined) {\n object(value.tools);\n Object.keys(value.tools).forEach(validName);\n Object.values(value.tools).forEach(validateTool);\n }\n if (value.subagents !== undefined) {\n object(value.subagents);\n const next = new Set(ancestors).add(value);\n for (const [name, child] of Object.entries(value.subagents)) {\n validName(name);\n validateAgent(child, next);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/sdk/definitions.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,SAAS,eAAe,CAAC,KAAc,EAAE,UAAU,GAAG,KAAK,EAAE,YAAoC;IAC/F,MAAM,CAAC,KAAK,CAAC,CAAC;IACd,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;IACzD,IAAI,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAmB,CAAC;QAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACxI,MAAM,IAAI,GAAG,SAAkC,CAAC;IAChD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtF,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,YAAY;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACpG,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClF,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe;IAC3C,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAgB,CAAC,EAAE,CAAC;QAClG,OAAO,CAAC,yDAAyD,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAqB;IACzC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAA0B;IACnD,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IAC9C,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,OAAO;QACV,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,OAAkB;IACnC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAwB;IAC/C,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAuB;IAC7C,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAAsB;IAC3C,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,UAA2B;IAC/C,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,UAAU;QACb,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3F,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,SAAS,GAAG,IAAI,GAAG,EAAW;IAC1E,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACxF,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,2DAA2D,CAAC,CAAC;IAC/F,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjF,IAAI,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,CAAC,mCAAmC,CAAC,CAAC;IACpE,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import type {\n AgentDefinition,\n ClaudeCodeConfig,\n ClaudeCodeOptions,\n CodexConfig,\n CodexOptions,\n FxConfig,\n FxOptions,\n HarnessConfig,\n OpencodeConfig,\n OpencodeOptions,\n CopilotConfig,\n CopilotOptions,\n CursorConfig,\n CursorOptions,\n} from \"./types.js\";\nimport { invalid, nonempty, object, validName } from \"./validation.js\";\nimport { permissionOptionFields, validateHarnessPermissions } from \"./permission-validation.js\";\nimport { validateTool } from \"./tools.js\";\n\nfunction validateHarness(value: unknown, configured = false, expectedKind?: HarnessConfig[\"kind\"]): void {\n object(value);\n const candidate = configured ? value.kind : expectedKind;\n if (![\"codex\", \"claudeCode\", \"fx\", \"opencode\", \"copilot\", \"cursor\"].includes(candidate as string)) invalid(\"Unsupported harness kind.\");\n const kind = candidate as HarnessConfig[\"kind\"];\n const fields = [\"model\"];\n if (kind === \"codex\" || kind === \"claudeCode\" || kind === \"fx\") fields.push(\"effort\");\n if (kind === \"codex\" || kind === \"claudeCode\") fields.push(\"fast\");\n fields.push(...permissionOptionFields(kind));\n object(value, configured ? [\"kind\", ...fields] : fields);\n nonempty(value.model, \"Model\");\n if (value.effort !== undefined) nonempty(value.effort, \"Effort\");\n if (value.fast !== undefined && typeof value.fast !== \"boolean\") invalid(\"fast must be a boolean.\");\n if (configured && value.kind === \"claudeCode\") validateClaudeEffort(value.effort);\n validateHarnessPermissions(kind, value);\n}\n\nfunction validateClaudeEffort(effort: unknown): void {\n if (effort !== undefined && ![\"low\", \"medium\", \"high\", \"xhigh\", \"max\"].includes(effort as string)) {\n invalid(\"Claude effort must be low, medium, high, xhigh, or max.\");\n }\n}\n\nexport function codex(options: CodexOptions): CodexConfig {\n validateHarness(options, false, \"codex\");\n return Object.freeze({ ...options, kind: \"codex\", fast: options.fast ?? false });\n}\n\nexport function claudeCode(options: ClaudeCodeOptions): ClaudeCodeConfig {\n validateHarness(options, false, \"claudeCode\");\n validateClaudeEffort(options.effort);\n return Object.freeze({\n ...options,\n ...(options.allowedTools ? { allowedTools: Object.freeze([...options.allowedTools]) } : {}),\n ...(options.disallowedTools ? { disallowedTools: Object.freeze([...options.disallowedTools]) } : {}),\n kind: \"claudeCode\",\n fast: options.fast ?? false,\n });\n}\n\nexport function fx(options: FxOptions): FxConfig {\n validateHarness(options, false, \"fx\");\n return Object.freeze({ ...options, kind: \"fx\" });\n}\n\nexport function opencode(options: OpencodeOptions): OpencodeConfig {\n validateHarness(options, false, \"opencode\");\n return Object.freeze({ ...options, kind: \"opencode\" });\n}\n\nexport function copilot(options: CopilotOptions): CopilotConfig {\n validateHarness(options, false, \"copilot\");\n return Object.freeze({ ...options, kind: \"copilot\" });\n}\n\nexport function cursor(options: CursorOptions): CursorConfig {\n validateHarness(options, false, \"cursor\");\n return Object.freeze({ ...options, kind: \"cursor\" });\n}\n\nexport function agent(definition: AgentDefinition): AgentDefinition {\n validateAgent(definition);\n return Object.freeze({\n ...definition,\n ...(Array.isArray(definition.harness) ? { harness: Object.freeze([...definition.harness]) } : {}),\n ...(definition.tools ? { tools: Object.freeze({ ...definition.tools }) } : {}),\n ...(definition.subagents ? { subagents: Object.freeze({ ...definition.subagents }) } : {}),\n });\n}\n\nexport function validateAgent(value: unknown, ancestors = new Set<unknown>()): asserts value is AgentDefinition {\n object(value, [\"name\", \"description\", \"instructions\", \"harness\", \"tools\", \"subagents\"]);\n if (ancestors.has(value)) invalid(\"Subagent definitions cannot contain recursive references.\");\n validName(value.name);\n nonempty(value.description, \"Description\");\n nonempty(value.instructions, \"Instructions\");\n const harnesses = Array.isArray(value.harness) ? value.harness : [value.harness];\n if (!harnesses.length) invalid(\"At least one harness is required.\");\n harnesses.forEach((harness) => validateHarness(harness, true));\n if (value.tools !== undefined) {\n object(value.tools);\n Object.keys(value.tools).forEach(validName);\n Object.values(value.tools).forEach(validateTool);\n }\n if (value.subagents !== undefined) {\n object(value.subagents);\n const next = new Set(ancestors).add(value);\n for (const [name, child] of Object.entries(value.subagents)) {\n validName(name);\n validateAgent(child, next);\n }\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { AgentDefinition } from "./types.js";
2
+ export declare const hostedToolNames: readonly ["agent_run", "agent_send", "agent_wait", "agent_status", "agent_queue", "agent_cancel", "agent_respond"];
3
+ export declare function captureDefinition(value: unknown): AgentDefinition;
@@ -0,0 +1,59 @@
1
+ import { AgentError } from "../errors.js";
2
+ import { validateAgent } from "./definitions.js";
3
+ export const hostedToolNames = [
4
+ "agent_run",
5
+ "agent_send",
6
+ "agent_wait",
7
+ "agent_status",
8
+ "agent_queue",
9
+ "agent_cancel",
10
+ "agent_respond",
11
+ ];
12
+ const reserved = new Set(hostedToolNames);
13
+ export function captureDefinition(value) {
14
+ validateAgent(value);
15
+ rejectHostedToolCollisions(value);
16
+ return cloneDefinition(value);
17
+ }
18
+ function rejectHostedToolCollisions(definition) {
19
+ for (const name of Object.keys(definition.tools ?? {})) {
20
+ if (reserved.has(name)) {
21
+ throw new AgentError("INVALID_DEFINITION", `Tool name ${name} is reserved for SDK hosted delegation.`);
22
+ }
23
+ }
24
+ for (const child of Object.values(definition.subagents ?? {}))
25
+ rejectHostedToolCollisions(child);
26
+ }
27
+ function cloneDefinition(definition) {
28
+ const harness = Array.isArray(definition.harness)
29
+ ? definition.harness.map(cloneHarness)
30
+ : cloneHarness(definition.harness);
31
+ const tools = definition.tools
32
+ ? Object.fromEntries(Object.entries(definition.tools).map(([name, declared]) => [name, {
33
+ description: declared.description,
34
+ inputSchema: declared.inputSchema,
35
+ execute: declared.execute,
36
+ }]))
37
+ : undefined;
38
+ const subagents = definition.subagents
39
+ ? Object.fromEntries(Object.entries(definition.subagents).map(([name, child]) => [name, cloneDefinition(child)]))
40
+ : undefined;
41
+ return {
42
+ name: definition.name,
43
+ description: definition.description,
44
+ instructions: definition.instructions,
45
+ harness,
46
+ ...(tools ? { tools } : {}),
47
+ ...(subagents ? { subagents } : {}),
48
+ };
49
+ }
50
+ function cloneHarness(harness) {
51
+ if (harness.kind !== "claudeCode")
52
+ return { ...harness };
53
+ return {
54
+ ...harness,
55
+ ...(harness.allowedTools ? { allowedTools: [...harness.allowedTools] } : {}),
56
+ ...(harness.disallowedTools ? { disallowedTools: [...harness.disallowedTools] } : {}),
57
+ };
58
+ }
59
+ //# sourceMappingURL=execution-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-definition.js","sourceRoot":"","sources":["../../src/sdk/execution-definition.ts"],"names":[],"mappings":"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","sourcesContent":["import { AgentError } from \"../errors.js\";\nimport { validateAgent } from \"./definitions.js\";\nimport type { AgentDefinition, HarnessConfig } from \"./types.js\";\n\nexport const hostedToolNames = [\n \"agent_run\",\n \"agent_send\",\n \"agent_wait\",\n \"agent_status\",\n \"agent_queue\",\n \"agent_cancel\",\n \"agent_respond\",\n] as const;\n\nconst reserved = new Set<string>(hostedToolNames);\n\nexport function captureDefinition(value: unknown): AgentDefinition {\n validateAgent(value);\n rejectHostedToolCollisions(value);\n return cloneDefinition(value);\n}\n\nfunction rejectHostedToolCollisions(definition: AgentDefinition): void {\n for (const name of Object.keys(definition.tools ?? {})) {\n if (reserved.has(name)) {\n throw new AgentError(\"INVALID_DEFINITION\", `Tool name ${name} is reserved for SDK hosted delegation.`);\n }\n }\n for (const child of Object.values(definition.subagents ?? {})) rejectHostedToolCollisions(child);\n}\n\nfunction cloneDefinition(definition: AgentDefinition): AgentDefinition {\n const harness = Array.isArray(definition.harness)\n ? definition.harness.map(cloneHarness)\n : cloneHarness(definition.harness as HarnessConfig);\n const tools = definition.tools\n ? Object.fromEntries(Object.entries(definition.tools).map(([name, declared]) => [name, {\n description: declared.description,\n inputSchema: declared.inputSchema,\n execute: declared.execute,\n }]))\n : undefined;\n const subagents = definition.subagents\n ? Object.fromEntries(Object.entries(definition.subagents).map(([name, child]) => [name, cloneDefinition(child)]))\n : undefined;\n return {\n name: definition.name,\n description: definition.description,\n instructions: definition.instructions,\n harness,\n ...(tools ? { tools } : {}),\n ...(subagents ? { subagents } : {}),\n };\n}\n\nfunction cloneHarness(harness: HarnessConfig): HarnessConfig {\n if (harness.kind !== \"claudeCode\") return { ...harness };\n return {\n ...harness,\n ...(harness.allowedTools ? { allowedTools: [...harness.allowedTools] } : {}),\n ...(harness.disallowedTools ? { disallowedTools: [...harness.disallowedTools] } : {}),\n };\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { AdapterOptions, NativeSession } from "../adapters/types.js";
2
+ import type { AccessConfig } from "../config/access.js";
3
+ import type { Coordinator } from "../runtime/coordinator.js";
4
+ import type { DriverFactory } from "../runtime/types.js";
5
+ export type NativeOpener = (options: AdapterOptions) => Promise<NativeSession>;
6
+ export declare function executionDriver(coordinator: Coordinator, access: AccessConfig, open?: NativeOpener): DriverFactory;
@@ -0,0 +1,86 @@
1
+ import { AgentError } from "../errors.js";
2
+ import { HostedDelegation } from "./hosted.js";
3
+ export function executionDriver(coordinator, access, open) {
4
+ return async (input) => {
5
+ if (!("kind" in input.reference) || input.reference.kind !== "inline") {
6
+ throw new AgentError("INVALID_DEFINITION", "The application runner requires an inline agent definition.");
7
+ }
8
+ const hosted = new HostedDelegation(coordinator, input, input.reference.definition);
9
+ const definition = hosted.prepare();
10
+ let selectedHarness;
11
+ let native;
12
+ try {
13
+ const { selectNative } = await import("../runtime/select-native.js");
14
+ native = await selectNative(definition, input.cwd, input.env, access, open, kind => { selectedHarness = kind; }, input.onApproval, { origin: "sdk" });
15
+ }
16
+ catch (error) {
17
+ throw safeDriverError(error, "HARNESS_FAILED", "Native session startup failed.");
18
+ }
19
+ return wrapNative(native, hosted, selectedHarness);
20
+ };
21
+ }
22
+ function wrapNative(native, hosted, selectedHarness) {
23
+ return {
24
+ selectedHarness,
25
+ async turn(prompt) {
26
+ hosted.beginTurn();
27
+ try {
28
+ return await native.turn(prompt);
29
+ }
30
+ catch (error) {
31
+ throw safeDriverError(error, "HARNESS_FAILED", "Native execution failed.");
32
+ }
33
+ finally {
34
+ await hosted.finishTurn();
35
+ }
36
+ },
37
+ async steer(prompt) {
38
+ try {
39
+ await native.steer(prompt);
40
+ }
41
+ catch (error) {
42
+ throw safeDriverError(error, "HARNESS_FAILED", "Native steering failed.");
43
+ }
44
+ },
45
+ async interrupt() {
46
+ hosted.stopManagedWaits();
47
+ try {
48
+ await native.interrupt();
49
+ }
50
+ catch (error) {
51
+ throw safeDriverError(error, "CANCEL_FAILED", "Native interruption could not be confirmed.");
52
+ }
53
+ finally {
54
+ await hosted.drain();
55
+ }
56
+ },
57
+ async resume() {
58
+ hosted.beginTurn();
59
+ try {
60
+ return await native.resume();
61
+ }
62
+ catch (error) {
63
+ throw safeDriverError(error, "HARNESS_FAILED", "Native recovery failed.");
64
+ }
65
+ finally {
66
+ await hosted.finishTurn();
67
+ }
68
+ },
69
+ async close() {
70
+ hosted.stopManagedWaits();
71
+ try {
72
+ await native.close();
73
+ }
74
+ catch (error) {
75
+ throw safeDriverError(error, "HARNESS_FAILED", "Native session cleanup could not be confirmed.");
76
+ }
77
+ finally {
78
+ await hosted.drain();
79
+ }
80
+ },
81
+ };
82
+ }
83
+ function safeDriverError(error, code, message) {
84
+ return error instanceof AgentError ? error : new AgentError(code, message);
85
+ }
86
+ //# sourceMappingURL=execution-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-driver.js","sourceRoot":"","sources":["../../src/sdk/execution-driver.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AdapterOptions, NativeSession } from \"../adapters/types.js\";\nimport type { AccessConfig } from \"../config/access.js\";\nimport { AgentError } from \"../errors.js\";\nimport type { Coordinator } from \"../runtime/coordinator.js\";\nimport type { DriverFactory, ManagedNativeSession } from \"../runtime/types.js\";\nimport type { HarnessKind } from \"./types.js\";\nimport { HostedDelegation } from \"./hosted.js\";\n\nexport type NativeOpener = (options: AdapterOptions) => Promise<NativeSession>;\n\nexport function executionDriver(\n coordinator: Coordinator,\n access: AccessConfig,\n open?: NativeOpener,\n): DriverFactory {\n return async input => {\n if (!(\"kind\" in input.reference) || input.reference.kind !== \"inline\") {\n throw new AgentError(\"INVALID_DEFINITION\", \"The application runner requires an inline agent definition.\");\n }\n const hosted = new HostedDelegation(coordinator, input, input.reference.definition);\n const definition = hosted.prepare();\n let selectedHarness: HarnessKind | undefined;\n let native: NativeSession;\n try {\n const { selectNative } = await import(\"../runtime/select-native.js\");\n native = await selectNative(\n definition,\n input.cwd,\n input.env,\n access,\n open,\n kind => { selectedHarness = kind; },\n input.onApproval,\n { origin: \"sdk\" },\n );\n } catch (error) {\n throw safeDriverError(error, \"HARNESS_FAILED\", \"Native session startup failed.\");\n }\n return wrapNative(native, hosted, selectedHarness!);\n };\n}\n\nfunction wrapNative(native: NativeSession, hosted: HostedDelegation, selectedHarness: HarnessKind): ManagedNativeSession {\n return {\n selectedHarness,\n async turn(prompt) {\n hosted.beginTurn();\n try { return await native.turn(prompt); }\n catch (error) { throw safeDriverError(error, \"HARNESS_FAILED\", \"Native execution failed.\"); }\n finally { await hosted.finishTurn(); }\n },\n async steer(prompt) {\n try { await native.steer(prompt); }\n catch (error) { throw safeDriverError(error, \"HARNESS_FAILED\", \"Native steering failed.\"); }\n },\n async interrupt() {\n hosted.stopManagedWaits();\n try { await native.interrupt(); }\n catch (error) { throw safeDriverError(error, \"CANCEL_FAILED\", \"Native interruption could not be confirmed.\"); }\n finally { await hosted.drain(); }\n },\n async resume() {\n hosted.beginTurn();\n try { return await native.resume(); }\n catch (error) { throw safeDriverError(error, \"HARNESS_FAILED\", \"Native recovery failed.\"); }\n finally { await hosted.finishTurn(); }\n },\n async close() {\n hosted.stopManagedWaits();\n try { await native.close(); }\n catch (error) { throw safeDriverError(error, \"HARNESS_FAILED\", \"Native session cleanup could not be confirmed.\"); }\n finally { await hosted.drain(); }\n },\n };\n}\n\nfunction safeDriverError(error: unknown, code: string, message: string): AgentError {\n return error instanceof AgentError ? error : new AgentError(code, message);\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Coordinator } from "../runtime/coordinator.js";
2
+ import type { TaskObservation } from "../runtime/snapshots.js";
3
+ export declare function observeTask(coordinator: Coordinator, taskId: string, after?: string, readerToken?: string, signal?: AbortSignal): Promise<TaskObservation>;
@@ -0,0 +1,35 @@
1
+ import { AgentError } from "../errors.js";
2
+ export async function observeTask(coordinator, taskId, after, readerToken, signal) {
3
+ if (signal?.aborted)
4
+ throw new AgentError("OBSERVATION_CLOSED", "The observer disconnected.");
5
+ if (after === "")
6
+ throw new AgentError("UNKNOWN_RESPONSE", "The response does not belong to this task.");
7
+ const record = await coordinator.observe(taskId, after, readerToken, signal);
8
+ if (record.type === "response") {
9
+ return structuredClone({
10
+ type: "response",
11
+ taskId: record.taskId,
12
+ sessionId: record.sessionId,
13
+ response: { responseId: record.responseId, text: record.text, state: record.state },
14
+ });
15
+ }
16
+ if (record.type === "approval_required") {
17
+ return structuredClone({
18
+ type: "approval_required",
19
+ taskId: record.taskId,
20
+ sessionId: record.sessionId,
21
+ state: record.state,
22
+ requests: record.requests ?? [],
23
+ });
24
+ }
25
+ const snapshot = coordinator.snapshot(taskId);
26
+ return structuredClone({
27
+ type: "terminal",
28
+ taskId: record.taskId,
29
+ sessionId: record.sessionId,
30
+ state: record.state,
31
+ ...(record.error ? { error: record.error } : {}),
32
+ stopUnconfirmed: snapshot.stopUnconfirmed,
33
+ });
34
+ }
35
+ //# sourceMappingURL=execution-observation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-observation.js","sourceRoot":"","sources":["../../src/sdk/execution-observation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,WAAwB,EACxB,MAAc,EACd,KAAc,EACd,WAAoB,EACpB,MAAoB;IAEpB,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB,EAAE,4BAA4B,CAAC,CAAC;IAC9F,IAAI,KAAK,KAAK,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,4CAA4C,CAAC,CAAC;IACzG,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,eAAe,CAAC;YACrB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;SACtF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACxC,OAAO,eAAe,CAAC;YACrB,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,eAAe,CAAC;QACrB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,eAAe,EAAE,QAAQ,CAAC,eAAe;KAC1C,CAAoB,CAAC;AACxB,CAAC","sourcesContent":["import { AgentError } from \"../errors.js\";\nimport type { Coordinator } from \"../runtime/coordinator.js\";\nimport type { TaskObservation } from \"../runtime/snapshots.js\";\n\nexport async function observeTask(\n coordinator: Coordinator,\n taskId: string,\n after?: string,\n readerToken?: string,\n signal?: AbortSignal,\n): Promise<TaskObservation> {\n if (signal?.aborted) throw new AgentError(\"OBSERVATION_CLOSED\", \"The observer disconnected.\");\n if (after === \"\") throw new AgentError(\"UNKNOWN_RESPONSE\", \"The response does not belong to this task.\");\n const record = await coordinator.observe(taskId, after, readerToken, signal);\n if (record.type === \"response\") {\n return structuredClone({\n type: \"response\",\n taskId: record.taskId,\n sessionId: record.sessionId,\n response: { responseId: record.responseId!, text: record.text!, state: record.state },\n });\n }\n if (record.type === \"approval_required\") {\n return structuredClone({\n type: \"approval_required\",\n taskId: record.taskId,\n sessionId: record.sessionId,\n state: record.state,\n requests: record.requests ?? [],\n });\n }\n const snapshot = coordinator.snapshot(taskId);\n return structuredClone({\n type: \"terminal\",\n taskId: record.taskId,\n sessionId: record.sessionId,\n state: record.state,\n ...(record.error ? { error: record.error } : {}),\n stopUnconfirmed: snapshot.stopUnconfirmed,\n }) as TaskObservation;\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import { type AccessConfig } from "../config/access.js";
2
+ import type { Delivery, RunnerOptions } from "./execution-types.js";
3
+ export declare function runnerConfiguration(options: RunnerOptions | undefined): {
4
+ env: NodeJS.ProcessEnv;
5
+ access: AccessConfig;
6
+ };
7
+ export declare function validatePrompt(prompt: unknown): asserts prompt is string;
8
+ export declare function validateCwd(cwd: unknown): Promise<string>;
9
+ export declare function runCwd(options: unknown): unknown;
10
+ export declare function delivery(options: unknown): Delivery;
11
+ export declare function observeOptions(options: unknown): {
12
+ after?: string;
13
+ signal?: AbortSignal;
14
+ };
15
+ export declare function watchOptions(options: unknown): {
16
+ signal?: AbortSignal;
17
+ };