@narumitw/pi-subagents 2.1.4 → 3.0.0

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 (312) hide show
  1. package/README.md +187 -1228
  2. package/dist/child-communication-bridge.ts +136 -0
  3. package/dist/child-communication-bridge.ts.map +7 -0
  4. package/dist/chunks/chunk-UKTWUQRM.js +667 -0
  5. package/dist/chunks/chunk-UKTWUQRM.js.map +7 -0
  6. package/dist/index.ts +1448 -1614
  7. package/dist/index.ts.map +4 -4
  8. package/docs/design-principles.md +31 -0
  9. package/docs/ipc-transport-idea.md +103 -0
  10. package/docs/tools.md +109 -0
  11. package/package.json +11 -19
  12. package/src/broker-credentials.ts +71 -0
  13. package/src/child-communication-bridge.ts +153 -0
  14. package/src/child-communication-tools.ts +147 -0
  15. package/src/completion-renderer.ts +60 -0
  16. package/src/index.ts +1 -1
  17. package/src/message-broker.ts +628 -0
  18. package/src/model-output.ts +42 -0
  19. package/src/process.ts +688 -0
  20. package/src/runtime.ts +538 -0
  21. package/src/subagents.ts +33 -34
  22. package/src/tools.ts +416 -0
  23. package/src/types.ts +85 -0
  24. package/src/widget.ts +130 -0
  25. package/dist/chunks/auto-transport-FUUKFDIG.ts +0 -109
  26. package/dist/chunks/auto-transport-FUUKFDIG.ts.map +0 -7
  27. package/dist/chunks/capability-grant-PR72SWWS.ts +0 -19
  28. package/dist/chunks/capability-grant-PR72SWWS.ts.map +0 -7
  29. package/dist/chunks/child-peer-bridge.ts +0 -108
  30. package/dist/chunks/child-peer-bridge.ts.map +0 -7
  31. package/dist/chunks/chunk-2LMJU25E.ts +0 -1641
  32. package/dist/chunks/chunk-2LMJU25E.ts.map +0 -7
  33. package/dist/chunks/chunk-47SK2QYC.ts +0 -56
  34. package/dist/chunks/chunk-47SK2QYC.ts.map +0 -7
  35. package/dist/chunks/chunk-4AQSF7AS.ts +0 -29
  36. package/dist/chunks/chunk-4AQSF7AS.ts.map +0 -7
  37. package/dist/chunks/chunk-5DGRMKNV.ts +0 -126
  38. package/dist/chunks/chunk-5DGRMKNV.ts.map +0 -7
  39. package/dist/chunks/chunk-6H6TBBED.ts +0 -108
  40. package/dist/chunks/chunk-6H6TBBED.ts.map +0 -7
  41. package/dist/chunks/chunk-6KJ34M6S.ts +0 -159
  42. package/dist/chunks/chunk-6KJ34M6S.ts.map +0 -7
  43. package/dist/chunks/chunk-6NSJVPXX.ts +0 -480
  44. package/dist/chunks/chunk-6NSJVPXX.ts.map +0 -7
  45. package/dist/chunks/chunk-7AAJEUSL.ts +0 -238
  46. package/dist/chunks/chunk-7AAJEUSL.ts.map +0 -7
  47. package/dist/chunks/chunk-BFK2Z4ZF.ts +0 -189
  48. package/dist/chunks/chunk-BFK2Z4ZF.ts.map +0 -7
  49. package/dist/chunks/chunk-BOAXY55Y.ts +0 -153
  50. package/dist/chunks/chunk-BOAXY55Y.ts.map +0 -7
  51. package/dist/chunks/chunk-D4CR7T73.ts +0 -353
  52. package/dist/chunks/chunk-D4CR7T73.ts.map +0 -7
  53. package/dist/chunks/chunk-FEVPWRMU.ts +0 -300
  54. package/dist/chunks/chunk-FEVPWRMU.ts.map +0 -7
  55. package/dist/chunks/chunk-G6VZTCFH.ts +0 -70
  56. package/dist/chunks/chunk-G6VZTCFH.ts.map +0 -7
  57. package/dist/chunks/chunk-H3FP6DLR.ts +0 -160
  58. package/dist/chunks/chunk-H3FP6DLR.ts.map +0 -7
  59. package/dist/chunks/chunk-HA36LPCO.ts +0 -130
  60. package/dist/chunks/chunk-HA36LPCO.ts.map +0 -7
  61. package/dist/chunks/chunk-HOP5FXDT.ts +0 -27
  62. package/dist/chunks/chunk-HOP5FXDT.ts.map +0 -7
  63. package/dist/chunks/chunk-IGAMVWFN.ts +0 -139
  64. package/dist/chunks/chunk-IGAMVWFN.ts.map +0 -7
  65. package/dist/chunks/chunk-ILEQ27AL.ts +0 -45
  66. package/dist/chunks/chunk-ILEQ27AL.ts.map +0 -7
  67. package/dist/chunks/chunk-ITVWPNU4.ts +0 -819
  68. package/dist/chunks/chunk-ITVWPNU4.ts.map +0 -7
  69. package/dist/chunks/chunk-IWC32VPY.ts +0 -172
  70. package/dist/chunks/chunk-IWC32VPY.ts.map +0 -7
  71. package/dist/chunks/chunk-JSZIP73U.ts +0 -362
  72. package/dist/chunks/chunk-JSZIP73U.ts.map +0 -7
  73. package/dist/chunks/chunk-JU6LUNLP.ts +0 -380
  74. package/dist/chunks/chunk-JU6LUNLP.ts.map +0 -7
  75. package/dist/chunks/chunk-KMGKCEO4.ts +0 -38
  76. package/dist/chunks/chunk-KMGKCEO4.ts.map +0 -7
  77. package/dist/chunks/chunk-LASD73CM.ts +0 -339
  78. package/dist/chunks/chunk-LASD73CM.ts.map +0 -7
  79. package/dist/chunks/chunk-LEOYDZI3.ts +0 -22
  80. package/dist/chunks/chunk-LEOYDZI3.ts.map +0 -7
  81. package/dist/chunks/chunk-LL4LP2T7.ts +0 -737
  82. package/dist/chunks/chunk-LL4LP2T7.ts.map +0 -7
  83. package/dist/chunks/chunk-N2T5IN4X.ts +0 -18
  84. package/dist/chunks/chunk-N2T5IN4X.ts.map +0 -7
  85. package/dist/chunks/chunk-N7BLVXKK.ts +0 -73
  86. package/dist/chunks/chunk-N7BLVXKK.ts.map +0 -7
  87. package/dist/chunks/chunk-NLT67IZS.ts +0 -322
  88. package/dist/chunks/chunk-NLT67IZS.ts.map +0 -7
  89. package/dist/chunks/chunk-NTRPLF46.ts +0 -63
  90. package/dist/chunks/chunk-NTRPLF46.ts.map +0 -7
  91. package/dist/chunks/chunk-ONDTY4EL.ts +0 -91
  92. package/dist/chunks/chunk-ONDTY4EL.ts.map +0 -7
  93. package/dist/chunks/chunk-OVPHFGKO.ts +0 -1769
  94. package/dist/chunks/chunk-OVPHFGKO.ts.map +0 -7
  95. package/dist/chunks/chunk-P7OH4XMF.ts +0 -60
  96. package/dist/chunks/chunk-P7OH4XMF.ts.map +0 -7
  97. package/dist/chunks/chunk-PBZMBTNJ.ts +0 -422
  98. package/dist/chunks/chunk-PBZMBTNJ.ts.map +0 -7
  99. package/dist/chunks/chunk-PGLSFLYW.ts +0 -52
  100. package/dist/chunks/chunk-PGLSFLYW.ts.map +0 -7
  101. package/dist/chunks/chunk-RRR66UWR.ts +0 -28
  102. package/dist/chunks/chunk-RRR66UWR.ts.map +0 -7
  103. package/dist/chunks/chunk-RSUXZD6S.ts +0 -275
  104. package/dist/chunks/chunk-RSUXZD6S.ts.map +0 -7
  105. package/dist/chunks/chunk-RTCVYIZA.ts +0 -221
  106. package/dist/chunks/chunk-RTCVYIZA.ts.map +0 -7
  107. package/dist/chunks/chunk-RY2AEGMZ.ts +0 -34
  108. package/dist/chunks/chunk-RY2AEGMZ.ts.map +0 -7
  109. package/dist/chunks/chunk-SWGQLFSD.ts +0 -60
  110. package/dist/chunks/chunk-SWGQLFSD.ts.map +0 -7
  111. package/dist/chunks/chunk-TM2R67J3.ts +0 -52
  112. package/dist/chunks/chunk-TM2R67J3.ts.map +0 -7
  113. package/dist/chunks/chunk-TMZRHIIK.ts +0 -497
  114. package/dist/chunks/chunk-TMZRHIIK.ts.map +0 -7
  115. package/dist/chunks/chunk-TZ34IQ3M.ts +0 -59
  116. package/dist/chunks/chunk-TZ34IQ3M.ts.map +0 -7
  117. package/dist/chunks/chunk-UMBPMVJW.ts +0 -22
  118. package/dist/chunks/chunk-UMBPMVJW.ts.map +0 -7
  119. package/dist/chunks/chunk-VDG7LTYE.ts +0 -80
  120. package/dist/chunks/chunk-VDG7LTYE.ts.map +0 -7
  121. package/dist/chunks/chunk-X4NMONPE.ts +0 -73
  122. package/dist/chunks/chunk-X4NMONPE.ts.map +0 -7
  123. package/dist/chunks/chunk-YPJEN6NU.ts +0 -65
  124. package/dist/chunks/chunk-YPJEN6NU.ts.map +0 -7
  125. package/dist/chunks/chunk-YU53SHA7.ts +0 -328
  126. package/dist/chunks/chunk-YU53SHA7.ts.map +0 -7
  127. package/dist/chunks/completion-delivery-RSJU6BXL.ts +0 -17
  128. package/dist/chunks/completion-delivery-RSJU6BXL.ts.map +0 -7
  129. package/dist/chunks/config-status-FKGDECZ3.ts +0 -35
  130. package/dist/chunks/config-status-FKGDECZ3.ts.map +0 -7
  131. package/dist/chunks/config-ui-ABHYNGQ7.ts +0 -1212
  132. package/dist/chunks/config-ui-ABHYNGQ7.ts.map +0 -7
  133. package/dist/chunks/consult-LJU3IQY5.ts +0 -519
  134. package/dist/chunks/consult-LJU3IQY5.ts.map +0 -7
  135. package/dist/chunks/context-QDKLVQXE.ts +0 -11
  136. package/dist/chunks/context-QDKLVQXE.ts.map +0 -7
  137. package/dist/chunks/create-stateful-transport-JWC2EFYL.ts +0 -130
  138. package/dist/chunks/create-stateful-transport-JWC2EFYL.ts.map +0 -7
  139. package/dist/chunks/cwd-policy-NB6XZ5GF.ts +0 -17
  140. package/dist/chunks/cwd-policy-NB6XZ5GF.ts.map +0 -7
  141. package/dist/chunks/delegation-contract-LA56I5DT.ts +0 -24
  142. package/dist/chunks/delegation-contract-LA56I5DT.ts.map +0 -7
  143. package/dist/chunks/discovery-MIFB2U4Y.ts +0 -12
  144. package/dist/chunks/discovery-MIFB2U4Y.ts.map +0 -7
  145. package/dist/chunks/execution-Q2JZLKJA.ts +0 -4037
  146. package/dist/chunks/execution-Q2JZLKJA.ts.map +0 -7
  147. package/dist/chunks/in-process-transport-HJ6TZXC3.ts +0 -39
  148. package/dist/chunks/in-process-transport-HJ6TZXC3.ts.map +0 -7
  149. package/dist/chunks/inspect-UH2TKH6E.ts +0 -634
  150. package/dist/chunks/inspect-UH2TKH6E.ts.map +0 -7
  151. package/dist/chunks/peer-communication-KL36Z6CO.ts +0 -294
  152. package/dist/chunks/peer-communication-KL36Z6CO.ts.map +0 -7
  153. package/dist/chunks/persistence-UY3PY6E5.ts +0 -348
  154. package/dist/chunks/persistence-UY3PY6E5.ts.map +0 -7
  155. package/dist/chunks/registry-BT54L6CY.ts +0 -1445
  156. package/dist/chunks/registry-BT54L6CY.ts.map +0 -7
  157. package/dist/chunks/retained-semantic-state-GM75FZGE.ts +0 -81
  158. package/dist/chunks/retained-semantic-state-GM75FZGE.ts.map +0 -7
  159. package/dist/chunks/rpc-transport-7R7DVCEB.ts +0 -1222
  160. package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +0 -7
  161. package/dist/chunks/runtime-policy-5YELCOVC.ts +0 -15
  162. package/dist/chunks/runtime-policy-5YELCOVC.ts.map +0 -7
  163. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts +0 -19
  164. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts.map +0 -7
  165. package/dist/chunks/spawn-idempotency-BNHOSMZW.ts +0 -13
  166. package/dist/chunks/spawn-idempotency-BNHOSMZW.ts.map +0 -7
  167. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts +0 -15
  168. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts.map +0 -7
  169. package/dist/chunks/subprocess-transport-VHZJRBTW.ts +0 -160
  170. package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +0 -7
  171. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +0 -164
  172. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +0 -7
  173. package/dist/chunks/workspace-WDKLN72J.ts +0 -11
  174. package/dist/chunks/workspace-WDKLN72J.ts.map +0 -7
  175. package/docs/async-runtime-protocol.md +0 -84
  176. package/docs/implementation-notes/pi-subagents-capability-matrix.md +0 -62
  177. package/docs/implementation-notes/pi-subagents-current-direction.md +0 -99
  178. package/docs/implementation-notes/pi-subagents-rpc-v1.md +0 -139
  179. package/docs/pi-subagents-diagrams.md +0 -183
  180. package/src/adaptive-scheduler.ts +0 -224
  181. package/src/admission-policy.ts +0 -78
  182. package/src/agent-projection.ts +0 -53
  183. package/src/agents/built-ins.ts +0 -71
  184. package/src/agents/catalog.ts +0 -241
  185. package/src/agents/discovery.ts +0 -265
  186. package/src/agents/types.ts +0 -100
  187. package/src/agents.ts +0 -51
  188. package/src/auto-transport.ts +0 -121
  189. package/src/blocking-status.ts +0 -63
  190. package/src/cached-module-loader.ts +0 -18
  191. package/src/capabilities.ts +0 -145
  192. package/src/capability-grant.ts +0 -115
  193. package/src/capability-router.ts +0 -107
  194. package/src/child-peer-bridge.ts +0 -124
  195. package/src/child-peer-tools.ts +0 -132
  196. package/src/completion-delivery.ts +0 -409
  197. package/src/completion-render.ts +0 -190
  198. package/src/completion-requirement.ts +0 -479
  199. package/src/completion-routing.ts +0 -24
  200. package/src/config-registration.ts +0 -114
  201. package/src/config-status.ts +0 -217
  202. package/src/config-ui.ts +0 -983
  203. package/src/consult-policy.ts +0 -15
  204. package/src/consult-registration.ts +0 -125
  205. package/src/consult-render.ts +0 -194
  206. package/src/consult-resources.ts +0 -51
  207. package/src/consult-tool.ts +0 -95
  208. package/src/consult.ts +0 -566
  209. package/src/context.ts +0 -126
  210. package/src/create-stateful-transport.ts +0 -157
  211. package/src/cwd-policy.ts +0 -183
  212. package/src/delegation-contract.ts +0 -463
  213. package/src/execution/budget.ts +0 -56
  214. package/src/execution/runtime-policy.ts +0 -19
  215. package/src/execution-plan.ts +0 -322
  216. package/src/execution-ui.ts +0 -259
  217. package/src/execution.ts +0 -1679
  218. package/src/in-process-transport.ts +0 -941
  219. package/src/inspect-registration.ts +0 -64
  220. package/src/inspect-render.ts +0 -334
  221. package/src/inspect-tool.ts +0 -45
  222. package/src/inspect.ts +0 -769
  223. package/src/integration-controller.ts +0 -98
  224. package/src/limits.ts +0 -75
  225. package/src/orchestration-metrics.ts +0 -116
  226. package/src/outcome.ts +0 -61
  227. package/src/panel-child-group.ts +0 -35
  228. package/src/panel-contract.ts +0 -343
  229. package/src/panel-evidence.ts +0 -59
  230. package/src/panel-execution.ts +0 -769
  231. package/src/panel-failure.ts +0 -56
  232. package/src/panel-planning.ts +0 -175
  233. package/src/panel-presets.ts +0 -3
  234. package/src/panel-prompts.ts +0 -132
  235. package/src/panel-reconciliation.ts +0 -57
  236. package/src/panel-render.ts +0 -103
  237. package/src/parallel-limit-ui.ts +0 -113
  238. package/src/params.ts +0 -278
  239. package/src/peer-communication.ts +0 -352
  240. package/src/peer-transport.ts +0 -49
  241. package/src/persistence.ts +0 -522
  242. package/src/pi-args.ts +0 -43
  243. package/src/pi-invocation.ts +0 -168
  244. package/src/process-control.ts +0 -43
  245. package/src/prompt-resources.ts +0 -38
  246. package/src/prompt-source-safety.ts +0 -48
  247. package/src/protocol.ts +0 -76
  248. package/src/registry-types.ts +0 -204
  249. package/src/registry.ts +0 -1698
  250. package/src/render-common.ts +0 -252
  251. package/src/render.ts +0 -704
  252. package/src/result-contract.ts +0 -431
  253. package/src/retained-semantic-state.ts +0 -100
  254. package/src/rpc-timeout-finalization.ts +0 -207
  255. package/src/rpc-transport-metadata.ts +0 -65
  256. package/src/rpc-transport.ts +0 -1035
  257. package/src/rpc-turn-capture.ts +0 -217
  258. package/src/runner-outcome.ts +0 -31
  259. package/src/runner-result.ts +0 -55
  260. package/src/runner-types.ts +0 -102
  261. package/src/runner-usage.ts +0 -48
  262. package/src/runner.ts +0 -866
  263. package/src/safe-text.ts +0 -67
  264. package/src/semantic-snapshot.ts +0 -214
  265. package/src/session-guidance-contract.ts +0 -399
  266. package/src/settings/inspection.ts +0 -302
  267. package/src/settings/schema.ts +0 -195
  268. package/src/settings-reader.ts +0 -215
  269. package/src/settings.ts +0 -452
  270. package/src/spawn-idempotency.ts +0 -68
  271. package/src/stateful-agent-view.ts +0 -85
  272. package/src/stateful-config.ts +0 -13
  273. package/src/stateful-guidance.ts +0 -29
  274. package/src/stateful-lifecycle.ts +0 -74
  275. package/src/stateful-limit-ui.ts +0 -249
  276. package/src/stateful-limits.ts +0 -96
  277. package/src/stateful-prompt.ts +0 -49
  278. package/src/stateful-registration.ts +0 -1320
  279. package/src/stateful-render.ts +0 -318
  280. package/src/stateful-safety.ts +0 -47
  281. package/src/stateful-tool-params.ts +0 -215
  282. package/src/stateful.ts +0 -12
  283. package/src/subagent-details.ts +0 -43
  284. package/src/subagents-extension.ts +0 -372
  285. package/src/subprocess-transport.ts +0 -145
  286. package/src/supervision.ts +0 -104
  287. package/src/task-path.ts +0 -65
  288. package/src/timeout-checkpoint.ts +0 -305
  289. package/src/timeout-finalization.ts +0 -75
  290. package/src/tool-schema-compatibility.ts +0 -73
  291. package/src/transport-types.ts +0 -74
  292. package/src/transport-ui.ts +0 -135
  293. package/src/transport.ts +0 -43
  294. package/src/turn-budget.ts +0 -109
  295. package/src/usage-format.ts +0 -42
  296. package/src/usage-recording-config.ts +0 -13
  297. package/src/usage-recording-store.ts +0 -183
  298. package/src/usage-recording.ts +0 -478
  299. package/src/verification-harness.ts +0 -516
  300. package/src/verification-policy.ts +0 -67
  301. package/src/verification-receipt.ts +0 -275
  302. package/src/verified-execution-benchmark.ts +0 -86
  303. package/src/verified-execution-contract.ts +0 -191
  304. package/src/verified-execution-schema.ts +0 -32
  305. package/src/work-item-ledger.ts +0 -1404
  306. package/src/work-item-persistence.ts +0 -254
  307. package/src/workflow-completion-controller.ts +0 -397
  308. package/src/workflow-planning.ts +0 -172
  309. package/src/workflow-tree-identity.ts +0 -289
  310. package/src/workflow-ui.ts +0 -69
  311. package/src/workflow-verification.ts +0 -296
  312. package/src/workspace.ts +0 -174
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/inspect.ts"],
4
- "sourcesContent": ["import * as path from \"node:path\";\nimport { CONFIG_DIR_NAME, type ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { discoverAgents } from \"./agents/discovery.js\";\nimport type {\n\tAgentConfig,\n\tAgentScope,\n\tConsultationCwdPolicy,\n\tDelegationCwdPolicy,\n} from \"./agents/types.js\";\nimport { projectCapabilityManifest } from \"./capabilities.js\";\nimport { resolveConsultTools } from \"./consult-policy.js\";\nimport { buildContextSnapshot, type ContextMode } from \"./context.js\";\nimport { INSPECT_ACTIONS } from \"./inspect-tool.js\";\nimport { DEFAULT_MAX_CONTEXT_BYTES } from \"./limits.js\";\nimport { resolvePiInvocation } from \"./pi-invocation.js\";\nimport type { AgentRunInspectionDetail, AgentRunInspectionSummary } from \"./registry.js\";\nimport { boundedPrivateText, boundText, safeDisplayPath, safeTerminalLine } from \"./safe-text.js\";\nimport { resolveDelegationWorkflow } from \"./settings/inspection.js\";\nimport {\n\tinspectBlockingParallelLimitSettings,\n\tinspectCompletionDeliverySettings,\n\tinspectConsultResourceSettings,\n\tinspectCwdPolicySettings,\n\tinspectDelegationWorkflowSettings,\n\tinspectStatefulLimitSettings,\n\tinspectStatefulTransportSettings,\n\tinspectSubagentSettings,\n\tinspectUsageRecordingSettings,\n} from \"./settings.js\";\nimport type { StatefulSubagentRuntimeStatus } from \"./stateful.js\";\nimport type { UsageRecordingStatus } from \"./usage-recording.js\";\nimport type { WorkItemLedgerSnapshot } from \"./work-item-ledger.js\";\nimport { inspectSessionWorkflows } from \"./work-item-persistence.js\";\n\nconst MAX_DETAILS_LIST_BYTES = 40 * 1024;\n\nexport { registerSubagentInspect } from \"./inspect-registration.js\";\nexport { SubagentInspectParams } from \"./inspect-tool.js\";\n\nexport interface SubagentInspectRuntime {\n\tgetBlockingEnabled(): boolean;\n\tgetMaxParallelTasks(): number;\n\tgetConsultResourcePolicy(): \"project-context\" | \"none\" | \"all\";\n\tgetConsultationCwdPolicy(): ConsultationCwdPolicy;\n\tgetDelegationCwdPolicy(): DelegationCwdPolicy;\n\tgetUsageRecordingStatus?(): UsageRecordingStatus;\n\tgetRuntimeStatus(): StatefulSubagentRuntimeStatus;\n\tlistRunInspection(includeClosed?: boolean): AgentRunInspectionSummary[];\n\tgetRunInspection(agentId: string): AgentRunInspectionDetail | undefined;\n}\n\ninterface InspectToolResult {\n\tcontent: Array<{ type: \"text\"; text: string }>;\n\tdetails: Record<string, unknown>;\n}\n\ntype ValidatedInspectOperation =\n\t| { action: \"list_agents\"; agentScope: AgentScope; limit: number }\n\t| { action: \"get_agent\"; agent: string; agentScope: AgentScope }\n\t| { action: \"list_runs\"; includeClosed: boolean; limit: number }\n\t| { action: \"get_run\"; agentId: string }\n\t| { action: \"list_workflows\"; limit: number }\n\t| { action: \"get_workflow\"; workflowId: string }\n\t| { action: \"list_models\"; limit: number }\n\t| { action: \"preview_context\"; context: ContextMode; contextEntryIds?: string[] }\n\t| { action: \"status\" }\n\t| { action: \"diagnose\" };\n\nexport function validateInspectParams(params: unknown): ValidatedInspectOperation {\n\tconst values = parameterRecord(params);\n\tconst rawAction = values.action;\n\tif (\n\t\ttypeof rawAction !== \"string\" ||\n\t\t!INSPECT_ACTIONS.includes(rawAction as (typeof INSPECT_ACTIONS)[number])\n\t) {\n\t\tthrow new Error(`subagent_inspect action must be one of: ${INSPECT_ACTIONS.join(\", \")}`);\n\t}\n\tconst action = rawAction as (typeof INSPECT_ACTIONS)[number];\n\tconst allowed: Record<(typeof INSPECT_ACTIONS)[number], readonly string[]> = {\n\t\tlist_agents: [\"action\", \"agentScope\", \"limit\"],\n\t\tget_agent: [\"action\", \"agent\", \"agentScope\"],\n\t\tlist_runs: [\"action\", \"includeClosed\", \"limit\"],\n\t\tget_run: [\"action\", \"agentId\"],\n\t\tlist_workflows: [\"action\", \"limit\"],\n\t\tget_workflow: [\"action\", \"workflowId\"],\n\t\tlist_models: [\"action\", \"limit\"],\n\t\tpreview_context: [\"action\", \"context\", \"contextEntryIds\"],\n\t\tstatus: [\"action\"],\n\t\tdiagnose: [\"action\"],\n\t};\n\tconst unexpected = Object.keys(values).find(\n\t\t(key) => values[key] !== undefined && !allowed[action].includes(key),\n\t);\n\tif (unexpected)\n\t\tthrow new Error(`subagent_inspect action \"${action}\" does not accept ${unexpected}`);\n\n\tif (action === \"list_agents\" || action === \"get_agent\") {\n\t\tconst agentScope = optionalAgentScope(values.agentScope);\n\t\tif (action === \"get_agent\") {\n\t\t\treturn { action, agent: requiredString(values.agent, action, \"agent\"), agentScope };\n\t\t}\n\t\treturn { action, agentScope, limit: optionalLimit(values.limit, 32) };\n\t}\n\tif (action === \"list_runs\") {\n\t\tif (values.includeClosed !== undefined && typeof values.includeClosed !== \"boolean\") {\n\t\t\tthrow new Error('subagent_inspect action \"list_runs\" requires includeClosed to be boolean');\n\t\t}\n\t\treturn {\n\t\t\taction,\n\t\t\tincludeClosed: values.includeClosed === true,\n\t\t\tlimit: optionalLimit(values.limit, 50),\n\t\t};\n\t}\n\tif (action === \"get_run\") {\n\t\treturn { action, agentId: requiredString(values.agentId, action, \"agentId\") };\n\t}\n\tif (action === \"list_workflows\") {\n\t\treturn { action, limit: optionalLimit(values.limit, 50) };\n\t}\n\tif (action === \"get_workflow\") {\n\t\treturn { action, workflowId: requiredString(values.workflowId, action, \"workflowId\") };\n\t}\n\tif (action === \"list_models\") {\n\t\treturn { action, limit: optionalLimit(values.limit, 50) };\n\t}\n\tif (action === \"preview_context\") {\n\t\tconst context = optionalContextMode(values.context);\n\t\tconst contextEntryIds = optionalStringArray(values.contextEntryIds, \"contextEntryIds\");\n\t\treturn {\n\t\t\taction,\n\t\t\tcontext: values.context === undefined && contextEntryIds ? \"all\" : context,\n\t\t\t...(contextEntryIds ? { contextEntryIds } : {}),\n\t\t};\n\t}\n\treturn { action };\n}\n\nexport async function executeSubagentInspect(\n\tparams: unknown,\n\tctx: ExtensionContext,\n\truntime: SubagentInspectRuntime,\n): Promise<InspectToolResult> {\n\tconst operation = validateInspectParams(params);\n\tif (operation.action === \"list_agents\" || operation.action === \"get_agent\") {\n\t\tassertTrustedScope(operation.agentScope, ctx);\n\t\tconst settings = inspectSubagentSettings().settings;\n\t\tconst discovery = discoverAgents(ctx.cwd, operation.agentScope, settings);\n\t\tconst agents = [...discovery.agents].sort((left, right) =>\n\t\t\tleft.name === right.name\n\t\t\t\t? left.source.localeCompare(right.source)\n\t\t\t\t: left.name.localeCompare(right.name),\n\t\t);\n\t\tif (operation.action === \"list_agents\") {\n\t\t\tconst selected = boundedProjection(agents, operation.limit, (agent) =>\n\t\t\t\tprojectAgent(agent, ctx, false),\n\t\t\t);\n\t\t\treturn inspectResult({\n\t\t\t\taction: operation.action,\n\t\t\t\tagents: selected.items,\n\t\t\t\treturned: selected.items.length,\n\t\t\t\tomitted: selected.omitted + (discovery.omittedAgentDefinitions ?? 0),\n\t\t\t\tdiscoveryIncomplete: discovery.metadataDiscoveryIncomplete === true,\n\t\t\t});\n\t\t}\n\t\tconst agent = agents.find((candidate) => candidate.name === operation.agent);\n\t\tif (!agent) {\n\t\t\tthrow new Error(`Unknown subagent definition: ${boundedPrivateText(operation.agent, 256)}`);\n\t\t}\n\t\treturn inspectResult({ action: operation.action, agent: projectAgent(agent, ctx) });\n\t}\n\n\tif (operation.action === \"list_runs\") {\n\t\tconst runs = runtime.listRunInspection(operation.includeClosed);\n\t\tconst selected = boundedProjection(runs, operation.limit, projectRunSummary);\n\t\treturn inspectResult({\n\t\t\taction: operation.action,\n\t\t\truns: selected.items,\n\t\t\treturned: selected.items.length,\n\t\t\tomitted: selected.omitted,\n\t\t});\n\t}\n\tif (operation.action === \"get_run\") {\n\t\tconst run = runtime.getRunInspection(operation.agentId);\n\t\tif (!run) {\n\t\t\tthrow new Error(`Unknown retained run: ${boundedPrivateText(operation.agentId, 256)}`);\n\t\t}\n\t\treturn inspectResult({ action: operation.action, run: projectRun(run, ctx) });\n\t}\n\tif (operation.action === \"list_workflows\" || operation.action === \"get_workflow\") {\n\t\tconst owner =\n\t\t\tctx.sessionManager.getSessionId?.() ??\n\t\t\tctx.sessionManager.getSessionFile?.() ??\n\t\t\t`ephemeral:${ctx.cwd}`;\n\t\tconst inspected = inspectSessionWorkflows(owner, {\n\t\t\tmaxStoredWorkflows: operation.action === \"list_workflows\" ? operation.limit : 64,\n\t\t});\n\t\tif (operation.action === \"list_workflows\") {\n\t\t\tconst selected = boundedProjection(\n\t\t\t\tinspected.workflows,\n\t\t\t\toperation.limit,\n\t\t\t\tprojectWorkflowSummary,\n\t\t\t);\n\t\t\treturn inspectResult({\n\t\t\t\taction: operation.action,\n\t\t\t\tworkflows: selected.items,\n\t\t\t\treturned: selected.items.length,\n\t\t\t\tomitted: inspected.omitted + selected.omitted,\n\t\t\t\tinvalid: inspected.invalid,\n\t\t\t});\n\t\t}\n\t\tconst workflow = inspected.workflows.find(\n\t\t\t(candidate) => candidate.workflowId === operation.workflowId,\n\t\t);\n\t\tif (!workflow) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown persisted workflow: ${boundedPrivateText(operation.workflowId, 256)}`,\n\t\t\t);\n\t\t}\n\t\treturn inspectResult({ action: operation.action, workflow: projectWorkflow(workflow) });\n\t}\n\tif (operation.action === \"list_models\") {\n\t\treturn inspectResult({ action: operation.action, ...projectModels(ctx, operation.limit) });\n\t}\n\tif (operation.action === \"preview_context\") {\n\t\tconst snapshot = buildContextSnapshot(\n\t\t\tctx.sessionManager.getBranch(),\n\t\t\toperation.context,\n\t\t\tDEFAULT_MAX_CONTEXT_BYTES,\n\t\t\toperation.contextEntryIds,\n\t\t);\n\t\treturn inspectResult({\n\t\t\taction: operation.action,\n\t\t\tpreview: {\n\t\t\t\tmode: operation.context,\n\t\t\t\tturns: snapshot.turns,\n\t\t\t\tsourceCount: snapshot.sourceIds.length,\n\t\t\t\tbytes: Buffer.byteLength(snapshot.text, \"utf8\"),\n\t\t\t\ttruncated: snapshot.truncated,\n\t\t\t},\n\t\t});\n\t}\n\tif (operation.action === \"status\") {\n\t\treturn inspectResult({ action: operation.action, status: projectStatus(runtime) });\n\t}\n\n\tconst settings = inspectSubagentSettings();\n\tconst userDiscovery = discoverAgents(ctx.cwd, \"user\", settings.settings);\n\tconst modelCount = availableModelCount(ctx);\n\tconst runtimeStatus = runtime.getRuntimeStatus();\n\tconst rpcCapability = inspectRpcCapability();\n\tconst inProcessCapability = await inspectInProcessCapability();\n\tconst checks = [\n\t\t{\n\t\t\tname: \"settings\",\n\t\t\tstatus: settings.error ? \"fail\" : \"pass\",\n\t\t\tmessage: settings.error\n\t\t\t\t? boundedPrivateText(settings.error, 2 * 1024)\n\t\t\t\t: \"Settings are valid or absent.\",\n\t\t},\n\t\t{\n\t\t\tname: \"agent-discovery\",\n\t\t\tstatus:\n\t\t\t\tuserDiscovery.metadataDiscoveryIncomplete ||\n\t\t\t\t(userDiscovery.omittedAgentDefinitions ?? 0) > 0\n\t\t\t\t\t? \"warning\"\n\t\t\t\t\t: \"pass\",\n\t\t\tmessage: `${userDiscovery.agents.length} user-scope definitions available.`,\n\t\t},\n\t\t{\n\t\t\tname: \"models\",\n\t\t\tstatus: modelCount > 0 ? \"pass\" : \"fail\",\n\t\t\tmessage: `${modelCount} session-usable models available.`,\n\t\t},\n\t\t{\n\t\t\tname: \"runtime\",\n\t\t\tstatus: runtimeStatus.enabled && !runtimeStatus.initialized ? \"warning\" : \"pass\",\n\t\t\tmessage: runtimeStatus.initialized\n\t\t\t\t? \"Stateful runtime initialized.\"\n\t\t\t\t: \"Stateful runtime not initialized.\",\n\t\t},\n\t\t{\n\t\t\tname: \"in-process-sdk\",\n\t\t\tstatus: inProcessCapability.error ? \"fail\" : \"pass\",\n\t\t\tmessage: inProcessCapability.error\n\t\t\t\t? boundedPrivateText(inProcessCapability.error, 2 * 1024)\n\t\t\t\t: \"Required public Pi in-process session APIs are available.\",\n\t\t},\n\t\t{\n\t\t\tname: \"rpc-cli\",\n\t\t\tstatus: rpcCapability.error ? \"fail\" : \"pass\",\n\t\t\tmessage: rpcCapability.error\n\t\t\t\t? boundedPrivateText(rpcCapability.error, 2 * 1024)\n\t\t\t\t: \"The exact loaded Pi CLI is available for persistent RPC transport.\",\n\t\t},\n\t\t{\n\t\t\tname: \"consultation\",\n\t\t\tstatus: runtime.getBlockingEnabled() && modelCount > 0 ? \"pass\" : \"fail\",\n\t\t\tmessage: runtime.getBlockingEnabled()\n\t\t\t\t? modelCount > 0\n\t\t\t\t\t? \"Read-only consultation is supported.\"\n\t\t\t\t\t: \"Consultation has no available model.\"\n\t\t\t\t: \"Blocking delegation is disabled, so consultation is not registered.\",\n\t\t},\n\t] as const;\n\treturn inspectResult({\n\t\taction: operation.action,\n\t\tchecks,\n\t\tok: checks.every((check) => check.status !== \"fail\"),\n\t});\n}\n\nfunction projectAgent(\n\tagent: AgentConfig,\n\tctx: ExtensionContext,\n\tincludeTools = true,\n): Record<string, unknown> {\n\tconst tools = agent.tools === undefined ? undefined : projectToolNames(agent.tools);\n\treturn {\n\t\tname: boundedPrivateText(agent.name, 256),\n\t\tdescription: boundedPrivateText(agent.description, 256),\n\t\tsource: agent.source,\n\t\tscope: agent.source === \"project\" ? \"project\" : \"user\",\n\t\tpath:\n\t\t\tagent.source === \"project\"\n\t\t\t\t? safeTerminalLine(\n\t\t\t\t\t\tpath.posix.join(CONFIG_DIR_NAME, \"agents\", path.basename(agent.filePath)),\n\t\t\t\t\t)\n\t\t\t\t: safeDisplayPath(agent.filePath, ctx.cwd),\n\t\tmodel: agent.model ? boundedPrivateText(agent.model, 256) : undefined,\n\t\tthinkingLevel: agent.thinkingLevel,\n\t\tcapabilityManifest: projectCapabilityManifest(agent.capabilityManifest),\n\t\t...(includeTools\n\t\t\t? { tools, toolCount: agent.tools?.length }\n\t\t\t: { toolCount: agent.tools?.length }),\n\t\tconsultTools: resolveConsultTools(agent.tools),\n\t};\n}\n\nfunction projectRunSummary(run: AgentRunInspectionSummary): Record<string, unknown> {\n\treturn {\n\t\tid: boundedPrivateText(run.id, 256),\n\t\tagent: boundedPrivateText(run.agent, 256),\n\t\tstate: run.state,\n\t\tcreatedAt: run.createdAt,\n\t\tupdatedAt: run.updatedAt,\n\t\thistoryCount: run.historyCount,\n\t\tunreadMessages: run.unreadMessages,\n\t\tturnGeneration: run.turnGeneration,\n\t\tpendingCompletionCount: run.pendingCompletionCount,\n\t\t...(run.pendingRequiredCompletionCount === undefined\n\t\t\t? {}\n\t\t\t: { pendingRequiredCompletionCount: run.pendingRequiredCompletionCount }),\n\t};\n}\n\nfunction projectRun(run: AgentRunInspectionDetail, ctx: ExtensionContext): Record<string, unknown> {\n\treturn {\n\t\t...projectRunSummary(run),\n\t\tcwd: safeDisplayPath(run.cwd, ctx.cwd),\n\t\tworkspaceMode: run.workspaceMode ?? \"shared\",\n\t\tthinkingLevel: run.thinkingLevel,\n\t\ttimeoutMs: run.timeoutMs,\n\t\tcurrentTimeoutMs: run.currentTimeoutMs,\n\t\tidleTimeoutMs: run.idleTimeoutMs,\n\t\tcurrentIdleTimeoutMs: run.currentIdleTimeoutMs,\n\t\tmaxTurns: run.maxTurns,\n\t\tcurrentMaxTurns: run.currentMaxTurns,\n\t\tmaxToolCalls: run.maxToolCalls,\n\t\tcurrentMaxToolCalls: run.currentMaxToolCalls,\n\t\tcontext: {\n\t\t\tturns: run.contextTurns ?? 0,\n\t\t\tsources: run.contextSources ?? 0,\n\t\t\tbytes: run.contextBytes ?? 0,\n\t\t\ttruncated: run.contextTruncated === true,\n\t\t},\n\t\tcontract: run.contract\n\t\t\t? {\n\t\t\t\t\tversion: run.contract.version,\n\t\t\t\t\tlevel: run.contract.level,\n\t\t\t\t\ttaskId: boundedPrivateText(run.contract.taskId, 256),\n\t\t\t\t\tenforcement: run.contract.enforcement,\n\t\t\t\t\tdependencies: run.contract.dependencies.length,\n\t\t\t\t\tacceptanceCriteria: run.contract.acceptanceCriteria.length,\n\t\t\t\t\trequiredEvidence: run.contract.requiredEvidence.length,\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tresultFormat: run.resultFormat ?? \"text\",\n\t\tcompletionRequirements: (run.completionRequirements ?? []).map((requirement) => ({\n\t\t\t...requirement,\n\t\t})),\n\t\tstructuredResult: run.structuredResult,\n\t\ttermination: run.termination,\n\t\toutcome: run.outcome,\n\t\tcapabilityGrant: run.capabilityGrant\n\t\t\t? {\n\t\t\t\t\tversion: run.capabilityGrant.version,\n\t\t\t\t\tid: run.capabilityGrant.id,\n\t\t\t\t\texecutionPlanId: run.capabilityGrant.executionPlanId,\n\t\t\t\t\ttaskGeneration: run.capabilityGrant.taskGeneration,\n\t\t\t\t\tissuedAt: run.capabilityGrant.issuedAt,\n\t\t\t\t\texpiresAt: run.capabilityGrant.expiresAt,\n\t\t\t\t\tstate: run.capabilityGrant.state,\n\t\t\t\t\trevokedAt: run.capabilityGrant.revokedAt,\n\t\t\t\t\trevocationReason: run.capabilityGrant.revocationReason,\n\t\t\t\t}\n\t\t\t: undefined,\n\t\texecutionPlan: run.executionPlan\n\t\t\t? {\n\t\t\t\t\t...run.executionPlan,\n\t\t\t\t\ttarget: {\n\t\t\t\t\t\t...run.executionPlan.target,\n\t\t\t\t\t\tcwd: safeDisplayPath(run.executionPlan.target.cwd, ctx.cwd),\n\t\t\t\t\t\ttrust: { ...run.executionPlan.target.trust, sourcePath: undefined },\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tsemanticSnapshot: run.semanticSnapshot\n\t\t\t? {\n\t\t\t\t\tversion: run.semanticSnapshot.version,\n\t\t\t\t\tdigest: run.semanticSnapshot.digest,\n\t\t\t\t\tcomponents: { ...run.semanticSnapshot.components },\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tsemanticCompatibility: run.semanticCompatibility,\n\t\ttelemetry: run.telemetry,\n\t\tcurrentRunId: run.currentRunId,\n\t\tcurrentTurnGeneration: run.currentTurnGeneration,\n\t\tcurrentTask: run.currentTask ? boundedPrivateText(run.currentTask, 2 * 1024) : undefined,\n\t\terror: run.error ? boundedPrivateText(run.error, 2 * 1024) : undefined,\n\t\ttarget: run.target\n\t\t\t? {\n\t\t\t\t\tcwd: safeDisplayPath(run.target.cwd, ctx.cwd),\n\t\t\t\t\tboundary: run.target.boundary,\n\t\t\t\t\ttrust: {\n\t\t\t\t\t\tkind: run.target.trust.kind,\n\t\t\t\t\t\tprojectTrusted: run.target.trust.projectTrusted,\n\t\t\t\t\t\tsourcePath: run.target.trust.sourcePath\n\t\t\t\t\t\t\t? safeDisplayPath(run.target.trust.sourcePath, ctx.cwd)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\twarning: run.target.trust.warning\n\t\t\t\t\t\t\t? boundedPrivateText(run.target.trust.warning, 512)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tpolicy: run.policy\n\t\t\t? {\n\t\t\t\t\tinherited: projectToolNames(run.policy.inherited),\n\t\t\t\t\toverridden: projectToolNames(run.policy.overridden),\n\t\t\t\t\tunsupported: projectToolNames(run.policy.unsupported),\n\t\t\t\t}\n\t\t\t: undefined,\n\t};\n}\n\nfunction projectWorkflowSummary(workflow: WorkItemLedgerSnapshot): Record<string, unknown> {\n\treturn {\n\t\tworkflowId: boundedPrivateText(workflow.workflowId, 256),\n\t\tgeneration: workflow.generation,\n\t\titemCount: workflow.items.length,\n\t\tstates: Object.fromEntries(\n\t\t\t[...new Set(workflow.items.map((item) => item.state))]\n\t\t\t\t.sort()\n\t\t\t\t.map((state) => [state, workflow.items.filter((item) => item.state === state).length]),\n\t\t),\n\t};\n}\n\nfunction projectWorkflow(workflow: WorkItemLedgerSnapshot): Record<string, unknown> {\n\tconst projected = boundedProjection(workflow.items, 64, (item) => ({\n\t\tid: boundedPrivateText(item.id, 256),\n\t\tstate: item.state,\n\t\tgeneration: item.generation,\n\t\ttaskGeneration: item.taskGeneration,\n\t\tdependencies: item.dependencies.map((value) => boundedPrivateText(value, 256)),\n\t\tassignedAgentId: item.assignedAgentId\n\t\t\t? boundedPrivateText(item.assignedAgentId, 256)\n\t\t\t: undefined,\n\t\tacceptedExecutionPlanId: item.acceptedExecutionPlanId,\n\t\tartifacts: item.artifacts.map((artifact) => ({\n\t\t\tid: boundedPrivateText(artifact.id, 256),\n\t\t\tkind: boundedPrivateText(artifact.kind, 256),\n\t\t\tversion: boundedPrivateText(artifact.version, 256),\n\t\t\tproducerTaskId: artifact.producerTaskId\n\t\t\t\t? boundedPrivateText(artifact.producerTaskId, 256)\n\t\t\t\t: undefined,\n\t\t\tgeneration: artifact.generation,\n\t\t\tverified: artifact.verified,\n\t\t})),\n\t\tverificationAccepted: item.verificationAccepted,\n\t\tacceptanceStateVersion: item.acceptanceStateVersion,\n\t\tacceptanceRequired: item.acceptanceRequired,\n\t\tacceptanceState: item.acceptanceState,\n\t\treworkCount: item.reworkCount,\n\t\tmaxReworkCycles: item.maxReworkCycles,\n\t\tacceptanceReceipt: item.acceptanceReceipt\n\t\t\t? {\n\t\t\t\t\tversion: item.acceptanceReceipt.version,\n\t\t\t\t\tdecision: item.acceptanceReceipt.decision,\n\t\t\t\t\ttargetTaskId: boundedPrivateText(item.acceptanceReceipt.targetTaskId, 256),\n\t\t\t\t\ttargetTaskGeneration: item.acceptanceReceipt.targetTaskGeneration,\n\t\t\t\t\ttargetExecutionPlanId: item.acceptanceReceipt.targetExecutionPlanId,\n\t\t\t\t\tverifierTaskId: boundedPrivateText(item.acceptanceReceipt.verifierTaskId, 256),\n\t\t\t\t\tverifierTaskGeneration: item.acceptanceReceipt.verifierTaskGeneration,\n\t\t\t\t\tverifierExecutionPlanId: item.acceptanceReceipt.verifierExecutionPlanId,\n\t\t\t\t\tverifierAgent: boundedPrivateText(item.acceptanceReceipt.verifierAgent, 256),\n\t\t\t\t\tbeforeTreeIdentity: item.acceptanceReceipt.beforeTreeIdentity,\n\t\t\t\t\tafterTreeIdentity: item.acceptanceReceipt.afterTreeIdentity,\n\t\t\t\t\tpatchDigest: item.acceptanceReceipt.patchDigest,\n\t\t\t\t\tchangedPathCount: item.acceptanceReceipt.changedPaths.length,\n\t\t\t\t\tcheckCount: item.acceptanceReceipt.checks.length,\n\t\t\t\t\trequiredEvidenceCount: item.acceptanceReceipt.requiredEvidenceIds.length,\n\t\t\t\t\tcreatedAt: item.acceptanceReceipt.createdAt,\n\t\t\t\t\tsourceTruncated: item.acceptanceReceipt.sourceTruncated,\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tacceptanceReceiptHistoryCount: item.acceptanceReceiptHistory.length,\n\t\tstagedTreeIdentity: item.stagedTreeIdentity\n\t\t\t? {\n\t\t\t\t\tversion: item.stagedTreeIdentity.version,\n\t\t\t\t\tkind: item.stagedTreeIdentity.kind,\n\t\t\t\t\tdigest: item.stagedTreeIdentity.digest,\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tverificationReceipt: item.verificationReceipt\n\t\t\t? {\n\t\t\t\t\tversion: item.verificationReceipt.version,\n\t\t\t\t\tdecision: item.verificationReceipt.decision,\n\t\t\t\t\ttargetTaskId: boundedPrivateText(item.verificationReceipt.targetTaskId, 256),\n\t\t\t\t\ttargetTaskGeneration: item.verificationReceipt.targetTaskGeneration,\n\t\t\t\t\ttargetExecutionPlanId: item.verificationReceipt.targetExecutionPlanId,\n\t\t\t\t\tverifierTaskId: boundedPrivateText(item.verificationReceipt.verifierTaskId, 256),\n\t\t\t\t\tverifierTaskGeneration: item.verificationReceipt.verifierTaskGeneration,\n\t\t\t\t\tverifierExecutionPlanId: item.verificationReceipt.verifierExecutionPlanId,\n\t\t\t\t\ttreeIdentity: item.verificationReceipt.treeIdentity,\n\t\t\t\t\tsummary: boundedPrivateText(item.verificationReceipt.summary, 8 * 1024),\n\t\t\t\t\tevidenceCount: item.verificationReceipt.evidence.length,\n\t\t\t\t\tlimitationCount: item.verificationReceipt.limitations.length,\n\t\t\t\t\tcreatedAt: item.verificationReceipt.createdAt,\n\t\t\t\t\ttruncated: item.verificationReceipt.truncated,\n\t\t\t\t}\n\t\t\t: undefined,\n\t\toutcomeReason: item.outcomeReason\n\t\t\t? boundedPrivateText(item.outcomeReason, 2 * 1024)\n\t\t\t: undefined,\n\t}));\n\treturn {\n\t\t...projectWorkflowSummary(workflow),\n\t\titems: projected.items,\n\t\tomittedItems: projected.omitted,\n\t};\n}\n\nfunction projectModels(ctx: ExtensionContext, limit: number): Record<string, unknown> {\n\tconst scoped = ctx.scopedModels ?? [];\n\tconst candidates =\n\t\tscoped.length > 0\n\t\t\t? scoped\n\t\t\t: ctx.modelRegistry.getAvailable().map((model) => ({ model, thinkingLevel: undefined }));\n\tconst selected = boundedProjection(candidates, limit, ({ model, thinkingLevel }) => ({\n\t\tprovider: boundedPrivateText(model.provider, 256),\n\t\tid: boundedPrivateText(model.id, 256),\n\t\tname: boundedPrivateText(model.name, 256),\n\t\treasoning: model.reasoning,\n\t\tinput: [...model.input],\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxTokens,\n\t\tthinkingLevel,\n\t\tcurrent: ctx.model?.provider === model.provider && ctx.model?.id === model.id,\n\t}));\n\treturn {\n\t\tmodels: selected.items,\n\t\treturned: selected.items.length,\n\t\tomitted: selected.omitted,\n\t\tsource: scoped.length > 0 ? \"session scope\" : \"available snapshot\",\n\t};\n}\n\nfunction projectStatus(runtime: SubagentInspectRuntime): Record<string, unknown> {\n\tconst stateful = runtime.getRuntimeStatus();\n\tconst workflow = resolveDelegationWorkflow(runtime.getBlockingEnabled(), stateful.enabled);\n\tconst configured = inspectDelegationWorkflowSettings();\n\tconst resources = inspectConsultResourceSettings();\n\tconst cwdPolicy = inspectCwdPolicySettings();\n\tconst completion = inspectCompletionDeliverySettings();\n\tconst parallelLimit = inspectBlockingParallelLimitSettings();\n\tconst detachedLimits = inspectStatefulLimitSettings();\n\tconst transport = inspectStatefulTransportSettings();\n\tconst usageRecording = inspectUsageRecordingSettings();\n\tconst usageStatus = runtime.getUsageRecordingStatus?.();\n\tconst configuredDetachedLimits = detachedLimits.values\n\t\t? Object.fromEntries(\n\t\t\t\tObject.entries(detachedLimits.values).map(([field, snapshot]) => [field, snapshot.value]),\n\t\t\t)\n\t\t: undefined;\n\tconst configuredDetachedLimitSources = detachedLimits.values\n\t\t? Object.fromEntries(\n\t\t\t\tObject.entries(detachedLimits.values).map(([field, snapshot]) => [field, snapshot.source]),\n\t\t\t)\n\t\t: undefined;\n\treturn {\n\t\tworkflow,\n\t\tconfiguredWorkflow: configured.value,\n\t\tconfiguredWorkflowSource: configured.source,\n\t\tstateful,\n\t\tstatefulLimits: stateful.limits,\n\t\tconfiguredTransport: transport.value,\n\t\tconfiguredTransportSource: transport.source,\n\t\tconfiguredStatefulLimits: configuredDetachedLimits,\n\t\tconfiguredStatefulLimitSources: configuredDetachedLimitSources,\n\t\tconfiguredCompletionDelivery: completion.value,\n\t\tconfiguredCompletionDeliverySource: completion.source,\n\t\tusageRecording: usageStatus\n\t\t\t? {\n\t\t\t\t\tenabled: usageStatus.enabled,\n\t\t\t\t\tretentionDays: usageStatus.retentionDays,\n\t\t\t\t\trecordedEvents: usageStatus.recordedEvents,\n\t\t\t\t\twriteFailure: usageStatus.writeFailure,\n\t\t\t\t}\n\t\t\t: { enabled: false },\n\t\tconfiguredUsageRecording: usageRecording.enabled,\n\t\tconfiguredUsageRecordingSource: usageRecording.source,\n\t\tmaxParallelTasks: runtime.getMaxParallelTasks(),\n\t\tconfiguredMaxParallelTasks: parallelLimit.value,\n\t\tconfiguredMaxParallelTasksSource: parallelLimit.source,\n\t\tconsultResources: runtime.getConsultResourcePolicy(),\n\t\tconsultationCwdPolicy: runtime.getConsultationCwdPolicy(),\n\t\tconfiguredConsultationCwdPolicy: cwdPolicy.consultation.value,\n\t\tconsultationCwdPolicySource: cwdPolicy.consultation.source,\n\t\tdelegationCwdPolicy: runtime.getDelegationCwdPolicy(),\n\t\tconfiguredDelegationCwdPolicy: cwdPolicy.delegation.value,\n\t\tdelegationCwdPolicySource: cwdPolicy.delegation.source,\n\t\tconfiguredConsultResources: resources.value,\n\t\tconsultResourcesSource: resources.source,\n\t\tsettingsPath: safeDisplayPath(resources.path, process.cwd()),\n\t\tsettingsError:\n\t\t\tconfigured.error ||\n\t\t\tresources.error ||\n\t\t\tcwdPolicy.error ||\n\t\t\tcompletion.error ||\n\t\t\tparallelLimit.error ||\n\t\t\tdetachedLimits.error ||\n\t\t\ttransport.error ||\n\t\t\tusageRecording.error\n\t\t\t\t? boundedPrivateText(\n\t\t\t\t\t\tconfigured.error ??\n\t\t\t\t\t\t\tresources.error ??\n\t\t\t\t\t\t\tcwdPolicy.error ??\n\t\t\t\t\t\t\tcompletion.error ??\n\t\t\t\t\t\t\tparallelLimit.error ??\n\t\t\t\t\t\t\tdetachedLimits.error ??\n\t\t\t\t\t\t\ttransport.error ??\n\t\t\t\t\t\t\tusageRecording.error ??\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t2 * 1024,\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t};\n}\n\nasync function inspectInProcessCapability(): Promise<{ error?: string }> {\n\ttry {\n\t\tconst moduleSpecifier = \"@earendil-works/pi-coding-agent\";\n\t\tconst core = await import(moduleSpecifier);\n\t\tfor (const name of [\n\t\t\t\"createAgentSessionServices\",\n\t\t\t\"createAgentSessionFromServices\",\n\t\t\t\"resolveCliModel\",\n\t\t] as const) {\n\t\t\tif (typeof core[name] !== \"function\") return { error: `Pi core does not export ${name}()` };\n\t\t}\n\t\treturn {};\n\t} catch (error) {\n\t\treturn { error: error instanceof Error ? error.message : String(error) };\n\t}\n}\n\nfunction inspectRpcCapability(): { error?: string } {\n\ttry {\n\t\tresolvePiInvocation([\"--mode\", \"rpc\", \"--no-session\"]);\n\t\treturn {};\n\t} catch (error) {\n\t\treturn { error: error instanceof Error ? error.message : String(error) };\n\t}\n}\n\nfunction availableModelCount(ctx: ExtensionContext): number {\n\treturn (ctx.scopedModels?.length ?? 0) > 0\n\t\t? ctx.scopedModels.length\n\t\t: ctx.modelRegistry.getAvailable().length;\n}\n\nfunction projectToolNames(tools: readonly string[]): string[] {\n\treturn tools.slice(0, 100).map((tool) => boundedPrivateText(tool, 256));\n}\n\nfunction boundedProjection<T, TProjected>(\n\tvalues: readonly T[],\n\tlimit: number,\n\tproject: (value: T) => TProjected,\n): { items: TProjected[]; omitted: number } {\n\tconst items: TProjected[] = [];\n\tfor (const value of values.slice(0, limit)) {\n\t\tconst next = project(value);\n\t\tif (Buffer.byteLength(JSON.stringify([...items, next]), \"utf8\") > MAX_DETAILS_LIST_BYTES) break;\n\t\titems.push(next);\n\t}\n\treturn { items, omitted: Math.max(0, values.length - items.length) };\n}\n\nfunction inspectResult(details: Record<string, unknown>): InspectToolResult {\n\tconst rendered = boundText(JSON.stringify(details, null, 2));\n\treturn {\n\t\tcontent: [{ type: \"text\", text: rendered.text }],\n\t\tdetails: { ...details, ...(rendered.truncated ? { truncated: true } : {}) },\n\t};\n}\n\nfunction assertTrustedScope(scope: AgentScope, ctx: ExtensionContext): void {\n\tif ((scope === \"project\" || scope === \"both\") && !ctx.isProjectTrusted()) {\n\t\tthrow new Error(\"Project-local subagent definitions require a trusted project\");\n\t}\n}\n\nfunction parameterRecord(params: unknown): Record<string, unknown> {\n\tif (!params || typeof params !== \"object\" || Array.isArray(params)) {\n\t\tthrow new Error(\"subagent_inspect parameters must be an object\");\n\t}\n\treturn params as Record<string, unknown>;\n}\n\nfunction optionalAgentScope(value: unknown): AgentScope {\n\tif (value === undefined) return \"user\";\n\tif (value === \"user\" || value === \"project\" || value === \"both\") return value;\n\tthrow new Error(\"subagent_inspect agentScope must be user, project, or both\");\n}\n\nfunction requiredString(value: unknown, action: string, field: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`subagent_inspect action \"${action}\" requires ${field}`);\n\t}\n\treturn value;\n}\n\nfunction optionalContextMode(value: unknown): ContextMode {\n\tif (value === undefined) return \"none\";\n\tif (value === \"none\" || value === \"all\" || value === \"summary\") return value;\n\tif (typeof value === \"number\" && Number.isSafeInteger(value) && value >= 1) return value;\n\tthrow new Error(\"subagent_inspect context must be none, all, summary, or a positive integer\");\n}\n\nfunction optionalStringArray(value: unknown, field: string): string[] | undefined {\n\tif (value === undefined) return undefined;\n\tif (\n\t\t!Array.isArray(value) ||\n\t\t!value.every((item) => typeof item === \"string\" && item.length > 0)\n\t) {\n\t\tthrow new Error(`subagent_inspect ${field} must be an array of non-empty strings`);\n\t}\n\treturn [...value];\n}\n\nfunction optionalLimit(value: unknown, defaultValue: number): number {\n\tif (value === undefined) return defaultValue;\n\tif (!Number.isSafeInteger(value) || (value as number) < 1 || (value as number) > 100) {\n\t\tthrow new Error(\"subagent_inspect limit must be an integer between 1 and 100\");\n\t}\n\treturn value as number;\n}\n"],
5
- "mappings": "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",
6
- "names": ["settings", "agent"]
7
- }
@@ -1,294 +0,0 @@
1
- // @generated by scripts/build-runtime.mjs; do not edit.
2
- // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
- import {
4
- ROOT_TASK_PATH
5
- } from "./chunk-N7BLVXKK.ts";
6
- import {
7
- redactPrivateText,
8
- truncateUtf8
9
- } from "./chunk-H3FP6DLR.ts";
10
-
11
- // src/peer-communication.ts
12
- import { randomBytes, randomUUID } from "node:crypto";
13
- import net from "node:net";
14
- var MAX_BRIDGE_FRAME_BYTES = 64 * 1024;
15
- var MAX_BRIDGE_CONNECTIONS = 32;
16
- var BRIDGE_HANDSHAKE_TIMEOUT_MS = 2e3;
17
- var MAX_ROOT_MESSAGE_BYTES = 16 * 1024;
18
- var MAX_LISTED_PEERS = 20;
19
- var PeerCommunicationBroker = class {
20
- constructor(options) {
21
- this.options = options;
22
- }
23
- options;
24
- server;
25
- starting;
26
- closed = false;
27
- sockets = /* @__PURE__ */ new Set();
28
- credentialsByToken = /* @__PURE__ */ new Map();
29
- tokenByAgent = /* @__PURE__ */ new Map();
30
- dispatchedIds = /* @__PURE__ */ new Set();
31
- rootDeduplication = /* @__PURE__ */ new Map();
32
- async send(senderId, target, content, deduplicationKey) {
33
- if (this.closed) throw new Error("Subagent peer broker is closed");
34
- const registry = this.options.getRegistry();
35
- const sender = registry.resolveAgent(senderId);
36
- if (!sender) throw new Error(`Unknown subagent: ${senderId}`);
37
- if (sender.state === "closed")
38
- throw new Error(`Closed agent ${sender.id} cannot send messages`);
39
- if (target === ROOT_TASK_PATH) {
40
- return this.sendToRoot(sender, content, deduplicationKey);
41
- }
42
- const message = await registry.sendMessage(target, content, sender.id, deduplicationKey);
43
- if (this.closed) return message;
44
- const recipient = registry.get(message.recipientId);
45
- if (recipient?.state === "running" && !this.dispatchedIds.has(message.id)) {
46
- this.dispatchedIds.add(message.id);
47
- try {
48
- await this.options.dispatch?.(recipient, redactedDeliveryCopy(message));
49
- } catch {
50
- }
51
- }
52
- return message;
53
- }
54
- list(senderId) {
55
- const registry = this.options.getRegistry();
56
- const sender = registry.resolveAgent(senderId);
57
- if (!sender) throw new Error(`Unknown subagent: ${senderId}`);
58
- const root = {
59
- id: "root",
60
- taskName: "root",
61
- taskPath: ROOT_TASK_PATH,
62
- agent: "root",
63
- state: "active",
64
- self: false
65
- };
66
- const retained = registry.list().map((agent) => ({
67
- id: truncateUtf8(agent.id, 256).text,
68
- taskName: truncateUtf8(agent.taskName ?? "unknown", 128).text,
69
- taskPath: truncateUtf8(agent.taskPath ?? agent.id, 2048).text,
70
- agent: truncateUtf8(agent.agent, 128).text,
71
- state: agent.state,
72
- self: agent.id === sender.id
73
- })).sort((left, right) => left.taskPath.localeCompare(right.taskPath));
74
- const selected = retained.slice(0, MAX_LISTED_PEERS - 1);
75
- if (!selected.some((peer) => peer.id === sender.id)) {
76
- const senderPeer = retained.find((peer) => peer.id === sender.id);
77
- if (senderPeer) selected.splice(Math.max(0, selected.length - 1), 1, senderPeer);
78
- }
79
- return [root, ...selected].sort((left, right) => left.taskPath.localeCompare(right.taskPath));
80
- }
81
- async acknowledge(agentId, messageIds, completionIds = []) {
82
- if (this.closed) return;
83
- await this.options.getRegistry().acknowledgeVisibleMessages(
84
- agentId,
85
- messageIds,
86
- completionIds,
87
- (this.options.now ?? Date.now)()
88
- );
89
- }
90
- async issueCredentials(agentId, generation) {
91
- if (this.closed) throw new Error("Subagent peer broker is closed");
92
- if (!Number.isSafeInteger(generation) || generation < 1) {
93
- throw new Error("Subagent peer bridge generation must be a positive safe integer");
94
- }
95
- const agent = this.options.getRegistry().resolveAgent(agentId);
96
- if (!agent || agent.state === "closed") throw new Error(`Unknown subagent: ${agentId}`);
97
- await this.ensureServer();
98
- this.revoke(agent.id);
99
- const address = this.server?.address();
100
- if (!address || typeof address === "string") {
101
- throw new Error("Subagent peer bridge did not expose a loopback address");
102
- }
103
- const token = randomBytes(32).toString("hex");
104
- const credentials = {
105
- agentId: agent.id,
106
- host: "127.0.0.1",
107
- port: address.port,
108
- token,
109
- generation
110
- };
111
- this.credentialsByToken.set(token, credentials);
112
- this.tokenByAgent.set(agent.id, token);
113
- return { host: credentials.host, port: credentials.port, token, generation };
114
- }
115
- revoke(agentId) {
116
- const token = this.tokenByAgent.get(agentId);
117
- if (!token) return;
118
- this.tokenByAgent.delete(agentId);
119
- this.credentialsByToken.delete(token);
120
- }
121
- async close() {
122
- if (this.closed) return;
123
- this.closed = true;
124
- this.credentialsByToken.clear();
125
- this.tokenByAgent.clear();
126
- this.rootDeduplication.clear();
127
- this.dispatchedIds.clear();
128
- for (const socket of this.sockets) socket.destroy();
129
- this.sockets.clear();
130
- const server = this.server;
131
- this.server = void 0;
132
- if (!server) return;
133
- await new Promise((resolve) => server.close(() => resolve()));
134
- }
135
- async sendToRoot(sender, content, deduplicationKey) {
136
- if (!content.trim()) throw new Error("Subagent peer messages cannot be empty");
137
- if (deduplicationKey && deduplicationKey.length > 256) {
138
- throw new Error("Subagent peer deduplication keys cannot exceed 256 characters");
139
- }
140
- const deduplicationId = deduplicationKey ? `${sender.id}\0${deduplicationKey}` : void 0;
141
- const duplicate = deduplicationId ? this.rootDeduplication.get(deduplicationId) : void 0;
142
- if (duplicate) return { ...duplicate };
143
- const message = {
144
- id: `msg_${randomUUID()}`,
145
- senderId: sender.id,
146
- recipientId: "root",
147
- content: truncateUtf8(content, MAX_ROOT_MESSAGE_BYTES).text,
148
- createdAt: (this.options.now ?? Date.now)(),
149
- deduplicationKey
150
- };
151
- await this.options.sendRoot({
152
- message: redactedDeliveryCopy(message),
153
- senderPath: sender.taskPath ?? sender.id
154
- });
155
- if (deduplicationId) {
156
- this.rootDeduplication.set(deduplicationId, message);
157
- while (this.rootDeduplication.size > 100) {
158
- const oldest = this.rootDeduplication.keys().next().value;
159
- if (typeof oldest !== "string") break;
160
- this.rootDeduplication.delete(oldest);
161
- }
162
- }
163
- return { ...message };
164
- }
165
- async ensureServer() {
166
- if (this.server) return;
167
- if (!this.starting) {
168
- this.starting = new Promise((resolve, reject) => {
169
- const server = net.createServer((socket) => this.accept(socket));
170
- server.maxConnections = MAX_BRIDGE_CONNECTIONS;
171
- server.once("error", reject);
172
- server.listen({ host: "127.0.0.1", port: 0 }, () => {
173
- server.off("error", reject);
174
- this.server = server;
175
- resolve();
176
- });
177
- }).finally(() => {
178
- this.starting = void 0;
179
- });
180
- }
181
- await this.starting;
182
- if (this.closed) {
183
- const server = this.server;
184
- this.server = void 0;
185
- if (server) await new Promise((resolve) => server.close(() => resolve()));
186
- throw new Error("Subagent peer broker closed while starting");
187
- }
188
- }
189
- accept(socket) {
190
- if (this.closed || this.sockets.size >= MAX_BRIDGE_CONNECTIONS) {
191
- socket.destroy();
192
- return;
193
- }
194
- this.sockets.add(socket);
195
- let frame = Buffer.alloc(0);
196
- let handled = false;
197
- const timer = setTimeout(() => {
198
- handled = true;
199
- this.respond(socket, { ok: false, error: "bridge handshake timed out" });
200
- }, BRIDGE_HANDSHAKE_TIMEOUT_MS);
201
- timer.unref();
202
- const cleanup = () => {
203
- clearTimeout(timer);
204
- this.sockets.delete(socket);
205
- };
206
- socket.on("data", (chunk) => {
207
- if (handled) return;
208
- frame = Buffer.concat([frame, chunk]);
209
- if (frame.byteLength > MAX_BRIDGE_FRAME_BYTES) {
210
- handled = true;
211
- clearTimeout(timer);
212
- this.respond(socket, { ok: false, error: "bridge frame exceeds size limit" });
213
- return;
214
- }
215
- const newline = frame.indexOf(10);
216
- if (newline < 0) return;
217
- handled = true;
218
- clearTimeout(timer);
219
- void this.handleFrame(frame.subarray(0, newline).toString("utf8")).then(
220
- (response) => this.respond(socket, response)
221
- );
222
- });
223
- socket.once("close", cleanup);
224
- socket.once("error", cleanup);
225
- }
226
- async handleFrame(frame) {
227
- let request;
228
- try {
229
- const parsed = JSON.parse(frame);
230
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) throw new Error();
231
- request = parsed;
232
- } catch {
233
- return { ok: false, error: "malformed bridge request" };
234
- }
235
- const credential = typeof request.token === "string" ? this.credentialsByToken.get(request.token) : void 0;
236
- if (!credential) return { ok: false, error: "unauthenticated bridge request" };
237
- try {
238
- switch (request.action) {
239
- case "send": {
240
- if (typeof request.target !== "string" || typeof request.message !== "string") {
241
- throw new Error("send requires target and message strings");
242
- }
243
- const message = await this.send(
244
- credential.agentId,
245
- request.target,
246
- request.message,
247
- typeof request.deduplicationKey === "string" ? request.deduplicationKey : void 0
248
- );
249
- return { ok: true, message };
250
- }
251
- case "list":
252
- return { ok: true, peers: this.list(credential.agentId) };
253
- case "acknowledge": {
254
- const messageIds = stringArray(request.messageIds);
255
- const completionIds = stringArray(request.completionIds);
256
- await this.acknowledge(credential.agentId, messageIds, completionIds);
257
- return { ok: true };
258
- }
259
- default:
260
- return { ok: false, error: "unsupported bridge action" };
261
- }
262
- } catch (error) {
263
- return { ok: false, error: error instanceof Error ? error.message : String(error) };
264
- }
265
- }
266
- respond(socket, value) {
267
- if (socket.destroyed) return;
268
- const content = `${JSON.stringify(value)}
269
- `;
270
- socket.end(content);
271
- }
272
- };
273
- function redactedDeliveryCopy(message) {
274
- return { ...message, content: redactPrivateText(message.content) };
275
- }
276
- function stringArray(value) {
277
- if (value === void 0) return [];
278
- if (!Array.isArray(value) || value.length > 100 || value.some((item) => typeof item !== "string")) {
279
- throw new Error("acknowledgement IDs must be a bounded string array");
280
- }
281
- return value;
282
- }
283
- function peerBridgeAddress(credentials) {
284
- return `${credentials.host}:${credentials.port}`;
285
- }
286
- function isLoopbackAddress(address) {
287
- return Boolean(address && typeof address !== "string" && address.address === "127.0.0.1");
288
- }
289
- export {
290
- PeerCommunicationBroker,
291
- isLoopbackAddress,
292
- peerBridgeAddress
293
- };
294
- //# sourceMappingURL=peer-communication-KL36Z6CO.ts.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/peer-communication.ts"],
4
- "sourcesContent": ["import { randomBytes, randomUUID } from \"node:crypto\";\nimport net, { type AddressInfo, type Server, type Socket } from \"node:net\";\nimport { redactPrivateText } from \"./context.js\";\nimport { truncateUtf8 } from \"./limits.js\";\nimport type { AgentMailboxMessage, AgentRegistry, ManagedAgent } from \"./registry.js\";\nimport { ROOT_TASK_PATH } from \"./task-path.js\";\n\nconst MAX_BRIDGE_FRAME_BYTES = 64 * 1024;\nconst MAX_BRIDGE_CONNECTIONS = 32;\nconst BRIDGE_HANDSHAKE_TIMEOUT_MS = 2_000;\nconst MAX_ROOT_MESSAGE_BYTES = 16 * 1024;\nconst MAX_LISTED_PEERS = 20;\n\nexport interface PeerDescriptor {\n\tid: string;\n\ttaskName: string;\n\ttaskPath: string;\n\tagent: string;\n\tstate: string;\n\tself: boolean;\n}\n\nexport interface PeerRootMessage {\n\tmessage: AgentMailboxMessage;\n\tsenderPath: string;\n}\n\nexport interface PeerBridgeCredentials {\n\thost: string;\n\tport: number;\n\ttoken: string;\n\tgeneration: number;\n}\n\nexport interface PeerCommunicationBrokerOptions {\n\tgetRegistry(): AgentRegistry;\n\tsendRoot(message: PeerRootMessage): void | Promise<void>;\n\tdispatch?(recipient: ManagedAgent, message: AgentMailboxMessage): boolean | Promise<boolean>;\n\tnow?: () => number;\n}\n\ninterface CredentialRecord extends PeerBridgeCredentials {\n\tagentId: string;\n}\n\n/** Session-owned authenticated routing and process-child JSONL bridge. */\nexport class PeerCommunicationBroker {\n\tprivate server?: Server;\n\tprivate starting?: Promise<void>;\n\tprivate closed = false;\n\tprivate readonly sockets = new Set<Socket>();\n\tprivate readonly credentialsByToken = new Map<string, CredentialRecord>();\n\tprivate readonly tokenByAgent = new Map<string, string>();\n\tprivate readonly dispatchedIds = new Set<string>();\n\tprivate readonly rootDeduplication = new Map<string, AgentMailboxMessage>();\n\n\tconstructor(private readonly options: PeerCommunicationBrokerOptions) {}\n\n\tasync send(\n\t\tsenderId: string,\n\t\ttarget: string,\n\t\tcontent: string,\n\t\tdeduplicationKey?: string,\n\t): Promise<AgentMailboxMessage> {\n\t\tif (this.closed) throw new Error(\"Subagent peer broker is closed\");\n\t\tconst registry = this.options.getRegistry();\n\t\tconst sender = registry.resolveAgent(senderId);\n\t\tif (!sender) throw new Error(`Unknown subagent: ${senderId}`);\n\t\tif (sender.state === \"closed\")\n\t\t\tthrow new Error(`Closed agent ${sender.id} cannot send messages`);\n\t\tif (target === ROOT_TASK_PATH) {\n\t\t\treturn this.sendToRoot(sender, content, deduplicationKey);\n\t\t}\n\t\tconst message = await registry.sendMessage(target, content, sender.id, deduplicationKey);\n\t\tif (this.closed) return message;\n\t\tconst recipient = registry.get(message.recipientId);\n\t\tif (recipient?.state === \"running\" && !this.dispatchedIds.has(message.id)) {\n\t\t\tthis.dispatchedIds.add(message.id);\n\t\t\ttry {\n\t\t\t\tawait this.options.dispatch?.(recipient, redactedDeliveryCopy(message));\n\t\t\t} catch {\n\t\t\t\t// Durable mailbox delivery remains available for the recipient's next turn.\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t}\n\n\tlist(senderId: string): PeerDescriptor[] {\n\t\tconst registry = this.options.getRegistry();\n\t\tconst sender = registry.resolveAgent(senderId);\n\t\tif (!sender) throw new Error(`Unknown subagent: ${senderId}`);\n\t\tconst root: PeerDescriptor = {\n\t\t\tid: \"root\",\n\t\t\ttaskName: \"root\",\n\t\t\ttaskPath: ROOT_TASK_PATH,\n\t\t\tagent: \"root\",\n\t\t\tstate: \"active\",\n\t\t\tself: false,\n\t\t};\n\t\tconst retained = registry\n\t\t\t.list()\n\t\t\t.map((agent) => ({\n\t\t\t\tid: truncateUtf8(agent.id, 256).text,\n\t\t\t\ttaskName: truncateUtf8(agent.taskName ?? \"unknown\", 128).text,\n\t\t\t\ttaskPath: truncateUtf8(agent.taskPath ?? agent.id, 2_048).text,\n\t\t\t\tagent: truncateUtf8(agent.agent, 128).text,\n\t\t\t\tstate: agent.state,\n\t\t\t\tself: agent.id === sender.id,\n\t\t\t}))\n\t\t\t.sort((left, right) => left.taskPath.localeCompare(right.taskPath));\n\t\tconst selected = retained.slice(0, MAX_LISTED_PEERS - 1);\n\t\tif (!selected.some((peer) => peer.id === sender.id)) {\n\t\t\tconst senderPeer = retained.find((peer) => peer.id === sender.id);\n\t\t\tif (senderPeer) selected.splice(Math.max(0, selected.length - 1), 1, senderPeer);\n\t\t}\n\t\treturn [root, ...selected].sort((left, right) => left.taskPath.localeCompare(right.taskPath));\n\t}\n\n\tasync acknowledge(\n\t\tagentId: string,\n\t\tmessageIds: readonly string[],\n\t\tcompletionIds: readonly string[] = [],\n\t): Promise<void> {\n\t\tif (this.closed) return;\n\t\tawait this.options\n\t\t\t.getRegistry()\n\t\t\t.acknowledgeVisibleMessages(\n\t\t\t\tagentId,\n\t\t\t\tmessageIds,\n\t\t\t\tcompletionIds,\n\t\t\t\t(this.options.now ?? Date.now)(),\n\t\t\t);\n\t}\n\n\tasync issueCredentials(agentId: string, generation: number): Promise<PeerBridgeCredentials> {\n\t\tif (this.closed) throw new Error(\"Subagent peer broker is closed\");\n\t\tif (!Number.isSafeInteger(generation) || generation < 1) {\n\t\t\tthrow new Error(\"Subagent peer bridge generation must be a positive safe integer\");\n\t\t}\n\t\tconst agent = this.options.getRegistry().resolveAgent(agentId);\n\t\tif (!agent || agent.state === \"closed\") throw new Error(`Unknown subagent: ${agentId}`);\n\t\tawait this.ensureServer();\n\t\tthis.revoke(agent.id);\n\t\tconst address = this.server?.address();\n\t\tif (!address || typeof address === \"string\") {\n\t\t\tthrow new Error(\"Subagent peer bridge did not expose a loopback address\");\n\t\t}\n\t\tconst token = randomBytes(32).toString(\"hex\");\n\t\tconst credentials: CredentialRecord = {\n\t\t\tagentId: agent.id,\n\t\t\thost: \"127.0.0.1\",\n\t\t\tport: address.port,\n\t\t\ttoken,\n\t\t\tgeneration,\n\t\t};\n\t\tthis.credentialsByToken.set(token, credentials);\n\t\tthis.tokenByAgent.set(agent.id, token);\n\t\treturn { host: credentials.host, port: credentials.port, token, generation };\n\t}\n\n\trevoke(agentId: string): void {\n\t\tconst token = this.tokenByAgent.get(agentId);\n\t\tif (!token) return;\n\t\tthis.tokenByAgent.delete(agentId);\n\t\tthis.credentialsByToken.delete(token);\n\t}\n\n\tasync close(): Promise<void> {\n\t\tif (this.closed) return;\n\t\tthis.closed = true;\n\t\tthis.credentialsByToken.clear();\n\t\tthis.tokenByAgent.clear();\n\t\tthis.rootDeduplication.clear();\n\t\tthis.dispatchedIds.clear();\n\t\tfor (const socket of this.sockets) socket.destroy();\n\t\tthis.sockets.clear();\n\t\tconst server = this.server;\n\t\tthis.server = undefined;\n\t\tif (!server) return;\n\t\tawait new Promise<void>((resolve) => server.close(() => resolve()));\n\t}\n\n\tprivate async sendToRoot(\n\t\tsender: ManagedAgent,\n\t\tcontent: string,\n\t\tdeduplicationKey?: string,\n\t): Promise<AgentMailboxMessage> {\n\t\tif (!content.trim()) throw new Error(\"Subagent peer messages cannot be empty\");\n\t\tif (deduplicationKey && deduplicationKey.length > 256) {\n\t\t\tthrow new Error(\"Subagent peer deduplication keys cannot exceed 256 characters\");\n\t\t}\n\t\tconst deduplicationId = deduplicationKey ? `${sender.id}\\0${deduplicationKey}` : undefined;\n\t\tconst duplicate = deduplicationId ? this.rootDeduplication.get(deduplicationId) : undefined;\n\t\tif (duplicate) return { ...duplicate };\n\t\tconst message: AgentMailboxMessage = {\n\t\t\tid: `msg_${randomUUID()}`,\n\t\t\tsenderId: sender.id,\n\t\t\trecipientId: \"root\",\n\t\t\tcontent: truncateUtf8(content, MAX_ROOT_MESSAGE_BYTES).text,\n\t\t\tcreatedAt: (this.options.now ?? Date.now)(),\n\t\t\tdeduplicationKey,\n\t\t};\n\t\tawait this.options.sendRoot({\n\t\t\tmessage: redactedDeliveryCopy(message),\n\t\t\tsenderPath: sender.taskPath ?? sender.id,\n\t\t});\n\t\tif (deduplicationId) {\n\t\t\tthis.rootDeduplication.set(deduplicationId, message);\n\t\t\twhile (this.rootDeduplication.size > 100) {\n\t\t\t\tconst oldest = this.rootDeduplication.keys().next().value;\n\t\t\t\tif (typeof oldest !== \"string\") break;\n\t\t\t\tthis.rootDeduplication.delete(oldest);\n\t\t\t}\n\t\t}\n\t\treturn { ...message };\n\t}\n\n\tprivate async ensureServer(): Promise<void> {\n\t\tif (this.server) return;\n\t\tif (!this.starting) {\n\t\t\tthis.starting = new Promise<void>((resolve, reject) => {\n\t\t\t\tconst server = net.createServer((socket) => this.accept(socket));\n\t\t\t\tserver.maxConnections = MAX_BRIDGE_CONNECTIONS;\n\t\t\t\tserver.once(\"error\", reject);\n\t\t\t\tserver.listen({ host: \"127.0.0.1\", port: 0 }, () => {\n\t\t\t\t\tserver.off(\"error\", reject);\n\t\t\t\t\tthis.server = server;\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t}).finally(() => {\n\t\t\t\tthis.starting = undefined;\n\t\t\t});\n\t\t}\n\t\tawait this.starting;\n\t\tif (this.closed) {\n\t\t\tconst server = this.server as Server | undefined;\n\t\t\tthis.server = undefined;\n\t\t\tif (server) await new Promise<void>((resolve) => server.close(() => resolve()));\n\t\t\tthrow new Error(\"Subagent peer broker closed while starting\");\n\t\t}\n\t}\n\n\tprivate accept(socket: Socket): void {\n\t\tif (this.closed || this.sockets.size >= MAX_BRIDGE_CONNECTIONS) {\n\t\t\tsocket.destroy();\n\t\t\treturn;\n\t\t}\n\t\tthis.sockets.add(socket);\n\t\tlet frame = Buffer.alloc(0);\n\t\tlet handled = false;\n\t\tconst timer = setTimeout(() => {\n\t\t\thandled = true;\n\t\t\tthis.respond(socket, { ok: false, error: \"bridge handshake timed out\" });\n\t\t}, BRIDGE_HANDSHAKE_TIMEOUT_MS);\n\t\ttimer.unref();\n\t\tconst cleanup = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tthis.sockets.delete(socket);\n\t\t};\n\t\tsocket.on(\"data\", (chunk: Buffer) => {\n\t\t\tif (handled) return;\n\t\t\tframe = Buffer.concat([frame, chunk]);\n\t\t\tif (frame.byteLength > MAX_BRIDGE_FRAME_BYTES) {\n\t\t\t\thandled = true;\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tthis.respond(socket, { ok: false, error: \"bridge frame exceeds size limit\" });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst newline = frame.indexOf(0x0a);\n\t\t\tif (newline < 0) return;\n\t\t\thandled = true;\n\t\t\tclearTimeout(timer);\n\t\t\tvoid this.handleFrame(frame.subarray(0, newline).toString(\"utf8\")).then((response) =>\n\t\t\t\tthis.respond(socket, response),\n\t\t\t);\n\t\t});\n\t\tsocket.once(\"close\", cleanup);\n\t\tsocket.once(\"error\", cleanup);\n\t}\n\n\tprivate async handleFrame(frame: string): Promise<Record<string, unknown>> {\n\t\tlet request: Record<string, unknown>;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(frame) as unknown;\n\t\t\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) throw new Error();\n\t\t\trequest = parsed as Record<string, unknown>;\n\t\t} catch {\n\t\t\treturn { ok: false, error: \"malformed bridge request\" };\n\t\t}\n\t\tconst credential =\n\t\t\ttypeof request.token === \"string\" ? this.credentialsByToken.get(request.token) : undefined;\n\t\tif (!credential) return { ok: false, error: \"unauthenticated bridge request\" };\n\t\ttry {\n\t\t\tswitch (request.action) {\n\t\t\t\tcase \"send\": {\n\t\t\t\t\tif (typeof request.target !== \"string\" || typeof request.message !== \"string\") {\n\t\t\t\t\t\tthrow new Error(\"send requires target and message strings\");\n\t\t\t\t\t}\n\t\t\t\t\tconst message = await this.send(\n\t\t\t\t\t\tcredential.agentId,\n\t\t\t\t\t\trequest.target,\n\t\t\t\t\t\trequest.message,\n\t\t\t\t\t\ttypeof request.deduplicationKey === \"string\" ? request.deduplicationKey : undefined,\n\t\t\t\t\t);\n\t\t\t\t\treturn { ok: true, message };\n\t\t\t\t}\n\t\t\t\tcase \"list\":\n\t\t\t\t\treturn { ok: true, peers: this.list(credential.agentId) };\n\t\t\t\tcase \"acknowledge\": {\n\t\t\t\t\tconst messageIds = stringArray(request.messageIds);\n\t\t\t\t\tconst completionIds = stringArray(request.completionIds);\n\t\t\t\t\tawait this.acknowledge(credential.agentId, messageIds, completionIds);\n\t\t\t\t\treturn { ok: true };\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\treturn { ok: false, error: \"unsupported bridge action\" };\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treturn { ok: false, error: error instanceof Error ? error.message : String(error) };\n\t\t}\n\t}\n\n\tprivate respond(socket: Socket, value: Record<string, unknown>): void {\n\t\tif (socket.destroyed) return;\n\t\tconst content = `${JSON.stringify(value)}\\n`;\n\t\tsocket.end(content);\n\t}\n}\n\nfunction redactedDeliveryCopy(message: AgentMailboxMessage): AgentMailboxMessage {\n\treturn { ...message, content: redactPrivateText(message.content) };\n}\n\nfunction stringArray(value: unknown): string[] {\n\tif (value === undefined) return [];\n\tif (\n\t\t!Array.isArray(value) ||\n\t\tvalue.length > 100 ||\n\t\tvalue.some((item) => typeof item !== \"string\")\n\t) {\n\t\tthrow new Error(\"acknowledgement IDs must be a bounded string array\");\n\t}\n\treturn value;\n}\n\nexport function peerBridgeAddress(credentials: PeerBridgeCredentials): string {\n\treturn `${credentials.host}:${credentials.port}`;\n}\n\nexport function isLoopbackAddress(address: AddressInfo | string | null): address is AddressInfo {\n\treturn Boolean(address && typeof address !== \"string\" && address.address === \"127.0.0.1\");\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }