@caupulican/pi-adaptative 0.81.40 → 0.81.42
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/CHANGELOG.md +41 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js +1 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.ts +1 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/text.py +5 -1
- package/dist/bundled-resources/runtimes/pi-shell-engine/context.py +3 -3
- package/dist/bundled-resources/runtimes/pi-shell-engine/errors.py +8 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/exec.py +26 -3
- package/dist/bundled-resources/runtimes/pi-shell-engine/expand.py +3 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/main.py +4 -1
- package/dist/bundled-resources/runtimes/pi-shell-engine/state.py +2 -1
- package/dist/bundled-resources/runtimes/pi-shell-engine/tokens.py +2 -0
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +22 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-paths.d.ts +38 -0
- package/dist/core/agent-paths.d.ts.map +1 -1
- package/dist/core/agent-paths.js +77 -0
- package/dist/core/agent-paths.js.map +1 -1
- package/dist/core/agent-session-contracts.d.ts +311 -0
- package/dist/core/agent-session-contracts.d.ts.map +1 -0
- package/dist/core/agent-session-contracts.js +26 -0
- package/dist/core/agent-session-contracts.js.map +1 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +3 -0
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +26 -405
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +90 -316
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +3 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/autonomy/contracts.d.ts +2 -0
- package/dist/core/autonomy/contracts.d.ts.map +1 -1
- package/dist/core/autonomy/contracts.js.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.d.ts.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.js +4 -9
- package/dist/core/autonomy/envelope-enforcement.js.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.d.ts +3 -1
- package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.js +19 -5
- package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
- package/dist/core/autonomy/path-scope.d.ts +14 -0
- package/dist/core/autonomy/path-scope.d.ts.map +1 -1
- package/dist/core/autonomy/path-scope.js +37 -6
- package/dist/core/autonomy/path-scope.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts +30 -2
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +33 -1
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/bedrock-sso-login.d.ts +16 -0
- package/dist/core/bedrock-sso-login.d.ts.map +1 -0
- package/dist/core/bedrock-sso-login.js +98 -0
- package/dist/core/bedrock-sso-login.js.map +1 -0
- package/dist/core/compaction-controller.d.ts.map +1 -1
- package/dist/core/compaction-controller.js +1 -1
- package/dist/core/compaction-controller.js.map +1 -1
- package/dist/core/compaction-support.d.ts +3 -8
- package/dist/core/compaction-support.d.ts.map +1 -1
- package/dist/core/compaction-support.js +3 -3
- package/dist/core/compaction-support.js.map +1 -1
- package/dist/core/context-pipeline.d.ts +1 -1
- package/dist/core/context-pipeline.d.ts.map +1 -1
- package/dist/core/context-pipeline.js +7 -33
- package/dist/core/context-pipeline.js.map +1 -1
- package/dist/core/cost/cost-summary.d.ts.map +1 -1
- package/dist/core/cost/cost-summary.js +5 -3
- package/dist/core/cost/cost-summary.js.map +1 -1
- package/dist/core/cost/daily-usage.d.ts.map +1 -1
- package/dist/core/cost/daily-usage.js +4 -5
- package/dist/core/cost/daily-usage.js.map +1 -1
- package/dist/core/default-tool-surface.d.ts.map +1 -1
- package/dist/core/default-tool-surface.js +1 -0
- package/dist/core/default-tool-surface.js.map +1 -1
- package/dist/core/delegation/managed-lane-controller.d.ts +11 -1
- package/dist/core/delegation/managed-lane-controller.d.ts.map +1 -1
- package/dist/core/delegation/managed-lane-controller.js +84 -41
- package/dist/core/delegation/managed-lane-controller.js.map +1 -1
- package/dist/core/delegation/session-worker-claim.d.ts.map +1 -1
- package/dist/core/delegation/session-worker-claim.js +4 -3
- package/dist/core/delegation/session-worker-claim.js.map +1 -1
- package/dist/core/delegation/worker-action-journal.d.ts +73 -0
- package/dist/core/delegation/worker-action-journal.d.ts.map +1 -0
- package/dist/core/delegation/worker-action-journal.js +297 -0
- package/dist/core/delegation/worker-action-journal.js.map +1 -0
- package/dist/core/delegation/worker-actions.d.ts +36 -1
- package/dist/core/delegation/worker-actions.d.ts.map +1 -1
- package/dist/core/delegation/worker-actions.js +171 -46
- package/dist/core/delegation/worker-actions.js.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts +75 -0
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -0
- package/dist/core/delegation/worker-agent-control-coordinator.js +218 -0
- package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -0
- package/dist/core/delegation/worker-agent-control.d.ts +66 -0
- package/dist/core/delegation/worker-agent-control.d.ts.map +1 -0
- package/dist/core/delegation/worker-agent-control.js +163 -0
- package/dist/core/delegation/worker-agent-control.js.map +1 -0
- package/dist/core/delegation/worker-attempt-executor.d.ts +80 -0
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -0
- package/dist/core/delegation/worker-attempt-executor.js +343 -0
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -0
- package/dist/core/delegation/worker-claim.d.ts +30 -0
- package/dist/core/delegation/worker-claim.d.ts.map +1 -1
- package/dist/core/delegation/worker-claim.js +205 -53
- package/dist/core/delegation/worker-claim.js.map +1 -1
- package/dist/core/delegation/worker-conversation-store.d.ts +116 -0
- package/dist/core/delegation/worker-conversation-store.d.ts.map +1 -0
- package/dist/core/delegation/worker-conversation-store.js +442 -0
- package/dist/core/delegation/worker-conversation-store.js.map +1 -0
- package/dist/core/delegation/worker-delegation-controller.d.ts +21 -5
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +386 -251
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/delegation/worker-delegation-request.d.ts +14 -0
- package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-request.js.map +1 -1
- package/dist/core/delegation/worker-dispatch-scheduler.d.ts +4 -2
- package/dist/core/delegation/worker-dispatch-scheduler.d.ts.map +1 -1
- package/dist/core/delegation/worker-dispatch-scheduler.js +16 -6
- package/dist/core/delegation/worker-dispatch-scheduler.js.map +1 -1
- package/dist/core/delegation/worker-execution-policy.d.ts +2 -1
- package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -1
- package/dist/core/delegation/worker-execution-policy.js +5 -7
- package/dist/core/delegation/worker-execution-policy.js.map +1 -1
- package/dist/core/delegation/worker-lifecycle.d.ts +44 -1
- package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -1
- package/dist/core/delegation/worker-lifecycle.js +120 -0
- package/dist/core/delegation/worker-lifecycle.js.map +1 -1
- package/dist/core/delegation/worker-process-owner.d.ts +18 -0
- package/dist/core/delegation/worker-process-owner.d.ts.map +1 -0
- package/dist/core/delegation/worker-process-owner.js +54 -0
- package/dist/core/delegation/worker-process-owner.js.map +1 -0
- package/dist/core/delegation/worker-profile-resolver.d.ts +5 -1
- package/dist/core/delegation/worker-profile-resolver.d.ts.map +1 -1
- package/dist/core/delegation/worker-profile-resolver.js +8 -0
- package/dist/core/delegation/worker-profile-resolver.js.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.d.ts +54 -0
- package/dist/core/delegation/worker-recovery-coordinator.d.ts.map +1 -0
- package/dist/core/delegation/worker-recovery-coordinator.js +181 -0
- package/dist/core/delegation/worker-recovery-coordinator.js.map +1 -0
- package/dist/core/delegation/worker-resource-catalog.d.ts +32 -0
- package/dist/core/delegation/worker-resource-catalog.d.ts.map +1 -0
- package/dist/core/delegation/worker-resource-catalog.js +116 -0
- package/dist/core/delegation/worker-resource-catalog.js.map +1 -0
- package/dist/core/delegation/worker-resource-materializer.d.ts +47 -0
- package/dist/core/delegation/worker-resource-materializer.d.ts.map +1 -0
- package/dist/core/delegation/worker-resource-materializer.js +137 -0
- package/dist/core/delegation/worker-resource-materializer.js.map +1 -0
- package/dist/core/delegation/worker-runner.d.ts +3 -1
- package/dist/core/delegation/worker-runner.d.ts.map +1 -1
- package/dist/core/delegation/worker-runner.js +189 -54
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/delegation/worker-terminal-finalizer.d.ts +23 -0
- package/dist/core/delegation/worker-terminal-finalizer.d.ts.map +1 -0
- package/dist/core/delegation/worker-terminal-finalizer.js +12 -0
- package/dist/core/delegation/worker-terminal-finalizer.js.map +1 -0
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +38 -0
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -0
- package/dist/core/delegation/worker-write-reservation-coordinator.js +107 -0
- package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -0
- package/dist/core/delegation/worker-write-reservation.d.ts +90 -0
- package/dist/core/delegation/worker-write-reservation.d.ts.map +1 -0
- package/dist/core/delegation/worker-write-reservation.js +348 -0
- package/dist/core/delegation/worker-write-reservation.js.map +1 -0
- package/dist/core/extension-import-authority.d.ts +6 -0
- package/dist/core/extension-import-authority.d.ts.map +1 -0
- package/dist/core/extension-import-authority.js +10 -0
- package/dist/core/extension-import-authority.js.map +1 -0
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +2 -3
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +14 -5
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/stale-context.d.ts +2 -0
- package/dist/core/extensions/stale-context.d.ts.map +1 -0
- package/dist/core/extensions/stale-context.js +2 -0
- package/dist/core/extensions/stale-context.js.map +1 -0
- package/dist/core/extensions/types.d.ts +8 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/foreground-recovery-controller.d.ts +1 -0
- package/dist/core/foreground-recovery-controller.d.ts.map +1 -1
- package/dist/core/foreground-recovery-controller.js +13 -13
- package/dist/core/foreground-recovery-controller.js.map +1 -1
- package/dist/core/goal-loop-controller.d.ts +14 -9
- package/dist/core/goal-loop-controller.d.ts.map +1 -1
- package/dist/core/goal-loop-controller.js +47 -75
- package/dist/core/goal-loop-controller.js.map +1 -1
- package/dist/core/goals/compact-goal-context.d.ts +11 -0
- package/dist/core/goals/compact-goal-context.d.ts.map +1 -0
- package/dist/core/goals/compact-goal-context.js +59 -0
- package/dist/core/goals/compact-goal-context.js.map +1 -0
- package/dist/core/goals/goal-acceptance.d.ts.map +1 -1
- package/dist/core/goals/goal-acceptance.js +2 -0
- package/dist/core/goals/goal-acceptance.js.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.d.ts +2 -1
- package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.js +5 -8
- package/dist/core/goals/goal-auto-continue-controller.js.map +1 -1
- package/dist/core/goals/goal-continuation-controller.d.ts +2 -2
- package/dist/core/goals/goal-continuation-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-controller.js +42 -11
- package/dist/core/goals/goal-continuation-controller.js.map +1 -1
- package/dist/core/goals/goal-continuation-defaults.d.ts +4 -29
- package/dist/core/goals/goal-continuation-defaults.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-defaults.js +4 -32
- package/dist/core/goals/goal-continuation-defaults.js.map +1 -1
- package/dist/core/goals/goal-continuation-prompt.d.ts +8 -18
- package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-prompt.js +9 -179
- package/dist/core/goals/goal-continuation-prompt.js.map +1 -1
- package/dist/core/goals/goal-lifecycle.d.ts +35 -12
- package/dist/core/goals/goal-lifecycle.d.ts.map +1 -1
- package/dist/core/goals/goal-lifecycle.js +98 -13
- package/dist/core/goals/goal-lifecycle.js.map +1 -1
- package/dist/core/goals/goal-record.d.ts +17 -0
- package/dist/core/goals/goal-record.d.ts.map +1 -0
- package/dist/core/goals/goal-record.js +31 -0
- package/dist/core/goals/goal-record.js.map +1 -0
- package/dist/core/goals/goal-session-controller.d.ts +42 -0
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -0
- package/dist/core/goals/goal-session-controller.js +128 -0
- package/dist/core/goals/goal-session-controller.js.map +1 -0
- package/dist/core/goals/goal-state.d.ts +45 -25
- package/dist/core/goals/goal-state.d.ts.map +1 -1
- package/dist/core/goals/goal-state.js +85 -15
- package/dist/core/goals/goal-state.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts +1 -4
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js +49 -34
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/goals/session-goal-state.d.ts +18 -8
- package/dist/core/goals/session-goal-state.d.ts.map +1 -1
- package/dist/core/goals/session-goal-state.js +134 -11
- package/dist/core/goals/session-goal-state.js.map +1 -1
- package/dist/core/human-input-controller.d.ts +47 -0
- package/dist/core/human-input-controller.d.ts.map +1 -0
- package/dist/core/human-input-controller.js +181 -0
- package/dist/core/human-input-controller.js.map +1 -0
- package/dist/core/local-runtime-controller.d.ts +1 -1
- package/dist/core/local-runtime-controller.d.ts.map +1 -1
- package/dist/core/local-runtime-controller.js.map +1 -1
- package/dist/core/model-capability.d.ts +0 -19
- package/dist/core/model-capability.d.ts.map +1 -1
- package/dist/core/model-capability.js +0 -19
- package/dist/core/model-capability.js.map +1 -1
- package/dist/core/model-registry.d.ts +6 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +13 -5
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +16 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +32 -16
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-router-controller.d.ts +1 -1
- package/dist/core/model-router-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js.map +1 -1
- package/dist/core/model-selection-controller.d.ts +1 -1
- package/dist/core/model-selection-controller.d.ts.map +1 -1
- package/dist/core/model-selection-controller.js.map +1 -1
- package/dist/core/models/model-endpoint.d.ts +3 -0
- package/dist/core/models/model-endpoint.d.ts.map +1 -0
- package/dist/core/models/model-endpoint.js +11 -0
- package/dist/core/models/model-endpoint.js.map +1 -0
- package/dist/core/orchestration/agent-resume.d.ts +2 -0
- package/dist/core/orchestration/agent-resume.d.ts.map +1 -1
- package/dist/core/orchestration/agent-resume.js +7 -0
- package/dist/core/orchestration/agent-resume.js.map +1 -1
- package/dist/core/orchestration/attempt-usage.d.ts +28 -0
- package/dist/core/orchestration/attempt-usage.d.ts.map +1 -0
- package/dist/core/orchestration/attempt-usage.js +168 -0
- package/dist/core/orchestration/attempt-usage.js.map +1 -0
- package/dist/core/orchestration/capability-gateway.d.ts +19 -1
- package/dist/core/orchestration/capability-gateway.d.ts.map +1 -1
- package/dist/core/orchestration/capability-gateway.js +128 -28
- package/dist/core/orchestration/capability-gateway.js.map +1 -1
- package/dist/core/orchestration/contracts.d.ts +35 -0
- package/dist/core/orchestration/contracts.d.ts.map +1 -1
- package/dist/core/orchestration/contracts.js +17 -0
- package/dist/core/orchestration/contracts.js.map +1 -1
- package/dist/core/orchestration/delegation-ledger.d.ts +17 -2
- package/dist/core/orchestration/delegation-ledger.d.ts.map +1 -1
- package/dist/core/orchestration/delegation-ledger.js +81 -3
- package/dist/core/orchestration/delegation-ledger.js.map +1 -1
- package/dist/core/orchestration/event-store.d.ts +1 -0
- package/dist/core/orchestration/event-store.d.ts.map +1 -1
- package/dist/core/orchestration/event-store.js +78 -38
- package/dist/core/orchestration/event-store.js.map +1 -1
- package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
- package/dist/core/orchestration/profile-registry.js +81 -41
- package/dist/core/orchestration/profile-registry.js.map +1 -1
- package/dist/core/orchestration/profile-store.d.ts.map +1 -1
- package/dist/core/orchestration/profile-store.js +18 -4
- package/dist/core/orchestration/profile-store.js.map +1 -1
- package/dist/core/orchestration/risk-budget.d.ts +2 -0
- package/dist/core/orchestration/risk-budget.d.ts.map +1 -1
- package/dist/core/orchestration/risk-budget.js +26 -0
- package/dist/core/orchestration/risk-budget.js.map +1 -1
- package/dist/core/orchestration/task-runtime.d.ts +13 -1
- package/dist/core/orchestration/task-runtime.d.ts.map +1 -1
- package/dist/core/orchestration/task-runtime.js +127 -16
- package/dist/core/orchestration/task-runtime.js.map +1 -1
- package/dist/core/orchestration/work-state-projection.d.ts.map +1 -1
- package/dist/core/orchestration/work-state-projection.js +1 -1
- package/dist/core/orchestration/work-state-projection.js.map +1 -1
- package/dist/core/orchestration/worker-execution-contract.d.ts +3 -1
- package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -1
- package/dist/core/orchestration/worker-execution-contract.js +75 -23
- package/dist/core/orchestration/worker-execution-contract.js.map +1 -1
- package/dist/core/orchestration/worker-result-adapter.d.ts +9 -3
- package/dist/core/orchestration/worker-result-adapter.d.ts.map +1 -1
- package/dist/core/orchestration/worker-result-adapter.js +167 -14
- package/dist/core/orchestration/worker-result-adapter.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +20 -3
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/profile-filter-controller.d.ts +8 -1
- package/dist/core/profile-filter-controller.d.ts.map +1 -1
- package/dist/core/profile-filter-controller.js +23 -5
- package/dist/core/profile-filter-controller.js.map +1 -1
- package/dist/core/prompt-templates.d.ts +1 -0
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +18 -29
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/reflection-controller.d.ts +2 -2
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +92 -54
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/request-auth.d.ts +7 -0
- package/dist/core/request-auth.d.ts.map +1 -0
- package/dist/core/request-auth.js +8 -0
- package/dist/core/request-auth.js.map +1 -0
- package/dist/core/research/evidence-bundle.d.ts +20 -0
- package/dist/core/research/evidence-bundle.d.ts.map +1 -1
- package/dist/core/research/evidence-bundle.js +173 -69
- package/dist/core/research/evidence-bundle.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +16 -6
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/risk-classifier.d.ts.map +1 -1
- package/dist/core/risk-classifier.js +8 -0
- package/dist/core/risk-classifier.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +22 -3
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +147 -80
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +7 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.d.ts +9 -0
- package/dist/core/secrets/credential-exposure-guard.d.ts.map +1 -0
- package/dist/core/secrets/credential-exposure-guard.js +241 -0
- package/dist/core/secrets/credential-exposure-guard.js.map +1 -0
- package/dist/core/secrets/secret-dotenv.d.ts +27 -0
- package/dist/core/secrets/secret-dotenv.d.ts.map +1 -0
- package/dist/core/secrets/secret-dotenv.js +183 -0
- package/dist/core/secrets/secret-dotenv.js.map +1 -0
- package/dist/core/secrets/secret-vault-format.d.ts +112 -0
- package/dist/core/secrets/secret-vault-format.d.ts.map +1 -0
- package/dist/core/secrets/secret-vault-format.js +397 -0
- package/dist/core/secrets/secret-vault-format.js.map +1 -0
- package/dist/core/secrets/secret-vault.d.ts +72 -0
- package/dist/core/secrets/secret-vault.d.ts.map +1 -0
- package/dist/core/secrets/secret-vault.js +671 -0
- package/dist/core/secrets/secret-vault.js.map +1 -0
- package/dist/core/session-analytics.d.ts +4 -23
- package/dist/core/session-analytics.d.ts.map +1 -1
- package/dist/core/session-analytics.js +39 -69
- package/dist/core/session-analytics.js.map +1 -1
- package/dist/core/session-artifact-bundle.d.ts +35 -0
- package/dist/core/session-artifact-bundle.d.ts.map +1 -0
- package/dist/core/session-artifact-bundle.js +61 -0
- package/dist/core/session-artifact-bundle.js.map +1 -0
- package/dist/core/session-role.d.ts +5 -0
- package/dist/core/session-role.d.ts.map +1 -1
- package/dist/core/session-role.js +14 -1
- package/dist/core/session-role.js.map +1 -1
- package/dist/core/session-tree-navigator.d.ts +4 -6
- package/dist/core/session-tree-navigator.d.ts.map +1 -1
- package/dist/core/session-tree-navigator.js +4 -1
- package/dist/core/session-tree-navigator.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -2
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tool-capability-policy.d.ts.map +1 -1
- package/dist/core/tool-capability-policy.js +1 -0
- package/dist/core/tool-capability-policy.js.map +1 -1
- package/dist/core/tool-gate-controller.d.ts.map +1 -1
- package/dist/core/tool-gate-controller.js +8 -2
- package/dist/core/tool-gate-controller.js.map +1 -1
- package/dist/core/tool-protocol-controller.d.ts +2 -4
- package/dist/core/tool-protocol-controller.d.ts.map +1 -1
- package/dist/core/tool-protocol-controller.js.map +1 -1
- package/dist/core/tool-recovery-stats.d.ts +21 -1
- package/dist/core/tool-recovery-stats.d.ts.map +1 -1
- package/dist/core/tool-recovery-stats.js.map +1 -1
- package/dist/core/tools/bash.d.ts +5 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +59 -5
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/delegate-status.d.ts +6 -1
- package/dist/core/tools/delegate-status.d.ts.map +1 -1
- package/dist/core/tools/delegate-status.js +106 -25
- package/dist/core/tools/delegate-status.js.map +1 -1
- package/dist/core/tools/delegate.d.ts +9 -1
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +329 -69
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/tools/git-filter.d.ts +1 -8
- package/dist/core/tools/git-filter.d.ts.map +1 -1
- package/dist/core/tools/git-filter.js +2 -63
- package/dist/core/tools/git-filter.js.map +1 -1
- package/dist/core/tools/goal.d.ts +5 -3
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +97 -19
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -0
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +1 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/orchestration-panel.d.ts +1 -4
- package/dist/core/tools/orchestration-panel.d.ts.map +1 -1
- package/dist/core/tools/orchestration-panel.js +0 -44
- package/dist/core/tools/orchestration-panel.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +11 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +36 -3
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/python.d.ts +2 -0
- package/dist/core/tools/python.d.ts.map +1 -1
- package/dist/core/tools/python.js +3 -1
- package/dist/core/tools/python.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/run-process.d.ts +1 -1
- package/dist/core/tools/run-process.d.ts.map +1 -1
- package/dist/core/tools/run-process.js +69 -9
- package/dist/core/tools/run-process.js.map +1 -1
- package/dist/core/tools/search-command-guard.d.ts +14 -0
- package/dist/core/tools/search-command-guard.d.ts.map +1 -0
- package/dist/core/tools/search-command-guard.js +333 -0
- package/dist/core/tools/search-command-guard.js.map +1 -0
- package/dist/core/tools/secret-store.d.ts +38 -0
- package/dist/core/tools/secret-store.d.ts.map +1 -0
- package/dist/core/tools/secret-store.js +412 -0
- package/dist/core/tools/secret-store.js.map +1 -0
- package/dist/core/tools/shell-command-parser.d.ts +16 -0
- package/dist/core/tools/shell-command-parser.d.ts.map +1 -0
- package/dist/core/tools/shell-command-parser.js +113 -0
- package/dist/core/tools/shell-command-parser.js.map +1 -0
- package/dist/core/tools/shell-contract-router.d.ts.map +1 -1
- package/dist/core/tools/shell-contract-router.js +12 -5
- package/dist/core/tools/shell-contract-router.js.map +1 -1
- package/dist/core/tools/task-steps.d.ts.map +1 -1
- package/dist/core/tools/task-steps.js +4 -7
- package/dist/core/tools/task-steps.js.map +1 -1
- package/dist/core/util/atomic-file.d.ts +6 -2
- package/dist/core/util/atomic-file.d.ts.map +1 -1
- package/dist/core/util/atomic-file.js +4 -4
- package/dist/core/util/atomic-file.js.map +1 -1
- package/dist/core/util/bounded-file.d.ts +15 -0
- package/dist/core/util/bounded-file.d.ts.map +1 -0
- package/dist/core/util/bounded-file.js +120 -0
- package/dist/core/util/bounded-file.js.map +1 -0
- package/dist/core/util/bounded-jsonl.d.ts.map +1 -1
- package/dist/core/util/bounded-jsonl.js +119 -9
- package/dist/core/util/bounded-jsonl.js.map +1 -1
- package/dist/core/util/bounded-value.d.ts +3 -0
- package/dist/core/util/bounded-value.d.ts.map +1 -0
- package/dist/core/util/bounded-value.js +12 -0
- package/dist/core/util/bounded-value.js.map +1 -0
- package/dist/core/util/value-guards.d.ts +2 -0
- package/dist/core/util/value-guards.d.ts.map +1 -1
- package/dist/core/util/value-guards.js +5 -0
- package/dist/core/util/value-guards.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +25 -11
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.d.ts +4 -0
- package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.js +60 -1
- package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
- package/dist/modes/interactive/components/activity-lane.d.ts +55 -0
- package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -0
- package/dist/modes/interactive/components/activity-lane.js +304 -0
- package/dist/modes/interactive/components/activity-lane.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +19 -10
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/expandable-text.d.ts +12 -0
- package/dist/modes/interactive/components/expandable-text.d.ts.map +1 -0
- package/dist/modes/interactive/components/expandable-text.js +17 -0
- package/dist/modes/interactive/components/expandable-text.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +15 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +30 -21
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +6 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +23 -14
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +27 -44
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +4 -4
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +19 -11
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +53 -20
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-group.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-group.js +3 -0
- package/dist/modes/interactive/components/tool-group.js.map +1 -1
- package/dist/modes/interactive/components/usage-action-selector.d.ts +16 -0
- package/dist/modes/interactive/components/usage-action-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/usage-action-selector.js +46 -0
- package/dist/modes/interactive/components/usage-action-selector.js.map +1 -0
- package/dist/modes/interactive/extension-ui-host.d.ts.map +1 -1
- package/dist/modes/interactive/extension-ui-host.js +1 -0
- package/dist/modes/interactive/extension-ui-host.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts +15 -0
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +27 -19
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/history-reload-math.d.ts +6 -2
- package/dist/modes/interactive/history-reload-math.d.ts.map +1 -1
- package/dist/modes/interactive/history-reload-math.js +10 -5
- package/dist/modes/interactive/history-reload-math.js.map +1 -1
- package/dist/modes/interactive/interactive-event-controller.d.ts +74 -0
- package/dist/modes/interactive/interactive-event-controller.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-event-controller.js +328 -0
- package/dist/modes/interactive/interactive-event-controller.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +20 -25
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +196 -608
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/loaded-resources-view.d.ts +20 -0
- package/dist/modes/interactive/loaded-resources-view.d.ts.map +1 -0
- package/dist/modes/interactive/loaded-resources-view.js +147 -0
- package/dist/modes/interactive/loaded-resources-view.js.map +1 -0
- package/dist/modes/interactive/resource-display.d.ts.map +1 -1
- package/dist/modes/interactive/resource-display.js +8 -2
- package/dist/modes/interactive/resource-display.js.map +1 -1
- package/dist/modes/interactive/resource-shell-commands.d.ts +1 -5
- package/dist/modes/interactive/resource-shell-commands.d.ts.map +1 -1
- package/dist/modes/interactive/resource-shell-commands.js +0 -5
- package/dist/modes/interactive/resource-shell-commands.js.map +1 -1
- package/dist/modes/interactive/session-flow-commands.d.ts +10 -6
- package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-flow-commands.js +123 -70
- package/dist/modes/interactive/session-flow-commands.js.map +1 -1
- package/dist/modes/interactive/usage-commands.d.ts +34 -0
- package/dist/modes/interactive/usage-commands.d.ts.map +1 -0
- package/dist/modes/interactive/usage-commands.js +225 -0
- package/dist/modes/interactive/usage-commands.js.map +1 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +5 -3
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +3 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/UI_POLISH_ORCHESTRATION.md +25 -31
- package/docs/UI_QUALITY_ORCHESTRATION.md +22 -24
- package/docs/providers.md +9 -1
- package/docs/tool-repair.md +3 -0
- package/docs/ui-reference/README.md +6 -6
- package/docs/ui-reference/orchestration-after.txt +14 -7
- package/docs/ui-reference/orchestration-before.txt +12 -6
- package/docs/ui-reference/orchestration-reference.txt +15 -5
- package/docs/usage.md +9 -1
- package/docs/windows.md +4 -2
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +13 -13
- package/package.json +4 -4
|
@@ -1,24 +1,167 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { closeSync, fstatSync, lstatSync, openSync, readSync } from "node:fs";
|
|
2
3
|
import path from "node:path";
|
|
3
4
|
import { pathToFileURL } from "node:url";
|
|
5
|
+
import { normalizeWorkerClaimForHost } from "../delegation/worker-claim.js";
|
|
6
|
+
import { sameFileVersion } from "../util/bounded-file.js";
|
|
4
7
|
import { ORCHESTRATION_SCHEMA_VERSION, } from "./contracts.js";
|
|
5
|
-
|
|
8
|
+
/** Matches the default text-read ceiling while keeping synchronous result capture bounded. */
|
|
9
|
+
export const MAX_WORKER_ARTIFACT_HASH_BYTES = 16 * 1024 * 1024;
|
|
10
|
+
/** A terminal result may report many files; bound their cumulative synchronous reads too. */
|
|
11
|
+
export const MAX_WORKER_ARTIFACT_HASH_TOTAL_BYTES = 32 * 1024 * 1024;
|
|
12
|
+
const WORKER_ARTIFACT_HASH_CHUNK_BYTES = 64 * 1024;
|
|
13
|
+
function metadataForFileState(fileState, digestStatus) {
|
|
14
|
+
return {
|
|
15
|
+
hostObservation: "file_state_captured",
|
|
16
|
+
fileState,
|
|
17
|
+
digestStatus,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function artifactForChangedFile(cwd, changedPath, index, createdAt, remainingDigestBytes) {
|
|
6
21
|
const absolutePath = path.isAbsolute(changedPath) ? path.resolve(changedPath) : path.resolve(cwd, changedPath);
|
|
7
|
-
|
|
22
|
+
const artifactId = `changed-file-${index + 1}`;
|
|
23
|
+
const base = {
|
|
24
|
+
artifactId,
|
|
25
|
+
kind: "file",
|
|
26
|
+
uri: pathToFileURL(absolutePath).href,
|
|
27
|
+
createdAt,
|
|
28
|
+
};
|
|
29
|
+
let initialStats;
|
|
30
|
+
try {
|
|
31
|
+
initialStats = lstatSync(absolutePath);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (isMissingFileError(error)) {
|
|
35
|
+
return {
|
|
36
|
+
artifact: { ...base, metadata: metadataForFileState("missing", "not_available") },
|
|
37
|
+
fileState: "missing",
|
|
38
|
+
digestBytesCaptured: 0,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
artifact: { ...base, metadata: metadataForFileState("read_error", "not_available") },
|
|
43
|
+
fileState: "read_error",
|
|
44
|
+
digestBytesCaptured: 0,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (!initialStats.isFile()) {
|
|
48
|
+
return {
|
|
49
|
+
artifact: {
|
|
50
|
+
...base,
|
|
51
|
+
sizeBytes: initialStats.size,
|
|
52
|
+
metadata: metadataForFileState("non_regular", "not_applicable"),
|
|
53
|
+
},
|
|
54
|
+
fileState: "non_regular",
|
|
55
|
+
digestBytesCaptured: 0,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
let fileDescriptor;
|
|
8
59
|
try {
|
|
9
|
-
|
|
10
|
-
|
|
60
|
+
fileDescriptor = openSync(absolutePath, "r");
|
|
61
|
+
const stats = fstatSync(fileDescriptor);
|
|
62
|
+
if (!stats.isFile()) {
|
|
63
|
+
return {
|
|
64
|
+
artifact: {
|
|
65
|
+
...base,
|
|
66
|
+
sizeBytes: stats.size,
|
|
67
|
+
metadata: metadataForFileState("non_regular", "not_applicable"),
|
|
68
|
+
},
|
|
69
|
+
fileState: "non_regular",
|
|
70
|
+
digestBytesCaptured: 0,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (!sameFileVersion(initialStats, stats))
|
|
74
|
+
throw new Error("File changed before hashing");
|
|
75
|
+
if (stats.size > MAX_WORKER_ARTIFACT_HASH_BYTES) {
|
|
76
|
+
return {
|
|
77
|
+
artifact: {
|
|
78
|
+
...base,
|
|
79
|
+
sizeBytes: stats.size,
|
|
80
|
+
metadata: {
|
|
81
|
+
...metadataForFileState("regular", "omitted_size_limit"),
|
|
82
|
+
digestMaxBytes: MAX_WORKER_ARTIFACT_HASH_BYTES,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
fileState: "regular",
|
|
86
|
+
digestBytesCaptured: 0,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (stats.size > remainingDigestBytes) {
|
|
90
|
+
return {
|
|
91
|
+
artifact: {
|
|
92
|
+
...base,
|
|
93
|
+
sizeBytes: stats.size,
|
|
94
|
+
metadata: {
|
|
95
|
+
...metadataForFileState("regular", "omitted_aggregate_limit"),
|
|
96
|
+
digestTotalMaxBytes: MAX_WORKER_ARTIFACT_HASH_TOTAL_BYTES,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
fileState: "regular",
|
|
100
|
+
digestBytesCaptured: 0,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
const hash = createHash("sha256");
|
|
104
|
+
const buffer = Buffer.allocUnsafe(Math.min(WORKER_ARTIFACT_HASH_CHUNK_BYTES, Math.max(stats.size, 1)));
|
|
105
|
+
let bytesHashed = 0;
|
|
106
|
+
while (bytesHashed < stats.size) {
|
|
107
|
+
const bytesRead = readSync(fileDescriptor, buffer, 0, Math.min(buffer.length, stats.size - bytesHashed), bytesHashed);
|
|
108
|
+
if (bytesRead === 0)
|
|
109
|
+
throw new Error("File changed while hashing");
|
|
110
|
+
hash.update(buffer.subarray(0, bytesRead));
|
|
111
|
+
bytesHashed += bytesRead;
|
|
112
|
+
}
|
|
113
|
+
if (!sameFileVersion(stats, fstatSync(fileDescriptor)))
|
|
114
|
+
throw new Error("File changed while hashing");
|
|
115
|
+
return {
|
|
116
|
+
artifact: {
|
|
117
|
+
...base,
|
|
118
|
+
digest: hash.digest("hex"),
|
|
119
|
+
sizeBytes: stats.size,
|
|
120
|
+
metadata: {
|
|
121
|
+
...metadataForFileState("regular", "computed"),
|
|
122
|
+
digestAlgorithm: "sha256",
|
|
123
|
+
digestBytes: bytesHashed,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
fileState: "regular",
|
|
127
|
+
digestBytesCaptured: bytesHashed,
|
|
128
|
+
};
|
|
11
129
|
}
|
|
12
130
|
catch {
|
|
13
|
-
|
|
131
|
+
return {
|
|
132
|
+
artifact: {
|
|
133
|
+
...base,
|
|
134
|
+
sizeBytes: initialStats.size,
|
|
135
|
+
metadata: metadataForFileState("read_error", "not_available"),
|
|
136
|
+
},
|
|
137
|
+
fileState: "read_error",
|
|
138
|
+
digestBytesCaptured: 0,
|
|
139
|
+
};
|
|
14
140
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
141
|
+
finally {
|
|
142
|
+
if (fileDescriptor !== undefined) {
|
|
143
|
+
try {
|
|
144
|
+
closeSync(fileDescriptor);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// The captured state remains valid even if the descriptor close reports an error.
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function isMissingFileError(error) {
|
|
153
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
|
|
154
|
+
}
|
|
155
|
+
function hostFileStateEvidence(observations, createdAt) {
|
|
156
|
+
return observations.map(({ artifact, fileState }, index) => ({
|
|
157
|
+
evidenceId: `host-file-state-${index + 1}`,
|
|
158
|
+
kind: "observation",
|
|
159
|
+
summary: "Host captured file state.",
|
|
160
|
+
artifactIds: [artifact.artifactId],
|
|
161
|
+
trusted: true,
|
|
20
162
|
createdAt,
|
|
21
|
-
|
|
163
|
+
metadata: { observation: "file_state_captured", fileState },
|
|
164
|
+
}));
|
|
22
165
|
}
|
|
23
166
|
function evidenceForClaim(claim, createdAt) {
|
|
24
167
|
const findings = claim.evidence?.findings ?? [];
|
|
@@ -65,13 +208,22 @@ function verificationEvidence(claim, accepted, criterionIds, createdAt) {
|
|
|
65
208
|
/** Sole host-owned conversion from an untrusted claim to a fenced durable result. */
|
|
66
209
|
export function createWorkerResultContract(args) {
|
|
67
210
|
const createdAt = args.createdAt ?? new Date().toISOString();
|
|
68
|
-
|
|
211
|
+
// Result construction is reachable from recovery/error paths as well as the native runner.
|
|
212
|
+
// Normalize first so no claim can expand file iteration, hashing, evidence, or durable results.
|
|
213
|
+
const claim = normalizeWorkerClaimForHost(args.claim);
|
|
69
214
|
const status = claim.status === "completed"
|
|
70
215
|
? args.accepted && !args.verificationRequired
|
|
71
216
|
? "completed"
|
|
72
217
|
: "partial"
|
|
73
218
|
: claim.status;
|
|
74
|
-
const
|
|
219
|
+
const changedFileObservations = [];
|
|
220
|
+
let remainingDigestBytes = MAX_WORKER_ARTIFACT_HASH_TOTAL_BYTES;
|
|
221
|
+
for (const [index, changedPath] of claim.changedFiles.entries()) {
|
|
222
|
+
const observation = artifactForChangedFile(args.cwd, changedPath, index, createdAt, remainingDigestBytes);
|
|
223
|
+
changedFileObservations.push(observation);
|
|
224
|
+
remainingDigestBytes -= observation.digestBytesCaptured;
|
|
225
|
+
}
|
|
226
|
+
const artifacts = changedFileObservations.map(({ artifact }) => artifact);
|
|
75
227
|
const blockers = claim.blockers ?? [];
|
|
76
228
|
return {
|
|
77
229
|
schemaVersion: ORCHESTRATION_SCHEMA_VERSION,
|
|
@@ -87,6 +239,7 @@ export function createWorkerResultContract(args) {
|
|
|
87
239
|
artifacts,
|
|
88
240
|
evidence: [
|
|
89
241
|
...evidenceForClaim(claim, createdAt),
|
|
242
|
+
...hostFileStateEvidence(changedFileObservations, createdAt),
|
|
90
243
|
...verificationEvidence(claim, args.accepted, args.verificationCriterionIds ?? [], createdAt),
|
|
91
244
|
],
|
|
92
245
|
errors: blockers.map((message) => ({ code: "worker_blocker", message, retryable: false })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-result-adapter.js","sourceRoot":"","sources":["../../../src/core/orchestration/worker-result-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, statSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { WorkerClaim } from \"../autonomy/contracts.ts\";\nimport {\n\ttype ArtifactContract,\n\ttype EvidenceContract,\n\tORCHESTRATION_SCHEMA_VERSION,\n\ttype WorkerResultContract,\n} from \"./contracts.ts\";\nimport type { StartedDelegationAttempt } from \"./delegation-ledger.ts\";\n\nfunction artifactForChangedFile(cwd: string, changedPath: string, index: number, createdAt: string): ArtifactContract {\n\tconst absolutePath = path.isAbsolute(changedPath) ? path.resolve(changedPath) : path.resolve(cwd, changedPath);\n\tlet sizeBytes: number | undefined;\n\ttry {\n\t\tif (existsSync(absolutePath)) sizeBytes = statSync(absolutePath).size;\n\t} catch {\n\t\t// The path remains useful evidence even if it disappeared before metadata collection.\n\t}\n\treturn {\n\t\tartifactId: `changed-file-${index + 1}`,\n\t\tkind: \"file\",\n\t\turi: pathToFileURL(absolutePath).href,\n\t\t...(sizeBytes !== undefined ? { sizeBytes } : {}),\n\t\tcreatedAt,\n\t};\n}\n\nfunction evidenceForClaim(claim: WorkerClaim, createdAt: string): EvidenceContract[] {\n\tconst findings = claim.evidence?.findings ?? [];\n\treturn findings.map((finding, index) => ({\n\t\tevidenceId: `worker-finding-${index + 1}`,\n\t\tkind: \"observation\",\n\t\tsummary: finding.summary,\n\t\tartifactIds: [],\n\t\ttrusted: false,\n\t\tcreatedAt,\n\t\t...(finding.confidence !== undefined ? { metadata: { confidence: finding.confidence } } : {}),\n\t}));\n}\n\nfunction verificationEvidence(\n\tclaim: WorkerClaim,\n\taccepted: boolean,\n\tcriterionIds: readonly string[],\n\tcreatedAt: string,\n): EvidenceContract[] {\n\tif (!claim.verification) return [];\n\tconst trustedReview = accepted;\n\treturn [\n\t\t{\n\t\t\tevidenceId: \"independent-review\",\n\t\t\tkind: \"review\",\n\t\t\tsummary: claim.summary,\n\t\t\tartifactIds: [],\n\t\t\ttrusted: trustedReview,\n\t\t\tcreatedAt,\n\t\t\tmetadata: {\n\t\t\t\tsubjectTaskId: claim.verification.subjectTaskId,\n\t\t\t\tverdict: claim.verification.verdict,\n\t\t\t\treasonCodes: [...claim.verification.reasonCodes],\n\t\t\t},\n\t\t},\n\t\t...criterionIds.map(\n\t\t\t(criterionId, index): EvidenceContract => ({\n\t\t\t\tevidenceId: `independent-review-criterion-${index + 1}`,\n\t\t\t\tcriterionId,\n\t\t\t\tkind: \"review\",\n\t\t\t\tsummary: claim.summary,\n\t\t\t\tartifactIds: [],\n\t\t\t\ttrusted: trustedReview && claim.verification?.verdict === \"accepted\",\n\t\t\t\tcreatedAt,\n\t\t\t\tmetadata: { subjectTaskId: claim.verification?.subjectTaskId ?? \"\" },\n\t\t\t}),\n\t\t),\n\t];\n}\n\n/** Sole host-owned conversion from an untrusted claim to a fenced durable result. */\nexport function createWorkerResultContract(args: {\n\thandle: StartedDelegationAttempt;\n\tclaim: WorkerClaim;\n\taccepted: boolean;\n\tcostUsd?: number;\n\tcwd: string;\n\tinputTokens?: number;\n\toutputTokens?: number;\n\ttotalTokens?: number;\n\twallClockMs: number;\n\ttoolCalls: number;\n\tverificationRequired?: boolean;\n\tverificationCriterionIds?: readonly string[];\n\treasonCode?: string;\n\tcreatedAt?: string;\n}): WorkerResultContract {\n\tconst createdAt = args.createdAt ?? new Date().toISOString();\n\tconst claim = args.claim;\n\tconst status: WorkerResultContract[\"status\"] =\n\t\tclaim.status === \"completed\"\n\t\t\t? args.accepted && !args.verificationRequired\n\t\t\t\t? \"completed\"\n\t\t\t\t: \"partial\"\n\t\t\t: claim.status;\n\tconst artifacts = claim.changedFiles.map((changedPath, index) =>\n\t\tartifactForChangedFile(args.cwd, changedPath, index, createdAt),\n\t);\n\tconst blockers = claim.blockers ?? [];\n\treturn {\n\t\tschemaVersion: ORCHESTRATION_SCHEMA_VERSION,\n\t\tresultId: `result-${args.handle.attemptId}-${args.handle.fencingToken}`,\n\t\tobjectiveId: args.handle.objectiveId,\n\t\ttaskId: args.handle.taskId,\n\t\tattemptId: args.handle.attemptId,\n\t\tleaseId: args.handle.leaseId,\n\t\tfencingToken: args.handle.fencingToken,\n\t\tstatus,\n\t\treasonCode: args.reasonCode ?? `worker_${claim.status}`,\n\t\tsummary: claim.summary,\n\t\tartifacts,\n\t\tevidence: [\n\t\t\t...evidenceForClaim(claim, createdAt),\n\t\t\t...verificationEvidence(claim, args.accepted, args.verificationCriterionIds ?? [], createdAt),\n\t\t],\n\t\terrors: blockers.map((message) => ({ code: \"worker_blocker\", message, retryable: false })),\n\t\t...(args.verificationRequired\n\t\t\t? { nextAction: \"independent_verification_required\" }\n\t\t\t: !args.accepted || claim.parentReviewRequired\n\t\t\t\t? { nextAction: \"parent_review\" }\n\t\t\t\t: {}),\n\t\tusage: {\n\t\t\t...(args.inputTokens !== undefined ? { inputTokens: args.inputTokens } : {}),\n\t\t\t...(args.outputTokens !== undefined ? { outputTokens: args.outputTokens } : {}),\n\t\t\t...(args.totalTokens !== undefined ? { totalTokens: args.totalTokens } : {}),\n\t\t\t...(args.costUsd !== undefined ? { costUsd: args.costUsd } : {}),\n\t\t\twallClockMs: args.wallClockMs,\n\t\t\ttoolCalls: args.toolCalls,\n\t\t},\n\t\tcreatedAt,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"worker-result-adapter.js","sourceRoot":"","sources":["../../../src/core/orchestration/worker-result-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { closeSync, fstatSync, lstatSync, openSync, readSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { WorkerClaim } from \"../autonomy/contracts.ts\";\nimport { normalizeWorkerClaimForHost } from \"../delegation/worker-claim.ts\";\nimport { sameFileVersion } from \"../util/bounded-file.ts\";\nimport {\n\ttype ArtifactContract,\n\ttype EvidenceContract,\n\tORCHESTRATION_SCHEMA_VERSION,\n\ttype WorkerResultContract,\n} from \"./contracts.ts\";\nimport type { StartedDelegationAttempt } from \"./delegation-ledger.ts\";\n\n/** Matches the default text-read ceiling while keeping synchronous result capture bounded. */\nexport const MAX_WORKER_ARTIFACT_HASH_BYTES = 16 * 1024 * 1024;\n/** A terminal result may report many files; bound their cumulative synchronous reads too. */\nexport const MAX_WORKER_ARTIFACT_HASH_TOTAL_BYTES = 32 * 1024 * 1024;\nconst WORKER_ARTIFACT_HASH_CHUNK_BYTES = 64 * 1024;\n\ntype HostFileState = \"regular\" | \"missing\" | \"non_regular\" | \"read_error\";\n\ninterface ChangedFileArtifactObservation {\n\tartifact: ArtifactContract;\n\tfileState: HostFileState;\n\tdigestBytesCaptured: number;\n}\n\nfunction metadataForFileState(fileState: HostFileState, digestStatus: string): ArtifactContract[\"metadata\"] {\n\treturn {\n\t\thostObservation: \"file_state_captured\",\n\t\tfileState,\n\t\tdigestStatus,\n\t};\n}\n\nfunction artifactForChangedFile(\n\tcwd: string,\n\tchangedPath: string,\n\tindex: number,\n\tcreatedAt: string,\n\tremainingDigestBytes: number,\n): ChangedFileArtifactObservation {\n\tconst absolutePath = path.isAbsolute(changedPath) ? path.resolve(changedPath) : path.resolve(cwd, changedPath);\n\tconst artifactId = `changed-file-${index + 1}`;\n\tconst base = {\n\t\tartifactId,\n\t\tkind: \"file\" as const,\n\t\turi: pathToFileURL(absolutePath).href,\n\t\tcreatedAt,\n\t};\n\tlet initialStats: ReturnType<typeof lstatSync>;\n\ttry {\n\t\tinitialStats = lstatSync(absolutePath);\n\t} catch (error: unknown) {\n\t\tif (isMissingFileError(error)) {\n\t\t\treturn {\n\t\t\t\tartifact: { ...base, metadata: metadataForFileState(\"missing\", \"not_available\") },\n\t\t\t\tfileState: \"missing\",\n\t\t\t\tdigestBytesCaptured: 0,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tartifact: { ...base, metadata: metadataForFileState(\"read_error\", \"not_available\") },\n\t\t\tfileState: \"read_error\",\n\t\t\tdigestBytesCaptured: 0,\n\t\t};\n\t}\n\n\tif (!initialStats.isFile()) {\n\t\treturn {\n\t\t\tartifact: {\n\t\t\t\t...base,\n\t\t\t\tsizeBytes: initialStats.size,\n\t\t\t\tmetadata: metadataForFileState(\"non_regular\", \"not_applicable\"),\n\t\t\t},\n\t\t\tfileState: \"non_regular\",\n\t\t\tdigestBytesCaptured: 0,\n\t\t};\n\t}\n\n\tlet fileDescriptor: number | undefined;\n\ttry {\n\t\tfileDescriptor = openSync(absolutePath, \"r\");\n\t\tconst stats = fstatSync(fileDescriptor);\n\t\tif (!stats.isFile()) {\n\t\t\treturn {\n\t\t\t\tartifact: {\n\t\t\t\t\t...base,\n\t\t\t\t\tsizeBytes: stats.size,\n\t\t\t\t\tmetadata: metadataForFileState(\"non_regular\", \"not_applicable\"),\n\t\t\t\t},\n\t\t\t\tfileState: \"non_regular\",\n\t\t\t\tdigestBytesCaptured: 0,\n\t\t\t};\n\t\t}\n\t\tif (!sameFileVersion(initialStats, stats)) throw new Error(\"File changed before hashing\");\n\t\tif (stats.size > MAX_WORKER_ARTIFACT_HASH_BYTES) {\n\t\t\treturn {\n\t\t\t\tartifact: {\n\t\t\t\t\t...base,\n\t\t\t\t\tsizeBytes: stats.size,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t...metadataForFileState(\"regular\", \"omitted_size_limit\"),\n\t\t\t\t\t\tdigestMaxBytes: MAX_WORKER_ARTIFACT_HASH_BYTES,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfileState: \"regular\",\n\t\t\t\tdigestBytesCaptured: 0,\n\t\t\t};\n\t\t}\n\t\tif (stats.size > remainingDigestBytes) {\n\t\t\treturn {\n\t\t\t\tartifact: {\n\t\t\t\t\t...base,\n\t\t\t\t\tsizeBytes: stats.size,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t...metadataForFileState(\"regular\", \"omitted_aggregate_limit\"),\n\t\t\t\t\t\tdigestTotalMaxBytes: MAX_WORKER_ARTIFACT_HASH_TOTAL_BYTES,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfileState: \"regular\",\n\t\t\t\tdigestBytesCaptured: 0,\n\t\t\t};\n\t\t}\n\n\t\tconst hash = createHash(\"sha256\");\n\t\tconst buffer = Buffer.allocUnsafe(Math.min(WORKER_ARTIFACT_HASH_CHUNK_BYTES, Math.max(stats.size, 1)));\n\t\tlet bytesHashed = 0;\n\t\twhile (bytesHashed < stats.size) {\n\t\t\tconst bytesRead = readSync(\n\t\t\t\tfileDescriptor,\n\t\t\t\tbuffer,\n\t\t\t\t0,\n\t\t\t\tMath.min(buffer.length, stats.size - bytesHashed),\n\t\t\t\tbytesHashed,\n\t\t\t);\n\t\t\tif (bytesRead === 0) throw new Error(\"File changed while hashing\");\n\t\t\thash.update(buffer.subarray(0, bytesRead));\n\t\t\tbytesHashed += bytesRead;\n\t\t}\n\t\tif (!sameFileVersion(stats, fstatSync(fileDescriptor))) throw new Error(\"File changed while hashing\");\n\t\treturn {\n\t\t\tartifact: {\n\t\t\t\t...base,\n\t\t\t\tdigest: hash.digest(\"hex\"),\n\t\t\t\tsizeBytes: stats.size,\n\t\t\t\tmetadata: {\n\t\t\t\t\t...metadataForFileState(\"regular\", \"computed\"),\n\t\t\t\t\tdigestAlgorithm: \"sha256\",\n\t\t\t\t\tdigestBytes: bytesHashed,\n\t\t\t\t},\n\t\t\t},\n\t\t\tfileState: \"regular\",\n\t\t\tdigestBytesCaptured: bytesHashed,\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tartifact: {\n\t\t\t\t...base,\n\t\t\t\tsizeBytes: initialStats.size,\n\t\t\t\tmetadata: metadataForFileState(\"read_error\", \"not_available\"),\n\t\t\t},\n\t\t\tfileState: \"read_error\",\n\t\t\tdigestBytesCaptured: 0,\n\t\t};\n\t} finally {\n\t\tif (fileDescriptor !== undefined) {\n\t\t\ttry {\n\t\t\t\tcloseSync(fileDescriptor);\n\t\t\t} catch {\n\t\t\t\t// The captured state remains valid even if the descriptor close reports an error.\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n\treturn typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\";\n}\n\nfunction hostFileStateEvidence(\n\tobservations: readonly ChangedFileArtifactObservation[],\n\tcreatedAt: string,\n): EvidenceContract[] {\n\treturn observations.map(({ artifact, fileState }, index) => ({\n\t\tevidenceId: `host-file-state-${index + 1}`,\n\t\tkind: \"observation\",\n\t\tsummary: \"Host captured file state.\",\n\t\tartifactIds: [artifact.artifactId],\n\t\ttrusted: true,\n\t\tcreatedAt,\n\t\tmetadata: { observation: \"file_state_captured\", fileState },\n\t}));\n}\n\nfunction evidenceForClaim(claim: WorkerClaim, createdAt: string): EvidenceContract[] {\n\tconst findings = claim.evidence?.findings ?? [];\n\treturn findings.map((finding, index) => ({\n\t\tevidenceId: `worker-finding-${index + 1}`,\n\t\tkind: \"observation\",\n\t\tsummary: finding.summary,\n\t\tartifactIds: [],\n\t\ttrusted: false,\n\t\tcreatedAt,\n\t\t...(finding.confidence !== undefined ? { metadata: { confidence: finding.confidence } } : {}),\n\t}));\n}\n\nfunction verificationEvidence(\n\tclaim: WorkerClaim,\n\taccepted: boolean,\n\tcriterionIds: readonly string[],\n\tcreatedAt: string,\n): EvidenceContract[] {\n\tif (!claim.verification) return [];\n\tconst trustedReview = accepted;\n\treturn [\n\t\t{\n\t\t\tevidenceId: \"independent-review\",\n\t\t\tkind: \"review\",\n\t\t\tsummary: claim.summary,\n\t\t\tartifactIds: [],\n\t\t\ttrusted: trustedReview,\n\t\t\tcreatedAt,\n\t\t\tmetadata: {\n\t\t\t\tsubjectTaskId: claim.verification.subjectTaskId,\n\t\t\t\tverdict: claim.verification.verdict,\n\t\t\t\treasonCodes: [...claim.verification.reasonCodes],\n\t\t\t},\n\t\t},\n\t\t...criterionIds.map(\n\t\t\t(criterionId, index): EvidenceContract => ({\n\t\t\t\tevidenceId: `independent-review-criterion-${index + 1}`,\n\t\t\t\tcriterionId,\n\t\t\t\tkind: \"review\",\n\t\t\t\tsummary: claim.summary,\n\t\t\t\tartifactIds: [],\n\t\t\t\ttrusted: trustedReview && claim.verification?.verdict === \"accepted\",\n\t\t\t\tcreatedAt,\n\t\t\t\tmetadata: { subjectTaskId: claim.verification?.subjectTaskId ?? \"\" },\n\t\t\t}),\n\t\t),\n\t];\n}\n\n/** Inputs shared by every worker terminal path before the durable result is committed. */\nexport interface CreateWorkerResultContractInput {\n\thandle: StartedDelegationAttempt;\n\tclaim: WorkerClaim;\n\taccepted: boolean;\n\tcostUsd?: number;\n\tcwd: string;\n\tinputTokens?: number;\n\toutputTokens?: number;\n\ttotalTokens?: number;\n\twallClockMs: number;\n\ttoolCalls: number;\n\tverificationRequired?: boolean;\n\tverificationCriterionIds?: readonly string[];\n\treasonCode?: string;\n\tcreatedAt?: string;\n}\n\n/** Sole host-owned conversion from an untrusted claim to a fenced durable result. */\nexport function createWorkerResultContract(args: CreateWorkerResultContractInput): WorkerResultContract {\n\tconst createdAt = args.createdAt ?? new Date().toISOString();\n\t// Result construction is reachable from recovery/error paths as well as the native runner.\n\t// Normalize first so no claim can expand file iteration, hashing, evidence, or durable results.\n\tconst claim = normalizeWorkerClaimForHost(args.claim);\n\tconst status: WorkerResultContract[\"status\"] =\n\t\tclaim.status === \"completed\"\n\t\t\t? args.accepted && !args.verificationRequired\n\t\t\t\t? \"completed\"\n\t\t\t\t: \"partial\"\n\t\t\t: claim.status;\n\tconst changedFileObservations: ChangedFileArtifactObservation[] = [];\n\tlet remainingDigestBytes = MAX_WORKER_ARTIFACT_HASH_TOTAL_BYTES;\n\tfor (const [index, changedPath] of claim.changedFiles.entries()) {\n\t\tconst observation = artifactForChangedFile(args.cwd, changedPath, index, createdAt, remainingDigestBytes);\n\t\tchangedFileObservations.push(observation);\n\t\tremainingDigestBytes -= observation.digestBytesCaptured;\n\t}\n\tconst artifacts = changedFileObservations.map(({ artifact }) => artifact);\n\tconst blockers = claim.blockers ?? [];\n\treturn {\n\t\tschemaVersion: ORCHESTRATION_SCHEMA_VERSION,\n\t\tresultId: `result-${args.handle.attemptId}-${args.handle.fencingToken}`,\n\t\tobjectiveId: args.handle.objectiveId,\n\t\ttaskId: args.handle.taskId,\n\t\tattemptId: args.handle.attemptId,\n\t\tleaseId: args.handle.leaseId,\n\t\tfencingToken: args.handle.fencingToken,\n\t\tstatus,\n\t\treasonCode: args.reasonCode ?? `worker_${claim.status}`,\n\t\tsummary: claim.summary,\n\t\tartifacts,\n\t\tevidence: [\n\t\t\t...evidenceForClaim(claim, createdAt),\n\t\t\t...hostFileStateEvidence(changedFileObservations, createdAt),\n\t\t\t...verificationEvidence(claim, args.accepted, args.verificationCriterionIds ?? [], createdAt),\n\t\t],\n\t\terrors: blockers.map((message) => ({ code: \"worker_blocker\", message, retryable: false })),\n\t\t...(args.verificationRequired\n\t\t\t? { nextAction: \"independent_verification_required\" }\n\t\t\t: !args.accepted || claim.parentReviewRequired\n\t\t\t\t? { nextAction: \"parent_review\" }\n\t\t\t\t: {}),\n\t\tusage: {\n\t\t\t...(args.inputTokens !== undefined ? { inputTokens: args.inputTokens } : {}),\n\t\t\t...(args.outputTokens !== undefined ? { outputTokens: args.outputTokens } : {}),\n\t\t\t...(args.totalTokens !== undefined ? { totalTokens: args.totalTokens } : {}),\n\t\t\t...(args.costUsd !== undefined ? { costUsd: args.costUsd } : {}),\n\t\t\twallClockMs: args.wallClockMs,\n\t\t\ttoolCalls: args.toolCalls,\n\t\t},\n\t\tcreatedAt,\n\t};\n}\n"]}
|