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,679 @@
|
|
|
1
|
+
export const en = {
|
|
2
|
+
llm: {
|
|
3
|
+
planEmpty: 'LLM returned empty response for plan',
|
|
4
|
+
planInvalid: 'Invalid Plan structure: missing required fields',
|
|
5
|
+
planInvalidJson: 'LLM returned invalid JSON for plan',
|
|
6
|
+
planParseFailed: (content, error) => {
|
|
7
|
+
const raw = String(content ?? '');
|
|
8
|
+
const max = 800;
|
|
9
|
+
const preview = raw.length <= max ? raw : `${raw.slice(0, max)}…[truncated]…`;
|
|
10
|
+
return `Failed to parse LLM response as JSON: ${preview}. Error: ${error}`;
|
|
11
|
+
},
|
|
12
|
+
patchEmpty: (reason) => `LLM returned empty response for patch${reason ? ` (${reason})` : ''}`,
|
|
13
|
+
patchNotUnifiedDiff: 'LLM patch is not in unified diff format',
|
|
14
|
+
patchInvalid: 'LLM patch is invalid',
|
|
15
|
+
reviewEmpty: 'LLM returned empty response for review',
|
|
16
|
+
validationFailed: 'Tool output validation failed. The output does not match the expected schema.',
|
|
17
|
+
},
|
|
18
|
+
llmErrors: {
|
|
19
|
+
httpResponseInvalidJson: 'LLM returned an invalid JSON response',
|
|
20
|
+
httpInvalidJson: 'LLM returned a malformed JSON response',
|
|
21
|
+
httpAborted: 'LLM request was aborted',
|
|
22
|
+
httpRequestFailed: 'LLM request failed',
|
|
23
|
+
contextLengthExceeded: 'LLM prompt exceeds the model context length.',
|
|
24
|
+
},
|
|
25
|
+
errors: {
|
|
26
|
+
technicalDetailsHidden: 'Technical details were hidden for safety. See the audit log for more information.',
|
|
27
|
+
noFilesRead: 'No files were read during exploration. Open target files and retry.',
|
|
28
|
+
explorationHallucination: 'Exploration found candidate files but did not read them. Open target files and retry.',
|
|
29
|
+
preflightNotGit: 'Preflight failed: not a git repository.',
|
|
30
|
+
preflightDirty: 'Preflight failed: workspace has uncommitted changes.',
|
|
31
|
+
applyBackFailed: 'Apply-back failed due to conflicting local changes.',
|
|
32
|
+
patchNotApplicable: 'Patch could not be applied cleanly.',
|
|
33
|
+
diffValidationFailed: 'Diff validation failed.',
|
|
34
|
+
gitError: 'Git operation failed.',
|
|
35
|
+
schemaInvalid: 'Structured output schema is invalid.',
|
|
36
|
+
schemaValidationFailed: 'Structured output validation failed.',
|
|
37
|
+
schemaViolation: 'Tool output schema violation detected.',
|
|
38
|
+
usageError: 'Usage error: invalid command options.',
|
|
39
|
+
interruptRequired: 'Input required to continue.',
|
|
40
|
+
permissionRuleDeny: 'Permission denied by policy.',
|
|
41
|
+
permissionRequiredContextCacheOutsideRoot: 'Permission required: context cache outside repository root.',
|
|
42
|
+
permissionDeniedContextCacheOutsideRoot: 'Permission denied: context cache outside repository root.',
|
|
43
|
+
compilationFailed: 'Compilation failed.',
|
|
44
|
+
lintFailed: 'Linting failed.',
|
|
45
|
+
testFailed: 'Tests failed.',
|
|
46
|
+
logicFailed: 'Verification failed.',
|
|
47
|
+
dependencyError: 'Dependency setup failed in the verification environment.',
|
|
48
|
+
resourceLockError: 'Resource lock error during verification.',
|
|
49
|
+
astValidationError: 'AST validation error.',
|
|
50
|
+
unknownError: 'Unknown error.',
|
|
51
|
+
timeout: 'Operation timed out.',
|
|
52
|
+
runtimeError: 'Runtime error occurred.',
|
|
53
|
+
toolParseError: 'Tool input could not be parsed.',
|
|
54
|
+
outputParseFailed: 'Structured output could not be parsed.',
|
|
55
|
+
authRequired: 'Authorization required to continue.',
|
|
56
|
+
askUserCancelled: 'User input was cancelled.',
|
|
57
|
+
askUserSubagentBlocked: 'User input blocked in sub-agent mode.',
|
|
58
|
+
serializeError: 'Failed to serialize tool payload.',
|
|
59
|
+
parseError: 'Failed to parse tool payload.',
|
|
60
|
+
executionError: 'Tool execution failed.',
|
|
61
|
+
invalidOutput: 'Tool output was invalid.',
|
|
62
|
+
outputTruncated: 'Output was truncated.',
|
|
63
|
+
pipelineRecoveryFailed: 'Pipeline recovery failed.',
|
|
64
|
+
unknownSlash: 'Unknown slash command.',
|
|
65
|
+
noSlashHandler: 'No handler available for the slash command.',
|
|
66
|
+
internalError: 'Internal error occurred.',
|
|
67
|
+
toolUnavailable: 'Required tool backend is unavailable.',
|
|
68
|
+
nonzeroExit: 'Command failed with non-zero exit code.',
|
|
69
|
+
toolNotFound: 'Tool not found.',
|
|
70
|
+
malformedToolCall: 'Tool call was malformed.',
|
|
71
|
+
invalidToolArguments: 'Tool arguments were invalid.',
|
|
72
|
+
toolBudgetConcurrency: 'Tool call rejected due to concurrency budget.',
|
|
73
|
+
toolCallBudgetExceeded: 'Tool call budget exceeded.',
|
|
74
|
+
ppdToolResultMissing: 'Tool result is missing required payload.',
|
|
75
|
+
technicalError: 'Technical error occurred.',
|
|
76
|
+
usagePrintInstructionConflict: 'Usage error: --print-instruction cannot be used with explicit instructions.',
|
|
77
|
+
usageContinueResumeConflict: 'Usage error: --continue and --resume cannot be used together.',
|
|
78
|
+
usageOutputProfileRequiresStreamJson: 'Usage error: --output-profile requires --output-format stream-json.',
|
|
79
|
+
usageInvalidOutputProfile: 'Usage error: invalid output profile.',
|
|
80
|
+
usageJsonSchemaRequiresJson: 'Usage error: --json-schema requires --output-format json.',
|
|
81
|
+
allowlistParseFailed: 'Allowlist parsing failed.',
|
|
82
|
+
allowlistWriteFailed: 'Allowlist write failed.',
|
|
83
|
+
allowlistCacheWriteFailed: 'Allowlist cache write failed.',
|
|
84
|
+
allowlistLockTimeout: 'Allowlist lock acquisition timed out.',
|
|
85
|
+
allowlistLockVerificationFailed: 'Allowlist lock verification failed.',
|
|
86
|
+
allowlistAtomicWriteBackupFailed: 'Allowlist atomic write backup failed.',
|
|
87
|
+
allowlistAtomicRestoreFailed: 'Allowlist atomic restore failed.',
|
|
88
|
+
allowlistPathBlocked: 'Allowlist blocked the requested path.',
|
|
89
|
+
},
|
|
90
|
+
acp: {
|
|
91
|
+
slashHelpDescription: 'Show available ACP slash commands',
|
|
92
|
+
slashHelpResponse: (commands) => `Available commands: ${commands}`,
|
|
93
|
+
slashUnknownCommand: (commandName) => `Unknown command: /${commandName}`,
|
|
94
|
+
askUserHeader: 'User input required',
|
|
95
|
+
askUserQuestion: (question) => `Question: ${question}`,
|
|
96
|
+
askUserOptionsHeader: 'Options:',
|
|
97
|
+
askUserOption: (label, description) => `- ${label}: ${description}`,
|
|
98
|
+
askUserMultiSelectHint: 'Multi-select enabled (comma-separated answers)',
|
|
99
|
+
permissionPolicyName: 'Permission policy',
|
|
100
|
+
permissionPolicyDescription: 'How side-effecting operations should be authorized for this session.',
|
|
101
|
+
permissionPolicyAskName: 'Ask user',
|
|
102
|
+
permissionPolicyAskDescription: 'Request user permission for side-effecting operations.',
|
|
103
|
+
permissionPolicyDenyAllName: 'Deny all',
|
|
104
|
+
permissionPolicyDenyAllDescription: 'Automatically deny side-effecting operations.',
|
|
105
|
+
modeInteractiveDescription: 'Request permission before running side-effecting operations.',
|
|
106
|
+
modeYoloDescription: 'Bypass permission prompts for side-effecting operations.',
|
|
107
|
+
},
|
|
108
|
+
prompts: {
|
|
109
|
+
definitionHint: 'Definitions should be modified with extreme caution',
|
|
110
|
+
referenceHint: 'References marked with ↗️ indicate usage locations',
|
|
111
|
+
plan: (context, instruction, maxFilesChanged, lastError) => `You are a code modification assistant. Please generate a detailed modification plan based on the following context and instruction.
|
|
112
|
+
|
|
113
|
+
# Context Hierarchy
|
|
114
|
+
- **Primary Text**: The ACTUAL content of the files. This is the only authoritative source for what lines exist.
|
|
115
|
+
- **Staged Diff**: Informational only. It may include changes that are NOT present in the working tree text you are patching.
|
|
116
|
+
- **Unstaged Diff**: Informational only. It may not fully reflect the working tree after retries.
|
|
117
|
+
- **Untracked Files**: New files that are not yet tracked by git.
|
|
118
|
+
|
|
119
|
+
# Context Data
|
|
120
|
+
${context}
|
|
121
|
+
|
|
122
|
+
# Instruction
|
|
123
|
+
${instruction}
|
|
124
|
+
${lastError ? `\n# Last Error\nThe previous attempt failed with the following error. Please adjust the plan to fix this issue:\n${lastError}\n` : ''}
|
|
125
|
+
# Requirements
|
|
126
|
+
- The plan must be in JSON format, containing exactly these fields: goal, files, changes, verify.
|
|
127
|
+
- 'goal': A brief, one-sentence description of the modification goal.
|
|
128
|
+
- 'files': An array of EXACT relative file paths that MUST be modified.
|
|
129
|
+
- 'changes': An array of strings, each clearly describing a specific logical change.
|
|
130
|
+
- 'verify': A verification command (e.g., \`pytest\`, \`go test ./...\`, or your project test command) or a concise description of how to verify.
|
|
131
|
+
- **Constraints**:
|
|
132
|
+
- Maximum ${maxFilesChanged} files can be modified.
|
|
133
|
+
- Do NOT generate any code blocks or implementation details here.
|
|
134
|
+
- DO NOT include files that do not need changes.
|
|
135
|
+
|
|
136
|
+
Please return the plan in PURE JSON format without any additional text:`,
|
|
137
|
+
patch: (plan, context, maxFilesChanged, maxDiffLines, lastError) => {
|
|
138
|
+
let targetFiles = '';
|
|
139
|
+
try {
|
|
140
|
+
const parsedPlan = JSON.parse(plan);
|
|
141
|
+
if (parsedPlan.files && Array.isArray(parsedPlan.files)) {
|
|
142
|
+
targetFiles = parsedPlan.files.join(', ');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (__e) {
|
|
146
|
+
// Fallback if plan is not valid JSON
|
|
147
|
+
}
|
|
148
|
+
return `You are a code modification assistant. Please generate a unified diff format patch based on the following plan and context.
|
|
149
|
+
|
|
150
|
+
# Context Hierarchy
|
|
151
|
+
- **Primary Text**: The ACTUAL content of the files. This is the absolute truth you must modify.
|
|
152
|
+
- **Staged Diff**: Represents committed intentions or baseline changes. Respect these as part of the established direction.
|
|
153
|
+
- **Unstaged Diff**: Shows recent work in progress. Do not revert or overwrite these changes unless explicitly instructed.
|
|
154
|
+
- **Untracked Files**: New files that are not yet tracked by git.
|
|
155
|
+
|
|
156
|
+
# Plan
|
|
157
|
+
${plan}
|
|
158
|
+
|
|
159
|
+
# Context Data
|
|
160
|
+
${context}
|
|
161
|
+
${targetFiles ? `\n# Target Files\n${targetFiles}\n` : ''}
|
|
162
|
+
${lastError ? `\n# Last Error\nThe previous attempt failed with the following error. Please fix the issue described:\n${lastError}\n` : ''}
|
|
163
|
+
|
|
164
|
+
# Bad Examples (REJECTED OUTPUT)
|
|
165
|
+
- **Adding explanations**: "Here is the diff you requested..."
|
|
166
|
+
- **Markdown blocks**: \`\`\`diff ... \`\`\`
|
|
167
|
+
- **Multiple versions**: Providing both the old and new file contents separately.
|
|
168
|
+
- **Partial fixes**: "I will fix the rest in the next step."
|
|
169
|
+
|
|
170
|
+
# Validation Checklist (BEFORE OUTPUT)
|
|
171
|
+
1. **Format**: Is it standard git unified diff (starting with \`diff --git\`)?
|
|
172
|
+
2. **Paths**: Do \`--- a/path\` and \`+++ b/path\` exactly match target files?
|
|
173
|
+
3. **Scope**: Does it only modify what's requested in the instruction?
|
|
174
|
+
4. **Context**: Are there 8-12 lines of EXACT surrounding context for each hunk?
|
|
175
|
+
5. **Cleanliness**: Is there ANY text other than the diff itself? (If yes, remove it).
|
|
176
|
+
|
|
177
|
+
# Requirements
|
|
178
|
+
- Must generate standard **git unified diff format**.
|
|
179
|
+
- **Output ONLY the final diff. Do NOT include any explanations, Markdown blocks, or commentary.**
|
|
180
|
+
- **If you need to fix an error, regenerate the ENTIRE diff correctly in one block.**
|
|
181
|
+
- **CRITICAL**: Use EXACT relative paths from the repository root in diff headers.
|
|
182
|
+
- Example: \`--- a/src/index.js\` and \`+++ b/src/index.js\`
|
|
183
|
+
- **Context Matching**: Provide 8-12 lines of surrounding code.
|
|
184
|
+
- Indentation and whitespace must match EXACTLY.
|
|
185
|
+
- **DO NOT include \`index <old>..<new>\` lines** (the host may strip them for safety).
|
|
186
|
+
- Constraints:
|
|
187
|
+
- Maximum ${maxFilesChanged} files.
|
|
188
|
+
- Maximum ${maxDiffLines} total diff lines.
|
|
189
|
+
- No file creation, deletion, or renaming.
|
|
190
|
+
- No unrelated refactoring or formatting.
|
|
191
|
+
- **DO NOT translate or modify comments unless explicitly instructed.**
|
|
192
|
+
|
|
193
|
+
Please return the patch in PURE unified diff format:`;
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
git: {
|
|
197
|
+
applyFailed: (error) => `git apply failed: ${error}`,
|
|
198
|
+
applySpawnFailed: (error) => `git apply spawn failed: ${error}`,
|
|
199
|
+
processError: (error) => `Git process error: ${error}`,
|
|
200
|
+
commandFailed: (code) => `Git command failed with code ${code}`,
|
|
201
|
+
commandFailedDetailed: (code, stderr) => `Git command failed with code ${code}${stderr ? `: ${stderr}` : ''}`,
|
|
202
|
+
timeout: (timeout) => `Git command timed out after ${timeout}ms`,
|
|
203
|
+
securityViolation: (cmd) => `Security Violation: Git command '${cmd}' is not allowed via this gateway.`,
|
|
204
|
+
hashObjectFailed: 'hash-object failed',
|
|
205
|
+
showFailed: (error) => `git show failed: ${error}`,
|
|
206
|
+
mergeFileFailed: (error) => `git merge-file failed: ${error}`,
|
|
207
|
+
conflictResolutionDenied: 'Conflict resolution denied: Cannot run destructive reset in non-shadow environment',
|
|
208
|
+
indexWriteDenied: 'Index write denied: This operation is only allowed in a shadow worktree.',
|
|
209
|
+
outputTruncated: (maxBytes) => `Git output truncated at ${maxBytes} bytes`,
|
|
210
|
+
},
|
|
211
|
+
diff: {
|
|
212
|
+
notUnifiedFormat: 'Patch is not in unified diff format',
|
|
213
|
+
patchDoesNotApply: (details) => `Patch does not apply cleanly to the current workspace${details ? `:\n${details}` : ''}`,
|
|
214
|
+
tooManyFiles: (count, max, files) => `Patch affects ${count} files, but you can only modify up to ${max} files.${files ? ` (Files: ${files.join(', ')})` : ''}`,
|
|
215
|
+
tooManyLines: (count, max) => `Patch has ${count} diff lines, but the maximum allowed is ${max} lines.`,
|
|
216
|
+
fileCreationNotAllowed: (file) => `File creation is not allowed in this mode${file ? `: ${file}` : ''}`,
|
|
217
|
+
fileDeletionNotAllowed: (file) => `File deletion is not allowed in this mode${file ? `: ${file}` : ''}`,
|
|
218
|
+
fileRenameNotAllowed: (from, to) => `File renaming is not allowed in this mode${from && to ? `: ${from} -> ${to}` : ''}`,
|
|
219
|
+
diffValidationFailed: (reason) => `Diff validation failed: ${reason}`,
|
|
220
|
+
},
|
|
221
|
+
loop: {
|
|
222
|
+
starting: 'Starting salmon-loop...',
|
|
223
|
+
preflightPassed: 'Environment safety validation completed',
|
|
224
|
+
planFailed: (error) => `Plan failed: ${error}`,
|
|
225
|
+
patchGenerationFailed: (error) => `Patch generation failed: ${error}`,
|
|
226
|
+
patchApplyFailed: (error) => `Patch application failed: ${error}`,
|
|
227
|
+
verificationFailed: (error) => `Verification failed: ${error}`,
|
|
228
|
+
verificationFailedSummary: 'Verification failed',
|
|
229
|
+
verificationPassed: 'Verification passed successfully',
|
|
230
|
+
budgetStatusSummary: (avgUtilizationPercent, truncationRatePercent, successRatePercent, criticalDropRatePercent, sampleSize) => `Budget status: utilization=${avgUtilizationPercent}% truncation=${truncationRatePercent}% success=${successRatePercent}% critical_drop=${criticalDropRatePercent}% samples=${sampleSize}`,
|
|
231
|
+
verificationSkipped: 'Skipped',
|
|
232
|
+
verificationOutputStored: (handle) => `Verification output saved as artifact: ${handle}`,
|
|
233
|
+
success: 'Successfully completed',
|
|
234
|
+
maxRetriesExceeded: (maxRetries, lastError) => `Exceeded maximum retries (${maxRetries}), last error: ${lastError}`,
|
|
235
|
+
retryingAttempt: (from, to, reason) => `Retrying (${from} -> ${to}). Reason: ${reason}`,
|
|
236
|
+
contextShrinking: 'Shrinking context and retrying...',
|
|
237
|
+
rollbackAndShrink: 'Rolling back and shrinking context...',
|
|
238
|
+
diffValidationPassed: 'Diff validation passed',
|
|
239
|
+
patchValidationFailed: 'Patch validation failed',
|
|
240
|
+
contextShrunk: 'Context shrunk for next attempt',
|
|
241
|
+
patchApplied: 'Patch applied successfully',
|
|
242
|
+
dryRunPatchNotApplied: 'Dry run - patch not applied',
|
|
243
|
+
dryRunCompleted: 'Dry run completed: patch generated and validated, but not applied.',
|
|
244
|
+
operationCompleted: 'Operation completed successfully',
|
|
245
|
+
exceededMaxRetriesSimple: 'Exceeded maximum retry attempts',
|
|
246
|
+
loopExecutionFailed: 'Loop execution failed',
|
|
247
|
+
unexpectedTermination: 'Unexpected loop termination',
|
|
248
|
+
rollbackFailed: (error) => `Rollback failed: ${error}`,
|
|
249
|
+
rollbackCompleted: 'Rollback completed successfully',
|
|
250
|
+
rollbackSkippedNoAnchor: 'Skipping rollback: No shadowInitialRef found',
|
|
251
|
+
emergencyRollbackTriggered: 'Emergency rollback triggered due to pipeline failure',
|
|
252
|
+
emergencyRollbackFailed: (error) => `Emergency rollback failed: ${error}`,
|
|
253
|
+
rollbackFailedDirty: 'Rollback failed; workspace may be dirty. Please run `git status` and manually reset using `git reset --hard`. If you are in a retry loop, you might need to manually clean up before the next attempt.',
|
|
254
|
+
rollbackSuccess: (files) => `Successfully rolled back: ${files.join(', ')}`,
|
|
255
|
+
rollbackAllSuccess: 'Successfully rolled back all changes using hard reset',
|
|
256
|
+
preflightFailedNotGit: 'Preflight check failed: Not a git repository',
|
|
257
|
+
preflightFailedDirty: (status) => `Preflight check failed: Workspace has uncommitted changes. Please commit or stash them before running SalmonLoop.\n\nChanges:\n${status}`,
|
|
258
|
+
gitNotFound: 'Preflight check failed: git command not found. Please ensure git is installed and in your PATH.',
|
|
259
|
+
preflightGitCheckFailed: (error) => `Preflight check failed: git error: ${error}`,
|
|
260
|
+
preflightGitStatusFailed: (error) => `Preflight check failed: git status error: ${error}`,
|
|
261
|
+
forceResetNotAllowedWithDirty: 'Safety Guard: --force-reset is not allowed when the workspace is dirty to prevent accidental loss of uncommitted changes.',
|
|
262
|
+
workspaceInitFailed: 'Failed to initialize workspace',
|
|
263
|
+
worktreeMetadataFailed: (error) => `Failed to capture worktree metadata: ${error}`,
|
|
264
|
+
ignoringDirtyWorkspaceDebug: (reason) => `Ignoring dirty workspace for worktree strategy: ${reason}`,
|
|
265
|
+
worktreePrepareDebug: (command) => `Running worktree prepare command: ${command}`,
|
|
266
|
+
worktreePrepareFailed: (output) => `Worktree prepare command failed: ${output}`,
|
|
267
|
+
syncingDirtyWorkspace: 'Syncing dirty workspace changes to worktree...',
|
|
268
|
+
noContextGathered: 'No relevant context could be gathered for the given instruction.',
|
|
269
|
+
astValidationPassed: 'AST validation passed',
|
|
270
|
+
astValidationFailed: (error) => `AST validation failed: ${error}`,
|
|
271
|
+
astStructureError: (file, error) => `AST structure error in ${file}: ${error}`,
|
|
272
|
+
astScopeIntegrityError: (file, reason) => `AST scope integrity check failed for ${file}: ${reason}`,
|
|
273
|
+
targetNodePlacementError: (file, reason) => `Target node placement validation failed for ${file}: ${reason}`,
|
|
274
|
+
skipPathDueToPolicy: (reason, file) => `Skipping path ${file} due to policy: ${reason}`,
|
|
275
|
+
skipFileDueToPolicy: (reason, file) => `Skipping file ${file} due to policy: ${reason}`,
|
|
276
|
+
skipMissingFileSync: (file) => `Skipping missing file during sync: ${file}`,
|
|
277
|
+
// applyBack specific messages used by shadow-merge.ts
|
|
278
|
+
skippedFiles: (files) => `[applyBack] Skipped files: ${files}`,
|
|
279
|
+
removeMergeTempFailed: (path, error) => `[applyBack] Failed to remove merge temp file ${path}: ${error}`,
|
|
280
|
+
normalizingCrlf: '[applyBack] Normalizing CRLF line endings to LF for merge-file.',
|
|
281
|
+
getStatusForPathRaw: (file) => `[getStatusForPath] Raw status for ${file}:`,
|
|
282
|
+
getStatusForPathToken: (idx, code, hex0, hex1, full) => ` Token ${idx}: code="${code}" (0x${hex0} 0x${hex1}), full="${full}"`,
|
|
283
|
+
shadowDiffPreviewEngine: (file, lines, hunks) => `[applyBack] Shadow diff for ${file}: ${lines} lines, hunks: ${hunks}`,
|
|
284
|
+
shadowDiffPreviewFull: (preview) => `[applyBack] Shadow diff preview:\n${preview}`,
|
|
285
|
+
appliedLineLocationsEngine: (file, locations) => `[applyBack] Applied line locations for ${file}: ${locations}`,
|
|
286
|
+
unionMergeWarning: (file) => `[applyBack] Note: used union merge strategy for ignored file ${file}. Please check for duplicate keys.`,
|
|
287
|
+
applyBackCompletedWithConflicts: (count, files) => `Apply-back completed with conflicts in ${count} file(s): ${files}. Rejection files (.rej) have been generated.`,
|
|
288
|
+
conflictGeneratedRejection: (file, path) => `Conflict in ${file}, generated rejection file: ${path}`,
|
|
289
|
+
failedToGenerateRejection: (file, error) => `Failed to generate .rej file for ${file}: ${error}`,
|
|
290
|
+
workspaceDirtyAbort: 'Workspace is dirty and applyBackOnDirty is set to abort',
|
|
291
|
+
applyBackAbortedDirty: (status) => `Apply-back aborted: main workspace has uncommitted changes.\n${status}`,
|
|
292
|
+
promotingUnstagedChanges: (file) => `[ShadowMergeEngine] File ${file} is in MM (Double Dirty) state. Promoting unstaged changes to index to resolve context dependency.`,
|
|
293
|
+
skippingIgnoredFileOverwrite: (file) => `Skipping overwrite of ignored file: ${file}`,
|
|
294
|
+
using3WayMergeStrategy: '[ShadowMergeEngine] Using 3-way merge strategy to preserve user changes in dirty workspace.',
|
|
295
|
+
// Internal loop logs
|
|
296
|
+
createdSafeSnapshot: (hash) => `Created safe snapshot: ${hash}`,
|
|
297
|
+
snapshotCreateError: (error) => `Failed to create snapshot: ${error}`,
|
|
298
|
+
recordInitialRefError: (error) => `Failed to record initial checkpoint ref: ${error}`,
|
|
299
|
+
discoveryPhaseBanner: 'You are in the CONTEXT DISCOVERY phase. Your goal is to gather information about the codebase to solve the task.',
|
|
300
|
+
discoveryPhaseHint: 'You can use tools by wrapping them in <sl_tool_call v="1"> tags.',
|
|
301
|
+
discoveryPhaseExample: 'Example: <sl_tool_call v="1">{"toolName": "code.search", "args": {"pattern": "main"}}</sl_tool_call>',
|
|
302
|
+
discoveryTask: (task) => `Task: ${task}`,
|
|
303
|
+
discoveryVerify: (cmd) => `Verification Command: ${cmd}`,
|
|
304
|
+
discoveryEmptyResponse: 'LLM returned empty response during context discovery',
|
|
305
|
+
toolExecutionResult: (name, status) => `Tool execution [${name}]: ${status}`,
|
|
306
|
+
astInitialFile: (file, nodes) => `[AST] Initial File: ${file}, Top-level nodes: ${nodes}`,
|
|
307
|
+
astTargetNodePlacement: (name, top) => `[AST] Target node '${name}' at top-level: ${top}`,
|
|
308
|
+
applyBackRollbackAttempt: 'Attempting to rollback main workspace changes...',
|
|
309
|
+
applyBackRollbackSuccess: 'Main workspace rollback succeeded',
|
|
310
|
+
applyBackRollbackError: (error) => `Main workspace rollback error: ${error}`,
|
|
311
|
+
applyBackRollbackSkipped: 'Apply-back failed before touching the main workspace. Rollback skipped.',
|
|
312
|
+
applyBackStarted: (attempt) => `Apply-back started (attempt ${attempt})`,
|
|
313
|
+
applyBackSucceeded: (attempt) => `Apply-back completed successfully (attempt ${attempt})`,
|
|
314
|
+
applyBackFailed: 'Failed to apply changes back to the main workspace.',
|
|
315
|
+
applyBackFailedPrepare: 'Failed to prepare apply-back checkpoint in the shadow workspace.',
|
|
316
|
+
applyBackFailedSync: 'Failed to sync verified changes back to the main workspace.',
|
|
317
|
+
rollbackShadowRef: (ref) => `[ROLLBACK] Using shadowInitialRef: ${ref}`,
|
|
318
|
+
applyBackDualMerge: (init, latest) => `[applyBack] Using dual-merge apply-back (shadow refs: ${init} -> ${latest}).`,
|
|
319
|
+
applyBackPatchStats: (chars, lines, binary) => `[applyBack] Patch stats: ${chars} chars, ${lines} lines, binary: ${binary}`,
|
|
320
|
+
applyBackNewline: (val) => `[applyBack] Patch ends with newline: ${val}`,
|
|
321
|
+
applyBackPatchPreview: (lines, content, truncated) => `[applyBack] Patch preview (first ${lines} lines):\n${content}${truncated ? '\n...[truncated]...' : ''}`,
|
|
322
|
+
applyBackDebugPath: (path) => `[applyBack] Patch written to: ${path}`,
|
|
323
|
+
applyBackDebugWriteError: (error) => `[applyBack] Failed to write debug patch file: ${error}`,
|
|
324
|
+
applyBackBaseMismatch: (base, head) => `[applyBack] Patch base (${base}) differs from main HEAD (${head}); dropping index lines to avoid mismatch.`,
|
|
325
|
+
applyBackDirtyDetected: (files) => `[applyBack] Dirty workspace detected. Creating checkpoint for all dirty files. Overlap with patch: ${files}`,
|
|
326
|
+
applyBackCheckpointCreated: () => '[applyBack] Dirty workspace checkpoint created. See logs for location.',
|
|
327
|
+
applyBackCheckpointLocation: (dir) => `[applyBack] Dirty workspace checkpoint created at: ${dir}`,
|
|
328
|
+
applyBackUntrackedIncluded: (files) => `[applyBack] Checkpoint includes untracked files: ${files}`,
|
|
329
|
+
checkpointLocation: (dir) => `Checkpoint location: ${dir}`,
|
|
330
|
+
applyBackDirtyRestoreResult: (before, after) => `[applyBack] Dirty workspace restore completed with status diff.\nBefore:\n${before}\nAfter:\n${after}`,
|
|
331
|
+
},
|
|
332
|
+
verify: {
|
|
333
|
+
truncated: (maxLines) => `...[Output truncated, exceeds ${maxLines} lines]`,
|
|
334
|
+
terminated: '\n[Process Terminated]',
|
|
335
|
+
commandError: (command, error) => `Failed to execute command: ${command}. Error: ${error}`,
|
|
336
|
+
outputTruncated: (head, tail) => `\n...[Output truncated, showing first ${head} and last ${tail} lines]...\n`,
|
|
337
|
+
commandTimeout: 'Command timed out',
|
|
338
|
+
failedToStartCommand: 'Failed to start command',
|
|
339
|
+
verifyFileContentError: (file, error) => `Error verifying file content for ${file}: ${error}`,
|
|
340
|
+
worktreeStrategyActive: 'Worktree strategy active: dirty state will be preserved in shadow worktree.',
|
|
341
|
+
ripgrepNotFoundWarning: 'ripgrep (rg) not found. Context gathering may be limited.',
|
|
342
|
+
autoDetected: (command) => `Auto-detected verification command: ${command}`,
|
|
343
|
+
autoDetectedWorktreePrepare: (command) => `Auto-detected worktree prepare command: ${command}`,
|
|
344
|
+
noCommandFound: 'No verification command found. Verification will be skipped.',
|
|
345
|
+
explicitlyDisabled: 'Verification explicitly disabled via --no-verify',
|
|
346
|
+
},
|
|
347
|
+
context: {
|
|
348
|
+
contentTruncated: '...[Content truncated for context budget]...',
|
|
349
|
+
ripgrepNotFound: 'Error: ripgrep (rg) not found in PATH. Context gathering may be incomplete.',
|
|
350
|
+
ripgrepError: (error) => `Error running ripgrep: ${error}`,
|
|
351
|
+
workingDirectory: 'Working Directory: . (Root of the repository)',
|
|
352
|
+
primaryFile: (file) => `Primary File: ${file}`,
|
|
353
|
+
primaryText: 'Primary Text:',
|
|
354
|
+
relatedContext: 'Related Context (Imported Dependencies):',
|
|
355
|
+
relatedFile: (file, mode) => `File: ${file} (mode=${mode})`,
|
|
356
|
+
relatedContentTruncated: '...[Related file truncated for context budget]...',
|
|
357
|
+
codeSnippets: 'Code Snippets:',
|
|
358
|
+
snippetLocation: (file, line) => `File: ${file}:${line}`,
|
|
359
|
+
initFailed: (error) => `Failed to initialize AST parser: ${error}`,
|
|
360
|
+
loadLanguageFailed: (lang, error) => `Failed to load language ${lang}: ${error}`,
|
|
361
|
+
invalidStructure: 'AST structure validation failed: tree contains error nodes',
|
|
362
|
+
scopeRemoved: (name) => `Top-level node '${name}' was removed.`,
|
|
363
|
+
scopeModified: (name) => `Top-level node '${name}' was modified but it was not the target.`,
|
|
364
|
+
invalidTree: 'Invalid AST tree provided for validation',
|
|
365
|
+
gitDiff: 'Git Diff:',
|
|
366
|
+
stagedDiff: 'Staged Diff (Committed Intentions):',
|
|
367
|
+
unstagedDiff: 'Unstaged Diff (Work in Progress):',
|
|
368
|
+
untrackedFiles: 'Untracked Files (New Files):',
|
|
369
|
+
},
|
|
370
|
+
config: {
|
|
371
|
+
loadFailed: (error) => `Failed to load config: ${error}`,
|
|
372
|
+
error: (code, details) => {
|
|
373
|
+
const detailStr = details ? ` Details: ${JSON.stringify(details)}` : '';
|
|
374
|
+
switch (code) {
|
|
375
|
+
case 'CONFIG_FILE_NOT_FOUND':
|
|
376
|
+
return `Config file not found: ${details?.path || '(unknown path)'}`;
|
|
377
|
+
case 'CONFIG_PARSE_FAILED':
|
|
378
|
+
return `Failed to parse config file: ${details?.path || '(unknown path)'}`;
|
|
379
|
+
case 'CONFIG_INVALID_ROOT':
|
|
380
|
+
return 'Config file must be a JSON object';
|
|
381
|
+
case 'CONFIG_UNSUPPORTED':
|
|
382
|
+
return `Unsupported config version: ${details?.version || '(unknown version)'}`;
|
|
383
|
+
case 'CONFIG_LLM_ACTIVE_PROVIDER_NOT_FOUND':
|
|
384
|
+
return `Active LLM provider not found: ${details?.provider || '(unknown provider)'}`;
|
|
385
|
+
case 'CONFIG_LLM_DEFAULT_MODEL_REQUIRED':
|
|
386
|
+
return `LLM provider must define models.default: ${details?.provider || '(unknown provider)'}`;
|
|
387
|
+
case 'CONFIG_INVALID_OUTPUT':
|
|
388
|
+
return 'Config output section must be a JSON object';
|
|
389
|
+
case 'CONFIG_INVALID_OBSERVABILITY':
|
|
390
|
+
return 'Config observability section must be a JSON object';
|
|
391
|
+
case 'CONFIG_INVALID_OBSERVABILITY_LANGFUSE':
|
|
392
|
+
return 'Config observability.langfuse must be a JSON object';
|
|
393
|
+
case 'CONFIG_INVALID_LANGFUSE_ENABLED':
|
|
394
|
+
return 'Config observability.langfuse.enabled must be a boolean';
|
|
395
|
+
case 'CONFIG_INVALID_LANGFUSE_OUTCOME':
|
|
396
|
+
return 'Config observability.langfuse.outcome must be a boolean';
|
|
397
|
+
case 'CONFIG_INVALID_LANGFUSE_ENDPOINT':
|
|
398
|
+
return 'Config observability.langfuse.endpoint must be a string';
|
|
399
|
+
case 'CONFIG_INVALID_LANGFUSE_API_KEY':
|
|
400
|
+
return 'Config observability.langfuse.apiKey must be a string or null';
|
|
401
|
+
case 'CONFIG_INVALID_LANGFUSE_SESSION_ID':
|
|
402
|
+
return 'Config observability.langfuse.sessionId must be a string';
|
|
403
|
+
case 'CONFIG_INVALID_LANGFUSE_USER_ID':
|
|
404
|
+
return 'Config observability.langfuse.userId must be a string';
|
|
405
|
+
case 'CONFIG_INVALID_LLM_OUTPUT':
|
|
406
|
+
return 'Config output.llm must be a JSON object';
|
|
407
|
+
case 'CONFIG_INVALID_LLM_OUTPUT_KINDS':
|
|
408
|
+
return 'Config output.llm.kinds must be an array of strings';
|
|
409
|
+
case 'CONFIG_INVALID_LLM_OUTPUT_KIND':
|
|
410
|
+
return `Config output.llm.kinds contains invalid value: ${details?.kind || '(unknown kind)'}`;
|
|
411
|
+
case 'CONFIG_INVALID_OUTPUT_MARKDOWN':
|
|
412
|
+
return 'Config output.markdown must be a JSON object';
|
|
413
|
+
case 'CONFIG_INVALID_MARKDOWN_THEME':
|
|
414
|
+
return `Config output.markdown.theme contains invalid value: ${details?.theme || '(unknown theme)'}`;
|
|
415
|
+
case 'CONFIG_INVALID_MARKDOWN_RENDER_MODE':
|
|
416
|
+
return `Config output.markdown.mode contains invalid value: ${details?.mode || '(unknown mode)'}`;
|
|
417
|
+
case 'CONFIG_INVALID_UI':
|
|
418
|
+
return 'Config ui section must be a JSON object';
|
|
419
|
+
case 'CONFIG_INVALID_UI_LOG':
|
|
420
|
+
return 'Config ui.log section must be a JSON object';
|
|
421
|
+
case 'CONFIG_INVALID_UI_LOG_VIEW':
|
|
422
|
+
return `Config ui.log.view contains invalid value: ${details?.view || '(unknown view)'}`;
|
|
423
|
+
case 'CONFIG_INVALID_UI_LOG_MODE':
|
|
424
|
+
return `Config ui.log.mode contains invalid value: ${details?.mode || '(unknown mode)'}`;
|
|
425
|
+
case 'CONFIG_INVALID_AST_VALIDATION':
|
|
426
|
+
return 'Config astValidation section must be a JSON object';
|
|
427
|
+
case 'CONFIG_INVALID_AST_VALIDATION_STRICTNESS':
|
|
428
|
+
return `Config astValidation.strictness contains invalid value: ${details?.strictness || '(unknown strictness)'}`;
|
|
429
|
+
default:
|
|
430
|
+
return `Invalid config (${code}).${detailStr}`;
|
|
431
|
+
}
|
|
432
|
+
},
|
|
433
|
+
},
|
|
434
|
+
// Progress bar and interactive feedback
|
|
435
|
+
progress: {
|
|
436
|
+
preflight: 'Preflight checks',
|
|
437
|
+
prepare_deps: 'Preparing dependencies',
|
|
438
|
+
context: 'Gathering context',
|
|
439
|
+
explore: 'Exploring codebase',
|
|
440
|
+
plan: 'Creating plan',
|
|
441
|
+
patch: 'Generating patch',
|
|
442
|
+
validate: 'Validating patch',
|
|
443
|
+
ast_validate: 'Validating AST',
|
|
444
|
+
apply: 'Applying patch',
|
|
445
|
+
verify: 'Verifying changes',
|
|
446
|
+
rollback: 'Rolling back changes',
|
|
447
|
+
shrink: 'Shrinking context',
|
|
448
|
+
review: 'Reviewing changes',
|
|
449
|
+
report: 'Generating report',
|
|
450
|
+
analyze_issues: 'Analyzing issues',
|
|
451
|
+
waiting: 'Waiting for LLM...',
|
|
452
|
+
},
|
|
453
|
+
suggestions: {
|
|
454
|
+
compilation: 'Check for syntax errors or missing imports.',
|
|
455
|
+
lint: 'Run your linter locally to see detailed errors.',
|
|
456
|
+
test: 'Check the test output above for specific failures.',
|
|
457
|
+
dirty: 'Commit or stash your changes before running.',
|
|
458
|
+
notGit: 'Initialize a git repository in the target directory.',
|
|
459
|
+
rollbackFailed: 'Manual cleanup required. Run `git reset --hard HEAD`.',
|
|
460
|
+
unknown: 'Check the logs above for more details.',
|
|
461
|
+
gitError: 'Git operation failed. Run `git status` and resolve any conflicts.',
|
|
462
|
+
},
|
|
463
|
+
dependency: {
|
|
464
|
+
versionMismatch: (dependency, expected, actual) => `Dependency version mismatch: ${dependency} expected ${expected}, but got ${actual}`,
|
|
465
|
+
versionMismatchHint: 'This may cause compatibility issues. Please update your dependencies.',
|
|
466
|
+
checkFailed: 'Failed to check dependency versions',
|
|
467
|
+
checkCompleted: 'Dependency version check completed',
|
|
468
|
+
},
|
|
469
|
+
ast: {
|
|
470
|
+
degradedApi: 'Using legacy tree-sitter API. Some features might be limited. Please consider upgrading web-tree-sitter.',
|
|
471
|
+
initFailed: (error) => `Failed to initialize AST parser: ${error}`,
|
|
472
|
+
loadLanguageFailed: (lang, error) => `Failed to load language ${lang}: ${error}`,
|
|
473
|
+
invalidStructure: 'AST structure validation failed: tree contains error nodes',
|
|
474
|
+
scopeRemoved: (name) => `Top-level node '${name}' was removed.`,
|
|
475
|
+
scopeModified: (name) => `Top-level node '${name}' was modified but it was not the target.`,
|
|
476
|
+
invalidTree: 'Invalid AST tree provided for validation',
|
|
477
|
+
},
|
|
478
|
+
monitor: {
|
|
479
|
+
reportTitle: 'SalmonLoop Exception Analysis Report',
|
|
480
|
+
totalErrors: (count) => `Total Errors Tracked: ${count}`,
|
|
481
|
+
recentErrors: 'Recent Error History:',
|
|
482
|
+
errorEntry: (timestamp, type, message) => `[${timestamp}] ${type}: ${message}`,
|
|
483
|
+
noErrors: 'No errors recorded.',
|
|
484
|
+
memoryWarning: (used, threshold) => `Memory usage warning: Heap used ${used}MB exceeds threshold ${threshold}MB.`,
|
|
485
|
+
suggestingGc: 'Suggesting garbage collection...',
|
|
486
|
+
metricsTitle: '=== Checkpoint & ApplyBack Metrics ===',
|
|
487
|
+
checkpointCreation: '[Checkpoint Creation]',
|
|
488
|
+
worktreeCleanup: '[Worktree Cleanup]',
|
|
489
|
+
applyBackOps: '[ApplyBack Operations]',
|
|
490
|
+
attempts: (count) => ` Attempts: ${count}`,
|
|
491
|
+
failures: (count) => ` Failures: ${count}`,
|
|
492
|
+
failureRate: (rate) => ` Failure Rate: ${rate}%`,
|
|
493
|
+
avgDuration: (ms) => ` Avg Duration: ${ms}ms`,
|
|
494
|
+
p50Duration: (ms) => ` P50 Duration: ${ms}ms`,
|
|
495
|
+
p95Duration: (ms) => ` P95 Duration: ${ms}ms`,
|
|
496
|
+
},
|
|
497
|
+
capability: {
|
|
498
|
+
noBackends: (capability) => `No backends available for capability: ${capability}`,
|
|
499
|
+
allBackendsFailed: (capability) => `All backends failed for capability: ${capability}`,
|
|
500
|
+
backendError: (backend, error) => `Backend '${backend}' failed: ${error}`,
|
|
501
|
+
fallbackTriggered: (from, to, reason) => `Automatically falling back from '${from}' to '${to}' due to: ${reason}`,
|
|
502
|
+
},
|
|
503
|
+
tools: {
|
|
504
|
+
// Tool descriptions
|
|
505
|
+
codeSearchDescription: 'Fast file pattern matching tool that works with any codebase size',
|
|
506
|
+
fsReadDescription: 'Read the full content of a file from the repository',
|
|
507
|
+
codeReadDescription: 'Read the full content of a source file from the repository',
|
|
508
|
+
fsListDescription: 'List files and directories under a repository path',
|
|
509
|
+
gitStatusDescription: 'Show the working tree status',
|
|
510
|
+
gitCatDescription: 'Read file content from a specific git revision',
|
|
511
|
+
codeAstDescription: 'Query AST definitions and references for symbols',
|
|
512
|
+
testRunDescription: 'Run verification command (test/lint/build) and classify errors',
|
|
513
|
+
shellExecDescription: 'Execute a shell command in an isolated workspace (slash-only)',
|
|
514
|
+
artifactReadDescription: 'Read salmonloop (s8p) artifacts by handle',
|
|
515
|
+
proposalApplyDescription: 'Apply a patch proposal artifact into the current shadow worktree',
|
|
516
|
+
planInitDescription: 'Initialize a runtime Markdown plan file under .salmonloop/plans/',
|
|
517
|
+
planReadDescription: 'Read a summarized view of the current runtime Markdown plan',
|
|
518
|
+
planUpdateDescription: 'Update a plan step by stable sl:id with minimal in-place edits',
|
|
519
|
+
askUserDescription: 'Ask the user a structured question and wait for input',
|
|
520
|
+
// Execution logs
|
|
521
|
+
executing: (name) => `Executing tool: ${name}...`,
|
|
522
|
+
completed: (name) => `Tool ${name} completed.`,
|
|
523
|
+
failed: (name, error) => `Tool ${name} failed: ${error}`,
|
|
524
|
+
// Errors
|
|
525
|
+
notFound: (name) => `Tool ${name} not found`,
|
|
526
|
+
policyDeny: (reason) => `Tool execution denied: ${reason}`,
|
|
527
|
+
inputSchema: (reason) => `Invalid tool input: ${reason}`,
|
|
528
|
+
outputSchema: (reason) => `Invalid tool output: ${reason}`,
|
|
529
|
+
timeout: (ms) => `Tool execution timed out after ${ms}ms`,
|
|
530
|
+
outputTooLarge: (size, limit) => `Tool output too large (${size} bytes). Limit is ${limit} bytes.`,
|
|
531
|
+
concurrencyLimit: 'Too many concurrent tool calls',
|
|
532
|
+
rateLimit: (phase) => `Rate limit exceeded for phase ${phase}`,
|
|
533
|
+
worktreeRequired: 'Tool requires worktree isolation',
|
|
534
|
+
applyForbidden: 'Tools are strictly forbidden in APPLY phase',
|
|
535
|
+
networkDenied: 'Network access is denied by default policy',
|
|
536
|
+
invalidRelativePath: (p) => `Invalid file path: ${p}. Absolute paths and traversal are forbidden.`,
|
|
537
|
+
artifactNotFound: (handle) => `Artifact not found: ${handle}`,
|
|
538
|
+
permissionRuleDenied: (rule) => `Tool execution denied by permission rule: ${rule}`,
|
|
539
|
+
permissionRulesRequired: () => 'Tool execution denied: no matching --allowedTools permission rule',
|
|
540
|
+
permissionRulesParseFailed: (details) => `Invalid permission rules: ${details || 'unknown error'}`,
|
|
541
|
+
askUserRequired: 'User input required',
|
|
542
|
+
askUserSubagentBlocked: 'User input is unavailable in sub-agent execution',
|
|
543
|
+
askUserPromptDefault: 'User input required',
|
|
544
|
+
},
|
|
545
|
+
audit: {
|
|
546
|
+
event: (type, name, status) => `[Audit] ${type} ${name}: ${status}`,
|
|
547
|
+
},
|
|
548
|
+
transaction: {
|
|
549
|
+
log: (phase, msg) => `[${phase}] ${msg}`,
|
|
550
|
+
},
|
|
551
|
+
grizzco: {
|
|
552
|
+
gitUserConfigMissing: 'Git user.name or user.email is not configured',
|
|
553
|
+
remoteLocked: 'File is locked remotely (Mock Check)',
|
|
554
|
+
stagedFileProtected: 'Staged file detected and protected (use --force)',
|
|
555
|
+
binaryMmCannotBeMerged: 'Binary MM file cannot be merged',
|
|
556
|
+
fileHasExistingConflict: 'File has existing conflict',
|
|
557
|
+
unknownDataDependency: (key) => `Unknown data dependency: ${key}`,
|
|
558
|
+
microOrchestratorLoopStuck: (path) => `MicroOrchestrator stuck in loop for ${path}`,
|
|
559
|
+
planAborted: (path, reason) => `Plan aborted for ${path}: ${reason}`,
|
|
560
|
+
executionFailed: (path, error) => `Execution failed for ${path}: ${error}`,
|
|
561
|
+
transactionCompleted: (success, total) => `Grizzco transaction completed: ${success}/${total} files processed`,
|
|
562
|
+
workerNotFound: (id) => `Worker "${id}" not found`,
|
|
563
|
+
noWorkerSelected: 'No worker selected',
|
|
564
|
+
pipeline: {
|
|
565
|
+
stepStarted: (name) => `[Pipeline] Step started: ${name}`,
|
|
566
|
+
stepFinished: (name, duration) => `[Pipeline] Step finished: ${name} (${duration}ms)`,
|
|
567
|
+
stepFailed: (name, error) => `[Pipeline] Step failed: ${name} - ${error}`,
|
|
568
|
+
recoveryTriggered: (name) => `[Pipeline] Triggering recovery for ${name}`,
|
|
569
|
+
recoveryFailed: (name, error) => `[Pipeline] Recovery failed for ${name}: ${error}`,
|
|
570
|
+
},
|
|
571
|
+
validation: {
|
|
572
|
+
explorationHallucination: 'Exploration found candidate files via search but did not read any content. This usually indicates hallucination.',
|
|
573
|
+
noFilesRead: 'No files were read during the exploration phase. Please ensure you actually read the files you intend to modify.',
|
|
574
|
+
explorationSkipped: 'Exploration skipped (tools disabled or unavailable)',
|
|
575
|
+
explorationFinished: (count) => `Exploration finished. Added ${count} files to context.`,
|
|
576
|
+
},
|
|
577
|
+
audit: {
|
|
578
|
+
saved: (file) => `[Audit] Saved structured audit log to ${file}`,
|
|
579
|
+
failed: (error) => `[Audit] Failed to save audit log: ${error}`,
|
|
580
|
+
appendFailed: (error) => `[Audit] Failed to append audit trail delta: ${error}`,
|
|
581
|
+
},
|
|
582
|
+
observability: {
|
|
583
|
+
outcomeReporterFailed: (error) => `[Observability] Outcome reporter failed (ignored): ${error}`,
|
|
584
|
+
},
|
|
585
|
+
langfuse: {
|
|
586
|
+
outcomeReported: (traceId) => `[Langfuse] Outcome reported for trace ${traceId}`,
|
|
587
|
+
outcomeReportFailed: (traceId) => `[Langfuse] Failed to report outcome for trace ${traceId}`,
|
|
588
|
+
},
|
|
589
|
+
errors: {
|
|
590
|
+
workerNotFound: (id) => `Worker "${id}" not found`,
|
|
591
|
+
noWorkerSelected: 'No worker selected',
|
|
592
|
+
aborted: 'Operation aborted by strategy',
|
|
593
|
+
mergeFailed: (err) => `Merge execution failed: ${err}`,
|
|
594
|
+
unexpectedException: (err) => `Unexpected execution exception: ${err}`,
|
|
595
|
+
readOnlyFileSystem: (operation) => `Read-only filesystem: ${operation} is not permitted in read-only modes.`,
|
|
596
|
+
flowStrategyAlreadyRegistered: (mode) => `Flow strategy "${mode}" is already registered.`,
|
|
597
|
+
unknownFlowMode: (mode, available) => `Unknown flow mode "${mode}". Available: ${available}.`,
|
|
598
|
+
},
|
|
599
|
+
review: {
|
|
600
|
+
generated: 'Review generated.',
|
|
601
|
+
header: 'Review suggestions:',
|
|
602
|
+
empty: 'No review suggestions available.',
|
|
603
|
+
suggestionItem: (index, type, content) => `Suggestion ${index} (${type}): ${content}`,
|
|
604
|
+
suggestionRaw: (content) => `Review output: ${content}`,
|
|
605
|
+
issuesExtracted: (count) => `Identified ${count} issue(s) from review.`,
|
|
606
|
+
fixPlanGenerated: 'Generated fix plan based on review feedback.',
|
|
607
|
+
},
|
|
608
|
+
answer: {
|
|
609
|
+
header: 'Answer:',
|
|
610
|
+
empty: 'No answer produced.',
|
|
611
|
+
},
|
|
612
|
+
research: {
|
|
613
|
+
generated: 'Research generated.',
|
|
614
|
+
header: 'Research summary:',
|
|
615
|
+
empty: 'No research findings available.',
|
|
616
|
+
summary: (content) => `Summary: ${content}`,
|
|
617
|
+
findingItem: (index, summary, confidence, uncertainty) => `Finding ${index}: ${summary}${typeof confidence === 'number' ? ` (confidence: ${confidence})` : ''}${uncertainty ? ` [uncertainty: ${uncertainty}]` : ''}`,
|
|
618
|
+
},
|
|
619
|
+
},
|
|
620
|
+
skills: {
|
|
621
|
+
maxRetriesExceeded: (id) => `Max retries exceeded for skill: ${id}. Possible circular dependency in dynamic data.`,
|
|
622
|
+
},
|
|
623
|
+
// Symbols for UI feedback
|
|
624
|
+
symbols: {
|
|
625
|
+
suggestion: '[hint]',
|
|
626
|
+
success: '[ok]',
|
|
627
|
+
error: '[error]',
|
|
628
|
+
info: '[info]',
|
|
629
|
+
warning: '[warn]',
|
|
630
|
+
rocket: '[run]',
|
|
631
|
+
document: '[doc]',
|
|
632
|
+
magnifier: '[search]',
|
|
633
|
+
pen: '[log]',
|
|
634
|
+
chart: '[result]',
|
|
635
|
+
},
|
|
636
|
+
ui: {
|
|
637
|
+
status: {
|
|
638
|
+
cleanup: 'cleanup',
|
|
639
|
+
stopping: 'stopping',
|
|
640
|
+
},
|
|
641
|
+
},
|
|
642
|
+
resource: {
|
|
643
|
+
workspaceCleanupStarting: 'Cleaning workspace...',
|
|
644
|
+
workspaceCleanupFinished: 'Workspace cleanup finished.',
|
|
645
|
+
worktreeSkipCleanup: 'workPath equals baseRepoPath; skipping cleanup to avoid data loss',
|
|
646
|
+
worktreeNotFoundInList: (path) => `Worktree not found in git worktree list: ${path}`,
|
|
647
|
+
lockTimeoutAttemptForce: (path) => `Lock acquisition timeout for ${path}, attempting force cleanup...`,
|
|
648
|
+
lockForceRemoved: (file) => `Forcefully removed stale lock file: ${file}`,
|
|
649
|
+
lockAcquiredAfterForce: (file) => `Lock acquired after force cleanup: ${file}`,
|
|
650
|
+
lockAcquireTimeout: (path) => `Failed to acquire lock for ${path} within timeout`,
|
|
651
|
+
lockAcquireHardTimeout: (path) => `Failed to acquire lock for ${path} within hard timeout; the filesystem may be unresponsive.`,
|
|
652
|
+
lockReleaseOwnershipUnknown: (path, error) => `Refusing to release lock for ${path} because lock ownership could not be verified: ${error}`,
|
|
653
|
+
lockReleaseFailed: (path) => `Failed to release lock for ${path}`,
|
|
654
|
+
},
|
|
655
|
+
smallfry: {
|
|
656
|
+
status: {
|
|
657
|
+
spawning: 'Spawning a hungry Smallfry to handle the heavy lifting...',
|
|
658
|
+
thinking: 'Smallfry is flapping around the codebase...',
|
|
659
|
+
working: 'Smallfry is diligently collecting golden eggs (results)...',
|
|
660
|
+
submitting: 'Smallfry is jumping back to the basket with a report...',
|
|
661
|
+
terminated: 'Smallfry has been recalled to Grizzco.',
|
|
662
|
+
},
|
|
663
|
+
errors: {
|
|
664
|
+
budgetExceeded: (used, limit) => `Smallfry splatted: Token budget exceeded (Used: ${used}, Limit: ${limit})`,
|
|
665
|
+
timeout: 'Smallfry ran out of ink and has been dismissed.',
|
|
666
|
+
capabilityDeny: (tool) => `Access denied: This Smallfry isn't trained to use '${tool}'.`,
|
|
667
|
+
profileNotFound: (agentRef) => `Smallfry profile not found: '${agentRef}'.`,
|
|
668
|
+
recursionLimitExceeded: (depth, limit) => `Smallfry recursion limit exceeded (Depth: ${depth}, Limit: ${limit}).`,
|
|
669
|
+
dispatchMissingRuntimeLlm: 'Smallfry dispatch failed: missing runtime LLM in tool context (host bug).',
|
|
670
|
+
missionFailed: 'Smallfry mission failed.',
|
|
671
|
+
missionFailedWithReason: (reason) => `Smallfry mission failed: ${reason}`,
|
|
672
|
+
},
|
|
673
|
+
ui: {
|
|
674
|
+
spawnToolDescription: 'Deploy a specialized Smallfry (sub-agent) for autonomous task execution.',
|
|
675
|
+
progressTitle: (id) => `[Smallfry: ${id}]`,
|
|
676
|
+
},
|
|
677
|
+
},
|
|
678
|
+
};
|
|
679
|
+
//# sourceMappingURL=en.js.map
|