@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
@@ -0,0 +1,184 @@
1
+ import { flattenMessageContent } from "../session/client-history.js";
2
+ //#region src/tui/tui-session-snapshot.ts
3
+ var TuiSessionSnapshot = class {
4
+ entries = [];
5
+ nextId = 1;
6
+ constructor(getSessionKey, getCwdValue, getSessionNameValue, getSessionFileValue = () => void 0, getSessionDirValue = () => void 0) {
7
+ this.getSessionKey = getSessionKey;
8
+ this.getCwdValue = getCwdValue;
9
+ this.getSessionNameValue = getSessionNameValue;
10
+ this.getSessionFileValue = getSessionFileValue;
11
+ this.getSessionDirValue = getSessionDirValue;
12
+ }
13
+ replaceFromHistory(messages) {
14
+ this.nextId = 1;
15
+ let parentId = null;
16
+ this.entries = messages.map((message) => {
17
+ const entry = this.entryFromHistory(message, parentId);
18
+ parentId = entry.id;
19
+ return entry;
20
+ });
21
+ }
22
+ clear() {
23
+ this.entries = [];
24
+ this.nextId = 1;
25
+ }
26
+ appendMessage(role, content) {
27
+ this.entries.push(this.createEntry({
28
+ type: "message",
29
+ role,
30
+ content,
31
+ message: {
32
+ role,
33
+ content,
34
+ usage: {
35
+ input: 0,
36
+ output: 0,
37
+ cost: { total: 0 }
38
+ }
39
+ },
40
+ timestamp: Date.now()
41
+ }));
42
+ }
43
+ setLabel(entryId, label) {
44
+ const entry = this.entries.find((candidate) => candidate.id === entryId);
45
+ if (!entry) return;
46
+ const trimmed = label?.trim();
47
+ if (trimmed) {
48
+ entry.userLabel = trimmed;
49
+ entry.labelTimestamp = (/* @__PURE__ */ new Date()).toISOString();
50
+ } else {
51
+ delete entry.userLabel;
52
+ delete entry.labelTimestamp;
53
+ }
54
+ }
55
+ appendCustomEntry(customType, data) {
56
+ this.entries.push(this.createEntry({
57
+ type: "custom",
58
+ customType,
59
+ data,
60
+ display: void 0,
61
+ content: "",
62
+ timestamp: Date.now(),
63
+ raw: {
64
+ type: "custom",
65
+ customType,
66
+ data
67
+ }
68
+ }));
69
+ }
70
+ appendCustomMessage(message) {
71
+ this.entries.push(this.createEntry({
72
+ type: "custom",
73
+ customType: message.customType,
74
+ data: message.details,
75
+ display: message.display ?? true,
76
+ content: typeof message.content === "string" ? message.content : Array.isArray(message.content) ? flattenMessageContent(message.content) : "",
77
+ timestamp: Date.now(),
78
+ raw: {
79
+ role: "custom",
80
+ customType: message.customType,
81
+ content: message.content,
82
+ display: message.display ?? true,
83
+ details: message.details
84
+ }
85
+ }));
86
+ }
87
+ manager() {
88
+ return {
89
+ getEntries: () => [...this.entries],
90
+ getBranch: () => [...this.entries],
91
+ getLeafEntry: () => this.entries[this.entries.length - 1],
92
+ getLeafId: () => this.entries[this.entries.length - 1]?.id ?? null,
93
+ getEntry: (entryId) => this.entries.find((entry) => entry.id === entryId),
94
+ getLabel: (entryId) => this.entries.find((entry) => entry.id === entryId)?.userLabel,
95
+ getHeader: () => this.createHeader(),
96
+ getTree: () => this.createTree(),
97
+ getSessionId: () => this.getSessionKey(),
98
+ getSessionFile: () => this.getSessionFileValue(),
99
+ getSessionDir: () => this.getSessionDirValue(),
100
+ getSessionName: () => this.getSessionNameValue(),
101
+ getCwd: () => this.getCwdValue()
102
+ };
103
+ }
104
+ entryFromHistory(message, parentId) {
105
+ const type = message.kind ?? "message";
106
+ const role = message.role;
107
+ const base = {
108
+ id: message.id,
109
+ parentId,
110
+ type,
111
+ customType: message.custom?.customType,
112
+ data: message.custom?.details,
113
+ display: message.custom?.display,
114
+ role,
115
+ content: message.content,
116
+ timestamp: message.timestamp,
117
+ raw: message
118
+ };
119
+ if (type === "message") return this.createEntry({
120
+ ...base,
121
+ message: {
122
+ role,
123
+ content: message.content,
124
+ usage: {
125
+ input: 0,
126
+ output: 0,
127
+ cost: { total: 0 }
128
+ }
129
+ }
130
+ });
131
+ return this.createEntry(base);
132
+ }
133
+ createHeader() {
134
+ const firstTimestamp = this.entries[0]?.timestamp;
135
+ const timestamp = typeof firstTimestamp === "number" ? new Date(firstTimestamp).toISOString() : (/* @__PURE__ */ new Date(0)).toISOString();
136
+ return {
137
+ type: "session",
138
+ version: 3,
139
+ id: this.getSessionKey(),
140
+ timestamp,
141
+ cwd: this.getCwdValue()
142
+ };
143
+ }
144
+ createTree() {
145
+ const nodeMap = /* @__PURE__ */ new Map();
146
+ const roots = [];
147
+ for (const entry of this.entries) nodeMap.set(entry.id, {
148
+ entry,
149
+ children: [],
150
+ label: entry.userLabel,
151
+ labelTimestamp: entry.labelTimestamp
152
+ });
153
+ for (const entry of this.entries) {
154
+ const node = nodeMap.get(entry.id);
155
+ if (!node) continue;
156
+ if (!entry.parentId || entry.parentId === entry.id) {
157
+ roots.push(node);
158
+ continue;
159
+ }
160
+ const parent = nodeMap.get(entry.parentId);
161
+ if (parent) parent.children.push(node);
162
+ else roots.push(node);
163
+ }
164
+ const stack = [...roots];
165
+ while (stack.length > 0) {
166
+ const node = stack.pop();
167
+ if (!node) continue;
168
+ node.children.sort((a, b) => (a.entry.timestamp ?? 0) - (b.entry.timestamp ?? 0));
169
+ stack.push(...node.children);
170
+ }
171
+ return roots;
172
+ }
173
+ createEntry(entry) {
174
+ return {
175
+ ...entry,
176
+ id: entry.id ?? `tui:${this.nextId++}`,
177
+ parentId: entry.parentId ?? this.entries[this.entries.length - 1]?.id ?? null
178
+ };
179
+ }
180
+ };
181
+ //#endregion
182
+ export { TuiSessionSnapshot };
183
+
184
+ //# sourceMappingURL=tui-session-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-session-snapshot.js","names":[],"sources":["../../../src/tui/tui-session-snapshot.ts"],"sourcesContent":["import type { HistoryMessage } from './tui-backend.js';\nimport { flattenMessageContent } from '../session/client-history.js';\n\nexport type TuiSessionSnapshotEntryType =\n | 'message'\n | 'compaction'\n | 'context'\n | 'bash'\n | 'custom'\n | 'branch';\n\nexport interface TuiSessionSnapshotEntry {\n id: string;\n type: TuiSessionSnapshotEntryType;\n parentId: string | null;\n customType?: string;\n data?: unknown;\n display?: boolean;\n userLabel?: string;\n labelTimestamp?: string;\n role?: 'user' | 'assistant' | 'system';\n message?: {\n role: 'user' | 'assistant' | 'system';\n content: string;\n usage?: {\n input: number;\n output: number;\n cost: { total: number };\n };\n };\n content: string;\n timestamp?: number;\n raw?: HistoryMessage | Record<string, unknown>;\n}\n\nexport interface TuiSessionSnapshotHeader {\n type: 'session';\n version?: number;\n id: string;\n timestamp: string;\n cwd: string;\n parentSession?: string;\n}\n\nexport interface TuiSessionSnapshotTreeNode {\n entry: TuiSessionSnapshotEntry;\n children: TuiSessionSnapshotTreeNode[];\n label?: string;\n labelTimestamp?: string;\n}\n\nexport interface TuiReadonlySessionManager {\n getEntries(): TuiSessionSnapshotEntry[];\n getBranch(): TuiSessionSnapshotEntry[];\n getLeafEntry(): TuiSessionSnapshotEntry | undefined;\n getLeafId(): string | null;\n getEntry(entryId: string): TuiSessionSnapshotEntry | undefined;\n getLabel(entryId: string): string | undefined;\n getHeader(): TuiSessionSnapshotHeader | null;\n getTree(): TuiSessionSnapshotTreeNode[];\n getSessionId(): string;\n getSessionFile(): string | undefined;\n getSessionDir(): string | undefined;\n getSessionName(): string | undefined;\n getCwd(): string;\n}\n\nexport class TuiSessionSnapshot {\n private entries: TuiSessionSnapshotEntry[] = [];\n private nextId = 1;\n\n constructor(\n private readonly getSessionKey: () => string,\n private readonly getCwdValue: () => string,\n private readonly getSessionNameValue: () => string | undefined,\n private readonly getSessionFileValue: () => string | undefined = () => undefined,\n private readonly getSessionDirValue: () => string | undefined = () => undefined,\n ) {}\n\n replaceFromHistory(messages: HistoryMessage[]): void {\n this.nextId = 1;\n let parentId: string | null = null;\n this.entries = messages.map((message) => {\n const entry = this.entryFromHistory(message, parentId);\n parentId = entry.id;\n return entry;\n });\n }\n\n clear(): void {\n this.entries = [];\n this.nextId = 1;\n }\n\n appendMessage(role: 'user' | 'assistant' | 'system', content: string): void {\n this.entries.push(this.createEntry({\n type: 'message',\n role,\n content,\n message: {\n role,\n content,\n usage: {\n input: 0,\n output: 0,\n cost: { total: 0 },\n },\n },\n timestamp: Date.now(),\n }));\n }\n\n setLabel(entryId: string, label: string | undefined): void {\n const entry = this.entries.find((candidate) => candidate.id === entryId);\n if (!entry) return;\n const trimmed = label?.trim();\n if (trimmed) {\n entry.userLabel = trimmed;\n entry.labelTimestamp = new Date().toISOString();\n } else {\n delete entry.userLabel;\n delete entry.labelTimestamp;\n }\n }\n\n appendCustomEntry(customType: string, data?: unknown): void {\n this.entries.push(this.createEntry({\n type: 'custom',\n customType,\n data,\n display: undefined,\n content: '',\n timestamp: Date.now(),\n raw: {\n type: 'custom',\n customType,\n data,\n },\n }));\n }\n\n appendCustomMessage(message: {\n customType: string;\n content?: string | unknown[];\n display?: boolean;\n details?: unknown;\n }): void {\n this.entries.push(this.createEntry({\n type: 'custom',\n customType: message.customType,\n data: message.details,\n display: message.display ?? true,\n content: typeof message.content === 'string'\n ? message.content\n : Array.isArray(message.content)\n ? flattenMessageContent(message.content)\n : '',\n timestamp: Date.now(),\n raw: {\n role: 'custom',\n customType: message.customType,\n content: message.content,\n display: message.display ?? true,\n details: message.details,\n },\n }));\n }\n\n manager(): TuiReadonlySessionManager {\n return {\n getEntries: () => [...this.entries],\n getBranch: () => [...this.entries],\n getLeafEntry: () => this.entries[this.entries.length - 1],\n getLeafId: () => this.entries[this.entries.length - 1]?.id ?? null,\n getEntry: (entryId) => this.entries.find((entry) => entry.id === entryId),\n getLabel: (entryId) => this.entries.find((entry) => entry.id === entryId)?.userLabel,\n getHeader: () => this.createHeader(),\n getTree: () => this.createTree(),\n getSessionId: () => this.getSessionKey(),\n getSessionFile: () => this.getSessionFileValue(),\n getSessionDir: () => this.getSessionDirValue(),\n getSessionName: () => this.getSessionNameValue(),\n getCwd: () => this.getCwdValue(),\n };\n }\n\n private entryFromHistory(\n message: HistoryMessage,\n parentId: string | null,\n ): TuiSessionSnapshotEntry {\n const type = message.kind ?? 'message';\n const role = message.role;\n const base = {\n id: message.id,\n parentId,\n type,\n customType: message.custom?.customType,\n data: message.custom?.details,\n display: message.custom?.display,\n role,\n content: message.content,\n timestamp: message.timestamp,\n raw: message,\n };\n if (type === 'message') {\n return this.createEntry({\n ...base,\n message: {\n role,\n content: message.content,\n usage: {\n input: 0,\n output: 0,\n cost: { total: 0 },\n },\n },\n });\n }\n return this.createEntry(base);\n }\n\n private createHeader(): TuiSessionSnapshotHeader {\n const firstTimestamp = this.entries[0]?.timestamp;\n const timestamp = typeof firstTimestamp === 'number'\n ? new Date(firstTimestamp).toISOString()\n : new Date(0).toISOString();\n return {\n type: 'session',\n version: 3,\n id: this.getSessionKey(),\n timestamp,\n cwd: this.getCwdValue(),\n };\n }\n\n private createTree(): TuiSessionSnapshotTreeNode[] {\n const nodeMap = new Map<string, TuiSessionSnapshotTreeNode>();\n const roots: TuiSessionSnapshotTreeNode[] = [];\n for (const entry of this.entries) {\n nodeMap.set(entry.id, {\n entry,\n children: [],\n label: entry.userLabel,\n labelTimestamp: entry.labelTimestamp,\n });\n }\n for (const entry of this.entries) {\n const node = nodeMap.get(entry.id);\n if (!node) continue;\n if (!entry.parentId || entry.parentId === entry.id) {\n roots.push(node);\n continue;\n }\n const parent = nodeMap.get(entry.parentId);\n if (parent) {\n parent.children.push(node);\n } else {\n roots.push(node);\n }\n }\n const stack = [...roots];\n while (stack.length > 0) {\n const node = stack.pop();\n if (!node) continue;\n node.children.sort((a, b) => (a.entry.timestamp ?? 0) - (b.entry.timestamp ?? 0));\n stack.push(...node.children);\n }\n return roots;\n }\n\n private createEntry(\n entry: Omit<TuiSessionSnapshotEntry, 'id' | 'parentId'> & {\n id?: string;\n parentId?: string | null;\n },\n ): TuiSessionSnapshotEntry {\n return {\n ...entry,\n id: entry.id ?? `tui:${this.nextId++}`,\n parentId: entry.parentId ?? this.entries[this.entries.length - 1]?.id ?? null,\n };\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { TranscriptStoredRow } from '../session/session-context-for-llm.js';
2
+ import type { TuiSessionStats } from './tui-backend.js';
3
+ export declare function computeTuiSessionStats(rows: TranscriptStoredRow[]): TuiSessionStats;
@@ -0,0 +1,59 @@
1
+ //#region src/tui/tui-session-stats.ts
2
+ function usageNumber(value) {
3
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
4
+ }
5
+ function usageFromRow(row) {
6
+ const usage = row.usage && typeof row.usage === "object" ? row.usage : {};
7
+ const input = usageNumber(usage.input) + usageNumber(usage.inputTokens);
8
+ const output = usageNumber(usage.output) + usageNumber(usage.outputTokens);
9
+ const cacheRead = usageNumber(usage.cacheRead) + usageNumber(usage.cacheReadTokens);
10
+ const cacheWrite = usageNumber(usage.cacheWrite) + usageNumber(usage.cacheWriteTokens);
11
+ return {
12
+ input,
13
+ output,
14
+ cacheRead,
15
+ cacheWrite,
16
+ total: usageNumber(usage.total) + usageNumber(usage.totalTokens) || input + output + cacheRead + cacheWrite
17
+ };
18
+ }
19
+ function computeTuiSessionStats(rows) {
20
+ const stats = {
21
+ totalMessages: rows.length,
22
+ userMessages: 0,
23
+ assistantMessages: 0,
24
+ toolCalls: 0,
25
+ toolResults: 0,
26
+ contextRows: 0,
27
+ tokens: {
28
+ input: 0,
29
+ output: 0,
30
+ cacheRead: 0,
31
+ cacheWrite: 0,
32
+ total: 0
33
+ }
34
+ };
35
+ for (const row of rows) {
36
+ const record = row;
37
+ if (record.kind === "context" || record.type === "compaction") {
38
+ stats.contextRows += 1;
39
+ continue;
40
+ }
41
+ const role = typeof record.role === "string" ? record.role : "";
42
+ if (role === "user") stats.userMessages += 1;
43
+ else if (role === "assistant") stats.assistantMessages += 1;
44
+ else if (role === "tool" || role === "toolResult") stats.toolResults += 1;
45
+ const toolCalls = Array.isArray(record.tool_calls) ? record.tool_calls.length : Array.isArray(record.toolCalls) ? record.toolCalls.length : 0;
46
+ stats.toolCalls += toolCalls;
47
+ const usage = usageFromRow(record);
48
+ stats.tokens.input += usage.input;
49
+ stats.tokens.output += usage.output;
50
+ stats.tokens.cacheRead += usage.cacheRead;
51
+ stats.tokens.cacheWrite += usage.cacheWrite;
52
+ stats.tokens.total += usage.total;
53
+ }
54
+ return stats;
55
+ }
56
+ //#endregion
57
+ export { computeTuiSessionStats };
58
+
59
+ //# sourceMappingURL=tui-session-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-session-stats.js","names":[],"sources":["../../../src/tui/tui-session-stats.ts"],"sourcesContent":["import type { TranscriptStoredRow } from '../session/session-context-for-llm.js';\n\nimport type { TuiSessionStats } from './tui-backend.js';\n\nfunction usageNumber(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction usageFromRow(row: Record<string, unknown>): {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n total: number;\n} {\n const usage = row.usage && typeof row.usage === 'object'\n ? row.usage as Record<string, unknown>\n : {};\n const input = usageNumber(usage.input) + usageNumber(usage.inputTokens);\n const output = usageNumber(usage.output) + usageNumber(usage.outputTokens);\n const cacheRead = usageNumber(usage.cacheRead) + usageNumber(usage.cacheReadTokens);\n const cacheWrite = usageNumber(usage.cacheWrite) + usageNumber(usage.cacheWriteTokens);\n const explicitTotal = usageNumber(usage.total) + usageNumber(usage.totalTokens);\n return {\n input,\n output,\n cacheRead,\n cacheWrite,\n total: explicitTotal || input + output + cacheRead + cacheWrite,\n };\n}\n\nexport function computeTuiSessionStats(rows: TranscriptStoredRow[]): TuiSessionStats {\n const stats: TuiSessionStats = {\n totalMessages: rows.length,\n userMessages: 0,\n assistantMessages: 0,\n toolCalls: 0,\n toolResults: 0,\n contextRows: 0,\n tokens: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n total: 0,\n },\n };\n\n for (const row of rows) {\n const record = row as unknown as Record<string, unknown>;\n if (record.kind === 'context' || record.type === 'compaction') {\n stats.contextRows += 1;\n continue;\n }\n const role = typeof record.role === 'string' ? record.role : '';\n if (role === 'user') stats.userMessages += 1;\n else if (role === 'assistant') stats.assistantMessages += 1;\n else if (role === 'tool' || role === 'toolResult') stats.toolResults += 1;\n\n const toolCalls = Array.isArray(record.tool_calls)\n ? record.tool_calls.length\n : Array.isArray(record.toolCalls)\n ? record.toolCalls.length\n : 0;\n stats.toolCalls += toolCalls;\n\n const usage = usageFromRow(record);\n stats.tokens.input += usage.input;\n stats.tokens.output += usage.output;\n stats.tokens.cacheRead += usage.cacheRead;\n stats.tokens.cacheWrite += usage.cacheWrite;\n stats.tokens.total += usage.total;\n }\n\n return stats;\n}\n"],"mappings":";AAIA,SAAS,YAAY,OAAwB;AAC3C,QAAO,OAAO,UAAU,YAAY,OAAO,SAAS,MAAM,GAAG,QAAQ;;AAGvE,SAAS,aAAa,KAMpB;CACA,MAAM,QAAQ,IAAI,SAAS,OAAO,IAAI,UAAU,WAC5C,IAAI,QACJ,EAAE;CACN,MAAM,QAAQ,YAAY,MAAM,MAAM,GAAG,YAAY,MAAM,YAAY;CACvE,MAAM,SAAS,YAAY,MAAM,OAAO,GAAG,YAAY,MAAM,aAAa;CAC1E,MAAM,YAAY,YAAY,MAAM,UAAU,GAAG,YAAY,MAAM,gBAAgB;CACnF,MAAM,aAAa,YAAY,MAAM,WAAW,GAAG,YAAY,MAAM,iBAAiB;AAEtF,QAAO;EACL;EACA;EACA;EACA;EACA,OANoB,YAAY,MAAM,MAAM,GAAG,YAAY,MAAM,YAAY,IAMrD,QAAQ,SAAS,YAAY;EACtD;;AAGH,SAAgB,uBAAuB,MAA8C;CACnF,MAAM,QAAyB;EAC7B,eAAe,KAAK;EACpB,cAAc;EACd,mBAAmB;EACnB,WAAW;EACX,aAAa;EACb,aAAa;EACb,QAAQ;GACN,OAAO;GACP,QAAQ;GACR,WAAW;GACX,YAAY;GACZ,OAAO;GACR;EACF;AAED,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,SAAS;AACf,MAAI,OAAO,SAAS,aAAa,OAAO,SAAS,cAAc;AAC7D,SAAM,eAAe;AACrB;;EAEF,MAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAC7D,MAAI,SAAS,OAAQ,OAAM,gBAAgB;WAClC,SAAS,YAAa,OAAM,qBAAqB;WACjD,SAAS,UAAU,SAAS,aAAc,OAAM,eAAe;EAExE,MAAM,YAAY,MAAM,QAAQ,OAAO,WAAW,GAC9C,OAAO,WAAW,SAClB,MAAM,QAAQ,OAAO,UAAU,GAC7B,OAAO,UAAU,SACjB;AACN,QAAM,aAAa;EAEnB,MAAM,QAAQ,aAAa,OAAO;AAClC,QAAM,OAAO,SAAS,MAAM;AAC5B,QAAM,OAAO,UAAU,MAAM;AAC7B,QAAM,OAAO,aAAa,MAAM;AAChC,QAAM,OAAO,cAAc,MAAM;AACjC,QAAM,OAAO,SAAS,MAAM;;AAG9B,QAAO"}
@@ -1,5 +1,8 @@
1
1
  export type TuiThemeId = 'auto' | 'dark' | 'light' | (string & {});
2
2
  export type DoubleEscapeAction = 'none' | 'tree' | 'fork';
3
+ export type FollowUpMode = 'one-at-a-time' | 'all';
4
+ export type SteeringMode = 'one-at-a-time' | 'all';
5
+ export type TreeFilterMode = 'default' | 'no-tools' | 'user-only' | 'labeled-only' | 'all';
3
6
  export interface TuiSettings {
4
7
  /** `auto` follows terminal background detection; `dark`/`light` or custom theme name. */
5
8
  theme: TuiThemeId;
@@ -9,6 +12,24 @@ export interface TuiSettings {
9
12
  showTerminalProgress: boolean;
10
13
  /** Show expanded startup hints under the header title. */
11
14
  showStartupHints: boolean;
15
+ /** Render image content blocks inline when the terminal supports images. */
16
+ showImages: boolean;
17
+ /** Preferred inline image width in terminal cells. */
18
+ imageWidthCells: number;
19
+ /** Show the terminal hardware cursor at the editor cursor for IME support. */
20
+ showHardwareCursor: boolean;
21
+ /** Horizontal padding for the input editor. */
22
+ editorPaddingX: number;
23
+ /** Maximum visible autocomplete rows before the completion menu scrolls. */
24
+ autocompleteMaxVisible: number;
25
+ /** Clear empty terminal rows when rendered content shrinks. */
26
+ clearOnShrink: boolean;
27
+ /** How queued follow-up messages are delivered after an agent run ends. */
28
+ followUpMode: FollowUpMode;
29
+ /** How queued steering messages are delivered across active runs. */
30
+ steeringMode: SteeringMode;
31
+ /** Default transcript filter when opening `/tree`. */
32
+ treeFilterMode: TreeFilterMode;
12
33
  }
13
34
  export declare const DEFAULT_TUI_SETTINGS: TuiSettings;
14
35
  /** Load persisted TUI settings from `~/.xopc/tui-settings.json`. */
@@ -10,12 +10,30 @@ const DEFAULT_TUI_SETTINGS = {
10
10
  toolsExpanded: false,
11
11
  doubleEscapeAction: "none",
12
12
  showTerminalProgress: false,
13
- showStartupHints: true
13
+ showStartupHints: true,
14
+ showImages: true,
15
+ imageWidthCells: 60,
16
+ showHardwareCursor: false,
17
+ editorPaddingX: 0,
18
+ autocompleteMaxVisible: 5,
19
+ clearOnShrink: false,
20
+ followUpMode: "one-at-a-time",
21
+ steeringMode: "one-at-a-time",
22
+ treeFilterMode: "default"
14
23
  };
15
24
  const SETTINGS_PATH = join(resolveStateDir(), "tui-settings.json");
16
25
  function isDoubleEscapeAction(value) {
17
26
  return value === "none" || value === "tree" || value === "fork";
18
27
  }
28
+ function isFollowUpMode(value) {
29
+ return value === "one-at-a-time" || value === "all";
30
+ }
31
+ function isSteeringMode(value) {
32
+ return value === "one-at-a-time" || value === "all";
33
+ }
34
+ function isTreeFilterMode(value) {
35
+ return value === "default" || value === "no-tools" || value === "user-only" || value === "labeled-only" || value === "all";
36
+ }
19
37
  function normalizeSettings(raw) {
20
38
  const base = { ...DEFAULT_TUI_SETTINGS };
21
39
  if (!raw || typeof raw !== "object") return base;
@@ -26,6 +44,15 @@ function normalizeSettings(raw) {
26
44
  if (isDoubleEscapeAction(obj.doubleEscapeAction)) base.doubleEscapeAction = obj.doubleEscapeAction;
27
45
  if (typeof obj.showTerminalProgress === "boolean") base.showTerminalProgress = obj.showTerminalProgress;
28
46
  if (typeof obj.showStartupHints === "boolean") base.showStartupHints = obj.showStartupHints;
47
+ if (typeof obj.showImages === "boolean") base.showImages = obj.showImages;
48
+ if (typeof obj.imageWidthCells === "number" && Number.isFinite(obj.imageWidthCells)) base.imageWidthCells = Math.max(1, Math.floor(obj.imageWidthCells));
49
+ if (typeof obj.showHardwareCursor === "boolean") base.showHardwareCursor = obj.showHardwareCursor;
50
+ if (typeof obj.editorPaddingX === "number" && Number.isFinite(obj.editorPaddingX)) base.editorPaddingX = Math.max(0, Math.min(3, Math.floor(obj.editorPaddingX)));
51
+ if (typeof obj.autocompleteMaxVisible === "number" && Number.isFinite(obj.autocompleteMaxVisible)) base.autocompleteMaxVisible = Math.max(3, Math.min(20, Math.floor(obj.autocompleteMaxVisible)));
52
+ if (typeof obj.clearOnShrink === "boolean") base.clearOnShrink = obj.clearOnShrink;
53
+ if (isFollowUpMode(obj.followUpMode)) base.followUpMode = obj.followUpMode;
54
+ if (isSteeringMode(obj.steeringMode)) base.steeringMode = obj.steeringMode;
55
+ if (isTreeFilterMode(obj.treeFilterMode)) base.treeFilterMode = obj.treeFilterMode;
29
56
  return base;
30
57
  }
31
58
  /** Load persisted TUI settings from `~/.xopc/tui-settings.json`. */
@@ -1 +1 @@
1
- {"version":3,"file":"tui-settings.js","names":[],"sources":["../../../src/tui/tui-settings.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport { resolveStateDir } from '../config/paths.js';\n\nexport type TuiThemeId = 'auto' | 'dark' | 'light' | (string & {});\n\nexport type DoubleEscapeAction = 'none' | 'tree' | 'fork';\n\nexport interface TuiSettings {\n /** `auto` follows terminal background detection; `dark`/`light` or custom theme name. */\n theme: TuiThemeId;\n showThinking: boolean;\n toolsExpanded: boolean;\n doubleEscapeAction: DoubleEscapeAction;\n showTerminalProgress: boolean;\n /** Show expanded startup hints under the header title. */\n showStartupHints: boolean;\n}\n\nexport const DEFAULT_TUI_SETTINGS: TuiSettings = {\n theme: 'auto',\n showThinking: false,\n toolsExpanded: false,\n doubleEscapeAction: 'none',\n showTerminalProgress: false,\n showStartupHints: true,\n};\n\nconst SETTINGS_PATH = join(resolveStateDir(), 'tui-settings.json');\n\nfunction isDoubleEscapeAction(value: unknown): value is DoubleEscapeAction {\n return value === 'none' || value === 'tree' || value === 'fork';\n}\n\nfunction normalizeSettings(raw: unknown): TuiSettings {\n const base = { ...DEFAULT_TUI_SETTINGS };\n if (!raw || typeof raw !== 'object') return base;\n const obj = raw as Record<string, unknown>;\n if (typeof obj.theme === 'string' && obj.theme.trim()) {\n base.theme = obj.theme.trim();\n }\n if (typeof obj.showThinking === 'boolean') base.showThinking = obj.showThinking;\n if (typeof obj.toolsExpanded === 'boolean') base.toolsExpanded = obj.toolsExpanded;\n if (isDoubleEscapeAction(obj.doubleEscapeAction)) {\n base.doubleEscapeAction = obj.doubleEscapeAction;\n }\n if (typeof obj.showTerminalProgress === 'boolean') {\n base.showTerminalProgress = obj.showTerminalProgress;\n }\n if (typeof obj.showStartupHints === 'boolean') {\n base.showStartupHints = obj.showStartupHints;\n }\n return base;\n}\n\n/** Load persisted TUI settings from `~/.xopc/tui-settings.json`. */\nexport function loadTuiSettings(): TuiSettings {\n try {\n if (!existsSync(SETTINGS_PATH)) return { ...DEFAULT_TUI_SETTINGS };\n const raw = readFileSync(SETTINGS_PATH, 'utf8');\n return normalizeSettings(JSON.parse(raw));\n } catch {\n return { ...DEFAULT_TUI_SETTINGS };\n }\n}\n\n/** Persist TUI settings. */\nexport function saveTuiSettings(settings: TuiSettings): void {\n const dir = resolveStateDir();\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n writeFileSync(SETTINGS_PATH, `${JSON.stringify(settings, null, 2)}\\n`, 'utf8');\n}\n\nexport function getTuiSettingsPath(): string {\n return SETTINGS_PATH;\n}\n"],"mappings":";;;;;YAGqD;AAiBrD,MAAa,uBAAoC;CAC/C,OAAO;CACP,cAAc;CACd,eAAe;CACf,oBAAoB;CACpB,sBAAsB;CACtB,kBAAkB;CACnB;AAED,MAAM,gBAAgB,KAAK,iBAAiB,EAAE,oBAAoB;AAElE,SAAS,qBAAqB,OAA6C;AACzE,QAAO,UAAU,UAAU,UAAU,UAAU,UAAU;;AAG3D,SAAS,kBAAkB,KAA2B;CACpD,MAAM,OAAO,EAAE,GAAG,sBAAsB;AACxC,KAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;CAC5C,MAAM,MAAM;AACZ,KAAI,OAAO,IAAI,UAAU,YAAY,IAAI,MAAM,MAAM,CACnD,MAAK,QAAQ,IAAI,MAAM,MAAM;AAE/B,KAAI,OAAO,IAAI,iBAAiB,UAAW,MAAK,eAAe,IAAI;AACnE,KAAI,OAAO,IAAI,kBAAkB,UAAW,MAAK,gBAAgB,IAAI;AACrE,KAAI,qBAAqB,IAAI,mBAAmB,CAC9C,MAAK,qBAAqB,IAAI;AAEhC,KAAI,OAAO,IAAI,yBAAyB,UACtC,MAAK,uBAAuB,IAAI;AAElC,KAAI,OAAO,IAAI,qBAAqB,UAClC,MAAK,mBAAmB,IAAI;AAE9B,QAAO;;;AAIT,SAAgB,kBAA+B;AAC7C,KAAI;AACF,MAAI,CAAC,WAAW,cAAc,CAAE,QAAO,EAAE,GAAG,sBAAsB;EAClE,MAAM,MAAM,aAAa,eAAe,OAAO;AAC/C,SAAO,kBAAkB,KAAK,MAAM,IAAI,CAAC;SACnC;AACN,SAAO,EAAE,GAAG,sBAAsB;;;;AAKtC,SAAgB,gBAAgB,UAA6B;CAC3D,MAAM,MAAM,iBAAiB;AAC7B,KAAI,CAAC,WAAW,IAAI,CAAE,WAAU,KAAK,EAAE,WAAW,MAAM,CAAC;AACzD,eAAc,eAAe,GAAG,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC,KAAK,OAAO;;AAGhF,SAAgB,qBAA6B;AAC3C,QAAO"}
1
+ {"version":3,"file":"tui-settings.js","names":[],"sources":["../../../src/tui/tui-settings.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport { resolveStateDir } from '../config/paths.js';\n\nexport type TuiThemeId = 'auto' | 'dark' | 'light' | (string & {});\n\nexport type DoubleEscapeAction = 'none' | 'tree' | 'fork';\nexport type FollowUpMode = 'one-at-a-time' | 'all';\nexport type SteeringMode = 'one-at-a-time' | 'all';\nexport type TreeFilterMode = 'default' | 'no-tools' | 'user-only' | 'labeled-only' | 'all';\n\nexport interface TuiSettings {\n /** `auto` follows terminal background detection; `dark`/`light` or custom theme name. */\n theme: TuiThemeId;\n showThinking: boolean;\n toolsExpanded: boolean;\n doubleEscapeAction: DoubleEscapeAction;\n showTerminalProgress: boolean;\n /** Show expanded startup hints under the header title. */\n showStartupHints: boolean;\n /** Render image content blocks inline when the terminal supports images. */\n showImages: boolean;\n /** Preferred inline image width in terminal cells. */\n imageWidthCells: number;\n /** Show the terminal hardware cursor at the editor cursor for IME support. */\n showHardwareCursor: boolean;\n /** Horizontal padding for the input editor. */\n editorPaddingX: number;\n /** Maximum visible autocomplete rows before the completion menu scrolls. */\n autocompleteMaxVisible: number;\n /** Clear empty terminal rows when rendered content shrinks. */\n clearOnShrink: boolean;\n /** How queued follow-up messages are delivered after an agent run ends. */\n followUpMode: FollowUpMode;\n /** How queued steering messages are delivered across active runs. */\n steeringMode: SteeringMode;\n /** Default transcript filter when opening `/tree`. */\n treeFilterMode: TreeFilterMode;\n}\n\nexport const DEFAULT_TUI_SETTINGS: TuiSettings = {\n theme: 'auto',\n showThinking: false,\n toolsExpanded: false,\n doubleEscapeAction: 'none',\n showTerminalProgress: false,\n showStartupHints: true,\n showImages: true,\n imageWidthCells: 60,\n showHardwareCursor: false,\n editorPaddingX: 0,\n autocompleteMaxVisible: 5,\n clearOnShrink: false,\n followUpMode: 'one-at-a-time',\n steeringMode: 'one-at-a-time',\n treeFilterMode: 'default',\n};\n\nconst SETTINGS_PATH = join(resolveStateDir(), 'tui-settings.json');\n\nfunction isDoubleEscapeAction(value: unknown): value is DoubleEscapeAction {\n return value === 'none' || value === 'tree' || value === 'fork';\n}\n\nfunction isFollowUpMode(value: unknown): value is FollowUpMode {\n return value === 'one-at-a-time' || value === 'all';\n}\n\nfunction isSteeringMode(value: unknown): value is SteeringMode {\n return value === 'one-at-a-time' || value === 'all';\n}\n\nfunction isTreeFilterMode(value: unknown): value is TreeFilterMode {\n return (\n value === 'default' ||\n value === 'no-tools' ||\n value === 'user-only' ||\n value === 'labeled-only' ||\n value === 'all'\n );\n}\n\nfunction normalizeSettings(raw: unknown): TuiSettings {\n const base = { ...DEFAULT_TUI_SETTINGS };\n if (!raw || typeof raw !== 'object') return base;\n const obj = raw as Record<string, unknown>;\n if (typeof obj.theme === 'string' && obj.theme.trim()) {\n base.theme = obj.theme.trim();\n }\n if (typeof obj.showThinking === 'boolean') base.showThinking = obj.showThinking;\n if (typeof obj.toolsExpanded === 'boolean') base.toolsExpanded = obj.toolsExpanded;\n if (isDoubleEscapeAction(obj.doubleEscapeAction)) {\n base.doubleEscapeAction = obj.doubleEscapeAction;\n }\n if (typeof obj.showTerminalProgress === 'boolean') {\n base.showTerminalProgress = obj.showTerminalProgress;\n }\n if (typeof obj.showStartupHints === 'boolean') {\n base.showStartupHints = obj.showStartupHints;\n }\n if (typeof obj.showImages === 'boolean') {\n base.showImages = obj.showImages;\n }\n if (typeof obj.imageWidthCells === 'number' && Number.isFinite(obj.imageWidthCells)) {\n base.imageWidthCells = Math.max(1, Math.floor(obj.imageWidthCells));\n }\n if (typeof obj.showHardwareCursor === 'boolean') {\n base.showHardwareCursor = obj.showHardwareCursor;\n }\n if (typeof obj.editorPaddingX === 'number' && Number.isFinite(obj.editorPaddingX)) {\n base.editorPaddingX = Math.max(0, Math.min(3, Math.floor(obj.editorPaddingX)));\n }\n if (typeof obj.autocompleteMaxVisible === 'number' && Number.isFinite(obj.autocompleteMaxVisible)) {\n base.autocompleteMaxVisible = Math.max(3, Math.min(20, Math.floor(obj.autocompleteMaxVisible)));\n }\n if (typeof obj.clearOnShrink === 'boolean') {\n base.clearOnShrink = obj.clearOnShrink;\n }\n if (isFollowUpMode(obj.followUpMode)) {\n base.followUpMode = obj.followUpMode;\n }\n if (isSteeringMode(obj.steeringMode)) {\n base.steeringMode = obj.steeringMode;\n }\n if (isTreeFilterMode(obj.treeFilterMode)) {\n base.treeFilterMode = obj.treeFilterMode;\n }\n return base;\n}\n\n/** Load persisted TUI settings from `~/.xopc/tui-settings.json`. */\nexport function loadTuiSettings(): TuiSettings {\n try {\n if (!existsSync(SETTINGS_PATH)) return { ...DEFAULT_TUI_SETTINGS };\n const raw = readFileSync(SETTINGS_PATH, 'utf8');\n return normalizeSettings(JSON.parse(raw));\n } catch {\n return { ...DEFAULT_TUI_SETTINGS };\n }\n}\n\n/** Persist TUI settings. */\nexport function saveTuiSettings(settings: TuiSettings): void {\n const dir = resolveStateDir();\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n writeFileSync(SETTINGS_PATH, `${JSON.stringify(settings, null, 2)}\\n`, 'utf8');\n}\n\nexport function getTuiSettingsPath(): string {\n return SETTINGS_PATH;\n}\n"],"mappings":"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"}
@@ -16,7 +16,7 @@ function createSkillsAutocompleteProvider() {
16
16
  globalDir: resolveStateDir()
17
17
  }).skills.map((skill) => ({
18
18
  name: skill.name,
19
- description: skill.description?.slice(0, 120)
19
+ description: skill.description ? `skill · ${skill.description.slice(0, 112)}` : "skill"
20
20
  }));
21
21
  };
22
22
  return (query) => {
@@ -1 +1 @@
1
- {"version":3,"file":"tui-skills-autocomplete.js","names":[],"sources":["../../../src/tui/tui-skills-autocomplete.ts"],"sourcesContent":["import { resolveBundledSkillsDir, resolveStateDir } from '../config/paths.js';\nimport { getWorkspacePath, loadConfig } from '../config/index.js';\nimport { loadSkills } from '../agent/skills/index.js';\nimport type { TuiAutocompleteProvider } from '../extensions/types/tui.js';\n\n/** `@skill` autocomplete from workspace + global + bundled skill directories. */\nexport function createSkillsAutocompleteProvider(): TuiAutocompleteProvider {\n let cached: Array<{ name: string; description?: string }> | null = null;\n\n const refresh = () => {\n const config = loadConfig();\n const workspaceDir = getWorkspacePath(config);\n const result = loadSkills({\n workspaceDir,\n builtinDir: resolveBundledSkillsDir(),\n globalDir: resolveStateDir(),\n });\n cached = result.skills.map((skill) => ({\n name: skill.name,\n description: skill.description?.slice(0, 120),\n }));\n };\n\n return (query) => {\n if (!cached) refresh();\n const skills = cached ?? [];\n const q = query.toLowerCase();\n const filtered = q\n ? skills.filter(\n (s) =>\n s.name.toLowerCase().includes(q) ||\n (s.description?.toLowerCase().includes(q) ?? false),\n )\n : skills;\n return filtered.slice(0, 30);\n };\n}\n\n/** Test helper — build skill list without caching. */\nexport function listSkillAutocompleteSuggestions(): Array<{ name: string; description?: string }> {\n const config = loadConfig();\n const result = loadSkills({\n workspaceDir: getWorkspacePath(config),\n builtinDir: resolveBundledSkillsDir(),\n globalDir: resolveStateDir(),\n });\n return result.skills.map((s) => ({\n name: s.name,\n description: s.description,\n }));\n}\n"],"mappings":";;;;;;;YAA8E;;AAM9E,SAAgB,mCAA4D;CAC1E,IAAI,SAA+D;CAEnE,MAAM,gBAAgB;AAQpB,WALe,WAAW;GACxB,cAFmB,iBADN,YAC6B,CAE9B;GACZ,YAAY,yBAAyB;GACrC,WAAW,iBAAiB;GAC7B,CACc,CAAC,OAAO,KAAK,WAAW;GACrC,MAAM,MAAM;GACZ,aAAa,MAAM,aAAa,MAAM,GAAG,IAAI;GAC9C,EAAE;;AAGL,SAAQ,UAAU;AAChB,MAAI,CAAC,OAAQ,UAAS;EACtB,MAAM,SAAS,UAAU,EAAE;EAC3B,MAAM,IAAI,MAAM,aAAa;AAQ7B,UAPiB,IACb,OAAO,QACJ,MACC,EAAE,KAAK,aAAa,CAAC,SAAS,EAAE,KAC/B,EAAE,aAAa,aAAa,CAAC,SAAS,EAAE,IAAI,OAChD,GACD,QACY,MAAM,GAAG,GAAG;;;;AAKhC,SAAgB,mCAAkF;AAOhG,QALe,WAAW;EACxB,cAAc,iBAFD,YAEwB,CAAC;EACtC,YAAY,yBAAyB;EACrC,WAAW,iBAAiB;EAC7B,CACY,CAAC,OAAO,KAAK,OAAO;EAC/B,MAAM,EAAE;EACR,aAAa,EAAE;EAChB,EAAE"}
1
+ {"version":3,"file":"tui-skills-autocomplete.js","names":[],"sources":["../../../src/tui/tui-skills-autocomplete.ts"],"sourcesContent":["import { resolveBundledSkillsDir, resolveStateDir } from '../config/paths.js';\nimport { getWorkspacePath, loadConfig } from '../config/index.js';\nimport { loadSkills } from '../agent/skills/index.js';\nimport type { TuiAutocompleteProvider } from '../extensions/types/tui.js';\n\n/** `@skill` autocomplete from workspace + global + bundled skill directories. */\nexport function createSkillsAutocompleteProvider(): TuiAutocompleteProvider {\n let cached: Array<{ name: string; description?: string }> | null = null;\n\n const refresh = () => {\n const config = loadConfig();\n const workspaceDir = getWorkspacePath(config);\n const result = loadSkills({\n workspaceDir,\n builtinDir: resolveBundledSkillsDir(),\n globalDir: resolveStateDir(),\n });\n cached = result.skills.map((skill) => ({\n name: skill.name,\n description: skill.description\n ? `skill · ${skill.description.slice(0, 112)}`\n : 'skill',\n }));\n };\n\n return (query) => {\n if (!cached) refresh();\n const skills = cached ?? [];\n const q = query.toLowerCase();\n const filtered = q\n ? skills.filter(\n (s) =>\n s.name.toLowerCase().includes(q) ||\n (s.description?.toLowerCase().includes(q) ?? false),\n )\n : skills;\n return filtered.slice(0, 30);\n };\n}\n\n/** Test helper — build skill list without caching. */\nexport function listSkillAutocompleteSuggestions(): Array<{ name: string; description?: string }> {\n const config = loadConfig();\n const result = loadSkills({\n workspaceDir: getWorkspacePath(config),\n builtinDir: resolveBundledSkillsDir(),\n globalDir: resolveStateDir(),\n });\n return result.skills.map((s) => ({\n name: s.name,\n description: s.description,\n }));\n}\n"],"mappings":";;;;;;;YAA8E;;AAM9E,SAAgB,mCAA4D;CAC1E,IAAI,SAA+D;CAEnE,MAAM,gBAAgB;AAQpB,WALe,WAAW;GACxB,cAFmB,iBADN,YAC6B,CAE9B;GACZ,YAAY,yBAAyB;GACrC,WAAW,iBAAiB;GAC7B,CACc,CAAC,OAAO,KAAK,WAAW;GACrC,MAAM,MAAM;GACZ,aAAa,MAAM,cACf,WAAW,MAAM,YAAY,MAAM,GAAG,IAAI,KAC1C;GACL,EAAE;;AAGL,SAAQ,UAAU;AAChB,MAAI,CAAC,OAAQ,UAAS;EACtB,MAAM,SAAS,UAAU,EAAE;EAC3B,MAAM,IAAI,MAAM,aAAa;AAQ7B,UAPiB,IACb,OAAO,QACJ,MACC,EAAE,KAAK,aAAa,CAAC,SAAS,EAAE,KAC/B,EAAE,aAAa,aAAa,CAAC,SAAS,EAAE,IAAI,OAChD,GACD,QACY,MAAM,GAAG,GAAG;;;;AAKhC,SAAgB,mCAAkF;AAOhG,QALe,WAAW;EACxB,cAAc,iBAFD,YAEwB,CAAC;EACtC,YAAY,yBAAyB;EACrC,WAAW,iBAAiB;EAC7B,CACY,CAAC,OAAO,KAAK,OAAO;EAC/B,MAAM,EAAE;EACR,aAAa,EAAE;EAChB,EAAE"}
@@ -0,0 +1,3 @@
1
+ import type { Config } from '../config/schema.js';
2
+ import type { TuiStartupResources } from './tui-backend.js';
3
+ export declare function collectTuiStartupResources(config: Config, sessionKey?: string): TuiStartupResources;
@@ -0,0 +1,39 @@
1
+ import { resolveStateDir } from "../config/paths-state.js";
2
+ import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir } from "../config/paths.js";
3
+ import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
4
+ import { resolveBootstrapFilesSync } from "../agent/bootstrap/bootstrap-files.js";
5
+ import { createWorkflowCatalog } from "../agent/workflow/catalog.js";
6
+ import { createSkillConfigManager, isSkillEnabled } from "../agent/skills/config.js";
7
+ import { listConnectorInstances } from "../connectors/instances.js";
8
+ import { loadSkills } from "../agent/skills/index.js";
9
+ import { getWorkspacePath } from "../config/workspace-path-helpers.js";
10
+ import "../config/index.js";
11
+ import { basename } from "node:path";
12
+ //#region src/tui/tui-startup-resources.ts
13
+ init_paths();
14
+ function uniqueSorted(values) {
15
+ return [...new Set([...values].map((value) => value.trim()).filter(Boolean))].sort((a, b) => a.localeCompare(b));
16
+ }
17
+ function collectTuiStartupResources(config, sessionKey) {
18
+ const profile = resolveEffectiveAgentProfileForSession(config, sessionKey);
19
+ const profileDir = resolveAgentProfileDir(config, profile.agentId);
20
+ const workspaceDir = profile.resolvedWorkspacePath || getWorkspacePath(config);
21
+ const context = uniqueSorted(resolveBootstrapFilesSync({
22
+ profileDir,
23
+ sessionKey
24
+ }).filter((file) => !file.missing).map((file) => file.name || basename(file.path)));
25
+ const skillsConfig = createSkillConfigManager(resolveStateDir()).load();
26
+ return {
27
+ context,
28
+ skills: uniqueSorted(loadSkills({
29
+ workspaceDir,
30
+ builtinDir: resolveBundledSkillsDir() ?? void 0
31
+ }).skills.filter((skill) => !skill.disableModelInvocation && isSkillEnabled(skill, skillsConfig)).map((skill) => skill.name)),
32
+ workflows: uniqueSorted(createWorkflowCatalog().list().map((entry) => entry.name)),
33
+ connectors: uniqueSorted(listConnectorInstances(config).map((instance) => instance.displayName || instance.connectorId || instance.instanceId))
34
+ };
35
+ }
36
+ //#endregion
37
+ export { collectTuiStartupResources };
38
+
39
+ //# sourceMappingURL=tui-startup-resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-startup-resources.js","names":[],"sources":["../../../src/tui/tui-startup-resources.ts"],"sourcesContent":["import { basename } from 'node:path';\n\nimport { resolveBootstrapFilesSync } from '../agent/bootstrap/bootstrap-files.js';\nimport { loadSkills } from '../agent/skills/index.js';\nimport { isSkillEnabled, createSkillConfigManager } from '../agent/skills/config.js';\nimport { createWorkflowCatalog } from '../agent/workflow/catalog.js';\nimport { resolveEffectiveAgentProfileForSession } from '../config/agent-profile.js';\nimport { getWorkspacePath } from '../config/index.js';\nimport { resolveAgentProfileDir, resolveBundledSkillsDir, resolveStateDir } from '../config/paths.js';\nimport { listConnectorInstances } from '../connectors/instances.js';\nimport type { Config } from '../config/schema.js';\nimport type { TuiStartupResources } from './tui-backend.js';\n\nfunction uniqueSorted(values: Iterable<string>): string[] {\n return [...new Set([...values].map((value) => value.trim()).filter(Boolean))]\n .sort((a, b) => a.localeCompare(b));\n}\n\nexport function collectTuiStartupResources(config: Config, sessionKey?: string): TuiStartupResources {\n const profile = resolveEffectiveAgentProfileForSession(config, sessionKey);\n const profileDir = resolveAgentProfileDir(config, profile.agentId);\n const workspaceDir = profile.resolvedWorkspacePath || getWorkspacePath(config);\n\n const context = uniqueSorted(\n resolveBootstrapFilesSync({ profileDir, sessionKey })\n .filter((file) => !file.missing)\n .map((file) => file.name || basename(file.path)),\n );\n\n const skillsConfig = createSkillConfigManager(resolveStateDir()).load();\n const skills = uniqueSorted(\n loadSkills({\n workspaceDir,\n builtinDir: resolveBundledSkillsDir() ?? undefined,\n }).skills\n .filter((skill) => !skill.disableModelInvocation && isSkillEnabled(skill, skillsConfig))\n .map((skill) => skill.name),\n );\n\n const workflows = uniqueSorted(createWorkflowCatalog().list().map((entry) => entry.name));\n const connectors = uniqueSorted(\n listConnectorInstances(config).map((instance) => instance.displayName || instance.connectorId || instance.instanceId),\n );\n\n return { context, skills, workflows, connectors };\n}\n"],"mappings":";;;;;;;;;;;;YAQsG;AAKtG,SAAS,aAAa,QAAoC;AACxD,QAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAC1E,MAAM,GAAG,MAAM,EAAE,cAAc,EAAE,CAAC;;AAGvC,SAAgB,2BAA2B,QAAgB,YAA0C;CACnG,MAAM,UAAU,uCAAuC,QAAQ,WAAW;CAC1E,MAAM,aAAa,uBAAuB,QAAQ,QAAQ,QAAQ;CAClE,MAAM,eAAe,QAAQ,yBAAyB,iBAAiB,OAAO;CAE9E,MAAM,UAAU,aACd,0BAA0B;EAAE;EAAY;EAAY,CAAC,CAClD,QAAQ,SAAS,CAAC,KAAK,QAAQ,CAC/B,KAAK,SAAS,KAAK,QAAQ,SAAS,KAAK,KAAK,CAAC,CACnD;CAED,MAAM,eAAe,yBAAyB,iBAAiB,CAAC,CAAC,MAAM;AAevE,QAAO;EAAE;EAAS,QAdH,aACb,WAAW;GACT;GACA,YAAY,yBAAyB,IAAI,KAAA;GAC1C,CAAC,CAAC,OACA,QAAQ,UAAU,CAAC,MAAM,0BAA0B,eAAe,OAAO,aAAa,CAAC,CACvF,KAAK,UAAU,MAAM,KAAK,CAQP;EAAE,WALR,aAAa,uBAAuB,CAAC,MAAM,CAAC,KAAK,UAAU,MAAM,KAAK,CAKrD;EAAE,YAJlB,aACjB,uBAAuB,OAAO,CAAC,KAAK,aAAa,SAAS,eAAe,SAAS,eAAe,SAAS,WAAW,CAGxE;EAAE"}
@@ -0,0 +1,10 @@
1
+ import type { KeybindingsManager } from '@earendil-works/pi-tui';
2
+ import type { TuiStartupResources } from './tui-backend.js';
3
+ import type { TuiState } from './tui-types.js';
4
+ export declare function formatTuiStartupText(input: {
5
+ state: TuiState;
6
+ isLocal: boolean;
7
+ keybindings?: KeybindingsManager;
8
+ resources?: TuiStartupResources;
9
+ expanded?: boolean;
10
+ }): string;
@@ -0,0 +1,58 @@
1
+ import { formatKeyIds } from "./format-tui-hotkeys.js";
2
+ import { formatModelLabel } from "./tui-command-formatters.js";
3
+ //#region src/tui/tui-startup-text.ts
4
+ const DEFAULT_LIMIT = 6;
5
+ function keyLabel(keybindings, id, fallback) {
6
+ return keybindings ? formatKeyIds(keybindings, id, { capitalize: false }) : fallback;
7
+ }
8
+ function compactKeyLine(keybindings) {
9
+ return `${keyLabel(keybindings, "app.interrupt", "escape")} interrupt · ${keyLabel(keybindings, "app.clear", "ctrl+c")}/${keyLabel(keybindings, "app.exit", "ctrl+d")} clear/exit · / commands · ! bash · ${keyLabel(keybindings, "app.tools.expand", "ctrl+o")} tools`;
10
+ }
11
+ function formatResourceSection(title, values, options) {
12
+ const list = [...new Set((values ?? []).map((v) => v.trim()).filter(Boolean))].sort((a, b) => a.localeCompare(b));
13
+ const lines = [`[${title}]`];
14
+ if (list.length === 0) {
15
+ lines.push(" none");
16
+ return lines;
17
+ }
18
+ if (!options.expanded) {
19
+ const visible = list.slice(0, DEFAULT_LIMIT);
20
+ const suffix = list.length > visible.length ? `, ... ${list.length - visible.length} more` : "";
21
+ lines.push(` ${visible.join(", ")}${suffix}`);
22
+ return lines;
23
+ }
24
+ const visible = list.slice(0, 30);
25
+ for (const value of visible) lines.push(` ${value}`);
26
+ if (list.length > visible.length) lines.push(` ... ${list.length - visible.length} more`);
27
+ return lines;
28
+ }
29
+ function formatTuiStartupText(input) {
30
+ const expanded = input.expanded === true;
31
+ const lines = [];
32
+ if (expanded) {
33
+ lines.push("xopc TUI", "");
34
+ lines.push(`Session: ${input.state.currentSessionKey}`);
35
+ lines.push(`Mode: ${input.isLocal ? "local embedded" : "gateway"}`);
36
+ lines.push(`Model: ${formatModelLabel(input.state)}`);
37
+ lines.push("");
38
+ }
39
+ lines.push(compactKeyLine(input.keybindings));
40
+ lines.push("Press /start to show full startup help and loaded resources.");
41
+ lines.push("");
42
+ lines.push("xopc can use skills, workflows, connectors, and project context. Ask it how to automate or connect services.");
43
+ if (expanded) lines.push("", "Ask xopc:", " \"what workflows are available?\"", " \"use a connector to check issues or docs\"", " \"what skills can help with this task?\"");
44
+ lines.push("");
45
+ lines.push(...formatResourceSection("Context", input.resources?.context, { expanded }));
46
+ lines.push("");
47
+ lines.push(...formatResourceSection("Skills", input.resources?.skills, { expanded }));
48
+ lines.push("");
49
+ lines.push(...formatResourceSection("Workflows", input.resources?.workflows, { expanded }));
50
+ lines.push("");
51
+ lines.push(...formatResourceSection("Connectors", input.resources?.connectors, { expanded }));
52
+ if (expanded) lines.push("", "Useful commands:", " /help — Show all commands and shortcuts", " /workflows — List saved workflows", " /models — List available models", " /settings — Open TUI settings", " /export — Export current session");
53
+ return lines.join("\n");
54
+ }
55
+ //#endregion
56
+ export { formatTuiStartupText };
57
+
58
+ //# sourceMappingURL=tui-startup-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-startup-text.js","names":[],"sources":["../../../src/tui/tui-startup-text.ts"],"sourcesContent":["import type { KeybindingsManager } from '@earendil-works/pi-tui';\n\nimport { formatKeyIds } from './format-tui-hotkeys.js';\nimport { formatModelLabel } from './tui-command-formatters.js';\nimport type { TuiStartupResources } from './tui-backend.js';\nimport type { TuiState } from './tui-types.js';\n\nconst DEFAULT_LIMIT = 6;\n\nfunction keyLabel(\n keybindings: KeybindingsManager | undefined,\n id: Parameters<KeybindingsManager['getKeys']>[0],\n fallback: string,\n): string {\n return keybindings ? formatKeyIds(keybindings, id, { capitalize: false }) : fallback;\n}\n\nfunction compactKeyLine(keybindings?: KeybindingsManager): string {\n const interrupt = keyLabel(keybindings, 'app.interrupt', 'escape');\n const clear = keyLabel(keybindings, 'app.clear', 'ctrl+c');\n const exit = keyLabel(keybindings, 'app.exit', 'ctrl+d');\n const tools = keyLabel(keybindings, 'app.tools.expand', 'ctrl+o');\n return `${interrupt} interrupt · ${clear}/${exit} clear/exit · / commands · ! bash · ${tools} tools`;\n}\n\nfunction formatResourceSection(\n title: string,\n values: readonly string[] | undefined,\n options: { expanded: boolean },\n): string[] {\n const list = [...new Set((values ?? []).map((v) => v.trim()).filter(Boolean))]\n .sort((a, b) => a.localeCompare(b));\n const lines = [`[${title}]`];\n if (list.length === 0) {\n lines.push(' none');\n return lines;\n }\n if (!options.expanded) {\n const visible = list.slice(0, DEFAULT_LIMIT);\n const suffix = list.length > visible.length ? `, ... ${list.length - visible.length} more` : '';\n lines.push(` ${visible.join(', ')}${suffix}`);\n return lines;\n }\n const visible = list.slice(0, 30);\n for (const value of visible) {\n lines.push(` ${value}`);\n }\n if (list.length > visible.length) {\n lines.push(` ... ${list.length - visible.length} more`);\n }\n return lines;\n}\n\nexport function formatTuiStartupText(input: {\n state: TuiState;\n isLocal: boolean;\n keybindings?: KeybindingsManager;\n resources?: TuiStartupResources;\n expanded?: boolean;\n}): string {\n const expanded = input.expanded === true;\n const lines: string[] = [];\n\n if (expanded) {\n lines.push('xopc TUI', '');\n lines.push(`Session: ${input.state.currentSessionKey}`);\n lines.push(`Mode: ${input.isLocal ? 'local embedded' : 'gateway'}`);\n lines.push(`Model: ${formatModelLabel(input.state)}`);\n lines.push('');\n }\n\n lines.push(compactKeyLine(input.keybindings));\n lines.push('Press /start to show full startup help and loaded resources.');\n lines.push('');\n lines.push(\n 'xopc can use skills, workflows, connectors, and project context. Ask it how to automate or connect services.',\n );\n\n if (expanded) {\n lines.push(\n '',\n 'Ask xopc:',\n ' \"what workflows are available?\"',\n ' \"use a connector to check issues or docs\"',\n ' \"what skills can help with this task?\"',\n );\n }\n\n lines.push('');\n lines.push(...formatResourceSection('Context', input.resources?.context, { expanded }));\n lines.push('');\n lines.push(...formatResourceSection('Skills', input.resources?.skills, { expanded }));\n lines.push('');\n lines.push(...formatResourceSection('Workflows', input.resources?.workflows, { expanded }));\n lines.push('');\n lines.push(...formatResourceSection('Connectors', input.resources?.connectors, { expanded }));\n\n if (expanded) {\n lines.push(\n '',\n 'Useful commands:',\n ' /help — Show all commands and shortcuts',\n ' /workflows — List saved workflows',\n ' /models — List available models',\n ' /settings — Open TUI settings',\n ' /export — Export current session',\n );\n }\n\n return lines.join('\\n');\n}\n"],"mappings":";;;AAOA,MAAM,gBAAgB;AAEtB,SAAS,SACP,aACA,IACA,UACQ;AACR,QAAO,cAAc,aAAa,aAAa,IAAI,EAAE,YAAY,OAAO,CAAC,GAAG;;AAG9E,SAAS,eAAe,aAA0C;AAKhE,QAAO,GAJW,SAAS,aAAa,iBAAiB,SAItC,CAAC,eAHN,SAAS,aAAa,aAAa,SAGT,CAAC,GAF5B,SAAS,aAAa,YAAY,SAEC,CAAC,sCADnC,SAAS,aAAa,oBAAoB,SACoC,CAAC;;AAG/F,SAAS,sBACP,OACA,QACA,SACU;CACV,MAAM,OAAO,CAAC,GAAG,IAAI,KAAK,UAAU,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAC3E,MAAM,GAAG,MAAM,EAAE,cAAc,EAAE,CAAC;CACrC,MAAM,QAAQ,CAAC,IAAI,MAAM,GAAG;AAC5B,KAAI,KAAK,WAAW,GAAG;AACrB,QAAM,KAAK,SAAS;AACpB,SAAO;;AAET,KAAI,CAAC,QAAQ,UAAU;EACrB,MAAM,UAAU,KAAK,MAAM,GAAG,cAAc;EAC5C,MAAM,SAAS,KAAK,SAAS,QAAQ,SAAS,SAAS,KAAK,SAAS,QAAQ,OAAO,SAAS;AAC7F,QAAM,KAAK,KAAK,QAAQ,KAAK,KAAK,GAAG,SAAS;AAC9C,SAAO;;CAET,MAAM,UAAU,KAAK,MAAM,GAAG,GAAG;AACjC,MAAK,MAAM,SAAS,QAClB,OAAM,KAAK,KAAK,QAAQ;AAE1B,KAAI,KAAK,SAAS,QAAQ,OACxB,OAAM,KAAK,SAAS,KAAK,SAAS,QAAQ,OAAO,OAAO;AAE1D,QAAO;;AAGT,SAAgB,qBAAqB,OAM1B;CACT,MAAM,WAAW,MAAM,aAAa;CACpC,MAAM,QAAkB,EAAE;AAE1B,KAAI,UAAU;AACZ,QAAM,KAAK,YAAY,GAAG;AAC1B,QAAM,KAAK,YAAY,MAAM,MAAM,oBAAoB;AACvD,QAAM,KAAK,SAAS,MAAM,UAAU,mBAAmB,YAAY;AACnE,QAAM,KAAK,UAAU,iBAAiB,MAAM,MAAM,GAAG;AACrD,QAAM,KAAK,GAAG;;AAGhB,OAAM,KAAK,eAAe,MAAM,YAAY,CAAC;AAC7C,OAAM,KAAK,+DAA+D;AAC1E,OAAM,KAAK,GAAG;AACd,OAAM,KACJ,+GACD;AAED,KAAI,SACF,OAAM,KACJ,IACA,aACA,uCACA,iDACA,6CACD;AAGH,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,GAAG,sBAAsB,WAAW,MAAM,WAAW,SAAS,EAAE,UAAU,CAAC,CAAC;AACvF,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,GAAG,sBAAsB,UAAU,MAAM,WAAW,QAAQ,EAAE,UAAU,CAAC,CAAC;AACrF,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,GAAG,sBAAsB,aAAa,MAAM,WAAW,WAAW,EAAE,UAAU,CAAC,CAAC;AAC3F,OAAM,KAAK,GAAG;AACd,OAAM,KAAK,GAAG,sBAAsB,cAAc,MAAM,WAAW,YAAY,EAAE,UAAU,CAAC,CAAC;AAE7F,KAAI,SACF,OAAM,KACJ,IACA,oBACA,6CACA,uCACA,qCACA,mCACA,qCACD;AAGH,QAAO,MAAM,KAAK,KAAK"}
@@ -6,6 +6,7 @@
6
6
  * is active (e.g. file-only + explicit subsystem tags) instead of patching stdio here.
7
7
  */
8
8
  export declare function isLikelyPinoJsonLogLine(line: string): boolean;
9
+ export declare function isLikelyPinoJsonLogPrefix(text: string): boolean;
9
10
  export type TuiStdioFilterHandle = {
10
11
  restore: () => void;
11
12
  /** Restore native stdio writes temporarily (e.g. inherited child process). */
@@ -10,11 +10,16 @@ function isLikelyPinoJsonLogLine(line) {
10
10
  const t = line.trim();
11
11
  if (!t.startsWith("{")) return false;
12
12
  try {
13
- return typeof JSON.parse(t).level === "number";
13
+ const parsed = JSON.parse(t);
14
+ return typeof parsed.level === "number" || typeof parsed.level === "string";
14
15
  } catch {
15
16
  return false;
16
17
  }
17
18
  }
19
+ function isLikelyPinoJsonLogPrefix(text) {
20
+ const t = text.trimStart();
21
+ return t.startsWith("{") && /"level"\s*:/.test(t);
22
+ }
18
23
  /** Patch process stdout/stderr; call `restore()` before exiting the TUI. */
19
24
  function installTuiStdioFilter() {
20
25
  const originalStdoutWrite = process.stdout.write.bind(process.stdout);
@@ -43,11 +48,10 @@ function installTuiStdioFilter() {
43
48
  const text = typeof chunk === "string" ? chunk : chunk instanceof Buffer ? chunk.toString() : "";
44
49
  if (text.includes("\x1B")) {
45
50
  let emit = takeEmitCompleteLines(buf);
46
- if (buf.s.length > 0) {
47
- if (!buf.s.trimStart().startsWith("{")) {
48
- emit += buf.s;
49
- buf.s = "";
50
- }
51
+ if (buf.s.length > 0) if (isLikelyPinoJsonLogPrefix(buf.s)) buf.s = "";
52
+ else {
53
+ emit += buf.s;
54
+ buf.s = "";
51
55
  }
52
56
  if (emit.length > 0) original(emit, ...rest);
53
57
  return original(text, ...rest);
@@ -91,6 +95,6 @@ function installTuiStdioFilter() {
91
95
  };
92
96
  }
93
97
  //#endregion
94
- export { installTuiStdioFilter, isLikelyPinoJsonLogLine };
98
+ export { installTuiStdioFilter, isLikelyPinoJsonLogLine, isLikelyPinoJsonLogPrefix };
95
99
 
96
100
  //# sourceMappingURL=tui-stdio-filter.js.map