@zhixuan92/multi-model-agent-core 4.3.1 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -8
- package/dist/bounded-execution/cost-compute.d.ts.map +1 -1
- package/dist/bounded-execution/cost-compute.js +10 -0
- package/dist/bounded-execution/cost-compute.js.map +1 -1
- package/dist/config/config-resolver.d.ts +6 -4
- package/dist/config/config-resolver.d.ts.map +1 -1
- package/dist/config/config-resolver.js +7 -6
- package/dist/config/config-resolver.js.map +1 -1
- package/dist/config/schema.d.ts +8 -76
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +11 -18
- package/dist/config/schema.js.map +1 -1
- package/dist/escalation/delegate-with-escalation.d.ts.map +1 -1
- package/dist/escalation/delegate-with-escalation.js +35 -38
- package/dist/escalation/delegate-with-escalation.js.map +1 -1
- package/dist/escalation/escalation-policy.d.ts +1 -1
- package/dist/escalation/escalation-policy.d.ts.map +1 -1
- package/dist/escalation/escalation-policy.js +0 -1
- package/dist/escalation/escalation-policy.js.map +1 -1
- package/dist/events/clamp.d.ts.map +1 -1
- package/dist/events/clamp.js +17 -6
- package/dist/events/clamp.js.map +1 -1
- package/dist/events/cloud-events.d.ts +1 -3
- package/dist/events/cloud-events.d.ts.map +1 -1
- package/dist/events/event-builder.d.ts +1 -1
- package/dist/events/event-builder.d.ts.map +1 -1
- package/dist/events/event-builder.js +2 -2
- package/dist/events/event-builder.js.map +1 -1
- package/dist/events/observability-events.d.ts +1 -25
- package/dist/events/observability-events.d.ts.map +1 -1
- package/dist/events/running-headline-sink.d.ts +2 -1
- package/dist/events/running-headline-sink.d.ts.map +1 -1
- package/dist/events/running-headline-sink.js.map +1 -1
- package/dist/events/telemetry-types.d.ts +20 -23
- package/dist/events/telemetry-types.d.ts.map +1 -1
- package/dist/events/telemetry-types.js +13 -13
- package/dist/events/telemetry-types.js.map +1 -1
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/intake/source-schema.js +1 -1
- package/dist/intake/source-schema.js.map +1 -1
- package/dist/intake/types.d.ts +1 -1
- package/dist/intake/types.d.ts.map +1 -1
- package/dist/intake/verify-command-validator.d.ts +6 -0
- package/dist/intake/verify-command-validator.d.ts.map +1 -0
- package/dist/intake/verify-command-validator.js +47 -0
- package/dist/intake/verify-command-validator.js.map +1 -0
- package/dist/lifecycle/findings-parser.d.ts +9 -0
- package/dist/lifecycle/findings-parser.d.ts.map +1 -0
- package/dist/lifecycle/findings-parser.js +47 -0
- package/dist/lifecycle/findings-parser.js.map +1 -0
- package/dist/lifecycle/handlers/annotator.d.ts +35 -0
- package/dist/lifecycle/handlers/annotator.d.ts.map +1 -0
- package/dist/lifecycle/handlers/annotator.js +38 -0
- package/dist/lifecycle/handlers/annotator.js.map +1 -0
- package/dist/lifecycle/handlers/baseline-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/baseline-handlers.js +30 -37
- package/dist/lifecycle/handlers/baseline-handlers.js.map +1 -1
- package/dist/lifecycle/handlers/git-commit-handler.d.ts +1 -16
- package/dist/lifecycle/handlers/git-commit-handler.d.ts.map +1 -1
- package/dist/lifecycle/handlers/git-commit-handler.js +147 -53
- package/dist/lifecycle/handlers/git-commit-handler.js.map +1 -1
- package/dist/lifecycle/handlers/read-route-implementer.d.ts +41 -0
- package/dist/lifecycle/handlers/read-route-implementer.d.ts.map +1 -0
- package/dist/lifecycle/handlers/read-route-implementer.js +84 -0
- package/dist/lifecycle/handlers/read-route-implementer.js.map +1 -0
- package/dist/lifecycle/handlers/review-handler.d.ts.map +1 -1
- package/dist/lifecycle/handlers/review-handler.js +84 -90
- package/dist/lifecycle/handlers/review-handler.js.map +1 -1
- package/dist/lifecycle/handlers/rework-handler.d.ts.map +1 -1
- package/dist/lifecycle/handlers/rework-handler.js +49 -25
- package/dist/lifecycle/handlers/rework-handler.js.map +1 -1
- package/dist/lifecycle/handlers/task-executor.d.ts +1 -3
- package/dist/lifecycle/handlers/task-executor.d.ts.map +1 -1
- package/dist/lifecycle/handlers/task-executor.js +88 -8
- package/dist/lifecycle/handlers/task-executor.js.map +1 -1
- package/dist/lifecycle/lifecycle-context.d.ts +13 -0
- package/dist/lifecycle/lifecycle-context.d.ts.map +1 -1
- package/dist/lifecycle/parallel-criteria-routes.d.ts +20 -6
- package/dist/lifecycle/parallel-criteria-routes.d.ts.map +1 -1
- package/dist/lifecycle/parallel-criteria-routes.js +36 -142
- package/dist/lifecycle/parallel-criteria-routes.js.map +1 -1
- package/dist/lifecycle/read-only-subtype-spec.d.ts +18 -0
- package/dist/lifecycle/read-only-subtype-spec.d.ts.map +1 -0
- package/dist/lifecycle/read-only-subtype-spec.js +2 -0
- package/dist/lifecycle/read-only-subtype-spec.js.map +1 -0
- package/dist/lifecycle/stage-labels.d.ts +22 -0
- package/dist/lifecycle/stage-labels.d.ts.map +1 -0
- package/dist/lifecycle/stage-labels.js +42 -0
- package/dist/lifecycle/stage-labels.js.map +1 -0
- package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
- package/dist/lifecycle/stage-plan-builder.js +25 -54
- package/dist/lifecycle/stage-plan-builder.js.map +1 -1
- package/dist/lifecycle/stage-plan-types.d.ts +0 -23
- package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
- package/dist/lifecycle/stage-progression.js +10 -10
- package/dist/lifecycle/stage-progression.js.map +1 -1
- package/dist/lifecycle/stage-stats.js +1 -1
- package/dist/lifecycle/stage-stats.js.map +1 -1
- package/dist/lifecycle/task-executor.d.ts.map +1 -1
- package/dist/lifecycle/task-executor.js +20 -17
- package/dist/lifecycle/task-executor.js.map +1 -1
- package/dist/lifecycle/task-runner.d.ts.map +1 -1
- package/dist/lifecycle/task-runner.js +83 -72
- package/dist/lifecycle/task-runner.js.map +1 -1
- package/dist/lifecycle/tool-config-types.d.ts +1 -2
- package/dist/lifecycle/tool-config-types.d.ts.map +1 -1
- package/dist/lifecycle/warm-followup.d.ts +3 -0
- package/dist/lifecycle/warm-followup.d.ts.map +1 -0
- package/dist/lifecycle/warm-followup.js +16 -0
- package/dist/lifecycle/warm-followup.js.map +1 -0
- package/dist/lifecycle/worker-output-contract.d.ts +26 -0
- package/dist/lifecycle/worker-output-contract.d.ts.map +1 -0
- package/dist/lifecycle/worker-output-contract.js +73 -0
- package/dist/lifecycle/worker-output-contract.js.map +1 -0
- package/dist/providers/assemble-run-result.d.ts +17 -0
- package/dist/providers/assemble-run-result.d.ts.map +1 -0
- package/dist/providers/assemble-run-result.js +76 -0
- package/dist/providers/assemble-run-result.js.map +1 -0
- package/dist/providers/brief-preamble.d.ts +4 -0
- package/dist/providers/brief-preamble.d.ts.map +1 -0
- package/dist/providers/brief-preamble.js +39 -0
- package/dist/providers/brief-preamble.js.map +1 -0
- package/dist/providers/claude-session.d.ts +23 -0
- package/dist/providers/claude-session.d.ts.map +1 -0
- package/dist/providers/claude-session.js +185 -0
- package/dist/providers/claude-session.js.map +1 -0
- package/dist/providers/claude.d.ts +4 -0
- package/dist/providers/claude.d.ts.map +1 -0
- package/dist/providers/claude.js +35 -0
- package/dist/providers/claude.js.map +1 -0
- package/dist/providers/codex-cli-event.d.ts +44 -0
- package/dist/providers/codex-cli-event.d.ts.map +1 -0
- package/dist/providers/codex-cli-event.js +43 -0
- package/dist/providers/codex-cli-event.js.map +1 -0
- package/dist/providers/codex-cli-launch.d.ts +26 -0
- package/dist/providers/codex-cli-launch.d.ts.map +1 -0
- package/dist/providers/codex-cli-launch.js +47 -0
- package/dist/providers/codex-cli-launch.js.map +1 -0
- package/dist/providers/codex-cli-session.d.ts +55 -0
- package/dist/providers/codex-cli-session.d.ts.map +1 -0
- package/dist/providers/codex-cli-session.js +417 -0
- package/dist/providers/codex-cli-session.js.map +1 -0
- package/dist/providers/codex.d.ts +4 -0
- package/dist/providers/codex.d.ts.map +1 -0
- package/dist/providers/codex.js +28 -0
- package/dist/providers/codex.js.map +1 -0
- package/dist/providers/index.d.ts +0 -12
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -13
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/normalize-claude.d.ts +10 -0
- package/dist/providers/normalize-claude.d.ts.map +1 -0
- package/dist/providers/normalize-claude.js +89 -0
- package/dist/providers/normalize-claude.js.map +1 -0
- package/dist/providers/provider-factory.d.ts +1 -9
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +35 -167
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/providers/runner-adapter.d.ts +5 -16
- package/dist/providers/runner-adapter.d.ts.map +1 -1
- package/dist/providers/runner-adapter.js +6 -0
- package/dist/providers/runner-adapter.js.map +1 -1
- package/dist/providers/runner-types.d.ts +20 -2
- package/dist/providers/runner-types.d.ts.map +1 -1
- package/dist/reporting/report-parser-slots/research-report.d.ts +21 -17
- package/dist/reporting/report-parser-slots/research-report.d.ts.map +1 -1
- package/dist/reporting/report-parser-slots/research-report.js +28 -67
- package/dist/reporting/report-parser-slots/research-report.js.map +1 -1
- package/dist/review/annotator-engine.d.ts +2 -2
- package/dist/review/annotator-engine.d.ts.map +1 -1
- package/dist/review/annotator-engine.js +16 -20
- package/dist/review/annotator-engine.js.map +1 -1
- package/dist/review/annotator-prompt-builder.d.ts +1 -1
- package/dist/review/annotator-prompt-builder.d.ts.map +1 -1
- package/dist/review/default-engines.d.ts.map +1 -1
- package/dist/review/default-engines.js +2 -4
- package/dist/review/default-engines.js.map +1 -1
- package/dist/review/review-types.d.ts +0 -1
- package/dist/review/review-types.d.ts.map +1 -1
- package/dist/review/reviewer-engine.d.ts +5 -40
- package/dist/review/reviewer-engine.d.ts.map +1 -1
- package/dist/review/reviewer-engine.js +19 -49
- package/dist/review/reviewer-engine.js.map +1 -1
- package/dist/review/reviewer-output-parser.d.ts +1 -6
- package/dist/review/reviewer-output-parser.d.ts.map +1 -1
- package/dist/review/reviewer-output-parser.js +0 -26
- package/dist/review/reviewer-output-parser.js.map +1 -1
- package/dist/review/reviewer-prompt-builder.d.ts +1 -6
- package/dist/review/reviewer-prompt-builder.d.ts.map +1 -1
- package/dist/review/reviewer-prompt-builder.js +0 -6
- package/dist/review/reviewer-prompt-builder.js.map +1 -1
- package/dist/review/templates/quality-review.d.ts.map +1 -1
- package/dist/review/templates/quality-review.js +28 -0
- package/dist/review/templates/quality-review.js.map +1 -1
- package/dist/review/templates/rework.d.ts.map +1 -1
- package/dist/review/templates/rework.js +15 -9
- package/dist/review/templates/rework.js.map +1 -1
- package/dist/review/templates/shared.d.ts +9 -0
- package/dist/review/templates/shared.d.ts.map +1 -1
- package/dist/stores/context-block-project-cap.d.ts +1 -1
- package/dist/stores/context-block-project-cap.d.ts.map +1 -1
- package/dist/stores/context-block-project-cap.js +17 -5
- package/dist/stores/context-block-project-cap.js.map +1 -1
- package/dist/stores/file-backed-context-block-store.d.ts +7 -0
- package/dist/stores/file-backed-context-block-store.d.ts.map +1 -1
- package/dist/stores/file-backed-context-block-store.js +8 -0
- package/dist/stores/file-backed-context-block-store.js.map +1 -1
- package/dist/tool-surface/discover.d.ts +1 -1
- package/dist/tool-surface/discover.d.ts.map +1 -1
- package/dist/tool-surface/discover.js +0 -1
- package/dist/tool-surface/discover.js.map +1 -1
- package/dist/tool-surface/openapi-generator.d.ts.map +1 -1
- package/dist/tool-surface/openapi-generator.js +0 -2
- package/dist/tool-surface/openapi-generator.js.map +1 -1
- package/dist/tool-surface/register-all-tools.d.ts.map +1 -1
- package/dist/tool-surface/register-all-tools.js +1 -3
- package/dist/tool-surface/register-all-tools.js.map +1 -1
- package/dist/tools/audit/schema.d.ts +4 -4
- package/dist/tools/audit/schema.d.ts.map +1 -1
- package/dist/tools/audit/schema.js +4 -4
- package/dist/tools/audit/schema.js.map +1 -1
- package/dist/tools/audit/skill-audit-criteria.d.ts +9 -0
- package/dist/tools/audit/skill-audit-criteria.d.ts.map +1 -0
- package/dist/tools/audit/skill-audit-criteria.js +51 -0
- package/dist/tools/audit/skill-audit-criteria.js.map +1 -0
- package/dist/tools/audit/spec-audit-criteria.d.ts +9 -0
- package/dist/tools/audit/spec-audit-criteria.d.ts.map +1 -0
- package/dist/tools/audit/spec-audit-criteria.js +52 -0
- package/dist/tools/audit/spec-audit-criteria.js.map +1 -0
- package/dist/tools/audit/subtypes.d.ts +4 -0
- package/dist/tools/audit/subtypes.d.ts.map +1 -0
- package/dist/tools/audit/subtypes.js +67 -0
- package/dist/tools/audit/subtypes.js.map +1 -0
- package/dist/tools/audit/tool-config.d.ts +4 -4
- package/dist/tools/audit/tool-config.d.ts.map +1 -1
- package/dist/tools/audit/tool-config.js +31 -29
- package/dist/tools/audit/tool-config.js.map +1 -1
- package/dist/tools/debug/schema.d.ts +3 -0
- package/dist/tools/debug/schema.d.ts.map +1 -1
- package/dist/tools/debug/schema.js +1 -0
- package/dist/tools/debug/schema.js.map +1 -1
- package/dist/tools/debug/subtypes.d.ts +4 -0
- package/dist/tools/debug/subtypes.d.ts.map +1 -0
- package/dist/tools/debug/subtypes.js +25 -0
- package/dist/tools/debug/subtypes.js.map +1 -0
- package/dist/tools/delegate/tool-config.d.ts.map +1 -1
- package/dist/tools/delegate/tool-config.js +0 -1
- package/dist/tools/delegate/tool-config.js.map +1 -1
- package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
- package/dist/tools/execute-plan/tool-config.js +5 -2
- package/dist/tools/execute-plan/tool-config.js.map +1 -1
- package/dist/tools/index.d.ts +0 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/investigate/schema.d.ts +3 -0
- package/dist/tools/investigate/schema.d.ts.map +1 -1
- package/dist/tools/investigate/schema.js +1 -0
- package/dist/tools/investigate/schema.js.map +1 -1
- package/dist/tools/investigate/subtypes.d.ts +4 -0
- package/dist/tools/investigate/subtypes.d.ts.map +1 -0
- package/dist/tools/investigate/subtypes.js +25 -0
- package/dist/tools/investigate/subtypes.js.map +1 -0
- package/dist/tools/research/implementer-criteria.d.ts +12 -5
- package/dist/tools/research/implementer-criteria.d.ts.map +1 -1
- package/dist/tools/research/implementer-criteria.js +40 -9
- package/dist/tools/research/implementer-criteria.js.map +1 -1
- package/dist/tools/research/schema.d.ts +3 -0
- package/dist/tools/research/schema.d.ts.map +1 -1
- package/dist/tools/research/schema.js +2 -1
- package/dist/tools/research/schema.js.map +1 -1
- package/dist/tools/research/subtypes.d.ts +4 -0
- package/dist/tools/research/subtypes.d.ts.map +1 -0
- package/dist/tools/research/subtypes.js +24 -0
- package/dist/tools/research/subtypes.js.map +1 -0
- package/dist/tools/research/tool-config.js +2 -2
- package/dist/tools/research/tool-config.js.map +1 -1
- package/dist/tools/review/schema.d.ts +3 -0
- package/dist/tools/review/schema.d.ts.map +1 -1
- package/dist/tools/review/schema.js +1 -0
- package/dist/tools/review/schema.js.map +1 -1
- package/dist/tools/review/subtypes.d.ts +4 -0
- package/dist/tools/review/subtypes.d.ts.map +1 -0
- package/dist/tools/review/subtypes.js +26 -0
- package/dist/tools/review/subtypes.js.map +1 -0
- package/dist/types/config.d.ts +14 -28
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/enums.d.ts +2 -7
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/enums.js +3 -3
- package/dist/types/enums.js.map +1 -1
- package/dist/types/run-result.d.ts +56 -21
- package/dist/types/run-result.d.ts.map +1 -1
- package/dist/types/task-spec.d.ts +17 -15
- package/dist/types/task-spec.d.ts.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -3
- package/dist/identity/main-model-resolver.d.ts +0 -14
- package/dist/identity/main-model-resolver.d.ts.map +0 -1
- package/dist/identity/main-model-resolver.js +0 -100
- package/dist/identity/main-model-resolver.js.map +0 -1
- package/dist/lifecycle/handlers/annotate-completion-handler.d.ts +0 -9
- package/dist/lifecycle/handlers/annotate-completion-handler.d.ts.map +0 -1
- package/dist/lifecycle/handlers/annotate-completion-handler.js +0 -200
- package/dist/lifecycle/handlers/annotate-completion-handler.js.map +0 -1
- package/dist/lifecycle/handlers/annotate-criteria-handler.d.ts +0 -3
- package/dist/lifecycle/handlers/annotate-criteria-handler.d.ts.map +0 -1
- package/dist/lifecycle/handlers/annotate-criteria-handler.js +0 -79
- package/dist/lifecycle/handlers/annotate-criteria-handler.js.map +0 -1
- package/dist/lifecycle/handlers/execution-context-builder.d.ts +0 -5
- package/dist/lifecycle/handlers/execution-context-builder.d.ts.map +0 -1
- package/dist/lifecycle/handlers/execution-context-builder.js +0 -17
- package/dist/lifecycle/handlers/execution-context-builder.js.map +0 -1
- package/dist/lifecycle/parallel-criteria-dispatcher.d.ts +0 -62
- package/dist/lifecycle/parallel-criteria-dispatcher.d.ts.map +0 -1
- package/dist/lifecycle/parallel-criteria-dispatcher.js +0 -328
- package/dist/lifecycle/parallel-criteria-dispatcher.js.map +0 -1
- package/dist/providers/anthropic-messages-adapter.d.ts +0 -26
- package/dist/providers/anthropic-messages-adapter.d.ts.map +0 -1
- package/dist/providers/anthropic-messages-adapter.js +0 -127
- package/dist/providers/anthropic-messages-adapter.js.map +0 -1
- package/dist/providers/base/research-tools.d.ts +0 -47
- package/dist/providers/base/research-tools.d.ts.map +0 -1
- package/dist/providers/base/research-tools.js +0 -67
- package/dist/providers/base/research-tools.js.map +0 -1
- package/dist/providers/base/result-builders.d.ts +0 -82
- package/dist/providers/base/result-builders.d.ts.map +0 -1
- package/dist/providers/base/result-builders.js +0 -112
- package/dist/providers/base/result-builders.js.map +0 -1
- package/dist/providers/base/time-check.d.ts +0 -9
- package/dist/providers/base/time-check.d.ts.map +0 -1
- package/dist/providers/base/time-check.js +0 -18
- package/dist/providers/base/time-check.js.map +0 -1
- package/dist/providers/base/types.d.ts +0 -53
- package/dist/providers/base/types.d.ts.map +0 -1
- package/dist/providers/base/types.js +0 -2
- package/dist/providers/base/types.js.map +0 -1
- package/dist/providers/base/usage-accumulator.d.ts +0 -9
- package/dist/providers/base/usage-accumulator.d.ts.map +0 -1
- package/dist/providers/base/usage-accumulator.js +0 -20
- package/dist/providers/base/usage-accumulator.js.map +0 -1
- package/dist/providers/call-cache.d.ts +0 -16
- package/dist/providers/call-cache.d.ts.map +0 -1
- package/dist/providers/call-cache.js +0 -28
- package/dist/providers/call-cache.js.map +0 -1
- package/dist/providers/file-tracker.d.ts +0 -80
- package/dist/providers/file-tracker.d.ts.map +0 -1
- package/dist/providers/file-tracker.js +0 -125
- package/dist/providers/file-tracker.js.map +0 -1
- package/dist/providers/injection-type.d.ts +0 -22
- package/dist/providers/injection-type.d.ts.map +0 -1
- package/dist/providers/injection-type.js +0 -34
- package/dist/providers/injection-type.js.map +0 -1
- package/dist/providers/make-runner-shell.d.ts +0 -4
- package/dist/providers/make-runner-shell.d.ts.map +0 -1
- package/dist/providers/make-runner-shell.js +0 -70
- package/dist/providers/make-runner-shell.js.map +0 -1
- package/dist/providers/openai-chat-adapter.d.ts +0 -15
- package/dist/providers/openai-chat-adapter.d.ts.map +0 -1
- package/dist/providers/openai-chat-adapter.js +0 -86
- package/dist/providers/openai-chat-adapter.js.map +0 -1
- package/dist/providers/openai-responses-adapter.d.ts +0 -15
- package/dist/providers/openai-responses-adapter.d.ts.map +0 -1
- package/dist/providers/openai-responses-adapter.js +0 -137
- package/dist/providers/openai-responses-adapter.js.map +0 -1
- package/dist/providers/openai-usage-interceptor.d.ts +0 -25
- package/dist/providers/openai-usage-interceptor.d.ts.map +0 -1
- package/dist/providers/openai-usage-interceptor.js +0 -121
- package/dist/providers/openai-usage-interceptor.js.map +0 -1
- package/dist/providers/prevention.d.ts +0 -44
- package/dist/providers/prevention.d.ts.map +0 -1
- package/dist/providers/prevention.js +0 -108
- package/dist/providers/prevention.js.map +0 -1
- package/dist/providers/runner-shell-types.d.ts +0 -91
- package/dist/providers/runner-shell-types.d.ts.map +0 -1
- package/dist/providers/runner-shell-types.js +0 -2
- package/dist/providers/runner-shell-types.js.map +0 -1
- package/dist/providers/runner-shell.d.ts +0 -67
- package/dist/providers/runner-shell.d.ts.map +0 -1
- package/dist/providers/runner-shell.js +0 -518
- package/dist/providers/runner-shell.js.map +0 -1
- package/dist/providers/scratchpad-salvager.d.ts +0 -19
- package/dist/providers/scratchpad-salvager.d.ts.map +0 -1
- package/dist/providers/scratchpad-salvager.js +0 -44
- package/dist/providers/scratchpad-salvager.js.map +0 -1
- package/dist/providers/supervision.d.ts +0 -108
- package/dist/providers/supervision.d.ts.map +0 -1
- package/dist/providers/supervision.js +0 -272
- package/dist/providers/supervision.js.map +0 -1
- package/dist/providers/text-scratchpad.d.ts +0 -28
- package/dist/providers/text-scratchpad.d.ts.map +0 -1
- package/dist/providers/text-scratchpad.js +0 -49
- package/dist/providers/text-scratchpad.js.map +0 -1
- package/dist/providers/tool-definitions.d.ts +0 -6
- package/dist/providers/tool-definitions.d.ts.map +0 -1
- package/dist/providers/tool-definitions.js +0 -236
- package/dist/providers/tool-definitions.js.map +0 -1
- package/dist/providers/tool-implementations.d.ts +0 -38
- package/dist/providers/tool-implementations.d.ts.map +0 -1
- package/dist/providers/tool-implementations.js +0 -254
- package/dist/providers/tool-implementations.js.map +0 -1
- package/dist/providers/tool-tracker.d.ts +0 -14
- package/dist/providers/tool-tracker.d.ts.map +0 -1
- package/dist/providers/tool-tracker.js +0 -13
- package/dist/providers/tool-tracker.js.map +0 -1
- package/dist/reporting/headline-templates/verify.d.ts +0 -3
- package/dist/reporting/headline-templates/verify.d.ts.map +0 -1
- package/dist/reporting/headline-templates/verify.js +0 -29
- package/dist/reporting/headline-templates/verify.js.map +0 -1
- package/dist/reporting/report-parser-slots/verify-report.d.ts +0 -27
- package/dist/reporting/report-parser-slots/verify-report.d.ts.map +0 -1
- package/dist/reporting/report-parser-slots/verify-report.js +0 -51
- package/dist/reporting/report-parser-slots/verify-report.js.map +0 -1
- package/dist/review/templates/annotator-verify.d.ts +0 -3
- package/dist/review/templates/annotator-verify.d.ts.map +0 -1
- package/dist/review/templates/annotator-verify.js +0 -21
- package/dist/review/templates/annotator-verify.js.map +0 -1
- package/dist/review/templates/quality-review-verify.d.ts +0 -3
- package/dist/review/templates/quality-review-verify.d.ts.map +0 -1
- package/dist/review/templates/quality-review-verify.js +0 -10
- package/dist/review/templates/quality-review-verify.js.map +0 -1
- package/dist/tools/verify/implementer-criteria.d.ts +0 -61
- package/dist/tools/verify/implementer-criteria.d.ts.map +0 -1
- package/dist/tools/verify/implementer-criteria.js +0 -125
- package/dist/tools/verify/implementer-criteria.js.map +0 -1
- package/dist/tools/verify/schema.d.ts +0 -56
- package/dist/tools/verify/schema.d.ts.map +0 -1
- package/dist/tools/verify/schema.js +0 -16
- package/dist/tools/verify/schema.js.map +0 -1
- package/dist/tools/verify/tool-config.d.ts +0 -14
- package/dist/tools/verify/tool-config.d.ts.map +0 -1
- package/dist/tools/verify/tool-config.js +0 -146
- package/dist/tools/verify/tool-config.js.map +0 -1
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import type { ProviderConfig } from '../types.js';
|
|
2
|
-
import type { TaskSpec } from '../types.js';
|
|
3
|
-
import type { ModelProfile } from '../config/model-profile-registry.js';
|
|
4
|
-
/**
|
|
5
|
-
* Sub-agent completion supervision.
|
|
6
|
-
*
|
|
7
|
-
* The runner calls validateCompletion() after every turn that ends without
|
|
8
|
-
* a tool call (the SDK signal "agent done"). If the result is degenerate,
|
|
9
|
-
* the runner injects a re-prompt and continues the loop instead of returning.
|
|
10
|
-
*
|
|
11
|
-
* See docs/superpowers/specs/2026-04-10-subagent-completion-supervision-design.md
|
|
12
|
-
* Parts A.2.2 and A.4 for the full contract.
|
|
13
|
-
*
|
|
14
|
-
* --- @openai/agents SDK introspection finding (from Task 1, Step 1) ---
|
|
15
|
-
* Happy path confirmed. The `@openai/agents` SDK (via @openai/agents-core)
|
|
16
|
-
* exposes intermediate assistant text on the returned `RunResult`:
|
|
17
|
-
* - `result.newItems: RunItem[]` is a discriminated union where entries of
|
|
18
|
-
* type `"message_output_item"` are `RunMessageOutputItem` instances with
|
|
19
|
-
* `rawItem.role === "assistant"` and `rawItem.content` carrying
|
|
20
|
-
* `{ type: "output_text", text: string }` parts (plus `refusal`, `audio`,
|
|
21
|
-
* `image`). See node_modules/@openai/agents-core/dist/items.d.ts around
|
|
22
|
-
* line 337 (class RunMessageOutputItem) and dist/result.d.ts lines 17-76
|
|
23
|
-
* (RunResultData interface — `newItems`, `output`, `history`, `state`).
|
|
24
|
-
* - `result.state` additionally holds the full RunState, and
|
|
25
|
-
* StreamedRunResult exposes a `RunStreamEvent` async iterator for
|
|
26
|
-
* live mid-run observation if we ever need true streaming.
|
|
27
|
-
* For our scratchpad needs the non-streaming path is sufficient: after any
|
|
28
|
-
* `agentRun(...)` call (including iterative re-prompt turns), we can iterate
|
|
29
|
-
* `result.newItems`, pick every `message_output_item`, concatenate its
|
|
30
|
-
* `output_text` parts, and append the result to the TextScratchpad. This
|
|
31
|
-
* gives us full intermediate salvage for openai-runner without dropping to
|
|
32
|
-
* the lower-level OpenAI client or patching hooks. Task 3 should implement
|
|
33
|
-
* this salvage extraction.
|
|
34
|
-
* ----------------------------------------------------------------------
|
|
35
|
-
*/
|
|
36
|
-
/** Classification of a degenerate model response, including coverage failures. */
|
|
37
|
-
export type DegenerateKind = 'empty' | 'thinking_only' | 'fragment' | 'no_terminator' | 'insufficient_coverage';
|
|
38
|
-
export interface ValidationResult {
|
|
39
|
-
valid: boolean;
|
|
40
|
-
kind?: DegenerateKind;
|
|
41
|
-
reason?: string;
|
|
42
|
-
/** Last 60 characters of the trimmed text, used by buildRePrompt. */
|
|
43
|
-
tail?: string;
|
|
44
|
-
}
|
|
45
|
-
export interface ValidateCompletionOptions {
|
|
46
|
-
minLength?: number;
|
|
47
|
-
}
|
|
48
|
-
export declare function validateCoverage(text: string, expected: NonNullable<TaskSpec['expectedCoverage']>): ValidationResult;
|
|
49
|
-
/**
|
|
50
|
-
* Marker returned by `stripThinkingTags` when the entire final message was
|
|
51
|
-
* `<think>...` reasoning and stripping left nothing. Exported here
|
|
52
|
-
* (rather than from openai-runner.ts) so that `validateCompletion` can detect
|
|
53
|
-
* the marker without importing the runner, and so other runners can reuse it
|
|
54
|
-
* when they implement their own thinking-only salvage. There is exactly one
|
|
55
|
-
* canonical constant.
|
|
56
|
-
*/
|
|
57
|
-
export declare const THINKING_DIAGNOSTIC_MARKER = "[model final message contained only <think>...</think> reasoning, no plain-text answer]";
|
|
58
|
-
export declare function validateCompletion(text: string, opts?: ValidateCompletionOptions): ValidationResult;
|
|
59
|
-
export declare function buildRePrompt(result: ValidationResult): string;
|
|
60
|
-
/**
|
|
61
|
-
* Compares two consecutive degenerate outputs for byte equality. Used by
|
|
62
|
-
* the supervision loop's same-output early-out: if the model produces
|
|
63
|
-
* identical garbage twice in a row, give up immediately instead of
|
|
64
|
-
* burning the third retry.
|
|
65
|
-
*/
|
|
66
|
-
export declare function sameDegenerateOutput(a: string, b: string): boolean;
|
|
67
|
-
/**
|
|
68
|
-
* Resolves the effective inputTokenSoftLimit for a (provider, profile) pair.
|
|
69
|
-
*
|
|
70
|
-
* Precedence: `config.inputTokenSoftLimit` (user override) wins over
|
|
71
|
-
* `profile.inputTokenSoftLimit` (family default).
|
|
72
|
-
*
|
|
73
|
-
* Both fields are Zod-validated upstream:
|
|
74
|
-
* - `ProviderConfig.inputTokenSoftLimit` — `z.number().int().positive().optional()`
|
|
75
|
-
* (see packages/core/src/config/schema.ts)
|
|
76
|
-
* - `ModelProfile.inputTokenSoftLimit` — `z.number().int().positive()` (required)
|
|
77
|
-
*
|
|
78
|
-
* Because profile is guaranteed to carry a positive integer (DEFAULT_PROFILE
|
|
79
|
-
* supplies `100_000` when no prefix matches), there is no hardcoded
|
|
80
|
-
* constant fallback — the DEFAULT_PROFILE value is the de-facto fallback
|
|
81
|
-
* for unprofiled model IDs.
|
|
82
|
-
*/
|
|
83
|
-
export declare function resolveInputTokenSoftLimit(config: ProviderConfig, profile: ModelProfile): number;
|
|
84
|
-
/**
|
|
85
|
-
* Coordinator for sub-agent output validation.
|
|
86
|
-
*
|
|
87
|
-
* Priority order (most authoritative first):
|
|
88
|
-
*
|
|
89
|
-
* 1. `empty` and `thinking_only` always fail — degeneracy checks.
|
|
90
|
-
* 2. `expectedCoverage` declared and passes → valid (caller-declared, most trustworthy).
|
|
91
|
-
* 3. `expectedCoverage` declared and fails → invalid.
|
|
92
|
-
* 4. `workerStatus: 'done'` + (hasCompletedWork or skipCompletionHeuristic) → valid
|
|
93
|
-
* (worker says done AND there's evidence of work or caller opted out).
|
|
94
|
-
* 5. `workerStatus: 'done'` without work evidence → trust if output passes heuristic.
|
|
95
|
-
* 6. `workerStatus: 'done_with_concerns'` + hasCompletedWork → valid.
|
|
96
|
-
* 7. `skipCompletionHeuristic` or `hasCompletedWork` (without workerStatus) → valid.
|
|
97
|
-
* 8. Fall through to `fragment`/`no_terminator` heuristic (last resort).
|
|
98
|
-
*
|
|
99
|
-
* `needs_context` and `blocked` are never auto-validated.
|
|
100
|
-
*/
|
|
101
|
-
export declare function validateSubAgentOutput(text: string, opts?: {
|
|
102
|
-
expectedCoverage?: TaskSpec['expectedCoverage'];
|
|
103
|
-
skipCompletionHeuristic?: boolean;
|
|
104
|
-
workerStatus?: 'done' | 'done_with_concerns' | 'needs_context' | 'blocked';
|
|
105
|
-
hasCompletedWork?: boolean;
|
|
106
|
-
hasFileArtifacts?: boolean;
|
|
107
|
-
}): ValidationResult;
|
|
108
|
-
//# sourceMappingURL=supervision.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"supervision.d.ts","sourceRoot":"","sources":["../../src/providers/supervision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,kFAAkF;AAClF,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,eAAe,GACf,UAAU,GACV,eAAe,GACf,uBAAuB,CAAC;AAE5B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,GAClD,gBAAgB,CAqClB;AAUD;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,4FACoD,CAAC;AA0D5F,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,yBAA8B,GACnC,gBAAgB,CAoDlB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAqD9D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAElE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,YAAY,GACpB,MAAM,CAER;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IACJ,gBAAgB,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAChD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,eAAe,GAAG,SAAS,CAAC;IAC3E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,GACL,gBAAgB,CAuClB"}
|
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
export function validateCoverage(text, expected) {
|
|
2
|
-
if (expected.minSections !== undefined) {
|
|
3
|
-
const pattern = expected.sectionPattern ?? '^## ';
|
|
4
|
-
let re;
|
|
5
|
-
try {
|
|
6
|
-
re = new RegExp(pattern, 'gm');
|
|
7
|
-
}
|
|
8
|
-
catch (err) {
|
|
9
|
-
return {
|
|
10
|
-
valid: false,
|
|
11
|
-
kind: 'insufficient_coverage',
|
|
12
|
-
reason: `invalid sectionPattern regex: ${err instanceof Error ? err.message : String(err)}`,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
const count = (text.match(re) ?? []).length;
|
|
16
|
-
if (count < expected.minSections) {
|
|
17
|
-
return {
|
|
18
|
-
valid: false,
|
|
19
|
-
kind: 'insufficient_coverage',
|
|
20
|
-
reason: `only ${count} sections found, expected at least ${expected.minSections}`,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
if (expected.requiredMarkers?.length) {
|
|
25
|
-
const missing = expected.requiredMarkers.filter((marker) => !text.includes(marker));
|
|
26
|
-
if (missing.length > 0) {
|
|
27
|
-
const preview = missing.slice(0, 5).join(', ');
|
|
28
|
-
const extra = missing.length > 5 ? ` (+${missing.length - 5} more)` : '';
|
|
29
|
-
return {
|
|
30
|
-
valid: false,
|
|
31
|
-
kind: 'insufficient_coverage',
|
|
32
|
-
reason: `only ${expected.requiredMarkers.length - missing.length} of ${expected.requiredMarkers.length} required markers found, missing: ${preview}${extra}`,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return { valid: true };
|
|
37
|
-
}
|
|
38
|
-
const DEFAULT_MIN_LENGTH = 10;
|
|
39
|
-
/** Tail window (chars) inspected by `endsWithContinuation` for continuation phrases. */
|
|
40
|
-
const CONTINUATION_TAIL_WINDOW = 80;
|
|
41
|
-
/** Tail length (chars) quoted back to the model in the re-prompt via `result.tail`. */
|
|
42
|
-
const REPROMPT_TAIL_QUOTE = 60;
|
|
43
|
-
/**
|
|
44
|
-
* Marker returned by `stripThinkingTags` when the entire final message was
|
|
45
|
-
* `<think>...` reasoning and stripping left nothing. Exported here
|
|
46
|
-
* (rather than from openai-runner.ts) so that `validateCompletion` can detect
|
|
47
|
-
* the marker without importing the runner, and so other runners can reuse it
|
|
48
|
-
* when they implement their own thinking-only salvage. There is exactly one
|
|
49
|
-
* canonical constant.
|
|
50
|
-
*/
|
|
51
|
-
export const THINKING_DIAGNOSTIC_MARKER = '[model final message contained only <think>...</think> reasoning, no plain-text answer]';
|
|
52
|
-
const CONTINUATION_PHRASES = [
|
|
53
|
-
'let me',
|
|
54
|
-
'let me check',
|
|
55
|
-
'let me read',
|
|
56
|
-
'let me look',
|
|
57
|
-
'next i',
|
|
58
|
-
"i'll continue",
|
|
59
|
-
'i need to',
|
|
60
|
-
"now i'll",
|
|
61
|
-
'i should also',
|
|
62
|
-
'checking',
|
|
63
|
-
"i'll now",
|
|
64
|
-
];
|
|
65
|
-
const FRAGMENT_PUNCTUATION = [':', ',', '…'];
|
|
66
|
-
const TERMINAL_PUNCTUATION = ['.', '!', '?', '`', ')', ']', '}'];
|
|
67
|
-
const MARKDOWN_HINTS = [/^#{1,6} /m, /^- /m, /^\d+\. /m, /```/];
|
|
68
|
-
function endsWithContinuation(tail) {
|
|
69
|
-
const lower = tail.toLowerCase();
|
|
70
|
-
return CONTINUATION_PHRASES.some((p) => lower.endsWith(p) || lower.includes(p));
|
|
71
|
-
}
|
|
72
|
-
function endsWithFragmentPunctuation(text) {
|
|
73
|
-
const trimmed = text.trimEnd();
|
|
74
|
-
return FRAGMENT_PUNCTUATION.some((p) => trimmed.endsWith(p));
|
|
75
|
-
}
|
|
76
|
-
function hasMarkdownStructure(text) {
|
|
77
|
-
return MARKDOWN_HINTS.some((re) => re.test(text));
|
|
78
|
-
}
|
|
79
|
-
function endsWithTerminalPunctuation(text) {
|
|
80
|
-
const trimmed = text.trimEnd();
|
|
81
|
-
if (trimmed.length === 0)
|
|
82
|
-
return false;
|
|
83
|
-
const last = trimmed[trimmed.length - 1];
|
|
84
|
-
return TERMINAL_PUNCTUATION.includes(last);
|
|
85
|
-
}
|
|
86
|
-
// Detector order:
|
|
87
|
-
// empty → thinking_only → fragment (always, up to FRAGMENT_MAX_LENGTH) →
|
|
88
|
-
// long-enough → markdown → no_terminator.
|
|
89
|
-
//
|
|
90
|
-
// Fragment detection runs BEFORE the length auto-accept because "let me check..."
|
|
91
|
-
// and "Here is what I found:" are real mid-work stalls regardless of length.
|
|
92
|
-
// But we cap it at FRAGMENT_MAX_LENGTH so a 500-char response that happens to
|
|
93
|
-
// contain "let me" deep inside isn't falsely rejected.
|
|
94
|
-
//
|
|
95
|
-
// The no_terminator check only fires for very short responses (< DEFAULT_MIN_LENGTH)
|
|
96
|
-
// since it's low-value — most short complete answers end with punctuation naturally.
|
|
97
|
-
/** Fragment detection applies to text under this length. Above it, continuation
|
|
98
|
-
* phrases in the tail are likely part of a valid longer response. */
|
|
99
|
-
const FRAGMENT_MAX_LENGTH = 120;
|
|
100
|
-
export function validateCompletion(text, opts = {}) {
|
|
101
|
-
const minLength = opts.minLength ?? DEFAULT_MIN_LENGTH;
|
|
102
|
-
if (!text || text.trim().length === 0) {
|
|
103
|
-
return { valid: false, kind: 'empty', reason: 'response was empty' };
|
|
104
|
-
}
|
|
105
|
-
if (text.trim() === THINKING_DIAGNOSTIC_MARKER) {
|
|
106
|
-
return {
|
|
107
|
-
valid: false,
|
|
108
|
-
kind: 'thinking_only',
|
|
109
|
-
reason: 'response contained only <think> reasoning content',
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
const trimmed = text.trim();
|
|
113
|
-
const tail = trimmed.slice(-CONTINUATION_TAIL_WINDOW);
|
|
114
|
-
// Fragment detection: catches real mid-work stalls ("let me check...",
|
|
115
|
-
// "Here is what I found:") regardless of length, up to FRAGMENT_MAX_LENGTH.
|
|
116
|
-
// Above that cap, continuation phrases are likely part of a valid response.
|
|
117
|
-
if (trimmed.length < FRAGMENT_MAX_LENGTH) {
|
|
118
|
-
if (endsWithFragmentPunctuation(trimmed) || endsWithContinuation(tail)) {
|
|
119
|
-
return {
|
|
120
|
-
valid: false,
|
|
121
|
-
kind: 'fragment',
|
|
122
|
-
reason: 'response ends like an exploration fragment',
|
|
123
|
-
tail: trimmed.slice(-REPROMPT_TAIL_QUOTE),
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// Long enough → trust the response.
|
|
128
|
-
if (trimmed.length >= minLength) {
|
|
129
|
-
return { valid: true };
|
|
130
|
-
}
|
|
131
|
-
// Very short responses (< minLength, currently 10 chars): valid only with
|
|
132
|
-
// markdown structure or terminal punctuation.
|
|
133
|
-
if (hasMarkdownStructure(trimmed)) {
|
|
134
|
-
return { valid: true };
|
|
135
|
-
}
|
|
136
|
-
if (!endsWithTerminalPunctuation(trimmed)) {
|
|
137
|
-
return {
|
|
138
|
-
valid: false,
|
|
139
|
-
kind: 'no_terminator',
|
|
140
|
-
reason: 'response is very short and has no terminal punctuation or markdown structure',
|
|
141
|
-
tail: trimmed.slice(-REPROMPT_TAIL_QUOTE),
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
return { valid: true };
|
|
145
|
-
}
|
|
146
|
-
export function buildRePrompt(result) {
|
|
147
|
-
if (result.valid) {
|
|
148
|
-
throw new Error('buildRePrompt called on a valid response — this is a bug');
|
|
149
|
-
}
|
|
150
|
-
switch (result.kind) {
|
|
151
|
-
case 'empty':
|
|
152
|
-
return [
|
|
153
|
-
'Your previous response was empty. You did not produce a final answer to the task',
|
|
154
|
-
'and did not call any tools. Please respond again with your complete final answer',
|
|
155
|
-
'as plain text in this assistant message. The final answer is what gets returned',
|
|
156
|
-
'to the caller — there are no follow-up turns after you produce it. If you are not',
|
|
157
|
-
'yet done, call the tools you need first; otherwise produce the final answer now.',
|
|
158
|
-
].join(' ');
|
|
159
|
-
case 'thinking_only':
|
|
160
|
-
return [
|
|
161
|
-
'Your previous response contained only <think>... reasoning, with no',
|
|
162
|
-
'plain-text answer outside the tags. The reasoning tags are stripped before the',
|
|
163
|
-
'response is returned to the caller, so a thinking-only response is equivalent',
|
|
164
|
-
'to no response at all. Please respond again with your complete final answer as',
|
|
165
|
-
'plain text outside any reasoning tags.',
|
|
166
|
-
].join(' ');
|
|
167
|
-
case 'fragment': {
|
|
168
|
-
const tail = result.tail ?? '';
|
|
169
|
-
return [
|
|
170
|
-
`Your previous response was an exploration fragment (it ended with "${tail}")`,
|
|
171
|
-
'rather than a final answer. You appear to have stopped mid-thought instead of',
|
|
172
|
-
'completing the task. Either: (a) continue exploring by calling the tools you',
|
|
173
|
-
'need, then produce your final answer, or (b) produce your complete final answer',
|
|
174
|
-
'now with whatever you have gathered so far — partial answers are acceptable and',
|
|
175
|
-
'useful, empty responses are not. Your final answer must be a plain-text',
|
|
176
|
-
'assistant message, not a tool call and not a thinking block.',
|
|
177
|
-
].join(' ');
|
|
178
|
-
}
|
|
179
|
-
case 'no_terminator': {
|
|
180
|
-
const tail = result.tail ?? '';
|
|
181
|
-
return [
|
|
182
|
-
`Your previous response appears to have stopped mid-thought (it ended with`,
|
|
183
|
-
`"${tail}"). Please produce your complete final answer with terminal punctuation`,
|
|
184
|
-
'or proper markdown structure. If you are still working, call the tools you need',
|
|
185
|
-
'first; otherwise produce the final answer now.',
|
|
186
|
-
].join(' ');
|
|
187
|
-
}
|
|
188
|
-
case 'insufficient_coverage':
|
|
189
|
-
return `Your previous answer was structurally valid but does not cover everything the brief required: ${result.reason}. Continue your report by addressing the missing items. Do NOT restart from the beginning — append the missing sections to what you already wrote.`;
|
|
190
|
-
default:
|
|
191
|
-
return 'Your previous response was incomplete. Please produce your complete final answer as plain text.';
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Compares two consecutive degenerate outputs for byte equality. Used by
|
|
196
|
-
* the supervision loop's same-output early-out: if the model produces
|
|
197
|
-
* identical garbage twice in a row, give up immediately instead of
|
|
198
|
-
* burning the third retry.
|
|
199
|
-
*/
|
|
200
|
-
export function sameDegenerateOutput(a, b) {
|
|
201
|
-
return a.trim() === b.trim();
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Resolves the effective inputTokenSoftLimit for a (provider, profile) pair.
|
|
205
|
-
*
|
|
206
|
-
* Precedence: `config.inputTokenSoftLimit` (user override) wins over
|
|
207
|
-
* `profile.inputTokenSoftLimit` (family default).
|
|
208
|
-
*
|
|
209
|
-
* Both fields are Zod-validated upstream:
|
|
210
|
-
* - `ProviderConfig.inputTokenSoftLimit` — `z.number().int().positive().optional()`
|
|
211
|
-
* (see packages/core/src/config/schema.ts)
|
|
212
|
-
* - `ModelProfile.inputTokenSoftLimit` — `z.number().int().positive()` (required)
|
|
213
|
-
*
|
|
214
|
-
* Because profile is guaranteed to carry a positive integer (DEFAULT_PROFILE
|
|
215
|
-
* supplies `100_000` when no prefix matches), there is no hardcoded
|
|
216
|
-
* constant fallback — the DEFAULT_PROFILE value is the de-facto fallback
|
|
217
|
-
* for unprofiled model IDs.
|
|
218
|
-
*/
|
|
219
|
-
export function resolveInputTokenSoftLimit(config, profile) {
|
|
220
|
-
return config.inputTokenSoftLimit ?? profile.inputTokenSoftLimit;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Coordinator for sub-agent output validation.
|
|
224
|
-
*
|
|
225
|
-
* Priority order (most authoritative first):
|
|
226
|
-
*
|
|
227
|
-
* 1. `empty` and `thinking_only` always fail — degeneracy checks.
|
|
228
|
-
* 2. `expectedCoverage` declared and passes → valid (caller-declared, most trustworthy).
|
|
229
|
-
* 3. `expectedCoverage` declared and fails → invalid.
|
|
230
|
-
* 4. `workerStatus: 'done'` + (hasCompletedWork or skipCompletionHeuristic) → valid
|
|
231
|
-
* (worker says done AND there's evidence of work or caller opted out).
|
|
232
|
-
* 5. `workerStatus: 'done'` without work evidence → trust if output passes heuristic.
|
|
233
|
-
* 6. `workerStatus: 'done_with_concerns'` + hasCompletedWork → valid.
|
|
234
|
-
* 7. `skipCompletionHeuristic` or `hasCompletedWork` (without workerStatus) → valid.
|
|
235
|
-
* 8. Fall through to `fragment`/`no_terminator` heuristic (last resort).
|
|
236
|
-
*
|
|
237
|
-
* `needs_context` and `blocked` are never auto-validated.
|
|
238
|
-
*/
|
|
239
|
-
export function validateSubAgentOutput(text, opts = {}) {
|
|
240
|
-
// 1. Degeneracy checks
|
|
241
|
-
const completion = validateCompletion(text);
|
|
242
|
-
if (!completion.valid &&
|
|
243
|
-
(completion.kind === 'empty' || completion.kind === 'thinking_only')) {
|
|
244
|
-
return completion;
|
|
245
|
-
}
|
|
246
|
-
// 2-3. expectedCoverage — most authoritative when declared
|
|
247
|
-
if (opts.expectedCoverage) {
|
|
248
|
-
const coverage = validateCoverage(text, opts.expectedCoverage);
|
|
249
|
-
if (!coverage.valid)
|
|
250
|
-
return coverage;
|
|
251
|
-
return { valid: true };
|
|
252
|
-
}
|
|
253
|
-
// 4. workerStatus: 'done' + work evidence → trust it
|
|
254
|
-
if (opts.workerStatus === 'done' && (opts.hasCompletedWork || opts.hasFileArtifacts || opts.skipCompletionHeuristic)) {
|
|
255
|
-
return { valid: true };
|
|
256
|
-
}
|
|
257
|
-
// 5. workerStatus: 'done' without evidence → trust if output passes heuristic
|
|
258
|
-
if (opts.workerStatus === 'done') {
|
|
259
|
-
return completion;
|
|
260
|
-
}
|
|
261
|
-
// 6. done_with_concerns + work evidence → trust it
|
|
262
|
-
if (opts.workerStatus === 'done_with_concerns' && (opts.hasCompletedWork || opts.hasFileArtifacts)) {
|
|
263
|
-
return { valid: true };
|
|
264
|
-
}
|
|
265
|
-
// 7. skipCompletionHeuristic or hasCompletedWork without workerStatus
|
|
266
|
-
if (opts.skipCompletionHeuristic || opts.hasCompletedWork) {
|
|
267
|
-
return { valid: true };
|
|
268
|
-
}
|
|
269
|
-
// 8. Fall through to heuristic
|
|
270
|
-
return completion;
|
|
271
|
-
}
|
|
272
|
-
//# sourceMappingURL=supervision.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"supervision.js","sourceRoot":"","sources":["../../src/providers/supervision.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TextScratchpad — accumulates assistant text emissions across turns of a
|
|
3
|
-
* sub-agent run. The runner appends text from each turn so that, on any
|
|
4
|
-
* termination (clean exit, abort, timeout, error), the salvage layer can
|
|
5
|
-
* return the best buffered text instead of an empty string.
|
|
6
|
-
*
|
|
7
|
-
* See docs/superpowers/specs/2026-04-10-subagent-completion-supervision-design.md
|
|
8
|
-
* Part A.2.1 for the design rationale.
|
|
9
|
-
*/
|
|
10
|
-
export declare class TextScratchpad {
|
|
11
|
-
private turns;
|
|
12
|
-
/** Record a non-empty text emission for the given turn. Empty/whitespace
|
|
13
|
-
* emissions are ignored — they have no salvage value. */
|
|
14
|
-
append(turn: number, text: string): void;
|
|
15
|
-
isEmpty(): boolean;
|
|
16
|
-
/** All buffered text concatenated, in turn order, separated by a fixed
|
|
17
|
-
* delimiter. Used as the salvage payload when no clean final answer
|
|
18
|
-
* was produced. */
|
|
19
|
-
toString(): string;
|
|
20
|
-
/** The most recent buffered emission. Empty string if isEmpty(). */
|
|
21
|
-
latest(): string;
|
|
22
|
-
/** The longest buffered emission across all turns. Empty string if
|
|
23
|
-
* isEmpty(). Used by the escalation layer to pick the best salvageable
|
|
24
|
-
* result across multiple provider attempts. */
|
|
25
|
-
longest(): string;
|
|
26
|
-
reset(): void;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=text-scratchpad.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text-scratchpad.d.ts","sourceRoot":"","sources":["../../src/providers/text-scratchpad.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAwC;IAErD;8DAC0D;IAC1D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxC,OAAO,IAAI,OAAO;IAIlB;;wBAEoB;IACpB,QAAQ,IAAI,MAAM;IAIlB,oEAAoE;IACpE,MAAM,IAAI,MAAM;IAIhB;;oDAEgD;IAChD,OAAO,IAAI,MAAM;IASjB,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TextScratchpad — accumulates assistant text emissions across turns of a
|
|
3
|
-
* sub-agent run. The runner appends text from each turn so that, on any
|
|
4
|
-
* termination (clean exit, abort, timeout, error), the salvage layer can
|
|
5
|
-
* return the best buffered text instead of an empty string.
|
|
6
|
-
*
|
|
7
|
-
* See docs/superpowers/specs/2026-04-10-subagent-completion-supervision-design.md
|
|
8
|
-
* Part A.2.1 for the design rationale.
|
|
9
|
-
*/
|
|
10
|
-
export class TextScratchpad {
|
|
11
|
-
turns = [];
|
|
12
|
-
/** Record a non-empty text emission for the given turn. Empty/whitespace
|
|
13
|
-
* emissions are ignored — they have no salvage value. */
|
|
14
|
-
append(turn, text) {
|
|
15
|
-
if (!text || text.trim().length === 0)
|
|
16
|
-
return;
|
|
17
|
-
this.turns.push({ turn, text });
|
|
18
|
-
}
|
|
19
|
-
isEmpty() {
|
|
20
|
-
return this.turns.length === 0;
|
|
21
|
-
}
|
|
22
|
-
/** All buffered text concatenated, in turn order, separated by a fixed
|
|
23
|
-
* delimiter. Used as the salvage payload when no clean final answer
|
|
24
|
-
* was produced. */
|
|
25
|
-
toString() {
|
|
26
|
-
return this.turns.map((t) => t.text).join('\n\n---\n\n');
|
|
27
|
-
}
|
|
28
|
-
/** The most recent buffered emission. Empty string if isEmpty(). */
|
|
29
|
-
latest() {
|
|
30
|
-
return this.turns.length === 0 ? '' : this.turns[this.turns.length - 1].text;
|
|
31
|
-
}
|
|
32
|
-
/** The longest buffered emission across all turns. Empty string if
|
|
33
|
-
* isEmpty(). Used by the escalation layer to pick the best salvageable
|
|
34
|
-
* result across multiple provider attempts. */
|
|
35
|
-
longest() {
|
|
36
|
-
if (this.turns.length === 0)
|
|
37
|
-
return '';
|
|
38
|
-
let best = this.turns[0].text;
|
|
39
|
-
for (const t of this.turns) {
|
|
40
|
-
if (t.text.length > best.length)
|
|
41
|
-
best = t.text;
|
|
42
|
-
}
|
|
43
|
-
return best;
|
|
44
|
-
}
|
|
45
|
-
reset() {
|
|
46
|
-
this.turns = [];
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=text-scratchpad.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text-scratchpad.js","sourceRoot":"","sources":["../../src/providers/text-scratchpad.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAc;IACjB,KAAK,GAAqC,EAAE,CAAC;IAErD;8DAC0D;IAC1D,MAAM,CAAC,IAAY,EAAE,IAAY;QAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;wBAEoB;IACpB,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED,oEAAoE;IACpE,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,CAAC;IAED;;oDAEgD;IAChD,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACvC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;gBAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-definitions.d.ts","sourceRoot":"","sources":["../../src/providers/tool-definitions.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAiC9D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B,GAAG,cAAc,EAAE,CAyMnB"}
|