@xopcai/xopc 0.0.118 → 0.0.120

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 (503) 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-APTlX9Sq.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-CFW_FS_V.js +2 -0
  7. package/dist/gateway/static/root/assets/app-management-settings-panel-DTKc5HHT.js +1 -0
  8. package/dist/gateway/static/root/assets/appearance-settings-BTciFrE9.js +1 -0
  9. package/dist/gateway/static/root/assets/{apps-page--wMEL00f.js → apps-page-DT52OrbM.js} +1 -1
  10. package/dist/gateway/static/root/assets/{archive-plugin-Cki4SfU2.js → archive-plugin-CiHaUMII.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-D-KnS2Do.js → attachment-load-t4gSrNjL.js} +1 -1
  12. package/dist/gateway/static/root/assets/automation-suggestion-card-CtysjSoQ.js +1 -0
  13. package/dist/gateway/static/root/assets/automations-page-B2YvT3ES.js +1 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-D2sgvJja.js → binary-plugins-BAbSldW5.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-DIq-4Gvb.js → block-editor-BNr_82xl.js} +28 -28
  16. package/dist/gateway/static/root/assets/browser-settings-page-BQEXPhDU.js +8 -0
  17. package/dist/gateway/static/root/assets/capability-presets-api-tzD702Gg.js +1 -0
  18. package/dist/gateway/static/root/assets/capability-presets-settings-panel-AGhTueAc.js +1 -0
  19. package/dist/gateway/static/root/assets/channel-recipient-api-DL_KzwGE.js +1 -0
  20. package/dist/gateway/static/root/assets/channels-settings-DRTutLlN.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-DneJVuge.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-BEwWA1yf.js +1 -0
  25. package/dist/gateway/static/root/assets/{extension-debug-page-DYu1KaFQ.js → extension-debug-page-Dl2kO0Sf.js} +1 -1
  26. package/dist/gateway/static/root/assets/{extension-page-B3W6QwlZ.js → extension-page-DmbLPsx_.js} +1 -1
  27. package/dist/gateway/static/root/assets/{extension-settings-page-D7VQ-cxE.js → extension-settings-page-BS2rx40e.js} +1 -1
  28. package/dist/gateway/static/root/assets/{fetch-B7xDPu-R.js → fetch-B3ME5Eri.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-DI9_BBTo.js} +1 -1
  31. package/dist/gateway/static/root/assets/gateway-settings-DAFI_T0W.js +1 -0
  32. package/dist/gateway/static/root/assets/{gateway-startup-retry-CYj9FWCp.js → gateway-startup-retry-CSZQTz6K.js} +1 -1
  33. package/dist/gateway/static/root/assets/goal-detail-page-DLuz4jC9.js +1 -0
  34. package/dist/gateway/static/root/assets/{goals-config-api-CQQgzPr3.js → goals-config-api-Bhzqrp2w.js} +1 -1
  35. package/dist/gateway/static/root/assets/{goals-page-BHitvJAv.js → goals-page-DTAfv9Ft.js} +2 -2
  36. package/dist/gateway/static/root/assets/goals-settings-CWN2iirQ.js +1 -0
  37. package/dist/gateway/static/root/assets/heartbeat-settings-CkkkHvOi.js +1 -0
  38. package/dist/gateway/static/root/assets/index-CnjzMw5i.js +191 -0
  39. package/dist/gateway/static/root/assets/index-E1QinYKp.css +1 -0
  40. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-kMp08SlX.js +1 -0
  41. package/dist/gateway/static/root/assets/{locale-store-DjbfSsfA.js → locale-store-Ba72bFmP.js} +1 -1
  42. package/dist/gateway/static/root/assets/{logs-page-C2Uqvae9.js → logs-page-CDXDlS_W.js} +2 -2
  43. package/dist/gateway/static/root/assets/{markdown-split-BwOFrJ2E.js → markdown-split-Bc0w40vz.js} +1 -1
  44. package/dist/gateway/static/root/assets/{media-plugins-Cnz6Q5G6.js → media-plugins-DJ_HvgIy.js} +1 -1
  45. package/dist/gateway/static/root/assets/messages-CISb1HLv.js +3 -0
  46. package/dist/gateway/static/root/assets/models-hub-panel-BTwxMIgZ.js +2 -0
  47. package/dist/gateway/static/root/assets/note-detail-page-BBfOeB0m.js +2 -0
  48. package/dist/gateway/static/root/assets/{note-image-lightbox-B-Svpmza.js → note-image-lightbox-4zntqpZq.js} +1 -1
  49. package/dist/gateway/static/root/assets/notes-page-VocWOjoK.js +1 -0
  50. package/dist/gateway/static/root/assets/{preview-open-alternatives-Bss4TiwP.js → preview-open-alternatives-BbA7sRd_.js} +1 -1
  51. package/dist/gateway/static/root/assets/remote-access-hub-CXwjuD_Q.js +1 -0
  52. package/dist/gateway/static/root/assets/{save-bar-controls-BRNjdgKq.js → save-bar-controls-Dividh61.js} +1 -1
  53. package/dist/gateway/static/root/assets/schedule-field-pRheF2CO.js +1 -0
  54. package/dist/gateway/static/root/assets/{schema-form-Dub9sy8r.js → schema-form-D6PiPxfr.js} +1 -1
  55. package/dist/gateway/static/root/assets/sessions-page-CpcVySQK.js +1 -0
  56. package/dist/gateway/static/root/assets/settings-advanced-gate-BVy_TawT.js +1 -0
  57. package/dist/gateway/static/root/assets/{settings-collapsible-section-BeFLavGi.js → settings-collapsible-section-BMCOfuE_.js} +1 -1
  58. package/dist/gateway/static/root/assets/settings-form-section-DBkGwpIN.js +1 -0
  59. package/dist/gateway/static/root/assets/settings-page-CZpNyCWn.js +1 -0
  60. package/dist/gateway/static/root/assets/settings-page-layout-NxoW5Y57.js +1 -0
  61. package/dist/gateway/static/root/assets/setup-status-panel-MVHLLu_a.js +1 -0
  62. package/dist/gateway/static/root/assets/{share-preview-page-C8glrdqe.js → share-preview-page-B0suFCfj.js} +1 -1
  63. package/dist/gateway/static/root/assets/shares-settings-C6DBbQGo.js +1 -0
  64. package/dist/gateway/static/root/assets/skill-reload-api-6hJmhwSn.js +1 -0
  65. package/dist/gateway/static/root/assets/skills-page-Im1MA0Iw.js +2 -0
  66. package/dist/gateway/static/root/assets/system-settings-panel-CrmEnyX4.js +1 -0
  67. package/dist/gateway/static/root/assets/{theme-store-CD2wtgZV.js → theme-store-Bt6vAkSB.js} +1 -1
  68. package/dist/gateway/static/root/assets/typed-models-lib-BAsGn25g.js +1 -0
  69. package/dist/gateway/static/root/assets/{use-channel-catalog-DqlWTsDb.js → use-channel-catalog-C7vcAoGb.js} +1 -1
  70. package/dist/gateway/static/root/assets/user-profile-settings-panel-QAQWGelF.js +1 -0
  71. package/dist/gateway/static/root/assets/utils-Dl9efgnV.js +1 -0
  72. package/dist/gateway/static/root/assets/{voice-api-key-field-C73IVZeC.js → voice-api-key-field-D-6XueTv.js} +1 -1
  73. package/dist/gateway/static/root/assets/{voice-player-store-C_ArLJPM.js → voice-player-store-CMC5NOJp.js} +1 -1
  74. package/dist/gateway/static/root/assets/workflow-run-setup-panel-DVPllR4k.js +3 -0
  75. package/dist/gateway/static/root/assets/workflows-page-B94WISTW.js +18 -0
  76. package/dist/gateway/static/root/index.html +8 -9
  77. package/dist/package.js +1 -1
  78. package/dist/src/agent/agent-manager.d.ts +4 -5
  79. package/dist/src/agent/agent-manager.js +4 -8
  80. package/dist/src/agent/agent-manager.js.map +1 -1
  81. package/dist/src/agent/context/workspace-templates/AGENTS.md +3 -2
  82. package/dist/src/agent/embedded/run-for-session.js +102 -14
  83. package/dist/src/agent/embedded/run-for-session.js.map +1 -1
  84. package/dist/src/agent/fallback/candidates.d.ts +0 -8
  85. package/dist/src/agent/fallback/candidates.js.map +1 -1
  86. package/dist/src/agent/index.js +1 -1
  87. package/dist/src/agent/lifecycle/handlers/compaction.d.ts +1 -3
  88. package/dist/src/agent/lifecycle/handlers/compaction.js +1 -16
  89. package/dist/src/agent/lifecycle/handlers/compaction.js.map +1 -1
  90. package/dist/src/agent/lifecycle/progress.d.ts +0 -1
  91. package/dist/src/agent/lifecycle/progress.js +1 -6
  92. package/dist/src/agent/lifecycle/progress.js.map +1 -1
  93. package/dist/src/agent/lifecycle/timeout-wrapper.d.ts +1 -2
  94. package/dist/src/agent/lifecycle/timeout-wrapper.js +1 -7
  95. package/dist/src/agent/lifecycle/timeout-wrapper.js.map +1 -1
  96. package/dist/src/agent/memory/builtin-memory-store.d.ts +1 -1
  97. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  98. package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
  99. package/dist/src/agent/memory/builtin-provider.d.ts +2 -2
  100. package/dist/src/agent/memory/builtin-provider.js +2 -2
  101. package/dist/src/agent/memory/builtin-provider.js.map +1 -1
  102. package/dist/src/agent/memory/dreaming/light-sweep.d.ts +0 -7
  103. package/dist/src/agent/memory/dreaming/light-sweep.js +16 -277
  104. package/dist/src/agent/memory/dreaming/light-sweep.js.map +1 -1
  105. package/dist/src/agent/memory/dreaming/rem-patterns.d.ts +1 -1
  106. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  107. package/dist/src/agent/memory/dreaming/rem-patterns.js.map +1 -1
  108. package/dist/src/agent/memory/dreaming/short-term-store.d.ts +3 -3
  109. package/dist/src/agent/memory/dreaming/short-term-store.js +5 -5
  110. package/dist/src/agent/memory/dreaming/short-term-store.js.map +1 -1
  111. package/dist/src/agent/memory/dreaming/utils.d.ts +2 -2
  112. package/dist/src/agent/memory/dreaming/utils.js +2 -2
  113. package/dist/src/agent/memory/dreaming/utils.js.map +1 -1
  114. package/dist/src/agent/memory/index.d.ts +0 -2
  115. package/dist/src/agent/memory/index.js +1 -2
  116. package/dist/src/agent/middleware/self-verify.d.ts +0 -1
  117. package/dist/src/agent/middleware/self-verify.js +0 -2
  118. package/dist/src/agent/middleware/self-verify.js.map +1 -1
  119. package/dist/src/agent/models/index.d.ts +1 -1
  120. package/dist/src/agent/models/manager.d.ts +4 -20
  121. package/dist/src/agent/models/manager.js +9 -126
  122. package/dist/src/agent/models/manager.js.map +1 -1
  123. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +0 -4
  124. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -9
  125. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  126. package/dist/src/agent/prompt/sections/memory-skills.js +11 -10
  127. package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -1
  128. package/dist/src/agent/prompt/sections/tooling.js +4 -4
  129. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  130. package/dist/src/agent/prompt/service-prompt-builder.d.ts +0 -1
  131. package/dist/src/agent/prompt/service-prompt-builder.js +0 -12
  132. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  133. package/dist/src/agent/prompt/subagent-context.js +1 -1
  134. package/dist/src/agent/prompt/subagent-context.js.map +1 -1
  135. package/dist/src/agent/prompt/types.d.ts +1 -1
  136. package/dist/src/agent/reply/startup-context.js +6 -105
  137. package/dist/src/agent/reply/startup-context.js.map +1 -1
  138. package/dist/src/agent/service.d.ts +1 -12
  139. package/dist/src/agent/service.js +3 -81
  140. package/dist/src/agent/service.js.map +1 -1
  141. package/dist/src/agent/service.types.d.ts +2 -2
  142. package/dist/src/agent/session/session-config-service.d.ts +11 -11
  143. package/dist/src/agent/session/session-config-service.js +14 -14
  144. package/dist/src/agent/session/session-config-service.js.map +1 -1
  145. package/dist/src/agent/session/session-inspector.js +3 -2
  146. package/dist/src/agent/session/session-inspector.js.map +1 -1
  147. package/dist/src/agent/starter-agents.js +12 -12
  148. package/dist/src/agent/starter-agents.js.map +1 -1
  149. package/dist/src/agent/tools/automation-tool.d.ts +14 -0
  150. package/dist/src/agent/tools/automation-tool.js +102 -0
  151. package/dist/src/agent/tools/automation-tool.js.map +1 -0
  152. package/dist/src/agent/tools/delegate-tool.js +1 -1
  153. package/dist/src/agent/tools/delegate-tool.js.map +1 -1
  154. package/dist/src/agent/tools/factory.d.ts +3 -3
  155. package/dist/src/agent/tools/factory.js +2 -2
  156. package/dist/src/agent/tools/factory.js.map +1 -1
  157. package/dist/src/agent/tools/index.d.ts +1 -1
  158. package/dist/src/agent/tools/index.js +2 -2
  159. package/dist/src/agent/tools/memory-tool.js +2 -2
  160. package/dist/src/agent/tools/memory-tool.js.map +1 -1
  161. package/dist/src/agent-manifest/resolver.d.ts +1 -0
  162. package/dist/src/agent-manifest/resolver.js +1 -0
  163. package/dist/src/agent-manifest/resolver.js.map +1 -1
  164. package/dist/src/agent-manifest/schema.d.ts +6 -0
  165. package/dist/src/agent-manifest/schema.js +12 -3
  166. package/dist/src/agent-manifest/schema.js.map +1 -1
  167. package/dist/src/ai-assist/text-assist.d.ts +1 -1
  168. package/dist/src/ai-assist/text-assist.js +56 -0
  169. package/dist/src/ai-assist/text-assist.js.map +1 -1
  170. package/dist/src/auth/profiles/store.js.map +1 -1
  171. package/dist/src/automations/api/routes.d.ts +3 -0
  172. package/dist/src/automations/api/routes.js +193 -0
  173. package/dist/src/automations/api/routes.js.map +1 -0
  174. package/dist/src/automations/domain/index.d.ts +3 -0
  175. package/dist/src/automations/domain/index.js +3 -0
  176. package/dist/src/automations/domain/schedule.d.ts +4 -0
  177. package/dist/src/automations/domain/schedule.js +37 -0
  178. package/dist/src/automations/domain/schedule.js.map +1 -0
  179. package/dist/src/automations/domain/types.d.ts +160 -0
  180. package/dist/src/automations/domain/validation.d.ts +370 -0
  181. package/dist/src/automations/domain/validation.js +149 -0
  182. package/dist/src/automations/domain/validation.js.map +1 -0
  183. package/dist/src/automations/draft/automation-draft-prompt.d.ts +26 -0
  184. package/dist/src/automations/draft/automation-draft-prompt.js +127 -0
  185. package/dist/src/automations/draft/automation-draft-prompt.js.map +1 -0
  186. package/dist/src/automations/draft/automation-draft-service.d.ts +12 -0
  187. package/dist/src/automations/draft/automation-draft-service.js +135 -0
  188. package/dist/src/automations/draft/automation-draft-service.js.map +1 -0
  189. package/dist/src/automations/draft/automation-draft-validator.d.ts +99 -0
  190. package/dist/src/automations/draft/automation-draft-validator.js +105 -0
  191. package/dist/src/automations/draft/automation-draft-validator.js.map +1 -0
  192. package/dist/src/automations/draft/automation-draft.types.d.ts +40 -0
  193. package/dist/src/automations/draft/index.d.ts +3 -0
  194. package/dist/src/automations/draft/index.js +3 -0
  195. package/dist/src/automations/index.d.ts +3 -0
  196. package/dist/src/automations/index.js +8 -0
  197. package/dist/src/automations/product-events.d.ts +5 -0
  198. package/dist/src/automations/product-events.js +21 -0
  199. package/dist/src/automations/product-events.js.map +1 -0
  200. package/dist/src/automations/service/action-executor.d.ts +9 -0
  201. package/dist/src/automations/service/action-executor.js +157 -0
  202. package/dist/src/automations/service/action-executor.js.map +1 -0
  203. package/dist/src/automations/service/automation-service.d.ts +54 -0
  204. package/dist/src/automations/service/automation-service.js +404 -0
  205. package/dist/src/automations/service/automation-service.js.map +1 -0
  206. package/dist/src/automations/service/index.d.ts +2 -0
  207. package/dist/src/automations/service/index.js +3 -0
  208. package/dist/src/automations/storage/automation-repository.d.ts +6 -0
  209. package/dist/src/automations/storage/automation-repository.js +61 -0
  210. package/dist/src/automations/storage/automation-repository.js.map +1 -0
  211. package/dist/src/automations/storage/automation-run-repository.d.ts +17 -0
  212. package/dist/src/automations/storage/automation-run-repository.js +130 -0
  213. package/dist/src/automations/storage/automation-run-repository.js.map +1 -0
  214. package/dist/src/automations/storage/index.d.ts +2 -0
  215. package/dist/src/automations/storage/index.js +3 -0
  216. package/dist/src/channels/plugin-types.d.ts +3 -0
  217. package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
  218. package/dist/src/cli/command-catalog.js +0 -39
  219. package/dist/src/cli/command-catalog.js.map +1 -1
  220. package/dist/src/cli/command-loaders.js +0 -1
  221. package/dist/src/cli/command-loaders.js.map +1 -1
  222. package/dist/src/cli/command-manifest.js +0 -4
  223. package/dist/src/cli/command-manifest.js.map +1 -1
  224. package/dist/src/cli/commands/agents.js +7 -6
  225. package/dist/src/cli/commands/agents.js.map +1 -1
  226. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  227. package/dist/src/cli/commands/doctor/checks/{cron-health.d.ts → migrations.d.ts} +1 -1
  228. package/dist/src/cli/commands/doctor/checks/migrations.js +40 -0
  229. package/dist/src/cli/commands/doctor/checks/migrations.js.map +1 -0
  230. package/dist/src/cli/commands/doctor/flow.js +2 -2
  231. package/dist/src/cli/commands/doctor/flow.js.map +1 -1
  232. package/dist/src/cli/commands/gateway/call.js +2 -2
  233. package/dist/src/cli/commands/gateway/call.js.map +1 -1
  234. package/dist/src/cli/commands/gateway/run-foreground.js +4 -2
  235. package/dist/src/cli/commands/gateway/run-foreground.js.map +1 -1
  236. package/dist/src/cli/commands/init.js +27 -9
  237. package/dist/src/cli/commands/init.js.map +1 -1
  238. package/dist/src/cli/commands/tui.js +24 -2
  239. package/dist/src/cli/commands/tui.js.map +1 -1
  240. package/dist/src/cli/templates.js +3 -2
  241. package/dist/src/cli/templates.js.map +1 -1
  242. package/dist/src/cli/utils/init-workspace-core.js +2 -0
  243. package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
  244. package/dist/src/commands/agents.config.d.ts +9 -0
  245. package/dist/src/commands/agents.config.js +40 -2
  246. package/dist/src/commands/agents.config.js.map +1 -1
  247. package/dist/src/config/agent-profile.js +4 -3
  248. package/dist/src/config/agent-profile.js.map +1 -1
  249. package/dist/src/config/agent-typed-models.js.map +1 -1
  250. package/dist/src/config/config-surface.d.ts +3 -0
  251. package/dist/src/config/index.d.ts +0 -1
  252. package/dist/src/config/index.js +3 -3
  253. package/dist/src/config/index.js.map +1 -1
  254. package/dist/src/config/paths.d.ts +0 -9
  255. package/dist/src/config/paths.js +1 -14
  256. package/dist/src/config/paths.js.map +1 -1
  257. package/dist/src/config/profile.js +0 -1
  258. package/dist/src/config/profile.js.map +1 -1
  259. package/dist/src/config/rules.js +0 -5
  260. package/dist/src/config/rules.js.map +1 -1
  261. package/dist/src/config/schema.d.ts +13 -12
  262. package/dist/src/config/schema.js +22 -26
  263. package/dist/src/config/schema.js.map +1 -1
  264. package/dist/src/config/web-patch.d.ts +0 -12
  265. package/dist/src/config/web-patch.js +2 -29
  266. package/dist/src/config/web-patch.js.map +1 -1
  267. package/dist/src/extensions/api.d.ts +2 -0
  268. package/dist/src/extensions/api.js +10 -0
  269. package/dist/src/extensions/api.js.map +1 -1
  270. package/dist/src/extensions/extension-registry-impl.d.ts +4 -1
  271. package/dist/src/extensions/extension-registry-impl.js +8 -0
  272. package/dist/src/extensions/extension-registry-impl.js.map +1 -1
  273. package/dist/src/extensions/loader.d.ts +3 -3
  274. package/dist/src/extensions/loader.js +3 -3
  275. package/dist/src/extensions/loader.js.map +1 -1
  276. package/dist/src/extensions/sdk/testing.d.ts +2 -0
  277. package/dist/src/extensions/sdk/testing.js +7 -0
  278. package/dist/src/extensions/sdk/testing.js.map +1 -1
  279. package/dist/src/extensions/types/core.d.ts +10 -1
  280. package/dist/src/extensions/types/index.d.ts +1 -1
  281. package/dist/src/extensions/types/{phase4.d.ts → registration.d.ts} +2 -2
  282. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  283. package/dist/src/gateway/agent-builtin-tools.js +1 -1
  284. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  285. package/dist/src/gateway/agents-admin.d.ts +1 -0
  286. package/dist/src/gateway/agents-admin.js +13 -15
  287. package/dist/src/gateway/agents-admin.js.map +1 -1
  288. package/dist/src/gateway/capability-presets-admin.d.ts +1 -0
  289. package/dist/src/gateway/capability-presets-admin.js +19 -10
  290. package/dist/src/gateway/capability-presets-admin.js.map +1 -1
  291. package/dist/src/gateway/dreaming-automation-reconciler.d.ts +11 -0
  292. package/dist/src/gateway/dreaming-automation-reconciler.js +105 -0
  293. package/dist/src/gateway/dreaming-automation-reconciler.js.map +1 -0
  294. package/dist/src/gateway/heartbeat/service.d.ts +0 -2
  295. package/dist/src/gateway/heartbeat/service.js +0 -7
  296. package/dist/src/gateway/heartbeat/service.js.map +1 -1
  297. package/dist/src/gateway/hono/lib/config-payload.d.ts +5 -6
  298. package/dist/src/gateway/hono/lib/config-payload.js +2 -2
  299. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  300. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  301. package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +1 -1
  302. package/dist/src/gateway/hono/routes/config-patch/misc.js +15 -6
  303. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  304. package/dist/src/gateway/hono/routes/dreaming.js +27 -37
  305. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
  306. package/dist/src/gateway/hono/routes/home.d.ts +2 -2
  307. package/dist/src/gateway/hono/routes/home.js +34 -25
  308. package/dist/src/gateway/hono/routes/home.js.map +1 -1
  309. package/dist/src/gateway/hono/routes/lazy-bundles.js +10 -6
  310. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  311. package/dist/src/gateway/hono/routes/migrations.d.ts +3 -0
  312. package/dist/src/gateway/hono/routes/migrations.js +35 -0
  313. package/dist/src/gateway/hono/routes/migrations.js.map +1 -0
  314. package/dist/src/gateway/hono/routes/public-gateway.js +2 -1
  315. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  316. package/dist/src/gateway/hono/routes/sessions.js +14 -0
  317. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  318. package/dist/src/gateway/run-loop.js +2 -0
  319. package/dist/src/gateway/run-loop.js.map +1 -1
  320. package/dist/src/gateway/security/operator-scopes.js +5 -1
  321. package/dist/src/gateway/security/operator-scopes.js.map +1 -1
  322. package/dist/src/gateway/service/config-coordinator.d.ts +4 -4
  323. package/dist/src/gateway/service/config-coordinator.js +14 -8
  324. package/dist/src/gateway/service/config-coordinator.js.map +1 -1
  325. package/dist/src/gateway/service/sessions-api.d.ts +2 -1
  326. package/dist/src/gateway/service/sessions-api.js +6 -1
  327. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  328. package/dist/src/gateway/service.d.ts +7 -3
  329. package/dist/src/gateway/service.js +61 -27
  330. package/dist/src/gateway/service.js.map +1 -1
  331. package/dist/src/goals/goal-service.js +45 -4
  332. package/dist/src/goals/goal-service.js.map +1 -1
  333. package/dist/src/migrations/config/default-capability-preset.d.ts +10 -0
  334. package/dist/src/migrations/config/default-capability-preset.js +135 -0
  335. package/dist/src/migrations/config/default-capability-preset.js.map +1 -0
  336. package/dist/src/migrations/index.d.ts +4 -0
  337. package/dist/src/migrations/index.js +4 -0
  338. package/dist/src/migrations/registry.d.ts +8 -0
  339. package/dist/src/migrations/registry.js +18 -0
  340. package/dist/src/migrations/registry.js.map +1 -0
  341. package/dist/src/migrations/runner.d.ts +17 -0
  342. package/dist/src/migrations/runner.js +191 -0
  343. package/dist/src/migrations/runner.js.map +1 -0
  344. package/dist/src/migrations/types.d.ts +34 -0
  345. package/dist/src/notes/service.js +24 -1
  346. package/dist/src/notes/service.js.map +1 -1
  347. package/dist/src/providers/model-registry.d.ts +0 -1
  348. package/dist/src/providers/model-registry.js +0 -3
  349. package/dist/src/providers/model-registry.js.map +1 -1
  350. package/dist/src/routing/resolve-tui-session-key.d.ts +3 -0
  351. package/dist/src/routing/resolve-tui-session-key.js +14 -3
  352. package/dist/src/routing/resolve-tui-session-key.js.map +1 -1
  353. package/dist/src/session/transcript-outline.d.ts +47 -0
  354. package/dist/src/session/transcript-outline.js +481 -0
  355. package/dist/src/session/transcript-outline.js.map +1 -0
  356. package/dist/src/storage/sqlite/index.d.ts +0 -2
  357. package/dist/src/storage/sqlite/index.js +1 -3
  358. package/dist/src/storage/sqlite/migrations/016_automations.sql +47 -0
  359. package/dist/src/storage/sqlite/migrations/017_automation_run_events.sql +14 -0
  360. package/dist/src/storage/sqlite/migrations/018_automation_safety.sql +1 -0
  361. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  362. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  363. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  364. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  365. package/dist/src/storage/sqlite/row-mappers.js +3 -1
  366. package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
  367. package/dist/src/storage/sqlite/schema.js +1 -1
  368. package/dist/src/storage/sqlite/schema.sql +56 -46
  369. package/dist/src/tui/backends/embedded-backend.d.ts +6 -0
  370. package/dist/src/tui/backends/embedded-backend.js +19 -9
  371. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  372. package/dist/src/tui/backends/gateway-sse-backend.d.ts +3 -0
  373. package/dist/src/tui/backends/gateway-sse-backend.js +14 -0
  374. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  375. package/dist/src/tui/tui-backend.d.ts +4 -0
  376. package/dist/src/tui/tui-commands.d.ts +5 -0
  377. package/dist/src/tui/tui-commands.js +43 -0
  378. package/dist/src/tui/tui-commands.js.map +1 -1
  379. package/dist/src/tui/tui-transcript-tree.d.ts +1 -1
  380. package/dist/src/tui/tui-transcript-tree.js +17 -257
  381. package/dist/src/tui/tui-transcript-tree.js.map +1 -1
  382. package/dist/src/tui/tui-types.d.ts +2 -0
  383. package/dist/src/tui/tui-types.js.map +1 -1
  384. package/dist/src/tui/tui.js +7 -2
  385. package/dist/src/tui/tui.js.map +1 -1
  386. package/dist/src/workflows/domain/index.js +1 -1
  387. package/dist/src/workflows/domain/run.d.ts +7 -7
  388. package/dist/src/workflows/domain/run.js.map +1 -1
  389. package/dist/src/workflows/index.js +2 -2
  390. package/dist/src/workflows/service/workflow-run-service.d.ts +2 -0
  391. package/dist/src/workflows/service/workflow-run-service.js +31 -9
  392. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  393. package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -1
  394. package/package.json +4 -2
  395. package/dist/gateway/static/root/assets/agents-BCxZbkOw.js +0 -2
  396. package/dist/gateway/static/root/assets/app-management-settings-panel-bxYJVJpx.js +0 -1
  397. package/dist/gateway/static/root/assets/appearance-settings-BCIykXlI.js +0 -1
  398. package/dist/gateway/static/root/assets/browser-settings-page-DRhKdn81.js +0 -8
  399. package/dist/gateway/static/root/assets/capability-presets-api-CorhiHlg.js +0 -1
  400. package/dist/gateway/static/root/assets/capability-presets-settings-panel-qFx9Jtce.js +0 -1
  401. package/dist/gateway/static/root/assets/channels-settings-BAwAkqIA.js +0 -1
  402. package/dist/gateway/static/root/assets/cn-JdwAhgNB.js +0 -1
  403. package/dist/gateway/static/root/assets/connectors-page-BQLcfitM.js +0 -2
  404. package/dist/gateway/static/root/assets/createLucideIcon-DPHK1VkS.js +0 -1
  405. package/dist/gateway/static/root/assets/cron-api-qGwmL-24.js +0 -1
  406. package/dist/gateway/static/root/assets/cron-dreaming-jobs-nCMWCf0p.js +0 -1
  407. package/dist/gateway/static/root/assets/cron-page-BBWMAj8-.js +0 -3
  408. package/dist/gateway/static/root/assets/dreaming-settings-Dw89Obml.js +0 -1
  409. package/dist/gateway/static/root/assets/format-cron-label-BsotZDO5.js +0 -2
  410. package/dist/gateway/static/root/assets/format-interval-label-BzxafKxR.js +0 -1
  411. package/dist/gateway/static/root/assets/gateway-settings-Cmwy58rS.js +0 -1
  412. package/dist/gateway/static/root/assets/goal-detail-page-l7mu5GWX.js +0 -1
  413. package/dist/gateway/static/root/assets/goals-settings-CYVY4NGp.js +0 -1
  414. package/dist/gateway/static/root/assets/heartbeat-config-api-DriO_CN9.js +0 -1
  415. package/dist/gateway/static/root/assets/heartbeat-settings-CUQTKxg7.js +0 -1
  416. package/dist/gateway/static/root/assets/index-C17Tsd_b.css +0 -1
  417. package/dist/gateway/static/root/assets/index-Cc41r16l.js +0 -191
  418. package/dist/gateway/static/root/assets/interval-presets-DFPCKW_W.js +0 -1
  419. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-CcVcqstx.js +0 -1
  420. package/dist/gateway/static/root/assets/messages-B1iSKjiw.js +0 -3
  421. package/dist/gateway/static/root/assets/models-hub-panel-BfLfcta8.js +0 -2
  422. package/dist/gateway/static/root/assets/note-detail-page-BjwOQBfT.js +0 -2
  423. package/dist/gateway/static/root/assets/notes-page-DktdBiwB.js +0 -1
  424. package/dist/gateway/static/root/assets/remote-access-hub-rfVx96fq.js +0 -1
  425. package/dist/gateway/static/root/assets/schedule-field-CUCKODde.js +0 -1
  426. package/dist/gateway/static/root/assets/sessions-page-DbtMFuuH.js +0 -1
  427. package/dist/gateway/static/root/assets/settings-advanced-gate-5re5gAnP.js +0 -1
  428. package/dist/gateway/static/root/assets/settings-form-section-dmyaPOTG.js +0 -1
  429. package/dist/gateway/static/root/assets/settings-page-D-WMyLlj.js +0 -1
  430. package/dist/gateway/static/root/assets/setup-status-panel-Cl-DEJAU.js +0 -1
  431. package/dist/gateway/static/root/assets/shares-settings-CyPVvbLt.js +0 -1
  432. package/dist/gateway/static/root/assets/skill-reload-api-CleTH1oz.js +0 -1
  433. package/dist/gateway/static/root/assets/skills-page-Ck8hdXqR.js +0 -2
  434. package/dist/gateway/static/root/assets/system-settings-panel-DI-LN_8G.js +0 -1
  435. package/dist/gateway/static/root/assets/typed-models-lib-kX9duch4.js +0 -1
  436. package/dist/gateway/static/root/assets/user-profile-settings-panel-B-UFPMXy.js +0 -1
  437. package/dist/gateway/static/root/assets/utils-Dm0hKalR.js +0 -1
  438. package/dist/gateway/static/root/assets/workflows-page-BtFGp2y_.js +0 -18
  439. package/dist/src/agent/fallback/error.d.ts +0 -22
  440. package/dist/src/agent/fallback/error.js +0 -32
  441. package/dist/src/agent/fallback/error.js.map +0 -1
  442. package/dist/src/agent/fallback/index.d.ts +0 -5
  443. package/dist/src/agent/fallback/index.js +0 -9
  444. package/dist/src/agent/fallback/index.js.map +0 -1
  445. package/dist/src/agent/memory/memory-flush.d.ts +0 -27
  446. package/dist/src/agent/memory/memory-flush.js +0 -124
  447. package/dist/src/agent/memory/memory-flush.js.map +0 -1
  448. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +0 -29
  449. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +0 -76
  450. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +0 -1
  451. package/dist/src/agent/service/reconcile-dreaming-cron.d.ts +0 -6
  452. package/dist/src/agent/service/reconcile-dreaming-cron.js +0 -84
  453. package/dist/src/agent/service/reconcile-dreaming-cron.js.map +0 -1
  454. package/dist/src/agent/tools/cronjob-tool.d.ts +0 -29
  455. package/dist/src/agent/tools/cronjob-tool.js +0 -274
  456. package/dist/src/agent/tools/cronjob-tool.js.map +0 -1
  457. package/dist/src/cli/commands/cron-cli.d.ts +0 -2
  458. package/dist/src/cli/commands/cron-cli.js +0 -15
  459. package/dist/src/cli/commands/cron-cli.js.map +0 -1
  460. package/dist/src/cli/commands/cron.d.ts +0 -4
  461. package/dist/src/cli/commands/cron.js +0 -188
  462. package/dist/src/cli/commands/cron.js.map +0 -1
  463. package/dist/src/cli/commands/doctor/checks/cron-health.js +0 -35
  464. package/dist/src/cli/commands/doctor/checks/cron-health.js.map +0 -1
  465. package/dist/src/cron/execution-types.d.ts +0 -42
  466. package/dist/src/cron/executor.d.ts +0 -67
  467. package/dist/src/cron/executor.js +0 -669
  468. package/dist/src/cron/executor.js.map +0 -1
  469. package/dist/src/cron/index.d.ts +0 -7
  470. package/dist/src/cron/index.js +0 -7
  471. package/dist/src/cron/job-content.d.ts +0 -5
  472. package/dist/src/cron/job-content.js +0 -15
  473. package/dist/src/cron/job-content.js.map +0 -1
  474. package/dist/src/cron/run-log-store.d.ts +0 -12
  475. package/dist/src/cron/run-log-store.js +0 -58
  476. package/dist/src/cron/run-log-store.js.map +0 -1
  477. package/dist/src/cron/schedule.d.ts +0 -10
  478. package/dist/src/cron/schedule.js +0 -85
  479. package/dist/src/cron/schedule.js.map +0 -1
  480. package/dist/src/cron/service.d.ts +0 -58
  481. package/dist/src/cron/service.js +0 -419
  482. package/dist/src/cron/service.js.map +0 -1
  483. package/dist/src/cron/types.d.ts +0 -183
  484. package/dist/src/cron/validation.d.ts +0 -500
  485. package/dist/src/cron/validation.js +0 -192
  486. package/dist/src/cron/validation.js.map +0 -1
  487. package/dist/src/cron/workflow-run-completion.d.ts +0 -23
  488. package/dist/src/cron/workflow-run-completion.js +0 -72
  489. package/dist/src/cron/workflow-run-completion.js.map +0 -1
  490. package/dist/src/extensions/types/phase4.js +0 -1
  491. package/dist/src/gateway/hono/routes/cron.d.ts +0 -3
  492. package/dist/src/gateway/hono/routes/cron.js +0 -109
  493. package/dist/src/gateway/hono/routes/cron.js.map +0 -1
  494. package/dist/src/storage/sqlite/cron-job-repository.d.ts +0 -6
  495. package/dist/src/storage/sqlite/cron-job-repository.js +0 -70
  496. package/dist/src/storage/sqlite/cron-job-repository.js.map +0 -1
  497. package/dist/src/storage/sqlite/cron-run-repository.d.ts +0 -5
  498. package/dist/src/storage/sqlite/cron-run-repository.js +0 -96
  499. package/dist/src/storage/sqlite/cron-run-repository.js.map +0 -1
  500. /package/dist/src/{cron → automations/domain}/types.js +0 -0
  501. /package/dist/src/{config/defaults.d.ts → automations/draft/automation-draft.types.js} +0 -0
  502. /package/dist/src/{config/defaults.js → extensions/types/registration.js} +0 -0
  503. /package/dist/src/{cron/execution-types.js → migrations/types.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","names":[],"sources":["../../../src/config/profile.ts"],"sourcesContent":["import { join } from 'path';\nimport { mkdir, readdir, stat, rm } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { createLogger } from '../utils/logger.js';\nimport { resolveHomeDir, ENV_VARS } from './paths-state.js';\n\nconst log = createLogger('Profile');\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ProfileInfo {\n /** Profile name */\n name: string;\n /** Full path to state directory */\n stateDir: string;\n /** Whether this is the currently active profile */\n isActive: boolean;\n /** Number of agents in this profile */\n agentCount: number;\n /** Profile creation time */\n createdAt?: Date;\n}\n\n// ============================================\n// Path Resolution\n// ============================================\n\n/**\n * Resolve state directory for a specific profile\n */\nexport function resolveProfileStateDir(profile: string): string {\n const home = resolveHomeDir();\n return profile === 'default'\n ? join(home, '.xopc')\n : join(home, `.xopc-${profile}`);\n}\n\n/**\n * Get the name of a profile from its state directory path\n */\nexport function getProfileNameFromDir(stateDir: string): string {\n const home = resolveHomeDir();\n const relative = stateDir.replace(home, '').replace(/^\\//, '');\n\n if (relative === '.xopc') {\n return 'default';\n }\n\n const match = relative.match(/^\\.xopc-(.+)$/);\n return match ? match[1] : 'default';\n}\n\n/**\n * Get the currently active profile name from environment\n */\nexport function getCurrentProfile(): string {\n // Check XOPC_PROFILE first\n if (process.env[ENV_VARS.PROFILE]) {\n return process.env[ENV_VARS.PROFILE]!;\n }\n\n // Infer from XOPC_STATE_DIR\n if (process.env[ENV_VARS.STATE_DIR]) {\n return getProfileNameFromDir(process.env[ENV_VARS.STATE_DIR]!);\n }\n\n return 'default';\n}\n\n// ============================================\n// Profile Management\n// ============================================\n\nexport class ProfileManager {\n private readonly homeDir: string;\n\n constructor() {\n this.homeDir = resolveHomeDir();\n }\n\n /**\n * List all available profiles\n */\n async listProfiles(): Promise<ProfileInfo[]> {\n const profiles: ProfileInfo[] = [];\n const currentProfile = getCurrentProfile();\n\n // Check for default profile\n const defaultDir = join(this.homeDir, '.xopc');\n if (existsSync(defaultDir)) {\n profiles.push(await this.getProfileInfo('default', currentProfile === 'default'));\n }\n\n // Check for named profiles\n try {\n const entries = await readdir(this.homeDir, { withFileTypes: true });\n const profileDirs = entries.filter(\n (entry) =>\n entry.isDirectory() &&\n entry.name.startsWith('.xopc-') &&\n entry.name !== '.xopc'\n );\n\n for (const dir of profileDirs) {\n const name = dir.name.replace('.xopc-', '');\n profiles.push(await this.getProfileInfo(name, currentProfile === name));\n }\n } catch (error) {\n log.warn({ error }, 'Failed to list profile directories');\n }\n\n return profiles.sort((a, b) => {\n // Default profile first, then alphabetical\n if (a.name === 'default') return -1;\n if (b.name === 'default') return 1;\n return a.name.localeCompare(b.name);\n });\n }\n\n /**\n * Create a new profile\n */\n async createProfile(name: string): Promise<ProfileInfo> {\n if (name === 'default') {\n throw new Error('Cannot create a profile named \"default\", use \"init\" instead');\n }\n\n if (!/^[a-zA-Z0-9_-]+$/.test(name)) {\n throw new Error(\n 'Profile name must contain only letters, numbers, hyphens, and underscores'\n );\n }\n\n const stateDir = resolveProfileStateDir(name);\n\n if (existsSync(stateDir)) {\n throw new Error(`Profile \"${name}\" already exists at ${stateDir}`);\n }\n\n // Create basic directory structure\n await mkdir(stateDir, { recursive: true });\n await mkdir(join(stateDir, 'agents'), { recursive: true });\n await mkdir(join(stateDir, 'credentials'), { recursive: true });\n await mkdir(join(stateDir, 'extensions'), { recursive: true });\n await mkdir(join(stateDir, 'skills'), { recursive: true });\n await mkdir(join(stateDir, 'cron'), { recursive: true });\n await mkdir(join(stateDir, 'logs'), { recursive: true });\n await mkdir(join(stateDir, 'bin'), { recursive: true });\n await mkdir(join(stateDir, 'tools'), { recursive: true });\n\n log.info({ name, stateDir }, 'Created new profile');\n\n return this.getProfileInfo(name, false);\n }\n\n /**\n * Delete a profile (with safety checks)\n */\n async deleteProfile(name: string, options: { force?: boolean } = {}): Promise<void> {\n if (name === 'default') {\n throw new Error('Cannot delete the default profile');\n }\n\n const stateDir = resolveProfileStateDir(name);\n\n if (!existsSync(stateDir)) {\n throw new Error(`Profile \"${name}\" does not exist`);\n }\n\n // Safety check: don't delete if it's the current profile\n const currentProfile = getCurrentProfile();\n if (currentProfile === name && !options.force) {\n throw new Error(\n `Cannot delete profile \"${name}\" because it is currently active. ` +\n `Switch to another profile first or use --force.`\n );\n }\n\n // Delete the directory\n await rm(stateDir, { recursive: true, force: true });\n\n log.info({ name }, 'Deleted profile');\n }\n\n /**\n * Get shell command to switch to a profile\n */\n getSwitchCommand(name: string): string {\n if (name === 'default') {\n return `unset ${ENV_VARS.PROFILE}`;\n }\n return `export ${ENV_VARS.PROFILE}=${name}`;\n }\n\n /**\n * Get the profile state directory\n */\n getProfileStateDir(name: string): string {\n return resolveProfileStateDir(name);\n }\n\n // ============================================\n // Private Methods\n // ============================================\n\n private async getProfileInfo(name: string, isActive: boolean): Promise<ProfileInfo> {\n const stateDir = resolveProfileStateDir(name);\n\n let agentCount = 0;\n let createdAt: Date | undefined;\n\n try {\n const stats = await stat(stateDir);\n createdAt = stats.birthtime;\n\n // Count agents\n const agentsDir = join(stateDir, 'agents');\n if (existsSync(agentsDir)) {\n const entries = await readdir(agentsDir, { withFileTypes: true });\n agentCount = entries.filter((e) => e.isDirectory()).length;\n }\n } catch (error) {\n log.warn({ name, error }, 'Failed to get profile stats');\n }\n\n return {\n name,\n stateDir,\n isActive,\n agentCount,\n createdAt,\n };\n }\n}\n\n// ============================================\n// Convenience Functions\n// ============================================\n\nlet defaultManager: ProfileManager | null = null;\n\nexport function getProfileManager(): ProfileManager {\n if (!defaultManager) {\n defaultManager = new ProfileManager();\n }\n return defaultManager;\n}\n\nexport async function listProfiles(): Promise<ProfileInfo[]> {\n const manager = getProfileManager();\n return manager.listProfiles();\n}\n\nexport async function createProfile(name: string): Promise<ProfileInfo> {\n const manager = getProfileManager();\n return manager.createProfile(name);\n}\n\nexport async function deleteProfile(name: string, options?: { force?: boolean }): Promise<void> {\n const manager = getProfileManager();\n return manager.deleteProfile(name, options);\n}\n\nexport function getSwitchCommand(name: string): string {\n const manager = getProfileManager();\n return manager.getSwitchCommand(name);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","names":[],"sources":["../../../src/config/profile.ts"],"sourcesContent":["import { join } from 'path';\nimport { mkdir, readdir, stat, rm } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { createLogger } from '../utils/logger.js';\nimport { resolveHomeDir, ENV_VARS } from './paths-state.js';\n\nconst log = createLogger('Profile');\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ProfileInfo {\n /** Profile name */\n name: string;\n /** Full path to state directory */\n stateDir: string;\n /** Whether this is the currently active profile */\n isActive: boolean;\n /** Number of agents in this profile */\n agentCount: number;\n /** Profile creation time */\n createdAt?: Date;\n}\n\n// ============================================\n// Path Resolution\n// ============================================\n\n/**\n * Resolve state directory for a specific profile\n */\nexport function resolveProfileStateDir(profile: string): string {\n const home = resolveHomeDir();\n return profile === 'default'\n ? join(home, '.xopc')\n : join(home, `.xopc-${profile}`);\n}\n\n/**\n * Get the name of a profile from its state directory path\n */\nexport function getProfileNameFromDir(stateDir: string): string {\n const home = resolveHomeDir();\n const relative = stateDir.replace(home, '').replace(/^\\//, '');\n\n if (relative === '.xopc') {\n return 'default';\n }\n\n const match = relative.match(/^\\.xopc-(.+)$/);\n return match ? match[1] : 'default';\n}\n\n/**\n * Get the currently active profile name from environment\n */\nexport function getCurrentProfile(): string {\n // Check XOPC_PROFILE first\n if (process.env[ENV_VARS.PROFILE]) {\n return process.env[ENV_VARS.PROFILE]!;\n }\n\n // Infer from XOPC_STATE_DIR\n if (process.env[ENV_VARS.STATE_DIR]) {\n return getProfileNameFromDir(process.env[ENV_VARS.STATE_DIR]!);\n }\n\n return 'default';\n}\n\n// ============================================\n// Profile Management\n// ============================================\n\nexport class ProfileManager {\n private readonly homeDir: string;\n\n constructor() {\n this.homeDir = resolveHomeDir();\n }\n\n /**\n * List all available profiles\n */\n async listProfiles(): Promise<ProfileInfo[]> {\n const profiles: ProfileInfo[] = [];\n const currentProfile = getCurrentProfile();\n\n // Check for default profile\n const defaultDir = join(this.homeDir, '.xopc');\n if (existsSync(defaultDir)) {\n profiles.push(await this.getProfileInfo('default', currentProfile === 'default'));\n }\n\n // Check for named profiles\n try {\n const entries = await readdir(this.homeDir, { withFileTypes: true });\n const profileDirs = entries.filter(\n (entry) =>\n entry.isDirectory() &&\n entry.name.startsWith('.xopc-') &&\n entry.name !== '.xopc'\n );\n\n for (const dir of profileDirs) {\n const name = dir.name.replace('.xopc-', '');\n profiles.push(await this.getProfileInfo(name, currentProfile === name));\n }\n } catch (error) {\n log.warn({ error }, 'Failed to list profile directories');\n }\n\n return profiles.sort((a, b) => {\n // Default profile first, then alphabetical\n if (a.name === 'default') return -1;\n if (b.name === 'default') return 1;\n return a.name.localeCompare(b.name);\n });\n }\n\n /**\n * Create a new profile\n */\n async createProfile(name: string): Promise<ProfileInfo> {\n if (name === 'default') {\n throw new Error('Cannot create a profile named \"default\", use \"init\" instead');\n }\n\n if (!/^[a-zA-Z0-9_-]+$/.test(name)) {\n throw new Error(\n 'Profile name must contain only letters, numbers, hyphens, and underscores'\n );\n }\n\n const stateDir = resolveProfileStateDir(name);\n\n if (existsSync(stateDir)) {\n throw new Error(`Profile \"${name}\" already exists at ${stateDir}`);\n }\n\n // Create basic directory structure\n await mkdir(stateDir, { recursive: true });\n await mkdir(join(stateDir, 'agents'), { recursive: true });\n await mkdir(join(stateDir, 'credentials'), { recursive: true });\n await mkdir(join(stateDir, 'extensions'), { recursive: true });\n await mkdir(join(stateDir, 'skills'), { recursive: true });\n await mkdir(join(stateDir, 'logs'), { recursive: true });\n await mkdir(join(stateDir, 'bin'), { recursive: true });\n await mkdir(join(stateDir, 'tools'), { recursive: true });\n\n log.info({ name, stateDir }, 'Created new profile');\n\n return this.getProfileInfo(name, false);\n }\n\n /**\n * Delete a profile (with safety checks)\n */\n async deleteProfile(name: string, options: { force?: boolean } = {}): Promise<void> {\n if (name === 'default') {\n throw new Error('Cannot delete the default profile');\n }\n\n const stateDir = resolveProfileStateDir(name);\n\n if (!existsSync(stateDir)) {\n throw new Error(`Profile \"${name}\" does not exist`);\n }\n\n // Safety check: don't delete if it's the current profile\n const currentProfile = getCurrentProfile();\n if (currentProfile === name && !options.force) {\n throw new Error(\n `Cannot delete profile \"${name}\" because it is currently active. ` +\n `Switch to another profile first or use --force.`\n );\n }\n\n // Delete the directory\n await rm(stateDir, { recursive: true, force: true });\n\n log.info({ name }, 'Deleted profile');\n }\n\n /**\n * Get shell command to switch to a profile\n */\n getSwitchCommand(name: string): string {\n if (name === 'default') {\n return `unset ${ENV_VARS.PROFILE}`;\n }\n return `export ${ENV_VARS.PROFILE}=${name}`;\n }\n\n /**\n * Get the profile state directory\n */\n getProfileStateDir(name: string): string {\n return resolveProfileStateDir(name);\n }\n\n // ============================================\n // Private Methods\n // ============================================\n\n private async getProfileInfo(name: string, isActive: boolean): Promise<ProfileInfo> {\n const stateDir = resolveProfileStateDir(name);\n\n let agentCount = 0;\n let createdAt: Date | undefined;\n\n try {\n const stats = await stat(stateDir);\n createdAt = stats.birthtime;\n\n // Count agents\n const agentsDir = join(stateDir, 'agents');\n if (existsSync(agentsDir)) {\n const entries = await readdir(agentsDir, { withFileTypes: true });\n agentCount = entries.filter((e) => e.isDirectory()).length;\n }\n } catch (error) {\n log.warn({ name, error }, 'Failed to get profile stats');\n }\n\n return {\n name,\n stateDir,\n isActive,\n agentCount,\n createdAt,\n };\n }\n}\n\n// ============================================\n// Convenience Functions\n// ============================================\n\nlet defaultManager: ProfileManager | null = null;\n\nexport function getProfileManager(): ProfileManager {\n if (!defaultManager) {\n defaultManager = new ProfileManager();\n }\n return defaultManager;\n}\n\nexport async function listProfiles(): Promise<ProfileInfo[]> {\n const manager = getProfileManager();\n return manager.listProfiles();\n}\n\nexport async function createProfile(name: string): Promise<ProfileInfo> {\n const manager = getProfileManager();\n return manager.createProfile(name);\n}\n\nexport async function deleteProfile(name: string, options?: { force?: boolean }): Promise<void> {\n const manager = getProfileManager();\n return manager.deleteProfile(name, options);\n}\n\nexport function getSwitchCommand(name: string): string {\n const manager = getProfileManager();\n return manager.getSwitchCommand(name);\n}\n"],"mappings":"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"}
@@ -138,11 +138,6 @@ const BASE_RELOAD_RULES = [
138
138
  kind: "hot",
139
139
  description: "Any channel subtree (e.g. future extensions)"
140
140
  },
141
- {
142
- prefix: "cron",
143
- kind: "hot",
144
- description: "Scheduled tasks"
145
- },
146
141
  {
147
142
  prefix: "gateway.heartbeat",
148
143
  kind: "hot",
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","names":[],"sources":["../../../src/config/rules.ts"],"sourcesContent":["/**\n * Configuration reload rules\n * \n * Defines how different config paths are handled:\n * - hot: Apply changes immediately without restart\n * - restart: Require gateway restart\n * - none: Ignore changes (no action needed)\n */\n\nexport type ReloadKind = 'hot' | 'restart' | 'none';\n\nexport interface ReloadRule {\n prefix: string;\n kind: ReloadKind;\n description?: string;\n}\n\nexport interface ReloadPlan {\n changedPaths: string[];\n hotPaths: string[];\n restartPaths: string[];\n noopPaths: string[];\n requiresRestart: boolean;\n requiresHotReload: boolean;\n}\n\n/**\n * Base reload rules for config paths\n */\nexport const BASE_RELOAD_RULES: ReloadRule[] = [\n // Models config - hot reload\n { prefix: 'models.providers', kind: 'hot', description: 'Model provider API keys, base URLs' },\n { prefix: 'models.mode', kind: 'hot', description: 'Model merge mode' },\n \n { prefix: 'agents.list', kind: 'hot', description: 'Agent manifests' },\n { prefix: 'agents.capabilityPresets', kind: 'hot', description: 'Agent capability presets' },\n { prefix: 'agents.default', kind: 'hot', description: 'Default agent id' },\n \n // Gateway - restart required\n { prefix: 'gateway.bind', kind: 'restart', description: 'Gateway bind mode' },\n { prefix: 'gateway.customBindHost', kind: 'restart', description: 'Gateway custom bind host' },\n { prefix: 'gateway.port', kind: 'restart', description: 'Port number' },\n { prefix: 'gateway.mode', kind: 'restart', description: 'Gateway local/remote CLI mode' },\n { prefix: 'gateway.remote', kind: 'restart', description: 'Remote gateway CLI target' },\n { prefix: 'gateway.tailscale', kind: 'restart', description: 'Tailscale Serve/Funnel exposure' },\n { prefix: 'gateway.tls', kind: 'restart', description: 'Gateway native TLS' },\n { prefix: 'gateway.auth', kind: 'restart', description: 'Authentication settings' },\n { prefix: 'gateway.security', kind: 'restart', description: 'Gateway security policy' },\n { prefix: 'gateway.corsOrigins', kind: 'restart', description: 'CORS settings' },\n { prefix: 'gateway.trustedProxies', kind: 'restart', description: 'Trusted reverse proxy CIDRs' },\n {\n prefix: 'gateway.allowRealIpFallback',\n kind: 'restart',\n description: 'Trusted-proxy X-Real-IP fallback',\n },\n {\n prefix: 'gateway.dangerouslyAllowHostHeaderOriginFallback',\n kind: 'restart',\n description: 'Host-header origin fallback',\n },\n { prefix: 'gateway.maxSseConnections', kind: 'restart', description: 'SSE connection limit' },\n { prefix: 'gateway.channelConnectDeferMode', kind: 'restart', description: 'Channel connect defer mode' },\n { prefix: 'gateway.channelConnectDeferIds', kind: 'restart', description: 'Explicit channel connect defer list' },\n { prefix: 'gateway.channelConnectDeferSkipIds', kind: 'restart', description: 'Channel connect defer skip list' },\n { prefix: 'gateway.share', kind: 'restart', description: 'File share policy' },\n { prefix: 'gateway.siteShare', kind: 'restart', description: 'Site share policy' },\n {\n prefix: 'gateway.skillsStoreBaseUrl',\n kind: 'restart',\n description: 'Skills marketplace API base URL',\n },\n { prefix: 'gateway.enableHotReload', kind: 'hot', description: 'Hot reload toggle' },\n \n // Channels - hot reload (channel-specific prefixes are registered by channel plugins)\n { prefix: 'channels', kind: 'hot', description: 'Any channel subtree (e.g. future extensions)' },\n \n // Cron - hot reload\n { prefix: 'cron', kind: 'hot', description: 'Scheduled tasks' },\n \n // Heartbeat lives under gateway.heartbeat in config JSON (not top-level `heartbeat`)\n { prefix: 'gateway.heartbeat', kind: 'hot', description: 'Heartbeat settings' },\n \n // Web search - hot reload\n { prefix: 'webSearch', kind: 'hot', description: 'Web search settings' },\n { prefix: 'webTools', kind: 'hot', description: 'Web tools settings' },\n \n // Extension list toggles — still require process restart to load/unload modules\n {\n prefix: 'extensions.enabled',\n kind: 'restart',\n description: 'Extension enable list (requires restart)',\n },\n {\n prefix: 'extensions.disabled',\n kind: 'restart',\n description: 'Extension disable list (requires restart)',\n },\n // Extension instance config — hot-reloaded via extension registerReload handlers\n {\n prefix: 'extensions',\n kind: 'hot',\n description: 'Extension configuration (hot-reloaded via extension handlers)',\n },\n \n // Tools - hot reload (for tool-specific settings)\n { prefix: 'tools', kind: 'hot', description: 'Tools configuration' },\n\n // MCP servers - hot reload (dispose and reconnect runtimes)\n { prefix: 'mcp', kind: 'hot', description: 'MCP server definitions and idle TTL' },\n\n // Tunnel E2E TLS — restart (local HTTPS terminator port)\n { prefix: 'tunnel', kind: 'hot', description: 'Tunnel broker and auto-start settings' },\n];\n\nfunction getChannelReloadRules(): ReloadRule[] {\n return [];\n}\n\nfunction mergedReloadRules(): ReloadRule[] {\n return [...BASE_RELOAD_RULES, ...getChannelReloadRules()];\n}\n\n/**\n * Find matching rule for a config path\n */\nexport function matchReloadRule(path: string): ReloadRule | null {\n const merged = mergedReloadRules();\n const exact = merged.find((r) => r.prefix === path);\n if (exact) return exact;\n const sorted = [...merged].sort((a, b) => b.prefix.length - a.prefix.length);\n for (const rule of sorted) {\n if (path === rule.prefix || path.startsWith(`${rule.prefix}.`)) {\n return rule;\n }\n }\n return null;\n}\n\n/**\n * Build reload plan from changed paths\n */\nexport function buildReloadPlan(changedPaths: string[]): ReloadPlan {\n const plan: ReloadPlan = {\n changedPaths,\n hotPaths: [],\n restartPaths: [],\n noopPaths: [],\n requiresRestart: false,\n requiresHotReload: false,\n };\n\n for (const path of changedPaths) {\n const rule = matchReloadRule(path);\n \n if (!rule) {\n // No rule matched - default to restart for safety\n plan.restartPaths.push(path);\n plan.requiresRestart = true;\n continue;\n }\n\n switch (rule.kind) {\n case 'hot':\n plan.hotPaths.push(path);\n plan.requiresHotReload = true;\n break;\n case 'restart':\n plan.restartPaths.push(path);\n plan.requiresRestart = true;\n break;\n case 'none':\n plan.noopPaths.push(path);\n break;\n }\n }\n\n return plan;\n}\n"],"mappings":";;;;AA6BA,MAAa,oBAAkC;CAE7C;EAAE,QAAQ;EAAoB,MAAM;EAAO,aAAa;EAAsC;CAC9F;EAAE,QAAQ;EAAe,MAAM;EAAO,aAAa;EAAoB;CAEvE;EAAE,QAAQ;EAAe,MAAM;EAAO,aAAa;EAAmB;CACtE;EAAE,QAAQ;EAA4B,MAAM;EAAO,aAAa;EAA4B;CAC5F;EAAE,QAAQ;EAAkB,MAAM;EAAO,aAAa;EAAoB;CAG1E;EAAE,QAAQ;EAAgB,MAAM;EAAW,aAAa;EAAqB;CAC7E;EAAE,QAAQ;EAA0B,MAAM;EAAW,aAAa;EAA4B;CAC9F;EAAE,QAAQ;EAAgB,MAAM;EAAW,aAAa;EAAe;CACvE;EAAE,QAAQ;EAAgB,MAAM;EAAW,aAAa;EAAiC;CACzF;EAAE,QAAQ;EAAkB,MAAM;EAAW,aAAa;EAA6B;CACvF;EAAE,QAAQ;EAAqB,MAAM;EAAW,aAAa;EAAmC;CAChG;EAAE,QAAQ;EAAe,MAAM;EAAW,aAAa;EAAsB;CAC7E;EAAE,QAAQ;EAAgB,MAAM;EAAW,aAAa;EAA2B;CACnF;EAAE,QAAQ;EAAoB,MAAM;EAAW,aAAa;EAA2B;CACvF;EAAE,QAAQ;EAAuB,MAAM;EAAW,aAAa;EAAiB;CAChF;EAAE,QAAQ;EAA0B,MAAM;EAAW,aAAa;EAA+B;CACjG;EACE,QAAQ;EACR,MAAM;EACN,aAAa;EACd;CACD;EACE,QAAQ;EACR,MAAM;EACN,aAAa;EACd;CACD;EAAE,QAAQ;EAA6B,MAAM;EAAW,aAAa;EAAwB;CAC7F;EAAE,QAAQ;EAAmC,MAAM;EAAW,aAAa;EAA8B;CACzG;EAAE,QAAQ;EAAkC,MAAM;EAAW,aAAa;EAAuC;CACjH;EAAE,QAAQ;EAAsC,MAAM;EAAW,aAAa;EAAmC;CACjH;EAAE,QAAQ;EAAiB,MAAM;EAAW,aAAa;EAAqB;CAC9E;EAAE,QAAQ;EAAqB,MAAM;EAAW,aAAa;EAAqB;CAClF;EACE,QAAQ;EACR,MAAM;EACN,aAAa;EACd;CACD;EAAE,QAAQ;EAA2B,MAAM;EAAO,aAAa;EAAqB;CAGpF;EAAE,QAAQ;EAAY,MAAM;EAAO,aAAa;EAAgD;CAGhG;EAAE,QAAQ;EAAQ,MAAM;EAAO,aAAa;EAAmB;CAG/D;EAAE,QAAQ;EAAqB,MAAM;EAAO,aAAa;EAAsB;CAG/E;EAAE,QAAQ;EAAa,MAAM;EAAO,aAAa;EAAuB;CACxE;EAAE,QAAQ;EAAY,MAAM;EAAO,aAAa;EAAsB;CAGtE;EACE,QAAQ;EACR,MAAM;EACN,aAAa;EACd;CACD;EACE,QAAQ;EACR,MAAM;EACN,aAAa;EACd;CAED;EACE,QAAQ;EACR,MAAM;EACN,aAAa;EACd;CAGD;EAAE,QAAQ;EAAS,MAAM;EAAO,aAAa;EAAuB;CAGpE;EAAE,QAAQ;EAAO,MAAM;EAAO,aAAa;EAAuC;CAGlF;EAAE,QAAQ;EAAU,MAAM;EAAO,aAAa;EAAyC;CACxF;AAED,SAAS,wBAAsC;AAC7C,QAAO,EAAE;;AAGX,SAAS,oBAAkC;AACzC,QAAO,CAAC,GAAG,mBAAmB,GAAG,uBAAuB,CAAC;;;;;AAM3D,SAAgB,gBAAgB,MAAiC;CAC/D,MAAM,SAAS,mBAAmB;CAClC,MAAM,QAAQ,OAAO,MAAM,MAAM,EAAE,WAAW,KAAK;AACnD,KAAI,MAAO,QAAO;CAClB,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,SAAS,EAAE,OAAO,OAAO;AAC5E,MAAK,MAAM,QAAQ,OACjB,KAAI,SAAS,KAAK,UAAU,KAAK,WAAW,GAAG,KAAK,OAAO,GAAG,CAC5D,QAAO;AAGX,QAAO;;;;;AAMT,SAAgB,gBAAgB,cAAoC;CAClE,MAAM,OAAmB;EACvB;EACA,UAAU,EAAE;EACZ,cAAc,EAAE;EAChB,WAAW,EAAE;EACb,iBAAiB;EACjB,mBAAmB;EACpB;AAED,MAAK,MAAM,QAAQ,cAAc;EAC/B,MAAM,OAAO,gBAAgB,KAAK;AAElC,MAAI,CAAC,MAAM;AAET,QAAK,aAAa,KAAK,KAAK;AAC5B,QAAK,kBAAkB;AACvB;;AAGF,UAAQ,KAAK,MAAb;GACE,KAAK;AACH,SAAK,SAAS,KAAK,KAAK;AACxB,SAAK,oBAAoB;AACzB;GACF,KAAK;AACH,SAAK,aAAa,KAAK,KAAK;AAC5B,SAAK,kBAAkB;AACvB;GACF,KAAK;AACH,SAAK,UAAU,KAAK,KAAK;AACzB;;;AAIN,QAAO"}
1
+ {"version":3,"file":"rules.js","names":[],"sources":["../../../src/config/rules.ts"],"sourcesContent":["/**\n * Configuration reload rules\n * \n * Defines how different config paths are handled:\n * - hot: Apply changes immediately without restart\n * - restart: Require gateway restart\n * - none: Ignore changes (no action needed)\n */\n\nexport type ReloadKind = 'hot' | 'restart' | 'none';\n\nexport interface ReloadRule {\n prefix: string;\n kind: ReloadKind;\n description?: string;\n}\n\nexport interface ReloadPlan {\n changedPaths: string[];\n hotPaths: string[];\n restartPaths: string[];\n noopPaths: string[];\n requiresRestart: boolean;\n requiresHotReload: boolean;\n}\n\n/**\n * Base reload rules for config paths\n */\nexport const BASE_RELOAD_RULES: ReloadRule[] = [\n // Models config - hot reload\n { prefix: 'models.providers', kind: 'hot', description: 'Model provider API keys, base URLs' },\n { prefix: 'models.mode', kind: 'hot', description: 'Model merge mode' },\n \n { prefix: 'agents.list', kind: 'hot', description: 'Agent manifests' },\n { prefix: 'agents.capabilityPresets', kind: 'hot', description: 'Agent capability presets' },\n { prefix: 'agents.default', kind: 'hot', description: 'Default agent id' },\n \n // Gateway - restart required\n { prefix: 'gateway.bind', kind: 'restart', description: 'Gateway bind mode' },\n { prefix: 'gateway.customBindHost', kind: 'restart', description: 'Gateway custom bind host' },\n { prefix: 'gateway.port', kind: 'restart', description: 'Port number' },\n { prefix: 'gateway.mode', kind: 'restart', description: 'Gateway local/remote CLI mode' },\n { prefix: 'gateway.remote', kind: 'restart', description: 'Remote gateway CLI target' },\n { prefix: 'gateway.tailscale', kind: 'restart', description: 'Tailscale Serve/Funnel exposure' },\n { prefix: 'gateway.tls', kind: 'restart', description: 'Gateway native TLS' },\n { prefix: 'gateway.auth', kind: 'restart', description: 'Authentication settings' },\n { prefix: 'gateway.security', kind: 'restart', description: 'Gateway security policy' },\n { prefix: 'gateway.corsOrigins', kind: 'restart', description: 'CORS settings' },\n { prefix: 'gateway.trustedProxies', kind: 'restart', description: 'Trusted reverse proxy CIDRs' },\n {\n prefix: 'gateway.allowRealIpFallback',\n kind: 'restart',\n description: 'Trusted-proxy X-Real-IP fallback',\n },\n {\n prefix: 'gateway.dangerouslyAllowHostHeaderOriginFallback',\n kind: 'restart',\n description: 'Host-header origin fallback',\n },\n { prefix: 'gateway.maxSseConnections', kind: 'restart', description: 'SSE connection limit' },\n { prefix: 'gateway.channelConnectDeferMode', kind: 'restart', description: 'Channel connect defer mode' },\n { prefix: 'gateway.channelConnectDeferIds', kind: 'restart', description: 'Explicit channel connect defer list' },\n { prefix: 'gateway.channelConnectDeferSkipIds', kind: 'restart', description: 'Channel connect defer skip list' },\n { prefix: 'gateway.share', kind: 'restart', description: 'File share policy' },\n { prefix: 'gateway.siteShare', kind: 'restart', description: 'Site share policy' },\n {\n prefix: 'gateway.skillsStoreBaseUrl',\n kind: 'restart',\n description: 'Skills marketplace API base URL',\n },\n { prefix: 'gateway.enableHotReload', kind: 'hot', description: 'Hot reload toggle' },\n \n // Channels - hot reload (channel-specific prefixes are registered by channel plugins)\n { prefix: 'channels', kind: 'hot', description: 'Any channel subtree (e.g. future extensions)' },\n \n // Heartbeat lives under gateway.heartbeat in config JSON (not top-level `heartbeat`)\n { prefix: 'gateway.heartbeat', kind: 'hot', description: 'Heartbeat settings' },\n \n // Web search - hot reload\n { prefix: 'webSearch', kind: 'hot', description: 'Web search settings' },\n { prefix: 'webTools', kind: 'hot', description: 'Web tools settings' },\n \n // Extension list toggles — still require process restart to load/unload modules\n {\n prefix: 'extensions.enabled',\n kind: 'restart',\n description: 'Extension enable list (requires restart)',\n },\n {\n prefix: 'extensions.disabled',\n kind: 'restart',\n description: 'Extension disable list (requires restart)',\n },\n // Extension instance config — hot-reloaded via extension registerReload handlers\n {\n prefix: 'extensions',\n kind: 'hot',\n description: 'Extension configuration (hot-reloaded via extension handlers)',\n },\n \n // Tools - hot reload (for tool-specific settings)\n { prefix: 'tools', kind: 'hot', description: 'Tools configuration' },\n\n // MCP servers - hot reload (dispose and reconnect runtimes)\n { prefix: 'mcp', kind: 'hot', description: 'MCP server definitions and idle TTL' },\n\n // Tunnel E2E TLS — restart (local HTTPS terminator port)\n { prefix: 'tunnel', kind: 'hot', description: 'Tunnel broker and auto-start settings' },\n];\n\nfunction getChannelReloadRules(): ReloadRule[] {\n return [];\n}\n\nfunction mergedReloadRules(): ReloadRule[] {\n return [...BASE_RELOAD_RULES, ...getChannelReloadRules()];\n}\n\n/**\n * Find matching rule for a config path\n */\nexport function matchReloadRule(path: string): ReloadRule | null {\n const merged = mergedReloadRules();\n const exact = merged.find((r) => r.prefix === path);\n if (exact) return exact;\n const sorted = [...merged].sort((a, b) => b.prefix.length - a.prefix.length);\n for (const rule of sorted) {\n if (path === rule.prefix || path.startsWith(`${rule.prefix}.`)) {\n return rule;\n }\n }\n return null;\n}\n\n/**\n * Build reload plan from changed paths\n */\nexport function buildReloadPlan(changedPaths: string[]): ReloadPlan {\n const plan: ReloadPlan = {\n changedPaths,\n hotPaths: [],\n restartPaths: [],\n noopPaths: [],\n requiresRestart: false,\n requiresHotReload: false,\n };\n\n for (const path of changedPaths) {\n const rule = matchReloadRule(path);\n \n if (!rule) {\n // No rule matched - default to restart for safety\n plan.restartPaths.push(path);\n plan.requiresRestart = true;\n continue;\n }\n\n switch (rule.kind) {\n case 'hot':\n plan.hotPaths.push(path);\n plan.requiresHotReload = true;\n break;\n case 'restart':\n plan.restartPaths.push(path);\n plan.requiresRestart = true;\n break;\n case 'none':\n plan.noopPaths.push(path);\n break;\n }\n }\n\n return plan;\n}\n"],"mappings":"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"}
@@ -12,6 +12,7 @@ export type AgentModelConfig = z.infer<typeof AgentModelRefSchema>;
12
12
  export declare const AgentTypedModelRoleSchema: z.ZodObject<{
13
13
  description: z.ZodOptional<z.ZodString>;
14
14
  model: z.ZodString;
15
+ fallbacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
16
  }, z.core.$strict>;
16
17
  export type AgentTypedModelRole = z.infer<typeof AgentTypedModelRoleSchema>;
17
18
  export declare const AgentModelsSchema: z.ZodOptional<z.ZodObject<{
@@ -19,6 +20,7 @@ export declare const AgentModelsSchema: z.ZodOptional<z.ZodObject<{
19
20
  roles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
20
21
  description: z.ZodOptional<z.ZodString>;
21
22
  model: z.ZodString;
23
+ fallbacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
22
24
  }, z.core.$strict>>>;
23
25
  }, z.core.$strict>>;
24
26
  export type AgentModelsConfig = z.infer<typeof AgentModelsSchema>;
@@ -49,6 +51,7 @@ export declare const AgentsConfigSchema: z.ZodDefault<z.ZodObject<{
49
51
  defaultRole: z.ZodOptional<z.ZodString>;
50
52
  roles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
51
53
  model: z.ZodString;
54
+ fallbacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
52
55
  description: z.ZodOptional<z.ZodString>;
53
56
  }, z.core.$strict>>>;
54
57
  policy: z.ZodOptional<z.ZodObject<{
@@ -471,6 +474,7 @@ export declare const AgentsConfigSchema: z.ZodDefault<z.ZodObject<{
471
474
  defaultRole: z.ZodString;
472
475
  roles: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
473
476
  model: z.ZodString;
477
+ fallbacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
474
478
  description: z.ZodOptional<z.ZodString>;
475
479
  }, z.core.$strict>>>;
476
480
  policy: z.ZodOptional<z.ZodObject<{
@@ -1115,12 +1119,6 @@ export declare const GatewayConfigSchema: z.ZodDefault<z.ZodObject<{
1115
1119
  }, z.core.$strip>>;
1116
1120
  }, z.core.$strip>>;
1117
1121
  }, z.core.$strip>>;
1118
- export declare const CronConfigSchema: z.ZodDefault<z.ZodObject<{
1119
- enabled: z.ZodOptional<z.ZodBoolean>;
1120
- maxConcurrentJobs: z.ZodOptional<z.ZodNumber>;
1121
- historyRetentionDays: z.ZodOptional<z.ZodNumber>;
1122
- enableMetrics: z.ZodOptional<z.ZodBoolean>;
1123
- }, z.core.$strip>>;
1124
1122
  export declare const ModelsDevConfigSchema: z.ZodDefault<z.ZodObject<{
1125
1123
  enabled: z.ZodDefault<z.ZodBoolean>;
1126
1124
  }, z.core.$strip>>;
@@ -1584,6 +1582,10 @@ export declare const CommandsConfigSchema: z.ZodOptional<z.ZodObject<{
1584
1582
  restart: z.ZodOptional<z.ZodBoolean>;
1585
1583
  }, z.core.$strict>>;
1586
1584
  export type CommandsConfig = z.infer<typeof CommandsConfigSchema>;
1585
+ export declare const TuiConfigSchema: z.ZodDefault<z.ZodObject<{
1586
+ defaultAgent: z.ZodOptional<z.ZodString>;
1587
+ }, z.core.$strict>>;
1588
+ export type TuiConfig = z.infer<typeof TuiConfigSchema>;
1587
1589
  export declare const McpServerSchema: z.ZodObject<{
1588
1590
  command: z.ZodOptional<z.ZodString>;
1589
1591
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -1655,6 +1657,7 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
1655
1657
  defaultRole: z.ZodOptional<z.ZodString>;
1656
1658
  roles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
1657
1659
  model: z.ZodString;
1660
+ fallbacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
1658
1661
  description: z.ZodOptional<z.ZodString>;
1659
1662
  }, z.core.$strict>>>;
1660
1663
  policy: z.ZodOptional<z.ZodObject<{
@@ -2077,6 +2080,7 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
2077
2080
  defaultRole: z.ZodString;
2078
2081
  roles: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2079
2082
  model: z.ZodString;
2083
+ fallbacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
2080
2084
  description: z.ZodOptional<z.ZodString>;
2081
2085
  }, z.core.$strict>>>;
2082
2086
  policy: z.ZodOptional<z.ZodObject<{
@@ -2487,12 +2491,6 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
2487
2491
  connectors: z.ZodOptional<z.ZodObject<{
2488
2492
  instances: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
2489
2493
  }, z.core.$strict>>;
2490
- cron: z.ZodDefault<z.ZodObject<{
2491
- enabled: z.ZodOptional<z.ZodBoolean>;
2492
- maxConcurrentJobs: z.ZodOptional<z.ZodNumber>;
2493
- historyRetentionDays: z.ZodOptional<z.ZodNumber>;
2494
- enableMetrics: z.ZodOptional<z.ZodBoolean>;
2495
- }, z.core.$strip>>;
2496
2494
  goals: z.ZodOptional<z.ZodObject<{
2497
2495
  maxTurns: z.ZodDefault<z.ZodNumber>;
2498
2496
  judgeModelRef: z.ZodOptional<z.ZodString>;
@@ -2610,6 +2608,9 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
2610
2608
  commands: z.ZodOptional<z.ZodObject<{
2611
2609
  restart: z.ZodOptional<z.ZodBoolean>;
2612
2610
  }, z.core.$strict>>;
2611
+ tui: z.ZodDefault<z.ZodObject<{
2612
+ defaultAgent: z.ZodOptional<z.ZodString>;
2613
+ }, z.core.$strict>>;
2613
2614
  }, z.core.$strip>>;
2614
2615
  export type Config = z.infer<typeof ConfigSchema>;
2615
2616
  export type GatewayAuthConfig = z.infer<typeof GatewayAuthSchema>;
@@ -42,7 +42,7 @@ function parseModelRef(ref) {
42
42
  model: trimmed.slice(idx + 1).trim()
43
43
  };
44
44
  }
45
- var AgentModelRefSchema, AgentTypedModelRoleSchema, AgentTypedModelRolesSchema, AgentModelsSchema, AgentImageGenerationModelSchema, AgentsConfigSchema, BrowserCloudConfigSchema, BrowserExtensionConfigSchema, BrowserCloakConfigSchema, BrowserConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, SessionResetModeSchema, SessionResetConfigSchema, SessionResetByTypeSchema, SessionScopeSchema, SessionConfigSchema, ChannelsConfigSchema, SearchProviderEntrySchema, WebSearchConfigSchema, WebsiteBlocklistSchema, WebToolsConfigSchema, ToolsConfigSchema, GatewayAuthRateLimitSchema, GatewaySecuritySchema, GatewayTrustedProxySchema, GatewayAuthSchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayRemoteSchema, GatewayTlsSchema, GatewayModeSchema, HeartbeatConfigSchema, GatewayChannelConnectDeferModeSchema, TunnelConsentSchema, TunnelConfigSchema, WorkspaceImportConfigSchema, WorkspaceConfigSchema, GatewayBindModeSchema, GatewayConfigSchema, CronConfigSchema, ModelsDevConfigSchema, SttProviderConfigCatchallSchema, STTProviderConfigSchema, STTFallbackConfigSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, STTConfigSchema, TtsProviderConfigCatchallSchema, TTSProviderConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSEdgeConfigSchema, TTSSummarizationConfigSchema, TTSConfigSchema, MessagesConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProviderAuthConfigSchema, ProvidersConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, UpdateAutoConfigSchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, UpdateConfigSchema, CommandsConfigSchema, McpHttpUrlSchema, ConnectorSecretReferenceSchema, McpConfigScalarSchema, McpServerSchema, McpConfigSchema, ConnectorsConfigSchema, ConfigSchema;
45
+ var AgentModelRefSchema, AgentTypedModelRoleSchema, AgentTypedModelRolesSchema, AgentModelsSchema, AgentImageGenerationModelSchema, AgentsConfigSchema, BrowserCloudConfigSchema, BrowserExtensionConfigSchema, BrowserCloakConfigSchema, BrowserConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, SessionResetModeSchema, SessionResetConfigSchema, SessionResetByTypeSchema, SessionScopeSchema, SessionConfigSchema, ChannelsConfigSchema, SearchProviderEntrySchema, WebSearchConfigSchema, WebsiteBlocklistSchema, WebToolsConfigSchema, ToolsConfigSchema, GatewayAuthRateLimitSchema, GatewaySecuritySchema, GatewayTrustedProxySchema, GatewayAuthSchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayRemoteSchema, GatewayTlsSchema, GatewayModeSchema, HeartbeatConfigSchema, GatewayChannelConnectDeferModeSchema, TunnelConsentSchema, TunnelConfigSchema, WorkspaceImportConfigSchema, WorkspaceConfigSchema, GatewayBindModeSchema, GatewayConfigSchema, ModelsDevConfigSchema, SttProviderConfigCatchallSchema, STTProviderConfigSchema, STTFallbackConfigSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, STTConfigSchema, TtsProviderConfigCatchallSchema, TTSProviderConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSEdgeConfigSchema, TTSSummarizationConfigSchema, TTSConfigSchema, MessagesConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProviderAuthConfigSchema, ProvidersConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, UpdateAutoConfigSchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, UpdateConfigSchema, CommandsConfigSchema, TuiConfigSchema, McpHttpUrlSchema, ConnectorSecretReferenceSchema, McpConfigScalarSchema, McpServerSchema, McpConfigSchema, ConnectorsConfigSchema, ConfigSchema;
46
46
  var init_schema = __esmMin((() => {
47
47
  init_schema$1();
48
48
  init_cache_dir_policy();
@@ -55,15 +55,24 @@ var init_schema = __esmMin((() => {
55
55
  }).strict();
56
56
  AgentTypedModelRoleSchema = z.object({
57
57
  description: z.string().max(500).optional(),
58
- model: z.string().min(1)
58
+ model: z.string().min(1),
59
+ fallbacks: z.array(z.string().min(1)).optional()
59
60
  }).strict().superRefine((entry, ctx) => {
60
- const trimmed = entry.model.trim();
61
- const idx = trimmed.indexOf("/");
62
- if (idx <= 0 || idx === trimmed.length - 1) ctx.addIssue({
61
+ const validateRef = (ref) => {
62
+ const trimmed = ref.trim();
63
+ const idx = trimmed.indexOf("/");
64
+ return idx > 0 && idx < trimmed.length - 1;
65
+ };
66
+ if (!validateRef(entry.model)) ctx.addIssue({
63
67
  code: "custom",
64
68
  message: `model must be provider/model format (got '${entry.model}')`,
65
69
  path: ["model"]
66
70
  });
71
+ for (const [index, fallback] of (entry.fallbacks ?? []).entries()) if (!validateRef(fallback)) ctx.addIssue({
72
+ code: "custom",
73
+ message: `fallback must be provider/model format (got '${fallback}')`,
74
+ path: ["fallbacks", index]
75
+ });
67
76
  });
68
77
  AgentTypedModelRolesSchema = z.record(z.string().regex(/^[a-z][a-z0-9_-]{0,63}$/), AgentTypedModelRoleSchema).optional();
69
78
  AgentModelsSchema = z.object({
@@ -615,17 +624,6 @@ strict: z.boolean().optional() }).optional();
615
624
  skillsMarketplaceProvider: "skillhub",
616
625
  skillsStoreBaseUrl: "https://store.xopc.ai"
617
626
  });
618
- CronConfigSchema = z.object({
619
- enabled: z.boolean().optional(),
620
- maxConcurrentJobs: z.number().optional(),
621
- historyRetentionDays: z.number().optional(),
622
- enableMetrics: z.boolean().optional()
623
- }).default({
624
- enabled: true,
625
- maxConcurrentJobs: 5,
626
- historyRetentionDays: 7,
627
- enableMetrics: true
628
- });
629
627
  ModelsDevConfigSchema = z.object({ enabled: z.boolean().default(true) }).default({ enabled: true });
630
628
  SttProviderConfigCatchallSchema = z.union([
631
629
  z.string(),
@@ -887,6 +885,9 @@ tts: TTSConfigSchema.optional() }).optional();
887
885
  auto: UpdateAutoConfigSchema
888
886
  }).strict().optional();
889
887
  CommandsConfigSchema = z.object({ restart: z.boolean().optional() }).strict().optional();
888
+ TuiConfigSchema = z.object({
889
+ /** Default agent id for fresh TUI sessions. Leaves global routing (`agents.default`) untouched. */
890
+ defaultAgent: z.string().min(1).optional() }).strict().default({});
890
891
  McpHttpUrlSchema = z.string().url().refine((value) => {
891
892
  try {
892
893
  const protocol = new URL(value).protocol;
@@ -940,7 +941,6 @@ tts: TTSConfigSchema.optional() }).optional();
940
941
  tools: ToolsConfigSchema,
941
942
  mcp: McpConfigSchema,
942
943
  connectors: ConnectorsConfigSchema,
943
- cron: CronConfigSchema,
944
944
  goals: GoalsConfigSchema.optional(),
945
945
  extensions: ExtensionsConfigSchema.default({}),
946
946
  /** Per-vendor capability provider config (image / audio / video). */
@@ -949,7 +949,8 @@ tts: TTSConfigSchema.optional() }).optional();
949
949
  /** Delivery / presentation concerns (currently `tts`). */
950
950
  messages: MessagesConfigSchema,
951
951
  update: UpdateConfigSchema,
952
- commands: CommandsConfigSchema
952
+ commands: CommandsConfigSchema,
953
+ tui: TuiConfigSchema
953
954
  }).default({
954
955
  agents: {
955
956
  default: "main",
@@ -1037,12 +1038,6 @@ tts: TTSConfigSchema.optional() }).optional();
1037
1038
  maxResults: 5,
1038
1039
  providers: []
1039
1040
  } } },
1040
- cron: {
1041
- enabled: true,
1042
- maxConcurrentJobs: 5,
1043
- historyRetentionDays: 7,
1044
- enableMetrics: true
1045
- },
1046
1041
  goals: {
1047
1042
  maxTurns: 20,
1048
1043
  checklistMode: true,
@@ -1075,11 +1070,12 @@ tts: TTSConfigSchema.optional() }).optional();
1075
1070
  },
1076
1071
  slots: {}
1077
1072
  },
1078
- modelsDev: { enabled: true }
1073
+ modelsDev: { enabled: true },
1074
+ tui: {}
1079
1075
  });
1080
1076
  }));
1081
1077
  //#endregion
1082
1078
  init_schema();
1083
- export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, CronConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef };
1079
+ export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef };
1084
1080
 
1085
1081
  //# sourceMappingURL=schema.js.map