@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,97 @@
|
|
|
1
|
+
/** MCP (Model Context Protocol) type definitions used by the shared manager/UI. */
|
|
2
|
+
|
|
3
|
+
/** Stdio server configuration (local command-line programs). */
|
|
4
|
+
export interface McpStdioServerConfig {
|
|
5
|
+
type?: 'stdio';
|
|
6
|
+
command: string;
|
|
7
|
+
args?: string[];
|
|
8
|
+
env?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** Server-Sent Events remote server configuration. */
|
|
12
|
+
export interface McpSSEServerConfig {
|
|
13
|
+
type: 'sse';
|
|
14
|
+
url: string;
|
|
15
|
+
headers?: Record<string, string>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** HTTP remote server configuration. */
|
|
19
|
+
export interface McpHttpServerConfig {
|
|
20
|
+
type: 'http';
|
|
21
|
+
url: string;
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Union type for all MCP server configurations. */
|
|
26
|
+
export type McpServerConfig =
|
|
27
|
+
| McpStdioServerConfig
|
|
28
|
+
| McpSSEServerConfig
|
|
29
|
+
| McpHttpServerConfig;
|
|
30
|
+
|
|
31
|
+
/** Server type identifier. */
|
|
32
|
+
export type McpServerType = 'stdio' | 'sse' | 'http';
|
|
33
|
+
|
|
34
|
+
/** Managed MCP server configuration with UI/runtime metadata. */
|
|
35
|
+
export interface ManagedMcpServer {
|
|
36
|
+
/** Unique server name (key in mcpServers record). */
|
|
37
|
+
name: string;
|
|
38
|
+
config: McpServerConfig;
|
|
39
|
+
enabled: boolean;
|
|
40
|
+
/** Context-saving mode: hide tools unless @-mentioned. */
|
|
41
|
+
contextSaving: boolean;
|
|
42
|
+
/** Tool names disabled for this server. */
|
|
43
|
+
disabledTools?: string[];
|
|
44
|
+
description?: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** MCP configuration file format used by the current CLI integrations. */
|
|
48
|
+
export interface McpConfigFile {
|
|
49
|
+
mcpServers: Record<string, McpServerConfig>;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Extended config file with app-owned server metadata. */
|
|
53
|
+
export interface ManagedMcpConfigFile extends McpConfigFile {
|
|
54
|
+
_claudian?: {
|
|
55
|
+
/** Per-server UI/runtime settings. */
|
|
56
|
+
servers: Record<
|
|
57
|
+
string,
|
|
58
|
+
{
|
|
59
|
+
enabled?: boolean;
|
|
60
|
+
contextSaving?: boolean;
|
|
61
|
+
disabledTools?: string[];
|
|
62
|
+
description?: string;
|
|
63
|
+
}
|
|
64
|
+
>;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Result of parsing clipboard config. */
|
|
69
|
+
export interface ParsedMcpConfig {
|
|
70
|
+
servers: Array<{ name: string; config: McpServerConfig }>;
|
|
71
|
+
needsName: boolean;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function getMcpServerType(config: McpServerConfig): McpServerType {
|
|
75
|
+
if (config.type === 'sse') return 'sse';
|
|
76
|
+
if (config.type === 'http') return 'http';
|
|
77
|
+
if ('url' in config) return 'http'; // URL without explicit type defaults to http
|
|
78
|
+
return 'stdio';
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function isValidMcpServerConfig(obj: unknown): obj is McpServerConfig {
|
|
82
|
+
if (!obj || typeof obj !== 'object') return false;
|
|
83
|
+
const config = obj as Record<string, unknown>;
|
|
84
|
+
|
|
85
|
+
// Check for stdio (command required)
|
|
86
|
+
if (config.command && typeof config.command === 'string') return true;
|
|
87
|
+
|
|
88
|
+
// Check for sse/http (url required, type is optional - defaults to http)
|
|
89
|
+
if (config.url && typeof config.url === 'string') return true;
|
|
90
|
+
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export const DEFAULT_MCP_SERVER: Omit<ManagedMcpServer, 'name' | 'config'> = {
|
|
95
|
+
enabled: true,
|
|
96
|
+
contextSaving: true,
|
|
97
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ProviderId = string;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
export type HiddenProviderCommands = Record<string, string[]>;
|
|
2
|
+
|
|
3
|
+
export interface ApprovalSelectionDecision {
|
|
4
|
+
type: 'select-option';
|
|
5
|
+
value: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/** User decision from the approval modal. */
|
|
9
|
+
export type ApprovalDecision =
|
|
10
|
+
| 'allow'
|
|
11
|
+
| 'allow-always'
|
|
12
|
+
| 'deny'
|
|
13
|
+
| 'cancel'
|
|
14
|
+
| ApprovalSelectionDecision;
|
|
15
|
+
|
|
16
|
+
/** Saved environment variable configuration. */
|
|
17
|
+
export interface EnvSnippet {
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
envVars: string;
|
|
22
|
+
scope?: EnvironmentScope;
|
|
23
|
+
contextLimits?: Record<string, number>; // Optional: context limits for custom models
|
|
24
|
+
modelAliases?: Record<string, string>; // Optional: display aliases for custom models
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Source of a slash command. */
|
|
28
|
+
export type SlashCommandSource = 'builtin' | 'user' | 'plugin' | 'sdk';
|
|
29
|
+
|
|
30
|
+
/** Slash command configuration shared by the UI, storage, and runtime boundary. */
|
|
31
|
+
export interface SlashCommand {
|
|
32
|
+
id: string;
|
|
33
|
+
name: string; // Command name used after / (e.g., "review-code")
|
|
34
|
+
description?: string; // Optional description shown in dropdown
|
|
35
|
+
argumentHint?: string; // Placeholder text for arguments (e.g., "[file] [focus]")
|
|
36
|
+
allowedTools?: string[]; // Restrict tools when command is used
|
|
37
|
+
model?: string; // Optional provider-specific model override
|
|
38
|
+
content: string; // Prompt template with placeholders
|
|
39
|
+
source?: SlashCommandSource; // Origin of the command (builtin, user, plugin, sdk)
|
|
40
|
+
kind?: 'command' | 'skill'; // Explicit type — replaces id-prefix heuristic
|
|
41
|
+
// Provider-owned command metadata that the UI preserves and round-trips.
|
|
42
|
+
disableModelInvocation?: boolean; // Disable model invocation for this skill
|
|
43
|
+
userInvocable?: boolean; // Whether user can invoke this skill directly
|
|
44
|
+
context?: 'fork'; // Subagent execution mode
|
|
45
|
+
agent?: string; // Subagent type when context='fork'
|
|
46
|
+
hooks?: Record<string, unknown>; // Pass-through to SDK
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Keyboard navigation settings for vim-style scrolling. */
|
|
50
|
+
export interface KeyboardNavigationSettings {
|
|
51
|
+
scrollUpKey: string; // Key to scroll up when focused on messages (default: 'w')
|
|
52
|
+
scrollDownKey: string; // Key to scroll down when focused on messages (default: 's')
|
|
53
|
+
focusInputKey: string; // Key to focus input (default: 'i', like vim insert mode)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export const CHAT_VIEW_PLACEMENTS = [
|
|
57
|
+
'right-sidebar',
|
|
58
|
+
'left-sidebar',
|
|
59
|
+
'main-tab',
|
|
60
|
+
] as const;
|
|
61
|
+
|
|
62
|
+
/** Workspace location used when opening the Claudian chat view. */
|
|
63
|
+
export type ChatViewPlacement = typeof CHAT_VIEW_PLACEMENTS[number];
|
|
64
|
+
|
|
65
|
+
/** Result from instruction refinement agent query. */
|
|
66
|
+
export interface InstructionRefineResult {
|
|
67
|
+
success: boolean;
|
|
68
|
+
refinedInstruction?: string; // The refined instruction text
|
|
69
|
+
clarification?: string; // Agent's clarifying question (if any)
|
|
70
|
+
error?: string; // Error message (if failed)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Permission mode for tool execution. */
|
|
74
|
+
export type PermissionMode = 'yolo' | 'plan' | 'normal';
|
|
75
|
+
|
|
76
|
+
/** Scope for environment variable storage and snippets. */
|
|
77
|
+
export type EnvironmentScope = 'shared' | `provider:${string}`;
|
|
78
|
+
|
|
79
|
+
/** Opaque device-keyed CLI paths for per-device configuration. */
|
|
80
|
+
export type HostnameCliPaths = Record<string, string>;
|
|
81
|
+
|
|
82
|
+
/** Opaque provider-owned settings bags keyed by provider id. */
|
|
83
|
+
export type ProviderConfigMap = Partial<Record<string, Record<string, unknown>>>;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Application settings stored in .claudian/claudian-settings.json.
|
|
87
|
+
*
|
|
88
|
+
* Provider-specific fields (model, thinkingBudget, effortLevel, serviceTier, etc.) use
|
|
89
|
+
* `string` here. The active provider casts internally when it needs
|
|
90
|
+
* narrower types.
|
|
91
|
+
*/
|
|
92
|
+
export interface ClaudianSettings {
|
|
93
|
+
// User preferences
|
|
94
|
+
userName: string;
|
|
95
|
+
|
|
96
|
+
// Security
|
|
97
|
+
permissionMode: PermissionMode;
|
|
98
|
+
|
|
99
|
+
// Model & thinking (provider interprets values)
|
|
100
|
+
model: string;
|
|
101
|
+
thinkingBudget: string;
|
|
102
|
+
effortLevel: string;
|
|
103
|
+
serviceTier: string;
|
|
104
|
+
enableAutoTitleGeneration: boolean;
|
|
105
|
+
titleGenerationModel: string;
|
|
106
|
+
|
|
107
|
+
// Content settings
|
|
108
|
+
excludedTags: string[];
|
|
109
|
+
mediaFolder: string;
|
|
110
|
+
systemPrompt: string;
|
|
111
|
+
persistentExternalContextPaths: string[];
|
|
112
|
+
|
|
113
|
+
// Environment
|
|
114
|
+
sharedEnvironmentVariables: string;
|
|
115
|
+
envSnippets: EnvSnippet[];
|
|
116
|
+
customContextLimits: Record<string, number>;
|
|
117
|
+
customModelAliases: Record<string, string>;
|
|
118
|
+
|
|
119
|
+
// UI settings
|
|
120
|
+
keyboardNavigation: KeyboardNavigationSettings;
|
|
121
|
+
requireCommandOrControlEnterToSend: boolean;
|
|
122
|
+
|
|
123
|
+
// Internationalization
|
|
124
|
+
locale: string;
|
|
125
|
+
|
|
126
|
+
// Provider-owned settings
|
|
127
|
+
providerConfigs: ProviderConfigMap;
|
|
128
|
+
|
|
129
|
+
// Provider selection
|
|
130
|
+
settingsProvider: string; // ProviderId — which provider's model/effort/budget is projected to top-level fields
|
|
131
|
+
savedProviderModel: Partial<Record<string, string>>;
|
|
132
|
+
savedProviderEffort: Partial<Record<string, string>>;
|
|
133
|
+
savedProviderServiceTier: Partial<Record<string, string>>;
|
|
134
|
+
savedProviderThinkingBudget: Partial<Record<string, string>>;
|
|
135
|
+
savedProviderPermissionMode: Partial<Record<string, string>>;
|
|
136
|
+
|
|
137
|
+
// State (provider-specific, round-tripped opaquely)
|
|
138
|
+
lastCustomModel?: string;
|
|
139
|
+
|
|
140
|
+
// UI preferences
|
|
141
|
+
maxTabs: number;
|
|
142
|
+
enableAutoScroll: boolean;
|
|
143
|
+
deferMathRenderingDuringStreaming: boolean;
|
|
144
|
+
expandFileEditsByDefault: boolean;
|
|
145
|
+
chatViewPlacement: ChatViewPlacement;
|
|
146
|
+
|
|
147
|
+
// Provider command visibility
|
|
148
|
+
hiddenProviderCommands: HiddenProviderCommands;
|
|
149
|
+
|
|
150
|
+
// Allow provider-specific extension fields
|
|
151
|
+
[key: string]: unknown;
|
|
152
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { DiffLine, DiffStats } from './diff';
|
|
2
|
+
|
|
3
|
+
/** Diff data for Write/Edit tool operations (pre-computed from SDK structuredPatch). */
|
|
4
|
+
export interface ToolDiffData {
|
|
5
|
+
filePath: string;
|
|
6
|
+
diffLines: DiffLine[];
|
|
7
|
+
stats: DiffStats;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Parsed option for AskUserQuestion tool. */
|
|
11
|
+
export interface AskUserQuestionOption {
|
|
12
|
+
label: string;
|
|
13
|
+
description: string;
|
|
14
|
+
value?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Parsed question for AskUserQuestion tool. */
|
|
18
|
+
export interface AskUserQuestionItem {
|
|
19
|
+
question: string;
|
|
20
|
+
id?: string;
|
|
21
|
+
header: string;
|
|
22
|
+
options: AskUserQuestionOption[];
|
|
23
|
+
multiSelect: boolean;
|
|
24
|
+
isOther?: boolean;
|
|
25
|
+
isSecret?: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** User-provided answers keyed by question text or stable question id. */
|
|
29
|
+
export type AskUserAnswers = Record<string, string | string[]>;
|
|
30
|
+
|
|
31
|
+
/** Tool call tracking with status and result. */
|
|
32
|
+
export interface ToolCallInfo {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
input: Record<string, unknown>;
|
|
36
|
+
status: 'running' | 'completed' | 'error' | 'blocked';
|
|
37
|
+
result?: string;
|
|
38
|
+
isExpanded?: boolean;
|
|
39
|
+
diffData?: ToolDiffData;
|
|
40
|
+
resolvedAnswers?: AskUserAnswers;
|
|
41
|
+
subagent?: SubagentInfo;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export type ExitPlanModeDecision =
|
|
45
|
+
| { type: 'approve' }
|
|
46
|
+
| { type: 'approve-new-session'; planContent: string }
|
|
47
|
+
| { type: 'feedback'; text: string };
|
|
48
|
+
|
|
49
|
+
export type ExitPlanModeCallback = (
|
|
50
|
+
input: Record<string, unknown>,
|
|
51
|
+
signal?: AbortSignal,
|
|
52
|
+
) => Promise<ExitPlanModeDecision | null>;
|
|
53
|
+
|
|
54
|
+
/** Subagent execution mode: sync (nested tools) or async (background). */
|
|
55
|
+
export type SubagentMode = 'sync' | 'async';
|
|
56
|
+
|
|
57
|
+
/** Async subagent lifecycle states. */
|
|
58
|
+
export type AsyncSubagentStatus =
|
|
59
|
+
| 'pending'
|
|
60
|
+
| 'running'
|
|
61
|
+
| 'completed'
|
|
62
|
+
| 'error'
|
|
63
|
+
| 'orphaned';
|
|
64
|
+
|
|
65
|
+
/** Subagent (Agent tool, legacy Task) tracking for sync and async modes. */
|
|
66
|
+
export interface SubagentInfo {
|
|
67
|
+
id: string;
|
|
68
|
+
description: string;
|
|
69
|
+
prompt?: string;
|
|
70
|
+
mode?: SubagentMode;
|
|
71
|
+
isExpanded: boolean;
|
|
72
|
+
result?: string;
|
|
73
|
+
status: 'running' | 'completed' | 'error';
|
|
74
|
+
toolCalls: ToolCallInfo[];
|
|
75
|
+
asyncStatus?: AsyncSubagentStatus;
|
|
76
|
+
agentId?: string;
|
|
77
|
+
outputToolId?: string;
|
|
78
|
+
startedAt?: number;
|
|
79
|
+
completedAt?: number;
|
|
80
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Chat Feature
|
|
2
|
+
|
|
3
|
+
Main sidebar chat interface. `ClaudianView` assembles tabs, controllers, renderers, and provider-backed services around the shared `ChatRuntime` boundary.
|
|
4
|
+
|
|
5
|
+
## Provider Boundary Status
|
|
6
|
+
|
|
7
|
+
- Chat features depend on `ChatRuntime`, `ProviderCapabilities`, and provider-neutral conversation data. `InputController` builds `ChatTurnRequest`; runtimes own prompt encoding through `prepareTurn()`.
|
|
8
|
+
- Session bookkeeping lives in `Conversation.providerState` and is usually updated through `ChatRuntime.buildSessionUpdates()`, with fork/bootstrap state also seeded through provider history services. Feature code must not read provider-specific fields directly.
|
|
9
|
+
- Provider-owned services are resolved through registries
|
|
10
|
+
- `ProviderRegistry`: runtime, title generation, instruction refinement, inline edit, task-result interpretation
|
|
11
|
+
- `ProviderWorkspaceRegistry`: command catalogs, agent mention providers, MCP managers, CLI resolution
|
|
12
|
+
- Current feature split
|
|
13
|
+
- Claude exposes rewind, instruction mode, runtime command discovery, and in-app MCP controls
|
|
14
|
+
- Codex exposes fork, history reload, plan mode, instruction mode, images, inline edit, `$` skills, and subagents, but not rewind
|
|
15
|
+
|
|
16
|
+
## Architecture
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
ClaudianView (lifecycle + assembly)
|
|
20
|
+
├── ChatState
|
|
21
|
+
├── Controllers
|
|
22
|
+
│ ├── ConversationController
|
|
23
|
+
│ ├── StreamController
|
|
24
|
+
│ ├── InputController
|
|
25
|
+
│ ├── SelectionController
|
|
26
|
+
│ ├── BrowserSelectionController
|
|
27
|
+
│ ├── CanvasSelectionController
|
|
28
|
+
│ └── NavigationController
|
|
29
|
+
├── Services
|
|
30
|
+
│ ├── SubagentManager
|
|
31
|
+
│ └── BangBashService
|
|
32
|
+
├── Rendering
|
|
33
|
+
│ ├── MessageRenderer
|
|
34
|
+
│ ├── ToolCallRenderer
|
|
35
|
+
│ ├── ThinkingBlockRenderer
|
|
36
|
+
│ ├── WriteEditRenderer
|
|
37
|
+
│ ├── DiffRenderer
|
|
38
|
+
│ ├── TodoListRenderer
|
|
39
|
+
│ ├── SubagentRenderer
|
|
40
|
+
│ ├── InlineExitPlanMode
|
|
41
|
+
│ ├── InlinePlanApproval
|
|
42
|
+
│ └── InlineAskUserQuestion
|
|
43
|
+
├── Tabs
|
|
44
|
+
│ ├── TabManager
|
|
45
|
+
│ ├── TabBar
|
|
46
|
+
│ └── Tab
|
|
47
|
+
└── UI Components
|
|
48
|
+
├── InputToolbar
|
|
49
|
+
├── FileContextManager
|
|
50
|
+
├── ImageContextManager
|
|
51
|
+
├── StatusPanel
|
|
52
|
+
├── NavigationSidebar
|
|
53
|
+
├── InstructionModeManager
|
|
54
|
+
└── BangBashModeManager
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## State Flow
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
User Input
|
|
61
|
+
-> InputController
|
|
62
|
+
-> ensure runtime for active provider
|
|
63
|
+
-> ChatRuntime.prepareTurn()
|
|
64
|
+
-> ChatRuntime.query()
|
|
65
|
+
-> StreamController
|
|
66
|
+
-> MessageRenderer + ChatState persistence
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The feature layer consumes provider-neutral `StreamChunk` values. Providers own prompt encoding, history/session fallback, and task-result interpretation.
|
|
70
|
+
|
|
71
|
+
## Controllers
|
|
72
|
+
|
|
73
|
+
| Controller | Responsibility |
|
|
74
|
+
|------------|----------------|
|
|
75
|
+
| `ConversationController` | Session switching, history reload, save, and rewind |
|
|
76
|
+
| `StreamController` | Consume stream chunks, update streaming state, auto-scroll, abort handling |
|
|
77
|
+
| `InputController` | Text input, mentions, images, resume dispatch, command dispatch, and post-plan approval flow |
|
|
78
|
+
| `SelectionController` | Editor selection polling and CM6 decorations |
|
|
79
|
+
| `BrowserSelectionController` | Browser view selection tracking |
|
|
80
|
+
| `CanvasSelectionController` | Canvas selection tracking |
|
|
81
|
+
| `NavigationController` | Vim-style keyboard navigation |
|
|
82
|
+
|
|
83
|
+
## Rendering Pipeline
|
|
84
|
+
|
|
85
|
+
| Renderer | Handles |
|
|
86
|
+
|----------|---------|
|
|
87
|
+
| `MessageRenderer` | Main message orchestration, rewind/fork affordances, interrupt markers |
|
|
88
|
+
| `ToolCallRenderer` | Tool blocks and tool state |
|
|
89
|
+
| `ThinkingBlockRenderer` | Thinking / reasoning summaries |
|
|
90
|
+
| `WriteEditRenderer` | File writes and edits with diff previews |
|
|
91
|
+
| `DiffRenderer` | Inline diff rendering |
|
|
92
|
+
| `InlineExitPlanMode` | Claude tool-driven exit-plan approval |
|
|
93
|
+
| `InlinePlanApproval` | Shared post-plan approval flow driven by consumed turn metadata (currently Codex) |
|
|
94
|
+
| `InlineAskUserQuestion` | Ask-user cards emitted by provider runtimes |
|
|
95
|
+
| `TodoListRenderer` | Todo items and status icons |
|
|
96
|
+
| `SubagentRenderer` | Background agent lifecycle rendering |
|
|
97
|
+
|
|
98
|
+
## Key Patterns
|
|
99
|
+
|
|
100
|
+
### Lazy Runtime Initialization
|
|
101
|
+
|
|
102
|
+
Tabs stay cold until the first send. The tab wiring exposes `ensureServiceInitialized()` so provider runtime creation happens only when needed.
|
|
103
|
+
|
|
104
|
+
### Message Streaming
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
const preparedTurn = runtime.prepareTurn(request);
|
|
108
|
+
|
|
109
|
+
for await (const chunk of runtime.query(preparedTurn, history)) {
|
|
110
|
+
streamController.handleStreamChunk(chunk);
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Auto-Scroll
|
|
115
|
+
|
|
116
|
+
- Enabled by default during streaming
|
|
117
|
+
- User scroll-up disables it
|
|
118
|
+
- Scroll-to-bottom re-enables it
|
|
119
|
+
- Resets to the saved setting on a new query
|
|
120
|
+
|
|
121
|
+
## Gotchas
|
|
122
|
+
|
|
123
|
+
- `ClaudianView.onClose()` must abort active tabs and dispose runtimes
|
|
124
|
+
- `ChatState` is per-tab; `TabManager` coordinates tab-level operations such as fork targets and provider-aware command catalogs
|
|
125
|
+
- Title generation runs concurrently per conversation and routes by the global title-generation model selection, not by the active chat tab provider
|
|
126
|
+
- `/compact`
|
|
127
|
+
- Claude skips context injection so the provider recognizes the built-in command and persists the compaction boundary
|
|
128
|
+
- Codex routes compact turns to `thread/compact/start` and persists the durable `context_compacted` boundary from JSONL history
|
|
129
|
+
- Plan mode
|
|
130
|
+
- Claude uses provider/runtime events for enter and exit plan mode
|
|
131
|
+
- Codex sets `collaborationMode` on `turn/start` and triggers shared post-plan approval from consumed turn metadata
|
|
132
|
+
- Bang-bash mode bypasses provider runtimes and executes a local shell command directly
|
|
133
|
+
- It is available only when an enabled provider exposes it in `ProviderChatUIConfig` (currently Claude)
|
|
134
|
+
- Forking is provider-owned under the hood
|
|
135
|
+
- Both Claude and Codex support fork
|
|
136
|
+
- `ChatRuntime.resolveSessionIdForFork()` and provider history services own the provider-specific fork/session mapping
|