@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
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/message-broker.ts", "../../src/broker-credentials.ts", "../../src/child-communication-tools.ts"],
|
|
4
|
+
"sourcesContent": ["import { randomBytes, randomUUID } from \"node:crypto\";\nimport net, { type AddressInfo, type Server, type Socket } from \"node:net\";\nimport type { BrokerCredentials } from \"./types.js\";\n\nexport const BROKER_HOST = \"127.0.0.1\" as const;\nexport const MAX_MESSAGE_BYTES = 48 * 1024;\nexport const MAX_MESSAGE_LINES = 1_992;\nexport const MAX_FRAME_BYTES = 384 * 1024;\nexport const MAX_ERROR_BYTES = 8 * 1024;\nexport const MAX_OUTSTANDING_REQUESTS = 4;\nexport const MAX_IDENTIFIER_LENGTH = 128;\n\nconst MAX_CONNECTIONS = 32;\nconst REQUEST_FRAME_TIMEOUT_MS = 2_000;\nconst MAX_TIMEOUT_MS = 2_147_483_647;\nconst MAX_RETAINED_CONSUMED_REQUESTS = 4;\nconst CHILD_WAIT_INTERRUPTED_ERROR =\n\t\"Subagent wait was interrupted by an incoming main-agent request. The original request remains active.\";\n\nexport type BrokerRequestOrigin = \"main\" | \"child\";\n\nexport interface BrokerInboundMessage {\n\tkind: \"request\" | \"response\";\n\trequestId: string;\n\tjobId: string;\n\tmessage: string;\n}\n\nexport interface BrokerSendAcknowledgement {\n\trequestId: string;\n\taccepted: boolean;\n\tduplicate: boolean;\n}\n\nexport interface MessageBrokerOptions {\n\tonMessage(message: BrokerInboundMessage): void;\n\tcreateServer?: (listener: (socket: Socket) => void) => Server;\n\tnow?: () => number;\n\trequestFrameTimeoutMs?: number;\n}\n\ninterface JobRecord {\n\tjobId: string;\n\tgeneration: number;\n\ttoken: string;\n}\n\ninterface RequestWaiter {\n\tsocket: Socket;\n\ttimer?: NodeJS.Timeout;\n}\n\ninterface RequestRecord {\n\trequestId: string;\n\tjobId: string;\n\tgeneration: number;\n\torigin: BrokerRequestOrigin;\n\texpectedResponder: BrokerRequestOrigin;\n\tmessage: string;\n\tcreatedAt: number;\n\tresponse?: string;\n\tconsumedAt?: number;\n\tdeliveryQueued?: boolean;\n\twaiter?: RequestWaiter;\n}\n\ntype BrokerRequest =\n\t| {\n\t\t\ttype: \"send\";\n\t\t\ttoken: string;\n\t\t\trecipient?: string;\n\t\t\trequestId?: string;\n\t\t\tmessage: string;\n\t }\n\t| { type: \"wait\"; token: string; requestId: string; timeoutMs?: number };\n\n/** Session-scoped authenticated loopback transport for bidirectional requests and responses. */\nexport class MessageBroker {\n\tprivate server?: Server;\n\tprivate starting?: Promise<void>;\n\tprivate address?: { host: typeof BROKER_HOST; port: number };\n\tprivate failure?: string;\n\tprivate generation = 0;\n\tprivate readonly sockets = new Set<Socket>();\n\tprivate readonly jobsByToken = new Map<string, JobRecord>();\n\tprivate readonly tokenByJob = new Map<string, string>();\n\tprivate readonly requests = new Map<string, RequestRecord>();\n\tprivate readonly inboundMessageListeners = new Set<() => void>();\n\tprivate pendingInboundResponse = false;\n\tprivate readonly createServer: (listener: (socket: Socket) => void) => Server;\n\tprivate readonly now: () => number;\n\tprivate readonly requestFrameTimeoutMs: number;\n\n\tconstructor(private readonly options: MessageBrokerOptions) {\n\t\tthis.createServer = options.createServer ?? ((listener) => net.createServer(listener));\n\t\tthis.now = options.now ?? Date.now;\n\t\tthis.requestFrameTimeoutMs = options.requestFrameTimeoutMs ?? REQUEST_FRAME_TIMEOUT_MS;\n\t\tif (!Number.isFinite(this.requestFrameTimeoutMs) || this.requestFrameTimeoutMs <= 0) {\n\t\t\tthrow new Error(\"Subagent broker frame timeout must be positive.\");\n\t\t}\n\t}\n\n\tasync start(): Promise<void> {\n\t\tif (this.server && this.address && !this.failure) return;\n\t\tif (this.starting) return this.starting;\n\t\tconst ownerGeneration = ++this.generation;\n\t\tthis.failure = undefined;\n\t\tthis.starting = new Promise<void>((resolve, reject) => {\n\t\t\tconst server = this.createServer((socket) => this.accept(socket));\n\t\t\tserver.maxConnections = MAX_CONNECTIONS;\n\t\t\tconst onStartError = (error: Error) => {\n\t\t\t\tserver.close(() => undefined);\n\t\t\t\treject(error);\n\t\t\t};\n\t\t\tserver.once(\"error\", onStartError);\n\t\t\tserver.listen({ host: BROKER_HOST, port: 0 }, () => {\n\t\t\t\tserver.off(\"error\", onStartError);\n\t\t\t\tif (ownerGeneration !== this.generation) {\n\t\t\t\t\tserver.close(() => undefined);\n\t\t\t\t\treject(new Error(\"Subagent message broker start was superseded.\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst address = server.address();\n\t\t\t\tif (!isLoopbackAddress(address)) {\n\t\t\t\t\tserver.close(() => undefined);\n\t\t\t\t\treject(new Error(\"Subagent message broker did not bind to loopback.\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.server = server;\n\t\t\t\tthis.address = { host: BROKER_HOST, port: address.port };\n\t\t\t\tserver.on(\"error\", (error) => this.fail(error));\n\t\t\t\tserver.unref();\n\t\t\t\tresolve();\n\t\t\t});\n\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconst message = truncateError(error instanceof Error ? error.message : String(error));\n\t\t\t\tthis.failure = message;\n\t\t\t\tthrow new Error(`Subagent message broker failed to start: ${message}`);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.starting = undefined;\n\t\t\t});\n\t\treturn this.starting;\n\t}\n\n\tassertReady(): void {\n\t\tif (this.server && this.address && !this.failure) return;\n\t\tthrow new Error(\n\t\t\tthis.failure\n\t\t\t\t? `Subagent messaging is unavailable: ${this.failure}`\n\t\t\t\t: \"Subagent messaging is unavailable because the session broker is not ready.\",\n\t\t);\n\t}\n\n\tissueCredentials(input: { jobId: string; generation: number }): BrokerCredentials {\n\t\tthis.assertReady();\n\t\tif (this.tokenByJob.has(input.jobId)) {\n\t\t\tthrow new Error(`Subagent messaging credentials already exist for ${input.jobId}.`);\n\t\t}\n\t\tconst token = randomBytes(32).toString(\"hex\");\n\t\tconst record: JobRecord = { ...input, token };\n\t\tthis.jobsByToken.set(token, record);\n\t\tthis.tokenByJob.set(input.jobId, token);\n\t\treturn { host: BROKER_HOST, port: this.address?.port ?? 0, token };\n\t}\n\n\tcreateMainRequest(jobId: string, message: string): BrokerSendAcknowledgement {\n\t\tthis.assertReady();\n\t\tconst job = this.requireJob(jobId);\n\t\treturn this.createRequest(job, \"main\", message);\n\t}\n\n\treplyFromMain(requestId: string, message: string): BrokerSendAcknowledgement {\n\t\tthis.assertReady();\n\t\treturn this.acceptResponse(\"main\", undefined, requestId, message);\n\t}\n\n\trollbackMainRequest(requestId: string): void {\n\t\tconst request = this.requests.get(requestId);\n\t\tif (request?.origin === \"main\" && request.response === undefined) {\n\t\t\tthis.clearWaiter(request);\n\t\t\tthis.requests.delete(requestId);\n\t\t}\n\t}\n\n\trevokeJob(jobId: string, reason = \"Subagent job is no longer active.\"): void {\n\t\tconst token = this.tokenByJob.get(jobId);\n\t\tif (token) {\n\t\t\tthis.tokenByJob.delete(jobId);\n\t\t\tthis.jobsByToken.delete(token);\n\t\t}\n\t\tfor (const request of [...this.requests.values()]) {\n\t\t\tif (request.jobId !== jobId) continue;\n\t\t\tif (request.waiter) this.respondError(request.waiter.socket, reason);\n\t\t\tthis.clearWaiter(request);\n\t\t\tthis.requests.delete(request.requestId);\n\t\t}\n\t}\n\n\thasPendingMainRequest(): boolean {\n\t\treturn [...this.requests.values()].some(\n\t\t\t(request) => request.origin === \"child\" && request.response === undefined,\n\t\t);\n\t}\n\n\ttakePendingInboundResponse(): boolean {\n\t\tconst pending = this.pendingInboundResponse;\n\t\tthis.pendingInboundResponse = false;\n\t\treturn pending;\n\t}\n\n\tmarkMainRequestQueued(requestId: string): boolean {\n\t\tconst request = this.requests.get(requestId);\n\t\tif (request?.origin !== \"main\") {\n\t\t\tthrow new Error(\"Unknown or expired main-agent subagent request.\");\n\t\t}\n\t\trequest.deliveryQueued = true;\n\t\treturn request.response === undefined;\n\t}\n\n\tinterruptChildWaits(jobId: string): number {\n\t\tlet interrupted = 0;\n\t\tfor (const request of this.requests.values()) {\n\t\t\tif (request.jobId !== jobId || request.origin !== \"child\" || !request.waiter) continue;\n\t\t\tconst socket = request.waiter.socket;\n\t\t\tthis.clearWaiter(request);\n\t\t\tthis.respondError(socket, CHILD_WAIT_INTERRUPTED_ERROR);\n\t\t\tinterrupted++;\n\t\t}\n\t\treturn interrupted;\n\t}\n\n\tsubscribeInboundMessage(listener: () => void): () => void {\n\t\tthis.inboundMessageListeners.add(listener);\n\t\tif (this.hasPendingMainRequest()) listener();\n\t\treturn () => this.inboundMessageListeners.delete(listener);\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\t++this.generation;\n\t\tconst starting = this.starting;\n\t\tif (starting) await starting.catch(() => undefined);\n\t\tfor (const jobId of [...this.tokenByJob.keys()]) {\n\t\t\tthis.revokeJob(jobId, \"Subagent session shut down.\");\n\t\t}\n\t\tthis.requests.clear();\n\t\tthis.inboundMessageListeners.clear();\n\t\tthis.pendingInboundResponse = false;\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\tthis.address = undefined;\n\t\tthis.failure = undefined;\n\t\tif (!server?.listening) return;\n\t\tawait new Promise<void>((resolve) => server.close(() => resolve()));\n\t}\n\n\tprivate requireJob(jobId: string): JobRecord {\n\t\tconst token = this.tokenByJob.get(jobId);\n\t\tconst job = token ? this.jobsByToken.get(token) : undefined;\n\t\tif (!job) throw new Error(\"Unknown or inactive subagent job.\");\n\t\treturn job;\n\t}\n\n\tprivate hasQueuedRequestForChild(jobId: string): boolean {\n\t\treturn [...this.requests.values()].some(\n\t\t\t(request) =>\n\t\t\t\trequest.jobId === jobId &&\n\t\t\t\trequest.origin === \"main\" &&\n\t\t\t\trequest.deliveryQueued === true &&\n\t\t\t\trequest.response === undefined,\n\t\t);\n\t}\n\n\tprivate createRequest(\n\t\tjob: JobRecord,\n\t\torigin: BrokerRequestOrigin,\n\t\tmessage: string,\n\t): BrokerSendAcknowledgement {\n\t\tvalidateMessage(message, \"Subagent request\");\n\t\tconst outstanding = [...this.requests.values()].filter(\n\t\t\t(request) => request.jobId === job.jobId && request.consumedAt === undefined,\n\t\t).length;\n\t\tif (outstanding >= MAX_OUTSTANDING_REQUESTS) {\n\t\t\tthrow new Error(\n\t\t\t\t`Subagent job may have at most ${MAX_OUTSTANDING_REQUESTS} outstanding requests.`,\n\t\t\t);\n\t\t}\n\t\tconst request: RequestRecord = {\n\t\t\trequestId: `req_${randomUUID()}`,\n\t\t\tjobId: job.jobId,\n\t\t\tgeneration: job.generation,\n\t\t\torigin,\n\t\t\texpectedResponder: origin === \"main\" ? \"child\" : \"main\",\n\t\t\tmessage,\n\t\t\tcreatedAt: this.now(),\n\t\t};\n\t\tthis.requests.set(request.requestId, request);\n\t\tif (origin === \"child\") {\n\t\t\ttry {\n\t\t\t\tthis.deliverInbound({\n\t\t\t\t\tkind: \"request\",\n\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\tjobId: request.jobId,\n\t\t\t\t\tmessage: request.message,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthis.requests.delete(request.requestId);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\treturn { requestId: request.requestId, accepted: true, duplicate: false };\n\t}\n\n\tprivate acceptResponse(\n\t\tresponder: BrokerRequestOrigin,\n\t\tjob: JobRecord | undefined,\n\t\trequestId: string,\n\t\tmessage: string,\n\t): BrokerSendAcknowledgement {\n\t\tvalidateRequestId(requestId);\n\t\tvalidateMessage(message, \"Subagent response\");\n\t\tconst request = this.requests.get(requestId);\n\t\tif (\n\t\t\t!request ||\n\t\t\trequest.expectedResponder !== responder ||\n\t\t\t(job && (request.jobId !== job.jobId || request.generation !== job.generation))\n\t\t) {\n\t\t\tthrow new Error(\"Unknown, expired, or unauthorized subagent request.\");\n\t\t}\n\t\tif (request.response !== undefined) {\n\t\t\treturn { requestId, accepted: false, duplicate: true };\n\t\t}\n\t\trequest.response = message;\n\t\tif (responder === \"child\") {\n\t\t\ttry {\n\t\t\t\tthis.deliverInbound({\n\t\t\t\t\tkind: \"response\",\n\t\t\t\t\trequestId,\n\t\t\t\t\tjobId: request.jobId,\n\t\t\t\t\tmessage,\n\t\t\t\t});\n\t\t\t\tthis.markConsumed(request);\n\t\t\t} catch (error) {\n\t\t\t\trequest.response = undefined;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} else if (request.waiter) {\n\t\t\tconst socket = request.waiter.socket;\n\t\t\tthis.clearWaiter(request);\n\t\t\tthis.respond(socket, { ok: true, response: message }, () => this.markConsumed(request));\n\t\t}\n\t\treturn { requestId, accepted: true, duplicate: false };\n\t}\n\n\tprivate deliverInbound(message: BrokerInboundMessage): void {\n\t\tthis.options.onMessage(message);\n\t\tif (message.kind === \"response\" && this.inboundMessageListeners.size === 0) {\n\t\t\tthis.pendingInboundResponse = true;\n\t\t}\n\t\tfor (const listener of [...this.inboundMessageListeners]) {\n\t\t\ttry {\n\t\t\t\tlistener();\n\t\t\t} catch {\n\t\t\t\t// Runtime wait observers cannot interrupt broker delivery.\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate accept(socket: Socket): void {\n\t\tif (!this.server || this.failure || this.sockets.size >= MAX_CONNECTIONS) {\n\t\t\tsocket.destroy();\n\t\t\treturn;\n\t\t}\n\t\tthis.sockets.add(socket);\n\t\tsocket.setNoDelay(true);\n\t\tlet frame = Buffer.alloc(0);\n\t\tlet handled = false;\n\t\tconst frameTimer = setTimeout(() => {\n\t\t\tif (handled) return;\n\t\t\thandled = true;\n\t\t\tthis.respondError(socket, \"Subagent broker request frame timed out.\");\n\t\t}, this.requestFrameTimeoutMs);\n\t\tframeTimer.unref();\n\t\tconst cleanup = () => {\n\t\t\tclearTimeout(frameTimer);\n\t\t\tthis.sockets.delete(socket);\n\t\t\tfor (const request of this.requests.values()) {\n\t\t\t\tif (request.waiter?.socket === socket) this.clearWaiter(request);\n\t\t\t}\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_FRAME_BYTES) {\n\t\t\t\thandled = true;\n\t\t\t\tclearTimeout(frameTimer);\n\t\t\t\tthis.respondError(socket, \"Subagent broker request exceeded its 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(frameTimer);\n\t\t\tsocket.removeAllListeners(\"data\");\n\t\t\tconst trailing = frame\n\t\t\t\t.subarray(newline + 1)\n\t\t\t\t.toString(\"utf8\")\n\t\t\t\t.trim();\n\t\t\tif (trailing) {\n\t\t\t\tthis.respondError(socket, \"Subagent broker accepts one request per connection.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.handleFrame(socket, frame.subarray(0, newline).toString(\"utf8\"));\n\t\t});\n\t\tsocket.once(\"close\", cleanup);\n\t\tsocket.once(\"error\", cleanup);\n\t}\n\n\tprivate handleFrame(socket: Socket, frame: string): void {\n\t\tlet request: BrokerRequest;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(frame) as unknown;\n\t\t\tif (!isRecord(parsed)) throw new Error();\n\t\t\trequest = parsed as BrokerRequest;\n\t\t} catch {\n\t\t\tthis.respondError(socket, \"Malformed subagent broker request.\");\n\t\t\treturn;\n\t\t}\n\t\tconst job = typeof request.token === \"string\" ? this.jobsByToken.get(request.token) : undefined;\n\t\tif (!job) {\n\t\t\tthis.respondError(socket, \"Unauthenticated subagent broker request.\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tif (request.type === \"send\") {\n\t\t\t\tthis.handleSend(socket, job, request);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (request.type === \"wait\") {\n\t\t\t\tthis.handleWait(socket, job, request);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow new Error(\"Unsupported subagent broker request.\");\n\t\t} catch (error) {\n\t\t\tthis.respondError(socket, error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate handleSend(\n\t\tsocket: Socket,\n\t\tjob: JobRecord,\n\t\trequest: Extract<BrokerRequest, { type: \"send\" }>,\n\t): void {\n\t\tif (typeof request.message !== \"string\") {\n\t\t\tthrow new Error(\"subagent_send requires a message string.\");\n\t\t}\n\t\tconst hasRecipient = typeof request.recipient === \"string\";\n\t\tconst hasRequestId = typeof request.requestId === \"string\";\n\t\tif (hasRecipient === hasRequestId) {\n\t\t\tthrow new Error(\"subagent_send requires exactly one of recipient or requestId.\");\n\t\t}\n\t\tconst acknowledgement = hasRecipient\n\t\t\t? request.recipient === \"main\"\n\t\t\t\t? this.createRequest(job, \"child\", request.message)\n\t\t\t\t: (() => {\n\t\t\t\t\t\tthrow new Error('A subagent may send new requests only to recipient \"main\".');\n\t\t\t\t\t})()\n\t\t\t: this.acceptResponse(\"child\", job, request.requestId ?? \"\", request.message);\n\t\tthis.respond(socket, { ok: true, ...acknowledgement });\n\t}\n\n\tprivate handleWait(\n\t\tsocket: Socket,\n\t\tjob: JobRecord,\n\t\trequest: Extract<BrokerRequest, { type: \"wait\" }>,\n\t): void {\n\t\tif (typeof request.requestId !== \"string\") {\n\t\t\tthrow new Error(\"Subagent wait requires a request ID.\");\n\t\t}\n\t\tvalidateRequestId(request.requestId);\n\t\tif (request.timeoutMs !== undefined) validateTimeout(request.timeoutMs);\n\t\tconst record = this.requests.get(request.requestId);\n\t\tif (\n\t\t\trecord?.origin !== \"child\" ||\n\t\t\trecord.jobId !== job.jobId ||\n\t\t\trecord.generation !== job.generation\n\t\t) {\n\t\t\tthrow new Error(\"Unknown or expired subagent request.\");\n\t\t}\n\t\tif (record.consumedAt !== undefined && record.response !== undefined) {\n\t\t\tthis.respond(socket, { ok: true, response: record.response });\n\t\t\treturn;\n\t\t}\n\t\tif (record.response !== undefined) {\n\t\t\tthis.respond(socket, { ok: true, response: record.response }, () =>\n\t\t\t\tthis.markConsumed(record),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (this.hasQueuedRequestForChild(job.jobId)) {\n\t\t\tthis.respondError(socket, CHILD_WAIT_INTERRUPTED_ERROR);\n\t\t\treturn;\n\t\t}\n\t\tif (record.waiter) {\n\t\t\tthrow new Error(`A wait is already active for subagent request ${request.requestId}.`);\n\t\t}\n\t\tconst waiter: RequestWaiter = { socket };\n\t\trecord.waiter = waiter;\n\t\tif (request.timeoutMs !== undefined) {\n\t\t\twaiter.timer = setTimeout(() => {\n\t\t\t\tif (record.waiter !== waiter) return;\n\t\t\t\tthis.clearWaiter(record);\n\t\t\t\tthis.respondError(socket, \"Subagent response wait timed out.\");\n\t\t\t}, request.timeoutMs);\n\t\t\twaiter.timer.unref();\n\t\t}\n\t}\n\n\tprivate markConsumed(request: RequestRecord): void {\n\t\tif (this.requests.get(request.requestId) !== request || request.response === undefined) return;\n\t\trequest.consumedAt ??= this.now();\n\t\tconst consumed = [...this.requests.values()]\n\t\t\t.filter(\n\t\t\t\t(candidate) => candidate.jobId === request.jobId && candidate.consumedAt !== undefined,\n\t\t\t)\n\t\t\t.sort((left, right) => (left.consumedAt ?? 0) - (right.consumedAt ?? 0));\n\t\tfor (const expired of consumed.slice(\n\t\t\t0,\n\t\t\tMath.max(0, consumed.length - MAX_RETAINED_CONSUMED_REQUESTS),\n\t\t)) {\n\t\t\tthis.requests.delete(expired.requestId);\n\t\t}\n\t}\n\n\tprivate clearWaiter(request: RequestRecord): void {\n\t\tif (request.waiter?.timer) clearTimeout(request.waiter.timer);\n\t\trequest.waiter = undefined;\n\t}\n\n\tprivate respondError(socket: Socket, error: string): void {\n\t\tthis.respond(socket, { ok: false, error: truncateError(error) });\n\t}\n\n\tprivate respond(socket: Socket, value: Record<string, unknown>, onFlushed?: () => void): void {\n\t\tif (socket.destroyed) return;\n\t\tlet content = `${JSON.stringify(value)}\\n`;\n\t\tif (Buffer.byteLength(content, \"utf8\") > MAX_FRAME_BYTES) {\n\t\t\tcontent = `${JSON.stringify({ ok: false, error: \"Subagent broker response exceeded its size limit.\" })}\\n`;\n\t\t}\n\t\tsocket.end(content, onFlushed);\n\t}\n\n\tprivate fail(error: Error): void {\n\t\tthis.failure = truncateError(error.message);\n\t\tfor (const jobId of [...this.tokenByJob.keys()]) {\n\t\t\tthis.revokeJob(jobId, \"Subagent message broker failed.\");\n\t\t}\n\t\tfor (const socket of this.sockets) socket.destroy();\n\t\tthis.sockets.clear();\n\t\tthis.address = undefined;\n\t}\n}\n\nexport function validateMessage(message: string, label: string): void {\n\tif (!message.trim()) throw new Error(`${label} is required.`);\n\tif (message.includes(\"\\0\")) throw new Error(`${label} must not contain NUL bytes.`);\n\tif (Buffer.byteLength(message, \"utf8\") > MAX_MESSAGE_BYTES) {\n\t\tthrow new Error(`${label} must be at most ${MAX_MESSAGE_BYTES} UTF-8 bytes.`);\n\t}\n\tif (lineCount(message) > MAX_MESSAGE_LINES) {\n\t\tthrow new Error(`${label} must contain at most ${MAX_MESSAGE_LINES} lines.`);\n\t}\n}\n\nexport function sanitizeTerminalText(value: string): string {\n\treturn [...value]\n\t\t.filter((character) => {\n\t\t\tconst codePoint = character.codePointAt(0) ?? 0;\n\t\t\tif (character === \"\\n\" || character === \"\\t\") return true;\n\t\t\tif (codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f)) return false;\n\t\t\treturn !(\n\t\t\t\t(codePoint >= 0x202a && codePoint <= 0x202e) ||\n\t\t\t\t(codePoint >= 0x2066 && codePoint <= 0x2069)\n\t\t\t);\n\t\t})\n\t\t.join(\"\");\n}\n\nfunction validateRequestId(requestId: string): void {\n\tif (\n\t\trequestId.length > MAX_IDENTIFIER_LENGTH ||\n\t\t!/^req_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u.test(requestId)\n\t) {\n\t\tthrow new Error(\"Invalid subagent request ID.\");\n\t}\n}\n\nfunction validateTimeout(timeoutMs: number): void {\n\tif (!Number.isFinite(timeoutMs) || timeoutMs <= 0 || timeoutMs > MAX_TIMEOUT_MS) {\n\t\tthrow new Error(\"Subagent wait timeout is outside the supported range.\");\n\t}\n}\n\nfunction lineCount(value: string): number {\n\tlet count = 1;\n\tfor (const character of value) if (character === \"\\n\") count++;\n\treturn count;\n}\n\nfunction truncateError(error: string): string {\n\tconst bytes = Buffer.from(error, \"utf8\");\n\tif (bytes.length <= MAX_ERROR_BYTES) return error;\n\treturn `${bytes\n\t\t.subarray(0, Math.max(0, MAX_ERROR_BYTES - 18))\n\t\t.toString(\"utf8\")\n\t\t.replace(/\uFFFD+$/gu, \"\")}\\n\u2026 [truncated]`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isLoopbackAddress(address: AddressInfo | string | null): address is AddressInfo {\n\treturn Boolean(address && typeof address !== \"string\" && address.address === BROKER_HOST);\n}\n", "import * as fs from \"node:fs\";\nimport type { BrokerCredentials } from \"./types.js\";\n\nexport const BROKER_CREDENTIAL_FD = 3;\nexport const BROKER_CREDENTIAL_FD_ENV = \"PI_SUBAGENT_BROKER_FD\";\n\nconst MAX_CREDENTIAL_BYTES = 1_024;\n\nexport function brokerCredentialEnvironment(): NodeJS.ProcessEnv {\n\treturn { [BROKER_CREDENTIAL_FD_ENV]: String(BROKER_CREDENTIAL_FD) };\n}\n\nexport function serializeBrokerCredentials(credentials: BrokerCredentials): string {\n\treturn JSON.stringify(credentials);\n}\n\nexport function captureBrokerCredentials(\n\treadCredentials: () => string = readCredentialPipe,\n): BrokerCredentials | undefined {\n\tconst descriptor = process.env[BROKER_CREDENTIAL_FD_ENV];\n\tdelete process.env[BROKER_CREDENTIAL_FD_ENV];\n\tif (descriptor === undefined) return undefined;\n\tif (descriptor !== String(BROKER_CREDENTIAL_FD)) {\n\t\tthrow new Error(\"Invalid pi-subagents broker credential descriptor.\");\n\t}\n\tlet serialized: string;\n\ttry {\n\t\tserialized = readCredentials();\n\t} catch {\n\t\tthrow new Error(\"Unable to read pi-subagents broker credentials.\");\n\t}\n\tif (Buffer.byteLength(serialized, \"utf8\") > MAX_CREDENTIAL_BYTES) {\n\t\tthrow new Error(\"Invalid pi-subagents broker credentials.\");\n\t}\n\tlet value: unknown;\n\ttry {\n\t\tvalue = JSON.parse(serialized);\n\t} catch {\n\t\tthrow new Error(\"Invalid pi-subagents broker credentials.\");\n\t}\n\tif (!isBrokerCredentials(value)) {\n\t\tthrow new Error(\"Invalid pi-subagents broker credentials.\");\n\t}\n\treturn value;\n}\n\nfunction readCredentialPipe(): string {\n\ttry {\n\t\treturn fs.readFileSync(BROKER_CREDENTIAL_FD, \"utf8\");\n\t} finally {\n\t\ttry {\n\t\t\tfs.closeSync(BROKER_CREDENTIAL_FD);\n\t\t} catch {\n\t\t\t// The descriptor may already be closed after a failed read.\n\t\t}\n\t}\n}\n\nfunction isBrokerCredentials(value: unknown): value is BrokerCredentials {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst candidate = value as Record<string, unknown>;\n\treturn (\n\t\tObject.keys(candidate).length === 3 &&\n\t\tcandidate.host === \"127.0.0.1\" &&\n\t\tNumber.isSafeInteger(candidate.port) &&\n\t\t(candidate.port as number) >= 1 &&\n\t\t(candidate.port as number) <= 65_535 &&\n\t\ttypeof candidate.token === \"string\" &&\n\t\t/^[a-f0-9]{64}$/u.test(candidate.token)\n\t);\n}\n", "import type { ExtensionFactory } from \"@earendil-works/pi-coding-agent\";\nimport { type Static, Type } from \"typebox\";\nimport {\n\ttype BrokerSendAcknowledgement,\n\tMAX_IDENTIFIER_LENGTH,\n\tMAX_MESSAGE_BYTES,\n\tsanitizeTerminalText,\n\tvalidateMessage,\n} from \"./message-broker.js\";\n\nexport const CHILD_COMMUNICATION_TOOL_NAMES = [\"subagent_send\", \"subagent_wait\"] as const;\n\nconst MAX_TIMEOUT_MS = 2_147_483_647;\nconst MAX_TIMEOUT_SECONDS = MAX_TIMEOUT_MS / 1000;\n\nconst SendParameters = Type.Object(\n\t{\n\t\trequestId: Type.Optional(\n\t\t\tType.String({\n\t\t\t\tdescription: \"Pending main-agent request to answer. Omit when starting a new request.\",\n\t\t\t\tminLength: 1,\n\t\t\t\tmaxLength: MAX_IDENTIFIER_LENGTH,\n\t\t\t}),\n\t\t),\n\t\tmessage: Type.String({\n\t\t\tdescription: \"Plain-text request or response. Maximum 48 KiB of UTF-8 text and 1,992 lines.\",\n\t\t\tminLength: 1,\n\t\t\tmaxLength: MAX_MESSAGE_BYTES,\n\t\t}),\n\t},\n\t{ additionalProperties: false },\n);\n\nconst WaitParameters = Type.Object(\n\t{\n\t\trequestId: Type.String({\n\t\t\tdescription: \"Request ID returned by subagent_send.\",\n\t\t\tminLength: 1,\n\t\t\tmaxLength: MAX_IDENTIFIER_LENGTH,\n\t\t}),\n\t\ttimeout: Type.Optional(\n\t\t\tType.Number({ description: \"Timeout in seconds (optional, no default timeout)\" }),\n\t\t),\n\t},\n\t{ additionalProperties: false },\n);\n\ntype ChildBrokerSendArguments =\n\t| { recipient: \"main\"; message: string }\n\t| { requestId: string; message: string };\n\ntype WaitArguments = Static<typeof WaitParameters>;\n\nexport interface ChildCommunicationClient {\n\tsend(params: ChildBrokerSendArguments, signal?: AbortSignal): Promise<BrokerSendAcknowledgement>;\n\twait(requestId: string, timeoutMs: number | undefined, signal?: AbortSignal): Promise<string>;\n}\n\nexport function createChildCommunicationExtension(\n\tclient: ChildCommunicationClient,\n): ExtensionFactory {\n\treturn (pi) => {\n\t\tpi.registerTool({\n\t\t\tname: \"subagent_send\",\n\t\t\tlabel: \"Subagent \u00B7 Send to Main\",\n\t\t\tdescription:\n\t\t\t\t\"Use subagent_send to send one request to the main agent or answer one pending main-agent request. Omit requestId to start a request. Provide requestId to answer that request.\",\n\t\t\tpromptSnippet: \"Use subagent_send to send or answer one main-agent message\",\n\t\t\tparameters: SendParameters,\n\t\t\tasync execute(_toolCallId, params, signal) {\n\t\t\t\tvalidateMessage(params.message, \"Subagent message\");\n\t\t\t\tconst requestId = optionalIdentifier(params.requestId, \"requestId\");\n\t\t\t\tconst acknowledgement = await client.send(\n\t\t\t\t\trequestId === undefined\n\t\t\t\t\t\t? { recipient: \"main\", message: params.message }\n\t\t\t\t\t\t: { requestId, message: params.message },\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\" as const, text: JSON.stringify(acknowledgement) }],\n\t\t\t\t\tdetails: acknowledgement,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\n\t\tpi.registerTool({\n\t\t\tname: \"subagent_wait\",\n\t\t\tlabel: \"Subagent \u00B7 Wait for Main Agent\",\n\t\t\tdescription:\n\t\t\t\t\"Use subagent_wait with a request ID from subagent_send to wait for the main agent's plain-text response. A timeout, caller cancellation, or incoming main-agent request stops only this wait and does not cancel the original request. Retry the wait when its response is still needed.\",\n\t\t\tpromptSnippet: \"Use subagent_wait to receive a requested main-agent response\",\n\t\t\tparameters: WaitParameters,\n\t\t\tprepareArguments: prepareWaitArguments,\n\t\t\tasync execute(_toolCallId, params, signal) {\n\t\t\t\tconst requestId = requiredIdentifier(params.requestId, \"requestId\");\n\t\t\t\tconst response = await client.wait(requestId, resolveTimeoutMs(params.timeout), signal);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\" as const, text: sanitizeTerminalText(response) }],\n\t\t\t\t\tdetails: { requestId },\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t};\n}\n\nfunction resolveTimeoutMs(timeout: number | undefined): number | undefined {\n\tif (timeout === undefined) return undefined;\n\tif (!Number.isFinite(timeout) || timeout <= 0) {\n\t\tthrow new Error(\"Invalid timeout: must be a finite number of seconds\");\n\t}\n\tconst timeoutMs = timeout * 1000;\n\tif (timeoutMs > MAX_TIMEOUT_MS) {\n\t\tthrow new Error(`Invalid timeout: maximum is ${MAX_TIMEOUT_SECONDS} seconds`);\n\t}\n\treturn timeoutMs;\n}\n\nfunction prepareWaitArguments(args: unknown): WaitArguments {\n\tif (!args || typeof args !== \"object\") return args as WaitArguments;\n\tif (!Object.hasOwn(args, \"timeoutMs\")) return args as WaitArguments;\n\tconst record = args as Record<string, unknown>;\n\tif (typeof record.timeoutMs !== \"number\") return record as WaitArguments;\n\tconst { timeoutMs, ...prepared } = record;\n\tif (prepared.timeout === undefined) {\n\t\treturn { ...prepared, timeout: timeoutMs / 1000 } as WaitArguments;\n\t}\n\treturn prepared as WaitArguments;\n}\n\nfunction optionalIdentifier(value: unknown, field: string): string | undefined {\n\treturn value === undefined ? undefined : requiredIdentifier(value, field);\n}\n\nfunction requiredIdentifier(value: unknown, field: string): string {\n\tif (typeof value !== \"string\" || !value.trim()) throw new Error(`Subagent ${field} is required.`);\n\tconst identifier = value.trim();\n\tif (\n\t\tidentifier.length > MAX_IDENTIFIER_LENGTH ||\n\t\t[...identifier].some((character) => {\n\t\t\tconst codePoint = character.codePointAt(0) ?? 0;\n\t\t\treturn codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f);\n\t\t})\n\t) {\n\t\tthrow new Error(`Subagent ${field} is invalid.`);\n\t}\n\treturn identifier;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["request", "MAX_TIMEOUT_MS"]
|
|
7
|
+
}
|