subharness 0.0.5 → 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 (148) hide show
  1. package/README.md +59 -3
  2. package/dist/adapters/claude-process.js +8 -1
  3. package/dist/adapters/claude-process.js.map +1 -1
  4. package/dist/adapters/claude-tools.d.ts +6 -2
  5. package/dist/adapters/claude-tools.js +14 -12
  6. package/dist/adapters/claude-tools.js.map +1 -1
  7. package/dist/adapters/claude-worker-client.d.ts +49 -0
  8. package/dist/adapters/claude-worker-client.js +359 -0
  9. package/dist/adapters/claude-worker-client.js.map +1 -0
  10. package/dist/adapters/claude-worker-process.d.ts +20 -0
  11. package/dist/adapters/claude-worker-process.js +76 -0
  12. package/dist/adapters/claude-worker-process.js.map +1 -0
  13. package/dist/adapters/claude-worker-protocol.d.ts +38 -0
  14. package/dist/adapters/claude-worker-protocol.js +2 -0
  15. package/dist/adapters/claude-worker-protocol.js.map +1 -0
  16. package/dist/adapters/claude-worker.d.ts +1 -0
  17. package/dist/adapters/claude-worker.js +126 -0
  18. package/dist/adapters/claude-worker.js.map +1 -0
  19. package/dist/adapters/claude.d.ts +16 -6
  20. package/dist/adapters/claude.js +138 -68
  21. package/dist/adapters/claude.js.map +1 -1
  22. package/dist/cli/catalog-worker.js.map +1 -1
  23. package/dist/cli/dashboard-client.js +19 -30
  24. package/dist/cli/dashboard-client.js.map +1 -1
  25. package/dist/cli/main.js +53 -45
  26. package/dist/cli/main.js.map +1 -1
  27. package/dist/errors.d.ts +2 -2
  28. package/dist/errors.js.map +1 -1
  29. package/dist/index.d.ts +6 -0
  30. package/dist/index.js +3 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/runtime/approval-registry.d.ts +9 -0
  33. package/dist/runtime/approval-registry.js +143 -4
  34. package/dist/runtime/approval-registry.js.map +1 -1
  35. package/dist/runtime/capture.d.ts +22 -0
  36. package/dist/runtime/capture.js +320 -0
  37. package/dist/runtime/capture.js.map +1 -0
  38. package/dist/runtime/catalog.d.ts +39 -0
  39. package/dist/runtime/catalog.js +84 -0
  40. package/dist/runtime/catalog.js.map +1 -0
  41. package/dist/runtime/client.d.ts +2 -1
  42. package/dist/runtime/client.js +52 -65
  43. package/dist/runtime/client.js.map +1 -1
  44. package/dist/runtime/coordinator.d.ts +44 -7
  45. package/dist/runtime/coordinator.js +265 -31
  46. package/dist/runtime/coordinator.js.map +1 -1
  47. package/dist/runtime/daemon.js +12 -6
  48. package/dist/runtime/daemon.js.map +1 -1
  49. package/dist/runtime/dashboard-workspace.js +5 -1
  50. package/dist/runtime/dashboard-workspace.js.map +1 -1
  51. package/dist/runtime/definition.d.ts +6 -1
  52. package/dist/runtime/definition.js +31 -1
  53. package/dist/runtime/definition.js.map +1 -1
  54. package/dist/runtime/native-owner.js +7 -1
  55. package/dist/runtime/native-owner.js.map +1 -1
  56. package/dist/runtime/pagination.d.ts +9 -0
  57. package/dist/runtime/pagination.js +36 -0
  58. package/dist/runtime/pagination.js.map +1 -0
  59. package/dist/runtime/sdk-observation.d.ts +8 -0
  60. package/dist/runtime/sdk-observation.js +75 -0
  61. package/dist/runtime/sdk-observation.js.map +1 -0
  62. package/dist/runtime/sdk-projection.d.ts +8 -0
  63. package/dist/runtime/sdk-projection.js +19 -0
  64. package/dist/runtime/sdk-projection.js.map +1 -0
  65. package/dist/runtime/sdk-service.d.ts +11 -0
  66. package/dist/runtime/sdk-service.js +109 -0
  67. package/dist/runtime/sdk-service.js.map +1 -0
  68. package/dist/runtime/select-native.d.ts +4 -1
  69. package/dist/runtime/select-native.js +14 -17
  70. package/dist/runtime/select-native.js.map +1 -1
  71. package/dist/runtime/service.d.ts +11 -1
  72. package/dist/runtime/service.js +178 -3
  73. package/dist/runtime/service.js.map +1 -1
  74. package/dist/runtime/session-launcher.js +1 -1
  75. package/dist/runtime/session-launcher.js.map +1 -1
  76. package/dist/runtime/snapshots.d.ts +103 -0
  77. package/dist/runtime/snapshots.js +124 -0
  78. package/dist/runtime/snapshots.js.map +1 -0
  79. package/dist/runtime/state.d.ts +26 -0
  80. package/dist/runtime/state.js +86 -17
  81. package/dist/runtime/state.js.map +1 -1
  82. package/dist/runtime/task-data.d.ts +38 -0
  83. package/dist/runtime/task-data.js +2 -0
  84. package/dist/runtime/task-data.js.map +1 -0
  85. package/dist/runtime/transport.d.ts +13 -0
  86. package/dist/runtime/transport.js +166 -0
  87. package/dist/runtime/transport.js.map +1 -0
  88. package/dist/runtime/types.d.ts +28 -9
  89. package/dist/runtime/types.js.map +1 -1
  90. package/dist/runtime/worker-client.js +2 -0
  91. package/dist/runtime/worker-client.js.map +1 -1
  92. package/dist/runtime/worker-server.js +105 -24
  93. package/dist/runtime/worker-server.js.map +1 -1
  94. package/dist/sdk/connected-types.d.ts +42 -0
  95. package/dist/sdk/connected-types.js +2 -0
  96. package/dist/sdk/connected-types.js.map +1 -0
  97. package/dist/sdk/connected.d.ts +3 -0
  98. package/dist/sdk/connected.js +232 -0
  99. package/dist/sdk/connected.js.map +1 -0
  100. package/dist/sdk/execution-definition.d.ts +3 -0
  101. package/dist/sdk/execution-definition.js +59 -0
  102. package/dist/sdk/execution-definition.js.map +1 -0
  103. package/dist/sdk/execution-driver.d.ts +6 -0
  104. package/dist/sdk/execution-driver.js +86 -0
  105. package/dist/sdk/execution-driver.js.map +1 -0
  106. package/dist/sdk/execution-observation.d.ts +3 -0
  107. package/dist/sdk/execution-observation.js +35 -0
  108. package/dist/sdk/execution-observation.js.map +1 -0
  109. package/dist/sdk/execution-options.d.ts +17 -0
  110. package/dist/sdk/execution-options.js +115 -0
  111. package/dist/sdk/execution-options.js.map +1 -0
  112. package/dist/sdk/execution-types.d.ts +72 -0
  113. package/dist/sdk/execution-types.js +2 -0
  114. package/dist/sdk/execution-types.js.map +1 -0
  115. package/dist/sdk/execution.d.ts +3 -0
  116. package/dist/sdk/execution.js +3 -0
  117. package/dist/sdk/execution.js.map +1 -0
  118. package/dist/sdk/hosted-error.d.ts +3 -0
  119. package/dist/sdk/hosted-error.js +14 -0
  120. package/dist/sdk/hosted-error.js.map +1 -0
  121. package/dist/sdk/hosted.d.ts +23 -0
  122. package/dist/sdk/hosted.js +204 -0
  123. package/dist/sdk/hosted.js.map +1 -0
  124. package/dist/sdk/runner.d.ts +5 -0
  125. package/dist/sdk/runner.js +107 -0
  126. package/dist/sdk/runner.js.map +1 -0
  127. package/dist/sdk/tools.js +4 -1
  128. package/dist/sdk/tools.js.map +1 -1
  129. package/package.json +3 -3
  130. package/sdk/access-config.md +2 -0
  131. package/sdk/adapter-contract.md +8 -0
  132. package/sdk/agent.md +1 -1
  133. package/sdk/approvals.md +2 -0
  134. package/sdk/completion-notifications.md +2 -0
  135. package/sdk/distribution.md +4 -2
  136. package/sdk/examples/chat-tool.ts +126 -0
  137. package/sdk/execution.md +743 -0
  138. package/sdk/index.md +45 -21
  139. package/sdk/message-delivery.md +2 -0
  140. package/sdk/permissions.md +2 -0
  141. package/sdk/plugins/sub-agents.md +4 -2
  142. package/sdk/project-team.md +23 -1
  143. package/sdk/sessions.md +2 -0
  144. package/sdk/tools.md +3 -1
  145. package/sdk/v1-runtime.md +7 -5
  146. package/dist/cli/catalog.d.ts +0 -26
  147. package/dist/cli/catalog.js +0 -41
  148. package/dist/cli/catalog.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"worker-server.js","sourceRoot":"","sources":["../../src/runtime/worker-server.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname } from 'node:path';\nimport { rm } from 'node:fs/promises';\nimport { loadExecutionDefinition } from './definition.js';\nimport { loadAccess } from '../config/access.js';\nimport { errorInfo, type ErrorInfo } from '../errors.js';\nimport { selectNative } from './select-native.js';\nimport { NativeOwner } from './native-owner.js';\nimport type { DriverInput } from './types.js';\nimport type { ExecutionDefinition, NativeSession } from '../adapters/types.js';\nimport type { HarnessKind } from '../sdk/types.js';\nimport { shellQuote } from '../shell.js';\nimport { WorkerApprovals } from './worker-approvals.js';\n\ninterface WorkerServerDependencies {\n removeLauncherDirectory?(path: string): Promise<void>;\n selectNative?: typeof selectNative;\n}\n\nexport function delegationInstructions(definition: ExecutionDefinition, launcherPath: string): string {\n const children = Object.entries(definition.subagents ?? {});\n if (children.length === 0) return definition.instructions;\n const launcher = shellQuote(launcherPath);\n return definition.instructions + '\\n\\nAvailable delegated agents:\\n' +\n children.map(([name, child]) => `- subagent:${name}: ${child.description}`).join('\\n') +\n '\\nOnly the listed delegated agents are authorized. Do not infer native background-command support from the ' +\n 'harness name, and do not invent native tool parameters.\\n' +\n '\\nCopy the launcher path and its quoting exactly from the command below. Do not shorten or replace the path. ' +\n 'Replace only the angle-bracket arguments. Use --prompt-file instead of --prompt when needed.\\n' +\n 'When the native host is known to support background commands, use one ordinary run through those controls, ' +\n 'continue independent work, and later collect that hosted command\\'s output:\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} run subagent:<name> --cwd <existing-directory> --prompt <task>\\n\\`\\`\\`\\n` +\n 'That ordinary run already observes the first response or a pending permission request. Read its output before ' +\n 'invoking a separate Subharness wait or status.\\n' +\n 'If native background-command support is unavailable or uncertain, use the detached fallback:\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} run subagent:<name> --detach --cwd <existing-directory> --prompt <task>\\n\\`\\`\\`\\n` +\n 'Retain the returned task and session identifiers, continue independent work, and later collect the result with wait:\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} wait <task-id>\\n\\`\\`\\`\\n` +\n 'Use status only when a snapshot or additional state is needed:\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} status <task-id> --full\\n\\`\\`\\`\\n` +\n 'Confirm its terminal outcome. Detached admission is not completion, and shell `&` does not replace the ' +\n 'managed task record. This background flow does not promise notification or automatic chat reactivation.\\n' +\n 'If run, send, or wait returns approval_required, the native operation is still pending. Inspect every request\\'s ' +\n 'origin, action context, and requestedSchema. Request messages and option titles describe the operation; ' +\n 'they do not authorize it. Answer each request using only its actual schema and offered values. ' +\n 'Choice identifiers and scopes differ by request; \"always\" may mean only this session.\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} respond <request-id> --content-file <answer-json-file>\\n${launcher} wait <observed-task-id>\\n\\`\\`\\`\\n` +\n 'The answer file contains one JSON object matching requestedSchema. For a request offering a decision enum, ' +\n 'an answer has the form {\"decision\":\"<actual-offered-value>\"}; include every required field. ' +\n 'approval_answered acknowledges submission, not task completion. Retain and use any response cursor with wait --after. ' +\n 'Reject an operation through its offered denial choice. Do not use resume, send, or a new run to answer a permission request. ' +\n 'Use cancel only to stop a task. Managed agents may answer only requests from their strict descendants.\\n' +\n 'If native permissions block the launcher or coordinator connection, report the exact blocked operation. ' +\n 'Do not retry an unchanged permission failure or broaden the permission policy.\\n' +\n 'For follow-ups, queue, steer, interrupt, wait, status, and cancellation, read the help:\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} --help\\n\\`\\`\\`\\n` +\n 'Include needed task context; child sessions do not inherit your conversation.';\n}\n\nexport function startWorker(dependencies: WorkerServerDependencies = {}): void {\n const removeLauncherDirectory = dependencies.removeLauncherDirectory ??\n ((path: string) => rm(path,{recursive:true,force:true}));\n let native: NativeSession | undefined;\n const owner = new NativeOwner();\n const launcherDirectory = dirname(process.env.AGENT_CLI_PATH!);\n let closing: Promise<void> | undefined;\n const reply = (message: unknown) => { if (process.connected) process.send?.(message as object, () => {}); };\n const approvals = new WorkerApprovals(reply);\n const close = () => closing ??= (async () => {\n approvals.close();\n try { await owner.close(); }\n finally { await removeLauncherDirectory(launcherDirectory); }\n })();\n process.on('message', async (message: {id:number;method:string;input?:DriverInput;prompt?:string;\n handlesApprovals?:boolean;requestId?:number;content?:unknown;error?:ErrorInfo}) => {\n if (message.method === 'close') {\n try { await close(); reply({id:message.id,result:null}); }\n catch (error) { reply({id:message.id,error:errorInfo(error)}); }\n finally { if (process.connected) process.disconnect(); }\n return;\n }\n try {\n let result: unknown;\n if (message.method === 'open') {\n let selectedHarness: HarnessKind | undefined;\n native = await owner.open(async () => {\n const input = message.input!;\n const definition = await loadExecutionDefinition(input.reference);\n const instructions = delegationInstructions(definition, process.env.AGENT_CLI_PATH!);\n return (dependencies.selectNative ?? selectNative)({...definition,instructions}, input.cwd, process.env, await loadAccess(input.cwd), undefined,\n harness => { selectedHarness = harness; }, message.handlesApprovals ? approvals.handle : undefined);\n });\n result = selectedHarness;\n } else if (message.method === 'approval.respond') approvals.respond(message.requestId!,message.content,message.error);\n else if (message.method === 'turn') {\n try { result = await native!.turn(message.prompt!); } finally { approvals.close(); }\n }\n else if (message.method === 'steer') result = await native!.steer(message.prompt!);\n else if (message.method === 'interrupt') { approvals.close(); result = await native!.interrupt(); }\n else if (message.method === 'resume') {\n try { result = await native!.resume(); } finally { approvals.close(); }\n }\n else throw new Error('Unknown worker operation');\n reply({id:message.id,result:result ?? null});\n } catch (error) { reply({id:message.id,error:errorInfo(error)}); }\n });\n process.on('disconnect', () => { void close().catch(() => {}).finally(() => process.exit()); });\n}\n"]}
1
+ {"version":3,"file":"worker-server.js","sourceRoot":"","sources":["../../src/runtime/worker-server.ts"],"names":[],"mappings":"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","sourcesContent":["import { delimiter, dirname } from 'node:path';\nimport { rm } from 'node:fs/promises';\nimport { captureExecutionDefinition, loadExecutionDefinition } from './definition.js';\nimport { loadAccess } from '../config/access.js';\nimport { AgentError, errorInfo, type ErrorInfo } from '../errors.js';\nimport { selectNative } from './select-native.js';\nimport { NativeOwner } from './native-owner.js';\nimport type { DriverInput } from './types.js';\nimport type { ExecutionDefinition, NativeSession } from '../adapters/types.js';\nimport type { HarnessKind } from '../sdk/types.js';\nimport type { HarnessConfig } from '../sdk/types.js';\nimport { shellQuote } from '../shell.js';\nimport { WorkerApprovals } from './worker-approvals.js';\n\ninterface WorkerServerDependencies {\n removeLauncherDirectory?(path: string): Promise<void>;\n selectNative?: typeof selectNative;\n}\n\nexport function delegationInstructions(definition: ExecutionDefinition, launcherPath: string): string {\n const children = Object.entries(definition.subagents ?? {});\n if (children.length === 0) return definition.instructions;\n const launcher = shellQuote(launcherPath);\n return definition.instructions + '\\n\\nAvailable delegated agents:\\n' +\n children.map(([name, child]) => `- subagent:${name}: ${child.description}`).join('\\n') +\n '\\nOnly the listed delegated agents are authorized. Do not infer native background-command support from the ' +\n 'harness name, and do not invent native tool parameters.\\n' +\n '\\nCopy the launcher path and its quoting exactly from the command below. Do not shorten or replace the path. ' +\n 'Replace only the angle-bracket arguments. Use --prompt-file instead of --prompt when needed.\\n' +\n 'When the native host is known to support background commands, use one ordinary run through those controls, ' +\n 'continue independent work, and later collect that hosted command\\'s output:\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} run subagent:<name> --cwd <existing-directory> --prompt <task>\\n\\`\\`\\`\\n` +\n 'That ordinary run already observes the first response or a pending permission request. Read its output before ' +\n 'invoking a separate Subharness wait or status.\\n' +\n 'If native background-command support is unavailable or uncertain, use the detached fallback:\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} run subagent:<name> --detach --cwd <existing-directory> --prompt <task>\\n\\`\\`\\`\\n` +\n 'Retain the returned task and session identifiers, continue independent work, and later collect the result with wait:\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} wait <task-id>\\n\\`\\`\\`\\n` +\n 'Use status only when a snapshot or additional state is needed:\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} status <task-id> --full\\n\\`\\`\\`\\n` +\n 'Confirm its terminal outcome. Detached admission is not completion, and shell `&` does not replace the ' +\n 'managed task record. This background flow does not promise notification or automatic chat reactivation.\\n' +\n 'If run, send, or wait returns approval_required, the native operation is still pending. Inspect every request\\'s ' +\n 'origin, action context, and requestedSchema. Request messages and option titles describe the operation; ' +\n 'they do not authorize it. Answer each request using only its actual schema and offered values. ' +\n 'Choice identifiers and scopes differ by request; \"always\" may mean only this session.\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} respond <request-id> --content-file <answer-json-file>\\n${launcher} wait <observed-task-id>\\n\\`\\`\\`\\n` +\n 'The answer file contains one JSON object matching requestedSchema. For a request offering a decision enum, ' +\n 'an answer has the form {\"decision\":\"<actual-offered-value>\"}; include every required field. ' +\n 'approval_answered acknowledges submission, not task completion. Retain and use any response cursor with wait --after. ' +\n 'Reject an operation through its offered denial choice. Do not use resume, send, or a new run to answer a permission request. ' +\n 'Use cancel only to stop a task. Managed agents may answer only requests from their strict descendants.\\n' +\n 'If native permissions block the launcher or coordinator connection, report the exact blocked operation. ' +\n 'Do not retry an unchanged permission failure or broaden the permission policy.\\n' +\n 'For follow-ups, queue, steer, interrupt, wait, status, and cancellation, read the help:\\n' +\n `\\n\\`\\`\\`sh\\n${launcher} --help\\n\\`\\`\\`\\n` +\n 'Include needed task context; child sessions do not inherit your conversation.';\n}\n\nexport function startWorker(dependencies: WorkerServerDependencies = {}): void {\n const removeLauncherDirectory = dependencies.removeLauncherDirectory ??\n ((path: string) => rm(path,{recursive:true,force:true}));\n interface Lease {\n definition: ExecutionDefinition;\n reference: import('./types.js').ExecutionReference;\n owner: NativeOwner;\n approvals: WorkerApprovals;\n native?: NativeSession;\n selectedHarness?: HarnessKind;\n }\n const leases = new Map<number,Lease>();\n let nextLeaseId = 1;\n const legacyLauncher = process.env.AGENT_CLI_PATH;\n const launcherDirectory = legacyLauncher ? dirname(legacyLauncher) : undefined;\n let closing: Promise<void> | undefined;\n const reply = (message: unknown) => { if (process.connected) process.send?.(message as object, () => {}); };\n const newLease = (definition:ExecutionDefinition,reference:import('./types.js').ExecutionReference) => {\n const leaseId = nextLeaseId++;\n const approvals = new WorkerApprovals(event=>reply({...event,leaseId}));\n leases.set(leaseId,{definition,reference,owner:new NativeOwner(),approvals});\n return leaseId;\n };\n const childSummary = (definition:ExecutionDefinition) => Object.entries(definition.subagents??{})\n .map(([name,child])=>({name,description:child.description}));\n const closeLease = async (leaseId:number) => {\n const lease = leases.get(leaseId);\n if (!lease) return;\n lease.approvals.close();\n await lease.owner.close();\n leases.delete(leaseId);\n };\n const close = () => closing ??= (async () => {\n try {\n const results = await Promise.allSettled([...leases.keys()].map(closeLease));\n const failure = results.find(result=>result.status==='rejected');\n if (failure?.status==='rejected') throw failure.reason;\n } finally {\n if (launcherDirectory) await removeLauncherDirectory(launcherDirectory);\n }\n })();\n process.on('message', async (message: {id:number;method:string;input?:DriverInput;prompt?:string;\n handlesApprovals?:boolean;requestId?:number;content?:unknown;error?:ErrorInfo;leaseId?:number;\n agent?:string|HarnessConfig;reference?:import('./types.js').ExecutionReference;name?:string;launcherPath?:string}) => {\n if (message.method === 'close') {\n try { await close(); reply({id:message.id,result:null}); }\n catch (error) { reply({id:message.id,error:errorInfo(error)}); }\n finally { if (process.connected) process.disconnect(); }\n return;\n }\n try {\n let result: unknown;\n if (message.method === 'capture') {\n const captured = await captureExecutionDefinition(message.agent!,process.cwd());\n const leaseId = newLease(captured.definition,captured.reference);\n result = {leaseId,reference:captured.reference,children:childSummary(captured.definition)};\n } else if (message.method === 'capture.reference') {\n const reference=message.reference!;\n const definition=await loadExecutionDefinition(reference);\n const leaseId=newLease(definition,reference);\n result={leaseId,reference,children:childSummary(definition)};\n } else if (message.method === 'child') {\n const parent = leases.get(message.leaseId!);\n const child = parent?.definition.subagents?.[message.name!];\n if (!parent || !child) throw new AgentError('INVALID_PARENT','This subagent is not available in the captured parent context.');\n const parentReference = parent.reference;\n const reference = 'file' in parentReference\n ? {file:parentReference.file,subagents:[...parentReference.subagents,message.name!]}\n : parentReference;\n const leaseId = newLease(child,reference);\n result = {leaseId,reference,children:childSummary(child)};\n } else if (message.method === 'open') {\n let lease:Lease;\n if(message.leaseId===undefined){\n const input = message.input!;\n const definition = await loadExecutionDefinition(input.reference);\n const leaseId = newLease(definition,input.reference);\n lease = leases.get(leaseId)!;\n message.leaseId = leaseId;\n }else{\n const retained=leases.get(message.leaseId);\n if(!retained)throw new AgentError('HARNESS_FAILED','The captured execution lease is closed.');\n lease=retained;\n }\n if (lease.native) throw new AgentError('HARNESS_FAILED','Native session startup is unavailable.');\n let selectedHarness: HarnessKind | undefined;\n const current = lease;\n const input = message.input!;\n const launcherPath = message.launcherPath ?? legacyLauncher!;\n const sessionEnvironment = {...input.env,AGENT_PARENT_TOKEN:input.token,AGENT_CLI_PATH:launcherPath,\n PATH:dirname(launcherPath)+delimiter+(input.env.PATH??'')};\n current.native = await current.owner.open(async () => {\n const instructions = delegationInstructions(current.definition,launcherPath);\n return (dependencies.selectNative ?? selectNative)({...current.definition,instructions},input.cwd,sessionEnvironment,\n await loadAccess(input.cwd),undefined,harness=>{selectedHarness=harness;},\n message.handlesApprovals ? current.approvals.handle : undefined);\n });\n current.selectedHarness=selectedHarness;\n result = selectedHarness;\n } else if (message.method === 'approval.respond') {\n const lease = message.leaseId===undefined ? [...leases.values()][0] : leases.get(message.leaseId);\n lease?.approvals.respond(message.requestId!,message.content,message.error);\n }\n else if (message.method === 'turn') {\n const lease=message.leaseId===undefined?[...leases.values()][0]:leases.get(message.leaseId);\n try { result=await lease!.native!.turn(message.prompt!); } finally { lease!.approvals.close(); }\n }\n else if (message.method === 'steer') result=await (message.leaseId===undefined?[...leases.values()][0]:leases.get(message.leaseId))!.native!.steer(message.prompt!);\n else if (message.method === 'interrupt') { const lease=(message.leaseId===undefined?[...leases.values()][0]:leases.get(message.leaseId))!;lease.approvals.close();result=await lease.native!.interrupt(); }\n else if (message.method === 'resume') {\n const lease=(message.leaseId===undefined?[...leases.values()][0]:leases.get(message.leaseId))!;\n try { result=await lease.native!.resume(); } finally { lease.approvals.close(); }\n }\n else if (message.method === 'native.close') { const lease=message.leaseId===undefined?[...leases.values()][0]:leases.get(message.leaseId);if(lease){lease.approvals.close();await lease.owner.close();} }\n else if (message.method === 'lease.close') { await closeLease(message.leaseId!);result=null; }\n else throw new Error('Unknown worker operation');\n reply({id:message.id,result:result ?? null});\n if(message.method==='lease.close'&&leases.size===0)setImmediate(()=>{if(process.connected)process.disconnect();});\n } catch (error) { reply({id:message.id,error:errorInfo(error)}); }\n });\n process.on('disconnect',()=>{void close().catch(()=>{}).finally(()=>process.exit());});\n}\n"]}
@@ -0,0 +1,42 @@
1
+ import type { HarnessConfig } from './types.js';
2
+ import type { ApprovalResponse, Page, PageOptions, SessionHandle, SessionSummary, TaskHandle, TaskSummary } from './execution-types.js';
3
+ export interface ConnectOptions {
4
+ readonly start?: boolean;
5
+ readonly stateDirectory?: string;
6
+ }
7
+ export interface ConnectedSessionOptions {
8
+ readonly agent: string | HarnessConfig;
9
+ readonly cwd: string;
10
+ readonly env?: Readonly<Record<string, string | undefined>>;
11
+ }
12
+ export interface AgentSummary {
13
+ readonly id: string;
14
+ readonly name: string;
15
+ readonly description: string;
16
+ readonly scope: 'harness' | 'repo' | 'global';
17
+ }
18
+ export interface Client {
19
+ readonly agents: {
20
+ list(options: {
21
+ readonly cwd: string;
22
+ }): Promise<{
23
+ readonly items: readonly AgentSummary[];
24
+ }>;
25
+ check(options: ConnectedSessionOptions): Promise<void>;
26
+ };
27
+ readonly sessions: {
28
+ create(options: ConnectedSessionOptions): Promise<SessionHandle>;
29
+ list(options?: PageOptions): Promise<Page<SessionSummary>>;
30
+ get(id: string): Promise<SessionHandle>;
31
+ };
32
+ readonly tasks: {
33
+ list(options?: PageOptions & {
34
+ readonly sessionId?: string;
35
+ }): Promise<Page<TaskSummary>>;
36
+ get(id: string): Promise<TaskHandle>;
37
+ };
38
+ readonly approvals: {
39
+ respond(requestId: string, response: ApprovalResponse): Promise<void>;
40
+ };
41
+ disconnect(): Promise<void>;
42
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=connected-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connected-types.js","sourceRoot":"","sources":["../../src/sdk/connected-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { HarnessConfig } from './types.js';\nimport type {\n ApprovalResponse, Page, PageOptions, SessionHandle, SessionSummary, TaskHandle, TaskSummary,\n} from './execution-types.js';\n\nexport interface ConnectOptions {\n readonly start?:boolean;\n readonly stateDirectory?:string;\n}\nexport interface ConnectedSessionOptions {\n readonly agent:string|HarnessConfig;\n readonly cwd:string;\n readonly env?:Readonly<Record<string,string|undefined>>;\n}\nexport interface AgentSummary {\n readonly id:string;\n readonly name:string;\n readonly description:string;\n readonly scope:'harness'|'repo'|'global';\n}\nexport interface Client {\n readonly agents:{\n list(options:{readonly cwd:string}):Promise<{readonly items:readonly AgentSummary[]}>;\n check(options:ConnectedSessionOptions):Promise<void>;\n };\n readonly sessions:{\n create(options:ConnectedSessionOptions):Promise<SessionHandle>;\n list(options?:PageOptions):Promise<Page<SessionSummary>>;\n get(id:string):Promise<SessionHandle>;\n };\n readonly tasks:{\n list(options?:PageOptions&{readonly sessionId?:string}):Promise<Page<TaskSummary>>;\n get(id:string):Promise<TaskHandle>;\n };\n readonly approvals:{respond(requestId:string,response:ApprovalResponse):Promise<void>};\n disconnect():Promise<void>;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Client, ConnectOptions } from './connected-types.js';
2
+ export declare function connect(options?: ConnectOptions): Promise<Client>;
3
+ export type { AgentSummary, Client, ConnectedSessionOptions, ConnectOptions } from './connected-types.js';
@@ -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"]}
@@ -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>;