@xopcai/xopc 0.0.103 → 0.0.104

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 (930) 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-CvsBrBfi.js +396 -0
  53. package/dist/gateway/static/root/assets/{apps-page-C5RmwmTT.js → apps-page-L-IwQTe0.js} +1 -1
  54. package/dist/gateway/static/root/assets/browser-BLJWD7WI.js +8 -0
  55. package/dist/gateway/static/root/assets/channels-settings-D95KuPeP.js +1 -0
  56. package/dist/gateway/static/root/assets/cron-page-CfkWXDAI.js +1 -0
  57. package/dist/gateway/static/root/assets/{dist-CWm8hTXZ.js → dist-C6vclgEL.js} +1 -1
  58. package/dist/gateway/static/root/assets/{extension-debug-page-BzYgTkS9.js → extension-debug-page-D4JYAbsX.js} +1 -1
  59. package/dist/gateway/static/root/assets/{extension-page-BmTZH6gL.js → extension-page-_T62gi6e.js} +1 -1
  60. package/dist/gateway/static/root/assets/extension-settings-page-CkJbjyM-.js +1 -0
  61. package/dist/gateway/static/root/assets/{fetch-CMoWY2Si.js → fetch-B5aiIguv.js} +1 -1
  62. package/dist/gateway/static/root/assets/gateway-startup-retry-DqmLXhs6.js +1 -0
  63. package/dist/gateway/static/root/assets/heartbeat-config-api-HwJV1K_Y.js +1 -0
  64. package/dist/gateway/static/root/assets/index-BPYKW7FB.css +1 -0
  65. package/dist/gateway/static/root/assets/index-DvTb6wNR.js +4845 -0
  66. package/dist/gateway/static/root/assets/{logs-page-BjdQjHwk.js → logs-page-DsjtTjBy.js} +2 -2
  67. package/dist/gateway/static/root/assets/{note-detail-page-8Er4197b.js → note-detail-page-B2V7RhgD.js} +43 -43
  68. package/dist/gateway/static/root/assets/{note-time-CF3vf1jm.js → note-time-BG8GCTr4.js} +1 -1
  69. package/dist/gateway/static/root/assets/notes-page-xrcVBQ6Z.js +1 -0
  70. package/dist/gateway/static/root/assets/schema-form-S-QUvhul.js +1 -0
  71. package/dist/gateway/static/root/assets/sessions-page-CrQer6Au.js +1 -0
  72. package/dist/gateway/static/root/assets/settings-advanced-gate-DujQl9c7.js +2 -0
  73. package/dist/gateway/static/root/assets/{settings-form-section-C7qA7y0J.js → settings-form-section-r1V7dRV6.js} +1 -1
  74. package/dist/gateway/static/root/assets/settings-page-C9nrONQ2.js +3 -0
  75. package/dist/gateway/static/root/assets/{share-preview-page-Tvr5Mtq5.js → share-preview-page-DOFy0FNt.js} +1 -1
  76. package/dist/gateway/static/root/assets/skills-page-DmTsrs_a.js +2 -0
  77. package/dist/gateway/static/root/assets/{theme-store-HTvJlFLL.js → theme-store-Bo3j5Ovv.js} +1 -1
  78. package/dist/gateway/static/root/assets/url-WgQIjFZu.js +3 -0
  79. package/dist/gateway/static/root/assets/voice-api-key-field-AjmUAlEQ.js +1 -0
  80. package/dist/gateway/static/root/assets/{workflow-page.utils-CeBkAjP7.js → workflow-page.utils-DLEJ92gK.js} +1 -1
  81. package/dist/gateway/static/root/assets/workflows-page-BnjjKrM1.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-seed.js +1 -1
  94. package/dist/src/agent/context/workspace-templates/AGENTS.md +23 -184
  95. package/dist/src/agent/embedded/run-turn.js +8 -2
  96. package/dist/src/agent/embedded/run-turn.js.map +1 -1
  97. package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
  98. package/dist/src/agent/embedded/subscribe-session.js +33 -51
  99. package/dist/src/agent/embedded/subscribe-session.js.map +1 -1
  100. package/dist/src/agent/embedded/types.d.ts +36 -35
  101. package/dist/src/agent/fallback/candidates.js +1 -1
  102. package/dist/src/agent/fallback/candidates.js.map +1 -1
  103. package/dist/src/agent/inbound/inbound-loop.js +1 -1
  104. package/dist/src/agent/inbound/turn-dispatcher.d.ts +1 -0
  105. package/dist/src/agent/inbound/turn-dispatcher.js +24 -5
  106. package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
  107. package/dist/src/agent/models/manager.d.ts +1 -1
  108. package/dist/src/agent/models/manager.js +1 -1
  109. package/dist/src/agent/models/manager.js.map +1 -1
  110. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +1 -1
  111. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
  112. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
  113. package/dist/src/agent/prompt/sections/tooling.js +4 -0
  114. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  115. package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -0
  116. package/dist/src/agent/service/direct-turn-helpers.js +1 -1
  117. package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
  118. package/dist/src/agent/service/process-direct-streaming.d.ts +1 -0
  119. package/dist/src/agent/service/process-direct-streaming.js +35 -18
  120. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  121. package/dist/src/agent/service-inbound-utils.d.ts +0 -1
  122. package/dist/src/agent/service-inbound-utils.js +1 -17
  123. package/dist/src/agent/service-inbound-utils.js.map +1 -1
  124. package/dist/src/agent/service.d.ts +4 -4
  125. package/dist/src/agent/service.js +27 -15
  126. package/dist/src/agent/service.js.map +1 -1
  127. package/dist/src/agent/session/session-config-service.d.ts +1 -0
  128. package/dist/src/agent/session/session-config-service.js +9 -1
  129. package/dist/src/agent/session/session-config-service.js.map +1 -1
  130. package/dist/src/agent/session/session-inspector.d.ts +2 -1
  131. package/dist/src/agent/session/session-inspector.js +4 -0
  132. package/dist/src/agent/session/session-inspector.js.map +1 -1
  133. package/dist/src/agent/skills/config.js +1 -3
  134. package/dist/src/agent/skills/config.js.map +1 -1
  135. package/dist/src/agent/skills/format-skills-prompt.d.ts +1 -0
  136. package/dist/src/agent/skills/format-skills-prompt.js +3 -2
  137. package/dist/src/agent/skills/format-skills-prompt.js.map +1 -1
  138. package/dist/src/agent/skills/hub-pull.js +1 -1
  139. package/dist/src/agent/skills/index.js +20 -5
  140. package/dist/src/agent/skills/index.js.map +1 -1
  141. package/dist/src/agent/skills/installer.js +14 -27
  142. package/dist/src/agent/skills/installer.js.map +1 -1
  143. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +11 -1
  144. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +1 -1
  145. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +18 -4
  146. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -1
  147. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +11 -2
  148. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +1 -1
  149. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +2 -2
  150. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +1 -1
  151. package/dist/src/agent/skills/skill-manager.d.ts +4 -1
  152. package/dist/src/agent/skills/skill-manager.js +3 -3
  153. package/dist/src/agent/skills/skill-manager.js.map +1 -1
  154. package/dist/src/agent/skills/skill-view-path.d.ts +1 -17
  155. package/dist/src/agent/skills/skill-view-path.js +3 -66
  156. package/dist/src/agent/skills/skill-view-path.js.map +1 -1
  157. package/dist/src/agent/skills/test-framework.js +2 -3
  158. package/dist/src/agent/skills/test-framework.js.map +1 -1
  159. package/dist/src/agent/streaming/reasoning-visibility-sse.js +1 -0
  160. package/dist/src/agent/streaming/reasoning-visibility-sse.js.map +1 -1
  161. package/dist/src/agent/tool-manuals/browser.d.ts +1 -0
  162. package/{skills/browser/SKILL.md → dist/src/agent/tool-manuals/browser.js} +51 -54
  163. package/dist/src/agent/tool-manuals/browser.js.map +1 -0
  164. package/dist/src/agent/tool-manuals/index.d.ts +10 -0
  165. package/dist/src/agent/tool-manuals/index.js +28 -0
  166. package/dist/src/agent/tool-manuals/index.js.map +1 -0
  167. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
  168. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
  169. package/dist/src/agent/tools/factory.js +7 -5
  170. package/dist/src/agent/tools/factory.js.map +1 -1
  171. package/dist/src/agent/tools/index.d.ts +1 -0
  172. package/dist/src/agent/tools/index.js +5 -4
  173. package/dist/src/agent/tools/session-search-tool.js +1 -1
  174. package/dist/src/agent/tools/shell.js +1 -1
  175. package/dist/src/agent/tools/skills-tools.js +37 -8
  176. package/dist/src/agent/tools/skills-tools.js.map +1 -1
  177. package/dist/src/agent/tools/tool-manual-tool.d.ts +6 -0
  178. package/dist/src/agent/tools/tool-manual-tool.js +34 -0
  179. package/dist/src/agent/tools/tool-manual-tool.js.map +1 -0
  180. package/dist/src/agent/tools/web-extract.js +2 -2
  181. package/dist/src/agent/tools/web.js +1 -1
  182. package/dist/src/agent/workflow/catalog.d.ts +7 -2
  183. package/dist/src/agent/workflow/catalog.js +66 -25
  184. package/dist/src/agent/workflow/catalog.js.map +1 -1
  185. package/dist/src/agent/workflow/subagent-runner.d.ts +3 -0
  186. package/dist/src/agent/workflow/subagent-runner.js +50 -4
  187. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  188. package/dist/src/agent/workflow/types.d.ts +10 -0
  189. package/dist/src/auth/credentials.js +10 -5
  190. package/dist/src/auth/credentials.js.map +1 -1
  191. package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
  192. package/dist/src/browser/actions/registry.js +2 -2
  193. package/dist/src/browser/cdp-local-launcher.js +1 -1
  194. package/dist/src/browser/index.js +3 -3
  195. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  196. package/dist/src/browser/providers/cloakbrowser.js +1 -1
  197. package/dist/src/channels/catalog/channel-catalog-service.d.ts +11 -0
  198. package/dist/src/channels/catalog/channel-catalog-service.js +168 -0
  199. package/dist/src/channels/catalog/channel-catalog-service.js.map +1 -0
  200. package/dist/src/channels/catalog/channel-catalog-types.d.ts +22 -0
  201. package/dist/src/channels/catalog/channel-catalog-types.js +1 -0
  202. package/dist/src/channels/dock.d.ts +0 -7
  203. package/dist/src/channels/dock.js +1 -21
  204. package/dist/src/channels/index.d.ts +1 -3
  205. package/dist/src/channels/index.js +1 -5
  206. package/dist/src/channels/lifecycle-supervisor.d.ts +1 -0
  207. package/dist/src/channels/lifecycle-supervisor.js +11 -0
  208. package/dist/src/channels/lifecycle-supervisor.js.map +1 -1
  209. package/dist/src/channels/manager.d.ts +1 -0
  210. package/dist/src/channels/manager.js +3 -0
  211. package/dist/src/channels/manager.js.map +1 -1
  212. package/dist/src/channels/pairing/pairing-channel.d.ts +2 -3
  213. package/dist/src/channels/pairing/pairing-messages.js +1 -1
  214. package/dist/src/channels/pairing/pairing-messages.js.map +1 -1
  215. package/dist/src/channels/pairing/pairing-service.d.ts +1 -1
  216. package/dist/src/channels/pairing/pairing-service.js +8 -27
  217. package/dist/src/channels/pairing/pairing-service.js.map +1 -1
  218. package/dist/src/channels/plugin-types.d.ts +3 -1
  219. package/dist/src/channels/plugins/types.adapters.d.ts +55 -2
  220. package/dist/src/channels/telegram/index.js +1 -1
  221. package/dist/src/chat-commands/builtins/config.js +4 -4
  222. package/dist/src/chat-commands/builtins/config.js.map +1 -1
  223. package/dist/src/chat-commands/config-paths.js +1 -1
  224. package/dist/src/chat-commands/config-paths.js.map +1 -1
  225. package/dist/src/chat-commands/context.js +1 -1
  226. package/dist/src/chat-commands/context.js.map +1 -1
  227. package/dist/src/cli/bin.js +1 -1
  228. package/dist/src/cli/command-manifest.js +1 -1
  229. package/dist/src/cli/command-manifest.js.map +1 -1
  230. package/dist/src/cli/commands/agent.js +2 -2
  231. package/dist/src/cli/commands/agent.js.map +1 -1
  232. package/dist/src/cli/commands/agents.js +2 -4
  233. package/dist/src/cli/commands/agents.js.map +1 -1
  234. package/dist/src/cli/commands/auth.js +1 -1
  235. package/dist/src/cli/commands/browser-cli-helpers.js +1 -1
  236. package/dist/src/cli/commands/channels.d.ts +1 -5
  237. package/dist/src/cli/commands/channels.js +115 -281
  238. package/dist/src/cli/commands/channels.js.map +1 -1
  239. package/dist/src/cli/commands/config.js +2 -2
  240. package/dist/src/cli/commands/config.js.map +1 -1
  241. package/dist/src/cli/commands/doctor/checks/channel-config.js +16 -69
  242. package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -1
  243. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +6 -4
  244. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js.map +1 -1
  245. package/dist/src/cli/commands/doctor/checks/channel-plugins.js +2 -2
  246. package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +1 -1
  247. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  248. package/dist/src/cli/commands/doctor/checks/provider-auth.js +13 -9
  249. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
  250. package/dist/src/cli/commands/extension-dev.js +2 -1
  251. package/dist/src/cli/commands/extension-dev.js.map +1 -1
  252. package/dist/src/cli/commands/extension-marketplace.js +2 -1
  253. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  254. package/dist/src/cli/commands/extension-pack.js +2 -1
  255. package/dist/src/cli/commands/extension-pack.js.map +1 -1
  256. package/dist/src/cli/commands/models.js +7 -4
  257. package/dist/src/cli/commands/models.js.map +1 -1
  258. package/dist/src/cli/commands/onboard/channels/index.js +1 -1
  259. package/dist/src/cli/commands/onboard/channels/index.js.map +1 -1
  260. package/dist/src/cli/commands/onboard/channels/registry.d.ts +2 -1
  261. package/dist/src/cli/commands/onboard/channels/registry.js +32 -8
  262. package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
  263. package/dist/src/cli/commands/onboard/model.js +8 -5
  264. package/dist/src/cli/commands/onboard/model.js.map +1 -1
  265. package/dist/src/cli/commands/onboard.js +4 -6
  266. package/dist/src/cli/commands/onboard.js.map +1 -1
  267. package/dist/src/cli/commands/setup-shared/runner.d.ts +1 -1
  268. package/dist/src/cli/commands/setup-shared/runner.js.map +1 -1
  269. package/dist/src/cli/commands/setup-shared/types.d.ts +1 -1
  270. package/dist/src/cli/commands/setup-shared/types.js.map +1 -1
  271. package/dist/src/cli/commands/tui.js +13 -5
  272. package/dist/src/cli/commands/tui.js.map +1 -1
  273. package/dist/src/cli/extension-cli-register.js +1 -1
  274. package/dist/src/commands/agents.config.d.ts +3 -3
  275. package/dist/src/commands/agents.config.js +7 -7
  276. package/dist/src/commands/agents.config.js.map +1 -1
  277. package/dist/src/config/agent-profile.d.ts +1 -1
  278. package/dist/src/config/agent-profile.js +6 -2
  279. package/dist/src/config/agent-profile.js.map +1 -1
  280. package/dist/src/config/agent-typed-models.d.ts +2 -2
  281. package/dist/src/config/agent-typed-models.js +13 -2
  282. package/dist/src/config/agent-typed-models.js.map +1 -1
  283. package/dist/src/config/index.js +3 -3
  284. package/dist/src/config/integration.d.ts +1 -1
  285. package/dist/src/config/loader.d.ts +0 -1
  286. package/dist/src/config/loader.js +4 -9
  287. package/dist/src/config/loader.js.map +1 -1
  288. package/dist/src/config/models-json.d.ts +6 -6
  289. package/dist/src/config/rules.js +2 -12
  290. package/dist/src/config/rules.js.map +1 -1
  291. package/dist/src/config/schema.d.ts +74 -47
  292. package/dist/src/config/schema.js +28 -66
  293. package/dist/src/config/schema.js.map +1 -1
  294. package/dist/src/config/validate-channel-configs.d.ts +0 -3
  295. package/dist/src/config/validate-channel-configs.js +29 -10
  296. package/dist/src/config/validate-channel-configs.js.map +1 -1
  297. package/dist/src/cron/executor.js +1 -4
  298. package/dist/src/cron/executor.js.map +1 -1
  299. package/dist/src/extensions/activation-context.js +3 -1
  300. package/dist/src/extensions/activation-context.js.map +1 -1
  301. package/dist/src/extensions/activation-planner.js +12 -0
  302. package/dist/src/extensions/activation-planner.js.map +1 -1
  303. package/dist/src/extensions/api.d.ts +5 -1
  304. package/dist/src/extensions/api.js +12 -0
  305. package/dist/src/extensions/api.js.map +1 -1
  306. package/dist/src/extensions/discover-extensions.js +17 -13
  307. package/dist/src/extensions/discover-extensions.js.map +1 -1
  308. package/dist/src/extensions/extension-metadata-snapshot.js +11 -5
  309. package/dist/src/extensions/extension-metadata-snapshot.js.map +1 -1
  310. package/dist/src/extensions/index.js +12 -4
  311. package/dist/src/extensions/index.js.map +1 -0
  312. package/dist/src/extensions/loader.d.ts +5 -1
  313. package/dist/src/extensions/loader.js +12 -11
  314. package/dist/src/extensions/loader.js.map +1 -1
  315. package/dist/src/extensions/manifest-registry.js +98 -93
  316. package/dist/src/extensions/manifest-registry.js.map +1 -1
  317. package/dist/src/extensions/normalize-manifest.js +91 -15
  318. package/dist/src/extensions/normalize-manifest.js.map +1 -1
  319. package/dist/src/extensions/sdk/index.js +1 -1
  320. package/dist/src/extensions/sdk/testing.js +4 -0
  321. package/dist/src/extensions/sdk/testing.js.map +1 -1
  322. package/dist/src/extensions/types/core.d.ts +32 -1
  323. package/dist/src/extensions/types/manifest.d.ts +60 -0
  324. package/dist/src/extensions/types/tui.d.ts +414 -5
  325. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  326. package/dist/src/gateway/agent-builtin-tools.js +16 -0
  327. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  328. package/dist/src/gateway/agent-run-relay.d.ts +2 -3
  329. package/dist/src/gateway/agent-run-relay.js +10 -3
  330. package/dist/src/gateway/agent-run-relay.js.map +1 -1
  331. package/dist/src/gateway/agents-admin.d.ts +32 -19
  332. package/dist/src/gateway/agents-admin.js +113 -93
  333. package/dist/src/gateway/agents-admin.js.map +1 -1
  334. package/dist/src/gateway/chat-stream/mapper.d.ts +34 -0
  335. package/dist/src/gateway/chat-stream/mapper.js +244 -0
  336. package/dist/src/gateway/chat-stream/mapper.js.map +1 -0
  337. package/dist/src/gateway/chat-stream/protocol.d.ts +100 -0
  338. package/dist/src/gateway/chat-stream/protocol.js +1 -0
  339. package/dist/src/gateway/heartbeat/service.js +1 -1
  340. package/dist/src/gateway/hono/lib/agent-model.d.ts +4 -4
  341. package/dist/src/gateway/hono/lib/agent-model.js +13 -11
  342. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  343. package/dist/src/gateway/hono/lib/config-payload.d.ts +19 -7
  344. package/dist/src/gateway/hono/lib/config-payload.js +16 -15
  345. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  346. package/dist/src/gateway/hono/routes/agents.js +83 -48
  347. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  348. package/dist/src/gateway/hono/routes/channels.js +134 -214
  349. package/dist/src/gateway/hono/routes/channels.js.map +1 -1
  350. package/dist/src/gateway/hono/routes/commands-skills.js +10 -4
  351. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  352. package/dist/src/gateway/hono/routes/config-patch/agents.js +26 -13
  353. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  354. package/dist/src/gateway/hono/routes/config-patch/channels.d.ts +1 -11
  355. package/dist/src/gateway/hono/routes/config-patch/channels.js +18 -165
  356. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
  357. package/dist/src/gateway/hono/routes/config.js +5 -2
  358. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  359. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  360. package/dist/src/gateway/hono/routes/lazy-bundles.js +13 -1
  361. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  362. package/dist/src/gateway/hono/routes/public-gateway.js +2 -4
  363. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  364. package/dist/src/gateway/hono/routes/sessions.js +179 -0
  365. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  366. package/dist/src/gateway/hono/routes/tui.d.ts +3 -0
  367. package/dist/src/gateway/hono/routes/tui.js +16 -0
  368. package/dist/src/gateway/hono/routes/tui.js.map +1 -0
  369. package/dist/src/gateway/hono/routes/workflows.js +25 -1
  370. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  371. package/dist/src/gateway/hono/sse.d.ts +5 -7
  372. package/dist/src/gateway/hono/sse.js +21 -38
  373. package/dist/src/gateway/hono/sse.js.map +1 -1
  374. package/dist/src/gateway/protocol.js.map +1 -1
  375. package/dist/src/gateway/service/agent-runner.d.ts +2 -4
  376. package/dist/src/gateway/service/agent-runner.js +1 -1
  377. package/dist/src/gateway/service/agent-runner.js.map +1 -1
  378. package/dist/src/gateway/service/marketplace-service.d.ts +4 -3
  379. package/dist/src/gateway/service/marketplace-service.js +7 -4
  380. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  381. package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -6
  382. package/dist/src/gateway/service/run-gateway-agent.js +63 -36
  383. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  384. package/dist/src/gateway/service/sessions-api.d.ts +19 -0
  385. package/dist/src/gateway/service/sessions-api.js +12 -0
  386. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  387. package/dist/src/gateway/service.d.ts +6 -0
  388. package/dist/src/gateway/service.js +73 -57
  389. package/dist/src/gateway/service.js.map +1 -1
  390. package/dist/src/heartbeat/index.js +1 -1
  391. package/dist/src/mcp/channel-bridge.js +1 -1
  392. package/dist/src/project-trust/trust-store.d.ts +30 -0
  393. package/dist/src/project-trust/trust-store.js +194 -0
  394. package/dist/src/project-trust/trust-store.js.map +1 -0
  395. package/dist/src/providers/index.d.ts +1 -1
  396. package/dist/src/providers/index.js +18 -7
  397. package/dist/src/providers/index.js.map +1 -1
  398. package/dist/src/routing/resolve-route.d.ts +0 -3
  399. package/dist/src/routing/resolve-route.js.map +1 -1
  400. package/dist/src/routing/resolve-tui-session-key.d.ts +2 -0
  401. package/dist/src/routing/resolve-tui-session-key.js +8 -3
  402. package/dist/src/routing/resolve-tui-session-key.js.map +1 -1
  403. package/dist/src/session/client-history.d.ts +32 -0
  404. package/dist/src/session/client-history.js +232 -1
  405. package/dist/src/session/client-history.js.map +1 -1
  406. package/dist/src/session/manager.d.ts +37 -4
  407. package/dist/src/session/manager.js +39 -15
  408. package/dist/src/session/manager.js.map +1 -1
  409. package/dist/src/session/session-context-for-llm.d.ts +93 -1
  410. package/dist/src/session/session-context-for-llm.js +105 -2
  411. package/dist/src/session/session-context-for-llm.js.map +1 -1
  412. package/dist/src/session/store.d.ts +37 -0
  413. package/dist/src/session/store.js +127 -2
  414. package/dist/src/session/store.js.map +1 -1
  415. package/dist/src/session/stored-rows-to-file-entries.js +37 -1
  416. package/dist/src/session/stored-rows-to-file-entries.js.map +1 -1
  417. package/dist/src/session/types.d.ts +14 -1
  418. package/dist/src/session/types.js.map +1 -1
  419. package/dist/src/share/share-thumbnail.js +1 -1
  420. package/dist/src/storage/sqlite/migrations/004_add_session_type_metadata.sql +15 -0
  421. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  422. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  423. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  424. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  425. package/dist/src/storage/sqlite/row-mappers.d.ts +14 -1
  426. package/dist/src/storage/sqlite/row-mappers.js +14 -1
  427. package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
  428. package/dist/src/storage/sqlite/schema.js +1 -1
  429. package/dist/src/storage/sqlite/session-metadata.js +1 -0
  430. package/dist/src/storage/sqlite/session-metadata.js.map +1 -1
  431. package/dist/src/storage/sqlite/session-repository.js +52 -25
  432. package/dist/src/storage/sqlite/session-repository.js.map +1 -1
  433. package/dist/src/tui/backends/embedded-backend.d.ts +53 -4
  434. package/dist/src/tui/backends/embedded-backend.js +227 -39
  435. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  436. package/dist/src/tui/backends/gateway-sse-backend.d.ts +59 -3
  437. package/dist/src/tui/backends/gateway-sse-backend.js +416 -26
  438. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  439. package/dist/src/tui/chat-history.d.ts +5 -1
  440. package/dist/src/tui/chat-history.js +78 -8
  441. package/dist/src/tui/chat-history.js.map +1 -1
  442. package/dist/src/tui/clipboard-text.d.ts +5 -0
  443. package/dist/src/tui/clipboard-text.js +46 -0
  444. package/dist/src/tui/clipboard-text.js.map +1 -0
  445. package/dist/src/tui/components/assistant-message.d.ts +19 -3
  446. package/dist/src/tui/components/assistant-message.js +115 -9
  447. package/dist/src/tui/components/assistant-message.js.map +1 -1
  448. package/dist/src/tui/components/bash-execution.d.ts +3 -2
  449. package/dist/src/tui/components/bash-execution.js +31 -3
  450. package/dist/src/tui/components/bash-execution.js.map +1 -1
  451. package/dist/src/tui/components/bash-summary.d.ts +23 -0
  452. package/dist/src/tui/components/bash-summary.js +87 -0
  453. package/dist/src/tui/components/bash-summary.js.map +1 -0
  454. package/dist/src/tui/components/branch-message-summary.d.ts +17 -0
  455. package/dist/src/tui/components/branch-message-summary.js +43 -0
  456. package/dist/src/tui/components/branch-message-summary.js.map +1 -0
  457. package/dist/src/tui/components/branch-summary.d.ts +13 -0
  458. package/dist/src/tui/components/branch-summary.js +51 -0
  459. package/dist/src/tui/components/branch-summary.js.map +1 -0
  460. package/dist/src/tui/components/chat-log.d.ts +46 -6
  461. package/dist/src/tui/components/chat-log.js +183 -21
  462. package/dist/src/tui/components/chat-log.js.map +1 -1
  463. package/dist/src/tui/components/compaction-summary.d.ts +13 -0
  464. package/dist/src/tui/components/compaction-summary.js +46 -0
  465. package/dist/src/tui/components/compaction-summary.js.map +1 -0
  466. package/dist/src/tui/components/custom-editor.d.ts +1 -0
  467. package/dist/src/tui/components/custom-editor.js +2 -0
  468. package/dist/src/tui/components/custom-editor.js.map +1 -1
  469. package/dist/src/tui/components/custom-message.d.ts +23 -0
  470. package/dist/src/tui/components/custom-message.js +65 -0
  471. package/dist/src/tui/components/custom-message.js.map +1 -0
  472. package/dist/src/tui/components/extension-dialog.d.ts +42 -0
  473. package/dist/src/tui/components/extension-dialog.js +127 -0
  474. package/dist/src/tui/components/extension-dialog.js.map +1 -0
  475. package/dist/src/tui/components/scoped-models-selector.d.ts +7 -2
  476. package/dist/src/tui/components/scoped-models-selector.js +89 -16
  477. package/dist/src/tui/components/scoped-models-selector.js.map +1 -1
  478. package/dist/src/tui/components/searchable-select-list.d.ts +30 -3
  479. package/dist/src/tui/components/searchable-select-list.js +82 -10
  480. package/dist/src/tui/components/searchable-select-list.js.map +1 -1
  481. package/dist/src/tui/components/session-selector.d.ts +18 -4
  482. package/dist/src/tui/components/session-selector.js +207 -40
  483. package/dist/src/tui/components/session-selector.js.map +1 -1
  484. package/dist/src/tui/components/settings-selector.d.ts +6 -2
  485. package/dist/src/tui/components/settings-selector.js +126 -7
  486. package/dist/src/tui/components/settings-selector.js.map +1 -1
  487. package/dist/src/tui/components/thinking-selector.d.ts +12 -0
  488. package/dist/src/tui/components/thinking-selector.js +48 -0
  489. package/dist/src/tui/components/thinking-selector.js.map +1 -0
  490. package/dist/src/tui/components/tool-execution.d.ts +57 -3
  491. package/dist/src/tui/components/tool-execution.js +378 -28
  492. package/dist/src/tui/components/tool-execution.js.map +1 -1
  493. package/dist/src/tui/components/tui-bottom-bar.d.ts +9 -1
  494. package/dist/src/tui/components/tui-bottom-bar.js +56 -11
  495. package/dist/src/tui/components/tui-bottom-bar.js.map +1 -1
  496. package/dist/src/tui/components/tui-header.d.ts +9 -2
  497. package/dist/src/tui/components/tui-header.js +25 -5
  498. package/dist/src/tui/components/tui-header.js.map +1 -1
  499. package/dist/src/tui/components/user-message.d.ts +4 -2
  500. package/dist/src/tui/components/user-message.js +42 -9
  501. package/dist/src/tui/components/user-message.js.map +1 -1
  502. package/dist/src/tui/components/visual-truncate.d.ts +11 -0
  503. package/dist/src/tui/components/visual-truncate.js +27 -0
  504. package/dist/src/tui/components/visual-truncate.js.map +1 -0
  505. package/dist/src/tui/extension-host/autocomplete.d.ts +43 -0
  506. package/dist/src/tui/extension-host/autocomplete.js +116 -0
  507. package/dist/src/tui/extension-host/autocomplete.js.map +1 -0
  508. package/dist/src/tui/extension-host/host.d.ts +31 -1
  509. package/dist/src/tui/extension-host/host.js +123 -6
  510. package/dist/src/tui/extension-host/host.js.map +1 -1
  511. package/dist/src/tui/extension-host/load-extensions.d.ts +6 -1
  512. package/dist/src/tui/extension-host/load-extensions.js +4 -3
  513. package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
  514. package/dist/src/tui/extension-host/runtime-context.d.ts +21 -0
  515. package/dist/src/tui/extension-host/runtime-context.js +152 -0
  516. package/dist/src/tui/extension-host/runtime-context.js.map +1 -0
  517. package/dist/src/tui/extension-host/runtime.d.ts +52 -4
  518. package/dist/src/tui/extension-host/runtime.js +547 -85
  519. package/dist/src/tui/extension-host/runtime.js.map +1 -1
  520. package/dist/src/tui/extension-host/surface.d.ts +20 -0
  521. package/dist/src/tui/extension-host/surface.js +30 -6
  522. package/dist/src/tui/extension-host/surface.js.map +1 -1
  523. package/dist/src/tui/extension-host/tool-renderers.d.ts +6 -3
  524. package/dist/src/tui/extension-host/tool-renderers.js +43 -5
  525. package/dist/src/tui/extension-host/tool-renderers.js.map +1 -1
  526. package/dist/src/tui/format-tui-hotkeys.d.ts +12 -2
  527. package/dist/src/tui/format-tui-hotkeys.js +22 -5
  528. package/dist/src/tui/format-tui-hotkeys.js.map +1 -1
  529. package/dist/src/tui/tui-agent-events.d.ts +8 -6
  530. package/dist/src/tui/tui-agent-events.js +200 -59
  531. package/dist/src/tui/tui-agent-events.js.map +1 -1
  532. package/dist/src/tui/tui-backend.d.ts +169 -3
  533. package/dist/src/tui/tui-command-formatters.d.ts +76 -0
  534. package/dist/src/tui/tui-command-formatters.js +594 -0
  535. package/dist/src/tui/tui-command-formatters.js.map +1 -0
  536. package/dist/src/tui/tui-commands.d.ts +57 -7
  537. package/dist/src/tui/tui-commands.js +639 -43
  538. package/dist/src/tui/tui-commands.js.map +1 -1
  539. package/dist/src/tui/tui-context-usage.d.ts +1 -1
  540. package/dist/src/tui/tui-context-usage.js +9 -1
  541. package/dist/src/tui/tui-context-usage.js.map +1 -1
  542. package/dist/src/tui/tui-extension-user-message.d.ts +8 -0
  543. package/dist/src/tui/tui-extension-user-message.js +32 -0
  544. package/dist/src/tui/tui-extension-user-message.js.map +1 -0
  545. package/dist/src/tui/tui-follow-up-queue.d.ts +9 -0
  546. package/dist/src/tui/tui-follow-up-queue.js +18 -0
  547. package/dist/src/tui/tui-follow-up-queue.js.map +1 -0
  548. package/dist/src/tui/tui-local-shell.d.ts +11 -1
  549. package/dist/src/tui/tui-local-shell.js +50 -8
  550. package/dist/src/tui/tui-local-shell.js.map +1 -1
  551. package/dist/src/tui/tui-model-picker.d.ts +26 -0
  552. package/dist/src/tui/tui-model-picker.js +152 -0
  553. package/dist/src/tui/tui-model-picker.js.map +1 -0
  554. package/dist/src/tui/tui-oauth-login.d.ts +16 -0
  555. package/dist/src/tui/tui-oauth-login.js +189 -0
  556. package/dist/src/tui/tui-oauth-login.js.map +1 -0
  557. package/dist/src/tui/tui-overlays.d.ts +3 -3
  558. package/dist/src/tui/tui-overlays.js +6 -7
  559. package/dist/src/tui/tui-overlays.js.map +1 -1
  560. package/dist/src/tui/tui-picker-overlay.d.ts +27 -32
  561. package/dist/src/tui/tui-picker-overlay.js +340 -30
  562. package/dist/src/tui/tui-picker-overlay.js.map +1 -1
  563. package/dist/src/tui/tui-picker-services.d.ts +41 -0
  564. package/dist/src/tui/tui-picker-services.js +1 -0
  565. package/dist/src/tui/tui-run-state.d.ts +11 -0
  566. package/dist/src/tui/tui-run-state.js +114 -0
  567. package/dist/src/tui/tui-run-state.js.map +1 -0
  568. package/dist/src/tui/tui-runtime-hints.d.ts +4 -0
  569. package/dist/src/tui/tui-runtime-hints.js +18 -0
  570. package/dist/src/tui/tui-runtime-hints.js.map +1 -0
  571. package/dist/src/tui/tui-scoped-models.d.ts +1 -1
  572. package/dist/src/tui/tui-scoped-models.js +2 -2
  573. package/dist/src/tui/tui-scoped-models.js.map +1 -1
  574. package/dist/src/tui/tui-session-actions.d.ts +5 -3
  575. package/dist/src/tui/tui-session-actions.js +21 -9
  576. package/dist/src/tui/tui-session-actions.js.map +1 -1
  577. package/dist/src/tui/tui-session-format.d.ts +4 -1
  578. package/dist/src/tui/tui-session-format.js +17 -3
  579. package/dist/src/tui/tui-session-format.js.map +1 -1
  580. package/dist/src/tui/tui-session-snapshot.d.ts +82 -0
  581. package/dist/src/tui/tui-session-snapshot.js +184 -0
  582. package/dist/src/tui/tui-session-snapshot.js.map +1 -0
  583. package/dist/src/tui/tui-session-stats.d.ts +3 -0
  584. package/dist/src/tui/tui-session-stats.js +59 -0
  585. package/dist/src/tui/tui-session-stats.js.map +1 -0
  586. package/dist/src/tui/tui-settings.d.ts +21 -0
  587. package/dist/src/tui/tui-settings.js +28 -1
  588. package/dist/src/tui/tui-settings.js.map +1 -1
  589. package/dist/src/tui/tui-skills-autocomplete.js +1 -1
  590. package/dist/src/tui/tui-skills-autocomplete.js.map +1 -1
  591. package/dist/src/tui/tui-startup-resources.d.ts +3 -0
  592. package/dist/src/tui/tui-startup-resources.js +39 -0
  593. package/dist/src/tui/tui-startup-resources.js.map +1 -0
  594. package/dist/src/tui/tui-startup-text.d.ts +10 -0
  595. package/dist/src/tui/tui-startup-text.js +58 -0
  596. package/dist/src/tui/tui-startup-text.js.map +1 -0
  597. package/dist/src/tui/tui-stdio-filter.d.ts +1 -0
  598. package/dist/src/tui/tui-stdio-filter.js +11 -7
  599. package/dist/src/tui/tui-stdio-filter.js.map +1 -1
  600. package/dist/src/tui/tui-submit.d.ts +2 -0
  601. package/dist/src/tui/tui-submit.js +2 -1
  602. package/dist/src/tui/tui-submit.js.map +1 -1
  603. package/dist/src/tui/tui-tool-diff.js +61 -7
  604. package/dist/src/tui/tui-tool-diff.js.map +1 -1
  605. package/dist/src/tui/tui-tool-result.d.ts +17 -0
  606. package/dist/src/tui/tui-tool-result.js +74 -0
  607. package/dist/src/tui/tui-tool-result.js.map +1 -0
  608. package/dist/src/tui/tui-transcript-tree-picker.d.ts +57 -0
  609. package/dist/src/tui/tui-transcript-tree-picker.js +604 -0
  610. package/dist/src/tui/tui-transcript-tree-picker.js.map +1 -0
  611. package/dist/src/tui/tui-transcript-tree.d.ts +7 -0
  612. package/dist/src/tui/tui-transcript-tree.js +316 -0
  613. package/dist/src/tui/tui-transcript-tree.js.map +1 -0
  614. package/dist/src/tui/tui-types.d.ts +25 -34
  615. package/dist/src/tui/tui-types.js +12 -0
  616. package/dist/src/tui/tui-types.js.map +1 -1
  617. package/dist/src/tui/tui.js +1288 -112
  618. package/dist/src/tui/tui.js.map +1 -1
  619. package/dist/src/tui/xopc-tui-keybindings.d.ts +127 -2
  620. package/dist/src/tui/xopc-tui-keybindings.js +127 -2
  621. package/dist/src/tui/xopc-tui-keybindings.js.map +1 -1
  622. package/dist/src/workflows/domain/definition-utils.d.ts +2 -1
  623. package/dist/src/workflows/domain/definition-utils.js +18 -8
  624. package/dist/src/workflows/domain/definition-utils.js.map +1 -1
  625. package/dist/src/workflows/domain/definition.d.ts +25 -0
  626. package/dist/src/workflows/domain/event.d.ts +1 -0
  627. package/dist/src/workflows/domain/result.d.ts +15 -0
  628. package/dist/src/workflows/domain/run.d.ts +2 -0
  629. package/dist/src/workflows/domain/run.js.map +1 -1
  630. package/dist/src/workflows/engine/projector.js +4 -0
  631. package/dist/src/workflows/engine/projector.js.map +1 -1
  632. package/dist/src/workflows/engine/workflow-engine.d.ts +37 -1
  633. package/dist/src/workflows/engine/workflow-engine.js +75 -11
  634. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  635. package/dist/src/workflows/index.d.ts +1 -0
  636. package/dist/src/workflows/index.js +4 -1
  637. package/dist/src/workflows/registry/catalog-workflow-definition-registry.d.ts +9 -0
  638. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +40 -0
  639. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -0
  640. package/dist/src/workflows/registry/index.d.ts +2 -0
  641. package/dist/src/workflows/registry/index.js +2 -0
  642. package/dist/src/workflows/registry/workflow-definition-registry.d.ts +15 -0
  643. package/dist/src/workflows/registry/workflow-definition-registry.js +1 -0
  644. package/dist/src/workflows/runtime/index.d.ts +2 -0
  645. package/dist/src/workflows/runtime/index.js +2 -1
  646. package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +5 -0
  647. package/dist/src/workflows/runtime/script-workflow-runtime.js +15 -0
  648. package/dist/src/workflows/runtime/script-workflow-runtime.js.map +1 -0
  649. package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +16 -0
  650. package/dist/src/workflows/runtime/workflow-runtime-port.js +1 -0
  651. package/dist/src/workflows/service/run-view-to-snapshot.js +3 -0
  652. package/dist/src/workflows/service/run-view-to-snapshot.js.map +1 -1
  653. package/dist/src/workflows/service/workflow-run-service.d.ts +3 -0
  654. package/dist/src/workflows/service/workflow-run-service.js +10 -15
  655. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  656. package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -1
  657. package/dist/src/workflows/service/workflow-session-bridge.js +4 -1
  658. package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
  659. package/package.json +21 -15
  660. package/skills/creative/frontend-design/SKILL.md +1 -1
  661. package/skills/creative/theme-factory/SKILL.md +1 -1
  662. package/skills/documents/xlsx/SKILL.md +1 -1
  663. package/skills/engineering/diagnose/SKILL.md +2 -2
  664. package/skills/engineering/tdd/SKILL.md +1 -1
  665. package/skills/tools/github/SKILL.md +6 -1
  666. package/skills/tools/webapp-testing/SKILL.md +4 -1
  667. package/dist/extensions/telegram/src/adapters/config-surface.d.ts +0 -2
  668. package/dist/extensions/telegram/src/adapters/config-surface.js +0 -26
  669. package/dist/extensions/telegram/src/adapters/config-surface.js.map +0 -1
  670. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js +0 -158
  671. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js.map +0 -1
  672. package/dist/gateway/static/root/assets/agents-BwXkia_W.js +0 -222
  673. package/dist/gateway/static/root/assets/channels-settings-tlOTdaXw.js +0 -1
  674. package/dist/gateway/static/root/assets/channels-status-swr-D4XjqwqC.js +0 -8
  675. package/dist/gateway/static/root/assets/cron-api-DcmfGuj0.js +0 -1
  676. package/dist/gateway/static/root/assets/cron-page-CijJ4G6F.js +0 -1
  677. package/dist/gateway/static/root/assets/extension-settings-page-CyJk_G64.js +0 -1
  678. package/dist/gateway/static/root/assets/field-primitives-C4GpxsDo.js +0 -1
  679. package/dist/gateway/static/root/assets/heartbeat-config-api-CLD0Gpi3.js +0 -1
  680. package/dist/gateway/static/root/assets/index-0HmunJW9.js +0 -4845
  681. package/dist/gateway/static/root/assets/index-Bk75Phrd.css +0 -1
  682. package/dist/gateway/static/root/assets/notes-page-BBnTh0uI.js +0 -1
  683. package/dist/gateway/static/root/assets/sessions-page-B0riYK7j.js +0 -1
  684. package/dist/gateway/static/root/assets/settings-advanced-gate-DiP_WHu_.js +0 -2
  685. package/dist/gateway/static/root/assets/settings-page-1ZPhcCZ9.js +0 -3
  686. package/dist/gateway/static/root/assets/skills-page-BQ1hllKD.js +0 -2
  687. package/dist/gateway/static/root/assets/url-F3_D_6zZ.js +0 -3
  688. package/dist/gateway/static/root/assets/utils-CPr3FBh2.js +0 -1
  689. package/dist/gateway/static/root/assets/voice-api-key-field-BkbDl6dH.js +0 -1
  690. package/dist/gateway/static/root/assets/workflows-page-D059ysoF.js +0 -27
  691. package/dist/src/agent/embedded/map-stream-events.d.ts +0 -9
  692. package/dist/src/agent/embedded/map-stream-events.js +0 -63
  693. package/dist/src/agent/embedded/map-stream-events.js.map +0 -1
  694. package/dist/src/channels/dock.js.map +0 -1
  695. package/dist/src/channels/plugins/bundled.d.ts +0 -11
  696. package/dist/src/channels/plugins/bundled.js +0 -10
  697. package/dist/src/channels/plugins/bundled.js.map +0 -1
  698. package/dist/src/channels/registry.d.ts +0 -25
  699. package/dist/src/channels/registry.js +0 -82
  700. package/dist/src/channels/registry.js.map +0 -1
  701. package/dist/src/config/localized-text.d.ts +0 -6
  702. package/dist/src/config/localized-text.js +0 -42
  703. package/dist/src/config/localized-text.js.map +0 -1
  704. package/dist/src/generated/bundled-channel-plugins.d.ts +0 -10
  705. package/dist/src/generated/bundled-channel-plugins.js +0 -16
  706. package/dist/src/generated/bundled-channel-plugins.js.map +0 -1
  707. package/dist/src/tui/stream-assembler.d.ts +0 -22
  708. package/dist/src/tui/stream-assembler.js +0 -63
  709. package/dist/src/tui/stream-assembler.js.map +0 -1
  710. package/skills/browser/SKILL-zh.md +0 -188
  711. package/skills/business/company-values/SKILL-zh.md +0 -80
  712. package/skills/business/company-values/SKILL.md +0 -80
  713. package/skills/business/find-community/SKILL-zh.md +0 -50
  714. package/skills/business/find-community/SKILL.md +0 -50
  715. package/skills/business/first-customers/SKILL-zh.md +0 -76
  716. package/skills/business/first-customers/SKILL.md +0 -76
  717. package/skills/business/grow-sustainably/SKILL-zh.md +0 -92
  718. package/skills/business/grow-sustainably/SKILL.md +0 -92
  719. package/skills/business/marketing-plan/SKILL-zh.md +0 -100
  720. package/skills/business/marketing-plan/SKILL.md +0 -100
  721. package/skills/business/minimalist-review/SKILL-zh.md +0 -82
  722. package/skills/business/minimalist-review/SKILL.md +0 -82
  723. package/skills/business/mvp/SKILL-zh.md +0 -81
  724. package/skills/business/mvp/SKILL.md +0 -81
  725. package/skills/business/pricing/SKILL-zh.md +0 -64
  726. package/skills/business/pricing/SKILL.md +0 -64
  727. package/skills/business/processize/SKILL-zh.md +0 -91
  728. package/skills/business/processize/SKILL.md +0 -91
  729. package/skills/business/validate-idea/SKILL-zh.md +0 -68
  730. package/skills/business/validate-idea/SKILL.md +0 -68
  731. package/skills/creative/algorithmic-art/LICENSE.txt +0 -202
  732. package/skills/creative/algorithmic-art/SKILL-zh.md +0 -405
  733. package/skills/creative/algorithmic-art/SKILL.md +0 -405
  734. package/skills/creative/algorithmic-art/templates/generator_template.js +0 -223
  735. package/skills/creative/algorithmic-art/templates/viewer.html +0 -599
  736. package/skills/creative/frontend-design/SKILL-zh.md +0 -42
  737. package/skills/creative/theme-factory/SKILL-zh.md +0 -59
  738. package/skills/creative/web-artifacts-builder/LICENSE.txt +0 -202
  739. package/skills/creative/web-artifacts-builder/SKILL-zh.md +0 -74
  740. package/skills/creative/web-artifacts-builder/SKILL.md +0 -74
  741. package/skills/creative/web-artifacts-builder/scripts/bundle-artifact.sh +0 -54
  742. package/skills/creative/web-artifacts-builder/scripts/init-artifact.sh +0 -322
  743. package/skills/creative/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  744. package/skills/documents/doc-coauthoring/SKILL-zh.md +0 -375
  745. package/skills/documents/doc-coauthoring/SKILL.md +0 -375
  746. package/skills/documents/docx/LICENSE.txt +0 -30
  747. package/skills/documents/docx/SKILL-zh.md +0 -590
  748. package/skills/documents/docx/SKILL.md +0 -590
  749. package/skills/documents/docx/scripts/__init__.py +0 -1
  750. package/skills/documents/docx/scripts/accept_changes.py +0 -135
  751. package/skills/documents/docx/scripts/comment.py +0 -318
  752. package/skills/documents/docx/scripts/office/helpers/__init__.py +0 -0
  753. package/skills/documents/docx/scripts/office/helpers/merge_runs.py +0 -199
  754. package/skills/documents/docx/scripts/office/helpers/simplify_redlines.py +0 -197
  755. package/skills/documents/docx/scripts/office/pack.py +0 -159
  756. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  757. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  758. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  759. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  760. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  761. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  762. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  763. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  764. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  765. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  766. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  767. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  768. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  769. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  770. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  771. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  772. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  773. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  774. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  775. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  776. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  777. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  778. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  779. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  780. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  781. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  782. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  783. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  784. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  785. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  786. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  787. package/skills/documents/docx/scripts/office/schemas/mce/mc.xsd +0 -75
  788. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  789. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  790. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  791. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  792. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  793. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  794. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  795. package/skills/documents/docx/scripts/office/soffice.py +0 -183
  796. package/skills/documents/docx/scripts/office/unpack.py +0 -132
  797. package/skills/documents/docx/scripts/office/validate.py +0 -111
  798. package/skills/documents/docx/scripts/office/validators/__init__.py +0 -15
  799. package/skills/documents/docx/scripts/office/validators/base.py +0 -847
  800. package/skills/documents/docx/scripts/office/validators/docx.py +0 -446
  801. package/skills/documents/docx/scripts/office/validators/pptx.py +0 -275
  802. package/skills/documents/docx/scripts/office/validators/redlining.py +0 -247
  803. package/skills/documents/docx/scripts/templates/comments.xml +0 -3
  804. package/skills/documents/docx/scripts/templates/commentsExtended.xml +0 -3
  805. package/skills/documents/docx/scripts/templates/commentsExtensible.xml +0 -3
  806. package/skills/documents/docx/scripts/templates/commentsIds.xml +0 -3
  807. package/skills/documents/docx/scripts/templates/people.xml +0 -3
  808. package/skills/documents/pdf/LICENSE.txt +0 -30
  809. package/skills/documents/pdf/SKILL-zh.md +0 -314
  810. package/skills/documents/pdf/SKILL.md +0 -314
  811. package/skills/documents/pdf/forms.md +0 -294
  812. package/skills/documents/pdf/reference.md +0 -612
  813. package/skills/documents/pdf/scripts/check_bounding_boxes.py +0 -65
  814. package/skills/documents/pdf/scripts/check_fillable_fields.py +0 -11
  815. package/skills/documents/pdf/scripts/convert_pdf_to_images.py +0 -33
  816. package/skills/documents/pdf/scripts/create_validation_image.py +0 -37
  817. package/skills/documents/pdf/scripts/extract_form_field_info.py +0 -122
  818. package/skills/documents/pdf/scripts/extract_form_structure.py +0 -115
  819. package/skills/documents/pdf/scripts/fill_fillable_fields.py +0 -98
  820. package/skills/documents/pdf/scripts/fill_pdf_form_with_annotations.py +0 -107
  821. package/skills/documents/pptx/LICENSE.txt +0 -30
  822. package/skills/documents/pptx/SKILL-zh.md +0 -232
  823. package/skills/documents/pptx/SKILL.md +0 -232
  824. package/skills/documents/pptx/editing.md +0 -205
  825. package/skills/documents/pptx/pptxgenjs.md +0 -420
  826. package/skills/documents/pptx/scripts/__init__.py +0 -0
  827. package/skills/documents/pptx/scripts/add_slide.py +0 -195
  828. package/skills/documents/pptx/scripts/clean.py +0 -286
  829. package/skills/documents/pptx/scripts/office/helpers/__init__.py +0 -0
  830. package/skills/documents/pptx/scripts/office/helpers/merge_runs.py +0 -199
  831. package/skills/documents/pptx/scripts/office/helpers/simplify_redlines.py +0 -197
  832. package/skills/documents/pptx/scripts/office/pack.py +0 -159
  833. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  834. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  835. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  836. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  837. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  838. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  839. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  840. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  841. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  842. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  843. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  844. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  845. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  846. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  847. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  848. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  849. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  850. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  851. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  852. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  853. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  854. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  855. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  856. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  857. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  858. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  859. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  860. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  861. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  862. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  863. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  864. package/skills/documents/pptx/scripts/office/schemas/mce/mc.xsd +0 -75
  865. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  866. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  867. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  868. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  869. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  870. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  871. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  872. package/skills/documents/pptx/scripts/office/soffice.py +0 -183
  873. package/skills/documents/pptx/scripts/office/unpack.py +0 -132
  874. package/skills/documents/pptx/scripts/office/validate.py +0 -111
  875. package/skills/documents/pptx/scripts/office/validators/__init__.py +0 -15
  876. package/skills/documents/pptx/scripts/office/validators/base.py +0 -847
  877. package/skills/documents/pptx/scripts/office/validators/docx.py +0 -446
  878. package/skills/documents/pptx/scripts/office/validators/pptx.py +0 -275
  879. package/skills/documents/pptx/scripts/office/validators/redlining.py +0 -247
  880. package/skills/documents/pptx/scripts/thumbnail.py +0 -289
  881. package/skills/documents/xlsx/SKILL-zh.md +0 -292
  882. package/skills/engineering/diagnose/SKILL-zh.md +0 -117
  883. package/skills/engineering/grill-with-docs/ADR-FORMAT.md +0 -47
  884. package/skills/engineering/grill-with-docs/CONTEXT-FORMAT.md +0 -77
  885. package/skills/engineering/grill-with-docs/SKILL-zh.md +0 -88
  886. package/skills/engineering/grill-with-docs/SKILL.md +0 -88
  887. package/skills/engineering/improve-codebase-architecture/DEEPENING.md +0 -37
  888. package/skills/engineering/improve-codebase-architecture/INTERFACE-DESIGN.md +0 -44
  889. package/skills/engineering/improve-codebase-architecture/LANGUAGE.md +0 -53
  890. package/skills/engineering/improve-codebase-architecture/SKILL-zh.md +0 -71
  891. package/skills/engineering/improve-codebase-architecture/SKILL.md +0 -71
  892. package/skills/engineering/tdd/SKILL-zh.md +0 -109
  893. package/skills/engineering/to-issues/SKILL-zh.md +0 -81
  894. package/skills/engineering/to-issues/SKILL.md +0 -81
  895. package/skills/engineering/to-prd/SKILL-zh.md +0 -76
  896. package/skills/engineering/to-prd/SKILL.md +0 -74
  897. package/skills/engineering/zoom-out/SKILL-zh.md +0 -7
  898. package/skills/engineering/zoom-out/SKILL.md +0 -7
  899. package/skills/tools/find-skills/SKILL-zh.md +0 -440
  900. package/skills/tools/github/SKILL-zh.md +0 -48
  901. package/skills/tools/internal-comms/LICENSE.txt +0 -202
  902. package/skills/tools/internal-comms/SKILL-zh.md +0 -32
  903. package/skills/tools/internal-comms/SKILL.md +0 -32
  904. package/skills/tools/internal-comms/examples/3p-updates.md +0 -47
  905. package/skills/tools/internal-comms/examples/company-newsletter.md +0 -65
  906. package/skills/tools/internal-comms/examples/faq-answers.md +0 -30
  907. package/skills/tools/internal-comms/examples/general-comms.md +0 -16
  908. package/skills/tools/skill-creator/LICENSE.txt +0 -202
  909. package/skills/tools/skill-creator/SKILL-zh.md +0 -483
  910. package/skills/tools/skill-creator/SKILL.md +0 -485
  911. package/skills/tools/skill-creator/agents/analyzer.md +0 -274
  912. package/skills/tools/skill-creator/agents/comparator.md +0 -202
  913. package/skills/tools/skill-creator/agents/grader.md +0 -223
  914. package/skills/tools/skill-creator/assets/eval_review.html +0 -146
  915. package/skills/tools/skill-creator/eval-viewer/generate_review.py +0 -471
  916. package/skills/tools/skill-creator/eval-viewer/viewer.html +0 -1325
  917. package/skills/tools/skill-creator/references/schemas.md +0 -430
  918. package/skills/tools/skill-creator/scripts/__init__.py +0 -0
  919. package/skills/tools/skill-creator/scripts/aggregate_benchmark.py +0 -401
  920. package/skills/tools/skill-creator/scripts/generate_report.py +0 -326
  921. package/skills/tools/skill-creator/scripts/improve_description.py +0 -247
  922. package/skills/tools/skill-creator/scripts/package_skill.py +0 -136
  923. package/skills/tools/skill-creator/scripts/quick_validate.py +0 -103
  924. package/skills/tools/skill-creator/scripts/run_eval.py +0 -310
  925. package/skills/tools/skill-creator/scripts/run_loop.py +0 -328
  926. package/skills/tools/skill-creator/scripts/utils.py +0 -47
  927. package/skills/tools/summarize/SKILL-zh.md +0 -47
  928. package/skills/tools/weather/SKILL-zh.md +0 -46
  929. package/skills/tools/weather/SKILL.md +0 -46
  930. package/skills/tools/webapp-testing/SKILL-zh.md +0 -96
@@ -1,4 +1,4 @@
1
- import { isTranscriptContextEntry } from "./session-context-for-llm.js";
1
+ import { isTranscriptContextEntry, isTranscriptCustomMessageEntry, isTranscriptCustomStateEntry } from "./session-context-for-llm.js";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { CURRENT_SESSION_VERSION } from "@earendil-works/pi-coding-agent";
4
4
  //#region src/session/stored-rows-to-file-entries.ts
@@ -26,6 +26,28 @@ function contextRowToCustomEntry(row, parentId, byId) {
26
26
  }
27
27
  };
28
28
  }
29
+ function customStateRowToCustomEntry(row, parentId, byId) {
30
+ return {
31
+ type: "custom",
32
+ customType: row.customType?.trim() || "xopc:custom",
33
+ id: generateShortId(byId),
34
+ parentId,
35
+ timestamp: typeof row.timestamp === "string" ? row.timestamp : (/* @__PURE__ */ new Date()).toISOString(),
36
+ data: row.data
37
+ };
38
+ }
39
+ function customMessageRowToEntry(row, parentId, byId) {
40
+ return {
41
+ type: "custom_message",
42
+ customType: row.customType?.trim() || "xopc:custom-message",
43
+ id: generateShortId(byId),
44
+ parentId,
45
+ timestamp: typeof row.timestamp === "string" ? row.timestamp : typeof row.timestamp === "number" ? new Date(row.timestamp).toISOString() : (/* @__PURE__ */ new Date()).toISOString(),
46
+ content: typeof row.content === "string" || Array.isArray(row.content) ? row.content : "",
47
+ display: row.display ?? true,
48
+ details: row.details
49
+ };
50
+ }
29
51
  function compactionRecordToEntry(rec, parentId, byId) {
30
52
  return {
31
53
  type: "compaction",
@@ -70,6 +92,20 @@ function storedRowsToFileEntries(params) {
70
92
  parentId = entry.id;
71
93
  continue;
72
94
  }
95
+ if (isTranscriptCustomStateEntry(row)) {
96
+ const entry = customStateRowToCustomEntry(row, parentId, byId);
97
+ byId.add(entry.id);
98
+ entries.push(entry);
99
+ parentId = entry.id;
100
+ continue;
101
+ }
102
+ if (isTranscriptCustomMessageEntry(row)) {
103
+ const entry = customMessageRowToEntry(row, parentId, byId);
104
+ byId.add(entry.id);
105
+ entries.push(entry);
106
+ parentId = entry.id;
107
+ continue;
108
+ }
73
109
  if (row.type === "compaction") {
74
110
  const entry = compactionRecordToEntry(row, parentId, byId);
75
111
  byId.add(entry.id);
@@ -1 +1 @@
1
- {"version":3,"file":"stored-rows-to-file-entries.js","names":[],"sources":["../../../src/session/stored-rows-to-file-entries.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type { AgentMessage } from '@earendil-works/pi-agent-core';\nimport {\n CURRENT_SESSION_VERSION,\n type CompactionEntry,\n type CustomEntry,\n type FileEntry,\n type SessionMessageEntry,\n} from '@earendil-works/pi-coding-agent';\n\nimport type { TranscriptCompactionRecord } from './transcript-format.js';\nimport {\n isTranscriptContextEntry,\n type TranscriptStoredRow,\n type XopcTranscriptContextEntry,\n} from './session-context-for-llm.js';\n\nexport const XOPC_CONTEXT_CUSTOM_TYPE = 'xopc:transcript-row';\n\nfunction generateShortId(byId: Set<string>): string {\n for (let i = 0; i < 100; i++) {\n const id = randomUUID().slice(0, 8);\n if (!byId.has(id)) {\n return id;\n }\n }\n return randomUUID();\n}\n\nfunction contextRowToCustomEntry(\n row: XopcTranscriptContextEntry,\n parentId: string | null,\n byId: Set<string>,\n): CustomEntry {\n return {\n type: 'custom',\n customType: XOPC_CONTEXT_CUSTOM_TYPE,\n id: generateShortId(byId),\n parentId,\n timestamp: row.createdAt ?? new Date().toISOString(),\n data: {\n kind: 'context',\n id: row.id,\n text: row.text,\n data: row.data,\n createdAt: row.createdAt,\n },\n };\n}\n\nfunction compactionRecordToEntry(\n rec: TranscriptCompactionRecord,\n parentId: string | null,\n byId: Set<string>,\n): CompactionEntry {\n return {\n type: 'compaction',\n id: generateShortId(byId),\n parentId,\n timestamp: rec.at,\n summary: rec.summary,\n firstKeptEntryId: String(rec.firstKeptIndex),\n tokensBefore: rec.tokensBefore,\n details: { tokensAfter: rec.tokensAfter, xopc: true },\n fromHook: true,\n };\n}\n\nfunction agentMessageToEntry(\n msg: AgentMessage,\n parentId: string | null,\n byId: Set<string>,\n): SessionMessageEntry {\n return {\n type: 'message',\n id: generateShortId(byId),\n parentId,\n timestamp: new Date().toISOString(),\n message: msg,\n };\n}\n\n/** Convert SQLite transcript rows into pi-coding-agent JSONL file entries (header + tree). */\nexport function storedRowsToFileEntries(params: {\n sessionId: string;\n cwd: string;\n rows: TranscriptStoredRow[];\n appendCompaction?: TranscriptCompactionRecord;\n}): FileEntry[] {\n const byId = new Set<string>();\n const entries: FileEntry[] = [\n {\n type: 'session',\n version: CURRENT_SESSION_VERSION,\n id: params.sessionId,\n timestamp: new Date().toISOString(),\n cwd: params.cwd,\n },\n ];\n\n let parentId: string | null = null;\n for (const row of params.rows) {\n if (isTranscriptContextEntry(row)) {\n const entry = contextRowToCustomEntry(row, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n continue;\n }\n if ((row as { type?: string }).type === 'compaction') {\n const entry = compactionRecordToEntry(row as unknown as TranscriptCompactionRecord, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n continue;\n }\n const entry = agentMessageToEntry(row as AgentMessage, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n }\n\n if (params.appendCompaction) {\n const entry = compactionRecordToEntry(params.appendCompaction, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n }\n\n return entries;\n}\n"],"mappings":";;;;AAkBA,MAAa,2BAA2B;AAExC,SAAS,gBAAgB,MAA2B;AAClD,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;EAC5B,MAAM,KAAK,YAAY,CAAC,MAAM,GAAG,EAAE;AACnC,MAAI,CAAC,KAAK,IAAI,GAAG,CACf,QAAO;;AAGX,QAAO,YAAY;;AAGrB,SAAS,wBACP,KACA,UACA,MACa;AACb,QAAO;EACL,MAAM;EACN,YAAY;EACZ,IAAI,gBAAgB,KAAK;EACzB;EACA,WAAW,IAAI,8BAAa,IAAI,MAAM,EAAC,aAAa;EACpD,MAAM;GACJ,MAAM;GACN,IAAI,IAAI;GACR,MAAM,IAAI;GACV,MAAM,IAAI;GACV,WAAW,IAAI;GAChB;EACF;;AAGH,SAAS,wBACP,KACA,UACA,MACiB;AACjB,QAAO;EACL,MAAM;EACN,IAAI,gBAAgB,KAAK;EACzB;EACA,WAAW,IAAI;EACf,SAAS,IAAI;EACb,kBAAkB,OAAO,IAAI,eAAe;EAC5C,cAAc,IAAI;EAClB,SAAS;GAAE,aAAa,IAAI;GAAa,MAAM;GAAM;EACrD,UAAU;EACX;;AAGH,SAAS,oBACP,KACA,UACA,MACqB;AACrB,QAAO;EACL,MAAM;EACN,IAAI,gBAAgB,KAAK;EACzB;EACA,4BAAW,IAAI,MAAM,EAAC,aAAa;EACnC,SAAS;EACV;;;AAIH,SAAgB,wBAAwB,QAKxB;CACd,MAAM,uBAAO,IAAI,KAAa;CAC9B,MAAM,UAAuB,CAC3B;EACE,MAAM;EACN,SAAS;EACT,IAAI,OAAO;EACX,4BAAW,IAAI,MAAM,EAAC,aAAa;EACnC,KAAK,OAAO;EACb,CACF;CAED,IAAI,WAA0B;AAC9B,MAAK,MAAM,OAAO,OAAO,MAAM;AAC7B,MAAI,yBAAyB,IAAI,EAAE;GACjC,MAAM,QAAQ,wBAAwB,KAAK,UAAU,KAAK;AAC1D,QAAK,IAAI,MAAM,GAAG;AAClB,WAAQ,KAAK,MAAM;AACnB,cAAW,MAAM;AACjB;;AAEF,MAAK,IAA0B,SAAS,cAAc;GACpD,MAAM,QAAQ,wBAAwB,KAA8C,UAAU,KAAK;AACnG,QAAK,IAAI,MAAM,GAAG;AAClB,WAAQ,KAAK,MAAM;AACnB,cAAW,MAAM;AACjB;;EAEF,MAAM,QAAQ,oBAAoB,KAAqB,UAAU,KAAK;AACtE,OAAK,IAAI,MAAM,GAAG;AAClB,UAAQ,KAAK,MAAM;AACnB,aAAW,MAAM;;AAGnB,KAAI,OAAO,kBAAkB;EAC3B,MAAM,QAAQ,wBAAwB,OAAO,kBAAkB,UAAU,KAAK;AAC9E,OAAK,IAAI,MAAM,GAAG;AAClB,UAAQ,KAAK,MAAM;;AAGrB,QAAO"}
1
+ {"version":3,"file":"stored-rows-to-file-entries.js","names":[],"sources":["../../../src/session/stored-rows-to-file-entries.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type { AgentMessage } from '@earendil-works/pi-agent-core';\nimport {\n CURRENT_SESSION_VERSION,\n type CompactionEntry,\n type CustomEntry,\n type CustomMessageEntry,\n type FileEntry,\n type SessionMessageEntry,\n} from '@earendil-works/pi-coding-agent';\n\nimport type { TranscriptCompactionRecord } from './transcript-format.js';\nimport {\n isTranscriptContextEntry,\n isTranscriptCustomMessageEntry,\n isTranscriptCustomStateEntry,\n type TranscriptStoredRow,\n type XopcTranscriptContextEntry,\n type XopcTranscriptCustomMessageEntry,\n type XopcTranscriptCustomMessageFileEntry,\n type XopcTranscriptCustomStateEntry,\n} from './session-context-for-llm.js';\n\nexport const XOPC_CONTEXT_CUSTOM_TYPE = 'xopc:transcript-row';\n\nfunction generateShortId(byId: Set<string>): string {\n for (let i = 0; i < 100; i++) {\n const id = randomUUID().slice(0, 8);\n if (!byId.has(id)) {\n return id;\n }\n }\n return randomUUID();\n}\n\nfunction contextRowToCustomEntry(\n row: XopcTranscriptContextEntry,\n parentId: string | null,\n byId: Set<string>,\n): CustomEntry {\n return {\n type: 'custom',\n customType: XOPC_CONTEXT_CUSTOM_TYPE,\n id: generateShortId(byId),\n parentId,\n timestamp: row.createdAt ?? new Date().toISOString(),\n data: {\n kind: 'context',\n id: row.id,\n text: row.text,\n data: row.data,\n createdAt: row.createdAt,\n },\n };\n}\n\nfunction customStateRowToCustomEntry(\n row: XopcTranscriptCustomStateEntry,\n parentId: string | null,\n byId: Set<string>,\n): CustomEntry {\n return {\n type: 'custom',\n customType: row.customType?.trim() || 'xopc:custom',\n id: generateShortId(byId),\n parentId,\n timestamp: typeof row.timestamp === 'string' ? row.timestamp : new Date().toISOString(),\n data: row.data,\n };\n}\n\nfunction customMessageRowToEntry(\n row: XopcTranscriptCustomMessageEntry | XopcTranscriptCustomMessageFileEntry,\n parentId: string | null,\n byId: Set<string>,\n): CustomMessageEntry {\n return {\n type: 'custom_message',\n customType: row.customType?.trim() || 'xopc:custom-message',\n id: generateShortId(byId),\n parentId,\n timestamp: typeof row.timestamp === 'string'\n ? row.timestamp\n : typeof row.timestamp === 'number'\n ? new Date(row.timestamp).toISOString()\n : new Date().toISOString(),\n content: typeof row.content === 'string' || Array.isArray(row.content)\n ? row.content as CustomMessageEntry['content']\n : '',\n display: row.display ?? true,\n details: row.details,\n };\n}\n\nfunction compactionRecordToEntry(\n rec: TranscriptCompactionRecord,\n parentId: string | null,\n byId: Set<string>,\n): CompactionEntry {\n return {\n type: 'compaction',\n id: generateShortId(byId),\n parentId,\n timestamp: rec.at,\n summary: rec.summary,\n firstKeptEntryId: String(rec.firstKeptIndex),\n tokensBefore: rec.tokensBefore,\n details: { tokensAfter: rec.tokensAfter, xopc: true },\n fromHook: true,\n };\n}\n\nfunction agentMessageToEntry(\n msg: AgentMessage,\n parentId: string | null,\n byId: Set<string>,\n): SessionMessageEntry {\n return {\n type: 'message',\n id: generateShortId(byId),\n parentId,\n timestamp: new Date().toISOString(),\n message: msg,\n };\n}\n\n/** Convert SQLite transcript rows into pi-coding-agent JSONL file entries (header + tree). */\nexport function storedRowsToFileEntries(params: {\n sessionId: string;\n cwd: string;\n rows: TranscriptStoredRow[];\n appendCompaction?: TranscriptCompactionRecord;\n}): FileEntry[] {\n const byId = new Set<string>();\n const entries: FileEntry[] = [\n {\n type: 'session',\n version: CURRENT_SESSION_VERSION,\n id: params.sessionId,\n timestamp: new Date().toISOString(),\n cwd: params.cwd,\n },\n ];\n\n let parentId: string | null = null;\n for (const row of params.rows) {\n if (isTranscriptContextEntry(row)) {\n const entry = contextRowToCustomEntry(row, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n continue;\n }\n if (isTranscriptCustomStateEntry(row)) {\n const entry = customStateRowToCustomEntry(row, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n continue;\n }\n if (isTranscriptCustomMessageEntry(row)) {\n const entry = customMessageRowToEntry(row, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n continue;\n }\n if ((row as { type?: string }).type === 'compaction') {\n const entry = compactionRecordToEntry(row as unknown as TranscriptCompactionRecord, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n continue;\n }\n const entry = agentMessageToEntry(row as AgentMessage, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n parentId = entry.id;\n }\n\n if (params.appendCompaction) {\n const entry = compactionRecordToEntry(params.appendCompaction, parentId, byId);\n byId.add(entry.id);\n entries.push(entry);\n }\n\n return entries;\n}\n"],"mappings":"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"}
@@ -21,6 +21,8 @@ export interface Message {
21
21
  usage?: {
22
22
  inputTokens?: number;
23
23
  outputTokens?: number;
24
+ cacheReadTokens?: number;
25
+ cacheWriteTokens?: number;
24
26
  totalTokens?: number;
25
27
  };
26
28
  /** Inbound attachment metadata (no base64). */
@@ -73,6 +75,7 @@ export interface GlobalSessionStats {
73
75
  newestSession?: string;
74
76
  byChannel: Record<string, number>;
75
77
  }
78
+ export type SessionType = 'chat' | 'workflow-run' | 'workflow-subagent' | 'cron' | 'heartbeat';
76
79
  /** Session metadata (stored in index) */
77
80
  export interface SessionMetadata {
78
81
  key: string;
@@ -98,11 +101,19 @@ export interface SessionMetadata {
98
101
  * High-level origin for filtering/UI (e.g. `cron`, `heartbeat`, `webchat`).
99
102
  * Distinct from `sourceChannel` (routing namespace).
100
103
  */
101
- sessionType?: string;
104
+ sessionType: SessionType;
105
+ hiddenFromSessionList?: boolean;
106
+ parentSessionKey?: string;
107
+ workflowRunId?: string;
108
+ workflowDefinitionId?: string;
109
+ workflowAgentId?: string;
110
+ workflowAgentLabel?: string;
102
111
  /**
103
112
  * Stable transcript document id (wrapped on-disk format), aligned with OpenClaw `sessionId`.
104
113
  */
105
114
  transcriptId?: string;
115
+ /** Workspace/cwd recorded for the active transcript. */
116
+ cwd?: string;
106
117
  /** First activity time for this session row (ISO), from transcript header when available. */
107
118
  sessionStartedAt?: string;
108
119
  /** Last transcript write / interaction (ISO), updated on each persist. */
@@ -136,6 +147,8 @@ export interface SessionListQuery {
136
147
  channel?: string;
137
148
  tags?: string[];
138
149
  search?: string;
150
+ sessionTypes?: SessionType[];
151
+ includeHidden?: boolean;
139
152
  sortBy?: 'updatedAt' | 'createdAt' | 'messageCount' | 'lastAccessedAt';
140
153
  sortOrder?: 'asc' | 'desc';
141
154
  limit?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/session/types.ts"],"sourcesContent":["// Session management types\n\nimport type { TranscriptStoredRow } from './session-context-for-llm.js';\n\nexport interface Message {\n role: 'system' | 'user' | 'assistant' | 'tool' | 'toolResult';\n /** Plain string or structured content blocks (tool calls, multimodal). */\n content: string | unknown[];\n timestamp?: string;\n tool_call_id?: string;\n tool_calls?: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n }>;\n tool_call_id$?: string;\n toolName?: string;\n isError?: boolean;\n name?: string;\n /** Token usage from the LLM response (assistant messages only). */\n usage?: {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n };\n /** Inbound attachment metadata (no base64). */\n media?: Array<{\n id: string;\n bucket: string;\n type: string;\n mimeType: string;\n name: string;\n size: number;\n uri: string;\n path: string;\n }>;\n}\n\n/** Session status enum */\nexport enum SessionStatus {\n ACTIVE = 'active',\n IDLE = 'idle',\n ARCHIVED = 'archived',\n PINNED = 'pinned',\n}\n\n/** Session routing metadata */\nexport interface SessionRoutingMeta {\n agentId: string;\n source: string;\n accountId: string;\n peerKind: string;\n peerId: string;\n threadId?: string;\n scopeId?: string;\n mainSessionKey?: string;\n lastRoutePolicy?: 'main' | 'session';\n}\n\n/** Session-level statistics (per session) */\nexport interface SessionStats {\n messageCount: number;\n tokenCount: number;\n turnCount?: number;\n lastTurnAt?: number;\n}\n\n/** Global session statistics (aggregate) */\nexport interface GlobalSessionStats {\n totalSessions: number;\n activeSessions: number;\n archivedSessions: number;\n pinnedSessions: number;\n totalMessages: number;\n totalTokens: number;\n oldestSession?: string;\n newestSession?: string;\n byChannel: Record<string, number>;\n}\n\n/** Session metadata (stored in index) */\nexport interface SessionMetadata {\n key: string;\n name?: string;\n status: SessionStatus;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n lastAccessedAt: string;\n messageCount: number;\n estimatedTokens: number;\n compactedCount: number;\n lastFlushedAt?: string;\n flushCount?: number;\n sourceChannel: string;\n sourceChatId: string;\n customData?: Record<string, unknown>;\n /** Routing metadata */\n routing?: SessionRoutingMeta;\n /** Session statistics */\n stats?: SessionStats;\n /**\n * High-level origin for filtering/UI (e.g. `cron`, `heartbeat`, `webchat`).\n * Distinct from `sourceChannel` (routing namespace).\n */\n sessionType?: string;\n /**\n * Stable transcript document id (wrapped on-disk format), aligned with OpenClaw `sessionId`.\n */\n transcriptId?: string;\n /** First activity time for this session row (ISO), from transcript header when available. */\n sessionStartedAt?: string;\n /** Last transcript write / interaction (ISO), updated on each persist. */\n lastInteractionAt?: string;\n /**\n * Epoch ms when the last webchat run was aborted (`POST /api/agent/abort`).\n * Used with `clientCreatedAtMs` on the next POST /api/agent to drop stale queued sends.\n */\n abortCutoffTimestamp?: number;\n}\n\n/** Summary of wrapped transcript (no duplicate message bodies). */\nexport interface SessionTranscriptSummary {\n id: string;\n version: number;\n createdAt: string;\n updatedAt: string;\n compactionCount: number;\n}\n\n/** Session detail (metadata + messages) */\nexport interface SessionDetail extends SessionMetadata {\n messages: Message[];\n /** Present when loaded with `includeTranscriptSummary` (gateway `?include=transcript`). */\n transcriptSummary?: SessionTranscriptSummary;\n /** Present when loaded with `include=transcriptRows` (full on-disk rows, LLM + `kind: 'context'`). */\n transcriptRows?: TranscriptStoredRow[];\n}\n\n/** Session list query parameters */\nexport interface SessionListQuery {\n status?: SessionStatus | SessionStatus[];\n /** Single `sourceChannel`, or comma-separated list (e.g. `telegram,weixin`). */\n channel?: string;\n tags?: string[];\n search?: string;\n sortBy?: 'updatedAt' | 'createdAt' | 'messageCount' | 'lastAccessedAt';\n sortOrder?: 'asc' | 'desc';\n limit?: number;\n offset?: number;\n}\n\n/** Paginated result */\nexport interface PaginatedResult<T> {\n items: T[];\n total: number;\n limit: number;\n offset: number;\n hasMore: boolean;\n}\n\n/** Export format */\nexport type ExportFormat = 'json' | 'markdown';\n\n/** Session export data */\nexport interface SessionExport {\n version: string;\n exportedAt: string;\n metadata: SessionMetadata;\n messages: Message[];\n /** Full on-disk rows (LLM + `kind: 'context'`) for audit / round-trip. */\n transcriptRows: TranscriptStoredRow[];\n}\n\n/** On-disk pre-compaction snapshot (OpenClaw-style checkpoint list). */\nexport interface CompactionCheckpointSummary {\n id: string;\n sizeBytes: number;\n modifiedAt: string;\n}\n\nexport interface CompactionCheckpointDetail extends CompactionCheckpointSummary {\n messageCount: number;\n}\n"],"mappings":";;AA0CA,IAAY,gBAAL,yBAAA,eAAA;AACL,eAAA,YAAA;AACA,eAAA,UAAA;AACA,eAAA,cAAA;AACA,eAAA,YAAA;;KACD"}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/session/types.ts"],"sourcesContent":["// Session management types\n\nimport type { TranscriptStoredRow } from './session-context-for-llm.js';\n\nexport interface Message {\n role: 'system' | 'user' | 'assistant' | 'tool' | 'toolResult';\n /** Plain string or structured content blocks (tool calls, multimodal). */\n content: string | unknown[];\n timestamp?: string;\n tool_call_id?: string;\n tool_calls?: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n }>;\n tool_call_id$?: string;\n toolName?: string;\n isError?: boolean;\n name?: string;\n /** Token usage from the LLM response (assistant messages only). */\n usage?: {\n inputTokens?: number;\n outputTokens?: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n totalTokens?: number;\n };\n /** Inbound attachment metadata (no base64). */\n media?: Array<{\n id: string;\n bucket: string;\n type: string;\n mimeType: string;\n name: string;\n size: number;\n uri: string;\n path: string;\n }>;\n}\n\n/** Session status enum */\nexport enum SessionStatus {\n ACTIVE = 'active',\n IDLE = 'idle',\n ARCHIVED = 'archived',\n PINNED = 'pinned',\n}\n\n/** Session routing metadata */\nexport interface SessionRoutingMeta {\n agentId: string;\n source: string;\n accountId: string;\n peerKind: string;\n peerId: string;\n threadId?: string;\n scopeId?: string;\n mainSessionKey?: string;\n lastRoutePolicy?: 'main' | 'session';\n}\n\n/** Session-level statistics (per session) */\nexport interface SessionStats {\n messageCount: number;\n tokenCount: number;\n turnCount?: number;\n lastTurnAt?: number;\n}\n\n/** Global session statistics (aggregate) */\nexport interface GlobalSessionStats {\n totalSessions: number;\n activeSessions: number;\n archivedSessions: number;\n pinnedSessions: number;\n totalMessages: number;\n totalTokens: number;\n oldestSession?: string;\n newestSession?: string;\n byChannel: Record<string, number>;\n}\n\nexport type SessionType = 'chat' | 'workflow-run' | 'workflow-subagent' | 'cron' | 'heartbeat';\n\n/** Session metadata (stored in index) */\nexport interface SessionMetadata {\n key: string;\n name?: string;\n status: SessionStatus;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n lastAccessedAt: string;\n messageCount: number;\n estimatedTokens: number;\n compactedCount: number;\n lastFlushedAt?: string;\n flushCount?: number;\n sourceChannel: string;\n sourceChatId: string;\n customData?: Record<string, unknown>;\n /** Routing metadata */\n routing?: SessionRoutingMeta;\n /** Session statistics */\n stats?: SessionStats;\n /**\n * High-level origin for filtering/UI (e.g. `cron`, `heartbeat`, `webchat`).\n * Distinct from `sourceChannel` (routing namespace).\n */\n sessionType: SessionType;\n hiddenFromSessionList?: boolean;\n parentSessionKey?: string;\n workflowRunId?: string;\n workflowDefinitionId?: string;\n workflowAgentId?: string;\n workflowAgentLabel?: string;\n /**\n * Stable transcript document id (wrapped on-disk format), aligned with OpenClaw `sessionId`.\n */\n transcriptId?: string;\n /** Workspace/cwd recorded for the active transcript. */\n cwd?: string;\n /** First activity time for this session row (ISO), from transcript header when available. */\n sessionStartedAt?: string;\n /** Last transcript write / interaction (ISO), updated on each persist. */\n lastInteractionAt?: string;\n /**\n * Epoch ms when the last webchat run was aborted (`POST /api/agent/abort`).\n * Used with `clientCreatedAtMs` on the next POST /api/agent to drop stale queued sends.\n */\n abortCutoffTimestamp?: number;\n}\n\n/** Summary of wrapped transcript (no duplicate message bodies). */\nexport interface SessionTranscriptSummary {\n id: string;\n version: number;\n createdAt: string;\n updatedAt: string;\n compactionCount: number;\n}\n\n/** Session detail (metadata + messages) */\nexport interface SessionDetail extends SessionMetadata {\n messages: Message[];\n /** Present when loaded with `includeTranscriptSummary` (gateway `?include=transcript`). */\n transcriptSummary?: SessionTranscriptSummary;\n /** Present when loaded with `include=transcriptRows` (full on-disk rows, LLM + `kind: 'context'`). */\n transcriptRows?: TranscriptStoredRow[];\n}\n\n/** Session list query parameters */\nexport interface SessionListQuery {\n status?: SessionStatus | SessionStatus[];\n /** Single `sourceChannel`, or comma-separated list (e.g. `telegram,weixin`). */\n channel?: string;\n tags?: string[];\n search?: string;\n sessionTypes?: SessionType[];\n includeHidden?: boolean;\n sortBy?: 'updatedAt' | 'createdAt' | 'messageCount' | 'lastAccessedAt';\n sortOrder?: 'asc' | 'desc';\n limit?: number;\n offset?: number;\n}\n\n/** Paginated result */\nexport interface PaginatedResult<T> {\n items: T[];\n total: number;\n limit: number;\n offset: number;\n hasMore: boolean;\n}\n\n/** Export format */\nexport type ExportFormat = 'json' | 'markdown';\n\n/** Session export data */\nexport interface SessionExport {\n version: string;\n exportedAt: string;\n metadata: SessionMetadata;\n messages: Message[];\n /** Full on-disk rows (LLM + `kind: 'context'`) for audit / round-trip. */\n transcriptRows: TranscriptStoredRow[];\n}\n\n/** On-disk pre-compaction snapshot (OpenClaw-style checkpoint list). */\nexport interface CompactionCheckpointSummary {\n id: string;\n sizeBytes: number;\n modifiedAt: string;\n}\n\nexport interface CompactionCheckpointDetail extends CompactionCheckpointSummary {\n messageCount: number;\n}\n"],"mappings":";;AA4CA,IAAY,gBAAL,yBAAA,eAAA;AACL,eAAA,YAAA;AACA,eAAA,UAAA;AACA,eAAA,cAAA;AACA,eAAA,YAAA;;KACD"}
@@ -2,9 +2,9 @@ import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { resolveStateDir } from "../config/paths-state.js";
4
4
  import { init_paths } from "../config/paths.js";
5
+ import { loadPlaywrightCoreModule } from "../browser/providers/playwright-doctor.js";
5
6
  import { getShareStore } from "./share-store.js";
6
7
  import { getSiteShareStore } from "./site-share-store.js";
7
- import { loadPlaywrightCoreModule } from "../browser/providers/playwright-doctor.js";
8
8
  import { mkdir, readFile, stat, unlink, writeFile } from "node:fs/promises";
9
9
  import { join } from "node:path";
10
10
  //#region src/share/share-thumbnail.ts
@@ -0,0 +1,15 @@
1
+ ALTER TABLE sessions ADD COLUMN hidden_from_session_list INTEGER NOT NULL DEFAULT 0;
2
+ ALTER TABLE sessions ADD COLUMN parent_session_key TEXT;
3
+ ALTER TABLE sessions ADD COLUMN workflow_run_id TEXT;
4
+ ALTER TABLE sessions ADD COLUMN workflow_definition_id TEXT;
5
+ ALTER TABLE sessions ADD COLUMN workflow_agent_id TEXT;
6
+ ALTER TABLE sessions ADD COLUMN workflow_agent_label TEXT;
7
+
8
+ UPDATE sessions SET session_type = 'chat' WHERE session_type IS NULL OR TRIM(session_type) = '';
9
+
10
+ CREATE INDEX IF NOT EXISTS idx_sessions_type
11
+ ON sessions(session_type);
12
+ CREATE INDEX IF NOT EXISTS idx_sessions_workflow_run
13
+ ON sessions(workflow_run_id);
14
+ CREATE INDEX IF NOT EXISTS idx_sessions_parent
15
+ ON sessions(parent_session_key);
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
3
3
  /** Baseline schema version applied from schema.sql on first open. */
4
4
  export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 3;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 3;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 4;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
@@ -12,7 +12,7 @@ const log = createLogger("Sqlite:Migrations");
12
12
  /** Baseline schema version applied from schema.sql on first open. */
13
13
  const XOPC_DB_BASELINE_SCHEMA_VERSION = 3;
14
14
  /** Latest schema version this release supports (increment when adding migrations). */
15
- const XOPC_DB_SCHEMA_VERSION = 3;
15
+ const XOPC_DB_SCHEMA_VERSION = 4;
16
16
  const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
17
17
  function resolveMigrationsDir(override) {
18
18
  if (override) return override;
@@ -46,7 +46,7 @@ function applySingleMigration(db, migration) {
46
46
  * Each step runs in its own transaction and updates schema_meta on success.
47
47
  */
48
48
  function applyPendingMigrations(db, options = {}) {
49
- const targetVersion = options.targetVersion ?? 3;
49
+ const targetVersion = options.targetVersion ?? 4;
50
50
  let currentVersion = readSchemaVersion(db);
51
51
  if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
52
52
  if (currentVersion >= targetVersion) return currentVersion;
@@ -62,7 +62,7 @@ function applyPendingMigrations(db, options = {}) {
62
62
  }
63
63
  /** Inspect schema version without mutating the database. */
64
64
  function inspectSchemaMigrationStatus(db, options = {}) {
65
- const appVersion = options.targetVersion ?? 3;
65
+ const appVersion = options.targetVersion ?? 4;
66
66
  const dbVersion = readSchemaVersion(db);
67
67
  if (dbVersion > appVersion) return {
68
68
  dbVersion,
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","names":[],"sources":["../../../../../src/storage/sqlite/migrations/runner.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport type { DatabaseSync } from 'node:sqlite';\n\nimport { createLogger } from '../../../utils/logger.js';\nimport { readSchemaVersion, setSchemaVersion } from '../schema-version.js';\nimport { discoverSqlMigrations } from './discover.js';\nimport {\n DatabaseSchemaMigrationGapError,\n DatabaseSchemaTooNewError,\n} from './errors.js';\nimport type { ApplyMigrationsOptions, SqlMigration } from './types.js';\n\nconst log = createLogger('Sqlite:Migrations');\n\n/** Baseline schema version applied from schema.sql on first open. */\nexport const XOPC_DB_BASELINE_SCHEMA_VERSION = 3;\n\n/** Latest schema version this release supports (increment when adding migrations). */\nexport const XOPC_DB_SCHEMA_VERSION = 3;\n\nconst MODULE_DIR = dirname(fileURLToPath(import.meta.url));\n\nexport function resolveMigrationsDir(override?: string): string {\n if (override) {\n return override;\n }\n // Packaged Electron gateway bundle: `out/server/index.js` + `out/server/migrations/`.\n const siblingDir = join(MODULE_DIR, 'migrations');\n if (existsSync(siblingDir)) {\n return siblingDir;\n }\n // Dev / dist: SQL files live next to `migrations/runner.js`.\n return MODULE_DIR;\n}\n\nfunction migrationByTarget(\n migrations: SqlMigration[],\n targetVersion: number,\n): SqlMigration | undefined {\n return migrations.find((migration) => migration.targetVersion === targetVersion);\n}\n\nfunction applySingleMigration(db: DatabaseSync, migration: SqlMigration): void {\n log.info({ targetVersion: migration.targetVersion, file: migration.filename }, 'Applying SQLite migration');\n db.exec('BEGIN IMMEDIATE');\n try {\n db.exec(migration.sql);\n setSchemaVersion(db, migration.targetVersion);\n db.exec('COMMIT');\n } catch (error) {\n try {\n db.exec('ROLLBACK');\n } catch {\n /* preserve original error */\n }\n const em = error instanceof Error ? error.message : String(error);\n throw new Error(\n `SQLite migration to v${migration.targetVersion} (${migration.filename}) failed: ${em}`,\n { cause: error },\n );\n }\n}\n\n/**\n * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.\n * Each step runs in its own transaction and updates schema_meta on success.\n */\nexport function applyPendingMigrations(\n db: DatabaseSync,\n options: ApplyMigrationsOptions = {},\n): number {\n const targetVersion = options.targetVersion ?? XOPC_DB_SCHEMA_VERSION;\n let currentVersion = readSchemaVersion(db);\n\n if (currentVersion > targetVersion) {\n throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);\n }\n\n if (currentVersion >= targetVersion) {\n return currentVersion;\n }\n\n const migrations = discoverSqlMigrations(resolveMigrationsDir(options.migrationsDir));\n\n while (currentVersion < targetVersion) {\n const nextVersion = currentVersion + 1;\n const migration = migrationByTarget(migrations, nextVersion);\n if (!migration) {\n throw new DatabaseSchemaMigrationGapError(currentVersion, targetVersion, nextVersion);\n }\n applySingleMigration(db, migration);\n currentVersion = nextVersion;\n }\n\n return currentVersion;\n}\n\nexport type SchemaMigrationStatus = {\n dbVersion: number;\n appVersion: number;\n pendingVersions: number[];\n isTooNew: boolean;\n hasMigrationGap: boolean;\n missingVersion: number | null;\n};\n\n/** Inspect schema version without mutating the database. */\nexport function inspectSchemaMigrationStatus(\n db: DatabaseSync,\n options: Pick<ApplyMigrationsOptions, 'migrationsDir' | 'targetVersion'> = {},\n): SchemaMigrationStatus {\n const appVersion = options.targetVersion ?? XOPC_DB_SCHEMA_VERSION;\n const dbVersion = readSchemaVersion(db);\n const isTooNew = dbVersion > appVersion;\n\n if (isTooNew) {\n return {\n dbVersion,\n appVersion,\n pendingVersions: [],\n isTooNew: true,\n hasMigrationGap: false,\n missingVersion: null,\n };\n }\n\n const migrations = discoverSqlMigrations(resolveMigrationsDir(options.migrationsDir));\n const pendingVersions: number[] = [];\n let hasMigrationGap = false;\n let missingVersion: number | null = null;\n\n for (let version = dbVersion + 1; version <= appVersion; version++) {\n if (migrationByTarget(migrations, version)) {\n pendingVersions.push(version);\n } else {\n hasMigrationGap = true;\n missingVersion = version;\n break;\n }\n }\n\n return {\n dbVersion,\n appVersion,\n pendingVersions,\n isTooNew: false,\n hasMigrationGap,\n missingVersion,\n };\n}\n"],"mappings":";;;;;;;;;aAMwD;AASxD,MAAM,MAAM,aAAa,oBAAoB;;AAG7C,MAAa,kCAAkC;;AAG/C,MAAa,yBAAyB;AAEtC,MAAM,aAAa,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC;AAE1D,SAAgB,qBAAqB,UAA2B;AAC9D,KAAI,SACF,QAAO;CAGT,MAAM,aAAa,KAAK,YAAY,aAAa;AACjD,KAAI,WAAW,WAAW,CACxB,QAAO;AAGT,QAAO;;AAGT,SAAS,kBACP,YACA,eAC0B;AAC1B,QAAO,WAAW,MAAM,cAAc,UAAU,kBAAkB,cAAc;;AAGlF,SAAS,qBAAqB,IAAkB,WAA+B;AAC7E,KAAI,KAAK;EAAE,eAAe,UAAU;EAAe,MAAM,UAAU;EAAU,EAAE,4BAA4B;AAC3G,IAAG,KAAK,kBAAkB;AAC1B,KAAI;AACF,KAAG,KAAK,UAAU,IAAI;AACtB,mBAAiB,IAAI,UAAU,cAAc;AAC7C,KAAG,KAAK,SAAS;UACV,OAAO;AACd,MAAI;AACF,MAAG,KAAK,WAAW;UACb;EAGR,MAAM,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACjE,QAAM,IAAI,MACR,wBAAwB,UAAU,cAAc,IAAI,UAAU,SAAS,YAAY,MACnF,EAAE,OAAO,OAAO,CACjB;;;;;;;AAQL,SAAgB,uBACd,IACA,UAAkC,EAAE,EAC5B;CACR,MAAM,gBAAgB,QAAQ,iBAAA;CAC9B,IAAI,iBAAiB,kBAAkB,GAAG;AAE1C,KAAI,iBAAiB,cACnB,OAAM,IAAI,0BAA0B,gBAAgB,cAAc;AAGpE,KAAI,kBAAkB,cACpB,QAAO;CAGT,MAAM,aAAa,sBAAsB,qBAAqB,QAAQ,cAAc,CAAC;AAErF,QAAO,iBAAiB,eAAe;EACrC,MAAM,cAAc,iBAAiB;EACrC,MAAM,YAAY,kBAAkB,YAAY,YAAY;AAC5D,MAAI,CAAC,UACH,OAAM,IAAI,gCAAgC,gBAAgB,eAAe,YAAY;AAEvF,uBAAqB,IAAI,UAAU;AACnC,mBAAiB;;AAGnB,QAAO;;;AAaT,SAAgB,6BACd,IACA,UAA2E,EAAE,EACtD;CACvB,MAAM,aAAa,QAAQ,iBAAA;CAC3B,MAAM,YAAY,kBAAkB,GAAG;AAGvC,KAFiB,YAAY,WAG3B,QAAO;EACL;EACA;EACA,iBAAiB,EAAE;EACnB,UAAU;EACV,iBAAiB;EACjB,gBAAgB;EACjB;CAGH,MAAM,aAAa,sBAAsB,qBAAqB,QAAQ,cAAc,CAAC;CACrF,MAAM,kBAA4B,EAAE;CACpC,IAAI,kBAAkB;CACtB,IAAI,iBAAgC;AAEpC,MAAK,IAAI,UAAU,YAAY,GAAG,WAAW,YAAY,UACvD,KAAI,kBAAkB,YAAY,QAAQ,CACxC,iBAAgB,KAAK,QAAQ;MACxB;AACL,oBAAkB;AAClB,mBAAiB;AACjB;;AAIJ,QAAO;EACL;EACA;EACA;EACA,UAAU;EACV;EACA;EACD"}
1
+ {"version":3,"file":"runner.js","names":[],"sources":["../../../../../src/storage/sqlite/migrations/runner.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport type { DatabaseSync } from 'node:sqlite';\n\nimport { createLogger } from '../../../utils/logger.js';\nimport { readSchemaVersion, setSchemaVersion } from '../schema-version.js';\nimport { discoverSqlMigrations } from './discover.js';\nimport {\n DatabaseSchemaMigrationGapError,\n DatabaseSchemaTooNewError,\n} from './errors.js';\nimport type { ApplyMigrationsOptions, SqlMigration } from './types.js';\n\nconst log = createLogger('Sqlite:Migrations');\n\n/** Baseline schema version applied from schema.sql on first open. */\nexport const XOPC_DB_BASELINE_SCHEMA_VERSION = 3;\n\n/** Latest schema version this release supports (increment when adding migrations). */\nexport const XOPC_DB_SCHEMA_VERSION = 4;\n\nconst MODULE_DIR = dirname(fileURLToPath(import.meta.url));\n\nexport function resolveMigrationsDir(override?: string): string {\n if (override) {\n return override;\n }\n // Packaged Electron gateway bundle: `out/server/index.js` + `out/server/migrations/`.\n const siblingDir = join(MODULE_DIR, 'migrations');\n if (existsSync(siblingDir)) {\n return siblingDir;\n }\n // Dev / dist: SQL files live next to `migrations/runner.js`.\n return MODULE_DIR;\n}\n\nfunction migrationByTarget(\n migrations: SqlMigration[],\n targetVersion: number,\n): SqlMigration | undefined {\n return migrations.find((migration) => migration.targetVersion === targetVersion);\n}\n\nfunction applySingleMigration(db: DatabaseSync, migration: SqlMigration): void {\n log.info({ targetVersion: migration.targetVersion, file: migration.filename }, 'Applying SQLite migration');\n db.exec('BEGIN IMMEDIATE');\n try {\n db.exec(migration.sql);\n setSchemaVersion(db, migration.targetVersion);\n db.exec('COMMIT');\n } catch (error) {\n try {\n db.exec('ROLLBACK');\n } catch {\n /* preserve original error */\n }\n const em = error instanceof Error ? error.message : String(error);\n throw new Error(\n `SQLite migration to v${migration.targetVersion} (${migration.filename}) failed: ${em}`,\n { cause: error },\n );\n }\n}\n\n/**\n * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.\n * Each step runs in its own transaction and updates schema_meta on success.\n */\nexport function applyPendingMigrations(\n db: DatabaseSync,\n options: ApplyMigrationsOptions = {},\n): number {\n const targetVersion = options.targetVersion ?? XOPC_DB_SCHEMA_VERSION;\n let currentVersion = readSchemaVersion(db);\n\n if (currentVersion > targetVersion) {\n throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);\n }\n\n if (currentVersion >= targetVersion) {\n return currentVersion;\n }\n\n const migrations = discoverSqlMigrations(resolveMigrationsDir(options.migrationsDir));\n\n while (currentVersion < targetVersion) {\n const nextVersion = currentVersion + 1;\n const migration = migrationByTarget(migrations, nextVersion);\n if (!migration) {\n throw new DatabaseSchemaMigrationGapError(currentVersion, targetVersion, nextVersion);\n }\n applySingleMigration(db, migration);\n currentVersion = nextVersion;\n }\n\n return currentVersion;\n}\n\nexport type SchemaMigrationStatus = {\n dbVersion: number;\n appVersion: number;\n pendingVersions: number[];\n isTooNew: boolean;\n hasMigrationGap: boolean;\n missingVersion: number | null;\n};\n\n/** Inspect schema version without mutating the database. */\nexport function inspectSchemaMigrationStatus(\n db: DatabaseSync,\n options: Pick<ApplyMigrationsOptions, 'migrationsDir' | 'targetVersion'> = {},\n): SchemaMigrationStatus {\n const appVersion = options.targetVersion ?? XOPC_DB_SCHEMA_VERSION;\n const dbVersion = readSchemaVersion(db);\n const isTooNew = dbVersion > appVersion;\n\n if (isTooNew) {\n return {\n dbVersion,\n appVersion,\n pendingVersions: [],\n isTooNew: true,\n hasMigrationGap: false,\n missingVersion: null,\n };\n }\n\n const migrations = discoverSqlMigrations(resolveMigrationsDir(options.migrationsDir));\n const pendingVersions: number[] = [];\n let hasMigrationGap = false;\n let missingVersion: number | null = null;\n\n for (let version = dbVersion + 1; version <= appVersion; version++) {\n if (migrationByTarget(migrations, version)) {\n pendingVersions.push(version);\n } else {\n hasMigrationGap = true;\n missingVersion = version;\n break;\n }\n }\n\n return {\n dbVersion,\n appVersion,\n pendingVersions,\n isTooNew: false,\n hasMigrationGap,\n missingVersion,\n };\n}\n"],"mappings":";;;;;;;;;aAMwD;AASxD,MAAM,MAAM,aAAa,oBAAoB;;AAG7C,MAAa,kCAAkC;;AAG/C,MAAa,yBAAyB;AAEtC,MAAM,aAAa,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC;AAE1D,SAAgB,qBAAqB,UAA2B;AAC9D,KAAI,SACF,QAAO;CAGT,MAAM,aAAa,KAAK,YAAY,aAAa;AACjD,KAAI,WAAW,WAAW,CACxB,QAAO;AAGT,QAAO;;AAGT,SAAS,kBACP,YACA,eAC0B;AAC1B,QAAO,WAAW,MAAM,cAAc,UAAU,kBAAkB,cAAc;;AAGlF,SAAS,qBAAqB,IAAkB,WAA+B;AAC7E,KAAI,KAAK;EAAE,eAAe,UAAU;EAAe,MAAM,UAAU;EAAU,EAAE,4BAA4B;AAC3G,IAAG,KAAK,kBAAkB;AAC1B,KAAI;AACF,KAAG,KAAK,UAAU,IAAI;AACtB,mBAAiB,IAAI,UAAU,cAAc;AAC7C,KAAG,KAAK,SAAS;UACV,OAAO;AACd,MAAI;AACF,MAAG,KAAK,WAAW;UACb;EAGR,MAAM,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACjE,QAAM,IAAI,MACR,wBAAwB,UAAU,cAAc,IAAI,UAAU,SAAS,YAAY,MACnF,EAAE,OAAO,OAAO,CACjB;;;;;;;AAQL,SAAgB,uBACd,IACA,UAAkC,EAAE,EAC5B;CACR,MAAM,gBAAgB,QAAQ,iBAAA;CAC9B,IAAI,iBAAiB,kBAAkB,GAAG;AAE1C,KAAI,iBAAiB,cACnB,OAAM,IAAI,0BAA0B,gBAAgB,cAAc;AAGpE,KAAI,kBAAkB,cACpB,QAAO;CAGT,MAAM,aAAa,sBAAsB,qBAAqB,QAAQ,cAAc,CAAC;AAErF,QAAO,iBAAiB,eAAe;EACrC,MAAM,cAAc,iBAAiB;EACrC,MAAM,YAAY,kBAAkB,YAAY,YAAY;AAC5D,MAAI,CAAC,UACH,OAAM,IAAI,gCAAgC,gBAAgB,eAAe,YAAY;AAEvF,uBAAqB,IAAI,UAAU;AACnC,mBAAiB;;AAGnB,QAAO;;;AAaT,SAAgB,6BACd,IACA,UAA2E,EAAE,EACtD;CACvB,MAAM,aAAa,QAAQ,iBAAA;CAC3B,MAAM,YAAY,kBAAkB,GAAG;AAGvC,KAFiB,YAAY,WAG3B,QAAO;EACL;EACA;EACA,iBAAiB,EAAE;EACnB,UAAU;EACV,iBAAiB;EACjB,gBAAgB;EACjB;CAGH,MAAM,aAAa,sBAAsB,qBAAqB,QAAQ,cAAc,CAAC;CACrF,MAAM,kBAA4B,EAAE;CACpC,IAAI,kBAAkB;CACtB,IAAI,iBAAgC;AAEpC,MAAK,IAAI,UAAU,YAAY,GAAG,WAAW,YAAY,UACvD,KAAI,kBAAkB,YAAY,QAAQ,CACxC,iBAAgB,KAAK,QAAQ;MACxB;AACL,oBAAkB;AAClB,mBAAiB;AACjB;;AAIJ,QAAO;EACL;EACA;EACA;EACA,UAAU;EACV;EACA;EACD"}
@@ -19,7 +19,7 @@ const log = createLogger('Sqlite:Migrations');
19
19
  export const XOPC_DB_BASELINE_SCHEMA_VERSION = 3;
20
20
 
21
21
  /** Latest schema version this release supports (increment when adding migrations). */
22
- export const XOPC_DB_SCHEMA_VERSION = 3;
22
+ export const XOPC_DB_SCHEMA_VERSION = 4;
23
23
 
24
24
  const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
25
25
 
@@ -17,6 +17,12 @@ export type SessionRow = {
17
17
  source_channel: string;
18
18
  source_chat_id: string;
19
19
  session_type: string | null;
20
+ hidden_from_session_list: number | null;
21
+ parent_session_key: string | null;
22
+ workflow_run_id: string | null;
23
+ workflow_definition_id: string | null;
24
+ workflow_agent_id: string | null;
25
+ workflow_agent_label: string | null;
20
26
  routing_json: string | null;
21
27
  custom_data_json: string | null;
22
28
  abort_cutoff_timestamp: number | null;
@@ -27,6 +33,7 @@ export type SessionRow = {
27
33
  flush_count: number;
28
34
  thinking_level: string | null;
29
35
  verbose_level: string | null;
36
+ cwd?: string | null;
30
37
  };
31
38
  export type TranscriptEntryRow = {
32
39
  entry_id: string;
@@ -63,7 +70,13 @@ export declare function metadataToSessionInsert(sessionKey: string, transcriptId
63
70
  lastInteractionAt: number | null;
64
71
  sourceChannel: string;
65
72
  sourceChatId: string;
66
- sessionType: string | null;
73
+ sessionType: string;
74
+ hiddenFromSessionList: number;
75
+ parentSessionKey: string | null;
76
+ workflowRunId: string | null;
77
+ workflowDefinitionId: string | null;
78
+ workflowAgentId: string | null;
79
+ workflowAgentLabel: string | null;
67
80
  routingJson: string | null;
68
81
  customDataJson: string | null;
69
82
  abortCutoffTimestamp: number | null;
@@ -39,6 +39,12 @@ function sessionRowToMetadata(sessionKey, row) {
39
39
  sourceChannel: diskSc || keySource,
40
40
  sourceChatId: diskChat || keyChatId,
41
41
  sessionType: row.session_type ?? defaults.sessionType,
42
+ hiddenFromSessionList: Boolean(row.hidden_from_session_list),
43
+ parentSessionKey: row.parent_session_key ?? void 0,
44
+ workflowRunId: row.workflow_run_id ?? void 0,
45
+ workflowDefinitionId: row.workflow_definition_id ?? void 0,
46
+ workflowAgentId: row.workflow_agent_id ?? void 0,
47
+ workflowAgentLabel: row.workflow_agent_label ?? void 0,
42
48
  routing,
43
49
  customData,
44
50
  abortCutoffTimestamp: row.abort_cutoff_timestamp ?? void 0,
@@ -48,6 +54,7 @@ function sessionRowToMetadata(sessionKey, row) {
48
54
  lastFlushedAt: row.last_flushed_at ?? void 0,
49
55
  flushCount: row.flush_count,
50
56
  transcriptId: row.current_transcript_id,
57
+ cwd: row.cwd ?? void 0,
51
58
  stats: {
52
59
  messageCount: row.message_count,
53
60
  tokenCount: row.estimated_tokens,
@@ -71,7 +78,13 @@ function metadataToSessionInsert(sessionKey, transcriptId, metadata, thinkingLev
71
78
  lastInteractionAt: metadata.lastInteractionAt ? Date.parse(metadata.lastInteractionAt) : null,
72
79
  sourceChannel: metadata.sourceChannel,
73
80
  sourceChatId: metadata.sourceChatId,
74
- sessionType: metadata.sessionType ?? null,
81
+ sessionType: metadata.sessionType,
82
+ hiddenFromSessionList: metadata.hiddenFromSessionList ? 1 : 0,
83
+ parentSessionKey: metadata.parentSessionKey ?? null,
84
+ workflowRunId: metadata.workflowRunId ?? null,
85
+ workflowDefinitionId: metadata.workflowDefinitionId ?? null,
86
+ workflowAgentId: metadata.workflowAgentId ?? null,
87
+ workflowAgentLabel: metadata.workflowAgentLabel ?? null,
75
88
  routingJson: metadata.routing ? JSON.stringify(metadata.routing) : null,
76
89
  customDataJson: metadata.customData ? JSON.stringify(metadata.customData) : null,
77
90
  abortCutoffTimestamp: metadata.abortCutoffTimestamp ?? null,
@@ -1 +1 @@
1
- {"version":3,"file":"row-mappers.js","names":["msg"],"sources":["../../../../src/storage/sqlite/row-mappers.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\n\nimport type { SessionAgentConfig } from '../../session/config-types.js';\nimport {\n isTranscriptContextEntry,\n type TranscriptStoredRow,\n type XopcTranscriptContextEntry,\n} from '../../session/session-context-for-llm.js';\nimport { SessionStatus, type GlobalSessionStats, type SessionMetadata } from '../../session/types.js';\nimport {\n buildDefaultSessionMetadata,\n parseSessionKeySource,\n resolveAgentIdFromSessionKey,\n} from './session-metadata.js';\n\nexport type SessionRow = {\n session_key: string;\n agent_id: string;\n current_transcript_id: string;\n status: string;\n name: string | null;\n tags_json: string;\n created_at: number;\n updated_at: number;\n last_accessed_at: number;\n session_started_at: number | null;\n last_interaction_at: number | null;\n source_channel: string;\n source_chat_id: string;\n session_type: string | null;\n routing_json: string | null;\n custom_data_json: string | null;\n abort_cutoff_timestamp: number | null;\n message_count: number;\n estimated_tokens: number;\n compacted_count: number;\n last_flushed_at: string | null;\n flush_count: number;\n thinking_level: string | null;\n verbose_level: string | null;\n};\n\nexport type TranscriptEntryRow = {\n entry_id: string;\n transcript_id: string;\n seq: number;\n entry_kind: string;\n role: string | null;\n payload_json: string;\n created_at: number;\n};\n\nexport type SessionConfigRow = {\n session_key: string;\n thinking_level: string | null;\n reasoning_level: string | null;\n verbose_level: string | null;\n elevated_mode: string | null;\n model_override: string | null;\n provider_override: string | null;\n working_directory_override: string | null;\n updated_at: number;\n};\n\nfunction parseJson<T>(raw: string | null | undefined): T | undefined {\n if (!raw?.trim()) {\n return undefined;\n }\n try {\n return JSON.parse(raw) as T;\n } catch {\n return undefined;\n }\n}\n\nfunction isoFromMs(ms: number | null | undefined): string | undefined {\n if (ms == null || !Number.isFinite(ms)) {\n return undefined;\n }\n return new Date(ms).toISOString();\n}\n\nexport function sessionRowToMetadata(sessionKey: string, row: SessionRow): SessionMetadata {\n const defaults = buildDefaultSessionMetadata(sessionKey);\n const { channel: keySource, chatId: keyChatId } = parseSessionKeySource(sessionKey);\n const routing = parseJson<SessionMetadata['routing']>(row.routing_json) ?? defaults.routing;\n const customData = parseJson<Record<string, unknown>>(row.custom_data_json) ?? defaults.customData;\n const tags = parseJson<string[]>(row.tags_json) ?? [];\n const createdAt = isoFromMs(row.created_at) ?? defaults.createdAt;\n const updatedAt = isoFromMs(row.updated_at) ?? defaults.updatedAt;\n const lastAccessedAt = isoFromMs(row.last_accessed_at) ?? defaults.lastAccessedAt;\n const diskSc = row.source_channel?.trim() ?? '';\n const diskChat = row.source_chat_id?.trim() ?? '';\n\n return {\n ...defaults,\n key: sessionKey,\n status: row.status as SessionStatus,\n name: row.name ?? undefined,\n tags,\n createdAt,\n updatedAt,\n lastAccessedAt,\n sessionStartedAt: isoFromMs(row.session_started_at),\n lastInteractionAt: isoFromMs(row.last_interaction_at),\n sourceChannel: diskSc || keySource,\n sourceChatId: diskChat || keyChatId,\n sessionType: row.session_type ?? defaults.sessionType,\n routing,\n customData,\n abortCutoffTimestamp: row.abort_cutoff_timestamp ?? undefined,\n messageCount: row.message_count,\n estimatedTokens: row.estimated_tokens,\n compactedCount: row.compacted_count,\n lastFlushedAt: row.last_flushed_at ?? undefined,\n flushCount: row.flush_count,\n transcriptId: row.current_transcript_id,\n stats: {\n messageCount: row.message_count,\n tokenCount: row.estimated_tokens,\n lastTurnAt: row.last_interaction_at ?? undefined,\n },\n };\n}\n\nexport function metadataToSessionInsert(\n sessionKey: string,\n transcriptId: string,\n metadata: SessionMetadata,\n thinkingLevel?: string | null,\n verboseLevel?: string | null,\n): {\n sessionKey: string;\n agentId: string;\n transcriptId: string;\n status: string;\n name: string | null;\n tagsJson: string;\n createdAt: number;\n updatedAt: number;\n lastAccessedAt: number;\n sessionStartedAt: number | null;\n lastInteractionAt: number | null;\n sourceChannel: string;\n sourceChatId: string;\n sessionType: string | null;\n routingJson: string | null;\n customDataJson: string | null;\n abortCutoffTimestamp: number | null;\n messageCount: number;\n estimatedTokens: number;\n compactedCount: number;\n lastFlushedAt: string | null;\n flushCount: number;\n thinkingLevel: string | null;\n verboseLevel: string | null;\n} {\n const now = Date.now();\n return {\n sessionKey,\n agentId: resolveAgentIdFromSessionKey(sessionKey),\n transcriptId,\n status: metadata.status,\n name: metadata.name ?? null,\n tagsJson: JSON.stringify(metadata.tags ?? []),\n createdAt: Date.parse(metadata.createdAt) || now,\n updatedAt: Date.parse(metadata.updatedAt) || now,\n lastAccessedAt: Date.parse(metadata.lastAccessedAt) || now,\n sessionStartedAt: metadata.sessionStartedAt ? Date.parse(metadata.sessionStartedAt) : now,\n lastInteractionAt: metadata.lastInteractionAt ? Date.parse(metadata.lastInteractionAt) : null,\n sourceChannel: metadata.sourceChannel,\n sourceChatId: metadata.sourceChatId,\n sessionType: metadata.sessionType ?? null,\n routingJson: metadata.routing ? JSON.stringify(metadata.routing) : null,\n customDataJson: metadata.customData ? JSON.stringify(metadata.customData) : null,\n abortCutoffTimestamp: metadata.abortCutoffTimestamp ?? null,\n messageCount: metadata.messageCount,\n estimatedTokens: metadata.estimatedTokens,\n compactedCount: metadata.compactedCount,\n lastFlushedAt: metadata.lastFlushedAt ?? null,\n flushCount: metadata.flushCount ?? 0,\n thinkingLevel: thinkingLevel ?? null,\n verboseLevel: verboseLevel ?? null,\n };\n}\n\nexport function sessionConfigRowToConfig(row: SessionConfigRow): SessionAgentConfig {\n return {\n ...(row.thinking_level ? { thinkingLevel: row.thinking_level as SessionAgentConfig['thinkingLevel'] } : {}),\n ...(row.reasoning_level ? { reasoningLevel: row.reasoning_level as SessionAgentConfig['reasoningLevel'] } : {}),\n ...(row.verbose_level ? { verboseLevel: row.verbose_level as SessionAgentConfig['verboseLevel'] } : {}),\n ...(row.elevated_mode ? { elevatedMode: row.elevated_mode as SessionAgentConfig['elevatedMode'] } : {}),\n ...(row.model_override ? { modelOverride: row.model_override } : {}),\n ...(row.provider_override ? { providerOverride: row.provider_override } : {}),\n ...(row.working_directory_override ? { workingDirectoryOverride: row.working_directory_override } : {}),\n updatedAt: row.updated_at,\n };\n}\n\nexport function transcriptEntryRowToStoredRow(row: TranscriptEntryRow): TranscriptStoredRow {\n const payload = JSON.parse(row.payload_json) as TranscriptStoredRow;\n return payload;\n}\n\nexport function classifyStoredRow(row: TranscriptStoredRow): {\n entryKind: 'message' | 'context' | 'compaction';\n role: string | null;\n} {\n if (isTranscriptContextEntry(row)) {\n return { entryKind: 'context', role: null };\n }\n const record = row as AgentMessage & { type?: string };\n if (record.type === 'compaction' || (row as { kind?: string }).kind === 'compaction') {\n return { entryKind: 'compaction', role: null };\n }\n return { entryKind: 'message', role: record.role ?? null };\n}\n\nexport function extractFtsContent(row: TranscriptStoredRow): string {\n if (isTranscriptContextEntry(row)) {\n const ctx = row as XopcTranscriptContextEntry;\n return [ctx.text, ctx.id].filter(Boolean).join(' ');\n }\n const msg = row as AgentMessage;\n return extractTextFromMessageContent((msg as { content?: unknown }).content);\n}\n\nfunction extractTextFromMessageContent(content: unknown): string {\n if (typeof content === 'string') {\n return content;\n }\n if (!Array.isArray(content)) {\n return '';\n }\n const parts: string[] = [];\n for (const block of content) {\n if (!block || typeof block !== 'object') {\n continue;\n }\n const type = (block as { type?: string }).type;\n if (type === 'text' && typeof (block as { text?: string }).text === 'string') {\n parts.push((block as { text: string }).text);\n }\n }\n return parts.join('\\n');\n}\n\nexport function estimateTokensFromMessages(messages: AgentMessage[]): number {\n let total = 0;\n for (const msg of messages) {\n const content = (msg as { content?: unknown }).content;\n const text = extractTextFromMessageContent(content);\n total += Math.ceil(text.length / 4);\n }\n return total;\n}\n\nexport function buildGlobalSessionStats(sessions: SessionMetadata[]): GlobalSessionStats {\n const byChannel: Record<string, number> = {};\n for (const session of sessions) {\n byChannel[session.sourceChannel] = (byChannel[session.sourceChannel] || 0) + 1;\n }\n let oldestSession: string | undefined;\n let newestSession: string | undefined;\n if (sessions.length > 0) {\n const sorted = [...sessions].sort((a, b) => a.createdAt.localeCompare(b.createdAt));\n oldestSession = sorted[0]!.createdAt;\n newestSession = sorted[sorted.length - 1]!.createdAt;\n }\n return {\n totalSessions: sessions.length,\n activeSessions: sessions.filter(\n (s) => s.status === SessionStatus.ACTIVE || s.status === SessionStatus.IDLE,\n ).length,\n archivedSessions: sessions.filter((s) => s.status === SessionStatus.ARCHIVED).length,\n pinnedSessions: sessions.filter((s) => s.status === SessionStatus.PINNED).length,\n totalMessages: sessions.reduce((sum, s) => sum + s.messageCount, 0),\n totalTokens: sessions.reduce((sum, s) => sum + s.estimatedTokens, 0),\n oldestSession,\n newestSession,\n byChannel,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"row-mappers.js","names":["msg"],"sources":["../../../../src/storage/sqlite/row-mappers.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\n\nimport type { SessionAgentConfig } from '../../session/config-types.js';\nimport {\n isTranscriptContextEntry,\n type TranscriptStoredRow,\n type XopcTranscriptContextEntry,\n} from '../../session/session-context-for-llm.js';\nimport { SessionStatus, type GlobalSessionStats, type SessionMetadata } from '../../session/types.js';\nimport {\n buildDefaultSessionMetadata,\n parseSessionKeySource,\n resolveAgentIdFromSessionKey,\n} from './session-metadata.js';\n\nexport type SessionRow = {\n session_key: string;\n agent_id: string;\n current_transcript_id: string;\n status: string;\n name: string | null;\n tags_json: string;\n created_at: number;\n updated_at: number;\n last_accessed_at: number;\n session_started_at: number | null;\n last_interaction_at: number | null;\n source_channel: string;\n source_chat_id: string;\n session_type: string | null;\n hidden_from_session_list: number | null;\n parent_session_key: string | null;\n workflow_run_id: string | null;\n workflow_definition_id: string | null;\n workflow_agent_id: string | null;\n workflow_agent_label: string | null;\n routing_json: string | null;\n custom_data_json: string | null;\n abort_cutoff_timestamp: number | null;\n message_count: number;\n estimated_tokens: number;\n compacted_count: number;\n last_flushed_at: string | null;\n flush_count: number;\n thinking_level: string | null;\n verbose_level: string | null;\n cwd?: string | null;\n};\n\nexport type TranscriptEntryRow = {\n entry_id: string;\n transcript_id: string;\n seq: number;\n entry_kind: string;\n role: string | null;\n payload_json: string;\n created_at: number;\n};\n\nexport type SessionConfigRow = {\n session_key: string;\n thinking_level: string | null;\n reasoning_level: string | null;\n verbose_level: string | null;\n elevated_mode: string | null;\n model_override: string | null;\n provider_override: string | null;\n working_directory_override: string | null;\n updated_at: number;\n};\n\nfunction parseJson<T>(raw: string | null | undefined): T | undefined {\n if (!raw?.trim()) {\n return undefined;\n }\n try {\n return JSON.parse(raw) as T;\n } catch {\n return undefined;\n }\n}\n\nfunction isoFromMs(ms: number | null | undefined): string | undefined {\n if (ms == null || !Number.isFinite(ms)) {\n return undefined;\n }\n return new Date(ms).toISOString();\n}\n\nexport function sessionRowToMetadata(sessionKey: string, row: SessionRow): SessionMetadata {\n const defaults = buildDefaultSessionMetadata(sessionKey);\n const { channel: keySource, chatId: keyChatId } = parseSessionKeySource(sessionKey);\n const routing = parseJson<SessionMetadata['routing']>(row.routing_json) ?? defaults.routing;\n const customData = parseJson<Record<string, unknown>>(row.custom_data_json) ?? defaults.customData;\n const tags = parseJson<string[]>(row.tags_json) ?? [];\n const createdAt = isoFromMs(row.created_at) ?? defaults.createdAt;\n const updatedAt = isoFromMs(row.updated_at) ?? defaults.updatedAt;\n const lastAccessedAt = isoFromMs(row.last_accessed_at) ?? defaults.lastAccessedAt;\n const diskSc = row.source_channel?.trim() ?? '';\n const diskChat = row.source_chat_id?.trim() ?? '';\n\n return {\n ...defaults,\n key: sessionKey,\n status: row.status as SessionStatus,\n name: row.name ?? undefined,\n tags,\n createdAt,\n updatedAt,\n lastAccessedAt,\n sessionStartedAt: isoFromMs(row.session_started_at),\n lastInteractionAt: isoFromMs(row.last_interaction_at),\n sourceChannel: diskSc || keySource,\n sourceChatId: diskChat || keyChatId,\n sessionType: (row.session_type ?? defaults.sessionType) as SessionMetadata['sessionType'],\n hiddenFromSessionList: Boolean(row.hidden_from_session_list),\n parentSessionKey: row.parent_session_key ?? undefined,\n workflowRunId: row.workflow_run_id ?? undefined,\n workflowDefinitionId: row.workflow_definition_id ?? undefined,\n workflowAgentId: row.workflow_agent_id ?? undefined,\n workflowAgentLabel: row.workflow_agent_label ?? undefined,\n routing,\n customData,\n abortCutoffTimestamp: row.abort_cutoff_timestamp ?? undefined,\n messageCount: row.message_count,\n estimatedTokens: row.estimated_tokens,\n compactedCount: row.compacted_count,\n lastFlushedAt: row.last_flushed_at ?? undefined,\n flushCount: row.flush_count,\n transcriptId: row.current_transcript_id,\n cwd: row.cwd ?? undefined,\n stats: {\n messageCount: row.message_count,\n tokenCount: row.estimated_tokens,\n lastTurnAt: row.last_interaction_at ?? undefined,\n },\n };\n}\n\nexport function metadataToSessionInsert(\n sessionKey: string,\n transcriptId: string,\n metadata: SessionMetadata,\n thinkingLevel?: string | null,\n verboseLevel?: string | null,\n): {\n sessionKey: string;\n agentId: string;\n transcriptId: string;\n status: string;\n name: string | null;\n tagsJson: string;\n createdAt: number;\n updatedAt: number;\n lastAccessedAt: number;\n sessionStartedAt: number | null;\n lastInteractionAt: number | null;\n sourceChannel: string;\n sourceChatId: string;\n sessionType: string;\n hiddenFromSessionList: number;\n parentSessionKey: string | null;\n workflowRunId: string | null;\n workflowDefinitionId: string | null;\n workflowAgentId: string | null;\n workflowAgentLabel: string | null;\n routingJson: string | null;\n customDataJson: string | null;\n abortCutoffTimestamp: number | null;\n messageCount: number;\n estimatedTokens: number;\n compactedCount: number;\n lastFlushedAt: string | null;\n flushCount: number;\n thinkingLevel: string | null;\n verboseLevel: string | null;\n} {\n const now = Date.now();\n return {\n sessionKey,\n agentId: resolveAgentIdFromSessionKey(sessionKey),\n transcriptId,\n status: metadata.status,\n name: metadata.name ?? null,\n tagsJson: JSON.stringify(metadata.tags ?? []),\n createdAt: Date.parse(metadata.createdAt) || now,\n updatedAt: Date.parse(metadata.updatedAt) || now,\n lastAccessedAt: Date.parse(metadata.lastAccessedAt) || now,\n sessionStartedAt: metadata.sessionStartedAt ? Date.parse(metadata.sessionStartedAt) : now,\n lastInteractionAt: metadata.lastInteractionAt ? Date.parse(metadata.lastInteractionAt) : null,\n sourceChannel: metadata.sourceChannel,\n sourceChatId: metadata.sourceChatId,\n sessionType: metadata.sessionType,\n hiddenFromSessionList: metadata.hiddenFromSessionList ? 1 : 0,\n parentSessionKey: metadata.parentSessionKey ?? null,\n workflowRunId: metadata.workflowRunId ?? null,\n workflowDefinitionId: metadata.workflowDefinitionId ?? null,\n workflowAgentId: metadata.workflowAgentId ?? null,\n workflowAgentLabel: metadata.workflowAgentLabel ?? null,\n routingJson: metadata.routing ? JSON.stringify(metadata.routing) : null,\n customDataJson: metadata.customData ? JSON.stringify(metadata.customData) : null,\n abortCutoffTimestamp: metadata.abortCutoffTimestamp ?? null,\n messageCount: metadata.messageCount,\n estimatedTokens: metadata.estimatedTokens,\n compactedCount: metadata.compactedCount,\n lastFlushedAt: metadata.lastFlushedAt ?? null,\n flushCount: metadata.flushCount ?? 0,\n thinkingLevel: thinkingLevel ?? null,\n verboseLevel: verboseLevel ?? null,\n };\n}\n\nexport function sessionConfigRowToConfig(row: SessionConfigRow): SessionAgentConfig {\n return {\n ...(row.thinking_level ? { thinkingLevel: row.thinking_level as SessionAgentConfig['thinkingLevel'] } : {}),\n ...(row.reasoning_level ? { reasoningLevel: row.reasoning_level as SessionAgentConfig['reasoningLevel'] } : {}),\n ...(row.verbose_level ? { verboseLevel: row.verbose_level as SessionAgentConfig['verboseLevel'] } : {}),\n ...(row.elevated_mode ? { elevatedMode: row.elevated_mode as SessionAgentConfig['elevatedMode'] } : {}),\n ...(row.model_override ? { modelOverride: row.model_override } : {}),\n ...(row.provider_override ? { providerOverride: row.provider_override } : {}),\n ...(row.working_directory_override ? { workingDirectoryOverride: row.working_directory_override } : {}),\n updatedAt: row.updated_at,\n };\n}\n\nexport function transcriptEntryRowToStoredRow(row: TranscriptEntryRow): TranscriptStoredRow {\n const payload = JSON.parse(row.payload_json) as TranscriptStoredRow;\n return payload;\n}\n\nexport function classifyStoredRow(row: TranscriptStoredRow): {\n entryKind: 'message' | 'context' | 'compaction';\n role: string | null;\n} {\n if (isTranscriptContextEntry(row)) {\n return { entryKind: 'context', role: null };\n }\n const record = row as AgentMessage & { type?: string };\n if (record.type === 'compaction' || (row as { kind?: string }).kind === 'compaction') {\n return { entryKind: 'compaction', role: null };\n }\n return { entryKind: 'message', role: record.role ?? null };\n}\n\nexport function extractFtsContent(row: TranscriptStoredRow): string {\n if (isTranscriptContextEntry(row)) {\n const ctx = row as XopcTranscriptContextEntry;\n return [ctx.text, ctx.id].filter(Boolean).join(' ');\n }\n const msg = row as AgentMessage;\n return extractTextFromMessageContent((msg as { content?: unknown }).content);\n}\n\nfunction extractTextFromMessageContent(content: unknown): string {\n if (typeof content === 'string') {\n return content;\n }\n if (!Array.isArray(content)) {\n return '';\n }\n const parts: string[] = [];\n for (const block of content) {\n if (!block || typeof block !== 'object') {\n continue;\n }\n const type = (block as { type?: string }).type;\n if (type === 'text' && typeof (block as { text?: string }).text === 'string') {\n parts.push((block as { text: string }).text);\n }\n }\n return parts.join('\\n');\n}\n\nexport function estimateTokensFromMessages(messages: AgentMessage[]): number {\n let total = 0;\n for (const msg of messages) {\n const content = (msg as { content?: unknown }).content;\n const text = extractTextFromMessageContent(content);\n total += Math.ceil(text.length / 4);\n }\n return total;\n}\n\nexport function buildGlobalSessionStats(sessions: SessionMetadata[]): GlobalSessionStats {\n const byChannel: Record<string, number> = {};\n for (const session of sessions) {\n byChannel[session.sourceChannel] = (byChannel[session.sourceChannel] || 0) + 1;\n }\n let oldestSession: string | undefined;\n let newestSession: string | undefined;\n if (sessions.length > 0) {\n const sorted = [...sessions].sort((a, b) => a.createdAt.localeCompare(b.createdAt));\n oldestSession = sorted[0]!.createdAt;\n newestSession = sorted[sorted.length - 1]!.createdAt;\n }\n return {\n totalSessions: sessions.length,\n activeSessions: sessions.filter(\n (s) => s.status === SessionStatus.ACTIVE || s.status === SessionStatus.IDLE,\n ).length,\n archivedSessions: sessions.filter((s) => s.status === SessionStatus.ARCHIVED).length,\n pinnedSessions: sessions.filter((s) => s.status === SessionStatus.PINNED).length,\n totalMessages: sessions.reduce((sum, s) => sum + s.messageCount, 0),\n totalTokens: sessions.reduce((sum, s) => sum + s.estimatedTokens, 0),\n oldestSession,\n newestSession,\n byChannel,\n };\n}\n"],"mappings":"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"}
@@ -31,7 +31,7 @@ function ensureXopcDatabaseSchema(db) {
31
31
  bootstrapFreshDatabase(db);
32
32
  currentVersion = 3;
33
33
  }
34
- applyPendingMigrations(db, { targetVersion: 3 });
34
+ applyPendingMigrations(db, { targetVersion: 4 });
35
35
  }
36
36
  //#endregion
37
37
  export { SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION, ensureSchemaMetaTable, ensureXopcDatabaseSchema, readSchemaVersion, readSchemaVersionForTest, setSchemaVersion };
@@ -63,6 +63,7 @@ function buildDefaultSessionMetadata(sessionKey) {
63
63
  flushCount: 0,
64
64
  sourceChannel: channel,
65
65
  sourceChatId: chatId,
66
+ sessionType: "chat",
66
67
  routing,
67
68
  ...isCronSession ? {
68
69
  sessionType: "cron",
@@ -1 +1 @@
1
- {"version":3,"file":"session-metadata.js","names":["parseRoutingSessionKey"],"sources":["../../../../src/storage/sqlite/session-metadata.ts"],"sourcesContent":["import { parseSessionKey as parseRoutingSessionKey } from '../../routing/session-key.js';\nimport { SessionStatus, type SessionMetadata } from '../../session/types.js';\n\nexport function resolveAgentIdFromSessionKey(sessionKey: string): string {\n const parsed = parseRoutingSessionKey(sessionKey);\n return parsed?.agentId?.toLowerCase() || 'main';\n}\n\nexport function parseSessionKeySource(key: string): { channel: string; chatId: string } {\n const parts = key.split(':');\n if (parts.length >= 2 && parts[0] === 'heartbeat') {\n return { channel: 'heartbeat', chatId: parts.slice(1).join(':') };\n }\n const parsed = parseRoutingSessionKey(key);\n if (parsed) {\n if (parsed.source === 'cron') {\n return { channel: 'cron', chatId: parsed.peerId };\n }\n return {\n channel: parsed.source,\n chatId: [parsed.accountId, parsed.peerKind, parsed.peerId].join(':'),\n };\n }\n return { channel: 'unknown', chatId: key };\n}\n\nexport function extractRoutingFromSessionKey(key: string): SessionMetadata['routing'] {\n const parsed = parseRoutingSessionKey(key);\n if (!parsed) {\n return undefined;\n }\n return {\n agentId: parsed.agentId?.toLowerCase() || 'main',\n source: parsed.source?.toLowerCase() || 'unknown',\n accountId: parsed.accountId?.toLowerCase() || 'default',\n peerKind: parsed.peerKind?.toLowerCase() || 'dm',\n peerId: parsed.peerId?.toLowerCase() || 'unknown',\n threadId: parsed.threadId,\n scopeId: parsed.scopeId,\n };\n}\n\nexport function buildDefaultSessionMetadata(sessionKey: string): SessionMetadata {\n const { channel, chatId } = parseSessionKeySource(sessionKey);\n const routing = extractRoutingFromSessionKey(sessionKey);\n const isCronSession = channel === 'cron';\n const isHeartbeatSession = channel === 'heartbeat';\n const now = new Date().toISOString();\n return {\n key: sessionKey,\n status: SessionStatus.ACTIVE,\n tags: [],\n createdAt: now,\n updatedAt: now,\n lastAccessedAt: now,\n messageCount: 0,\n estimatedTokens: 0,\n compactedCount: 0,\n flushCount: 0,\n sourceChannel: channel,\n sourceChatId: chatId,\n routing,\n ...(isCronSession ? { sessionType: 'cron', customData: { cronJobId: chatId } } : {}),\n ...(isHeartbeatSession ? { sessionType: 'heartbeat', customData: { heartbeatTarget: chatId } } : {}),\n stats: { messageCount: 0, tokenCount: 0 },\n };\n}\n"],"mappings":";;;kBAAyF;AAGzF,SAAgB,6BAA6B,YAA4B;AAEvE,QADeA,gBAAuB,WACzB,EAAE,SAAS,aAAa,IAAI;;AAG3C,SAAgB,sBAAsB,KAAkD;CACtF,MAAM,QAAQ,IAAI,MAAM,IAAI;AAC5B,KAAI,MAAM,UAAU,KAAK,MAAM,OAAO,YACpC,QAAO;EAAE,SAAS;EAAa,QAAQ,MAAM,MAAM,EAAE,CAAC,KAAK,IAAI;EAAE;CAEnE,MAAM,SAASA,gBAAuB,IAAI;AAC1C,KAAI,QAAQ;AACV,MAAI,OAAO,WAAW,OACpB,QAAO;GAAE,SAAS;GAAQ,QAAQ,OAAO;GAAQ;AAEnD,SAAO;GACL,SAAS,OAAO;GAChB,QAAQ;IAAC,OAAO;IAAW,OAAO;IAAU,OAAO;IAAO,CAAC,KAAK,IAAI;GACrE;;AAEH,QAAO;EAAE,SAAS;EAAW,QAAQ;EAAK;;AAG5C,SAAgB,6BAA6B,KAAyC;CACpF,MAAM,SAASA,gBAAuB,IAAI;AAC1C,KAAI,CAAC,OACH;AAEF,QAAO;EACL,SAAS,OAAO,SAAS,aAAa,IAAI;EAC1C,QAAQ,OAAO,QAAQ,aAAa,IAAI;EACxC,WAAW,OAAO,WAAW,aAAa,IAAI;EAC9C,UAAU,OAAO,UAAU,aAAa,IAAI;EAC5C,QAAQ,OAAO,QAAQ,aAAa,IAAI;EACxC,UAAU,OAAO;EACjB,SAAS,OAAO;EACjB;;AAGH,SAAgB,4BAA4B,YAAqC;CAC/E,MAAM,EAAE,SAAS,WAAW,sBAAsB,WAAW;CAC7D,MAAM,UAAU,6BAA6B,WAAW;CACxD,MAAM,gBAAgB,YAAY;CAClC,MAAM,qBAAqB,YAAY;CACvC,MAAM,uBAAM,IAAI,MAAM,EAAC,aAAa;AACpC,QAAO;EACL,KAAK;EACL,QAAA;EACA,MAAM,EAAE;EACR,WAAW;EACX,WAAW;EACX,gBAAgB;EAChB,cAAc;EACd,iBAAiB;EACjB,gBAAgB;EAChB,YAAY;EACZ,eAAe;EACf,cAAc;EACd;EACA,GAAI,gBAAgB;GAAE,aAAa;GAAQ,YAAY,EAAE,WAAW,QAAQ;GAAE,GAAG,EAAE;EACnF,GAAI,qBAAqB;GAAE,aAAa;GAAa,YAAY,EAAE,iBAAiB,QAAQ;GAAE,GAAG,EAAE;EACnG,OAAO;GAAE,cAAc;GAAG,YAAY;GAAG;EAC1C"}
1
+ {"version":3,"file":"session-metadata.js","names":["parseRoutingSessionKey"],"sources":["../../../../src/storage/sqlite/session-metadata.ts"],"sourcesContent":["import { parseSessionKey as parseRoutingSessionKey } from '../../routing/session-key.js';\nimport { SessionStatus, type SessionMetadata } from '../../session/types.js';\n\nexport function resolveAgentIdFromSessionKey(sessionKey: string): string {\n const parsed = parseRoutingSessionKey(sessionKey);\n return parsed?.agentId?.toLowerCase() || 'main';\n}\n\nexport function parseSessionKeySource(key: string): { channel: string; chatId: string } {\n const parts = key.split(':');\n if (parts.length >= 2 && parts[0] === 'heartbeat') {\n return { channel: 'heartbeat', chatId: parts.slice(1).join(':') };\n }\n const parsed = parseRoutingSessionKey(key);\n if (parsed) {\n if (parsed.source === 'cron') {\n return { channel: 'cron', chatId: parsed.peerId };\n }\n return {\n channel: parsed.source,\n chatId: [parsed.accountId, parsed.peerKind, parsed.peerId].join(':'),\n };\n }\n return { channel: 'unknown', chatId: key };\n}\n\nexport function extractRoutingFromSessionKey(key: string): SessionMetadata['routing'] {\n const parsed = parseRoutingSessionKey(key);\n if (!parsed) {\n return undefined;\n }\n return {\n agentId: parsed.agentId?.toLowerCase() || 'main',\n source: parsed.source?.toLowerCase() || 'unknown',\n accountId: parsed.accountId?.toLowerCase() || 'default',\n peerKind: parsed.peerKind?.toLowerCase() || 'dm',\n peerId: parsed.peerId?.toLowerCase() || 'unknown',\n threadId: parsed.threadId,\n scopeId: parsed.scopeId,\n };\n}\n\nexport function buildDefaultSessionMetadata(sessionKey: string): SessionMetadata {\n const { channel, chatId } = parseSessionKeySource(sessionKey);\n const routing = extractRoutingFromSessionKey(sessionKey);\n const isCronSession = channel === 'cron';\n const isHeartbeatSession = channel === 'heartbeat';\n const now = new Date().toISOString();\n return {\n key: sessionKey,\n status: SessionStatus.ACTIVE,\n tags: [],\n createdAt: now,\n updatedAt: now,\n lastAccessedAt: now,\n messageCount: 0,\n estimatedTokens: 0,\n compactedCount: 0,\n flushCount: 0,\n sourceChannel: channel,\n sourceChatId: chatId,\n sessionType: 'chat',\n routing,\n ...(isCronSession ? { sessionType: 'cron', customData: { cronJobId: chatId } } : {}),\n ...(isHeartbeatSession ? { sessionType: 'heartbeat', customData: { heartbeatTarget: chatId } } : {}),\n stats: { messageCount: 0, tokenCount: 0 },\n };\n}\n"],"mappings":";;;kBAAyF;AAGzF,SAAgB,6BAA6B,YAA4B;AAEvE,QADeA,gBAAuB,WACzB,EAAE,SAAS,aAAa,IAAI;;AAG3C,SAAgB,sBAAsB,KAAkD;CACtF,MAAM,QAAQ,IAAI,MAAM,IAAI;AAC5B,KAAI,MAAM,UAAU,KAAK,MAAM,OAAO,YACpC,QAAO;EAAE,SAAS;EAAa,QAAQ,MAAM,MAAM,EAAE,CAAC,KAAK,IAAI;EAAE;CAEnE,MAAM,SAASA,gBAAuB,IAAI;AAC1C,KAAI,QAAQ;AACV,MAAI,OAAO,WAAW,OACpB,QAAO;GAAE,SAAS;GAAQ,QAAQ,OAAO;GAAQ;AAEnD,SAAO;GACL,SAAS,OAAO;GAChB,QAAQ;IAAC,OAAO;IAAW,OAAO;IAAU,OAAO;IAAO,CAAC,KAAK,IAAI;GACrE;;AAEH,QAAO;EAAE,SAAS;EAAW,QAAQ;EAAK;;AAG5C,SAAgB,6BAA6B,KAAyC;CACpF,MAAM,SAASA,gBAAuB,IAAI;AAC1C,KAAI,CAAC,OACH;AAEF,QAAO;EACL,SAAS,OAAO,SAAS,aAAa,IAAI;EAC1C,QAAQ,OAAO,QAAQ,aAAa,IAAI;EACxC,WAAW,OAAO,WAAW,aAAa,IAAI;EAC9C,UAAU,OAAO,UAAU,aAAa,IAAI;EAC5C,QAAQ,OAAO,QAAQ,aAAa,IAAI;EACxC,UAAU,OAAO;EACjB,SAAS,OAAO;EACjB;;AAGH,SAAgB,4BAA4B,YAAqC;CAC/E,MAAM,EAAE,SAAS,WAAW,sBAAsB,WAAW;CAC7D,MAAM,UAAU,6BAA6B,WAAW;CACxD,MAAM,gBAAgB,YAAY;CAClC,MAAM,qBAAqB,YAAY;CACvC,MAAM,uBAAM,IAAI,MAAM,EAAC,aAAa;AACpC,QAAO;EACL,KAAK;EACL,QAAA;EACA,MAAM,EAAE;EACR,WAAW;EACX,WAAW;EACX,gBAAgB;EAChB,cAAc;EACd,iBAAiB;EACjB,gBAAgB;EAChB,YAAY;EACZ,eAAe;EACf,cAAc;EACd,aAAa;EACb;EACA,GAAI,gBAAgB;GAAE,aAAa;GAAQ,YAAY,EAAE,WAAW,QAAQ;GAAE,GAAG,EAAE;EACnF,GAAI,qBAAqB;GAAE,aAAa;GAAa,YAAY,EAAE,iBAAiB,QAAQ;GAAE,GAAG,EAAE;EACnG,OAAO;GAAE,cAAc;GAAG,YAAY;GAAG;EAC1C"}