@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
@@ -0,0 +1,755 @@
1
+ import { feature } from 'bun:bundle'
2
+ import memoize from 'lodash-es/memoize.js'
3
+ import { basename } from 'path'
4
+ import type { SettingSource } from 'src/utils/settings/constants.js'
5
+ import { z } from 'zod/v4'
6
+ import { isAutoMemoryEnabled } from '../../memdir/paths.js'
7
+ import {
8
+ type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
9
+ logEvent,
10
+ } from '../../services/analytics/index.js'
11
+ import {
12
+ type McpServerConfig,
13
+ McpServerConfigSchema,
14
+ } from '../../services/mcp/types.js'
15
+ import type { ToolUseContext } from '../../Tool.js'
16
+ import { logForDebugging } from '../../utils/debug.js'
17
+ import {
18
+ EFFORT_LEVELS,
19
+ type EffortValue,
20
+ parseEffortValue,
21
+ } from '../../utils/effort.js'
22
+ import { isEnvTruthy } from '../../utils/envUtils.js'
23
+ import { parsePositiveIntFromFrontmatter } from '../../utils/frontmatterParser.js'
24
+ import { lazySchema } from '../../utils/lazySchema.js'
25
+ import { logError } from '../../utils/log.js'
26
+ import {
27
+ loadMarkdownFilesForSubdir,
28
+ parseAgentToolsFromFrontmatter,
29
+ parseSlashCommandToolsFromFrontmatter,
30
+ } from '../../utils/markdownConfigLoader.js'
31
+ import {
32
+ PERMISSION_MODES,
33
+ type PermissionMode,
34
+ } from '../../utils/permissions/PermissionMode.js'
35
+ import {
36
+ clearPluginAgentCache,
37
+ loadPluginAgents,
38
+ } from '../../utils/plugins/loadPluginAgents.js'
39
+ import { HooksSchema, type HooksSettings } from '../../utils/settings/types.js'
40
+ import { jsonStringify } from '../../utils/slowOperations.js'
41
+ import { FILE_EDIT_TOOL_NAME } from '../FileEditTool/constants.js'
42
+ import { FILE_READ_TOOL_NAME } from '../FileReadTool/prompt.js'
43
+ import { FILE_WRITE_TOOL_NAME } from '../FileWriteTool/prompt.js'
44
+ import {
45
+ AGENT_COLORS,
46
+ type AgentColorName,
47
+ setAgentColor,
48
+ } from './agentColorManager.js'
49
+ import { type AgentMemoryScope, loadAgentMemoryPrompt } from './agentMemory.js'
50
+ import {
51
+ checkAgentMemorySnapshot,
52
+ initializeFromSnapshot,
53
+ } from './agentMemorySnapshot.js'
54
+ import { getBuiltInAgents } from './builtInAgents.js'
55
+
56
+ // Type for MCP server specification in agent definitions
57
+ // Can be either a reference to an existing server by name, or an inline definition as { [name]: config }
58
+ export type AgentMcpServerSpec =
59
+ | string // Reference to existing server by name (e.g., "slack")
60
+ | { [name: string]: McpServerConfig } // Inline definition as { name: config }
61
+
62
+ // Zod schema for agent MCP server specs
63
+ const AgentMcpServerSpecSchema = lazySchema(() =>
64
+ z.union([
65
+ z.string(), // Reference by name
66
+ z.record(z.string(), McpServerConfigSchema()), // Inline as { name: config }
67
+ ]),
68
+ )
69
+
70
+ // Zod schemas for JSON agent validation
71
+ // Note: HooksSchema is lazy so the circular chain AppState -> loadAgentsDir -> settings/types
72
+ // is broken at module load time
73
+ const AgentJsonSchema = lazySchema(() =>
74
+ z.object({
75
+ description: z.string().min(1, 'Description cannot be empty'),
76
+ tools: z.array(z.string()).optional(),
77
+ disallowedTools: z.array(z.string()).optional(),
78
+ prompt: z.string().min(1, 'Prompt cannot be empty'),
79
+ model: z
80
+ .string()
81
+ .trim()
82
+ .min(1, 'Model cannot be empty')
83
+ .transform(m => (m.toLowerCase() === 'inherit' ? 'inherit' : m))
84
+ .optional(),
85
+ effort: z.union([z.enum(EFFORT_LEVELS), z.number().int()]).optional(),
86
+ permissionMode: z.enum(PERMISSION_MODES).optional(),
87
+ mcpServers: z.array(AgentMcpServerSpecSchema()).optional(),
88
+ hooks: HooksSchema().optional(),
89
+ maxTurns: z.number().int().positive().optional(),
90
+ skills: z.array(z.string()).optional(),
91
+ initialPrompt: z.string().optional(),
92
+ memory: z.enum(['user', 'project', 'local']).optional(),
93
+ background: z.boolean().optional(),
94
+ isolation: (process.env.USER_TYPE === 'ant'
95
+ ? z.enum(['worktree', 'remote'])
96
+ : z.enum(['worktree'])
97
+ ).optional(),
98
+ }),
99
+ )
100
+
101
+ const AgentsJsonSchema = lazySchema(() =>
102
+ z.record(z.string(), AgentJsonSchema()),
103
+ )
104
+
105
+ // Base type with common fields for all agents
106
+ export type BaseAgentDefinition = {
107
+ agentType: string
108
+ whenToUse: string
109
+ tools?: string[]
110
+ disallowedTools?: string[]
111
+ skills?: string[] // Skill names to preload (parsed from comma-separated frontmatter)
112
+ mcpServers?: AgentMcpServerSpec[] // MCP servers specific to this agent
113
+ hooks?: HooksSettings // Session-scoped hooks registered when agent starts
114
+ color?: AgentColorName
115
+ model?: string
116
+ effort?: EffortValue
117
+ permissionMode?: PermissionMode
118
+ maxTurns?: number // Maximum number of agentic turns before stopping
119
+ filename?: string // Original filename without .md extension (for user/project/managed agents)
120
+ baseDir?: string
121
+ criticalSystemReminder_EXPERIMENTAL?: string // Short message re-injected at every user turn
122
+ requiredMcpServers?: string[] // MCP server name patterns that must be configured for agent to be available
123
+ background?: boolean // Always run as background task when spawned
124
+ initialPrompt?: string // Prepended to the first user turn (slash commands work)
125
+ memory?: AgentMemoryScope // Persistent memory scope
126
+ isolation?: 'worktree' | 'remote' // Run in an isolated git worktree, or remotely in CCR (ant-only)
127
+ pendingSnapshotUpdate?: { snapshotTimestamp: string }
128
+ /** Omit CLAUDE.md hierarchy from the agent's userContext. Read-only agents
129
+ * (Explore, Plan) don't need commit/PR/lint guidelines — the main agent has
130
+ * full CLAUDE.md and interprets their output. Saves ~5-15 Gtok/week across
131
+ * 34M+ Explore spawns. Kill-switch: tengu_slim_subagent_claudemd. */
132
+ omitClaudeMd?: boolean
133
+ }
134
+
135
+ // Built-in agents - dynamic prompts only, no static systemPrompt field
136
+ export type BuiltInAgentDefinition = BaseAgentDefinition & {
137
+ source: 'built-in'
138
+ baseDir: 'built-in'
139
+ callback?: () => void
140
+ getSystemPrompt: (params: {
141
+ toolUseContext: Pick<ToolUseContext, 'options'>
142
+ }) => string
143
+ }
144
+
145
+ // Custom agents from user/project/policy settings - prompt stored via closure
146
+ export type CustomAgentDefinition = BaseAgentDefinition & {
147
+ getSystemPrompt: () => string
148
+ source: SettingSource
149
+ filename?: string
150
+ baseDir?: string
151
+ }
152
+
153
+ // Plugin agents - similar to custom but with plugin metadata, prompt stored via closure
154
+ export type PluginAgentDefinition = BaseAgentDefinition & {
155
+ getSystemPrompt: () => string
156
+ source: 'plugin'
157
+ filename?: string
158
+ plugin: string
159
+ }
160
+
161
+ // Union type for all agent types
162
+ export type AgentDefinition =
163
+ | BuiltInAgentDefinition
164
+ | CustomAgentDefinition
165
+ | PluginAgentDefinition
166
+
167
+ // Type guards for runtime type checking
168
+ export function isBuiltInAgent(
169
+ agent: AgentDefinition,
170
+ ): agent is BuiltInAgentDefinition {
171
+ return agent.source === 'built-in'
172
+ }
173
+
174
+ export function isCustomAgent(
175
+ agent: AgentDefinition,
176
+ ): agent is CustomAgentDefinition {
177
+ return agent.source !== 'built-in' && agent.source !== 'plugin'
178
+ }
179
+
180
+ export function isPluginAgent(
181
+ agent: AgentDefinition,
182
+ ): agent is PluginAgentDefinition {
183
+ return agent.source === 'plugin'
184
+ }
185
+
186
+ export type AgentDefinitionsResult = {
187
+ activeAgents: AgentDefinition[]
188
+ allAgents: AgentDefinition[]
189
+ failedFiles?: Array<{ path: string; error: string }>
190
+ allowedAgentTypes?: string[]
191
+ }
192
+
193
+ export function getActiveAgentsFromList(
194
+ allAgents: AgentDefinition[],
195
+ ): AgentDefinition[] {
196
+ const builtInAgents = allAgents.filter(a => a.source === 'built-in')
197
+ const pluginAgents = allAgents.filter(a => a.source === 'plugin')
198
+ const userAgents = allAgents.filter(a => a.source === 'userSettings')
199
+ const projectAgents = allAgents.filter(a => a.source === 'projectSettings')
200
+ const managedAgents = allAgents.filter(a => a.source === 'policySettings')
201
+ const flagAgents = allAgents.filter(a => a.source === 'flagSettings')
202
+
203
+ const agentGroups = [
204
+ builtInAgents,
205
+ pluginAgents,
206
+ userAgents,
207
+ projectAgents,
208
+ flagAgents,
209
+ managedAgents,
210
+ ]
211
+
212
+ const agentMap = new Map<string, AgentDefinition>()
213
+
214
+ for (const agents of agentGroups) {
215
+ for (const agent of agents) {
216
+ agentMap.set(agent.agentType, agent)
217
+ }
218
+ }
219
+
220
+ return Array.from(agentMap.values())
221
+ }
222
+
223
+ /**
224
+ * Checks if an agent's required MCP servers are available.
225
+ * Returns true if no requirements or all requirements are met.
226
+ * @param agent The agent to check
227
+ * @param availableServers List of available MCP server names (e.g., from mcp.clients)
228
+ */
229
+ export function hasRequiredMcpServers(
230
+ agent: AgentDefinition,
231
+ availableServers: string[],
232
+ ): boolean {
233
+ if (!agent.requiredMcpServers || agent.requiredMcpServers.length === 0) {
234
+ return true
235
+ }
236
+ // Each required pattern must match at least one available server (case-insensitive)
237
+ return agent.requiredMcpServers.every(pattern =>
238
+ availableServers.some(server =>
239
+ server.toLowerCase().includes(pattern.toLowerCase()),
240
+ ),
241
+ )
242
+ }
243
+
244
+ /**
245
+ * Filters agents based on MCP server requirements.
246
+ * Only returns agents whose required MCP servers are available.
247
+ * @param agents List of agents to filter
248
+ * @param availableServers List of available MCP server names
249
+ */
250
+ export function filterAgentsByMcpRequirements(
251
+ agents: AgentDefinition[],
252
+ availableServers: string[],
253
+ ): AgentDefinition[] {
254
+ return agents.filter(agent => hasRequiredMcpServers(agent, availableServers))
255
+ }
256
+
257
+ /**
258
+ * Check for and initialize agent memory from project snapshots.
259
+ * For agents with memory enabled, copies snapshot to local if no local memory exists.
260
+ * For agents with newer snapshots, logs a debug message (user prompt TODO).
261
+ */
262
+ async function initializeAgentMemorySnapshots(
263
+ agents: CustomAgentDefinition[],
264
+ ): Promise<void> {
265
+ await Promise.all(
266
+ agents.map(async agent => {
267
+ if (agent.memory !== 'user') return
268
+ const result = await checkAgentMemorySnapshot(
269
+ agent.agentType,
270
+ agent.memory,
271
+ )
272
+ switch (result.action) {
273
+ case 'initialize':
274
+ logForDebugging(
275
+ `Initializing ${agent.agentType} memory from project snapshot`,
276
+ )
277
+ await initializeFromSnapshot(
278
+ agent.agentType,
279
+ agent.memory,
280
+ result.snapshotTimestamp!,
281
+ )
282
+ break
283
+ case 'prompt-update':
284
+ agent.pendingSnapshotUpdate = {
285
+ snapshotTimestamp: result.snapshotTimestamp!,
286
+ }
287
+ logForDebugging(
288
+ `Newer snapshot available for ${agent.agentType} memory (snapshot: ${result.snapshotTimestamp})`,
289
+ )
290
+ break
291
+ }
292
+ }),
293
+ )
294
+ }
295
+
296
+ export const getAgentDefinitionsWithOverrides = memoize(
297
+ async (cwd: string): Promise<AgentDefinitionsResult> => {
298
+ // Simple mode: skip custom agents, only return built-ins
299
+ if (isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE)) {
300
+ const builtInAgents = getBuiltInAgents()
301
+ return {
302
+ activeAgents: builtInAgents,
303
+ allAgents: builtInAgents,
304
+ }
305
+ }
306
+
307
+ try {
308
+ const markdownFiles = await loadMarkdownFilesForSubdir('agents', cwd)
309
+
310
+ const failedFiles: Array<{ path: string; error: string }> = []
311
+ const customAgents = markdownFiles
312
+ .map(({ filePath, baseDir, frontmatter, content, source }) => {
313
+ const agent = parseAgentFromMarkdown(
314
+ filePath,
315
+ baseDir,
316
+ frontmatter,
317
+ content,
318
+ source,
319
+ )
320
+ if (!agent) {
321
+ // Skip non-agent markdown files silently (e.g., reference docs
322
+ // co-located with agent definitions). Only report errors for files
323
+ // that look like agent attempts (have a 'name' field in frontmatter).
324
+ if (!frontmatter['name']) {
325
+ return null
326
+ }
327
+ const errorMsg = getParseError(frontmatter)
328
+ failedFiles.push({ path: filePath, error: errorMsg })
329
+ logForDebugging(
330
+ `Failed to parse agent from ${filePath}: ${errorMsg}`,
331
+ )
332
+ logEvent('tengu_agent_parse_error', {
333
+ error:
334
+ errorMsg as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
335
+ location:
336
+ source as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
337
+ })
338
+ return null
339
+ }
340
+ return agent
341
+ })
342
+ .filter(agent => agent !== null)
343
+
344
+ // Kick off plugin agent loading concurrently with memory snapshot init —
345
+ // loadPluginAgents is memoized and takes no args, so it's independent.
346
+ // Join both so neither becomes a floating promise if the other throws.
347
+ let pluginAgentsPromise = loadPluginAgents()
348
+ if (feature('AGENT_MEMORY_SNAPSHOT') && isAutoMemoryEnabled()) {
349
+ const [pluginAgents_] = await Promise.all([
350
+ pluginAgentsPromise,
351
+ initializeAgentMemorySnapshots(customAgents),
352
+ ])
353
+ pluginAgentsPromise = Promise.resolve(pluginAgents_)
354
+ }
355
+ const pluginAgents = await pluginAgentsPromise
356
+
357
+ const builtInAgents = getBuiltInAgents()
358
+
359
+ const allAgentsList: AgentDefinition[] = [
360
+ ...builtInAgents,
361
+ ...pluginAgents,
362
+ ...customAgents,
363
+ ]
364
+
365
+ const activeAgents = getActiveAgentsFromList(allAgentsList)
366
+
367
+ // Initialize colors for all active agents
368
+ for (const agent of activeAgents) {
369
+ if (agent.color) {
370
+ setAgentColor(agent.agentType, agent.color)
371
+ }
372
+ }
373
+
374
+ return {
375
+ activeAgents,
376
+ allAgents: allAgentsList,
377
+ failedFiles: failedFiles.length > 0 ? failedFiles : undefined,
378
+ }
379
+ } catch (error) {
380
+ const errorMessage =
381
+ error instanceof Error ? error.message : String(error)
382
+ logForDebugging(`Error loading agent definitions: ${errorMessage}`)
383
+ logError(error)
384
+ // Even on error, return the built-in agents
385
+ const builtInAgents = getBuiltInAgents()
386
+ return {
387
+ activeAgents: builtInAgents,
388
+ allAgents: builtInAgents,
389
+ failedFiles: [{ path: 'unknown', error: errorMessage }],
390
+ }
391
+ }
392
+ },
393
+ )
394
+
395
+ export function clearAgentDefinitionsCache(): void {
396
+ getAgentDefinitionsWithOverrides.cache.clear?.()
397
+ clearPluginAgentCache()
398
+ }
399
+
400
+ /**
401
+ * Helper to determine the specific parsing error for an agent file
402
+ */
403
+ function getParseError(frontmatter: Record<string, unknown>): string {
404
+ const agentType = frontmatter['name']
405
+ const description = frontmatter['description']
406
+
407
+ if (!agentType || typeof agentType !== 'string') {
408
+ return 'Missing required "name" field in frontmatter'
409
+ }
410
+
411
+ if (!description || typeof description !== 'string') {
412
+ return 'Missing required "description" field in frontmatter'
413
+ }
414
+
415
+ return 'Unknown parsing error'
416
+ }
417
+
418
+ /**
419
+ * Parse hooks from frontmatter using the HooksSchema
420
+ * @param frontmatter The frontmatter object containing potential hooks
421
+ * @param agentType The agent type for logging purposes
422
+ * @returns Parsed hooks settings or undefined if invalid/missing
423
+ */
424
+ function parseHooksFromFrontmatter(
425
+ frontmatter: Record<string, unknown>,
426
+ agentType: string,
427
+ ): HooksSettings | undefined {
428
+ if (!frontmatter.hooks) {
429
+ return undefined
430
+ }
431
+
432
+ const result = HooksSchema().safeParse(frontmatter.hooks)
433
+ if (!result.success) {
434
+ logForDebugging(
435
+ `Invalid hooks in agent '${agentType}': ${result.error.message}`,
436
+ )
437
+ return undefined
438
+ }
439
+ return result.data
440
+ }
441
+
442
+ /**
443
+ * Parses agent definition from JSON data
444
+ */
445
+ export function parseAgentFromJson(
446
+ name: string,
447
+ definition: unknown,
448
+ source: SettingSource = 'flagSettings',
449
+ ): CustomAgentDefinition | null {
450
+ try {
451
+ const parsed = AgentJsonSchema().parse(definition)
452
+
453
+ let tools = parseAgentToolsFromFrontmatter(parsed.tools)
454
+
455
+ // If memory is enabled, inject Write/Edit/Read tools for memory access
456
+ if (isAutoMemoryEnabled() && parsed.memory && tools !== undefined) {
457
+ const toolSet = new Set(tools)
458
+ for (const tool of [
459
+ FILE_WRITE_TOOL_NAME,
460
+ FILE_EDIT_TOOL_NAME,
461
+ FILE_READ_TOOL_NAME,
462
+ ]) {
463
+ if (!toolSet.has(tool)) {
464
+ tools = [...tools, tool]
465
+ }
466
+ }
467
+ }
468
+
469
+ const disallowedTools =
470
+ parsed.disallowedTools !== undefined
471
+ ? parseAgentToolsFromFrontmatter(parsed.disallowedTools)
472
+ : undefined
473
+
474
+ const systemPrompt = parsed.prompt
475
+
476
+ const agent: CustomAgentDefinition = {
477
+ agentType: name,
478
+ whenToUse: parsed.description,
479
+ ...(tools !== undefined ? { tools } : {}),
480
+ ...(disallowedTools !== undefined ? { disallowedTools } : {}),
481
+ getSystemPrompt: () => {
482
+ if (isAutoMemoryEnabled() && parsed.memory) {
483
+ return (
484
+ systemPrompt + '\n\n' + loadAgentMemoryPrompt(name, parsed.memory)
485
+ )
486
+ }
487
+ return systemPrompt
488
+ },
489
+ source,
490
+ ...(parsed.model ? { model: parsed.model } : {}),
491
+ ...(parsed.effort !== undefined ? { effort: parsed.effort } : {}),
492
+ ...(parsed.permissionMode
493
+ ? { permissionMode: parsed.permissionMode }
494
+ : {}),
495
+ ...(parsed.mcpServers && parsed.mcpServers.length > 0
496
+ ? { mcpServers: parsed.mcpServers }
497
+ : {}),
498
+ ...(parsed.hooks ? { hooks: parsed.hooks } : {}),
499
+ ...(parsed.maxTurns !== undefined ? { maxTurns: parsed.maxTurns } : {}),
500
+ ...(parsed.skills && parsed.skills.length > 0
501
+ ? { skills: parsed.skills }
502
+ : {}),
503
+ ...(parsed.initialPrompt ? { initialPrompt: parsed.initialPrompt } : {}),
504
+ ...(parsed.background ? { background: parsed.background } : {}),
505
+ ...(parsed.memory ? { memory: parsed.memory } : {}),
506
+ ...(parsed.isolation ? { isolation: parsed.isolation } : {}),
507
+ }
508
+
509
+ return agent
510
+ } catch (error) {
511
+ const errorMessage = error instanceof Error ? error.message : String(error)
512
+ logForDebugging(`Error parsing agent '${name}' from JSON: ${errorMessage}`)
513
+ logError(error)
514
+ return null
515
+ }
516
+ }
517
+
518
+ /**
519
+ * Parses multiple agents from a JSON object
520
+ */
521
+ export function parseAgentsFromJson(
522
+ agentsJson: unknown,
523
+ source: SettingSource = 'flagSettings',
524
+ ): AgentDefinition[] {
525
+ try {
526
+ const parsed = AgentsJsonSchema().parse(agentsJson)
527
+ return Object.entries(parsed)
528
+ .map(([name, def]) => parseAgentFromJson(name, def, source))
529
+ .filter((agent): agent is CustomAgentDefinition => agent !== null)
530
+ } catch (error) {
531
+ const errorMessage = error instanceof Error ? error.message : String(error)
532
+ logForDebugging(`Error parsing agents from JSON: ${errorMessage}`)
533
+ logError(error)
534
+ return []
535
+ }
536
+ }
537
+
538
+ /**
539
+ * Parses agent definition from markdown file data
540
+ */
541
+ export function parseAgentFromMarkdown(
542
+ filePath: string,
543
+ baseDir: string,
544
+ frontmatter: Record<string, unknown>,
545
+ content: string,
546
+ source: SettingSource,
547
+ ): CustomAgentDefinition | null {
548
+ try {
549
+ const agentType = frontmatter['name']
550
+ let whenToUse = frontmatter['description'] as string
551
+
552
+ // Validate required fields — silently skip files without any agent
553
+ // frontmatter (they're likely co-located reference documentation)
554
+ if (!agentType || typeof agentType !== 'string') {
555
+ return null
556
+ }
557
+ if (!whenToUse || typeof whenToUse !== 'string') {
558
+ logForDebugging(
559
+ `Agent file ${filePath} is missing required 'description' in frontmatter`,
560
+ )
561
+ return null
562
+ }
563
+
564
+ // Unescape newlines in whenToUse that were escaped for YAML parsing
565
+ whenToUse = whenToUse.replace(/\\n/g, '\n')
566
+
567
+ const color = frontmatter['color'] as AgentColorName | undefined
568
+ const modelRaw = frontmatter['model']
569
+ let model: string | undefined
570
+ if (typeof modelRaw === 'string' && modelRaw.trim().length > 0) {
571
+ const trimmed = modelRaw.trim()
572
+ model = trimmed.toLowerCase() === 'inherit' ? 'inherit' : trimmed
573
+ }
574
+
575
+ // Parse background flag
576
+ const backgroundRaw = frontmatter['background']
577
+
578
+ if (
579
+ backgroundRaw !== undefined &&
580
+ backgroundRaw !== 'true' &&
581
+ backgroundRaw !== 'false' &&
582
+ backgroundRaw !== true &&
583
+ backgroundRaw !== false
584
+ ) {
585
+ logForDebugging(
586
+ `Agent file ${filePath} has invalid background value '${backgroundRaw}'. Must be 'true', 'false', or omitted.`,
587
+ )
588
+ }
589
+
590
+ const background =
591
+ backgroundRaw === 'true' || backgroundRaw === true ? true : undefined
592
+
593
+ // Parse memory scope
594
+ const VALID_MEMORY_SCOPES: AgentMemoryScope[] = ['user', 'project', 'local']
595
+ const memoryRaw = frontmatter['memory'] as string | undefined
596
+ let memory: AgentMemoryScope | undefined
597
+ if (memoryRaw !== undefined) {
598
+ if (VALID_MEMORY_SCOPES.includes(memoryRaw as AgentMemoryScope)) {
599
+ memory = memoryRaw as AgentMemoryScope
600
+ } else {
601
+ logForDebugging(
602
+ `Agent file ${filePath} has invalid memory value '${memoryRaw}'. Valid options: ${VALID_MEMORY_SCOPES.join(', ')}`,
603
+ )
604
+ }
605
+ }
606
+
607
+ // Parse isolation mode. 'remote' is ant-only; external builds reject it at parse time.
608
+ type IsolationMode = 'worktree' | 'remote'
609
+ const VALID_ISOLATION_MODES: readonly IsolationMode[] =
610
+ process.env.USER_TYPE === 'ant' ? ['worktree', 'remote'] : ['worktree']
611
+ const isolationRaw = frontmatter['isolation'] as string | undefined
612
+ let isolation: IsolationMode | undefined
613
+ if (isolationRaw !== undefined) {
614
+ if (VALID_ISOLATION_MODES.includes(isolationRaw as IsolationMode)) {
615
+ isolation = isolationRaw as IsolationMode
616
+ } else {
617
+ logForDebugging(
618
+ `Agent file ${filePath} has invalid isolation value '${isolationRaw}'. Valid options: ${VALID_ISOLATION_MODES.join(', ')}`,
619
+ )
620
+ }
621
+ }
622
+
623
+ // Parse effort from frontmatter (supports string levels and integers)
624
+ const effortRaw = frontmatter['effort']
625
+ const parsedEffort =
626
+ effortRaw !== undefined ? parseEffortValue(effortRaw) : undefined
627
+
628
+ if (effortRaw !== undefined && parsedEffort === undefined) {
629
+ logForDebugging(
630
+ `Agent file ${filePath} has invalid effort '${effortRaw}'. Valid options: ${EFFORT_LEVELS.join(', ')} or an integer`,
631
+ )
632
+ }
633
+
634
+ // Parse permissionMode from frontmatter
635
+ const permissionModeRaw = frontmatter['permissionMode'] as
636
+ | string
637
+ | undefined
638
+ const isValidPermissionMode =
639
+ permissionModeRaw &&
640
+ (PERMISSION_MODES as readonly string[]).includes(permissionModeRaw)
641
+
642
+ if (permissionModeRaw && !isValidPermissionMode) {
643
+ const errorMsg = `Agent file ${filePath} has invalid permissionMode '${permissionModeRaw}'. Valid options: ${PERMISSION_MODES.join(', ')}`
644
+ logForDebugging(errorMsg)
645
+ }
646
+
647
+ // Parse maxTurns from frontmatter
648
+ const maxTurnsRaw = frontmatter['maxTurns']
649
+ const maxTurns = parsePositiveIntFromFrontmatter(maxTurnsRaw)
650
+ if (maxTurnsRaw !== undefined && maxTurns === undefined) {
651
+ logForDebugging(
652
+ `Agent file ${filePath} has invalid maxTurns '${maxTurnsRaw}'. Must be a positive integer.`,
653
+ )
654
+ }
655
+
656
+ // Extract filename without extension
657
+ const filename = basename(filePath, '.md')
658
+
659
+ // Parse tools from frontmatter
660
+ let tools = parseAgentToolsFromFrontmatter(frontmatter['tools'])
661
+
662
+ // If memory is enabled, inject Write/Edit/Read tools for memory access
663
+ if (isAutoMemoryEnabled() && memory && tools !== undefined) {
664
+ const toolSet = new Set(tools)
665
+ for (const tool of [
666
+ FILE_WRITE_TOOL_NAME,
667
+ FILE_EDIT_TOOL_NAME,
668
+ FILE_READ_TOOL_NAME,
669
+ ]) {
670
+ if (!toolSet.has(tool)) {
671
+ tools = [...tools, tool]
672
+ }
673
+ }
674
+ }
675
+
676
+ // Parse disallowedTools from frontmatter
677
+ const disallowedToolsRaw = frontmatter['disallowedTools']
678
+ const disallowedTools =
679
+ disallowedToolsRaw !== undefined
680
+ ? parseAgentToolsFromFrontmatter(disallowedToolsRaw)
681
+ : undefined
682
+
683
+ // Parse skills from frontmatter
684
+ const skills = parseSlashCommandToolsFromFrontmatter(frontmatter['skills'])
685
+
686
+ const initialPromptRaw = frontmatter['initialPrompt']
687
+ const initialPrompt =
688
+ typeof initialPromptRaw === 'string' && initialPromptRaw.trim()
689
+ ? initialPromptRaw
690
+ : undefined
691
+
692
+ // Parse mcpServers from frontmatter using same Zod validation as JSON agents
693
+ const mcpServersRaw = frontmatter['mcpServers']
694
+ let mcpServers: AgentMcpServerSpec[] | undefined
695
+ if (Array.isArray(mcpServersRaw)) {
696
+ mcpServers = mcpServersRaw
697
+ .map(item => {
698
+ const result = AgentMcpServerSpecSchema().safeParse(item)
699
+ if (result.success) {
700
+ return result.data
701
+ }
702
+ logForDebugging(
703
+ `Agent file ${filePath} has invalid mcpServers item: ${jsonStringify(item)}. Error: ${result.error.message}`,
704
+ )
705
+ return null
706
+ })
707
+ .filter((item): item is AgentMcpServerSpec => item !== null)
708
+ }
709
+
710
+ // Parse hooks from frontmatter
711
+ const hooks = parseHooksFromFrontmatter(frontmatter, agentType)
712
+
713
+ const systemPrompt = content.trim()
714
+ const agentDef: CustomAgentDefinition = {
715
+ baseDir,
716
+ agentType: agentType,
717
+ whenToUse: whenToUse,
718
+ ...(tools !== undefined ? { tools } : {}),
719
+ ...(disallowedTools !== undefined ? { disallowedTools } : {}),
720
+ ...(skills !== undefined ? { skills } : {}),
721
+ ...(initialPrompt !== undefined ? { initialPrompt } : {}),
722
+ ...(mcpServers !== undefined && mcpServers.length > 0
723
+ ? { mcpServers }
724
+ : {}),
725
+ ...(hooks !== undefined ? { hooks } : {}),
726
+ getSystemPrompt: () => {
727
+ if (isAutoMemoryEnabled() && memory) {
728
+ const memoryPrompt = loadAgentMemoryPrompt(agentType, memory)
729
+ return systemPrompt + '\n\n' + memoryPrompt
730
+ }
731
+ return systemPrompt
732
+ },
733
+ source,
734
+ filename,
735
+ ...(color && typeof color === 'string' && AGENT_COLORS.includes(color)
736
+ ? { color }
737
+ : {}),
738
+ ...(model !== undefined ? { model } : {}),
739
+ ...(parsedEffort !== undefined ? { effort: parsedEffort } : {}),
740
+ ...(isValidPermissionMode
741
+ ? { permissionMode: permissionModeRaw as PermissionMode }
742
+ : {}),
743
+ ...(maxTurns !== undefined ? { maxTurns } : {}),
744
+ ...(background ? { background } : {}),
745
+ ...(memory ? { memory } : {}),
746
+ ...(isolation ? { isolation } : {}),
747
+ }
748
+ return agentDef
749
+ } catch (error) {
750
+ const errorMessage = error instanceof Error ? error.message : String(error)
751
+ logForDebugging(`Error parsing agent from ${filePath}: ${errorMessage}`)
752
+ logError(error)
753
+ return null
754
+ }
755
+ }