agim-cli 1.2.45 → 1.2.49

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 (434) hide show
  1. package/CHANGELOG.md +340 -0
  2. package/README.md +40 -6
  3. package/README.zh-CN.md +40 -6
  4. package/dist/cli-ui/config-wizard.js +16 -2
  5. package/dist/cli-ui/config-wizard.js.map +1 -1
  6. package/dist/cli-ui/diag.d.ts +29 -0
  7. package/dist/cli-ui/diag.d.ts.map +1 -0
  8. package/dist/cli-ui/diag.js +135 -0
  9. package/dist/cli-ui/diag.js.map +1 -0
  10. package/dist/cli-ui/i18n.d.ts +38 -0
  11. package/dist/cli-ui/i18n.d.ts.map +1 -1
  12. package/dist/cli-ui/i18n.js +101 -0
  13. package/dist/cli-ui/i18n.js.map +1 -1
  14. package/dist/cli-ui/setup-llm.d.ts +30 -0
  15. package/dist/cli-ui/setup-llm.d.ts.map +1 -0
  16. package/dist/cli-ui/setup-llm.js +460 -0
  17. package/dist/cli-ui/setup-llm.js.map +1 -0
  18. package/dist/cli-ui/setup-mcp.d.ts +19 -0
  19. package/dist/cli-ui/setup-mcp.d.ts.map +1 -0
  20. package/dist/cli-ui/setup-mcp.js +308 -0
  21. package/dist/cli-ui/setup-mcp.js.map +1 -0
  22. package/dist/cli-ui/token-menu.js +2 -2
  23. package/dist/cli-ui/token-menu.js.map +1 -1
  24. package/dist/cli.js +121 -22
  25. package/dist/cli.js.map +1 -1
  26. package/dist/core/access-token.d.ts +16 -5
  27. package/dist/core/access-token.d.ts.map +1 -1
  28. package/dist/core/access-token.js +82 -13
  29. package/dist/core/access-token.js.map +1 -1
  30. package/dist/core/agent-cwd.d.ts.map +1 -1
  31. package/dist/core/agent-cwd.js +74 -0
  32. package/dist/core/agent-cwd.js.map +1 -1
  33. package/dist/core/approval-bus.d.ts +22 -0
  34. package/dist/core/approval-bus.d.ts.map +1 -1
  35. package/dist/core/approval-bus.js +93 -0
  36. package/dist/core/approval-bus.js.map +1 -1
  37. package/dist/core/ask-user-router.d.ts +24 -0
  38. package/dist/core/ask-user-router.d.ts.map +1 -0
  39. package/dist/core/ask-user-router.js +84 -0
  40. package/dist/core/ask-user-router.js.map +1 -0
  41. package/dist/core/ask-user-rpc.d.ts +80 -0
  42. package/dist/core/ask-user-rpc.d.ts.map +1 -0
  43. package/dist/core/ask-user-rpc.js +388 -0
  44. package/dist/core/ask-user-rpc.js.map +1 -0
  45. package/dist/core/audit-log.d.ts +1 -1
  46. package/dist/core/audit-log.d.ts.map +1 -1
  47. package/dist/core/audit-log.js.map +1 -1
  48. package/dist/core/commands/builtin.d.ts.map +1 -1
  49. package/dist/core/commands/builtin.js +21 -5
  50. package/dist/core/commands/builtin.js.map +1 -1
  51. package/dist/core/commands/goal.d.ts +3 -0
  52. package/dist/core/commands/goal.d.ts.map +1 -0
  53. package/dist/core/commands/goal.js +240 -0
  54. package/dist/core/commands/goal.js.map +1 -0
  55. package/dist/core/commands/heartbeat.d.ts +3 -0
  56. package/dist/core/commands/heartbeat.d.ts.map +1 -0
  57. package/dist/core/commands/heartbeat.js +219 -0
  58. package/dist/core/commands/heartbeat.js.map +1 -0
  59. package/dist/core/commands/router-compare.d.ts +3 -0
  60. package/dist/core/commands/router-compare.d.ts.map +1 -0
  61. package/dist/core/commands/router-compare.js +81 -0
  62. package/dist/core/commands/router-compare.js.map +1 -0
  63. package/dist/core/commands/router.d.ts.map +1 -1
  64. package/dist/core/commands/router.js +9 -1
  65. package/dist/core/commands/router.js.map +1 -1
  66. package/dist/core/commands/skill.d.ts +3 -0
  67. package/dist/core/commands/skill.d.ts.map +1 -0
  68. package/dist/core/commands/skill.js +91 -0
  69. package/dist/core/commands/skill.js.map +1 -0
  70. package/dist/core/config-schema.d.ts +28 -0
  71. package/dist/core/config-schema.d.ts.map +1 -1
  72. package/dist/core/config-schema.js +124 -0
  73. package/dist/core/config-schema.js.map +1 -1
  74. package/dist/core/goals.d.ts +81 -0
  75. package/dist/core/goals.d.ts.map +1 -0
  76. package/dist/core/goals.js +361 -0
  77. package/dist/core/goals.js.map +1 -0
  78. package/dist/core/heartbeat-store.d.ts +90 -0
  79. package/dist/core/heartbeat-store.d.ts.map +1 -0
  80. package/dist/core/heartbeat-store.js +302 -0
  81. package/dist/core/heartbeat-store.js.map +1 -0
  82. package/dist/core/heartbeat.d.ts +35 -0
  83. package/dist/core/heartbeat.d.ts.map +1 -0
  84. package/dist/core/heartbeat.js +332 -0
  85. package/dist/core/heartbeat.js.map +1 -0
  86. package/dist/core/intent-llm.d.ts +9 -0
  87. package/dist/core/intent-llm.d.ts.map +1 -1
  88. package/dist/core/intent-llm.js +77 -32
  89. package/dist/core/intent-llm.js.map +1 -1
  90. package/dist/core/llm/agent-loop.d.ts +112 -0
  91. package/dist/core/llm/agent-loop.d.ts.map +1 -0
  92. package/dist/core/llm/agent-loop.js +313 -0
  93. package/dist/core/llm/agent-loop.js.map +1 -0
  94. package/dist/core/llm/anthropic-provider.d.ts +53 -0
  95. package/dist/core/llm/anthropic-provider.d.ts.map +1 -0
  96. package/dist/core/llm/anthropic-provider.js +339 -0
  97. package/dist/core/llm/anthropic-provider.js.map +1 -0
  98. package/dist/core/llm/auto-compact.d.ts +35 -0
  99. package/dist/core/llm/auto-compact.d.ts.map +1 -0
  100. package/dist/core/llm/auto-compact.js +149 -0
  101. package/dist/core/llm/auto-compact.js.map +1 -0
  102. package/dist/core/llm/builtin-dispatcher.d.ts +21 -0
  103. package/dist/core/llm/builtin-dispatcher.d.ts.map +1 -0
  104. package/dist/core/llm/builtin-dispatcher.js +196 -0
  105. package/dist/core/llm/builtin-dispatcher.js.map +1 -0
  106. package/dist/core/llm/imhub-dispatcher.d.ts +27 -0
  107. package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -0
  108. package/dist/core/llm/imhub-dispatcher.js +308 -0
  109. package/dist/core/llm/imhub-dispatcher.js.map +1 -0
  110. package/dist/core/llm/index.d.ts +11 -0
  111. package/dist/core/llm/index.d.ts.map +1 -0
  112. package/dist/core/llm/index.js +16 -0
  113. package/dist/core/llm/index.js.map +1 -0
  114. package/dist/core/llm/introspection.d.ts +73 -0
  115. package/dist/core/llm/introspection.d.ts.map +1 -0
  116. package/dist/core/llm/introspection.js +90 -0
  117. package/dist/core/llm/introspection.js.map +1 -0
  118. package/dist/core/llm/mcp-client.d.ts +80 -0
  119. package/dist/core/llm/mcp-client.d.ts.map +1 -0
  120. package/dist/core/llm/mcp-client.js +270 -0
  121. package/dist/core/llm/mcp-client.js.map +1 -0
  122. package/dist/core/llm/mcp-registry.d.ts +57 -0
  123. package/dist/core/llm/mcp-registry.d.ts.map +1 -0
  124. package/dist/core/llm/mcp-registry.js +155 -0
  125. package/dist/core/llm/mcp-registry.js.map +1 -0
  126. package/dist/core/llm/openai-compat-provider.d.ts +65 -0
  127. package/dist/core/llm/openai-compat-provider.d.ts.map +1 -0
  128. package/dist/core/llm/openai-compat-provider.js +451 -0
  129. package/dist/core/llm/openai-compat-provider.js.map +1 -0
  130. package/dist/core/llm/policy-approval-gate.d.ts +30 -0
  131. package/dist/core/llm/policy-approval-gate.d.ts.map +1 -0
  132. package/dist/core/llm/policy-approval-gate.js +86 -0
  133. package/dist/core/llm/policy-approval-gate.js.map +1 -0
  134. package/dist/core/llm/provider-base.d.ts +302 -0
  135. package/dist/core/llm/provider-base.d.ts.map +1 -0
  136. package/dist/core/llm/provider-base.js +222 -0
  137. package/dist/core/llm/provider-base.js.map +1 -0
  138. package/dist/core/llm/registry.d.ts +44 -0
  139. package/dist/core/llm/registry.d.ts.map +1 -0
  140. package/dist/core/llm/registry.js +160 -0
  141. package/dist/core/llm/registry.js.map +1 -0
  142. package/dist/core/llm/secrets.d.ts +46 -0
  143. package/dist/core/llm/secrets.d.ts.map +1 -0
  144. package/dist/core/llm/secrets.js +157 -0
  145. package/dist/core/llm/secrets.js.map +1 -0
  146. package/dist/core/llm/tool-dispatcher.d.ts +37 -0
  147. package/dist/core/llm/tool-dispatcher.d.ts.map +1 -0
  148. package/dist/core/llm/tool-dispatcher.js +85 -0
  149. package/dist/core/llm/tool-dispatcher.js.map +1 -0
  150. package/dist/core/memory-consolidate.d.ts.map +1 -1
  151. package/dist/core/memory-consolidate.js +38 -23
  152. package/dist/core/memory-consolidate.js.map +1 -1
  153. package/dist/core/memory-distill.d.ts.map +1 -1
  154. package/dist/core/memory-distill.js +51 -25
  155. package/dist/core/memory-distill.js.map +1 -1
  156. package/dist/core/memory-rpc.d.ts.map +1 -1
  157. package/dist/core/memory-rpc.js +6 -0
  158. package/dist/core/memory-rpc.js.map +1 -1
  159. package/dist/core/message-sink.d.ts.map +1 -1
  160. package/dist/core/message-sink.js +76 -0
  161. package/dist/core/message-sink.js.map +1 -1
  162. package/dist/core/notification-evaluator.d.ts +49 -0
  163. package/dist/core/notification-evaluator.d.ts.map +1 -0
  164. package/dist/core/notification-evaluator.js +232 -0
  165. package/dist/core/notification-evaluator.js.map +1 -0
  166. package/dist/core/onboarding.d.ts.map +1 -1
  167. package/dist/core/onboarding.js +10 -0
  168. package/dist/core/onboarding.js.map +1 -1
  169. package/dist/core/persona.d.ts +10 -0
  170. package/dist/core/persona.d.ts.map +1 -1
  171. package/dist/core/persona.js +28 -14
  172. package/dist/core/persona.js.map +1 -1
  173. package/dist/core/push-rpc.d.ts +8 -0
  174. package/dist/core/push-rpc.d.ts.map +1 -1
  175. package/dist/core/push-rpc.js +41 -1
  176. package/dist/core/push-rpc.js.map +1 -1
  177. package/dist/core/registry.d.ts.map +1 -1
  178. package/dist/core/registry.js +11 -0
  179. package/dist/core/registry.js.map +1 -1
  180. package/dist/core/render-router.d.ts.map +1 -1
  181. package/dist/core/render-router.js +23 -6
  182. package/dist/core/render-router.js.map +1 -1
  183. package/dist/core/router-compare.d.ts +76 -0
  184. package/dist/core/router-compare.d.ts.map +1 -0
  185. package/dist/core/router-compare.js +253 -0
  186. package/dist/core/router-compare.js.map +1 -0
  187. package/dist/core/router.d.ts.map +1 -1
  188. package/dist/core/router.js +25 -1
  189. package/dist/core/router.js.map +1 -1
  190. package/dist/core/skills/builtin/agim-self/SKILL.md +81 -0
  191. package/dist/core/skills/loader.d.ts +120 -0
  192. package/dist/core/skills/loader.d.ts.map +1 -0
  193. package/dist/core/skills/loader.js +577 -0
  194. package/dist/core/skills/loader.js.map +1 -0
  195. package/dist/core/skills-rpc.d.ts +44 -0
  196. package/dist/core/skills-rpc.d.ts.map +1 -0
  197. package/dist/core/skills-rpc.js +71 -0
  198. package/dist/core/skills-rpc.js.map +1 -0
  199. package/dist/core/types.d.ts +35 -0
  200. package/dist/core/types.d.ts.map +1 -1
  201. package/dist/core/util/format-age.d.ts +20 -0
  202. package/dist/core/util/format-age.d.ts.map +1 -0
  203. package/dist/core/util/format-age.js +86 -0
  204. package/dist/core/util/format-age.js.map +1 -0
  205. package/dist/plugins/agents/acp/acp-adapter.d.ts +3 -0
  206. package/dist/plugins/agents/acp/acp-adapter.d.ts.map +1 -1
  207. package/dist/plugins/agents/acp/acp-adapter.js +12 -0
  208. package/dist/plugins/agents/acp/acp-adapter.js.map +1 -1
  209. package/dist/plugins/agents/antigravity/index.d.ts +1 -0
  210. package/dist/plugins/agents/antigravity/index.d.ts.map +1 -1
  211. package/dist/plugins/agents/antigravity/index.js +1 -0
  212. package/dist/plugins/agents/antigravity/index.js.map +1 -1
  213. package/dist/plugins/agents/claude-code/index.d.ts +1 -0
  214. package/dist/plugins/agents/claude-code/index.d.ts.map +1 -1
  215. package/dist/plugins/agents/claude-code/index.js +1 -0
  216. package/dist/plugins/agents/claude-code/index.js.map +1 -1
  217. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +22 -0
  218. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -1
  219. package/dist/plugins/agents/claude-code/mcp-approval-server.js +157 -0
  220. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
  221. package/dist/plugins/agents/codex/index.d.ts +1 -0
  222. package/dist/plugins/agents/codex/index.d.ts.map +1 -1
  223. package/dist/plugins/agents/codex/index.js +1 -0
  224. package/dist/plugins/agents/codex/index.js.map +1 -1
  225. package/dist/plugins/agents/cursor/ensure-mcp-config.d.ts +43 -0
  226. package/dist/plugins/agents/cursor/ensure-mcp-config.d.ts.map +1 -0
  227. package/dist/plugins/agents/cursor/ensure-mcp-config.js +99 -0
  228. package/dist/plugins/agents/cursor/ensure-mcp-config.js.map +1 -0
  229. package/dist/plugins/agents/cursor/index.d.ts +28 -0
  230. package/dist/plugins/agents/cursor/index.d.ts.map +1 -0
  231. package/dist/plugins/agents/cursor/index.js +290 -0
  232. package/dist/plugins/agents/cursor/index.js.map +1 -0
  233. package/dist/plugins/agents/native/index.d.ts +34 -0
  234. package/dist/plugins/agents/native/index.d.ts.map +1 -0
  235. package/dist/plugins/agents/native/index.js +598 -0
  236. package/dist/plugins/agents/native/index.js.map +1 -0
  237. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +1 -0
  238. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -1
  239. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +1 -0
  240. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -1
  241. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts +4 -0
  242. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts.map +1 -1
  243. package/dist/plugins/messengers/wechat/ilink-adapter.js +26 -1
  244. package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -1
  245. package/dist/web/agim-skills-api.d.ts +4 -0
  246. package/dist/web/agim-skills-api.d.ts.map +1 -0
  247. package/dist/web/agim-skills-api.js +150 -0
  248. package/dist/web/agim-skills-api.js.map +1 -0
  249. package/dist/web/background-tasks-api.d.ts +7 -0
  250. package/dist/web/background-tasks-api.d.ts.map +1 -0
  251. package/dist/web/background-tasks-api.js +225 -0
  252. package/dist/web/background-tasks-api.js.map +1 -0
  253. package/dist/web/llm-api.d.ts +8 -0
  254. package/dist/web/llm-api.d.ts.map +1 -0
  255. package/dist/web/llm-api.js +300 -0
  256. package/dist/web/llm-api.js.map +1 -0
  257. package/dist/web/mcp-api.d.ts +8 -0
  258. package/dist/web/mcp-api.d.ts.map +1 -0
  259. package/dist/web/mcp-api.js +205 -0
  260. package/dist/web/mcp-api.js.map +1 -0
  261. package/dist/web/public/assets/{a2a-Cdl8iY0e.js → a2a-06bnQicA.js} +3 -3
  262. package/dist/web/public/assets/{a2a-Cdl8iY0e.js.map → a2a-06bnQicA.js.map} +1 -1
  263. package/dist/web/public/assets/{activity-DXahuK1C.js → activity-Bhc6Esfy.js} +2 -2
  264. package/dist/web/public/assets/{activity-DXahuK1C.js.map → activity-Bhc6Esfy.js.map} +1 -1
  265. package/dist/web/public/assets/{admins-C8fJsuHC.js → admins-BVpnOw3o.js} +3 -3
  266. package/dist/web/public/assets/{admins-C8fJsuHC.js.map → admins-BVpnOw3o.js.map} +1 -1
  267. package/dist/web/public/assets/agents-Cn7D3UMz.js +7 -0
  268. package/dist/web/public/assets/agents-Cn7D3UMz.js.map +1 -0
  269. package/dist/web/public/assets/{approvals-CpyL90ef.js → approvals-BJiLyoLf.js} +3 -3
  270. package/dist/web/public/assets/{approvals-CpyL90ef.js.map → approvals-BJiLyoLf.js.map} +1 -1
  271. package/dist/web/public/assets/asks-C7gKbna1.js +7 -0
  272. package/dist/web/public/assets/asks-C7gKbna1.js.map +1 -0
  273. package/dist/web/public/assets/{audit-DDqpiC3z.js → audit-DgWZD8l5.js} +2 -2
  274. package/dist/web/public/assets/{audit-DDqpiC3z.js.map → audit-DgWZD8l5.js.map} +1 -1
  275. package/dist/web/public/assets/bell-pWZT2wlM.js +7 -0
  276. package/dist/web/public/assets/bell-pWZT2wlM.js.map +1 -0
  277. package/dist/web/public/assets/{bgjobs-CAFV-I4I.js → bgjobs-DkAJdzHf.js} +2 -2
  278. package/dist/web/public/assets/{bgjobs-CAFV-I4I.js.map → bgjobs-DkAJdzHf.js.map} +1 -1
  279. package/dist/web/public/assets/{brain-CJyZe3Oa.js → brain-B0mM-ro_.js} +2 -2
  280. package/dist/web/public/assets/{brain-CJyZe3Oa.js.map → brain-B0mM-ro_.js.map} +1 -1
  281. package/dist/web/public/assets/{briefcase-DcLbQF2I.js → briefcase-CUQlj33_.js} +2 -2
  282. package/dist/web/public/assets/{briefcase-DcLbQF2I.js.map → briefcase-CUQlj33_.js.map} +1 -1
  283. package/dist/web/public/assets/{chevron-right-BhKELKvM.js → chevron-right-CJuDP_fx.js} +2 -2
  284. package/dist/web/public/assets/{chevron-right-BhKELKvM.js.map → chevron-right-CJuDP_fx.js.map} +1 -1
  285. package/dist/web/public/assets/{circle-check-D1qST9RS.js → circle-check-CYse8LRx.js} +2 -2
  286. package/dist/web/public/assets/{circle-check-D1qST9RS.js.map → circle-check-CYse8LRx.js.map} +1 -1
  287. package/dist/web/public/assets/{circle-check-big-EKe3o9y1.js → circle-check-big-9NpJLA1Z.js} +2 -2
  288. package/dist/web/public/assets/{circle-check-big-EKe3o9y1.js.map → circle-check-big-9NpJLA1Z.js.map} +1 -1
  289. package/dist/web/public/assets/{circle-x-DtePUX5x.js → circle-x-BxZ24SVG.js} +2 -2
  290. package/dist/web/public/assets/{circle-x-DtePUX5x.js.map → circle-x-BxZ24SVG.js.map} +1 -1
  291. package/dist/web/public/assets/{confirm-dialog-CCfCf6BG.js → confirm-dialog-CmHeZ7ei.js} +2 -2
  292. package/dist/web/public/assets/{confirm-dialog-CCfCf6BG.js.map → confirm-dialog-CmHeZ7ei.js.map} +1 -1
  293. package/dist/web/public/assets/{data-table-BRLUxacD.js → data-table-tu4BIahS.js} +5 -5
  294. package/dist/web/public/assets/{data-table-BRLUxacD.js.map → data-table-tu4BIahS.js.map} +1 -1
  295. package/dist/web/public/assets/{dialog-By4YA8bm.js → dialog-D8QAkLhI.js} +3 -3
  296. package/dist/web/public/assets/{dialog-By4YA8bm.js.map → dialog-D8QAkLhI.js.map} +1 -1
  297. package/dist/web/public/assets/{download-CiTB2sCh.js → download-DBS0ZPTh.js} +2 -2
  298. package/dist/web/public/assets/{download-CiTB2sCh.js.map → download-DBS0ZPTh.js.map} +1 -1
  299. package/dist/web/public/assets/{email-H-b2AExg.js → email-DgbAEEvZ.js} +3 -3
  300. package/dist/web/public/assets/{email-H-b2AExg.js.map → email-DgbAEEvZ.js.map} +1 -1
  301. package/dist/web/public/assets/{empty-state-DZJTUlvz.js → empty-state-B1S_EYNJ.js} +2 -2
  302. package/dist/web/public/assets/{empty-state-DZJTUlvz.js.map → empty-state-B1S_EYNJ.js.map} +1 -1
  303. package/dist/web/public/assets/{external-link-CfU6Rttn.js → external-link-Dkmwlv6p.js} +2 -2
  304. package/dist/web/public/assets/{external-link-CfU6Rttn.js.map → external-link-Dkmwlv6p.js.map} +1 -1
  305. package/dist/web/public/assets/{eye-BvWcd0pJ.js → eye-Ch0DLviZ.js} +4 -4
  306. package/dist/web/public/assets/{eye-BvWcd0pJ.js.map → eye-Ch0DLviZ.js.map} +1 -1
  307. package/dist/web/public/assets/{facts-BRDbQLSI.js → facts-C3YV1Mkp.js} +2 -2
  308. package/dist/web/public/assets/{facts-BRDbQLSI.js.map → facts-C3YV1Mkp.js.map} +1 -1
  309. package/dist/web/public/assets/goals-DEt5gGry.js +17 -0
  310. package/dist/web/public/assets/goals-DEt5gGry.js.map +1 -0
  311. package/dist/web/public/assets/{health-DJPFOiKw.js → health-DuB9uNiZ.js} +2 -2
  312. package/dist/web/public/assets/{health-DJPFOiKw.js.map → health-DuB9uNiZ.js.map} +1 -1
  313. package/dist/web/public/assets/heart-pulse-CD8xNAGs.js +7 -0
  314. package/dist/web/public/assets/heart-pulse-CD8xNAGs.js.map +1 -0
  315. package/dist/web/public/assets/heartbeat-DbR8VwmG.js +7 -0
  316. package/dist/web/public/assets/heartbeat-DbR8VwmG.js.map +1 -0
  317. package/dist/web/public/assets/hot-izk3vGQB.js +17 -0
  318. package/dist/web/public/assets/hot-izk3vGQB.js.map +1 -0
  319. package/dist/web/public/assets/index-B7QRVy9N.css +1 -0
  320. package/dist/web/public/assets/index-BY1vfCja.js +166 -0
  321. package/dist/web/public/assets/index-BY1vfCja.js.map +1 -0
  322. package/dist/web/public/assets/installed-BXB3-YIy.js +31 -0
  323. package/dist/web/public/assets/installed-BXB3-YIy.js.map +1 -0
  324. package/dist/web/public/assets/{jobs-DdWaBgOh.js → jobs-DkbM4mIQ.js} +2 -2
  325. package/dist/web/public/assets/{jobs-DdWaBgOh.js.map → jobs-DkbM4mIQ.js.map} +1 -1
  326. package/dist/web/public/assets/{layout-Dr12u0W_.js → layout-5ePj6Bek.js} +2 -2
  327. package/dist/web/public/assets/{layout-Dr12u0W_.js.map → layout-5ePj6Bek.js.map} +1 -1
  328. package/dist/web/public/assets/layout-B5Dzy_Zc.js +2 -0
  329. package/dist/web/public/assets/layout-B5Dzy_Zc.js.map +1 -0
  330. package/dist/web/public/assets/layout-BZpbNQFb.js +2 -0
  331. package/dist/web/public/assets/layout-BZpbNQFb.js.map +1 -0
  332. package/dist/web/public/assets/layout-DY9Xq34u.js +2 -0
  333. package/dist/web/public/assets/layout-DY9Xq34u.js.map +1 -0
  334. package/dist/web/public/assets/{layout-BybpkTy0.js → layout-DxzBaeTv.js} +2 -2
  335. package/dist/web/public/assets/{layout-BybpkTy0.js.map → layout-DxzBaeTv.js.map} +1 -1
  336. package/dist/web/public/assets/llm-Dg4W7eRM.js +7 -0
  337. package/dist/web/public/assets/llm-Dg4W7eRM.js.map +1 -0
  338. package/dist/web/public/assets/{loader-circle-BiR4Xs-3.js → loader-circle-pGNYdPoE.js} +2 -2
  339. package/dist/web/public/assets/{loader-circle-BiR4Xs-3.js.map → loader-circle-pGNYdPoE.js.map} +1 -1
  340. package/dist/web/public/assets/{map-pin-B8hea8yW.js → map-pin-D1UX9mg7.js} +2 -2
  341. package/dist/web/public/assets/{map-pin-B8hea8yW.js.map → map-pin-D1UX9mg7.js.map} +1 -1
  342. package/dist/web/public/assets/mcp-uoOzu4_J.js +7 -0
  343. package/dist/web/public/assets/mcp-uoOzu4_J.js.map +1 -0
  344. package/dist/web/public/assets/{memos-C0_I1Uzt.js → memos-CAWASHg5.js} +2 -2
  345. package/dist/web/public/assets/{memos-C0_I1Uzt.js.map → memos-CAWASHg5.js.map} +1 -1
  346. package/dist/web/public/assets/{messengers-DuS5_JlE.js → messengers-B1-mZms8.js} +3 -3
  347. package/dist/web/public/assets/{messengers-DuS5_JlE.js.map → messengers-B1-mZms8.js.map} +1 -1
  348. package/dist/web/public/assets/native-agent-UuVvvzsW.js +7 -0
  349. package/dist/web/public/assets/native-agent-UuVvvzsW.js.map +1 -0
  350. package/dist/web/public/assets/{network-CpkocMHV.js → network-DpjSgAwW.js} +2 -2
  351. package/dist/web/public/assets/{network-CpkocMHV.js.map → network-DpjSgAwW.js.map} +1 -1
  352. package/dist/web/public/assets/{outbox-mGqTV2Ex.js → outbox-DeAgiXkY.js} +3 -3
  353. package/dist/web/public/assets/{outbox-mGqTV2Ex.js.map → outbox-DeAgiXkY.js.map} +1 -1
  354. package/dist/web/public/assets/{pagination-BAYvy11u.js → pagination-5GD_he3L.js} +3 -3
  355. package/dist/web/public/assets/{pagination-BAYvy11u.js.map → pagination-5GD_he3L.js.map} +1 -1
  356. package/dist/web/public/assets/{persona-CM0TLPJa.js → persona-BhkDCmeB.js} +2 -2
  357. package/dist/web/public/assets/{persona-CM0TLPJa.js.map → persona-BhkDCmeB.js.map} +1 -1
  358. package/dist/web/public/assets/{play-DMgMpe7N.js → play-B7o6cJ8W.js} +2 -2
  359. package/dist/web/public/assets/{play-DMgMpe7N.js.map → play-B7o6cJ8W.js.map} +1 -1
  360. package/dist/web/public/assets/plus-C5d4C6Zp.js +7 -0
  361. package/dist/web/public/assets/plus-C5d4C6Zp.js.map +1 -0
  362. package/dist/web/public/assets/policy-Ct_sKm3Y.js +2 -0
  363. package/dist/web/public/assets/{policy-Ch-xirrA.js.map → policy-Ct_sKm3Y.js.map} +1 -1
  364. package/dist/web/public/assets/{refresh-ccw-D8mc4hxU.js → refresh-ccw-BlXMN3UX.js} +2 -2
  365. package/dist/web/public/assets/{refresh-ccw-D8mc4hxU.js.map → refresh-ccw-BlXMN3UX.js.map} +1 -1
  366. package/dist/web/public/assets/{reminders-Dbe7Rc4h.js → reminders-gb1Y0S3t.js} +4 -9
  367. package/dist/web/public/assets/reminders-gb1Y0S3t.js.map +1 -0
  368. package/dist/web/public/assets/{save-1aALBaZc.js → save-DAFuApnY.js} +2 -2
  369. package/dist/web/public/assets/{save-1aALBaZc.js.map → save-DAFuApnY.js.map} +1 -1
  370. package/dist/web/public/assets/{schedules-BBQ2wcnS.js → schedules-CtFumT2B.js} +3 -3
  371. package/dist/web/public/assets/{schedules-BBQ2wcnS.js.map → schedules-CtFumT2B.js.map} +1 -1
  372. package/dist/web/public/assets/{search-DDYjsJ7-.js → search-BWuZE0YD.js} +2 -2
  373. package/dist/web/public/assets/{search-DDYjsJ7-.js.map → search-BWuZE0YD.js.map} +1 -1
  374. package/dist/web/public/assets/{service-DMp11TKF.js → service-lah7RWEc.js} +3 -3
  375. package/dist/web/public/assets/{service-DMp11TKF.js.map → service-lah7RWEc.js.map} +1 -1
  376. package/dist/web/public/assets/{status-badge-Cvj81JKi.js → status-badge-BgmFa_8z.js} +2 -2
  377. package/dist/web/public/assets/{status-badge-Cvj81JKi.js.map → status-badge-BgmFa_8z.js.map} +1 -1
  378. package/dist/web/public/assets/{subtasks-BC3Pf7OZ.js → subtasks-CgqrOGhl.js} +3 -3
  379. package/dist/web/public/assets/{subtasks-BC3Pf7OZ.js.map → subtasks-CgqrOGhl.js.map} +1 -1
  380. package/dist/web/public/assets/{table-B6nK6k3L.js → table-BhDzIBvB.js} +2 -2
  381. package/dist/web/public/assets/{table-B6nK6k3L.js.map → table-BhDzIBvB.js.map} +1 -1
  382. package/dist/web/public/assets/{topn-BwFh2jKv.js → topn-DXgTCdM_.js} +3 -3
  383. package/dist/web/public/assets/{topn-BwFh2jKv.js.map → topn-DXgTCdM_.js.map} +1 -1
  384. package/dist/web/public/assets/{trash-2-CqpMjbu5.js → trash-2-i4F_Rzh3.js} +3 -3
  385. package/dist/web/public/assets/{trash-2-CqpMjbu5.js.map → trash-2-i4F_Rzh3.js.map} +1 -1
  386. package/dist/web/public/assets/use-background-tasks-Cq2D7JQJ.js +2 -0
  387. package/dist/web/public/assets/use-background-tasks-Cq2D7JQJ.js.map +1 -0
  388. package/dist/web/public/assets/use-llm-admin-BzOVXSjz.js +2 -0
  389. package/dist/web/public/assets/use-llm-admin-BzOVXSjz.js.map +1 -0
  390. package/dist/web/public/assets/{use-memory-jxZdt-RL.js → use-memory-B_RQWQyG.js} +2 -2
  391. package/dist/web/public/assets/{use-memory-jxZdt-RL.js.map → use-memory-B_RQWQyG.js.map} +1 -1
  392. package/dist/web/public/assets/{use-observability-9TDgLO9y.js → use-observability-CCTN-a71.js} +2 -2
  393. package/dist/web/public/assets/{use-observability-9TDgLO9y.js.map → use-observability-CCTN-a71.js.map} +1 -1
  394. package/dist/web/public/assets/{use-settings-DFB_c2pr.js → use-settings-D4EdDLiK.js} +2 -2
  395. package/dist/web/public/assets/{use-settings-DFB_c2pr.js.map → use-settings-D4EdDLiK.js.map} +1 -1
  396. package/dist/web/public/assets/{use-workspace-C-Eg6yWa.js → use-workspace-BhTEp_QH.js} +2 -2
  397. package/dist/web/public/assets/{use-workspace-C-Eg6yWa.js.map → use-workspace-BhTEp_QH.js.map} +1 -1
  398. package/dist/web/public/assets/useQuery-DmoWKLw3.js +2 -0
  399. package/dist/web/public/assets/{useQuery-rLmHxFp4.js.map → useQuery-DmoWKLw3.js.map} +1 -1
  400. package/dist/web/public/assets/{vector-D9UqmLi6.js → vector-By-cheMu.js} +2 -2
  401. package/dist/web/public/assets/{vector-D9UqmLi6.js.map → vector-By-cheMu.js.map} +1 -1
  402. package/dist/web/public/assets/{viewer-_OpObeWr.js → viewer-CJNrz2iw.js} +3 -3
  403. package/dist/web/public/assets/{viewer-_OpObeWr.js.map → viewer-CJNrz2iw.js.map} +1 -1
  404. package/dist/web/public/assets/{workspace-DSHRdspq.js → workspace-DvYlIAhu.js} +4 -4
  405. package/dist/web/public/assets/{workspace-DSHRdspq.js.map → workspace-DvYlIAhu.js.map} +1 -1
  406. package/dist/web/public/assets/{workspaces-CsBdhbXz.js → workspaces-2pn73O-K.js} +3 -3
  407. package/dist/web/public/assets/{workspaces-CsBdhbXz.js.map → workspaces-2pn73O-K.js.map} +1 -1
  408. package/dist/web/public/assets/{x-D1re-vBd.js → x-5Z_de5zo.js} +2 -2
  409. package/dist/web/public/assets/{x-D1re-vBd.js.map → x-5Z_de5zo.js.map} +1 -1
  410. package/dist/web/public/index.html +2 -2
  411. package/dist/web/server.d.ts.map +1 -1
  412. package/dist/web/server.js +45 -0
  413. package/dist/web/server.js.map +1 -1
  414. package/package.json +2 -2
  415. package/dist/web/public/assets/agents-lrzFDGgX.js +0 -12
  416. package/dist/web/public/assets/agents-lrzFDGgX.js.map +0 -1
  417. package/dist/web/public/assets/hot-CFGHGkqL.js +0 -17
  418. package/dist/web/public/assets/hot-CFGHGkqL.js.map +0 -1
  419. package/dist/web/public/assets/index-C4hk1i67.js +0 -166
  420. package/dist/web/public/assets/index-C4hk1i67.js.map +0 -1
  421. package/dist/web/public/assets/index-Cvacw7Jg.css +0 -1
  422. package/dist/web/public/assets/installed-UONWfKHS.js +0 -7
  423. package/dist/web/public/assets/installed-UONWfKHS.js.map +0 -1
  424. package/dist/web/public/assets/layout-C8_IQRGM.js +0 -2
  425. package/dist/web/public/assets/layout-C8_IQRGM.js.map +0 -1
  426. package/dist/web/public/assets/layout-CxRHLqvi.js +0 -2
  427. package/dist/web/public/assets/layout-CxRHLqvi.js.map +0 -1
  428. package/dist/web/public/assets/layout-LC5zjw1h.js +0 -2
  429. package/dist/web/public/assets/layout-LC5zjw1h.js.map +0 -1
  430. package/dist/web/public/assets/policy-Ch-xirrA.js +0 -2
  431. package/dist/web/public/assets/reminders-Dbe7Rc4h.js.map +0 -1
  432. package/dist/web/public/assets/use-skills-OZKB5x-S.js +0 -2
  433. package/dist/web/public/assets/use-skills-OZKB5x-S.js.map +0 -1
  434. package/dist/web/public/assets/useQuery-rLmHxFp4.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/core/commands/router.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAMhD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,MAAM,CAAC,CAsEjB"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/core/commands/router.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAOhD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,MAAM,CAAC,CA8EjB"}
@@ -3,6 +3,7 @@ import { classifyIntent } from '../intent.js';
3
3
  import { circuitBreaker } from '../circuit-breaker.js';
4
4
  import { registry } from '../registry.js';
5
5
  import { sessionManager } from '../session.js';
6
+ import { handleRouterCompareCommand } from './router-compare.js';
6
7
  export async function handleRouterCommand(args, ctx) {
7
8
  const parts = args.trim().split(/\s+/).filter(Boolean);
8
9
  const subcommand = parts[0] || 'status';
@@ -64,8 +65,15 @@ export async function handleRouterCommand(args, ctx) {
64
65
  circuitBreaker.reset();
65
66
  return '✅ Cleared all circuit breakers.';
66
67
  }
68
+ case 'compare':
69
+ case 'cmp':
70
+ case 'ab':
71
+ // Stage 5 — A/B evaluator. Delegated to router-compare.ts so the
72
+ // dispatch surface stays small and the slash-command body lives
73
+ // next to runRouterCompare / formatCompareResult.
74
+ return handleRouterCompareCommand(rest, ctx);
67
75
  default:
68
- return `用法: /router [status|policy|explain <msg>|reset [<agent>]]`;
76
+ return `用法: /router [status|policy|explain <msg>|reset [<agent>]|compare <a> <b> <prompt>]`;
69
77
  }
70
78
  }
71
79
  //# sourceMappingURL=router.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/core/commands/router.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,GAAiB;IAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACtD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAA;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAErC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC;QACd,KAAK,GAAG,CAAC,CAAC,CAAC;YACT,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAA;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC3B,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;gBAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;gBACrC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI;oBACxB,CAAC,CAAC,cAAc,OAAO,CAAC,QAAQ,YAAY;oBAC5C,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC;wBACpB,CAAC,CAAC,KAAK,OAAO,CAAC,QAAQ,mBAAmB;wBAC1C,CAAC,CAAC,EAAE,CAAA;gBACR,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,CAAA;YAC/B,CAAC,CAAC,CAAA;YACF,OAAO,2BAA2B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,+DAA+D,CAAA;QACnH,CAAC;QAED,KAAK,QAAQ,CAAC;QACd,KAAK,GAAG,CAAC,CAAC,CAAC;YACT,OAAO;;;;;;;;;CASZ,CAAA;QACG,CAAC;QAED,KAAK,SAAS,CAAC;QACf,KAAK,GAAG,CAAC,CAAC,CAAC;YACT,IAAI,CAAC,IAAI;gBAAE,OAAO,kDAAkD,CAAA;YAEpE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;YAClG,MAAM,MAAM,GAAG,OAAO,EAAE,KAAK,CAAA;YAE7B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAA;YACzE,OAAO;;OAEN,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;aAE/C,MAAM,CAAC,KAAK,cAAc,MAAM,CAAC,KAAK;QAC3C,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,MAAM;;aAER,MAAM,IAAI,GAAG,EAAE,CAAA;QACxB,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,+CAA+C;YAC/C,sDAAsD;YACtD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACvB,IAAI,MAAM,EAAE,CAAC;gBACX,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC5B,OAAO,kCAAkC,MAAM,IAAI,CAAA;YACrD,CAAC;YACD,cAAc,CAAC,KAAK,EAAE,CAAA;YACtB,OAAO,iCAAiC,CAAA;QAC1C,CAAC;QAED;YACE,OAAO,2DAA2D,CAAA;IACtE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/core/commands/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RouteContext } from '../router.js';
2
+ export declare function handleSkillCommand(args: string, ctx: RouteContext): Promise<string>;
3
+ //# sourceMappingURL=skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../../src/core/commands/skill.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AA2BhD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA0CzF"}
@@ -0,0 +1,91 @@
1
+ // /skill command — operator-facing reader for the agim skills loader
2
+ // (Stage 3 / P0 #3).
3
+ //
4
+ // Subcommands:
5
+ // /skill same as /skill list
6
+ // /skill help
7
+ // /skill list one row per skill with status flag
8
+ // /skill show <name> full SKILL.md body (tier-2 manual fetch)
9
+ // /skill refresh force re-scan (after dropping a new SKILL.md)
10
+ // /skill check same as list but include requires status detail
11
+ import { listSkills, readSkillBody, invalidateSkillsCache, } from '../skills/loader.js';
12
+ const HELP = [
13
+ '🧠 **/skill** — agim skills loader(agent 跨后端共享的 SKILL.md)',
14
+ '',
15
+ '用法:',
16
+ ' `/skill` 列出所有已加载 skill (= /skill list)',
17
+ ' `/skill list` 同上',
18
+ ' `/skill show <name>` 打印某个 skill 的完整 SKILL.md',
19
+ ' `/skill refresh` 强制重新扫描磁盘',
20
+ ' `/skill check` 列出详细的 requires 状态(缺什么)',
21
+ '',
22
+ '在哪里放 SKILL.md:',
23
+ ' ~/.agim/skills/<name>/SKILL.md (operator 自定义,优先)',
24
+ ' <agim-dist>/skills/builtin/... (agim 内置,被同名 workspace 覆盖)',
25
+ '',
26
+ '三层加载:',
27
+ ' · tier 1: 名字 + 描述,每轮注入 prompt(自动)',
28
+ ' · tier 2: 全文 body,agent 用 mcp__imhub__read_skill(name) 取',
29
+ ' · tier 3: scripts/ references/ assets/ 子目录,agent 走文件读取工具',
30
+ ].join('\n');
31
+ export async function handleSkillCommand(args, ctx) {
32
+ void ctx; // unused; skills are global
33
+ const trimmed = args.trim();
34
+ const parts = trimmed.split(/\s+/).filter(Boolean);
35
+ const sub = (parts[0] || '').toLowerCase();
36
+ const rest = trimmed.slice(parts[0]?.length ?? 0).trim();
37
+ if (!sub || sub === 'list' || sub === 'ls') {
38
+ return renderList(false);
39
+ }
40
+ switch (sub) {
41
+ case 'help':
42
+ case '?':
43
+ return HELP;
44
+ case 'check':
45
+ case 'status':
46
+ return renderList(true);
47
+ case 'show':
48
+ case 'cat':
49
+ case 'view': {
50
+ const name = rest.trim();
51
+ if (!name)
52
+ return '用法:`/skill show <name>`(用 `/skill list` 查名字)';
53
+ const body = readSkillBody(name);
54
+ if (body === null)
55
+ return `❌ 未找到 skill: ${name}`;
56
+ // IM 大段 markdown 由 viewer 自动路由;这里直接返回就行。
57
+ return body;
58
+ }
59
+ case 'refresh':
60
+ case 'reload':
61
+ case 'rescan': {
62
+ invalidateSkillsCache();
63
+ const after = listSkills();
64
+ return `✅ 已重新扫描。当前 ${after.length} 个 skill。`;
65
+ }
66
+ default:
67
+ return `未知子命令:\`/skill ${sub}\`。用 \`/skill help\` 查看用法。`;
68
+ }
69
+ }
70
+ function renderList(detail) {
71
+ const skills = listSkills();
72
+ if (skills.length === 0) {
73
+ return '(当前没有 skill。把 SKILL.md 放到 `~/.agim/skills/<name>/SKILL.md` 后用 `/skill refresh` 重新扫描。)';
74
+ }
75
+ const lines = ['🧠 **agim skills**'];
76
+ for (const s of skills.slice().sort((a, b) => a.name.localeCompare(b.name))) {
77
+ const flag = s.available ? (s.always ? '⭐' : '✅') : '⏸';
78
+ const src = s.source === 'workspace' ? 'ws' : 'builtin';
79
+ const reason = !s.available && s.unavailableReason ? ` — ${s.unavailableReason}` : '';
80
+ lines.push(`${flag} \`${s.name}\` [${src}] — ${s.description}${reason}`);
81
+ if (detail) {
82
+ if (s.requiresBins.length > 0)
83
+ lines.push(` requires bins: ${s.requiresBins.join(', ')}`);
84
+ if (s.requiresEnv.length > 0)
85
+ lines.push(` requires env: ${s.requiresEnv.join(', ')}`);
86
+ lines.push(` dir: ${s.dir}`);
87
+ }
88
+ }
89
+ return lines.join('\n');
90
+ }
91
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/core/commands/skill.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,34 @@ export declare const configSchema: z.ZodObject<{
46
46
  burst: z.ZodNumber;
47
47
  }, z.core.$strip>>;
48
48
  }, z.core.$strip>>>;
49
+ llmBackends: z.ZodOptional<z.ZodArray<z.ZodObject<{
50
+ name: z.ZodString;
51
+ provider: z.ZodEnum<{
52
+ "openai-compat": "openai-compat";
53
+ anthropic: "anthropic";
54
+ }>;
55
+ model: z.ZodString;
56
+ baseUrl: z.ZodOptional<z.ZodString>;
57
+ label: z.ZodOptional<z.ZodString>;
58
+ extraHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
59
+ temperature: z.ZodOptional<z.ZodNumber>;
60
+ maxTokens: z.ZodOptional<z.ZodNumber>;
61
+ retryOnTransient: z.ZodOptional<z.ZodNumber>;
62
+ enabled: z.ZodOptional<z.ZodBoolean>;
63
+ }, z.core.$strip>>>;
64
+ llmRoles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
65
+ mcpServers: z.ZodOptional<z.ZodArray<z.ZodObject<{
66
+ name: z.ZodString;
67
+ command: z.ZodOptional<z.ZodString>;
68
+ args: z.ZodOptional<z.ZodArray<z.ZodString>>;
69
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
70
+ cwd: z.ZodOptional<z.ZodString>;
71
+ url: z.ZodOptional<z.ZodString>;
72
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
73
+ toolTimeoutMs: z.ZodOptional<z.ZodNumber>;
74
+ enabledTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
75
+ enabled: z.ZodOptional<z.ZodBoolean>;
76
+ }, z.core.$strip>>>;
49
77
  }, z.core.$loose>;
50
78
  export type ValidatedConfig = z.infer<typeof configSchema>;
51
79
  export declare function validateConfig(data: unknown): {
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiCvB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuBT,CAAA;AAEhB,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1D,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAC1C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAsBnH"}
1
+ {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAuJvB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCT,CAAA;AAEhB,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1D,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAC1C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAsBnH"}
@@ -26,6 +26,119 @@ const discordSchema = z.object({
26
26
  allowedGuilds: z.array(z.string()).optional(),
27
27
  allowedChannels: z.array(z.string()).optional(),
28
28
  });
29
+ /**
30
+ * External MCP (Model Context Protocol) server to attach (Stage 2 of
31
+ * the D+ plan, sub-PR #2). Discovered tools are exposed to the native
32
+ * agent loop via the LLM registry's MCP layer; they're independent of
33
+ * llmBackends (it's perfectly fine to configure mcpServers without any
34
+ * llmBackends, and the CLI agents can also use them through their own
35
+ * MCP configs).
36
+ *
37
+ * Transport selection:
38
+ * - `command` present -> stdio (spawn subprocess)
39
+ * - `url` ends with /sse -> SSE
40
+ * - `url` otherwise -> streamable HTTP (the modern transport)
41
+ *
42
+ * Tools discovered at startup are passed to the native agent loop as
43
+ * `ToolDef[]`; tool names get the `mcp_{server}_` prefix to dodge
44
+ * collisions when multiple servers expose the same tool name. See
45
+ * src/core/llm/mcp-client.ts.
46
+ */
47
+ const mcpServerSchema = z.object({
48
+ /** Server identifier, unique within mcpServers[]. Used as the
49
+ * tool-name prefix; must be alphanumeric (with . _ - allowed). */
50
+ name: z.string().min(1).regex(safeNamePattern, 'MCP server name must be alphanumeric (with . _ - allowed)'),
51
+ /** stdio: executable to spawn. Mutually exclusive with `url`. */
52
+ command: z.string().min(1).optional(),
53
+ /** stdio: positional args. Ignored when `command` is absent. */
54
+ args: z.array(z.string()).optional(),
55
+ /** stdio: extra env merged onto the child process env. */
56
+ env: z.record(z.string(), z.string()).optional(),
57
+ /** stdio: cwd for the child. Defaults to agim's cwd. */
58
+ cwd: z.string().optional(),
59
+ /** http/sse: target URL. Mutually exclusive with `command`.
60
+ * URLs ending with /sse use the SSE transport; everything else uses
61
+ * streamable HTTP. */
62
+ url: z.string().url().optional(),
63
+ /** http/sse: extra headers (Authorization, custom auth tokens, …). */
64
+ headers: z.record(z.string(), z.string()).optional(),
65
+ /** Per-tool-call hard timeout (ms). Default 30s. */
66
+ toolTimeoutMs: z.number().int().positive().optional(),
67
+ /** Filter the tool set the server advertises. ['*'] = all tools (the
68
+ * default). Otherwise only tools whose original OR namespaced name
69
+ * is in the list are registered. */
70
+ enabledTools: z.array(z.string()).optional(),
71
+ /** Soft kill-switch — set false to keep the row around without
72
+ * attempting to connect at startup. */
73
+ enabled: z.boolean().optional(),
74
+ }).superRefine((cfg, ctx) => {
75
+ // Either `command` or `url` must be set; never both.
76
+ const hasCmd = typeof cfg.command === 'string' && cfg.command.length > 0;
77
+ const hasUrl = typeof cfg.url === 'string' && cfg.url.length > 0;
78
+ if (hasCmd === hasUrl) {
79
+ ctx.addIssue({
80
+ code: z.ZodIssueCode.custom,
81
+ message: 'mcpServer entries must set exactly one of `command` (stdio) or `url` (http/sse)',
82
+ });
83
+ }
84
+ });
85
+ /**
86
+ * Native LLM backend (Stage 1 of the D+ plan, 2026-05-23).
87
+ *
88
+ * Each entry describes one OpenAI/Anthropic-compatible API endpoint
89
+ * agim can talk to *directly* (without spawning a CLI agent). Used by
90
+ * internal introspection callers (memory-distill / memory-consolidate /
91
+ * intent-llm now; heartbeat evaluator + native chat agent later).
92
+ *
93
+ * The API key is NOT stored here — secrets live in
94
+ * `~/.agim/llm-secrets.json` (or the AGIM_LLM_SECRET_<NAME> env). See
95
+ * src/core/llm/secrets.ts.
96
+ *
97
+ * Stage 1 ships only `provider: 'openai-compat'`. Anthropic native +
98
+ * Ollama land in Stage 2.
99
+ */
100
+ const llmBackendSchema = z.object({
101
+ /** Backend identifier referenced by llmRoles. Must be unique within
102
+ * the array; the registry de-duplicates with a `last wins` rule and
103
+ * logs a warning on collision. Match safeNamePattern so it's safe to
104
+ * shove into the AGIM_LLM_SECRET_<NAME> env var suffix. */
105
+ name: z.string().min(1).regex(safeNamePattern, 'LLM backend name must be alphanumeric (with . _ - allowed)'),
106
+ /** Transport / dialect. Supported: openai-compat (OpenAI / DeepSeek /
107
+ * Moonshot / Qwen / Ollama / vLLM / OpenRouter / ...), anthropic
108
+ * (Anthropic Messages API). */
109
+ provider: z.enum(['openai-compat', 'anthropic']),
110
+ /** Default model id. Caller may override per call via ChatOptions.model. */
111
+ model: z.string().min(1),
112
+ /** Full base URL up to (but not including) `/chat/completions`.
113
+ * Optional — when omitted, the OpenAI-compat provider defaults to
114
+ * https://api.openai.com/v1. */
115
+ baseUrl: z.string().url().optional(),
116
+ /** Display label for the cost dashboard / logs. Lets DeepSeek and Kimi
117
+ * show up under their own brand instead of all under "openai-compat". */
118
+ label: z.string().optional(),
119
+ /** Extra HTTP headers — OpenRouter (`HTTP-Referer` / `X-Title`), Azure
120
+ * (`api-key`), private gateways. Authorization is set by the provider
121
+ * and is NOT overridable here on purpose. */
122
+ extraHeaders: z.record(z.string(), z.string()).optional(),
123
+ /** Default temperature (provider default 0.3 — we want deterministic
124
+ * JSON for introspection callers, not creativity). */
125
+ temperature: z.number().min(0).max(2).optional(),
126
+ /** Default max output tokens (provider default 1024). */
127
+ maxTokens: z.number().int().positive().optional(),
128
+ /** Number of retries on transient (429 / 5xx). Provider default 1. */
129
+ retryOnTransient: z.number().int().min(0).max(5).optional(),
130
+ /** Soft kill-switch — set false to keep the row around but make
131
+ * registry.getProvider() pretend it doesn't exist. */
132
+ enabled: z.boolean().optional(),
133
+ });
134
+ /**
135
+ * Role → backend-name mapping. Roles are operational concepts agim
136
+ * internal callers ask for ("give me a cheap JSON-grade backend" /
137
+ * "give me an evaluator-grade backend"). Multiple roles may resolve to
138
+ * the same backend. Stage 1 recognises: cheap, evaluator, native-chat.
139
+ * Unknown keys are accepted for forward compatibility.
140
+ */
141
+ const llmRolesSchema = z.record(z.string(), z.string());
29
142
  export const configSchema = z.object({
30
143
  messengers: z.array(z.string()).default([]),
31
144
  agents: z.array(z.string()).default([]),
@@ -49,6 +162,17 @@ export const configSchema = z.object({
49
162
  burst: z.number().int().positive(),
50
163
  }).optional(),
51
164
  })).optional(),
165
+ /** D+ Stage 1: native LLM backends (OpenAI-compat now, Anthropic /
166
+ * Ollama in Stage 2). Optional — when absent the registry returns
167
+ * no providers and every caller falls back to its CLI agent path. */
168
+ llmBackends: z.array(llmBackendSchema).optional(),
169
+ /** D+ Stage 1: role → backend-name map. See llmRolesSchema. */
170
+ llmRoles: llmRolesSchema.optional(),
171
+ /** D+ Stage 2 sub-PR #2: external MCP servers to attach. Their tools
172
+ * are exposed to the native agent loop. Optional — when absent, only
173
+ * the built-in agim MCP server's tools (mcp__imhub__*) are available
174
+ * to the native agent. */
175
+ mcpServers: z.array(mcpServerSchema).optional(),
52
176
  }).passthrough();
53
177
  export function validateConfig(data) {
54
178
  const result = configSchema.safeParse(data);
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,eAAe,GAAG,8BAA8B,CAAA;AAEtD,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,sDAAsD,CAAC;IACtG,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC7B,CAAC,CAAC,QAAQ,EAAE;IACb,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7C,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;IAC/C,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE;IACjC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;IAC7C,2DAA2D;IAC3D,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC/C,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACvC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;YACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;YACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;SACnC,CAAC,CAAC,QAAQ,EAAE;KACd,CAAC,CAAC,CAAC,QAAQ,EAAE;CACf,CAAC,CAAC,WAAW,EAAE,CAAA;AAIhB,MAAM,UAAU,cAAc,CAAC,IAAa;IAG1C,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC3C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;IACtD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAA;QAC7C,OAAO,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAA;IACpC,CAAC,CAAC,CAAA;IACF,sEAAsE;IACtE,sEAAsE;IACtE,+CAA+C;IAC/C,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IACvE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAQ,SAAqC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACtE,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAClE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC"}
1
+ {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /** Hard caps. Goals are user-typed prose; tight limits keep prompt
2
+ * injection from blowing the context window on a single thread. */
3
+ export declare const MAX_TITLE_CHARS = 200;
4
+ export declare const MAX_BODY_CHARS = 4000;
5
+ export declare const MAX_PROGRESS_NOTE_CHARS = 500;
6
+ export declare const MAX_PROGRESS_NOTES_INJECTED = 5;
7
+ /** Goal lifecycle states.
8
+ * - active: counted as the thread's current goal; injected into prompts
9
+ * - paused: kept around but NOT injected (operator wants a break)
10
+ * - completed / cancelled: historical only */
11
+ export type GoalStatus = 'active' | 'paused' | 'completed' | 'cancelled';
12
+ export interface ProgressNote {
13
+ ts: string;
14
+ by: string;
15
+ text: string;
16
+ }
17
+ export interface GoalRow {
18
+ id: number;
19
+ platform: string;
20
+ channelId: string;
21
+ threadId: string;
22
+ userId: string;
23
+ title: string;
24
+ body: string;
25
+ status: GoalStatus;
26
+ /** Newest-last array (push on progress; render reversed for "most recent first"). */
27
+ progressLog: ProgressNote[];
28
+ createdAt: string;
29
+ updatedAt: string;
30
+ /** ISO timestamp of completion / cancellation, when applicable. */
31
+ closedAt: string | null;
32
+ }
33
+ /**
34
+ * Set (or replace) the ACTIVE goal for a thread. Idempotent semantics:
35
+ * if there's already an active goal, it's auto-paused first (kept in
36
+ * the table) and a fresh row replaces it. This avoids accidental
37
+ * silent drops of partially-tracked work — the operator can /goal
38
+ * list to find paused predecessors and /goal resume <id> if they
39
+ * changed their mind.
40
+ */
41
+ export declare function setActiveGoal(input: {
42
+ platform: string;
43
+ channelId: string;
44
+ threadId: string;
45
+ userId: string;
46
+ title: string;
47
+ body?: string;
48
+ }): GoalRow | null;
49
+ /** Append a progress note to a goal. Caller picks `by` (typically
50
+ * 'user' for /goal progress, 'agent' for future MCP tool call,
51
+ * 'system' for status transitions). */
52
+ export declare function appendProgress(goalId: number, by: ProgressNote['by'], text: string): boolean;
53
+ export declare function updateStatus(goalId: number, status: GoalStatus): boolean;
54
+ /** Resume a paused goal — also auto-pauses any currently-active goal
55
+ * in the same thread so there's never more than one active. */
56
+ export declare function resumeGoal(goalId: number): boolean;
57
+ export declare function getGoalById(id: number): GoalRow | null;
58
+ /** The single active goal for a thread (or null if none). */
59
+ export declare function getActiveGoal(platform: string, channelId: string, threadId: string): GoalRow | null;
60
+ /** All goals (any status) for a thread, newest first. Used by /goal list. */
61
+ export declare function listGoalsForThread(platform: string, channelId: string, threadId: string, limit?: number): GoalRow[];
62
+ /** Admin / debug — every active goal across the install. */
63
+ export declare function listAllActiveGoals(): GoalRow[];
64
+ /**
65
+ * Build the per-turn prompt-prefix snippet for the active goal. Bounded
66
+ * to ~MAX_PROGRESS_NOTES_INJECTED recent notes + truncated body so a
67
+ * verbose goal doesn't dominate the prompt budget. Empty string when no
68
+ * active goal — router treats falsy snippets as "skip this block".
69
+ *
70
+ * The snippet is OVER THE WIRE only — it's prepended to the prompt the
71
+ * agent sees but NOT stored in session history, so it doesn't bloat the
72
+ * persisted conversation.
73
+ */
74
+ export declare function buildGoalSnippet(platform: string, channelId: string, threadId: string): string;
75
+ /** For /goal show — render an operator-facing summary including ALL
76
+ * retained progress notes (capped at MAX_PROGRESS_NOTES_LISTED so the
77
+ * IM bubble doesn't explode). */
78
+ export declare function formatGoalShow(goal: GoalRow): string;
79
+ /** Test-only. Drops everything; safe to call repeatedly in beforeEach. */
80
+ export declare function _truncateForTests(): void;
81
+ //# sourceMappingURL=goals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goals.d.ts","sourceRoot":"","sources":["../../src/core/goals.ts"],"names":[],"mappings":"AA8BA;oEACoE;AACpE,eAAO,MAAM,eAAe,MAAM,CAAA;AAClC,eAAO,MAAM,cAAc,OAAQ,CAAA;AACnC,eAAO,MAAM,uBAAuB,MAAM,CAAA;AAC1C,eAAO,MAAM,2BAA2B,IAAI,CAAA;AAK5C;;;+CAG+C;AAC/C,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAA;AAExE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,qFAAqF;IACrF,WAAW,EAAE,YAAY,EAAE,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,mEAAmE;IACnE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AA4ED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,GAAG,IAAI,CA6BjB;AAED;;wCAEwC;AACxC,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAgC5F;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAiBxE;AAED;gEACgE;AAChE,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAwBlD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAUtD;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAcnG;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,EAAE,CAc/G;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,IAAI,OAAO,EAAE,CAY9C;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuB9F;AAED;;kCAEkC;AAClC,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CA4BpD;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC"}