@xopcai/xopc 0.0.118 → 0.0.119

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 (468) hide show
  1. package/README.md +2 -1
  2. package/README.zh-CN.md +2 -1
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-dzUrQoeZ.js → agent-avatar-dicebear-CU8J6zou.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-B0hkpLhP.js +2 -0
  7. package/dist/gateway/static/root/assets/app-management-settings-panel-B9vfYoEr.js +1 -0
  8. package/dist/gateway/static/root/assets/appearance-settings-ClOzIO24.js +1 -0
  9. package/dist/gateway/static/root/assets/{apps-page--wMEL00f.js → apps-page-DU0dz9Zo.js} +1 -1
  10. package/dist/gateway/static/root/assets/{archive-plugin-Cki4SfU2.js → archive-plugin-BkVIgZzA.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-D-KnS2Do.js → attachment-load-CaCMWh1D.js} +1 -1
  12. package/dist/gateway/static/root/assets/automation-suggestion-card-DhGDpKP3.js +1 -0
  13. package/dist/gateway/static/root/assets/automations-page-CTedroVo.js +1 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-D2sgvJja.js → binary-plugins-B4TO_bsn.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-DIq-4Gvb.js → block-editor-DJRWwWNI.js} +28 -28
  16. package/dist/gateway/static/root/assets/browser-settings-page-FCDwOOBK.js +8 -0
  17. package/dist/gateway/static/root/assets/capability-presets-api-Befi89CL.js +1 -0
  18. package/dist/gateway/static/root/assets/capability-presets-settings-panel-_G8eb2vJ.js +1 -0
  19. package/dist/gateway/static/root/assets/channel-recipient-api-BNSuJb5f.js +1 -0
  20. package/dist/gateway/static/root/assets/channels-settings-C3d5JBJX.js +1 -0
  21. package/dist/gateway/static/root/assets/cn-BQ_8x0bT.js +1 -0
  22. package/dist/gateway/static/root/assets/connectors-page-yaUNvt5u.js +2 -0
  23. package/dist/gateway/static/root/assets/cron-expression-B3B1eqnr.js +2 -0
  24. package/dist/gateway/static/root/assets/dreaming-settings-DNrdg1Ve.js +1 -0
  25. package/dist/gateway/static/root/assets/{extension-debug-page-DYu1KaFQ.js → extension-debug-page-DYh402XV.js} +1 -1
  26. package/dist/gateway/static/root/assets/{extension-page-B3W6QwlZ.js → extension-page-Cr_TizrN.js} +1 -1
  27. package/dist/gateway/static/root/assets/{extension-settings-page-D7VQ-cxE.js → extension-settings-page-BU1KoKRj.js} +1 -1
  28. package/dist/gateway/static/root/assets/{fetch-B7xDPu-R.js → fetch-Y7AEX4H3.js} +1 -1
  29. package/dist/gateway/static/root/assets/format-cron-label-arqgGlVV.js +1 -0
  30. package/dist/gateway/static/root/assets/{gateway-config-api-BTBLSeUu.js → gateway-config-api-RbMmAOpX.js} +1 -1
  31. package/dist/gateway/static/root/assets/gateway-settings-C79wkXef.js +1 -0
  32. package/dist/gateway/static/root/assets/{gateway-startup-retry-CYj9FWCp.js → gateway-startup-retry-DiD_Tx4N.js} +1 -1
  33. package/dist/gateway/static/root/assets/goal-detail-page-9paXuHdo.js +1 -0
  34. package/dist/gateway/static/root/assets/{goals-config-api-CQQgzPr3.js → goals-config-api-DqxVi0p5.js} +1 -1
  35. package/dist/gateway/static/root/assets/{goals-page-BHitvJAv.js → goals-page-CS0R-Af2.js} +2 -2
  36. package/dist/gateway/static/root/assets/goals-settings-CSuzZ8Ae.js +1 -0
  37. package/dist/gateway/static/root/assets/heartbeat-settings-DXPaYJm3.js +1 -0
  38. package/dist/gateway/static/root/assets/index-BoKafJIZ.js +191 -0
  39. package/dist/gateway/static/root/assets/index-CArhCcYn.css +1 -0
  40. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-Dvg53qnd.js +1 -0
  41. package/dist/gateway/static/root/assets/{logs-page-C2Uqvae9.js → logs-page-DLXPcksQ.js} +2 -2
  42. package/dist/gateway/static/root/assets/{markdown-split-BwOFrJ2E.js → markdown-split-CpHxbtWJ.js} +1 -1
  43. package/dist/gateway/static/root/assets/{media-plugins-Cnz6Q5G6.js → media-plugins-SFPQRSxq.js} +1 -1
  44. package/dist/gateway/static/root/assets/messages-CrDHEbss.js +3 -0
  45. package/dist/gateway/static/root/assets/models-hub-panel-BDF2iyRk.js +2 -0
  46. package/dist/gateway/static/root/assets/note-detail-page-CSb_hwig.js +2 -0
  47. package/dist/gateway/static/root/assets/{note-image-lightbox-B-Svpmza.js → note-image-lightbox-BUYURRgn.js} +1 -1
  48. package/dist/gateway/static/root/assets/notes-page-BsIBSFyZ.js +1 -0
  49. package/dist/gateway/static/root/assets/{preview-open-alternatives-Bss4TiwP.js → preview-open-alternatives-BHz9iWYA.js} +1 -1
  50. package/dist/gateway/static/root/assets/remote-access-hub-CwzSovcS.js +1 -0
  51. package/dist/gateway/static/root/assets/{save-bar-controls-BRNjdgKq.js → save-bar-controls-CefkOlRg.js} +1 -1
  52. package/dist/gateway/static/root/assets/schedule-field-CmTRoOcE.js +1 -0
  53. package/dist/gateway/static/root/assets/{schema-form-Dub9sy8r.js → schema-form-FMKv1vGu.js} +1 -1
  54. package/dist/gateway/static/root/assets/sessions-page-PHmX-NmA.js +1 -0
  55. package/dist/gateway/static/root/assets/settings-advanced-gate-BRAeKJN4.js +1 -0
  56. package/dist/gateway/static/root/assets/{settings-collapsible-section-BeFLavGi.js → settings-collapsible-section-BouO6JTi.js} +1 -1
  57. package/dist/gateway/static/root/assets/{settings-form-section-dmyaPOTG.js → settings-form-section-D-4lBl6X.js} +1 -1
  58. package/dist/gateway/static/root/assets/settings-page-KKrbFjy8.js +1 -0
  59. package/dist/gateway/static/root/assets/settings-page-layout-BJ4Gsef5.js +1 -0
  60. package/dist/gateway/static/root/assets/setup-status-panel-CrUjHPQo.js +1 -0
  61. package/dist/gateway/static/root/assets/{share-preview-page-C8glrdqe.js → share-preview-page-BDy2btRN.js} +1 -1
  62. package/dist/gateway/static/root/assets/shares-settings-B18OBmH5.js +1 -0
  63. package/dist/gateway/static/root/assets/skill-reload-api-C28-2uKQ.js +1 -0
  64. package/dist/gateway/static/root/assets/skills-page-Bm2ebkwl.js +2 -0
  65. package/dist/gateway/static/root/assets/system-settings-panel-CRngrlnZ.js +1 -0
  66. package/dist/gateway/static/root/assets/typed-models-lib-BltBc0b-.js +1 -0
  67. package/dist/gateway/static/root/assets/{use-channel-catalog-DqlWTsDb.js → use-channel-catalog-CjN-51e6.js} +1 -1
  68. package/dist/gateway/static/root/assets/user-profile-settings-panel-DJ1dKwZy.js +1 -0
  69. package/dist/gateway/static/root/assets/utils-B5M5-YvK.js +1 -0
  70. package/dist/gateway/static/root/assets/{voice-api-key-field-C73IVZeC.js → voice-api-key-field-CeEevm7z.js} +1 -1
  71. package/dist/gateway/static/root/assets/{voice-player-store-C_ArLJPM.js → voice-player-store-B7ykUlHM.js} +1 -1
  72. package/dist/gateway/static/root/assets/workflow-run-setup-panel-C4PzUQjB.js +3 -0
  73. package/dist/gateway/static/root/assets/workflows-page-BL84_-Ky.js +18 -0
  74. package/dist/gateway/static/root/index.html +6 -7
  75. package/dist/package.js +1 -1
  76. package/dist/src/agent/agent-manager.d.ts +4 -5
  77. package/dist/src/agent/agent-manager.js +4 -8
  78. package/dist/src/agent/agent-manager.js.map +1 -1
  79. package/dist/src/agent/embedded/run-for-session.js +102 -14
  80. package/dist/src/agent/embedded/run-for-session.js.map +1 -1
  81. package/dist/src/agent/fallback/candidates.d.ts +0 -8
  82. package/dist/src/agent/fallback/candidates.js.map +1 -1
  83. package/dist/src/agent/index.js +1 -1
  84. package/dist/src/agent/lifecycle/handlers/compaction.d.ts +1 -3
  85. package/dist/src/agent/lifecycle/handlers/compaction.js +1 -16
  86. package/dist/src/agent/lifecycle/handlers/compaction.js.map +1 -1
  87. package/dist/src/agent/lifecycle/progress.d.ts +0 -1
  88. package/dist/src/agent/lifecycle/progress.js +1 -6
  89. package/dist/src/agent/lifecycle/progress.js.map +1 -1
  90. package/dist/src/agent/lifecycle/timeout-wrapper.d.ts +1 -2
  91. package/dist/src/agent/lifecycle/timeout-wrapper.js +1 -7
  92. package/dist/src/agent/lifecycle/timeout-wrapper.js.map +1 -1
  93. package/dist/src/agent/middleware/self-verify.d.ts +0 -1
  94. package/dist/src/agent/middleware/self-verify.js +0 -2
  95. package/dist/src/agent/middleware/self-verify.js.map +1 -1
  96. package/dist/src/agent/models/index.d.ts +1 -1
  97. package/dist/src/agent/models/manager.d.ts +4 -20
  98. package/dist/src/agent/models/manager.js +9 -126
  99. package/dist/src/agent/models/manager.js.map +1 -1
  100. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +0 -4
  101. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -9
  102. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  103. package/dist/src/agent/prompt/sections/tooling.js +2 -2
  104. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  105. package/dist/src/agent/prompt/service-prompt-builder.d.ts +0 -1
  106. package/dist/src/agent/prompt/service-prompt-builder.js +0 -12
  107. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  108. package/dist/src/agent/prompt/subagent-context.js +1 -1
  109. package/dist/src/agent/prompt/subagent-context.js.map +1 -1
  110. package/dist/src/agent/prompt/types.d.ts +1 -1
  111. package/dist/src/agent/service.d.ts +1 -9
  112. package/dist/src/agent/service.js +3 -40
  113. package/dist/src/agent/service.js.map +1 -1
  114. package/dist/src/agent/service.types.d.ts +2 -2
  115. package/dist/src/agent/session/session-config-service.d.ts +11 -11
  116. package/dist/src/agent/session/session-config-service.js +14 -14
  117. package/dist/src/agent/session/session-config-service.js.map +1 -1
  118. package/dist/src/agent/session/session-inspector.js +3 -2
  119. package/dist/src/agent/session/session-inspector.js.map +1 -1
  120. package/dist/src/agent/starter-agents.js +12 -12
  121. package/dist/src/agent/starter-agents.js.map +1 -1
  122. package/dist/src/agent/tools/automation-tool.d.ts +14 -0
  123. package/dist/src/agent/tools/automation-tool.js +102 -0
  124. package/dist/src/agent/tools/automation-tool.js.map +1 -0
  125. package/dist/src/agent/tools/delegate-tool.js +1 -1
  126. package/dist/src/agent/tools/delegate-tool.js.map +1 -1
  127. package/dist/src/agent/tools/factory.d.ts +3 -3
  128. package/dist/src/agent/tools/factory.js +2 -2
  129. package/dist/src/agent/tools/factory.js.map +1 -1
  130. package/dist/src/agent/tools/index.d.ts +1 -1
  131. package/dist/src/agent/tools/index.js +2 -2
  132. package/dist/src/agent-manifest/resolver.d.ts +1 -0
  133. package/dist/src/agent-manifest/resolver.js +1 -0
  134. package/dist/src/agent-manifest/resolver.js.map +1 -1
  135. package/dist/src/agent-manifest/schema.d.ts +6 -0
  136. package/dist/src/agent-manifest/schema.js +12 -3
  137. package/dist/src/agent-manifest/schema.js.map +1 -1
  138. package/dist/src/ai-assist/text-assist.d.ts +1 -1
  139. package/dist/src/ai-assist/text-assist.js +56 -0
  140. package/dist/src/ai-assist/text-assist.js.map +1 -1
  141. package/dist/src/auth/profiles/store.js.map +1 -1
  142. package/dist/src/automations/api/routes.d.ts +3 -0
  143. package/dist/src/automations/api/routes.js +193 -0
  144. package/dist/src/automations/api/routes.js.map +1 -0
  145. package/dist/src/automations/domain/index.d.ts +3 -0
  146. package/dist/src/automations/domain/index.js +3 -0
  147. package/dist/src/automations/domain/schedule.d.ts +4 -0
  148. package/dist/src/automations/domain/schedule.js +37 -0
  149. package/dist/src/automations/domain/schedule.js.map +1 -0
  150. package/dist/src/automations/domain/types.d.ts +160 -0
  151. package/dist/src/automations/domain/validation.d.ts +370 -0
  152. package/dist/src/automations/domain/validation.js +149 -0
  153. package/dist/src/automations/domain/validation.js.map +1 -0
  154. package/dist/src/automations/draft/automation-draft-prompt.d.ts +26 -0
  155. package/dist/src/automations/draft/automation-draft-prompt.js +127 -0
  156. package/dist/src/automations/draft/automation-draft-prompt.js.map +1 -0
  157. package/dist/src/automations/draft/automation-draft-service.d.ts +12 -0
  158. package/dist/src/automations/draft/automation-draft-service.js +135 -0
  159. package/dist/src/automations/draft/automation-draft-service.js.map +1 -0
  160. package/dist/src/automations/draft/automation-draft-validator.d.ts +99 -0
  161. package/dist/src/automations/draft/automation-draft-validator.js +105 -0
  162. package/dist/src/automations/draft/automation-draft-validator.js.map +1 -0
  163. package/dist/src/automations/draft/automation-draft.types.d.ts +40 -0
  164. package/dist/src/automations/draft/index.d.ts +3 -0
  165. package/dist/src/automations/draft/index.js +3 -0
  166. package/dist/src/automations/index.d.ts +3 -0
  167. package/dist/src/automations/index.js +8 -0
  168. package/dist/src/automations/product-events.d.ts +5 -0
  169. package/dist/src/automations/product-events.js +21 -0
  170. package/dist/src/automations/product-events.js.map +1 -0
  171. package/dist/src/automations/service/action-executor.d.ts +9 -0
  172. package/dist/src/automations/service/action-executor.js +157 -0
  173. package/dist/src/automations/service/action-executor.js.map +1 -0
  174. package/dist/src/automations/service/automation-service.d.ts +54 -0
  175. package/dist/src/automations/service/automation-service.js +404 -0
  176. package/dist/src/automations/service/automation-service.js.map +1 -0
  177. package/dist/src/automations/service/index.d.ts +2 -0
  178. package/dist/src/automations/service/index.js +3 -0
  179. package/dist/src/automations/storage/automation-repository.d.ts +6 -0
  180. package/dist/src/automations/storage/automation-repository.js +61 -0
  181. package/dist/src/automations/storage/automation-repository.js.map +1 -0
  182. package/dist/src/automations/storage/automation-run-repository.d.ts +17 -0
  183. package/dist/src/automations/storage/automation-run-repository.js +130 -0
  184. package/dist/src/automations/storage/automation-run-repository.js.map +1 -0
  185. package/dist/src/automations/storage/index.d.ts +2 -0
  186. package/dist/src/automations/storage/index.js +3 -0
  187. package/dist/src/channels/plugin-types.d.ts +3 -0
  188. package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
  189. package/dist/src/cli/command-catalog.js +0 -39
  190. package/dist/src/cli/command-catalog.js.map +1 -1
  191. package/dist/src/cli/command-loaders.js +0 -1
  192. package/dist/src/cli/command-loaders.js.map +1 -1
  193. package/dist/src/cli/command-manifest.js +0 -4
  194. package/dist/src/cli/command-manifest.js.map +1 -1
  195. package/dist/src/cli/commands/agents.js +7 -6
  196. package/dist/src/cli/commands/agents.js.map +1 -1
  197. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  198. package/dist/src/cli/commands/doctor/checks/{cron-health.d.ts → migrations.d.ts} +1 -1
  199. package/dist/src/cli/commands/doctor/checks/migrations.js +40 -0
  200. package/dist/src/cli/commands/doctor/checks/migrations.js.map +1 -0
  201. package/dist/src/cli/commands/doctor/flow.js +2 -2
  202. package/dist/src/cli/commands/doctor/flow.js.map +1 -1
  203. package/dist/src/cli/commands/gateway/call.js +2 -2
  204. package/dist/src/cli/commands/gateway/call.js.map +1 -1
  205. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  206. package/dist/src/cli/commands/gateway/run-foreground.js +4 -2
  207. package/dist/src/cli/commands/gateway/run-foreground.js.map +1 -1
  208. package/dist/src/cli/commands/init.js +26 -8
  209. package/dist/src/cli/commands/init.js.map +1 -1
  210. package/dist/src/cli/commands/tui.js +24 -2
  211. package/dist/src/cli/commands/tui.js.map +1 -1
  212. package/dist/src/cli/utils/init-workspace-core.js +2 -0
  213. package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
  214. package/dist/src/commands/agents.config.d.ts +9 -0
  215. package/dist/src/commands/agents.config.js +40 -2
  216. package/dist/src/commands/agents.config.js.map +1 -1
  217. package/dist/src/config/agent-profile.js +4 -3
  218. package/dist/src/config/agent-profile.js.map +1 -1
  219. package/dist/src/config/agent-typed-models.js.map +1 -1
  220. package/dist/src/config/config-surface.d.ts +3 -0
  221. package/dist/src/config/index.d.ts +0 -1
  222. package/dist/src/config/index.js +3 -3
  223. package/dist/src/config/index.js.map +1 -1
  224. package/dist/src/config/paths.d.ts +0 -9
  225. package/dist/src/config/paths.js +1 -14
  226. package/dist/src/config/paths.js.map +1 -1
  227. package/dist/src/config/profile.js +0 -1
  228. package/dist/src/config/profile.js.map +1 -1
  229. package/dist/src/config/rules.js +0 -5
  230. package/dist/src/config/rules.js.map +1 -1
  231. package/dist/src/config/schema.d.ts +13 -12
  232. package/dist/src/config/schema.js +22 -26
  233. package/dist/src/config/schema.js.map +1 -1
  234. package/dist/src/config/web-patch.d.ts +0 -12
  235. package/dist/src/config/web-patch.js +2 -29
  236. package/dist/src/config/web-patch.js.map +1 -1
  237. package/dist/src/extensions/api.d.ts +2 -0
  238. package/dist/src/extensions/api.js +10 -0
  239. package/dist/src/extensions/api.js.map +1 -1
  240. package/dist/src/extensions/extension-registry-impl.d.ts +4 -1
  241. package/dist/src/extensions/extension-registry-impl.js +8 -0
  242. package/dist/src/extensions/extension-registry-impl.js.map +1 -1
  243. package/dist/src/extensions/loader.d.ts +3 -3
  244. package/dist/src/extensions/loader.js +3 -3
  245. package/dist/src/extensions/loader.js.map +1 -1
  246. package/dist/src/extensions/sdk/testing.d.ts +2 -0
  247. package/dist/src/extensions/sdk/testing.js +7 -0
  248. package/dist/src/extensions/sdk/testing.js.map +1 -1
  249. package/dist/src/extensions/types/core.d.ts +10 -1
  250. package/dist/src/extensions/types/index.d.ts +1 -1
  251. package/dist/src/extensions/types/{phase4.d.ts → registration.d.ts} +2 -2
  252. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  253. package/dist/src/gateway/agent-builtin-tools.js +1 -1
  254. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  255. package/dist/src/gateway/agents-admin.d.ts +1 -0
  256. package/dist/src/gateway/agents-admin.js +13 -15
  257. package/dist/src/gateway/agents-admin.js.map +1 -1
  258. package/dist/src/gateway/capability-presets-admin.d.ts +1 -0
  259. package/dist/src/gateway/capability-presets-admin.js +19 -10
  260. package/dist/src/gateway/capability-presets-admin.js.map +1 -1
  261. package/dist/src/gateway/dreaming-automation-reconciler.d.ts +11 -0
  262. package/dist/src/gateway/dreaming-automation-reconciler.js +105 -0
  263. package/dist/src/gateway/dreaming-automation-reconciler.js.map +1 -0
  264. package/dist/src/gateway/heartbeat/service.d.ts +0 -2
  265. package/dist/src/gateway/heartbeat/service.js +0 -7
  266. package/dist/src/gateway/heartbeat/service.js.map +1 -1
  267. package/dist/src/gateway/hono/lib/config-payload.d.ts +5 -6
  268. package/dist/src/gateway/hono/lib/config-payload.js +2 -2
  269. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  270. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  271. package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +1 -1
  272. package/dist/src/gateway/hono/routes/config-patch/misc.js +12 -6
  273. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  274. package/dist/src/gateway/hono/routes/dreaming.js +27 -37
  275. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
  276. package/dist/src/gateway/hono/routes/home.d.ts +2 -2
  277. package/dist/src/gateway/hono/routes/home.js +34 -25
  278. package/dist/src/gateway/hono/routes/home.js.map +1 -1
  279. package/dist/src/gateway/hono/routes/lazy-bundles.js +10 -6
  280. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  281. package/dist/src/gateway/hono/routes/migrations.d.ts +3 -0
  282. package/dist/src/gateway/hono/routes/migrations.js +35 -0
  283. package/dist/src/gateway/hono/routes/migrations.js.map +1 -0
  284. package/dist/src/gateway/hono/routes/public-gateway.js +2 -1
  285. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  286. package/dist/src/gateway/hono/routes/sessions.js +14 -0
  287. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  288. package/dist/src/gateway/run-loop.js +2 -0
  289. package/dist/src/gateway/run-loop.js.map +1 -1
  290. package/dist/src/gateway/security/operator-scopes.js +5 -1
  291. package/dist/src/gateway/security/operator-scopes.js.map +1 -1
  292. package/dist/src/gateway/service/config-coordinator.d.ts +4 -4
  293. package/dist/src/gateway/service/config-coordinator.js +14 -8
  294. package/dist/src/gateway/service/config-coordinator.js.map +1 -1
  295. package/dist/src/gateway/service/sessions-api.d.ts +2 -1
  296. package/dist/src/gateway/service/sessions-api.js +6 -1
  297. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  298. package/dist/src/gateway/service.d.ts +7 -3
  299. package/dist/src/gateway/service.js +61 -27
  300. package/dist/src/gateway/service.js.map +1 -1
  301. package/dist/src/goals/goal-service.js +45 -4
  302. package/dist/src/goals/goal-service.js.map +1 -1
  303. package/dist/src/infra/update-restart.js +1 -1
  304. package/dist/src/migrations/config/default-capability-preset.d.ts +10 -0
  305. package/dist/src/migrations/config/default-capability-preset.js +135 -0
  306. package/dist/src/migrations/config/default-capability-preset.js.map +1 -0
  307. package/dist/src/migrations/index.d.ts +4 -0
  308. package/dist/src/migrations/index.js +4 -0
  309. package/dist/src/migrations/registry.d.ts +8 -0
  310. package/dist/src/migrations/registry.js +18 -0
  311. package/dist/src/migrations/registry.js.map +1 -0
  312. package/dist/src/migrations/runner.d.ts +17 -0
  313. package/dist/src/migrations/runner.js +191 -0
  314. package/dist/src/migrations/runner.js.map +1 -0
  315. package/dist/src/migrations/types.d.ts +34 -0
  316. package/dist/src/notes/service.js +24 -1
  317. package/dist/src/notes/service.js.map +1 -1
  318. package/dist/src/providers/model-registry.d.ts +0 -1
  319. package/dist/src/providers/model-registry.js +0 -3
  320. package/dist/src/providers/model-registry.js.map +1 -1
  321. package/dist/src/routing/resolve-tui-session-key.d.ts +3 -0
  322. package/dist/src/routing/resolve-tui-session-key.js +14 -3
  323. package/dist/src/routing/resolve-tui-session-key.js.map +1 -1
  324. package/dist/src/session/transcript-outline.d.ts +47 -0
  325. package/dist/src/session/transcript-outline.js +481 -0
  326. package/dist/src/session/transcript-outline.js.map +1 -0
  327. package/dist/src/storage/sqlite/index.d.ts +0 -2
  328. package/dist/src/storage/sqlite/index.js +1 -3
  329. package/dist/src/storage/sqlite/migrations/016_automations.sql +47 -0
  330. package/dist/src/storage/sqlite/migrations/017_automation_run_events.sql +14 -0
  331. package/dist/src/storage/sqlite/migrations/018_automation_safety.sql +1 -0
  332. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  333. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  334. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  335. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  336. package/dist/src/storage/sqlite/schema.js +1 -1
  337. package/dist/src/storage/sqlite/schema.sql +56 -46
  338. package/dist/src/tui/backends/embedded-backend.d.ts +6 -0
  339. package/dist/src/tui/backends/embedded-backend.js +18 -7
  340. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  341. package/dist/src/tui/backends/gateway-sse-backend.d.ts +3 -0
  342. package/dist/src/tui/backends/gateway-sse-backend.js +14 -0
  343. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  344. package/dist/src/tui/tui-backend.d.ts +4 -0
  345. package/dist/src/tui/tui-commands.d.ts +5 -0
  346. package/dist/src/tui/tui-commands.js +43 -0
  347. package/dist/src/tui/tui-commands.js.map +1 -1
  348. package/dist/src/tui/tui-transcript-tree.d.ts +1 -1
  349. package/dist/src/tui/tui-transcript-tree.js +17 -257
  350. package/dist/src/tui/tui-transcript-tree.js.map +1 -1
  351. package/dist/src/tui/tui-types.d.ts +2 -0
  352. package/dist/src/tui/tui-types.js.map +1 -1
  353. package/dist/src/tui/tui.js +7 -2
  354. package/dist/src/tui/tui.js.map +1 -1
  355. package/dist/src/workflows/domain/index.js +1 -1
  356. package/dist/src/workflows/domain/run.d.ts +7 -7
  357. package/dist/src/workflows/domain/run.js.map +1 -1
  358. package/dist/src/workflows/index.js +2 -2
  359. package/dist/src/workflows/service/workflow-run-service.d.ts +2 -0
  360. package/dist/src/workflows/service/workflow-run-service.js +31 -9
  361. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  362. package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -1
  363. package/package.json +4 -2
  364. package/dist/gateway/static/root/assets/agents-BCxZbkOw.js +0 -2
  365. package/dist/gateway/static/root/assets/app-management-settings-panel-bxYJVJpx.js +0 -1
  366. package/dist/gateway/static/root/assets/appearance-settings-BCIykXlI.js +0 -1
  367. package/dist/gateway/static/root/assets/browser-settings-page-DRhKdn81.js +0 -8
  368. package/dist/gateway/static/root/assets/capability-presets-api-CorhiHlg.js +0 -1
  369. package/dist/gateway/static/root/assets/capability-presets-settings-panel-qFx9Jtce.js +0 -1
  370. package/dist/gateway/static/root/assets/channels-settings-BAwAkqIA.js +0 -1
  371. package/dist/gateway/static/root/assets/cn-JdwAhgNB.js +0 -1
  372. package/dist/gateway/static/root/assets/connectors-page-BQLcfitM.js +0 -2
  373. package/dist/gateway/static/root/assets/createLucideIcon-DPHK1VkS.js +0 -1
  374. package/dist/gateway/static/root/assets/cron-api-qGwmL-24.js +0 -1
  375. package/dist/gateway/static/root/assets/cron-dreaming-jobs-nCMWCf0p.js +0 -1
  376. package/dist/gateway/static/root/assets/cron-page-BBWMAj8-.js +0 -3
  377. package/dist/gateway/static/root/assets/dreaming-settings-Dw89Obml.js +0 -1
  378. package/dist/gateway/static/root/assets/format-cron-label-BsotZDO5.js +0 -2
  379. package/dist/gateway/static/root/assets/format-interval-label-BzxafKxR.js +0 -1
  380. package/dist/gateway/static/root/assets/gateway-settings-Cmwy58rS.js +0 -1
  381. package/dist/gateway/static/root/assets/goal-detail-page-l7mu5GWX.js +0 -1
  382. package/dist/gateway/static/root/assets/goals-settings-CYVY4NGp.js +0 -1
  383. package/dist/gateway/static/root/assets/heartbeat-config-api-DriO_CN9.js +0 -1
  384. package/dist/gateway/static/root/assets/heartbeat-settings-CUQTKxg7.js +0 -1
  385. package/dist/gateway/static/root/assets/index-C17Tsd_b.css +0 -1
  386. package/dist/gateway/static/root/assets/index-Cc41r16l.js +0 -191
  387. package/dist/gateway/static/root/assets/interval-presets-DFPCKW_W.js +0 -1
  388. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-CcVcqstx.js +0 -1
  389. package/dist/gateway/static/root/assets/messages-B1iSKjiw.js +0 -3
  390. package/dist/gateway/static/root/assets/models-hub-panel-BfLfcta8.js +0 -2
  391. package/dist/gateway/static/root/assets/note-detail-page-BjwOQBfT.js +0 -2
  392. package/dist/gateway/static/root/assets/notes-page-DktdBiwB.js +0 -1
  393. package/dist/gateway/static/root/assets/remote-access-hub-rfVx96fq.js +0 -1
  394. package/dist/gateway/static/root/assets/schedule-field-CUCKODde.js +0 -1
  395. package/dist/gateway/static/root/assets/sessions-page-DbtMFuuH.js +0 -1
  396. package/dist/gateway/static/root/assets/settings-advanced-gate-5re5gAnP.js +0 -1
  397. package/dist/gateway/static/root/assets/settings-page-D-WMyLlj.js +0 -1
  398. package/dist/gateway/static/root/assets/setup-status-panel-Cl-DEJAU.js +0 -1
  399. package/dist/gateway/static/root/assets/shares-settings-CyPVvbLt.js +0 -1
  400. package/dist/gateway/static/root/assets/skill-reload-api-CleTH1oz.js +0 -1
  401. package/dist/gateway/static/root/assets/skills-page-Ck8hdXqR.js +0 -2
  402. package/dist/gateway/static/root/assets/system-settings-panel-DI-LN_8G.js +0 -1
  403. package/dist/gateway/static/root/assets/typed-models-lib-kX9duch4.js +0 -1
  404. package/dist/gateway/static/root/assets/user-profile-settings-panel-B-UFPMXy.js +0 -1
  405. package/dist/gateway/static/root/assets/utils-Dm0hKalR.js +0 -1
  406. package/dist/gateway/static/root/assets/workflows-page-BtFGp2y_.js +0 -18
  407. package/dist/src/agent/fallback/error.d.ts +0 -22
  408. package/dist/src/agent/fallback/error.js +0 -32
  409. package/dist/src/agent/fallback/error.js.map +0 -1
  410. package/dist/src/agent/fallback/index.d.ts +0 -5
  411. package/dist/src/agent/fallback/index.js +0 -9
  412. package/dist/src/agent/fallback/index.js.map +0 -1
  413. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +0 -29
  414. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +0 -76
  415. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +0 -1
  416. package/dist/src/agent/service/reconcile-dreaming-cron.d.ts +0 -6
  417. package/dist/src/agent/service/reconcile-dreaming-cron.js +0 -84
  418. package/dist/src/agent/service/reconcile-dreaming-cron.js.map +0 -1
  419. package/dist/src/agent/tools/cronjob-tool.d.ts +0 -29
  420. package/dist/src/agent/tools/cronjob-tool.js +0 -274
  421. package/dist/src/agent/tools/cronjob-tool.js.map +0 -1
  422. package/dist/src/cli/commands/cron-cli.d.ts +0 -2
  423. package/dist/src/cli/commands/cron-cli.js +0 -15
  424. package/dist/src/cli/commands/cron-cli.js.map +0 -1
  425. package/dist/src/cli/commands/cron.d.ts +0 -4
  426. package/dist/src/cli/commands/cron.js +0 -188
  427. package/dist/src/cli/commands/cron.js.map +0 -1
  428. package/dist/src/cli/commands/doctor/checks/cron-health.js +0 -35
  429. package/dist/src/cli/commands/doctor/checks/cron-health.js.map +0 -1
  430. package/dist/src/cron/execution-types.d.ts +0 -42
  431. package/dist/src/cron/executor.d.ts +0 -67
  432. package/dist/src/cron/executor.js +0 -669
  433. package/dist/src/cron/executor.js.map +0 -1
  434. package/dist/src/cron/index.d.ts +0 -7
  435. package/dist/src/cron/index.js +0 -7
  436. package/dist/src/cron/job-content.d.ts +0 -5
  437. package/dist/src/cron/job-content.js +0 -15
  438. package/dist/src/cron/job-content.js.map +0 -1
  439. package/dist/src/cron/run-log-store.d.ts +0 -12
  440. package/dist/src/cron/run-log-store.js +0 -58
  441. package/dist/src/cron/run-log-store.js.map +0 -1
  442. package/dist/src/cron/schedule.d.ts +0 -10
  443. package/dist/src/cron/schedule.js +0 -85
  444. package/dist/src/cron/schedule.js.map +0 -1
  445. package/dist/src/cron/service.d.ts +0 -58
  446. package/dist/src/cron/service.js +0 -419
  447. package/dist/src/cron/service.js.map +0 -1
  448. package/dist/src/cron/types.d.ts +0 -183
  449. package/dist/src/cron/validation.d.ts +0 -500
  450. package/dist/src/cron/validation.js +0 -192
  451. package/dist/src/cron/validation.js.map +0 -1
  452. package/dist/src/cron/workflow-run-completion.d.ts +0 -23
  453. package/dist/src/cron/workflow-run-completion.js +0 -72
  454. package/dist/src/cron/workflow-run-completion.js.map +0 -1
  455. package/dist/src/extensions/types/phase4.js +0 -1
  456. package/dist/src/gateway/hono/routes/cron.d.ts +0 -3
  457. package/dist/src/gateway/hono/routes/cron.js +0 -109
  458. package/dist/src/gateway/hono/routes/cron.js.map +0 -1
  459. package/dist/src/storage/sqlite/cron-job-repository.d.ts +0 -6
  460. package/dist/src/storage/sqlite/cron-job-repository.js +0 -70
  461. package/dist/src/storage/sqlite/cron-job-repository.js.map +0 -1
  462. package/dist/src/storage/sqlite/cron-run-repository.d.ts +0 -5
  463. package/dist/src/storage/sqlite/cron-run-repository.js +0 -96
  464. package/dist/src/storage/sqlite/cron-run-repository.js.map +0 -1
  465. /package/dist/src/{cron → automations/domain}/types.js +0 -0
  466. /package/dist/src/{config/defaults.d.ts → automations/draft/automation-draft.types.js} +0 -0
  467. /package/dist/src/{config/defaults.js → extensions/types/registration.js} +0 -0
  468. /package/dist/src/{cron/execution-types.js → migrations/types.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"tui-transcript-tree.js","names":[],"sources":["../../../src/tui/tui-transcript-tree.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\n\nimport {\n isTranscriptBashExecutionEntry,\n isTranscriptContextEntry,\n isTranscriptCustomMessageEntry,\n isTranscriptLabelEntry,\n isTranscriptMetadataEntry,\n isTranscriptSummaryMessageEntry,\n type TranscriptStoredRow,\n} from '../session/session-context-for-llm.js';\nimport type { TuiTranscriptTreeEntry } from './tui-backend.js';\nimport type { TreeFilterMode } from './tui-settings.js';\n\nconst TRANSCRIPT_ROW_ID_RE = /^row-(\\d+)$/;\n\nexport function transcriptTreeEntryIdToRowNumber(entryId: string): number | null {\n const match = TRANSCRIPT_ROW_ID_RE.exec(entryId.trim());\n if (!match) return null;\n const row = Number.parseInt(match[1], 10);\n return Number.isFinite(row) && row > 0 ? row : null;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' ? (value as Record<string, unknown>) : null;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction truncateText(text: string, max = 96): string {\n const normalized = text.replace(/\\s+/g, ' ').trim();\n if (normalized.length <= max) return normalized;\n return `${normalized.slice(0, Math.max(0, max - 3)).trimEnd()}...`;\n}\n\nfunction contentPreview(content: unknown): string {\n return truncateText(contentText(content));\n}\n\nfunction contentText(content: unknown): string {\n if (typeof content === 'string') {\n return content;\n }\n if (!Array.isArray(content)) {\n return '';\n }\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block === 'string') {\n parts.push(block);\n continue;\n }\n const obj = asRecord(block);\n if (!obj) continue;\n const type = stringValue(obj.type);\n if (type === 'text') {\n parts.push(stringValue(obj.text) ?? '');\n } else if (type === 'toolCall') {\n parts.push(formatToolCallPreview(\n stringValue(obj.name) ?? stringValue(obj.toolName) ?? 'tool',\n asRecord(obj.arguments) ?? asRecord(obj.args) ?? {},\n ));\n } else if (type === 'image' || type === 'image_url') {\n parts.push('[image]');\n } else if (type) {\n parts.push(`[${type}]`);\n }\n }\n return parts.filter(Boolean).join(' ');\n}\n\nfunction formatToolCallPreview(name: string, args: Record<string, unknown>): string {\n const path = stringValue(args.path) ?? stringValue(args.file_path) ?? '';\n if (name === 'read' || name === 'read_file') {\n const offset = typeof args.offset === 'number' ? args.offset : undefined;\n const limit = typeof args.limit === 'number' ? args.limit : undefined;\n let display = path;\n if (offset !== undefined || limit !== undefined) {\n const start = offset ?? 1;\n const end = limit !== undefined ? start + limit - 1 : undefined;\n display += `:${start}${end !== undefined ? `-${end}` : ''}`;\n }\n return `[read: ${display || 'file'}]`;\n }\n if (name === 'write' || name === 'write_file') return `[write: ${path || 'file'}]`;\n if (name === 'edit') return `[edit: ${path || 'file'}]`;\n if (name === 'bash' || name === 'shell') {\n const rawCommand = stringValue(args.command) ?? '';\n const command = rawCommand.replace(/[\\n\\t]/g, ' ').trim();\n return `[bash: ${truncateText(command, 53)}]`;\n }\n if (name === 'grep') {\n const pattern = stringValue(args.pattern) ?? '';\n return `[grep: /${pattern}/ in ${path || '.'}]`;\n }\n if (name === 'find') {\n const pattern = stringValue(args.pattern) ?? '';\n return `[find: ${pattern} in ${path || '.'}]`;\n }\n if (name === 'ls') return `[ls: ${path || '.'}]`;\n const argsText = JSON.stringify(args);\n const truncatedArgs = argsText.length > 40 ? `${argsText.slice(0, 40)}...` : argsText;\n return `[${name}: ${truncatedArgs}]`;\n}\n\ninterface ToolCallDisplay {\n name: string;\n preview: string;\n}\n\nfunction collectToolCallDisplays(content: unknown): Array<{ id: string } & ToolCallDisplay> {\n if (!Array.isArray(content)) return [];\n const calls: Array<{ id: string } & ToolCallDisplay> = [];\n for (const block of content) {\n const obj = asRecord(block);\n if (!obj || stringValue(obj.type) !== 'toolCall') continue;\n const id =\n stringValue(obj.id) ??\n stringValue(obj.toolCallId) ??\n stringValue(obj.tool_call_id) ??\n stringValue(obj.tool_call_id$);\n if (!id) continue;\n const name = stringValue(obj.name) ?? stringValue(obj.toolName) ?? 'tool';\n calls.push({\n id,\n name,\n preview: formatToolCallPreview(name, asRecord(obj.arguments) ?? asRecord(obj.args) ?? {}),\n });\n }\n return calls;\n}\n\nfunction rowToolCallId(row: unknown): string | undefined {\n const record = asRecord(row);\n return (\n stringValue(record?.toolCallId) ??\n stringValue(record?.tool_call_id) ??\n stringValue(record?.tool_call_id$)\n );\n}\n\nfunction rowCreatedAt(row: TranscriptStoredRow): string | undefined {\n const record = asRecord(row);\n return stringValue(record?.createdAt) ?? stringValue(record?.timestamp);\n}\n\nfunction messageLabel(row: AgentMessage): string {\n const role = stringValue((row as { role?: unknown }).role) ?? 'message';\n if (role === 'tool' || role === 'toolResult') {\n return `tool:${stringValue((row as { toolName?: unknown }).toolName) ?? 'result'}`;\n }\n return role;\n}\n\nfunction rowPreview(row: TranscriptStoredRow): string {\n if (isTranscriptContextEntry(row)) {\n return truncateText(row.text ?? JSON.stringify(row.data ?? {}));\n }\n if (isTranscriptLabelEntry(row)) {\n return truncateText(row.label ? `label: ${row.label}` : 'label cleared');\n }\n if (isTranscriptMetadataEntry(row)) {\n if (row.type === 'model_change') {\n return truncateText([row.provider, row.modelId].filter(Boolean).join('/') || 'model changed');\n }\n if (row.type === 'thinking_level_change') {\n return truncateText(row.thinkingLevel ? `thinking: ${row.thinkingLevel}` : 'thinking changed');\n }\n return truncateText(row.name ? `title: ${row.name}` : 'title cleared');\n }\n if (isTranscriptBashExecutionEntry(row)) {\n return truncateText(row.command ?? 'bash');\n }\n if (isTranscriptCustomMessageEntry(row)) {\n const record = asRecord(row);\n const customType = stringValue(record?.customType) ?? 'custom';\n const preview = contentPreview(record?.content);\n return truncateText(preview ? `${customType}: ${preview}` : customType);\n }\n if (isTranscriptSummaryMessageEntry(row)) {\n if (row.role === 'branchSummary') {\n return truncateText(row.summary ?? 'branch summary');\n }\n return truncateText(row.summary ?? 'compaction checkpoint');\n }\n const record = asRecord(row);\n if (record?.type === 'compaction') {\n return truncateText(stringValue(record.summary) ?? 'compaction checkpoint');\n }\n const preview = contentPreview(record?.content);\n if (record?.role === 'assistant' && !preview) {\n if (record.stopReason === 'aborted') {\n return '(aborted)';\n }\n const errorMessage = stringValue(record.errorMessage);\n if (errorMessage) {\n return truncateText(errorMessage, 80);\n }\n }\n return preview;\n}\n\nfunction rowContentText(row: TranscriptStoredRow): string | undefined {\n if (isTranscriptContextEntry(row)) {\n return row.text;\n }\n if (isTranscriptLabelEntry(row)) {\n return row.label;\n }\n if (isTranscriptMetadataEntry(row)) {\n if (row.type === 'model_change') {\n return [row.provider, row.modelId].filter(Boolean).join('/') || undefined;\n }\n if (row.type === 'thinking_level_change') {\n return row.thinkingLevel;\n }\n return row.name;\n }\n if (isTranscriptBashExecutionEntry(row)) {\n return row.command;\n }\n if (isTranscriptCustomMessageEntry(row)) {\n const record = asRecord(row);\n return contentText(record?.content).trim() || stringValue(record?.customType);\n }\n if (isTranscriptSummaryMessageEntry(row)) {\n return row.summary;\n }\n const record = asRecord(row);\n if (record?.type === 'compaction') {\n return stringValue(record.summary);\n }\n const text = contentText(record?.content).trim();\n return text ? text : undefined;\n}\n\nexport function buildTuiTranscriptTree(rows: TranscriptStoredRow[]): TuiTranscriptTreeEntry[] {\n const entries: TuiTranscriptTreeEntry[] = [];\n const byOriginalId = new Map<string, TuiTranscriptTreeEntry>();\n const toolCallsById = new Map<string, ToolCallDisplay>();\n const labelChanges: Array<{ targetId: string; label?: string; timestamp?: string }> = [];\n let currentTurnId: string | undefined;\n let turn = 0;\n\n rows.forEach((row, index) => {\n const id = `row-${index + 1}`;\n const record = asRecord(row);\n let parentId: string | undefined;\n let depth = 0;\n let label = 'entry';\n let role: string | undefined;\n let toolCallPreview: string | undefined;\n\n if (isTranscriptContextEntry(row)) {\n label = 'context';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if ((asRecord(row)?.type) === 'compaction') {\n label = 'compaction';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptLabelEntry(row)) {\n label = row.label ? `label:${row.label}` : 'label:cleared';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n if (row.targetId) {\n labelChanges.push({\n targetId: row.targetId,\n label: row.label,\n timestamp: typeof row.timestamp === 'string' ? row.timestamp : undefined,\n });\n }\n } else if (isTranscriptMetadataEntry(row)) {\n label = row.type;\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptBashExecutionEntry(row)) {\n label = 'bashExecution';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptCustomMessageEntry(row)) {\n label = `custom:${stringValue(record?.customType) ?? 'message'}`;\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else if (isTranscriptSummaryMessageEntry(row)) {\n label = row.role === 'branchSummary' ? 'branch_summary' : 'compaction';\n parentId = currentTurnId;\n depth = currentTurnId ? 1 : 0;\n } else {\n const message = row as AgentMessage;\n role = stringValue((message as { role?: unknown }).role);\n label = messageLabel(message);\n if (role === 'tool' || role === 'toolResult') {\n const toolCallId = rowToolCallId(row);\n const toolCall = toolCallId ? toolCallsById.get(toolCallId) : undefined;\n if (toolCall) {\n label = `tool:${toolCall.name}`;\n toolCallPreview = toolCall.preview;\n }\n }\n if (role === 'user' || !currentTurnId) {\n turn += 1;\n currentTurnId = id;\n depth = 0;\n } else {\n parentId = currentTurnId;\n depth = 1;\n }\n }\n\n const entry: TuiTranscriptTreeEntry = {\n id,\n depth,\n label,\n turn,\n preview: rowPreview(row),\n contentText: rowContentText(row),\n createdAt: rowCreatedAt(row),\n };\n if (parentId) entry.parentId = parentId;\n if (role) entry.role = role;\n if (toolCallPreview) entry.toolCallPreview = toolCallPreview;\n entries.push(entry);\n\n byOriginalId.set(id, entry);\n const originalId = stringValue(record?.id);\n if (originalId) {\n byOriginalId.set(originalId, entry);\n }\n\n for (const toolCall of collectToolCallDisplays(record?.content)) {\n toolCallsById.set(toolCall.id, { name: toolCall.name, preview: toolCall.preview });\n }\n });\n\n for (const change of labelChanges) {\n const target = byOriginalId.get(change.targetId);\n if (!target) continue;\n if (change.label?.trim()) {\n target.userLabel = change.label.trim();\n target.labelTimestamp = change.timestamp;\n } else {\n delete target.userLabel;\n delete target.labelTimestamp;\n }\n }\n\n markCurrentTranscriptPath(entries);\n\n return entries;\n}\n\nfunction markCurrentTranscriptPath(entries: TuiTranscriptTreeEntry[]): void {\n const currentLeaf = [...entries].reverse().find(isCurrentLeafCandidate) ?? entries.at(-1);\n if (!currentLeaf) return;\n\n const byId = new Map(entries.map((entry) => [entry.id, entry]));\n currentLeaf.isCurrentLeaf = true;\n let currentId: string | undefined = currentLeaf.id;\n while (currentId) {\n const entry = byId.get(currentId);\n if (!entry) break;\n entry.isOnActivePath = true;\n currentId = entry.parentId;\n }\n}\n\nfunction isCurrentLeafCandidate(entry: TuiTranscriptTreeEntry): boolean {\n if (entry.label === 'context') return false;\n if (entry.label === 'model_change') return false;\n if (entry.label === 'thinking_level_change') return false;\n if (entry.label === 'session_info') return false;\n if (entry.label.startsWith('label:')) return false;\n return true;\n}\n\nexport function filterTuiTranscriptTreeEntries(\n entries: TuiTranscriptTreeEntry[],\n mode: TreeFilterMode,\n): TuiTranscriptTreeEntry[] {\n if (mode === 'all') return entries;\n return entries.filter((entry) => {\n if (!entry.isCurrentLeaf && isEmptyAssistantTreeEntry(entry)) {\n return false;\n }\n if (mode === 'user-only') {\n return entry.role === 'user';\n }\n if (mode === 'labeled-only') {\n return Boolean(entry.userLabel);\n }\n const isTool = entry.role === 'tool' || entry.role === 'toolResult' || entry.label.startsWith('tool:');\n const isBookkeeping =\n entry.label === 'context' ||\n entry.label === 'model_change' ||\n entry.label === 'thinking_level_change' ||\n entry.label === 'session_info' ||\n entry.label.startsWith('custom:') ||\n entry.label.startsWith('label:');\n if (mode === 'no-tools') {\n return !isTool && !isBookkeeping;\n }\n return !isBookkeeping;\n });\n}\n\nfunction isEmptyAssistantTreeEntry(entry: TuiTranscriptTreeEntry): boolean {\n if (entry.role !== 'assistant') return false;\n const preview = entry.preview?.trim();\n if (!preview) return true;\n return /^(?:\\[[^\\]]+\\]\\s*)+$/.test(preview);\n}\n\nexport function formatTuiTranscriptTreeEntryDisplayText(entry: TuiTranscriptTreeEntry): string {\n const preview = entry.preview?.trim();\n const toolCallPreview = entry.toolCallPreview?.trim();\n const role = entry.role?.trim() || entry.label;\n if (!preview) {\n if (role === 'assistant') return 'assistant: (no content)';\n if (role === 'tool' || role === 'toolResult' || entry.label.startsWith('tool:')) {\n return `[${formatTuiTranscriptToolDisplayName(entry.label)}]`;\n }\n return entry.label;\n }\n if (role === 'user' || role === 'assistant') {\n return `${role}: ${preview}`;\n }\n if (role === 'bashExecution' || entry.label === 'bashExecution') {\n return `[bash]: ${preview}`;\n }\n if (role === 'tool' || role === 'toolResult' || entry.label.startsWith('tool:')) {\n if (toolCallPreview) return toolCallPreview;\n return `[${formatTuiTranscriptToolDisplayName(entry.label)}]`;\n }\n if (entry.label === 'model_change') {\n const model = preview.includes('/') ? (preview.split('/').pop() ?? preview) : preview;\n return `[model: ${model}]`;\n }\n if (entry.label === 'thinking_level_change') {\n return `[${preview}]`;\n }\n if (entry.label === 'session_info') {\n return `[${preview}]`;\n }\n if (entry.label.startsWith('label:')) {\n return `[${preview}]`;\n }\n if (entry.label === 'compaction') {\n return `[compaction: ${preview}]`;\n }\n if (entry.label === 'branch_summary') {\n return `[branch summary]: ${preview}`;\n }\n if (entry.label.startsWith('custom:')) {\n return `[${entry.label}]${preview ? `: ${preview}` : ''}`;\n }\n return `${entry.label}: ${preview}`;\n}\n\nfunction formatTuiTranscriptToolDisplayName(label: string): string {\n return label.startsWith('tool:') ? label.slice('tool:'.length) || 'tool' : label;\n}\n"],"mappings":";;AAcA,MAAM,uBAAuB;AAE7B,SAAgB,iCAAiC,SAAgC;CAC/E,MAAM,QAAQ,qBAAqB,KAAK,QAAQ,MAAM,CAAC;AACvD,KAAI,CAAC,MAAO,QAAO;CACnB,MAAM,MAAM,OAAO,SAAS,MAAM,IAAI,GAAG;AACzC,QAAO,OAAO,SAAS,IAAI,IAAI,MAAM,IAAI,MAAM;;AAGjD,SAAS,SAAS,OAAgD;AAChE,QAAO,SAAS,OAAO,UAAU,WAAY,QAAoC;;AAGnF,SAAS,YAAY,OAAoC;AACvD,QAAO,OAAO,UAAU,YAAY,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG,KAAA;;AAGpE,SAAS,aAAa,MAAc,MAAM,IAAY;CACpD,MAAM,aAAa,KAAK,QAAQ,QAAQ,IAAI,CAAC,MAAM;AACnD,KAAI,WAAW,UAAU,IAAK,QAAO;AACrC,QAAO,GAAG,WAAW,MAAM,GAAG,KAAK,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC;;AAGhE,SAAS,eAAe,SAA0B;AAChD,QAAO,aAAa,YAAY,QAAQ,CAAC;;AAG3C,SAAS,YAAY,SAA0B;AAC7C,KAAI,OAAO,YAAY,SACrB,QAAO;AAET,KAAI,CAAC,MAAM,QAAQ,QAAQ,CACzB,QAAO;CAET,MAAM,QAAkB,EAAE;AAC1B,MAAK,MAAM,SAAS,SAAS;AAC3B,MAAI,OAAO,UAAU,UAAU;AAC7B,SAAM,KAAK,MAAM;AACjB;;EAEF,MAAM,MAAM,SAAS,MAAM;AAC3B,MAAI,CAAC,IAAK;EACV,MAAM,OAAO,YAAY,IAAI,KAAK;AAClC,MAAI,SAAS,OACX,OAAM,KAAK,YAAY,IAAI,KAAK,IAAI,GAAG;WAC9B,SAAS,WAClB,OAAM,KAAK,sBACT,YAAY,IAAI,KAAK,IAAI,YAAY,IAAI,SAAS,IAAI,QACtD,SAAS,IAAI,UAAU,IAAI,SAAS,IAAI,KAAK,IAAI,EAAE,CACpD,CAAC;WACO,SAAS,WAAW,SAAS,YACtC,OAAM,KAAK,UAAU;WACZ,KACT,OAAM,KAAK,IAAI,KAAK,GAAG;;AAG3B,QAAO,MAAM,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAGxC,SAAS,sBAAsB,MAAc,MAAuC;CAClF,MAAM,OAAO,YAAY,KAAK,KAAK,IAAI,YAAY,KAAK,UAAU,IAAI;AACtE,KAAI,SAAS,UAAU,SAAS,aAAa;EAC3C,MAAM,SAAS,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS,KAAA;EAC/D,MAAM,QAAQ,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,KAAA;EAC5D,IAAI,UAAU;AACd,MAAI,WAAW,KAAA,KAAa,UAAU,KAAA,GAAW;GAC/C,MAAM,QAAQ,UAAU;GACxB,MAAM,MAAM,UAAU,KAAA,IAAY,QAAQ,QAAQ,IAAI,KAAA;AACtD,cAAW,IAAI,QAAQ,QAAQ,KAAA,IAAY,IAAI,QAAQ;;AAEzD,SAAO,UAAU,WAAW,OAAO;;AAErC,KAAI,SAAS,WAAW,SAAS,aAAc,QAAO,WAAW,QAAQ,OAAO;AAChF,KAAI,SAAS,OAAQ,QAAO,UAAU,QAAQ,OAAO;AACrD,KAAI,SAAS,UAAU,SAAS,QAG9B,QAAO,UAAU,cAFE,YAAY,KAAK,QAAQ,IAAI,IACrB,QAAQ,WAAW,IAAI,CAAC,MACd,EAAE,GAAG,CAAC;AAE7C,KAAI,SAAS,OAEX,QAAO,WADS,YAAY,KAAK,QAAQ,IAAI,GACnB,OAAO,QAAQ,IAAI;AAE/C,KAAI,SAAS,OAEX,QAAO,UADS,YAAY,KAAK,QAAQ,IAAI,GACpB,MAAM,QAAQ,IAAI;AAE7C,KAAI,SAAS,KAAM,QAAO,QAAQ,QAAQ,IAAI;CAC9C,MAAM,WAAW,KAAK,UAAU,KAAK;AAErC,QAAO,IAAI,KAAK,IADM,SAAS,SAAS,KAAK,GAAG,SAAS,MAAM,GAAG,GAAG,CAAC,OAAO,SAC3C;;AAQpC,SAAS,wBAAwB,SAA2D;AAC1F,KAAI,CAAC,MAAM,QAAQ,QAAQ,CAAE,QAAO,EAAE;CACtC,MAAM,QAAiD,EAAE;AACzD,MAAK,MAAM,SAAS,SAAS;EAC3B,MAAM,MAAM,SAAS,MAAM;AAC3B,MAAI,CAAC,OAAO,YAAY,IAAI,KAAK,KAAK,WAAY;EAClD,MAAM,KACJ,YAAY,IAAI,GAAG,IACnB,YAAY,IAAI,WAAW,IAC3B,YAAY,IAAI,aAAa,IAC7B,YAAY,IAAI,cAAc;AAChC,MAAI,CAAC,GAAI;EACT,MAAM,OAAO,YAAY,IAAI,KAAK,IAAI,YAAY,IAAI,SAAS,IAAI;AACnE,QAAM,KAAK;GACT;GACA;GACA,SAAS,sBAAsB,MAAM,SAAS,IAAI,UAAU,IAAI,SAAS,IAAI,KAAK,IAAI,EAAE,CAAC;GAC1F,CAAC;;AAEJ,QAAO;;AAGT,SAAS,cAAc,KAAkC;CACvD,MAAM,SAAS,SAAS,IAAI;AAC5B,QACE,YAAY,QAAQ,WAAW,IAC/B,YAAY,QAAQ,aAAa,IACjC,YAAY,QAAQ,cAAc;;AAItC,SAAS,aAAa,KAA8C;CAClE,MAAM,SAAS,SAAS,IAAI;AAC5B,QAAO,YAAY,QAAQ,UAAU,IAAI,YAAY,QAAQ,UAAU;;AAGzE,SAAS,aAAa,KAA2B;CAC/C,MAAM,OAAO,YAAa,IAA2B,KAAK,IAAI;AAC9D,KAAI,SAAS,UAAU,SAAS,aAC9B,QAAO,QAAQ,YAAa,IAA+B,SAAS,IAAI;AAE1E,QAAO;;AAGT,SAAS,WAAW,KAAkC;AACpD,KAAI,yBAAyB,IAAI,CAC/B,QAAO,aAAa,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,EAAE,CAAC,CAAC;AAEjE,KAAI,uBAAuB,IAAI,CAC7B,QAAO,aAAa,IAAI,QAAQ,UAAU,IAAI,UAAU,gBAAgB;AAE1E,KAAI,0BAA0B,IAAI,EAAE;AAClC,MAAI,IAAI,SAAS,eACf,QAAO,aAAa,CAAC,IAAI,UAAU,IAAI,QAAQ,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,IAAI,gBAAgB;AAE/F,MAAI,IAAI,SAAS,wBACf,QAAO,aAAa,IAAI,gBAAgB,aAAa,IAAI,kBAAkB,mBAAmB;AAEhG,SAAO,aAAa,IAAI,OAAO,UAAU,IAAI,SAAS,gBAAgB;;AAExE,KAAI,+BAA+B,IAAI,CACrC,QAAO,aAAa,IAAI,WAAW,OAAO;AAE5C,KAAI,+BAA+B,IAAI,EAAE;EACvC,MAAM,SAAS,SAAS,IAAI;EAC5B,MAAM,aAAa,YAAY,QAAQ,WAAW,IAAI;EACtD,MAAM,UAAU,eAAe,QAAQ,QAAQ;AAC/C,SAAO,aAAa,UAAU,GAAG,WAAW,IAAI,YAAY,WAAW;;AAEzE,KAAI,gCAAgC,IAAI,EAAE;AACxC,MAAI,IAAI,SAAS,gBACf,QAAO,aAAa,IAAI,WAAW,iBAAiB;AAEtD,SAAO,aAAa,IAAI,WAAW,wBAAwB;;CAE7D,MAAM,SAAS,SAAS,IAAI;AAC5B,KAAI,QAAQ,SAAS,aACnB,QAAO,aAAa,YAAY,OAAO,QAAQ,IAAI,wBAAwB;CAE7E,MAAM,UAAU,eAAe,QAAQ,QAAQ;AAC/C,KAAI,QAAQ,SAAS,eAAe,CAAC,SAAS;AAC5C,MAAI,OAAO,eAAe,UACxB,QAAO;EAET,MAAM,eAAe,YAAY,OAAO,aAAa;AACrD,MAAI,aACF,QAAO,aAAa,cAAc,GAAG;;AAGzC,QAAO;;AAGT,SAAS,eAAe,KAA8C;AACpE,KAAI,yBAAyB,IAAI,CAC/B,QAAO,IAAI;AAEb,KAAI,uBAAuB,IAAI,CAC7B,QAAO,IAAI;AAEb,KAAI,0BAA0B,IAAI,EAAE;AAClC,MAAI,IAAI,SAAS,eACf,QAAO,CAAC,IAAI,UAAU,IAAI,QAAQ,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,IAAI,KAAA;AAElE,MAAI,IAAI,SAAS,wBACf,QAAO,IAAI;AAEb,SAAO,IAAI;;AAEb,KAAI,+BAA+B,IAAI,CACrC,QAAO,IAAI;AAEb,KAAI,+BAA+B,IAAI,EAAE;EACvC,MAAM,SAAS,SAAS,IAAI;AAC5B,SAAO,YAAY,QAAQ,QAAQ,CAAC,MAAM,IAAI,YAAY,QAAQ,WAAW;;AAE/E,KAAI,gCAAgC,IAAI,CACtC,QAAO,IAAI;CAEb,MAAM,SAAS,SAAS,IAAI;AAC5B,KAAI,QAAQ,SAAS,aACnB,QAAO,YAAY,OAAO,QAAQ;CAEpC,MAAM,OAAO,YAAY,QAAQ,QAAQ,CAAC,MAAM;AAChD,QAAO,OAAO,OAAO,KAAA;;AAGvB,SAAgB,uBAAuB,MAAuD;CAC5F,MAAM,UAAoC,EAAE;CAC5C,MAAM,+BAAe,IAAI,KAAqC;CAC9D,MAAM,gCAAgB,IAAI,KAA8B;CACxD,MAAM,eAAgF,EAAE;CACxF,IAAI;CACJ,IAAI,OAAO;AAEX,MAAK,SAAS,KAAK,UAAU;EAC3B,MAAM,KAAK,OAAO,QAAQ;EAC1B,MAAM,SAAS,SAAS,IAAI;EAC5B,IAAI;EACJ,IAAI,QAAQ;EACZ,IAAI,QAAQ;EACZ,IAAI;EACJ,IAAI;AAEJ,MAAI,yBAAyB,IAAI,EAAE;AACjC,WAAQ;AACR,cAAW;AACX,WAAQ,gBAAgB,IAAI;aAClB,SAAS,IAAI,EAAE,SAAU,cAAc;AACjD,WAAQ;AACR,cAAW;AACX,WAAQ,gBAAgB,IAAI;aACnB,uBAAuB,IAAI,EAAE;AACtC,WAAQ,IAAI,QAAQ,SAAS,IAAI,UAAU;AAC3C,cAAW;AACX,WAAQ,gBAAgB,IAAI;AAC5B,OAAI,IAAI,SACN,cAAa,KAAK;IAChB,UAAU,IAAI;IACd,OAAO,IAAI;IACX,WAAW,OAAO,IAAI,cAAc,WAAW,IAAI,YAAY,KAAA;IAChE,CAAC;aAEK,0BAA0B,IAAI,EAAE;AACzC,WAAQ,IAAI;AACZ,cAAW;AACX,WAAQ,gBAAgB,IAAI;aACnB,+BAA+B,IAAI,EAAE;AAC9C,WAAQ;AACR,cAAW;AACX,WAAQ,gBAAgB,IAAI;aACnB,+BAA+B,IAAI,EAAE;AAC9C,WAAQ,UAAU,YAAY,QAAQ,WAAW,IAAI;AACrD,cAAW;AACX,WAAQ,gBAAgB,IAAI;aACnB,gCAAgC,IAAI,EAAE;AAC/C,WAAQ,IAAI,SAAS,kBAAkB,mBAAmB;AAC1D,cAAW;AACX,WAAQ,gBAAgB,IAAI;SACvB;GACL,MAAM,UAAU;AAChB,UAAO,YAAa,QAA+B,KAAK;AACxD,WAAQ,aAAa,QAAQ;AAC7B,OAAI,SAAS,UAAU,SAAS,cAAc;IAC5C,MAAM,aAAa,cAAc,IAAI;IACrC,MAAM,WAAW,aAAa,cAAc,IAAI,WAAW,GAAG,KAAA;AAC9D,QAAI,UAAU;AACZ,aAAQ,QAAQ,SAAS;AACzB,uBAAkB,SAAS;;;AAG/B,OAAI,SAAS,UAAU,CAAC,eAAe;AACrC,YAAQ;AACR,oBAAgB;AAChB,YAAQ;UACH;AACL,eAAW;AACX,YAAQ;;;EAIZ,MAAM,QAAgC;GACpC;GACA;GACA;GACA;GACA,SAAS,WAAW,IAAI;GACxB,aAAa,eAAe,IAAI;GAChC,WAAW,aAAa,IAAI;GAC7B;AACD,MAAI,SAAU,OAAM,WAAW;AAC/B,MAAI,KAAM,OAAM,OAAO;AACvB,MAAI,gBAAiB,OAAM,kBAAkB;AAC7C,UAAQ,KAAK,MAAM;AAEnB,eAAa,IAAI,IAAI,MAAM;EAC3B,MAAM,aAAa,YAAY,QAAQ,GAAG;AAC1C,MAAI,WACF,cAAa,IAAI,YAAY,MAAM;AAGrC,OAAK,MAAM,YAAY,wBAAwB,QAAQ,QAAQ,CAC7D,eAAc,IAAI,SAAS,IAAI;GAAE,MAAM,SAAS;GAAM,SAAS,SAAS;GAAS,CAAC;GAEpF;AAEF,MAAK,MAAM,UAAU,cAAc;EACjC,MAAM,SAAS,aAAa,IAAI,OAAO,SAAS;AAChD,MAAI,CAAC,OAAQ;AACb,MAAI,OAAO,OAAO,MAAM,EAAE;AACxB,UAAO,YAAY,OAAO,MAAM,MAAM;AACtC,UAAO,iBAAiB,OAAO;SAC1B;AACL,UAAO,OAAO;AACd,UAAO,OAAO;;;AAIlB,2BAA0B,QAAQ;AAElC,QAAO;;AAGT,SAAS,0BAA0B,SAAyC;CAC1E,MAAM,cAAc,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,uBAAuB,IAAI,QAAQ,GAAG,GAAG;AACzF,KAAI,CAAC,YAAa;CAElB,MAAM,OAAO,IAAI,IAAI,QAAQ,KAAK,UAAU,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;AAC/D,aAAY,gBAAgB;CAC5B,IAAI,YAAgC,YAAY;AAChD,QAAO,WAAW;EAChB,MAAM,QAAQ,KAAK,IAAI,UAAU;AACjC,MAAI,CAAC,MAAO;AACZ,QAAM,iBAAiB;AACvB,cAAY,MAAM;;;AAItB,SAAS,uBAAuB,OAAwC;AACtE,KAAI,MAAM,UAAU,UAAW,QAAO;AACtC,KAAI,MAAM,UAAU,eAAgB,QAAO;AAC3C,KAAI,MAAM,UAAU,wBAAyB,QAAO;AACpD,KAAI,MAAM,UAAU,eAAgB,QAAO;AAC3C,KAAI,MAAM,MAAM,WAAW,SAAS,CAAE,QAAO;AAC7C,QAAO;;AAGT,SAAgB,+BACd,SACA,MAC0B;AAC1B,KAAI,SAAS,MAAO,QAAO;AAC3B,QAAO,QAAQ,QAAQ,UAAU;AAC/B,MAAI,CAAC,MAAM,iBAAiB,0BAA0B,MAAM,CAC1D,QAAO;AAET,MAAI,SAAS,YACX,QAAO,MAAM,SAAS;AAExB,MAAI,SAAS,eACX,QAAO,QAAQ,MAAM,UAAU;EAEjC,MAAM,SAAS,MAAM,SAAS,UAAU,MAAM,SAAS,gBAAgB,MAAM,MAAM,WAAW,QAAQ;EACtG,MAAM,gBACJ,MAAM,UAAU,aAChB,MAAM,UAAU,kBAChB,MAAM,UAAU,2BAChB,MAAM,UAAU,kBAChB,MAAM,MAAM,WAAW,UAAU,IACjC,MAAM,MAAM,WAAW,SAAS;AAClC,MAAI,SAAS,WACX,QAAO,CAAC,UAAU,CAAC;AAErB,SAAO,CAAC;GACR;;AAGJ,SAAS,0BAA0B,OAAwC;AACzE,KAAI,MAAM,SAAS,YAAa,QAAO;CACvC,MAAM,UAAU,MAAM,SAAS,MAAM;AACrC,KAAI,CAAC,QAAS,QAAO;AACrB,QAAO,uBAAuB,KAAK,QAAQ;;AAG7C,SAAgB,wCAAwC,OAAuC;CAC7F,MAAM,UAAU,MAAM,SAAS,MAAM;CACrC,MAAM,kBAAkB,MAAM,iBAAiB,MAAM;CACrD,MAAM,OAAO,MAAM,MAAM,MAAM,IAAI,MAAM;AACzC,KAAI,CAAC,SAAS;AACZ,MAAI,SAAS,YAAa,QAAO;AACjC,MAAI,SAAS,UAAU,SAAS,gBAAgB,MAAM,MAAM,WAAW,QAAQ,CAC7E,QAAO,IAAI,mCAAmC,MAAM,MAAM,CAAC;AAE7D,SAAO,MAAM;;AAEf,KAAI,SAAS,UAAU,SAAS,YAC9B,QAAO,GAAG,KAAK,IAAI;AAErB,KAAI,SAAS,mBAAmB,MAAM,UAAU,gBAC9C,QAAO,WAAW;AAEpB,KAAI,SAAS,UAAU,SAAS,gBAAgB,MAAM,MAAM,WAAW,QAAQ,EAAE;AAC/E,MAAI,gBAAiB,QAAO;AAC5B,SAAO,IAAI,mCAAmC,MAAM,MAAM,CAAC;;AAE7D,KAAI,MAAM,UAAU,eAElB,QAAO,WADO,QAAQ,SAAS,IAAI,GAAI,QAAQ,MAAM,IAAI,CAAC,KAAK,IAAI,UAAW,QACtD;AAE1B,KAAI,MAAM,UAAU,wBAClB,QAAO,IAAI,QAAQ;AAErB,KAAI,MAAM,UAAU,eAClB,QAAO,IAAI,QAAQ;AAErB,KAAI,MAAM,MAAM,WAAW,SAAS,CAClC,QAAO,IAAI,QAAQ;AAErB,KAAI,MAAM,UAAU,aAClB,QAAO,gBAAgB,QAAQ;AAEjC,KAAI,MAAM,UAAU,iBAClB,QAAO,qBAAqB;AAE9B,KAAI,MAAM,MAAM,WAAW,UAAU,CACnC,QAAO,IAAI,MAAM,MAAM,GAAG,UAAU,KAAK,YAAY;AAEvD,QAAO,GAAG,MAAM,MAAM,IAAI;;AAG5B,SAAS,mCAAmC,OAAuB;AACjE,QAAO,MAAM,WAAW,QAAQ,GAAG,MAAM,MAAM,EAAe,IAAI,SAAS"}
1
+ {"version":3,"file":"tui-transcript-tree.js","names":[],"sources":["../../../src/tui/tui-transcript-tree.ts"],"sourcesContent":["import type { TranscriptStoredRow } from '../session/session-context-for-llm.js';\nimport { buildTranscriptOutline } from '../session/transcript-outline.js';\nimport type { TuiTranscriptTreeEntry } from './tui-backend.js';\nimport type { TreeFilterMode } from './tui-settings.js';\n\nconst TRANSCRIPT_ROW_ID_RE = /^row-(\\d+)$/;\n\nexport function transcriptTreeEntryIdToRowNumber(entryId: string): number | null {\n const match = TRANSCRIPT_ROW_ID_RE.exec(entryId.trim());\n if (!match) return null;\n const row = Number.parseInt(match[1], 10);\n return Number.isFinite(row) && row > 0 ? row : null;\n}\n\nexport function buildTuiTranscriptTree(rows: TranscriptStoredRow[]): TuiTranscriptTreeEntry[] {\n return buildTranscriptOutline(rows).map((entry) => ({\n id: entry.id,\n ...(entry.parentId ? { parentId: entry.parentId } : {}),\n depth: entry.depth,\n label: entry.label,\n ...(entry.role ? { role: entry.role } : {}),\n ...(entry.userLabel ? { userLabel: entry.userLabel } : {}),\n ...(entry.labelTimestamp ? { labelTimestamp: entry.labelTimestamp } : {}),\n turn: entry.turn,\n ...(entry.preview ? { preview: entry.preview } : {}),\n ...(entry.contentText ? { contentText: entry.contentText } : {}),\n ...(entry.toolCallPreview ? { toolCallPreview: entry.toolCallPreview } : {}),\n ...(entry.createdAt ? { createdAt: entry.createdAt } : {}),\n ...(entry.isOnActivePath ? { isOnActivePath: entry.isOnActivePath } : {}),\n ...(entry.isCurrentLeaf ? { isCurrentLeaf: entry.isCurrentLeaf } : {}),\n }));\n}\n\nexport function filterTuiTranscriptTreeEntries(\n entries: TuiTranscriptTreeEntry[],\n mode: TreeFilterMode,\n): TuiTranscriptTreeEntry[] {\n if (mode === 'all') return entries;\n return entries.filter((entry) => {\n if (!entry.isCurrentLeaf && isEmptyAssistantTreeEntry(entry)) {\n return false;\n }\n if (mode === 'user-only') {\n return entry.role === 'user';\n }\n if (mode === 'labeled-only') {\n return Boolean(entry.userLabel);\n }\n const isTool = entry.role === 'tool' || entry.role === 'toolResult' || entry.label.startsWith('tool:');\n const isBookkeeping =\n entry.label === 'context' ||\n entry.label === 'model_change' ||\n entry.label === 'thinking_level_change' ||\n entry.label === 'session_info' ||\n entry.label.startsWith('custom:') ||\n entry.label.startsWith('label:');\n if (mode === 'no-tools') {\n return !isTool && !isBookkeeping;\n }\n return !isBookkeeping;\n });\n}\n\nfunction isEmptyAssistantTreeEntry(entry: TuiTranscriptTreeEntry): boolean {\n if (entry.role !== 'assistant') return false;\n const preview = entry.preview?.trim();\n if (!preview) return true;\n return /^(?:\\[[^\\]]+\\]\\s*)+$/.test(preview);\n}\n\nexport function formatTuiTranscriptTreeEntryDisplayText(entry: TuiTranscriptTreeEntry): string {\n const preview = entry.preview?.trim();\n const toolCallPreview = entry.toolCallPreview?.trim();\n const role = entry.role?.trim() || entry.label;\n if (!preview) {\n if (role === 'assistant') return 'assistant: (no content)';\n if (role === 'tool' || role === 'toolResult' || entry.label.startsWith('tool:')) {\n return `[${formatTuiTranscriptToolDisplayName(entry.label)}]`;\n }\n return entry.label;\n }\n if (role === 'user' || role === 'assistant') {\n return `${role}: ${preview}`;\n }\n if (role === 'bashExecution' || entry.label === 'bashExecution') {\n return `[bash]: ${preview}`;\n }\n if (role === 'tool' || role === 'toolResult' || entry.label.startsWith('tool:')) {\n if (toolCallPreview) return toolCallPreview;\n return `[${formatTuiTranscriptToolDisplayName(entry.label)}]`;\n }\n if (entry.label === 'model_change') {\n const model = preview.includes('/') ? (preview.split('/').pop() ?? preview) : preview;\n return `[model: ${model}]`;\n }\n if (entry.label === 'thinking_level_change') {\n return `[${preview}]`;\n }\n if (entry.label === 'session_info') {\n return `[${preview}]`;\n }\n if (entry.label.startsWith('label:')) {\n return `[${preview}]`;\n }\n if (entry.label === 'compaction') {\n return `[compaction: ${preview}]`;\n }\n if (entry.label === 'branch_summary') {\n return `[branch summary]: ${preview}`;\n }\n if (entry.label.startsWith('custom:')) {\n return `[${entry.label}]${preview ? `: ${preview}` : ''}`;\n }\n return `${entry.label}: ${preview}`;\n}\n\nfunction formatTuiTranscriptToolDisplayName(label: string): string {\n return label.startsWith('tool:') ? label.slice('tool:'.length) || 'tool' : label;\n}\n"],"mappings":"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"}
@@ -6,6 +6,8 @@ export interface TuiOptions {
6
6
  token?: string;
7
7
  /** Session key to resume. */
8
8
  session?: string;
9
+ /** Agent id for a fresh TUI session. */
10
+ agentId?: string;
9
11
  /** Thinking level override. */
10
12
  thinking?: string;
11
13
  /** Single message to send on start, then stay open. */
@@ -1 +1 @@
1
- {"version":3,"file":"tui-types.js","names":[],"sources":["../../../src/tui/tui-types.ts"],"sourcesContent":["/** TUI configuration options passed from CLI. */\nexport interface TuiOptions {\n /** Connect to a running gateway instead of embedded mode. */\n url?: string;\n /** Gateway bearer token. */\n token?: string;\n /** Session key to resume. */\n session?: string;\n /** Thinking level override. */\n thinking?: string;\n /** Single message to send on start, then stay open. */\n message?: string;\n /** Workspace directory for the new TUI session. */\n workdir?: string;\n /** Use the launch directory as the new TUI session workspace when no workdir is set. */\n useStartupCwd?: boolean;\n /** Run in embedded (local) mode — no gateway required. */\n local?: boolean;\n /** Theme id: `auto`, `dark`, `light`, or custom name under `~/.xopc/themes/`. */\n theme?: string;\n}\n\nexport type TuiExitReason = 'exit' | 'signal';\n\nexport interface TuiResult {\n exitReason: TuiExitReason;\n}\n\n/** Parsed SSE event from the stream. */\nexport interface ParsedSSEEvent {\n event: string;\n data: string;\n id?: string;\n}\n\n/** Activity status for the TUI status bar. */\nexport type ActivityStatus =\n | 'idle'\n | 'sending'\n | 'waiting'\n | 'streaming'\n | 'running'\n | 'compacting'\n | 'stalled'\n | 'recovering'\n | 'aborting';\n\nexport type TuiEventSource = 'agent-response' | 'agent-resume' | 'broadcast' | 'embedded' | 'unknown';\n\nexport type TuiRunPhase =\n | 'idle'\n | 'sending'\n | 'waiting'\n | 'streaming'\n | 'tool'\n | 'progress'\n | 'stalled'\n | 'recovering'\n | 'aborting';\n\nexport interface TuiRunStatus {\n phase: TuiRunPhase;\n runId: string | null;\n directStreamRunId: string | null;\n lastCompletedRunId: string | null;\n source: TuiEventSource;\n lastEvent: string | null;\n lastActivityAt: number | null;\n stalledAt: number | null;\n recoveredAt: number | null;\n}\n\n/** Session metadata shown in the TUI footer. */\nexport interface SessionInfo {\n model?: string;\n modelProvider?: string;\n thinkingLevel?: string;\n reasoningLevel?: string;\n verboseLevel?: string;\n contextTokens?: number | null;\n totalTokens?: number | null;\n contextWindow?: number | null;\n contextUsagePercent?: number | null;\n displayName?: string;\n effectiveWorkspacePath?: string;\n workingDirectoryLocked?: boolean;\n}\n\n/** Mutable state bag for the TUI runtime. */\nexport interface TuiState {\n currentSessionKey: string;\n activeRunId: string | null;\n isConnected: boolean;\n activityStatus: ActivityStatus;\n runStatus: TuiRunStatus;\n connectionStatus: string;\n sessionInfo: SessionInfo;\n autoMessageSent: boolean;\n historyLoaded: boolean;\n toolsExpanded: boolean;\n showThinking: boolean;\n /** Last Ctrl+C timestamp for double-press exit (see `resolveCtrlCAction`). */\n lastCtrlCAt: number;\n exitRequested: boolean;\n /** Queued via Alt+Enter while a run is active; flushed FIFO when the run ends. */\n messageFollowUpQueue: string[];\n /** Queued Enter-while-busy steering messages after the first in-flight steer. */\n steeringQueue: string[];\n /** Ctrl+P cycle filter; `null` = all models from catalog. */\n scopedModelRefs: string[] | null;\n /** Last Escape timestamp for double-press actions. */\n lastEscapeAt: number;\n /** Human-readable progress from SSE `progress` events. */\n progressMessage: string | null;\n /** Session compaction in flight (local /compact handler). */\n isCompacting: boolean;\n /** Messages queued while compacting. */\n compactionQueue: string[];\n}\n\nexport function createInitialState(sessionKey: string): TuiState {\n return {\n currentSessionKey: sessionKey,\n activeRunId: null,\n isConnected: false,\n activityStatus: 'idle',\n runStatus: {\n phase: 'idle',\n runId: null,\n directStreamRunId: null,\n lastCompletedRunId: null,\n source: 'unknown',\n lastEvent: null,\n lastActivityAt: null,\n stalledAt: null,\n recoveredAt: null,\n },\n connectionStatus: 'connecting',\n sessionInfo: {},\n autoMessageSent: false,\n historyLoaded: false,\n toolsExpanded: false,\n showThinking: false,\n lastCtrlCAt: 0,\n exitRequested: false,\n messageFollowUpQueue: [],\n steeringQueue: [],\n scopedModelRefs: null,\n lastEscapeAt: 0,\n progressMessage: null,\n isCompacting: false,\n compactionQueue: [],\n };\n}\n"],"mappings":";AAwHA,SAAgB,mBAAmB,YAA8B;AAC/D,QAAO;EACL,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,WAAW;GACT,OAAO;GACP,OAAO;GACP,mBAAmB;GACnB,oBAAoB;GACpB,QAAQ;GACR,WAAW;GACX,gBAAgB;GAChB,WAAW;GACX,aAAa;GACd;EACD,kBAAkB;EAClB,aAAa,EAAE;EACf,iBAAiB;EACjB,eAAe;EACf,eAAe;EACf,cAAc;EACd,aAAa;EACb,eAAe;EACf,sBAAsB,EAAE;EACxB,eAAe,EAAE;EACjB,iBAAiB;EACjB,cAAc;EACd,iBAAiB;EACjB,cAAc;EACd,iBAAiB,EAAE;EACpB"}
1
+ {"version":3,"file":"tui-types.js","names":[],"sources":["../../../src/tui/tui-types.ts"],"sourcesContent":["/** TUI configuration options passed from CLI. */\nexport interface TuiOptions {\n /** Connect to a running gateway instead of embedded mode. */\n url?: string;\n /** Gateway bearer token. */\n token?: string;\n /** Session key to resume. */\n session?: string;\n /** Agent id for a fresh TUI session. */\n agentId?: string;\n /** Thinking level override. */\n thinking?: string;\n /** Single message to send on start, then stay open. */\n message?: string;\n /** Workspace directory for the new TUI session. */\n workdir?: string;\n /** Use the launch directory as the new TUI session workspace when no workdir is set. */\n useStartupCwd?: boolean;\n /** Run in embedded (local) mode — no gateway required. */\n local?: boolean;\n /** Theme id: `auto`, `dark`, `light`, or custom name under `~/.xopc/themes/`. */\n theme?: string;\n}\n\nexport type TuiExitReason = 'exit' | 'signal';\n\nexport interface TuiResult {\n exitReason: TuiExitReason;\n}\n\n/** Parsed SSE event from the stream. */\nexport interface ParsedSSEEvent {\n event: string;\n data: string;\n id?: string;\n}\n\n/** Activity status for the TUI status bar. */\nexport type ActivityStatus =\n | 'idle'\n | 'sending'\n | 'waiting'\n | 'streaming'\n | 'running'\n | 'compacting'\n | 'stalled'\n | 'recovering'\n | 'aborting';\n\nexport type TuiEventSource = 'agent-response' | 'agent-resume' | 'broadcast' | 'embedded' | 'unknown';\n\nexport type TuiRunPhase =\n | 'idle'\n | 'sending'\n | 'waiting'\n | 'streaming'\n | 'tool'\n | 'progress'\n | 'stalled'\n | 'recovering'\n | 'aborting';\n\nexport interface TuiRunStatus {\n phase: TuiRunPhase;\n runId: string | null;\n directStreamRunId: string | null;\n lastCompletedRunId: string | null;\n source: TuiEventSource;\n lastEvent: string | null;\n lastActivityAt: number | null;\n stalledAt: number | null;\n recoveredAt: number | null;\n}\n\n/** Session metadata shown in the TUI footer. */\nexport interface SessionInfo {\n model?: string;\n modelProvider?: string;\n thinkingLevel?: string;\n reasoningLevel?: string;\n verboseLevel?: string;\n contextTokens?: number | null;\n totalTokens?: number | null;\n contextWindow?: number | null;\n contextUsagePercent?: number | null;\n displayName?: string;\n effectiveWorkspacePath?: string;\n workingDirectoryLocked?: boolean;\n}\n\n/** Mutable state bag for the TUI runtime. */\nexport interface TuiState {\n currentSessionKey: string;\n activeRunId: string | null;\n isConnected: boolean;\n activityStatus: ActivityStatus;\n runStatus: TuiRunStatus;\n connectionStatus: string;\n sessionInfo: SessionInfo;\n autoMessageSent: boolean;\n historyLoaded: boolean;\n toolsExpanded: boolean;\n showThinking: boolean;\n /** Last Ctrl+C timestamp for double-press exit (see `resolveCtrlCAction`). */\n lastCtrlCAt: number;\n exitRequested: boolean;\n /** Queued via Alt+Enter while a run is active; flushed FIFO when the run ends. */\n messageFollowUpQueue: string[];\n /** Queued Enter-while-busy steering messages after the first in-flight steer. */\n steeringQueue: string[];\n /** Ctrl+P cycle filter; `null` = all models from catalog. */\n scopedModelRefs: string[] | null;\n /** Last Escape timestamp for double-press actions. */\n lastEscapeAt: number;\n /** Human-readable progress from SSE `progress` events. */\n progressMessage: string | null;\n /** Session compaction in flight (local /compact handler). */\n isCompacting: boolean;\n /** Messages queued while compacting. */\n compactionQueue: string[];\n}\n\nexport function createInitialState(sessionKey: string): TuiState {\n return {\n currentSessionKey: sessionKey,\n activeRunId: null,\n isConnected: false,\n activityStatus: 'idle',\n runStatus: {\n phase: 'idle',\n runId: null,\n directStreamRunId: null,\n lastCompletedRunId: null,\n source: 'unknown',\n lastEvent: null,\n lastActivityAt: null,\n stalledAt: null,\n recoveredAt: null,\n },\n connectionStatus: 'connecting',\n sessionInfo: {},\n autoMessageSent: false,\n historyLoaded: false,\n toolsExpanded: false,\n showThinking: false,\n lastCtrlCAt: 0,\n exitRequested: false,\n messageFollowUpQueue: [],\n steeringQueue: [],\n scopedModelRefs: null,\n lastEscapeAt: 0,\n progressMessage: null,\n isCompacting: false,\n compactionQueue: [],\n };\n}\n"],"mappings":";AA0HA,SAAgB,mBAAmB,YAA8B;AAC/D,QAAO;EACL,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,WAAW;GACT,OAAO;GACP,OAAO;GACP,mBAAmB;GACnB,oBAAoB;GACpB,QAAQ;GACR,WAAW;GACX,gBAAgB;GAChB,WAAW;GACX,aAAa;GACd;EACD,kBAAkB;EAClB,aAAa,EAAE;EACf,iBAAiB;EACjB,eAAe;EACf,eAAe;EACf,cAAc;EACd,aAAa;EACb,eAAe;EACf,sBAAsB,EAAE;EACxB,eAAe,EAAE;EACjB,iBAAiB;EACjB,cAAc;EACd,iBAAiB;EACjB,cAAc;EACd,iBAAiB,EAAE;EACpB"}
@@ -9,10 +9,11 @@ import { getAllModels, getAllProviders, getApiKey, init_providers, isProviderCon
9
9
  import { renderWorkflowFinalSummary, renderWorkflowPanel } from "../agent/workflow/snapshot.js";
10
10
  import { runViewToSnapshot } from "../workflows/service/run-view-to-snapshot.js";
11
11
  import { ProjectTrustStore, hasTrustRequiringProjectResources } from "../project-trust/trust-store.js";
12
+ import { ensureStarterAgentsInitialized } from "../agent/starter-agents.js";
12
13
  import "../config/index.js";
14
+ import { MAX_WEBCHAT_ATTACHMENT_FILE_BYTES } from "../gateway/chat-limits.js";
13
15
  import { isTerminalWorkflowRunStatus } from "../workflows/domain/run.js";
14
16
  import "../workflows/domain/index.js";
15
- import { MAX_WEBCHAT_ATTACHMENT_FILE_BYTES } from "../gateway/chat-limits.js";
16
17
  import { resolveTuiSessionKey, resolveTuiStartupSessionKey } from "../routing/resolve-tui-session-key.js";
17
18
  import { applyThemeById, getBashExcludeBorderColor, getBashModeBorderColor, getCustomThemesDir, getThemeExports, getThinkingBorderColor, initTuiTheme, listAvailableThemeIds, resolveThemePalette } from "./theme-manager.js";
18
19
  import { editorTheme, theme } from "./theme.js";
@@ -175,10 +176,12 @@ async function runTui(opts) {
175
176
  const stdioFilter = installTuiStdioFilter();
176
177
  const restoreStdio = () => stdioFilter.restore();
177
178
  const isLocalMode = opts.local === true;
178
- const config = loadConfig();
179
+ const loadedConfig = loadConfig();
180
+ const config = isLocalMode ? ensureStarterAgentsInitialized(loadedConfig).config : loadedConfig;
179
181
  const startup = resolveTuiStartupSessionKey({
180
182
  cfg: config,
181
183
  sessionOption: opts.session,
184
+ agentOption: opts.agentId,
182
185
  cwd: process.cwd()
183
186
  });
184
187
  let currentAgentId = startup.agentId;
@@ -225,6 +228,7 @@ async function runTui(opts) {
225
228
  sendMessage: (message, options) => sendExtensionMessage(message, options)
226
229
  });
227
230
  const client = isLocalMode ? new EmbeddedBackend({
231
+ config,
228
232
  extensionRegistry,
229
233
  implicitTrustedWorkspace,
230
234
  isWorkspaceTrusted: () => projectTrustSessionDecision
@@ -1618,6 +1622,7 @@ async function runTui(opts) {
1618
1622
  switchModel: switchCurrentModel,
1619
1623
  listSessions: () => client.listSessions(),
1620
1624
  listAgents: () => client.listAgents(),
1625
+ setTuiDefaultAgent: (agentId) => client.setTuiDefaultAgent?.(agentId) ?? Promise.reject(/* @__PURE__ */ new Error("Not available")),
1621
1626
  switchAgentSession,
1622
1627
  getSessionStats: () => client.getSessionStats(state.currentSessionKey),
1623
1628
  getStartupResources: () => startupResources,