orquesta-cli 0.1.13 → 0.1.15
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 +381 -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 +0 -58
- package/dist/core/git-auto-updater.d.ts.map +0 -1
- package/dist/core/git-auto-updater.js +0 -374
- 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,464 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Manager
|
|
3
|
-
*
|
|
4
|
-
* Save and restore conversation sessions to/from files
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import fs from 'fs/promises';
|
|
8
|
-
import path from 'path';
|
|
9
|
-
import { Message } from '../../types/index.js';
|
|
10
|
-
import { configManager } from '../config/config-manager.js';
|
|
11
|
-
import { PROJECTS_DIR } from '../../constants.js';
|
|
12
|
-
import { initializeJsonStreamLogger } from '../../utils/json-stream-logger.js';
|
|
13
|
-
import { logger } from '../../utils/logger.js';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Session metadata interface
|
|
17
|
-
*/
|
|
18
|
-
export interface SessionMetadata {
|
|
19
|
-
id: string;
|
|
20
|
-
name: string;
|
|
21
|
-
createdAt: string;
|
|
22
|
-
updatedAt: string;
|
|
23
|
-
messageCount: number;
|
|
24
|
-
model: string;
|
|
25
|
-
endpoint: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Log entry for session restoration (matches PlanExecuteApp.tsx LogEntry)
|
|
30
|
-
*/
|
|
31
|
-
export interface SessionLogEntry {
|
|
32
|
-
id: string;
|
|
33
|
-
type: string;
|
|
34
|
-
content: string;
|
|
35
|
-
details?: string;
|
|
36
|
-
toolArgs?: Record<string, unknown>;
|
|
37
|
-
success?: boolean;
|
|
38
|
-
items?: string[];
|
|
39
|
-
diff?: string[];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* TODO item for session restoration
|
|
44
|
-
*/
|
|
45
|
-
export interface SessionTodoItem {
|
|
46
|
-
id: string;
|
|
47
|
-
title: string;
|
|
48
|
-
description?: string;
|
|
49
|
-
status: 'pending' | 'in_progress' | 'completed' | 'failed';
|
|
50
|
-
result?: string;
|
|
51
|
-
error?: string;
|
|
52
|
-
requiresDocsSearch?: boolean;
|
|
53
|
-
dependencies?: string[];
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Session data interface
|
|
58
|
-
*/
|
|
59
|
-
export interface SessionData {
|
|
60
|
-
metadata: SessionMetadata;
|
|
61
|
-
messages: Message[];
|
|
62
|
-
logEntries?: SessionLogEntry[]; // Optional for backward compatibility
|
|
63
|
-
todos?: SessionTodoItem[]; // Only in-progress todos are saved
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Session summary interface (for list display)
|
|
68
|
-
*/
|
|
69
|
-
export interface SessionSummary {
|
|
70
|
-
id: string;
|
|
71
|
-
name: string;
|
|
72
|
-
createdAt: string;
|
|
73
|
-
updatedAt: string;
|
|
74
|
-
messageCount: number;
|
|
75
|
-
model: string;
|
|
76
|
-
firstMessage?: string;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Session Manager class
|
|
81
|
-
*/
|
|
82
|
-
export class SessionManager {
|
|
83
|
-
private currentSessionId: string | null = null;
|
|
84
|
-
private currentSessionCreatedAt: string | null = null;
|
|
85
|
-
private isSaving: boolean = false;
|
|
86
|
-
|
|
87
|
-
constructor() {
|
|
88
|
-
// Generate a new session ID for this runtime instance
|
|
89
|
-
this.currentSessionId = `session-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
|
|
90
|
-
this.currentSessionCreatedAt = new Date().toISOString();
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Get project-specific sessions directory based on current working directory
|
|
95
|
-
*/
|
|
96
|
-
private getSessionsDir(): string {
|
|
97
|
-
// Get current working directory and sanitize it for use in path
|
|
98
|
-
// Replace '/' with '-' and remove leading '-' if present (for absolute paths)
|
|
99
|
-
const cwd = process.cwd().replace(/\//g, '-').replace(/^-/, '');
|
|
100
|
-
return path.join(PROJECTS_DIR, cwd);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Normalize messages for saving: include tool_calls, tool_call_id, name fields
|
|
105
|
-
*/
|
|
106
|
-
private normalizeMessages(messages: Message[]): Message[] {
|
|
107
|
-
return messages.map(msg => {
|
|
108
|
-
const normalized: Message = {
|
|
109
|
-
role: msg.role,
|
|
110
|
-
content: msg.content,
|
|
111
|
-
};
|
|
112
|
-
// Include tool_calls if present (assistant message)
|
|
113
|
-
if (msg.tool_calls && msg.tool_calls.length > 0) {
|
|
114
|
-
normalized.tool_calls = msg.tool_calls;
|
|
115
|
-
}
|
|
116
|
-
// Include tool_call_id if present (tool message)
|
|
117
|
-
if (msg.tool_call_id) {
|
|
118
|
-
normalized.tool_call_id = msg.tool_call_id;
|
|
119
|
-
}
|
|
120
|
-
// Include name if present (tool message)
|
|
121
|
-
if (msg.name) {
|
|
122
|
-
normalized.name = msg.name;
|
|
123
|
-
}
|
|
124
|
-
return normalized;
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Validate tool messages: remove orphaned tool messages that have no matching tool_calls
|
|
130
|
-
* This fixes sessions saved before tool_calls were properly persisted
|
|
131
|
-
*/
|
|
132
|
-
private validateToolMessages(messages: Message[]): Message[] {
|
|
133
|
-
// Collect all valid tool_call_ids from assistant messages with tool_calls
|
|
134
|
-
const validToolCallIds = new Set<string>();
|
|
135
|
-
for (const msg of messages) {
|
|
136
|
-
if (msg.role === 'assistant' && msg.tool_calls) {
|
|
137
|
-
for (const tc of msg.tool_calls) {
|
|
138
|
-
validToolCallIds.add(tc.id);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Filter out tool messages with invalid tool_call_ids
|
|
144
|
-
const validated = messages.filter(msg => {
|
|
145
|
-
// Keep non-tool messages
|
|
146
|
-
if (msg.role !== 'tool') {
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
// For tool messages, check if tool_call_id exists and is valid
|
|
150
|
-
if (msg.tool_call_id && validToolCallIds.has(msg.tool_call_id)) {
|
|
151
|
-
return true;
|
|
152
|
-
}
|
|
153
|
-
// Remove orphaned tool messages
|
|
154
|
-
logger.warn('Removing orphaned tool message', { tool_call_id: msg.tool_call_id });
|
|
155
|
-
return false;
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
return validated;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Initialize session directory
|
|
163
|
-
*/
|
|
164
|
-
async ensureSessionsDir(): Promise<void> {
|
|
165
|
-
const sessionsDir = this.getSessionsDir();
|
|
166
|
-
try {
|
|
167
|
-
await fs.access(sessionsDir);
|
|
168
|
-
} catch {
|
|
169
|
-
await fs.mkdir(sessionsDir, { recursive: true });
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Save session
|
|
175
|
-
*/
|
|
176
|
-
async saveSession(name: string, messages: Message[]): Promise<string> {
|
|
177
|
-
logger.enter('saveSession', { name, messageCount: messages.length });
|
|
178
|
-
await this.ensureSessionsDir();
|
|
179
|
-
|
|
180
|
-
// Generate session ID
|
|
181
|
-
const sessionId = `session-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
|
|
182
|
-
|
|
183
|
-
// Get current model info
|
|
184
|
-
const endpoint = configManager.getCurrentEndpoint();
|
|
185
|
-
const model = configManager.getCurrentModel();
|
|
186
|
-
|
|
187
|
-
// Normalize messages (include tool_calls, tool_call_id)
|
|
188
|
-
const normalizedMessages = this.normalizeMessages(messages);
|
|
189
|
-
|
|
190
|
-
// Create session data
|
|
191
|
-
const sessionData: SessionData = {
|
|
192
|
-
metadata: {
|
|
193
|
-
id: sessionId,
|
|
194
|
-
name: name,
|
|
195
|
-
createdAt: new Date().toISOString(),
|
|
196
|
-
updatedAt: new Date().toISOString(),
|
|
197
|
-
messageCount: messages.length,
|
|
198
|
-
model: model?.id || 'unknown',
|
|
199
|
-
endpoint: endpoint?.baseUrl || 'unknown',
|
|
200
|
-
},
|
|
201
|
-
messages: normalizedMessages,
|
|
202
|
-
};
|
|
203
|
-
|
|
204
|
-
// Save to file
|
|
205
|
-
const sessionsDir = this.getSessionsDir();
|
|
206
|
-
const filePath = path.join(sessionsDir, `${sessionId}.json`);
|
|
207
|
-
await fs.writeFile(filePath, JSON.stringify(sessionData, null, 2), 'utf-8');
|
|
208
|
-
|
|
209
|
-
logger.exit('saveSession', { sessionId, filePath });
|
|
210
|
-
return sessionId;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Load session
|
|
215
|
-
*/
|
|
216
|
-
async loadSession(sessionId: string): Promise<SessionData | null> {
|
|
217
|
-
logger.enter('loadSession', { sessionId });
|
|
218
|
-
await this.ensureSessionsDir();
|
|
219
|
-
|
|
220
|
-
const sessionsDir = this.getSessionsDir();
|
|
221
|
-
const filePath = path.join(sessionsDir, `${sessionId}.json`);
|
|
222
|
-
|
|
223
|
-
try {
|
|
224
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
225
|
-
const sessionData = JSON.parse(content) as SessionData;
|
|
226
|
-
|
|
227
|
-
// Validate and clean messages: remove orphaned tool messages (tool_call_id without matching tool_calls)
|
|
228
|
-
const validatedMessages = this.validateToolMessages(sessionData.messages);
|
|
229
|
-
sessionData.messages = validatedMessages;
|
|
230
|
-
sessionData.metadata.messageCount = validatedMessages.length;
|
|
231
|
-
|
|
232
|
-
// Update updatedAt timestamp
|
|
233
|
-
sessionData.metadata.updatedAt = new Date().toISOString();
|
|
234
|
-
await fs.writeFile(filePath, JSON.stringify(sessionData, null, 2), 'utf-8');
|
|
235
|
-
|
|
236
|
-
// Set current session ID to loaded session (so future conversation is saved to this session)
|
|
237
|
-
this.currentSessionId = sessionData.metadata.id;
|
|
238
|
-
this.currentSessionCreatedAt = sessionData.metadata.createdAt;
|
|
239
|
-
|
|
240
|
-
// Reinitialize logger to use this session's log file (append mode)
|
|
241
|
-
await initializeJsonStreamLogger(sessionData.metadata.id, true);
|
|
242
|
-
|
|
243
|
-
logger.exit('loadSession', { sessionId, messageCount: sessionData.messages.length });
|
|
244
|
-
return sessionData;
|
|
245
|
-
} catch (error) {
|
|
246
|
-
logger.error('Failed to load session', { sessionId, error });
|
|
247
|
-
return null;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Get list of all sessions
|
|
253
|
-
*/
|
|
254
|
-
async listSessions(): Promise<SessionSummary[]> {
|
|
255
|
-
logger.enter('listSessions', { sessionsDir: this.getSessionsDir() });
|
|
256
|
-
await this.ensureSessionsDir();
|
|
257
|
-
|
|
258
|
-
try {
|
|
259
|
-
const sessionsDir = this.getSessionsDir();
|
|
260
|
-
const files = await fs.readdir(sessionsDir);
|
|
261
|
-
// Filter to session files only (exclude _log.json, _error.json)
|
|
262
|
-
const sessionFiles = files.filter((f) =>
|
|
263
|
-
f.endsWith('.json') &&
|
|
264
|
-
!f.endsWith('_log.json') &&
|
|
265
|
-
!f.endsWith('_error.json')
|
|
266
|
-
);
|
|
267
|
-
|
|
268
|
-
const sessions: SessionSummary[] = [];
|
|
269
|
-
|
|
270
|
-
for (const file of sessionFiles) {
|
|
271
|
-
try {
|
|
272
|
-
const filePath = path.join(sessionsDir, file);
|
|
273
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
274
|
-
const sessionData = JSON.parse(content) as SessionData;
|
|
275
|
-
|
|
276
|
-
// Find first user message
|
|
277
|
-
const firstUserMessage = sessionData.messages.find((m) => m.role === 'user');
|
|
278
|
-
|
|
279
|
-
sessions.push({
|
|
280
|
-
id: sessionData.metadata.id,
|
|
281
|
-
name: sessionData.metadata.name,
|
|
282
|
-
createdAt: sessionData.metadata.createdAt,
|
|
283
|
-
updatedAt: sessionData.metadata.updatedAt,
|
|
284
|
-
messageCount: sessionData.metadata.messageCount,
|
|
285
|
-
model: sessionData.metadata.model,
|
|
286
|
-
firstMessage: firstUserMessage?.content?.substring(0, 50),
|
|
287
|
-
});
|
|
288
|
-
} catch (parseError) {
|
|
289
|
-
// Skip invalid session files
|
|
290
|
-
logger.warn(`Failed to parse session file ${file}:`, parseError);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
// Sort by most recent update
|
|
295
|
-
sessions.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
|
|
296
|
-
|
|
297
|
-
logger.exit('listSessions', { sessionCount: sessions.length });
|
|
298
|
-
return sessions;
|
|
299
|
-
} catch (error) {
|
|
300
|
-
logger.error('Failed to list sessions', { error });
|
|
301
|
-
return [];
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
/**
|
|
306
|
-
* Delete session
|
|
307
|
-
*/
|
|
308
|
-
async deleteSession(sessionId: string): Promise<boolean> {
|
|
309
|
-
logger.enter('deleteSession', { sessionId });
|
|
310
|
-
await this.ensureSessionsDir();
|
|
311
|
-
|
|
312
|
-
const sessionsDir = this.getSessionsDir();
|
|
313
|
-
const filePath = path.join(sessionsDir, `${sessionId}.json`);
|
|
314
|
-
|
|
315
|
-
try {
|
|
316
|
-
await fs.unlink(filePath);
|
|
317
|
-
logger.exit('deleteSession', { sessionId, success: true });
|
|
318
|
-
return true;
|
|
319
|
-
} catch (error) {
|
|
320
|
-
logger.error('Failed to delete session', { sessionId, error });
|
|
321
|
-
return false;
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* Find session by name
|
|
327
|
-
*/
|
|
328
|
-
async findSessionByName(name: string): Promise<SessionSummary | null> {
|
|
329
|
-
const sessions = await this.listSessions();
|
|
330
|
-
return sessions.find((s) => s.name === name) || null;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* Update session (add messages)
|
|
335
|
-
*/
|
|
336
|
-
async updateSession(sessionId: string, messages: Message[]): Promise<boolean> {
|
|
337
|
-
logger.enter('updateSession', { sessionId, messageCount: messages.length });
|
|
338
|
-
await this.ensureSessionsDir();
|
|
339
|
-
|
|
340
|
-
const sessionData = await this.loadSession(sessionId);
|
|
341
|
-
if (!sessionData) {
|
|
342
|
-
logger.warn('Session not found for update', { sessionId });
|
|
343
|
-
return false;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// Normalize messages (include tool_calls, tool_call_id)
|
|
347
|
-
const normalizedMessages = this.normalizeMessages(messages);
|
|
348
|
-
|
|
349
|
-
sessionData.messages = normalizedMessages;
|
|
350
|
-
sessionData.metadata.messageCount = messages.length;
|
|
351
|
-
sessionData.metadata.updatedAt = new Date().toISOString();
|
|
352
|
-
|
|
353
|
-
const sessionsDir = this.getSessionsDir();
|
|
354
|
-
const filePath = path.join(sessionsDir, `${sessionId}.json`);
|
|
355
|
-
await fs.writeFile(filePath, JSON.stringify(sessionData, null, 2), 'utf-8');
|
|
356
|
-
|
|
357
|
-
logger.exit('updateSession', { sessionId, messageCount: messages.length });
|
|
358
|
-
return true;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
// Current log entries for auto-save (set by UI)
|
|
362
|
-
private currentLogEntries: SessionLogEntry[] = [];
|
|
363
|
-
// Current todos for auto-save (set by UI)
|
|
364
|
-
private currentTodos: SessionTodoItem[] = [];
|
|
365
|
-
|
|
366
|
-
/**
|
|
367
|
-
* Set current log entries for auto-save
|
|
368
|
-
*/
|
|
369
|
-
setLogEntries(logEntries: SessionLogEntry[]): void {
|
|
370
|
-
this.currentLogEntries = logEntries;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* Set current todos for auto-save (only saves in-progress/pending todos)
|
|
375
|
-
*/
|
|
376
|
-
setTodos(todos: SessionTodoItem[]): void {
|
|
377
|
-
// Only save todos that are not completed (pending or in_progress)
|
|
378
|
-
this.currentTodos = todos.filter(t => t.status === 'pending' || t.status === 'in_progress');
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
/**
|
|
382
|
-
* Auto-save current session (called whenever messages are added)
|
|
383
|
-
* Fire-and-forget async save (non-blocking)
|
|
384
|
-
*/
|
|
385
|
-
autoSaveCurrentSession(messages: Message[], logEntries?: SessionLogEntry[]): void {
|
|
386
|
-
// Skip if already saving or no messages
|
|
387
|
-
if (this.isSaving || !this.currentSessionId || messages.length === 0) {
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
// Update log entries if provided
|
|
392
|
-
if (logEntries) {
|
|
393
|
-
this.currentLogEntries = logEntries;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
// Fire-and-forget: execute async save in background
|
|
397
|
-
this.performAutoSave(messages).catch((err: unknown) => {
|
|
398
|
-
// Silently log errors without blocking
|
|
399
|
-
const error = err as Error;
|
|
400
|
-
logger.warn('Auto-save failed:', { error: error.message || 'Unknown error' });
|
|
401
|
-
});
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
/**
|
|
405
|
-
* Perform actual save operation (internal method)
|
|
406
|
-
*/
|
|
407
|
-
private async performAutoSave(messages: Message[]): Promise<void> {
|
|
408
|
-
this.isSaving = true;
|
|
409
|
-
logger.flow('Auto-saving session', { sessionId: this.currentSessionId, messageCount: messages.length });
|
|
410
|
-
|
|
411
|
-
try {
|
|
412
|
-
await this.ensureSessionsDir();
|
|
413
|
-
|
|
414
|
-
// Get current model info
|
|
415
|
-
const endpoint = configManager.getCurrentEndpoint();
|
|
416
|
-
const model = configManager.getCurrentModel();
|
|
417
|
-
|
|
418
|
-
// Normalize messages (include tool_calls, tool_call_id)
|
|
419
|
-
const normalizedMessages = this.normalizeMessages(messages);
|
|
420
|
-
|
|
421
|
-
// Create/update session data
|
|
422
|
-
const sessionData: SessionData = {
|
|
423
|
-
metadata: {
|
|
424
|
-
id: this.currentSessionId!,
|
|
425
|
-
name: `${this.currentSessionId}`,
|
|
426
|
-
createdAt: this.currentSessionCreatedAt || new Date().toISOString(),
|
|
427
|
-
updatedAt: new Date().toISOString(),
|
|
428
|
-
messageCount: messages.length,
|
|
429
|
-
model: model?.id || 'unknown',
|
|
430
|
-
endpoint: endpoint?.baseUrl || 'unknown',
|
|
431
|
-
},
|
|
432
|
-
messages: normalizedMessages,
|
|
433
|
-
logEntries: this.currentLogEntries, // Include log entries
|
|
434
|
-
todos: this.currentTodos.length > 0 ? this.currentTodos : undefined, // Only include if there are pending/in-progress todos
|
|
435
|
-
};
|
|
436
|
-
|
|
437
|
-
// Save to file (overwrite)
|
|
438
|
-
const sessionsDir = this.getSessionsDir();
|
|
439
|
-
const filePath = path.join(sessionsDir, `${this.currentSessionId!}.json`);
|
|
440
|
-
await fs.writeFile(filePath, JSON.stringify(sessionData, null, 2), 'utf-8');
|
|
441
|
-
} finally {
|
|
442
|
-
this.isSaving = false;
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
/**
|
|
447
|
-
* Get current session ID
|
|
448
|
-
*/
|
|
449
|
-
getCurrentSessionId(): string | null {
|
|
450
|
-
return this.currentSessionId;
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
/**
|
|
454
|
-
* Set current session ID
|
|
455
|
-
*/
|
|
456
|
-
setCurrentSessionId(sessionId: string): void {
|
|
457
|
-
this.currentSessionId = sessionId;
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
/**
|
|
462
|
-
* SessionManager singleton instance
|
|
463
|
-
*/
|
|
464
|
-
export const sessionManager = new SessionManager();
|