@xortex/xcode 3.0.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.
Files changed (934) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -0
  3. package/bin/xcode +127 -0
  4. package/bin/xcode-test +84 -0
  5. package/bin/xcode.cmd +31 -0
  6. package/constants/apiLimits.ts +94 -0
  7. package/constants/betas.ts +52 -0
  8. package/constants/common.ts +33 -0
  9. package/constants/cyberRiskInstruction.ts +24 -0
  10. package/constants/errorIds.ts +15 -0
  11. package/constants/figures.ts +45 -0
  12. package/constants/files.ts +156 -0
  13. package/constants/github-app.ts +144 -0
  14. package/constants/keys.ts +11 -0
  15. package/constants/messages.ts +1 -0
  16. package/constants/oauth.ts +234 -0
  17. package/constants/outputStyles.ts +216 -0
  18. package/constants/product.ts +76 -0
  19. package/constants/prompts.ts +939 -0
  20. package/constants/spinnerVerbs.ts +204 -0
  21. package/constants/system.ts +95 -0
  22. package/constants/systemPromptSections.ts +68 -0
  23. package/constants/toolLimits.ts +56 -0
  24. package/constants/tools.ts +112 -0
  25. package/constants/turnCompletionVerbs.ts +12 -0
  26. package/constants/xml.ts +86 -0
  27. package/entrypoints/agentSdkTypes.ts +443 -0
  28. package/entrypoints/cli.tsx +307 -0
  29. package/entrypoints/init.ts +340 -0
  30. package/entrypoints/mcp.ts +196 -0
  31. package/entrypoints/sandboxTypes.ts +156 -0
  32. package/entrypoints/sdk/controlSchemas.ts +663 -0
  33. package/entrypoints/sdk/coreSchemas.ts +1889 -0
  34. package/entrypoints/sdk/coreTypes.generated.ts +2 -0
  35. package/entrypoints/sdk/coreTypes.ts +62 -0
  36. package/entrypoints/sdk/runtimeTypes.ts +140 -0
  37. package/entrypoints/sdk/sdkUtilityTypes.ts +3 -0
  38. package/entrypoints/sdk/toolTypes.ts +90 -0
  39. package/main.tsx +4686 -0
  40. package/package.json +120 -0
  41. package/services/AgentSummary/agentSummary.ts +179 -0
  42. package/services/MagicDocs/magicDocs.ts +254 -0
  43. package/services/MagicDocs/prompts.ts +127 -0
  44. package/services/PromptSuggestion/promptSuggestion.ts +523 -0
  45. package/services/PromptSuggestion/speculation.ts +991 -0
  46. package/services/SessionMemory/prompts.ts +324 -0
  47. package/services/SessionMemory/sessionMemory.ts +495 -0
  48. package/services/SessionMemory/sessionMemoryUtils.ts +207 -0
  49. package/services/analytics/config.ts +38 -0
  50. package/services/analytics/datadog.ts +307 -0
  51. package/services/analytics/firstPartyEventLogger.ts +449 -0
  52. package/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
  53. package/services/analytics/growthbook.ts +1155 -0
  54. package/services/analytics/index.ts +173 -0
  55. package/services/analytics/metadata.ts +973 -0
  56. package/services/analytics/sink.ts +114 -0
  57. package/services/analytics/sinkKillswitch.ts +25 -0
  58. package/services/api/adminRequests.ts +119 -0
  59. package/services/api/bootstrap.ts +141 -0
  60. package/services/api/claude.ts +3422 -0
  61. package/services/api/client.ts +406 -0
  62. package/services/api/dumpPrompts.ts +226 -0
  63. package/services/api/emptyUsage.ts +22 -0
  64. package/services/api/errorUtils.ts +260 -0
  65. package/services/api/errors.ts +1207 -0
  66. package/services/api/filesApi.ts +748 -0
  67. package/services/api/firstTokenDate.ts +60 -0
  68. package/services/api/gemini.ts +359 -0
  69. package/services/api/geminiAdapter.ts +123 -0
  70. package/services/api/geminiClient.ts +291 -0
  71. package/services/api/grove.ts +357 -0
  72. package/services/api/logging.ts +788 -0
  73. package/services/api/metricsOptOut.ts +159 -0
  74. package/services/api/openRouterClient.ts +453 -0
  75. package/services/api/overageCreditGrant.ts +137 -0
  76. package/services/api/promptCacheBreakDetection.ts +727 -0
  77. package/services/api/referral.ts +281 -0
  78. package/services/api/sessionIngress.ts +514 -0
  79. package/services/api/ultrareviewQuota.ts +38 -0
  80. package/services/api/usage.ts +63 -0
  81. package/services/api/withRetry.ts +822 -0
  82. package/services/autoDream/autoDream.ts +324 -0
  83. package/services/autoDream/config.ts +21 -0
  84. package/services/autoDream/consolidationLock.ts +140 -0
  85. package/services/autoDream/consolidationPrompt.ts +65 -0
  86. package/services/awaySummary.ts +74 -0
  87. package/services/claudeAiLimits.ts +515 -0
  88. package/services/claudeAiLimitsHook.ts +23 -0
  89. package/services/compact/apiMicrocompact.ts +153 -0
  90. package/services/compact/autoCompact.ts +351 -0
  91. package/services/compact/compact.ts +1705 -0
  92. package/services/compact/compactWarningHook.ts +16 -0
  93. package/services/compact/compactWarningState.ts +18 -0
  94. package/services/compact/grouping.ts +63 -0
  95. package/services/compact/microCompact.ts +530 -0
  96. package/services/compact/postCompactCleanup.ts +77 -0
  97. package/services/compact/prompt.ts +374 -0
  98. package/services/compact/sessionMemoryCompact.ts +630 -0
  99. package/services/compact/timeBasedMCConfig.ts +43 -0
  100. package/services/diagnosticTracking.ts +397 -0
  101. package/services/extractMemories/extractMemories.ts +517 -0
  102. package/services/extractMemories/prompts.ts +154 -0
  103. package/services/internalLogging.ts +90 -0
  104. package/services/lsp/LSPClient.ts +447 -0
  105. package/services/lsp/LSPDiagnosticRegistry.ts +386 -0
  106. package/services/lsp/LSPServerInstance.ts +511 -0
  107. package/services/lsp/LSPServerManager.ts +420 -0
  108. package/services/lsp/config.ts +79 -0
  109. package/services/lsp/manager.ts +289 -0
  110. package/services/lsp/passiveFeedback.ts +328 -0
  111. package/services/mcp/InProcessTransport.ts +63 -0
  112. package/services/mcp/MCPConnectionManager.tsx +73 -0
  113. package/services/mcp/SdkControlTransport.ts +136 -0
  114. package/services/mcp/auth.ts +2465 -0
  115. package/services/mcp/channelAllowlist.ts +76 -0
  116. package/services/mcp/channelNotification.ts +316 -0
  117. package/services/mcp/channelPermissions.ts +240 -0
  118. package/services/mcp/claudeai.ts +164 -0
  119. package/services/mcp/client.ts +3348 -0
  120. package/services/mcp/config.ts +1578 -0
  121. package/services/mcp/elicitationHandler.ts +313 -0
  122. package/services/mcp/envExpansion.ts +38 -0
  123. package/services/mcp/headersHelper.ts +138 -0
  124. package/services/mcp/mcpStringUtils.ts +106 -0
  125. package/services/mcp/normalization.ts +23 -0
  126. package/services/mcp/oauthPort.ts +78 -0
  127. package/services/mcp/officialRegistry.ts +72 -0
  128. package/services/mcp/types.ts +258 -0
  129. package/services/mcp/useManageMCPConnections.ts +1141 -0
  130. package/services/mcp/utils.ts +575 -0
  131. package/services/mcp/vscodeSdkMcp.ts +112 -0
  132. package/services/mcp/xaa.ts +511 -0
  133. package/services/mcp/xaaIdpLogin.ts +487 -0
  134. package/services/mcpServerApproval.tsx +41 -0
  135. package/services/mockRateLimits.ts +882 -0
  136. package/services/notifier.ts +156 -0
  137. package/services/oauth/auth-code-listener.ts +211 -0
  138. package/services/oauth/client.ts +566 -0
  139. package/services/oauth/crypto.ts +23 -0
  140. package/services/oauth/getOauthProfile.ts +53 -0
  141. package/services/oauth/index.ts +198 -0
  142. package/services/plugins/PluginInstallationManager.ts +184 -0
  143. package/services/plugins/pluginCliCommands.ts +344 -0
  144. package/services/plugins/pluginOperations.ts +1088 -0
  145. package/services/policyLimits/index.ts +663 -0
  146. package/services/policyLimits/types.ts +27 -0
  147. package/services/preventSleep.ts +165 -0
  148. package/services/rateLimitMessages.ts +344 -0
  149. package/services/rateLimitMocking.ts +144 -0
  150. package/services/remoteManagedSettings/index.ts +638 -0
  151. package/services/remoteManagedSettings/securityCheck.tsx +74 -0
  152. package/services/remoteManagedSettings/syncCache.ts +112 -0
  153. package/services/remoteManagedSettings/syncCacheState.ts +96 -0
  154. package/services/remoteManagedSettings/types.ts +31 -0
  155. package/services/settingsSync/index.ts +581 -0
  156. package/services/settingsSync/types.ts +67 -0
  157. package/services/teamMemorySync/index.ts +1256 -0
  158. package/services/teamMemorySync/secretScanner.ts +324 -0
  159. package/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
  160. package/services/teamMemorySync/types.ts +156 -0
  161. package/services/teamMemorySync/watcher.ts +387 -0
  162. package/services/tips/tipHistory.ts +17 -0
  163. package/services/tips/tipRegistry.ts +686 -0
  164. package/services/tips/tipScheduler.ts +58 -0
  165. package/services/tokenEstimation.ts +495 -0
  166. package/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
  167. package/services/tools/StreamingToolExecutor.ts +530 -0
  168. package/services/tools/toolExecution.ts +1745 -0
  169. package/services/tools/toolHooks.ts +650 -0
  170. package/services/tools/toolOrchestration.ts +188 -0
  171. package/services/vcr.ts +406 -0
  172. package/services/voice.ts +525 -0
  173. package/services/voiceKeyterms.ts +106 -0
  174. package/services/voiceStreamSTT.ts +544 -0
  175. package/tools/AgentTool/AgentTool.tsx +1398 -0
  176. package/tools/AgentTool/UI.tsx +872 -0
  177. package/tools/AgentTool/agentColorManager.ts +66 -0
  178. package/tools/AgentTool/agentDisplay.ts +104 -0
  179. package/tools/AgentTool/agentMemory.ts +177 -0
  180. package/tools/AgentTool/agentMemorySnapshot.ts +197 -0
  181. package/tools/AgentTool/agentToolUtils.ts +686 -0
  182. package/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
  183. package/tools/AgentTool/built-in/exploreAgent.ts +83 -0
  184. package/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
  185. package/tools/AgentTool/built-in/planAgent.ts +92 -0
  186. package/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
  187. package/tools/AgentTool/built-in/verificationAgent.ts +152 -0
  188. package/tools/AgentTool/builtInAgents.ts +72 -0
  189. package/tools/AgentTool/constants.ts +12 -0
  190. package/tools/AgentTool/forkSubagent.ts +210 -0
  191. package/tools/AgentTool/loadAgentsDir.ts +755 -0
  192. package/tools/AgentTool/prompt.ts +287 -0
  193. package/tools/AgentTool/resumeAgent.ts +265 -0
  194. package/tools/AgentTool/runAgent.ts +973 -0
  195. package/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
  196. package/tools/AskUserQuestionTool/prompt.ts +44 -0
  197. package/tools/BashTool/BashTool.tsx +1144 -0
  198. package/tools/BashTool/BashToolResultMessage.tsx +191 -0
  199. package/tools/BashTool/UI.tsx +185 -0
  200. package/tools/BashTool/bashCommandHelpers.ts +265 -0
  201. package/tools/BashTool/bashPermissions.ts +2621 -0
  202. package/tools/BashTool/bashSecurity.ts +2592 -0
  203. package/tools/BashTool/commandSemantics.ts +140 -0
  204. package/tools/BashTool/commentLabel.ts +13 -0
  205. package/tools/BashTool/destructiveCommandWarning.ts +102 -0
  206. package/tools/BashTool/modeValidation.ts +115 -0
  207. package/tools/BashTool/pathValidation.ts +1303 -0
  208. package/tools/BashTool/prompt.ts +369 -0
  209. package/tools/BashTool/readOnlyValidation.ts +1990 -0
  210. package/tools/BashTool/sedEditParser.ts +322 -0
  211. package/tools/BashTool/sedValidation.ts +684 -0
  212. package/tools/BashTool/shouldUseSandbox.ts +153 -0
  213. package/tools/BashTool/toolName.ts +2 -0
  214. package/tools/BashTool/utils.ts +223 -0
  215. package/tools/BriefTool/BriefTool.ts +204 -0
  216. package/tools/BriefTool/UI.tsx +101 -0
  217. package/tools/BriefTool/attachments.ts +110 -0
  218. package/tools/BriefTool/prompt.ts +22 -0
  219. package/tools/BriefTool/upload.ts +174 -0
  220. package/tools/ConfigTool/ConfigTool.ts +467 -0
  221. package/tools/ConfigTool/UI.tsx +38 -0
  222. package/tools/ConfigTool/constants.ts +1 -0
  223. package/tools/ConfigTool/prompt.ts +93 -0
  224. package/tools/ConfigTool/supportedSettings.ts +211 -0
  225. package/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
  226. package/tools/EnterPlanModeTool/UI.tsx +33 -0
  227. package/tools/EnterPlanModeTool/constants.ts +1 -0
  228. package/tools/EnterPlanModeTool/prompt.ts +170 -0
  229. package/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
  230. package/tools/EnterWorktreeTool/UI.tsx +20 -0
  231. package/tools/EnterWorktreeTool/constants.ts +1 -0
  232. package/tools/EnterWorktreeTool/prompt.ts +30 -0
  233. package/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
  234. package/tools/ExitPlanModeTool/UI.tsx +82 -0
  235. package/tools/ExitPlanModeTool/constants.ts +2 -0
  236. package/tools/ExitPlanModeTool/prompt.ts +29 -0
  237. package/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
  238. package/tools/ExitWorktreeTool/UI.tsx +25 -0
  239. package/tools/ExitWorktreeTool/constants.ts +1 -0
  240. package/tools/ExitWorktreeTool/prompt.ts +32 -0
  241. package/tools/FileEditTool/FileEditTool.ts +625 -0
  242. package/tools/FileEditTool/UI.tsx +289 -0
  243. package/tools/FileEditTool/constants.ts +11 -0
  244. package/tools/FileEditTool/prompt.ts +28 -0
  245. package/tools/FileEditTool/types.ts +85 -0
  246. package/tools/FileEditTool/utils.ts +775 -0
  247. package/tools/FileReadTool/FileReadTool.ts +1183 -0
  248. package/tools/FileReadTool/UI.tsx +185 -0
  249. package/tools/FileReadTool/imageProcessor.ts +94 -0
  250. package/tools/FileReadTool/limits.ts +92 -0
  251. package/tools/FileReadTool/prompt.ts +49 -0
  252. package/tools/FileWriteTool/FileWriteTool.ts +434 -0
  253. package/tools/FileWriteTool/UI.tsx +405 -0
  254. package/tools/FileWriteTool/prompt.ts +18 -0
  255. package/tools/GlobTool/GlobTool.ts +198 -0
  256. package/tools/GlobTool/UI.tsx +63 -0
  257. package/tools/GlobTool/prompt.ts +7 -0
  258. package/tools/GrepTool/GrepTool.ts +577 -0
  259. package/tools/GrepTool/UI.tsx +201 -0
  260. package/tools/GrepTool/prompt.ts +18 -0
  261. package/tools/LSPTool/LSPTool.ts +860 -0
  262. package/tools/LSPTool/UI.tsx +228 -0
  263. package/tools/LSPTool/formatters.ts +592 -0
  264. package/tools/LSPTool/prompt.ts +21 -0
  265. package/tools/LSPTool/schemas.ts +215 -0
  266. package/tools/LSPTool/symbolContext.ts +90 -0
  267. package/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
  268. package/tools/ListMcpResourcesTool/UI.tsx +29 -0
  269. package/tools/ListMcpResourcesTool/prompt.ts +20 -0
  270. package/tools/MCPTool/MCPTool.ts +77 -0
  271. package/tools/MCPTool/UI.tsx +403 -0
  272. package/tools/MCPTool/classifyForCollapse.ts +604 -0
  273. package/tools/MCPTool/prompt.ts +3 -0
  274. package/tools/McpAuthTool/McpAuthTool.ts +215 -0
  275. package/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
  276. package/tools/NotebookEditTool/UI.tsx +93 -0
  277. package/tools/NotebookEditTool/constants.ts +2 -0
  278. package/tools/NotebookEditTool/prompt.ts +3 -0
  279. package/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
  280. package/tools/PowerShellTool/UI.tsx +131 -0
  281. package/tools/PowerShellTool/clmTypes.ts +211 -0
  282. package/tools/PowerShellTool/commandSemantics.ts +142 -0
  283. package/tools/PowerShellTool/commonParameters.ts +30 -0
  284. package/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
  285. package/tools/PowerShellTool/gitSafety.ts +176 -0
  286. package/tools/PowerShellTool/modeValidation.ts +404 -0
  287. package/tools/PowerShellTool/pathValidation.ts +2049 -0
  288. package/tools/PowerShellTool/powershellPermissions.ts +1648 -0
  289. package/tools/PowerShellTool/powershellSecurity.ts +1090 -0
  290. package/tools/PowerShellTool/prompt.ts +145 -0
  291. package/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
  292. package/tools/PowerShellTool/toolName.ts +2 -0
  293. package/tools/REPLTool/constants.ts +46 -0
  294. package/tools/REPLTool/primitiveTools.ts +39 -0
  295. package/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
  296. package/tools/ReadMcpResourceTool/UI.tsx +37 -0
  297. package/tools/ReadMcpResourceTool/prompt.ts +16 -0
  298. package/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
  299. package/tools/RemoteTriggerTool/UI.tsx +17 -0
  300. package/tools/RemoteTriggerTool/prompt.ts +15 -0
  301. package/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
  302. package/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
  303. package/tools/ScheduleCronTool/CronListTool.ts +97 -0
  304. package/tools/ScheduleCronTool/UI.tsx +60 -0
  305. package/tools/ScheduleCronTool/prompt.ts +135 -0
  306. package/tools/SendMessageTool/SendMessageTool.ts +917 -0
  307. package/tools/SendMessageTool/UI.tsx +31 -0
  308. package/tools/SendMessageTool/constants.ts +1 -0
  309. package/tools/SendMessageTool/prompt.ts +49 -0
  310. package/tools/SkillTool/SkillTool.ts +1108 -0
  311. package/tools/SkillTool/UI.tsx +128 -0
  312. package/tools/SkillTool/constants.ts +1 -0
  313. package/tools/SkillTool/prompt.ts +241 -0
  314. package/tools/SleepTool/prompt.ts +17 -0
  315. package/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
  316. package/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
  317. package/tools/TaskCreateTool/constants.ts +1 -0
  318. package/tools/TaskCreateTool/prompt.ts +56 -0
  319. package/tools/TaskGetTool/TaskGetTool.ts +128 -0
  320. package/tools/TaskGetTool/constants.ts +1 -0
  321. package/tools/TaskGetTool/prompt.ts +24 -0
  322. package/tools/TaskListTool/TaskListTool.ts +116 -0
  323. package/tools/TaskListTool/constants.ts +1 -0
  324. package/tools/TaskListTool/prompt.ts +49 -0
  325. package/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
  326. package/tools/TaskOutputTool/constants.ts +1 -0
  327. package/tools/TaskStopTool/TaskStopTool.ts +131 -0
  328. package/tools/TaskStopTool/UI.tsx +41 -0
  329. package/tools/TaskStopTool/prompt.ts +8 -0
  330. package/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
  331. package/tools/TaskUpdateTool/constants.ts +1 -0
  332. package/tools/TaskUpdateTool/prompt.ts +77 -0
  333. package/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
  334. package/tools/TeamCreateTool/UI.tsx +6 -0
  335. package/tools/TeamCreateTool/constants.ts +1 -0
  336. package/tools/TeamCreateTool/prompt.ts +113 -0
  337. package/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
  338. package/tools/TeamDeleteTool/UI.tsx +20 -0
  339. package/tools/TeamDeleteTool/constants.ts +1 -0
  340. package/tools/TeamDeleteTool/prompt.ts +16 -0
  341. package/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
  342. package/tools/TodoWriteTool/constants.ts +1 -0
  343. package/tools/TodoWriteTool/prompt.ts +184 -0
  344. package/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
  345. package/tools/ToolSearchTool/constants.ts +1 -0
  346. package/tools/ToolSearchTool/prompt.ts +121 -0
  347. package/tools/TungstenTool/TungstenTool.ts +4 -0
  348. package/tools/WebFetchTool/UI.tsx +72 -0
  349. package/tools/WebFetchTool/WebFetchTool.ts +318 -0
  350. package/tools/WebFetchTool/preapproved.ts +166 -0
  351. package/tools/WebFetchTool/prompt.ts +46 -0
  352. package/tools/WebFetchTool/utils.ts +530 -0
  353. package/tools/WebSearchTool/UI.tsx +101 -0
  354. package/tools/WebSearchTool/WebSearchTool.ts +435 -0
  355. package/tools/WebSearchTool/prompt.ts +34 -0
  356. package/tools/WorkflowTool/constants.ts +2 -0
  357. package/tools/XMemIngestTool/XMemIngestTool.ts +140 -0
  358. package/tools/XMemIngestTool/prompt.ts +13 -0
  359. package/tools/XMemRetrieveTool/XMemRetrieveTool.ts +177 -0
  360. package/tools/XMemRetrieveTool/prompt.ts +16 -0
  361. package/tools/XMemSearchTool/XMemSearchTool.ts +172 -0
  362. package/tools/XMemSearchTool/prompt.ts +11 -0
  363. package/tools/shared/gitOperationTracking.ts +277 -0
  364. package/tools/shared/spawnMultiAgent.ts +1093 -0
  365. package/tools/testing/TestingPermissionTool.tsx +74 -0
  366. package/tools/utils.ts +40 -0
  367. package/utils/CircularBuffer.ts +84 -0
  368. package/utils/Cursor.ts +1530 -0
  369. package/utils/QueryGuard.ts +121 -0
  370. package/utils/Shell.ts +474 -0
  371. package/utils/ShellCommand.ts +465 -0
  372. package/utils/abortController.ts +99 -0
  373. package/utils/activityManager.ts +164 -0
  374. package/utils/advisor.ts +145 -0
  375. package/utils/agentContext.ts +178 -0
  376. package/utils/agentId.ts +99 -0
  377. package/utils/agentSwarmsEnabled.ts +44 -0
  378. package/utils/agenticSessionSearch.ts +307 -0
  379. package/utils/analyzeContext.ts +1382 -0
  380. package/utils/ansiToPng.ts +334 -0
  381. package/utils/ansiToSvg.ts +272 -0
  382. package/utils/api.ts +718 -0
  383. package/utils/apiPreconnect.ts +71 -0
  384. package/utils/appleTerminalBackup.ts +124 -0
  385. package/utils/argumentSubstitution.ts +145 -0
  386. package/utils/array.ts +13 -0
  387. package/utils/asciicast.ts +239 -0
  388. package/utils/attachments.ts +4091 -0
  389. package/utils/attribution.ts +393 -0
  390. package/utils/auth.ts +2002 -0
  391. package/utils/authFileDescriptor.ts +196 -0
  392. package/utils/authPortable.ts +19 -0
  393. package/utils/autoModeDenials.ts +26 -0
  394. package/utils/autoRunIssue.tsx +122 -0
  395. package/utils/autoUpdater.ts +561 -0
  396. package/utils/aws.ts +74 -0
  397. package/utils/awsAuthStatusManager.ts +81 -0
  398. package/utils/axios.ts +8 -0
  399. package/utils/background/remote/preconditions.ts +235 -0
  400. package/utils/background/remote/remoteSession.ts +98 -0
  401. package/utils/backgroundHousekeeping.ts +94 -0
  402. package/utils/bash/ParsedCommand.ts +318 -0
  403. package/utils/bash/ShellSnapshot.ts +582 -0
  404. package/utils/bash/ast.ts +2679 -0
  405. package/utils/bash/bashParser.ts +4436 -0
  406. package/utils/bash/bashPipeCommand.ts +294 -0
  407. package/utils/bash/commands.ts +1339 -0
  408. package/utils/bash/heredoc.ts +733 -0
  409. package/utils/bash/parser.ts +230 -0
  410. package/utils/bash/prefix.ts +204 -0
  411. package/utils/bash/registry.ts +53 -0
  412. package/utils/bash/shellCompletion.ts +259 -0
  413. package/utils/bash/shellPrefix.ts +28 -0
  414. package/utils/bash/shellQuote.ts +304 -0
  415. package/utils/bash/shellQuoting.ts +128 -0
  416. package/utils/bash/specs/alias.ts +14 -0
  417. package/utils/bash/specs/index.ts +18 -0
  418. package/utils/bash/specs/nohup.ts +13 -0
  419. package/utils/bash/specs/pyright.ts +91 -0
  420. package/utils/bash/specs/sleep.ts +13 -0
  421. package/utils/bash/specs/srun.ts +31 -0
  422. package/utils/bash/specs/time.ts +13 -0
  423. package/utils/bash/specs/timeout.ts +20 -0
  424. package/utils/bash/treeSitterAnalysis.ts +506 -0
  425. package/utils/betas.ts +434 -0
  426. package/utils/billing.ts +78 -0
  427. package/utils/binaryCheck.ts +53 -0
  428. package/utils/browser.ts +68 -0
  429. package/utils/bufferedWriter.ts +100 -0
  430. package/utils/bundledMode.ts +22 -0
  431. package/utils/caCerts.ts +115 -0
  432. package/utils/caCertsConfig.ts +88 -0
  433. package/utils/cachePaths.ts +38 -0
  434. package/utils/classifierApprovals.ts +88 -0
  435. package/utils/classifierApprovalsHook.ts +17 -0
  436. package/utils/claudeCodeHints.ts +193 -0
  437. package/utils/claudeDesktop.ts +152 -0
  438. package/utils/claudeInChrome/chromeNativeHost.ts +527 -0
  439. package/utils/claudeInChrome/common.ts +540 -0
  440. package/utils/claudeInChrome/mcpServer.ts +292 -0
  441. package/utils/claudeInChrome/prompt.ts +83 -0
  442. package/utils/claudeInChrome/setup.ts +400 -0
  443. package/utils/claudeInChrome/setupPortable.ts +233 -0
  444. package/utils/claudeInChrome/toolRendering.tsx +262 -0
  445. package/utils/claudemd.ts +1479 -0
  446. package/utils/cleanup.ts +602 -0
  447. package/utils/cleanupRegistry.ts +25 -0
  448. package/utils/cliArgs.ts +60 -0
  449. package/utils/cliHighlight.ts +54 -0
  450. package/utils/codeIndexing.ts +206 -0
  451. package/utils/collapseBackgroundBashNotifications.ts +84 -0
  452. package/utils/collapseHookSummaries.ts +59 -0
  453. package/utils/collapseReadSearch.ts +1109 -0
  454. package/utils/collapseTeammateShutdowns.ts +55 -0
  455. package/utils/color-diff-mock.ts +27 -0
  456. package/utils/combinedAbortSignal.ts +47 -0
  457. package/utils/commandLifecycle.ts +21 -0
  458. package/utils/commitAttribution.ts +961 -0
  459. package/utils/completionCache.ts +166 -0
  460. package/utils/computerUse/appNames.ts +196 -0
  461. package/utils/computerUse/cleanup.ts +86 -0
  462. package/utils/computerUse/common.ts +61 -0
  463. package/utils/computerUse/computerUseLock.ts +215 -0
  464. package/utils/computerUse/drainRunLoop.ts +79 -0
  465. package/utils/computerUse/escHotkey.ts +54 -0
  466. package/utils/computerUse/executor.ts +658 -0
  467. package/utils/computerUse/gates.ts +72 -0
  468. package/utils/computerUse/hostAdapter.ts +69 -0
  469. package/utils/computerUse/inputLoader.ts +30 -0
  470. package/utils/computerUse/mcpServer.ts +106 -0
  471. package/utils/computerUse/setup.ts +53 -0
  472. package/utils/computerUse/swiftLoader.ts +23 -0
  473. package/utils/computerUse/toolRendering.tsx +125 -0
  474. package/utils/computerUse/wrapper.tsx +336 -0
  475. package/utils/concurrentSessions.ts +204 -0
  476. package/utils/config.ts +1817 -0
  477. package/utils/configConstants.ts +21 -0
  478. package/utils/contentArray.ts +51 -0
  479. package/utils/context.ts +221 -0
  480. package/utils/contextAnalysis.ts +272 -0
  481. package/utils/contextSuggestions.ts +235 -0
  482. package/utils/controlMessageCompat.ts +32 -0
  483. package/utils/conversationRecovery.ts +597 -0
  484. package/utils/cron.ts +308 -0
  485. package/utils/cronJitterConfig.ts +75 -0
  486. package/utils/cronScheduler.ts +565 -0
  487. package/utils/cronTasks.ts +458 -0
  488. package/utils/cronTasksLock.ts +195 -0
  489. package/utils/crossProjectResume.ts +75 -0
  490. package/utils/crypto.ts +13 -0
  491. package/utils/cwd.ts +32 -0
  492. package/utils/debug.ts +268 -0
  493. package/utils/debugFilter.ts +157 -0
  494. package/utils/deepLink/banner.ts +123 -0
  495. package/utils/deepLink/parseDeepLink.ts +170 -0
  496. package/utils/deepLink/protocolHandler.ts +136 -0
  497. package/utils/deepLink/registerProtocol.ts +348 -0
  498. package/utils/deepLink/terminalLauncher.ts +557 -0
  499. package/utils/deepLink/terminalPreference.ts +54 -0
  500. package/utils/desktopDeepLink.ts +236 -0
  501. package/utils/detectRepository.ts +178 -0
  502. package/utils/diagLogs.ts +94 -0
  503. package/utils/diff.ts +177 -0
  504. package/utils/directMemberMessage.ts +69 -0
  505. package/utils/displayTags.ts +51 -0
  506. package/utils/doctorContextWarnings.ts +265 -0
  507. package/utils/doctorDiagnostic.ts +625 -0
  508. package/utils/dxt/helpers.ts +88 -0
  509. package/utils/dxt/zip.ts +226 -0
  510. package/utils/earlyInput.ts +191 -0
  511. package/utils/editor.ts +183 -0
  512. package/utils/effort.ts +329 -0
  513. package/utils/embeddedTools.ts +29 -0
  514. package/utils/env.ts +347 -0
  515. package/utils/envDynamic.ts +151 -0
  516. package/utils/envUtils.ts +183 -0
  517. package/utils/envValidation.ts +38 -0
  518. package/utils/errorLogSink.ts +235 -0
  519. package/utils/errors.ts +238 -0
  520. package/utils/exampleCommands.ts +184 -0
  521. package/utils/execFileNoThrow.ts +150 -0
  522. package/utils/execFileNoThrowPortable.ts +89 -0
  523. package/utils/execSyncWrapper.ts +38 -0
  524. package/utils/exportRenderer.tsx +98 -0
  525. package/utils/extraUsage.ts +23 -0
  526. package/utils/fastMode.ts +532 -0
  527. package/utils/file.ts +584 -0
  528. package/utils/fileHistory.ts +1115 -0
  529. package/utils/fileOperationAnalytics.ts +71 -0
  530. package/utils/filePersistence/filePersistence.ts +287 -0
  531. package/utils/filePersistence/outputsScanner.ts +126 -0
  532. package/utils/fileRead.ts +102 -0
  533. package/utils/fileReadCache.ts +96 -0
  534. package/utils/fileStateCache.ts +142 -0
  535. package/utils/findExecutable.ts +17 -0
  536. package/utils/fingerprint.ts +76 -0
  537. package/utils/forkedAgent.ts +689 -0
  538. package/utils/format.ts +308 -0
  539. package/utils/formatBriefTimestamp.ts +81 -0
  540. package/utils/fpsTracker.ts +47 -0
  541. package/utils/frontmatterParser.ts +370 -0
  542. package/utils/fsOperations.ts +770 -0
  543. package/utils/fullscreen.ts +202 -0
  544. package/utils/generatedFiles.ts +136 -0
  545. package/utils/generators.ts +88 -0
  546. package/utils/genericProcessUtils.ts +184 -0
  547. package/utils/getWorktreePaths.ts +70 -0
  548. package/utils/getWorktreePathsPortable.ts +27 -0
  549. package/utils/ghPrStatus.ts +106 -0
  550. package/utils/git/gitConfigParser.ts +277 -0
  551. package/utils/git/gitFilesystem.ts +699 -0
  552. package/utils/git/gitignore.ts +99 -0
  553. package/utils/git.ts +926 -0
  554. package/utils/gitDiff.ts +532 -0
  555. package/utils/gitSettings.ts +18 -0
  556. package/utils/github/ghAuthStatus.ts +29 -0
  557. package/utils/githubRepoPathMapping.ts +162 -0
  558. package/utils/glob.ts +130 -0
  559. package/utils/gracefulShutdown.ts +529 -0
  560. package/utils/groupToolUses.ts +182 -0
  561. package/utils/handlePromptSubmit.ts +610 -0
  562. package/utils/hash.ts +46 -0
  563. package/utils/headlessProfiler.ts +178 -0
  564. package/utils/heapDumpService.ts +303 -0
  565. package/utils/heatmap.ts +198 -0
  566. package/utils/highlightMatch.tsx +28 -0
  567. package/utils/hooks/AsyncHookRegistry.ts +309 -0
  568. package/utils/hooks/apiQueryHookHelper.ts +141 -0
  569. package/utils/hooks/execAgentHook.ts +339 -0
  570. package/utils/hooks/execHttpHook.ts +242 -0
  571. package/utils/hooks/execPromptHook.ts +211 -0
  572. package/utils/hooks/fileChangedWatcher.ts +191 -0
  573. package/utils/hooks/hookEvents.ts +192 -0
  574. package/utils/hooks/hookHelpers.ts +83 -0
  575. package/utils/hooks/hooksConfigManager.ts +400 -0
  576. package/utils/hooks/hooksConfigSnapshot.ts +133 -0
  577. package/utils/hooks/hooksSettings.ts +271 -0
  578. package/utils/hooks/postSamplingHooks.ts +70 -0
  579. package/utils/hooks/registerFrontmatterHooks.ts +67 -0
  580. package/utils/hooks/registerSkillHooks.ts +64 -0
  581. package/utils/hooks/sessionHooks.ts +447 -0
  582. package/utils/hooks/skillImprovement.ts +267 -0
  583. package/utils/hooks/ssrfGuard.ts +294 -0
  584. package/utils/hooks.ts +5022 -0
  585. package/utils/horizontalScroll.ts +137 -0
  586. package/utils/http.ts +136 -0
  587. package/utils/hyperlink.ts +39 -0
  588. package/utils/iTermBackup.ts +73 -0
  589. package/utils/ide.ts +1494 -0
  590. package/utils/idePathConversion.ts +90 -0
  591. package/utils/idleTimeout.ts +53 -0
  592. package/utils/imagePaste.ts +416 -0
  593. package/utils/imageResizer.ts +880 -0
  594. package/utils/imageStore.ts +167 -0
  595. package/utils/imageValidation.ts +104 -0
  596. package/utils/immediateCommand.ts +15 -0
  597. package/utils/inProcessTeammateHelpers.ts +102 -0
  598. package/utils/ink.ts +26 -0
  599. package/utils/intl.ts +94 -0
  600. package/utils/jetbrains.ts +191 -0
  601. package/utils/json.ts +277 -0
  602. package/utils/jsonRead.ts +16 -0
  603. package/utils/keyboardShortcuts.ts +14 -0
  604. package/utils/lazySchema.ts +8 -0
  605. package/utils/listSessionsImpl.ts +454 -0
  606. package/utils/localInstaller.ts +162 -0
  607. package/utils/lockfile.ts +43 -0
  608. package/utils/log.ts +362 -0
  609. package/utils/logoV2Utils.ts +347 -0
  610. package/utils/mailbox.ts +73 -0
  611. package/utils/managedEnv.ts +199 -0
  612. package/utils/managedEnvConstants.ts +191 -0
  613. package/utils/markdown.ts +381 -0
  614. package/utils/markdownConfigLoader.ts +600 -0
  615. package/utils/mcp/dateTimeParser.ts +121 -0
  616. package/utils/mcp/elicitationValidation.ts +336 -0
  617. package/utils/mcpInstructionsDelta.ts +130 -0
  618. package/utils/mcpOutputStorage.ts +189 -0
  619. package/utils/mcpValidation.ts +208 -0
  620. package/utils/mcpWebSocketTransport.ts +200 -0
  621. package/utils/memoize.ts +269 -0
  622. package/utils/memory/types.ts +12 -0
  623. package/utils/memory/versions.ts +8 -0
  624. package/utils/memoryFileDetection.ts +289 -0
  625. package/utils/messagePredicates.ts +8 -0
  626. package/utils/messageQueueManager.ts +547 -0
  627. package/utils/messages/mappers.ts +290 -0
  628. package/utils/messages/systemInit.ts +96 -0
  629. package/utils/messages.ts +5520 -0
  630. package/utils/model/agent.ts +157 -0
  631. package/utils/model/aliases.ts +35 -0
  632. package/utils/model/antModels.ts +64 -0
  633. package/utils/model/bedrock.ts +265 -0
  634. package/utils/model/check1mAccess.ts +72 -0
  635. package/utils/model/configs.ts +158 -0
  636. package/utils/model/contextWindowUpgradeCheck.ts +47 -0
  637. package/utils/model/deprecation.ts +101 -0
  638. package/utils/model/model.ts +654 -0
  639. package/utils/model/modelAllowlist.ts +170 -0
  640. package/utils/model/modelCapabilities.ts +118 -0
  641. package/utils/model/modelOptions.ts +589 -0
  642. package/utils/model/modelStrings.ts +170 -0
  643. package/utils/model/modelSupportOverrides.ts +50 -0
  644. package/utils/model/providers.ts +42 -0
  645. package/utils/model/validateModel.ts +159 -0
  646. package/utils/modelCost.ts +231 -0
  647. package/utils/modifiers.ts +36 -0
  648. package/utils/mtls.ts +179 -0
  649. package/utils/nativeInstaller/download.ts +523 -0
  650. package/utils/nativeInstaller/index.ts +18 -0
  651. package/utils/nativeInstaller/installer.ts +1708 -0
  652. package/utils/nativeInstaller/packageManagers.ts +336 -0
  653. package/utils/nativeInstaller/pidLock.ts +433 -0
  654. package/utils/notebook.ts +224 -0
  655. package/utils/objectGroupBy.ts +18 -0
  656. package/utils/pasteStore.ts +104 -0
  657. package/utils/path.ts +155 -0
  658. package/utils/pdf.ts +300 -0
  659. package/utils/pdfUtils.ts +70 -0
  660. package/utils/peerAddress.ts +21 -0
  661. package/utils/permissions/PermissionMode.ts +141 -0
  662. package/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
  663. package/utils/permissions/PermissionResult.ts +35 -0
  664. package/utils/permissions/PermissionRule.ts +40 -0
  665. package/utils/permissions/PermissionUpdate.ts +389 -0
  666. package/utils/permissions/PermissionUpdateSchema.ts +78 -0
  667. package/utils/permissions/autoModeState.ts +39 -0
  668. package/utils/permissions/bashClassifier.ts +61 -0
  669. package/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
  670. package/utils/permissions/classifierDecision.ts +98 -0
  671. package/utils/permissions/classifierShared.ts +39 -0
  672. package/utils/permissions/dangerousPatterns.ts +80 -0
  673. package/utils/permissions/denialTracking.ts +45 -0
  674. package/utils/permissions/filesystem.ts +1777 -0
  675. package/utils/permissions/getNextPermissionMode.ts +101 -0
  676. package/utils/permissions/pathValidation.ts +485 -0
  677. package/utils/permissions/permissionExplainer.ts +250 -0
  678. package/utils/permissions/permissionRuleParser.ts +198 -0
  679. package/utils/permissions/permissionSetup.ts +1532 -0
  680. package/utils/permissions/permissions.ts +1486 -0
  681. package/utils/permissions/permissionsLoader.ts +296 -0
  682. package/utils/permissions/shadowedRuleDetection.ts +234 -0
  683. package/utils/permissions/shellRuleMatching.ts +228 -0
  684. package/utils/permissions/yoloClassifier.ts +1495 -0
  685. package/utils/planModeV2.ts +95 -0
  686. package/utils/plans.ts +397 -0
  687. package/utils/platform.ts +150 -0
  688. package/utils/plugins/addDirPluginSettings.ts +71 -0
  689. package/utils/plugins/cacheUtils.ts +196 -0
  690. package/utils/plugins/dependencyResolver.ts +305 -0
  691. package/utils/plugins/fetchTelemetry.ts +135 -0
  692. package/utils/plugins/gitAvailability.ts +69 -0
  693. package/utils/plugins/headlessPluginInstall.ts +174 -0
  694. package/utils/plugins/hintRecommendation.ts +164 -0
  695. package/utils/plugins/installCounts.ts +292 -0
  696. package/utils/plugins/installedPluginsManager.ts +1268 -0
  697. package/utils/plugins/loadPluginAgents.ts +348 -0
  698. package/utils/plugins/loadPluginCommands.ts +946 -0
  699. package/utils/plugins/loadPluginHooks.ts +287 -0
  700. package/utils/plugins/loadPluginOutputStyles.ts +178 -0
  701. package/utils/plugins/lspPluginIntegration.ts +387 -0
  702. package/utils/plugins/lspRecommendation.ts +374 -0
  703. package/utils/plugins/managedPlugins.ts +27 -0
  704. package/utils/plugins/marketplaceHelpers.ts +592 -0
  705. package/utils/plugins/marketplaceManager.ts +2643 -0
  706. package/utils/plugins/mcpPluginIntegration.ts +634 -0
  707. package/utils/plugins/mcpbHandler.ts +968 -0
  708. package/utils/plugins/officialMarketplace.ts +25 -0
  709. package/utils/plugins/officialMarketplaceGcs.ts +216 -0
  710. package/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
  711. package/utils/plugins/orphanedPluginFilter.ts +114 -0
  712. package/utils/plugins/parseMarketplaceInput.ts +162 -0
  713. package/utils/plugins/performStartupChecks.tsx +70 -0
  714. package/utils/plugins/pluginAutoupdate.ts +284 -0
  715. package/utils/plugins/pluginBlocklist.ts +127 -0
  716. package/utils/plugins/pluginDirectories.ts +178 -0
  717. package/utils/plugins/pluginFlagging.ts +208 -0
  718. package/utils/plugins/pluginIdentifier.ts +123 -0
  719. package/utils/plugins/pluginInstallationHelpers.ts +595 -0
  720. package/utils/plugins/pluginLoader.ts +3302 -0
  721. package/utils/plugins/pluginOptionsStorage.ts +400 -0
  722. package/utils/plugins/pluginPolicy.ts +20 -0
  723. package/utils/plugins/pluginStartupCheck.ts +341 -0
  724. package/utils/plugins/pluginVersioning.ts +157 -0
  725. package/utils/plugins/reconciler.ts +265 -0
  726. package/utils/plugins/refresh.ts +215 -0
  727. package/utils/plugins/schemas.ts +1681 -0
  728. package/utils/plugins/validatePlugin.ts +903 -0
  729. package/utils/plugins/walkPluginMarkdown.ts +69 -0
  730. package/utils/plugins/zipCache.ts +406 -0
  731. package/utils/plugins/zipCacheAdapters.ts +164 -0
  732. package/utils/powershell/dangerousCmdlets.ts +185 -0
  733. package/utils/powershell/parser.ts +1804 -0
  734. package/utils/powershell/staticPrefix.ts +316 -0
  735. package/utils/preflightChecks.tsx +151 -0
  736. package/utils/privacyLevel.ts +55 -0
  737. package/utils/process.ts +68 -0
  738. package/utils/processUserInput/processBashCommand.tsx +140 -0
  739. package/utils/processUserInput/processSlashCommand.tsx +922 -0
  740. package/utils/processUserInput/processTextPrompt.ts +100 -0
  741. package/utils/processUserInput/processUserInput.ts +605 -0
  742. package/utils/profilerBase.ts +46 -0
  743. package/utils/promptCategory.ts +49 -0
  744. package/utils/promptEditor.ts +188 -0
  745. package/utils/promptShellExecution.ts +183 -0
  746. package/utils/proxy.ts +426 -0
  747. package/utils/queryContext.ts +179 -0
  748. package/utils/queryHelpers.ts +552 -0
  749. package/utils/queryProfiler.ts +301 -0
  750. package/utils/queueProcessor.ts +95 -0
  751. package/utils/readEditContext.ts +227 -0
  752. package/utils/readFileInRange.ts +383 -0
  753. package/utils/releaseNotes.ts +360 -0
  754. package/utils/renderOptions.ts +113 -0
  755. package/utils/ripgrep.ts +679 -0
  756. package/utils/sandbox/sandbox-adapter.ts +985 -0
  757. package/utils/sandbox/sandbox-ui-utils.ts +12 -0
  758. package/utils/sanitization.ts +91 -0
  759. package/utils/screenshotClipboard.ts +121 -0
  760. package/utils/sdkEventQueue.ts +134 -0
  761. package/utils/secureStorage/fallbackStorage.ts +70 -0
  762. package/utils/secureStorage/index.ts +17 -0
  763. package/utils/secureStorage/keychainPrefetch.ts +116 -0
  764. package/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
  765. package/utils/secureStorage/macOsKeychainStorage.ts +231 -0
  766. package/utils/secureStorage/plainTextStorage.ts +84 -0
  767. package/utils/semanticBoolean.ts +29 -0
  768. package/utils/semanticNumber.ts +36 -0
  769. package/utils/semver.ts +59 -0
  770. package/utils/sequential.ts +56 -0
  771. package/utils/sessionActivity.ts +133 -0
  772. package/utils/sessionEnvVars.ts +22 -0
  773. package/utils/sessionEnvironment.ts +166 -0
  774. package/utils/sessionFileAccessHooks.ts +250 -0
  775. package/utils/sessionIngressAuth.ts +140 -0
  776. package/utils/sessionRestore.ts +551 -0
  777. package/utils/sessionStart.ts +232 -0
  778. package/utils/sessionState.ts +150 -0
  779. package/utils/sessionStorage.ts +5105 -0
  780. package/utils/sessionStoragePortable.ts +793 -0
  781. package/utils/sessionTitle.ts +129 -0
  782. package/utils/sessionUrl.ts +64 -0
  783. package/utils/set.ts +53 -0
  784. package/utils/settings/allErrors.ts +32 -0
  785. package/utils/settings/applySettingsChange.ts +92 -0
  786. package/utils/settings/changeDetector.ts +488 -0
  787. package/utils/settings/constants.ts +202 -0
  788. package/utils/settings/internalWrites.ts +37 -0
  789. package/utils/settings/managedPath.ts +34 -0
  790. package/utils/settings/mdm/constants.ts +81 -0
  791. package/utils/settings/mdm/rawRead.ts +130 -0
  792. package/utils/settings/mdm/settings.ts +316 -0
  793. package/utils/settings/permissionValidation.ts +262 -0
  794. package/utils/settings/pluginOnlyPolicy.ts +60 -0
  795. package/utils/settings/schemaOutput.ts +8 -0
  796. package/utils/settings/settings.ts +1015 -0
  797. package/utils/settings/settingsCache.ts +80 -0
  798. package/utils/settings/toolValidationConfig.ts +103 -0
  799. package/utils/settings/types.ts +1149 -0
  800. package/utils/settings/validateEditTool.ts +45 -0
  801. package/utils/settings/validation.ts +265 -0
  802. package/utils/settings/validationTips.ts +164 -0
  803. package/utils/shell/bashProvider.ts +255 -0
  804. package/utils/shell/outputLimits.ts +14 -0
  805. package/utils/shell/powershellDetection.ts +107 -0
  806. package/utils/shell/powershellProvider.ts +123 -0
  807. package/utils/shell/prefix.ts +367 -0
  808. package/utils/shell/readOnlyCommandValidation.ts +1893 -0
  809. package/utils/shell/resolveDefaultShell.ts +14 -0
  810. package/utils/shell/shellProvider.ts +33 -0
  811. package/utils/shell/shellToolUtils.ts +22 -0
  812. package/utils/shell/specPrefix.ts +241 -0
  813. package/utils/shellConfig.ts +167 -0
  814. package/utils/sideQuery.ts +222 -0
  815. package/utils/sideQuestion.ts +155 -0
  816. package/utils/signal.ts +43 -0
  817. package/utils/sinks.ts +16 -0
  818. package/utils/skills/skillChangeDetector.ts +311 -0
  819. package/utils/slashCommandParsing.ts +60 -0
  820. package/utils/sleep.ts +84 -0
  821. package/utils/sliceAnsi.ts +91 -0
  822. package/utils/slowOperations.ts +286 -0
  823. package/utils/standaloneAgent.ts +23 -0
  824. package/utils/startupProfiler.ts +194 -0
  825. package/utils/staticRender.tsx +116 -0
  826. package/utils/stats.ts +1061 -0
  827. package/utils/statsCache.ts +434 -0
  828. package/utils/status.tsx +362 -0
  829. package/utils/statusNoticeDefinitions.tsx +198 -0
  830. package/utils/statusNoticeHelpers.ts +20 -0
  831. package/utils/stream.ts +76 -0
  832. package/utils/streamJsonStdoutGuard.ts +123 -0
  833. package/utils/streamlinedTransform.ts +201 -0
  834. package/utils/stringUtils.ts +235 -0
  835. package/utils/subprocessEnv.ts +99 -0
  836. package/utils/suggestions/commandSuggestions.ts +567 -0
  837. package/utils/suggestions/directoryCompletion.ts +263 -0
  838. package/utils/suggestions/shellHistoryCompletion.ts +119 -0
  839. package/utils/suggestions/skillUsageTracking.ts +55 -0
  840. package/utils/suggestions/slackChannelSuggestions.ts +209 -0
  841. package/utils/swarm/It2SetupPrompt.tsx +380 -0
  842. package/utils/swarm/backends/ITermBackend.ts +370 -0
  843. package/utils/swarm/backends/InProcessBackend.ts +339 -0
  844. package/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
  845. package/utils/swarm/backends/TmuxBackend.ts +764 -0
  846. package/utils/swarm/backends/detection.ts +128 -0
  847. package/utils/swarm/backends/it2Setup.ts +245 -0
  848. package/utils/swarm/backends/registry.ts +464 -0
  849. package/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
  850. package/utils/swarm/backends/types.ts +311 -0
  851. package/utils/swarm/constants.ts +33 -0
  852. package/utils/swarm/inProcessRunner.ts +1552 -0
  853. package/utils/swarm/leaderPermissionBridge.ts +54 -0
  854. package/utils/swarm/permissionSync.ts +928 -0
  855. package/utils/swarm/reconnection.ts +119 -0
  856. package/utils/swarm/spawnInProcess.ts +328 -0
  857. package/utils/swarm/spawnUtils.ts +146 -0
  858. package/utils/swarm/teamHelpers.ts +683 -0
  859. package/utils/swarm/teammateInit.ts +129 -0
  860. package/utils/swarm/teammateLayoutManager.ts +107 -0
  861. package/utils/swarm/teammateModel.ts +10 -0
  862. package/utils/swarm/teammatePromptAddendum.ts +18 -0
  863. package/utils/systemDirectories.ts +74 -0
  864. package/utils/systemPrompt.ts +123 -0
  865. package/utils/systemPromptType.ts +14 -0
  866. package/utils/systemTheme.ts +119 -0
  867. package/utils/taggedId.ts +54 -0
  868. package/utils/task/TaskOutput.ts +390 -0
  869. package/utils/task/diskOutput.ts +451 -0
  870. package/utils/task/framework.ts +308 -0
  871. package/utils/task/outputFormatting.ts +38 -0
  872. package/utils/task/sdkProgress.ts +36 -0
  873. package/utils/tasks.ts +862 -0
  874. package/utils/teamDiscovery.ts +81 -0
  875. package/utils/teamMemoryOps.ts +88 -0
  876. package/utils/teammate.ts +292 -0
  877. package/utils/teammateContext.ts +96 -0
  878. package/utils/teammateMailbox.ts +1183 -0
  879. package/utils/telemetry/betaSessionTracing.ts +491 -0
  880. package/utils/telemetry/bigqueryExporter.ts +252 -0
  881. package/utils/telemetry/events.ts +75 -0
  882. package/utils/telemetry/instrumentation.ts +825 -0
  883. package/utils/telemetry/logger.ts +26 -0
  884. package/utils/telemetry/perfettoTracing.ts +1120 -0
  885. package/utils/telemetry/pluginTelemetry.ts +289 -0
  886. package/utils/telemetry/sessionTracing.ts +927 -0
  887. package/utils/telemetry/skillLoadedEvent.ts +39 -0
  888. package/utils/telemetryAttributes.ts +71 -0
  889. package/utils/teleport/api.ts +466 -0
  890. package/utils/teleport/environmentSelection.ts +77 -0
  891. package/utils/teleport/environments.ts +120 -0
  892. package/utils/teleport/gitBundle.ts +292 -0
  893. package/utils/teleport.tsx +1226 -0
  894. package/utils/tempfile.ts +31 -0
  895. package/utils/terminal.ts +131 -0
  896. package/utils/terminalPanel.ts +191 -0
  897. package/utils/textHighlighting.ts +166 -0
  898. package/utils/theme.ts +639 -0
  899. package/utils/thinking.ts +162 -0
  900. package/utils/timeouts.ts +39 -0
  901. package/utils/tmuxSocket.ts +427 -0
  902. package/utils/todo/types.ts +18 -0
  903. package/utils/tokenBudget.ts +73 -0
  904. package/utils/tokens.ts +261 -0
  905. package/utils/toolErrors.ts +132 -0
  906. package/utils/toolPool.ts +79 -0
  907. package/utils/toolResultStorage.ts +1040 -0
  908. package/utils/toolSchemaCache.ts +26 -0
  909. package/utils/toolSearch.ts +756 -0
  910. package/utils/transcriptSearch.ts +202 -0
  911. package/utils/treeify.ts +170 -0
  912. package/utils/truncate.ts +179 -0
  913. package/utils/ultraplan/ccrSession.ts +349 -0
  914. package/utils/ultraplan/keyword.ts +127 -0
  915. package/utils/ultraplan/prompt.txt +1 -0
  916. package/utils/unaryLogging.ts +39 -0
  917. package/utils/undercover.ts +89 -0
  918. package/utils/user.ts +194 -0
  919. package/utils/userAgent.ts +10 -0
  920. package/utils/userPromptKeywords.ts +27 -0
  921. package/utils/uuid.ts +27 -0
  922. package/utils/warningHandler.ts +121 -0
  923. package/utils/which.ts +82 -0
  924. package/utils/windowsPaths.ts +173 -0
  925. package/utils/withResolvers.ts +13 -0
  926. package/utils/words.ts +800 -0
  927. package/utils/workloadContext.ts +57 -0
  928. package/utils/worktree.ts +1519 -0
  929. package/utils/worktreeModeEnabled.ts +11 -0
  930. package/utils/xdg.ts +65 -0
  931. package/utils/xmem.ts +6 -0
  932. package/utils/xml.ts +16 -0
  933. package/utils/yaml.ts +15 -0
  934. package/utils/zodToJsonSchema.ts +23 -0
package/package.json ADDED
@@ -0,0 +1,120 @@
1
+ {
2
+ "name": "@xortex/xcode",
3
+ "version": "3.0.0",
4
+ "description": "XCode - AI-powered coding assistant with XMem long-term memory. Supports Claude, Gemini, Kimi, DeepSeek via OpenRouter.",
5
+ "main": "main.tsx",
6
+ "bin": {
7
+ "xcode": "./bin/xcode"
8
+ },
9
+ "scripts": {
10
+ "start": "bun run ./entrypoints/cli.tsx || npx tsx ./entrypoints/cli.tsx",
11
+ "install-global": "npm install -g ."
12
+ },
13
+ "files": [
14
+ "bin/",
15
+ "entrypoints/",
16
+ "main.tsx",
17
+ "src/",
18
+ "constants/",
19
+ "utils/",
20
+ "services/",
21
+ "tools/",
22
+ "README.md",
23
+ "LICENSE"
24
+ ],
25
+ "keywords": [
26
+ "ai",
27
+ "coding",
28
+ "assistant",
29
+ "claude",
30
+ "gemini",
31
+ "kimi",
32
+ "deepseek",
33
+ "openrouter",
34
+ "memory",
35
+ "xmem",
36
+ "cli",
37
+ "terminal"
38
+ ],
39
+ "author": "XortexAI",
40
+ "license": "MIT",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "https://github.com/XortexAI/XCode.git"
44
+ },
45
+ "bugs": {
46
+ "url": "https://github.com/XortexAI/XCode/issues"
47
+ },
48
+ "homepage": "https://github.com/XortexAI/XCode#readme",
49
+ "dependencies": {
50
+ "@anthropic-ai/sandbox-runtime": "^0.0.46",
51
+ "@anthropic-ai/sdk": "^0.81.0",
52
+ "@commander-js/extra-typings": "^14.0.0",
53
+ "@google/generative-ai": "^0.24.1",
54
+ "@growthbook/growthbook": "^1.6.5",
55
+ "@hono/node-server": "^1.19.12",
56
+ "@modelcontextprotocol/sdk": "^1.29.0",
57
+ "@opentelemetry/resources": "^2.6.1",
58
+ "@opentelemetry/sdk-logs": "^0.214.0",
59
+ "ansi-escapes": "^7.3.0",
60
+ "bidi-js": "^1.0.3",
61
+ "chalk": "^5.6.2",
62
+ "chalk-template": "^1.1.2",
63
+ "chokidar": "^5.0.0",
64
+ "cli-boxes": "^4.0.1",
65
+ "color-diff-napi": "^0.0.1",
66
+ "date-fns": "^4.1.0",
67
+ "diff": "^8.0.4",
68
+ "dotenv": "^17.3.1",
69
+ "draftlog": "^1.0.13",
70
+ "emoji-regex": "^10.6.0",
71
+ "env-paths": "^4.0.0",
72
+ "execa": "^9.6.1",
73
+ "express": "^5.2.1",
74
+ "fuse.js": "^7.1.0",
75
+ "get-east-asian-width": "^1.5.0",
76
+ "glob": "^13.0.6",
77
+ "hono": "^4.12.9",
78
+ "https-proxy-agent": "^9.0.0",
79
+ "ignore": "^7.0.5",
80
+ "ink": "^6.8.0",
81
+ "is-interactive": "^2.0.0",
82
+ "is-unicode-supported": "^2.1.0",
83
+ "jsonc-parser": "^3.3.1",
84
+ "lodash-es": "^4.17.23",
85
+ "log-update": "^7.2.0",
86
+ "lru-cache": "^11.2.7",
87
+ "marked": "^17.0.5",
88
+ "node-fetch": "^3.3.2",
89
+ "open": "^11.0.0",
90
+ "open-editor": "^6.0.0",
91
+ "p-map": "^7.0.4",
92
+ "picomatch": "^4.0.4",
93
+ "qrcode": "^1.5.4",
94
+ "react": "^19.2.4",
95
+ "readline-sync": "^1.4.10",
96
+ "redaxios": "^0.5.1",
97
+ "semver": "^7.7.4",
98
+ "slice-ansi": "^8.0.0",
99
+ "string-width": "^8.2.0",
100
+ "strip-ansi": "^7.2.0",
101
+ "term-size": "^3.0.2",
102
+ "terminal-link": "^5.0.0",
103
+ "terminal-size": "^4.0.1",
104
+ "tree-kill": "^1.2.2",
105
+ "usehooks-ts": "^3.1.1",
106
+ "uuid": "^13.0.0",
107
+ "widest-line": "^6.0.0",
108
+ "ws": "^8.20.0",
109
+ "xmem-ai": "^1.0.0",
110
+ "xss": "^1.0.15",
111
+ "yaml": "^2.8.3",
112
+ "yaml-ast-parser": "^0.0.43",
113
+ "zod": "^4.3.6"
114
+ },
115
+ "devDependencies": {
116
+ "@types/lodash-es": "^4.17.12",
117
+ "@types/node": "^25.5.0",
118
+ "@types/react": "^19.2.14"
119
+ }
120
+ }
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Periodic background summarization for coordinator mode sub-agents.
3
+ *
4
+ * Forks the sub-agent's conversation every ~30s using runForkedAgent()
5
+ * to generate a 1-2 sentence progress summary. The summary is stored
6
+ * on AgentProgress for UI display.
7
+ *
8
+ * Cache sharing: uses the same CacheSafeParams as the parent agent
9
+ * to share the prompt cache. Tools are kept in the request for cache
10
+ * key matching but denied via canUseTool callback.
11
+ */
12
+
13
+ import type { TaskContext } from '../../Task.js'
14
+ import { updateAgentSummary } from '../../tasks/LocalAgentTask/LocalAgentTask.js'
15
+ import { filterIncompleteToolCalls } from '../../tools/AgentTool/runAgent.js'
16
+ import type { AgentId } from '../../types/ids.js'
17
+ import { logForDebugging } from '../../utils/debug.js'
18
+ import {
19
+ type CacheSafeParams,
20
+ runForkedAgent,
21
+ } from '../../utils/forkedAgent.js'
22
+ import { logError } from '../../utils/log.js'
23
+ import { createUserMessage } from '../../utils/messages.js'
24
+ import { getAgentTranscript } from '../../utils/sessionStorage.js'
25
+
26
+ const SUMMARY_INTERVAL_MS = 30_000
27
+
28
+ function buildSummaryPrompt(previousSummary: string | null): string {
29
+ const prevLine = previousSummary
30
+ ? `\nPrevious: "${previousSummary}" — say something NEW.\n`
31
+ : ''
32
+
33
+ return `Describe your most recent action in 3-5 words using present tense (-ing). Name the file or function, not the branch. Do not use tools.
34
+ ${prevLine}
35
+ Good: "Reading runAgent.ts"
36
+ Good: "Fixing null check in validate.ts"
37
+ Good: "Running auth module tests"
38
+ Good: "Adding retry logic to fetchUser"
39
+
40
+ Bad (past tense): "Analyzed the branch diff"
41
+ Bad (too vague): "Investigating the issue"
42
+ Bad (too long): "Reviewing full branch diff and AgentTool.tsx integration"
43
+ Bad (branch name): "Analyzed adam/background-summary branch diff"`
44
+ }
45
+
46
+ export function startAgentSummarization(
47
+ taskId: string,
48
+ agentId: AgentId,
49
+ cacheSafeParams: CacheSafeParams,
50
+ setAppState: TaskContext['setAppState'],
51
+ ): { stop: () => void } {
52
+ // Drop forkContextMessages from the closure — runSummary rebuilds it each
53
+ // tick from getAgentTranscript(). Without this, the original fork messages
54
+ // (passed from AgentTool.tsx) are pinned for the lifetime of the timer.
55
+ const { forkContextMessages: _drop, ...baseParams } = cacheSafeParams
56
+ let summaryAbortController: AbortController | null = null
57
+ let timeoutId: ReturnType<typeof setTimeout> | null = null
58
+ let stopped = false
59
+ let previousSummary: string | null = null
60
+
61
+ async function runSummary(): Promise<void> {
62
+ if (stopped) return
63
+
64
+ logForDebugging(`[AgentSummary] Timer fired for agent ${agentId}`)
65
+
66
+ try {
67
+ // Read current messages from transcript
68
+ const transcript = await getAgentTranscript(agentId)
69
+ if (!transcript || transcript.messages.length < 3) {
70
+ // Not enough context yet — finally block will schedule next attempt
71
+ logForDebugging(
72
+ `[AgentSummary] Skipping summary for ${taskId}: not enough messages (${transcript?.messages.length ?? 0})`,
73
+ )
74
+ return
75
+ }
76
+
77
+ // Filter to clean message state
78
+ const cleanMessages = filterIncompleteToolCalls(transcript.messages)
79
+
80
+ // Build fork params with current messages
81
+ const forkParams: CacheSafeParams = {
82
+ ...baseParams,
83
+ forkContextMessages: cleanMessages,
84
+ }
85
+
86
+ logForDebugging(
87
+ `[AgentSummary] Forking for summary, ${cleanMessages.length} messages in context`,
88
+ )
89
+
90
+ // Create abort controller for this summary
91
+ summaryAbortController = new AbortController()
92
+
93
+ // Deny tools via callback, NOT by passing tools:[] - that busts cache
94
+ const canUseTool = async () => ({
95
+ behavior: 'deny' as const,
96
+ message: 'No tools needed for summary',
97
+ decisionReason: { type: 'other' as const, reason: 'summary only' },
98
+ })
99
+
100
+ // DO NOT set maxOutputTokens here. The fork piggybacks on the main
101
+ // thread's prompt cache by sending identical cache-key params (system,
102
+ // tools, model, messages prefix, thinking config). Setting maxOutputTokens
103
+ // would clamp budget_tokens, creating a thinking config mismatch that
104
+ // invalidates the cache.
105
+ //
106
+ // ContentReplacementState is cloned by default in createSubagentContext
107
+ // from forkParams.toolUseContext (the subagent's LIVE state captured at
108
+ // onCacheSafeParams time). No explicit override needed.
109
+ const result = await runForkedAgent({
110
+ promptMessages: [
111
+ createUserMessage({ content: buildSummaryPrompt(previousSummary) }),
112
+ ],
113
+ cacheSafeParams: forkParams,
114
+ canUseTool,
115
+ querySource: 'agent_summary',
116
+ forkLabel: 'agent_summary',
117
+ overrides: { abortController: summaryAbortController },
118
+ skipTranscript: true,
119
+ })
120
+
121
+ if (stopped) return
122
+
123
+ // Extract summary text from result
124
+ for (const msg of result.messages) {
125
+ if (msg.type !== 'assistant') continue
126
+ // Skip API error messages
127
+ if (msg.isApiErrorMessage) {
128
+ logForDebugging(
129
+ `[AgentSummary] Skipping API error message for ${taskId}`,
130
+ )
131
+ continue
132
+ }
133
+ const textBlock = msg.message.content.find(b => b.type === 'text')
134
+ if (textBlock?.type === 'text' && textBlock.text.trim()) {
135
+ const summaryText = textBlock.text.trim()
136
+ logForDebugging(
137
+ `[AgentSummary] Summary result for ${taskId}: ${summaryText}`,
138
+ )
139
+ previousSummary = summaryText
140
+ updateAgentSummary(taskId, summaryText, setAppState)
141
+ break
142
+ }
143
+ }
144
+ } catch (e) {
145
+ if (!stopped && e instanceof Error) {
146
+ logError(e)
147
+ }
148
+ } finally {
149
+ summaryAbortController = null
150
+ // Reset timer on completion (not initiation) to prevent overlapping summaries
151
+ if (!stopped) {
152
+ scheduleNext()
153
+ }
154
+ }
155
+ }
156
+
157
+ function scheduleNext(): void {
158
+ if (stopped) return
159
+ timeoutId = setTimeout(runSummary, SUMMARY_INTERVAL_MS)
160
+ }
161
+
162
+ function stop(): void {
163
+ logForDebugging(`[AgentSummary] Stopping summarization for ${taskId}`)
164
+ stopped = true
165
+ if (timeoutId) {
166
+ clearTimeout(timeoutId)
167
+ timeoutId = null
168
+ }
169
+ if (summaryAbortController) {
170
+ summaryAbortController.abort()
171
+ summaryAbortController = null
172
+ }
173
+ }
174
+
175
+ // Start the first timer
176
+ scheduleNext()
177
+
178
+ return { stop }
179
+ }
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Magic Docs automatically maintains markdown documentation files marked with special headers.
3
+ * When a file with "# MAGIC DOC: [title]" is read, it runs periodically in the background
4
+ * using a forked subagent to update the document with new learnings from the conversation.
5
+ *
6
+ * See docs/magic-docs.md for more information.
7
+ */
8
+
9
+ import type { Tool, ToolUseContext } from '../../Tool.js'
10
+ import type { BuiltInAgentDefinition } from '../../tools/AgentTool/loadAgentsDir.js'
11
+ import { runAgent } from '../../tools/AgentTool/runAgent.js'
12
+ import { FILE_EDIT_TOOL_NAME } from '../../tools/FileEditTool/constants.js'
13
+ import {
14
+ FileReadTool,
15
+ type Output as FileReadToolOutput,
16
+ registerFileReadListener,
17
+ } from '../../tools/FileReadTool/FileReadTool.js'
18
+ import { isFsInaccessible } from '../../utils/errors.js'
19
+ import { cloneFileStateCache } from '../../utils/fileStateCache.js'
20
+ import {
21
+ type REPLHookContext,
22
+ registerPostSamplingHook,
23
+ } from '../../utils/hooks/postSamplingHooks.js'
24
+ import {
25
+ createUserMessage,
26
+ hasToolCallsInLastAssistantTurn,
27
+ } from '../../utils/messages.js'
28
+ import { sequential } from '../../utils/sequential.js'
29
+ import { buildMagicDocsUpdatePrompt } from './prompts.js'
30
+
31
+ // Magic Doc header pattern: # MAGIC DOC: [title]
32
+ // Matches at the start of the file (first line)
33
+ const MAGIC_DOC_HEADER_PATTERN = /^#\s*MAGIC\s+DOC:\s*(.+)$/im
34
+ // Pattern to match italics on the line immediately after the header
35
+ const ITALICS_PATTERN = /^[_*](.+?)[_*]\s*$/m
36
+
37
+ // Track magic docs
38
+ type MagicDocInfo = {
39
+ path: string
40
+ }
41
+
42
+ const trackedMagicDocs = new Map<string, MagicDocInfo>()
43
+
44
+ export function clearTrackedMagicDocs(): void {
45
+ trackedMagicDocs.clear()
46
+ }
47
+
48
+ /**
49
+ * Detect if a file content contains a Magic Doc header
50
+ * Returns an object with title and optional instructions, or null if not a magic doc
51
+ */
52
+ export function detectMagicDocHeader(
53
+ content: string,
54
+ ): { title: string; instructions?: string } | null {
55
+ const match = content.match(MAGIC_DOC_HEADER_PATTERN)
56
+ if (!match || !match[1]) {
57
+ return null
58
+ }
59
+
60
+ const title = match[1].trim()
61
+
62
+ // Look for italics on the next line after the header (allow one optional blank line)
63
+ const headerEndIndex = match.index! + match[0].length
64
+ const afterHeader = content.slice(headerEndIndex)
65
+ // Match: newline, optional blank line, then content line
66
+ const nextLineMatch = afterHeader.match(/^\s*\n(?:\s*\n)?(.+?)(?:\n|$)/)
67
+
68
+ if (nextLineMatch && nextLineMatch[1]) {
69
+ const nextLine = nextLineMatch[1]
70
+ const italicsMatch = nextLine.match(ITALICS_PATTERN)
71
+ if (italicsMatch && italicsMatch[1]) {
72
+ const instructions = italicsMatch[1].trim()
73
+ return {
74
+ title,
75
+ instructions,
76
+ }
77
+ }
78
+ }
79
+
80
+ return { title }
81
+ }
82
+
83
+ /**
84
+ * Register a file as a Magic Doc when it's read
85
+ * Only registers once per file path - the hook always reads latest content
86
+ */
87
+ export function registerMagicDoc(filePath: string): void {
88
+ // Only register if not already tracked
89
+ if (!trackedMagicDocs.has(filePath)) {
90
+ trackedMagicDocs.set(filePath, {
91
+ path: filePath,
92
+ })
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Create Magic Docs agent definition
98
+ */
99
+ function getMagicDocsAgent(): BuiltInAgentDefinition {
100
+ return {
101
+ agentType: 'magic-docs',
102
+ whenToUse: 'Update Magic Docs',
103
+ tools: [FILE_EDIT_TOOL_NAME], // Only allow Edit
104
+ model: 'sonnet',
105
+ source: 'built-in',
106
+ baseDir: 'built-in',
107
+ getSystemPrompt: () => '', // Will use override systemPrompt
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Update a single Magic Doc
113
+ */
114
+ async function updateMagicDoc(
115
+ docInfo: MagicDocInfo,
116
+ context: REPLHookContext,
117
+ ): Promise<void> {
118
+ const { messages, systemPrompt, userContext, systemContext, toolUseContext } =
119
+ context
120
+
121
+ // Clone the FileStateCache to isolate Magic Docs operations. Delete this
122
+ // doc's entry so FileReadTool's dedup doesn't return a file_unchanged
123
+ // stub — we need the actual content to re-detect the header.
124
+ const clonedReadFileState = cloneFileStateCache(toolUseContext.readFileState)
125
+ clonedReadFileState.delete(docInfo.path)
126
+ const clonedToolUseContext: ToolUseContext = {
127
+ ...toolUseContext,
128
+ readFileState: clonedReadFileState,
129
+ }
130
+
131
+ // Read the document; if deleted or unreadable, remove from tracking
132
+ let currentDoc = ''
133
+ try {
134
+ const result = await FileReadTool.call(
135
+ { file_path: docInfo.path },
136
+ clonedToolUseContext,
137
+ )
138
+ const output = result.data as FileReadToolOutput
139
+ if (output.type === 'text') {
140
+ currentDoc = output.file.content
141
+ }
142
+ } catch (e: unknown) {
143
+ // FileReadTool wraps ENOENT in a plain Error("File does not exist...") with
144
+ // no .code, so check the message in addition to isFsInaccessible (EACCES/EPERM).
145
+ if (
146
+ isFsInaccessible(e) ||
147
+ (e instanceof Error && e.message.startsWith('File does not exist'))
148
+ ) {
149
+ trackedMagicDocs.delete(docInfo.path)
150
+ return
151
+ }
152
+ throw e
153
+ }
154
+
155
+ // Re-detect title and instructions from latest file content
156
+ const detected = detectMagicDocHeader(currentDoc)
157
+ if (!detected) {
158
+ // File no longer has magic doc header, remove from tracking
159
+ trackedMagicDocs.delete(docInfo.path)
160
+ return
161
+ }
162
+
163
+ // Build update prompt with latest title and instructions
164
+ const userPrompt = await buildMagicDocsUpdatePrompt(
165
+ currentDoc,
166
+ docInfo.path,
167
+ detected.title,
168
+ detected.instructions,
169
+ )
170
+
171
+ // Create a custom canUseTool that only allows Edit for magic doc files
172
+ const canUseTool = async (tool: Tool, input: unknown) => {
173
+ if (
174
+ tool.name === FILE_EDIT_TOOL_NAME &&
175
+ typeof input === 'object' &&
176
+ input !== null &&
177
+ 'file_path' in input
178
+ ) {
179
+ const filePath = input.file_path
180
+ if (typeof filePath === 'string' && filePath === docInfo.path) {
181
+ return { behavior: 'allow' as const, updatedInput: input }
182
+ }
183
+ }
184
+ return {
185
+ behavior: 'deny' as const,
186
+ message: `only ${FILE_EDIT_TOOL_NAME} is allowed for ${docInfo.path}`,
187
+ decisionReason: {
188
+ type: 'other' as const,
189
+ reason: `only ${FILE_EDIT_TOOL_NAME} is allowed`,
190
+ },
191
+ }
192
+ }
193
+
194
+ // Run Magic Docs update using runAgent with forked context
195
+ for await (const _message of runAgent({
196
+ agentDefinition: getMagicDocsAgent(),
197
+ promptMessages: [createUserMessage({ content: userPrompt })],
198
+ toolUseContext: clonedToolUseContext,
199
+ canUseTool,
200
+ isAsync: true,
201
+ forkContextMessages: messages,
202
+ querySource: 'magic_docs',
203
+ override: {
204
+ systemPrompt,
205
+ userContext,
206
+ systemContext,
207
+ },
208
+ availableTools: clonedToolUseContext.options.tools,
209
+ })) {
210
+ // Just consume - let it run to completion
211
+ }
212
+ }
213
+
214
+ /**
215
+ * Magic Docs post-sampling hook that updates all tracked Magic Docs
216
+ */
217
+ const updateMagicDocs = sequential(async function (
218
+ context: REPLHookContext,
219
+ ): Promise<void> {
220
+ const { messages, querySource } = context
221
+
222
+ if (querySource !== 'repl_main_thread') {
223
+ return
224
+ }
225
+
226
+ // Only update when conversation is idle (no tool calls in last turn)
227
+ const hasToolCalls = hasToolCallsInLastAssistantTurn(messages)
228
+ if (hasToolCalls) {
229
+ return
230
+ }
231
+
232
+ const docCount = trackedMagicDocs.size
233
+ if (docCount === 0) {
234
+ return
235
+ }
236
+
237
+ for (const docInfo of Array.from(trackedMagicDocs.values())) {
238
+ await updateMagicDoc(docInfo, context)
239
+ }
240
+ })
241
+
242
+ export async function initMagicDocs(): Promise<void> {
243
+ if (process.env.USER_TYPE === 'ant') {
244
+ // Register listener to detect magic docs when files are read
245
+ registerFileReadListener((filePath: string, content: string) => {
246
+ const result = detectMagicDocHeader(content)
247
+ if (result) {
248
+ registerMagicDoc(filePath)
249
+ }
250
+ })
251
+
252
+ registerPostSamplingHook(updateMagicDocs)
253
+ }
254
+ }
@@ -0,0 +1,127 @@
1
+ import { join } from 'path'
2
+ import { getClaudeConfigHomeDir } from '../../utils/envUtils.js'
3
+ import { getFsImplementation } from '../../utils/fsOperations.js'
4
+
5
+ /**
6
+ * Get the Magic Docs update prompt template
7
+ */
8
+ function getUpdatePromptTemplate(): string {
9
+ return `IMPORTANT: This message and these instructions are NOT part of the actual user conversation. Do NOT include any references to "documentation updates", "magic docs", or these update instructions in the document content.
10
+
11
+ Based on the user conversation above (EXCLUDING this documentation update instruction message), update the Magic Doc file to incorporate any NEW learnings, insights, or information that would be valuable to preserve.
12
+
13
+ The file {{docPath}} has already been read for you. Here are its current contents:
14
+ <current_doc_content>
15
+ {{docContents}}
16
+ </current_doc_content>
17
+
18
+ Document title: {{docTitle}}
19
+ {{customInstructions}}
20
+
21
+ Your ONLY task is to use the Edit tool to update the documentation file if there is substantial new information to add, then stop. You can make multiple edits (update multiple sections as needed) - make all Edit tool calls in parallel in a single message. If there's nothing substantial to add, simply respond with a brief explanation and do not call any tools.
22
+
23
+ CRITICAL RULES FOR EDITING:
24
+ - Preserve the Magic Doc header exactly as-is: # MAGIC DOC: {{docTitle}}
25
+ - If there's an italicized line immediately after the header, preserve it exactly as-is
26
+ - Keep the document CURRENT with the latest state of the codebase - this is NOT a changelog or history
27
+ - Update information IN-PLACE to reflect the current state - do NOT append historical notes or track changes over time
28
+ - Remove or replace outdated information rather than adding "Previously..." or "Updated to..." notes
29
+ - Clean up or DELETE sections that are no longer relevant or don't align with the document's purpose
30
+ - Fix obvious errors: typos, grammar mistakes, broken formatting, incorrect information, or confusing statements
31
+ - Keep the document well organized: use clear headings, logical section order, consistent formatting, and proper nesting
32
+
33
+ DOCUMENTATION PHILOSOPHY - READ CAREFULLY:
34
+ - BE TERSE. High signal only. No filler words or unnecessary elaboration.
35
+ - Documentation is for OVERVIEWS, ARCHITECTURE, and ENTRY POINTS - not detailed code walkthroughs
36
+ - Do NOT duplicate information that's already obvious from reading the source code
37
+ - Do NOT document every function, parameter, or line number reference
38
+ - Focus on: WHY things exist, HOW components connect, WHERE to start reading, WHAT patterns are used
39
+ - Skip: detailed implementation steps, exhaustive API docs, play-by-play narratives
40
+
41
+ What TO document:
42
+ - High-level architecture and system design
43
+ - Non-obvious patterns, conventions, or gotchas
44
+ - Key entry points and where to start reading code
45
+ - Important design decisions and their rationale
46
+ - Critical dependencies or integration points
47
+ - References to related files, docs, or code (like a wiki) - help readers navigate to relevant context
48
+
49
+ What NOT to document:
50
+ - Anything obvious from reading the code itself
51
+ - Exhaustive lists of files, functions, or parameters
52
+ - Step-by-step implementation details
53
+ - Low-level code mechanics
54
+ - Information already in CLAUDE.md or other project docs
55
+
56
+ Use the Edit tool with file_path: {{docPath}}
57
+
58
+ REMEMBER: Only update if there is substantial new information. The Magic Doc header (# MAGIC DOC: {{docTitle}}) must remain unchanged.`
59
+ }
60
+
61
+ /**
62
+ * Load custom Magic Docs prompt from file if it exists
63
+ * Custom prompts can be placed at ~/.claude/magic-docs/prompt.md
64
+ * Use {{variableName}} syntax for variable substitution (e.g., {{docContents}}, {{docPath}}, {{docTitle}})
65
+ */
66
+ async function loadMagicDocsPrompt(): Promise<string> {
67
+ const fs = getFsImplementation()
68
+ const promptPath = join(getClaudeConfigHomeDir(), 'magic-docs', 'prompt.md')
69
+
70
+ try {
71
+ return await fs.readFile(promptPath, { encoding: 'utf-8' })
72
+ } catch {
73
+ // Silently fall back to default if custom prompt doesn't exist or fails to load
74
+ return getUpdatePromptTemplate()
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Substitute variables in the prompt template using {{variable}} syntax
80
+ */
81
+ function substituteVariables(
82
+ template: string,
83
+ variables: Record<string, string>,
84
+ ): string {
85
+ // Single-pass replacement avoids two bugs: (1) $ backreference corruption
86
+ // (replacer fn treats $ literally), and (2) double-substitution when user
87
+ // content happens to contain {{varName}} matching a later variable.
88
+ return template.replace(/\{\{(\w+)\}\}/g, (match, key: string) =>
89
+ Object.prototype.hasOwnProperty.call(variables, key)
90
+ ? variables[key]!
91
+ : match,
92
+ )
93
+ }
94
+
95
+ /**
96
+ * Build the Magic Docs update prompt with variable substitution
97
+ */
98
+ export async function buildMagicDocsUpdatePrompt(
99
+ docContents: string,
100
+ docPath: string,
101
+ docTitle: string,
102
+ instructions?: string,
103
+ ): Promise<string> {
104
+ const promptTemplate = await loadMagicDocsPrompt()
105
+
106
+ // Build custom instructions section if provided
107
+ const customInstructions = instructions
108
+ ? `
109
+
110
+ DOCUMENT-SPECIFIC UPDATE INSTRUCTIONS:
111
+ The document author has provided specific instructions for how this file should be updated. Pay extra attention to these instructions and follow them carefully:
112
+
113
+ "${instructions}"
114
+
115
+ These instructions take priority over the general rules below. Make sure your updates align with these specific guidelines.`
116
+ : ''
117
+
118
+ // Substitute variables in the prompt
119
+ const variables = {
120
+ docContents,
121
+ docPath,
122
+ docTitle,
123
+ customInstructions,
124
+ }
125
+
126
+ return substituteVariables(promptTemplate, variables)
127
+ }