catui-agent 1.0.0-beta.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 (1274) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +267 -0
  3. package/dist/build-meta.json +6 -0
  4. package/dist/builtin-extensions.d.ts +47 -0
  5. package/dist/builtin-extensions.js +1 -0
  6. package/dist/catui-defaults.d.ts +555 -0
  7. package/dist/catui-defaults.js +22 -0
  8. package/dist/cli/args.d.ts +70 -0
  9. package/dist/cli/args.js +158 -0
  10. package/dist/cli/config-selector.d.ts +10 -0
  11. package/dist/cli/config-selector.js +1 -0
  12. package/dist/cli/file-processor.d.ts +11 -0
  13. package/dist/cli/file-processor.js +6 -0
  14. package/dist/cli/list-models.d.ts +12 -0
  15. package/dist/cli/list-models.js +2 -0
  16. package/dist/cli/session-picker.d.ts +5 -0
  17. package/dist/cli/session-picker.js +1 -0
  18. package/dist/cli.d.ts +2 -0
  19. package/dist/cli.js +2 -0
  20. package/dist/config.d.ts +103 -0
  21. package/dist/config.js +1 -0
  22. package/dist/core/agent-dir/agent-dir-context.d.ts +60 -0
  23. package/dist/core/agent-dir/agent-dir-context.js +1 -0
  24. package/dist/core/agent-dir/agent-metadata.d.ts +48 -0
  25. package/dist/core/agent-dir/agent-metadata.js +1 -0
  26. package/dist/core/agent-dir/migration-tool.d.ts +40 -0
  27. package/dist/core/agent-dir/migration-tool.js +7 -0
  28. package/dist/core/export-html/AGENT.md +12 -0
  29. package/dist/core/export-html/ansi-to-html.d.ts +9 -0
  30. package/dist/core/export-html/ansi-to-html.js +2 -0
  31. package/dist/core/export-html/index.d.ts +39 -0
  32. package/dist/core/export-html/index.js +2 -0
  33. package/dist/core/export-html/template.css +971 -0
  34. package/dist/core/export-html/template.html +54 -0
  35. package/dist/core/export-html/template.js +66 -0
  36. package/dist/core/export-html/tool-renderer.d.ts +28 -0
  37. package/dist/core/export-html/tool-renderer.js +1 -0
  38. package/dist/core/export-html/vendor/highlight.min.js +4 -0
  39. package/dist/core/export-html/vendor/marked.min.js +56 -0
  40. package/dist/core/extensions-host/index.d.ts +13 -0
  41. package/dist/core/extensions-host/index.js +1 -0
  42. package/dist/core/extensions-host/loader.d.ts +21 -0
  43. package/dist/core/extensions-host/loader.js +1 -0
  44. package/dist/core/extensions-host/runner.d.ts +233 -0
  45. package/dist/core/extensions-host/runner.js +3 -0
  46. package/dist/core/extensions-host/types.d.ts +1079 -0
  47. package/dist/core/extensions-host/types.js +1 -0
  48. package/dist/core/extensions-host/wrapper.d.ts +29 -0
  49. package/dist/core/extensions-host/wrapper.js +2 -0
  50. package/dist/core/index.d.ts +17 -0
  51. package/dist/core/index.js +1 -0
  52. package/dist/core/lib/agent-core/src/agent-loop-continuations.d.ts +17 -0
  53. package/dist/core/lib/agent-core/src/agent-loop-continuations.js +1 -0
  54. package/dist/core/lib/agent-core/src/agent-loop-stream-events.d.ts +19 -0
  55. package/dist/core/lib/agent-core/src/agent-loop-stream-events.js +1 -0
  56. package/dist/core/lib/agent-core/src/agent-loop-tool-results.d.ts +10 -0
  57. package/dist/core/lib/agent-core/src/agent-loop-tool-results.js +3 -0
  58. package/dist/core/lib/agent-core/src/agent-loop-tool-summaries.d.ts +22 -0
  59. package/dist/core/lib/agent-core/src/agent-loop-tool-summaries.js +1 -0
  60. package/dist/core/lib/agent-core/src/agent-loop.d.ts +26 -0
  61. package/dist/core/lib/agent-core/src/agent-loop.js +4 -0
  62. package/dist/core/lib/agent-core/src/agent-run-result.d.ts +9 -0
  63. package/dist/core/lib/agent-core/src/agent-run-result.js +1 -0
  64. package/dist/core/lib/agent-core/src/agent.d.ts +215 -0
  65. package/dist/core/lib/agent-core/src/agent.js +1 -0
  66. package/dist/core/lib/agent-core/src/errors.d.ts +62 -0
  67. package/dist/core/lib/agent-core/src/errors.js +1 -0
  68. package/dist/core/lib/agent-core/src/index.d.ts +14 -0
  69. package/dist/core/lib/agent-core/src/index.js +1 -0
  70. package/dist/core/lib/agent-core/src/proxy.d.ts +91 -0
  71. package/dist/core/lib/agent-core/src/proxy.js +2 -0
  72. package/dist/core/lib/agent-core/src/structured-adaptive-agent-loop.d.ts +15 -0
  73. package/dist/core/lib/agent-core/src/structured-adaptive-agent-loop.js +2 -0
  74. package/dist/core/lib/agent-core/src/structured-adaptive-streaming-tool-executor.d.ts +33 -0
  75. package/dist/core/lib/agent-core/src/structured-adaptive-streaming-tool-executor.js +1 -0
  76. package/dist/core/lib/agent-core/src/structured-adaptive-tool-orchestration.d.ts +35 -0
  77. package/dist/core/lib/agent-core/src/structured-adaptive-tool-orchestration.js +3 -0
  78. package/dist/core/lib/agent-core/src/types.d.ts +417 -0
  79. package/dist/core/lib/agent-core/src/types.js +1 -0
  80. package/dist/core/lib/ai/src/api-registry.d.ts +27 -0
  81. package/dist/core/lib/ai/src/api-registry.js +1 -0
  82. package/dist/core/lib/ai/src/config-path.d.ts +1 -0
  83. package/dist/core/lib/ai/src/config-path.js +1 -0
  84. package/dist/core/lib/ai/src/debug-logger.d.ts +94 -0
  85. package/dist/core/lib/ai/src/debug-logger.js +4 -0
  86. package/dist/core/lib/ai/src/env-api-keys.d.ts +8 -0
  87. package/dist/core/lib/ai/src/env-api-keys.js +1 -0
  88. package/dist/core/lib/ai/src/env.d.ts +7 -0
  89. package/dist/core/lib/ai/src/env.js +1 -0
  90. package/dist/core/lib/ai/src/events.d.ts +8 -0
  91. package/dist/core/lib/ai/src/events.js +1 -0
  92. package/dist/core/lib/ai/src/index.d.ts +27 -0
  93. package/dist/core/lib/ai/src/index.js +1 -0
  94. package/dist/core/lib/ai/src/json.d.ts +7 -0
  95. package/dist/core/lib/ai/src/json.js +1 -0
  96. package/dist/core/lib/ai/src/models.d.ts +31 -0
  97. package/dist/core/lib/ai/src/models.generated.d.ts +15315 -0
  98. package/dist/core/lib/ai/src/models.generated.js +1 -0
  99. package/dist/core/lib/ai/src/models.js +1 -0
  100. package/dist/core/lib/ai/src/overflow.d.ts +7 -0
  101. package/dist/core/lib/ai/src/overflow.js +1 -0
  102. package/dist/core/lib/ai/src/providers/amazon-bedrock.d.ts +20 -0
  103. package/dist/core/lib/ai/src/providers/amazon-bedrock.js +1 -0
  104. package/dist/core/lib/ai/src/providers/anthropic.d.ts +38 -0
  105. package/dist/core/lib/ai/src/providers/anthropic.js +2 -0
  106. package/dist/core/lib/ai/src/providers/azure-openai-responses.d.ts +21 -0
  107. package/dist/core/lib/ai/src/providers/azure-openai-responses.js +1 -0
  108. package/dist/core/lib/ai/src/providers/github-copilot-headers.d.ts +13 -0
  109. package/dist/core/lib/ai/src/providers/github-copilot-headers.js +1 -0
  110. package/dist/core/lib/ai/src/providers/google-gemini-cli.d.ts +79 -0
  111. package/dist/core/lib/ai/src/providers/google-gemini-cli.js +2 -0
  112. package/dist/core/lib/ai/src/providers/google-shared.d.ts +70 -0
  113. package/dist/core/lib/ai/src/providers/google-shared.js +2 -0
  114. package/dist/core/lib/ai/src/providers/google-vertex.d.ts +20 -0
  115. package/dist/core/lib/ai/src/providers/google-vertex.js +1 -0
  116. package/dist/core/lib/ai/src/providers/google.d.ts +18 -0
  117. package/dist/core/lib/ai/src/providers/google.js +1 -0
  118. package/dist/core/lib/ai/src/providers/openai-codex-responses.d.ts +8 -0
  119. package/dist/core/lib/ai/src/providers/openai-codex-responses.js +7 -0
  120. package/dist/core/lib/ai/src/providers/openai-completions.d.ts +20 -0
  121. package/dist/core/lib/ai/src/providers/openai-completions.js +6 -0
  122. package/dist/core/lib/ai/src/providers/openai-responses-shared.d.ts +22 -0
  123. package/dist/core/lib/ai/src/providers/openai-responses-shared.js +10 -0
  124. package/dist/core/lib/ai/src/providers/openai-responses.d.ts +19 -0
  125. package/dist/core/lib/ai/src/providers/openai-responses.js +1 -0
  126. package/dist/core/lib/ai/src/providers/register-builtins.d.ts +8 -0
  127. package/dist/core/lib/ai/src/providers/register-builtins.js +1 -0
  128. package/dist/core/lib/ai/src/providers/simple-options.d.ts +13 -0
  129. package/dist/core/lib/ai/src/providers/simple-options.js +1 -0
  130. package/dist/core/lib/ai/src/providers/transform-messages.d.ts +13 -0
  131. package/dist/core/lib/ai/src/providers/transform-messages.js +1 -0
  132. package/dist/core/lib/ai/src/registry.d.ts +8 -0
  133. package/dist/core/lib/ai/src/registry.js +1 -0
  134. package/dist/core/lib/ai/src/schema.d.ts +10 -0
  135. package/dist/core/lib/ai/src/schema.js +1 -0
  136. package/dist/core/lib/ai/src/stream.d.ts +33 -0
  137. package/dist/core/lib/ai/src/stream.js +1 -0
  138. package/dist/core/lib/ai/src/types.d.ts +331 -0
  139. package/dist/core/lib/ai/src/types.js +0 -0
  140. package/dist/core/lib/ai/src/utils/event-stream-types.d.ts +12 -0
  141. package/dist/core/lib/ai/src/utils/event-stream-types.js +0 -0
  142. package/dist/core/lib/ai/src/utils/event-stream.d.ts +31 -0
  143. package/dist/core/lib/ai/src/utils/event-stream.js +1 -0
  144. package/dist/core/lib/ai/src/utils/http-proxy.d.ts +13 -0
  145. package/dist/core/lib/ai/src/utils/http-proxy.js +1 -0
  146. package/dist/core/lib/ai/src/utils/json-parse.d.ts +14 -0
  147. package/dist/core/lib/ai/src/utils/json-parse.js +1 -0
  148. package/dist/core/lib/ai/src/utils/oauth/anthropic.d.ts +22 -0
  149. package/dist/core/lib/ai/src/utils/oauth/anthropic.js +1 -0
  150. package/dist/core/lib/ai/src/utils/oauth/decode-credential.d.ts +12 -0
  151. package/dist/core/lib/ai/src/utils/oauth/decode-credential.js +1 -0
  152. package/dist/core/lib/ai/src/utils/oauth/github-copilot.d.ts +35 -0
  153. package/dist/core/lib/ai/src/utils/oauth/github-copilot.js +1 -0
  154. package/dist/core/lib/ai/src/utils/oauth/google-antigravity.d.ts +31 -0
  155. package/dist/core/lib/ai/src/utils/oauth/google-antigravity.js +1 -0
  156. package/dist/core/lib/ai/src/utils/oauth/google-gemini-cli.d.ts +31 -0
  157. package/dist/core/lib/ai/src/utils/oauth/google-gemini-cli.js +1 -0
  158. package/dist/core/lib/ai/src/utils/oauth/index.d.ts +60 -0
  159. package/dist/core/lib/ai/src/utils/oauth/index.js +1 -0
  160. package/dist/core/lib/ai/src/utils/oauth/openai-codex.d.ts +39 -0
  161. package/dist/core/lib/ai/src/utils/oauth/openai-codex.js +11 -0
  162. package/dist/core/lib/ai/src/utils/oauth/pkce.d.ts +18 -0
  163. package/dist/core/lib/ai/src/utils/oauth/pkce.js +1 -0
  164. package/dist/core/lib/ai/src/utils/oauth/types.d.ts +52 -0
  165. package/dist/core/lib/ai/src/utils/oauth/types.js +0 -0
  166. package/dist/core/lib/ai/src/utils/overflow.d.ts +57 -0
  167. package/dist/core/lib/ai/src/utils/overflow.js +1 -0
  168. package/dist/core/lib/ai/src/utils/sanitize-unicode.d.ts +16 -0
  169. package/dist/core/lib/ai/src/utils/sanitize-unicode.js +1 -0
  170. package/dist/core/lib/ai/src/utils/typebox-helpers.d.ts +22 -0
  171. package/dist/core/lib/ai/src/utils/typebox-helpers.js +1 -0
  172. package/dist/core/lib/ai/src/utils/validation.d.ts +23 -0
  173. package/dist/core/lib/ai/src/utils/validation.js +6 -0
  174. package/dist/core/lib/tui/src/autocomplete.d.ts +62 -0
  175. package/dist/core/lib/tui/src/autocomplete.js +2 -0
  176. package/dist/core/lib/tui/src/components/box.d.ts +27 -0
  177. package/dist/core/lib/tui/src/components/box.js +1 -0
  178. package/dist/core/lib/tui/src/components/cached-container.d.ts +42 -0
  179. package/dist/core/lib/tui/src/components/cached-container.js +1 -0
  180. package/dist/core/lib/tui/src/components/cancellable-loader.d.ts +27 -0
  181. package/dist/core/lib/tui/src/components/cancellable-loader.js +1 -0
  182. package/dist/core/lib/tui/src/components/editor.d.ts +222 -0
  183. package/dist/core/lib/tui/src/components/editor.js +21 -0
  184. package/dist/core/lib/tui/src/components/image.d.ts +33 -0
  185. package/dist/core/lib/tui/src/components/image.js +1 -0
  186. package/dist/core/lib/tui/src/components/input.d.ts +42 -0
  187. package/dist/core/lib/tui/src/components/input.js +2 -0
  188. package/dist/core/lib/tui/src/components/loader.d.ts +26 -0
  189. package/dist/core/lib/tui/src/components/loader.js +1 -0
  190. package/dist/core/lib/tui/src/components/markdown.d.ts +100 -0
  191. package/dist/core/lib/tui/src/components/markdown.js +7 -0
  192. package/dist/core/lib/tui/src/components/select-list.d.ts +37 -0
  193. package/dist/core/lib/tui/src/components/select-list.js +1 -0
  194. package/dist/core/lib/tui/src/components/settings-list.d.ts +55 -0
  195. package/dist/core/lib/tui/src/components/settings-list.js +1 -0
  196. package/dist/core/lib/tui/src/components/spacer.d.ts +17 -0
  197. package/dist/core/lib/tui/src/components/spacer.js +1 -0
  198. package/dist/core/lib/tui/src/components/text.d.ts +24 -0
  199. package/dist/core/lib/tui/src/components/text.js +1 -0
  200. package/dist/core/lib/tui/src/components/truncated-text.d.ts +18 -0
  201. package/dist/core/lib/tui/src/components/truncated-text.js +2 -0
  202. package/dist/core/lib/tui/src/editor-component.d.ts +51 -0
  203. package/dist/core/lib/tui/src/editor-component.js +0 -0
  204. package/dist/core/lib/tui/src/fuzzy.d.ts +32 -0
  205. package/dist/core/lib/tui/src/fuzzy.js +1 -0
  206. package/dist/core/lib/tui/src/index.d.ts +29 -0
  207. package/dist/core/lib/tui/src/index.js +1 -0
  208. package/dist/core/lib/tui/src/keybindings.d.ts +44 -0
  209. package/dist/core/lib/tui/src/keybindings.js +1 -0
  210. package/dist/core/lib/tui/src/keys.d.ts +149 -0
  211. package/dist/core/lib/tui/src/keys.js +5 -0
  212. package/dist/core/lib/tui/src/kill-ring.d.ts +33 -0
  213. package/dist/core/lib/tui/src/kill-ring.js +1 -0
  214. package/dist/core/lib/tui/src/stdin-buffer.d.ts +38 -0
  215. package/dist/core/lib/tui/src/stdin-buffer.js +1 -0
  216. package/dist/core/lib/tui/src/terminal-image.d.ts +73 -0
  217. package/dist/core/lib/tui/src/terminal-image.js +1 -0
  218. package/dist/core/lib/tui/src/terminal.d.ts +86 -0
  219. package/dist/core/lib/tui/src/terminal.js +1 -0
  220. package/dist/core/lib/tui/src/tui.d.ts +220 -0
  221. package/dist/core/lib/tui/src/tui.js +12 -0
  222. package/dist/core/lib/tui/src/undo-stack.d.ts +22 -0
  223. package/dist/core/lib/tui/src/undo-stack.js +1 -0
  224. package/dist/core/lib/tui/src/utils.d.ts +83 -0
  225. package/dist/core/lib/tui/src/utils.js +2 -0
  226. package/dist/core/mcp/figma-auth.d.ts +21 -0
  227. package/dist/core/mcp/figma-auth.js +22 -0
  228. package/dist/core/mcp/index.d.ts +11 -0
  229. package/dist/core/mcp/index.js +1 -0
  230. package/dist/core/mcp/mcp-adapter.d.ts +21 -0
  231. package/dist/core/mcp/mcp-adapter.js +3 -0
  232. package/dist/core/mcp/mcp-client.d.ts +91 -0
  233. package/dist/core/mcp/mcp-client.js +6 -0
  234. package/dist/core/mcp/mcp-config.d.ts +55 -0
  235. package/dist/core/mcp/mcp-config.js +1 -0
  236. package/dist/core/mcp/mcp-guidance.d.ts +52 -0
  237. package/dist/core/mcp/mcp-guidance.js +54 -0
  238. package/dist/core/mcp/mcp-manager.d.ts +51 -0
  239. package/dist/core/mcp/mcp-manager.js +1 -0
  240. package/dist/core/mcp/mcp-types.d.ts +62 -0
  241. package/dist/core/mcp/mcp-types.js +0 -0
  242. package/dist/core/messages.d.ts +77 -0
  243. package/dist/core/messages.js +17 -0
  244. package/dist/core/model/custom-providers.d.ts +34 -0
  245. package/dist/core/model/custom-providers.js +1 -0
  246. package/dist/core/model/discovery-cache.d.ts +65 -0
  247. package/dist/core/model/discovery-cache.js +1 -0
  248. package/dist/core/model/discovery-cache.test.d.ts +7 -0
  249. package/dist/core/model/discovery-cache.test.js +1 -0
  250. package/dist/core/model/discovery.d.ts +79 -0
  251. package/dist/core/model/discovery.js +1 -0
  252. package/dist/core/model/discovery.test.d.ts +7 -0
  253. package/dist/core/model/discovery.test.js +1 -0
  254. package/dist/core/model/index.d.ts +10 -0
  255. package/dist/core/model/index.js +1 -0
  256. package/dist/core/model/known-models.d.ts +65 -0
  257. package/dist/core/model/known-models.generated.d.ts +2 -0
  258. package/dist/core/model/known-models.generated.js +1 -0
  259. package/dist/core/model/known-models.js +1 -0
  260. package/dist/core/model/switcher.d.ts +80 -0
  261. package/dist/core/model/switcher.js +1 -0
  262. package/dist/core/model-registry.d.ts +186 -0
  263. package/dist/core/model-registry.js +9 -0
  264. package/dist/core/model-resolver.d.ts +106 -0
  265. package/dist/core/model-resolver.js +1 -0
  266. package/dist/core/package-manager.d.ts +156 -0
  267. package/dist/core/package-manager.js +3 -0
  268. package/dist/core/persona/persona-manager.d.ts +35 -0
  269. package/dist/core/persona/persona-manager.js +5 -0
  270. package/dist/core/platform/abort-slot.d.ts +26 -0
  271. package/dist/core/platform/abort-slot.js +1 -0
  272. package/dist/core/platform/config/auth-storage.d.ts +126 -0
  273. package/dist/core/platform/config/auth-storage.js +1 -0
  274. package/dist/core/platform/config/defaults.d.ts +8 -0
  275. package/dist/core/platform/config/defaults.js +1 -0
  276. package/dist/core/platform/config/diagnostics.d.ts +20 -0
  277. package/dist/core/platform/config/diagnostics.js +0 -0
  278. package/dist/core/platform/config/resolve-config-value.d.ts +12 -0
  279. package/dist/core/platform/config/resolve-config-value.js +1 -0
  280. package/dist/core/platform/config/resource-loader.d.ts +188 -0
  281. package/dist/core/platform/config/resource-loader.js +2 -0
  282. package/dist/core/platform/config/settings-manager.d.ts +314 -0
  283. package/dist/core/platform/config/settings-manager.js +1 -0
  284. package/dist/core/platform/exec/bash-executor.d.ts +41 -0
  285. package/dist/core/platform/exec/bash-executor.js +1 -0
  286. package/dist/core/platform/exec/exec.d.ts +25 -0
  287. package/dist/core/platform/exec/exec.js +1 -0
  288. package/dist/core/platform/i18n/index.d.ts +26 -0
  289. package/dist/core/platform/i18n/index.js +1 -0
  290. package/dist/core/platform/i18n/messages.d.ts +56 -0
  291. package/dist/core/platform/i18n/messages.js +1 -0
  292. package/dist/core/platform/i18n/messages.zh.d.ts +56 -0
  293. package/dist/core/platform/i18n/messages.zh.js +1 -0
  294. package/dist/core/platform/i18n/slash-commands.d.ts +53 -0
  295. package/dist/core/platform/i18n/slash-commands.js +1 -0
  296. package/dist/core/platform/i18n/slash-commands.zh.d.ts +53 -0
  297. package/dist/core/platform/i18n/slash-commands.zh.js +1 -0
  298. package/dist/core/platform/i18n/themes.d.ts +11 -0
  299. package/dist/core/platform/i18n/themes.js +1 -0
  300. package/dist/core/platform/i18n/themes.zh.d.ts +11 -0
  301. package/dist/core/platform/i18n/themes.zh.js +1 -0
  302. package/dist/core/platform/keybindings.d.ts +61 -0
  303. package/dist/core/platform/keybindings.js +1 -0
  304. package/dist/core/platform/listeners.d.ts +21 -0
  305. package/dist/core/platform/listeners.js +1 -0
  306. package/dist/core/platform/telemetry/batching-dispatcher.d.ts +41 -0
  307. package/dist/core/platform/telemetry/batching-dispatcher.js +1 -0
  308. package/dist/core/platform/telemetry/build-meta.d.ts +12 -0
  309. package/dist/core/platform/telemetry/build-meta.js +1 -0
  310. package/dist/core/platform/telemetry/caller-context.d.ts +32 -0
  311. package/dist/core/platform/telemetry/caller-context.js +1 -0
  312. package/dist/core/platform/telemetry/credentials.d.ts +27 -0
  313. package/dist/core/platform/telemetry/credentials.js +1 -0
  314. package/dist/core/platform/telemetry/ext-events.d.ts +89 -0
  315. package/dist/core/platform/telemetry/ext-events.js +1 -0
  316. package/dist/core/platform/telemetry/index.d.ts +13 -0
  317. package/dist/core/platform/telemetry/index.js +1 -0
  318. package/dist/core/platform/telemetry/insforge-base.d.ts +37 -0
  319. package/dist/core/platform/telemetry/insforge-base.js +1 -0
  320. package/dist/core/platform/telemetry/types.d.ts +33 -0
  321. package/dist/core/platform/telemetry/types.js +0 -0
  322. package/dist/core/platform/timings.d.ts +2 -0
  323. package/dist/core/platform/timings.js +3 -0
  324. package/dist/core/platform/utils/logger.d.ts +75 -0
  325. package/dist/core/platform/utils/logger.js +1 -0
  326. package/dist/core/platform/utils/shell.d.ts +25 -0
  327. package/dist/core/platform/utils/shell.js +9 -0
  328. package/dist/core/platform/utils/sleep.d.ts +7 -0
  329. package/dist/core/platform/utils/sleep.js +1 -0
  330. package/dist/core/platform/utils/tools-manager.d.ts +19 -0
  331. package/dist/core/platform/utils/tools-manager.js +1 -0
  332. package/dist/core/prompt/prompt-templates.d.ts +49 -0
  333. package/dist/core/prompt/prompt-templates.js +2 -0
  334. package/dist/core/prompt/system-prompt.d.ts +24 -0
  335. package/dist/core/prompt/system-prompt.js +139 -0
  336. package/dist/core/runtime/agent-session.d.ts +676 -0
  337. package/dist/core/runtime/agent-session.js +15 -0
  338. package/dist/core/runtime/bash-runner.d.ts +56 -0
  339. package/dist/core/runtime/bash-runner.js +2 -0
  340. package/dist/core/runtime/catui-agent.d.ts +182 -0
  341. package/dist/core/runtime/catui-agent.js +1 -0
  342. package/dist/core/runtime/compaction-controller.d.ts +43 -0
  343. package/dist/core/runtime/compaction-controller.js +1 -0
  344. package/dist/core/runtime/default-tools.d.ts +9 -0
  345. package/dist/core/runtime/default-tools.js +1 -0
  346. package/dist/core/runtime/event-bridge.d.ts +21 -0
  347. package/dist/core/runtime/event-bridge.js +1 -0
  348. package/dist/core/runtime/event-bus.d.ts +8 -0
  349. package/dist/core/runtime/event-bus.js +1 -0
  350. package/dist/core/runtime/export-bridge.d.ts +23 -0
  351. package/dist/core/runtime/export-bridge.js +1 -0
  352. package/dist/core/runtime/extension-core-bindings.d.ts +46 -0
  353. package/dist/core/runtime/extension-core-bindings.js +3 -0
  354. package/dist/core/runtime/model-controller.d.ts +84 -0
  355. package/dist/core/runtime/model-controller.js +1 -0
  356. package/dist/core/runtime/model-cycle.d.ts +20 -0
  357. package/dist/core/runtime/model-cycle.js +1 -0
  358. package/dist/core/runtime/prompt-assembly.d.ts +20 -0
  359. package/dist/core/runtime/prompt-assembly.js +3 -0
  360. package/dist/core/runtime/retry-coordinator.d.ts +84 -0
  361. package/dist/core/runtime/retry-coordinator.js +1 -0
  362. package/dist/core/runtime/sdk.d.ts +163 -0
  363. package/dist/core/runtime/sdk.js +1 -0
  364. package/dist/core/runtime/session-context.d.ts +155 -0
  365. package/dist/core/runtime/session-context.js +0 -0
  366. package/dist/core/runtime/session-lifecycle-controller.d.ts +42 -0
  367. package/dist/core/runtime/session-lifecycle-controller.js +1 -0
  368. package/dist/core/runtime/session-tree-controller.d.ts +40 -0
  369. package/dist/core/runtime/session-tree-controller.js +1 -0
  370. package/dist/core/runtime/slash-command-catalog.d.ts +27 -0
  371. package/dist/core/runtime/slash-command-catalog.js +1 -0
  372. package/dist/core/runtime/thinking-levels.d.ts +31 -0
  373. package/dist/core/runtime/thinking-levels.js +1 -0
  374. package/dist/core/runtime/tool-runtime-controller.d.ts +35 -0
  375. package/dist/core/runtime/tool-runtime-controller.js +1 -0
  376. package/dist/core/runtime/turn-context.d.ts +52 -0
  377. package/dist/core/runtime/turn-context.js +1 -0
  378. package/dist/core/session/compaction/branch-summarization.d.ts +85 -0
  379. package/dist/core/session/compaction/branch-summarization.js +38 -0
  380. package/dist/core/session/compaction/compaction.d.ts +120 -0
  381. package/dist/core/session/compaction/compaction.js +104 -0
  382. package/dist/core/session/compaction/index.d.ts +9 -0
  383. package/dist/core/session/compaction/index.js +1 -0
  384. package/dist/core/session/compaction/utils.d.ts +37 -0
  385. package/dist/core/session/compaction/utils.js +17 -0
  386. package/dist/core/session/session-manager.d.ts +359 -0
  387. package/dist/core/session/session-manager.js +14 -0
  388. package/dist/core/skills.d.ts +57 -0
  389. package/dist/core/skills.js +4 -0
  390. package/dist/core/slash-commands.d.ts +36 -0
  391. package/dist/core/slash-commands.js +1 -0
  392. package/dist/core/soul-integration.d.ts +77 -0
  393. package/dist/core/soul-integration.js +1 -0
  394. package/dist/core/soul-options-contract.d.ts +10 -0
  395. package/dist/core/soul-options-contract.js +0 -0
  396. package/dist/core/sub-agent/agent-definition-loader.d.ts +96 -0
  397. package/dist/core/sub-agent/agent-definition-loader.js +2 -0
  398. package/dist/core/sub-agent/agent-definition.d.ts +162 -0
  399. package/dist/core/sub-agent/agent-definition.js +6 -0
  400. package/dist/core/sub-agent/agent-handoff-safety.d.ts +39 -0
  401. package/dist/core/sub-agent/agent-handoff-safety.js +1 -0
  402. package/dist/core/sub-agent/agent-input-output.d.ts +143 -0
  403. package/dist/core/sub-agent/agent-input-output.js +1 -0
  404. package/dist/core/sub-agent/agent-output-persistence.d.ts +43 -0
  405. package/dist/core/sub-agent/agent-output-persistence.js +3 -0
  406. package/dist/core/sub-agent/agent-prompt-builder.d.ts +37 -0
  407. package/dist/core/sub-agent/agent-prompt-builder.js +2 -0
  408. package/dist/core/sub-agent/agent-registry.d.ts +145 -0
  409. package/dist/core/sub-agent/agent-registry.js +1 -0
  410. package/dist/core/sub-agent/agent-result-extractor.d.ts +28 -0
  411. package/dist/core/sub-agent/agent-result-extractor.js +3 -0
  412. package/dist/core/sub-agent/agent-telemetry.d.ts +71 -0
  413. package/dist/core/sub-agent/agent-telemetry.js +1 -0
  414. package/dist/core/sub-agent/agent-tool-filter.d.ts +89 -0
  415. package/dist/core/sub-agent/agent-tool-filter.js +2 -0
  416. package/dist/core/sub-agent/agent-tool.d.ts +69 -0
  417. package/dist/core/sub-agent/agent-tool.js +11 -0
  418. package/dist/core/sub-agent/index.d.ts +26 -0
  419. package/dist/core/sub-agent/index.js +1 -0
  420. package/dist/core/sub-agent/send-message-tool.d.ts +33 -0
  421. package/dist/core/sub-agent/send-message-tool.js +2 -0
  422. package/dist/core/sub-agent/sub-agent-backend.d.ts +26 -0
  423. package/dist/core/sub-agent/sub-agent-backend.js +7 -0
  424. package/dist/core/sub-agent/sub-agent-runtime.d.ts +34 -0
  425. package/dist/core/sub-agent/sub-agent-runtime.js +1 -0
  426. package/dist/core/sub-agent/sub-agent-types.d.ts +138 -0
  427. package/dist/core/sub-agent/sub-agent-types.js +0 -0
  428. package/dist/core/sub-agent/subprocess-backend.d.ts +35 -0
  429. package/dist/core/sub-agent/subprocess-backend.js +1 -0
  430. package/dist/core/sub-agent/subprocess-worker.d.ts +12 -0
  431. package/dist/core/sub-agent/subprocess-worker.js +1 -0
  432. package/dist/core/theme-contract.d.ts +32 -0
  433. package/dist/core/theme-contract.js +0 -0
  434. package/dist/core/tools/bash.d.ts +73 -0
  435. package/dist/core/tools/bash.js +21 -0
  436. package/dist/core/tools/edit-diff.d.ts +58 -0
  437. package/dist/core/tools/edit-diff.js +16 -0
  438. package/dist/core/tools/edit.d.ts +46 -0
  439. package/dist/core/tools/edit.js +1 -0
  440. package/dist/core/tools/file-state-cache.d.ts +30 -0
  441. package/dist/core/tools/file-state-cache.js +1 -0
  442. package/dist/core/tools/find.d.ts +46 -0
  443. package/dist/core/tools/find.js +8 -0
  444. package/dist/core/tools/grep.d.ts +58 -0
  445. package/dist/core/tools/grep.js +13 -0
  446. package/dist/core/tools/index.d.ts +116 -0
  447. package/dist/core/tools/index.js +1 -0
  448. package/dist/core/tools/input-validation.d.ts +13 -0
  449. package/dist/core/tools/input-validation.js +1 -0
  450. package/dist/core/tools/ls.d.ts +45 -0
  451. package/dist/core/tools/ls.js +4 -0
  452. package/dist/core/tools/orchestrator.d.ts +76 -0
  453. package/dist/core/tools/orchestrator.js +1 -0
  454. package/dist/core/tools/path-utils.d.ts +7 -0
  455. package/dist/core/tools/path-utils.js +1 -0
  456. package/dist/core/tools/pdf-extract.d.ts +11 -0
  457. package/dist/core/tools/pdf-extract.js +1 -0
  458. package/dist/core/tools/read.d.ts +46 -0
  459. package/dist/core/tools/read.js +11 -0
  460. package/dist/core/tools/source.d.ts +78 -0
  461. package/dist/core/tools/source.js +1 -0
  462. package/dist/core/tools/time.d.ts +19 -0
  463. package/dist/core/tools/time.js +2 -0
  464. package/dist/core/tools/truncate.d.ts +66 -0
  465. package/dist/core/tools/truncate.js +5 -0
  466. package/dist/core/tools/write-guard.d.ts +2 -0
  467. package/dist/core/tools/write-guard.js +1 -0
  468. package/dist/core/tools/write.d.ts +36 -0
  469. package/dist/core/tools/write.js +1 -0
  470. package/dist/core/workspace/index.d.ts +8 -0
  471. package/dist/core/workspace/index.js +1 -0
  472. package/dist/core/workspace/worktree-manager.d.ts +73 -0
  473. package/dist/core/workspace/worktree-manager.js +3 -0
  474. package/dist/extensions/builtin/AGENT.md +115 -0
  475. package/dist/extensions/builtin/ask-user-question/ask-user-question-tool.d.ts +9 -0
  476. package/dist/extensions/builtin/ask-user-question/ask-user-question-tool.js +4 -0
  477. package/dist/extensions/builtin/ask-user-question/index.d.ts +8 -0
  478. package/dist/extensions/builtin/ask-user-question/index.js +1 -0
  479. package/dist/extensions/builtin/ask-user-question/prompt.d.ts +14 -0
  480. package/dist/extensions/builtin/ask-user-question/prompt.js +30 -0
  481. package/dist/extensions/builtin/ask-user-question/types.d.ts +69 -0
  482. package/dist/extensions/builtin/ask-user-question/types.js +1 -0
  483. package/dist/extensions/builtin/browser/AGENT.md +17 -0
  484. package/dist/extensions/builtin/browser/agent-workspace/agent_helpers.py +12 -0
  485. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/amazon/product-search.md +198 -0
  486. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/archive-org/scraping.md +341 -0
  487. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv/scraping.md +311 -0
  488. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv-bulk/scraping.md +333 -0
  489. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/atlas/overview.md +70 -0
  490. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/booking-com/scraping.md +578 -0
  491. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/capterra/scraping.md +440 -0
  492. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/centilebrain/generate-estimates.md +110 -0
  493. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coingecko/scraping.md +325 -0
  494. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coinmarketcap/scraping.md +463 -0
  495. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coursera/scraping.md +360 -0
  496. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/craigslist/scraping.md +390 -0
  497. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/crossref/scraping.md +568 -0
  498. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/dev-to/scraping.md +323 -0
  499. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/duckduckgo/scraping.md +349 -0
  500. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/ebay/scraping.md +435 -0
  501. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/etsy/scraping.md +506 -0
  502. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/eventbrite/scraping.md +363 -0
  503. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/expedia/automation.md +168 -0
  504. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/groups.md +236 -0
  505. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/pages.md +295 -0
  506. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/framer/editor.md +108 -0
  507. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/fred/scraping.md +493 -0
  508. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/g2/scraping.md +580 -0
  509. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/genius/scraping.md +511 -0
  510. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/repo-actions.md +65 -0
  511. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/scraping.md +184 -0
  512. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/glassdoor/scraping.md +543 -0
  513. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gmail/compose.md +122 -0
  514. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/goodreads/scraping.md +461 -0
  515. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gutenberg/scraping.md +383 -0
  516. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/hackernews/scraping.md +243 -0
  517. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/howlongtobeat/scraping.md +473 -0
  518. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/imdb/scraping.md +271 -0
  519. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/itch-io/scraping.md +436 -0
  520. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/job-boards/indeed-glassdoor.md +1021 -0
  521. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/letterboxd/scraping.md +349 -0
  522. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/linkedin/invitation-manager.md +109 -0
  523. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/loom/folder-enumeration.md +170 -0
  524. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/macrotrends/scraping.md +537 -0
  525. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/article-hydration.md +120 -0
  526. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/scraping.md +414 -0
  527. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/metacritic/scraping.md +477 -0
  528. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/musicbrainz/scraping.md +478 -0
  529. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/nasa/scraping.md +339 -0
  530. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/news-aggregation/multi-source.md +205 -0
  531. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/open-library/scraping.md +472 -0
  532. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openalex/scraping.md +470 -0
  533. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openstreetmap/scraping.md +490 -0
  534. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/package-registries/npm-pypi.md +478 -0
  535. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/polymarket/scraping.md +234 -0
  536. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/producthunt/scraping.md +307 -0
  537. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/pubmed/scraping.md +421 -0
  538. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/quora/scraping.md +364 -0
  539. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rawg/scraping.md +352 -0
  540. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/reddit/scraping.md +124 -0
  541. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rest-countries/scraping.md +233 -0
  542. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/sec-edgar/scraping.md +361 -0
  543. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/README.md +36 -0
  544. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/embedded-apps.md +72 -0
  545. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/knowledge-base.md +109 -0
  546. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/polaris-inputs.md +137 -0
  547. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/soundcloud/scraping.md +362 -0
  548. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/spotify/scraping.md +339 -0
  549. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/stackoverflow/scraping.md +435 -0
  550. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/steam/scraping.md +575 -0
  551. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/substack/scraping.md +338 -0
  552. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/thetechgeeks/pricing.md +52 -0
  553. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tiktok/upload.md +107 -0
  554. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tradingview/scraping.md +309 -0
  555. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trello/boards-and-lists.md +88 -0
  556. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trustpilot/scraping.md +375 -0
  557. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/walmart/scraping.md +444 -0
  558. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wayback-machine/scraping.md +306 -0
  559. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/weather/scraping.md +398 -0
  560. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wellfound/scraping.md +596 -0
  561. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/world-bank/scraping.md +356 -0
  562. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/xiaohongshu/scraping.md +84 -0
  563. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/youtube/scraping.md +418 -0
  564. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/zillow/scraping.md +433 -0
  565. package/dist/extensions/builtin/browser/browser.md +73 -0
  566. package/dist/extensions/builtin/browser/index.d.ts +8 -0
  567. package/dist/extensions/builtin/browser/index.js +15 -0
  568. package/dist/extensions/builtin/browser/install.md +142 -0
  569. package/dist/extensions/builtin/browser/interaction-skills/connection.md +48 -0
  570. package/dist/extensions/builtin/browser/interaction-skills/cookies.md +3 -0
  571. package/dist/extensions/builtin/browser/interaction-skills/cross-origin-iframes.md +3 -0
  572. package/dist/extensions/builtin/browser/interaction-skills/dialogs.md +64 -0
  573. package/dist/extensions/builtin/browser/interaction-skills/downloads.md +3 -0
  574. package/dist/extensions/builtin/browser/interaction-skills/drag-and-drop.md +3 -0
  575. package/dist/extensions/builtin/browser/interaction-skills/dropdowns.md +3 -0
  576. package/dist/extensions/builtin/browser/interaction-skills/iframes.md +3 -0
  577. package/dist/extensions/builtin/browser/interaction-skills/network-requests.md +3 -0
  578. package/dist/extensions/builtin/browser/interaction-skills/print-as-pdf.md +3 -0
  579. package/dist/extensions/builtin/browser/interaction-skills/profile-sync.md +90 -0
  580. package/dist/extensions/builtin/browser/interaction-skills/screenshots.md +17 -0
  581. package/dist/extensions/builtin/browser/interaction-skills/scrolling.md +3 -0
  582. package/dist/extensions/builtin/browser/interaction-skills/shadow-dom.md +3 -0
  583. package/dist/extensions/builtin/browser/interaction-skills/tabs.md +69 -0
  584. package/dist/extensions/builtin/browser/interaction-skills/uploads.md +1 -0
  585. package/dist/extensions/builtin/browser/interaction-skills/viewport.md +3 -0
  586. package/dist/extensions/builtin/browser/src/browser_harness/AGENT.md +15 -0
  587. package/dist/extensions/builtin/browser/src/browser_harness/__init__.py +8 -0
  588. package/dist/extensions/builtin/browser/src/browser_harness/_ipc.py +90 -0
  589. package/dist/extensions/builtin/browser/src/browser_harness/admin.py +722 -0
  590. package/dist/extensions/builtin/browser/src/browser_harness/daemon.py +328 -0
  591. package/dist/extensions/builtin/browser/src/browser_harness/helpers.py +396 -0
  592. package/dist/extensions/builtin/browser/src/browser_harness/run.py +103 -0
  593. package/dist/extensions/builtin/btw/index.d.ts +8 -0
  594. package/dist/extensions/builtin/btw/index.js +15 -0
  595. package/dist/extensions/builtin/debug/collectors.d.ts +96 -0
  596. package/dist/extensions/builtin/debug/collectors.js +7 -0
  597. package/dist/extensions/builtin/debug/index.d.ts +8 -0
  598. package/dist/extensions/builtin/debug/index.js +49 -0
  599. package/dist/extensions/builtin/diagnostics/diagnostic-buffer.d.ts +19 -0
  600. package/dist/extensions/builtin/diagnostics/diagnostic-buffer.js +1 -0
  601. package/dist/extensions/builtin/diagnostics/index.d.ts +8 -0
  602. package/dist/extensions/builtin/diagnostics/index.js +1 -0
  603. package/dist/extensions/builtin/diagnostics/redaction.d.ts +8 -0
  604. package/dist/extensions/builtin/diagnostics/redaction.js +1 -0
  605. package/dist/extensions/builtin/diagnostics/reporter.d.ts +17 -0
  606. package/dist/extensions/builtin/diagnostics/reporter.js +1 -0
  607. package/dist/extensions/builtin/diagnostics/types.d.ts +62 -0
  608. package/dist/extensions/builtin/diagnostics/types.js +1 -0
  609. package/dist/extensions/builtin/discipline/index.d.ts +8 -0
  610. package/dist/extensions/builtin/discipline/index.js +7 -0
  611. package/dist/extensions/builtin/discipline/skills/brainstorming/SKILL.md +33 -0
  612. package/dist/extensions/builtin/discipline/skills/executing-plans/SKILL.md +25 -0
  613. package/dist/extensions/builtin/discipline/skills/finishing-development-branch/SKILL.md +25 -0
  614. package/dist/extensions/builtin/discipline/skills/receiving-code-review/SKILL.md +22 -0
  615. package/dist/extensions/builtin/discipline/skills/requesting-code-review/SKILL.md +31 -0
  616. package/dist/extensions/builtin/discipline/skills/systematic-debugging/SKILL.md +28 -0
  617. package/dist/extensions/builtin/discipline/skills/test-driven-development/SKILL.md +32 -0
  618. package/dist/extensions/builtin/discipline/skills/using-git-worktrees/SKILL.md +25 -0
  619. package/dist/extensions/builtin/discipline/skills/verification-before-completion/SKILL.md +27 -0
  620. package/dist/extensions/builtin/discipline/skills/writing-plans/SKILL.md +26 -0
  621. package/dist/extensions/builtin/goal/README.md +67 -0
  622. package/dist/extensions/builtin/goal/goal-command.d.ts +13 -0
  623. package/dist/extensions/builtin/goal/goal-command.js +9 -0
  624. package/dist/extensions/builtin/goal/goal-controller.d.ts +143 -0
  625. package/dist/extensions/builtin/goal/goal-controller.js +1 -0
  626. package/dist/extensions/builtin/goal/goal-format.d.ts +52 -0
  627. package/dist/extensions/builtin/goal/goal-format.js +1 -0
  628. package/dist/extensions/builtin/goal/goal-parser.d.ts +27 -0
  629. package/dist/extensions/builtin/goal/goal-parser.js +2 -0
  630. package/dist/extensions/builtin/goal/goal-prompts.d.ts +15 -0
  631. package/dist/extensions/builtin/goal/goal-prompts.js +5 -0
  632. package/dist/extensions/builtin/goal/goal-store.d.ts +28 -0
  633. package/dist/extensions/builtin/goal/goal-store.js +1 -0
  634. package/dist/extensions/builtin/goal/goal-tools.d.ts +26 -0
  635. package/dist/extensions/builtin/goal/goal-tools.js +3 -0
  636. package/dist/extensions/builtin/goal/goal-types.d.ts +87 -0
  637. package/dist/extensions/builtin/goal/goal-types.js +1 -0
  638. package/dist/extensions/builtin/goal/index.d.ts +8 -0
  639. package/dist/extensions/builtin/goal/index.js +10 -0
  640. package/dist/extensions/builtin/grub/README.md +112 -0
  641. package/dist/extensions/builtin/grub/grub-controller.d.ts +67 -0
  642. package/dist/extensions/builtin/grub/grub-controller.js +1 -0
  643. package/dist/extensions/builtin/grub/grub-decision.d.ts +8 -0
  644. package/dist/extensions/builtin/grub/grub-decision.js +1 -0
  645. package/dist/extensions/builtin/grub/grub-feature-list.d.ts +54 -0
  646. package/dist/extensions/builtin/grub/grub-feature-list.js +2 -0
  647. package/dist/extensions/builtin/grub/grub-format.d.ts +13 -0
  648. package/dist/extensions/builtin/grub/grub-format.js +4 -0
  649. package/dist/extensions/builtin/grub/grub-harness.d.ts +9 -0
  650. package/dist/extensions/builtin/grub/grub-harness.js +3 -0
  651. package/dist/extensions/builtin/grub/grub-i18n.d.ts +166 -0
  652. package/dist/extensions/builtin/grub/grub-i18n.js +1 -0
  653. package/dist/extensions/builtin/grub/grub-parser.d.ts +24 -0
  654. package/dist/extensions/builtin/grub/grub-parser.js +2 -0
  655. package/dist/extensions/builtin/grub/grub-persistence.d.ts +17 -0
  656. package/dist/extensions/builtin/grub/grub-persistence.js +2 -0
  657. package/dist/extensions/builtin/grub/grub-prompts.d.ts +12 -0
  658. package/dist/extensions/builtin/grub/grub-prompts.js +97 -0
  659. package/dist/extensions/builtin/grub/grub-turn.d.ts +16 -0
  660. package/dist/extensions/builtin/grub/grub-turn.js +1 -0
  661. package/dist/extensions/builtin/grub/grub-types.d.ts +110 -0
  662. package/dist/extensions/builtin/grub/grub-types.js +1 -0
  663. package/dist/extensions/builtin/grub/index.d.ts +8 -0
  664. package/dist/extensions/builtin/grub/index.js +6 -0
  665. package/dist/extensions/builtin/idle-think/curiosity.d.ts +46 -0
  666. package/dist/extensions/builtin/idle-think/curiosity.js +2 -0
  667. package/dist/extensions/builtin/idle-think/idle-think-runtime.d.ts +46 -0
  668. package/dist/extensions/builtin/idle-think/idle-think-runtime.js +1 -0
  669. package/dist/extensions/builtin/idle-think/index.d.ts +15 -0
  670. package/dist/extensions/builtin/idle-think/index.js +1 -0
  671. package/dist/extensions/builtin/idle-think/insights.d.ts +27 -0
  672. package/dist/extensions/builtin/idle-think/insights.js +5 -0
  673. package/dist/extensions/builtin/idle-think/thinker.d.ts +26 -0
  674. package/dist/extensions/builtin/idle-think/thinker.js +9 -0
  675. package/dist/extensions/builtin/insights/html-report.d.ts +21 -0
  676. package/dist/extensions/builtin/insights/html-report.js +463 -0
  677. package/dist/extensions/builtin/insights/index.d.ts +24 -0
  678. package/dist/extensions/builtin/insights/index.js +2 -0
  679. package/dist/extensions/builtin/insights/insights-engine.d.ts +18 -0
  680. package/dist/extensions/builtin/insights/insights-engine.js +39 -0
  681. package/dist/extensions/builtin/insights/prompts.d.ts +17 -0
  682. package/dist/extensions/builtin/insights/prompts.js +180 -0
  683. package/dist/extensions/builtin/insights/session-scanner.d.ts +27 -0
  684. package/dist/extensions/builtin/insights/session-scanner.js +19 -0
  685. package/dist/extensions/builtin/insights/stats.d.ts +13 -0
  686. package/dist/extensions/builtin/insights/stats.js +1 -0
  687. package/dist/extensions/builtin/insights/types.d.ts +199 -0
  688. package/dist/extensions/builtin/insights/types.js +0 -0
  689. package/dist/extensions/builtin/link-world/agent-workspace/README.md +16 -0
  690. package/dist/extensions/builtin/link-world/index.d.ts +8 -0
  691. package/dist/extensions/builtin/link-world/index.js +19 -0
  692. package/dist/extensions/builtin/link-world/internet-search/internet-search.md +65 -0
  693. package/dist/extensions/builtin/link-world/link-world-agent.md +82 -0
  694. package/dist/extensions/builtin/link-world/linkworld.md +313 -0
  695. package/dist/extensions/builtin/link-world/network-routing/network-routing.md +67 -0
  696. package/dist/extensions/builtin/loop/README.md +92 -0
  697. package/dist/extensions/builtin/loop/cron/cron-parser.d.ts +56 -0
  698. package/dist/extensions/builtin/loop/cron/cron-parser.js +1 -0
  699. package/dist/extensions/builtin/loop/cron/cron-scheduler.d.ts +85 -0
  700. package/dist/extensions/builtin/loop/cron/cron-scheduler.js +10 -0
  701. package/dist/extensions/builtin/loop/cron/cron-tasks-lock.d.ts +42 -0
  702. package/dist/extensions/builtin/loop/cron/cron-tasks-lock.js +1 -0
  703. package/dist/extensions/builtin/loop/cron/cron-tasks.d.ts +200 -0
  704. package/dist/extensions/builtin/loop/cron/cron-tasks.js +2 -0
  705. package/dist/extensions/builtin/loop/cron/index.d.ts +18 -0
  706. package/dist/extensions/builtin/loop/cron/index.js +1 -0
  707. package/dist/extensions/builtin/loop/cron-tools/cron-create-tool.d.ts +35 -0
  708. package/dist/extensions/builtin/loop/cron-tools/cron-create-tool.js +1 -0
  709. package/dist/extensions/builtin/loop/cron-tools/cron-delete-tool.d.ts +29 -0
  710. package/dist/extensions/builtin/loop/cron-tools/cron-delete-tool.js +1 -0
  711. package/dist/extensions/builtin/loop/cron-tools/cron-list-tool.d.ts +25 -0
  712. package/dist/extensions/builtin/loop/cron-tools/cron-list-tool.js +2 -0
  713. package/dist/extensions/builtin/loop/cron-tools/index.d.ts +16 -0
  714. package/dist/extensions/builtin/loop/cron-tools/index.js +1 -0
  715. package/dist/extensions/builtin/loop/cron-tools/prompt.d.ts +35 -0
  716. package/dist/extensions/builtin/loop/cron-tools/prompt.js +38 -0
  717. package/dist/extensions/builtin/loop/index.d.ts +19 -0
  718. package/dist/extensions/builtin/loop/index.js +2 -0
  719. package/dist/extensions/builtin/loop/loop-skill.d.ts +18 -0
  720. package/dist/extensions/builtin/loop/loop-skill.js +58 -0
  721. package/dist/extensions/builtin/lsp/index.d.ts +8 -0
  722. package/dist/extensions/builtin/lsp/index.js +1 -0
  723. package/dist/extensions/builtin/lsp/lsp-client.d.ts +22 -0
  724. package/dist/extensions/builtin/lsp/lsp-client.js +1 -0
  725. package/dist/extensions/builtin/lsp/lsp-config.d.ts +8 -0
  726. package/dist/extensions/builtin/lsp/lsp-config.js +1 -0
  727. package/dist/extensions/builtin/lsp/lsp-formatters.d.ts +15 -0
  728. package/dist/extensions/builtin/lsp/lsp-formatters.js +18 -0
  729. package/dist/extensions/builtin/lsp/lsp-server-instance.d.ts +24 -0
  730. package/dist/extensions/builtin/lsp/lsp-server-instance.js +1 -0
  731. package/dist/extensions/builtin/lsp/lsp-server-manager.d.ts +21 -0
  732. package/dist/extensions/builtin/lsp/lsp-server-manager.js +1 -0
  733. package/dist/extensions/builtin/lsp/lsp-tool.d.ts +33 -0
  734. package/dist/extensions/builtin/lsp/lsp-tool.js +2 -0
  735. package/dist/extensions/builtin/lsp/types.d.ts +31 -0
  736. package/dist/extensions/builtin/lsp/types.js +1 -0
  737. package/dist/extensions/builtin/mcp/figma-design.md +68 -0
  738. package/dist/extensions/builtin/mcp/index.d.ts +14 -0
  739. package/dist/extensions/builtin/mcp/index.js +25 -0
  740. package/dist/extensions/builtin/mcp/mcp-management.md +85 -0
  741. package/dist/extensions/builtin/plan/clear-context-state.d.ts +8 -0
  742. package/dist/extensions/builtin/plan/clear-context-state.js +1 -0
  743. package/dist/extensions/builtin/plan/enter-plan-mode-tool.d.ts +11 -0
  744. package/dist/extensions/builtin/plan/enter-plan-mode-tool.js +2 -0
  745. package/dist/extensions/builtin/plan/exit-plan-mode-tool.d.ts +18 -0
  746. package/dist/extensions/builtin/plan/exit-plan-mode-tool.js +13 -0
  747. package/dist/extensions/builtin/plan/index.d.ts +8 -0
  748. package/dist/extensions/builtin/plan/index.js +24 -0
  749. package/dist/extensions/builtin/plan/plan-agents.d.ts +23 -0
  750. package/dist/extensions/builtin/plan/plan-agents.js +43 -0
  751. package/dist/extensions/builtin/plan/plan-file-manager.d.ts +26 -0
  752. package/dist/extensions/builtin/plan/plan-file-manager.js +1 -0
  753. package/dist/extensions/builtin/plan/plan-permissions.d.ts +15 -0
  754. package/dist/extensions/builtin/plan/plan-permissions.js +12 -0
  755. package/dist/extensions/builtin/plan/plan-validation.d.ts +18 -0
  756. package/dist/extensions/builtin/plan/plan-validation.js +5 -0
  757. package/dist/extensions/builtin/plan/plan-workflow-prompt.d.ts +18 -0
  758. package/dist/extensions/builtin/plan/plan-workflow-prompt.js +102 -0
  759. package/dist/extensions/builtin/plan/teammate-approval.d.ts +49 -0
  760. package/dist/extensions/builtin/plan/teammate-approval.js +3 -0
  761. package/dist/extensions/builtin/plan/types.d.ts +133 -0
  762. package/dist/extensions/builtin/plan/types.js +1 -0
  763. package/dist/extensions/builtin/presence/index.d.ts +40 -0
  764. package/dist/extensions/builtin/presence/index.js +15 -0
  765. package/dist/extensions/builtin/presence/presence-memory.d.ts +47 -0
  766. package/dist/extensions/builtin/presence/presence-memory.js +1 -0
  767. package/dist/extensions/builtin/recap/AGENT.md +15 -0
  768. package/dist/extensions/builtin/recap/index.d.ts +8 -0
  769. package/dist/extensions/builtin/recap/index.js +1 -0
  770. package/dist/extensions/builtin/recap/recap-budget.d.ts +24 -0
  771. package/dist/extensions/builtin/recap/recap-budget.js +1 -0
  772. package/dist/extensions/builtin/recap/recap-extractor.d.ts +34 -0
  773. package/dist/extensions/builtin/recap/recap-extractor.js +3 -0
  774. package/dist/extensions/builtin/recap/recap-renderer.d.ts +19 -0
  775. package/dist/extensions/builtin/recap/recap-renderer.js +2 -0
  776. package/dist/extensions/builtin/recap/recap-synthesizer.d.ts +51 -0
  777. package/dist/extensions/builtin/recap/recap-synthesizer.js +19 -0
  778. package/dist/extensions/builtin/recap/recap-types.d.ts +40 -0
  779. package/dist/extensions/builtin/recap/recap-types.js +1 -0
  780. package/dist/extensions/builtin/sal/README.md +72 -0
  781. package/dist/extensions/builtin/sal/anchors.d.ts +46 -0
  782. package/dist/extensions/builtin/sal/anchors.js +1 -0
  783. package/dist/extensions/builtin/sal/eval/index.d.ts +18 -0
  784. package/dist/extensions/builtin/sal/eval/index.js +1 -0
  785. package/dist/extensions/builtin/sal/eval/insforge-sink.d.ts +30 -0
  786. package/dist/extensions/builtin/sal/eval/insforge-sink.js +1 -0
  787. package/dist/extensions/builtin/sal/eval/jsonl-sink.d.ts +27 -0
  788. package/dist/extensions/builtin/sal/eval/jsonl-sink.js +3 -0
  789. package/dist/extensions/builtin/sal/eval/noop-sink.d.ts +8 -0
  790. package/dist/extensions/builtin/sal/eval/noop-sink.js +1 -0
  791. package/dist/extensions/builtin/sal/eval/types.d.ts +60 -0
  792. package/dist/extensions/builtin/sal/eval/types.js +1 -0
  793. package/dist/extensions/builtin/sal/index.d.ts +12 -0
  794. package/dist/extensions/builtin/sal/index.js +7 -0
  795. package/dist/extensions/builtin/sal/sal-config.d.ts +46 -0
  796. package/dist/extensions/builtin/sal/sal-config.js +1 -0
  797. package/dist/extensions/builtin/sal/sal-context.d.ts +11 -0
  798. package/dist/extensions/builtin/sal/sal-context.js +2 -0
  799. package/dist/extensions/builtin/sal/sal-runtime.d.ts +72 -0
  800. package/dist/extensions/builtin/sal/sal-runtime.js +0 -0
  801. package/dist/extensions/builtin/sal/sal-trace.d.ts +11 -0
  802. package/dist/extensions/builtin/sal/sal-trace.js +1 -0
  803. package/dist/extensions/builtin/sal/terrain.d.ts +73 -0
  804. package/dist/extensions/builtin/sal/terrain.js +3 -0
  805. package/dist/extensions/builtin/sal/weights.d.ts +28 -0
  806. package/dist/extensions/builtin/sal/weights.js +1 -0
  807. package/dist/extensions/builtin/security-audit/README.md +289 -0
  808. package/dist/extensions/builtin/security-audit/engine/detector.d.ts +44 -0
  809. package/dist/extensions/builtin/security-audit/engine/detector.js +1 -0
  810. package/dist/extensions/builtin/security-audit/engine/interceptor.d.ts +61 -0
  811. package/dist/extensions/builtin/security-audit/engine/interceptor.js +27 -0
  812. package/dist/extensions/builtin/security-audit/engine/logger.d.ts +65 -0
  813. package/dist/extensions/builtin/security-audit/engine/logger.js +65 -0
  814. package/dist/extensions/builtin/security-audit/index.d.ts +13 -0
  815. package/dist/extensions/builtin/security-audit/index.js +49 -0
  816. package/dist/extensions/builtin/security-audit/interface.d.ts +167 -0
  817. package/dist/extensions/builtin/security-audit/interface.js +1 -0
  818. package/dist/extensions/builtin/soul/index.d.ts +13 -0
  819. package/dist/extensions/builtin/soul/index.js +1 -0
  820. package/dist/extensions/builtin/subagent/index.d.ts +8 -0
  821. package/dist/extensions/builtin/subagent/index.js +8 -0
  822. package/dist/extensions/builtin/subagent/subagent-parser.d.ts +30 -0
  823. package/dist/extensions/builtin/subagent/subagent-parser.js +15 -0
  824. package/dist/extensions/builtin/subagent/subagent-runner.d.ts +49 -0
  825. package/dist/extensions/builtin/subagent/subagent-runner.js +8 -0
  826. package/dist/extensions/builtin/subagent/subagent-types.d.ts +57 -0
  827. package/dist/extensions/builtin/subagent/subagent-types.js +0 -0
  828. package/dist/extensions/builtin/task/index.d.ts +8 -0
  829. package/dist/extensions/builtin/task/index.js +1 -0
  830. package/dist/extensions/builtin/task/task-store.d.ts +42 -0
  831. package/dist/extensions/builtin/task/task-store.js +1 -0
  832. package/dist/extensions/builtin/task/task-tools/task-create-tool.d.ts +37 -0
  833. package/dist/extensions/builtin/task/task-tools/task-create-tool.js +40 -0
  834. package/dist/extensions/builtin/task/task-tools/task-get-tool.d.ts +31 -0
  835. package/dist/extensions/builtin/task/task-tools/task-get-tool.js +23 -0
  836. package/dist/extensions/builtin/task/task-tools/task-list-tool.d.ts +27 -0
  837. package/dist/extensions/builtin/task/task-tools/task-list-tool.js +22 -0
  838. package/dist/extensions/builtin/task/task-tools/task-output-tool.d.ts +32 -0
  839. package/dist/extensions/builtin/task/task-tools/task-output-tool.js +10 -0
  840. package/dist/extensions/builtin/task/task-tools/task-stop-tool.d.ts +31 -0
  841. package/dist/extensions/builtin/task/task-tools/task-stop-tool.js +5 -0
  842. package/dist/extensions/builtin/task/task-tools/task-update-tool.d.ts +47 -0
  843. package/dist/extensions/builtin/task/task-tools/task-update-tool.js +77 -0
  844. package/dist/extensions/builtin/task/task-tools/tool-search-tool.d.ts +34 -0
  845. package/dist/extensions/builtin/task/task-tools/tool-search-tool.js +14 -0
  846. package/dist/extensions/builtin/task/task-types.d.ts +30 -0
  847. package/dist/extensions/builtin/task/task-types.js +1 -0
  848. package/dist/extensions/builtin/teach/README.md +197 -0
  849. package/dist/extensions/builtin/teach/index.d.ts +12 -0
  850. package/dist/extensions/builtin/teach/index.js +6 -0
  851. package/dist/extensions/builtin/teach/references/analogy-library.md +153 -0
  852. package/dist/extensions/builtin/teach/references/learning-paths.md +214 -0
  853. package/dist/extensions/builtin/teach/references/source-verification.md +268 -0
  854. package/dist/extensions/builtin/teach/references/teaching-template.md +237 -0
  855. package/dist/extensions/builtin/teach/teach-format.d.ts +35 -0
  856. package/dist/extensions/builtin/teach/teach-format.js +6 -0
  857. package/dist/extensions/builtin/teach/teach-i18n.d.ts +47 -0
  858. package/dist/extensions/builtin/teach/teach-i18n.js +1 -0
  859. package/dist/extensions/builtin/teach/teach-persistence.d.ts +36 -0
  860. package/dist/extensions/builtin/teach/teach-persistence.js +35 -0
  861. package/dist/extensions/builtin/teach/teach-prompts.d.ts +52 -0
  862. package/dist/extensions/builtin/teach/teach-prompts.js +35 -0
  863. package/dist/extensions/builtin/teach/teach-runtime.d.ts +93 -0
  864. package/dist/extensions/builtin/teach/teach-runtime.js +9 -0
  865. package/dist/extensions/builtin/teach/teach-types.d.ts +81 -0
  866. package/dist/extensions/builtin/teach/teach-types.js +0 -0
  867. package/dist/extensions/builtin/team/AGENT.md +112 -0
  868. package/dist/extensions/builtin/team/TESTING.md +299 -0
  869. package/dist/extensions/builtin/team/index.d.ts +26 -0
  870. package/dist/extensions/builtin/team/index.js +11 -0
  871. package/dist/extensions/builtin/team/team-dashboard.d.ts +13 -0
  872. package/dist/extensions/builtin/team/team-dashboard.js +1 -0
  873. package/dist/extensions/builtin/team/team-harness.d.ts +35 -0
  874. package/dist/extensions/builtin/team/team-harness.js +18 -0
  875. package/dist/extensions/builtin/team/team-mailbox.d.ts +50 -0
  876. package/dist/extensions/builtin/team/team-mailbox.js +4 -0
  877. package/dist/extensions/builtin/team/team-orchestrator.d.ts +39 -0
  878. package/dist/extensions/builtin/team/team-orchestrator.js +5 -0
  879. package/dist/extensions/builtin/team/team-parser.d.ts +84 -0
  880. package/dist/extensions/builtin/team/team-parser.js +38 -0
  881. package/dist/extensions/builtin/team/team-permissions.d.ts +63 -0
  882. package/dist/extensions/builtin/team/team-permissions.js +1 -0
  883. package/dist/extensions/builtin/team/team-presets.d.ts +45 -0
  884. package/dist/extensions/builtin/team/team-presets.js +2 -0
  885. package/dist/extensions/builtin/team/team-psyche.d.ts +14 -0
  886. package/dist/extensions/builtin/team/team-psyche.js +5 -0
  887. package/dist/extensions/builtin/team/team-runtime-helpers.d.ts +48 -0
  888. package/dist/extensions/builtin/team/team-runtime-helpers.js +2 -0
  889. package/dist/extensions/builtin/team/team-runtime.d.ts +91 -0
  890. package/dist/extensions/builtin/team/team-runtime.js +3 -0
  891. package/dist/extensions/builtin/team/team-state-store.d.ts +29 -0
  892. package/dist/extensions/builtin/team/team-state-store.js +2 -0
  893. package/dist/extensions/builtin/team/team-task-store.d.ts +35 -0
  894. package/dist/extensions/builtin/team/team-task-store.js +2 -0
  895. package/dist/extensions/builtin/team/team-transcript.d.ts +31 -0
  896. package/dist/extensions/builtin/team/team-transcript.js +2 -0
  897. package/dist/extensions/builtin/team/team-types.d.ts +250 -0
  898. package/dist/extensions/builtin/team/team-types.js +0 -0
  899. package/dist/extensions/builtin/team/team-ui.d.ts +50 -0
  900. package/dist/extensions/builtin/team/team-ui.js +2 -0
  901. package/dist/extensions/builtin/token-save/README.md +56 -0
  902. package/dist/extensions/builtin/token-save/config.d.ts +8 -0
  903. package/dist/extensions/builtin/token-save/config.js +1 -0
  904. package/dist/extensions/builtin/token-save/filters.d.ts +14 -0
  905. package/dist/extensions/builtin/token-save/filters.js +24 -0
  906. package/dist/extensions/builtin/token-save/index.d.ts +8 -0
  907. package/dist/extensions/builtin/token-save/index.js +4 -0
  908. package/dist/extensions/builtin/token-save/lexer.d.ts +11 -0
  909. package/dist/extensions/builtin/token-save/lexer.js +1 -0
  910. package/dist/extensions/builtin/token-save/recovery.d.ts +1 -0
  911. package/dist/extensions/builtin/token-save/recovery.js +1 -0
  912. package/dist/extensions/builtin/token-save/rewrite.d.ts +19 -0
  913. package/dist/extensions/builtin/token-save/rewrite.js +1 -0
  914. package/dist/extensions/builtin/token-save/runner.d.ts +14 -0
  915. package/dist/extensions/builtin/token-save/runner.js +3 -0
  916. package/dist/extensions/builtin/token-save/stream.d.ts +20 -0
  917. package/dist/extensions/builtin/token-save/stream.js +1 -0
  918. package/dist/extensions/builtin/token-save/toml-dsl.d.ts +25 -0
  919. package/dist/extensions/builtin/token-save/toml-dsl.js +3 -0
  920. package/dist/extensions/builtin/token-save/tracking.d.ts +24 -0
  921. package/dist/extensions/builtin/token-save/tracking.js +8 -0
  922. package/dist/extensions/optional/AGENT.md +11 -0
  923. package/dist/extensions/optional/export-html/index.d.ts +41 -0
  924. package/dist/extensions/optional/export-html/index.js +2 -0
  925. package/dist/extensions/optional/simplify/index.d.ts +35 -0
  926. package/dist/extensions/optional/simplify/index.js +77 -0
  927. package/dist/index.d.ts +9 -0
  928. package/dist/index.js +1 -0
  929. package/dist/main.d.ts +7 -0
  930. package/dist/main.js +41 -0
  931. package/dist/migrations.d.ts +30 -0
  932. package/dist/migrations.js +4 -0
  933. package/dist/models.d.ts +7 -0
  934. package/dist/models.js +1 -0
  935. package/dist/modes/acp/acp-mode.d.ts +30 -0
  936. package/dist/modes/acp/acp-mode.js +25 -0
  937. package/dist/modes/index.d.ts +14 -0
  938. package/dist/modes/index.js +1 -0
  939. package/dist/modes/interactive/agent-loop-status.d.ts +8 -0
  940. package/dist/modes/interactive/agent-loop-status.js +1 -0
  941. package/dist/modes/interactive/components/apikey-input.d.ts +10 -0
  942. package/dist/modes/interactive/components/apikey-input.js +3 -0
  943. package/dist/modes/interactive/components/armin.d.ts +39 -0
  944. package/dist/modes/interactive/components/armin.js +1 -0
  945. package/dist/modes/interactive/components/assistant-message.d.ts +21 -0
  946. package/dist/modes/interactive/components/assistant-message.js +1 -0
  947. package/dist/modes/interactive/components/attachments-bar.d.ts +37 -0
  948. package/dist/modes/interactive/components/attachments-bar.js +1 -0
  949. package/dist/modes/interactive/components/bash-execution.d.ts +40 -0
  950. package/dist/modes/interactive/components/bash-execution.js +13 -0
  951. package/dist/modes/interactive/components/bordered-loader.d.ts +21 -0
  952. package/dist/modes/interactive/components/bordered-loader.js +1 -0
  953. package/dist/modes/interactive/components/branch-summary-message.d.ts +21 -0
  954. package/dist/modes/interactive/components/branch-summary-message.js +3 -0
  955. package/dist/modes/interactive/components/buddy/pet-sprites.d.ts +31 -0
  956. package/dist/modes/interactive/components/buddy/pet-sprites.js +1 -0
  957. package/dist/modes/interactive/components/catui-loader.d.ts +55 -0
  958. package/dist/modes/interactive/components/catui-loader.js +1 -0
  959. package/dist/modes/interactive/components/compaction-summary-message.d.ts +21 -0
  960. package/dist/modes/interactive/components/compaction-summary-message.js +3 -0
  961. package/dist/modes/interactive/components/config-selector.d.ts +76 -0
  962. package/dist/modes/interactive/components/config-selector.js +1 -0
  963. package/dist/modes/interactive/components/countdown-timer.d.ts +19 -0
  964. package/dist/modes/interactive/components/countdown-timer.js +1 -0
  965. package/dist/modes/interactive/components/custom-editor.d.ts +37 -0
  966. package/dist/modes/interactive/components/custom-editor.js +1 -0
  967. package/dist/modes/interactive/components/custom-message.d.ts +26 -0
  968. package/dist/modes/interactive/components/custom-message.js +2 -0
  969. package/dist/modes/interactive/components/daxnuts.d.ts +28 -0
  970. package/dist/modes/interactive/components/daxnuts.js +1 -0
  971. package/dist/modes/interactive/components/diff.d.ts +17 -0
  972. package/dist/modes/interactive/components/diff.js +3 -0
  973. package/dist/modes/interactive/components/dynamic-border.d.ts +20 -0
  974. package/dist/modes/interactive/components/dynamic-border.js +1 -0
  975. package/dist/modes/interactive/components/editor-buddy-layout.d.ts +17 -0
  976. package/dist/modes/interactive/components/editor-buddy-layout.js +1 -0
  977. package/dist/modes/interactive/components/extension-editor.d.ts +25 -0
  978. package/dist/modes/interactive/components/extension-editor.js +1 -0
  979. package/dist/modes/interactive/components/extension-input.d.ts +29 -0
  980. package/dist/modes/interactive/components/extension-input.js +2 -0
  981. package/dist/modes/interactive/components/extension-selector.d.ts +32 -0
  982. package/dist/modes/interactive/components/extension-selector.js +2 -0
  983. package/dist/modes/interactive/components/footer.d.ts +34 -0
  984. package/dist/modes/interactive/components/footer.js +1 -0
  985. package/dist/modes/interactive/components/index.d.ts +44 -0
  986. package/dist/modes/interactive/components/index.js +1 -0
  987. package/dist/modes/interactive/components/keybinding-hints.d.ts +46 -0
  988. package/dist/modes/interactive/components/keybinding-hints.js +1 -0
  989. package/dist/modes/interactive/components/login-dialog.d.ts +47 -0
  990. package/dist/modes/interactive/components/login-dialog.js +1 -0
  991. package/dist/modes/interactive/components/memory-stats.d.ts +14 -0
  992. package/dist/modes/interactive/components/memory-stats.js +2 -0
  993. package/dist/modes/interactive/components/model-selector.d.ts +59 -0
  994. package/dist/modes/interactive/components/model-selector.js +2 -0
  995. package/dist/modes/interactive/components/notification-queue.d.ts +49 -0
  996. package/dist/modes/interactive/components/notification-queue.js +1 -0
  997. package/dist/modes/interactive/components/oauth-selector.d.ts +30 -0
  998. package/dist/modes/interactive/components/oauth-selector.js +1 -0
  999. package/dist/modes/interactive/components/persona-selector.d.ts +24 -0
  1000. package/dist/modes/interactive/components/persona-selector.js +1 -0
  1001. package/dist/modes/interactive/components/plan-progress-panel.d.ts +24 -0
  1002. package/dist/modes/interactive/components/plan-progress-panel.js +1 -0
  1003. package/dist/modes/interactive/components/provider-selector.d.ts +25 -0
  1004. package/dist/modes/interactive/components/provider-selector.js +1 -0
  1005. package/dist/modes/interactive/components/raw-text.d.ts +19 -0
  1006. package/dist/modes/interactive/components/raw-text.js +3 -0
  1007. package/dist/modes/interactive/components/scoped-models-selector.d.ts +54 -0
  1008. package/dist/modes/interactive/components/scoped-models-selector.js +1 -0
  1009. package/dist/modes/interactive/components/session-selector-search.d.ts +28 -0
  1010. package/dist/modes/interactive/components/session-selector-search.js +1 -0
  1011. package/dist/modes/interactive/components/session-selector.d.ts +100 -0
  1012. package/dist/modes/interactive/components/session-selector.js +2 -0
  1013. package/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  1014. package/dist/modes/interactive/components/settings-selector.js +1 -0
  1015. package/dist/modes/interactive/components/show-images-selector.d.ts +15 -0
  1016. package/dist/modes/interactive/components/show-images-selector.js +1 -0
  1017. package/dist/modes/interactive/components/skill-invocation-message.d.ts +22 -0
  1018. package/dist/modes/interactive/components/skill-invocation-message.js +3 -0
  1019. package/dist/modes/interactive/components/soul-stats.d.ts +15 -0
  1020. package/dist/modes/interactive/components/soul-stats.js +2 -0
  1021. package/dist/modes/interactive/components/sub-agent-panel.d.ts +24 -0
  1022. package/dist/modes/interactive/components/sub-agent-panel.js +1 -0
  1023. package/dist/modes/interactive/components/task-status-panel.d.ts +36 -0
  1024. package/dist/modes/interactive/components/task-status-panel.js +1 -0
  1025. package/dist/modes/interactive/components/theme-selector.d.ts +16 -0
  1026. package/dist/modes/interactive/components/theme-selector.js +1 -0
  1027. package/dist/modes/interactive/components/thinking-selector.d.ts +16 -0
  1028. package/dist/modes/interactive/components/thinking-selector.js +1 -0
  1029. package/dist/modes/interactive/components/tool-execution.d.ts +80 -0
  1030. package/dist/modes/interactive/components/tool-execution.js +58 -0
  1031. package/dist/modes/interactive/components/tree-selector.d.ts +73 -0
  1032. package/dist/modes/interactive/components/tree-selector.js +1 -0
  1033. package/dist/modes/interactive/components/user-message-selector.d.ts +35 -0
  1034. package/dist/modes/interactive/components/user-message-selector.js +1 -0
  1035. package/dist/modes/interactive/components/user-message.d.ts +13 -0
  1036. package/dist/modes/interactive/components/user-message.js +1 -0
  1037. package/dist/modes/interactive/components/visual-truncate.d.ts +29 -0
  1038. package/dist/modes/interactive/components/visual-truncate.js +1 -0
  1039. package/dist/modes/interactive/controllers/auth-provider-config-controller.d.ts +64 -0
  1040. package/dist/modes/interactive/controllers/auth-provider-config-controller.js +1 -0
  1041. package/dist/modes/interactive/controllers/extension-ui/custom-overlay-host.d.ts +38 -0
  1042. package/dist/modes/interactive/controllers/extension-ui/custom-overlay-host.js +1 -0
  1043. package/dist/modes/interactive/controllers/extension-ui/editor-component-adapter.d.ts +37 -0
  1044. package/dist/modes/interactive/controllers/extension-ui/editor-component-adapter.js +1 -0
  1045. package/dist/modes/interactive/controllers/extension-ui/persistent-surface-registry.d.ts +53 -0
  1046. package/dist/modes/interactive/controllers/extension-ui/persistent-surface-registry.js +1 -0
  1047. package/dist/modes/interactive/controllers/extension-ui/prompt-host.d.ts +52 -0
  1048. package/dist/modes/interactive/controllers/extension-ui/prompt-host.js +2 -0
  1049. package/dist/modes/interactive/controllers/image-pipeline-controller.d.ts +106 -0
  1050. package/dist/modes/interactive/controllers/image-pipeline-controller.js +1 -0
  1051. package/dist/modes/interactive/controllers/input-submit-controller.d.ts +80 -0
  1052. package/dist/modes/interactive/controllers/input-submit-controller.js +2 -0
  1053. package/dist/modes/interactive/controllers/interrupt-controller.d.ts +75 -0
  1054. package/dist/modes/interactive/controllers/interrupt-controller.js +1 -0
  1055. package/dist/modes/interactive/controllers/model-overlay-controller.d.ts +127 -0
  1056. package/dist/modes/interactive/controllers/model-overlay-controller.js +3 -0
  1057. package/dist/modes/interactive/controllers/self-update-controller.d.ts +71 -0
  1058. package/dist/modes/interactive/controllers/self-update-controller.js +24 -0
  1059. package/dist/modes/interactive/controllers/settings-overlay-controller.d.ts +56 -0
  1060. package/dist/modes/interactive/controllers/settings-overlay-controller.js +2 -0
  1061. package/dist/modes/interactive/controllers/slash-dispatcher-controller.d.ts +74 -0
  1062. package/dist/modes/interactive/controllers/slash-dispatcher-controller.js +1 -0
  1063. package/dist/modes/interactive/controllers/stream-render-controller.d.ts +110 -0
  1064. package/dist/modes/interactive/controllers/stream-render-controller.js +2 -0
  1065. package/dist/modes/interactive/controllers/tree-overlay-controller.d.ts +55 -0
  1066. package/dist/modes/interactive/controllers/tree-overlay-controller.js +1 -0
  1067. package/dist/modes/interactive/footer-data-provider.d.ts +32 -0
  1068. package/dist/modes/interactive/footer-data-provider.js +1 -0
  1069. package/dist/modes/interactive/interactive-mode.d.ts +303 -0
  1070. package/dist/modes/interactive/interactive-mode.js +119 -0
  1071. package/dist/modes/interactive/services/tips.d.ts +20 -0
  1072. package/dist/modes/interactive/services/tips.js +1 -0
  1073. package/dist/modes/interactive/slash-command-arguments.d.ts +28 -0
  1074. package/dist/modes/interactive/slash-command-arguments.js +1 -0
  1075. package/dist/modes/interactive/state/interactive-state.d.ts +74 -0
  1076. package/dist/modes/interactive/state/interactive-state.js +1 -0
  1077. package/dist/modes/interactive/theme/dark.json +85 -0
  1078. package/dist/modes/interactive/theme/light.json +84 -0
  1079. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  1080. package/dist/modes/interactive/theme/theme.d.ts +81 -0
  1081. package/dist/modes/interactive/theme/theme.js +16 -0
  1082. package/dist/modes/interactive/theme/warm.json +81 -0
  1083. package/dist/modes/print-mode.d.ts +38 -0
  1084. package/dist/modes/print-mode.js +2 -0
  1085. package/dist/modes/rpc/rpc-client.d.ts +221 -0
  1086. package/dist/modes/rpc/rpc-client.js +2 -0
  1087. package/dist/modes/rpc/rpc-mode.d.ts +14 -0
  1088. package/dist/modes/rpc/rpc-mode.js +1 -0
  1089. package/dist/modes/rpc/rpc-types.d.ts +449 -0
  1090. package/dist/modes/rpc/rpc-types.js +0 -0
  1091. package/dist/modes/utils/agent-loop-result-format.d.ts +10 -0
  1092. package/dist/modes/utils/agent-loop-result-format.js +1 -0
  1093. package/dist/modes/utils/clipboard-image.d.ts +10 -0
  1094. package/dist/modes/utils/clipboard-image.js +1 -0
  1095. package/dist/modes/utils/clipboard-native.d.ts +11 -0
  1096. package/dist/modes/utils/clipboard-native.js +1 -0
  1097. package/dist/modes/utils/clipboard.d.ts +1 -0
  1098. package/dist/modes/utils/clipboard.js +1 -0
  1099. package/dist/modes/utils/image-convert.d.ts +8 -0
  1100. package/dist/modes/utils/image-convert.js +1 -0
  1101. package/dist/modes/utils/image-resize.d.ts +41 -0
  1102. package/dist/modes/utils/image-resize.js +1 -0
  1103. package/dist/node_modules/@catui/agent-core/dist/agent-loop-continuations.js +1 -0
  1104. package/dist/node_modules/@catui/agent-core/dist/agent-loop-stream-events.js +1 -0
  1105. package/dist/node_modules/@catui/agent-core/dist/agent-loop-tool-results.js +3 -0
  1106. package/dist/node_modules/@catui/agent-core/dist/agent-loop-tool-summaries.js +1 -0
  1107. package/dist/node_modules/@catui/agent-core/dist/agent-loop.js +4 -0
  1108. package/dist/node_modules/@catui/agent-core/dist/agent-run-result.js +1 -0
  1109. package/dist/node_modules/@catui/agent-core/dist/agent.js +1 -0
  1110. package/dist/node_modules/@catui/agent-core/dist/errors.js +1 -0
  1111. package/dist/node_modules/@catui/agent-core/dist/index.js +1 -0
  1112. package/dist/node_modules/@catui/agent-core/dist/proxy.js +2 -0
  1113. package/dist/node_modules/@catui/agent-core/dist/structured-adaptive-agent-loop.js +2 -0
  1114. package/dist/node_modules/@catui/agent-core/dist/structured-adaptive-streaming-tool-executor.js +1 -0
  1115. package/dist/node_modules/@catui/agent-core/dist/structured-adaptive-tool-orchestration.js +3 -0
  1116. package/dist/node_modules/@catui/agent-core/dist/types.js +1 -0
  1117. package/dist/node_modules/@catui/agent-core/package.json +28 -0
  1118. package/dist/node_modules/@catui/ai/dist/api-registry.js +1 -0
  1119. package/dist/node_modules/@catui/ai/dist/cli.js +21 -0
  1120. package/dist/node_modules/@catui/ai/dist/config-path.js +1 -0
  1121. package/dist/node_modules/@catui/ai/dist/debug-logger.js +4 -0
  1122. package/dist/node_modules/@catui/ai/dist/env-api-keys.js +1 -0
  1123. package/dist/node_modules/@catui/ai/dist/env.js +1 -0
  1124. package/dist/node_modules/@catui/ai/dist/events.js +1 -0
  1125. package/dist/node_modules/@catui/ai/dist/index.js +1 -0
  1126. package/dist/node_modules/@catui/ai/dist/json.js +1 -0
  1127. package/dist/node_modules/@catui/ai/dist/models.generated.js +1 -0
  1128. package/dist/node_modules/@catui/ai/dist/models.js +1 -0
  1129. package/dist/node_modules/@catui/ai/dist/overflow.js +1 -0
  1130. package/dist/node_modules/@catui/ai/dist/providers/amazon-bedrock.js +1 -0
  1131. package/dist/node_modules/@catui/ai/dist/providers/anthropic.js +2 -0
  1132. package/dist/node_modules/@catui/ai/dist/providers/azure-openai-responses.js +1 -0
  1133. package/dist/node_modules/@catui/ai/dist/providers/github-copilot-headers.js +1 -0
  1134. package/dist/node_modules/@catui/ai/dist/providers/google-gemini-cli.js +2 -0
  1135. package/dist/node_modules/@catui/ai/dist/providers/google-shared.js +2 -0
  1136. package/dist/node_modules/@catui/ai/dist/providers/google-vertex.js +1 -0
  1137. package/dist/node_modules/@catui/ai/dist/providers/google.js +1 -0
  1138. package/dist/node_modules/@catui/ai/dist/providers/openai-codex-responses.js +7 -0
  1139. package/dist/node_modules/@catui/ai/dist/providers/openai-completions.js +6 -0
  1140. package/dist/node_modules/@catui/ai/dist/providers/openai-responses-shared.js +10 -0
  1141. package/dist/node_modules/@catui/ai/dist/providers/openai-responses.js +1 -0
  1142. package/dist/node_modules/@catui/ai/dist/providers/register-builtins.js +1 -0
  1143. package/dist/node_modules/@catui/ai/dist/providers/simple-options.js +1 -0
  1144. package/dist/node_modules/@catui/ai/dist/providers/transform-messages.js +1 -0
  1145. package/dist/node_modules/@catui/ai/dist/registry.js +1 -0
  1146. package/dist/node_modules/@catui/ai/dist/schema.js +1 -0
  1147. package/dist/node_modules/@catui/ai/dist/stream.js +1 -0
  1148. package/dist/node_modules/@catui/ai/dist/types.js +0 -0
  1149. package/dist/node_modules/@catui/ai/dist/utils/event-stream-types.js +0 -0
  1150. package/dist/node_modules/@catui/ai/dist/utils/event-stream.js +1 -0
  1151. package/dist/node_modules/@catui/ai/dist/utils/http-proxy.js +1 -0
  1152. package/dist/node_modules/@catui/ai/dist/utils/json-parse.js +1 -0
  1153. package/dist/node_modules/@catui/ai/dist/utils/oauth/anthropic.js +1 -0
  1154. package/dist/node_modules/@catui/ai/dist/utils/oauth/decode-credential.js +1 -0
  1155. package/dist/node_modules/@catui/ai/dist/utils/oauth/github-copilot.js +1 -0
  1156. package/dist/node_modules/@catui/ai/dist/utils/oauth/google-antigravity.js +1 -0
  1157. package/dist/node_modules/@catui/ai/dist/utils/oauth/google-gemini-cli.js +1 -0
  1158. package/dist/node_modules/@catui/ai/dist/utils/oauth/index.js +1 -0
  1159. package/dist/node_modules/@catui/ai/dist/utils/oauth/openai-codex.js +11 -0
  1160. package/dist/node_modules/@catui/ai/dist/utils/oauth/pkce.js +1 -0
  1161. package/dist/node_modules/@catui/ai/dist/utils/oauth/types.js +0 -0
  1162. package/dist/node_modules/@catui/ai/dist/utils/overflow.js +1 -0
  1163. package/dist/node_modules/@catui/ai/dist/utils/sanitize-unicode.js +1 -0
  1164. package/dist/node_modules/@catui/ai/dist/utils/typebox-helpers.js +1 -0
  1165. package/dist/node_modules/@catui/ai/dist/utils/validation.js +6 -0
  1166. package/dist/node_modules/@catui/ai/package.json +106 -0
  1167. package/dist/node_modules/@catui/tui/dist/autocomplete.js +2 -0
  1168. package/dist/node_modules/@catui/tui/dist/components/box.js +1 -0
  1169. package/dist/node_modules/@catui/tui/dist/components/cached-container.js +1 -0
  1170. package/dist/node_modules/@catui/tui/dist/components/cancellable-loader.js +1 -0
  1171. package/dist/node_modules/@catui/tui/dist/components/editor.js +21 -0
  1172. package/dist/node_modules/@catui/tui/dist/components/image.js +1 -0
  1173. package/dist/node_modules/@catui/tui/dist/components/input.js +2 -0
  1174. package/dist/node_modules/@catui/tui/dist/components/loader.js +1 -0
  1175. package/dist/node_modules/@catui/tui/dist/components/markdown.js +7 -0
  1176. package/dist/node_modules/@catui/tui/dist/components/select-list.js +1 -0
  1177. package/dist/node_modules/@catui/tui/dist/components/settings-list.js +1 -0
  1178. package/dist/node_modules/@catui/tui/dist/components/spacer.js +1 -0
  1179. package/dist/node_modules/@catui/tui/dist/components/text.js +1 -0
  1180. package/dist/node_modules/@catui/tui/dist/components/truncated-text.js +2 -0
  1181. package/dist/node_modules/@catui/tui/dist/editor-component.js +0 -0
  1182. package/dist/node_modules/@catui/tui/dist/fuzzy.js +1 -0
  1183. package/dist/node_modules/@catui/tui/dist/index.js +1 -0
  1184. package/dist/node_modules/@catui/tui/dist/keybindings.js +1 -0
  1185. package/dist/node_modules/@catui/tui/dist/keys.js +5 -0
  1186. package/dist/node_modules/@catui/tui/dist/kill-ring.js +1 -0
  1187. package/dist/node_modules/@catui/tui/dist/stdin-buffer.js +1 -0
  1188. package/dist/node_modules/@catui/tui/dist/terminal-image.js +1 -0
  1189. package/dist/node_modules/@catui/tui/dist/terminal.js +1 -0
  1190. package/dist/node_modules/@catui/tui/dist/tui.js +12 -0
  1191. package/dist/node_modules/@catui/tui/dist/undo-stack.js +1 -0
  1192. package/dist/node_modules/@catui/tui/dist/utils.js +2 -0
  1193. package/dist/node_modules/@catui/tui/package.json +37 -0
  1194. package/dist/packages/mem-core/src/store.d.ts +21 -0
  1195. package/dist/packages/mem-core/src/store.js +1 -0
  1196. package/dist/packages/mem-core/src/types.d.ts +329 -0
  1197. package/dist/packages/mem-core/src/types.js +0 -0
  1198. package/dist/packages/protocol/src/commands.d.ts +33 -0
  1199. package/dist/packages/protocol/src/commands.js +0 -0
  1200. package/dist/packages/protocol/src/flags.d.ts +20 -0
  1201. package/dist/packages/protocol/src/flags.js +0 -0
  1202. package/dist/packages/protocol/src/hooks.d.ts +17 -0
  1203. package/dist/packages/protocol/src/hooks.js +0 -0
  1204. package/dist/packages/protocol/src/index.d.ts +15 -0
  1205. package/dist/packages/protocol/src/index.js +1 -0
  1206. package/dist/packages/protocol/src/lifecycle.d.ts +61 -0
  1207. package/dist/packages/protocol/src/lifecycle.js +0 -0
  1208. package/dist/packages/protocol/src/tools.d.ts +77 -0
  1209. package/dist/packages/protocol/src/tools.js +0 -0
  1210. package/dist/packages/soul-core/src/config.d.ts +20 -0
  1211. package/dist/packages/soul-core/src/config.js +1 -0
  1212. package/dist/packages/soul-core/src/diagnostics.d.ts +23 -0
  1213. package/dist/packages/soul-core/src/diagnostics.js +1 -0
  1214. package/dist/packages/soul-core/src/evolution.d.ts +75 -0
  1215. package/dist/packages/soul-core/src/evolution.js +1 -0
  1216. package/dist/packages/soul-core/src/index.d.ts +13 -0
  1217. package/dist/packages/soul-core/src/index.js +1 -0
  1218. package/dist/packages/soul-core/src/injection.d.ts +35 -0
  1219. package/dist/packages/soul-core/src/injection.js +8 -0
  1220. package/dist/packages/soul-core/src/manager.d.ts +101 -0
  1221. package/dist/packages/soul-core/src/manager.js +1 -0
  1222. package/dist/packages/soul-core/src/store.d.ts +62 -0
  1223. package/dist/packages/soul-core/src/store.js +1 -0
  1224. package/dist/packages/soul-core/src/types.d.ts +317 -0
  1225. package/dist/packages/soul-core/src/types.js +0 -0
  1226. package/dist/public-config.d.ts +12 -0
  1227. package/dist/public-config.js +1 -0
  1228. package/dist/runtime.d.ts +9 -0
  1229. package/dist/runtime.js +1 -0
  1230. package/dist/session-compaction.d.ts +7 -0
  1231. package/dist/session-compaction.js +1 -0
  1232. package/dist/session.d.ts +7 -0
  1233. package/dist/session.js +1 -0
  1234. package/dist/skills.d.ts +7 -0
  1235. package/dist/skills.js +1 -0
  1236. package/dist/tools.d.ts +7 -0
  1237. package/dist/tools.js +1 -0
  1238. package/dist/utils/changelog.d.ts +20 -0
  1239. package/dist/utils/changelog.js +4 -0
  1240. package/dist/utils/diagnostics.d.ts +37 -0
  1241. package/dist/utils/diagnostics.js +1 -0
  1242. package/dist/utils/frontmatter.d.ts +7 -0
  1243. package/dist/utils/frontmatter.js +4 -0
  1244. package/dist/utils/git.d.ts +25 -0
  1245. package/dist/utils/git.js +1 -0
  1246. package/dist/utils/mime.d.ts +1 -0
  1247. package/dist/utils/mime.js +1 -0
  1248. package/dist/utils/photon.d.ts +6 -0
  1249. package/dist/utils/photon.js +1 -0
  1250. package/dist/utils/startup-profiler.d.ts +87 -0
  1251. package/dist/utils/startup-profiler.js +2 -0
  1252. package/docs/codex-goal-command-impl.md +1055 -0
  1253. package/docs/codex-goal-vs-grub.md +500 -0
  1254. package/docs/custom-provider.md +27 -0
  1255. package/docs/extensions.md +27 -0
  1256. package/docs/keybindings.md +27 -0
  1257. package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +251 -0
  1258. package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/212/245/345/221/212.md" +123 -0
  1259. package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210.md" +1222 -0
  1260. package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/256/236/347/216/260/346/212/245/345/221/212.md" +158 -0
  1261. package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/257/271/346/257/224/345/210/206/346/236/220.md" +128 -0
  1262. package/docs/loop /351/207/215/346/236/204/350/256/241/345/210/222.md" +321 -0
  1263. package/docs/loop-usage-examples.md +215 -0
  1264. package/docs/models.md +27 -0
  1265. package/docs/packages.md +27 -0
  1266. package/docs/pi-design-philosophy.md +457 -0
  1267. package/docs/planmode.md +1987 -0
  1268. package/docs/prompt-templates.md +27 -0
  1269. package/docs/providers.md +27 -0
  1270. package/docs/sdk.md +27 -0
  1271. package/docs/skills.md +27 -0
  1272. package/docs/themes.md +27 -0
  1273. package/docs/tui.md +27 -0
  1274. package/package.json +191 -0
@@ -0,0 +1,119 @@
1
+ var Le=Object.defineProperty;var s=(k,e)=>Le(k,"name",{value:e,configurable:!0});import*as P from"node:fs";import*as J from"node:os";import*as D from"node:path";import{CombinedAutocompleteProvider as Be,CachedContainer as Ue,Container as v,Markdown as me,matchesKey as Oe,ProcessTerminal as qe,Spacer as u,Text as g,TruncatedText as ae,TUI as We,visibleWidth as pe}from"@catui/tui";import{spawn as Fe,spawnSync as re}from"child_process";import{APP_NAME as O,getDebugLogPath as He,getShareViewerUrl as Ne,VERSION as Ke}from"../../config.js";import{parseSkillBlock as _e}from"../../core/runtime/agent-session.js";import{FooterDataProvider as je}from"./footer-data-provider.js";import{KeybindingsManager as Qe}from"../../core/platform/keybindings.js";import{createCompactionSummaryMessage as Ge}from"../../core/messages.js";import{listMCPServers as fe,setMCPServerEnabled as Ve}from"../../core/mcp/mcp-config.js";import{getExtensionBackedBuiltinCommandNames as ze,formatSlashCommandDescription as Y,getLocalizedCommands as Xe,inferSlashCommandCategory as he}from"../../core/slash-commands.js";import{t as H}from"../../core/platform/i18n/index.js";import{getActivePersonaId as de,getPersonaDescription as Je,getPersonaDir as le,getPersonaMcpConfigPath as Ce,getPersonaMemoryDir as we,getPersonaSoulDir as ye,listPersonas as Se,setActivePersonaId as be,toAbsolutePath as I}from"../../core/persona/persona-manager.js";import{CATUI_WHATS_NEW as Ye}from"../../catui-defaults.js";import{getChangelogPath as Ze,parseChangelog as et}from"../../utils/changelog.js";import{copyToClipboard as tt}from"../utils/clipboard.js";import{ensureTool as Me,getToolPath as Te,prewarmTool as Ee}from"../../core/platform/utils/tools-manager.js";import{printTimings as st,time as N}from"../../core/platform/timings.js";import{ArminComponent as it}from"./components/armin.js";import{ImagePipelineController as nt}from"./controllers/image-pipeline-controller.js";import{SelfUpdateController as ot}from"./controllers/self-update-controller.js";import{InteractiveState as at}from"./state/interactive-state.js";import{PersistentSurfaceRegistry as rt}from"./controllers/extension-ui/persistent-surface-registry.js";import{PromptHost as ht}from"./controllers/extension-ui/prompt-host.js";import{CustomOverlayHost as dt}from"./controllers/extension-ui/custom-overlay-host.js";import{EditorComponentAdapter as lt}from"./controllers/extension-ui/editor-component-adapter.js";import{ModelOverlayController as ct}from"./controllers/model-overlay-controller.js";import{AuthProviderConfigController as ut}from"./controllers/auth-provider-config-controller.js";import{TreeOverlayController as gt}from"./controllers/tree-overlay-controller.js";import{SettingsOverlayController as mt}from"./controllers/settings-overlay-controller.js";import{SlashDispatcherController as pt}from"./controllers/slash-dispatcher-controller.js";import{InputSubmitController as ft}from"./controllers/input-submit-controller.js";import{InterruptController as Ct}from"./controllers/interrupt-controller.js";import{StreamRenderController as wt}from"./controllers/stream-render-controller.js";import{AssistantMessageComponent as xe}from"./components/assistant-message.js";import{BashExecutionComponent as ce}from"./components/bash-execution.js";import{BorderedLoader as Pe}from"./components/bordered-loader.js";import{BuddyPetComponent as yt}from"./components/buddy/pet-sprites.js";import{EditorBuddyLayout as St}from"./components/editor-buddy-layout.js";import{BranchSummaryMessageComponent as bt}from"./components/branch-summary-message.js";import{CatuiLoader as Mt}from"./components/catui-loader.js";import{NotificationQueue as Tt}from"./components/notification-queue.js";import{PersonaSelectorComponent as Et}from"./components/persona-selector.js";import{CompactionSummaryMessageComponent as xt}from"./components/compaction-summary-message.js";import{CustomEditor as Pt}from"./components/custom-editor.js";import{CustomMessageComponent as kt}from"./components/custom-message.js";import{DaxnutsComponent as $t}from"./components/daxnuts.js";import{DynamicBorder as Z}from"./components/dynamic-border.js";import{FooterComponent as At,renderContextProgressBar as Rt}from"./components/footer.js";import{appKey as L,appKeyHint as vt,editorKey as It,keyHint as Dt,rawKeyHint as q}from"./components/keybinding-hints.js";import{formatSoulStats as Lt}from"./components/soul-stats.js";import{SkillInvocationMessageComponent as Bt}from"./components/skill-invocation-message.js";import{ToolExecutionComponent as ke}from"./components/tool-execution.js";import{UserMessageComponent as $e}from"./components/user-message.js";import{RawText as Ut}from"./components/raw-text.js";import{getAvailableThemesWithPaths as Ot,getEditorTheme as qt,getMarkdownTheme as Wt,getThemeByName as Ft,initTheme as Ht,onThemeChange as Nt,setRegisteredThemes as ue,setTheme as Ae,setThemeInstance as Kt,theme as r}from"./theme/theme.js";import{getAgentLoopArgumentCompletions as _t,getLanguageArgumentCompletions as jt,getLoginArgumentCompletions as Qt,getMcpArgumentCompletions as Gt,getModelArgumentCompletions as Vt,getPersonaArgumentCompletions as zt,getThinkingArgumentCompletions as Xt}from"./slash-command-arguments.js";import{formatAgentLoopStatusLines as Jt}from"./agent-loop-status.js";function Yt(k){return typeof k=="object"&&k!==null&&"setExpanded"in k&&typeof k.setExpanded=="function"}s(Yt,"isExpandable");const Zt=process.env.CATUI_DEBUG==="1",Re=D.join(J.homedir(),".catui","agent","catui-debug.log");function ee(k){if(Zt)try{P.mkdirSync(D.dirname(Re),{recursive:!0}),P.appendFileSync(Re,`[${new Date().toISOString()}] [imode] ${k}
2
+ `)}catch{}}s(ee,"_dbg");class ni{static{s(this,"InteractiveMode")}options;session;ui;chatContainer;pendingMessagesContainer;statusContainer;defaultEditor;editor;autocompleteProvider;fdPath;startupToolsPrewarmed=!1;editorContainer;footer;buddyPet=null;buddyPetSpecies=null;buddyPetResetTimer;footerDataProvider;keybindings;version;isInitialized=!1;onInputCallback;catWorkingMessages=["Purring\u2026","Meowing\u2026","Napping\u2026","Stretching\u2026","Zooming\u2026","Sneaking\u2026","Pouncing\u2026","Scratching\u2026","Yawning\u2026","Blinking\u2026","Kneading\u2026","Crouching\u2026","Spinning\u2026","Twitching\u2026","Hiding\u2026"];catMessageIndex=Math.floor(Math.random()*15);catMessageLastSwitch=0;state=new at;skillCommands=new Map;unsubscribe;isBashMode=!1;bashComponent=void 0;pendingBashComponents=[];shutdownRequested=!1;statusTimers=new Set;notificationQueue;extensionTerminalInputUnsubscribers=new Set;widgetContainerAbove;widgetContainerBelow;buddySlot;editorBuddyLayout;headerContainer;builtInHeader=void 0;attachmentsContainer=void 0;imagePipeline;selfUpdate;authProviderConfig;modelOverlay;treeOverlay;settingsOverlay;slashDispatcher;inputSubmit;interrupt;streamRender;surfaces;promptHost;customOverlay;editorAdapter;get agent(){return this.session.agent}get sessionManager(){return this.session.sessionManager}get settingsManager(){return this.session.settingsManager}constructor(e,n={}){this.options=n,this.session=e,this.version=Ke,this.ui=new We(new qe,this.settingsManager.getShowHardwareCursor()),this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink()),this.headerContainer=new v,this.chatContainer=new Ue,this.pendingMessagesContainer=new v,this.statusContainer=new v,this.widgetContainerAbove=new v,this.widgetContainerBelow=new v,this.notificationQueue=new Tt(this.ui,r),this.keybindings=Qe.create();const i=this.settingsManager.getEditorPaddingX(),o=this.settingsManager.getAutocompleteMaxVisible();this.defaultEditor=new Pt(this.ui,qt(),this.keybindings,{paddingX:i,autocompleteMaxVisible:o}),this.editor=this.defaultEditor,this.editorContainer=new v,this.attachmentsContainer=new v,this.buddySlot=new v,this.editorBuddyLayout=new St(()=>this.editor,this.buddySlot),this.editorContainer.addChild(this.attachmentsContainer),this.editorContainer.addChild(this.editorBuddyLayout),this.imagePipeline=new nt({getCwd:s(()=>this.session.cwd,"getCwd"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),showStatus:s(t=>this.showStatus(t),"showStatus"),getThemeName:s(()=>this.settingsManager.getTheme(),"getThemeName"),isEditorCursorAtTop:s(()=>this.editor.isCursorOnFirstVisualLine?.()??!this.editor.getText().includes(`
3
+ `),"isEditorCursorAtTop"),getEditorContainer:s(()=>this.editorContainer,"getEditorContainer"),getAttachmentsContainer:s(()=>this.attachmentsContainer,"getAttachmentsContainer"),getEditorBuddyLayout:s(()=>this.editorBuddyLayout,"getEditorBuddyLayout")}),this.selfUpdate=new ot({getChatContainer:s(()=>this.chatContainer,"getChatContainer"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),getAutoUpdate:s(()=>this.settingsManager.getAutoUpdate(),"getAutoUpdate"),getSkippedVersion:s(()=>this.settingsManager.getSkippedVersion(),"getSkippedVersion"),setSkippedVersion:s(t=>this.settingsManager.setSkippedVersion(t),"setSkippedVersion"),setAutoUpdate:s(t=>this.settingsManager.setAutoUpdate(t),"setAutoUpdate"),showSelector:s((t,a)=>this.promptHost.selector(t,a),"showSelector")}),this.surfaces=new rt({requestRender:s(()=>this.ui.requestRender(),"requestRender"),getUi:s(()=>this.ui,"getUi"),getWidgetContainerAbove:s(()=>this.widgetContainerAbove,"getWidgetContainerAbove"),getWidgetContainerBelow:s(()=>this.widgetContainerBelow,"getWidgetContainerBelow"),getHeaderContainer:s(()=>this.headerContainer,"getHeaderContainer"),getBuiltInHeader:s(()=>this.builtInHeader,"getBuiltInHeader"),getFooter:s(()=>this.footer,"getFooter"),getFooterDataProvider:s(()=>this.footerDataProvider,"getFooterDataProvider")}),this.promptHost=new ht({getEditorContainer:s(()=>this.editorContainer,"getEditorContainer"),getUi:s(()=>this.ui,"getUi"),getEditor:s(()=>this.editor,"getEditor"),getEditorBuddyLayout:s(()=>this.editorBuddyLayout,"getEditorBuddyLayout"),getKeybindings:s(()=>this.keybindings,"getKeybindings"),remountEditorShell:s(()=>this.remountEditorShell(),"remountEditorShell")}),this.customOverlay=new dt({getEditor:s(()=>this.editor,"getEditor"),getUi:s(()=>this.ui,"getUi"),getEditorContainer:s(()=>this.editorContainer,"getEditorContainer"),getKeybindings:s(()=>this.keybindings,"getKeybindings"),remountEditorShell:s(()=>this.remountEditorShell(),"remountEditorShell")}),this.editorAdapter=new lt({getEditor:s(()=>this.editor,"getEditor"),setEditor:s(t=>{this.editor=t},"setEditor"),getDefaultEditor:s(()=>this.defaultEditor,"getDefaultEditor"),getEditorContainer:s(()=>this.editorContainer,"getEditorContainer"),getUi:s(()=>this.ui,"getUi"),getKeybindings:s(()=>this.keybindings,"getKeybindings"),getAutocompleteProvider:s(()=>this.autocompleteProvider,"getAutocompleteProvider"),remountEditorShell:s(()=>this.remountEditorShell(),"remountEditorShell")}),this.footerDataProvider=new je(e.cwd),this.footer=new At(e,this.footerDataProvider,this.settingsManager.getShowTokenStats()),this.footer.setAutoCompactEnabled(e.autoCompactionEnabled),this.authProviderConfig=new ut({modelRegistry:this.session.modelRegistry,surface:{showSelector:s(t=>this.showSelector(t),"showSelector"),showStatus:s(t=>this.showStatus(t),"showStatus"),showError:s(t=>this.showError(t),"showError"),promptInput:s((t,a,h)=>this.promptHost.input(t,a,h),"promptInput"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),getUi:s(()=>this.ui,"getUi"),getEditorContainer:s(()=>this.editorContainer,"getEditorContainer"),getEditor:s(()=>this.editor,"getEditor"),remountEditorShell:s(()=>this.remountEditorShell(),"remountEditorShell")},modelBridge:{getCurrentModel:s(()=>this.session.model,"getCurrentModel"),setCurrentModel:s(async t=>{await this.session.setModel(t),this.footer.invalidate(),this.updateEditorBorderColor()},"setCurrentModel"),showModelSelector:s((t,a)=>this.modelOverlay.showModelSelector(t,a),"showModelSelector"),applySelectedModel:s(t=>this.modelOverlay.applySelectedModel(t),"applySelectedModel"),updateAvailableProviderCount:s(()=>this.modelOverlay.updateAvailableProviderCount(),"updateAvailableProviderCount")}}),this.modelOverlay=new ct({modelSession:{getModel:s(()=>this.session.model,"getModel"),setModel:s(t=>this.session.setModel(t),"setModel"),cycleModel:s(t=>this.session.cycleModel(t),"cycleModel"),getThinkingLevel:s(()=>this.session.thinkingLevel,"getThinkingLevel"),setThinkingLevel:s(t=>this.session.setThinkingLevel(t),"setThinkingLevel"),cycleThinkingLevel:s(()=>this.session.cycleThinkingLevel(),"cycleThinkingLevel"),getAvailableThinkingLevels:s(()=>this.session.getAvailableThinkingLevels(),"getAvailableThinkingLevels"),getScopedModels:s(()=>this.session.scopedModels,"getScopedModels"),setScopedModels:s(t=>this.session.setScopedModels(t),"setScopedModels")},modelCatalog:{refresh:s(()=>this.session.modelRegistry.refresh(),"refresh"),getAvailable:s(()=>this.session.modelRegistry.getAvailable(),"getAvailable"),getAll:s(()=>this.session.modelRegistry.getAll(),"getAll"),find:s((t,a)=>this.session.modelRegistry.find(t,a),"find"),appendOpenRouterModel:s((t,a)=>this.session.modelRegistry.appendOpenRouterModel(t,a),"appendOpenRouterModel"),getCredentialType:s(t=>this.session.modelRegistry.authStorage.get(t)?.type,"getCredentialType"),getRegistry:s(()=>this.session.modelRegistry,"getRegistry")},modelSettings:{getEnabledModels:s(()=>this.settingsManager.getEnabledModels(),"getEnabledModels"),setEnabledModels:s(t=>this.settingsManager.setEnabledModels(t),"setEnabledModels"),setDefaultModelAndProvider:s((t,a)=>this.settingsManager.setDefaultModelAndProvider(t,a),"setDefaultModelAndProvider")},providerConfig:{ensureProviderConfiguredForSelection:s(t=>this.authProviderConfig.ensureProviderConfiguredForSelection(t),"ensureProviderConfiguredForSelection"),handleProviderSelectionFromSelector:s((t,a)=>this.authProviderConfig.handleProviderSelectionFromSelector(t,a),"handleProviderSelectionFromSelector"),promptForProviderApiKey:s((t,a)=>this.authProviderConfig.promptForProviderApiKey(t,a),"promptForProviderApiKey")},surface:{showSelector:s(t=>this.showSelector(t),"showSelector"),showStatus:s(t=>this.showStatus(t),"showStatus"),showError:s(t=>this.showError(t),"showError"),promptInput:s((t,a,h)=>this.promptHost.input(t,a,h),"promptInput"),getUi:s(()=>this.ui,"getUi")},footer:{invalidate:s(()=>this.footer.invalidate(),"invalidate"),setAvailableProviderCount:s(t=>this.footerDataProvider.setAvailableProviderCount(t),"setAvailableProviderCount"),updateEditorBorderColor:s(()=>this.updateEditorBorderColor(),"updateEditorBorderColor")},playDaxnuts:s(()=>this.handleDaxnuts(),"playDaxnuts")}),this.treeOverlay=new gt({session:this.session,getSessionManager:s(()=>this.sessionManager,"getSessionManager"),surface:{showSelector:s(t=>this.showSelector(t),"showSelector"),showStatus:s(t=>this.showStatus(t),"showStatus"),showError:s(t=>this.showError(t),"showError"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),getUi:s(()=>this.ui,"getUi"),getChatContainer:s(()=>this.chatContainer,"getChatContainer"),getStatusContainer:s(()=>this.statusContainer,"getStatusContainer"),clearChat:s(()=>{this.clearStatusTimers(),this.chatContainer.clear()},"clearChat"),clearTransientSessionUi:s(()=>{this.state.loadingAnimation&&(this.state.loadingAnimation.stop(),this.state.loadingAnimation=void 0),this.statusContainer.clear(),this.pendingMessagesContainer.clear(),this.state.compactionQueuedMessages=[],this.state.streamingComponent=void 0,this.state.streamingMessage=void 0,this.state.pendingTools.clear(),this.imagePipeline.clearAttachments()},"clearTransientSessionUi"),addSessionNavigationBanner:s(t=>this.addSessionNavigationBanner(t),"addSessionNavigationBanner"),renderInitialMessages:s(()=>this.renderInitialMessages(),"renderInitialMessages"),getEditorText:s(()=>this.editor.getText(),"getEditorText"),setEditorText:s(t=>this.editor.setText(t),"setEditorText"),getEscapeHandler:s(()=>this.defaultEditor.onEscape,"getEscapeHandler"),setEscapeHandler:s(t=>{this.defaultEditor.onEscape=t},"setEscapeHandler")},promptHost:{selector:s((t,a)=>this.promptHost.selector(t,a),"selector"),editor:s((t,a)=>this.promptHost.editor(t,a),"editor")},keybindings:this.keybindings,shutdown:s(()=>this.shutdown(),"shutdown")}),this.settingsOverlay=new mt({session:this.session,settingsManager:this.settingsManager,surface:{showSelector:s(t=>this.showSelector(t),"showSelector"),showStatus:s(t=>this.showStatus(t),"showStatus"),showError:s(t=>this.showError(t),"showError"),invalidateUi:s(()=>this.ui.invalidate(),"invalidateUi"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),setShowHardwareCursor:s(t=>this.ui.setShowHardwareCursor(t),"setShowHardwareCursor"),setClearOnShrink:s(t=>this.ui.setClearOnShrink(t),"setClearOnShrink")},footer:{setAutoCompactEnabled:s(t=>this.footer.setAutoCompactEnabled(t),"setAutoCompactEnabled"),setShowTokenStats:s(t=>this.footer.setShowTokenStats(t),"setShowTokenStats"),invalidate:s(()=>this.footer.invalidate(),"invalidate")},editor:{setPaddingX:s(t=>{this.defaultEditor.setPaddingX(t),this.editor!==this.defaultEditor&&this.editor.setPaddingX!==void 0&&this.editor.setPaddingX(t)},"setPaddingX"),setAutocompleteMaxVisible:s(t=>{this.defaultEditor.setAutocompleteMaxVisible(t),this.editor!==this.defaultEditor&&this.editor.setAutocompleteMaxVisible!==void 0&&this.editor.setAutocompleteMaxVisible(t)},"setAutocompleteMaxVisible"),updateBorderColor:s(()=>this.updateEditorBorderColor(),"updateBorderColor")},render:{setToolImagesEnabled:s(t=>{for(const a of this.chatContainer.children)a instanceof ke&&a.setShowImages(t)},"setToolImagesEnabled"),setAssistantThinkingHidden:s(t=>{for(const a of this.chatContainer.children)a instanceof xe&&a.setHideThinkingBlock(t);this.clearStatusTimers(),this.chatContainer.clear()},"setAssistantThinkingHidden"),rebuildChatFromMessages:s(()=>this.rebuildChatFromMessages(),"rebuildChatFromMessages")},getHideThinkingBlock:s(()=>this.state.hideThinkingBlock,"getHideThinkingBlock"),setHideThinkingBlock:s(t=>{this.state.hideThinkingBlock=t},"setHideThinkingBlock"),rebuildAutocomplete:s(()=>this.setupAutocomplete(this.fdPath),"rebuildAutocomplete"),syncBuddyPet:s(()=>this.syncBuddyPet(),"syncBuddyPet")}),this.slashDispatcher=new pt({clearEditor:s(()=>this.editor.setText(""),"clearEditor"),settings:{showSettingsSelector:s(()=>this.settingsOverlay.showSettingsSelector(),"showSettingsSelector")},model:{showScopedModelsSelector:s(()=>this.modelOverlay.showModelsSelector(),"showScopedModelsSelector"),handleModelCommand:s(t=>this.modelOverlay.handleModelCommand(t),"handleModelCommand"),handleThinkingCommand:s(t=>this.modelOverlay.handleThinkingCommand(t),"handleThinkingCommand")},auth:{handleApiKeyCommand:s(()=>this.authProviderConfig.handleApiKeyCommand(),"handleApiKeyCommand"),handleLoginCommand:s(t=>this.authProviderConfig.handleLoginCommand(t),"handleLoginCommand"),showLogoutSelector:s(()=>this.authProviderConfig.showOAuthSelector("logout"),"showLogoutSelector")},tree:{showForkSelector:s(()=>this.treeOverlay.showForkSelector(),"showForkSelector"),showTreeSelector:s(()=>this.treeOverlay.showTreeSelector(),"showTreeSelector"),showSessionSelector:s(()=>this.treeOverlay.showSessionSelector(),"showSessionSelector")},selfUpdate:{handleUpdateCommand:s(()=>this.selfUpdate.handleUpdateCommand(),"handleUpdateCommand"),handleReinstallCommand:s(()=>this.selfUpdate.handleReinstallCommand(),"handleReinstallCommand")},commands:{isExtensionCommand:s(t=>this.isExtensionCommand(t),"isExtensionCommand"),handleAgentLoopCommand:s(t=>this.handleAgentLoopCommand(t),"handleAgentLoopCommand"),handleMcpCommand:s(t=>this.handleMcpCommand(t),"handleMcpCommand"),handleExportCommand:s(t=>this.handleExportCommand(t),"handleExportCommand"),handleShareCommand:s(()=>this.handleShareCommand(),"handleShareCommand"),handleCopyCommand:s(()=>this.handleCopyCommand(),"handleCopyCommand"),handleStatusCommand:s(()=>this.handleStatusCommand(),"handleStatusCommand"),handleUsageCommand:s(()=>this.handleUsageCommand(),"handleUsageCommand"),handleNameCommand:s(t=>this.handleNameCommand(t),"handleNameCommand"),handleSessionCommand:s(()=>this.handleSessionCommand(),"handleSessionCommand"),handleChangelogCommand:s(()=>this.handleChangelogCommand(),"handleChangelogCommand"),handleHotkeysCommand:s(()=>this.handleHotkeysCommand(),"handleHotkeysCommand"),handleShowResourcesCommand:s(()=>this.handleShowResourcesCommand(),"handleShowResourcesCommand"),handleClearCommand:s(()=>this.handleClearCommand(),"handleClearCommand"),handleCompactCommand:s(t=>this.handleCompactCommand(t),"handleCompactCommand"),handleReloadCommand:s(()=>this.handleReloadCommand(),"handleReloadCommand"),handleLanguageCommand:s(t=>this.handleLanguageCommand(t),"handleLanguageCommand"),handleSoulCommand:s(()=>this.handleSoulCommand(),"handleSoulCommand"),handlePersonaCommand:s(t=>this.handlePersonaCommand(t),"handlePersonaCommand"),handleMemoryCommand:s(()=>this.handleMemoryCommand(),"handleMemoryCommand"),handleArminSaysHi:s(()=>this.handleArminSaysHi(),"handleArminSaysHi"),handleBrowserOptInCommand:s(()=>this.handleBrowserOptInCommand(),"handleBrowserOptInCommand"),shutdown:s(()=>this.shutdown(),"shutdown")}}),this.inputSubmit=new ft({editor:{setText:s(t=>this.editor.setText(t),"setText"),addToHistory:s(t=>this.editor.addToHistory?.(t),"addToHistory"),handleExternalInput:s(t=>this.onInputCallback?(this.onInputCallback(t),this.editor.addToHistory?.(t),!0):!1,"handleExternalInput"),setBashMode:s(t=>{this.isBashMode=t},"setBashMode"),updateBorderColor:s(()=>this.updateEditorBorderColor(),"updateBorderColor")},slash:{execute:s(t=>this.slashDispatcher.execute(t),"execute")},image:{awaitPendingPaste:s(()=>this.imagePipeline.awaitPendingPaste(),"awaitPendingPaste"),extractImagesFromText:s(t=>this.imagePipeline.extractImagesFromText(t),"extractImagesFromText"),takePendingAttachments:s(()=>this.imagePipeline.takePendingAttachments(),"takePendingAttachments"),processAttachmentFiles:s(t=>this.imagePipeline.processAttachmentFiles(t),"processAttachmentFiles"),cleanupClipboardImages:s(()=>this.imagePipeline.cleanupClipboardImages(),"cleanupClipboardImages")},session:{isBashRunning:s(()=>this.session.isBashRunning,"isBashRunning"),isCompacting:s(()=>this.session.isCompacting,"isCompacting"),isStreaming:s(()=>this.session.isStreaming,"isStreaming"),getModel:s(()=>this.session.model,"getModel"),getCwd:s(()=>this.session.cwd,"getCwd"),promptAfterRender:s((t,a)=>this.promptAfterRender(t,a),"promptAfterRender"),queueCompactionMessage:s((t,a)=>this.queueCompactionMessage(t,a),"queueCompactionMessage")},commands:{isExtensionCommand:s(t=>this.isExtensionCommand(t),"isExtensionCommand"),handlePersonaCommand:s(t=>this.handlePersonaCommand(t),"handlePersonaCommand"),handleBashCommand:s((t,a)=>this.handleBashCommand(t,a),"handleBashCommand")},render:{showStatus:s(t=>this.showStatus(t),"showStatus"),showWarning:s(t=>this.showWarning(t),"showWarning"),showError:s(t=>this.showError(t),"showError"),notify:s((t,a)=>this.notify(t,a),"notify"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),flushPendingBashComponents:s(()=>this.flushPendingBashComponents(),"flushPendingBashComponents"),updatePendingMessagesDisplay:s(()=>this.updatePendingMessagesDisplay(),"updatePendingMessagesDisplay"),addOptimisticUserMessage:s((t,a)=>{this.state.optimisticUserMessages.push({text:t}),this.addMessageToChat({role:"user",content:a,timestamp:Date.now()})},"addOptimisticUserMessage"),rollbackFirstOptimisticUserMessageIfMatches:s(t=>{this.state.optimisticUserMessages.length>0&&this.state.optimisticUserMessages[0]?.text===t&&this.state.optimisticUserMessages.shift()},"rollbackFirstOptimisticUserMessageIfMatches")}}),this.interrupt=new Ct({queue:{isLoadingAnimationActive:s(()=>!!this.state.loadingAnimation,"isLoadingAnimationActive"),restoreQueuedMessagesWithAbort:s(()=>{this.restoreQueuedMessagesToEditor({abort:!0})},"restoreQueuedMessagesWithAbort")},runtime:{isStreaming:s(()=>this.session.isStreaming,"isStreaming"),isBashRunning:s(()=>this.session.isBashRunning,"isBashRunning"),abortAgent:s(()=>this.agent.abort(),"abortAgent"),abortBash:s(()=>this.session.abortBash(),"abortBash")},bash:{isBashMode:s(()=>this.isBashMode,"isBashMode"),exitBashMode:s(()=>{this.editor.setText(""),this.isBashMode=!1,this.updateEditorBorderColor()},"exitBashMode")},editor:{getText:s(()=>this.editor.getText(),"getText"),clearEditor:s(()=>this.clearEditor(),"clearEditor")},tree:{getDoubleEscapeAction:s(()=>this.settingsManager.getDoubleEscapeAction(),"getDoubleEscapeAction"),showTreeSelector:s(()=>this.treeOverlay.showTreeSelector(),"showTreeSelector"),showForkSelector:s(()=>this.treeOverlay.showForkSelector(),"showForkSelector")},lifecycle:{requestShutdown:s(()=>{this.shutdown()},"requestShutdown"),suspend:s(()=>this.suspend(),"suspend")}}),this.streamRender=new wt({state:{get:s(()=>this.state,"get")},layout:{getUi:s(()=>this.ui,"getUi"),getChatContainer:s(()=>this.chatContainer,"getChatContainer"),getStatusContainer:s(()=>this.statusContainer,"getStatusContainer"),addMessageToChat:s(t=>this.addMessageToChat(t),"addMessageToChat"),updatePendingMessagesDisplay:s(()=>this.updatePendingMessagesDisplay(),"updatePendingMessagesDisplay"),rebuildChatFromMessages:s(()=>this.rebuildChatFromMessages(),"rebuildChatFromMessages"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),invalidateFooter:s(()=>this.footer.invalidate(),"invalidateFooter")},loaders:{getSessionId:s(()=>this.sessionManager.getSessionId(),"getSessionId"),getDefaultWorkingMessage:s(()=>this.getNextCatMessage(),"getDefaultWorkingMessage"),getInterruptKeyHint:s(()=>L(this.keybindings,"interrupt"),"getInterruptKeyHint"),setBuddyPetState:s((t,a,h)=>this.setBuddyPetState(t,a,h),"setBuddyPetState"),startAgentRunTimer:s(()=>this.startAgentRunTimer(),"startAgentRunTimer"),stopAgentRunTimer:s(()=>this.stopAgentRunTimer(),"stopAgentRunTimer"),updateWorkingMessage:s(t=>this.updateWorkingMessage(t),"updateWorkingMessage"),formatElapsedSeconds:s(t=>this.formatElapsedSeconds(t),"formatElapsedSeconds"),isInPlanMode:s(()=>this.footerDataProvider.getExtensionStatuses().has("plan"),"isInPlanMode")},toolTrace:{shouldRenderToolTrace:s(t=>this.shouldRenderToolTrace(t),"shouldRenderToolTrace"),getRegisteredToolDefinition:s(t=>this.getRegisteredToolDefinition(t),"getRegisteredToolDefinition"),getShowImages:s(()=>this.settingsManager.getShowImages(),"getShowImages")},runtime:{getRetryAttempt:s(()=>this.session.retryAttempt,"getRetryAttempt"),abortCompaction:s(()=>this.session.abortCompaction(),"abortCompaction"),abortRetry:s(()=>this.session.abortRetry(),"abortRetry"),flushCompactionQueue:s(t=>{this.flushCompactionQueue(t)},"flushCompactionQueue"),checkShutdownRequested:s(()=>this.checkShutdownRequested(),"checkShutdownRequested"),clearAttachments:s(()=>this.imagePipeline.clearAttachments(),"clearAttachments"),getAgentDir:s(()=>this.session.agentDir,"getAgentDir")},escape:{getHandler:s(()=>this.defaultEditor.onEscape,"getHandler"),setHandler:s(t=>{this.defaultEditor.onEscape=t},"setHandler")},surface:{ensureInitialized:s(async()=>{this.isInitialized||await this.init()},"ensureInitialized"),restoreEditorFocusIfPossible:s(()=>this.promptHost.restoreEditorFocusIfPossible(),"restoreEditorFocusIfPossible"),getUserMessageText:s(t=>this.getUserMessageText(t),"getUserMessageText"),getMarkdownThemeWithSettings:s(()=>this.getMarkdownThemeWithSettings(),"getMarkdownThemeWithSettings"),showStatus:s(t=>this.showStatus(t),"showStatus"),showError:s(t=>this.showError(t),"showError")}}),this.syncBuddyPet(),this.state.hideThinkingBlock=this.settingsManager.getHideThinkingBlock(),ue(this.session.resourceLoader.getThemes().themes),Ht(this.settingsManager.getTheme(),!0),this.session.setSlashCommandExecutor(t=>this.slashDispatcher.execute(t,{clearEditor:!1}))}setupAutocomplete(e){const i=Xe(H).map(l=>({name:l.name,description:Y(l.description,l.category,H)})),o=i.find(l=>l.name==="model");o&&(o.getArgumentCompletions=(l,T)=>{const $=this.session.scopedModels.length>0?this.session.scopedModels.map(A=>A.model):this.session.modelRegistry.getAvailable();return Vt(l,T,$)});const t=i.find(l=>l.name==="thinking");t&&(t.getArgumentCompletions=(l,T)=>Xt(l,T,this.session.getAvailableThinkingLevels()));const a=i.find(l=>l.name==="agent-loop");a&&(a.getArgumentCompletions=_t);const h=i.find(l=>l.name==="mcp");h&&(h.getArgumentCompletions=(l,T)=>Gt(l,T,fe()));const c=i.find(l=>l.name==="language");c&&(c.getArgumentCompletions=jt);const d=i.find(l=>l.name==="persona");d&&(d.getArgumentCompletions=(l,T)=>zt(l,T,Se(),de()));const m=i.find(l=>l.name==="login");m&&(m.getArgumentCompletions=(l,T)=>Qt(l,T,this.authProviderConfig.getLoginSelectorProviders("login")));const f=this.session.promptTemplates.map(l=>({name:l.name,description:Y(l.description,he(l.name,"prompt"),H)})),M=new Set(i.map(l=>l.name)),w=ze(),E=new Set([...M].filter(l=>!w.has(l))),S=this.session.extensionRunner?.getRegisteredCommands(E)??[],C=new Map(S.map(l=>[l.name,l]));for(const l of i){if(!w.has(l.name))continue;const T=C.get(l.name);T?.getArgumentCompletions&&(l.getArgumentCompletions=T.getArgumentCompletions)}const p=S.filter(l=>!M.has(l.name)).map(l=>({name:l.name,description:Y(l.description??"(extension command)",he(l.name,"extension"),H),getArgumentCompletions:l.getArgumentCompletions}));this.skillCommands.clear();const y=[];if(this.settingsManager.getEnableSkillCommands())for(const l of this.session.resourceLoader.getSkills().skills){const T=`skill:${l.name}`;this.skillCommands.set(T,l.filePath),y.push({name:T,description:Y(l.description,he(l.name,"skill"),H)})}this.autocompleteProvider=new Be([...i,...f,...p,...y],this.session.cwd,e),this.defaultEditor.setAutocompleteProvider(this.autocompleteProvider),this.editor!==this.defaultEditor&&this.editor.setAutocompleteProvider?.(this.autocompleteProvider);const b=new Set([...i,...f,...p,...y].map(l=>l.name));this.defaultEditor.enableSlashHighlight(()=>b,r)}prewarmStartupTools(){this.startupToolsPrewarmed||(this.startupToolsPrewarmed=!0,N("interactive.tools.prewarm.start"),Ee("fd"),Ee("rg"),Promise.all([Me("fd",!0),Me("rg",!0)]).then(([e])=>{const n=e??Te("fd")??void 0;!n||n===this.fdPath||(this.fdPath=n,this.setupAutocomplete(this.fdPath))}).finally(()=>{N("interactive.tools.prewarm.end")}))}async init(){if(!this.isInitialized){if(N("interactive.init.start"),this.imagePipeline.cleanupStaleClipboardFiles(),this.fdPath=Te("fd")??void 0,this.ui.addChild(this.headerContainer),this.options.verbose||!this.settingsManager.getQuietStartup()){const e=r.bold(r.fg("accent",O))+r.fg("dim",` v${this.version}`),n=O==="catui"||O==="catui"?`${r.fg("dim",Ye)}
4
+ `:"",i=this.keybindings,o=s((a,h)=>vt(i,a,h),"hint"),t=[o("interrupt","to interrupt"),o("clear","to clear"),q(`${L(i,"clear")} twice`,"to exit"),o("exit","to exit (empty)"),o("suspend","to suspend"),Dt("deleteToLineEnd","to delete to end"),o("cycleThinkingLevel","to cycle thinking level"),q(`${L(i,"cycleModelForward")}/${L(i,"cycleModelBackward")}`,"to cycle models"),o("selectModel","to select model"),o("selectProviderThenModel","to select provider then model"),o("expandTools","to expand tools"),o("toggleThinking","to expand thinking"),o("externalEditor","for external editor"),q("/","for commands"),q("!","to run bash"),q("!!","to run bash (no context)"),o("followUp","to queue follow-up"),o("dequeue","to edit all queued messages"),o("pasteImage","to paste image"),q("drop files","to attach")].join(`
5
+ `);this.builtInHeader=new g(`${e}
6
+ ${n}${t}`,1,0),this.headerContainer.addChild(new u(1)),this.headerContainer.addChild(this.builtInHeader),this.headerContainer.addChild(new u(1))}else this.builtInHeader=new g("",0,0),this.headerContainer.addChild(this.builtInHeader);this.ui.addChild(this.notificationQueue),this.ui.addChild(this.chatContainer),this.ui.addChild(this.pendingMessagesContainer),this.ui.addChild(this.statusContainer),this.surfaces.renderWidgets(),this.ui.addChild(this.widgetContainerAbove),this.ui.addChild(this.editorContainer),this.ui.addChild(this.widgetContainerBelow),this.ui.addChild(this.footer),this.ui.setFocus(this.editor),this.setupKeyHandlers(),this.setupEditorSubmitHandler(),await this.applyPersonaFromSessionIfAny(),await this.initExtensions(),this.renderInitialMessages(),this.ui.start(),N("interactive.ui.start"),this.isInitialized=!0,this.prewarmStartupTools(),this.updateTerminalTitle(),this.subscribeToAgent(),this.chatContainer.clear(),this.renderInitialMessages(),await this.session.extensionRunner?.emit({type:"session_ready"}),Nt(()=>{this.ui.invalidate(),this.updateEditorBorderColor(),this.ui.requestRender()}),this.footerDataProvider.onBranchChange(()=>{this.ui.requestRender()}),await this.modelOverlay.updateAvailableProviderCount(),N("interactive.firstInput.ready"),st(),this.session.warmupMcpTools()}}updateTerminalTitle(){const e=D.basename(this.session.cwd),n=this.sessionManager.getSessionName();n?this.ui.terminal.setTitle(`\u270E - ${n} - ${e}`):this.ui.terminal.setTitle(`\u270E - ${e}`)}async run(){await this.init();const e=s(()=>{this.shutdown()},"signalShutdown");process.once("SIGHUP",e),process.once("SIGTERM",e),await this.selfUpdate.checkAutoUpdateOnStartup(),this.settingsManager.getAutoUpdate()!=="always"&&this.selfUpdate.checkForNewVersion().then(d=>{d&&this.selfUpdate.showNewVersionNotification(d)});const{migratedProviders:i,modelFallbackMessage:o,initialMessage:t,initialImages:a,initialMessages:h}=this.options;i&&i.length>0&&this.showWarning(`Migrated credentials to auth.json: ${i.join(", ")}`);const c=this.session.modelRegistry.getError();if(c&&this.showError(`models.json error: ${c}`),o&&this.showWarning(o),t)try{await this.session.prompt(t,{images:a})}catch(d){const m=d instanceof Error?d.message:"Unknown error occurred";this.showError(m)}if(h)for(const d of h)try{await this.session.prompt(d)}catch(m){const f=m instanceof Error?m.message:"Unknown error occurred";this.showError(f)}for(;;){const d=await this.getUserInput(),m=performance.now();ee(`main loop: got input "${d.slice(0,80)}"`);try{await this.session.prompt(d),ee(`main loop: prompt returned normally (${(performance.now()-m).toFixed(0)}ms)`)}catch(f){ee(`main loop: prompt threw: ${f} (${(performance.now()-m).toFixed(0)}ms)`);const M=f instanceof Error?f.message:"Unknown error occurred";this.showError(M)}}}getMarkdownThemeWithSettings(){return{...Wt(),codeBlockIndent:this.settingsManager.getCodeBlockIndent()}}formatDisplayPath(e){const n=J.homedir();let i=e;return i.startsWith(n)&&(i=`~${i.slice(n.length)}`),i}getShortPath(e,n){const i=e.match(/node_modules\/(@?[^/]+(?:\/[^/]+)?)\/(.*)/);if(i&&n.startsWith("npm:"))return i[2];const o=e.match(/git\/[^/]+\/[^/]+\/(.*)/);return o&&n.startsWith("git:")?o[1]:this.formatDisplayPath(e)}getDisplaySourceInfo(e,n){return e==="local"?n==="user"?{label:"user",color:"muted"}:n==="project"?{label:"project",color:"muted"}:n==="temporary"?{label:"path",scopeLabel:"temp",color:"muted"}:{label:"path",color:"muted"}:e==="cli"?{label:"path",scopeLabel:n==="temporary"?"temp":void 0,color:"muted"}:{label:e,scopeLabel:n==="user"?"user":n==="project"?"project":n==="temporary"?"temp":void 0,color:"accent"}}getScopeGroup(e,n){return e==="cli"||n==="temporary"?"path":n==="user"?"user":n==="project"?"project":"path"}isPackageSource(e){return e.startsWith("npm:")||e.startsWith("git:")}buildScopeGroups(e,n){const i={user:{scope:"user",paths:[],packages:new Map},project:{scope:"project",paths:[],packages:new Map},path:{scope:"path",paths:[],packages:new Map}};for(const o of e){const t=this.findMetadata(o,n),a=t?.source??"local",h=t?.scope??"project",c=this.getScopeGroup(a,h),d=i[c];if(this.isPackageSource(a)){const m=d.packages.get(a)??[];m.push(o),d.packages.set(a,m)}else d.paths.push(o)}return[i.project,i.user,i.path].filter(o=>o.paths.length>0||o.packages.size>0)}formatScopeGroups(e,n){const i=[];for(const o of e){i.push(` ${r.fg("accent",o.scope)}`);const t=[...o.paths].sort((h,c)=>h.localeCompare(c));for(const h of t)i.push(r.fg("dim",` ${n.formatPath(h)}`));const a=Array.from(o.packages.entries()).sort(([h],[c])=>h.localeCompare(c));for(const[h,c]of a){i.push(` ${r.fg("mdLink",h)}`);const d=[...c].sort((m,f)=>m.localeCompare(f));for(const m of d)i.push(r.fg("dim",` ${n.formatPackagePath(m,h)}`))}}return i.join(`
7
+ `)}findMetadata(e,n){const i=n.get(e);if(i)return i;let o=e;for(;o.includes("/");){o=o.substring(0,o.lastIndexOf("/"));const t=n.get(o);if(t)return t}}formatPathWithSource(e,n){const i=this.findMetadata(e,n);if(i){const o=this.getShortPath(e,i.source),{label:t,scopeLabel:a}=this.getDisplaySourceInfo(i.source,i.scope);return`${a?`${t} (${a})`:t} ${o}`}return this.formatDisplayPath(e)}formatDiagnostics(e,n){const i=[],o=new Map,t=[];for(const a of e)if(a.type==="collision"&&a.collision){const h=o.get(a.collision.name)??[];h.push(a),o.set(a.collision.name,h)}else t.push(a);for(const[a,h]of o){const c=h[0]?.collision;if(c){i.push(r.fg("warning",` "${a}" collision:`)),i.push(r.fg("dim",` ${r.fg("success","\u2713")} ${this.formatPathWithSource(c.winnerPath,n)}`));for(const d of h)d.collision&&i.push(r.fg("dim",` ${r.fg("warning","\u2717")} ${this.formatPathWithSource(d.collision.loserPath,n)} (skipped)`))}}for(const a of t)if(a.path){const h=this.formatPathWithSource(a.path,n);i.push(r.fg(a.type==="error"?"error":"warning",` ${h}`)),i.push(r.fg(a.type==="error"?"error":"warning",` ${a.message}`))}else i.push(r.fg(a.type==="error"?"error":"warning",` ${a.message}`));return i.join(`
8
+ `)}showLoadedResources(e){const n=e?.force||this.options.verbose||!this.settingsManager.getQuietStartup(),i=n||e?.showDiagnosticsWhenQuiet===!0;if(!n&&!i)return;const o=this.session.resourceLoader.getPathMetadata(),t=s((d,m="mdHeading")=>r.fg(m,`[${d}]`),"sectionHeader"),a=this.session.resourceLoader.getSkills(),h=this.session.resourceLoader.getPrompts(),c=this.session.resourceLoader.getThemes();if(n){const d=this.session.resourceLoader.getAgentsFiles().agentsFiles;if(d.length>0){this.chatContainer.addChild(new u(1));const S=d.map(C=>r.fg("dim",` ${this.formatDisplayPath(C.path)}`)).join(`
9
+ `);this.chatContainer.addChild(new g(`${t("Context")}
10
+ ${S}`,0,0)),this.chatContainer.addChild(new u(1))}const m=a.skills;if(m.length>0){const S=m.map(y=>y.filePath),C=this.buildScopeGroups(S,o),p=this.formatScopeGroups(C,{formatPath:s(y=>this.formatDisplayPath(y),"formatPath"),formatPackagePath:s((y,b)=>this.getShortPath(y,b),"formatPackagePath")});this.chatContainer.addChild(new g(`${t("Skills")}
11
+ ${p}`,0,0)),this.chatContainer.addChild(new u(1))}const f=this.session.promptTemplates;if(f.length>0){const S=f.map(b=>b.filePath),C=this.buildScopeGroups(S,o),p=new Map(f.map(b=>[b.filePath,b])),y=this.formatScopeGroups(C,{formatPath:s(b=>{const l=p.get(b);return l?`/${l.name}`:this.formatDisplayPath(b)},"formatPath"),formatPackagePath:s(b=>{const l=p.get(b);return l?`/${l.name}`:this.formatDisplayPath(b)},"formatPackagePath")});this.chatContainer.addChild(new g(`${t("Prompts")}
12
+ ${y}`,0,0)),this.chatContainer.addChild(new u(1))}const M=e?.extensionPaths??[];if(M.length>0){const S=this.buildScopeGroups(M,o),C=this.formatScopeGroups(S,{formatPath:s(p=>this.formatDisplayPath(p),"formatPath"),formatPackagePath:s((p,y)=>this.getShortPath(p,y),"formatPackagePath")});this.chatContainer.addChild(new g(`${t("Extensions","mdHeading")}
13
+ ${C}`,0,0)),this.chatContainer.addChild(new u(1))}const E=c.themes.filter(S=>S.sourcePath);if(E.length>0){const S=E.map(y=>y.sourcePath),C=this.buildScopeGroups(S,o),p=this.formatScopeGroups(C,{formatPath:s(y=>this.formatDisplayPath(y),"formatPath"),formatPackagePath:s((y,b)=>this.getShortPath(y,b),"formatPackagePath")});this.chatContainer.addChild(new g(`${t("Themes")}
14
+ ${p}`,0,0)),this.chatContainer.addChild(new u(1))}}if(i){const d=a.diagnostics;if(d.length>0){const C=this.formatDiagnostics(d,o);this.chatContainer.addChild(new g(`${r.fg("warning","[Skill conflicts]")}
15
+ ${C}`,0,0)),this.chatContainer.addChild(new u(1))}const m=h.diagnostics;if(m.length>0){const C=this.formatDiagnostics(m,o);this.chatContainer.addChild(new g(`${r.fg("warning","[Prompt conflicts]")}
16
+ ${C}`,0,0)),this.chatContainer.addChild(new u(1))}const f=[],M=this.session.resourceLoader.getExtensions().errors;if(M.length>0)for(const C of M)f.push({type:"error",message:C.error,path:C.path});const w=this.session.extensionRunner?.getCommandDiagnostics()??[];f.push(...w);const E=this.session.extensionRunner?.getShortcutDiagnostics()??[];if(f.push(...E),f.length>0){const C=this.formatDiagnostics(f,o);this.chatContainer.addChild(new g(`${r.fg("warning","[Extension issues]")}
17
+ ${C}`,0,0)),this.chatContainer.addChild(new u(1))}const S=c.diagnostics;if(S.length>0){const C=this.formatDiagnostics(S,o);this.chatContainer.addChild(new g(`${r.fg("warning","[Theme conflicts]")}
18
+ ${C}`,0,0)),this.chatContainer.addChild(new u(1))}}}async initExtensions(){const e=this.createExtensionUIContext();await this.session.bindExtensions({uiContext:e,commandContextActions:{waitForIdle:s(()=>this.session.agent.waitForIdle(),"waitForIdle"),newSession:s(async i=>(this.state.loadingAnimation&&(this.state.loadingAnimation.stop(),this.state.loadingAnimation=void 0),this.statusContainer.clear(),await this.session.newSession(i)?(this.clearStatusTimers(),this.chatContainer.clear(),this.pendingMessagesContainer.clear(),this.state.compactionQueuedMessages=[],this.state.streamingComponent=void 0,this.state.streamingMessage=void 0,this.state.pendingTools.clear(),this.imagePipeline.clearAttachments(),this.renderInitialMessages(),{cancelled:!1}):{cancelled:!0}),"newSession"),fork:s(async i=>{const o=await this.session.fork(i);return o.cancelled?{cancelled:!0}:(this.clearStatusTimers(),this.chatContainer.clear(),this.imagePipeline.clearAttachments(),this.addSessionNavigationBanner("Forked session"),this.renderInitialMessages(),this.editor.setText(o.selectedText),this.showStatus("Forked to new session"),{cancelled:!1})},"fork"),navigateTree:s(async(i,o)=>{const t=await this.session.navigateTree(i,{summarize:o?.summarize,customInstructions:o?.customInstructions,replaceInstructions:o?.replaceInstructions,label:o?.label});return t.cancelled?{cancelled:!0}:(this.clearStatusTimers(),this.chatContainer.clear(),this.imagePipeline.clearAttachments(),this.addSessionNavigationBanner("Navigated session tree"),this.renderInitialMessages(),t.editorText&&!this.editor.getText().trim()&&this.editor.setText(t.editorText),this.showStatus("Navigated to selected point"),{cancelled:!1})},"navigateTree"),switchSession:s(async i=>(await this.treeOverlay.resumeSession(i),{cancelled:!1}),"switchSession"),reload:s(async()=>{await this.handleReloadCommand()},"reload")},shutdownHandler:s(()=>{this.shutdownRequested=!0,this.session.isStreaming||this.shutdown()},"shutdownHandler"),onError:s(i=>{this.showExtensionError(i.extensionPath,i.error,i.stack)},"onError")}),ue(this.session.resourceLoader.getThemes().themes),this.setupAutocomplete(this.fdPath);const n=this.session.extensionRunner;if(!n){this.showLoadedResources({extensionPaths:[],force:!1});return}this.setupExtensionShortcuts(n),this.showLoadedResources({extensionPaths:n.getExtensionPaths(),force:!1})}getRegisteredToolDefinition(e){return(this.session.extensionRunner?.getAllRegisteredTools()??[]).find(o=>o.definition.name===e)?.definition}setupExtensionShortcuts(e){const n=e.getShortcuts(this.keybindings.getEffectiveConfig());n.size!==0&&(this.defaultEditor.onExtensionShortcut=i=>{for(const[o,t]of n)if(Oe(i,o))return Promise.resolve(t.handler(e.createContext())).catch(a=>{this.showError(`Shortcut handler error: ${a instanceof Error?a.message:String(a)}`)}),!0;return!1})}formatElapsedSeconds(e){return`${(Math.max(0,e)/1e3).toFixed(1)}s`}getNextCatMessage(){const e=Date.now();return e-this.catMessageLastSwitch>=3e3&&(this.catMessageIndex++,this.catMessageLastSwitch=e),this.catWorkingMessages[this.catMessageIndex%this.catWorkingMessages.length]}buildWorkingMessage(){const e=this.state.workingMessageOverride||this.getNextCatMessage(),n=`${L(this.keybindings,"interrupt")} to interrupt`,i=this.state.agentRunStartMs!==void 0?this.formatElapsedSeconds(Date.now()-this.state.agentRunStartMs):void 0,o=i?`(${i}, ${n})`:`(${n})`;return{base:e,suffix:o}}updateWorkingMessage(e){if(!this.state.loadingAnimation)return;const{base:n,suffix:i}=this.buildWorkingMessage();this.state.loadingAnimation.setMessage(n,{...e,suffix:i})}stopAgentRunTimer(){this.state.agentRunTimer&&(clearInterval(this.state.agentRunTimer),this.state.agentRunTimer=void 0)}stopWelcomeBannerTimer(){this.state.welcomeBannerTimer&&(clearInterval(this.state.welcomeBannerTimer),this.state.welcomeBannerTimer=void 0)}startAgentRunTimer(){this.stopAgentRunTimer(),this.state.agentRunStartMs=Date.now(),this.state.agentRunTimer=setInterval(()=>{if(!this.state.loadingAnimation||this.state.agentRunStartMs===void 0){this.stopAgentRunTimer();return}this.updateWorkingMessage({resetStallTimer:!1})},100)}resetExtensionUI(){this.promptHost.dismiss(),this.ui.hideOverlay(),this.clearExtensionTerminalInputListeners(),this.surfaces.setFooter(void 0),this.surfaces.setHeader(void 0),this.surfaces.clearWidgets(),this.footerDataProvider.clearExtensionStatuses(),this.footer.invalidate(),this.editorAdapter.setComponent(void 0),this.defaultEditor.onExtensionShortcut=void 0,this.updateTerminalTitle(),this.state.loadingAnimation&&(this.state.workingMessageOverride=void 0,this.updateWorkingMessage())}clearBuddyPetResetTimer(){this.buddyPetResetTimer&&(clearTimeout(this.buddyPetResetTimer),this.buddyPetResetTimer=void 0)}syncBuddyPet(){const e=this.settingsManager.getBuddyEnabled(),n=this.settingsManager.getBuddySpecies();if(!e){this.clearBuddyPetResetTimer(),this.buddyPet?.dispose(),this.buddyPet=null,this.buddyPetSpecies=null,this.buddySlot.clear(),this.surfaces.renderWidgets();return}(!this.buddyPet||this.buddyPetSpecies!==n)&&(this.clearBuddyPetResetTimer(),this.buddyPet?.dispose(),this.buddyPet=new yt(this.ui,n),this.buddyPetSpecies=n,this.buddyPet.setState("idle"),this.buddyPet.setSpeechBubble("")),this.buddySlot.clear(),this.buddySlot.addChild(this.buddyPet),this.surfaces.renderWidgets()}remountEditorShell(){this.editorContainer.clear(),this.imagePipeline.hasAttachments()&&this.attachmentsContainer&&this.editorContainer.addChild(this.attachmentsContainer),this.editorContainer.addChild(this.editorBuddyLayout)}setBuddyPetState(e,n="",i){this.buddyPet&&(this.clearBuddyPetResetTimer(),this.buddyPet.setState(e),this.buddyPet.setSpeechBubble(n),i?.resetTo&&(this.buddyPetResetTimer=setTimeout(()=>{this.buddyPet&&(this.buddyPet.setState(i.resetTo??"idle"),this.buddyPet.setSpeechBubble(""),this.buddyPetResetTimer=void 0,this.ui.requestRender())},i.afterMs??1500)),this.ui.requestRender())}addExtensionTerminalInputListener(e){const n=this.ui.addInputListener(e);return this.extensionTerminalInputUnsubscribers.add(n),()=>{n(),this.extensionTerminalInputUnsubscribers.delete(n)}}clearExtensionTerminalInputListeners(){for(const e of this.extensionTerminalInputUnsubscribers)e();this.extensionTerminalInputUnsubscribers.clear()}createExtensionUIContext(){return{select:s((e,n,i)=>this.promptHost.selector(e,n,i),"select"),confirm:s((e,n,i)=>this.promptHost.confirm(e,n,i),"confirm"),input:s((e,n,i)=>this.promptHost.input(e,n,i),"input"),notify:s((e,n)=>this.showExtensionNotify(e,n),"notify"),onTerminalInput:s(e=>this.addExtensionTerminalInputListener(e),"onTerminalInput"),setStatus:s((e,n)=>this.surfaces.setStatus(e,n),"setStatus"),setWorkingMessage:s(e=>{this.state.workingMessageOverride=e||void 0,this.state.loadingAnimation?this.updateWorkingMessage():this.state.pendingWorkingMessage=e},"setWorkingMessage"),setWidget:s((e,n,i)=>this.surfaces.setWidget(e,n,i),"setWidget"),setFooter:s(e=>this.surfaces.setFooter(e),"setFooter"),setHeader:s(e=>this.surfaces.setHeader(e),"setHeader"),setTitle:s(e=>this.ui.terminal.setTitle(e),"setTitle"),custom:s((e,n)=>this.customOverlay.show(e,n),"custom"),pasteToEditor:s(e=>this.editor.handleInput(`\x1B[200~${e}\x1B[201~`),"pasteToEditor"),setEditorText:s(e=>this.editor.setText(e),"setEditorText"),getEditorText:s(()=>this.editor.getText(),"getEditorText"),editor:s((e,n)=>this.promptHost.editor(e,n),"editor"),openExternalEditor:s(e=>this.openExistingFileInExternalEditor(e),"openExternalEditor"),setEditorComponent:s(e=>this.editorAdapter.setComponent(e),"setEditorComponent"),get theme(){return r},getAllThemes:s(()=>Ot(),"getAllThemes"),getTheme:s(e=>Ft(e),"getTheme"),setTheme:s(e=>{if(typeof e!="string")return Kt(e),this.ui.requestRender(),{success:!0};const n=Ae(e,!0);return n.success&&(this.settingsManager.getTheme()!==e&&this.settingsManager.setTheme(e),this.ui.requestRender()),n},"setTheme"),getToolsExpanded:s(()=>this.state.toolOutputExpanded,"getToolsExpanded"),setToolsExpanded:s(e=>this.setToolsExpanded(e),"setToolsExpanded")}}showExtensionNotify(e,n){n==="error"?this.showError(e):n==="warning"?this.showWarning(e):this.showStatus(e)}shouldRenderToolTrace(e){return e.startsWith("nanomem_")?this.settingsManager.getShowMemoryTrace():this.settingsManager.getShowWorkingTrace()}showExtensionError(e,n,i){const o=`Extension "${e}" error: ${n}`,t=new g(r.fg("error",o),1,0);if(this.chatContainer.addChild(t),i){const a=i.split(`
19
+ `).slice(1).map(h=>r.fg("dim",` ${h.trim()}`)).join(`
20
+ `);a&&this.chatContainer.addChild(new g(a,1,0))}this.ui.requestRender()}setupKeyHandlers(){this.defaultEditor.onEscape=()=>this.interrupt.dispatchEscape(),this.defaultEditor.onAction("clear",()=>this.interrupt.handleCtrlC()),this.defaultEditor.onAction("showResources",()=>this.handleShowResourcesCommand()),this.defaultEditor.onCtrlD=()=>this.interrupt.handleCtrlD(),this.defaultEditor.onAction("suspend",()=>this.interrupt.handleCtrlZ()),this.defaultEditor.onAction("cycleThinkingLevel",()=>this.modelOverlay.cycleThinkingLevel()),this.defaultEditor.onAction("cycleModelForward",()=>this.modelOverlay.cycleModel("forward")),this.defaultEditor.onAction("cycleModelBackward",()=>this.modelOverlay.cycleModel("backward")),this.ui.onDebug=()=>this.handleRenderDebugCommand(),this.defaultEditor.onAction("selectModel",()=>this.modelOverlay.showProviderThenModelSelector()),this.defaultEditor.onAction("selectProviderThenModel",()=>this.modelOverlay.showProviderThenModelSelector()),this.defaultEditor.onAction("expandTools",()=>this.toggleToolOutputExpansion()),this.defaultEditor.onAction("toggleThinking",()=>this.toggleThinkingBlockVisibility()),this.defaultEditor.onAction("externalEditor",()=>this.openExternalEditor()),this.defaultEditor.onAction("followUp",()=>this.handleFollowUp()),this.defaultEditor.onAction("dequeue",()=>this.handleDequeue()),this.defaultEditor.onAction("newSession",()=>this.handleClearCommand()),this.defaultEditor.onAction("tree",()=>this.treeOverlay.showTreeSelector()),this.defaultEditor.onAction("fork",()=>this.treeOverlay.showForkSelector()),this.defaultEditor.onAction("resume",()=>this.treeOverlay.showSessionSelector()),this.defaultEditor.onChange=e=>{const n=this.isBashMode;this.isBashMode=e.trimStart().startsWith("!"),n!==this.isBashMode&&this.updateEditorBorderColor()},this.defaultEditor.onPasteImage=()=>{this.imagePipeline.handleClipboardImagePaste()},this.defaultEditor.onAttachmentKey=e=>this.imagePipeline.handleAttachmentKeyNavigation(e)}setupEditorSubmitHandler(){this.defaultEditor.onSubmit=async e=>{await this.inputSubmit.handleSubmit(e)}}subscribeToAgent(){this.unsubscribe=this.session.subscribe(async e=>{await this.handleEvent(e)})}addSessionNavigationBanner(e){const n=this.sessionManager.getSessionName(),i=this.sessionManager.getSessionId(),o=n?` "${n}"`:"",t=r.fg("dim",`\u21AA ${e} \u2192 session${o} (${i})`);this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(t,1,1)),this.chatContainer.addChild(new u(1))}async handleEvent(e){if(ee(`handleEvent: ${e.type}`),e.type==="sdk:mcp_ready"){e.toolCount>0&&this.showStatus(`MCP: ${e.toolCount} tool(s) ready`);return}await this.streamRender.handle(e)}getUserMessageText(e){return e.role!=="user"?"":(typeof e.content=="string"?[{type:"text",text:e.content}]:e.content.filter(i=>i.type==="text")).map(i=>i.text).join("")}showStatus(e){const n=this.chatContainer.children,i=n.length>0?n[n.length-1]:void 0,o=n.length>1?n[n.length-2]:void 0;if(i&&o&&i===this.state.lastStatusText&&o===this.state.lastStatusSpacer){this.state.lastStatusText.setText(r.fg("dim",e)),this.scheduleStatusDismiss(this.state.lastStatusSpacer,this.state.lastStatusText),this.ui.requestRender();return}const t=new u(1),a=new g(r.fg("dim",e),1,0);this.chatContainer.addChild(t),this.chatContainer.addChild(a),this.state.lastStatusSpacer=t,this.state.lastStatusText=a,this.scheduleStatusDismiss(t,a),this.ui.requestRender()}addMessageToChat(e,n){switch(e.role){case"bashExecution":{const i=new ce(e.command,this.ui,e.excludeFromContext);e.output&&i.appendOutput(e.output),i.setComplete(e.exitCode,e.cancelled,e.truncated?{truncated:!0}:void 0,e.fullOutputPath),this.chatContainer.addChild(i);break}case"custom":{if(e.display){const i=typeof e.details=="object"&&e.details!==null?e.details:void 0;if(i?.replace&&i.streamKey){const a=this.state.customStreamComponents.get(i.streamKey);if(a){a.updateMessage(e),this.ui.requestRender();break}}const o=this.session.extensionRunner?.getMessageRenderer(e.customType),t=new kt(e,o,this.getMarkdownThemeWithSettings());t.setExpanded(this.state.toolOutputExpanded),this.chatContainer.addChild(t),i?.streamKey&&this.state.customStreamComponents.set(i.streamKey,t)}break}case"compactionSummary":{this.chatContainer.addChild(new u(1));const i=new xt(e,this.getMarkdownThemeWithSettings());i.setExpanded(this.state.toolOutputExpanded),this.chatContainer.addChild(i);break}case"branchSummary":{this.chatContainer.addChild(new u(1));const i=new bt(e,this.getMarkdownThemeWithSettings());i.setExpanded(this.state.toolOutputExpanded),this.chatContainer.addChild(i);break}case"user":{const i=this.getUserMessageText(e);if(i){const o=_e(i);if(o){this.chatContainer.addChild(new u(1));const t=new Bt(o,this.getMarkdownThemeWithSettings());if(t.setExpanded(this.state.toolOutputExpanded),this.chatContainer.addChild(t),o.userMessage){const a=new $e(o.userMessage,this.getMarkdownThemeWithSettings());this.chatContainer.addChild(a)}}else{const t=new $e(i,this.getMarkdownThemeWithSettings());this.chatContainer.addChild(t)}n?.populateHistory&&this.editor.addToHistory?.(i)}break}case"assistant":{const i=new xe(e,this.state.hideThinkingBlock,this.getMarkdownThemeWithSettings());this.chatContainer.addChild(i);break}case"toolResult":break;default:{const i=e}}}renderSessionContext(e,n={}){this.state.pendingTools.clear(),this.state.customStreamComponents.clear(),n.updateFooter&&(this.footer.invalidate(),this.updateEditorBorderColor());for(const i of e.messages)if(i.role==="assistant"){this.addMessageToChat(i);for(const o of i.content)if(o.type==="toolCall"){const t=new ke(o.name,o.arguments,{showImages:this.settingsManager.getShowImages()},this.getRegisteredToolDefinition(o.name),this.ui);if(t.setExpanded(this.state.toolOutputExpanded),this.chatContainer.addChild(t),i.stopReason==="aborted"||i.stopReason==="error"){let a;if(i.stopReason==="aborted"){const h=this.session.retryAttempt;a=h>0?`Aborted after ${h} retry attempt${h>1?"s":""}`:"Operation aborted"}else a=i.errorMessage||"Error";t.updateResult({content:[{type:"text",text:a}],isError:!0})}else this.state.pendingTools.set(o.id,t)}}else if(i.role==="toolResult"){const o=this.state.pendingTools.get(i.toolCallId);o&&(o.updateResult(i),this.state.pendingTools.delete(i.toolCallId))}else this.addMessageToChat(i,n);this.state.pendingTools.clear(),this.ui.requestRender()}renderInitialMessages(){this.stopWelcomeBannerTimer();const e=this.sessionManager.buildSessionContext();if(this.renderSessionContext(e,{updateFooter:!0,populateHistory:!0}),e.messages.length===0){if(this.chatContainer.addChild(new u(1)),O==="catui"||O==="catui"){const o=this.session.cwd,t=this.session.model,a=t?.name??(t?.provider?`${t.provider}`:"DashScope \xB7 Ollama"),h=s(l=>{const $=[" __..--''``\\--....___ _..,_",""," //// _.-' .-/\"; ` ``<._ ``-+'~=. ////",""," ///_.-' _..--.' \\ `(^) ) //",""," // ((..-' // (< - ;_..__ ; `' //",""," ////////////// `-._,_)'//////``--...____..-' /////"," //////////////////////////////////////////////////","",l%8===5?"///CATU I///////////////////////////////////////////":"///CATUI////////////////////////////////////////////","","---------------------------------------------------"],A=Math.max(...$.map(R=>R.length));return $.map(R=>R.padEnd(A))},"buildAsciiLines"),c=s(l=>h(l).map(T=>r.fg("accent",T.slice(0,Math.max(1,this.ui.terminal.columns||80)))).join(`
21
+ `),"renderAscii"),d=r.bold(r.fg("accent",`catui-agent v${this.version}`)),m=r.fg("dim",a),f=r.fg("dim",o),M=r.fg("dim"," /model to switch model"),w=this.getAppKeyDisplay("showResources"),E=this.settingsManager.getQuietStartup()?r.fg("dim",` ${w} to show context/skills/extensions`):"",S=r.fg("borderMuted","\u2500".repeat(Math.max(40,this.ui.terminal.columns||80))),C=r.fg("accent",'\u276F Try "refactor <filepath>" or type below'),p=[c(0),"",` ${d}`,` ${m}`,` ${f}`,"",M,...E?["",E]:[],"",S,C].join(`
22
+ `),y=new g(p,0,0);this.chatContainer.addChild(y);let b=0;this.state.welcomeBannerTimer=setInterval(()=>{b+=1,y.setText([c(b),"",` ${d}`,` ${m}`,` ${f}`,"",M,...E?["",E]:[],"",S,C].join(`
23
+ `)),this.ui.requestRender(),b>=16&&this.stopWelcomeBannerTimer()},220)}else{const t=[" \u270E"," +---------------+",` | ${O.padEnd(14).slice(0,14)} |`," +---------------+"].join(`
24
+ `),a=` ${r.fg("dim","AI coding agent. Type below to start.")}`;this.chatContainer.addChild(new g(`${r.fg("accent",t)}
25
+ ${a}`,0,0))}this.chatContainer.addChild(new u(1))}const i=this.sessionManager.getEntries().filter(o=>o.type==="compaction").length;if(i>0){const o=i===1?"1 time":`${i} times`;this.showStatus(`Session compacted ${o}`)}this.ui.requestRender(!0)}async getUserInput(){return new Promise(e=>{this.onInputCallback=n=>{this.onInputCallback=void 0,e(n)}})}rebuildChatFromMessages(){this.clearStatusTimers(),this.chatContainer.clear();const e=this.sessionManager.buildSessionContext();this.renderSessionContext(e);for(const n of this.state.optimisticUserMessages)this.addMessageToChat({role:"user",content:[{type:"text",text:n.text}],timestamp:Date.now()});this.ui.requestRender(!0)}isShuttingDown=!1;async shutdown(){if(this.isShuttingDown)return;this.isShuttingDown=!0;const e=this.session.extensionRunner;e?.hasHandlers("session_shutdown")&&await Promise.race([e.emit({type:"session_shutdown"}),new Promise(t=>setTimeout(t,5e3))]),this.imagePipeline.cleanupClipboardImages(),await new Promise(o=>process.nextTick(o)),await this.ui.terminal.drainInput(1e3),this.stop();const n=this.sessionManager.getSessionId(),i=this.session.cwd;console.log(`
26
+ Resume this session with: catui --session ${n} --cwd "${i}"`),process.exit(0)}async checkShutdownRequested(){this.shutdownRequested&&await this.shutdown()}suspend(){process.once("SIGCONT",()=>{this.ui.start(),this.ui.requestRender(!0)}),this.ui.stop(),process.kill(0,"SIGTSTP")}async handleFollowUp(){const e=(this.editor.getExpandedText?.()??this.editor.getText()).trim();if(e){if(this.session.isCompacting){this.isExtensionCommand(e)?(this.editor.addToHistory?.(e),this.editor.setText(""),await this.promptAfterRender(e)):this.queueCompactionMessage(e,"followUp");return}this.session.isStreaming?(this.editor.addToHistory?.(e),this.editor.setText(""),await this.promptAfterRender(e,{streamingBehavior:"followUp"}),this.updatePendingMessagesDisplay(),this.ui.requestRender()):this.editor.onSubmit&&this.editor.onSubmit(e)}}handleDequeue(){const e=this.restoreQueuedMessagesToEditor();e===0?this.showStatus("No queued messages to restore"):this.showStatus(`Restored ${e} queued message${e>1?"s":""} to editor`)}async promptAfterRender(e,n){const i=this.ui;typeof i.awaitRender=="function"?await i.awaitRender():await new Promise(o=>process.nextTick(o)),await this.session.prompt(e,n)}updateEditorBorderColor(){if(this.isBashMode)this.editor.borderColor=r.getBashModeBorderColor();else{const e=this.session.thinkingLevel||"off";this.editor.borderColor=r.getThinkingBorderColor(e)}this.ui.requestRender()}handleAgentLoopCommand(e){const n=e.slice(11).trim().toLowerCase(),i=["standard","weak-model-compatible"],o=n==="high-intelligence"?"standard":n==="low-intelligence"||n==="structured-adaptive"?"weak-model-compatible":n;if(!n){this.showStatus(`Agent loop: ${this.session.agentLoopFramework} (available: ${i.join(", ")})`);return}if(!i.includes(o)){this.showError(`Unknown agent loop framework: ${n}
27
+ Available: ${i.join(", ")}`);return}this.session.setAgentLoopFramework(o),this.footer.invalidate(),this.showStatus(`Agent loop framework: ${this.session.agentLoopFramework}`)}toggleToolOutputExpansion(){this.setToolsExpanded(!this.state.toolOutputExpanded)}setToolsExpanded(e){this.state.toolOutputExpanded=e;for(const n of this.chatContainer.children)Yt(n)&&n.setExpanded(e);this.ui.requestRender()}toggleThinkingBlockVisibility(){this.state.hideThinkingBlock=!this.state.hideThinkingBlock,this.settingsManager.setHideThinkingBlock(this.state.hideThinkingBlock),this.chatContainer.clear(),this.rebuildChatFromMessages(),this.state.streamingComponent&&this.state.streamingMessage&&(this.state.streamingComponent.setHideThinkingBlock(this.state.hideThinkingBlock),this.state.streamingComponent.updateContent(this.state.streamingMessage),this.chatContainer.addChild(this.state.streamingComponent)),this.showStatus(`Thinking blocks: ${this.state.hideThinkingBlock?"hidden":"visible"}`)}openExternalEditor(){const e=process.env.VISUAL||process.env.EDITOR;if(!e){this.showWarning("No editor configured. Set $VISUAL or $EDITOR environment variable.");return}const n=this.editor.getExpandedText?.()??this.editor.getText(),i=D.join(J.tmpdir(),`catui-editor-${Date.now()}.catui.md`);try{P.writeFileSync(i,n,"utf-8"),this.ui.stop();const[o,...t]=e.split(" ");if(re(o,[...t,i],{stdio:"inherit"}).status===0){const h=P.readFileSync(i,"utf-8").replace(/\n$/,"");this.editor.setText(h)}}finally{try{P.unlinkSync(i)}catch{}this.ui.start(),this.ui.requestRender(!0)}}async openExistingFileInExternalEditor(e){const n=process.env.VISUAL||process.env.EDITOR;if(!n)return this.showWarning("No editor configured. Set $VISUAL or $EDITOR environment variable."),!1;try{this.ui.stop();const[i,...o]=n.split(" ");return re(i,[...o,e],{stdio:"inherit"}).status===0}finally{this.ui.start(),this.ui.requestRender(!0)}}clearEditor(){this.editor.setText(""),this.ui.requestRender()}showError(e){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("error",`Error: ${e}`),1,0)),this.setBuddyPetState("error","Oops...",{resetTo:"idle",afterMs:2200}),this.ui.requestRender()}showWarning(e){const n=new u(1),i=new g(r.fg("warning",`Warning: ${e}`),1,0);this.chatContainer.addChild(n),this.chatContainer.addChild(i),this.scheduleStatusDismiss(n,i),this.setBuddyPetState("error","Careful.",{resetTo:"idle",afterMs:1800}),this.ui.requestRender()}scheduleStatusDismiss(e,n){const i=setTimeout(()=>{this.statusTimers.delete(i),this.chatContainer.removeChild(e),this.chatContainer.removeChild(n),this.state.lastStatusText===n&&(this.state.lastStatusText=void 0,this.state.lastStatusSpacer=void 0),this.ui.requestRender()},5e3);this.statusTimers.add(i)}clearStatusTimers(){for(const e of this.statusTimers)clearTimeout(e);this.statusTimers.clear(),this.notificationQueue.clearAll()}notify(e,n){this.notificationQueue.notify(e,n)}getAllQueuedMessages(){return{steering:[...this.session.getSteeringMessages(),...this.state.compactionQueuedMessages.filter(e=>e.mode==="steer").map(e=>e.text)],followUp:[...this.session.getFollowUpMessages(),...this.state.compactionQueuedMessages.filter(e=>e.mode==="followUp").map(e=>e.text)]}}clearAllQueues(){const{steering:e,followUp:n}=this.session.clearQueue(),i=this.state.compactionQueuedMessages.filter(t=>t.mode==="steer").map(t=>t.text),o=this.state.compactionQueuedMessages.filter(t=>t.mode==="followUp").map(t=>t.text);return this.state.compactionQueuedMessages=[],{steering:[...e,...i],followUp:[...n,...o]}}updatePendingMessagesDisplay(){this.pendingMessagesContainer.clear();const{steering:e,followUp:n}=this.getAllQueuedMessages();if(e.length>0||n.length>0){this.pendingMessagesContainer.addChild(new u(1));for(const t of e){const a=r.fg("dim",`Steering: ${t}`);this.pendingMessagesContainer.addChild(new ae(a,1,0))}for(const t of n){const a=r.fg("dim",`Follow-up: ${t}`);this.pendingMessagesContainer.addChild(new ae(a,1,0))}const i=this.getAppKeyDisplay("dequeue"),o=r.fg("dim",`\u21B3 ${i} to edit all queued messages`);this.pendingMessagesContainer.addChild(new ae(o,1,0))}}restoreQueuedMessagesToEditor(e){const{steering:n,followUp:i}=this.clearAllQueues(),o=[...n,...i];if(o.length===0)return this.updatePendingMessagesDisplay(),e?.abort&&this.agent.abort(),0;const t=o.join(`
28
+
29
+ `),a=e?.currentText??this.editor.getText(),h=[t,a].filter(c=>c.trim()).join(`
30
+
31
+ `);return this.editor.setText(h),this.updatePendingMessagesDisplay(),e?.abort&&this.agent.abort(),o.length}queueCompactionMessage(e,n){this.state.compactionQueuedMessages.push({text:e,mode:n}),this.editor.addToHistory?.(e),this.editor.setText(""),this.updatePendingMessagesDisplay(),this.showStatus("Queued message for after compaction")}isExtensionCommand(e){if(!e.startsWith("/"))return!1;const n=this.session.extensionRunner;if(!n)return!1;const i=e.indexOf(" "),o=i===-1?e.slice(1):e.slice(1,i);return!!n.getCommand(o)}async flushCompactionQueue(e){if(this.state.compactionQueuedMessages.length===0)return;const n=[...this.state.compactionQueuedMessages];this.state.compactionQueuedMessages=[],this.updatePendingMessagesDisplay();const i=s(o=>{this.session.clearQueue(),this.state.compactionQueuedMessages=n,this.updatePendingMessagesDisplay(),this.showError(`Failed to send queued message${n.length>1?"s":""}: ${o instanceof Error?o.message:String(o)}`)},"restoreQueue");try{if(e?.willRetry){for(const d of n)this.isExtensionCommand(d.text)?await this.promptAfterRender(d.text):d.mode==="followUp"?await this.session.followUp(d.text):await this.session.steer(d.text);this.updatePendingMessagesDisplay();return}const o=n.findIndex(d=>!this.isExtensionCommand(d.text));if(o===-1){for(const d of n)await this.promptAfterRender(d.text);return}const t=n.slice(0,o),a=n[o],h=n.slice(o+1);for(const d of t)await this.promptAfterRender(d.text);const c=this.promptAfterRender(a.text).catch(d=>{i(d)});for(const d of h)this.isExtensionCommand(d.text)?await this.promptAfterRender(d.text):d.mode==="followUp"?await this.session.followUp(d.text):await this.session.steer(d.text);this.updatePendingMessagesDisplay()}catch(o){i(o)}}flushPendingBashComponents(){for(const e of this.pendingBashComponents)this.pendingMessagesContainer.removeChild(e),this.chatContainer.addChild(e);this.pendingBashComponents=[]}showSelector(e){const n=s(()=>{this.remountEditorShell(),this.ui.setFocus(this.editor)},"done"),{component:i,focus:o}=e(n);this.editorContainer.clear(),this.editorContainer.addChild(i),this.ui.setFocus(o),this.ui.requestRender()}async handleReloadCommand(){if(this.session.isStreaming){this.showWarning("Wait for the current response to finish before reloading.");return}if(this.session.isCompacting){this.showWarning("Wait for compaction to finish before reloading.");return}this.resetExtensionUI();const e=new Pe(this.ui,r,"Reloading extensions, skills, prompts, themes...",{cancellable:!1}),n=this.editor;this.editorContainer.clear(),this.editorContainer.addChild(e),this.ui.setFocus(e),this.ui.requestRender();const i=s(o=>{e.dispose(),this.remountEditorShell(),this.ui.setFocus(this.editor),this.ui.requestRender()},"dismissLoader");try{await this.session.reload(),ue(this.session.resourceLoader.getThemes().themes),this.state.hideThinkingBlock=this.settingsManager.getHideThinkingBlock();const o=this.settingsManager.getTheme(),t=o?Ae(o,!0):{success:!0};t.success||this.showError(`Failed to load theme "${o}": ${t.error}
32
+ Fell back to dark theme.`);const a=this.settingsManager.getEditorPaddingX(),h=this.settingsManager.getAutocompleteMaxVisible();this.defaultEditor.setPaddingX(a),this.defaultEditor.setAutocompleteMaxVisible(h),this.editor!==this.defaultEditor&&(this.editor.setPaddingX?.(a),this.editor.setAutocompleteMaxVisible?.(h)),this.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor()),this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink()),this.setupAutocomplete(this.fdPath);const c=this.session.extensionRunner;c&&this.setupExtensionShortcuts(c),this.rebuildChatFromMessages(),i(this.editor),this.showLoadedResources({extensionPaths:c?.getExtensionPaths()??[],force:!1,showDiagnosticsWhenQuiet:!0});const d=this.session.modelRegistry.getError();d&&this.showError(`models.json error: ${d}`),this.showStatus("Reloaded extensions, skills, prompts, themes")}catch(o){i(n),this.showError(`Reload failed: ${o instanceof Error?o.message:String(o)}`)}}async handleExportCommand(e){const n=e.split(/\s+/),i=n.length>1?n[1]:void 0;try{const o=await this.session.exportToHtml(i);this.showStatus(`Session exported to: ${o}`)}catch(o){this.showError(`Failed to export session: ${o instanceof Error?o.message:"Unknown error"}`)}}async handleShareCommand(){try{if(re("gh",["auth","status"],{encoding:"utf-8"}).status!==0){this.showError("GitHub CLI is not logged in. Run 'gh auth login' first.");return}}catch{this.showError("GitHub CLI (gh) is not installed. Install it from https://cli.github.com/");return}const e=D.join(J.tmpdir(),"session.html");try{await this.session.exportToHtml(e)}catch(t){this.showError(`Failed to export session: ${t instanceof Error?t.message:"Unknown error"}`);return}const n=new Pe(this.ui,r,"Creating gist...");this.editorContainer.clear(),this.editorContainer.addChild(n),this.ui.setFocus(n),this.ui.requestRender();const i=s(()=>{n.dispose(),this.remountEditorShell(),this.ui.setFocus(this.editor);try{P.unlinkSync(e)}catch{}},"restoreEditor");let o=null;n.onAbort=()=>{o?.kill(),i(),this.showStatus("Share cancelled")};try{const t=await new Promise(d=>{o=Fe("gh",["gist","create","--public=false",e]);let m="",f="";o.stdout?.on("data",M=>{m+=M.toString()}),o.stderr?.on("data",M=>{f+=M.toString()}),o.on("close",M=>d({stdout:m,stderr:f,code:M}))});if(n.signal.aborted)return;if(i(),t.code!==0){const d=t.stderr?.trim()||"Unknown error";this.showError(`Failed to create gist: ${d}`);return}const a=t.stdout?.trim(),h=a?.split("/").pop();if(!h){this.showError("Failed to parse gist ID from gh output");return}const c=Ne(h);this.showStatus(`Share URL: ${c}
33
+ Gist: ${a}`)}catch(t){n.signal.aborted||(i(),this.showError(`Failed to create gist: ${t instanceof Error?t.message:"Unknown error"}`))}}handleCopyCommand(){const e=this.session.getLastAssistantText();if(!e){this.showError("No agent messages to copy yet.");return}try{tt(e),this.showStatus("Copied last agent message to clipboard")}catch(n){this.showError(n instanceof Error?n.message:String(n))}}async handleStatusCommand(){const e=this.session.state,n=this.sessionManager,i=s((x,F)=>{const ge=F-2,Ie=pe(x),De=Math.max(0,ge-Ie);return x+" ".repeat(De)},"padLine"),o=[],t=Math.min(this.ui.terminal.columns||80,73),a=` >_ Catui (v${this.version}) `,h=Math.max(0,t-a.length-1);o.push(r.fg("border",`\u256D${"\u2500".repeat(Math.max(1,t-2))}\u256E`)),o.push(r.fg("border","\u2502")+r.bold(a)+" ".repeat(h)+r.fg("border","\u2502")),o.push(r.fg("border","\u2502")+" ".repeat(Math.max(1,t-2))+r.fg("border","\u2502"));const c=e.model?.id||"no-model",d=e.thinkingLevel||"off",m=e.model?.reasoning?`reasoning ${d}`:"",f=` Model: ${c}${m?` (${m})`:""}`;o.push(r.fg("border","\u2502")+i(f,t)+r.fg("border","\u2502"));const M=` Agent loop: ${this.session.agentLoopFramework}`;o.push(r.fg("border","\u2502")+i(M,t)+r.fg("border","\u2502"));for(const x of Jt(e.lastResult))o.push(r.fg("border","\u2502")+i(` ${x}`,t)+r.fg("border","\u2502"));let w=this.session.cwd;const E=process.env.HOME||process.env.USERPROFILE;E&&w.startsWith(E)&&(w=`~${w.slice(E.length)}`);const S=this.footerDataProvider.getGitBranch(),C=` Directory: ${w}${S?` (${S})`:""}`;o.push(r.fg("border","\u2502")+i(C,t)+r.fg("border","\u2502"));const p=D.join(this.session.cwd,"AGENTS.md"),b=` AGENTS.md: ${P.existsSync(p)?"AGENTS.md":"not found"}`;o.push(r.fg("border","\u2502")+i(b,t)+r.fg("border","\u2502"));const l=n.getSessionId(),$=` Session: ${n.getSessionName()||l.slice(0,8)}...`;o.push(r.fg("border","\u2502")+i($,t)+r.fg("border","\u2502"));const A=this.session.modelRegistry.authStorage,R=A.list();let K="Not logged in";R.length>0&&(K=R.map(F=>A.get(F)?.type==="oauth"?`${F} (OAuth)`:`${F} (API key)`).join(", "));const te=` Account: ${K}`;o.push(r.fg("border","\u2502")+i(te,t)+r.fg("border","\u2502")),o.push(r.fg("border","\u2502")+" ".repeat(Math.max(1,t-2))+r.fg("border","\u2502"));let _=0,j=0,Q=0,G=0;for(const x of n.getBranch())x.type==="message"&&x.message.role==="assistant"&&(_+=x.message.usage.input,j+=x.message.usage.output,Q+=x.message.usage.cost.total,G++);const B=s(x=>x.toLocaleString(),"fmt"),se=s(x=>`$${x.toFixed(4)}`,"fmtCost");o.push(r.fg("border","\u2502")+r.bold(r.fg("accent"," \u2550\u2550\u2550 Session Usage \u2550\u2550\u2550"))+" ".repeat(Math.max(1,t-23))+r.fg("border","\u2502")),o.push(r.fg("border","\u2502")+" ".repeat(Math.max(1,t-2))+r.fg("border","\u2502"));const W=` Requests: ${G}`;o.push(r.fg("border","\u2502")+i(W,t)+r.fg("border","\u2502"));const V=` Input tokens: ${B(_)}`;o.push(r.fg("border","\u2502")+i(V,t)+r.fg("border","\u2502"));const z=` Output tokens: ${B(j)}`;o.push(r.fg("border","\u2502")+i(z,t)+r.fg("border","\u2502"));const ie=` Cost: ${se(Q)}`;o.push(r.fg("border","\u2502")+i(ie,t)+r.fg("border","\u2502"));const U=this.session.getContextUsage(),ne=U?.contextWindow??e.model?.contextWindow??0,X=U?.percent??0,oe=U?.tokens??0,ve=` Context: ${Rt(X)} ${X.toFixed(1)}% (${B(oe)}/${B(ne)})`;o.push(r.fg("border","\u2502")+i(ve,t)+r.fg("border","\u2502")),o.push(r.fg("border",`\u2570${"\u2500".repeat(Math.max(1,t-2))}\u256F`)),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new Ut(o.join(`
34
+ `))),this.ui.requestRender()}async handleUsageCommand(){const e=new Map;let n=0,i=0,o=0,t=0,a=0,h=0,c=0;for(const C of this.sessionManager.getBranch())if(C.type==="message"&&C.message.role==="assistant"){const p=C.message,y=p.model||"unknown",b=p.usage.totalTokens||p.usage.input+p.usage.output+p.usage.cacheRead+p.usage.cacheWrite;e.has(y)||e.set(y,{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:0,requestCount:0});const l=e.get(y);l.input+=p.usage.input,l.output+=p.usage.output,l.cacheRead+=p.usage.cacheRead,l.cacheWrite+=p.usage.cacheWrite,l.totalTokens+=b,l.cost+=p.usage.cost.total,l.requestCount++,n+=p.usage.input,i+=p.usage.output,o+=p.usage.cacheRead,t+=p.usage.cacheWrite,h+=b,a+=p.usage.cost.total,c++}const d=this.session.getContextUsage(),m=d?.contextWindow??0,f=s(C=>C.toLocaleString(),"fmt"),M=s(C=>`$${C.toFixed(4)}`,"fmtCost"),w=[];if(w.push(r.bold(r.fg("accent","\u2550\u2550\u2550 Token Usage \u2550\u2550\u2550"))),w.push(""),e.size>0)for(const[C,p]of e)w.push(r.fg("accent",`\u250C\u2500 ${C} \u2500`)),w.push(""),w.push(`\u2502 Requests: ${p.requestCount}`),w.push(`\u2502 Input: ${f(p.input)} tokens`),w.push(`\u2502 Output: ${f(p.output)} tokens`),w.push(`\u2502 Cache: ${f(p.cacheRead+p.cacheWrite)} tokens`),w.push(`\u2502 Total: ${f(p.totalTokens)} tokens`),w.push(`\u2502 Cost: ${M(p.cost)}`),w.push(r.fg("accent",`\u2514${"\u2500".repeat(Math.min(50,C.length+4))}`)),w.push("");w.push(r.bold(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Total \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")),w.push(` Requests: ${c}`),w.push(` Input: ${f(n)} tokens`),w.push(` Output: ${f(i)} tokens`),w.push(` Cache: ${f(o+t)} tokens`),w.push(` Total: ${f(h)} tokens`),w.push(` Cost: ${M(a)}`),w.push("");const E=d?.percent!=null?`${d.percent.toFixed(1)}%`:"?";w.push(` Context: ${E} / ${f(m)} tokens`);const S=this.session.state;S.model&&w.push(` Current: ${S.model.id}`),w.push(""),w.push(r.fg("dim"," Tip: Use /settings \u2192 Terminal \u2192 Show token stats to toggle footer display"));for(const C of w)this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(C,1,0))}handleNameCommand(e){const n=e.replace(/^\/name\s*/,"").trim();if(!n){const i=this.sessionManager.getSessionName();i?(this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("dim",`Session name: ${i}`),1,0))):this.showWarning("Usage: /name <name>"),this.ui.requestRender();return}this.sessionManager.appendSessionInfo(n),this.updateTerminalTitle(),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("dim",`Session name set: ${n}`),1,0)),this.ui.requestRender()}handleSessionCommand(){const e=this.session.getSessionStats(),n=this.sessionManager.getSessionName();let i=`${r.bold("Session Info")}
35
+
36
+ `;n&&(i+=`${r.fg("dim","Name:")} ${n}
37
+ `),i+=`${r.fg("dim","File:")} ${e.sessionFile??"In-memory"}
38
+ `,i+=`${r.fg("dim","ID:")} ${e.sessionId}
39
+
40
+ `,i+=`${r.bold("Messages")}
41
+ `,i+=`${r.fg("dim","User:")} ${e.userMessages}
42
+ `,i+=`${r.fg("dim","Assistant:")} ${e.assistantMessages}
43
+ `,i+=`${r.fg("dim","Tool Calls:")} ${e.toolCalls}
44
+ `,i+=`${r.fg("dim","Tool Results:")} ${e.toolResults}
45
+ `,i+=`${r.fg("dim","Total:")} ${e.totalMessages}
46
+
47
+ `,i+=`${r.bold("Tokens")}
48
+ `,i+=`${r.fg("dim","Input:")} ${e.tokens.input.toLocaleString()}
49
+ `,i+=`${r.fg("dim","Output:")} ${e.tokens.output.toLocaleString()}
50
+ `,e.tokens.cacheRead>0&&(i+=`${r.fg("dim","Cache Read:")} ${e.tokens.cacheRead.toLocaleString()}
51
+ `),e.tokens.cacheWrite>0&&(i+=`${r.fg("dim","Cache Write:")} ${e.tokens.cacheWrite.toLocaleString()}
52
+ `),i+=`${r.fg("dim","Total:")} ${e.tokens.total.toLocaleString()}
53
+ `,e.cost>0&&(i+=`
54
+ ${r.bold("Cost")}
55
+ `,i+=`${r.fg("dim","Total:")} ${e.cost.toFixed(4)}`),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(i,1,0)),this.ui.requestRender()}handleChangelogCommand(){const e=Ze(),n=et(e),i=n.length>0?n.reverse().map(o=>o.content).join(`
56
+
57
+ `):"No changelog entries found.";this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new Z),this.chatContainer.addChild(new g(r.bold(r.fg("accent","What's New")),1,0)),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new me(i,1,1,this.getMarkdownThemeWithSettings())),this.chatContainer.addChild(new Z),this.ui.requestRender()}capitalizeKey(e){return e.split("/").map(n=>n.split("+").map(i=>i.charAt(0).toUpperCase()+i.slice(1)).join("+")).join("/")}getAppKeyDisplay(e){return this.capitalizeKey(L(this.keybindings,e))}getEditorKeyDisplay(e){return this.capitalizeKey(It(e))}handleHotkeysCommand(){const e=this.getEditorKeyDisplay("cursorWordLeft"),n=this.getEditorKeyDisplay("cursorWordRight"),i=this.getEditorKeyDisplay("cursorLineStart"),o=this.getEditorKeyDisplay("cursorLineEnd"),t=this.getEditorKeyDisplay("jumpForward"),a=this.getEditorKeyDisplay("jumpBackward"),h=this.getEditorKeyDisplay("pageUp"),c=this.getEditorKeyDisplay("pageDown"),d=this.getEditorKeyDisplay("submit"),m=this.getEditorKeyDisplay("newLine"),f=this.getEditorKeyDisplay("deleteWordBackward"),M=this.getEditorKeyDisplay("deleteWordForward"),w=this.getEditorKeyDisplay("deleteToLineStart"),E=this.getEditorKeyDisplay("deleteToLineEnd"),S=this.getEditorKeyDisplay("yank"),C=this.getEditorKeyDisplay("yankPop"),p=this.getEditorKeyDisplay("undo"),y=this.getEditorKeyDisplay("tab"),b=this.getAppKeyDisplay("interrupt"),l=this.getAppKeyDisplay("showResources"),T=this.getAppKeyDisplay("clear"),$=this.getAppKeyDisplay("exit"),A=this.getAppKeyDisplay("suspend"),R=this.getAppKeyDisplay("cycleThinkingLevel"),K=this.getAppKeyDisplay("cycleModelForward"),te=this.getAppKeyDisplay("selectModel"),_=this.getAppKeyDisplay("selectProviderThenModel"),j=this.getAppKeyDisplay("expandTools"),Q=this.getAppKeyDisplay("toggleThinking"),G=this.getAppKeyDisplay("externalEditor"),B=this.getAppKeyDisplay("followUp"),se=this.getAppKeyDisplay("dequeue");let W=`
58
+ **Navigation**
59
+ | Key | Action |
60
+ |-----|--------|
61
+ | \`Arrow keys\` | Move cursor / browse history (Up when empty) |
62
+ | \`${e}\` / \`${n}\` | Move by word |
63
+ | \`${i}\` | Start of line |
64
+ | \`${o}\` | End of line |
65
+ | \`${t}\` | Jump forward to character |
66
+ | \`${a}\` | Jump backward to character |
67
+ | \`${h}\` / \`${c}\` | Scroll by page |
68
+
69
+ **Editing**
70
+ | Key | Action |
71
+ |-----|--------|
72
+ | \`${d}\` | Send message |
73
+ | \`${m}\` | New line${process.platform==="win32"?" (Ctrl+Enter on Windows Terminal)":""} |
74
+ | \`${f}\` | Delete word backwards |
75
+ | \`${M}\` | Delete word forwards |
76
+ | \`${w}\` | Delete to start of line |
77
+ | \`${E}\` | Delete to end of line |
78
+ | \`${S}\` | Paste the most-recently-deleted text |
79
+ | \`${C}\` | Cycle through the deleted text after pasting |
80
+ | \`${p}\` | Undo |
81
+
82
+ **Other**
83
+ | Key | Action |
84
+ |-----|--------|
85
+ | \`${y}\` | Path completion / accept autocomplete |
86
+ | \`${b}\` | Cancel autocomplete / abort streaming |
87
+ | \`${l}\` | Show context/skills/extensions |
88
+ | \`${T}\` | Clear editor (first) / exit (second) |
89
+ | \`${$}\` | Exit (when editor is empty) |
90
+ | \`${A}\` | Suspend to background |
91
+ | \`${R}\` | Cycle thinking level |
92
+ | \`${K}\` | Cycle models |
93
+ | \`${te}\` | Open model selector |
94
+ | \`${_}\` | Select provider then model |
95
+ | \`${j}\` | Toggle tool output expansion |
96
+ | \`${Q}\` | Toggle thinking block visibility |
97
+ | \`${G}\` | Edit message in external editor |
98
+ | \`${B}\` | Queue follow-up message |
99
+ | \`${se}\` | Restore queued messages |
100
+ | \`Ctrl+V\` | Paste image from clipboard |
101
+ | \`/\` | Slash commands |
102
+ | \`!\` | Run bash command |
103
+ | \`!!\` | Run bash command (excluded from context) |
104
+ `;const V=this.session.extensionRunner;if(V){const z=V.getShortcuts(this.keybindings.getEffectiveConfig());if(z.size>0){W+=`
105
+ **Extensions**
106
+ | Key | Action |
107
+ |-----|--------|
108
+ `;for(const[ie,U]of z){const ne=U.description??U.extensionPath,X=ie.replace(/\b\w/g,oe=>oe.toUpperCase());W+=`| \`${X}\` | ${ne} |
109
+ `}}}this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new Z),this.chatContainer.addChild(new g(r.bold(r.fg("accent","Keyboard Shortcuts")),1,0)),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new me(W.trim(),1,1,this.getMarkdownThemeWithSettings())),this.chatContainer.addChild(new Z),this.ui.requestRender()}async handleClearCommand(){this.state.loadingAnimation&&(this.state.loadingAnimation.stop(),this.state.loadingAnimation=void 0),this.statusContainer.clear(),await this.session.newSession(),this.clearStatusTimers(),this.chatContainer.clear(),this.pendingMessagesContainer.clear(),this.state.compactionQueuedMessages=[],this.state.streamingComponent=void 0,this.state.streamingMessage=void 0,this.state.pendingTools.clear(),this.imagePipeline.clearAttachments(),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(`${r.fg("accent","\u2713 New session started")}`,1,1)),this.ui.requestRender()}handleRenderDebugCommand(){const e=this.ui.terminal.columns,n=this.ui.terminal.rows,i=this.ui.render(e),o=He(),t=[`Debug output at ${new Date().toISOString()}`,`Terminal: ${e}x${n}`,`Total lines: ${i.length}`,"","=== All rendered lines with visible widths ===",...i.map((a,h)=>{const c=pe(a),d=JSON.stringify(a);return`[${h}] (w=${c}) ${d}`}),"","=== Agent messages (JSONL) ===",...this.session.messages.map(a=>JSON.stringify(a)),""].join(`
110
+ `);P.mkdirSync(D.dirname(o),{recursive:!0}),P.writeFileSync(o,t),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(`${r.fg("accent","\u2713 Debug log written")}
111
+ ${r.fg("muted",o)}`,1,1)),this.ui.requestRender()}handleArminSaysHi(){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new it(this.ui)),this.ui.requestRender()}handleShowResourcesCommand(){const e=this.session.extensionRunner;this.showLoadedResources({extensionPaths:e?.getExtensionPaths()??[],force:!0,showDiagnosticsWhenQuiet:!0}),this.ui.requestRender()}handleDaxnuts(){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new $t(this.ui)),this.ui.requestRender()}async handleBashCommand(e,n=!1){const i=this.session.extensionRunner,o=i?await i.emitUserBash({type:"user_bash",command:e,excludeFromContext:n,cwd:this.session.cwd}):void 0;if(o?.result){const a=o.result;this.bashComponent=new ce(e,this.ui,n),this.session.isStreaming?(this.pendingMessagesContainer.addChild(this.bashComponent),this.pendingBashComponents.push(this.bashComponent)):this.chatContainer.addChild(this.bashComponent),a.output&&this.bashComponent.appendOutput(a.output),this.bashComponent.setComplete(a.exitCode,a.cancelled,a.truncated?{truncated:!0,content:a.output}:void 0,a.fullOutputPath),this.session.recordBashResult(e,a,{excludeFromContext:n}),this.bashComponent=void 0,this.ui.requestRender();return}const t=this.session.isStreaming;this.bashComponent=new ce(e,this.ui,n),t?(this.pendingMessagesContainer.addChild(this.bashComponent),this.pendingBashComponents.push(this.bashComponent)):this.chatContainer.addChild(this.bashComponent),this.ui.requestRender();try{const a=await this.session.executeBash(e,h=>{this.bashComponent&&(this.bashComponent.appendOutput(h),this.ui.requestRender())},{excludeFromContext:n,operations:o?.operations});this.bashComponent&&this.bashComponent.setComplete(a.exitCode,a.cancelled,a.truncated?{truncated:!0,content:a.output}:void 0,a.fullOutputPath)}catch(a){this.bashComponent&&this.bashComponent.setComplete(void 0,!1),this.showError(`Bash command failed: ${a instanceof Error?a.message:"Unknown error"}`)}this.bashComponent=void 0,this.ui.requestRender()}async handleCompactCommand(e){if(this.sessionManager.getEntries().filter(o=>o.type==="message").length<2){this.showWarning("Nothing to compact (no messages yet)");return}await this.executeCompaction(e,!1)}async executeCompaction(e,n=!1){this.state.loadingAnimation&&(this.state.loadingAnimation.stop(),this.state.loadingAnimation=void 0),this.statusContainer.clear();const i=this.defaultEditor.onEscape;this.defaultEditor.onEscape=()=>{this.session.abortCompaction()},this.chatContainer.addChild(new u(1));const o=`(${L(this.keybindings,"interrupt")} to cancel)`,t=n?`Auto-compacting context... ${o}`:`Compacting context... ${o}`,a=new Mt(this.ui,r,t);this.statusContainer.addChild(a),this.ui.requestRender();let h;try{h=await this.session.compact(e),this.rebuildChatFromMessages();const c=Ge(h.summary,h.tokensBefore,new Date().toISOString());this.addMessageToChat(c),this.footer.invalidate()}catch(c){const d=c instanceof Error?c.message:String(c);d==="Compaction cancelled"||c instanceof Error&&c.name==="AbortError"?this.showError("Compaction cancelled"):this.showError(`Compaction failed: ${d}`)}finally{a.stop(),this.statusContainer.clear(),this.defaultEditor.onEscape=i}return this.flushCompactionQueue({willRetry:!1}),h}stop(){this.stopWelcomeBannerTimer(),this.clearBuddyPetResetTimer(),this.buddyPet?.dispose(),this.buddyPet=null,this.state.loadingAnimation&&(this.state.loadingAnimation.stop(),this.state.loadingAnimation=void 0),this.clearExtensionTerminalInputListeners(),this.footer.dispose(),this.footerDataProvider.dispose(),this.unsubscribe&&this.unsubscribe(),this.isInitialized&&(this.ui.stop(),this.isInitialized=!1)}async applyPersonaFromSessionIfAny(){const n=this.session.sessionManager.getEntries().filter(o=>o.type==="custom"&&o.customType==="persona");let i;if(n.length>0){const o=n[n.length-1],t=o?.data?.personaId??o?.data?.id;typeof t=="string"&&t.trim()&&(i=t)}i=i??de(),i&&(process.env.NANOMEM_MEMORY_DIR=I(we(i)),process.env.SOUL_DIR=I(ye(i)),process.env.MCP_CONFIG_PATH=I(Ce(i)),process.env.NANO_PERSONA_DIR=I(le(i)),n.length>0&&be(i),!this.session.isStreaming&&!this.session.isCompacting&&await this.session.reload())}handleSoulCommand(){const e=this.session._soulManager;if(!e){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("warning","\u26A0\uFE0F Soul Not Enabled"),1,0)),this.chatContainer.addChild(new g(r.fg("dim","Soul (AI personality system) is not enabled. Please use Catui 1.3.0 or later."),1,0)),this.ui.requestRender();return}const n=Lt(e,{compact:!1});this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(n,1,0)),this.ui.requestRender()}async handlePersonaCommand(e){const n=e.trim().split(/\s+/),i=(n[1]??"list").toLowerCase(),o=n[2];if(i==="list"||i==="use"&&!o){const a=Se(),h=de();this.showSelector(c=>{const d=new Et(this.ui,a,h,Je,m=>{c(),this.switchPersona(m)},()=>{c(),this.ui.requestRender()});return{component:d,focus:d}});return}if(i!=="use"){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("dim",`Usage:
112
+ - /persona (open selector)
113
+ - /persona use <personaId>`),1,0)),this.ui.requestRender();return}const t=o?o.trim():"";if(!t){this.showError("Missing personaId. Use: /persona use <personaId>");return}await this.switchPersona(t)}async switchPersona(e){const n=le(e);if(!P.existsSync(n)){this.showError(`Persona not found: ${e}
114
+ Expected: ${n}`);return}const i=this.session.sessionManager.getBranch();let o;for(let t=i.length-1;t>=0;t--){const a=i[t];if(a?.type==="message"&&a?.message?.role==="user"){o=a.id;break}}o&&(await this.session.fork(o)).cancelled||(this.session.sessionManager.appendCustomEntry("persona",{personaId:e}),be(e),process.env.NANOMEM_MEMORY_DIR=I(we(e)),process.env.SOUL_DIR=I(ye(e)),process.env.MCP_CONFIG_PATH=I(Ce(e)),process.env.NANO_PERSONA_DIR=I(le(e)),process.env.CATUI_JUST_SWITCHED_PERSONA="true",await this.handleReloadCommand(),this.showStatus(`Persona switched to: ${e}`))}handleMemoryCommand(){const e=[];e.push(r.fg("accent","\u{1F4DA} Project Memory - NanoMem")),e.push(""),e.push(r.fg("dim",`Storage: ${this.session.agentDir}/memory/`)),e.push(r.fg("dim"," - knowledge.json (project knowledge)")),e.push(r.fg("dim"," - lessons.json (lessons learned)")),e.push(r.fg("dim"," - preferences.json (user preferences)")),e.push(r.fg("dim"," - patterns.json (behavior patterns)")),e.push(r.fg("dim"," - facets.json (patterns/struggles)")),e.push(""),e.push(r.fg("dim","\u{1F4A1} Tip: NanoMem automatically extracts and remembers project knowledge from conversations")),e.push(r.fg("dim"," - Remembers API endpoints, configuration options")),e.push(r.fg("dim"," - Learns error patterns and solutions")),e.push(r.fg("dim"," - Recognizes user preferences and coding style")),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(e.join(`
115
+ `),1,0)),this.ui.requestRender()}handleBrowserOptInCommand(){this.showStatus(["Browser automation is opt-in.","","Enable it by starting Catui with:"," --extension extensions/builtin/browser","","Or add that path to your extensions config, then run /browser status."].join(`
116
+ `))}async handleMcpCommand(e){const n=e.trim().split(/\s+/),i=(n[1]||"list").toLowerCase(),o=n[2];if(i==="list"){const t=fe();if(this.chatContainer.addChild(new u(1)),t.length===0)this.chatContainer.addChild(new g(r.fg("dim","No MCP servers configured."),1,0));else{const a=[r.bold("MCP Servers"),"",...t.map(h=>{const c=h.enabled===!1?"disabled":"enabled";return`- ${h.id} (${h.name}) [${c}]`}),"",r.fg("dim","Use: /mcp enable <id> or /mcp disable <id>")];this.chatContainer.addChild(new g(a.join(`
117
+ `),1,0))}this.ui.requestRender();return}if(i==="status"||i==="tools"){const t=this.session.getAllTools().filter(a=>a.name.startsWith("mcp_"));if(this.chatContainer.addChild(new u(1)),t.length===0)this.chatContainer.addChild(new g([r.bold("MCP Runtime Status"),"","No MCP tools are currently registered in this session.",r.fg("dim","Tip: run /reload and check startup logs for MCP errors.")].join(`
118
+ `),1,0));else{const a=[r.bold("MCP Runtime Status"),"",`Registered MCP tools: ${t.length}`,...t.slice(0,30).map(h=>`- ${h.name}`)];t.length>30&&a.push(r.fg("dim",`...and ${t.length-30} more`)),this.chatContainer.addChild(new g(a.join(`
119
+ `),1,0))}this.ui.requestRender();return}if((i==="enable"||i==="disable")&&o){Ve(o,i==="enable"),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(`${o} ${i==="enable"?"enabled":"disabled"}. Run /reload to apply changes.`,1,0)),this.ui.requestRender();return}this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g("Usage: /mcp [list|status|tools|enable <id>|disable <id>]",1,0)),this.ui.requestRender()}async handleLanguageCommand(e){const{setLocale:n,getLocale:i,AVAILABLE_LOCALES:o,LOCALE_NAMES:t}=await import("../../core/platform/i18n/index.js"),a=i(),c=e.split(" ")[1]?.toLowerCase();if(!c){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("accent",`Current language: ${t[a]}`),1,0)),this.chatContainer.addChild(new g("Available languages:",1,0));for(const m of o){const f=m===a?" \u25CF":"";this.chatContainer.addChild(new g(` /language ${m} - ${t[m]}${f}`,1,0))}this.ui.requestRender();return}const d=c;if(!o.includes(d)){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("error",`Unknown language: ${c}`),1,0)),this.chatContainer.addChild(new g("Available: "+o.join(", "),1,0)),this.ui.requestRender();return}n(d),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("success",`Language changed to: ${t[d]}`),1,0)),this.chatContainer.addChild(new g("Restart Catui for full effect.",1,0)),this.ui.requestRender()}}export{ni as InteractiveMode};
@@ -0,0 +1,20 @@
1
+ /**
2
+ * [WHO]: Tip, getTipToShow, resetTipCooldown
3
+ * [FROM]: No external dependencies
4
+ * [TO]: Consumed by catui-loader.ts
5
+ * [HERE]: modes/interactive/services/tips.ts - spinner tips registry and scheduling
6
+ */
7
+ /**
8
+ * Get the next relevant tip to show on the spinner.
9
+ * Returns null if no tip should be shown (cooldown not expired or no relevant tips).
10
+ */
11
+ export declare function getTipToShow(sessionId: string): string | null;
12
+ /**
13
+ * Reset tip cooldown when session count increments.
14
+ * Call this when starting a new session.
15
+ */
16
+ export declare function onSessionIncrement(sessionId: string): void;
17
+ /**
18
+ * Clear cooldown tracking for a session (e.g., on session reset).
19
+ */
20
+ export declare function resetTipsForSession(sessionId: string): void;
@@ -0,0 +1 @@
1
+ var g=Object.defineProperty;var e=(t,n)=>g(t,"name",{value:n,configurable:!0});const S=[{id:"btw-hint",content:"Use /btw <question> to ask quick questions without interrupting the current task",cooldownSessions:5,isRelevant:e(()=>!0,"isRelevant")},{id:"loop-hint",content:"Use /loop <interval> to schedule recurring reminders",cooldownSessions:3,isRelevant:e(()=>!0,"isRelevant")},{id:"plan-hint",content:"Use /plan to enter plan mode before making changes",cooldownSessions:3,isRelevant:e(()=>!0,"isRelevant")},{id:"branch-hint",content:"Use /branch to create a side branch and explore different approaches",cooldownSessions:3,isRelevant:e(()=>!0,"isRelevant")},{id:"compact-hint",content:"Context window getting full? The agent will compact automatically",cooldownSessions:5,isRelevant:e(()=>!0,"isRelevant")}],m=8e3,u=new Map,r=new Map,l=new Map;function T(t){const n=Date.now(),p=l.get(t)??0,a=r.get(t);if(a&&n<a.expiresAt)return a.content;let s=u.get(t);s||(s=new Map,u.set(t,s));const d=S.filter(i=>{if(i.isRelevant&&!i.isRelevant())return!1;const c=i.cooldownSessions??3,h=s.get(i.id);return!(h!==void 0&&p-h<c)});if(d.length===0)return null;let o=null,f=1/0;for(const i of d){const c=s.get(i.id)??-1/0;c<f&&(f=c,o=i)}if(!o)return null;s.set(o.id,p);const w=typeof o.content=="function"?o.content():o.content;return r.set(t,{tipId:o.id,content:w,shownAt:n,expiresAt:n+m}),w}e(T,"getTipToShow");function y(t){const n=l.get(t)??0;l.set(t,n+1),r.delete(t)}e(y,"onSessionIncrement");function x(t){l.delete(t),u.delete(t),r.delete(t)}e(x,"resetTipsForSession");export{T as getTipToShow,y as onSessionIncrement,x as resetTipsForSession};
@@ -0,0 +1,28 @@
1
+ /**
2
+ * [WHO]: getModelArgumentCompletions(), getAgentLoopArgumentCompletions(), getThinkingArgumentCompletions(), getMcpArgumentCompletions(), getLanguageArgumentCompletions(), getPersonaArgumentCompletions(), getLoginArgumentCompletions()
3
+ * [FROM]: Depends on @catui/agent-core, @catui/tui, core/platform/i18n, core/mcp/mcp-client
4
+ * [TO]: Consumed by modes/interactive/interactive-mode.ts
5
+ * [HERE]: modes/interactive/slash-command-arguments.ts - pure argument completion helpers for built-in TUI slash commands
6
+ */
7
+ import type { ThinkingLevel } from "@catui/agent-core";
8
+ import type { ArgumentCompletionContext, AutocompleteItem } from "@catui/tui";
9
+ import type { MCPServerConfig } from "../../core/mcp/mcp-types.js";
10
+ type McpCompletionServer = Pick<MCPServerConfig, "id" | "name" | "enabled">;
11
+ type LoginCompletionProvider = {
12
+ id: string;
13
+ name: string;
14
+ authType: "oauth" | "api_key";
15
+ };
16
+ type ModelCompletionEntry = {
17
+ id: string;
18
+ name: string;
19
+ provider: string;
20
+ };
21
+ export declare function getModelArgumentCompletions(argumentPrefix: string, context: Pick<ArgumentCompletionContext, "tokenIndex"> | undefined, models: readonly ModelCompletionEntry[]): AutocompleteItem[] | null;
22
+ export declare function getThinkingArgumentCompletions(argumentPrefix: string, context: Pick<ArgumentCompletionContext, "tokenIndex"> | undefined, levels: readonly ThinkingLevel[]): AutocompleteItem[] | null;
23
+ export declare function getAgentLoopArgumentCompletions(argumentPrefix: string, context?: Pick<ArgumentCompletionContext, "tokenIndex">): AutocompleteItem[] | null;
24
+ export declare function getMcpArgumentCompletions(argumentPrefix: string, context?: Pick<ArgumentCompletionContext, "tokenIndex" | "previousTokens">, servers?: readonly McpCompletionServer[]): AutocompleteItem[] | null;
25
+ export declare function getLanguageArgumentCompletions(argumentPrefix: string, context?: Pick<ArgumentCompletionContext, "tokenIndex">): AutocompleteItem[] | null;
26
+ export declare function getPersonaArgumentCompletions(argumentPrefix: string, context?: Pick<ArgumentCompletionContext, "tokenIndex" | "previousTokens">, personas?: readonly string[], activePersonaId?: string): AutocompleteItem[] | null;
27
+ export declare function getLoginArgumentCompletions(argumentPrefix: string, context?: Pick<ArgumentCompletionContext, "tokenIndex">, providers?: readonly LoginCompletionProvider[]): AutocompleteItem[] | null;
28
+ export {};
@@ -0,0 +1 @@
1
+ var m=Object.defineProperty;var a=(t,n)=>m(t,"name",{value:n,configurable:!0});import{AVAILABLE_LOCALES as d,LOCALE_NAMES as p}from"../../core/platform/i18n/index.js";const c={off:"Skip extra reasoning",minimal:"Very small reasoning budget",low:"Light reasoning for simple tasks",medium:"Balanced reasoning for everyday coding",high:"Deeper reasoning for complex work",xhigh:"Maximum reasoning when the model supports it"},f=[{value:"standard",label:"standard",description:"Use the normal agent loop"},{value:"weak-model-compatible",label:"weak-model-compatible",description:"Keep working with simpler models"}],g=[{value:"list",label:"list",description:"Show configured MCP servers"},{value:"status",label:"status",description:"Show loaded MCP tools and runtime status"},{value:"tools",label:"tools",description:"Show loaded MCP tools and runtime status"},{value:"enable",label:"enable",description:"Turn on an MCP server"},{value:"disable",label:"disable",description:"Turn off an MCP server"}],b=[{value:"list",label:"list",description:"Show available personas"},{value:"use",label:"use",description:"Switch to a persona"}];function s(t,n){const o=n.trim().toLowerCase(),e=t.filter(r=>r.value.toLowerCase().startsWith(o));return e.length>0?e.map(r=>({...r})):null}a(s,"matchCompletions");function u(t,n){const o=n.trim().toLowerCase(),e=t.filter(r=>r.value.toLowerCase().startsWith(o)?!0:r.label.toLowerCase().split(/[\s-]+/).some(i=>i.startsWith(o)));return e.length>0?e.map(r=>({...r})):null}a(u,"matchCompletionsByValueOrLabelWord");function l(t){return!t||t.tokenIndex===0}a(l,"isFirstToken");function w(t,n,o){return l(n)?u(o.map(e=>({value:`${e.provider}/${e.id}`,label:e.name,description:`${e.provider}/${e.id}`})),t):null}a(w,"getModelArgumentCompletions");function L(t,n,o){return l(n)?s(o.map(e=>({value:e,label:e,description:c[e]})),t):null}a(L,"getThinkingArgumentCompletions");function A(t,n){return l(n)?s(f,t):null}a(A,"getAgentLoopArgumentCompletions");function v(t,n,o=[]){if(l(n))return s(g,t);if(n?.tokenIndex!==1)return null;const e=n.previousTokens[0]?.toLowerCase();if(e!=="enable"&&e!=="disable")return null;const r=e==="disable";return u(o.filter(i=>i.enabled!==!1===r).map(i=>({value:i.id,label:i.name,description:`${i.name} (${i.enabled===!1?"disabled":"enabled"})`})),t)}a(v,"getMcpArgumentCompletions");function S(t,n){return l(n)?u(d.map(o=>({value:o,label:p[o],description:p[o]})),t):null}a(S,"getLanguageArgumentCompletions");function O(t,n,o=[],e){return l(n)?s(b,t):n?.tokenIndex!==1||n.previousTokens[0]?.toLowerCase()!=="use"?null:s(o.map(r=>({value:r,label:r,description:r===e?"Current persona":`Switch to ${r}`})),t)}a(O,"getPersonaArgumentCompletions");function T(t,n,o=[]){return l(n)?u(o.map(e=>({value:e.id,label:e.name,description:e.authType==="oauth"?`Sign in with browser for ${e.name}`:`Set API key for ${e.name}`})),t):null}a(T,"getLoginArgumentCompletions");export{A as getAgentLoopArgumentCompletions,S as getLanguageArgumentCompletions,T as getLoginArgumentCompletions,v as getMcpArgumentCompletions,w as getModelArgumentCompletions,O as getPersonaArgumentCompletions,L as getThinkingArgumentCompletions};
@@ -0,0 +1,74 @@
1
+ /**
2
+ * [WHO]: Provides InteractiveState, CompactionQueuedMessage — the shared render/turn UI state container
3
+ * [FROM]: Depends on @catui/ai (AssistantMessage), @catui/tui (Component/Spacer/Text),
4
+ * components (AssistantMessageComponent/CustomMessageComponent/ToolExecutionComponent) — types only
5
+ * [TO]: Consumed by modes/interactive/interactive-mode.ts (holds one as `this.state`); will be read by the
6
+ * render-layer controller when handleEvent is sliced (UI04)
7
+ * [HERE]: modes/interactive/state/interactive-state.ts — P5 state 合一 (UI02)
8
+ *
9
+ * Consolidates the ~20 scattered `this._` fields that describe the *current/streaming turn's render
10
+ * state* (streaming message, tool components, loaders, run timers, status line, optimistic + compaction
11
+ * queues). Plain field holder — no behavior; relocated verbatim from InteractiveMode so behavior is
12
+ * identical. Concern-local state (bash, extension widgets, cancellation, skill, buddy) stays with its
13
+ * own owner and is not consolidated here.
14
+ */
15
+ import type { AssistantMessage } from "@catui/ai/types";
16
+ import type { Component, Spacer, Text } from "@catui/tui";
17
+ import type { AssistantMessageComponent } from "../components/assistant-message.js";
18
+ import type { CustomMessageComponent } from "../components/custom-message.js";
19
+ import type { PlanProgressPanelComponent } from "../components/plan-progress-panel.js";
20
+ import type { TaskStatusPanelComponent } from "../components/task-status-panel.js";
21
+ import type { ToolExecutionComponent } from "../components/tool-execution.js";
22
+ export type CompactionQueuedMessage = {
23
+ text: string;
24
+ mode: "steer" | "followUp";
25
+ };
26
+ /** Per-sub-agent state tracked for TUI display. */
27
+ export interface SubAgentState {
28
+ id: string;
29
+ agentType: string;
30
+ description: string;
31
+ isAsync: boolean;
32
+ isResolved: boolean;
33
+ isError: boolean;
34
+ toolUseCount: number;
35
+ lastToolName: string | null;
36
+ startTime: number;
37
+ }
38
+ /** Per-phase state for plan execution progress display. */
39
+ export interface PlanPhaseState {
40
+ label: string;
41
+ status: "pending" | "in_progress" | "completed";
42
+ }
43
+ /** Overall plan progress state for TUI rendering. */
44
+ export interface PlanProgressState {
45
+ phases: PlanPhaseState[];
46
+ currentPhaseIndex: number;
47
+ startTime: number;
48
+ tokenCount?: number;
49
+ }
50
+ export declare class InteractiveState {
51
+ loadingAnimation: Component | undefined;
52
+ pendingWorkingMessage: string | undefined;
53
+ workingMessageOverride: string | undefined;
54
+ agentRunStartMs: number | undefined;
55
+ agentRunTimer: ReturnType<typeof setInterval> | undefined;
56
+ welcomeBannerTimer: ReturnType<typeof setInterval> | undefined;
57
+ lastStatusSpacer: Spacer | undefined;
58
+ lastStatusText: Text | undefined;
59
+ streamingComponent: AssistantMessageComponent | undefined;
60
+ streamingMessage: AssistantMessage | undefined;
61
+ customStreamComponents: Map<string, CustomMessageComponent>;
62
+ pendingTools: Map<string, ToolExecutionComponent>;
63
+ subAgentStates: Map<string, SubAgentState>;
64
+ subAgentPanelComponent: Component | undefined;
65
+ planProgress: PlanProgressState | undefined;
66
+ planProgressPanel: PlanProgressPanelComponent | undefined;
67
+ taskStatusPanel: TaskStatusPanelComponent | undefined;
68
+ toolOutputExpanded: boolean;
69
+ hideThinkingBlock: boolean;
70
+ compactionQueuedMessages: CompactionQueuedMessage[];
71
+ optimisticUserMessages: Array<{
72
+ text: string;
73
+ }>;
74
+ }
@@ -0,0 +1 @@
1
+ var s=Object.defineProperty;var n=(e,a)=>s(e,"name",{value:a,configurable:!0});class d{static{n(this,"InteractiveState")}loadingAnimation=void 0;pendingWorkingMessage=void 0;workingMessageOverride=void 0;agentRunStartMs=void 0;agentRunTimer=void 0;welcomeBannerTimer=void 0;lastStatusSpacer=void 0;lastStatusText=void 0;streamingComponent=void 0;streamingMessage=void 0;customStreamComponents=new Map;pendingTools=new Map;subAgentStates=new Map;subAgentPanelComponent=void 0;planProgress=void 0;planProgressPanel=void 0;taskStatusPanel=void 0;toolOutputExpanded=!1;hideThinkingBlock=!1;compactionQueuedMessages=[];optimisticUserMessages=[]}export{d as InteractiveState};
@@ -0,0 +1,85 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/O-Catui/Catui/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "dark",
4
+ "vars": {
5
+ "cyan": "#00d7ff",
6
+ "blue": "#5f87ff",
7
+ "green": "#b5bd68",
8
+ "red": "#cc6666",
9
+ "yellow": "#ffff00",
10
+ "gray": "#808080",
11
+ "dimGray": "#666666",
12
+ "darkGray": "#505050",
13
+ "accent": "#8abeb7",
14
+ "selectedBg": "#3a3a4a",
15
+ "userMsgBg": "#343541",
16
+ "toolPendingBg": "#282832",
17
+ "toolSuccessBg": "#283228",
18
+ "toolErrorBg": "#3c2828",
19
+ "customMsgBg": "#2d2838"
20
+ },
21
+ "colors": {
22
+ "accent": "accent",
23
+ "border": "blue",
24
+ "borderAccent": "cyan",
25
+ "borderMuted": "darkGray",
26
+ "success": "green",
27
+ "error": "red",
28
+ "warning": "yellow",
29
+ "muted": "gray",
30
+ "dim": "dimGray",
31
+ "text": "",
32
+ "thinkingText": "gray",
33
+
34
+ "selectedBg": "selectedBg",
35
+ "userMessageBg": "userMsgBg",
36
+ "userMessageText": "",
37
+ "customMessageBg": "customMsgBg",
38
+ "customMessageText": "",
39
+ "customMessageLabel": "#9575cd",
40
+ "toolPendingBg": "toolPendingBg",
41
+ "toolSuccessBg": "toolSuccessBg",
42
+ "toolErrorBg": "toolErrorBg",
43
+ "toolTitle": "",
44
+ "toolOutput": "gray",
45
+
46
+ "mdHeading": "#f0c674",
47
+ "mdLink": "#81a2be",
48
+ "mdLinkUrl": "dimGray",
49
+ "mdCode": "accent",
50
+ "mdCodeBlock": "green",
51
+ "mdCodeBlockBorder": "gray",
52
+ "mdQuote": "gray",
53
+ "mdQuoteBorder": "gray",
54
+ "mdHr": "gray",
55
+ "mdListBullet": "accent",
56
+
57
+ "toolDiffAdded": "green",
58
+ "toolDiffRemoved": "red",
59
+ "toolDiffContext": "gray",
60
+
61
+ "syntaxComment": "#6A9955",
62
+ "syntaxKeyword": "#569CD6",
63
+ "syntaxFunction": "#DCDCAA",
64
+ "syntaxVariable": "#9CDCFE",
65
+ "syntaxString": "#CE9178",
66
+ "syntaxNumber": "#B5CEA8",
67
+ "syntaxType": "#4EC9B0",
68
+ "syntaxOperator": "#D4D4D4",
69
+ "syntaxPunctuation": "#D4D4D4",
70
+
71
+ "thinkingOff": "darkGray",
72
+ "thinkingMinimal": "#6e6e6e",
73
+ "thinkingLow": "#5f87af",
74
+ "thinkingMedium": "#81a2be",
75
+ "thinkingHigh": "#b294bb",
76
+ "thinkingXhigh": "#d183e8",
77
+
78
+ "bashMode": "green"
79
+ },
80
+ "export": {
81
+ "pageBg": "#18181e",
82
+ "cardBg": "#1e1e24",
83
+ "infoBg": "#3c3728"
84
+ }
85
+ }