pulseed 0.6.3 → 0.6.5
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/dist/adapters/datasources/artifact-metric-datasource.d.ts +11 -1
- package/dist/adapters/datasources/artifact-metric-datasource.d.ts.map +1 -1
- package/dist/adapters/datasources/artifact-metric-datasource.js +256 -9
- package/dist/adapters/datasources/artifact-metric-datasource.js.map +1 -1
- package/dist/base/config/global-config.d.ts +7 -4
- package/dist/base/config/global-config.d.ts.map +1 -1
- package/dist/base/config/global-config.js +3 -1
- package/dist/base/config/global-config.js.map +1 -1
- package/dist/base/protocol/exact-protocol.d.ts +47 -0
- package/dist/base/protocol/exact-protocol.d.ts.map +1 -0
- package/dist/base/protocol/exact-protocol.js +175 -0
- package/dist/base/protocol/exact-protocol.js.map +1 -0
- package/dist/base/types/core.d.ts +1 -1
- package/dist/base/types/core.d.ts.map +1 -1
- package/dist/base/types/core.js +1 -0
- package/dist/base/types/core.js.map +1 -1
- package/dist/base/utils/paths.d.ts +5 -0
- package/dist/base/utils/paths.d.ts.map +1 -1
- package/dist/base/utils/paths.js +7 -0
- package/dist/base/utils/paths.js.map +1 -1
- package/dist/base/utils/workspace-path.d.ts +6 -0
- package/dist/base/utils/workspace-path.d.ts.map +1 -0
- package/dist/base/utils/workspace-path.js +24 -0
- package/dist/base/utils/workspace-path.js.map +1 -0
- package/dist/base/utils/workspace-root.d.ts +6 -0
- package/dist/base/utils/workspace-root.d.ts.map +1 -0
- package/dist/base/utils/workspace-root.js +87 -0
- package/dist/base/utils/workspace-root.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interface/chat/chat-event-state.d.ts +2 -0
- package/dist/interface/chat/chat-event-state.d.ts.map +1 -1
- package/dist/interface/chat/chat-event-state.js +22 -41
- package/dist/interface/chat/chat-event-state.js.map +1 -1
- package/dist/interface/chat/chat-events.d.ts +15 -1
- package/dist/interface/chat/chat-events.d.ts.map +1 -1
- package/dist/interface/chat/chat-history.d.ts +3816 -192
- package/dist/interface/chat/chat-history.d.ts.map +1 -1
- package/dist/interface/chat/chat-history.js +529 -5
- package/dist/interface/chat/chat-history.js.map +1 -1
- package/dist/interface/chat/chat-runner-commands.d.ts +2 -0
- package/dist/interface/chat/chat-runner-commands.d.ts.map +1 -1
- package/dist/interface/chat/chat-runner-commands.js +83 -22
- package/dist/interface/chat/chat-runner-commands.js.map +1 -1
- package/dist/interface/chat/chat-runner-contracts.d.ts +5 -1
- package/dist/interface/chat/chat-runner-contracts.d.ts.map +1 -1
- package/dist/interface/chat/chat-runner-event-bridge.d.ts +13 -1
- package/dist/interface/chat/chat-runner-event-bridge.d.ts.map +1 -1
- package/dist/interface/chat/chat-runner-event-bridge.js +51 -3
- package/dist/interface/chat/chat-runner-event-bridge.js.map +1 -1
- package/dist/interface/chat/chat-runner-routes.d.ts +5 -17
- package/dist/interface/chat/chat-runner-routes.d.ts.map +1 -1
- package/dist/interface/chat/chat-runner-routes.js +80 -51
- package/dist/interface/chat/chat-runner-routes.js.map +1 -1
- package/dist/interface/chat/chat-runner-runtime.d.ts.map +1 -1
- package/dist/interface/chat/chat-runner-runtime.js +4 -0
- package/dist/interface/chat/chat-runner-runtime.js.map +1 -1
- package/dist/interface/chat/chat-runner.d.ts +7 -1
- package/dist/interface/chat/chat-runner.d.ts.map +1 -1
- package/dist/interface/chat/chat-runner.js +135 -49
- package/dist/interface/chat/chat-runner.js.map +1 -1
- package/dist/interface/chat/chat-session-store.d.ts +3 -0
- package/dist/interface/chat/chat-session-store.d.ts.map +1 -1
- package/dist/interface/chat/chat-session-store.js +12 -0
- package/dist/interface/chat/chat-session-store.js.map +1 -1
- package/dist/interface/chat/cross-platform-session.d.ts +15 -0
- package/dist/interface/chat/cross-platform-session.d.ts.map +1 -1
- package/dist/interface/chat/cross-platform-session.js +260 -42
- package/dist/interface/chat/cross-platform-session.js.map +1 -1
- package/dist/interface/chat/failure-recovery.d.ts.map +1 -1
- package/dist/interface/chat/failure-recovery.js +15 -1
- package/dist/interface/chat/failure-recovery.js.map +1 -1
- package/dist/interface/chat/freeform-route-classifier.d.ts +4 -4
- package/dist/interface/chat/ingress-router.d.ts +3 -0
- package/dist/interface/chat/ingress-router.d.ts.map +1 -1
- package/dist/interface/chat/ingress-router.js +3 -0
- package/dist/interface/chat/ingress-router.js.map +1 -1
- package/dist/interface/chat/model-request-builder.d.ts +37 -0
- package/dist/interface/chat/model-request-builder.d.ts.map +1 -0
- package/dist/interface/chat/model-request-builder.js +76 -0
- package/dist/interface/chat/model-request-builder.js.map +1 -0
- package/dist/interface/chat/turn-context.d.ts +200 -0
- package/dist/interface/chat/turn-context.d.ts.map +1 -0
- package/dist/interface/chat/turn-context.js +249 -0
- package/dist/interface/chat/turn-context.js.map +1 -0
- package/dist/interface/chat/turn-protocol.d.ts +35 -0
- package/dist/interface/chat/turn-protocol.d.ts.map +1 -0
- package/dist/interface/chat/turn-protocol.js +27 -0
- package/dist/interface/chat/turn-protocol.js.map +1 -0
- package/dist/interface/chat/user-input.d.ts +55 -0
- package/dist/interface/chat/user-input.d.ts.map +1 -0
- package/dist/interface/chat/user-input.js +52 -0
- package/dist/interface/chat/user-input.js.map +1 -0
- package/dist/interface/cli/cli-command-registry.d.ts +1 -1
- package/dist/interface/cli/cli-command-registry.d.ts.map +1 -1
- package/dist/interface/cli/cli-command-registry.js +12 -16
- package/dist/interface/cli/cli-command-registry.js.map +1 -1
- package/dist/interface/cli/cli-runner.js +0 -0
- package/dist/interface/cli/commands/daemon-shared.d.ts +12 -1
- package/dist/interface/cli/commands/daemon-shared.d.ts.map +1 -1
- package/dist/interface/cli/commands/daemon-shared.js +26 -4
- package/dist/interface/cli/commands/daemon-shared.js.map +1 -1
- package/dist/interface/cli/commands/daemon.d.ts.map +1 -1
- package/dist/interface/cli/commands/daemon.js +66 -8
- package/dist/interface/cli/commands/daemon.js.map +1 -1
- package/dist/interface/cli/commands/doctor.d.ts +1 -1
- package/dist/interface/cli/commands/doctor.d.ts.map +1 -1
- package/dist/interface/cli/commands/doctor.js +61 -29
- package/dist/interface/cli/commands/doctor.js.map +1 -1
- package/dist/interface/cli/commands/goal-dispatch.d.ts.map +1 -1
- package/dist/interface/cli/commands/goal-dispatch.js +10 -6
- package/dist/interface/cli/commands/goal-dispatch.js.map +1 -1
- package/dist/interface/cli/commands/goal-utils.d.ts.map +1 -1
- package/dist/interface/cli/commands/goal-utils.js +3 -5
- package/dist/interface/cli/commands/goal-utils.js.map +1 -1
- package/dist/interface/cli/commands/run.d.ts.map +1 -1
- package/dist/interface/cli/commands/run.js +50 -0
- package/dist/interface/cli/commands/run.js.map +1 -1
- package/dist/interface/cli/setup.d.ts +1 -1
- package/dist/interface/cli/setup.d.ts.map +1 -1
- package/dist/interface/cli/setup.js +4 -3
- package/dist/interface/cli/setup.js.map +1 -1
- package/dist/interface/cli/utils/loop-runner.d.ts +1 -0
- package/dist/interface/cli/utils/loop-runner.d.ts.map +1 -1
- package/dist/interface/cli/utils/loop-runner.js +12 -3
- package/dist/interface/cli/utils/loop-runner.js.map +1 -1
- package/dist/interface/tui/app.d.ts +6 -1
- package/dist/interface/tui/app.d.ts.map +1 -1
- package/dist/interface/tui/app.js +29 -12
- package/dist/interface/tui/app.js.map +1 -1
- package/dist/interface/tui/bash-mode.d.ts.map +1 -1
- package/dist/interface/tui/bash-mode.js +2 -9
- package/dist/interface/tui/bash-mode.js.map +1 -1
- package/dist/interface/tui/chat/viewport.d.ts.map +1 -1
- package/dist/interface/tui/chat/viewport.js +57 -11
- package/dist/interface/tui/chat/viewport.js.map +1 -1
- package/dist/interface/tui/entry-deps.d.ts +6 -1
- package/dist/interface/tui/entry-deps.d.ts.map +1 -1
- package/dist/interface/tui/entry-deps.js +3 -0
- package/dist/interface/tui/entry-deps.js.map +1 -1
- package/dist/interface/tui/entry.d.ts.map +1 -1
- package/dist/interface/tui/entry.js +6 -2
- package/dist/interface/tui/entry.js.map +1 -1
- package/dist/interface/tui/input-action.d.ts.map +1 -1
- package/dist/interface/tui/input-action.js +3 -2
- package/dist/interface/tui/input-action.js.map +1 -1
- package/dist/interface/tui/intent-recognizer.d.ts.map +1 -1
- package/dist/interface/tui/intent-recognizer.js +21 -33
- package/dist/interface/tui/intent-recognizer.js.map +1 -1
- package/dist/orchestrator/execution/adapter-layer.d.ts +10 -1
- package/dist/orchestrator/execution/adapter-layer.d.ts.map +1 -1
- package/dist/orchestrator/execution/adapter-layer.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.d.ts +12 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.js +16 -31
- package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.d.ts +75 -0
- package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.d.ts.map +1 -0
- package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.js +10 -0
- package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.js.map +1 -0
- package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.d.ts +3 -2
- package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.js +185 -22
- package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.js +18 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.js +7 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-events.d.ts +8 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-events.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-events.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-history.d.ts +3 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-history.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-history.js +12 -3
- package/dist/orchestrator/execution/agent-loop/agent-loop-history.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.js +7 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-model.d.ts +37 -0
- package/dist/orchestrator/execution/agent-loop/agent-loop-model.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-model.js +21 -0
- package/dist/orchestrator/execution/agent-loop/agent-loop-model.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-prompts.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-prompts.js +1 -0
- package/dist/orchestrator/execution/agent-loop/agent-loop-prompts.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-result.d.ts +19 -11
- package/dist/orchestrator/execution/agent-loop/agent-loop-result.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.d.ts +4 -0
- package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.js +135 -0
- package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.d.ts +3 -2
- package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.js +68 -61
- package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.d.ts +3 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-timeline.d.ts +12 -1
- package/dist/orchestrator/execution/agent-loop/agent-timeline.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/agent-timeline.js +19 -56
- package/dist/orchestrator/execution/agent-loop/agent-timeline.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.js +8 -2
- package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.d.ts +14 -0
- package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.js +440 -81
- package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.d.ts +1 -1
- package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.js +80 -12
- package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/chat-display-output.d.ts +1 -0
- package/dist/orchestrator/execution/agent-loop/chat-display-output.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/chat-display-output.js +3 -1
- package/dist/orchestrator/execution/agent-loop/chat-display-output.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/index.d.ts +3 -0
- package/dist/orchestrator/execution/agent-loop/index.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/index.js +3 -0
- package/dist/orchestrator/execution/agent-loop/index.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.d.ts +1 -0
- package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.js +51 -9
- package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/response-item-tool-router.d.ts +20 -0
- package/dist/orchestrator/execution/agent-loop/response-item-tool-router.d.ts.map +1 -0
- package/dist/orchestrator/execution/agent-loop/response-item-tool-router.js +181 -0
- package/dist/orchestrator/execution/agent-loop/response-item-tool-router.js.map +1 -0
- package/dist/orchestrator/execution/agent-loop/response-item.d.ts +805 -0
- package/dist/orchestrator/execution/agent-loop/response-item.d.ts.map +1 -0
- package/dist/orchestrator/execution/agent-loop/response-item.js +104 -0
- package/dist/orchestrator/execution/agent-loop/response-item.js.map +1 -0
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.d.ts +7 -2
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.js +33 -1
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.d.ts +32 -17
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.js +174 -16
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.d.ts +2 -0
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.js +10 -4
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.d.ts +0 -1
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.js +7 -87
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.js.map +1 -1
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.d.ts.map +1 -1
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.js +25 -0
- package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.js.map +1 -1
- package/dist/orchestrator/execution/context/issue-context-fetcher.d.ts +5 -1
- package/dist/orchestrator/execution/context/issue-context-fetcher.d.ts.map +1 -1
- package/dist/orchestrator/execution/context/issue-context-fetcher.js +7 -4
- package/dist/orchestrator/execution/context/issue-context-fetcher.js.map +1 -1
- package/dist/orchestrator/execution/task/task-artifact-contract.d.ts +18 -0
- package/dist/orchestrator/execution/task/task-artifact-contract.d.ts.map +1 -0
- package/dist/orchestrator/execution/task/task-artifact-contract.js +199 -0
- package/dist/orchestrator/execution/task/task-artifact-contract.js.map +1 -0
- package/dist/orchestrator/execution/task/task-diff-capture.d.ts +15 -1
- package/dist/orchestrator/execution/task/task-diff-capture.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-diff-capture.js +271 -18
- package/dist/orchestrator/execution/task/task-diff-capture.js.map +1 -1
- package/dist/orchestrator/execution/task/task-execution-helpers.d.ts +1 -0
- package/dist/orchestrator/execution/task/task-execution-helpers.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-execution-helpers.js +76 -17
- package/dist/orchestrator/execution/task/task-execution-helpers.js.map +1 -1
- package/dist/orchestrator/execution/task/task-execution-types.d.ts +2 -0
- package/dist/orchestrator/execution/task/task-execution-types.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-execution-types.js.map +1 -1
- package/dist/orchestrator/execution/task/task-executor.d.ts +16 -1
- package/dist/orchestrator/execution/task/task-executor.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-executor.js +56 -50
- package/dist/orchestrator/execution/task/task-executor.js.map +1 -1
- package/dist/orchestrator/execution/task/task-generation.d.ts +62 -2
- package/dist/orchestrator/execution/task/task-generation.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-generation.js +30 -13
- package/dist/orchestrator/execution/task/task-generation.js.map +1 -1
- package/dist/orchestrator/execution/task/task-lifecycle-runner.d.ts +2 -2
- package/dist/orchestrator/execution/task/task-lifecycle-runner.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-lifecycle-runner.js +32 -4
- package/dist/orchestrator/execution/task/task-lifecycle-runner.js.map +1 -1
- package/dist/orchestrator/execution/task/task-lifecycle.d.ts +3 -3
- package/dist/orchestrator/execution/task/task-lifecycle.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-lifecycle.js +109 -10
- package/dist/orchestrator/execution/task/task-lifecycle.js.map +1 -1
- package/dist/orchestrator/execution/task/task-outcome-ledger.d.ts +9 -0
- package/dist/orchestrator/execution/task/task-outcome-ledger.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-outcome-ledger.js +64 -3
- package/dist/orchestrator/execution/task/task-outcome-ledger.js.map +1 -1
- package/dist/orchestrator/execution/task/task-prompt-builder.d.ts +3 -1
- package/dist/orchestrator/execution/task/task-prompt-builder.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-prompt-builder.js +28 -13
- package/dist/orchestrator/execution/task/task-prompt-builder.js.map +1 -1
- package/dist/orchestrator/execution/task/task-verifier-rules.d.ts +3 -2
- package/dist/orchestrator/execution/task/task-verifier-rules.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-verifier-rules.js +377 -90
- package/dist/orchestrator/execution/task/task-verifier-rules.js.map +1 -1
- package/dist/orchestrator/execution/task/task-verifier-types.d.ts +13 -0
- package/dist/orchestrator/execution/task/task-verifier-types.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-verifier-types.js.map +1 -1
- package/dist/orchestrator/execution/task/task-verifier.d.ts +5 -4
- package/dist/orchestrator/execution/task/task-verifier.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-verifier.js +396 -25
- package/dist/orchestrator/execution/task/task-verifier.js.map +1 -1
- package/dist/orchestrator/execution/task/task-workspace.d.ts +5 -0
- package/dist/orchestrator/execution/task/task-workspace.d.ts.map +1 -1
- package/dist/orchestrator/execution/task/task-workspace.js +20 -10
- package/dist/orchestrator/execution/task/task-workspace.js.map +1 -1
- package/dist/orchestrator/execution/types/task-group.d.ts +85 -5
- package/dist/orchestrator/execution/types/task-group.d.ts.map +1 -1
- package/dist/orchestrator/execution/types/task.d.ts +155 -3
- package/dist/orchestrator/execution/types/task.d.ts.map +1 -1
- package/dist/orchestrator/execution/types/task.js +18 -0
- package/dist/orchestrator/execution/types/task.js.map +1 -1
- package/dist/orchestrator/loop/durable-loop/contracts.d.ts +2 -0
- package/dist/orchestrator/loop/durable-loop/contracts.d.ts.map +1 -1
- package/dist/orchestrator/loop/durable-loop/contracts.js.map +1 -1
- package/dist/orchestrator/loop/durable-loop/phase-specs.d.ts +12 -12
- package/dist/orchestrator/loop/durable-loop/preparation.d.ts.map +1 -1
- package/dist/orchestrator/loop/durable-loop/preparation.js +7 -1
- package/dist/orchestrator/loop/durable-loop/preparation.js.map +1 -1
- package/dist/orchestrator/loop/loop-report-helper.d.ts.map +1 -1
- package/dist/orchestrator/loop/loop-report-helper.js +2 -0
- package/dist/orchestrator/loop/loop-report-helper.js.map +1 -1
- package/dist/platform/corrections/memory-correction-ledger.d.ts +30 -30
- package/dist/platform/corrections/memory-governance.d.ts +2 -2
- package/dist/platform/corrections/memory-quarantine.d.ts +2 -2
- package/dist/platform/dream/playbook-memory.d.ts +4 -4
- package/dist/platform/knowledge/types/agent-memory.d.ts +46 -46
- package/dist/platform/observation/context-provider/collector.d.ts.map +1 -1
- package/dist/platform/observation/context-provider/collector.js +89 -24
- package/dist/platform/observation/context-provider/collector.js.map +1 -1
- package/dist/platform/observation/data-source-adapter.d.ts +2 -0
- package/dist/platform/observation/data-source-adapter.d.ts.map +1 -1
- package/dist/platform/observation/data-source-adapter.js.map +1 -1
- package/dist/platform/observation/observation-apply.d.ts.map +1 -1
- package/dist/platform/observation/observation-apply.js +8 -2
- package/dist/platform/observation/observation-apply.js.map +1 -1
- package/dist/platform/observation/observation-engine.d.ts.map +1 -1
- package/dist/platform/observation/observation-engine.js +118 -70
- package/dist/platform/observation/observation-engine.js.map +1 -1
- package/dist/platform/observation/observation-helpers.d.ts +2 -0
- package/dist/platform/observation/observation-helpers.d.ts.map +1 -1
- package/dist/platform/observation/observation-helpers.js.map +1 -1
- package/dist/platform/observation/types/data-source.d.ts +48 -0
- package/dist/platform/observation/types/data-source.d.ts.map +1 -1
- package/dist/platform/observation/types/data-source.js +4 -0
- package/dist/platform/observation/types/data-source.js.map +1 -1
- package/dist/platform/observation/workspace-context.d.ts.map +1 -1
- package/dist/platform/observation/workspace-context.js +13 -18
- package/dist/platform/observation/workspace-context.js.map +1 -1
- package/dist/platform/soil/contracts.d.ts +58 -58
- package/dist/prompt/purposes/verification.d.ts +2 -2
- package/dist/reporting/report-formatters.d.ts.map +1 -1
- package/dist/reporting/report-formatters.js +26 -1
- package/dist/reporting/report-formatters.js.map +1 -1
- package/dist/reporting/reporting-engine.d.ts.map +1 -1
- package/dist/reporting/reporting-engine.js +1 -0
- package/dist/reporting/reporting-engine.js.map +1 -1
- package/dist/reporting/reporting-types.d.ts +7 -0
- package/dist/reporting/reporting-types.d.ts.map +1 -1
- package/dist/reporting/types/report.d.ts +12 -0
- package/dist/reporting/types/report.d.ts.map +1 -1
- package/dist/reporting/types/report.js +1 -0
- package/dist/reporting/types/report.js.map +1 -1
- package/dist/runtime/approval-broker.d.ts +12 -0
- package/dist/runtime/approval-broker.d.ts.map +1 -1
- package/dist/runtime/approval-broker.js +27 -7
- package/dist/runtime/approval-broker.js.map +1 -1
- package/dist/runtime/control/daemon-runtime-control-executor.d.ts.map +1 -1
- package/dist/runtime/control/daemon-runtime-control-executor.js +9 -4
- package/dist/runtime/control/daemon-runtime-control-executor.js.map +1 -1
- package/dist/runtime/control/runtime-control-intent.d.ts.map +1 -1
- package/dist/runtime/control/runtime-control-intent.js +3 -2
- package/dist/runtime/control/runtime-control-intent.js.map +1 -1
- package/dist/runtime/control/runtime-control-service.d.ts +27 -1
- package/dist/runtime/control/runtime-control-service.d.ts.map +1 -1
- package/dist/runtime/control/runtime-control-service.js +181 -2
- package/dist/runtime/control/runtime-control-service.js.map +1 -1
- package/dist/runtime/control/runtime-target-resolver.js +2 -0
- package/dist/runtime/control/runtime-target-resolver.js.map +1 -1
- package/dist/runtime/daemon/browser-backpressure-policy.d.ts +22 -0
- package/dist/runtime/daemon/browser-backpressure-policy.d.ts.map +1 -0
- package/dist/runtime/daemon/browser-backpressure-policy.js +95 -0
- package/dist/runtime/daemon/browser-backpressure-policy.js.map +1 -0
- package/dist/runtime/daemon/client.d.ts +1 -0
- package/dist/runtime/daemon/client.d.ts.map +1 -1
- package/dist/runtime/daemon/client.js.map +1 -1
- package/dist/runtime/daemon/runner-goal-cycle.d.ts.map +1 -1
- package/dist/runtime/daemon/runner-goal-cycle.js +1 -2
- package/dist/runtime/daemon/runner-goal-cycle.js.map +1 -1
- package/dist/runtime/daemon/runner-recovery.d.ts +17 -3
- package/dist/runtime/daemon/runner-recovery.d.ts.map +1 -1
- package/dist/runtime/daemon/runner-recovery.js +50 -12
- package/dist/runtime/daemon/runner-recovery.js.map +1 -1
- package/dist/runtime/daemon/runner-startup.d.ts.map +1 -1
- package/dist/runtime/daemon/runner-startup.js +18 -1
- package/dist/runtime/daemon/runner-startup.js.map +1 -1
- package/dist/runtime/daemon/runner.d.ts.map +1 -1
- package/dist/runtime/daemon/runner.js +13 -3
- package/dist/runtime/daemon/runner.js.map +1 -1
- package/dist/runtime/daemon/runtime-ownership.d.ts +7 -1
- package/dist/runtime/daemon/runtime-ownership.d.ts.map +1 -1
- package/dist/runtime/daemon/runtime-ownership.js +171 -25
- package/dist/runtime/daemon/runtime-ownership.js.map +1 -1
- package/dist/runtime/daemon/wait-deadline-resolver.d.ts.map +1 -1
- package/dist/runtime/daemon/wait-deadline-resolver.js +2 -0
- package/dist/runtime/daemon/wait-deadline-resolver.js.map +1 -1
- package/dist/runtime/event/server-snapshot-reader.d.ts +3 -1
- package/dist/runtime/event/server-snapshot-reader.d.ts.map +1 -1
- package/dist/runtime/event/server-snapshot-reader.js +68 -2
- package/dist/runtime/event/server-snapshot-reader.js.map +1 -1
- package/dist/runtime/event/server-types.d.ts +2 -0
- package/dist/runtime/event/server-types.d.ts.map +1 -1
- package/dist/runtime/evidence-answer.d.ts.map +1 -1
- package/dist/runtime/evidence-answer.js +34 -7
- package/dist/runtime/evidence-answer.js.map +1 -1
- package/dist/runtime/gateway/channel-adapter.d.ts +3 -0
- package/dist/runtime/gateway/channel-adapter.d.ts.map +1 -1
- package/dist/runtime/gateway/channel-display-policy.d.ts +42 -0
- package/dist/runtime/gateway/channel-display-policy.d.ts.map +1 -0
- package/dist/runtime/gateway/channel-display-policy.js +85 -0
- package/dist/runtime/gateway/channel-display-policy.js.map +1 -0
- package/dist/runtime/gateway/chat-event-rendering.d.ts +2 -1
- package/dist/runtime/gateway/chat-event-rendering.d.ts.map +1 -1
- package/dist/runtime/gateway/chat-event-rendering.js +2 -0
- package/dist/runtime/gateway/chat-event-rendering.js.map +1 -1
- package/dist/runtime/gateway/chat-session-dispatch.d.ts.map +1 -1
- package/dist/runtime/gateway/chat-session-dispatch.js +4 -9
- package/dist/runtime/gateway/chat-session-dispatch.js.map +1 -1
- package/dist/runtime/gateway/chat-session-port.d.ts +2 -0
- package/dist/runtime/gateway/chat-session-port.d.ts.map +1 -1
- package/dist/runtime/gateway/chat-session-port.js.map +1 -1
- package/dist/runtime/gateway/discord-gateway-adapter.d.ts +4 -0
- package/dist/runtime/gateway/discord-gateway-adapter.d.ts.map +1 -1
- package/dist/runtime/gateway/discord-gateway-adapter.js +100 -31
- package/dist/runtime/gateway/discord-gateway-adapter.js.map +1 -1
- package/dist/runtime/gateway/index.d.ts +4 -0
- package/dist/runtime/gateway/index.d.ts.map +1 -1
- package/dist/runtime/gateway/index.js +2 -0
- package/dist/runtime/gateway/index.js.map +1 -1
- package/dist/runtime/gateway/non-tui-display-projector.d.ts +40 -0
- package/dist/runtime/gateway/non-tui-display-projector.d.ts.map +1 -0
- package/dist/runtime/gateway/non-tui-display-projector.js +166 -0
- package/dist/runtime/gateway/non-tui-display-projector.js.map +1 -0
- package/dist/runtime/gateway/signal-gateway-adapter.d.ts +1 -0
- package/dist/runtime/gateway/signal-gateway-adapter.d.ts.map +1 -1
- package/dist/runtime/gateway/signal-gateway-adapter.js +47 -4
- package/dist/runtime/gateway/signal-gateway-adapter.js.map +1 -1
- package/dist/runtime/gateway/slack-channel-adapter.d.ts +1 -0
- package/dist/runtime/gateway/slack-channel-adapter.d.ts.map +1 -1
- package/dist/runtime/gateway/slack-channel-adapter.js +93 -18
- package/dist/runtime/gateway/slack-channel-adapter.js.map +1 -1
- package/dist/runtime/gateway/telegram-gateway-adapter.d.ts +2 -0
- package/dist/runtime/gateway/telegram-gateway-adapter.d.ts.map +1 -1
- package/dist/runtime/gateway/telegram-gateway-adapter.js +61 -113
- package/dist/runtime/gateway/telegram-gateway-adapter.js.map +1 -1
- package/dist/runtime/gateway/whatsapp-gateway-adapter.d.ts +1 -0
- package/dist/runtime/gateway/whatsapp-gateway-adapter.d.ts.map +1 -1
- package/dist/runtime/gateway/whatsapp-gateway-adapter.js +49 -4
- package/dist/runtime/gateway/whatsapp-gateway-adapter.js.map +1 -1
- package/dist/runtime/interactive-automation/browser-session-resolver.d.ts +26 -0
- package/dist/runtime/interactive-automation/browser-session-resolver.d.ts.map +1 -0
- package/dist/runtime/interactive-automation/browser-session-resolver.js +75 -0
- package/dist/runtime/interactive-automation/browser-session-resolver.js.map +1 -0
- package/dist/runtime/interactive-automation/index.d.ts +2 -0
- package/dist/runtime/interactive-automation/index.d.ts.map +1 -1
- package/dist/runtime/interactive-automation/index.js +2 -0
- package/dist/runtime/interactive-automation/index.js.map +1 -1
- package/dist/runtime/interactive-automation/runtime-auth-handoff-store.d.ts +35 -0
- package/dist/runtime/interactive-automation/runtime-auth-handoff-store.d.ts.map +1 -0
- package/dist/runtime/interactive-automation/runtime-auth-handoff-store.js +125 -0
- package/dist/runtime/interactive-automation/runtime-auth-handoff-store.js.map +1 -0
- package/dist/runtime/permission-dialogue.d.ts +113 -0
- package/dist/runtime/permission-dialogue.d.ts.map +1 -0
- package/dist/runtime/permission-dialogue.js +82 -0
- package/dist/runtime/permission-dialogue.js.map +1 -0
- package/dist/runtime/run-spec/derive.d.ts +14 -14
- package/dist/runtime/run-spec/handoff.d.ts.map +1 -1
- package/dist/runtime/run-spec/handoff.js +33 -0
- package/dist/runtime/run-spec/handoff.js.map +1 -1
- package/dist/runtime/run-spec/types.d.ts +16 -16
- package/dist/runtime/session-registry/types.d.ts +12 -12
- package/dist/runtime/store/artifact-retention.d.ts +2 -0
- package/dist/runtime/store/artifact-retention.d.ts.map +1 -1
- package/dist/runtime/store/artifact-retention.js +24 -21
- package/dist/runtime/store/artifact-retention.js.map +1 -1
- package/dist/runtime/store/budget-store.d.ts +8 -8
- package/dist/runtime/store/evidence-ledger.d.ts.map +1 -1
- package/dist/runtime/store/evidence-ledger.js +39 -1
- package/dist/runtime/store/evidence-ledger.js.map +1 -1
- package/dist/runtime/store/evidence-types.d.ts +204 -204
- package/dist/runtime/store/experiment-queue-store.d.ts +20 -20
- package/dist/runtime/store/index.d.ts +2 -2
- package/dist/runtime/store/index.d.ts.map +1 -1
- package/dist/runtime/store/index.js +1 -1
- package/dist/runtime/store/index.js.map +1 -1
- package/dist/runtime/store/operator-handoff-store.d.ts +3 -3
- package/dist/runtime/store/reproducibility-manifest.d.ts +20 -20
- package/dist/runtime/store/runtime-operation-schemas.d.ts +95 -62
- package/dist/runtime/store/runtime-operation-schemas.d.ts.map +1 -1
- package/dist/runtime/store/runtime-operation-schemas.js +9 -0
- package/dist/runtime/store/runtime-operation-schemas.js.map +1 -1
- package/dist/runtime/store/runtime-paths.d.ts +2 -0
- package/dist/runtime/store/runtime-paths.d.ts.map +1 -1
- package/dist/runtime/store/runtime-paths.js +6 -0
- package/dist/runtime/store/runtime-paths.js.map +1 -1
- package/dist/runtime/store/runtime-schemas.d.ts +2256 -46
- package/dist/runtime/store/runtime-schemas.d.ts.map +1 -1
- package/dist/runtime/store/runtime-schemas.js +85 -0
- package/dist/runtime/store/runtime-schemas.js.map +1 -1
- package/dist/runtime/types/companion.d.ts +52 -52
- package/dist/runtime/types/daemon.d.ts +31 -31
- package/dist/tools/automation/InteractiveAutomationTools.d.ts +22 -2
- package/dist/tools/automation/InteractiveAutomationTools.d.ts.map +1 -1
- package/dist/tools/automation/InteractiveAutomationTools.js +75 -10
- package/dist/tools/automation/InteractiveAutomationTools.js.map +1 -1
- package/dist/tools/builtin/factory.d.ts +2 -1
- package/dist/tools/builtin/factory.d.ts.map +1 -1
- package/dist/tools/builtin/factory.js +6 -2
- package/dist/tools/builtin/factory.js.map +1 -1
- package/dist/tools/execution/MemorySaveTool/MemorySaveTool.d.ts +20 -20
- package/dist/tools/execution/RunAdapterTool/RunAdapterTool.d.ts +6 -0
- package/dist/tools/execution/RunAdapterTool/RunAdapterTool.d.ts.map +1 -1
- package/dist/tools/execution/RunAdapterTool/RunAdapterTool.js +2 -0
- package/dist/tools/execution/RunAdapterTool/RunAdapterTool.js.map +1 -1
- package/dist/tools/execution-orchestrator.d.ts +29 -0
- package/dist/tools/execution-orchestrator.d.ts.map +1 -0
- package/dist/tools/execution-orchestrator.js +153 -0
- package/dist/tools/execution-orchestrator.js.map +1 -0
- package/dist/tools/executor.d.ts +6 -0
- package/dist/tools/executor.d.ts.map +1 -1
- package/dist/tools/executor.js +48 -11
- package/dist/tools/executor.js.map +1 -1
- package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.d.ts.map +1 -1
- package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.js +130 -17
- package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.js.map +1 -1
- package/dist/tools/kaggle/KaggleExperimentTools.js +4 -3
- package/dist/tools/kaggle/KaggleExperimentTools.js.map +1 -1
- package/dist/tools/kaggle/KaggleSubmissionTools.js +6 -5
- package/dist/tools/kaggle/KaggleSubmissionTools.js.map +1 -1
- package/dist/tools/kaggle/KaggleWorkspacePrepareTool.js +6 -5
- package/dist/tools/kaggle/KaggleWorkspacePrepareTool.js.map +1 -1
- package/dist/tools/kaggle/paths.d.ts.map +1 -1
- package/dist/tools/kaggle/paths.js +12 -8
- package/dist/tools/kaggle/paths.js.map +1 -1
- package/dist/tools/mutation/TaskStopTool/TaskStopTool.d.ts.map +1 -1
- package/dist/tools/mutation/TaskStopTool/TaskStopTool.js +8 -0
- package/dist/tools/mutation/TaskStopTool/TaskStopTool.js.map +1 -1
- package/dist/tools/mutation/TaskUpdateTool/TaskUpdateTool.d.ts +8 -8
- package/dist/tools/mutation/TaskUpdateTool/TaskUpdateTool.d.ts.map +1 -1
- package/dist/tools/mutation/TaskUpdateTool/TaskUpdateTool.js +49 -7
- package/dist/tools/mutation/TaskUpdateTool/TaskUpdateTool.js.map +1 -1
- package/dist/tools/network/GitHubCliTool/GitHubCliTool.d.ts +4 -4
- package/dist/tools/network/McpStdioTool/McpStdioTool.d.ts +4 -4
- package/dist/tools/permission.d.ts +0 -1
- package/dist/tools/permission.d.ts.map +1 -1
- package/dist/tools/permission.js +9 -33
- package/dist/tools/permission.js.map +1 -1
- package/dist/tools/query/CodeReadContextTool/CodeReadContextTool.d.ts +4 -4
- package/dist/tools/query/CodeSearchRepairTool/CodeSearchRepairTool.d.ts +8 -8
- package/dist/tools/query/CodeSearchTool/CodeSearchTool.d.ts +4 -4
- package/dist/tools/query/MemoryRecallTool/MemoryRecallTool.d.ts +4 -4
- package/dist/tools/query/runtime-session-tools.d.ts +73 -5
- package/dist/tools/query/runtime-session-tools.d.ts.map +1 -1
- package/dist/tools/query/runtime-session-tools.js +114 -0
- package/dist/tools/query/runtime-session-tools.js.map +1 -1
- package/dist/tools/runtime/LongRunningRuntimeTools.d.ts +72 -54
- package/dist/tools/runtime/LongRunningRuntimeTools.d.ts.map +1 -1
- package/dist/tools/runtime/LongRunningRuntimeTools.js +4 -1
- package/dist/tools/runtime/LongRunningRuntimeTools.js.map +1 -1
- package/dist/tools/runtime/RunSpecHandoffTools.d.ts.map +1 -1
- package/dist/tools/runtime/RunSpecHandoffTools.js +162 -2
- package/dist/tools/runtime/RunSpecHandoffTools.js.map +1 -1
- package/dist/tools/runtime/SetupRuntimeControlTools.d.ts.map +1 -1
- package/dist/tools/runtime/SetupRuntimeControlTools.js +169 -17
- package/dist/tools/runtime/SetupRuntimeControlTools.js.map +1 -1
- package/dist/tools/system/EnvTool/EnvTool.d.ts +4 -4
- package/dist/tools/system/GitDiffTool/GitDiffTool.d.ts +4 -4
- package/dist/tools/system/GitLogTool/GitLogTool.d.ts +4 -4
- package/dist/tools/system/ShellCommandTool/ShellCommandTool.d.ts.map +1 -1
- package/dist/tools/system/ShellCommandTool/ShellCommandTool.js +8 -2
- package/dist/tools/system/ShellCommandTool/ShellCommandTool.js.map +1 -1
- package/dist/tools/system/ShellTool/ShellTool.d.ts.map +1 -1
- package/dist/tools/system/ShellTool/ShellTool.js +29 -11
- package/dist/tools/system/ShellTool/ShellTool.js.map +1 -1
- package/dist/tools/system/ShellTool/command-policy.d.ts +12 -8
- package/dist/tools/system/ShellTool/command-policy.d.ts.map +1 -1
- package/dist/tools/system/ShellTool/command-policy.js +412 -98
- package/dist/tools/system/ShellTool/command-policy.js.map +1 -1
- package/dist/tools/system/ShellTool/prompt.d.ts +1 -1
- package/dist/tools/system/ShellTool/prompt.d.ts.map +1 -1
- package/dist/tools/system/ShellTool/prompt.js +1 -1
- package/dist/tools/system/ShellTool/prompt.js.map +1 -1
- package/dist/tools/system/TestRunnerTool/TestRunnerTool.d.ts +1 -1
- package/dist/tools/system/TestRunnerTool/TestRunnerTool.d.ts.map +1 -1
- package/dist/tools/system/TestRunnerTool/TestRunnerTool.js +152 -8
- package/dist/tools/system/TestRunnerTool/TestRunnerTool.js.map +1 -1
- package/dist/tools/system/UpdatePlanTool/UpdatePlanTool.js +1 -1
- package/dist/tools/system/UpdatePlanTool/UpdatePlanTool.js.map +1 -1
- package/dist/tools/types.d.ts +36 -12
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +26 -3
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/workspace-scope.d.ts +11 -0
- package/dist/tools/workspace-scope.d.ts.map +1 -0
- package/dist/tools/workspace-scope.js +77 -0
- package/dist/tools/workspace-scope.js.map +1 -0
- package/package.json +2 -2
|
@@ -25,6 +25,7 @@ import { runMechanicalVerification, clampDimensionUpdate, checkDimensionDirectio
|
|
|
25
25
|
import { runLLMReview } from "./task-verifier-llm.js";
|
|
26
26
|
import { appendTaskOutcomeEvent } from "./task-outcome-ledger.js";
|
|
27
27
|
import { resolveTaskWorkspacePath } from "./task-workspace.js";
|
|
28
|
+
import { verifyTaskArtifactContract } from "./task-artifact-contract.js";
|
|
28
29
|
function formatSelfReportEvidence(executorReport) {
|
|
29
30
|
const segments = [
|
|
30
31
|
executorReport.summary.trim(),
|
|
@@ -41,6 +42,166 @@ function formatSelfReportEvidence(executorReport) {
|
|
|
41
42
|
].filter((segment) => segment.length > 0);
|
|
42
43
|
return segments.join("\n");
|
|
43
44
|
}
|
|
45
|
+
function statusAfterIncompleteVerification(task) {
|
|
46
|
+
if (task.status === "timed_out" || task.status === "cancelled" || task.status === "blocked")
|
|
47
|
+
return task.status;
|
|
48
|
+
return "error";
|
|
49
|
+
}
|
|
50
|
+
function getDimensionThresholdType(dim) {
|
|
51
|
+
return dim && typeof dim.threshold === "object" && dim.threshold !== null
|
|
52
|
+
? dim.threshold.type
|
|
53
|
+
: undefined;
|
|
54
|
+
}
|
|
55
|
+
function applyThresholdProgressDelta(prevVal, scaledDelta, thresholdType) {
|
|
56
|
+
const directionalDelta = thresholdType === "max" ? -scaledDelta : scaledDelta;
|
|
57
|
+
return prevVal !== null ? prevVal + directionalDelta : directionalDelta;
|
|
58
|
+
}
|
|
59
|
+
function isDimensionUpdateDirectionAllowed(input) {
|
|
60
|
+
const thresholdType = getDimensionThresholdType(input.dim);
|
|
61
|
+
if (thresholdType === "min" && input.newValue < input.previousValue) {
|
|
62
|
+
input.logger?.warn?.(`[handleVerdict] Skipping dimension update for ${String(input.dim.name)}: update moves away from min threshold`);
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
if (thresholdType === "max" && input.newValue > input.previousValue) {
|
|
66
|
+
input.logger?.warn?.(`[handleVerdict] Skipping dimension update for ${String(input.dim.name)}: update moves away from max threshold`);
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
return checkDimensionDirection(input.intendedDirection, input.previousValue, input.newValue, input.logger, String(input.dim.name));
|
|
70
|
+
}
|
|
71
|
+
function isolatedWorkspaceHandoff(context) {
|
|
72
|
+
const workspace = context.agentLoopWorkspace;
|
|
73
|
+
if (workspace?.isolatedWorkspace === true &&
|
|
74
|
+
workspace.workspaceDisposition === "handoff_required") {
|
|
75
|
+
return workspace;
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
function discardedDirtyIsolatedWorkspace(context) {
|
|
80
|
+
const workspace = context.agentLoopWorkspace;
|
|
81
|
+
if (workspace?.isolatedWorkspace === true &&
|
|
82
|
+
workspace.workspaceDirty === true &&
|
|
83
|
+
workspace.workspaceDisposition === "discarded") {
|
|
84
|
+
return workspace;
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
function shouldCollectDiffsFromRequestedWorkspace(executionResult) {
|
|
89
|
+
if (executionResult.agentLoop?.isolatedWorkspace !== true)
|
|
90
|
+
return true;
|
|
91
|
+
if (executionResult.agentLoop.workspaceDirty !== true)
|
|
92
|
+
return true;
|
|
93
|
+
return executionResult.agentLoop.workspaceDisposition !== "handoff_required" &&
|
|
94
|
+
executionResult.agentLoop.workspaceDisposition !== "discarded";
|
|
95
|
+
}
|
|
96
|
+
function formatIsolatedWorkspaceHandoffReason(workspace) {
|
|
97
|
+
const executionCwd = workspace.executionCwd ?? "unknown isolated worktree";
|
|
98
|
+
const requestedCwd = workspace.requestedCwd ?? "unknown requested workspace";
|
|
99
|
+
return [
|
|
100
|
+
`dirty isolated worktree retained at ${executionCwd}`,
|
|
101
|
+
`requested workspace ${requestedCwd} was not reverted or discarded`,
|
|
102
|
+
"operator review is required before completion",
|
|
103
|
+
].join("; ");
|
|
104
|
+
}
|
|
105
|
+
function formatDiscardedDirtyIsolatedWorkspaceReason(workspace) {
|
|
106
|
+
const executionCwd = workspace.executionCwd ?? "unknown isolated worktree";
|
|
107
|
+
const requestedCwd = workspace.requestedCwd ?? "unknown requested workspace";
|
|
108
|
+
return [
|
|
109
|
+
`dirty isolated worktree changes were discarded from ${executionCwd}`,
|
|
110
|
+
`requested workspace ${requestedCwd} was not reverted or discarded`,
|
|
111
|
+
"task must be retried from the requested workspace",
|
|
112
|
+
].join("; ");
|
|
113
|
+
}
|
|
114
|
+
export function applyVerdictHandlingContextGuards(verificationResult, context) {
|
|
115
|
+
const workspace = isolatedWorkspaceHandoff(context) ?? discardedDirtyIsolatedWorkspace(context);
|
|
116
|
+
if (!workspace)
|
|
117
|
+
return verificationResult;
|
|
118
|
+
const reason = workspace.workspaceDisposition === "discarded"
|
|
119
|
+
? formatDiscardedDirtyIsolatedWorkspaceReason(workspace)
|
|
120
|
+
: formatIsolatedWorkspaceHandoffReason(workspace);
|
|
121
|
+
return {
|
|
122
|
+
...verificationResult,
|
|
123
|
+
verdict: "fail",
|
|
124
|
+
confidence: Math.max(verificationResult.confidence ?? 0, 0.95),
|
|
125
|
+
evidence: [
|
|
126
|
+
{
|
|
127
|
+
layer: "mechanical",
|
|
128
|
+
description: reason,
|
|
129
|
+
confidence: 0.95,
|
|
130
|
+
},
|
|
131
|
+
...(verificationResult.evidence ?? []),
|
|
132
|
+
],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function mergeMechanicalAndArtifactVerification(mechanical, artifact) {
|
|
136
|
+
if (!artifact.applicable)
|
|
137
|
+
return mechanical;
|
|
138
|
+
if (isArtifactFreshnessDisagreement(mechanical, artifact)) {
|
|
139
|
+
return {
|
|
140
|
+
applicable: true,
|
|
141
|
+
passed: true,
|
|
142
|
+
description: `${artifact.description}; mechanical --check-contract reported a stale-artifact freshness failure, but PulSeed artifact_contract passed using task-start freshness: ${mechanical.description}`,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
if (!mechanical.applicable) {
|
|
146
|
+
return {
|
|
147
|
+
applicable: true,
|
|
148
|
+
passed: artifact.passed,
|
|
149
|
+
description: artifact.description,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
applicable: true,
|
|
154
|
+
passed: mechanical.passed && artifact.passed,
|
|
155
|
+
description: `${mechanical.description}; ${artifact.description}`,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function isArtifactFreshnessDisagreement(mechanical, artifact) {
|
|
159
|
+
return artifact.applicable &&
|
|
160
|
+
artifact.passed &&
|
|
161
|
+
mechanical.applicable &&
|
|
162
|
+
!mechanical.passed &&
|
|
163
|
+
/\bstale artifact:/i.test(mechanical.description);
|
|
164
|
+
}
|
|
165
|
+
function isTimedOutAgentLoopResult(executionResult) {
|
|
166
|
+
return executionResult.stopped_reason === "timeout" || executionResult.agentLoop?.stopReason === "timeout";
|
|
167
|
+
}
|
|
168
|
+
function isRecoverableAgentLoopFinalizationFailure(executionResult) {
|
|
169
|
+
if (executionResult.success)
|
|
170
|
+
return false;
|
|
171
|
+
const stopReason = executionResult.agentLoop?.stopReason;
|
|
172
|
+
return stopReason === "max_model_turns" ||
|
|
173
|
+
stopReason === "schema_error" ||
|
|
174
|
+
stopReason === "completion_gate_failed";
|
|
175
|
+
}
|
|
176
|
+
function formatTimeoutBudgetEvidence(executionResult) {
|
|
177
|
+
const details = [
|
|
178
|
+
"AgentLoop stopped because the wall-clock budget timed out",
|
|
179
|
+
typeof executionResult.agentLoop?.generatedEstimateMs === "number"
|
|
180
|
+
? `generated estimate: ${executionResult.agentLoop.generatedEstimateMs}ms`
|
|
181
|
+
: "",
|
|
182
|
+
typeof executionResult.agentLoop?.activeBudgetMs === "number"
|
|
183
|
+
? `active budget: ${executionResult.agentLoop.activeBudgetMs}ms`
|
|
184
|
+
: "",
|
|
185
|
+
].filter(Boolean);
|
|
186
|
+
return details.join("; ");
|
|
187
|
+
}
|
|
188
|
+
function isCompletionJudgerUnavailable(result) {
|
|
189
|
+
return result.passed === false &&
|
|
190
|
+
result.partial === false &&
|
|
191
|
+
result.confidence === 0 &&
|
|
192
|
+
result.description.startsWith("completion_judger failed after ");
|
|
193
|
+
}
|
|
194
|
+
function boundCompletionJudgerForTimedOutTask(deps) {
|
|
195
|
+
const existing = deps.completionJudgerConfig;
|
|
196
|
+
return {
|
|
197
|
+
...deps,
|
|
198
|
+
completionJudgerConfig: {
|
|
199
|
+
timeoutMs: Math.min(existing?.timeoutMs ?? 30_000, 5_000),
|
|
200
|
+
maxRetries: 0,
|
|
201
|
+
retryBackoffMs: 0,
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
}
|
|
44
205
|
function quoteShellArg(value) {
|
|
45
206
|
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
46
207
|
}
|
|
@@ -48,16 +209,20 @@ async function collectVerificationDiffs(deps, task, executionResult) {
|
|
|
48
209
|
if (executionResult.fileDiffs && executionResult.fileDiffs.length > 0) {
|
|
49
210
|
return executionResult.fileDiffs;
|
|
50
211
|
}
|
|
212
|
+
if (!shouldCollectDiffsFromRequestedWorkspace(executionResult))
|
|
213
|
+
return [];
|
|
51
214
|
if (!deps.toolExecutor)
|
|
52
215
|
return [];
|
|
53
216
|
const cwd = executionResult.agentLoop?.requestedCwd ??
|
|
54
217
|
executionResult.agentLoop?.executionCwd ??
|
|
55
|
-
await resolveTaskWorkspacePath({ stateManager: deps.stateManager, task }) ??
|
|
218
|
+
await resolveTaskWorkspacePath({ stateManager: deps.stateManager, task, fallbackCwd: deps.revertCwd }) ??
|
|
56
219
|
process.cwd();
|
|
57
220
|
const changedPaths = [
|
|
58
221
|
...(executionResult.filesChangedPaths ?? []),
|
|
59
222
|
...(executionResult.agentLoop?.filesChangedPaths ?? []),
|
|
60
223
|
].filter((path, index, all) => path.length > 0 && all.indexOf(path) === index);
|
|
224
|
+
const hasExplicitExecutionDiffPaths = executionResult.filesChangedPaths !== undefined ||
|
|
225
|
+
executionResult.agentLoop?.filesChangedPaths !== undefined;
|
|
61
226
|
const toolContext = {
|
|
62
227
|
cwd,
|
|
63
228
|
goalId: task.goal_id,
|
|
@@ -102,6 +267,9 @@ async function collectVerificationDiffs(deps, task, executionResult) {
|
|
|
102
267
|
const diffs = await Promise.all(changedPaths.slice(0, 5).map((path) => collectForPath(path)));
|
|
103
268
|
return diffs.filter((diff) => diff !== null);
|
|
104
269
|
}
|
|
270
|
+
if (hasExplicitExecutionDiffPaths) {
|
|
271
|
+
return [];
|
|
272
|
+
}
|
|
105
273
|
try {
|
|
106
274
|
const result = await deps.toolExecutor.execute("git_diff", { target: "unstaged", maxLines: 240 }, toolContext);
|
|
107
275
|
if (!result.success || typeof result.data !== "string" || !result.data.trim())
|
|
@@ -139,6 +307,16 @@ async function collectVerificationDiffs(deps, task, executionResult) {
|
|
|
139
307
|
* - L1 SKIP → use L2 only (lower confidence)
|
|
140
308
|
*/
|
|
141
309
|
export async function verifyTask(deps, task, executionResult) {
|
|
310
|
+
let goalForArtifactContract = null;
|
|
311
|
+
try {
|
|
312
|
+
goalForArtifactContract = await deps.stateManager.loadGoal(task.goal_id);
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
goalForArtifactContract = null;
|
|
316
|
+
}
|
|
317
|
+
const artifactResult = await verifyTaskArtifactContract(task, executionResult.agentLoop?.executionCwd
|
|
318
|
+
?? executionResult.agentLoop?.requestedCwd
|
|
319
|
+
?? await resolveTaskWorkspacePath({ stateManager: deps.stateManager, task, fallbackCwd: deps.revertCwd }), { goal: goalForArtifactContract });
|
|
142
320
|
// ─── Short-circuit: GitHub issue URL evidence ───
|
|
143
321
|
// When execution succeeded and output contains a GitHub issue URL,
|
|
144
322
|
// treat as mechanical pass without running full L1/L2 verification.
|
|
@@ -146,7 +324,8 @@ export async function verifyTask(deps, task, executionResult) {
|
|
|
146
324
|
const githubIssueUrlPattern = /github\.com\/.+\/issues\/\d+/;
|
|
147
325
|
if (executionResult.success === true &&
|
|
148
326
|
executionResult.output &&
|
|
149
|
-
githubIssueUrlPattern.test(executionResult.output)
|
|
327
|
+
githubIssueUrlPattern.test(executionResult.output) &&
|
|
328
|
+
(!artifactResult.applicable || artifactResult.passed)) {
|
|
150
329
|
const scResult = VerificationResultSchema.parse({
|
|
151
330
|
task_id: task.id,
|
|
152
331
|
verdict: "pass",
|
|
@@ -157,14 +336,98 @@ export async function verifyTask(deps, task, executionResult) {
|
|
|
157
336
|
description: "GitHub issue URL found in execution output — mechanical evidence of successful issue creation",
|
|
158
337
|
confidence: 0.95,
|
|
159
338
|
},
|
|
339
|
+
...(artifactResult.applicable
|
|
340
|
+
? [{
|
|
341
|
+
layer: "mechanical",
|
|
342
|
+
description: artifactResult.description,
|
|
343
|
+
confidence: 0.9,
|
|
344
|
+
}]
|
|
345
|
+
: []),
|
|
160
346
|
],
|
|
161
347
|
dimension_updates: [],
|
|
348
|
+
artifact_contract_status: artifactResult,
|
|
162
349
|
timestamp: new Date().toISOString(),
|
|
163
350
|
});
|
|
164
351
|
return scResult;
|
|
165
352
|
}
|
|
166
353
|
// ─── Layer 1: Mechanical verification ───
|
|
167
354
|
const l1Result = await runMechanicalVerification(deps, task);
|
|
355
|
+
const artifactFreshnessDisagreement = isArtifactFreshnessDisagreement(l1Result, artifactResult);
|
|
356
|
+
const effectiveL1Result = mergeMechanicalAndArtifactVerification(l1Result, artifactResult);
|
|
357
|
+
if (isRecoverableAgentLoopFinalizationFailure(executionResult) &&
|
|
358
|
+
effectiveL1Result.applicable &&
|
|
359
|
+
effectiveL1Result.passed &&
|
|
360
|
+
(artifactResult.passed || (executionResult.agentLoop?.completionEvidence?.length ?? 0) > 0)) {
|
|
361
|
+
deps.logger?.info?.("[completion_judger] Skipping completion judging for AgentLoop finalization failure with mechanical salvage evidence", {
|
|
362
|
+
taskId: task.id,
|
|
363
|
+
stoppedReason: executionResult.stopped_reason,
|
|
364
|
+
agentLoopStopReason: executionResult.agentLoop?.stopReason,
|
|
365
|
+
});
|
|
366
|
+
return VerificationResultSchema.parse({
|
|
367
|
+
task_id: task.id,
|
|
368
|
+
verdict: "pass",
|
|
369
|
+
confidence: 0.85,
|
|
370
|
+
evidence: [
|
|
371
|
+
{
|
|
372
|
+
layer: "mechanical",
|
|
373
|
+
description: effectiveL1Result.description,
|
|
374
|
+
confidence: 0.9,
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
layer: "independent_review",
|
|
378
|
+
description: `completion judging skipped because AgentLoop stopped with ${executionResult.agentLoop?.stopReason ?? executionResult.stopped_reason} after mechanical/artifact evidence passed`,
|
|
379
|
+
confidence: 0.85,
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
layer: "self_report",
|
|
383
|
+
description: formatSelfReportEvidence(parseExecutorReport(executionResult)),
|
|
384
|
+
confidence: 0.3,
|
|
385
|
+
},
|
|
386
|
+
],
|
|
387
|
+
dimension_updates: [],
|
|
388
|
+
file_diffs: await collectVerificationDiffs(deps, task, executionResult),
|
|
389
|
+
artifact_contract_status: artifactResult,
|
|
390
|
+
timestamp: new Date().toISOString(),
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
const timedOutAgentLoop = isTimedOutAgentLoopResult(executionResult);
|
|
394
|
+
if (timedOutAgentLoop && !effectiveL1Result.passed) {
|
|
395
|
+
deps.logger?.info?.("[completion_judger] Skipping completion judging for timed-out AgentLoop task without mechanical salvage evidence", {
|
|
396
|
+
taskId: task.id,
|
|
397
|
+
stoppedReason: executionResult.stopped_reason,
|
|
398
|
+
generatedEstimateMs: executionResult.agentLoop?.generatedEstimateMs,
|
|
399
|
+
activeBudgetMs: executionResult.agentLoop?.activeBudgetMs,
|
|
400
|
+
});
|
|
401
|
+
const evidence = [
|
|
402
|
+
...(effectiveL1Result.applicable
|
|
403
|
+
? [{
|
|
404
|
+
layer: "mechanical",
|
|
405
|
+
description: effectiveL1Result.description,
|
|
406
|
+
confidence: 0.9,
|
|
407
|
+
}]
|
|
408
|
+
: []),
|
|
409
|
+
{
|
|
410
|
+
layer: "independent_review",
|
|
411
|
+
description: `${formatTimeoutBudgetEvidence(executionResult)}; completion judging skipped because timeout is the primary terminal reason and no mechanical salvage evidence passed`,
|
|
412
|
+
confidence: 0,
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
layer: "self_report",
|
|
416
|
+
description: formatSelfReportEvidence(parseExecutorReport(executionResult)),
|
|
417
|
+
confidence: 0.3,
|
|
418
|
+
},
|
|
419
|
+
];
|
|
420
|
+
return VerificationResultSchema.parse({
|
|
421
|
+
task_id: task.id,
|
|
422
|
+
verdict: "fail",
|
|
423
|
+
confidence: 0.9,
|
|
424
|
+
evidence,
|
|
425
|
+
dimension_updates: [],
|
|
426
|
+
file_diffs: await collectVerificationDiffs(deps, task, executionResult),
|
|
427
|
+
artifact_contract_status: artifactResult,
|
|
428
|
+
timestamp: new Date().toISOString(),
|
|
429
|
+
});
|
|
430
|
+
}
|
|
168
431
|
// ─── Build optional enrichment blocks for LLM review ───
|
|
169
432
|
let knowledgeBlock = "";
|
|
170
433
|
if (deps.knowledgeManager?.getRelevantKnowledge) {
|
|
@@ -193,26 +456,54 @@ export async function verifyTask(deps, task, executionResult) {
|
|
|
193
456
|
}
|
|
194
457
|
catch { /* state enrichment is optional */ }
|
|
195
458
|
// ─── Layer 2: LLM task reviewer (independent) ───
|
|
196
|
-
const
|
|
459
|
+
const reviewDeps = timedOutAgentLoop ? boundCompletionJudgerForTimedOutTask(deps) : deps;
|
|
460
|
+
if (timedOutAgentLoop) {
|
|
461
|
+
deps.logger?.info?.("[completion_judger] Running sharply bounded completion judging for timed-out AgentLoop task with mechanical salvage evidence", {
|
|
462
|
+
taskId: task.id,
|
|
463
|
+
stoppedReason: executionResult.stopped_reason,
|
|
464
|
+
generatedEstimateMs: executionResult.agentLoop?.generatedEstimateMs,
|
|
465
|
+
activeBudgetMs: executionResult.agentLoop?.activeBudgetMs,
|
|
466
|
+
timeoutMs: reviewDeps.completionJudgerConfig?.timeoutMs,
|
|
467
|
+
maxRetries: reviewDeps.completionJudgerConfig?.maxRetries,
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
const l2Result = artifactFreshnessDisagreement && executionResult.success === true
|
|
471
|
+
? {
|
|
472
|
+
passed: true,
|
|
473
|
+
partial: false,
|
|
474
|
+
description: "completion judging skipped because PulSeed artifact_contract is authoritative for fresh_after_task_start and the contract passed",
|
|
475
|
+
confidence: 0.85,
|
|
476
|
+
tokensUsed: 0,
|
|
477
|
+
}
|
|
478
|
+
: await runLLMReview(reviewDeps, task, executionResult, knowledgeBlock, stateBlock);
|
|
197
479
|
// ─── Layer 3: Executor self-report (reference only) ───
|
|
198
480
|
const executorReport = parseExecutorReport(executionResult);
|
|
199
481
|
// ─── Contradiction resolution ───
|
|
200
482
|
let verdict;
|
|
201
483
|
let confidence;
|
|
202
484
|
let l2Retry;
|
|
203
|
-
|
|
204
|
-
|
|
485
|
+
const l2Unavailable = isCompletionJudgerUnavailable(l2Result);
|
|
486
|
+
const l2UnavailableButMechanicallyPassed = l2Unavailable &&
|
|
487
|
+
executionResult.success === true &&
|
|
488
|
+
effectiveL1Result.applicable &&
|
|
489
|
+
effectiveL1Result.passed;
|
|
490
|
+
if (effectiveL1Result.applicable) {
|
|
491
|
+
if (l2UnavailableButMechanicallyPassed) {
|
|
492
|
+
verdict = "pass";
|
|
493
|
+
confidence = 0.85;
|
|
494
|
+
}
|
|
495
|
+
else if (effectiveL1Result.passed && l2Result.passed) {
|
|
205
496
|
verdict = "pass";
|
|
206
497
|
confidence = 0.9;
|
|
207
498
|
}
|
|
208
|
-
else if (
|
|
499
|
+
else if (effectiveL1Result.passed && l2Result.partial) {
|
|
209
500
|
// L1 pass + L2 partial → partial
|
|
210
501
|
verdict = "partial";
|
|
211
502
|
confidence = 0.7;
|
|
212
503
|
}
|
|
213
|
-
else if (
|
|
504
|
+
else if (effectiveL1Result.passed && !l2Result.passed && !l2Result.partial) {
|
|
214
505
|
// L1 pass + L2 fail → re-review
|
|
215
|
-
l2Retry = await runLLMReview(deps, task, executionResult, knowledgeBlock, stateBlock, 'main');
|
|
506
|
+
l2Retry = timedOutAgentLoop ? l2Result : await runLLMReview(deps, task, executionResult, knowledgeBlock, stateBlock, 'main');
|
|
216
507
|
if (l2Retry.passed) {
|
|
217
508
|
verdict = "pass";
|
|
218
509
|
confidence = 0.75;
|
|
@@ -226,7 +517,7 @@ export async function verifyTask(deps, task, executionResult) {
|
|
|
226
517
|
confidence = 0.8;
|
|
227
518
|
}
|
|
228
519
|
}
|
|
229
|
-
else if (!
|
|
520
|
+
else if (!effectiveL1Result.passed && l2Result.passed) {
|
|
230
521
|
// Mechanical verification takes priority
|
|
231
522
|
verdict = "fail";
|
|
232
523
|
confidence = 0.85;
|
|
@@ -253,25 +544,28 @@ export async function verifyTask(deps, task, executionResult) {
|
|
|
253
544
|
}
|
|
254
545
|
}
|
|
255
546
|
// Handle partial from L2 when L1 is applicable but didn't fail
|
|
256
|
-
if (
|
|
547
|
+
if (effectiveL1Result.applicable && l2Result.partial && verdict !== "fail") {
|
|
257
548
|
verdict = "partial";
|
|
258
549
|
}
|
|
259
550
|
// Use retry result for evidence when a retry occurred, to keep audit trail accurate
|
|
260
551
|
const effectiveL2 = l2Retry ?? l2Result;
|
|
552
|
+
const independentReviewDescription = l2UnavailableButMechanicallyPassed
|
|
553
|
+
? `${effectiveL2.description}; using passing mechanical/artifact evidence because completion judging was unavailable`
|
|
554
|
+
: effectiveL2.description;
|
|
261
555
|
const now = new Date().toISOString();
|
|
262
556
|
const evidence = [
|
|
263
|
-
...(
|
|
557
|
+
...(effectiveL1Result.applicable
|
|
264
558
|
? [
|
|
265
559
|
{
|
|
266
560
|
layer: "mechanical",
|
|
267
|
-
description:
|
|
561
|
+
description: effectiveL1Result.description,
|
|
268
562
|
confidence: 0.9,
|
|
269
563
|
},
|
|
270
564
|
]
|
|
271
565
|
: []),
|
|
272
566
|
{
|
|
273
567
|
layer: "independent_review",
|
|
274
|
-
description:
|
|
568
|
+
description: independentReviewDescription,
|
|
275
569
|
confidence: effectiveL2.confidence,
|
|
276
570
|
},
|
|
277
571
|
{
|
|
@@ -320,7 +614,8 @@ export async function verifyTask(deps, task, executionResult) {
|
|
|
320
614
|
scaledDelta = progressDelta * (threshold.high - threshold.low);
|
|
321
615
|
}
|
|
322
616
|
}
|
|
323
|
-
const
|
|
617
|
+
const thresholdType = threshold?.type;
|
|
618
|
+
const newVal = applyThresholdProgressDelta(prevVal, scaledDelta, thresholdType);
|
|
324
619
|
return {
|
|
325
620
|
dimension_name: dimName,
|
|
326
621
|
previous_value: prevVal,
|
|
@@ -335,6 +630,7 @@ export async function verifyTask(deps, task, executionResult) {
|
|
|
335
630
|
evidence,
|
|
336
631
|
dimension_updates,
|
|
337
632
|
file_diffs: await collectVerificationDiffs(deps, task, executionResult),
|
|
633
|
+
artifact_contract_status: artifactResult,
|
|
338
634
|
timestamp: now,
|
|
339
635
|
});
|
|
340
636
|
// Post-verification: analyze impact for unintended side effects (opt-in)
|
|
@@ -374,7 +670,7 @@ export async function verifyTask(deps, task, executionResult) {
|
|
|
374
670
|
/**
|
|
375
671
|
* Handle a verification verdict (pass/partial/fail).
|
|
376
672
|
*/
|
|
377
|
-
export async function handleVerdict(deps, task, verificationResult) {
|
|
673
|
+
export async function handleVerdict(deps, task, verificationResult, context = {}) {
|
|
378
674
|
// P0: Progress-verdict contradiction check (§4.1)
|
|
379
675
|
if (verificationResult.verdict === "pass" && verificationResult.dimension_updates?.length > 0) {
|
|
380
676
|
const goalRawForGuard = await deps.stateManager.readRaw(`goals/${task.goal_id}/goal.json`);
|
|
@@ -405,6 +701,9 @@ export async function handleVerdict(deps, task, verificationResult) {
|
|
|
405
701
|
verificationResult = { ...verificationResult, verdict: "partial" };
|
|
406
702
|
}
|
|
407
703
|
}
|
|
704
|
+
if (context.verificationGuardsApplied !== true) {
|
|
705
|
+
verificationResult = applyVerdictHandlingContextGuards(verificationResult, context);
|
|
706
|
+
}
|
|
408
707
|
// Save failure context for fail/partial verdicts (§4.7)
|
|
409
708
|
if (verificationResult.verdict === "fail" || verificationResult.verdict === "partial") {
|
|
410
709
|
const firstEvidence = verificationResult.evidence?.[0];
|
|
@@ -466,7 +765,13 @@ export async function handleVerdict(deps, task, verificationResult) {
|
|
|
466
765
|
const update = verificationResult.dimension_updates.find((u) => u.dimension_name === dim.name);
|
|
467
766
|
if (update !== undefined && typeof update.new_value === "number") {
|
|
468
767
|
const prev = typeof dim.current_value === "number" ? dim.current_value : 0;
|
|
469
|
-
if (!
|
|
768
|
+
if (!isDimensionUpdateDirectionAllowed({
|
|
769
|
+
intendedDirection: task.intended_direction,
|
|
770
|
+
dim,
|
|
771
|
+
previousValue: prev,
|
|
772
|
+
newValue: update.new_value,
|
|
773
|
+
logger: deps.logger,
|
|
774
|
+
})) {
|
|
470
775
|
continue;
|
|
471
776
|
}
|
|
472
777
|
dim.current_value = clampDimensionUpdate(prev, update.new_value, deps.logger, String(dim.name));
|
|
@@ -505,7 +810,13 @@ export async function handleVerdict(deps, task, verificationResult) {
|
|
|
505
810
|
const update = verificationResult.dimension_updates.find((u) => u.dimension_name === dim.name);
|
|
506
811
|
if (update !== undefined && typeof update.new_value === "number") {
|
|
507
812
|
const prev = typeof dim.current_value === "number" ? dim.current_value : 0;
|
|
508
|
-
if (!
|
|
813
|
+
if (!isDimensionUpdateDirectionAllowed({
|
|
814
|
+
intendedDirection: task.intended_direction,
|
|
815
|
+
dim,
|
|
816
|
+
previousValue: prev,
|
|
817
|
+
newValue: update.new_value,
|
|
818
|
+
logger: deps.logger,
|
|
819
|
+
})) {
|
|
509
820
|
continue;
|
|
510
821
|
}
|
|
511
822
|
dim.current_value = clampDimensionUpdate(prev, update.new_value, deps.logger, String(dim.name));
|
|
@@ -518,6 +829,7 @@ export async function handleVerdict(deps, task, verificationResult) {
|
|
|
518
829
|
}
|
|
519
830
|
const partialTask = {
|
|
520
831
|
...task,
|
|
832
|
+
status: statusAfterIncompleteVerification(task),
|
|
521
833
|
verification_verdict: verificationResult.verdict,
|
|
522
834
|
verification_evidence: verificationResult.evidence?.map((e) => e.description ?? String(e)) ?? [],
|
|
523
835
|
};
|
|
@@ -530,13 +842,14 @@ export async function handleVerdict(deps, task, verificationResult) {
|
|
|
530
842
|
action: "keep",
|
|
531
843
|
verificationResult,
|
|
532
844
|
reason: "partial progress kept for follow-up work",
|
|
845
|
+
stoppedReason: context.stoppedReason ?? undefined,
|
|
533
846
|
});
|
|
534
847
|
return { action: "keep", task: partialTask };
|
|
535
848
|
}
|
|
536
|
-
return handleFailure(deps, task, verificationResult);
|
|
849
|
+
return handleFailure(deps, task, verificationResult, context);
|
|
537
850
|
}
|
|
538
851
|
case "fail": {
|
|
539
|
-
return handleFailure(deps, task, verificationResult);
|
|
852
|
+
return handleFailure(deps, task, verificationResult, context);
|
|
540
853
|
}
|
|
541
854
|
}
|
|
542
855
|
}
|
|
@@ -545,9 +858,10 @@ export async function handleVerdict(deps, task, verificationResult) {
|
|
|
545
858
|
* Handle a task failure: increment failure count, record failure,
|
|
546
859
|
* decide keep/discard/escalate.
|
|
547
860
|
*/
|
|
548
|
-
export async function handleFailure(deps, task, verificationResult) {
|
|
861
|
+
export async function handleFailure(deps, task, verificationResult, context = {}) {
|
|
549
862
|
const updatedTask = {
|
|
550
863
|
...task,
|
|
864
|
+
status: statusAfterIncompleteVerification(task),
|
|
551
865
|
consecutive_failure_count: task.consecutive_failure_count + 1,
|
|
552
866
|
verification_verdict: verificationResult.verdict,
|
|
553
867
|
verification_evidence: verificationResult.evidence?.map((e) => e.description ?? String(e)) ?? [],
|
|
@@ -559,6 +873,7 @@ export async function handleFailure(deps, task, verificationResult) {
|
|
|
559
873
|
type: "failed",
|
|
560
874
|
attempt: updatedTask.consecutive_failure_count,
|
|
561
875
|
verificationResult,
|
|
876
|
+
stoppedReason: context.stoppedReason ?? undefined,
|
|
562
877
|
});
|
|
563
878
|
if (updatedTask.consecutive_failure_count >= 3) {
|
|
564
879
|
deps.stallDetector.checkConsecutiveFailures(task.goal_id, task.primary_dimension, updatedTask.consecutive_failure_count);
|
|
@@ -570,9 +885,40 @@ export async function handleFailure(deps, task, verificationResult) {
|
|
|
570
885
|
action: "escalate",
|
|
571
886
|
verificationResult,
|
|
572
887
|
reason: "consecutive failure threshold reached",
|
|
888
|
+
stoppedReason: context.stoppedReason ?? undefined,
|
|
889
|
+
});
|
|
890
|
+
return { action: "escalate", task: updatedTask };
|
|
891
|
+
}
|
|
892
|
+
const handoffWorkspace = isolatedWorkspaceHandoff(context);
|
|
893
|
+
if (handoffWorkspace) {
|
|
894
|
+
const reason = formatIsolatedWorkspaceHandoffReason(handoffWorkspace);
|
|
895
|
+
await appendTaskHistory(deps, task.goal_id, updatedTask);
|
|
896
|
+
await appendTaskOutcomeEvent(deps.stateManager, {
|
|
897
|
+
task: updatedTask,
|
|
898
|
+
type: "abandoned",
|
|
899
|
+
attempt: updatedTask.consecutive_failure_count,
|
|
900
|
+
action: "escalate",
|
|
901
|
+
verificationResult,
|
|
902
|
+
reason,
|
|
903
|
+
stoppedReason: context.stoppedReason ?? undefined,
|
|
573
904
|
});
|
|
574
905
|
return { action: "escalate", task: updatedTask };
|
|
575
906
|
}
|
|
907
|
+
const discardedWorkspace = discardedDirtyIsolatedWorkspace(context);
|
|
908
|
+
if (discardedWorkspace) {
|
|
909
|
+
const reason = formatDiscardedDirtyIsolatedWorkspaceReason(discardedWorkspace);
|
|
910
|
+
await appendTaskHistory(deps, task.goal_id, updatedTask);
|
|
911
|
+
await appendTaskOutcomeEvent(deps.stateManager, {
|
|
912
|
+
task: updatedTask,
|
|
913
|
+
type: "abandoned",
|
|
914
|
+
attempt: updatedTask.consecutive_failure_count,
|
|
915
|
+
action: "discard",
|
|
916
|
+
verificationResult,
|
|
917
|
+
reason,
|
|
918
|
+
stoppedReason: context.stoppedReason ?? undefined,
|
|
919
|
+
});
|
|
920
|
+
return { action: "discard", task: updatedTask };
|
|
921
|
+
}
|
|
576
922
|
const directionCorrect = isDirectionCorrect(verificationResult);
|
|
577
923
|
if (directionCorrect) {
|
|
578
924
|
await appendTaskHistory(deps, task.goal_id, updatedTask);
|
|
@@ -583,20 +929,36 @@ export async function handleFailure(deps, task, verificationResult) {
|
|
|
583
929
|
action: "keep",
|
|
584
930
|
verificationResult,
|
|
585
931
|
reason: "failure kept for retry because direction remained correct",
|
|
932
|
+
stoppedReason: context.stoppedReason ?? undefined,
|
|
586
933
|
});
|
|
587
934
|
return { action: "keep", task: updatedTask };
|
|
588
935
|
}
|
|
589
936
|
if (updatedTask.reversibility === "reversible") {
|
|
937
|
+
const fileDiffs = verificationResult.file_diffs ?? [];
|
|
590
938
|
const concreteRevertPaths = [
|
|
591
|
-
...new Set(
|
|
939
|
+
...new Set(fileDiffs
|
|
940
|
+
.filter((diff) => diff.safe_to_revert !== false)
|
|
941
|
+
.map((diff) => diff.path)
|
|
942
|
+
.filter((filePath) => filePath.trim().length > 0)),
|
|
943
|
+
];
|
|
944
|
+
const unsafeRevertPaths = [
|
|
945
|
+
...new Set(fileDiffs
|
|
946
|
+
.filter((diff) => diff.safe_to_revert === false)
|
|
592
947
|
.map((diff) => diff.path)
|
|
593
948
|
.filter((filePath) => filePath.trim().length > 0)),
|
|
594
949
|
];
|
|
595
950
|
const revertSuccess = await attemptRevert(deps, updatedTask, {
|
|
596
951
|
concretePaths: concreteRevertPaths,
|
|
952
|
+
unsafePaths: unsafeRevertPaths,
|
|
953
|
+
});
|
|
954
|
+
deps.logger?.warn(`[task] revert attempted`, {
|
|
955
|
+
taskId: task.id,
|
|
956
|
+
success: revertSuccess.success,
|
|
957
|
+
reason: revertSuccess.reason,
|
|
958
|
+
concretePaths: revertSuccess.concretePaths,
|
|
959
|
+
unsafePaths: revertSuccess.unsafePaths,
|
|
597
960
|
});
|
|
598
|
-
|
|
599
|
-
if (revertSuccess) {
|
|
961
|
+
if (revertSuccess.success) {
|
|
600
962
|
await appendTaskHistory(deps, task.goal_id, updatedTask);
|
|
601
963
|
await appendTaskOutcomeEvent(deps.stateManager, {
|
|
602
964
|
task: updatedTask,
|
|
@@ -604,7 +966,8 @@ export async function handleFailure(deps, task, verificationResult) {
|
|
|
604
966
|
attempt: updatedTask.consecutive_failure_count,
|
|
605
967
|
action: "discard",
|
|
606
968
|
verificationResult,
|
|
607
|
-
reason:
|
|
969
|
+
reason: `task discarded after successful ${revertSuccess.method ?? "revert"} for ${revertSuccess.concretePaths.length} concrete paths`,
|
|
970
|
+
stoppedReason: context.stoppedReason ?? undefined,
|
|
608
971
|
});
|
|
609
972
|
return { action: "discard", task: updatedTask };
|
|
610
973
|
}
|
|
@@ -617,7 +980,14 @@ export async function handleFailure(deps, task, verificationResult) {
|
|
|
617
980
|
attempt: updatedTask.consecutive_failure_count,
|
|
618
981
|
action: "escalate",
|
|
619
982
|
verificationResult,
|
|
620
|
-
reason:
|
|
983
|
+
reason: revertSuccess.method === "git_unavailable"
|
|
984
|
+
? `${revertSuccess.reason}; git restore is unavailable for this non-git workspace, so changed filesystem paths and artifacts require operator handoff`
|
|
985
|
+
: (revertSuccess.unsafePaths?.length ?? 0) > 0
|
|
986
|
+
? `revert could not safely discard all task changes because some share pre-existing dirty paths: ${revertSuccess.unsafePaths?.join(", ")}`
|
|
987
|
+
: revertSuccess.concretePaths.length === 0
|
|
988
|
+
? "revert skipped because no concrete changed paths were captured; task output requires operator review"
|
|
989
|
+
: `revert failed after wrong-direction result: ${revertSuccess.reason}`,
|
|
990
|
+
stoppedReason: context.stoppedReason ?? undefined,
|
|
621
991
|
});
|
|
622
992
|
return { action: "escalate", task: updatedTask };
|
|
623
993
|
}
|
|
@@ -629,6 +999,7 @@ export async function handleFailure(deps, task, verificationResult) {
|
|
|
629
999
|
action: "escalate",
|
|
630
1000
|
verificationResult,
|
|
631
1001
|
reason: "task cannot be safely retried or reverted",
|
|
1002
|
+
stoppedReason: context.stoppedReason ?? undefined,
|
|
632
1003
|
});
|
|
633
1004
|
return { action: "escalate", task: updatedTask };
|
|
634
1005
|
}
|