@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,136 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated entries use .ts extensions for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
MAX_FRAME_BYTES,
|
|
5
|
+
MAX_IDENTIFIER_LENGTH,
|
|
6
|
+
captureBrokerCredentials,
|
|
7
|
+
createChildCommunicationExtension
|
|
8
|
+
} from "./chunks/chunk-UKTWUQRM.js";
|
|
9
|
+
|
|
10
|
+
// src/child-communication-bridge.ts
|
|
11
|
+
import net from "node:net";
|
|
12
|
+
var CONNECT_TIMEOUT_MS = 2e3;
|
|
13
|
+
var SEND_RESPONSE_TIMEOUT_MS = 5e3;
|
|
14
|
+
var captured = captureBrokerCredentials();
|
|
15
|
+
var childCommunicationBridge = captured ? createChildCommunicationExtension(createBrokerClient(captured)) : () => void 0;
|
|
16
|
+
var child_communication_bridge_default = childCommunicationBridge;
|
|
17
|
+
function createBrokerClient(credentials) {
|
|
18
|
+
return {
|
|
19
|
+
async send(params, signal) {
|
|
20
|
+
const response = await requestBroker(
|
|
21
|
+
credentials,
|
|
22
|
+
{ type: "send", token: credentials.token, ...params },
|
|
23
|
+
signal,
|
|
24
|
+
SEND_RESPONSE_TIMEOUT_MS
|
|
25
|
+
);
|
|
26
|
+
if (response.ok !== true) throw brokerError(response);
|
|
27
|
+
if (typeof response.requestId !== "string" || !response.requestId || response.requestId.length > MAX_IDENTIFIER_LENGTH || typeof response.accepted !== "boolean" || typeof response.duplicate !== "boolean") {
|
|
28
|
+
throw new Error("Subagent broker returned an invalid send acknowledgement.");
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
requestId: response.requestId,
|
|
32
|
+
accepted: response.accepted,
|
|
33
|
+
duplicate: response.duplicate
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
async wait(requestId, timeoutMs, signal) {
|
|
37
|
+
const response = await requestBroker(
|
|
38
|
+
credentials,
|
|
39
|
+
{
|
|
40
|
+
type: "wait",
|
|
41
|
+
token: credentials.token,
|
|
42
|
+
requestId,
|
|
43
|
+
...timeoutMs !== void 0 ? { timeoutMs } : {}
|
|
44
|
+
},
|
|
45
|
+
signal
|
|
46
|
+
);
|
|
47
|
+
if (response.ok !== true) throw brokerError(response);
|
|
48
|
+
if (typeof response.response !== "string") {
|
|
49
|
+
throw new Error("Subagent broker returned an invalid plain-text response.");
|
|
50
|
+
}
|
|
51
|
+
return response.response;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function requestBroker(credentials, request, signal, responseTimeoutMs) {
|
|
56
|
+
if (signal?.aborted) return Promise.reject(abortError("Subagent broker request was cancelled."));
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
const socket = net.createConnection({ host: credentials.host, port: credentials.port });
|
|
59
|
+
let response = Buffer.alloc(0);
|
|
60
|
+
let settled = false;
|
|
61
|
+
let responseTimer;
|
|
62
|
+
const connectTimer = setTimeout(
|
|
63
|
+
() => finish(new Error("Subagent broker connection timed out.")),
|
|
64
|
+
CONNECT_TIMEOUT_MS
|
|
65
|
+
);
|
|
66
|
+
connectTimer.unref();
|
|
67
|
+
const onAbort = () => finish(abortError("Subagent broker request was cancelled."));
|
|
68
|
+
const finish = (error, value) => {
|
|
69
|
+
if (settled) return;
|
|
70
|
+
settled = true;
|
|
71
|
+
clearTimeout(connectTimer);
|
|
72
|
+
if (responseTimer) clearTimeout(responseTimer);
|
|
73
|
+
signal?.removeEventListener("abort", onAbort);
|
|
74
|
+
socket.destroy();
|
|
75
|
+
if (error) reject(error);
|
|
76
|
+
else resolve(value ?? {});
|
|
77
|
+
};
|
|
78
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
79
|
+
socket.once("connect", () => {
|
|
80
|
+
clearTimeout(connectTimer);
|
|
81
|
+
if (responseTimeoutMs !== void 0) {
|
|
82
|
+
responseTimer = setTimeout(
|
|
83
|
+
() => finish(new Error("Subagent broker response timed out.")),
|
|
84
|
+
responseTimeoutMs
|
|
85
|
+
);
|
|
86
|
+
responseTimer.unref();
|
|
87
|
+
}
|
|
88
|
+
socket.write(`${JSON.stringify(request)}
|
|
89
|
+
`);
|
|
90
|
+
});
|
|
91
|
+
socket.on("data", (chunk) => {
|
|
92
|
+
if (settled) return;
|
|
93
|
+
response = Buffer.concat([response, chunk]);
|
|
94
|
+
if (response.byteLength > MAX_FRAME_BYTES) {
|
|
95
|
+
finish(new Error("Subagent broker response exceeded its size limit."));
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const newline = response.indexOf(10);
|
|
99
|
+
if (newline < 0) return;
|
|
100
|
+
const trailing = response.subarray(newline + 1).toString("utf8").trim();
|
|
101
|
+
if (trailing) {
|
|
102
|
+
finish(new Error("Subagent broker returned more than one response frame."));
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
const parsed = JSON.parse(response.subarray(0, newline).toString("utf8"));
|
|
107
|
+
if (!isRecord(parsed)) throw new Error();
|
|
108
|
+
finish(void 0, parsed);
|
|
109
|
+
} catch {
|
|
110
|
+
finish(new Error("Subagent broker returned malformed JSON."));
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
socket.once("error", (error) => finish(error));
|
|
114
|
+
socket.once("close", () => {
|
|
115
|
+
if (!settled) finish(new Error("Subagent broker closed without a response."));
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function brokerError(response) {
|
|
120
|
+
return new Error(
|
|
121
|
+
typeof response.error === "string" ? response.error : "Subagent broker rejected the request."
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
function abortError(message) {
|
|
125
|
+
const error = new Error(message);
|
|
126
|
+
error.name = "AbortError";
|
|
127
|
+
return error;
|
|
128
|
+
}
|
|
129
|
+
function isRecord(value) {
|
|
130
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
131
|
+
}
|
|
132
|
+
export {
|
|
133
|
+
createBrokerClient,
|
|
134
|
+
child_communication_bridge_default as default
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=child-communication-bridge.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/child-communication-bridge.ts"],
|
|
4
|
+
"sourcesContent": ["import net from \"node:net\";\nimport type { ExtensionFactory } from \"@earendil-works/pi-coding-agent\";\nimport { captureBrokerCredentials } from \"./broker-credentials.js\";\nimport {\n\ttype ChildCommunicationClient,\n\tcreateChildCommunicationExtension,\n} from \"./child-communication-tools.js\";\nimport { MAX_FRAME_BYTES, MAX_IDENTIFIER_LENGTH } from \"./message-broker.js\";\nimport type { BrokerCredentials } from \"./types.js\";\n\nconst CONNECT_TIMEOUT_MS = 2_000;\nconst SEND_RESPONSE_TIMEOUT_MS = 5_000;\n\nconst captured = captureBrokerCredentials();\n\nconst childCommunicationBridge: ExtensionFactory = captured\n\t? createChildCommunicationExtension(createBrokerClient(captured))\n\t: () => undefined;\n\nexport default childCommunicationBridge;\n\nexport function createBrokerClient(credentials: BrokerCredentials): ChildCommunicationClient {\n\treturn {\n\t\tasync send(params, signal) {\n\t\t\tconst response = await requestBroker(\n\t\t\t\tcredentials,\n\t\t\t\t{ type: \"send\", token: credentials.token, ...params },\n\t\t\t\tsignal,\n\t\t\t\tSEND_RESPONSE_TIMEOUT_MS,\n\t\t\t);\n\t\t\tif (response.ok !== true) throw brokerError(response);\n\t\t\tif (\n\t\t\t\ttypeof response.requestId !== \"string\" ||\n\t\t\t\t!response.requestId ||\n\t\t\t\tresponse.requestId.length > MAX_IDENTIFIER_LENGTH ||\n\t\t\t\ttypeof response.accepted !== \"boolean\" ||\n\t\t\t\ttypeof response.duplicate !== \"boolean\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\"Subagent broker returned an invalid send acknowledgement.\");\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trequestId: response.requestId,\n\t\t\t\taccepted: response.accepted,\n\t\t\t\tduplicate: response.duplicate,\n\t\t\t};\n\t\t},\n\t\tasync wait(requestId, timeoutMs, signal) {\n\t\t\tconst response = await requestBroker(\n\t\t\t\tcredentials,\n\t\t\t\t{\n\t\t\t\t\ttype: \"wait\",\n\t\t\t\t\ttoken: credentials.token,\n\t\t\t\t\trequestId,\n\t\t\t\t\t...(timeoutMs !== undefined ? { timeoutMs } : {}),\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tif (response.ok !== true) throw brokerError(response);\n\t\t\tif (typeof response.response !== \"string\") {\n\t\t\t\tthrow new Error(\"Subagent broker returned an invalid plain-text response.\");\n\t\t\t}\n\t\t\treturn response.response;\n\t\t},\n\t};\n}\n\nfunction requestBroker(\n\tcredentials: BrokerCredentials,\n\trequest: Record<string, unknown>,\n\tsignal?: AbortSignal,\n\tresponseTimeoutMs?: number,\n): Promise<Record<string, unknown>> {\n\tif (signal?.aborted) return Promise.reject(abortError(\"Subagent broker request was cancelled.\"));\n\treturn new Promise((resolve, reject) => {\n\t\tconst socket = net.createConnection({ host: credentials.host, port: credentials.port });\n\t\tlet response = Buffer.alloc(0);\n\t\tlet settled = false;\n\t\tlet responseTimer: NodeJS.Timeout | undefined;\n\t\tconst connectTimer = setTimeout(\n\t\t\t() => finish(new Error(\"Subagent broker connection timed out.\")),\n\t\t\tCONNECT_TIMEOUT_MS,\n\t\t);\n\t\tconnectTimer.unref();\n\t\tconst onAbort = () => finish(abortError(\"Subagent broker request was cancelled.\"));\n\t\tconst finish = (error?: Error, value?: Record<string, unknown>) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tclearTimeout(connectTimer);\n\t\t\tif (responseTimer) clearTimeout(responseTimer);\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\tsocket.destroy();\n\t\t\tif (error) reject(error);\n\t\t\telse resolve(value ?? {});\n\t\t};\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\tsocket.once(\"connect\", () => {\n\t\t\tclearTimeout(connectTimer);\n\t\t\tif (responseTimeoutMs !== undefined) {\n\t\t\t\tresponseTimer = setTimeout(\n\t\t\t\t\t() => finish(new Error(\"Subagent broker response timed out.\")),\n\t\t\t\t\tresponseTimeoutMs,\n\t\t\t\t);\n\t\t\t\tresponseTimer.unref();\n\t\t\t}\n\t\t\tsocket.write(`${JSON.stringify(request)}\\n`);\n\t\t});\n\t\tsocket.on(\"data\", (chunk: Buffer) => {\n\t\t\tif (settled) return;\n\t\t\tresponse = Buffer.concat([response, chunk]);\n\t\t\tif (response.byteLength > MAX_FRAME_BYTES) {\n\t\t\t\tfinish(new Error(\"Subagent broker response exceeded its size limit.\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst newline = response.indexOf(0x0a);\n\t\t\tif (newline < 0) return;\n\t\t\tconst trailing = response\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\tfinish(new Error(\"Subagent broker returned more than one response frame.\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(response.subarray(0, newline).toString(\"utf8\")) as unknown;\n\t\t\t\tif (!isRecord(parsed)) throw new Error();\n\t\t\t\tfinish(undefined, parsed);\n\t\t\t} catch {\n\t\t\t\tfinish(new Error(\"Subagent broker returned malformed JSON.\"));\n\t\t\t}\n\t\t});\n\t\tsocket.once(\"error\", (error) => finish(error));\n\t\tsocket.once(\"close\", () => {\n\t\t\tif (!settled) finish(new Error(\"Subagent broker closed without a response.\"));\n\t\t});\n\t});\n}\n\nfunction brokerError(response: Record<string, unknown>): Error {\n\treturn new Error(\n\t\ttypeof response.error === \"string\" ? response.error : \"Subagent broker rejected the request.\",\n\t);\n}\n\nfunction abortError(message: string): Error {\n\tconst error = new Error(message);\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|