@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,236 +0,0 @@
|
|
|
1
|
-
import { readFile, writeFile, mkdir, realpath, stat } from 'node:fs/promises';
|
|
2
|
-
import { resolve, sep, dirname, basename } from 'node:path';
|
|
3
|
-
import { glob as fsGlob } from 'node:fs/promises';
|
|
4
|
-
import { exec } from 'node:child_process';
|
|
5
|
-
import { promisify } from 'node:util';
|
|
6
|
-
import { CWDValidator } from '../identity/cwd-validator.js';
|
|
7
|
-
import { SSRFGuard } from '../identity/ssrf-guard.js';
|
|
8
|
-
import { HostAllowlist } from '../identity/host-allowlist.js';
|
|
9
|
-
const execAsync = promisify(exec);
|
|
10
|
-
const MAX_READ_FILE_BYTES = 50 * 1024 * 1024;
|
|
11
|
-
const MAX_WRITE_FILE_BYTES = 100 * 1024 * 1024;
|
|
12
|
-
function isWithin(parent, child) {
|
|
13
|
-
return child === parent || child.startsWith(parent + sep);
|
|
14
|
-
}
|
|
15
|
-
async function resolveReal(target) {
|
|
16
|
-
try {
|
|
17
|
-
return await realpath(target);
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
const parent = dirname(target);
|
|
21
|
-
if (parent === target)
|
|
22
|
-
return target;
|
|
23
|
-
const realParent = await resolveReal(parent);
|
|
24
|
-
return resolve(realParent, basename(target));
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
async function assertWithinCwd(cwd, resolved) {
|
|
28
|
-
const realCwd = await realpath(cwd);
|
|
29
|
-
const realResolved = await resolveReal(resolved);
|
|
30
|
-
if (!isWithin(realCwd, realResolved)) {
|
|
31
|
-
throw new Error(`Path traversal denied: "${resolved}" is outside working directory "${cwd}"`);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
export function makeToolDefinitions(opts) {
|
|
35
|
-
const cwdValidator = new CWDValidator(opts.cwd);
|
|
36
|
-
const ssrfGuard = new SSRFGuard();
|
|
37
|
-
const hostAllowlist = opts.allowedHosts ? new HostAllowlist(opts.allowedHosts) : undefined;
|
|
38
|
-
return [
|
|
39
|
-
{
|
|
40
|
-
name: 'read_file',
|
|
41
|
-
description: 'Read a UTF-8 file (cwd-only)',
|
|
42
|
-
schema: {
|
|
43
|
-
type: 'object',
|
|
44
|
-
properties: { path: { type: 'string' } },
|
|
45
|
-
required: ['path'],
|
|
46
|
-
},
|
|
47
|
-
execute: async (input) => {
|
|
48
|
-
const safe = cwdValidator.validate(input.path);
|
|
49
|
-
const stats = await stat(safe);
|
|
50
|
-
if (stats.size > MAX_READ_FILE_BYTES) {
|
|
51
|
-
throw new Error(`File too large: ${input.path} is ${stats.size} bytes (max ${MAX_READ_FILE_BYTES})`);
|
|
52
|
-
}
|
|
53
|
-
return { contents: await readFile(safe, 'utf8') };
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
name: 'write_file',
|
|
58
|
-
description: 'Write a UTF-8 file (cwd-only)',
|
|
59
|
-
schema: {
|
|
60
|
-
type: 'object',
|
|
61
|
-
properties: {
|
|
62
|
-
path: { type: 'string' },
|
|
63
|
-
content: { type: 'string' },
|
|
64
|
-
},
|
|
65
|
-
required: ['path', 'content'],
|
|
66
|
-
},
|
|
67
|
-
execute: async (input) => {
|
|
68
|
-
const safe = cwdValidator.validate(input.path);
|
|
69
|
-
if (input.content.length > MAX_WRITE_FILE_BYTES) {
|
|
70
|
-
throw new Error(`Content too large: ${input.content.length} bytes (max ${MAX_WRITE_FILE_BYTES})`);
|
|
71
|
-
}
|
|
72
|
-
await mkdir(dirname(safe), { recursive: true });
|
|
73
|
-
await writeFile(safe, input.content, 'utf8');
|
|
74
|
-
return { written: true };
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
name: 'edit_file',
|
|
79
|
-
description: 'Replace a unique string in an existing file (cwd-only)',
|
|
80
|
-
schema: {
|
|
81
|
-
type: 'object',
|
|
82
|
-
properties: {
|
|
83
|
-
path: { type: 'string' },
|
|
84
|
-
oldContent: { type: 'string' },
|
|
85
|
-
newContent: { type: 'string' },
|
|
86
|
-
},
|
|
87
|
-
required: ['path', 'oldContent', 'newContent'],
|
|
88
|
-
},
|
|
89
|
-
execute: async (input) => {
|
|
90
|
-
const safe = cwdValidator.validate(input.path);
|
|
91
|
-
const existing = await readFile(safe, 'utf8');
|
|
92
|
-
const firstIndex = existing.indexOf(input.oldContent);
|
|
93
|
-
if (firstIndex === -1) {
|
|
94
|
-
throw new Error(`oldContent not found in file "${input.path}"`);
|
|
95
|
-
}
|
|
96
|
-
const secondIndex = existing.indexOf(input.oldContent, firstIndex + input.oldContent.length);
|
|
97
|
-
if (secondIndex !== -1) {
|
|
98
|
-
throw new Error(`oldContent matches multiple locations in "${input.path}" — provide more surrounding context for a unique match`);
|
|
99
|
-
}
|
|
100
|
-
const updated = existing.slice(0, firstIndex) +
|
|
101
|
-
input.newContent +
|
|
102
|
-
existing.slice(firstIndex + input.oldContent.length);
|
|
103
|
-
if (updated.length > MAX_WRITE_FILE_BYTES) {
|
|
104
|
-
throw new Error(`Edited content too large: ${updated.length} bytes (max ${MAX_WRITE_FILE_BYTES})`);
|
|
105
|
-
}
|
|
106
|
-
await writeFile(safe, updated, 'utf8');
|
|
107
|
-
return { edited: true };
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
name: 'glob',
|
|
112
|
-
description: 'Find files matching a glob pattern (cwd-only)',
|
|
113
|
-
schema: {
|
|
114
|
-
type: 'object',
|
|
115
|
-
properties: { pattern: { type: 'string' } },
|
|
116
|
-
required: ['pattern'],
|
|
117
|
-
},
|
|
118
|
-
execute: async (input) => {
|
|
119
|
-
const results = [];
|
|
120
|
-
const realCwd = await realpath(opts.cwd);
|
|
121
|
-
for await (const entry of fsGlob(input.pattern, { cwd: opts.cwd })) {
|
|
122
|
-
const abs = resolve(opts.cwd, entry);
|
|
123
|
-
let real;
|
|
124
|
-
try {
|
|
125
|
-
real = await realpath(abs);
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
real = abs;
|
|
129
|
-
}
|
|
130
|
-
if (!isWithin(realCwd, real))
|
|
131
|
-
continue;
|
|
132
|
-
results.push(entry);
|
|
133
|
-
}
|
|
134
|
-
return { matches: results.sort() };
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
name: 'grep',
|
|
139
|
-
description: 'Search for a regex pattern in a file or directory (cwd-only)',
|
|
140
|
-
schema: {
|
|
141
|
-
type: 'object',
|
|
142
|
-
properties: {
|
|
143
|
-
pattern: { type: 'string' },
|
|
144
|
-
path: { type: 'string' },
|
|
145
|
-
},
|
|
146
|
-
required: ['pattern', 'path'],
|
|
147
|
-
},
|
|
148
|
-
execute: async (input) => {
|
|
149
|
-
const safe = cwdValidator.validate(input.path);
|
|
150
|
-
let isDirectory = false;
|
|
151
|
-
try {
|
|
152
|
-
const stats = await stat(safe);
|
|
153
|
-
isDirectory = stats.isDirectory();
|
|
154
|
-
}
|
|
155
|
-
catch (err) {
|
|
156
|
-
if (err.code === 'ENOENT') {
|
|
157
|
-
throw new Error(`grep target does not exist: ${input.path}`);
|
|
158
|
-
}
|
|
159
|
-
throw err;
|
|
160
|
-
}
|
|
161
|
-
const flags = isDirectory ? '-rn' : '-n';
|
|
162
|
-
const escapedPattern = input.pattern.replace(/'/g, "'\\''");
|
|
163
|
-
const escapedPath = safe.replace(/'/g, "'\\''");
|
|
164
|
-
try {
|
|
165
|
-
const { stdout } = await execAsync(`grep ${flags} -e '${escapedPattern}' '${escapedPath}'`, { maxBuffer: 4 * 1024 * 1024 });
|
|
166
|
-
return { output: stdout.trim() };
|
|
167
|
-
}
|
|
168
|
-
catch (err) {
|
|
169
|
-
if (err.code === 1)
|
|
170
|
-
return { output: '' };
|
|
171
|
-
throw new Error(err.stderr?.trim() || `grep failed with exit code ${err.code}`);
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
name: 'list_files',
|
|
177
|
-
description: 'List files and directories at the given path (cwd-only)',
|
|
178
|
-
schema: {
|
|
179
|
-
type: 'object',
|
|
180
|
-
properties: { path: { type: 'string' } },
|
|
181
|
-
},
|
|
182
|
-
execute: async (input) => {
|
|
183
|
-
const target = input.path ?? '.';
|
|
184
|
-
const safe = cwdValidator.validate(target);
|
|
185
|
-
const { readdir } = await import('node:fs/promises');
|
|
186
|
-
const entries = await readdir(safe, { withFileTypes: true });
|
|
187
|
-
return {
|
|
188
|
-
entries: entries.map(e => (e.isDirectory() ? `${e.name}/` : e.name)).sort(),
|
|
189
|
-
};
|
|
190
|
-
},
|
|
191
|
-
},
|
|
192
|
-
{
|
|
193
|
-
name: 'run_shell',
|
|
194
|
-
description: 'Execute a shell command (cwd-confined)',
|
|
195
|
-
schema: {
|
|
196
|
-
type: 'object',
|
|
197
|
-
properties: { command: { type: 'string' } },
|
|
198
|
-
required: ['command'],
|
|
199
|
-
},
|
|
200
|
-
execute: async (input) => {
|
|
201
|
-
try {
|
|
202
|
-
const { stdout, stderr } = await execAsync(input.command, {
|
|
203
|
-
cwd: opts.cwd,
|
|
204
|
-
timeout: 120_000,
|
|
205
|
-
maxBuffer: 10 * 1024 * 1024,
|
|
206
|
-
});
|
|
207
|
-
return { stdout, stderr, exitCode: 0 };
|
|
208
|
-
}
|
|
209
|
-
catch (err) {
|
|
210
|
-
return {
|
|
211
|
-
stdout: err.stdout ?? '',
|
|
212
|
-
stderr: err.stderr ?? '',
|
|
213
|
-
exitCode: typeof err.code === 'number' ? err.code : 1,
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
},
|
|
217
|
-
},
|
|
218
|
-
{
|
|
219
|
-
name: 'web_fetch',
|
|
220
|
-
description: 'Fetch a URL (SSRF-guarded; HostAllowlist when configured)',
|
|
221
|
-
schema: {
|
|
222
|
-
type: 'object',
|
|
223
|
-
properties: { url: { type: 'string' } },
|
|
224
|
-
required: ['url'],
|
|
225
|
-
},
|
|
226
|
-
execute: async (input) => {
|
|
227
|
-
ssrfGuard.check(input.url);
|
|
228
|
-
if (hostAllowlist)
|
|
229
|
-
hostAllowlist.check(new URL(input.url).hostname);
|
|
230
|
-
const r = await fetch(input.url);
|
|
231
|
-
return { status: r.status, body: await r.text() };
|
|
232
|
-
},
|
|
233
|
-
},
|
|
234
|
-
];
|
|
235
|
-
}
|
|
236
|
-
//# sourceMappingURL=tool-definitions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-definitions.js","sourceRoot":"","sources":["../../src/providers/tool-definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { FileTracker } from './file-tracker.js';
|
|
2
|
-
import type { SandboxPolicy } from '../types.js';
|
|
3
|
-
export declare const MAX_READ_FILE_BYTES: number;
|
|
4
|
-
export declare const MAX_WRITE_FILE_BYTES: number;
|
|
5
|
-
/**
|
|
6
|
-
* Read-budget guard threshold (4.3.0+ pipeline redesign).
|
|
7
|
-
*
|
|
8
|
-
* When a worker reads the SAME file this many times within a single
|
|
9
|
-
* stage, the readFile tool appends a hard warning to the returned
|
|
10
|
-
* content telling the worker to stop re-reading and edit instead.
|
|
11
|
-
* Calibrated from observed pathology: gpt-5.4 in spec_review_and_fix
|
|
12
|
-
* read pipeline.ts 28 times in one stage without editing. Threshold
|
|
13
|
-
* 5 is generous (legitimate workflows rarely re-read a file 5x) and
|
|
14
|
-
* still catches the loop early enough to be useful.
|
|
15
|
-
*/
|
|
16
|
-
export declare const READ_BUDGET_WARN_THRESHOLD = 5;
|
|
17
|
-
export declare const MAX_GREP_OUTPUT_BYTES: number;
|
|
18
|
-
export declare const GREP_CHILD_BUFFER_BYTES: number;
|
|
19
|
-
export interface ShellResult {
|
|
20
|
-
stdout: string;
|
|
21
|
-
stderr: string;
|
|
22
|
-
exitCode: number;
|
|
23
|
-
}
|
|
24
|
-
export interface ToolImplementations {
|
|
25
|
-
readFile(filePath: string): Promise<string>;
|
|
26
|
-
writeFile(filePath: string, content: string): Promise<void>;
|
|
27
|
-
editFile(filePath: string, oldContent: string, newContent: string): Promise<void>;
|
|
28
|
-
runShell(command: string): Promise<ShellResult>;
|
|
29
|
-
glob(pattern: string): Promise<string[]>;
|
|
30
|
-
grep(pattern: string, target: string): Promise<string>;
|
|
31
|
-
listFiles(dirPath: string): Promise<string[]>;
|
|
32
|
-
}
|
|
33
|
-
/** Internal implementation method names (camelCase). */
|
|
34
|
-
export declare const READONLY_TOOL_IMPLS: readonly ["readFile", "grep", "glob", "listFiles"];
|
|
35
|
-
/** Adapter-facing tool IDs (snake_case). */
|
|
36
|
-
export declare const READONLY_TOOL_IDS: readonly ["read_file", "grep", "glob", "list_files"];
|
|
37
|
-
export declare function createToolImplementations(tracker: FileTracker, cwd: string, sandboxPolicy?: SandboxPolicy, signal?: AbortSignal): ToolImplementations;
|
|
38
|
-
//# sourceMappingURL=tool-implementations.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-implementations.d.ts","sourceRoot":"","sources":["../../src/providers/tool-implementations.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAoBjD,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AACpD,eAAO,MAAM,oBAAoB,QAAoB,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,qBAAqB,QAAa,CAAC;AAChD,eAAO,MAAM,uBAAuB,QAAkB,CAAC;AA6BvD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC/C;AAED,wDAAwD;AACxD,eAAO,MAAM,mBAAmB,oDAAqD,CAAC;AAEtF,4CAA4C;AAC5C,eAAO,MAAM,iBAAiB,sDAAuD,CAAC;AAEtF,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,aAAa,GAAE,aAA0B,EACzC,MAAM,CAAC,EAAE,WAAW,GACnB,mBAAmB,CAyMrB"}
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
import fs from 'fs/promises';
|
|
2
|
-
import { glob as fsGlob } from 'node:fs/promises';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import { exec } from 'child_process';
|
|
5
|
-
import { promisify } from 'util';
|
|
6
|
-
const execAsync = promisify(exec);
|
|
7
|
-
// Hard caps to keep an LLM sub-agent from exhausting host memory or disk by
|
|
8
|
-
// asking the file tools to read or write absurdly large blobs. The values are
|
|
9
|
-
// generous for normal coding work and intentionally well below the memory
|
|
10
|
-
// budget of a typical Node process (~1.5 GB default heap). They can be tuned
|
|
11
|
-
// per-deployment by editing the constants.
|
|
12
|
-
//
|
|
13
|
-
// readFile: 50 MB. Larger than any sensible source file.
|
|
14
|
-
// writeFile: 100 MB. Generous enough for build artefacts but caps disk-fill
|
|
15
|
-
// attacks where the model is told to write a multi-gigabyte file.
|
|
16
|
-
// grep: 200 KB rendered output. Recursive grep on a large repo can otherwise
|
|
17
|
-
// dump megabytes of matches into the model's context, which is both
|
|
18
|
-
// expensive and useless. Truncating with a marker forces the worker to
|
|
19
|
-
// refine its pattern.
|
|
20
|
-
// grep child: 4 MB stdout buffer. Process-level cap that's larger than the
|
|
21
|
-
// rendered cap so we never lose a real grep result that fits
|
|
22
|
-
// within the rendered limit just because of buffer overflow.
|
|
23
|
-
export const MAX_READ_FILE_BYTES = 50 * 1024 * 1024;
|
|
24
|
-
export const MAX_WRITE_FILE_BYTES = 100 * 1024 * 1024;
|
|
25
|
-
/**
|
|
26
|
-
* Read-budget guard threshold (4.3.0+ pipeline redesign).
|
|
27
|
-
*
|
|
28
|
-
* When a worker reads the SAME file this many times within a single
|
|
29
|
-
* stage, the readFile tool appends a hard warning to the returned
|
|
30
|
-
* content telling the worker to stop re-reading and edit instead.
|
|
31
|
-
* Calibrated from observed pathology: gpt-5.4 in spec_review_and_fix
|
|
32
|
-
* read pipeline.ts 28 times in one stage without editing. Threshold
|
|
33
|
-
* 5 is generous (legitimate workflows rarely re-read a file 5x) and
|
|
34
|
-
* still catches the loop early enough to be useful.
|
|
35
|
-
*/
|
|
36
|
-
export const READ_BUDGET_WARN_THRESHOLD = 5;
|
|
37
|
-
export const MAX_GREP_OUTPUT_BYTES = 200 * 1024;
|
|
38
|
-
export const GREP_CHILD_BUFFER_BYTES = 4 * 1024 * 1024;
|
|
39
|
-
function isWithin(parent, child) {
|
|
40
|
-
return child === parent || child.startsWith(parent + path.sep);
|
|
41
|
-
}
|
|
42
|
-
async function resolveReal(target) {
|
|
43
|
-
try {
|
|
44
|
-
return await fs.realpath(target);
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
// File doesn't exist — resolve the nearest existing ancestor and
|
|
48
|
-
// append the remaining path components so symlinks in ancestors
|
|
49
|
-
// are still caught.
|
|
50
|
-
const parent = path.dirname(target);
|
|
51
|
-
if (parent === target)
|
|
52
|
-
return target; // filesystem root
|
|
53
|
-
const realParent = await resolveReal(parent);
|
|
54
|
-
return path.join(realParent, path.basename(target));
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
async function assertWithinCwd(cwd, resolved) {
|
|
58
|
-
const realCwd = await fs.realpath(cwd);
|
|
59
|
-
const realResolved = await resolveReal(resolved);
|
|
60
|
-
if (!isWithin(realCwd, realResolved)) {
|
|
61
|
-
throw new Error(`Path traversal denied: "${resolved}" is outside working directory "${cwd}"`);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/** Internal implementation method names (camelCase). */
|
|
65
|
-
export const READONLY_TOOL_IMPLS = ['readFile', 'grep', 'glob', 'listFiles'];
|
|
66
|
-
/** Adapter-facing tool IDs (snake_case). */
|
|
67
|
-
export const READONLY_TOOL_IDS = ['read_file', 'grep', 'glob', 'list_files'];
|
|
68
|
-
export function createToolImplementations(tracker, cwd, sandboxPolicy = 'cwd-only', signal) {
|
|
69
|
-
const confine = sandboxPolicy === 'cwd-only';
|
|
70
|
-
return {
|
|
71
|
-
async readFile(filePath) {
|
|
72
|
-
tracker.trackToolCall(`readFile(${filePath})`);
|
|
73
|
-
const resolved = path.resolve(cwd, filePath);
|
|
74
|
-
if (confine)
|
|
75
|
-
await assertWithinCwd(cwd, resolved);
|
|
76
|
-
// Reject oversized files BEFORE reading them into memory. stat is
|
|
77
|
-
// cheap; reading a 10 GB file would OOM the host.
|
|
78
|
-
const stats = await fs.stat(resolved);
|
|
79
|
-
if (stats.size > MAX_READ_FILE_BYTES) {
|
|
80
|
-
throw new Error(`File too large: ${filePath} is ${stats.size} bytes (max ${MAX_READ_FILE_BYTES})`);
|
|
81
|
-
}
|
|
82
|
-
const content = await fs.readFile(resolved, 'utf-8');
|
|
83
|
-
tracker.trackRead(resolved);
|
|
84
|
-
// Read-budget guard (4.3.0+ pipeline redesign). When a path is read
|
|
85
|
-
// repeatedly within the same stage, the worker is almost certainly
|
|
86
|
-
// in the "let me re-verify before I commit" pathology we observed
|
|
87
|
-
// on cheap workers AND on gpt-5.4 reviewers. Append a hard warning
|
|
88
|
-
// to the returned content. The worker sees it as part of the tool
|
|
89
|
-
// result and (hopefully) breaks out of the read-loop.
|
|
90
|
-
const reads = tracker.readCount(resolved);
|
|
91
|
-
if (reads >= READ_BUDGET_WARN_THRESHOLD) {
|
|
92
|
-
const banner = [
|
|
93
|
-
'',
|
|
94
|
-
'',
|
|
95
|
-
`============================================================`,
|
|
96
|
-
`READ-BUDGET WARNING: you have read \`${filePath}\` ${reads} times in this stage.`,
|
|
97
|
-
`STOP re-reading. The content above is the current on-disk state.`,
|
|
98
|
-
`EITHER edit the file using your editor tools and move on, OR`,
|
|
99
|
-
`accept the current state and write your final summary.`,
|
|
100
|
-
`Further reads of this path will keep failing this guard.`,
|
|
101
|
-
`============================================================`,
|
|
102
|
-
].join('\n');
|
|
103
|
-
return content + banner;
|
|
104
|
-
}
|
|
105
|
-
return content;
|
|
106
|
-
},
|
|
107
|
-
async writeFile(filePath, content) {
|
|
108
|
-
tracker.trackToolCall(`writeFile(${filePath}, ${content.length}B)`);
|
|
109
|
-
const resolved = path.resolve(cwd, filePath);
|
|
110
|
-
if (confine)
|
|
111
|
-
await assertWithinCwd(cwd, resolved);
|
|
112
|
-
// Reject oversized writes BEFORE touching the disk. content.length is
|
|
113
|
-
// a UTF-16 code-unit count, but it's a reasonable upper bound on the
|
|
114
|
-
// byte size after UTF-8 encoding for the purpose of capping abuse.
|
|
115
|
-
if (content.length > MAX_WRITE_FILE_BYTES) {
|
|
116
|
-
throw new Error(`Content too large: ${content.length} bytes (max ${MAX_WRITE_FILE_BYTES})`);
|
|
117
|
-
}
|
|
118
|
-
await fs.mkdir(path.dirname(resolved), { recursive: true });
|
|
119
|
-
await fs.writeFile(resolved, content, 'utf-8');
|
|
120
|
-
tracker.trackWrite(resolved);
|
|
121
|
-
},
|
|
122
|
-
async editFile(filePath, oldContent, newContent) {
|
|
123
|
-
tracker.trackToolCall(`editFile(${filePath}, ${oldContent.length}B→${newContent.length}B)`);
|
|
124
|
-
const resolved = path.resolve(cwd, filePath);
|
|
125
|
-
if (confine)
|
|
126
|
-
await assertWithinCwd(cwd, resolved);
|
|
127
|
-
const existing = await fs.readFile(resolved, 'utf-8');
|
|
128
|
-
const firstIndex = existing.indexOf(oldContent);
|
|
129
|
-
if (firstIndex === -1) {
|
|
130
|
-
throw new Error(`oldContent not found in file "${filePath}"`);
|
|
131
|
-
}
|
|
132
|
-
const secondIndex = existing.indexOf(oldContent, firstIndex + oldContent.length);
|
|
133
|
-
if (secondIndex !== -1) {
|
|
134
|
-
throw new Error(`oldContent matches multiple locations in "${filePath}" — provide more surrounding context for a unique match`);
|
|
135
|
-
}
|
|
136
|
-
const updated = existing.slice(0, firstIndex) + newContent + existing.slice(firstIndex + oldContent.length);
|
|
137
|
-
if (updated.length > MAX_WRITE_FILE_BYTES) {
|
|
138
|
-
throw new Error(`Edited content too large: ${updated.length} bytes (max ${MAX_WRITE_FILE_BYTES})`);
|
|
139
|
-
}
|
|
140
|
-
await fs.writeFile(resolved, updated, 'utf-8');
|
|
141
|
-
tracker.trackWrite(resolved);
|
|
142
|
-
},
|
|
143
|
-
async runShell(command) {
|
|
144
|
-
tracker.trackToolCall(`runShell(${command.length > 80 ? command.slice(0, 77) + '…' : command})`);
|
|
145
|
-
try {
|
|
146
|
-
const { stdout, stderr } = await execAsync(command, {
|
|
147
|
-
cwd,
|
|
148
|
-
timeout: 120_000,
|
|
149
|
-
maxBuffer: 10 * 1024 * 1024,
|
|
150
|
-
signal,
|
|
151
|
-
});
|
|
152
|
-
return { stdout, stderr, exitCode: 0 };
|
|
153
|
-
}
|
|
154
|
-
catch (err) {
|
|
155
|
-
if (err.name === 'AbortError') {
|
|
156
|
-
return { stdout: '', stderr: 'Aborted', exitCode: 130 };
|
|
157
|
-
}
|
|
158
|
-
return {
|
|
159
|
-
stdout: err.stdout ?? '',
|
|
160
|
-
stderr: err.stderr ?? '',
|
|
161
|
-
exitCode: typeof err.code === 'number' ? err.code : 1,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
},
|
|
165
|
-
async glob(pattern) {
|
|
166
|
-
tracker.trackToolCall(`glob(${pattern})`);
|
|
167
|
-
try {
|
|
168
|
-
const results = [];
|
|
169
|
-
const realCwd = confine ? await fs.realpath(cwd) : null;
|
|
170
|
-
for await (const entry of fsGlob(pattern, { cwd })) {
|
|
171
|
-
if (realCwd) {
|
|
172
|
-
const abs = path.resolve(cwd, entry);
|
|
173
|
-
let real;
|
|
174
|
-
try {
|
|
175
|
-
real = await fs.realpath(abs);
|
|
176
|
-
}
|
|
177
|
-
catch {
|
|
178
|
-
real = abs;
|
|
179
|
-
}
|
|
180
|
-
if (!isWithin(realCwd, real))
|
|
181
|
-
continue;
|
|
182
|
-
}
|
|
183
|
-
results.push(entry);
|
|
184
|
-
}
|
|
185
|
-
return results.sort();
|
|
186
|
-
}
|
|
187
|
-
catch {
|
|
188
|
-
return [];
|
|
189
|
-
}
|
|
190
|
-
},
|
|
191
|
-
async grep(pattern, target) {
|
|
192
|
-
tracker.trackToolCall(`grep(${target}, "${pattern.length > 60 ? pattern.slice(0, 57) + '…' : pattern}")`);
|
|
193
|
-
const resolved = path.resolve(cwd, target);
|
|
194
|
-
if (confine)
|
|
195
|
-
await assertWithinCwd(cwd, resolved);
|
|
196
|
-
// Detect file vs directory so we can pick the right grep mode. ENOENT
|
|
197
|
-
// is reported as a clear error so the worker doesn't think "no matches".
|
|
198
|
-
let isDirectory = false;
|
|
199
|
-
try {
|
|
200
|
-
const stats = await fs.stat(resolved);
|
|
201
|
-
isDirectory = stats.isDirectory();
|
|
202
|
-
}
|
|
203
|
-
catch (err) {
|
|
204
|
-
if (err.code === 'ENOENT') {
|
|
205
|
-
throw new Error(`grep target does not exist: ${target}`);
|
|
206
|
-
}
|
|
207
|
-
throw err;
|
|
208
|
-
}
|
|
209
|
-
tracker.trackRead(resolved);
|
|
210
|
-
// Directory targets get recursive grep with file:line prefixes; file
|
|
211
|
-
// targets keep the original line-only output for compactness.
|
|
212
|
-
const flags = isDirectory ? '-rn' : '-n';
|
|
213
|
-
const escapedPattern = pattern.replace(/'/g, "'\\''");
|
|
214
|
-
const escapedPath = resolved.replace(/'/g, "'\\''");
|
|
215
|
-
try {
|
|
216
|
-
const { stdout } = await execAsync(`grep ${flags} -e '${escapedPattern}' '${escapedPath}'`, { signal, maxBuffer: GREP_CHILD_BUFFER_BYTES });
|
|
217
|
-
let output = stdout.trim();
|
|
218
|
-
// Cap rendered output so a recursive grep over a huge repo doesn't
|
|
219
|
-
// dump 200k matches into the model's context. The worker can refine
|
|
220
|
-
// its pattern instead.
|
|
221
|
-
if (output.length > MAX_GREP_OUTPUT_BYTES) {
|
|
222
|
-
const truncated = output.slice(0, MAX_GREP_OUTPUT_BYTES);
|
|
223
|
-
const remaining = output.slice(MAX_GREP_OUTPUT_BYTES);
|
|
224
|
-
const droppedLines = remaining.split('\n').length;
|
|
225
|
-
output = `${truncated}\n[grep output truncated: ${droppedLines}+ more lines dropped. Refine your pattern or narrow the search path.]`;
|
|
226
|
-
}
|
|
227
|
-
return output;
|
|
228
|
-
}
|
|
229
|
-
catch (err) {
|
|
230
|
-
if (err.name === 'AbortError')
|
|
231
|
-
throw err;
|
|
232
|
-
// grep exit 1 = no matches (normal), exit 2+ = real error
|
|
233
|
-
if (err.code === 1)
|
|
234
|
-
return '';
|
|
235
|
-
// Child process buffer overflow surfaces as a stdio max-buffer error.
|
|
236
|
-
if (err.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER' || /maxBuffer/.test(err.message ?? '')) {
|
|
237
|
-
throw new Error(`grep output exceeded ${GREP_CHILD_BUFFER_BYTES} bytes before truncation. Refine your pattern or narrow the search path.`);
|
|
238
|
-
}
|
|
239
|
-
throw new Error(err.stderr?.trim() || `grep failed with exit code ${err.code}`);
|
|
240
|
-
}
|
|
241
|
-
},
|
|
242
|
-
async listFiles(dirPath) {
|
|
243
|
-
tracker.trackToolCall(`listFiles(${dirPath})`);
|
|
244
|
-
const resolved = path.resolve(cwd, dirPath);
|
|
245
|
-
if (confine)
|
|
246
|
-
await assertWithinCwd(cwd, resolved);
|
|
247
|
-
const entries = await fs.readdir(resolved, { withFileTypes: true });
|
|
248
|
-
tracker.trackRead(resolved);
|
|
249
|
-
tracker.trackDirectoryList(resolved);
|
|
250
|
-
return entries.map(e => e.isDirectory() ? `${e.name}/` : e.name).sort();
|
|
251
|
-
},
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
//# sourceMappingURL=tool-implementations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-implementations.js","sourceRoot":"","sources":["../../src/providers/tool-implementations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface ToolInvocation {
|
|
2
|
-
name: string;
|
|
3
|
-
turnIndex: number;
|
|
4
|
-
input: unknown;
|
|
5
|
-
result: unknown;
|
|
6
|
-
durationMs: number;
|
|
7
|
-
}
|
|
8
|
-
export declare class ToolTracker {
|
|
9
|
-
private records;
|
|
10
|
-
record(inv: ToolInvocation): void;
|
|
11
|
-
forTurn(turnIndex: number): ToolInvocation[];
|
|
12
|
-
all(): ToolInvocation[];
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=tool-tracker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-tracker.d.ts","sourceRoot":"","sources":["../../src/providers/tool-tracker.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAwB;IAEvC,MAAM,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAIjC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE;IAI5C,GAAG,IAAI,cAAc,EAAE;CAGxB"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export class ToolTracker {
|
|
2
|
-
records = [];
|
|
3
|
-
record(inv) {
|
|
4
|
-
this.records.push(inv);
|
|
5
|
-
}
|
|
6
|
-
forTurn(turnIndex) {
|
|
7
|
-
return this.records.filter((r) => r.turnIndex === turnIndex);
|
|
8
|
-
}
|
|
9
|
-
all() {
|
|
10
|
-
return [...this.records];
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=tool-tracker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-tracker.js","sourceRoot":"","sources":["../../src/providers/tool-tracker.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,WAAW;IACd,OAAO,GAAqB,EAAE,CAAC;IAEvC,MAAM,CAAC,GAAmB;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,SAAiB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/verify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,eAAO,MAAM,sBAAsB,EAAE,gBA8BpC,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { parseVerifyResults } from '../report-parser-slots/verify-report.js';
|
|
2
|
-
import { isNotApplicable } from '../not-applicable.js';
|
|
3
|
-
export const verifyHeadlineTemplate = {
|
|
4
|
-
compose({ report, status, runResult, task }) {
|
|
5
|
-
const r = report;
|
|
6
|
-
const reportInapplicable = !r || isNotApplicable(r);
|
|
7
|
-
// Source priority (parallel to audit + review):
|
|
8
|
-
// 1. report.results (structured path; the primary parser now handles
|
|
9
|
-
// both JSON and narrative).
|
|
10
|
-
// 2. parseVerifyResults(runResult.output) (defensive fallback when the
|
|
11
|
-
// structured parser ran a non-verify schema and stripped the
|
|
12
|
-
// narrative — same Gap-A pattern surfaced on review #2).
|
|
13
|
-
let results = !reportInapplicable && Array.isArray(r?.results) ? r.results : [];
|
|
14
|
-
if (results.length === 0 && typeof runResult?.output === 'string') {
|
|
15
|
-
const narrative = parseVerifyResults(runResult.output);
|
|
16
|
-
if (narrative.length > 0)
|
|
17
|
-
results = narrative;
|
|
18
|
-
}
|
|
19
|
-
const path = task?.filePaths?.[0] || '';
|
|
20
|
-
if (results.length === 0 && !path) {
|
|
21
|
-
return `[${status}] verify completed`;
|
|
22
|
-
}
|
|
23
|
-
const passed = results.filter((x) => x?.pass).length;
|
|
24
|
-
return path
|
|
25
|
-
? `[${status}] verify ${path}: ${passed}/${results.length} pass`
|
|
26
|
-
: `[${status}] verify: ${passed}/${results.length} pass`;
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=verify.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/verify.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACtD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;QACzC,MAAM,CAAC,GAAG,MAAkD,CAAC;QAC7D,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAEpD,gDAAgD;QAChD,uEAAuE;QACvE,iCAAiC;QACjC,yEAAyE;QACzE,kEAAkE;QAClE,8DAA8D;QAC9D,IAAI,OAAO,GACT,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,SAAS,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;YAClE,MAAM,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,GAAG,SAAS,CAAC;QAChD,CAAC;QAED,MAAM,IAAI,GACP,IAA6C,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,IAAI,MAAM,oBAAoB,CAAC;QACxC,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;QACrD,OAAO,IAAI;YACT,CAAC,CAAC,IAAI,MAAM,YAAY,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,OAAO;YAChE,CAAC,CAAC,IAAI,MAAM,aAAa,MAAM,IAAI,OAAO,CAAC,MAAM,OAAO,CAAC;IAC7D,CAAC;CACF,CAAC"}
|