@xopcai/xopc 0.0.102 → 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 (995) hide show
  1. package/README.md +8 -5
  2. package/README.zh-CN.md +8 -5
  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 +2 -2
  20. package/dist/extensions/feishu/src/transport/webhook/monitor.js.map +1 -1
  21. package/dist/extensions/feishu/xopc.extension.json +66 -1
  22. package/dist/extensions/telegram/src/adapters/gateway-setup.d.ts +2 -0
  23. package/dist/extensions/telegram/src/adapters/gateway-setup.js +146 -0
  24. package/dist/extensions/telegram/src/adapters/gateway-setup.js.map +1 -0
  25. package/dist/extensions/telegram/src/adapters/security-adapter.js +1 -1
  26. package/dist/extensions/telegram/src/command-handler.js +1 -2
  27. package/dist/extensions/telegram/src/command-handler.js.map +1 -1
  28. package/dist/extensions/telegram/src/config-schema.js +2 -2
  29. package/dist/extensions/telegram/src/config-schema.js.map +1 -1
  30. package/dist/extensions/telegram/src/doctor.d.ts +1 -0
  31. package/dist/extensions/telegram/src/doctor.js +68 -0
  32. package/dist/extensions/telegram/src/doctor.js.map +1 -1
  33. package/dist/extensions/telegram/src/index.d.ts +8 -1
  34. package/dist/extensions/telegram/src/index.js +15 -2
  35. package/dist/extensions/telegram/src/index.js.map +1 -0
  36. package/dist/extensions/telegram/src/plugin.d.ts +13 -5
  37. package/dist/extensions/telegram/src/plugin.js +32 -12
  38. package/dist/extensions/telegram/src/plugin.js.map +1 -1
  39. package/dist/extensions/telegram/src/proxy-fetch.js +22 -5
  40. package/dist/extensions/telegram/src/proxy-fetch.js.map +1 -1
  41. package/dist/extensions/telegram/src/send-options.js +8 -5
  42. package/dist/extensions/telegram/src/send-options.js.map +1 -1
  43. package/dist/extensions/telegram/xopc.extension.json +412 -5
  44. package/dist/extensions/weixin/src/adapters/onboard-cli.js +2 -2
  45. package/dist/extensions/weixin/src/adapters/onboard-cli.js.map +1 -1
  46. package/dist/extensions/weixin/src/api/api.js +1 -1
  47. package/dist/extensions/weixin/src/index.d.ts +8 -0
  48. package/dist/extensions/weixin/src/index.js +12 -1
  49. package/dist/extensions/weixin/src/index.js.map +1 -0
  50. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  51. package/dist/extensions/weixin/src/plugin.d.ts +2 -1
  52. package/dist/extensions/weixin/src/plugin.js +77 -2
  53. package/dist/extensions/weixin/src/plugin.js.map +1 -1
  54. package/dist/extensions/weixin/xopc.extension.json +52 -0
  55. package/dist/gateway/static/root/assets/agents-CvsBrBfi.js +396 -0
  56. package/dist/gateway/static/root/assets/{apps-page-Uv4kOmDE.js → apps-page-L-IwQTe0.js} +1 -1
  57. package/dist/gateway/static/root/assets/browser-BLJWD7WI.js +8 -0
  58. package/dist/gateway/static/root/assets/channels-settings-D95KuPeP.js +1 -0
  59. package/dist/gateway/static/root/assets/cron-page-CfkWXDAI.js +1 -0
  60. package/dist/gateway/static/root/assets/{dist-DH4IuRV0.js → dist-C6vclgEL.js} +1 -1
  61. package/dist/gateway/static/root/assets/{extension-debug-page-BNkhvRQW.js → extension-debug-page-D4JYAbsX.js} +1 -1
  62. package/dist/gateway/static/root/assets/{extension-page-CcIGQah2.js → extension-page-_T62gi6e.js} +1 -1
  63. package/dist/gateway/static/root/assets/extension-settings-page-CkJbjyM-.js +1 -0
  64. package/dist/gateway/static/root/assets/{fetch-drJUxxKP.js → fetch-B5aiIguv.js} +1 -1
  65. package/dist/gateway/static/root/assets/gateway-startup-retry-DqmLXhs6.js +1 -0
  66. package/dist/gateway/static/root/assets/heartbeat-config-api-HwJV1K_Y.js +1 -0
  67. package/dist/gateway/static/root/assets/index-BPYKW7FB.css +1 -0
  68. package/dist/gateway/static/root/assets/index-DvTb6wNR.js +4845 -0
  69. package/dist/gateway/static/root/assets/{logs-page-CiG0m81R.js → logs-page-DsjtTjBy.js} +2 -2
  70. package/dist/gateway/static/root/assets/{note-detail-page-DG3DVFTf.js → note-detail-page-B2V7RhgD.js} +43 -43
  71. package/dist/gateway/static/root/assets/{note-time-DjlllCF3.js → note-time-BG8GCTr4.js} +1 -1
  72. package/dist/gateway/static/root/assets/notes-page-xrcVBQ6Z.js +1 -0
  73. package/dist/gateway/static/root/assets/schema-form-S-QUvhul.js +1 -0
  74. package/dist/gateway/static/root/assets/sessions-page-CrQer6Au.js +1 -0
  75. package/dist/gateway/static/root/assets/settings-advanced-gate-DujQl9c7.js +2 -0
  76. package/dist/gateway/static/root/assets/{settings-form-section-C3_sEFfD.js → settings-form-section-r1V7dRV6.js} +1 -1
  77. package/dist/gateway/static/root/assets/settings-page-C9nrONQ2.js +3 -0
  78. package/dist/gateway/static/root/assets/share-preview-page-DOFy0FNt.js +2 -0
  79. package/dist/gateway/static/root/assets/skills-page-DmTsrs_a.js +2 -0
  80. package/dist/gateway/static/root/assets/{theme-store-B6KXPHgK.js → theme-store-Bo3j5Ovv.js} +1 -1
  81. package/dist/gateway/static/root/assets/url-WgQIjFZu.js +3 -0
  82. package/dist/gateway/static/root/assets/voice-api-key-field-AjmUAlEQ.js +1 -0
  83. package/dist/gateway/static/root/assets/{workflow-page.utils-g57BRfEd.js → workflow-page.utils-DLEJ92gK.js} +1 -1
  84. package/dist/gateway/static/root/assets/workflows-page-BnjjKrM1.js +27 -0
  85. package/dist/gateway/static/root/index.html +6 -5
  86. package/dist/package.js +1 -1
  87. package/dist/src/agent/agent-manager.d.ts +18 -6
  88. package/dist/src/agent/agent-manager.js +60 -35
  89. package/dist/src/agent/agent-manager.js.map +1 -1
  90. package/dist/src/agent/builtin-agent-ids.d.ts +2 -0
  91. package/dist/src/agent/builtin-agent-ids.js +17 -0
  92. package/dist/src/agent/builtin-agent-ids.js.map +1 -0
  93. package/dist/src/agent/child-agent-factory.d.ts +4 -0
  94. package/dist/src/agent/child-agent-factory.js +28 -8
  95. package/dist/src/agent/child-agent-factory.js.map +1 -1
  96. package/dist/src/agent/context/workspace-seed.js +1 -1
  97. package/dist/src/agent/context/workspace-templates/AGENTS.md +23 -184
  98. package/dist/src/agent/embedded/run-turn.js +8 -2
  99. package/dist/src/agent/embedded/run-turn.js.map +1 -1
  100. package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
  101. package/dist/src/agent/embedded/subscribe-session.js +33 -51
  102. package/dist/src/agent/embedded/subscribe-session.js.map +1 -1
  103. package/dist/src/agent/embedded/types.d.ts +36 -35
  104. package/dist/src/agent/fallback/candidates.js +1 -1
  105. package/dist/src/agent/fallback/candidates.js.map +1 -1
  106. package/dist/src/agent/inbound/attachment-pipeline.js +2 -2
  107. package/dist/src/agent/inbound/attachment-pipeline.js.map +1 -1
  108. package/dist/src/agent/inbound/inbound-loop.js +1 -1
  109. package/dist/src/agent/inbound/turn-dispatcher.d.ts +1 -0
  110. package/dist/src/agent/inbound/turn-dispatcher.js +24 -5
  111. package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
  112. package/dist/src/agent/models/manager.d.ts +1 -1
  113. package/dist/src/agent/models/manager.js +1 -1
  114. package/dist/src/agent/models/manager.js.map +1 -1
  115. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +1 -1
  116. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
  117. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
  118. package/dist/src/agent/prompt/sections/tooling.js +4 -0
  119. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  120. package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -0
  121. package/dist/src/agent/service/direct-turn-helpers.js +1 -1
  122. package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
  123. package/dist/src/agent/service/process-direct-streaming.d.ts +1 -0
  124. package/dist/src/agent/service/process-direct-streaming.js +35 -18
  125. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  126. package/dist/src/agent/service-inbound-utils.d.ts +0 -1
  127. package/dist/src/agent/service-inbound-utils.js +1 -17
  128. package/dist/src/agent/service-inbound-utils.js.map +1 -1
  129. package/dist/src/agent/service.d.ts +4 -4
  130. package/dist/src/agent/service.js +27 -15
  131. package/dist/src/agent/service.js.map +1 -1
  132. package/dist/src/agent/session/session-config-service.d.ts +1 -0
  133. package/dist/src/agent/session/session-config-service.js +9 -1
  134. package/dist/src/agent/session/session-config-service.js.map +1 -1
  135. package/dist/src/agent/session/session-inspector.d.ts +2 -1
  136. package/dist/src/agent/session/session-inspector.js +4 -0
  137. package/dist/src/agent/session/session-inspector.js.map +1 -1
  138. package/dist/src/agent/skills/config.js +1 -3
  139. package/dist/src/agent/skills/config.js.map +1 -1
  140. package/dist/src/agent/skills/format-skills-prompt.d.ts +1 -0
  141. package/dist/src/agent/skills/format-skills-prompt.js +3 -2
  142. package/dist/src/agent/skills/format-skills-prompt.js.map +1 -1
  143. package/dist/src/agent/skills/hub-pull.js +1 -1
  144. package/dist/src/agent/skills/index.js +20 -5
  145. package/dist/src/agent/skills/index.js.map +1 -1
  146. package/dist/src/agent/skills/installer.js +14 -27
  147. package/dist/src/agent/skills/installer.js.map +1 -1
  148. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +11 -1
  149. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +1 -1
  150. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +18 -4
  151. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -1
  152. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +11 -2
  153. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +1 -1
  154. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +2 -2
  155. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +1 -1
  156. package/dist/src/agent/skills/skill-manager.d.ts +4 -1
  157. package/dist/src/agent/skills/skill-manager.js +3 -3
  158. package/dist/src/agent/skills/skill-manager.js.map +1 -1
  159. package/dist/src/agent/skills/skill-view-path.d.ts +1 -17
  160. package/dist/src/agent/skills/skill-view-path.js +3 -66
  161. package/dist/src/agent/skills/skill-view-path.js.map +1 -1
  162. package/dist/src/agent/skills/test-framework.js +2 -3
  163. package/dist/src/agent/skills/test-framework.js.map +1 -1
  164. package/dist/src/agent/streaming/reasoning-visibility-sse.js +1 -0
  165. package/dist/src/agent/streaming/reasoning-visibility-sse.js.map +1 -1
  166. package/dist/src/agent/tool-manuals/browser.d.ts +1 -0
  167. package/{skills/browser/SKILL.md → dist/src/agent/tool-manuals/browser.js} +51 -54
  168. package/dist/src/agent/tool-manuals/browser.js.map +1 -0
  169. package/dist/src/agent/tool-manuals/index.d.ts +10 -0
  170. package/dist/src/agent/tool-manuals/index.js +28 -0
  171. package/dist/src/agent/tool-manuals/index.js.map +1 -0
  172. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
  173. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
  174. package/dist/src/agent/tools/factory.js +7 -5
  175. package/dist/src/agent/tools/factory.js.map +1 -1
  176. package/dist/src/agent/tools/index.d.ts +1 -0
  177. package/dist/src/agent/tools/index.js +5 -4
  178. package/dist/src/agent/tools/send-media.js +1 -2
  179. package/dist/src/agent/tools/send-media.js.map +1 -1
  180. package/dist/src/agent/tools/session-search-tool.js +1 -1
  181. package/dist/src/agent/tools/shell.js +1 -1
  182. package/dist/src/agent/tools/skills-tools.js +37 -8
  183. package/dist/src/agent/tools/skills-tools.js.map +1 -1
  184. package/dist/src/agent/tools/tool-manual-tool.d.ts +6 -0
  185. package/dist/src/agent/tools/tool-manual-tool.js +34 -0
  186. package/dist/src/agent/tools/tool-manual-tool.js.map +1 -0
  187. package/dist/src/agent/tools/web-extract.js +2 -2
  188. package/dist/src/agent/tools/web.js +1 -1
  189. package/dist/src/agent/workflow/catalog.d.ts +7 -2
  190. package/dist/src/agent/workflow/catalog.js +66 -25
  191. package/dist/src/agent/workflow/catalog.js.map +1 -1
  192. package/dist/src/agent/workflow/subagent-runner.d.ts +3 -0
  193. package/dist/src/agent/workflow/subagent-runner.js +50 -4
  194. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  195. package/dist/src/agent/workflow/types.d.ts +10 -0
  196. package/dist/src/auth/credentials.d.ts +7 -0
  197. package/dist/src/auth/credentials.js +45 -7
  198. package/dist/src/auth/credentials.js.map +1 -1
  199. package/dist/src/auth/index.d.ts +1 -1
  200. package/dist/src/auth/index.js.map +1 -1
  201. package/dist/src/auth/oauth/github-copilot.d.ts +1 -1
  202. package/dist/src/auth/oauth/google-antigravity.d.ts +1 -3
  203. package/dist/src/auth/oauth/google-antigravity.js +1 -1
  204. package/dist/src/auth/oauth/google-gemini-cli.d.ts +1 -3
  205. package/dist/src/auth/oauth/google-gemini-cli.js +1 -1
  206. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-antigravity.js +3 -5
  207. package/dist/src/auth/oauth/google-oauth/google-antigravity.js.map +1 -0
  208. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-gemini-cli.js +4 -5
  209. package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js.map +1 -0
  210. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/oauth-page.js +12 -4
  211. package/dist/src/auth/oauth/google-oauth/oauth-page.js.map +1 -0
  212. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/pkce.d.ts +1 -1
  213. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/pkce.js +2 -2
  214. package/dist/src/auth/oauth/google-oauth/pkce.js.map +1 -0
  215. package/dist/src/auth/oauth/index.js +2 -2
  216. package/dist/src/auth/oauth/kimi-coding.d.ts +1 -1
  217. package/dist/src/auth/oauth/kimi-coding.js +1 -1
  218. package/dist/src/auth/oauth/kimi-coding.js.map +1 -1
  219. package/dist/src/auth/oauth/minimax-cn.js +1 -1
  220. package/dist/src/auth/oauth/minimax-cn.js.map +1 -1
  221. package/dist/src/auth/oauth/minimax.js +1 -1
  222. package/dist/src/auth/oauth/minimax.js.map +1 -1
  223. package/dist/src/auth/oauth/openai-codex.d.ts +7 -2
  224. package/dist/src/auth/oauth/openai-codex.js +318 -1
  225. package/dist/src/auth/oauth/openai-codex.js.map +1 -0
  226. package/dist/src/auth/profiles/store.js +3 -2
  227. package/dist/src/auth/profiles/store.js.map +1 -1
  228. package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
  229. package/dist/src/browser/actions/registry.js +2 -2
  230. package/dist/src/browser/cdp-local-launcher.js +1 -1
  231. package/dist/src/browser/index.js +3 -3
  232. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  233. package/dist/src/browser/providers/cloakbrowser.js +1 -1
  234. package/dist/src/channels/attachments/attachment-classifiers.d.ts +1 -0
  235. package/dist/src/channels/attachments/attachment-classifiers.js +13 -2
  236. package/dist/src/channels/attachments/attachment-classifiers.js.map +1 -1
  237. package/dist/src/channels/catalog/channel-catalog-service.d.ts +11 -0
  238. package/dist/src/channels/catalog/channel-catalog-service.js +168 -0
  239. package/dist/src/channels/catalog/channel-catalog-service.js.map +1 -0
  240. package/dist/src/channels/catalog/channel-catalog-types.d.ts +22 -0
  241. package/dist/src/channels/catalog/channel-catalog-types.js +1 -0
  242. package/dist/src/channels/dock.d.ts +0 -7
  243. package/dist/src/channels/dock.js +1 -21
  244. package/dist/src/channels/index.d.ts +1 -3
  245. package/dist/src/channels/index.js +1 -5
  246. package/dist/src/channels/lifecycle-supervisor.d.ts +1 -0
  247. package/dist/src/channels/lifecycle-supervisor.js +11 -0
  248. package/dist/src/channels/lifecycle-supervisor.js.map +1 -1
  249. package/dist/src/channels/manager.d.ts +1 -0
  250. package/dist/src/channels/manager.js +3 -0
  251. package/dist/src/channels/manager.js.map +1 -1
  252. package/dist/src/channels/pairing/pairing-channel.d.ts +2 -3
  253. package/dist/src/channels/pairing/pairing-messages.js +1 -1
  254. package/dist/src/channels/pairing/pairing-messages.js.map +1 -1
  255. package/dist/src/channels/pairing/pairing-service.d.ts +1 -1
  256. package/dist/src/channels/pairing/pairing-service.js +8 -27
  257. package/dist/src/channels/pairing/pairing-service.js.map +1 -1
  258. package/dist/src/channels/plugin-types.d.ts +3 -1
  259. package/dist/src/channels/plugins/types.adapters.d.ts +55 -2
  260. package/dist/src/channels/telegram/index.js +1 -1
  261. package/dist/src/chat-commands/builtins/config.js +4 -4
  262. package/dist/src/chat-commands/builtins/config.js.map +1 -1
  263. package/dist/src/chat-commands/builtins/model.js +2 -2
  264. package/dist/src/chat-commands/builtins/model.js.map +1 -1
  265. package/dist/src/chat-commands/config-paths.js +1 -1
  266. package/dist/src/chat-commands/config-paths.js.map +1 -1
  267. package/dist/src/chat-commands/context.js +1 -1
  268. package/dist/src/chat-commands/context.js.map +1 -1
  269. package/dist/src/cli/bin.js +1 -1
  270. package/dist/src/cli/command-manifest.js +2 -2
  271. package/dist/src/cli/command-manifest.js.map +1 -1
  272. package/dist/src/cli/commands/agent.js +2 -2
  273. package/dist/src/cli/commands/agent.js.map +1 -1
  274. package/dist/src/cli/commands/agents.js +2 -4
  275. package/dist/src/cli/commands/agents.js.map +1 -1
  276. package/dist/src/cli/commands/auth.js +40 -52
  277. package/dist/src/cli/commands/auth.js.map +1 -1
  278. package/dist/src/cli/commands/browser-cli-helpers.js +1 -1
  279. package/dist/src/cli/commands/channels.d.ts +1 -5
  280. package/dist/src/cli/commands/channels.js +115 -281
  281. package/dist/src/cli/commands/channels.js.map +1 -1
  282. package/dist/src/cli/commands/config.js +2 -2
  283. package/dist/src/cli/commands/config.js.map +1 -1
  284. package/dist/src/cli/commands/doctor/checks/channel-config.js +16 -69
  285. package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -1
  286. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +6 -4
  287. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js.map +1 -1
  288. package/dist/src/cli/commands/doctor/checks/channel-plugins.js +2 -2
  289. package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +1 -1
  290. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  291. package/dist/src/cli/commands/doctor/checks/provider-auth.js +13 -9
  292. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
  293. package/dist/src/cli/commands/extension-dev.js +2 -1
  294. package/dist/src/cli/commands/extension-dev.js.map +1 -1
  295. package/dist/src/cli/commands/extension-marketplace.js +2 -1
  296. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  297. package/dist/src/cli/commands/extension-pack.js +2 -1
  298. package/dist/src/cli/commands/extension-pack.js.map +1 -1
  299. package/dist/src/cli/commands/models.js +192 -54
  300. package/dist/src/cli/commands/models.js.map +1 -1
  301. package/dist/src/cli/commands/onboard/channels/index.js +1 -1
  302. package/dist/src/cli/commands/onboard/channels/index.js.map +1 -1
  303. package/dist/src/cli/commands/onboard/channels/registry.d.ts +2 -1
  304. package/dist/src/cli/commands/onboard/channels/registry.js +32 -8
  305. package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
  306. package/dist/src/cli/commands/onboard/model.d.ts +1 -4
  307. package/dist/src/cli/commands/onboard/model.js +257 -184
  308. package/dist/src/cli/commands/onboard/model.js.map +1 -1
  309. package/dist/src/cli/commands/onboard.js +4 -6
  310. package/dist/src/cli/commands/onboard.js.map +1 -1
  311. package/dist/src/cli/commands/setup-shared/runner.d.ts +1 -1
  312. package/dist/src/cli/commands/setup-shared/runner.js.map +1 -1
  313. package/dist/src/cli/commands/setup-shared/types.d.ts +1 -1
  314. package/dist/src/cli/commands/setup-shared/types.js.map +1 -1
  315. package/dist/src/cli/commands/tui.js +13 -5
  316. package/dist/src/cli/commands/tui.js.map +1 -1
  317. package/dist/src/cli/extension-cli-register.js +1 -1
  318. package/dist/src/cli/utils/oauth-login.d.ts +17 -0
  319. package/dist/src/cli/utils/oauth-login.js +93 -0
  320. package/dist/src/cli/utils/oauth-login.js.map +1 -0
  321. package/dist/src/cli/utils/oauth-providers.js +2 -2
  322. package/dist/src/commands/agents.config.d.ts +3 -3
  323. package/dist/src/commands/agents.config.js +7 -7
  324. package/dist/src/commands/agents.config.js.map +1 -1
  325. package/dist/src/config/agent-profile.d.ts +1 -1
  326. package/dist/src/config/agent-profile.js +6 -2
  327. package/dist/src/config/agent-profile.js.map +1 -1
  328. package/dist/src/config/agent-typed-models.d.ts +2 -2
  329. package/dist/src/config/agent-typed-models.js +13 -2
  330. package/dist/src/config/agent-typed-models.js.map +1 -1
  331. package/dist/src/config/index.js +3 -3
  332. package/dist/src/config/integration.d.ts +1 -1
  333. package/dist/src/config/loader.d.ts +0 -1
  334. package/dist/src/config/loader.js +4 -9
  335. package/dist/src/config/loader.js.map +1 -1
  336. package/dist/src/config/models-json.d.ts +6 -6
  337. package/dist/src/config/rules.js +2 -12
  338. package/dist/src/config/rules.js.map +1 -1
  339. package/dist/src/config/schema.d.ts +74 -47
  340. package/dist/src/config/schema.js +28 -66
  341. package/dist/src/config/schema.js.map +1 -1
  342. package/dist/src/config/validate-channel-configs.d.ts +0 -3
  343. package/dist/src/config/validate-channel-configs.js +29 -10
  344. package/dist/src/config/validate-channel-configs.js.map +1 -1
  345. package/dist/src/cron/executor.js +1 -4
  346. package/dist/src/cron/executor.js.map +1 -1
  347. package/dist/src/extensions/activation-context.js +3 -1
  348. package/dist/src/extensions/activation-context.js.map +1 -1
  349. package/dist/src/extensions/activation-planner.js +12 -0
  350. package/dist/src/extensions/activation-planner.js.map +1 -1
  351. package/dist/src/extensions/api.d.ts +5 -1
  352. package/dist/src/extensions/api.js +12 -0
  353. package/dist/src/extensions/api.js.map +1 -1
  354. package/dist/src/extensions/discover-extensions.js +17 -13
  355. package/dist/src/extensions/discover-extensions.js.map +1 -1
  356. package/dist/src/extensions/extension-metadata-snapshot.js +11 -5
  357. package/dist/src/extensions/extension-metadata-snapshot.js.map +1 -1
  358. package/dist/src/extensions/index.js +12 -4
  359. package/dist/src/extensions/index.js.map +1 -0
  360. package/dist/src/extensions/loader.d.ts +5 -1
  361. package/dist/src/extensions/loader.js +12 -11
  362. package/dist/src/extensions/loader.js.map +1 -1
  363. package/dist/src/extensions/manifest-registry.js +98 -93
  364. package/dist/src/extensions/manifest-registry.js.map +1 -1
  365. package/dist/src/extensions/normalize-manifest.js +91 -15
  366. package/dist/src/extensions/normalize-manifest.js.map +1 -1
  367. package/dist/src/extensions/sdk/index.js +1 -1
  368. package/dist/src/extensions/sdk/testing.js +4 -0
  369. package/dist/src/extensions/sdk/testing.js.map +1 -1
  370. package/dist/src/extensions/types/core.d.ts +32 -1
  371. package/dist/src/extensions/types/manifest.d.ts +60 -0
  372. package/dist/src/extensions/types/tui.d.ts +414 -5
  373. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  374. package/dist/src/gateway/agent-builtin-tools.js +16 -0
  375. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  376. package/dist/src/gateway/agent-run-relay.d.ts +2 -3
  377. package/dist/src/gateway/agent-run-relay.js +10 -3
  378. package/dist/src/gateway/agent-run-relay.js.map +1 -1
  379. package/dist/src/gateway/agents-admin.d.ts +32 -19
  380. package/dist/src/gateway/agents-admin.js +113 -93
  381. package/dist/src/gateway/agents-admin.js.map +1 -1
  382. package/dist/src/gateway/chat-stream/mapper.d.ts +34 -0
  383. package/dist/src/gateway/chat-stream/mapper.js +244 -0
  384. package/dist/src/gateway/chat-stream/mapper.js.map +1 -0
  385. package/dist/src/gateway/chat-stream/protocol.d.ts +100 -0
  386. package/dist/src/gateway/chat-stream/protocol.js +1 -0
  387. package/dist/src/gateway/hono/lib/agent-model.d.ts +4 -4
  388. package/dist/src/gateway/hono/lib/agent-model.js +13 -11
  389. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  390. package/dist/src/gateway/hono/lib/config-payload.d.ts +19 -7
  391. package/dist/src/gateway/hono/lib/config-payload.js +16 -15
  392. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  393. package/dist/src/gateway/hono/oauth-async.js +2 -2
  394. package/dist/src/gateway/hono/oauth.js +2 -2
  395. package/dist/src/gateway/hono/routes/agents.js +83 -48
  396. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  397. package/dist/src/gateway/hono/routes/channels.js +134 -214
  398. package/dist/src/gateway/hono/routes/channels.js.map +1 -1
  399. package/dist/src/gateway/hono/routes/commands-skills.js +10 -4
  400. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  401. package/dist/src/gateway/hono/routes/config-patch/agents.js +26 -13
  402. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  403. package/dist/src/gateway/hono/routes/config-patch/channels.d.ts +1 -11
  404. package/dist/src/gateway/hono/routes/config-patch/channels.js +18 -165
  405. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
  406. package/dist/src/gateway/hono/routes/config.js +5 -2
  407. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  408. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  409. package/dist/src/gateway/hono/routes/lazy-bundles.js +13 -1
  410. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  411. package/dist/src/gateway/hono/routes/models.js +25 -5
  412. package/dist/src/gateway/hono/routes/models.js.map +1 -1
  413. package/dist/src/gateway/hono/routes/public-gateway.js +2 -4
  414. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  415. package/dist/src/gateway/hono/routes/sessions.js +179 -0
  416. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  417. package/dist/src/gateway/hono/routes/tui.d.ts +3 -0
  418. package/dist/src/gateway/hono/routes/tui.js +16 -0
  419. package/dist/src/gateway/hono/routes/tui.js.map +1 -0
  420. package/dist/src/gateway/hono/routes/workflows.js +25 -1
  421. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  422. package/dist/src/gateway/hono/sse.d.ts +5 -7
  423. package/dist/src/gateway/hono/sse.js +21 -38
  424. package/dist/src/gateway/hono/sse.js.map +1 -1
  425. package/dist/src/gateway/protocol.js.map +1 -1
  426. package/dist/src/gateway/service/agent-runner.d.ts +2 -4
  427. package/dist/src/gateway/service/agent-runner.js +1 -1
  428. package/dist/src/gateway/service/agent-runner.js.map +1 -1
  429. package/dist/src/gateway/service/marketplace-service.d.ts +4 -3
  430. package/dist/src/gateway/service/marketplace-service.js +7 -4
  431. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  432. package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -6
  433. package/dist/src/gateway/service/run-gateway-agent.js +63 -36
  434. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  435. package/dist/src/gateway/service/sessions-api.d.ts +19 -0
  436. package/dist/src/gateway/service/sessions-api.js +12 -0
  437. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  438. package/dist/src/gateway/service.d.ts +6 -0
  439. package/dist/src/gateway/service.js +73 -57
  440. package/dist/src/gateway/service.js.map +1 -1
  441. package/dist/src/mcp/channel-bridge.js +1 -1
  442. package/dist/src/media/store.js +3 -0
  443. package/dist/src/media/store.js.map +1 -1
  444. package/dist/src/notes/service.js +1 -1
  445. package/dist/src/notes/service.js.map +1 -1
  446. package/dist/src/project-trust/trust-store.d.ts +30 -0
  447. package/dist/src/project-trust/trust-store.js +194 -0
  448. package/dist/src/project-trust/trust-store.js.map +1 -0
  449. package/dist/src/providers/index.d.ts +4 -4
  450. package/dist/src/providers/index.js +41 -22
  451. package/dist/src/providers/index.js.map +1 -1
  452. package/dist/src/providers/presentation.d.ts +34 -0
  453. package/dist/src/providers/presentation.js +162 -0
  454. package/dist/src/providers/presentation.js.map +1 -0
  455. package/dist/src/routing/resolve-route.d.ts +0 -3
  456. package/dist/src/routing/resolve-route.js.map +1 -1
  457. package/dist/src/routing/resolve-tui-session-key.d.ts +2 -0
  458. package/dist/src/routing/resolve-tui-session-key.js +8 -3
  459. package/dist/src/routing/resolve-tui-session-key.js.map +1 -1
  460. package/dist/src/session/client-history.d.ts +32 -0
  461. package/dist/src/session/client-history.js +232 -1
  462. package/dist/src/session/client-history.js.map +1 -1
  463. package/dist/src/session/manager.d.ts +37 -4
  464. package/dist/src/session/manager.js +39 -15
  465. package/dist/src/session/manager.js.map +1 -1
  466. package/dist/src/session/session-context-for-llm.d.ts +93 -1
  467. package/dist/src/session/session-context-for-llm.js +105 -2
  468. package/dist/src/session/session-context-for-llm.js.map +1 -1
  469. package/dist/src/session/store.d.ts +37 -0
  470. package/dist/src/session/store.js +127 -2
  471. package/dist/src/session/store.js.map +1 -1
  472. package/dist/src/session/stored-rows-to-file-entries.js +37 -1
  473. package/dist/src/session/stored-rows-to-file-entries.js.map +1 -1
  474. package/dist/src/session/types.d.ts +14 -1
  475. package/dist/src/session/types.js.map +1 -1
  476. package/dist/src/share/share-thumbnail.js +1 -1
  477. package/dist/src/storage/sqlite/migrations/004_add_session_type_metadata.sql +15 -0
  478. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  479. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  480. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  481. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  482. package/dist/src/storage/sqlite/row-mappers.d.ts +14 -1
  483. package/dist/src/storage/sqlite/row-mappers.js +14 -1
  484. package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
  485. package/dist/src/storage/sqlite/schema.js +1 -1
  486. package/dist/src/storage/sqlite/session-metadata.js +1 -0
  487. package/dist/src/storage/sqlite/session-metadata.js.map +1 -1
  488. package/dist/src/storage/sqlite/session-repository.js +52 -25
  489. package/dist/src/storage/sqlite/session-repository.js.map +1 -1
  490. package/dist/src/tui/backends/embedded-backend.d.ts +53 -4
  491. package/dist/src/tui/backends/embedded-backend.js +227 -39
  492. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  493. package/dist/src/tui/backends/gateway-sse-backend.d.ts +59 -3
  494. package/dist/src/tui/backends/gateway-sse-backend.js +416 -26
  495. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  496. package/dist/src/tui/chat-history.d.ts +5 -1
  497. package/dist/src/tui/chat-history.js +78 -8
  498. package/dist/src/tui/chat-history.js.map +1 -1
  499. package/dist/src/tui/clipboard-text.d.ts +5 -0
  500. package/dist/src/tui/clipboard-text.js +46 -0
  501. package/dist/src/tui/clipboard-text.js.map +1 -0
  502. package/dist/src/tui/components/assistant-message.d.ts +19 -3
  503. package/dist/src/tui/components/assistant-message.js +115 -9
  504. package/dist/src/tui/components/assistant-message.js.map +1 -1
  505. package/dist/src/tui/components/bash-execution.d.ts +3 -2
  506. package/dist/src/tui/components/bash-execution.js +31 -3
  507. package/dist/src/tui/components/bash-execution.js.map +1 -1
  508. package/dist/src/tui/components/bash-summary.d.ts +23 -0
  509. package/dist/src/tui/components/bash-summary.js +87 -0
  510. package/dist/src/tui/components/bash-summary.js.map +1 -0
  511. package/dist/src/tui/components/branch-message-summary.d.ts +17 -0
  512. package/dist/src/tui/components/branch-message-summary.js +43 -0
  513. package/dist/src/tui/components/branch-message-summary.js.map +1 -0
  514. package/dist/src/tui/components/branch-summary.d.ts +13 -0
  515. package/dist/src/tui/components/branch-summary.js +51 -0
  516. package/dist/src/tui/components/branch-summary.js.map +1 -0
  517. package/dist/src/tui/components/chat-log.d.ts +46 -6
  518. package/dist/src/tui/components/chat-log.js +183 -21
  519. package/dist/src/tui/components/chat-log.js.map +1 -1
  520. package/dist/src/tui/components/compaction-summary.d.ts +13 -0
  521. package/dist/src/tui/components/compaction-summary.js +46 -0
  522. package/dist/src/tui/components/compaction-summary.js.map +1 -0
  523. package/dist/src/tui/components/custom-editor.d.ts +1 -0
  524. package/dist/src/tui/components/custom-editor.js +2 -0
  525. package/dist/src/tui/components/custom-editor.js.map +1 -1
  526. package/dist/src/tui/components/custom-message.d.ts +23 -0
  527. package/dist/src/tui/components/custom-message.js +65 -0
  528. package/dist/src/tui/components/custom-message.js.map +1 -0
  529. package/dist/src/tui/components/extension-dialog.d.ts +42 -0
  530. package/dist/src/tui/components/extension-dialog.js +127 -0
  531. package/dist/src/tui/components/extension-dialog.js.map +1 -0
  532. package/dist/src/tui/components/scoped-models-selector.d.ts +7 -2
  533. package/dist/src/tui/components/scoped-models-selector.js +89 -16
  534. package/dist/src/tui/components/scoped-models-selector.js.map +1 -1
  535. package/dist/src/tui/components/searchable-select-list.d.ts +30 -3
  536. package/dist/src/tui/components/searchable-select-list.js +82 -10
  537. package/dist/src/tui/components/searchable-select-list.js.map +1 -1
  538. package/dist/src/tui/components/session-selector.d.ts +18 -4
  539. package/dist/src/tui/components/session-selector.js +207 -40
  540. package/dist/src/tui/components/session-selector.js.map +1 -1
  541. package/dist/src/tui/components/settings-selector.d.ts +6 -2
  542. package/dist/src/tui/components/settings-selector.js +126 -7
  543. package/dist/src/tui/components/settings-selector.js.map +1 -1
  544. package/dist/src/tui/components/thinking-selector.d.ts +12 -0
  545. package/dist/src/tui/components/thinking-selector.js +48 -0
  546. package/dist/src/tui/components/thinking-selector.js.map +1 -0
  547. package/dist/src/tui/components/tool-execution.d.ts +57 -3
  548. package/dist/src/tui/components/tool-execution.js +378 -28
  549. package/dist/src/tui/components/tool-execution.js.map +1 -1
  550. package/dist/src/tui/components/tui-bottom-bar.d.ts +9 -1
  551. package/dist/src/tui/components/tui-bottom-bar.js +56 -11
  552. package/dist/src/tui/components/tui-bottom-bar.js.map +1 -1
  553. package/dist/src/tui/components/tui-header.d.ts +9 -2
  554. package/dist/src/tui/components/tui-header.js +25 -5
  555. package/dist/src/tui/components/tui-header.js.map +1 -1
  556. package/dist/src/tui/components/user-message.d.ts +4 -2
  557. package/dist/src/tui/components/user-message.js +42 -9
  558. package/dist/src/tui/components/user-message.js.map +1 -1
  559. package/dist/src/tui/components/visual-truncate.d.ts +11 -0
  560. package/dist/src/tui/components/visual-truncate.js +27 -0
  561. package/dist/src/tui/components/visual-truncate.js.map +1 -0
  562. package/dist/src/tui/extension-host/autocomplete.d.ts +43 -0
  563. package/dist/src/tui/extension-host/autocomplete.js +116 -0
  564. package/dist/src/tui/extension-host/autocomplete.js.map +1 -0
  565. package/dist/src/tui/extension-host/host.d.ts +31 -1
  566. package/dist/src/tui/extension-host/host.js +123 -6
  567. package/dist/src/tui/extension-host/host.js.map +1 -1
  568. package/dist/src/tui/extension-host/load-extensions.d.ts +6 -1
  569. package/dist/src/tui/extension-host/load-extensions.js +4 -3
  570. package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
  571. package/dist/src/tui/extension-host/runtime-context.d.ts +21 -0
  572. package/dist/src/tui/extension-host/runtime-context.js +152 -0
  573. package/dist/src/tui/extension-host/runtime-context.js.map +1 -0
  574. package/dist/src/tui/extension-host/runtime.d.ts +52 -4
  575. package/dist/src/tui/extension-host/runtime.js +547 -85
  576. package/dist/src/tui/extension-host/runtime.js.map +1 -1
  577. package/dist/src/tui/extension-host/surface.d.ts +20 -0
  578. package/dist/src/tui/extension-host/surface.js +30 -6
  579. package/dist/src/tui/extension-host/surface.js.map +1 -1
  580. package/dist/src/tui/extension-host/tool-renderers.d.ts +6 -3
  581. package/dist/src/tui/extension-host/tool-renderers.js +43 -5
  582. package/dist/src/tui/extension-host/tool-renderers.js.map +1 -1
  583. package/dist/src/tui/format-tui-hotkeys.d.ts +12 -2
  584. package/dist/src/tui/format-tui-hotkeys.js +22 -5
  585. package/dist/src/tui/format-tui-hotkeys.js.map +1 -1
  586. package/dist/src/tui/tui-agent-events.d.ts +8 -6
  587. package/dist/src/tui/tui-agent-events.js +200 -59
  588. package/dist/src/tui/tui-agent-events.js.map +1 -1
  589. package/dist/src/tui/tui-backend.d.ts +169 -3
  590. package/dist/src/tui/tui-command-formatters.d.ts +76 -0
  591. package/dist/src/tui/tui-command-formatters.js +594 -0
  592. package/dist/src/tui/tui-command-formatters.js.map +1 -0
  593. package/dist/src/tui/tui-commands.d.ts +57 -7
  594. package/dist/src/tui/tui-commands.js +639 -43
  595. package/dist/src/tui/tui-commands.js.map +1 -1
  596. package/dist/src/tui/tui-context-usage.d.ts +1 -1
  597. package/dist/src/tui/tui-context-usage.js +9 -1
  598. package/dist/src/tui/tui-context-usage.js.map +1 -1
  599. package/dist/src/tui/tui-extension-user-message.d.ts +8 -0
  600. package/dist/src/tui/tui-extension-user-message.js +32 -0
  601. package/dist/src/tui/tui-extension-user-message.js.map +1 -0
  602. package/dist/src/tui/tui-follow-up-queue.d.ts +9 -0
  603. package/dist/src/tui/tui-follow-up-queue.js +18 -0
  604. package/dist/src/tui/tui-follow-up-queue.js.map +1 -0
  605. package/dist/src/tui/tui-local-shell.d.ts +11 -1
  606. package/dist/src/tui/tui-local-shell.js +50 -8
  607. package/dist/src/tui/tui-local-shell.js.map +1 -1
  608. package/dist/src/tui/tui-model-picker.d.ts +26 -0
  609. package/dist/src/tui/tui-model-picker.js +152 -0
  610. package/dist/src/tui/tui-model-picker.js.map +1 -0
  611. package/dist/src/tui/tui-oauth-login.d.ts +16 -0
  612. package/dist/src/tui/tui-oauth-login.js +189 -0
  613. package/dist/src/tui/tui-oauth-login.js.map +1 -0
  614. package/dist/src/tui/tui-overlays.d.ts +3 -3
  615. package/dist/src/tui/tui-overlays.js +6 -7
  616. package/dist/src/tui/tui-overlays.js.map +1 -1
  617. package/dist/src/tui/tui-picker-overlay.d.ts +27 -32
  618. package/dist/src/tui/tui-picker-overlay.js +340 -30
  619. package/dist/src/tui/tui-picker-overlay.js.map +1 -1
  620. package/dist/src/tui/tui-picker-services.d.ts +41 -0
  621. package/dist/src/tui/tui-picker-services.js +1 -0
  622. package/dist/src/tui/tui-run-state.d.ts +11 -0
  623. package/dist/src/tui/tui-run-state.js +114 -0
  624. package/dist/src/tui/tui-run-state.js.map +1 -0
  625. package/dist/src/tui/tui-runtime-hints.d.ts +4 -0
  626. package/dist/src/tui/tui-runtime-hints.js +18 -0
  627. package/dist/src/tui/tui-runtime-hints.js.map +1 -0
  628. package/dist/src/tui/tui-scoped-models.d.ts +1 -1
  629. package/dist/src/tui/tui-scoped-models.js +2 -2
  630. package/dist/src/tui/tui-scoped-models.js.map +1 -1
  631. package/dist/src/tui/tui-session-actions.d.ts +5 -3
  632. package/dist/src/tui/tui-session-actions.js +21 -9
  633. package/dist/src/tui/tui-session-actions.js.map +1 -1
  634. package/dist/src/tui/tui-session-format.d.ts +4 -1
  635. package/dist/src/tui/tui-session-format.js +17 -3
  636. package/dist/src/tui/tui-session-format.js.map +1 -1
  637. package/dist/src/tui/tui-session-snapshot.d.ts +82 -0
  638. package/dist/src/tui/tui-session-snapshot.js +184 -0
  639. package/dist/src/tui/tui-session-snapshot.js.map +1 -0
  640. package/dist/src/tui/tui-session-stats.d.ts +3 -0
  641. package/dist/src/tui/tui-session-stats.js +59 -0
  642. package/dist/src/tui/tui-session-stats.js.map +1 -0
  643. package/dist/src/tui/tui-settings.d.ts +21 -0
  644. package/dist/src/tui/tui-settings.js +28 -1
  645. package/dist/src/tui/tui-settings.js.map +1 -1
  646. package/dist/src/tui/tui-skills-autocomplete.js +1 -1
  647. package/dist/src/tui/tui-skills-autocomplete.js.map +1 -1
  648. package/dist/src/tui/tui-startup-resources.d.ts +3 -0
  649. package/dist/src/tui/tui-startup-resources.js +39 -0
  650. package/dist/src/tui/tui-startup-resources.js.map +1 -0
  651. package/dist/src/tui/tui-startup-text.d.ts +10 -0
  652. package/dist/src/tui/tui-startup-text.js +58 -0
  653. package/dist/src/tui/tui-startup-text.js.map +1 -0
  654. package/dist/src/tui/tui-stdio-filter.d.ts +1 -0
  655. package/dist/src/tui/tui-stdio-filter.js +11 -7
  656. package/dist/src/tui/tui-stdio-filter.js.map +1 -1
  657. package/dist/src/tui/tui-submit.d.ts +2 -0
  658. package/dist/src/tui/tui-submit.js +2 -1
  659. package/dist/src/tui/tui-submit.js.map +1 -1
  660. package/dist/src/tui/tui-tool-diff.js +61 -7
  661. package/dist/src/tui/tui-tool-diff.js.map +1 -1
  662. package/dist/src/tui/tui-tool-result.d.ts +17 -0
  663. package/dist/src/tui/tui-tool-result.js +74 -0
  664. package/dist/src/tui/tui-tool-result.js.map +1 -0
  665. package/dist/src/tui/tui-transcript-tree-picker.d.ts +57 -0
  666. package/dist/src/tui/tui-transcript-tree-picker.js +604 -0
  667. package/dist/src/tui/tui-transcript-tree-picker.js.map +1 -0
  668. package/dist/src/tui/tui-transcript-tree.d.ts +7 -0
  669. package/dist/src/tui/tui-transcript-tree.js +316 -0
  670. package/dist/src/tui/tui-transcript-tree.js.map +1 -0
  671. package/dist/src/tui/tui-types.d.ts +25 -34
  672. package/dist/src/tui/tui-types.js +12 -0
  673. package/dist/src/tui/tui-types.js.map +1 -1
  674. package/dist/src/tui/tui.js +1288 -112
  675. package/dist/src/tui/tui.js.map +1 -1
  676. package/dist/src/tui/xopc-tui-keybindings.d.ts +127 -2
  677. package/dist/src/tui/xopc-tui-keybindings.js +127 -2
  678. package/dist/src/tui/xopc-tui-keybindings.js.map +1 -1
  679. package/dist/src/workflows/domain/definition-utils.d.ts +2 -1
  680. package/dist/src/workflows/domain/definition-utils.js +18 -8
  681. package/dist/src/workflows/domain/definition-utils.js.map +1 -1
  682. package/dist/src/workflows/domain/definition.d.ts +25 -0
  683. package/dist/src/workflows/domain/event.d.ts +1 -0
  684. package/dist/src/workflows/domain/result.d.ts +15 -0
  685. package/dist/src/workflows/domain/run.d.ts +2 -0
  686. package/dist/src/workflows/domain/run.js.map +1 -1
  687. package/dist/src/workflows/engine/projector.js +4 -0
  688. package/dist/src/workflows/engine/projector.js.map +1 -1
  689. package/dist/src/workflows/engine/workflow-engine.d.ts +37 -1
  690. package/dist/src/workflows/engine/workflow-engine.js +75 -11
  691. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  692. package/dist/src/workflows/index.d.ts +1 -0
  693. package/dist/src/workflows/index.js +4 -1
  694. package/dist/src/workflows/registry/catalog-workflow-definition-registry.d.ts +9 -0
  695. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +40 -0
  696. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -0
  697. package/dist/src/workflows/registry/index.d.ts +2 -0
  698. package/dist/src/workflows/registry/index.js +2 -0
  699. package/dist/src/workflows/registry/workflow-definition-registry.d.ts +15 -0
  700. package/dist/src/workflows/registry/workflow-definition-registry.js +1 -0
  701. package/dist/src/workflows/runtime/index.d.ts +2 -0
  702. package/dist/src/workflows/runtime/index.js +2 -1
  703. package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +5 -0
  704. package/dist/src/workflows/runtime/script-workflow-runtime.js +15 -0
  705. package/dist/src/workflows/runtime/script-workflow-runtime.js.map +1 -0
  706. package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +16 -0
  707. package/dist/src/workflows/runtime/workflow-runtime-port.js +1 -0
  708. package/dist/src/workflows/service/run-view-to-snapshot.js +3 -0
  709. package/dist/src/workflows/service/run-view-to-snapshot.js.map +1 -1
  710. package/dist/src/workflows/service/workflow-run-service.d.ts +3 -0
  711. package/dist/src/workflows/service/workflow-run-service.js +10 -15
  712. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  713. package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -1
  714. package/dist/src/workflows/service/workflow-session-bridge.js +4 -1
  715. package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
  716. package/package.json +21 -15
  717. package/skills/creative/frontend-design/SKILL.md +1 -1
  718. package/skills/creative/theme-factory/SKILL.md +1 -1
  719. package/skills/documents/xlsx/SKILL.md +1 -1
  720. package/skills/engineering/diagnose/SKILL.md +2 -2
  721. package/skills/engineering/tdd/SKILL.md +1 -1
  722. package/skills/tools/github/SKILL.md +6 -1
  723. package/skills/tools/webapp-testing/SKILL.md +4 -1
  724. package/dist/extensions/telegram/src/adapters/config-surface.d.ts +0 -2
  725. package/dist/extensions/telegram/src/adapters/config-surface.js +0 -26
  726. package/dist/extensions/telegram/src/adapters/config-surface.js.map +0 -1
  727. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js +0 -158
  728. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js.map +0 -1
  729. package/dist/gateway/static/root/assets/agents-DQ0mQxIA.js +0 -222
  730. package/dist/gateway/static/root/assets/channels-settings-BEtP53V6.js +0 -1
  731. package/dist/gateway/static/root/assets/channels-status-swr-CxTtS1hI.js +0 -8
  732. package/dist/gateway/static/root/assets/cron-api-CznlPIZT.js +0 -1
  733. package/dist/gateway/static/root/assets/cron-page-Dx6dE3eD.js +0 -1
  734. package/dist/gateway/static/root/assets/extension-settings-page-DuDCSb3J.js +0 -1
  735. package/dist/gateway/static/root/assets/field-primitives-BUwUiDf5.js +0 -1
  736. package/dist/gateway/static/root/assets/heartbeat-config-api-BjFW1cl-.js +0 -1
  737. package/dist/gateway/static/root/assets/index-DKgHC1Ta.js +0 -4840
  738. package/dist/gateway/static/root/assets/index-DjNDHzwG.css +0 -1
  739. package/dist/gateway/static/root/assets/notes-page-D40ZpS0Y.js +0 -1
  740. package/dist/gateway/static/root/assets/sessions-page-BvtdbmW8.js +0 -1
  741. package/dist/gateway/static/root/assets/settings-advanced-gate-BQamRjkV.js +0 -2
  742. package/dist/gateway/static/root/assets/settings-page-D972_jaS.js +0 -3
  743. package/dist/gateway/static/root/assets/share-preview-page-CKCTMo0_.js +0 -2
  744. package/dist/gateway/static/root/assets/skills-page-QwFCB4yV.js +0 -2
  745. package/dist/gateway/static/root/assets/url-q28QhI7l.js +0 -3
  746. package/dist/gateway/static/root/assets/utils-DCm11_KW.js +0 -1
  747. package/dist/gateway/static/root/assets/voice-api-key-field-CywiB7Dw.js +0 -1
  748. package/dist/gateway/static/root/assets/workflows-page-Be7l_SWw.js +0 -27
  749. package/dist/src/agent/embedded/map-stream-events.d.ts +0 -9
  750. package/dist/src/agent/embedded/map-stream-events.js +0 -63
  751. package/dist/src/agent/embedded/map-stream-events.js.map +0 -1
  752. package/dist/src/auth/oauth/vendor-pi-google/google-antigravity.js.map +0 -1
  753. package/dist/src/auth/oauth/vendor-pi-google/google-gemini-cli.js.map +0 -1
  754. package/dist/src/auth/oauth/vendor-pi-google/oauth-page.js.map +0 -1
  755. package/dist/src/auth/oauth/vendor-pi-google/pkce.js.map +0 -1
  756. package/dist/src/channels/dock.js.map +0 -1
  757. package/dist/src/channels/plugins/bundled.d.ts +0 -11
  758. package/dist/src/channels/plugins/bundled.js +0 -10
  759. package/dist/src/channels/plugins/bundled.js.map +0 -1
  760. package/dist/src/channels/registry.d.ts +0 -25
  761. package/dist/src/channels/registry.js +0 -82
  762. package/dist/src/channels/registry.js.map +0 -1
  763. package/dist/src/config/localized-text.d.ts +0 -6
  764. package/dist/src/config/localized-text.js +0 -42
  765. package/dist/src/config/localized-text.js.map +0 -1
  766. package/dist/src/generated/bundled-channel-plugins.d.ts +0 -10
  767. package/dist/src/generated/bundled-channel-plugins.js +0 -16
  768. package/dist/src/generated/bundled-channel-plugins.js.map +0 -1
  769. package/dist/src/tui/stream-assembler.d.ts +0 -22
  770. package/dist/src/tui/stream-assembler.js +0 -63
  771. package/dist/src/tui/stream-assembler.js.map +0 -1
  772. package/skills/browser/SKILL-zh.md +0 -188
  773. package/skills/business/company-values/SKILL-zh.md +0 -80
  774. package/skills/business/company-values/SKILL.md +0 -80
  775. package/skills/business/find-community/SKILL-zh.md +0 -50
  776. package/skills/business/find-community/SKILL.md +0 -50
  777. package/skills/business/first-customers/SKILL-zh.md +0 -76
  778. package/skills/business/first-customers/SKILL.md +0 -76
  779. package/skills/business/grow-sustainably/SKILL-zh.md +0 -92
  780. package/skills/business/grow-sustainably/SKILL.md +0 -92
  781. package/skills/business/marketing-plan/SKILL-zh.md +0 -100
  782. package/skills/business/marketing-plan/SKILL.md +0 -100
  783. package/skills/business/minimalist-review/SKILL-zh.md +0 -82
  784. package/skills/business/minimalist-review/SKILL.md +0 -82
  785. package/skills/business/mvp/SKILL-zh.md +0 -81
  786. package/skills/business/mvp/SKILL.md +0 -81
  787. package/skills/business/pricing/SKILL-zh.md +0 -64
  788. package/skills/business/pricing/SKILL.md +0 -64
  789. package/skills/business/processize/SKILL-zh.md +0 -91
  790. package/skills/business/processize/SKILL.md +0 -91
  791. package/skills/business/validate-idea/SKILL-zh.md +0 -68
  792. package/skills/business/validate-idea/SKILL.md +0 -68
  793. package/skills/creative/algorithmic-art/LICENSE.txt +0 -202
  794. package/skills/creative/algorithmic-art/SKILL-zh.md +0 -405
  795. package/skills/creative/algorithmic-art/SKILL.md +0 -405
  796. package/skills/creative/algorithmic-art/templates/generator_template.js +0 -223
  797. package/skills/creative/algorithmic-art/templates/viewer.html +0 -599
  798. package/skills/creative/frontend-design/SKILL-zh.md +0 -42
  799. package/skills/creative/theme-factory/SKILL-zh.md +0 -59
  800. package/skills/creative/web-artifacts-builder/LICENSE.txt +0 -202
  801. package/skills/creative/web-artifacts-builder/SKILL-zh.md +0 -74
  802. package/skills/creative/web-artifacts-builder/SKILL.md +0 -74
  803. package/skills/creative/web-artifacts-builder/scripts/bundle-artifact.sh +0 -54
  804. package/skills/creative/web-artifacts-builder/scripts/init-artifact.sh +0 -322
  805. package/skills/creative/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  806. package/skills/documents/doc-coauthoring/SKILL-zh.md +0 -375
  807. package/skills/documents/doc-coauthoring/SKILL.md +0 -375
  808. package/skills/documents/docx/LICENSE.txt +0 -30
  809. package/skills/documents/docx/SKILL-zh.md +0 -590
  810. package/skills/documents/docx/SKILL.md +0 -590
  811. package/skills/documents/docx/scripts/__init__.py +0 -1
  812. package/skills/documents/docx/scripts/accept_changes.py +0 -135
  813. package/skills/documents/docx/scripts/comment.py +0 -318
  814. package/skills/documents/docx/scripts/office/helpers/__init__.py +0 -0
  815. package/skills/documents/docx/scripts/office/helpers/merge_runs.py +0 -199
  816. package/skills/documents/docx/scripts/office/helpers/simplify_redlines.py +0 -197
  817. package/skills/documents/docx/scripts/office/pack.py +0 -159
  818. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  819. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  820. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  821. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  822. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  823. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  824. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  825. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  826. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  827. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  828. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  829. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  830. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  831. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  832. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  833. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  834. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  835. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  836. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  837. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  838. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  839. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  840. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  841. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  842. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  843. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  844. package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  845. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  846. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  847. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  848. package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  849. package/skills/documents/docx/scripts/office/schemas/mce/mc.xsd +0 -75
  850. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  851. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  852. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  853. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  854. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  855. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  856. package/skills/documents/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  857. package/skills/documents/docx/scripts/office/soffice.py +0 -183
  858. package/skills/documents/docx/scripts/office/unpack.py +0 -132
  859. package/skills/documents/docx/scripts/office/validate.py +0 -111
  860. package/skills/documents/docx/scripts/office/validators/__init__.py +0 -15
  861. package/skills/documents/docx/scripts/office/validators/base.py +0 -847
  862. package/skills/documents/docx/scripts/office/validators/docx.py +0 -446
  863. package/skills/documents/docx/scripts/office/validators/pptx.py +0 -275
  864. package/skills/documents/docx/scripts/office/validators/redlining.py +0 -247
  865. package/skills/documents/docx/scripts/templates/comments.xml +0 -3
  866. package/skills/documents/docx/scripts/templates/commentsExtended.xml +0 -3
  867. package/skills/documents/docx/scripts/templates/commentsExtensible.xml +0 -3
  868. package/skills/documents/docx/scripts/templates/commentsIds.xml +0 -3
  869. package/skills/documents/docx/scripts/templates/people.xml +0 -3
  870. package/skills/documents/pdf/LICENSE.txt +0 -30
  871. package/skills/documents/pdf/SKILL-zh.md +0 -314
  872. package/skills/documents/pdf/SKILL.md +0 -314
  873. package/skills/documents/pdf/forms.md +0 -294
  874. package/skills/documents/pdf/reference.md +0 -612
  875. package/skills/documents/pdf/scripts/check_bounding_boxes.py +0 -65
  876. package/skills/documents/pdf/scripts/check_fillable_fields.py +0 -11
  877. package/skills/documents/pdf/scripts/convert_pdf_to_images.py +0 -33
  878. package/skills/documents/pdf/scripts/create_validation_image.py +0 -37
  879. package/skills/documents/pdf/scripts/extract_form_field_info.py +0 -122
  880. package/skills/documents/pdf/scripts/extract_form_structure.py +0 -115
  881. package/skills/documents/pdf/scripts/fill_fillable_fields.py +0 -98
  882. package/skills/documents/pdf/scripts/fill_pdf_form_with_annotations.py +0 -107
  883. package/skills/documents/pptx/LICENSE.txt +0 -30
  884. package/skills/documents/pptx/SKILL-zh.md +0 -232
  885. package/skills/documents/pptx/SKILL.md +0 -232
  886. package/skills/documents/pptx/editing.md +0 -205
  887. package/skills/documents/pptx/pptxgenjs.md +0 -420
  888. package/skills/documents/pptx/scripts/__init__.py +0 -0
  889. package/skills/documents/pptx/scripts/add_slide.py +0 -195
  890. package/skills/documents/pptx/scripts/clean.py +0 -286
  891. package/skills/documents/pptx/scripts/office/helpers/__init__.py +0 -0
  892. package/skills/documents/pptx/scripts/office/helpers/merge_runs.py +0 -199
  893. package/skills/documents/pptx/scripts/office/helpers/simplify_redlines.py +0 -197
  894. package/skills/documents/pptx/scripts/office/pack.py +0 -159
  895. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  896. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  897. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  898. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  899. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  900. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  901. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  902. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  903. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  904. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  905. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  906. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  907. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  908. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  909. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  910. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  911. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  912. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  913. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  914. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  915. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  916. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  917. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  918. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  919. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  920. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  921. package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  922. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  923. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  924. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  925. package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  926. package/skills/documents/pptx/scripts/office/schemas/mce/mc.xsd +0 -75
  927. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  928. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  929. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  930. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  931. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  932. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  933. package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  934. package/skills/documents/pptx/scripts/office/soffice.py +0 -183
  935. package/skills/documents/pptx/scripts/office/unpack.py +0 -132
  936. package/skills/documents/pptx/scripts/office/validate.py +0 -111
  937. package/skills/documents/pptx/scripts/office/validators/__init__.py +0 -15
  938. package/skills/documents/pptx/scripts/office/validators/base.py +0 -847
  939. package/skills/documents/pptx/scripts/office/validators/docx.py +0 -446
  940. package/skills/documents/pptx/scripts/office/validators/pptx.py +0 -275
  941. package/skills/documents/pptx/scripts/office/validators/redlining.py +0 -247
  942. package/skills/documents/pptx/scripts/thumbnail.py +0 -289
  943. package/skills/documents/xlsx/SKILL-zh.md +0 -292
  944. package/skills/engineering/diagnose/SKILL-zh.md +0 -117
  945. package/skills/engineering/grill-with-docs/ADR-FORMAT.md +0 -47
  946. package/skills/engineering/grill-with-docs/CONTEXT-FORMAT.md +0 -77
  947. package/skills/engineering/grill-with-docs/SKILL-zh.md +0 -88
  948. package/skills/engineering/grill-with-docs/SKILL.md +0 -88
  949. package/skills/engineering/improve-codebase-architecture/DEEPENING.md +0 -37
  950. package/skills/engineering/improve-codebase-architecture/INTERFACE-DESIGN.md +0 -44
  951. package/skills/engineering/improve-codebase-architecture/LANGUAGE.md +0 -53
  952. package/skills/engineering/improve-codebase-architecture/SKILL-zh.md +0 -71
  953. package/skills/engineering/improve-codebase-architecture/SKILL.md +0 -71
  954. package/skills/engineering/tdd/SKILL-zh.md +0 -109
  955. package/skills/engineering/to-issues/SKILL-zh.md +0 -81
  956. package/skills/engineering/to-issues/SKILL.md +0 -81
  957. package/skills/engineering/to-prd/SKILL-zh.md +0 -76
  958. package/skills/engineering/to-prd/SKILL.md +0 -74
  959. package/skills/engineering/zoom-out/SKILL-zh.md +0 -7
  960. package/skills/engineering/zoom-out/SKILL.md +0 -7
  961. package/skills/tools/find-skills/SKILL-zh.md +0 -440
  962. package/skills/tools/github/SKILL-zh.md +0 -48
  963. package/skills/tools/internal-comms/LICENSE.txt +0 -202
  964. package/skills/tools/internal-comms/SKILL-zh.md +0 -32
  965. package/skills/tools/internal-comms/SKILL.md +0 -32
  966. package/skills/tools/internal-comms/examples/3p-updates.md +0 -47
  967. package/skills/tools/internal-comms/examples/company-newsletter.md +0 -65
  968. package/skills/tools/internal-comms/examples/faq-answers.md +0 -30
  969. package/skills/tools/internal-comms/examples/general-comms.md +0 -16
  970. package/skills/tools/skill-creator/LICENSE.txt +0 -202
  971. package/skills/tools/skill-creator/SKILL-zh.md +0 -483
  972. package/skills/tools/skill-creator/SKILL.md +0 -485
  973. package/skills/tools/skill-creator/agents/analyzer.md +0 -274
  974. package/skills/tools/skill-creator/agents/comparator.md +0 -202
  975. package/skills/tools/skill-creator/agents/grader.md +0 -223
  976. package/skills/tools/skill-creator/assets/eval_review.html +0 -146
  977. package/skills/tools/skill-creator/eval-viewer/generate_review.py +0 -471
  978. package/skills/tools/skill-creator/eval-viewer/viewer.html +0 -1325
  979. package/skills/tools/skill-creator/references/schemas.md +0 -430
  980. package/skills/tools/skill-creator/scripts/__init__.py +0 -0
  981. package/skills/tools/skill-creator/scripts/aggregate_benchmark.py +0 -401
  982. package/skills/tools/skill-creator/scripts/generate_report.py +0 -326
  983. package/skills/tools/skill-creator/scripts/improve_description.py +0 -247
  984. package/skills/tools/skill-creator/scripts/package_skill.py +0 -136
  985. package/skills/tools/skill-creator/scripts/quick_validate.py +0 -103
  986. package/skills/tools/skill-creator/scripts/run_eval.py +0 -310
  987. package/skills/tools/skill-creator/scripts/run_loop.py +0 -328
  988. package/skills/tools/skill-creator/scripts/utils.py +0 -47
  989. package/skills/tools/summarize/SKILL-zh.md +0 -47
  990. package/skills/tools/weather/SKILL-zh.md +0 -46
  991. package/skills/tools/weather/SKILL.md +0 -46
  992. package/skills/tools/webapp-testing/SKILL-zh.md +0 -96
  993. /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-antigravity.d.ts +0 -0
  994. /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-gemini-cli.d.ts +0 -0
  995. /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/oauth-page.d.ts +0 -0
@@ -5,202 +5,41 @@ read_when:
5
5
  - Setting up a workspace manually
6
6
  ---
7
7
 
8
- # AGENTS.md - Your Workspace
8
+ # AGENTS.md - Workspace Rules
9
9
 
10
- This folder is home. Treat it that way.
10
+ This workspace is the agent's working area. Treat it as user-owned state.
11
11
 
12
- ## Session Startup
12
+ ## Startup Context
13
13
 
14
- Use runtime-provided startup context first.
15
-
16
- That context may already include:
17
-
18
- - `AGENTS.md`, `SOUL.md`, and `USER.md`
19
- - recent daily memory such as `memory/YYYY-MM-DD.md`
20
- - `MEMORY.md` when this is the main session
14
+ Use runtime-provided startup context first. It may already include profile files such as `SOUL.md`, `IDENTITY.md`, `USER.md`, `TOOLS.md`, `AGENTS.md`, `HEARTBEAT.md`, and `MEMORY.md`.
21
15
 
22
16
  Do not manually reread startup files unless:
23
17
 
24
- 1. The user explicitly asks
25
- 2. The provided context is missing something you need
26
- 3. You need a deeper follow-up read beyond the provided startup context
18
+ 1. The user asks.
19
+ 2. The injected context is missing something needed.
20
+ 3. You need a deeper follow-up read than the injected excerpt provides.
27
21
 
28
22
  ## Memory
29
23
 
30
- You wake up fresh each session. These files are your continuity:
31
-
32
- - **Daily notes:** `memory/YYYY-MM-DD.md` (create `memory/` if needed) — raw logs of what happened
33
- - **Long-term:** profile `MEMORY.md` your curated memories, like a human's long-term memory
34
-
35
- Capture what matters. Decisions, context, things to remember. Skip the secrets unless asked to keep them.
36
-
37
- ### 🧠 MEMORY.md - Your Long-Term Memory
38
-
39
- - **ONLY load in main session** (direct chats with your human)
40
- - **DO NOT load in shared contexts** (group chats, sessions with other people)
41
- - This is for **security** — contains personal context that shouldn't leak to strangers
42
- - You can **read, edit, and update** MEMORY.md freely in main sessions
43
- - Write significant events, thoughts, decisions, opinions, lessons learned
44
- - This is your curated memory — the distilled essence, not raw logs
45
- - Over time, review your daily files and update MEMORY.md with what's worth keeping
46
-
47
- ### 📝 Write It Down - No "Mental Notes"!
48
-
49
- - **Memory is limited** — if you want to remember something, WRITE IT TO A FILE
50
- - "Mental notes" don't survive session restarts. Files do.
51
- - When someone says "remember this" → update `memory/YYYY-MM-DD.md` or relevant file
52
- - When you learn a lesson → update AGENTS.md, TOOLS.md, or the relevant skill
53
- - When you make a mistake → document it so future-you doesn't repeat it
54
- - **Text > Brain** 📝
55
-
56
- ## Red Lines
57
-
58
- - Don't exfiltrate private data. Ever.
59
- - Don't run destructive commands without asking.
60
- - `trash` > `rm` (recoverable beats gone forever)
61
- - When in doubt, ask.
62
-
63
- ## External vs Internal
64
-
65
- **Safe to do freely:**
66
-
67
- - Read files, explore, organize, learn
68
- - Search the web, check calendars
69
- - Work within this workspace
70
-
71
- **Ask first:**
72
-
73
- - Sending emails, public posts
74
- - Anything that leaves the machine
75
- - Anything you're uncertain about
76
-
77
- ## Group Chats
78
-
79
- You have access to your human's stuff. That doesn't mean you _share_ their stuff. In groups, you're a participant — not their voice, not their proxy. Think before you speak.
80
-
81
- ### 💬 Know When to Speak!
82
-
83
- In group chats where you receive every message, be **smart about when to contribute**:
84
-
85
- **Respond when:**
86
-
87
- - Directly mentioned or asked a question
88
- - You can add genuine value (info, insight, help)
89
- - Something witty/funny fits naturally
90
- - Correcting important misinformation
91
- - Summarizing when asked
92
-
93
- **Stay silent when:**
94
-
95
- - It's just casual banter between humans
96
- - Someone already answered the question
97
- - Your response would just be "yeah" or "nice"
98
- - The conversation is flowing fine without you
99
-
100
- **The human rule:** Humans in group chats don't respond to every single message. Neither should you. Quality > quantity.
101
-
102
- **Avoid the triple-tap:** Don't respond multiple times to the same message with different reactions. One thoughtful response beats three fragments.
103
-
104
- Participate, don't dominate.
105
-
106
- ### 😊 React Like a Human!
107
-
108
- On platforms that support reactions (Telegram), use emoji reactions naturally:
109
-
110
- **React when:**
111
-
112
- - You appreciate something but don't need to reply (👍, ❤️, 🙌)
113
- - Something made you laugh (😂, 💀)
114
- - You find it interesting or thought-provoking (🤔, 💡)
115
- - You want to acknowledge without interrupting the flow
116
- - It's a simple yes/no or approval situation (✅, 👀)
117
-
118
- **Why it matters:**
119
- Reactions are lightweight social signals. Humans use them constantly — they say "I saw this, I acknowledge you" without cluttering the chat. You should too.
120
-
121
- **Don't overdo it:** One reaction per message max. Pick the one that fits best.
122
-
123
- ## Tools
124
-
125
- Skills provide your tools. When you need one, check its `SKILL.md`. Keep local notes (SSH details, preferences) in `TOOLS.md`.
126
-
127
- ## 💓 Heartbeats - Be Proactive!
128
-
129
- When you receive a heartbeat poll, don't just reply `HEARTBEAT_OK` every time. Use heartbeats productively!
130
-
131
- Default heartbeat prompt:
132
- `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`
133
-
134
- You are free to edit `HEARTBEAT.md` with a short checklist or reminders. Keep it small to limit token burn.
135
-
136
- ### Heartbeat vs Cron: When to Use Each
137
-
138
- **Use heartbeat when:**
139
-
140
- - Multiple checks can batch together (inbox + calendar + notifications in one turn)
141
- - You need conversational context from recent messages
142
- - Timing can drift slightly (every ~30 min is fine, not exact)
143
- - You want to reduce API calls by combining periodic checks
144
-
145
- **Use cron when:**
146
-
147
- - Exact timing matters ("9:00 AM sharp every Monday")
148
- - Task needs isolation from main session history
149
- - One-shot reminders ("remind me in 20 minutes")
150
-
151
- **Tip:** Batch similar periodic checks into `HEARTBEAT.md` instead of creating multiple cron jobs.
152
-
153
- **Things to check (rotate through these, 2-4 times per day):**
154
-
155
- - **Emails** - Any urgent unread messages?
156
- - **Calendar** - Upcoming events in next 24-48h?
157
- - **Mentions** - Social notifications?
158
-
159
- **Track your checks** in `memory/heartbeat-state.json`:
160
-
161
- ```json
162
- {
163
- "lastChecks": {
164
- "email": 1703275200,
165
- "calendar": 1703260800
166
- }
167
- }
168
- ```
169
-
170
- **When to reach out:**
171
-
172
- - Important email arrived
173
- - Calendar event coming up (<2h)
174
- - Something interesting you found
175
- - It's been >8h since you said anything
176
-
177
- **When to stay quiet (HEARTBEAT_OK):**
178
-
179
- - Late night (23:00-08:00) unless urgent
180
- - Human is clearly busy
181
- - Nothing new since last check
182
- - You just checked <30 minutes ago
183
-
184
- **Proactive work you can do without asking:**
185
-
186
- - Read and organize memory files
187
- - Check on projects (git status, etc.)
188
- - Update documentation
189
- - **Review and update MEMORY.md**
190
-
191
- ### 🔄 Memory Maintenance (During Heartbeats)
24
+ - Use `memory/YYYY-MM-DD.md` for daily notes when the user asks you to remember operational context.
25
+ - Use profile `MEMORY.md` only for durable, curated memory.
26
+ - Keep memory concise, factual, and useful.
27
+ - Do not store secrets unless the user explicitly asks and the storage location is appropriate.
192
28
 
193
- Periodically (every few days), use a heartbeat to:
29
+ ## Tool Use
194
30
 
195
- 1. Read through recent `memory/YYYY-MM-DD.md` files
196
- 2. Identify significant events, lessons, or insights worth keeping long-term
197
- 3. Update `MEMORY.md` with distilled learnings
198
- 4. Remove outdated info from MEMORY.md that's no longer relevant
31
+ - Read before writing.
32
+ - Prefer narrow file edits over broad rewrites.
33
+ - Use shell commands only when they are necessary and safe.
34
+ - Ask before destructive operations, external actions, or changes that are difficult to undo.
35
+ - Keep local environment notes in `TOOLS.md`.
199
36
 
200
- Think of it like a human reviewing their journal and updating their mental model. Daily files are raw notes; MEMORY.md is curated wisdom.
37
+ ## Privacy And External Actions
201
38
 
202
- The goal: Be helpful without being annoying. Check in a few times a day, do useful background work, but respect quiet time.
39
+ - Private data stays private.
40
+ - Do not send emails, messages, posts, files, or media externally unless the user explicitly asks.
41
+ - In shared or group contexts, do not reveal private user context unless the user explicitly authorizes it.
203
42
 
204
- ## Make It Yours
43
+ ## Maintenance
205
44
 
206
- This is a starting point. Add your own conventions, style, and rules as you figure out what works.
45
+ This file is a starting point. Update it when workspace-specific rules become clear.
@@ -106,7 +106,12 @@ async function runXopcEmbeddedTurn(params) {
106
106
  return streamFnWithXopcExtensions(streamModel, effectiveContext, options);
107
107
  };
108
108
  session.agent.streamFn = loggingStreamFn;
109
- if (onEvent) unsubscribe = subscribeEmbeddedSessionEvents(session, onEvent);
109
+ if (onEvent) unsubscribe = subscribeEmbeddedSessionEvents(session, (event) => {
110
+ onEvent({
111
+ ...event,
112
+ runId
113
+ });
114
+ });
110
115
  const handle = {
111
116
  sessionKey,
112
117
  sessionId: transcript.sessionId,
@@ -167,7 +172,8 @@ async function runXopcEmbeddedTurn(params) {
167
172
  }, `Embedded run failed: ${em}`);
168
173
  onEvent?.({
169
174
  type: "error",
170
- content: em
175
+ content: em,
176
+ runId
171
177
  });
172
178
  return {
173
179
  ok: false,
@@ -1 +1 @@
1
- {"version":3,"file":"run-turn.js","names":[],"sources":["../../../../src/agent/embedded/run-turn.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\nimport type { Model, Api } from '@earendil-works/pi-ai';\n\nimport { createLogger } from '../../utils/logger.js';\nimport { registerEmbeddedRun, unregisterEmbeddedRun } from './runs.js';\nimport { subscribeEmbeddedSessionEvents, lastAssistantPlainText } from './subscribe-session.js';\nimport type { RunXopcEmbeddedTurnParams, RunXopcEmbeddedTurnResult } from './types.js';\nimport {\n getAssistantTurnErrorMessage,\n isAssistantTurnAborted,\n isAssistantTurnFailed,\n maybeRetryTurnAfterTransientLlmFailure,\n} from '../orchestration/llm-turn-retry.js';\nimport { runAgentTurnWithTimeout, resolveAgentTurnTimeoutMs } from '../orchestration/run-agent-turn-with-timeout.js';\nimport { detectToolLoops, type RecentToolCall } from '../orchestration/loop-guard.js';\nimport {\n acquireEmbeddedSessionRunner,\n resolveEmbeddedTranscriptInputs,\n} from './session-runner.js';\nimport { wrapStreamFnForXopcExtensions } from './xopc-stream-bridge.js';\n\nconst log = createLogger('EmbeddedRun');\nconst LOG_PREVIEW_MAX_CHARS = 300;\n\nfunction truncateForLog(value: string, maxChars = LOG_PREVIEW_MAX_CHARS): string {\n return value.length > maxChars ? `${value.slice(0, maxChars)}…` : value;\n}\n\nfunction extractTextFromContent(content: unknown): string {\n if (typeof content === 'string') {\n return content;\n }\n if (!Array.isArray(content)) {\n return '';\n }\n return content\n .filter((block): block is { type: string; text: string } => {\n return !!block && typeof block === 'object' && (block as { type?: string }).type === 'text';\n })\n .map((block) => block.text)\n .join('');\n}\n\nfunction extractRecentToolCalls(messages: readonly { role?: string; content?: unknown }[]): RecentToolCall[] {\n const calls: RecentToolCall[] = [];\n for (const message of messages) {\n if (message.role !== 'assistant' || !Array.isArray(message.content)) continue;\n for (const block of message.content) {\n if (block && typeof block === 'object' && (block as { type?: string }).type === 'toolCall') {\n const toolCall = block as { name: string; arguments: unknown };\n calls.push({ name: toolCall.name, params: toolCall.arguments });\n }\n }\n }\n return calls;\n}\n\nfunction getLastUserMessagePreview(messages: readonly { role?: string; content?: unknown }[]): string | undefined {\n for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex--) {\n const message = messages[messageIndex];\n if (message?.role !== 'user') {\n continue;\n }\n const text = extractTextFromContent(message.content).trim();\n return text ? truncateForLog(text) : undefined;\n }\n return undefined;\n}\n\nfunction requireEmbeddedModel(model: Model<Api> | undefined, modelRef: string): Model<Api> {\n if (!model?.id || !model?.provider) {\n throw new Error(`Invalid model for embedded run: ${modelRef}`);\n }\n return model;\n}\n\nfunction userMessageToPromptText(message: AgentMessage): string {\n const content = (message as { content?: unknown }).content;\n if (typeof content === 'string') {\n return content;\n }\n if (Array.isArray(content)) {\n return content\n .filter((block): block is { type: 'text'; text: string } => {\n return !!block && typeof block === 'object' && (block as { type?: string }).type === 'text';\n })\n .map((block) => block.text)\n .join('');\n }\n return '';\n}\n\nexport async function runXopcEmbeddedTurn(params: RunXopcEmbeddedTurnParams): Promise<RunXopcEmbeddedTurnResult> {\n const {\n sessionKey,\n runId,\n userMessage,\n model,\n tools,\n systemPrompt,\n thinkingLevel,\n workspaceDir,\n sessionStore,\n onEvent,\n } = params;\n\n const timeoutMs = params.timeoutMs || resolveAgentTurnTimeoutMs();\n const resolvedModel = requireEmbeddedModel(model, params.modelRef);\n const transcript = await resolveEmbeddedTranscriptInputs(sessionStore, sessionKey);\n\n let runner: Awaited<ReturnType<typeof acquireEmbeddedSessionRunner>> | undefined;\n let unsubscribe: (() => void) | undefined;\n\n try {\n runner = await acquireEmbeddedSessionRunner({\n sessionKey,\n sessionId: transcript.sessionId,\n workspaceDir,\n model: resolvedModel,\n modelRef: params.modelRef,\n tools,\n systemPrompt,\n thinkingLevel: thinkingLevel ?? 'medium',\n });\n\n const { session, reused } = runner;\n\n const streamFnWithXopcExtensions = wrapStreamFnForXopcExtensions(session.agent.streamFn);\n const loggingStreamFn: typeof session.agent.streamFn = (streamModel, context, options) => {\n const recentToolCalls = extractRecentToolCalls(context.messages);\n const loopGuard = detectToolLoops(recentToolCalls);\n\n let effectiveContext = context;\n if (loopGuard.injection || loopGuard.hiddenTools.size > 0) {\n const messages = loopGuard.injection\n ? [...context.messages, { role: 'user' as const, content: loopGuard.injection, timestamp: Date.now() }]\n : context.messages;\n\n const contextTools = loopGuard.hiddenTools.size > 0 && context.tools\n ? context.tools.filter((t) => !loopGuard.hiddenTools.has(t.name))\n : context.tools;\n\n effectiveContext = { ...context, messages, tools: contextTools };\n }\n\n log.debug(\n {\n sessionKey,\n runId,\n reusedRunner: reused,\n modelRef: `${streamModel.provider}/${streamModel.id}`,\n systemPromptLength: effectiveContext.systemPrompt?.length ?? 0,\n messageCount: effectiveContext.messages.length,\n toolCount: effectiveContext.tools?.length ?? 0,\n lastUserMessagePreview: getLastUserMessagePreview(effectiveContext.messages),\n loopWarningInjected: !!loopGuard.injection,\n hiddenToolCount: loopGuard.hiddenTools.size,\n },\n 'Sending messages to AI',\n );\n return streamFnWithXopcExtensions(streamModel, effectiveContext, options);\n };\n session.agent.streamFn = loggingStreamFn;\n\n if (onEvent) {\n unsubscribe = subscribeEmbeddedSessionEvents(session, onEvent);\n }\n\n const handle = {\n sessionKey,\n sessionId: transcript.sessionId,\n runId,\n session,\n abort: async () => {\n await session.abort();\n },\n };\n registerEmbeddedRun(handle);\n\n const abortListener = () => {\n void session.abort();\n };\n if (params.abortSignal) {\n if (params.abortSignal.aborted) {\n await session.abort();\n return { ok: false, errorMessage: 'aborted' };\n }\n params.abortSignal.addEventListener('abort', abortListener, { once: true });\n }\n\n try {\n await runAgentTurnWithTimeout(\n session.agent,\n async () => {\n const text = userMessageToPromptText(userMessage);\n const images = params.images ?? [];\n await session.prompt(text, images.length > 0 ? { images } : undefined);\n await session.agent.waitForIdle();\n await maybeRetryTurnAfterTransientLlmFailure(session.agent, { sessionKey, log });\n },\n timeoutMs,\n );\n\n if (isAssistantTurnAborted(session.agent)) {\n return { ok: true, lastAssistantText: lastAssistantPlainText(session) };\n }\n if (isAssistantTurnFailed(session.agent)) {\n return {\n ok: false,\n errorMessage: getAssistantTurnErrorMessage(session.agent) ?? 'Assistant turn failed',\n lastAssistantText: lastAssistantPlainText(session),\n };\n }\n\n return { ok: true, lastAssistantText: lastAssistantPlainText(session) };\n } finally {\n params.abortSignal?.removeEventListener('abort', abortListener);\n unregisterEmbeddedRun(handle);\n }\n } catch (err) {\n const em = err instanceof Error ? err.message : String(err);\n log.error({ err, sessionKey, runId }, `Embedded run failed: ${em}`);\n onEvent?.({ type: 'error', content: em });\n return { ok: false, errorMessage: em };\n } finally {\n unsubscribe?.();\n try {\n runner?.piSm.flushPendingToolResults?.();\n } catch {\n /* ignore */\n }\n runner?.release();\n }\n}\n\nexport { abortEmbeddedRun, queueEmbeddedSteer } from './runs.js';\n"],"mappings":"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"}
1
+ {"version":3,"file":"run-turn.js","names":[],"sources":["../../../../src/agent/embedded/run-turn.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\nimport type { Model, Api } from '@earendil-works/pi-ai';\n\nimport { createLogger } from '../../utils/logger.js';\nimport { registerEmbeddedRun, unregisterEmbeddedRun } from './runs.js';\nimport { subscribeEmbeddedSessionEvents, lastAssistantPlainText } from './subscribe-session.js';\nimport type { RunXopcEmbeddedTurnParams, RunXopcEmbeddedTurnResult } from './types.js';\nimport {\n getAssistantTurnErrorMessage,\n isAssistantTurnAborted,\n isAssistantTurnFailed,\n maybeRetryTurnAfterTransientLlmFailure,\n} from '../orchestration/llm-turn-retry.js';\nimport { runAgentTurnWithTimeout, resolveAgentTurnTimeoutMs } from '../orchestration/run-agent-turn-with-timeout.js';\nimport { detectToolLoops, type RecentToolCall } from '../orchestration/loop-guard.js';\nimport {\n acquireEmbeddedSessionRunner,\n resolveEmbeddedTranscriptInputs,\n} from './session-runner.js';\nimport { wrapStreamFnForXopcExtensions } from './xopc-stream-bridge.js';\n\nconst log = createLogger('EmbeddedRun');\nconst LOG_PREVIEW_MAX_CHARS = 300;\n\nfunction truncateForLog(value: string, maxChars = LOG_PREVIEW_MAX_CHARS): string {\n return value.length > maxChars ? `${value.slice(0, maxChars)}…` : value;\n}\n\nfunction extractTextFromContent(content: unknown): string {\n if (typeof content === 'string') {\n return content;\n }\n if (!Array.isArray(content)) {\n return '';\n }\n return content\n .filter((block): block is { type: string; text: string } => {\n return !!block && typeof block === 'object' && (block as { type?: string }).type === 'text';\n })\n .map((block) => block.text)\n .join('');\n}\n\nfunction extractRecentToolCalls(messages: readonly { role?: string; content?: unknown }[]): RecentToolCall[] {\n const calls: RecentToolCall[] = [];\n for (const message of messages) {\n if (message.role !== 'assistant' || !Array.isArray(message.content)) continue;\n for (const block of message.content) {\n if (block && typeof block === 'object' && (block as { type?: string }).type === 'toolCall') {\n const toolCall = block as { name: string; arguments: unknown };\n calls.push({ name: toolCall.name, params: toolCall.arguments });\n }\n }\n }\n return calls;\n}\n\nfunction getLastUserMessagePreview(messages: readonly { role?: string; content?: unknown }[]): string | undefined {\n for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex--) {\n const message = messages[messageIndex];\n if (message?.role !== 'user') {\n continue;\n }\n const text = extractTextFromContent(message.content).trim();\n return text ? truncateForLog(text) : undefined;\n }\n return undefined;\n}\n\nfunction requireEmbeddedModel(model: Model<Api> | undefined, modelRef: string): Model<Api> {\n if (!model?.id || !model?.provider) {\n throw new Error(`Invalid model for embedded run: ${modelRef}`);\n }\n return model;\n}\n\nfunction userMessageToPromptText(message: AgentMessage): string {\n const content = (message as { content?: unknown }).content;\n if (typeof content === 'string') {\n return content;\n }\n if (Array.isArray(content)) {\n return content\n .filter((block): block is { type: 'text'; text: string } => {\n return !!block && typeof block === 'object' && (block as { type?: string }).type === 'text';\n })\n .map((block) => block.text)\n .join('');\n }\n return '';\n}\n\nexport async function runXopcEmbeddedTurn(params: RunXopcEmbeddedTurnParams): Promise<RunXopcEmbeddedTurnResult> {\n const {\n sessionKey,\n runId,\n userMessage,\n model,\n tools,\n systemPrompt,\n thinkingLevel,\n workspaceDir,\n sessionStore,\n onEvent,\n } = params;\n\n const timeoutMs = params.timeoutMs || resolveAgentTurnTimeoutMs();\n const resolvedModel = requireEmbeddedModel(model, params.modelRef);\n const transcript = await resolveEmbeddedTranscriptInputs(sessionStore, sessionKey);\n\n let runner: Awaited<ReturnType<typeof acquireEmbeddedSessionRunner>> | undefined;\n let unsubscribe: (() => void) | undefined;\n\n try {\n runner = await acquireEmbeddedSessionRunner({\n sessionKey,\n sessionId: transcript.sessionId,\n workspaceDir,\n model: resolvedModel,\n modelRef: params.modelRef,\n tools,\n systemPrompt,\n thinkingLevel: thinkingLevel ?? 'medium',\n });\n\n const { session, reused } = runner;\n\n const streamFnWithXopcExtensions = wrapStreamFnForXopcExtensions(session.agent.streamFn);\n const loggingStreamFn: typeof session.agent.streamFn = (streamModel, context, options) => {\n const recentToolCalls = extractRecentToolCalls(context.messages);\n const loopGuard = detectToolLoops(recentToolCalls);\n\n let effectiveContext = context;\n if (loopGuard.injection || loopGuard.hiddenTools.size > 0) {\n const messages = loopGuard.injection\n ? [...context.messages, { role: 'user' as const, content: loopGuard.injection, timestamp: Date.now() }]\n : context.messages;\n\n const contextTools = loopGuard.hiddenTools.size > 0 && context.tools\n ? context.tools.filter((t) => !loopGuard.hiddenTools.has(t.name))\n : context.tools;\n\n effectiveContext = { ...context, messages, tools: contextTools };\n }\n\n log.debug(\n {\n sessionKey,\n runId,\n reusedRunner: reused,\n modelRef: `${streamModel.provider}/${streamModel.id}`,\n systemPromptLength: effectiveContext.systemPrompt?.length ?? 0,\n messageCount: effectiveContext.messages.length,\n toolCount: effectiveContext.tools?.length ?? 0,\n lastUserMessagePreview: getLastUserMessagePreview(effectiveContext.messages),\n loopWarningInjected: !!loopGuard.injection,\n hiddenToolCount: loopGuard.hiddenTools.size,\n },\n 'Sending messages to AI',\n );\n return streamFnWithXopcExtensions(streamModel, effectiveContext, options);\n };\n session.agent.streamFn = loggingStreamFn;\n\n if (onEvent) {\n unsubscribe = subscribeEmbeddedSessionEvents(session, (event) => {\n onEvent({ ...event, runId });\n });\n }\n\n const handle = {\n sessionKey,\n sessionId: transcript.sessionId,\n runId,\n session,\n abort: async () => {\n await session.abort();\n },\n };\n registerEmbeddedRun(handle);\n\n const abortListener = () => {\n void session.abort();\n };\n if (params.abortSignal) {\n if (params.abortSignal.aborted) {\n await session.abort();\n return { ok: false, errorMessage: 'aborted' };\n }\n params.abortSignal.addEventListener('abort', abortListener, { once: true });\n }\n\n try {\n await runAgentTurnWithTimeout(\n session.agent,\n async () => {\n const text = userMessageToPromptText(userMessage);\n const images = params.images ?? [];\n await session.prompt(text, images.length > 0 ? { images } : undefined);\n await session.agent.waitForIdle();\n await maybeRetryTurnAfterTransientLlmFailure(session.agent, { sessionKey, log });\n },\n timeoutMs,\n );\n\n if (isAssistantTurnAborted(session.agent)) {\n return { ok: true, lastAssistantText: lastAssistantPlainText(session) };\n }\n if (isAssistantTurnFailed(session.agent)) {\n return {\n ok: false,\n errorMessage: getAssistantTurnErrorMessage(session.agent) ?? 'Assistant turn failed',\n lastAssistantText: lastAssistantPlainText(session),\n };\n }\n\n return { ok: true, lastAssistantText: lastAssistantPlainText(session) };\n } finally {\n params.abortSignal?.removeEventListener('abort', abortListener);\n unregisterEmbeddedRun(handle);\n }\n } catch (err) {\n const em = err instanceof Error ? err.message : String(err);\n log.error({ err, sessionKey, runId }, `Embedded run failed: ${em}`);\n onEvent?.({ type: 'error', content: em, runId });\n return { ok: false, errorMessage: em };\n } finally {\n unsubscribe?.();\n try {\n runner?.piSm.flushPendingToolResults?.();\n } catch {\n /* ignore */\n }\n runner?.release();\n }\n}\n\nexport { abortEmbeddedRun, queueEmbeddedSteer } from './runs.js';\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
2
- import { boundedJsonUtf8Bytes, firstEnumerableOwnKeys, jsonUtf8BytesOrInfinity } from "../../infra/json-utf8-bytes.js";
3
2
  import { emitSessionTranscriptUpdate } from "../../session/transcript-events.js";
3
+ import { boundedJsonUtf8Bytes, firstEnumerableOwnKeys, jsonUtf8BytesOrInfinity } from "../../infra/json-utf8-bytes.js";
4
4
  import { formatContextLimitTruncationNotice } from "./tool-result-context-guard.js";
5
5
  import { resolveLiveToolResultMaxChars, truncateToolResultMessage } from "./tool-result-truncation.js";
6
6
  import { extractToolCallsFromAssistant, extractToolResultId } from "../transcript/tool-call-id.js";
@@ -1,94 +1,76 @@
1
1
  import { extractTextContent } from "../context/workspace.js";
2
- import { mapEmbeddedToolEndResult } from "./map-stream-events.js";
3
2
  //#region src/agent/embedded/subscribe-session.ts
4
3
  function subscribeEmbeddedSessionEvents(session, onEvent) {
5
4
  return session.subscribe((event) => {
6
5
  const base = event;
7
6
  switch (base.type) {
8
- case "message_update": {
9
- const delta = base.assistantMessageEvent;
10
- if (delta?.type === "text_delta" && typeof delta.delta === "string" && delta.delta) onEvent({
11
- type: "token",
12
- content: delta.delta
13
- });
14
- if (delta?.type === "thinking_delta" && typeof delta.delta === "string" && delta.delta) onEvent({
15
- type: "thinking",
16
- content: delta.delta
7
+ case "agent_start":
8
+ onEvent({ type: "agent_start" });
9
+ break;
10
+ case "agent_end":
11
+ onEvent({ type: "agent_end" });
12
+ break;
13
+ case "message_start": {
14
+ const m = base.message;
15
+ onEvent({
16
+ type: "message_start",
17
+ message: m
17
18
  });
18
19
  break;
19
20
  }
20
- case "message_start":
21
- if (base.message?.role === "assistant") onEvent({
22
- type: "thinking",
23
- status: "started"
21
+ case "message_update": {
22
+ const u = base;
23
+ onEvent({
24
+ type: "message_update",
25
+ message: u.message,
26
+ assistantMessageEvent: u.assistantMessageEvent
24
27
  });
25
28
  break;
26
- case "message_end":
27
- onEvent({ type: "message_end" });
29
+ }
30
+ case "message_end": {
31
+ const m = base.message;
32
+ onEvent({
33
+ type: "message_end",
34
+ message: m
35
+ });
28
36
  break;
37
+ }
29
38
  case "tool_execution_start": {
30
39
  const t = base;
31
40
  onEvent({
32
- type: "tool_start",
41
+ type: "tool_execution_start",
33
42
  toolName: t.toolName,
34
43
  toolCallId: t.toolCallId,
35
- args: t.args ?? {}
44
+ args: t.args
36
45
  });
37
46
  break;
38
47
  }
39
48
  case "tool_execution_end": {
40
49
  const t = base;
41
50
  onEvent({
42
- type: "tool_end",
51
+ type: "tool_execution_end",
43
52
  toolName: t.toolName,
44
53
  toolCallId: t.toolCallId,
45
54
  isError: t.isError,
46
- result: mapEmbeddedToolEndResult(t.result)
55
+ result: t.result
47
56
  });
48
57
  break;
49
58
  }
50
59
  case "tool_execution_update": {
51
60
  const t = base;
52
- const details = extractStructuredDetails(t.partialResult);
53
- if (details !== void 0) onEvent({
54
- type: "tool_update",
61
+ onEvent({
62
+ type: "tool_execution_update",
55
63
  toolName: t.toolName,
56
64
  toolCallId: t.toolCallId,
57
- details
65
+ args: t.args,
66
+ partialResult: t.partialResult
58
67
  });
59
68
  break;
60
69
  }
61
- case "agent_start":
62
- onEvent({
63
- type: "progress",
64
- stage: "thinking",
65
- message: "Thinking..."
66
- });
67
- break;
68
- case "agent_end":
69
- onEvent({
70
- type: "progress",
71
- stage: "idle",
72
- message: "Done"
73
- });
74
- break;
75
70
  default: break;
76
71
  }
77
72
  });
78
73
  }
79
- /**
80
- * Pull a structured `details` payload out of an AgentToolResult-shaped
81
- * `partialResult`. Returns undefined when the update is text-only (e.g. shell
82
- * stdout deltas), so callers can skip emitting empty SSE updates.
83
- */
84
- function extractStructuredDetails(partial) {
85
- if (!partial || typeof partial !== "object") return void 0;
86
- const rec = partial;
87
- if (!("details" in rec)) return void 0;
88
- const d = rec.details;
89
- if (d === null || d === void 0) return void 0;
90
- if (typeof d === "object") return d;
91
- }
92
74
  function lastAssistantPlainText(session) {
93
75
  const messages = session.agent.state.messages;
94
76
  for (let i = messages.length - 1; i >= 0; i--) {
@@ -1 +1 @@
1
- {"version":3,"file":"subscribe-session.js","names":["u"],"sources":["../../../../src/agent/embedded/subscribe-session.ts"],"sourcesContent":["import type { AgentSession, AgentSessionEvent } from '@earendil-works/pi-coding-agent';\nimport type { AgentEvent } from '@earendil-works/pi-agent-core';\n\nimport { extractTextContent } from '../context/workspace.js';\nimport { mapEmbeddedToolEndResult } from './map-stream-events.js';\nimport type { EmbeddedStreamEvent } from './types.js';\n\nexport function subscribeEmbeddedSessionEvents(\n session: AgentSession,\n onEvent: (event: EmbeddedStreamEvent) => void,\n): () => void {\n return session.subscribe((event: AgentSessionEvent) => {\n const base = event as AgentEvent;\n switch (base.type) {\n case 'message_update': {\n const u = base as Extract<AgentEvent, { type: 'message_update' }>;\n const delta = u.assistantMessageEvent;\n if (delta?.type === 'text_delta' && typeof delta.delta === 'string' && delta.delta) {\n onEvent({ type: 'token', content: delta.delta });\n }\n if (delta?.type === 'thinking_delta' && typeof delta.delta === 'string' && delta.delta) {\n onEvent({ type: 'thinking', content: delta.delta });\n }\n break;\n }\n case 'message_start': {\n const m = (base as Extract<AgentEvent, { type: 'message_start' }>).message;\n if (m?.role === 'assistant') {\n onEvent({ type: 'thinking', status: 'started' });\n }\n break;\n }\n case 'message_end':\n onEvent({ type: 'message_end' });\n break;\n case 'tool_execution_start': {\n const t = base as Extract<AgentEvent, { type: 'tool_execution_start' }>;\n onEvent({\n type: 'tool_start',\n toolName: t.toolName,\n toolCallId: t.toolCallId,\n args: (t.args as Record<string, unknown>) ?? {},\n });\n break;\n }\n case 'tool_execution_end': {\n const t = base as Extract<AgentEvent, { type: 'tool_execution_end' }>;\n onEvent({\n type: 'tool_end',\n toolName: t.toolName,\n toolCallId: t.toolCallId,\n isError: t.isError,\n result: mapEmbeddedToolEndResult(t.result),\n });\n break;\n }\n case 'tool_execution_update': {\n const t = base as Extract<AgentEvent, { type: 'tool_execution_update' }>;\n const details = extractStructuredDetails(t.partialResult);\n // Only forward when the tool actually produced structured details.\n // Tools that just stream text chunks via onUpdate (shell, web_*) would\n // otherwise saturate the SSE channel with redundant payloads.\n if (details !== undefined) {\n onEvent({\n type: 'tool_update',\n toolName: t.toolName,\n toolCallId: t.toolCallId,\n details,\n });\n }\n break;\n }\n case 'agent_start':\n onEvent({ type: 'progress', stage: 'thinking', message: 'Thinking...' });\n break;\n case 'agent_end':\n onEvent({ type: 'progress', stage: 'idle', message: 'Done' });\n break;\n default:\n break;\n }\n });\n}\n\n/**\n * Pull a structured `details` payload out of an AgentToolResult-shaped\n * `partialResult`. Returns undefined when the update is text-only (e.g. shell\n * stdout deltas), so callers can skip emitting empty SSE updates.\n */\nfunction extractStructuredDetails(partial: unknown): unknown {\n if (!partial || typeof partial !== 'object') return undefined;\n const rec = partial as Record<string, unknown>;\n if (!('details' in rec)) return undefined;\n const d = rec.details;\n if (d === null || d === undefined) return undefined;\n if (typeof d === 'object') return d;\n return undefined;\n}\n\nexport function lastAssistantPlainText(session: AgentSession): string | undefined {\n const messages = session.agent.state.messages;\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role !== 'assistant') {\n continue;\n }\n const content = msg.content;\n if (typeof content === 'string') {\n return content;\n }\n if (Array.isArray(content)) {\n return extractTextContent(content as Array<{ type: string; text?: string }>);\n }\n }\n return undefined;\n}\n"],"mappings":";;;AAOA,SAAgB,+BACd,SACA,SACY;AACZ,QAAO,QAAQ,WAAW,UAA6B;EACrD,MAAM,OAAO;AACb,UAAQ,KAAK,MAAb;GACE,KAAK,kBAAkB;IAErB,MAAM,QAAQA,KAAE;AAChB,QAAI,OAAO,SAAS,gBAAgB,OAAO,MAAM,UAAU,YAAY,MAAM,MAC3E,SAAQ;KAAE,MAAM;KAAS,SAAS,MAAM;KAAO,CAAC;AAElD,QAAI,OAAO,SAAS,oBAAoB,OAAO,MAAM,UAAU,YAAY,MAAM,MAC/E,SAAQ;KAAE,MAAM;KAAY,SAAS,MAAM;KAAO,CAAC;AAErD;;GAEF,KAAK;AAEH,QADW,KAAwD,SAC5D,SAAS,YACd,SAAQ;KAAE,MAAM;KAAY,QAAQ;KAAW,CAAC;AAElD;GAEF,KAAK;AACH,YAAQ,EAAE,MAAM,eAAe,CAAC;AAChC;GACF,KAAK,wBAAwB;IAC3B,MAAM,IAAI;AACV,YAAQ;KACN,MAAM;KACN,UAAU,EAAE;KACZ,YAAY,EAAE;KACd,MAAO,EAAE,QAAoC,EAAE;KAChD,CAAC;AACF;;GAEF,KAAK,sBAAsB;IACzB,MAAM,IAAI;AACV,YAAQ;KACN,MAAM;KACN,UAAU,EAAE;KACZ,YAAY,EAAE;KACd,SAAS,EAAE;KACX,QAAQ,yBAAyB,EAAE,OAAO;KAC3C,CAAC;AACF;;GAEF,KAAK,yBAAyB;IAC5B,MAAM,IAAI;IACV,MAAM,UAAU,yBAAyB,EAAE,cAAc;AAIzD,QAAI,YAAY,KAAA,EACd,SAAQ;KACN,MAAM;KACN,UAAU,EAAE;KACZ,YAAY,EAAE;KACd;KACD,CAAC;AAEJ;;GAEF,KAAK;AACH,YAAQ;KAAE,MAAM;KAAY,OAAO;KAAY,SAAS;KAAe,CAAC;AACxE;GACF,KAAK;AACH,YAAQ;KAAE,MAAM;KAAY,OAAO;KAAQ,SAAS;KAAQ,CAAC;AAC7D;GACF,QACE;;GAEJ;;;;;;;AAQJ,SAAS,yBAAyB,SAA2B;AAC3D,KAAI,CAAC,WAAW,OAAO,YAAY,SAAU,QAAO,KAAA;CACpD,MAAM,MAAM;AACZ,KAAI,EAAE,aAAa,KAAM,QAAO,KAAA;CAChC,MAAM,IAAI,IAAI;AACd,KAAI,MAAM,QAAQ,MAAM,KAAA,EAAW,QAAO,KAAA;AAC1C,KAAI,OAAO,MAAM,SAAU,QAAO;;AAIpC,SAAgB,uBAAuB,SAA2C;CAChF,MAAM,WAAW,QAAQ,MAAM,MAAM;AACrC,MAAK,IAAI,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;EAC7C,MAAM,MAAM,SAAS;AACrB,MAAI,IAAI,SAAS,YACf;EAEF,MAAM,UAAU,IAAI;AACpB,MAAI,OAAO,YAAY,SACrB,QAAO;AAET,MAAI,MAAM,QAAQ,QAAQ,CACxB,QAAO,mBAAmB,QAAkD"}
1
+ {"version":3,"file":"subscribe-session.js","names":[],"sources":["../../../../src/agent/embedded/subscribe-session.ts"],"sourcesContent":["import type { AgentSession, AgentSessionEvent } from '@earendil-works/pi-coding-agent';\nimport type { AgentEvent } from '@earendil-works/pi-agent-core';\n\nimport { extractTextContent } from '../context/workspace.js';\nimport type { EmbeddedStreamEvent } from './types.js';\n\nexport function subscribeEmbeddedSessionEvents(\n session: AgentSession,\n onEvent: (event: EmbeddedStreamEvent) => void,\n): () => void {\n return session.subscribe((event: AgentSessionEvent) => {\n const base = event as AgentEvent;\n switch (base.type) {\n case 'agent_start':\n onEvent({ type: 'agent_start' });\n break;\n case 'agent_end':\n onEvent({ type: 'agent_end' });\n break;\n case 'message_start': {\n const m = (base as Extract<AgentEvent, { type: 'message_start' }>).message;\n onEvent({ type: 'message_start', message: m });\n break;\n }\n case 'message_update': {\n const u = base as Extract<AgentEvent, { type: 'message_update' }>;\n onEvent({\n type: 'message_update',\n message: u.message,\n assistantMessageEvent: u.assistantMessageEvent,\n });\n break;\n }\n case 'message_end': {\n const m = (base as Extract<AgentEvent, { type: 'message_end' }>).message;\n onEvent({ type: 'message_end', message: m });\n break;\n }\n case 'tool_execution_start': {\n const t = base as Extract<AgentEvent, { type: 'tool_execution_start' }>;\n onEvent({\n type: 'tool_execution_start',\n toolName: t.toolName,\n toolCallId: t.toolCallId,\n args: t.args,\n });\n break;\n }\n case 'tool_execution_end': {\n const t = base as Extract<AgentEvent, { type: 'tool_execution_end' }>;\n onEvent({\n type: 'tool_execution_end',\n toolName: t.toolName,\n toolCallId: t.toolCallId,\n isError: t.isError,\n result: t.result,\n });\n break;\n }\n case 'tool_execution_update': {\n const t = base as Extract<AgentEvent, { type: 'tool_execution_update' }>;\n onEvent({\n type: 'tool_execution_update',\n toolName: t.toolName,\n toolCallId: t.toolCallId,\n args: t.args,\n partialResult: t.partialResult,\n });\n break;\n }\n default:\n break;\n }\n });\n}\n\nexport function lastAssistantPlainText(session: AgentSession): string | undefined {\n const messages = session.agent.state.messages;\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role !== 'assistant') {\n continue;\n }\n const content = msg.content;\n if (typeof content === 'string') {\n return content;\n }\n if (Array.isArray(content)) {\n return extractTextContent(content as Array<{ type: string; text?: string }>);\n }\n }\n return undefined;\n}\n"],"mappings":";;AAMA,SAAgB,+BACd,SACA,SACY;AACZ,QAAO,QAAQ,WAAW,UAA6B;EACrD,MAAM,OAAO;AACb,UAAQ,KAAK,MAAb;GACE,KAAK;AACH,YAAQ,EAAE,MAAM,eAAe,CAAC;AAChC;GACF,KAAK;AACH,YAAQ,EAAE,MAAM,aAAa,CAAC;AAC9B;GACF,KAAK,iBAAiB;IACpB,MAAM,IAAK,KAAwD;AACnE,YAAQ;KAAE,MAAM;KAAiB,SAAS;KAAG,CAAC;AAC9C;;GAEF,KAAK,kBAAkB;IACrB,MAAM,IAAI;AACV,YAAQ;KACN,MAAM;KACN,SAAS,EAAE;KACX,uBAAuB,EAAE;KAC1B,CAAC;AACF;;GAEF,KAAK,eAAe;IAClB,MAAM,IAAK,KAAsD;AACjE,YAAQ;KAAE,MAAM;KAAe,SAAS;KAAG,CAAC;AAC5C;;GAEF,KAAK,wBAAwB;IAC3B,MAAM,IAAI;AACV,YAAQ;KACN,MAAM;KACN,UAAU,EAAE;KACZ,YAAY,EAAE;KACd,MAAM,EAAE;KACT,CAAC;AACF;;GAEF,KAAK,sBAAsB;IACzB,MAAM,IAAI;AACV,YAAQ;KACN,MAAM;KACN,UAAU,EAAE;KACZ,YAAY,EAAE;KACd,SAAS,EAAE;KACX,QAAQ,EAAE;KACX,CAAC;AACF;;GAEF,KAAK,yBAAyB;IAC5B,MAAM,IAAI;AACV,YAAQ;KACN,MAAM;KACN,UAAU,EAAE;KACZ,YAAY,EAAE;KACd,MAAM,EAAE;KACR,eAAe,EAAE;KAClB,CAAC;AACF;;GAEF,QACE;;GAEJ;;AAGJ,SAAgB,uBAAuB,SAA2C;CAChF,MAAM,WAAW,QAAQ,MAAM,MAAM;AACrC,MAAK,IAAI,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;EAC7C,MAAM,MAAM,SAAS;AACrB,MAAI,IAAI,SAAS,YACf;EAEF,MAAM,UAAU,IAAI;AACpB,MAAI,OAAO,YAAY,SACrB,QAAO;AAET,MAAI,MAAM,QAAQ,QAAQ,CACxB,QAAO,mBAAmB,QAAkD"}
@@ -1,56 +1,57 @@
1
- import type { AgentMessage } from '@earendil-works/pi-agent-core';
2
- import type { ImageContent } from '@earendil-works/pi-ai';
3
- import type { ThinkingLevel } from '@earendil-works/pi-agent-core';
4
- import type { Model, Api } from '@earendil-works/pi-ai';
1
+ import type { AgentMessage, AgentToolResult, ThinkingLevel } from '@earendil-works/pi-agent-core';
2
+ import type { AssistantMessageEvent, Model, Api, ImageContent } from '@earendil-works/pi-ai';
5
3
  import type { SessionStore } from '../../session/store.js';
6
4
  export type EmbeddedStreamEvent = {
7
- type: 'token';
8
- content: string;
5
+ type: 'agent_start';
6
+ runId?: string;
9
7
  } | {
10
- type: 'thinking';
11
- content?: string;
12
- status?: string;
8
+ type: 'agent_end';
9
+ runId?: string;
13
10
  } | {
14
- type: 'tool_start';
15
- toolName: string;
16
- toolCallId?: string;
17
- args?: Record<string, unknown>;
11
+ type: 'message_start';
12
+ runId?: string;
13
+ message: AgentMessage;
18
14
  } | {
19
- type: 'tool_end';
15
+ type: 'message_update';
16
+ runId?: string;
17
+ message: AgentMessage;
18
+ assistantMessageEvent?: AssistantMessageEvent;
19
+ } | {
20
+ type: 'message_end';
21
+ runId?: string;
22
+ message: AgentMessage;
23
+ } | {
24
+ type: 'tool_execution_start';
25
+ runId?: string;
26
+ toolCallId: string;
20
27
  toolName: string;
21
- toolCallId?: string;
22
- isError?: boolean;
23
- result?: unknown;
28
+ args: unknown;
24
29
  } | {
25
- /**
26
- * Mid-execution structured update for a tool whose `partialResult` is a
27
- * {@link AgentToolResult}-shaped object (i.e. it carries `details`).
28
- *
29
- * The runtime only emits this when the upstream tool actually called
30
- * `onUpdate` with structured details — so single-shot tools (read/write,
31
- * shell, …) never produce this event, but the workflow tool — which
32
- * pushes a fresh `WorkflowSnapshot` on every phase / agent state change
33
- * — produces a steady stream that the client wires straight into the
34
- * WorkflowCard's live progress tree.
35
- *
36
- * Carries `details` only (no `content` text) to keep the SSE payload
37
- * tight — the final `tool_end` event still ships the full envelope.
38
- */
39
- type: 'tool_update';
30
+ type: 'tool_execution_update';
31
+ runId?: string;
32
+ toolCallId: string;
40
33
  toolName: string;
41
- toolCallId?: string;
42
- details: unknown;
34
+ args: unknown;
35
+ partialResult: AgentToolResult<any>;
43
36
  } | {
44
- type: 'message_end';
37
+ type: 'tool_execution_end';
38
+ runId?: string;
39
+ toolCallId: string;
40
+ toolName: string;
41
+ result: AgentToolResult<any>;
42
+ isError: boolean;
45
43
  } | {
46
44
  type: 'progress';
45
+ runId?: string;
47
46
  stage: string;
48
47
  message: string;
49
48
  } | {
50
49
  type: 'error';
50
+ runId?: string;
51
51
  content: string;
52
52
  } | {
53
53
  type: 'compaction';
54
+ runId?: string;
54
55
  status: 'started' | 'completed' | 'skipped';
55
56
  tokensBefore?: number;
56
57
  tokensAfter?: number;
@@ -23,7 +23,7 @@ function parseModelRef(raw, defaultProvider) {
23
23
  }
24
24
  function resolveFallbackCandidates(params) {
25
25
  const { cfg, provider: inputProvider, model: inputModel, fallbacksOverride } = params;
26
- const modelConfig = cfg?.agents?.defaults?.model;
26
+ const modelConfig = cfg?.agents?.defaults?.models?.chat;
27
27
  const primaryRef = modelConfig?.primary;
28
28
  const fallbacks = fallbacksOverride ?? modelConfig?.fallbacks;
29
29
  const defaultParts = getDefaultModelParts(cfg);
@@ -1 +1 @@
1
- {"version":3,"file":"candidates.js","names":["parseModelRefUtil"],"sources":["../../../../src/agent/fallback/candidates.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\nimport { isProviderConfiguredSync } from '../../providers/index.js';\nimport { getDefaultModelSync } from '../../providers/index.js';\nimport { parseModelRef as parseModelRefUtil, normalizeProviderId } from '../models/selection.js';\n\nexport interface ModelCandidate {\n provider: string;\n model: string;\n}\n\nexport interface FallbackAttempt {\n provider: string;\n model: string;\n error: string;\n reason?: string;\n status?: number;\n code?: string;\n}\n\n// Get default model dynamically\nfunction getDefaultModelParts(config?: Config): { provider: string; model: string } {\n const defaultModel = getDefaultModelSync(config);\n const parts = defaultModel.split('/');\n return {\n provider: parts[0] || 'anthropic',\n model: parts[1] || 'claude-sonnet-4-5',\n };\n}\n\n/**\n * Parse model reference string into provider/model parts.\n * Uses the unified implementation from selection.ts.\n */\nfunction parseModelRef(raw: string, defaultProvider?: string): ModelCandidate | null {\n const result = parseModelRefUtil(raw, defaultProvider);\n if (!result) return null;\n return {\n provider: normalizeProviderId(result.provider),\n model: result.model,\n };\n}\n\nexport function resolveFallbackCandidates(params: {\n cfg: Config | undefined;\n provider: string;\n model: string;\n fallbacksOverride?: string[];\n}): ModelCandidate[] {\n const { cfg, provider: inputProvider, model: inputModel, fallbacksOverride } = params;\n\n const modelConfig = cfg?.agents?.defaults?.model;\n const primaryRef = modelConfig?.primary;\n const fallbacks = fallbacksOverride ?? modelConfig?.fallbacks;\n\n const defaultParts = getDefaultModelParts(cfg);\n const primaryResolved = parseModelRef(primaryRef || getDefaultModelSync(cfg));\n const provider = inputProvider.trim() || primaryResolved?.provider || defaultParts.provider;\n const model = inputModel.trim() || primaryResolved?.model || defaultParts.model;\n\n const candidates: ModelCandidate[] = [];\n const seen = new Set<string>();\n\n const addCandidate = (c: ModelCandidate) => {\n const key = `${c.provider}/${c.model}`.toLowerCase();\n if (seen.has(key)) return;\n // Skip providers that are not configured (no API key)\n if (!isProviderConfiguredSync(c.provider)) return;\n seen.add(key);\n candidates.push(c);\n };\n\n addCandidate({ provider, model });\n\n if (fallbacks) {\n for (const fb of fallbacks) {\n const resolved = parseModelRef(fb, provider);\n if (resolved) addCandidate(resolved);\n }\n }\n\n if (!fallbacksOverride && primaryResolved) {\n addCandidate(primaryResolved);\n }\n\n return candidates;\n}\n"],"mappings":";;;gBACoE;AAmBpE,SAAS,qBAAqB,QAAsD;CAElF,MAAM,QADe,oBAAoB,OACf,CAAC,MAAM,IAAI;AACrC,QAAO;EACL,UAAU,MAAM,MAAM;EACtB,OAAO,MAAM,MAAM;EACpB;;;;;;AAOH,SAAS,cAAc,KAAa,iBAAiD;CACnF,MAAM,SAASA,gBAAkB,KAAK,gBAAgB;AACtD,KAAI,CAAC,OAAQ,QAAO;AACpB,QAAO;EACL,UAAU,oBAAoB,OAAO,SAAS;EAC9C,OAAO,OAAO;EACf;;AAGH,SAAgB,0BAA0B,QAKrB;CACnB,MAAM,EAAE,KAAK,UAAU,eAAe,OAAO,YAAY,sBAAsB;CAE/E,MAAM,cAAc,KAAK,QAAQ,UAAU;CAC3C,MAAM,aAAa,aAAa;CAChC,MAAM,YAAY,qBAAqB,aAAa;CAEpD,MAAM,eAAe,qBAAqB,IAAI;CAC9C,MAAM,kBAAkB,cAAc,cAAc,oBAAoB,IAAI,CAAC;CAC7E,MAAM,WAAW,cAAc,MAAM,IAAI,iBAAiB,YAAY,aAAa;CACnF,MAAM,QAAQ,WAAW,MAAM,IAAI,iBAAiB,SAAS,aAAa;CAE1E,MAAM,aAA+B,EAAE;CACvC,MAAM,uBAAO,IAAI,KAAa;CAE9B,MAAM,gBAAgB,MAAsB;EAC1C,MAAM,MAAM,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,aAAa;AACpD,MAAI,KAAK,IAAI,IAAI,CAAE;AAEnB,MAAI,CAAC,yBAAyB,EAAE,SAAS,CAAE;AAC3C,OAAK,IAAI,IAAI;AACb,aAAW,KAAK,EAAE;;AAGpB,cAAa;EAAE;EAAU;EAAO,CAAC;AAEjC,KAAI,UACF,MAAK,MAAM,MAAM,WAAW;EAC1B,MAAM,WAAW,cAAc,IAAI,SAAS;AAC5C,MAAI,SAAU,cAAa,SAAS;;AAIxC,KAAI,CAAC,qBAAqB,gBACxB,cAAa,gBAAgB;AAG/B,QAAO"}
1
+ {"version":3,"file":"candidates.js","names":["parseModelRefUtil"],"sources":["../../../../src/agent/fallback/candidates.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\nimport { isProviderConfiguredSync } from '../../providers/index.js';\nimport { getDefaultModelSync } from '../../providers/index.js';\nimport { parseModelRef as parseModelRefUtil, normalizeProviderId } from '../models/selection.js';\n\nexport interface ModelCandidate {\n provider: string;\n model: string;\n}\n\nexport interface FallbackAttempt {\n provider: string;\n model: string;\n error: string;\n reason?: string;\n status?: number;\n code?: string;\n}\n\n// Get default model dynamically\nfunction getDefaultModelParts(config?: Config): { provider: string; model: string } {\n const defaultModel = getDefaultModelSync(config);\n const parts = defaultModel.split('/');\n return {\n provider: parts[0] || 'anthropic',\n model: parts[1] || 'claude-sonnet-4-5',\n };\n}\n\n/**\n * Parse model reference string into provider/model parts.\n * Uses the unified implementation from selection.ts.\n */\nfunction parseModelRef(raw: string, defaultProvider?: string): ModelCandidate | null {\n const result = parseModelRefUtil(raw, defaultProvider);\n if (!result) return null;\n return {\n provider: normalizeProviderId(result.provider),\n model: result.model,\n };\n}\n\nexport function resolveFallbackCandidates(params: {\n cfg: Config | undefined;\n provider: string;\n model: string;\n fallbacksOverride?: string[];\n}): ModelCandidate[] {\n const { cfg, provider: inputProvider, model: inputModel, fallbacksOverride } = params;\n\n const modelConfig = cfg?.agents?.defaults?.models?.chat;\n const primaryRef = modelConfig?.primary;\n const fallbacks = fallbacksOverride ?? modelConfig?.fallbacks;\n\n const defaultParts = getDefaultModelParts(cfg);\n const primaryResolved = parseModelRef(primaryRef || getDefaultModelSync(cfg));\n const provider = inputProvider.trim() || primaryResolved?.provider || defaultParts.provider;\n const model = inputModel.trim() || primaryResolved?.model || defaultParts.model;\n\n const candidates: ModelCandidate[] = [];\n const seen = new Set<string>();\n\n const addCandidate = (c: ModelCandidate) => {\n const key = `${c.provider}/${c.model}`.toLowerCase();\n if (seen.has(key)) return;\n // Skip providers that are not configured (no API key)\n if (!isProviderConfiguredSync(c.provider)) return;\n seen.add(key);\n candidates.push(c);\n };\n\n addCandidate({ provider, model });\n\n if (fallbacks) {\n for (const fb of fallbacks) {\n const resolved = parseModelRef(fb, provider);\n if (resolved) addCandidate(resolved);\n }\n }\n\n if (!fallbacksOverride && primaryResolved) {\n addCandidate(primaryResolved);\n }\n\n return candidates;\n}\n"],"mappings":";;;gBACoE;AAmBpE,SAAS,qBAAqB,QAAsD;CAElF,MAAM,QADe,oBAAoB,OACf,CAAC,MAAM,IAAI;AACrC,QAAO;EACL,UAAU,MAAM,MAAM;EACtB,OAAO,MAAM,MAAM;EACpB;;;;;;AAOH,SAAS,cAAc,KAAa,iBAAiD;CACnF,MAAM,SAASA,gBAAkB,KAAK,gBAAgB;AACtD,KAAI,CAAC,OAAQ,QAAO;AACpB,QAAO;EACL,UAAU,oBAAoB,OAAO,SAAS;EAC9C,OAAO,OAAO;EACf;;AAGH,SAAgB,0BAA0B,QAKrB;CACnB,MAAM,EAAE,KAAK,UAAU,eAAe,OAAO,YAAY,sBAAsB;CAE/E,MAAM,cAAc,KAAK,QAAQ,UAAU,QAAQ;CACnD,MAAM,aAAa,aAAa;CAChC,MAAM,YAAY,qBAAqB,aAAa;CAEpD,MAAM,eAAe,qBAAqB,IAAI;CAC9C,MAAM,kBAAkB,cAAc,cAAc,oBAAoB,IAAI,CAAC;CAC7E,MAAM,WAAW,cAAc,MAAM,IAAI,iBAAiB,YAAY,aAAa;CACnF,MAAM,QAAQ,WAAW,MAAM,IAAI,iBAAiB,SAAS,aAAa;CAE1E,MAAM,aAA+B,EAAE;CACvC,MAAM,uBAAO,IAAI,KAAa;CAE9B,MAAM,gBAAgB,MAAsB;EAC1C,MAAM,MAAM,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,aAAa;AACpD,MAAI,KAAK,IAAI,IAAI,CAAE;AAEnB,MAAI,CAAC,yBAAyB,EAAE,SAAS,CAAE;AAC3C,OAAK,IAAI,IAAI;AACb,aAAW,KAAK,EAAE;;AAGpB,cAAa;EAAE;EAAU;EAAO,CAAC;AAEjC,KAAI,UACF,MAAK,MAAM,MAAM,WAAW;EAC1B,MAAM,WAAW,cAAc,IAAI,SAAS;AAC5C,MAAI,SAAU,cAAa,SAAS;;AAIxC,KAAI,CAAC,qBAAqB,gBACxB,cAAa,gBAAgB;AAG/B,QAAO"}
@@ -49,7 +49,7 @@ async function readImageBase64FromRef(ref) {
49
49
  const loaded = await readMediaReferenceBase64(ref.uri, VISION_INLINE_MAX_BYTES);
50
50
  return {
51
51
  data: loaded.data,
52
- mimeType: ref.mimeType?.startsWith("image/") ? ref.mimeType : loaded.mimeType
52
+ mimeType: ref.mimeType || loaded.mimeType
53
53
  };
54
54
  }
55
55
  function appendMediaAttachedLines(textParts, media) {
@@ -80,7 +80,7 @@ async function buildTranscriptUserMessage(opts) {
80
80
  const textParts = [];
81
81
  if (expandedText) textParts.push(expandedText);
82
82
  const strategy = resolveImageHandlingStrategy(opts.modelRef);
83
- if (strategy !== "native") appendMediaAttachedLines(textParts, prepared.filter((m) => !isImageInboundAttachment(m)));
83
+ appendMediaAttachedLines(textParts, prepared.filter((m) => !isImageInboundAttachment(m)));
84
84
  if (imageRefs.length > 0 && strategy !== "native") {
85
85
  const images = await Promise.all(imageRefs.map((ref) => readImageBase64FromRef(ref)));
86
86
  const parts = await resolveInboundImageContentParts({