@narumitw/pi-subagents 2.1.3 → 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 +181 -1250
- 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 -1598
- 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 -153
- package/docs/pi-subagents-diagrams.md +0 -183
- package/src/adaptive-scheduler.ts +0 -224
- package/src/admission-benchmark.ts +0 -95
- 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/async-subagent-benchmark.ts +0 -532
- 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 -355
- 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,300 +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
|
-
grammarSafeToolObject
|
|
5
|
-
} from "./chunk-TZ34IQ3M.ts";
|
|
6
|
-
import {
|
|
7
|
-
MAX_SUBAGENT_TOOL_CALLS,
|
|
8
|
-
MAX_SUBAGENT_TURNS
|
|
9
|
-
} from "./chunk-ONDTY4EL.ts";
|
|
10
|
-
import {
|
|
11
|
-
SUBAGENT_RESULT_FORMATS
|
|
12
|
-
} from "./chunk-RSUXZD6S.ts";
|
|
13
|
-
import {
|
|
14
|
-
THINKING_LEVELS
|
|
15
|
-
} from "./chunk-4AQSF7AS.ts";
|
|
16
|
-
import {
|
|
17
|
-
DelegationContractSchema
|
|
18
|
-
} from "./chunk-JSZIP73U.ts";
|
|
19
|
-
import {
|
|
20
|
-
MAX_CONFIGURABLE_PARALLEL_TASKS,
|
|
21
|
-
MAX_SUBAGENT_TIMEOUT_MS
|
|
22
|
-
} from "./chunk-H3FP6DLR.ts";
|
|
23
|
-
|
|
24
|
-
// src/params.ts
|
|
25
|
-
import { StringEnum as StringEnum2 } from "@earendil-works/pi-ai";
|
|
26
|
-
import { Type as Type2 } from "typebox";
|
|
27
|
-
|
|
28
|
-
// src/panel-presets.ts
|
|
29
|
-
var PANEL_PRESETS = ["code-review", "research", "security-review", "custom"];
|
|
30
|
-
|
|
31
|
-
// src/verified-execution-schema.ts
|
|
32
|
-
import { StringEnum } from "@earendil-works/pi-ai";
|
|
33
|
-
import { Type } from "typebox";
|
|
34
|
-
var VerificationCheckSchema = Type.Object(
|
|
35
|
-
{
|
|
36
|
-
id: Type.String({
|
|
37
|
-
minLength: 1,
|
|
38
|
-
maxLength: 256,
|
|
39
|
-
pattern: "^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$"
|
|
40
|
-
}),
|
|
41
|
-
command: StringEnum(["git", "node", "npm", "npx"]),
|
|
42
|
-
args: Type.Optional(Type.Array(Type.String({ maxLength: 4096 }), { maxItems: 64 })),
|
|
43
|
-
cwd: Type.Optional(Type.String({ minLength: 1, maxLength: 4096 })),
|
|
44
|
-
timeoutMs: Type.Optional(Type.Integer({ minimum: 1, maximum: 6e5 }))
|
|
45
|
-
},
|
|
46
|
-
{ additionalProperties: false }
|
|
47
|
-
);
|
|
48
|
-
var VerifiedExecutionContractSchema = Type.Object(
|
|
49
|
-
{
|
|
50
|
-
verifierAgent: Type.String({ minLength: 1, maxLength: 256 }),
|
|
51
|
-
maxReworkCycles: Type.Optional(Type.Integer({ minimum: 0, maximum: 1, default: 1 })),
|
|
52
|
-
checks: Type.Optional(Type.Array(VerificationCheckSchema, { maxItems: 32 }))
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
additionalProperties: false,
|
|
56
|
-
description: "Explicitly gate mutating workflow success on executor-owned deterministic checks, one least-authority independent verifier, exact submitted-state identity, and managed integration acceptance."
|
|
57
|
-
}
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
// src/params.ts
|
|
61
|
-
var TimeoutMs = Type2.Number({
|
|
62
|
-
description: "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.",
|
|
63
|
-
minimum: 1,
|
|
64
|
-
maximum: MAX_SUBAGENT_TIMEOUT_MS
|
|
65
|
-
});
|
|
66
|
-
var TurnLimitFields = {
|
|
67
|
-
idleTimeoutMs: Type2.Optional(
|
|
68
|
-
Type2.Integer({
|
|
69
|
-
description: "Maximum milliseconds without a completed assistant turn or tool result before Pi aborts work and preserves a checkpoint.",
|
|
70
|
-
minimum: 1,
|
|
71
|
-
maximum: MAX_SUBAGENT_TIMEOUT_MS
|
|
72
|
-
})
|
|
73
|
-
),
|
|
74
|
-
maxTurns: Type2.Optional(
|
|
75
|
-
Type2.Integer({
|
|
76
|
-
description: "Maximum assistant turns before unfinished work is stopped and checkpointed.",
|
|
77
|
-
minimum: 1,
|
|
78
|
-
maximum: MAX_SUBAGENT_TURNS
|
|
79
|
-
})
|
|
80
|
-
),
|
|
81
|
-
maxToolCalls: Type2.Optional(
|
|
82
|
-
Type2.Integer({
|
|
83
|
-
description: "Maximum tool calls before additional tool work is stopped and checkpointed.",
|
|
84
|
-
minimum: 1,
|
|
85
|
-
maximum: MAX_SUBAGENT_TOOL_CALLS
|
|
86
|
-
})
|
|
87
|
-
)
|
|
88
|
-
};
|
|
89
|
-
var ThinkingLevelSchema = StringEnum2(THINKING_LEVELS, {
|
|
90
|
-
description: "Pi thinking level for the subagent process: off, minimal, low, medium, high, xhigh, or max."
|
|
91
|
-
});
|
|
92
|
-
var ResultFormatSchema = StringEnum2(SUBAGENT_RESULT_FORMATS, {
|
|
93
|
-
description: "Optional completion contract. Text preserves ordinary output; structured-v1 and structured-v2 request versioned JSON with bounded text fallback."
|
|
94
|
-
});
|
|
95
|
-
var ContractFields = {
|
|
96
|
-
contract: Type2.Optional(DelegationContractSchema),
|
|
97
|
-
resultFormat: Type2.Optional(ResultFormatSchema),
|
|
98
|
-
retryPolicy: Type2.Optional(
|
|
99
|
-
Type2.Object(
|
|
100
|
-
{
|
|
101
|
-
maxAttempts: Type2.Integer({ minimum: 1, maximum: 3 }),
|
|
102
|
-
backoffMs: Type2.Optional(Type2.Integer({ minimum: 0, maximum: 3e4 }))
|
|
103
|
-
},
|
|
104
|
-
{ additionalProperties: false }
|
|
105
|
-
)
|
|
106
|
-
),
|
|
107
|
-
hedgeAfterMs: Type2.Optional(Type2.Integer({ minimum: 1, maximum: 3e4 }))
|
|
108
|
-
};
|
|
109
|
-
var TaskItem = Type2.Object({
|
|
110
|
-
agent: Type2.String({ description: "Name of the agent to invoke" }),
|
|
111
|
-
task: Type2.String({ description: "Task to delegate to the agent" }),
|
|
112
|
-
cwd: Type2.Optional(Type2.String({ description: "Working directory for the agent process" })),
|
|
113
|
-
timeoutMs: Type2.Optional(TimeoutMs),
|
|
114
|
-
...TurnLimitFields,
|
|
115
|
-
thinkingLevel: Type2.Optional(ThinkingLevelSchema),
|
|
116
|
-
...ContractFields
|
|
117
|
-
});
|
|
118
|
-
var WorkflowTaskItem = Type2.Object({
|
|
119
|
-
id: Type2.String({ minLength: 1, maxLength: 256 }),
|
|
120
|
-
agent: Type2.Optional(
|
|
121
|
-
Type2.String({ description: "Optional explicit agent; omit to route by capability manifest" })
|
|
122
|
-
),
|
|
123
|
-
requiredCapabilities: Type2.Optional(
|
|
124
|
-
Type2.Array(Type2.String({ minLength: 1, maxLength: 256 }), { maxItems: 50 })
|
|
125
|
-
),
|
|
126
|
-
requiredTools: Type2.Optional(
|
|
127
|
-
Type2.Array(Type2.String({ minLength: 1, maxLength: 256 }), { maxItems: 50 })
|
|
128
|
-
),
|
|
129
|
-
requiredVerificationRole: Type2.Optional(Type2.String({ minLength: 1, maxLength: 256 })),
|
|
130
|
-
preferredCostHint: Type2.Optional(StringEnum2(["low", "medium", "high"])),
|
|
131
|
-
preferredLatencyHint: Type2.Optional(StringEnum2(["low", "medium", "high"])),
|
|
132
|
-
task: Type2.String({ description: "Task to delegate to the agent" }),
|
|
133
|
-
dependsOn: Type2.Optional(
|
|
134
|
-
Type2.Array(Type2.String({ minLength: 1, maxLength: 256 }), { maxItems: 64 })
|
|
135
|
-
),
|
|
136
|
-
inputArtifacts: Type2.Optional(
|
|
137
|
-
Type2.Array(Type2.String({ minLength: 1, maxLength: 256 }), { maxItems: 50 })
|
|
138
|
-
),
|
|
139
|
-
inputArtifactVersions: Type2.Optional(
|
|
140
|
-
Type2.Record(
|
|
141
|
-
Type2.String({ minLength: 1, maxLength: 256 }),
|
|
142
|
-
Type2.String({ minLength: 1, maxLength: 256 })
|
|
143
|
-
)
|
|
144
|
-
),
|
|
145
|
-
readPaths: Type2.Optional(Type2.Array(Type2.String({ maxLength: 4096 }), { maxItems: 50 })),
|
|
146
|
-
writePaths: Type2.Optional(Type2.Array(Type2.String({ maxLength: 4096 }), { maxItems: 50 })),
|
|
147
|
-
ownershipKeys: Type2.Optional(Type2.Array(Type2.String({ maxLength: 256 }), { maxItems: 50 })),
|
|
148
|
-
acceptanceCriteria: Type2.Optional(Type2.Array(Type2.String({ maxLength: 4096 }), { maxItems: 50 })),
|
|
149
|
-
integrationOwner: Type2.Optional(Type2.Boolean()),
|
|
150
|
-
verifierFor: Type2.Optional(
|
|
151
|
-
Type2.String({
|
|
152
|
-
minLength: 1,
|
|
153
|
-
maxLength: 256,
|
|
154
|
-
description: "Target task ID for one distinct direct-dependent structured-v2 verifier. The executor gates target acceptance on a current exact-tree receipt."
|
|
155
|
-
})
|
|
156
|
-
),
|
|
157
|
-
cwd: Type2.Optional(Type2.String({ description: "Working directory for the agent process" })),
|
|
158
|
-
timeoutMs: Type2.Optional(TimeoutMs),
|
|
159
|
-
...TurnLimitFields,
|
|
160
|
-
thinkingLevel: Type2.Optional(ThinkingLevelSchema),
|
|
161
|
-
...ContractFields
|
|
162
|
-
});
|
|
163
|
-
var ChainItem = Type2.Object({
|
|
164
|
-
agent: Type2.String({ description: "Name of the agent to invoke" }),
|
|
165
|
-
task: Type2.String({ description: "Task with optional {previous} placeholder for prior output" }),
|
|
166
|
-
cwd: Type2.Optional(Type2.String({ description: "Working directory for the agent process" })),
|
|
167
|
-
timeoutMs: Type2.Optional(TimeoutMs),
|
|
168
|
-
...TurnLimitFields,
|
|
169
|
-
thinkingLevel: Type2.Optional(ThinkingLevelSchema),
|
|
170
|
-
...ContractFields
|
|
171
|
-
});
|
|
172
|
-
var AggregatorItem = Type2.Object(
|
|
173
|
-
{
|
|
174
|
-
agent: Type2.String({
|
|
175
|
-
description: "Name of the fan-in agent to invoke after parallel tasks complete"
|
|
176
|
-
}),
|
|
177
|
-
task: Type2.String({
|
|
178
|
-
description: "Fan-in task. Use {previous} to include all parallel outputs."
|
|
179
|
-
}),
|
|
180
|
-
cwd: Type2.Optional(
|
|
181
|
-
Type2.String({ description: "Working directory for the aggregator process" })
|
|
182
|
-
),
|
|
183
|
-
timeoutMs: Type2.Optional(TimeoutMs),
|
|
184
|
-
...TurnLimitFields,
|
|
185
|
-
thinkingLevel: Type2.Optional(ThinkingLevelSchema),
|
|
186
|
-
...ContractFields
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
description: "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."
|
|
190
|
-
}
|
|
191
|
-
);
|
|
192
|
-
var PanelReviewerItem = Type2.Object(
|
|
193
|
-
{
|
|
194
|
-
id: Type2.String({ minLength: 1, maxLength: 256 }),
|
|
195
|
-
agent: Type2.String({ minLength: 1 }),
|
|
196
|
-
focus: Type2.Optional(Type2.String({ maxLength: 8 * 1024 })),
|
|
197
|
-
timeoutMs: Type2.Optional(TimeoutMs),
|
|
198
|
-
...TurnLimitFields,
|
|
199
|
-
thinkingLevel: Type2.Optional(ThinkingLevelSchema)
|
|
200
|
-
},
|
|
201
|
-
{ additionalProperties: false }
|
|
202
|
-
);
|
|
203
|
-
var PanelSynthesizerItem = Type2.Object(
|
|
204
|
-
{
|
|
205
|
-
agent: Type2.String({ minLength: 1 }),
|
|
206
|
-
timeoutMs: Type2.Optional(TimeoutMs),
|
|
207
|
-
...TurnLimitFields,
|
|
208
|
-
thinkingLevel: Type2.Optional(ThinkingLevelSchema)
|
|
209
|
-
},
|
|
210
|
-
{ additionalProperties: false }
|
|
211
|
-
);
|
|
212
|
-
var PanelItem = Type2.Object(
|
|
213
|
-
{
|
|
214
|
-
id: Type2.Optional(Type2.String({ minLength: 1, maxLength: 256 })),
|
|
215
|
-
preset: Type2.Optional(StringEnum2(PANEL_PRESETS, { default: "custom" })),
|
|
216
|
-
task: Type2.String({ minLength: 1, maxLength: 50 * 1024 }),
|
|
217
|
-
context: Type2.Optional(Type2.String({ maxLength: 50 * 1024 })),
|
|
218
|
-
reviewers: Type2.Array(PanelReviewerItem, {
|
|
219
|
-
minItems: 2,
|
|
220
|
-
maxItems: MAX_CONFIGURABLE_PARALLEL_TASKS
|
|
221
|
-
}),
|
|
222
|
-
synthesizer: PanelSynthesizerItem,
|
|
223
|
-
minValidReviews: Type2.Optional(Type2.Integer({ minimum: 2 }))
|
|
224
|
-
},
|
|
225
|
-
{
|
|
226
|
-
additionalProperties: false,
|
|
227
|
-
description: "One bounded independent review round followed by one evidence-preserving synthesis when enough valid reviews remain."
|
|
228
|
-
}
|
|
229
|
-
);
|
|
230
|
-
var AgentScopeSchema = StringEnum2(["user", "project", "both"], {
|
|
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.',
|
|
232
|
-
default: "user"
|
|
233
|
-
});
|
|
234
|
-
var SubagentParams = grammarSafeToolObject({
|
|
235
|
-
agent: Type2.Optional(
|
|
236
|
-
Type2.String({ description: "Name of the agent to invoke (for single mode)" })
|
|
237
|
-
),
|
|
238
|
-
task: Type2.Optional(Type2.String({ description: "Task to delegate (for single mode)" })),
|
|
239
|
-
tasks: Type2.Optional(
|
|
240
|
-
Type2.Array(TaskItem, {
|
|
241
|
-
description: "Array of {agent, task} for parallel execution",
|
|
242
|
-
maxItems: MAX_CONFIGURABLE_PARALLEL_TASKS
|
|
243
|
-
})
|
|
244
|
-
),
|
|
245
|
-
chain: Type2.Optional(
|
|
246
|
-
Type2.Array(ChainItem, { description: "Array of {agent, task} for sequential execution" })
|
|
247
|
-
),
|
|
248
|
-
aggregator: Type2.Optional(AggregatorItem),
|
|
249
|
-
panel: Type2.Optional(PanelItem),
|
|
250
|
-
workflow: Type2.Optional(
|
|
251
|
-
Type2.Object(
|
|
252
|
-
{
|
|
253
|
-
id: Type2.Optional(Type2.String({ minLength: 1, maxLength: 256 })),
|
|
254
|
-
verifiedExecution: Type2.Optional(VerifiedExecutionContractSchema),
|
|
255
|
-
honorAdmission: Type2.Optional(
|
|
256
|
-
Type2.Boolean({
|
|
257
|
-
description: "Opt in to declining workflow tasks whose explicit audit metadata recommends parent-owned work or abstention."
|
|
258
|
-
})
|
|
259
|
-
),
|
|
260
|
-
tasks: Type2.Array(WorkflowTaskItem, {
|
|
261
|
-
minItems: 1,
|
|
262
|
-
maxItems: MAX_CONFIGURABLE_PARALLEL_TASKS
|
|
263
|
-
})
|
|
264
|
-
},
|
|
265
|
-
{ additionalProperties: false }
|
|
266
|
-
)
|
|
267
|
-
),
|
|
268
|
-
agentScope: Type2.Optional(AgentScopeSchema),
|
|
269
|
-
confirmProjectAgents: Type2.Optional(
|
|
270
|
-
Type2.Boolean({
|
|
271
|
-
description: "Prompt before running project-local agents. Default: true.",
|
|
272
|
-
default: true
|
|
273
|
-
})
|
|
274
|
-
),
|
|
275
|
-
cwd: Type2.Optional(
|
|
276
|
-
Type2.String({ description: "Working directory for the agent process (single mode)" })
|
|
277
|
-
),
|
|
278
|
-
timeoutMs: Type2.Optional(TimeoutMs),
|
|
279
|
-
totalTimeoutMs: Type2.Optional(
|
|
280
|
-
Type2.Number({
|
|
281
|
-
description: "Overall blocking-workflow deadline in milliseconds, including queued work, workflow tasks, panel phases, chain steps, and fan-in.",
|
|
282
|
-
minimum: 1,
|
|
283
|
-
maximum: MAX_SUBAGENT_TIMEOUT_MS
|
|
284
|
-
})
|
|
285
|
-
),
|
|
286
|
-
...TurnLimitFields,
|
|
287
|
-
thinkingLevel: Type2.Optional(ThinkingLevelSchema),
|
|
288
|
-
...ContractFields
|
|
289
|
-
});
|
|
290
|
-
function hasUsableAggregator(aggregator) {
|
|
291
|
-
if (!aggregator || typeof aggregator !== "object") return false;
|
|
292
|
-
const candidate = aggregator;
|
|
293
|
-
return typeof candidate.agent === "string" && candidate.agent.trim().length > 0 && typeof candidate.task === "string" && candidate.task.trim().length > 0;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
export {
|
|
297
|
-
SubagentParams,
|
|
298
|
-
hasUsableAggregator
|
|
299
|
-
};
|
|
300
|
-
//# sourceMappingURL=chunk-FEVPWRMU.ts.map
|
|
@@ -1,7 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,70 +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
|
-
|
|
4
|
-
// src/prompt-resources.ts
|
|
5
|
-
import {
|
|
6
|
-
DefaultResourceLoader,
|
|
7
|
-
getAgentDir,
|
|
8
|
-
SettingsManager
|
|
9
|
-
} from "@earendil-works/pi-coding-agent";
|
|
10
|
-
|
|
11
|
-
// src/prompt-source-safety.ts
|
|
12
|
-
import * as fs from "node:fs";
|
|
13
|
-
import * as path from "node:path";
|
|
14
|
-
import { CONFIG_DIR_NAME } from "@earendil-works/pi-coding-agent";
|
|
15
|
-
function assertPiPromptSourcesAreReadableFiles(cwd, agentDir, projectTrusted, fileNames) {
|
|
16
|
-
for (const fileName of fileNames) {
|
|
17
|
-
const candidates = [
|
|
18
|
-
...projectTrusted ? [path.join(cwd, CONFIG_DIR_NAME, fileName)] : [],
|
|
19
|
-
path.join(agentDir, fileName)
|
|
20
|
-
];
|
|
21
|
-
for (const candidate of candidates) {
|
|
22
|
-
const status = promptSourceStatus(candidate);
|
|
23
|
-
if (status === "missing") continue;
|
|
24
|
-
if (status === "invalid") {
|
|
25
|
-
throw new Error(`Pi ${fileName} prompt source must be a readable regular file`);
|
|
26
|
-
}
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
function promptSourceStatus(filePath) {
|
|
32
|
-
let descriptor;
|
|
33
|
-
try {
|
|
34
|
-
descriptor = fs.openSync(filePath, fs.constants.O_RDONLY | fs.constants.O_NONBLOCK);
|
|
35
|
-
return fs.fstatSync(descriptor).isFile() ? "regular" : "invalid";
|
|
36
|
-
} catch (error) {
|
|
37
|
-
const code = error && typeof error === "object" && "code" in error ? error.code : void 0;
|
|
38
|
-
return code === "ENOENT" || code === "ENOTDIR" ? "missing" : "invalid";
|
|
39
|
-
} finally {
|
|
40
|
-
if (descriptor !== void 0) fs.closeSync(descriptor);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// src/prompt-resources.ts
|
|
45
|
-
async function resolvePiPromptResources(cwd, projectTrusted, agentDir = getAgentDir()) {
|
|
46
|
-
assertPiPromptSourcesAreReadableFiles(cwd, agentDir, projectTrusted, [
|
|
47
|
-
"SYSTEM.md",
|
|
48
|
-
"APPEND_SYSTEM.md"
|
|
49
|
-
]);
|
|
50
|
-
const loader = new DefaultResourceLoader({
|
|
51
|
-
cwd,
|
|
52
|
-
agentDir,
|
|
53
|
-
settingsManager: SettingsManager.inMemory({}, { projectTrusted }),
|
|
54
|
-
noExtensions: true,
|
|
55
|
-
noSkills: true,
|
|
56
|
-
noPromptTemplates: true,
|
|
57
|
-
noThemes: true,
|
|
58
|
-
noContextFiles: true
|
|
59
|
-
});
|
|
60
|
-
await loader.reload();
|
|
61
|
-
return {
|
|
62
|
-
systemPrompt: loader.getSystemPrompt(),
|
|
63
|
-
appendSystemPromptPaths: loader.getAppendSystemPromptSources().map((source) => source.path)
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export {
|
|
68
|
-
resolvePiPromptResources
|
|
69
|
-
};
|
|
70
|
-
//# sourceMappingURL=chunk-G6VZTCFH.ts.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/prompt-resources.ts", "../../src/prompt-source-safety.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\tDefaultResourceLoader,\n\tgetAgentDir,\n\tSettingsManager,\n} from \"@earendil-works/pi-coding-agent\";\nimport { assertPiPromptSourcesAreReadableFiles } from \"./prompt-source-safety.js\";\n\nexport interface PiPromptResources {\n\tsystemPrompt?: string;\n\tappendSystemPromptPaths: string[];\n}\n\n/** Resolve Pi-owned prompt files without loading target packages, extensions, or settings. */\nexport async function resolvePiPromptResources(\n\tcwd: string,\n\tprojectTrusted: boolean,\n\tagentDir = getAgentDir(),\n): Promise<PiPromptResources> {\n\tassertPiPromptSourcesAreReadableFiles(cwd, agentDir, projectTrusted, [\n\t\t\"SYSTEM.md\",\n\t\t\"APPEND_SYSTEM.md\",\n\t]);\n\tconst loader = new DefaultResourceLoader({\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager: SettingsManager.inMemory({}, { projectTrusted }),\n\t\tnoExtensions: true,\n\t\tnoSkills: true,\n\t\tnoPromptTemplates: true,\n\t\tnoThemes: true,\n\t\tnoContextFiles: true,\n\t});\n\tawait loader.reload();\n\treturn {\n\t\tsystemPrompt: loader.getSystemPrompt(),\n\t\tappendSystemPromptPaths: loader.getAppendSystemPromptSources().map((source) => source.path),\n\t};\n}\n", "import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { CONFIG_DIR_NAME } from \"@earendil-works/pi-coding-agent\";\n\nexport type PiPromptFileName = \"SYSTEM.md\" | \"APPEND_SYSTEM.md\";\n\n/**\n * Prevent Pi's synchronous prompt loader from opening a selected directory, FIFO, socket, device,\n * or unreadable source. Candidate order mirrors core only as a preflight guard; core still resolves\n * and loads the prompt after this check.\n */\nexport function assertPiPromptSourcesAreReadableFiles(\n\tcwd: string,\n\tagentDir: string,\n\tprojectTrusted: boolean,\n\tfileNames: readonly PiPromptFileName[],\n): void {\n\tfor (const fileName of fileNames) {\n\t\tconst candidates = [\n\t\t\t...(projectTrusted ? [path.join(cwd, CONFIG_DIR_NAME, fileName)] : []),\n\t\t\tpath.join(agentDir, fileName),\n\t\t];\n\t\tfor (const candidate of candidates) {\n\t\t\tconst status = promptSourceStatus(candidate);\n\t\t\tif (status === \"missing\") continue;\n\t\t\tif (status === \"invalid\") {\n\t\t\t\tthrow new Error(`Pi ${fileName} prompt source must be a readable regular file`);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nfunction promptSourceStatus(filePath: string): \"missing\" | \"regular\" | \"invalid\" {\n\tlet descriptor: number | undefined;\n\ttry {\n\t\tdescriptor = fs.openSync(filePath, fs.constants.O_RDONLY | fs.constants.O_NONBLOCK);\n\t\treturn fs.fstatSync(descriptor).isFile() ? \"regular\" : \"invalid\";\n\t} catch (error) {\n\t\tconst code =\n\t\t\terror && typeof error === \"object\" && \"code\" in error\n\t\t\t\t? (error as { code?: unknown }).code\n\t\t\t\t: undefined;\n\t\treturn code === \"ENOENT\" || code === \"ENOTDIR\" ? \"missing\" : \"invalid\";\n\t} finally {\n\t\tif (descriptor !== undefined) fs.closeSync(descriptor);\n\t}\n}\n"],
|
|
5
|
-
"mappings": ";;;;AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;;;ACJP,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,uBAAuB;AASzB,SAAS,sCACf,KACA,UACA,gBACA,WACO;AACP,aAAW,YAAY,WAAW;AACjC,UAAM,aAAa;AAAA,MAClB,GAAI,iBAAiB,CAAM,UAAK,KAAK,iBAAiB,QAAQ,CAAC,IAAI,CAAC;AAAA,MAC/D,UAAK,UAAU,QAAQ;AAAA,IAC7B;AACA,eAAW,aAAa,YAAY;AACnC,YAAM,SAAS,mBAAmB,SAAS;AAC3C,UAAI,WAAW,UAAW;AAC1B,UAAI,WAAW,WAAW;AACzB,cAAM,IAAI,MAAM,MAAM,QAAQ,gDAAgD;AAAA,MAC/E;AACA;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,mBAAmB,UAAqD;AAChF,MAAI;AACJ,MAAI;AACH,iBAAgB,YAAS,UAAa,aAAU,WAAc,aAAU,UAAU;AAClF,WAAU,aAAU,UAAU,EAAE,OAAO,IAAI,YAAY;AAAA,EACxD,SAAS,OAAO;AACf,UAAM,OACL,SAAS,OAAO,UAAU,YAAY,UAAU,QAC5C,MAA6B,OAC9B;AACJ,WAAO,SAAS,YAAY,SAAS,YAAY,YAAY;AAAA,EAC9D,UAAE;AACD,QAAI,eAAe,OAAW,CAAG,aAAU,UAAU;AAAA,EACtD;AACD;;;ADlCA,eAAsB,yBACrB,KACA,gBACA,WAAW,YAAY,GACM;AAC7B,wCAAsC,KAAK,UAAU,gBAAgB;AAAA,IACpE;AAAA,IACA;AAAA,EACD,CAAC;AACD,QAAM,SAAS,IAAI,sBAAsB;AAAA,IACxC;AAAA,IACA;AAAA,IACA,iBAAiB,gBAAgB,SAAS,CAAC,GAAG,EAAE,eAAe,CAAC;AAAA,IAChE,cAAc;AAAA,IACd,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,UAAU;AAAA,IACV,gBAAgB;AAAA,EACjB,CAAC;AACD,QAAM,OAAO,OAAO;AACpB,SAAO;AAAA,IACN,cAAc,OAAO,gBAAgB;AAAA,IACrC,yBAAyB,OAAO,6BAA6B,EAAE,IAAI,CAAC,WAAW,OAAO,IAAI;AAAA,EAC3F;AACD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,160 +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
|
-
|
|
4
|
-
// src/context.ts
|
|
5
|
-
import { createHash } from "node:crypto";
|
|
6
|
-
|
|
7
|
-
// src/limits.ts
|
|
8
|
-
import { DEFAULT_MAX_BYTES } from "@earendil-works/pi-coding-agent";
|
|
9
|
-
var DEFAULT_MAX_OUTPUT_BYTES = DEFAULT_MAX_BYTES;
|
|
10
|
-
var DEFAULT_MAX_STDERR_BYTES = 16 * 1024;
|
|
11
|
-
var DEFAULT_MAX_CONTEXT_BYTES = DEFAULT_MAX_BYTES;
|
|
12
|
-
var MAX_SUBAGENT_TIMEOUT_MS = 2147483647;
|
|
13
|
-
var DEFAULT_MAX_PARALLEL_TASKS = 8;
|
|
14
|
-
var MAX_CONFIGURABLE_PARALLEL_TASKS = 64;
|
|
15
|
-
var MAX_BLOCKING_PARALLEL_CONCURRENCY = 4;
|
|
16
|
-
var DEFAULT_MAX_MESSAGES = 200;
|
|
17
|
-
var MAX_TOOL_MESSAGE_BYTES = 2 * 1024;
|
|
18
|
-
var TRUNCATION_MARKER = "\n\u2026 [truncated by pi-subagents]";
|
|
19
|
-
var TAIL_TRUNCATION_MARKER = "\u2026 [truncated by pi-subagents]\n";
|
|
20
|
-
function normalizeByteLimit(maxBytes) {
|
|
21
|
-
if (maxBytes === Number.POSITIVE_INFINITY) return Number.MAX_SAFE_INTEGER;
|
|
22
|
-
if (!Number.isFinite(maxBytes)) return 0;
|
|
23
|
-
return Math.max(0, Math.floor(maxBytes));
|
|
24
|
-
}
|
|
25
|
-
function truncateUtf8(text, maxBytes) {
|
|
26
|
-
const limit = normalizeByteLimit(maxBytes);
|
|
27
|
-
const originalBytes = Buffer.byteLength(text, "utf8");
|
|
28
|
-
if (originalBytes <= limit) return { text, truncated: false, originalBytes };
|
|
29
|
-
if (limit === 0) return { text: "", truncated: true, originalBytes };
|
|
30
|
-
const marker = Buffer.from(TRUNCATION_MARKER, "utf8");
|
|
31
|
-
if (marker.length >= limit) {
|
|
32
|
-
return {
|
|
33
|
-
text: Buffer.from(text, "utf8").subarray(0, limit).toString("utf8").replace(/�+$/g, ""),
|
|
34
|
-
truncated: true,
|
|
35
|
-
originalBytes
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
const prefix = Buffer.from(text, "utf8").subarray(0, limit - marker.length).toString("utf8").replace(/�+$/g, "");
|
|
39
|
-
return { text: `${prefix}${TRUNCATION_MARKER}`, truncated: true, originalBytes };
|
|
40
|
-
}
|
|
41
|
-
function truncateUtf8Tail(text, maxBytes) {
|
|
42
|
-
const limit = normalizeByteLimit(maxBytes);
|
|
43
|
-
const bytes = Buffer.from(text, "utf8");
|
|
44
|
-
const originalBytes = bytes.length;
|
|
45
|
-
if (originalBytes <= limit) return { text, truncated: false, originalBytes };
|
|
46
|
-
if (limit === 0) return { text: "", truncated: true, originalBytes };
|
|
47
|
-
const marker = Buffer.from(TAIL_TRUNCATION_MARKER, "utf8");
|
|
48
|
-
if (marker.length >= limit) {
|
|
49
|
-
return {
|
|
50
|
-
text: bytes.subarray(originalBytes - limit).toString("utf8").replace(/^�+/g, ""),
|
|
51
|
-
truncated: true,
|
|
52
|
-
originalBytes
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
const suffix = bytes.subarray(originalBytes - (limit - marker.length)).toString("utf8").replace(/^�+/g, "");
|
|
56
|
-
return { text: `${TAIL_TRUNCATION_MARKER}${suffix}`, truncated: true, originalBytes };
|
|
57
|
-
}
|
|
58
|
-
function appendBounded(current, addition, maxBytes) {
|
|
59
|
-
return truncateUtf8(current + addition, maxBytes);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// src/context.ts
|
|
63
|
-
function textParts(content) {
|
|
64
|
-
if (typeof content === "string") return content;
|
|
65
|
-
if (!Array.isArray(content)) return "";
|
|
66
|
-
return content.filter(
|
|
67
|
-
(part) => Boolean(
|
|
68
|
-
part && typeof part === "object" && part.type === "text" && typeof part.text === "string"
|
|
69
|
-
)
|
|
70
|
-
).map((part) => part.text).join("\n");
|
|
71
|
-
}
|
|
72
|
-
function redactPrivateText(text) {
|
|
73
|
-
const tagPattern = /<\/?private>/gi;
|
|
74
|
-
let redacted = "";
|
|
75
|
-
let cursor = 0;
|
|
76
|
-
let depth = 0;
|
|
77
|
-
for (const match of text.matchAll(tagPattern)) {
|
|
78
|
-
const tag = match[0].toLowerCase();
|
|
79
|
-
const index = match.index ?? cursor;
|
|
80
|
-
if (depth === 0) redacted += text.slice(cursor, index);
|
|
81
|
-
if (tag === "<private>") {
|
|
82
|
-
if (depth === 0) redacted += "[private content omitted]";
|
|
83
|
-
depth++;
|
|
84
|
-
} else if (depth > 0) {
|
|
85
|
-
depth--;
|
|
86
|
-
} else {
|
|
87
|
-
redacted += match[0];
|
|
88
|
-
}
|
|
89
|
-
cursor = index + match[0].length;
|
|
90
|
-
}
|
|
91
|
-
if (depth === 0) redacted += text.slice(cursor);
|
|
92
|
-
return redacted.split("\n").filter((line) => !line.includes("[subagent-private]")).join("\n");
|
|
93
|
-
}
|
|
94
|
-
function buildContextSnapshot(entries, mode, maxBytes = DEFAULT_MAX_CONTEXT_BYTES, selectedSourceIds) {
|
|
95
|
-
if (mode === "none") return { text: "", turns: 0, truncated: false, sourceIds: [] };
|
|
96
|
-
const messages = [];
|
|
97
|
-
for (const entry of entries) {
|
|
98
|
-
if (!entry || typeof entry !== "object") continue;
|
|
99
|
-
const candidate = entry;
|
|
100
|
-
const message = candidate.type === "message" ? candidate.message : candidate;
|
|
101
|
-
if (message?.role !== "user" && message?.role !== "assistant") continue;
|
|
102
|
-
const text = redactPrivateText(textParts(message.content));
|
|
103
|
-
if (text.trim()) {
|
|
104
|
-
const sourceId = candidate.id ?? createHash("sha256").update(`${message.role}\0${text}`).digest("hex").slice(0, 16);
|
|
105
|
-
messages.push({ role: message.role, text, sourceId });
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
const seenSourceIds = /* @__PURE__ */ new Set();
|
|
109
|
-
const uniqueMessages = messages.filter((message) => {
|
|
110
|
-
if (seenSourceIds.has(message.sourceId)) return false;
|
|
111
|
-
seenSourceIds.add(message.sourceId);
|
|
112
|
-
return true;
|
|
113
|
-
});
|
|
114
|
-
const selectedSet = selectedSourceIds ? new Set(selectedSourceIds) : void 0;
|
|
115
|
-
const eligible = selectedSet ? uniqueMessages.filter((message) => selectedSet.has(message.sourceId)) : uniqueMessages;
|
|
116
|
-
const turnLimit = typeof mode === "number" ? Math.max(1, Math.floor(mode)) : Number.POSITIVE_INFINITY;
|
|
117
|
-
let userTurns = 0;
|
|
118
|
-
let start = eligible.length;
|
|
119
|
-
for (let index = eligible.length - 1; index >= 0; index--) {
|
|
120
|
-
if (eligible[index].role === "user") userTurns++;
|
|
121
|
-
if (userTurns > turnLimit) break;
|
|
122
|
-
start = index;
|
|
123
|
-
}
|
|
124
|
-
const selected = eligible.slice(start);
|
|
125
|
-
const raw = mode === "summary" && selected.length > 4 ? [
|
|
126
|
-
`## Earlier context checkpoint
|
|
127
|
-
${truncateUtf8(
|
|
128
|
-
selected.slice(0, -4).map((message) => `${message.role}: ${message.text}`).join("\n"),
|
|
129
|
-
Math.floor(maxBytes / 3)
|
|
130
|
-
).text}`,
|
|
131
|
-
...selected.slice(-4).map((message) => `## ${message.role}
|
|
132
|
-
${message.text}`)
|
|
133
|
-
].join("\n\n") : selected.map((message) => `## ${message.role}
|
|
134
|
-
${message.text}`).join("\n\n");
|
|
135
|
-
const bounded = mode === "summary" ? truncateUtf8Tail(raw, maxBytes) : truncateUtf8(raw, maxBytes);
|
|
136
|
-
return {
|
|
137
|
-
text: bounded.text,
|
|
138
|
-
turns: selected.filter((message) => message.role === "user").length,
|
|
139
|
-
truncated: bounded.truncated,
|
|
140
|
-
sourceIds: selected.map((message) => message.sourceId)
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
export {
|
|
145
|
-
DEFAULT_MAX_OUTPUT_BYTES,
|
|
146
|
-
DEFAULT_MAX_STDERR_BYTES,
|
|
147
|
-
DEFAULT_MAX_CONTEXT_BYTES,
|
|
148
|
-
MAX_SUBAGENT_TIMEOUT_MS,
|
|
149
|
-
DEFAULT_MAX_PARALLEL_TASKS,
|
|
150
|
-
MAX_CONFIGURABLE_PARALLEL_TASKS,
|
|
151
|
-
MAX_BLOCKING_PARALLEL_CONCURRENCY,
|
|
152
|
-
DEFAULT_MAX_MESSAGES,
|
|
153
|
-
MAX_TOOL_MESSAGE_BYTES,
|
|
154
|
-
TRUNCATION_MARKER,
|
|
155
|
-
truncateUtf8,
|
|
156
|
-
appendBounded,
|
|
157
|
-
redactPrivateText,
|
|
158
|
-
buildContextSnapshot
|
|
159
|
-
};
|
|
160
|
-
//# sourceMappingURL=chunk-H3FP6DLR.ts.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/context.ts", "../../src/limits.ts"],
|
|
4
|
-
"sourcesContent": ["import { createHash } from \"node:crypto\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, truncateUtf8, truncateUtf8Tail } from \"./limits.js\";\n\nexport type ContextMode = \"none\" | \"all\" | \"summary\" | number;\n\nexport interface ContextSnapshot {\n\ttext: string;\n\tturns: number;\n\ttruncated: boolean;\n\tsourceIds: string[];\n}\n\nfunction textParts(content: unknown): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } =>\n\t\t\tBoolean(\n\t\t\t\tpart &&\n\t\t\t\t\ttypeof part === \"object\" &&\n\t\t\t\t\t(part as { type?: unknown }).type === \"text\" &&\n\t\t\t\t\ttypeof (part as { text?: unknown }).text === \"string\",\n\t\t\t),\n\t\t)\n\t\t.map((part) => part.text)\n\t\t.join(\"\\n\");\n}\n\nexport function redactPrivateText(text: string): string {\n\tconst tagPattern = /<\\/?private>/gi;\n\tlet redacted = \"\";\n\tlet cursor = 0;\n\tlet depth = 0;\n\tfor (const match of text.matchAll(tagPattern)) {\n\t\tconst tag = match[0].toLowerCase();\n\t\tconst index = match.index ?? cursor;\n\t\tif (depth === 0) redacted += text.slice(cursor, index);\n\t\tif (tag === \"<private>\") {\n\t\t\tif (depth === 0) redacted += \"[private content omitted]\";\n\t\t\tdepth++;\n\t\t} else if (depth > 0) {\n\t\t\tdepth--;\n\t\t} else {\n\t\t\tredacted += match[0];\n\t\t}\n\t\tcursor = index + match[0].length;\n\t}\n\tif (depth === 0) redacted += text.slice(cursor);\n\treturn redacted\n\t\t.split(\"\\n\")\n\t\t.filter((line) => !line.includes(\"[subagent-private]\"))\n\t\t.join(\"\\n\");\n}\n\nexport function buildContextSnapshot(\n\tentries: readonly unknown[],\n\tmode: ContextMode,\n\tmaxBytes = DEFAULT_MAX_CONTEXT_BYTES,\n\tselectedSourceIds?: readonly string[],\n): ContextSnapshot {\n\tif (mode === \"none\") return { text: \"\", turns: 0, truncated: false, sourceIds: [] };\n\tconst messages: Array<{ role: \"user\" | \"assistant\"; text: string; sourceId: string }> = [];\n\tfor (const entry of entries) {\n\t\tif (!entry || typeof entry !== \"object\") continue;\n\t\tconst candidate = entry as {\n\t\t\tid?: string;\n\t\t\ttype?: string;\n\t\t\trole?: string;\n\t\t\tcontent?: unknown;\n\t\t\tmessage?: { role?: string; content?: unknown };\n\t\t};\n\t\tconst message: { role?: string; content?: unknown } | undefined =\n\t\t\tcandidate.type === \"message\" ? candidate.message : candidate;\n\t\tif (message?.role !== \"user\" && message?.role !== \"assistant\") continue;\n\t\tconst text = redactPrivateText(textParts(message.content));\n\t\tif (text.trim()) {\n\t\t\tconst sourceId =\n\t\t\t\tcandidate.id ??\n\t\t\t\tcreateHash(\"sha256\").update(`${message.role}\\0${text}`).digest(\"hex\").slice(0, 16);\n\t\t\tmessages.push({ role: message.role, text, sourceId });\n\t\t}\n\t}\n\tconst seenSourceIds = new Set<string>();\n\tconst uniqueMessages = messages.filter((message) => {\n\t\tif (seenSourceIds.has(message.sourceId)) return false;\n\t\tseenSourceIds.add(message.sourceId);\n\t\treturn true;\n\t});\n\tconst selectedSet = selectedSourceIds ? new Set(selectedSourceIds) : undefined;\n\tconst eligible = selectedSet\n\t\t? uniqueMessages.filter((message) => selectedSet.has(message.sourceId))\n\t\t: uniqueMessages;\n\tconst turnLimit =\n\t\ttypeof mode === \"number\" ? Math.max(1, Math.floor(mode)) : Number.POSITIVE_INFINITY;\n\tlet userTurns = 0;\n\tlet start = eligible.length;\n\tfor (let index = eligible.length - 1; index >= 0; index--) {\n\t\tif (eligible[index].role === \"user\") userTurns++;\n\t\tif (userTurns > turnLimit) break;\n\t\tstart = index;\n\t}\n\tconst selected = eligible.slice(start);\n\tconst raw =\n\t\tmode === \"summary\" && selected.length > 4\n\t\t\t? [\n\t\t\t\t\t`## Earlier context checkpoint\\n${\n\t\t\t\t\t\ttruncateUtf8(\n\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t.slice(0, -4)\n\t\t\t\t\t\t\t\t.map((message) => `${message.role}: ${message.text}`)\n\t\t\t\t\t\t\t\t.join(\"\\n\"),\n\t\t\t\t\t\t\tMath.floor(maxBytes / 3),\n\t\t\t\t\t\t).text\n\t\t\t\t\t}`,\n\t\t\t\t\t...selected.slice(-4).map((message) => `## ${message.role}\\n${message.text}`),\n\t\t\t\t].join(\"\\n\\n\")\n\t\t\t: selected.map((message) => `## ${message.role}\\n${message.text}`).join(\"\\n\\n\");\n\tconst bounded =\n\t\tmode === \"summary\" ? truncateUtf8Tail(raw, maxBytes) : truncateUtf8(raw, maxBytes);\n\treturn {\n\t\ttext: bounded.text,\n\t\tturns: selected.filter((message) => message.role === \"user\").length,\n\t\ttruncated: bounded.truncated,\n\t\tsourceIds: selected.map((message) => message.sourceId),\n\t};\n}\n", "import { DEFAULT_MAX_BYTES } from \"@earendil-works/pi-coding-agent\";\n\nexport const DEFAULT_MAX_OUTPUT_BYTES = DEFAULT_MAX_BYTES;\nexport const DEFAULT_MAX_STDERR_BYTES = 16 * 1024;\nexport const DEFAULT_MAX_CONTEXT_BYTES = DEFAULT_MAX_BYTES;\nexport const MAX_SUBAGENT_TIMEOUT_MS = 2_147_483_647;\nexport const DEFAULT_MAX_PARALLEL_TASKS = 8;\nexport const MAX_CONFIGURABLE_PARALLEL_TASKS = 64;\nexport const MAX_BLOCKING_PARALLEL_CONCURRENCY = 4;\nexport const DEFAULT_MAX_MESSAGES = 200;\nexport const MAX_TOOL_MESSAGE_BYTES = 2 * 1024;\nexport const TRUNCATION_MARKER = \"\\n\u2026 [truncated by pi-subagents]\";\nexport const TAIL_TRUNCATION_MARKER = \"\u2026 [truncated by pi-subagents]\\n\";\n\nexport interface BoundedText {\n\ttext: string;\n\ttruncated: boolean;\n\toriginalBytes: number;\n}\n\nfunction normalizeByteLimit(maxBytes: number): number {\n\tif (maxBytes === Number.POSITIVE_INFINITY) return Number.MAX_SAFE_INTEGER;\n\tif (!Number.isFinite(maxBytes)) return 0;\n\treturn Math.max(0, Math.floor(maxBytes));\n}\n\nexport function truncateUtf8(text: string, maxBytes: number): BoundedText {\n\tconst limit = normalizeByteLimit(maxBytes);\n\tconst originalBytes = Buffer.byteLength(text, \"utf8\");\n\tif (originalBytes <= limit) return { text, truncated: false, originalBytes };\n\tif (limit === 0) return { text: \"\", truncated: true, originalBytes };\n\n\tconst marker = Buffer.from(TRUNCATION_MARKER, \"utf8\");\n\tif (marker.length >= limit) {\n\t\treturn {\n\t\t\ttext: Buffer.from(text, \"utf8\").subarray(0, limit).toString(\"utf8\").replace(/\uFFFD+$/g, \"\"),\n\t\t\ttruncated: true,\n\t\t\toriginalBytes,\n\t\t};\n\t}\n\tconst prefix = Buffer.from(text, \"utf8\")\n\t\t.subarray(0, limit - marker.length)\n\t\t.toString(\"utf8\")\n\t\t.replace(/\uFFFD+$/g, \"\");\n\treturn { text: `${prefix}${TRUNCATION_MARKER}`, truncated: true, originalBytes };\n}\n\nexport function truncateUtf8Tail(text: string, maxBytes: number): BoundedText {\n\tconst limit = normalizeByteLimit(maxBytes);\n\tconst bytes = Buffer.from(text, \"utf8\");\n\tconst originalBytes = bytes.length;\n\tif (originalBytes <= limit) return { text, truncated: false, originalBytes };\n\tif (limit === 0) return { text: \"\", truncated: true, originalBytes };\n\n\tconst marker = Buffer.from(TAIL_TRUNCATION_MARKER, \"utf8\");\n\tif (marker.length >= limit) {\n\t\treturn {\n\t\t\ttext: bytes\n\t\t\t\t.subarray(originalBytes - limit)\n\t\t\t\t.toString(\"utf8\")\n\t\t\t\t.replace(/^\uFFFD+/g, \"\"),\n\t\t\ttruncated: true,\n\t\t\toriginalBytes,\n\t\t};\n\t}\n\tconst suffix = bytes\n\t\t.subarray(originalBytes - (limit - marker.length))\n\t\t.toString(\"utf8\")\n\t\t.replace(/^\uFFFD+/g, \"\");\n\treturn { text: `${TAIL_TRUNCATION_MARKER}${suffix}`, truncated: true, originalBytes };\n}\n\nexport function appendBounded(current: string, addition: string, maxBytes: number): BoundedText {\n\treturn truncateUtf8(current + addition, maxBytes);\n}\n"],
|
|
5
|
-
"mappings": ";;;;AAAA,SAAS,kBAAkB;;;ACA3B,SAAS,yBAAyB;AAE3B,IAAM,2BAA2B;AACjC,IAAM,2BAA2B,KAAK;AACtC,IAAM,4BAA4B;AAClC,IAAM,0BAA0B;AAChC,IAAM,6BAA6B;AACnC,IAAM,kCAAkC;AACxC,IAAM,oCAAoC;AAC1C,IAAM,uBAAuB;AAC7B,IAAM,yBAAyB,IAAI;AACnC,IAAM,oBAAoB;AAC1B,IAAM,yBAAyB;AAQtC,SAAS,mBAAmB,UAA0B;AACrD,MAAI,aAAa,OAAO,kBAAmB,QAAO,OAAO;AACzD,MAAI,CAAC,OAAO,SAAS,QAAQ,EAAG,QAAO;AACvC,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,CAAC;AACxC;AAEO,SAAS,aAAa,MAAc,UAA+B;AACzE,QAAM,QAAQ,mBAAmB,QAAQ;AACzC,QAAM,gBAAgB,OAAO,WAAW,MAAM,MAAM;AACpD,MAAI,iBAAiB,MAAO,QAAO,EAAE,MAAM,WAAW,OAAO,cAAc;AAC3E,MAAI,UAAU,EAAG,QAAO,EAAE,MAAM,IAAI,WAAW,MAAM,cAAc;AAEnE,QAAM,SAAS,OAAO,KAAK,mBAAmB,MAAM;AACpD,MAAI,OAAO,UAAU,OAAO;AAC3B,WAAO;AAAA,MACN,MAAM,OAAO,KAAK,MAAM,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,MAAM,EAAE,QAAQ,QAAQ,EAAE;AAAA,MACtF,WAAW;AAAA,MACX;AAAA,IACD;AAAA,EACD;AACA,QAAM,SAAS,OAAO,KAAK,MAAM,MAAM,EACrC,SAAS,GAAG,QAAQ,OAAO,MAAM,EACjC,SAAS,MAAM,EACf,QAAQ,QAAQ,EAAE;AACpB,SAAO,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,IAAI,WAAW,MAAM,cAAc;AAChF;AAEO,SAAS,iBAAiB,MAAc,UAA+B;AAC7E,QAAM,QAAQ,mBAAmB,QAAQ;AACzC,QAAM,QAAQ,OAAO,KAAK,MAAM,MAAM;AACtC,QAAM,gBAAgB,MAAM;AAC5B,MAAI,iBAAiB,MAAO,QAAO,EAAE,MAAM,WAAW,OAAO,cAAc;AAC3E,MAAI,UAAU,EAAG,QAAO,EAAE,MAAM,IAAI,WAAW,MAAM,cAAc;AAEnE,QAAM,SAAS,OAAO,KAAK,wBAAwB,MAAM;AACzD,MAAI,OAAO,UAAU,OAAO;AAC3B,WAAO;AAAA,MACN,MAAM,MACJ,SAAS,gBAAgB,KAAK,EAC9B,SAAS,MAAM,EACf,QAAQ,QAAQ,EAAE;AAAA,MACpB,WAAW;AAAA,MACX;AAAA,IACD;AAAA,EACD;AACA,QAAM,SAAS,MACb,SAAS,iBAAiB,QAAQ,OAAO,OAAO,EAChD,SAAS,MAAM,EACf,QAAQ,QAAQ,EAAE;AACpB,SAAO,EAAE,MAAM,GAAG,sBAAsB,GAAG,MAAM,IAAI,WAAW,MAAM,cAAc;AACrF;AAEO,SAAS,cAAc,SAAiB,UAAkB,UAA+B;AAC/F,SAAO,aAAa,UAAU,UAAU,QAAQ;AACjD;;;AD9DA,SAAS,UAAU,SAA0B;AAC5C,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,MAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,QAAO;AACpC,SAAO,QACL;AAAA,IAAO,CAAC,SACR;AAAA,MACC,QACC,OAAO,SAAS,YACf,KAA4B,SAAS,UACtC,OAAQ,KAA4B,SAAS;AAAA,IAC/C;AAAA,EACD,EACC,IAAI,CAAC,SAAS,KAAK,IAAI,EACvB,KAAK,IAAI;AACZ;AAEO,SAAS,kBAAkB,MAAsB;AACvD,QAAM,aAAa;AACnB,MAAI,WAAW;AACf,MAAI,SAAS;AACb,MAAI,QAAQ;AACZ,aAAW,SAAS,KAAK,SAAS,UAAU,GAAG;AAC9C,UAAM,MAAM,MAAM,CAAC,EAAE,YAAY;AACjC,UAAM,QAAQ,MAAM,SAAS;AAC7B,QAAI,UAAU,EAAG,aAAY,KAAK,MAAM,QAAQ,KAAK;AACrD,QAAI,QAAQ,aAAa;AACxB,UAAI,UAAU,EAAG,aAAY;AAC7B;AAAA,IACD,WAAW,QAAQ,GAAG;AACrB;AAAA,IACD,OAAO;AACN,kBAAY,MAAM,CAAC;AAAA,IACpB;AACA,aAAS,QAAQ,MAAM,CAAC,EAAE;AAAA,EAC3B;AACA,MAAI,UAAU,EAAG,aAAY,KAAK,MAAM,MAAM;AAC9C,SAAO,SACL,MAAM,IAAI,EACV,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS,oBAAoB,CAAC,EACrD,KAAK,IAAI;AACZ;AAEO,SAAS,qBACf,SACA,MACA,WAAW,2BACX,mBACkB;AAClB,MAAI,SAAS,OAAQ,QAAO,EAAE,MAAM,IAAI,OAAO,GAAG,WAAW,OAAO,WAAW,CAAC,EAAE;AAClF,QAAM,WAAkF,CAAC;AACzF,aAAW,SAAS,SAAS;AAC5B,QAAI,CAAC,SAAS,OAAO,UAAU,SAAU;AACzC,UAAM,YAAY;AAOlB,UAAM,UACL,UAAU,SAAS,YAAY,UAAU,UAAU;AACpD,QAAI,SAAS,SAAS,UAAU,SAAS,SAAS,YAAa;AAC/D,UAAM,OAAO,kBAAkB,UAAU,QAAQ,OAAO,CAAC;AACzD,QAAI,KAAK,KAAK,GAAG;AAChB,YAAM,WACL,UAAU,MACV,WAAW,QAAQ,EAAE,OAAO,GAAG,QAAQ,IAAI,KAAK,IAAI,EAAE,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AAClF,eAAS,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,SAAS,CAAC;AAAA,IACrD;AAAA,EACD;AACA,QAAM,gBAAgB,oBAAI,IAAY;AACtC,QAAM,iBAAiB,SAAS,OAAO,CAAC,YAAY;AACnD,QAAI,cAAc,IAAI,QAAQ,QAAQ,EAAG,QAAO;AAChD,kBAAc,IAAI,QAAQ,QAAQ;AAClC,WAAO;AAAA,EACR,CAAC;AACD,QAAM,cAAc,oBAAoB,IAAI,IAAI,iBAAiB,IAAI;AACrE,QAAM,WAAW,cACd,eAAe,OAAO,CAAC,YAAY,YAAY,IAAI,QAAQ,QAAQ,CAAC,IACpE;AACH,QAAM,YACL,OAAO,SAAS,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,CAAC,IAAI,OAAO;AACnE,MAAI,YAAY;AAChB,MAAI,QAAQ,SAAS;AACrB,WAAS,QAAQ,SAAS,SAAS,GAAG,SAAS,GAAG,SAAS;AAC1D,QAAI,SAAS,KAAK,EAAE,SAAS,OAAQ;AACrC,QAAI,YAAY,UAAW;AAC3B,YAAQ;AAAA,EACT;AACA,QAAM,WAAW,SAAS,MAAM,KAAK;AACrC,QAAM,MACL,SAAS,aAAa,SAAS,SAAS,IACrC;AAAA,IACA;AAAA,EACC;AAAA,MACC,SACE,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,YAAY,GAAG,QAAQ,IAAI,KAAK,QAAQ,IAAI,EAAE,EACnD,KAAK,IAAI;AAAA,MACX,KAAK,MAAM,WAAW,CAAC;AAAA,IACxB,EAAE,IACH;AAAA,IACA,GAAG,SAAS,MAAM,EAAE,EAAE,IAAI,CAAC,YAAY,MAAM,QAAQ,IAAI;AAAA,EAAK,QAAQ,IAAI,EAAE;AAAA,EAC7E,EAAE,KAAK,MAAM,IACZ,SAAS,IAAI,CAAC,YAAY,MAAM,QAAQ,IAAI;AAAA,EAAK,QAAQ,IAAI,EAAE,EAAE,KAAK,MAAM;AAChF,QAAM,UACL,SAAS,YAAY,iBAAiB,KAAK,QAAQ,IAAI,aAAa,KAAK,QAAQ;AAClF,SAAO;AAAA,IACN,MAAM,QAAQ;AAAA,IACd,OAAO,SAAS,OAAO,CAAC,YAAY,QAAQ,SAAS,MAAM,EAAE;AAAA,IAC7D,WAAW,QAAQ;AAAA,IACnB,WAAW,SAAS,IAAI,CAAC,YAAY,QAAQ,QAAQ;AAAA,EACtD;AACD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|