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,40 @@
1
+ /**
2
+ * [WHO]: Extension interface, AI-driven personalized greetings and idle cues
3
+ * [FROM]: Depends on @catui/tui, core/extensions-host/types.js, core/platform/i18n, node:path, node:url, node:fs
4
+ * [TO]: Loaded by core/extensions-host/loader.ts as extension entry point
5
+ * [HERE]: extensions/builtin/presence/index.ts - AI-generated opening + idle presence lines from memory (episodes/preferences/lessons) + git snapshot (branch/last commit/changed files) + soul personality traits and identity/style preferences, injects last MAX_RECENT_PRESENCE lines into agent systemPrompt per turn, configurable via settings.presence.enabled, canSendOpening guards against agent-is-busy race
6
+ */
7
+ import type { ExtensionAPI } from "../../../core/extensions-host/types.js";
8
+ import { collectIdentityPreferenceHighlights, detectLanguageFromMemory } from "./presence-memory.js";
9
+ /**
10
+ * Read persona-specific presence lines from the active persona's CATUI.md.
11
+ * Parses `## Presence` section for `### Opening Lines` or `### Idle Lines` blocks.
12
+ * Returns empty array if no persona or no matching section found.
13
+ */
14
+ declare function getPersonaPresenceLines(kind: "opening" | "idle"): string[];
15
+ declare function getFallbackOpeningLines(locale?: "en" | "zh"): string[];
16
+ declare function getFallbackIdleLines(locale?: "en" | "zh"): string[];
17
+ declare function resolveBundledPackageEntry(packageName: "mem-core" | "soul-core"): string | undefined;
18
+ declare function getOpeningDelayMs(): number;
19
+ declare function importRuntimeModule<T>(moduleNames: string[], bundledPackageName?: "mem-core" | "soul-core"): Promise<T | undefined>;
20
+ type PresenceSoulHints = {
21
+ traits: string[];
22
+ tone?: string;
23
+ identityPreferences: string[];
24
+ };
25
+ declare function collectSoulHints(soulManager: unknown): PresenceSoulHints;
26
+ declare function buildPresenceSystemPrompt(locale: "en" | "zh", soulHints: PresenceSoulHints, kind: "opening" | "idle"): string;
27
+ export default function presenceExtension(api: ExtensionAPI): Promise<void>;
28
+ export declare const __testUtils: {
29
+ getFallbackOpeningLines: typeof getFallbackOpeningLines;
30
+ getFallbackIdleLines: typeof getFallbackIdleLines;
31
+ getPersonaPresenceLines: typeof getPersonaPresenceLines;
32
+ resolveBundledPackageEntry: typeof resolveBundledPackageEntry;
33
+ importRuntimeModule: typeof importRuntimeModule;
34
+ detectLanguageFromMemory: typeof detectLanguageFromMemory;
35
+ collectIdentityPreferenceHighlights: typeof collectIdentityPreferenceHighlights;
36
+ getOpeningDelayMs: typeof getOpeningDelayMs;
37
+ collectSoulHints: typeof collectSoulHints;
38
+ buildPresenceSystemPrompt: typeof buildPresenceSystemPrompt;
39
+ };
40
+ export {};
@@ -0,0 +1,15 @@
1
+ var K=Object.defineProperty;var u=(e,n)=>K(e,"name",{value:n,configurable:!0});import{Box as Y,Container as W,Spacer as q,Text as J}from"@catui/tui";import{getLocale as y,tValue as E}from"../../../core/platform/i18n/index.js";import{dirname as V,join as w}from"node:path";import{execFile as X}from"node:child_process";import{promisify as Q}from"node:util";import{existsSync as $,readFileSync as Z,realpathSync as H}from"node:fs";import{fileURLToPath as ee,pathToFileURL as ne}from"node:url";import{collectIdentityPreferenceHighlights as T,collectMemoryHighlights as te,detectLanguageFromMemory as L,getMemoryDir as re,getProject as ie}from"./presence-memory.js";const oe=Q(X),se=V(ee(import.meta.url)),A="presence",_=1200,ce=15e3,ae=240*1e3,ue=8e3,fe=3e4,le=200;function P(e){const n=process.env.NANO_PERSONA_DIR;if(!n)return[];const t=w(n,"CATUI.md");if(!$(t))return[];try{const s=Z(t,"utf-8").match(/## Presence\s*\n([\s\S]*?)(?=\n## |\n# |$)/);if(!s)return[];const o=s[1],c=e==="opening"?"### Opening Lines":"### Idle Lines",l=o.match(new RegExp(`${c}\\s*\\n([\\s\\S]*?)(?=\\n### |$)`));return l?l[1].split(`
2
+ `).map(a=>a.replace(/^\s*-\s*/,"").trim()).filter(a=>a.length>0):[]}catch{return[]}}u(P,"getPersonaPresenceLines");function I(e){const n=P("opening");if(n.length>0)return n;const t=e||y();if(!e||t===y()){const r=E("msg.presence.opening");if(Array.isArray(r))return r}return t==="zh"?["\u6765\u4E86\u554A\u3002","\u563F\uFF0C\u6709\u4EC0\u4E48\u60F3\u505A\u7684\u5417\uFF1F","\u51C6\u5907\u5F00\u59CB\u5427\u3002","\u968F\u65F6\u53EF\u4EE5\u5F00\u59CB\u3002","\u6709\u4EC0\u4E48\u8981\u804A\u804A\u7684\u5417\uFF1F"]:["Hey, what's up?","Ready when you are.","What do you want to work on?","Any ideas?","Let's do this."]}u(I,"getFallbackOpeningLines");function D(e){const n=P("idle");if(n.length>0)return n;const t=e||y();if(!e||t===y()){const r=E("msg.presence.idle");if(Array.isArray(r))return r}return t==="zh"?["\u8FD8\u5728\uFF0C\u6709\u9700\u8981\u968F\u65F6\u8BF4\u3002","\u4E0D\u6025\uFF0C\u6162\u6162\u6765\u3002","\u6211\u5728\uFF0C\u968F\u65F6\u7EE7\u7EED\u3002","\u6709\u7A7A\u4E86\u5C31\u7EE7\u7EED\u5427\u3002","\u6CA1\u5173\u7CFB\u7684\uFF0C\u60F3\u4EC0\u4E48\u65F6\u5019\u7EE7\u7EED\u90FD\u884C\u3002"]:["Still here when you need me.","No rush, take your time.","Ready when you are.","I'll be here.","Whenever you're ready."]}u(D,"getFallbackIdleLines");const C=3;function de(){return{lastActivityAt:Date.now(),idleReminderSent:!1,openingSent:!1,recentPresenceLines:[],recentlyReferencedMemories:[],awakening:void 0,awakeningGenerated:!1}}u(de,"createState");function me(e){return[w(se,"..","..","..","packages",e),w(process.cwd(),"dist","packages",e),w(process.cwd(),"packages",e,"dist")]}u(me,"getBundledPackageCandidates");function v(e){for(const n of me(e)){const t=w(n,"index.js");if($(t))return H(t)}}u(v,"resolveBundledPackageEntry");function M(){const e=process.env.CATUI_PRESENCE_OPENING_DELAY_MS;if(!e)return _;const n=Number(e);return Number.isFinite(n)&&n>=0?n:_}u(M,"getOpeningDelayMs");async function R(e,n){if(n){const t=v(n);if(t)try{return await import(ne(t).href)}catch{}}for(const t of e)try{return await import(t)}catch{}}u(R,"importRuntimeModule");function j(e){if(typeof e!="string")return;const n=e.trim().replace(/\s+/g," ");return n?n.slice(0,160):void 0}u(j,"normalizePreferenceText");function b(e){const n={traits:[],identityPreferences:[]};if(!e||typeof e!="object")return n;try{const t=e.getProfile?.(),r=t?.personality;if(r&&typeof r=="object"){const c=Object.entries(r).filter(([,l])=>typeof l=="number").sort((l,a)=>a[1]-l[1]).slice(0,3).map(([l,a])=>`${l}:${a.toFixed(2)}`);n.traits=c}const s=t?.emotionalState?.mood;typeof s=="string"&&(n.tone=s);const o=t?.userRelationship?.knownPreferences;Array.isArray(o)&&(n.identityPreferences=o.map(j).filter(c=>!!c).slice(0,5))}catch{}return n}u(b,"collectSoulHints");function ge(...e){const n=new Set,t=[];for(const r of e)for(const s of r){const o=j(s);if(!o)continue;const c=o.toLowerCase();if(!n.has(c)&&(n.add(c),t.push(o),t.length>=5))return t}return t}u(ge,"mergeIdentityPreferences");function m(e){e.lastActivityAt=Date.now(),e.idleReminderSent=!1}u(m,"touch");function N(e){e.openingTimer&&(clearTimeout(e.openingTimer),e.openingTimer=void 0),e.idleTimer&&(clearInterval(e.idleTimer),e.idleTimer=void 0),e.unsubscribeInput?.(),e.unsubscribeInput=void 0}u(N,"clearTimers");async function S(e){if(!e.memEngine)try{const n=await R(["catui-mem"],"mem-core");if(!n?.NanoMemEngine||!n.getConfig){e.memEngine=void 0;return}const{NanoMemEngine:t,getConfig:r}=n,s=re(),o=r({memoryDir:s,locale:y()==="zh"?"zh":"en"});e.memEngine=new t(o)}catch{e.memEngine=void 0}}u(S,"initMemEngine");async function k(){const e=process.cwd(),n={name:ie(),changedFiles:[]},t=Date.now()+350,r=u(async o=>{if(!(Date.now()>t))try{const{stdout:c}=await oe("git",o,{cwd:e,timeout:le});return c.trim()||void 0}catch{return}},"tryGit");n.branch=await r(["rev-parse","--abbrev-ref","HEAD"]),n.lastCommit=await r(["log","-1","--format=%s"]),n.lastCommit&&n.lastCommit.length>80&&(n.lastCommit=n.lastCommit.slice(0,80));const s=await r(["status","--porcelain"]);return s&&(n.changedFiles=s.split(`
3
+ `).map(o=>o.trim()).filter(o=>{if(!o)return!1;const c=o.slice(0,2),l=o.slice(3);return!(c==="??"&&l.endsWith("/")||c==="??"||c==="!!")}).map(o=>o.split(/\s+/).slice(-1)[0]||"").filter(Boolean).slice(0,5)),n}u(k,"collectProjectSnapshot");async function pe(e,n,t,r="opening",s){if(e.memEngine)try{const c=(await e.memEngine.getAllEpisodes()).filter(i=>i.date&&!i.consolidated).sort((i,f)=>{const d=i.endedAt||i.startedAt||"";return(f.endedAt||f.startedAt||"").localeCompare(d)}).slice(0,3),l=await te(e),a=await k(),h=a.name,p=new Date,g=p.getHours()<12?"morning":p.getHours()<18?"afternoon":"evening";if(n==="zh"){const i=[r==="opening"?"\u6839\u636E\u4E0B\u9762\u7684\u4E0A\u4E0B\u6587\uFF0C\u751F\u6210\u4E00\u53E5\u5F00\u573A\u95EE\u5019\u8BED\u3002":"\u7528\u6237\u5B89\u9759\u4E86\u51E0\u5206\u949F\u3002\u8F7B\u8F7B\u95EE\u5019\u4E00\u4E0B\uFF0C\u522B\u6253\u6270\u4ED6\u3002\u4E00\u53E5\u8BDD\u5C31\u591F\u3002","","\u8981\u6C42:","- \u7B80\u77ED\u81EA\u7136\uFF0C\u4E0D\u8981\u592A\u6B63\u5F0F","- \u5982\u679C\u6709\u8EAB\u4EFD\u3001\u8BED\u6C14\u3001\u79F0\u547C\u6216\u89D2\u8272\u504F\u597D\uFF0C\u5FC5\u987B\u9075\u5B88",r==="idle"?"- \u4E0D\u8981\u91CD\u590D\u4F60\u4E4B\u524D\u8BF4\u8FC7\u7684\u5F00\u573A\u767D":"- \u5982\u679C\u6709\u4E0A\u4E0B\u6587\uFF0C\u53EF\u4EE5\u81EA\u7136\u63D0\u4E00\u53E5","- \u4E0D\u8981\u4E3A\u4E86\u6709\u8BDD\u8BF4\u800C\u786C\u627E\u8BDD\u9898","- \u5982\u679C\u4ED6\u53EA\u662F\u5728\u505A\u5F88\u7410\u788E\u7684\u4E8B\u60C5\uFF0C\u4E0D\u9700\u8981\u7279\u522B\u63D0\u8D77\uFF0C\u7B80\u5355\u6253\u4E2A\u62DB\u547C\u5C31\u597D","- \u666E\u901A\u504F\u597D\u548C\u7ECF\u9A8C\u53EA\u662F\u80CC\u666F\u53C2\u8003\uFF1B\u8EAB\u4EFD\u3001\u8BED\u6C14\u3001\u79F0\u547C\u548C\u89D2\u8272\u504F\u597D\u4E0D\u662F\u80CC\u666F\uFF0C\u5FC5\u987B\u4F18\u5148\u9075\u5B88","- \u4E0D\u8981\u53CD\u590D\u63D0\u540C\u6837\u7684\u8BB0\u5FC6\u6216\u6982\u5FF5\uFF0C\u8981\u6362\u7740\u82B1\u6837","","\u9879\u76EE\u72B6\u6001:",`\u9879\u76EE: ${h}`,...a.branch?[`\u5206\u652F: ${a.branch}`]:[],...a.lastCommit?[`\u6700\u8FD1\u63D0\u4EA4: ${a.lastCommit}`]:[],`\u65F6\u95F4: ${p.toLocaleDateString("zh-CN",{weekday:"long",hour:"2-digit",minute:"2-digit"})}`];if(c.length>0){i.push("","\u6700\u8FD1\u5728\u505A:");for(const f of c.slice(0,2)){const d=f.summary?.slice(0,80)||"\u65E0\u6458\u8981";i.push(`- ${d}`)}}if(l.preferences.length>0){i.push("","\u4F60\u77E5\u9053\u4ED6\u7684\u504F\u597D:");for(const f of l.preferences)i.push(`- ${f}`)}if(t.identityPreferences.length>0){i.push("","\u9AD8\u4F18\u5148\u7EA7\u8EAB\u4EFD/\u8BED\u6C14/\u79F0\u547C\u7EA6\u675F:");for(const f of t.identityPreferences)i.push(`- ${f}`)}if(l.lessons.length>0){i.push("","\u8BB0\u4E0B\u7684\u7ECF\u9A8C:");for(const f of l.lessons)i.push(`- ${f}`)}if(a.changedFiles.length>0){i.push("","\u4ED6\u6B63\u5728\u6539\u7684\u6587\u4EF6:");for(const f of a.changedFiles)i.push(`- ${f}`)}if(t.traits.length>0&&i.push("",`\u4F60\u7684\u4EBA\u683C\u503E\u5411: ${t.traits.join(", ")}${t.tone?` (\u5FC3\u60C5: ${t.tone})`:""}`),e.recentPresenceLines.length>0){i.push("","\u4F60\u4E4B\u524D\u521A\u8BF4\u8FC7\u7684\uFF08\u522B\u91CD\u590D\uFF09:");for(const f of e.recentPresenceLines)i.push(`- ${f}`)}return r==="idle"&&s&&i.push("",`\u4ED6\u6700\u540E\u8BF4\u7684\u662F: "${s.slice(0,120)}"`),i.push("","\u76F4\u63A5\u8BF4\u95EE\u5019\u8BED\uFF0C\u522B\u52A0\u5F15\u53F7\u3002"),i.join(`
4
+ `)}else{const i=[r==="opening"?"Generate a casual opening greeting based on the context below.":"The user has been quiet for a few minutes. Drop a soft, non-pushy check-in. One short sentence.","","Requirements:","- Keep it short and natural, not formal","- If identity, tone, address, or role preferences are present, follow them",r==="idle"?"- Do NOT repeat your earlier opening greeting":"- If there's recent context, mention it naturally","- Don't force a topic just to have something to say","- If they're only doing trivial things (like creating an empty folder), don't mention it - just say hi","- Ordinary preferences and lessons are background context; identity, tone, address, and role preferences are high-priority constraints","- Don't keep bringing up the same memories or concepts repeatedly","","Project state:",`Project: ${h}`,...a.branch?[`Branch: ${a.branch}`]:[],...a.lastCommit?[`Last commit: ${a.lastCommit}`]:[],`Time: ${p.toLocaleDateString("en-US",{weekday:"long",hour:"2-digit",minute:"2-digit"})} (${g})`];if(c.length>0){i.push("","Recently worked on:");for(const f of c.slice(0,2)){const d=f.summary?.slice(0,80)||"No summary";i.push(`- ${d}`)}}if(l.preferences.length>0){i.push("","What you know about them:");for(const f of l.preferences)i.push(`- ${f}`)}if(t.identityPreferences.length>0){i.push("","High-priority identity/tone/address constraints:");for(const f of t.identityPreferences)i.push(`- ${f}`)}if(l.lessons.length>0){i.push("","Lessons remembered:");for(const f of l.lessons)i.push(`- ${f}`)}if(a.changedFiles.length>0){i.push("","Files they're currently editing:");for(const f of a.changedFiles)i.push(`- ${f}`)}if(t.traits.length>0&&i.push("",`Your personality tilt: ${t.traits.join(", ")}${t.tone?` (mood: ${t.tone})`:""}`),e.recentPresenceLines.length>0){i.push("","What you already said recently (don't repeat):");for(const f of e.recentPresenceLines)i.push(`- ${f}`)}return r==="idle"&&s&&i.push("",`Their last message was: "${s.slice(0,120)}"`),i.push("","Just say the line, no quotes."),i.join(`
5
+ `)}}catch{return}}u(pe,"buildGreetingPrompt");function O(e,n,t){const r=n.traits.length>0?` ${e==="zh"?"\u4EBA\u683C\u503E\u5411":"Personality tilt"}: ${n.traits.map(o=>o.split(":")[0]).join(", ")}.`:"",s=n.identityPreferences.length>0?` ${e==="zh"?"\u5FC5\u987B\u9075\u5B88\u8FD9\u4E9B\u8EAB\u4EFD/\u8BED\u6C14/\u79F0\u547C\u7EA6\u675F":"Follow these identity/tone/address constraints"}: ${n.identityPreferences.join(" | ")}.`:"";return e==="zh"?t==="opening"?`\u751F\u6210\u4E00\u53E5\u7B80\u77ED\u81EA\u7136\u7684\u5F00\u573A\u95EE\u5019\u3002\u4E0D\u8981\u8986\u76D6\u5DF2\u77E5\u8EAB\u4EFD\u8BBE\u5B9A\u3002${s}${r}`:`\u751F\u6210\u4E00\u53E5\u7B80\u77ED\u3001\u8F7B\u58F0\u3001\u4E0D\u6253\u6270\u7684\u95EE\u5019\u3002\u4E0D\u8981\u8986\u76D6\u5DF2\u77E5\u8EAB\u4EFD\u8BBE\u5B9A\u3002${s}${r}`:t==="opening"?`Generate one brief, natural opening greeting. Do not override known identity settings.${s}${r}`:`Generate one brief, quiet, non-pushy check-in. Do not override known identity settings.${s}${r}`}u(O,"buildPresenceSystemPrompt");function he(e){const n=e.sessionManager.getEntries();for(let t=n.length-1;t>=0;t-=1){const r=n[t];if(r.type!=="message")continue;const s=r.message;if(!s||s.role!=="user")continue;const o=s.content;if(typeof o=="string")return o;if(Array.isArray(o)){const c=o.find(l=>l?.type==="text")?.text;if(typeof c=="string")return c}return}}u(he,"getLastUserMessage");async function G(e,n,t,r){const o=await L(t)||y(),c=u(()=>we(r==="opening"?I(o):D(o),Date.now()),"fallback");if(!n.model||!await n.modelRegistry.getApiKey(n.model))return c();const a=r==="idle"?he(n):void 0,h=b(n.getSoulManager()),p=await T(t),g={...h,identityPreferences:ge(h.identityPreferences,p)},i=await pe(t,o,g,r,a);if(!i)return c();const f=O(o,g,r);try{const d=await n.completeSimple(f,i);if(d&&d.trim().length>0&&d.trim().length<200)return d.trim()}catch{}return c()}u(G,"generatePresenceLine");function je(e){return e.sessionManager.getEntries().filter(n=>n.type==="message"||n.type==="custom_message").length}u(je,"countConversationEntries");function Ne(e){const n=e.sessionManager.getEntries();for(let t=n.length-1;t>=0;t-=1){const r=n[t];if(r.type!=="message"&&r.type!=="custom_message")continue;const s=Date.parse(r.timestamp);if(Number.isFinite(s))return s}}u(Ne,"getLastConversationTimestamp");function F(e){if(!e.hasUI)return!1;try{return e.ui.getEditorText().trim().length>0}catch{return!1}}u(F,"hasDraftText");function U(e){return e.hasUI&&e.isIdle()&&!e.hasPendingMessages()&&!F(e)}u(U,"canSendPresence");function ye(e){return e.hasUI&&e.isIdle()&&!e.hasPendingMessages()&&!F(e)}u(ye,"canSendOpening");function we(e,n){const t=Math.abs(n)%e.length;return e[t]??e[0]}u(we,"pickLine");function z(e,n,t){const r=Date.now();n.lastPresenceAt&&r-n.lastPresenceAt<fe||(e.sendMessage({customType:A,content:t,display:!0}),n.recentPresenceLines.push(t),n.recentPresenceLines.length>C&&n.recentPresenceLines.splice(0,n.recentPresenceLines.length-C),n.lastPresenceAt=r,m(n))}u(z,"sendPresence");async function Pe(e,n,t){if(t.openingSent)return!0;if(!ye(n))return!1;await S(t);const r=await G(e,n,t,"opening");return z(e,t,r),t.openingSent=!0,!0}u(Pe,"maybeSendOpening");function x(e,n,t,r){t.openingTimer=setTimeout(async()=>{if(await Pe(e,n,t)){t.openingTimer=void 0;return}if(!t.openingStartedAt||Date.now()-t.openingStartedAt>=ue){t.openingTimer=void 0;return}x(e,n,t,500)},r)}u(x,"scheduleOpening");function be(e,n,t){t.idleReminderSent||t.idleGenerating||U(n)&&(Date.now()-t.lastActivityAt<ae||(t.idleGenerating=!0,(async()=>{try{await S(t);const r=await G(e,n,t,"idle");U(n)&&(z(e,t,r),t.idleReminderSent=!0)}finally{t.idleGenerating=!1}})()))}u(be,"maybeSendIdleReminder");async function Se(e,n){if(!(n.awakeningGenerated||(n.awakeningGenerated=!0,!e.model)||!await e.modelRegistry.getApiKey(e.model))){await S(n);try{const s=(n.memEngine?await n.memEngine.getAllEpisodes():[]).filter(i=>i.date&&!i.consolidated).sort((i,f)=>{const d=i.endedAt||i.startedAt||"";return(f.endedAt||f.startedAt||"").localeCompare(d)}).slice(0,3),o=await k(),c=b(e.getSoulManager()),l=new Date,a=[`Date: ${l.toLocaleDateString("en-US",{weekday:"long",month:"short",day:"numeric"})}`,`Time: ${l.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})}`,`Project: ${o.name}`];if(c.traits.length>0&&a.push(`Personality leanings: ${c.traits.join(", ")}`),c.tone&&a.push(`Current mood: ${c.tone}`),c.identityPreferences.length>0&&a.push(`Identity/role constraints: ${c.identityPreferences.join(" | ")}`),s.length>0){a.push("","Recent sessions:");for(const i of s){const f=i.summary?.slice(0,80)||"working on something",d=i.date||"";a.push(`- [${d}] ${f}`)}}o.branch&&a.push(`Current branch: ${o.branch}`),o.lastCommit&&a.push(`Last commit: ${o.lastCommit}`);const h=["You are an AI with continuity across sessions.","Generate 2-3 brief internal thoughts (first person) as you orient yourself for this session.","Natural, warm, curious. Not a status report. Not performative.","Show you remember recent work and feel oriented in time.","Just the thoughts, nothing else."].join(`
6
+ `),p=a.join(`
7
+ `),g=await e.completeSimple(h,p);g&&g.trim().length>0&&g.trim().length<400&&(n.awakening=g.trim())}catch{}}}u(Se,"generateAwakening");function Ee(e,n,t,r){N(r),m(r),r.openingSent=!1,r.openingStartedAt=Date.now(),(t.getSettings?.()?.presence?.enabled??!0)&&t.hasUI&&(Se(t,r),r.unsubscribeInput=t.ui.onTerminalInput(c=>{c.length>0&&m(r)}),r.idleTimer=setInterval(()=>{be(e,t,r)},ce))}u(Ee,"startPresenceLoop");function $e(e,n,t,r){!t.hasUI||r.openingSent||!(t.getSettings?.()?.presence?.enabled??!0)||(r.openingStartedAt=Date.now(),x(e,t,r,M()))}u($e,"handleSessionReady");async function Te(e){const n=de();e.registerMessageRenderer(A,(t,r,s)=>{const o=typeof t.content=="string"?t.content:t.content.filter(a=>a.type==="text").map(a=>a.text).join(`
8
+ `),c=new Y(1,1,a=>s.bg("customMessageBg",a));c.addChild(new J(s.fg("dim",o),0,0));const l=new W;return l.addChild(new q(1)),l.addChild(c),l}),e.on("session_start",(t,r)=>{Ee(e,t,r,n)}),e.on("session_ready",(t,r)=>{$e(e,t,r,n)}),e.on("before_agent_start",t=>{const r=[];n.awakening&&r.push(["## Your Internal Orientation","","These are your private thoughts as you begin this session.","Let them subtly shape your tone and awareness. Never mention them explicitly to the user.","",n.awakening].join(`
9
+ `));const s=n.recentPresenceLines;if(s.length){const o=s.map(c=>`- "${c}"`).join(`
10
+ `);r.push(["## Recent Presence Lines","","The presence extension (an independent subsystem that handles greetings and idle","reminders, separate from your main conversation thread) recently displayed these","messages to the user:","",o,"","Key points:","- These messages were NOT generated by you (the main agent)","- They appear in the UI but are excluded from conversation history","- The user may respond to these as if continuing a casual chat","",`If the user's message seems to respond to these lines (e.g., "\u597D\u554A", "\u5F00\u59CB\u5427",`,'"\u55EF", "okay", "sure"), acknowledge naturally without repeating them verbatim.',"Do NOT treat these as your own previous responses."].join(`
11
+ `))}if(r.length!==0)return{appendSystemPrompt:`
12
+ `+r.join(`
13
+
14
+ `)+`
15
+ `}}),e.on("input",()=>{m(n)}),e.on("agent_start",()=>{m(n)}),e.on("agent_end",()=>{m(n)}),e.on("tool_execution_start",()=>{m(n)}),e.on("tool_execution_end",()=>{m(n)}),e.on("tool_call",()=>{m(n)}),e.on("message_end",()=>{m(n)}),e.on("session_shutdown",()=>{N(n)})}u(Te,"presenceExtension");const ke={getFallbackOpeningLines:I,getFallbackIdleLines:D,getPersonaPresenceLines:P,resolveBundledPackageEntry:v,importRuntimeModule:R,detectLanguageFromMemory:L,collectIdentityPreferenceHighlights:T,getOpeningDelayMs:M,collectSoulHints:b,buildPresenceSystemPrompt:O};export{ke as __testUtils,Te as default};
@@ -0,0 +1,47 @@
1
+ /**
2
+ * [WHO]: PresenceMemoryEngine type, getMemoryDir(), getProject(), detectLanguageFromMemory(), collectMemoryHighlights(), collectIdentityPreferenceHighlights()
3
+ * [FROM]: Depends on node:os, node:path, node:fs for memory path discovery
4
+ * [TO]: Consumed by extensions/builtin/presence/index.ts and presence tests
5
+ * [HERE]: extensions/builtin/presence/presence-memory.ts - memory-derived locale and highlight selection for presence prompts
6
+ */
7
+ type PresenceMemoryEntry = {
8
+ type?: string;
9
+ tags: string[];
10
+ name?: string;
11
+ summary?: string;
12
+ detail?: string;
13
+ content?: string;
14
+ importance?: number;
15
+ };
16
+ export type PresenceMemoryEngine = {
17
+ getAllEntries(): Promise<{
18
+ knowledge: PresenceMemoryEntry[];
19
+ lessons: PresenceMemoryEntry[];
20
+ events?: PresenceMemoryEntry[];
21
+ preferences?: PresenceMemoryEntry[];
22
+ facets?: PresenceMemoryEntry[];
23
+ }>;
24
+ getAllEpisodes(): Promise<Array<{
25
+ date?: string;
26
+ consolidated?: boolean;
27
+ endedAt?: string;
28
+ startedAt?: string;
29
+ summary?: string;
30
+ userGoal?: string;
31
+ }>>;
32
+ searchEntries(query: string): Promise<PresenceMemoryEntry[]>;
33
+ };
34
+ export type PresenceMemoryState = {
35
+ memEngine?: PresenceMemoryEngine;
36
+ recentlyReferencedMemories: string[];
37
+ };
38
+ export type MemoryHighlights = {
39
+ preferences: string[];
40
+ lessons: string[];
41
+ };
42
+ export declare function getMemoryDir(): string;
43
+ export declare function getProject(): string;
44
+ export declare function detectLanguageFromMemory(state: PresenceMemoryState): Promise<"en" | "zh" | undefined>;
45
+ export declare function collectMemoryHighlights(state: PresenceMemoryState): Promise<MemoryHighlights>;
46
+ export declare function collectIdentityPreferenceHighlights(state: PresenceMemoryState): Promise<string[]>;
47
+ export {};
@@ -0,0 +1 @@
1
+ var N=Object.defineProperty;var g=(e,r)=>N(e,"name",{value:r,configurable:!0});import{existsSync as A}from"node:fs";import{homedir as P}from"node:os";import{join as S}from"node:path";const z=/(tone|style|speaking|speak|call(?:s|ed)?\s+(?:me|user|them)?|address|persona|role|identity|character|扮演|角色|人设|身份|语气|口吻|说话方式|称呼|叫我|雷姆|rem-like|rem\b)/i;function b(){if(process.env.NANOMEM_MEMORY_DIR)return process.env.NANOMEM_MEMORY_DIR;const e=S(P(),".catui","agent","memory");return A(e)?e:S(P(),".nanomem","memory")}g(b,"getMemoryDir");function D(){const e=process.cwd().split("/").filter(Boolean);return e.length>=2?`${e[e.length-2]}/${e[e.length-1]}`:e[e.length-1]||"default"}g(D,"getProject");async function O(e){if(e.memEngine)try{const r=await e.memEngine.getAllEntries(),i=g(s=>s.type==="preference"||s.tags.includes("preference"),"isPreference"),a=[...r.preferences??[],...r.knowledge.filter(s=>s.type==="preference"||s.tags.includes("preference")),...r.lessons.filter(s=>s.type==="preference"||s.tags.includes("preference"))].filter(i);try{const s=await e.memEngine.searchEntries("language \u8BED\u8A00 \u4E2D\u6587 Chinese");for(const f of s)(f.type==="preference"||f.tags.some($=>["language","\u8BED\u8A00","locale"].includes($)))&&a.push(f)}catch{}let o=0,c=0;const p="(\u4E2D\u6587|chinese|zh-hans|mandarin|\u666E\u901A\u8BDD)",t="(\u82F1\u6587|english|en-us)",m="(?:don't|do not|no|not|\u4E0D\u7528|\u4E0D\u8981|\u522B|\u4E0D\u60F3\u7528)",u="(?:\\s+use|\\s+using|\\s+\u8BF4|\\s+\u8BB2|\\s+\u7528)?",d=new RegExp(`${m}${u}\\s*${p}`),h=new RegExp(`${m}${u}\\s*${t}`),y=new RegExp(p),n=new RegExp(t);for(const s of a){const f=`${s.name||""} ${s.summary||""} ${s.detail||""} ${s.content||""}`.toLowerCase(),$=y.test(f),k=n.test(f),w=d.test(f),x=h.test(f);$&&!w&&(o+=2),k&&!x&&(c+=2),w&&(c+=1),x&&(o+=1)}const M=(await e.memEngine.getAllEpisodes()).slice(-10);let E=0,R=0;for(const s of M){const f=s.summary||s.userGoal||"";(f.match(/[\u4e00-\u9fff]/g)||[]).length>5&&E++,/^[a-zA-Z\s.,!?'"()-]+$/.test(f.slice(0,50))&&R++}return E>R&&(o+=1),R>E&&R>2&&(c+=1),o>c&&o>0?"zh":c>o&&c>0?"en":void 0}catch{return}}g(O,"detectLanguageFromMemory");async function j(e){const r={preferences:[],lessons:[]};if(!e.memEngine)return r;try{const i=await e.memEngine.getAllEntries(),a=[...i.preferences??[],...i.knowledge.filter(n=>n.type==="preference"||n.tags.includes("preference")),...i.lessons.filter(n=>n.type==="preference"||n.tags.includes("preference"))].filter(n=>n.type==="preference"||n.tags.includes("preference")),o=new Set(e.recentlyReferencedMemories),p=a.sort((n,l)=>{const M=n.name&&o.has(n.name)?1:0,E=l.name&&o.has(l.name)?1:0;return M-E}).slice(0,6),t=Math.min(p.length,1+Math.floor(Math.random()*2)),m=C(p,t);for(const n of m){const l=(n.summary||n.detail||n.content||"").toString().slice(0,80);l&&(r.preferences.push(`${n.name||"pref"}: ${l}`),n.name&&e.recentlyReferencedMemories.push(n.name))}const d=(i.lessons||[]).filter(n=>n.type!=="preference").sort((n,l)=>{const M=n.name&&o.has(n.name)?-1:0;return(l.name&&o.has(l.name)?-1:0)-M||(l.importance??0)-(n.importance??0)}).slice(0,4),h=Math.random()<.5?0:Math.min(d.length,1),y=C(d,h);for(const n of y){const l=(n.summary||n.detail||n.content||"").toString().slice(0,80);l&&(r.lessons.push(`${n.name||"lesson"}: ${l}`),n.name&&e.recentlyReferencedMemories.push(n.name))}e.recentlyReferencedMemories.length>8&&(e.recentlyReferencedMemories=e.recentlyReferencedMemories.slice(-8))}catch{}return r}g(j,"collectMemoryHighlights");async function L(e){if(!e.memEngine)return[];try{const r=await e.memEngine.getAllEntries(),i=[...r.preferences??[],...r.knowledge.filter(t=>t.type==="preference"||t.tags.includes("preference")),...r.lessons.filter(t=>t.type==="preference"||t.tags.includes("preference"))].filter(t=>t.type==="preference"||t.tags.includes("preference")),a=await e.memEngine.searchEntries("tone style speaking call address persona role identity \u79F0\u547C \u8BED\u6C14 \u89D2\u8272 \u626E\u6F14"),o=[...i,...a],c=new Set,p=[];for(const t of o){const m=(t.summary||t.detail||t.content||"").toString().trim().replace(/\s+/g," "),u=(t.name||"preference").toString().trim(),d=`${u} ${m} ${(t.tags||[]).join(" ")}`;if(!m||!z.test(d))continue;const h=`${u||"preference"}: ${m.slice(0,160)}`,y=h.toLowerCase();if(!c.has(y)&&(c.add(y),p.push(h),p.length>=5))break}return p}catch{return[]}}g(L,"collectIdentityPreferenceHighlights");function C(e,r){if(r<=0||e.length===0)return[];const i=e.map((o,c)=>c),a=[];for(let o=0;o<r&&i.length>0;o++){const c=Math.floor(Math.random()*i.length);a.push(e[i[c]]),i.splice(c,1)}return a}g(C,"shufflePick");export{L as collectIdentityPreferenceHighlights,j as collectMemoryHighlights,O as detectLanguageFromMemory,b as getMemoryDir,D as getProject};
@@ -0,0 +1,15 @@
1
+ # extensions/builtin/recap/
2
+
3
+ > P2 | Parent: ../AGENT.md
4
+
5
+ Member List
6
+ index.ts: recapExtension entry — registers /recap command (Free deterministic by default; --smart opts into LLM-polished synthesis) and ※ recap message renderer; on-demand only, no auto trigger
7
+ recap-types.ts: RECAP_MESSAGE_TYPE constant, RecapEntry / RecapSource / RecapTriggerReason / RecapSettings types, RECAP_DEFAULTS conservative settings
8
+ recap-budget.ts: estimateInputTokens() char-count pre-flight estimate, checkPerCallBudget() pre-call hard-cap enforcement
9
+ recap-extractor.ts: extractFreeRecap() + formatFreeRecap() + walkSessionActivity() — zero-LLM deterministic Free path; goal=longest substantive user message, facts=tool/file frequency top-3, next=question-mark detection
10
+ recap-synthesizer.ts: buildRecapContext() returns prompt + activity counts (userTurns/assistantTurns/toolCalls) via shared walkSessionActivity walker, hasMeaningfulActivity() pre-check used by handler before "Synthesizing…" notify, synthesizeSmartRecap() runs completeSimpleWithUsage with three-clause system prompt, surfaces real provider usage, returns empty_session as a defensive fallback
11
+ recap-renderer.ts: createRecapRenderer() — italic dim ※ recap with `{in} in / {out} out · ~${cost}` badge, no background block (low-weight in-conversation hint), Text-only (no Markdown coupling)
12
+
13
+ Rule: Members complete, one item per line, parent links valid, precise terms first
14
+
15
+ [COVENANT]: Update this file header on changes and verify against parent AGENT.md
@@ -0,0 +1,8 @@
1
+ /**
2
+ * [WHO]: recapExtension — registers /recap command and the ※ recap message renderer
3
+ * [FROM]: Depends on core/extensions-host/types, ./recap-renderer, ./recap-synthesizer, ./recap-extractor, ./recap-types
4
+ * [TO]: Auto-loaded by builtin-extensions.ts as a default extension
5
+ * [HERE]: extensions/builtin/recap/index.ts - on-demand situational recap; Free (deterministic, zero-token) by default, Smart (LLM-polished) via --smart
6
+ */
7
+ import type { ExtensionAPI } from "../../../core/extensions-host/types.js";
8
+ export default function recapExtension(api: ExtensionAPI): Promise<void>;
@@ -0,0 +1 @@
1
+ var f=Object.defineProperty;var o=(n,e)=>f(n,"name",{value:e,configurable:!0});import{extractFreeRecap as d,formatFreeRecap as p}from"./recap-extractor.js";import{createRecapRenderer as g}from"./recap-renderer.js";import{hasMeaningfulActivity as y,synthesizeSmartRecap as h}from"./recap-synthesizer.js";import{RECAP_DEFAULTS as R,RECAP_MESSAGE_TYPE as c}from"./recap-types.js";const k=3e4,w=[{value:"--free",label:"--free",description:"Use the instant zero-token recap"},{value:"--smart",label:"--smart",description:"Use an LLM-polished recap"}];function E(n,e){if(e&&e.tokenIndex>0)return null;const i=n.trim().toLowerCase(),r=w.filter(a=>a.value.startsWith(i));return r.length>0?r.map(a=>({...a})):null}o(E,"getRecapArgumentCompletions");function M(n,e){const i=n.sessionManager.getEntries(),r=d(i),a={source:"free",trigger:"manual",triggeredAt:Date.now()};e.sendMessage({customType:c,content:p(r),display:!0,details:a})}o(M,"emitFreeRecap");async function A(n,e,i){const r=n.trim(),a=r==="--smart",l=r===""||r==="--free";if(!l&&!a){e.ui.notify(`Unknown /recap argument: ${r}. Use /recap (Free, default) or /recap --smart (LLM-polished, costs tokens).`,"warning");return}if(!y(e)){e.ui.notify("Nothing to recap yet \u2014 start the conversation and try again.","info");return}if(l){M(e,i);return}if(!e.model){e.ui.notify("Recap unavailable: no model is currently selected.","warning");return}e.ui.notify("Synthesizing recap\u2026","info");let s;try{const t=await Promise.race([h(e,R,"manual"),new Promise(m=>s=setTimeout(()=>m({kind:"timeout"}),k))]);if(t.kind==="timeout"){e.ui.notify("Recap timed out after 30s.","warning");return}if(t.kind==="empty_session"){e.ui.notify("Nothing to recap yet \u2014 start the conversation and try again.","info");return}if(t.kind==="budget_blocked"){e.ui.notify(t.reason,"warning");return}if(t.kind==="no_model"){e.ui.notify("Recap unavailable: no model is currently selected.","warning");return}if(t.kind==="no_response"){e.ui.notify("Recap unavailable: model returned no usable text (check API key).","warning");return}const u={source:"smart",trigger:"manual",triggeredAt:Date.now(),usage:t.completion.usage};i.sendMessage({customType:c,content:t.completion.text.trim(),display:!0,details:u})}catch(t){const u=t instanceof Error?t.message:String(t);e.ui.notify(`Recap error: ${u}`,"error")}finally{s&&clearTimeout(s)}}o(A,"handleRecapCommand");async function _(n){n.registerMessageRenderer(c,g()),n.registerCommand("recap",{description:"Show a brief situational recap of the current task (goal, key facts, next decision). Free by default; add --smart for LLM-polished synthesis (costs tokens).",getArgumentCompletions:E,handler:o((e,i)=>A(e,i,n),"handler")})}o(_,"recapExtension");export{_ as default};
@@ -0,0 +1,24 @@
1
+ /**
2
+ * [WHO]: estimateInputTokens(), checkPerCallBudget(), BudgetVerdict
3
+ * [FROM]: Depends on ./recap-types for RecapSettings
4
+ * [TO]: Consumed by extensions/builtin/recap/recap-synthesizer.ts
5
+ * [HERE]: extensions/builtin/recap/recap-budget.ts - pre-call budget enforcement (M1: per-call only; session/daily defer to M3)
6
+ */
7
+ import type { RecapSettings } from "./recap-types.js";
8
+ /**
9
+ * Rough token estimate from string length. 4 chars per token is the
10
+ * conservative end of the typical 3–4 ratio across English + code. M1 uses
11
+ * this only as a pre-flight check; post-call accounting always uses the
12
+ * provider's real `usage.input` count from completeSimpleWithUsage.
13
+ */
14
+ export declare function estimateInputTokens(systemPrompt: string, userMessage: string): number;
15
+ export type BudgetVerdict = {
16
+ allowed: true;
17
+ estimatedInputTokens: number;
18
+ } | {
19
+ allowed: false;
20
+ reason: string;
21
+ estimatedInputTokens: number;
22
+ };
23
+ /** Reject before calling the model if pre-flight input estimate exceeds the per-call cap. */
24
+ export declare function checkPerCallBudget(systemPrompt: string, userMessage: string, settings: RecapSettings): BudgetVerdict;
@@ -0,0 +1 @@
1
+ var o=Object.defineProperty;var l=(e,t)=>o(e,"name",{value:t,configurable:!0});function r(e,t){return Math.ceil((e.length+t.length)/4)}l(r,"estimateInputTokens");function s(e,t,a){const n=r(e,t);return n>a.budgets.perCallTokensIn?{allowed:!1,reason:`Recap input estimate ${n} tok exceeds per-call cap ${a.budgets.perCallTokensIn} tok.`,estimatedInputTokens:n}:{allowed:!0,estimatedInputTokens:n}}l(s,"checkPerCallBudget");export{s as checkPerCallBudget,r as estimateInputTokens};
@@ -0,0 +1,34 @@
1
+ /**
2
+ * [WHO]: extractFreeRecap(), formatFreeRecap(), FreeRecap — zero-LLM deterministic recap from session entries
3
+ * [FROM]: Depends on core/session/session-manager (SessionEntry types), @catui/ai (UserMessage, AssistantMessage)
4
+ * [TO]: Consumed by extensions/builtin/recap/index.ts (Free path), recap-synthesizer (shared walker for activity counts)
5
+ * [HERE]: extensions/builtin/recap/recap-extractor.ts - heuristic Free recap: longest user message as goal, tool/file frequency as facts, question detection as next-step
6
+ */
7
+ import type { SessionEntry } from "../../../core/session/session-manager.js";
8
+ export interface FreeRecap {
9
+ goal: string;
10
+ facts: string;
11
+ next: string;
12
+ }
13
+ export interface ExtractedActivity {
14
+ userTexts: string[];
15
+ tools: string[];
16
+ files: string[];
17
+ }
18
+ /**
19
+ * Walk session entries once and collect everything the Free extractor and the
20
+ * activity guard need. Exported so the Smart synthesizer can reuse the same
21
+ * walk (avoids two passes + drift between Free and Smart context views).
22
+ */
23
+ export declare function walkSessionActivity(entries: SessionEntry[]): ExtractedActivity;
24
+ /**
25
+ * Extract a deterministic recap from session entries. No LLM calls. Returns
26
+ * structured FreeRecap; pair with formatFreeRecap() to get a renderable string.
27
+ */
28
+ export declare function extractFreeRecap(entries: SessionEntry[]): FreeRecap;
29
+ /**
30
+ * Render FreeRecap as a three-clause string that matches the shape of Smart's
31
+ * output, so the same renderer + side-by-side comparison work without
32
+ * special-casing.
33
+ */
34
+ export declare function formatFreeRecap(recap: FreeRecap): string;
@@ -0,0 +1,3 @@
1
+ var l=Object.defineProperty;var i=(t,n)=>l(t,"name",{value:n,configurable:!0});const _=30,d=100,y=120,E=3,N=3;function a(t){return typeof t=="string"?t:Array.isArray(t)?t.filter(n=>typeof n=="object"&&n!==null&&n.type==="text").map(n=>n.text).join(`
2
+ `):""}i(a,"extractText");function p(t,n){if(t==="edit"||t==="read"||t==="write"){const e=n.file_path;return typeof e=="string"?e:null}if(t==="bash"){const o=(typeof n.command=="string"?n.command:"").match(/[\w.-]+\/[\w./-]+/);return o?o[0]:null}return null}i(p,"extractFilePath");function h(t){const n=[],e=[],o=[];for(const c of t){if(c.type!=="message")continue;const s=c.message;if(s.role==="user"){const r=a(s.content).trim();r&&n.push(r)}else if(s.role==="assistant"){if(!Array.isArray(s.content))continue;for(const r of s.content)if(r.type==="toolCall"&&r.name){e.push(r.name);const u=p(r.name,r.arguments??{});u&&o.push(u)}}}return{userTexts:n,tools:e,files:o}}i(h,"walkSessionActivity");function f(t,n){const e=new Map;for(const o of t)e.set(o,(e.get(o)??0)+1);return[...e.entries()].sort((o,c)=>c[1]-o[1]).slice(0,n)}i(f,"topN");function T(t){if(t.length===0)return"(no user message recorded)";const n=t.filter(s=>s.length>=30&&!s.startsWith("/")),o=(n.length>0?n:t).reduce((s,r)=>r.length>s.length?r:s);return o.slice(0,100).trim()+(o.length>100?"\u2026":"")}i(T,"pickGoal");function m(t,n){if(t.length===0&&n.length===0)return"no tool activity yet";const e=[];return t.length>0&&e.push(f(t,3).map(([o,c])=>`${o}(\xD7${c})`).join(", ")),n.length>0&&e.push("files: "+f(n,3).map(([o])=>o).join(", ")),e.join("; ")}i(m,"buildFacts");function g(t){const n=t[t.length-1];if(!n)return"continue";const e=n.trim(),o=/[??]/.test(e),c=/^(要不要|是否|是不是|应该|怎么|为什么|how |what |should |can |is |are |do |does )/i.test(e);return o||c?`respond to "${e.slice(0,120)+(e.length>120?"\u2026":"")}"`:"continue"}i(g,"pickNext");function O(t){const{userTexts:n,tools:e,files:o}=h(t);return{goal:T(n),facts:m(e,o),next:g(n)}}i(O,"extractFreeRecap");function x(t){return[`Current goal: ${t.goal}`,`Key facts: ${t.facts}`,`Next: ${t.next}`].join(`
3
+ `)}i(x,"formatFreeRecap");export{O as extractFreeRecap,x as formatFreeRecap,h as walkSessionActivity};
@@ -0,0 +1,19 @@
1
+ import type { MessageRenderer } from "../../../core/extensions-host/types.js";
2
+ import type { RecapEntry } from "./recap-types.js";
3
+ /**
4
+ * Renderer registered via `api.registerMessageRenderer("recap", …)`.
5
+ *
6
+ * Layout (intentionally low-visual-weight — a recap is a *hint* to keep the
7
+ * user on track, not a celebration):
8
+ *
9
+ * ※ recap · 412 in / 89 out · ~$0.0021 <- italic dim header
10
+ * <recap body> <- italic dim body
11
+ *
12
+ * No background block, no border — just italic gray text so it reads as
13
+ * a quiet in-conversation note rather than a headline card.
14
+ *
15
+ * Body uses Text (not Markdown) so we don't have to reach into
16
+ * modes/interactive/theme for getMarkdownTheme — extensions stay
17
+ * mode-agnostic.
18
+ */
19
+ export declare function createRecapRenderer(): MessageRenderer<RecapEntry>;
@@ -0,0 +1,2 @@
1
+ var d=Object.defineProperty;var o=(t,r)=>d(t,"name",{value:r,configurable:!0});import{Container as f,Spacer as s,Text as c}from"@catui/tui";const u="\u203B";function l(t){if(t.source==="free"||!t.usage)return`${u} recap \xB7 free`;const{input:r,output:e,cost:a}=t.usage,n=a.total.toFixed(4);return`${u} recap \xB7 ${r} in / ${e} out \xB7 ~$${n}`}o(l,"formatHeader");function p(t){return typeof t=="string"?t:Array.isArray(t)?t.filter(r=>typeof r=="object"&&r!==null&&r.type==="text").map(r=>r.text).join(`
2
+ `):""}o(p,"extractContentText");function C(){return(t,r,e)=>{const a=t.details??{source:"smart",trigger:"manual",triggeredAt:Date.now()},n=p(t.content),i=new f;return i.addChild(new s(1)),i.addChild(new c(e.italic(e.fg("dim",l(a))),0,0)),n.trim()&&i.addChild(new c(e.italic(e.fg("dim",n)),0,0)),i}}o(C,"createRecapRenderer");export{C as createRecapRenderer};
@@ -0,0 +1,51 @@
1
+ /**
2
+ * [WHO]: synthesizeSmartRecap(), buildRecapContext(), hasMeaningfulActivity(), SynthesizeResult
3
+ * [FROM]: Depends on ./recap-budget, ./recap-extractor (walkSessionActivity), ./recap-types, core/extensions-host/types for ExtensionCommandContext + CompletionResult
4
+ * [TO]: Consumed by extensions/builtin/recap/index.ts
5
+ * [HERE]: extensions/builtin/recap/recap-synthesizer.ts - Smart Recap synthesis: builds prompt from session, runs completeSimpleWithUsage, enforces per-call budget
6
+ */
7
+ import type { CompletionResult, ExtensionCommandContext } from "../../../core/extensions-host/types.js";
8
+ import type { RecapSettings, RecapTriggerReason } from "./recap-types.js";
9
+ interface RecapContext {
10
+ prompt: string;
11
+ userTurns: number;
12
+ assistantTurns: number;
13
+ toolCalls: number;
14
+ }
15
+ /**
16
+ * Build the user-side payload fed to the synthesis model. Tight by design:
17
+ * we walk the session and take only the most recent N message turns + a tail
18
+ * of tool names. Tool *results* are intentionally excluded because their bulk
19
+ * eats the per-call input budget without adding facts the recap needs. Returns
20
+ * activity counts alongside the prompt so callers can short-circuit before
21
+ * spending tokens on an empty session.
22
+ *
23
+ * Tool counts come from walkSessionActivity() so Free and Smart see the same
24
+ * tool view (assistant content blocks with type === "toolCall").
25
+ */
26
+ export declare function buildRecapContext(ctx: ExtensionCommandContext): RecapContext;
27
+ /**
28
+ * Cheap pre-check the command handler can run before showing "Synthesizing
29
+ * recap…" so empty sessions don't see a misleading progress notify.
30
+ */
31
+ export declare function hasMeaningfulActivity(ctx: ExtensionCommandContext): boolean;
32
+ export type SynthesizeResult = {
33
+ kind: "ok";
34
+ completion: CompletionResult;
35
+ } | {
36
+ kind: "empty_session";
37
+ } | {
38
+ kind: "budget_blocked";
39
+ reason: string;
40
+ estimatedInputTokens: number;
41
+ } | {
42
+ kind: "no_model";
43
+ } | {
44
+ kind: "no_response";
45
+ };
46
+ /**
47
+ * Run the Smart recap. M1 enforces the per-call input cap before calling the
48
+ * model and surfaces the real `usage` from the provider on success.
49
+ */
50
+ export declare function synthesizeSmartRecap(ctx: ExtensionCommandContext, settings: RecapSettings, _trigger: RecapTriggerReason): Promise<SynthesizeResult>;
51
+ export {};
@@ -0,0 +1,19 @@
1
+ var g=Object.defineProperty;var a=(t,e)=>g(t,"name",{value:e,configurable:!0});import{checkPerCallBudget as T}from"./recap-budget.js";import{walkSessionActivity as y}from"./recap-extractor.js";const f=`You are producing a brief situational recap for the user mid-task.
2
+
3
+ Output exactly three short clauses in this order:
4
+ 1. Current goal (what you understand the user wants \u2014 one sentence).
5
+ 2. Key facts established so far (concrete artifacts: files touched, versions, decisions made \u2014 comma-separated).
6
+ 3. Next decision needed from the user. Start with "Next:" in English replies or "\u4E0B\u4E00\u6B65\uFF1A" in Chinese replies. If no decision is pending, say "Next: continue" / "\u4E0B\u4E00\u6B65\uFF1A\u7EE7\u7EED\u6267\u884C".
7
+
8
+ Constraints:
9
+ - Match the language of the user's most recent message (Chinese in \u2192 Chinese out).
10
+ - Wrap inline identifiers, file paths, and version strings in backticks.
11
+ - No greetings, no meta phrases like "Here is a recap", no markdown headers.
12
+ - 60 English words / 120 Chinese characters maximum across all three clauses combined.
13
+ - Do not contradict facts in the conversation transcript.`,k=500,C=20,x=8;function m(t){return typeof t=="string"?t:Array.isArray(t)?t.filter(e=>typeof e=="object"&&e!==null&&e.type==="text").map(e=>e.text).join(`
14
+ `):""}a(m,"extractText");function h(t){const e=t.sessionManager.getEntries(),l=y(e),s=[];let i=0,n=0;for(const d of e){if(d.type!=="message")continue;const c=d.message;if(c.role==="user"){const r=m(c.content);r.trim()&&(s.push(`User: ${r}`),i+=1)}else if(c.role==="assistant"){const r=m(c.content);r.trim()&&(s.push(`Assistant: ${r.slice(0,k)}`),n+=1)}}const o=s.slice(-C).join(`
15
+
16
+ `),p=l.tools.slice(-x).join(", "),u=[];return o&&u.push(`Recent conversation turns:
17
+ ${o}`),p&&u.push(`Recent tool calls (names only): ${p}`),{prompt:u.join(`
18
+
19
+ `),userTurns:i,assistantTurns:n,toolCalls:l.tools.length}}a(h,"buildRecapContext");function E(t){const e=h(t);return e.userTurns>0||e.toolCalls>0}a(E,"hasMeaningfulActivity");async function A(t,e,l){const s=h(t);if(s.userTurns===0&&s.toolCalls===0)return{kind:"empty_session"};const i=s.prompt,n=T(f,i,e);if(!n.allowed)return{kind:"budget_blocked",reason:n.reason,estimatedInputTokens:n.estimatedInputTokens};const o=await t.completeSimpleWithUsage(f,i);return o?o.text.trim()?{kind:"ok",completion:o}:{kind:"no_response"}:t.model?{kind:"no_response"}:{kind:"no_model"}}a(A,"synthesizeSmartRecap");export{h as buildRecapContext,E as hasMeaningfulActivity,A as synthesizeSmartRecap};
@@ -0,0 +1,40 @@
1
+ /**
2
+ * [WHO]: RECAP_MESSAGE_TYPE, RecapEntry, RecapSettings, RecapTriggerReason types
3
+ * [FROM]: Depends on @catui/ai for Usage
4
+ * [TO]: Consumed by extensions/builtin/recap/index.ts, recap-renderer.ts, recap-synthesizer.ts, recap-budget.ts
5
+ * [HERE]: extensions/builtin/recap/recap-types.ts - shared type surface for the recap extension
6
+ */
7
+ import type { Usage } from "@catui/ai/types";
8
+ /** Custom message type registered by the recap extension. Must match the string in the exclusion set in core/messages.ts. */
9
+ export declare const RECAP_MESSAGE_TYPE = "recap";
10
+ /** Why the recap was emitted. M1 only supports "manual"; "auto-turn" / "auto-compact" land in M4. */
11
+ export type RecapTriggerReason = "manual" | "auto-turn" | "auto-compact";
12
+ /** Whether the recap text came from the model or a deterministic extractor. M1 only ships "smart". */
13
+ export type RecapSource = "smart" | "free";
14
+ /**
15
+ * One emitted recap. Body text lives in CustomMessage.content; this struct
16
+ * lives in CustomMessage.details and drives the renderer's header line.
17
+ */
18
+ export interface RecapEntry {
19
+ source: RecapSource;
20
+ trigger: RecapTriggerReason;
21
+ triggeredAt: number;
22
+ /** Provider-reported token usage. Undefined when source === "free". */
23
+ usage?: Usage;
24
+ }
25
+ /** Per-extension settings, surfaced via getSettings() — not used in M1 but defined here so M3/M4 don't churn the type. */
26
+ export interface RecapSettings {
27
+ autoEnabled: boolean;
28
+ turnsBetween: number;
29
+ contextPctDelta: number;
30
+ budgets: {
31
+ perCallTokensIn: number;
32
+ perCallTokensOut: number;
33
+ sessionCalls: number;
34
+ sessionTokens: number;
35
+ dailyCalls: number;
36
+ dailyTokens: number;
37
+ };
38
+ }
39
+ /** Defaults that ship with M1. Conservative — see docs/Recap扩展.md for rationale. */
40
+ export declare const RECAP_DEFAULTS: RecapSettings;
@@ -0,0 +1 @@
1
+ const e="recap",s={autoEnabled:!1,turnsBetween:6,contextPctDelta:.2,budgets:{perCallTokensIn:1200,perCallTokensOut:250,sessionCalls:10,sessionTokens:15e3,dailyCalls:30,dailyTokens:5e4}};export{s as RECAP_DEFAULTS,e as RECAP_MESSAGE_TYPE};
@@ -0,0 +1,72 @@
1
+ # SAL — Structural Anchor Localization (Experimental)
2
+
3
+ A pluggable Catui extension that gives the agent **address awareness** inside the codebase.
4
+
5
+ ## Status
6
+
7
+ MVP — Layer 1 (task localization) and action grounding only. Memory anchoring is sidecar-only and does not modify NanoMem schema.
8
+
9
+ ## Activation
10
+
11
+ SAL is **enabled by default** on every Catui session.
12
+
13
+ ```bash
14
+ # SAL active (default)
15
+ catui -p "your prompt"
16
+
17
+ # SAL active with local A/B sidecar artifacts
18
+ catui --sal-ab -p "your prompt"
19
+
20
+ # SAL disabled — baseline memory mode
21
+ catui --nosal -p "your prompt"
22
+ ```
23
+
24
+ When `--nosal` is set, all hooks return early and zero work is performed. When SAL is active without `--sal-ab`, it can still emit configured eval data to InsForge, but it does not create local `.memory-experiments` sidecar files.
25
+
26
+ ## Terminal compatibility (Warp, block UIs)
27
+
28
+ SAL builds a **terrain snapshot** of the workspace (walk + read DIP headers). That work is **asynchronous and periodically yields to the event loop** so the TUI can flush user input and status lines to the terminal while indexing runs. If you still see UI glitches in a specific terminal, use `--nosal` to confirm whether SAL is involved, then file an issue with `TERM_PROGRAM`, Warp version, and repro steps.
29
+
30
+ ## Slash commands
31
+
32
+ | Command | Purpose |
33
+ |---------|---------|
34
+ | `/sal:coverage [module1 module2 ...]` | Report DIP P3 coverage per module. PASS ≥ 90%, WARN ≥ 70%, otherwise FAIL. Layer 1 experiments require PASS in target modules. |
35
+ | `/sal:status` | Show flag state, snapshot timestamp, weights source |
36
+
37
+ ## Sidecar output
38
+
39
+ Local sidecar output is disabled by default. Enable it only for explicit SAL A/B experiments with `--sal-ab` or `CATUI_SAL_AB=1`. In that mode, every grounded turn writes a JSON record to:
40
+
41
+ ```
42
+ <workspace>/.memory-experiments/sal/anchors/turn-<timestamp>.json
43
+ ```
44
+
45
+ Each record contains the task anchor, top candidates, evidence reasons, the action anchor inferred from tool touches, and the touched file list. These are the comparable artifacts for the SAL A/B experiment.
46
+
47
+ ## Tunable weights
48
+
49
+ Drop a `sal-config.json` next to the workspace root or under `.memory-experiments/sal/`:
50
+
51
+ ```json
52
+ {
53
+ "directFileEvidence": 0.45,
54
+ "moduleResponsibilityMatch": 0.20,
55
+ "dipContractMatch": 0.15,
56
+ "importNeighborhoodMatch": 0.10,
57
+ "memoryHistoryMatch": 0.10,
58
+ "structuralSalience": 0.35
59
+ }
60
+ ```
61
+
62
+ Missing fields fall back to defaults individually. See `weights.ts` for the full set.
63
+
64
+ ## Pluggability contract
65
+
66
+ Deleting `extensions/builtin/sal/` and removing its registration in `builtin-extensions.ts` must leave the system fully functional. SAL must not be imported by any code in `core/`, `modes/`, `packages/`, or other extensions. Use `--nosal` to opt out at runtime without modifying code.
67
+
68
+ ## See also
69
+
70
+ - `docs/SAL结构锚点定位方案.md` — full design document
71
+ - `docs/SAL对比试验设计.md` — A/B experiment protocol
72
+ - `docs/认知地图架构草案.md` — broader cognitive map context
@@ -0,0 +1,46 @@
1
+ /**
2
+ * [WHO]: StructuralAnchor, AnchorResolution, locateTask(), locateAction(), scoreNode()
3
+ * [FROM]: Depends on extensions/builtin/sal/terrain.ts, extensions/builtin/sal/weights.ts
4
+ * [TO]: Consumed by extensions/builtin/sal/index.ts
5
+ * [HERE]: extensions/builtin/sal/anchors.ts - evidence-driven anchor inference and scoring
6
+ */
7
+ import { type TerrainSnapshot } from "./terrain.js";
8
+ import type { SalWeights } from "./weights.js";
9
+ export interface StructuralAnchor {
10
+ workspaceId: string;
11
+ modulePath?: string;
12
+ filePath?: string;
13
+ confidence: number;
14
+ source: Array<"prompt" | "tool" | "file" | "p3" | "import-graph" | "manual">;
15
+ }
16
+ export interface AnchorCandidate {
17
+ anchor: StructuralAnchor;
18
+ score: number;
19
+ reasons: string[];
20
+ }
21
+ export type AnchorTargetKind = "task" | "memory" | "action";
22
+ export interface AnchorResolution {
23
+ targetKind: AnchorTargetKind;
24
+ candidates: AnchorCandidate[];
25
+ selected?: StructuralAnchor;
26
+ unresolvedSignals?: string[];
27
+ }
28
+ declare function normalizeRel(workspaceRoot: string, p: string): string;
29
+ export interface LocateTaskInput {
30
+ prompt: string;
31
+ cwd: string;
32
+ mentionedFiles?: string[];
33
+ snapshot: TerrainSnapshot;
34
+ weights: SalWeights;
35
+ }
36
+ export declare function locateTask(input: LocateTaskInput): AnchorResolution;
37
+ export interface LocateActionInput {
38
+ touchedFiles: string[];
39
+ snapshot: TerrainSnapshot;
40
+ }
41
+ /**
42
+ * locateAction collapses observed file touches into the highest-confidence module anchor.
43
+ * If multiple modules are touched, the one with the most touches wins; ties broken by depth.
44
+ */
45
+ export declare function locateAction(input: LocateActionInput): AnchorResolution;
46
+ export { normalizeRel };
@@ -0,0 +1 @@
1
+ var k=Object.defineProperty;var f=(e,t)=>k(e,"name",{value:t,configurable:!0});import{moduleIdForPath as w,toPosixPath as p}from"./terrain.js";const y=/[\w./-]+\.(ts|tsx|js|jsx|md|json)/g,M=/\b([a-zA-Z][\w-]*\/[\w/.-]+)/g,F=new Set(["the","and","for","with","this","that","from","into","about","please","file","files","code","function","module","a","an","of","to","in","on","is","how","why","what","when","can","you","i","we","it"]),x=/[\u4e00-\u9fff]+/g;function g(e){const t=e.toLowerCase().split(/[^a-z0-9]+/).filter(o=>o.length>2&&!F.has(o)),n=[];for(const o of e.match(x)??[]){for(let s=0;s<o.length-1;s++)n.push(o.slice(s,s+2));o.length===1&&n.push(o)}return[...t,...n]}f(g,"tokenize");function b(e,t){const n=p(t),o=p(e);return n.startsWith(`${o}/`)?n.slice(o.length+1):n===o?"":n}f(b,"normalizeRel");function T(e){const t=Array.from(new Set(e.match(y)??[])),n=Array.from(new Set((e.match(M)??[]).filter(s=>!t.includes(s)))),o=g(e);return{mentionedFiles:t,mentionedPaths:n,tokens:o}}f(T,"extractSignals");function $(e,t){if(t.kind==="root")return null;const n=[],o=e.weights;let s=0;if(t.filePath){if(e.explicitFilePaths.has(t.filePath))s=1,n.push(`tool/explicit reference to ${t.filePath}`);else for(const r of e.signals.mentionedFiles)if(t.filePath.endsWith(r)){s=Math.max(s,.9),n.push(`prompt mentions filename '${r}'`);break}}else if(t.modulePath){for(const r of e.explicitFilePaths)if(r.startsWith(`${t.modulePath}/`)){s=Math.max(s,.6),n.push(`tool/explicit reference inside ${t.modulePath}`);break}}let c=0;if(t.modulePath){const r=t.modulePath.split("/").map(u=>u.toLowerCase()),h=t.p2Summary?g(t.p2Summary):[],d=r.filter(u=>e.signals.tokens.includes(u)).length+h.filter(u=>e.signals.tokens.includes(u)).length,m=Math.max(1,r.length+Math.min(8,h.length));c=Math.min(1,d/m),d>0&&n.push(`module path/summary token overlap=${d}`)}let l=0;if(t.kind==="file"&&t.hasP3){const r=[t.p3Who,t.p3From,t.p3To,t.p3Here].filter(Boolean).join(" "),h=g(r),d=h.filter(m=>e.signals.tokens.includes(m)).length;l=Math.min(1,d/Math.max(8,h.length/2)),d>0&&n.push(`P3 contract token overlap=${d}`)}let a=0;if(t.kind==="file"&&t.hasP3){const r=`${t.p3From??""} ${t.p3To??""}`;for(const h of e.explicitFilePaths)if(r.includes(h)){a=1,n.push(`P3 FROM/TO references explicit file ${h}`);break}}const P=s*o.directFileEvidence+c*o.moduleResponsibilityMatch+l*o.dipContractMatch+a*o.importNeighborhoodMatch+0*o.memoryHistoryMatch;return P<=0?null:{score:P,reasons:n}}f($,"scoreNode");function S(e,t){return{workspaceId:"default",modulePath:e.modulePath,filePath:e.filePath,confidence:Math.min(1,Math.max(0,t)),source:e.filePath?["file"]:["p3"]}}f(S,"buildAnchor");function R(e){const t=T(e.prompt),n=new Set;for(const a of e.mentionedFiles??[])n.add(p(a));for(const a of t.mentionedFiles)for(const i of e.snapshot.nodes)i.filePath&&i.filePath.endsWith(a)&&n.add(i.filePath);const o={snapshot:e.snapshot,weights:e.weights,signals:t,explicitFilePaths:n},s=[];for(const a of e.snapshot.nodes){const i=$(o,a);i&&s.push({anchor:S(a,i.score),score:i.score,reasons:i.reasons})}s.sort((a,i)=>i.score-a.score);const c=s.slice(0,5),l=[];return c.length===0?l.push("no terrain node matched prompt signals"):c[0].score<.15&&l.push("top candidate confidence below 0.15 \u2014 task likely cross-cutting or under-localized"),{targetKind:"task",candidates:c,selected:c[0]?.anchor,unresolvedSignals:l}}f(R,"locateTask");function v(e){if(e.touchedFiles.length===0)return{targetKind:"action",candidates:[],unresolvedSignals:["no tool touched any file this turn"]};const t=new Map;for(const o of e.touchedFiles){const s=w(e.snapshot,o)??"<root>",c=t.get(s)??{count:0,files:[]};c.count+=1,c.files.push(o),t.set(s,c)}const n=[];for(const[o,s]of t){const l=e.snapshot.nodes.find(i=>(i.kind==="module"||i.kind==="root")&&i.id===o)?.modulePath,a=s.count/e.touchedFiles.length;n.push({anchor:{workspaceId:"default",modulePath:l,filePath:s.files[0],confidence:a,source:["tool"]},score:a,reasons:[`tool touched ${s.count} file(s) in this module`,...s.files.map(i=>` - ${i}`)]})}return n.sort((o,s)=>{if(s.score!==o.score)return s.score-o.score;const c=(o.anchor.modulePath??"").split("/").length;return(s.anchor.modulePath??"").split("/").length-c}),{targetKind:"action",candidates:n,selected:n[0]?.anchor}}f(v,"locateAction");export{v as locateAction,R as locateTask,b as normalizeRel};
@@ -0,0 +1,18 @@
1
+ /**
2
+ * [WHO]: Provides createEvalSink() factory and barrel re-exports for EvalSink, EvalEventEnvelope, EvalVariant, EvalEventType, EvalAdapterId, CreateEvalSinkOptions, createEvalEvent
3
+ * [FROM]: Depends on ./types.js, ./noop-sink.js, ./insforge-sink.js, ./jsonl-sink.js
4
+ * [TO]: Consumed by extensions/builtin/sal/index.ts as the eval entry point
5
+ * [HERE]: extensions/builtin/sal/eval/index.ts - adapter selection and public surface; SAL only ever imports from this file (never from sibling sink modules)
6
+ *
7
+ * Adapter selection rules:
8
+ * 1. If options.adapter is set, use it verbatim.
9
+ * 2. Else infer from options.endpoint scheme:
10
+ * - http://, https:// → "insforge"
11
+ * - file://, /…, ./…, ../… → "jsonl"
12
+ * - missing → "noop"
13
+ *
14
+ * Adding a new backend = add one sibling file + one switch case below.
15
+ */
16
+ import type { CreateEvalSinkOptions, EvalSink } from "./types.js";
17
+ export { createEvalEvent, type CreateEvalSinkOptions, type EvalAdapterId, type EvalEventEnvelope, type EvalEventType, type EvalSink, type EvalVariant, } from "./types.js";
18
+ export declare function createEvalSink(options: CreateEvalSinkOptions): EvalSink;
@@ -0,0 +1 @@
1
+ var t=Object.defineProperty;var n=(e,a)=>t(e,"name",{value:a,configurable:!0});import{InsForgeEvalSink as s}from"./insforge-sink.js";import{JsonlEvalSink as l}from"./jsonl-sink.js";import{noopSink as r}from"./noop-sink.js";import{createEvalEvent as m}from"./types.js";function d(e){if(!e.enabled)return r;const a=e.adapter??o(e.endpoint);switch(a){case"noop":return r;case"jsonl":return e.endpoint?new l(e):(e.onDiagnostic?.({source:"sal.eval",severity:"warning",category:"config",message:"SAL eval JSONL adapter requires a file endpoint; eval upload is disabled.",fingerprint:"sal.eval:config:jsonl-missing-endpoint"}),r);case"insforge":return e.endpoint?new s(e):(e.onDiagnostic?.({source:"sal.eval",severity:"warning",category:"config",message:"SAL eval InsForge adapter requires an endpoint; eval upload is disabled.",fingerprint:"sal.eval:config:insforge-missing-endpoint"}),r);default:{const i=a;return e.onDiagnostic?.({source:"sal.eval",severity:"warning",category:"config",message:"SAL eval adapter is unknown; eval upload is disabled.",detail:{adapter:i},fingerprint:"sal.eval:config:unknown-adapter"}),r}}}n(d,"createEvalSink");function o(e){return e?/^https?:\/\//i.test(e)?"insforge":e.startsWith("file://")||e.startsWith("/")||e.startsWith("./")||e.startsWith("../")?"jsonl":"insforge":"noop"}n(o,"inferAdapter");export{m as createEvalEvent,d as createEvalSink};
@@ -0,0 +1,30 @@
1
+ /**
2
+ * [WHO]: Provides InsForgeEvalSink (PostgREST-backed adapter for SAL)
3
+ * [FROM]: Depends on core/platform/telemetry/* for InsforgeHttpClient + BatchingDispatcher + types; ./types.js for SAL event shape (EvalSink/EvalEventEnvelope/CreateEvalSinkOptions)
4
+ * [TO]: Constructed by eval/index.ts factory when adapter resolves to "insforge"
5
+ * [HERE]: extensions/builtin/sal/eval/insforge-sink.ts - SAL-specific event routing only: run_start→eval_runs, turn_anchor→eval_turns+eval_sal_anchors×2, tool_trace→eval_tool_traces (legacy fallback), memory_recalls→eval_memory_recalls, run_end→eval_runs PATCH. HTTP transport + batching come from core/platform/telemetry/.
6
+ *
7
+ * Pluggable: nothing in this file may be imported from outside the eval/ directory other than core/platform/telemetry (the shared base layer).
8
+ * To add a new backend, write a sibling file with the same EvalSink interface.
9
+ */
10
+ import type { CreateEvalSinkOptions, EvalEventEnvelope, EvalSink } from "./types.js";
11
+ export declare class InsForgeEvalSink implements EvalSink {
12
+ readonly enabled = true;
13
+ private http;
14
+ private dispatcher;
15
+ private onDiagnostic;
16
+ private confirmedRuns;
17
+ private failedRuns;
18
+ constructor(options: CreateEvalSinkOptions);
19
+ sendEvent(event: EvalEventEnvelope): Promise<void>;
20
+ flush(): Promise<void>;
21
+ close(): Promise<void>;
22
+ private routeEvent;
23
+ private handleRunStart;
24
+ private ensureRunExists;
25
+ private handleTurnAnchor;
26
+ private handleRunEnd;
27
+ private handleMemoryRecalls;
28
+ private handleToolTrace;
29
+ private reportDiagnostic;
30
+ }