@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,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/settings/schema.ts", "../../src/settings/inspection.ts", "../../src/settings-reader.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\tCONSULT_RESOURCE_POLICIES,\n\tCONSULTATION_CWD_POLICIES,\n\ttype ConsultationCwdPolicy,\n\ttype ConsultResourcePolicy,\n\tDELEGATION_CWD_POLICIES,\n\ttype DelegationCwdPolicy,\n\tisThinkingLevel,\n\ttype SubagentAgentConfig,\n\ttype SubagentSettings,\n} from \"../agents/types.js\";\nimport { MAX_CONFIGURABLE_PARALLEL_TASKS, MAX_SUBAGENT_TIMEOUT_MS } from \"../limits.js\";\nimport { isValidStatefulLimit, STATEFUL_LIMIT_FIELDS } from \"../stateful-limits.js\";\n\nexport function hasOwn(obj: object, key: PropertyKey): boolean {\n\treturn Object.hasOwn(obj, key);\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n\treturn Array.isArray(value) && value.every((item) => typeof item === \"string\");\n}\n\nexport function isPositiveNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 1;\n}\n\nexport function isPositiveInteger(value: unknown): value is number {\n\treturn isPositiveNumber(value) && Number.isSafeInteger(value);\n}\n\nexport function normalizeAgentSettings(value: unknown): SubagentAgentConfig | undefined {\n\tif (!isPlainObject(value)) return undefined;\n\n\tconst config: SubagentAgentConfig = {};\n\tlet hasKnownField = false;\n\n\tif (hasOwn(value, \"tools\")) {\n\t\tif (!isStringArray(value.tools)) return undefined;\n\t\tconfig.tools = value.tools;\n\t\thasKnownField = true;\n\t}\n\n\tif (hasOwn(value, \"model\")) {\n\t\tif (value.model !== null && typeof value.model !== \"string\") return undefined;\n\t\tconfig.model = value.model;\n\t\thasKnownField = true;\n\t}\n\n\tif (hasOwn(value, \"thinkingLevel\")) {\n\t\tif (value.thinkingLevel !== null && !isThinkingLevel(value.thinkingLevel)) return undefined;\n\t\tconfig.thinkingLevel = value.thinkingLevel;\n\t\thasKnownField = true;\n\t}\n\n\tif (hasOwn(value, \"timeoutMs\")) {\n\t\tif (\n\t\t\tvalue.timeoutMs !== null &&\n\t\t\t(!isPositiveNumber(value.timeoutMs) || value.timeoutMs > MAX_SUBAGENT_TIMEOUT_MS)\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconfig.timeoutMs = value.timeoutMs;\n\t\thasKnownField = true;\n\t}\n\n\treturn hasKnownField ? config : undefined;\n}\n\nexport function normalizeSubagentSettings(value: unknown): SubagentSettings | undefined {\n\tif (!isPlainObject(value)) return undefined;\n\tconst settings: SubagentSettings = {};\n\tif (hasOwn(value, \"agents\")) {\n\t\tif (!isPlainObject(value.agents)) return undefined;\n\t\tconst agents: Record<string, SubagentAgentConfig> = {};\n\t\tfor (const [name, rawConfig] of Object.entries(value.agents)) {\n\t\t\tconst config = normalizeAgentSettings(rawConfig);\n\t\t\tif (config) agents[name] = config;\n\t\t}\n\t\tif (Object.keys(agents).length > 0) settings.agents = agents;\n\t}\n\tif (hasOwn(value, \"blocking\")) {\n\t\tif (!isPlainObject(value.blocking)) return undefined;\n\t\tconst blocking: NonNullable<SubagentSettings[\"blocking\"]> = {};\n\t\tif (hasOwn(value.blocking, \"enabled\")) {\n\t\t\tif (typeof value.blocking.enabled !== \"boolean\") return undefined;\n\t\t\tblocking.enabled = value.blocking.enabled;\n\t\t}\n\t\tif (hasOwn(value.blocking, \"maxParallelTasks\")) {\n\t\t\tif (\n\t\t\t\t!isPositiveInteger(value.blocking.maxParallelTasks) ||\n\t\t\t\tvalue.blocking.maxParallelTasks > MAX_CONFIGURABLE_PARALLEL_TASKS\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tblocking.maxParallelTasks = value.blocking.maxParallelTasks;\n\t\t}\n\t\tsettings.blocking = blocking;\n\t}\n\tif (hasOwn(value, \"stateful\")) {\n\t\tif (!isPlainObject(value.stateful)) return undefined;\n\t\tconst runtime: NonNullable<SubagentSettings[\"stateful\"]> = {};\n\t\tif (hasOwn(value.stateful, \"transport\")) {\n\t\t\tif (\n\t\t\t\tvalue.stateful.transport !== \"subprocess\" &&\n\t\t\t\tvalue.stateful.transport !== \"in-process\" &&\n\t\t\t\tvalue.stateful.transport !== \"rpc\" &&\n\t\t\t\tvalue.stateful.transport !== \"auto\"\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\truntime.transport = value.stateful.transport;\n\t\t}\n\t\tif (hasOwn(value.stateful, \"completionDelivery\")) {\n\t\t\tif (\n\t\t\t\tvalue.stateful.completionDelivery !== \"next-turn\" &&\n\t\t\t\tvalue.stateful.completionDelivery !== \"auto-resume\"\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\truntime.completionDelivery = value.stateful.completionDelivery;\n\t\t}\n\t\tfor (const key of STATEFUL_LIMIT_FIELDS) {\n\t\t\tif (hasOwn(value.stateful, key)) {\n\t\t\t\tif (!isValidStatefulLimit(key, value.stateful[key])) return undefined;\n\t\t\t\truntime[key] = value.stateful[key];\n\t\t\t}\n\t\t}\n\t\tfor (const key of [\"maxMailboxMessages\", \"maxMailboxMessageBytes\", \"idleTtlMs\"] as const) {\n\t\t\tif (hasOwn(value.stateful, key)) {\n\t\t\t\tif (!isPositiveInteger(value.stateful[key])) return undefined;\n\t\t\t\truntime[key] = value.stateful[key];\n\t\t\t}\n\t\t}\n\t\tif (hasOwn(value.stateful, \"retentionDays\")) {\n\t\t\tif (!isPositiveNumber(value.stateful.retentionDays)) return undefined;\n\t\t\truntime.retentionDays = value.stateful.retentionDays;\n\t\t}\n\t\tif (hasOwn(value.stateful, \"enabled\")) {\n\t\t\tif (typeof value.stateful.enabled !== \"boolean\") return undefined;\n\t\t\truntime.enabled = value.stateful.enabled;\n\t\t}\n\t\tsettings.stateful = runtime;\n\t}\n\tif (hasOwn(value, \"consult\")) {\n\t\tif (!isPlainObject(value.consult)) return undefined;\n\t\tconst consult: NonNullable<SubagentSettings[\"consult\"]> = {};\n\t\tif (hasOwn(value.consult, \"resources\")) {\n\t\t\tif (\n\t\t\t\ttypeof value.consult.resources !== \"string\" ||\n\t\t\t\t!CONSULT_RESOURCE_POLICIES.includes(value.consult.resources as ConsultResourcePolicy)\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconsult.resources = value.consult.resources as ConsultResourcePolicy;\n\t\t}\n\t\tsettings.consult = consult;\n\t}\n\tif (hasOwn(value, \"cwdPolicy\")) {\n\t\tif (!isPlainObject(value.cwdPolicy)) return undefined;\n\t\tconst cwdPolicy: NonNullable<SubagentSettings[\"cwdPolicy\"]> = {};\n\t\tif (hasOwn(value.cwdPolicy, \"consultation\")) {\n\t\t\tif (\n\t\t\t\ttypeof value.cwdPolicy.consultation !== \"string\" ||\n\t\t\t\t!CONSULTATION_CWD_POLICIES.includes(value.cwdPolicy.consultation as ConsultationCwdPolicy)\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcwdPolicy.consultation = value.cwdPolicy.consultation as ConsultationCwdPolicy;\n\t\t}\n\t\tif (hasOwn(value.cwdPolicy, \"delegation\")) {\n\t\t\tif (\n\t\t\t\ttypeof value.cwdPolicy.delegation !== \"string\" ||\n\t\t\t\t!DELEGATION_CWD_POLICIES.includes(value.cwdPolicy.delegation as DelegationCwdPolicy)\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcwdPolicy.delegation = value.cwdPolicy.delegation as DelegationCwdPolicy;\n\t\t}\n\t\tsettings.cwdPolicy = cwdPolicy;\n\t}\n\tif (hasOwn(value, \"usageRecording\")) {\n\t\tif (!isPlainObject(value.usageRecording)) return undefined;\n\t\tconst usageRecording: NonNullable<SubagentSettings[\"usageRecording\"]> = {};\n\t\tif (hasOwn(value.usageRecording, \"enabled\")) {\n\t\t\tif (typeof value.usageRecording.enabled !== \"boolean\") return undefined;\n\t\t\tusageRecording.enabled = value.usageRecording.enabled;\n\t\t}\n\t\tsettings.usageRecording = usageRecording;\n\t}\n\treturn settings;\n}\n", "import type {\n\tCompletionDelivery,\n\tConsultationCwdPolicy,\n\tConsultResourcePolicy,\n\tDelegationCwdPolicy,\n\tSubagentSettings,\n\tSubagentTransportKind,\n} from \"../agents/types.js\";\nimport { DEFAULT_MAX_PARALLEL_TASKS } from \"../limits.js\";\nimport {\n\tresolveStatefulLimits,\n\tSTATEFUL_LIMIT_FIELDS,\n\ttype StatefulLimitField,\n} from \"../stateful-limits.js\";\nimport { hasOwn, isPlainObject } from \"./schema.js\";\n\nconst DEFAULT_COMPLETION_DELIVERY: CompletionDelivery = \"next-turn\";\nexport const DEFAULT_CONSULT_RESOURCE_POLICY: ConsultResourcePolicy = \"project-context\";\nexport const DEFAULT_CONSULTATION_CWD_POLICY: ConsultationCwdPolicy = \"anywhere\";\nexport const DEFAULT_DELEGATION_CWD_POLICY: DelegationCwdPolicy = \"trusted-targets\";\n\nexport type DelegationWorkflow = \"all\" | \"async-only\" | \"blocking-only\" | \"disabled\";\n\ntype SettingsSource = \"default\" | \"user settings\";\n\nexport interface InspectedSubagentSettingsDocument {\n\tpath: string;\n\traw?: Record<string, unknown>;\n\tsettings?: SubagentSettings;\n\terror?: string;\n}\n\nexport interface DelegationWorkflowSettingsSnapshot {\n\tpath: string;\n\tvalue: DelegationWorkflow;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface CompletionDeliverySettingsSnapshot {\n\tpath: string;\n\tvalue: CompletionDelivery;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface StatefulTransportSettingsSnapshot {\n\tpath: string;\n\tvalue: SubagentTransportKind;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface BlockingParallelLimitSettingsSnapshot {\n\tpath: string;\n\tvalue: number;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface StatefulLimitFieldSnapshot {\n\tvalue: number;\n\tsource: SettingsSource;\n}\n\nexport interface StatefulLimitSettingsSnapshot {\n\tpath: string;\n\twritePath: string;\n\tvalues?: Record<StatefulLimitField, StatefulLimitFieldSnapshot>;\n\terror?: string;\n}\n\nexport interface ConsultResourceSettingsSnapshot {\n\tpath: string;\n\tvalue: ConsultResourcePolicy;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface CwdPolicyFieldSnapshot<T> {\n\tvalue: T;\n\tsource: SettingsSource;\n}\n\nexport interface CwdPolicySettingsSnapshot {\n\tpath: string;\n\tconsultation: CwdPolicyFieldSnapshot<ConsultationCwdPolicy>;\n\tdelegation: CwdPolicyFieldSnapshot<DelegationCwdPolicy>;\n\terror?: string;\n}\n\nexport interface SubagentSettingsSnapshot {\n\tpath: string;\n\tsettings?: SubagentSettings;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface UsageRecordingSettingsSnapshot {\n\tpath: string;\n\tenabled: boolean;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport function resolveDelegationWorkflow(\n\tblockingEnabled: boolean,\n\tstatefulEnabled: boolean,\n): DelegationWorkflow {\n\tif (blockingEnabled && statefulEnabled) return \"all\";\n\tif (statefulEnabled) return \"async-only\";\n\tif (blockingEnabled) return \"blocking-only\";\n\treturn \"disabled\";\n}\n\nexport function resolveBlockingMaxParallelTasks(settings?: SubagentSettings): number {\n\treturn settings?.blocking?.maxParallelTasks ?? DEFAULT_MAX_PARALLEL_TASKS;\n}\n\nexport function buildSubagentSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): SubagentSettingsSnapshot {\n\treturn {\n\t\tpath: inspected.path,\n\t\tsettings: inspected.settings,\n\t\tsource: inspected.settings ? \"user settings\" : \"default\",\n\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t};\n}\n\nexport function buildUsageRecordingSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): UsageRecordingSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tenabled: false,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.usageRecording) && hasOwn(inspected.raw.usageRecording, \"enabled\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tenabled: inspected.settings.usageRecording?.enabled === true,\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildConsultResourceSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): ConsultResourceSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: DEFAULT_CONSULT_RESOURCE_POLICY,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.consult) && hasOwn(inspected.raw.consult, \"resources\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: inspected.settings.consult?.resources ?? DEFAULT_CONSULT_RESOURCE_POLICY,\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildCwdPolicySettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): CwdPolicySettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tconsultation: { value: DEFAULT_CONSULTATION_CWD_POLICY, source: \"default\" },\n\t\t\tdelegation: { value: DEFAULT_DELEGATION_CWD_POLICY, source: \"default\" },\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst rawPolicy = isPlainObject(inspected.raw.cwdPolicy) ? inspected.raw.cwdPolicy : undefined;\n\treturn {\n\t\tpath: inspected.path,\n\t\tconsultation: {\n\t\t\tvalue: inspected.settings.cwdPolicy?.consultation ?? DEFAULT_CONSULTATION_CWD_POLICY,\n\t\t\tsource: rawPolicy && hasOwn(rawPolicy, \"consultation\") ? \"user settings\" : \"default\",\n\t\t},\n\t\tdelegation: {\n\t\t\tvalue: inspected.settings.cwdPolicy?.delegation ?? DEFAULT_DELEGATION_CWD_POLICY,\n\t\t\tsource: rawPolicy && hasOwn(rawPolicy, \"delegation\") ? \"user settings\" : \"default\",\n\t\t},\n\t};\n}\n\nexport function buildDelegationWorkflowSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): DelegationWorkflowSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: \"all\",\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\t(isPlainObject(inspected.raw.blocking) && hasOwn(inspected.raw.blocking, \"enabled\")) ||\n\t\t(isPlainObject(inspected.raw.stateful) && hasOwn(inspected.raw.stateful, \"enabled\"));\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: resolveDelegationWorkflow(\n\t\t\tinspected.settings.blocking?.enabled !== false,\n\t\t\tinspected.settings.stateful?.enabled !== false,\n\t\t),\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildCompletionDeliverySettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): CompletionDeliverySettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: DEFAULT_COMPLETION_DELIVERY,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.stateful) && hasOwn(inspected.raw.stateful, \"completionDelivery\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: inspected.settings.stateful?.completionDelivery ?? DEFAULT_COMPLETION_DELIVERY,\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildStatefulTransportSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): StatefulTransportSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: \"subprocess\",\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.stateful) && hasOwn(inspected.raw.stateful, \"transport\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: inspected.settings.stateful?.transport ?? \"subprocess\",\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildBlockingParallelLimitSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): BlockingParallelLimitSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: DEFAULT_MAX_PARALLEL_TASKS,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.blocking) && hasOwn(inspected.raw.blocking, \"maxParallelTasks\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: resolveBlockingMaxParallelTasks(inspected.settings),\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildStatefulLimitSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n\twritePath: string,\n): StatefulLimitSettingsSnapshot {\n\tif (inspected.error) {\n\t\treturn { path: inspected.path, writePath, error: inspected.error };\n\t}\n\tconst resolved = resolveStatefulLimits(inspected.settings?.stateful);\n\tconst rawStateful = isPlainObject(inspected.raw?.stateful) ? inspected.raw.stateful : undefined;\n\treturn {\n\t\tpath: inspected.path,\n\t\twritePath,\n\t\tvalues: Object.fromEntries(\n\t\t\tSTATEFUL_LIMIT_FIELDS.map((field) => [\n\t\t\t\tfield,\n\t\t\t\t{\n\t\t\t\t\tvalue: resolved[field],\n\t\t\t\t\tsource: rawStateful && hasOwn(rawStateful, field) ? \"user settings\" : \"default\",\n\t\t\t\t},\n\t\t\t]),\n\t\t) as unknown as Record<StatefulLimitField, StatefulLimitFieldSnapshot>,\n\t};\n}\n", "import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { getAgentDir } from \"@earendil-works/pi-coding-agent\";\nimport type { SubagentSettings } from \"./agents/types.js\";\nimport {\n\ttype BlockingParallelLimitSettingsSnapshot,\n\tbuildBlockingParallelLimitSettingsSnapshot,\n\tbuildCompletionDeliverySettingsSnapshot,\n\tbuildConsultResourceSettingsSnapshot,\n\tbuildCwdPolicySettingsSnapshot,\n\tbuildDelegationWorkflowSettingsSnapshot,\n\tbuildStatefulLimitSettingsSnapshot,\n\tbuildStatefulTransportSettingsSnapshot,\n\tbuildSubagentSettingsSnapshot,\n\tbuildUsageRecordingSettingsSnapshot,\n\ttype CompletionDeliverySettingsSnapshot,\n\ttype ConsultResourceSettingsSnapshot,\n\ttype CwdPolicySettingsSnapshot,\n\ttype DelegationWorkflowSettingsSnapshot,\n\ttype InspectedSubagentSettingsDocument,\n\ttype StatefulLimitSettingsSnapshot,\n\ttype StatefulTransportSettingsSnapshot,\n\ttype SubagentSettingsSnapshot,\n\ttype UsageRecordingSettingsSnapshot,\n} from \"./settings/inspection.js\";\nimport { isPlainObject, normalizeSubagentSettings } from \"./settings/schema.js\";\n\nexport {\n\ttype BlockingParallelLimitSettingsSnapshot,\n\ttype CompletionDeliverySettingsSnapshot,\n\ttype ConsultResourceSettingsSnapshot,\n\ttype CwdPolicyFieldSnapshot,\n\ttype CwdPolicySettingsSnapshot,\n\tDEFAULT_CONSULT_RESOURCE_POLICY,\n\tDEFAULT_CONSULTATION_CWD_POLICY,\n\tDEFAULT_DELEGATION_CWD_POLICY,\n\ttype DelegationWorkflow,\n\ttype DelegationWorkflowSettingsSnapshot,\n\tresolveBlockingMaxParallelTasks,\n\tresolveDelegationWorkflow,\n\ttype StatefulLimitFieldSnapshot,\n\ttype StatefulLimitSettingsSnapshot,\n\ttype StatefulTransportSettingsSnapshot,\n\ttype SubagentSettingsSnapshot,\n\ttype UsageRecordingSettingsSnapshot,\n} from \"./settings/inspection.js\";\nexport { hasOwn, normalizeAgentSettings, normalizeSubagentSettings } from \"./settings/schema.js\";\n\nexport const SUBAGENT_SETTINGS_FILE = \"pi-subagents.json\";\nconst LEGACY_SETTINGS_FILE = \"pi-subagents-config.json\";\nlet pendingSettingsNotice: string | undefined;\n\nexport function resolveSubagentSettingsPaths(): {\n\tcanonicalPath: string;\n\tlegacyPath: string;\n\tactivePath?: string;\n} {\n\tconst canonicalPath = path.join(getAgentDir(), SUBAGENT_SETTINGS_FILE);\n\tconst legacyPath = path.join(getAgentDir(), LEGACY_SETTINGS_FILE);\n\treturn {\n\t\tcanonicalPath,\n\t\tlegacyPath,\n\t\tactivePath: fs.existsSync(canonicalPath)\n\t\t\t? canonicalPath\n\t\t\t: fs.existsSync(legacyPath)\n\t\t\t\t? legacyPath\n\t\t\t\t: undefined,\n\t};\n}\n\nexport function readSubagentSettings(): SubagentSettings | undefined {\n\tpendingSettingsNotice = undefined;\n\tconst { canonicalPath, legacyPath, activePath } = resolveSubagentSettingsPaths();\n\tif (activePath === canonicalPath) {\n\t\tconst canonical = readSettingsFile(canonicalPath);\n\t\tconst notices: string[] = [];\n\t\tif (!canonical) notices.push(`${SUBAGENT_SETTINGS_FILE} is invalid and was ignored.`);\n\t\tif (fs.existsSync(legacyPath)) {\n\t\t\tnotices.push(\n\t\t\t\t`${LEGACY_SETTINGS_FILE} ignored because ${SUBAGENT_SETTINGS_FILE} takes precedence.`,\n\t\t\t);\n\t\t}\n\t\tif (notices.length > 0) pendingSettingsNotice = notices.join(\"\\n\");\n\t\treturn canonical;\n\t}\n\tif (activePath === undefined) return undefined;\n\tconst legacy = readSettingsFile(legacyPath);\n\tif (fs.existsSync(canonicalPath)) {\n\t\tconst canonical = readSettingsFile(canonicalPath);\n\t\tpendingSettingsNotice = [\n\t\t\t...(!canonical ? [`${SUBAGENT_SETTINGS_FILE} is invalid and was ignored.`] : []),\n\t\t\t`${LEGACY_SETTINGS_FILE} ignored because ${SUBAGENT_SETTINGS_FILE} was created concurrently.`,\n\t\t].join(\"\\n\");\n\t\treturn canonical;\n\t}\n\tif (!legacy) {\n\t\tpendingSettingsNotice = `${LEGACY_SETTINGS_FILE} is invalid and was ignored.`;\n\t\treturn undefined;\n\t}\n\tpendingSettingsNotice = `Using legacy ${LEGACY_SETTINGS_FILE}; rename it to ${SUBAGENT_SETTINGS_FILE}. Future saves write ${SUBAGENT_SETTINGS_FILE} without modifying the legacy file.`;\n\treturn legacy;\n}\n\nexport function consumeSubagentSettingsNotice() {\n\tconst notice = pendingSettingsNotice;\n\tpendingSettingsNotice = undefined;\n\treturn notice;\n}\n\nexport function subagentSettingsFilePath(): string {\n\treturn path.join(getAgentDir(), SUBAGENT_SETTINGS_FILE);\n}\n\nfunction inspectSubagentSettingsDocument(): InspectedSubagentSettingsDocument {\n\tconst { canonicalPath, activePath } = resolveSubagentSettingsPaths();\n\tif (activePath === undefined) return { path: canonicalPath };\n\tconst inspected = inspectSubagentSettingsPath(activePath);\n\treturn activePath !== canonicalPath && fs.existsSync(canonicalPath)\n\t\t? inspectSubagentSettingsPath(canonicalPath)\n\t\t: inspected;\n}\n\nfunction inspectSubagentSettingsPath(configPath: string): InspectedSubagentSettingsDocument {\n\tconst fileName = path.basename(configPath);\n\tlet contents: string;\n\ttry {\n\t\tcontents = fs.readFileSync(configPath, \"utf8\");\n\t} catch (error) {\n\t\tconst code = (error as NodeJS.ErrnoException).code;\n\t\treturn {\n\t\t\tpath: configPath,\n\t\t\terror: `${fileName} could not be read${code ? ` (${safeErrorCode(code)})` : \"\"}`,\n\t\t};\n\t}\n\tlet raw: unknown;\n\ttry {\n\t\traw = JSON.parse(contents);\n\t} catch {\n\t\treturn { path: configPath, error: `${fileName} contains malformed JSON` };\n\t}\n\tconst settings = normalizeSubagentSettings(raw);\n\tif (!isPlainObject(raw) || !settings) {\n\t\treturn { path: configPath, error: `${fileName} is not a valid settings object` };\n\t}\n\treturn { path: configPath, raw, settings };\n}\n\nexport function inspectSubagentSettings(): SubagentSettingsSnapshot {\n\treturn buildSubagentSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectConsultResourceSettings(): ConsultResourceSettingsSnapshot {\n\treturn buildConsultResourceSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectCwdPolicySettings(): CwdPolicySettingsSnapshot {\n\treturn buildCwdPolicySettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectDelegationWorkflowSettings(): DelegationWorkflowSettingsSnapshot {\n\treturn buildDelegationWorkflowSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectCompletionDeliverySettings(): CompletionDeliverySettingsSnapshot {\n\treturn buildCompletionDeliverySettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectUsageRecordingSettings(): UsageRecordingSettingsSnapshot {\n\treturn buildUsageRecordingSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectStatefulTransportSettings(): StatefulTransportSettingsSnapshot {\n\treturn buildStatefulTransportSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectBlockingParallelLimitSettings(): BlockingParallelLimitSettingsSnapshot {\n\treturn buildBlockingParallelLimitSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectStatefulLimitSettings(): StatefulLimitSettingsSnapshot {\n\treturn buildStatefulLimitSettingsSnapshot(\n\t\tinspectSubagentSettingsDocument(),\n\t\tsubagentSettingsFilePath(),\n\t);\n}\n\nexport function pathEntryExists(filePath: string): boolean {\n\ttry {\n\t\tfs.lstatSync(filePath);\n\t\treturn true;\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") return false;\n\t\tthrow error;\n\t}\n}\n\nfunction readSettingsFile(configPath: string): SubagentSettings | undefined {\n\treturn readSettingsSnapshot(configPath).settings;\n}\n\nexport function readSettingsSnapshot(configPath: string): {\n\tsettings?: SubagentSettings;\n\tcontents?: string;\n} {\n\ttry {\n\t\tconst contents = fs.readFileSync(configPath, \"utf8\");\n\t\treturn { settings: normalizeSubagentSettings(JSON.parse(contents)), contents };\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction safeErrorCode(value: string): string {\n\treturn value.replace(/[^A-Z0-9_-]/giu, \"?\").slice(0, 64);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,59 +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/tool-schema-compatibility.ts
|
|
5
|
-
import { Type } from "typebox";
|
|
6
|
-
var LLAMA_CPP_MAX_REPETITION_THRESHOLD = 2e3;
|
|
7
|
-
function grammarSafeToolObject(properties, options) {
|
|
8
|
-
return makeGrammarSafeToolSchema(Type.Object(properties, options));
|
|
9
|
-
}
|
|
10
|
-
function makeGrammarSafeToolSchema(schema) {
|
|
11
|
-
return cloneSchema(schema, 0);
|
|
12
|
-
}
|
|
13
|
-
function cloneSchema(schema, depth) {
|
|
14
|
-
if (!isRecord(schema)) return schema;
|
|
15
|
-
const clone = cloneWithDescriptors(schema);
|
|
16
|
-
if (depth > 1 && clone.type === "string" && typeof clone.maxLength === "number" && clone.maxLength >= LLAMA_CPP_MAX_REPETITION_THRESHOLD) {
|
|
17
|
-
delete clone.maxLength;
|
|
18
|
-
}
|
|
19
|
-
if (isRecord(clone.properties)) {
|
|
20
|
-
clone.properties = mapSchemas(clone.properties, depth + 1);
|
|
21
|
-
}
|
|
22
|
-
if (clone.items !== void 0) {
|
|
23
|
-
clone.items = Array.isArray(clone.items) ? clone.items.map((item) => cloneSchema(item, depth + 1)) : cloneSchema(clone.items, depth + 1);
|
|
24
|
-
}
|
|
25
|
-
if (Array.isArray(clone.prefixItems)) {
|
|
26
|
-
clone.prefixItems = clone.prefixItems.map((item) => cloneSchema(item, depth + 1));
|
|
27
|
-
}
|
|
28
|
-
for (const keyword of ["allOf", "anyOf", "oneOf"]) {
|
|
29
|
-
if (Array.isArray(clone[keyword])) {
|
|
30
|
-
clone[keyword] = clone[keyword].map((item) => cloneSchema(item, depth));
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
if (isRecord(clone.patternProperties)) {
|
|
34
|
-
clone.patternProperties = mapSchemas(clone.patternProperties, depth + 1);
|
|
35
|
-
}
|
|
36
|
-
if (isRecord(clone.additionalProperties)) {
|
|
37
|
-
clone.additionalProperties = cloneSchema(clone.additionalProperties, depth + 1);
|
|
38
|
-
}
|
|
39
|
-
return clone;
|
|
40
|
-
}
|
|
41
|
-
function mapSchemas(schemas, depth) {
|
|
42
|
-
return Object.fromEntries(
|
|
43
|
-
Object.entries(schemas).map(([name, schema]) => [name, cloneSchema(schema, depth)])
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
function cloneWithDescriptors(value) {
|
|
47
|
-
return Object.defineProperties(
|
|
48
|
-
Object.create(Object.getPrototypeOf(value)),
|
|
49
|
-
Object.getOwnPropertyDescriptors(value)
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
function isRecord(value) {
|
|
53
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export {
|
|
57
|
-
grammarSafeToolObject
|
|
58
|
-
};
|
|
59
|
-
//# sourceMappingURL=chunk-TZ34IQ3M.ts.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/tool-schema-compatibility.ts"],
|
|
4
|
-
"sourcesContent": ["import { type TObject, type TObjectOptions, type TProperties, type TSchema, Type } from \"typebox\";\n\nconst LLAMA_CPP_MAX_REPETITION_THRESHOLD = 2_000;\n\n/**\n * Remove large nested string repetitions that llama.cpp cannot compile into GBNF.\n *\n * Runtime normalization and validation continue to bound these inputs.\n * See https://github.com/ggml-org/llama.cpp/issues/25746.\n */\nexport function grammarSafeToolObject<Properties extends TProperties>(\n\tproperties: Properties,\n\toptions?: TObjectOptions,\n): TObject<Properties> {\n\treturn makeGrammarSafeToolSchema(Type.Object(properties, options));\n}\n\nfunction makeGrammarSafeToolSchema<Schema extends TSchema>(schema: Schema): Schema {\n\treturn cloneSchema(schema, 0) as Schema;\n}\n\nfunction cloneSchema(schema: unknown, depth: number): unknown {\n\tif (!isRecord(schema)) return schema;\n\tconst clone = cloneWithDescriptors(schema);\n\tif (\n\t\tdepth > 1 &&\n\t\tclone.type === \"string\" &&\n\t\ttypeof clone.maxLength === \"number\" &&\n\t\tclone.maxLength >= LLAMA_CPP_MAX_REPETITION_THRESHOLD\n\t) {\n\t\tdelete clone.maxLength;\n\t}\n\tif (isRecord(clone.properties)) {\n\t\tclone.properties = mapSchemas(clone.properties, depth + 1);\n\t}\n\tif (clone.items !== undefined) {\n\t\tclone.items = Array.isArray(clone.items)\n\t\t\t? clone.items.map((item) => cloneSchema(item, depth + 1))\n\t\t\t: cloneSchema(clone.items, depth + 1);\n\t}\n\tif (Array.isArray(clone.prefixItems)) {\n\t\tclone.prefixItems = clone.prefixItems.map((item) => cloneSchema(item, depth + 1));\n\t}\n\tfor (const keyword of [\"allOf\", \"anyOf\", \"oneOf\"] as const) {\n\t\tif (Array.isArray(clone[keyword])) {\n\t\t\tclone[keyword] = clone[keyword].map((item) => cloneSchema(item, depth));\n\t\t}\n\t}\n\tif (isRecord(clone.patternProperties)) {\n\t\tclone.patternProperties = mapSchemas(clone.patternProperties, depth + 1);\n\t}\n\tif (isRecord(clone.additionalProperties)) {\n\t\tclone.additionalProperties = cloneSchema(clone.additionalProperties, depth + 1);\n\t}\n\treturn clone;\n}\n\nfunction mapSchemas(schemas: Record<string, unknown>, depth: number): Record<string, unknown> {\n\treturn Object.fromEntries(\n\t\tObject.entries(schemas).map(([name, schema]) => [name, cloneSchema(schema, depth)]),\n\t);\n}\n\nfunction cloneWithDescriptors(value: Record<string, unknown>): Record<string, unknown> {\n\treturn Object.defineProperties(\n\t\tObject.create(Object.getPrototypeOf(value)),\n\t\tObject.getOwnPropertyDescriptors(value),\n\t) as Record<string, unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],
|
|
5
|
-
"mappings": ";;;;AAAA,SAA4E,YAAY;AAExF,IAAM,qCAAqC;AAQpC,SAAS,sBACf,YACA,SACsB;AACtB,SAAO,0BAA0B,KAAK,OAAO,YAAY,OAAO,CAAC;AAClE;AAEA,SAAS,0BAAkD,QAAwB;AAClF,SAAO,YAAY,QAAQ,CAAC;AAC7B;AAEA,SAAS,YAAY,QAAiB,OAAwB;AAC7D,MAAI,CAAC,SAAS,MAAM,EAAG,QAAO;AAC9B,QAAM,QAAQ,qBAAqB,MAAM;AACzC,MACC,QAAQ,KACR,MAAM,SAAS,YACf,OAAO,MAAM,cAAc,YAC3B,MAAM,aAAa,oCAClB;AACD,WAAO,MAAM;AAAA,EACd;AACA,MAAI,SAAS,MAAM,UAAU,GAAG;AAC/B,UAAM,aAAa,WAAW,MAAM,YAAY,QAAQ,CAAC;AAAA,EAC1D;AACA,MAAI,MAAM,UAAU,QAAW;AAC9B,UAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,IACpC,MAAM,MAAM,IAAI,CAAC,SAAS,YAAY,MAAM,QAAQ,CAAC,CAAC,IACtD,YAAY,MAAM,OAAO,QAAQ,CAAC;AAAA,EACtC;AACA,MAAI,MAAM,QAAQ,MAAM,WAAW,GAAG;AACrC,UAAM,cAAc,MAAM,YAAY,IAAI,CAAC,SAAS,YAAY,MAAM,QAAQ,CAAC,CAAC;AAAA,EACjF;AACA,aAAW,WAAW,CAAC,SAAS,SAAS,OAAO,GAAY;AAC3D,QAAI,MAAM,QAAQ,MAAM,OAAO,CAAC,GAAG;AAClC,YAAM,OAAO,IAAI,MAAM,OAAO,EAAE,IAAI,CAAC,SAAS,YAAY,MAAM,KAAK,CAAC;AAAA,IACvE;AAAA,EACD;AACA,MAAI,SAAS,MAAM,iBAAiB,GAAG;AACtC,UAAM,oBAAoB,WAAW,MAAM,mBAAmB,QAAQ,CAAC;AAAA,EACxE;AACA,MAAI,SAAS,MAAM,oBAAoB,GAAG;AACzC,UAAM,uBAAuB,YAAY,MAAM,sBAAsB,QAAQ,CAAC;AAAA,EAC/E;AACA,SAAO;AACR;AAEA,SAAS,WAAW,SAAkC,OAAwC;AAC7F,SAAO,OAAO;AAAA,IACb,OAAO,QAAQ,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM,YAAY,QAAQ,KAAK,CAAC,CAAC;AAAA,EACnF;AACD;AAEA,SAAS,qBAAqB,OAAyD;AACtF,SAAO,OAAO;AAAA,IACb,OAAO,OAAO,OAAO,eAAe,KAAK,CAAC;AAAA,IAC1C,OAAO,0BAA0B,KAAK;AAAA,EACvC;AACD;AAEA,SAAS,SAAS,OAAkD;AACnE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC3E;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,22 +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/consult-policy.ts
|
|
5
|
-
var READ_ONLY_CONSULT_TOOLS = ["read", "grep", "find", "ls"];
|
|
6
|
-
var READ_ONLY_CONSULT_TOOL_SET = new Set(READ_ONLY_CONSULT_TOOLS);
|
|
7
|
-
function resolveConsultTools(tools) {
|
|
8
|
-
if (tools === void 0) return [...READ_ONLY_CONSULT_TOOLS];
|
|
9
|
-
const seen = /* @__PURE__ */ new Set();
|
|
10
|
-
const effective = [];
|
|
11
|
-
for (const tool of tools) {
|
|
12
|
-
if (!READ_ONLY_CONSULT_TOOL_SET.has(tool) || seen.has(tool)) continue;
|
|
13
|
-
seen.add(tool);
|
|
14
|
-
effective.push(tool);
|
|
15
|
-
}
|
|
16
|
-
return effective;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export {
|
|
20
|
-
resolveConsultTools
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=chunk-UMBPMVJW.ts.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/consult-policy.ts"],
|
|
4
|
-
"sourcesContent": ["export const READ_ONLY_CONSULT_TOOLS = [\"read\", \"grep\", \"find\", \"ls\"] as const;\n\nconst READ_ONLY_CONSULT_TOOL_SET = new Set<string>(READ_ONLY_CONSULT_TOOLS);\n\nexport function resolveConsultTools(tools: readonly string[] | undefined): string[] {\n\tif (tools === undefined) return [...READ_ONLY_CONSULT_TOOLS];\n\tconst seen = new Set<string>();\n\tconst effective: string[] = [];\n\tfor (const tool of tools) {\n\t\tif (!READ_ONLY_CONSULT_TOOL_SET.has(tool) || seen.has(tool)) continue;\n\t\tseen.add(tool);\n\t\teffective.push(tool);\n\t}\n\treturn effective;\n}\n"],
|
|
5
|
-
"mappings": ";;;;AAAO,IAAM,0BAA0B,CAAC,QAAQ,QAAQ,QAAQ,IAAI;AAEpE,IAAM,6BAA6B,IAAI,IAAY,uBAAuB;AAEnE,SAAS,oBAAoB,OAAgD;AACnF,MAAI,UAAU,OAAW,QAAO,CAAC,GAAG,uBAAuB;AAC3D,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,YAAsB,CAAC;AAC7B,aAAW,QAAQ,OAAO;AACzB,QAAI,CAAC,2BAA2B,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,EAAG;AAC7D,SAAK,IAAI,IAAI;AACb,cAAU,KAAK,IAAI;AAAA,EACpB;AACA,SAAO;AACR;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,80 +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/stateful-limits.ts
|
|
5
|
-
var STATEFUL_LIMIT_FIELDS = [
|
|
6
|
-
"maxAgents",
|
|
7
|
-
"maxActiveTurns",
|
|
8
|
-
"maxChildrenPerAgent",
|
|
9
|
-
"maxDepth",
|
|
10
|
-
"maxStoredAgents"
|
|
11
|
-
];
|
|
12
|
-
var STATEFUL_LIMIT_DEFINITIONS = [
|
|
13
|
-
{
|
|
14
|
-
field: "maxAgents",
|
|
15
|
-
label: "Subagents saved for follow-up",
|
|
16
|
-
description: "Working, queued, and reusable background subagents kept in one session",
|
|
17
|
-
defaultValue: 16,
|
|
18
|
-
minimum: 1
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
field: "maxActiveTurns",
|
|
22
|
-
label: "Subagents working at once",
|
|
23
|
-
description: "Background subagent turns that may run at the same time",
|
|
24
|
-
defaultValue: 4,
|
|
25
|
-
minimum: 1
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
field: "maxChildrenPerAgent",
|
|
29
|
-
label: "Direct children per subagent",
|
|
30
|
-
description: "Subagents that one parent subagent may keep for follow-up",
|
|
31
|
-
defaultValue: 8,
|
|
32
|
-
minimum: 1
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
field: "maxDepth",
|
|
36
|
-
label: "Nested subagent levels",
|
|
37
|
-
description: "Child levels allowed below a top-level subagent",
|
|
38
|
-
defaultValue: 3,
|
|
39
|
-
minimum: 0
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
field: "maxStoredAgents",
|
|
43
|
-
label: "Stored subagent records",
|
|
44
|
-
description: "Background subagent records kept on disk for each session",
|
|
45
|
-
defaultValue: 50,
|
|
46
|
-
minimum: 1
|
|
47
|
-
}
|
|
48
|
-
];
|
|
49
|
-
var definitionsByField = new Map(
|
|
50
|
-
STATEFUL_LIMIT_DEFINITIONS.map((definition) => [definition.field, definition])
|
|
51
|
-
);
|
|
52
|
-
function statefulLimitDefinition(field) {
|
|
53
|
-
const definition = definitionsByField.get(field);
|
|
54
|
-
if (!definition) throw new Error(`Unknown stateful limit: ${field}`);
|
|
55
|
-
return definition;
|
|
56
|
-
}
|
|
57
|
-
function isStatefulLimitField(value) {
|
|
58
|
-
return STATEFUL_LIMIT_FIELDS.includes(value);
|
|
59
|
-
}
|
|
60
|
-
function isValidStatefulLimit(field, value) {
|
|
61
|
-
return typeof value === "number" && Number.isSafeInteger(value) && value >= statefulLimitDefinition(field).minimum;
|
|
62
|
-
}
|
|
63
|
-
function resolveStatefulLimits(settings) {
|
|
64
|
-
return Object.fromEntries(
|
|
65
|
-
STATEFUL_LIMIT_DEFINITIONS.map((definition) => [
|
|
66
|
-
definition.field,
|
|
67
|
-
settings?.[definition.field] ?? definition.defaultValue
|
|
68
|
-
])
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export {
|
|
73
|
-
STATEFUL_LIMIT_FIELDS,
|
|
74
|
-
STATEFUL_LIMIT_DEFINITIONS,
|
|
75
|
-
statefulLimitDefinition,
|
|
76
|
-
isStatefulLimitField,
|
|
77
|
-
isValidStatefulLimit,
|
|
78
|
-
resolveStatefulLimits
|
|
79
|
-
};
|
|
80
|
-
//# sourceMappingURL=chunk-VDG7LTYE.ts.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/stateful-limits.ts"],
|
|
4
|
-
"sourcesContent": ["import type { SubagentRuntimeSettings } from \"./agents/types.js\";\n\nexport const STATEFUL_LIMIT_FIELDS = [\n\t\"maxAgents\",\n\t\"maxActiveTurns\",\n\t\"maxChildrenPerAgent\",\n\t\"maxDepth\",\n\t\"maxStoredAgents\",\n] as const;\n\nexport type StatefulLimitField = (typeof STATEFUL_LIMIT_FIELDS)[number];\n\nexport interface StatefulLimits {\n\tmaxAgents: number;\n\tmaxActiveTurns: number;\n\tmaxChildrenPerAgent: number;\n\tmaxDepth: number;\n\tmaxStoredAgents: number;\n}\n\nexport interface StatefulLimitDefinition {\n\tfield: StatefulLimitField;\n\tlabel: string;\n\tdescription: string;\n\tdefaultValue: number;\n\tminimum: number;\n}\n\nexport const STATEFUL_LIMIT_DEFINITIONS: readonly StatefulLimitDefinition[] = [\n\t{\n\t\tfield: \"maxAgents\",\n\t\tlabel: \"Subagents saved for follow-up\",\n\t\tdescription: \"Working, queued, and reusable background subagents kept in one session\",\n\t\tdefaultValue: 16,\n\t\tminimum: 1,\n\t},\n\t{\n\t\tfield: \"maxActiveTurns\",\n\t\tlabel: \"Subagents working at once\",\n\t\tdescription: \"Background subagent turns that may run at the same time\",\n\t\tdefaultValue: 4,\n\t\tminimum: 1,\n\t},\n\t{\n\t\tfield: \"maxChildrenPerAgent\",\n\t\tlabel: \"Direct children per subagent\",\n\t\tdescription: \"Subagents that one parent subagent may keep for follow-up\",\n\t\tdefaultValue: 8,\n\t\tminimum: 1,\n\t},\n\t{\n\t\tfield: \"maxDepth\",\n\t\tlabel: \"Nested subagent levels\",\n\t\tdescription: \"Child levels allowed below a top-level subagent\",\n\t\tdefaultValue: 3,\n\t\tminimum: 0,\n\t},\n\t{\n\t\tfield: \"maxStoredAgents\",\n\t\tlabel: \"Stored subagent records\",\n\t\tdescription: \"Background subagent records kept on disk for each session\",\n\t\tdefaultValue: 50,\n\t\tminimum: 1,\n\t},\n];\n\nconst definitionsByField = new Map(\n\tSTATEFUL_LIMIT_DEFINITIONS.map((definition) => [definition.field, definition]),\n);\n\nexport function statefulLimitDefinition(field: StatefulLimitField): StatefulLimitDefinition {\n\tconst definition = definitionsByField.get(field);\n\tif (!definition) throw new Error(`Unknown stateful limit: ${field}`);\n\treturn definition;\n}\n\nexport function isStatefulLimitField(value: string): value is StatefulLimitField {\n\treturn (STATEFUL_LIMIT_FIELDS as readonly string[]).includes(value);\n}\n\nexport function isValidStatefulLimit(field: StatefulLimitField, value: unknown): value is number {\n\treturn (\n\t\ttypeof value === \"number\" &&\n\t\tNumber.isSafeInteger(value) &&\n\t\tvalue >= statefulLimitDefinition(field).minimum\n\t);\n}\n\nexport function resolveStatefulLimits(settings?: SubagentRuntimeSettings): StatefulLimits {\n\treturn Object.fromEntries(\n\t\tSTATEFUL_LIMIT_DEFINITIONS.map((definition) => [\n\t\t\tdefinition.field,\n\t\t\tsettings?.[definition.field] ?? definition.defaultValue,\n\t\t]),\n\t) as unknown as StatefulLimits;\n}\n"],
|
|
5
|
-
"mappings": ";;;;AAEO,IAAM,wBAAwB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAoBO,IAAM,6BAAiE;AAAA,EAC7E;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AACD;AAEA,IAAM,qBAAqB,IAAI;AAAA,EAC9B,2BAA2B,IAAI,CAAC,eAAe,CAAC,WAAW,OAAO,UAAU,CAAC;AAC9E;AAEO,SAAS,wBAAwB,OAAoD;AAC3F,QAAM,aAAa,mBAAmB,IAAI,KAAK;AAC/C,MAAI,CAAC,WAAY,OAAM,IAAI,MAAM,2BAA2B,KAAK,EAAE;AACnE,SAAO;AACR;AAEO,SAAS,qBAAqB,OAA4C;AAChF,SAAQ,sBAA4C,SAAS,KAAK;AACnE;AAEO,SAAS,qBAAqB,OAA2B,OAAiC;AAChG,SACC,OAAO,UAAU,YACjB,OAAO,cAAc,KAAK,KAC1B,SAAS,wBAAwB,KAAK,EAAE;AAE1C;AAEO,SAAS,sBAAsB,UAAoD;AACzF,SAAO,OAAO;AAAA,IACb,2BAA2B,IAAI,CAAC,eAAe;AAAA,MAC9C,WAAW;AAAA,MACX,WAAW,WAAW,KAAK,KAAK,WAAW;AAAA,IAC5C,CAAC;AAAA,EACF;AACD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,73 +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
|
-
DEFAULT_MAX_CONTEXT_BYTES,
|
|
8
|
-
truncateUtf8
|
|
9
|
-
} from "./chunk-H3FP6DLR.ts";
|
|
10
|
-
|
|
11
|
-
// src/runner-result.ts
|
|
12
|
-
function getFinalOutput(messages) {
|
|
13
|
-
for (let i = messages.length - 1; i >= 0; i--) {
|
|
14
|
-
const msg = messages[i];
|
|
15
|
-
if (msg?.role === "assistant") {
|
|
16
|
-
const text = msg.content.filter((part) => part.type === "text").map((part) => part.text).join("\n");
|
|
17
|
-
if (text) return text;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
return "";
|
|
21
|
-
}
|
|
22
|
-
function getResultFinalOutput(result) {
|
|
23
|
-
return result.finalOutput ?? getFinalOutput(result.messages);
|
|
24
|
-
}
|
|
25
|
-
function isResultError(result) {
|
|
26
|
-
return result.exitCode !== 0 && result.exitCode !== -1 || result.timedOut === true || result.stopReason === "timeout" || result.stopReason === "error" || result.stopReason === "aborted";
|
|
27
|
-
}
|
|
28
|
-
function formatResultFailure(result) {
|
|
29
|
-
const error = result.errorMessage || result.stderr.trim();
|
|
30
|
-
const output = getResultFinalOutput(result);
|
|
31
|
-
const sections = [error];
|
|
32
|
-
if (result.timeoutSummary) sections.push(`Timed-out work summary:
|
|
33
|
-
${result.timeoutSummary}`);
|
|
34
|
-
else if (output) sections.push(`Partial output:
|
|
35
|
-
${output}`);
|
|
36
|
-
if (result.partialOutput && result.partialOutput !== output) {
|
|
37
|
-
sections.push(`Partial output before finalization:
|
|
38
|
-
${result.partialOutput}`);
|
|
39
|
-
}
|
|
40
|
-
if (result.termination && !result.timeoutSummary) {
|
|
41
|
-
sections.push(
|
|
42
|
-
`Termination checkpoint:
|
|
43
|
-
${formatTimeoutCheckpoint(result.termination.checkpoint)}`
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
if (result.timeoutSummaryError) {
|
|
47
|
-
sections.push(`Summary finalization failed: ${result.timeoutSummaryError}`);
|
|
48
|
-
}
|
|
49
|
-
return truncateUtf8(
|
|
50
|
-
sections.filter(Boolean).join("\n\n") || "(no output)",
|
|
51
|
-
DEFAULT_MAX_CONTEXT_BYTES
|
|
52
|
-
).text;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// src/runner-outcome.ts
|
|
56
|
-
function getResultFinalOutput2(result) {
|
|
57
|
-
return getResultFinalOutput(result);
|
|
58
|
-
}
|
|
59
|
-
function isResultError2(result) {
|
|
60
|
-
return isResultError(result) || result.resultContractInvalid === true || result.outcome !== void 0 && result.outcome.status !== "completed" && result.outcome.status !== "partial";
|
|
61
|
-
}
|
|
62
|
-
function formatResultFailure2(result) {
|
|
63
|
-
const contractError = result.resultContractInvalid ? `Subagent returned an invalid ${result.resultFormat ?? "structured"} result contract` : result.outcome && !["completed", "partial"].includes(result.outcome.status) ? `Subagent outcome ${result.outcome.status}${result.outcome.reasonCode ? ` (${result.outcome.reasonCode})` : ""}; recovery: ${result.outcome.recoveryActions.join(", ") || "none"}` : void 0;
|
|
64
|
-
return contractError ? formatResultFailure({ ...result, errorMessage: contractError }) : formatResultFailure(result);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export {
|
|
68
|
-
getFinalOutput,
|
|
69
|
-
getResultFinalOutput2 as getResultFinalOutput,
|
|
70
|
-
isResultError2 as isResultError,
|
|
71
|
-
formatResultFailure2 as formatResultFailure
|
|
72
|
-
};
|
|
73
|
-
//# sourceMappingURL=chunk-X4NMONPE.ts.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/runner-result.ts", "../../src/runner-outcome.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Message } from \"@earendil-works/pi-ai\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, truncateUtf8 } from \"./limits.js\";\nimport type { SingleResult } from \"./runner-types.js\";\nimport { formatTimeoutCheckpoint } from \"./timeout-checkpoint.js\";\n\nexport function getFinalOutput(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg?.role === \"assistant\") {\n\t\t\tconst text = msg.content\n\t\t\t\t.filter((part) => part.type === \"text\")\n\t\t\t\t.map((part) => part.text)\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (text) return text;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nexport function getResultFinalOutput(result: SingleResult): string {\n\treturn result.finalOutput ?? getFinalOutput(result.messages);\n}\n\nexport function isResultError(result: SingleResult): boolean {\n\treturn (\n\t\t(result.exitCode !== 0 && result.exitCode !== -1) ||\n\t\tresult.timedOut === true ||\n\t\tresult.stopReason === \"timeout\" ||\n\t\tresult.stopReason === \"error\" ||\n\t\tresult.stopReason === \"aborted\"\n\t);\n}\n\nexport function formatResultFailure(result: SingleResult): string {\n\tconst error = result.errorMessage || result.stderr.trim();\n\tconst output = getResultFinalOutput(result);\n\tconst sections = [error];\n\tif (result.timeoutSummary) sections.push(`Timed-out work summary:\\n${result.timeoutSummary}`);\n\telse if (output) sections.push(`Partial output:\\n${output}`);\n\tif (result.partialOutput && result.partialOutput !== output) {\n\t\tsections.push(`Partial output before finalization:\\n${result.partialOutput}`);\n\t}\n\tif (result.termination && !result.timeoutSummary) {\n\t\tsections.push(\n\t\t\t`Termination checkpoint:\\n${formatTimeoutCheckpoint(result.termination.checkpoint)}`,\n\t\t);\n\t}\n\tif (result.timeoutSummaryError) {\n\t\tsections.push(`Summary finalization failed: ${result.timeoutSummaryError}`);\n\t}\n\treturn truncateUtf8(\n\t\tsections.filter(Boolean).join(\"\\n\\n\") || \"(no output)\",\n\t\tDEFAULT_MAX_CONTEXT_BYTES,\n\t).text;\n}\n", "import {\n\tformatResultFailure as formatBaseResultFailure,\n\tgetResultFinalOutput as getBaseResultFinalOutput,\n\tisResultError as isBaseResultError,\n} from \"./runner-result.js\";\nimport type { SingleResult } from \"./runner-types.js\";\n\nexport function getResultFinalOutput(result: SingleResult): string {\n\treturn getBaseResultFinalOutput(result);\n}\n\nexport function isResultError(result: SingleResult): boolean {\n\treturn (\n\t\tisBaseResultError(result) ||\n\t\tresult.resultContractInvalid === true ||\n\t\t(result.outcome !== undefined &&\n\t\t\tresult.outcome.status !== \"completed\" &&\n\t\t\tresult.outcome.status !== \"partial\")\n\t);\n}\n\nexport function formatResultFailure(result: SingleResult): string {\n\tconst contractError = result.resultContractInvalid\n\t\t? `Subagent returned an invalid ${result.resultFormat ?? \"structured\"} result contract`\n\t\t: result.outcome && ![\"completed\", \"partial\"].includes(result.outcome.status)\n\t\t\t? `Subagent outcome ${result.outcome.status}${result.outcome.reasonCode ? ` (${result.outcome.reasonCode})` : \"\"}; recovery: ${result.outcome.recoveryActions.join(\", \") || \"none\"}`\n\t\t\t: undefined;\n\treturn contractError\n\t\t? formatBaseResultFailure({ ...result, errorMessage: contractError })\n\t\t: formatBaseResultFailure(result);\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;AAKO,SAAS,eAAe,UAA6B;AAC3D,WAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC9C,UAAM,MAAM,SAAS,CAAC;AACtB,QAAI,KAAK,SAAS,aAAa;AAC9B,YAAM,OAAO,IAAI,QACf,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM,EACrC,IAAI,CAAC,SAAS,KAAK,IAAI,EACvB,KAAK,IAAI;AACX,UAAI,KAAM,QAAO;AAAA,IAClB;AAAA,EACD;AACA,SAAO;AACR;AAEO,SAAS,qBAAqB,QAA8B;AAClE,SAAO,OAAO,eAAe,eAAe,OAAO,QAAQ;AAC5D;AAEO,SAAS,cAAc,QAA+B;AAC5D,SACE,OAAO,aAAa,KAAK,OAAO,aAAa,MAC9C,OAAO,aAAa,QACpB,OAAO,eAAe,aACtB,OAAO,eAAe,WACtB,OAAO,eAAe;AAExB;AAEO,SAAS,oBAAoB,QAA8B;AACjE,QAAM,QAAQ,OAAO,gBAAgB,OAAO,OAAO,KAAK;AACxD,QAAM,SAAS,qBAAqB,MAAM;AAC1C,QAAM,WAAW,CAAC,KAAK;AACvB,MAAI,OAAO,eAAgB,UAAS,KAAK;AAAA,EAA4B,OAAO,cAAc,EAAE;AAAA,WACnF,OAAQ,UAAS,KAAK;AAAA,EAAoB,MAAM,EAAE;AAC3D,MAAI,OAAO,iBAAiB,OAAO,kBAAkB,QAAQ;AAC5D,aAAS,KAAK;AAAA,EAAwC,OAAO,aAAa,EAAE;AAAA,EAC7E;AACA,MAAI,OAAO,eAAe,CAAC,OAAO,gBAAgB;AACjD,aAAS;AAAA,MACR;AAAA,EAA4B,wBAAwB,OAAO,YAAY,UAAU,CAAC;AAAA,IACnF;AAAA,EACD;AACA,MAAI,OAAO,qBAAqB;AAC/B,aAAS,KAAK,gCAAgC,OAAO,mBAAmB,EAAE;AAAA,EAC3E;AACA,SAAO;AAAA,IACN,SAAS,OAAO,OAAO,EAAE,KAAK,MAAM,KAAK;AAAA,IACzC;AAAA,EACD,EAAE;AACH;;;AC/CO,SAASA,sBAAqB,QAA8B;AAClE,SAAO,qBAAyB,MAAM;AACvC;AAEO,SAASC,eAAc,QAA+B;AAC5D,SACC,cAAkB,MAAM,KACxB,OAAO,0BAA0B,QAChC,OAAO,YAAY,UACnB,OAAO,QAAQ,WAAW,eAC1B,OAAO,QAAQ,WAAW;AAE7B;AAEO,SAASC,qBAAoB,QAA8B;AACjE,QAAM,gBAAgB,OAAO,wBAC1B,gCAAgC,OAAO,gBAAgB,YAAY,qBACnE,OAAO,WAAW,CAAC,CAAC,aAAa,SAAS,EAAE,SAAS,OAAO,QAAQ,MAAM,IACzE,oBAAoB,OAAO,QAAQ,MAAM,GAAG,OAAO,QAAQ,aAAa,KAAK,OAAO,QAAQ,UAAU,MAAM,EAAE,eAAe,OAAO,QAAQ,gBAAgB,KAAK,IAAI,KAAK,MAAM,KAChL;AACJ,SAAO,gBACJ,oBAAwB,EAAE,GAAG,QAAQ,cAAc,cAAc,CAAC,IAClE,oBAAwB,MAAM;AAClC;",
|
|
6
|
-
"names": ["getResultFinalOutput", "isResultError", "formatResultFailure"]
|
|
7
|
-
}
|
|
@@ -1,65 +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
|
-
isExecutionPlan
|
|
5
|
-
} from "./chunk-7AAJEUSL.ts";
|
|
6
|
-
|
|
7
|
-
// src/capability-grant.ts
|
|
8
|
-
import { createHash } from "node:crypto";
|
|
9
|
-
var CAPABILITY_GRANT_VERSION = "pi-subagents:capability-grant:v1";
|
|
10
|
-
function grantId(projection) {
|
|
11
|
-
return createHash("sha256").update(JSON.stringify(projection)).digest("hex");
|
|
12
|
-
}
|
|
13
|
-
function issueCapabilityGrant(plan, issuedAt, lifetimeMs) {
|
|
14
|
-
if (!Number.isFinite(issuedAt) || !Number.isFinite(lifetimeMs) || lifetimeMs <= 0) {
|
|
15
|
-
throw new Error("Capability grant requires finite issuance and lifetime bounds");
|
|
16
|
-
}
|
|
17
|
-
const expiresAt = issuedAt + lifetimeMs;
|
|
18
|
-
const projection = {
|
|
19
|
-
executionPlanId: plan.id,
|
|
20
|
-
taskGeneration: plan.taskGeneration,
|
|
21
|
-
effectiveTools: plan.effectiveTools,
|
|
22
|
-
issuedAt,
|
|
23
|
-
expiresAt
|
|
24
|
-
};
|
|
25
|
-
return {
|
|
26
|
-
version: CAPABILITY_GRANT_VERSION,
|
|
27
|
-
id: grantId(projection),
|
|
28
|
-
...projection,
|
|
29
|
-
state: "active"
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
function revokeCapabilityGrant(grant, reason, revokedAt) {
|
|
33
|
-
if (grant.state === "revoked") throw new Error("Capability grant is already revoked");
|
|
34
|
-
grant.state = "revoked";
|
|
35
|
-
grant.revokedAt = revokedAt;
|
|
36
|
-
grant.revocationReason = reason.slice(0, 256);
|
|
37
|
-
return structuredClone(grant);
|
|
38
|
-
}
|
|
39
|
-
function isCapabilityGrant(value) {
|
|
40
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
41
|
-
const grant = value;
|
|
42
|
-
const validShape = grant.version === CAPABILITY_GRANT_VERSION && typeof grant.id === "string" && /^[a-f0-9]{64}$/u.test(grant.id) && typeof grant.executionPlanId === "string" && /^[a-f0-9]{64}$/u.test(grant.executionPlanId) && Number.isSafeInteger(grant.taskGeneration) && Number(grant.taskGeneration) >= 0 && Number.isFinite(grant.issuedAt) && Number.isFinite(grant.expiresAt) && Number(grant.expiresAt) >= Number(grant.issuedAt) && (grant.state === "active" || grant.state === "revoked") && (grant.state === "active" ? grant.revokedAt === void 0 && grant.revocationReason === void 0 : Number.isFinite(grant.revokedAt) && typeof grant.revocationReason === "string" && grant.revocationReason.length > 0) && (grant.effectiveTools === void 0 || Array.isArray(grant.effectiveTools) && grant.effectiveTools.every((tool) => typeof tool === "string"));
|
|
43
|
-
if (!validShape) return false;
|
|
44
|
-
const validated = grant;
|
|
45
|
-
const expectedId = grantId({
|
|
46
|
-
executionPlanId: validated.executionPlanId,
|
|
47
|
-
taskGeneration: validated.taskGeneration,
|
|
48
|
-
effectiveTools: validated.effectiveTools,
|
|
49
|
-
issuedAt: validated.issuedAt,
|
|
50
|
-
expiresAt: validated.expiresAt
|
|
51
|
-
});
|
|
52
|
-
return validated.id === expectedId;
|
|
53
|
-
}
|
|
54
|
-
function isCapabilityGrantActive(grant, plan, now) {
|
|
55
|
-
return isCapabilityGrant(grant) && isExecutionPlan(plan) && grant.state === "active" && grant.executionPlanId === plan.id && grant.taskGeneration === plan.taskGeneration && JSON.stringify(grant.effectiveTools ?? null) === JSON.stringify(plan.effectiveTools ?? null) && now >= grant.issuedAt && now <= grant.expiresAt;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export {
|
|
59
|
-
CAPABILITY_GRANT_VERSION,
|
|
60
|
-
issueCapabilityGrant,
|
|
61
|
-
revokeCapabilityGrant,
|
|
62
|
-
isCapabilityGrant,
|
|
63
|
-
isCapabilityGrantActive
|
|
64
|
-
};
|
|
65
|
-
//# sourceMappingURL=chunk-YPJEN6NU.ts.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/capability-grant.ts"],
|
|
4
|
-
"sourcesContent": ["import { createHash } from \"node:crypto\";\nimport { type ExecutionPlan, isExecutionPlan } from \"./execution-plan.js\";\n\nexport const CAPABILITY_GRANT_VERSION = \"pi-subagents:capability-grant:v1\" as const;\n\nexport interface CapabilityGrant {\n\tversion: typeof CAPABILITY_GRANT_VERSION;\n\tid: string;\n\texecutionPlanId: string;\n\ttaskGeneration: number;\n\teffectiveTools?: string[];\n\tissuedAt: number;\n\texpiresAt: number;\n\tstate: \"active\" | \"revoked\";\n\trevokedAt?: number;\n\trevocationReason?: string;\n}\n\nfunction grantId(projection: {\n\texecutionPlanId: string;\n\ttaskGeneration: number;\n\teffectiveTools?: string[];\n\tissuedAt: number;\n\texpiresAt: number;\n}): string {\n\treturn createHash(\"sha256\").update(JSON.stringify(projection)).digest(\"hex\");\n}\n\nexport function issueCapabilityGrant(\n\tplan: ExecutionPlan,\n\tissuedAt: number,\n\tlifetimeMs: number,\n): CapabilityGrant {\n\tif (!Number.isFinite(issuedAt) || !Number.isFinite(lifetimeMs) || lifetimeMs <= 0) {\n\t\tthrow new Error(\"Capability grant requires finite issuance and lifetime bounds\");\n\t}\n\tconst expiresAt = issuedAt + lifetimeMs;\n\tconst projection = {\n\t\texecutionPlanId: plan.id,\n\t\ttaskGeneration: plan.taskGeneration,\n\t\teffectiveTools: plan.effectiveTools,\n\t\tissuedAt,\n\t\texpiresAt,\n\t};\n\treturn {\n\t\tversion: CAPABILITY_GRANT_VERSION,\n\t\tid: grantId(projection),\n\t\t...projection,\n\t\tstate: \"active\",\n\t};\n}\n\nexport function revokeCapabilityGrant(\n\tgrant: CapabilityGrant,\n\treason: string,\n\trevokedAt: number,\n): CapabilityGrant {\n\tif (grant.state === \"revoked\") throw new Error(\"Capability grant is already revoked\");\n\tgrant.state = \"revoked\";\n\tgrant.revokedAt = revokedAt;\n\tgrant.revocationReason = reason.slice(0, 256);\n\treturn structuredClone(grant);\n}\n\nexport function isCapabilityGrant(value: unknown): value is CapabilityGrant {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst grant = value as Partial<CapabilityGrant>;\n\tconst validShape =\n\t\tgrant.version === CAPABILITY_GRANT_VERSION &&\n\t\ttypeof grant.id === \"string\" &&\n\t\t/^[a-f0-9]{64}$/u.test(grant.id) &&\n\t\ttypeof grant.executionPlanId === \"string\" &&\n\t\t/^[a-f0-9]{64}$/u.test(grant.executionPlanId) &&\n\t\tNumber.isSafeInteger(grant.taskGeneration) &&\n\t\tNumber(grant.taskGeneration) >= 0 &&\n\t\tNumber.isFinite(grant.issuedAt) &&\n\t\tNumber.isFinite(grant.expiresAt) &&\n\t\tNumber(grant.expiresAt) >= Number(grant.issuedAt) &&\n\t\t(grant.state === \"active\" || grant.state === \"revoked\") &&\n\t\t(grant.state === \"active\"\n\t\t\t? grant.revokedAt === undefined && grant.revocationReason === undefined\n\t\t\t: Number.isFinite(grant.revokedAt) &&\n\t\t\t\ttypeof grant.revocationReason === \"string\" &&\n\t\t\t\tgrant.revocationReason.length > 0) &&\n\t\t(grant.effectiveTools === undefined ||\n\t\t\t(Array.isArray(grant.effectiveTools) &&\n\t\t\t\tgrant.effectiveTools.every((tool) => typeof tool === \"string\")));\n\tif (!validShape) return false;\n\tconst validated = grant as CapabilityGrant;\n\tconst expectedId = grantId({\n\t\texecutionPlanId: validated.executionPlanId,\n\t\ttaskGeneration: validated.taskGeneration,\n\t\teffectiveTools: validated.effectiveTools,\n\t\tissuedAt: validated.issuedAt,\n\t\texpiresAt: validated.expiresAt,\n\t});\n\treturn validated.id === expectedId;\n}\n\nexport function isCapabilityGrantActive(\n\tgrant: CapabilityGrant,\n\tplan: ExecutionPlan,\n\tnow: number,\n): boolean {\n\treturn (\n\t\tisCapabilityGrant(grant) &&\n\t\tisExecutionPlan(plan) &&\n\t\tgrant.state === \"active\" &&\n\t\tgrant.executionPlanId === plan.id &&\n\t\tgrant.taskGeneration === plan.taskGeneration &&\n\t\tJSON.stringify(grant.effectiveTools ?? null) === JSON.stringify(plan.effectiveTools ?? null) &&\n\t\tnow >= grant.issuedAt &&\n\t\tnow <= grant.expiresAt\n\t);\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAAA,SAAS,kBAAkB;AAGpB,IAAM,2BAA2B;AAexC,SAAS,QAAQ,YAMN;AACV,SAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,UAAU,UAAU,CAAC,EAAE,OAAO,KAAK;AAC5E;AAEO,SAAS,qBACf,MACA,UACA,YACkB;AAClB,MAAI,CAAC,OAAO,SAAS,QAAQ,KAAK,CAAC,OAAO,SAAS,UAAU,KAAK,cAAc,GAAG;AAClF,UAAM,IAAI,MAAM,+DAA+D;AAAA,EAChF;AACA,QAAM,YAAY,WAAW;AAC7B,QAAM,aAAa;AAAA,IAClB,iBAAiB,KAAK;AAAA,IACtB,gBAAgB,KAAK;AAAA,IACrB,gBAAgB,KAAK;AAAA,IACrB;AAAA,IACA;AAAA,EACD;AACA,SAAO;AAAA,IACN,SAAS;AAAA,IACT,IAAI,QAAQ,UAAU;AAAA,IACtB,GAAG;AAAA,IACH,OAAO;AAAA,EACR;AACD;AAEO,SAAS,sBACf,OACA,QACA,WACkB;AAClB,MAAI,MAAM,UAAU,UAAW,OAAM,IAAI,MAAM,qCAAqC;AACpF,QAAM,QAAQ;AACd,QAAM,YAAY;AAClB,QAAM,mBAAmB,OAAO,MAAM,GAAG,GAAG;AAC5C,SAAO,gBAAgB,KAAK;AAC7B;AAEO,SAAS,kBAAkB,OAA0C;AAC3E,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,QAAQ;AACd,QAAM,aACL,MAAM,YAAY,4BAClB,OAAO,MAAM,OAAO,YACpB,kBAAkB,KAAK,MAAM,EAAE,KAC/B,OAAO,MAAM,oBAAoB,YACjC,kBAAkB,KAAK,MAAM,eAAe,KAC5C,OAAO,cAAc,MAAM,cAAc,KACzC,OAAO,MAAM,cAAc,KAAK,KAChC,OAAO,SAAS,MAAM,QAAQ,KAC9B,OAAO,SAAS,MAAM,SAAS,KAC/B,OAAO,MAAM,SAAS,KAAK,OAAO,MAAM,QAAQ,MAC/C,MAAM,UAAU,YAAY,MAAM,UAAU,eAC5C,MAAM,UAAU,WACd,MAAM,cAAc,UAAa,MAAM,qBAAqB,SAC5D,OAAO,SAAS,MAAM,SAAS,KAChC,OAAO,MAAM,qBAAqB,YAClC,MAAM,iBAAiB,SAAS,OACjC,MAAM,mBAAmB,UACxB,MAAM,QAAQ,MAAM,cAAc,KAClC,MAAM,eAAe,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ;AAChE,MAAI,CAAC,WAAY,QAAO;AACxB,QAAM,YAAY;AAClB,QAAM,aAAa,QAAQ;AAAA,IAC1B,iBAAiB,UAAU;AAAA,IAC3B,gBAAgB,UAAU;AAAA,IAC1B,gBAAgB,UAAU;AAAA,IAC1B,UAAU,UAAU;AAAA,IACpB,WAAW,UAAU;AAAA,EACtB,CAAC;AACD,SAAO,UAAU,OAAO;AACzB;AAEO,SAAS,wBACf,OACA,MACA,KACU;AACV,SACC,kBAAkB,KAAK,KACvB,gBAAgB,IAAI,KACpB,MAAM,UAAU,YAChB,MAAM,oBAAoB,KAAK,MAC/B,MAAM,mBAAmB,KAAK,kBAC9B,KAAK,UAAU,MAAM,kBAAkB,IAAI,MAAM,KAAK,UAAU,KAAK,kBAAkB,IAAI,KAC3F,OAAO,MAAM,YACb,OAAO,MAAM;AAEf;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|