@narumitw/pi-subagents 2.0.6 → 2.1.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 +152 -50
- package/dist/chunks/{auto-transport-SY2VHUFH.ts → auto-transport-FUUKFDIG.ts} +6 -6
- package/dist/chunks/{capability-grant-CGEWOEKE.ts → capability-grant-PR72SWWS.ts} +4 -4
- package/dist/chunks/{chunk-DPPVEQAM.ts → chunk-4AQSF7AS.ts} +1 -1
- package/dist/chunks/chunk-4AQSF7AS.ts.map +7 -0
- package/dist/chunks/chunk-6H6TBBED.ts +108 -0
- package/dist/chunks/chunk-6H6TBBED.ts.map +7 -0
- package/dist/chunks/{chunk-DSOOH73Y.ts → chunk-7AAJEUSL.ts} +3 -3
- package/dist/chunks/{chunk-DSOOH73Y.ts.map → chunk-7AAJEUSL.ts.map} +2 -2
- package/dist/chunks/{chunk-7QPPBBXZ.ts → chunk-D4CR7T73.ts} +21 -3
- package/dist/chunks/chunk-D4CR7T73.ts.map +7 -0
- package/dist/chunks/{chunk-434NII74.ts → chunk-DIHBUR2E.ts} +54 -8
- package/dist/chunks/chunk-DIHBUR2E.ts.map +7 -0
- package/dist/chunks/{chunk-NIF42QMF.ts → chunk-FEVPWRMU.ts} +7 -4
- package/dist/chunks/chunk-FEVPWRMU.ts.map +7 -0
- package/dist/chunks/{chunk-YBUWBRF7.ts → chunk-FXI45N3J.ts} +5 -5
- package/dist/chunks/{chunk-S2IWVK3J.ts → chunk-ILEQ27AL.ts} +3 -2
- package/dist/chunks/chunk-ILEQ27AL.ts.map +7 -0
- package/dist/chunks/{chunk-DQMN4OYM.ts → chunk-ITVWPNU4.ts} +12 -106
- package/dist/chunks/chunk-ITVWPNU4.ts.map +7 -0
- package/dist/chunks/{chunk-QDVGH2X7.ts → chunk-IWC32VPY.ts} +2 -1
- package/dist/chunks/{chunk-QDVGH2X7.ts.map → chunk-IWC32VPY.ts.map} +2 -2
- package/dist/chunks/{chunk-I2FAK44T.ts → chunk-JSZIP73U.ts} +48 -10
- package/dist/chunks/chunk-JSZIP73U.ts.map +7 -0
- package/dist/chunks/{chunk-ZHTNCZIA.ts → chunk-JU6LUNLP.ts} +2 -2
- package/dist/chunks/{chunk-PSK43Y6A.ts → chunk-LASD73CM.ts} +2 -2
- package/dist/chunks/{chunk-C4L6P266.ts → chunk-LEOYDZI3.ts} +1 -1
- package/dist/chunks/{chunk-C4L6P266.ts.map → chunk-LEOYDZI3.ts.map} +2 -2
- package/dist/chunks/{chunk-H3BFJ7HJ.ts → chunk-LL4LP2T7.ts} +5 -5
- package/dist/chunks/chunk-N2T5IN4X.ts +18 -0
- package/dist/chunks/chunk-N2T5IN4X.ts.map +7 -0
- package/dist/chunks/{chunk-G3RSMSXJ.ts → chunk-NTRPLF46.ts} +1 -1
- package/dist/chunks/chunk-NTRPLF46.ts.map +7 -0
- package/dist/chunks/{chunk-CBP76ARQ.ts → chunk-PABJJYP6.ts} +174 -47
- package/dist/chunks/chunk-PABJJYP6.ts.map +7 -0
- package/dist/chunks/{chunk-EFBPISNT.ts → chunk-PBZMBTNJ.ts} +104 -103
- package/dist/chunks/chunk-PBZMBTNJ.ts.map +7 -0
- package/dist/chunks/{chunk-SCZ33MYW.ts → chunk-PGLSFLYW.ts} +2 -2
- package/dist/chunks/{chunk-O4VO6JUJ.ts → chunk-TM2R67J3.ts} +3 -3
- package/dist/chunks/{chunk-QBORTI4W.ts → chunk-TMZRHIIK.ts} +32 -3
- package/dist/chunks/chunk-TMZRHIIK.ts.map +7 -0
- package/dist/chunks/chunk-TZ34IQ3M.ts +59 -0
- package/dist/chunks/chunk-TZ34IQ3M.ts.map +7 -0
- package/dist/chunks/chunk-VBDGNNLM.ts +214 -0
- package/dist/chunks/chunk-VBDGNNLM.ts.map +7 -0
- package/dist/chunks/{chunk-7OBINKFM.ts → chunk-VDG7LTYE.ts} +11 -11
- package/dist/chunks/chunk-VDG7LTYE.ts.map +7 -0
- package/dist/chunks/{chunk-AEUYS7JC.ts → chunk-X4NMONPE.ts} +1 -1
- package/dist/chunks/chunk-X4NMONPE.ts.map +7 -0
- package/dist/chunks/{chunk-HKC4ES4B.ts → chunk-YPJEN6NU.ts} +2 -2
- package/dist/chunks/{completion-delivery-YPOWSSV3.ts → completion-delivery-JVLNQRWX.ts} +5 -4
- package/dist/chunks/{config-status-J4GPWP46.ts → config-status-FKGDECZ3.ts} +7 -6
- package/dist/chunks/{config-ui-2YUCUEBM.ts → config-ui-DDKERQHI.ts} +297 -231
- package/dist/chunks/config-ui-DDKERQHI.ts.map +7 -0
- package/dist/chunks/{consult-IV7UBNQQ.ts → consult-PQ6PRAKC.ts} +14 -13
- package/dist/chunks/consult-PQ6PRAKC.ts.map +7 -0
- package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts → create-stateful-transport-JWC2EFYL.ts} +6 -6
- package/dist/chunks/{delegation-contract-WJPT4FVS.ts → delegation-contract-LA56I5DT.ts} +2 -2
- package/dist/chunks/{discovery-K25T3SH4.ts → discovery-MIFB2U4Y.ts} +3 -3
- package/dist/chunks/{execution-LA7HN5YF.ts → execution-Q2JZLKJA.ts} +19 -16
- package/dist/chunks/execution-Q2JZLKJA.ts.map +7 -0
- package/dist/chunks/{in-process-transport-4RF3J6XK.ts → in-process-transport-HJ6TZXC3.ts} +9 -9
- package/dist/chunks/{inspect-XV2QALMR.ts → inspect-UH2TKH6E.ts} +25 -10
- package/dist/chunks/inspect-UH2TKH6E.ts.map +7 -0
- package/dist/chunks/{persistence-VSGXAW4P.ts → persistence-XHPJBZL7.ts} +11 -7
- package/dist/chunks/persistence-XHPJBZL7.ts.map +7 -0
- package/dist/chunks/{registry-E6XPJB7L.ts → registry-XDXPECWF.ts} +136 -15
- package/dist/chunks/registry-XDXPECWF.ts.map +7 -0
- package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts → retained-semantic-state-GM75FZGE.ts} +3 -3
- package/dist/chunks/{rpc-transport-NEHBHWX4.ts → rpc-transport-7R7DVCEB.ts} +12 -16
- package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +7 -0
- package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts → spawn-idempotency-BNHOSMZW.ts} +2 -2
- package/dist/chunks/{subprocess-transport-NSHOGDC4.ts → subprocess-transport-VHZJRBTW.ts} +15 -14
- package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +7 -0
- package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +164 -0
- package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +7 -0
- package/dist/index.ts +427 -30
- package/dist/index.ts.map +3 -3
- package/docs/async-runtime-protocol.md +69 -0
- package/docs/implementation-notes/pi-subagents-capability-matrix.md +62 -0
- package/docs/implementation-notes/pi-subagents-current-direction.md +99 -0
- package/docs/implementation-notes/pi-subagents-rpc-v1.md +153 -0
- package/docs/pi-subagents-diagrams.md +183 -0
- package/package.json +9 -8
- package/src/agents/types.ts +2 -0
- package/src/async-subagent-benchmark.ts +532 -0
- package/src/completion-delivery.ts +71 -4
- package/src/completion-render.ts +1 -0
- package/src/completion-requirement.ts +308 -0
- package/src/config-registration.ts +5 -5
- package/src/config-status.ts +66 -70
- package/src/config-ui.ts +244 -150
- package/src/consult-resources.ts +1 -1
- package/src/consult.ts +3 -8
- package/src/delegation-contract.ts +55 -9
- package/src/execution-plan.ts +1 -1
- package/src/execution-ui.ts +40 -29
- package/src/execution.ts +2 -3
- package/src/inspect.ts +24 -1
- package/src/orchestration-metrics.ts +1 -1
- package/src/panel-execution.ts +2 -3
- package/src/panel-failure.ts +1 -1
- package/src/panel-render.ts +1 -1
- package/src/parallel-limit-ui.ts +6 -5
- package/src/params.ts +2 -1
- package/src/persistence.ts +9 -0
- package/src/process-control.ts +43 -0
- package/src/registry-types.ts +5 -0
- package/src/registry.ts +162 -18
- package/src/render.ts +2 -1
- package/src/rpc-transport.ts +1 -1
- package/src/runner-outcome.ts +1 -1
- package/src/runner-result.ts +1 -1
- package/src/runner-types.ts +102 -0
- package/src/runner.ts +11 -192
- package/src/settings/inspection.ts +27 -0
- package/src/settings/schema.ts +9 -0
- package/src/settings-reader.ts +7 -0
- package/src/settings.ts +20 -0
- package/src/spawn-idempotency.ts +5 -0
- package/src/stateful-agent-view.ts +15 -19
- package/src/stateful-guidance.ts +14 -4
- package/src/stateful-limit-ui.ts +23 -20
- package/src/stateful-limits.ts +10 -10
- package/src/stateful-registration.ts +126 -9
- package/src/stateful-render.ts +27 -2
- package/src/subagent-details.ts +43 -0
- package/src/subagents-extension.ts +66 -8
- package/src/subagents.ts +2 -0
- package/src/subprocess-transport.ts +2 -1
- package/src/supervision.ts +2 -1
- package/src/timeout-finalization.ts +1 -1
- package/src/tool-schema-compatibility.ts +73 -0
- package/src/transport-types.ts +6 -0
- package/src/transport-ui.ts +18 -46
- package/src/usage-recording-config.ts +13 -0
- package/src/usage-recording-store.ts +183 -0
- package/src/usage-recording.ts +478 -0
- package/src/verification-harness.ts +1 -1
- package/src/workflow-ui.ts +17 -9
- package/dist/chunks/chunk-434NII74.ts.map +0 -7
- package/dist/chunks/chunk-7OBINKFM.ts.map +0 -7
- package/dist/chunks/chunk-7QPPBBXZ.ts.map +0 -7
- package/dist/chunks/chunk-AEUYS7JC.ts.map +0 -7
- package/dist/chunks/chunk-CBP76ARQ.ts.map +0 -7
- package/dist/chunks/chunk-DPPVEQAM.ts.map +0 -7
- package/dist/chunks/chunk-DQMN4OYM.ts.map +0 -7
- package/dist/chunks/chunk-EFBPISNT.ts.map +0 -7
- package/dist/chunks/chunk-G3RSMSXJ.ts.map +0 -7
- package/dist/chunks/chunk-I2FAK44T.ts.map +0 -7
- package/dist/chunks/chunk-NIF42QMF.ts.map +0 -7
- package/dist/chunks/chunk-QBORTI4W.ts.map +0 -7
- package/dist/chunks/chunk-S2IWVK3J.ts.map +0 -7
- package/dist/chunks/config-ui-2YUCUEBM.ts.map +0 -7
- package/dist/chunks/consult-IV7UBNQQ.ts.map +0 -7
- package/dist/chunks/execution-LA7HN5YF.ts.map +0 -7
- package/dist/chunks/inspect-XV2QALMR.ts.map +0 -7
- package/dist/chunks/persistence-VSGXAW4P.ts.map +0 -7
- package/dist/chunks/registry-E6XPJB7L.ts.map +0 -7
- package/dist/chunks/rpc-transport-NEHBHWX4.ts.map +0 -7
- package/dist/chunks/subprocess-transport-NSHOGDC4.ts.map +0 -7
- /package/dist/chunks/{auto-transport-SY2VHUFH.ts.map → auto-transport-FUUKFDIG.ts.map} +0 -0
- /package/dist/chunks/{capability-grant-CGEWOEKE.ts.map → capability-grant-PR72SWWS.ts.map} +0 -0
- /package/dist/chunks/{chunk-YBUWBRF7.ts.map → chunk-FXI45N3J.ts.map} +0 -0
- /package/dist/chunks/{chunk-ZHTNCZIA.ts.map → chunk-JU6LUNLP.ts.map} +0 -0
- /package/dist/chunks/{chunk-PSK43Y6A.ts.map → chunk-LASD73CM.ts.map} +0 -0
- /package/dist/chunks/{chunk-H3BFJ7HJ.ts.map → chunk-LL4LP2T7.ts.map} +0 -0
- /package/dist/chunks/{chunk-SCZ33MYW.ts.map → chunk-PGLSFLYW.ts.map} +0 -0
- /package/dist/chunks/{chunk-O4VO6JUJ.ts.map → chunk-TM2R67J3.ts.map} +0 -0
- /package/dist/chunks/{chunk-HKC4ES4B.ts.map → chunk-YPJEN6NU.ts.map} +0 -0
- /package/dist/chunks/{completion-delivery-YPOWSSV3.ts.map → completion-delivery-JVLNQRWX.ts.map} +0 -0
- /package/dist/chunks/{config-status-J4GPWP46.ts.map → config-status-FKGDECZ3.ts.map} +0 -0
- /package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts.map → create-stateful-transport-JWC2EFYL.ts.map} +0 -0
- /package/dist/chunks/{delegation-contract-WJPT4FVS.ts.map → delegation-contract-LA56I5DT.ts.map} +0 -0
- /package/dist/chunks/{discovery-K25T3SH4.ts.map → discovery-MIFB2U4Y.ts.map} +0 -0
- /package/dist/chunks/{in-process-transport-4RF3J6XK.ts.map → in-process-transport-HJ6TZXC3.ts.map} +0 -0
- /package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts.map → retained-semantic-state-GM75FZGE.ts.map} +0 -0
- /package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts.map → spawn-idempotency-BNHOSMZW.ts.map} +0 -0
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
2
|
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
grammarSafeToolObject
|
|
5
|
+
} from "./chunk-TZ34IQ3M.ts";
|
|
3
6
|
import {
|
|
4
7
|
MAX_SUBAGENT_TOOL_CALLS,
|
|
5
8
|
MAX_SUBAGENT_TURNS
|
|
@@ -9,10 +12,10 @@ import {
|
|
|
9
12
|
} from "./chunk-RSUXZD6S.ts";
|
|
10
13
|
import {
|
|
11
14
|
THINKING_LEVELS
|
|
12
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-4AQSF7AS.ts";
|
|
13
16
|
import {
|
|
14
17
|
DelegationContractSchema
|
|
15
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-JSZIP73U.ts";
|
|
16
19
|
import {
|
|
17
20
|
MAX_CONFIGURABLE_PARALLEL_TASKS,
|
|
18
21
|
MAX_SUBAGENT_TIMEOUT_MS
|
|
@@ -228,7 +231,7 @@ var AgentScopeSchema = StringEnum2(["user", "project", "both"], {
|
|
|
228
231
|
description: 'Per-invocation custom agent scope. Default: "user". Use "project" for project-local agents or "both" for user and project agents; this is a tool argument, not a pi-subagents.json setting.',
|
|
229
232
|
default: "user"
|
|
230
233
|
});
|
|
231
|
-
var SubagentParams =
|
|
234
|
+
var SubagentParams = grammarSafeToolObject({
|
|
232
235
|
agent: Type2.Optional(
|
|
233
236
|
Type2.String({ description: "Name of the agent to invoke (for single mode)" })
|
|
234
237
|
),
|
|
@@ -294,4 +297,4 @@ export {
|
|
|
294
297
|
SubagentParams,
|
|
295
298
|
hasUsableAggregator
|
|
296
299
|
};
|
|
297
|
-
//# sourceMappingURL=chunk-
|
|
300
|
+
//# sourceMappingURL=chunk-FEVPWRMU.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/params.ts", "../../src/panel-presets.ts", "../../src/verified-execution-schema.ts"],
|
|
4
|
+
"sourcesContent": ["import { StringEnum } from \"@earendil-works/pi-ai\";\nimport { type Static, Type } from \"typebox\";\nimport { THINKING_LEVELS } from \"./agents/types.js\";\nimport { DelegationContractSchema } from \"./delegation-contract.js\";\nimport { MAX_CONFIGURABLE_PARALLEL_TASKS, MAX_SUBAGENT_TIMEOUT_MS } from \"./limits.js\";\nimport { PANEL_PRESETS } from \"./panel-presets.js\";\nimport { SUBAGENT_RESULT_FORMATS } from \"./result-contract.js\";\nimport { grammarSafeToolObject } from \"./tool-schema-compatibility.js\";\nimport { MAX_SUBAGENT_TOOL_CALLS, MAX_SUBAGENT_TURNS } from \"./turn-budget.js\";\nimport { VerifiedExecutionContractSchema } from \"./verified-execution-schema.js\";\n\nconst TimeoutMs = Type.Number({\n\tdescription:\n\t\t\"Work deadline in milliseconds selected for the task difficulty. On expiry, Pi aborts the work and makes one separately bounded summary attempt. Defaults to PI_SUBAGENT_TIMEOUT_MS or 600000.\",\n\tminimum: 1,\n\tmaximum: MAX_SUBAGENT_TIMEOUT_MS,\n});\n\nconst TurnLimitFields = {\n\tidleTimeoutMs: Type.Optional(\n\t\tType.Integer({\n\t\t\tdescription:\n\t\t\t\t\"Maximum milliseconds without a completed assistant turn or tool result before Pi aborts work and preserves a checkpoint.\",\n\t\t\tminimum: 1,\n\t\t\tmaximum: MAX_SUBAGENT_TIMEOUT_MS,\n\t\t}),\n\t),\n\tmaxTurns: Type.Optional(\n\t\tType.Integer({\n\t\t\tdescription: \"Maximum assistant turns before unfinished work is stopped and checkpointed.\",\n\t\t\tminimum: 1,\n\t\t\tmaximum: MAX_SUBAGENT_TURNS,\n\t\t}),\n\t),\n\tmaxToolCalls: Type.Optional(\n\t\tType.Integer({\n\t\t\tdescription: \"Maximum tool calls before additional tool work is stopped and checkpointed.\",\n\t\t\tminimum: 1,\n\t\t\tmaximum: MAX_SUBAGENT_TOOL_CALLS,\n\t\t}),\n\t),\n};\n\nconst ThinkingLevelSchema = StringEnum(THINKING_LEVELS, {\n\tdescription:\n\t\t\"Pi thinking level for the subagent process: off, minimal, low, medium, high, xhigh, or max.\",\n});\n\nconst ResultFormatSchema = StringEnum(SUBAGENT_RESULT_FORMATS, {\n\tdescription:\n\t\t\"Optional completion contract. Text preserves ordinary output; structured-v1 and structured-v2 request versioned JSON with bounded text fallback.\",\n});\n\nconst ContractFields = {\n\tcontract: Type.Optional(DelegationContractSchema),\n\tresultFormat: Type.Optional(ResultFormatSchema),\n\tretryPolicy: Type.Optional(\n\t\tType.Object(\n\t\t\t{\n\t\t\t\tmaxAttempts: Type.Integer({ minimum: 1, maximum: 3 }),\n\t\t\t\tbackoffMs: Type.Optional(Type.Integer({ minimum: 0, maximum: 30_000 })),\n\t\t\t},\n\t\t\t{ additionalProperties: false },\n\t\t),\n\t),\n\thedgeAfterMs: Type.Optional(Type.Integer({ minimum: 1, maximum: 30_000 })),\n};\n\nconst TaskItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task to delegate to the agent\" }),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n\ttimeoutMs: Type.Optional(TimeoutMs),\n\t...TurnLimitFields,\n\tthinkingLevel: Type.Optional(ThinkingLevelSchema),\n\t...ContractFields,\n});\n\nconst WorkflowTaskItem = Type.Object({\n\tid: Type.String({ minLength: 1, maxLength: 256 }),\n\tagent: Type.Optional(\n\t\tType.String({ description: \"Optional explicit agent; omit to route by capability manifest\" }),\n\t),\n\trequiredCapabilities: Type.Optional(\n\t\tType.Array(Type.String({ minLength: 1, maxLength: 256 }), { maxItems: 50 }),\n\t),\n\trequiredTools: Type.Optional(\n\t\tType.Array(Type.String({ minLength: 1, maxLength: 256 }), { maxItems: 50 }),\n\t),\n\trequiredVerificationRole: Type.Optional(Type.String({ minLength: 1, maxLength: 256 })),\n\tpreferredCostHint: Type.Optional(StringEnum([\"low\", \"medium\", \"high\"] as const)),\n\tpreferredLatencyHint: Type.Optional(StringEnum([\"low\", \"medium\", \"high\"] as const)),\n\ttask: Type.String({ description: \"Task to delegate to the agent\" }),\n\tdependsOn: Type.Optional(\n\t\tType.Array(Type.String({ minLength: 1, maxLength: 256 }), { maxItems: 64 }),\n\t),\n\tinputArtifacts: Type.Optional(\n\t\tType.Array(Type.String({ minLength: 1, maxLength: 256 }), { maxItems: 50 }),\n\t),\n\tinputArtifactVersions: Type.Optional(\n\t\tType.Record(\n\t\t\tType.String({ minLength: 1, maxLength: 256 }),\n\t\t\tType.String({ minLength: 1, maxLength: 256 }),\n\t\t),\n\t),\n\treadPaths: Type.Optional(Type.Array(Type.String({ maxLength: 4096 }), { maxItems: 50 })),\n\twritePaths: Type.Optional(Type.Array(Type.String({ maxLength: 4096 }), { maxItems: 50 })),\n\townershipKeys: Type.Optional(Type.Array(Type.String({ maxLength: 256 }), { maxItems: 50 })),\n\tacceptanceCriteria: Type.Optional(Type.Array(Type.String({ maxLength: 4096 }), { maxItems: 50 })),\n\tintegrationOwner: Type.Optional(Type.Boolean()),\n\tverifierFor: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tmaxLength: 256,\n\t\t\tdescription:\n\t\t\t\t\"Target task ID for one distinct direct-dependent structured-v2 verifier. The executor gates target acceptance on a current exact-tree receipt.\",\n\t\t}),\n\t),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n\ttimeoutMs: Type.Optional(TimeoutMs),\n\t...TurnLimitFields,\n\tthinkingLevel: Type.Optional(ThinkingLevelSchema),\n\t...ContractFields,\n});\n\nconst ChainItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task with optional {previous} placeholder for prior output\" }),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n\ttimeoutMs: Type.Optional(TimeoutMs),\n\t...TurnLimitFields,\n\tthinkingLevel: Type.Optional(ThinkingLevelSchema),\n\t...ContractFields,\n});\n\nconst AggregatorItem = Type.Object(\n\t{\n\t\tagent: Type.String({\n\t\t\tdescription: \"Name of the fan-in agent to invoke after parallel tasks complete\",\n\t\t}),\n\t\ttask: Type.String({\n\t\t\tdescription: \"Fan-in task. Use {previous} to include all parallel outputs.\",\n\t\t}),\n\t\tcwd: Type.Optional(\n\t\t\tType.String({ description: \"Working directory for the aggregator process\" }),\n\t\t),\n\t\ttimeoutMs: Type.Optional(TimeoutMs),\n\t\t...TurnLimitFields,\n\t\tthinkingLevel: Type.Optional(ThinkingLevelSchema),\n\t\t...ContractFields,\n\t},\n\t{\n\t\tdescription:\n\t\t\t\"Optional fan-in step for parallel mode. Omit this key entirely when no aggregation is needed; empty or whitespace-only agent/task values are treated as absent.\",\n\t},\n);\n\nconst PanelReviewerItem = Type.Object(\n\t{\n\t\tid: Type.String({ minLength: 1, maxLength: 256 }),\n\t\tagent: Type.String({ minLength: 1 }),\n\t\tfocus: Type.Optional(Type.String({ maxLength: 8 * 1024 })),\n\t\ttimeoutMs: Type.Optional(TimeoutMs),\n\t\t...TurnLimitFields,\n\t\tthinkingLevel: Type.Optional(ThinkingLevelSchema),\n\t},\n\t{ additionalProperties: false },\n);\n\nconst PanelSynthesizerItem = Type.Object(\n\t{\n\t\tagent: Type.String({ minLength: 1 }),\n\t\ttimeoutMs: Type.Optional(TimeoutMs),\n\t\t...TurnLimitFields,\n\t\tthinkingLevel: Type.Optional(ThinkingLevelSchema),\n\t},\n\t{ additionalProperties: false },\n);\n\nconst PanelItem = Type.Object(\n\t{\n\t\tid: Type.Optional(Type.String({ minLength: 1, maxLength: 256 })),\n\t\tpreset: Type.Optional(StringEnum(PANEL_PRESETS, { default: \"custom\" })),\n\t\ttask: Type.String({ minLength: 1, maxLength: 50 * 1024 }),\n\t\tcontext: Type.Optional(Type.String({ maxLength: 50 * 1024 })),\n\t\treviewers: Type.Array(PanelReviewerItem, {\n\t\t\tminItems: 2,\n\t\t\tmaxItems: MAX_CONFIGURABLE_PARALLEL_TASKS,\n\t\t}),\n\t\tsynthesizer: PanelSynthesizerItem,\n\t\tminValidReviews: Type.Optional(Type.Integer({ minimum: 2 })),\n\t},\n\t{\n\t\tadditionalProperties: false,\n\t\tdescription:\n\t\t\t\"One bounded independent review round followed by one evidence-preserving synthesis when enough valid reviews remain.\",\n\t},\n);\n\nconst AgentScopeSchema = StringEnum([\"user\", \"project\", \"both\"] as const, {\n\tdescription:\n\t\t'Per-invocation custom agent scope. Default: \"user\". Use \"project\" for project-local agents or \"both\" for user and project agents; this is a tool argument, not a pi-subagents.json setting.',\n\tdefault: \"user\",\n});\n\nexport const SubagentParams = grammarSafeToolObject({\n\tagent: Type.Optional(\n\t\tType.String({ description: \"Name of the agent to invoke (for single mode)\" }),\n\t),\n\ttask: Type.Optional(Type.String({ description: \"Task to delegate (for single mode)\" })),\n\ttasks: Type.Optional(\n\t\tType.Array(TaskItem, {\n\t\t\tdescription: \"Array of {agent, task} for parallel execution\",\n\t\t\tmaxItems: MAX_CONFIGURABLE_PARALLEL_TASKS,\n\t\t}),\n\t),\n\tchain: Type.Optional(\n\t\tType.Array(ChainItem, { description: \"Array of {agent, task} for sequential execution\" }),\n\t),\n\taggregator: Type.Optional(AggregatorItem),\n\tpanel: Type.Optional(PanelItem),\n\tworkflow: Type.Optional(\n\t\tType.Object(\n\t\t\t{\n\t\t\t\tid: Type.Optional(Type.String({ minLength: 1, maxLength: 256 })),\n\t\t\t\tverifiedExecution: Type.Optional(VerifiedExecutionContractSchema),\n\t\t\t\thonorAdmission: Type.Optional(\n\t\t\t\t\tType.Boolean({\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Opt in to declining workflow tasks whose explicit audit metadata recommends parent-owned work or abstention.\",\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t\ttasks: Type.Array(WorkflowTaskItem, {\n\t\t\t\t\tminItems: 1,\n\t\t\t\t\tmaxItems: MAX_CONFIGURABLE_PARALLEL_TASKS,\n\t\t\t\t}),\n\t\t\t},\n\t\t\t{ additionalProperties: false },\n\t\t),\n\t),\n\tagentScope: Type.Optional(AgentScopeSchema),\n\tconfirmProjectAgents: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription: \"Prompt before running project-local agents. Default: true.\",\n\t\t\tdefault: true,\n\t\t}),\n\t),\n\tcwd: Type.Optional(\n\t\tType.String({ description: \"Working directory for the agent process (single mode)\" }),\n\t),\n\ttimeoutMs: Type.Optional(TimeoutMs),\n\ttotalTimeoutMs: Type.Optional(\n\t\tType.Number({\n\t\t\tdescription:\n\t\t\t\t\"Overall blocking-workflow deadline in milliseconds, including queued work, workflow tasks, panel phases, chain steps, and fan-in.\",\n\t\t\tminimum: 1,\n\t\t\tmaximum: MAX_SUBAGENT_TIMEOUT_MS,\n\t\t}),\n\t),\n\t...TurnLimitFields,\n\tthinkingLevel: Type.Optional(ThinkingLevelSchema),\n\t...ContractFields,\n});\n\nexport type SubagentParams = Static<typeof SubagentParams>;\n\nexport function hasUsableAggregator(\n\taggregator: unknown,\n): aggregator is { agent: string; task: string } {\n\tif (!aggregator || typeof aggregator !== \"object\") return false;\n\tconst candidate = aggregator as { agent?: unknown; task?: unknown };\n\treturn (\n\t\ttypeof candidate.agent === \"string\" &&\n\t\tcandidate.agent.trim().length > 0 &&\n\t\ttypeof candidate.task === \"string\" &&\n\t\tcandidate.task.trim().length > 0\n\t);\n}\n", "export const PANEL_PRESETS = [\"code-review\", \"research\", \"security-review\", \"custom\"] as const;\n\nexport type PanelPreset = (typeof PANEL_PRESETS)[number];\n", "import { StringEnum } from \"@earendil-works/pi-ai\";\nimport { type Static, Type } from \"typebox\";\n\nconst VerificationCheckSchema = Type.Object(\n\t{\n\t\tid: Type.String({\n\t\t\tminLength: 1,\n\t\t\tmaxLength: 256,\n\t\t\tpattern: \"^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$\",\n\t\t}),\n\t\tcommand: StringEnum([\"git\", \"node\", \"npm\", \"npx\"] as const),\n\t\targs: Type.Optional(Type.Array(Type.String({ maxLength: 4096 }), { maxItems: 64 })),\n\t\tcwd: Type.Optional(Type.String({ minLength: 1, maxLength: 4096 })),\n\t\ttimeoutMs: Type.Optional(Type.Integer({ minimum: 1, maximum: 600_000 })),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport const VerifiedExecutionContractSchema = Type.Object(\n\t{\n\t\tverifierAgent: Type.String({ minLength: 1, maxLength: 256 }),\n\t\tmaxReworkCycles: Type.Optional(Type.Integer({ minimum: 0, maximum: 1, default: 1 })),\n\t\tchecks: Type.Optional(Type.Array(VerificationCheckSchema, { maxItems: 32 })),\n\t},\n\t{\n\t\tadditionalProperties: false,\n\t\tdescription:\n\t\t\t\"Explicitly gate mutating workflow success on executor-owned deterministic checks, one least-authority independent verifier, exact submitted-state identity, and managed integration acceptance.\",\n\t},\n);\n\nexport type VerifiedExecutionContract = Static<typeof VerifiedExecutionContractSchema>;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["StringEnum", "Type", "Type", "StringEnum"]
|
|
7
|
+
}
|
|
@@ -7,15 +7,15 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
BUILT_IN_AGENTS,
|
|
9
9
|
discoverAgents
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-LASD73CM.ts";
|
|
11
11
|
import {
|
|
12
12
|
DEFAULT_CONSULTATION_CWD_POLICY,
|
|
13
13
|
DEFAULT_CONSULT_RESOURCE_POLICY
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-TMZRHIIK.ts";
|
|
15
15
|
import {
|
|
16
16
|
THINKING_LEVELS,
|
|
17
17
|
resolveAgentToolNames
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-4AQSF7AS.ts";
|
|
19
19
|
import {
|
|
20
20
|
COLLAPSED_ANSWER_LINES,
|
|
21
21
|
COLLAPSED_LIST_LIMIT,
|
|
@@ -372,7 +372,7 @@ function safeNumber(value) {
|
|
|
372
372
|
// src/consult-registration.ts
|
|
373
373
|
function registerSubagentConsult(pi, options, dependencies = {}) {
|
|
374
374
|
const loadExecution = cachedModuleLoader(
|
|
375
|
-
dependencies.loadExecution ?? (() => import("./consult-
|
|
375
|
+
dependencies.loadExecution ?? (() => import("./consult-PQ6PRAKC.ts"))
|
|
376
376
|
);
|
|
377
377
|
let generation = 0;
|
|
378
378
|
const active = /* @__PURE__ */ new Set();
|
|
@@ -487,4 +487,4 @@ export {
|
|
|
487
487
|
SubagentConsultParams,
|
|
488
488
|
registerSubagentConsult
|
|
489
489
|
};
|
|
490
|
-
//# sourceMappingURL=chunk-
|
|
490
|
+
//# sourceMappingURL=chunk-FXI45N3J.ts.map
|
|
@@ -23,7 +23,8 @@ function hashSpawnRequest(request) {
|
|
|
23
23
|
workspaceMode: request.workspaceMode,
|
|
24
24
|
allowConcurrentWrites: request.allowConcurrentWrites,
|
|
25
25
|
...request.contract === void 0 ? {} : { contract: request.contract },
|
|
26
|
-
resultFormat: request.resultFormat
|
|
26
|
+
resultFormat: request.resultFormat,
|
|
27
|
+
...request.completionRequirement === "required" ? { completionRequirement: "required" } : {}
|
|
27
28
|
})
|
|
28
29
|
).digest("hex");
|
|
29
30
|
}
|
|
@@ -41,4 +42,4 @@ export {
|
|
|
41
42
|
hashSpawnRequest,
|
|
42
43
|
assertSpawnIdempotencyKey
|
|
43
44
|
};
|
|
44
|
-
//# sourceMappingURL=chunk-
|
|
45
|
+
//# sourceMappingURL=chunk-ILEQ27AL.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/spawn-idempotency.ts"],
|
|
4
|
+
"sourcesContent": ["import { createHash } from \"node:crypto\";\nimport type { AgentScope, SubagentThinkingLevel } from \"./agents/types.js\";\nimport type { CompletionRequirementMode } from \"./completion-requirement.js\";\nimport type { DelegationContract } from \"./delegation-contract.js\";\nimport type { SubagentResultFormat } from \"./result-contract.js\";\n\nexport const MAX_SPAWN_IDEMPOTENCY_KEY_LENGTH = 256;\n\nexport interface CanonicalSpawnRequest {\n\tagent: string;\n\ttaskName?: string;\n\ttask: string;\n\tcwd: string;\n\tagentScope: AgentScope;\n\tthinkingLevel?: SubagentThinkingLevel;\n\ttimeoutMs?: number;\n\tidleTimeoutMs?: number;\n\tmaxTurns?: number;\n\tmaxToolCalls?: number;\n\tparentId?: string;\n\tcontext?: string;\n\tcontextSourceIds: readonly string[];\n\tworkspaceMode: \"shared\" | \"worktree\";\n\tallowConcurrentWrites: boolean;\n\tcontract?: DelegationContract;\n\tresultFormat: SubagentResultFormat;\n\tcompletionRequirement?: CompletionRequirementMode;\n}\n\nexport function hashSpawnRequest(request: CanonicalSpawnRequest): string {\n\treturn createHash(\"sha256\")\n\t\t.update(\n\t\t\tJSON.stringify({\n\t\t\t\tagent: request.agent,\n\t\t\t\t...(request.taskName === undefined ? {} : { taskName: request.taskName }),\n\t\t\t\ttask: request.task,\n\t\t\t\tcwd: request.cwd,\n\t\t\t\tagentScope: request.agentScope,\n\t\t\t\tthinkingLevel: request.thinkingLevel ?? null,\n\t\t\t\t...(request.timeoutMs === undefined ? {} : { timeoutMs: request.timeoutMs }),\n\t\t\t\t...(request.idleTimeoutMs === undefined ? {} : { idleTimeoutMs: request.idleTimeoutMs }),\n\t\t\t\t...(request.maxTurns === undefined ? {} : { maxTurns: request.maxTurns }),\n\t\t\t\t...(request.maxToolCalls === undefined ? {} : { maxToolCalls: request.maxToolCalls }),\n\t\t\t\tparentId: request.parentId ?? null,\n\t\t\t\tcontextHash: request.context\n\t\t\t\t\t? createHash(\"sha256\").update(request.context).digest(\"hex\")\n\t\t\t\t\t: null,\n\t\t\t\tcontextSourceIds: [...request.contextSourceIds],\n\t\t\t\tworkspaceMode: request.workspaceMode,\n\t\t\t\tallowConcurrentWrites: request.allowConcurrentWrites,\n\t\t\t\t...(request.contract === undefined ? {} : { contract: request.contract }),\n\t\t\t\tresultFormat: request.resultFormat,\n\t\t\t\t...(request.completionRequirement === \"required\"\n\t\t\t\t\t? { completionRequirement: \"required\" }\n\t\t\t\t\t: {}),\n\t\t\t}),\n\t\t)\n\t\t.digest(\"hex\");\n}\n\nexport function assertSpawnIdempotencyKey(value: string | undefined): void {\n\tif (value === undefined) return;\n\tif (!value || value.length > MAX_SPAWN_IDEMPOTENCY_KEY_LENGTH) {\n\t\tthrow new Error(\n\t\t\t`subagent_spawn idempotencyKey must contain 1-${MAX_SPAWN_IDEMPOTENCY_KEY_LENGTH} characters`,\n\t\t);\n\t}\n}\n"],
|
|
5
|
+
"mappings": ";;;;AAAA,SAAS,kBAAkB;AAMpB,IAAM,mCAAmC;AAuBzC,SAAS,iBAAiB,SAAwC;AACxE,SAAO,WAAW,QAAQ,EACxB;AAAA,IACA,KAAK,UAAU;AAAA,MACd,OAAO,QAAQ;AAAA,MACf,GAAI,QAAQ,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,QAAQ,SAAS;AAAA,MACvE,MAAM,QAAQ;AAAA,MACd,KAAK,QAAQ;AAAA,MACb,YAAY,QAAQ;AAAA,MACpB,eAAe,QAAQ,iBAAiB;AAAA,MACxC,GAAI,QAAQ,cAAc,SAAY,CAAC,IAAI,EAAE,WAAW,QAAQ,UAAU;AAAA,MAC1E,GAAI,QAAQ,kBAAkB,SAAY,CAAC,IAAI,EAAE,eAAe,QAAQ,cAAc;AAAA,MACtF,GAAI,QAAQ,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,QAAQ,SAAS;AAAA,MACvE,GAAI,QAAQ,iBAAiB,SAAY,CAAC,IAAI,EAAE,cAAc,QAAQ,aAAa;AAAA,MACnF,UAAU,QAAQ,YAAY;AAAA,MAC9B,aAAa,QAAQ,UAClB,WAAW,QAAQ,EAAE,OAAO,QAAQ,OAAO,EAAE,OAAO,KAAK,IACzD;AAAA,MACH,kBAAkB,CAAC,GAAG,QAAQ,gBAAgB;AAAA,MAC9C,eAAe,QAAQ;AAAA,MACvB,uBAAuB,QAAQ;AAAA,MAC/B,GAAI,QAAQ,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,QAAQ,SAAS;AAAA,MACvE,cAAc,QAAQ;AAAA,MACtB,GAAI,QAAQ,0BAA0B,aACnC,EAAE,uBAAuB,WAAW,IACpC,CAAC;AAAA,IACL,CAAC;AAAA,EACF,EACC,OAAO,KAAK;AACf;AAEO,SAAS,0BAA0B,OAAiC;AAC1E,MAAI,UAAU,OAAW;AACzB,MAAI,CAAC,SAAS,MAAM,SAAS,kCAAkC;AAC9D,UAAM,IAAI;AAAA,MACT,gDAAgD,gCAAgC;AAAA,IACjF;AAAA,EACD;AACD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
2
|
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
-
import {
|
|
4
|
-
resolvePiInvocation
|
|
5
|
-
} from "./chunk-IGAMVWFN.ts";
|
|
6
3
|
import {
|
|
7
4
|
classifyStructuredOutcome
|
|
8
5
|
} from "./chunk-47SK2QYC.ts";
|
|
9
6
|
import {
|
|
10
7
|
revokeCapabilityGrant
|
|
11
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-YPJEN6NU.ts";
|
|
9
|
+
import {
|
|
10
|
+
JsonLineDecoder,
|
|
11
|
+
KILL_GRACE_MS,
|
|
12
|
+
terminateProcess
|
|
13
|
+
} from "./chunk-6H6TBBED.ts";
|
|
14
|
+
import {
|
|
15
|
+
resolvePiInvocation
|
|
16
|
+
} from "./chunk-IGAMVWFN.ts";
|
|
12
17
|
import {
|
|
13
18
|
buildTimeoutFinalizationPrompt,
|
|
14
19
|
resolveTimeoutFinalizationMs
|
|
15
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-NTRPLF46.ts";
|
|
16
21
|
import {
|
|
17
22
|
formatResultFailure,
|
|
18
23
|
getFinalOutput,
|
|
19
24
|
getResultFinalOutput,
|
|
20
25
|
isResultError
|
|
21
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-X4NMONPE.ts";
|
|
22
27
|
import {
|
|
23
28
|
TURN_TERMINATION_VERSION,
|
|
24
29
|
TimeoutProgressJournal,
|
|
@@ -42,69 +47,6 @@ import {
|
|
|
42
47
|
truncateUtf8
|
|
43
48
|
} from "./chunk-H3FP6DLR.ts";
|
|
44
49
|
|
|
45
|
-
// src/protocol.ts
|
|
46
|
-
import { StringDecoder } from "node:string_decoder";
|
|
47
|
-
var DEFAULT_MAX_LINE_BYTES = 256 * 1024;
|
|
48
|
-
var JsonLineDecoder = class {
|
|
49
|
-
constructor(options) {
|
|
50
|
-
this.options = options;
|
|
51
|
-
const maxLineBytes = options.maxLineBytes ?? DEFAULT_MAX_LINE_BYTES;
|
|
52
|
-
if (!Number.isSafeInteger(maxLineBytes) || maxLineBytes < 1) {
|
|
53
|
-
throw new Error("JSON line limit must be a positive safe integer");
|
|
54
|
-
}
|
|
55
|
-
this.maxLineBytes = maxLineBytes;
|
|
56
|
-
}
|
|
57
|
-
options;
|
|
58
|
-
buffer = "";
|
|
59
|
-
droppingOversizedLine = false;
|
|
60
|
-
maxLineBytes;
|
|
61
|
-
decoder = new StringDecoder("utf8");
|
|
62
|
-
push(chunk) {
|
|
63
|
-
this.buffer += typeof chunk === "string" ? chunk : this.decoder.write(chunk);
|
|
64
|
-
this.drain(false);
|
|
65
|
-
}
|
|
66
|
-
finish() {
|
|
67
|
-
this.buffer += this.decoder.end();
|
|
68
|
-
this.drain(true);
|
|
69
|
-
this.buffer = "";
|
|
70
|
-
this.droppingOversizedLine = false;
|
|
71
|
-
}
|
|
72
|
-
drain(flush) {
|
|
73
|
-
while (true) {
|
|
74
|
-
const newline = this.buffer.indexOf("\n");
|
|
75
|
-
if (newline < 0) break;
|
|
76
|
-
const line = this.buffer.slice(0, newline).replace(/\r$/, "");
|
|
77
|
-
this.buffer = this.buffer.slice(newline + 1);
|
|
78
|
-
if (this.droppingOversizedLine) {
|
|
79
|
-
this.droppingOversizedLine = false;
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
this.processLine(line);
|
|
83
|
-
}
|
|
84
|
-
if (!flush && Buffer.byteLength(this.buffer, "utf8") > this.maxLineBytes) {
|
|
85
|
-
this.options.onOversized?.(Buffer.byteLength(this.buffer, "utf8"));
|
|
86
|
-
this.buffer = "";
|
|
87
|
-
this.droppingOversizedLine = true;
|
|
88
|
-
}
|
|
89
|
-
if (flush && this.buffer.length > 0 && !this.droppingOversizedLine) {
|
|
90
|
-
this.processLine(this.buffer.replace(/\r$/, ""));
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
processLine(line) {
|
|
94
|
-
if (!line.trim()) return;
|
|
95
|
-
const bytes = Buffer.byteLength(line, "utf8");
|
|
96
|
-
if (bytes > this.maxLineBytes) {
|
|
97
|
-
this.options.onOversized?.(bytes);
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
try {
|
|
101
|
-
this.options.onValue(JSON.parse(line));
|
|
102
|
-
} catch {
|
|
103
|
-
this.options.onMalformed?.(line);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
|
|
108
50
|
// src/runner.ts
|
|
109
51
|
import { spawn } from "node:child_process";
|
|
110
52
|
import * as fs from "node:fs";
|
|
@@ -168,7 +110,6 @@ function mergeUsageStats(target, addition) {
|
|
|
168
110
|
}
|
|
169
111
|
|
|
170
112
|
// src/runner.ts
|
|
171
|
-
var KILL_GRACE_MS = 5e3;
|
|
172
113
|
var MAX_RECENT_ACTIVITY_ITEMS = 10;
|
|
173
114
|
var MAX_RECENT_ACTIVITY_BYTES = 8 * 1024;
|
|
174
115
|
var MAX_RECENT_ACTIVITY_ARGUMENT_BYTES = 1024;
|
|
@@ -319,39 +260,6 @@ async function writePromptToTempFile(agentName, prompt) {
|
|
|
319
260
|
});
|
|
320
261
|
return { dir: tmpDir, filePath };
|
|
321
262
|
}
|
|
322
|
-
function signalProcess(proc, signal) {
|
|
323
|
-
if (process.platform !== "win32" && proc.pid) {
|
|
324
|
-
try {
|
|
325
|
-
process.kill(-proc.pid, signal);
|
|
326
|
-
return;
|
|
327
|
-
} catch {
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
try {
|
|
331
|
-
proc.kill(signal);
|
|
332
|
-
} catch {
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
function terminateProcess(proc, graceMs = KILL_GRACE_MS) {
|
|
336
|
-
const leaderExited = proc.exitCode !== null || proc.signalCode !== null;
|
|
337
|
-
const capturedOutputClosed = [proc.stdout, proc.stderr].every(
|
|
338
|
-
(stream) => !stream || stream.readableEnded || stream.destroyed
|
|
339
|
-
);
|
|
340
|
-
let closed = leaderExited && capturedOutputClosed;
|
|
341
|
-
const onClose = () => {
|
|
342
|
-
closed = true;
|
|
343
|
-
};
|
|
344
|
-
proc.once("close", onClose);
|
|
345
|
-
if (!closed) signalProcess(proc, "SIGTERM");
|
|
346
|
-
const escalation = setTimeout(() => {
|
|
347
|
-
if (!closed) signalProcess(proc, "SIGKILL");
|
|
348
|
-
}, graceMs);
|
|
349
|
-
escalation.unref();
|
|
350
|
-
return () => {
|
|
351
|
-
clearTimeout(escalation);
|
|
352
|
-
proc.off("close", onClose);
|
|
353
|
-
};
|
|
354
|
-
}
|
|
355
263
|
async function runSingleAgent(defaultCwd, agents, agentName, task, cwd, step, signal, thinkingLevel, timeoutMs, onUpdate, makeDetails, invocationOverride, launchPolicy) {
|
|
356
264
|
const agent = agents.find((a) => a.name === agentName);
|
|
357
265
|
if (!agent) {
|
|
@@ -904,10 +812,8 @@ ${message}.`,
|
|
|
904
812
|
}
|
|
905
813
|
|
|
906
814
|
export {
|
|
907
|
-
JsonLineDecoder,
|
|
908
815
|
buildFanInContext,
|
|
909
816
|
mapWithConcurrencyLimit,
|
|
910
|
-
terminateProcess,
|
|
911
817
|
runSingleAgent
|
|
912
818
|
};
|
|
913
|
-
//# sourceMappingURL=chunk-
|
|
819
|
+
//# sourceMappingURL=chunk-ITVWPNU4.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/runner.ts", "../../src/pi-args.ts", "../../src/runner-usage.ts"],
|
|
4
|
+
"sourcesContent": ["import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@earendil-works/pi-ai\";\nimport { withFileMutationQueue } from \"@earendil-works/pi-coding-agent\";\nimport type { AgentConfig, SubagentThinkingLevel } from \"./agents/types.js\";\nimport { revokeCapabilityGrant } from \"./capability-grant.js\";\nimport {\n\tappendBounded,\n\tDEFAULT_MAX_CONTEXT_BYTES,\n\tDEFAULT_MAX_MESSAGES,\n\tDEFAULT_MAX_OUTPUT_BYTES,\n\tDEFAULT_MAX_STDERR_BYTES,\n\tMAX_SUBAGENT_TIMEOUT_MS,\n\ttruncateUtf8,\n} from \"./limits.js\";\nimport { classifyStructuredOutcome } from \"./outcome.js\";\nimport { buildPiArgs } from \"./pi-args.js\";\nimport { resolvePiInvocation } from \"./pi-invocation.js\";\nimport { KILL_GRACE_MS, terminateProcess } from \"./process-control.js\";\nimport { JsonLineDecoder } from \"./protocol.js\";\nimport { parseAnyStructuredSubagentResult } from \"./result-contract.js\";\nimport { formatResultFailure, getResultFinalOutput, isResultError } from \"./runner-outcome.js\";\nimport { getFinalOutput } from \"./runner-result.js\";\nimport type { ChildLaunchPolicy, RecentActivityItem, SingleResult } from \"./runner-types.js\";\nimport {\n\taddUsageValue,\n\tmergeUsageStats,\n\tprotocolUsageCost,\n\tprotocolUsageCount,\n} from \"./runner-usage.js\";\nimport type { OnUpdateCallback, SubagentDetails } from \"./subagent-details.js\";\nimport {\n\tformatTimeoutCheckpoint,\n\tformatTurnTerminationMessage,\n\tjournalMessages,\n\tTimeoutProgressJournal,\n\tTURN_TERMINATION_VERSION,\n} from \"./timeout-checkpoint.js\";\nimport {\n\tbuildTimeoutFinalizationPrompt,\n\tresolveTimeoutFinalizationMs,\n} from \"./timeout-finalization.js\";\nimport { TurnBudgetMonitor, type TurnBudgetStop } from \"./turn-budget.js\";\n\nexport type { PiArgsOptions } from \"./pi-args.js\";\nexport { buildPiArgs } from \"./pi-args.js\";\nexport { KILL_GRACE_MS, terminateProcess } from \"./process-control.js\";\nexport {\n\tformatResultFailure,\n\tgetResultFinalOutput,\n\tisResultError,\n} from \"./runner-outcome.js\";\nexport type { ChildLaunchPolicy, RecentActivityItem, SingleResult } from \"./runner-types.js\";\nexport type { UsageStats } from \"./runner-usage.js\";\nexport type { OnUpdateCallback, PanelDetails, SubagentDetails } from \"./subagent-details.js\";\n\nconst MAX_RECENT_ACTIVITY_ITEMS = 10;\nconst MAX_RECENT_ACTIVITY_BYTES = 8 * 1024;\nconst MAX_RECENT_ACTIVITY_ARGUMENT_BYTES = 1024;\n\nfunction boundMessageText(\n\tmessage: Message,\n\tmaxBytes: number,\n): { message?: Message; bytes: number; truncated: boolean } {\n\tconst originalBytes = Buffer.byteLength(JSON.stringify(message), \"utf8\");\n\tif (Number.isSafeInteger(maxBytes) && maxBytes >= 0 && originalBytes <= maxBytes) {\n\t\treturn { message, bytes: originalBytes, truncated: false };\n\t}\n\tif (!Number.isSafeInteger(maxBytes) || maxBytes < 0) return { bytes: 0, truncated: true };\n\n\tconst content: Array<\n\t\t| { type: \"text\"; text: string }\n\t\t| { type: \"toolCall\"; id: string; name: string; arguments: Record<string, unknown> }\n\t> = [];\n\tconst bounded = () => ({ ...message, content }) as Message;\n\tconst fits = () => Buffer.byteLength(JSON.stringify(bounded()), \"utf8\") <= maxBytes;\n\tconst addText = (text: string, prepend = false) => {\n\t\tif (!text.trim()) return;\n\t\tconst part = { type: \"text\" as const, text: \"\" };\n\t\tif (prepend) content.unshift(part);\n\t\telse content.push(part);\n\t\tif (!fits()) {\n\t\t\tcontent.splice(content.indexOf(part), 1);\n\t\t\treturn;\n\t\t}\n\t\tlet low = 0;\n\t\tlet high = Buffer.byteLength(text, \"utf8\");\n\t\twhile (low < high) {\n\t\t\tconst middle = Math.ceil((low + high) / 2);\n\t\t\tpart.text = truncateUtf8(text, middle).text;\n\t\t\tif (fits()) low = middle;\n\t\t\telse high = middle - 1;\n\t\t}\n\t\tpart.text = truncateUtf8(text, low).text;\n\t\tif (!part.text.trim()) content.splice(content.indexOf(part), 1);\n\t};\n\tconst addToolCall = (part: Extract<Message[\"content\"][number], { type: \"toolCall\" }>) => {\n\t\tconst toolCall = {\n\t\t\ttype: \"toolCall\" as const,\n\t\t\tid: part.id,\n\t\t\tname: part.name,\n\t\t\targuments: part.arguments,\n\t\t};\n\t\tcontent.unshift(toolCall);\n\t\tif (fits()) return;\n\t\tconst arguments_: Record<string, unknown> = {};\n\t\tfor (const key of [\"command\", \"path\", \"file_path\", \"pattern\", \"url\"]) {\n\t\t\tconst value = part.arguments[key];\n\t\t\tif (typeof value === \"string\") arguments_[key] = truncateUtf8(value, 256).text;\n\t\t}\n\t\ttoolCall.arguments = arguments_;\n\t\tif (fits()) return;\n\t\ttoolCall.arguments = {};\n\t\tif (!fits()) content.shift();\n\t};\n\n\tif (message.role === \"assistant\") {\n\t\tfor (let index = message.content.length - 1; index >= 0; index--) {\n\t\t\tconst part = message.content[index];\n\t\t\tif (part.type === \"text\") addText(part.text, true);\n\t\t\telse if (part.type === \"toolCall\") addToolCall(part);\n\t\t}\n\t} else {\n\t\tfor (const part of message.content) {\n\t\t\tif (typeof part === \"object\" && part && part.type === \"text\") addText(part.text);\n\t\t}\n\t}\n\n\tif (content.length === 0) return { bytes: 0, truncated: true };\n\tconst result = bounded();\n\tconst bytes = Buffer.byteLength(JSON.stringify(result), \"utf8\");\n\treturn { message: result, bytes, truncated: true };\n}\nfunction compactRecentActivityArguments(args: Record<string, unknown>): Record<string, unknown> {\n\tif (Buffer.byteLength(JSON.stringify(args), \"utf8\") <= MAX_RECENT_ACTIVITY_ARGUMENT_BYTES)\n\t\treturn args;\n\tconst compact: Record<string, unknown> = {};\n\tfor (const key of [\"command\", \"path\", \"file_path\", \"pattern\", \"url\", \"selector\"]) {\n\t\tconst value = args[key];\n\t\tif (typeof value === \"string\") compact[key] = truncateUtf8(value, 256).text;\n\t\telse if (typeof value === \"number\" || typeof value === \"boolean\") compact[key] = value;\n\t}\n\treturn compact;\n}\n\nfunction appendRecentActivity(result: SingleResult, message: Message): void {\n\tif (message.role !== \"assistant\") return;\n\tconst append = (item: RecentActivityItem) => {\n\t\tresult.recentActivity ??= [];\n\t\tresult.recentActivityTotal = (result.recentActivityTotal ?? 0) + 1;\n\t\tresult.recentActivity.push(item);\n\t\tif (result.recentActivity.length > MAX_RECENT_ACTIVITY_ITEMS) {\n\t\t\tresult.recentActivity.splice(0, result.recentActivity.length - MAX_RECENT_ACTIVITY_ITEMS);\n\t\t}\n\t\twhile (\n\t\t\tBuffer.byteLength(JSON.stringify(result.recentActivity), \"utf8\") > MAX_RECENT_ACTIVITY_BYTES\n\t\t) {\n\t\t\tresult.recentActivity.shift();\n\t\t}\n\t};\n\tfor (const part of message.content) {\n\t\tif (part.type === \"text\") {\n\t\t\tconst text = part.text.trim();\n\t\t\tif (text) append({ type: \"text\", text: truncateUtf8(text, 1024).text });\n\t\t} else if (part.type === \"toolCall\") {\n\t\t\tappend({\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tname: part.name,\n\t\t\t\targs: compactRecentActivityArguments(part.arguments),\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function buildFanInContext(\n\tresults: SingleResult[],\n\tmaxBytes = DEFAULT_MAX_CONTEXT_BYTES,\n): string {\n\tconst text = results\n\t\t.map((result, index) => {\n\t\t\tconst failed = isResultError(result);\n\t\t\tconst status = result.exitCode === -1 ? \"running\" : failed ? \"failed\" : \"completed\";\n\t\t\tconst output = getResultFinalOutput(result);\n\t\t\tconst error = result.errorMessage || result.stderr.trim();\n\t\t\tconst resultText = failed\n\t\t\t\t? `${error ? \"Error\" : output ? \"Partial output\" : \"Error\"}:\\n${formatResultFailure(result)}`\n\t\t\t\t: result.structuredResult\n\t\t\t\t\t? `Structured result:\\n${JSON.stringify(result.structuredResult)}`\n\t\t\t\t\t: output\n\t\t\t\t\t\t? `Output:\\n${output}`\n\t\t\t\t\t\t: \"Output: (no output)\";\n\t\t\treturn [\n\t\t\t\t`## Result ${index + 1}: ${result.agent} (${status})`,\n\t\t\t\t`Task: ${result.task}`,\n\t\t\t\tresultText,\n\t\t\t].join(\"\\n\\n\");\n\t\t})\n\t\t.join(\"\\n\\n---\\n\\n\");\n\treturn truncateUtf8(text, maxBytes).text;\n}\n\nexport async function mapWithConcurrencyLimit<TIn, TOut>(\n\titems: TIn[],\n\tconcurrency: number,\n\tfn: (item: TIn, index: number) => Promise<TOut>,\n\tsignal?: AbortSignal,\n\tonSkipped?: (item: TIn, index: number) => TOut,\n): Promise<TOut[]> {\n\tif (items.length === 0) return [];\n\tconst limit = Math.max(1, Math.min(concurrency, items.length));\n\tconst results: TOut[] = new Array(items.length);\n\tlet nextIndex = 0;\n\tconst workers = new Array(limit).fill(null).map(async () => {\n\t\twhile (true) {\n\t\t\tconst current = nextIndex++;\n\t\t\tif (current >= items.length) return;\n\t\t\tif (signal?.aborted && onSkipped) {\n\t\t\t\tresults[current] = onSkipped(items[current], current);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresults[current] = await fn(items[current], current);\n\t\t}\n\t});\n\tawait Promise.all(workers);\n\treturn results;\n}\n\nasync function writePromptToTempFile(\n\tagentName: string,\n\tprompt: string,\n): Promise<{ dir: string; filePath: string }> {\n\tconst tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"pi-subagent-\"));\n\tconst safeName = agentName.replace(/[^\\w.-]+/g, \"_\");\n\tconst filePath = path.join(tmpDir, `prompt-${safeName}.md`);\n\tawait withFileMutationQueue(filePath, async () => {\n\t\tawait fs.promises.writeFile(filePath, prompt, { encoding: \"utf-8\", mode: 0o600 });\n\t});\n\treturn { dir: tmpDir, filePath };\n}\n\nexport async function runSingleAgent(\n\tdefaultCwd: string,\n\tagents: AgentConfig[],\n\tagentName: string,\n\ttask: string,\n\tcwd: string | undefined,\n\tstep: number | undefined,\n\tsignal: AbortSignal | undefined,\n\tthinkingLevel: SubagentThinkingLevel | undefined,\n\ttimeoutMs: number,\n\tonUpdate: OnUpdateCallback | undefined,\n\tmakeDetails: (results: SingleResult[]) => SubagentDetails,\n\tinvocationOverride?: { command: string; argsPrefix?: string[] },\n\tlaunchPolicy?: ChildLaunchPolicy,\n): Promise<SingleResult> {\n\tconst agent = agents.find((a) => a.name === agentName);\n\n\tif (!agent) {\n\t\tconst available = agents.map((a) => `\"${a.name}\"`).join(\", \") || \"none\";\n\t\treturn {\n\t\t\tagent: agentName,\n\t\t\tagentSource: \"unknown\",\n\t\t\ttask,\n\t\t\texitCode: 1,\n\t\t\tmessages: [],\n\t\t\tstderr: `Unknown agent: \"${agentName}\". Available agents: ${available}.`,\n\t\t\tusage: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\tcost: 0,\n\t\t\t\tcontextTokens: 0,\n\t\t\t\tturns: 0,\n\t\t\t},\n\t\t\tthinkingLevel,\n\t\t\tstep,\n\t\t\tfinalOutput: \"\",\n\t\t};\n\t}\n\n\tconst temporaryPrompts: Array<{ dir: string; filePath: string }> = [];\n\tlet tmpPromptPath: string | null = null;\n\tlet baseSystemPromptPath: string | null = null;\n\n\tlet latestAssistantOutput = \"\";\n\tlet terminalAssistantOutput: string | undefined;\n\n\tconst progressJournal = new TimeoutProgressJournal();\n\tconst currentResult: SingleResult = {\n\t\tagent: agentName,\n\t\tagentSource: agent.source,\n\t\ttask: launchPolicy?.displayTask ?? task,\n\t\texitCode: 0,\n\t\tmessages: [],\n\t\tstderr: \"\",\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\tcost: 0,\n\t\t\tcontextTokens: 0,\n\t\t\tturns: 0,\n\t\t},\n\t\tmodel: agent.model ?? undefined,\n\t\tthinkingLevel,\n\t\tstep,\n\t\ttimeoutMs,\n\t\tcontract: launchPolicy?.contract,\n\t\tresultFormat: launchPolicy?.resultFormat,\n\t\texecutionPlan: launchPolicy?.executionPlan,\n\t\tcapabilityGrant: launchPolicy?.capabilityGrant,\n\t};\n\tconst selectedAssistantOutput = () =>\n\t\tterminalAssistantOutput !== undefined\n\t\t\t? terminalAssistantOutput\n\t\t\t: latestAssistantOutput || getFinalOutput(currentResult.messages);\n\tconst setErrorMessage = (message: string) => {\n\t\tconst bounded = truncateUtf8(message, DEFAULT_MAX_STDERR_BYTES);\n\t\tcurrentResult.errorMessage = bounded.text;\n\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\treturn bounded.text;\n\t};\n\n\tconst emitUpdate = () => {\n\t\tconst latest = truncateUtf8(selectedAssistantOutput(), DEFAULT_MAX_OUTPUT_BYTES);\n\t\tcurrentResult.finalOutput = latest.text;\n\t\tcurrentResult.truncated ||= latest.truncated;\n\t\tif (onUpdate) {\n\t\t\tonUpdate({\n\t\t\t\tcontent: [{ type: \"text\", text: currentResult.finalOutput || \"(running...)\" }],\n\t\t\t\tdetails: makeDetails([currentResult]),\n\t\t\t});\n\t\t}\n\t};\n\n\ttry {\n\t\tconst effectiveCwd = cwd ?? defaultCwd;\n\t\ttry {\n\t\t\tif (!fs.statSync(effectiveCwd).isDirectory()) throw new Error(\"not a directory\");\n\t\t} catch (error) {\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stopReason = \"error\";\n\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\tcurrentResult.stderr = setErrorMessage(`Invalid subagent cwd: ${effectiveCwd} (${reason})`);\n\t\t\treturn currentResult;\n\t\t}\n\n\t\tif (signal?.aborted) {\n\t\t\tcurrentResult.exitCode = 130;\n\t\t\tcurrentResult.aborted = true;\n\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\tsetErrorMessage(\"Subagent was aborted before start\");\n\t\t\treturn currentResult;\n\t\t}\n\t\tif (!Number.isFinite(timeoutMs) || timeoutMs < 1 || timeoutMs > MAX_SUBAGENT_TIMEOUT_MS) {\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stopReason = \"error\";\n\t\t\tsetErrorMessage(\n\t\t\t\t`Invalid subagent timeout: expected 1-${MAX_SUBAGENT_TIMEOUT_MS}ms, received ${timeoutMs}`,\n\t\t\t);\n\t\t\treturn currentResult;\n\t\t}\n\n\t\tif (launchPolicy?.baseSystemPrompt?.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(`${agent.name}-base`, launchPolicy.baseSystemPrompt);\n\t\t\ttemporaryPrompts.push(tmp);\n\t\t\tbaseSystemPromptPath = tmp.filePath;\n\t\t}\n\t\tif (agent.systemPrompt.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(agent.name, agent.systemPrompt);\n\t\t\ttemporaryPrompts.push(tmp);\n\t\t\ttmpPromptPath = tmp.filePath;\n\t\t}\n\t\tif (signal?.aborted) {\n\t\t\tcurrentResult.exitCode = 130;\n\t\t\tcurrentResult.aborted = true;\n\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\tsetErrorMessage(\"Subagent was aborted before launch\");\n\t\t\treturn currentResult;\n\t\t}\n\n\t\tconst effectiveTools =\n\t\t\tlaunchPolicy && Object.hasOwn(launchPolicy, \"tools\") ? launchPolicy.tools : agent.tools;\n\t\tconst selectedTools =\n\t\t\teffectiveTools === undefined\n\t\t\t\t? undefined\n\t\t\t\t: [...new Set([...effectiveTools, ...(launchPolicy?.additionalTools ?? [])])];\n\t\tconst args = buildPiArgs({\n\t\t\tmodel: agent.model,\n\t\t\tthinkingLevel,\n\t\t\ttools: selectedTools,\n\t\t\tdisableExtensions: launchPolicy?.disableExtensions,\n\t\t\tdisableSkills: launchPolicy?.disableSkills,\n\t\t\tdisablePromptTemplates: launchPolicy?.disablePromptTemplates,\n\t\t\tdisableContextFiles: launchPolicy?.disableContextFiles,\n\t\t\tprojectTrust: launchPolicy?.projectTrust,\n\t\t\tbaseSystemPromptPath: baseSystemPromptPath ?? undefined,\n\t\t\tappendSystemPromptPaths: launchPolicy?.appendSystemPromptPaths,\n\t\t\textensionPaths: launchPolicy?.extensionPaths,\n\t\t\tsystemPromptPath: tmpPromptPath ?? undefined,\n\t\t\ttask,\n\t\t});\n\t\tlet invocation: { command: string; args: string[] };\n\t\ttry {\n\t\t\tinvocation = invocationOverride\n\t\t\t\t? {\n\t\t\t\t\t\tcommand: invocationOverride.command,\n\t\t\t\t\t\targs: [...(invocationOverride.argsPrefix ?? []), ...args],\n\t\t\t\t\t}\n\t\t\t\t: resolvePiInvocation(args);\n\t\t} catch (error) {\n\t\t\tcurrentResult.launchFailed = true;\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stderr = setErrorMessage(\n\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t);\n\t\t\treturn currentResult;\n\t\t}\n\t\tlet wasAborted = false;\n\t\tlet timedOut = false;\n\t\tlet budgetStop:\n\t\t\t| TurnBudgetStop\n\t\t\t| { reason: \"work_timeout\" | \"orchestration_timeout\"; limit: number }\n\t\t\t| undefined;\n\n\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tlet cleanupTermination: (() => void) | undefined;\n\t\t\tlet timeout: NodeJS.Timeout | undefined;\n\t\t\tlet terminationDeadline: NodeJS.Timeout | undefined;\n\t\t\tlet abortHandler: (() => void) | undefined;\n\t\t\tlet budgetMonitor: TurnBudgetMonitor | undefined;\n\t\t\tconst finish = (code: number) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\tif (terminationDeadline) clearTimeout(terminationDeadline);\n\t\t\t\tcleanupTermination?.();\n\t\t\t\tbudgetMonitor?.dispose();\n\t\t\t\tif (signal && abortHandler) signal.removeEventListener(\"abort\", abortHandler);\n\t\t\t\tresolve(code);\n\t\t\t};\n\t\t\tlet proc: ReturnType<typeof spawn>;\n\t\t\ttry {\n\t\t\t\tproc = spawn(invocation.command, invocation.args, {\n\t\t\t\t\tcwd: effectiveCwd,\n\t\t\t\t\tdetached: process.platform !== \"win32\",\n\t\t\t\t\tshell: false,\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\t\tenv: {\n\t\t\t\t\t\t...process.env,\n\t\t\t\t\t\t...launchPolicy?.env,\n\t\t\t\t\t\tPI_SUBAGENT_DEPTH: String(\n\t\t\t\t\t\t\t(Number.parseInt(process.env.PI_SUBAGENT_DEPTH ?? \"0\", 10) || 0) + 1,\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tcurrentResult.launchFailed = true;\n\t\t\t\tcurrentResult.stderr = setErrorMessage(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t);\n\t\t\t\tfinish(1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst addMessage = (msg: Message) => {\n\t\t\t\tconst boundedMessage = boundMessageText(msg, DEFAULT_MAX_OUTPUT_BYTES - 2);\n\t\t\t\tcurrentResult.truncated ||= boundedMessage.truncated;\n\t\t\t\tif (!boundedMessage.message) return;\n\t\t\t\twhile (\n\t\t\t\t\tcurrentResult.messages.length >= DEFAULT_MAX_MESSAGES ||\n\t\t\t\t\tBuffer.byteLength(\n\t\t\t\t\t\tJSON.stringify([...currentResult.messages, boundedMessage.message]),\n\t\t\t\t\t\t\"utf8\",\n\t\t\t\t\t) > DEFAULT_MAX_OUTPUT_BYTES\n\t\t\t\t) {\n\t\t\t\t\tconst removed = currentResult.messages.shift();\n\t\t\t\t\tif (!removed) break;\n\t\t\t\t\tcurrentResult.truncated = true;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tBuffer.byteLength(\n\t\t\t\t\t\tJSON.stringify([...currentResult.messages, boundedMessage.message]),\n\t\t\t\t\t\t\"utf8\",\n\t\t\t\t\t) > DEFAULT_MAX_OUTPUT_BYTES\n\t\t\t\t) {\n\t\t\t\t\tcurrentResult.truncated = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcurrentResult.messages.push(boundedMessage.message);\n\t\t\t};\n\t\t\tconst processEvent = (raw: unknown) => {\n\t\t\t\tif (!raw || typeof raw !== \"object\") return;\n\t\t\t\tconst event = raw as { type?: string; message?: Message };\n\t\t\t\tif (event.type === \"message_end\" && event.message) {\n\t\t\t\t\tconst msg = event.message;\n\t\t\t\t\tjournalMessages(progressJournal, [msg]);\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tconst output = truncateUtf8(getFinalOutput([msg]), DEFAULT_MAX_OUTPUT_BYTES);\n\t\t\t\t\t\tcurrentResult.truncated ||= output.truncated;\n\t\t\t\t\t\tif (output.text) latestAssistantOutput = output.text;\n\t\t\t\t\t\tif (msg.stopReason === \"stop\" || msg.stopReason === \"length\") {\n\t\t\t\t\t\t\tterminalAssistantOutput = output.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tappendRecentActivity(currentResult, msg);\n\t\t\t\t\taddMessage(msg);\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tcurrentResult.usage.turns++;\n\t\t\t\t\t\tbudgetMonitor?.recordToolCalls(\n\t\t\t\t\t\t\tmsg.content.filter((part) => part.type === \"toolCall\").length,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbudgetMonitor?.recordAssistantTurn(msg.stopReason);\n\t\t\t\t\t\tconst usage = msg.usage;\n\t\t\t\t\t\tif (usage && typeof usage === \"object\") {\n\t\t\t\t\t\t\tconst input = protocolUsageCount(usage.input);\n\t\t\t\t\t\t\tconst output = protocolUsageCount(usage.output);\n\t\t\t\t\t\t\tconst cacheRead = protocolUsageCount(usage.cacheRead);\n\t\t\t\t\t\t\tconst cacheWrite = protocolUsageCount(usage.cacheWrite);\n\t\t\t\t\t\t\tconst reportedTotal = protocolUsageCount(usage.totalTokens);\n\t\t\t\t\t\t\tconst turnTotal =\n\t\t\t\t\t\t\t\treportedTotal ||\n\t\t\t\t\t\t\t\taddUsageValue(addUsageValue(input, output), addUsageValue(cacheRead, cacheWrite));\n\t\t\t\t\t\t\tconst cost = usage.cost && typeof usage.cost === \"object\" ? usage.cost : undefined;\n\t\t\t\t\t\t\tcurrentResult.usage.input = addUsageValue(currentResult.usage.input, input);\n\t\t\t\t\t\t\tcurrentResult.usage.output = addUsageValue(currentResult.usage.output, output);\n\t\t\t\t\t\t\tcurrentResult.usage.cacheRead = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.cacheRead,\n\t\t\t\t\t\t\t\tcacheRead,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.cacheWrite = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.cacheWrite,\n\t\t\t\t\t\t\t\tcacheWrite,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.cost = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.cost,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.total),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costInput = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costInput ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.input),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costOutput = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costOutput ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.output),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costCacheRead = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costCacheRead ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.cacheRead),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costCacheWrite = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costCacheWrite ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.cacheWrite),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.totalTokens = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.totalTokens ?? 0,\n\t\t\t\t\t\t\t\tturnTotal,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.contextTokens = turnTotal;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof msg.provider === \"string\") currentResult.actualProvider = msg.provider;\n\t\t\t\t\t\tconst actualModel =\n\t\t\t\t\t\t\ttypeof msg.responseModel === \"string\"\n\t\t\t\t\t\t\t\t? msg.responseModel\n\t\t\t\t\t\t\t\t: typeof msg.model === \"string\"\n\t\t\t\t\t\t\t\t\t? msg.model\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tif (actualModel) currentResult.actualModel = actualModel;\n\t\t\t\t\t\tif (typeof msg.stopReason === \"string\") currentResult.stopReason = msg.stopReason;\n\t\t\t\t\t\tif (typeof msg.errorMessage === \"string\") setErrorMessage(msg.errorMessage);\n\t\t\t\t\t}\n\t\t\t\t\temitUpdate();\n\t\t\t\t} else if (event.type === \"tool_result_end\" && event.message) {\n\t\t\t\t\tjournalMessages(progressJournal, [event.message]);\n\t\t\t\t\tbudgetMonitor?.recordActivity();\n\t\t\t\t\taddMessage(event.message);\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst decoder = new JsonLineDecoder({\n\t\t\t\tonValue: processEvent,\n\t\t\t\tonMalformed: () => {\n\t\t\t\t\tcurrentResult.malformedEvents = (currentResult.malformedEvents ?? 0) + 1;\n\t\t\t\t},\n\t\t\t\tonOversized: () => {\n\t\t\t\t\tcurrentResult.truncated = true;\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst beginTermination = (exitCode: number) => {\n\t\t\t\tif (cleanupTermination || settled) return;\n\t\t\t\tcleanupTermination = terminateProcess(proc);\n\t\t\t\tterminationDeadline = setTimeout(() => {\n\t\t\t\t\tdecoder.finish();\n\t\t\t\t\tproc.stdin?.destroy();\n\t\t\t\t\tproc.stdout?.destroy();\n\t\t\t\t\tproc.stderr?.destroy();\n\t\t\t\t\tfinish(exitCode);\n\t\t\t\t}, KILL_GRACE_MS + 1_000);\n\t\t\t};\n\t\t\tconst stopForBudget = (\n\t\t\t\tstop: TurnBudgetStop | { reason: \"work_timeout\" | \"orchestration_timeout\"; limit: number },\n\t\t\t) => {\n\t\t\t\tif (budgetStop || settled || wasAborted) return;\n\t\t\t\tbudgetStop = stop;\n\t\t\t\ttimedOut = stop.reason.endsWith(\"timeout\");\n\t\t\t\tcurrentResult.timedOut = timedOut || undefined;\n\t\t\t\tcurrentResult.stopReason = timedOut ? \"timeout\" : \"limit\";\n\t\t\t\tconst message = formatTurnTerminationMessage(stop.reason, stop.limit);\n\t\t\t\tsetErrorMessage(message);\n\t\t\t\tconst bounded = appendBounded(\n\t\t\t\t\tcurrentResult.stderr,\n\t\t\t\t\t`\\n${message}.`,\n\t\t\t\t\tDEFAULT_MAX_STDERR_BYTES,\n\t\t\t\t);\n\t\t\t\tcurrentResult.stderr = bounded.text;\n\t\t\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\t\t\temitUpdate();\n\t\t\t\tbeginTermination(124);\n\t\t\t};\n\t\t\tbudgetMonitor = new TurnBudgetMonitor({\n\t\t\t\t...launchPolicy?.turnLimits,\n\t\t\t\tonExceeded: stopForBudget,\n\t\t\t});\n\n\t\t\tproc.once(\"spawn\", () => {\n\t\t\t\tcurrentResult.processStarted = true;\n\t\t\t\tif (settled || budgetStop || wasAborted) return;\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tstopForBudget({\n\t\t\t\t\t\treason: launchPolicy?.workTimeoutReason ?? \"work_timeout\",\n\t\t\t\t\t\tlimit: launchPolicy?.workTimeoutReportLimit ?? timeoutMs,\n\t\t\t\t\t});\n\t\t\t\t}, timeoutMs);\n\t\t\t\ttimeout.unref();\n\t\t\t});\n\t\t\tproc.stdout?.on(\"data\", (data) => decoder.push(data));\n\t\t\tproc.stderr?.on(\"data\", (data) => {\n\t\t\t\tconst bounded = appendBounded(\n\t\t\t\t\tcurrentResult.stderr,\n\t\t\t\t\tdata.toString(),\n\t\t\t\t\tDEFAULT_MAX_STDERR_BYTES,\n\t\t\t\t);\n\t\t\t\tcurrentResult.stderr = bounded.text;\n\t\t\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\t\t});\n\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\tdecoder.finish();\n\t\t\t\tfinish(budgetStop ? 124 : wasAborted ? 130 : (code ?? 0));\n\t\t\t});\n\t\t\tproc.on(\"error\", (error) => {\n\t\t\t\tcurrentResult.launchFailed = currentResult.processStarted ? undefined : true;\n\t\t\t\tconst message = setErrorMessage(error.message);\n\t\t\t\tconst bounded = appendBounded(\n\t\t\t\t\tcurrentResult.stderr,\n\t\t\t\t\t`${currentResult.stderr ? \"\\n\" : \"\"}${message}`,\n\t\t\t\t\tDEFAULT_MAX_STDERR_BYTES,\n\t\t\t\t);\n\t\t\t\tcurrentResult.stderr = bounded.text;\n\t\t\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\t\t\tif (currentResult.processStarted) beginTermination(1);\n\t\t\t\telse finish(1);\n\t\t\t});\n\n\t\t\tif (signal) {\n\t\t\t\tabortHandler = () => {\n\t\t\t\t\tif (budgetStop || settled) return;\n\t\t\t\t\twasAborted = true;\n\t\t\t\t\tcurrentResult.aborted = true;\n\t\t\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\t\t\tsetErrorMessage(\"Subagent was aborted\");\n\t\t\t\t\tbeginTermination(130);\n\t\t\t\t};\n\t\t\t\tif (signal.aborted) abortHandler();\n\t\t\t\telse signal.addEventListener(\"abort\", abortHandler, { once: true });\n\t\t\t}\n\t\t});\n\n\t\tif (signal?.aborted && budgetStop) {\n\t\t\tbudgetStop = undefined;\n\t\t\ttimedOut = false;\n\t\t\tcurrentResult.timedOut = undefined;\n\t\t\tcurrentResult.aborted = true;\n\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\tsetErrorMessage(\"Subagent was aborted\");\n\t\t}\n\t\tcurrentResult.exitCode = currentResult.aborted ? 130 : exitCode;\n\t\tconst final = truncateUtf8(selectedAssistantOutput(), DEFAULT_MAX_OUTPUT_BYTES);\n\t\tcurrentResult.finalOutput = final.text;\n\t\tcurrentResult.truncated ||= final.truncated;\n\t\tif (budgetStop) {\n\t\t\tcurrentResult.partialOutput = currentResult.finalOutput || undefined;\n\t\t\tcurrentResult.termination = {\n\t\t\t\tversion: TURN_TERMINATION_VERSION,\n\t\t\t\treason: budgetStop.reason,\n\t\t\t\tlimit: budgetStop.limit,\n\t\t\t\tcheckpoint: progressJournal.checkpoint(task, currentResult.partialOutput),\n\t\t\t\tfinalization: { attempted: false, status: \"skipped\", durationMs: 0 },\n\t\t\t};\n\t\t}\n\t\tconst remainingFinalizationMs = launchPolicy?.orchestrationDeadlineAt\n\t\t\t? Math.floor(launchPolicy.orchestrationDeadlineAt - Date.now())\n\t\t\t: undefined;\n\t\tif (\n\t\t\tbudgetStop &&\n\t\t\tbudgetStop.reason !== \"orchestration_timeout\" &&\n\t\t\tlaunchPolicy?.finalizeOnTimeout !== false &&\n\t\t\t!signal?.aborted &&\n\t\t\t(remainingFinalizationMs === undefined || remainingFinalizationMs > 0)\n\t\t) {\n\t\t\tconst finalizationStartedAt = Date.now();\n\t\t\tconst requestedFinalizationMs = resolveTimeoutFinalizationMs(\n\t\t\t\ttimeoutMs,\n\t\t\t\tlaunchPolicy?.timeoutFinalizationMs,\n\t\t\t);\n\t\t\tconst finalizationMs = Math.min(\n\t\t\t\trequestedFinalizationMs,\n\t\t\t\tremainingFinalizationMs ?? requestedFinalizationMs,\n\t\t\t);\n\t\t\tconst summary = await runSingleAgent(\n\t\t\t\tdefaultCwd,\n\t\t\t\tagents,\n\t\t\t\tagentName,\n\t\t\t\tbuildTimeoutFinalizationPrompt({\n\t\t\t\t\ttask,\n\t\t\t\t\tpartialOutput: currentResult.partialOutput,\n\t\t\t\t\trecentActivity: currentResult.recentActivity,\n\t\t\t\t\tcheckpoint: currentResult.termination?.checkpoint,\n\t\t\t\t\tterminationReason: budgetStop.reason,\n\t\t\t\t\tresultFormat: launchPolicy?.timeoutResultFormat,\n\t\t\t\t}),\n\t\t\t\tcwd,\n\t\t\t\tstep,\n\t\t\t\tsignal,\n\t\t\t\tthinkingLevel,\n\t\t\t\tfinalizationMs,\n\t\t\t\tundefined,\n\t\t\t\tmakeDetails,\n\t\t\t\tinvocationOverride,\n\t\t\t\t{\n\t\t\t\t\t...launchPolicy,\n\t\t\t\t\ttools: [],\n\t\t\t\t\tdisableExtensions: true,\n\t\t\t\t\tdisableSkills: true,\n\t\t\t\t\tdisablePromptTemplates: true,\n\t\t\t\t\tdisableContextFiles: true,\n\t\t\t\t\tappendSystemPromptPaths: undefined,\n\t\t\t\t\tfinalizeOnTimeout: false,\n\t\t\t\t\tturnLimits: undefined,\n\t\t\t\t\tworkTimeoutReason: \"work_timeout\",\n\t\t\t\t\tworkTimeoutReportLimit: finalizationMs,\n\t\t\t\t\torchestrationDeadlineAt: undefined,\n\t\t\t\t},\n\t\t\t);\n\t\t\tmergeUsageStats(currentResult.usage, summary.usage);\n\t\t\tconst summaryOutput = getResultFinalOutput(summary).trim();\n\t\t\tif (summary.exitCode === 0 && summaryOutput) {\n\t\t\t\tcurrentResult.timeoutSummary = summaryOutput;\n\t\t\t\tcurrentResult.finalOutput = summaryOutput;\n\t\t\t\tif (currentResult.termination) {\n\t\t\t\t\tcurrentResult.termination.finalization = {\n\t\t\t\t\t\tattempted: true,\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\tdurationMs: Date.now() - finalizationStartedAt,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcurrentResult.timeoutSummaryError =\n\t\t\t\t\tsummary.errorMessage || summary.stderr.trim() || \"Summary produced no final text\";\n\t\t\t\tif (currentResult.termination) {\n\t\t\t\t\tcurrentResult.termination.finalization = {\n\t\t\t\t\t\tattempted: true,\n\t\t\t\t\t\tstatus: summary.timedOut ? \"timed_out\" : \"failed\",\n\t\t\t\t\t\tdurationMs: Date.now() - finalizationStartedAt,\n\t\t\t\t\t\terror: currentResult.timeoutSummaryError,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentResult.truncated ||= summary.truncated;\n\t\t}\n\t\tif (currentResult.termination && !currentResult.finalOutput.trim()) {\n\t\t\tcurrentResult.finalOutput = formatTimeoutCheckpoint(currentResult.termination.checkpoint);\n\t\t}\n\t\tif (currentResult.exitCode === 0 && launchPolicy?.resultFormat !== undefined) {\n\t\t\tcurrentResult.structuredResult = parseAnyStructuredSubagentResult(\n\t\t\t\tcurrentResult.finalOutput ?? \"\",\n\t\t\t\tlaunchPolicy.resultFormat,\n\t\t\t);\n\t\t\tcurrentResult.resultContractInvalid =\n\t\t\t\tlaunchPolicy.resultFormat !== \"text\" && currentResult.structuredResult === undefined;\n\t\t\tif (\n\t\t\t\tcurrentResult.structuredResult?.version === \"pi-subagents:result:v2\" &&\n\t\t\t\tlaunchPolicy.executionPlan\n\t\t\t) {\n\t\t\t\tcurrentResult.structuredResult.provenance = {\n\t\t\t\t\t...currentResult.structuredResult.provenance,\n\t\t\t\t\t...(launchPolicy.executionPlan.taskId\n\t\t\t\t\t\t? { taskId: launchPolicy.executionPlan.taskId }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\ttaskGeneration: launchPolicy.executionPlan.taskGeneration,\n\t\t\t\t\texecutionPlanId: launchPolicy.executionPlan.id,\n\t\t\t\t\tcancellationLineage: [...launchPolicy.executionPlan.cancellationLineage],\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (currentResult.structuredResult?.version === \"pi-subagents:result:v2\") {\n\t\t\t\tcurrentResult.outcome = classifyStructuredOutcome(\n\t\t\t\t\tcurrentResult.structuredResult.status,\n\t\t\t\t\tcurrentResult.structuredResult.reasonCode,\n\t\t\t\t);\n\t\t\t} else if (currentResult.resultContractInvalid) {\n\t\t\t\tcurrentResult.outcome = classifyStructuredOutcome(\n\t\t\t\t\t\"contract-invalid\",\n\t\t\t\t\t\"malformed-structured-result\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\tcurrentResult.exitCode === 0 &&\n\t\t\tcurrentResult.stopReason !== \"error\" &&\n\t\t\t(currentResult.stopReason === \"toolUse\" || !currentResult.finalOutput.trim())\n\t\t) {\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stopReason = \"error\";\n\t\t\tsetErrorMessage(\"Subagent completed without final text\");\n\t\t}\n\t\tif (currentResult.capabilityGrant?.state === \"active\") {\n\t\t\tcurrentResult.capabilityGrant = revokeCapabilityGrant(\n\t\t\t\tcurrentResult.capabilityGrant,\n\t\t\t\t\"turn-settled\",\n\t\t\t\tDate.now(),\n\t\t\t);\n\t\t}\n\t\tcurrentResult.policy = {\n\t\t\tinherited: [\"environment\"],\n\t\t\toverridden: [\n\t\t\t\t\"cwd\",\n\t\t\t\t...(agent.model ? [\"model\"] : []),\n\t\t\t\t...(thinkingLevel ? [\"thinkingLevel\"] : []),\n\t\t\t\t...(effectiveTools !== undefined ? [\"tools\"] : []),\n\t\t\t\t...(launchPolicy?.disableExtensions ? [\"extensions\"] : []),\n\t\t\t\t...(launchPolicy?.disableSkills ? [\"skills\"] : []),\n\t\t\t\t...(launchPolicy?.disablePromptTemplates ? [\"promptTemplates\"] : []),\n\t\t\t\t...(launchPolicy?.disableContextFiles ? [\"contextFiles\"] : []),\n\t\t\t],\n\t\t\tunsupported: [\"approvalPolicy\", \"sandboxProfile\", \"providerHeaders\"],\n\t\t};\n\t\treturn currentResult;\n\t} finally {\n\t\tfor (const temporary of temporaryPrompts.reverse()) {\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(temporary.filePath);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tfs.rmdirSync(temporary.dir);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\t}\n\t}\n}\n", "import type { SubagentThinkingLevel } from \"./agents/types.js\";\n\nexport interface PiArgsOptions {\n\tmodel?: string;\n\tthinkingLevel?: SubagentThinkingLevel;\n\ttools?: string[];\n\tdisableExtensions?: boolean;\n\tdisableSkills?: boolean;\n\tdisablePromptTemplates?: boolean;\n\tdisableContextFiles?: boolean;\n\tprojectTrust?: boolean;\n\tbaseSystemPromptPath?: string;\n\tappendSystemPromptPaths?: string[];\n\textensionPaths?: string[];\n\t/** Existing single append prompt path retained for compatibility. */\n\tsystemPromptPath?: string;\n\ttask: string;\n}\n\nexport function buildPiArgs(options: PiArgsOptions): string[] {\n\tconst args: string[] = [\"--mode\", \"json\", \"-p\", \"--no-session\"];\n\tif (options.model) args.push(\"--model\", options.model);\n\tif (options.thinkingLevel) args.push(\"--thinking\", options.thinkingLevel);\n\tif (options.disableExtensions) args.push(\"--no-extensions\");\n\tfor (const extensionPath of options.extensionPaths ?? []) args.push(\"-e\", extensionPath);\n\tif (options.disableSkills) args.push(\"--no-skills\");\n\tif (options.disablePromptTemplates) args.push(\"--no-prompt-templates\");\n\tif (options.disableContextFiles) args.push(\"--no-context-files\");\n\tif (options.projectTrust !== undefined) {\n\t\targs.push(options.projectTrust ? \"--approve\" : \"--no-approve\");\n\t}\n\tif (Array.isArray(options.tools)) {\n\t\tif (options.tools.length > 0) args.push(\"--tools\", options.tools.join(\",\"));\n\t\telse args.push(\"--no-tools\");\n\t}\n\tif (options.baseSystemPromptPath) args.push(\"--system-prompt\", options.baseSystemPromptPath);\n\tfor (const promptPath of options.appendSystemPromptPaths ?? []) {\n\t\targs.push(\"--append-system-prompt\", promptPath);\n\t}\n\tif (options.systemPromptPath) args.push(\"--append-system-prompt\", options.systemPromptPath);\n\targs.push(`Task: ${options.task}`);\n\treturn args;\n}\n", "export interface UsageStats {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: number;\n\tcostInput?: number;\n\tcostOutput?: number;\n\tcostCacheRead?: number;\n\tcostCacheWrite?: number;\n\ttotalTokens?: number;\n\tcontextTokens: number;\n\tturns: number;\n}\n\nconst MAX_USAGE_VALUE = Number.MAX_SAFE_INTEGER;\n\nexport function protocolUsageCount(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0 ? value : 0;\n}\n\nexport function protocolUsageCost(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0\n\t\t? Math.min(value, MAX_USAGE_VALUE)\n\t\t: 0;\n}\n\nexport function addUsageValue(current: number, addition: number): number {\n\treturn Math.min(MAX_USAGE_VALUE, current + addition);\n}\n\nexport function mergeUsageStats(target: UsageStats, addition: UsageStats): void {\n\tfor (const key of [\"input\", \"output\", \"cacheRead\", \"cacheWrite\", \"cost\", \"turns\"] as const) {\n\t\ttarget[key] = addUsageValue(target[key], addition[key]);\n\t}\n\tfor (const key of [\n\t\t\"costInput\",\n\t\t\"costOutput\",\n\t\t\"costCacheRead\",\n\t\t\"costCacheWrite\",\n\t\t\"totalTokens\",\n\t] as const) {\n\t\tif (addition[key] !== undefined) {\n\t\t\ttarget[key] = addUsageValue(target[key] ?? 0, addition[key]);\n\t\t}\n\t}\n\ttarget.contextTokens = addition.contextTokens || target.contextTokens;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["exitCode"]
|
|
7
|
+
}
|
|
@@ -119,6 +119,7 @@ function renderStatus(state) {
|
|
|
119
119
|
return "interrupted";
|
|
120
120
|
case "closed":
|
|
121
121
|
return "closed";
|
|
122
|
+
case "partial":
|
|
122
123
|
case "blocked":
|
|
123
124
|
case "needs-input":
|
|
124
125
|
case "abstained":
|
|
@@ -168,4 +169,4 @@ export {
|
|
|
168
169
|
SUBAGENT_COMPLETION_MESSAGE_TYPE,
|
|
169
170
|
renderCompletionMessage
|
|
170
171
|
};
|
|
171
|
-
//# sourceMappingURL=chunk-
|
|
172
|
+
//# sourceMappingURL=chunk-IWC32VPY.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/completion-render.ts"],
|
|
4
|
-
"sourcesContent": ["import type { MessageRenderer, Theme } from \"@earendil-works/pi-coding-agent\";\nimport { Box, type Component, Spacer, sliceByColumn, visibleWidth } from \"@earendil-works/pi-tui\";\nimport { MAX_TOOL_MESSAGE_BYTES } from \"./limits.js\";\nimport {\n\tCOLLAPSED_LIST_LIMIT,\n\texpansionHint,\n\ttype RenderStatus,\n\trecordList,\n\trecordValue,\n\tsafeBlock,\n\tsafeLine,\n\tstatusBadge,\n} from \"./render-common.js\";\n\nexport const SUBAGENT_COMPLETION_MESSAGE_TYPE = \"pi-subagent-completion\";\n\nexport const renderCompletionMessage: MessageRenderer = (message, options, theme) => {\n\tconst box = new Box(options.outputPad, 1, (text) => theme.bg(\"customMessageBg\", text));\n\tif (options.expanded) {\n\t\tbox.addChild(\n\t\t\tnew ExactText(\n\t\t\t\ttheme.fg(\"customMessageLabel\", theme.bold(`[${SUBAGENT_COMPLETION_MESSAGE_TYPE}]`)),\n\t\t\t),\n\t\t);\n\t\tbox.addChild(new Spacer(1));\n\t\tbox.addChild(\n\t\t\tnew ExactText(\n\t\t\t\tsafeBlock(messageText(message.content), \"(no completion content)\", MAX_TOOL_MESSAGE_BYTES),\n\t\t\t\t(text) => theme.fg(\"customMessageText\", text),\n\t\t\t),\n\t\t);\n\t\treturn box;\n\t}\n\n\tbox.addChild(new ExactText(collapsedCompletion(message.content, message.details, theme)));\n\treturn box;\n};\n\nfunction collapsedCompletion(contentValue: unknown, detailsValue: unknown, theme: Theme): string {\n\tconst content = safeBlock(messageText(contentValue), \"\", MAX_TOOL_MESSAGE_BYTES);\n\tconst details = recordValue(detailsValue) ?? {};\n\tconst completions = recordList(details.completions);\n\tif (completions.length > 0 || details.completionCount !== undefined) {\n\t\treturn collapsedBatch(details, completions, theme);\n\t}\n\treturn collapsedSingle(content, details, theme);\n}\n\nfunction collapsedSingle(content: string, details: Record<string, unknown>, theme: Theme): string {\n\tconst agent = optionalLine(details.agent) || extractedField(content, \"Agent\") || \"subagent\";\n\tconst state = optionalLine(details.state) || extractedField(content, \"State\") || \"completed\";\n\tconst task = optionalLine(details.task) || extractedField(content, \"Task\");\n\tconst payload = payloadPreview(content);\n\tconst lines = [\n\t\t`${statusBadge(theme, renderStatus(state))}${theme.fg(\"muted\", \" \u00B7 \")}${theme.fg(\"customMessageLabel\", theme.bold(agent))}`,\n\t];\n\tif (task) lines.push(`${theme.fg(\"muted\", \"Task: \")}${theme.fg(\"customMessageText\", task)}`);\n\tif (payload) {\n\t\tlines.push(`${theme.fg(\"muted\", \"Payload: \")}${theme.fg(\"customMessageText\", payload)}`);\n\t}\n\tlines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction collapsedBatch(\n\tdetails: Record<string, unknown>,\n\tcompletions: Record<string, unknown>[],\n\ttheme: Theme,\n): string {\n\tconst declaredCount =\n\t\ttypeof details.completionCount === \"number\" && Number.isFinite(details.completionCount)\n\t\t\t? Math.max(0, Math.floor(details.completionCount))\n\t\t\t: completions.length;\n\tconst count = Math.max(declaredCount, completions.length);\n\tconst statuses = completions.map((completion) => renderStatus(optionalLine(completion.state)));\n\tconst icon = statuses.includes(\"failed\")\n\t\t? theme.fg(\"error\", \"\u2717\")\n\t\t: statuses.some((status) => status !== \"completed\" && status !== \"closed\")\n\t\t\t? theme.fg(\"warning\", \"\u25D0\")\n\t\t\t: theme.fg(\"success\", \"\u2713\");\n\tconst lines = [\n\t\t`${icon} ${theme.fg(\"customMessageLabel\", theme.bold(`${count} subagent completions`))}`,\n\t];\n\tfor (const completion of completions.slice(0, COLLAPSED_LIST_LIMIT)) {\n\t\tconst agent = optionalLine(completion.agent) || \"subagent\";\n\t\tconst state = optionalLine(completion.state) || \"completed\";\n\t\tconst task = optionalLine(completion.task);\n\t\tlines.push(\n\t\t\t`${theme.fg(\"muted\", \"\u2022 \")}${theme.fg(\"accent\", agent)} \u00B7 ${statusBadge(theme, renderStatus(state))}${task ? theme.fg(\"dim\", ` \u2014 ${task}`) : \"\"}`,\n\t\t);\n\t}\n\tconst visibleCount = Math.min(completions.length, COLLAPSED_LIST_LIMIT);\n\tif (count > visibleCount) {\n\t\tlines.push(theme.fg(\"muted\", `\u2026 ${count - visibleCount} more`));\n\t}\n\tlines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction messageText(value: unknown): string {\n\tif (typeof value === \"string\") return value;\n\tif (!Array.isArray(value)) return \"\";\n\treturn value\n\t\t.flatMap((part) => {\n\t\t\tconst record = recordValue(part);\n\t\t\treturn record?.type === \"text\" && typeof record.text === \"string\" ? [record.text] : [];\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nfunction extractedField(content: string, label: string): string {\n\tconst prefix = `${label}:`;\n\tconst line = content.split(\"\\n\").find((candidate) => candidate.startsWith(prefix));\n\treturn line ? safeLine(line.slice(prefix.length), \"\", 512) : \"\";\n}\n\nfunction payloadPreview(content: string): string {\n\tconst marker = \"\\nPayload:\\n\";\n\tconst start = content.indexOf(marker);\n\tif (start < 0) return \"\";\n\tfor (const line of content.slice(start + marker.length).split(\"\\n\")) {\n\t\tconst preview = safeLine(line, \"\", 1024);\n\t\tif (preview) return preview;\n\t}\n\treturn \"\";\n}\n\nfunction optionalLine(value: unknown): string {\n\treturn typeof value === \"string\" ? safeLine(value, \"\", 512) : \"\";\n}\n\nfunction renderStatus(state: string): RenderStatus {\n\tswitch (state) {\n\t\tcase \"failed\":\n\t\t\treturn \"failed\";\n\t\tcase \"cancelled\":\n\t\t\treturn \"cancelled\";\n\t\tcase \"interrupted\":\n\t\t\treturn \"interrupted\";\n\t\tcase \"closed\":\n\t\t\treturn \"closed\";\n\t\tcase \"blocked\":\n\t\tcase \"needs-input\":\n\t\tcase \"abstained\":\n\t\tcase \"stale\":\n\t\t\treturn \"warning\";\n\t\tdefault:\n\t\t\treturn \"completed\";\n\t}\n}\n\nclass ExactText implements Component {\n\tconstructor(\n\t\tprivate readonly value: string,\n\t\tprivate readonly style: (text: string) => string = (text) => text,\n\t) {}\n\n\trender(width: number): string[] {\n\t\tconst safeWidth = Math.max(1, width);\n\t\treturn this.value\n\t\t\t.split(\"\\n\")\n\t\t\t.flatMap((line) => hardWrapExact(line, safeWidth))\n\t\t\t.map(this.style);\n\t}\n\n\tinvalidate(): void {}\n}\n\nfunction hardWrapExact(value: string, width: number): string[] {\n\tif (value.length === 0) return [\"\"];\n\tconst columns = visibleWidth(value);\n\tif (columns === 0) return [value];\n\tconst lines: string[] = [];\n\tlet column = 0;\n\twhile (column < columns) {\n\t\tconst chunk = sliceByColumn(value, column, width, true);\n\t\tconst chunkWidth = visibleWidth(chunk);\n\t\tif (chunkWidth > 0) {\n\t\t\tlines.push(chunk);\n\t\t\tcolumn += chunkWidth;\n\t\t\tcontinue;\n\t\t}\n\t\tconst oversized = sliceByColumn(value, column, width, false);\n\t\tconst oversizedWidth = visibleWidth(oversized);\n\t\tlines.push(\"?\".repeat(width));\n\t\tcolumn += Math.max(1, oversizedWidth);\n\t}\n\treturn lines;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import type { MessageRenderer, Theme } from \"@earendil-works/pi-coding-agent\";\nimport { Box, type Component, Spacer, sliceByColumn, visibleWidth } from \"@earendil-works/pi-tui\";\nimport { MAX_TOOL_MESSAGE_BYTES } from \"./limits.js\";\nimport {\n\tCOLLAPSED_LIST_LIMIT,\n\texpansionHint,\n\ttype RenderStatus,\n\trecordList,\n\trecordValue,\n\tsafeBlock,\n\tsafeLine,\n\tstatusBadge,\n} from \"./render-common.js\";\n\nexport const SUBAGENT_COMPLETION_MESSAGE_TYPE = \"pi-subagent-completion\";\n\nexport const renderCompletionMessage: MessageRenderer = (message, options, theme) => {\n\tconst box = new Box(options.outputPad, 1, (text) => theme.bg(\"customMessageBg\", text));\n\tif (options.expanded) {\n\t\tbox.addChild(\n\t\t\tnew ExactText(\n\t\t\t\ttheme.fg(\"customMessageLabel\", theme.bold(`[${SUBAGENT_COMPLETION_MESSAGE_TYPE}]`)),\n\t\t\t),\n\t\t);\n\t\tbox.addChild(new Spacer(1));\n\t\tbox.addChild(\n\t\t\tnew ExactText(\n\t\t\t\tsafeBlock(messageText(message.content), \"(no completion content)\", MAX_TOOL_MESSAGE_BYTES),\n\t\t\t\t(text) => theme.fg(\"customMessageText\", text),\n\t\t\t),\n\t\t);\n\t\treturn box;\n\t}\n\n\tbox.addChild(new ExactText(collapsedCompletion(message.content, message.details, theme)));\n\treturn box;\n};\n\nfunction collapsedCompletion(contentValue: unknown, detailsValue: unknown, theme: Theme): string {\n\tconst content = safeBlock(messageText(contentValue), \"\", MAX_TOOL_MESSAGE_BYTES);\n\tconst details = recordValue(detailsValue) ?? {};\n\tconst completions = recordList(details.completions);\n\tif (completions.length > 0 || details.completionCount !== undefined) {\n\t\treturn collapsedBatch(details, completions, theme);\n\t}\n\treturn collapsedSingle(content, details, theme);\n}\n\nfunction collapsedSingle(content: string, details: Record<string, unknown>, theme: Theme): string {\n\tconst agent = optionalLine(details.agent) || extractedField(content, \"Agent\") || \"subagent\";\n\tconst state = optionalLine(details.state) || extractedField(content, \"State\") || \"completed\";\n\tconst task = optionalLine(details.task) || extractedField(content, \"Task\");\n\tconst payload = payloadPreview(content);\n\tconst lines = [\n\t\t`${statusBadge(theme, renderStatus(state))}${theme.fg(\"muted\", \" \u00B7 \")}${theme.fg(\"customMessageLabel\", theme.bold(agent))}`,\n\t];\n\tif (task) lines.push(`${theme.fg(\"muted\", \"Task: \")}${theme.fg(\"customMessageText\", task)}`);\n\tif (payload) {\n\t\tlines.push(`${theme.fg(\"muted\", \"Payload: \")}${theme.fg(\"customMessageText\", payload)}`);\n\t}\n\tlines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction collapsedBatch(\n\tdetails: Record<string, unknown>,\n\tcompletions: Record<string, unknown>[],\n\ttheme: Theme,\n): string {\n\tconst declaredCount =\n\t\ttypeof details.completionCount === \"number\" && Number.isFinite(details.completionCount)\n\t\t\t? Math.max(0, Math.floor(details.completionCount))\n\t\t\t: completions.length;\n\tconst count = Math.max(declaredCount, completions.length);\n\tconst statuses = completions.map((completion) => renderStatus(optionalLine(completion.state)));\n\tconst icon = statuses.includes(\"failed\")\n\t\t? theme.fg(\"error\", \"\u2717\")\n\t\t: statuses.some((status) => status !== \"completed\" && status !== \"closed\")\n\t\t\t? theme.fg(\"warning\", \"\u25D0\")\n\t\t\t: theme.fg(\"success\", \"\u2713\");\n\tconst lines = [\n\t\t`${icon} ${theme.fg(\"customMessageLabel\", theme.bold(`${count} subagent completions`))}`,\n\t];\n\tfor (const completion of completions.slice(0, COLLAPSED_LIST_LIMIT)) {\n\t\tconst agent = optionalLine(completion.agent) || \"subagent\";\n\t\tconst state = optionalLine(completion.state) || \"completed\";\n\t\tconst task = optionalLine(completion.task);\n\t\tlines.push(\n\t\t\t`${theme.fg(\"muted\", \"\u2022 \")}${theme.fg(\"accent\", agent)} \u00B7 ${statusBadge(theme, renderStatus(state))}${task ? theme.fg(\"dim\", ` \u2014 ${task}`) : \"\"}`,\n\t\t);\n\t}\n\tconst visibleCount = Math.min(completions.length, COLLAPSED_LIST_LIMIT);\n\tif (count > visibleCount) {\n\t\tlines.push(theme.fg(\"muted\", `\u2026 ${count - visibleCount} more`));\n\t}\n\tlines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction messageText(value: unknown): string {\n\tif (typeof value === \"string\") return value;\n\tif (!Array.isArray(value)) return \"\";\n\treturn value\n\t\t.flatMap((part) => {\n\t\t\tconst record = recordValue(part);\n\t\t\treturn record?.type === \"text\" && typeof record.text === \"string\" ? [record.text] : [];\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nfunction extractedField(content: string, label: string): string {\n\tconst prefix = `${label}:`;\n\tconst line = content.split(\"\\n\").find((candidate) => candidate.startsWith(prefix));\n\treturn line ? safeLine(line.slice(prefix.length), \"\", 512) : \"\";\n}\n\nfunction payloadPreview(content: string): string {\n\tconst marker = \"\\nPayload:\\n\";\n\tconst start = content.indexOf(marker);\n\tif (start < 0) return \"\";\n\tfor (const line of content.slice(start + marker.length).split(\"\\n\")) {\n\t\tconst preview = safeLine(line, \"\", 1024);\n\t\tif (preview) return preview;\n\t}\n\treturn \"\";\n}\n\nfunction optionalLine(value: unknown): string {\n\treturn typeof value === \"string\" ? safeLine(value, \"\", 512) : \"\";\n}\n\nfunction renderStatus(state: string): RenderStatus {\n\tswitch (state) {\n\t\tcase \"failed\":\n\t\t\treturn \"failed\";\n\t\tcase \"cancelled\":\n\t\t\treturn \"cancelled\";\n\t\tcase \"interrupted\":\n\t\t\treturn \"interrupted\";\n\t\tcase \"closed\":\n\t\t\treturn \"closed\";\n\t\tcase \"partial\":\n\t\tcase \"blocked\":\n\t\tcase \"needs-input\":\n\t\tcase \"abstained\":\n\t\tcase \"stale\":\n\t\t\treturn \"warning\";\n\t\tdefault:\n\t\t\treturn \"completed\";\n\t}\n}\n\nclass ExactText implements Component {\n\tconstructor(\n\t\tprivate readonly value: string,\n\t\tprivate readonly style: (text: string) => string = (text) => text,\n\t) {}\n\n\trender(width: number): string[] {\n\t\tconst safeWidth = Math.max(1, width);\n\t\treturn this.value\n\t\t\t.split(\"\\n\")\n\t\t\t.flatMap((line) => hardWrapExact(line, safeWidth))\n\t\t\t.map(this.style);\n\t}\n\n\tinvalidate(): void {}\n}\n\nfunction hardWrapExact(value: string, width: number): string[] {\n\tif (value.length === 0) return [\"\"];\n\tconst columns = visibleWidth(value);\n\tif (columns === 0) return [value];\n\tconst lines: string[] = [];\n\tlet column = 0;\n\twhile (column < columns) {\n\t\tconst chunk = sliceByColumn(value, column, width, true);\n\t\tconst chunkWidth = visibleWidth(chunk);\n\t\tif (chunkWidth > 0) {\n\t\t\tlines.push(chunk);\n\t\t\tcolumn += chunkWidth;\n\t\t\tcontinue;\n\t\t}\n\t\tconst oversized = sliceByColumn(value, column, width, false);\n\t\tconst oversizedWidth = visibleWidth(oversized);\n\t\tlines.push(\"?\".repeat(width));\n\t\tcolumn += Math.max(1, oversizedWidth);\n\t}\n\treturn lines;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -43,14 +43,45 @@ var DelegationContractSchema = Type.Object(
|
|
|
43
43
|
requestedAuthority: Type.Optional(
|
|
44
44
|
Type.Object(
|
|
45
45
|
{
|
|
46
|
-
capabilities: Type.Optional(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
capabilities: Type.Optional(
|
|
47
|
+
Type.Array(BoundedItem, {
|
|
48
|
+
maxItems: MAX_ITEMS,
|
|
49
|
+
description: "Capabilities requested from the selected agent manifest."
|
|
50
|
+
})
|
|
51
|
+
),
|
|
52
|
+
tools: Type.Optional(
|
|
53
|
+
Type.Array(BoundedItem, {
|
|
54
|
+
maxItems: MAX_ITEMS,
|
|
55
|
+
description: "Tools that enforcement may narrow to the selected agent's available set."
|
|
56
|
+
})
|
|
57
|
+
),
|
|
58
|
+
readPaths: Type.Optional(
|
|
59
|
+
Type.Array(BoundedItem, {
|
|
60
|
+
maxItems: MAX_ITEMS,
|
|
61
|
+
description: 'Audit metadata only; enforcement "enforce" rejects non-empty readPaths because path scope is unsupported.'
|
|
62
|
+
})
|
|
63
|
+
),
|
|
64
|
+
writePaths: Type.Optional(
|
|
65
|
+
Type.Array(BoundedItem, {
|
|
66
|
+
maxItems: MAX_ITEMS,
|
|
67
|
+
description: 'Audit metadata only; enforcement "enforce" rejects non-empty writePaths because path scope is unsupported.'
|
|
68
|
+
})
|
|
69
|
+
),
|
|
70
|
+
network: Type.Optional(
|
|
71
|
+
StringEnum(AUTHORITY_REQUIREMENTS, {
|
|
72
|
+
description: 'Audit metadata only; enforcement "enforce" rejects denied or required network guarantees as unsupported.'
|
|
73
|
+
})
|
|
74
|
+
),
|
|
75
|
+
secrets: Type.Optional(
|
|
76
|
+
StringEnum(AUTHORITY_REQUIREMENTS, {
|
|
77
|
+
description: 'Audit metadata only; enforcement "enforce" rejects denied or required secret guarantees as unsupported.'
|
|
78
|
+
})
|
|
79
|
+
)
|
|
52
80
|
},
|
|
53
|
-
{
|
|
81
|
+
{
|
|
82
|
+
additionalProperties: false,
|
|
83
|
+
description: "Only capabilities and tools have executor enforcement; readPaths, writePaths, network, and secrets are unsupported guarantees."
|
|
84
|
+
}
|
|
54
85
|
)
|
|
55
86
|
),
|
|
56
87
|
acceptanceCriteria: Type.Optional(BoundedItems),
|
|
@@ -80,9 +111,16 @@ var DelegationContractSchema = Type.Object(
|
|
|
80
111
|
)
|
|
81
112
|
),
|
|
82
113
|
sideEffectPolicy: Type.Optional(StringEnum(DELEGATION_SIDE_EFFECT_POLICIES)),
|
|
83
|
-
enforcement: Type.Optional(
|
|
114
|
+
enforcement: Type.Optional(
|
|
115
|
+
StringEnum(DELEGATION_ENFORCEMENT_MODES, {
|
|
116
|
+
description: "Defaults to audit; enforce rejects unsupported requestedAuthority guarantees before child launch."
|
|
117
|
+
})
|
|
118
|
+
)
|
|
84
119
|
},
|
|
85
|
-
{
|
|
120
|
+
{
|
|
121
|
+
additionalProperties: false,
|
|
122
|
+
description: "Advanced delegation contract. For ordinary delegation omit this object; use it only for explicit acceptance, authority, evidence, or admission semantics."
|
|
123
|
+
}
|
|
86
124
|
);
|
|
87
125
|
function normalizeDelegationContract(value) {
|
|
88
126
|
if (!isPlainObject(value)) return void 0;
|
|
@@ -321,4 +359,4 @@ export {
|
|
|
321
359
|
normalizeDelegationContract,
|
|
322
360
|
appendDelegationContract
|
|
323
361
|
};
|
|
324
|
-
//# sourceMappingURL=chunk-
|
|
362
|
+
//# sourceMappingURL=chunk-JSZIP73U.ts.map
|