@xelauvas/xela-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +200 -0
- package/bin/xela +100 -0
- package/package.json +88 -0
- package/src/QueryEngine.ts +1295 -0
- package/src/Task.ts +125 -0
- package/src/Tool.ts +792 -0
- package/src/_shims/_generated_stubs/_universal_stub.mjs +168 -0
- package/src/_shims/_generated_stubs/text_stub.mjs +1 -0
- package/src/_shims/bun_bundle.js +9 -0
- package/src/_shims/cjs_stub.cjs +23 -0
- package/src/_shims/empty_stub.js +33 -0
- package/src/_shims/loader.js +352 -0
- package/src/_shims/openai_adapter.ts +486 -0
- package/src/_shims/react_compiler_runtime.js +17 -0
- package/src/_shims/register.js +148 -0
- package/src/assistant/sessionHistory.ts +87 -0
- package/src/bootstrap/state.ts +1759 -0
- package/src/bridge/bridgeApi.ts +539 -0
- package/src/bridge/bridgeConfig.ts +48 -0
- package/src/bridge/bridgeDebug.ts +135 -0
- package/src/bridge/bridgeEnabled.ts +202 -0
- package/src/bridge/bridgeMain.ts +2999 -0
- package/src/bridge/bridgeMessaging.ts +461 -0
- package/src/bridge/bridgePermissionCallbacks.ts +43 -0
- package/src/bridge/bridgePointer.ts +210 -0
- package/src/bridge/bridgeStatusUtil.ts +163 -0
- package/src/bridge/bridgeUI.ts +530 -0
- package/src/bridge/capacityWake.ts +56 -0
- package/src/bridge/codeSessionApi.ts +168 -0
- package/src/bridge/createSession.ts +384 -0
- package/src/bridge/debugUtils.ts +141 -0
- package/src/bridge/envLessBridgeConfig.ts +165 -0
- package/src/bridge/flushGate.ts +71 -0
- package/src/bridge/inboundAttachments.ts +175 -0
- package/src/bridge/inboundMessages.ts +80 -0
- package/src/bridge/initReplBridge.ts +569 -0
- package/src/bridge/jwtUtils.ts +256 -0
- package/src/bridge/pollConfig.ts +110 -0
- package/src/bridge/pollConfigDefaults.ts +82 -0
- package/src/bridge/remoteBridgeCore.ts +1008 -0
- package/src/bridge/replBridge.ts +2406 -0
- package/src/bridge/replBridgeHandle.ts +36 -0
- package/src/bridge/replBridgeTransport.ts +370 -0
- package/src/bridge/sessionIdCompat.ts +57 -0
- package/src/bridge/sessionRunner.ts +550 -0
- package/src/bridge/trustedDevice.ts +210 -0
- package/src/bridge/types.ts +262 -0
- package/src/bridge/workSecret.ts +127 -0
- package/src/buddy/CompanionSprite.tsx +371 -0
- package/src/buddy/companion.ts +133 -0
- package/src/buddy/prompt.ts +36 -0
- package/src/buddy/sprites.ts +514 -0
- package/src/buddy/types.ts +148 -0
- package/src/buddy/useBuddyNotification.tsx +98 -0
- package/src/cli/exit.ts +31 -0
- package/src/cli/handlers/agents.ts +70 -0
- package/src/cli/handlers/auth.ts +330 -0
- package/src/cli/handlers/autoMode.ts +170 -0
- package/src/cli/handlers/mcp.tsx +362 -0
- package/src/cli/handlers/plugins.ts +878 -0
- package/src/cli/handlers/util.tsx +110 -0
- package/src/cli/ndjsonSafeStringify.ts +32 -0
- package/src/cli/print.ts +5594 -0
- package/src/cli/remoteIO.ts +255 -0
- package/src/cli/structuredIO.ts +859 -0
- package/src/cli/transports/HybridTransport.ts +282 -0
- package/src/cli/transports/SSETransport.ts +711 -0
- package/src/cli/transports/SerialBatchEventUploader.ts +275 -0
- package/src/cli/transports/WebSocketTransport.ts +800 -0
- package/src/cli/transports/WorkerStateUploader.ts +131 -0
- package/src/cli/transports/ccrClient.ts +998 -0
- package/src/cli/transports/transportUtils.ts +45 -0
- package/src/cli/update.ts +422 -0
- package/src/commands/add-dir/add-dir.tsx +126 -0
- package/src/commands/add-dir/index.ts +11 -0
- package/src/commands/add-dir/validation.ts +110 -0
- package/src/commands/advisor.ts +109 -0
- package/src/commands/agents/agents.tsx +12 -0
- package/src/commands/agents/index.ts +10 -0
- package/src/commands/ant-trace/index.js +1 -0
- package/src/commands/autofix-pr/index.js +1 -0
- package/src/commands/backfill-sessions/index.js +1 -0
- package/src/commands/branch/branch.ts +296 -0
- package/src/commands/branch/index.ts +14 -0
- package/src/commands/break-cache/index.js +1 -0
- package/src/commands/bridge/bridge.tsx +509 -0
- package/src/commands/bridge/index.ts +26 -0
- package/src/commands/bridge-kick.ts +200 -0
- package/src/commands/brief.ts +130 -0
- package/src/commands/btw/btw.tsx +243 -0
- package/src/commands/btw/index.ts +13 -0
- package/src/commands/bughunter/index.js +1 -0
- package/src/commands/chrome/chrome.tsx +285 -0
- package/src/commands/chrome/index.ts +13 -0
- package/src/commands/clear/caches.ts +144 -0
- package/src/commands/clear/clear.ts +7 -0
- package/src/commands/clear/conversation.ts +251 -0
- package/src/commands/clear/index.ts +19 -0
- package/src/commands/color/color.ts +93 -0
- package/src/commands/color/index.ts +16 -0
- package/src/commands/commit-push-pr.ts +158 -0
- package/src/commands/commit.ts +92 -0
- package/src/commands/compact/compact.ts +287 -0
- package/src/commands/compact/index.ts +15 -0
- package/src/commands/config/config.tsx +7 -0
- package/src/commands/config/index.ts +11 -0
- package/src/commands/context/context-noninteractive.ts +325 -0
- package/src/commands/context/context.tsx +64 -0
- package/src/commands/context/index.ts +24 -0
- package/src/commands/copy/copy.tsx +371 -0
- package/src/commands/copy/index.ts +15 -0
- package/src/commands/cost/cost.ts +24 -0
- package/src/commands/cost/index.ts +23 -0
- package/src/commands/createMovedToPluginCommand.ts +65 -0
- package/src/commands/ctx_viz/index.js +1 -0
- package/src/commands/debug-tool-call/index.js +1 -0
- package/src/commands/desktop/desktop.tsx +9 -0
- package/src/commands/desktop/index.ts +26 -0
- package/src/commands/diff/diff.tsx +9 -0
- package/src/commands/diff/index.ts +8 -0
- package/src/commands/doctor/doctor.tsx +7 -0
- package/src/commands/doctor/index.ts +12 -0
- package/src/commands/effort/effort.tsx +183 -0
- package/src/commands/effort/index.ts +13 -0
- package/src/commands/env/index.js +1 -0
- package/src/commands/exit/exit.tsx +33 -0
- package/src/commands/exit/index.ts +12 -0
- package/src/commands/export/export.tsx +91 -0
- package/src/commands/export/index.ts +11 -0
- package/src/commands/extra-usage/extra-usage-core.ts +118 -0
- package/src/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
- package/src/commands/extra-usage/extra-usage.tsx +17 -0
- package/src/commands/extra-usage/index.ts +31 -0
- package/src/commands/fast/fast.tsx +269 -0
- package/src/commands/fast/index.ts +26 -0
- package/src/commands/feedback/feedback.tsx +25 -0
- package/src/commands/feedback/index.ts +26 -0
- package/src/commands/files/files.ts +19 -0
- package/src/commands/files/index.ts +12 -0
- package/src/commands/good-claude/index.js +1 -0
- package/src/commands/heapdump/heapdump.ts +17 -0
- package/src/commands/heapdump/index.ts +12 -0
- package/src/commands/help/help.tsx +11 -0
- package/src/commands/help/index.ts +10 -0
- package/src/commands/hooks/hooks.tsx +13 -0
- package/src/commands/hooks/index.ts +11 -0
- package/src/commands/ide/ide.tsx +646 -0
- package/src/commands/ide/index.ts +11 -0
- package/src/commands/init-verifiers.ts +262 -0
- package/src/commands/init.ts +256 -0
- package/src/commands/insights.ts +3200 -0
- package/src/commands/install-github-app/ApiKeyStep.tsx +231 -0
- package/src/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
- package/src/commands/install-github-app/CheckGitHubStep.tsx +15 -0
- package/src/commands/install-github-app/ChooseRepoStep.tsx +211 -0
- package/src/commands/install-github-app/CreatingStep.tsx +65 -0
- package/src/commands/install-github-app/ErrorStep.tsx +85 -0
- package/src/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
- package/src/commands/install-github-app/InstallAppStep.tsx +94 -0
- package/src/commands/install-github-app/OAuthFlowStep.tsx +276 -0
- package/src/commands/install-github-app/SuccessStep.tsx +96 -0
- package/src/commands/install-github-app/WarningsStep.tsx +73 -0
- package/src/commands/install-github-app/index.ts +13 -0
- package/src/commands/install-github-app/install-github-app.tsx +587 -0
- package/src/commands/install-github-app/setupGitHubActions.ts +325 -0
- package/src/commands/install-slack-app/index.ts +12 -0
- package/src/commands/install-slack-app/install-slack-app.ts +30 -0
- package/src/commands/install.tsx +300 -0
- package/src/commands/issue/index.js +1 -0
- package/src/commands/keybindings/index.ts +13 -0
- package/src/commands/keybindings/keybindings.ts +53 -0
- package/src/commands/login/index.ts +14 -0
- package/src/commands/login/login.tsx +104 -0
- package/src/commands/logout/index.ts +10 -0
- package/src/commands/logout/logout.tsx +82 -0
- package/src/commands/mcp/addCommand.ts +280 -0
- package/src/commands/mcp/index.ts +12 -0
- package/src/commands/mcp/mcp.tsx +85 -0
- package/src/commands/mcp/xaaIdpCommand.ts +266 -0
- package/src/commands/memory/index.ts +10 -0
- package/src/commands/memory/memory.tsx +90 -0
- package/src/commands/mobile/index.ts +11 -0
- package/src/commands/mobile/mobile.tsx +274 -0
- package/src/commands/mock-limits/index.js +1 -0
- package/src/commands/model/index.ts +16 -0
- package/src/commands/model/model.tsx +297 -0
- package/src/commands/oauth-refresh/index.js +1 -0
- package/src/commands/onboarding/index.js +1 -0
- package/src/commands/output-style/index.ts +11 -0
- package/src/commands/output-style/output-style.tsx +7 -0
- package/src/commands/passes/index.ts +22 -0
- package/src/commands/passes/passes.tsx +24 -0
- package/src/commands/perf-issue/index.js +1 -0
- package/src/commands/permissions/index.ts +11 -0
- package/src/commands/permissions/permissions.tsx +10 -0
- package/src/commands/plan/index.ts +11 -0
- package/src/commands/plan/plan.tsx +122 -0
- package/src/commands/plugin/AddMarketplace.tsx +162 -0
- package/src/commands/plugin/BrowseMarketplace.tsx +802 -0
- package/src/commands/plugin/DiscoverPlugins.tsx +781 -0
- package/src/commands/plugin/ManageMarketplaces.tsx +838 -0
- package/src/commands/plugin/ManagePlugins.tsx +2215 -0
- package/src/commands/plugin/PluginErrors.tsx +124 -0
- package/src/commands/plugin/PluginOptionsDialog.tsx +357 -0
- package/src/commands/plugin/PluginOptionsFlow.tsx +135 -0
- package/src/commands/plugin/PluginSettings.tsx +1072 -0
- package/src/commands/plugin/PluginTrustWarning.tsx +32 -0
- package/src/commands/plugin/UnifiedInstalledCell.tsx +565 -0
- package/src/commands/plugin/ValidatePlugin.tsx +98 -0
- package/src/commands/plugin/index.tsx +11 -0
- package/src/commands/plugin/parseArgs.ts +103 -0
- package/src/commands/plugin/plugin.tsx +7 -0
- package/src/commands/plugin/pluginDetailsHelpers.tsx +117 -0
- package/src/commands/plugin/usePagination.ts +171 -0
- package/src/commands/pr_comments/index.ts +50 -0
- package/src/commands/privacy-settings/index.ts +14 -0
- package/src/commands/privacy-settings/privacy-settings.tsx +58 -0
- package/src/commands/rate-limit-options/index.ts +19 -0
- package/src/commands/rate-limit-options/rate-limit-options.tsx +210 -0
- package/src/commands/release-notes/index.ts +11 -0
- package/src/commands/release-notes/release-notes.ts +50 -0
- package/src/commands/reload-plugins/index.ts +18 -0
- package/src/commands/reload-plugins/reload-plugins.ts +61 -0
- package/src/commands/remote-env/index.ts +15 -0
- package/src/commands/remote-env/remote-env.tsx +7 -0
- package/src/commands/remote-setup/api.ts +182 -0
- package/src/commands/remote-setup/index.ts +20 -0
- package/src/commands/remote-setup/remote-setup.tsx +187 -0
- package/src/commands/rename/generateSessionName.ts +67 -0
- package/src/commands/rename/index.ts +12 -0
- package/src/commands/rename/rename.ts +87 -0
- package/src/commands/reset-limits/index.js +4 -0
- package/src/commands/resume/index.ts +12 -0
- package/src/commands/resume/resume.tsx +275 -0
- package/src/commands/review/UltrareviewOverageDialog.tsx +96 -0
- package/src/commands/review/reviewRemote.ts +316 -0
- package/src/commands/review/ultrareviewCommand.tsx +58 -0
- package/src/commands/review/ultrareviewEnabled.ts +14 -0
- package/src/commands/review.ts +57 -0
- package/src/commands/rewind/index.ts +13 -0
- package/src/commands/rewind/rewind.ts +13 -0
- package/src/commands/sandbox-toggle/index.ts +50 -0
- package/src/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
- package/src/commands/security-review.ts +243 -0
- package/src/commands/session/index.ts +16 -0
- package/src/commands/session/session.tsx +140 -0
- package/src/commands/share/index.js +1 -0
- package/src/commands/skills/index.ts +10 -0
- package/src/commands/skills/skills.tsx +8 -0
- package/src/commands/stats/index.ts +10 -0
- package/src/commands/stats/stats.tsx +7 -0
- package/src/commands/status/index.ts +12 -0
- package/src/commands/status/status.tsx +8 -0
- package/src/commands/statusline.tsx +24 -0
- package/src/commands/stickers/index.ts +11 -0
- package/src/commands/stickers/stickers.ts +16 -0
- package/src/commands/summary/index.js +1 -0
- package/src/commands/tag/index.ts +12 -0
- package/src/commands/tag/tag.tsx +215 -0
- package/src/commands/tasks/index.ts +11 -0
- package/src/commands/tasks/tasks.tsx +8 -0
- package/src/commands/teleport/index.js +1 -0
- package/src/commands/terminalSetup/index.ts +23 -0
- package/src/commands/terminalSetup/terminalSetup.tsx +531 -0
- package/src/commands/theme/index.ts +10 -0
- package/src/commands/theme/theme.tsx +57 -0
- package/src/commands/thinkback/index.ts +13 -0
- package/src/commands/thinkback/thinkback.tsx +554 -0
- package/src/commands/thinkback-play/index.ts +17 -0
- package/src/commands/thinkback-play/thinkback-play.ts +43 -0
- package/src/commands/ultraplan.tsx +471 -0
- package/src/commands/upgrade/index.ts +16 -0
- package/src/commands/upgrade/upgrade.tsx +38 -0
- package/src/commands/usage/index.ts +9 -0
- package/src/commands/usage/usage.tsx +7 -0
- package/src/commands/version.ts +22 -0
- package/src/commands/vim/index.ts +11 -0
- package/src/commands/vim/vim.ts +38 -0
- package/src/commands/voice/index.ts +20 -0
- package/src/commands/voice/voice.ts +150 -0
- package/src/commands.ts +754 -0
- package/src/components/AgentProgressLine.tsx +136 -0
- package/src/components/App.tsx +56 -0
- package/src/components/ApproveApiKey.tsx +123 -0
- package/src/components/AutoModeOptInDialog.tsx +142 -0
- package/src/components/AutoUpdater.tsx +198 -0
- package/src/components/AutoUpdaterWrapper.tsx +91 -0
- package/src/components/AwsAuthStatusBox.tsx +82 -0
- package/src/components/BaseTextInput.tsx +136 -0
- package/src/components/BashModeProgress.tsx +56 -0
- package/src/components/BridgeDialog.tsx +401 -0
- package/src/components/BypassPermissionsModeDialog.tsx +87 -0
- package/src/components/ChannelDowngradeDialog.tsx +102 -0
- package/src/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
- package/src/components/ClaudeInChromeOnboarding.tsx +121 -0
- package/src/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
- package/src/components/ClickableImageRef.tsx +73 -0
- package/src/components/CompactSummary.tsx +118 -0
- package/src/components/ConfigurableShortcutHint.tsx +57 -0
- package/src/components/ConsoleOAuthFlow.tsx +631 -0
- package/src/components/ContextSuggestions.tsx +47 -0
- package/src/components/ContextVisualization.tsx +489 -0
- package/src/components/CoordinatorAgentStatus.tsx +273 -0
- package/src/components/CostThresholdDialog.tsx +50 -0
- package/src/components/CtrlOToExpand.tsx +51 -0
- package/src/components/CustomSelect/SelectMulti.tsx +213 -0
- package/src/components/CustomSelect/index.ts +3 -0
- package/src/components/CustomSelect/option-map.ts +50 -0
- package/src/components/CustomSelect/select-input-option.tsx +488 -0
- package/src/components/CustomSelect/select-option.tsx +68 -0
- package/src/components/CustomSelect/select.tsx +690 -0
- package/src/components/CustomSelect/use-multi-select-state.ts +414 -0
- package/src/components/CustomSelect/use-select-input.ts +287 -0
- package/src/components/CustomSelect/use-select-navigation.ts +653 -0
- package/src/components/CustomSelect/use-select-state.ts +157 -0
- package/src/components/DesktopHandoff.tsx +193 -0
- package/src/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
- package/src/components/DevBar.tsx +49 -0
- package/src/components/DevChannelsDialog.tsx +105 -0
- package/src/components/DiagnosticsDisplay.tsx +95 -0
- package/src/components/EffortCallout.tsx +265 -0
- package/src/components/EffortIndicator.ts +42 -0
- package/src/components/ExitFlow.tsx +48 -0
- package/src/components/ExportDialog.tsx +128 -0
- package/src/components/FallbackToolUseErrorMessage.tsx +116 -0
- package/src/components/FallbackToolUseRejectedMessage.tsx +16 -0
- package/src/components/FastIcon.tsx +46 -0
- package/src/components/Feedback.tsx +592 -0
- package/src/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
- package/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
- package/src/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
- package/src/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
- package/src/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
- package/src/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
- package/src/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
- package/src/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
- package/src/components/FeedbackSurvey/useSurveyState.tsx +100 -0
- package/src/components/FileEditToolDiff.tsx +181 -0
- package/src/components/FileEditToolUpdatedMessage.tsx +124 -0
- package/src/components/FileEditToolUseRejectedMessage.tsx +170 -0
- package/src/components/FilePathLink.tsx +43 -0
- package/src/components/FullscreenLayout.tsx +637 -0
- package/src/components/GlobalSearchDialog.tsx +343 -0
- package/src/components/HelpV2/Commands.tsx +82 -0
- package/src/components/HelpV2/General.tsx +23 -0
- package/src/components/HelpV2/HelpV2.tsx +184 -0
- package/src/components/HighlightedCode/Fallback.tsx +193 -0
- package/src/components/HighlightedCode.tsx +190 -0
- package/src/components/HistorySearchDialog.tsx +118 -0
- package/src/components/IdeAutoConnectDialog.tsx +154 -0
- package/src/components/IdeOnboardingDialog.tsx +167 -0
- package/src/components/IdeStatusIndicator.tsx +58 -0
- package/src/components/IdleReturnDialog.tsx +118 -0
- package/src/components/InterruptedByUser.tsx +15 -0
- package/src/components/InvalidConfigDialog.tsx +156 -0
- package/src/components/InvalidSettingsDialog.tsx +89 -0
- package/src/components/KeybindingWarnings.tsx +55 -0
- package/src/components/LanguagePicker.tsx +86 -0
- package/src/components/LogSelector.tsx +1575 -0
- package/src/components/LogoV2/AnimatedAsterisk.tsx +50 -0
- package/src/components/LogoV2/AnimatedClawd.tsx +124 -0
- package/src/components/LogoV2/ChannelsNotice.tsx +266 -0
- package/src/components/LogoV2/Clawd.tsx +240 -0
- package/src/components/LogoV2/CondensedLogo.tsx +161 -0
- package/src/components/LogoV2/EmergencyTip.tsx +58 -0
- package/src/components/LogoV2/Feed.tsx +112 -0
- package/src/components/LogoV2/FeedColumn.tsx +59 -0
- package/src/components/LogoV2/GuestPassesUpsell.tsx +70 -0
- package/src/components/LogoV2/LogoV2.tsx +543 -0
- package/src/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
- package/src/components/LogoV2/OverageCreditUpsell.tsx +166 -0
- package/src/components/LogoV2/VoiceModeNotice.tsx +68 -0
- package/src/components/LogoV2/WelcomeV2.tsx +433 -0
- package/src/components/LogoV2/feedConfigs.tsx +92 -0
- package/src/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
- package/src/components/MCPServerApprovalDialog.tsx +115 -0
- package/src/components/MCPServerDesktopImportDialog.tsx +203 -0
- package/src/components/MCPServerDialogCopy.tsx +15 -0
- package/src/components/MCPServerMultiselectDialog.tsx +133 -0
- package/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
- package/src/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
- package/src/components/Markdown.tsx +236 -0
- package/src/components/MarkdownTable.tsx +322 -0
- package/src/components/MemoryUsageIndicator.tsx +37 -0
- package/src/components/Message.tsx +627 -0
- package/src/components/MessageModel.tsx +43 -0
- package/src/components/MessageResponse.tsx +78 -0
- package/src/components/MessageRow.tsx +383 -0
- package/src/components/MessageSelector.tsx +831 -0
- package/src/components/MessageTimestamp.tsx +63 -0
- package/src/components/Messages.tsx +834 -0
- package/src/components/ModelPicker.tsx +448 -0
- package/src/components/NativeAutoUpdater.tsx +193 -0
- package/src/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
- package/src/components/OffscreenFreeze.tsx +44 -0
- package/src/components/Onboarding.tsx +244 -0
- package/src/components/OutputStylePicker.tsx +112 -0
- package/src/components/PackageManagerAutoUpdater.tsx +104 -0
- package/src/components/Passes/Passes.tsx +184 -0
- package/src/components/PrBadge.tsx +97 -0
- package/src/components/PressEnterToContinue.tsx +15 -0
- package/src/components/PromptInput/HistorySearchInput.tsx +51 -0
- package/src/components/PromptInput/IssueFlagBanner.tsx +12 -0
- package/src/components/PromptInput/Notifications.tsx +332 -0
- package/src/components/PromptInput/PromptInput.tsx +2339 -0
- package/src/components/PromptInput/PromptInputFooter.tsx +191 -0
- package/src/components/PromptInput/PromptInputFooterLeftSide.tsx +517 -0
- package/src/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
- package/src/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
- package/src/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
- package/src/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
- package/src/components/PromptInput/PromptInputStashNotice.tsx +25 -0
- package/src/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
- package/src/components/PromptInput/ShimmeredInput.tsx +143 -0
- package/src/components/PromptInput/VoiceIndicator.tsx +137 -0
- package/src/components/PromptInput/inputModes.ts +33 -0
- package/src/components/PromptInput/inputPaste.ts +90 -0
- package/src/components/PromptInput/useMaybeTruncateInput.ts +58 -0
- package/src/components/PromptInput/usePromptInputPlaceholder.ts +76 -0
- package/src/components/PromptInput/useShowFastIconHint.ts +31 -0
- package/src/components/PromptInput/useSwarmBanner.ts +155 -0
- package/src/components/PromptInput/utils.ts +60 -0
- package/src/components/QuickOpenDialog.tsx +244 -0
- package/src/components/RemoteCallout.tsx +76 -0
- package/src/components/RemoteEnvironmentDialog.tsx +340 -0
- package/src/components/ResumeTask.tsx +268 -0
- package/src/components/SandboxViolationExpandedView.tsx +99 -0
- package/src/components/ScrollKeybindingHandler.tsx +1012 -0
- package/src/components/SearchBox.tsx +72 -0
- package/src/components/SentryErrorBoundary.ts +28 -0
- package/src/components/SessionBackgroundHint.tsx +108 -0
- package/src/components/SessionPreview.tsx +194 -0
- package/src/components/Settings/Config.tsx +1822 -0
- package/src/components/Settings/Settings.tsx +137 -0
- package/src/components/Settings/Status.tsx +241 -0
- package/src/components/Settings/Usage.tsx +377 -0
- package/src/components/ShowInIDEPrompt.tsx +170 -0
- package/src/components/SkillImprovementSurvey.tsx +152 -0
- package/src/components/Spinner/FlashingChar.tsx +61 -0
- package/src/components/Spinner/GlimmerMessage.tsx +328 -0
- package/src/components/Spinner/ShimmerChar.tsx +36 -0
- package/src/components/Spinner/SpinnerAnimationRow.tsx +265 -0
- package/src/components/Spinner/SpinnerGlyph.tsx +80 -0
- package/src/components/Spinner/TeammateSpinnerLine.tsx +233 -0
- package/src/components/Spinner/TeammateSpinnerTree.tsx +272 -0
- package/src/components/Spinner/index.ts +10 -0
- package/src/components/Spinner/teammateSelectHint.ts +1 -0
- package/src/components/Spinner/useShimmerAnimation.ts +31 -0
- package/src/components/Spinner/useStalledAnimation.ts +75 -0
- package/src/components/Spinner/utils.ts +84 -0
- package/src/components/Spinner.tsx +562 -0
- package/src/components/Stats.tsx +1228 -0
- package/src/components/StatusLine.tsx +324 -0
- package/src/components/StatusNotices.tsx +55 -0
- package/src/components/StructuredDiff/Fallback.tsx +487 -0
- package/src/components/StructuredDiff/colorDiff.ts +37 -0
- package/src/components/StructuredDiff.tsx +190 -0
- package/src/components/StructuredDiffList.tsx +30 -0
- package/src/components/TagTabs.tsx +139 -0
- package/src/components/TaskListV2.tsx +378 -0
- package/src/components/TeammateViewHeader.tsx +82 -0
- package/src/components/TeleportError.tsx +189 -0
- package/src/components/TeleportProgress.tsx +140 -0
- package/src/components/TeleportRepoMismatchDialog.tsx +104 -0
- package/src/components/TeleportResumeWrapper.tsx +167 -0
- package/src/components/TeleportStash.tsx +116 -0
- package/src/components/TextInput.tsx +124 -0
- package/src/components/ThemePicker.tsx +333 -0
- package/src/components/ThinkingToggle.tsx +153 -0
- package/src/components/TokenWarning.tsx +179 -0
- package/src/components/ToolUseLoader.tsx +42 -0
- package/src/components/TrustDialog/TrustDialog.tsx +290 -0
- package/src/components/TrustDialog/utils.ts +245 -0
- package/src/components/ValidationErrorsList.tsx +148 -0
- package/src/components/VimTextInput.tsx +140 -0
- package/src/components/VirtualMessageList.tsx +1082 -0
- package/src/components/WorkflowMultiselectDialog.tsx +128 -0
- package/src/components/WorktreeExitDialog.tsx +231 -0
- package/src/components/agents/AgentDetail.tsx +220 -0
- package/src/components/agents/AgentEditor.tsx +178 -0
- package/src/components/agents/AgentNavigationFooter.tsx +26 -0
- package/src/components/agents/AgentsList.tsx +440 -0
- package/src/components/agents/AgentsMenu.tsx +800 -0
- package/src/components/agents/ColorPicker.tsx +112 -0
- package/src/components/agents/ModelSelector.tsx +68 -0
- package/src/components/agents/ToolSelector.tsx +562 -0
- package/src/components/agents/agentFileUtils.ts +272 -0
- package/src/components/agents/generateAgent.ts +197 -0
- package/src/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
- package/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
- package/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
- package/src/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
- package/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
- package/src/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
- package/src/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
- package/src/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
- package/src/components/agents/types.ts +27 -0
- package/src/components/agents/utils.ts +18 -0
- package/src/components/agents/validateAgent.ts +109 -0
- package/src/components/design-system/Byline.tsx +77 -0
- package/src/components/design-system/Dialog.tsx +138 -0
- package/src/components/design-system/Divider.tsx +149 -0
- package/src/components/design-system/FuzzyPicker.tsx +312 -0
- package/src/components/design-system/KeyboardShortcutHint.tsx +81 -0
- package/src/components/design-system/ListItem.tsx +244 -0
- package/src/components/design-system/LoadingState.tsx +94 -0
- package/src/components/design-system/Pane.tsx +77 -0
- package/src/components/design-system/ProgressBar.tsx +86 -0
- package/src/components/design-system/Ratchet.tsx +80 -0
- package/src/components/design-system/StatusIcon.tsx +95 -0
- package/src/components/design-system/Tabs.tsx +340 -0
- package/src/components/design-system/ThemeProvider.tsx +174 -0
- package/src/components/design-system/ThemedBox.tsx +156 -0
- package/src/components/design-system/ThemedText.tsx +124 -0
- package/src/components/design-system/color.ts +30 -0
- package/src/components/diff/DiffDetailView.tsx +281 -0
- package/src/components/diff/DiffDialog.tsx +383 -0
- package/src/components/diff/DiffFileList.tsx +292 -0
- package/src/components/grove/Grove.tsx +463 -0
- package/src/components/hooks/HooksConfigMenu.tsx +578 -0
- package/src/components/hooks/PromptDialog.tsx +90 -0
- package/src/components/hooks/SelectEventMode.tsx +127 -0
- package/src/components/hooks/SelectHookMode.tsx +112 -0
- package/src/components/hooks/SelectMatcherMode.tsx +144 -0
- package/src/components/hooks/ViewHookMode.tsx +199 -0
- package/src/components/mcp/CapabilitiesSection.tsx +61 -0
- package/src/components/mcp/ElicitationDialog.tsx +1169 -0
- package/src/components/mcp/MCPAgentServerMenu.tsx +183 -0
- package/src/components/mcp/MCPListPanel.tsx +504 -0
- package/src/components/mcp/MCPReconnect.tsx +167 -0
- package/src/components/mcp/MCPRemoteServerMenu.tsx +649 -0
- package/src/components/mcp/MCPSettings.tsx +398 -0
- package/src/components/mcp/MCPStdioServerMenu.tsx +177 -0
- package/src/components/mcp/MCPToolDetailView.tsx +212 -0
- package/src/components/mcp/MCPToolListView.tsx +141 -0
- package/src/components/mcp/McpParsingWarnings.tsx +213 -0
- package/src/components/mcp/index.ts +9 -0
- package/src/components/mcp/utils/reconnectHelpers.tsx +49 -0
- package/src/components/memory/MemoryFileSelector.tsx +438 -0
- package/src/components/memory/MemoryUpdateNotification.tsx +45 -0
- package/src/components/messageActions.tsx +450 -0
- package/src/components/messages/AdvisorMessage.tsx +158 -0
- package/src/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
- package/src/components/messages/AssistantTextMessage.tsx +270 -0
- package/src/components/messages/AssistantThinkingMessage.tsx +86 -0
- package/src/components/messages/AssistantToolUseMessage.tsx +368 -0
- package/src/components/messages/AttachmentMessage.tsx +536 -0
- package/src/components/messages/CollapsedReadSearchContent.tsx +484 -0
- package/src/components/messages/CompactBoundaryMessage.tsx +18 -0
- package/src/components/messages/GroupedToolUseContent.tsx +58 -0
- package/src/components/messages/HighlightedThinkingText.tsx +162 -0
- package/src/components/messages/HookProgressMessage.tsx +116 -0
- package/src/components/messages/PlanApprovalMessage.tsx +222 -0
- package/src/components/messages/RateLimitMessage.tsx +161 -0
- package/src/components/messages/ShutdownMessage.tsx +132 -0
- package/src/components/messages/SystemAPIErrorMessage.tsx +141 -0
- package/src/components/messages/SystemTextMessage.tsx +827 -0
- package/src/components/messages/TaskAssignmentMessage.tsx +76 -0
- package/src/components/messages/UserAgentNotificationMessage.tsx +83 -0
- package/src/components/messages/UserBashInputMessage.tsx +58 -0
- package/src/components/messages/UserBashOutputMessage.tsx +54 -0
- package/src/components/messages/UserChannelMessage.tsx +137 -0
- package/src/components/messages/UserCommandMessage.tsx +108 -0
- package/src/components/messages/UserImageMessage.tsx +59 -0
- package/src/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
- package/src/components/messages/UserMemoryInputMessage.tsx +75 -0
- package/src/components/messages/UserPlanMessage.tsx +42 -0
- package/src/components/messages/UserPromptMessage.tsx +80 -0
- package/src/components/messages/UserResourceUpdateMessage.tsx +121 -0
- package/src/components/messages/UserTeammateMessage.tsx +206 -0
- package/src/components/messages/UserTextMessage.tsx +275 -0
- package/src/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
- package/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
- package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
- package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
- package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
- package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
- package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
- package/src/components/messages/UserToolResultMessage/utils.tsx +44 -0
- package/src/components/messages/nullRenderingAttachments.ts +70 -0
- package/src/components/messages/teamMemCollapsed.tsx +140 -0
- package/src/components/messages/teamMemSaved.ts +19 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
- package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
- package/src/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
- package/src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
- package/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
- package/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
- package/src/components/permissions/FallbackPermissionRequest.tsx +333 -0
- package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
- package/src/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
- package/src/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
- package/src/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
- package/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
- package/src/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
- package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
- package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
- package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
- package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
- package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
- package/src/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
- package/src/components/permissions/PermissionDialog.tsx +72 -0
- package/src/components/permissions/PermissionExplanation.tsx +272 -0
- package/src/components/permissions/PermissionPrompt.tsx +336 -0
- package/src/components/permissions/PermissionRequest.tsx +217 -0
- package/src/components/permissions/PermissionRequestTitle.tsx +66 -0
- package/src/components/permissions/PermissionRuleExplanation.tsx +121 -0
- package/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
- package/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
- package/src/components/permissions/SandboxPermissionRequest.tsx +163 -0
- package/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
- package/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
- package/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
- package/src/components/permissions/WorkerBadge.tsx +49 -0
- package/src/components/permissions/WorkerPendingPermission.tsx +105 -0
- package/src/components/permissions/hooks.ts +209 -0
- package/src/components/permissions/rules/AddPermissionRules.tsx +180 -0
- package/src/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
- package/src/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
- package/src/components/permissions/rules/PermissionRuleInput.tsx +138 -0
- package/src/components/permissions/rules/PermissionRuleList.tsx +1179 -0
- package/src/components/permissions/rules/RecentDenialsTab.tsx +207 -0
- package/src/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
- package/src/components/permissions/rules/WorkspaceTab.tsx +150 -0
- package/src/components/permissions/shellPermissionHelpers.tsx +164 -0
- package/src/components/permissions/useShellPermissionFeedback.ts +148 -0
- package/src/components/permissions/utils.ts +25 -0
- package/src/components/sandbox/SandboxConfigTab.tsx +45 -0
- package/src/components/sandbox/SandboxDependenciesTab.tsx +120 -0
- package/src/components/sandbox/SandboxDoctorSection.tsx +46 -0
- package/src/components/sandbox/SandboxOverridesTab.tsx +193 -0
- package/src/components/sandbox/SandboxSettings.tsx +296 -0
- package/src/components/shell/ExpandShellOutputContext.tsx +36 -0
- package/src/components/shell/OutputLine.tsx +118 -0
- package/src/components/shell/ShellProgressMessage.tsx +150 -0
- package/src/components/shell/ShellTimeDisplay.tsx +74 -0
- package/src/components/skills/SkillsMenu.tsx +237 -0
- package/src/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
- package/src/components/tasks/BackgroundTask.tsx +345 -0
- package/src/components/tasks/BackgroundTaskStatus.tsx +429 -0
- package/src/components/tasks/BackgroundTasksDialog.tsx +652 -0
- package/src/components/tasks/DreamDetailDialog.tsx +251 -0
- package/src/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
- package/src/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
- package/src/components/tasks/RemoteSessionProgress.tsx +243 -0
- package/src/components/tasks/ShellDetailDialog.tsx +404 -0
- package/src/components/tasks/ShellProgress.tsx +87 -0
- package/src/components/tasks/renderToolActivity.tsx +33 -0
- package/src/components/tasks/taskStatusUtils.tsx +107 -0
- package/src/components/teams/TeamStatus.tsx +80 -0
- package/src/components/teams/TeamsDialog.tsx +715 -0
- package/src/components/ui/OrderedList.tsx +71 -0
- package/src/components/ui/OrderedListItem.tsx +45 -0
- package/src/components/ui/TreeSelect.tsx +397 -0
- package/src/components/wizard/WizardDialogLayout.tsx +65 -0
- package/src/components/wizard/WizardNavigationFooter.tsx +24 -0
- package/src/components/wizard/WizardProvider.tsx +213 -0
- package/src/components/wizard/index.ts +9 -0
- package/src/components/wizard/useWizard.ts +13 -0
- package/src/constants/apiLimits.ts +94 -0
- package/src/constants/betas.ts +52 -0
- package/src/constants/common.ts +33 -0
- package/src/constants/cyberRiskInstruction.ts +24 -0
- package/src/constants/errorIds.ts +15 -0
- package/src/constants/figures.ts +45 -0
- package/src/constants/files.ts +156 -0
- package/src/constants/github-app.ts +144 -0
- package/src/constants/keys.ts +11 -0
- package/src/constants/messages.ts +1 -0
- package/src/constants/oauth.ts +234 -0
- package/src/constants/outputStyles.ts +216 -0
- package/src/constants/product.ts +76 -0
- package/src/constants/prompts.ts +914 -0
- package/src/constants/spinnerVerbs.ts +204 -0
- package/src/constants/system.ts +95 -0
- package/src/constants/systemPromptSections.ts +68 -0
- package/src/constants/toolLimits.ts +56 -0
- package/src/constants/tools.ts +112 -0
- package/src/constants/turnCompletionVerbs.ts +12 -0
- package/src/constants/xml.ts +86 -0
- package/src/context/QueuedMessageContext.tsx +63 -0
- package/src/context/fpsMetrics.tsx +30 -0
- package/src/context/mailbox.tsx +38 -0
- package/src/context/modalContext.tsx +58 -0
- package/src/context/notifications.tsx +240 -0
- package/src/context/overlayContext.tsx +151 -0
- package/src/context/promptOverlayContext.tsx +125 -0
- package/src/context/stats.tsx +220 -0
- package/src/context/voice.tsx +88 -0
- package/src/context.ts +189 -0
- package/src/coordinator/coordinatorMode.ts +369 -0
- package/src/cost-tracker.ts +323 -0
- package/src/costHook.ts +22 -0
- package/src/dialogLaunchers.tsx +133 -0
- package/src/entrypoints/agentSdkTypes.ts +443 -0
- package/src/entrypoints/cli.tsx +303 -0
- package/src/entrypoints/init.ts +340 -0
- package/src/entrypoints/mcp.ts +196 -0
- package/src/entrypoints/sandboxTypes.ts +156 -0
- package/src/entrypoints/sdk/controlSchemas.ts +663 -0
- package/src/entrypoints/sdk/coreSchemas.ts +1889 -0
- package/src/entrypoints/sdk/coreTypes.ts +62 -0
- package/src/history.ts +464 -0
- package/src/hooks/fileSuggestions.ts +811 -0
- package/src/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
- package/src/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
- package/src/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
- package/src/hooks/notifs/useFastModeNotification.tsx +162 -0
- package/src/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
- package/src/hooks/notifs/useInstallMessages.tsx +26 -0
- package/src/hooks/notifs/useLspInitializationNotification.tsx +143 -0
- package/src/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
- package/src/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
- package/src/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
- package/src/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
- package/src/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
- package/src/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
- package/src/hooks/notifs/useSettingsErrors.tsx +69 -0
- package/src/hooks/notifs/useStartupNotification.ts +41 -0
- package/src/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
- package/src/hooks/renderPlaceholder.ts +51 -0
- package/src/hooks/toolPermission/PermissionContext.ts +388 -0
- package/src/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
- package/src/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
- package/src/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
- package/src/hooks/toolPermission/permissionLogging.ts +238 -0
- package/src/hooks/unifiedSuggestions.ts +202 -0
- package/src/hooks/useAfterFirstRender.ts +17 -0
- package/src/hooks/useApiKeyVerification.ts +84 -0
- package/src/hooks/useArrowKeyHistory.tsx +229 -0
- package/src/hooks/useAssistantHistory.ts +250 -0
- package/src/hooks/useAwaySummary.ts +125 -0
- package/src/hooks/useBackgroundTaskNavigation.ts +251 -0
- package/src/hooks/useBlink.ts +34 -0
- package/src/hooks/useCanUseTool.tsx +204 -0
- package/src/hooks/useCancelRequest.ts +276 -0
- package/src/hooks/useChromeExtensionNotification.tsx +50 -0
- package/src/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
- package/src/hooks/useClipboardImageHint.ts +77 -0
- package/src/hooks/useCommandKeybindings.tsx +108 -0
- package/src/hooks/useCommandQueue.ts +15 -0
- package/src/hooks/useCopyOnSelect.ts +98 -0
- package/src/hooks/useDeferredHookMessages.ts +46 -0
- package/src/hooks/useDiffData.ts +110 -0
- package/src/hooks/useDiffInIDE.ts +379 -0
- package/src/hooks/useDirectConnect.ts +229 -0
- package/src/hooks/useDoublePress.ts +62 -0
- package/src/hooks/useDynamicConfig.ts +22 -0
- package/src/hooks/useElapsedTime.ts +37 -0
- package/src/hooks/useExitOnCtrlCD.ts +95 -0
- package/src/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
- package/src/hooks/useFileHistorySnapshotInit.ts +25 -0
- package/src/hooks/useGlobalKeybindings.tsx +249 -0
- package/src/hooks/useHistorySearch.ts +303 -0
- package/src/hooks/useIDEIntegration.tsx +70 -0
- package/src/hooks/useIdeAtMentioned.ts +76 -0
- package/src/hooks/useIdeConnectionStatus.ts +33 -0
- package/src/hooks/useIdeLogging.ts +41 -0
- package/src/hooks/useIdeSelection.ts +150 -0
- package/src/hooks/useInboxPoller.ts +969 -0
- package/src/hooks/useInputBuffer.ts +132 -0
- package/src/hooks/useIssueFlagBanner.ts +133 -0
- package/src/hooks/useLogMessages.ts +119 -0
- package/src/hooks/useLspPluginRecommendation.tsx +194 -0
- package/src/hooks/useMailboxBridge.ts +21 -0
- package/src/hooks/useMainLoopModel.ts +34 -0
- package/src/hooks/useManagePlugins.ts +304 -0
- package/src/hooks/useMemoryUsage.ts +39 -0
- package/src/hooks/useMergedClients.ts +23 -0
- package/src/hooks/useMergedCommands.ts +15 -0
- package/src/hooks/useMergedTools.ts +44 -0
- package/src/hooks/useMinDisplayTime.ts +35 -0
- package/src/hooks/useNotifyAfterTimeout.ts +65 -0
- package/src/hooks/useOfficialMarketplaceNotification.tsx +48 -0
- package/src/hooks/usePasteHandler.ts +285 -0
- package/src/hooks/usePluginRecommendationBase.tsx +105 -0
- package/src/hooks/usePrStatus.ts +106 -0
- package/src/hooks/usePromptSuggestion.ts +177 -0
- package/src/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
- package/src/hooks/useQueueProcessor.ts +68 -0
- package/src/hooks/useRemoteSession.ts +605 -0
- package/src/hooks/useReplBridge.tsx +723 -0
- package/src/hooks/useSSHSession.ts +241 -0
- package/src/hooks/useScheduledTasks.ts +139 -0
- package/src/hooks/useSearchInput.ts +364 -0
- package/src/hooks/useSessionBackgrounding.ts +158 -0
- package/src/hooks/useSettings.ts +17 -0
- package/src/hooks/useSettingsChange.ts +25 -0
- package/src/hooks/useSkillImprovementSurvey.ts +105 -0
- package/src/hooks/useSkillsChange.ts +62 -0
- package/src/hooks/useSwarmInitialization.ts +81 -0
- package/src/hooks/useSwarmPermissionPoller.ts +330 -0
- package/src/hooks/useTaskListWatcher.ts +221 -0
- package/src/hooks/useTasksV2.ts +250 -0
- package/src/hooks/useTeammateViewAutoExit.ts +63 -0
- package/src/hooks/useTeleportResume.tsx +85 -0
- package/src/hooks/useTerminalSize.ts +15 -0
- package/src/hooks/useTextInput.ts +529 -0
- package/src/hooks/useTimeout.ts +14 -0
- package/src/hooks/useTurnDiffs.ts +213 -0
- package/src/hooks/useTypeahead.tsx +1385 -0
- package/src/hooks/useUpdateNotification.ts +34 -0
- package/src/hooks/useVimInput.ts +316 -0
- package/src/hooks/useVirtualScroll.ts +721 -0
- package/src/hooks/useVoice.ts +1144 -0
- package/src/hooks/useVoiceEnabled.ts +25 -0
- package/src/hooks/useVoiceIntegration.tsx +677 -0
- package/src/ink/Ansi.tsx +292 -0
- package/src/ink/bidi.ts +139 -0
- package/src/ink/clearTerminal.ts +74 -0
- package/src/ink/colorize.ts +231 -0
- package/src/ink/components/AlternateScreen.tsx +80 -0
- package/src/ink/components/App.tsx +659 -0
- package/src/ink/components/AppContext.ts +21 -0
- package/src/ink/components/Box.tsx +214 -0
- package/src/ink/components/Button.tsx +192 -0
- package/src/ink/components/ClockContext.tsx +112 -0
- package/src/ink/components/CursorDeclarationContext.ts +32 -0
- package/src/ink/components/ErrorOverview.tsx +109 -0
- package/src/ink/components/Link.tsx +42 -0
- package/src/ink/components/Newline.tsx +39 -0
- package/src/ink/components/NoSelect.tsx +68 -0
- package/src/ink/components/RawAnsi.tsx +57 -0
- package/src/ink/components/ScrollBox.tsx +237 -0
- package/src/ink/components/Spacer.tsx +20 -0
- package/src/ink/components/StdinContext.ts +49 -0
- package/src/ink/components/TerminalFocusContext.tsx +52 -0
- package/src/ink/components/TerminalSizeContext.tsx +7 -0
- package/src/ink/components/Text.tsx +254 -0
- package/src/ink/constants.ts +2 -0
- package/src/ink/dom.ts +484 -0
- package/src/ink/events/click-event.ts +38 -0
- package/src/ink/events/dispatcher.ts +233 -0
- package/src/ink/events/emitter.ts +39 -0
- package/src/ink/events/event-handlers.ts +73 -0
- package/src/ink/events/event.ts +11 -0
- package/src/ink/events/focus-event.ts +21 -0
- package/src/ink/events/input-event.ts +205 -0
- package/src/ink/events/keyboard-event.ts +51 -0
- package/src/ink/events/terminal-event.ts +107 -0
- package/src/ink/events/terminal-focus-event.ts +19 -0
- package/src/ink/focus.ts +181 -0
- package/src/ink/frame.ts +124 -0
- package/src/ink/get-max-width.ts +27 -0
- package/src/ink/hit-test.ts +130 -0
- package/src/ink/hooks/use-animation-frame.ts +57 -0
- package/src/ink/hooks/use-app.ts +8 -0
- package/src/ink/hooks/use-declared-cursor.ts +73 -0
- package/src/ink/hooks/use-input.ts +92 -0
- package/src/ink/hooks/use-interval.ts +67 -0
- package/src/ink/hooks/use-search-highlight.ts +53 -0
- package/src/ink/hooks/use-selection.ts +104 -0
- package/src/ink/hooks/use-stdin.ts +8 -0
- package/src/ink/hooks/use-tab-status.ts +72 -0
- package/src/ink/hooks/use-terminal-focus.ts +16 -0
- package/src/ink/hooks/use-terminal-title.ts +31 -0
- package/src/ink/hooks/use-terminal-viewport.ts +96 -0
- package/src/ink/ink.tsx +1728 -0
- package/src/ink/instances.ts +10 -0
- package/src/ink/layout/engine.ts +6 -0
- package/src/ink/layout/geometry.ts +97 -0
- package/src/ink/layout/node.ts +152 -0
- package/src/ink/layout/yoga.ts +308 -0
- package/src/ink/line-width-cache.ts +24 -0
- package/src/ink/log-update.ts +773 -0
- package/src/ink/measure-element.ts +23 -0
- package/src/ink/measure-text.ts +47 -0
- package/src/ink/node-cache.ts +54 -0
- package/src/ink/optimizer.ts +93 -0
- package/src/ink/output.ts +797 -0
- package/src/ink/parse-keypress.ts +801 -0
- package/src/ink/reconciler.ts +512 -0
- package/src/ink/render-border.ts +231 -0
- package/src/ink/render-node-to-output.ts +1462 -0
- package/src/ink/render-to-screen.ts +231 -0
- package/src/ink/renderer.ts +178 -0
- package/src/ink/root.ts +184 -0
- package/src/ink/screen.ts +1486 -0
- package/src/ink/searchHighlight.ts +93 -0
- package/src/ink/selection.ts +917 -0
- package/src/ink/squash-text-nodes.ts +92 -0
- package/src/ink/stringWidth.ts +222 -0
- package/src/ink/styles.ts +771 -0
- package/src/ink/supports-hyperlinks.ts +57 -0
- package/src/ink/tabstops.ts +46 -0
- package/src/ink/terminal-focus-state.ts +47 -0
- package/src/ink/terminal-querier.ts +212 -0
- package/src/ink/terminal.ts +248 -0
- package/src/ink/termio/ansi.ts +75 -0
- package/src/ink/termio/csi.ts +319 -0
- package/src/ink/termio/dec.ts +60 -0
- package/src/ink/termio/esc.ts +67 -0
- package/src/ink/termio/osc.ts +493 -0
- package/src/ink/termio/parser.ts +394 -0
- package/src/ink/termio/sgr.ts +308 -0
- package/src/ink/termio/tokenize.ts +319 -0
- package/src/ink/termio/types.ts +236 -0
- package/src/ink/termio.ts +42 -0
- package/src/ink/useTerminalNotification.ts +126 -0
- package/src/ink/warn.ts +9 -0
- package/src/ink/widest-line.ts +19 -0
- package/src/ink/wrap-text.ts +74 -0
- package/src/ink/wrapAnsi.ts +20 -0
- package/src/ink.ts +85 -0
- package/src/interactiveHelpers.tsx +367 -0
- package/src/keybindings/KeybindingContext.tsx +243 -0
- package/src/keybindings/KeybindingProviderSetup.tsx +308 -0
- package/src/keybindings/defaultBindings.ts +340 -0
- package/src/keybindings/loadUserBindings.ts +472 -0
- package/src/keybindings/match.ts +120 -0
- package/src/keybindings/parser.ts +203 -0
- package/src/keybindings/reservedShortcuts.ts +127 -0
- package/src/keybindings/resolver.ts +244 -0
- package/src/keybindings/schema.ts +236 -0
- package/src/keybindings/shortcutFormat.ts +63 -0
- package/src/keybindings/template.ts +52 -0
- package/src/keybindings/useKeybinding.ts +196 -0
- package/src/keybindings/useShortcutDisplay.ts +59 -0
- package/src/keybindings/validate.ts +498 -0
- package/src/main.tsx +4684 -0
- package/src/memdir/findRelevantMemories.ts +141 -0
- package/src/memdir/memdir.ts +507 -0
- package/src/memdir/memoryAge.ts +53 -0
- package/src/memdir/memoryScan.ts +94 -0
- package/src/memdir/memoryTypes.ts +271 -0
- package/src/memdir/paths.ts +278 -0
- package/src/memdir/teamMemPaths.ts +292 -0
- package/src/memdir/teamMemPrompts.ts +100 -0
- package/src/migrations/migrateAutoUpdatesToSettings.ts +61 -0
- package/src/migrations/migrateBypassPermissionsAcceptedToSettings.ts +40 -0
- package/src/migrations/migrateEnableAllProjectMcpServersToSettings.ts +118 -0
- package/src/migrations/migrateFennecToOpus.ts +45 -0
- package/src/migrations/migrateLegacyOpusToCurrent.ts +57 -0
- package/src/migrations/migrateOpusToOpus1m.ts +43 -0
- package/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +22 -0
- package/src/migrations/migrateSonnet1mToSonnet45.ts +48 -0
- package/src/migrations/migrateSonnet45ToSonnet46.ts +67 -0
- package/src/migrations/resetAutoModeOptInForDefaultOffer.ts +51 -0
- package/src/migrations/resetProToOpusDefault.ts +51 -0
- package/src/moreright/useMoreRight.tsx +26 -0
- package/src/native-ts/color-diff/index.ts +999 -0
- package/src/native-ts/file-index/index.ts +370 -0
- package/src/native-ts/yoga-layout/enums.ts +134 -0
- package/src/native-ts/yoga-layout/index.ts +2578 -0
- package/src/outputStyles/loadOutputStylesDir.ts +98 -0
- package/src/plugins/builtinPlugins.ts +159 -0
- package/src/plugins/bundled/index.ts +23 -0
- package/src/projectOnboardingState.ts +83 -0
- package/src/query/config.ts +46 -0
- package/src/query/deps.ts +40 -0
- package/src/query/stopHooks.ts +473 -0
- package/src/query/tokenBudget.ts +93 -0
- package/src/query.ts +1729 -0
- package/src/remote/RemoteSessionManager.ts +343 -0
- package/src/remote/SessionsWebSocket.ts +404 -0
- package/src/remote/remotePermissionBridge.ts +78 -0
- package/src/remote/sdkMessageAdapter.ts +302 -0
- package/src/replLauncher.tsx +23 -0
- package/src/schemas/hooks.ts +222 -0
- package/src/screens/Doctor.tsx +575 -0
- package/src/screens/REPL.tsx +5006 -0
- package/src/screens/ResumeConversation.tsx +399 -0
- package/src/server/createDirectConnectSession.ts +88 -0
- package/src/server/directConnectManager.ts +213 -0
- package/src/server/types.ts +57 -0
- package/src/services/AgentSummary/agentSummary.ts +179 -0
- package/src/services/MagicDocs/magicDocs.ts +254 -0
- package/src/services/MagicDocs/prompts.ts +127 -0
- package/src/services/PromptSuggestion/promptSuggestion.ts +523 -0
- package/src/services/PromptSuggestion/speculation.ts +991 -0
- package/src/services/SessionMemory/prompts.ts +324 -0
- package/src/services/SessionMemory/sessionMemory.ts +495 -0
- package/src/services/SessionMemory/sessionMemoryUtils.ts +207 -0
- package/src/services/analytics/config.ts +38 -0
- package/src/services/analytics/datadog.ts +307 -0
- package/src/services/analytics/firstPartyEventLogger.ts +449 -0
- package/src/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
- package/src/services/analytics/growthbook.ts +1157 -0
- package/src/services/analytics/index.ts +173 -0
- package/src/services/analytics/metadata.ts +973 -0
- package/src/services/analytics/sink.ts +114 -0
- package/src/services/analytics/sinkKillswitch.ts +25 -0
- package/src/services/api/adminRequests.ts +119 -0
- package/src/services/api/bootstrap.ts +142 -0
- package/src/services/api/claude.ts +3433 -0
- package/src/services/api/client.ts +395 -0
- package/src/services/api/dumpPrompts.ts +226 -0
- package/src/services/api/emptyUsage.ts +22 -0
- package/src/services/api/errorUtils.ts +260 -0
- package/src/services/api/errors.ts +1207 -0
- package/src/services/api/filesApi.ts +748 -0
- package/src/services/api/firstTokenDate.ts +60 -0
- package/src/services/api/grove.ts +357 -0
- package/src/services/api/logging.ts +788 -0
- package/src/services/api/metricsOptOut.ts +159 -0
- package/src/services/api/overageCreditGrant.ts +137 -0
- package/src/services/api/promptCacheBreakDetection.ts +727 -0
- package/src/services/api/referral.ts +281 -0
- package/src/services/api/sessionIngress.ts +514 -0
- package/src/services/api/ultrareviewQuota.ts +38 -0
- package/src/services/api/usage.ts +63 -0
- package/src/services/api/withRetry.ts +826 -0
- package/src/services/autoDream/autoDream.ts +324 -0
- package/src/services/autoDream/config.ts +21 -0
- package/src/services/autoDream/consolidationLock.ts +140 -0
- package/src/services/autoDream/consolidationPrompt.ts +65 -0
- package/src/services/awaySummary.ts +74 -0
- package/src/services/claudeAiLimits.ts +515 -0
- package/src/services/claudeAiLimitsHook.ts +23 -0
- package/src/services/compact/apiMicrocompact.ts +153 -0
- package/src/services/compact/autoCompact.ts +351 -0
- package/src/services/compact/compact.ts +1705 -0
- package/src/services/compact/compactWarningHook.ts +16 -0
- package/src/services/compact/compactWarningState.ts +18 -0
- package/src/services/compact/grouping.ts +63 -0
- package/src/services/compact/microCompact.ts +530 -0
- package/src/services/compact/postCompactCleanup.ts +77 -0
- package/src/services/compact/prompt.ts +374 -0
- package/src/services/compact/sessionMemoryCompact.ts +630 -0
- package/src/services/compact/timeBasedMCConfig.ts +43 -0
- package/src/services/diagnosticTracking.ts +397 -0
- package/src/services/extractMemories/extractMemories.ts +615 -0
- package/src/services/extractMemories/prompts.ts +154 -0
- package/src/services/internalLogging.ts +90 -0
- package/src/services/lsp/LSPClient.ts +447 -0
- package/src/services/lsp/LSPDiagnosticRegistry.ts +386 -0
- package/src/services/lsp/LSPServerInstance.ts +511 -0
- package/src/services/lsp/LSPServerManager.ts +420 -0
- package/src/services/lsp/config.ts +79 -0
- package/src/services/lsp/manager.ts +289 -0
- package/src/services/lsp/passiveFeedback.ts +328 -0
- package/src/services/mcp/InProcessTransport.ts +63 -0
- package/src/services/mcp/MCPConnectionManager.tsx +73 -0
- package/src/services/mcp/SdkControlTransport.ts +136 -0
- package/src/services/mcp/auth.ts +2465 -0
- package/src/services/mcp/channelAllowlist.ts +76 -0
- package/src/services/mcp/channelNotification.ts +316 -0
- package/src/services/mcp/channelPermissions.ts +240 -0
- package/src/services/mcp/claudeai.ts +164 -0
- package/src/services/mcp/client.ts +3348 -0
- package/src/services/mcp/config.ts +1578 -0
- package/src/services/mcp/elicitationHandler.ts +313 -0
- package/src/services/mcp/envExpansion.ts +38 -0
- package/src/services/mcp/headersHelper.ts +138 -0
- package/src/services/mcp/mcpStringUtils.ts +106 -0
- package/src/services/mcp/normalization.ts +23 -0
- package/src/services/mcp/oauthPort.ts +78 -0
- package/src/services/mcp/officialRegistry.ts +72 -0
- package/src/services/mcp/types.ts +258 -0
- package/src/services/mcp/useManageMCPConnections.ts +1141 -0
- package/src/services/mcp/utils.ts +575 -0
- package/src/services/mcp/vscodeSdkMcp.ts +112 -0
- package/src/services/mcp/xaa.ts +511 -0
- package/src/services/mcp/xaaIdpLogin.ts +487 -0
- package/src/services/mcpServerApproval.tsx +41 -0
- package/src/services/mockRateLimits.ts +882 -0
- package/src/services/notifier.ts +156 -0
- package/src/services/oauth/auth-code-listener.ts +211 -0
- package/src/services/oauth/client.ts +566 -0
- package/src/services/oauth/crypto.ts +23 -0
- package/src/services/oauth/getOauthProfile.ts +53 -0
- package/src/services/oauth/index.ts +198 -0
- package/src/services/plugins/PluginInstallationManager.ts +184 -0
- package/src/services/plugins/pluginCliCommands.ts +344 -0
- package/src/services/plugins/pluginOperations.ts +1088 -0
- package/src/services/policyLimits/index.ts +664 -0
- package/src/services/policyLimits/types.ts +27 -0
- package/src/services/preventSleep.ts +165 -0
- package/src/services/rateLimitMessages.ts +344 -0
- package/src/services/rateLimitMocking.ts +144 -0
- package/src/services/remoteManagedSettings/index.ts +639 -0
- package/src/services/remoteManagedSettings/securityCheck.tsx +74 -0
- package/src/services/remoteManagedSettings/syncCache.ts +112 -0
- package/src/services/remoteManagedSettings/syncCacheState.ts +96 -0
- package/src/services/remoteManagedSettings/types.ts +31 -0
- package/src/services/settingsSync/index.ts +581 -0
- package/src/services/settingsSync/types.ts +67 -0
- package/src/services/teamMemorySync/index.ts +1256 -0
- package/src/services/teamMemorySync/secretScanner.ts +324 -0
- package/src/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
- package/src/services/teamMemorySync/types.ts +156 -0
- package/src/services/teamMemorySync/watcher.ts +387 -0
- package/src/services/tips/tipHistory.ts +17 -0
- package/src/services/tips/tipRegistry.ts +686 -0
- package/src/services/tips/tipScheduler.ts +58 -0
- package/src/services/tokenEstimation.ts +495 -0
- package/src/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
- package/src/services/tools/StreamingToolExecutor.ts +530 -0
- package/src/services/tools/toolExecution.ts +1745 -0
- package/src/services/tools/toolHooks.ts +650 -0
- package/src/services/tools/toolOrchestration.ts +188 -0
- package/src/services/vcr.ts +406 -0
- package/src/services/voice.ts +525 -0
- package/src/services/voiceKeyterms.ts +106 -0
- package/src/services/voiceStreamSTT.ts +544 -0
- package/src/setup.ts +477 -0
- package/src/skills/bundled/batch.ts +124 -0
- package/src/skills/bundled/claudeApi.ts +196 -0
- package/src/skills/bundled/claudeApiContent.ts +75 -0
- package/src/skills/bundled/claudeInChrome.ts +34 -0
- package/src/skills/bundled/debug.ts +103 -0
- package/src/skills/bundled/index.ts +79 -0
- package/src/skills/bundled/keybindings.ts +339 -0
- package/src/skills/bundled/loop.ts +92 -0
- package/src/skills/bundled/loremIpsum.ts +282 -0
- package/src/skills/bundled/remember.ts +82 -0
- package/src/skills/bundled/scheduleRemoteAgents.ts +447 -0
- package/src/skills/bundled/simplify.ts +69 -0
- package/src/skills/bundled/skillify.ts +197 -0
- package/src/skills/bundled/stuck.ts +79 -0
- package/src/skills/bundled/updateConfig.ts +475 -0
- package/src/skills/bundled/verify.ts +30 -0
- package/src/skills/bundled/verifyContent.ts +13 -0
- package/src/skills/bundledSkills.ts +220 -0
- package/src/skills/loadSkillsDir.ts +1086 -0
- package/src/skills/mcpSkillBuilders.ts +44 -0
- package/src/state/AppState.tsx +200 -0
- package/src/state/AppStateStore.ts +569 -0
- package/src/state/onChangeAppState.ts +171 -0
- package/src/state/selectors.ts +76 -0
- package/src/state/store.ts +34 -0
- package/src/state/teammateViewHelpers.ts +141 -0
- package/src/tasks/DreamTask/DreamTask.ts +157 -0
- package/src/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +126 -0
- package/src/tasks/InProcessTeammateTask/types.ts +121 -0
- package/src/tasks/LocalAgentTask/LocalAgentTask.tsx +683 -0
- package/src/tasks/LocalMainSessionTask.ts +479 -0
- package/src/tasks/LocalShellTask/LocalShellTask.tsx +523 -0
- package/src/tasks/LocalShellTask/guards.ts +41 -0
- package/src/tasks/LocalShellTask/killShellTasks.ts +76 -0
- package/src/tasks/RemoteAgentTask/RemoteAgentTask.tsx +856 -0
- package/src/tasks/pillLabel.ts +82 -0
- package/src/tasks/stopTask.ts +100 -0
- package/src/tasks/types.ts +46 -0
- package/src/tasks.ts +39 -0
- package/src/tools/AgentTool/AgentTool.tsx +1398 -0
- package/src/tools/AgentTool/UI.tsx +872 -0
- package/src/tools/AgentTool/agentColorManager.ts +66 -0
- package/src/tools/AgentTool/agentDisplay.ts +104 -0
- package/src/tools/AgentTool/agentMemory.ts +177 -0
- package/src/tools/AgentTool/agentMemorySnapshot.ts +197 -0
- package/src/tools/AgentTool/agentToolUtils.ts +686 -0
- package/src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
- package/src/tools/AgentTool/built-in/exploreAgent.ts +83 -0
- package/src/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
- package/src/tools/AgentTool/built-in/planAgent.ts +92 -0
- package/src/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
- package/src/tools/AgentTool/built-in/verificationAgent.ts +152 -0
- package/src/tools/AgentTool/builtInAgents.ts +72 -0
- package/src/tools/AgentTool/constants.ts +12 -0
- package/src/tools/AgentTool/forkSubagent.ts +210 -0
- package/src/tools/AgentTool/loadAgentsDir.ts +755 -0
- package/src/tools/AgentTool/prompt.ts +287 -0
- package/src/tools/AgentTool/resumeAgent.ts +265 -0
- package/src/tools/AgentTool/runAgent.ts +973 -0
- package/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
- package/src/tools/AskUserQuestionTool/prompt.ts +44 -0
- package/src/tools/BashTool/BashTool.tsx +1144 -0
- package/src/tools/BashTool/BashToolResultMessage.tsx +191 -0
- package/src/tools/BashTool/UI.tsx +185 -0
- package/src/tools/BashTool/bashCommandHelpers.ts +265 -0
- package/src/tools/BashTool/bashPermissions.ts +2621 -0
- package/src/tools/BashTool/bashSecurity.ts +2592 -0
- package/src/tools/BashTool/commandSemantics.ts +140 -0
- package/src/tools/BashTool/commentLabel.ts +13 -0
- package/src/tools/BashTool/destructiveCommandWarning.ts +102 -0
- package/src/tools/BashTool/modeValidation.ts +115 -0
- package/src/tools/BashTool/pathValidation.ts +1303 -0
- package/src/tools/BashTool/prompt.ts +369 -0
- package/src/tools/BashTool/readOnlyValidation.ts +1990 -0
- package/src/tools/BashTool/sedEditParser.ts +322 -0
- package/src/tools/BashTool/sedValidation.ts +684 -0
- package/src/tools/BashTool/shouldUseSandbox.ts +153 -0
- package/src/tools/BashTool/toolName.ts +2 -0
- package/src/tools/BashTool/utils.ts +223 -0
- package/src/tools/BriefTool/BriefTool.ts +204 -0
- package/src/tools/BriefTool/UI.tsx +101 -0
- package/src/tools/BriefTool/attachments.ts +110 -0
- package/src/tools/BriefTool/prompt.ts +22 -0
- package/src/tools/BriefTool/upload.ts +174 -0
- package/src/tools/ConfigTool/ConfigTool.ts +467 -0
- package/src/tools/ConfigTool/UI.tsx +38 -0
- package/src/tools/ConfigTool/constants.ts +1 -0
- package/src/tools/ConfigTool/prompt.ts +93 -0
- package/src/tools/ConfigTool/supportedSettings.ts +211 -0
- package/src/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
- package/src/tools/EnterPlanModeTool/UI.tsx +33 -0
- package/src/tools/EnterPlanModeTool/constants.ts +1 -0
- package/src/tools/EnterPlanModeTool/prompt.ts +170 -0
- package/src/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
- package/src/tools/EnterWorktreeTool/UI.tsx +20 -0
- package/src/tools/EnterWorktreeTool/constants.ts +1 -0
- package/src/tools/EnterWorktreeTool/prompt.ts +30 -0
- package/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
- package/src/tools/ExitPlanModeTool/UI.tsx +82 -0
- package/src/tools/ExitPlanModeTool/constants.ts +2 -0
- package/src/tools/ExitPlanModeTool/prompt.ts +29 -0
- package/src/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
- package/src/tools/ExitWorktreeTool/UI.tsx +25 -0
- package/src/tools/ExitWorktreeTool/constants.ts +1 -0
- package/src/tools/ExitWorktreeTool/prompt.ts +32 -0
- package/src/tools/FileEditTool/FileEditTool.ts +625 -0
- package/src/tools/FileEditTool/UI.tsx +289 -0
- package/src/tools/FileEditTool/constants.ts +11 -0
- package/src/tools/FileEditTool/prompt.ts +28 -0
- package/src/tools/FileEditTool/types.ts +85 -0
- package/src/tools/FileEditTool/utils.ts +775 -0
- package/src/tools/FileReadTool/FileReadTool.ts +1183 -0
- package/src/tools/FileReadTool/UI.tsx +185 -0
- package/src/tools/FileReadTool/imageProcessor.ts +94 -0
- package/src/tools/FileReadTool/limits.ts +92 -0
- package/src/tools/FileReadTool/prompt.ts +49 -0
- package/src/tools/FileWriteTool/FileWriteTool.ts +434 -0
- package/src/tools/FileWriteTool/UI.tsx +405 -0
- package/src/tools/FileWriteTool/prompt.ts +18 -0
- package/src/tools/GlobTool/GlobTool.ts +198 -0
- package/src/tools/GlobTool/UI.tsx +63 -0
- package/src/tools/GlobTool/prompt.ts +7 -0
- package/src/tools/GrepTool/GrepTool.ts +577 -0
- package/src/tools/GrepTool/UI.tsx +201 -0
- package/src/tools/GrepTool/prompt.ts +18 -0
- package/src/tools/LSPTool/LSPTool.ts +860 -0
- package/src/tools/LSPTool/UI.tsx +228 -0
- package/src/tools/LSPTool/formatters.ts +592 -0
- package/src/tools/LSPTool/prompt.ts +21 -0
- package/src/tools/LSPTool/schemas.ts +215 -0
- package/src/tools/LSPTool/symbolContext.ts +90 -0
- package/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
- package/src/tools/ListMcpResourcesTool/UI.tsx +29 -0
- package/src/tools/ListMcpResourcesTool/prompt.ts +20 -0
- package/src/tools/MCPTool/MCPTool.ts +77 -0
- package/src/tools/MCPTool/UI.tsx +403 -0
- package/src/tools/MCPTool/classifyForCollapse.ts +604 -0
- package/src/tools/MCPTool/prompt.ts +3 -0
- package/src/tools/McpAuthTool/McpAuthTool.ts +215 -0
- package/src/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
- package/src/tools/NotebookEditTool/UI.tsx +93 -0
- package/src/tools/NotebookEditTool/constants.ts +2 -0
- package/src/tools/NotebookEditTool/prompt.ts +3 -0
- package/src/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
- package/src/tools/PowerShellTool/UI.tsx +131 -0
- package/src/tools/PowerShellTool/clmTypes.ts +211 -0
- package/src/tools/PowerShellTool/commandSemantics.ts +142 -0
- package/src/tools/PowerShellTool/commonParameters.ts +30 -0
- package/src/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
- package/src/tools/PowerShellTool/gitSafety.ts +176 -0
- package/src/tools/PowerShellTool/modeValidation.ts +404 -0
- package/src/tools/PowerShellTool/pathValidation.ts +2049 -0
- package/src/tools/PowerShellTool/powershellPermissions.ts +1648 -0
- package/src/tools/PowerShellTool/powershellSecurity.ts +1090 -0
- package/src/tools/PowerShellTool/prompt.ts +145 -0
- package/src/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
- package/src/tools/PowerShellTool/toolName.ts +2 -0
- package/src/tools/REPLTool/constants.ts +46 -0
- package/src/tools/REPLTool/primitiveTools.ts +39 -0
- package/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
- package/src/tools/ReadMcpResourceTool/UI.tsx +37 -0
- package/src/tools/ReadMcpResourceTool/prompt.ts +16 -0
- package/src/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
- package/src/tools/RemoteTriggerTool/UI.tsx +17 -0
- package/src/tools/RemoteTriggerTool/prompt.ts +15 -0
- package/src/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
- package/src/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
- package/src/tools/ScheduleCronTool/CronListTool.ts +97 -0
- package/src/tools/ScheduleCronTool/UI.tsx +60 -0
- package/src/tools/ScheduleCronTool/prompt.ts +135 -0
- package/src/tools/SendMessageTool/SendMessageTool.ts +917 -0
- package/src/tools/SendMessageTool/UI.tsx +31 -0
- package/src/tools/SendMessageTool/constants.ts +1 -0
- package/src/tools/SendMessageTool/prompt.ts +49 -0
- package/src/tools/SkillTool/SkillTool.ts +1108 -0
- package/src/tools/SkillTool/UI.tsx +128 -0
- package/src/tools/SkillTool/constants.ts +1 -0
- package/src/tools/SkillTool/prompt.ts +241 -0
- package/src/tools/SleepTool/prompt.ts +17 -0
- package/src/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
- package/src/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
- package/src/tools/TaskCreateTool/constants.ts +1 -0
- package/src/tools/TaskCreateTool/prompt.ts +56 -0
- package/src/tools/TaskGetTool/TaskGetTool.ts +128 -0
- package/src/tools/TaskGetTool/constants.ts +1 -0
- package/src/tools/TaskGetTool/prompt.ts +24 -0
- package/src/tools/TaskListTool/TaskListTool.ts +116 -0
- package/src/tools/TaskListTool/constants.ts +1 -0
- package/src/tools/TaskListTool/prompt.ts +49 -0
- package/src/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
- package/src/tools/TaskOutputTool/constants.ts +1 -0
- package/src/tools/TaskStopTool/TaskStopTool.ts +131 -0
- package/src/tools/TaskStopTool/UI.tsx +41 -0
- package/src/tools/TaskStopTool/prompt.ts +8 -0
- package/src/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
- package/src/tools/TaskUpdateTool/constants.ts +1 -0
- package/src/tools/TaskUpdateTool/prompt.ts +77 -0
- package/src/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
- package/src/tools/TeamCreateTool/UI.tsx +6 -0
- package/src/tools/TeamCreateTool/constants.ts +1 -0
- package/src/tools/TeamCreateTool/prompt.ts +113 -0
- package/src/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
- package/src/tools/TeamDeleteTool/UI.tsx +20 -0
- package/src/tools/TeamDeleteTool/constants.ts +1 -0
- package/src/tools/TeamDeleteTool/prompt.ts +16 -0
- package/src/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
- package/src/tools/TodoWriteTool/constants.ts +1 -0
- package/src/tools/TodoWriteTool/prompt.ts +184 -0
- package/src/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
- package/src/tools/ToolSearchTool/constants.ts +1 -0
- package/src/tools/ToolSearchTool/prompt.ts +121 -0
- package/src/tools/TungstenTool/TungstenTool.js +2 -0
- package/src/tools/TungstenTool/TungstenTool.ts +1 -0
- package/src/tools/WebFetchTool/UI.tsx +72 -0
- package/src/tools/WebFetchTool/WebFetchTool.ts +318 -0
- package/src/tools/WebFetchTool/preapproved.ts +166 -0
- package/src/tools/WebFetchTool/prompt.ts +46 -0
- package/src/tools/WebFetchTool/utils.ts +530 -0
- package/src/tools/WebSearchTool/UI.tsx +101 -0
- package/src/tools/WebSearchTool/WebSearchTool.ts +435 -0
- package/src/tools/WebSearchTool/prompt.ts +34 -0
- package/src/tools/shared/gitOperationTracking.ts +277 -0
- package/src/tools/shared/spawnMultiAgent.ts +1093 -0
- package/src/tools/testing/TestingPermissionTool.tsx +74 -0
- package/src/tools/utils.ts +40 -0
- package/src/tools.ts +389 -0
- package/src/types/command.ts +216 -0
- package/src/types/connectorText.js +5 -0
- package/src/types/connectorText.ts +1 -0
- package/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
- package/src/types/generated/events_mono/common/v1/auth.ts +100 -0
- package/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
- package/src/types/generated/google/protobuf/timestamp.ts +187 -0
- package/src/types/hooks.ts +290 -0
- package/src/types/ids.ts +44 -0
- package/src/types/logs.ts +330 -0
- package/src/types/permissions.ts +441 -0
- package/src/types/plugin.ts +363 -0
- package/src/types/textInputTypes.ts +387 -0
- package/src/upstreamproxy/relay.ts +455 -0
- package/src/upstreamproxy/upstreamproxy.ts +285 -0
- package/src/utils/CircularBuffer.ts +84 -0
- package/src/utils/Cursor.ts +1530 -0
- package/src/utils/QueryGuard.ts +121 -0
- package/src/utils/Shell.ts +474 -0
- package/src/utils/ShellCommand.ts +465 -0
- package/src/utils/abortController.ts +99 -0
- package/src/utils/activityManager.ts +164 -0
- package/src/utils/advisor.ts +145 -0
- package/src/utils/agentContext.ts +178 -0
- package/src/utils/agentId.ts +99 -0
- package/src/utils/agentSwarmsEnabled.ts +44 -0
- package/src/utils/agenticSessionSearch.ts +307 -0
- package/src/utils/analyzeContext.ts +1382 -0
- package/src/utils/ansiToPng.ts +334 -0
- package/src/utils/ansiToSvg.ts +272 -0
- package/src/utils/api.ts +718 -0
- package/src/utils/apiPreconnect.ts +72 -0
- package/src/utils/appleTerminalBackup.ts +124 -0
- package/src/utils/argumentSubstitution.ts +145 -0
- package/src/utils/array.ts +13 -0
- package/src/utils/asciicast.ts +239 -0
- package/src/utils/attachments.ts +3997 -0
- package/src/utils/attribution.ts +393 -0
- package/src/utils/auth.ts +2007 -0
- package/src/utils/authFileDescriptor.ts +196 -0
- package/src/utils/authPortable.ts +19 -0
- package/src/utils/autoModeDenials.ts +26 -0
- package/src/utils/autoRunIssue.tsx +122 -0
- package/src/utils/autoUpdater.ts +562 -0
- package/src/utils/aws.ts +74 -0
- package/src/utils/awsAuthStatusManager.ts +81 -0
- package/src/utils/background/remote/preconditions.ts +235 -0
- package/src/utils/background/remote/remoteSession.ts +98 -0
- package/src/utils/backgroundHousekeeping.ts +94 -0
- package/src/utils/bash/ParsedCommand.ts +318 -0
- package/src/utils/bash/ShellSnapshot.ts +582 -0
- package/src/utils/bash/ast.ts +2679 -0
- package/src/utils/bash/bashParser.ts +4436 -0
- package/src/utils/bash/bashPipeCommand.ts +294 -0
- package/src/utils/bash/commands.ts +1339 -0
- package/src/utils/bash/heredoc.ts +733 -0
- package/src/utils/bash/parser.ts +230 -0
- package/src/utils/bash/prefix.ts +204 -0
- package/src/utils/bash/registry.ts +53 -0
- package/src/utils/bash/shellCompletion.ts +259 -0
- package/src/utils/bash/shellPrefix.ts +28 -0
- package/src/utils/bash/shellQuote.ts +304 -0
- package/src/utils/bash/shellQuoting.ts +128 -0
- package/src/utils/bash/specs/alias.ts +14 -0
- package/src/utils/bash/specs/index.ts +18 -0
- package/src/utils/bash/specs/nohup.ts +13 -0
- package/src/utils/bash/specs/pyright.ts +91 -0
- package/src/utils/bash/specs/sleep.ts +13 -0
- package/src/utils/bash/specs/srun.ts +31 -0
- package/src/utils/bash/specs/time.ts +13 -0
- package/src/utils/bash/specs/timeout.ts +20 -0
- package/src/utils/bash/treeSitterAnalysis.ts +506 -0
- package/src/utils/betas.ts +438 -0
- package/src/utils/billing.ts +78 -0
- package/src/utils/binaryCheck.ts +53 -0
- package/src/utils/browser.ts +68 -0
- package/src/utils/bufferedWriter.ts +100 -0
- package/src/utils/bundledMode.ts +22 -0
- package/src/utils/caCerts.ts +115 -0
- package/src/utils/caCertsConfig.ts +88 -0
- package/src/utils/cachePaths.ts +38 -0
- package/src/utils/classifierApprovals.ts +88 -0
- package/src/utils/classifierApprovalsHook.ts +17 -0
- package/src/utils/claudeCodeHints.ts +193 -0
- package/src/utils/claudeDesktop.ts +152 -0
- package/src/utils/claudeInChrome/chromeNativeHost.ts +527 -0
- package/src/utils/claudeInChrome/common.ts +540 -0
- package/src/utils/claudeInChrome/mcpServer.ts +293 -0
- package/src/utils/claudeInChrome/prompt.ts +83 -0
- package/src/utils/claudeInChrome/setup.ts +400 -0
- package/src/utils/claudeInChrome/setupPortable.ts +233 -0
- package/src/utils/claudeInChrome/toolRendering.tsx +262 -0
- package/src/utils/claudemd.ts +1479 -0
- package/src/utils/cleanup.ts +602 -0
- package/src/utils/cleanupRegistry.ts +25 -0
- package/src/utils/cliArgs.ts +60 -0
- package/src/utils/cliHighlight.ts +54 -0
- package/src/utils/codeIndexing.ts +206 -0
- package/src/utils/collapseBackgroundBashNotifications.ts +84 -0
- package/src/utils/collapseHookSummaries.ts +59 -0
- package/src/utils/collapseReadSearch.ts +1109 -0
- package/src/utils/collapseTeammateShutdowns.ts +55 -0
- package/src/utils/combinedAbortSignal.ts +47 -0
- package/src/utils/commandLifecycle.ts +21 -0
- package/src/utils/commitAttribution.ts +961 -0
- package/src/utils/completionCache.ts +166 -0
- package/src/utils/computerUse/appNames.ts +196 -0
- package/src/utils/computerUse/cleanup.ts +86 -0
- package/src/utils/computerUse/common.ts +61 -0
- package/src/utils/computerUse/computerUseLock.ts +215 -0
- package/src/utils/computerUse/drainRunLoop.ts +79 -0
- package/src/utils/computerUse/escHotkey.ts +54 -0
- package/src/utils/computerUse/executor.ts +658 -0
- package/src/utils/computerUse/gates.ts +72 -0
- package/src/utils/computerUse/hostAdapter.ts +69 -0
- package/src/utils/computerUse/inputLoader.ts +30 -0
- package/src/utils/computerUse/mcpServer.ts +106 -0
- package/src/utils/computerUse/setup.ts +53 -0
- package/src/utils/computerUse/swiftLoader.ts +23 -0
- package/src/utils/computerUse/toolRendering.tsx +125 -0
- package/src/utils/computerUse/wrapper.tsx +336 -0
- package/src/utils/concurrentSessions.ts +204 -0
- package/src/utils/config.ts +1817 -0
- package/src/utils/configConstants.ts +21 -0
- package/src/utils/contentArray.ts +51 -0
- package/src/utils/context.ts +221 -0
- package/src/utils/contextAnalysis.ts +272 -0
- package/src/utils/contextSuggestions.ts +235 -0
- package/src/utils/controlMessageCompat.ts +32 -0
- package/src/utils/conversationRecovery.ts +597 -0
- package/src/utils/cron.ts +308 -0
- package/src/utils/cronJitterConfig.ts +75 -0
- package/src/utils/cronScheduler.ts +565 -0
- package/src/utils/cronTasks.ts +458 -0
- package/src/utils/cronTasksLock.ts +195 -0
- package/src/utils/crossProjectResume.ts +75 -0
- package/src/utils/crypto.ts +13 -0
- package/src/utils/cwd.ts +32 -0
- package/src/utils/debug.ts +268 -0
- package/src/utils/debugFilter.ts +157 -0
- package/src/utils/deepLink/banner.ts +123 -0
- package/src/utils/deepLink/parseDeepLink.ts +170 -0
- package/src/utils/deepLink/protocolHandler.ts +136 -0
- package/src/utils/deepLink/registerProtocol.ts +348 -0
- package/src/utils/deepLink/terminalLauncher.ts +557 -0
- package/src/utils/deepLink/terminalPreference.ts +54 -0
- package/src/utils/desktopDeepLink.ts +236 -0
- package/src/utils/detectRepository.ts +178 -0
- package/src/utils/diagLogs.ts +94 -0
- package/src/utils/diff.ts +177 -0
- package/src/utils/directMemberMessage.ts +69 -0
- package/src/utils/displayTags.ts +51 -0
- package/src/utils/doctorContextWarnings.ts +265 -0
- package/src/utils/doctorDiagnostic.ts +625 -0
- package/src/utils/dxt/helpers.ts +88 -0
- package/src/utils/dxt/zip.ts +226 -0
- package/src/utils/earlyInput.ts +191 -0
- package/src/utils/editor.ts +183 -0
- package/src/utils/effort.ts +329 -0
- package/src/utils/embeddedTools.ts +29 -0
- package/src/utils/env.ts +347 -0
- package/src/utils/envDynamic.ts +151 -0
- package/src/utils/envUtils.ts +183 -0
- package/src/utils/envValidation.ts +38 -0
- package/src/utils/errorLogSink.ts +235 -0
- package/src/utils/errors.ts +238 -0
- package/src/utils/exampleCommands.ts +184 -0
- package/src/utils/execFileNoThrow.ts +150 -0
- package/src/utils/execFileNoThrowPortable.ts +89 -0
- package/src/utils/execSyncWrapper.ts +38 -0
- package/src/utils/exportRenderer.tsx +98 -0
- package/src/utils/extraUsage.ts +23 -0
- package/src/utils/fastMode.ts +532 -0
- package/src/utils/file.ts +584 -0
- package/src/utils/fileHistory.ts +1115 -0
- package/src/utils/fileOperationAnalytics.ts +71 -0
- package/src/utils/filePersistence/filePersistence.ts +287 -0
- package/src/utils/filePersistence/outputsScanner.ts +126 -0
- package/src/utils/fileRead.ts +102 -0
- package/src/utils/fileReadCache.ts +96 -0
- package/src/utils/fileStateCache.ts +142 -0
- package/src/utils/findExecutable.ts +17 -0
- package/src/utils/fingerprint.ts +76 -0
- package/src/utils/forkedAgent.ts +689 -0
- package/src/utils/format.ts +308 -0
- package/src/utils/formatBriefTimestamp.ts +81 -0
- package/src/utils/fpsTracker.ts +47 -0
- package/src/utils/frontmatterParser.ts +370 -0
- package/src/utils/fsOperations.ts +770 -0
- package/src/utils/fullscreen.ts +202 -0
- package/src/utils/generatedFiles.ts +136 -0
- package/src/utils/generators.ts +88 -0
- package/src/utils/genericProcessUtils.ts +184 -0
- package/src/utils/getWorktreePaths.ts +70 -0
- package/src/utils/getWorktreePathsPortable.ts +27 -0
- package/src/utils/ghPrStatus.ts +106 -0
- package/src/utils/git/gitConfigParser.ts +277 -0
- package/src/utils/git/gitFilesystem.ts +699 -0
- package/src/utils/git/gitignore.ts +99 -0
- package/src/utils/git.ts +926 -0
- package/src/utils/gitDiff.ts +532 -0
- package/src/utils/gitSettings.ts +18 -0
- package/src/utils/github/ghAuthStatus.ts +29 -0
- package/src/utils/githubRepoPathMapping.ts +162 -0
- package/src/utils/glob.ts +130 -0
- package/src/utils/gracefulShutdown.ts +529 -0
- package/src/utils/groupToolUses.ts +182 -0
- package/src/utils/handlePromptSubmit.ts +610 -0
- package/src/utils/hash.ts +46 -0
- package/src/utils/headlessProfiler.ts +178 -0
- package/src/utils/heapDumpService.ts +303 -0
- package/src/utils/heatmap.ts +198 -0
- package/src/utils/highlightMatch.tsx +28 -0
- package/src/utils/hooks/AsyncHookRegistry.ts +309 -0
- package/src/utils/hooks/apiQueryHookHelper.ts +141 -0
- package/src/utils/hooks/execAgentHook.ts +339 -0
- package/src/utils/hooks/execHttpHook.ts +242 -0
- package/src/utils/hooks/execPromptHook.ts +211 -0
- package/src/utils/hooks/fileChangedWatcher.ts +191 -0
- package/src/utils/hooks/hookEvents.ts +192 -0
- package/src/utils/hooks/hookHelpers.ts +83 -0
- package/src/utils/hooks/hooksConfigManager.ts +400 -0
- package/src/utils/hooks/hooksConfigSnapshot.ts +133 -0
- package/src/utils/hooks/hooksSettings.ts +271 -0
- package/src/utils/hooks/postSamplingHooks.ts +70 -0
- package/src/utils/hooks/registerFrontmatterHooks.ts +67 -0
- package/src/utils/hooks/registerSkillHooks.ts +64 -0
- package/src/utils/hooks/sessionHooks.ts +447 -0
- package/src/utils/hooks/skillImprovement.ts +267 -0
- package/src/utils/hooks/ssrfGuard.ts +294 -0
- package/src/utils/hooks.ts +5022 -0
- package/src/utils/horizontalScroll.ts +137 -0
- package/src/utils/http.ts +136 -0
- package/src/utils/hyperlink.ts +39 -0
- package/src/utils/iTermBackup.ts +73 -0
- package/src/utils/ide.ts +1494 -0
- package/src/utils/idePathConversion.ts +90 -0
- package/src/utils/idleTimeout.ts +53 -0
- package/src/utils/imagePaste.ts +416 -0
- package/src/utils/imageResizer.ts +880 -0
- package/src/utils/imageStore.ts +167 -0
- package/src/utils/imageValidation.ts +104 -0
- package/src/utils/immediateCommand.ts +15 -0
- package/src/utils/inProcessTeammateHelpers.ts +102 -0
- package/src/utils/ink.ts +26 -0
- package/src/utils/intl.ts +94 -0
- package/src/utils/jetbrains.ts +191 -0
- package/src/utils/json.ts +277 -0
- package/src/utils/jsonRead.ts +16 -0
- package/src/utils/keyboardShortcuts.ts +14 -0
- package/src/utils/lazySchema.ts +8 -0
- package/src/utils/listSessionsImpl.ts +454 -0
- package/src/utils/localInstaller.ts +162 -0
- package/src/utils/lockfile.ts +43 -0
- package/src/utils/log.ts +362 -0
- package/src/utils/logoV2Utils.ts +350 -0
- package/src/utils/mailbox.ts +73 -0
- package/src/utils/managedEnv.ts +199 -0
- package/src/utils/managedEnvConstants.ts +191 -0
- package/src/utils/markdown.ts +381 -0
- package/src/utils/markdownConfigLoader.ts +600 -0
- package/src/utils/mcp/dateTimeParser.ts +121 -0
- package/src/utils/mcp/elicitationValidation.ts +336 -0
- package/src/utils/mcpInstructionsDelta.ts +130 -0
- package/src/utils/mcpOutputStorage.ts +189 -0
- package/src/utils/mcpValidation.ts +208 -0
- package/src/utils/mcpWebSocketTransport.ts +200 -0
- package/src/utils/memoize.ts +269 -0
- package/src/utils/memory/types.ts +12 -0
- package/src/utils/memory/versions.ts +8 -0
- package/src/utils/memoryFileDetection.ts +289 -0
- package/src/utils/messagePredicates.ts +8 -0
- package/src/utils/messageQueueManager.ts +547 -0
- package/src/utils/messages/mappers.ts +290 -0
- package/src/utils/messages/systemInit.ts +96 -0
- package/src/utils/messages.ts +5512 -0
- package/src/utils/model/agent.ts +157 -0
- package/src/utils/model/aliases.ts +25 -0
- package/src/utils/model/antModels.ts +64 -0
- package/src/utils/model/bedrock.ts +265 -0
- package/src/utils/model/check1mAccess.ts +72 -0
- package/src/utils/model/configs.ts +118 -0
- package/src/utils/model/contextWindowUpgradeCheck.ts +47 -0
- package/src/utils/model/deprecation.ts +101 -0
- package/src/utils/model/model.ts +634 -0
- package/src/utils/model/modelAllowlist.ts +170 -0
- package/src/utils/model/modelCapabilities.ts +118 -0
- package/src/utils/model/modelOptions.ts +540 -0
- package/src/utils/model/modelStrings.ts +166 -0
- package/src/utils/model/modelSupportOverrides.ts +50 -0
- package/src/utils/model/providers.ts +46 -0
- package/src/utils/model/validateModel.ts +159 -0
- package/src/utils/modelCost.ts +235 -0
- package/src/utils/modifiers.ts +36 -0
- package/src/utils/mtls.ts +179 -0
- package/src/utils/nativeInstaller/download.ts +523 -0
- package/src/utils/nativeInstaller/index.ts +18 -0
- package/src/utils/nativeInstaller/installer.ts +1708 -0
- package/src/utils/nativeInstaller/packageManagers.ts +336 -0
- package/src/utils/nativeInstaller/pidLock.ts +433 -0
- package/src/utils/notebook.ts +224 -0
- package/src/utils/objectGroupBy.ts +18 -0
- package/src/utils/pasteStore.ts +104 -0
- package/src/utils/path.ts +155 -0
- package/src/utils/pdf.ts +300 -0
- package/src/utils/pdfUtils.ts +70 -0
- package/src/utils/peerAddress.ts +21 -0
- package/src/utils/permissions/PermissionMode.ts +141 -0
- package/src/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
- package/src/utils/permissions/PermissionResult.ts +35 -0
- package/src/utils/permissions/PermissionRule.ts +40 -0
- package/src/utils/permissions/PermissionUpdate.ts +389 -0
- package/src/utils/permissions/PermissionUpdateSchema.ts +78 -0
- package/src/utils/permissions/autoModeState.ts +39 -0
- package/src/utils/permissions/bashClassifier.ts +61 -0
- package/src/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
- package/src/utils/permissions/classifierDecision.ts +98 -0
- package/src/utils/permissions/classifierShared.ts +39 -0
- package/src/utils/permissions/dangerousPatterns.ts +80 -0
- package/src/utils/permissions/denialTracking.ts +45 -0
- package/src/utils/permissions/filesystem.ts +1777 -0
- package/src/utils/permissions/getNextPermissionMode.ts +101 -0
- package/src/utils/permissions/pathValidation.ts +485 -0
- package/src/utils/permissions/permissionExplainer.ts +250 -0
- package/src/utils/permissions/permissionRuleParser.ts +198 -0
- package/src/utils/permissions/permissionSetup.ts +1532 -0
- package/src/utils/permissions/permissions.ts +1486 -0
- package/src/utils/permissions/permissionsLoader.ts +296 -0
- package/src/utils/permissions/shadowedRuleDetection.ts +234 -0
- package/src/utils/permissions/shellRuleMatching.ts +228 -0
- package/src/utils/permissions/yoloClassifier.ts +1495 -0
- package/src/utils/planModeV2.ts +95 -0
- package/src/utils/plans.ts +397 -0
- package/src/utils/platform.ts +150 -0
- package/src/utils/plugins/addDirPluginSettings.ts +71 -0
- package/src/utils/plugins/cacheUtils.ts +196 -0
- package/src/utils/plugins/dependencyResolver.ts +305 -0
- package/src/utils/plugins/fetchTelemetry.ts +135 -0
- package/src/utils/plugins/gitAvailability.ts +69 -0
- package/src/utils/plugins/headlessPluginInstall.ts +174 -0
- package/src/utils/plugins/hintRecommendation.ts +164 -0
- package/src/utils/plugins/installCounts.ts +292 -0
- package/src/utils/plugins/installedPluginsManager.ts +1268 -0
- package/src/utils/plugins/loadPluginAgents.ts +348 -0
- package/src/utils/plugins/loadPluginCommands.ts +946 -0
- package/src/utils/plugins/loadPluginHooks.ts +287 -0
- package/src/utils/plugins/loadPluginOutputStyles.ts +178 -0
- package/src/utils/plugins/lspPluginIntegration.ts +387 -0
- package/src/utils/plugins/lspRecommendation.ts +374 -0
- package/src/utils/plugins/managedPlugins.ts +27 -0
- package/src/utils/plugins/marketplaceHelpers.ts +592 -0
- package/src/utils/plugins/marketplaceManager.ts +2643 -0
- package/src/utils/plugins/mcpPluginIntegration.ts +634 -0
- package/src/utils/plugins/mcpbHandler.ts +968 -0
- package/src/utils/plugins/officialMarketplace.ts +25 -0
- package/src/utils/plugins/officialMarketplaceGcs.ts +216 -0
- package/src/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
- package/src/utils/plugins/orphanedPluginFilter.ts +114 -0
- package/src/utils/plugins/parseMarketplaceInput.ts +162 -0
- package/src/utils/plugins/performStartupChecks.tsx +70 -0
- package/src/utils/plugins/pluginAutoupdate.ts +284 -0
- package/src/utils/plugins/pluginBlocklist.ts +127 -0
- package/src/utils/plugins/pluginDirectories.ts +178 -0
- package/src/utils/plugins/pluginFlagging.ts +208 -0
- package/src/utils/plugins/pluginIdentifier.ts +123 -0
- package/src/utils/plugins/pluginInstallationHelpers.ts +595 -0
- package/src/utils/plugins/pluginLoader.ts +3302 -0
- package/src/utils/plugins/pluginOptionsStorage.ts +400 -0
- package/src/utils/plugins/pluginPolicy.ts +20 -0
- package/src/utils/plugins/pluginStartupCheck.ts +341 -0
- package/src/utils/plugins/pluginVersioning.ts +157 -0
- package/src/utils/plugins/reconciler.ts +265 -0
- package/src/utils/plugins/refresh.ts +215 -0
- package/src/utils/plugins/schemas.ts +1681 -0
- package/src/utils/plugins/validatePlugin.ts +903 -0
- package/src/utils/plugins/walkPluginMarkdown.ts +69 -0
- package/src/utils/plugins/zipCache.ts +406 -0
- package/src/utils/plugins/zipCacheAdapters.ts +164 -0
- package/src/utils/powershell/dangerousCmdlets.ts +185 -0
- package/src/utils/powershell/parser.ts +1804 -0
- package/src/utils/powershell/staticPrefix.ts +316 -0
- package/src/utils/preflightChecks.tsx +151 -0
- package/src/utils/privacyLevel.ts +55 -0
- package/src/utils/process.ts +68 -0
- package/src/utils/processUserInput/processBashCommand.tsx +140 -0
- package/src/utils/processUserInput/processSlashCommand.tsx +922 -0
- package/src/utils/processUserInput/processTextPrompt.ts +100 -0
- package/src/utils/processUserInput/processUserInput.ts +605 -0
- package/src/utils/profilerBase.ts +46 -0
- package/src/utils/promptCategory.ts +49 -0
- package/src/utils/promptEditor.ts +188 -0
- package/src/utils/promptShellExecution.ts +183 -0
- package/src/utils/proxy.ts +426 -0
- package/src/utils/queryContext.ts +179 -0
- package/src/utils/queryHelpers.ts +552 -0
- package/src/utils/queryProfiler.ts +301 -0
- package/src/utils/queueProcessor.ts +95 -0
- package/src/utils/readEditContext.ts +227 -0
- package/src/utils/readFileInRange.ts +383 -0
- package/src/utils/releaseNotes.ts +360 -0
- package/src/utils/renderOptions.ts +77 -0
- package/src/utils/ripgrep.ts +679 -0
- package/src/utils/sandbox/sandbox-adapter.ts +985 -0
- package/src/utils/sandbox/sandbox-ui-utils.ts +12 -0
- package/src/utils/sanitization.ts +91 -0
- package/src/utils/screenshotClipboard.ts +121 -0
- package/src/utils/sdkEventQueue.ts +134 -0
- package/src/utils/secureStorage/fallbackStorage.ts +70 -0
- package/src/utils/secureStorage/index.ts +17 -0
- package/src/utils/secureStorage/keychainPrefetch.ts +116 -0
- package/src/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
- package/src/utils/secureStorage/macOsKeychainStorage.ts +231 -0
- package/src/utils/secureStorage/plainTextStorage.ts +84 -0
- package/src/utils/semanticBoolean.ts +29 -0
- package/src/utils/semanticNumber.ts +36 -0
- package/src/utils/semver.ts +59 -0
- package/src/utils/sequential.ts +56 -0
- package/src/utils/sessionActivity.ts +133 -0
- package/src/utils/sessionEnvVars.ts +22 -0
- package/src/utils/sessionEnvironment.ts +166 -0
- package/src/utils/sessionFileAccessHooks.ts +250 -0
- package/src/utils/sessionIngressAuth.ts +140 -0
- package/src/utils/sessionRestore.ts +551 -0
- package/src/utils/sessionStart.ts +232 -0
- package/src/utils/sessionState.ts +150 -0
- package/src/utils/sessionStorage.ts +5105 -0
- package/src/utils/sessionStoragePortable.ts +793 -0
- package/src/utils/sessionTitle.ts +129 -0
- package/src/utils/sessionUrl.ts +64 -0
- package/src/utils/set.ts +53 -0
- package/src/utils/settings/allErrors.ts +32 -0
- package/src/utils/settings/applySettingsChange.ts +92 -0
- package/src/utils/settings/changeDetector.ts +488 -0
- package/src/utils/settings/constants.ts +202 -0
- package/src/utils/settings/internalWrites.ts +37 -0
- package/src/utils/settings/managedPath.ts +34 -0
- package/src/utils/settings/mdm/constants.ts +81 -0
- package/src/utils/settings/mdm/rawRead.ts +130 -0
- package/src/utils/settings/mdm/settings.ts +316 -0
- package/src/utils/settings/permissionValidation.ts +262 -0
- package/src/utils/settings/pluginOnlyPolicy.ts +60 -0
- package/src/utils/settings/schemaOutput.ts +8 -0
- package/src/utils/settings/settings.ts +1015 -0
- package/src/utils/settings/settingsCache.ts +80 -0
- package/src/utils/settings/toolValidationConfig.ts +103 -0
- package/src/utils/settings/types.ts +1148 -0
- package/src/utils/settings/validateEditTool.ts +45 -0
- package/src/utils/settings/validation.ts +265 -0
- package/src/utils/settings/validationTips.ts +164 -0
- package/src/utils/shell/bashProvider.ts +255 -0
- package/src/utils/shell/outputLimits.ts +14 -0
- package/src/utils/shell/powershellDetection.ts +107 -0
- package/src/utils/shell/powershellProvider.ts +123 -0
- package/src/utils/shell/prefix.ts +367 -0
- package/src/utils/shell/readOnlyCommandValidation.ts +1893 -0
- package/src/utils/shell/resolveDefaultShell.ts +14 -0
- package/src/utils/shell/shellProvider.ts +33 -0
- package/src/utils/shell/shellToolUtils.ts +22 -0
- package/src/utils/shell/specPrefix.ts +241 -0
- package/src/utils/shellConfig.ts +167 -0
- package/src/utils/sideQuery.ts +222 -0
- package/src/utils/sideQuestion.ts +155 -0
- package/src/utils/signal.ts +43 -0
- package/src/utils/sinks.ts +16 -0
- package/src/utils/skills/skillChangeDetector.ts +311 -0
- package/src/utils/slashCommandParsing.ts +60 -0
- package/src/utils/sleep.ts +84 -0
- package/src/utils/sliceAnsi.ts +91 -0
- package/src/utils/slowOperations.ts +286 -0
- package/src/utils/standaloneAgent.ts +23 -0
- package/src/utils/startupProfiler.ts +194 -0
- package/src/utils/staticRender.tsx +116 -0
- package/src/utils/stats.ts +1061 -0
- package/src/utils/statsCache.ts +434 -0
- package/src/utils/status.tsx +362 -0
- package/src/utils/statusNoticeDefinitions.tsx +198 -0
- package/src/utils/statusNoticeHelpers.ts +20 -0
- package/src/utils/stream.ts +76 -0
- package/src/utils/streamJsonStdoutGuard.ts +123 -0
- package/src/utils/streamlinedTransform.ts +201 -0
- package/src/utils/stringUtils.ts +235 -0
- package/src/utils/subprocessEnv.ts +99 -0
- package/src/utils/suggestions/commandSuggestions.ts +567 -0
- package/src/utils/suggestions/directoryCompletion.ts +263 -0
- package/src/utils/suggestions/shellHistoryCompletion.ts +119 -0
- package/src/utils/suggestions/skillUsageTracking.ts +55 -0
- package/src/utils/suggestions/slackChannelSuggestions.ts +209 -0
- package/src/utils/swarm/It2SetupPrompt.tsx +380 -0
- package/src/utils/swarm/backends/ITermBackend.ts +370 -0
- package/src/utils/swarm/backends/InProcessBackend.ts +339 -0
- package/src/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
- package/src/utils/swarm/backends/TmuxBackend.ts +764 -0
- package/src/utils/swarm/backends/detection.ts +128 -0
- package/src/utils/swarm/backends/it2Setup.ts +245 -0
- package/src/utils/swarm/backends/registry.ts +464 -0
- package/src/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
- package/src/utils/swarm/backends/types.ts +311 -0
- package/src/utils/swarm/constants.ts +33 -0
- package/src/utils/swarm/inProcessRunner.ts +1552 -0
- package/src/utils/swarm/leaderPermissionBridge.ts +54 -0
- package/src/utils/swarm/permissionSync.ts +928 -0
- package/src/utils/swarm/reconnection.ts +119 -0
- package/src/utils/swarm/spawnInProcess.ts +328 -0
- package/src/utils/swarm/spawnUtils.ts +146 -0
- package/src/utils/swarm/teamHelpers.ts +683 -0
- package/src/utils/swarm/teammateInit.ts +129 -0
- package/src/utils/swarm/teammateLayoutManager.ts +107 -0
- package/src/utils/swarm/teammateModel.ts +10 -0
- package/src/utils/swarm/teammatePromptAddendum.ts +18 -0
- package/src/utils/systemDirectories.ts +74 -0
- package/src/utils/systemPrompt.ts +123 -0
- package/src/utils/systemPromptType.ts +14 -0
- package/src/utils/systemTheme.ts +119 -0
- package/src/utils/taggedId.ts +54 -0
- package/src/utils/task/TaskOutput.ts +390 -0
- package/src/utils/task/diskOutput.ts +451 -0
- package/src/utils/task/framework.ts +308 -0
- package/src/utils/task/outputFormatting.ts +38 -0
- package/src/utils/task/sdkProgress.ts +36 -0
- package/src/utils/tasks.ts +862 -0
- package/src/utils/teamDiscovery.ts +81 -0
- package/src/utils/teamMemoryOps.ts +88 -0
- package/src/utils/teammate.ts +292 -0
- package/src/utils/teammateContext.ts +96 -0
- package/src/utils/teammateMailbox.ts +1183 -0
- package/src/utils/telemetry/betaSessionTracing.ts +491 -0
- package/src/utils/telemetry/bigqueryExporter.ts +252 -0
- package/src/utils/telemetry/events.ts +75 -0
- package/src/utils/telemetry/instrumentation.ts +825 -0
- package/src/utils/telemetry/logger.ts +26 -0
- package/src/utils/telemetry/perfettoTracing.ts +1120 -0
- package/src/utils/telemetry/pluginTelemetry.ts +289 -0
- package/src/utils/telemetry/sessionTracing.ts +927 -0
- package/src/utils/telemetry/skillLoadedEvent.ts +39 -0
- package/src/utils/telemetryAttributes.ts +71 -0
- package/src/utils/teleport/api.ts +466 -0
- package/src/utils/teleport/environmentSelection.ts +77 -0
- package/src/utils/teleport/environments.ts +120 -0
- package/src/utils/teleport/gitBundle.ts +292 -0
- package/src/utils/teleport.tsx +1226 -0
- package/src/utils/tempfile.ts +31 -0
- package/src/utils/terminal.ts +131 -0
- package/src/utils/terminalPanel.ts +191 -0
- package/src/utils/textHighlighting.ts +166 -0
- package/src/utils/theme.ts +639 -0
- package/src/utils/thinking.ts +162 -0
- package/src/utils/timeouts.ts +39 -0
- package/src/utils/tmuxSocket.ts +427 -0
- package/src/utils/todo/types.ts +18 -0
- package/src/utils/tokenBudget.ts +73 -0
- package/src/utils/tokens.ts +261 -0
- package/src/utils/toolErrors.ts +132 -0
- package/src/utils/toolPool.ts +79 -0
- package/src/utils/toolResultStorage.ts +1040 -0
- package/src/utils/toolSchemaCache.ts +26 -0
- package/src/utils/toolSearch.ts +756 -0
- package/src/utils/transcriptSearch.ts +202 -0
- package/src/utils/treeify.ts +170 -0
- package/src/utils/truncate.ts +179 -0
- package/src/utils/ultraplan/ccrSession.ts +349 -0
- package/src/utils/ultraplan/keyword.ts +127 -0
- package/src/utils/ultraplan/prompt.txt +1 -0
- package/src/utils/unaryLogging.ts +39 -0
- package/src/utils/undercover.ts +89 -0
- package/src/utils/user.ts +194 -0
- package/src/utils/userAgent.ts +10 -0
- package/src/utils/userPromptKeywords.ts +27 -0
- package/src/utils/uuid.ts +27 -0
- package/src/utils/warningHandler.ts +121 -0
- package/src/utils/which.ts +82 -0
- package/src/utils/windowsPaths.ts +173 -0
- package/src/utils/withResolvers.ts +13 -0
- package/src/utils/words.ts +800 -0
- package/src/utils/workloadContext.ts +57 -0
- package/src/utils/worktree.ts +1519 -0
- package/src/utils/worktreeModeEnabled.ts +11 -0
- package/src/utils/xdg.ts +65 -0
- package/src/utils/xml.ts +16 -0
- package/src/utils/yaml.ts +15 -0
- package/src/utils/zodToJsonSchema.ts +23 -0
- package/src/vim/motions.ts +82 -0
- package/src/vim/operators.ts +556 -0
- package/src/vim/textObjects.ts +186 -0
- package/src/vim/transitions.ts +490 -0
- package/src/vim/types.ts +199 -0
- package/src/voice/voiceModeEnabled.ts +54 -0
- package/start.js +1 -0
|
@@ -0,0 +1,1479 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Files are loaded in the following order:
|
|
3
|
+
*
|
|
4
|
+
* 1. Managed memory (eg. /etc/claude-code/CLAUDE.md) - Global instructions for all users
|
|
5
|
+
* 2. User memory (~/.claude/CLAUDE.md) - Private global instructions for all projects
|
|
6
|
+
* 3. Project memory (CLAUDE.md, .claude/CLAUDE.md, and .claude/rules/*.md in project roots) - Instructions checked into the codebase
|
|
7
|
+
* 4. Local memory (CLAUDE.local.md in project roots) - Private project-specific instructions
|
|
8
|
+
*
|
|
9
|
+
* Files are loaded in reverse order of priority, i.e. the latest files are highest priority
|
|
10
|
+
* with the model paying more attention to them.
|
|
11
|
+
*
|
|
12
|
+
* File discovery:
|
|
13
|
+
* - User memory is loaded from the user's home directory
|
|
14
|
+
* - Project and Local files are discovered by traversing from the current directory up to root
|
|
15
|
+
* - Files closer to the current directory have higher priority (loaded later)
|
|
16
|
+
* - CLAUDE.md, .claude/CLAUDE.md, and all .md files in .claude/rules/ are checked in each directory for Project memory
|
|
17
|
+
*
|
|
18
|
+
* Memory @include directive:
|
|
19
|
+
* - Memory files can include other files using @ notation
|
|
20
|
+
* - Syntax: @path, @./relative/path, @~/home/path, or @/absolute/path
|
|
21
|
+
* - @path (without prefix) is treated as a relative path (same as @./path)
|
|
22
|
+
* - Works in leaf text nodes only (not inside code blocks or code strings)
|
|
23
|
+
* - Included files are added as separate entries before the including file
|
|
24
|
+
* - Circular references are prevented by tracking processed files
|
|
25
|
+
* - Non-existent files are silently ignored
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import { feature } from 'bun:bundle'
|
|
29
|
+
import ignore from 'ignore'
|
|
30
|
+
import memoize from 'lodash-es/memoize.js'
|
|
31
|
+
import { Lexer } from 'marked'
|
|
32
|
+
import {
|
|
33
|
+
basename,
|
|
34
|
+
dirname,
|
|
35
|
+
extname,
|
|
36
|
+
isAbsolute,
|
|
37
|
+
join,
|
|
38
|
+
parse,
|
|
39
|
+
relative,
|
|
40
|
+
sep,
|
|
41
|
+
} from 'path'
|
|
42
|
+
import picomatch from 'picomatch'
|
|
43
|
+
import { logEvent } from 'src/services/analytics/index.js'
|
|
44
|
+
import {
|
|
45
|
+
getAdditionalDirectoriesForClaudeMd,
|
|
46
|
+
getOriginalCwd,
|
|
47
|
+
} from '../bootstrap/state.js'
|
|
48
|
+
import { truncateEntrypointContent } from '../memdir/memdir.js'
|
|
49
|
+
import { getAutoMemEntrypoint, isAutoMemoryEnabled } from '../memdir/paths.js'
|
|
50
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../services/analytics/growthbook.js'
|
|
51
|
+
import {
|
|
52
|
+
getCurrentProjectConfig,
|
|
53
|
+
getManagedClaudeRulesDir,
|
|
54
|
+
getMemoryPath,
|
|
55
|
+
getUserClaudeRulesDir,
|
|
56
|
+
} from './config.js'
|
|
57
|
+
import { logForDebugging } from './debug.js'
|
|
58
|
+
import { logForDiagnosticsNoPII } from './diagLogs.js'
|
|
59
|
+
import { getClaudeConfigHomeDir, isEnvTruthy } from './envUtils.js'
|
|
60
|
+
import { getErrnoCode } from './errors.js'
|
|
61
|
+
import { normalizePathForComparison } from './file.js'
|
|
62
|
+
import { cacheKeys, type FileStateCache } from './fileStateCache.js'
|
|
63
|
+
import {
|
|
64
|
+
parseFrontmatter,
|
|
65
|
+
splitPathInFrontmatter,
|
|
66
|
+
} from './frontmatterParser.js'
|
|
67
|
+
import { getFsImplementation, safeResolvePath } from './fsOperations.js'
|
|
68
|
+
import { findCanonicalGitRoot, findGitRoot } from './git.js'
|
|
69
|
+
import {
|
|
70
|
+
executeInstructionsLoadedHooks,
|
|
71
|
+
hasInstructionsLoadedHook,
|
|
72
|
+
type InstructionsLoadReason,
|
|
73
|
+
type InstructionsMemoryType,
|
|
74
|
+
} from './hooks.js'
|
|
75
|
+
import type { MemoryType } from './memory/types.js'
|
|
76
|
+
import { expandPath } from './path.js'
|
|
77
|
+
import { pathInWorkingPath } from './permissions/filesystem.js'
|
|
78
|
+
import { isSettingSourceEnabled } from './settings/constants.js'
|
|
79
|
+
import { getInitialSettings } from './settings/settings.js'
|
|
80
|
+
|
|
81
|
+
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
82
|
+
const teamMemPaths = feature('TEAMMEM')
|
|
83
|
+
? (require('../memdir/teamMemPaths.js') as typeof import('../memdir/teamMemPaths.js'))
|
|
84
|
+
: null
|
|
85
|
+
/* eslint-enable @typescript-eslint/no-require-imports */
|
|
86
|
+
|
|
87
|
+
let hasLoggedInitialLoad = false
|
|
88
|
+
|
|
89
|
+
const MEMORY_INSTRUCTION_PROMPT =
|
|
90
|
+
'Codebase and user instructions are shown below. Be sure to adhere to these instructions. IMPORTANT: These instructions OVERRIDE any default behavior and you MUST follow them exactly as written.'
|
|
91
|
+
// Recommended max character count for a memory file
|
|
92
|
+
export const MAX_MEMORY_CHARACTER_COUNT = 40000
|
|
93
|
+
|
|
94
|
+
// File extensions that are allowed for @include directives
|
|
95
|
+
// This prevents binary files (images, PDFs, etc.) from being loaded into memory
|
|
96
|
+
const TEXT_FILE_EXTENSIONS = new Set([
|
|
97
|
+
// Markdown and text
|
|
98
|
+
'.md',
|
|
99
|
+
'.txt',
|
|
100
|
+
'.text',
|
|
101
|
+
// Data formats
|
|
102
|
+
'.json',
|
|
103
|
+
'.yaml',
|
|
104
|
+
'.yml',
|
|
105
|
+
'.toml',
|
|
106
|
+
'.xml',
|
|
107
|
+
'.csv',
|
|
108
|
+
// Web
|
|
109
|
+
'.html',
|
|
110
|
+
'.htm',
|
|
111
|
+
'.css',
|
|
112
|
+
'.scss',
|
|
113
|
+
'.sass',
|
|
114
|
+
'.less',
|
|
115
|
+
// JavaScript/TypeScript
|
|
116
|
+
'.js',
|
|
117
|
+
'.ts',
|
|
118
|
+
'.tsx',
|
|
119
|
+
'.jsx',
|
|
120
|
+
'.mjs',
|
|
121
|
+
'.cjs',
|
|
122
|
+
'.mts',
|
|
123
|
+
'.cts',
|
|
124
|
+
// Python
|
|
125
|
+
'.py',
|
|
126
|
+
'.pyi',
|
|
127
|
+
'.pyw',
|
|
128
|
+
// Ruby
|
|
129
|
+
'.rb',
|
|
130
|
+
'.erb',
|
|
131
|
+
'.rake',
|
|
132
|
+
// Go
|
|
133
|
+
'.go',
|
|
134
|
+
// Rust
|
|
135
|
+
'.rs',
|
|
136
|
+
// Java/Kotlin/Scala
|
|
137
|
+
'.java',
|
|
138
|
+
'.kt',
|
|
139
|
+
'.kts',
|
|
140
|
+
'.scala',
|
|
141
|
+
// C/C++
|
|
142
|
+
'.c',
|
|
143
|
+
'.cpp',
|
|
144
|
+
'.cc',
|
|
145
|
+
'.cxx',
|
|
146
|
+
'.h',
|
|
147
|
+
'.hpp',
|
|
148
|
+
'.hxx',
|
|
149
|
+
// C#
|
|
150
|
+
'.cs',
|
|
151
|
+
// Swift
|
|
152
|
+
'.swift',
|
|
153
|
+
// Shell
|
|
154
|
+
'.sh',
|
|
155
|
+
'.bash',
|
|
156
|
+
'.zsh',
|
|
157
|
+
'.fish',
|
|
158
|
+
'.ps1',
|
|
159
|
+
'.bat',
|
|
160
|
+
'.cmd',
|
|
161
|
+
// Config
|
|
162
|
+
'.env',
|
|
163
|
+
'.ini',
|
|
164
|
+
'.cfg',
|
|
165
|
+
'.conf',
|
|
166
|
+
'.config',
|
|
167
|
+
'.properties',
|
|
168
|
+
// Database
|
|
169
|
+
'.sql',
|
|
170
|
+
'.graphql',
|
|
171
|
+
'.gql',
|
|
172
|
+
// Protocol
|
|
173
|
+
'.proto',
|
|
174
|
+
// Frontend frameworks
|
|
175
|
+
'.vue',
|
|
176
|
+
'.svelte',
|
|
177
|
+
'.astro',
|
|
178
|
+
// Templating
|
|
179
|
+
'.ejs',
|
|
180
|
+
'.hbs',
|
|
181
|
+
'.pug',
|
|
182
|
+
'.jade',
|
|
183
|
+
// Other languages
|
|
184
|
+
'.php',
|
|
185
|
+
'.pl',
|
|
186
|
+
'.pm',
|
|
187
|
+
'.lua',
|
|
188
|
+
'.r',
|
|
189
|
+
'.R',
|
|
190
|
+
'.dart',
|
|
191
|
+
'.ex',
|
|
192
|
+
'.exs',
|
|
193
|
+
'.erl',
|
|
194
|
+
'.hrl',
|
|
195
|
+
'.clj',
|
|
196
|
+
'.cljs',
|
|
197
|
+
'.cljc',
|
|
198
|
+
'.edn',
|
|
199
|
+
'.hs',
|
|
200
|
+
'.lhs',
|
|
201
|
+
'.elm',
|
|
202
|
+
'.ml',
|
|
203
|
+
'.mli',
|
|
204
|
+
'.f',
|
|
205
|
+
'.f90',
|
|
206
|
+
'.f95',
|
|
207
|
+
'.for',
|
|
208
|
+
// Build files
|
|
209
|
+
'.cmake',
|
|
210
|
+
'.make',
|
|
211
|
+
'.makefile',
|
|
212
|
+
'.gradle',
|
|
213
|
+
'.sbt',
|
|
214
|
+
// Documentation
|
|
215
|
+
'.rst',
|
|
216
|
+
'.adoc',
|
|
217
|
+
'.asciidoc',
|
|
218
|
+
'.org',
|
|
219
|
+
'.tex',
|
|
220
|
+
'.latex',
|
|
221
|
+
// Lock files (often text-based)
|
|
222
|
+
'.lock',
|
|
223
|
+
// Misc
|
|
224
|
+
'.log',
|
|
225
|
+
'.diff',
|
|
226
|
+
'.patch',
|
|
227
|
+
])
|
|
228
|
+
|
|
229
|
+
export type MemoryFileInfo = {
|
|
230
|
+
path: string
|
|
231
|
+
type: MemoryType
|
|
232
|
+
content: string
|
|
233
|
+
parent?: string // Path of the file that included this one
|
|
234
|
+
globs?: string[] // Glob patterns for file paths this rule applies to
|
|
235
|
+
// True when auto-injection transformed `content` (stripped HTML comments,
|
|
236
|
+
// stripped frontmatter, truncated MEMORY.md) such that it no longer matches
|
|
237
|
+
// the bytes on disk. When set, `rawContent` holds the unmodified disk bytes
|
|
238
|
+
// so callers can cache a `isPartialView` readFileState entry — presence in
|
|
239
|
+
// cache provides dedup + change detection, but Edit/Write still require an
|
|
240
|
+
// explicit Read before proceeding.
|
|
241
|
+
contentDiffersFromDisk?: boolean
|
|
242
|
+
rawContent?: string
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function pathInOriginalCwd(path: string): boolean {
|
|
246
|
+
return pathInWorkingPath(path, getOriginalCwd())
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Parses raw content to extract both content and glob patterns from frontmatter
|
|
251
|
+
* @param rawContent Raw file content with frontmatter
|
|
252
|
+
* @returns Object with content and globs (undefined if no paths or match-all pattern)
|
|
253
|
+
*/
|
|
254
|
+
function parseFrontmatterPaths(rawContent: string): {
|
|
255
|
+
content: string
|
|
256
|
+
paths?: string[]
|
|
257
|
+
} {
|
|
258
|
+
const { frontmatter, content } = parseFrontmatter(rawContent)
|
|
259
|
+
|
|
260
|
+
if (!frontmatter.paths) {
|
|
261
|
+
return { content }
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const patterns = splitPathInFrontmatter(frontmatter.paths)
|
|
265
|
+
.map(pattern => {
|
|
266
|
+
// Remove /** suffix - ignore library treats 'path' as matching both
|
|
267
|
+
// the path itself and everything inside it
|
|
268
|
+
return pattern.endsWith('/**') ? pattern.slice(0, -3) : pattern
|
|
269
|
+
})
|
|
270
|
+
.filter((p: string) => p.length > 0)
|
|
271
|
+
|
|
272
|
+
// If all patterns are ** (match-all), treat as no globs (undefined)
|
|
273
|
+
// This means the file applies to all paths
|
|
274
|
+
if (patterns.length === 0 || patterns.every((p: string) => p === '**')) {
|
|
275
|
+
return { content }
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
return { content, paths: patterns }
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Strip block-level HTML comments (<!-- ... -->) from markdown content.
|
|
283
|
+
*
|
|
284
|
+
* Uses the marked lexer to identify comments at the block level only, so
|
|
285
|
+
* comments inside inline code spans and fenced code blocks are preserved.
|
|
286
|
+
* Inline HTML comments inside a paragraph are also left intact; the intended
|
|
287
|
+
* use case is authorial notes that occupy their own lines.
|
|
288
|
+
*
|
|
289
|
+
* Unclosed comments (`<!--` with no matching `-->`) are left in place so a
|
|
290
|
+
* typo doesn't silently swallow the rest of the file.
|
|
291
|
+
*/
|
|
292
|
+
export function stripHtmlComments(content: string): {
|
|
293
|
+
content: string
|
|
294
|
+
stripped: boolean
|
|
295
|
+
} {
|
|
296
|
+
if (!content.includes('<!--')) {
|
|
297
|
+
return { content, stripped: false }
|
|
298
|
+
}
|
|
299
|
+
// gfm:false is fine here — html-block detection is a CommonMark rule.
|
|
300
|
+
return stripHtmlCommentsFromTokens(new Lexer({ gfm: false }).lex(content))
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
function stripHtmlCommentsFromTokens(tokens: ReturnType<Lexer['lex']>): {
|
|
304
|
+
content: string
|
|
305
|
+
stripped: boolean
|
|
306
|
+
} {
|
|
307
|
+
let result = ''
|
|
308
|
+
let stripped = false
|
|
309
|
+
|
|
310
|
+
// A well-formed HTML comment span. Non-greedy so multiple comments on the
|
|
311
|
+
// same line are matched independently; [\s\S] to span newlines.
|
|
312
|
+
const commentSpan = /<!--[\s\S]*?-->/g
|
|
313
|
+
|
|
314
|
+
for (const token of tokens) {
|
|
315
|
+
if (token.type === 'html') {
|
|
316
|
+
const trimmed = token.raw.trimStart()
|
|
317
|
+
if (trimmed.startsWith('<!--') && trimmed.includes('-->')) {
|
|
318
|
+
// Per CommonMark, a type-2 HTML block ends at the *line* containing
|
|
319
|
+
// `-->`, so text after `-->` on that line is part of this token.
|
|
320
|
+
// Strip only the comment spans and keep any residual content.
|
|
321
|
+
const residue = token.raw.replace(commentSpan, '')
|
|
322
|
+
stripped = true
|
|
323
|
+
if (residue.trim().length > 0) {
|
|
324
|
+
// Residual content exists (e.g. `<!-- note --> Use bun`): keep it.
|
|
325
|
+
result += residue
|
|
326
|
+
}
|
|
327
|
+
continue
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
result += token.raw
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
return { content: result, stripped }
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Parses raw memory file content into a MemoryFileInfo. Pure function — no I/O.
|
|
338
|
+
*
|
|
339
|
+
* When includeBasePath is given, @include paths are resolved in the same lex
|
|
340
|
+
* pass and returned alongside the parsed file (so processMemoryFile doesn't
|
|
341
|
+
* need to lex the same content a second time).
|
|
342
|
+
*/
|
|
343
|
+
function parseMemoryFileContent(
|
|
344
|
+
rawContent: string,
|
|
345
|
+
filePath: string,
|
|
346
|
+
type: MemoryType,
|
|
347
|
+
includeBasePath?: string,
|
|
348
|
+
): { info: MemoryFileInfo | null; includePaths: string[] } {
|
|
349
|
+
// Skip non-text files to prevent loading binary data (images, PDFs, etc.) into memory
|
|
350
|
+
const ext = extname(filePath).toLowerCase()
|
|
351
|
+
if (ext && !TEXT_FILE_EXTENSIONS.has(ext)) {
|
|
352
|
+
logForDebugging(`Skipping non-text file in @include: ${filePath}`)
|
|
353
|
+
return { info: null, includePaths: [] }
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
const { content: withoutFrontmatter, paths } =
|
|
357
|
+
parseFrontmatterPaths(rawContent)
|
|
358
|
+
|
|
359
|
+
// Lex once so strip and @include-extract share the same tokens. gfm:false
|
|
360
|
+
// is required by extract (so ~/path doesn't tokenize as strikethrough) and
|
|
361
|
+
// doesn't affect strip (html blocks are a CommonMark rule).
|
|
362
|
+
const hasComment = withoutFrontmatter.includes('<!--')
|
|
363
|
+
const tokens =
|
|
364
|
+
hasComment || includeBasePath !== undefined
|
|
365
|
+
? new Lexer({ gfm: false }).lex(withoutFrontmatter)
|
|
366
|
+
: undefined
|
|
367
|
+
|
|
368
|
+
// Only rebuild via tokens when a comment actually needs stripping —
|
|
369
|
+
// marked normalises \r\n during lex, so round-tripping a CRLF file
|
|
370
|
+
// through token.raw would spuriously flip contentDiffersFromDisk.
|
|
371
|
+
const strippedContent =
|
|
372
|
+
hasComment && tokens
|
|
373
|
+
? stripHtmlCommentsFromTokens(tokens).content
|
|
374
|
+
: withoutFrontmatter
|
|
375
|
+
|
|
376
|
+
const includePaths =
|
|
377
|
+
tokens && includeBasePath !== undefined
|
|
378
|
+
? extractIncludePathsFromTokens(tokens, includeBasePath)
|
|
379
|
+
: []
|
|
380
|
+
|
|
381
|
+
// Truncate MEMORY.md entrypoints to the line AND byte caps
|
|
382
|
+
let finalContent = strippedContent
|
|
383
|
+
if (type === 'AutoMem' || type === 'TeamMem') {
|
|
384
|
+
finalContent = truncateEntrypointContent(strippedContent).content
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
// Covers frontmatter strip, HTML comment strip, and MEMORY.md truncation
|
|
388
|
+
const contentDiffersFromDisk = finalContent !== rawContent
|
|
389
|
+
return {
|
|
390
|
+
info: {
|
|
391
|
+
path: filePath,
|
|
392
|
+
type,
|
|
393
|
+
content: finalContent,
|
|
394
|
+
globs: paths,
|
|
395
|
+
contentDiffersFromDisk,
|
|
396
|
+
rawContent: contentDiffersFromDisk ? rawContent : undefined,
|
|
397
|
+
},
|
|
398
|
+
includePaths,
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
function handleMemoryFileReadError(error: unknown, filePath: string): void {
|
|
403
|
+
const code = getErrnoCode(error)
|
|
404
|
+
// ENOENT = file doesn't exist, EISDIR = is a directory — both expected
|
|
405
|
+
if (code === 'ENOENT' || code === 'EISDIR') {
|
|
406
|
+
return
|
|
407
|
+
}
|
|
408
|
+
// Log permission errors (EACCES) as they're actionable
|
|
409
|
+
if (code === 'EACCES') {
|
|
410
|
+
// Don't log the full file path to avoid PII/security issues
|
|
411
|
+
logEvent('tengu_claude_md_permission_error', {
|
|
412
|
+
is_access_error: 1,
|
|
413
|
+
has_home_dir: filePath.includes(getClaudeConfigHomeDir()) ? 1 : 0,
|
|
414
|
+
})
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Used by processMemoryFile → getMemoryFiles so the event loop stays
|
|
420
|
+
* responsive during the directory walk (many readFile attempts, most
|
|
421
|
+
* ENOENT). When includeBasePath is given, @include paths are resolved in
|
|
422
|
+
* the same lex pass and returned alongside the parsed file.
|
|
423
|
+
*/
|
|
424
|
+
async function safelyReadMemoryFileAsync(
|
|
425
|
+
filePath: string,
|
|
426
|
+
type: MemoryType,
|
|
427
|
+
includeBasePath?: string,
|
|
428
|
+
): Promise<{ info: MemoryFileInfo | null; includePaths: string[] }> {
|
|
429
|
+
try {
|
|
430
|
+
const fs = getFsImplementation()
|
|
431
|
+
const rawContent = await fs.readFile(filePath, { encoding: 'utf-8' })
|
|
432
|
+
return parseMemoryFileContent(rawContent, filePath, type, includeBasePath)
|
|
433
|
+
} catch (error) {
|
|
434
|
+
handleMemoryFileReadError(error, filePath)
|
|
435
|
+
return { info: null, includePaths: [] }
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
type MarkdownToken = {
|
|
440
|
+
type: string
|
|
441
|
+
text?: string
|
|
442
|
+
href?: string
|
|
443
|
+
tokens?: MarkdownToken[]
|
|
444
|
+
raw?: string
|
|
445
|
+
items?: MarkdownToken[]
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
// Extract @path include references from pre-lexed tokens and resolve to
|
|
449
|
+
// absolute paths. Skips html tokens so @paths inside block comments are
|
|
450
|
+
// ignored — the caller may pass pre-strip tokens.
|
|
451
|
+
function extractIncludePathsFromTokens(
|
|
452
|
+
tokens: ReturnType<Lexer['lex']>,
|
|
453
|
+
basePath: string,
|
|
454
|
+
): string[] {
|
|
455
|
+
const absolutePaths = new Set<string>()
|
|
456
|
+
|
|
457
|
+
// Extract @paths from a text string and add resolved paths to absolutePaths.
|
|
458
|
+
function extractPathsFromText(textContent: string) {
|
|
459
|
+
const includeRegex = /(?:^|\s)@((?:[^\s\\]|\\ )+)/g
|
|
460
|
+
let match
|
|
461
|
+
while ((match = includeRegex.exec(textContent)) !== null) {
|
|
462
|
+
let path = match[1]
|
|
463
|
+
if (!path) continue
|
|
464
|
+
|
|
465
|
+
// Strip fragment identifiers (#heading, #section-name, etc.)
|
|
466
|
+
const hashIndex = path.indexOf('#')
|
|
467
|
+
if (hashIndex !== -1) {
|
|
468
|
+
path = path.substring(0, hashIndex)
|
|
469
|
+
}
|
|
470
|
+
if (!path) continue
|
|
471
|
+
|
|
472
|
+
// Unescape the spaces in the path
|
|
473
|
+
path = path.replace(/\\ /g, ' ')
|
|
474
|
+
|
|
475
|
+
// Accept @path, @./path, @~/path, or @/path
|
|
476
|
+
if (path) {
|
|
477
|
+
const isValidPath =
|
|
478
|
+
path.startsWith('./') ||
|
|
479
|
+
path.startsWith('~/') ||
|
|
480
|
+
(path.startsWith('/') && path !== '/') ||
|
|
481
|
+
(!path.startsWith('@') &&
|
|
482
|
+
!path.match(/^[#%^&*()]+/) &&
|
|
483
|
+
path.match(/^[a-zA-Z0-9._-]/))
|
|
484
|
+
|
|
485
|
+
if (isValidPath) {
|
|
486
|
+
const resolvedPath = expandPath(path, dirname(basePath))
|
|
487
|
+
absolutePaths.add(resolvedPath)
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
// Recursively process elements to find text nodes
|
|
494
|
+
function processElements(elements: MarkdownToken[]) {
|
|
495
|
+
for (const element of elements) {
|
|
496
|
+
if (element.type === 'code' || element.type === 'codespan') {
|
|
497
|
+
continue
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// For html tokens that contain comments, strip the comment spans and
|
|
501
|
+
// check the residual for @paths (e.g. `<!-- note --> @./file.md`).
|
|
502
|
+
// Other html tokens (non-comment tags) are skipped entirely.
|
|
503
|
+
if (element.type === 'html') {
|
|
504
|
+
const raw = element.raw || ''
|
|
505
|
+
const trimmed = raw.trimStart()
|
|
506
|
+
if (trimmed.startsWith('<!--') && trimmed.includes('-->')) {
|
|
507
|
+
const commentSpan = /<!--[\s\S]*?-->/g
|
|
508
|
+
const residue = raw.replace(commentSpan, '')
|
|
509
|
+
if (residue.trim().length > 0) {
|
|
510
|
+
extractPathsFromText(residue)
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
continue
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// Process text nodes
|
|
517
|
+
if (element.type === 'text') {
|
|
518
|
+
extractPathsFromText(element.text || '')
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// Recurse into children tokens
|
|
522
|
+
if (element.tokens) {
|
|
523
|
+
processElements(element.tokens)
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
// Special handling for list structures
|
|
527
|
+
if (element.items) {
|
|
528
|
+
processElements(element.items)
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
processElements(tokens as MarkdownToken[])
|
|
534
|
+
return [...absolutePaths]
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
const MAX_INCLUDE_DEPTH = 5
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* Checks whether a CLAUDE.md file path is excluded by the claudeMdExcludes setting.
|
|
541
|
+
* Only applies to User, Project, and Local memory types.
|
|
542
|
+
* Managed, AutoMem, and TeamMem types are never excluded.
|
|
543
|
+
*
|
|
544
|
+
* Matches both the original path and the realpath-resolved path to handle symlinks
|
|
545
|
+
* (e.g., /tmp -> /private/tmp on macOS).
|
|
546
|
+
*/
|
|
547
|
+
function isClaudeMdExcluded(filePath: string, type: MemoryType): boolean {
|
|
548
|
+
if (type !== 'User' && type !== 'Project' && type !== 'Local') {
|
|
549
|
+
return false
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
const patterns = getInitialSettings().claudeMdExcludes
|
|
553
|
+
if (!patterns || patterns.length === 0) {
|
|
554
|
+
return false
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
const matchOpts = { dot: true }
|
|
558
|
+
const normalizedPath = filePath.replaceAll('\\', '/')
|
|
559
|
+
|
|
560
|
+
// Build an expanded pattern list that includes realpath-resolved versions of
|
|
561
|
+
// absolute patterns. This handles symlinks like /tmp -> /private/tmp on macOS:
|
|
562
|
+
// the user writes "/tmp/project/CLAUDE.md" in their exclude, but the system
|
|
563
|
+
// resolves the CWD to "/private/tmp/project/...", so the file path uses the
|
|
564
|
+
// real path. By resolving the patterns too, both sides match.
|
|
565
|
+
const expandedPatterns = resolveExcludePatterns(patterns).filter(
|
|
566
|
+
p => p.length > 0,
|
|
567
|
+
)
|
|
568
|
+
if (expandedPatterns.length === 0) {
|
|
569
|
+
return false
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
return picomatch.isMatch(normalizedPath, expandedPatterns, matchOpts)
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* Expands exclude patterns by resolving symlinks in absolute path prefixes.
|
|
577
|
+
* For each absolute pattern (starting with /), tries to resolve the longest
|
|
578
|
+
* existing directory prefix via realpathSync and adds the resolved version.
|
|
579
|
+
* Glob patterns (containing *) have their static prefix resolved.
|
|
580
|
+
*/
|
|
581
|
+
function resolveExcludePatterns(patterns: string[]): string[] {
|
|
582
|
+
const fs = getFsImplementation()
|
|
583
|
+
const expanded: string[] = patterns.map(p => p.replaceAll('\\', '/'))
|
|
584
|
+
|
|
585
|
+
for (const normalized of expanded) {
|
|
586
|
+
// Only resolve absolute patterns — glob-only patterns like "**/*.md" don't have
|
|
587
|
+
// a filesystem prefix to resolve
|
|
588
|
+
if (!normalized.startsWith('/')) {
|
|
589
|
+
continue
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
// Find the static prefix before any glob characters
|
|
593
|
+
const globStart = normalized.search(/[*?{[]/)
|
|
594
|
+
const staticPrefix =
|
|
595
|
+
globStart === -1 ? normalized : normalized.slice(0, globStart)
|
|
596
|
+
const dirToResolve = dirname(staticPrefix)
|
|
597
|
+
|
|
598
|
+
try {
|
|
599
|
+
// sync IO: called from sync context (isClaudeMdExcluded -> processMemoryFile -> getMemoryFiles)
|
|
600
|
+
const resolvedDir = fs.realpathSync(dirToResolve).replaceAll('\\', '/')
|
|
601
|
+
if (resolvedDir !== dirToResolve) {
|
|
602
|
+
const resolvedPattern =
|
|
603
|
+
resolvedDir + normalized.slice(dirToResolve.length)
|
|
604
|
+
expanded.push(resolvedPattern)
|
|
605
|
+
}
|
|
606
|
+
} catch {
|
|
607
|
+
// Directory doesn't exist; skip resolution for this pattern
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
return expanded
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
/**
|
|
615
|
+
* Recursively processes a memory file and all its @include references
|
|
616
|
+
* Returns an array of MemoryFileInfo objects with includes first, then main file
|
|
617
|
+
*/
|
|
618
|
+
export async function processMemoryFile(
|
|
619
|
+
filePath: string,
|
|
620
|
+
type: MemoryType,
|
|
621
|
+
processedPaths: Set<string>,
|
|
622
|
+
includeExternal: boolean,
|
|
623
|
+
depth: number = 0,
|
|
624
|
+
parent?: string,
|
|
625
|
+
): Promise<MemoryFileInfo[]> {
|
|
626
|
+
// Skip if already processed or max depth exceeded.
|
|
627
|
+
// Normalize paths for comparison to handle Windows drive letter casing
|
|
628
|
+
// differences (e.g., C:\Users vs c:\Users).
|
|
629
|
+
const normalizedPath = normalizePathForComparison(filePath)
|
|
630
|
+
if (processedPaths.has(normalizedPath) || depth >= MAX_INCLUDE_DEPTH) {
|
|
631
|
+
return []
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
// Skip if path is excluded by claudeMdExcludes setting
|
|
635
|
+
if (isClaudeMdExcluded(filePath, type)) {
|
|
636
|
+
return []
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
// Resolve symlink path early for @import resolution
|
|
640
|
+
const { resolvedPath, isSymlink } = safeResolvePath(
|
|
641
|
+
getFsImplementation(),
|
|
642
|
+
filePath,
|
|
643
|
+
)
|
|
644
|
+
|
|
645
|
+
processedPaths.add(normalizedPath)
|
|
646
|
+
if (isSymlink) {
|
|
647
|
+
processedPaths.add(normalizePathForComparison(resolvedPath))
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
const { info: memoryFile, includePaths: resolvedIncludePaths } =
|
|
651
|
+
await safelyReadMemoryFileAsync(filePath, type, resolvedPath)
|
|
652
|
+
if (!memoryFile || !memoryFile.content.trim()) {
|
|
653
|
+
return []
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
// Add parent information
|
|
657
|
+
if (parent) {
|
|
658
|
+
memoryFile.parent = parent
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
const result: MemoryFileInfo[] = []
|
|
662
|
+
|
|
663
|
+
// Add the main file first (parent before children)
|
|
664
|
+
result.push(memoryFile)
|
|
665
|
+
|
|
666
|
+
for (const resolvedIncludePath of resolvedIncludePaths) {
|
|
667
|
+
const isExternal = !pathInOriginalCwd(resolvedIncludePath)
|
|
668
|
+
if (isExternal && !includeExternal) {
|
|
669
|
+
continue
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
// Recursively process included files with this file as parent
|
|
673
|
+
const includedFiles = await processMemoryFile(
|
|
674
|
+
resolvedIncludePath,
|
|
675
|
+
type,
|
|
676
|
+
processedPaths,
|
|
677
|
+
includeExternal,
|
|
678
|
+
depth + 1,
|
|
679
|
+
filePath, // Pass current file as parent
|
|
680
|
+
)
|
|
681
|
+
result.push(...includedFiles)
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
return result
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
/**
|
|
688
|
+
* Processes all .md files in the .claude/rules/ directory and its subdirectories
|
|
689
|
+
* @param rulesDir The path to the rules directory
|
|
690
|
+
* @param type Type of memory file (User, Project, Local)
|
|
691
|
+
* @param processedPaths Set of already processed file paths
|
|
692
|
+
* @param includeExternal Whether to include external files
|
|
693
|
+
* @param conditionalRule If true, only include files with frontmatter paths; if false, only include files without frontmatter paths
|
|
694
|
+
* @param visitedDirs Set of already visited directory real paths (for cycle detection)
|
|
695
|
+
* @returns Array of MemoryFileInfo objects
|
|
696
|
+
*/
|
|
697
|
+
export async function processMdRules({
|
|
698
|
+
rulesDir,
|
|
699
|
+
type,
|
|
700
|
+
processedPaths,
|
|
701
|
+
includeExternal,
|
|
702
|
+
conditionalRule,
|
|
703
|
+
visitedDirs = new Set(),
|
|
704
|
+
}: {
|
|
705
|
+
rulesDir: string
|
|
706
|
+
type: MemoryType
|
|
707
|
+
processedPaths: Set<string>
|
|
708
|
+
includeExternal: boolean
|
|
709
|
+
conditionalRule: boolean
|
|
710
|
+
visitedDirs?: Set<string>
|
|
711
|
+
}): Promise<MemoryFileInfo[]> {
|
|
712
|
+
if (visitedDirs.has(rulesDir)) {
|
|
713
|
+
return []
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
try {
|
|
717
|
+
const fs = getFsImplementation()
|
|
718
|
+
|
|
719
|
+
const { resolvedPath: resolvedRulesDir, isSymlink } = safeResolvePath(
|
|
720
|
+
fs,
|
|
721
|
+
rulesDir,
|
|
722
|
+
)
|
|
723
|
+
|
|
724
|
+
visitedDirs.add(rulesDir)
|
|
725
|
+
if (isSymlink) {
|
|
726
|
+
visitedDirs.add(resolvedRulesDir)
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
const result: MemoryFileInfo[] = []
|
|
730
|
+
let entries: import('fs').Dirent[]
|
|
731
|
+
try {
|
|
732
|
+
entries = await fs.readdir(resolvedRulesDir)
|
|
733
|
+
} catch (e: unknown) {
|
|
734
|
+
const code = getErrnoCode(e)
|
|
735
|
+
if (code === 'ENOENT' || code === 'EACCES' || code === 'ENOTDIR') {
|
|
736
|
+
return []
|
|
737
|
+
}
|
|
738
|
+
throw e
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
for (const entry of entries) {
|
|
742
|
+
const entryPath = join(rulesDir, entry.name)
|
|
743
|
+
const { resolvedPath: resolvedEntryPath, isSymlink } = safeResolvePath(
|
|
744
|
+
fs,
|
|
745
|
+
entryPath,
|
|
746
|
+
)
|
|
747
|
+
|
|
748
|
+
// Use Dirent methods for non-symlinks to avoid extra stat calls.
|
|
749
|
+
// For symlinks, we need stat to determine what the target is.
|
|
750
|
+
const stats = isSymlink ? await fs.stat(resolvedEntryPath) : null
|
|
751
|
+
const isDirectory = stats ? stats.isDirectory() : entry.isDirectory()
|
|
752
|
+
const isFile = stats ? stats.isFile() : entry.isFile()
|
|
753
|
+
|
|
754
|
+
if (isDirectory) {
|
|
755
|
+
result.push(
|
|
756
|
+
...(await processMdRules({
|
|
757
|
+
rulesDir: resolvedEntryPath,
|
|
758
|
+
type,
|
|
759
|
+
processedPaths,
|
|
760
|
+
includeExternal,
|
|
761
|
+
conditionalRule,
|
|
762
|
+
visitedDirs,
|
|
763
|
+
})),
|
|
764
|
+
)
|
|
765
|
+
} else if (isFile && entry.name.endsWith('.md')) {
|
|
766
|
+
const files = await processMemoryFile(
|
|
767
|
+
resolvedEntryPath,
|
|
768
|
+
type,
|
|
769
|
+
processedPaths,
|
|
770
|
+
includeExternal,
|
|
771
|
+
)
|
|
772
|
+
result.push(
|
|
773
|
+
...files.filter(f => (conditionalRule ? f.globs : !f.globs)),
|
|
774
|
+
)
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
return result
|
|
779
|
+
} catch (error) {
|
|
780
|
+
if (error instanceof Error && error.message.includes('EACCES')) {
|
|
781
|
+
logEvent('tengu_claude_rules_md_permission_error', {
|
|
782
|
+
is_access_error: 1,
|
|
783
|
+
has_home_dir: rulesDir.includes(getClaudeConfigHomeDir()) ? 1 : 0,
|
|
784
|
+
})
|
|
785
|
+
}
|
|
786
|
+
return []
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
export const getMemoryFiles = memoize(
|
|
791
|
+
async (forceIncludeExternal: boolean = false): Promise<MemoryFileInfo[]> => {
|
|
792
|
+
const startTime = Date.now()
|
|
793
|
+
logForDiagnosticsNoPII('info', 'memory_files_started')
|
|
794
|
+
|
|
795
|
+
const result: MemoryFileInfo[] = []
|
|
796
|
+
const processedPaths = new Set<string>()
|
|
797
|
+
const config = getCurrentProjectConfig()
|
|
798
|
+
const includeExternal =
|
|
799
|
+
forceIncludeExternal ||
|
|
800
|
+
config.hasClaudeMdExternalIncludesApproved ||
|
|
801
|
+
false
|
|
802
|
+
|
|
803
|
+
// Process Managed file first (always loaded - policy settings)
|
|
804
|
+
const managedClaudeMd = getMemoryPath('Managed')
|
|
805
|
+
result.push(
|
|
806
|
+
...(await processMemoryFile(
|
|
807
|
+
managedClaudeMd,
|
|
808
|
+
'Managed',
|
|
809
|
+
processedPaths,
|
|
810
|
+
includeExternal,
|
|
811
|
+
)),
|
|
812
|
+
)
|
|
813
|
+
// Process Managed .claude/rules/*.md files
|
|
814
|
+
const managedClaudeRulesDir = getManagedClaudeRulesDir()
|
|
815
|
+
result.push(
|
|
816
|
+
...(await processMdRules({
|
|
817
|
+
rulesDir: managedClaudeRulesDir,
|
|
818
|
+
type: 'Managed',
|
|
819
|
+
processedPaths,
|
|
820
|
+
includeExternal,
|
|
821
|
+
conditionalRule: false,
|
|
822
|
+
})),
|
|
823
|
+
)
|
|
824
|
+
|
|
825
|
+
// Process User file (only if userSettings is enabled)
|
|
826
|
+
if (isSettingSourceEnabled('userSettings')) {
|
|
827
|
+
const userClaudeMd = getMemoryPath('User')
|
|
828
|
+
result.push(
|
|
829
|
+
...(await processMemoryFile(
|
|
830
|
+
userClaudeMd,
|
|
831
|
+
'User',
|
|
832
|
+
processedPaths,
|
|
833
|
+
true, // User memory can always include external files
|
|
834
|
+
)),
|
|
835
|
+
)
|
|
836
|
+
// Process User ~/.claude/rules/*.md files
|
|
837
|
+
const userClaudeRulesDir = getUserClaudeRulesDir()
|
|
838
|
+
result.push(
|
|
839
|
+
...(await processMdRules({
|
|
840
|
+
rulesDir: userClaudeRulesDir,
|
|
841
|
+
type: 'User',
|
|
842
|
+
processedPaths,
|
|
843
|
+
includeExternal: true,
|
|
844
|
+
conditionalRule: false,
|
|
845
|
+
})),
|
|
846
|
+
)
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
// Then process Project and Local files
|
|
850
|
+
const dirs: string[] = []
|
|
851
|
+
const originalCwd = getOriginalCwd()
|
|
852
|
+
let currentDir = originalCwd
|
|
853
|
+
|
|
854
|
+
while (currentDir !== parse(currentDir).root) {
|
|
855
|
+
dirs.push(currentDir)
|
|
856
|
+
currentDir = dirname(currentDir)
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
// When running from a git worktree nested inside its main repo (e.g.,
|
|
860
|
+
// .claude/worktrees/<name>/ from `claude -w`), the upward walk passes
|
|
861
|
+
// through both the worktree root and the main repo root. Both contain
|
|
862
|
+
// checked-in files like CLAUDE.md and .claude/rules/*.md, so the same
|
|
863
|
+
// content gets loaded twice. Skip Project-type (checked-in) files from
|
|
864
|
+
// directories above the worktree but within the main repo — the worktree
|
|
865
|
+
// already has its own checkout. CLAUDE.local.md is gitignored so it only
|
|
866
|
+
// exists in the main repo and is still loaded.
|
|
867
|
+
// See: https://github.com/anthropics/claude-code/issues/29599
|
|
868
|
+
const gitRoot = findGitRoot(originalCwd)
|
|
869
|
+
const canonicalRoot = findCanonicalGitRoot(originalCwd)
|
|
870
|
+
const isNestedWorktree =
|
|
871
|
+
gitRoot !== null &&
|
|
872
|
+
canonicalRoot !== null &&
|
|
873
|
+
normalizePathForComparison(gitRoot) !==
|
|
874
|
+
normalizePathForComparison(canonicalRoot) &&
|
|
875
|
+
pathInWorkingPath(gitRoot, canonicalRoot)
|
|
876
|
+
|
|
877
|
+
// Process from root downward to CWD
|
|
878
|
+
for (const dir of dirs.reverse()) {
|
|
879
|
+
// In a nested worktree, skip checked-in files from the main repo's
|
|
880
|
+
// working tree (dirs inside canonicalRoot but outside the worktree).
|
|
881
|
+
const skipProject =
|
|
882
|
+
isNestedWorktree &&
|
|
883
|
+
pathInWorkingPath(dir, canonicalRoot) &&
|
|
884
|
+
!pathInWorkingPath(dir, gitRoot)
|
|
885
|
+
|
|
886
|
+
// Try reading CLAUDE.md (Project) - only if projectSettings is enabled
|
|
887
|
+
if (isSettingSourceEnabled('projectSettings') && !skipProject) {
|
|
888
|
+
const projectPath = join(dir, 'CLAUDE.md')
|
|
889
|
+
result.push(
|
|
890
|
+
...(await processMemoryFile(
|
|
891
|
+
projectPath,
|
|
892
|
+
'Project',
|
|
893
|
+
processedPaths,
|
|
894
|
+
includeExternal,
|
|
895
|
+
)),
|
|
896
|
+
)
|
|
897
|
+
|
|
898
|
+
// Try reading .claude/CLAUDE.md (Project)
|
|
899
|
+
const dotClaudePath = join(dir, '.claude', 'CLAUDE.md')
|
|
900
|
+
result.push(
|
|
901
|
+
...(await processMemoryFile(
|
|
902
|
+
dotClaudePath,
|
|
903
|
+
'Project',
|
|
904
|
+
processedPaths,
|
|
905
|
+
includeExternal,
|
|
906
|
+
)),
|
|
907
|
+
)
|
|
908
|
+
|
|
909
|
+
// Try reading .claude/rules/*.md files (Project)
|
|
910
|
+
const rulesDir = join(dir, '.claude', 'rules')
|
|
911
|
+
result.push(
|
|
912
|
+
...(await processMdRules({
|
|
913
|
+
rulesDir,
|
|
914
|
+
type: 'Project',
|
|
915
|
+
processedPaths,
|
|
916
|
+
includeExternal,
|
|
917
|
+
conditionalRule: false,
|
|
918
|
+
})),
|
|
919
|
+
)
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
// Try reading CLAUDE.local.md (Local) - only if localSettings is enabled
|
|
923
|
+
if (isSettingSourceEnabled('localSettings')) {
|
|
924
|
+
const localPath = join(dir, 'CLAUDE.local.md')
|
|
925
|
+
result.push(
|
|
926
|
+
...(await processMemoryFile(
|
|
927
|
+
localPath,
|
|
928
|
+
'Local',
|
|
929
|
+
processedPaths,
|
|
930
|
+
includeExternal,
|
|
931
|
+
)),
|
|
932
|
+
)
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
// Process CLAUDE.md from additional directories (--add-dir) if env var is enabled
|
|
937
|
+
// This is controlled by CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD and defaults to off
|
|
938
|
+
// Note: we don't check isSettingSourceEnabled('projectSettings') here because --add-dir
|
|
939
|
+
// is an explicit user action and the SDK defaults settingSources to [] when not specified
|
|
940
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD)) {
|
|
941
|
+
const additionalDirs = getAdditionalDirectoriesForClaudeMd()
|
|
942
|
+
for (const dir of additionalDirs) {
|
|
943
|
+
// Try reading CLAUDE.md from the additional directory
|
|
944
|
+
const projectPath = join(dir, 'CLAUDE.md')
|
|
945
|
+
result.push(
|
|
946
|
+
...(await processMemoryFile(
|
|
947
|
+
projectPath,
|
|
948
|
+
'Project',
|
|
949
|
+
processedPaths,
|
|
950
|
+
includeExternal,
|
|
951
|
+
)),
|
|
952
|
+
)
|
|
953
|
+
|
|
954
|
+
// Try reading .claude/CLAUDE.md from the additional directory
|
|
955
|
+
const dotClaudePath = join(dir, '.claude', 'CLAUDE.md')
|
|
956
|
+
result.push(
|
|
957
|
+
...(await processMemoryFile(
|
|
958
|
+
dotClaudePath,
|
|
959
|
+
'Project',
|
|
960
|
+
processedPaths,
|
|
961
|
+
includeExternal,
|
|
962
|
+
)),
|
|
963
|
+
)
|
|
964
|
+
|
|
965
|
+
// Try reading .claude/rules/*.md files from the additional directory
|
|
966
|
+
const rulesDir = join(dir, '.claude', 'rules')
|
|
967
|
+
result.push(
|
|
968
|
+
...(await processMdRules({
|
|
969
|
+
rulesDir,
|
|
970
|
+
type: 'Project',
|
|
971
|
+
processedPaths,
|
|
972
|
+
includeExternal,
|
|
973
|
+
conditionalRule: false,
|
|
974
|
+
})),
|
|
975
|
+
)
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
// Memdir entrypoint (memory.md) - only if feature is on and file exists
|
|
980
|
+
if (isAutoMemoryEnabled()) {
|
|
981
|
+
const { info: memdirEntry } = await safelyReadMemoryFileAsync(
|
|
982
|
+
getAutoMemEntrypoint(),
|
|
983
|
+
'AutoMem',
|
|
984
|
+
)
|
|
985
|
+
if (memdirEntry) {
|
|
986
|
+
const normalizedPath = normalizePathForComparison(memdirEntry.path)
|
|
987
|
+
if (!processedPaths.has(normalizedPath)) {
|
|
988
|
+
processedPaths.add(normalizedPath)
|
|
989
|
+
result.push(memdirEntry)
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
// Team memory entrypoint - only if feature is on and file exists
|
|
995
|
+
if (feature('TEAMMEM') && teamMemPaths!.isTeamMemoryEnabled()) {
|
|
996
|
+
const { info: teamMemEntry } = await safelyReadMemoryFileAsync(
|
|
997
|
+
teamMemPaths!.getTeamMemEntrypoint(),
|
|
998
|
+
'TeamMem',
|
|
999
|
+
)
|
|
1000
|
+
if (teamMemEntry) {
|
|
1001
|
+
const normalizedPath = normalizePathForComparison(teamMemEntry.path)
|
|
1002
|
+
if (!processedPaths.has(normalizedPath)) {
|
|
1003
|
+
processedPaths.add(normalizedPath)
|
|
1004
|
+
result.push(teamMemEntry)
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
const totalContentLength = result.reduce(
|
|
1010
|
+
(sum, f) => sum + f.content.length,
|
|
1011
|
+
0,
|
|
1012
|
+
)
|
|
1013
|
+
|
|
1014
|
+
logForDiagnosticsNoPII('info', 'memory_files_completed', {
|
|
1015
|
+
duration_ms: Date.now() - startTime,
|
|
1016
|
+
file_count: result.length,
|
|
1017
|
+
total_content_length: totalContentLength,
|
|
1018
|
+
})
|
|
1019
|
+
|
|
1020
|
+
const typeCounts: Record<string, number> = {}
|
|
1021
|
+
for (const f of result) {
|
|
1022
|
+
typeCounts[f.type] = (typeCounts[f.type] ?? 0) + 1
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
if (!hasLoggedInitialLoad) {
|
|
1026
|
+
hasLoggedInitialLoad = true
|
|
1027
|
+
logEvent('tengu_claudemd__initial_load', {
|
|
1028
|
+
file_count: result.length,
|
|
1029
|
+
total_content_length: totalContentLength,
|
|
1030
|
+
user_count: typeCounts['User'] ?? 0,
|
|
1031
|
+
project_count: typeCounts['Project'] ?? 0,
|
|
1032
|
+
local_count: typeCounts['Local'] ?? 0,
|
|
1033
|
+
managed_count: typeCounts['Managed'] ?? 0,
|
|
1034
|
+
automem_count: typeCounts['AutoMem'] ?? 0,
|
|
1035
|
+
...(feature('TEAMMEM')
|
|
1036
|
+
? { teammem_count: typeCounts['TeamMem'] ?? 0 }
|
|
1037
|
+
: {}),
|
|
1038
|
+
duration_ms: Date.now() - startTime,
|
|
1039
|
+
})
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
// Fire InstructionsLoaded hook for each instruction file loaded
|
|
1043
|
+
// (fire-and-forget, audit/observability only).
|
|
1044
|
+
// AutoMem/TeamMem are intentionally excluded — they're a separate
|
|
1045
|
+
// memory system, not "instructions" in the CLAUDE.md/rules sense.
|
|
1046
|
+
// Gated on !forceIncludeExternal: the forceIncludeExternal=true variant
|
|
1047
|
+
// is only used by getExternalClaudeMdIncludes() for approval checks, not
|
|
1048
|
+
// for building context — firing the hook there would double-fire on startup.
|
|
1049
|
+
// The one-shot flag is consumed on every !forceIncludeExternal cache miss
|
|
1050
|
+
// (NOT gated on hasInstructionsLoadedHook) so the flag is released even
|
|
1051
|
+
// when no hook is configured — otherwise a mid-session hook registration
|
|
1052
|
+
// followed by a direct .cache.clear() would spuriously fire with a stale
|
|
1053
|
+
// 'session_start' reason.
|
|
1054
|
+
if (!forceIncludeExternal) {
|
|
1055
|
+
const eagerLoadReason = consumeNextEagerLoadReason()
|
|
1056
|
+
if (eagerLoadReason !== undefined && hasInstructionsLoadedHook()) {
|
|
1057
|
+
for (const file of result) {
|
|
1058
|
+
if (!isInstructionsMemoryType(file.type)) continue
|
|
1059
|
+
const loadReason = file.parent ? 'include' : eagerLoadReason
|
|
1060
|
+
void executeInstructionsLoadedHooks(
|
|
1061
|
+
file.path,
|
|
1062
|
+
file.type,
|
|
1063
|
+
loadReason,
|
|
1064
|
+
{
|
|
1065
|
+
globs: file.globs,
|
|
1066
|
+
parentFilePath: file.parent,
|
|
1067
|
+
},
|
|
1068
|
+
)
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
return result
|
|
1074
|
+
},
|
|
1075
|
+
)
|
|
1076
|
+
|
|
1077
|
+
function isInstructionsMemoryType(
|
|
1078
|
+
type: MemoryType,
|
|
1079
|
+
): type is InstructionsMemoryType {
|
|
1080
|
+
return (
|
|
1081
|
+
type === 'User' ||
|
|
1082
|
+
type === 'Project' ||
|
|
1083
|
+
type === 'Local' ||
|
|
1084
|
+
type === 'Managed'
|
|
1085
|
+
)
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
// Load reason to report for top-level (non-included) files on the next eager
|
|
1089
|
+
// getMemoryFiles() pass. Set to 'compact' by resetGetMemoryFilesCache when
|
|
1090
|
+
// compaction clears the cache, so the InstructionsLoaded hook reports the
|
|
1091
|
+
// reload correctly instead of misreporting it as 'session_start'. One-shot:
|
|
1092
|
+
// reset to 'session_start' after being read.
|
|
1093
|
+
let nextEagerLoadReason: InstructionsLoadReason = 'session_start'
|
|
1094
|
+
|
|
1095
|
+
// Whether the InstructionsLoaded hook should fire on the next cache miss.
|
|
1096
|
+
// true initially (for session_start), consumed after firing, re-enabled only
|
|
1097
|
+
// by resetGetMemoryFilesCache(). Callers that only need cache invalidation
|
|
1098
|
+
// for correctness (e.g. worktree enter/exit, settings sync, /memory dialog)
|
|
1099
|
+
// should use clearMemoryFileCaches() instead to avoid spurious hook fires.
|
|
1100
|
+
let shouldFireHook = true
|
|
1101
|
+
|
|
1102
|
+
function consumeNextEagerLoadReason(): InstructionsLoadReason | undefined {
|
|
1103
|
+
if (!shouldFireHook) return undefined
|
|
1104
|
+
shouldFireHook = false
|
|
1105
|
+
const reason = nextEagerLoadReason
|
|
1106
|
+
nextEagerLoadReason = 'session_start'
|
|
1107
|
+
return reason
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
/**
|
|
1111
|
+
* Clears the getMemoryFiles memoize cache
|
|
1112
|
+
* without firing the InstructionsLoaded hook.
|
|
1113
|
+
*
|
|
1114
|
+
* Use this for cache invalidation that is purely for correctness (e.g.
|
|
1115
|
+
* worktree enter/exit, settings sync, /memory dialog). For events that
|
|
1116
|
+
* represent instructions actually being reloaded into context (e.g.
|
|
1117
|
+
* compaction), use resetGetMemoryFilesCache() instead.
|
|
1118
|
+
*/
|
|
1119
|
+
export function clearMemoryFileCaches(): void {
|
|
1120
|
+
// ?.cache because tests spyOn this, which replaces the memoize wrapper.
|
|
1121
|
+
getMemoryFiles.cache?.clear?.()
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
export function resetGetMemoryFilesCache(
|
|
1125
|
+
reason: InstructionsLoadReason = 'session_start',
|
|
1126
|
+
): void {
|
|
1127
|
+
nextEagerLoadReason = reason
|
|
1128
|
+
shouldFireHook = true
|
|
1129
|
+
clearMemoryFileCaches()
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
export function getLargeMemoryFiles(files: MemoryFileInfo[]): MemoryFileInfo[] {
|
|
1133
|
+
return files.filter(f => f.content.length > MAX_MEMORY_CHARACTER_COUNT)
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
/**
|
|
1137
|
+
* When tengu_moth_copse is on, the findRelevantMemories prefetch surfaces
|
|
1138
|
+
* memory files via attachments, so the MEMORY.md index is no longer injected
|
|
1139
|
+
* into the system prompt. Callsites that care about "what's actually in
|
|
1140
|
+
* context" (context builder, /context viz) should filter through this.
|
|
1141
|
+
*/
|
|
1142
|
+
export function filterInjectedMemoryFiles(
|
|
1143
|
+
files: MemoryFileInfo[],
|
|
1144
|
+
): MemoryFileInfo[] {
|
|
1145
|
+
const skipMemoryIndex = getFeatureValue_CACHED_MAY_BE_STALE(
|
|
1146
|
+
'tengu_moth_copse',
|
|
1147
|
+
false,
|
|
1148
|
+
)
|
|
1149
|
+
if (!skipMemoryIndex) return files
|
|
1150
|
+
return files.filter(f => f.type !== 'AutoMem' && f.type !== 'TeamMem')
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
export const getClaudeMds = (
|
|
1154
|
+
memoryFiles: MemoryFileInfo[],
|
|
1155
|
+
filter?: (type: MemoryType) => boolean,
|
|
1156
|
+
): string => {
|
|
1157
|
+
const memories: string[] = []
|
|
1158
|
+
const skipProjectLevel = getFeatureValue_CACHED_MAY_BE_STALE(
|
|
1159
|
+
'tengu_paper_halyard',
|
|
1160
|
+
false,
|
|
1161
|
+
)
|
|
1162
|
+
|
|
1163
|
+
for (const file of memoryFiles) {
|
|
1164
|
+
if (filter && !filter(file.type)) continue
|
|
1165
|
+
if (skipProjectLevel && (file.type === 'Project' || file.type === 'Local'))
|
|
1166
|
+
continue
|
|
1167
|
+
if (file.content) {
|
|
1168
|
+
const description =
|
|
1169
|
+
file.type === 'Project'
|
|
1170
|
+
? ' (project instructions, checked into the codebase)'
|
|
1171
|
+
: file.type === 'Local'
|
|
1172
|
+
? " (user's private project instructions, not checked in)"
|
|
1173
|
+
: feature('TEAMMEM') && file.type === 'TeamMem'
|
|
1174
|
+
? ' (shared team memory, synced across the organization)'
|
|
1175
|
+
: file.type === 'AutoMem'
|
|
1176
|
+
? " (user's auto-memory, persists across conversations)"
|
|
1177
|
+
: " (user's private global instructions for all projects)"
|
|
1178
|
+
|
|
1179
|
+
const content = file.content.trim()
|
|
1180
|
+
if (feature('TEAMMEM') && file.type === 'TeamMem') {
|
|
1181
|
+
memories.push(
|
|
1182
|
+
`Contents of ${file.path}${description}:\n\n<team-memory-content source="shared">\n${content}\n</team-memory-content>`,
|
|
1183
|
+
)
|
|
1184
|
+
} else {
|
|
1185
|
+
memories.push(`Contents of ${file.path}${description}:\n\n${content}`)
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
if (memories.length === 0) {
|
|
1191
|
+
return ''
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
return `${MEMORY_INSTRUCTION_PROMPT}\n\n${memories.join('\n\n')}`
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
/**
|
|
1198
|
+
* Gets managed and user conditional rules that match the target path.
|
|
1199
|
+
* This is the first phase of nested memory loading.
|
|
1200
|
+
*
|
|
1201
|
+
* @param targetPath The target file path to match against glob patterns
|
|
1202
|
+
* @param processedPaths Set of already processed file paths (will be mutated)
|
|
1203
|
+
* @returns Array of MemoryFileInfo objects for matching conditional rules
|
|
1204
|
+
*/
|
|
1205
|
+
export async function getManagedAndUserConditionalRules(
|
|
1206
|
+
targetPath: string,
|
|
1207
|
+
processedPaths: Set<string>,
|
|
1208
|
+
): Promise<MemoryFileInfo[]> {
|
|
1209
|
+
const result: MemoryFileInfo[] = []
|
|
1210
|
+
|
|
1211
|
+
// Process Managed conditional .claude/rules/*.md files
|
|
1212
|
+
const managedClaudeRulesDir = getManagedClaudeRulesDir()
|
|
1213
|
+
result.push(
|
|
1214
|
+
...(await processConditionedMdRules(
|
|
1215
|
+
targetPath,
|
|
1216
|
+
managedClaudeRulesDir,
|
|
1217
|
+
'Managed',
|
|
1218
|
+
processedPaths,
|
|
1219
|
+
false,
|
|
1220
|
+
)),
|
|
1221
|
+
)
|
|
1222
|
+
|
|
1223
|
+
if (isSettingSourceEnabled('userSettings')) {
|
|
1224
|
+
// Process User conditional .claude/rules/*.md files
|
|
1225
|
+
const userClaudeRulesDir = getUserClaudeRulesDir()
|
|
1226
|
+
result.push(
|
|
1227
|
+
...(await processConditionedMdRules(
|
|
1228
|
+
targetPath,
|
|
1229
|
+
userClaudeRulesDir,
|
|
1230
|
+
'User',
|
|
1231
|
+
processedPaths,
|
|
1232
|
+
true,
|
|
1233
|
+
)),
|
|
1234
|
+
)
|
|
1235
|
+
}
|
|
1236
|
+
|
|
1237
|
+
return result
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
/**
|
|
1241
|
+
* Gets memory files for a single nested directory (between CWD and target).
|
|
1242
|
+
* Loads CLAUDE.md, unconditional rules, and conditional rules for that directory.
|
|
1243
|
+
*
|
|
1244
|
+
* @param dir The directory to process
|
|
1245
|
+
* @param targetPath The target file path (for conditional rule matching)
|
|
1246
|
+
* @param processedPaths Set of already processed file paths (will be mutated)
|
|
1247
|
+
* @returns Array of MemoryFileInfo objects
|
|
1248
|
+
*/
|
|
1249
|
+
export async function getMemoryFilesForNestedDirectory(
|
|
1250
|
+
dir: string,
|
|
1251
|
+
targetPath: string,
|
|
1252
|
+
processedPaths: Set<string>,
|
|
1253
|
+
): Promise<MemoryFileInfo[]> {
|
|
1254
|
+
const result: MemoryFileInfo[] = []
|
|
1255
|
+
|
|
1256
|
+
// Process project memory files (CLAUDE.md and .claude/CLAUDE.md)
|
|
1257
|
+
if (isSettingSourceEnabled('projectSettings')) {
|
|
1258
|
+
const projectPath = join(dir, 'CLAUDE.md')
|
|
1259
|
+
result.push(
|
|
1260
|
+
...(await processMemoryFile(
|
|
1261
|
+
projectPath,
|
|
1262
|
+
'Project',
|
|
1263
|
+
processedPaths,
|
|
1264
|
+
false,
|
|
1265
|
+
)),
|
|
1266
|
+
)
|
|
1267
|
+
const dotClaudePath = join(dir, '.claude', 'CLAUDE.md')
|
|
1268
|
+
result.push(
|
|
1269
|
+
...(await processMemoryFile(
|
|
1270
|
+
dotClaudePath,
|
|
1271
|
+
'Project',
|
|
1272
|
+
processedPaths,
|
|
1273
|
+
false,
|
|
1274
|
+
)),
|
|
1275
|
+
)
|
|
1276
|
+
}
|
|
1277
|
+
|
|
1278
|
+
// Process local memory file (CLAUDE.local.md)
|
|
1279
|
+
if (isSettingSourceEnabled('localSettings')) {
|
|
1280
|
+
const localPath = join(dir, 'CLAUDE.local.md')
|
|
1281
|
+
result.push(
|
|
1282
|
+
...(await processMemoryFile(localPath, 'Local', processedPaths, false)),
|
|
1283
|
+
)
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
const rulesDir = join(dir, '.claude', 'rules')
|
|
1287
|
+
|
|
1288
|
+
// Process project unconditional .claude/rules/*.md files, which were not eagerly loaded
|
|
1289
|
+
// Use a separate processedPaths set to avoid marking conditional rule files as processed
|
|
1290
|
+
const unconditionalProcessedPaths = new Set(processedPaths)
|
|
1291
|
+
result.push(
|
|
1292
|
+
...(await processMdRules({
|
|
1293
|
+
rulesDir,
|
|
1294
|
+
type: 'Project',
|
|
1295
|
+
processedPaths: unconditionalProcessedPaths,
|
|
1296
|
+
includeExternal: false,
|
|
1297
|
+
conditionalRule: false,
|
|
1298
|
+
})),
|
|
1299
|
+
)
|
|
1300
|
+
|
|
1301
|
+
// Process project conditional .claude/rules/*.md files
|
|
1302
|
+
result.push(
|
|
1303
|
+
...(await processConditionedMdRules(
|
|
1304
|
+
targetPath,
|
|
1305
|
+
rulesDir,
|
|
1306
|
+
'Project',
|
|
1307
|
+
processedPaths,
|
|
1308
|
+
false,
|
|
1309
|
+
)),
|
|
1310
|
+
)
|
|
1311
|
+
|
|
1312
|
+
// processedPaths must be seeded with unconditional paths for subsequent directories
|
|
1313
|
+
for (const path of unconditionalProcessedPaths) {
|
|
1314
|
+
processedPaths.add(path)
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
return result
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1320
|
+
/**
|
|
1321
|
+
* Gets conditional rules for a CWD-level directory (from root up to CWD).
|
|
1322
|
+
* Only processes conditional rules since unconditional rules are already loaded eagerly.
|
|
1323
|
+
*
|
|
1324
|
+
* @param dir The directory to process
|
|
1325
|
+
* @param targetPath The target file path (for conditional rule matching)
|
|
1326
|
+
* @param processedPaths Set of already processed file paths (will be mutated)
|
|
1327
|
+
* @returns Array of MemoryFileInfo objects
|
|
1328
|
+
*/
|
|
1329
|
+
export async function getConditionalRulesForCwdLevelDirectory(
|
|
1330
|
+
dir: string,
|
|
1331
|
+
targetPath: string,
|
|
1332
|
+
processedPaths: Set<string>,
|
|
1333
|
+
): Promise<MemoryFileInfo[]> {
|
|
1334
|
+
const rulesDir = join(dir, '.claude', 'rules')
|
|
1335
|
+
return processConditionedMdRules(
|
|
1336
|
+
targetPath,
|
|
1337
|
+
rulesDir,
|
|
1338
|
+
'Project',
|
|
1339
|
+
processedPaths,
|
|
1340
|
+
false,
|
|
1341
|
+
)
|
|
1342
|
+
}
|
|
1343
|
+
|
|
1344
|
+
/**
|
|
1345
|
+
* Processes all .md files in the .claude/rules/ directory and its subdirectories,
|
|
1346
|
+
* filtering to only include files with frontmatter paths that match the target path
|
|
1347
|
+
* @param targetPath The file path to match against frontmatter glob patterns
|
|
1348
|
+
* @param rulesDir The path to the rules directory
|
|
1349
|
+
* @param type Type of memory file (User, Project, Local)
|
|
1350
|
+
* @param processedPaths Set of already processed file paths
|
|
1351
|
+
* @param includeExternal Whether to include external files
|
|
1352
|
+
* @returns Array of MemoryFileInfo objects that match the target path
|
|
1353
|
+
*/
|
|
1354
|
+
export async function processConditionedMdRules(
|
|
1355
|
+
targetPath: string,
|
|
1356
|
+
rulesDir: string,
|
|
1357
|
+
type: MemoryType,
|
|
1358
|
+
processedPaths: Set<string>,
|
|
1359
|
+
includeExternal: boolean,
|
|
1360
|
+
): Promise<MemoryFileInfo[]> {
|
|
1361
|
+
const conditionedRuleMdFiles = await processMdRules({
|
|
1362
|
+
rulesDir,
|
|
1363
|
+
type,
|
|
1364
|
+
processedPaths,
|
|
1365
|
+
includeExternal,
|
|
1366
|
+
conditionalRule: true,
|
|
1367
|
+
})
|
|
1368
|
+
|
|
1369
|
+
// Filter to only include files whose globs patterns match the targetPath
|
|
1370
|
+
return conditionedRuleMdFiles.filter(file => {
|
|
1371
|
+
if (!file.globs || file.globs.length === 0) {
|
|
1372
|
+
return false
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
// For Project rules: glob patterns are relative to the directory containing .claude
|
|
1376
|
+
// For Managed/User rules: glob patterns are relative to the original CWD
|
|
1377
|
+
const baseDir =
|
|
1378
|
+
type === 'Project'
|
|
1379
|
+
? dirname(dirname(rulesDir)) // Parent of .claude
|
|
1380
|
+
: getOriginalCwd() // Project root for managed/user rules
|
|
1381
|
+
|
|
1382
|
+
const relativePath = isAbsolute(targetPath)
|
|
1383
|
+
? relative(baseDir, targetPath)
|
|
1384
|
+
: targetPath
|
|
1385
|
+
// ignore() throws on empty strings, paths escaping the base (../),
|
|
1386
|
+
// and absolute paths (Windows cross-drive relative() returns absolute).
|
|
1387
|
+
// Files outside baseDir can't match baseDir-relative globs anyway.
|
|
1388
|
+
if (
|
|
1389
|
+
!relativePath ||
|
|
1390
|
+
relativePath.startsWith('..') ||
|
|
1391
|
+
isAbsolute(relativePath)
|
|
1392
|
+
) {
|
|
1393
|
+
return false
|
|
1394
|
+
}
|
|
1395
|
+
return ignore().add(file.globs).ignores(relativePath)
|
|
1396
|
+
})
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
export type ExternalClaudeMdInclude = {
|
|
1400
|
+
path: string
|
|
1401
|
+
parent: string
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
export function getExternalClaudeMdIncludes(
|
|
1405
|
+
files: MemoryFileInfo[],
|
|
1406
|
+
): ExternalClaudeMdInclude[] {
|
|
1407
|
+
const externals: ExternalClaudeMdInclude[] = []
|
|
1408
|
+
for (const file of files) {
|
|
1409
|
+
if (file.type !== 'User' && file.parent && !pathInOriginalCwd(file.path)) {
|
|
1410
|
+
externals.push({ path: file.path, parent: file.parent })
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
return externals
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
export function hasExternalClaudeMdIncludes(files: MemoryFileInfo[]): boolean {
|
|
1417
|
+
return getExternalClaudeMdIncludes(files).length > 0
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1420
|
+
export async function shouldShowClaudeMdExternalIncludesWarning(): Promise<boolean> {
|
|
1421
|
+
const config = getCurrentProjectConfig()
|
|
1422
|
+
if (
|
|
1423
|
+
config.hasClaudeMdExternalIncludesApproved ||
|
|
1424
|
+
config.hasClaudeMdExternalIncludesWarningShown
|
|
1425
|
+
) {
|
|
1426
|
+
return false
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
return hasExternalClaudeMdIncludes(await getMemoryFiles(true))
|
|
1430
|
+
}
|
|
1431
|
+
|
|
1432
|
+
/**
|
|
1433
|
+
* Check if a file path is a memory file (CLAUDE.md, CLAUDE.local.md, or .claude/rules/*.md)
|
|
1434
|
+
*/
|
|
1435
|
+
export function isMemoryFilePath(filePath: string): boolean {
|
|
1436
|
+
const name = basename(filePath)
|
|
1437
|
+
|
|
1438
|
+
// CLAUDE.md or CLAUDE.local.md anywhere
|
|
1439
|
+
if (name === 'CLAUDE.md' || name === 'CLAUDE.local.md') {
|
|
1440
|
+
return true
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
// .md files in .claude/rules/ directories
|
|
1444
|
+
if (
|
|
1445
|
+
name.endsWith('.md') &&
|
|
1446
|
+
filePath.includes(`${sep}.claude${sep}rules${sep}`)
|
|
1447
|
+
) {
|
|
1448
|
+
return true
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
return false
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
/**
|
|
1455
|
+
* Get all memory file paths from both standard discovery and readFileState.
|
|
1456
|
+
* Combines:
|
|
1457
|
+
* - getMemoryFiles() paths (CWD upward to root)
|
|
1458
|
+
* - readFileState paths matching memory patterns (includes child directories)
|
|
1459
|
+
*/
|
|
1460
|
+
export function getAllMemoryFilePaths(
|
|
1461
|
+
files: MemoryFileInfo[],
|
|
1462
|
+
readFileState: FileStateCache,
|
|
1463
|
+
): string[] {
|
|
1464
|
+
const paths = new Set<string>()
|
|
1465
|
+
for (const file of files) {
|
|
1466
|
+
if (file.content.trim().length > 0) {
|
|
1467
|
+
paths.add(file.path)
|
|
1468
|
+
}
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
// Add memory files from readFileState (includes child directories)
|
|
1472
|
+
for (const filePath of cacheKeys(readFileState)) {
|
|
1473
|
+
if (isMemoryFilePath(filePath)) {
|
|
1474
|
+
paths.add(filePath)
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
return Array.from(paths)
|
|
1479
|
+
}
|