salmon-loop 0.2.3
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/LICENSE +21 -0
- package/README.md +144 -0
- package/README.zh-CN.md +144 -0
- package/dist/cli/argv/headless-detection.js +60 -0
- package/dist/cli/argv/print-mode.js +60 -0
- package/dist/cli/authorization/allowlist.js +908 -0
- package/dist/cli/authorization/non-interactive.js +166 -0
- package/dist/cli/authorization/provider.js +416 -0
- package/dist/cli/chat-interface.js +83 -0
- package/dist/cli/chat.js +492 -0
- package/dist/cli/cli-runtime-context.js +12 -0
- package/dist/cli/commander-error-adapter.js +35 -0
- package/dist/cli/commander-error-meta.js +13 -0
- package/dist/cli/commands/allowlist.js +270 -0
- package/dist/cli/commands/chat.js +120 -0
- package/dist/cli/commands/config.js +250 -0
- package/dist/cli/commands/context.js +57 -0
- package/dist/cli/commands/dispatcher.js +53 -0
- package/dist/cli/commands/exit.js +9 -0
- package/dist/cli/commands/llm-output.js +135 -0
- package/dist/cli/commands/log-mode.js +143 -0
- package/dist/cli/commands/mode.js +136 -0
- package/dist/cli/commands/new.js +18 -0
- package/dist/cli/commands/parallel.js +256 -0
- package/dist/cli/commands/queue.js +130 -0
- package/dist/cli/commands/registry.js +85 -0
- package/dist/cli/commands/restore.js +26 -0
- package/dist/cli/commands/run/assistant-message.js +14 -0
- package/dist/cli/commands/run/config-resolution.js +37 -0
- package/dist/cli/commands/run/early-errors.js +108 -0
- package/dist/cli/commands/run/execute.js +73 -0
- package/dist/cli/commands/run/extensions-resolution.js +22 -0
- package/dist/cli/commands/run/handler.js +434 -0
- package/dist/cli/commands/run/headless-error-writer.js +182 -0
- package/dist/cli/commands/run/instruction-guard.js +24 -0
- package/dist/cli/commands/run/loop-params.js +46 -0
- package/dist/cli/commands/run/mode.js +8 -0
- package/dist/cli/commands/run/parse-options.js +67 -0
- package/dist/cli/commands/run/persist-session.js +35 -0
- package/dist/cli/commands/run/preflight.js +156 -0
- package/dist/cli/commands/run/reporter-factory.js +52 -0
- package/dist/cli/commands/run/runtime-llm.js +56 -0
- package/dist/cli/commands/run/runtime-options.js +30 -0
- package/dist/cli/commands/run/session.js +19 -0
- package/dist/cli/commands/run/structured-output.js +106 -0
- package/dist/cli/commands/run/types.js +2 -0
- package/dist/cli/commands/run/validate-options.js +28 -0
- package/dist/cli/commands/run/verbose.js +36 -0
- package/dist/cli/commands/run.js +2 -0
- package/dist/cli/commands/serve.js +323 -0
- package/dist/cli/commands/session.js +77 -0
- package/dist/cli/commands/snapshot-interactive.js +165 -0
- package/dist/cli/commands/snapshot.js +159 -0
- package/dist/cli/commands/status.js +17 -0
- package/dist/cli/commands/subagent.js +178 -0
- package/dist/cli/commands/subcommand-suggestions.js +63 -0
- package/dist/cli/commands/tool-names.js +155 -0
- package/dist/cli/commands/types.js +2 -0
- package/dist/cli/commands/utils.js +42 -0
- package/dist/cli/config.js +16 -0
- package/dist/cli/crash-reporter.js +5 -0
- package/dist/cli/headless/anthropic-stream-normalized-encoder.js +164 -0
- package/dist/cli/headless/anthropic-stream-protocol.js +62 -0
- package/dist/cli/headless/json-protocol.js +124 -0
- package/dist/cli/headless/native-stream-normalized-encoder.js +206 -0
- package/dist/cli/headless/openai-responses-canonical-applier.js +94 -0
- package/dist/cli/headless/openai-responses-state.js +294 -0
- package/dist/cli/headless/openai-stream-encoder.js +152 -0
- package/dist/cli/headless/stdout-writer.js +9 -0
- package/dist/cli/headless/stream-json-protocol.js +136 -0
- package/dist/cli/index.js +8 -0
- package/dist/cli/locales/en.js +409 -0
- package/dist/cli/locales/index.js +7 -0
- package/dist/cli/program-bootstrap.js +14 -0
- package/dist/cli/program-commands.js +106 -0
- package/dist/cli/program-options.js +15 -0
- package/dist/cli/program-output-mode.js +11 -0
- package/dist/cli/program-parse.js +24 -0
- package/dist/cli/reporters/anthropic-stream.js +77 -0
- package/dist/cli/reporters/base.js +2 -0
- package/dist/cli/reporters/json.js +69 -0
- package/dist/cli/reporters/openai-stream.js +72 -0
- package/dist/cli/reporters/standard.js +226 -0
- package/dist/cli/reporters/stderr-log-reporter.js +71 -0
- package/dist/cli/reporters/stream-json.js +111 -0
- package/dist/cli/run-cli.js +25 -0
- package/dist/cli/slash/runtime.js +240 -0
- package/dist/cli/ui/App.js +273 -0
- package/dist/cli/ui/authorization/bus.js +35 -0
- package/dist/cli/ui/components/CommandInput.js +200 -0
- package/dist/cli/ui/components/CommandSuggestionList.js +20 -0
- package/dist/cli/ui/components/Markdown.js +423 -0
- package/dist/cli/ui/components/MessageList.js +34 -0
- package/dist/cli/ui/components/StatusBannerLine.js +7 -0
- package/dist/cli/ui/components/TodoDrawer.js +60 -0
- package/dist/cli/ui/components/WelcomeMessage.js +14 -0
- package/dist/cli/ui/components/animations/StretchingThinking.js +51 -0
- package/dist/cli/ui/components/animations/ThinkingWave.js +15 -0
- package/dist/cli/ui/components/animations/TypeIndicator.js +30 -0
- package/dist/cli/ui/components/layout/SplitPane.js +11 -0
- package/dist/cli/ui/components/messageList/MessageItem.js +27 -0
- package/dist/cli/ui/components/messageList/QueuePreviewList.js +11 -0
- package/dist/cli/ui/components/messageList/items/EmphasisMessageItem.js +20 -0
- package/dist/cli/ui/components/messageList/items/InterruptMessageItem.js +10 -0
- package/dist/cli/ui/components/messageList/items/LightweightMessageItem.js +12 -0
- package/dist/cli/ui/components/messageList/items/StandardMessageItem.js +23 -0
- package/dist/cli/ui/components/messageList/items/WelcomeMessageItem.js +7 -0
- package/dist/cli/ui/components/messageList/messageListLayout.js +27 -0
- package/dist/cli/ui/components/messageList/streaming.js +51 -0
- package/dist/cli/ui/components/messageList/types.js +2 -0
- package/dist/cli/ui/components/messageList/utils.js +7 -0
- package/dist/cli/ui/components/sidebar/FileContext.js +8 -0
- package/dist/cli/ui/components/sidebar/MissionControl.js +8 -0
- package/dist/cli/ui/config.js +59 -0
- package/dist/cli/ui/hooks/useCommandLifecycle.js +110 -0
- package/dist/cli/ui/hooks/useCommandSuggestions.js +87 -0
- package/dist/cli/ui/hooks/useInputHistory.js +57 -0
- package/dist/cli/ui/hooks/useLoopEvents.js +382 -0
- package/dist/cli/ui/hooks/useLoopState.js +73 -0
- package/dist/cli/ui/hooks/useOnionExit.js +31 -0
- package/dist/cli/ui/hooks/useTerminalDimensions.js +34 -0
- package/dist/cli/ui/index.js +136 -0
- package/dist/cli/ui/selection/bus.js +35 -0
- package/dist/cli/ui/status/formatStatusBanner.js +8 -0
- package/dist/cli/ui/store/context.js +17 -0
- package/dist/cli/ui/store/reducer.js +264 -0
- package/dist/cli/ui/store/types.js +81 -0
- package/dist/cli/ui/styles/theme.js +295 -0
- package/dist/cli/ui/types.js +2 -0
- package/dist/cli/ui/utils/sanitizer.js +122 -0
- package/dist/cli/ui/utils/transcript.js +28 -0
- package/dist/cli/utils/asyncQueue.js +125 -0
- package/dist/cli/utils/audit-scope.js +10 -0
- package/dist/cli/utils/detectors/index.js +38 -0
- package/dist/cli/utils/llm-output.js +34 -0
- package/dist/cli/utils/outcome-reporter.js +17 -0
- package/dist/cli/utils/safe-fs.js +184 -0
- package/dist/cli/utils/verify-resolver.js +34 -0
- package/dist/cli/utils/worktree-prepare-resolver.js +18 -0
- package/dist/core/adapters/fs/atomic-file-writer.js +129 -0
- package/dist/core/adapters/fs/file-adapter.js +95 -0
- package/dist/core/adapters/fs/filesystem.js +31 -0
- package/dist/core/adapters/fs/index.js +5 -0
- package/dist/core/adapters/fs/node-fs.js +7 -0
- package/dist/core/adapters/fs/readonly-filesystem.js +23 -0
- package/dist/core/adapters/git/git-adapter.js +704 -0
- package/dist/core/adapters/git/git-runner.js +119 -0
- package/dist/core/adapters/git/lock-manager.js +314 -0
- package/dist/core/adapters/git/types.js +2 -0
- package/dist/core/adapters/path/index.js +2 -0
- package/dist/core/adapters/path/path-adapter.js +23 -0
- package/dist/core/ast/guard.js +116 -0
- package/dist/core/ast/index.js +4 -0
- package/dist/core/ast/parser.js +284 -0
- package/dist/core/ast/validator.js +46 -0
- package/dist/core/backends/salmon-loop/task-executor.js +68 -0
- package/dist/core/checkpoint-domain/manifest-store.js +379 -0
- package/dist/core/checkpoint-domain/service.js +84 -0
- package/dist/core/checkpoint-domain/types.js +2 -0
- package/dist/core/config/defaults.js +50 -0
- package/dist/core/config/errors.js +11 -0
- package/dist/core/config/file-format.js +108 -0
- package/dist/core/config/index.js +7 -0
- package/dist/core/config/limits.js +77 -0
- package/dist/core/config/load.js +34 -0
- package/dist/core/config/normalize.js +35 -0
- package/dist/core/config/paths.js +20 -0
- package/dist/core/config/redact.js +16 -0
- package/dist/core/config/resolve-env.js +43 -0
- package/dist/core/config/resolve-llm.js +130 -0
- package/dist/core/config/resolve.js +68 -0
- package/dist/core/config/resolvers/ast-validation.js +8 -0
- package/dist/core/config/resolvers/context.js +21 -0
- package/dist/core/config/resolvers/observability.js +45 -0
- package/dist/core/config/resolvers/output.js +8 -0
- package/dist/core/config/resolvers/permission-mode.js +6 -0
- package/dist/core/config/resolvers/security.js +14 -0
- package/dist/core/config/resolvers/server.js +36 -0
- package/dist/core/config/resolvers/tool-authorization.js +39 -0
- package/dist/core/config/resolvers/ui.js +26 -0
- package/dist/core/config/types/config-file.js +2 -0
- package/dist/core/config/types/primitives.js +9 -0
- package/dist/core/config/types/resolved.js +2 -0
- package/dist/core/config/types.js +4 -0
- package/dist/core/config/validate.js +852 -0
- package/dist/core/context/assembly/default-prompt-assembler.js +7 -0
- package/dist/core/context/assembly/prompt-assembler.js +2 -0
- package/dist/core/context/ast/import-extractor.js +28 -0
- package/dist/core/context/ast/module-resolver.js +61 -0
- package/dist/core/context/ast/source-outline.js +25 -0
- package/dist/core/context/audit-constants.js +23 -0
- package/dist/core/context/audit.js +54 -0
- package/dist/core/context/budget/dynamic-adjuster.js +149 -0
- package/dist/core/context/budget/example-integration.js +49 -0
- package/dist/core/context/budget/integration.js +93 -0
- package/dist/core/context/builder.js +289 -0
- package/dist/core/context/cache/errors.js +16 -0
- package/dist/core/context/cache/incremental-updater.js +131 -0
- package/dist/core/context/cache/index.js +25 -0
- package/dist/core/context/cache/path-resolver.js +127 -0
- package/dist/core/context/cache/prompt-caching.js +207 -0
- package/dist/core/context/cache/store-factory.js +63 -0
- package/dist/core/context/cache/store.js +193 -0
- package/dist/core/context/cache/types.js +15 -0
- package/dist/core/context/compression/js-like-comments.js +139 -0
- package/dist/core/context/compression/smart-compress.js +61 -0
- package/dist/core/context/compression/whitespace.js +26 -0
- package/dist/core/context/dependencies.js +102 -0
- package/dist/core/context/effectiveness/index.js +25 -0
- package/dist/core/context/effectiveness/tracker.js +253 -0
- package/dist/core/context/effectiveness/types.js +15 -0
- package/dist/core/context/formatters/index.js +7 -0
- package/dist/core/context/formatters/json-converter.js +662 -0
- package/dist/core/context/formatters/types.js +6 -0
- package/dist/core/context/formatters/xml-context.js +296 -0
- package/dist/core/context/gatherers/architecture-gatherer.js +75 -0
- package/dist/core/context/gatherers/artifact-gatherer.js +53 -0
- package/dist/core/context/gatherers/ast-gatherer.js +370 -0
- package/dist/core/context/gatherers/ghost-dependency-gatherer.js +46 -0
- package/dist/core/context/gatherers/git-diff-gatherer.js +91 -0
- package/dist/core/context/gatherers/git-history-gatherer.js +57 -0
- package/dist/core/context/gatherers/knowledge-gatherer.js +101 -0
- package/dist/core/context/gatherers/metadata-gatherer.js +59 -0
- package/dist/core/context/gatherers/primary-text-gatherer.js +36 -0
- package/dist/core/context/gatherers/ripgrep-gatherer.js +104 -0
- package/dist/core/context/hash.js +52 -0
- package/dist/core/context/index.js +3 -0
- package/dist/core/context/keywords.js +179 -0
- package/dist/core/context/policies/budget-policy.js +36 -0
- package/dist/core/context/policies/pack-until-full.js +419 -0
- package/dist/core/context/scoring/relevance.js +191 -0
- package/dist/core/context/service-deps.js +32 -0
- package/dist/core/context/service-helpers.js +32 -0
- package/dist/core/context/service.js +265 -0
- package/dist/core/context/steps/context-budget.js +157 -0
- package/dist/core/context/steps/context-gather.js +71 -0
- package/dist/core/context/steps/context-primary.js +19 -0
- package/dist/core/context/steps/context-promotion.js +78 -0
- package/dist/core/context/steps/context-targets.js +85 -0
- package/dist/core/context/steps/types.js +2 -0
- package/dist/core/context/summarization/index.js +27 -0
- package/dist/core/context/summarization/prompts.js +80 -0
- package/dist/core/context/summarization/summarizer.js +377 -0
- package/dist/core/context/summarization/types.js +29 -0
- package/dist/core/context/targeting/churn-policy.js +27 -0
- package/dist/core/context/targeting/target-resolver.js +491 -0
- package/dist/core/context/token/adaptive-budget.js +364 -0
- package/dist/core/context/token/cache.js +163 -0
- package/dist/core/context/token/counter.js +190 -0
- package/dist/core/context/token/encoding-registry.js +173 -0
- package/dist/core/context/token/index.js +31 -0
- package/dist/core/context/token/token-budget.js +213 -0
- package/dist/core/context/token/types.js +10 -0
- package/dist/core/context/truncation/index.js +23 -0
- package/dist/core/context/truncation/semantic-truncator.js +103 -0
- package/dist/core/context/truncation/strategies/error-stack.js +94 -0
- package/dist/core/context/truncation/strategies/generic.js +48 -0
- package/dist/core/context/truncation/strategies/git-diff.js +99 -0
- package/dist/core/context/truncation/strategies/index.js +10 -0
- package/dist/core/context/truncation/strategies/json.js +142 -0
- package/dist/core/context/truncation/strategies/log.js +131 -0
- package/dist/core/context/truncation/strategies/test-result.js +140 -0
- package/dist/core/context/truncation/type-detector.js +133 -0
- package/dist/core/context/truncation/types.js +16 -0
- package/dist/core/context/types.js +2 -0
- package/dist/core/extensions/index.js +118 -0
- package/dist/core/extensions/load.js +36 -0
- package/dist/core/extensions/merge.js +29 -0
- package/dist/core/extensions/paths.js +40 -0
- package/dist/core/extensions/redact.js +37 -0
- package/dist/core/extensions/schemas.js +70 -0
- package/dist/core/extensions/types.js +2 -0
- package/dist/core/facades/cli-authorization-allowlist.js +3 -0
- package/dist/core/facades/cli-authorization-non-interactive.js +3 -0
- package/dist/core/facades/cli-authorization-provider.js +2 -0
- package/dist/core/facades/cli-chat.js +11 -0
- package/dist/core/facades/cli-command-allowlist.js +3 -0
- package/dist/core/facades/cli-command-chat.js +8 -0
- package/dist/core/facades/cli-command-checkpoint.js +3 -0
- package/dist/core/facades/cli-command-config.js +10 -0
- package/dist/core/facades/cli-command-dispatcher.js +2 -0
- package/dist/core/facades/cli-command-parallel.js +8 -0
- package/dist/core/facades/cli-command-session.js +2 -0
- package/dist/core/facades/cli-command-tool-names.js +6 -0
- package/dist/core/facades/cli-context.js +8 -0
- package/dist/core/facades/cli-headless.js +3 -0
- package/dist/core/facades/cli-observability.js +3 -0
- package/dist/core/facades/cli-program-bootstrap.js +2 -0
- package/dist/core/facades/cli-reporters.js +5 -0
- package/dist/core/facades/cli-run-execute.js +3 -0
- package/dist/core/facades/cli-run-handler.js +7 -0
- package/dist/core/facades/cli-run-headless-error-writer.js +2 -0
- package/dist/core/facades/cli-run-loop-params.js +2 -0
- package/dist/core/facades/cli-run-persist-session.js +2 -0
- package/dist/core/facades/cli-run-runtime-llm.js +5 -0
- package/dist/core/facades/cli-serve.js +21 -0
- package/dist/core/facades/cli-slash-runtime.js +9 -0
- package/dist/core/facades/cli-subagent.js +2 -0
- package/dist/core/facades/cli-ui.js +5 -0
- package/dist/core/facades/cli-utils-llm-output.js +3 -0
- package/dist/core/facades/cli-utils-path.js +2 -0
- package/dist/core/facades/cli-utils-worktree.js +2 -0
- package/dist/core/failure/diagnostics.js +221 -0
- package/dist/core/feedback/index.js +28 -0
- package/dist/core/feedback/parsers.js +59 -0
- package/dist/core/feedback/patterns.js +26 -0
- package/dist/core/feedback/types.js +2 -0
- package/dist/core/grizzco/domain/grizzco-types.js +41 -0
- package/dist/core/grizzco/dsl/DecisionEngine.js +149 -0
- package/dist/core/grizzco/dsl/MicroTaskRunner.js +39 -0
- package/dist/core/grizzco/dsl/llm-strategy.js +80 -0
- package/dist/core/grizzco/dsl/strategies.js +69 -0
- package/dist/core/grizzco/dsl/types.js +2 -0
- package/dist/core/grizzco/engine/observability/event-adapter.js +41 -0
- package/dist/core/grizzco/engine/observability/index.js +3 -0
- package/dist/core/grizzco/engine/observability/loop-telemetry.js +51 -0
- package/dist/core/grizzco/engine/outcome/index.js +2 -0
- package/dist/core/grizzco/engine/outcome/loop-result-mapper.js +167 -0
- package/dist/core/grizzco/engine/pipeline/pipeline.js +335 -0
- package/dist/core/grizzco/engine/pipeline/types.js +2 -0
- package/dist/core/grizzco/engine/transaction/attempt-failure.js +242 -0
- package/dist/core/grizzco/engine/transaction/authorization-summary.js +44 -0
- package/dist/core/grizzco/engine/transaction/index.js +3 -0
- package/dist/core/grizzco/engine/transaction/report-mapper.js +50 -0
- package/dist/core/grizzco/engine/transaction/retry-policy.js +19 -0
- package/dist/core/grizzco/engine/transaction/runner-builder.js +45 -0
- package/dist/core/grizzco/engine/transaction/session.js +58 -0
- package/dist/core/grizzco/engine/transaction/transaction-runner.js +193 -0
- package/dist/core/grizzco/engine/transaction/types.js +2 -0
- package/dist/core/grizzco/execution/Executor.js +58 -0
- package/dist/core/grizzco/execution/RejectionManager.js +71 -0
- package/dist/core/grizzco/execution/WorkerFactory.js +31 -0
- package/dist/core/grizzco/flows/SalmonLoopFlow.js +102 -0
- package/dist/core/grizzco/runtime/apply-back-runtime.js +136 -0
- package/dist/core/grizzco/runtime/apply-back-utils.js +13 -0
- package/dist/core/grizzco/runtime/host/host-runner.js +99 -0
- package/dist/core/grizzco/runtime/host/index.js +2 -0
- package/dist/core/grizzco/runtime/host/types.js +2 -0
- package/dist/core/grizzco/services/CachedService.js +42 -0
- package/dist/core/grizzco/services/implementations/default/GitConfigService.js +38 -0
- package/dist/core/grizzco/services/implementations/mock/MockLockService.js +11 -0
- package/dist/core/grizzco/services/implementations/mock/MockUserQuotaService.js +11 -0
- package/dist/core/grizzco/services/registry.js +30 -0
- package/dist/core/grizzco/services/types.js +2 -0
- package/dist/core/grizzco/steps/answer.js +75 -0
- package/dist/core/grizzco/steps/apply-back.js +46 -0
- package/dist/core/grizzco/steps/apply.js +136 -0
- package/dist/core/grizzco/steps/ast-validate.js +37 -0
- package/dist/core/grizzco/steps/audit.js +311 -0
- package/dist/core/grizzco/steps/context.js +74 -0
- package/dist/core/grizzco/steps/display-answer.js +6 -0
- package/dist/core/grizzco/steps/display-report.js +158 -0
- package/dist/core/grizzco/steps/display-research.js +6 -0
- package/dist/core/grizzco/steps/displayReview.js +6 -0
- package/dist/core/grizzco/steps/explore.js +245 -0
- package/dist/core/grizzco/steps/extractIssues.js +27 -0
- package/dist/core/grizzco/steps/generateFixPlan.js +13 -0
- package/dist/core/grizzco/steps/generateReview.js +71 -0
- package/dist/core/grizzco/steps/patch.js +220 -0
- package/dist/core/grizzco/steps/plan.js +191 -0
- package/dist/core/grizzco/steps/preflight.js +93 -0
- package/dist/core/grizzco/steps/prepare-deps.js +49 -0
- package/dist/core/grizzco/steps/read-only-shrink.js +4 -0
- package/dist/core/grizzco/steps/research.js +188 -0
- package/dist/core/grizzco/steps/rollback.js +138 -0
- package/dist/core/grizzco/steps/shrink.js +64 -0
- package/dist/core/grizzco/steps/validate.js +40 -0
- package/dist/core/grizzco/steps/verify.js +136 -0
- package/dist/core/grizzco/validation/AstValidationService.js +133 -0
- package/dist/core/grizzco/validation/ContextValidator.js +17 -0
- package/dist/core/grizzco/validation/ast-validation-policy.js +11 -0
- package/dist/core/grizzco/workers/direct-write-worker.js +44 -0
- package/dist/core/grizzco/workers/git-apply-worker.js +75 -0
- package/dist/core/grizzco/workers/i-merge-worker.js +2 -0
- package/dist/core/grizzco/workers/mm-three-way-worker.js +117 -0
- package/dist/core/grizzco/workers/no-op-worker.js +18 -0
- package/dist/core/grizzco/workers/overwrite-binary-worker.js +29 -0
- package/dist/core/grizzco/workers/strata-sync-worker.js +69 -0
- package/dist/core/grizzco/workers/three-way-merge-worker.js +84 -0
- package/dist/core/grizzco/workers/three-way-staged-worker.js +93 -0
- package/dist/core/grizzco/workers/union-merge-worker.js +71 -0
- package/dist/core/history/input-history.js +55 -0
- package/dist/core/intent/chat-intent.js +250 -0
- package/dist/core/interaction/events/bus.js +52 -0
- package/dist/core/interaction/model/events.js +2 -0
- package/dist/core/interaction/model/index.js +3 -0
- package/dist/core/interaction/model/task-state.js +9 -0
- package/dist/core/interaction/model/transition-policy.js +50 -0
- package/dist/core/interaction/model/types.js +2 -0
- package/dist/core/interaction/orchestration/facade.js +190 -0
- package/dist/core/interaction/orchestration/index.js +2 -0
- package/dist/core/interaction/orchestration/store.js +32 -0
- package/dist/core/interaction/sync/task-sync-engine.js +57 -0
- package/dist/core/interaction/turn-stop-reason.js +27 -0
- package/dist/core/language-support/index.js +3 -0
- package/dist/core/language-support/orchestrator.js +37 -0
- package/dist/core/language-support/strategies/extension-candidate-strategy.js +27 -0
- package/dist/core/language-support/strategies/index.js +3 -0
- package/dist/core/language-support/strategies/language-query-strategy.js +26 -0
- package/dist/core/llm/ai-sdk/chat-executor.js +88 -0
- package/dist/core/llm/ai-sdk/langfuse-headers.js +28 -0
- package/dist/core/llm/ai-sdk/message-mapper.js +240 -0
- package/dist/core/llm/ai-sdk/observation-context.js +16 -0
- package/dist/core/llm/ai-sdk/provider-factory.js +29 -0
- package/dist/core/llm/ai-sdk/request-params.js +18 -0
- package/dist/core/llm/ai-sdk/request-runtime.js +168 -0
- package/dist/core/llm/ai-sdk/result-mapper.js +31 -0
- package/dist/core/llm/ai-sdk/retry-classifier.js +82 -0
- package/dist/core/llm/ai-sdk/retry-executor.js +38 -0
- package/dist/core/llm/ai-sdk.js +92 -0
- package/dist/core/llm/audit.js +2 -0
- package/dist/core/llm/base-url.js +18 -0
- package/dist/core/llm/contracts/repair.js +68 -0
- package/dist/core/llm/errors.js +172 -0
- package/dist/core/llm/factory.js +21 -0
- package/dist/core/llm/http/index.js +2 -0
- package/dist/core/llm/index.js +6 -0
- package/dist/core/llm/message-composition.js +25 -0
- package/dist/core/llm/openai.js +69 -0
- package/dist/core/llm/output-policy.js +192 -0
- package/dist/core/llm/phase-router.js +55 -0
- package/dist/core/llm/redact.js +37 -0
- package/dist/core/llm/registry.js +81 -0
- package/dist/core/llm/retry-utils.js +114 -0
- package/dist/core/llm/stream-utils.js +87 -0
- package/dist/core/llm/utils.js +82 -0
- package/dist/core/observability/audit-file.js +199 -0
- package/dist/core/observability/audit-trail.js +125 -0
- package/dist/core/observability/authorization-decisions.js +54 -0
- package/dist/core/observability/debug-artifacts.js +61 -0
- package/dist/core/observability/error-envelope.js +63 -0
- package/dist/core/observability/error-mapping.js +271 -0
- package/dist/core/observability/ignored-error.js +6 -0
- package/dist/core/observability/logger.js +457 -0
- package/dist/core/observability/loop-event-reporter.js +46 -0
- package/dist/core/observability/monitor.js +240 -0
- package/dist/core/observability/run-outcome-reporter.js +15 -0
- package/dist/core/observability/token-usage.js +36 -0
- package/dist/core/observability/ui-log-sanitize.js +35 -0
- package/dist/core/patch/aggregator.js +93 -0
- package/dist/core/patch/diff.js +298 -0
- package/dist/core/permission-gate/default-gate.js +115 -0
- package/dist/core/permission-gate/gate.js +2 -0
- package/dist/core/permission-gate/types.js +2 -0
- package/dist/core/plan/index.js +2 -0
- package/dist/core/plan/manager.js +123 -0
- package/dist/core/plan/markdown-editor.js +238 -0
- package/dist/core/plan/storage.js +75 -0
- package/dist/core/plan/types.js +2 -0
- package/dist/core/plugin/interface.js +2 -0
- package/dist/core/plugin/loader.js +130 -0
- package/dist/core/plugin/registry.js +90 -0
- package/dist/core/plugin/validator.js +98 -0
- package/dist/core/prompts/registry.js +189 -0
- package/dist/core/prompts/runtime.js +69 -0
- package/dist/core/prompts/schema.js +2 -0
- package/dist/core/prompts/templates/phases/explore_user.hbs +26 -0
- package/dist/core/prompts/templates/phases/patch_user.hbs +57 -0
- package/dist/core/prompts/templates/phases/plan_user.hbs +33 -0
- package/dist/core/prompts/templates/system/_context_json_legend.hbs +21 -0
- package/dist/core/prompts/templates/system/_tool_defs.hbs +60 -0
- package/dist/core/prompts/templates/system/explore_system.hbs +26 -0
- package/dist/core/prompts/templates/system/main_system.hbs +18 -0
- package/dist/core/prompts/templates/system/patch_system.hbs +10 -0
- package/dist/core/prompts/templates/system/plan_system.hbs +1 -0
- package/dist/core/prompts/templates/system/reflection.hbs +39 -0
- package/dist/core/protocols/a2a/agent-card.js +30 -0
- package/dist/core/protocols/a2a/mapper.js +14 -0
- package/dist/core/protocols/a2a/sdk/auth-middleware.js +31 -0
- package/dist/core/protocols/a2a/sdk/executor.js +301 -0
- package/dist/core/protocols/a2a/sdk/server.js +24 -0
- package/dist/core/protocols/a2a/task-projection.js +45 -0
- package/dist/core/protocols/acp/acp-command-runner.js +204 -0
- package/dist/core/protocols/acp/acp-filesystem.js +43 -0
- package/dist/core/protocols/acp/checkpoint-meta.js +2 -0
- package/dist/core/protocols/acp/formal-agent.js +1201 -0
- package/dist/core/protocols/acp/handlers.js +51 -0
- package/dist/core/protocols/acp/permission-provider.js +122 -0
- package/dist/core/protocols/acp/stdio-server.js +116 -0
- package/dist/core/reflection/engine.js +55 -0
- package/dist/core/reflection/types.js +2 -0
- package/dist/core/runtime/agent-server-runtime.js +88 -0
- package/dist/core/runtime/bun-runtime.js +26 -0
- package/dist/core/runtime/command-runner-context.js +16 -0
- package/dist/core/runtime/exit-codes.js +11 -0
- package/dist/core/runtime/fastify-fetch-bridge.js +51 -0
- package/dist/core/runtime/fastify-server-bundle.js +26 -0
- package/dist/core/runtime/initialize.js +132 -0
- package/dist/core/runtime/loop-finalize.js +71 -0
- package/dist/core/runtime/loop-run-lifecycle.js +73 -0
- package/dist/core/runtime/loop-run-reporter.js +19 -0
- package/dist/core/runtime/loop-runtime-config.js +26 -0
- package/dist/core/runtime/loop-session-runner.js +30 -0
- package/dist/core/runtime/loop.js +84 -0
- package/dist/core/runtime/paths.js +84 -0
- package/dist/core/runtime/process-runner.js +16 -0
- package/dist/core/runtime/process-types.js +2 -0
- package/dist/core/runtime/semaphore.js +41 -0
- package/dist/core/runtime/sidecar-fastify-plugin.js +35 -0
- package/dist/core/runtime/sidecar-paths.js +47 -0
- package/dist/core/runtime/sidecar-route-catalog.js +103 -0
- package/dist/core/runtime/spawn-command.js +392 -0
- package/dist/core/runtime/spawn-interactive.js +71 -0
- package/dist/core/security/redaction.js +160 -0
- package/dist/core/session/compression.js +323 -0
- package/dist/core/session/flow.js +85 -0
- package/dist/core/session/manager.js +313 -0
- package/dist/core/session/pruning-strategy.js +153 -0
- package/dist/core/session/session-context-builder.js +122 -0
- package/dist/core/session/summary-sync.js +82 -0
- package/dist/core/session/token-tracker.js +82 -0
- package/dist/core/session/types.js +2 -0
- package/dist/core/skills/bridge.js +33 -0
- package/dist/core/skills/index.js +8 -0
- package/dist/core/skills/loader.js +80 -0
- package/dist/core/skills/parser.js +66 -0
- package/dist/core/skills/runtime/MicroTaskRunner.js +102 -0
- package/dist/core/skills/runtime/SkillRunner.js +108 -0
- package/dist/core/skills/strategy.js +29 -0
- package/dist/core/skills/types.js +2 -0
- package/dist/core/slash/index.js +6 -0
- package/dist/core/slash/parser.js +33 -0
- package/dist/core/slash/registry.js +78 -0
- package/dist/core/slash/router.js +76 -0
- package/dist/core/slash/steps/slash-decide.js +19 -0
- package/dist/core/slash/steps/slash-execute.js +73 -0
- package/dist/core/slash/steps/types.js +2 -0
- package/dist/core/slash/strategy.js +33 -0
- package/dist/core/slash/types.js +2 -0
- package/dist/core/strata/checkpoint/manager.js +492 -0
- package/dist/core/strata/checkpoint/snapshot-audit.js +88 -0
- package/dist/core/strata/checkpoint/snapshot-create.js +79 -0
- package/dist/core/strata/checkpoint/snapshot-write-tree.js +72 -0
- package/dist/core/strata/engine/shadow-merge-engine.js +394 -0
- package/dist/core/strata/index.js +15 -0
- package/dist/core/strata/interaction/content-guardian.js +59 -0
- package/dist/core/strata/interaction/file-system-provider.js +89 -0
- package/dist/core/strata/layers/file-state-resolver.js +157 -0
- package/dist/core/strata/layers/immutable-git-layer.js +42 -0
- package/dist/core/strata/layers/shadow-driver/copy-backend.js +114 -0
- package/dist/core/strata/layers/shadow-driver/env.js +29 -0
- package/dist/core/strata/layers/shadow-driver/error-classifier.js +41 -0
- package/dist/core/strata/layers/shadow-driver/index.js +17 -0
- package/dist/core/strata/layers/shadow-driver/readonly-lock.js +221 -0
- package/dist/core/strata/layers/shadow-driver/shadow-driver.js +234 -0
- package/dist/core/strata/layers/shadow-driver/strategy.js +86 -0
- package/dist/core/strata/layers/sidecar-layer.js +96 -0
- package/dist/core/strata/layers/worktree.js +240 -0
- package/dist/core/strata/runtime/environment.js +377 -0
- package/dist/core/strata/runtime/synchronizer.js +819 -0
- package/dist/core/strata/types.js +46 -0
- package/dist/core/streaming/canonical/canonical-responses-event-emitter.js +326 -0
- package/dist/core/streaming/canonical/function-call-item-id.js +13 -0
- package/dist/core/streaming/canonical/parts-from-llm-stream-chunk.js +54 -0
- package/dist/core/streaming/canonical/responses-event-emitter.js +127 -0
- package/dist/core/streaming/canonical/responses-events.js +2 -0
- package/dist/core/streaming/normalized-events.js +9 -0
- package/dist/core/streaming/normalized-from-text.js +47 -0
- package/dist/core/streaming/stream-assembler.js +347 -0
- package/dist/core/structured-output/index.js +3 -0
- package/dist/core/structured-output/json-extract.js +70 -0
- package/dist/core/structured-output/json-schema-validator.js +90 -0
- package/dist/core/structured-output/types.js +2 -0
- package/dist/core/sub-agent/artifacts/store.js +141 -0
- package/dist/core/sub-agent/artifacts/types.js +2 -0
- package/dist/core/sub-agent/controller.js +69 -0
- package/dist/core/sub-agent/core/loop.js +79 -0
- package/dist/core/sub-agent/core/manager.js +246 -0
- package/dist/core/sub-agent/registry-defaults.js +52 -0
- package/dist/core/sub-agent/registry.js +35 -0
- package/dist/core/sub-agent/tools/task-spawn.js +29 -0
- package/dist/core/sub-agent/types.js +23 -0
- package/dist/core/target-runtime/command-resolver.js +42 -0
- package/dist/core/target-runtime/index.js +3 -0
- package/dist/core/target-runtime/profile.js +73 -0
- package/dist/core/testgen/detector.js +17 -0
- package/dist/core/testgen/index.js +38 -0
- package/dist/core/testgen/templates.js +46 -0
- package/dist/core/tools/audit.js +140 -0
- package/dist/core/tools/authorization/types.js +2 -0
- package/dist/core/tools/budget.js +118 -0
- package/dist/core/tools/builtin/artifact.js +29 -0
- package/dist/core/tools/builtin/ast-grep.js +107 -0
- package/dist/core/tools/builtin/ast.js +62 -0
- package/dist/core/tools/builtin/code-search/backends/powershell.js +84 -0
- package/dist/core/tools/builtin/code-search/backends/rg.js +85 -0
- package/dist/core/tools/builtin/code-search/executor.js +87 -0
- package/dist/core/tools/builtin/code-search/parse/plain-grep.js +59 -0
- package/dist/core/tools/builtin/code-search/parse/rg-json.js +31 -0
- package/dist/core/tools/builtin/code-search/spec.js +82 -0
- package/dist/core/tools/builtin/fs.js +243 -0
- package/dist/core/tools/builtin/git.js +118 -0
- package/dist/core/tools/builtin/index.js +80 -0
- package/dist/core/tools/builtin/interaction.js +120 -0
- package/dist/core/tools/builtin/knowledge.js +98 -0
- package/dist/core/tools/builtin/plan.js +148 -0
- package/dist/core/tools/builtin/proposal.js +207 -0
- package/dist/core/tools/builtin/shell.js +71 -0
- package/dist/core/tools/builtin/verify.js +41 -0
- package/dist/core/tools/capability/executor.js +84 -0
- package/dist/core/tools/capability/runner.js +50 -0
- package/dist/core/tools/capability/types.js +2 -0
- package/dist/core/tools/dispatcher.js +80 -0
- package/dist/core/tools/headless-payload.js +37 -0
- package/dist/core/tools/loader.js +100 -0
- package/dist/core/tools/mapper.js +142 -0
- package/dist/core/tools/mcp/client.js +308 -0
- package/dist/core/tools/mcp/loader.js +110 -0
- package/dist/core/tools/mcp/schema.js +54 -0
- package/dist/core/tools/mcp/streamable-http.js +101 -0
- package/dist/core/tools/mcp/types.js +26 -0
- package/dist/core/tools/parallel/isolation.js +25 -0
- package/dist/core/tools/parallel/lock-manager.js +124 -0
- package/dist/core/tools/parallel/persistence.js +126 -0
- package/dist/core/tools/parallel/plan-builder.js +66 -0
- package/dist/core/tools/parallel/plan.js +2 -0
- package/dist/core/tools/parallel/refs.js +7 -0
- package/dist/core/tools/parallel/resolve-args.js +50 -0
- package/dist/core/tools/parallel/resource-helpers.js +35 -0
- package/dist/core/tools/parallel/resources.js +2 -0
- package/dist/core/tools/parallel/scheduler.js +372 -0
- package/dist/core/tools/parser.js +89 -0
- package/dist/core/tools/permissions/permission-rules.js +503 -0
- package/dist/core/tools/plugins/loader.js +102 -0
- package/dist/core/tools/policy.js +87 -0
- package/dist/core/tools/registry.js +29 -0
- package/dist/core/tools/router.js +514 -0
- package/dist/core/tools/sanitize.js +78 -0
- package/dist/core/tools/schema-utils.js +71 -0
- package/dist/core/tools/session.js +1105 -0
- package/dist/core/tools/streaming/ToolCallAccumulator.js +64 -0
- package/dist/core/tools/types.js +2 -0
- package/dist/core/types/authorization.js +2 -0
- package/dist/core/types/context.js +2 -0
- package/dist/core/types/errors.js +29 -0
- package/dist/core/types/execution.js +65 -0
- package/dist/core/types/index.js +9 -0
- package/dist/core/types/llm.js +9 -0
- package/dist/core/types/loop.js +2 -0
- package/dist/core/types/planning.js +2 -0
- package/dist/core/types/runtime.js +2 -0
- package/dist/core/types/usage.js +2 -0
- package/dist/core/ui/kaomoji.js +5 -0
- package/dist/core/utils/path.js +116 -0
- package/dist/core/utils/platform-shell.js +10 -0
- package/dist/core/utils/sanitizer.js +107 -0
- package/dist/core/verification/runner.js +265 -0
- package/dist/integrations/langfuse/litellm-langfuse-outcome-reporter.js +272 -0
- package/dist/integrations/langfuse/outcome-proxy.js +68 -0
- package/dist/interfaces/cli/task-runner.js +11 -0
- package/dist/languages/typescript/index.js +178 -0
- package/dist/locales/en.js +679 -0
- package/dist/locales/index.js +11 -0
- package/dist/utils/eol.js +35 -0
- package/package.json +153 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { builtinModules } from 'module';
|
|
2
|
+
function extractMissingModule(output) {
|
|
3
|
+
const patterns = [
|
|
4
|
+
/TS2307:\s+Cannot find module ['"]([^'"]+)['"]/i,
|
|
5
|
+
/Cannot find module ['"]([^'"]+)['"]/i,
|
|
6
|
+
];
|
|
7
|
+
for (const pattern of patterns) {
|
|
8
|
+
const match = output.match(pattern);
|
|
9
|
+
if (match?.[1])
|
|
10
|
+
return match[1];
|
|
11
|
+
}
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
const BUILTIN_MODULES = new Set(builtinModules.map((name) => name.replace(/^node:/, '')));
|
|
15
|
+
const SAFE_PACKAGE_NAME_PATTERN = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/;
|
|
16
|
+
function isBarePackageSpecifier(specifier) {
|
|
17
|
+
const trimmed = specifier.trim();
|
|
18
|
+
if (!trimmed)
|
|
19
|
+
return false;
|
|
20
|
+
if (trimmed.startsWith('.') || trimmed.startsWith('/') || trimmed.startsWith('\\'))
|
|
21
|
+
return false;
|
|
22
|
+
if (trimmed.startsWith('node:') || trimmed.startsWith('#'))
|
|
23
|
+
return false;
|
|
24
|
+
if (trimmed.startsWith('~/') || trimmed.startsWith('@/'))
|
|
25
|
+
return false;
|
|
26
|
+
if (/^[a-zA-Z]:[\\/]/.test(trimmed))
|
|
27
|
+
return false;
|
|
28
|
+
if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed))
|
|
29
|
+
return false;
|
|
30
|
+
if (BUILTIN_MODULES.has(trimmed))
|
|
31
|
+
return false;
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
function extractPackageName(specifier) {
|
|
35
|
+
if (!isBarePackageSpecifier(specifier))
|
|
36
|
+
return undefined;
|
|
37
|
+
if (specifier.startsWith('@')) {
|
|
38
|
+
const [scope, name] = specifier.split('/');
|
|
39
|
+
if (!scope || !name)
|
|
40
|
+
return undefined;
|
|
41
|
+
return `${scope}/${name}`;
|
|
42
|
+
}
|
|
43
|
+
return specifier.split('/')[0] || undefined;
|
|
44
|
+
}
|
|
45
|
+
function isSafePackageName(packageName) {
|
|
46
|
+
return SAFE_PACKAGE_NAME_PATTERN.test(packageName);
|
|
47
|
+
}
|
|
48
|
+
function inferInstallCommand(output, pkg) {
|
|
49
|
+
const lower = output.toLowerCase();
|
|
50
|
+
if (lower.includes('pnpm'))
|
|
51
|
+
return `pnpm add ${pkg}`;
|
|
52
|
+
if (lower.includes('yarn'))
|
|
53
|
+
return `yarn add ${pkg}`;
|
|
54
|
+
if (lower.includes('npm'))
|
|
55
|
+
return `npm install ${pkg}`;
|
|
56
|
+
return `bun add ${pkg}`;
|
|
57
|
+
}
|
|
58
|
+
function buildGenericDependencyGuidance() {
|
|
59
|
+
return {
|
|
60
|
+
diagnosticCode: 'VERIFY_DEPENDENCY_ERROR',
|
|
61
|
+
safeHint: 'Verification failed because dependency setup is incomplete in the execution environment.',
|
|
62
|
+
remediationSteps: [
|
|
63
|
+
'Install project dependencies in the repository root and retry.',
|
|
64
|
+
'If this keeps failing, ensure all imported packages are declared in package.json.',
|
|
65
|
+
],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function buildDependencyGuidance(input) {
|
|
69
|
+
if (input.reasonCode !== 'VERIFY_FAILED')
|
|
70
|
+
return undefined;
|
|
71
|
+
const output = input.verifyOutput || '';
|
|
72
|
+
const missingSpecifier = extractMissingModule(output);
|
|
73
|
+
if (!missingSpecifier) {
|
|
74
|
+
if (input.errorCode !== 'dependency_error')
|
|
75
|
+
return undefined;
|
|
76
|
+
return buildGenericDependencyGuidance();
|
|
77
|
+
}
|
|
78
|
+
const packageName = extractPackageName(missingSpecifier);
|
|
79
|
+
if (!packageName || !isSafePackageName(packageName)) {
|
|
80
|
+
if (input.errorCode !== 'dependency_error')
|
|
81
|
+
return undefined;
|
|
82
|
+
return buildGenericDependencyGuidance();
|
|
83
|
+
}
|
|
84
|
+
const installCommand = inferInstallCommand(output, packageName);
|
|
85
|
+
const modeHint = input.environmentMode === 'strict'
|
|
86
|
+
? 'strict mode uses an isolated worktree and does not inherit parent-level node_modules.'
|
|
87
|
+
: 'isolated execution may not reuse parent-level node_modules.';
|
|
88
|
+
return {
|
|
89
|
+
diagnosticCode: 'UNDECLARED_DEPENDENCY',
|
|
90
|
+
safeHint: `Missing declared dependency '${packageName}' in verification environment.`,
|
|
91
|
+
remediationSteps: [
|
|
92
|
+
`Declare and install it in this project (for example: \`${installCommand}\`).`,
|
|
93
|
+
'Commit the updated lockfile so isolated environments can reproduce dependencies.',
|
|
94
|
+
`Why this happens: ${modeHint}`,
|
|
95
|
+
],
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function buildErrorCodeGuidance(input) {
|
|
99
|
+
switch (input.errorCode) {
|
|
100
|
+
case 'LLM_HTTP_REQUEST_FAILED':
|
|
101
|
+
return {
|
|
102
|
+
diagnosticCode: 'LLM_HTTP_REQUEST_FAILED',
|
|
103
|
+
safeHint: 'LLM request failed. Please retry in a moment.',
|
|
104
|
+
remediationSteps: [
|
|
105
|
+
'Retry the command after a short delay.',
|
|
106
|
+
'If it persists, check provider status or credentials.',
|
|
107
|
+
],
|
|
108
|
+
};
|
|
109
|
+
case 'LLM_HTTP_ABORTED':
|
|
110
|
+
return {
|
|
111
|
+
diagnosticCode: 'LLM_HTTP_ABORTED',
|
|
112
|
+
safeHint: 'LLM request was aborted. Please retry.',
|
|
113
|
+
remediationSteps: [
|
|
114
|
+
'Retry the command.',
|
|
115
|
+
'If it persists, check network connectivity or timeouts.',
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
case 'noFilesRead':
|
|
119
|
+
return {
|
|
120
|
+
diagnosticCode: 'NO_FILES_READ',
|
|
121
|
+
safeHint: 'Exploration did not read any files. Your instruction may be too vague (for example, "review my code"). Please specify the exact file(s) or scope you want to work with.',
|
|
122
|
+
remediationSteps: [
|
|
123
|
+
'Explicitly open the target file(s) in your editor, or reference them in your instruction (for example: "review src/main.ts").',
|
|
124
|
+
'If you want to review recent changes, try "review the last committed files" or "review git diff".',
|
|
125
|
+
'Retry the command after opening or referencing the specific files.',
|
|
126
|
+
],
|
|
127
|
+
};
|
|
128
|
+
case 'explorationHallucination':
|
|
129
|
+
return {
|
|
130
|
+
diagnosticCode: 'EXPLORATION_HALLUCINATION',
|
|
131
|
+
safeHint: 'Exploration found candidate files via search but did not read them. This usually happens when the instruction is ambiguous (e.g., "review my code" without specifying which files).',
|
|
132
|
+
remediationSteps: [
|
|
133
|
+
'Open the specific file(s) you want to work with in your editor, or reference them explicitly in your instruction.',
|
|
134
|
+
'If you saw file names in search results, try: "review <file-path>" or "analyze <file-path>".',
|
|
135
|
+
'For ambiguous instructions like "review my code", the agent needs you to clarify which files or scope to focus on.',
|
|
136
|
+
],
|
|
137
|
+
};
|
|
138
|
+
case 'PATCH_NOT_APPLICABLE':
|
|
139
|
+
return {
|
|
140
|
+
diagnosticCode: 'PATCH_NOT_APPLICABLE',
|
|
141
|
+
safeHint: 'Patch could not be applied cleanly. Please retry.',
|
|
142
|
+
remediationSteps: [
|
|
143
|
+
'Re-run after syncing with the latest file contents.',
|
|
144
|
+
'If it keeps failing, rerun with a smaller, more targeted change.',
|
|
145
|
+
],
|
|
146
|
+
};
|
|
147
|
+
case 'LLM_PATCH_EMPTY':
|
|
148
|
+
return {
|
|
149
|
+
diagnosticCode: 'LLM_PATCH_EMPTY',
|
|
150
|
+
safeHint: 'LLM returned an empty patch. Please retry.',
|
|
151
|
+
remediationSteps: ['Retry the command.'],
|
|
152
|
+
};
|
|
153
|
+
case 'LLM_PATCH_NOT_UNIFIED_DIFF':
|
|
154
|
+
return {
|
|
155
|
+
diagnosticCode: 'LLM_PATCH_NOT_UNIFIED_DIFF',
|
|
156
|
+
safeHint: 'LLM returned a patch in an unsupported format. Please retry.',
|
|
157
|
+
remediationSteps: ['Ensure the patch is in unified diff format.'],
|
|
158
|
+
};
|
|
159
|
+
case 'lint':
|
|
160
|
+
return {
|
|
161
|
+
diagnosticCode: 'LINT_FAILED',
|
|
162
|
+
safeHint: 'Linting failed. Fix lint issues and retry.',
|
|
163
|
+
remediationSteps: ['Run the lint command locally to see details.'],
|
|
164
|
+
};
|
|
165
|
+
case 'test':
|
|
166
|
+
return {
|
|
167
|
+
diagnosticCode: 'TEST_FAILED',
|
|
168
|
+
safeHint: 'Tests failed. Fix test failures and retry.',
|
|
169
|
+
remediationSteps: ['Run the test command locally to see details.'],
|
|
170
|
+
};
|
|
171
|
+
case 'Error':
|
|
172
|
+
return {
|
|
173
|
+
diagnosticCode: 'UNEXPECTED_ERROR',
|
|
174
|
+
safeHint: 'An unexpected error occurred. Check the audit log for details and retry.',
|
|
175
|
+
remediationSteps: [
|
|
176
|
+
'Retry the command; if it persists, inspect the audit log for specifics.',
|
|
177
|
+
],
|
|
178
|
+
};
|
|
179
|
+
default:
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
export function buildFailureGuidance(input) {
|
|
184
|
+
const dependencyGuidance = buildDependencyGuidance(input);
|
|
185
|
+
if (dependencyGuidance)
|
|
186
|
+
return dependencyGuidance;
|
|
187
|
+
const errorCodeGuidance = buildErrorCodeGuidance(input);
|
|
188
|
+
if (errorCodeGuidance)
|
|
189
|
+
return errorCodeGuidance;
|
|
190
|
+
if (input.reasonCode === 'PREFLIGHT_NOT_GIT') {
|
|
191
|
+
return {
|
|
192
|
+
diagnosticCode: 'PREFLIGHT_NOT_GIT',
|
|
193
|
+
safeHint: 'Run failed because the target directory is not a Git repository.',
|
|
194
|
+
remediationSteps: [
|
|
195
|
+
'Run the command from a Git repository root, or initialize one with `git init`.',
|
|
196
|
+
],
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
if (input.reasonCode === 'PREFLIGHT_DIRTY') {
|
|
200
|
+
return {
|
|
201
|
+
diagnosticCode: 'PREFLIGHT_DIRTY',
|
|
202
|
+
safeHint: 'Run failed because the workspace has local changes that must be handled first.',
|
|
203
|
+
remediationSteps: ['Commit/stash local changes, or switch to worktree strategy and retry.'],
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
if (input.reasonCode === 'APPLY_BACK_FAILED') {
|
|
207
|
+
return {
|
|
208
|
+
diagnosticCode: 'APPLY_BACK_FAILED',
|
|
209
|
+
safeHint: input.fallbackReason,
|
|
210
|
+
remediationSteps: ['Resolve conflicting local changes, then retry.'],
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
diagnosticCode: input.reasonCode,
|
|
215
|
+
safeHint: input.fallbackReason,
|
|
216
|
+
remediationSteps: [
|
|
217
|
+
'Check the audit log for phase-level details and retry after fixing the issue.',
|
|
218
|
+
],
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { parseGenericOutput } from './parsers.js';
|
|
2
|
+
import { applyPatterns } from './patterns.js';
|
|
3
|
+
export * from './types.js';
|
|
4
|
+
export * from './parsers.js';
|
|
5
|
+
export * from './patterns.js';
|
|
6
|
+
export function generateFeedbackPrompt(diagnostics) {
|
|
7
|
+
if (diagnostics.length === 0)
|
|
8
|
+
return '';
|
|
9
|
+
let prompt = 'Critical Errors found during verification:\n';
|
|
10
|
+
diagnostics.forEach((d, i) => {
|
|
11
|
+
const location = d.line ? `${d.file}:${d.line}` : d.file;
|
|
12
|
+
prompt += `${i + 1}. ${location} - [${d.source}] ${d.message}\n`;
|
|
13
|
+
const suggestion = d.suggestion || applyPatterns(d.message);
|
|
14
|
+
if (suggestion) {
|
|
15
|
+
prompt += ` Suggestion: ${suggestion}\n`;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
return prompt;
|
|
19
|
+
}
|
|
20
|
+
export function refineFeedback(output) {
|
|
21
|
+
const diagnostics = parseGenericOutput(output);
|
|
22
|
+
if (diagnostics.length > 0) {
|
|
23
|
+
return generateFeedbackPrompt(diagnostics);
|
|
24
|
+
}
|
|
25
|
+
// Fallback: last 2000 chars
|
|
26
|
+
return output.length > 2000 ? `...${output.slice(-2000)}` : output;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export function parseTscOutput(output) {
|
|
2
|
+
const diagnostics = [];
|
|
3
|
+
const lines = output.split('\n');
|
|
4
|
+
// Example: src/app.ts(10,5): error TS2322: Type 'string' is not assignable to type 'number'.
|
|
5
|
+
const regex = /^(.+)\((\d+),(\d+)\): (error|warning) (TS\d+): (.+)$/;
|
|
6
|
+
for (const line of lines) {
|
|
7
|
+
const match = line.trim().match(regex);
|
|
8
|
+
if (match) {
|
|
9
|
+
diagnostics.push({
|
|
10
|
+
file: match[1],
|
|
11
|
+
line: parseInt(match[2]),
|
|
12
|
+
column: parseInt(match[3]),
|
|
13
|
+
severity: match[4],
|
|
14
|
+
message: `${match[5]}: ${match[6]}`,
|
|
15
|
+
source: 'tsc',
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return diagnostics;
|
|
20
|
+
}
|
|
21
|
+
export function parsePythonError(output) {
|
|
22
|
+
const diagnostics = [];
|
|
23
|
+
const lines = output.split('\n');
|
|
24
|
+
// Example: File "app.py", line 10, in <module>
|
|
25
|
+
const fileRegex = /File "(.+)", line (\d+)/;
|
|
26
|
+
let currentFile = null;
|
|
27
|
+
let currentLine = null;
|
|
28
|
+
for (let i = 0; i < lines.length; i++) {
|
|
29
|
+
const line = lines[i].trim();
|
|
30
|
+
const fileMatch = line.match(fileRegex);
|
|
31
|
+
if (fileMatch) {
|
|
32
|
+
currentFile = fileMatch[1];
|
|
33
|
+
currentLine = parseInt(fileMatch[2]);
|
|
34
|
+
}
|
|
35
|
+
else if (currentFile && (line.includes('Error:') || line.includes('Exception:'))) {
|
|
36
|
+
diagnostics.push({
|
|
37
|
+
file: currentFile,
|
|
38
|
+
line: currentLine || undefined,
|
|
39
|
+
severity: 'error',
|
|
40
|
+
message: line,
|
|
41
|
+
source: 'python',
|
|
42
|
+
});
|
|
43
|
+
currentFile = null;
|
|
44
|
+
currentLine = null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return diagnostics;
|
|
48
|
+
}
|
|
49
|
+
export function parseGenericOutput(output) {
|
|
50
|
+
// Fallback or combined parser
|
|
51
|
+
const tsc = parseTscOutput(output);
|
|
52
|
+
if (tsc.length > 0)
|
|
53
|
+
return tsc;
|
|
54
|
+
const py = parsePythonError(output);
|
|
55
|
+
if (py.length > 0)
|
|
56
|
+
return py;
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=parsers.js.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export const ERROR_PATTERNS = [
|
|
2
|
+
{
|
|
3
|
+
id: 'module-not-found',
|
|
4
|
+
regex: /Cannot find module '(.+)'/,
|
|
5
|
+
suggestion: 'Check if the package is installed or if the import path matches the file structure.',
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
id: 'react-hook-rule',
|
|
9
|
+
regex: /React Hook ".*" is called conditionally/,
|
|
10
|
+
suggestion: 'Move the Hook call to the top level of the component.',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
id: 'ts-type-mismatch',
|
|
14
|
+
regex: /Type '(.+)' is not assignable to type '(.+)'/,
|
|
15
|
+
suggestion: 'Ensure the types match or use a type assertion if appropriate.',
|
|
16
|
+
},
|
|
17
|
+
];
|
|
18
|
+
export function applyPatterns(message) {
|
|
19
|
+
for (const pattern of ERROR_PATTERNS) {
|
|
20
|
+
if (pattern.regex.test(message)) {
|
|
21
|
+
return pattern.suggestion;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=patterns.js.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File status enumeration strictly following git status --porcelain=v2 format.
|
|
3
|
+
*
|
|
4
|
+
* - CLEAN: No changes
|
|
5
|
+
* - UNTRACKED: Untracked file (??)
|
|
6
|
+
* - STAGED_MODIFIED: Modified in index (M.)
|
|
7
|
+
* - STAGED_ADDED: Added to index (A.)
|
|
8
|
+
* - STAGED_DELETED: Deleted from index (D.)
|
|
9
|
+
* - UNSTAGED_MODIFIED: Modified in worktree but not index (.M)
|
|
10
|
+
* - UNSTAGED_DELETED: Deleted from worktree but not index (.D)
|
|
11
|
+
* - MM: Modified in both index and worktree (Double Dirty)
|
|
12
|
+
* - CONFLICT: Merge conflict (UU/AA/DD)
|
|
13
|
+
*/
|
|
14
|
+
export var FileStatus;
|
|
15
|
+
(function (FileStatus) {
|
|
16
|
+
// Clean state
|
|
17
|
+
FileStatus["CLEAN"] = "CLEAN";
|
|
18
|
+
FileStatus["UNTRACKED"] = "UNTRACKED";
|
|
19
|
+
// Staged states
|
|
20
|
+
FileStatus["STAGED_MODIFIED"] = "STAGED_MODIFIED";
|
|
21
|
+
FileStatus["STAGED_ADDED"] = "STAGED_ADDED";
|
|
22
|
+
FileStatus["STAGED_DELETED"] = "STAGED_DELETED";
|
|
23
|
+
// Worktree states
|
|
24
|
+
FileStatus["UNSTAGED_MODIFIED"] = "UNSTAGED_MODIFIED";
|
|
25
|
+
FileStatus["UNSTAGED_DELETED"] = "UNSTAGED_DELETED";
|
|
26
|
+
// Double Dirty state
|
|
27
|
+
FileStatus["MM"] = "MM";
|
|
28
|
+
// Conflict state
|
|
29
|
+
FileStatus["CONFLICT"] = "CONFLICT";
|
|
30
|
+
})(FileStatus || (FileStatus = {}));
|
|
31
|
+
/**
|
|
32
|
+
* Operation semantic types.
|
|
33
|
+
* Defines whether the content should be treated as a full file or a patch.
|
|
34
|
+
*/
|
|
35
|
+
export var OpType;
|
|
36
|
+
(function (OpType) {
|
|
37
|
+
OpType["PATCH"] = "PATCH";
|
|
38
|
+
OpType["OVERWRITE"] = "OVERWRITE";
|
|
39
|
+
OpType["DELETE"] = "DELETE";
|
|
40
|
+
})(OpType || (OpType = {}));
|
|
41
|
+
//# sourceMappingURL=grizzco-types.js.map
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
export class PlanBuilder {
|
|
2
|
+
plan = {
|
|
3
|
+
shouldAbort: false,
|
|
4
|
+
actions: [],
|
|
5
|
+
decisionTree: [],
|
|
6
|
+
};
|
|
7
|
+
_ctx;
|
|
8
|
+
bindContext(ctx) {
|
|
9
|
+
this._ctx = ctx;
|
|
10
|
+
return this;
|
|
11
|
+
}
|
|
12
|
+
abort(reason) {
|
|
13
|
+
this.plan.shouldAbort = true;
|
|
14
|
+
this.plan.abortReason = reason;
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
reject(reason) {
|
|
18
|
+
return this.abort(reason);
|
|
19
|
+
}
|
|
20
|
+
setWorker(workerId) {
|
|
21
|
+
this.plan.workerId = workerId;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
hasWorker() {
|
|
25
|
+
return Boolean(this.plan.workerId);
|
|
26
|
+
}
|
|
27
|
+
addAction(type, params) {
|
|
28
|
+
this.plan.actions.push({ type, params });
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
build() {
|
|
32
|
+
return this.plan;
|
|
33
|
+
}
|
|
34
|
+
_setDecisionTree(tree) {
|
|
35
|
+
this.plan.decisionTree = tree;
|
|
36
|
+
}
|
|
37
|
+
get ctx() {
|
|
38
|
+
if (!this._ctx)
|
|
39
|
+
throw new Error('PlanBuilder: context not bound');
|
|
40
|
+
return this._ctx;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export class DecisionEngine {
|
|
44
|
+
ctx;
|
|
45
|
+
planBuilder;
|
|
46
|
+
history = [];
|
|
47
|
+
currentPhase = 'initialization';
|
|
48
|
+
missingDataKeys = new Set();
|
|
49
|
+
recordCounter = 0;
|
|
50
|
+
constructor(ctx, planBuilder) {
|
|
51
|
+
this.ctx = ctx;
|
|
52
|
+
this.planBuilder = planBuilder;
|
|
53
|
+
this.planBuilder.bindContext(ctx);
|
|
54
|
+
}
|
|
55
|
+
phase(name) {
|
|
56
|
+
this.currentPhase = name;
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Declare data dependency. Supports single key or array of keys.
|
|
61
|
+
* COMPLIANCE: DSL-Spec-V3 - Explicitly tracks missing keys for the Ping-Pong protocol.
|
|
62
|
+
*/
|
|
63
|
+
requireData(keyOrKeys, reason) {
|
|
64
|
+
const keys = Array.isArray(keyOrKeys) ? keyOrKeys : [keyOrKeys];
|
|
65
|
+
for (const key of keys) {
|
|
66
|
+
if (!this.ctx.data || this.ctx.data[key] === undefined) {
|
|
67
|
+
this.missingDataKeys.add(key);
|
|
68
|
+
this.recordDecision(false, `requireData('${key}')`, { reason });
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.recordDecision(true, `requireData('${key}')`, { val: this.ctx.data[key] });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
require(predicate, msg) {
|
|
77
|
+
if (this.missingDataKeys.size > 0)
|
|
78
|
+
return this;
|
|
79
|
+
const matched = predicate(this.ctx);
|
|
80
|
+
this.recordDecision(matched, predicate, { type: 'require', msg });
|
|
81
|
+
if (!matched) {
|
|
82
|
+
this.planBuilder.abort(msg);
|
|
83
|
+
}
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
when(predicate, action) {
|
|
87
|
+
if (this.missingDataKeys.size > 0)
|
|
88
|
+
return this;
|
|
89
|
+
const matched = predicate(this.ctx);
|
|
90
|
+
this.recordDecision(matched, predicate, { type: 'when' });
|
|
91
|
+
if (matched) {
|
|
92
|
+
action(this.planBuilder);
|
|
93
|
+
}
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
unless(predicate, action) {
|
|
97
|
+
return this.when((c) => !predicate(c), action);
|
|
98
|
+
}
|
|
99
|
+
setWorker(workerId) {
|
|
100
|
+
if (this.missingDataKeys.size > 0)
|
|
101
|
+
return this;
|
|
102
|
+
if (!this.planBuilder.hasWorker()) {
|
|
103
|
+
this.planBuilder.setWorker(workerId);
|
|
104
|
+
}
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
107
|
+
apply(fragment) {
|
|
108
|
+
if (this.missingDataKeys.size > 0)
|
|
109
|
+
return this;
|
|
110
|
+
fragment(this);
|
|
111
|
+
return this;
|
|
112
|
+
}
|
|
113
|
+
build() {
|
|
114
|
+
if (this.missingDataKeys.size > 0) {
|
|
115
|
+
const keys = Array.from(this.missingDataKeys);
|
|
116
|
+
return {
|
|
117
|
+
type: 'NEED_DATA',
|
|
118
|
+
key: keys[0] || 'unknown',
|
|
119
|
+
keys,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
this.planBuilder._setDecisionTree(this.exportDecisionTree());
|
|
123
|
+
return {
|
|
124
|
+
type: 'PLAN',
|
|
125
|
+
plan: this.planBuilder.build(),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
getStructuredDecisions() {
|
|
129
|
+
return [...this.history];
|
|
130
|
+
}
|
|
131
|
+
recordDecision(matched, predicateOrRule, metadata) {
|
|
132
|
+
const rule = typeof predicateOrRule === 'string'
|
|
133
|
+
? predicateOrRule
|
|
134
|
+
: predicateOrRule.toString().slice(0, 100);
|
|
135
|
+
this.history.push({
|
|
136
|
+
index: this.recordCounter++,
|
|
137
|
+
phase: this.currentPhase,
|
|
138
|
+
rule,
|
|
139
|
+
matched,
|
|
140
|
+
metadata,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
exportDecisionTree() {
|
|
144
|
+
return this.history
|
|
145
|
+
.map((r) => `${r.matched ? '[match]' : '[skip]'} [${r.phase}] ${r.rule}`)
|
|
146
|
+
.filter(Boolean);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=DecisionEngine.js.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { text } from '../../../locales/index.js';
|
|
2
|
+
import { DecisionEngine, PlanBuilder, } from './DecisionEngine.js';
|
|
3
|
+
export class MicroTaskRunner {
|
|
4
|
+
params;
|
|
5
|
+
maxRounds;
|
|
6
|
+
constructor(params) {
|
|
7
|
+
this.params = params;
|
|
8
|
+
this.maxRounds = params.maxRounds ?? 10;
|
|
9
|
+
}
|
|
10
|
+
async decide(context) {
|
|
11
|
+
let rounds = 0;
|
|
12
|
+
let finalEngine;
|
|
13
|
+
while (true) {
|
|
14
|
+
if (rounds++ > this.maxRounds) {
|
|
15
|
+
throw new Error(text.grizzco.microOrchestratorLoopStuck(this.params.debugLabel || 'unknown'));
|
|
16
|
+
}
|
|
17
|
+
const planBuilder = new PlanBuilder();
|
|
18
|
+
const engine = new DecisionEngine(context, planBuilder);
|
|
19
|
+
finalEngine = engine;
|
|
20
|
+
this.params.strategy(engine);
|
|
21
|
+
const result = engine.build();
|
|
22
|
+
if (result.type === 'PLAN') {
|
|
23
|
+
return {
|
|
24
|
+
plan: result.plan,
|
|
25
|
+
decisions: finalEngine.getStructuredDecisions(),
|
|
26
|
+
context,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (!context.data) {
|
|
30
|
+
context.data = {};
|
|
31
|
+
}
|
|
32
|
+
const requiredKeys = result.keys ?? [result.key];
|
|
33
|
+
await Promise.all(requiredKeys.map(async (key) => {
|
|
34
|
+
context.data[key] = await this.params.resolveData(context, key);
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=MicroTaskRunner.js.map
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Phase } from '../../types/runtime.js';
|
|
2
|
+
import { DecisionEngine, PlanBuilder } from './DecisionEngine.js';
|
|
3
|
+
function defaultMaxRoundsForPhase(phase) {
|
|
4
|
+
// Explore needs more rounds to navigate the codebase
|
|
5
|
+
if (phase === Phase.EXPLORE)
|
|
6
|
+
return 8;
|
|
7
|
+
if (phase === Phase.RESEARCH)
|
|
8
|
+
return 8;
|
|
9
|
+
if (phase === Phase.PLAN)
|
|
10
|
+
return 4;
|
|
11
|
+
if (phase === Phase.PATCH)
|
|
12
|
+
return 4;
|
|
13
|
+
return 4;
|
|
14
|
+
}
|
|
15
|
+
export function resolveLlmToolCallingPolicy(phase, llm) {
|
|
16
|
+
const caps = llm.getCapabilities?.();
|
|
17
|
+
const maxRounds = defaultMaxRoundsForPhase(phase);
|
|
18
|
+
// Grizzco DSL engine is transaction-shaped; for LLM policies we inject a minimal context and keep all
|
|
19
|
+
// decisions inside ctx.data to avoid coupling to file/operation semantics.
|
|
20
|
+
const ctx = {
|
|
21
|
+
repoRoot: '',
|
|
22
|
+
file: {
|
|
23
|
+
path: '',
|
|
24
|
+
status: 0,
|
|
25
|
+
isBinary: false,
|
|
26
|
+
isSymlink: false,
|
|
27
|
+
isIgnored: false,
|
|
28
|
+
hasConflict: false,
|
|
29
|
+
size: 0,
|
|
30
|
+
},
|
|
31
|
+
operation: {
|
|
32
|
+
type: 0,
|
|
33
|
+
path: '',
|
|
34
|
+
},
|
|
35
|
+
options: {
|
|
36
|
+
force: false,
|
|
37
|
+
allowMM: false,
|
|
38
|
+
safeMode: true,
|
|
39
|
+
rejectDir: '',
|
|
40
|
+
dryRun: true,
|
|
41
|
+
maxFileSize: 0,
|
|
42
|
+
},
|
|
43
|
+
snapshot: {
|
|
44
|
+
exists: true,
|
|
45
|
+
id: 'llm-policy',
|
|
46
|
+
timestamp: 0,
|
|
47
|
+
path: '',
|
|
48
|
+
},
|
|
49
|
+
runtime: {
|
|
50
|
+
needsRollback: false,
|
|
51
|
+
},
|
|
52
|
+
data: {
|
|
53
|
+
llm_tool_calling_capable: Boolean(caps?.toolCalling),
|
|
54
|
+
llm_tool_calling_max_rounds: maxRounds,
|
|
55
|
+
phase,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
const planBuilder = new PlanBuilder();
|
|
59
|
+
const engine = new DecisionEngine(ctx, planBuilder);
|
|
60
|
+
const result = engine
|
|
61
|
+
.phase('LLM Tool Calling Policy')
|
|
62
|
+
.requireData('llm_tool_calling_capable')
|
|
63
|
+
.requireData('llm_tool_calling_max_rounds')
|
|
64
|
+
.when((c) => Boolean(c.data?.llm_tool_calling_capable), (p) => p.addAction('SET_TOOL_CALLING_POLICY', {
|
|
65
|
+
enabled: true,
|
|
66
|
+
maxRounds,
|
|
67
|
+
}))
|
|
68
|
+
.unless((c) => Boolean(c.data?.llm_tool_calling_capable), (p) => p.addAction('SET_TOOL_CALLING_POLICY', {
|
|
69
|
+
enabled: false,
|
|
70
|
+
maxRounds,
|
|
71
|
+
}))
|
|
72
|
+
.build();
|
|
73
|
+
if (result.type !== 'PLAN') {
|
|
74
|
+
return { enabled: false, maxRounds };
|
|
75
|
+
}
|
|
76
|
+
const actions = result.plan.actions;
|
|
77
|
+
const lastPolicy = [...actions].reverse().find((a) => a.type === 'SET_TOOL_CALLING_POLICY');
|
|
78
|
+
return lastPolicy?.params || { enabled: false, maxRounds };
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=llm-strategy.js.map
|