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,220 @@
1
+ /**
2
+ * Minimal TUI implementation with differential rendering
3
+ */
4
+ /**
5
+ * [WHO]: Component, Focusable, isFocusable, CURSOR_MARKER, visibleWidth
6
+ * [FROM]: Depends on node:fs, node:os, node:path, ./keys.js, ./terminal-image.js
7
+ * [TO]: Consumed by core/lib/tui/src/index.ts
8
+ * [HERE]: core/lib/tui/src/tui.ts -
9
+ */
10
+ import type { Terminal } from "./terminal.js";
11
+ import { visibleWidth } from "./utils.js";
12
+ /**
13
+ * Component interface - all components must implement this
14
+ */
15
+ export interface Component {
16
+ /**
17
+ * Render the component to lines for the given viewport width
18
+ * @param width - Current viewport width
19
+ * @returns Array of strings, each representing a line
20
+ */
21
+ render(width: number): string[];
22
+ /**
23
+ * Optional handler for keyboard input when component has focus
24
+ */
25
+ handleInput?(data: string): void;
26
+ /**
27
+ * If true, component receives key release events (Kitty protocol).
28
+ * Default is false - release events are filtered out.
29
+ */
30
+ wantsKeyRelease?: boolean;
31
+ /**
32
+ * Invalidate any cached rendering state.
33
+ * Called when theme changes or when component needs to re-render from scratch.
34
+ */
35
+ invalidate(): void;
36
+ }
37
+ type InputListenerResult = {
38
+ consume?: boolean;
39
+ data?: string;
40
+ } | undefined;
41
+ type InputListener = (data: string) => InputListenerResult;
42
+ /**
43
+ * Interface for components that can receive focus and display a hardware cursor.
44
+ * When focused, the component should emit CURSOR_MARKER at the cursor position
45
+ * in its render output. TUI will find this marker and position the hardware
46
+ * cursor there for proper IME candidate window positioning.
47
+ */
48
+ export interface Focusable {
49
+ /** Set by TUI when focus changes. Component should emit CURSOR_MARKER when true. */
50
+ focused: boolean;
51
+ }
52
+ /** Type guard to check if a component implements Focusable */
53
+ export declare function isFocusable(component: Component | null): component is Component & Focusable;
54
+ /**
55
+ * Cursor position marker - APC (Application Program Command) sequence.
56
+ * This is a zero-width escape sequence that terminals ignore.
57
+ * Components emit this at the cursor position when focused.
58
+ * TUI finds and strips this marker, then positions the hardware cursor there.
59
+ */
60
+ export declare const CURSOR_MARKER = "\u001B_pi:c\u0007";
61
+ export { visibleWidth };
62
+ /**
63
+ * Anchor position for overlays
64
+ */
65
+ export type OverlayAnchor = "center" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | "top-center" | "bottom-center" | "left-center" | "right-center";
66
+ /**
67
+ * Margin configuration for overlays
68
+ */
69
+ export interface OverlayMargin {
70
+ top?: number;
71
+ right?: number;
72
+ bottom?: number;
73
+ left?: number;
74
+ }
75
+ /** Value that can be absolute (number) or percentage (string like "50%") */
76
+ export type SizeValue = number | `${number}%`;
77
+ /**
78
+ * Options for overlay positioning and sizing.
79
+ * Values can be absolute numbers or percentage strings (e.g., "50%").
80
+ */
81
+ export interface OverlayOptions {
82
+ /** Width in columns, or percentage of terminal width (e.g., "50%") */
83
+ width?: SizeValue;
84
+ /** Minimum width in columns */
85
+ minWidth?: number;
86
+ /** Maximum height in rows, or percentage of terminal height (e.g., "50%") */
87
+ maxHeight?: SizeValue;
88
+ /** Anchor point for positioning (default: 'center') */
89
+ anchor?: OverlayAnchor;
90
+ /** Horizontal offset from anchor position (positive = right) */
91
+ offsetX?: number;
92
+ /** Vertical offset from anchor position (positive = down) */
93
+ offsetY?: number;
94
+ /** Row position: absolute number, or percentage (e.g., "25%" = 25% from top) */
95
+ row?: SizeValue;
96
+ /** Column position: absolute number, or percentage (e.g., "50%" = centered horizontally) */
97
+ col?: SizeValue;
98
+ /** Margin from terminal edges. Number applies to all sides. */
99
+ margin?: OverlayMargin | number;
100
+ /**
101
+ * Control overlay visibility based on terminal dimensions.
102
+ * If provided, overlay is only rendered when this returns true.
103
+ * Called each render cycle with current terminal dimensions.
104
+ */
105
+ visible?: (termWidth: number, termHeight: number) => boolean;
106
+ }
107
+ /**
108
+ * Handle returned by showOverlay for controlling the overlay
109
+ */
110
+ export interface OverlayHandle {
111
+ /** Permanently remove the overlay (cannot be shown again) */
112
+ hide(): void;
113
+ /** Temporarily hide or show the overlay */
114
+ setHidden(hidden: boolean): void;
115
+ /** Check if overlay is temporarily hidden */
116
+ isHidden(): boolean;
117
+ }
118
+ /**
119
+ * Container - a component that contains other components
120
+ */
121
+ export declare class Container implements Component {
122
+ children: Component[];
123
+ addChild(component: Component): void;
124
+ removeChild(component: Component): void;
125
+ clear(): void;
126
+ invalidate(): void;
127
+ render(width: number): string[];
128
+ }
129
+ /**
130
+ * TUI - Main class for managing terminal UI with differential rendering
131
+ */
132
+ export declare class TUI extends Container {
133
+ terminal: Terminal;
134
+ private previousLines;
135
+ private previousWidth;
136
+ private focusedComponent;
137
+ private inputListeners;
138
+ /** Global callback for debug key (Shift+Ctrl+D). Called before input is forwarded to focused component. */
139
+ onDebug?: () => void;
140
+ private renderRequested;
141
+ private renderWaiters;
142
+ private cursorRow;
143
+ private hardwareCursorRow;
144
+ private inputBuffer;
145
+ private cellSizeQueryPending;
146
+ private showHardwareCursor;
147
+ private clearOnShrink;
148
+ private maxLinesRendered;
149
+ private previousViewportTop;
150
+ private fullRedrawCount;
151
+ private stopped;
152
+ private synchronizedOutputEnabled;
153
+ private overlayStack;
154
+ private debugLog;
155
+ constructor(terminal: Terminal, showHardwareCursor?: boolean);
156
+ get fullRedraws(): number;
157
+ getShowHardwareCursor(): boolean;
158
+ setShowHardwareCursor(enabled: boolean): void;
159
+ getClearOnShrink(): boolean;
160
+ /**
161
+ * Set whether to trigger full re-render when content shrinks.
162
+ * When true (default), empty rows are cleared when content shrinks.
163
+ * When false, empty rows remain (reduces redraws on slower terminals).
164
+ */
165
+ setClearOnShrink(enabled: boolean): void;
166
+ private wrapRenderBuffer;
167
+ setFocus(component: Component | null): void;
168
+ /**
169
+ * Show an overlay component with configurable positioning and sizing.
170
+ * Returns a handle to control the overlay's visibility.
171
+ */
172
+ showOverlay(component: Component, options?: OverlayOptions): OverlayHandle;
173
+ /** Hide the topmost overlay and restore previous focus. */
174
+ hideOverlay(): void;
175
+ /** Check if there are any visible overlays */
176
+ hasOverlay(): boolean;
177
+ /** Check if an overlay entry is currently visible */
178
+ private isOverlayVisible;
179
+ /** Find the topmost visible overlay, if any */
180
+ private getTopmostVisibleOverlay;
181
+ invalidate(): void;
182
+ start(): void;
183
+ addInputListener(listener: InputListener): () => void;
184
+ removeInputListener(listener: InputListener): void;
185
+ private queryCellSize;
186
+ stop(): void;
187
+ requestRender(force?: boolean): void;
188
+ awaitRender(): Promise<void>;
189
+ private handleInput;
190
+ private parseCellSizeResponse;
191
+ /**
192
+ * Resolve overlay layout from options.
193
+ * Returns { width, row, col, maxHeight } for rendering.
194
+ */
195
+ private resolveOverlayLayout;
196
+ private resolveAnchorRow;
197
+ private resolveAnchorCol;
198
+ /** Composite all overlays into content lines (in stack order, later = on top). */
199
+ private compositeOverlays;
200
+ private static readonly SEGMENT_RESET;
201
+ private applyLineResets;
202
+ /** Splice overlay content into a base line at a specific column. Single-pass optimized. */
203
+ private compositeLineAt;
204
+ /**
205
+ * Find and extract cursor position from rendered lines.
206
+ * Searches for CURSOR_MARKER, calculates its position, and strips it from the output.
207
+ * Only scans the bottom terminal height lines (visible viewport).
208
+ * @param lines - Rendered lines to search
209
+ * @param height - Terminal height (visible viewport size)
210
+ * @returns Cursor position { row, col } or null if no marker found
211
+ */
212
+ private extractCursorPosition;
213
+ private doRender;
214
+ /**
215
+ * Position the hardware cursor for IME candidate window.
216
+ * @param cursorPos The cursor position extracted from rendered output, or null
217
+ * @param totalLines Total number of rendered lines
218
+ */
219
+ private positionHardwareCursor;
220
+ }
@@ -0,0 +1,12 @@
1
+ var W=Object.defineProperty;var b=(R,e)=>W(R,"name",{value:e,configurable:!0});import*as $ from"node:fs";import*as V from"node:os";import*as k from"node:path";import{isKeyRelease as N,matchesKey as K}from"./keys.js";import{getCapabilities as G,isImageLine as I,setCellDimensions as j}from"./terminal-image.js";import{extractSegments as J,sliceByColumn as P,sliceWithWidth as Y,visibleWidth as L}from"./utils.js";function _(R){return R!==null&&"focused"in R}b(_,"isFocusable");function Q(){if(process.env.CATUI_SYNC_OUTPUT==="0")return!1;if(process.env.CATUI_SYNC_OUTPUT==="1")return!0;const R=process.env.TERM_PROGRAM?.toLowerCase()||"";return!new Set(["warpterminal","waveterm"]).has(R)}b(Q,"shouldUseSynchronizedOutput");const F="\x1B_pi:c\x07";function q(R,e){if(R===void 0)return;if(typeof R=="number")return R;const t=R.match(/^(\d+(?:\.\d+)?)%$/);if(t)return Math.floor(e*parseFloat(t[1])/100)}b(q,"parseSizeValue");class X{static{b(this,"Container")}children=[];addChild(e){this.children.push(e)}removeChild(e){const t=this.children.indexOf(e);t!==-1&&this.children.splice(t,1)}clear(){this.children=[]}invalidate(){for(const e of this.children)e.invalidate?.()}render(e){const t=[];for(const i of this.children)t.push(...i.render(e));return t}}class D extends X{static{b(this,"TUI")}terminal;previousLines=[];previousWidth=0;focusedComponent=null;inputListeners=new Set;onDebug;renderRequested=!1;renderWaiters=[];cursorRow=0;hardwareCursorRow=0;inputBuffer="";cellSizeQueryPending=!1;showHardwareCursor=process.env.CATUI_HARDWARE_CURSOR==="1";clearOnShrink=process.env.CATUI_CLEAR_ON_SHRINK==="1";maxLinesRendered=0;previousViewportTop=0;fullRedrawCount=0;stopped=!1;synchronizedOutputEnabled=Q();overlayStack=[];debugLog(e){if(process.env.CATUI_DEBUG_RENDER!=="1")return;const t=k.join(V.homedir(),".catui","agent","catui-debug.log");$.appendFileSync(t,`[${new Date().toISOString()}] [tui] ${e}
2
+ `)}constructor(e,t){super(),this.terminal=e,t!==void 0&&(this.showHardwareCursor=t)}get fullRedraws(){return this.fullRedrawCount}getShowHardwareCursor(){return this.showHardwareCursor}setShowHardwareCursor(e){this.showHardwareCursor!==e&&(this.showHardwareCursor=e,e||this.terminal.hideCursor(),this.requestRender())}getClearOnShrink(){return this.clearOnShrink}setClearOnShrink(e){this.clearOnShrink=e}wrapRenderBuffer(e){return this.synchronizedOutputEnabled?`\x1B[?2026h${e}\x1B[?2026l`:e}setFocus(e){_(this.focusedComponent)&&(this.focusedComponent.focused=!1),this.focusedComponent=e,_(e)&&(e.focused=!0)}showOverlay(e,t){const i={component:e,options:t,preFocus:this.focusedComponent,hidden:!1};return this.overlayStack.push(i),this.isOverlayVisible(i)&&this.setFocus(e),this.terminal.hideCursor(),this.requestRender(),{hide:b(()=>{const n=this.overlayStack.indexOf(i);if(n!==-1){if(this.overlayStack.splice(n,1),this.focusedComponent===e){const r=this.getTopmostVisibleOverlay();this.setFocus(r?.component??i.preFocus)}this.overlayStack.length===0&&this.terminal.hideCursor(),this.requestRender()}},"hide"),setHidden:b(n=>{if(i.hidden!==n){if(i.hidden=n,n){if(this.focusedComponent===e){const r=this.getTopmostVisibleOverlay();this.setFocus(r?.component??i.preFocus)}}else this.isOverlayVisible(i)&&this.setFocus(e);this.requestRender()}},"setHidden"),isHidden:b(()=>i.hidden,"isHidden")}}hideOverlay(){const e=this.overlayStack.pop();if(!e)return;const t=this.getTopmostVisibleOverlay();this.setFocus(t?.component??e.preFocus),this.overlayStack.length===0&&this.terminal.hideCursor(),this.requestRender()}hasOverlay(){return this.overlayStack.some(e=>this.isOverlayVisible(e))}isOverlayVisible(e){return e.hidden?!1:e.options?.visible?e.options.visible(this.terminal.columns,this.terminal.rows):!0}getTopmostVisibleOverlay(){for(let e=this.overlayStack.length-1;e>=0;e--)if(this.isOverlayVisible(this.overlayStack[e]))return this.overlayStack[e]}invalidate(){super.invalidate();for(const e of this.overlayStack)e.component.invalidate?.()}start(){this.stopped=!1,this.terminal.start(e=>this.handleInput(e),()=>this.requestRender()),this.terminal.hideCursor(),this.queryCellSize(),this.requestRender()}addInputListener(e){return this.inputListeners.add(e),()=>{this.inputListeners.delete(e)}}removeInputListener(e){this.inputListeners.delete(e)}queryCellSize(){G().images&&(this.cellSizeQueryPending=!0,this.terminal.write("\x1B[16t"))}stop(){if(this.stopped=!0,this.previousLines.length>0){const t=this.previousLines.length-this.hardwareCursorRow;t>0?this.terminal.write(`\x1B[${t}B`):t<0&&this.terminal.write(`\x1B[${-t}A`),this.terminal.write(`\r
3
+ `)}this.terminal.showCursor(),this.terminal.stop()}requestRender(e=!1){e&&(this.previousLines=[],this.previousWidth=-1,this.cursorRow=0,this.hardwareCursorRow=0,this.maxLinesRendered=0,this.previousViewportTop=0),!this.renderRequested&&(this.renderRequested=!0,this.debugLog(`requestRender (force=${e})`),process.nextTick(()=>{const t=this.renderWaiters.splice(0);this.renderRequested=!1;try{this.doRender()}finally{for(const i of t)i()}}))}async awaitRender(){this.renderRequested&&await new Promise(e=>{this.renderWaiters.push(e)})}handleInput(e){if(this.inputListeners.size>0){let i=e;for(const n of this.inputListeners){const r=n(i);if(r?.consume)return;r?.data!==void 0&&(i=r.data)}if(i.length===0)return;e=i}if(this.cellSizeQueryPending){this.inputBuffer+=e;const i=this.parseCellSizeResponse();if(i.length===0)return;e=i}if(K(e,"shift+ctrl+d")&&this.onDebug){this.onDebug();return}const t=this.overlayStack.find(i=>i.component===this.focusedComponent);if(t&&!this.isOverlayVisible(t)){const i=this.getTopmostVisibleOverlay();i?this.setFocus(i.component):this.setFocus(t.preFocus)}if(this.focusedComponent?.handleInput){if(N(e)&&!this.focusedComponent.wantsKeyRelease)return;this.focusedComponent.handleInput(e),this.requestRender()}}parseCellSizeResponse(){const e=/\x1b\[6;(\d+);(\d+)t/,t=this.inputBuffer.match(e);if(t){const r=parseInt(t[1],10),l=parseInt(t[2],10);r>0&&l>0&&(j({widthPx:l,heightPx:r}),this.invalidate(),this.requestRender()),this.inputBuffer=this.inputBuffer.replace(e,""),this.cellSizeQueryPending=!1}if(/\x1b(\[6?;?[\d;]*)?$/.test(this.inputBuffer)){const r=this.inputBuffer[this.inputBuffer.length-1];if(!/[a-zA-Z~]/.test(r))return""}const n=this.inputBuffer;return this.inputBuffer="",this.cellSizeQueryPending=!1,n}resolveOverlayLayout(e,t,i,n){const r=e??{},l=typeof r.margin=="number"?{top:r.margin,right:r.margin,bottom:r.margin,left:r.margin}:r.margin??{},s=Math.max(0,l.top??0),w=Math.max(0,l.right??0),y=Math.max(0,l.bottom??0),u=Math.max(0,l.left??0),v=Math.max(1,i-u-w),m=Math.max(1,n-s-y);let h=q(r.width,i)??Math.min(80,v);r.minWidth!==void 0&&(h=Math.max(h,r.minWidth)),h=Math.max(1,Math.min(h,v));let c=q(r.maxHeight,n);c!==void 0&&(c=Math.max(1,Math.min(c,m)));const d=c!==void 0?Math.min(t,c):t;let p,x;if(r.row!==void 0)if(typeof r.row=="string"){const C=r.row.match(/^(\d+(?:\.\d+)?)%$/);if(C){const g=Math.max(0,m-d),M=parseFloat(C[1])/100;p=s+Math.floor(g*M)}else p=this.resolveAnchorRow("center",d,m,s)}else p=r.row;else{const C=r.anchor??"center";p=this.resolveAnchorRow(C,d,m,s)}if(r.col!==void 0)if(typeof r.col=="string"){const C=r.col.match(/^(\d+(?:\.\d+)?)%$/);if(C){const g=Math.max(0,v-h),M=parseFloat(C[1])/100;x=u+Math.floor(g*M)}else x=this.resolveAnchorCol("center",h,v,u)}else x=r.col;else{const C=r.anchor??"center";x=this.resolveAnchorCol(C,h,v,u)}return r.offsetY!==void 0&&(p+=r.offsetY),r.offsetX!==void 0&&(x+=r.offsetX),p=Math.max(s,Math.min(p,n-y-d)),x=Math.max(u,Math.min(x,i-w-h)),{width:h,row:p,col:x,maxHeight:c}}resolveAnchorRow(e,t,i,n){switch(e){case"top-left":case"top-center":case"top-right":return n;case"bottom-left":case"bottom-center":case"bottom-right":return n+i-t;case"left-center":case"center":case"right-center":return n+Math.floor((i-t)/2)}}resolveAnchorCol(e,t,i,n){switch(e){case"top-left":case"left-center":case"bottom-left":return n;case"top-right":case"right-center":case"bottom-right":return n+i-t;case"top-center":case"center":case"bottom-center":return n+Math.floor((i-t)/2)}}compositeOverlays(e,t,i){if(this.overlayStack.length===0)return e;const n=[...e],r=[];let l=n.length;for(const u of this.overlayStack){if(!this.isOverlayVisible(u))continue;const{component:v,options:m}=u,{width:h,maxHeight:c}=this.resolveOverlayLayout(m,0,t,i);let d=v.render(h);c!==void 0&&d.length>c&&(d=d.slice(0,c));const{row:p,col:x}=this.resolveOverlayLayout(m,d.length,t,i);r.push({overlayLines:d,row:p,col:x,w:h}),l=Math.max(l,p+d.length)}const s=Math.max(this.maxLinesRendered,l);for(;n.length<s;)n.push("");const w=Math.max(0,s-i),y=new Set;for(const{overlayLines:u,row:v,col:m,w:h}of r)for(let c=0;c<u.length;c++){const d=w+v+c;if(d>=0&&d<n.length){const p=L(u[c])>h?P(u[c],0,h,!0):u[c];n[d]=this.compositeLineAt(n[d],p,m,h,t),y.add(d)}}for(const u of y)L(n[u])>t&&(n[u]=P(n[u],0,t,!0));return n}static SEGMENT_RESET="\x1B[0m\x1B]8;;\x07";applyLineResets(e){const t=D.SEGMENT_RESET;for(let i=0;i<e.length;i++){const n=e[i];I(n)||(e[i]=n+t)}return e}compositeLineAt(e,t,i,n,r){if(I(e))return e;const l=i+n,s=J(e,i,l,r-l,!0),w=Y(t,0,n,!0),y=Math.max(0,i-s.beforeWidth),u=Math.max(0,n-w.width),v=Math.max(i,s.beforeWidth),m=Math.max(n,w.width),h=Math.max(0,r-v-m),c=Math.max(0,h-s.afterWidth),d=D.SEGMENT_RESET,p=s.before+" ".repeat(y)+d+w.text+" ".repeat(u)+d+s.after+" ".repeat(c);return L(p)<=r?p:P(p,0,r,!0)}extractCursorPosition(e,t){const i=Math.max(0,e.length-t);for(let n=e.length-1;n>=i;n--){const r=e[n],l=r.indexOf(F);if(l!==-1){const s=r.slice(0,l),w=L(s);return e[n]=r.slice(0,l)+r.slice(l+F.length),{row:n,col:w}}}return null}doRender(){if(this.stopped)return;const e=this.terminal.columns,t=this.terminal.rows;this.debugLog(`doRender: width=${e} height=${t} stopped=${this.stopped} children=${this.children.length}`);let i=Math.max(0,this.maxLinesRendered-t),n=this.previousViewportTop,r=this.hardwareCursorRow;const l=b(o=>{const a=r-n;return o-i-a},"computeLineDiff");let s=this.render(e);this.overlayStack.length>0&&(s=this.compositeOverlays(s,e,t));const w=this.extractCursorPosition(s,t);s=this.applyLineResets(s);const y=this.previousWidth!==0&&this.previousWidth!==e,u=b(o=>{this.fullRedrawCount+=1;let a="";o&&(a+="\x1B[3J\x1B[2J\x1B[H");for(let f=0;f<s.length;f++)f>0&&(a+=`\r
4
+ `),a+=s[f];this.terminal.write(this.wrapRenderBuffer(a)),this.cursorRow=Math.max(0,s.length-1),this.hardwareCursorRow=this.cursorRow,o?this.maxLinesRendered=s.length:this.maxLinesRendered=Math.max(this.maxLinesRendered,s.length),this.previousViewportTop=Math.max(0,this.maxLinesRendered-t),this.positionHardwareCursor(w,s.length),this.previousLines=s,this.previousWidth=e},"fullRender"),v=process.env.CATUI_DEBUG_REDRAW==="1",m=b(o=>{if(!v)return;const a=k.join(V.homedir(),".catui","agent","catui-debug.log"),f=`[${new Date().toISOString()}] fullRender: ${o} (prev=${this.previousLines.length}, new=${s.length}, height=${t})
5
+ `;$.appendFileSync(a,f)},"logRedraw");if(this.previousLines.length===0&&!y){m("first render"),u(!1);return}if(y){m(`width changed (${this.previousWidth} -> ${e})`),u(!0);return}if(this.clearOnShrink&&s.length<this.maxLinesRendered&&this.overlayStack.length===0){m(`clearOnShrink (maxLinesRendered=${this.maxLinesRendered})`),u(!0);return}let h=-1,c=-1;const d=Math.max(s.length,this.previousLines.length);for(let o=0;o<d;o++){const a=o<this.previousLines.length?this.previousLines[o]:"",f=o<s.length?s[o]:"";a!==f&&(h===-1&&(h=o),c=o)}const p=s.length>this.previousLines.length;p&&(h===-1&&(h=this.previousLines.length),c=s.length-1);const x=p&&h===this.previousLines.length&&h>0;if(h===-1){this.positionHardwareCursor(w,s.length),this.previousViewportTop=Math.max(0,this.maxLinesRendered-t);return}if(h>=s.length){if(this.previousLines.length>s.length){let o="";const a=Math.max(0,s.length-1),f=l(a);f>0?o+=`\x1B[${f}B`:f<0&&(o+=`\x1B[${-f}A`),o+="\r";const S=this.previousLines.length-s.length;if(S>t){m(`extraLines > height (${S} > ${t})`),u(!0);return}S>0&&(o+="\x1B[1B");for(let B=0;B<S;B++)o+="\r\x1B[2K",B<S-1&&(o+="\x1B[1B");S>0&&(o+=`\x1B[${S}A`),this.terminal.write(this.wrapRenderBuffer(o)),this.cursorRow=a,this.hardwareCursorRow=a}this.positionHardwareCursor(w,s.length),this.previousLines=s,this.previousWidth=e,this.previousViewportTop=Math.max(0,this.maxLinesRendered-t);return}const C=Math.max(0,this.previousLines.length-t);if(h<C){m(`firstChanged < viewportTop (${h} < ${C})`),u(!0);return}let g="";const M=n+t-1,A=x?h-1:h;if(A>M){const o=Math.max(0,Math.min(t-1,r-n)),a=t-1-o;a>0&&(g+=`\x1B[${a}B`);const f=A-M;g+=`\r
6
+ `.repeat(f),n+=f,i+=f,r=A}const O=l(A);O>0?g+=`\x1B[${O}B`:O<0&&(g+=`\x1B[${-O}A`),g+=x?`\r
7
+ `:"\r";const T=Math.min(c,s.length-1);for(let o=h;o<=T;o++){o>h&&(g+=`\r
8
+ `),g+="\x1B[2K";const a=s[o];if(!I(a)&&L(a)>e){const S=k.join(V.homedir(),".catui","agent","catui-crash.log"),B=[`Crash at ${new Date().toISOString()}`,`Terminal width: ${e}`,`Line ${o} visible width: ${L(a)}`,"","=== All rendered lines ===",...s.map((U,H)=>`[${H}] (w=${L(U)}) ${U}`),""].join(`
9
+ `);$.mkdirSync(k.dirname(S),{recursive:!0}),$.writeFileSync(S,B),this.stop();const z=[`Rendered line ${o} exceeds terminal width (${L(a)} > ${e}).`,"","This is likely caused by a custom TUI component not truncating its output.","Use visibleWidth() to measure and truncateToWidth() to truncate lines.","",`Debug log written to: ${S}`].join(`
10
+ `);throw new Error(z)}g+=a}let E=T;if(this.previousLines.length>s.length){if(T<s.length-1){const a=s.length-1-T;g+=`\x1B[${a}B`,E=s.length-1}const o=this.previousLines.length-s.length;for(let a=s.length;a<this.previousLines.length;a++)g+=`\r
11
+ \x1B[2K`;g+=`\x1B[${o}A`}if(process.env.CATUI_TUI_DEBUG==="1"){const o="/tmp/tui";$.mkdirSync(o,{recursive:!0});const a=k.join(o,`render-${Date.now()}-${Math.random().toString(36).slice(2)}.log`),f=[`firstChanged: ${h}`,`viewportTop: ${i}`,`cursorRow: ${this.cursorRow}`,`height: ${t}`,`lineDiff: ${O}`,`hardwareCursorRow: ${r}`,`renderEnd: ${T}`,`finalCursorRow: ${E}`,`cursorPos: ${JSON.stringify(w)}`,`newLines.length: ${s.length}`,`previousLines.length: ${this.previousLines.length}`,"","=== newLines ===",JSON.stringify(s,null,2),"","=== previousLines ===",JSON.stringify(this.previousLines,null,2),"","=== buffer ===",JSON.stringify(g)].join(`
12
+ `);$.writeFileSync(a,f)}this.terminal.write(this.wrapRenderBuffer(g)),this.cursorRow=Math.max(0,s.length-1),this.hardwareCursorRow=E,this.maxLinesRendered=Math.max(this.maxLinesRendered,s.length),this.previousViewportTop=Math.max(0,this.maxLinesRendered-t),this.positionHardwareCursor(w,s.length),this.previousLines=s,this.previousWidth=e}positionHardwareCursor(e,t){if(!e||t<=0){this.terminal.hideCursor();return}const i=Math.max(0,Math.min(e.row,t-1)),n=Math.max(0,e.col),r=i-this.hardwareCursorRow;let l="";r>0?l+=`\x1B[${r}B`:r<0&&(l+=`\x1B[${-r}A`),l+=`\x1B[${n+1}G`,l&&this.terminal.write(l),this.hardwareCursorRow=i,this.showHardwareCursor?this.terminal.showCursor():this.terminal.hideCursor()}}export{F as CURSOR_MARKER,X as Container,D as TUI,_ as isFocusable,L as visibleWidth};
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Generic undo stack with clone-on-push semantics.
3
+ *
4
+ * Stores deep clones of state snapshots. Popped snapshots are returned
5
+ * directly (no re-cloning) since they are already detached.
6
+ */
7
+ /**
8
+ * [WHO]: UndoStack
9
+ * [FROM]: No external dependencies
10
+ * [TO]: Consumed by core/lib/tui/src/index.ts
11
+ * [HERE]: core/lib/tui/src/undo-stack.ts -
12
+ */
13
+ export declare class UndoStack<S> {
14
+ private stack;
15
+ /** Push a deep clone of the given state onto the stack. */
16
+ push(state: S): void;
17
+ /** Pop and return the most recent snapshot, or undefined if empty. */
18
+ pop(): S | undefined;
19
+ /** Remove all snapshots. */
20
+ clear(): void;
21
+ get length(): number;
22
+ }
@@ -0,0 +1 @@
1
+ var c=Object.defineProperty;var e=(s,t)=>c(s,"name",{value:t,configurable:!0});class a{static{e(this,"UndoStack")}stack=[];push(t){this.stack.push(structuredClone(t))}pop(){return this.stack.pop()}clear(){this.stack.length=0}get length(){return this.stack.length}}export{a as UndoStack};
@@ -0,0 +1,83 @@
1
+ /**
2
+ * [WHO]: getSegmenter, visibleWidth, wrapTextWithAnsi, isWhitespaceChar, isPunctuationChar
3
+ * [FROM]: Depends on get-east-asian-width
4
+ * [TO]: Consumed by core/lib/tui/src/index.ts
5
+ * [HERE]: core/lib/tui/src/utils.ts -
6
+ */
7
+ /**
8
+ * Get the shared grapheme segmenter instance.
9
+ */
10
+ export declare function getSegmenter(): Intl.Segmenter;
11
+ /**
12
+ * Calculate the visible width of a string in terminal columns.
13
+ */
14
+ export declare function visibleWidth(str: string): number;
15
+ /**
16
+ * Extract ANSI escape sequences from a string at the given position.
17
+ */
18
+ export declare function extractAnsiCode(str: string, pos: number): {
19
+ code: string;
20
+ length: number;
21
+ } | null;
22
+ /**
23
+ * Wrap text with ANSI codes preserved.
24
+ *
25
+ * ONLY does word wrapping - NO padding, NO background colors.
26
+ * Returns lines where each line is <= width visible chars.
27
+ * Active ANSI codes are preserved across line breaks.
28
+ *
29
+ * @param text - Text to wrap (may contain ANSI codes and newlines)
30
+ * @param width - Maximum visible width per line
31
+ * @returns Array of wrapped lines (NOT padded to width)
32
+ */
33
+ export declare function wrapTextWithAnsi(text: string, width: number): string[];
34
+ /**
35
+ * Check if a character is whitespace.
36
+ */
37
+ export declare function isWhitespaceChar(char: string): boolean;
38
+ /**
39
+ * Check if a character is punctuation.
40
+ */
41
+ export declare function isPunctuationChar(char: string): boolean;
42
+ /**
43
+ * Apply background color to a line, padding to full width.
44
+ *
45
+ * @param line - Line of text (may contain ANSI codes)
46
+ * @param width - Total width to pad to
47
+ * @param bgFn - Background color function
48
+ * @returns Line with background applied and padded to width
49
+ */
50
+ export declare function applyBackgroundToLine(line: string, width: number, bgFn: (text: string) => string): string;
51
+ /**
52
+ * Truncate text to fit within a maximum visible width, adding ellipsis if needed.
53
+ * Optionally pad with spaces to reach exactly maxWidth.
54
+ * Properly handles ANSI escape codes (they don't count toward width).
55
+ *
56
+ * @param text - Text to truncate (may contain ANSI codes)
57
+ * @param maxWidth - Maximum visible width
58
+ * @param ellipsis - Ellipsis string to append when truncating (default: "...")
59
+ * @param pad - If true, pad result with spaces to exactly maxWidth (default: false)
60
+ * @returns Truncated text, optionally padded to exactly maxWidth
61
+ */
62
+ export declare function truncateToWidth(text: string, maxWidth: number, ellipsis?: string, pad?: boolean): string;
63
+ /**
64
+ * Extract a range of visible columns from a line. Handles ANSI codes and wide chars.
65
+ * @param strict - If true, exclude wide chars at boundary that would extend past the range
66
+ */
67
+ export declare function sliceByColumn(line: string, startCol: number, length: number, strict?: boolean): string;
68
+ /** Like sliceByColumn but also returns the actual visible width of the result. */
69
+ export declare function sliceWithWidth(line: string, startCol: number, length: number, strict?: boolean): {
70
+ text: string;
71
+ width: number;
72
+ };
73
+ /**
74
+ * Extract "before" and "after" segments from a line in a single pass.
75
+ * Used for overlay compositing where we need content before and after the overlay region.
76
+ * Preserves styling from before the overlay that should affect content after it.
77
+ */
78
+ export declare function extractSegments(line: string, beforeEnd: number, afterStart: number, afterLen: number, strictAfter?: boolean): {
79
+ before: string;
80
+ beforeWidth: number;
81
+ after: string;
82
+ afterWidth: number;
83
+ };
@@ -0,0 +1,2 @@
1
+ var $=Object.defineProperty;var g=(e,n)=>$(e,"name",{value:n,configurable:!0});import{eastAsianWidth as R}from"get-east-asian-width";const m=new Intl.Segmenter(void 0,{granularity:"grapheme"});function D(){return m}g(D,"getSegmenter");function y(e){const n=e.codePointAt(0);return n>=126976&&n<=130047||n>=8960&&n<=9215||n>=9728&&n<=10175||n>=11088&&n<=11093||e.includes("\uFE0F")||e.length>2}g(y,"couldBeEmoji");const P=new RegExp("^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$","v"),T=new RegExp("^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+","v"),_=new RegExp("^\\p{RGI_Emoji}$","v"),I=512,C=new Map;function w(e){if(P.test(e))return 0;if(y(e)&&_.test(e))return 2;const o=e.replace(T,"").codePointAt(0);if(o===void 0)return 0;if(o>=127462&&o<=127487)return 2;let t=R(o);if(e.length>1)for(const r of e.slice(1)){const i=r.codePointAt(0);i>=65280&&i<=65519&&(t+=R(i))}return t}g(w,"graphemeWidth");function x(e){if(e.length===0)return 0;let n=!0;for(let i=0;i<e.length;i++){const s=e.charCodeAt(i);if(s<32||s>126){n=!1;break}}if(n)return e.length;const o=C.get(e);if(o!==void 0)return o;let t=e;e.includes(" ")&&(t=t.replace(/\t/g," ")),t.includes("\x1B")&&(t=t.replace(/\x1b\[[0-9;]*[mGKHJ]/g,""),t=t.replace(/\x1b\]8;;[^\x07]*\x07/g,""),t=t.replace(/\x1b_[^\x07\x1b]*(?:\x07|\x1b\\)/g,""));let r=0;for(const{segment:i}of m.segment(t))r+=w(i);if(C.size>=I){const i=C.keys().next().value;i!==void 0&&C.delete(i)}return C.set(e,r),r}g(x,"visibleWidth");function k(e,n){if(n>=e.length||e[n]!=="\x1B")return null;const o=e[n+1];if(o==="["){let t=n+2;for(;t<e.length&&!/[mGKHJ]/.test(e[t]);)t++;return t<e.length?{code:e.substring(n,t+1),length:t+1-n}:null}if(o==="]"){let t=n+2;for(;t<e.length;){if(e[t]==="\x07")return{code:e.substring(n,t+1),length:t+1-n};if(e[t]==="\x1B"&&e[t+1]==="\\")return{code:e.substring(n,t+2),length:t+2-n};t++}return null}if(o==="_"){let t=n+2;for(;t<e.length;){if(e[t]==="\x07")return{code:e.substring(n,t+1),length:t+1-n};if(e[t]==="\x1B"&&e[t+1]==="\\")return{code:e.substring(n,t+2),length:t+2-n};t++}return null}return null}g(k,"extractAnsiCode");class W{static{g(this,"AnsiCodeTracker")}bold=!1;dim=!1;italic=!1;underline=!1;blink=!1;inverse=!1;hidden=!1;strikethrough=!1;fgColor=null;bgColor=null;process(n){if(!n.endsWith("m"))return;const o=n.match(/\x1b\[([\d;]*)m/);if(!o)return;const t=o[1];if(t===""||t==="0"){this.reset();return}const r=t.split(";");let i=0;for(;i<r.length;){const s=Number.parseInt(r[i],10);if(s===38||s===48){if(r[i+1]==="5"&&r[i+2]!==void 0){const l=`${r[i]};${r[i+1]};${r[i+2]}`;s===38?this.fgColor=l:this.bgColor=l,i+=3;continue}else if(r[i+1]==="2"&&r[i+4]!==void 0){const l=`${r[i]};${r[i+1]};${r[i+2]};${r[i+3]};${r[i+4]}`;s===38?this.fgColor=l:this.bgColor=l,i+=5;continue}}switch(s){case 0:this.reset();break;case 1:this.bold=!0;break;case 2:this.dim=!0;break;case 3:this.italic=!0;break;case 4:this.underline=!0;break;case 5:this.blink=!0;break;case 7:this.inverse=!0;break;case 8:this.hidden=!0;break;case 9:this.strikethrough=!0;break;case 21:this.bold=!1;break;case 22:this.bold=!1,this.dim=!1;break;case 23:this.italic=!1;break;case 24:this.underline=!1;break;case 25:this.blink=!1;break;case 27:this.inverse=!1;break;case 28:this.hidden=!1;break;case 29:this.strikethrough=!1;break;case 39:this.fgColor=null;break;case 49:this.bgColor=null;break;default:s>=30&&s<=37||s>=90&&s<=97?this.fgColor=String(s):(s>=40&&s<=47||s>=100&&s<=107)&&(this.bgColor=String(s));break}i++}}reset(){this.bold=!1,this.dim=!1,this.italic=!1,this.underline=!1,this.blink=!1,this.inverse=!1,this.hidden=!1,this.strikethrough=!1,this.fgColor=null,this.bgColor=null}clear(){this.reset()}getActiveCodes(){const n=[];return this.bold&&n.push("1"),this.dim&&n.push("2"),this.italic&&n.push("3"),this.underline&&n.push("4"),this.blink&&n.push("5"),this.inverse&&n.push("7"),this.hidden&&n.push("8"),this.strikethrough&&n.push("9"),this.fgColor&&n.push(this.fgColor),this.bgColor&&n.push(this.bgColor),n.length===0?"":`\x1B[${n.join(";")}m`}hasActiveCodes(){return this.bold||this.dim||this.italic||this.underline||this.blink||this.inverse||this.hidden||this.strikethrough||this.fgColor!==null||this.bgColor!==null}getLineEndReset(){return this.underline?"\x1B[24m":""}}function L(e,n){let o=0;for(;o<e.length;){const t=k(e,o);t?(n.process(t.code),o+=t.length):o++}}g(L,"updateTrackerFromText");function S(e){const n=[];let o="",t="",r=!1,i=0;for(;i<e.length;){const s=k(e,i);if(s){t+=s.code,i+=s.length;continue}const l=e[i],f=l===" ";f!==r&&o&&(n.push(o),o=""),t&&(o+=t,t=""),r=f,o+=l,i++}return t&&(o+=t),o&&n.push(o),n}g(S,"splitIntoTokensWithAnsi");function K(e,n){if(!e)return[""];const o=e.split(`
2
+ `),t=[],r=new W;for(const i of o){const s=t.length>0?r.getActiveCodes():"";t.push(...j(s+i,n)),L(i,r)}return t.length>0?t:[""]}g(K,"wrapTextWithAnsi");function j(e,n){if(!e)return[""];if(x(e)<=n)return[e];const t=[],r=new W,i=S(e);let s="",l=0;for(const f of i){const c=x(f),a=f.trim()==="";if(c>n&&!a){if(s){const h=r.getLineEndReset();h&&(s+=h),t.push(s),s="",l=0}const u=M(f,n,r);t.push(...u.slice(0,-1)),s=u[u.length-1],l=x(s);continue}if(l+c>n&&l>0){let u=s.trimEnd();const h=r.getLineEndReset();h&&(u+=h),t.push(u),a?(s=r.getActiveCodes(),l=0):(s=r.getActiveCodes()+f,l=c)}else s+=f,l+=c;L(f,r)}return s&&t.push(s),t.length>0?t.map(f=>f.trimEnd()):[""]}g(j,"wrapSingleLine");const N=/[(){}[\]<>.,;:'"!?+\-=*/\\|&%^$#@~`]/;function V(e){return/\s/.test(e)}g(V,"isWhitespaceChar");function z(e){return N.test(e)}g(z,"isPunctuationChar");function M(e,n,o){const t=[];let r=o.getActiveCodes(),i=0,s=0;const l=[];for(;s<e.length;){const f=k(e,s);if(f)l.push({type:"ansi",value:f.code}),s+=f.length;else{let c=s;for(;c<e.length&&!k(e,c);)c++;const a=e.slice(s,c);for(const d of m.segment(a))l.push({type:"grapheme",value:d.segment});s=c}}for(const f of l){if(f.type==="ansi"){r+=f.value,o.process(f.value);continue}const c=f.value;if(!c)continue;const a=x(c);if(i+a>n){const d=o.getLineEndReset();d&&(r+=d),t.push(r),r=o.getActiveCodes(),i=0}r+=c,i+=a}return r&&t.push(r),t.length>0?t:[""]}g(M,"breakLongWord");function J(e,n,o){const t=x(e),r=Math.max(0,n-t),i=" ".repeat(r),s=e+i;return o(s)}g(J,"applyBackgroundToLine");function U(e,n,o="...",t=!1){const r=x(e);if(r<=n)return t?e+" ".repeat(n-r):e;const i=x(o),s=n-i;if(s<=0)return o.substring(0,n);let l=0;const f=[];for(;l<e.length;){const u=k(e,l);if(u)f.push({type:"ansi",value:u.code}),l+=u.length;else{let h=l;for(;h<e.length&&!k(e,h);)h++;const b=e.slice(l,h);for(const p of m.segment(b))f.push({type:"grapheme",value:p.segment});l=h}}let c="",a=0;for(const u of f){if(u.type==="ansi"){c+=u.value;continue}const h=u.value;if(!h)continue;const b=x(h);if(a+b>s)break;c+=h,a+=b}const d=`${c}\x1B[0m${o}`;if(t){const u=x(d);return d+" ".repeat(Math.max(0,n-u))}return d}g(U,"truncateToWidth");function O(e,n,o,t=!1){return B(e,n,o,t).text}g(O,"sliceByColumn");function B(e,n,o,t=!1){if(o<=0)return{text:"",width:0};const r=n+o;let i="",s=0,l=0,f=0,c="";for(;f<e.length;){const a=k(e,f);if(a){l>=n&&l<r?i+=a.code:l<n&&(c+=a.code),f+=a.length;continue}let d=f;for(;d<e.length&&!k(e,d);)d++;for(const{segment:u}of m.segment(e.slice(f,d))){const h=w(u),b=l>=n&&l<r,p=!t||l+h<=r;if(b&&p&&(c&&(i+=c,c=""),i+=u,s+=h),l+=h,l>=r)break}if(f=d,l>=r)break}return{text:i,width:s}}g(B,"sliceWithWidth");const E=new W;function X(e,n,o,t,r=!1){let i="",s=0,l="",f=0,c=0,a=0,d="",u=!1;const h=o+t;for(E.clear();a<e.length;){const b=k(e,a);if(b){E.process(b.code),c<n?d+=b.code:c>=o&&c<h&&u&&(l+=b.code),a+=b.length;continue}let p=a;for(;p<e.length&&!k(e,p);)p++;for(const{segment:A}of m.segment(e.slice(a,p))){const v=w(A);if(c<n?(d&&(i+=d,d=""),i+=A,s+=v):c>=o&&c<h&&(!r||c+v<=h)&&(u||(l+=E.getActiveCodes(),u=!0),l+=A,f+=v),c+=v,t<=0?c>=n:c>=h)break}if(a=p,t<=0?c>=n:c>=h)break}return{before:i,beforeWidth:s,after:l,afterWidth:f}}g(X,"extractSegments");export{J as applyBackgroundToLine,k as extractAnsiCode,X as extractSegments,D as getSegmenter,z as isPunctuationChar,V as isWhitespaceChar,O as sliceByColumn,B as sliceWithWidth,U as truncateToWidth,x as visibleWidth,K as wrapTextWithAnsi};
@@ -0,0 +1,21 @@
1
+ /**
2
+ * [WHO]: registerFigmaMcpOAuthProvider()
3
+ * [FROM]: Depends on ai, node:fs, node:http, node:os, node:path, node:child_process
4
+ * [TO]: Consumed by core/runtime/sdk.ts
5
+ * [HERE]: core/mcp/figma-auth.ts - Figma OAuth integration for MCP servers
6
+ */
7
+ import { type OAuthCredentials } from "@catui/ai/oauth";
8
+ export type FigmaOAuthCredentials = OAuthCredentials & {
9
+ clientId: string;
10
+ clientSecret?: string;
11
+ tokenEndpointAuthMethod?: "client_secret_basic" | "client_secret_post" | "none";
12
+ scope?: string;
13
+ source?: string;
14
+ };
15
+ export type FigmaImportableSession = {
16
+ source: string;
17
+ expiresAt: number;
18
+ };
19
+ export declare function findImportableFigmaOAuthSession(): FigmaImportableSession | undefined;
20
+ export declare function refreshFigmaOAuthCredentials(credentials: FigmaOAuthCredentials): Promise<FigmaOAuthCredentials>;
21
+ export declare function registerFigmaMcpOAuthProvider(): void;
@@ -0,0 +1,22 @@
1
+ var P=Object.defineProperty;var i=(e,n)=>P(e,"name",{value:n,configurable:!0});import{registerOAuthProvider as k}from"@catui/ai/oauth";import{existsSync as M,readFileSync as U}from"node:fs";import{createServer as L}from"node:http";import{homedir as v}from"node:os";import{join as x}from"node:path";import{exec as R}from"node:child_process";const g="https://mcp.figma.com/mcp",le="https://mcp.figma.com/.well-known/oauth-protected-resource",O="https://api.figma.com/.well-known/oauth-authorization-server",$="https://www.figma.com/oauth/mcp",C="https://api.figma.com/v1/oauth/token",he="https://api.figma.com/v1/oauth/mcp/register",m="mcp:connect",z="Catui",G="https://github.com/catui-agent/catui-agent",j="https://raw.githubusercontent.com/catui-agent/catui-agent/main/README.md",E=x(v(),".claude",".credentials.json"),A="127.0.0.1",S="/auth/callback",N=[14565,14566,14567,14568,14569],D=`<!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Figma authentication successful</title>
7
+ </head>
8
+ <body>
9
+ <p>Figma authentication completed. Return to Catui.</p>
10
+ </body>
11
+ </html>`,B=`<!doctype html>
12
+ <html lang="en">
13
+ <head>
14
+ <meta charset="utf-8" />
15
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
16
+ <title>Figma authentication failed</title>
17
+ </head>
18
+ <body>
19
+ <p>Figma authentication failed. You can close this window and retry from Catui.</p>
20
+ </body>
21
+ </html>`;function I(e){let n="";for(const t of e)n+=String.fromCharCode(t);return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}i(I,"base64urlEncode");async function H(){const e=new Uint8Array(32);crypto.getRandomValues(e);const n=I(e),t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(n)),r=I(new Uint8Array(t));return{verifier:n,challenge:r}}i(H,"generatePKCE");function K(e){const n=process.platform==="darwin"?`open "${e}"`:process.platform==="win32"?`start "" "${e}"`:`xdg-open "${e}"`;R(n,()=>{})}i(K,"openBrowser");function W(){const e=new Uint8Array(16);return crypto.getRandomValues(e),Buffer.from(e).toString("hex")}i(W,"createState");function J(e,n){if(!(!e.accessToken||!e.refreshToken||!e.clientId))return{access:e.accessToken,refresh:e.refreshToken,expires:typeof e.expiresAt=="number"?e.expiresAt:0,clientId:e.clientId,clientSecret:e.clientSecret,tokenEndpointAuthMethod:e.clientSecret?"client_secret_basic":"none",scope:e.stepUpScope||m,source:n}}i(J,"normalizeImportedCredentials");function F(){if(M(E))try{const e=JSON.parse(U(E,"utf-8"));return Object.values(e.mcpOAuth??{}).filter(t=>t.serverUrl===g).map(t=>J(t,"Claude Code")).filter(t=>!!t).sort((t,r)=>r.expires-t.expires)[0]}catch{return}}i(F,"loadClaudeFigmaCredentials");function fe(){const e=F();if(e)return{source:e.source||"Claude Code",expiresAt:e.expires}}i(fe,"findImportableFigmaOAuthSession");function V(){const e=process.env.CATUI_FIGMA_CLIENT_ID?.trim();if(!e)return;const n=process.env.CATUI_FIGMA_CLIENT_SECRET?.trim()||void 0;return{clientId:e,clientSecret:n,tokenEndpointAuthMethod:n?"client_secret_basic":"none",source:"environment"}}i(V,"loadConfiguredClientInformation");async function q(e,n){const t={"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},r=new URLSearchParams({grant_type:"refresh_token",refresh_token:e.refresh,resource:g});if(n==="client_secret_basic"){if(!e.clientSecret)return;const o=Buffer.from(`${e.clientId}:${e.clientSecret}`,"utf8").toString("base64");t.Authorization=`Basic ${o}`}else r.set("client_id",e.clientId),n==="client_secret_post"&&e.clientSecret&&r.set("client_secret",e.clientSecret);const a=await fetch(C,{method:"POST",headers:t,body:r});if(!a.ok)return;const c=await a.json();if(!(!c.access_token||typeof c.expires_in!="number"))return{...e,access:c.access_token,refresh:c.refresh_token||e.refresh,expires:Date.now()+c.expires_in*1e3}}i(q,"requestRefresh");async function y(e){const n=e.tokenEndpointAuthMethod??(e.clientSecret?"client_secret_basic":"none"),t=n==="client_secret_basic"?["client_secret_basic","client_secret_post","none"]:n==="client_secret_post"?["client_secret_post","client_secret_basic","none"]:["none","client_secret_basic","client_secret_post"];for(const r of t){const a=await q(e,r);if(a)return{...a,tokenEndpointAuthMethod:r}}throw new Error("Failed to refresh Figma MCP OAuth credentials")}i(y,"refreshFigmaOAuthCredentials");async function Y(){const e=await fetch(O,{headers:{Accept:"application/json"}});if(!e.ok)throw new Error(`Failed to fetch Figma authorization metadata (${e.status} ${e.statusText})`);return await e.json()}i(Y,"fetchAuthorizationServerMetadata");async function Q(e,n){if(!n.registration_endpoint)return;const t=await fetch(n.registration_endpoint,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({client_name:z,redirect_uris:[e],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"client_secret_basic",client_uri:G,client_metadata_url:j,scope:m})});if(!t.ok)return;const r=await t.json();if(r.client_id)return{clientId:r.client_id,clientSecret:r.client_secret,tokenEndpointAuthMethod:r.token_endpoint_auth_method||(r.client_secret?"client_secret_basic":"none"),source:"dynamic-registration"}}i(Q,"registerCatuiClient");function T(e){const n=e.trim();if(!n)return{};try{const t=new URL(n);return{code:t.searchParams.get("code")??void 0,state:t.searchParams.get("state")??void 0}}catch{}if(n.includes("code=")){const t=new URLSearchParams(n);return{code:t.get("code")??void 0,state:t.get("state")??void 0}}return{code:n}}i(T,"parseAuthorizationInput");async function X(e){let n=null,t=!1;for(const r of N)try{const a=await new Promise((c,o)=>{const s=L((f,u)=>{try{const l=new URL(f.url||"",`http://${A}:${r}`);if(l.pathname!==S){u.statusCode=404,u.end("Not found");return}const h=l.searchParams.get("code"),p=l.searchParams.get("state"),_=l.searchParams.get("error");if(h&&p){n={code:h,state:p},u.statusCode=200,u.setHeader("Content-Type","text/html; charset=utf-8"),u.end(D);return}u.statusCode=400,u.setHeader("Content-Type","text/html; charset=utf-8"),u.end(B+(_?`
22
+ <!-- ${_} -->`:""))}catch{u.statusCode=500,u.end("Internal error")}});s.once("error",o),s.listen(r,A,()=>{s.removeListener("error",o),c(s)})});return e?.addEventListener("abort",()=>{t=!0,a.close()},{once:!0}),{server:a,redirectUri:`http://${A}:${r}${S}`,cancelWait:i(()=>{t=!0},"cancelWait"),waitForCode:i(async()=>{const c=i(()=>new Promise(o=>setTimeout(o,100)),"sleep");for(let o=0;o<1800;o+=1){if(n)return n;if(t)return null;await c()}return null},"waitForCode")}}catch{}throw new Error("Failed to start a local OAuth callback server for Figma")}i(X,"startCallbackServer");function Z(e,n,t,r,a,c){const o=new URL(c.authorization_endpoint||$);return o.searchParams.set("response_type","code"),o.searchParams.set("client_id",e.clientId),o.searchParams.set("redirect_uri",n),o.searchParams.set("scope",a),o.searchParams.set("code_challenge",r),o.searchParams.set("code_challenge_method","S256"),o.searchParams.set("state",t),o.searchParams.set("resource",g),o.toString()}i(Z,"buildAuthorizationUrl");async function ee(e,n,t,r){const a=r.tokenEndpointAuthMethod??(r.clientSecret?"client_secret_basic":"none"),c={"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},o=new URLSearchParams({grant_type:"authorization_code",code:e,code_verifier:n,redirect_uri:t,resource:g});if(a==="client_secret_basic"){if(!r.clientSecret)throw new Error("Figma OAuth client is missing client_secret for client_secret_basic");c.Authorization=`Basic ${Buffer.from(`${r.clientId}:${r.clientSecret}`,"utf8").toString("base64")}`}else o.set("client_id",r.clientId),a==="client_secret_post"&&r.clientSecret&&o.set("client_secret",r.clientSecret);const s=await fetch(C,{method:"POST",headers:c,body:o});if(!s.ok){const u=await s.text().catch(()=>"");throw new Error(`Figma authorization code exchange failed (${s.status} ${s.statusText})${u?`: ${u}`:""}`)}const f=await s.json();if(!f.access_token||!f.refresh_token||typeof f.expires_in!="number")throw new Error("Figma OAuth token response did not include the expected fields");return{access:f.access_token,refresh:f.refresh_token,expires:Date.now()+f.expires_in*1e3,clientId:r.clientId,clientSecret:r.clientSecret,tokenEndpointAuthMethod:a,scope:m,source:r.source||"catui"}}i(ee,"exchangeAuthorizationCode");async function te(e){e.onProgress?.("Preparing a standalone Figma OAuth flow...");const n=await Y(),t=await X(e.signal);try{const a=V()||await Q(t.redirectUri,n);if(!a)throw new Error("Catui could not complete Figma dynamic client registration. Set CATUI_FIGMA_CLIENT_ID and CATUI_FIGMA_CLIENT_SECRET, or keep using the import fallback for now.");const{verifier:c,challenge:o}=await H(),s=W(),f=(n.scopes_supported?.includes(m),m),u=Z(a,t.redirectUri,s,o,f,n);e.onAuth({url:u,instructions:"A browser window should open. Approve Figma access to finish linking Catui."}),K(u);let l;if(e.onManualCodeInput){let h,p;const _=e.onManualCodeInput().then(d=>{h=d,t.cancelWait()}).catch(d=>{p=d instanceof Error?d:new Error(String(d)),t.cancelWait()}),w=await t.waitForCode();if(p)throw p;if(w?.code){if(w.state!==s)throw new Error("Figma OAuth state mismatch");l=w.code}else if(h){const d=T(h);if(d.state&&d.state!==s)throw new Error("Figma OAuth state mismatch");l=d.code}if(!l){if(await _,p)throw p;if(h){const d=T(h);if(d.state&&d.state!==s)throw new Error("Figma OAuth state mismatch");l=d.code}}}else{const h=await t.waitForCode();if(h?.state&&h.state!==s)throw new Error("Figma OAuth state mismatch");l=h?.code}if(!l)throw new Error("Figma OAuth did not complete");return e.onProgress?.("Finishing Figma authorization..."),await ee(l,c,t.redirectUri,a)}finally{t.server.close()}}i(te,"loginWithStandaloneOAuth");async function ne(e){try{return await te(e)}catch(n){e.onProgress?.("Standalone Figma OAuth was unavailable. Checking for an importable official session...");const t=F();if(!t)throw n;return e.onProgress?.(`Refreshing the imported Figma session from ${t.source}...`),await y(t)}}i(ne,"loginFigma");const re={id:"figma",name:"Figma MCP",usesCallbackServer:!0,async login(e){return await ne(e)},async refreshToken(e){return await y(e)},getApiKey(e){return String(e.access??"")}};let b=!1;function pe(){b||(k(re),b=!0)}i(pe,"registerFigmaMcpOAuthProvider");export{fe as findImportableFigmaOAuthSession,y as refreshFigmaOAuthCredentials,pe as registerFigmaMcpOAuthProvider};
@@ -0,0 +1,11 @@
1
+ /**
2
+ * [WHO]: MCP module barrel exports
3
+ * [FROM]: Depends on mcp-client, mcp-adapter, mcp-config, mcp-guidance, figma-auth
4
+ * [TO]: Consumed by core/index.ts
5
+ * [HERE]: core/mcp/index.ts - MCP module public API
6
+ */
7
+ export { MCPClient } from "./mcp-client.js";
8
+ export type { MCPServerConfig, MCPTool, MCPToolResult } from "./mcp-types.js";
9
+ export { createMCPTool, getMCPToolDisplayName, loadMCPTools, } from "./mcp-adapter.js";
10
+ export { API_KEY_GUIDANCE, formatGuidanceMessage, getAPIKeyGuidance, getMissingKeyServers, getOptionalAPIKeyServers, requiresAPIKey, } from "./mcp-guidance.js";
11
+ export type { APIKeyGuidance } from "./mcp-guidance.js";
@@ -0,0 +1 @@
1
+ import{MCPClient as r}from"./mcp-client.js";import{createMCPTool as a,getMCPToolDisplayName as s,loadMCPTools as i}from"./mcp-adapter.js";import{API_KEY_GUIDANCE as l,formatGuidanceMessage as g,getAPIKeyGuidance as C,getMissingKeyServers as M,getOptionalAPIKeyServers as m,requiresAPIKey as n}from"./mcp-guidance.js";export{l as API_KEY_GUIDANCE,r as MCPClient,a as createMCPTool,g as formatGuidanceMessage,C as getAPIKeyGuidance,s as getMCPToolDisplayName,M as getMissingKeyServers,m as getOptionalAPIKeyServers,i as loadMCPTools,n as requiresAPIKey};
@@ -0,0 +1,21 @@
1
+ /**
2
+ * [WHO]: createMCPTool(), loadMCPTools(), getMCPToolDisplayName()
3
+ * [FROM]: Depends on extensions, mcp-client, mcp-guidance
4
+ * [TO]: Consumed by core/mcp/index.ts, core/mcp/mcp-manager.ts
5
+ * [HERE]: core/mcp/mcp-adapter.ts - adapts MCP tools to Catui tool system
6
+ */
7
+ import type { ToolDefinition } from "../extensions-host/index.js";
8
+ import type { MCPClient } from "./mcp-client.js";
9
+ import type { MCPTool } from "./mcp-types.js";
10
+ /**
11
+ * Create a Catui ToolDefinition from an MCP tool definition
12
+ */
13
+ export declare function createMCPTool(mcpClient: MCPClient, mcpTool: MCPTool): ToolDefinition;
14
+ /**
15
+ * Load all MCP tools as Catui ToolDefinitions
16
+ */
17
+ export declare function loadMCPTools(mcpClient: MCPClient): Promise<ToolDefinition[]>;
18
+ /**
19
+ * Get a human-readable display name for an MCP tool
20
+ */
21
+ export declare function getMCPToolDisplayName(mcpTool: MCPTool): string;
@@ -0,0 +1,3 @@
1
+ var f=Object.defineProperty;var s=(t,n)=>f(t,"name",{value:n,configurable:!0});import{formatGuidanceMessage as l,getAPIKeyGuidance as u}from"./mcp-guidance.js";function m(t){const n=`mcp_${t.replace(/[^a-zA-Z0-9_-]/g,"_")}`;if(n.length<=60)return n;let e=0;for(let a=0;a<t.length;a++)e=e*31+t.charCodeAt(a)|0;const i=Math.abs(e).toString(36);return`${n.slice(0,50)}_${i}`}s(m,"toSafeToolName");function x(t,n){const e=n.name,i=m(e),[a]=e.split("/");return{name:i,label:e,description:`${n.description} (MCP: ${e})`,parameters:n.inputSchema??{type:"object",properties:{},additionalProperties:!0},async execute(y,p,g,$,h){try{const r=await t.callTool(e,p);if(r.error){const o=u(a);return o&&r.error?.toLowerCase().includes("key")?{content:[{type:"text",text:l(o,!0)}],details:{error:r.error}}:{content:[{type:"text",text:r.content.map(d=>d.text||"").join(`
2
+ `)}],details:{error:r.error}}}return{content:[{type:"text",text:r.content.map(o=>o.type==="text"?o.text||"":o.type==="image"?`[Image: ${o.data?.uri||"unknown"}]`:o.type==="resource"?`[Resource: ${JSON.stringify(o.data)}]`:"").filter(Boolean).join(`
3
+ `)}],details:void 0}}catch(r){const c=u(a);return c&&String(r).toLowerCase().includes("key")?{content:[{type:"text",text:l(c,!0)}],details:{error:r instanceof Error?r.message:String(r)}}:{content:[{type:"text",text:`Failed to call MCP tool ${e}`}],details:{error:r instanceof Error?r.message:String(r)}}}}}}s(x,"createMCPTool");async function M(t){return(await t.listTools()).map(e=>x(t,e))}s(M,"loadMCPTools");function S(t){if(t.displayName)return t.displayName;const[n,...e]=t.name.split("/"),i=e.join("/");return`${n}/${i}`}s(S,"getMCPToolDisplayName");export{x as createMCPTool,S as getMCPToolDisplayName,M as loadMCPTools};
@@ -0,0 +1,91 @@
1
+ import type { MCPServerConfig, MCPTool, MCPToolResult } from "./mcp-types.js";
2
+ /**
3
+ * MCP Client class
4
+ * Manages connections to MCP servers and tool calls
5
+ */
6
+ export declare class MCPClient {
7
+ private servers;
8
+ private serverRuntimes;
9
+ private serverTools;
10
+ private httpSessions;
11
+ private authStorage;
12
+ private agentDir?;
13
+ private mcpConfigPath?;
14
+ /**
15
+ * @param authStoragePath Optional path to auth.json. If omitted, uses getAgentDir()/auth.json.
16
+ * @param agentDir Optional agent directory for config path resolution. If omitted, uses getAgentDir().
17
+ * @param mcpConfigPath Optional explicit MCP config file path. Overrides default resolution.
18
+ */
19
+ constructor(authStoragePath?: string, agentDir?: string, mcpConfigPath?: string);
20
+ /**
21
+ * Load MCP server configurations from config file
22
+ */
23
+ private loadServersFromConfig;
24
+ /**
25
+ * Get all configured servers
26
+ */
27
+ getServers(): MCPServerConfig[];
28
+ /**
29
+ * Get a specific server by ID
30
+ */
31
+ getServer(id: string): MCPServerConfig | undefined;
32
+ /**
33
+ * Add or update a server configuration
34
+ */
35
+ addServer(server: MCPServerConfig): void;
36
+ /**
37
+ * Remove a server
38
+ */
39
+ removeServer(id: string): void;
40
+ private getRuntime;
41
+ private convertNpxArgsToNpmExecArgs;
42
+ private getSpawnAttempts;
43
+ private spawnProcess;
44
+ private attachStdoutParser;
45
+ private processStdoutBuffer;
46
+ private handleJsonRpcMessage;
47
+ private writeFramedMessage;
48
+ private sendNotification;
49
+ private sendRequest;
50
+ private getHttpSession;
51
+ private buildHttpHeaders;
52
+ private ensureHttpInitialized;
53
+ private sendHttpRequest;
54
+ private parseEventStreamResponse;
55
+ private initializeServer;
56
+ private normalizeToolRecord;
57
+ private loadToolsForServer;
58
+ /**
59
+ * Start an MCP server (for stdio transport)
60
+ */
61
+ startServer(serverId: string): Promise<boolean>;
62
+ /**
63
+ * Stop an MCP server
64
+ */
65
+ stopServer(serverId: string): void;
66
+ /**
67
+ * Stop all running servers
68
+ */
69
+ stopAllServers(): void;
70
+ /**
71
+ * List available tools from all servers
72
+ */
73
+ listTools(serverId?: string): Promise<MCPTool[]>;
74
+ /**
75
+ * Call an MCP tool
76
+ */
77
+ callTool(toolName: string, args: Record<string, unknown>, timeoutMs?: number): Promise<MCPToolResult>;
78
+ private callHttpTool;
79
+ /**
80
+ * Call tool via stdio (JSON-RPC)
81
+ */
82
+ private callStdioTool;
83
+ /**
84
+ * Call tool via SSE (HTTP)
85
+ */
86
+ private callSSETool;
87
+ /**
88
+ * Check if a tool exists
89
+ */
90
+ hasTool(toolName: string): boolean;
91
+ }
@@ -0,0 +1,6 @@
1
+ var T=Object.defineProperty;var p=(c,t)=>T(c,"name",{value:t,configurable:!0});import{spawn as w}from"child_process";import{existsSync as v,readFileSync as $}from"fs";import{join as R}from"path";import{getAgentDir as E}from"../../config.js";import{AuthStorage as C}from"../platform/config/auth-storage.js";import{getMCPConfigPath as b}from"./mcp-config.js";const y=["1","true","yes","on"].includes((process.env.CATUI_DEBUG??"").toLowerCase());function g(...c){y&&console.error(...c)}p(g,"mcpLog");function F(...c){y&&console.warn(...c)}p(F,"mcpWarn");function x(...c){console.error(...c)}p(x,"mcpError");function M(c){if(c==null)return"Unknown error";if(c instanceof Error){const t=c.message?.trim();return t.length>0?t:c.name&&c.name!=="Error"?c.name:"Error (empty message)"}if(typeof c=="string")return c;try{return JSON.stringify(c)}catch{return String(c)}}p(M,"formatUnknownError");function P(c,t,e){const s=M(e);g(c==="http"?`[MCP] HTTP init failed ${t}: ${s}`:`[MCP] stdio start failed ${t}: ${s}`)}p(P,"logMcpStartupFailure");class O{static{p(this,"MCPClient")}servers=new Map;serverRuntimes=new Map;serverTools=new Map;httpSessions=new Map;authStorage;agentDir;mcpConfigPath;constructor(t,e,s){this.agentDir=e,this.mcpConfigPath=s;const n=t??R(e??E(),"auth.json");this.authStorage=C.create(n),this.loadServersFromConfig()}loadServersFromConfig(){const t=b(this.agentDir,this.mcpConfigPath);if(v(t))try{const s=JSON.parse($(t,"utf-8")).mcpServers||[];for(const n of s)n.enabled!==!1&&this.servers.set(n.id,n)}catch(e){x(`Failed to load MCP config: ${e}`)}}getServers(){return Array.from(this.servers.values())}getServer(t){return this.servers.get(t)}addServer(t){this.servers.set(t.id,t)}removeServer(t){this.servers.delete(t),this.serverTools.delete(t),this.stopServer(t)}getRuntime(t){return this.serverRuntimes.get(t)}convertNpxArgsToNpmExecArgs(t){if(t.length===0)return;const e=[...t];(e[0]==="-y"||e[0]==="--yes")&&e.shift();const s=e.shift();if(s)return["exec","--yes",s,...e.length>0?["--",...e]:[]]}getSpawnAttempts(t){if(!t.command)return[];const e=[],s=t.command.trim(),n=s.toLowerCase(),r=t.args??[];if(process.platform==="win32"&&n==="npx"){e.push({command:"npx.cmd",args:r});const o=this.convertNpxArgsToNpmExecArgs(r);return o&&e.push({command:"npm.cmd",args:o}),e.push({command:"npx",args:r}),e}if(e.push({command:s,args:r}),n==="npx"){const o=this.convertNpxArgsToNpmExecArgs(r);o&&e.push({command:process.platform==="win32"?"npm.cmd":"npm",args:o})}return e}async spawnProcess(t,e,s){return await new Promise((n,r)=>{const a=process.platform==="win32"?w([t.command,...t.args].map(u=>u.includes(" ")?`"${u}"`:u).join(" "),{env:e,cwd:s,stdio:["pipe","pipe","pipe"],windowsHide:!0,shell:!0}):w(t.command,t.args,{env:e,cwd:s,stdio:["pipe","pipe","pipe"],windowsHide:!0,shell:!1}),i=p(u=>{a.removeListener("spawn",l),r(u)},"onError"),l=p(()=>{a.removeListener("error",i),n(a)},"onSpawn");a.once("error",i),a.once("spawn",l)})}attachStdoutParser(t,e){const s=p(n=>{if(this.serverRuntimes.get(t)===e){for(const r of e.pendingRequests.values())clearTimeout(r.timer),r.reject(n);e.pendingRequests.clear(),this.serverRuntimes.delete(t)}},"rejectPending");e.process.stdin.on("error",n=>{const o=n.code==="EPIPE"?"process exited before MCP handshake (check command and npm package name)":n instanceof Error?n.message:String(n);g(`[MCP:${t}] stdin: ${o}`),s(new Error(`MCP server ${t} stdin closed: ${o}`))}),e.process.stdout.on("data",n=>{e.buffer=Buffer.concat([e.buffer,n]),this.processStdoutBuffer(t,e)}),e.process.stderr.on("data",n=>{const r=n.toString("utf8").trim();r.length>0&&y&&x(`[MCP:${t}] ${r}`)}),e.process.on("exit",(n,r)=>{if(this.serverRuntimes.get(t)!==e)return;const o=`[MCP:debug] Server exited: code=${n??"null"}, signal=${r??"null"}`;g(o),s(new Error(o))}),e.process.on("error",n=>{const r=`MCP server ${t} process error: ${n instanceof Error?n.message:String(n)}`;s(new Error(r))})}processStdoutBuffer(t,e){for(;e.buffer.length>0;){const s=e.buffer.indexOf(`
2
+ `);if(s===-1)return;const n=e.buffer.slice(0,s).toString("utf8").replace(/\r$/,"");e.buffer=e.buffer.slice(s+1),n.length>0&&(g(`[MCP:${t}] Received: ${n.slice(0,200)}`),this.handleJsonRpcMessage(t,n))}}handleJsonRpcMessage(t,e){let s;try{s=JSON.parse(e)}catch{return}if(s.id===void 0)return;const n=typeof s.id=="number"?s.id:Number(s.id);if(!Number.isFinite(n))return;const r=this.serverRuntimes.get(t);if(!r)return;const o=r.pendingRequests.get(n);if(o){if(clearTimeout(o.timer),r.pendingRequests.delete(n),s.error){o.reject(new Error(s.error.message||`JSON-RPC error ${s.error.code??"unknown"}`));return}o.resolve(s.result)}}writeFramedMessage(t,e){const n=JSON.stringify(e)+`
3
+ `;t.process.stdin.write(n)}sendNotification(t,e,s){const n=this.servers.get(t);if(n?.transport==="http"){this.sendHttpRequest(n,e,s,2e4,!0);return}const r=this.getRuntime(t);r&&this.writeFramedMessage(r,{jsonrpc:"2.0",method:e,params:s??{}})}async sendRequest(t,e,s,n=2e4){const r=this.servers.get(t);if(!r)throw new Error(`Server ${t} not found`);if(r.transport==="http")return await this.sendHttpRequest(r,e,s,n);const o=this.getRuntime(t);if(!o)throw new Error(`Server ${t} is not running`);const a=o.nextRequestId++,i={jsonrpc:"2.0",id:a,method:e,params:s??{}};return new Promise((l,u)=>{const h=setTimeout(()=>{o.pendingRequests.delete(a),u(new Error(`MCP request timed out: ${t} ${e} (${n}ms)`))},n);o.pendingRequests.set(a,{resolve:p(f=>l(f),"resolve"),reject:u,timer:h}),this.writeFramedMessage(o,i)})}getHttpSession(t){const e=this.httpSessions.get(t);if(e)return e;const s={initialized:!1};return this.httpSessions.set(t,s),s}async buildHttpHeaders(t,e){const s={"Content-Type":"application/json",Accept:"application/json, text/event-stream","MCP-Protocol-Version":"2025-03-26",...t.headers??{}};if(e&&(s["Mcp-Session-Id"]=e),t.authProvider){const n=await this.authStorage.getApiKey(t.authProvider);if(n){const r=t.authHeaderName?.trim()||"Authorization",o=t.authScheme??"bearer";s[r]=o==="raw"?n:`Bearer ${n}`}}return s}async ensureHttpInitialized(t){const e=this.getHttpSession(t.id);if(e.initialized)return;const s={protocolVersion:"2024-11-05",capabilities:{},clientInfo:{name:"catui-agent",version:"1.11.12"}};await this.sendHttpRequest(t,"initialize",s,t.initTimeout??2e4),e.initialized=!0,await this.sendHttpRequest(t,"notifications/initialized",{},t.initTimeout??2e4,!0)}async sendHttpRequest(t,e,s,n,r=!1,o=!0){if(!t.url)throw new Error(`HTTP MCP server ${t.id} is missing a url`);const a=this.getHttpSession(t.id);e!=="initialize"&&!a.initialized&&await this.ensureHttpInitialized(t);const i=r?void 0:Date.now()+Math.floor(Math.random()*1e3),l=r?{jsonrpc:"2.0",method:e,params:s??{}}:{jsonrpc:"2.0",id:i,method:e,params:s??{}},u=await fetch(t.url,{method:"POST",headers:await this.buildHttpHeaders(t,e==="initialize"?void 0:a.sessionId),body:JSON.stringify(l),signal:AbortSignal.timeout(n)});if(u.status===404&&a.sessionId&&o&&e!=="initialize")return this.httpSessions.set(t.id,{initialized:!1}),this.sendHttpRequest(t,e,s,n,r,!1);if(!u.ok){if(u.status===401&&t.authProvider)throw new Error(`HTTP MCP request failed (401 Unauthorized). The ${t.id} server requires valid credentials for "${t.authProvider}". Re-authenticate and try again.`);const S=await u.text().catch(()=>"");throw new Error(`HTTP MCP request failed (${u.status} ${u.statusText})${S?`: ${S}`:""}`)}const h=u.headers.get("Mcp-Session-Id");if(h&&(a.sessionId=h),r)return;const f=u.headers.get("content-type")??"",m=await u.text();if(!m.trim())return;let d;if(f.includes("text/event-stream"))d=this.parseEventStreamResponse(m);else{if(!f.includes("application/json")&&!m.trim().startsWith("{"))throw new Error(`Unsupported HTTP MCP response content type: ${f||"unknown"}`);d=JSON.parse(m)}if(d.error)throw new Error(d.error.message||`JSON-RPC error ${d.error.code??"unknown"}`);return d.result}parseEventStreamResponse(t){const e=[];let s={};for(const r of t.split(/\r?\n/)){if(!r.trim()){(s.data!==void 0||s.event!==void 0)&&(e.push(s),s={});continue}if(r.startsWith(":"))continue;const o=r.indexOf(":"),a=o===-1?r:r.slice(0,o),i=o===-1?"":r.slice(o+1).trimStart();a==="event"?s.event=i:a==="data"&&(s.data=s.data?`${s.data}
4
+ ${i}`:i)}(s.data!==void 0||s.event!==void 0)&&e.push(s);const n=[...e].reverse().find(r=>typeof r.data=="string"&&r.data.trim().length>0)?.data;if(!n)throw new Error("HTTP MCP event-stream response did not include a JSON payload");return JSON.parse(n)}async initializeServer(t){const e=this.servers.get(t),s=e?.command?.toLowerCase().includes("npx")??!1,r=process.platform==="win32"&&s?1500:500;await new Promise(l=>setTimeout(l,r));const o=e?.initTimeout??2e4,a={protocolVersion:"2024-11-05",capabilities:{},clientInfo:{name:"catui-agent",version:"1.7.0"}},i={protocolVersion:"2024-10-07",capabilities:{},clientInfo:{name:"catui-agent",version:"1.7.0"}};try{await this.sendRequest(t,"initialize",a,o)}catch{await this.sendRequest(t,"initialize",i,o)}this.sendNotification(t,"notifications/initialized")}normalizeToolRecord(t,e){if(!e||typeof e!="object")return null;const s=e,n=s.name,r=s.description;if(typeof n!="string"||typeof r!="string")return null;const o=s.inputSchema&&typeof s.inputSchema=="object"?s.inputSchema:{type:"object",properties:{},additionalProperties:!0};return{name:`${t}/${n}`,displayName:typeof s.title=="string"?s.title:typeof s.displayName=="string"?s.displayName:void 0,description:r,inputSchema:o,serverId:t}}async loadToolsForServer(t){const e=[];let s;for(;;){const n=await this.sendRequest(t,"tools/list",s?{cursor:s}:{},2e4),r=Array.isArray(n.tools)?n.tools:[];for(const a of r){const i=this.normalizeToolRecord(t,a);i&&e.push(i)}const o=typeof n.nextCursor=="string"?n.nextCursor:typeof n.cursor=="string"?n.cursor:void 0;if(!o||o===s)break;s=o}return this.serverTools.set(t,e),e}async startServer(t){const e=this.servers.get(t);if(!e)throw new Error(`Server ${t} not found`);if(e.transport==="http")try{return await this.ensureHttpInitialized(e),await this.loadToolsForServer(t),!0}catch(r){return P("http",t,r),!1}if(e.transport==="sse"||this.serverRuntimes.has(t))return!0;const s=this.getSpawnAttempts(e);let n;for(const r of s)try{const o=e.cwd||process.cwd(),i={process:await this.spawnProcess(r,{...process.env,...e.env},o),buffer:Buffer.alloc(0),nextRequestId:1,pendingRequests:new Map};return this.serverRuntimes.set(t,i),this.attachStdoutParser(t,i),await this.initializeServer(t),await this.loadToolsForServer(t),!0}catch(o){n=o,this.stopServer(t)}return P("stdio",t,n),!1}stopServer(t){const e=this.servers.get(t),s=this.httpSessions.get(t);e?.transport==="http"&&s?.sessionId&&e.url&&this.buildHttpHeaders(e,s.sessionId).then(r=>fetch(e.url,{method:"DELETE",headers:r})).catch(()=>{}),this.httpSessions.delete(t);const n=this.serverRuntimes.get(t);if(n){for(const r of n.pendingRequests.values())clearTimeout(r.timer),r.reject(new Error(`MCP server ${t} stopped`));n.pendingRequests.clear(),n.process.kill(),this.serverRuntimes.delete(t)}}stopAllServers(){const t=new Set([...this.serverRuntimes.keys(),...this.httpSessions.keys()]);for(const e of t)this.stopServer(e)}async listTools(t){const e=[];if(t){if(!this.serverTools.has(t))try{await this.loadToolsForServer(t)}catch{}const s=this.serverTools.get(t)||[];e.push(...s)}else for(const[s]of this.servers.entries()){if(!this.serverTools.has(s))try{await this.loadToolsForServer(s)}catch{}e.push(...this.serverTools.get(s)||[])}return e}async callTool(t,e,s){const[n,...r]=t.split("/"),o=r.join("/"),a=this.servers.get(n);if(!a)return{content:[{type:"text",text:`Server ${n} not found`}],error:`Server ${n} not found`};const i=s??a.toolTimeout??2e4;return a.transport==="sse"?this.callSSETool(a,o,e):a.transport==="http"?this.callHttpTool(a,o,e,i):this.callStdioTool(a,o,e,i)}async callHttpTool(t,e,s,n=2e4){try{const r=await this.sendRequest(t.id,"tools/call",{name:e,arguments:s},n),o=r.isError===!0,a=Array.isArray(r.content)?r.content.map(i=>({type:i.type==="image"||i.type==="resource"?i.type:"text",text:typeof i.text=="string"?i.text:typeof i.message=="string"?i.message:void 0,data:i})):[{type:"text",text:JSON.stringify(r)}];return{content:a,error:o?a.map(i=>i.text).filter(i=>!!i).join(`
5
+ `)||`MCP tool ${e} failed`:void 0}}catch(r){return{content:[{type:"text",text:`Failed to call tool: ${r}`}],error:String(r)}}}async callStdioTool(t,e,s,n=2e4){if(!this.serverRuntimes.has(t.id))return{content:[{type:"text",text:`Server ${t.id} is not running`}],error:`Server ${t.id} is not running`};try{const r=await this.sendRequest(t.id,"tools/call",{name:e,arguments:s},n),o=r.isError===!0,a=Array.isArray(r.content)?r.content.map(i=>({type:i.type==="image"||i.type==="resource"?i.type:"text",text:typeof i.text=="string"?i.text:typeof i.message=="string"?i.message:void 0,data:i})):[{type:"text",text:JSON.stringify(r)}];return{content:a,error:o?a.map(i=>i.text).filter(i=>!!i).join(`
6
+ `)||`MCP tool ${e} failed`:void 0}}catch(r){return{content:[{type:"text",text:`Failed to call tool: ${r}`}],error:String(r)}}}async callSSETool(t,e,s){return{content:[{type:"text",text:`SSE transport is not implemented yet for ${t.id}/${e}`}],error:"SSE transport not yet supported"}}hasTool(t){const[e]=t.split("/");return this.servers.has(e)}}export{O as MCPClient};