@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.
- package/README.md +187 -1228
- package/dist/child-communication-bridge.ts +136 -0
- package/dist/child-communication-bridge.ts.map +7 -0
- package/dist/chunks/chunk-UKTWUQRM.js +667 -0
- package/dist/chunks/chunk-UKTWUQRM.js.map +7 -0
- package/dist/index.ts +1448 -1614
- package/dist/index.ts.map +4 -4
- package/docs/design-principles.md +31 -0
- package/docs/ipc-transport-idea.md +103 -0
- package/docs/tools.md +109 -0
- package/package.json +11 -19
- package/src/broker-credentials.ts +71 -0
- package/src/child-communication-bridge.ts +153 -0
- package/src/child-communication-tools.ts +147 -0
- package/src/completion-renderer.ts +60 -0
- package/src/index.ts +1 -1
- package/src/message-broker.ts +628 -0
- package/src/model-output.ts +42 -0
- package/src/process.ts +688 -0
- package/src/runtime.ts +538 -0
- package/src/subagents.ts +33 -34
- package/src/tools.ts +416 -0
- package/src/types.ts +85 -0
- package/src/widget.ts +130 -0
- package/dist/chunks/auto-transport-FUUKFDIG.ts +0 -109
- package/dist/chunks/auto-transport-FUUKFDIG.ts.map +0 -7
- package/dist/chunks/capability-grant-PR72SWWS.ts +0 -19
- package/dist/chunks/capability-grant-PR72SWWS.ts.map +0 -7
- package/dist/chunks/child-peer-bridge.ts +0 -108
- package/dist/chunks/child-peer-bridge.ts.map +0 -7
- package/dist/chunks/chunk-2LMJU25E.ts +0 -1641
- package/dist/chunks/chunk-2LMJU25E.ts.map +0 -7
- package/dist/chunks/chunk-47SK2QYC.ts +0 -56
- package/dist/chunks/chunk-47SK2QYC.ts.map +0 -7
- package/dist/chunks/chunk-4AQSF7AS.ts +0 -29
- package/dist/chunks/chunk-4AQSF7AS.ts.map +0 -7
- package/dist/chunks/chunk-5DGRMKNV.ts +0 -126
- package/dist/chunks/chunk-5DGRMKNV.ts.map +0 -7
- package/dist/chunks/chunk-6H6TBBED.ts +0 -108
- package/dist/chunks/chunk-6H6TBBED.ts.map +0 -7
- package/dist/chunks/chunk-6KJ34M6S.ts +0 -159
- package/dist/chunks/chunk-6KJ34M6S.ts.map +0 -7
- package/dist/chunks/chunk-6NSJVPXX.ts +0 -480
- package/dist/chunks/chunk-6NSJVPXX.ts.map +0 -7
- package/dist/chunks/chunk-7AAJEUSL.ts +0 -238
- package/dist/chunks/chunk-7AAJEUSL.ts.map +0 -7
- package/dist/chunks/chunk-BFK2Z4ZF.ts +0 -189
- package/dist/chunks/chunk-BFK2Z4ZF.ts.map +0 -7
- package/dist/chunks/chunk-BOAXY55Y.ts +0 -153
- package/dist/chunks/chunk-BOAXY55Y.ts.map +0 -7
- package/dist/chunks/chunk-D4CR7T73.ts +0 -353
- package/dist/chunks/chunk-D4CR7T73.ts.map +0 -7
- package/dist/chunks/chunk-FEVPWRMU.ts +0 -300
- package/dist/chunks/chunk-FEVPWRMU.ts.map +0 -7
- package/dist/chunks/chunk-G6VZTCFH.ts +0 -70
- package/dist/chunks/chunk-G6VZTCFH.ts.map +0 -7
- package/dist/chunks/chunk-H3FP6DLR.ts +0 -160
- package/dist/chunks/chunk-H3FP6DLR.ts.map +0 -7
- package/dist/chunks/chunk-HA36LPCO.ts +0 -130
- package/dist/chunks/chunk-HA36LPCO.ts.map +0 -7
- package/dist/chunks/chunk-HOP5FXDT.ts +0 -27
- package/dist/chunks/chunk-HOP5FXDT.ts.map +0 -7
- package/dist/chunks/chunk-IGAMVWFN.ts +0 -139
- package/dist/chunks/chunk-IGAMVWFN.ts.map +0 -7
- package/dist/chunks/chunk-ILEQ27AL.ts +0 -45
- package/dist/chunks/chunk-ILEQ27AL.ts.map +0 -7
- package/dist/chunks/chunk-ITVWPNU4.ts +0 -819
- package/dist/chunks/chunk-ITVWPNU4.ts.map +0 -7
- package/dist/chunks/chunk-IWC32VPY.ts +0 -172
- package/dist/chunks/chunk-IWC32VPY.ts.map +0 -7
- package/dist/chunks/chunk-JSZIP73U.ts +0 -362
- package/dist/chunks/chunk-JSZIP73U.ts.map +0 -7
- package/dist/chunks/chunk-JU6LUNLP.ts +0 -380
- package/dist/chunks/chunk-JU6LUNLP.ts.map +0 -7
- package/dist/chunks/chunk-KMGKCEO4.ts +0 -38
- package/dist/chunks/chunk-KMGKCEO4.ts.map +0 -7
- package/dist/chunks/chunk-LASD73CM.ts +0 -339
- package/dist/chunks/chunk-LASD73CM.ts.map +0 -7
- package/dist/chunks/chunk-LEOYDZI3.ts +0 -22
- package/dist/chunks/chunk-LEOYDZI3.ts.map +0 -7
- package/dist/chunks/chunk-LL4LP2T7.ts +0 -737
- package/dist/chunks/chunk-LL4LP2T7.ts.map +0 -7
- package/dist/chunks/chunk-N2T5IN4X.ts +0 -18
- package/dist/chunks/chunk-N2T5IN4X.ts.map +0 -7
- package/dist/chunks/chunk-N7BLVXKK.ts +0 -73
- package/dist/chunks/chunk-N7BLVXKK.ts.map +0 -7
- package/dist/chunks/chunk-NLT67IZS.ts +0 -322
- package/dist/chunks/chunk-NLT67IZS.ts.map +0 -7
- package/dist/chunks/chunk-NTRPLF46.ts +0 -63
- package/dist/chunks/chunk-NTRPLF46.ts.map +0 -7
- package/dist/chunks/chunk-ONDTY4EL.ts +0 -91
- package/dist/chunks/chunk-ONDTY4EL.ts.map +0 -7
- package/dist/chunks/chunk-OVPHFGKO.ts +0 -1769
- package/dist/chunks/chunk-OVPHFGKO.ts.map +0 -7
- package/dist/chunks/chunk-P7OH4XMF.ts +0 -60
- package/dist/chunks/chunk-P7OH4XMF.ts.map +0 -7
- package/dist/chunks/chunk-PBZMBTNJ.ts +0 -422
- package/dist/chunks/chunk-PBZMBTNJ.ts.map +0 -7
- package/dist/chunks/chunk-PGLSFLYW.ts +0 -52
- package/dist/chunks/chunk-PGLSFLYW.ts.map +0 -7
- package/dist/chunks/chunk-RRR66UWR.ts +0 -28
- package/dist/chunks/chunk-RRR66UWR.ts.map +0 -7
- package/dist/chunks/chunk-RSUXZD6S.ts +0 -275
- package/dist/chunks/chunk-RSUXZD6S.ts.map +0 -7
- package/dist/chunks/chunk-RTCVYIZA.ts +0 -221
- package/dist/chunks/chunk-RTCVYIZA.ts.map +0 -7
- package/dist/chunks/chunk-RY2AEGMZ.ts +0 -34
- package/dist/chunks/chunk-RY2AEGMZ.ts.map +0 -7
- package/dist/chunks/chunk-SWGQLFSD.ts +0 -60
- package/dist/chunks/chunk-SWGQLFSD.ts.map +0 -7
- package/dist/chunks/chunk-TM2R67J3.ts +0 -52
- package/dist/chunks/chunk-TM2R67J3.ts.map +0 -7
- package/dist/chunks/chunk-TMZRHIIK.ts +0 -497
- package/dist/chunks/chunk-TMZRHIIK.ts.map +0 -7
- package/dist/chunks/chunk-TZ34IQ3M.ts +0 -59
- package/dist/chunks/chunk-TZ34IQ3M.ts.map +0 -7
- package/dist/chunks/chunk-UMBPMVJW.ts +0 -22
- package/dist/chunks/chunk-UMBPMVJW.ts.map +0 -7
- package/dist/chunks/chunk-VDG7LTYE.ts +0 -80
- package/dist/chunks/chunk-VDG7LTYE.ts.map +0 -7
- package/dist/chunks/chunk-X4NMONPE.ts +0 -73
- package/dist/chunks/chunk-X4NMONPE.ts.map +0 -7
- package/dist/chunks/chunk-YPJEN6NU.ts +0 -65
- package/dist/chunks/chunk-YPJEN6NU.ts.map +0 -7
- package/dist/chunks/chunk-YU53SHA7.ts +0 -328
- package/dist/chunks/chunk-YU53SHA7.ts.map +0 -7
- package/dist/chunks/completion-delivery-RSJU6BXL.ts +0 -17
- package/dist/chunks/completion-delivery-RSJU6BXL.ts.map +0 -7
- package/dist/chunks/config-status-FKGDECZ3.ts +0 -35
- package/dist/chunks/config-status-FKGDECZ3.ts.map +0 -7
- package/dist/chunks/config-ui-ABHYNGQ7.ts +0 -1212
- package/dist/chunks/config-ui-ABHYNGQ7.ts.map +0 -7
- package/dist/chunks/consult-LJU3IQY5.ts +0 -519
- package/dist/chunks/consult-LJU3IQY5.ts.map +0 -7
- package/dist/chunks/context-QDKLVQXE.ts +0 -11
- package/dist/chunks/context-QDKLVQXE.ts.map +0 -7
- package/dist/chunks/create-stateful-transport-JWC2EFYL.ts +0 -130
- package/dist/chunks/create-stateful-transport-JWC2EFYL.ts.map +0 -7
- package/dist/chunks/cwd-policy-NB6XZ5GF.ts +0 -17
- package/dist/chunks/cwd-policy-NB6XZ5GF.ts.map +0 -7
- package/dist/chunks/delegation-contract-LA56I5DT.ts +0 -24
- package/dist/chunks/delegation-contract-LA56I5DT.ts.map +0 -7
- package/dist/chunks/discovery-MIFB2U4Y.ts +0 -12
- package/dist/chunks/discovery-MIFB2U4Y.ts.map +0 -7
- package/dist/chunks/execution-Q2JZLKJA.ts +0 -4037
- package/dist/chunks/execution-Q2JZLKJA.ts.map +0 -7
- package/dist/chunks/in-process-transport-HJ6TZXC3.ts +0 -39
- package/dist/chunks/in-process-transport-HJ6TZXC3.ts.map +0 -7
- package/dist/chunks/inspect-UH2TKH6E.ts +0 -634
- package/dist/chunks/inspect-UH2TKH6E.ts.map +0 -7
- package/dist/chunks/peer-communication-KL36Z6CO.ts +0 -294
- package/dist/chunks/peer-communication-KL36Z6CO.ts.map +0 -7
- package/dist/chunks/persistence-UY3PY6E5.ts +0 -348
- package/dist/chunks/persistence-UY3PY6E5.ts.map +0 -7
- package/dist/chunks/registry-BT54L6CY.ts +0 -1445
- package/dist/chunks/registry-BT54L6CY.ts.map +0 -7
- package/dist/chunks/retained-semantic-state-GM75FZGE.ts +0 -81
- package/dist/chunks/retained-semantic-state-GM75FZGE.ts.map +0 -7
- package/dist/chunks/rpc-transport-7R7DVCEB.ts +0 -1222
- package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +0 -7
- package/dist/chunks/runtime-policy-5YELCOVC.ts +0 -15
- package/dist/chunks/runtime-policy-5YELCOVC.ts.map +0 -7
- package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts +0 -19
- package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts.map +0 -7
- package/dist/chunks/spawn-idempotency-BNHOSMZW.ts +0 -13
- package/dist/chunks/spawn-idempotency-BNHOSMZW.ts.map +0 -7
- package/dist/chunks/stateful-lifecycle-JAR6K55H.ts +0 -15
- package/dist/chunks/stateful-lifecycle-JAR6K55H.ts.map +0 -7
- package/dist/chunks/subprocess-transport-VHZJRBTW.ts +0 -160
- package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +0 -7
- package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +0 -164
- package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +0 -7
- package/dist/chunks/workspace-WDKLN72J.ts +0 -11
- package/dist/chunks/workspace-WDKLN72J.ts.map +0 -7
- package/docs/async-runtime-protocol.md +0 -84
- package/docs/implementation-notes/pi-subagents-capability-matrix.md +0 -62
- package/docs/implementation-notes/pi-subagents-current-direction.md +0 -99
- package/docs/implementation-notes/pi-subagents-rpc-v1.md +0 -139
- package/docs/pi-subagents-diagrams.md +0 -183
- package/src/adaptive-scheduler.ts +0 -224
- package/src/admission-policy.ts +0 -78
- package/src/agent-projection.ts +0 -53
- package/src/agents/built-ins.ts +0 -71
- package/src/agents/catalog.ts +0 -241
- package/src/agents/discovery.ts +0 -265
- package/src/agents/types.ts +0 -100
- package/src/agents.ts +0 -51
- package/src/auto-transport.ts +0 -121
- package/src/blocking-status.ts +0 -63
- package/src/cached-module-loader.ts +0 -18
- package/src/capabilities.ts +0 -145
- package/src/capability-grant.ts +0 -115
- package/src/capability-router.ts +0 -107
- package/src/child-peer-bridge.ts +0 -124
- package/src/child-peer-tools.ts +0 -132
- package/src/completion-delivery.ts +0 -409
- package/src/completion-render.ts +0 -190
- package/src/completion-requirement.ts +0 -479
- package/src/completion-routing.ts +0 -24
- package/src/config-registration.ts +0 -114
- package/src/config-status.ts +0 -217
- package/src/config-ui.ts +0 -983
- package/src/consult-policy.ts +0 -15
- package/src/consult-registration.ts +0 -125
- package/src/consult-render.ts +0 -194
- package/src/consult-resources.ts +0 -51
- package/src/consult-tool.ts +0 -95
- package/src/consult.ts +0 -566
- package/src/context.ts +0 -126
- package/src/create-stateful-transport.ts +0 -157
- package/src/cwd-policy.ts +0 -183
- package/src/delegation-contract.ts +0 -463
- package/src/execution/budget.ts +0 -56
- package/src/execution/runtime-policy.ts +0 -19
- package/src/execution-plan.ts +0 -322
- package/src/execution-ui.ts +0 -259
- package/src/execution.ts +0 -1679
- package/src/in-process-transport.ts +0 -941
- package/src/inspect-registration.ts +0 -64
- package/src/inspect-render.ts +0 -334
- package/src/inspect-tool.ts +0 -45
- package/src/inspect.ts +0 -769
- package/src/integration-controller.ts +0 -98
- package/src/limits.ts +0 -75
- package/src/orchestration-metrics.ts +0 -116
- package/src/outcome.ts +0 -61
- package/src/panel-child-group.ts +0 -35
- package/src/panel-contract.ts +0 -343
- package/src/panel-evidence.ts +0 -59
- package/src/panel-execution.ts +0 -769
- package/src/panel-failure.ts +0 -56
- package/src/panel-planning.ts +0 -175
- package/src/panel-presets.ts +0 -3
- package/src/panel-prompts.ts +0 -132
- package/src/panel-reconciliation.ts +0 -57
- package/src/panel-render.ts +0 -103
- package/src/parallel-limit-ui.ts +0 -113
- package/src/params.ts +0 -278
- package/src/peer-communication.ts +0 -352
- package/src/peer-transport.ts +0 -49
- package/src/persistence.ts +0 -522
- package/src/pi-args.ts +0 -43
- package/src/pi-invocation.ts +0 -168
- package/src/process-control.ts +0 -43
- package/src/prompt-resources.ts +0 -38
- package/src/prompt-source-safety.ts +0 -48
- package/src/protocol.ts +0 -76
- package/src/registry-types.ts +0 -204
- package/src/registry.ts +0 -1698
- package/src/render-common.ts +0 -252
- package/src/render.ts +0 -704
- package/src/result-contract.ts +0 -431
- package/src/retained-semantic-state.ts +0 -100
- package/src/rpc-timeout-finalization.ts +0 -207
- package/src/rpc-transport-metadata.ts +0 -65
- package/src/rpc-transport.ts +0 -1035
- package/src/rpc-turn-capture.ts +0 -217
- package/src/runner-outcome.ts +0 -31
- package/src/runner-result.ts +0 -55
- package/src/runner-types.ts +0 -102
- package/src/runner-usage.ts +0 -48
- package/src/runner.ts +0 -866
- package/src/safe-text.ts +0 -67
- package/src/semantic-snapshot.ts +0 -214
- package/src/session-guidance-contract.ts +0 -399
- package/src/settings/inspection.ts +0 -302
- package/src/settings/schema.ts +0 -195
- package/src/settings-reader.ts +0 -215
- package/src/settings.ts +0 -452
- package/src/spawn-idempotency.ts +0 -68
- package/src/stateful-agent-view.ts +0 -85
- package/src/stateful-config.ts +0 -13
- package/src/stateful-guidance.ts +0 -29
- package/src/stateful-lifecycle.ts +0 -74
- package/src/stateful-limit-ui.ts +0 -249
- package/src/stateful-limits.ts +0 -96
- package/src/stateful-prompt.ts +0 -49
- package/src/stateful-registration.ts +0 -1320
- package/src/stateful-render.ts +0 -318
- package/src/stateful-safety.ts +0 -47
- package/src/stateful-tool-params.ts +0 -215
- package/src/stateful.ts +0 -12
- package/src/subagent-details.ts +0 -43
- package/src/subagents-extension.ts +0 -372
- package/src/subprocess-transport.ts +0 -145
- package/src/supervision.ts +0 -104
- package/src/task-path.ts +0 -65
- package/src/timeout-checkpoint.ts +0 -305
- package/src/timeout-finalization.ts +0 -75
- package/src/tool-schema-compatibility.ts +0 -73
- package/src/transport-types.ts +0 -74
- package/src/transport-ui.ts +0 -135
- package/src/transport.ts +0 -43
- package/src/turn-budget.ts +0 -109
- package/src/usage-format.ts +0 -42
- package/src/usage-recording-config.ts +0 -13
- package/src/usage-recording-store.ts +0 -183
- package/src/usage-recording.ts +0 -478
- package/src/verification-harness.ts +0 -516
- package/src/verification-policy.ts +0 -67
- package/src/verification-receipt.ts +0 -275
- package/src/verified-execution-benchmark.ts +0 -86
- package/src/verified-execution-contract.ts +0 -191
- package/src/verified-execution-schema.ts +0 -32
- package/src/work-item-ledger.ts +0 -1404
- package/src/work-item-persistence.ts +0 -254
- package/src/workflow-completion-controller.ts +0 -397
- package/src/workflow-planning.ts +0 -172
- package/src/workflow-tree-identity.ts +0 -289
- package/src/workflow-ui.ts +0 -69
- package/src/workflow-verification.ts +0 -296
- 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
|
-
}
|