orquesta-cli 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -4
- package/dist/cli.js +65 -4
- package/dist/core/config/config-manager.d.ts +13 -1
- package/dist/core/config/config-manager.js +83 -0
- package/dist/core/slash-command-handler.d.ts +1 -0
- package/dist/core/slash-command-handler.js +129 -0
- package/dist/orquesta/config-sync.d.ts +73 -0
- package/dist/orquesta/config-sync.js +230 -0
- package/dist/orquesta/prompt-reporter.d.ts +16 -0
- package/dist/orquesta/prompt-reporter.js +85 -0
- package/dist/setup/first-run-setup.d.ts +15 -0
- package/dist/setup/first-run-setup.js +238 -0
- package/dist/types/index.d.ts +11 -2
- package/dist/ui/TodoPanel.d.ts +1 -0
- package/dist/ui/TodoPanel.js +6 -1
- package/dist/ui/components/LLMSetupWizard.js +373 -7
- package/dist/ui/components/Logo.d.ts +2 -0
- package/dist/ui/components/Logo.js +10 -3
- package/dist/ui/components/OpenRouterModelBrowser.d.ts +13 -0
- package/dist/ui/components/OpenRouterModelBrowser.js +221 -0
- package/dist/ui/components/PlanExecuteApp.js +30 -4
- package/dist/ui/components/ProjectSelector.d.ts +8 -0
- package/dist/ui/components/ProjectSelector.js +119 -0
- package/dist/ui/components/StatusBar.d.ts +2 -0
- package/dist/ui/components/StatusBar.js +6 -1
- package/dist/ui/hooks/slashCommandProcessor.js +8 -4
- package/package.json +11 -5
- package/.eslintrc.json +0 -26
- package/.prettierrc.json +0 -10
- package/CLAUDE.md +0 -199
- package/SECURITY.md +0 -290
- package/TEST_LOCAL.md +0 -245
- package/dist/agents/base/base-agent.d.ts.map +0 -1
- package/dist/agents/base/base-agent.js.map +0 -1
- package/dist/agents/docs-search/index.d.ts.map +0 -1
- package/dist/agents/docs-search/index.js.map +0 -1
- package/dist/agents/index.d.ts.map +0 -1
- package/dist/agents/index.js.map +0 -1
- package/dist/agents/planner/index.d.ts.map +0 -1
- package/dist/agents/planner/index.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/core/compact/compact-manager.d.ts.map +0 -1
- package/dist/core/compact/compact-manager.js.map +0 -1
- package/dist/core/compact/compact-prompts.d.ts.map +0 -1
- package/dist/core/compact/compact-prompts.js.map +0 -1
- package/dist/core/compact/context-tracker.d.ts.map +0 -1
- package/dist/core/compact/context-tracker.js.map +0 -1
- package/dist/core/compact/index.d.ts.map +0 -1
- package/dist/core/compact/index.js.map +0 -1
- package/dist/core/config/config-manager.d.ts.map +0 -1
- package/dist/core/config/config-manager.js.map +0 -1
- package/dist/core/config/index.d.ts.map +0 -1
- package/dist/core/config/index.js.map +0 -1
- package/dist/core/docs-manager.d.ts.map +0 -1
- package/dist/core/docs-manager.js.map +0 -1
- package/dist/core/git-auto-updater.d.ts.map +0 -1
- package/dist/core/git-auto-updater.js.map +0 -1
- package/dist/core/llm/index.d.ts.map +0 -1
- package/dist/core/llm/index.js.map +0 -1
- package/dist/core/llm/llm-client.d.ts.map +0 -1
- package/dist/core/llm/llm-client.js.map +0 -1
- package/dist/core/session/index.d.ts.map +0 -1
- package/dist/core/session/index.js.map +0 -1
- package/dist/core/session/session-manager.d.ts.map +0 -1
- package/dist/core/session/session-manager.js.map +0 -1
- package/dist/core/slash-command-handler.d.ts.map +0 -1
- package/dist/core/slash-command-handler.js.map +0 -1
- package/dist/core/usage-tracker.d.ts.map +0 -1
- package/dist/core/usage-tracker.js.map +0 -1
- package/dist/errors/base.d.ts.map +0 -1
- package/dist/errors/base.js.map +0 -1
- package/dist/errors/file.d.ts.map +0 -1
- package/dist/errors/file.js.map +0 -1
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js.map +0 -1
- package/dist/errors/llm.d.ts.map +0 -1
- package/dist/errors/llm.js.map +0 -1
- package/dist/errors/network.d.ts.map +0 -1
- package/dist/errors/network.js.map +0 -1
- package/dist/errors/validation.d.ts.map +0 -1
- package/dist/errors/validation.js.map +0 -1
- package/dist/eval/eval-runner.d.ts.map +0 -1
- package/dist/eval/eval-runner.js.map +0 -1
- package/dist/eval/index.d.ts.map +0 -1
- package/dist/eval/index.js.map +0 -1
- package/dist/eval/types.d.ts.map +0 -1
- package/dist/eval/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/orchestration/index.d.ts.map +0 -1
- package/dist/orchestration/index.js.map +0 -1
- package/dist/orchestration/plan-executor.d.ts.map +0 -1
- package/dist/orchestration/plan-executor.js.map +0 -1
- package/dist/orchestration/types.d.ts.map +0 -1
- package/dist/orchestration/types.js.map +0 -1
- package/dist/orchestration/utils.d.ts.map +0 -1
- package/dist/orchestration/utils.js.map +0 -1
- package/dist/orquesta/connection.d.ts.map +0 -1
- package/dist/orquesta/connection.js.map +0 -1
- package/dist/prompts/agents/docs-search-decision.d.ts.map +0 -1
- package/dist/prompts/agents/docs-search-decision.js.map +0 -1
- package/dist/prompts/agents/docs-search.d.ts.map +0 -1
- package/dist/prompts/agents/docs-search.js.map +0 -1
- package/dist/prompts/agents/planning.d.ts.map +0 -1
- package/dist/prompts/agents/planning.js.map +0 -1
- package/dist/prompts/index.d.ts.map +0 -1
- package/dist/prompts/index.js.map +0 -1
- package/dist/prompts/shared/codebase-rules.d.ts.map +0 -1
- package/dist/prompts/shared/codebase-rules.js.map +0 -1
- package/dist/prompts/shared/git-rules.d.ts.map +0 -1
- package/dist/prompts/shared/git-rules.js.map +0 -1
- package/dist/prompts/shared/language-rules.d.ts.map +0 -1
- package/dist/prompts/shared/language-rules.js.map +0 -1
- package/dist/prompts/shared/tool-usage.d.ts.map +0 -1
- package/dist/prompts/shared/tool-usage.js.map +0 -1
- package/dist/prompts/system/compact.d.ts.map +0 -1
- package/dist/prompts/system/compact.js.map +0 -1
- package/dist/prompts/system/plan-execute.d.ts.map +0 -1
- package/dist/prompts/system/plan-execute.js.map +0 -1
- package/dist/tools/browser/browser-client.d.ts.map +0 -1
- package/dist/tools/browser/browser-client.js.map +0 -1
- package/dist/tools/browser/browser-tools.d.ts.map +0 -1
- package/dist/tools/browser/browser-tools.js.map +0 -1
- package/dist/tools/browser/index.d.ts.map +0 -1
- package/dist/tools/browser/index.js.map +0 -1
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/llm/agents/docs-search-tools.d.ts.map +0 -1
- package/dist/tools/llm/agents/docs-search-tools.js.map +0 -1
- package/dist/tools/llm/agents/index.d.ts.map +0 -1
- package/dist/tools/llm/agents/index.js.map +0 -1
- package/dist/tools/llm/index.d.ts.map +0 -1
- package/dist/tools/llm/index.js.map +0 -1
- package/dist/tools/llm/simple/ask-user-tool.d.ts.map +0 -1
- package/dist/tools/llm/simple/ask-user-tool.js.map +0 -1
- package/dist/tools/llm/simple/background-bash-tool.d.ts.map +0 -1
- package/dist/tools/llm/simple/background-bash-tool.js.map +0 -1
- package/dist/tools/llm/simple/background-powershell-tool.d.ts.map +0 -1
- package/dist/tools/llm/simple/background-powershell-tool.js.map +0 -1
- package/dist/tools/llm/simple/bash-tool.d.ts.map +0 -1
- package/dist/tools/llm/simple/bash-tool.js.map +0 -1
- package/dist/tools/llm/simple/docs-search-agent-tool.d.ts.map +0 -1
- package/dist/tools/llm/simple/docs-search-agent-tool.js.map +0 -1
- package/dist/tools/llm/simple/file-tools.d.ts.map +0 -1
- package/dist/tools/llm/simple/file-tools.js.map +0 -1
- package/dist/tools/llm/simple/final-response-tool.d.ts.map +0 -1
- package/dist/tools/llm/simple/final-response-tool.js.map +0 -1
- package/dist/tools/llm/simple/index.d.ts.map +0 -1
- package/dist/tools/llm/simple/index.js.map +0 -1
- package/dist/tools/llm/simple/planning-tools.d.ts.map +0 -1
- package/dist/tools/llm/simple/planning-tools.js.map +0 -1
- package/dist/tools/llm/simple/powershell-tool.d.ts.map +0 -1
- package/dist/tools/llm/simple/powershell-tool.js.map +0 -1
- package/dist/tools/llm/simple/simple-tool-executor.d.ts.map +0 -1
- package/dist/tools/llm/simple/simple-tool-executor.js.map +0 -1
- package/dist/tools/llm/simple/todo-tools.d.ts.map +0 -1
- package/dist/tools/llm/simple/todo-tools.js.map +0 -1
- package/dist/tools/llm/simple/user-interaction-tools.d.ts.map +0 -1
- package/dist/tools/llm/simple/user-interaction-tools.js.map +0 -1
- package/dist/tools/office/common/constants.d.ts.map +0 -1
- package/dist/tools/office/common/constants.js.map +0 -1
- package/dist/tools/office/common/index.d.ts.map +0 -1
- package/dist/tools/office/common/index.js.map +0 -1
- package/dist/tools/office/common/types.d.ts.map +0 -1
- package/dist/tools/office/common/types.js.map +0 -1
- package/dist/tools/office/common/utils.d.ts.map +0 -1
- package/dist/tools/office/common/utils.js.map +0 -1
- package/dist/tools/office/excel-client.d.ts.map +0 -1
- package/dist/tools/office/excel-client.js.map +0 -1
- package/dist/tools/office/excel-tools/cells.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/cells.js.map +0 -1
- package/dist/tools/office/excel-tools/charts.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/charts.js.map +0 -1
- package/dist/tools/office/excel-tools/comments.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/comments.js.map +0 -1
- package/dist/tools/office/excel-tools/data-ops.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/data-ops.js.map +0 -1
- package/dist/tools/office/excel-tools/export.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/export.js.map +0 -1
- package/dist/tools/office/excel-tools/formatting.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/formatting.js.map +0 -1
- package/dist/tools/office/excel-tools/index.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/index.js.map +0 -1
- package/dist/tools/office/excel-tools/launch.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/launch.js.map +0 -1
- package/dist/tools/office/excel-tools/media.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/media.js.map +0 -1
- package/dist/tools/office/excel-tools/named-ranges.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/named-ranges.js.map +0 -1
- package/dist/tools/office/excel-tools/protection.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/protection.js.map +0 -1
- package/dist/tools/office/excel-tools/rows-columns.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/rows-columns.js.map +0 -1
- package/dist/tools/office/excel-tools/sheets.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/sheets.js.map +0 -1
- package/dist/tools/office/excel-tools/validation.d.ts.map +0 -1
- package/dist/tools/office/excel-tools/validation.js.map +0 -1
- package/dist/tools/office/excel-tools.d.ts.map +0 -1
- package/dist/tools/office/excel-tools.js.map +0 -1
- package/dist/tools/office/index.d.ts.map +0 -1
- package/dist/tools/office/index.js.map +0 -1
- package/dist/tools/office/office-client-base.d.ts.map +0 -1
- package/dist/tools/office/office-client-base.js.map +0 -1
- package/dist/tools/office/office-client.d.ts.map +0 -1
- package/dist/tools/office/office-client.js.map +0 -1
- package/dist/tools/office/powerpoint-client.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-client.js.map +0 -1
- package/dist/tools/office/powerpoint-tools/effects.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools/effects.js.map +0 -1
- package/dist/tools/office/powerpoint-tools/export.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools/export.js.map +0 -1
- package/dist/tools/office/powerpoint-tools/index.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools/index.js.map +0 -1
- package/dist/tools/office/powerpoint-tools/launch.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools/launch.js.map +0 -1
- package/dist/tools/office/powerpoint-tools/media.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools/media.js.map +0 -1
- package/dist/tools/office/powerpoint-tools/notes.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools/notes.js.map +0 -1
- package/dist/tools/office/powerpoint-tools/sections.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools/sections.js.map +0 -1
- package/dist/tools/office/powerpoint-tools/shapes.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools/shapes.js.map +0 -1
- package/dist/tools/office/powerpoint-tools/slides.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools/slides.js.map +0 -1
- package/dist/tools/office/powerpoint-tools/tables.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools/tables.js.map +0 -1
- package/dist/tools/office/powerpoint-tools/text.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools/text.js.map +0 -1
- package/dist/tools/office/powerpoint-tools.d.ts.map +0 -1
- package/dist/tools/office/powerpoint-tools.js.map +0 -1
- package/dist/tools/office/word-client.d.ts.map +0 -1
- package/dist/tools/office/word-client.js.map +0 -1
- package/dist/tools/office/word-tools/bookmarks.d.ts.map +0 -1
- package/dist/tools/office/word-tools/bookmarks.js.map +0 -1
- package/dist/tools/office/word-tools/comments.d.ts.map +0 -1
- package/dist/tools/office/word-tools/comments.js.map +0 -1
- package/dist/tools/office/word-tools/content.d.ts.map +0 -1
- package/dist/tools/office/word-tools/content.js.map +0 -1
- package/dist/tools/office/word-tools/export.d.ts.map +0 -1
- package/dist/tools/office/word-tools/export.js.map +0 -1
- package/dist/tools/office/word-tools/formatting.d.ts.map +0 -1
- package/dist/tools/office/word-tools/formatting.js.map +0 -1
- package/dist/tools/office/word-tools/headers-footers.d.ts.map +0 -1
- package/dist/tools/office/word-tools/headers-footers.js.map +0 -1
- package/dist/tools/office/word-tools/index.d.ts.map +0 -1
- package/dist/tools/office/word-tools/index.js.map +0 -1
- package/dist/tools/office/word-tools/launch.d.ts.map +0 -1
- package/dist/tools/office/word-tools/launch.js.map +0 -1
- package/dist/tools/office/word-tools/lists.d.ts.map +0 -1
- package/dist/tools/office/word-tools/lists.js.map +0 -1
- package/dist/tools/office/word-tools/navigation.d.ts.map +0 -1
- package/dist/tools/office/word-tools/navigation.js.map +0 -1
- package/dist/tools/office/word-tools/page-setup.d.ts.map +0 -1
- package/dist/tools/office/word-tools/page-setup.js.map +0 -1
- package/dist/tools/office/word-tools/tables.d.ts.map +0 -1
- package/dist/tools/office/word-tools/tables.js.map +0 -1
- package/dist/tools/office/word-tools/text.d.ts.map +0 -1
- package/dist/tools/office/word-tools/text.js.map +0 -1
- package/dist/tools/office/word-tools/undo-redo.d.ts.map +0 -1
- package/dist/tools/office/word-tools/undo-redo.js.map +0 -1
- package/dist/tools/office/word-tools/watermarks.d.ts.map +0 -1
- package/dist/tools/office/word-tools/watermarks.js.map +0 -1
- package/dist/tools/office/word-tools.d.ts.map +0 -1
- package/dist/tools/office/word-tools.js.map +0 -1
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/ui/PlanExecuteView.d.ts.map +0 -1
- package/dist/ui/PlanExecuteView.js.map +0 -1
- package/dist/ui/TodoPanel.d.ts.map +0 -1
- package/dist/ui/TodoPanel.js.map +0 -1
- package/dist/ui/UpdateNotification.d.ts.map +0 -1
- package/dist/ui/UpdateNotification.js.map +0 -1
- package/dist/ui/components/ActivityIndicator.d.ts.map +0 -1
- package/dist/ui/components/ActivityIndicator.js.map +0 -1
- package/dist/ui/components/CommandBrowser.d.ts.map +0 -1
- package/dist/ui/components/CommandBrowser.js.map +0 -1
- package/dist/ui/components/CustomTextInput.d.ts.map +0 -1
- package/dist/ui/components/CustomTextInput.js.map +0 -1
- package/dist/ui/components/DocsSearchProgress.d.ts.map +0 -1
- package/dist/ui/components/DocsSearchProgress.js.map +0 -1
- package/dist/ui/components/FileBrowser.d.ts.map +0 -1
- package/dist/ui/components/FileBrowser.js.map +0 -1
- package/dist/ui/components/LLMSetupWizard.d.ts.map +0 -1
- package/dist/ui/components/LLMSetupWizard.js.map +0 -1
- package/dist/ui/components/Logo.d.ts.map +0 -1
- package/dist/ui/components/Logo.js.map +0 -1
- package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
- package/dist/ui/components/MarkdownRenderer.js.map +0 -1
- package/dist/ui/components/ModelSelector.d.ts.map +0 -1
- package/dist/ui/components/ModelSelector.js.map +0 -1
- package/dist/ui/components/PlanExecuteApp.d.ts.map +0 -1
- package/dist/ui/components/PlanExecuteApp.js.map +0 -1
- package/dist/ui/components/ProgressBar.d.ts.map +0 -1
- package/dist/ui/components/ProgressBar.js.map +0 -1
- package/dist/ui/components/StatusBar.d.ts.map +0 -1
- package/dist/ui/components/StatusBar.js.map +0 -1
- package/dist/ui/components/ThinkingIndicator.d.ts.map +0 -1
- package/dist/ui/components/ThinkingIndicator.js.map +0 -1
- package/dist/ui/components/TodoListView.d.ts.map +0 -1
- package/dist/ui/components/TodoListView.js.map +0 -1
- package/dist/ui/components/ToolSelector.d.ts.map +0 -1
- package/dist/ui/components/ToolSelector.js.map +0 -1
- package/dist/ui/components/dialogs/ApprovalDialog.d.ts.map +0 -1
- package/dist/ui/components/dialogs/ApprovalDialog.js.map +0 -1
- package/dist/ui/components/dialogs/AskUserDialog.d.ts.map +0 -1
- package/dist/ui/components/dialogs/AskUserDialog.js.map +0 -1
- package/dist/ui/components/dialogs/DocsBrowser.d.ts.map +0 -1
- package/dist/ui/components/dialogs/DocsBrowser.js.map +0 -1
- package/dist/ui/components/dialogs/SettingsDialog.d.ts.map +0 -1
- package/dist/ui/components/dialogs/SettingsDialog.js.map +0 -1
- package/dist/ui/components/dialogs/index.d.ts.map +0 -1
- package/dist/ui/components/dialogs/index.js.map +0 -1
- package/dist/ui/components/index.d.ts.map +0 -1
- package/dist/ui/components/index.js.map +0 -1
- package/dist/ui/components/panels/LogPanel.d.ts.map +0 -1
- package/dist/ui/components/panels/LogPanel.js.map +0 -1
- package/dist/ui/components/panels/SessionPanel.d.ts.map +0 -1
- package/dist/ui/components/panels/SessionPanel.js.map +0 -1
- package/dist/ui/components/panels/index.d.ts.map +0 -1
- package/dist/ui/components/panels/index.js.map +0 -1
- package/dist/ui/components/views/ChatView.d.ts.map +0 -1
- package/dist/ui/components/views/ChatView.js.map +0 -1
- package/dist/ui/components/views/index.d.ts.map +0 -1
- package/dist/ui/components/views/index.js.map +0 -1
- package/dist/ui/contexts/TokenContext.d.ts.map +0 -1
- package/dist/ui/contexts/TokenContext.js.map +0 -1
- package/dist/ui/hooks/atFileProcessor.d.ts.map +0 -1
- package/dist/ui/hooks/atFileProcessor.js.map +0 -1
- package/dist/ui/hooks/index.d.ts.map +0 -1
- package/dist/ui/hooks/index.js.map +0 -1
- package/dist/ui/hooks/slashCommandProcessor.d.ts.map +0 -1
- package/dist/ui/hooks/slashCommandProcessor.js.map +0 -1
- package/dist/ui/hooks/useCommandBrowserState.d.ts.map +0 -1
- package/dist/ui/hooks/useCommandBrowserState.js.map +0 -1
- package/dist/ui/hooks/useFileBrowserState.d.ts.map +0 -1
- package/dist/ui/hooks/useFileBrowserState.js.map +0 -1
- package/dist/ui/hooks/useFileList.d.ts.map +0 -1
- package/dist/ui/hooks/useFileList.js.map +0 -1
- package/dist/ui/hooks/useInputHistory.d.ts.map +0 -1
- package/dist/ui/hooks/useInputHistory.js.map +0 -1
- package/dist/ui/hooks/usePlanExecution.d.ts.map +0 -1
- package/dist/ui/hooks/usePlanExecution.js.map +0 -1
- package/dist/ui/index.d.ts.map +0 -1
- package/dist/ui/index.js.map +0 -1
- package/dist/ui/ink-entry.d.ts.map +0 -1
- package/dist/ui/ink-entry.js.map +0 -1
- package/dist/utils/env-filter.d.ts.map +0 -1
- package/dist/utils/env-filter.js.map +0 -1
- package/dist/utils/file-system.d.ts.map +0 -1
- package/dist/utils/file-system.js.map +0 -1
- package/dist/utils/git-utils.d.ts.map +0 -1
- package/dist/utils/git-utils.js.map +0 -1
- package/dist/utils/json-stream-logger.d.ts.map +0 -1
- package/dist/utils/json-stream-logger.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/platform-utils.d.ts.map +0 -1
- package/dist/utils/platform-utils.js.map +0 -1
- package/dist/utils/wsl-utils.d.ts.map +0 -1
- package/dist/utils/wsl-utils.js.map +0 -1
- package/electron.vite.config.ts +0 -63
- package/google374b9eba0c52b043.html +0 -1
- package/src/agents/base/base-agent.ts +0 -159
- package/src/agents/docs-search/index.ts +0 -365
- package/src/agents/index.ts +0 -34
- package/src/agents/planner/index.ts +0 -544
- package/src/cli.ts +0 -201
- package/src/constants.ts +0 -47
- package/src/core/compact/compact-manager.ts +0 -160
- package/src/core/compact/compact-prompts.ts +0 -150
- package/src/core/compact/context-tracker.ts +0 -164
- package/src/core/compact/index.ts +0 -25
- package/src/core/config/config-manager.ts +0 -460
- package/src/core/config/index.ts +0 -5
- package/src/core/docs-manager.ts +0 -678
- package/src/core/llm/index.ts +0 -7
- package/src/core/llm/llm-client.ts +0 -1550
- package/src/core/session/index.ts +0 -5
- package/src/core/session/session-manager.ts +0 -464
- package/src/core/slash-command-handler.ts +0 -410
- package/src/core/usage-tracker.ts +0 -438
- package/src/errors/base.ts +0 -81
- package/src/errors/file.ts +0 -183
- package/src/errors/index.ts +0 -95
- package/src/errors/llm.ts +0 -151
- package/src/errors/network.ts +0 -124
- package/src/errors/validation.ts +0 -111
- package/src/eval/eval-runner.ts +0 -456
- package/src/eval/index.ts +0 -8
- package/src/eval/types.ts +0 -139
- package/src/index.ts +0 -22
- package/src/orchestration/index.ts +0 -30
- package/src/orchestration/plan-executor.ts +0 -652
- package/src/orchestration/types.ts +0 -127
- package/src/orchestration/utils.ts +0 -119
- package/src/orquesta/connection.ts +0 -291
- package/src/prompts/agents/docs-search-decision.ts +0 -74
- package/src/prompts/agents/docs-search.ts +0 -84
- package/src/prompts/agents/planning.ts +0 -143
- package/src/prompts/index.ts +0 -31
- package/src/prompts/shared/codebase-rules.ts +0 -29
- package/src/prompts/shared/git-rules.ts +0 -94
- package/src/prompts/shared/language-rules.ts +0 -36
- package/src/prompts/shared/tool-usage.ts +0 -72
- package/src/prompts/system/compact.ts +0 -80
- package/src/prompts/system/plan-execute.ts +0 -89
- package/src/tools/browser/browser-client.ts +0 -1363
- package/src/tools/browser/browser-tools.ts +0 -1139
- package/src/tools/browser/index.ts +0 -65
- package/src/tools/index.ts +0 -23
- package/src/tools/llm/agents/docs-search-tools.ts +0 -368
- package/src/tools/llm/agents/index.ts +0 -22
- package/src/tools/llm/index.ts +0 -11
- package/src/tools/llm/simple/ask-user-tool.ts +0 -25
- package/src/tools/llm/simple/background-bash-tool.ts +0 -443
- package/src/tools/llm/simple/background-powershell-tool.ts +0 -421
- package/src/tools/llm/simple/bash-tool.ts +0 -238
- package/src/tools/llm/simple/docs-search-agent-tool.ts +0 -146
- package/src/tools/llm/simple/file-tools.ts +0 -1051
- package/src/tools/llm/simple/final-response-tool.ts +0 -180
- package/src/tools/llm/simple/index.ts +0 -42
- package/src/tools/llm/simple/planning-tools.ts +0 -143
- package/src/tools/llm/simple/powershell-tool.ts +0 -241
- package/src/tools/llm/simple/simple-tool-executor.ts +0 -279
- package/src/tools/llm/simple/todo-tools.ts +0 -207
- package/src/tools/llm/simple/user-interaction-tools.ts +0 -277
- package/src/tools/office/common/constants.ts +0 -335
- package/src/tools/office/common/index.ts +0 -133
- package/src/tools/office/common/types.ts +0 -286
- package/src/tools/office/common/utils.ts +0 -116
- package/src/tools/office/excel-client.ts +0 -1336
- package/src/tools/office/excel-tools/cells.ts +0 -359
- package/src/tools/office/excel-tools/charts.ts +0 -166
- package/src/tools/office/excel-tools/comments.ts +0 -155
- package/src/tools/office/excel-tools/data-ops.ts +0 -349
- package/src/tools/office/excel-tools/export.ts +0 -105
- package/src/tools/office/excel-tools/formatting.ts +0 -357
- package/src/tools/office/excel-tools/index.ts +0 -55
- package/src/tools/office/excel-tools/launch.ts +0 -303
- package/src/tools/office/excel-tools/media.ts +0 -117
- package/src/tools/office/excel-tools/named-ranges.ts +0 -148
- package/src/tools/office/excel-tools/protection.ts +0 -105
- package/src/tools/office/excel-tools/rows-columns.ts +0 -386
- package/src/tools/office/excel-tools/sheets.ts +0 -228
- package/src/tools/office/excel-tools/validation.ts +0 -226
- package/src/tools/office/excel-tools.ts +0 -9
- package/src/tools/office/index.ts +0 -259
- package/src/tools/office/office-client-base.ts +0 -242
- package/src/tools/office/office-client.ts +0 -377
- package/src/tools/office/powerpoint-client.ts +0 -1498
- package/src/tools/office/powerpoint-tools/effects.ts +0 -315
- package/src/tools/office/powerpoint-tools/export.ts +0 -138
- package/src/tools/office/powerpoint-tools/index.ts +0 -45
- package/src/tools/office/powerpoint-tools/launch.ts +0 -263
- package/src/tools/office/powerpoint-tools/media.ts +0 -291
- package/src/tools/office/powerpoint-tools/notes.ts +0 -220
- package/src/tools/office/powerpoint-tools/sections.ts +0 -140
- package/src/tools/office/powerpoint-tools/shapes.ts +0 -870
- package/src/tools/office/powerpoint-tools/slides.ts +0 -350
- package/src/tools/office/powerpoint-tools/tables.ts +0 -182
- package/src/tools/office/powerpoint-tools/text.ts +0 -473
- package/src/tools/office/powerpoint-tools.ts +0 -9
- package/src/tools/office/word-client.ts +0 -1697
- package/src/tools/office/word-tools/bookmarks.ts +0 -186
- package/src/tools/office/word-tools/comments.ts +0 -185
- package/src/tools/office/word-tools/content.ts +0 -229
- package/src/tools/office/word-tools/export.ts +0 -97
- package/src/tools/office/word-tools/formatting.ts +0 -161
- package/src/tools/office/word-tools/headers-footers.ts +0 -155
- package/src/tools/office/word-tools/index.ts +0 -57
- package/src/tools/office/word-tools/launch.ts +0 -312
- package/src/tools/office/word-tools/lists.ts +0 -97
- package/src/tools/office/word-tools/navigation.ts +0 -114
- package/src/tools/office/word-tools/page-setup.ts +0 -195
- package/src/tools/office/word-tools/tables.ts +0 -262
- package/src/tools/office/word-tools/text.ts +0 -294
- package/src/tools/office/word-tools/undo-redo.ts +0 -97
- package/src/tools/office/word-tools/watermarks.ts +0 -105
- package/src/tools/office/word-tools.ts +0 -9
- package/src/tools/registry.ts +0 -527
- package/src/tools/types.ts +0 -231
- package/src/types/index.ts +0 -181
- package/src/ui/PlanExecuteView.tsx +0 -119
- package/src/ui/TodoPanel.tsx +0 -240
- package/src/ui/UpdateNotification.tsx +0 -105
- package/src/ui/components/ActivityIndicator.tsx +0 -234
- package/src/ui/components/CommandBrowser.tsx +0 -114
- package/src/ui/components/CustomTextInput.tsx +0 -389
- package/src/ui/components/DocsSearchProgress.tsx +0 -85
- package/src/ui/components/FileBrowser.tsx +0 -93
- package/src/ui/components/LLMSetupWizard.tsx +0 -333
- package/src/ui/components/Logo.tsx +0 -125
- package/src/ui/components/MarkdownRenderer.tsx +0 -358
- package/src/ui/components/ModelSelector.tsx +0 -203
- package/src/ui/components/PlanExecuteApp.tsx +0 -2007
- package/src/ui/components/ProgressBar.tsx +0 -51
- package/src/ui/components/StatusBar.tsx +0 -302
- package/src/ui/components/ThinkingIndicator.tsx +0 -120
- package/src/ui/components/TodoListView.tsx +0 -140
- package/src/ui/components/ToolSelector.tsx +0 -215
- package/src/ui/components/dialogs/ApprovalDialog.tsx +0 -259
- package/src/ui/components/dialogs/AskUserDialog.tsx +0 -159
- package/src/ui/components/dialogs/DocsBrowser.tsx +0 -222
- package/src/ui/components/dialogs/SettingsDialog.tsx +0 -939
- package/src/ui/components/dialogs/index.ts +0 -13
- package/src/ui/components/index.ts +0 -27
- package/src/ui/components/panels/LogPanel.tsx +0 -385
- package/src/ui/components/panels/SessionPanel.tsx +0 -146
- package/src/ui/components/panels/index.ts +0 -13
- package/src/ui/components/views/ChatView.tsx +0 -447
- package/src/ui/components/views/index.ts +0 -5
- package/src/ui/contexts/TokenContext.tsx +0 -139
- package/src/ui/hooks/atFileProcessor.ts +0 -167
- package/src/ui/hooks/index.ts +0 -11
- package/src/ui/hooks/slashCommandProcessor.ts +0 -174
- package/src/ui/hooks/useCommandBrowserState.ts +0 -97
- package/src/ui/hooks/useFileBrowserState.ts +0 -116
- package/src/ui/hooks/useFileList.ts +0 -132
- package/src/ui/hooks/useInputHistory.ts +0 -89
- package/src/ui/hooks/usePlanExecution.ts +0 -339
- package/src/ui/index.ts +0 -10
- package/src/ui/ink-entry.tsx +0 -36
- package/src/utils/env-filter.ts +0 -164
- package/src/utils/file-system.ts +0 -133
- package/src/utils/git-utils.ts +0 -30
- package/src/utils/json-stream-logger.ts +0 -1259
- package/src/utils/logger.ts +0 -2767
- package/src/utils/platform-utils.ts +0 -256
- package/src/utils/wsl-utils.ts +0 -113
- package/tsconfig.electron.json +0 -39
- package/tsconfig.json +0 -64
|
@@ -1,652 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Plan Executor
|
|
3
|
-
*
|
|
4
|
-
* Core business logic for Plan & Execute workflow
|
|
5
|
-
* Contains pure logic without React dependencies
|
|
6
|
-
*
|
|
7
|
-
* All execution is planning-based (Direct Mode removed)
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { Message, TodoItem } from '../types/index.js';
|
|
11
|
-
import { LLMClient } from '../core/llm/llm-client.js';
|
|
12
|
-
import { PlanningLLM } from '../agents/planner/index.js';
|
|
13
|
-
import { sessionManager } from '../core/session/session-manager.js';
|
|
14
|
-
import {
|
|
15
|
-
CompactManager,
|
|
16
|
-
CompactResult,
|
|
17
|
-
contextTracker,
|
|
18
|
-
buildCompactedMessages,
|
|
19
|
-
} from '../core/compact/index.js';
|
|
20
|
-
import { configManager } from '../core/config/config-manager.js';
|
|
21
|
-
import {
|
|
22
|
-
setTodoWriteCallback,
|
|
23
|
-
clearTodoCallbacks,
|
|
24
|
-
TodoInput,
|
|
25
|
-
} from '../tools/llm/simple/todo-tools.js';
|
|
26
|
-
import {
|
|
27
|
-
setGetTodosCallback,
|
|
28
|
-
setFinalResponseCallback,
|
|
29
|
-
clearFinalResponseCallbacks,
|
|
30
|
-
} from '../tools/llm/simple/final-response-tool.js';
|
|
31
|
-
import {
|
|
32
|
-
setDocsSearchLLMClientGetter,
|
|
33
|
-
clearDocsSearchLLMClientGetter,
|
|
34
|
-
} from '../tools/llm/simple/docs-search-agent-tool.js';
|
|
35
|
-
import {
|
|
36
|
-
emitPlanCreated,
|
|
37
|
-
emitTodoStart,
|
|
38
|
-
emitTodoComplete,
|
|
39
|
-
emitTodoFail,
|
|
40
|
-
emitCompact,
|
|
41
|
-
emitAssistantResponse,
|
|
42
|
-
} from '../tools/llm/simple/file-tools.js';
|
|
43
|
-
import { toolRegistry } from '../tools/registry.js';
|
|
44
|
-
import { PLAN_EXECUTE_SYSTEM_PROMPT as PLAN_PROMPT } from '../prompts/system/plan-execute.js';
|
|
45
|
-
import { GIT_COMMIT_RULES } from '../prompts/shared/git-rules.js';
|
|
46
|
-
import { logger } from '../utils/logger.js';
|
|
47
|
-
import { getStreamLogger } from '../utils/json-stream-logger.js';
|
|
48
|
-
import { detectGitRepo } from '../utils/git-utils.js';
|
|
49
|
-
|
|
50
|
-
import type { StateCallbacks } from './types.js';
|
|
51
|
-
import { formatErrorMessage, buildTodoContext, findActiveTodo, getTodoStats } from './utils.js';
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Build system prompt with conditional Git rules
|
|
55
|
-
* Git rules are only added when .git folder exists in working directory
|
|
56
|
-
*/
|
|
57
|
-
function buildSystemPrompt(): string {
|
|
58
|
-
const isGitRepo = detectGitRepo();
|
|
59
|
-
if (isGitRepo) {
|
|
60
|
-
return `${PLAN_PROMPT}\n\n${GIT_COMMIT_RULES}`;
|
|
61
|
-
}
|
|
62
|
-
return PLAN_PROMPT;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Plan Executor
|
|
67
|
-
*
|
|
68
|
-
* Execute all requests based on planning
|
|
69
|
-
* chatCompletionWithTools handles tool loop internally, no external loop needed
|
|
70
|
-
*/
|
|
71
|
-
export class PlanExecutor {
|
|
72
|
-
private currentLLMClient: LLMClient | null = null;
|
|
73
|
-
|
|
74
|
-
constructor() {
|
|
75
|
-
// No configuration needed - chatCompletionWithTools handles the loop internally
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Plan Mode execution (TODO-based execution)
|
|
80
|
-
* Performs Planning and Docs Search Decision in parallel
|
|
81
|
-
*/
|
|
82
|
-
async executePlanMode(
|
|
83
|
-
userMessage: string,
|
|
84
|
-
llmClient: LLMClient,
|
|
85
|
-
messages: Message[],
|
|
86
|
-
isInterruptedRef: { current: boolean },
|
|
87
|
-
callbacks: StateCallbacks
|
|
88
|
-
): Promise<void> {
|
|
89
|
-
const planningStartTime = Date.now();
|
|
90
|
-
const streamLogger = getStreamLogger();
|
|
91
|
-
|
|
92
|
-
logger.enter('PlanExecutor.executePlanMode', { messageLength: userMessage.length });
|
|
93
|
-
|
|
94
|
-
// Log user input (for Ctrl+O LogBrowser chat category)
|
|
95
|
-
streamLogger?.logUserInput(userMessage);
|
|
96
|
-
|
|
97
|
-
// Log planning start
|
|
98
|
-
streamLogger?.logPlanningStart(userMessage, {
|
|
99
|
-
messageCount: messages.length,
|
|
100
|
-
model: configManager.getCurrentModel()?.name,
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
// Store LLM client for docs search agent tool
|
|
104
|
-
this.currentLLMClient = llmClient;
|
|
105
|
-
setDocsSearchLLMClientGetter(() => this.currentLLMClient);
|
|
106
|
-
|
|
107
|
-
// Reset state - clear previous TODOs when starting new planning
|
|
108
|
-
isInterruptedRef.current = false;
|
|
109
|
-
callbacks.setIsInterrupted(false);
|
|
110
|
-
callbacks.setTodos([]); // Clear previous TODOs at start
|
|
111
|
-
callbacks.setExecutionPhase('planning');
|
|
112
|
-
callbacks.setCurrentActivity('Planning tasks');
|
|
113
|
-
|
|
114
|
-
// Local TODO state
|
|
115
|
-
let currentTodos: TodoItem[] = [];
|
|
116
|
-
|
|
117
|
-
try {
|
|
118
|
-
if (isInterruptedRef.current) {
|
|
119
|
-
throw new Error('INTERRUPTED');
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
let currentMessages = messages;
|
|
123
|
-
|
|
124
|
-
// 1. Generate TODO list with parallel docs search decision
|
|
125
|
-
callbacks.setCurrentActivity('Thinking');
|
|
126
|
-
const planningLLM = new PlanningLLM(llmClient);
|
|
127
|
-
|
|
128
|
-
// Connect ask-user callback for planning phase clarification
|
|
129
|
-
if (callbacks.askUser) {
|
|
130
|
-
planningLLM.setAskUserCallback(callbacks.askUser);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
const planResult = await planningLLM.generateTODOListWithDocsDecision(userMessage, currentMessages);
|
|
134
|
-
|
|
135
|
-
// Add clarification messages to history (ask_to_user Q&A from planning phase)
|
|
136
|
-
if (planResult.clarificationMessages?.length) {
|
|
137
|
-
currentMessages = [...currentMessages, ...planResult.clarificationMessages];
|
|
138
|
-
callbacks.setMessages([...currentMessages]);
|
|
139
|
-
logger.flow('Added planning clarification messages to history', {
|
|
140
|
-
count: planResult.clarificationMessages.length,
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Check for direct response (no planning needed)
|
|
145
|
-
if (planResult.directResponse) {
|
|
146
|
-
logger.flow('Direct response - no execution needed');
|
|
147
|
-
|
|
148
|
-
// Log planning end (direct response)
|
|
149
|
-
streamLogger?.logPlanningEnd(0, [], true, Date.now() - planningStartTime);
|
|
150
|
-
|
|
151
|
-
// Check if last message is already the same user request (avoid duplicate)
|
|
152
|
-
const lastMsg = currentMessages[currentMessages.length - 1];
|
|
153
|
-
const needsUserMessage = !(lastMsg?.role === 'user' && lastMsg?.content === userMessage);
|
|
154
|
-
const updatedMessages: Message[] = needsUserMessage
|
|
155
|
-
? [
|
|
156
|
-
...currentMessages,
|
|
157
|
-
{ role: 'user' as const, content: userMessage },
|
|
158
|
-
{ role: 'assistant' as const, content: planResult.directResponse }
|
|
159
|
-
]
|
|
160
|
-
: [
|
|
161
|
-
...currentMessages,
|
|
162
|
-
{ role: 'assistant' as const, content: planResult.directResponse }
|
|
163
|
-
];
|
|
164
|
-
// Emit to UI log
|
|
165
|
-
emitAssistantResponse(planResult.directResponse);
|
|
166
|
-
// Update messages state
|
|
167
|
-
callbacks.setMessages([...updatedMessages]);
|
|
168
|
-
sessionManager.autoSaveCurrentSession(updatedMessages);
|
|
169
|
-
callbacks.setExecutionPhase('idle');
|
|
170
|
-
logger.exit('PlanExecutor.executePlanMode', { directResponse: true });
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
currentTodos = planResult.todos;
|
|
175
|
-
|
|
176
|
-
// Log planning end (TODOs created)
|
|
177
|
-
streamLogger?.logPlanningEnd(
|
|
178
|
-
currentTodos.length,
|
|
179
|
-
currentTodos.map(t => ({ id: t.id, title: t.title, status: t.status })),
|
|
180
|
-
false,
|
|
181
|
-
Date.now() - planningStartTime
|
|
182
|
-
);
|
|
183
|
-
|
|
184
|
-
logger.vars(
|
|
185
|
-
{ name: 'todoCount', value: currentTodos.length },
|
|
186
|
-
{ name: 'docsSearchNeeded', value: planResult.docsSearchNeeded }
|
|
187
|
-
);
|
|
188
|
-
|
|
189
|
-
// Update UI with TODOs
|
|
190
|
-
callbacks.setTodos(currentTodos);
|
|
191
|
-
emitPlanCreated(currentTodos.map(t => t.title));
|
|
192
|
-
|
|
193
|
-
const planMessage = planResult.docsSearchNeeded
|
|
194
|
-
? `📋 Created ${currentTodos.length} tasks (including docs search). Starting execution...`
|
|
195
|
-
: `📋 Created ${currentTodos.length} tasks. Starting execution...`;
|
|
196
|
-
// Check if last message is already the same user request (avoid duplicate)
|
|
197
|
-
const lastMsgForPlan = currentMessages[currentMessages.length - 1];
|
|
198
|
-
const needsUserMessageForPlan = !(lastMsgForPlan?.role === 'user' && lastMsgForPlan?.content === userMessage);
|
|
199
|
-
currentMessages = needsUserMessageForPlan
|
|
200
|
-
? [
|
|
201
|
-
...currentMessages,
|
|
202
|
-
{ role: 'user' as const, content: userMessage },
|
|
203
|
-
{ role: 'assistant' as const, content: planMessage }
|
|
204
|
-
]
|
|
205
|
-
: [
|
|
206
|
-
...currentMessages,
|
|
207
|
-
{ role: 'assistant' as const, content: planMessage }
|
|
208
|
-
];
|
|
209
|
-
callbacks.setMessages(currentMessages);
|
|
210
|
-
|
|
211
|
-
// 2. Setup TODO callbacks
|
|
212
|
-
this.setupTodoCallbacks(currentTodos, callbacks, (updated) => {
|
|
213
|
-
currentTodos = updated;
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
// 3. Execute (single call - chatCompletionWithTools handles loop internally)
|
|
217
|
-
callbacks.setExecutionPhase('executing');
|
|
218
|
-
const tools = toolRegistry.getLLMToolDefinitions();
|
|
219
|
-
|
|
220
|
-
// Prepare system message (with conditional Git rules if .git exists)
|
|
221
|
-
const hasSystemMessage = currentMessages.some(m => m.role === 'system');
|
|
222
|
-
if (!hasSystemMessage) {
|
|
223
|
-
currentMessages = [
|
|
224
|
-
{ role: 'system' as const, content: buildSystemPrompt() },
|
|
225
|
-
...currentMessages
|
|
226
|
-
];
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if (isInterruptedRef.current) {
|
|
230
|
-
throw new Error('INTERRUPTED');
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// Update activity
|
|
234
|
-
const activeTodo = findActiveTodo(currentTodos);
|
|
235
|
-
callbacks.setCurrentActivity(activeTodo?.title || 'Working on tasks');
|
|
236
|
-
|
|
237
|
-
// Build TODO context and inject into last user message
|
|
238
|
-
const todoContext = buildTodoContext(currentTodos);
|
|
239
|
-
const lastUserMsgIndex = currentMessages.map(m => m.role).lastIndexOf('user');
|
|
240
|
-
const messagesForLLM = lastUserMsgIndex >= 0
|
|
241
|
-
? currentMessages.map((m, i) =>
|
|
242
|
-
i === lastUserMsgIndex
|
|
243
|
-
? { ...m, content: m.content + todoContext }
|
|
244
|
-
: m
|
|
245
|
-
)
|
|
246
|
-
: [...currentMessages, { role: 'user' as const, content: `Execute the TODO list.${todoContext}` }];
|
|
247
|
-
|
|
248
|
-
// Single LLM call - continues internally until finish_reason: stop
|
|
249
|
-
// Pass pending message callbacks for mid-execution user input injection
|
|
250
|
-
const result = await llmClient.chatCompletionWithTools(messagesForLLM, tools, {
|
|
251
|
-
getPendingMessage: callbacks.getPendingMessage,
|
|
252
|
-
clearPendingMessage: callbacks.clearPendingMessage,
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
// Update messages (without TODO context)
|
|
256
|
-
const newMessages = result.allMessages.slice(currentMessages.length);
|
|
257
|
-
currentMessages = [...currentMessages, ...newMessages];
|
|
258
|
-
callbacks.setMessages([...currentMessages]);
|
|
259
|
-
sessionManager.autoSaveCurrentSession(currentMessages);
|
|
260
|
-
|
|
261
|
-
// Check for auto-compact after completion
|
|
262
|
-
await this.checkAndPerformAutoCompact(
|
|
263
|
-
llmClient,
|
|
264
|
-
currentMessages,
|
|
265
|
-
currentTodos,
|
|
266
|
-
callbacks,
|
|
267
|
-
(updated) => { currentMessages = updated; }
|
|
268
|
-
);
|
|
269
|
-
|
|
270
|
-
// 4. Completion - LLM's final response is already in currentMessages
|
|
271
|
-
const stats = getTodoStats(currentTodos);
|
|
272
|
-
sessionManager.autoSaveCurrentSession(currentMessages);
|
|
273
|
-
|
|
274
|
-
logger.exit('PlanExecutor.executePlanMode', { success: true, ...stats });
|
|
275
|
-
} catch (error) {
|
|
276
|
-
if (error instanceof Error && error.message === 'INTERRUPTED') {
|
|
277
|
-
logger.flow('Plan mode interrupted by user');
|
|
278
|
-
callbacks.setMessages((prev: Message[]) => {
|
|
279
|
-
const updatedMessages: Message[] = [
|
|
280
|
-
...prev,
|
|
281
|
-
{ role: 'assistant' as const, content: '⚠️ Execution interrupted.' }
|
|
282
|
-
];
|
|
283
|
-
sessionManager.autoSaveCurrentSession(updatedMessages);
|
|
284
|
-
return updatedMessages;
|
|
285
|
-
});
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
logger.error('Plan mode execution failed', error as Error);
|
|
290
|
-
const errorMessage = formatErrorMessage(error);
|
|
291
|
-
|
|
292
|
-
callbacks.setMessages((prev: Message[]) => {
|
|
293
|
-
const updatedMessages: Message[] = [
|
|
294
|
-
...prev,
|
|
295
|
-
{ role: 'assistant' as const, content: `Execution error:\n\n${errorMessage}` }
|
|
296
|
-
];
|
|
297
|
-
sessionManager.autoSaveCurrentSession(updatedMessages);
|
|
298
|
-
return updatedMessages;
|
|
299
|
-
});
|
|
300
|
-
} finally {
|
|
301
|
-
callbacks.setExecutionPhase('idle');
|
|
302
|
-
clearTodoCallbacks();
|
|
303
|
-
clearFinalResponseCallbacks();
|
|
304
|
-
clearDocsSearchLLMClientGetter();
|
|
305
|
-
this.currentLLMClient = null;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Resume TODO execution
|
|
311
|
-
*/
|
|
312
|
-
async resumeTodoExecution(
|
|
313
|
-
userMessage: string,
|
|
314
|
-
llmClient: LLMClient,
|
|
315
|
-
messages: Message[],
|
|
316
|
-
todos: TodoItem[],
|
|
317
|
-
isInterruptedRef: { current: boolean },
|
|
318
|
-
callbacks: StateCallbacks
|
|
319
|
-
): Promise<void> {
|
|
320
|
-
logger.enter('PlanExecutor.resumeTodoExecution', { messageLength: userMessage.length, todoCount: todos.length });
|
|
321
|
-
|
|
322
|
-
// Log user input (for Ctrl+O LogBrowser chat category)
|
|
323
|
-
const streamLogger = getStreamLogger();
|
|
324
|
-
streamLogger?.logUserInput(userMessage);
|
|
325
|
-
|
|
326
|
-
// Store LLM client for docs search agent tool
|
|
327
|
-
this.currentLLMClient = llmClient;
|
|
328
|
-
setDocsSearchLLMClientGetter(() => this.currentLLMClient);
|
|
329
|
-
|
|
330
|
-
// Reset state
|
|
331
|
-
isInterruptedRef.current = false;
|
|
332
|
-
callbacks.setIsInterrupted(false);
|
|
333
|
-
callbacks.setExecutionPhase('executing');
|
|
334
|
-
callbacks.setCurrentActivity('Resuming execution');
|
|
335
|
-
|
|
336
|
-
let currentTodos = [...todos];
|
|
337
|
-
|
|
338
|
-
try {
|
|
339
|
-
// Add user message
|
|
340
|
-
let currentMessages: Message[] = [
|
|
341
|
-
...messages,
|
|
342
|
-
{ role: 'user' as const, content: userMessage }
|
|
343
|
-
];
|
|
344
|
-
callbacks.setMessages(currentMessages);
|
|
345
|
-
|
|
346
|
-
// Setup TODO callbacks
|
|
347
|
-
this.setupTodoCallbacks(currentTodos, callbacks, (updated) => {
|
|
348
|
-
currentTodos = updated;
|
|
349
|
-
});
|
|
350
|
-
|
|
351
|
-
// Get tools from registry
|
|
352
|
-
const tools = toolRegistry.getLLMToolDefinitions();
|
|
353
|
-
|
|
354
|
-
// Ensure system message (with conditional Git rules if .git exists)
|
|
355
|
-
const hasSystemMessage = currentMessages.some(m => m.role === 'system');
|
|
356
|
-
if (!hasSystemMessage) {
|
|
357
|
-
currentMessages = [
|
|
358
|
-
{ role: 'system' as const, content: buildSystemPrompt() },
|
|
359
|
-
...currentMessages
|
|
360
|
-
];
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
if (isInterruptedRef.current) {
|
|
364
|
-
throw new Error('INTERRUPTED');
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
const activeTodo = findActiveTodo(currentTodos);
|
|
368
|
-
callbacks.setCurrentActivity(activeTodo?.title || 'Working on tasks');
|
|
369
|
-
|
|
370
|
-
// Build TODO context
|
|
371
|
-
const todoContext = buildTodoContext(currentTodos);
|
|
372
|
-
|
|
373
|
-
// Create messages with TODO context
|
|
374
|
-
const lastUserMsgIndex = currentMessages.map(m => m.role).lastIndexOf('user');
|
|
375
|
-
const messagesForLLM = lastUserMsgIndex >= 0
|
|
376
|
-
? currentMessages.map((m, i) =>
|
|
377
|
-
i === lastUserMsgIndex
|
|
378
|
-
? { ...m, content: m.content + todoContext }
|
|
379
|
-
: m
|
|
380
|
-
)
|
|
381
|
-
: [...currentMessages, { role: 'user' as const, content: `Resume the TODO list.${todoContext}` }];
|
|
382
|
-
|
|
383
|
-
// Single LLM call - continues internally until finish_reason: stop
|
|
384
|
-
// Pass pending message callbacks for mid-execution user input injection
|
|
385
|
-
const result = await llmClient.chatCompletionWithTools(messagesForLLM, tools, {
|
|
386
|
-
getPendingMessage: callbacks.getPendingMessage,
|
|
387
|
-
clearPendingMessage: callbacks.clearPendingMessage,
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
// Update messages
|
|
391
|
-
const newMessages = result.allMessages.slice(currentMessages.length);
|
|
392
|
-
currentMessages = [...currentMessages, ...newMessages];
|
|
393
|
-
callbacks.setMessages([...currentMessages]);
|
|
394
|
-
sessionManager.autoSaveCurrentSession(currentMessages);
|
|
395
|
-
|
|
396
|
-
// Check for auto-compact
|
|
397
|
-
await this.checkAndPerformAutoCompact(
|
|
398
|
-
llmClient,
|
|
399
|
-
currentMessages,
|
|
400
|
-
currentTodos,
|
|
401
|
-
callbacks,
|
|
402
|
-
(updated) => { currentMessages = updated; }
|
|
403
|
-
);
|
|
404
|
-
|
|
405
|
-
// Completion - LLM's final response is already in currentMessages
|
|
406
|
-
sessionManager.autoSaveCurrentSession(currentMessages);
|
|
407
|
-
|
|
408
|
-
logger.exit('PlanExecutor.resumeTodoExecution', { success: true });
|
|
409
|
-
} catch (error) {
|
|
410
|
-
if (error instanceof Error && error.message === 'INTERRUPTED') {
|
|
411
|
-
logger.flow('Resume interrupted by user');
|
|
412
|
-
return;
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
logger.error('Resume execution failed', error as Error);
|
|
416
|
-
callbacks.setMessages((prev: Message[]) => [...prev, {
|
|
417
|
-
role: 'assistant' as const,
|
|
418
|
-
content: `Execution error:\n\n${error instanceof Error ? error.message : 'Unknown error'}`
|
|
419
|
-
}]);
|
|
420
|
-
} finally {
|
|
421
|
-
callbacks.setExecutionPhase('idle');
|
|
422
|
-
clearTodoCallbacks();
|
|
423
|
-
clearFinalResponseCallbacks();
|
|
424
|
-
clearDocsSearchLLMClientGetter();
|
|
425
|
-
this.currentLLMClient = null;
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
/**
|
|
430
|
-
* Auto Mode execution (direct execution based on planning)
|
|
431
|
-
* Classification logic removed - all requests handled via Plan Mode
|
|
432
|
-
*/
|
|
433
|
-
async executeAutoMode(
|
|
434
|
-
userMessage: string,
|
|
435
|
-
llmClient: LLMClient,
|
|
436
|
-
messages: Message[],
|
|
437
|
-
_todos: TodoItem[],
|
|
438
|
-
isInterruptedRef: { current: boolean },
|
|
439
|
-
callbacks: StateCallbacks
|
|
440
|
-
): Promise<void> {
|
|
441
|
-
logger.enter('PlanExecutor.executeAutoMode', { messageLength: userMessage.length });
|
|
442
|
-
|
|
443
|
-
// All requests are now handled via Plan Mode
|
|
444
|
-
// Classification and Direct Mode have been removed
|
|
445
|
-
await this.executePlanMode(userMessage, llmClient, messages, isInterruptedRef, callbacks);
|
|
446
|
-
|
|
447
|
-
logger.exit('PlanExecutor.executeAutoMode');
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
/**
|
|
451
|
-
* Perform conversation compaction
|
|
452
|
-
*/
|
|
453
|
-
async performCompact(
|
|
454
|
-
llmClient: LLMClient,
|
|
455
|
-
messages: Message[],
|
|
456
|
-
todos: TodoItem[],
|
|
457
|
-
callbacks: StateCallbacks
|
|
458
|
-
): Promise<CompactResult> {
|
|
459
|
-
logger.enter('PlanExecutor.performCompact', { messageCount: messages.length });
|
|
460
|
-
callbacks.setExecutionPhase('compacting');
|
|
461
|
-
callbacks.setCurrentActivity('Compacting conversation');
|
|
462
|
-
|
|
463
|
-
try {
|
|
464
|
-
const compactManager = new CompactManager(llmClient);
|
|
465
|
-
|
|
466
|
-
const result = await compactManager.compact(messages, {
|
|
467
|
-
todos,
|
|
468
|
-
workingDirectory: process.cwd(),
|
|
469
|
-
currentModel: configManager.getCurrentModel()?.name,
|
|
470
|
-
recentFiles: contextTracker.getRecentFiles(),
|
|
471
|
-
});
|
|
472
|
-
|
|
473
|
-
if (result.success && result.compactedSummary) {
|
|
474
|
-
const lastTwoMessages = messages.slice(-2);
|
|
475
|
-
|
|
476
|
-
const compactedBase = buildCompactedMessages(result.compactedSummary, {
|
|
477
|
-
workingDirectory: process.cwd(),
|
|
478
|
-
});
|
|
479
|
-
|
|
480
|
-
const finalMessages = [...compactedBase, ...lastTwoMessages];
|
|
481
|
-
|
|
482
|
-
// Estimate token count for compacted messages (for UI display)
|
|
483
|
-
const totalContent = finalMessages
|
|
484
|
-
.map(m => typeof m.content === 'string' ? m.content : JSON.stringify(m.content))
|
|
485
|
-
.join('');
|
|
486
|
-
const estimatedTokens = contextTracker.estimateTokens(totalContent);
|
|
487
|
-
|
|
488
|
-
callbacks.setMessages(finalMessages);
|
|
489
|
-
contextTracker.reset(estimatedTokens);
|
|
490
|
-
sessionManager.autoSaveCurrentSession(finalMessages);
|
|
491
|
-
|
|
492
|
-
emitCompact(result.originalMessageCount, finalMessages.length);
|
|
493
|
-
|
|
494
|
-
logger.flow('Compact completed successfully', { preservedMessages: 2 });
|
|
495
|
-
|
|
496
|
-
// Return with compactedMessages for caller to use
|
|
497
|
-
logger.exit('PlanExecutor.performCompact', { success: true });
|
|
498
|
-
return {
|
|
499
|
-
...result,
|
|
500
|
-
compactedMessages: finalMessages,
|
|
501
|
-
};
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
logger.exit('PlanExecutor.performCompact', { success: result.success });
|
|
505
|
-
return result;
|
|
506
|
-
|
|
507
|
-
} catch (error) {
|
|
508
|
-
logger.error('Compact failed', error as Error);
|
|
509
|
-
return {
|
|
510
|
-
success: false,
|
|
511
|
-
originalMessageCount: messages.length,
|
|
512
|
-
newMessageCount: messages.length,
|
|
513
|
-
error: error instanceof Error ? error.message : 'Unknown error',
|
|
514
|
-
};
|
|
515
|
-
} finally {
|
|
516
|
-
callbacks.setExecutionPhase('idle');
|
|
517
|
-
callbacks.setCurrentActivity('Idle');
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
/**
|
|
522
|
-
* Check if auto-compaction is needed
|
|
523
|
-
*/
|
|
524
|
-
shouldAutoCompact(): boolean {
|
|
525
|
-
const model = configManager.getCurrentModel();
|
|
526
|
-
const maxTokens = model?.maxTokens || 128000;
|
|
527
|
-
return contextTracker.shouldTriggerAutoCompact(maxTokens);
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
/**
|
|
531
|
-
* Return context remaining percentage
|
|
532
|
-
*/
|
|
533
|
-
getContextRemainingPercent(): number {
|
|
534
|
-
const model = configManager.getCurrentModel();
|
|
535
|
-
const maxTokens = model?.maxTokens || 128000;
|
|
536
|
-
const usage = contextTracker.getContextUsage(maxTokens);
|
|
537
|
-
return usage.remainingPercentage;
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
/**
|
|
541
|
-
* Return context usage information
|
|
542
|
-
*/
|
|
543
|
-
getContextUsageInfo(): { tokens: number; percent: number } {
|
|
544
|
-
const model = configManager.getCurrentModel();
|
|
545
|
-
const maxTokens = model?.maxTokens || 128000;
|
|
546
|
-
const usage = contextTracker.getContextUsage(maxTokens);
|
|
547
|
-
return {
|
|
548
|
-
tokens: usage.currentTokens,
|
|
549
|
-
percent: usage.usagePercentage,
|
|
550
|
-
};
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
/**
|
|
554
|
-
* Setup TODO callbacks (internal helper)
|
|
555
|
-
* write_todos: Replace entire list approach
|
|
556
|
-
* final_response: Deliver final response (requires all TODOs completed)
|
|
557
|
-
*/
|
|
558
|
-
private setupTodoCallbacks(
|
|
559
|
-
currentTodos: TodoItem[],
|
|
560
|
-
callbacks: StateCallbacks,
|
|
561
|
-
updateLocalTodos: (todos: TodoItem[]) => void
|
|
562
|
-
): void {
|
|
563
|
-
// Mutable reference for getTodos callback
|
|
564
|
-
let todosRef = currentTodos;
|
|
565
|
-
|
|
566
|
-
// write_todos callback: Replace entire list
|
|
567
|
-
setTodoWriteCallback(async (newTodos: TodoInput[]) => {
|
|
568
|
-
// Find status changes for UI events
|
|
569
|
-
const oldStatusMap = new Map(todosRef.map(t => [t.id, t.status]));
|
|
570
|
-
|
|
571
|
-
// Convert to TodoItem format
|
|
572
|
-
const updatedTodos: TodoItem[] = newTodos.map(t => ({
|
|
573
|
-
id: t.id,
|
|
574
|
-
title: t.title,
|
|
575
|
-
status: t.status,
|
|
576
|
-
}));
|
|
577
|
-
|
|
578
|
-
// Emit events for status changes
|
|
579
|
-
for (const todo of updatedTodos) {
|
|
580
|
-
const oldStatus = oldStatusMap.get(todo.id);
|
|
581
|
-
if (oldStatus !== todo.status) {
|
|
582
|
-
if (todo.status === 'completed') {
|
|
583
|
-
emitTodoComplete(todo.title);
|
|
584
|
-
} else if (todo.status === 'failed') {
|
|
585
|
-
emitTodoFail(todo.title);
|
|
586
|
-
} else if (todo.status === 'in_progress') {
|
|
587
|
-
emitTodoStart(todo.title);
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
// Update both local ref and external state
|
|
593
|
-
todosRef = updatedTodos;
|
|
594
|
-
updateLocalTodos(updatedTodos);
|
|
595
|
-
callbacks.setTodos([...updatedTodos]);
|
|
596
|
-
|
|
597
|
-
return true;
|
|
598
|
-
});
|
|
599
|
-
|
|
600
|
-
// getTodos callback for final_response tool
|
|
601
|
-
setGetTodosCallback(() => todosRef);
|
|
602
|
-
|
|
603
|
-
// finalResponse callback - emit as assistant response
|
|
604
|
-
setFinalResponseCallback((message: string) => {
|
|
605
|
-
emitAssistantResponse(message);
|
|
606
|
-
});
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
/**
|
|
610
|
-
* Check and perform auto-compaction (internal helper)
|
|
611
|
-
*/
|
|
612
|
-
private async checkAndPerformAutoCompact(
|
|
613
|
-
llmClient: LLMClient,
|
|
614
|
-
currentMessages: Message[],
|
|
615
|
-
currentTodos: TodoItem[],
|
|
616
|
-
callbacks: StateCallbacks,
|
|
617
|
-
updateLocalMessages: (messages: Message[]) => void
|
|
618
|
-
): Promise<void> {
|
|
619
|
-
const model = configManager.getCurrentModel();
|
|
620
|
-
const maxTokens = model?.maxTokens || 128000;
|
|
621
|
-
|
|
622
|
-
if (contextTracker.shouldTriggerAutoCompact(maxTokens)) {
|
|
623
|
-
logger.flow('Auto-compact triggered during execution');
|
|
624
|
-
callbacks.setExecutionPhase('compacting');
|
|
625
|
-
callbacks.setCurrentActivity('Compacting context');
|
|
626
|
-
|
|
627
|
-
const compactManager = new CompactManager(llmClient);
|
|
628
|
-
const compactResult = await compactManager.compact(currentMessages, {
|
|
629
|
-
todos: currentTodos,
|
|
630
|
-
workingDirectory: process.cwd(),
|
|
631
|
-
});
|
|
632
|
-
|
|
633
|
-
if (compactResult.success && compactResult.compactedSummary) {
|
|
634
|
-
const lastTwoMessages = currentMessages.slice(-2);
|
|
635
|
-
const newMessages = [
|
|
636
|
-
...buildCompactedMessages(compactResult.compactedSummary, {
|
|
637
|
-
workingDirectory: process.cwd(),
|
|
638
|
-
}),
|
|
639
|
-
...lastTwoMessages,
|
|
640
|
-
];
|
|
641
|
-
updateLocalMessages(newMessages);
|
|
642
|
-
callbacks.setMessages([...newMessages]);
|
|
643
|
-
emitCompact(compactResult.originalMessageCount, compactResult.newMessageCount);
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
callbacks.setExecutionPhase('executing');
|
|
647
|
-
}
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
// Singleton instance (optional use)
|
|
652
|
-
export const planExecutor = new PlanExecutor();
|