@xelauvas/xela-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1920) hide show
  1. package/README.md +200 -0
  2. package/bin/xela +100 -0
  3. package/package.json +88 -0
  4. package/src/QueryEngine.ts +1295 -0
  5. package/src/Task.ts +125 -0
  6. package/src/Tool.ts +792 -0
  7. package/src/_shims/_generated_stubs/_universal_stub.mjs +168 -0
  8. package/src/_shims/_generated_stubs/text_stub.mjs +1 -0
  9. package/src/_shims/bun_bundle.js +9 -0
  10. package/src/_shims/cjs_stub.cjs +23 -0
  11. package/src/_shims/empty_stub.js +33 -0
  12. package/src/_shims/loader.js +352 -0
  13. package/src/_shims/openai_adapter.ts +486 -0
  14. package/src/_shims/react_compiler_runtime.js +17 -0
  15. package/src/_shims/register.js +148 -0
  16. package/src/assistant/sessionHistory.ts +87 -0
  17. package/src/bootstrap/state.ts +1759 -0
  18. package/src/bridge/bridgeApi.ts +539 -0
  19. package/src/bridge/bridgeConfig.ts +48 -0
  20. package/src/bridge/bridgeDebug.ts +135 -0
  21. package/src/bridge/bridgeEnabled.ts +202 -0
  22. package/src/bridge/bridgeMain.ts +2999 -0
  23. package/src/bridge/bridgeMessaging.ts +461 -0
  24. package/src/bridge/bridgePermissionCallbacks.ts +43 -0
  25. package/src/bridge/bridgePointer.ts +210 -0
  26. package/src/bridge/bridgeStatusUtil.ts +163 -0
  27. package/src/bridge/bridgeUI.ts +530 -0
  28. package/src/bridge/capacityWake.ts +56 -0
  29. package/src/bridge/codeSessionApi.ts +168 -0
  30. package/src/bridge/createSession.ts +384 -0
  31. package/src/bridge/debugUtils.ts +141 -0
  32. package/src/bridge/envLessBridgeConfig.ts +165 -0
  33. package/src/bridge/flushGate.ts +71 -0
  34. package/src/bridge/inboundAttachments.ts +175 -0
  35. package/src/bridge/inboundMessages.ts +80 -0
  36. package/src/bridge/initReplBridge.ts +569 -0
  37. package/src/bridge/jwtUtils.ts +256 -0
  38. package/src/bridge/pollConfig.ts +110 -0
  39. package/src/bridge/pollConfigDefaults.ts +82 -0
  40. package/src/bridge/remoteBridgeCore.ts +1008 -0
  41. package/src/bridge/replBridge.ts +2406 -0
  42. package/src/bridge/replBridgeHandle.ts +36 -0
  43. package/src/bridge/replBridgeTransport.ts +370 -0
  44. package/src/bridge/sessionIdCompat.ts +57 -0
  45. package/src/bridge/sessionRunner.ts +550 -0
  46. package/src/bridge/trustedDevice.ts +210 -0
  47. package/src/bridge/types.ts +262 -0
  48. package/src/bridge/workSecret.ts +127 -0
  49. package/src/buddy/CompanionSprite.tsx +371 -0
  50. package/src/buddy/companion.ts +133 -0
  51. package/src/buddy/prompt.ts +36 -0
  52. package/src/buddy/sprites.ts +514 -0
  53. package/src/buddy/types.ts +148 -0
  54. package/src/buddy/useBuddyNotification.tsx +98 -0
  55. package/src/cli/exit.ts +31 -0
  56. package/src/cli/handlers/agents.ts +70 -0
  57. package/src/cli/handlers/auth.ts +330 -0
  58. package/src/cli/handlers/autoMode.ts +170 -0
  59. package/src/cli/handlers/mcp.tsx +362 -0
  60. package/src/cli/handlers/plugins.ts +878 -0
  61. package/src/cli/handlers/util.tsx +110 -0
  62. package/src/cli/ndjsonSafeStringify.ts +32 -0
  63. package/src/cli/print.ts +5594 -0
  64. package/src/cli/remoteIO.ts +255 -0
  65. package/src/cli/structuredIO.ts +859 -0
  66. package/src/cli/transports/HybridTransport.ts +282 -0
  67. package/src/cli/transports/SSETransport.ts +711 -0
  68. package/src/cli/transports/SerialBatchEventUploader.ts +275 -0
  69. package/src/cli/transports/WebSocketTransport.ts +800 -0
  70. package/src/cli/transports/WorkerStateUploader.ts +131 -0
  71. package/src/cli/transports/ccrClient.ts +998 -0
  72. package/src/cli/transports/transportUtils.ts +45 -0
  73. package/src/cli/update.ts +422 -0
  74. package/src/commands/add-dir/add-dir.tsx +126 -0
  75. package/src/commands/add-dir/index.ts +11 -0
  76. package/src/commands/add-dir/validation.ts +110 -0
  77. package/src/commands/advisor.ts +109 -0
  78. package/src/commands/agents/agents.tsx +12 -0
  79. package/src/commands/agents/index.ts +10 -0
  80. package/src/commands/ant-trace/index.js +1 -0
  81. package/src/commands/autofix-pr/index.js +1 -0
  82. package/src/commands/backfill-sessions/index.js +1 -0
  83. package/src/commands/branch/branch.ts +296 -0
  84. package/src/commands/branch/index.ts +14 -0
  85. package/src/commands/break-cache/index.js +1 -0
  86. package/src/commands/bridge/bridge.tsx +509 -0
  87. package/src/commands/bridge/index.ts +26 -0
  88. package/src/commands/bridge-kick.ts +200 -0
  89. package/src/commands/brief.ts +130 -0
  90. package/src/commands/btw/btw.tsx +243 -0
  91. package/src/commands/btw/index.ts +13 -0
  92. package/src/commands/bughunter/index.js +1 -0
  93. package/src/commands/chrome/chrome.tsx +285 -0
  94. package/src/commands/chrome/index.ts +13 -0
  95. package/src/commands/clear/caches.ts +144 -0
  96. package/src/commands/clear/clear.ts +7 -0
  97. package/src/commands/clear/conversation.ts +251 -0
  98. package/src/commands/clear/index.ts +19 -0
  99. package/src/commands/color/color.ts +93 -0
  100. package/src/commands/color/index.ts +16 -0
  101. package/src/commands/commit-push-pr.ts +158 -0
  102. package/src/commands/commit.ts +92 -0
  103. package/src/commands/compact/compact.ts +287 -0
  104. package/src/commands/compact/index.ts +15 -0
  105. package/src/commands/config/config.tsx +7 -0
  106. package/src/commands/config/index.ts +11 -0
  107. package/src/commands/context/context-noninteractive.ts +325 -0
  108. package/src/commands/context/context.tsx +64 -0
  109. package/src/commands/context/index.ts +24 -0
  110. package/src/commands/copy/copy.tsx +371 -0
  111. package/src/commands/copy/index.ts +15 -0
  112. package/src/commands/cost/cost.ts +24 -0
  113. package/src/commands/cost/index.ts +23 -0
  114. package/src/commands/createMovedToPluginCommand.ts +65 -0
  115. package/src/commands/ctx_viz/index.js +1 -0
  116. package/src/commands/debug-tool-call/index.js +1 -0
  117. package/src/commands/desktop/desktop.tsx +9 -0
  118. package/src/commands/desktop/index.ts +26 -0
  119. package/src/commands/diff/diff.tsx +9 -0
  120. package/src/commands/diff/index.ts +8 -0
  121. package/src/commands/doctor/doctor.tsx +7 -0
  122. package/src/commands/doctor/index.ts +12 -0
  123. package/src/commands/effort/effort.tsx +183 -0
  124. package/src/commands/effort/index.ts +13 -0
  125. package/src/commands/env/index.js +1 -0
  126. package/src/commands/exit/exit.tsx +33 -0
  127. package/src/commands/exit/index.ts +12 -0
  128. package/src/commands/export/export.tsx +91 -0
  129. package/src/commands/export/index.ts +11 -0
  130. package/src/commands/extra-usage/extra-usage-core.ts +118 -0
  131. package/src/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
  132. package/src/commands/extra-usage/extra-usage.tsx +17 -0
  133. package/src/commands/extra-usage/index.ts +31 -0
  134. package/src/commands/fast/fast.tsx +269 -0
  135. package/src/commands/fast/index.ts +26 -0
  136. package/src/commands/feedback/feedback.tsx +25 -0
  137. package/src/commands/feedback/index.ts +26 -0
  138. package/src/commands/files/files.ts +19 -0
  139. package/src/commands/files/index.ts +12 -0
  140. package/src/commands/good-claude/index.js +1 -0
  141. package/src/commands/heapdump/heapdump.ts +17 -0
  142. package/src/commands/heapdump/index.ts +12 -0
  143. package/src/commands/help/help.tsx +11 -0
  144. package/src/commands/help/index.ts +10 -0
  145. package/src/commands/hooks/hooks.tsx +13 -0
  146. package/src/commands/hooks/index.ts +11 -0
  147. package/src/commands/ide/ide.tsx +646 -0
  148. package/src/commands/ide/index.ts +11 -0
  149. package/src/commands/init-verifiers.ts +262 -0
  150. package/src/commands/init.ts +256 -0
  151. package/src/commands/insights.ts +3200 -0
  152. package/src/commands/install-github-app/ApiKeyStep.tsx +231 -0
  153. package/src/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
  154. package/src/commands/install-github-app/CheckGitHubStep.tsx +15 -0
  155. package/src/commands/install-github-app/ChooseRepoStep.tsx +211 -0
  156. package/src/commands/install-github-app/CreatingStep.tsx +65 -0
  157. package/src/commands/install-github-app/ErrorStep.tsx +85 -0
  158. package/src/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
  159. package/src/commands/install-github-app/InstallAppStep.tsx +94 -0
  160. package/src/commands/install-github-app/OAuthFlowStep.tsx +276 -0
  161. package/src/commands/install-github-app/SuccessStep.tsx +96 -0
  162. package/src/commands/install-github-app/WarningsStep.tsx +73 -0
  163. package/src/commands/install-github-app/index.ts +13 -0
  164. package/src/commands/install-github-app/install-github-app.tsx +587 -0
  165. package/src/commands/install-github-app/setupGitHubActions.ts +325 -0
  166. package/src/commands/install-slack-app/index.ts +12 -0
  167. package/src/commands/install-slack-app/install-slack-app.ts +30 -0
  168. package/src/commands/install.tsx +300 -0
  169. package/src/commands/issue/index.js +1 -0
  170. package/src/commands/keybindings/index.ts +13 -0
  171. package/src/commands/keybindings/keybindings.ts +53 -0
  172. package/src/commands/login/index.ts +14 -0
  173. package/src/commands/login/login.tsx +104 -0
  174. package/src/commands/logout/index.ts +10 -0
  175. package/src/commands/logout/logout.tsx +82 -0
  176. package/src/commands/mcp/addCommand.ts +280 -0
  177. package/src/commands/mcp/index.ts +12 -0
  178. package/src/commands/mcp/mcp.tsx +85 -0
  179. package/src/commands/mcp/xaaIdpCommand.ts +266 -0
  180. package/src/commands/memory/index.ts +10 -0
  181. package/src/commands/memory/memory.tsx +90 -0
  182. package/src/commands/mobile/index.ts +11 -0
  183. package/src/commands/mobile/mobile.tsx +274 -0
  184. package/src/commands/mock-limits/index.js +1 -0
  185. package/src/commands/model/index.ts +16 -0
  186. package/src/commands/model/model.tsx +297 -0
  187. package/src/commands/oauth-refresh/index.js +1 -0
  188. package/src/commands/onboarding/index.js +1 -0
  189. package/src/commands/output-style/index.ts +11 -0
  190. package/src/commands/output-style/output-style.tsx +7 -0
  191. package/src/commands/passes/index.ts +22 -0
  192. package/src/commands/passes/passes.tsx +24 -0
  193. package/src/commands/perf-issue/index.js +1 -0
  194. package/src/commands/permissions/index.ts +11 -0
  195. package/src/commands/permissions/permissions.tsx +10 -0
  196. package/src/commands/plan/index.ts +11 -0
  197. package/src/commands/plan/plan.tsx +122 -0
  198. package/src/commands/plugin/AddMarketplace.tsx +162 -0
  199. package/src/commands/plugin/BrowseMarketplace.tsx +802 -0
  200. package/src/commands/plugin/DiscoverPlugins.tsx +781 -0
  201. package/src/commands/plugin/ManageMarketplaces.tsx +838 -0
  202. package/src/commands/plugin/ManagePlugins.tsx +2215 -0
  203. package/src/commands/plugin/PluginErrors.tsx +124 -0
  204. package/src/commands/plugin/PluginOptionsDialog.tsx +357 -0
  205. package/src/commands/plugin/PluginOptionsFlow.tsx +135 -0
  206. package/src/commands/plugin/PluginSettings.tsx +1072 -0
  207. package/src/commands/plugin/PluginTrustWarning.tsx +32 -0
  208. package/src/commands/plugin/UnifiedInstalledCell.tsx +565 -0
  209. package/src/commands/plugin/ValidatePlugin.tsx +98 -0
  210. package/src/commands/plugin/index.tsx +11 -0
  211. package/src/commands/plugin/parseArgs.ts +103 -0
  212. package/src/commands/plugin/plugin.tsx +7 -0
  213. package/src/commands/plugin/pluginDetailsHelpers.tsx +117 -0
  214. package/src/commands/plugin/usePagination.ts +171 -0
  215. package/src/commands/pr_comments/index.ts +50 -0
  216. package/src/commands/privacy-settings/index.ts +14 -0
  217. package/src/commands/privacy-settings/privacy-settings.tsx +58 -0
  218. package/src/commands/rate-limit-options/index.ts +19 -0
  219. package/src/commands/rate-limit-options/rate-limit-options.tsx +210 -0
  220. package/src/commands/release-notes/index.ts +11 -0
  221. package/src/commands/release-notes/release-notes.ts +50 -0
  222. package/src/commands/reload-plugins/index.ts +18 -0
  223. package/src/commands/reload-plugins/reload-plugins.ts +61 -0
  224. package/src/commands/remote-env/index.ts +15 -0
  225. package/src/commands/remote-env/remote-env.tsx +7 -0
  226. package/src/commands/remote-setup/api.ts +182 -0
  227. package/src/commands/remote-setup/index.ts +20 -0
  228. package/src/commands/remote-setup/remote-setup.tsx +187 -0
  229. package/src/commands/rename/generateSessionName.ts +67 -0
  230. package/src/commands/rename/index.ts +12 -0
  231. package/src/commands/rename/rename.ts +87 -0
  232. package/src/commands/reset-limits/index.js +4 -0
  233. package/src/commands/resume/index.ts +12 -0
  234. package/src/commands/resume/resume.tsx +275 -0
  235. package/src/commands/review/UltrareviewOverageDialog.tsx +96 -0
  236. package/src/commands/review/reviewRemote.ts +316 -0
  237. package/src/commands/review/ultrareviewCommand.tsx +58 -0
  238. package/src/commands/review/ultrareviewEnabled.ts +14 -0
  239. package/src/commands/review.ts +57 -0
  240. package/src/commands/rewind/index.ts +13 -0
  241. package/src/commands/rewind/rewind.ts +13 -0
  242. package/src/commands/sandbox-toggle/index.ts +50 -0
  243. package/src/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
  244. package/src/commands/security-review.ts +243 -0
  245. package/src/commands/session/index.ts +16 -0
  246. package/src/commands/session/session.tsx +140 -0
  247. package/src/commands/share/index.js +1 -0
  248. package/src/commands/skills/index.ts +10 -0
  249. package/src/commands/skills/skills.tsx +8 -0
  250. package/src/commands/stats/index.ts +10 -0
  251. package/src/commands/stats/stats.tsx +7 -0
  252. package/src/commands/status/index.ts +12 -0
  253. package/src/commands/status/status.tsx +8 -0
  254. package/src/commands/statusline.tsx +24 -0
  255. package/src/commands/stickers/index.ts +11 -0
  256. package/src/commands/stickers/stickers.ts +16 -0
  257. package/src/commands/summary/index.js +1 -0
  258. package/src/commands/tag/index.ts +12 -0
  259. package/src/commands/tag/tag.tsx +215 -0
  260. package/src/commands/tasks/index.ts +11 -0
  261. package/src/commands/tasks/tasks.tsx +8 -0
  262. package/src/commands/teleport/index.js +1 -0
  263. package/src/commands/terminalSetup/index.ts +23 -0
  264. package/src/commands/terminalSetup/terminalSetup.tsx +531 -0
  265. package/src/commands/theme/index.ts +10 -0
  266. package/src/commands/theme/theme.tsx +57 -0
  267. package/src/commands/thinkback/index.ts +13 -0
  268. package/src/commands/thinkback/thinkback.tsx +554 -0
  269. package/src/commands/thinkback-play/index.ts +17 -0
  270. package/src/commands/thinkback-play/thinkback-play.ts +43 -0
  271. package/src/commands/ultraplan.tsx +471 -0
  272. package/src/commands/upgrade/index.ts +16 -0
  273. package/src/commands/upgrade/upgrade.tsx +38 -0
  274. package/src/commands/usage/index.ts +9 -0
  275. package/src/commands/usage/usage.tsx +7 -0
  276. package/src/commands/version.ts +22 -0
  277. package/src/commands/vim/index.ts +11 -0
  278. package/src/commands/vim/vim.ts +38 -0
  279. package/src/commands/voice/index.ts +20 -0
  280. package/src/commands/voice/voice.ts +150 -0
  281. package/src/commands.ts +754 -0
  282. package/src/components/AgentProgressLine.tsx +136 -0
  283. package/src/components/App.tsx +56 -0
  284. package/src/components/ApproveApiKey.tsx +123 -0
  285. package/src/components/AutoModeOptInDialog.tsx +142 -0
  286. package/src/components/AutoUpdater.tsx +198 -0
  287. package/src/components/AutoUpdaterWrapper.tsx +91 -0
  288. package/src/components/AwsAuthStatusBox.tsx +82 -0
  289. package/src/components/BaseTextInput.tsx +136 -0
  290. package/src/components/BashModeProgress.tsx +56 -0
  291. package/src/components/BridgeDialog.tsx +401 -0
  292. package/src/components/BypassPermissionsModeDialog.tsx +87 -0
  293. package/src/components/ChannelDowngradeDialog.tsx +102 -0
  294. package/src/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
  295. package/src/components/ClaudeInChromeOnboarding.tsx +121 -0
  296. package/src/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
  297. package/src/components/ClickableImageRef.tsx +73 -0
  298. package/src/components/CompactSummary.tsx +118 -0
  299. package/src/components/ConfigurableShortcutHint.tsx +57 -0
  300. package/src/components/ConsoleOAuthFlow.tsx +631 -0
  301. package/src/components/ContextSuggestions.tsx +47 -0
  302. package/src/components/ContextVisualization.tsx +489 -0
  303. package/src/components/CoordinatorAgentStatus.tsx +273 -0
  304. package/src/components/CostThresholdDialog.tsx +50 -0
  305. package/src/components/CtrlOToExpand.tsx +51 -0
  306. package/src/components/CustomSelect/SelectMulti.tsx +213 -0
  307. package/src/components/CustomSelect/index.ts +3 -0
  308. package/src/components/CustomSelect/option-map.ts +50 -0
  309. package/src/components/CustomSelect/select-input-option.tsx +488 -0
  310. package/src/components/CustomSelect/select-option.tsx +68 -0
  311. package/src/components/CustomSelect/select.tsx +690 -0
  312. package/src/components/CustomSelect/use-multi-select-state.ts +414 -0
  313. package/src/components/CustomSelect/use-select-input.ts +287 -0
  314. package/src/components/CustomSelect/use-select-navigation.ts +653 -0
  315. package/src/components/CustomSelect/use-select-state.ts +157 -0
  316. package/src/components/DesktopHandoff.tsx +193 -0
  317. package/src/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
  318. package/src/components/DevBar.tsx +49 -0
  319. package/src/components/DevChannelsDialog.tsx +105 -0
  320. package/src/components/DiagnosticsDisplay.tsx +95 -0
  321. package/src/components/EffortCallout.tsx +265 -0
  322. package/src/components/EffortIndicator.ts +42 -0
  323. package/src/components/ExitFlow.tsx +48 -0
  324. package/src/components/ExportDialog.tsx +128 -0
  325. package/src/components/FallbackToolUseErrorMessage.tsx +116 -0
  326. package/src/components/FallbackToolUseRejectedMessage.tsx +16 -0
  327. package/src/components/FastIcon.tsx +46 -0
  328. package/src/components/Feedback.tsx +592 -0
  329. package/src/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
  330. package/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
  331. package/src/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
  332. package/src/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
  333. package/src/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
  334. package/src/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
  335. package/src/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
  336. package/src/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
  337. package/src/components/FeedbackSurvey/useSurveyState.tsx +100 -0
  338. package/src/components/FileEditToolDiff.tsx +181 -0
  339. package/src/components/FileEditToolUpdatedMessage.tsx +124 -0
  340. package/src/components/FileEditToolUseRejectedMessage.tsx +170 -0
  341. package/src/components/FilePathLink.tsx +43 -0
  342. package/src/components/FullscreenLayout.tsx +637 -0
  343. package/src/components/GlobalSearchDialog.tsx +343 -0
  344. package/src/components/HelpV2/Commands.tsx +82 -0
  345. package/src/components/HelpV2/General.tsx +23 -0
  346. package/src/components/HelpV2/HelpV2.tsx +184 -0
  347. package/src/components/HighlightedCode/Fallback.tsx +193 -0
  348. package/src/components/HighlightedCode.tsx +190 -0
  349. package/src/components/HistorySearchDialog.tsx +118 -0
  350. package/src/components/IdeAutoConnectDialog.tsx +154 -0
  351. package/src/components/IdeOnboardingDialog.tsx +167 -0
  352. package/src/components/IdeStatusIndicator.tsx +58 -0
  353. package/src/components/IdleReturnDialog.tsx +118 -0
  354. package/src/components/InterruptedByUser.tsx +15 -0
  355. package/src/components/InvalidConfigDialog.tsx +156 -0
  356. package/src/components/InvalidSettingsDialog.tsx +89 -0
  357. package/src/components/KeybindingWarnings.tsx +55 -0
  358. package/src/components/LanguagePicker.tsx +86 -0
  359. package/src/components/LogSelector.tsx +1575 -0
  360. package/src/components/LogoV2/AnimatedAsterisk.tsx +50 -0
  361. package/src/components/LogoV2/AnimatedClawd.tsx +124 -0
  362. package/src/components/LogoV2/ChannelsNotice.tsx +266 -0
  363. package/src/components/LogoV2/Clawd.tsx +240 -0
  364. package/src/components/LogoV2/CondensedLogo.tsx +161 -0
  365. package/src/components/LogoV2/EmergencyTip.tsx +58 -0
  366. package/src/components/LogoV2/Feed.tsx +112 -0
  367. package/src/components/LogoV2/FeedColumn.tsx +59 -0
  368. package/src/components/LogoV2/GuestPassesUpsell.tsx +70 -0
  369. package/src/components/LogoV2/LogoV2.tsx +543 -0
  370. package/src/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
  371. package/src/components/LogoV2/OverageCreditUpsell.tsx +166 -0
  372. package/src/components/LogoV2/VoiceModeNotice.tsx +68 -0
  373. package/src/components/LogoV2/WelcomeV2.tsx +433 -0
  374. package/src/components/LogoV2/feedConfigs.tsx +92 -0
  375. package/src/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
  376. package/src/components/MCPServerApprovalDialog.tsx +115 -0
  377. package/src/components/MCPServerDesktopImportDialog.tsx +203 -0
  378. package/src/components/MCPServerDialogCopy.tsx +15 -0
  379. package/src/components/MCPServerMultiselectDialog.tsx +133 -0
  380. package/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
  381. package/src/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
  382. package/src/components/Markdown.tsx +236 -0
  383. package/src/components/MarkdownTable.tsx +322 -0
  384. package/src/components/MemoryUsageIndicator.tsx +37 -0
  385. package/src/components/Message.tsx +627 -0
  386. package/src/components/MessageModel.tsx +43 -0
  387. package/src/components/MessageResponse.tsx +78 -0
  388. package/src/components/MessageRow.tsx +383 -0
  389. package/src/components/MessageSelector.tsx +831 -0
  390. package/src/components/MessageTimestamp.tsx +63 -0
  391. package/src/components/Messages.tsx +834 -0
  392. package/src/components/ModelPicker.tsx +448 -0
  393. package/src/components/NativeAutoUpdater.tsx +193 -0
  394. package/src/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
  395. package/src/components/OffscreenFreeze.tsx +44 -0
  396. package/src/components/Onboarding.tsx +244 -0
  397. package/src/components/OutputStylePicker.tsx +112 -0
  398. package/src/components/PackageManagerAutoUpdater.tsx +104 -0
  399. package/src/components/Passes/Passes.tsx +184 -0
  400. package/src/components/PrBadge.tsx +97 -0
  401. package/src/components/PressEnterToContinue.tsx +15 -0
  402. package/src/components/PromptInput/HistorySearchInput.tsx +51 -0
  403. package/src/components/PromptInput/IssueFlagBanner.tsx +12 -0
  404. package/src/components/PromptInput/Notifications.tsx +332 -0
  405. package/src/components/PromptInput/PromptInput.tsx +2339 -0
  406. package/src/components/PromptInput/PromptInputFooter.tsx +191 -0
  407. package/src/components/PromptInput/PromptInputFooterLeftSide.tsx +517 -0
  408. package/src/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
  409. package/src/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
  410. package/src/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
  411. package/src/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
  412. package/src/components/PromptInput/PromptInputStashNotice.tsx +25 -0
  413. package/src/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
  414. package/src/components/PromptInput/ShimmeredInput.tsx +143 -0
  415. package/src/components/PromptInput/VoiceIndicator.tsx +137 -0
  416. package/src/components/PromptInput/inputModes.ts +33 -0
  417. package/src/components/PromptInput/inputPaste.ts +90 -0
  418. package/src/components/PromptInput/useMaybeTruncateInput.ts +58 -0
  419. package/src/components/PromptInput/usePromptInputPlaceholder.ts +76 -0
  420. package/src/components/PromptInput/useShowFastIconHint.ts +31 -0
  421. package/src/components/PromptInput/useSwarmBanner.ts +155 -0
  422. package/src/components/PromptInput/utils.ts +60 -0
  423. package/src/components/QuickOpenDialog.tsx +244 -0
  424. package/src/components/RemoteCallout.tsx +76 -0
  425. package/src/components/RemoteEnvironmentDialog.tsx +340 -0
  426. package/src/components/ResumeTask.tsx +268 -0
  427. package/src/components/SandboxViolationExpandedView.tsx +99 -0
  428. package/src/components/ScrollKeybindingHandler.tsx +1012 -0
  429. package/src/components/SearchBox.tsx +72 -0
  430. package/src/components/SentryErrorBoundary.ts +28 -0
  431. package/src/components/SessionBackgroundHint.tsx +108 -0
  432. package/src/components/SessionPreview.tsx +194 -0
  433. package/src/components/Settings/Config.tsx +1822 -0
  434. package/src/components/Settings/Settings.tsx +137 -0
  435. package/src/components/Settings/Status.tsx +241 -0
  436. package/src/components/Settings/Usage.tsx +377 -0
  437. package/src/components/ShowInIDEPrompt.tsx +170 -0
  438. package/src/components/SkillImprovementSurvey.tsx +152 -0
  439. package/src/components/Spinner/FlashingChar.tsx +61 -0
  440. package/src/components/Spinner/GlimmerMessage.tsx +328 -0
  441. package/src/components/Spinner/ShimmerChar.tsx +36 -0
  442. package/src/components/Spinner/SpinnerAnimationRow.tsx +265 -0
  443. package/src/components/Spinner/SpinnerGlyph.tsx +80 -0
  444. package/src/components/Spinner/TeammateSpinnerLine.tsx +233 -0
  445. package/src/components/Spinner/TeammateSpinnerTree.tsx +272 -0
  446. package/src/components/Spinner/index.ts +10 -0
  447. package/src/components/Spinner/teammateSelectHint.ts +1 -0
  448. package/src/components/Spinner/useShimmerAnimation.ts +31 -0
  449. package/src/components/Spinner/useStalledAnimation.ts +75 -0
  450. package/src/components/Spinner/utils.ts +84 -0
  451. package/src/components/Spinner.tsx +562 -0
  452. package/src/components/Stats.tsx +1228 -0
  453. package/src/components/StatusLine.tsx +324 -0
  454. package/src/components/StatusNotices.tsx +55 -0
  455. package/src/components/StructuredDiff/Fallback.tsx +487 -0
  456. package/src/components/StructuredDiff/colorDiff.ts +37 -0
  457. package/src/components/StructuredDiff.tsx +190 -0
  458. package/src/components/StructuredDiffList.tsx +30 -0
  459. package/src/components/TagTabs.tsx +139 -0
  460. package/src/components/TaskListV2.tsx +378 -0
  461. package/src/components/TeammateViewHeader.tsx +82 -0
  462. package/src/components/TeleportError.tsx +189 -0
  463. package/src/components/TeleportProgress.tsx +140 -0
  464. package/src/components/TeleportRepoMismatchDialog.tsx +104 -0
  465. package/src/components/TeleportResumeWrapper.tsx +167 -0
  466. package/src/components/TeleportStash.tsx +116 -0
  467. package/src/components/TextInput.tsx +124 -0
  468. package/src/components/ThemePicker.tsx +333 -0
  469. package/src/components/ThinkingToggle.tsx +153 -0
  470. package/src/components/TokenWarning.tsx +179 -0
  471. package/src/components/ToolUseLoader.tsx +42 -0
  472. package/src/components/TrustDialog/TrustDialog.tsx +290 -0
  473. package/src/components/TrustDialog/utils.ts +245 -0
  474. package/src/components/ValidationErrorsList.tsx +148 -0
  475. package/src/components/VimTextInput.tsx +140 -0
  476. package/src/components/VirtualMessageList.tsx +1082 -0
  477. package/src/components/WorkflowMultiselectDialog.tsx +128 -0
  478. package/src/components/WorktreeExitDialog.tsx +231 -0
  479. package/src/components/agents/AgentDetail.tsx +220 -0
  480. package/src/components/agents/AgentEditor.tsx +178 -0
  481. package/src/components/agents/AgentNavigationFooter.tsx +26 -0
  482. package/src/components/agents/AgentsList.tsx +440 -0
  483. package/src/components/agents/AgentsMenu.tsx +800 -0
  484. package/src/components/agents/ColorPicker.tsx +112 -0
  485. package/src/components/agents/ModelSelector.tsx +68 -0
  486. package/src/components/agents/ToolSelector.tsx +562 -0
  487. package/src/components/agents/agentFileUtils.ts +272 -0
  488. package/src/components/agents/generateAgent.ts +197 -0
  489. package/src/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
  490. package/src/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
  491. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
  492. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
  493. package/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
  494. package/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
  495. package/src/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
  496. package/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
  497. package/src/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
  498. package/src/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
  499. package/src/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
  500. package/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
  501. package/src/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
  502. package/src/components/agents/types.ts +27 -0
  503. package/src/components/agents/utils.ts +18 -0
  504. package/src/components/agents/validateAgent.ts +109 -0
  505. package/src/components/design-system/Byline.tsx +77 -0
  506. package/src/components/design-system/Dialog.tsx +138 -0
  507. package/src/components/design-system/Divider.tsx +149 -0
  508. package/src/components/design-system/FuzzyPicker.tsx +312 -0
  509. package/src/components/design-system/KeyboardShortcutHint.tsx +81 -0
  510. package/src/components/design-system/ListItem.tsx +244 -0
  511. package/src/components/design-system/LoadingState.tsx +94 -0
  512. package/src/components/design-system/Pane.tsx +77 -0
  513. package/src/components/design-system/ProgressBar.tsx +86 -0
  514. package/src/components/design-system/Ratchet.tsx +80 -0
  515. package/src/components/design-system/StatusIcon.tsx +95 -0
  516. package/src/components/design-system/Tabs.tsx +340 -0
  517. package/src/components/design-system/ThemeProvider.tsx +174 -0
  518. package/src/components/design-system/ThemedBox.tsx +156 -0
  519. package/src/components/design-system/ThemedText.tsx +124 -0
  520. package/src/components/design-system/color.ts +30 -0
  521. package/src/components/diff/DiffDetailView.tsx +281 -0
  522. package/src/components/diff/DiffDialog.tsx +383 -0
  523. package/src/components/diff/DiffFileList.tsx +292 -0
  524. package/src/components/grove/Grove.tsx +463 -0
  525. package/src/components/hooks/HooksConfigMenu.tsx +578 -0
  526. package/src/components/hooks/PromptDialog.tsx +90 -0
  527. package/src/components/hooks/SelectEventMode.tsx +127 -0
  528. package/src/components/hooks/SelectHookMode.tsx +112 -0
  529. package/src/components/hooks/SelectMatcherMode.tsx +144 -0
  530. package/src/components/hooks/ViewHookMode.tsx +199 -0
  531. package/src/components/mcp/CapabilitiesSection.tsx +61 -0
  532. package/src/components/mcp/ElicitationDialog.tsx +1169 -0
  533. package/src/components/mcp/MCPAgentServerMenu.tsx +183 -0
  534. package/src/components/mcp/MCPListPanel.tsx +504 -0
  535. package/src/components/mcp/MCPReconnect.tsx +167 -0
  536. package/src/components/mcp/MCPRemoteServerMenu.tsx +649 -0
  537. package/src/components/mcp/MCPSettings.tsx +398 -0
  538. package/src/components/mcp/MCPStdioServerMenu.tsx +177 -0
  539. package/src/components/mcp/MCPToolDetailView.tsx +212 -0
  540. package/src/components/mcp/MCPToolListView.tsx +141 -0
  541. package/src/components/mcp/McpParsingWarnings.tsx +213 -0
  542. package/src/components/mcp/index.ts +9 -0
  543. package/src/components/mcp/utils/reconnectHelpers.tsx +49 -0
  544. package/src/components/memory/MemoryFileSelector.tsx +438 -0
  545. package/src/components/memory/MemoryUpdateNotification.tsx +45 -0
  546. package/src/components/messageActions.tsx +450 -0
  547. package/src/components/messages/AdvisorMessage.tsx +158 -0
  548. package/src/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
  549. package/src/components/messages/AssistantTextMessage.tsx +270 -0
  550. package/src/components/messages/AssistantThinkingMessage.tsx +86 -0
  551. package/src/components/messages/AssistantToolUseMessage.tsx +368 -0
  552. package/src/components/messages/AttachmentMessage.tsx +536 -0
  553. package/src/components/messages/CollapsedReadSearchContent.tsx +484 -0
  554. package/src/components/messages/CompactBoundaryMessage.tsx +18 -0
  555. package/src/components/messages/GroupedToolUseContent.tsx +58 -0
  556. package/src/components/messages/HighlightedThinkingText.tsx +162 -0
  557. package/src/components/messages/HookProgressMessage.tsx +116 -0
  558. package/src/components/messages/PlanApprovalMessage.tsx +222 -0
  559. package/src/components/messages/RateLimitMessage.tsx +161 -0
  560. package/src/components/messages/ShutdownMessage.tsx +132 -0
  561. package/src/components/messages/SystemAPIErrorMessage.tsx +141 -0
  562. package/src/components/messages/SystemTextMessage.tsx +827 -0
  563. package/src/components/messages/TaskAssignmentMessage.tsx +76 -0
  564. package/src/components/messages/UserAgentNotificationMessage.tsx +83 -0
  565. package/src/components/messages/UserBashInputMessage.tsx +58 -0
  566. package/src/components/messages/UserBashOutputMessage.tsx +54 -0
  567. package/src/components/messages/UserChannelMessage.tsx +137 -0
  568. package/src/components/messages/UserCommandMessage.tsx +108 -0
  569. package/src/components/messages/UserImageMessage.tsx +59 -0
  570. package/src/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
  571. package/src/components/messages/UserMemoryInputMessage.tsx +75 -0
  572. package/src/components/messages/UserPlanMessage.tsx +42 -0
  573. package/src/components/messages/UserPromptMessage.tsx +80 -0
  574. package/src/components/messages/UserResourceUpdateMessage.tsx +121 -0
  575. package/src/components/messages/UserTeammateMessage.tsx +206 -0
  576. package/src/components/messages/UserTextMessage.tsx +275 -0
  577. package/src/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
  578. package/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
  579. package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
  580. package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
  581. package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
  582. package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
  583. package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
  584. package/src/components/messages/UserToolResultMessage/utils.tsx +44 -0
  585. package/src/components/messages/nullRenderingAttachments.ts +70 -0
  586. package/src/components/messages/teamMemCollapsed.tsx +140 -0
  587. package/src/components/messages/teamMemSaved.ts +19 -0
  588. package/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
  589. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
  590. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
  591. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
  592. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
  593. package/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
  594. package/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
  595. package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
  596. package/src/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
  597. package/src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
  598. package/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
  599. package/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
  600. package/src/components/permissions/FallbackPermissionRequest.tsx +333 -0
  601. package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
  602. package/src/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
  603. package/src/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
  604. package/src/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
  605. package/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
  606. package/src/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
  607. package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
  608. package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
  609. package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
  610. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
  611. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
  612. package/src/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
  613. package/src/components/permissions/PermissionDialog.tsx +72 -0
  614. package/src/components/permissions/PermissionExplanation.tsx +272 -0
  615. package/src/components/permissions/PermissionPrompt.tsx +336 -0
  616. package/src/components/permissions/PermissionRequest.tsx +217 -0
  617. package/src/components/permissions/PermissionRequestTitle.tsx +66 -0
  618. package/src/components/permissions/PermissionRuleExplanation.tsx +121 -0
  619. package/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
  620. package/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
  621. package/src/components/permissions/SandboxPermissionRequest.tsx +163 -0
  622. package/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
  623. package/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
  624. package/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
  625. package/src/components/permissions/WorkerBadge.tsx +49 -0
  626. package/src/components/permissions/WorkerPendingPermission.tsx +105 -0
  627. package/src/components/permissions/hooks.ts +209 -0
  628. package/src/components/permissions/rules/AddPermissionRules.tsx +180 -0
  629. package/src/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
  630. package/src/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
  631. package/src/components/permissions/rules/PermissionRuleInput.tsx +138 -0
  632. package/src/components/permissions/rules/PermissionRuleList.tsx +1179 -0
  633. package/src/components/permissions/rules/RecentDenialsTab.tsx +207 -0
  634. package/src/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
  635. package/src/components/permissions/rules/WorkspaceTab.tsx +150 -0
  636. package/src/components/permissions/shellPermissionHelpers.tsx +164 -0
  637. package/src/components/permissions/useShellPermissionFeedback.ts +148 -0
  638. package/src/components/permissions/utils.ts +25 -0
  639. package/src/components/sandbox/SandboxConfigTab.tsx +45 -0
  640. package/src/components/sandbox/SandboxDependenciesTab.tsx +120 -0
  641. package/src/components/sandbox/SandboxDoctorSection.tsx +46 -0
  642. package/src/components/sandbox/SandboxOverridesTab.tsx +193 -0
  643. package/src/components/sandbox/SandboxSettings.tsx +296 -0
  644. package/src/components/shell/ExpandShellOutputContext.tsx +36 -0
  645. package/src/components/shell/OutputLine.tsx +118 -0
  646. package/src/components/shell/ShellProgressMessage.tsx +150 -0
  647. package/src/components/shell/ShellTimeDisplay.tsx +74 -0
  648. package/src/components/skills/SkillsMenu.tsx +237 -0
  649. package/src/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
  650. package/src/components/tasks/BackgroundTask.tsx +345 -0
  651. package/src/components/tasks/BackgroundTaskStatus.tsx +429 -0
  652. package/src/components/tasks/BackgroundTasksDialog.tsx +652 -0
  653. package/src/components/tasks/DreamDetailDialog.tsx +251 -0
  654. package/src/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
  655. package/src/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
  656. package/src/components/tasks/RemoteSessionProgress.tsx +243 -0
  657. package/src/components/tasks/ShellDetailDialog.tsx +404 -0
  658. package/src/components/tasks/ShellProgress.tsx +87 -0
  659. package/src/components/tasks/renderToolActivity.tsx +33 -0
  660. package/src/components/tasks/taskStatusUtils.tsx +107 -0
  661. package/src/components/teams/TeamStatus.tsx +80 -0
  662. package/src/components/teams/TeamsDialog.tsx +715 -0
  663. package/src/components/ui/OrderedList.tsx +71 -0
  664. package/src/components/ui/OrderedListItem.tsx +45 -0
  665. package/src/components/ui/TreeSelect.tsx +397 -0
  666. package/src/components/wizard/WizardDialogLayout.tsx +65 -0
  667. package/src/components/wizard/WizardNavigationFooter.tsx +24 -0
  668. package/src/components/wizard/WizardProvider.tsx +213 -0
  669. package/src/components/wizard/index.ts +9 -0
  670. package/src/components/wizard/useWizard.ts +13 -0
  671. package/src/constants/apiLimits.ts +94 -0
  672. package/src/constants/betas.ts +52 -0
  673. package/src/constants/common.ts +33 -0
  674. package/src/constants/cyberRiskInstruction.ts +24 -0
  675. package/src/constants/errorIds.ts +15 -0
  676. package/src/constants/figures.ts +45 -0
  677. package/src/constants/files.ts +156 -0
  678. package/src/constants/github-app.ts +144 -0
  679. package/src/constants/keys.ts +11 -0
  680. package/src/constants/messages.ts +1 -0
  681. package/src/constants/oauth.ts +234 -0
  682. package/src/constants/outputStyles.ts +216 -0
  683. package/src/constants/product.ts +76 -0
  684. package/src/constants/prompts.ts +914 -0
  685. package/src/constants/spinnerVerbs.ts +204 -0
  686. package/src/constants/system.ts +95 -0
  687. package/src/constants/systemPromptSections.ts +68 -0
  688. package/src/constants/toolLimits.ts +56 -0
  689. package/src/constants/tools.ts +112 -0
  690. package/src/constants/turnCompletionVerbs.ts +12 -0
  691. package/src/constants/xml.ts +86 -0
  692. package/src/context/QueuedMessageContext.tsx +63 -0
  693. package/src/context/fpsMetrics.tsx +30 -0
  694. package/src/context/mailbox.tsx +38 -0
  695. package/src/context/modalContext.tsx +58 -0
  696. package/src/context/notifications.tsx +240 -0
  697. package/src/context/overlayContext.tsx +151 -0
  698. package/src/context/promptOverlayContext.tsx +125 -0
  699. package/src/context/stats.tsx +220 -0
  700. package/src/context/voice.tsx +88 -0
  701. package/src/context.ts +189 -0
  702. package/src/coordinator/coordinatorMode.ts +369 -0
  703. package/src/cost-tracker.ts +323 -0
  704. package/src/costHook.ts +22 -0
  705. package/src/dialogLaunchers.tsx +133 -0
  706. package/src/entrypoints/agentSdkTypes.ts +443 -0
  707. package/src/entrypoints/cli.tsx +303 -0
  708. package/src/entrypoints/init.ts +340 -0
  709. package/src/entrypoints/mcp.ts +196 -0
  710. package/src/entrypoints/sandboxTypes.ts +156 -0
  711. package/src/entrypoints/sdk/controlSchemas.ts +663 -0
  712. package/src/entrypoints/sdk/coreSchemas.ts +1889 -0
  713. package/src/entrypoints/sdk/coreTypes.ts +62 -0
  714. package/src/history.ts +464 -0
  715. package/src/hooks/fileSuggestions.ts +811 -0
  716. package/src/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
  717. package/src/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
  718. package/src/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
  719. package/src/hooks/notifs/useFastModeNotification.tsx +162 -0
  720. package/src/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
  721. package/src/hooks/notifs/useInstallMessages.tsx +26 -0
  722. package/src/hooks/notifs/useLspInitializationNotification.tsx +143 -0
  723. package/src/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
  724. package/src/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
  725. package/src/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
  726. package/src/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
  727. package/src/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
  728. package/src/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
  729. package/src/hooks/notifs/useSettingsErrors.tsx +69 -0
  730. package/src/hooks/notifs/useStartupNotification.ts +41 -0
  731. package/src/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
  732. package/src/hooks/renderPlaceholder.ts +51 -0
  733. package/src/hooks/toolPermission/PermissionContext.ts +388 -0
  734. package/src/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
  735. package/src/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
  736. package/src/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
  737. package/src/hooks/toolPermission/permissionLogging.ts +238 -0
  738. package/src/hooks/unifiedSuggestions.ts +202 -0
  739. package/src/hooks/useAfterFirstRender.ts +17 -0
  740. package/src/hooks/useApiKeyVerification.ts +84 -0
  741. package/src/hooks/useArrowKeyHistory.tsx +229 -0
  742. package/src/hooks/useAssistantHistory.ts +250 -0
  743. package/src/hooks/useAwaySummary.ts +125 -0
  744. package/src/hooks/useBackgroundTaskNavigation.ts +251 -0
  745. package/src/hooks/useBlink.ts +34 -0
  746. package/src/hooks/useCanUseTool.tsx +204 -0
  747. package/src/hooks/useCancelRequest.ts +276 -0
  748. package/src/hooks/useChromeExtensionNotification.tsx +50 -0
  749. package/src/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
  750. package/src/hooks/useClipboardImageHint.ts +77 -0
  751. package/src/hooks/useCommandKeybindings.tsx +108 -0
  752. package/src/hooks/useCommandQueue.ts +15 -0
  753. package/src/hooks/useCopyOnSelect.ts +98 -0
  754. package/src/hooks/useDeferredHookMessages.ts +46 -0
  755. package/src/hooks/useDiffData.ts +110 -0
  756. package/src/hooks/useDiffInIDE.ts +379 -0
  757. package/src/hooks/useDirectConnect.ts +229 -0
  758. package/src/hooks/useDoublePress.ts +62 -0
  759. package/src/hooks/useDynamicConfig.ts +22 -0
  760. package/src/hooks/useElapsedTime.ts +37 -0
  761. package/src/hooks/useExitOnCtrlCD.ts +95 -0
  762. package/src/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
  763. package/src/hooks/useFileHistorySnapshotInit.ts +25 -0
  764. package/src/hooks/useGlobalKeybindings.tsx +249 -0
  765. package/src/hooks/useHistorySearch.ts +303 -0
  766. package/src/hooks/useIDEIntegration.tsx +70 -0
  767. package/src/hooks/useIdeAtMentioned.ts +76 -0
  768. package/src/hooks/useIdeConnectionStatus.ts +33 -0
  769. package/src/hooks/useIdeLogging.ts +41 -0
  770. package/src/hooks/useIdeSelection.ts +150 -0
  771. package/src/hooks/useInboxPoller.ts +969 -0
  772. package/src/hooks/useInputBuffer.ts +132 -0
  773. package/src/hooks/useIssueFlagBanner.ts +133 -0
  774. package/src/hooks/useLogMessages.ts +119 -0
  775. package/src/hooks/useLspPluginRecommendation.tsx +194 -0
  776. package/src/hooks/useMailboxBridge.ts +21 -0
  777. package/src/hooks/useMainLoopModel.ts +34 -0
  778. package/src/hooks/useManagePlugins.ts +304 -0
  779. package/src/hooks/useMemoryUsage.ts +39 -0
  780. package/src/hooks/useMergedClients.ts +23 -0
  781. package/src/hooks/useMergedCommands.ts +15 -0
  782. package/src/hooks/useMergedTools.ts +44 -0
  783. package/src/hooks/useMinDisplayTime.ts +35 -0
  784. package/src/hooks/useNotifyAfterTimeout.ts +65 -0
  785. package/src/hooks/useOfficialMarketplaceNotification.tsx +48 -0
  786. package/src/hooks/usePasteHandler.ts +285 -0
  787. package/src/hooks/usePluginRecommendationBase.tsx +105 -0
  788. package/src/hooks/usePrStatus.ts +106 -0
  789. package/src/hooks/usePromptSuggestion.ts +177 -0
  790. package/src/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
  791. package/src/hooks/useQueueProcessor.ts +68 -0
  792. package/src/hooks/useRemoteSession.ts +605 -0
  793. package/src/hooks/useReplBridge.tsx +723 -0
  794. package/src/hooks/useSSHSession.ts +241 -0
  795. package/src/hooks/useScheduledTasks.ts +139 -0
  796. package/src/hooks/useSearchInput.ts +364 -0
  797. package/src/hooks/useSessionBackgrounding.ts +158 -0
  798. package/src/hooks/useSettings.ts +17 -0
  799. package/src/hooks/useSettingsChange.ts +25 -0
  800. package/src/hooks/useSkillImprovementSurvey.ts +105 -0
  801. package/src/hooks/useSkillsChange.ts +62 -0
  802. package/src/hooks/useSwarmInitialization.ts +81 -0
  803. package/src/hooks/useSwarmPermissionPoller.ts +330 -0
  804. package/src/hooks/useTaskListWatcher.ts +221 -0
  805. package/src/hooks/useTasksV2.ts +250 -0
  806. package/src/hooks/useTeammateViewAutoExit.ts +63 -0
  807. package/src/hooks/useTeleportResume.tsx +85 -0
  808. package/src/hooks/useTerminalSize.ts +15 -0
  809. package/src/hooks/useTextInput.ts +529 -0
  810. package/src/hooks/useTimeout.ts +14 -0
  811. package/src/hooks/useTurnDiffs.ts +213 -0
  812. package/src/hooks/useTypeahead.tsx +1385 -0
  813. package/src/hooks/useUpdateNotification.ts +34 -0
  814. package/src/hooks/useVimInput.ts +316 -0
  815. package/src/hooks/useVirtualScroll.ts +721 -0
  816. package/src/hooks/useVoice.ts +1144 -0
  817. package/src/hooks/useVoiceEnabled.ts +25 -0
  818. package/src/hooks/useVoiceIntegration.tsx +677 -0
  819. package/src/ink/Ansi.tsx +292 -0
  820. package/src/ink/bidi.ts +139 -0
  821. package/src/ink/clearTerminal.ts +74 -0
  822. package/src/ink/colorize.ts +231 -0
  823. package/src/ink/components/AlternateScreen.tsx +80 -0
  824. package/src/ink/components/App.tsx +659 -0
  825. package/src/ink/components/AppContext.ts +21 -0
  826. package/src/ink/components/Box.tsx +214 -0
  827. package/src/ink/components/Button.tsx +192 -0
  828. package/src/ink/components/ClockContext.tsx +112 -0
  829. package/src/ink/components/CursorDeclarationContext.ts +32 -0
  830. package/src/ink/components/ErrorOverview.tsx +109 -0
  831. package/src/ink/components/Link.tsx +42 -0
  832. package/src/ink/components/Newline.tsx +39 -0
  833. package/src/ink/components/NoSelect.tsx +68 -0
  834. package/src/ink/components/RawAnsi.tsx +57 -0
  835. package/src/ink/components/ScrollBox.tsx +237 -0
  836. package/src/ink/components/Spacer.tsx +20 -0
  837. package/src/ink/components/StdinContext.ts +49 -0
  838. package/src/ink/components/TerminalFocusContext.tsx +52 -0
  839. package/src/ink/components/TerminalSizeContext.tsx +7 -0
  840. package/src/ink/components/Text.tsx +254 -0
  841. package/src/ink/constants.ts +2 -0
  842. package/src/ink/dom.ts +484 -0
  843. package/src/ink/events/click-event.ts +38 -0
  844. package/src/ink/events/dispatcher.ts +233 -0
  845. package/src/ink/events/emitter.ts +39 -0
  846. package/src/ink/events/event-handlers.ts +73 -0
  847. package/src/ink/events/event.ts +11 -0
  848. package/src/ink/events/focus-event.ts +21 -0
  849. package/src/ink/events/input-event.ts +205 -0
  850. package/src/ink/events/keyboard-event.ts +51 -0
  851. package/src/ink/events/terminal-event.ts +107 -0
  852. package/src/ink/events/terminal-focus-event.ts +19 -0
  853. package/src/ink/focus.ts +181 -0
  854. package/src/ink/frame.ts +124 -0
  855. package/src/ink/get-max-width.ts +27 -0
  856. package/src/ink/hit-test.ts +130 -0
  857. package/src/ink/hooks/use-animation-frame.ts +57 -0
  858. package/src/ink/hooks/use-app.ts +8 -0
  859. package/src/ink/hooks/use-declared-cursor.ts +73 -0
  860. package/src/ink/hooks/use-input.ts +92 -0
  861. package/src/ink/hooks/use-interval.ts +67 -0
  862. package/src/ink/hooks/use-search-highlight.ts +53 -0
  863. package/src/ink/hooks/use-selection.ts +104 -0
  864. package/src/ink/hooks/use-stdin.ts +8 -0
  865. package/src/ink/hooks/use-tab-status.ts +72 -0
  866. package/src/ink/hooks/use-terminal-focus.ts +16 -0
  867. package/src/ink/hooks/use-terminal-title.ts +31 -0
  868. package/src/ink/hooks/use-terminal-viewport.ts +96 -0
  869. package/src/ink/ink.tsx +1728 -0
  870. package/src/ink/instances.ts +10 -0
  871. package/src/ink/layout/engine.ts +6 -0
  872. package/src/ink/layout/geometry.ts +97 -0
  873. package/src/ink/layout/node.ts +152 -0
  874. package/src/ink/layout/yoga.ts +308 -0
  875. package/src/ink/line-width-cache.ts +24 -0
  876. package/src/ink/log-update.ts +773 -0
  877. package/src/ink/measure-element.ts +23 -0
  878. package/src/ink/measure-text.ts +47 -0
  879. package/src/ink/node-cache.ts +54 -0
  880. package/src/ink/optimizer.ts +93 -0
  881. package/src/ink/output.ts +797 -0
  882. package/src/ink/parse-keypress.ts +801 -0
  883. package/src/ink/reconciler.ts +512 -0
  884. package/src/ink/render-border.ts +231 -0
  885. package/src/ink/render-node-to-output.ts +1462 -0
  886. package/src/ink/render-to-screen.ts +231 -0
  887. package/src/ink/renderer.ts +178 -0
  888. package/src/ink/root.ts +184 -0
  889. package/src/ink/screen.ts +1486 -0
  890. package/src/ink/searchHighlight.ts +93 -0
  891. package/src/ink/selection.ts +917 -0
  892. package/src/ink/squash-text-nodes.ts +92 -0
  893. package/src/ink/stringWidth.ts +222 -0
  894. package/src/ink/styles.ts +771 -0
  895. package/src/ink/supports-hyperlinks.ts +57 -0
  896. package/src/ink/tabstops.ts +46 -0
  897. package/src/ink/terminal-focus-state.ts +47 -0
  898. package/src/ink/terminal-querier.ts +212 -0
  899. package/src/ink/terminal.ts +248 -0
  900. package/src/ink/termio/ansi.ts +75 -0
  901. package/src/ink/termio/csi.ts +319 -0
  902. package/src/ink/termio/dec.ts +60 -0
  903. package/src/ink/termio/esc.ts +67 -0
  904. package/src/ink/termio/osc.ts +493 -0
  905. package/src/ink/termio/parser.ts +394 -0
  906. package/src/ink/termio/sgr.ts +308 -0
  907. package/src/ink/termio/tokenize.ts +319 -0
  908. package/src/ink/termio/types.ts +236 -0
  909. package/src/ink/termio.ts +42 -0
  910. package/src/ink/useTerminalNotification.ts +126 -0
  911. package/src/ink/warn.ts +9 -0
  912. package/src/ink/widest-line.ts +19 -0
  913. package/src/ink/wrap-text.ts +74 -0
  914. package/src/ink/wrapAnsi.ts +20 -0
  915. package/src/ink.ts +85 -0
  916. package/src/interactiveHelpers.tsx +367 -0
  917. package/src/keybindings/KeybindingContext.tsx +243 -0
  918. package/src/keybindings/KeybindingProviderSetup.tsx +308 -0
  919. package/src/keybindings/defaultBindings.ts +340 -0
  920. package/src/keybindings/loadUserBindings.ts +472 -0
  921. package/src/keybindings/match.ts +120 -0
  922. package/src/keybindings/parser.ts +203 -0
  923. package/src/keybindings/reservedShortcuts.ts +127 -0
  924. package/src/keybindings/resolver.ts +244 -0
  925. package/src/keybindings/schema.ts +236 -0
  926. package/src/keybindings/shortcutFormat.ts +63 -0
  927. package/src/keybindings/template.ts +52 -0
  928. package/src/keybindings/useKeybinding.ts +196 -0
  929. package/src/keybindings/useShortcutDisplay.ts +59 -0
  930. package/src/keybindings/validate.ts +498 -0
  931. package/src/main.tsx +4684 -0
  932. package/src/memdir/findRelevantMemories.ts +141 -0
  933. package/src/memdir/memdir.ts +507 -0
  934. package/src/memdir/memoryAge.ts +53 -0
  935. package/src/memdir/memoryScan.ts +94 -0
  936. package/src/memdir/memoryTypes.ts +271 -0
  937. package/src/memdir/paths.ts +278 -0
  938. package/src/memdir/teamMemPaths.ts +292 -0
  939. package/src/memdir/teamMemPrompts.ts +100 -0
  940. package/src/migrations/migrateAutoUpdatesToSettings.ts +61 -0
  941. package/src/migrations/migrateBypassPermissionsAcceptedToSettings.ts +40 -0
  942. package/src/migrations/migrateEnableAllProjectMcpServersToSettings.ts +118 -0
  943. package/src/migrations/migrateFennecToOpus.ts +45 -0
  944. package/src/migrations/migrateLegacyOpusToCurrent.ts +57 -0
  945. package/src/migrations/migrateOpusToOpus1m.ts +43 -0
  946. package/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +22 -0
  947. package/src/migrations/migrateSonnet1mToSonnet45.ts +48 -0
  948. package/src/migrations/migrateSonnet45ToSonnet46.ts +67 -0
  949. package/src/migrations/resetAutoModeOptInForDefaultOffer.ts +51 -0
  950. package/src/migrations/resetProToOpusDefault.ts +51 -0
  951. package/src/moreright/useMoreRight.tsx +26 -0
  952. package/src/native-ts/color-diff/index.ts +999 -0
  953. package/src/native-ts/file-index/index.ts +370 -0
  954. package/src/native-ts/yoga-layout/enums.ts +134 -0
  955. package/src/native-ts/yoga-layout/index.ts +2578 -0
  956. package/src/outputStyles/loadOutputStylesDir.ts +98 -0
  957. package/src/plugins/builtinPlugins.ts +159 -0
  958. package/src/plugins/bundled/index.ts +23 -0
  959. package/src/projectOnboardingState.ts +83 -0
  960. package/src/query/config.ts +46 -0
  961. package/src/query/deps.ts +40 -0
  962. package/src/query/stopHooks.ts +473 -0
  963. package/src/query/tokenBudget.ts +93 -0
  964. package/src/query.ts +1729 -0
  965. package/src/remote/RemoteSessionManager.ts +343 -0
  966. package/src/remote/SessionsWebSocket.ts +404 -0
  967. package/src/remote/remotePermissionBridge.ts +78 -0
  968. package/src/remote/sdkMessageAdapter.ts +302 -0
  969. package/src/replLauncher.tsx +23 -0
  970. package/src/schemas/hooks.ts +222 -0
  971. package/src/screens/Doctor.tsx +575 -0
  972. package/src/screens/REPL.tsx +5006 -0
  973. package/src/screens/ResumeConversation.tsx +399 -0
  974. package/src/server/createDirectConnectSession.ts +88 -0
  975. package/src/server/directConnectManager.ts +213 -0
  976. package/src/server/types.ts +57 -0
  977. package/src/services/AgentSummary/agentSummary.ts +179 -0
  978. package/src/services/MagicDocs/magicDocs.ts +254 -0
  979. package/src/services/MagicDocs/prompts.ts +127 -0
  980. package/src/services/PromptSuggestion/promptSuggestion.ts +523 -0
  981. package/src/services/PromptSuggestion/speculation.ts +991 -0
  982. package/src/services/SessionMemory/prompts.ts +324 -0
  983. package/src/services/SessionMemory/sessionMemory.ts +495 -0
  984. package/src/services/SessionMemory/sessionMemoryUtils.ts +207 -0
  985. package/src/services/analytics/config.ts +38 -0
  986. package/src/services/analytics/datadog.ts +307 -0
  987. package/src/services/analytics/firstPartyEventLogger.ts +449 -0
  988. package/src/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
  989. package/src/services/analytics/growthbook.ts +1157 -0
  990. package/src/services/analytics/index.ts +173 -0
  991. package/src/services/analytics/metadata.ts +973 -0
  992. package/src/services/analytics/sink.ts +114 -0
  993. package/src/services/analytics/sinkKillswitch.ts +25 -0
  994. package/src/services/api/adminRequests.ts +119 -0
  995. package/src/services/api/bootstrap.ts +142 -0
  996. package/src/services/api/claude.ts +3433 -0
  997. package/src/services/api/client.ts +395 -0
  998. package/src/services/api/dumpPrompts.ts +226 -0
  999. package/src/services/api/emptyUsage.ts +22 -0
  1000. package/src/services/api/errorUtils.ts +260 -0
  1001. package/src/services/api/errors.ts +1207 -0
  1002. package/src/services/api/filesApi.ts +748 -0
  1003. package/src/services/api/firstTokenDate.ts +60 -0
  1004. package/src/services/api/grove.ts +357 -0
  1005. package/src/services/api/logging.ts +788 -0
  1006. package/src/services/api/metricsOptOut.ts +159 -0
  1007. package/src/services/api/overageCreditGrant.ts +137 -0
  1008. package/src/services/api/promptCacheBreakDetection.ts +727 -0
  1009. package/src/services/api/referral.ts +281 -0
  1010. package/src/services/api/sessionIngress.ts +514 -0
  1011. package/src/services/api/ultrareviewQuota.ts +38 -0
  1012. package/src/services/api/usage.ts +63 -0
  1013. package/src/services/api/withRetry.ts +826 -0
  1014. package/src/services/autoDream/autoDream.ts +324 -0
  1015. package/src/services/autoDream/config.ts +21 -0
  1016. package/src/services/autoDream/consolidationLock.ts +140 -0
  1017. package/src/services/autoDream/consolidationPrompt.ts +65 -0
  1018. package/src/services/awaySummary.ts +74 -0
  1019. package/src/services/claudeAiLimits.ts +515 -0
  1020. package/src/services/claudeAiLimitsHook.ts +23 -0
  1021. package/src/services/compact/apiMicrocompact.ts +153 -0
  1022. package/src/services/compact/autoCompact.ts +351 -0
  1023. package/src/services/compact/compact.ts +1705 -0
  1024. package/src/services/compact/compactWarningHook.ts +16 -0
  1025. package/src/services/compact/compactWarningState.ts +18 -0
  1026. package/src/services/compact/grouping.ts +63 -0
  1027. package/src/services/compact/microCompact.ts +530 -0
  1028. package/src/services/compact/postCompactCleanup.ts +77 -0
  1029. package/src/services/compact/prompt.ts +374 -0
  1030. package/src/services/compact/sessionMemoryCompact.ts +630 -0
  1031. package/src/services/compact/timeBasedMCConfig.ts +43 -0
  1032. package/src/services/diagnosticTracking.ts +397 -0
  1033. package/src/services/extractMemories/extractMemories.ts +615 -0
  1034. package/src/services/extractMemories/prompts.ts +154 -0
  1035. package/src/services/internalLogging.ts +90 -0
  1036. package/src/services/lsp/LSPClient.ts +447 -0
  1037. package/src/services/lsp/LSPDiagnosticRegistry.ts +386 -0
  1038. package/src/services/lsp/LSPServerInstance.ts +511 -0
  1039. package/src/services/lsp/LSPServerManager.ts +420 -0
  1040. package/src/services/lsp/config.ts +79 -0
  1041. package/src/services/lsp/manager.ts +289 -0
  1042. package/src/services/lsp/passiveFeedback.ts +328 -0
  1043. package/src/services/mcp/InProcessTransport.ts +63 -0
  1044. package/src/services/mcp/MCPConnectionManager.tsx +73 -0
  1045. package/src/services/mcp/SdkControlTransport.ts +136 -0
  1046. package/src/services/mcp/auth.ts +2465 -0
  1047. package/src/services/mcp/channelAllowlist.ts +76 -0
  1048. package/src/services/mcp/channelNotification.ts +316 -0
  1049. package/src/services/mcp/channelPermissions.ts +240 -0
  1050. package/src/services/mcp/claudeai.ts +164 -0
  1051. package/src/services/mcp/client.ts +3348 -0
  1052. package/src/services/mcp/config.ts +1578 -0
  1053. package/src/services/mcp/elicitationHandler.ts +313 -0
  1054. package/src/services/mcp/envExpansion.ts +38 -0
  1055. package/src/services/mcp/headersHelper.ts +138 -0
  1056. package/src/services/mcp/mcpStringUtils.ts +106 -0
  1057. package/src/services/mcp/normalization.ts +23 -0
  1058. package/src/services/mcp/oauthPort.ts +78 -0
  1059. package/src/services/mcp/officialRegistry.ts +72 -0
  1060. package/src/services/mcp/types.ts +258 -0
  1061. package/src/services/mcp/useManageMCPConnections.ts +1141 -0
  1062. package/src/services/mcp/utils.ts +575 -0
  1063. package/src/services/mcp/vscodeSdkMcp.ts +112 -0
  1064. package/src/services/mcp/xaa.ts +511 -0
  1065. package/src/services/mcp/xaaIdpLogin.ts +487 -0
  1066. package/src/services/mcpServerApproval.tsx +41 -0
  1067. package/src/services/mockRateLimits.ts +882 -0
  1068. package/src/services/notifier.ts +156 -0
  1069. package/src/services/oauth/auth-code-listener.ts +211 -0
  1070. package/src/services/oauth/client.ts +566 -0
  1071. package/src/services/oauth/crypto.ts +23 -0
  1072. package/src/services/oauth/getOauthProfile.ts +53 -0
  1073. package/src/services/oauth/index.ts +198 -0
  1074. package/src/services/plugins/PluginInstallationManager.ts +184 -0
  1075. package/src/services/plugins/pluginCliCommands.ts +344 -0
  1076. package/src/services/plugins/pluginOperations.ts +1088 -0
  1077. package/src/services/policyLimits/index.ts +664 -0
  1078. package/src/services/policyLimits/types.ts +27 -0
  1079. package/src/services/preventSleep.ts +165 -0
  1080. package/src/services/rateLimitMessages.ts +344 -0
  1081. package/src/services/rateLimitMocking.ts +144 -0
  1082. package/src/services/remoteManagedSettings/index.ts +639 -0
  1083. package/src/services/remoteManagedSettings/securityCheck.tsx +74 -0
  1084. package/src/services/remoteManagedSettings/syncCache.ts +112 -0
  1085. package/src/services/remoteManagedSettings/syncCacheState.ts +96 -0
  1086. package/src/services/remoteManagedSettings/types.ts +31 -0
  1087. package/src/services/settingsSync/index.ts +581 -0
  1088. package/src/services/settingsSync/types.ts +67 -0
  1089. package/src/services/teamMemorySync/index.ts +1256 -0
  1090. package/src/services/teamMemorySync/secretScanner.ts +324 -0
  1091. package/src/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
  1092. package/src/services/teamMemorySync/types.ts +156 -0
  1093. package/src/services/teamMemorySync/watcher.ts +387 -0
  1094. package/src/services/tips/tipHistory.ts +17 -0
  1095. package/src/services/tips/tipRegistry.ts +686 -0
  1096. package/src/services/tips/tipScheduler.ts +58 -0
  1097. package/src/services/tokenEstimation.ts +495 -0
  1098. package/src/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
  1099. package/src/services/tools/StreamingToolExecutor.ts +530 -0
  1100. package/src/services/tools/toolExecution.ts +1745 -0
  1101. package/src/services/tools/toolHooks.ts +650 -0
  1102. package/src/services/tools/toolOrchestration.ts +188 -0
  1103. package/src/services/vcr.ts +406 -0
  1104. package/src/services/voice.ts +525 -0
  1105. package/src/services/voiceKeyterms.ts +106 -0
  1106. package/src/services/voiceStreamSTT.ts +544 -0
  1107. package/src/setup.ts +477 -0
  1108. package/src/skills/bundled/batch.ts +124 -0
  1109. package/src/skills/bundled/claudeApi.ts +196 -0
  1110. package/src/skills/bundled/claudeApiContent.ts +75 -0
  1111. package/src/skills/bundled/claudeInChrome.ts +34 -0
  1112. package/src/skills/bundled/debug.ts +103 -0
  1113. package/src/skills/bundled/index.ts +79 -0
  1114. package/src/skills/bundled/keybindings.ts +339 -0
  1115. package/src/skills/bundled/loop.ts +92 -0
  1116. package/src/skills/bundled/loremIpsum.ts +282 -0
  1117. package/src/skills/bundled/remember.ts +82 -0
  1118. package/src/skills/bundled/scheduleRemoteAgents.ts +447 -0
  1119. package/src/skills/bundled/simplify.ts +69 -0
  1120. package/src/skills/bundled/skillify.ts +197 -0
  1121. package/src/skills/bundled/stuck.ts +79 -0
  1122. package/src/skills/bundled/updateConfig.ts +475 -0
  1123. package/src/skills/bundled/verify.ts +30 -0
  1124. package/src/skills/bundled/verifyContent.ts +13 -0
  1125. package/src/skills/bundledSkills.ts +220 -0
  1126. package/src/skills/loadSkillsDir.ts +1086 -0
  1127. package/src/skills/mcpSkillBuilders.ts +44 -0
  1128. package/src/state/AppState.tsx +200 -0
  1129. package/src/state/AppStateStore.ts +569 -0
  1130. package/src/state/onChangeAppState.ts +171 -0
  1131. package/src/state/selectors.ts +76 -0
  1132. package/src/state/store.ts +34 -0
  1133. package/src/state/teammateViewHelpers.ts +141 -0
  1134. package/src/tasks/DreamTask/DreamTask.ts +157 -0
  1135. package/src/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +126 -0
  1136. package/src/tasks/InProcessTeammateTask/types.ts +121 -0
  1137. package/src/tasks/LocalAgentTask/LocalAgentTask.tsx +683 -0
  1138. package/src/tasks/LocalMainSessionTask.ts +479 -0
  1139. package/src/tasks/LocalShellTask/LocalShellTask.tsx +523 -0
  1140. package/src/tasks/LocalShellTask/guards.ts +41 -0
  1141. package/src/tasks/LocalShellTask/killShellTasks.ts +76 -0
  1142. package/src/tasks/RemoteAgentTask/RemoteAgentTask.tsx +856 -0
  1143. package/src/tasks/pillLabel.ts +82 -0
  1144. package/src/tasks/stopTask.ts +100 -0
  1145. package/src/tasks/types.ts +46 -0
  1146. package/src/tasks.ts +39 -0
  1147. package/src/tools/AgentTool/AgentTool.tsx +1398 -0
  1148. package/src/tools/AgentTool/UI.tsx +872 -0
  1149. package/src/tools/AgentTool/agentColorManager.ts +66 -0
  1150. package/src/tools/AgentTool/agentDisplay.ts +104 -0
  1151. package/src/tools/AgentTool/agentMemory.ts +177 -0
  1152. package/src/tools/AgentTool/agentMemorySnapshot.ts +197 -0
  1153. package/src/tools/AgentTool/agentToolUtils.ts +686 -0
  1154. package/src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
  1155. package/src/tools/AgentTool/built-in/exploreAgent.ts +83 -0
  1156. package/src/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
  1157. package/src/tools/AgentTool/built-in/planAgent.ts +92 -0
  1158. package/src/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
  1159. package/src/tools/AgentTool/built-in/verificationAgent.ts +152 -0
  1160. package/src/tools/AgentTool/builtInAgents.ts +72 -0
  1161. package/src/tools/AgentTool/constants.ts +12 -0
  1162. package/src/tools/AgentTool/forkSubagent.ts +210 -0
  1163. package/src/tools/AgentTool/loadAgentsDir.ts +755 -0
  1164. package/src/tools/AgentTool/prompt.ts +287 -0
  1165. package/src/tools/AgentTool/resumeAgent.ts +265 -0
  1166. package/src/tools/AgentTool/runAgent.ts +973 -0
  1167. package/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
  1168. package/src/tools/AskUserQuestionTool/prompt.ts +44 -0
  1169. package/src/tools/BashTool/BashTool.tsx +1144 -0
  1170. package/src/tools/BashTool/BashToolResultMessage.tsx +191 -0
  1171. package/src/tools/BashTool/UI.tsx +185 -0
  1172. package/src/tools/BashTool/bashCommandHelpers.ts +265 -0
  1173. package/src/tools/BashTool/bashPermissions.ts +2621 -0
  1174. package/src/tools/BashTool/bashSecurity.ts +2592 -0
  1175. package/src/tools/BashTool/commandSemantics.ts +140 -0
  1176. package/src/tools/BashTool/commentLabel.ts +13 -0
  1177. package/src/tools/BashTool/destructiveCommandWarning.ts +102 -0
  1178. package/src/tools/BashTool/modeValidation.ts +115 -0
  1179. package/src/tools/BashTool/pathValidation.ts +1303 -0
  1180. package/src/tools/BashTool/prompt.ts +369 -0
  1181. package/src/tools/BashTool/readOnlyValidation.ts +1990 -0
  1182. package/src/tools/BashTool/sedEditParser.ts +322 -0
  1183. package/src/tools/BashTool/sedValidation.ts +684 -0
  1184. package/src/tools/BashTool/shouldUseSandbox.ts +153 -0
  1185. package/src/tools/BashTool/toolName.ts +2 -0
  1186. package/src/tools/BashTool/utils.ts +223 -0
  1187. package/src/tools/BriefTool/BriefTool.ts +204 -0
  1188. package/src/tools/BriefTool/UI.tsx +101 -0
  1189. package/src/tools/BriefTool/attachments.ts +110 -0
  1190. package/src/tools/BriefTool/prompt.ts +22 -0
  1191. package/src/tools/BriefTool/upload.ts +174 -0
  1192. package/src/tools/ConfigTool/ConfigTool.ts +467 -0
  1193. package/src/tools/ConfigTool/UI.tsx +38 -0
  1194. package/src/tools/ConfigTool/constants.ts +1 -0
  1195. package/src/tools/ConfigTool/prompt.ts +93 -0
  1196. package/src/tools/ConfigTool/supportedSettings.ts +211 -0
  1197. package/src/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
  1198. package/src/tools/EnterPlanModeTool/UI.tsx +33 -0
  1199. package/src/tools/EnterPlanModeTool/constants.ts +1 -0
  1200. package/src/tools/EnterPlanModeTool/prompt.ts +170 -0
  1201. package/src/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
  1202. package/src/tools/EnterWorktreeTool/UI.tsx +20 -0
  1203. package/src/tools/EnterWorktreeTool/constants.ts +1 -0
  1204. package/src/tools/EnterWorktreeTool/prompt.ts +30 -0
  1205. package/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
  1206. package/src/tools/ExitPlanModeTool/UI.tsx +82 -0
  1207. package/src/tools/ExitPlanModeTool/constants.ts +2 -0
  1208. package/src/tools/ExitPlanModeTool/prompt.ts +29 -0
  1209. package/src/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
  1210. package/src/tools/ExitWorktreeTool/UI.tsx +25 -0
  1211. package/src/tools/ExitWorktreeTool/constants.ts +1 -0
  1212. package/src/tools/ExitWorktreeTool/prompt.ts +32 -0
  1213. package/src/tools/FileEditTool/FileEditTool.ts +625 -0
  1214. package/src/tools/FileEditTool/UI.tsx +289 -0
  1215. package/src/tools/FileEditTool/constants.ts +11 -0
  1216. package/src/tools/FileEditTool/prompt.ts +28 -0
  1217. package/src/tools/FileEditTool/types.ts +85 -0
  1218. package/src/tools/FileEditTool/utils.ts +775 -0
  1219. package/src/tools/FileReadTool/FileReadTool.ts +1183 -0
  1220. package/src/tools/FileReadTool/UI.tsx +185 -0
  1221. package/src/tools/FileReadTool/imageProcessor.ts +94 -0
  1222. package/src/tools/FileReadTool/limits.ts +92 -0
  1223. package/src/tools/FileReadTool/prompt.ts +49 -0
  1224. package/src/tools/FileWriteTool/FileWriteTool.ts +434 -0
  1225. package/src/tools/FileWriteTool/UI.tsx +405 -0
  1226. package/src/tools/FileWriteTool/prompt.ts +18 -0
  1227. package/src/tools/GlobTool/GlobTool.ts +198 -0
  1228. package/src/tools/GlobTool/UI.tsx +63 -0
  1229. package/src/tools/GlobTool/prompt.ts +7 -0
  1230. package/src/tools/GrepTool/GrepTool.ts +577 -0
  1231. package/src/tools/GrepTool/UI.tsx +201 -0
  1232. package/src/tools/GrepTool/prompt.ts +18 -0
  1233. package/src/tools/LSPTool/LSPTool.ts +860 -0
  1234. package/src/tools/LSPTool/UI.tsx +228 -0
  1235. package/src/tools/LSPTool/formatters.ts +592 -0
  1236. package/src/tools/LSPTool/prompt.ts +21 -0
  1237. package/src/tools/LSPTool/schemas.ts +215 -0
  1238. package/src/tools/LSPTool/symbolContext.ts +90 -0
  1239. package/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
  1240. package/src/tools/ListMcpResourcesTool/UI.tsx +29 -0
  1241. package/src/tools/ListMcpResourcesTool/prompt.ts +20 -0
  1242. package/src/tools/MCPTool/MCPTool.ts +77 -0
  1243. package/src/tools/MCPTool/UI.tsx +403 -0
  1244. package/src/tools/MCPTool/classifyForCollapse.ts +604 -0
  1245. package/src/tools/MCPTool/prompt.ts +3 -0
  1246. package/src/tools/McpAuthTool/McpAuthTool.ts +215 -0
  1247. package/src/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
  1248. package/src/tools/NotebookEditTool/UI.tsx +93 -0
  1249. package/src/tools/NotebookEditTool/constants.ts +2 -0
  1250. package/src/tools/NotebookEditTool/prompt.ts +3 -0
  1251. package/src/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
  1252. package/src/tools/PowerShellTool/UI.tsx +131 -0
  1253. package/src/tools/PowerShellTool/clmTypes.ts +211 -0
  1254. package/src/tools/PowerShellTool/commandSemantics.ts +142 -0
  1255. package/src/tools/PowerShellTool/commonParameters.ts +30 -0
  1256. package/src/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
  1257. package/src/tools/PowerShellTool/gitSafety.ts +176 -0
  1258. package/src/tools/PowerShellTool/modeValidation.ts +404 -0
  1259. package/src/tools/PowerShellTool/pathValidation.ts +2049 -0
  1260. package/src/tools/PowerShellTool/powershellPermissions.ts +1648 -0
  1261. package/src/tools/PowerShellTool/powershellSecurity.ts +1090 -0
  1262. package/src/tools/PowerShellTool/prompt.ts +145 -0
  1263. package/src/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
  1264. package/src/tools/PowerShellTool/toolName.ts +2 -0
  1265. package/src/tools/REPLTool/constants.ts +46 -0
  1266. package/src/tools/REPLTool/primitiveTools.ts +39 -0
  1267. package/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
  1268. package/src/tools/ReadMcpResourceTool/UI.tsx +37 -0
  1269. package/src/tools/ReadMcpResourceTool/prompt.ts +16 -0
  1270. package/src/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
  1271. package/src/tools/RemoteTriggerTool/UI.tsx +17 -0
  1272. package/src/tools/RemoteTriggerTool/prompt.ts +15 -0
  1273. package/src/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
  1274. package/src/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
  1275. package/src/tools/ScheduleCronTool/CronListTool.ts +97 -0
  1276. package/src/tools/ScheduleCronTool/UI.tsx +60 -0
  1277. package/src/tools/ScheduleCronTool/prompt.ts +135 -0
  1278. package/src/tools/SendMessageTool/SendMessageTool.ts +917 -0
  1279. package/src/tools/SendMessageTool/UI.tsx +31 -0
  1280. package/src/tools/SendMessageTool/constants.ts +1 -0
  1281. package/src/tools/SendMessageTool/prompt.ts +49 -0
  1282. package/src/tools/SkillTool/SkillTool.ts +1108 -0
  1283. package/src/tools/SkillTool/UI.tsx +128 -0
  1284. package/src/tools/SkillTool/constants.ts +1 -0
  1285. package/src/tools/SkillTool/prompt.ts +241 -0
  1286. package/src/tools/SleepTool/prompt.ts +17 -0
  1287. package/src/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
  1288. package/src/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
  1289. package/src/tools/TaskCreateTool/constants.ts +1 -0
  1290. package/src/tools/TaskCreateTool/prompt.ts +56 -0
  1291. package/src/tools/TaskGetTool/TaskGetTool.ts +128 -0
  1292. package/src/tools/TaskGetTool/constants.ts +1 -0
  1293. package/src/tools/TaskGetTool/prompt.ts +24 -0
  1294. package/src/tools/TaskListTool/TaskListTool.ts +116 -0
  1295. package/src/tools/TaskListTool/constants.ts +1 -0
  1296. package/src/tools/TaskListTool/prompt.ts +49 -0
  1297. package/src/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
  1298. package/src/tools/TaskOutputTool/constants.ts +1 -0
  1299. package/src/tools/TaskStopTool/TaskStopTool.ts +131 -0
  1300. package/src/tools/TaskStopTool/UI.tsx +41 -0
  1301. package/src/tools/TaskStopTool/prompt.ts +8 -0
  1302. package/src/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
  1303. package/src/tools/TaskUpdateTool/constants.ts +1 -0
  1304. package/src/tools/TaskUpdateTool/prompt.ts +77 -0
  1305. package/src/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
  1306. package/src/tools/TeamCreateTool/UI.tsx +6 -0
  1307. package/src/tools/TeamCreateTool/constants.ts +1 -0
  1308. package/src/tools/TeamCreateTool/prompt.ts +113 -0
  1309. package/src/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
  1310. package/src/tools/TeamDeleteTool/UI.tsx +20 -0
  1311. package/src/tools/TeamDeleteTool/constants.ts +1 -0
  1312. package/src/tools/TeamDeleteTool/prompt.ts +16 -0
  1313. package/src/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
  1314. package/src/tools/TodoWriteTool/constants.ts +1 -0
  1315. package/src/tools/TodoWriteTool/prompt.ts +184 -0
  1316. package/src/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
  1317. package/src/tools/ToolSearchTool/constants.ts +1 -0
  1318. package/src/tools/ToolSearchTool/prompt.ts +121 -0
  1319. package/src/tools/TungstenTool/TungstenTool.js +2 -0
  1320. package/src/tools/TungstenTool/TungstenTool.ts +1 -0
  1321. package/src/tools/WebFetchTool/UI.tsx +72 -0
  1322. package/src/tools/WebFetchTool/WebFetchTool.ts +318 -0
  1323. package/src/tools/WebFetchTool/preapproved.ts +166 -0
  1324. package/src/tools/WebFetchTool/prompt.ts +46 -0
  1325. package/src/tools/WebFetchTool/utils.ts +530 -0
  1326. package/src/tools/WebSearchTool/UI.tsx +101 -0
  1327. package/src/tools/WebSearchTool/WebSearchTool.ts +435 -0
  1328. package/src/tools/WebSearchTool/prompt.ts +34 -0
  1329. package/src/tools/shared/gitOperationTracking.ts +277 -0
  1330. package/src/tools/shared/spawnMultiAgent.ts +1093 -0
  1331. package/src/tools/testing/TestingPermissionTool.tsx +74 -0
  1332. package/src/tools/utils.ts +40 -0
  1333. package/src/tools.ts +389 -0
  1334. package/src/types/command.ts +216 -0
  1335. package/src/types/connectorText.js +5 -0
  1336. package/src/types/connectorText.ts +1 -0
  1337. package/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
  1338. package/src/types/generated/events_mono/common/v1/auth.ts +100 -0
  1339. package/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
  1340. package/src/types/generated/google/protobuf/timestamp.ts +187 -0
  1341. package/src/types/hooks.ts +290 -0
  1342. package/src/types/ids.ts +44 -0
  1343. package/src/types/logs.ts +330 -0
  1344. package/src/types/permissions.ts +441 -0
  1345. package/src/types/plugin.ts +363 -0
  1346. package/src/types/textInputTypes.ts +387 -0
  1347. package/src/upstreamproxy/relay.ts +455 -0
  1348. package/src/upstreamproxy/upstreamproxy.ts +285 -0
  1349. package/src/utils/CircularBuffer.ts +84 -0
  1350. package/src/utils/Cursor.ts +1530 -0
  1351. package/src/utils/QueryGuard.ts +121 -0
  1352. package/src/utils/Shell.ts +474 -0
  1353. package/src/utils/ShellCommand.ts +465 -0
  1354. package/src/utils/abortController.ts +99 -0
  1355. package/src/utils/activityManager.ts +164 -0
  1356. package/src/utils/advisor.ts +145 -0
  1357. package/src/utils/agentContext.ts +178 -0
  1358. package/src/utils/agentId.ts +99 -0
  1359. package/src/utils/agentSwarmsEnabled.ts +44 -0
  1360. package/src/utils/agenticSessionSearch.ts +307 -0
  1361. package/src/utils/analyzeContext.ts +1382 -0
  1362. package/src/utils/ansiToPng.ts +334 -0
  1363. package/src/utils/ansiToSvg.ts +272 -0
  1364. package/src/utils/api.ts +718 -0
  1365. package/src/utils/apiPreconnect.ts +72 -0
  1366. package/src/utils/appleTerminalBackup.ts +124 -0
  1367. package/src/utils/argumentSubstitution.ts +145 -0
  1368. package/src/utils/array.ts +13 -0
  1369. package/src/utils/asciicast.ts +239 -0
  1370. package/src/utils/attachments.ts +3997 -0
  1371. package/src/utils/attribution.ts +393 -0
  1372. package/src/utils/auth.ts +2007 -0
  1373. package/src/utils/authFileDescriptor.ts +196 -0
  1374. package/src/utils/authPortable.ts +19 -0
  1375. package/src/utils/autoModeDenials.ts +26 -0
  1376. package/src/utils/autoRunIssue.tsx +122 -0
  1377. package/src/utils/autoUpdater.ts +562 -0
  1378. package/src/utils/aws.ts +74 -0
  1379. package/src/utils/awsAuthStatusManager.ts +81 -0
  1380. package/src/utils/background/remote/preconditions.ts +235 -0
  1381. package/src/utils/background/remote/remoteSession.ts +98 -0
  1382. package/src/utils/backgroundHousekeeping.ts +94 -0
  1383. package/src/utils/bash/ParsedCommand.ts +318 -0
  1384. package/src/utils/bash/ShellSnapshot.ts +582 -0
  1385. package/src/utils/bash/ast.ts +2679 -0
  1386. package/src/utils/bash/bashParser.ts +4436 -0
  1387. package/src/utils/bash/bashPipeCommand.ts +294 -0
  1388. package/src/utils/bash/commands.ts +1339 -0
  1389. package/src/utils/bash/heredoc.ts +733 -0
  1390. package/src/utils/bash/parser.ts +230 -0
  1391. package/src/utils/bash/prefix.ts +204 -0
  1392. package/src/utils/bash/registry.ts +53 -0
  1393. package/src/utils/bash/shellCompletion.ts +259 -0
  1394. package/src/utils/bash/shellPrefix.ts +28 -0
  1395. package/src/utils/bash/shellQuote.ts +304 -0
  1396. package/src/utils/bash/shellQuoting.ts +128 -0
  1397. package/src/utils/bash/specs/alias.ts +14 -0
  1398. package/src/utils/bash/specs/index.ts +18 -0
  1399. package/src/utils/bash/specs/nohup.ts +13 -0
  1400. package/src/utils/bash/specs/pyright.ts +91 -0
  1401. package/src/utils/bash/specs/sleep.ts +13 -0
  1402. package/src/utils/bash/specs/srun.ts +31 -0
  1403. package/src/utils/bash/specs/time.ts +13 -0
  1404. package/src/utils/bash/specs/timeout.ts +20 -0
  1405. package/src/utils/bash/treeSitterAnalysis.ts +506 -0
  1406. package/src/utils/betas.ts +438 -0
  1407. package/src/utils/billing.ts +78 -0
  1408. package/src/utils/binaryCheck.ts +53 -0
  1409. package/src/utils/browser.ts +68 -0
  1410. package/src/utils/bufferedWriter.ts +100 -0
  1411. package/src/utils/bundledMode.ts +22 -0
  1412. package/src/utils/caCerts.ts +115 -0
  1413. package/src/utils/caCertsConfig.ts +88 -0
  1414. package/src/utils/cachePaths.ts +38 -0
  1415. package/src/utils/classifierApprovals.ts +88 -0
  1416. package/src/utils/classifierApprovalsHook.ts +17 -0
  1417. package/src/utils/claudeCodeHints.ts +193 -0
  1418. package/src/utils/claudeDesktop.ts +152 -0
  1419. package/src/utils/claudeInChrome/chromeNativeHost.ts +527 -0
  1420. package/src/utils/claudeInChrome/common.ts +540 -0
  1421. package/src/utils/claudeInChrome/mcpServer.ts +293 -0
  1422. package/src/utils/claudeInChrome/prompt.ts +83 -0
  1423. package/src/utils/claudeInChrome/setup.ts +400 -0
  1424. package/src/utils/claudeInChrome/setupPortable.ts +233 -0
  1425. package/src/utils/claudeInChrome/toolRendering.tsx +262 -0
  1426. package/src/utils/claudemd.ts +1479 -0
  1427. package/src/utils/cleanup.ts +602 -0
  1428. package/src/utils/cleanupRegistry.ts +25 -0
  1429. package/src/utils/cliArgs.ts +60 -0
  1430. package/src/utils/cliHighlight.ts +54 -0
  1431. package/src/utils/codeIndexing.ts +206 -0
  1432. package/src/utils/collapseBackgroundBashNotifications.ts +84 -0
  1433. package/src/utils/collapseHookSummaries.ts +59 -0
  1434. package/src/utils/collapseReadSearch.ts +1109 -0
  1435. package/src/utils/collapseTeammateShutdowns.ts +55 -0
  1436. package/src/utils/combinedAbortSignal.ts +47 -0
  1437. package/src/utils/commandLifecycle.ts +21 -0
  1438. package/src/utils/commitAttribution.ts +961 -0
  1439. package/src/utils/completionCache.ts +166 -0
  1440. package/src/utils/computerUse/appNames.ts +196 -0
  1441. package/src/utils/computerUse/cleanup.ts +86 -0
  1442. package/src/utils/computerUse/common.ts +61 -0
  1443. package/src/utils/computerUse/computerUseLock.ts +215 -0
  1444. package/src/utils/computerUse/drainRunLoop.ts +79 -0
  1445. package/src/utils/computerUse/escHotkey.ts +54 -0
  1446. package/src/utils/computerUse/executor.ts +658 -0
  1447. package/src/utils/computerUse/gates.ts +72 -0
  1448. package/src/utils/computerUse/hostAdapter.ts +69 -0
  1449. package/src/utils/computerUse/inputLoader.ts +30 -0
  1450. package/src/utils/computerUse/mcpServer.ts +106 -0
  1451. package/src/utils/computerUse/setup.ts +53 -0
  1452. package/src/utils/computerUse/swiftLoader.ts +23 -0
  1453. package/src/utils/computerUse/toolRendering.tsx +125 -0
  1454. package/src/utils/computerUse/wrapper.tsx +336 -0
  1455. package/src/utils/concurrentSessions.ts +204 -0
  1456. package/src/utils/config.ts +1817 -0
  1457. package/src/utils/configConstants.ts +21 -0
  1458. package/src/utils/contentArray.ts +51 -0
  1459. package/src/utils/context.ts +221 -0
  1460. package/src/utils/contextAnalysis.ts +272 -0
  1461. package/src/utils/contextSuggestions.ts +235 -0
  1462. package/src/utils/controlMessageCompat.ts +32 -0
  1463. package/src/utils/conversationRecovery.ts +597 -0
  1464. package/src/utils/cron.ts +308 -0
  1465. package/src/utils/cronJitterConfig.ts +75 -0
  1466. package/src/utils/cronScheduler.ts +565 -0
  1467. package/src/utils/cronTasks.ts +458 -0
  1468. package/src/utils/cronTasksLock.ts +195 -0
  1469. package/src/utils/crossProjectResume.ts +75 -0
  1470. package/src/utils/crypto.ts +13 -0
  1471. package/src/utils/cwd.ts +32 -0
  1472. package/src/utils/debug.ts +268 -0
  1473. package/src/utils/debugFilter.ts +157 -0
  1474. package/src/utils/deepLink/banner.ts +123 -0
  1475. package/src/utils/deepLink/parseDeepLink.ts +170 -0
  1476. package/src/utils/deepLink/protocolHandler.ts +136 -0
  1477. package/src/utils/deepLink/registerProtocol.ts +348 -0
  1478. package/src/utils/deepLink/terminalLauncher.ts +557 -0
  1479. package/src/utils/deepLink/terminalPreference.ts +54 -0
  1480. package/src/utils/desktopDeepLink.ts +236 -0
  1481. package/src/utils/detectRepository.ts +178 -0
  1482. package/src/utils/diagLogs.ts +94 -0
  1483. package/src/utils/diff.ts +177 -0
  1484. package/src/utils/directMemberMessage.ts +69 -0
  1485. package/src/utils/displayTags.ts +51 -0
  1486. package/src/utils/doctorContextWarnings.ts +265 -0
  1487. package/src/utils/doctorDiagnostic.ts +625 -0
  1488. package/src/utils/dxt/helpers.ts +88 -0
  1489. package/src/utils/dxt/zip.ts +226 -0
  1490. package/src/utils/earlyInput.ts +191 -0
  1491. package/src/utils/editor.ts +183 -0
  1492. package/src/utils/effort.ts +329 -0
  1493. package/src/utils/embeddedTools.ts +29 -0
  1494. package/src/utils/env.ts +347 -0
  1495. package/src/utils/envDynamic.ts +151 -0
  1496. package/src/utils/envUtils.ts +183 -0
  1497. package/src/utils/envValidation.ts +38 -0
  1498. package/src/utils/errorLogSink.ts +235 -0
  1499. package/src/utils/errors.ts +238 -0
  1500. package/src/utils/exampleCommands.ts +184 -0
  1501. package/src/utils/execFileNoThrow.ts +150 -0
  1502. package/src/utils/execFileNoThrowPortable.ts +89 -0
  1503. package/src/utils/execSyncWrapper.ts +38 -0
  1504. package/src/utils/exportRenderer.tsx +98 -0
  1505. package/src/utils/extraUsage.ts +23 -0
  1506. package/src/utils/fastMode.ts +532 -0
  1507. package/src/utils/file.ts +584 -0
  1508. package/src/utils/fileHistory.ts +1115 -0
  1509. package/src/utils/fileOperationAnalytics.ts +71 -0
  1510. package/src/utils/filePersistence/filePersistence.ts +287 -0
  1511. package/src/utils/filePersistence/outputsScanner.ts +126 -0
  1512. package/src/utils/fileRead.ts +102 -0
  1513. package/src/utils/fileReadCache.ts +96 -0
  1514. package/src/utils/fileStateCache.ts +142 -0
  1515. package/src/utils/findExecutable.ts +17 -0
  1516. package/src/utils/fingerprint.ts +76 -0
  1517. package/src/utils/forkedAgent.ts +689 -0
  1518. package/src/utils/format.ts +308 -0
  1519. package/src/utils/formatBriefTimestamp.ts +81 -0
  1520. package/src/utils/fpsTracker.ts +47 -0
  1521. package/src/utils/frontmatterParser.ts +370 -0
  1522. package/src/utils/fsOperations.ts +770 -0
  1523. package/src/utils/fullscreen.ts +202 -0
  1524. package/src/utils/generatedFiles.ts +136 -0
  1525. package/src/utils/generators.ts +88 -0
  1526. package/src/utils/genericProcessUtils.ts +184 -0
  1527. package/src/utils/getWorktreePaths.ts +70 -0
  1528. package/src/utils/getWorktreePathsPortable.ts +27 -0
  1529. package/src/utils/ghPrStatus.ts +106 -0
  1530. package/src/utils/git/gitConfigParser.ts +277 -0
  1531. package/src/utils/git/gitFilesystem.ts +699 -0
  1532. package/src/utils/git/gitignore.ts +99 -0
  1533. package/src/utils/git.ts +926 -0
  1534. package/src/utils/gitDiff.ts +532 -0
  1535. package/src/utils/gitSettings.ts +18 -0
  1536. package/src/utils/github/ghAuthStatus.ts +29 -0
  1537. package/src/utils/githubRepoPathMapping.ts +162 -0
  1538. package/src/utils/glob.ts +130 -0
  1539. package/src/utils/gracefulShutdown.ts +529 -0
  1540. package/src/utils/groupToolUses.ts +182 -0
  1541. package/src/utils/handlePromptSubmit.ts +610 -0
  1542. package/src/utils/hash.ts +46 -0
  1543. package/src/utils/headlessProfiler.ts +178 -0
  1544. package/src/utils/heapDumpService.ts +303 -0
  1545. package/src/utils/heatmap.ts +198 -0
  1546. package/src/utils/highlightMatch.tsx +28 -0
  1547. package/src/utils/hooks/AsyncHookRegistry.ts +309 -0
  1548. package/src/utils/hooks/apiQueryHookHelper.ts +141 -0
  1549. package/src/utils/hooks/execAgentHook.ts +339 -0
  1550. package/src/utils/hooks/execHttpHook.ts +242 -0
  1551. package/src/utils/hooks/execPromptHook.ts +211 -0
  1552. package/src/utils/hooks/fileChangedWatcher.ts +191 -0
  1553. package/src/utils/hooks/hookEvents.ts +192 -0
  1554. package/src/utils/hooks/hookHelpers.ts +83 -0
  1555. package/src/utils/hooks/hooksConfigManager.ts +400 -0
  1556. package/src/utils/hooks/hooksConfigSnapshot.ts +133 -0
  1557. package/src/utils/hooks/hooksSettings.ts +271 -0
  1558. package/src/utils/hooks/postSamplingHooks.ts +70 -0
  1559. package/src/utils/hooks/registerFrontmatterHooks.ts +67 -0
  1560. package/src/utils/hooks/registerSkillHooks.ts +64 -0
  1561. package/src/utils/hooks/sessionHooks.ts +447 -0
  1562. package/src/utils/hooks/skillImprovement.ts +267 -0
  1563. package/src/utils/hooks/ssrfGuard.ts +294 -0
  1564. package/src/utils/hooks.ts +5022 -0
  1565. package/src/utils/horizontalScroll.ts +137 -0
  1566. package/src/utils/http.ts +136 -0
  1567. package/src/utils/hyperlink.ts +39 -0
  1568. package/src/utils/iTermBackup.ts +73 -0
  1569. package/src/utils/ide.ts +1494 -0
  1570. package/src/utils/idePathConversion.ts +90 -0
  1571. package/src/utils/idleTimeout.ts +53 -0
  1572. package/src/utils/imagePaste.ts +416 -0
  1573. package/src/utils/imageResizer.ts +880 -0
  1574. package/src/utils/imageStore.ts +167 -0
  1575. package/src/utils/imageValidation.ts +104 -0
  1576. package/src/utils/immediateCommand.ts +15 -0
  1577. package/src/utils/inProcessTeammateHelpers.ts +102 -0
  1578. package/src/utils/ink.ts +26 -0
  1579. package/src/utils/intl.ts +94 -0
  1580. package/src/utils/jetbrains.ts +191 -0
  1581. package/src/utils/json.ts +277 -0
  1582. package/src/utils/jsonRead.ts +16 -0
  1583. package/src/utils/keyboardShortcuts.ts +14 -0
  1584. package/src/utils/lazySchema.ts +8 -0
  1585. package/src/utils/listSessionsImpl.ts +454 -0
  1586. package/src/utils/localInstaller.ts +162 -0
  1587. package/src/utils/lockfile.ts +43 -0
  1588. package/src/utils/log.ts +362 -0
  1589. package/src/utils/logoV2Utils.ts +350 -0
  1590. package/src/utils/mailbox.ts +73 -0
  1591. package/src/utils/managedEnv.ts +199 -0
  1592. package/src/utils/managedEnvConstants.ts +191 -0
  1593. package/src/utils/markdown.ts +381 -0
  1594. package/src/utils/markdownConfigLoader.ts +600 -0
  1595. package/src/utils/mcp/dateTimeParser.ts +121 -0
  1596. package/src/utils/mcp/elicitationValidation.ts +336 -0
  1597. package/src/utils/mcpInstructionsDelta.ts +130 -0
  1598. package/src/utils/mcpOutputStorage.ts +189 -0
  1599. package/src/utils/mcpValidation.ts +208 -0
  1600. package/src/utils/mcpWebSocketTransport.ts +200 -0
  1601. package/src/utils/memoize.ts +269 -0
  1602. package/src/utils/memory/types.ts +12 -0
  1603. package/src/utils/memory/versions.ts +8 -0
  1604. package/src/utils/memoryFileDetection.ts +289 -0
  1605. package/src/utils/messagePredicates.ts +8 -0
  1606. package/src/utils/messageQueueManager.ts +547 -0
  1607. package/src/utils/messages/mappers.ts +290 -0
  1608. package/src/utils/messages/systemInit.ts +96 -0
  1609. package/src/utils/messages.ts +5512 -0
  1610. package/src/utils/model/agent.ts +157 -0
  1611. package/src/utils/model/aliases.ts +25 -0
  1612. package/src/utils/model/antModels.ts +64 -0
  1613. package/src/utils/model/bedrock.ts +265 -0
  1614. package/src/utils/model/check1mAccess.ts +72 -0
  1615. package/src/utils/model/configs.ts +118 -0
  1616. package/src/utils/model/contextWindowUpgradeCheck.ts +47 -0
  1617. package/src/utils/model/deprecation.ts +101 -0
  1618. package/src/utils/model/model.ts +634 -0
  1619. package/src/utils/model/modelAllowlist.ts +170 -0
  1620. package/src/utils/model/modelCapabilities.ts +118 -0
  1621. package/src/utils/model/modelOptions.ts +540 -0
  1622. package/src/utils/model/modelStrings.ts +166 -0
  1623. package/src/utils/model/modelSupportOverrides.ts +50 -0
  1624. package/src/utils/model/providers.ts +46 -0
  1625. package/src/utils/model/validateModel.ts +159 -0
  1626. package/src/utils/modelCost.ts +235 -0
  1627. package/src/utils/modifiers.ts +36 -0
  1628. package/src/utils/mtls.ts +179 -0
  1629. package/src/utils/nativeInstaller/download.ts +523 -0
  1630. package/src/utils/nativeInstaller/index.ts +18 -0
  1631. package/src/utils/nativeInstaller/installer.ts +1708 -0
  1632. package/src/utils/nativeInstaller/packageManagers.ts +336 -0
  1633. package/src/utils/nativeInstaller/pidLock.ts +433 -0
  1634. package/src/utils/notebook.ts +224 -0
  1635. package/src/utils/objectGroupBy.ts +18 -0
  1636. package/src/utils/pasteStore.ts +104 -0
  1637. package/src/utils/path.ts +155 -0
  1638. package/src/utils/pdf.ts +300 -0
  1639. package/src/utils/pdfUtils.ts +70 -0
  1640. package/src/utils/peerAddress.ts +21 -0
  1641. package/src/utils/permissions/PermissionMode.ts +141 -0
  1642. package/src/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
  1643. package/src/utils/permissions/PermissionResult.ts +35 -0
  1644. package/src/utils/permissions/PermissionRule.ts +40 -0
  1645. package/src/utils/permissions/PermissionUpdate.ts +389 -0
  1646. package/src/utils/permissions/PermissionUpdateSchema.ts +78 -0
  1647. package/src/utils/permissions/autoModeState.ts +39 -0
  1648. package/src/utils/permissions/bashClassifier.ts +61 -0
  1649. package/src/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
  1650. package/src/utils/permissions/classifierDecision.ts +98 -0
  1651. package/src/utils/permissions/classifierShared.ts +39 -0
  1652. package/src/utils/permissions/dangerousPatterns.ts +80 -0
  1653. package/src/utils/permissions/denialTracking.ts +45 -0
  1654. package/src/utils/permissions/filesystem.ts +1777 -0
  1655. package/src/utils/permissions/getNextPermissionMode.ts +101 -0
  1656. package/src/utils/permissions/pathValidation.ts +485 -0
  1657. package/src/utils/permissions/permissionExplainer.ts +250 -0
  1658. package/src/utils/permissions/permissionRuleParser.ts +198 -0
  1659. package/src/utils/permissions/permissionSetup.ts +1532 -0
  1660. package/src/utils/permissions/permissions.ts +1486 -0
  1661. package/src/utils/permissions/permissionsLoader.ts +296 -0
  1662. package/src/utils/permissions/shadowedRuleDetection.ts +234 -0
  1663. package/src/utils/permissions/shellRuleMatching.ts +228 -0
  1664. package/src/utils/permissions/yoloClassifier.ts +1495 -0
  1665. package/src/utils/planModeV2.ts +95 -0
  1666. package/src/utils/plans.ts +397 -0
  1667. package/src/utils/platform.ts +150 -0
  1668. package/src/utils/plugins/addDirPluginSettings.ts +71 -0
  1669. package/src/utils/plugins/cacheUtils.ts +196 -0
  1670. package/src/utils/plugins/dependencyResolver.ts +305 -0
  1671. package/src/utils/plugins/fetchTelemetry.ts +135 -0
  1672. package/src/utils/plugins/gitAvailability.ts +69 -0
  1673. package/src/utils/plugins/headlessPluginInstall.ts +174 -0
  1674. package/src/utils/plugins/hintRecommendation.ts +164 -0
  1675. package/src/utils/plugins/installCounts.ts +292 -0
  1676. package/src/utils/plugins/installedPluginsManager.ts +1268 -0
  1677. package/src/utils/plugins/loadPluginAgents.ts +348 -0
  1678. package/src/utils/plugins/loadPluginCommands.ts +946 -0
  1679. package/src/utils/plugins/loadPluginHooks.ts +287 -0
  1680. package/src/utils/plugins/loadPluginOutputStyles.ts +178 -0
  1681. package/src/utils/plugins/lspPluginIntegration.ts +387 -0
  1682. package/src/utils/plugins/lspRecommendation.ts +374 -0
  1683. package/src/utils/plugins/managedPlugins.ts +27 -0
  1684. package/src/utils/plugins/marketplaceHelpers.ts +592 -0
  1685. package/src/utils/plugins/marketplaceManager.ts +2643 -0
  1686. package/src/utils/plugins/mcpPluginIntegration.ts +634 -0
  1687. package/src/utils/plugins/mcpbHandler.ts +968 -0
  1688. package/src/utils/plugins/officialMarketplace.ts +25 -0
  1689. package/src/utils/plugins/officialMarketplaceGcs.ts +216 -0
  1690. package/src/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
  1691. package/src/utils/plugins/orphanedPluginFilter.ts +114 -0
  1692. package/src/utils/plugins/parseMarketplaceInput.ts +162 -0
  1693. package/src/utils/plugins/performStartupChecks.tsx +70 -0
  1694. package/src/utils/plugins/pluginAutoupdate.ts +284 -0
  1695. package/src/utils/plugins/pluginBlocklist.ts +127 -0
  1696. package/src/utils/plugins/pluginDirectories.ts +178 -0
  1697. package/src/utils/plugins/pluginFlagging.ts +208 -0
  1698. package/src/utils/plugins/pluginIdentifier.ts +123 -0
  1699. package/src/utils/plugins/pluginInstallationHelpers.ts +595 -0
  1700. package/src/utils/plugins/pluginLoader.ts +3302 -0
  1701. package/src/utils/plugins/pluginOptionsStorage.ts +400 -0
  1702. package/src/utils/plugins/pluginPolicy.ts +20 -0
  1703. package/src/utils/plugins/pluginStartupCheck.ts +341 -0
  1704. package/src/utils/plugins/pluginVersioning.ts +157 -0
  1705. package/src/utils/plugins/reconciler.ts +265 -0
  1706. package/src/utils/plugins/refresh.ts +215 -0
  1707. package/src/utils/plugins/schemas.ts +1681 -0
  1708. package/src/utils/plugins/validatePlugin.ts +903 -0
  1709. package/src/utils/plugins/walkPluginMarkdown.ts +69 -0
  1710. package/src/utils/plugins/zipCache.ts +406 -0
  1711. package/src/utils/plugins/zipCacheAdapters.ts +164 -0
  1712. package/src/utils/powershell/dangerousCmdlets.ts +185 -0
  1713. package/src/utils/powershell/parser.ts +1804 -0
  1714. package/src/utils/powershell/staticPrefix.ts +316 -0
  1715. package/src/utils/preflightChecks.tsx +151 -0
  1716. package/src/utils/privacyLevel.ts +55 -0
  1717. package/src/utils/process.ts +68 -0
  1718. package/src/utils/processUserInput/processBashCommand.tsx +140 -0
  1719. package/src/utils/processUserInput/processSlashCommand.tsx +922 -0
  1720. package/src/utils/processUserInput/processTextPrompt.ts +100 -0
  1721. package/src/utils/processUserInput/processUserInput.ts +605 -0
  1722. package/src/utils/profilerBase.ts +46 -0
  1723. package/src/utils/promptCategory.ts +49 -0
  1724. package/src/utils/promptEditor.ts +188 -0
  1725. package/src/utils/promptShellExecution.ts +183 -0
  1726. package/src/utils/proxy.ts +426 -0
  1727. package/src/utils/queryContext.ts +179 -0
  1728. package/src/utils/queryHelpers.ts +552 -0
  1729. package/src/utils/queryProfiler.ts +301 -0
  1730. package/src/utils/queueProcessor.ts +95 -0
  1731. package/src/utils/readEditContext.ts +227 -0
  1732. package/src/utils/readFileInRange.ts +383 -0
  1733. package/src/utils/releaseNotes.ts +360 -0
  1734. package/src/utils/renderOptions.ts +77 -0
  1735. package/src/utils/ripgrep.ts +679 -0
  1736. package/src/utils/sandbox/sandbox-adapter.ts +985 -0
  1737. package/src/utils/sandbox/sandbox-ui-utils.ts +12 -0
  1738. package/src/utils/sanitization.ts +91 -0
  1739. package/src/utils/screenshotClipboard.ts +121 -0
  1740. package/src/utils/sdkEventQueue.ts +134 -0
  1741. package/src/utils/secureStorage/fallbackStorage.ts +70 -0
  1742. package/src/utils/secureStorage/index.ts +17 -0
  1743. package/src/utils/secureStorage/keychainPrefetch.ts +116 -0
  1744. package/src/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
  1745. package/src/utils/secureStorage/macOsKeychainStorage.ts +231 -0
  1746. package/src/utils/secureStorage/plainTextStorage.ts +84 -0
  1747. package/src/utils/semanticBoolean.ts +29 -0
  1748. package/src/utils/semanticNumber.ts +36 -0
  1749. package/src/utils/semver.ts +59 -0
  1750. package/src/utils/sequential.ts +56 -0
  1751. package/src/utils/sessionActivity.ts +133 -0
  1752. package/src/utils/sessionEnvVars.ts +22 -0
  1753. package/src/utils/sessionEnvironment.ts +166 -0
  1754. package/src/utils/sessionFileAccessHooks.ts +250 -0
  1755. package/src/utils/sessionIngressAuth.ts +140 -0
  1756. package/src/utils/sessionRestore.ts +551 -0
  1757. package/src/utils/sessionStart.ts +232 -0
  1758. package/src/utils/sessionState.ts +150 -0
  1759. package/src/utils/sessionStorage.ts +5105 -0
  1760. package/src/utils/sessionStoragePortable.ts +793 -0
  1761. package/src/utils/sessionTitle.ts +129 -0
  1762. package/src/utils/sessionUrl.ts +64 -0
  1763. package/src/utils/set.ts +53 -0
  1764. package/src/utils/settings/allErrors.ts +32 -0
  1765. package/src/utils/settings/applySettingsChange.ts +92 -0
  1766. package/src/utils/settings/changeDetector.ts +488 -0
  1767. package/src/utils/settings/constants.ts +202 -0
  1768. package/src/utils/settings/internalWrites.ts +37 -0
  1769. package/src/utils/settings/managedPath.ts +34 -0
  1770. package/src/utils/settings/mdm/constants.ts +81 -0
  1771. package/src/utils/settings/mdm/rawRead.ts +130 -0
  1772. package/src/utils/settings/mdm/settings.ts +316 -0
  1773. package/src/utils/settings/permissionValidation.ts +262 -0
  1774. package/src/utils/settings/pluginOnlyPolicy.ts +60 -0
  1775. package/src/utils/settings/schemaOutput.ts +8 -0
  1776. package/src/utils/settings/settings.ts +1015 -0
  1777. package/src/utils/settings/settingsCache.ts +80 -0
  1778. package/src/utils/settings/toolValidationConfig.ts +103 -0
  1779. package/src/utils/settings/types.ts +1148 -0
  1780. package/src/utils/settings/validateEditTool.ts +45 -0
  1781. package/src/utils/settings/validation.ts +265 -0
  1782. package/src/utils/settings/validationTips.ts +164 -0
  1783. package/src/utils/shell/bashProvider.ts +255 -0
  1784. package/src/utils/shell/outputLimits.ts +14 -0
  1785. package/src/utils/shell/powershellDetection.ts +107 -0
  1786. package/src/utils/shell/powershellProvider.ts +123 -0
  1787. package/src/utils/shell/prefix.ts +367 -0
  1788. package/src/utils/shell/readOnlyCommandValidation.ts +1893 -0
  1789. package/src/utils/shell/resolveDefaultShell.ts +14 -0
  1790. package/src/utils/shell/shellProvider.ts +33 -0
  1791. package/src/utils/shell/shellToolUtils.ts +22 -0
  1792. package/src/utils/shell/specPrefix.ts +241 -0
  1793. package/src/utils/shellConfig.ts +167 -0
  1794. package/src/utils/sideQuery.ts +222 -0
  1795. package/src/utils/sideQuestion.ts +155 -0
  1796. package/src/utils/signal.ts +43 -0
  1797. package/src/utils/sinks.ts +16 -0
  1798. package/src/utils/skills/skillChangeDetector.ts +311 -0
  1799. package/src/utils/slashCommandParsing.ts +60 -0
  1800. package/src/utils/sleep.ts +84 -0
  1801. package/src/utils/sliceAnsi.ts +91 -0
  1802. package/src/utils/slowOperations.ts +286 -0
  1803. package/src/utils/standaloneAgent.ts +23 -0
  1804. package/src/utils/startupProfiler.ts +194 -0
  1805. package/src/utils/staticRender.tsx +116 -0
  1806. package/src/utils/stats.ts +1061 -0
  1807. package/src/utils/statsCache.ts +434 -0
  1808. package/src/utils/status.tsx +362 -0
  1809. package/src/utils/statusNoticeDefinitions.tsx +198 -0
  1810. package/src/utils/statusNoticeHelpers.ts +20 -0
  1811. package/src/utils/stream.ts +76 -0
  1812. package/src/utils/streamJsonStdoutGuard.ts +123 -0
  1813. package/src/utils/streamlinedTransform.ts +201 -0
  1814. package/src/utils/stringUtils.ts +235 -0
  1815. package/src/utils/subprocessEnv.ts +99 -0
  1816. package/src/utils/suggestions/commandSuggestions.ts +567 -0
  1817. package/src/utils/suggestions/directoryCompletion.ts +263 -0
  1818. package/src/utils/suggestions/shellHistoryCompletion.ts +119 -0
  1819. package/src/utils/suggestions/skillUsageTracking.ts +55 -0
  1820. package/src/utils/suggestions/slackChannelSuggestions.ts +209 -0
  1821. package/src/utils/swarm/It2SetupPrompt.tsx +380 -0
  1822. package/src/utils/swarm/backends/ITermBackend.ts +370 -0
  1823. package/src/utils/swarm/backends/InProcessBackend.ts +339 -0
  1824. package/src/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
  1825. package/src/utils/swarm/backends/TmuxBackend.ts +764 -0
  1826. package/src/utils/swarm/backends/detection.ts +128 -0
  1827. package/src/utils/swarm/backends/it2Setup.ts +245 -0
  1828. package/src/utils/swarm/backends/registry.ts +464 -0
  1829. package/src/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
  1830. package/src/utils/swarm/backends/types.ts +311 -0
  1831. package/src/utils/swarm/constants.ts +33 -0
  1832. package/src/utils/swarm/inProcessRunner.ts +1552 -0
  1833. package/src/utils/swarm/leaderPermissionBridge.ts +54 -0
  1834. package/src/utils/swarm/permissionSync.ts +928 -0
  1835. package/src/utils/swarm/reconnection.ts +119 -0
  1836. package/src/utils/swarm/spawnInProcess.ts +328 -0
  1837. package/src/utils/swarm/spawnUtils.ts +146 -0
  1838. package/src/utils/swarm/teamHelpers.ts +683 -0
  1839. package/src/utils/swarm/teammateInit.ts +129 -0
  1840. package/src/utils/swarm/teammateLayoutManager.ts +107 -0
  1841. package/src/utils/swarm/teammateModel.ts +10 -0
  1842. package/src/utils/swarm/teammatePromptAddendum.ts +18 -0
  1843. package/src/utils/systemDirectories.ts +74 -0
  1844. package/src/utils/systemPrompt.ts +123 -0
  1845. package/src/utils/systemPromptType.ts +14 -0
  1846. package/src/utils/systemTheme.ts +119 -0
  1847. package/src/utils/taggedId.ts +54 -0
  1848. package/src/utils/task/TaskOutput.ts +390 -0
  1849. package/src/utils/task/diskOutput.ts +451 -0
  1850. package/src/utils/task/framework.ts +308 -0
  1851. package/src/utils/task/outputFormatting.ts +38 -0
  1852. package/src/utils/task/sdkProgress.ts +36 -0
  1853. package/src/utils/tasks.ts +862 -0
  1854. package/src/utils/teamDiscovery.ts +81 -0
  1855. package/src/utils/teamMemoryOps.ts +88 -0
  1856. package/src/utils/teammate.ts +292 -0
  1857. package/src/utils/teammateContext.ts +96 -0
  1858. package/src/utils/teammateMailbox.ts +1183 -0
  1859. package/src/utils/telemetry/betaSessionTracing.ts +491 -0
  1860. package/src/utils/telemetry/bigqueryExporter.ts +252 -0
  1861. package/src/utils/telemetry/events.ts +75 -0
  1862. package/src/utils/telemetry/instrumentation.ts +825 -0
  1863. package/src/utils/telemetry/logger.ts +26 -0
  1864. package/src/utils/telemetry/perfettoTracing.ts +1120 -0
  1865. package/src/utils/telemetry/pluginTelemetry.ts +289 -0
  1866. package/src/utils/telemetry/sessionTracing.ts +927 -0
  1867. package/src/utils/telemetry/skillLoadedEvent.ts +39 -0
  1868. package/src/utils/telemetryAttributes.ts +71 -0
  1869. package/src/utils/teleport/api.ts +466 -0
  1870. package/src/utils/teleport/environmentSelection.ts +77 -0
  1871. package/src/utils/teleport/environments.ts +120 -0
  1872. package/src/utils/teleport/gitBundle.ts +292 -0
  1873. package/src/utils/teleport.tsx +1226 -0
  1874. package/src/utils/tempfile.ts +31 -0
  1875. package/src/utils/terminal.ts +131 -0
  1876. package/src/utils/terminalPanel.ts +191 -0
  1877. package/src/utils/textHighlighting.ts +166 -0
  1878. package/src/utils/theme.ts +639 -0
  1879. package/src/utils/thinking.ts +162 -0
  1880. package/src/utils/timeouts.ts +39 -0
  1881. package/src/utils/tmuxSocket.ts +427 -0
  1882. package/src/utils/todo/types.ts +18 -0
  1883. package/src/utils/tokenBudget.ts +73 -0
  1884. package/src/utils/tokens.ts +261 -0
  1885. package/src/utils/toolErrors.ts +132 -0
  1886. package/src/utils/toolPool.ts +79 -0
  1887. package/src/utils/toolResultStorage.ts +1040 -0
  1888. package/src/utils/toolSchemaCache.ts +26 -0
  1889. package/src/utils/toolSearch.ts +756 -0
  1890. package/src/utils/transcriptSearch.ts +202 -0
  1891. package/src/utils/treeify.ts +170 -0
  1892. package/src/utils/truncate.ts +179 -0
  1893. package/src/utils/ultraplan/ccrSession.ts +349 -0
  1894. package/src/utils/ultraplan/keyword.ts +127 -0
  1895. package/src/utils/ultraplan/prompt.txt +1 -0
  1896. package/src/utils/unaryLogging.ts +39 -0
  1897. package/src/utils/undercover.ts +89 -0
  1898. package/src/utils/user.ts +194 -0
  1899. package/src/utils/userAgent.ts +10 -0
  1900. package/src/utils/userPromptKeywords.ts +27 -0
  1901. package/src/utils/uuid.ts +27 -0
  1902. package/src/utils/warningHandler.ts +121 -0
  1903. package/src/utils/which.ts +82 -0
  1904. package/src/utils/windowsPaths.ts +173 -0
  1905. package/src/utils/withResolvers.ts +13 -0
  1906. package/src/utils/words.ts +800 -0
  1907. package/src/utils/workloadContext.ts +57 -0
  1908. package/src/utils/worktree.ts +1519 -0
  1909. package/src/utils/worktreeModeEnabled.ts +11 -0
  1910. package/src/utils/xdg.ts +65 -0
  1911. package/src/utils/xml.ts +16 -0
  1912. package/src/utils/yaml.ts +15 -0
  1913. package/src/utils/zodToJsonSchema.ts +23 -0
  1914. package/src/vim/motions.ts +82 -0
  1915. package/src/vim/operators.ts +556 -0
  1916. package/src/vim/textObjects.ts +186 -0
  1917. package/src/vim/transitions.ts +490 -0
  1918. package/src/vim/types.ts +199 -0
  1919. package/src/voice/voiceModeEnabled.ts +54 -0
  1920. package/start.js +1 -0
@@ -0,0 +1,683 @@
1
+ import { getSdkAgentProgressSummariesEnabled } from '../../bootstrap/state.js';
2
+ import { OUTPUT_FILE_TAG, STATUS_TAG, SUMMARY_TAG, TASK_ID_TAG, TASK_NOTIFICATION_TAG, TOOL_USE_ID_TAG, WORKTREE_BRANCH_TAG, WORKTREE_PATH_TAG, WORKTREE_TAG } from '../../constants/xml.js';
3
+ import { abortSpeculation } from '../../services/PromptSuggestion/speculation.js';
4
+ import type { AppState } from '../../state/AppState.js';
5
+ import type { SetAppState, Task, TaskStateBase } from '../../Task.js';
6
+ import { createTaskStateBase } from '../../Task.js';
7
+ import type { Tools } from '../../Tool.js';
8
+ import { findToolByName } from '../../Tool.js';
9
+ import type { AgentToolResult } from '../../tools/AgentTool/agentToolUtils.js';
10
+ import type { AgentDefinition } from '../../tools/AgentTool/loadAgentsDir.js';
11
+ import { SYNTHETIC_OUTPUT_TOOL_NAME } from '../../tools/SyntheticOutputTool/SyntheticOutputTool.js';
12
+ import { asAgentId } from '../../types/ids.js';
13
+ import type { Message } from '../../types/message.js';
14
+ import { createAbortController, createChildAbortController } from '../../utils/abortController.js';
15
+ import { registerCleanup } from '../../utils/cleanupRegistry.js';
16
+ import { getToolSearchOrReadInfo } from '../../utils/collapseReadSearch.js';
17
+ import { enqueuePendingNotification } from '../../utils/messageQueueManager.js';
18
+ import { getAgentTranscriptPath } from '../../utils/sessionStorage.js';
19
+ import { evictTaskOutput, getTaskOutputPath, initTaskOutputAsSymlink } from '../../utils/task/diskOutput.js';
20
+ import { PANEL_GRACE_MS, registerTask, updateTaskState } from '../../utils/task/framework.js';
21
+ import { emitTaskProgress } from '../../utils/task/sdkProgress.js';
22
+ import type { TaskState } from '../types.js';
23
+ export type ToolActivity = {
24
+ toolName: string;
25
+ input: Record<string, unknown>;
26
+ /** Pre-computed activity description from the tool, e.g. "Reading src/foo.ts" */
27
+ activityDescription?: string;
28
+ /** Pre-computed: true if this is a search operation (Grep, Glob, etc.) */
29
+ isSearch?: boolean;
30
+ /** Pre-computed: true if this is a read operation (Read, cat, etc.) */
31
+ isRead?: boolean;
32
+ };
33
+ export type AgentProgress = {
34
+ toolUseCount: number;
35
+ tokenCount: number;
36
+ lastActivity?: ToolActivity;
37
+ recentActivities?: ToolActivity[];
38
+ summary?: string;
39
+ };
40
+ const MAX_RECENT_ACTIVITIES = 5;
41
+ export type ProgressTracker = {
42
+ toolUseCount: number;
43
+ // Track input and output separately to avoid double-counting.
44
+ // input_tokens in Claude API is cumulative per turn (includes all previous context),
45
+ // so we keep the latest value. output_tokens is per-turn, so we sum those.
46
+ latestInputTokens: number;
47
+ cumulativeOutputTokens: number;
48
+ recentActivities: ToolActivity[];
49
+ };
50
+ export function createProgressTracker(): ProgressTracker {
51
+ return {
52
+ toolUseCount: 0,
53
+ latestInputTokens: 0,
54
+ cumulativeOutputTokens: 0,
55
+ recentActivities: []
56
+ };
57
+ }
58
+ export function getTokenCountFromTracker(tracker: ProgressTracker): number {
59
+ return tracker.latestInputTokens + tracker.cumulativeOutputTokens;
60
+ }
61
+
62
+ /**
63
+ * Resolver function that returns a human-readable activity description
64
+ * for a given tool name and input. Used to pre-compute descriptions
65
+ * from Tool.getActivityDescription() at recording time.
66
+ */
67
+ export type ActivityDescriptionResolver = (toolName: string, input: Record<string, unknown>) => string | undefined;
68
+ export function updateProgressFromMessage(tracker: ProgressTracker, message: Message, resolveActivityDescription?: ActivityDescriptionResolver, tools?: Tools): void {
69
+ if (message.type !== 'assistant') {
70
+ return;
71
+ }
72
+ const usage = message.message.usage;
73
+ // Keep latest input (it's cumulative in the API), sum outputs
74
+ tracker.latestInputTokens = usage.input_tokens + (usage.cache_creation_input_tokens ?? 0) + (usage.cache_read_input_tokens ?? 0);
75
+ tracker.cumulativeOutputTokens += usage.output_tokens;
76
+ for (const content of message.message.content) {
77
+ if (content.type === 'tool_use') {
78
+ tracker.toolUseCount++;
79
+ // Omit StructuredOutput from preview - it's an internal tool
80
+ if (content.name !== SYNTHETIC_OUTPUT_TOOL_NAME) {
81
+ const input = content.input as Record<string, unknown>;
82
+ const classification = tools ? getToolSearchOrReadInfo(content.name, input, tools) : undefined;
83
+ tracker.recentActivities.push({
84
+ toolName: content.name,
85
+ input,
86
+ activityDescription: resolveActivityDescription?.(content.name, input),
87
+ isSearch: classification?.isSearch,
88
+ isRead: classification?.isRead
89
+ });
90
+ }
91
+ }
92
+ }
93
+ while (tracker.recentActivities.length > MAX_RECENT_ACTIVITIES) {
94
+ tracker.recentActivities.shift();
95
+ }
96
+ }
97
+ export function getProgressUpdate(tracker: ProgressTracker): AgentProgress {
98
+ return {
99
+ toolUseCount: tracker.toolUseCount,
100
+ tokenCount: getTokenCountFromTracker(tracker),
101
+ lastActivity: tracker.recentActivities.length > 0 ? tracker.recentActivities[tracker.recentActivities.length - 1] : undefined,
102
+ recentActivities: [...tracker.recentActivities]
103
+ };
104
+ }
105
+
106
+ /**
107
+ * Creates an ActivityDescriptionResolver from a tools list.
108
+ * Looks up the tool by name and calls getActivityDescription if available.
109
+ */
110
+ export function createActivityDescriptionResolver(tools: Tools): ActivityDescriptionResolver {
111
+ return (toolName, input) => {
112
+ const tool = findToolByName(tools, toolName);
113
+ return tool?.getActivityDescription?.(input) ?? undefined;
114
+ };
115
+ }
116
+ export type LocalAgentTaskState = TaskStateBase & {
117
+ type: 'local_agent';
118
+ agentId: string;
119
+ prompt: string;
120
+ selectedAgent?: AgentDefinition;
121
+ agentType: string;
122
+ model?: string;
123
+ abortController?: AbortController;
124
+ unregisterCleanup?: () => void;
125
+ error?: string;
126
+ result?: AgentToolResult;
127
+ progress?: AgentProgress;
128
+ retrieved: boolean;
129
+ messages?: Message[];
130
+ // Track what we last reported for computing deltas
131
+ lastReportedToolCount: number;
132
+ lastReportedTokenCount: number;
133
+ // Whether the task has been backgrounded (false = foreground running, true = backgrounded)
134
+ isBackgrounded: boolean;
135
+ // Messages queued mid-turn via SendMessage, drained at tool-round boundaries
136
+ pendingMessages: string[];
137
+ // UI is holding this task: blocks eviction, enables stream-append, triggers
138
+ // disk bootstrap. Set by enterTeammateView. Separate from viewingAgentTaskId
139
+ // (which is "what am I LOOKING at") — retain is "what am I HOLDING."
140
+ retain: boolean;
141
+ // Bootstrap has read the sidechain JSONL and UUID-merged into messages.
142
+ // One-shot per retain cycle; stream appends from there.
143
+ diskLoaded: boolean;
144
+ // Panel visibility deadline. undefined = no deadline (running or retained);
145
+ // timestamp = hide + GC-eligible after this time. Set at terminal transition
146
+ // and on unselect; cleared on retain.
147
+ evictAfter?: number;
148
+ };
149
+ export function isLocalAgentTask(task: unknown): task is LocalAgentTaskState {
150
+ return typeof task === 'object' && task !== null && 'type' in task && task.type === 'local_agent';
151
+ }
152
+
153
+ /**
154
+ * A local_agent task that the CoordinatorTaskPanel manages (not main-session).
155
+ * For ants, these render in the panel instead of the background-task pill.
156
+ * This is the ONE predicate that all pill/panel filters must agree on — if
157
+ * the gate changes, change it here.
158
+ */
159
+ export function isPanelAgentTask(t: unknown): t is LocalAgentTaskState {
160
+ return isLocalAgentTask(t) && t.agentType !== 'main-session';
161
+ }
162
+ export function queuePendingMessage(taskId: string, msg: string, setAppState: (f: (prev: AppState) => AppState) => void): void {
163
+ updateTaskState<LocalAgentTaskState>(taskId, setAppState, task => ({
164
+ ...task,
165
+ pendingMessages: [...task.pendingMessages, msg]
166
+ }));
167
+ }
168
+
169
+ /**
170
+ * Append a message to task.messages so it appears in the viewed transcript
171
+ * immediately. Caller constructs the Message (breaks the messages.ts cycle).
172
+ * queuePendingMessage and resumeAgentBackground route the prompt to the
173
+ * agent's API input but don't touch the display.
174
+ */
175
+ export function appendMessageToLocalAgent(taskId: string, message: Message, setAppState: (f: (prev: AppState) => AppState) => void): void {
176
+ updateTaskState<LocalAgentTaskState>(taskId, setAppState, task => ({
177
+ ...task,
178
+ messages: [...(task.messages ?? []), message]
179
+ }));
180
+ }
181
+ export function drainPendingMessages(taskId: string, getAppState: () => AppState, setAppState: (f: (prev: AppState) => AppState) => void): string[] {
182
+ const task = getAppState().tasks[taskId];
183
+ if (!isLocalAgentTask(task) || task.pendingMessages.length === 0) {
184
+ return [];
185
+ }
186
+ const drained = task.pendingMessages;
187
+ updateTaskState<LocalAgentTaskState>(taskId, setAppState, t => ({
188
+ ...t,
189
+ pendingMessages: []
190
+ }));
191
+ return drained;
192
+ }
193
+
194
+ /**
195
+ * Enqueue an agent notification to the message queue.
196
+ */
197
+ export function enqueueAgentNotification({
198
+ taskId,
199
+ description,
200
+ status,
201
+ error,
202
+ setAppState,
203
+ finalMessage,
204
+ usage,
205
+ toolUseId,
206
+ worktreePath,
207
+ worktreeBranch
208
+ }: {
209
+ taskId: string;
210
+ description: string;
211
+ status: 'completed' | 'failed' | 'killed';
212
+ error?: string;
213
+ setAppState: SetAppState;
214
+ finalMessage?: string;
215
+ usage?: {
216
+ totalTokens: number;
217
+ toolUses: number;
218
+ durationMs: number;
219
+ };
220
+ toolUseId?: string;
221
+ worktreePath?: string;
222
+ worktreeBranch?: string;
223
+ }): void {
224
+ // Atomically check and set notified flag to prevent duplicate notifications.
225
+ // If the task was already marked as notified (e.g., by TaskStopTool), skip
226
+ // enqueueing to avoid sending redundant messages to the model.
227
+ let shouldEnqueue = false;
228
+ updateTaskState<LocalAgentTaskState>(taskId, setAppState, task => {
229
+ if (task.notified) {
230
+ return task;
231
+ }
232
+ shouldEnqueue = true;
233
+ return {
234
+ ...task,
235
+ notified: true
236
+ };
237
+ });
238
+ if (!shouldEnqueue) {
239
+ return;
240
+ }
241
+
242
+ // Abort any active speculation — background task state changed, so speculated
243
+ // results may reference stale task output. The prompt suggestion text is
244
+ // preserved; only the pre-computed response is discarded.
245
+ abortSpeculation(setAppState);
246
+ const summary = status === 'completed' ? `Agent "${description}" completed` : status === 'failed' ? `Agent "${description}" failed: ${error || 'Unknown error'}` : `Agent "${description}" was stopped`;
247
+ const outputPath = getTaskOutputPath(taskId);
248
+ const toolUseIdLine = toolUseId ? `\n<${TOOL_USE_ID_TAG}>${toolUseId}</${TOOL_USE_ID_TAG}>` : '';
249
+ const resultSection = finalMessage ? `\n<result>${finalMessage}</result>` : '';
250
+ const usageSection = usage ? `\n<usage><total_tokens>${usage.totalTokens}</total_tokens><tool_uses>${usage.toolUses}</tool_uses><duration_ms>${usage.durationMs}</duration_ms></usage>` : '';
251
+ const worktreeSection = worktreePath ? `\n<${WORKTREE_TAG}><${WORKTREE_PATH_TAG}>${worktreePath}</${WORKTREE_PATH_TAG}>${worktreeBranch ? `<${WORKTREE_BRANCH_TAG}>${worktreeBranch}</${WORKTREE_BRANCH_TAG}>` : ''}</${WORKTREE_TAG}>` : '';
252
+ const message = `<${TASK_NOTIFICATION_TAG}>
253
+ <${TASK_ID_TAG}>${taskId}</${TASK_ID_TAG}>${toolUseIdLine}
254
+ <${OUTPUT_FILE_TAG}>${outputPath}</${OUTPUT_FILE_TAG}>
255
+ <${STATUS_TAG}>${status}</${STATUS_TAG}>
256
+ <${SUMMARY_TAG}>${summary}</${SUMMARY_TAG}>${resultSection}${usageSection}${worktreeSection}
257
+ </${TASK_NOTIFICATION_TAG}>`;
258
+ enqueuePendingNotification({
259
+ value: message,
260
+ mode: 'task-notification'
261
+ });
262
+ }
263
+
264
+ /**
265
+ * LocalAgentTask - Handles background agent execution.
266
+ *
267
+ * Replaces the AsyncAgent implementation from src/tools/AgentTool/asyncAgentUtils.ts
268
+ * with a unified Task interface.
269
+ */
270
+ export const LocalAgentTask: Task = {
271
+ name: 'LocalAgentTask',
272
+ type: 'local_agent',
273
+ async kill(taskId, setAppState) {
274
+ killAsyncAgent(taskId, setAppState);
275
+ }
276
+ };
277
+
278
+ /**
279
+ * Kill an agent task. No-op if already killed/completed.
280
+ */
281
+ export function killAsyncAgent(taskId: string, setAppState: SetAppState): void {
282
+ let killed = false;
283
+ updateTaskState<LocalAgentTaskState>(taskId, setAppState, task => {
284
+ if (task.status !== 'running') {
285
+ return task;
286
+ }
287
+ killed = true;
288
+ task.abortController?.abort();
289
+ task.unregisterCleanup?.();
290
+ return {
291
+ ...task,
292
+ status: 'killed',
293
+ endTime: Date.now(),
294
+ evictAfter: task.retain ? undefined : Date.now() + PANEL_GRACE_MS,
295
+ abortController: undefined,
296
+ unregisterCleanup: undefined,
297
+ selectedAgent: undefined
298
+ };
299
+ });
300
+ if (killed) {
301
+ void evictTaskOutput(taskId);
302
+ }
303
+ }
304
+
305
+ /**
306
+ * Kill all running agent tasks.
307
+ * Used by ESC cancellation in coordinator mode to stop all subagents.
308
+ */
309
+ export function killAllRunningAgentTasks(tasks: Record<string, TaskState>, setAppState: SetAppState): void {
310
+ for (const [taskId, task] of Object.entries(tasks)) {
311
+ if (task.type === 'local_agent' && task.status === 'running') {
312
+ killAsyncAgent(taskId, setAppState);
313
+ }
314
+ }
315
+ }
316
+
317
+ /**
318
+ * Mark a task as notified without enqueueing a notification.
319
+ * Used by chat:killAgents bulk kill to suppress per-agent async notifications
320
+ * when a single aggregate message is sent instead.
321
+ */
322
+ export function markAgentsNotified(taskId: string, setAppState: SetAppState): void {
323
+ updateTaskState<LocalAgentTaskState>(taskId, setAppState, task => {
324
+ if (task.notified) {
325
+ return task;
326
+ }
327
+ return {
328
+ ...task,
329
+ notified: true
330
+ };
331
+ });
332
+ }
333
+
334
+ /**
335
+ * Update progress for an agent task.
336
+ * Preserves the existing summary field so that background summarization
337
+ * results are not clobbered by progress updates from assistant messages.
338
+ */
339
+ export function updateAgentProgress(taskId: string, progress: AgentProgress, setAppState: SetAppState): void {
340
+ updateTaskState<LocalAgentTaskState>(taskId, setAppState, task => {
341
+ if (task.status !== 'running') {
342
+ return task;
343
+ }
344
+ const existingSummary = task.progress?.summary;
345
+ return {
346
+ ...task,
347
+ progress: existingSummary ? {
348
+ ...progress,
349
+ summary: existingSummary
350
+ } : progress
351
+ };
352
+ });
353
+ }
354
+
355
+ /**
356
+ * Update the background summary for an agent task.
357
+ * Called by the periodic summarization service to store a 1-2 sentence progress summary.
358
+ */
359
+ export function updateAgentSummary(taskId: string, summary: string, setAppState: SetAppState): void {
360
+ let captured: {
361
+ tokenCount: number;
362
+ toolUseCount: number;
363
+ startTime: number;
364
+ toolUseId: string | undefined;
365
+ } | null = null;
366
+ updateTaskState<LocalAgentTaskState>(taskId, setAppState, task => {
367
+ if (task.status !== 'running') {
368
+ return task;
369
+ }
370
+ captured = {
371
+ tokenCount: task.progress?.tokenCount ?? 0,
372
+ toolUseCount: task.progress?.toolUseCount ?? 0,
373
+ startTime: task.startTime,
374
+ toolUseId: task.toolUseId
375
+ };
376
+ return {
377
+ ...task,
378
+ progress: {
379
+ ...task.progress,
380
+ toolUseCount: task.progress?.toolUseCount ?? 0,
381
+ tokenCount: task.progress?.tokenCount ?? 0,
382
+ summary
383
+ }
384
+ };
385
+ });
386
+
387
+ // Emit summary to SDK consumers (e.g. VS Code subagent panel). No-op in TUI.
388
+ // Gate on the SDK option so coordinator-mode sessions without the flag don't
389
+ // leak summary events to consumers who didn't opt in.
390
+ if (captured && getSdkAgentProgressSummariesEnabled()) {
391
+ const {
392
+ tokenCount,
393
+ toolUseCount,
394
+ startTime,
395
+ toolUseId
396
+ } = captured;
397
+ emitTaskProgress({
398
+ taskId,
399
+ toolUseId,
400
+ description: summary,
401
+ startTime,
402
+ totalTokens: tokenCount,
403
+ toolUses: toolUseCount,
404
+ summary
405
+ });
406
+ }
407
+ }
408
+
409
+ /**
410
+ * Complete an agent task with result.
411
+ */
412
+ export function completeAgentTask(result: AgentToolResult, setAppState: SetAppState): void {
413
+ const taskId = result.agentId;
414
+ updateTaskState<LocalAgentTaskState>(taskId, setAppState, task => {
415
+ if (task.status !== 'running') {
416
+ return task;
417
+ }
418
+ task.unregisterCleanup?.();
419
+ return {
420
+ ...task,
421
+ status: 'completed',
422
+ result,
423
+ endTime: Date.now(),
424
+ evictAfter: task.retain ? undefined : Date.now() + PANEL_GRACE_MS,
425
+ abortController: undefined,
426
+ unregisterCleanup: undefined,
427
+ selectedAgent: undefined
428
+ };
429
+ });
430
+ void evictTaskOutput(taskId);
431
+ // Note: Notification is sent by AgentTool via enqueueAgentNotification
432
+ }
433
+
434
+ /**
435
+ * Fail an agent task with error.
436
+ */
437
+ export function failAgentTask(taskId: string, error: string, setAppState: SetAppState): void {
438
+ updateTaskState<LocalAgentTaskState>(taskId, setAppState, task => {
439
+ if (task.status !== 'running') {
440
+ return task;
441
+ }
442
+ task.unregisterCleanup?.();
443
+ return {
444
+ ...task,
445
+ status: 'failed',
446
+ error,
447
+ endTime: Date.now(),
448
+ evictAfter: task.retain ? undefined : Date.now() + PANEL_GRACE_MS,
449
+ abortController: undefined,
450
+ unregisterCleanup: undefined,
451
+ selectedAgent: undefined
452
+ };
453
+ });
454
+ void evictTaskOutput(taskId);
455
+ // Note: Notification is sent by AgentTool via enqueueAgentNotification
456
+ }
457
+
458
+ /**
459
+ * Register an agent task.
460
+ * Called by AgentTool to create a new background agent.
461
+ *
462
+ * @param parentAbortController - Optional parent abort controller. If provided,
463
+ * the agent's abort controller will be a child that auto-aborts when parent aborts.
464
+ * This ensures subagents are aborted when their parent (e.g., in-process teammate) aborts.
465
+ */
466
+ export function registerAsyncAgent({
467
+ agentId,
468
+ description,
469
+ prompt,
470
+ selectedAgent,
471
+ setAppState,
472
+ parentAbortController,
473
+ toolUseId
474
+ }: {
475
+ agentId: string;
476
+ description: string;
477
+ prompt: string;
478
+ selectedAgent: AgentDefinition;
479
+ setAppState: SetAppState;
480
+ parentAbortController?: AbortController;
481
+ toolUseId?: string;
482
+ }): LocalAgentTaskState {
483
+ void initTaskOutputAsSymlink(agentId, getAgentTranscriptPath(asAgentId(agentId)));
484
+
485
+ // Create abort controller - if parent provided, create child that auto-aborts with parent
486
+ const abortController = parentAbortController ? createChildAbortController(parentAbortController) : createAbortController();
487
+ const taskState: LocalAgentTaskState = {
488
+ ...createTaskStateBase(agentId, 'local_agent', description, toolUseId),
489
+ type: 'local_agent',
490
+ status: 'running',
491
+ agentId,
492
+ prompt,
493
+ selectedAgent,
494
+ agentType: selectedAgent.agentType ?? 'general-purpose',
495
+ abortController,
496
+ retrieved: false,
497
+ lastReportedToolCount: 0,
498
+ lastReportedTokenCount: 0,
499
+ isBackgrounded: true,
500
+ // registerAsyncAgent immediately backgrounds
501
+ pendingMessages: [],
502
+ retain: false,
503
+ diskLoaded: false
504
+ };
505
+
506
+ // Register cleanup handler
507
+ const unregisterCleanup = registerCleanup(async () => {
508
+ killAsyncAgent(agentId, setAppState);
509
+ });
510
+ taskState.unregisterCleanup = unregisterCleanup;
511
+
512
+ // Register task in AppState
513
+ registerTask(taskState, setAppState);
514
+ return taskState;
515
+ }
516
+
517
+ // Map of taskId -> resolve function for background signals
518
+ // When backgroundAgentTask is called, it resolves the corresponding promise
519
+ const backgroundSignalResolvers = new Map<string, () => void>();
520
+
521
+ /**
522
+ * Register a foreground agent task that could be backgrounded later.
523
+ * Called when an agent has been running long enough to show the BackgroundHint.
524
+ * @returns object with taskId and backgroundSignal promise
525
+ */
526
+ export function registerAgentForeground({
527
+ agentId,
528
+ description,
529
+ prompt,
530
+ selectedAgent,
531
+ setAppState,
532
+ autoBackgroundMs,
533
+ toolUseId
534
+ }: {
535
+ agentId: string;
536
+ description: string;
537
+ prompt: string;
538
+ selectedAgent: AgentDefinition;
539
+ setAppState: SetAppState;
540
+ autoBackgroundMs?: number;
541
+ toolUseId?: string;
542
+ }): {
543
+ taskId: string;
544
+ backgroundSignal: Promise<void>;
545
+ cancelAutoBackground?: () => void;
546
+ } {
547
+ void initTaskOutputAsSymlink(agentId, getAgentTranscriptPath(asAgentId(agentId)));
548
+ const abortController = createAbortController();
549
+ const unregisterCleanup = registerCleanup(async () => {
550
+ killAsyncAgent(agentId, setAppState);
551
+ });
552
+ const taskState: LocalAgentTaskState = {
553
+ ...createTaskStateBase(agentId, 'local_agent', description, toolUseId),
554
+ type: 'local_agent',
555
+ status: 'running',
556
+ agentId,
557
+ prompt,
558
+ selectedAgent,
559
+ agentType: selectedAgent.agentType ?? 'general-purpose',
560
+ abortController,
561
+ unregisterCleanup,
562
+ retrieved: false,
563
+ lastReportedToolCount: 0,
564
+ lastReportedTokenCount: 0,
565
+ isBackgrounded: false,
566
+ // Not yet backgrounded - running in foreground
567
+ pendingMessages: [],
568
+ retain: false,
569
+ diskLoaded: false
570
+ };
571
+
572
+ // Create background signal promise
573
+ let resolveBackgroundSignal: () => void;
574
+ const backgroundSignal = new Promise<void>(resolve => {
575
+ resolveBackgroundSignal = resolve;
576
+ });
577
+ backgroundSignalResolvers.set(agentId, resolveBackgroundSignal!);
578
+ registerTask(taskState, setAppState);
579
+
580
+ // Auto-background after timeout if configured
581
+ let cancelAutoBackground: (() => void) | undefined;
582
+ if (autoBackgroundMs !== undefined && autoBackgroundMs > 0) {
583
+ const timer = setTimeout((setAppState, agentId) => {
584
+ // Mark task as backgrounded and resolve the signal
585
+ setAppState(prev => {
586
+ const prevTask = prev.tasks[agentId];
587
+ if (!isLocalAgentTask(prevTask) || prevTask.isBackgrounded) {
588
+ return prev;
589
+ }
590
+ return {
591
+ ...prev,
592
+ tasks: {
593
+ ...prev.tasks,
594
+ [agentId]: {
595
+ ...prevTask,
596
+ isBackgrounded: true
597
+ }
598
+ }
599
+ };
600
+ });
601
+ const resolver = backgroundSignalResolvers.get(agentId);
602
+ if (resolver) {
603
+ resolver();
604
+ backgroundSignalResolvers.delete(agentId);
605
+ }
606
+ }, autoBackgroundMs, setAppState, agentId);
607
+ cancelAutoBackground = () => clearTimeout(timer);
608
+ }
609
+ return {
610
+ taskId: agentId,
611
+ backgroundSignal,
612
+ cancelAutoBackground
613
+ };
614
+ }
615
+
616
+ /**
617
+ * Background a specific foreground agent task.
618
+ * @returns true if backgrounded successfully, false otherwise
619
+ */
620
+ export function backgroundAgentTask(taskId: string, getAppState: () => AppState, setAppState: SetAppState): boolean {
621
+ const state = getAppState();
622
+ const task = state.tasks[taskId];
623
+ if (!isLocalAgentTask(task) || task.isBackgrounded) {
624
+ return false;
625
+ }
626
+
627
+ // Update state to mark as backgrounded
628
+ setAppState(prev => {
629
+ const prevTask = prev.tasks[taskId];
630
+ if (!isLocalAgentTask(prevTask)) {
631
+ return prev;
632
+ }
633
+ return {
634
+ ...prev,
635
+ tasks: {
636
+ ...prev.tasks,
637
+ [taskId]: {
638
+ ...prevTask,
639
+ isBackgrounded: true
640
+ }
641
+ }
642
+ };
643
+ });
644
+
645
+ // Resolve the background signal to interrupt the agent loop
646
+ const resolver = backgroundSignalResolvers.get(taskId);
647
+ if (resolver) {
648
+ resolver();
649
+ backgroundSignalResolvers.delete(taskId);
650
+ }
651
+ return true;
652
+ }
653
+
654
+ /**
655
+ * Unregister a foreground agent task when the agent completes without being backgrounded.
656
+ */
657
+ export function unregisterAgentForeground(taskId: string, setAppState: SetAppState): void {
658
+ // Clean up the background signal resolver
659
+ backgroundSignalResolvers.delete(taskId);
660
+ let cleanupFn: (() => void) | undefined;
661
+ setAppState(prev => {
662
+ const task = prev.tasks[taskId];
663
+ // Only remove if it's a foreground task (not backgrounded)
664
+ if (!isLocalAgentTask(task) || task.isBackgrounded) {
665
+ return prev;
666
+ }
667
+
668
+ // Capture cleanup function to call outside of updater
669
+ cleanupFn = task.unregisterCleanup;
670
+ const {
671
+ [taskId]: removed,
672
+ ...rest
673
+ } = prev.tasks;
674
+ return {
675
+ ...prev,
676
+ tasks: rest
677
+ };
678
+ });
679
+
680
+ // Call cleanup outside of the state updater (avoid side effects in updater)
681
+ cleanupFn?.();
682
+ }
683
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTZGtBZ2VudFByb2dyZXNzU3VtbWFyaWVzRW5hYmxlZCIsIk9VVFBVVF9GSUxFX1RBRyIsIlNUQVRVU19UQUciLCJTVU1NQVJZX1RBRyIsIlRBU0tfSURfVEFHIiwiVEFTS19OT1RJRklDQVRJT05fVEFHIiwiVE9PTF9VU0VfSURfVEFHIiwiV09SS1RSRUVfQlJBTkNIX1RBRyIsIldPUktUUkVFX1BBVEhfVEFHIiwiV09SS1RSRUVfVEFHIiwiYWJvcnRTcGVjdWxhdGlvbiIsIkFwcFN0YXRlIiwiU2V0QXBwU3RhdGUiLCJUYXNrIiwiVGFza1N0YXRlQmFzZSIsImNyZWF0ZVRhc2tTdGF0ZUJhc2UiLCJUb29scyIsImZpbmRUb29sQnlOYW1lIiwiQWdlbnRUb29sUmVzdWx0IiwiQWdlbnREZWZpbml0aW9uIiwiU1lOVEhFVElDX09VVFBVVF9UT09MX05BTUUiLCJhc0FnZW50SWQiLCJNZXNzYWdlIiwiY3JlYXRlQWJvcnRDb250cm9sbGVyIiwiY3JlYXRlQ2hpbGRBYm9ydENvbnRyb2xsZXIiLCJyZWdpc3RlckNsZWFudXAiLCJnZXRUb29sU2VhcmNoT3JSZWFkSW5mbyIsImVucXVldWVQZW5kaW5nTm90aWZpY2F0aW9uIiwiZ2V0QWdlbnRUcmFuc2NyaXB0UGF0aCIsImV2aWN0VGFza091dHB1dCIsImdldFRhc2tPdXRwdXRQYXRoIiwiaW5pdFRhc2tPdXRwdXRBc1N5bWxpbmsiLCJQQU5FTF9HUkFDRV9NUyIsInJlZ2lzdGVyVGFzayIsInVwZGF0ZVRhc2tTdGF0ZSIsImVtaXRUYXNrUHJvZ3Jlc3MiLCJUYXNrU3RhdGUiLCJUb29sQWN0aXZpdHkiLCJ0b29sTmFtZSIsImlucHV0IiwiUmVjb3JkIiwiYWN0aXZpdHlEZXNjcmlwdGlvbiIsImlzU2VhcmNoIiwiaXNSZWFkIiwiQWdlbnRQcm9ncmVzcyIsInRvb2xVc2VDb3VudCIsInRva2VuQ291bnQiLCJsYXN0QWN0aXZpdHkiLCJyZWNlbnRBY3Rpdml0aWVzIiwic3VtbWFyeSIsIk1BWF9SRUNFTlRfQUNUSVZJVElFUyIsIlByb2dyZXNzVHJhY2tlciIsImxhdGVzdElucHV0VG9rZW5zIiwiY3VtdWxhdGl2ZU91dHB1dFRva2VucyIsImNyZWF0ZVByb2dyZXNzVHJhY2tlciIsImdldFRva2VuQ291bnRGcm9tVHJhY2tlciIsInRyYWNrZXIiLCJBY3Rpdml0eURlc2NyaXB0aW9uUmVzb2x2ZXIiLCJ1cGRhdGVQcm9ncmVzc0Zyb21NZXNzYWdlIiwibWVzc2FnZSIsInJlc29sdmVBY3Rpdml0eURlc2NyaXB0aW9uIiwidG9vbHMiLCJ0eXBlIiwidXNhZ2UiLCJpbnB1dF90b2tlbnMiLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyIsIm91dHB1dF90b2tlbnMiLCJjb250ZW50IiwibmFtZSIsImNsYXNzaWZpY2F0aW9uIiwidW5kZWZpbmVkIiwicHVzaCIsImxlbmd0aCIsInNoaWZ0IiwiZ2V0UHJvZ3Jlc3NVcGRhdGUiLCJjcmVhdGVBY3Rpdml0eURlc2NyaXB0aW9uUmVzb2x2ZXIiLCJ0b29sIiwiZ2V0QWN0aXZpdHlEZXNjcmlwdGlvbiIsIkxvY2FsQWdlbnRUYXNrU3RhdGUiLCJhZ2VudElkIiwicHJvbXB0Iiwic2VsZWN0ZWRBZ2VudCIsImFnZW50VHlwZSIsIm1vZGVsIiwiYWJvcnRDb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwidW5yZWdpc3RlckNsZWFudXAiLCJlcnJvciIsInJlc3VsdCIsInByb2dyZXNzIiwicmV0cmlldmVkIiwibWVzc2FnZXMiLCJsYXN0UmVwb3J0ZWRUb29sQ291bnQiLCJsYXN0UmVwb3J0ZWRUb2tlbkNvdW50IiwiaXNCYWNrZ3JvdW5kZWQiLCJwZW5kaW5nTWVzc2FnZXMiLCJyZXRhaW4iLCJkaXNrTG9hZGVkIiwiZXZpY3RBZnRlciIsImlzTG9jYWxBZ2VudFRhc2siLCJ0YXNrIiwiaXNQYW5lbEFnZW50VGFzayIsInQiLCJxdWV1ZVBlbmRpbmdNZXNzYWdlIiwidGFza0lkIiwibXNnIiwic2V0QXBwU3RhdGUiLCJmIiwicHJldiIsImFwcGVuZE1lc3NhZ2VUb0xvY2FsQWdlbnQiLCJkcmFpblBlbmRpbmdNZXNzYWdlcyIsImdldEFwcFN0YXRlIiwidGFza3MiLCJkcmFpbmVkIiwiZW5xdWV1ZUFnZW50Tm90aWZpY2F0aW9uIiwiZGVzY3JpcHRpb24iLCJzdGF0dXMiLCJmaW5hbE1lc3NhZ2UiLCJ0b29sVXNlSWQiLCJ3b3JrdHJlZVBhdGgiLCJ3b3JrdHJlZUJyYW5jaCIsInRvdGFsVG9rZW5zIiwidG9vbFVzZXMiLCJkdXJhdGlvbk1zIiwic2hvdWxkRW5xdWV1ZSIsIm5vdGlmaWVkIiwib3V0cHV0UGF0aCIsInRvb2xVc2VJZExpbmUiLCJyZXN1bHRTZWN0aW9uIiwidXNhZ2VTZWN0aW9uIiwid29ya3RyZWVTZWN0aW9uIiwidmFsdWUiLCJtb2RlIiwiTG9jYWxBZ2VudFRhc2siLCJraWxsIiwia2lsbEFzeW5jQWdlbnQiLCJraWxsZWQiLCJhYm9ydCIsImVuZFRpbWUiLCJEYXRlIiwibm93Iiwia2lsbEFsbFJ1bm5pbmdBZ2VudFRhc2tzIiwiT2JqZWN0IiwiZW50cmllcyIsIm1hcmtBZ2VudHNOb3RpZmllZCIsInVwZGF0ZUFnZW50UHJvZ3Jlc3MiLCJleGlzdGluZ1N1bW1hcnkiLCJ1cGRhdGVBZ2VudFN1bW1hcnkiLCJjYXB0dXJlZCIsInN0YXJ0VGltZSIsImNvbXBsZXRlQWdlbnRUYXNrIiwiZmFpbEFnZW50VGFzayIsInJlZ2lzdGVyQXN5bmNBZ2VudCIsInBhcmVudEFib3J0Q29udHJvbGxlciIsInRhc2tTdGF0ZSIsImJhY2tncm91bmRTaWduYWxSZXNvbHZlcnMiLCJNYXAiLCJyZWdpc3RlckFnZW50Rm9yZWdyb3VuZCIsImF1dG9CYWNrZ3JvdW5kTXMiLCJiYWNrZ3JvdW5kU2lnbmFsIiwiUHJvbWlzZSIsImNhbmNlbEF1dG9CYWNrZ3JvdW5kIiwicmVzb2x2ZUJhY2tncm91bmRTaWduYWwiLCJyZXNvbHZlIiwic2V0IiwidGltZXIiLCJzZXRUaW1lb3V0IiwicHJldlRhc2siLCJyZXNvbHZlciIsImdldCIsImRlbGV0ZSIsImNsZWFyVGltZW91dCIsImJhY2tncm91bmRBZ2VudFRhc2siLCJzdGF0ZSIsInVucmVnaXN0ZXJBZ2VudEZvcmVncm91bmQiLCJjbGVhbnVwRm4iLCJyZW1vdmVkIiwicmVzdCJdLCJzb3VyY2VzIjpbIkxvY2FsQWdlbnRUYXNrLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRTZGtBZ2VudFByb2dyZXNzU3VtbWFyaWVzRW5hYmxlZCB9IGZyb20gJy4uLy4uL2Jvb3RzdHJhcC9zdGF0ZS5qcydcbmltcG9ydCB7XG4gIE9VVFBVVF9GSUxFX1RBRyxcbiAgU1RBVFVTX1RBRyxcbiAgU1VNTUFSWV9UQUcsXG4gIFRBU0tfSURfVEFHLFxuICBUQVNLX05PVElGSUNBVElPTl9UQUcsXG4gIFRPT0xfVVNFX0lEX1RBRyxcbiAgV09SS1RSRUVfQlJBTkNIX1RBRyxcbiAgV09SS1RSRUVfUEFUSF9UQUcsXG4gIFdPUktUUkVFX1RBRyxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3htbC5qcydcbmltcG9ydCB7IGFib3J0U3BlY3VsYXRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9Qcm9tcHRTdWdnZXN0aW9uL3NwZWN1bGF0aW9uLmpzJ1xuaW1wb3J0IHR5cGUgeyBBcHBTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlL0FwcFN0YXRlLmpzJ1xuaW1wb3J0IHR5cGUgeyBTZXRBcHBTdGF0ZSwgVGFzaywgVGFza1N0YXRlQmFzZSB9IGZyb20gJy4uLy4uL1Rhc2suanMnXG5pbXBvcnQgeyBjcmVhdGVUYXNrU3RhdGVCYXNlIH0gZnJvbSAnLi4vLi4vVGFzay5qcydcbmltcG9ydCB0eXBlIHsgVG9vbHMgfSBmcm9tICcuLi8uLi9Ub29sLmpzJ1xuaW1wb3J0IHsgZmluZFRvb2xCeU5hbWUgfSBmcm9tICcuLi8uLi9Ub29sLmpzJ1xuaW1wb3J0IHR5cGUgeyBBZ2VudFRvb2xSZXN1bHQgfSBmcm9tICcuLi8uLi90b29scy9BZ2VudFRvb2wvYWdlbnRUb29sVXRpbHMuanMnXG5pbXBvcnQgdHlwZSB7IEFnZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3Rvb2xzL0FnZW50VG9vbC9sb2FkQWdlbnRzRGlyLmpzJ1xuaW1wb3J0IHsgU1lOVEhFVElDX09VVFBVVF9UT09MX05BTUUgfSBmcm9tICcuLi8uLi90b29scy9TeW50aGV0aWNPdXRwdXRUb29sL1N5bnRoZXRpY091dHB1dFRvb2wuanMnXG5pbXBvcnQgeyBhc0FnZW50SWQgfSBmcm9tICcuLi8uLi90eXBlcy9pZHMuanMnXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9tZXNzYWdlLmpzJ1xuaW1wb3J0IHtcbiAgY3JlYXRlQWJvcnRDb250cm9sbGVyLFxuICBjcmVhdGVDaGlsZEFib3J0Q29udHJvbGxlcixcbn0gZnJvbSAnLi4vLi4vdXRpbHMvYWJvcnRDb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJDbGVhbnVwIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xlYW51cFJlZ2lzdHJ5LmpzJ1xuaW1wb3J0IHsgZ2V0VG9vbFNlYXJjaE9yUmVhZEluZm8gfSBmcm9tICcuLi8uLi91dGlscy9jb2xsYXBzZVJlYWRTZWFyY2guanMnXG5pbXBvcnQgeyBlbnF1ZXVlUGVuZGluZ05vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzL21lc3NhZ2VRdWV1ZU1hbmFnZXIuanMnXG5pbXBvcnQgeyBnZXRBZ2VudFRyYW5zY3JpcHRQYXRoIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2Vzc2lvblN0b3JhZ2UuanMnXG5pbXBvcnQge1xuICBldmljdFRhc2tPdXRwdXQsXG4gIGdldFRhc2tPdXRwdXRQYXRoLFxuICBpbml0VGFza091dHB1dEFzU3ltbGluayxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvdGFzay9kaXNrT3V0cHV0LmpzJ1xuaW1wb3J0IHtcbiAgUEFORUxfR1JBQ0VfTVMsXG4gIHJlZ2lzdGVyVGFzayxcbiAgdXBkYXRlVGFza1N0YXRlLFxufSBmcm9tICcuLi8uLi91dGlscy90YXNrL2ZyYW1ld29yay5qcydcbmltcG9ydCB7IGVtaXRUYXNrUHJvZ3Jlc3MgfSBmcm9tICcuLi8uLi91dGlscy90YXNrL3Nka1Byb2dyZXNzLmpzJ1xuaW1wb3J0IHR5cGUgeyBUYXNrU3RhdGUgfSBmcm9tICcuLi90eXBlcy5qcydcblxuZXhwb3J0IHR5cGUgVG9vbEFjdGl2aXR5ID0ge1xuICB0b29sTmFtZTogc3RyaW5nXG4gIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAvKiogUHJlLWNvbXB1dGVkIGFjdGl2aXR5IGRlc2NyaXB0aW9uIGZyb20gdGhlIHRvb2wsIGUuZy4gXCJSZWFkaW5nIHNyYy9mb28udHNcIiAqL1xuICBhY3Rpdml0eURlc2NyaXB0aW9uPzogc3RyaW5nXG4gIC8qKiBQcmUtY29tcHV0ZWQ6IHRydWUgaWYgdGhpcyBpcyBhIHNlYXJjaCBvcGVyYXRpb24gKEdyZXAsIEdsb2IsIGV0Yy4pICovXG4gIGlzU2VhcmNoPzogYm9vbGVhblxuICAvKiogUHJlLWNvbXB1dGVkOiB0cnVlIGlmIHRoaXMgaXMgYSByZWFkIG9wZXJhdGlvbiAoUmVhZCwgY2F0LCBldGMuKSAqL1xuICBpc1JlYWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIEFnZW50UHJvZ3Jlc3MgPSB7XG4gIHRvb2xVc2VDb3VudDogbnVtYmVyXG4gIHRva2VuQ291bnQ6IG51bWJlclxuICBsYXN0QWN0aXZpdHk/OiBUb29sQWN0aXZpdHlcbiAgcmVjZW50QWN0aXZpdGllcz86IFRvb2xBY3Rpdml0eVtdXG4gIHN1bW1hcnk/OiBzdHJpbmdcbn1cblxuY29uc3QgTUFYX1JFQ0VOVF9BQ1RJVklUSUVTID0gNVxuXG5leHBvcnQgdHlwZSBQcm9ncmVzc1RyYWNrZXIgPSB7XG4gIHRvb2xVc2VDb3VudDogbnVtYmVyXG4gIC8vIFRyYWNrIGlucHV0IGFuZCBvdXRwdXQgc2VwYXJhdGVseSB0byBhdm9pZCBkb3VibGUtY291bnRpbmcuXG4gIC8vIGlucHV0X3Rva2VucyBpbiBDbGF1ZGUgQVBJIGlzIGN1bXVsYXRpdmUgcGVyIHR1cm4gKGluY2x1ZGVzIGFsbCBwcmV2aW91cyBjb250ZXh0KSxcbiAgLy8gc28gd2Uga2VlcCB0aGUgbGF0ZXN0IHZhbHVlLiBvdXRwdXRfdG9rZW5zIGlzIHBlci10dXJuLCBzbyB3ZSBzdW0gdGhvc2UuXG4gIGxhdGVzdElucHV0VG9rZW5zOiBudW1iZXJcbiAgY3VtdWxhdGl2ZU91dHB1dFRva2VuczogbnVtYmVyXG4gIHJlY2VudEFjdGl2aXRpZXM6IFRvb2xBY3Rpdml0eVtdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9ncmVzc1RyYWNrZXIoKTogUHJvZ3Jlc3NUcmFja2VyIHtcbiAgcmV0dXJuIHtcbiAgICB0b29sVXNlQ291bnQ6IDAsXG4gICAgbGF0ZXN0SW5wdXRUb2tlbnM6IDAsXG4gICAgY3VtdWxhdGl2ZU91dHB1dFRva2VuczogMCxcbiAgICByZWNlbnRBY3Rpdml0aWVzOiBbXSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9rZW5Db3VudEZyb21UcmFja2VyKHRyYWNrZXI6IFByb2dyZXNzVHJhY2tlcik6IG51bWJlciB7XG4gIHJldHVybiB0cmFja2VyLmxhdGVzdElucHV0VG9rZW5zICsgdHJhY2tlci5jdW11bGF0aXZlT3V0cHV0VG9rZW5zXG59XG5cbi8qKlxuICogUmVzb2x2ZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgYWN0aXZpdHkgZGVzY3JpcHRpb25cbiAqIGZvciBhIGdpdmVuIHRvb2wgbmFtZSBhbmQgaW5wdXQuIFVzZWQgdG8gcHJlLWNvbXB1dGUgZGVzY3JpcHRpb25zXG4gKiBmcm9tIFRvb2wuZ2V0QWN0aXZpdHlEZXNjcmlwdGlvbigpIGF0IHJlY29yZGluZyB0aW1lLlxuICovXG5leHBvcnQgdHlwZSBBY3Rpdml0eURlc2NyaXB0aW9uUmVzb2x2ZXIgPSAoXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkXG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVQcm9ncmVzc0Zyb21NZXNzYWdlKFxuICB0cmFja2VyOiBQcm9ncmVzc1RyYWNrZXIsXG4gIG1lc3NhZ2U6IE1lc3NhZ2UsXG4gIHJlc29sdmVBY3Rpdml0eURlc2NyaXB0aW9uPzogQWN0aXZpdHlEZXNjcmlwdGlvblJlc29sdmVyLFxuICB0b29scz86IFRvb2xzLFxuKTogdm9pZCB7XG4gIGlmIChtZXNzYWdlLnR5cGUgIT09ICdhc3Npc3RhbnQnKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgdXNhZ2UgPSBtZXNzYWdlLm1lc3NhZ2UudXNhZ2VcbiAgLy8gS2VlcCBsYXRlc3QgaW5wdXQgKGl0J3MgY3VtdWxhdGl2ZSBpbiB0aGUgQVBJKSwgc3VtIG91dHB1dHNcbiAgdHJhY2tlci5sYXRlc3RJbnB1dFRva2VucyA9XG4gICAgdXNhZ2UuaW5wdXRfdG9rZW5zICtcbiAgICAodXNhZ2UuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zID8/IDApICtcbiAgICAodXNhZ2UuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMgPz8gMClcbiAgdHJhY2tlci5jdW11bGF0aXZlT3V0cHV0VG9rZW5zICs9IHVzYWdlLm91dHB1dF90b2tlbnNcbiAgZm9yIChjb25zdCBjb250ZW50IG9mIG1lc3NhZ2UubWVzc2FnZS5jb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQudHlwZSA9PT0gJ3Rvb2xfdXNlJykge1xuICAgICAgdHJhY2tlci50b29sVXNlQ291bnQrK1xuICAgICAgLy8gT21pdCBTdHJ1Y3R1cmVkT3V0cHV0IGZyb20gcHJldmlldyAtIGl0J3MgYW4gaW50ZXJuYWwgdG9vbFxuICAgICAgaWYgKGNvbnRlbnQubmFtZSAhPT0gU1lOVEhFVElDX09VVFBVVF9UT09MX05BTUUpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZW50LmlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uID0gdG9vbHNcbiAgICAgICAgICA/IGdldFRvb2xTZWFyY2hPclJlYWRJbmZvKGNvbnRlbnQubmFtZSwgaW5wdXQsIHRvb2xzKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIHRyYWNrZXIucmVjZW50QWN0aXZpdGllcy5wdXNoKHtcbiAgICAgICAgICB0b29sTmFtZTogY29udGVudC5uYW1lLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIGFjdGl2aXR5RGVzY3JpcHRpb246IHJlc29sdmVBY3Rpdml0eURlc2NyaXB0aW9uPy4oXG4gICAgICAgICAgICBjb250ZW50Lm5hbWUsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICApLFxuICAgICAgICAgIGlzU2VhcmNoOiBjbGFzc2lmaWNhdGlvbj8uaXNTZWFyY2gsXG4gICAgICAgICAgaXNSZWFkOiBjbGFzc2lmaWNhdGlvbj8uaXNSZWFkLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICB3aGlsZSAodHJhY2tlci5yZWNlbnRBY3Rpdml0aWVzLmxlbmd0aCA+IE1BWF9SRUNFTlRfQUNUSVZJVElFUykge1xuICAgIHRyYWNrZXIucmVjZW50QWN0aXZpdGllcy5zaGlmdCgpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2dyZXNzVXBkYXRlKHRyYWNrZXI6IFByb2dyZXNzVHJhY2tlcik6IEFnZW50UHJvZ3Jlc3Mge1xuICByZXR1cm4ge1xuICAgIHRvb2xVc2VDb3VudDogdHJhY2tlci50b29sVXNlQ291bnQsXG4gICAgdG9rZW5Db3VudDogZ2V0VG9rZW5Db3VudEZyb21UcmFja2VyKHRyYWNrZXIpLFxuICAgIGxhc3RBY3Rpdml0eTpcbiAgICAgIHRyYWNrZXIucmVjZW50QWN0aXZpdGllcy5sZW5ndGggPiAwXG4gICAgICAgID8gdHJhY2tlci5yZWNlbnRBY3Rpdml0aWVzW3RyYWNrZXIucmVjZW50QWN0aXZpdGllcy5sZW5ndGggLSAxXVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICByZWNlbnRBY3Rpdml0aWVzOiBbLi4udHJhY2tlci5yZWNlbnRBY3Rpdml0aWVzXSxcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gQWN0aXZpdHlEZXNjcmlwdGlvblJlc29sdmVyIGZyb20gYSB0b29scyBsaXN0LlxuICogTG9va3MgdXAgdGhlIHRvb2wgYnkgbmFtZSBhbmQgY2FsbHMgZ2V0QWN0aXZpdHlEZXNjcmlwdGlvbiBpZiBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpdml0eURlc2NyaXB0aW9uUmVzb2x2ZXIoXG4gIHRvb2xzOiBUb29scyxcbik6IEFjdGl2aXR5RGVzY3JpcHRpb25SZXNvbHZlciB7XG4gIHJldHVybiAodG9vbE5hbWUsIGlucHV0KSA9PiB7XG4gICAgY29uc3QgdG9vbCA9IGZpbmRUb29sQnlOYW1lKHRvb2xzLCB0b29sTmFtZSlcbiAgICByZXR1cm4gdG9vbD8uZ2V0QWN0aXZpdHlEZXNjcmlwdGlvbj8uKGlucHV0KSA/PyB1bmRlZmluZWRcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBMb2NhbEFnZW50VGFza1N0YXRlID0gVGFza1N0YXRlQmFzZSAmIHtcbiAgdHlwZTogJ2xvY2FsX2FnZW50J1xuICBhZ2VudElkOiBzdHJpbmdcbiAgcHJvbXB0OiBzdHJpbmdcbiAgc2VsZWN0ZWRBZ2VudD86IEFnZW50RGVmaW5pdGlvblxuICBhZ2VudFR5cGU6IHN0cmluZ1xuICBtb2RlbD86IHN0cmluZ1xuICBhYm9ydENvbnRyb2xsZXI/OiBBYm9ydENvbnRyb2xsZXJcbiAgdW5yZWdpc3RlckNsZWFudXA/OiAoKSA9PiB2b2lkXG4gIGVycm9yPzogc3RyaW5nXG4gIHJlc3VsdD86IEFnZW50VG9vbFJlc3VsdFxuICBwcm9ncmVzcz86IEFnZW50UHJvZ3Jlc3NcbiAgcmV0cmlldmVkOiBib29sZWFuXG4gIG1lc3NhZ2VzPzogTWVzc2FnZVtdXG4gIC8vIFRyYWNrIHdoYXQgd2UgbGFzdCByZXBvcnRlZCBmb3IgY29tcHV0aW5nIGRlbHRhc1xuICBsYXN0UmVwb3J0ZWRUb29sQ291bnQ6IG51bWJlclxuICBsYXN0UmVwb3J0ZWRUb2tlbkNvdW50OiBudW1iZXJcbiAgLy8gV2hldGhlciB0aGUgdGFzayBoYXMgYmVlbiBiYWNrZ3JvdW5kZWQgKGZhbHNlID0gZm9yZWdyb3VuZCBydW5uaW5nLCB0cnVlID0gYmFja2dyb3VuZGVkKVxuICBpc0JhY2tncm91bmRlZDogYm9vbGVhblxuICAvLyBNZXNzYWdlcyBxdWV1ZWQgbWlkLXR1cm4gdmlhIFNlbmRNZXNzYWdlLCBkcmFpbmVkIGF0IHRvb2wtcm91bmQgYm91bmRhcmllc1xuICBwZW5kaW5nTWVzc2FnZXM6IHN0cmluZ1tdXG4gIC8vIFVJIGlzIGhvbGRpbmcgdGhpcyB0YXNrOiBibG9ja3MgZXZpY3Rpb24sIGVuYWJsZXMgc3RyZWFtLWFwcGVuZCwgdHJpZ2dlcnNcbiAgLy8gZGlzayBib290c3RyYXAuIFNldCBieSBlbnRlclRlYW1tYXRlVmlldy4gU2VwYXJhdGUgZnJvbSB2aWV3aW5nQWdlbnRUYXNrSWRcbiAgLy8gKHdoaWNoIGlzIFwid2hhdCBhbSBJIExPT0tJTkcgYXRcIikg4oCUIHJldGFpbiBpcyBcIndoYXQgYW0gSSBIT0xESU5HLlwiXG4gIHJldGFpbjogYm9vbGVhblxuICAvLyBCb290c3RyYXAgaGFzIHJlYWQgdGhlIHNpZGVjaGFpbiBKU09OTCBhbmQgVVVJRC1tZXJnZWQgaW50byBtZXNzYWdlcy5cbiAgLy8gT25lLXNob3QgcGVyIHJldGFpbiBjeWNsZTsgc3RyZWFtIGFwcGVuZHMgZnJvbSB0aGVyZS5cbiAgZGlza0xvYWRlZDogYm9vbGVhblxuICAvLyBQYW5lbCB2aXNpYmlsaXR5IGRlYWRsaW5lLiB1bmRlZmluZWQgPSBubyBkZWFkbGluZSAocnVubmluZyBvciByZXRhaW5lZCk7XG4gIC8vIHRpbWVzdGFtcCA9IGhpZGUgKyBHQy1lbGlnaWJsZSBhZnRlciB0aGlzIHRpbWUuIFNldCBhdCB0ZXJtaW5hbCB0cmFuc2l0aW9uXG4gIC8vIGFuZCBvbiB1bnNlbGVjdDsgY2xlYXJlZCBvbiByZXRhaW4uXG4gIGV2aWN0QWZ0ZXI/OiBudW1iZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTG9jYWxBZ2VudFRhc2sodGFzazogdW5rbm93bik6IHRhc2sgaXMgTG9jYWxBZ2VudFRhc2tTdGF0ZSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHRhc2sgPT09ICdvYmplY3QnICYmXG4gICAgdGFzayAhPT0gbnVsbCAmJlxuICAgICd0eXBlJyBpbiB0YXNrICYmXG4gICAgdGFzay50eXBlID09PSAnbG9jYWxfYWdlbnQnXG4gIClcbn1cblxuLyoqXG4gKiBBIGxvY2FsX2FnZW50IHRhc2sgdGhhdCB0aGUgQ29vcmRpbmF0b3JUYXNrUGFuZWwgbWFuYWdlcyAobm90IG1haW4tc2Vzc2lvbikuXG4gKiBGb3IgYW50cywgdGhlc2UgcmVuZGVyIGluIHRoZSBwYW5lbCBpbnN0ZWFkIG9mIHRoZSBiYWNrZ3JvdW5kLXRhc2sgcGlsbC5cbiAqIFRoaXMgaXMgdGhlIE9ORSBwcmVkaWNhdGUgdGhhdCBhbGwgcGlsbC9wYW5lbCBmaWx0ZXJzIG11c3QgYWdyZWUgb24g4oCUIGlmXG4gKiB0aGUgZ2F0ZSBjaGFuZ2VzLCBjaGFuZ2UgaXQgaGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFuZWxBZ2VudFRhc2sodDogdW5rbm93bik6IHQgaXMgTG9jYWxBZ2VudFRhc2tTdGF0ZSB7XG4gIHJldHVybiBpc0xvY2FsQWdlbnRUYXNrKHQpICYmIHQuYWdlbnRUeXBlICE9PSAnbWFpbi1zZXNzaW9uJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVldWVQZW5kaW5nTWVzc2FnZShcbiAgdGFza0lkOiBzdHJpbmcsXG4gIG1zZzogc3RyaW5nLFxuICBzZXRBcHBTdGF0ZTogKGY6IChwcmV2OiBBcHBTdGF0ZSkgPT4gQXBwU3RhdGUpID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgdXBkYXRlVGFza1N0YXRlPExvY2FsQWdlbnRUYXNrU3RhdGU+KHRhc2tJZCwgc2V0QXBwU3RhdGUsIHRhc2sgPT4gKHtcbiAgICAuLi50YXNrLFxuICAgIHBlbmRpbmdNZXNzYWdlczogWy4uLnRhc2sucGVuZGluZ01lc3NhZ2VzLCBtc2ddLFxuICB9KSlcbn1cblxuLyoqXG4gKiBBcHBlbmQgYSBtZXNzYWdlIHRvIHRhc2subWVzc2FnZXMgc28gaXQgYXBwZWFycyBpbiB0aGUgdmlld2VkIHRyYW5zY3JpcHRcbiAqIGltbWVkaWF0ZWx5LiBDYWxsZXIgY29uc3RydWN0cyB0aGUgTWVzc2FnZSAoYnJlYWtzIHRoZSBtZXNzYWdlcy50cyBjeWNsZSkuXG4gKiBxdWV1ZVBlbmRpbmdNZXNzYWdlIGFuZCByZXN1bWVBZ2VudEJhY2tncm91bmQgcm91dGUgdGhlIHByb21wdCB0byB0aGVcbiAqIGFnZW50J3MgQVBJIGlucHV0IGJ1dCBkb24ndCB0b3VjaCB0aGUgZGlzcGxheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZE1lc3NhZ2VUb0xvY2FsQWdlbnQoXG4gIHRhc2tJZDogc3RyaW5nLFxuICBtZXNzYWdlOiBNZXNzYWdlLFxuICBzZXRBcHBTdGF0ZTogKGY6IChwcmV2OiBBcHBTdGF0ZSkgPT4gQXBwU3RhdGUpID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgdXBkYXRlVGFza1N0YXRlPExvY2FsQWdlbnRUYXNrU3RhdGU+KHRhc2tJZCwgc2V0QXBwU3RhdGUsIHRhc2sgPT4gKHtcbiAgICAuLi50YXNrLFxuICAgIG1lc3NhZ2VzOiBbLi4uKHRhc2subWVzc2FnZXMgPz8gW10pLCBtZXNzYWdlXSxcbiAgfSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmFpblBlbmRpbmdNZXNzYWdlcyhcbiAgdGFza0lkOiBzdHJpbmcsXG4gIGdldEFwcFN0YXRlOiAoKSA9PiBBcHBTdGF0ZSxcbiAgc2V0QXBwU3RhdGU6IChmOiAocHJldjogQXBwU3RhdGUpID0+IEFwcFN0YXRlKSA9PiB2b2lkLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCB0YXNrID0gZ2V0QXBwU3RhdGUoKS50YXNrc1t0YXNrSWRdXG4gIGlmICghaXNMb2NhbEFnZW50VGFzayh0YXNrKSB8fCB0YXNrLnBlbmRpbmdNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW11cbiAgfVxuICBjb25zdCBkcmFpbmVkID0gdGFzay5wZW5kaW5nTWVzc2FnZXNcbiAgdXBkYXRlVGFza1N0YXRlPExvY2FsQWdlbnRUYXNrU3RhdGU+KHRhc2tJZCwgc2V0QXBwU3RhdGUsIHQgPT4gKHtcbiAgICAuLi50LFxuICAgIHBlbmRpbmdNZXNzYWdlczogW10sXG4gIH0pKVxuICByZXR1cm4gZHJhaW5lZFxufVxuXG4vKipcbiAqIEVucXVldWUgYW4gYWdlbnQgbm90aWZpY2F0aW9uIHRvIHRoZSBtZXNzYWdlIHF1ZXVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5xdWV1ZUFnZW50Tm90aWZpY2F0aW9uKHtcbiAgdGFza0lkLFxuICBkZXNjcmlwdGlvbixcbiAgc3RhdHVzLFxuICBlcnJvcixcbiAgc2V0QXBwU3RhdGUsXG4gIGZpbmFsTWVzc2FnZSxcbiAgdXNhZ2UsXG4gIHRvb2xVc2VJZCxcbiAgd29ya3RyZWVQYXRoLFxuICB3b3JrdHJlZUJyYW5jaCxcbn06IHtcbiAgdGFza0lkOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBzdGF0dXM6ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAna2lsbGVkJ1xuICBlcnJvcj86IHN0cmluZ1xuICBzZXRBcHBTdGF0ZTogU2V0QXBwU3RhdGVcbiAgZmluYWxNZXNzYWdlPzogc3RyaW5nXG4gIHVzYWdlPzoge1xuICAgIHRvdGFsVG9rZW5zOiBudW1iZXJcbiAgICB0b29sVXNlczogbnVtYmVyXG4gICAgZHVyYXRpb25NczogbnVtYmVyXG4gIH1cbiAgdG9vbFVzZUlkPzogc3RyaW5nXG4gIHdvcmt0cmVlUGF0aD86IHN0cmluZ1xuICB3b3JrdHJlZUJyYW5jaD86IHN0cmluZ1xufSk6IHZvaWQge1xuICAvLyBBdG9taWNhbGx5IGNoZWNrIGFuZCBzZXQgbm90aWZpZWQgZmxhZyB0byBwcmV2ZW50IGR1cGxpY2F0ZSBub3RpZmljYXRpb25zLlxuICAvLyBJZiB0aGUgdGFzayB3YXMgYWxyZWFkeSBtYXJrZWQgYXMgbm90aWZpZWQgKGUuZy4sIGJ5IFRhc2tTdG9wVG9vbCksIHNraXBcbiAgLy8gZW5xdWV1ZWluZyB0byBhdm9pZCBzZW5kaW5nIHJlZHVuZGFudCBtZXNzYWdlcyB0byB0aGUgbW9kZWwuXG4gIGxldCBzaG91bGRFbnF1ZXVlID0gZmFsc2VcbiAgdXBkYXRlVGFza1N0YXRlPExvY2FsQWdlbnRUYXNrU3RhdGU+KHRhc2tJZCwgc2V0QXBwU3RhdGUsIHRhc2sgPT4ge1xuICAgIGlmICh0YXNrLm5vdGlmaWVkKSB7XG4gICAgICByZXR1cm4gdGFza1xuICAgIH1cbiAgICBzaG91bGRFbnF1ZXVlID0gdHJ1ZVxuICAgIHJldHVybiB7XG4gICAgICAuLi50YXNrLFxuICAgICAgbm90aWZpZWQ6IHRydWUsXG4gICAgfVxuICB9KVxuXG4gIGlmICghc2hvdWxkRW5xdWV1ZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gQWJvcnQgYW55IGFjdGl2ZSBzcGVjdWxhdGlvbiDigJQgYmFja2dyb3VuZCB0YXNrIHN0YXRlIGNoYW5nZWQsIHNvIHNwZWN1bGF0ZWRcbiAgLy8gcmVzdWx0cyBtYXkgcmVmZXJlbmNlIHN0YWxlIHRhc2sgb3V0cHV0LiBUaGUgcHJvbXB0IHN1Z2dlc3Rpb24gdGV4dCBpc1xuICAvLyBwcmVzZXJ2ZWQ7IG9ubHkgdGhlIHByZS1jb21wdXRlZCByZXNwb25zZSBpcyBkaXNjYXJkZWQuXG4gIGFib3J0U3BlY3VsYXRpb24oc2V0QXBwU3RhdGUpXG5cbiAgY29uc3Qgc3VtbWFyeSA9XG4gICAgc3RhdHVzID09PSAnY29tcGxldGVkJ1xuICAgICAgPyBgQWdlbnQgXCIke2Rlc2NyaXB0aW9ufVwiIGNvbXBsZXRlZGBcbiAgICAgIDogc3RhdHVzID09PSAnZmFpbGVkJ1xuICAgICAgICA/IGBBZ2VudCBcIiR7ZGVzY3JpcHRpb259XCIgZmFpbGVkOiAke2Vycm9yIHx8ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIDogYEFnZW50IFwiJHtkZXNjcmlwdGlvbn1cIiB3YXMgc3RvcHBlZGBcblxuICBjb25zdCBvdXRwdXRQYXRoID0gZ2V0VGFza091dHB1dFBhdGgodGFza0lkKVxuICBjb25zdCB0b29sVXNlSWRMaW5lID0gdG9vbFVzZUlkXG4gICAgPyBgXFxuPCR7VE9PTF9VU0VfSURfVEFHfT4ke3Rvb2xVc2VJZH08LyR7VE9PTF9VU0VfSURfVEFHfT5gXG4gICAgOiAnJ1xuICBjb25zdCByZXN1bHRTZWN0aW9uID0gZmluYWxNZXNzYWdlID8gYFxcbjxyZXN1bHQ+JHtmaW5hbE1lc3NhZ2V9PC9yZXN1bHQ+YCA6ICcnXG4gIGNvbnN0IHVzYWdlU2VjdGlvbiA9IHVzYWdlXG4gICAgPyBgXFxuPHVzYWdlPjx0b3RhbF90b2tlbnM+JHt1c2FnZS50b3RhbFRva2Vuc308L3RvdGFsX3Rva2Vucz48dG9vbF91c2VzPiR7dXNhZ2UudG9vbFVzZXN9PC90b29sX3VzZXM+PGR1cmF0aW9uX21zPiR7dXNhZ2UuZHVyYXRpb25Nc308L2R1cmF0aW9uX21zPjwvdXNhZ2U+YFxuICAgIDogJydcbiAgY29uc3Qgd29ya3RyZWVTZWN0aW9uID0gd29ya3RyZWVQYXRoXG4gICAgPyBgXFxuPCR7V09SS1RSRUVfVEFHfT48JHtXT1JLVFJFRV9QQVRIX1RBR30+JHt3b3JrdHJlZVBhdGh9PC8ke1dPUktUUkVFX1BBVEhfVEFHfT4ke3dvcmt0cmVlQnJhbmNoID8gYDwke1dPUktUUkVFX0JSQU5DSF9UQUd9PiR7d29ya3RyZWVCcmFuY2h9PC8ke1dPUktUUkVFX0JSQU5DSF9UQUd9PmAgOiAnJ308LyR7V09SS1RSRUVfVEFHfT5gXG4gICAgOiAnJ1xuXG4gIGNvbnN0IG1lc3NhZ2UgPSBgPCR7VEFTS19OT1RJRklDQVRJT05fVEFHfT5cbjwke1RBU0tfSURfVEFHfT4ke3Rhc2tJZH08LyR7VEFTS19JRF9UQUd9PiR7dG9vbFVzZUlkTGluZX1cbjwke09VVFBVVF9GSUxFX1RBR30+JHtvdXRwdXRQYXRofTwvJHtPVVRQVVRfRklMRV9UQUd9PlxuPCR7U1RBVFVTX1RBR30+JHtzdGF0dXN9PC8ke1NUQVRVU19UQUd9PlxuPCR7U1VNTUFSWV9UQUd9PiR7c3VtbWFyeX08LyR7U1VNTUFSWV9UQUd9PiR7cmVzdWx0U2VjdGlvbn0ke3VzYWdlU2VjdGlvbn0ke3dvcmt0cmVlU2VjdGlvbn1cbjwvJHtUQVNLX05PVElGSUNBVElPTl9UQUd9PmBcblxuICBlbnF1ZXVlUGVuZGluZ05vdGlmaWNhdGlvbih7IHZhbHVlOiBtZXNzYWdlLCBtb2RlOiAndGFzay1ub3RpZmljYXRpb24nIH0pXG59XG5cbi8qKlxuICogTG9jYWxBZ2VudFRhc2sgLSBIYW5kbGVzIGJhY2tncm91bmQgYWdlbnQgZXhlY3V0aW9uLlxuICpcbiAqIFJlcGxhY2VzIHRoZSBBc3luY0FnZW50IGltcGxlbWVudGF0aW9uIGZyb20gc3JjL3Rvb2xzL0FnZW50VG9vbC9hc3luY0FnZW50VXRpbHMudHNcbiAqIHdpdGggYSB1bmlmaWVkIFRhc2sgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgY29uc3QgTG9jYWxBZ2VudFRhc2s6IFRhc2sgPSB7XG4gIG5hbWU6ICdMb2NhbEFnZW50VGFzaycsXG4gIHR5cGU6ICdsb2NhbF9hZ2VudCcsXG5cbiAgYXN5bmMga2lsbCh0YXNrSWQsIHNldEFwcFN0YXRlKSB7XG4gICAga2lsbEFzeW5jQWdlbnQodGFza0lkLCBzZXRBcHBTdGF0ZSlcbiAgfSxcbn1cblxuLyoqXG4gKiBLaWxsIGFuIGFnZW50IHRhc2suIE5vLW9wIGlmIGFscmVhZHkga2lsbGVkL2NvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtpbGxBc3luY0FnZW50KHRhc2tJZDogc3RyaW5nLCBzZXRBcHBTdGF0ZTogU2V0QXBwU3RhdGUpOiB2b2lkIHtcbiAgbGV0IGtpbGxlZCA9IGZhbHNlXG4gIHVwZGF0ZVRhc2tTdGF0ZTxMb2NhbEFnZW50VGFza1N0YXRlPih0YXNrSWQsIHNldEFwcFN0YXRlLCB0YXNrID0+IHtcbiAgICBpZiAodGFzay5zdGF0dXMgIT09ICdydW5uaW5nJykge1xuICAgICAgcmV0dXJuIHRhc2tcbiAgICB9XG4gICAga2lsbGVkID0gdHJ1ZVxuICAgIHRhc2suYWJvcnRDb250cm9sbGVyPy5hYm9ydCgpXG4gICAgdGFzay51bnJlZ2lzdGVyQ2xlYW51cD8uKClcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGFzayxcbiAgICAgIHN0YXR1czogJ2tpbGxlZCcsXG4gICAgICBlbmRUaW1lOiBEYXRlLm5vdygpLFxuICAgICAgZXZpY3RBZnRlcjogdGFzay5yZXRhaW4gPyB1bmRlZmluZWQgOiBEYXRlLm5vdygpICsgUEFORUxfR1JBQ0VfTVMsXG4gICAgICBhYm9ydENvbnRyb2xsZXI6IHVuZGVmaW5lZCxcbiAgICAgIHVucmVnaXN0ZXJDbGVhbnVwOiB1bmRlZmluZWQsXG4gICAgICBzZWxlY3RlZEFnZW50OiB1bmRlZmluZWQsXG4gICAgfVxuICB9KVxuICBpZiAoa2lsbGVkKSB7XG4gICAgdm9pZCBldmljdFRhc2tPdXRwdXQodGFza0lkKVxuICB9XG59XG5cbi8qKlxuICogS2lsbCBhbGwgcnVubmluZyBhZ2VudCB0YXNrcy5cbiAqIFVzZWQgYnkgRVNDIGNhbmNlbGxhdGlvbiBpbiBjb29yZGluYXRvciBtb2RlIHRvIHN0b3AgYWxsIHN1YmFnZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtpbGxBbGxSdW5uaW5nQWdlbnRUYXNrcyhcbiAgdGFza3M6IFJlY29yZDxzdHJpbmcsIFRhc2tTdGF0ZT4sXG4gIHNldEFwcFN0YXRlOiBTZXRBcHBTdGF0ZSxcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IFt0YXNrSWQsIHRhc2tdIG9mIE9iamVjdC5lbnRyaWVzKHRhc2tzKSkge1xuICAgIGlmICh0YXNrLnR5cGUgPT09ICdsb2NhbF9hZ2VudCcgJiYgdGFzay5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAga2lsbEFzeW5jQWdlbnQodGFza0lkLCBzZXRBcHBTdGF0ZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNYXJrIGEgdGFzayBhcyBub3RpZmllZCB3aXRob3V0IGVucXVldWVpbmcgYSBub3RpZmljYXRpb24uXG4gKiBVc2VkIGJ5IGNoYXQ6a2lsbEFnZW50cyBidWxrIGtpbGwgdG8gc3VwcHJlc3MgcGVyLWFnZW50IGFzeW5jIG5vdGlmaWNhdGlvbnNcbiAqIHdoZW4gYSBzaW5nbGUgYWdncmVnYXRlIG1lc3NhZ2UgaXMgc2VudCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya0FnZW50c05vdGlmaWVkKFxuICB0YXNrSWQ6IHN0cmluZyxcbiAgc2V0QXBwU3RhdGU6IFNldEFwcFN0YXRlLFxuKTogdm9pZCB7XG4gIHVwZGF0ZVRhc2tTdGF0ZTxMb2NhbEFnZW50VGFza1N0YXRlPih0YXNrSWQsIHNldEFwcFN0YXRlLCB0YXNrID0+IHtcbiAgICBpZiAodGFzay5ub3RpZmllZCkge1xuICAgICAgcmV0dXJuIHRhc2tcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRhc2ssXG4gICAgICBub3RpZmllZDogdHJ1ZSxcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogVXBkYXRlIHByb2dyZXNzIGZvciBhbiBhZ2VudCB0YXNrLlxuICogUHJlc2VydmVzIHRoZSBleGlzdGluZyBzdW1tYXJ5IGZpZWxkIHNvIHRoYXQgYmFja2dyb3VuZCBzdW1tYXJpemF0aW9uXG4gKiByZXN1bHRzIGFyZSBub3QgY2xvYmJlcmVkIGJ5IHByb2dyZXNzIHVwZGF0ZXMgZnJvbSBhc3Npc3RhbnQgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBZ2VudFByb2dyZXNzKFxuICB0YXNrSWQ6IHN0cmluZyxcbiAgcHJvZ3Jlc3M6IEFnZW50UHJvZ3Jlc3MsXG4gIHNldEFwcFN0YXRlOiBTZXRBcHBTdGF0ZSxcbik6IHZvaWQge1xuICB1cGRhdGVUYXNrU3RhdGU8TG9jYWxBZ2VudFRhc2tTdGF0ZT4odGFza0lkLCBzZXRBcHBTdGF0ZSwgdGFzayA9PiB7XG4gICAgaWYgKHRhc2suc3RhdHVzICE9PSAncnVubmluZycpIHtcbiAgICAgIHJldHVybiB0YXNrXG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdTdW1tYXJ5ID0gdGFzay5wcm9ncmVzcz8uc3VtbWFyeVxuICAgIHJldHVybiB7XG4gICAgICAuLi50YXNrLFxuICAgICAgcHJvZ3Jlc3M6IGV4aXN0aW5nU3VtbWFyeVxuICAgICAgICA/IHsgLi4ucHJvZ3Jlc3MsIHN1bW1hcnk6IGV4aXN0aW5nU3VtbWFyeSB9XG4gICAgICAgIDogcHJvZ3Jlc3MsXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYmFja2dyb3VuZCBzdW1tYXJ5IGZvciBhbiBhZ2VudCB0YXNrLlxuICogQ2FsbGVkIGJ5IHRoZSBwZXJpb2RpYyBzdW1tYXJpemF0aW9uIHNlcnZpY2UgdG8gc3RvcmUgYSAxLTIgc2VudGVuY2UgcHJvZ3Jlc3Mgc3VtbWFyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFnZW50U3VtbWFyeShcbiAgdGFza0lkOiBzdHJpbmcsXG4gIHN1bW1hcnk6IHN0cmluZyxcbiAgc2V0QXBwU3RhdGU6IFNldEFwcFN0YXRlLFxuKTogdm9pZCB7XG4gIGxldCBjYXB0dXJlZDoge1xuICAgIHRva2VuQ291bnQ6IG51bWJlclxuICAgIHRvb2xVc2VDb3VudDogbnVtYmVyXG4gICAgc3RhcnRUaW1lOiBudW1iZXJcbiAgICB0b29sVXNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICB9IHwgbnVsbCA9IG51bGxcblxuICB1cGRhdGVUYXNrU3RhdGU8TG9jYWxBZ2VudFRhc2tTdGF0ZT4odGFza0lkLCBzZXRBcHBTdGF0ZSwgdGFzayA9PiB7XG4gICAgaWYgKHRhc2suc3RhdHVzICE9PSAncnVubmluZycpIHtcbiAgICAgIHJldHVybiB0YXNrXG4gICAgfVxuXG4gICAgY2FwdHVyZWQgPSB7XG4gICAgICB0b2tlbkNvdW50OiB0YXNrLnByb2dyZXNzPy50b2tlbkNvdW50ID8/IDAsXG4gICAgICB0b29sVXNlQ291bnQ6IHRhc2sucHJvZ3Jlc3M/LnRvb2xVc2VDb3VudCA/PyAwLFxuICAgICAgc3RhcnRUaW1lOiB0YXNrLnN0YXJ0VGltZSxcbiAgICAgIHRvb2xVc2VJZDogdGFzay50b29sVXNlSWQsXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRhc2ssXG4gICAgICBwcm9ncmVzczoge1xuICAgICAgICAuLi50YXNrLnByb2dyZXNzLFxuICAgICAgICB0b29sVXNlQ291bnQ6IHRhc2sucHJvZ3Jlc3M/LnRvb2xVc2VDb3VudCA/PyAwLFxuICAgICAgICB0b2tlbkNvdW50OiB0YXNrLnByb2dyZXNzPy50b2tlbkNvdW50ID8/IDAsXG4gICAgICAgIHN1bW1hcnksXG4gICAgICB9LFxuICAgIH1cbiAgfSlcblxuICAvLyBFbWl0IHN1bW1hcnkgdG8gU0RLIGNvbnN1bWVycyAoZS5nLiBWUyBDb2RlIHN1YmFnZW50IHBhbmVsKS4gTm8tb3AgaW4gVFVJLlxuICAvLyBHYXRlIG9uIHRoZSBTREsgb3B0aW9uIHNvIGNvb3JkaW5hdG9yLW1vZGUgc2Vzc2lvbnMgd2l0aG91dCB0aGUgZmxhZyBkb24ndFxuICAvLyBsZWFrIHN1bW1hcnkgZXZlbnRzIHRvIGNvbnN1bWVycyB3aG8gZGlkbid0IG9wdCBpbi5cbiAgaWYgKGNhcHR1cmVkICYmIGdldFNka0FnZW50UHJvZ3Jlc3NTdW1tYXJpZXNFbmFibGVkKCkpIHtcbiAgICBjb25zdCB7IHRva2VuQ291bnQsIHRvb2xVc2VDb3VudCwgc3RhcnRUaW1lLCB0b29sVXNlSWQgfSA9IGNhcHR1cmVkXG4gICAgZW1pdFRhc2tQcm9ncmVzcyh7XG4gICAgICB0YXNrSWQsXG4gICAgICB0b29sVXNlSWQsXG4gICAgICBkZXNjcmlwdGlvbjogc3VtbWFyeSxcbiAgICAgIHN0YXJ0VGltZSxcbiAgICAgIHRvdGFsVG9rZW5zOiB0b2tlbkNvdW50LFxuICAgICAgdG9vbFVzZXM6IHRvb2xVc2VDb3VudCxcbiAgICAgIHN1bW1hcnksXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIENvbXBsZXRlIGFuIGFnZW50IHRhc2sgd2l0aCByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV0ZUFnZW50VGFzayhcbiAgcmVzdWx0OiBBZ2VudFRvb2xSZXN1bHQsXG4gIHNldEFwcFN0YXRlOiBTZXRBcHBTdGF0ZSxcbik6IHZvaWQge1xuICBjb25zdCB0YXNrSWQgPSByZXN1bHQuYWdlbnRJZFxuICB1cGRhdGVUYXNrU3RhdGU8TG9jYWxBZ2VudFRhc2tTdGF0ZT4odGFza0lkLCBzZXRBcHBTdGF0ZSwgdGFzayA9PiB7XG4gICAgaWYgKHRhc2suc3RhdHVzICE9PSAncnVubmluZycpIHtcbiAgICAgIHJldHVybiB0YXNrXG4gICAgfVxuXG4gICAgdGFzay51bnJlZ2lzdGVyQ2xlYW51cD8uKClcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50YXNrLFxuICAgICAgc3RhdHVzOiAnY29tcGxldGVkJyxcbiAgICAgIHJlc3VsdCxcbiAgICAgIGVuZFRpbWU6IERhdGUubm93KCksXG4gICAgICBldmljdEFmdGVyOiB0YXNrLnJldGFpbiA/IHVuZGVmaW5lZCA6IERhdGUubm93KCkgKyBQQU5FTF9HUkFDRV9NUyxcbiAgICAgIGFib3J0Q29udHJvbGxlcjogdW5kZWZpbmVkLFxuICAgICAgdW5yZWdpc3RlckNsZWFudXA6IHVuZGVmaW5lZCxcbiAgICAgIHNlbGVjdGVkQWdlbnQ6IHVuZGVmaW5lZCxcbiAgICB9XG4gIH0pXG4gIHZvaWQgZXZpY3RUYXNrT3V0cHV0KHRhc2tJZClcbiAgLy8gTm90ZTogTm90aWZpY2F0aW9uIGlzIHNlbnQgYnkgQWdlbnRUb29sIHZpYSBlbnF1ZXVlQWdlbnROb3RpZmljYXRpb25cbn1cblxuLyoqXG4gKiBGYWlsIGFuIGFnZW50IHRhc2sgd2l0aCBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhaWxBZ2VudFRhc2soXG4gIHRhc2tJZDogc3RyaW5nLFxuICBlcnJvcjogc3RyaW5nLFxuICBzZXRBcHBTdGF0ZTogU2V0QXBwU3RhdGUsXG4pOiB2b2lkIHtcbiAgdXBkYXRlVGFza1N0YXRlPExvY2FsQWdlbnRUYXNrU3RhdGU+KHRhc2tJZCwgc2V0QXBwU3RhdGUsIHRhc2sgPT4ge1xuICAgIGlmICh0YXNrLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICByZXR1cm4gdGFza1xuICAgIH1cblxuICAgIHRhc2sudW5yZWdpc3RlckNsZWFudXA/LigpXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGFzayxcbiAgICAgIHN0YXR1czogJ2ZhaWxlZCcsXG4gICAgICBlcnJvcixcbiAgICAgIGVuZFRpbWU6IERhdGUubm93KCksXG4gICAgICBldmljdEFmdGVyOiB0YXNrLnJldGFpbiA/IHVuZGVmaW5lZCA6IERhdGUubm93KCkgKyBQQU5FTF9HUkFDRV9NUyxcbiAgICAgIGFib3J0Q29udHJvbGxlcjogdW5kZWZpbmVkLFxuICAgICAgdW5yZWdpc3RlckNsZWFudXA6IHVuZGVmaW5lZCxcbiAgICAgIHNlbGVjdGVkQWdlbnQ6IHVuZGVmaW5lZCxcbiAgICB9XG4gIH0pXG4gIHZvaWQgZXZpY3RUYXNrT3V0cHV0KHRhc2tJZClcbiAgLy8gTm90ZTogTm90aWZpY2F0aW9uIGlzIHNlbnQgYnkgQWdlbnRUb29sIHZpYSBlbnF1ZXVlQWdlbnROb3RpZmljYXRpb25cbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhbiBhZ2VudCB0YXNrLlxuICogQ2FsbGVkIGJ5IEFnZW50VG9vbCB0byBjcmVhdGUgYSBuZXcgYmFja2dyb3VuZCBhZ2VudC5cbiAqXG4gKiBAcGFyYW0gcGFyZW50QWJvcnRDb250cm9sbGVyIC0gT3B0aW9uYWwgcGFyZW50IGFib3J0IGNvbnRyb2xsZXIuIElmIHByb3ZpZGVkLFxuICogICB0aGUgYWdlbnQncyBhYm9ydCBjb250cm9sbGVyIHdpbGwgYmUgYSBjaGlsZCB0aGF0IGF1dG8tYWJvcnRzIHdoZW4gcGFyZW50IGFib3J0cy5cbiAqICAgVGhpcyBlbnN1cmVzIHN1YmFnZW50cyBhcmUgYWJvcnRlZCB3aGVuIHRoZWlyIHBhcmVudCAoZS5nLiwgaW4tcHJvY2VzcyB0ZWFtbWF0ZSkgYWJvcnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBc3luY0FnZW50KHtcbiAgYWdlbnRJZCxcbiAgZGVzY3JpcHRpb24sXG4gIHByb21wdCxcbiAgc2VsZWN0ZWRBZ2VudCxcbiAgc2V0QXBwU3RhdGUsXG4gIHBhcmVudEFib3J0Q29udHJvbGxlcixcbiAgdG9vbFVzZUlkLFxufToge1xuICBhZ2VudElkOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBwcm9tcHQ6IHN0cmluZ1xuICBzZWxlY3RlZEFnZW50OiBBZ2VudERlZmluaXRpb25cbiAgc2V0QXBwU3RhdGU6IFNldEFwcFN0YXRlXG4gIHBhcmVudEFib3J0Q29udHJvbGxlcj86IEFib3J0Q29udHJvbGxlclxuICB0b29sVXNlSWQ/OiBzdHJpbmdcbn0pOiBMb2NhbEFnZW50VGFza1N0YXRlIHtcbiAgdm9pZCBpbml0VGFza091dHB1dEFzU3ltbGluayhcbiAgICBhZ2VudElkLFxuICAgIGdldEFnZW50VHJhbnNjcmlwdFBhdGgoYXNBZ2VudElkKGFnZW50SWQpKSxcbiAgKVxuXG4gIC8vIENyZWF0ZSBhYm9ydCBjb250cm9sbGVyIC0gaWYgcGFyZW50IHByb3ZpZGVkLCBjcmVhdGUgY2hpbGQgdGhhdCBhdXRvLWFib3J0cyB3aXRoIHBhcmVudFxuICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBwYXJlbnRBYm9ydENvbnRyb2xsZXJcbiAgICA/IGNyZWF0ZUNoaWxkQWJvcnRDb250cm9sbGVyKHBhcmVudEFib3J0Q29udHJvbGxlcilcbiAgICA6IGNyZWF0ZUFib3J0Q29udHJvbGxlcigpXG5cbiAgY29uc3QgdGFza1N0YXRlOiBMb2NhbEFnZW50VGFza1N0YXRlID0ge1xuICAgIC4uLmNyZWF0ZVRhc2tTdGF0ZUJhc2UoYWdlbnRJZCwgJ2xvY2FsX2FnZW50JywgZGVzY3JpcHRpb24sIHRvb2xVc2VJZCksXG4gICAgdHlwZTogJ2xvY2FsX2FnZW50JyxcbiAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICBhZ2VudElkLFxuICAgIHByb21wdCxcbiAgICBzZWxlY3RlZEFnZW50LFxuICAgIGFnZW50VHlwZTogc2VsZWN0ZWRBZ2VudC5hZ2VudFR5cGUgPz8gJ2dlbmVyYWwtcHVycG9zZScsXG4gICAgYWJvcnRDb250cm9sbGVyLFxuICAgIHJldHJpZXZlZDogZmFsc2UsXG4gICAgbGFzdFJlcG9ydGVkVG9vbENvdW50OiAwLFxuICAgIGxhc3RSZXBvcnRlZFRva2VuQ291bnQ6IDAsXG4gICAgaXNCYWNrZ3JvdW5kZWQ6IHRydWUsIC8vIHJlZ2lzdGVyQXN5bmNBZ2VudCBpbW1lZGlhdGVseSBiYWNrZ3JvdW5kc1xuICAgIHBlbmRpbmdNZXNzYWdlczogW10sXG4gICAgcmV0YWluOiBmYWxzZSxcbiAgICBkaXNrTG9hZGVkOiBmYWxzZSxcbiAgfVxuXG4gIC8vIFJlZ2lzdGVyIGNsZWFudXAgaGFuZGxlclxuICBjb25zdCB1bnJlZ2lzdGVyQ2xlYW51cCA9IHJlZ2lzdGVyQ2xlYW51cChhc3luYyAoKSA9PiB7XG4gICAga2lsbEFzeW5jQWdlbnQoYWdlbnRJZCwgc2V0QXBwU3RhdGUpXG4gIH0pXG5cbiAgdGFza1N0YXRlLnVucmVnaXN0ZXJDbGVhbnVwID0gdW5yZWdpc3RlckNsZWFudXBcblxuICAvLyBSZWdpc3RlciB0YXNrIGluIEFwcFN0YXRlXG4gIHJlZ2lzdGVyVGFzayh0YXNrU3RhdGUsIHNldEFwcFN0YXRlKVxuXG4gIHJldHVybiB0YXNrU3RhdGVcbn1cblxuLy8gTWFwIG9mIHRhc2tJZCAtPiByZXNvbHZlIGZ1bmN0aW9uIGZvciBiYWNrZ3JvdW5kIHNpZ25hbHNcbi8vIFdoZW4gYmFja2dyb3VuZEFnZW50VGFzayBpcyBjYWxsZWQsIGl0IHJlc29sdmVzIHRoZSBjb3JyZXNwb25kaW5nIHByb21pc2VcbmNvbnN0IGJhY2tncm91bmRTaWduYWxSZXNvbHZlcnMgPSBuZXcgTWFwPHN0cmluZywgKCkgPT4gdm9pZD4oKVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgZm9yZWdyb3VuZCBhZ2VudCB0YXNrIHRoYXQgY291bGQgYmUgYmFja2dyb3VuZGVkIGxhdGVyLlxuICogQ2FsbGVkIHdoZW4gYW4gYWdlbnQgaGFzIGJlZW4gcnVubmluZyBsb25nIGVub3VnaCB0byBzaG93IHRoZSBCYWNrZ3JvdW5kSGludC5cbiAqIEByZXR1cm5zIG9iamVjdCB3aXRoIHRhc2tJZCBhbmQgYmFja2dyb3VuZFNpZ25hbCBwcm9taXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckFnZW50Rm9yZWdyb3VuZCh7XG4gIGFnZW50SWQsXG4gIGRlc2NyaXB0aW9uLFxuICBwcm9tcHQsXG4gIHNlbGVjdGVkQWdlbnQsXG4gIHNldEFwcFN0YXRlLFxuICBhdXRvQmFja2dyb3VuZE1zLFxuICB0b29sVXNlSWQsXG59OiB7XG4gIGFnZW50SWQ6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIHByb21wdDogc3RyaW5nXG4gIHNlbGVjdGVkQWdlbnQ6IEFnZW50RGVmaW5pdGlvblxuICBzZXRBcHBTdGF0ZTogU2V0QXBwU3RhdGVcbiAgYXV0b0JhY2tncm91bmRNcz86IG51bWJlclxuICB0b29sVXNlSWQ/OiBzdHJpbmdcbn0pOiB7XG4gIHRhc2tJZDogc3RyaW5nXG4gIGJhY2tncm91bmRTaWduYWw6IFByb21pc2U8dm9pZD5cbiAgY2FuY2VsQXV0b0JhY2tncm91bmQ/OiAoKSA9PiB2b2lkXG59IHtcbiAgdm9pZCBpbml0VGFza091dHB1dEFzU3ltbGluayhcbiAgICBhZ2VudElkLFxuICAgIGdldEFnZW50VHJhbnNjcmlwdFBhdGgoYXNBZ2VudElkKGFnZW50SWQpKSxcbiAgKVxuXG4gIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IGNyZWF0ZUFib3J0Q29udHJvbGxlcigpXG5cbiAgY29uc3QgdW5yZWdpc3RlckNsZWFudXAgPSByZWdpc3RlckNsZWFudXAoYXN5bmMgKCkgPT4ge1xuICAgIGtpbGxBc3luY0FnZW50KGFnZW50SWQsIHNldEFwcFN0YXRlKVxuICB9KVxuXG4gIGNvbnN0IHRhc2tTdGF0ZTogTG9jYWxBZ2VudFRhc2tTdGF0ZSA9IHtcbiAgICAuLi5jcmVhdGVUYXNrU3RhdGVCYXNlKGFnZW50SWQsICdsb2NhbF9hZ2VudCcsIGRlc2NyaXB0aW9uLCB0b29sVXNlSWQpLFxuICAgIHR5cGU6ICdsb2NhbF9hZ2VudCcsXG4gICAgc3RhdHVzOiAncnVubmluZycsXG4gICAgYWdlbnRJZCxcbiAgICBwcm9tcHQsXG4gICAgc2VsZWN0ZWRBZ2VudCxcbiAgICBhZ2VudFR5cGU6IHNlbGVjdGVkQWdlbnQuYWdlbnRUeXBlID8/ICdnZW5lcmFsLXB1cnBvc2UnLFxuICAgIGFib3J0Q29udHJvbGxlcixcbiAgICB1bnJlZ2lzdGVyQ2xlYW51cCxcbiAgICByZXRyaWV2ZWQ6IGZhbHNlLFxuICAgIGxhc3RSZXBvcnRlZFRvb2xDb3VudDogMCxcbiAgICBsYXN0UmVwb3J0ZWRUb2tlbkNvdW50OiAwLFxuICAgIGlzQmFja2dyb3VuZGVkOiBmYWxzZSwgLy8gTm90IHlldCBiYWNrZ3JvdW5kZWQgLSBydW5uaW5nIGluIGZvcmVncm91bmRcbiAgICBwZW5kaW5nTWVzc2FnZXM6IFtdLFxuICAgIHJldGFpbjogZmFsc2UsXG4gICAgZGlza0xvYWRlZDogZmFsc2UsXG4gIH1cblxuICAvLyBDcmVhdGUgYmFja2dyb3VuZCBzaWduYWwgcHJvbWlzZVxuICBsZXQgcmVzb2x2ZUJhY2tncm91bmRTaWduYWw6ICgpID0+IHZvaWRcbiAgY29uc3QgYmFja2dyb3VuZFNpZ25hbCA9IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgIHJlc29sdmVCYWNrZ3JvdW5kU2lnbmFsID0gcmVzb2x2ZVxuICB9KVxuICBiYWNrZ3JvdW5kU2lnbmFsUmVzb2x2ZXJzLnNldChhZ2VudElkLCByZXNvbHZlQmFja2dyb3VuZFNpZ25hbCEpXG5cbiAgcmVnaXN0ZXJUYXNrKHRhc2tTdGF0ZSwgc2V0QXBwU3RhdGUpXG5cbiAgLy8gQXV0by1iYWNrZ3JvdW5kIGFmdGVyIHRpbWVvdXQgaWYgY29uZmlndXJlZFxuICBsZXQgY2FuY2VsQXV0b0JhY2tncm91bmQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxuICBpZiAoYXV0b0JhY2tncm91bmRNcyAhPT0gdW5kZWZpbmVkICYmIGF1dG9CYWNrZ3JvdW5kTXMgPiAwKSB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KFxuICAgICAgKHNldEFwcFN0YXRlLCBhZ2VudElkKSA9PiB7XG4gICAgICAgIC8vIE1hcmsgdGFzayBhcyBiYWNrZ3JvdW5kZWQgYW5kIHJlc29sdmUgdGhlIHNpZ25hbFxuICAgICAgICBzZXRBcHBTdGF0ZShwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2VGFzayA9IHByZXYudGFza3NbYWdlbnRJZF1cbiAgICAgICAgICBpZiAoIWlzTG9jYWxBZ2VudFRhc2socHJldlRhc2spIHx8IHByZXZUYXNrLmlzQmFja2dyb3VuZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldlxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIHRhc2tzOiB7XG4gICAgICAgICAgICAgIC4uLnByZXYudGFza3MsXG4gICAgICAgICAgICAgIFthZ2VudElkXTogeyAuLi5wcmV2VGFzaywgaXNCYWNrZ3JvdW5kZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXNvbHZlciA9IGJhY2tncm91bmRTaWduYWxSZXNvbHZlcnMuZ2V0KGFnZW50SWQpXG4gICAgICAgIGlmIChyZXNvbHZlcikge1xuICAgICAgICAgIHJlc29sdmVyKClcbiAgICAgICAgICBiYWNrZ3JvdW5kU2lnbmFsUmVzb2x2ZXJzLmRlbGV0ZShhZ2VudElkKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXV0b0JhY2tncm91bmRNcyxcbiAgICAgIHNldEFwcFN0YXRlLFxuICAgICAgYWdlbnRJZCxcbiAgICApXG4gICAgY2FuY2VsQXV0b0JhY2tncm91bmQgPSAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpXG4gIH1cblxuICByZXR1cm4geyB0YXNrSWQ6IGFnZW50SWQsIGJhY2tncm91bmRTaWduYWwsIGNhbmNlbEF1dG9CYWNrZ3JvdW5kIH1cbn1cblxuLyoqXG4gKiBCYWNrZ3JvdW5kIGEgc3BlY2lmaWMgZm9yZWdyb3VuZCBhZ2VudCB0YXNrLlxuICogQHJldHVybnMgdHJ1ZSBpZiBiYWNrZ3JvdW5kZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhY2tncm91bmRBZ2VudFRhc2soXG4gIHRhc2tJZDogc3RyaW5nLFxuICBnZXRBcHBTdGF0ZTogKCkgPT4gQXBwU3RhdGUsXG4gIHNldEFwcFN0YXRlOiBTZXRBcHBTdGF0ZSxcbik6IGJvb2xlYW4ge1xuICBjb25zdCBzdGF0ZSA9IGdldEFwcFN0YXRlKClcbiAgY29uc3QgdGFzayA9IHN0YXRlLnRhc2tzW3Rhc2tJZF1cbiAgaWYgKCFpc0xvY2FsQWdlbnRUYXNrKHRhc2spIHx8IHRhc2suaXNCYWNrZ3JvdW5kZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFVwZGF0ZSBzdGF0ZSB0byBtYXJrIGFzIGJhY2tncm91bmRlZFxuICBzZXRBcHBTdGF0ZShwcmV2ID0+IHtcbiAgICBjb25zdCBwcmV2VGFzayA9IHByZXYudGFza3NbdGFza0lkXVxuICAgIGlmICghaXNMb2NhbEFnZW50VGFzayhwcmV2VGFzaykpIHtcbiAgICAgIHJldHVybiBwcmV2XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5wcmV2LFxuICAgICAgdGFza3M6IHtcbiAgICAgICAgLi4ucHJldi50YXNrcyxcbiAgICAgICAgW3Rhc2tJZF06IHsgLi4ucHJldlRhc2ssIGlzQmFja2dyb3VuZGVkOiB0cnVlIH0sXG4gICAgICB9LFxuICAgIH1cbiAgfSlcblxuICAvLyBSZXNvbHZlIHRoZSBiYWNrZ3JvdW5kIHNpZ25hbCB0byBpbnRlcnJ1cHQgdGhlIGFnZW50IGxvb3BcbiAgY29uc3QgcmVzb2x2ZXIgPSBiYWNrZ3JvdW5kU2lnbmFsUmVzb2x2ZXJzLmdldCh0YXNrSWQpXG4gIGlmIChyZXNvbHZlcikge1xuICAgIHJlc29sdmVyKClcbiAgICBiYWNrZ3JvdW5kU2lnbmFsUmVzb2x2ZXJzLmRlbGV0ZSh0YXNrSWQpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIFVucmVnaXN0ZXIgYSBmb3JlZ3JvdW5kIGFnZW50IHRhc2sgd2hlbiB0aGUgYWdlbnQgY29tcGxldGVzIHdpdGhvdXQgYmVpbmcgYmFja2dyb3VuZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckFnZW50Rm9yZWdyb3VuZChcbiAgdGFza0lkOiBzdHJpbmcsXG4gIHNldEFwcFN0YXRlOiBTZXRBcHBTdGF0ZSxcbik6IHZvaWQge1xuICAvLyBDbGVhbiB1cCB0aGUgYmFja2dyb3VuZCBzaWduYWwgcmVzb2x2ZXJcbiAgYmFja2dyb3VuZFNpZ25hbFJlc29sdmVycy5kZWxldGUodGFza0lkKVxuXG4gIGxldCBjbGVhbnVwRm46ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxuXG4gIHNldEFwcFN0YXRlKHByZXYgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBwcmV2LnRhc2tzW3Rhc2tJZF1cbiAgICAvLyBPbmx5IHJlbW92ZSBpZiBpdCdzIGEgZm9yZWdyb3VuZCB0YXNrIChub3QgYmFja2dyb3VuZGVkKVxuICAgIGlmICghaXNMb2NhbEFnZW50VGFzayh0YXNrKSB8fCB0YXNrLmlzQmFja2dyb3VuZGVkKSB7XG4gICAgICByZXR1cm4gcHJldlxuICAgIH1cblxuICAgIC8vIENhcHR1cmUgY2xlYW51cCBmdW5jdGlvbiB0byBjYWxsIG91dHNpZGUgb2YgdXBkYXRlclxuICAgIGNsZWFudXBGbiA9IHRhc2sudW5yZWdpc3RlckNsZWFudXBcblxuICAgIGNvbnN0IHsgW3Rhc2tJZF06IHJlbW92ZWQsIC4uLnJlc3QgfSA9IHByZXYudGFza3NcbiAgICByZXR1cm4geyAuLi5wcmV2LCB0YXNrczogcmVzdCB9XG4gIH0pXG5cbiAgLy8gQ2FsbCBjbGVhbnVwIG91dHNpZGUgb2YgdGhlIHN0YXRlIHVwZGF0ZXIgKGF2b2lkIHNpZGUgZWZmZWN0cyBpbiB1cGRhdGVyKVxuICBjbGVhbnVwRm4/LigpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLG1DQUFtQyxRQUFRLDBCQUEwQjtBQUM5RSxTQUNFQyxlQUFlLEVBQ2ZDLFVBQVUsRUFDVkMsV0FBVyxFQUNYQyxXQUFXLEVBQ1hDLHFCQUFxQixFQUNyQkMsZUFBZSxFQUNmQyxtQkFBbUIsRUFDbkJDLGlCQUFpQixFQUNqQkMsWUFBWSxRQUNQLHdCQUF3QjtBQUMvQixTQUFTQyxnQkFBZ0IsUUFBUSxnREFBZ0Q7QUFDakYsY0FBY0MsUUFBUSxRQUFRLHlCQUF5QjtBQUN2RCxjQUFjQyxXQUFXLEVBQUVDLElBQUksRUFBRUMsYUFBYSxRQUFRLGVBQWU7QUFDckUsU0FBU0MsbUJBQW1CLFFBQVEsZUFBZTtBQUNuRCxjQUFjQyxLQUFLLFFBQVEsZUFBZTtBQUMxQyxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxjQUFjQyxlQUFlLFFBQVEseUNBQXlDO0FBQzlFLGNBQWNDLGVBQWUsUUFBUSx3Q0FBd0M7QUFDN0UsU0FBU0MsMEJBQTBCLFFBQVEsd0RBQXdEO0FBQ25HLFNBQVNDLFNBQVMsUUFBUSxvQkFBb0I7QUFDOUMsY0FBY0MsT0FBTyxRQUFRLHdCQUF3QjtBQUNyRCxTQUNFQyxxQkFBcUIsRUFDckJDLDBCQUEwQixRQUNyQixnQ0FBZ0M7QUFDdkMsU0FBU0MsZUFBZSxRQUFRLGdDQUFnQztBQUNoRSxTQUFTQyx1QkFBdUIsUUFBUSxtQ0FBbUM7QUFDM0UsU0FBU0MsMEJBQTBCLFFBQVEsb0NBQW9DO0FBQy9FLFNBQVNDLHNCQUFzQixRQUFRLCtCQUErQjtBQUN0RSxTQUNFQyxlQUFlLEVBQ2ZDLGlC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