attocode 0.2.2 → 0.2.4
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/CHANGELOG.md +169 -3
- package/README.md +65 -5
- package/dist/src/adapters.d.ts.map +1 -1
- package/dist/src/adapters.js +15 -11
- package/dist/src/adapters.js.map +1 -1
- package/dist/src/agent.d.ts +44 -98
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +716 -2648
- package/dist/src/agent.js.map +1 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +25 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/handler.d.ts.map +1 -1
- package/dist/src/commands/handler.js +11 -3
- package/dist/src/commands/handler.js.map +1 -1
- package/dist/src/commands/init-commands.d.ts.map +1 -1
- package/dist/src/commands/init-commands.js +16 -1
- package/dist/src/commands/init-commands.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +31 -0
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/config/base-types.d.ts +45 -0
- package/dist/src/config/base-types.d.ts.map +1 -0
- package/dist/src/config/base-types.js +9 -0
- package/dist/src/config/base-types.js.map +1 -0
- package/dist/src/config/config-manager.d.ts +35 -0
- package/dist/src/config/config-manager.d.ts.map +1 -0
- package/dist/src/config/config-manager.js +108 -0
- package/dist/src/config/config-manager.js.map +1 -0
- package/dist/src/config/index.d.ts +4 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +3 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/config/schema.d.ts +1546 -0
- package/dist/src/config/schema.d.ts.map +1 -0
- package/dist/src/config/schema.js +268 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/config.d.ts +4 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +8 -12
- package/dist/src/config.js.map +1 -1
- package/dist/src/core/agent-state-machine.d.ts +131 -0
- package/dist/src/core/agent-state-machine.d.ts.map +1 -0
- package/dist/src/core/agent-state-machine.js +302 -0
- package/dist/src/core/agent-state-machine.js.map +1 -0
- package/dist/src/core/base-manager.d.ts +79 -0
- package/dist/src/core/base-manager.d.ts.map +1 -0
- package/dist/src/core/base-manager.js +170 -0
- package/dist/src/core/base-manager.js.map +1 -0
- package/dist/src/core/completion-analyzer.d.ts +15 -0
- package/dist/src/core/completion-analyzer.d.ts.map +1 -0
- package/dist/src/core/completion-analyzer.js +53 -0
- package/dist/src/core/completion-analyzer.js.map +1 -0
- package/dist/src/core/execution-loop.d.ts +46 -0
- package/dist/src/core/execution-loop.d.ts.map +1 -0
- package/dist/src/core/execution-loop.js +1258 -0
- package/dist/src/core/execution-loop.js.map +1 -0
- package/dist/src/core/index.d.ts +7 -0
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +9 -0
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/core/process-handlers.d.ts.map +1 -1
- package/dist/src/core/process-handlers.js +14 -0
- package/dist/src/core/process-handlers.js.map +1 -1
- package/dist/src/core/protocol/types.d.ts +4 -4
- package/dist/src/core/response-handler.d.ts +16 -0
- package/dist/src/core/response-handler.d.ts.map +1 -0
- package/dist/src/core/response-handler.js +234 -0
- package/dist/src/core/response-handler.js.map +1 -0
- package/dist/src/core/subagent-spawner.d.ts +43 -0
- package/dist/src/core/subagent-spawner.d.ts.map +1 -0
- package/dist/src/core/subagent-spawner.js +966 -0
- package/dist/src/core/subagent-spawner.js.map +1 -0
- package/dist/src/core/tool-executor.d.ts +59 -0
- package/dist/src/core/tool-executor.d.ts.map +1 -0
- package/dist/src/core/tool-executor.js +677 -0
- package/dist/src/core/tool-executor.js.map +1 -0
- package/dist/src/core/types.d.ts +133 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +12 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/defaults.d.ts +8 -3
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +65 -3
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/integrations/agent-registry.d.ts +11 -0
- package/dist/src/integrations/agent-registry.d.ts.map +1 -1
- package/dist/src/integrations/agent-registry.js.map +1 -1
- package/dist/src/integrations/auto-compaction.d.ts.map +1 -1
- package/dist/src/integrations/auto-compaction.js +8 -3
- package/dist/src/integrations/auto-compaction.js.map +1 -1
- package/dist/src/integrations/bash-policy.d.ts +33 -0
- package/dist/src/integrations/bash-policy.d.ts.map +1 -0
- package/dist/src/integrations/bash-policy.js +142 -0
- package/dist/src/integrations/bash-policy.js.map +1 -0
- package/dist/src/integrations/budget-pool.d.ts +7 -0
- package/dist/src/integrations/budget-pool.d.ts.map +1 -1
- package/dist/src/integrations/budget-pool.js +43 -0
- package/dist/src/integrations/budget-pool.js.map +1 -1
- package/dist/src/integrations/codebase-ast.d.ts +52 -0
- package/dist/src/integrations/codebase-ast.d.ts.map +1 -0
- package/dist/src/integrations/codebase-ast.js +457 -0
- package/dist/src/integrations/codebase-ast.js.map +1 -0
- package/dist/src/integrations/codebase-context.d.ts +23 -0
- package/dist/src/integrations/codebase-context.d.ts.map +1 -1
- package/dist/src/integrations/codebase-context.js +230 -17
- package/dist/src/integrations/codebase-context.js.map +1 -1
- package/dist/src/integrations/compaction.d.ts.map +1 -1
- package/dist/src/integrations/compaction.js +14 -6
- package/dist/src/integrations/compaction.js.map +1 -1
- package/dist/src/integrations/context-engineering.d.ts +8 -0
- package/dist/src/integrations/context-engineering.d.ts.map +1 -1
- package/dist/src/integrations/context-engineering.js +19 -0
- package/dist/src/integrations/context-engineering.js.map +1 -1
- package/dist/src/integrations/delegation-protocol.js +2 -2
- package/dist/src/integrations/delegation-protocol.js.map +1 -1
- package/dist/src/integrations/economics.d.ts +67 -1
- package/dist/src/integrations/economics.d.ts.map +1 -1
- package/dist/src/integrations/economics.js +328 -33
- package/dist/src/integrations/economics.js.map +1 -1
- package/dist/src/integrations/edit-validator.d.ts +30 -0
- package/dist/src/integrations/edit-validator.d.ts.map +1 -0
- package/dist/src/integrations/edit-validator.js +85 -0
- package/dist/src/integrations/edit-validator.js.map +1 -0
- package/dist/src/integrations/file-cache.d.ts +7 -0
- package/dist/src/integrations/file-cache.d.ts.map +1 -1
- package/dist/src/integrations/file-cache.js +54 -0
- package/dist/src/integrations/file-cache.js.map +1 -1
- package/dist/src/integrations/health-check.d.ts.map +1 -1
- package/dist/src/integrations/health-check.js +3 -2
- package/dist/src/integrations/health-check.js.map +1 -1
- package/dist/src/integrations/hierarchical-config.d.ts +3 -0
- package/dist/src/integrations/hierarchical-config.d.ts.map +1 -1
- package/dist/src/integrations/hierarchical-config.js +20 -0
- package/dist/src/integrations/hierarchical-config.js.map +1 -1
- package/dist/src/integrations/hooks.d.ts +2 -0
- package/dist/src/integrations/hooks.d.ts.map +1 -1
- package/dist/src/integrations/hooks.js +99 -15
- package/dist/src/integrations/hooks.js.map +1 -1
- package/dist/src/integrations/index.d.ts +10 -1
- package/dist/src/integrations/index.d.ts.map +1 -1
- package/dist/src/integrations/index.js +12 -2
- package/dist/src/integrations/index.js.map +1 -1
- package/dist/src/integrations/logger.d.ts +104 -0
- package/dist/src/integrations/logger.d.ts.map +1 -0
- package/dist/src/integrations/logger.js +219 -0
- package/dist/src/integrations/logger.js.map +1 -0
- package/dist/src/integrations/lsp.d.ts.map +1 -1
- package/dist/src/integrations/lsp.js +5 -4
- package/dist/src/integrations/lsp.js.map +1 -1
- package/dist/src/integrations/mcp-client.d.ts.map +1 -1
- package/dist/src/integrations/mcp-client.js +8 -7
- package/dist/src/integrations/mcp-client.js.map +1 -1
- package/dist/src/integrations/observability.d.ts.map +1 -1
- package/dist/src/integrations/observability.js +5 -4
- package/dist/src/integrations/observability.js.map +1 -1
- package/dist/src/integrations/openrouter-pricing.d.ts.map +1 -1
- package/dist/src/integrations/openrouter-pricing.js +4 -3
- package/dist/src/integrations/openrouter-pricing.js.map +1 -1
- package/dist/src/integrations/persistence.d.ts.map +1 -1
- package/dist/src/integrations/persistence.js +5 -4
- package/dist/src/integrations/persistence.js.map +1 -1
- package/dist/src/integrations/planning.d.ts.map +1 -1
- package/dist/src/integrations/planning.js +5 -4
- package/dist/src/integrations/planning.js.map +1 -1
- package/dist/src/integrations/policy-engine.d.ts +55 -0
- package/dist/src/integrations/policy-engine.d.ts.map +1 -0
- package/dist/src/integrations/policy-engine.js +247 -0
- package/dist/src/integrations/policy-engine.js.map +1 -0
- package/dist/src/integrations/retry.d.ts +1 -0
- package/dist/src/integrations/retry.d.ts.map +1 -1
- package/dist/src/integrations/retry.js.map +1 -1
- package/dist/src/integrations/routing.d.ts.map +1 -1
- package/dist/src/integrations/routing.js +2 -1
- package/dist/src/integrations/routing.js.map +1 -1
- package/dist/src/integrations/safety.d.ts +5 -4
- package/dist/src/integrations/safety.d.ts.map +1 -1
- package/dist/src/integrations/safety.js +45 -20
- package/dist/src/integrations/safety.js.map +1 -1
- package/dist/src/integrations/sandbox/basic.d.ts +7 -0
- package/dist/src/integrations/sandbox/basic.d.ts.map +1 -1
- package/dist/src/integrations/sandbox/basic.js +27 -2
- package/dist/src/integrations/sandbox/basic.js.map +1 -1
- package/dist/src/integrations/sandbox/docker.d.ts.map +1 -1
- package/dist/src/integrations/sandbox/docker.js +2 -1
- package/dist/src/integrations/sandbox/docker.js.map +1 -1
- package/dist/src/integrations/sandbox/index.d.ts +6 -0
- package/dist/src/integrations/sandbox/index.d.ts.map +1 -1
- package/dist/src/integrations/sandbox/index.js +8 -4
- package/dist/src/integrations/sandbox/index.js.map +1 -1
- package/dist/src/integrations/sandbox/landlock.d.ts.map +1 -1
- package/dist/src/integrations/sandbox/landlock.js +3 -0
- package/dist/src/integrations/sandbox/landlock.js.map +1 -1
- package/dist/src/integrations/self-improvement.d.ts.map +1 -1
- package/dist/src/integrations/self-improvement.js +12 -0
- package/dist/src/integrations/self-improvement.js.map +1 -1
- package/dist/src/integrations/session-store.d.ts +1 -0
- package/dist/src/integrations/session-store.d.ts.map +1 -1
- package/dist/src/integrations/session-store.js +1 -0
- package/dist/src/integrations/session-store.js.map +1 -1
- package/dist/src/integrations/shared-blackboard.d.ts +3 -0
- package/dist/src/integrations/shared-blackboard.d.ts.map +1 -1
- package/dist/src/integrations/shared-blackboard.js +47 -0
- package/dist/src/integrations/shared-blackboard.js.map +1 -1
- package/dist/src/integrations/smart-decomposer.d.ts +45 -1
- package/dist/src/integrations/smart-decomposer.d.ts.map +1 -1
- package/dist/src/integrations/smart-decomposer.js +486 -30
- package/dist/src/integrations/smart-decomposer.js.map +1 -1
- package/dist/src/integrations/sqlite-store.d.ts +2 -0
- package/dist/src/integrations/sqlite-store.d.ts.map +1 -1
- package/dist/src/integrations/sqlite-store.js +18 -6
- package/dist/src/integrations/sqlite-store.js.map +1 -1
- package/dist/src/integrations/swarm/failure-classifier.d.ts +11 -0
- package/dist/src/integrations/swarm/failure-classifier.d.ts.map +1 -0
- package/dist/src/integrations/swarm/failure-classifier.js +95 -0
- package/dist/src/integrations/swarm/failure-classifier.js.map +1 -0
- package/dist/src/integrations/swarm/index.d.ts +1 -1
- package/dist/src/integrations/swarm/index.d.ts.map +1 -1
- package/dist/src/integrations/swarm/index.js.map +1 -1
- package/dist/src/integrations/swarm/model-selector.d.ts +15 -0
- package/dist/src/integrations/swarm/model-selector.d.ts.map +1 -1
- package/dist/src/integrations/swarm/model-selector.js +100 -20
- package/dist/src/integrations/swarm/model-selector.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-budget.d.ts +4 -0
- package/dist/src/integrations/swarm/swarm-budget.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-budget.js +6 -0
- package/dist/src/integrations/swarm/swarm-budget.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-config-loader.d.ts +8 -0
- package/dist/src/integrations/swarm/swarm-config-loader.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-config-loader.js +249 -7
- package/dist/src/integrations/swarm/swarm-config-loader.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-event-bridge.d.ts +86 -1
- package/dist/src/integrations/swarm/swarm-event-bridge.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-event-bridge.js +207 -23
- package/dist/src/integrations/swarm/swarm-event-bridge.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-events.d.ts +58 -1
- package/dist/src/integrations/swarm/swarm-events.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-events.js +22 -5
- package/dist/src/integrations/swarm/swarm-events.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-orchestrator.d.ts +147 -8
- package/dist/src/integrations/swarm/swarm-orchestrator.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-orchestrator.js +2179 -132
- package/dist/src/integrations/swarm/swarm-orchestrator.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-quality-gate.d.ts +83 -2
- package/dist/src/integrations/swarm/swarm-quality-gate.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-quality-gate.js +278 -19
- package/dist/src/integrations/swarm/swarm-quality-gate.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-state-store.d.ts +4 -1
- package/dist/src/integrations/swarm/swarm-state-store.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-state-store.js +8 -1
- package/dist/src/integrations/swarm/swarm-state-store.js.map +1 -1
- package/dist/src/integrations/swarm/task-queue.d.ts +54 -0
- package/dist/src/integrations/swarm/task-queue.d.ts.map +1 -1
- package/dist/src/integrations/swarm/task-queue.js +310 -12
- package/dist/src/integrations/swarm/task-queue.js.map +1 -1
- package/dist/src/integrations/swarm/types.d.ts +251 -13
- package/dist/src/integrations/swarm/types.d.ts.map +1 -1
- package/dist/src/integrations/swarm/types.js +70 -8
- package/dist/src/integrations/swarm/types.js.map +1 -1
- package/dist/src/integrations/swarm/worker-pool.d.ts +21 -4
- package/dist/src/integrations/swarm/worker-pool.d.ts.map +1 -1
- package/dist/src/integrations/swarm/worker-pool.js +223 -44
- package/dist/src/integrations/swarm/worker-pool.js.map +1 -1
- package/dist/src/integrations/task-manager.d.ts +33 -1
- package/dist/src/integrations/task-manager.d.ts.map +1 -1
- package/dist/src/integrations/task-manager.js +78 -4
- package/dist/src/integrations/task-manager.js.map +1 -1
- package/dist/src/integrations/tool-recommendation.d.ts +7 -4
- package/dist/src/integrations/tool-recommendation.d.ts.map +1 -1
- package/dist/src/integrations/tool-recommendation.js +58 -5
- package/dist/src/integrations/tool-recommendation.js.map +1 -1
- package/dist/src/integrations/work-log.js +4 -4
- package/dist/src/integrations/work-log.js.map +1 -1
- package/dist/src/main.js +106 -30
- package/dist/src/main.js.map +1 -1
- package/dist/src/modes/repl.d.ts.map +1 -1
- package/dist/src/modes/repl.js +50 -12
- package/dist/src/modes/repl.js.map +1 -1
- package/dist/src/modes/tui.d.ts.map +1 -1
- package/dist/src/modes/tui.js +41 -6
- package/dist/src/modes/tui.js.map +1 -1
- package/dist/src/modes.d.ts.map +1 -1
- package/dist/src/modes.js +4 -27
- package/dist/src/modes.js.map +1 -1
- package/dist/src/observability/tracer.d.ts.map +1 -1
- package/dist/src/observability/tracer.js +2 -1
- package/dist/src/observability/tracer.js.map +1 -1
- package/dist/src/persistence/schema.d.ts.map +1 -1
- package/dist/src/persistence/schema.js +11 -0
- package/dist/src/persistence/schema.js.map +1 -1
- package/dist/src/providers/adapters/anthropic.d.ts.map +1 -1
- package/dist/src/providers/adapters/anthropic.js +3 -2
- package/dist/src/providers/adapters/anthropic.js.map +1 -1
- package/dist/src/providers/adapters/openai.d.ts.map +1 -1
- package/dist/src/providers/adapters/openai.js +3 -2
- package/dist/src/providers/adapters/openai.js.map +1 -1
- package/dist/src/providers/adapters/openrouter.d.ts.map +1 -1
- package/dist/src/providers/adapters/openrouter.js +11 -11
- package/dist/src/providers/adapters/openrouter.js.map +1 -1
- package/dist/src/providers/circuit-breaker.d.ts +1 -0
- package/dist/src/providers/circuit-breaker.d.ts.map +1 -1
- package/dist/src/providers/circuit-breaker.js.map +1 -1
- package/dist/src/providers/provider.d.ts.map +1 -1
- package/dist/src/providers/provider.js +2 -1
- package/dist/src/providers/provider.js.map +1 -1
- package/dist/src/providers/resilient-provider.d.ts.map +1 -1
- package/dist/src/providers/resilient-provider.js +2 -1
- package/dist/src/providers/resilient-provider.js.map +1 -1
- package/dist/src/session-picker.d.ts.map +1 -1
- package/dist/src/session-picker.js +40 -5
- package/dist/src/session-picker.js.map +1 -1
- package/dist/src/shared/budget-tracker.d.ts +65 -0
- package/dist/src/shared/budget-tracker.d.ts.map +1 -0
- package/dist/src/shared/budget-tracker.js +128 -0
- package/dist/src/shared/budget-tracker.js.map +1 -0
- package/dist/src/shared/context-engine.d.ts +64 -0
- package/dist/src/shared/context-engine.d.ts.map +1 -0
- package/dist/src/shared/context-engine.js +117 -0
- package/dist/src/shared/context-engine.js.map +1 -0
- package/dist/src/shared/index.d.ts +12 -0
- package/dist/src/shared/index.d.ts.map +1 -0
- package/dist/src/shared/index.js +12 -0
- package/dist/src/shared/index.js.map +1 -0
- package/dist/src/shared/persistence.d.ts +57 -0
- package/dist/src/shared/persistence.d.ts.map +1 -0
- package/dist/src/shared/persistence.js +168 -0
- package/dist/src/shared/persistence.js.map +1 -0
- package/dist/src/shared/shared-context-state.d.ts +89 -0
- package/dist/src/shared/shared-context-state.d.ts.map +1 -0
- package/dist/src/shared/shared-context-state.js +175 -0
- package/dist/src/shared/shared-context-state.js.map +1 -0
- package/dist/src/shared/shared-economics-state.d.ts +61 -0
- package/dist/src/shared/shared-economics-state.d.ts.map +1 -0
- package/dist/src/shared/shared-economics-state.js +100 -0
- package/dist/src/shared/shared-economics-state.js.map +1 -0
- package/dist/src/tools/agent.d.ts.map +1 -1
- package/dist/src/tools/agent.js +11 -2
- package/dist/src/tools/agent.js.map +1 -1
- package/dist/src/tools/bash.d.ts +1 -1
- package/dist/src/tools/bash.d.ts.map +1 -1
- package/dist/src/tools/bash.js +2 -1
- package/dist/src/tools/bash.js.map +1 -1
- package/dist/src/tools/coercion.d.ts +6 -0
- package/dist/src/tools/coercion.d.ts.map +1 -1
- package/dist/src/tools/coercion.js +13 -0
- package/dist/src/tools/coercion.js.map +1 -1
- package/dist/src/tools/file.d.ts +5 -5
- package/dist/src/tools/file.js +2 -2
- package/dist/src/tools/file.js.map +1 -1
- package/dist/src/tools/permission.d.ts.map +1 -1
- package/dist/src/tools/permission.js +10 -116
- package/dist/src/tools/permission.js.map +1 -1
- package/dist/src/tools/types.d.ts +1 -0
- package/dist/src/tools/types.d.ts.map +1 -1
- package/dist/src/tools/types.js.map +1 -1
- package/dist/src/tracing/trace-collector.d.ts +292 -0
- package/dist/src/tracing/trace-collector.d.ts.map +1 -1
- package/dist/src/tracing/trace-collector.js +249 -5
- package/dist/src/tracing/trace-collector.js.map +1 -1
- package/dist/src/tracing/types.d.ts +200 -1
- package/dist/src/tracing/types.d.ts.map +1 -1
- package/dist/src/tracing/types.js.map +1 -1
- package/dist/src/tricks/failure-evidence.d.ts.map +1 -1
- package/dist/src/tricks/failure-evidence.js +2 -1
- package/dist/src/tricks/failure-evidence.js.map +1 -1
- package/dist/src/tui/app.d.ts +13 -0
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +162 -19
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/src/tui/components/ErrorBoundary.js +3 -2
- package/dist/src/tui/components/ErrorBoundary.js.map +1 -1
- package/dist/src/tui/event-display.d.ts.map +1 -1
- package/dist/src/tui/event-display.js +36 -62
- package/dist/src/tui/event-display.js.map +1 -1
- package/dist/src/tui/index.d.ts +4 -0
- package/dist/src/tui/index.d.ts.map +1 -1
- package/dist/src/tui/index.js +17 -0
- package/dist/src/tui/index.js.map +1 -1
- package/dist/src/types.d.ts +214 -1
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +18 -3
|
@@ -7,6 +7,7 @@ import { createInterface } from 'readline';
|
|
|
7
7
|
import { writeFileSync, existsSync } from 'fs';
|
|
8
8
|
import { getConfigPath, ensureDirectories } from '../paths.js';
|
|
9
9
|
import { detectProviders } from '../first-run.js';
|
|
10
|
+
import { logger } from '../integrations/logger.js';
|
|
10
11
|
const rl = createInterface({
|
|
11
12
|
input: process.stdin,
|
|
12
13
|
output: process.stdout,
|
|
@@ -18,7 +19,9 @@ function question(prompt) {
|
|
|
18
19
|
}
|
|
19
20
|
function select(prompt, options) {
|
|
20
21
|
return new Promise(async (resolve) => {
|
|
22
|
+
// eslint-disable-next-line no-console
|
|
21
23
|
console.log(prompt);
|
|
24
|
+
// eslint-disable-next-line no-console
|
|
22
25
|
options.forEach((opt, i) => console.log(` ${i + 1}) ${opt}`));
|
|
23
26
|
const answer = await question('Choice: ');
|
|
24
27
|
const choice = parseInt(answer, 10);
|
|
@@ -31,12 +34,18 @@ function select(prompt, options) {
|
|
|
31
34
|
});
|
|
32
35
|
}
|
|
33
36
|
export async function runInit() {
|
|
37
|
+
logger.debug('Starting interactive init setup');
|
|
38
|
+
// eslint-disable-next-line no-console
|
|
34
39
|
console.log('\n🚀 Attocode Setup\n');
|
|
35
40
|
// Check existing config
|
|
36
41
|
if (existsSync(getConfigPath())) {
|
|
42
|
+
logger.debug('Existing config found', { path: getConfigPath() });
|
|
43
|
+
// eslint-disable-next-line no-console
|
|
37
44
|
console.log(`Config already exists at ${getConfigPath()}`);
|
|
38
45
|
const overwrite = await question('Overwrite? (y/N): ');
|
|
39
46
|
if (overwrite.toLowerCase() !== 'y') {
|
|
47
|
+
logger.info('Init setup cancelled by user');
|
|
48
|
+
// eslint-disable-next-line no-console
|
|
40
49
|
console.log('Setup cancelled.');
|
|
41
50
|
rl.close();
|
|
42
51
|
return;
|
|
@@ -45,8 +54,12 @@ export async function runInit() {
|
|
|
45
54
|
// Detect existing providers
|
|
46
55
|
const detected = detectProviders();
|
|
47
56
|
if (detected.length > 0) {
|
|
57
|
+
logger.debug('Detected providers from environment', { providers: detected.map(p => p.name) });
|
|
58
|
+
// eslint-disable-next-line no-console
|
|
48
59
|
console.log('✓ Detected API keys from environment:');
|
|
60
|
+
// eslint-disable-next-line no-console
|
|
49
61
|
detected.forEach(p => console.log(` - ${p.name.toUpperCase()}`));
|
|
62
|
+
// eslint-disable-next-line no-console
|
|
50
63
|
console.log('');
|
|
51
64
|
}
|
|
52
65
|
// Select provider
|
|
@@ -65,8 +78,12 @@ export async function runInit() {
|
|
|
65
78
|
};
|
|
66
79
|
const envVar = envVars[provider];
|
|
67
80
|
if (!process.env[envVar]) {
|
|
81
|
+
logger.warn('API key not found in environment', { envVar, provider });
|
|
82
|
+
// eslint-disable-next-line no-console
|
|
68
83
|
console.log(`\n⚠️ No ${envVar} found in environment.`);
|
|
84
|
+
// eslint-disable-next-line no-console
|
|
69
85
|
console.log(`Set it before running attocode:`);
|
|
86
|
+
// eslint-disable-next-line no-console
|
|
70
87
|
console.log(` export ${envVar}="your-api-key-here"\n`);
|
|
71
88
|
}
|
|
72
89
|
// Model selection - with custom option
|
|
@@ -93,9 +110,12 @@ export async function runInit() {
|
|
|
93
110
|
};
|
|
94
111
|
const models = suggestedModels[provider];
|
|
95
112
|
const modelOptions = [...models.map(m => m.name), '✏️ Enter custom model'];
|
|
113
|
+
// eslint-disable-next-line no-console
|
|
96
114
|
console.log('\nSelect model:');
|
|
115
|
+
// eslint-disable-next-line no-console
|
|
97
116
|
modelOptions.forEach((opt, i) => console.log(` ${i + 1}) ${opt}`));
|
|
98
117
|
if (provider === 'openrouter') {
|
|
118
|
+
// eslint-disable-next-line no-console
|
|
99
119
|
console.log('\n 💡 Browse all models: https://openrouter.ai/models');
|
|
100
120
|
}
|
|
101
121
|
const modelAnswer = await question('\nChoice (or type model ID directly): ');
|
|
@@ -116,8 +136,12 @@ export async function runInit() {
|
|
|
116
136
|
else {
|
|
117
137
|
// Default to first option
|
|
118
138
|
model = models[0].id;
|
|
139
|
+
logger.debug('Defaulting to first model option', { model });
|
|
140
|
+
// eslint-disable-next-line no-console
|
|
119
141
|
console.log(`Using default: ${model}`);
|
|
120
142
|
}
|
|
143
|
+
logger.info('Model selected for init', { provider, model });
|
|
144
|
+
// eslint-disable-next-line no-console
|
|
121
145
|
console.log(`\n✓ Selected model: ${model}`);
|
|
122
146
|
// Create config
|
|
123
147
|
await ensureDirectories();
|
|
@@ -137,16 +161,23 @@ export async function runInit() {
|
|
|
137
161
|
}
|
|
138
162
|
};
|
|
139
163
|
writeFileSync(getConfigPath(), JSON.stringify(config, null, 2));
|
|
164
|
+
logger.info('Config saved', { path: getConfigPath(), provider, model });
|
|
165
|
+
// eslint-disable-next-line no-console
|
|
140
166
|
console.log(`✓ Config saved to ${getConfigPath()}`);
|
|
141
167
|
// Show next steps
|
|
168
|
+
// eslint-disable-next-line no-console
|
|
142
169
|
console.log('\n📋 Next steps:');
|
|
143
170
|
if (!process.env[envVar]) {
|
|
171
|
+
// eslint-disable-next-line no-console
|
|
144
172
|
console.log(` 1. Set your API key: export ${envVar}="..."`);
|
|
173
|
+
// eslint-disable-next-line no-console
|
|
145
174
|
console.log(' 2. Run: attocode');
|
|
146
175
|
}
|
|
147
176
|
else {
|
|
177
|
+
// eslint-disable-next-line no-console
|
|
148
178
|
console.log(' Run: attocode');
|
|
149
179
|
}
|
|
180
|
+
// eslint-disable-next-line no-console
|
|
150
181
|
console.log('');
|
|
151
182
|
rl.close();
|
|
152
183
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared base types for common configuration patterns.
|
|
3
|
+
*
|
|
4
|
+
* These types capture recurring shapes found across 20+ config interfaces.
|
|
5
|
+
* New configs should compose from these bases where appropriate.
|
|
6
|
+
* Existing interfaces get `@see` annotations pointing here — no breaking changes.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Retry behavior configuration.
|
|
10
|
+
* @see ToolRetryConfig in tools/types.ts
|
|
11
|
+
* @see RetryConfig in integrations/retry.ts
|
|
12
|
+
* @see CircuitBreakerConfig in providers/circuit-breaker.ts
|
|
13
|
+
*/
|
|
14
|
+
export interface RetryConfig {
|
|
15
|
+
maxAttempts?: number;
|
|
16
|
+
baseDelayMs?: number;
|
|
17
|
+
maxDelayMs?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Budget / capacity limits configuration.
|
|
21
|
+
* @see ResourceConfig in types.ts
|
|
22
|
+
* @see SemanticCacheAgentConfig in types.ts
|
|
23
|
+
*/
|
|
24
|
+
export interface BudgetConfig {
|
|
25
|
+
maxEntries?: number;
|
|
26
|
+
/** Warning threshold as a 0-1 ratio. */
|
|
27
|
+
warnThreshold?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Timeout and grace period configuration.
|
|
31
|
+
* @see CancellationConfig in types.ts
|
|
32
|
+
* @see SubagentConfig in types.ts
|
|
33
|
+
*/
|
|
34
|
+
export interface TimeoutConfig {
|
|
35
|
+
timeoutMs?: number;
|
|
36
|
+
gracePeriodMs?: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Model selection configuration.
|
|
40
|
+
*/
|
|
41
|
+
export interface ModelSelectionConfig {
|
|
42
|
+
model?: string;
|
|
43
|
+
maxTokens?: number;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=base-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-types.d.ts","sourceRoot":"","sources":["../../../src/config/base-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared base types for common configuration patterns.
|
|
3
|
+
*
|
|
4
|
+
* These types capture recurring shapes found across 20+ config interfaces.
|
|
5
|
+
* New configs should compose from these bases where appropriate.
|
|
6
|
+
* Existing interfaces get `@see` annotations pointing here — no breaking changes.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=base-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-types.js","sourceRoot":"","sources":["../../../src/config/base-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Configuration Loader
|
|
3
|
+
*
|
|
4
|
+
* Single entry point for loading, merging, and validating configuration
|
|
5
|
+
* from user-level (~/.config/attocode/config.json) and project-level
|
|
6
|
+
* (.attocode/config.json) sources.
|
|
7
|
+
*/
|
|
8
|
+
import { type ValidatedUserConfig } from './schema.js';
|
|
9
|
+
export interface ConfigLoadOptions {
|
|
10
|
+
/** Working directory for locating project config (defaults to process.cwd()) */
|
|
11
|
+
cwd?: string;
|
|
12
|
+
/** Skip project-level config loading */
|
|
13
|
+
skipProject?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ConfigLoadResult {
|
|
16
|
+
/** Merged and validated config */
|
|
17
|
+
config: ValidatedUserConfig;
|
|
18
|
+
/** Sources that were checked */
|
|
19
|
+
sources: Array<{
|
|
20
|
+
path: string;
|
|
21
|
+
level: 'user' | 'project';
|
|
22
|
+
loaded: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
/** Non-fatal validation warnings */
|
|
25
|
+
warnings: string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Load configuration from user-level and project-level sources.
|
|
29
|
+
*
|
|
30
|
+
* Priority: user ← project (project overrides user).
|
|
31
|
+
* Validates the merged result with Zod. Validation errors are collected
|
|
32
|
+
* as warnings — the best-effort config is always returned.
|
|
33
|
+
*/
|
|
34
|
+
export declare function loadConfig(options?: ConfigLoadOptions): ConfigLoadResult;
|
|
35
|
+
//# sourceMappingURL=config-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAoB,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMzE,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,gCAAgC;IAChC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7E,oCAAoC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAsED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CA2C5E"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Configuration Loader
|
|
3
|
+
*
|
|
4
|
+
* Single entry point for loading, merging, and validating configuration
|
|
5
|
+
* from user-level (~/.config/attocode/config.json) and project-level
|
|
6
|
+
* (.attocode/config.json) sources.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { getConfigPath, getProjectDir } from '../paths.js';
|
|
11
|
+
import { UserConfigSchema } from './schema.js';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// DEEP MERGE
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Deep merge two config objects.
|
|
17
|
+
* Same algorithm as defaults.ts:mergeConfig() — shallow spread with 1-level
|
|
18
|
+
* nested object merge, arrays replace (not concat).
|
|
19
|
+
*/
|
|
20
|
+
function deepMergeConfigs(base, override) {
|
|
21
|
+
const result = { ...base };
|
|
22
|
+
for (const [key, value] of Object.entries(override)) {
|
|
23
|
+
const baseValue = result[key];
|
|
24
|
+
if (typeof value === 'object' &&
|
|
25
|
+
value !== null &&
|
|
26
|
+
!Array.isArray(value) &&
|
|
27
|
+
typeof baseValue === 'object' &&
|
|
28
|
+
baseValue !== null &&
|
|
29
|
+
!Array.isArray(baseValue)) {
|
|
30
|
+
// 1-level nested object merge
|
|
31
|
+
result[key] = { ...baseValue, ...value };
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
result[key] = value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
// =============================================================================
|
|
40
|
+
// LOADER
|
|
41
|
+
// =============================================================================
|
|
42
|
+
/**
|
|
43
|
+
* Load a JSON config file, returning the parsed object or null.
|
|
44
|
+
* Collects parse errors as warnings.
|
|
45
|
+
*/
|
|
46
|
+
function loadJsonFile(filePath, warnings) {
|
|
47
|
+
if (!existsSync(filePath)) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
52
|
+
const parsed = JSON.parse(content);
|
|
53
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
54
|
+
warnings.push(`${filePath}: expected a JSON object, got ${Array.isArray(parsed) ? 'array' : typeof parsed}`);
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
return parsed;
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
warnings.push(`${filePath}: failed to parse JSON — ${err.message}`);
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Load configuration from user-level and project-level sources.
|
|
66
|
+
*
|
|
67
|
+
* Priority: user ← project (project overrides user).
|
|
68
|
+
* Validates the merged result with Zod. Validation errors are collected
|
|
69
|
+
* as warnings — the best-effort config is always returned.
|
|
70
|
+
*/
|
|
71
|
+
export function loadConfig(options = {}) {
|
|
72
|
+
const { cwd, skipProject = false } = options;
|
|
73
|
+
const warnings = [];
|
|
74
|
+
const sources = [];
|
|
75
|
+
// 1. Load user-level config
|
|
76
|
+
const userConfigPath = getConfigPath();
|
|
77
|
+
const userRaw = loadJsonFile(userConfigPath, warnings);
|
|
78
|
+
sources.push({ path: userConfigPath, level: 'user', loaded: userRaw !== null });
|
|
79
|
+
// 2. Load project-level config
|
|
80
|
+
let projectRaw = null;
|
|
81
|
+
if (!skipProject) {
|
|
82
|
+
const projectConfigPath = join(getProjectDir(cwd), 'config.json');
|
|
83
|
+
projectRaw = loadJsonFile(projectConfigPath, warnings);
|
|
84
|
+
sources.push({ path: projectConfigPath, level: 'project', loaded: projectRaw !== null });
|
|
85
|
+
}
|
|
86
|
+
// 3. Deep merge: user ← project
|
|
87
|
+
let merged = {};
|
|
88
|
+
if (userRaw) {
|
|
89
|
+
merged = { ...userRaw };
|
|
90
|
+
}
|
|
91
|
+
if (projectRaw) {
|
|
92
|
+
merged = deepMergeConfigs(merged, projectRaw);
|
|
93
|
+
}
|
|
94
|
+
// 4. Validate with Zod
|
|
95
|
+
const result = UserConfigSchema.safeParse(merged);
|
|
96
|
+
if (result.success) {
|
|
97
|
+
return { config: result.data, sources, warnings };
|
|
98
|
+
}
|
|
99
|
+
// Collect validation issues as warnings but return best-effort config
|
|
100
|
+
for (const issue of result.error.issues) {
|
|
101
|
+
const path = issue.path.length > 0 ? issue.path.join('.') : '(root)';
|
|
102
|
+
warnings.push(`config validation: ${path} — ${issue.message}`);
|
|
103
|
+
}
|
|
104
|
+
// Return the raw merged object cast through passthrough parsing
|
|
105
|
+
// Since top-level uses passthrough(), most fields survive even on error
|
|
106
|
+
return { config: merged, sources, warnings };
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { loadConfig, type ConfigLoadResult, type ConfigLoadOptions } from './config-manager.js';
|
|
2
|
+
export { UserConfigSchema, type ValidatedUserConfig } from './schema.js';
|
|
3
|
+
export type { RetryConfig, BudgetConfig, TimeoutConfig, ModelSelectionConfig } from './base-types.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiD,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAA4B,MAAM,aAAa,CAAC"}
|