@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,689 @@
1
+ /**
2
+ * Helper for running forked agent query loops with usage tracking.
3
+ *
4
+ * This utility ensures forked agents:
5
+ * 1. Share identical cache-critical params with the parent to guarantee prompt cache hits
6
+ * 2. Track full usage metrics across the entire query loop
7
+ * 3. Log metrics via the tengu_fork_agent_query event when complete
8
+ * 4. Isolate mutable state to prevent interference with the main agent loop
9
+ */
10
+
11
+ import type { UUID } from 'crypto'
12
+ import { randomUUID } from 'crypto'
13
+ import type { PromptCommand } from '../commands.js'
14
+ import type { QuerySource } from '../constants/querySource.js'
15
+ import type { CanUseToolFn } from '../hooks/useCanUseTool.js'
16
+ import { query } from '../query.js'
17
+ import {
18
+ type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
19
+ logEvent,
20
+ } from '../services/analytics/index.js'
21
+ import { accumulateUsage, updateUsage } from '../services/api/gemini.js'
22
+ import { EMPTY_USAGE, type NonNullableUsage } from '../services/api/logging.js'
23
+ import type { ToolUseContext } from '../Tool.js'
24
+ import type { AgentDefinition } from '../tools/AgentTool/loadAgentsDir.js'
25
+ import type { AgentId } from '../types/ids.js'
26
+ import type { Message } from '../types/message.js'
27
+ import { createChildAbortController } from './abortController.js'
28
+ import { logForDebugging } from './debug.js'
29
+ import { cloneFileStateCache } from './fileStateCache.js'
30
+ import type { REPLHookContext } from './hooks/postSamplingHooks.js'
31
+ import {
32
+ createUserMessage,
33
+ extractTextContent,
34
+ getLastAssistantMessage,
35
+ } from './messages.js'
36
+ import { createDenialTrackingState } from './permissions/denialTracking.js'
37
+ import { parseToolListFromCLI } from './permissions/permissionSetup.js'
38
+ import { recordSidechainTranscript } from './sessionStorage.js'
39
+ import type { SystemPrompt } from './systemPromptType.js'
40
+ import {
41
+ type ContentReplacementState,
42
+ cloneContentReplacementState,
43
+ } from './toolResultStorage.js'
44
+ import { createAgentId } from './uuid.js'
45
+
46
+ /**
47
+ * Parameters that must be identical between the fork and parent API requests
48
+ * to share the parent's prompt cache. The Anthropic API cache key is composed of:
49
+ * system prompt, tools, model, messages (prefix), and thinking config.
50
+ *
51
+ * CacheSafeParams carries the first five. Thinking config is derived from the
52
+ * inherited toolUseContext.options.thinkingConfig — but can be inadvertently
53
+ * changed if the fork sets maxOutputTokens, which clamps budget_tokens in
54
+ * claude.ts (but only for older models that do not use adaptive thinking).
55
+ * See the maxOutputTokens doc on ForkedAgentParams.
56
+ */
57
+ export type CacheSafeParams = {
58
+ /** System prompt - must match parent for cache hits */
59
+ systemPrompt: SystemPrompt
60
+ /** User context - prepended to messages, affects cache */
61
+ userContext: { [k: string]: string }
62
+ /** System context - appended to system prompt, affects cache */
63
+ systemContext: { [k: string]: string }
64
+ /** Tool use context containing tools, model, and other options */
65
+ toolUseContext: ToolUseContext
66
+ /** Parent context messages for prompt cache sharing */
67
+ forkContextMessages: Message[]
68
+ }
69
+
70
+ // Slot written by handleStopHooks after each turn so post-turn forks
71
+ // (promptSuggestion, postTurnSummary, /btw) can share the main loop's
72
+ // prompt cache without each caller threading params through.
73
+ let lastCacheSafeParams: CacheSafeParams | null = null
74
+
75
+ export function saveCacheSafeParams(params: CacheSafeParams | null): void {
76
+ lastCacheSafeParams = params
77
+ }
78
+
79
+ export function getLastCacheSafeParams(): CacheSafeParams | null {
80
+ return lastCacheSafeParams
81
+ }
82
+
83
+ export type ForkedAgentParams = {
84
+ /** Messages to start the forked query loop with */
85
+ promptMessages: Message[]
86
+ /** Cache-safe parameters that must match the parent query */
87
+ cacheSafeParams: CacheSafeParams
88
+ /** Permission check function for the forked agent */
89
+ canUseTool: CanUseToolFn
90
+ /** Source identifier for tracking */
91
+ querySource: QuerySource
92
+ /** Label for analytics (e.g., 'session_memory', 'supervisor') */
93
+ forkLabel: string
94
+ /** Optional overrides for the subagent context (e.g., readFileState from setup phase) */
95
+ overrides?: SubagentContextOverrides
96
+ /**
97
+ * Optional cap on output tokens. CAUTION: setting this changes both max_tokens
98
+ * AND budget_tokens (via clamping in claude.ts). If the fork uses cacheSafeParams
99
+ * to share the parent's prompt cache, a different budget_tokens will invalidate
100
+ * the cache — thinking config is part of the cache key. Only set this when cache
101
+ * sharing is not a goal (e.g., compact summaries).
102
+ */
103
+ maxOutputTokens?: number
104
+ /** Optional cap on number of turns (API round-trips) */
105
+ maxTurns?: number
106
+ /** Optional callback invoked for each message as it arrives (for streaming UI) */
107
+ onMessage?: (message: Message) => void
108
+ /** Skip sidechain transcript recording (e.g., for ephemeral work like speculation) */
109
+ skipTranscript?: boolean
110
+ /** Skip writing new prompt cache entries on the last message. For
111
+ * fire-and-forget forks where no future request will read from this prefix. */
112
+ skipCacheWrite?: boolean
113
+ }
114
+
115
+ export type ForkedAgentResult = {
116
+ /** All messages yielded during the query loop */
117
+ messages: Message[]
118
+ /** Accumulated usage across all API calls in the loop */
119
+ totalUsage: NonNullableUsage
120
+ }
121
+
122
+ /**
123
+ * Creates CacheSafeParams from REPLHookContext.
124
+ * Use this helper when forking from a post-sampling hook context.
125
+ *
126
+ * To override specific fields (e.g., toolUseContext with cloned file state),
127
+ * spread the result and override: `{ ...createCacheSafeParams(context), toolUseContext: clonedContext }`
128
+ *
129
+ * @param context - The REPLHookContext from the post-sampling hook
130
+ */
131
+ export function createCacheSafeParams(
132
+ context: REPLHookContext,
133
+ ): CacheSafeParams {
134
+ return {
135
+ systemPrompt: context.systemPrompt,
136
+ userContext: context.userContext,
137
+ systemContext: context.systemContext,
138
+ toolUseContext: context.toolUseContext,
139
+ forkContextMessages: context.messages,
140
+ }
141
+ }
142
+
143
+ /**
144
+ * Creates a modified getAppState that adds allowed tools to the permission context.
145
+ * This is used by forked skill/command execution to grant tool permissions.
146
+ */
147
+ export function createGetAppStateWithAllowedTools(
148
+ baseGetAppState: ToolUseContext['getAppState'],
149
+ allowedTools: string[],
150
+ ): ToolUseContext['getAppState'] {
151
+ if (allowedTools.length === 0) return baseGetAppState
152
+ return () => {
153
+ const appState = baseGetAppState()
154
+ return {
155
+ ...appState,
156
+ toolPermissionContext: {
157
+ ...appState.toolPermissionContext,
158
+ alwaysAllowRules: {
159
+ ...appState.toolPermissionContext.alwaysAllowRules,
160
+ command: [
161
+ ...new Set([
162
+ ...(appState.toolPermissionContext.alwaysAllowRules.command ||
163
+ []),
164
+ ...allowedTools,
165
+ ]),
166
+ ],
167
+ },
168
+ },
169
+ }
170
+ }
171
+ }
172
+
173
+ /**
174
+ * Result from preparing a forked command context.
175
+ */
176
+ export type PreparedForkedContext = {
177
+ /** Skill content with args replaced */
178
+ skillContent: string
179
+ /** Modified getAppState with allowed tools */
180
+ modifiedGetAppState: ToolUseContext['getAppState']
181
+ /** The general-purpose agent to use */
182
+ baseAgent: AgentDefinition
183
+ /** Initial prompt messages */
184
+ promptMessages: Message[]
185
+ }
186
+
187
+ /**
188
+ * Prepares the context for executing a forked command/skill.
189
+ * This handles the common setup that both SkillTool and slash commands need.
190
+ */
191
+ export async function prepareForkedCommandContext(
192
+ command: PromptCommand,
193
+ args: string,
194
+ context: ToolUseContext,
195
+ ): Promise<PreparedForkedContext> {
196
+ // Get skill content with $ARGUMENTS replaced
197
+ const skillPrompt = await command.getPromptForCommand(args, context)
198
+ const skillContent = skillPrompt
199
+ .map(block => (block.type === 'text' ? block.text : ''))
200
+ .join('\n')
201
+
202
+ // Parse and prepare allowed tools
203
+ const allowedTools = parseToolListFromCLI(command.allowedTools ?? [])
204
+
205
+ // Create modified context with allowed tools
206
+ const modifiedGetAppState = createGetAppStateWithAllowedTools(
207
+ context.getAppState,
208
+ allowedTools,
209
+ )
210
+
211
+ // Use command.agent if specified, otherwise 'general-purpose'
212
+ const agentTypeName = command.agent ?? 'general-purpose'
213
+ const agents = context.options.agentDefinitions.activeAgents
214
+ const baseAgent =
215
+ agents.find(a => a.agentType === agentTypeName) ??
216
+ agents.find(a => a.agentType === 'general-purpose') ??
217
+ agents[0]
218
+
219
+ if (!baseAgent) {
220
+ throw new Error('No agent available for forked execution')
221
+ }
222
+
223
+ // Prepare prompt messages
224
+ const promptMessages = [createUserMessage({ content: skillContent })]
225
+
226
+ return {
227
+ skillContent,
228
+ modifiedGetAppState,
229
+ baseAgent,
230
+ promptMessages,
231
+ }
232
+ }
233
+
234
+ /**
235
+ * Extracts result text from agent messages.
236
+ */
237
+ export function extractResultText(
238
+ agentMessages: Message[],
239
+ defaultText = 'Execution completed',
240
+ ): string {
241
+ const lastAssistantMessage = getLastAssistantMessage(agentMessages)
242
+ if (!lastAssistantMessage) return defaultText
243
+
244
+ const textContent = extractTextContent(
245
+ lastAssistantMessage.message.content,
246
+ '\n',
247
+ )
248
+
249
+ return textContent || defaultText
250
+ }
251
+
252
+ /**
253
+ * Options for creating a subagent context.
254
+ *
255
+ * By default, all mutable state is isolated to prevent interference with the parent.
256
+ * Use these options to:
257
+ * - Override specific fields (e.g., custom options, agentId, messages)
258
+ * - Explicitly opt-in to sharing specific callbacks (for interactive subagents)
259
+ */
260
+ export type SubagentContextOverrides = {
261
+ /** Override the options object (e.g., custom tools, model) */
262
+ options?: ToolUseContext['options']
263
+ /** Override the agentId (for subagents with their own ID) */
264
+ agentId?: AgentId
265
+ /** Override the agentType (for subagents with a specific type) */
266
+ agentType?: string
267
+ /** Override the messages array */
268
+ messages?: Message[]
269
+ /** Override the readFileState (e.g., fresh cache instead of clone) */
270
+ readFileState?: ToolUseContext['readFileState']
271
+ /** Override the abortController */
272
+ abortController?: AbortController
273
+ /** Override the getAppState function */
274
+ getAppState?: ToolUseContext['getAppState']
275
+
276
+ /**
277
+ * Explicit opt-in to share parent's setAppState callback.
278
+ * Use for interactive subagents that need to update shared state.
279
+ * @default false (isolated no-op)
280
+ */
281
+ shareSetAppState?: boolean
282
+ /**
283
+ * Explicit opt-in to share parent's setResponseLength callback.
284
+ * Use for subagents that contribute to parent's response metrics.
285
+ * @default false (isolated no-op)
286
+ */
287
+ shareSetResponseLength?: boolean
288
+ /**
289
+ * Explicit opt-in to share parent's abortController.
290
+ * Use for interactive subagents that should abort with parent.
291
+ * Note: Only applies if abortController override is not provided.
292
+ * @default false (new controller linked to parent)
293
+ */
294
+ shareAbortController?: boolean
295
+ /** Critical system reminder to re-inject at every user turn */
296
+ criticalSystemReminder_EXPERIMENTAL?: string
297
+ /** When true, canUseTool must always be called even when hooks auto-approve.
298
+ * Used by speculation for overlay file path rewriting. */
299
+ requireCanUseTool?: boolean
300
+ /** Override replacement state — used by resumeAgentBackground to thread
301
+ * state reconstructed from the resumed sidechain so the same results
302
+ * are re-replaced (prompt cache stability). */
303
+ contentReplacementState?: ContentReplacementState
304
+ }
305
+
306
+ /**
307
+ * Creates an isolated ToolUseContext for subagents.
308
+ *
309
+ * By default, ALL mutable state is isolated to prevent interference:
310
+ * - readFileState: cloned from parent
311
+ * - abortController: new controller linked to parent (parent abort propagates)
312
+ * - getAppState: wrapped to set shouldAvoidPermissionPrompts
313
+ * - All mutation callbacks (setAppState, etc.): no-op
314
+ * - Fresh collections: nestedMemoryAttachmentTriggers, toolDecisions
315
+ *
316
+ * Callers can:
317
+ * - Override specific fields via the overrides parameter
318
+ * - Explicitly opt-in to sharing specific callbacks (shareSetAppState, etc.)
319
+ *
320
+ * @param parentContext - The parent's ToolUseContext to create subagent context from
321
+ * @param overrides - Optional overrides and sharing options
322
+ *
323
+ * @example
324
+ * // Full isolation (for background agents like session memory)
325
+ * const ctx = createSubagentContext(parentContext)
326
+ *
327
+ * @example
328
+ * // Custom options and agentId (for AgentTool async agents)
329
+ * const ctx = createSubagentContext(parentContext, {
330
+ * options: customOptions,
331
+ * agentId: newAgentId,
332
+ * messages: initialMessages,
333
+ * })
334
+ *
335
+ * @example
336
+ * // Interactive subagent that shares some state
337
+ * const ctx = createSubagentContext(parentContext, {
338
+ * options: customOptions,
339
+ * agentId: newAgentId,
340
+ * shareSetAppState: true,
341
+ * shareSetResponseLength: true,
342
+ * shareAbortController: true,
343
+ * })
344
+ */
345
+ export function createSubagentContext(
346
+ parentContext: ToolUseContext,
347
+ overrides?: SubagentContextOverrides,
348
+ ): ToolUseContext {
349
+ // Determine abortController: explicit override > share parent's > new child
350
+ const abortController =
351
+ overrides?.abortController ??
352
+ (overrides?.shareAbortController
353
+ ? parentContext.abortController
354
+ : createChildAbortController(parentContext.abortController))
355
+
356
+ // Determine getAppState - wrap to set shouldAvoidPermissionPrompts unless sharing abortController
357
+ // (if sharing abortController, it's an interactive agent that CAN show UI)
358
+ const getAppState: ToolUseContext['getAppState'] = overrides?.getAppState
359
+ ? overrides.getAppState
360
+ : overrides?.shareAbortController
361
+ ? parentContext.getAppState
362
+ : () => {
363
+ const state = parentContext.getAppState()
364
+ if (state.toolPermissionContext.shouldAvoidPermissionPrompts) {
365
+ return state
366
+ }
367
+ return {
368
+ ...state,
369
+ toolPermissionContext: {
370
+ ...state.toolPermissionContext,
371
+ shouldAvoidPermissionPrompts: true,
372
+ },
373
+ }
374
+ }
375
+
376
+ return {
377
+ // Mutable state - cloned by default to maintain isolation
378
+ // Clone overrides.readFileState if provided, otherwise clone from parent
379
+ readFileState: cloneFileStateCache(
380
+ overrides?.readFileState ?? parentContext.readFileState,
381
+ ),
382
+ nestedMemoryAttachmentTriggers: new Set<string>(),
383
+ loadedNestedMemoryPaths: new Set<string>(),
384
+ dynamicSkillDirTriggers: new Set<string>(),
385
+ // Per-subagent: tracks skills surfaced by discovery for was_discovered telemetry (SkillTool.ts:116)
386
+ discoveredSkillNames: new Set<string>(),
387
+ toolDecisions: undefined,
388
+ // Budget decisions: override > clone of parent > undefined (feature off).
389
+ //
390
+ // Clone by default (not fresh): cache-sharing forks process parent
391
+ // messages containing parent tool_use_ids. A fresh state would see
392
+ // them as unseen and make divergent replacement decisions → wire
393
+ // prefix differs → cache miss. A clone makes identical decisions →
394
+ // cache hit. For non-forking subagents the parent UUIDs never match
395
+ // — clone is a harmless no-op.
396
+ //
397
+ // Override: AgentTool resume (reconstructed from sidechain records)
398
+ // and inProcessRunner (per-teammate persistent loop state).
399
+ contentReplacementState:
400
+ overrides?.contentReplacementState ??
401
+ (parentContext.contentReplacementState
402
+ ? cloneContentReplacementState(parentContext.contentReplacementState)
403
+ : undefined),
404
+
405
+ // AbortController
406
+ abortController,
407
+
408
+ // AppState access
409
+ getAppState,
410
+ setAppState: overrides?.shareSetAppState
411
+ ? parentContext.setAppState
412
+ : () => {},
413
+ // Task registration/kill must always reach the root store, even when
414
+ // setAppState is a no-op — otherwise async agents' background bash tasks
415
+ // are never registered and never killed (PPID=1 zombie).
416
+ setAppStateForTasks:
417
+ parentContext.setAppStateForTasks ?? parentContext.setAppState,
418
+ // Async subagents whose setAppState is a no-op need local denial tracking
419
+ // so the denial counter actually accumulates across retries.
420
+ localDenialTracking: overrides?.shareSetAppState
421
+ ? parentContext.localDenialTracking
422
+ : createDenialTrackingState(),
423
+
424
+ // Mutation callbacks - no-op by default
425
+ setInProgressToolUseIDs: () => {},
426
+ setResponseLength: overrides?.shareSetResponseLength
427
+ ? parentContext.setResponseLength
428
+ : () => {},
429
+ pushApiMetricsEntry: overrides?.shareSetResponseLength
430
+ ? parentContext.pushApiMetricsEntry
431
+ : undefined,
432
+ updateFileHistoryState: () => {},
433
+ // Attribution is scoped and functional (prev => next) — safe to share even
434
+ // when setAppState is stubbed. Concurrent calls compose via React's state queue.
435
+ updateAttributionState: parentContext.updateAttributionState,
436
+
437
+ // UI callbacks - undefined for subagents (can't control parent UI)
438
+ addNotification: undefined,
439
+ setToolJSX: undefined,
440
+ setStreamMode: undefined,
441
+ setSDKStatus: undefined,
442
+ openMessageSelector: undefined,
443
+
444
+ // Fields that can be overridden or copied from parent
445
+ options: overrides?.options ?? parentContext.options,
446
+ messages: overrides?.messages ?? parentContext.messages,
447
+ // Generate new agentId for subagents (each subagent should have its own ID)
448
+ agentId: overrides?.agentId ?? createAgentId(),
449
+ agentType: overrides?.agentType,
450
+
451
+ // Create new query tracking chain for subagent with incremented depth
452
+ queryTracking: {
453
+ chainId: randomUUID(),
454
+ depth: (parentContext.queryTracking?.depth ?? -1) + 1,
455
+ },
456
+ fileReadingLimits: parentContext.fileReadingLimits,
457
+ userModified: parentContext.userModified,
458
+ criticalSystemReminder_EXPERIMENTAL:
459
+ overrides?.criticalSystemReminder_EXPERIMENTAL,
460
+ requireCanUseTool: overrides?.requireCanUseTool,
461
+ }
462
+ }
463
+
464
+ /**
465
+ * Runs a forked agent query loop and tracks cache hit metrics.
466
+ *
467
+ * This function:
468
+ * 1. Uses identical cache-safe params from parent to enable prompt caching
469
+ * 2. Accumulates usage across all query iterations
470
+ * 3. Logs tengu_fork_agent_query with full usage when complete
471
+ *
472
+ * @example
473
+ * ```typescript
474
+ * const result = await runForkedAgent({
475
+ * promptMessages: [createUserMessage({ content: userPrompt })],
476
+ * cacheSafeParams: {
477
+ * systemPrompt,
478
+ * userContext,
479
+ * systemContext,
480
+ * toolUseContext: clonedToolUseContext,
481
+ * forkContextMessages: messages,
482
+ * },
483
+ * canUseTool,
484
+ * querySource: 'session_memory',
485
+ * forkLabel: 'session_memory',
486
+ * })
487
+ * ```
488
+ */
489
+ export async function runForkedAgent({
490
+ promptMessages,
491
+ cacheSafeParams,
492
+ canUseTool,
493
+ querySource,
494
+ forkLabel,
495
+ overrides,
496
+ maxOutputTokens,
497
+ maxTurns,
498
+ onMessage,
499
+ skipTranscript,
500
+ skipCacheWrite,
501
+ }: ForkedAgentParams): Promise<ForkedAgentResult> {
502
+ const startTime = Date.now()
503
+ const outputMessages: Message[] = []
504
+ let totalUsage: NonNullableUsage = { ...EMPTY_USAGE }
505
+
506
+ const {
507
+ systemPrompt,
508
+ userContext,
509
+ systemContext,
510
+ toolUseContext,
511
+ forkContextMessages,
512
+ } = cacheSafeParams
513
+
514
+ // Create isolated context to prevent mutation of parent state
515
+ const isolatedToolUseContext = createSubagentContext(
516
+ toolUseContext,
517
+ overrides,
518
+ )
519
+
520
+ // Do NOT filterIncompleteToolCalls here — it drops the whole assistant on
521
+ // partial tool batches, orphaning the paired results (API 400). Dangling
522
+ // tool_uses are repaired downstream by ensureToolResultPairing in claude.ts,
523
+ // same as the main thread — identical post-repair prefix keeps the cache hit.
524
+ const initialMessages: Message[] = [...forkContextMessages, ...promptMessages]
525
+
526
+ // Generate agent ID and record initial messages for transcript
527
+ // When skipTranscript is set, skip agent ID creation and all transcript I/O
528
+ const agentId = skipTranscript ? undefined : createAgentId(forkLabel)
529
+ let lastRecordedUuid: UUID | null = null
530
+ if (agentId) {
531
+ await recordSidechainTranscript(initialMessages, agentId).catch(err =>
532
+ logForDebugging(
533
+ `Forked agent [${forkLabel}] failed to record initial transcript: ${err}`,
534
+ ),
535
+ )
536
+ // Track the last recorded message UUID for parent chain continuity
537
+ lastRecordedUuid =
538
+ initialMessages.length > 0
539
+ ? initialMessages[initialMessages.length - 1]!.uuid
540
+ : null
541
+ }
542
+
543
+ // Run the query loop with isolated context (cache-safe params preserved)
544
+ try {
545
+ for await (const message of query({
546
+ messages: initialMessages,
547
+ systemPrompt,
548
+ userContext,
549
+ systemContext,
550
+ canUseTool,
551
+ toolUseContext: isolatedToolUseContext,
552
+ querySource,
553
+ maxOutputTokensOverride: maxOutputTokens,
554
+ maxTurns,
555
+ skipCacheWrite,
556
+ })) {
557
+ // Extract real usage from message_delta stream events (final usage per API call)
558
+ if (message.type === 'stream_event') {
559
+ if (
560
+ 'event' in message &&
561
+ message.event?.type === 'message_delta' &&
562
+ message.event.usage
563
+ ) {
564
+ const turnUsage = updateUsage({ ...EMPTY_USAGE }, message.event.usage)
565
+ totalUsage = accumulateUsage(totalUsage, turnUsage)
566
+ }
567
+ continue
568
+ }
569
+ if (message.type === 'stream_request_start') {
570
+ continue
571
+ }
572
+
573
+ logForDebugging(
574
+ `Forked agent [${forkLabel}] received message: type=${message.type}`,
575
+ )
576
+
577
+ outputMessages.push(message as Message)
578
+ onMessage?.(message as Message)
579
+
580
+ // Record transcript for recordable message types (same pattern as runAgent.ts)
581
+ const msg = message as Message
582
+ if (
583
+ agentId &&
584
+ (msg.type === 'assistant' ||
585
+ msg.type === 'user' ||
586
+ msg.type === 'progress')
587
+ ) {
588
+ await recordSidechainTranscript([msg], agentId, lastRecordedUuid).catch(
589
+ err =>
590
+ logForDebugging(
591
+ `Forked agent [${forkLabel}] failed to record transcript: ${err}`,
592
+ ),
593
+ )
594
+ if (msg.type !== 'progress') {
595
+ lastRecordedUuid = msg.uuid
596
+ }
597
+ }
598
+ }
599
+ } finally {
600
+ // Release cloned file state cache memory (same pattern as runAgent.ts)
601
+ isolatedToolUseContext.readFileState.clear()
602
+ // Release the cloned fork context messages
603
+ initialMessages.length = 0
604
+ }
605
+
606
+ logForDebugging(
607
+ `Forked agent [${forkLabel}] finished: ${outputMessages.length} messages, types=[${outputMessages.map(m => m.type).join(', ')}], totalUsage: input=${totalUsage.input_tokens} output=${totalUsage.output_tokens} cacheRead=${totalUsage.cache_read_input_tokens} cacheCreate=${totalUsage.cache_creation_input_tokens}`,
608
+ )
609
+
610
+ const durationMs = Date.now() - startTime
611
+
612
+ // Log the fork query metrics with full NonNullableUsage
613
+ logForkAgentQueryEvent({
614
+ forkLabel,
615
+ querySource,
616
+ durationMs,
617
+ messageCount: outputMessages.length,
618
+ totalUsage,
619
+ queryTracking: toolUseContext.queryTracking,
620
+ })
621
+
622
+ return {
623
+ messages: outputMessages,
624
+ totalUsage,
625
+ }
626
+ }
627
+
628
+ /**
629
+ * Logs the tengu_fork_agent_query event with full NonNullableUsage fields.
630
+ */
631
+ function logForkAgentQueryEvent({
632
+ forkLabel,
633
+ querySource,
634
+ durationMs,
635
+ messageCount,
636
+ totalUsage,
637
+ queryTracking,
638
+ }: {
639
+ forkLabel: string
640
+ querySource: QuerySource
641
+ durationMs: number
642
+ messageCount: number
643
+ totalUsage: NonNullableUsage
644
+ queryTracking?: { chainId: string; depth: number }
645
+ }): void {
646
+ // Calculate cache hit rate
647
+ const totalInputTokens =
648
+ totalUsage.input_tokens +
649
+ totalUsage.cache_creation_input_tokens +
650
+ totalUsage.cache_read_input_tokens
651
+ const cacheHitRate =
652
+ totalInputTokens > 0
653
+ ? totalUsage.cache_read_input_tokens / totalInputTokens
654
+ : 0
655
+
656
+ logEvent('tengu_fork_agent_query', {
657
+ // Metadata
658
+ forkLabel:
659
+ forkLabel as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
660
+ querySource:
661
+ querySource as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
662
+ durationMs,
663
+ messageCount,
664
+
665
+ // NonNullableUsage fields
666
+ inputTokens: totalUsage.input_tokens,
667
+ outputTokens: totalUsage.output_tokens,
668
+ cacheReadInputTokens: totalUsage.cache_read_input_tokens,
669
+ cacheCreationInputTokens: totalUsage.cache_creation_input_tokens,
670
+ serviceTier:
671
+ totalUsage.service_tier as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
672
+ cacheCreationEphemeral1hTokens:
673
+ totalUsage.cache_creation.ephemeral_1h_input_tokens,
674
+ cacheCreationEphemeral5mTokens:
675
+ totalUsage.cache_creation.ephemeral_5m_input_tokens,
676
+
677
+ // Derived metrics
678
+ cacheHitRate,
679
+
680
+ // Query tracking
681
+ ...(queryTracking
682
+ ? {
683
+ queryChainId:
684
+ queryTracking.chainId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
685
+ queryDepth: queryTracking.depth,
686
+ }
687
+ : {}),
688
+ })
689
+ }