@xopcai/xopc 0.0.103 → 0.0.105

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 (950) hide show
  1. package/README.md +7 -4
  2. package/README.zh-CN.md +7 -4
  3. package/dist/_virtual/_rolldown/runtime.js +2 -3
  4. package/dist/browser-ext/manifest.json +1 -1
  5. package/dist/extensions/feishu/src/adapters/cli-login.d.ts +1 -1
  6. package/dist/extensions/feishu/src/adapters/cli-login.js +1 -1
  7. package/dist/extensions/feishu/src/adapters/cli-login.js.map +1 -1
  8. package/dist/extensions/feishu/src/adapters/gateway-setup.d.ts +2 -0
  9. package/dist/extensions/feishu/src/adapters/gateway-setup.js +225 -0
  10. package/dist/extensions/feishu/src/adapters/gateway-setup.js.map +1 -0
  11. package/dist/extensions/feishu/src/index.d.ts +8 -1
  12. package/dist/extensions/feishu/src/index.js +14 -1
  13. package/dist/extensions/feishu/src/index.js.map +1 -0
  14. package/dist/extensions/feishu/src/outbound/outbound-adapter.js +1 -1
  15. package/dist/extensions/feishu/src/plugin.d.ts +2 -1
  16. package/dist/extensions/feishu/src/plugin.js +2 -0
  17. package/dist/extensions/feishu/src/plugin.js.map +1 -1
  18. package/dist/extensions/feishu/src/streaming/streaming-adapter.js +1 -1
  19. package/dist/extensions/feishu/src/transport/webhook/monitor.js +1 -1
  20. package/dist/extensions/feishu/xopc.extension.json +66 -1
  21. package/dist/extensions/telegram/src/adapters/gateway-setup.d.ts +2 -0
  22. package/dist/extensions/telegram/src/adapters/gateway-setup.js +146 -0
  23. package/dist/extensions/telegram/src/adapters/gateway-setup.js.map +1 -0
  24. package/dist/extensions/telegram/src/adapters/security-adapter.js +1 -1
  25. package/dist/extensions/telegram/src/command-handler.js +1 -2
  26. package/dist/extensions/telegram/src/command-handler.js.map +1 -1
  27. package/dist/extensions/telegram/src/config-schema.js +2 -2
  28. package/dist/extensions/telegram/src/config-schema.js.map +1 -1
  29. package/dist/extensions/telegram/src/doctor.d.ts +1 -0
  30. package/dist/extensions/telegram/src/doctor.js +68 -0
  31. package/dist/extensions/telegram/src/doctor.js.map +1 -1
  32. package/dist/extensions/telegram/src/index.d.ts +8 -1
  33. package/dist/extensions/telegram/src/index.js +15 -2
  34. package/dist/extensions/telegram/src/index.js.map +1 -0
  35. package/dist/extensions/telegram/src/plugin.d.ts +13 -5
  36. package/dist/extensions/telegram/src/plugin.js +32 -12
  37. package/dist/extensions/telegram/src/plugin.js.map +1 -1
  38. package/dist/extensions/telegram/src/proxy-fetch.js +22 -5
  39. package/dist/extensions/telegram/src/proxy-fetch.js.map +1 -1
  40. package/dist/extensions/telegram/xopc.extension.json +412 -5
  41. package/dist/extensions/weixin/src/adapters/onboard-cli.js +2 -2
  42. package/dist/extensions/weixin/src/adapters/onboard-cli.js.map +1 -1
  43. package/dist/extensions/weixin/src/api/api.js +1 -1
  44. package/dist/extensions/weixin/src/index.d.ts +8 -0
  45. package/dist/extensions/weixin/src/index.js +12 -1
  46. package/dist/extensions/weixin/src/index.js.map +1 -0
  47. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  48. package/dist/extensions/weixin/src/plugin.d.ts +2 -1
  49. package/dist/extensions/weixin/src/plugin.js +77 -2
  50. package/dist/extensions/weixin/src/plugin.js.map +1 -1
  51. package/dist/extensions/weixin/xopc.extension.json +52 -0
  52. package/dist/gateway/static/root/assets/agents-XzgIVKcI.js +396 -0
  53. package/dist/gateway/static/root/assets/{apps-page-C5RmwmTT.js → apps-page-B7Us3RMl.js} +1 -1
  54. package/dist/gateway/static/root/assets/browser-BLJWD7WI.js +8 -0
  55. package/dist/gateway/static/root/assets/channels-settings-BgeV6fzw.js +1 -0
  56. package/dist/gateway/static/root/assets/cron-page-DKGHEeAU.js +1 -0
  57. package/dist/gateway/static/root/assets/{dist-CWm8hTXZ.js → dist-DJDkNhu5.js} +1 -1
  58. package/dist/gateway/static/root/assets/{extension-debug-page-BzYgTkS9.js → extension-debug-page-DI1XJTJi.js} +1 -1
  59. package/dist/gateway/static/root/assets/{extension-page-BmTZH6gL.js → extension-page-SuafGTT_.js} +1 -1
  60. package/dist/gateway/static/root/assets/extension-settings-page-cKmGax9v.js +1 -0
  61. package/dist/gateway/static/root/assets/{fetch-CMoWY2Si.js → fetch-CkvRO30i.js} +1 -1
  62. package/dist/gateway/static/root/assets/gateway-startup-retry-BkKyRDrF.js +1 -0
  63. package/dist/gateway/static/root/assets/heartbeat-config-api-CRiDcxtt.js +1 -0
  64. package/dist/gateway/static/root/assets/index-50FVtgXU.js +4845 -0
  65. package/dist/gateway/static/root/assets/index-BPYKW7FB.css +1 -0
  66. package/dist/gateway/static/root/assets/{logs-page-BjdQjHwk.js → logs-page-DM8o5-Bm.js} +2 -2
  67. package/dist/gateway/static/root/assets/{note-detail-page-8Er4197b.js → note-detail-page-j53jtvq9.js} +53 -53
  68. package/dist/gateway/static/root/assets/{note-time-CF3vf1jm.js → note-time-Ck2H2Qpw.js} +1 -1
  69. package/dist/gateway/static/root/assets/notes-page-CsWIw35Q.js +1 -0
  70. package/dist/gateway/static/root/assets/schema-form-BvmGNxiJ.js +1 -0
  71. package/dist/gateway/static/root/assets/sessions-page-CLPsbyOW.js +1 -0
  72. package/dist/gateway/static/root/assets/settings-advanced-gate-DRdayl8P.js +2 -0
  73. package/dist/gateway/static/root/assets/{settings-form-section-C7qA7y0J.js → settings-form-section-BlIYg2gZ.js} +1 -1
  74. package/dist/gateway/static/root/assets/settings-page-CRGHT_bm.js +3 -0
  75. package/dist/gateway/static/root/assets/{share-preview-page-Tvr5Mtq5.js → share-preview-page-BlT6Akvk.js} +1 -1
  76. package/dist/gateway/static/root/assets/skills-page-Ce-RIH2y.js +2 -0
  77. package/dist/gateway/static/root/assets/{theme-store-HTvJlFLL.js → theme-store-DYgVdRB4.js} +1 -1
  78. package/dist/gateway/static/root/assets/url-DPEStU4M.js +3 -0
  79. package/dist/gateway/static/root/assets/voice-api-key-field-CJGTidqc.js +1 -0
  80. package/dist/gateway/static/root/assets/{workflow-page.utils-CeBkAjP7.js → workflow-page.utils-_sjXCMvi.js} +1 -1
  81. package/dist/gateway/static/root/assets/workflows-page-o63aaARK.js +27 -0
  82. package/dist/gateway/static/root/index.html +6 -5
  83. package/dist/package.js +1 -1
  84. package/dist/src/agent/agent-manager.d.ts +18 -6
  85. package/dist/src/agent/agent-manager.js +60 -35
  86. package/dist/src/agent/agent-manager.js.map +1 -1
  87. package/dist/src/agent/builtin-agent-ids.d.ts +2 -0
  88. package/dist/src/agent/builtin-agent-ids.js +17 -0
  89. package/dist/src/agent/builtin-agent-ids.js.map +1 -0
  90. package/dist/src/agent/child-agent-factory.d.ts +4 -0
  91. package/dist/src/agent/child-agent-factory.js +28 -8
  92. package/dist/src/agent/child-agent-factory.js.map +1 -1
  93. package/dist/src/agent/context/workspace-templates/AGENTS.md +23 -184
  94. package/dist/src/agent/embedded/run-turn.js +8 -2
  95. package/dist/src/agent/embedded/run-turn.js.map +1 -1
  96. package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
  97. package/dist/src/agent/embedded/subscribe-session.js +33 -51
  98. package/dist/src/agent/embedded/subscribe-session.js.map +1 -1
  99. package/dist/src/agent/embedded/types.d.ts +36 -35
  100. package/dist/src/agent/fallback/candidates.js +1 -1
  101. package/dist/src/agent/fallback/candidates.js.map +1 -1
  102. package/dist/src/agent/inbound/inbound-loop.js +1 -1
  103. package/dist/src/agent/inbound/turn-dispatcher.d.ts +3 -0
  104. package/dist/src/agent/inbound/turn-dispatcher.js +25 -5
  105. package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
  106. package/dist/src/agent/models/manager.d.ts +1 -1
  107. package/dist/src/agent/models/manager.js +1 -1
  108. package/dist/src/agent/models/manager.js.map +1 -1
  109. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +1 -1
  110. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
  111. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
  112. package/dist/src/agent/prompt/memory/index.js +30 -2
  113. package/dist/src/agent/prompt/memory/index.js.map +1 -1
  114. package/dist/src/agent/prompt/sections/tooling.js +4 -0
  115. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  116. package/dist/src/agent/service/direct-turn-helpers.d.ts +3 -0
  117. package/dist/src/agent/service/direct-turn-helpers.js +6 -3
  118. package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
  119. package/dist/src/agent/service/process-direct-streaming.d.ts +3 -0
  120. package/dist/src/agent/service/process-direct-streaming.js +50 -19
  121. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  122. package/dist/src/agent/service-inbound-utils.d.ts +0 -1
  123. package/dist/src/agent/service-inbound-utils.js +1 -17
  124. package/dist/src/agent/service-inbound-utils.js.map +1 -1
  125. package/dist/src/agent/service.d.ts +4 -4
  126. package/dist/src/agent/service.js +29 -16
  127. package/dist/src/agent/service.js.map +1 -1
  128. package/dist/src/agent/service.types.d.ts +3 -0
  129. package/dist/src/agent/session/session-config-service.d.ts +1 -0
  130. package/dist/src/agent/session/session-config-service.js +9 -1
  131. package/dist/src/agent/session/session-config-service.js.map +1 -1
  132. package/dist/src/agent/session/session-inspector.d.ts +2 -1
  133. package/dist/src/agent/session/session-inspector.js +4 -0
  134. package/dist/src/agent/session/session-inspector.js.map +1 -1
  135. package/dist/src/agent/skills/config.js +1 -3
  136. package/dist/src/agent/skills/config.js.map +1 -1
  137. package/dist/src/agent/skills/format-skills-prompt.d.ts +1 -0
  138. package/dist/src/agent/skills/format-skills-prompt.js +3 -2
  139. package/dist/src/agent/skills/format-skills-prompt.js.map +1 -1
  140. package/dist/src/agent/skills/index.js +20 -5
  141. package/dist/src/agent/skills/index.js.map +1 -1
  142. package/dist/src/agent/skills/installer.js +14 -27
  143. package/dist/src/agent/skills/installer.js.map +1 -1
  144. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +11 -1
  145. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +1 -1
  146. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +18 -4
  147. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -1
  148. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +11 -2
  149. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +1 -1
  150. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +2 -2
  151. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +1 -1
  152. package/dist/src/agent/skills/skill-manager.d.ts +4 -1
  153. package/dist/src/agent/skills/skill-manager.js +3 -3
  154. package/dist/src/agent/skills/skill-manager.js.map +1 -1
  155. package/dist/src/agent/skills/skill-view-path.d.ts +1 -17
  156. package/dist/src/agent/skills/skill-view-path.js +3 -66
  157. package/dist/src/agent/skills/skill-view-path.js.map +1 -1
  158. package/dist/src/agent/skills/test-framework.js +2 -3
  159. package/dist/src/agent/skills/test-framework.js.map +1 -1
  160. package/dist/src/agent/source-context/index.d.ts +2 -0
  161. package/dist/src/agent/source-context/index.js +3 -0
  162. package/dist/src/agent/source-context/injector.d.ts +3 -0
  163. package/dist/src/agent/source-context/injector.js +36 -0
  164. package/dist/src/agent/source-context/injector.js.map +1 -0
  165. package/dist/src/agent/source-context/types.d.ts +19 -0
  166. package/dist/src/agent/source-context/types.js +10 -0
  167. package/dist/src/agent/source-context/types.js.map +1 -0
  168. package/dist/src/agent/streaming/reasoning-visibility-sse.js +1 -0
  169. package/dist/src/agent/streaming/reasoning-visibility-sse.js.map +1 -1
  170. package/dist/src/agent/tool-manuals/browser.d.ts +1 -0
  171. package/{skills/browser/SKILL.md → dist/src/agent/tool-manuals/browser.js} +51 -54
  172. package/dist/src/agent/tool-manuals/browser.js.map +1 -0
  173. package/dist/src/agent/tool-manuals/index.d.ts +10 -0
  174. package/dist/src/agent/tool-manuals/index.js +28 -0
  175. package/dist/src/agent/tool-manuals/index.js.map +1 -0
  176. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
  177. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
  178. package/dist/src/agent/tools/factory.js +2 -0
  179. package/dist/src/agent/tools/factory.js.map +1 -1
  180. package/dist/src/agent/tools/index.d.ts +1 -0
  181. package/dist/src/agent/tools/index.js +2 -1
  182. package/dist/src/agent/tools/skills-tools.js +37 -8
  183. package/dist/src/agent/tools/skills-tools.js.map +1 -1
  184. package/dist/src/agent/tools/tool-manual-tool.d.ts +6 -0
  185. package/dist/src/agent/tools/tool-manual-tool.js +34 -0
  186. package/dist/src/agent/tools/tool-manual-tool.js.map +1 -0
  187. package/dist/src/agent/workflow/catalog.d.ts +7 -2
  188. package/dist/src/agent/workflow/catalog.js +66 -25
  189. package/dist/src/agent/workflow/catalog.js.map +1 -1
  190. package/dist/src/agent/workflow/subagent-runner.d.ts +3 -0
  191. package/dist/src/agent/workflow/subagent-runner.js +50 -4
  192. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  193. package/dist/src/agent/workflow/types.d.ts +10 -0
  194. package/dist/src/auth/credentials.js +10 -5
  195. package/dist/src/auth/credentials.js.map +1 -1
  196. package/dist/src/channels/catalog/channel-catalog-service.d.ts +11 -0
  197. package/dist/src/channels/catalog/channel-catalog-service.js +168 -0
  198. package/dist/src/channels/catalog/channel-catalog-service.js.map +1 -0
  199. package/dist/src/channels/catalog/channel-catalog-types.d.ts +22 -0
  200. package/dist/src/channels/catalog/channel-catalog-types.js +1 -0
  201. package/dist/src/channels/dock.d.ts +0 -7
  202. package/dist/src/channels/dock.js +1 -21
  203. package/dist/src/channels/index.d.ts +1 -3
  204. package/dist/src/channels/index.js +1 -5
  205. package/dist/src/channels/lifecycle-supervisor.d.ts +1 -0
  206. package/dist/src/channels/lifecycle-supervisor.js +11 -0
  207. package/dist/src/channels/lifecycle-supervisor.js.map +1 -1
  208. package/dist/src/channels/manager.d.ts +1 -0
  209. package/dist/src/channels/manager.js +3 -0
  210. package/dist/src/channels/manager.js.map +1 -1
  211. package/dist/src/channels/pairing/pairing-channel.d.ts +2 -3
  212. package/dist/src/channels/pairing/pairing-messages.js +1 -1
  213. package/dist/src/channels/pairing/pairing-messages.js.map +1 -1
  214. package/dist/src/channels/pairing/pairing-service.d.ts +1 -1
  215. package/dist/src/channels/pairing/pairing-service.js +8 -27
  216. package/dist/src/channels/pairing/pairing-service.js.map +1 -1
  217. package/dist/src/channels/plugin-types.d.ts +3 -1
  218. package/dist/src/channels/plugins/types.adapters.d.ts +55 -2
  219. package/dist/src/channels/telegram/index.js +1 -1
  220. package/dist/src/chat-commands/builtins/config.js +4 -4
  221. package/dist/src/chat-commands/builtins/config.js.map +1 -1
  222. package/dist/src/chat-commands/config-paths.js +1 -1
  223. package/dist/src/chat-commands/config-paths.js.map +1 -1
  224. package/dist/src/chat-commands/context.js +1 -1
  225. package/dist/src/chat-commands/context.js.map +1 -1
  226. package/dist/src/cli/bin.js +1 -1
  227. package/dist/src/cli/command-manifest.js +1 -1
  228. package/dist/src/cli/command-manifest.js.map +1 -1
  229. package/dist/src/cli/commands/agent.js +2 -2
  230. package/dist/src/cli/commands/agent.js.map +1 -1
  231. package/dist/src/cli/commands/agents.js +2 -4
  232. package/dist/src/cli/commands/agents.js.map +1 -1
  233. package/dist/src/cli/commands/auth.js +1 -1
  234. package/dist/src/cli/commands/channels.d.ts +1 -5
  235. package/dist/src/cli/commands/channels.js +115 -281
  236. package/dist/src/cli/commands/channels.js.map +1 -1
  237. package/dist/src/cli/commands/config.js +2 -2
  238. package/dist/src/cli/commands/config.js.map +1 -1
  239. package/dist/src/cli/commands/doctor/checks/channel-config.js +16 -69
  240. package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -1
  241. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +6 -4
  242. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js.map +1 -1
  243. package/dist/src/cli/commands/doctor/checks/channel-plugins.js +2 -2
  244. package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +1 -1
  245. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  246. package/dist/src/cli/commands/doctor/checks/provider-auth.js +13 -9
  247. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
  248. package/dist/src/cli/commands/extension-dev.js +2 -1
  249. package/dist/src/cli/commands/extension-dev.js.map +1 -1
  250. package/dist/src/cli/commands/extension-marketplace.js +2 -1
  251. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  252. package/dist/src/cli/commands/extension-pack.js +2 -1
  253. package/dist/src/cli/commands/extension-pack.js.map +1 -1
  254. package/dist/src/cli/commands/models.js +7 -4
  255. package/dist/src/cli/commands/models.js.map +1 -1
  256. package/dist/src/cli/commands/onboard/channels/index.js +1 -1
  257. package/dist/src/cli/commands/onboard/channels/index.js.map +1 -1
  258. package/dist/src/cli/commands/onboard/channels/registry.d.ts +2 -1
  259. package/dist/src/cli/commands/onboard/channels/registry.js +32 -8
  260. package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
  261. package/dist/src/cli/commands/onboard/model.js +8 -5
  262. package/dist/src/cli/commands/onboard/model.js.map +1 -1
  263. package/dist/src/cli/commands/onboard.js +4 -6
  264. package/dist/src/cli/commands/onboard.js.map +1 -1
  265. package/dist/src/cli/commands/setup-shared/runner.d.ts +1 -1
  266. package/dist/src/cli/commands/setup-shared/runner.js.map +1 -1
  267. package/dist/src/cli/commands/setup-shared/types.d.ts +1 -1
  268. package/dist/src/cli/commands/setup-shared/types.js.map +1 -1
  269. package/dist/src/cli/commands/tui.js +13 -5
  270. package/dist/src/cli/commands/tui.js.map +1 -1
  271. package/dist/src/cli/extension-cli-register.js +1 -1
  272. package/dist/src/commands/agents.config.d.ts +3 -3
  273. package/dist/src/commands/agents.config.js +7 -7
  274. package/dist/src/commands/agents.config.js.map +1 -1
  275. package/dist/src/config/agent-profile.d.ts +1 -1
  276. package/dist/src/config/agent-profile.js +6 -2
  277. package/dist/src/config/agent-profile.js.map +1 -1
  278. package/dist/src/config/agent-typed-models.d.ts +2 -2
  279. package/dist/src/config/agent-typed-models.js +13 -2
  280. package/dist/src/config/agent-typed-models.js.map +1 -1
  281. package/dist/src/config/index.js +3 -3
  282. package/dist/src/config/integration.d.ts +1 -1
  283. package/dist/src/config/loader.d.ts +0 -1
  284. package/dist/src/config/loader.js +4 -9
  285. package/dist/src/config/loader.js.map +1 -1
  286. package/dist/src/config/models-json.d.ts +6 -6
  287. package/dist/src/config/paths.d.ts +1 -0
  288. package/dist/src/config/paths.js +5 -1
  289. package/dist/src/config/paths.js.map +1 -1
  290. package/dist/src/config/rules.js +2 -12
  291. package/dist/src/config/rules.js.map +1 -1
  292. package/dist/src/config/schema.d.ts +74 -47
  293. package/dist/src/config/schema.js +28 -66
  294. package/dist/src/config/schema.js.map +1 -1
  295. package/dist/src/config/validate-channel-configs.d.ts +0 -3
  296. package/dist/src/config/validate-channel-configs.js +29 -10
  297. package/dist/src/config/validate-channel-configs.js.map +1 -1
  298. package/dist/src/cron/executor.js +1 -4
  299. package/dist/src/cron/executor.js.map +1 -1
  300. package/dist/src/document-understanding/extract.d.ts +13 -0
  301. package/dist/src/document-understanding/extract.js +63 -0
  302. package/dist/src/document-understanding/extract.js.map +1 -0
  303. package/dist/src/extensions/activation-context.js +3 -1
  304. package/dist/src/extensions/activation-context.js.map +1 -1
  305. package/dist/src/extensions/activation-planner.js +12 -0
  306. package/dist/src/extensions/activation-planner.js.map +1 -1
  307. package/dist/src/extensions/api.d.ts +5 -1
  308. package/dist/src/extensions/api.js +12 -0
  309. package/dist/src/extensions/api.js.map +1 -1
  310. package/dist/src/extensions/discover-extensions.js +17 -13
  311. package/dist/src/extensions/discover-extensions.js.map +1 -1
  312. package/dist/src/extensions/extension-metadata-snapshot.js +11 -5
  313. package/dist/src/extensions/extension-metadata-snapshot.js.map +1 -1
  314. package/dist/src/extensions/index.js +12 -4
  315. package/dist/src/extensions/index.js.map +1 -0
  316. package/dist/src/extensions/loader.d.ts +5 -1
  317. package/dist/src/extensions/loader.js +12 -11
  318. package/dist/src/extensions/loader.js.map +1 -1
  319. package/dist/src/extensions/manifest-registry.js +98 -93
  320. package/dist/src/extensions/manifest-registry.js.map +1 -1
  321. package/dist/src/extensions/normalize-manifest.js +91 -15
  322. package/dist/src/extensions/normalize-manifest.js.map +1 -1
  323. package/dist/src/extensions/sdk/index.js +1 -1
  324. package/dist/src/extensions/sdk/testing.js +4 -0
  325. package/dist/src/extensions/sdk/testing.js.map +1 -1
  326. package/dist/src/extensions/types/core.d.ts +32 -1
  327. package/dist/src/extensions/types/manifest.d.ts +60 -0
  328. package/dist/src/extensions/types/tui.d.ts +414 -5
  329. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  330. package/dist/src/gateway/agent-builtin-tools.js +16 -0
  331. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  332. package/dist/src/gateway/agent-run-relay.d.ts +2 -3
  333. package/dist/src/gateway/agent-run-relay.js +10 -3
  334. package/dist/src/gateway/agent-run-relay.js.map +1 -1
  335. package/dist/src/gateway/agents-admin.d.ts +32 -19
  336. package/dist/src/gateway/agents-admin.js +113 -93
  337. package/dist/src/gateway/agents-admin.js.map +1 -1
  338. package/dist/src/gateway/chat-stream/mapper.d.ts +34 -0
  339. package/dist/src/gateway/chat-stream/mapper.js +244 -0
  340. package/dist/src/gateway/chat-stream/mapper.js.map +1 -0
  341. package/dist/src/gateway/chat-stream/protocol.d.ts +100 -0
  342. package/dist/src/gateway/chat-stream/protocol.js +1 -0
  343. package/dist/src/gateway/heartbeat/service.js +1 -1
  344. package/dist/src/gateway/hono/lib/agent-model.d.ts +4 -4
  345. package/dist/src/gateway/hono/lib/agent-model.js +13 -11
  346. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  347. package/dist/src/gateway/hono/lib/config-payload.d.ts +19 -7
  348. package/dist/src/gateway/hono/lib/config-payload.js +16 -15
  349. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  350. package/dist/src/gateway/hono/routes/agents.js +83 -48
  351. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  352. package/dist/src/gateway/hono/routes/channels.js +134 -214
  353. package/dist/src/gateway/hono/routes/channels.js.map +1 -1
  354. package/dist/src/gateway/hono/routes/commands-skills.js +10 -4
  355. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  356. package/dist/src/gateway/hono/routes/config-patch/agents.js +26 -13
  357. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  358. package/dist/src/gateway/hono/routes/config-patch/channels.d.ts +1 -11
  359. package/dist/src/gateway/hono/routes/config-patch/channels.js +18 -165
  360. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
  361. package/dist/src/gateway/hono/routes/config.js +5 -2
  362. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  363. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  364. package/dist/src/gateway/hono/routes/lazy-bundles.js +13 -1
  365. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  366. package/dist/src/gateway/hono/routes/notes.js +46 -27
  367. package/dist/src/gateway/hono/routes/notes.js.map +1 -1
  368. package/dist/src/gateway/hono/routes/public-gateway.js +2 -4
  369. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  370. package/dist/src/gateway/hono/routes/sessions.js +179 -0
  371. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  372. package/dist/src/gateway/hono/routes/tui.d.ts +3 -0
  373. package/dist/src/gateway/hono/routes/tui.js +16 -0
  374. package/dist/src/gateway/hono/routes/tui.js.map +1 -0
  375. package/dist/src/gateway/hono/routes/workflows.js +25 -1
  376. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  377. package/dist/src/gateway/hono/sse.d.ts +5 -7
  378. package/dist/src/gateway/hono/sse.js +21 -38
  379. package/dist/src/gateway/hono/sse.js.map +1 -1
  380. package/dist/src/gateway/protocol.js.map +1 -1
  381. package/dist/src/gateway/service/agent-runner.d.ts +2 -4
  382. package/dist/src/gateway/service/agent-runner.js +1 -1
  383. package/dist/src/gateway/service/agent-runner.js.map +1 -1
  384. package/dist/src/gateway/service/marketplace-service.d.ts +4 -3
  385. package/dist/src/gateway/service/marketplace-service.js +7 -4
  386. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  387. package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -6
  388. package/dist/src/gateway/service/run-gateway-agent.js +63 -36
  389. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  390. package/dist/src/gateway/service/sessions-api.d.ts +19 -0
  391. package/dist/src/gateway/service/sessions-api.js +12 -0
  392. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  393. package/dist/src/gateway/service.d.ts +6 -0
  394. package/dist/src/gateway/service.js +84 -57
  395. package/dist/src/gateway/service.js.map +1 -1
  396. package/dist/src/heartbeat/index.js +1 -1
  397. package/dist/src/notes/agent-context.d.ts +40 -0
  398. package/dist/src/notes/agent-context.js +383 -0
  399. package/dist/src/notes/agent-context.js.map +1 -0
  400. package/dist/src/notes/index.d.ts +2 -0
  401. package/dist/src/notes/index.js +2 -1
  402. package/dist/src/notes/service.d.ts +5 -0
  403. package/dist/src/notes/service.js +22 -0
  404. package/dist/src/notes/service.js.map +1 -1
  405. package/dist/src/notes/store.js +2 -0
  406. package/dist/src/notes/store.js.map +1 -1
  407. package/dist/src/project-trust/trust-store.d.ts +30 -0
  408. package/dist/src/project-trust/trust-store.js +194 -0
  409. package/dist/src/project-trust/trust-store.js.map +1 -0
  410. package/dist/src/providers/index.d.ts +1 -1
  411. package/dist/src/providers/index.js +18 -7
  412. package/dist/src/providers/index.js.map +1 -1
  413. package/dist/src/routing/resolve-route.d.ts +0 -3
  414. package/dist/src/routing/resolve-route.js.map +1 -1
  415. package/dist/src/routing/resolve-tui-session-key.d.ts +2 -0
  416. package/dist/src/routing/resolve-tui-session-key.js +8 -3
  417. package/dist/src/routing/resolve-tui-session-key.js.map +1 -1
  418. package/dist/src/session/client-history.d.ts +32 -0
  419. package/dist/src/session/client-history.js +232 -1
  420. package/dist/src/session/client-history.js.map +1 -1
  421. package/dist/src/session/manager.d.ts +37 -4
  422. package/dist/src/session/manager.js +39 -15
  423. package/dist/src/session/manager.js.map +1 -1
  424. package/dist/src/session/session-context-for-llm.d.ts +93 -1
  425. package/dist/src/session/session-context-for-llm.js +105 -2
  426. package/dist/src/session/session-context-for-llm.js.map +1 -1
  427. package/dist/src/session/store.d.ts +37 -0
  428. package/dist/src/session/store.js +127 -2
  429. package/dist/src/session/store.js.map +1 -1
  430. package/dist/src/session/stored-rows-to-file-entries.js +37 -1
  431. package/dist/src/session/stored-rows-to-file-entries.js.map +1 -1
  432. package/dist/src/session/types.d.ts +14 -1
  433. package/dist/src/session/types.js.map +1 -1
  434. package/dist/src/storage/sqlite/index.d.ts +1 -0
  435. package/dist/src/storage/sqlite/index.js +2 -1
  436. package/dist/src/storage/sqlite/migrations/004_add_session_type_metadata.sql +15 -0
  437. package/dist/src/storage/sqlite/migrations/005_add_note_agent_contexts.sql +10 -0
  438. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  439. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  440. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  441. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  442. package/dist/src/storage/sqlite/note-agent-context-repository.d.ts +10 -0
  443. package/dist/src/storage/sqlite/note-agent-context-repository.js +35 -0
  444. package/dist/src/storage/sqlite/note-agent-context-repository.js.map +1 -0
  445. package/dist/src/storage/sqlite/row-mappers.d.ts +14 -1
  446. package/dist/src/storage/sqlite/row-mappers.js +14 -1
  447. package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
  448. package/dist/src/storage/sqlite/schema.js +1 -1
  449. package/dist/src/storage/sqlite/session-metadata.js +1 -0
  450. package/dist/src/storage/sqlite/session-metadata.js.map +1 -1
  451. package/dist/src/storage/sqlite/session-repository.js +52 -25
  452. package/dist/src/storage/sqlite/session-repository.js.map +1 -1
  453. package/dist/src/tui/backends/embedded-backend.d.ts +53 -4
  454. package/dist/src/tui/backends/embedded-backend.js +227 -39
  455. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  456. package/dist/src/tui/backends/gateway-sse-backend.d.ts +59 -3
  457. package/dist/src/tui/backends/gateway-sse-backend.js +416 -26
  458. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  459. package/dist/src/tui/chat-history.d.ts +5 -1
  460. package/dist/src/tui/chat-history.js +78 -8
  461. package/dist/src/tui/chat-history.js.map +1 -1
  462. package/dist/src/tui/clipboard-text.d.ts +5 -0
  463. package/dist/src/tui/clipboard-text.js +46 -0
  464. package/dist/src/tui/clipboard-text.js.map +1 -0
  465. package/dist/src/tui/components/assistant-message.d.ts +19 -3
  466. package/dist/src/tui/components/assistant-message.js +115 -9
  467. package/dist/src/tui/components/assistant-message.js.map +1 -1
  468. package/dist/src/tui/components/bash-execution.d.ts +3 -2
  469. package/dist/src/tui/components/bash-execution.js +31 -3
  470. package/dist/src/tui/components/bash-execution.js.map +1 -1
  471. package/dist/src/tui/components/bash-summary.d.ts +23 -0
  472. package/dist/src/tui/components/bash-summary.js +87 -0
  473. package/dist/src/tui/components/bash-summary.js.map +1 -0
  474. package/dist/src/tui/components/branch-message-summary.d.ts +17 -0
  475. package/dist/src/tui/components/branch-message-summary.js +43 -0
  476. package/dist/src/tui/components/branch-message-summary.js.map +1 -0
  477. package/dist/src/tui/components/branch-summary.d.ts +13 -0
  478. package/dist/src/tui/components/branch-summary.js +51 -0
  479. package/dist/src/tui/components/branch-summary.js.map +1 -0
  480. package/dist/src/tui/components/chat-log.d.ts +46 -6
  481. package/dist/src/tui/components/chat-log.js +183 -21
  482. package/dist/src/tui/components/chat-log.js.map +1 -1
  483. package/dist/src/tui/components/compaction-summary.d.ts +13 -0
  484. package/dist/src/tui/components/compaction-summary.js +46 -0
  485. package/dist/src/tui/components/compaction-summary.js.map +1 -0
  486. package/dist/src/tui/components/custom-editor.d.ts +1 -0
  487. package/dist/src/tui/components/custom-editor.js +2 -0
  488. package/dist/src/tui/components/custom-editor.js.map +1 -1
  489. package/dist/src/tui/components/custom-message.d.ts +23 -0
  490. package/dist/src/tui/components/custom-message.js +65 -0
  491. package/dist/src/tui/components/custom-message.js.map +1 -0
  492. package/dist/src/tui/components/extension-dialog.d.ts +42 -0
  493. package/dist/src/tui/components/extension-dialog.js +127 -0
  494. package/dist/src/tui/components/extension-dialog.js.map +1 -0
  495. package/dist/src/tui/components/scoped-models-selector.d.ts +7 -2
  496. package/dist/src/tui/components/scoped-models-selector.js +89 -16
  497. package/dist/src/tui/components/scoped-models-selector.js.map +1 -1
  498. package/dist/src/tui/components/searchable-select-list.d.ts +30 -3
  499. package/dist/src/tui/components/searchable-select-list.js +82 -10
  500. package/dist/src/tui/components/searchable-select-list.js.map +1 -1
  501. package/dist/src/tui/components/session-selector.d.ts +18 -4
  502. package/dist/src/tui/components/session-selector.js +207 -40
  503. package/dist/src/tui/components/session-selector.js.map +1 -1
  504. package/dist/src/tui/components/settings-selector.d.ts +6 -2
  505. package/dist/src/tui/components/settings-selector.js +126 -7
  506. package/dist/src/tui/components/settings-selector.js.map +1 -1
  507. package/dist/src/tui/components/thinking-selector.d.ts +12 -0
  508. package/dist/src/tui/components/thinking-selector.js +48 -0
  509. package/dist/src/tui/components/thinking-selector.js.map +1 -0
  510. package/dist/src/tui/components/tool-execution.d.ts +57 -3
  511. package/dist/src/tui/components/tool-execution.js +378 -28
  512. package/dist/src/tui/components/tool-execution.js.map +1 -1
  513. package/dist/src/tui/components/tui-bottom-bar.d.ts +9 -1
  514. package/dist/src/tui/components/tui-bottom-bar.js +56 -11
  515. package/dist/src/tui/components/tui-bottom-bar.js.map +1 -1
  516. package/dist/src/tui/components/tui-header.d.ts +9 -2
  517. package/dist/src/tui/components/tui-header.js +25 -5
  518. package/dist/src/tui/components/tui-header.js.map +1 -1
  519. package/dist/src/tui/components/user-message.d.ts +4 -2
  520. package/dist/src/tui/components/user-message.js +42 -9
  521. package/dist/src/tui/components/user-message.js.map +1 -1
  522. package/dist/src/tui/components/visual-truncate.d.ts +11 -0
  523. package/dist/src/tui/components/visual-truncate.js +27 -0
  524. package/dist/src/tui/components/visual-truncate.js.map +1 -0
  525. package/dist/src/tui/extension-host/autocomplete.d.ts +43 -0
  526. package/dist/src/tui/extension-host/autocomplete.js +116 -0
  527. package/dist/src/tui/extension-host/autocomplete.js.map +1 -0
  528. package/dist/src/tui/extension-host/host.d.ts +31 -1
  529. package/dist/src/tui/extension-host/host.js +123 -6
  530. package/dist/src/tui/extension-host/host.js.map +1 -1
  531. package/dist/src/tui/extension-host/load-extensions.d.ts +6 -1
  532. package/dist/src/tui/extension-host/load-extensions.js +4 -3
  533. package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
  534. package/dist/src/tui/extension-host/runtime-context.d.ts +21 -0
  535. package/dist/src/tui/extension-host/runtime-context.js +152 -0
  536. package/dist/src/tui/extension-host/runtime-context.js.map +1 -0
  537. package/dist/src/tui/extension-host/runtime.d.ts +52 -4
  538. package/dist/src/tui/extension-host/runtime.js +547 -85
  539. package/dist/src/tui/extension-host/runtime.js.map +1 -1
  540. package/dist/src/tui/extension-host/surface.d.ts +20 -0
  541. package/dist/src/tui/extension-host/surface.js +30 -6
  542. package/dist/src/tui/extension-host/surface.js.map +1 -1
  543. package/dist/src/tui/extension-host/tool-renderers.d.ts +6 -3
  544. package/dist/src/tui/extension-host/tool-renderers.js +43 -5
  545. package/dist/src/tui/extension-host/tool-renderers.js.map +1 -1
  546. package/dist/src/tui/format-tui-hotkeys.d.ts +12 -2
  547. package/dist/src/tui/format-tui-hotkeys.js +22 -5
  548. package/dist/src/tui/format-tui-hotkeys.js.map +1 -1
  549. package/dist/src/tui/tui-agent-events.d.ts +8 -6
  550. package/dist/src/tui/tui-agent-events.js +200 -59
  551. package/dist/src/tui/tui-agent-events.js.map +1 -1
  552. package/dist/src/tui/tui-backend.d.ts +169 -3
  553. package/dist/src/tui/tui-command-formatters.d.ts +76 -0
  554. package/dist/src/tui/tui-command-formatters.js +594 -0
  555. package/dist/src/tui/tui-command-formatters.js.map +1 -0
  556. package/dist/src/tui/tui-commands.d.ts +57 -7
  557. package/dist/src/tui/tui-commands.js +639 -43
  558. package/dist/src/tui/tui-commands.js.map +1 -1
  559. package/dist/src/tui/tui-context-usage.d.ts +1 -1
  560. package/dist/src/tui/tui-context-usage.js +9 -1
  561. package/dist/src/tui/tui-context-usage.js.map +1 -1
  562. package/dist/src/tui/tui-extension-user-message.d.ts +8 -0
  563. package/dist/src/tui/tui-extension-user-message.js +32 -0
  564. package/dist/src/tui/tui-extension-user-message.js.map +1 -0
  565. package/dist/src/tui/tui-follow-up-queue.d.ts +9 -0
  566. package/dist/src/tui/tui-follow-up-queue.js +18 -0
  567. package/dist/src/tui/tui-follow-up-queue.js.map +1 -0
  568. package/dist/src/tui/tui-local-shell.d.ts +11 -1
  569. package/dist/src/tui/tui-local-shell.js +50 -8
  570. package/dist/src/tui/tui-local-shell.js.map +1 -1
  571. package/dist/src/tui/tui-model-picker.d.ts +26 -0
  572. package/dist/src/tui/tui-model-picker.js +152 -0
  573. package/dist/src/tui/tui-model-picker.js.map +1 -0
  574. package/dist/src/tui/tui-oauth-login.d.ts +16 -0
  575. package/dist/src/tui/tui-oauth-login.js +189 -0
  576. package/dist/src/tui/tui-oauth-login.js.map +1 -0
  577. package/dist/src/tui/tui-overlays.d.ts +3 -3
  578. package/dist/src/tui/tui-overlays.js +6 -7
  579. package/dist/src/tui/tui-overlays.js.map +1 -1
  580. package/dist/src/tui/tui-picker-overlay.d.ts +27 -32
  581. package/dist/src/tui/tui-picker-overlay.js +340 -30
  582. package/dist/src/tui/tui-picker-overlay.js.map +1 -1
  583. package/dist/src/tui/tui-picker-services.d.ts +41 -0
  584. package/dist/src/tui/tui-picker-services.js +1 -0
  585. package/dist/src/tui/tui-run-state.d.ts +11 -0
  586. package/dist/src/tui/tui-run-state.js +114 -0
  587. package/dist/src/tui/tui-run-state.js.map +1 -0
  588. package/dist/src/tui/tui-runtime-hints.d.ts +4 -0
  589. package/dist/src/tui/tui-runtime-hints.js +18 -0
  590. package/dist/src/tui/tui-runtime-hints.js.map +1 -0
  591. package/dist/src/tui/tui-scoped-models.d.ts +1 -1
  592. package/dist/src/tui/tui-scoped-models.js +2 -2
  593. package/dist/src/tui/tui-scoped-models.js.map +1 -1
  594. package/dist/src/tui/tui-session-actions.d.ts +5 -3
  595. package/dist/src/tui/tui-session-actions.js +21 -9
  596. package/dist/src/tui/tui-session-actions.js.map +1 -1
  597. package/dist/src/tui/tui-session-format.d.ts +4 -1
  598. package/dist/src/tui/tui-session-format.js +17 -3
  599. package/dist/src/tui/tui-session-format.js.map +1 -1
  600. package/dist/src/tui/tui-session-snapshot.d.ts +82 -0
  601. package/dist/src/tui/tui-session-snapshot.js +184 -0
  602. package/dist/src/tui/tui-session-snapshot.js.map +1 -0
  603. package/dist/src/tui/tui-session-stats.d.ts +3 -0
  604. package/dist/src/tui/tui-session-stats.js +59 -0
  605. package/dist/src/tui/tui-session-stats.js.map +1 -0
  606. package/dist/src/tui/tui-settings.d.ts +21 -0
  607. package/dist/src/tui/tui-settings.js +28 -1
  608. package/dist/src/tui/tui-settings.js.map +1 -1
  609. package/dist/src/tui/tui-skills-autocomplete.js +1 -1
  610. package/dist/src/tui/tui-skills-autocomplete.js.map +1 -1
  611. package/dist/src/tui/tui-startup-resources.d.ts +3 -0
  612. package/dist/src/tui/tui-startup-resources.js +39 -0
  613. package/dist/src/tui/tui-startup-resources.js.map +1 -0
  614. package/dist/src/tui/tui-startup-text.d.ts +10 -0
  615. package/dist/src/tui/tui-startup-text.js +58 -0
  616. package/dist/src/tui/tui-startup-text.js.map +1 -0
  617. package/dist/src/tui/tui-stdio-filter.d.ts +1 -0
  618. package/dist/src/tui/tui-stdio-filter.js +11 -7
  619. package/dist/src/tui/tui-stdio-filter.js.map +1 -1
  620. package/dist/src/tui/tui-submit.d.ts +2 -0
  621. package/dist/src/tui/tui-submit.js +2 -1
  622. package/dist/src/tui/tui-submit.js.map +1 -1
  623. package/dist/src/tui/tui-tool-diff.js +61 -7
  624. package/dist/src/tui/tui-tool-diff.js.map +1 -1
  625. package/dist/src/tui/tui-tool-result.d.ts +17 -0
  626. package/dist/src/tui/tui-tool-result.js +74 -0
  627. package/dist/src/tui/tui-tool-result.js.map +1 -0
  628. package/dist/src/tui/tui-transcript-tree-picker.d.ts +57 -0
  629. package/dist/src/tui/tui-transcript-tree-picker.js +604 -0
  630. package/dist/src/tui/tui-transcript-tree-picker.js.map +1 -0
  631. package/dist/src/tui/tui-transcript-tree.d.ts +7 -0
  632. package/dist/src/tui/tui-transcript-tree.js +316 -0
  633. package/dist/src/tui/tui-transcript-tree.js.map +1 -0
  634. package/dist/src/tui/tui-types.d.ts +25 -34
  635. package/dist/src/tui/tui-types.js +12 -0
  636. package/dist/src/tui/tui-types.js.map +1 -1
  637. package/dist/src/tui/tui.js +1288 -112
  638. package/dist/src/tui/tui.js.map +1 -1
  639. package/dist/src/tui/xopc-tui-keybindings.d.ts +127 -2
  640. package/dist/src/tui/xopc-tui-keybindings.js +127 -2
  641. package/dist/src/tui/xopc-tui-keybindings.js.map +1 -1
  642. package/dist/src/workflows/domain/definition-utils.d.ts +2 -1
  643. package/dist/src/workflows/domain/definition-utils.js +18 -8
  644. package/dist/src/workflows/domain/definition-utils.js.map +1 -1
  645. package/dist/src/workflows/domain/definition.d.ts +25 -0
  646. package/dist/src/workflows/domain/event.d.ts +1 -0
  647. package/dist/src/workflows/domain/result.d.ts +15 -0
  648. package/dist/src/workflows/domain/run.d.ts +2 -0
  649. package/dist/src/workflows/domain/run.js.map +1 -1
  650. package/dist/src/workflows/engine/projector.js +4 -0
  651. package/dist/src/workflows/engine/projector.js.map +1 -1
  652. package/dist/src/workflows/engine/workflow-engine.d.ts +37 -1
  653. package/dist/src/workflows/engine/workflow-engine.js +75 -11
  654. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  655. package/dist/src/workflows/index.d.ts +1 -0
  656. package/dist/src/workflows/index.js +4 -1
  657. package/dist/src/workflows/registry/catalog-workflow-definition-registry.d.ts +9 -0
  658. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +40 -0
  659. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -0
  660. package/dist/src/workflows/registry/index.d.ts +2 -0
  661. package/dist/src/workflows/registry/index.js +2 -0
  662. package/dist/src/workflows/registry/workflow-definition-registry.d.ts +15 -0
  663. package/dist/src/workflows/registry/workflow-definition-registry.js +1 -0
  664. package/dist/src/workflows/runtime/index.d.ts +2 -0
  665. package/dist/src/workflows/runtime/index.js +2 -1
  666. package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +5 -0
  667. package/dist/src/workflows/runtime/script-workflow-runtime.js +15 -0
  668. package/dist/src/workflows/runtime/script-workflow-runtime.js.map +1 -0
  669. package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +16 -0
  670. package/dist/src/workflows/runtime/workflow-runtime-port.js +1 -0
  671. package/dist/src/workflows/service/run-view-to-snapshot.js +3 -0
  672. package/dist/src/workflows/service/run-view-to-snapshot.js.map +1 -1
  673. package/dist/src/workflows/service/workflow-run-service.d.ts +3 -0
  674. package/dist/src/workflows/service/workflow-run-service.js +10 -15
  675. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  676. package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -1
  677. package/dist/src/workflows/service/workflow-session-bridge.js +4 -1
  678. package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
  679. package/package.json +23 -17
  680. package/skills/creative/frontend-design/SKILL.md +1 -1
  681. package/skills/creative/theme-factory/SKILL.md +1 -1
  682. package/skills/documents/xlsx/SKILL.md +1 -1
  683. package/skills/engineering/diagnose/SKILL.md +2 -2
  684. package/skills/engineering/tdd/SKILL.md +1 -1
  685. package/skills/tools/github/SKILL.md +6 -1
  686. package/skills/tools/webapp-testing/SKILL.md +4 -1
  687. package/dist/extensions/telegram/src/adapters/config-surface.d.ts +0 -2
  688. package/dist/extensions/telegram/src/adapters/config-surface.js +0 -26
  689. package/dist/extensions/telegram/src/adapters/config-surface.js.map +0 -1
  690. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js +0 -158
  691. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js.map +0 -1
  692. package/dist/gateway/static/root/assets/agents-BwXkia_W.js +0 -222
  693. package/dist/gateway/static/root/assets/channels-settings-tlOTdaXw.js +0 -1
  694. package/dist/gateway/static/root/assets/channels-status-swr-D4XjqwqC.js +0 -8
  695. package/dist/gateway/static/root/assets/cron-api-DcmfGuj0.js +0 -1
  696. package/dist/gateway/static/root/assets/cron-page-CijJ4G6F.js +0 -1
  697. package/dist/gateway/static/root/assets/extension-settings-page-CyJk_G64.js +0 -1
  698. package/dist/gateway/static/root/assets/field-primitives-C4GpxsDo.js +0 -1
  699. package/dist/gateway/static/root/assets/heartbeat-config-api-CLD0Gpi3.js +0 -1
  700. package/dist/gateway/static/root/assets/index-0HmunJW9.js +0 -4845
  701. package/dist/gateway/static/root/assets/index-Bk75Phrd.css +0 -1
  702. package/dist/gateway/static/root/assets/notes-page-BBnTh0uI.js +0 -1
  703. package/dist/gateway/static/root/assets/sessions-page-B0riYK7j.js +0 -1
  704. package/dist/gateway/static/root/assets/settings-advanced-gate-DiP_WHu_.js +0 -2
  705. package/dist/gateway/static/root/assets/settings-page-1ZPhcCZ9.js +0 -3
  706. package/dist/gateway/static/root/assets/skills-page-BQ1hllKD.js +0 -2
  707. package/dist/gateway/static/root/assets/url-F3_D_6zZ.js +0 -3
  708. package/dist/gateway/static/root/assets/utils-CPr3FBh2.js +0 -1
  709. package/dist/gateway/static/root/assets/voice-api-key-field-BkbDl6dH.js +0 -1
  710. package/dist/gateway/static/root/assets/workflows-page-D059ysoF.js +0 -27
  711. package/dist/src/agent/embedded/map-stream-events.d.ts +0 -9
  712. package/dist/src/agent/embedded/map-stream-events.js +0 -63
  713. package/dist/src/agent/embedded/map-stream-events.js.map +0 -1
  714. package/dist/src/channels/dock.js.map +0 -1
  715. package/dist/src/channels/plugins/bundled.d.ts +0 -11
  716. package/dist/src/channels/plugins/bundled.js +0 -10
  717. package/dist/src/channels/plugins/bundled.js.map +0 -1
  718. package/dist/src/channels/registry.d.ts +0 -25
  719. package/dist/src/channels/registry.js +0 -82
  720. package/dist/src/channels/registry.js.map +0 -1
  721. package/dist/src/config/localized-text.d.ts +0 -6
  722. package/dist/src/config/localized-text.js +0 -42
  723. package/dist/src/config/localized-text.js.map +0 -1
  724. package/dist/src/generated/bundled-channel-plugins.d.ts +0 -10
  725. package/dist/src/generated/bundled-channel-plugins.js +0 -16
  726. package/dist/src/generated/bundled-channel-plugins.js.map +0 -1
  727. package/dist/src/tui/stream-assembler.d.ts +0 -22
  728. package/dist/src/tui/stream-assembler.js +0 -63
  729. package/dist/src/tui/stream-assembler.js.map +0 -1
  730. package/skills/browser/SKILL-zh.md +0 -188
  731. package/skills/business/company-values/SKILL-zh.md +0 -80
  732. package/skills/business/company-values/SKILL.md +0 -80
  733. package/skills/business/find-community/SKILL-zh.md +0 -50
  734. package/skills/business/find-community/SKILL.md +0 -50
  735. package/skills/business/first-customers/SKILL-zh.md +0 -76
  736. package/skills/business/first-customers/SKILL.md +0 -76
  737. package/skills/business/grow-sustainably/SKILL-zh.md +0 -92
  738. package/skills/business/grow-sustainably/SKILL.md +0 -92
  739. package/skills/business/marketing-plan/SKILL-zh.md +0 -100
  740. package/skills/business/marketing-plan/SKILL.md +0 -100
  741. package/skills/business/minimalist-review/SKILL-zh.md +0 -82
  742. package/skills/business/minimalist-review/SKILL.md +0 -82
  743. package/skills/business/mvp/SKILL-zh.md +0 -81
  744. package/skills/business/mvp/SKILL.md +0 -81
  745. package/skills/business/pricing/SKILL-zh.md +0 -64
  746. package/skills/business/pricing/SKILL.md +0 -64
  747. package/skills/business/processize/SKILL-zh.md +0 -91
  748. package/skills/business/processize/SKILL.md +0 -91
  749. package/skills/business/validate-idea/SKILL-zh.md +0 -68
  750. package/skills/business/validate-idea/SKILL.md +0 -68
  751. package/skills/creative/algorithmic-art/LICENSE.txt +0 -202
  752. package/skills/creative/algorithmic-art/SKILL-zh.md +0 -405
  753. package/skills/creative/algorithmic-art/SKILL.md +0 -405
  754. package/skills/creative/algorithmic-art/templates/generator_template.js +0 -223
  755. package/skills/creative/algorithmic-art/templates/viewer.html +0 -599
  756. package/skills/creative/frontend-design/SKILL-zh.md +0 -42
  757. package/skills/creative/theme-factory/SKILL-zh.md +0 -59
  758. package/skills/creative/web-artifacts-builder/LICENSE.txt +0 -202
  759. package/skills/creative/web-artifacts-builder/SKILL-zh.md +0 -74
  760. package/skills/creative/web-artifacts-builder/SKILL.md +0 -74
  761. package/skills/creative/web-artifacts-builder/scripts/bundle-artifact.sh +0 -54
  762. package/skills/creative/web-artifacts-builder/scripts/init-artifact.sh +0 -322
  763. package/skills/creative/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  764. package/skills/documents/doc-coauthoring/SKILL-zh.md +0 -375
  765. package/skills/documents/doc-coauthoring/SKILL.md +0 -375
  766. package/skills/documents/docx/LICENSE.txt +0 -30
  767. package/skills/documents/docx/SKILL-zh.md +0 -590
  768. package/skills/documents/docx/SKILL.md +0 -590
  769. package/skills/documents/docx/scripts/__init__.py +0 -1
  770. package/skills/documents/docx/scripts/accept_changes.py +0 -135
  771. package/skills/documents/docx/scripts/comment.py +0 -318
  772. package/skills/documents/docx/scripts/office/helpers/__init__.py +0 -0
  773. package/skills/documents/docx/scripts/office/helpers/merge_runs.py +0 -199
  774. package/skills/documents/docx/scripts/office/helpers/simplify_redlines.py +0 -197
  775. package/skills/documents/docx/scripts/office/pack.py +0 -159
  776. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  777. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  778. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  779. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  780. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  781. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  782. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  783. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  784. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  785. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  786. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  787. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  788. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  789. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  790. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  791. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  792. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  793. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  794. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  795. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  796. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  797. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  798. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  799. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  800. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  801. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  802. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  803. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  804. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  805. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  806. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  807. package/skills/documents/docx/scripts/office/schemas/mce/mc.xsd +0 -75
  808. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  809. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  810. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  811. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  812. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  813. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  814. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  815. package/skills/documents/docx/scripts/office/soffice.py +0 -183
  816. package/skills/documents/docx/scripts/office/unpack.py +0 -132
  817. package/skills/documents/docx/scripts/office/validate.py +0 -111
  818. package/skills/documents/docx/scripts/office/validators/__init__.py +0 -15
  819. package/skills/documents/docx/scripts/office/validators/base.py +0 -847
  820. package/skills/documents/docx/scripts/office/validators/docx.py +0 -446
  821. package/skills/documents/docx/scripts/office/validators/pptx.py +0 -275
  822. package/skills/documents/docx/scripts/office/validators/redlining.py +0 -247
  823. package/skills/documents/docx/scripts/templates/comments.xml +0 -3
  824. package/skills/documents/docx/scripts/templates/commentsExtended.xml +0 -3
  825. package/skills/documents/docx/scripts/templates/commentsExtensible.xml +0 -3
  826. package/skills/documents/docx/scripts/templates/commentsIds.xml +0 -3
  827. package/skills/documents/docx/scripts/templates/people.xml +0 -3
  828. package/skills/documents/pdf/LICENSE.txt +0 -30
  829. package/skills/documents/pdf/SKILL-zh.md +0 -314
  830. package/skills/documents/pdf/SKILL.md +0 -314
  831. package/skills/documents/pdf/forms.md +0 -294
  832. package/skills/documents/pdf/reference.md +0 -612
  833. package/skills/documents/pdf/scripts/check_bounding_boxes.py +0 -65
  834. package/skills/documents/pdf/scripts/check_fillable_fields.py +0 -11
  835. package/skills/documents/pdf/scripts/convert_pdf_to_images.py +0 -33
  836. package/skills/documents/pdf/scripts/create_validation_image.py +0 -37
  837. package/skills/documents/pdf/scripts/extract_form_field_info.py +0 -122
  838. package/skills/documents/pdf/scripts/extract_form_structure.py +0 -115
  839. package/skills/documents/pdf/scripts/fill_fillable_fields.py +0 -98
  840. package/skills/documents/pdf/scripts/fill_pdf_form_with_annotations.py +0 -107
  841. package/skills/documents/pptx/LICENSE.txt +0 -30
  842. package/skills/documents/pptx/SKILL-zh.md +0 -232
  843. package/skills/documents/pptx/SKILL.md +0 -232
  844. package/skills/documents/pptx/editing.md +0 -205
  845. package/skills/documents/pptx/pptxgenjs.md +0 -420
  846. package/skills/documents/pptx/scripts/__init__.py +0 -0
  847. package/skills/documents/pptx/scripts/add_slide.py +0 -195
  848. package/skills/documents/pptx/scripts/clean.py +0 -286
  849. package/skills/documents/pptx/scripts/office/helpers/__init__.py +0 -0
  850. package/skills/documents/pptx/scripts/office/helpers/merge_runs.py +0 -199
  851. package/skills/documents/pptx/scripts/office/helpers/simplify_redlines.py +0 -197
  852. package/skills/documents/pptx/scripts/office/pack.py +0 -159
  853. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  854. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  855. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  856. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  857. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  858. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  859. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  860. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  861. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  862. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  863. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  864. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  865. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  866. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  867. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  868. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  869. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  870. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  871. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  872. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  873. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  874. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  875. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  876. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  877. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  878. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  879. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  880. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  881. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  882. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  883. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  884. package/skills/documents/pptx/scripts/office/schemas/mce/mc.xsd +0 -75
  885. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  886. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  887. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  888. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  889. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  890. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  891. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  892. package/skills/documents/pptx/scripts/office/soffice.py +0 -183
  893. package/skills/documents/pptx/scripts/office/unpack.py +0 -132
  894. package/skills/documents/pptx/scripts/office/validate.py +0 -111
  895. package/skills/documents/pptx/scripts/office/validators/__init__.py +0 -15
  896. package/skills/documents/pptx/scripts/office/validators/base.py +0 -847
  897. package/skills/documents/pptx/scripts/office/validators/docx.py +0 -446
  898. package/skills/documents/pptx/scripts/office/validators/pptx.py +0 -275
  899. package/skills/documents/pptx/scripts/office/validators/redlining.py +0 -247
  900. package/skills/documents/pptx/scripts/thumbnail.py +0 -289
  901. package/skills/documents/xlsx/SKILL-zh.md +0 -292
  902. package/skills/engineering/diagnose/SKILL-zh.md +0 -117
  903. package/skills/engineering/grill-with-docs/ADR-FORMAT.md +0 -47
  904. package/skills/engineering/grill-with-docs/CONTEXT-FORMAT.md +0 -77
  905. package/skills/engineering/grill-with-docs/SKILL-zh.md +0 -88
  906. package/skills/engineering/grill-with-docs/SKILL.md +0 -88
  907. package/skills/engineering/improve-codebase-architecture/DEEPENING.md +0 -37
  908. package/skills/engineering/improve-codebase-architecture/INTERFACE-DESIGN.md +0 -44
  909. package/skills/engineering/improve-codebase-architecture/LANGUAGE.md +0 -53
  910. package/skills/engineering/improve-codebase-architecture/SKILL-zh.md +0 -71
  911. package/skills/engineering/improve-codebase-architecture/SKILL.md +0 -71
  912. package/skills/engineering/tdd/SKILL-zh.md +0 -109
  913. package/skills/engineering/to-issues/SKILL-zh.md +0 -81
  914. package/skills/engineering/to-issues/SKILL.md +0 -81
  915. package/skills/engineering/to-prd/SKILL-zh.md +0 -76
  916. package/skills/engineering/to-prd/SKILL.md +0 -74
  917. package/skills/engineering/zoom-out/SKILL-zh.md +0 -7
  918. package/skills/engineering/zoom-out/SKILL.md +0 -7
  919. package/skills/tools/find-skills/SKILL-zh.md +0 -440
  920. package/skills/tools/github/SKILL-zh.md +0 -48
  921. package/skills/tools/internal-comms/LICENSE.txt +0 -202
  922. package/skills/tools/internal-comms/SKILL-zh.md +0 -32
  923. package/skills/tools/internal-comms/SKILL.md +0 -32
  924. package/skills/tools/internal-comms/examples/3p-updates.md +0 -47
  925. package/skills/tools/internal-comms/examples/company-newsletter.md +0 -65
  926. package/skills/tools/internal-comms/examples/faq-answers.md +0 -30
  927. package/skills/tools/internal-comms/examples/general-comms.md +0 -16
  928. package/skills/tools/skill-creator/LICENSE.txt +0 -202
  929. package/skills/tools/skill-creator/SKILL-zh.md +0 -483
  930. package/skills/tools/skill-creator/SKILL.md +0 -485
  931. package/skills/tools/skill-creator/agents/analyzer.md +0 -274
  932. package/skills/tools/skill-creator/agents/comparator.md +0 -202
  933. package/skills/tools/skill-creator/agents/grader.md +0 -223
  934. package/skills/tools/skill-creator/assets/eval_review.html +0 -146
  935. package/skills/tools/skill-creator/eval-viewer/generate_review.py +0 -471
  936. package/skills/tools/skill-creator/eval-viewer/viewer.html +0 -1325
  937. package/skills/tools/skill-creator/references/schemas.md +0 -430
  938. package/skills/tools/skill-creator/scripts/__init__.py +0 -0
  939. package/skills/tools/skill-creator/scripts/aggregate_benchmark.py +0 -401
  940. package/skills/tools/skill-creator/scripts/generate_report.py +0 -326
  941. package/skills/tools/skill-creator/scripts/improve_description.py +0 -247
  942. package/skills/tools/skill-creator/scripts/package_skill.py +0 -136
  943. package/skills/tools/skill-creator/scripts/quick_validate.py +0 -103
  944. package/skills/tools/skill-creator/scripts/run_eval.py +0 -310
  945. package/skills/tools/skill-creator/scripts/run_loop.py +0 -328
  946. package/skills/tools/skill-creator/scripts/utils.py +0 -47
  947. package/skills/tools/summarize/SKILL-zh.md +0 -47
  948. package/skills/tools/weather/SKILL-zh.md +0 -46
  949. package/skills/tools/weather/SKILL.md +0 -46
  950. package/skills/tools/webapp-testing/SKILL-zh.md +0 -96
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-tui-session-key.js","names":[],"sources":["../../../src/routing/resolve-tui-session-key.ts"],"sourcesContent":["import type { Config } from '../config/schema.js';\nimport {\n resolveAgentIdByWorkspacePath,\n resolveDefaultAgentId,\n} from '../agent/agent-scope.js';\nimport {\n buildAgentMainSessionKey,\n normalizeAgentId,\n normalizeMainKey,\n parseAgentSessionKey,\n} from './agent-session-key.js';\nimport { normalizeLowercaseStringOrEmpty } from '../utils/string-coerce.js';\n\nexport type SessionScope = 'per-sender' | 'global';\n\nexport function resolveTuiSessionKey(params: {\n raw?: string;\n sessionScope: SessionScope;\n currentAgentId: string;\n sessionMainKey: string;\n}): string {\n const trimmed = (params.raw ?? '').trim();\n if (!trimmed) {\n if (params.sessionScope === 'global') {\n return 'global';\n }\n return buildAgentMainSessionKey({\n agentId: params.currentAgentId,\n mainKey: params.sessionMainKey,\n });\n }\n if (trimmed === 'global' || trimmed === 'unknown') {\n return trimmed;\n }\n if (trimmed.startsWith('agent:')) {\n return normalizeLowercaseStringOrEmpty(trimmed);\n }\n return `agent:${params.currentAgentId}:${normalizeLowercaseStringOrEmpty(trimmed)}`;\n}\n\nexport function resolveInitialTuiAgentId(params: {\n cfg: Config;\n fallbackAgentId: string;\n initialSessionInput?: string;\n cwd?: string;\n}): string {\n const parsed = parseAgentSessionKey((params.initialSessionInput ?? '').trim());\n if (parsed?.agentId) {\n return normalizeAgentId(parsed.agentId);\n }\n\n const inferredFromWorkspace = resolveAgentIdByWorkspacePath(\n params.cfg,\n params.cwd ?? process.cwd(),\n );\n if (inferredFromWorkspace) {\n return inferredFromWorkspace;\n }\n\n return normalizeAgentId(params.fallbackAgentId);\n}\n\n/** Resolve TUI startup session key from CLI options and config. */\nexport function resolveTuiStartupSessionKey(params: {\n cfg: Config;\n sessionOption?: string;\n cwd?: string;\n}): { sessionKey: string; agentId: string; sessionScope: SessionScope; sessionMainKey: string } {\n const sessionScope = (params.cfg.session?.scope ?? 'per-sender') as SessionScope;\n const sessionMainKey = normalizeMainKey(params.cfg.session?.mainKey);\n const agentId = resolveInitialTuiAgentId({\n cfg: params.cfg,\n fallbackAgentId: resolveDefaultAgentId(params.cfg),\n initialSessionInput: (params.sessionOption ?? '').trim(),\n cwd: params.cwd ?? process.cwd(),\n });\n const sessionKey = resolveTuiSessionKey({\n raw: params.sessionOption,\n sessionScope,\n currentAgentId: agentId,\n sessionMainKey,\n });\n return { sessionKey, agentId, sessionScope, sessionMainKey };\n}\n"],"mappings":";;;;;kBAIiC;wBAMD;oBAC4C;AAI5E,SAAgB,qBAAqB,QAK1B;CACT,MAAM,WAAW,OAAO,OAAO,IAAI,MAAM;AACzC,KAAI,CAAC,SAAS;AACZ,MAAI,OAAO,iBAAiB,SAC1B,QAAO;AAET,SAAO,yBAAyB;GAC9B,SAAS,OAAO;GAChB,SAAS,OAAO;GACjB,CAAC;;AAEJ,KAAI,YAAY,YAAY,YAAY,UACtC,QAAO;AAET,KAAI,QAAQ,WAAW,SAAS,CAC9B,QAAO,gCAAgC,QAAQ;AAEjD,QAAO,SAAS,OAAO,eAAe,GAAG,gCAAgC,QAAQ;;AAGnF,SAAgB,yBAAyB,QAK9B;CACT,MAAM,SAAS,sBAAsB,OAAO,uBAAuB,IAAI,MAAM,CAAC;AAC9E,KAAI,QAAQ,QACV,QAAO,iBAAiB,OAAO,QAAQ;CAGzC,MAAM,wBAAwB,8BAC5B,OAAO,KACP,OAAO,OAAO,QAAQ,KAAK,CAC5B;AACD,KAAI,sBACF,QAAO;AAGT,QAAO,iBAAiB,OAAO,gBAAgB;;;AAIjD,SAAgB,4BAA4B,QAIoD;CAC9F,MAAM,eAAgB,OAAO,IAAI,SAAS,SAAS;CACnD,MAAM,iBAAiB,iBAAiB,OAAO,IAAI,SAAS,QAAQ;CACpE,MAAM,UAAU,yBAAyB;EACvC,KAAK,OAAO;EACZ,iBAAiB,sBAAsB,OAAO,IAAI;EAClD,sBAAsB,OAAO,iBAAiB,IAAI,MAAM;EACxD,KAAK,OAAO,OAAO,QAAQ,KAAK;EACjC,CAAC;AAOF,QAAO;EAAE,YANU,qBAAqB;GACtC,KAAK,OAAO;GACZ;GACA,gBAAgB;GAChB;GACD,CACkB;EAAE;EAAS;EAAc;EAAgB"}
1
+ {"version":3,"file":"resolve-tui-session-key.js","names":[],"sources":["../../../src/routing/resolve-tui-session-key.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type { Config } from '../config/schema.js';\nimport {\n resolveAgentIdByWorkspacePath,\n resolveDefaultAgentId,\n} from '../agent/agent-scope.js';\nimport {\n buildAgentMainSessionKey,\n normalizeAgentId,\n normalizeMainKey,\n parseAgentSessionKey,\n} from './agent-session-key.js';\nimport { normalizeLowercaseStringOrEmpty } from '../utils/string-coerce.js';\n\nexport type SessionScope = 'per-sender' | 'global';\n\nexport function resolveTuiSessionKey(params: {\n raw?: string;\n sessionScope: SessionScope;\n currentAgentId: string;\n sessionMainKey: string;\n}): string {\n const trimmed = (params.raw ?? '').trim();\n if (!trimmed) {\n if (params.sessionScope === 'global') {\n return 'global';\n }\n return buildAgentMainSessionKey({\n agentId: params.currentAgentId,\n mainKey: params.sessionMainKey,\n });\n }\n if (trimmed === 'global' || trimmed === 'unknown') {\n return trimmed;\n }\n if (trimmed.startsWith('agent:')) {\n return normalizeLowercaseStringOrEmpty(trimmed);\n }\n return `agent:${params.currentAgentId}:${normalizeLowercaseStringOrEmpty(trimmed)}`;\n}\n\nexport function resolveInitialTuiAgentId(params: {\n cfg: Config;\n fallbackAgentId: string;\n initialSessionInput?: string;\n cwd?: string;\n}): string {\n const parsed = parseAgentSessionKey((params.initialSessionInput ?? '').trim());\n if (parsed?.agentId) {\n return normalizeAgentId(parsed.agentId);\n }\n\n const inferredFromWorkspace = resolveAgentIdByWorkspacePath(\n params.cfg,\n params.cwd ?? process.cwd(),\n );\n if (inferredFromWorkspace) {\n return inferredFromWorkspace;\n }\n\n return normalizeAgentId(params.fallbackAgentId);\n}\n\nexport function createDefaultTuiSessionKeySuffix(): string {\n return `tui-${randomUUID()}`;\n}\n\n/** Resolve TUI startup session key from CLI options and config. */\nexport function resolveTuiStartupSessionKey(params: {\n cfg: Config;\n sessionOption?: string;\n cwd?: string;\n createSessionKeySuffix?: () => string;\n}): { sessionKey: string; agentId: string; sessionScope: SessionScope; sessionMainKey: string } {\n const sessionScope = (params.cfg.session?.scope ?? 'per-sender') as SessionScope;\n const sessionMainKey = normalizeMainKey(params.cfg.session?.mainKey);\n const sessionOption = (params.sessionOption ?? '').trim();\n const agentId = resolveInitialTuiAgentId({\n cfg: params.cfg,\n fallbackAgentId: resolveDefaultAgentId(params.cfg),\n initialSessionInput: sessionOption,\n cwd: params.cwd ?? process.cwd(),\n });\n const sessionKey = resolveTuiSessionKey({\n raw: sessionOption || (params.createSessionKeySuffix ?? createDefaultTuiSessionKeySuffix)(),\n sessionScope,\n currentAgentId: agentId,\n sessionMainKey,\n });\n return { sessionKey, agentId, sessionScope, sessionMainKey };\n}\n"],"mappings":";;;;;;kBAMiC;wBAMD;oBAC4C;AAI5E,SAAgB,qBAAqB,QAK1B;CACT,MAAM,WAAW,OAAO,OAAO,IAAI,MAAM;AACzC,KAAI,CAAC,SAAS;AACZ,MAAI,OAAO,iBAAiB,SAC1B,QAAO;AAET,SAAO,yBAAyB;GAC9B,SAAS,OAAO;GAChB,SAAS,OAAO;GACjB,CAAC;;AAEJ,KAAI,YAAY,YAAY,YAAY,UACtC,QAAO;AAET,KAAI,QAAQ,WAAW,SAAS,CAC9B,QAAO,gCAAgC,QAAQ;AAEjD,QAAO,SAAS,OAAO,eAAe,GAAG,gCAAgC,QAAQ;;AAGnF,SAAgB,yBAAyB,QAK9B;CACT,MAAM,SAAS,sBAAsB,OAAO,uBAAuB,IAAI,MAAM,CAAC;AAC9E,KAAI,QAAQ,QACV,QAAO,iBAAiB,OAAO,QAAQ;CAGzC,MAAM,wBAAwB,8BAC5B,OAAO,KACP,OAAO,OAAO,QAAQ,KAAK,CAC5B;AACD,KAAI,sBACF,QAAO;AAGT,QAAO,iBAAiB,OAAO,gBAAgB;;AAGjD,SAAgB,mCAA2C;AACzD,QAAO,OAAO,YAAY;;;AAI5B,SAAgB,4BAA4B,QAKoD;CAC9F,MAAM,eAAgB,OAAO,IAAI,SAAS,SAAS;CACnD,MAAM,iBAAiB,iBAAiB,OAAO,IAAI,SAAS,QAAQ;CACpE,MAAM,iBAAiB,OAAO,iBAAiB,IAAI,MAAM;CACzD,MAAM,UAAU,yBAAyB;EACvC,KAAK,OAAO;EACZ,iBAAiB,sBAAsB,OAAO,IAAI;EAClD,qBAAqB;EACrB,KAAK,OAAO,OAAO,QAAQ,KAAK;EACjC,CAAC;AAOF,QAAO;EAAE,YANU,qBAAqB;GACtC,KAAK,kBAAkB,OAAO,0BAA0B,mCAAmC;GAC3F;GACA,gBAAgB;GAChB;GACD,CACkB;EAAE;EAAS;EAAc;EAAgB"}
@@ -1,9 +1,34 @@
1
1
  import type { Message } from './types.js';
2
+ import type { TranscriptStoredRow } from './session-context-for-llm.js';
2
3
  /** Transcript row for TUI and HTTP clients (flattened from persisted session messages). */
3
4
  export interface ClientHistoryMessage {
5
+ id?: string;
4
6
  role: 'user' | 'assistant' | 'system';
5
7
  content: string;
8
+ rawContent?: string | unknown[];
6
9
  timestamp?: number;
10
+ kind?: 'message' | 'compaction' | 'context' | 'bash' | 'custom' | 'branch';
11
+ tokensBefore?: number;
12
+ tokensAfter?: number;
13
+ bash?: {
14
+ command: string;
15
+ output?: string;
16
+ exitCode?: number | null;
17
+ signal?: string | null;
18
+ excludeFromContext?: boolean;
19
+ truncated?: boolean;
20
+ fullOutputPath?: string;
21
+ };
22
+ custom?: {
23
+ customType: string;
24
+ details?: unknown;
25
+ state?: boolean;
26
+ display?: boolean;
27
+ };
28
+ branch?: {
29
+ summary: string;
30
+ fromId?: string;
31
+ };
7
32
  toolCalls?: Array<{
8
33
  name: string;
9
34
  args?: unknown;
@@ -19,3 +44,10 @@ export declare function flattenMessageContent(content: string | unknown[]): stri
19
44
  export declare function messagesToClientHistory(messages: Message[], opts?: {
20
45
  limit?: number;
21
46
  }): ClientHistoryMessage[];
47
+ /**
48
+ * Maps persisted transcript rows into linear chat history, preserving non-LLM
49
+ * audit rows that the TUI can render as dedicated components.
50
+ */
51
+ export declare function transcriptRowsToClientHistory(rows: TranscriptStoredRow[], opts?: {
52
+ limit?: number;
53
+ }): ClientHistoryMessage[];
@@ -83,7 +83,238 @@ function messagesToClientHistory(messages, opts) {
83
83
  }
84
84
  return out;
85
85
  }
86
+ function asHistoryMessageRow(row) {
87
+ const role = row.role;
88
+ if (typeof role !== "string" || ![
89
+ "system",
90
+ "user",
91
+ "assistant",
92
+ "tool",
93
+ "toolResult"
94
+ ].includes(role)) return null;
95
+ return row;
96
+ }
97
+ function parseTimestampValue(ts) {
98
+ if (typeof ts === "number") return Number.isFinite(ts) ? ts : void 0;
99
+ return parseTimestamp(ts);
100
+ }
101
+ function collectHistoryToolResults(messages) {
102
+ const map = /* @__PURE__ */ new Map();
103
+ for (const m of messages) {
104
+ if (m.role !== "tool" && m.role !== "toolResult") continue;
105
+ const id = m.tool_call_id ?? m.toolCallId;
106
+ if (!id || typeof id !== "string") continue;
107
+ map.set(id, {
108
+ text: flattenMessageContent(m.content ?? ""),
109
+ isError: m.isError
110
+ });
111
+ }
112
+ return map;
113
+ }
114
+ function isCompactionRow(row) {
115
+ return row.type === "compaction";
116
+ }
117
+ function compactionSummaryRowToClientHistory(row) {
118
+ const r = row;
119
+ if (r.role !== "compactionSummary") return null;
120
+ return {
121
+ role: "system",
122
+ kind: "compaction",
123
+ content: optionalString(r.summary) ?? "",
124
+ timestamp: parseTimestampValue(typeof r.timestamp === "string" || typeof r.timestamp === "number" ? r.timestamp : void 0),
125
+ tokensBefore: typeof r.tokensBefore === "number" ? r.tokensBefore : void 0
126
+ };
127
+ }
128
+ function contextRowToClientHistory(row) {
129
+ if (row.kind !== "context") return null;
130
+ const text = row.text;
131
+ if (typeof text !== "string" || !text.trim()) return null;
132
+ const createdAt = row.createdAt;
133
+ return {
134
+ role: "system",
135
+ kind: "context",
136
+ content: text,
137
+ timestamp: typeof createdAt === "string" ? parseTimestamp(createdAt) : void 0
138
+ };
139
+ }
140
+ function optionalString(value) {
141
+ return typeof value === "string" ? value : void 0;
142
+ }
143
+ function bashRowToClientHistory(row) {
144
+ const r = row;
145
+ if (r.role !== "bashExecution") return null;
146
+ const command = optionalString(r.command) ?? optionalString(r.content)?.trim();
147
+ if (!command) return null;
148
+ const output = Array.isArray(r.output) || typeof r.output === "string" ? flattenMessageContent(r.output) : optionalString(r.output);
149
+ const exitCode = typeof r.exitCode === "number" ? r.exitCode : r.exitCode === null ? null : void 0;
150
+ const signal = typeof r.signal === "string" ? r.signal : r.signal === null ? null : void 0;
151
+ const excludeFromContext = typeof r.excludeFromContext === "boolean" ? r.excludeFromContext : typeof r.excludedFromContext === "boolean" ? r.excludedFromContext : void 0;
152
+ return {
153
+ role: "system",
154
+ kind: "bash",
155
+ content: output || command,
156
+ timestamp: parseTimestampValue(typeof r.timestamp === "string" || typeof r.timestamp === "number" ? r.timestamp : void 0),
157
+ bash: {
158
+ command,
159
+ output,
160
+ exitCode,
161
+ signal,
162
+ excludeFromContext,
163
+ truncated: typeof r.truncated === "boolean" ? r.truncated : void 0,
164
+ fullOutputPath: optionalString(r.fullOutputPath)
165
+ }
166
+ };
167
+ }
168
+ function customRowToClientHistory(row) {
169
+ const r = row;
170
+ if (r.role !== "custom" && r.type !== "custom_message") return null;
171
+ const customType = optionalString(r.customType)?.trim();
172
+ if (!customType) return null;
173
+ const content = Array.isArray(r.content) || typeof r.content === "string" ? flattenMessageContent(r.content) : "";
174
+ const timestamp = parseTimestampValue(typeof r.timestamp === "string" || typeof r.timestamp === "number" ? r.timestamp : void 0);
175
+ return {
176
+ role: "system",
177
+ kind: "custom",
178
+ content,
179
+ rawContent: Array.isArray(r.content) || typeof r.content === "string" ? r.content : void 0,
180
+ timestamp,
181
+ custom: {
182
+ customType,
183
+ details: r.details,
184
+ display: r.display === false ? false : true
185
+ }
186
+ };
187
+ }
188
+ function customStateRowToClientHistory(row) {
189
+ const r = row;
190
+ if (r.type !== "custom") return null;
191
+ const customType = optionalString(r.customType)?.trim();
192
+ if (!customType) return null;
193
+ return {
194
+ role: "system",
195
+ kind: "custom",
196
+ content: "",
197
+ timestamp: parseTimestampValue(typeof r.timestamp === "string" || typeof r.timestamp === "number" ? r.timestamp : void 0),
198
+ custom: {
199
+ customType,
200
+ details: r.data,
201
+ state: true
202
+ }
203
+ };
204
+ }
205
+ function branchSummaryRowToClientHistory(row) {
206
+ const r = row;
207
+ if (r.role !== "branchSummary") return null;
208
+ const summary = optionalString(r.summary)?.trim();
209
+ if (!summary) return null;
210
+ const fromId = optionalString(r.fromId);
211
+ return {
212
+ role: "system",
213
+ kind: "branch",
214
+ content: summary,
215
+ timestamp: parseTimestampValue(typeof r.timestamp === "string" || typeof r.timestamp === "number" ? r.timestamp : void 0),
216
+ branch: {
217
+ summary,
218
+ fromId
219
+ }
220
+ };
221
+ }
222
+ /**
223
+ * Maps persisted transcript rows into linear chat history, preserving non-LLM
224
+ * audit rows that the TUI can render as dedicated components.
225
+ */
226
+ function transcriptRowsToClientHistory(rows, opts) {
227
+ const startIndex = opts?.limit !== void 0 && rows.length > opts.limit ? rows.length - opts.limit : 0;
228
+ const slice = opts?.limit !== void 0 && rows.length > opts.limit ? rows.slice(-opts.limit) : rows;
229
+ const results = collectHistoryToolResults(slice.map(asHistoryMessageRow).filter((row) => row !== null));
230
+ const out = [];
231
+ for (const [offset, row] of slice.entries()) {
232
+ const id = `row-${startIndex + offset + 1}`;
233
+ if (isCompactionRow(row)) {
234
+ out.push({
235
+ id,
236
+ role: "system",
237
+ kind: "compaction",
238
+ content: typeof row.summary === "string" ? row.summary : "",
239
+ timestamp: parseTimestamp(row.at),
240
+ tokensBefore: row.tokensBefore,
241
+ tokensAfter: row.tokensAfter
242
+ });
243
+ continue;
244
+ }
245
+ const compactionSummaryRow = compactionSummaryRowToClientHistory(row);
246
+ if (compactionSummaryRow) {
247
+ out.push({
248
+ id,
249
+ ...compactionSummaryRow
250
+ });
251
+ continue;
252
+ }
253
+ const contextRow = contextRowToClientHistory(row);
254
+ if (contextRow) {
255
+ out.push({
256
+ id,
257
+ ...contextRow
258
+ });
259
+ continue;
260
+ }
261
+ const bashRow = bashRowToClientHistory(row);
262
+ if (bashRow) {
263
+ out.push({
264
+ id,
265
+ ...bashRow
266
+ });
267
+ continue;
268
+ }
269
+ const customRow = customRowToClientHistory(row);
270
+ if (customRow) {
271
+ out.push({
272
+ id,
273
+ ...customRow
274
+ });
275
+ continue;
276
+ }
277
+ const customStateRow = customStateRowToClientHistory(row);
278
+ if (customStateRow) {
279
+ out.push({
280
+ id,
281
+ ...customStateRow
282
+ });
283
+ continue;
284
+ }
285
+ const branchSummaryRow = branchSummaryRowToClientHistory(row);
286
+ if (branchSummaryRow) {
287
+ out.push({
288
+ id,
289
+ ...branchSummaryRow
290
+ });
291
+ continue;
292
+ }
293
+ const messageRow = asHistoryMessageRow(row);
294
+ if (!messageRow) continue;
295
+ if (messageRow.role === "tool" || messageRow.role === "toolResult") continue;
296
+ if (messageRow.role === "user" || messageRow.role === "system") {
297
+ out.push({
298
+ id,
299
+ role: messageRow.role,
300
+ kind: "message",
301
+ content: flattenMessageContent(messageRow.content ?? ""),
302
+ timestamp: parseTimestampValue(messageRow.timestamp)
303
+ });
304
+ continue;
305
+ }
306
+ out.push({
307
+ id,
308
+ role: "assistant",
309
+ kind: "message",
310
+ content: flattenMessageContent(messageRow.content ?? ""),
311
+ timestamp: parseTimestampValue(messageRow.timestamp),
312
+ toolCalls: toolCallsWithResults(messageRow.tool_calls ?? messageRow.toolCalls, results)
313
+ });
314
+ }
315
+ return out;
316
+ }
86
317
  //#endregion
87
- export { flattenMessageContent, messagesToClientHistory };
318
+ export { flattenMessageContent, messagesToClientHistory, transcriptRowsToClientHistory };
88
319
 
89
320
  //# sourceMappingURL=client-history.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-history.js","names":[],"sources":["../../../src/session/client-history.ts"],"sourcesContent":["import type { Message } from './types.js';\n\n/** Transcript row for TUI and HTTP clients (flattened from persisted session messages). */\nexport interface ClientHistoryMessage {\n role: 'user' | 'assistant' | 'system';\n content: string;\n timestamp?: number;\n toolCalls?: Array<{ name: string; args?: unknown; result?: string; isError?: boolean }>;\n}\n\nexport function flattenMessageContent(content: string | unknown[]): string {\n if (typeof content === 'string') return content;\n if (!Array.isArray(content)) return '';\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block !== 'object' || block === null) continue;\n const b = block as Record<string, unknown>;\n if (b.type === 'text' && typeof b.text === 'string') {\n parts.push(b.text);\n }\n }\n return parts.join('');\n}\n\nfunction parseTimestamp(ts: string | undefined): number | undefined {\n if (!ts) return undefined;\n const ms = Date.parse(ts);\n return Number.isFinite(ms) ? ms : undefined;\n}\n\nfunction safeJsonParseArguments(raw: string): unknown {\n const t = raw.trim();\n if (!t) return undefined;\n try {\n return JSON.parse(t) as unknown;\n } catch {\n return raw;\n }\n}\n\nfunction collectToolResults(messages: Message[]): Map<string, { text: string; isError?: boolean }> {\n const map = new Map<string, { text: string; isError?: boolean }>();\n for (const m of messages) {\n if (m.role !== 'tool' && m.role !== 'toolResult') continue;\n const id = m.tool_call_id;\n if (!id || typeof id !== 'string') continue;\n map.set(id, {\n text: flattenMessageContent(m.content),\n isError: m.isError,\n });\n }\n return map;\n}\n\nfunction toolCallsWithResults(\n tool_calls: Message['tool_calls'],\n results: Map<string, { text: string; isError?: boolean }>,\n): ClientHistoryMessage['toolCalls'] | undefined {\n if (!tool_calls?.length) return undefined;\n const out: NonNullable<ClientHistoryMessage['toolCalls']> = [];\n for (const tc of tool_calls) {\n const res = results.get(tc.id);\n out.push({\n name: tc.function.name,\n args: safeJsonParseArguments(tc.function.arguments),\n result: res?.text,\n isError: res?.isError,\n });\n }\n return out.length ? out : undefined;\n}\n\n/**\n * Maps gateway/session API messages into a linear chat history for clients.\n * Tool / toolResult rows are merged into assistant `toolCalls` when ids match; otherwise skipped.\n */\nexport function messagesToClientHistory(\n messages: Message[],\n opts?: { limit?: number },\n): ClientHistoryMessage[] {\n const slice =\n opts?.limit !== undefined && messages.length > opts.limit\n ? messages.slice(-opts.limit)\n : messages;\n\n const results = collectToolResults(slice);\n const out: ClientHistoryMessage[] = [];\n\n for (const m of slice) {\n if (m.role === 'tool' || m.role === 'toolResult') {\n continue;\n }\n\n if (m.role === 'user' || m.role === 'system') {\n const text = flattenMessageContent(m.content);\n out.push({\n role: m.role,\n content: text,\n timestamp: parseTimestamp(m.timestamp),\n });\n continue;\n }\n\n if (m.role === 'assistant') {\n const text = flattenMessageContent(m.content);\n const toolCalls = toolCallsWithResults(m.tool_calls, results);\n out.push({\n role: 'assistant',\n content: text,\n timestamp: parseTimestamp(m.timestamp),\n toolCalls,\n });\n }\n }\n\n return out;\n}\n"],"mappings":";AAUA,SAAgB,sBAAsB,SAAqC;AACzE,KAAI,OAAO,YAAY,SAAU,QAAO;AACxC,KAAI,CAAC,MAAM,QAAQ,QAAQ,CAAE,QAAO;CACpC,MAAM,QAAkB,EAAE;AAC1B,MAAK,MAAM,SAAS,SAAS;AAC3B,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM;EACjD,MAAM,IAAI;AACV,MAAI,EAAE,SAAS,UAAU,OAAO,EAAE,SAAS,SACzC,OAAM,KAAK,EAAE,KAAK;;AAGtB,QAAO,MAAM,KAAK,GAAG;;AAGvB,SAAS,eAAe,IAA4C;AAClE,KAAI,CAAC,GAAI,QAAO,KAAA;CAChB,MAAM,KAAK,KAAK,MAAM,GAAG;AACzB,QAAO,OAAO,SAAS,GAAG,GAAG,KAAK,KAAA;;AAGpC,SAAS,uBAAuB,KAAsB;CACpD,MAAM,IAAI,IAAI,MAAM;AACpB,KAAI,CAAC,EAAG,QAAO,KAAA;AACf,KAAI;AACF,SAAO,KAAK,MAAM,EAAE;SACd;AACN,SAAO;;;AAIX,SAAS,mBAAmB,UAAuE;CACjG,MAAM,sBAAM,IAAI,KAAkD;AAClE,MAAK,MAAM,KAAK,UAAU;AACxB,MAAI,EAAE,SAAS,UAAU,EAAE,SAAS,aAAc;EAClD,MAAM,KAAK,EAAE;AACb,MAAI,CAAC,MAAM,OAAO,OAAO,SAAU;AACnC,MAAI,IAAI,IAAI;GACV,MAAM,sBAAsB,EAAE,QAAQ;GACtC,SAAS,EAAE;GACZ,CAAC;;AAEJ,QAAO;;AAGT,SAAS,qBACP,YACA,SAC+C;AAC/C,KAAI,CAAC,YAAY,OAAQ,QAAO,KAAA;CAChC,MAAM,MAAsD,EAAE;AAC9D,MAAK,MAAM,MAAM,YAAY;EAC3B,MAAM,MAAM,QAAQ,IAAI,GAAG,GAAG;AAC9B,MAAI,KAAK;GACP,MAAM,GAAG,SAAS;GAClB,MAAM,uBAAuB,GAAG,SAAS,UAAU;GACnD,QAAQ,KAAK;GACb,SAAS,KAAK;GACf,CAAC;;AAEJ,QAAO,IAAI,SAAS,MAAM,KAAA;;;;;;AAO5B,SAAgB,wBACd,UACA,MACwB;CACxB,MAAM,QACJ,MAAM,UAAU,KAAA,KAAa,SAAS,SAAS,KAAK,QAChD,SAAS,MAAM,CAAC,KAAK,MAAM,GAC3B;CAEN,MAAM,UAAU,mBAAmB,MAAM;CACzC,MAAM,MAA8B,EAAE;AAEtC,MAAK,MAAM,KAAK,OAAO;AACrB,MAAI,EAAE,SAAS,UAAU,EAAE,SAAS,aAClC;AAGF,MAAI,EAAE,SAAS,UAAU,EAAE,SAAS,UAAU;GAC5C,MAAM,OAAO,sBAAsB,EAAE,QAAQ;AAC7C,OAAI,KAAK;IACP,MAAM,EAAE;IACR,SAAS;IACT,WAAW,eAAe,EAAE,UAAU;IACvC,CAAC;AACF;;AAGF,MAAI,EAAE,SAAS,aAAa;GAC1B,MAAM,OAAO,sBAAsB,EAAE,QAAQ;GAC7C,MAAM,YAAY,qBAAqB,EAAE,YAAY,QAAQ;AAC7D,OAAI,KAAK;IACP,MAAM;IACN,SAAS;IACT,WAAW,eAAe,EAAE,UAAU;IACtC;IACD,CAAC;;;AAIN,QAAO"}
1
+ {"version":3,"file":"client-history.js","names":[],"sources":["../../../src/session/client-history.ts"],"sourcesContent":["import type { Message } from './types.js';\nimport type { TranscriptStoredRow } from './session-context-for-llm.js';\n\n/** Transcript row for TUI and HTTP clients (flattened from persisted session messages). */\nexport interface ClientHistoryMessage {\n id?: string;\n role: 'user' | 'assistant' | 'system';\n content: string;\n rawContent?: string | unknown[];\n timestamp?: number;\n kind?: 'message' | 'compaction' | 'context' | 'bash' | 'custom' | 'branch';\n tokensBefore?: number;\n tokensAfter?: number;\n bash?: {\n command: string;\n output?: string;\n exitCode?: number | null;\n signal?: string | null;\n excludeFromContext?: boolean;\n truncated?: boolean;\n fullOutputPath?: string;\n };\n custom?: {\n customType: string;\n details?: unknown;\n state?: boolean;\n display?: boolean;\n };\n branch?: {\n summary: string;\n fromId?: string;\n };\n toolCalls?: Array<{ name: string; args?: unknown; result?: string; isError?: boolean }>;\n}\n\nexport function flattenMessageContent(content: string | unknown[]): string {\n if (typeof content === 'string') return content;\n if (!Array.isArray(content)) return '';\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block !== 'object' || block === null) continue;\n const b = block as Record<string, unknown>;\n if (b.type === 'text' && typeof b.text === 'string') {\n parts.push(b.text);\n }\n }\n return parts.join('');\n}\n\nfunction parseTimestamp(ts: string | undefined): number | undefined {\n if (!ts) return undefined;\n const ms = Date.parse(ts);\n return Number.isFinite(ms) ? ms : undefined;\n}\n\nfunction safeJsonParseArguments(raw: string): unknown {\n const t = raw.trim();\n if (!t) return undefined;\n try {\n return JSON.parse(t) as unknown;\n } catch {\n return raw;\n }\n}\n\nfunction collectToolResults(messages: Message[]): Map<string, { text: string; isError?: boolean }> {\n const map = new Map<string, { text: string; isError?: boolean }>();\n for (const m of messages) {\n if (m.role !== 'tool' && m.role !== 'toolResult') continue;\n const id = m.tool_call_id;\n if (!id || typeof id !== 'string') continue;\n map.set(id, {\n text: flattenMessageContent(m.content),\n isError: m.isError,\n });\n }\n return map;\n}\n\nfunction toolCallsWithResults(\n tool_calls: Message['tool_calls'],\n results: Map<string, { text: string; isError?: boolean }>,\n): ClientHistoryMessage['toolCalls'] | undefined {\n if (!tool_calls?.length) return undefined;\n const out: NonNullable<ClientHistoryMessage['toolCalls']> = [];\n for (const tc of tool_calls) {\n const res = results.get(tc.id);\n out.push({\n name: tc.function.name,\n args: safeJsonParseArguments(tc.function.arguments),\n result: res?.text,\n isError: res?.isError,\n });\n }\n return out.length ? out : undefined;\n}\n\n/**\n * Maps gateway/session API messages into a linear chat history for clients.\n * Tool / toolResult rows are merged into assistant `toolCalls` when ids match; otherwise skipped.\n */\nexport function messagesToClientHistory(\n messages: Message[],\n opts?: { limit?: number },\n): ClientHistoryMessage[] {\n const slice =\n opts?.limit !== undefined && messages.length > opts.limit\n ? messages.slice(-opts.limit)\n : messages;\n\n const results = collectToolResults(slice);\n const out: ClientHistoryMessage[] = [];\n\n for (const m of slice) {\n if (m.role === 'tool' || m.role === 'toolResult') {\n continue;\n }\n\n if (m.role === 'user' || m.role === 'system') {\n const text = flattenMessageContent(m.content);\n out.push({\n role: m.role,\n content: text,\n timestamp: parseTimestamp(m.timestamp),\n });\n continue;\n }\n\n if (m.role === 'assistant') {\n const text = flattenMessageContent(m.content);\n const toolCalls = toolCallsWithResults(m.tool_calls, results);\n out.push({\n role: 'assistant',\n content: text,\n timestamp: parseTimestamp(m.timestamp),\n toolCalls,\n });\n }\n }\n\n return out;\n}\n\ntype HistoryMessageRow = {\n role: 'system' | 'user' | 'assistant' | 'tool' | 'toolResult';\n content?: string | unknown[];\n timestamp?: string | number;\n tool_call_id?: string;\n toolCallId?: string;\n tool_calls?: Message['tool_calls'];\n toolCalls?: Message['tool_calls'];\n isError?: boolean;\n};\n\nfunction asHistoryMessageRow(row: TranscriptStoredRow): HistoryMessageRow | null {\n const role = (row as { role?: unknown }).role;\n if (\n typeof role !== 'string' ||\n !['system', 'user', 'assistant', 'tool', 'toolResult'].includes(role)\n ) {\n return null;\n }\n return row as unknown as HistoryMessageRow;\n}\n\nfunction parseTimestampValue(ts: string | number | undefined): number | undefined {\n if (typeof ts === 'number') return Number.isFinite(ts) ? ts : undefined;\n return parseTimestamp(ts);\n}\n\nfunction collectHistoryToolResults(messages: HistoryMessageRow[]): Map<string, { text: string; isError?: boolean }> {\n const map = new Map<string, { text: string; isError?: boolean }>();\n for (const m of messages) {\n if (m.role !== 'tool' && m.role !== 'toolResult') continue;\n const id = m.tool_call_id ?? m.toolCallId;\n if (!id || typeof id !== 'string') continue;\n map.set(id, {\n text: flattenMessageContent(m.content ?? ''),\n isError: m.isError,\n });\n }\n return map;\n}\n\nfunction isCompactionRow(row: TranscriptStoredRow): row is TranscriptStoredRow & {\n type: 'compaction';\n summary?: string;\n at?: string;\n tokensBefore?: number;\n tokensAfter?: number;\n} {\n return (row as { type?: unknown }).type === 'compaction';\n}\n\nfunction compactionSummaryRowToClientHistory(row: TranscriptStoredRow): ClientHistoryMessage | null {\n const r = row as unknown as Record<string, unknown>;\n if (r.role !== 'compactionSummary') return null;\n const summary = optionalString(r.summary) ?? '';\n return {\n role: 'system',\n kind: 'compaction',\n content: summary,\n timestamp: parseTimestampValue(\n typeof r.timestamp === 'string' || typeof r.timestamp === 'number' ? r.timestamp : undefined,\n ),\n tokensBefore: typeof r.tokensBefore === 'number' ? r.tokensBefore : undefined,\n };\n}\n\nfunction contextRowToClientHistory(row: TranscriptStoredRow): ClientHistoryMessage | null {\n if ((row as { kind?: unknown }).kind !== 'context') return null;\n const text = (row as { text?: unknown }).text;\n if (typeof text !== 'string' || !text.trim()) return null;\n const createdAt = (row as { createdAt?: unknown }).createdAt;\n return {\n role: 'system',\n kind: 'context',\n content: text,\n timestamp: typeof createdAt === 'string' ? parseTimestamp(createdAt) : undefined,\n };\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction bashRowToClientHistory(row: TranscriptStoredRow): ClientHistoryMessage | null {\n const r = row as unknown as Record<string, unknown>;\n if (r.role !== 'bashExecution') return null;\n\n const command = optionalString(r.command) ?? optionalString(r.content)?.trim();\n if (!command) return null;\n const output = Array.isArray(r.output) || typeof r.output === 'string'\n ? flattenMessageContent(r.output)\n : optionalString(r.output);\n const exitCode = typeof r.exitCode === 'number' ? r.exitCode : r.exitCode === null ? null : undefined;\n const signal = typeof r.signal === 'string' ? r.signal : r.signal === null ? null : undefined;\n const excludeFromContext =\n typeof r.excludeFromContext === 'boolean'\n ? r.excludeFromContext\n : typeof r.excludedFromContext === 'boolean'\n ? r.excludedFromContext\n : undefined;\n\n return {\n role: 'system',\n kind: 'bash',\n content: output || command,\n timestamp: parseTimestampValue(\n typeof r.timestamp === 'string' || typeof r.timestamp === 'number' ? r.timestamp : undefined,\n ),\n bash: {\n command,\n output,\n exitCode,\n signal,\n excludeFromContext,\n truncated: typeof r.truncated === 'boolean' ? r.truncated : undefined,\n fullOutputPath: optionalString(r.fullOutputPath),\n },\n };\n}\n\nfunction customRowToClientHistory(row: TranscriptStoredRow): ClientHistoryMessage | null {\n const r = row as unknown as Record<string, unknown>;\n if (r.role !== 'custom' && r.type !== 'custom_message') return null;\n\n const customType = optionalString(r.customType)?.trim();\n if (!customType) return null;\n const content = Array.isArray(r.content) || typeof r.content === 'string'\n ? flattenMessageContent(r.content)\n : '';\n const timestamp = parseTimestampValue(\n typeof r.timestamp === 'string' || typeof r.timestamp === 'number' ? r.timestamp : undefined,\n );\n\n return {\n role: 'system',\n kind: 'custom',\n content,\n rawContent: Array.isArray(r.content) || typeof r.content === 'string' ? r.content : undefined,\n timestamp,\n custom: {\n customType,\n details: r.details,\n display: r.display === false ? false : true,\n },\n };\n}\n\nfunction customStateRowToClientHistory(row: TranscriptStoredRow): ClientHistoryMessage | null {\n const r = row as unknown as Record<string, unknown>;\n if (r.type !== 'custom') return null;\n\n const customType = optionalString(r.customType)?.trim();\n if (!customType) return null;\n return {\n role: 'system',\n kind: 'custom',\n content: '',\n timestamp: parseTimestampValue(\n typeof r.timestamp === 'string' || typeof r.timestamp === 'number' ? r.timestamp : undefined,\n ),\n custom: {\n customType,\n details: r.data,\n state: true,\n },\n };\n}\n\nfunction branchSummaryRowToClientHistory(row: TranscriptStoredRow): ClientHistoryMessage | null {\n const r = row as unknown as Record<string, unknown>;\n if (r.role !== 'branchSummary') return null;\n const summary = optionalString(r.summary)?.trim();\n if (!summary) return null;\n const fromId = optionalString(r.fromId);\n\n return {\n role: 'system',\n kind: 'branch',\n content: summary,\n timestamp: parseTimestampValue(\n typeof r.timestamp === 'string' || typeof r.timestamp === 'number' ? r.timestamp : undefined,\n ),\n branch: {\n summary,\n fromId,\n },\n };\n}\n\n/**\n * Maps persisted transcript rows into linear chat history, preserving non-LLM\n * audit rows that the TUI can render as dedicated components.\n */\nexport function transcriptRowsToClientHistory(\n rows: TranscriptStoredRow[],\n opts?: { limit?: number },\n): ClientHistoryMessage[] {\n const startIndex =\n opts?.limit !== undefined && rows.length > opts.limit\n ? rows.length - opts.limit\n : 0;\n const slice =\n opts?.limit !== undefined && rows.length > opts.limit\n ? rows.slice(-opts.limit)\n : rows;\n const messages = slice\n .map(asHistoryMessageRow)\n .filter((row): row is HistoryMessageRow => row !== null);\n const results = collectHistoryToolResults(messages);\n const out: ClientHistoryMessage[] = [];\n\n for (const [offset, row] of slice.entries()) {\n const id = `row-${startIndex + offset + 1}`;\n if (isCompactionRow(row)) {\n out.push({\n id,\n role: 'system',\n kind: 'compaction',\n content: typeof row.summary === 'string' ? row.summary : '',\n timestamp: parseTimestamp(row.at),\n tokensBefore: row.tokensBefore,\n tokensAfter: row.tokensAfter,\n });\n continue;\n }\n\n const compactionSummaryRow = compactionSummaryRowToClientHistory(row);\n if (compactionSummaryRow) {\n out.push({ id, ...compactionSummaryRow });\n continue;\n }\n\n const contextRow = contextRowToClientHistory(row);\n if (contextRow) {\n out.push({ id, ...contextRow });\n continue;\n }\n\n const bashRow = bashRowToClientHistory(row);\n if (bashRow) {\n out.push({ id, ...bashRow });\n continue;\n }\n\n const customRow = customRowToClientHistory(row);\n if (customRow) {\n out.push({ id, ...customRow });\n continue;\n }\n\n const customStateRow = customStateRowToClientHistory(row);\n if (customStateRow) {\n out.push({ id, ...customStateRow });\n continue;\n }\n\n const branchSummaryRow = branchSummaryRowToClientHistory(row);\n if (branchSummaryRow) {\n out.push({ id, ...branchSummaryRow });\n continue;\n }\n\n const messageRow = asHistoryMessageRow(row);\n if (!messageRow) continue;\n if (messageRow.role === 'tool' || messageRow.role === 'toolResult') {\n continue;\n }\n\n if (messageRow.role === 'user' || messageRow.role === 'system') {\n out.push({\n id,\n role: messageRow.role,\n kind: 'message',\n content: flattenMessageContent(messageRow.content ?? ''),\n timestamp: parseTimestampValue(messageRow.timestamp),\n });\n continue;\n }\n\n out.push({\n id,\n role: 'assistant',\n kind: 'message',\n content: flattenMessageContent(messageRow.content ?? ''),\n timestamp: parseTimestampValue(messageRow.timestamp),\n toolCalls: toolCallsWithResults(messageRow.tool_calls ?? messageRow.toolCalls, results),\n });\n }\n\n return out;\n}\n"],"mappings":"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"}
@@ -20,10 +20,6 @@ export declare class SessionIndex extends EventEmitter {
20
20
  /** Low-level store (e.g. cron resolving weixin delivery from session index). */
21
21
  getStore(): SessionStore;
22
22
  listSessions(query?: SessionListQuery): Promise<PaginatedResult<SessionMetadata>>;
23
- /**
24
- * List all subagent sessions.
25
- * Subagent sessions have keys starting with 'subagent:'.
26
- */
27
23
  listSubagents(query?: SessionListQuery): Promise<PaginatedResult<SessionMetadata>>;
28
24
  getSession(key: string, options?: {
29
25
  includeTranscriptSummary?: boolean;
@@ -75,6 +71,20 @@ export declare class SessionIndex extends EventEmitter {
75
71
  searchSessions(query: string): Promise<SessionMetadata[]>;
76
72
  searchInSession(key: string, keyword: string): Promise<Message[]>;
77
73
  exportSession(key: string, format: ExportFormat): Promise<string>;
74
+ importSessionExport(targetKey: string, jsonContent: string): Promise<{
75
+ sessionKey: string;
76
+ rowCount: number;
77
+ }>;
78
+ forkSession(sourceKey: string, targetKey: string): Promise<{
79
+ sessionKey: string;
80
+ rowCount: number;
81
+ }>;
82
+ forkSessionRows(sourceKey: string, targetKey: string, options?: {
83
+ throughRow?: number;
84
+ }): Promise<{
85
+ sessionKey: string;
86
+ rowCount: number;
87
+ }>;
78
88
  getStats(): Promise<GlobalSessionStats>;
79
89
  archiveOldSessions(olderThanDays: number): Promise<number>;
80
90
  onSessionCreated(callback: (metadata: SessionMetadata) => void): void;
@@ -118,6 +128,29 @@ export declare class SessionIndex extends EventEmitter {
118
128
  * Append `kind: 'context'` transcript row (persisted, excluded from {@link loadMessages} / LLM).
119
129
  */
120
130
  appendTranscriptContextEntry(key: string, entry: Omit<XopcTranscriptContextEntry, 'kind'> & Partial<Pick<XopcTranscriptContextEntry, 'kind'>>): Promise<void>;
131
+ appendTranscriptLabelEntry(key: string, entry: {
132
+ targetId: string;
133
+ label?: string;
134
+ }): Promise<void>;
135
+ appendTranscriptCustomEntry(key: string, entry: {
136
+ customType: string;
137
+ data?: unknown;
138
+ }): Promise<void>;
139
+ appendTranscriptCustomMessageEntry(key: string, entry: {
140
+ customType: string;
141
+ content?: string | unknown[];
142
+ display?: boolean;
143
+ details?: unknown;
144
+ }): Promise<void>;
145
+ appendTranscriptBashExecutionEntry(key: string, entry: {
146
+ command: string;
147
+ output?: string;
148
+ exitCode?: number | null;
149
+ signal?: string | null;
150
+ excludeFromContext?: boolean;
151
+ truncated?: boolean;
152
+ fullOutputPath?: string;
153
+ }): Promise<void>;
121
154
  /** Delete session data */
122
155
  delete(key: string): Promise<void>;
123
156
  /** Archive transcript and start a new session id for the same key. */
@@ -23,23 +23,12 @@ var SessionIndex = class extends EventEmitter$1 {
23
23
  async listSessions(query) {
24
24
  return this.store.list(query);
25
25
  }
26
- /**
27
- * List all subagent sessions.
28
- * Subagent sessions have keys starting with 'subagent:'.
29
- */
30
26
  async listSubagents(query = {}) {
31
- const subagentQuery = {
27
+ return this.store.list({
32
28
  ...query,
33
- search: query.search ? `subagent:${query.search}` : "subagent:"
34
- };
35
- const result = await this.store.list(subagentQuery);
36
- const subagentSessions = result.items.filter((s) => s.key.startsWith("subagent:"));
37
- return {
38
- ...result,
39
- items: subagentSessions,
40
- total: subagentSessions.length,
41
- hasMore: false
42
- };
29
+ sessionTypes: ["workflow-subagent"],
30
+ includeHidden: true
31
+ });
43
32
  }
44
33
  async getSession(key, options) {
45
34
  const session = await this.store.get(key, options);
@@ -151,6 +140,7 @@ var SessionIndex = class extends EventEmitter$1 {
151
140
  async searchSessions(query) {
152
141
  return (await this.store.list({
153
142
  search: query,
143
+ sessionTypes: ["chat"],
154
144
  limit: 100
155
145
  })).items;
156
146
  }
@@ -160,6 +150,24 @@ var SessionIndex = class extends EventEmitter$1 {
160
150
  async exportSession(key, format) {
161
151
  return this.store.exportSession(key, format);
162
152
  }
153
+ async importSessionExport(targetKey, jsonContent) {
154
+ const result = await this.store.importSessionExport(targetKey, jsonContent);
155
+ const metadata = await this.store.getMetadata(result.sessionKey);
156
+ if (metadata) this.emit("sessionCreated", metadata);
157
+ return result;
158
+ }
159
+ async forkSession(sourceKey, targetKey) {
160
+ const result = await this.store.forkSession(sourceKey, targetKey);
161
+ const metadata = await this.store.getMetadata(result.sessionKey);
162
+ if (metadata) this.emit("sessionCreated", metadata);
163
+ return result;
164
+ }
165
+ async forkSessionRows(sourceKey, targetKey, options = {}) {
166
+ const result = await this.store.forkSessionRows(sourceKey, targetKey, options);
167
+ const metadata = await this.store.getMetadata(result.sessionKey);
168
+ if (metadata) this.emit("sessionCreated", metadata);
169
+ return result;
170
+ }
163
171
  async getStats() {
164
172
  return this.store.getStats();
165
173
  }
@@ -220,6 +228,22 @@ var SessionIndex = class extends EventEmitter$1 {
220
228
  await this.store.appendTranscriptContextEntry(key, entry);
221
229
  this.emit("sessionUpdated", { key });
222
230
  }
231
+ async appendTranscriptLabelEntry(key, entry) {
232
+ await this.store.appendTranscriptLabelEntry(key, entry);
233
+ this.emit("sessionUpdated", { key });
234
+ }
235
+ async appendTranscriptCustomEntry(key, entry) {
236
+ await this.store.appendTranscriptCustomEntry(key, entry);
237
+ this.emit("sessionUpdated", { key });
238
+ }
239
+ async appendTranscriptCustomMessageEntry(key, entry) {
240
+ await this.store.appendTranscriptCustomMessageEntry(key, entry);
241
+ this.emit("sessionUpdated", { key });
242
+ }
243
+ async appendTranscriptBashExecutionEntry(key, entry) {
244
+ await this.store.appendTranscriptBashExecutionEntry(key, entry);
245
+ this.emit("sessionUpdated", { key });
246
+ }
223
247
  /** Delete session data */
224
248
  async delete(key) {
225
249
  await this.store.delete(key);
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","names":["EventEmitter"],"sources":["../../../src/session/manager.ts"],"sourcesContent":["// Session manager - high-level session management service\n\nimport EventEmitter from 'events';\nimport { createLogger } from '../utils/logger.js';\nimport { SessionStore } from './store.js';\nimport type {\n SessionMetadata,\n SessionDetail,\n SessionListQuery,\n PaginatedResult,\n GlobalSessionStats,\n ExportFormat,\n SessionStatus,\n} from './types.js';\nimport type { Message } from './types.js';\nimport type { CompactionConfig, CompactionResult } from '../agent/memory/compaction.js';\nimport type { XopcSessionTranscriptV1 } from './transcript-format.js';\nimport type { XopcTranscriptContextEntry } from './session-context-for-llm.js';\nimport { applySessionPatchToMetadata, type SessionPatchBody } from './patch-metadata.js';\nimport type { WindowConfig } from '../agent/memory/window.js';\nimport type { Config } from '../config/schema.js';\n\nconst log = createLogger('SessionIndex');\n\nexport interface SessionIndexConfig {\n config: Config;\n windowConfig?: Partial<WindowConfig>;\n compactionConfig?: Partial<CompactionConfig>;\n}\n\nexport class SessionIndex extends EventEmitter {\n private store: SessionStore;\n\n constructor(config: SessionIndexConfig) {\n super();\n this.store = new SessionStore(\n {\n config: config.config,\n },\n config.windowConfig,\n config.compactionConfig\n );\n }\n\n async initialize(): Promise<void> {\n await this.store.initialize();\n this.emit('ready');\n }\n\n /** Low-level store (e.g. cron resolving weixin delivery from session index). */\n getStore(): SessionStore {\n return this.store;\n }\n\n // ========== CRUD Operations ==========\n\n async listSessions(query?: SessionListQuery): Promise<PaginatedResult<SessionMetadata>> {\n return this.store.list(query);\n }\n\n /**\n * List all subagent sessions.\n * Subagent sessions have keys starting with 'subagent:'.\n */\n async listSubagents(query: SessionListQuery = {}): Promise<PaginatedResult<SessionMetadata>> {\n // Filter for subagent sessions only\n const subagentQuery: SessionListQuery = {\n ...query,\n search: query.search ? `subagent:${query.search}` : 'subagent:',\n };\n \n const result = await this.store.list(subagentQuery);\n \n // Additional filtering to ensure only subagent sessions\n const subagentSessions = result.items.filter((s) => s.key.startsWith('subagent:'));\n \n return {\n ...result,\n items: subagentSessions,\n total: subagentSessions.length,\n hasMore: false, // Simplified for now\n };\n }\n\n async getSession(\n key: string,\n options?: { includeTranscriptSummary?: boolean; includeTranscriptRows?: boolean },\n ): Promise<SessionDetail | null> {\n const session = await this.store.get(key, options);\n if (session) {\n this.emit('sessionAccessed', { key });\n }\n return session;\n }\n\n async getSessionMessagePage(\n key: string,\n options?: {\n offset?: number;\n limit?: number;\n before?: string;\n includeTranscriptSummary?: boolean;\n includeTranscriptRows?: boolean;\n },\n ): Promise<{\n session: SessionDetail;\n pagination: {\n total: number;\n limit: number;\n offset: number;\n hasMore: boolean;\n before?: string;\n nextBeforeCursor?: string;\n };\n } | null> {\n const result = await this.store.getMessagePage(key, options);\n if (result) {\n this.emit('sessionAccessed', { key });\n }\n return result;\n }\n\n /**\n * OpenClaw-style `sessions.patch`: partial metadata (name, tags, customData shallow merge).\n */\n async patchSession(\n key: string,\n patch: SessionPatchBody,\n ): Promise<{ ok: true } | { ok: false; error: string }> {\n const meta = await this.store.getMetadata(key);\n if (!meta) {\n return { ok: false, error: 'Session not found' };\n }\n const updates = applySessionPatchToMetadata(meta, patch);\n if (Object.keys(updates).length === 0) {\n return { ok: true };\n }\n await this.store.updateMetadata(key, updates);\n this.emit('sessionUpdated', { key });\n return { ok: true };\n }\n\n async getSessionMetadata(key: string): Promise<SessionMetadata | null> {\n return this.store.getMetadata(key);\n }\n\n async deleteSession(key: string): Promise<boolean> {\n const result = await this.store.delete(key);\n if (result) {\n this.emit('sessionDeleted', { key });\n }\n return result;\n }\n\n async deleteSessions(keys: string[]): Promise<{ success: string[]; failed: string[] }> {\n const result = await this.store.deleteMany(keys);\n for (const key of result.success) {\n this.emit('sessionDeleted', { key });\n }\n return result;\n }\n\n // ========== Metadata Updates ==========\n\n async renameSession(key: string, name: string): Promise<void> {\n const existing = await this.store.getMetadata(key);\n await this.store.updateMetadata(key, {\n name,\n customData: { ...(existing?.customData ?? {}), titleSource: 'user' },\n });\n this.emit('sessionUpdated', { key, name });\n }\n\n /** Partial metadata update (caller merges nested fields like `customData` when needed). */\n async updateSessionMetadata(key: string, updates: Partial<SessionMetadata>): Promise<void> {\n await this.store.updateMetadata(key, updates);\n this.emit('sessionUpdated', { key });\n }\n\n async tagSession(key: string, tags: string[]): Promise<void> {\n const existing = await this.store.getMetadata(key);\n if (!existing) {\n throw new Error(`Session not found: ${key}`);\n }\n\n // Merge tags, remove duplicates\n const mergedTags = [...new Set([...existing.tags, ...tags])];\n await this.store.updateMetadata(key, { tags: mergedTags });\n this.emit('sessionUpdated', { key, tags: mergedTags });\n }\n\n async untagSession(key: string, tags: string[]): Promise<void> {\n const existing = await this.store.getMetadata(key);\n if (!existing) {\n throw new Error(`Session not found: ${key}`);\n }\n\n const filteredTags = existing.tags.filter((t) => !tags.includes(t));\n await this.store.updateMetadata(key, { tags: filteredTags });\n this.emit('sessionUpdated', { key, tags: filteredTags });\n }\n\n async setSessionTags(key: string, tags: string[]): Promise<void> {\n await this.store.updateMetadata(key, { tags: [...new Set(tags)] });\n this.emit('sessionUpdated', { key, tags });\n }\n\n // ========== Status Management ==========\n\n async archiveSession(key: string): Promise<void> {\n await this.store.archive(key);\n this.emit('sessionArchived', { key });\n }\n\n async unarchiveSession(key: string): Promise<void> {\n await this.store.unarchive(key);\n this.emit('sessionRestored', { key });\n }\n\n async pinSession(key: string): Promise<void> {\n await this.store.pin(key);\n this.emit('sessionPinned', { key });\n }\n\n async unpinSession(key: string): Promise<void> {\n await this.store.unpin(key);\n this.emit('sessionUnpinned', { key });\n }\n\n async setSessionStatus(key: string, status: SessionStatus): Promise<void> {\n await this.store.setStatus(key, status);\n this.emit('sessionStatusChanged', { key, status });\n }\n\n // ========== Search ==========\n\n async searchSessions(query: string): Promise<SessionMetadata[]> {\n const result = await this.store.list({ search: query, limit: 100 });\n return result.items;\n }\n\n async searchInSession(key: string, keyword: string): Promise<Message[]> {\n return this.store.searchInSession(key, keyword);\n }\n\n // ========== Export/Import ==========\n\n async exportSession(key: string, format: ExportFormat): Promise<string> {\n return this.store.exportSession(key, format);\n }\n\n // ========== Statistics ==========\n\n async getStats(): Promise<GlobalSessionStats> {\n return this.store.getStats();\n }\n\n // ========== Maintenance ==========\n\n async archiveOldSessions(olderThanDays: number): Promise<number> {\n const count = await this.store.archiveOld(olderThanDays);\n log.info({ count, olderThanDays }, 'Archived old sessions');\n return count;\n }\n\n // ========== Event Helpers ==========\n\n onSessionCreated(callback: (metadata: SessionMetadata) => void): void {\n this.on('sessionCreated', callback);\n }\n\n onSessionUpdated(callback: (data: { key: string; name?: string; tags?: string[] }) => void): void {\n this.on('sessionUpdated', callback);\n }\n\n onSessionDeleted(callback: (data: { key: string }) => void): void {\n this.on('sessionDeleted', callback);\n }\n\n onSessionArchived(callback: (data: { key: string }) => void): void {\n this.on('sessionArchived', callback);\n }\n\n onSessionRestored(callback: (data: { key: string }) => void): void {\n this.on('sessionRestored', callback);\n }\n\n onSessionPinned(callback: (data: { key: string }) => void): void {\n this.on('sessionPinned', callback);\n }\n\n onSessionUnpinned(callback: (data: { key: string }) => void): void {\n this.on('sessionUnpinned', callback);\n }\n\n onSessionStatusChanged(callback: (data: { key: string; status: SessionStatus }) => void): void {\n this.on('sessionStatusChanged', callback);\n }\n\n onSessionAccessed(callback: (data: { key: string }) => void): void {\n this.on('sessionAccessed', callback);\n }\n\n // ========== Store delegation (messages, compaction) ==========\n\n /** Load messages for a session key */\n async loadMessages(key: string) {\n return this.store.loadMessages(key);\n }\n\n /** Wrapped transcript document (stable id, compaction history); null if missing or not a valid envelope. */\n async loadTranscriptDocument(key: string): Promise<XopcSessionTranscriptV1 | null> {\n return this.store.loadTranscriptDocument(key);\n }\n\n /**\n * Runtime turns must use PiTranscriptManager.appendMessage; this entry point\n * is reserved for compaction, tests, and admin tools.\n */\n async saveMessages(key: string, messages: any[]) {\n return this.store.saveMessages(key, messages);\n }\n\n /**\n * Append `kind: 'context'` transcript row (persisted, excluded from {@link loadMessages} / LLM).\n */\n async appendTranscriptContextEntry(\n key: string,\n entry: Omit<XopcTranscriptContextEntry, 'kind'> & Partial<Pick<XopcTranscriptContextEntry, 'kind'>>,\n ): Promise<void> {\n await this.store.appendTranscriptContextEntry(key, entry);\n this.emit('sessionUpdated', { key });\n }\n\n /** Delete session data */\n async delete(key: string): Promise<void> {\n await this.store.delete(key);\n }\n\n /** Archive transcript and start a new session id for the same key. */\n async resetSession(\n key: string,\n ): Promise<{ sessionId: string; previousSessionId: string } | null> {\n const result = await this.store.reset(key);\n if (result) {\n this.emit('sessionUpdated', { key });\n }\n return result;\n }\n\n /** Token/window stats for a message list */\n getWindowStats(messages: any[]) {\n return this.store.getWindowStats(messages);\n }\n\n /** Prepare compaction run */\n prepareCompaction(key: string, messages: any[], contextWindow: number) {\n return this.store.prepareCompaction(key, messages, contextWindow);\n }\n\n /** Compact session messages */\n compact(\n key: string,\n messages: any[],\n contextWindow: number,\n instructions?: string,\n force?: boolean,\n ): Promise<CompactionResult> {\n return this.store.compact(key, messages, contextWindow, instructions, force);\n }\n\n /** Compaction stats for a session */\n async getCompactionStats(key: string) {\n return this.store.getCompactionStats(key);\n }\n\n /** List pre-compaction transcript snapshots (newest first). */\n listCompactionCheckpoints(key: string) {\n return this.store.listCompactionCheckpoints(key);\n }\n\n getCompactionCheckpointDetail(key: string, checkpointId: string) {\n return this.store.getCompactionCheckpointDetail(key, checkpointId);\n }\n\n restoreCompactionCheckpoint(key: string, checkpointId: string) {\n return this.store.restoreCompactionCheckpoint(key, checkpointId);\n }\n\n /** Estimate token usage for messages */\n async estimateTokenUsage(key: string, messages: any[]): Promise<number> {\n return this.store.estimateTokens(messages);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","names":["EventEmitter"],"sources":["../../../src/session/manager.ts"],"sourcesContent":["// Session manager - high-level session management service\n\nimport EventEmitter from 'events';\nimport { createLogger } from '../utils/logger.js';\nimport { SessionStore } from './store.js';\nimport type {\n SessionMetadata,\n SessionDetail,\n SessionListQuery,\n PaginatedResult,\n GlobalSessionStats,\n ExportFormat,\n SessionStatus,\n} from './types.js';\nimport type { Message } from './types.js';\nimport type { CompactionConfig, CompactionResult } from '../agent/memory/compaction.js';\nimport type { XopcSessionTranscriptV1 } from './transcript-format.js';\nimport type { XopcTranscriptContextEntry } from './session-context-for-llm.js';\nimport { applySessionPatchToMetadata, type SessionPatchBody } from './patch-metadata.js';\nimport type { WindowConfig } from '../agent/memory/window.js';\nimport type { Config } from '../config/schema.js';\n\nconst log = createLogger('SessionIndex');\n\nexport interface SessionIndexConfig {\n config: Config;\n windowConfig?: Partial<WindowConfig>;\n compactionConfig?: Partial<CompactionConfig>;\n}\n\nexport class SessionIndex extends EventEmitter {\n private store: SessionStore;\n\n constructor(config: SessionIndexConfig) {\n super();\n this.store = new SessionStore(\n {\n config: config.config,\n },\n config.windowConfig,\n config.compactionConfig\n );\n }\n\n async initialize(): Promise<void> {\n await this.store.initialize();\n this.emit('ready');\n }\n\n /** Low-level store (e.g. cron resolving weixin delivery from session index). */\n getStore(): SessionStore {\n return this.store;\n }\n\n // ========== CRUD Operations ==========\n\n async listSessions(query?: SessionListQuery): Promise<PaginatedResult<SessionMetadata>> {\n return this.store.list(query);\n }\n\n async listSubagents(query: SessionListQuery = {}): Promise<PaginatedResult<SessionMetadata>> {\n return this.store.list({\n ...query,\n sessionTypes: ['workflow-subagent'],\n includeHidden: true,\n });\n }\n\n async getSession(\n key: string,\n options?: { includeTranscriptSummary?: boolean; includeTranscriptRows?: boolean },\n ): Promise<SessionDetail | null> {\n const session = await this.store.get(key, options);\n if (session) {\n this.emit('sessionAccessed', { key });\n }\n return session;\n }\n\n async getSessionMessagePage(\n key: string,\n options?: {\n offset?: number;\n limit?: number;\n before?: string;\n includeTranscriptSummary?: boolean;\n includeTranscriptRows?: boolean;\n },\n ): Promise<{\n session: SessionDetail;\n pagination: {\n total: number;\n limit: number;\n offset: number;\n hasMore: boolean;\n before?: string;\n nextBeforeCursor?: string;\n };\n } | null> {\n const result = await this.store.getMessagePage(key, options);\n if (result) {\n this.emit('sessionAccessed', { key });\n }\n return result;\n }\n\n /**\n * OpenClaw-style `sessions.patch`: partial metadata (name, tags, customData shallow merge).\n */\n async patchSession(\n key: string,\n patch: SessionPatchBody,\n ): Promise<{ ok: true } | { ok: false; error: string }> {\n const meta = await this.store.getMetadata(key);\n if (!meta) {\n return { ok: false, error: 'Session not found' };\n }\n const updates = applySessionPatchToMetadata(meta, patch);\n if (Object.keys(updates).length === 0) {\n return { ok: true };\n }\n await this.store.updateMetadata(key, updates);\n this.emit('sessionUpdated', { key });\n return { ok: true };\n }\n\n async getSessionMetadata(key: string): Promise<SessionMetadata | null> {\n return this.store.getMetadata(key);\n }\n\n async deleteSession(key: string): Promise<boolean> {\n const result = await this.store.delete(key);\n if (result) {\n this.emit('sessionDeleted', { key });\n }\n return result;\n }\n\n async deleteSessions(keys: string[]): Promise<{ success: string[]; failed: string[] }> {\n const result = await this.store.deleteMany(keys);\n for (const key of result.success) {\n this.emit('sessionDeleted', { key });\n }\n return result;\n }\n\n // ========== Metadata Updates ==========\n\n async renameSession(key: string, name: string): Promise<void> {\n const existing = await this.store.getMetadata(key);\n await this.store.updateMetadata(key, {\n name,\n customData: { ...(existing?.customData ?? {}), titleSource: 'user' },\n });\n this.emit('sessionUpdated', { key, name });\n }\n\n /** Partial metadata update (caller merges nested fields like `customData` when needed). */\n async updateSessionMetadata(key: string, updates: Partial<SessionMetadata>): Promise<void> {\n await this.store.updateMetadata(key, updates);\n this.emit('sessionUpdated', { key });\n }\n\n async tagSession(key: string, tags: string[]): Promise<void> {\n const existing = await this.store.getMetadata(key);\n if (!existing) {\n throw new Error(`Session not found: ${key}`);\n }\n\n // Merge tags, remove duplicates\n const mergedTags = [...new Set([...existing.tags, ...tags])];\n await this.store.updateMetadata(key, { tags: mergedTags });\n this.emit('sessionUpdated', { key, tags: mergedTags });\n }\n\n async untagSession(key: string, tags: string[]): Promise<void> {\n const existing = await this.store.getMetadata(key);\n if (!existing) {\n throw new Error(`Session not found: ${key}`);\n }\n\n const filteredTags = existing.tags.filter((t) => !tags.includes(t));\n await this.store.updateMetadata(key, { tags: filteredTags });\n this.emit('sessionUpdated', { key, tags: filteredTags });\n }\n\n async setSessionTags(key: string, tags: string[]): Promise<void> {\n await this.store.updateMetadata(key, { tags: [...new Set(tags)] });\n this.emit('sessionUpdated', { key, tags });\n }\n\n // ========== Status Management ==========\n\n async archiveSession(key: string): Promise<void> {\n await this.store.archive(key);\n this.emit('sessionArchived', { key });\n }\n\n async unarchiveSession(key: string): Promise<void> {\n await this.store.unarchive(key);\n this.emit('sessionRestored', { key });\n }\n\n async pinSession(key: string): Promise<void> {\n await this.store.pin(key);\n this.emit('sessionPinned', { key });\n }\n\n async unpinSession(key: string): Promise<void> {\n await this.store.unpin(key);\n this.emit('sessionUnpinned', { key });\n }\n\n async setSessionStatus(key: string, status: SessionStatus): Promise<void> {\n await this.store.setStatus(key, status);\n this.emit('sessionStatusChanged', { key, status });\n }\n\n // ========== Search ==========\n\n async searchSessions(query: string): Promise<SessionMetadata[]> {\n const result = await this.store.list({ search: query, sessionTypes: ['chat'], limit: 100 });\n return result.items;\n }\n\n async searchInSession(key: string, keyword: string): Promise<Message[]> {\n return this.store.searchInSession(key, keyword);\n }\n\n // ========== Export/Import ==========\n\n async exportSession(key: string, format: ExportFormat): Promise<string> {\n return this.store.exportSession(key, format);\n }\n\n async importSessionExport(\n targetKey: string,\n jsonContent: string,\n ): Promise<{ sessionKey: string; rowCount: number }> {\n const result = await this.store.importSessionExport(targetKey, jsonContent);\n const metadata = await this.store.getMetadata(result.sessionKey);\n if (metadata) {\n this.emit('sessionCreated', metadata);\n }\n return result;\n }\n\n async forkSession(\n sourceKey: string,\n targetKey: string,\n ): Promise<{ sessionKey: string; rowCount: number }> {\n const result = await this.store.forkSession(sourceKey, targetKey);\n const metadata = await this.store.getMetadata(result.sessionKey);\n if (metadata) {\n this.emit('sessionCreated', metadata);\n }\n return result;\n }\n\n async forkSessionRows(\n sourceKey: string,\n targetKey: string,\n options: { throughRow?: number } = {},\n ): Promise<{ sessionKey: string; rowCount: number }> {\n const result = await this.store.forkSessionRows(sourceKey, targetKey, options);\n const metadata = await this.store.getMetadata(result.sessionKey);\n if (metadata) {\n this.emit('sessionCreated', metadata);\n }\n return result;\n }\n\n // ========== Statistics ==========\n\n async getStats(): Promise<GlobalSessionStats> {\n return this.store.getStats();\n }\n\n // ========== Maintenance ==========\n\n async archiveOldSessions(olderThanDays: number): Promise<number> {\n const count = await this.store.archiveOld(olderThanDays);\n log.info({ count, olderThanDays }, 'Archived old sessions');\n return count;\n }\n\n // ========== Event Helpers ==========\n\n onSessionCreated(callback: (metadata: SessionMetadata) => void): void {\n this.on('sessionCreated', callback);\n }\n\n onSessionUpdated(callback: (data: { key: string; name?: string; tags?: string[] }) => void): void {\n this.on('sessionUpdated', callback);\n }\n\n onSessionDeleted(callback: (data: { key: string }) => void): void {\n this.on('sessionDeleted', callback);\n }\n\n onSessionArchived(callback: (data: { key: string }) => void): void {\n this.on('sessionArchived', callback);\n }\n\n onSessionRestored(callback: (data: { key: string }) => void): void {\n this.on('sessionRestored', callback);\n }\n\n onSessionPinned(callback: (data: { key: string }) => void): void {\n this.on('sessionPinned', callback);\n }\n\n onSessionUnpinned(callback: (data: { key: string }) => void): void {\n this.on('sessionUnpinned', callback);\n }\n\n onSessionStatusChanged(callback: (data: { key: string; status: SessionStatus }) => void): void {\n this.on('sessionStatusChanged', callback);\n }\n\n onSessionAccessed(callback: (data: { key: string }) => void): void {\n this.on('sessionAccessed', callback);\n }\n\n // ========== Store delegation (messages, compaction) ==========\n\n /** Load messages for a session key */\n async loadMessages(key: string) {\n return this.store.loadMessages(key);\n }\n\n /** Wrapped transcript document (stable id, compaction history); null if missing or not a valid envelope. */\n async loadTranscriptDocument(key: string): Promise<XopcSessionTranscriptV1 | null> {\n return this.store.loadTranscriptDocument(key);\n }\n\n /**\n * Runtime turns must use PiTranscriptManager.appendMessage; this entry point\n * is reserved for compaction, tests, and admin tools.\n */\n async saveMessages(key: string, messages: any[]) {\n return this.store.saveMessages(key, messages);\n }\n\n /**\n * Append `kind: 'context'` transcript row (persisted, excluded from {@link loadMessages} / LLM).\n */\n async appendTranscriptContextEntry(\n key: string,\n entry: Omit<XopcTranscriptContextEntry, 'kind'> & Partial<Pick<XopcTranscriptContextEntry, 'kind'>>,\n ): Promise<void> {\n await this.store.appendTranscriptContextEntry(key, entry);\n this.emit('sessionUpdated', { key });\n }\n\n async appendTranscriptLabelEntry(\n key: string,\n entry: { targetId: string; label?: string },\n ): Promise<void> {\n await this.store.appendTranscriptLabelEntry(key, entry);\n this.emit('sessionUpdated', { key });\n }\n\n async appendTranscriptCustomEntry(\n key: string,\n entry: { customType: string; data?: unknown },\n ): Promise<void> {\n await this.store.appendTranscriptCustomEntry(key, entry);\n this.emit('sessionUpdated', { key });\n }\n\n async appendTranscriptCustomMessageEntry(\n key: string,\n entry: {\n customType: string;\n content?: string | unknown[];\n display?: boolean;\n details?: unknown;\n },\n ): Promise<void> {\n await this.store.appendTranscriptCustomMessageEntry(key, entry);\n this.emit('sessionUpdated', { key });\n }\n\n async appendTranscriptBashExecutionEntry(\n key: string,\n entry: {\n command: string;\n output?: string;\n exitCode?: number | null;\n signal?: string | null;\n excludeFromContext?: boolean;\n truncated?: boolean;\n fullOutputPath?: string;\n },\n ): Promise<void> {\n await this.store.appendTranscriptBashExecutionEntry(key, entry);\n this.emit('sessionUpdated', { key });\n }\n\n /** Delete session data */\n async delete(key: string): Promise<void> {\n await this.store.delete(key);\n }\n\n /** Archive transcript and start a new session id for the same key. */\n async resetSession(\n key: string,\n ): Promise<{ sessionId: string; previousSessionId: string } | null> {\n const result = await this.store.reset(key);\n if (result) {\n this.emit('sessionUpdated', { key });\n }\n return result;\n }\n\n /** Token/window stats for a message list */\n getWindowStats(messages: any[]) {\n return this.store.getWindowStats(messages);\n }\n\n /** Prepare compaction run */\n prepareCompaction(key: string, messages: any[], contextWindow: number) {\n return this.store.prepareCompaction(key, messages, contextWindow);\n }\n\n /** Compact session messages */\n compact(\n key: string,\n messages: any[],\n contextWindow: number,\n instructions?: string,\n force?: boolean,\n ): Promise<CompactionResult> {\n return this.store.compact(key, messages, contextWindow, instructions, force);\n }\n\n /** Compaction stats for a session */\n async getCompactionStats(key: string) {\n return this.store.getCompactionStats(key);\n }\n\n /** List pre-compaction transcript snapshots (newest first). */\n listCompactionCheckpoints(key: string) {\n return this.store.listCompactionCheckpoints(key);\n }\n\n getCompactionCheckpointDetail(key: string, checkpointId: string) {\n return this.store.getCompactionCheckpointDetail(key, checkpointId);\n }\n\n restoreCompactionCheckpoint(key: string, checkpointId: string) {\n return this.store.restoreCompactionCheckpoint(key, checkpointId);\n }\n\n /** Estimate token usage for messages */\n async estimateTokenUsage(key: string, messages: any[]): Promise<number> {\n return this.store.estimateTokens(messages);\n }\n}\n"],"mappings":"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"}