@mseep/claudian 2.0.25
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/.env.local.example +2 -0
- package/.github/workflows/ci.yml +59 -0
- package/.github/workflows/claude-code-review.yml +57 -0
- package/.github/workflows/claude.yml +50 -0
- package/.github/workflows/duplicate-issues.yml +22 -0
- package/.github/workflows/release.yml +73 -0
- package/.github/workflows/stale.yml +21 -0
- package/.node-version +1 -0
- package/AGENTS.md +3 -0
- package/CLAUDE.md +80 -0
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/assets/Preview.png +0 -0
- package/assets/sponsors/MOMA.png +0 -0
- package/bun.lock +1618 -0
- package/esbuild.config.mjs +195 -0
- package/eslint.config.mjs +143 -0
- package/jest.config.js +41 -0
- package/main.js +104915 -0
- package/manifest.json +10 -0
- package/package.json +65 -0
- package/scripts/build-css.mjs +119 -0
- package/scripts/build.mjs +19 -0
- package/scripts/postinstall.mjs +25 -0
- package/scripts/rendererSafeUnref.js +205 -0
- package/scripts/run-jest.js +19 -0
- package/scripts/sync-version.js +16 -0
- package/src/app/settings/ClaudianSettingsStorage.ts +435 -0
- package/src/app/settings/defaultSettings.ts +54 -0
- package/src/app/storage/SharedStorageService.ts +106 -0
- package/src/core/CLAUDE.md +84 -0
- package/src/core/auxiliary/AuxQueryRunner.ts +11 -0
- package/src/core/auxiliary/QueryBackedInlineEditService.ts +73 -0
- package/src/core/auxiliary/QueryBackedInstructionRefineService.ts +78 -0
- package/src/core/auxiliary/QueryBackedTitleGenerationService.ts +90 -0
- package/src/core/bootstrap/SessionStorage.ts +179 -0
- package/src/core/bootstrap/StoragePaths.ts +7 -0
- package/src/core/bootstrap/storage.ts +20 -0
- package/src/core/commands/builtInCommands.ts +141 -0
- package/src/core/mcp/McpConfigParser.ts +102 -0
- package/src/core/mcp/McpServerManager.ts +119 -0
- package/src/core/mcp/McpTester.ts +310 -0
- package/src/core/prompt/inlineEdit.ts +252 -0
- package/src/core/prompt/instructionRefine.ts +72 -0
- package/src/core/prompt/mainAgent.ts +213 -0
- package/src/core/prompt/titleGeneration.ts +44 -0
- package/src/core/providers/ProviderRegistry.ts +253 -0
- package/src/core/providers/ProviderSettingsCoordinator.ts +434 -0
- package/src/core/providers/ProviderWorkspaceRegistry.ts +119 -0
- package/src/core/providers/commands/ProviderCommandCatalog.ts +21 -0
- package/src/core/providers/commands/ProviderCommandEntry.ts +33 -0
- package/src/core/providers/commands/hiddenCommands.ts +74 -0
- package/src/core/providers/modelRouting.ts +17 -0
- package/src/core/providers/modelSelection.ts +72 -0
- package/src/core/providers/providerConfig.ts +34 -0
- package/src/core/providers/providerEnvironment.ts +364 -0
- package/src/core/providers/types.ts +544 -0
- package/src/core/runtime/ChatRuntime.ts +66 -0
- package/src/core/runtime/QueuedTurn.ts +97 -0
- package/src/core/runtime/types.ts +118 -0
- package/src/core/security/ApprovalManager.ts +142 -0
- package/src/core/storage/HomeFileAdapter.ts +75 -0
- package/src/core/storage/VaultFileAdapter.ts +132 -0
- package/src/core/tools/todo.ts +65 -0
- package/src/core/tools/toolIcons.ts +80 -0
- package/src/core/tools/toolInput.ts +119 -0
- package/src/core/tools/toolNames.ts +149 -0
- package/src/core/tools/toolResultContent.ts +26 -0
- package/src/core/types/agent.ts +28 -0
- package/src/core/types/chat.ts +177 -0
- package/src/core/types/diff.ts +31 -0
- package/src/core/types/index.ts +78 -0
- package/src/core/types/mcp.ts +97 -0
- package/src/core/types/plugins.ts +9 -0
- package/src/core/types/provider.ts +1 -0
- package/src/core/types/settings.ts +152 -0
- package/src/core/types/tools.ts +80 -0
- package/src/features/chat/CLAUDE.md +136 -0
- package/src/features/chat/ClaudianView.ts +762 -0
- package/src/features/chat/constants.ts +114 -0
- package/src/features/chat/controllers/BrowserSelectionController.ts +295 -0
- package/src/features/chat/controllers/CanvasSelectionController.ts +142 -0
- package/src/features/chat/controllers/ConversationController.ts +1103 -0
- package/src/features/chat/controllers/InputController.ts +1707 -0
- package/src/features/chat/controllers/NavigationController.ts +209 -0
- package/src/features/chat/controllers/SelectionController.ts +430 -0
- package/src/features/chat/controllers/StreamController.ts +1560 -0
- package/src/features/chat/controllers/contextRowVisibility.ts +18 -0
- package/src/features/chat/rendering/DiffRenderer.ts +134 -0
- package/src/features/chat/rendering/InlineAskUserQuestion.ts +702 -0
- package/src/features/chat/rendering/InlineExitPlanMode.ts +263 -0
- package/src/features/chat/rendering/InlinePlanApproval.ts +183 -0
- package/src/features/chat/rendering/MessageRenderer.ts +907 -0
- package/src/features/chat/rendering/SubagentRenderer.ts +678 -0
- package/src/features/chat/rendering/ThinkingBlockRenderer.ts +126 -0
- package/src/features/chat/rendering/TodoListRenderer.ts +5 -0
- package/src/features/chat/rendering/ToolCallRenderer.ts +1161 -0
- package/src/features/chat/rendering/WriteEditRenderer.ts +232 -0
- package/src/features/chat/rendering/collapsible.ts +101 -0
- package/src/features/chat/rendering/subagentLifecycleResolution.ts +25 -0
- package/src/features/chat/rendering/todoUtils.ts +29 -0
- package/src/features/chat/rewind.ts +31 -0
- package/src/features/chat/services/BangBashService.ts +56 -0
- package/src/features/chat/services/SubagentManager.ts +1107 -0
- package/src/features/chat/state/ChatState.ts +436 -0
- package/src/features/chat/state/types.ts +138 -0
- package/src/features/chat/tabs/Tab.ts +1886 -0
- package/src/features/chat/tabs/TabBar.ts +179 -0
- package/src/features/chat/tabs/TabManager.ts +1021 -0
- package/src/features/chat/tabs/providerResolution.ts +34 -0
- package/src/features/chat/tabs/types.ts +287 -0
- package/src/features/chat/ui/BangBashModeManager.ts +121 -0
- package/src/features/chat/ui/FileContext.ts +385 -0
- package/src/features/chat/ui/ImageContext.ts +366 -0
- package/src/features/chat/ui/InputToolbar.ts +1244 -0
- package/src/features/chat/ui/InstructionModeManager.ts +158 -0
- package/src/features/chat/ui/NavigationSidebar.ts +126 -0
- package/src/features/chat/ui/StatusPanel.ts +589 -0
- package/src/features/chat/ui/file-context/state/FileContextState.ts +83 -0
- package/src/features/chat/ui/file-context/view/FileChipsView.ts +70 -0
- package/src/features/chat/ui/textareaResize.ts +47 -0
- package/src/features/chat/utils/usageInfo.ts +26 -0
- package/src/features/inline-edit/ui/InlineEditModal.ts +895 -0
- package/src/features/inline-edit/ui/inlineEditMarkdownPreview.ts +55 -0
- package/src/features/settings/ClaudianSettings.ts +672 -0
- package/src/features/settings/keyboardNavigation.ts +60 -0
- package/src/features/settings/ui/EnvSnippetManager.ts +430 -0
- package/src/features/settings/ui/EnvironmentSettingsSection.ts +85 -0
- package/src/features/settings/ui/McpServerModal.ts +335 -0
- package/src/features/settings/ui/McpSettingsManager.ts +400 -0
- package/src/features/settings/ui/McpTestModal.ts +346 -0
- package/src/i18n/constants.ts +58 -0
- package/src/i18n/i18n.ts +140 -0
- package/src/i18n/locales/de.json +322 -0
- package/src/i18n/locales/en.json +322 -0
- package/src/i18n/locales/es.json +322 -0
- package/src/i18n/locales/fr.json +322 -0
- package/src/i18n/locales/ja.json +322 -0
- package/src/i18n/locales/ko.json +322 -0
- package/src/i18n/locales/pt.json +322 -0
- package/src/i18n/locales/ru.json +322 -0
- package/src/i18n/locales/zh-CN.json +322 -0
- package/src/i18n/locales/zh-TW.json +322 -0
- package/src/i18n/types.ts +248 -0
- package/src/main.ts +772 -0
- package/src/providers/acp/AcpClientConnection.ts +361 -0
- package/src/providers/acp/AcpJsonRpcTransport.ts +427 -0
- package/src/providers/acp/AcpSessionConfig.ts +139 -0
- package/src/providers/acp/AcpSessionUpdateNormalizer.ts +371 -0
- package/src/providers/acp/AcpSubprocess.ts +155 -0
- package/src/providers/acp/AcpToolStreamAdapter.ts +132 -0
- package/src/providers/acp/buildAcpUsageInfo.ts +41 -0
- package/src/providers/acp/index.ts +9 -0
- package/src/providers/acp/methodNames.ts +50 -0
- package/src/providers/acp/types.ts +566 -0
- package/src/providers/claude/CLAUDE.md +78 -0
- package/src/providers/claude/agents/AgentManager.ts +225 -0
- package/src/providers/claude/agents/AgentStorage.ts +101 -0
- package/src/providers/claude/app/ClaudeWorkspaceServices.ts +90 -0
- package/src/providers/claude/auxiliary/ClaudeInlineEditService.ts +122 -0
- package/src/providers/claude/auxiliary/ClaudeInstructionRefineService.ts +90 -0
- package/src/providers/claude/auxiliary/ClaudeTitleGenerationService.ts +129 -0
- package/src/providers/claude/auxiliary/extractAssistantText.ts +28 -0
- package/src/providers/claude/capabilities.ts +17 -0
- package/src/providers/claude/cli/findClaudeCLIPath.ts +261 -0
- package/src/providers/claude/commands/ClaudeCommandCatalog.ts +149 -0
- package/src/providers/claude/commands/probeRuntimeCommands.ts +86 -0
- package/src/providers/claude/env/ClaudeSettingsReconciler.ts +90 -0
- package/src/providers/claude/env/claudeModelEnv.ts +86 -0
- package/src/providers/claude/history/ClaudeConversationHistoryService.ts +446 -0
- package/src/providers/claude/history/ClaudeHistoryStore.ts +170 -0
- package/src/providers/claude/history/sdkAsyncSubagent.ts +92 -0
- package/src/providers/claude/history/sdkBranchFilter.ts +271 -0
- package/src/providers/claude/history/sdkHistoryTypes.ts +61 -0
- package/src/providers/claude/history/sdkMessageParsing.ts +413 -0
- package/src/providers/claude/history/sdkSessionPaths.ts +98 -0
- package/src/providers/claude/history/sdkSubagentSidecar.ts +261 -0
- package/src/providers/claude/hooks/SubagentHooks.ts +31 -0
- package/src/providers/claude/modelLabels.ts +77 -0
- package/src/providers/claude/modelOptions.ts +113 -0
- package/src/providers/claude/modelSelection.ts +17 -0
- package/src/providers/claude/plugins/PluginManager.ts +194 -0
- package/src/providers/claude/prompt/ClaudeTurnEncoder.ts +46 -0
- package/src/providers/claude/registration.ts +39 -0
- package/src/providers/claude/runtime/ClaudeApprovalHandler.ts +153 -0
- package/src/providers/claude/runtime/ClaudeChatRuntime.ts +1812 -0
- package/src/providers/claude/runtime/ClaudeCliResolver.ts +94 -0
- package/src/providers/claude/runtime/ClaudeDynamicUpdates.ts +164 -0
- package/src/providers/claude/runtime/ClaudeMessageChannel.ts +209 -0
- package/src/providers/claude/runtime/ClaudeQueryOptionsBuilder.ts +315 -0
- package/src/providers/claude/runtime/ClaudeRewindService.ts +220 -0
- package/src/providers/claude/runtime/ClaudeSessionManager.ts +92 -0
- package/src/providers/claude/runtime/ClaudeTaskResultInterpreter.ts +172 -0
- package/src/providers/claude/runtime/ClaudeUserMessageFactory.ts +83 -0
- package/src/providers/claude/runtime/claudeColdStartQuery.ts +152 -0
- package/src/providers/claude/runtime/customSpawn.ts +87 -0
- package/src/providers/claude/runtime/types.ts +134 -0
- package/src/providers/claude/sdk/messages.ts +17 -0
- package/src/providers/claude/sdk/toolResultContent.ts +4 -0
- package/src/providers/claude/sdk/typeGuards.ts +14 -0
- package/src/providers/claude/sdk/types.ts +15 -0
- package/src/providers/claude/security/ClaudePermissionUpdates.ts +44 -0
- package/src/providers/claude/settings.ts +138 -0
- package/src/providers/claude/storage/AgentVaultStorage.ts +101 -0
- package/src/providers/claude/storage/CCSettingsStorage.ts +153 -0
- package/src/providers/claude/storage/ClaudianSettingsStorage.ts +6 -0
- package/src/providers/claude/storage/McpStorage.ts +139 -0
- package/src/providers/claude/storage/SessionStorage.ts +5 -0
- package/src/providers/claude/storage/SkillStorage.ts +61 -0
- package/src/providers/claude/storage/SlashCommandStorage.ts +96 -0
- package/src/providers/claude/storage/StorageService.ts +185 -0
- package/src/providers/claude/stream/toolInputStreamState.ts +318 -0
- package/src/providers/claude/stream/transformClaudeMessage.ts +586 -0
- package/src/providers/claude/types/agent.ts +2 -0
- package/src/providers/claude/types/models.ts +168 -0
- package/src/providers/claude/types/plugins.ts +14 -0
- package/src/providers/claude/types/providerState.ts +16 -0
- package/src/providers/claude/types/settings.ts +98 -0
- package/src/providers/claude/ui/AgentSettings.ts +389 -0
- package/src/providers/claude/ui/ClaudeChatUIConfig.ts +113 -0
- package/src/providers/claude/ui/ClaudeSettingsTab.ts +407 -0
- package/src/providers/claude/ui/PluginSettingsManager.ts +149 -0
- package/src/providers/claude/ui/SlashCommandSettings.ts +527 -0
- package/src/providers/codex/CLAUDE.md +64 -0
- package/src/providers/codex/agents/CodexAgentMentionProvider.ts +33 -0
- package/src/providers/codex/app/CodexWorkspaceServices.ts +76 -0
- package/src/providers/codex/auxiliary/CodexInlineEditService.ts +9 -0
- package/src/providers/codex/auxiliary/CodexInstructionRefineService.ts +9 -0
- package/src/providers/codex/auxiliary/CodexTaskResultInterpreter.ts +29 -0
- package/src/providers/codex/auxiliary/CodexTitleGenerationService.ts +22 -0
- package/src/providers/codex/capabilities.ts +16 -0
- package/src/providers/codex/commands/CodexSkillCatalog.ts +180 -0
- package/src/providers/codex/env/CodexSettingsReconciler.ts +68 -0
- package/src/providers/codex/history/CodexConversationHistoryService.ts +212 -0
- package/src/providers/codex/history/CodexHistoryStore.ts +1672 -0
- package/src/providers/codex/modelOptions.ts +99 -0
- package/src/providers/codex/modelSelection.ts +17 -0
- package/src/providers/codex/normalization/codexSubagentNormalization.ts +227 -0
- package/src/providers/codex/normalization/codexToolNormalization.ts +390 -0
- package/src/providers/codex/prompt/encodeCodexTurn.ts +57 -0
- package/src/providers/codex/registration.ts +29 -0
- package/src/providers/codex/runtime/CodexAppServerProcess.ts +105 -0
- package/src/providers/codex/runtime/CodexAuxQueryRunner.ts +180 -0
- package/src/providers/codex/runtime/CodexBinaryLocator.ts +49 -0
- package/src/providers/codex/runtime/CodexChatRuntime.ts +1296 -0
- package/src/providers/codex/runtime/CodexCliResolver.ts +65 -0
- package/src/providers/codex/runtime/CodexExecutionTargetResolver.ts +104 -0
- package/src/providers/codex/runtime/CodexLaunchSpecBuilder.ts +85 -0
- package/src/providers/codex/runtime/CodexNotificationRouter.ts +1033 -0
- package/src/providers/codex/runtime/CodexPathMapper.ts +155 -0
- package/src/providers/codex/runtime/CodexRpcTransport.ts +171 -0
- package/src/providers/codex/runtime/CodexRuntimeContext.ts +109 -0
- package/src/providers/codex/runtime/CodexServerRequestRouter.ts +331 -0
- package/src/providers/codex/runtime/CodexSessionFileTail.ts +792 -0
- package/src/providers/codex/runtime/CodexSessionManager.ts +39 -0
- package/src/providers/codex/runtime/codexAppServerSupport.ts +58 -0
- package/src/providers/codex/runtime/codexAppServerTypes.ts +705 -0
- package/src/providers/codex/runtime/codexLaunchTypes.ts +30 -0
- package/src/providers/codex/settings.ts +236 -0
- package/src/providers/codex/skills/CodexSkillListingService.ts +173 -0
- package/src/providers/codex/storage/CodexSkillStorage.ts +250 -0
- package/src/providers/codex/storage/CodexSubagentStorage.ts +212 -0
- package/src/providers/codex/types/index.ts +16 -0
- package/src/providers/codex/types/models.ts +46 -0
- package/src/providers/codex/types/subagent.ts +23 -0
- package/src/providers/codex/ui/CodexChatUIConfig.ts +128 -0
- package/src/providers/codex/ui/CodexSettingsTab.ts +432 -0
- package/src/providers/codex/ui/CodexSkillSettings.ts +275 -0
- package/src/providers/codex/ui/CodexSubagentSettings.ts +400 -0
- package/src/providers/defaultProviderConfigs.ts +14 -0
- package/src/providers/index.ts +30 -0
- package/src/providers/opencode/agents/OpencodeAgentMentionProvider.ts +42 -0
- package/src/providers/opencode/app/OpencodeRuntimeCommandLoader.ts +67 -0
- package/src/providers/opencode/app/OpencodeWorkspaceServices.ts +55 -0
- package/src/providers/opencode/auxiliary/OpencodeInlineEditService.ts +13 -0
- package/src/providers/opencode/auxiliary/OpencodeInstructionRefineService.ts +12 -0
- package/src/providers/opencode/auxiliary/OpencodeTaskResultInterpreter.ts +29 -0
- package/src/providers/opencode/auxiliary/OpencodeTitleGenerationService.ts +27 -0
- package/src/providers/opencode/capabilities.ts +16 -0
- package/src/providers/opencode/commands/OpencodeCommandCatalog.ts +92 -0
- package/src/providers/opencode/discoveryState.ts +135 -0
- package/src/providers/opencode/env/OpencodeSettingsReconciler.ts +178 -0
- package/src/providers/opencode/history/OpencodeConversationHistoryService.ts +84 -0
- package/src/providers/opencode/history/OpencodeHistoryStore.ts +472 -0
- package/src/providers/opencode/history/OpencodeSqliteReader.ts +284 -0
- package/src/providers/opencode/internal/compareCollections.ts +72 -0
- package/src/providers/opencode/internal/providerProjection.ts +15 -0
- package/src/providers/opencode/models.ts +378 -0
- package/src/providers/opencode/modes.ts +150 -0
- package/src/providers/opencode/normalization/opencodeToolNormalization.ts +406 -0
- package/src/providers/opencode/registration.ts +27 -0
- package/src/providers/opencode/runtime/OpencodeAuxQueryRunner.ts +436 -0
- package/src/providers/opencode/runtime/OpencodeChatRuntime.ts +1603 -0
- package/src/providers/opencode/runtime/OpencodeCliResolver.ts +57 -0
- package/src/providers/opencode/runtime/OpencodeLaunchArtifacts.ts +231 -0
- package/src/providers/opencode/runtime/OpencodePaths.ts +113 -0
- package/src/providers/opencode/runtime/OpencodeRuntimeEnvironment.ts +18 -0
- package/src/providers/opencode/runtime/buildOpencodePrompt.ts +66 -0
- package/src/providers/opencode/settings.ts +427 -0
- package/src/providers/opencode/storage/OpencodeAgentStorage.ts +346 -0
- package/src/providers/opencode/types/agent.ts +37 -0
- package/src/providers/opencode/types/index.ts +9 -0
- package/src/providers/opencode/ui/OpencodeAgentSettings.ts +579 -0
- package/src/providers/opencode/ui/OpencodeChatUIConfig.ts +316 -0
- package/src/providers/opencode/ui/OpencodeSettingsTab.ts +674 -0
- package/src/providers/pi/app/PiRuntimeCommandLoader.ts +57 -0
- package/src/providers/pi/app/PiWorkspaceServices.ts +39 -0
- package/src/providers/pi/auxiliary/PiInlineEditService.ts +9 -0
- package/src/providers/pi/auxiliary/PiInstructionRefineService.ts +9 -0
- package/src/providers/pi/auxiliary/PiTaskResultInterpreter.ts +29 -0
- package/src/providers/pi/auxiliary/PiTitleGenerationService.ts +19 -0
- package/src/providers/pi/capabilities.ts +16 -0
- package/src/providers/pi/commands/PiCommandCatalog.ts +92 -0
- package/src/providers/pi/env/PiSettingsReconciler.ts +180 -0
- package/src/providers/pi/history/PiConversationHistoryService.ts +123 -0
- package/src/providers/pi/history/PiHistoryStore.ts +664 -0
- package/src/providers/pi/internal/compareCollections.ts +4 -0
- package/src/providers/pi/internal/providerProjection.ts +18 -0
- package/src/providers/pi/models.ts +302 -0
- package/src/providers/pi/normalizations/piEventNormalization.ts +211 -0
- package/src/providers/pi/normalizations/piToolNormalization.ts +97 -0
- package/src/providers/pi/registration.ts +30 -0
- package/src/providers/pi/runtime/PiAuxQueryRunner.ts +216 -0
- package/src/providers/pi/runtime/PiChatRuntime.ts +1064 -0
- package/src/providers/pi/runtime/PiCliResolver.ts +53 -0
- package/src/providers/pi/runtime/PiExtensionUiBridge.ts +161 -0
- package/src/providers/pi/runtime/PiJsonl.ts +71 -0
- package/src/providers/pi/runtime/PiLaunchSpec.ts +70 -0
- package/src/providers/pi/runtime/PiModelDiscoveryService.ts +92 -0
- package/src/providers/pi/runtime/PiRpcPayloads.ts +18 -0
- package/src/providers/pi/runtime/PiRpcTransport.ts +243 -0
- package/src/providers/pi/runtime/PiSubprocess.ts +159 -0
- package/src/providers/pi/runtime/buildPiPrompt.ts +62 -0
- package/src/providers/pi/runtime/buildPiUsageInfo.ts +69 -0
- package/src/providers/pi/settings.ts +468 -0
- package/src/providers/pi/types.ts +64 -0
- package/src/providers/pi/ui/ObsidianPiExtensionUiRenderer.ts +251 -0
- package/src/providers/pi/ui/PiChatUIConfig.ts +265 -0
- package/src/providers/pi/ui/PiExtensionUiRenderer.ts +12 -0
- package/src/providers/pi/ui/PiSettingsTab.ts +642 -0
- package/src/shared/components/ResumeSessionDropdown.ts +185 -0
- package/src/shared/components/SelectableDropdown.ts +140 -0
- package/src/shared/components/SelectionHighlight.ts +77 -0
- package/src/shared/components/SlashCommandDropdown.ts +421 -0
- package/src/shared/icons.ts +180 -0
- package/src/shared/mention/MentionDropdownController.ts +627 -0
- package/src/shared/mention/VaultMentionCache.ts +106 -0
- package/src/shared/mention/VaultMentionDataProvider.ts +51 -0
- package/src/shared/mention/types.ts +67 -0
- package/src/shared/modals/ConfirmModal.ts +60 -0
- package/src/shared/modals/ForkTargetModal.ts +47 -0
- package/src/shared/modals/InstructionConfirmModal.ts +281 -0
- package/src/style/CLAUDE.md +49 -0
- package/src/style/accessibility.css +40 -0
- package/src/style/base/animations.css +44 -0
- package/src/style/base/container.css +20 -0
- package/src/style/base/variables.css +46 -0
- package/src/style/base/visibility.css +15 -0
- package/src/style/components/code.css +97 -0
- package/src/style/components/context-footer.css +76 -0
- package/src/style/components/header.css +27 -0
- package/src/style/components/history.css +221 -0
- package/src/style/components/input.css +312 -0
- package/src/style/components/messages.css +262 -0
- package/src/style/components/nav-sidebar.css +58 -0
- package/src/style/components/status-panel.css +202 -0
- package/src/style/components/subagent.css +248 -0
- package/src/style/components/tabs.css +112 -0
- package/src/style/components/thinking.css +88 -0
- package/src/style/components/toolcalls.css +278 -0
- package/src/style/features/ask-user-question.css +315 -0
- package/src/style/features/diff.css +197 -0
- package/src/style/features/file-context.css +188 -0
- package/src/style/features/file-link.css +22 -0
- package/src/style/features/image-context.css +179 -0
- package/src/style/features/image-embed.css +40 -0
- package/src/style/features/image-modal.css +52 -0
- package/src/style/features/inline-edit.css +278 -0
- package/src/style/features/plan-mode.css +103 -0
- package/src/style/features/resume-session.css +119 -0
- package/src/style/features/slash-commands.css +91 -0
- package/src/style/index.css +63 -0
- package/src/style/modals/fork-target.css +21 -0
- package/src/style/modals/instruction.css +161 -0
- package/src/style/modals/mcp-modal.css +241 -0
- package/src/style/settings/agent-settings.css +2 -0
- package/src/style/settings/base.css +300 -0
- package/src/style/settings/env-snippets.css +366 -0
- package/src/style/settings/mcp-settings.css +211 -0
- package/src/style/settings/plugin-settings.css +164 -0
- package/src/style/settings/provider-model-picker.css +367 -0
- package/src/style/settings/slash-settings.css +16 -0
- package/src/style/toolbar/external-context.css +177 -0
- package/src/style/toolbar/mcp-selector.css +176 -0
- package/src/style/toolbar/mode-selector.css +19 -0
- package/src/style/toolbar/model-selector.css +99 -0
- package/src/style/toolbar/permission-toggle.css +56 -0
- package/src/style/toolbar/service-tier-toggle.css +39 -0
- package/src/style/toolbar/thinking-selector.css +83 -0
- package/src/types/smol-toml.d.ts +4 -0
- package/src/utils/agent.ts +50 -0
- package/src/utils/animationFrame.ts +46 -0
- package/src/utils/browser.ts +46 -0
- package/src/utils/canvas.ts +14 -0
- package/src/utils/cliBinaryLocator.ts +97 -0
- package/src/utils/context.ts +117 -0
- package/src/utils/contextMentionResolver.ts +154 -0
- package/src/utils/date.ts +31 -0
- package/src/utils/diff.ts +384 -0
- package/src/utils/editor.ts +104 -0
- package/src/utils/electronCompat.ts +53 -0
- package/src/utils/env.ts +465 -0
- package/src/utils/externalContext.ts +143 -0
- package/src/utils/externalContextScanner.ts +135 -0
- package/src/utils/fileLink.ts +263 -0
- package/src/utils/frontmatter.ts +194 -0
- package/src/utils/imageEmbed.ts +139 -0
- package/src/utils/inlineEdit.ts +22 -0
- package/src/utils/interrupt.ts +23 -0
- package/src/utils/markdown.ts +25 -0
- package/src/utils/markdownMath.ts +130 -0
- package/src/utils/mcp.ts +96 -0
- package/src/utils/obsidianCompat.ts +23 -0
- package/src/utils/path.ts +342 -0
- package/src/utils/session.ts +240 -0
- package/src/utils/slashCommand.ts +152 -0
- package/src/utils/subagentJsonl.ts +52 -0
- package/src/utils/windowsCmdShim.ts +98 -0
- package/tests/__mocks__/claude-agent-sdk.ts +317 -0
- package/tests/__mocks__/codex-sdk.ts +88 -0
- package/tests/__mocks__/obsidian.ts +434 -0
- package/tests/helpers/mockElement.ts +403 -0
- package/tests/helpers/sdkMessages.ts +291 -0
- package/tests/integration/core/agent/ClaudianService.test.ts +1845 -0
- package/tests/integration/core/mcp/mcp.test.ts +905 -0
- package/tests/integration/features/chat/imagePersistence.test.ts +38 -0
- package/tests/integration/main.test.ts +1701 -0
- package/tests/setupWindow.ts +26 -0
- package/tests/tsconfig.json +7 -0
- package/tests/unit/core/commands/builtInCommands.test.ts +239 -0
- package/tests/unit/core/mcp/McpServerManager.test.ts +405 -0
- package/tests/unit/core/mcp/McpTester.test.ts +282 -0
- package/tests/unit/core/mcp/createNodeFetch.test.ts +188 -0
- package/tests/unit/core/providers/ProviderRegistry.test.ts +275 -0
- package/tests/unit/core/providers/ProviderSettingsCoordinator.test.ts +490 -0
- package/tests/unit/core/providers/ProviderWorkspaceRegistry.test.ts +84 -0
- package/tests/unit/core/providers/modelRouting.test.ts +91 -0
- package/tests/unit/core/providers/modelSelection.test.ts +155 -0
- package/tests/unit/core/providers/providerEnvironment.test.ts +162 -0
- package/tests/unit/core/providers/tabLifecycle.test.ts +217 -0
- package/tests/unit/core/security/ApprovalManager.test.ts +152 -0
- package/tests/unit/core/storage/VaultFileAdapter.test.ts +535 -0
- package/tests/unit/core/tools/todo.test.ts +227 -0
- package/tests/unit/core/tools/toolIcons.test.ts +75 -0
- package/tests/unit/core/tools/toolInput.test.ts +350 -0
- package/tests/unit/core/tools/toolNames.test.ts +464 -0
- package/tests/unit/core/types/mcp.test.ts +115 -0
- package/tests/unit/features/chat/ClaudianView.test.ts +404 -0
- package/tests/unit/features/chat/controllers/BrowserSelectionController.test.ts +179 -0
- package/tests/unit/features/chat/controllers/CanvasSelectionController.test.ts +216 -0
- package/tests/unit/features/chat/controllers/ConversationController.test.ts +2764 -0
- package/tests/unit/features/chat/controllers/InputController.test.ts +3188 -0
- package/tests/unit/features/chat/controllers/NavigationController.test.ts +640 -0
- package/tests/unit/features/chat/controllers/SelectionController.test.ts +695 -0
- package/tests/unit/features/chat/controllers/StreamController.test.ts +2534 -0
- package/tests/unit/features/chat/controllers/contextRowVisibility.test.ts +46 -0
- package/tests/unit/features/chat/controllers/index.test.ts +16 -0
- package/tests/unit/features/chat/rendering/DiffRenderer.test.ts +355 -0
- package/tests/unit/features/chat/rendering/InlineAskUserQuestion.test.ts +1035 -0
- package/tests/unit/features/chat/rendering/InlineExitPlanMode.test.ts +191 -0
- package/tests/unit/features/chat/rendering/InlinePlanApproval.test.ts +126 -0
- package/tests/unit/features/chat/rendering/MessageRenderer.test.ts +2004 -0
- package/tests/unit/features/chat/rendering/SubagentRenderer.test.ts +917 -0
- package/tests/unit/features/chat/rendering/ThinkingBlockRenderer.test.ts +124 -0
- package/tests/unit/features/chat/rendering/TodoListRenderer.test.ts +173 -0
- package/tests/unit/features/chat/rendering/ToolCallRenderer.test.ts +909 -0
- package/tests/unit/features/chat/rendering/WriteEditRenderer.test.ts +474 -0
- package/tests/unit/features/chat/rendering/collapsible.test.ts +158 -0
- package/tests/unit/features/chat/rendering/todoUtils.test.ts +105 -0
- package/tests/unit/features/chat/rewind.test.ts +56 -0
- package/tests/unit/features/chat/services/BangBashService.test.ts +142 -0
- package/tests/unit/features/chat/services/InstructionRefineService.test.ts +371 -0
- package/tests/unit/features/chat/services/SubagentManager.test.ts +1759 -0
- package/tests/unit/features/chat/services/TitleGenerationService.test.ts +480 -0
- package/tests/unit/features/chat/state/ChatState.test.ts +581 -0
- package/tests/unit/features/chat/tabs/Tab.test.ts +4287 -0
- package/tests/unit/features/chat/tabs/TabBar.test.ts +357 -0
- package/tests/unit/features/chat/tabs/TabManager.test.ts +2962 -0
- package/tests/unit/features/chat/tabs/index.test.ts +11 -0
- package/tests/unit/features/chat/ui/BangBashModeManager.test.ts +321 -0
- package/tests/unit/features/chat/ui/ExternalContextSelector.test.ts +555 -0
- package/tests/unit/features/chat/ui/FileContextManager.test.ts +876 -0
- package/tests/unit/features/chat/ui/ImageContext.test.ts +777 -0
- package/tests/unit/features/chat/ui/InputToolbar.test.ts +1139 -0
- package/tests/unit/features/chat/ui/InstructionModeManager.test.ts +243 -0
- package/tests/unit/features/chat/ui/NavigationSidebar.test.ts +570 -0
- package/tests/unit/features/chat/ui/StatusPanel.test.ts +953 -0
- package/tests/unit/features/chat/ui/file-context/state/FileContextState.test.ts +155 -0
- package/tests/unit/features/chat/ui/textareaResize.test.ts +102 -0
- package/tests/unit/features/chat/utils/usageInfo.test.ts +56 -0
- package/tests/unit/features/inline-edit/InlineEditService.test.ts +1199 -0
- package/tests/unit/features/inline-edit/ui/InlineEditModal.openAndWait.test.ts +1482 -0
- package/tests/unit/features/inline-edit/ui/InlineEditModal.test.ts +495 -0
- package/tests/unit/features/inline-edit/ui/inlineEditMarkdownPreview.test.ts +92 -0
- package/tests/unit/features/settings/AgentSettings.test.ts +82 -0
- package/tests/unit/features/settings/keyboardNavigation.test.ts +73 -0
- package/tests/unit/features/settings/ui/CodexSkillSettings.test.ts +294 -0
- package/tests/unit/features/settings/ui/CodexSubagentSettings.test.ts +207 -0
- package/tests/unit/i18n/constants.test.ts +43 -0
- package/tests/unit/i18n/i18n.test.ts +244 -0
- package/tests/unit/i18n/locales.test.ts +134 -0
- package/tests/unit/providers/acp/AcpClientConnection.test.ts +248 -0
- package/tests/unit/providers/acp/AcpJsonRpcTransport.test.ts +186 -0
- package/tests/unit/providers/acp/AcpSessionConfig.test.ts +247 -0
- package/tests/unit/providers/acp/AcpSessionUpdateNormalizer.test.ts +145 -0
- package/tests/unit/providers/acp/AcpSubprocess.test.ts +105 -0
- package/tests/unit/providers/acp/buildAcpUsageInfo.test.ts +51 -0
- package/tests/unit/providers/claude/agents/AgentManager.test.ts +590 -0
- package/tests/unit/providers/claude/agents/AgentStorage.test.ts +434 -0
- package/tests/unit/providers/claude/agents/index.test.ts +10 -0
- package/tests/unit/providers/claude/commands/ClaudeCommandCatalog.test.ts +396 -0
- package/tests/unit/providers/claude/commands/probeRuntimeCommands.test.ts +92 -0
- package/tests/unit/providers/claude/env/ClaudeSettingsReconciler.test.ts +57 -0
- package/tests/unit/providers/claude/env/claudeModelEnv.test.ts +228 -0
- package/tests/unit/providers/claude/hooks/SubagentHooks.test.ts +83 -0
- package/tests/unit/providers/claude/plugins/PluginManager.test.ts +832 -0
- package/tests/unit/providers/claude/plugins/index.test.ts +7 -0
- package/tests/unit/providers/claude/prompt/ClaudeTurnEncoder.test.ts +145 -0
- package/tests/unit/providers/claude/prompt/instructionRefine.test.ts +185 -0
- package/tests/unit/providers/claude/prompt/systemPrompt.test.ts +163 -0
- package/tests/unit/providers/claude/prompt/titleGeneration.test.ts +20 -0
- package/tests/unit/providers/claude/runtime/ClaudeTaskResultInterpreter.test.ts +28 -0
- package/tests/unit/providers/claude/runtime/ClaudianService.test.ts +3796 -0
- package/tests/unit/providers/claude/runtime/MessageChannel.test.ts +421 -0
- package/tests/unit/providers/claude/runtime/QueryOptionsBuilder.test.ts +775 -0
- package/tests/unit/providers/claude/runtime/SessionManager.test.ts +182 -0
- package/tests/unit/providers/claude/runtime/claudeColdStartQuery.test.ts +331 -0
- package/tests/unit/providers/claude/runtime/customSpawn.test.ts +374 -0
- package/tests/unit/providers/claude/runtime/index.test.ts +13 -0
- package/tests/unit/providers/claude/runtime/types.test.ts +190 -0
- package/tests/unit/providers/claude/sdk/typeGuards.test.ts +50 -0
- package/tests/unit/providers/claude/security/ClaudePermissionUpdates.test.ts +198 -0
- package/tests/unit/providers/claude/storage/AgentVaultStorage.test.ts +413 -0
- package/tests/unit/providers/claude/storage/CCSettingsStorage.test.ts +408 -0
- package/tests/unit/providers/claude/storage/ClaudianSettingsStorage.test.ts +653 -0
- package/tests/unit/providers/claude/storage/McpStorage.test.ts +619 -0
- package/tests/unit/providers/claude/storage/SessionStorage.test.ts +680 -0
- package/tests/unit/providers/claude/storage/SkillStorage.test.ts +275 -0
- package/tests/unit/providers/claude/storage/SlashCommandStorage.test.ts +612 -0
- package/tests/unit/providers/claude/storage/storage.test.ts +360 -0
- package/tests/unit/providers/claude/storage/storageService.convenience.test.ts +447 -0
- package/tests/unit/providers/claude/stream/transformSDKMessage.test.ts +1729 -0
- package/tests/unit/providers/claude/types/types.test.ts +726 -0
- package/tests/unit/providers/claude/ui/ClaudeChatUIConfig.test.ts +173 -0
- package/tests/unit/providers/claude/ui/ClaudeSettingsTab.test.ts +466 -0
- package/tests/unit/providers/codex/agents/CodexAgentMentionProvider.test.ts +89 -0
- package/tests/unit/providers/codex/auxiliary/CodexInstructionRefineService.test.ts +81 -0
- package/tests/unit/providers/codex/capabilities.test.ts +39 -0
- package/tests/unit/providers/codex/commands/CodexSkillCatalog.test.ts +413 -0
- package/tests/unit/providers/codex/env/CodexSettingsReconciler.test.ts +106 -0
- package/tests/unit/providers/codex/fixtures/codex-session-abort.jsonl +9 -0
- package/tests/unit/providers/codex/fixtures/codex-session-agent-lifecycle.jsonl +12 -0
- package/tests/unit/providers/codex/fixtures/codex-session-persisted-tools.jsonl +15 -0
- package/tests/unit/providers/codex/fixtures/codex-session-simple.jsonl +10 -0
- package/tests/unit/providers/codex/fixtures/codex-session-tools.jsonl +12 -0
- package/tests/unit/providers/codex/fixtures/codex-session-websearch-persisted.jsonl +3 -0
- package/tests/unit/providers/codex/fixtures/codex-session-websearch.jsonl +7 -0
- package/tests/unit/providers/codex/history/CodexConversationHistoryService.test.ts +690 -0
- package/tests/unit/providers/codex/history/CodexHistoryStore.test.ts +2202 -0
- package/tests/unit/providers/codex/normalization/codexSubagentNormalization.test.ts +81 -0
- package/tests/unit/providers/codex/normalization/codexToolNormalization.test.ts +322 -0
- package/tests/unit/providers/codex/prompt/encodeCodexTurn.test.ts +168 -0
- package/tests/unit/providers/codex/runtime/CodexAppServerProcess.test.ts +255 -0
- package/tests/unit/providers/codex/runtime/CodexAuxQueryRunner.test.ts +130 -0
- package/tests/unit/providers/codex/runtime/CodexBinaryLocator.test.ts +90 -0
- package/tests/unit/providers/codex/runtime/CodexChatRuntime.test.ts +2445 -0
- package/tests/unit/providers/codex/runtime/CodexCliResolver.test.ts +103 -0
- package/tests/unit/providers/codex/runtime/CodexExecutionTargetResolver.test.ts +105 -0
- package/tests/unit/providers/codex/runtime/CodexLaunchSpecBuilder.test.ts +150 -0
- package/tests/unit/providers/codex/runtime/CodexNotificationRouter.test.ts +1248 -0
- package/tests/unit/providers/codex/runtime/CodexPathMapper.test.ts +51 -0
- package/tests/unit/providers/codex/runtime/CodexRpcTransport.test.ts +220 -0
- package/tests/unit/providers/codex/runtime/CodexRuntimeContext.test.ts +107 -0
- package/tests/unit/providers/codex/runtime/CodexServerRequestRouter.test.ts +537 -0
- package/tests/unit/providers/codex/runtime/CodexSessionFileTail.test.ts +1305 -0
- package/tests/unit/providers/codex/runtime/CodexSessionManager.test.ts +82 -0
- package/tests/unit/providers/codex/runtime/codexAppServerTypes.test.ts +336 -0
- package/tests/unit/providers/codex/settings.test.ts +189 -0
- package/tests/unit/providers/codex/skills/CodexSkillListingService.test.ts +178 -0
- package/tests/unit/providers/codex/storage/CodexSkillStorage.test.ts +342 -0
- package/tests/unit/providers/codex/storage/CodexSubagentStorage.test.ts +376 -0
- package/tests/unit/providers/codex/ui/CodexChatUIConfig.test.ts +211 -0
- package/tests/unit/providers/codex/ui/CodexSettingsTab.test.ts +578 -0
- package/tests/unit/providers/defaultProviderConfigs.test.ts +18 -0
- package/tests/unit/providers/opencode/OpencodeAuxQueryRunner.test.ts +355 -0
- package/tests/unit/providers/opencode/OpencodeChatRuntime.test.ts +808 -0
- package/tests/unit/providers/opencode/OpencodeCliResolver.test.ts +93 -0
- package/tests/unit/providers/opencode/OpencodeCommandCatalog.test.ts +75 -0
- package/tests/unit/providers/opencode/OpencodeConversationHistoryService.test.ts +103 -0
- package/tests/unit/providers/opencode/OpencodeHistoryStore.test.ts +418 -0
- package/tests/unit/providers/opencode/OpencodeLaunchArtifacts.test.ts +268 -0
- package/tests/unit/providers/opencode/OpencodePaths.test.ts +35 -0
- package/tests/unit/providers/opencode/OpencodeRuntimeCommandLoader.test.ts +129 -0
- package/tests/unit/providers/opencode/OpencodeSettingsReconciler.test.ts +96 -0
- package/tests/unit/providers/opencode/OpencodeSettingsTab.test.ts +649 -0
- package/tests/unit/providers/opencode/OpencodeSqliteReader.test.ts +185 -0
- package/tests/unit/providers/opencode/agents/OpencodeAgentMentionProvider.test.ts +56 -0
- package/tests/unit/providers/opencode/buildOpencodePrompt.test.ts +87 -0
- package/tests/unit/providers/opencode/capabilities.test.ts +39 -0
- package/tests/unit/providers/opencode/models.test.ts +273 -0
- package/tests/unit/providers/opencode/modes.test.ts +151 -0
- package/tests/unit/providers/opencode/opencodeToolNormalization.test.ts +197 -0
- package/tests/unit/providers/opencode/settings.test.ts +469 -0
- package/tests/unit/providers/opencode/storage/OpencodeAgentStorage.test.ts +377 -0
- package/tests/unit/providers/opencode/ui/OpencodeAgentSettings.test.ts +91 -0
- package/tests/unit/providers/pi/PiRuntimeCommandLoader.test.ts +149 -0
- package/tests/unit/providers/pi/capabilities.test.ts +20 -0
- package/tests/unit/providers/pi/commands/PiCommandCatalog.test.ts +69 -0
- package/tests/unit/providers/pi/env/PiSettingsReconciler.test.ts +61 -0
- package/tests/unit/providers/pi/history/PiConversationHistoryService.test.ts +147 -0
- package/tests/unit/providers/pi/history/PiHistoryStore.test.ts +523 -0
- package/tests/unit/providers/pi/models.test.ts +96 -0
- package/tests/unit/providers/pi/registration.test.ts +54 -0
- package/tests/unit/providers/pi/runtime/PiAuxQueryRunner.test.ts +172 -0
- package/tests/unit/providers/pi/runtime/PiChatRuntime.test.ts +830 -0
- package/tests/unit/providers/pi/runtime/PiCliResolver.test.ts +105 -0
- package/tests/unit/providers/pi/runtime/PiEventNormalization.test.ts +147 -0
- package/tests/unit/providers/pi/runtime/PiExtensionUiBridge.test.ts +98 -0
- package/tests/unit/providers/pi/runtime/PiJsonl.test.ts +42 -0
- package/tests/unit/providers/pi/runtime/PiLaunchSpec.test.ts +92 -0
- package/tests/unit/providers/pi/runtime/PiModelDiscoveryService.test.ts +135 -0
- package/tests/unit/providers/pi/runtime/PiRpcPayloads.test.ts +15 -0
- package/tests/unit/providers/pi/runtime/PiRpcTransport.test.ts +116 -0
- package/tests/unit/providers/pi/runtime/PiSubprocess.test.ts +151 -0
- package/tests/unit/providers/pi/runtime/buildPiPrompt.test.ts +84 -0
- package/tests/unit/providers/pi/runtime/buildPiUsageInfo.test.ts +69 -0
- package/tests/unit/providers/pi/settings.test.ts +253 -0
- package/tests/unit/providers/pi/ui/PiChatUIConfig.test.ts +161 -0
- package/tests/unit/providers/pi/ui/PiSettingsTab.test.ts +492 -0
- package/tests/unit/scripts/rendererSafeUnref.test.ts +101 -0
- package/tests/unit/shared/components/ResumeSessionDropdown.test.ts +356 -0
- package/tests/unit/shared/components/SelectableDropdown.test.ts +406 -0
- package/tests/unit/shared/components/SlashCommandDropdown.provider.test.ts +354 -0
- package/tests/unit/shared/components/SlashCommandDropdown.test.ts +508 -0
- package/tests/unit/shared/icons.test.ts +56 -0
- package/tests/unit/shared/index.test.ts +46 -0
- package/tests/unit/shared/mention/MentionDropdownController.test.ts +823 -0
- package/tests/unit/shared/mention/VaultFileCache.test.ts +195 -0
- package/tests/unit/shared/mention/VaultFolderCache.test.ts +143 -0
- package/tests/unit/shared/mention/VaultMentionDataProvider.test.ts +87 -0
- package/tests/unit/shared/modals/ConfirmModal.test.ts +111 -0
- package/tests/unit/shared/modals/ForkTargetModal.test.ts +101 -0
- package/tests/unit/shared/modals/InstructionConfirmModal.test.ts +305 -0
- package/tests/unit/utils/agent.test.ts +395 -0
- package/tests/unit/utils/animationFrame.test.ts +59 -0
- package/tests/unit/utils/browser.test.ts +73 -0
- package/tests/unit/utils/canvas.test.ts +54 -0
- package/tests/unit/utils/claudeCli.test.ts +294 -0
- package/tests/unit/utils/cliBinaryLocator.test.ts +33 -0
- package/tests/unit/utils/context.test.ts +288 -0
- package/tests/unit/utils/contextMentionResolver.test.ts +270 -0
- package/tests/unit/utils/date.test.ts +80 -0
- package/tests/unit/utils/diff.test.ts +291 -0
- package/tests/unit/utils/editor.test.ts +249 -0
- package/tests/unit/utils/electronCompat.test.ts +87 -0
- package/tests/unit/utils/env.test.ts +1240 -0
- package/tests/unit/utils/externalContext.test.ts +336 -0
- package/tests/unit/utils/externalContextScanner.test.ts +186 -0
- package/tests/unit/utils/fileLink.dom.test.ts +273 -0
- package/tests/unit/utils/fileLink.handler.test.ts +64 -0
- package/tests/unit/utils/fileLink.test.ts +233 -0
- package/tests/unit/utils/frontmatter.test.ts +434 -0
- package/tests/unit/utils/imageEmbed.test.ts +407 -0
- package/tests/unit/utils/inlineEdit.test.ts +63 -0
- package/tests/unit/utils/interrupt.test.ts +73 -0
- package/tests/unit/utils/markdown.test.ts +35 -0
- package/tests/unit/utils/markdownMath.test.ts +54 -0
- package/tests/unit/utils/mcp.test.ts +256 -0
- package/tests/unit/utils/obsidianCompat.test.ts +18 -0
- package/tests/unit/utils/path.test.ts +677 -0
- package/tests/unit/utils/sdkSession.test.ts +2359 -0
- package/tests/unit/utils/session.test.ts +971 -0
- package/tests/unit/utils/slashCommand.test.ts +778 -0
- package/tests/unit/utils/utils.test.ts +809 -0
- package/tsconfig.jest.json +8 -0
- package/tsconfig.json +26 -0
- package/versions.json +4 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool input helpers.
|
|
3
|
+
*
|
|
4
|
+
* Keeps parsing of common tool inputs consistent across services.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { AskUserAnswers } from '../types/tools';
|
|
8
|
+
import {
|
|
9
|
+
TOOL_EDIT,
|
|
10
|
+
TOOL_GLOB,
|
|
11
|
+
TOOL_GREP,
|
|
12
|
+
TOOL_LS,
|
|
13
|
+
TOOL_NOTEBOOK_EDIT,
|
|
14
|
+
TOOL_READ,
|
|
15
|
+
TOOL_WRITE,
|
|
16
|
+
} from './toolNames';
|
|
17
|
+
|
|
18
|
+
export function extractResolvedAnswers(toolUseResult: unknown): AskUserAnswers | undefined {
|
|
19
|
+
if (typeof toolUseResult !== 'object' || toolUseResult === null) return undefined;
|
|
20
|
+
const r = toolUseResult as Record<string, unknown>;
|
|
21
|
+
return normalizeAnswersObject(r.answers);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function normalizeAnswerValue(value: unknown): string | string[] | undefined {
|
|
25
|
+
if (typeof value === 'string') return value;
|
|
26
|
+
if (Array.isArray(value)) {
|
|
27
|
+
const normalized = value
|
|
28
|
+
.map((item) => (typeof item === 'string' ? item : String(item)))
|
|
29
|
+
.filter(Boolean)
|
|
30
|
+
.filter((item) => item.length > 0);
|
|
31
|
+
if (normalized.length === 0) return undefined;
|
|
32
|
+
return normalized.length === 1 ? normalized[0] : normalized;
|
|
33
|
+
}
|
|
34
|
+
if (typeof value === 'object' && value !== null) {
|
|
35
|
+
const record = value as Record<string, unknown>;
|
|
36
|
+
if ('answers' in record) return normalizeAnswerValue(record.answers);
|
|
37
|
+
if ('answer' in record) return normalizeAnswerValue(record.answer);
|
|
38
|
+
if ('value' in record) return normalizeAnswerValue(record.value);
|
|
39
|
+
}
|
|
40
|
+
if (typeof value === 'number' || typeof value === 'boolean') return String(value);
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function normalizeAnswersObject(value: unknown): AskUserAnswers | undefined {
|
|
45
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) return undefined;
|
|
46
|
+
|
|
47
|
+
const answers: AskUserAnswers = {};
|
|
48
|
+
for (const [question, rawValue] of Object.entries(value as Record<string, unknown>)) {
|
|
49
|
+
const normalized = normalizeAnswerValue(rawValue);
|
|
50
|
+
if (normalized) {
|
|
51
|
+
answers[question] = normalized;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return Object.keys(answers).length > 0 ? answers : undefined;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function parseAnswersFromJsonObject(resultText: string): AskUserAnswers | undefined {
|
|
59
|
+
const start = resultText.indexOf('{');
|
|
60
|
+
const end = resultText.lastIndexOf('}');
|
|
61
|
+
if (start < 0 || end <= start) return undefined;
|
|
62
|
+
|
|
63
|
+
try {
|
|
64
|
+
const parsed = JSON.parse(resultText.slice(start, end + 1)) as unknown;
|
|
65
|
+
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
66
|
+
const record = parsed as Record<string, unknown>;
|
|
67
|
+
return normalizeAnswersObject(record.answers) ?? normalizeAnswersObject(parsed);
|
|
68
|
+
}
|
|
69
|
+
return normalizeAnswersObject(parsed);
|
|
70
|
+
} catch {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function parseAnswersFromQuotedPairs(resultText: string): AskUserAnswers | undefined {
|
|
76
|
+
const answers: AskUserAnswers = {};
|
|
77
|
+
const pattern = /"([^"]+)"="([^"]*)"/g;
|
|
78
|
+
|
|
79
|
+
for (const match of resultText.matchAll(pattern)) {
|
|
80
|
+
const question = match[1]?.trim();
|
|
81
|
+
if (!question) continue;
|
|
82
|
+
answers[question] = match[2] ?? '';
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return Object.keys(answers).length > 0 ? answers : undefined;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Fallback extractor for AskUserQuestion results when structured `toolUseResult.answers`
|
|
90
|
+
* is unavailable (for example after reload from JSONL history).
|
|
91
|
+
*/
|
|
92
|
+
export function extractResolvedAnswersFromResultText(result: unknown): AskUserAnswers | undefined {
|
|
93
|
+
if (typeof result !== 'string') return undefined;
|
|
94
|
+
const trimmed = result.trim();
|
|
95
|
+
if (!trimmed) return undefined;
|
|
96
|
+
|
|
97
|
+
return parseAnswersFromJsonObject(trimmed) ?? parseAnswersFromQuotedPairs(trimmed);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function getPathFromToolInput(
|
|
101
|
+
toolName: string,
|
|
102
|
+
toolInput: Record<string, unknown>
|
|
103
|
+
): string | null {
|
|
104
|
+
switch (toolName) {
|
|
105
|
+
case TOOL_READ:
|
|
106
|
+
case TOOL_WRITE:
|
|
107
|
+
case TOOL_EDIT:
|
|
108
|
+
case TOOL_NOTEBOOK_EDIT:
|
|
109
|
+
return (toolInput.file_path as string) || (toolInput.notebook_path as string) || null;
|
|
110
|
+
case TOOL_GLOB:
|
|
111
|
+
return (toolInput.path as string) || (toolInput.pattern as string) || null;
|
|
112
|
+
case TOOL_GREP:
|
|
113
|
+
return (toolInput.path as string) || null;
|
|
114
|
+
case TOOL_LS:
|
|
115
|
+
return (toolInput.path as string) || null;
|
|
116
|
+
default:
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
export const TOOL_AGENT_OUTPUT = 'TaskOutput' as const;
|
|
2
|
+
export const TOOL_ASK_USER_QUESTION = 'AskUserQuestion' as const;
|
|
3
|
+
export const TOOL_BASH = 'Bash' as const;
|
|
4
|
+
export const TOOL_BASH_OUTPUT = 'BashOutput' as const;
|
|
5
|
+
export const TOOL_EDIT = 'Edit' as const;
|
|
6
|
+
export const TOOL_GLOB = 'Glob' as const;
|
|
7
|
+
export const TOOL_GREP = 'Grep' as const;
|
|
8
|
+
export const TOOL_KILL_SHELL = 'KillShell' as const;
|
|
9
|
+
export const TOOL_LS = 'LS' as const;
|
|
10
|
+
export const TOOL_LIST_MCP_RESOURCES = 'ListMcpResources' as const;
|
|
11
|
+
export const TOOL_MCP = 'Mcp' as const;
|
|
12
|
+
export const TOOL_NOTEBOOK_EDIT = 'NotebookEdit' as const;
|
|
13
|
+
export const TOOL_READ = 'Read' as const;
|
|
14
|
+
export const TOOL_READ_MCP_RESOURCE = 'ReadMcpResource' as const;
|
|
15
|
+
export const TOOL_SKILL = 'Skill' as const;
|
|
16
|
+
export const TOOL_SUBAGENT = 'Agent' as const;
|
|
17
|
+
export const TOOL_SUBAGENT_LEGACY = 'Task' as const;
|
|
18
|
+
// Kept as an alias while the internal codebase is still named around "Task".
|
|
19
|
+
export const TOOL_TASK = TOOL_SUBAGENT;
|
|
20
|
+
export const TOOL_TODO_WRITE = 'TodoWrite' as const;
|
|
21
|
+
export const TOOL_TOOL_SEARCH = 'ToolSearch' as const;
|
|
22
|
+
export const TOOL_WEB_FETCH = 'WebFetch' as const;
|
|
23
|
+
export const TOOL_WEB_SEARCH = 'WebSearch' as const;
|
|
24
|
+
export const TOOL_WRITE = 'Write' as const;
|
|
25
|
+
|
|
26
|
+
export const TOOL_ENTER_PLAN_MODE = 'EnterPlanMode' as const;
|
|
27
|
+
export const TOOL_EXIT_PLAN_MODE = 'ExitPlanMode' as const;
|
|
28
|
+
|
|
29
|
+
// Runtime-managed tools exposed through provider adapters.
|
|
30
|
+
export const TOOL_APPLY_PATCH = 'apply_patch' as const;
|
|
31
|
+
export const TOOL_WRITE_STDIN = 'write_stdin' as const;
|
|
32
|
+
export const TOOL_SPAWN_AGENT = 'spawn_agent' as const;
|
|
33
|
+
export const TOOL_SEND_INPUT = 'send_input' as const;
|
|
34
|
+
export const TOOL_WAIT = 'wait' as const;
|
|
35
|
+
export const TOOL_WAIT_AGENT = 'wait_agent' as const;
|
|
36
|
+
export const TOOL_RESUME_AGENT = 'resume_agent' as const;
|
|
37
|
+
export const TOOL_CLOSE_AGENT = 'close_agent' as const;
|
|
38
|
+
|
|
39
|
+
export const AGENT_LIFECYCLE_TOOLS = [
|
|
40
|
+
TOOL_SPAWN_AGENT,
|
|
41
|
+
TOOL_SEND_INPUT,
|
|
42
|
+
TOOL_WAIT,
|
|
43
|
+
TOOL_WAIT_AGENT,
|
|
44
|
+
TOOL_RESUME_AGENT,
|
|
45
|
+
TOOL_CLOSE_AGENT,
|
|
46
|
+
] as const;
|
|
47
|
+
|
|
48
|
+
export function isAgentLifecycleTool(name: string): boolean {
|
|
49
|
+
return (AGENT_LIFECYCLE_TOOLS as readonly string[]).includes(name);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Tools that should be hidden from rendering when a provider subagent block is shown. */
|
|
53
|
+
export const SUBAGENT_HIDDEN_TOOLS = [
|
|
54
|
+
TOOL_WAIT,
|
|
55
|
+
TOOL_WAIT_AGENT,
|
|
56
|
+
TOOL_CLOSE_AGENT,
|
|
57
|
+
] as const;
|
|
58
|
+
|
|
59
|
+
export function isSubagentSpawnTool(name: string): boolean {
|
|
60
|
+
return name === TOOL_SPAWN_AGENT;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function isSubagentHiddenTool(name: string): boolean {
|
|
64
|
+
return (SUBAGENT_HIDDEN_TOOLS as readonly string[]).includes(name);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// These tools resolve via dedicated callbacks (not content-based), so their
|
|
68
|
+
// tool_result should never be marked "blocked" based on result text.
|
|
69
|
+
export const TOOLS_SKIP_BLOCKED_DETECTION = [
|
|
70
|
+
TOOL_ENTER_PLAN_MODE,
|
|
71
|
+
TOOL_EXIT_PLAN_MODE,
|
|
72
|
+
TOOL_ASK_USER_QUESTION,
|
|
73
|
+
] as const;
|
|
74
|
+
|
|
75
|
+
export const SUBAGENT_TOOL_NAMES = [
|
|
76
|
+
TOOL_SUBAGENT,
|
|
77
|
+
TOOL_SUBAGENT_LEGACY,
|
|
78
|
+
] as const;
|
|
79
|
+
export type SubagentToolName = (typeof SUBAGENT_TOOL_NAMES)[number];
|
|
80
|
+
|
|
81
|
+
export function skipsBlockedDetection(name: string): boolean {
|
|
82
|
+
return (TOOLS_SKIP_BLOCKED_DETECTION as readonly string[]).includes(name);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function isSubagentToolName(name: string): name is SubagentToolName {
|
|
86
|
+
return (SUBAGENT_TOOL_NAMES as readonly string[]).includes(name);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export const EDIT_TOOLS = [TOOL_WRITE, TOOL_EDIT, TOOL_NOTEBOOK_EDIT] as const;
|
|
90
|
+
export type EditToolName = (typeof EDIT_TOOLS)[number];
|
|
91
|
+
|
|
92
|
+
export const WRITE_EDIT_TOOLS = [TOOL_WRITE, TOOL_EDIT] as const;
|
|
93
|
+
export type WriteEditToolName = (typeof WRITE_EDIT_TOOLS)[number];
|
|
94
|
+
|
|
95
|
+
export const BASH_TOOLS = [TOOL_BASH, TOOL_BASH_OUTPUT, TOOL_KILL_SHELL] as const;
|
|
96
|
+
export type BashToolName = (typeof BASH_TOOLS)[number];
|
|
97
|
+
|
|
98
|
+
export const FILE_TOOLS = [
|
|
99
|
+
TOOL_READ,
|
|
100
|
+
TOOL_WRITE,
|
|
101
|
+
TOOL_EDIT,
|
|
102
|
+
TOOL_GLOB,
|
|
103
|
+
TOOL_GREP,
|
|
104
|
+
TOOL_LS,
|
|
105
|
+
TOOL_NOTEBOOK_EDIT,
|
|
106
|
+
TOOL_BASH,
|
|
107
|
+
] as const;
|
|
108
|
+
export type FileToolName = (typeof FILE_TOOLS)[number];
|
|
109
|
+
|
|
110
|
+
export const MCP_TOOLS = [
|
|
111
|
+
TOOL_LIST_MCP_RESOURCES,
|
|
112
|
+
TOOL_READ_MCP_RESOURCE,
|
|
113
|
+
TOOL_MCP,
|
|
114
|
+
] as const;
|
|
115
|
+
export type McpToolName = (typeof MCP_TOOLS)[number];
|
|
116
|
+
|
|
117
|
+
export const READ_ONLY_TOOLS = [
|
|
118
|
+
TOOL_READ,
|
|
119
|
+
TOOL_GREP,
|
|
120
|
+
TOOL_GLOB,
|
|
121
|
+
TOOL_LS,
|
|
122
|
+
TOOL_WEB_SEARCH,
|
|
123
|
+
TOOL_WEB_FETCH,
|
|
124
|
+
] as const;
|
|
125
|
+
export type ReadOnlyToolName = (typeof READ_ONLY_TOOLS)[number];
|
|
126
|
+
|
|
127
|
+
export function isEditTool(toolName: string): toolName is EditToolName {
|
|
128
|
+
return (EDIT_TOOLS as readonly string[]).includes(toolName);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function isWriteEditTool(toolName: string): toolName is WriteEditToolName {
|
|
132
|
+
return (WRITE_EDIT_TOOLS as readonly string[]).includes(toolName);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export function isFileTool(toolName: string): toolName is FileToolName {
|
|
136
|
+
return (FILE_TOOLS as readonly string[]).includes(toolName);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export function isBashTool(toolName: string): toolName is BashToolName {
|
|
140
|
+
return (BASH_TOOLS as readonly string[]).includes(toolName);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export function isMcpTool(toolName: string): toolName is McpToolName {
|
|
144
|
+
return (MCP_TOOLS as readonly string[]).includes(toolName);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function isReadOnlyTool(toolName: string): toolName is ReadOnlyToolName {
|
|
148
|
+
return (READ_ONLY_TOOLS as readonly string[]).includes(toolName);
|
|
149
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface ToolResultContentOptions {
|
|
2
|
+
fallbackIndent?: number;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function extractToolResultContent(
|
|
6
|
+
content: unknown,
|
|
7
|
+
options?: ToolResultContentOptions,
|
|
8
|
+
): string {
|
|
9
|
+
if (typeof content === 'string') return content;
|
|
10
|
+
if (content == null) return '';
|
|
11
|
+
|
|
12
|
+
if (Array.isArray(content)) {
|
|
13
|
+
const textParts = content.filter(isTextBlock).map((block) => block.text);
|
|
14
|
+
if (textParts.length > 0) return textParts.join('\n');
|
|
15
|
+
if (content.length > 0) return JSON.stringify(content, null, options?.fallbackIndent);
|
|
16
|
+
return '';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return JSON.stringify(content, null, options?.fallbackIndent);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function isTextBlock(block: unknown): block is { type: 'text'; text: string } {
|
|
23
|
+
if (!block || typeof block !== 'object') return false;
|
|
24
|
+
const record = block as Record<string, unknown>;
|
|
25
|
+
return record.type === 'text' && typeof record.text === 'string';
|
|
26
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface AgentDefinition {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
prompt: string;
|
|
6
|
+
tools?: string[];
|
|
7
|
+
disallowedTools?: string[];
|
|
8
|
+
model?: string;
|
|
9
|
+
source: 'plugin' | 'vault' | 'global' | 'builtin';
|
|
10
|
+
pluginName?: string;
|
|
11
|
+
filePath?: string;
|
|
12
|
+
skills?: string[];
|
|
13
|
+
permissionMode?: string;
|
|
14
|
+
hooks?: Record<string, unknown>;
|
|
15
|
+
extraFrontmatter?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface AgentFrontmatter {
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
tools?: string | string[];
|
|
22
|
+
disallowedTools?: string | string[];
|
|
23
|
+
model?: string;
|
|
24
|
+
skills?: string[];
|
|
25
|
+
permissionMode?: string;
|
|
26
|
+
hooks?: Record<string, unknown>;
|
|
27
|
+
extraFrontmatter?: Record<string, unknown>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import type { SDKToolUseResult } from './diff';
|
|
2
|
+
import type { ProviderId } from './provider';
|
|
3
|
+
import type { SubagentMode, ToolCallInfo } from './tools';
|
|
4
|
+
|
|
5
|
+
/** Fork origin reference: identifies the source session and checkpoint. */
|
|
6
|
+
export interface ForkSource {
|
|
7
|
+
sessionId: string;
|
|
8
|
+
resumeAt: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** View type identifier for Obsidian. */
|
|
12
|
+
export const VIEW_TYPE_CLAUDIAN = 'claudian-view';
|
|
13
|
+
|
|
14
|
+
/** Supported image media types for attachments. */
|
|
15
|
+
export type ImageMediaType = 'image/jpeg' | 'image/png' | 'image/gif' | 'image/webp';
|
|
16
|
+
|
|
17
|
+
/** Image attachment metadata. */
|
|
18
|
+
export interface ImageAttachment {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
mediaType: ImageMediaType;
|
|
22
|
+
/** Base64 encoded image data - single source of truth. */
|
|
23
|
+
data: string;
|
|
24
|
+
width?: number;
|
|
25
|
+
height?: number;
|
|
26
|
+
size: number;
|
|
27
|
+
source: 'file' | 'paste' | 'drop';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Content block for preserving streaming order in messages. */
|
|
31
|
+
export type ContentBlock =
|
|
32
|
+
| { type: 'text'; content: string }
|
|
33
|
+
| { type: 'tool_use'; toolId: string }
|
|
34
|
+
| { type: 'thinking'; content: string; durationSeconds?: number }
|
|
35
|
+
| { type: 'subagent'; subagentId: string; mode?: SubagentMode }
|
|
36
|
+
| { type: 'context_compacted' };
|
|
37
|
+
|
|
38
|
+
/** Chat message with content, tool calls, and attachments. */
|
|
39
|
+
export interface ChatMessage {
|
|
40
|
+
id: string;
|
|
41
|
+
role: 'user' | 'assistant';
|
|
42
|
+
content: string;
|
|
43
|
+
/** Display-only content (e.g., "/tests" when content is the expanded prompt). */
|
|
44
|
+
displayContent?: string;
|
|
45
|
+
timestamp: number;
|
|
46
|
+
toolCalls?: ToolCallInfo[];
|
|
47
|
+
contentBlocks?: ContentBlock[];
|
|
48
|
+
currentNote?: string;
|
|
49
|
+
images?: ImageAttachment[];
|
|
50
|
+
/** True if this message represents a user interrupt (from SDK storage). */
|
|
51
|
+
isInterrupt?: boolean;
|
|
52
|
+
/** True if this message is rebuilt context sent to SDK on session reset (should be hidden). */
|
|
53
|
+
isRebuiltContext?: boolean;
|
|
54
|
+
/** Duration in seconds from user send to response completion. */
|
|
55
|
+
durationSeconds?: number;
|
|
56
|
+
/** Flavor word used for duration display (e.g., "Baked", "Cooked"). */
|
|
57
|
+
durationFlavorWord?: string;
|
|
58
|
+
/** Provider-native user message identifier used for rewind. */
|
|
59
|
+
userMessageId?: string;
|
|
60
|
+
/** Provider-native assistant message identifier used for rewind/fork checkpoints. */
|
|
61
|
+
assistantMessageId?: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Persisted conversation with messages and session state. */
|
|
65
|
+
export interface Conversation {
|
|
66
|
+
id: string;
|
|
67
|
+
providerId: ProviderId;
|
|
68
|
+
title: string;
|
|
69
|
+
createdAt: number;
|
|
70
|
+
updatedAt: number;
|
|
71
|
+
/** Timestamp when the last agent response completed. */
|
|
72
|
+
lastResponseAt?: number;
|
|
73
|
+
sessionId: string | null;
|
|
74
|
+
/** Opaque provider-owned state bag (session tracking, fork metadata, etc.). */
|
|
75
|
+
providerState?: Record<string, unknown>;
|
|
76
|
+
messages: ChatMessage[];
|
|
77
|
+
currentNote?: string;
|
|
78
|
+
/** Session-specific external context paths (directories with full access). Resets on new session. */
|
|
79
|
+
externalContextPaths?: string[];
|
|
80
|
+
/** Context window usage information. */
|
|
81
|
+
usage?: UsageInfo;
|
|
82
|
+
/** Status of AI title generation. */
|
|
83
|
+
titleGenerationStatus?: 'pending' | 'success' | 'failed';
|
|
84
|
+
/** UI-enabled MCP servers for this session (context-saving servers activated via selector). */
|
|
85
|
+
enabledMcpServers?: string[];
|
|
86
|
+
/** Assistant checkpoint identifier for resumeAtMessageId after rewind. */
|
|
87
|
+
resumeAtMessageId?: string;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Lightweight conversation metadata for the history dropdown. */
|
|
91
|
+
export interface ConversationMeta {
|
|
92
|
+
id: string;
|
|
93
|
+
providerId: ProviderId;
|
|
94
|
+
title: string;
|
|
95
|
+
createdAt: number;
|
|
96
|
+
updatedAt: number;
|
|
97
|
+
/** Timestamp when the last agent response completed. */
|
|
98
|
+
lastResponseAt?: number;
|
|
99
|
+
messageCount: number;
|
|
100
|
+
preview: string;
|
|
101
|
+
/** Status of AI title generation. */
|
|
102
|
+
titleGenerationStatus?: 'pending' | 'success' | 'failed';
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Session metadata overlay for provider-native storage.
|
|
107
|
+
* The provider handles message storage; this stores UI-only state.
|
|
108
|
+
*/
|
|
109
|
+
export interface SessionMetadata {
|
|
110
|
+
id: string;
|
|
111
|
+
providerId?: ProviderId;
|
|
112
|
+
title: string;
|
|
113
|
+
titleGenerationStatus?: 'pending' | 'success' | 'failed';
|
|
114
|
+
createdAt: number;
|
|
115
|
+
updatedAt: number;
|
|
116
|
+
lastResponseAt?: number;
|
|
117
|
+
/** Session ID used for provider resume (may be cleared when invalidated). */
|
|
118
|
+
sessionId?: string | null;
|
|
119
|
+
/** Opaque provider-owned state bag. */
|
|
120
|
+
providerState?: Record<string, unknown>;
|
|
121
|
+
currentNote?: string;
|
|
122
|
+
externalContextPaths?: string[];
|
|
123
|
+
enabledMcpServers?: string[];
|
|
124
|
+
usage?: UsageInfo;
|
|
125
|
+
/** Assistant checkpoint identifier for resumeAtMessageId after rewind. */
|
|
126
|
+
resumeAtMessageId?: string;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Normalized stream chunk emitted by the active provider runtime.
|
|
131
|
+
*
|
|
132
|
+
* All providers must emit: text, tool_use, tool_result, error, done, usage.
|
|
133
|
+
* Provider-specific behavior must be normalized before reaching this contract.
|
|
134
|
+
* Providers may keep provider-native turn metadata internally and expose it via
|
|
135
|
+
* runtime methods instead of encoding it as stream-control chunks.
|
|
136
|
+
*/
|
|
137
|
+
export type StreamChunk =
|
|
138
|
+
| { type: 'user_message_start'; content: string; itemId?: string }
|
|
139
|
+
| { type: 'assistant_message_start'; itemId?: string }
|
|
140
|
+
| { type: 'text'; content: string }
|
|
141
|
+
| { type: 'thinking'; content: string }
|
|
142
|
+
| { type: 'tool_use'; id: string; name: string; input: Record<string, unknown> }
|
|
143
|
+
| { type: 'tool_result'; id: string; content: string; isError?: boolean; toolUseResult?: SDKToolUseResult }
|
|
144
|
+
| { type: 'tool_output'; id: string; content: string }
|
|
145
|
+
| { type: 'error'; content: string }
|
|
146
|
+
| { type: 'notice'; content: string; level?: 'info' | 'warning' }
|
|
147
|
+
| { type: 'done' }
|
|
148
|
+
| { type: 'usage'; usage: UsageInfo; sessionId?: string | null }
|
|
149
|
+
| { type: 'context_compacted' }
|
|
150
|
+
| { type: 'async_subagent_result'; agentId: string; status: 'completed' | 'error'; result?: string }
|
|
151
|
+
| { type: 'subagent_tool_use'; subagentId: string; id: string; name: string; input: Record<string, unknown> }
|
|
152
|
+
| { type: 'subagent_tool_result'; subagentId: string; id: string; content: string; isError?: boolean; toolUseResult?: SDKToolUseResult };
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Context window usage information.
|
|
156
|
+
*
|
|
157
|
+
* `contextTokens` is the provider-computed total token count in the context window.
|
|
158
|
+
* Claude sets it to `inputTokens + cacheCreationInputTokens + cacheReadInputTokens`;
|
|
159
|
+
* other providers should set it to their equivalent total.
|
|
160
|
+
*
|
|
161
|
+
* Cache token fields are optional — only providers with prompt caching (Claude)
|
|
162
|
+
* populate them. Feature code should use `contextTokens` for display, not recompute
|
|
163
|
+
* from the cache breakdown.
|
|
164
|
+
*/
|
|
165
|
+
export interface UsageInfo {
|
|
166
|
+
model?: string;
|
|
167
|
+
inputTokens: number;
|
|
168
|
+
/** Prompt caching: tokens used to create cache entries. Claude-specific; 0 if omitted. */
|
|
169
|
+
cacheCreationInputTokens?: number;
|
|
170
|
+
/** Prompt caching: tokens read from cache. Claude-specific; 0 if omitted. */
|
|
171
|
+
cacheReadInputTokens?: number;
|
|
172
|
+
contextWindow: number;
|
|
173
|
+
/** True when `contextWindow` came from provider runtime data instead of a local heuristic. */
|
|
174
|
+
contextWindowIsAuthoritative?: boolean;
|
|
175
|
+
contextTokens: number;
|
|
176
|
+
percentage: number;
|
|
177
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff-related type definitions.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export interface DiffLine {
|
|
6
|
+
type: 'equal' | 'insert' | 'delete';
|
|
7
|
+
text: string;
|
|
8
|
+
oldLineNum?: number;
|
|
9
|
+
newLineNum?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface DiffStats {
|
|
13
|
+
added: number;
|
|
14
|
+
removed: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** A single hunk from the SDK's structuredPatch format. */
|
|
18
|
+
export interface StructuredPatchHunk {
|
|
19
|
+
oldStart: number;
|
|
20
|
+
oldLines: number;
|
|
21
|
+
newStart: number;
|
|
22
|
+
newLines: number;
|
|
23
|
+
lines: string[];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Shape of the SDK's toolUseResult object for Write/Edit tools. */
|
|
27
|
+
export interface SDKToolUseResult {
|
|
28
|
+
structuredPatch?: StructuredPatchHunk[];
|
|
29
|
+
filePath?: string;
|
|
30
|
+
[key: string]: unknown;
|
|
31
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Chat types
|
|
2
|
+
export {
|
|
3
|
+
type ChatMessage,
|
|
4
|
+
type ContentBlock,
|
|
5
|
+
type Conversation,
|
|
6
|
+
type ConversationMeta,
|
|
7
|
+
type ForkSource,
|
|
8
|
+
type ImageAttachment,
|
|
9
|
+
type ImageMediaType,
|
|
10
|
+
type SessionMetadata,
|
|
11
|
+
type StreamChunk,
|
|
12
|
+
type UsageInfo,
|
|
13
|
+
VIEW_TYPE_CLAUDIAN,
|
|
14
|
+
} from './chat';
|
|
15
|
+
export { type ProviderId } from './provider';
|
|
16
|
+
|
|
17
|
+
// Settings and command types
|
|
18
|
+
export {
|
|
19
|
+
type ApprovalDecision,
|
|
20
|
+
type ClaudianSettings,
|
|
21
|
+
type EnvironmentScope,
|
|
22
|
+
type EnvSnippet,
|
|
23
|
+
type HostnameCliPaths,
|
|
24
|
+
type InstructionRefineResult,
|
|
25
|
+
type KeyboardNavigationSettings,
|
|
26
|
+
type PermissionMode,
|
|
27
|
+
type SlashCommand,
|
|
28
|
+
} from './settings';
|
|
29
|
+
|
|
30
|
+
// Diff types
|
|
31
|
+
export {
|
|
32
|
+
type DiffLine,
|
|
33
|
+
type DiffStats,
|
|
34
|
+
type SDKToolUseResult,
|
|
35
|
+
type StructuredPatchHunk,
|
|
36
|
+
} from './diff';
|
|
37
|
+
|
|
38
|
+
// Tool types
|
|
39
|
+
export {
|
|
40
|
+
type AskUserAnswers,
|
|
41
|
+
type AskUserQuestionItem,
|
|
42
|
+
type AskUserQuestionOption,
|
|
43
|
+
type AsyncSubagentStatus,
|
|
44
|
+
type ExitPlanModeCallback,
|
|
45
|
+
type ExitPlanModeDecision,
|
|
46
|
+
type SubagentInfo,
|
|
47
|
+
type SubagentMode,
|
|
48
|
+
type ToolCallInfo,
|
|
49
|
+
type ToolDiffData,
|
|
50
|
+
} from './tools';
|
|
51
|
+
|
|
52
|
+
// Agent types
|
|
53
|
+
export {
|
|
54
|
+
type AgentDefinition,
|
|
55
|
+
type AgentFrontmatter,
|
|
56
|
+
} from './agent';
|
|
57
|
+
|
|
58
|
+
// Plugin types
|
|
59
|
+
export {
|
|
60
|
+
type PluginInfo,
|
|
61
|
+
type PluginScope,
|
|
62
|
+
} from './plugins';
|
|
63
|
+
|
|
64
|
+
// MCP types
|
|
65
|
+
export {
|
|
66
|
+
DEFAULT_MCP_SERVER,
|
|
67
|
+
getMcpServerType,
|
|
68
|
+
isValidMcpServerConfig,
|
|
69
|
+
type ManagedMcpConfigFile,
|
|
70
|
+
type ManagedMcpServer,
|
|
71
|
+
type McpConfigFile,
|
|
72
|
+
type McpHttpServerConfig,
|
|
73
|
+
type McpServerConfig,
|
|
74
|
+
type McpServerType,
|
|
75
|
+
type McpSSEServerConfig,
|
|
76
|
+
type McpStdioServerConfig,
|
|
77
|
+
type ParsedMcpConfig,
|
|
78
|
+
} from './mcp';
|