gencode-ai 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/README.md +6 -1
- package/dist/base/config/index.d.ts.map +1 -0
- package/dist/base/config/index.js.map +1 -0
- package/dist/base/config/levels.d.ts +47 -0
- package/dist/base/config/levels.d.ts.map +1 -0
- package/dist/base/config/levels.js +175 -0
- package/dist/base/config/levels.js.map +1 -0
- package/dist/base/config/loader.d.ts.map +1 -0
- package/dist/base/config/loader.js.map +1 -0
- package/dist/base/config/manager.d.ts.map +1 -0
- package/dist/base/config/manager.js.map +1 -0
- package/dist/base/config/merger.d.ts.map +1 -0
- package/dist/base/config/merger.js.map +1 -0
- package/dist/base/config/providers-config.d.ts.map +1 -0
- package/dist/base/config/providers-config.js +76 -0
- package/dist/base/config/providers-config.js.map +1 -0
- package/dist/base/config/test-utils.d.ts.map +1 -0
- package/dist/base/config/test-utils.js.map +1 -0
- package/dist/base/config/types.d.ts +156 -0
- package/dist/base/config/types.d.ts.map +1 -0
- package/dist/base/config/types.js +34 -0
- package/dist/base/config/types.js.map +1 -0
- package/dist/base/discovery/base-loader.d.ts +63 -0
- package/dist/base/discovery/base-loader.d.ts.map +1 -0
- package/dist/base/discovery/base-loader.js +176 -0
- package/dist/base/discovery/base-loader.js.map +1 -0
- package/dist/base/discovery/file-scanner.d.ts +28 -0
- package/dist/base/discovery/file-scanner.d.ts.map +1 -0
- package/dist/base/discovery/file-scanner.js +175 -0
- package/dist/base/discovery/file-scanner.js.map +1 -0
- package/dist/base/discovery/index.d.ts +10 -0
- package/dist/base/discovery/index.d.ts.map +1 -0
- package/dist/base/discovery/index.js +12 -0
- package/dist/base/discovery/index.js.map +1 -0
- package/dist/base/discovery/path-resolver.d.ts +31 -0
- package/dist/base/discovery/path-resolver.d.ts.map +1 -0
- package/dist/base/discovery/path-resolver.js +92 -0
- package/dist/base/discovery/path-resolver.js.map +1 -0
- package/dist/base/discovery/types.d.ts +132 -0
- package/dist/base/discovery/types.d.ts.map +1 -0
- package/dist/base/discovery/types.js +14 -0
- package/dist/base/discovery/types.js.map +1 -0
- package/dist/base/utils/config-validator.d.ts +128 -0
- package/dist/base/utils/config-validator.d.ts.map +1 -0
- package/dist/base/utils/config-validator.js +143 -0
- package/dist/base/utils/config-validator.js.map +1 -0
- package/dist/base/utils/debug.d.ts +50 -0
- package/dist/base/utils/debug.d.ts.map +1 -0
- package/dist/base/utils/debug.js +80 -0
- package/dist/base/utils/debug.js.map +1 -0
- package/dist/base/utils/format-utils.d.ts +41 -0
- package/dist/base/utils/format-utils.d.ts.map +1 -0
- package/dist/base/utils/format-utils.js +57 -0
- package/dist/base/utils/format-utils.js.map +1 -0
- package/dist/base/utils/index.d.ts +12 -0
- package/dist/base/utils/index.d.ts.map +1 -0
- package/dist/base/utils/index.js +12 -0
- package/dist/base/utils/index.js.map +1 -0
- package/dist/base/utils/loading-reporter.d.ts +70 -0
- package/dist/base/utils/loading-reporter.d.ts.map +1 -0
- package/dist/base/utils/loading-reporter.js +164 -0
- package/dist/base/utils/loading-reporter.js.map +1 -0
- package/dist/base/utils/logger.d.ts +32 -0
- package/dist/base/utils/logger.d.ts.map +1 -0
- package/dist/base/utils/logger.js +77 -0
- package/dist/base/utils/logger.js.map +1 -0
- package/dist/base/utils/path-utils.d.ts +25 -0
- package/dist/base/utils/path-utils.d.ts.map +1 -0
- package/dist/base/utils/path-utils.js +71 -0
- package/dist/base/utils/path-utils.js.map +1 -0
- package/dist/base/utils/stream-utils.d.ts +28 -0
- package/dist/base/utils/stream-utils.d.ts.map +1 -0
- package/dist/base/utils/stream-utils.js +58 -0
- package/dist/base/utils/stream-utils.js.map +1 -0
- package/dist/base/utils/validation.d.ts +20 -0
- package/dist/base/utils/validation.d.ts.map +1 -0
- package/dist/base/utils/validation.js +22 -0
- package/dist/base/utils/validation.js.map +1 -0
- package/dist/cli/components/App.d.ts +16 -2
- package/dist/cli/components/App.d.ts.map +1 -1
- package/dist/cli/components/App.js +314 -15
- package/dist/cli/components/App.js.map +1 -1
- package/dist/cli/components/CommandSuggestions.d.ts +5 -3
- package/dist/cli/components/CommandSuggestions.d.ts.map +1 -1
- package/dist/cli/components/CommandSuggestions.js +74 -11
- package/dist/cli/components/CommandSuggestions.js.map +1 -1
- package/dist/cli/components/DiffPreview.d.ts +17 -0
- package/dist/cli/components/DiffPreview.d.ts.map +1 -0
- package/dist/cli/components/DiffPreview.js +72 -0
- package/dist/cli/components/DiffPreview.js.map +1 -0
- package/dist/cli/components/Input.d.ts +2 -1
- package/dist/cli/components/Input.d.ts.map +1 -1
- package/dist/cli/components/Input.js +2 -2
- package/dist/cli/components/Input.js.map +1 -1
- package/dist/cli/components/Messages.d.ts +16 -2
- package/dist/cli/components/Messages.d.ts.map +1 -1
- package/dist/cli/components/Messages.js +65 -24
- package/dist/cli/components/Messages.js.map +1 -1
- package/dist/cli/components/ModeIndicator.d.ts +1 -1
- package/dist/cli/components/ModeIndicator.d.ts.map +1 -1
- package/dist/cli/components/ModelSelector.d.ts +1 -1
- package/dist/cli/components/ModelSelector.d.ts.map +1 -1
- package/dist/cli/components/ModelSelector.js +2 -2
- package/dist/cli/components/ModelSelector.js.map +1 -1
- package/dist/cli/components/PermissionPrompt.d.ts +20 -12
- package/dist/cli/components/PermissionPrompt.d.ts.map +1 -1
- package/dist/cli/components/PermissionPrompt.js +51 -52
- package/dist/cli/components/PermissionPrompt.js.map +1 -1
- package/dist/cli/components/PlanApproval.d.ts +1 -1
- package/dist/cli/components/PlanApproval.d.ts.map +1 -1
- package/dist/cli/components/PlanApproval.js +18 -6
- package/dist/cli/components/PlanApproval.js.map +1 -1
- package/dist/cli/components/ProviderManager.d.ts +1 -1
- package/dist/cli/components/ProviderManager.d.ts.map +1 -1
- package/dist/cli/components/ProviderManager.js +4 -4
- package/dist/cli/components/ProviderManager.js.map +1 -1
- package/dist/cli/components/QuestionPrompt.d.ts +1 -1
- package/dist/cli/components/QuestionPrompt.d.ts.map +1 -1
- package/dist/cli/components/TodoList.d.ts +1 -1
- package/dist/cli/components/TodoList.d.ts.map +1 -1
- package/dist/cli/components/index.d.ts +2 -1
- package/dist/cli/components/index.d.ts.map +1 -1
- package/dist/cli/components/index.js +2 -1
- package/dist/cli/components/index.js.map +1 -1
- package/dist/cli/components/markdown.d.ts.map +1 -1
- package/dist/cli/components/markdown.js +50 -6
- package/dist/cli/components/markdown.js.map +1 -1
- package/dist/cli/components/theme.d.ts +41 -0
- package/dist/cli/components/theme.d.ts.map +1 -1
- package/dist/cli/components/theme.js +52 -0
- package/dist/cli/components/theme.js.map +1 -1
- package/dist/cli/index.js +50 -15
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/planning/index.d.ts.map +1 -0
- package/dist/cli/planning/index.js.map +1 -0
- package/dist/cli/planning/plan-file.d.ts.map +1 -0
- package/dist/cli/planning/plan-file.js.map +1 -0
- package/dist/cli/planning/state.d.ts.map +1 -0
- package/dist/cli/planning/state.js.map +1 -0
- package/dist/cli/planning/tools/enter-plan-mode.d.ts +25 -0
- package/dist/cli/planning/tools/enter-plan-mode.d.ts.map +1 -0
- package/dist/cli/planning/tools/enter-plan-mode.js.map +1 -0
- package/dist/cli/planning/tools/exit-plan-mode.d.ts +24 -0
- package/dist/cli/planning/tools/exit-plan-mode.d.ts.map +1 -0
- package/dist/cli/planning/tools/exit-plan-mode.js.map +1 -0
- package/dist/cli/planning/types.d.ts +102 -0
- package/dist/cli/planning/types.d.ts.map +1 -0
- package/dist/cli/planning/types.js +31 -0
- package/dist/cli/planning/types.js.map +1 -0
- package/dist/cli/prompts/index.d.ts +115 -0
- package/dist/cli/prompts/index.d.ts.map +1 -0
- package/dist/cli/prompts/index.js +315 -0
- package/dist/cli/prompts/index.js.map +1 -0
- package/dist/core/agent/agent.d.ts +215 -0
- package/dist/core/agent/agent.d.ts.map +1 -0
- package/dist/core/agent/agent.js +877 -0
- package/dist/core/agent/agent.js.map +1 -0
- package/dist/core/agent/index.d.ts.map +1 -0
- package/dist/core/agent/index.js.map +1 -0
- package/dist/core/agent/types.d.ts.map +1 -0
- package/dist/core/agent/types.js.map +1 -0
- package/dist/core/memory/import-resolver.d.ts.map +1 -0
- package/dist/core/memory/import-resolver.js.map +1 -0
- package/dist/core/memory/index.d.ts.map +1 -0
- package/dist/core/memory/index.js.map +1 -0
- package/dist/core/memory/init-prompt.d.ts.map +1 -0
- package/dist/core/memory/init-prompt.js.map +1 -0
- package/dist/core/memory/memory-manager.d.ts.map +1 -0
- package/dist/core/memory/memory-manager.js +716 -0
- package/dist/core/memory/memory-manager.js.map +1 -0
- package/dist/core/memory/rules-parser.d.ts.map +1 -0
- package/dist/core/memory/rules-parser.js.map +1 -0
- package/dist/core/memory/test-utils.d.ts.map +1 -0
- package/dist/core/memory/test-utils.js.map +1 -0
- package/dist/core/memory/types.d.ts.map +1 -0
- package/dist/core/memory/types.js.map +1 -0
- package/dist/core/permissions/audit.d.ts.map +1 -0
- package/dist/core/permissions/audit.js.map +1 -0
- package/dist/core/permissions/index.d.ts.map +1 -0
- package/dist/core/permissions/index.js.map +1 -0
- package/dist/core/permissions/manager.d.ts.map +1 -0
- package/dist/core/permissions/manager.js.map +1 -0
- package/dist/core/permissions/persistence.d.ts.map +1 -0
- package/dist/core/permissions/persistence.js.map +1 -0
- package/dist/core/permissions/prompt-matcher.d.ts.map +1 -0
- package/dist/core/permissions/prompt-matcher.js.map +1 -0
- package/dist/core/permissions/types.d.ts.map +1 -0
- package/dist/core/permissions/types.js.map +1 -0
- package/dist/core/pricing/calculator.d.ts.map +1 -0
- package/dist/core/pricing/calculator.js.map +1 -0
- package/dist/core/pricing/index.d.ts.map +1 -0
- package/dist/core/pricing/index.js.map +1 -0
- package/dist/core/pricing/models.d.ts.map +1 -0
- package/dist/core/pricing/models.js.map +1 -0
- package/dist/core/pricing/types.d.ts.map +1 -0
- package/dist/core/pricing/types.js.map +1 -0
- package/dist/core/providers/anthropic-vertex.d.ts +41 -0
- package/dist/core/providers/anthropic-vertex.d.ts.map +1 -0
- package/dist/core/providers/anthropic-vertex.js +462 -0
- package/dist/core/providers/anthropic-vertex.js.map +1 -0
- package/dist/core/providers/anthropic.d.ts.map +1 -0
- package/dist/core/providers/anthropic.js.map +1 -0
- package/dist/core/providers/google.d.ts.map +1 -0
- package/dist/core/providers/google.js +314 -0
- package/dist/core/providers/google.js.map +1 -0
- package/dist/core/providers/index.d.ts +46 -0
- package/dist/core/providers/index.d.ts.map +1 -0
- package/dist/core/providers/index.js +108 -0
- package/dist/core/providers/index.js.map +1 -0
- package/dist/core/providers/openai.d.ts.map +1 -0
- package/dist/core/providers/openai.js.map +1 -0
- package/dist/core/providers/registry.d.ts.map +1 -0
- package/dist/core/providers/registry.js +142 -0
- package/dist/core/providers/registry.js.map +1 -0
- package/dist/core/providers/search/brave.d.ts.map +1 -0
- package/dist/core/providers/search/brave.js.map +1 -0
- package/dist/core/providers/search/exa.d.ts.map +1 -0
- package/dist/core/providers/search/exa.js +161 -0
- package/dist/core/providers/search/exa.js.map +1 -0
- package/dist/core/providers/search/index.d.ts.map +1 -0
- package/dist/core/providers/search/index.js.map +1 -0
- package/dist/core/providers/search/serper.d.ts.map +1 -0
- package/dist/core/providers/search/serper.js.map +1 -0
- package/dist/core/providers/search/types.d.ts.map +1 -0
- package/dist/core/providers/search/types.js.map +1 -0
- package/dist/core/providers/store.d.ts.map +1 -0
- package/dist/core/providers/store.js.map +1 -0
- package/dist/core/providers/types.d.ts.map +1 -0
- package/dist/core/providers/types.js.map +1 -0
- package/dist/core/providers/vertex-ai.d.ts.map +1 -0
- package/dist/core/providers/vertex-ai.js +462 -0
- package/dist/core/providers/vertex-ai.js.map +1 -0
- package/dist/core/session/checkpointing/checkpoint-manager.d.ts.map +1 -0
- package/dist/core/session/checkpointing/checkpoint-manager.js.map +1 -0
- package/dist/core/session/checkpointing/index.d.ts.map +1 -0
- package/dist/core/session/checkpointing/index.js.map +1 -0
- package/dist/core/session/checkpointing/types.d.ts.map +1 -0
- package/dist/core/session/checkpointing/types.js.map +1 -0
- package/dist/core/session/compression/engine.d.ts.map +1 -0
- package/dist/core/session/compression/engine.js.map +1 -0
- package/dist/core/session/compression/index.d.ts.map +1 -0
- package/dist/core/session/compression/index.js.map +1 -0
- package/dist/core/session/compression/types.d.ts.map +1 -0
- package/dist/core/session/compression/types.js.map +1 -0
- package/dist/core/session/index.d.ts +10 -0
- package/dist/core/session/index.d.ts.map +1 -0
- package/dist/core/session/index.js +10 -0
- package/dist/core/session/index.js.map +1 -0
- package/dist/core/session/input/history-manager.d.ts.map +1 -0
- package/dist/core/session/input/history-manager.js.map +1 -0
- package/dist/core/session/input/index.d.ts.map +1 -0
- package/dist/core/session/input/index.js.map +1 -0
- package/dist/core/session/manager.d.ts +169 -0
- package/dist/core/session/manager.d.ts.map +1 -0
- package/dist/core/session/manager.js +560 -0
- package/dist/core/session/manager.js.map +1 -0
- package/dist/core/session/tasks/index.d.ts +7 -0
- package/dist/core/session/tasks/index.d.ts.map +1 -0
- package/dist/core/session/tasks/index.js +7 -0
- package/dist/core/session/tasks/index.js.map +1 -0
- package/dist/core/session/tasks/output-streamer.d.ts +63 -0
- package/dist/core/session/tasks/output-streamer.d.ts.map +1 -0
- package/dist/core/session/tasks/output-streamer.js +211 -0
- package/dist/core/session/tasks/output-streamer.js.map +1 -0
- package/dist/core/session/tasks/task-manager.d.ts +90 -0
- package/dist/core/session/tasks/task-manager.d.ts.map +1 -0
- package/dist/core/session/tasks/task-manager.js +512 -0
- package/dist/core/session/tasks/task-manager.js.map +1 -0
- package/dist/core/session/tasks/types.d.ts +113 -0
- package/dist/core/session/tasks/types.d.ts.map +1 -0
- package/dist/core/session/tasks/types.js +7 -0
- package/dist/core/session/tasks/types.js.map +1 -0
- package/dist/core/session/types.d.ts +63 -0
- package/dist/core/session/types.d.ts.map +1 -0
- package/dist/core/session/types.js.map +1 -0
- package/dist/core/tools/builtin/ask-user.d.ts.map +1 -0
- package/dist/core/tools/builtin/ask-user.js +148 -0
- package/dist/core/tools/builtin/ask-user.js.map +1 -0
- package/dist/core/tools/builtin/bash.d.ts.map +1 -0
- package/dist/core/tools/builtin/bash.js +107 -0
- package/dist/core/tools/builtin/bash.js.map +1 -0
- package/dist/core/tools/builtin/edit.d.ts.map +1 -0
- package/dist/core/tools/builtin/edit.js +79 -0
- package/dist/core/tools/builtin/edit.js.map +1 -0
- package/dist/core/tools/builtin/glob.d.ts.map +1 -0
- package/dist/core/tools/builtin/glob.js +37 -0
- package/dist/core/tools/builtin/glob.js.map +1 -0
- package/dist/core/tools/builtin/grep.d.ts.map +1 -0
- package/dist/core/tools/builtin/grep.js +60 -0
- package/dist/core/tools/builtin/grep.js.map +1 -0
- package/dist/core/tools/builtin/read.d.ts.map +1 -0
- package/dist/core/tools/builtin/read.js +30 -0
- package/dist/core/tools/builtin/read.js.map +1 -0
- package/dist/core/tools/builtin/taskoutput.d.ts +17 -0
- package/dist/core/tools/builtin/taskoutput.d.ts.map +1 -0
- package/dist/core/tools/builtin/taskoutput.js +277 -0
- package/dist/core/tools/builtin/taskoutput.js.map +1 -0
- package/dist/core/tools/builtin/todowrite.d.ts.map +1 -0
- package/dist/core/tools/builtin/todowrite.js +90 -0
- package/dist/core/tools/builtin/todowrite.js.map +1 -0
- package/dist/core/tools/builtin/webfetch.d.ts.map +1 -0
- package/dist/core/tools/builtin/webfetch.js +228 -0
- package/dist/core/tools/builtin/webfetch.js.map +1 -0
- package/dist/core/tools/builtin/websearch.d.ts.map +1 -0
- package/dist/core/tools/builtin/websearch.js +87 -0
- package/dist/core/tools/builtin/websearch.js.map +1 -0
- package/dist/core/tools/builtin/write.d.ts +9 -0
- package/dist/core/tools/builtin/write.d.ts.map +1 -0
- package/dist/core/tools/builtin/write.js +40 -0
- package/dist/core/tools/builtin/write.js.map +1 -0
- package/dist/core/tools/factories/mcp-tool-factory.d.ts +16 -0
- package/dist/core/tools/factories/mcp-tool-factory.d.ts.map +1 -0
- package/dist/core/tools/factories/mcp-tool-factory.js +92 -0
- package/dist/core/tools/factories/mcp-tool-factory.js.map +1 -0
- package/dist/core/tools/factories/skill-tool-factory.d.ts +28 -0
- package/dist/core/tools/factories/skill-tool-factory.d.ts.map +1 -0
- package/dist/core/tools/factories/skill-tool-factory.js +154 -0
- package/dist/core/tools/factories/skill-tool-factory.js.map +1 -0
- package/dist/core/tools/factories/task-tool-factory.d.ts +13 -0
- package/dist/core/tools/factories/task-tool-factory.d.ts.map +1 -0
- package/dist/core/tools/factories/task-tool-factory.js +387 -0
- package/dist/core/tools/factories/task-tool-factory.js.map +1 -0
- package/dist/core/tools/index.d.ts +87 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +133 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/registry.d.ts +36 -0
- package/dist/core/tools/registry.d.ts.map +1 -0
- package/dist/core/tools/registry.js +150 -0
- package/dist/core/tools/registry.js.map +1 -0
- package/dist/core/tools/types.d.ts +148 -0
- package/dist/core/tools/types.d.ts.map +1 -0
- package/dist/core/tools/types.js +193 -0
- package/dist/core/tools/types.js.map +1 -0
- package/dist/core/tools/utils/ssrf.d.ts.map +1 -0
- package/dist/core/tools/utils/ssrf.js.map +1 -0
- package/dist/ext/commands/discovery.d.ts +23 -0
- package/dist/ext/commands/discovery.d.ts.map +1 -0
- package/dist/ext/commands/discovery.js +36 -0
- package/dist/ext/commands/discovery.js.map +1 -0
- package/dist/ext/commands/expander.d.ts +25 -0
- package/dist/ext/commands/expander.d.ts.map +1 -0
- package/dist/ext/commands/expander.js +140 -0
- package/dist/ext/commands/expander.js.map +1 -0
- package/dist/ext/commands/index.d.ts +12 -0
- package/dist/ext/commands/index.d.ts.map +1 -0
- package/dist/ext/commands/index.js +12 -0
- package/dist/ext/commands/index.js.map +1 -0
- package/dist/ext/commands/manager.d.ts +50 -0
- package/dist/ext/commands/manager.d.ts.map +1 -0
- package/dist/ext/commands/manager.js +174 -0
- package/dist/ext/commands/manager.js.map +1 -0
- package/dist/ext/commands/parser.d.ts +31 -0
- package/dist/ext/commands/parser.d.ts.map +1 -0
- package/dist/ext/commands/parser.js +113 -0
- package/dist/ext/commands/parser.js.map +1 -0
- package/dist/ext/commands/types.d.ts +62 -0
- package/dist/ext/commands/types.d.ts.map +1 -0
- package/dist/ext/commands/types.js +8 -0
- package/dist/ext/commands/types.js.map +1 -0
- package/dist/ext/hooks/executor.d.ts +20 -0
- package/dist/ext/hooks/executor.d.ts.map +1 -0
- package/dist/ext/hooks/executor.js +251 -0
- package/dist/ext/hooks/executor.js.map +1 -0
- package/dist/ext/hooks/hooks-manager.d.ts +112 -0
- package/dist/ext/hooks/hooks-manager.d.ts.map +1 -0
- package/dist/ext/hooks/hooks-manager.js +200 -0
- package/dist/ext/hooks/hooks-manager.js.map +1 -0
- package/dist/ext/hooks/index.d.ts +17 -0
- package/dist/ext/hooks/index.d.ts.map +1 -0
- package/dist/ext/hooks/index.js +20 -0
- package/dist/ext/hooks/index.js.map +1 -0
- package/dist/ext/hooks/matcher.d.ts +38 -0
- package/dist/ext/hooks/matcher.d.ts.map +1 -0
- package/dist/ext/hooks/matcher.js +72 -0
- package/dist/ext/hooks/matcher.js.map +1 -0
- package/dist/ext/hooks/types.d.ts +152 -0
- package/dist/ext/hooks/types.d.ts.map +1 -0
- package/dist/ext/hooks/types.js +10 -0
- package/dist/ext/hooks/types.js.map +1 -0
- package/dist/ext/hooks/utils.d.ts +75 -0
- package/dist/ext/hooks/utils.d.ts.map +1 -0
- package/dist/ext/hooks/utils.js +198 -0
- package/dist/ext/hooks/utils.js.map +1 -0
- package/dist/ext/mcp/auth.d.ts +34 -0
- package/dist/ext/mcp/auth.d.ts.map +1 -0
- package/dist/ext/mcp/auth.js +98 -0
- package/dist/ext/mcp/auth.js.map +1 -0
- package/dist/ext/mcp/client.d.ts +18 -0
- package/dist/ext/mcp/client.d.ts.map +1 -0
- package/dist/ext/mcp/client.js +40 -0
- package/dist/ext/mcp/client.js.map +1 -0
- package/dist/ext/mcp/config.d.ts +33 -0
- package/dist/ext/mcp/config.d.ts.map +1 -0
- package/dist/ext/mcp/config.js +147 -0
- package/dist/ext/mcp/config.js.map +1 -0
- package/dist/ext/mcp/connection.d.ts +16 -0
- package/dist/ext/mcp/connection.d.ts.map +1 -0
- package/dist/ext/mcp/connection.js +96 -0
- package/dist/ext/mcp/connection.js.map +1 -0
- package/dist/ext/mcp/env-expand.d.ts +24 -0
- package/dist/ext/mcp/env-expand.d.ts.map +1 -0
- package/dist/ext/mcp/env-expand.js +53 -0
- package/dist/ext/mcp/env-expand.js.map +1 -0
- package/dist/ext/mcp/index.d.ts +15 -0
- package/dist/ext/mcp/index.d.ts.map +1 -0
- package/dist/ext/mcp/index.js +22 -0
- package/dist/ext/mcp/index.js.map +1 -0
- package/dist/ext/mcp/manager.d.ts +87 -0
- package/dist/ext/mcp/manager.d.ts.map +1 -0
- package/dist/ext/mcp/manager.js +246 -0
- package/dist/ext/mcp/manager.js.map +1 -0
- package/dist/ext/mcp/oauth-callback.d.ts +21 -0
- package/dist/ext/mcp/oauth-callback.d.ts.map +1 -0
- package/dist/ext/mcp/oauth-callback.js +123 -0
- package/dist/ext/mcp/oauth-callback.js.map +1 -0
- package/dist/ext/mcp/oauth-provider.d.ts +44 -0
- package/dist/ext/mcp/oauth-provider.d.ts.map +1 -0
- package/dist/ext/mcp/oauth-provider.js +159 -0
- package/dist/ext/mcp/oauth-provider.js.map +1 -0
- package/dist/ext/mcp/types.d.ts +122 -0
- package/dist/ext/mcp/types.d.ts.map +1 -0
- package/dist/ext/mcp/types.js +6 -0
- package/dist/ext/mcp/types.js.map +1 -0
- package/dist/ext/skills/index.d.ts +7 -0
- package/dist/ext/skills/index.d.ts.map +1 -0
- package/dist/ext/skills/index.js +7 -0
- package/dist/ext/skills/index.js.map +1 -0
- package/dist/ext/skills/manager.d.ts +20 -0
- package/dist/ext/skills/manager.d.ts.map +1 -0
- package/dist/ext/skills/manager.js +27 -0
- package/dist/ext/skills/manager.js.map +1 -0
- package/dist/ext/skills/parser.d.ts +27 -0
- package/dist/ext/skills/parser.d.ts.map +1 -0
- package/dist/ext/skills/parser.js +87 -0
- package/dist/ext/skills/parser.js.map +1 -0
- package/dist/ext/skills/types.d.ts +34 -0
- package/dist/ext/skills/types.d.ts.map +1 -0
- package/dist/ext/skills/types.js +8 -0
- package/dist/ext/skills/types.js.map +1 -0
- package/dist/ext/subagents/configs.d.ts +35 -0
- package/dist/ext/subagents/configs.d.ts.map +1 -0
- package/dist/ext/subagents/configs.js +201 -0
- package/dist/ext/subagents/configs.js.map +1 -0
- package/dist/ext/subagents/index.d.ts +12 -0
- package/dist/ext/subagents/index.d.ts.map +1 -0
- package/dist/ext/subagents/index.js +12 -0
- package/dist/ext/subagents/index.js.map +1 -0
- package/dist/ext/subagents/manager.d.ts +66 -0
- package/dist/ext/subagents/manager.d.ts.map +1 -0
- package/dist/ext/subagents/manager.js +107 -0
- package/dist/ext/subagents/manager.js.map +1 -0
- package/dist/ext/subagents/parser.d.ts +17 -0
- package/dist/ext/subagents/parser.d.ts.map +1 -0
- package/dist/ext/subagents/parser.js +144 -0
- package/dist/ext/subagents/parser.js.map +1 -0
- package/dist/ext/subagents/result-cache.d.ts +78 -0
- package/dist/ext/subagents/result-cache.d.ts.map +1 -0
- package/dist/ext/subagents/result-cache.js +224 -0
- package/dist/ext/subagents/result-cache.js.map +1 -0
- package/dist/ext/subagents/subagent-session-manager.d.ts +68 -0
- package/dist/ext/subagents/subagent-session-manager.d.ts.map +1 -0
- package/dist/ext/subagents/subagent-session-manager.js +195 -0
- package/dist/ext/subagents/subagent-session-manager.js.map +1 -0
- package/dist/ext/subagents/subagent.d.ts +121 -0
- package/dist/ext/subagents/subagent.d.ts.map +1 -0
- package/dist/ext/subagents/subagent.js +425 -0
- package/dist/ext/subagents/subagent.js.map +1 -0
- package/dist/ext/subagents/types.d.ts +185 -0
- package/dist/ext/subagents/types.d.ts.map +1 -0
- package/dist/ext/subagents/types.js +19 -0
- package/dist/ext/subagents/types.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/docs/README.md +48 -6
- package/docs/command-environment-variables.md +150 -0
- package/docs/custom-agents.md +243 -0
- package/docs/custom-commands.md +329 -0
- package/docs/hooks.md +341 -0
- package/docs/mcp.md +496 -0
- package/docs/operating-modes.md +52 -11
- package/docs/permissions.md +31 -0
- package/docs/proposals/0003-task-subagents.md +144 -2
- package/docs/proposals/0004-plan-mode.md +58 -2
- package/docs/proposals/0008-checkpointing.md +154 -2
- package/docs/proposals/0009-hooks-system.md +141 -2
- package/docs/proposals/0010-mcp-integration.md +153 -2
- package/docs/proposals/0017-background-tasks.md +113 -2
- package/docs/proposals/0021-skills-system.md +124 -1
- package/docs/proposals/README.md +4 -4
- package/examples/custom-agents/README.md +126 -0
- package/examples/custom-agents/code-reviewer.json +10 -0
- package/examples/custom-agents/test-architect.md +63 -0
- package/examples/hooks-example.json +59 -0
- package/package.json +22 -3
- package/scripts/README.md +90 -0
- package/scripts/tests/test-commands-functional.ts +318 -0
- package/scripts/tests/test-commands-loading.ts +83 -0
- package/scripts/tests/test-component-loading.ts +281 -0
- package/scripts/tests/test-functional-all.ts +178 -0
- package/scripts/tests/test-hooks-functional.ts +342 -0
- package/scripts/tests/test-hooks-loading.ts +97 -0
- package/scripts/tests/test-mcp-loading.ts +118 -0
- package/scripts/tests/test-skills-functional.ts +256 -0
- package/scripts/tests/test-skills-loading.ts +75 -0
- package/scripts/tests/test-subagents-functional.ts +302 -0
- package/scripts/tests/test-subagents-loading.ts +80 -0
- package/src/base/config/levels.ts +237 -0
- package/src/base/config/providers-config.ts +87 -0
- package/src/base/config/types.ts +230 -0
- package/src/base/discovery/base-loader.ts +241 -0
- package/src/base/discovery/file-scanner.ts +221 -0
- package/src/base/discovery/index.ts +26 -0
- package/src/base/discovery/path-resolver.ts +130 -0
- package/src/base/discovery/types.ts +159 -0
- package/src/base/utils/config-validator.ts +191 -0
- package/src/base/utils/debug.ts +103 -0
- package/src/base/utils/format-utils.ts +71 -0
- package/src/base/utils/index.ts +12 -0
- package/src/base/utils/loading-reporter.ts +227 -0
- package/src/base/utils/logger.ts +99 -0
- package/src/base/utils/path-utils.ts +84 -0
- package/src/base/utils/stream-utils.ts +75 -0
- package/src/base/utils/validation.ts +22 -0
- package/src/cli/components/App.tsx +434 -22
- package/src/cli/components/CommandSuggestions.tsx +89 -13
- package/src/cli/components/DiffPreview.tsx +134 -0
- package/src/cli/components/Input.tsx +3 -1
- package/src/cli/components/Messages.tsx +148 -72
- package/src/cli/components/ModeIndicator.tsx +1 -1
- package/src/cli/components/ModelSelector.tsx +3 -3
- package/src/cli/components/PermissionPrompt.tsx +101 -70
- package/src/cli/components/PlanApproval.tsx +17 -7
- package/src/cli/components/ProviderManager.tsx +5 -5
- package/src/cli/components/QuestionPrompt.tsx +1 -1
- package/src/cli/components/TodoList.tsx +1 -1
- package/src/cli/components/index.ts +2 -1
- package/src/cli/components/markdown.ts +58 -6
- package/src/cli/components/theme.ts +63 -0
- package/src/cli/index.tsx +58 -17
- package/src/cli/planning/tools/enter-plan-mode.ts +111 -0
- package/src/cli/planning/tools/exit-plan-mode.ts +170 -0
- package/src/cli/planning/types.ts +154 -0
- package/src/cli/prompts/index.ts +400 -0
- package/src/cli/prompts/system/base.txt +191 -0
- package/src/cli/prompts/system/plan-mode.txt +96 -0
- package/src/core/agent/agent.ts +1050 -0
- package/src/core/memory/memory-manager.ts +845 -0
- package/src/core/permissions/validation.test.ts +619 -0
- package/src/core/providers/anthropic-vertex.ts +656 -0
- package/src/core/providers/google.ts +404 -0
- package/src/core/providers/index.ts +155 -0
- package/src/core/providers/registry.ts +203 -0
- package/src/core/providers/search/exa.ts +220 -0
- package/src/core/session/index.ts +10 -0
- package/src/core/session/manager.ts +692 -0
- package/src/core/session/tasks/index.ts +7 -0
- package/src/core/session/tasks/output-streamer.ts +245 -0
- package/src/core/session/tasks/task-manager.ts +619 -0
- package/src/core/session/tasks/types.ts +140 -0
- package/src/core/session/types.ts +80 -0
- package/src/core/tools/builtin/ask-user.ts +185 -0
- package/src/core/tools/builtin/bash.ts +125 -0
- package/src/core/tools/builtin/edit.ts +97 -0
- package/src/core/tools/builtin/glob.ts +43 -0
- package/src/core/tools/builtin/grep.ts +68 -0
- package/src/core/tools/builtin/read.ts +35 -0
- package/src/core/tools/builtin/taskoutput.ts +317 -0
- package/src/core/tools/builtin/todowrite.ts +104 -0
- package/src/core/tools/builtin/webfetch.ts +261 -0
- package/src/core/tools/builtin/websearch.ts +103 -0
- package/src/core/tools/builtin/write.ts +45 -0
- package/src/core/tools/factories/mcp-tool-factory.ts +109 -0
- package/src/core/tools/factories/skill-tool-factory.ts +181 -0
- package/src/core/tools/factories/task-tool-factory.ts +457 -0
- package/src/core/tools/index.ts +158 -0
- package/src/core/tools/registry.ts +179 -0
- package/src/core/tools/types.ts +306 -0
- package/src/ext/commands/discovery.ts +42 -0
- package/src/ext/commands/expander.ts +170 -0
- package/src/ext/commands/index.ts +12 -0
- package/src/ext/commands/manager.ts +210 -0
- package/src/ext/commands/parser.ts +136 -0
- package/src/ext/commands/types.ts +78 -0
- package/src/ext/hooks/executor.ts +284 -0
- package/src/ext/hooks/hooks-manager.ts +254 -0
- package/src/ext/hooks/index.ts +36 -0
- package/src/ext/hooks/matcher.ts +76 -0
- package/src/ext/hooks/types.ts +211 -0
- package/src/ext/hooks/utils.ts +230 -0
- package/src/ext/mcp/auth.ts +124 -0
- package/src/ext/mcp/client.ts +45 -0
- package/src/ext/mcp/config.ts +193 -0
- package/src/ext/mcp/connection.ts +111 -0
- package/src/ext/mcp/env-expand.ts +61 -0
- package/src/ext/mcp/index.ts +62 -0
- package/src/ext/mcp/manager.ts +287 -0
- package/src/ext/mcp/oauth-callback.ts +148 -0
- package/src/ext/mcp/oauth-provider.ts +211 -0
- package/src/ext/mcp/types.ts +146 -0
- package/src/ext/skills/index.ts +7 -0
- package/src/ext/skills/manager.test.ts +288 -0
- package/src/ext/skills/manager.ts +29 -0
- package/src/ext/skills/parser.test.ts +173 -0
- package/src/ext/skills/parser.ts +102 -0
- package/src/ext/skills/skill-tool.test.ts +172 -0
- package/src/ext/skills/types.ts +37 -0
- package/src/ext/subagents/configs.ts +214 -0
- package/src/ext/subagents/index.ts +12 -0
- package/src/ext/subagents/manager.ts +121 -0
- package/src/ext/subagents/parser.ts +160 -0
- package/src/ext/subagents/result-cache.ts +309 -0
- package/src/ext/subagents/subagent-session-manager.ts +250 -0
- package/src/ext/subagents/subagent.ts +536 -0
- package/src/ext/subagents/types.ts +241 -0
- package/src/index.ts +6 -6
- package/tests/config/hooks-config.test.ts +324 -0
- package/tests/hooks/executor.test.ts +132 -0
- package/tests/hooks/hooks-manager.test.ts +307 -0
- package/tests/hooks/matcher.test.ts +65 -0
- package/tests/hooks/utils.test.ts +224 -0
- package/tests/integration/hooks-config-loading.test.ts +363 -0
- package/tests/integration/hooks-integration.test.ts +249 -0
- package/RELEASE_NOTES_v0.4.0.md +0 -140
- package/dist/agent/agent.d.ts +0 -190
- package/dist/agent/agent.d.ts.map +0 -1
- package/dist/agent/agent.js +0 -668
- package/dist/agent/agent.js.map +0 -1
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/types.d.ts.map +0 -1
- package/dist/agent/types.js.map +0 -1
- package/dist/checkpointing/checkpoint-manager.d.ts.map +0 -1
- package/dist/checkpointing/checkpoint-manager.js.map +0 -1
- package/dist/checkpointing/index.d.ts.map +0 -1
- package/dist/checkpointing/index.js.map +0 -1
- package/dist/checkpointing/types.d.ts.map +0 -1
- package/dist/checkpointing/types.js.map +0 -1
- package/dist/cli/components/AllModelsSelector.d.ts +0 -11
- package/dist/cli/components/AllModelsSelector.d.ts.map +0 -1
- package/dist/cli/components/AllModelsSelector.js +0 -153
- package/dist/cli/components/AllModelsSelector.js.map +0 -1
- package/dist/cli/index-legacy.d.ts +0 -7
- package/dist/cli/index-legacy.d.ts.map +0 -1
- package/dist/cli/index-legacy.js +0 -431
- package/dist/cli/index-legacy.js.map +0 -1
- package/dist/cli/ink-cli.d.ts +0 -7
- package/dist/cli/ink-cli.d.ts.map +0 -1
- package/dist/cli/ink-cli.js +0 -105
- package/dist/cli/ink-cli.js.map +0 -1
- package/dist/cli/session-picker.d.ts +0 -16
- package/dist/cli/session-picker.d.ts.map +0 -1
- package/dist/cli/session-picker.js +0 -280
- package/dist/cli/session-picker.js.map +0 -1
- package/dist/cli/ui.d.ts +0 -61
- package/dist/cli/ui.d.ts.map +0 -1
- package/dist/cli/ui.js +0 -364
- package/dist/cli/ui.js.map +0 -1
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js.map +0 -1
- package/dist/config/levels.d.ts +0 -49
- package/dist/config/levels.d.ts.map +0 -1
- package/dist/config/levels.js +0 -222
- package/dist/config/levels.js.map +0 -1
- package/dist/config/loader.d.ts.map +0 -1
- package/dist/config/loader.js.map +0 -1
- package/dist/config/manager.d.ts.map +0 -1
- package/dist/config/manager.js.map +0 -1
- package/dist/config/manager.test.d.ts +0 -5
- package/dist/config/manager.test.d.ts.map +0 -1
- package/dist/config/manager.test.js +0 -192
- package/dist/config/manager.test.js.map +0 -1
- package/dist/config/merger.d.ts.map +0 -1
- package/dist/config/merger.js.map +0 -1
- package/dist/config/providers-config.d.ts.map +0 -1
- package/dist/config/providers-config.js +0 -76
- package/dist/config/providers-config.js.map +0 -1
- package/dist/config/test-utils.d.ts.map +0 -1
- package/dist/config/test-utils.js.map +0 -1
- package/dist/config/types.d.ts +0 -146
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js +0 -57
- package/dist/config/types.js.map +0 -1
- package/dist/input/history-manager.d.ts.map +0 -1
- package/dist/input/history-manager.js.map +0 -1
- package/dist/input/index.d.ts.map +0 -1
- package/dist/input/index.js.map +0 -1
- package/dist/memory/import-resolver.d.ts.map +0 -1
- package/dist/memory/import-resolver.js.map +0 -1
- package/dist/memory/index.d.ts.map +0 -1
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/init-prompt.d.ts.map +0 -1
- package/dist/memory/init-prompt.js.map +0 -1
- package/dist/memory/init.d.ts +0 -20
- package/dist/memory/init.d.ts.map +0 -1
- package/dist/memory/init.js +0 -332
- package/dist/memory/init.js.map +0 -1
- package/dist/memory/manager.d.ts +0 -85
- package/dist/memory/manager.d.ts.map +0 -1
- package/dist/memory/manager.js +0 -234
- package/dist/memory/manager.js.map +0 -1
- package/dist/memory/memory-manager.d.ts.map +0 -1
- package/dist/memory/memory-manager.js +0 -716
- package/dist/memory/memory-manager.js.map +0 -1
- package/dist/memory/rules-parser.d.ts.map +0 -1
- package/dist/memory/rules-parser.js.map +0 -1
- package/dist/memory/test-utils.d.ts.map +0 -1
- package/dist/memory/test-utils.js.map +0 -1
- package/dist/memory/types.d.ts.map +0 -1
- package/dist/memory/types.js.map +0 -1
- package/dist/migration/migrate.d.ts +0 -24
- package/dist/migration/migrate.d.ts.map +0 -1
- package/dist/migration/migrate.js +0 -164
- package/dist/migration/migrate.js.map +0 -1
- package/dist/permissions/audit.d.ts.map +0 -1
- package/dist/permissions/audit.js.map +0 -1
- package/dist/permissions/index.d.ts.map +0 -1
- package/dist/permissions/index.js.map +0 -1
- package/dist/permissions/manager.d.ts.map +0 -1
- package/dist/permissions/manager.js.map +0 -1
- package/dist/permissions/manager.test.d.ts +0 -5
- package/dist/permissions/manager.test.d.ts.map +0 -1
- package/dist/permissions/manager.test.js +0 -213
- package/dist/permissions/manager.test.js.map +0 -1
- package/dist/permissions/persistence.d.ts.map +0 -1
- package/dist/permissions/persistence.js.map +0 -1
- package/dist/permissions/persistence.test.d.ts +0 -5
- package/dist/permissions/persistence.test.d.ts.map +0 -1
- package/dist/permissions/persistence.test.js +0 -171
- package/dist/permissions/persistence.test.js.map +0 -1
- package/dist/permissions/prompt-matcher.d.ts.map +0 -1
- package/dist/permissions/prompt-matcher.js.map +0 -1
- package/dist/permissions/prompt-matcher.test.d.ts +0 -5
- package/dist/permissions/prompt-matcher.test.d.ts.map +0 -1
- package/dist/permissions/prompt-matcher.test.js +0 -107
- package/dist/permissions/prompt-matcher.test.js.map +0 -1
- package/dist/permissions/types.d.ts.map +0 -1
- package/dist/permissions/types.js.map +0 -1
- package/dist/planning/index.d.ts.map +0 -1
- package/dist/planning/index.js.map +0 -1
- package/dist/planning/plan-file.d.ts.map +0 -1
- package/dist/planning/plan-file.js.map +0 -1
- package/dist/planning/state.d.ts.map +0 -1
- package/dist/planning/state.js.map +0 -1
- package/dist/planning/tools/enter-plan-mode.d.ts +0 -25
- package/dist/planning/tools/enter-plan-mode.d.ts.map +0 -1
- package/dist/planning/tools/enter-plan-mode.js.map +0 -1
- package/dist/planning/tools/exit-plan-mode.d.ts +0 -24
- package/dist/planning/tools/exit-plan-mode.d.ts.map +0 -1
- package/dist/planning/tools/exit-plan-mode.js.map +0 -1
- package/dist/planning/types.d.ts +0 -100
- package/dist/planning/types.d.ts.map +0 -1
- package/dist/planning/types.js +0 -28
- package/dist/planning/types.js.map +0 -1
- package/dist/pricing/calculator.d.ts.map +0 -1
- package/dist/pricing/calculator.js.map +0 -1
- package/dist/pricing/index.d.ts.map +0 -1
- package/dist/pricing/index.js.map +0 -1
- package/dist/pricing/models.d.ts.map +0 -1
- package/dist/pricing/models.js.map +0 -1
- package/dist/pricing/types.d.ts.map +0 -1
- package/dist/pricing/types.js.map +0 -1
- package/dist/prompts/index.d.ts +0 -93
- package/dist/prompts/index.d.ts.map +0 -1
- package/dist/prompts/index.js +0 -244
- package/dist/prompts/index.js.map +0 -1
- package/dist/providers/anthropic.d.ts.map +0 -1
- package/dist/providers/anthropic.js.map +0 -1
- package/dist/providers/gemini.d.ts +0 -22
- package/dist/providers/gemini.d.ts.map +0 -1
- package/dist/providers/gemini.js +0 -297
- package/dist/providers/gemini.js.map +0 -1
- package/dist/providers/google.d.ts.map +0 -1
- package/dist/providers/google.js +0 -297
- package/dist/providers/google.js.map +0 -1
- package/dist/providers/index.d.ts +0 -46
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -108
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/openai.d.ts.map +0 -1
- package/dist/providers/openai.js.map +0 -1
- package/dist/providers/registry.d.ts.map +0 -1
- package/dist/providers/registry.js +0 -142
- package/dist/providers/registry.js.map +0 -1
- package/dist/providers/search/brave.d.ts.map +0 -1
- package/dist/providers/search/brave.js.map +0 -1
- package/dist/providers/search/exa.d.ts.map +0 -1
- package/dist/providers/search/exa.js +0 -158
- package/dist/providers/search/exa.js.map +0 -1
- package/dist/providers/search/index.d.ts.map +0 -1
- package/dist/providers/search/index.js.map +0 -1
- package/dist/providers/search/serper.d.ts.map +0 -1
- package/dist/providers/search/serper.js.map +0 -1
- package/dist/providers/search/types.d.ts.map +0 -1
- package/dist/providers/search/types.js.map +0 -1
- package/dist/providers/store.d.ts.map +0 -1
- package/dist/providers/store.js.map +0 -1
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js.map +0 -1
- package/dist/providers/vertex-ai.d.ts.map +0 -1
- package/dist/providers/vertex-ai.js +0 -447
- package/dist/providers/vertex-ai.js.map +0 -1
- package/dist/session/compression/engine.d.ts.map +0 -1
- package/dist/session/compression/engine.js.map +0 -1
- package/dist/session/compression/index.d.ts.map +0 -1
- package/dist/session/compression/index.js.map +0 -1
- package/dist/session/compression/types.d.ts.map +0 -1
- package/dist/session/compression/types.js.map +0 -1
- package/dist/session/index.d.ts +0 -6
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/index.js +0 -6
- package/dist/session/index.js.map +0 -1
- package/dist/session/manager.d.ts +0 -166
- package/dist/session/manager.d.ts.map +0 -1
- package/dist/session/manager.js +0 -555
- package/dist/session/manager.js.map +0 -1
- package/dist/session/types.d.ts +0 -55
- package/dist/session/types.d.ts.map +0 -1
- package/dist/session/types.js.map +0 -1
- package/dist/tools/builtin/ask-user.d.ts.map +0 -1
- package/dist/tools/builtin/ask-user.js +0 -148
- package/dist/tools/builtin/ask-user.js.map +0 -1
- package/dist/tools/builtin/bash.d.ts.map +0 -1
- package/dist/tools/builtin/bash.js +0 -81
- package/dist/tools/builtin/bash.js.map +0 -1
- package/dist/tools/builtin/edit.d.ts.map +0 -1
- package/dist/tools/builtin/edit.js +0 -33
- package/dist/tools/builtin/edit.js.map +0 -1
- package/dist/tools/builtin/glob.d.ts.map +0 -1
- package/dist/tools/builtin/glob.js +0 -37
- package/dist/tools/builtin/glob.js.map +0 -1
- package/dist/tools/builtin/grep.d.ts.map +0 -1
- package/dist/tools/builtin/grep.js +0 -60
- package/dist/tools/builtin/grep.js.map +0 -1
- package/dist/tools/builtin/read.d.ts.map +0 -1
- package/dist/tools/builtin/read.js +0 -30
- package/dist/tools/builtin/read.js.map +0 -1
- package/dist/tools/builtin/todowrite.d.ts.map +0 -1
- package/dist/tools/builtin/todowrite.js +0 -88
- package/dist/tools/builtin/todowrite.js.map +0 -1
- package/dist/tools/builtin/webfetch.d.ts.map +0 -1
- package/dist/tools/builtin/webfetch.js +0 -228
- package/dist/tools/builtin/webfetch.js.map +0 -1
- package/dist/tools/builtin/websearch.d.ts.map +0 -1
- package/dist/tools/builtin/websearch.js +0 -87
- package/dist/tools/builtin/websearch.js.map +0 -1
- package/dist/tools/builtin/write.d.ts +0 -7
- package/dist/tools/builtin/write.d.ts.map +0 -1
- package/dist/tools/builtin/write.js +0 -25
- package/dist/tools/builtin/write.js.map +0 -1
- package/dist/tools/index.d.ts +0 -74
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -69
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -35
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -148
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/types.d.ts +0 -120
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js +0 -142
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/utils/ssrf.d.ts.map +0 -1
- package/dist/tools/utils/ssrf.js.map +0 -1
- package/docs/config-system-comparison.md +0 -707
- package/docs/cost-tracking-comparison.md +0 -904
- package/examples/test-ask-user.ts +0 -167
- package/examples/test-checkpointing.ts +0 -121
- package/examples/test-cost-tracking.ts +0 -77
- package/examples/test-interrupt-cleanup.ts +0 -94
- package/src/agent/agent.ts +0 -808
- package/src/config/levels.ts +0 -285
- package/src/config/providers-config.ts +0 -87
- package/src/config/types.ts +0 -237
- package/src/memory/memory-manager.ts +0 -845
- package/src/planning/tools/enter-plan-mode.ts +0 -111
- package/src/planning/tools/exit-plan-mode.ts +0 -170
- package/src/planning/types.ts +0 -150
- package/src/prompts/index.ts +0 -310
- package/src/prompts/system/base.txt +0 -166
- package/src/providers/google.ts +0 -382
- package/src/providers/index.ts +0 -155
- package/src/providers/registry.ts +0 -203
- package/src/providers/search/exa.ts +0 -217
- package/src/providers/vertex-ai.ts +0 -641
- package/src/session/index.ts +0 -6
- package/src/session/manager.ts +0 -686
- package/src/session/types.ts +0 -70
- package/src/tools/builtin/ask-user.ts +0 -185
- package/src/tools/builtin/bash.ts +0 -93
- package/src/tools/builtin/edit.ts +0 -38
- package/src/tools/builtin/glob.ts +0 -43
- package/src/tools/builtin/grep.ts +0 -68
- package/src/tools/builtin/read.ts +0 -35
- package/src/tools/builtin/todowrite.ts +0 -102
- package/src/tools/builtin/webfetch.ts +0 -261
- package/src/tools/builtin/websearch.ts +0 -103
- package/src/tools/builtin/write.ts +0 -28
- package/src/tools/index.ts +0 -85
- package/src/tools/registry.ts +0 -176
- package/src/tools/types.ts +0 -222
- /package/dist/{config → base/config}/index.d.ts +0 -0
- /package/dist/{config → base/config}/index.js +0 -0
- /package/dist/{config → base/config}/loader.d.ts +0 -0
- /package/dist/{config → base/config}/loader.js +0 -0
- /package/dist/{config → base/config}/manager.d.ts +0 -0
- /package/dist/{config → base/config}/manager.js +0 -0
- /package/dist/{config → base/config}/merger.d.ts +0 -0
- /package/dist/{config → base/config}/merger.js +0 -0
- /package/dist/{config → base/config}/providers-config.d.ts +0 -0
- /package/dist/{config → base/config}/test-utils.d.ts +0 -0
- /package/dist/{config → base/config}/test-utils.js +0 -0
- /package/dist/{planning → cli/planning}/index.d.ts +0 -0
- /package/dist/{planning → cli/planning}/index.js +0 -0
- /package/dist/{planning → cli/planning}/plan-file.d.ts +0 -0
- /package/dist/{planning → cli/planning}/plan-file.js +0 -0
- /package/dist/{planning → cli/planning}/state.d.ts +0 -0
- /package/dist/{planning → cli/planning}/state.js +0 -0
- /package/dist/{planning → cli/planning}/tools/enter-plan-mode.js +0 -0
- /package/dist/{planning → cli/planning}/tools/exit-plan-mode.js +0 -0
- /package/dist/{agent → core/agent}/index.d.ts +0 -0
- /package/dist/{agent → core/agent}/index.js +0 -0
- /package/dist/{agent → core/agent}/types.d.ts +0 -0
- /package/dist/{agent → core/agent}/types.js +0 -0
- /package/dist/{memory → core/memory}/import-resolver.d.ts +0 -0
- /package/dist/{memory → core/memory}/import-resolver.js +0 -0
- /package/dist/{memory → core/memory}/index.d.ts +0 -0
- /package/dist/{memory → core/memory}/index.js +0 -0
- /package/dist/{memory → core/memory}/init-prompt.d.ts +0 -0
- /package/dist/{memory → core/memory}/init-prompt.js +0 -0
- /package/dist/{memory → core/memory}/memory-manager.d.ts +0 -0
- /package/dist/{memory → core/memory}/rules-parser.d.ts +0 -0
- /package/dist/{memory → core/memory}/rules-parser.js +0 -0
- /package/dist/{memory → core/memory}/test-utils.d.ts +0 -0
- /package/dist/{memory → core/memory}/test-utils.js +0 -0
- /package/dist/{memory → core/memory}/types.d.ts +0 -0
- /package/dist/{memory → core/memory}/types.js +0 -0
- /package/dist/{permissions → core/permissions}/audit.d.ts +0 -0
- /package/dist/{permissions → core/permissions}/audit.js +0 -0
- /package/dist/{permissions → core/permissions}/index.d.ts +0 -0
- /package/dist/{permissions → core/permissions}/index.js +0 -0
- /package/dist/{permissions → core/permissions}/manager.d.ts +0 -0
- /package/dist/{permissions → core/permissions}/manager.js +0 -0
- /package/dist/{permissions → core/permissions}/persistence.d.ts +0 -0
- /package/dist/{permissions → core/permissions}/persistence.js +0 -0
- /package/dist/{permissions → core/permissions}/prompt-matcher.d.ts +0 -0
- /package/dist/{permissions → core/permissions}/prompt-matcher.js +0 -0
- /package/dist/{permissions → core/permissions}/types.d.ts +0 -0
- /package/dist/{permissions → core/permissions}/types.js +0 -0
- /package/dist/{pricing → core/pricing}/calculator.d.ts +0 -0
- /package/dist/{pricing → core/pricing}/calculator.js +0 -0
- /package/dist/{pricing → core/pricing}/index.d.ts +0 -0
- /package/dist/{pricing → core/pricing}/index.js +0 -0
- /package/dist/{pricing → core/pricing}/models.d.ts +0 -0
- /package/dist/{pricing → core/pricing}/models.js +0 -0
- /package/dist/{pricing → core/pricing}/types.d.ts +0 -0
- /package/dist/{pricing → core/pricing}/types.js +0 -0
- /package/dist/{providers → core/providers}/anthropic.d.ts +0 -0
- /package/dist/{providers → core/providers}/anthropic.js +0 -0
- /package/dist/{providers → core/providers}/google.d.ts +0 -0
- /package/dist/{providers → core/providers}/openai.d.ts +0 -0
- /package/dist/{providers → core/providers}/openai.js +0 -0
- /package/dist/{providers → core/providers}/registry.d.ts +0 -0
- /package/dist/{providers → core/providers}/search/brave.d.ts +0 -0
- /package/dist/{providers → core/providers}/search/brave.js +0 -0
- /package/dist/{providers → core/providers}/search/exa.d.ts +0 -0
- /package/dist/{providers → core/providers}/search/index.d.ts +0 -0
- /package/dist/{providers → core/providers}/search/index.js +0 -0
- /package/dist/{providers → core/providers}/search/serper.d.ts +0 -0
- /package/dist/{providers → core/providers}/search/serper.js +0 -0
- /package/dist/{providers → core/providers}/search/types.d.ts +0 -0
- /package/dist/{providers → core/providers}/search/types.js +0 -0
- /package/dist/{providers → core/providers}/store.d.ts +0 -0
- /package/dist/{providers → core/providers}/store.js +0 -0
- /package/dist/{providers → core/providers}/types.d.ts +0 -0
- /package/dist/{providers → core/providers}/types.js +0 -0
- /package/dist/{providers → core/providers}/vertex-ai.d.ts +0 -0
- /package/dist/{checkpointing → core/session/checkpointing}/checkpoint-manager.d.ts +0 -0
- /package/dist/{checkpointing → core/session/checkpointing}/checkpoint-manager.js +0 -0
- /package/dist/{checkpointing → core/session/checkpointing}/index.d.ts +0 -0
- /package/dist/{checkpointing → core/session/checkpointing}/index.js +0 -0
- /package/dist/{checkpointing → core/session/checkpointing}/types.d.ts +0 -0
- /package/dist/{checkpointing → core/session/checkpointing}/types.js +0 -0
- /package/dist/{session → core/session}/compression/engine.d.ts +0 -0
- /package/dist/{session → core/session}/compression/engine.js +0 -0
- /package/dist/{session → core/session}/compression/index.d.ts +0 -0
- /package/dist/{session → core/session}/compression/index.js +0 -0
- /package/dist/{session → core/session}/compression/types.d.ts +0 -0
- /package/dist/{session → core/session}/compression/types.js +0 -0
- /package/dist/{input → core/session/input}/history-manager.d.ts +0 -0
- /package/dist/{input → core/session/input}/history-manager.js +0 -0
- /package/dist/{input → core/session/input}/index.d.ts +0 -0
- /package/dist/{input → core/session/input}/index.js +0 -0
- /package/dist/{session → core/session}/types.js +0 -0
- /package/dist/{tools → core/tools}/builtin/ask-user.d.ts +0 -0
- /package/dist/{tools → core/tools}/builtin/bash.d.ts +0 -0
- /package/dist/{tools → core/tools}/builtin/edit.d.ts +0 -0
- /package/dist/{tools → core/tools}/builtin/glob.d.ts +0 -0
- /package/dist/{tools → core/tools}/builtin/grep.d.ts +0 -0
- /package/dist/{tools → core/tools}/builtin/read.d.ts +0 -0
- /package/dist/{tools → core/tools}/builtin/todowrite.d.ts +0 -0
- /package/dist/{tools → core/tools}/builtin/webfetch.d.ts +0 -0
- /package/dist/{tools → core/tools}/builtin/websearch.d.ts +0 -0
- /package/dist/{tools → core/tools}/utils/ssrf.d.ts +0 -0
- /package/dist/{tools → core/tools}/utils/ssrf.js +0 -0
- /package/src/{config → base/config}/index.ts +0 -0
- /package/src/{config → base/config}/levels.test.ts +0 -0
- /package/src/{config → base/config}/loader.test.ts +0 -0
- /package/src/{config → base/config}/loader.ts +0 -0
- /package/src/{config → base/config}/manager.test.ts +0 -0
- /package/src/{config → base/config}/manager.ts +0 -0
- /package/src/{config → base/config}/merger.test.ts +0 -0
- /package/src/{config → base/config}/merger.ts +0 -0
- /package/src/{config → base/config}/test-utils.ts +0 -0
- /package/src/{planning → cli/planning}/index.ts +0 -0
- /package/src/{planning → cli/planning}/plan-file.ts +0 -0
- /package/src/{planning → cli/planning}/state.ts +0 -0
- /package/src/{prompts → cli/prompts}/index.test.ts +0 -0
- /package/src/{prompts → cli/prompts}/system/anthropic.txt +0 -0
- /package/src/{prompts → cli/prompts}/system/gemini.txt +0 -0
- /package/src/{prompts → cli/prompts}/system/generic.txt +0 -0
- /package/src/{prompts → cli/prompts}/system/openai.txt +0 -0
- /package/src/{prompts → cli/prompts}/tools/ask-user.txt +0 -0
- /package/src/{prompts → cli/prompts}/tools/bash.txt +0 -0
- /package/src/{prompts → cli/prompts}/tools/edit.txt +0 -0
- /package/src/{prompts → cli/prompts}/tools/glob.txt +0 -0
- /package/src/{prompts → cli/prompts}/tools/grep.txt +0 -0
- /package/src/{prompts → cli/prompts}/tools/read.txt +0 -0
- /package/src/{prompts → cli/prompts}/tools/todowrite.txt +0 -0
- /package/src/{prompts → cli/prompts}/tools/webfetch.txt +0 -0
- /package/src/{prompts → cli/prompts}/tools/websearch.txt +0 -0
- /package/src/{prompts → cli/prompts}/tools/write.txt +0 -0
- /package/src/{agent → core/agent}/index.ts +0 -0
- /package/src/{agent → core/agent}/types.ts +0 -0
- /package/src/{memory → core/memory}/import-resolver.test.ts +0 -0
- /package/src/{memory → core/memory}/import-resolver.ts +0 -0
- /package/src/{memory → core/memory}/index.ts +0 -0
- /package/src/{memory → core/memory}/init-prompt.ts +0 -0
- /package/src/{memory → core/memory}/memory-manager.test.ts +0 -0
- /package/src/{memory → core/memory}/rules-parser.test.ts +0 -0
- /package/src/{memory → core/memory}/rules-parser.ts +0 -0
- /package/src/{memory → core/memory}/test-utils.ts +0 -0
- /package/src/{memory → core/memory}/types.ts +0 -0
- /package/src/{permissions → core/permissions}/audit.ts +0 -0
- /package/src/{permissions → core/permissions}/index.ts +0 -0
- /package/src/{permissions → core/permissions}/manager.test.ts +0 -0
- /package/src/{permissions → core/permissions}/manager.ts +0 -0
- /package/src/{permissions → core/permissions}/persistence.test.ts +0 -0
- /package/src/{permissions → core/permissions}/persistence.ts +0 -0
- /package/src/{permissions → core/permissions}/prompt-matcher.test.ts +0 -0
- /package/src/{permissions → core/permissions}/prompt-matcher.ts +0 -0
- /package/src/{permissions → core/permissions}/types.ts +0 -0
- /package/src/{pricing → core/pricing}/calculator.ts +0 -0
- /package/src/{pricing → core/pricing}/index.ts +0 -0
- /package/src/{pricing → core/pricing}/models.ts +0 -0
- /package/src/{pricing → core/pricing}/types.ts +0 -0
- /package/src/{providers → core/providers}/anthropic.ts +0 -0
- /package/src/{providers → core/providers}/openai.ts +0 -0
- /package/src/{providers → core/providers}/search/brave.ts +0 -0
- /package/src/{providers → core/providers}/search/index.ts +0 -0
- /package/src/{providers → core/providers}/search/serper.ts +0 -0
- /package/src/{providers → core/providers}/search/types.ts +0 -0
- /package/src/{providers → core/providers}/store.ts +0 -0
- /package/src/{providers → core/providers}/types.ts +0 -0
- /package/src/{checkpointing → core/session/checkpointing}/checkpoint-manager.ts +0 -0
- /package/src/{checkpointing → core/session/checkpointing}/index.ts +0 -0
- /package/src/{checkpointing → core/session/checkpointing}/types.ts +0 -0
- /package/src/{session → core/session}/compression/engine.ts +0 -0
- /package/src/{session → core/session}/compression/index.ts +0 -0
- /package/src/{session → core/session}/compression/types.ts +0 -0
- /package/src/{input → core/session/input}/history-manager.ts +0 -0
- /package/src/{input → core/session/input}/index.ts +0 -0
- /package/src/{tools → core/tools}/utils/ssrf.ts +0 -0
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Loader - Load prompts from .txt files
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for loading system prompts and tool descriptions
|
|
5
|
+
* from separate .txt files, enabling easier maintenance and prompt engineering.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { readFileSync, existsSync } from 'fs';
|
|
9
|
+
import { join, dirname } from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import { homedir } from 'os';
|
|
12
|
+
import * as os from 'os';
|
|
13
|
+
|
|
14
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
|
|
16
|
+
// Path to providers.json config
|
|
17
|
+
const PROVIDERS_CONFIG_PATH = join(homedir(), '.gen', 'providers.json');
|
|
18
|
+
|
|
19
|
+
// Resolve prompts directory - check both src and dist locations
|
|
20
|
+
function getPromptsDir(): string {
|
|
21
|
+
// If running from dist, look for prompts in src
|
|
22
|
+
if (__dirname.includes('/dist/')) {
|
|
23
|
+
const srcPath = __dirname.replace('/dist/', '/src/');
|
|
24
|
+
if (existsSync(srcPath)) {
|
|
25
|
+
return srcPath;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return __dirname;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const promptsDir = getPromptsDir();
|
|
32
|
+
|
|
33
|
+
export type ProviderType = 'anthropic' | 'openai' | 'gemini' | 'generic';
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Providers config structure from ~/.gen/providers.json
|
|
37
|
+
*/
|
|
38
|
+
interface ProvidersConfig {
|
|
39
|
+
connections: Record<string, unknown>;
|
|
40
|
+
models: Record<string, { list: Array<{ id: string }> }>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Load providers config from ~/.gen/providers.json
|
|
45
|
+
*/
|
|
46
|
+
function loadProvidersConfig(): ProvidersConfig | null {
|
|
47
|
+
try {
|
|
48
|
+
if (existsSync(PROVIDERS_CONFIG_PATH)) {
|
|
49
|
+
const data = readFileSync(PROVIDERS_CONFIG_PATH, 'utf-8');
|
|
50
|
+
return JSON.parse(data);
|
|
51
|
+
}
|
|
52
|
+
} catch {
|
|
53
|
+
// Ignore parse errors
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Look up which provider owns a given model ID
|
|
60
|
+
* Searches through ~/.gen/providers.json to find the provider
|
|
61
|
+
*
|
|
62
|
+
* @param model - The model ID (e.g., "claude-sonnet-4-5@20250929")
|
|
63
|
+
* @returns The provider name (e.g., "anthropic") or null if not found
|
|
64
|
+
*/
|
|
65
|
+
export function getProviderForModel(model: string): string | null {
|
|
66
|
+
const config = loadProvidersConfig();
|
|
67
|
+
if (!config?.models) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
for (const [provider, cache] of Object.entries(config.models)) {
|
|
72
|
+
if (cache.list?.some((m) => m.id === model)) {
|
|
73
|
+
return provider;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Map provider names to prompt types
|
|
82
|
+
* Falls back to 'generic' for unknown providers
|
|
83
|
+
* Handles both "provider" and "provider:authMethod" formats
|
|
84
|
+
*/
|
|
85
|
+
export function mapProviderToPromptType(provider: string): ProviderType {
|
|
86
|
+
// Extract provider prefix (e.g., "google:api_key" → "google")
|
|
87
|
+
const providerPrefix = provider.split(':')[0];
|
|
88
|
+
|
|
89
|
+
switch (providerPrefix) {
|
|
90
|
+
case 'anthropic':
|
|
91
|
+
return 'anthropic';
|
|
92
|
+
case 'openai':
|
|
93
|
+
return 'openai';
|
|
94
|
+
case 'google':
|
|
95
|
+
return 'gemini'; // Google provider uses Gemini models, so use gemini prompt
|
|
96
|
+
default:
|
|
97
|
+
return 'generic';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Get prompt type for a model
|
|
103
|
+
* Flow: model → provider (from providers.json) → prompt type
|
|
104
|
+
*
|
|
105
|
+
* @param model - The model ID
|
|
106
|
+
* @param fallbackProvider - Provider to use if model lookup fails
|
|
107
|
+
* @returns The prompt type to use
|
|
108
|
+
*/
|
|
109
|
+
export function getPromptTypeForModel(model: string, fallbackProvider?: string): ProviderType {
|
|
110
|
+
// First, try to look up the provider for this model
|
|
111
|
+
const provider = getProviderForModel(model);
|
|
112
|
+
|
|
113
|
+
if (provider) {
|
|
114
|
+
return mapProviderToPromptType(provider);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Fall back to the provided provider if model lookup fails
|
|
118
|
+
if (fallbackProvider) {
|
|
119
|
+
return mapProviderToPromptType(fallbackProvider);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Default to generic
|
|
123
|
+
return 'generic';
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Load a prompt file from a category subdirectory
|
|
128
|
+
*/
|
|
129
|
+
export function loadPrompt(category: string, name: string): string {
|
|
130
|
+
const path = join(promptsDir, category, `${name}.txt`);
|
|
131
|
+
return readFileSync(path, 'utf-8');
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Load the complete system prompt for a specific provider
|
|
136
|
+
*/
|
|
137
|
+
export function loadSystemPrompt(provider: ProviderType): string {
|
|
138
|
+
const base = loadPrompt('system', 'base');
|
|
139
|
+
const providerSpecific = loadPrompt('system', provider);
|
|
140
|
+
return `${base}\n\n${providerSpecific}`;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Load a tool description from the tools directory
|
|
145
|
+
*/
|
|
146
|
+
export function loadToolDescription(toolName: string): string {
|
|
147
|
+
try {
|
|
148
|
+
return loadPrompt('tools', toolName.toLowerCase());
|
|
149
|
+
} catch {
|
|
150
|
+
// Fallback if file doesn't exist (for tools without description files)
|
|
151
|
+
return `Tool: ${toolName}`;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Environment info to inject into system prompts
|
|
157
|
+
*/
|
|
158
|
+
export interface EnvironmentInfo {
|
|
159
|
+
cwd: string;
|
|
160
|
+
platform: string;
|
|
161
|
+
osVersion: string;
|
|
162
|
+
date: string;
|
|
163
|
+
isGitRepo: boolean;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Get current environment info
|
|
168
|
+
*/
|
|
169
|
+
export function getEnvironmentInfo(cwd: string, isGitRepo: boolean = false): EnvironmentInfo {
|
|
170
|
+
return {
|
|
171
|
+
cwd,
|
|
172
|
+
platform: process.platform,
|
|
173
|
+
osVersion: `${os.type()} ${os.release()}`,
|
|
174
|
+
date: new Date().toISOString().split('T')[0],
|
|
175
|
+
isGitRepo,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Format environment info for injection into system prompt
|
|
181
|
+
*/
|
|
182
|
+
export function formatEnvironmentInfo(env: EnvironmentInfo): string {
|
|
183
|
+
return `<env>
|
|
184
|
+
Working directory: ${env.cwd}
|
|
185
|
+
Is directory a git repo: ${env.isGitRepo ? 'Yes' : 'No'}
|
|
186
|
+
Platform: ${env.platform}
|
|
187
|
+
OS Version: ${env.osVersion}
|
|
188
|
+
Today's date: ${env.date}
|
|
189
|
+
</env>`;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Build the complete system prompt with environment info
|
|
194
|
+
*/
|
|
195
|
+
export function buildSystemPrompt(
|
|
196
|
+
provider: ProviderType,
|
|
197
|
+
cwd: string,
|
|
198
|
+
isGitRepo: boolean = false
|
|
199
|
+
): string {
|
|
200
|
+
const prompt = loadSystemPrompt(provider);
|
|
201
|
+
const envInfo = formatEnvironmentInfo(getEnvironmentInfo(cwd, isGitRepo));
|
|
202
|
+
return prompt.replace('{{ENVIRONMENT}}', envInfo);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Format memory context for injection into system prompt
|
|
207
|
+
* Uses <claudeMd> tag for optimal compatibility with Claude models
|
|
208
|
+
*/
|
|
209
|
+
export function formatMemoryContext(memoryContext: string): string {
|
|
210
|
+
if (!memoryContext) {
|
|
211
|
+
return '';
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return `
|
|
215
|
+
<claudeMd>
|
|
216
|
+
Codebase and user instructions are shown below. Be sure to adhere to these instructions. IMPORTANT: These instructions OVERRIDE any default behavior and you MUST follow them exactly as written.
|
|
217
|
+
|
|
218
|
+
${memoryContext}
|
|
219
|
+
|
|
220
|
+
IMPORTANT: this context may or may not be relevant to your tasks. You should not respond to this context unless it is highly relevant to your task.
|
|
221
|
+
</claudeMd>`;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Build the complete system prompt with environment info and memory context
|
|
226
|
+
*/
|
|
227
|
+
export function buildSystemPromptWithMemory(
|
|
228
|
+
provider: ProviderType,
|
|
229
|
+
cwd: string,
|
|
230
|
+
isGitRepo: boolean = false,
|
|
231
|
+
memoryContext?: string
|
|
232
|
+
): string {
|
|
233
|
+
let prompt = buildSystemPrompt(provider, cwd, isGitRepo);
|
|
234
|
+
|
|
235
|
+
if (memoryContext) {
|
|
236
|
+
prompt += formatMemoryContext(memoryContext);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return prompt;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Build system prompt for a model
|
|
244
|
+
* Flow: model → provider (from providers.json) → prompt
|
|
245
|
+
*
|
|
246
|
+
* This is the recommended way to build system prompts as it automatically
|
|
247
|
+
* looks up the provider for the given model from ~/.gen/providers.json
|
|
248
|
+
*
|
|
249
|
+
* @param model - The model ID (e.g., "claude-sonnet-4-5@20250929")
|
|
250
|
+
* @param cwd - Current working directory
|
|
251
|
+
* @param isGitRepo - Whether the cwd is a git repository
|
|
252
|
+
* @param memoryContext - Optional memory context to include
|
|
253
|
+
* @param fallbackProvider - Provider to use if model lookup fails
|
|
254
|
+
*/
|
|
255
|
+
export function buildSystemPromptForModel(
|
|
256
|
+
model: string,
|
|
257
|
+
cwd: string,
|
|
258
|
+
isGitRepo: boolean = false,
|
|
259
|
+
memoryContext?: string,
|
|
260
|
+
fallbackProvider?: string
|
|
261
|
+
): string {
|
|
262
|
+
const promptType = getPromptTypeForModel(model, fallbackProvider);
|
|
263
|
+
return buildSystemPromptWithMemory(promptType, cwd, isGitRepo, memoryContext);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Load plan mode prompt if it exists
|
|
268
|
+
*/
|
|
269
|
+
export function loadPlanModePrompt(): string {
|
|
270
|
+
try {
|
|
271
|
+
return loadPrompt('system', 'plan-mode');
|
|
272
|
+
} catch {
|
|
273
|
+
// Plan mode prompt not found - return empty string
|
|
274
|
+
return '';
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Build system prompt with plan mode context
|
|
280
|
+
* Appends plan mode instructions when plan mode is active
|
|
281
|
+
*
|
|
282
|
+
* @param model - The model ID
|
|
283
|
+
* @param cwd - Current working directory
|
|
284
|
+
* @param isGitRepo - Whether the cwd is a git repository
|
|
285
|
+
* @param memoryContext - Optional memory context to include
|
|
286
|
+
* @param fallbackProvider - Provider to use if model lookup fails
|
|
287
|
+
* @param planModeActive - Whether plan mode is currently active
|
|
288
|
+
* @param planFilePath - Path to the plan file (if in plan mode)
|
|
289
|
+
*/
|
|
290
|
+
export function buildSystemPromptWithPlanMode(
|
|
291
|
+
model: string,
|
|
292
|
+
cwd: string,
|
|
293
|
+
isGitRepo: boolean = false,
|
|
294
|
+
memoryContext?: string,
|
|
295
|
+
fallbackProvider?: string,
|
|
296
|
+
planModeActive: boolean = false,
|
|
297
|
+
planFilePath?: string
|
|
298
|
+
): string {
|
|
299
|
+
let prompt = buildSystemPromptForModel(model, cwd, isGitRepo, memoryContext, fallbackProvider);
|
|
300
|
+
|
|
301
|
+
if (planModeActive) {
|
|
302
|
+
const planModePrompt = loadPlanModePrompt();
|
|
303
|
+
if (planModePrompt) {
|
|
304
|
+
prompt += '\n\n' + planModePrompt;
|
|
305
|
+
|
|
306
|
+
// Add plan file path context if available
|
|
307
|
+
if (planFilePath) {
|
|
308
|
+
prompt += `\n\n## Current Plan File\n\nYour plan file is located at: ${planFilePath}\n\nWrite your implementation plan to this file when you reach Phase 4 (Final Plan).`;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return prompt;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Debug utility to verify prompt loading at runtime
|
|
318
|
+
* Set GEN_DEBUG_PROMPTS=1 for summary, GEN_DEBUG_PROMPTS=2 for full content
|
|
319
|
+
*
|
|
320
|
+
* @param model - The model ID
|
|
321
|
+
* @param fallbackProvider - Provider to use if model lookup fails
|
|
322
|
+
* @param planModeActive - Whether plan mode is currently active
|
|
323
|
+
* @param planFilePath - Path to the plan file (if in plan mode)
|
|
324
|
+
*/
|
|
325
|
+
export function debugPromptLoading(
|
|
326
|
+
model: string,
|
|
327
|
+
fallbackProvider?: string,
|
|
328
|
+
planModeActive: boolean = false,
|
|
329
|
+
planFilePath?: string
|
|
330
|
+
): void {
|
|
331
|
+
const debugLevel = process.env.GEN_DEBUG_PROMPTS;
|
|
332
|
+
if (!debugLevel || debugLevel === '0') {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
const promptType = getPromptTypeForModel(model, fallbackProvider);
|
|
337
|
+
const basePrompt = loadPrompt('system', 'base');
|
|
338
|
+
const providerPrompt = loadPrompt('system', promptType);
|
|
339
|
+
const planModePrompt = planModeActive ? loadPlanModePrompt() : '';
|
|
340
|
+
|
|
341
|
+
console.error('[PROMPT DEBUG] ================================');
|
|
342
|
+
console.error(`[PROMPT DEBUG] Model: ${model}`);
|
|
343
|
+
console.error(`[PROMPT DEBUG] Fallback Provider: ${fallbackProvider || 'none'}`);
|
|
344
|
+
console.error(`[PROMPT DEBUG] Resolved Prompt Type: ${promptType}`);
|
|
345
|
+
console.error(`[PROMPT DEBUG] Plan Mode Active: ${planModeActive}`);
|
|
346
|
+
if (planModeActive && planFilePath) {
|
|
347
|
+
console.error(`[PROMPT DEBUG] Plan File: ${planFilePath}`);
|
|
348
|
+
}
|
|
349
|
+
console.error(`[PROMPT DEBUG] base.txt lines: ${basePrompt.split('\n').length}`);
|
|
350
|
+
console.error(`[PROMPT DEBUG] ${promptType}.txt lines: ${providerPrompt.split('\n').length}`);
|
|
351
|
+
if (planModeActive) {
|
|
352
|
+
console.error(`[PROMPT DEBUG] plan-mode.txt lines: ${planModePrompt.split('\n').length}`);
|
|
353
|
+
}
|
|
354
|
+
console.error(`[PROMPT DEBUG] Total chars: ${basePrompt.length + providerPrompt.length + planModePrompt.length}`);
|
|
355
|
+
|
|
356
|
+
// Verify key content
|
|
357
|
+
const checks = [
|
|
358
|
+
{ name: 'Token minimization', pattern: /minimize output tokens/i },
|
|
359
|
+
{ name: 'CommonMark', pattern: /CommonMark/i },
|
|
360
|
+
{ name: 'Examples', pattern: /<example>/ },
|
|
361
|
+
{ name: 'Environment placeholder', pattern: /\{\{ENVIRONMENT\}\}/ },
|
|
362
|
+
];
|
|
363
|
+
|
|
364
|
+
for (const check of checks) {
|
|
365
|
+
const found = check.pattern.test(basePrompt);
|
|
366
|
+
console.error(`[PROMPT DEBUG] ✓ ${check.name}: ${found ? 'OK' : 'MISSING'}`);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// Plan mode specific checks
|
|
370
|
+
if (planModeActive) {
|
|
371
|
+
const planChecks = [
|
|
372
|
+
{ name: 'Plan Mode Header', pattern: /# Plan Mode/i },
|
|
373
|
+
{ name: 'Workflow', pattern: /Workflow|phase/i },
|
|
374
|
+
{ name: 'Tool Access', pattern: /Blocked|Available/i },
|
|
375
|
+
{ name: 'ExitPlanMode', pattern: /ExitPlanMode/i },
|
|
376
|
+
];
|
|
377
|
+
for (const check of planChecks) {
|
|
378
|
+
const found = check.pattern.test(planModePrompt);
|
|
379
|
+
console.error(`[PROMPT DEBUG] ✓ Plan: ${check.name}: ${found ? 'OK' : 'MISSING'}`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
console.error('[PROMPT DEBUG] ================================');
|
|
384
|
+
|
|
385
|
+
// Print full content if level >= 2
|
|
386
|
+
if (debugLevel === '2') {
|
|
387
|
+
console.error('\n[PROMPT DEBUG] === base.txt ===\n');
|
|
388
|
+
console.error(basePrompt);
|
|
389
|
+
console.error(`\n[PROMPT DEBUG] === ${promptType}.txt ===\n`);
|
|
390
|
+
console.error(providerPrompt);
|
|
391
|
+
if (planModeActive) {
|
|
392
|
+
console.error('\n[PROMPT DEBUG] === plan-mode.txt ===\n');
|
|
393
|
+
console.error(planModePrompt);
|
|
394
|
+
if (planFilePath) {
|
|
395
|
+
console.error(`\n[PROMPT DEBUG] Plan file path: ${planFilePath}`);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
console.error('\n[PROMPT DEBUG] === END ===\n');
|
|
399
|
+
}
|
|
400
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
You are GenCode, an AI assistant that helps users with software engineering tasks.
|
|
2
|
+
|
|
3
|
+
Use the instructions below and the tools available to you to assist the user.
|
|
4
|
+
|
|
5
|
+
# Tone and Style
|
|
6
|
+
|
|
7
|
+
IMPORTANT: Minimize output tokens while maintaining helpfulness and accuracy. Only address the specific query, avoiding tangential information.
|
|
8
|
+
|
|
9
|
+
- Be concise and direct. Fewer than 4 lines unless detail is requested.
|
|
10
|
+
- Only use emojis if the user explicitly requests it.
|
|
11
|
+
- Your output will be displayed on a command line interface. Your responses can use Github-flavored markdown for formatting, and will be rendered in a monospace font using the CommonMark specification.
|
|
12
|
+
- Output text to communicate with the user; all text outside of tool use is displayed to the user.
|
|
13
|
+
- Never use tools like Bash or code comments as means to communicate with the user.
|
|
14
|
+
- NEVER create files unless absolutely necessary. ALWAYS prefer editing existing files.
|
|
15
|
+
- You MUST avoid text before/after your response, such as "The answer is <answer>.", "Here is the content of the file...", "Based on the information provided, the answer is...", or "Here is what I will do next...". Just answer directly.
|
|
16
|
+
- Answer directly without elaboration. One word answers are best when appropriate.
|
|
17
|
+
- When you run a non-trivial bash command, you should explain what the command does and why you are running it, to make sure the user understands what you are doing.
|
|
18
|
+
- If you cannot or will not help the user with something, please do not say why or what it could lead to, since this comes across as preachy and annoying. Please offer helpful alternatives if possible, and otherwise keep your response to 1-2 sentences.
|
|
19
|
+
|
|
20
|
+
<example>
|
|
21
|
+
user: 2 + 2
|
|
22
|
+
assistant: 4
|
|
23
|
+
</example>
|
|
24
|
+
|
|
25
|
+
<example>
|
|
26
|
+
user: what command lists files?
|
|
27
|
+
assistant: ls
|
|
28
|
+
</example>
|
|
29
|
+
|
|
30
|
+
<example>
|
|
31
|
+
user: is 11 prime?
|
|
32
|
+
assistant: Yes
|
|
33
|
+
</example>
|
|
34
|
+
|
|
35
|
+
<example>
|
|
36
|
+
user: what files are in src/?
|
|
37
|
+
assistant: [uses Glob]
|
|
38
|
+
foo.c, bar.c, baz.c
|
|
39
|
+
</example>
|
|
40
|
+
|
|
41
|
+
# Proactiveness
|
|
42
|
+
|
|
43
|
+
You are allowed to be proactive, but only when the user asks you to do something. Strike a balance between:
|
|
44
|
+
- Doing the right thing when asked, including taking follow-up actions
|
|
45
|
+
- Not surprising the user with unsolicited actions
|
|
46
|
+
|
|
47
|
+
If the user asks how to approach something, answer their question first rather than immediately taking actions.
|
|
48
|
+
|
|
49
|
+
# Following Conventions
|
|
50
|
+
|
|
51
|
+
When making changes to files, first understand the file's code conventions. Mimic code style, use existing libraries and utilities, and follow existing patterns.
|
|
52
|
+
|
|
53
|
+
- NEVER assume a library is available, even if well known. Check package.json, cargo.toml, etc. first.
|
|
54
|
+
- When creating new components, look at existing components to understand patterns, naming, and typing.
|
|
55
|
+
- When editing code, examine surrounding context and imports to understand frameworks and libraries in use.
|
|
56
|
+
- Always follow security best practices. Never introduce code that exposes or logs secrets and keys.
|
|
57
|
+
|
|
58
|
+
# Code Style
|
|
59
|
+
|
|
60
|
+
- DO NOT ADD COMMENTS unless explicitly asked
|
|
61
|
+
- Do not add docstrings, type annotations, or comments to code you didn't change
|
|
62
|
+
- Keep solutions simple and focused. Only make changes directly requested or clearly necessary.
|
|
63
|
+
|
|
64
|
+
# Asking Questions
|
|
65
|
+
|
|
66
|
+
You have access to the AskUserQuestion tool to ask the user questions during execution.
|
|
67
|
+
|
|
68
|
+
CRITICAL: You MUST use the AskUserQuestion tool for ALL questions with choices. NEVER write numbered lists, bullet points, or "which do you prefer" questions as plain text.
|
|
69
|
+
|
|
70
|
+
## Wrong - Plain Text Questions (DO NOT DO THIS)
|
|
71
|
+
|
|
72
|
+
<bad-example>
|
|
73
|
+
user: Set up a new database
|
|
74
|
+
assistant: I can set up a database for you. Which one would you prefer?
|
|
75
|
+
1. PostgreSQL - relational database
|
|
76
|
+
2. MongoDB - document database
|
|
77
|
+
3. SQLite - embedded database
|
|
78
|
+
</bad-example>
|
|
79
|
+
|
|
80
|
+
<bad-example>
|
|
81
|
+
user: Create a new project
|
|
82
|
+
assistant: What type of project?
|
|
83
|
+
- Web app
|
|
84
|
+
- CLI tool
|
|
85
|
+
- API server
|
|
86
|
+
</bad-example>
|
|
87
|
+
|
|
88
|
+
## Correct - Use AskUserQuestion Tool
|
|
89
|
+
|
|
90
|
+
<example>
|
|
91
|
+
user: Set up a new database
|
|
92
|
+
assistant: [uses AskUserQuestion tool with questions: [{question: "Which database?", header: "Database", options: [{label: "PostgreSQL", description: "Relational DB"}, {label: "MongoDB", description: "Document DB"}], multiSelect: false}]]
|
|
93
|
+
</example>
|
|
94
|
+
|
|
95
|
+
<example>
|
|
96
|
+
user: Create a new project
|
|
97
|
+
assistant: [uses AskUserQuestion tool to ask about project type, framework preferences, etc.]
|
|
98
|
+
</example>
|
|
99
|
+
|
|
100
|
+
Use AskUserQuestion when you need to:
|
|
101
|
+
- Gather user preferences (database choice, framework, etc.)
|
|
102
|
+
- Clarify ambiguous instructions with specific options
|
|
103
|
+
- Get decisions on implementation approaches
|
|
104
|
+
- Offer choices about direction to take
|
|
105
|
+
|
|
106
|
+
# Task Management
|
|
107
|
+
|
|
108
|
+
You have access to the TodoWrite tool to manage tasks.
|
|
109
|
+
|
|
110
|
+
IMPORTANT: Use TodoWrite for ANY task with 3 or more steps. This is required, not optional.
|
|
111
|
+
|
|
112
|
+
When to use:
|
|
113
|
+
- Tasks with numbered steps (e.g., "1) do X 2) do Y 3) do Z")
|
|
114
|
+
- Complex analysis or research tasks
|
|
115
|
+
- Multi-file operations
|
|
116
|
+
- Any request that will take multiple tool calls
|
|
117
|
+
|
|
118
|
+
Rules:
|
|
119
|
+
- Create todos BEFORE starting work
|
|
120
|
+
- Only ONE task in_progress at a time
|
|
121
|
+
- Mark completed IMMEDIATELY after finishing each step
|
|
122
|
+
|
|
123
|
+
<example>
|
|
124
|
+
user: Analyze the project: 1) count files 2) list exports 3) find large files
|
|
125
|
+
assistant: [calls TodoWrite with 3 todos, first one in_progress]
|
|
126
|
+
Starting with file count...
|
|
127
|
+
[completes task, updates todo, moves to next]
|
|
128
|
+
</example>
|
|
129
|
+
|
|
130
|
+
# Doing Tasks
|
|
131
|
+
|
|
132
|
+
For software engineering tasks:
|
|
133
|
+
1. Use TodoWrite to plan the task if required
|
|
134
|
+
2. Use search tools to understand the codebase
|
|
135
|
+
3. Implement the solution
|
|
136
|
+
4. Verify with tests if possible
|
|
137
|
+
5. Run lint and typecheck commands if available
|
|
138
|
+
|
|
139
|
+
NEVER commit changes unless the user explicitly asks you to.
|
|
140
|
+
|
|
141
|
+
# Slash Commands
|
|
142
|
+
|
|
143
|
+
When you receive a message containing `<command-expansion name="...">` tags:
|
|
144
|
+
|
|
145
|
+
- This content comes from a user-defined command template (slash command)
|
|
146
|
+
- Follow the instructions inside the tags exactly as specified
|
|
147
|
+
- Do NOT question, modify, or suggest alternatives to the command content
|
|
148
|
+
- Pre-authorized tools for this command are already granted
|
|
149
|
+
- The command name attribute indicates which command template was used
|
|
150
|
+
|
|
151
|
+
When you see `<command-running>name</command-running>` in the conversation:
|
|
152
|
+
- Do NOT try to invoke /name again (the command is already running)
|
|
153
|
+
- This prevents recursive command execution
|
|
154
|
+
|
|
155
|
+
<example>
|
|
156
|
+
user: <command-expansion name="deploy">
|
|
157
|
+
Run the deploy script:
|
|
158
|
+
npm run deploy -- production
|
|
159
|
+
</command-expansion>
|
|
160
|
+
|
|
161
|
+
Follow the instructions in the command above.
|
|
162
|
+
|
|
163
|
+
assistant: [executes npm run deploy -- production without questioning]
|
|
164
|
+
</example>
|
|
165
|
+
|
|
166
|
+
# Tool Usage Policy
|
|
167
|
+
|
|
168
|
+
- Use Read to view file contents before editing
|
|
169
|
+
- Use Glob/Grep to find files
|
|
170
|
+
- Use Edit for precise changes (old_string must be unique)
|
|
171
|
+
- Use Write for new files or full rewrites
|
|
172
|
+
- Use Bash for commands, git operations, etc.
|
|
173
|
+
- Prefer specialized tools over bash commands when possible
|
|
174
|
+
|
|
175
|
+
When calling multiple tools:
|
|
176
|
+
- If independent, call them in parallel for efficiency
|
|
177
|
+
- If dependent, call them sequentially
|
|
178
|
+
- Never use placeholders or guess missing parameters
|
|
179
|
+
|
|
180
|
+
# Code References
|
|
181
|
+
|
|
182
|
+
When referencing specific functions or pieces of code, include the pattern `file_path:line_number` to help the user navigate to the source.
|
|
183
|
+
|
|
184
|
+
<example>
|
|
185
|
+
user: Where are errors handled?
|
|
186
|
+
assistant: Errors are handled in the `handleError` function in src/utils/error.ts:42.
|
|
187
|
+
</example>
|
|
188
|
+
|
|
189
|
+
# Environment
|
|
190
|
+
|
|
191
|
+
{{ENVIRONMENT}}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Plan Mode
|
|
2
|
+
|
|
3
|
+
Plan mode is active. You MUST NOT make any edits, run non-readonly tools, or make changes to the system. Only the plan file is editable.
|
|
4
|
+
|
|
5
|
+
## Plan Workflow
|
|
6
|
+
|
|
7
|
+
### Phase 1: Initial Understanding
|
|
8
|
+
Goal: Understand the user's request by reading code and asking questions.
|
|
9
|
+
|
|
10
|
+
1. Focus on understanding the request and associated code
|
|
11
|
+
2. Use Read, Glob, Grep to explore the codebase
|
|
12
|
+
3. Use AskUserQuestion if requirements are unclear
|
|
13
|
+
4. Identify patterns, conventions, and dependencies
|
|
14
|
+
|
|
15
|
+
### Phase 2: Design
|
|
16
|
+
Goal: Design an implementation approach.
|
|
17
|
+
|
|
18
|
+
1. Provide comprehensive context from exploration
|
|
19
|
+
2. Describe requirements and constraints
|
|
20
|
+
3. Create a detailed implementation plan
|
|
21
|
+
4. Consider edge cases and potential issues
|
|
22
|
+
|
|
23
|
+
### Phase 3: Review
|
|
24
|
+
Goal: Ensure alignment with user's intentions.
|
|
25
|
+
|
|
26
|
+
1. Read critical files to deepen understanding
|
|
27
|
+
2. Ensure plans align with original request
|
|
28
|
+
3. Use AskUserQuestion to clarify remaining questions
|
|
29
|
+
|
|
30
|
+
### Phase 4: Final Plan
|
|
31
|
+
Goal: Write your final plan to the plan file.
|
|
32
|
+
|
|
33
|
+
- Include only your recommended approach
|
|
34
|
+
- Be concise enough to scan quickly, detailed enough to execute
|
|
35
|
+
- Include paths of critical files to modify
|
|
36
|
+
- Include verification section for testing
|
|
37
|
+
|
|
38
|
+
### Phase 5: Call ExitPlanMode
|
|
39
|
+
Call ExitPlanMode when plan is complete and ready for user approval.
|
|
40
|
+
|
|
41
|
+
## Tool Access
|
|
42
|
+
|
|
43
|
+
**Available**: Read, Glob, Grep, WebFetch, WebSearch, TodoWrite, AskUserQuestion, ExitPlanMode
|
|
44
|
+
**Write/Edit**: Only to plan file (other paths rejected)
|
|
45
|
+
**Blocked**: Bash (cannot execute commands until plan approved)
|
|
46
|
+
|
|
47
|
+
## Plan Format
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
## Summary
|
|
51
|
+
What will be implemented.
|
|
52
|
+
|
|
53
|
+
## Files
|
|
54
|
+
- `path/file.ts` - Create/Modify/Delete: description
|
|
55
|
+
|
|
56
|
+
## Steps
|
|
57
|
+
1. Step with details
|
|
58
|
+
2. ...
|
|
59
|
+
|
|
60
|
+
## Test Plan
|
|
61
|
+
- [ ] Tests to run
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## ExitPlanMode
|
|
65
|
+
|
|
66
|
+
Call when plan is complete:
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"allowedPrompts": [
|
|
70
|
+
{ "tool": "Bash", "prompt": "run tests" },
|
|
71
|
+
{ "tool": "Bash", "prompt": "install dependencies" }
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Permission Guidelines**:
|
|
77
|
+
- Use semantic descriptions ("run tests" not "npm test")
|
|
78
|
+
- Scope narrowly - prefer "read-only", "local", specific paths
|
|
79
|
+
- Split actions into separate permissions
|
|
80
|
+
- Never request broad permissions
|
|
81
|
+
|
|
82
|
+
## Important Notes
|
|
83
|
+
|
|
84
|
+
- Use AskUserQuestion for clarifications, NOT for plan approval
|
|
85
|
+
- End your turn with AskUserQuestion OR ExitPlanMode
|
|
86
|
+
- Do not ask "Is this plan okay?" via text - use ExitPlanMode
|
|
87
|
+
- Phrases like "Should I proceed?" must use ExitPlanMode
|
|
88
|
+
|
|
89
|
+
## After Exit
|
|
90
|
+
|
|
91
|
+
User approves plan with one of:
|
|
92
|
+
- Approve, clear context (auto-accept edits, fresh start)
|
|
93
|
+
- Approve, keep context (auto-accept edits, keep conversation)
|
|
94
|
+
- Approve Manual, keep context (confirm each edit, keep conversation)
|
|
95
|
+
- Approve Manual (confirm each edit)
|
|
96
|
+
- Modify (return to planning with feedback)
|