@narumitw/pi-subagents 2.1.4 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +187 -1228
- package/dist/child-communication-bridge.ts +136 -0
- package/dist/child-communication-bridge.ts.map +7 -0
- package/dist/chunks/chunk-UKTWUQRM.js +667 -0
- package/dist/chunks/chunk-UKTWUQRM.js.map +7 -0
- package/dist/index.ts +1448 -1614
- package/dist/index.ts.map +4 -4
- package/docs/design-principles.md +31 -0
- package/docs/ipc-transport-idea.md +103 -0
- package/docs/tools.md +109 -0
- package/package.json +11 -19
- package/src/broker-credentials.ts +71 -0
- package/src/child-communication-bridge.ts +153 -0
- package/src/child-communication-tools.ts +147 -0
- package/src/completion-renderer.ts +60 -0
- package/src/index.ts +1 -1
- package/src/message-broker.ts +628 -0
- package/src/model-output.ts +42 -0
- package/src/process.ts +688 -0
- package/src/runtime.ts +538 -0
- package/src/subagents.ts +33 -34
- package/src/tools.ts +416 -0
- package/src/types.ts +85 -0
- package/src/widget.ts +130 -0
- package/dist/chunks/auto-transport-FUUKFDIG.ts +0 -109
- package/dist/chunks/auto-transport-FUUKFDIG.ts.map +0 -7
- package/dist/chunks/capability-grant-PR72SWWS.ts +0 -19
- package/dist/chunks/capability-grant-PR72SWWS.ts.map +0 -7
- package/dist/chunks/child-peer-bridge.ts +0 -108
- package/dist/chunks/child-peer-bridge.ts.map +0 -7
- package/dist/chunks/chunk-2LMJU25E.ts +0 -1641
- package/dist/chunks/chunk-2LMJU25E.ts.map +0 -7
- package/dist/chunks/chunk-47SK2QYC.ts +0 -56
- package/dist/chunks/chunk-47SK2QYC.ts.map +0 -7
- package/dist/chunks/chunk-4AQSF7AS.ts +0 -29
- package/dist/chunks/chunk-4AQSF7AS.ts.map +0 -7
- package/dist/chunks/chunk-5DGRMKNV.ts +0 -126
- package/dist/chunks/chunk-5DGRMKNV.ts.map +0 -7
- package/dist/chunks/chunk-6H6TBBED.ts +0 -108
- package/dist/chunks/chunk-6H6TBBED.ts.map +0 -7
- package/dist/chunks/chunk-6KJ34M6S.ts +0 -159
- package/dist/chunks/chunk-6KJ34M6S.ts.map +0 -7
- package/dist/chunks/chunk-6NSJVPXX.ts +0 -480
- package/dist/chunks/chunk-6NSJVPXX.ts.map +0 -7
- package/dist/chunks/chunk-7AAJEUSL.ts +0 -238
- package/dist/chunks/chunk-7AAJEUSL.ts.map +0 -7
- package/dist/chunks/chunk-BFK2Z4ZF.ts +0 -189
- package/dist/chunks/chunk-BFK2Z4ZF.ts.map +0 -7
- package/dist/chunks/chunk-BOAXY55Y.ts +0 -153
- package/dist/chunks/chunk-BOAXY55Y.ts.map +0 -7
- package/dist/chunks/chunk-D4CR7T73.ts +0 -353
- package/dist/chunks/chunk-D4CR7T73.ts.map +0 -7
- package/dist/chunks/chunk-FEVPWRMU.ts +0 -300
- package/dist/chunks/chunk-FEVPWRMU.ts.map +0 -7
- package/dist/chunks/chunk-G6VZTCFH.ts +0 -70
- package/dist/chunks/chunk-G6VZTCFH.ts.map +0 -7
- package/dist/chunks/chunk-H3FP6DLR.ts +0 -160
- package/dist/chunks/chunk-H3FP6DLR.ts.map +0 -7
- package/dist/chunks/chunk-HA36LPCO.ts +0 -130
- package/dist/chunks/chunk-HA36LPCO.ts.map +0 -7
- package/dist/chunks/chunk-HOP5FXDT.ts +0 -27
- package/dist/chunks/chunk-HOP5FXDT.ts.map +0 -7
- package/dist/chunks/chunk-IGAMVWFN.ts +0 -139
- package/dist/chunks/chunk-IGAMVWFN.ts.map +0 -7
- package/dist/chunks/chunk-ILEQ27AL.ts +0 -45
- package/dist/chunks/chunk-ILEQ27AL.ts.map +0 -7
- package/dist/chunks/chunk-ITVWPNU4.ts +0 -819
- package/dist/chunks/chunk-ITVWPNU4.ts.map +0 -7
- package/dist/chunks/chunk-IWC32VPY.ts +0 -172
- package/dist/chunks/chunk-IWC32VPY.ts.map +0 -7
- package/dist/chunks/chunk-JSZIP73U.ts +0 -362
- package/dist/chunks/chunk-JSZIP73U.ts.map +0 -7
- package/dist/chunks/chunk-JU6LUNLP.ts +0 -380
- package/dist/chunks/chunk-JU6LUNLP.ts.map +0 -7
- package/dist/chunks/chunk-KMGKCEO4.ts +0 -38
- package/dist/chunks/chunk-KMGKCEO4.ts.map +0 -7
- package/dist/chunks/chunk-LASD73CM.ts +0 -339
- package/dist/chunks/chunk-LASD73CM.ts.map +0 -7
- package/dist/chunks/chunk-LEOYDZI3.ts +0 -22
- package/dist/chunks/chunk-LEOYDZI3.ts.map +0 -7
- package/dist/chunks/chunk-LL4LP2T7.ts +0 -737
- package/dist/chunks/chunk-LL4LP2T7.ts.map +0 -7
- package/dist/chunks/chunk-N2T5IN4X.ts +0 -18
- package/dist/chunks/chunk-N2T5IN4X.ts.map +0 -7
- package/dist/chunks/chunk-N7BLVXKK.ts +0 -73
- package/dist/chunks/chunk-N7BLVXKK.ts.map +0 -7
- package/dist/chunks/chunk-NLT67IZS.ts +0 -322
- package/dist/chunks/chunk-NLT67IZS.ts.map +0 -7
- package/dist/chunks/chunk-NTRPLF46.ts +0 -63
- package/dist/chunks/chunk-NTRPLF46.ts.map +0 -7
- package/dist/chunks/chunk-ONDTY4EL.ts +0 -91
- package/dist/chunks/chunk-ONDTY4EL.ts.map +0 -7
- package/dist/chunks/chunk-OVPHFGKO.ts +0 -1769
- package/dist/chunks/chunk-OVPHFGKO.ts.map +0 -7
- package/dist/chunks/chunk-P7OH4XMF.ts +0 -60
- package/dist/chunks/chunk-P7OH4XMF.ts.map +0 -7
- package/dist/chunks/chunk-PBZMBTNJ.ts +0 -422
- package/dist/chunks/chunk-PBZMBTNJ.ts.map +0 -7
- package/dist/chunks/chunk-PGLSFLYW.ts +0 -52
- package/dist/chunks/chunk-PGLSFLYW.ts.map +0 -7
- package/dist/chunks/chunk-RRR66UWR.ts +0 -28
- package/dist/chunks/chunk-RRR66UWR.ts.map +0 -7
- package/dist/chunks/chunk-RSUXZD6S.ts +0 -275
- package/dist/chunks/chunk-RSUXZD6S.ts.map +0 -7
- package/dist/chunks/chunk-RTCVYIZA.ts +0 -221
- package/dist/chunks/chunk-RTCVYIZA.ts.map +0 -7
- package/dist/chunks/chunk-RY2AEGMZ.ts +0 -34
- package/dist/chunks/chunk-RY2AEGMZ.ts.map +0 -7
- package/dist/chunks/chunk-SWGQLFSD.ts +0 -60
- package/dist/chunks/chunk-SWGQLFSD.ts.map +0 -7
- package/dist/chunks/chunk-TM2R67J3.ts +0 -52
- package/dist/chunks/chunk-TM2R67J3.ts.map +0 -7
- package/dist/chunks/chunk-TMZRHIIK.ts +0 -497
- package/dist/chunks/chunk-TMZRHIIK.ts.map +0 -7
- package/dist/chunks/chunk-TZ34IQ3M.ts +0 -59
- package/dist/chunks/chunk-TZ34IQ3M.ts.map +0 -7
- package/dist/chunks/chunk-UMBPMVJW.ts +0 -22
- package/dist/chunks/chunk-UMBPMVJW.ts.map +0 -7
- package/dist/chunks/chunk-VDG7LTYE.ts +0 -80
- package/dist/chunks/chunk-VDG7LTYE.ts.map +0 -7
- package/dist/chunks/chunk-X4NMONPE.ts +0 -73
- package/dist/chunks/chunk-X4NMONPE.ts.map +0 -7
- package/dist/chunks/chunk-YPJEN6NU.ts +0 -65
- package/dist/chunks/chunk-YPJEN6NU.ts.map +0 -7
- package/dist/chunks/chunk-YU53SHA7.ts +0 -328
- package/dist/chunks/chunk-YU53SHA7.ts.map +0 -7
- package/dist/chunks/completion-delivery-RSJU6BXL.ts +0 -17
- package/dist/chunks/completion-delivery-RSJU6BXL.ts.map +0 -7
- package/dist/chunks/config-status-FKGDECZ3.ts +0 -35
- package/dist/chunks/config-status-FKGDECZ3.ts.map +0 -7
- package/dist/chunks/config-ui-ABHYNGQ7.ts +0 -1212
- package/dist/chunks/config-ui-ABHYNGQ7.ts.map +0 -7
- package/dist/chunks/consult-LJU3IQY5.ts +0 -519
- package/dist/chunks/consult-LJU3IQY5.ts.map +0 -7
- package/dist/chunks/context-QDKLVQXE.ts +0 -11
- package/dist/chunks/context-QDKLVQXE.ts.map +0 -7
- package/dist/chunks/create-stateful-transport-JWC2EFYL.ts +0 -130
- package/dist/chunks/create-stateful-transport-JWC2EFYL.ts.map +0 -7
- package/dist/chunks/cwd-policy-NB6XZ5GF.ts +0 -17
- package/dist/chunks/cwd-policy-NB6XZ5GF.ts.map +0 -7
- package/dist/chunks/delegation-contract-LA56I5DT.ts +0 -24
- package/dist/chunks/delegation-contract-LA56I5DT.ts.map +0 -7
- package/dist/chunks/discovery-MIFB2U4Y.ts +0 -12
- package/dist/chunks/discovery-MIFB2U4Y.ts.map +0 -7
- package/dist/chunks/execution-Q2JZLKJA.ts +0 -4037
- package/dist/chunks/execution-Q2JZLKJA.ts.map +0 -7
- package/dist/chunks/in-process-transport-HJ6TZXC3.ts +0 -39
- package/dist/chunks/in-process-transport-HJ6TZXC3.ts.map +0 -7
- package/dist/chunks/inspect-UH2TKH6E.ts +0 -634
- package/dist/chunks/inspect-UH2TKH6E.ts.map +0 -7
- package/dist/chunks/peer-communication-KL36Z6CO.ts +0 -294
- package/dist/chunks/peer-communication-KL36Z6CO.ts.map +0 -7
- package/dist/chunks/persistence-UY3PY6E5.ts +0 -348
- package/dist/chunks/persistence-UY3PY6E5.ts.map +0 -7
- package/dist/chunks/registry-BT54L6CY.ts +0 -1445
- package/dist/chunks/registry-BT54L6CY.ts.map +0 -7
- package/dist/chunks/retained-semantic-state-GM75FZGE.ts +0 -81
- package/dist/chunks/retained-semantic-state-GM75FZGE.ts.map +0 -7
- package/dist/chunks/rpc-transport-7R7DVCEB.ts +0 -1222
- package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +0 -7
- package/dist/chunks/runtime-policy-5YELCOVC.ts +0 -15
- package/dist/chunks/runtime-policy-5YELCOVC.ts.map +0 -7
- package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts +0 -19
- package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts.map +0 -7
- package/dist/chunks/spawn-idempotency-BNHOSMZW.ts +0 -13
- package/dist/chunks/spawn-idempotency-BNHOSMZW.ts.map +0 -7
- package/dist/chunks/stateful-lifecycle-JAR6K55H.ts +0 -15
- package/dist/chunks/stateful-lifecycle-JAR6K55H.ts.map +0 -7
- package/dist/chunks/subprocess-transport-VHZJRBTW.ts +0 -160
- package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +0 -7
- package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +0 -164
- package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +0 -7
- package/dist/chunks/workspace-WDKLN72J.ts +0 -11
- package/dist/chunks/workspace-WDKLN72J.ts.map +0 -7
- package/docs/async-runtime-protocol.md +0 -84
- package/docs/implementation-notes/pi-subagents-capability-matrix.md +0 -62
- package/docs/implementation-notes/pi-subagents-current-direction.md +0 -99
- package/docs/implementation-notes/pi-subagents-rpc-v1.md +0 -139
- package/docs/pi-subagents-diagrams.md +0 -183
- package/src/adaptive-scheduler.ts +0 -224
- package/src/admission-policy.ts +0 -78
- package/src/agent-projection.ts +0 -53
- package/src/agents/built-ins.ts +0 -71
- package/src/agents/catalog.ts +0 -241
- package/src/agents/discovery.ts +0 -265
- package/src/agents/types.ts +0 -100
- package/src/agents.ts +0 -51
- package/src/auto-transport.ts +0 -121
- package/src/blocking-status.ts +0 -63
- package/src/cached-module-loader.ts +0 -18
- package/src/capabilities.ts +0 -145
- package/src/capability-grant.ts +0 -115
- package/src/capability-router.ts +0 -107
- package/src/child-peer-bridge.ts +0 -124
- package/src/child-peer-tools.ts +0 -132
- package/src/completion-delivery.ts +0 -409
- package/src/completion-render.ts +0 -190
- package/src/completion-requirement.ts +0 -479
- package/src/completion-routing.ts +0 -24
- package/src/config-registration.ts +0 -114
- package/src/config-status.ts +0 -217
- package/src/config-ui.ts +0 -983
- package/src/consult-policy.ts +0 -15
- package/src/consult-registration.ts +0 -125
- package/src/consult-render.ts +0 -194
- package/src/consult-resources.ts +0 -51
- package/src/consult-tool.ts +0 -95
- package/src/consult.ts +0 -566
- package/src/context.ts +0 -126
- package/src/create-stateful-transport.ts +0 -157
- package/src/cwd-policy.ts +0 -183
- package/src/delegation-contract.ts +0 -463
- package/src/execution/budget.ts +0 -56
- package/src/execution/runtime-policy.ts +0 -19
- package/src/execution-plan.ts +0 -322
- package/src/execution-ui.ts +0 -259
- package/src/execution.ts +0 -1679
- package/src/in-process-transport.ts +0 -941
- package/src/inspect-registration.ts +0 -64
- package/src/inspect-render.ts +0 -334
- package/src/inspect-tool.ts +0 -45
- package/src/inspect.ts +0 -769
- package/src/integration-controller.ts +0 -98
- package/src/limits.ts +0 -75
- package/src/orchestration-metrics.ts +0 -116
- package/src/outcome.ts +0 -61
- package/src/panel-child-group.ts +0 -35
- package/src/panel-contract.ts +0 -343
- package/src/panel-evidence.ts +0 -59
- package/src/panel-execution.ts +0 -769
- package/src/panel-failure.ts +0 -56
- package/src/panel-planning.ts +0 -175
- package/src/panel-presets.ts +0 -3
- package/src/panel-prompts.ts +0 -132
- package/src/panel-reconciliation.ts +0 -57
- package/src/panel-render.ts +0 -103
- package/src/parallel-limit-ui.ts +0 -113
- package/src/params.ts +0 -278
- package/src/peer-communication.ts +0 -352
- package/src/peer-transport.ts +0 -49
- package/src/persistence.ts +0 -522
- package/src/pi-args.ts +0 -43
- package/src/pi-invocation.ts +0 -168
- package/src/process-control.ts +0 -43
- package/src/prompt-resources.ts +0 -38
- package/src/prompt-source-safety.ts +0 -48
- package/src/protocol.ts +0 -76
- package/src/registry-types.ts +0 -204
- package/src/registry.ts +0 -1698
- package/src/render-common.ts +0 -252
- package/src/render.ts +0 -704
- package/src/result-contract.ts +0 -431
- package/src/retained-semantic-state.ts +0 -100
- package/src/rpc-timeout-finalization.ts +0 -207
- package/src/rpc-transport-metadata.ts +0 -65
- package/src/rpc-transport.ts +0 -1035
- package/src/rpc-turn-capture.ts +0 -217
- package/src/runner-outcome.ts +0 -31
- package/src/runner-result.ts +0 -55
- package/src/runner-types.ts +0 -102
- package/src/runner-usage.ts +0 -48
- package/src/runner.ts +0 -866
- package/src/safe-text.ts +0 -67
- package/src/semantic-snapshot.ts +0 -214
- package/src/session-guidance-contract.ts +0 -399
- package/src/settings/inspection.ts +0 -302
- package/src/settings/schema.ts +0 -195
- package/src/settings-reader.ts +0 -215
- package/src/settings.ts +0 -452
- package/src/spawn-idempotency.ts +0 -68
- package/src/stateful-agent-view.ts +0 -85
- package/src/stateful-config.ts +0 -13
- package/src/stateful-guidance.ts +0 -29
- package/src/stateful-lifecycle.ts +0 -74
- package/src/stateful-limit-ui.ts +0 -249
- package/src/stateful-limits.ts +0 -96
- package/src/stateful-prompt.ts +0 -49
- package/src/stateful-registration.ts +0 -1320
- package/src/stateful-render.ts +0 -318
- package/src/stateful-safety.ts +0 -47
- package/src/stateful-tool-params.ts +0 -215
- package/src/stateful.ts +0 -12
- package/src/subagent-details.ts +0 -43
- package/src/subagents-extension.ts +0 -372
- package/src/subprocess-transport.ts +0 -145
- package/src/supervision.ts +0 -104
- package/src/task-path.ts +0 -65
- package/src/timeout-checkpoint.ts +0 -305
- package/src/timeout-finalization.ts +0 -75
- package/src/tool-schema-compatibility.ts +0 -73
- package/src/transport-types.ts +0 -74
- package/src/transport-ui.ts +0 -135
- package/src/transport.ts +0 -43
- package/src/turn-budget.ts +0 -109
- package/src/usage-format.ts +0 -42
- package/src/usage-recording-config.ts +0 -13
- package/src/usage-recording-store.ts +0 -183
- package/src/usage-recording.ts +0 -478
- package/src/verification-harness.ts +0 -516
- package/src/verification-policy.ts +0 -67
- package/src/verification-receipt.ts +0 -275
- package/src/verified-execution-benchmark.ts +0 -86
- package/src/verified-execution-contract.ts +0 -191
- package/src/verified-execution-schema.ts +0 -32
- package/src/work-item-ledger.ts +0 -1404
- package/src/work-item-persistence.ts +0 -254
- package/src/workflow-completion-controller.ts +0 -397
- package/src/workflow-planning.ts +0 -172
- package/src/workflow-tree-identity.ts +0 -289
- package/src/workflow-ui.ts +0 -69
- package/src/workflow-verification.ts +0 -296
- package/src/workspace.ts +0 -174
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
-
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
-
import {
|
|
4
|
-
formatTimeoutCheckpoint
|
|
5
|
-
} from "./chunk-RTCVYIZA.ts";
|
|
6
|
-
import {
|
|
7
|
-
appendResultInstruction
|
|
8
|
-
} from "./chunk-RSUXZD6S.ts";
|
|
9
|
-
import {
|
|
10
|
-
DEFAULT_MAX_CONTEXT_BYTES,
|
|
11
|
-
redactPrivateText,
|
|
12
|
-
truncateUtf8
|
|
13
|
-
} from "./chunk-H3FP6DLR.ts";
|
|
14
|
-
|
|
15
|
-
// src/timeout-finalization.ts
|
|
16
|
-
var DEFAULT_TIMEOUT_FINALIZATION_MS = 45e3;
|
|
17
|
-
function resolveTimeoutFinalizationMs(workTimeoutMs, override) {
|
|
18
|
-
const requested = override ?? Math.min(workTimeoutMs, DEFAULT_TIMEOUT_FINALIZATION_MS);
|
|
19
|
-
if (!Number.isFinite(requested) || requested < 1) {
|
|
20
|
-
throw new Error("Timeout finalization deadline must be a positive finite number");
|
|
21
|
-
}
|
|
22
|
-
return Math.min(Math.floor(requested), DEFAULT_TIMEOUT_FINALIZATION_MS);
|
|
23
|
-
}
|
|
24
|
-
function buildTimeoutFinalizationPrompt(evidence, maxBytes = DEFAULT_MAX_CONTEXT_BYTES) {
|
|
25
|
-
const activity = (evidence.recentActivity ?? []).slice(-10).map(
|
|
26
|
-
(item) => item.type === "text" ? `- Assistant note: ${redactPrivateText(item.text)}` : `- Tool activity: ${redactPrivateText(item.name)}`
|
|
27
|
-
).join("\n");
|
|
28
|
-
const prompt = [
|
|
29
|
-
terminationHeading(evidence.terminationReason),
|
|
30
|
-
"Do not continue investigating, call tools, modify files, or retry the original task.",
|
|
31
|
-
"Return a concise summary of only verified findings and completed evidence already available.",
|
|
32
|
-
"Explicitly label unfinished or unverified areas.",
|
|
33
|
-
`Original task:
|
|
34
|
-
${redactPrivateText(evidence.task)}`,
|
|
35
|
-
evidence.partialOutput ? `Partial assistant output:
|
|
36
|
-
${redactPrivateText(evidence.partialOutput)}` : "Partial assistant output: (none)",
|
|
37
|
-
evidence.checkpoint ? `Deterministic progress checkpoint:
|
|
38
|
-
${formatTimeoutCheckpoint(evidence.checkpoint)}` : void 0,
|
|
39
|
-
activity ? `Recent bounded activity:
|
|
40
|
-
${activity}` : "Recent bounded activity: (none)"
|
|
41
|
-
].filter((value) => Boolean(value)).join("\n\n");
|
|
42
|
-
return truncateUtf8(appendResultInstruction(prompt, evidence.resultFormat, maxBytes), maxBytes).text;
|
|
43
|
-
}
|
|
44
|
-
function terminationHeading(reason) {
|
|
45
|
-
switch (reason) {
|
|
46
|
-
case "idle_timeout":
|
|
47
|
-
return "The idle deadline expired and the active work was aborted.";
|
|
48
|
-
case "turn_limit":
|
|
49
|
-
return "The assistant-turn budget was exhausted and the active work was aborted.";
|
|
50
|
-
case "tool_call_limit":
|
|
51
|
-
return "The tool-call budget was exhausted and the active work was aborted.";
|
|
52
|
-
case "orchestration_timeout":
|
|
53
|
-
return "The orchestration deadline expired and the active work was aborted.";
|
|
54
|
-
default:
|
|
55
|
-
return "Work deadline expired and the active work was aborted.";
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export {
|
|
60
|
-
resolveTimeoutFinalizationMs,
|
|
61
|
-
buildTimeoutFinalizationPrompt
|
|
62
|
-
};
|
|
63
|
-
//# sourceMappingURL=chunk-NTRPLF46.ts.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/timeout-finalization.ts"],
|
|
4
|
-
"sourcesContent": ["import { redactPrivateText } from \"./context.js\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, truncateUtf8 } from \"./limits.js\";\nimport { appendResultInstruction, type SubagentResultFormat } from \"./result-contract.js\";\nimport type { RecentActivityItem } from \"./runner-types.js\";\nimport {\n\tformatTimeoutCheckpoint,\n\ttype TimeoutCheckpoint,\n\ttype TurnTerminationReason,\n} from \"./timeout-checkpoint.js\";\n\nexport const DEFAULT_TIMEOUT_FINALIZATION_MS = 45_000;\n\nexport interface TimeoutFinalizationEvidence {\n\ttask: string;\n\tpartialOutput?: string;\n\trecentActivity?: readonly RecentActivityItem[];\n\tcheckpoint?: TimeoutCheckpoint;\n\tterminationReason?: TurnTerminationReason;\n\tresultFormat?: SubagentResultFormat;\n}\n\nexport function resolveTimeoutFinalizationMs(workTimeoutMs: number, override?: number): number {\n\tconst requested = override ?? Math.min(workTimeoutMs, DEFAULT_TIMEOUT_FINALIZATION_MS);\n\tif (!Number.isFinite(requested) || requested < 1) {\n\t\tthrow new Error(\"Timeout finalization deadline must be a positive finite number\");\n\t}\n\treturn Math.min(Math.floor(requested), DEFAULT_TIMEOUT_FINALIZATION_MS);\n}\n\nexport function buildTimeoutFinalizationPrompt(\n\tevidence: TimeoutFinalizationEvidence,\n\tmaxBytes = DEFAULT_MAX_CONTEXT_BYTES,\n): string {\n\tconst activity = (evidence.recentActivity ?? [])\n\t\t.slice(-10)\n\t\t.map((item) =>\n\t\t\titem.type === \"text\"\n\t\t\t\t? `- Assistant note: ${redactPrivateText(item.text)}`\n\t\t\t\t: `- Tool activity: ${redactPrivateText(item.name)}`,\n\t\t)\n\t\t.join(\"\\n\");\n\tconst prompt = [\n\t\tterminationHeading(evidence.terminationReason),\n\t\t\"Do not continue investigating, call tools, modify files, or retry the original task.\",\n\t\t\"Return a concise summary of only verified findings and completed evidence already available.\",\n\t\t\"Explicitly label unfinished or unverified areas.\",\n\t\t`Original task:\\n${redactPrivateText(evidence.task)}`,\n\t\tevidence.partialOutput\n\t\t\t? `Partial assistant output:\\n${redactPrivateText(evidence.partialOutput)}`\n\t\t\t: \"Partial assistant output: (none)\",\n\t\tevidence.checkpoint\n\t\t\t? `Deterministic progress checkpoint:\\n${formatTimeoutCheckpoint(evidence.checkpoint)}`\n\t\t\t: undefined,\n\t\tactivity ? `Recent bounded activity:\\n${activity}` : \"Recent bounded activity: (none)\",\n\t]\n\t\t.filter((value): value is string => Boolean(value))\n\t\t.join(\"\\n\\n\");\n\treturn truncateUtf8(appendResultInstruction(prompt, evidence.resultFormat, maxBytes), maxBytes)\n\t\t.text;\n}\n\nfunction terminationHeading(reason: TurnTerminationReason | undefined): string {\n\tswitch (reason) {\n\t\tcase \"idle_timeout\":\n\t\t\treturn \"The idle deadline expired and the active work was aborted.\";\n\t\tcase \"turn_limit\":\n\t\t\treturn \"The assistant-turn budget was exhausted and the active work was aborted.\";\n\t\tcase \"tool_call_limit\":\n\t\t\treturn \"The tool-call budget was exhausted and the active work was aborted.\";\n\t\tcase \"orchestration_timeout\":\n\t\t\treturn \"The orchestration deadline expired and the active work was aborted.\";\n\t\tdefault:\n\t\t\treturn \"Work deadline expired and the active work was aborted.\";\n\t}\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;AAUO,IAAM,kCAAkC;AAWxC,SAAS,6BAA6B,eAAuB,UAA2B;AAC9F,QAAM,YAAY,YAAY,KAAK,IAAI,eAAe,+BAA+B;AACrF,MAAI,CAAC,OAAO,SAAS,SAAS,KAAK,YAAY,GAAG;AACjD,UAAM,IAAI,MAAM,gEAAgE;AAAA,EACjF;AACA,SAAO,KAAK,IAAI,KAAK,MAAM,SAAS,GAAG,+BAA+B;AACvE;AAEO,SAAS,+BACf,UACA,WAAW,2BACF;AACT,QAAM,YAAY,SAAS,kBAAkB,CAAC,GAC5C,MAAM,GAAG,EACT;AAAA,IAAI,CAAC,SACL,KAAK,SAAS,SACX,qBAAqB,kBAAkB,KAAK,IAAI,CAAC,KACjD,oBAAoB,kBAAkB,KAAK,IAAI,CAAC;AAAA,EACpD,EACC,KAAK,IAAI;AACX,QAAM,SAAS;AAAA,IACd,mBAAmB,SAAS,iBAAiB;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAmB,kBAAkB,SAAS,IAAI,CAAC;AAAA,IACnD,SAAS,gBACN;AAAA,EAA8B,kBAAkB,SAAS,aAAa,CAAC,KACvE;AAAA,IACH,SAAS,aACN;AAAA,EAAuC,wBAAwB,SAAS,UAAU,CAAC,KACnF;AAAA,IACH,WAAW;AAAA,EAA6B,QAAQ,KAAK;AAAA,EACtD,EACE,OAAO,CAAC,UAA2B,QAAQ,KAAK,CAAC,EACjD,KAAK,MAAM;AACb,SAAO,aAAa,wBAAwB,QAAQ,SAAS,cAAc,QAAQ,GAAG,QAAQ,EAC5F;AACH;AAEA,SAAS,mBAAmB,QAAmD;AAC9E,UAAQ,QAAQ;AAAA,IACf,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR;AACC,aAAO;AAAA,EACT;AACD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
-
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
-
import {
|
|
4
|
-
MAX_SUBAGENT_TIMEOUT_MS
|
|
5
|
-
} from "./chunk-H3FP6DLR.ts";
|
|
6
|
-
|
|
7
|
-
// src/turn-budget.ts
|
|
8
|
-
var MAX_SUBAGENT_TURNS = 1e6;
|
|
9
|
-
var MAX_SUBAGENT_TOOL_CALLS = 1e6;
|
|
10
|
-
var TERMINAL_STOP_REASONS = /* @__PURE__ */ new Set(["stop", "length", "error", "aborted"]);
|
|
11
|
-
function validateTurnLimits(limits) {
|
|
12
|
-
validateOptionalInteger("idleTimeoutMs", limits.idleTimeoutMs, MAX_SUBAGENT_TIMEOUT_MS);
|
|
13
|
-
validateOptionalInteger("maxTurns", limits.maxTurns, MAX_SUBAGENT_TURNS);
|
|
14
|
-
validateOptionalInteger("maxToolCalls", limits.maxToolCalls, MAX_SUBAGENT_TOOL_CALLS);
|
|
15
|
-
return { ...limits };
|
|
16
|
-
}
|
|
17
|
-
var TurnBudgetMonitor = class {
|
|
18
|
-
limits;
|
|
19
|
-
onExceeded;
|
|
20
|
-
idleTimer;
|
|
21
|
-
assistantTurns = 0;
|
|
22
|
-
toolCalls = 0;
|
|
23
|
-
stopped = false;
|
|
24
|
-
constructor(options) {
|
|
25
|
-
this.limits = validateTurnLimits({
|
|
26
|
-
idleTimeoutMs: options.idleTimeoutMs,
|
|
27
|
-
maxTurns: options.maxTurns,
|
|
28
|
-
maxToolCalls: options.maxToolCalls
|
|
29
|
-
});
|
|
30
|
-
this.onExceeded = options.onExceeded;
|
|
31
|
-
this.resetIdleTimer();
|
|
32
|
-
}
|
|
33
|
-
recordActivity() {
|
|
34
|
-
if (this.stopped) return;
|
|
35
|
-
this.resetIdleTimer();
|
|
36
|
-
}
|
|
37
|
-
recordAssistantTurn(stopReason) {
|
|
38
|
-
if (this.stopped) return;
|
|
39
|
-
this.assistantTurns++;
|
|
40
|
-
this.recordActivity();
|
|
41
|
-
if (this.limits.maxTurns !== void 0 && this.assistantTurns >= this.limits.maxTurns && !TERMINAL_STOP_REASONS.has(stopReason ?? "")) {
|
|
42
|
-
this.exceed({ reason: "turn_limit", limit: this.limits.maxTurns });
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
recordToolCalls(count = 1) {
|
|
46
|
-
if (this.stopped || count < 1) return;
|
|
47
|
-
this.toolCalls += count;
|
|
48
|
-
if (this.limits.maxToolCalls !== void 0 && this.toolCalls > this.limits.maxToolCalls) {
|
|
49
|
-
this.exceed({ reason: "tool_call_limit", limit: this.limits.maxToolCalls });
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
dispose() {
|
|
53
|
-
this.stopped = true;
|
|
54
|
-
if (this.idleTimer) clearTimeout(this.idleTimer);
|
|
55
|
-
this.idleTimer = void 0;
|
|
56
|
-
}
|
|
57
|
-
resetIdleTimer() {
|
|
58
|
-
if (this.idleTimer) clearTimeout(this.idleTimer);
|
|
59
|
-
const idleTimeoutMs = this.limits.idleTimeoutMs;
|
|
60
|
-
if (idleTimeoutMs === void 0 || this.stopped) {
|
|
61
|
-
this.idleTimer = void 0;
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
this.idleTimer = setTimeout(
|
|
65
|
-
() => this.exceed({ reason: "idle_timeout", limit: idleTimeoutMs }),
|
|
66
|
-
idleTimeoutMs
|
|
67
|
-
);
|
|
68
|
-
this.idleTimer.unref?.();
|
|
69
|
-
}
|
|
70
|
-
exceed(stop) {
|
|
71
|
-
if (this.stopped) return;
|
|
72
|
-
this.stopped = true;
|
|
73
|
-
if (this.idleTimer) clearTimeout(this.idleTimer);
|
|
74
|
-
this.idleTimer = void 0;
|
|
75
|
-
this.onExceeded(stop);
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
function validateOptionalInteger(name, value, maximum) {
|
|
79
|
-
if (value === void 0) return;
|
|
80
|
-
if (!Number.isSafeInteger(value) || value < 1 || value > maximum) {
|
|
81
|
-
throw new Error(`${name} must be an integer between 1 and ${maximum}`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export {
|
|
86
|
-
MAX_SUBAGENT_TURNS,
|
|
87
|
-
MAX_SUBAGENT_TOOL_CALLS,
|
|
88
|
-
validateTurnLimits,
|
|
89
|
-
TurnBudgetMonitor
|
|
90
|
-
};
|
|
91
|
-
//# sourceMappingURL=chunk-ONDTY4EL.ts.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/turn-budget.ts"],
|
|
4
|
-
"sourcesContent": ["import { MAX_SUBAGENT_TIMEOUT_MS } from \"./limits.js\";\nimport type { TurnTerminationReason } from \"./timeout-checkpoint.js\";\n\nexport const MAX_SUBAGENT_TURNS = 1_000_000;\nexport const MAX_SUBAGENT_TOOL_CALLS = 1_000_000;\n\nexport interface TurnLimits {\n\tidleTimeoutMs?: number;\n\tmaxTurns?: number;\n\tmaxToolCalls?: number;\n}\n\nexport interface TurnBudgetStop {\n\treason: Extract<TurnTerminationReason, \"idle_timeout\" | \"turn_limit\" | \"tool_call_limit\">;\n\tlimit: number;\n}\n\nexport interface TurnBudgetMonitorOptions extends TurnLimits {\n\tonExceeded(stop: TurnBudgetStop): void;\n}\n\nconst TERMINAL_STOP_REASONS = new Set([\"stop\", \"length\", \"error\", \"aborted\"]);\n\nexport function validateTurnLimits(limits: TurnLimits): TurnLimits {\n\tvalidateOptionalInteger(\"idleTimeoutMs\", limits.idleTimeoutMs, MAX_SUBAGENT_TIMEOUT_MS);\n\tvalidateOptionalInteger(\"maxTurns\", limits.maxTurns, MAX_SUBAGENT_TURNS);\n\tvalidateOptionalInteger(\"maxToolCalls\", limits.maxToolCalls, MAX_SUBAGENT_TOOL_CALLS);\n\treturn { ...limits };\n}\n\nexport class TurnBudgetMonitor {\n\tprivate readonly limits: TurnLimits;\n\tprivate readonly onExceeded: (stop: TurnBudgetStop) => void;\n\tprivate idleTimer?: NodeJS.Timeout;\n\tprivate assistantTurns = 0;\n\tprivate toolCalls = 0;\n\tprivate stopped = false;\n\n\tconstructor(options: TurnBudgetMonitorOptions) {\n\t\tthis.limits = validateTurnLimits({\n\t\t\tidleTimeoutMs: options.idleTimeoutMs,\n\t\t\tmaxTurns: options.maxTurns,\n\t\t\tmaxToolCalls: options.maxToolCalls,\n\t\t});\n\t\tthis.onExceeded = options.onExceeded;\n\t\tthis.resetIdleTimer();\n\t}\n\n\trecordActivity(): void {\n\t\tif (this.stopped) return;\n\t\tthis.resetIdleTimer();\n\t}\n\n\trecordAssistantTurn(stopReason?: string): void {\n\t\tif (this.stopped) return;\n\t\tthis.assistantTurns++;\n\t\tthis.recordActivity();\n\t\tif (\n\t\t\tthis.limits.maxTurns !== undefined &&\n\t\t\tthis.assistantTurns >= this.limits.maxTurns &&\n\t\t\t!TERMINAL_STOP_REASONS.has(stopReason ?? \"\")\n\t\t) {\n\t\t\tthis.exceed({ reason: \"turn_limit\", limit: this.limits.maxTurns });\n\t\t}\n\t}\n\n\trecordToolCalls(count = 1): void {\n\t\tif (this.stopped || count < 1) return;\n\t\tthis.toolCalls += count;\n\t\tif (this.limits.maxToolCalls !== undefined && this.toolCalls > this.limits.maxToolCalls) {\n\t\t\tthis.exceed({ reason: \"tool_call_limit\", limit: this.limits.maxToolCalls });\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.stopped = true;\n\t\tif (this.idleTimer) clearTimeout(this.idleTimer);\n\t\tthis.idleTimer = undefined;\n\t}\n\n\tprivate resetIdleTimer(): void {\n\t\tif (this.idleTimer) clearTimeout(this.idleTimer);\n\t\tconst idleTimeoutMs = this.limits.idleTimeoutMs;\n\t\tif (idleTimeoutMs === undefined || this.stopped) {\n\t\t\tthis.idleTimer = undefined;\n\t\t\treturn;\n\t\t}\n\t\tthis.idleTimer = setTimeout(\n\t\t\t() => this.exceed({ reason: \"idle_timeout\", limit: idleTimeoutMs }),\n\t\t\tidleTimeoutMs,\n\t\t);\n\t\tthis.idleTimer.unref?.();\n\t}\n\n\tprivate exceed(stop: TurnBudgetStop): void {\n\t\tif (this.stopped) return;\n\t\tthis.stopped = true;\n\t\tif (this.idleTimer) clearTimeout(this.idleTimer);\n\t\tthis.idleTimer = undefined;\n\t\tthis.onExceeded(stop);\n\t}\n}\n\nfunction validateOptionalInteger(name: string, value: number | undefined, maximum: number): void {\n\tif (value === undefined) return;\n\tif (!Number.isSafeInteger(value) || value < 1 || value > maximum) {\n\t\tthrow new Error(`${name} must be an integer between 1 and ${maximum}`);\n\t}\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAGO,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B;AAiBvC,IAAM,wBAAwB,oBAAI,IAAI,CAAC,QAAQ,UAAU,SAAS,SAAS,CAAC;AAErE,SAAS,mBAAmB,QAAgC;AAClE,0BAAwB,iBAAiB,OAAO,eAAe,uBAAuB;AACtF,0BAAwB,YAAY,OAAO,UAAU,kBAAkB;AACvE,0BAAwB,gBAAgB,OAAO,cAAc,uBAAuB;AACpF,SAAO,EAAE,GAAG,OAAO;AACpB;AAEO,IAAM,oBAAN,MAAwB;AAAA,EACb;AAAA,EACA;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,UAAU;AAAA,EAElB,YAAY,SAAmC;AAC9C,SAAK,SAAS,mBAAmB;AAAA,MAChC,eAAe,QAAQ;AAAA,MACvB,UAAU,QAAQ;AAAA,MAClB,cAAc,QAAQ;AAAA,IACvB,CAAC;AACD,SAAK,aAAa,QAAQ;AAC1B,SAAK,eAAe;AAAA,EACrB;AAAA,EAEA,iBAAuB;AACtB,QAAI,KAAK,QAAS;AAClB,SAAK,eAAe;AAAA,EACrB;AAAA,EAEA,oBAAoB,YAA2B;AAC9C,QAAI,KAAK,QAAS;AAClB,SAAK;AACL,SAAK,eAAe;AACpB,QACC,KAAK,OAAO,aAAa,UACzB,KAAK,kBAAkB,KAAK,OAAO,YACnC,CAAC,sBAAsB,IAAI,cAAc,EAAE,GAC1C;AACD,WAAK,OAAO,EAAE,QAAQ,cAAc,OAAO,KAAK,OAAO,SAAS,CAAC;AAAA,IAClE;AAAA,EACD;AAAA,EAEA,gBAAgB,QAAQ,GAAS;AAChC,QAAI,KAAK,WAAW,QAAQ,EAAG;AAC/B,SAAK,aAAa;AAClB,QAAI,KAAK,OAAO,iBAAiB,UAAa,KAAK,YAAY,KAAK,OAAO,cAAc;AACxF,WAAK,OAAO,EAAE,QAAQ,mBAAmB,OAAO,KAAK,OAAO,aAAa,CAAC;AAAA,IAC3E;AAAA,EACD;AAAA,EAEA,UAAgB;AACf,SAAK,UAAU;AACf,QAAI,KAAK,UAAW,cAAa,KAAK,SAAS;AAC/C,SAAK,YAAY;AAAA,EAClB;AAAA,EAEQ,iBAAuB;AAC9B,QAAI,KAAK,UAAW,cAAa,KAAK,SAAS;AAC/C,UAAM,gBAAgB,KAAK,OAAO;AAClC,QAAI,kBAAkB,UAAa,KAAK,SAAS;AAChD,WAAK,YAAY;AACjB;AAAA,IACD;AACA,SAAK,YAAY;AAAA,MAChB,MAAM,KAAK,OAAO,EAAE,QAAQ,gBAAgB,OAAO,cAAc,CAAC;AAAA,MAClE;AAAA,IACD;AACA,SAAK,UAAU,QAAQ;AAAA,EACxB;AAAA,EAEQ,OAAO,MAA4B;AAC1C,QAAI,KAAK,QAAS;AAClB,SAAK,UAAU;AACf,QAAI,KAAK,UAAW,cAAa,KAAK,SAAS;AAC/C,SAAK,YAAY;AACjB,SAAK,WAAW,IAAI;AAAA,EACrB;AACD;AAEA,SAAS,wBAAwB,MAAc,OAA2B,SAAuB;AAChG,MAAI,UAAU,OAAW;AACzB,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,KAAK,QAAQ,SAAS;AACjE,UAAM,IAAI,MAAM,GAAG,IAAI,qCAAqC,OAAO,EAAE;AAAA,EACtE;AACD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|