@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":"agent-typed-models.js","names":[],"sources":["../../../src/config/agent-typed-models.ts"],"sourcesContent":["/**\n * Named model roles from the selected agent manifest.\n */\n\nimport type { AgentTypedModel, Config } from './schema.js';\nimport { parseModelRef } from './schema.js';\nimport { resolveEffectiveAgentManifestForAgent } from './agent-profile.js';\n\nexport type { AgentTypedModel };\n\nfunction rolesToEntries(\n roles: Record<string, { model: string; description?: string }> | undefined,\n): AgentTypedModel[] {\n return Object.entries(roles ?? {}).map(([id, role]) => ({\n id,\n ...role,\n }));\n}\n\nexport function resolveEffectiveTypedModels(config: Config, agentId: string): Map<string, AgentTypedModel> {\n const out = new Map<string, AgentTypedModel>();\n const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n for (const modelRole of rolesToEntries(manifest.models.roles)) {\n out.set(modelRole.id, modelRole);\n }\n return out;\n}\n\n/** Resolve a typed model id to `provider/model`, or undefined when not configured. */\nexport function resolveTypedModelRef(\n config: Config,\n agentId: string,\n typeId: string,\n): string | undefined {\n const entry = resolveEffectiveTypedModels(config, agentId).get(typeId);\n const ref = entry?.model?.trim();\n return ref || undefined;\n}\n\nfunction parseModelRefInput(ref: string): { directRef?: string; typeId?: string } {\n const trimmed = ref.trim();\n if (!trimmed) {\n return {};\n }\n if (trimmed.includes('/')) {\n return { directRef: trimmed };\n }\n const typeId = trimmed.startsWith('@') ? trimmed.slice(1).trim() : trimmed;\n return typeId ? { typeId } : {};\n}\n\n/**\n * Resolve a model reference: `provider/model`, typed id (`small`), or `@small`.\n * Throws when the ref is invalid or the typed id is unknown.\n */\nexport function resolveModelRef(config: Config, agentId: string, ref: string): string {\n const { directRef, typeId } = parseModelRefInput(ref);\n if (directRef) {\n if (!parseModelRef(directRef)) {\n throw new Error(`model ref must be provider/model format (got '${directRef}')`);\n }\n return directRef;\n }\n if (typeId) {\n const resolved = resolveTypedModelRef(config, agentId, typeId);\n if (resolved) {\n return resolved;\n }\n const available = [...resolveEffectiveTypedModels(config, agentId).keys()];\n const hint =\n available.length > 0 ? ` (available: ${available.join(', ')})` : ' (none configured)';\n throw new Error(`Unknown typed model id '${typeId}' for agent '${agentId}'${hint}`);\n }\n throw new Error('model ref must not be empty');\n}\n"],"mappings":";;;aAK4C;AAK5C,SAAS,eACP,OACmB;AACnB,QAAO,OAAO,QAAQ,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW;EACtD;EACA,GAAG;EACJ,EAAE;;AAGL,SAAgB,4BAA4B,QAAgB,SAA+C;CACzG,MAAM,sBAAM,IAAI,KAA8B;CAC9C,MAAM,WAAW,sCAAsC,QAAQ,QAAQ;AACvE,MAAK,MAAM,aAAa,eAAe,SAAS,OAAO,MAAM,CAC3D,KAAI,IAAI,UAAU,IAAI,UAAU;AAElC,QAAO;;;AAIT,SAAgB,qBACd,QACA,SACA,QACoB;AAGpB,QAFc,4BAA4B,QAAQ,QAAQ,CAAC,IAAI,OAC9C,EAAE,OAAO,MAAM,IAClB,KAAA;;AAGhB,SAAS,mBAAmB,KAAsD;CAChF,MAAM,UAAU,IAAI,MAAM;AAC1B,KAAI,CAAC,QACH,QAAO,EAAE;AAEX,KAAI,QAAQ,SAAS,IAAI,CACvB,QAAO,EAAE,WAAW,SAAS;CAE/B,MAAM,SAAS,QAAQ,WAAW,IAAI,GAAG,QAAQ,MAAM,EAAE,CAAC,MAAM,GAAG;AACnE,QAAO,SAAS,EAAE,QAAQ,GAAG,EAAE;;;;;;AAOjC,SAAgB,gBAAgB,QAAgB,SAAiB,KAAqB;CACpF,MAAM,EAAE,WAAW,WAAW,mBAAmB,IAAI;AACrD,KAAI,WAAW;AACb,MAAI,CAAC,cAAc,UAAU,CAC3B,OAAM,IAAI,MAAM,iDAAiD,UAAU,IAAI;AAEjF,SAAO;;AAET,KAAI,QAAQ;EACV,MAAM,WAAW,qBAAqB,QAAQ,SAAS,OAAO;AAC9D,MAAI,SACF,QAAO;EAET,MAAM,YAAY,CAAC,GAAG,4BAA4B,QAAQ,QAAQ,CAAC,MAAM,CAAC;EAC1E,MAAM,OACJ,UAAU,SAAS,IAAI,gBAAgB,UAAU,KAAK,KAAK,CAAC,KAAK;AACnE,QAAM,IAAI,MAAM,2BAA2B,OAAO,eAAe,QAAQ,GAAG,OAAO;;AAErF,OAAM,IAAI,MAAM,8BAA8B"}
1
+ {"version":3,"file":"agent-typed-models.js","names":[],"sources":["../../../src/config/agent-typed-models.ts"],"sourcesContent":["/**\n * Named model roles from the selected agent manifest.\n */\n\nimport type { AgentTypedModel, Config } from './schema.js';\nimport { parseModelRef } from './schema.js';\nimport { resolveEffectiveAgentManifestForAgent } from './agent-profile.js';\n\nexport type { AgentTypedModel };\n\nfunction rolesToEntries(\n roles: Record<string, { model: string; fallbacks?: string[]; description?: string }> | undefined,\n): AgentTypedModel[] {\n return Object.entries(roles ?? {}).map(([id, role]) => ({\n id,\n ...role,\n }));\n}\n\nexport function resolveEffectiveTypedModels(config: Config, agentId: string): Map<string, AgentTypedModel> {\n const out = new Map<string, AgentTypedModel>();\n const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n for (const modelRole of rolesToEntries(manifest.models.roles)) {\n out.set(modelRole.id, modelRole);\n }\n return out;\n}\n\n/** Resolve a typed model id to `provider/model`, or undefined when not configured. */\nexport function resolveTypedModelRef(\n config: Config,\n agentId: string,\n typeId: string,\n): string | undefined {\n const entry = resolveEffectiveTypedModels(config, agentId).get(typeId);\n const ref = entry?.model?.trim();\n return ref || undefined;\n}\n\nfunction parseModelRefInput(ref: string): { directRef?: string; typeId?: string } {\n const trimmed = ref.trim();\n if (!trimmed) {\n return {};\n }\n if (trimmed.includes('/')) {\n return { directRef: trimmed };\n }\n const typeId = trimmed.startsWith('@') ? trimmed.slice(1).trim() : trimmed;\n return typeId ? { typeId } : {};\n}\n\n/**\n * Resolve a model reference: `provider/model`, typed id (`small`), or `@small`.\n * Throws when the ref is invalid or the typed id is unknown.\n */\nexport function resolveModelRef(config: Config, agentId: string, ref: string): string {\n const { directRef, typeId } = parseModelRefInput(ref);\n if (directRef) {\n if (!parseModelRef(directRef)) {\n throw new Error(`model ref must be provider/model format (got '${directRef}')`);\n }\n return directRef;\n }\n if (typeId) {\n const resolved = resolveTypedModelRef(config, agentId, typeId);\n if (resolved) {\n return resolved;\n }\n const available = [...resolveEffectiveTypedModels(config, agentId).keys()];\n const hint =\n available.length > 0 ? ` (available: ${available.join(', ')})` : ' (none configured)';\n throw new Error(`Unknown typed model id '${typeId}' for agent '${agentId}'${hint}`);\n }\n throw new Error('model ref must not be empty');\n}\n"],"mappings":";;;aAK4C;AAK5C,SAAS,eACP,OACmB;AACnB,QAAO,OAAO,QAAQ,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW;EACtD;EACA,GAAG;EACJ,EAAE;;AAGL,SAAgB,4BAA4B,QAAgB,SAA+C;CACzG,MAAM,sBAAM,IAAI,KAA8B;CAC9C,MAAM,WAAW,sCAAsC,QAAQ,QAAQ;AACvE,MAAK,MAAM,aAAa,eAAe,SAAS,OAAO,MAAM,CAC3D,KAAI,IAAI,UAAU,IAAI,UAAU;AAElC,QAAO;;;AAIT,SAAgB,qBACd,QACA,SACA,QACoB;AAGpB,QAFc,4BAA4B,QAAQ,QAAQ,CAAC,IAAI,OAC9C,EAAE,OAAO,MAAM,IAClB,KAAA;;AAGhB,SAAS,mBAAmB,KAAsD;CAChF,MAAM,UAAU,IAAI,MAAM;AAC1B,KAAI,CAAC,QACH,QAAO,EAAE;AAEX,KAAI,QAAQ,SAAS,IAAI,CACvB,QAAO,EAAE,WAAW,SAAS;CAE/B,MAAM,SAAS,QAAQ,WAAW,IAAI,GAAG,QAAQ,MAAM,EAAE,CAAC,MAAM,GAAG;AACnE,QAAO,SAAS,EAAE,QAAQ,GAAG,EAAE;;;;;;AAOjC,SAAgB,gBAAgB,QAAgB,SAAiB,KAAqB;CACpF,MAAM,EAAE,WAAW,WAAW,mBAAmB,IAAI;AACrD,KAAI,WAAW;AACb,MAAI,CAAC,cAAc,UAAU,CAC3B,OAAM,IAAI,MAAM,iDAAiD,UAAU,IAAI;AAEjF,SAAO;;AAET,KAAI,QAAQ;EACV,MAAM,WAAW,qBAAqB,QAAQ,SAAS,OAAO;AAC9D,MAAI,SACF,QAAO;EAET,MAAM,YAAY,CAAC,GAAG,4BAA4B,QAAQ,QAAQ,CAAC,MAAM,CAAC;EAC1E,MAAM,OACJ,UAAU,SAAS,IAAI,gBAAgB,UAAU,KAAK,KAAK,CAAC,KAAK;AACnE,QAAM,IAAI,MAAM,2BAA2B,OAAO,eAAe,QAAQ,GAAG,OAAO;;AAErF,OAAM,IAAI,MAAM,8BAA8B"}
@@ -34,6 +34,9 @@ export interface Config {
34
34
  host?: string;
35
35
  port?: number;
36
36
  };
37
+ tui?: {
38
+ defaultAgent?: string;
39
+ };
37
40
  tools?: {
38
41
  web?: {
39
42
  region?: 'cn' | 'global';
@@ -9,7 +9,6 @@ export * from './profile.js';
9
9
  export * from './reload.js';
10
10
  export * from './diff.js';
11
11
  export * from './rules.js';
12
- export * from './defaults.js';
13
12
  export * from './integration.js';
14
13
  export * from './models-json.js';
15
14
  export * from './resolve-config-value.js';
@@ -1,13 +1,13 @@
1
1
  import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
2
2
  import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
3
- import { 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, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
3
+ import { 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, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
4
4
  import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
5
5
  import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath } from "./paths-state.js";
6
6
  import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
7
7
  import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
8
8
  import { resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
9
9
  import { extractProfileAgentId, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
10
- import { FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
10
+ import { FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
11
11
  import { init_loader, loadConfig, saveConfig } from "./loader.js";
12
12
  import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
13
13
  import { CustomModelSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
@@ -27,6 +27,6 @@ init_workspace_path();
27
27
  init_models_json();
28
28
  init_resolve_config_value();
29
29
  //#endregion
30
- export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, ConnectorsConfigSchema, CronConfigSchema, CustomModelSchema, ENV_VARS, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderConfigSchema, 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, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, UpdateAutoConfigSchema, UpdateConfigSchema, VercelGatewayRoutingSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, XOPC_DB_FILENAME, applyConfigOverrides, buildReloadPlan, canonicalizeConfiguredMcpServer, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getConfigOverrides, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, isKnownCliMcpTypeAlias, listAgentProfileMarkdownDirs, listAgentWorkspaceDirs, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeConfiguredMcpServers, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, resetConfigOverrides, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, validateModelsConfig };
30
+ export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, ConnectorsConfigSchema, CustomModelSchema, ENV_VARS, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderConfigSchema, 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, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, UpdateAutoConfigSchema, UpdateConfigSchema, VercelGatewayRoutingSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, XOPC_DB_FILENAME, applyConfigOverrides, buildReloadPlan, canonicalizeConfiguredMcpServer, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getConfigOverrides, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, isKnownCliMcpTypeAlias, listAgentProfileMarkdownDirs, listAgentWorkspaceDirs, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeConfiguredMcpServers, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, resetConfigOverrides, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, validateModelsConfig };
31
31
 
32
32
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/config/index.ts"],"sourcesContent":["export * from './schema.js';\nexport { getWorkspacePath } from './workspace-path-helpers.js';\nexport * from './agent-profile.js';\nexport * from './loader.js';\nexport * from './paths.js';\nexport * from './workspace-dirs.js';\nexport { expandWorkspacePathString, normalizeWorkspaceDir, resolveWorkspaceRoot } from './workspace-path.js';\nexport * from './profile.js';\nexport * from './reload.js';\nexport * from './diff.js';\nexport * from './rules.js';\nexport * from './defaults.js';\nexport * from './integration.js';\nexport * from './models-json.js';\nexport * from './resolve-config-value.js';\nexport * from './runtime-overrides.js';\nexport * from './mcp-config-normalize.js';\n\n// Re-export thinking types\nexport type {\n ThinkLevel,\n ReasoningLevel,\n VerboseLevel,\n ElevatedMode,\n SessionAgentConfig,\n} from '../agent/transcript/thinking-types.js';\nexport {\n normalizeThinkLevel,\n normalizeReasoningLevel,\n normalizeVerboseLevel,\n normalizeElevatedMode,\n listThinkingLevels,\n formatThinkingLevels,\n thinkLevelToNumber,\n} from '../agent/transcript/thinking-types.js';\n\n// Re-export types from types.models (avoid conflict with schema.js)\nexport type {\n ModelApi,\n ModelCompatConfig,\n ModelProviderAuthMode,\n ModelDefinitionConfig,\n ModelProviderConfig,\n BedrockDiscoveryConfig,\n ModelsConfig,\n} from './types.models.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;qBAM6G"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/config/index.ts"],"sourcesContent":["export * from './schema.js';\nexport { getWorkspacePath } from './workspace-path-helpers.js';\nexport * from './agent-profile.js';\nexport * from './loader.js';\nexport * from './paths.js';\nexport * from './workspace-dirs.js';\nexport { expandWorkspacePathString, normalizeWorkspaceDir, resolveWorkspaceRoot } from './workspace-path.js';\nexport * from './profile.js';\nexport * from './reload.js';\nexport * from './diff.js';\nexport * from './rules.js';\nexport * from './integration.js';\nexport * from './models-json.js';\nexport * from './resolve-config-value.js';\nexport * from './runtime-overrides.js';\nexport * from './mcp-config-normalize.js';\n\n// Re-export thinking types\nexport type {\n ThinkLevel,\n ReasoningLevel,\n VerboseLevel,\n ElevatedMode,\n SessionAgentConfig,\n} from '../agent/transcript/thinking-types.js';\nexport {\n normalizeThinkLevel,\n normalizeReasoningLevel,\n normalizeVerboseLevel,\n normalizeElevatedMode,\n listThinkingLevels,\n formatThinkingLevels,\n thinkLevelToNumber,\n} from '../agent/transcript/thinking-types.js';\n\n// Re-export types from types.models (avoid conflict with schema.js)\nexport type {\n ModelApi,\n ModelCompatConfig,\n ModelProviderAuthMode,\n ModelDefinitionConfig,\n ModelProviderConfig,\n BedrockDiscoveryConfig,\n ModelsConfig,\n} from './types.models.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;qBAM6G"}
@@ -10,7 +10,6 @@ export declare const FILENAMES: {
10
10
  readonly XOPC_DB: "xopc.db";
11
11
  readonly EXTENSIONS_LOCK: "extensions-lock.json";
12
12
  readonly CREDENTIALS_PROFILES: "auth-profiles.json";
13
- readonly CRON_JOBS: "jobs.json";
14
13
  readonly WORKSPACE_STATE: "workspace.json";
15
14
  readonly SKILLS_CACHE: "skills-cache.json";
16
15
  /** Hub / CLI install provenance for ~/.xopc/skills/<id>. */
@@ -126,14 +125,6 @@ export declare function resolveSkillPath(skillId: string): string;
126
125
  * Skills hub lock file (~/.xopc/skills-lock.json): install source + content hash per managed skill id.
127
126
  */
128
127
  export declare function resolveSkillsLockPath(): string;
129
- /**
130
- * Resolve the cron directory
131
- */
132
- export declare function resolveCronDir(): string;
133
- /**
134
- * Resolve the cron jobs file path
135
- */
136
- export declare function resolveCronJobsPath(): string;
137
128
  /**
138
129
  * Resolve the logs directory
139
130
  */
@@ -156,18 +156,6 @@ function resolveSkillsLockPath() {
156
156
  return join(resolveStateDir(), FILENAMES.SKILLS_LOCK);
157
157
  }
158
158
  /**
159
- * Resolve the cron directory
160
- */
161
- function resolveCronDir() {
162
- return join(resolveStateDir(), "cron");
163
- }
164
- /**
165
- * Resolve the cron jobs file path
166
- */
167
- function resolveCronJobsPath() {
168
- return join(resolveCronDir(), FILENAMES.CRON_JOBS);
169
- }
170
- /**
171
159
  * Resolve the logs directory
172
160
  */
173
161
  function resolveLogsDir() {
@@ -319,7 +307,6 @@ var init_paths = __esmMin((() => {
319
307
  XOPC_DB: "xopc.db",
320
308
  EXTENSIONS_LOCK: "extensions-lock.json",
321
309
  CREDENTIALS_PROFILES: "auth-profiles.json",
322
- CRON_JOBS: "jobs.json",
323
310
  WORKSPACE_STATE: "workspace.json",
324
311
  SKILLS_CACHE: "skills-cache.json",
325
312
  /** Hub / CLI install provenance for ~/.xopc/skills/<id>. */
@@ -341,6 +328,6 @@ var init_paths = __esmMin((() => {
341
328
  }));
342
329
  //#endregion
343
330
  init_paths();
344
- export { ENV_VARS, FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, XOPC_DB_FILENAME, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveDefaultAgentWorkspaceDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath };
331
+ export { ENV_VARS, FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, XOPC_DB_FILENAME, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveDefaultAgentWorkspaceDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath };
345
332
 
346
333
  //# sourceMappingURL=paths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","names":["resolveAgentDirScoped","resolveAgentHomeScoped","resolveAgentProfileDirScoped","resolveAgentProfileMarkdownPathScoped"],"sources":["../../../src/config/paths.ts"],"sourcesContent":["import { join, sep } from 'path';\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\nimport { existsSync } from 'fs';\n\nimport type { Config } from './schema.js';\nimport {\n resolveAgentDir as resolveAgentDirScoped,\n resolveAgentHomeDir as resolveAgentHomeScoped,\n resolveAgentProfileDir as resolveAgentProfileDirScoped,\n resolveAgentProfileMarkdownPath as resolveAgentProfileMarkdownPathScoped,\n resolveAgentWorkspaceDir,\n} from '../agent/agent-scope.js';\nimport { ENV_VARS, resolveStateDir } from './paths-state.js';\n\nexport { ENV_VARS, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath, XOPC_DB_FILENAME } from './paths-state.js';\nexport { resolveDefaultAgentWorkspaceDir } from './workspace-defaults.js';\nexport {\n resolveAgentWorkspaceDir,\n resolveAgentDir as resolveAgentDirFromConfig,\n resolveAgentHomeDir as resolveAgentHomeDirFromConfig,\n} from '../agent/agent-scope.js';\n\n// ============================================\n// File Names\n// ============================================\nconst ENV_BUNDLED_EXTENSIONS_ROOT = 'XOPC_BUNDLED_EXTENSIONS_ROOT';\nconst ENV_BUNDLED_SKILLS_ROOT = 'XOPC_BUNDLED_SKILLS_ROOT';\n\nexport const FILENAMES = {\n CONFIG: 'xopc.json',\n MODELS_JSON: 'models.json',\n /** Primary SQLite state database (`~/.xopc/xopc.db`). */\n XOPC_DB: 'xopc.db',\n EXTENSIONS_LOCK: 'extensions-lock.json',\n CREDENTIALS_PROFILES: 'auth-profiles.json',\n CRON_JOBS: 'jobs.json',\n WORKSPACE_STATE: 'workspace.json',\n SKILLS_CACHE: 'skills-cache.json',\n /** Hub / CLI install provenance for ~/.xopc/skills/<id>. */\n SKILLS_LOCK: 'skills-lock.json',\n PID: 'pid',\n STATUS: 'status.json',\n SOCKET: 'agent.sock',\n} as const;\n\n// ============================================\n// Workspace Files\n// ============================================\nexport const WORKSPACE_FILES = {\n SOUL: 'SOUL.md',\n IDENTITY: 'IDENTITY.md',\n AGENTS: 'AGENTS.md',\n TOOLS: 'TOOLS.md',\n HEARTBEAT: 'HEARTBEAT.md',\n MEMORY: 'MEMORY.md',\n} as const;\n\nexport const USER_PROFILE_FILENAME = 'PROFILE.md';\nexport const USER_MEMORY_FILENAME = 'MEMORY.md';\n\n// ============================================\n// Path Resolution Functions\n// ============================================\n\n/**\n * Resolve the main config file path\n */\nexport function resolveConfigPath(): string {\n return process.env[ENV_VARS.CONFIG_PATH] ?? join(resolveStateDir(), FILENAMES.CONFIG);\n}\n\n/**\n * Resolve the credentials directory\n */\nexport function resolveCredentialsDir(): string {\n return process.env[ENV_VARS.CREDENTIALS_DIR] ?? join(resolveStateDir(), 'credentials');\n}\n\n/**\n * Resolve the global auth-profiles.json path\n */\nexport function resolveAuthProfilesPath(): string {\n return join(resolveCredentialsDir(), FILENAMES.CREDENTIALS_PROFILES);\n}\n\n/** Global user profile root (`~/.xopc/user/`). */\nexport function resolveUserDir(): string {\n return join(resolveStateDir(), 'user');\n}\n\n/** Global human/user profile Markdown (`~/.xopc/user/PROFILE.md`). */\nexport function resolveUserProfilePath(): string {\n return join(resolveUserDir(), USER_PROFILE_FILENAME);\n}\n\n/** Global human/user long-term memory Markdown (`~/.xopc/user/MEMORY.md`). */\nexport function resolveUserMemoryPath(): string {\n return join(resolveUserDir(), USER_MEMORY_FILENAME);\n}\n\n/**\n * Resolve OAuth token file path for a provider\n */\nexport function resolveOAuthPath(provider: string): string {\n return join(resolveCredentialsDir(), 'oauth', `${provider}.json`);\n}\n\n/**\n * Internal agent state dir: `stateDir/agents/<id>/agent/`\n * (credentials, inbox IPC, pid, agent.json — not the Markdown workspace).\n */\nexport function resolveAgentDir(config: Config, agentId: string): string {\n return resolveAgentDirScoped(config, agentId);\n}\n\n/**\n * Per-agent home: `stateDir/agents/<id>/` (sessions + `agent/`).\n */\nexport function resolveAgentHomeDir(config: Config, agentId: string): string {\n return resolveAgentHomeScoped(config, agentId);\n}\n\n/** Agent profile Markdown root: `stateDir/agents/<id>/profile/`. */\nexport function resolveAgentProfileDir(config: Config, agentId: string): string {\n return resolveAgentProfileDirScoped(config, agentId);\n}\n\n/** Single file under {@link resolveAgentProfileDir} (basename only). */\nexport function resolveAgentProfileMarkdownPath(config: Config, agentId: string, filename: string): string {\n return resolveAgentProfileMarkdownPathScoped(config, agentId, filename);\n}\n\n/**\n * Resolve a profile system Markdown path (SOUL.md, …) under the agent `profile/` directory.\n */\nexport function resolveWorkspaceFile(config: Config, filename: string, agentId: string): string {\n return join(resolveAgentProfileDirScoped(config, agentId), filename);\n}\n\n/**\n * OpenClaw-aligned: per-agent auth-profiles.json directly under agent dir (no credentials subdirectory).\n */\nexport function resolveAgentAuthProfilesPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.CREDENTIALS_PROFILES);\n}\n\n/**\n * Resolve the inbox directory for an agent\n */\nexport function resolveInboxDir(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'inbox');\n}\n\n/**\n * Resolve the pending inbox directory\n */\nexport function resolveInboxPendingDir(config: Config, agentId: string): string {\n return join(resolveInboxDir(config, agentId), 'pending');\n}\n\n/**\n * Resolve the processed inbox directory\n */\nexport function resolveInboxProcessedDir(config: Config, agentId: string): string {\n return join(resolveInboxDir(config, agentId), 'processed');\n}\n\n/**\n * Resolve a specific inbox message path\n */\nexport function resolveInboxMessagePath(\n config: Config,\n messageId: string,\n pending: boolean,\n agentId: string,\n): string {\n const dir = pending ? resolveInboxPendingDir(config, agentId) : resolveInboxProcessedDir(config, agentId);\n return join(dir, `${messageId}.json`);\n}\n\n/**\n * Resolve the pid file path\n */\nexport function resolvePidPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.PID);\n}\n\n/**\n * Resolve the status.json path\n */\nexport function resolveStatusPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.STATUS);\n}\n\n/**\n * Resolve the Unix socket path\n */\nexport function resolveSocketPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.SOCKET);\n}\n\n/**\n * Resolve the extensions directory (global)\n */\nexport function resolveExtensionsDir(): string {\n return join(resolveStateDir(), 'extensions');\n}\n\n/**\n * Resolve the extensions lockfile path\n */\nexport function resolveExtensionsLockPath(): string {\n return join(resolveExtensionsDir(), FILENAMES.EXTENSIONS_LOCK);\n}\n\n/**\n * Per-agent extensions directory (`…/agents/<id>/agent/extensions/`) — used for discovery of\n * legacy or manually placed copies. CLI, web store, and `extensions dev` symlink installs use\n * {@link resolveExtensionsDir} (`~/.xopc/extensions`) only.\n */\nexport function resolveWorkspaceExtensionsDir(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'extensions');\n}\n\n/**\n * Resolve the skills directory (global)\n */\nexport function resolveSkillsDir(): string {\n return join(resolveStateDir(), 'skills');\n}\n\n/**\n * Resolve a specific skill path\n */\nexport function resolveSkillPath(skillId: string): string {\n return join(resolveSkillsDir(), skillId, 'SKILL.md');\n}\n\n/**\n * Skills hub lock file (~/.xopc/skills-lock.json): install source + content hash per managed skill id.\n */\nexport function resolveSkillsLockPath(): string {\n return join(resolveStateDir(), FILENAMES.SKILLS_LOCK);\n}\n\n/**\n * Resolve the cron directory\n */\nexport function resolveCronDir(): string {\n return join(resolveStateDir(), 'cron');\n}\n\n/**\n * Resolve the cron jobs file path\n */\nexport function resolveCronJobsPath(): string {\n return join(resolveCronDir(), FILENAMES.CRON_JOBS);\n}\n\n/**\n * Resolve the logs directory\n */\nexport function resolveLogsDir(): string {\n return process.env[ENV_VARS.LOG_DIR] ?? join(resolveStateDir(), 'logs');\n}\n\n/**\n * Resolve a specific log file path\n */\nexport function resolveLogPath(date: string): string {\n return join(resolveLogsDir(), `xopc-${date}.log`);\n}\n\n/**\n * Resolve the bin directory\n */\nexport function resolveBinDir(): string {\n return join(resolveStateDir(), 'bin');\n}\n\n/**\n * Resolve the xopc CLI path\n */\nexport function resolveXopcBinPath(): string {\n return join(resolveBinDir(), 'xopc');\n}\n\n/**\n * Resolve the tools directory\n */\nexport function resolveToolsDir(): string {\n return join(resolveStateDir(), 'tools');\n}\n\n/**\n * Resolve the Node.js tools directory\n */\nexport function resolveNodeToolsDir(): string {\n return join(resolveToolsDir(), 'node');\n}\n\n/**\n * Resolve the current Node.js bin directory\n */\nexport function resolveNodeBinDir(): string {\n return join(resolveNodeToolsDir(), 'current', 'bin');\n}\n\n/**\n * Resolve the node binary path\n */\nexport function resolveNodeBinPath(): string {\n return join(resolveNodeBinDir(), 'node');\n}\n\n/**\n * Resolve the npm binary path\n */\nexport function resolveNpmBinPath(): string {\n return join(resolveNodeBinDir(), 'npm');\n}\n\n/**\n * Resolve the models.json path\n */\nexport function resolveModelsJsonPath(): string {\n return join(resolveStateDir(), FILENAMES.MODELS_JSON);\n}\n\n/**\n * OpenClaw-aligned: workspace setup state directory (`<workspace>/.xopc/`).\n */\nexport function resolveWorkspaceStateDir(config: Config, agentId: string): string {\n return join(resolveAgentWorkspaceDir(config, agentId), '.xopc');\n}\n\n/**\n * OpenClaw-aligned: workspace setup state file (`<workspace>/.xopc/workspace.json`).\n */\nexport function resolveWorkspaceStatePath(config: Config, agentId: string): string {\n return join(resolveWorkspaceStateDir(config, agentId), FILENAMES.WORKSPACE_STATE);\n}\n\n/**\n * Resolve the skills cache file path (internal agent state, under agent dir).\n */\nexport function resolveSkillsCachePath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'state', FILENAMES.SKILLS_CACHE);\n}\n\n/**\n * Resolve the bundled extensions directory (shipped with xopc).\n *\n * Layout-dependent candidates (first existing wins):\n * - `XOPC_BUNDLED_EXTENSIONS_ROOT` (Electron packaged gateway override)\n * - `dist/src/config` → `dist/extensions` (npm / gateway)\n * - `src/config` → `dist/extensions` when built, else `extensions/` (dev, tsx)\n * - `out/server` → `dist/electron/extensions` (Electron extension bundles)\n */\nexport function resolveBundledExtensionsDir(): string | null {\n const envDir = process.env[ENV_BUNDLED_EXTENSIONS_ROOT];\n if (envDir && existsSync(envDir)) {\n return envDir;\n }\n\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n const isElectronServerBundle = srcDir.endsWith(`${sep}out${sep}server`);\n const candidates = isElectronServerBundle\n ? [join(srcDir, '..', '..', 'dist', 'electron', 'extensions')]\n : [\n // In source-tree dev, prefer compiled bundled extensions when present: manifests point\n // at built JavaScript entries (for example src/index.js), while source folders contain TS.\n join(srcDir, '..', '..', 'dist', 'extensions'),\n join(srcDir, '..', '..', 'extensions'),\n join(srcDir, '..', '..', '..', 'dist', 'extensions'),\n join(srcDir, '..', '..', '..', 'extensions'),\n ];\n for (const dir of candidates) {\n if (existsSync(dir)) {\n return dir;\n }\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Resolve the bundled skills directory (shipped with xopc)\n */\nexport function resolveBundledSkillsDir(): string | null {\n const envDir = process.env[ENV_BUNDLED_SKILLS_ROOT];\n if (envDir && existsSync(envDir)) {\n return envDir;\n }\n\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n \n // Production (npm): dist/config/paths.js -> ../../ -> package root -> skills\n const packageRoot = join(srcDir, '..', '..');\n const skillsDir = join(packageRoot, 'skills');\n if (existsSync(skillsDir)) {\n return skillsDir;\n }\n \n // Development (source): src/config/paths.js -> ../../../ -> package root -> skills\n const devPackageRoot = join(srcDir, '..', '..', '..');\n const devSkillsDir = join(devPackageRoot, 'skills');\n if (existsSync(devSkillsDir)) {\n return devSkillsDir;\n }\n \n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Path to extension-sdk entry (for jiti / extension loader aliases).\n */\nexport function resolveExtensionSdkPath(): string {\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n const adjacent = join(srcDir, '..', 'extensions', 'sdk', 'index.ts');\n if (existsSync(adjacent)) {\n return adjacent;\n }\n const fromPackageRoot = join(srcDir, '..', '..', 'src', 'extensions', 'sdk', 'index.ts');\n if (existsSync(fromPackageRoot)) {\n return fromPackageRoot;\n }\n const cwd = join(process.cwd(), 'src', 'extensions', 'sdk', 'index.ts');\n if (existsSync(cwd)) {\n return cwd;\n }\n return adjacent;\n } catch {\n return join(process.cwd(), 'src', 'extensions', 'sdk', 'index.ts');\n }\n}\n\n// Re-export existsSync for bundled paths\nexport { existsSync };\n"],"mappings":"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"}
1
+ {"version":3,"file":"paths.js","names":["resolveAgentDirScoped","resolveAgentHomeScoped","resolveAgentProfileDirScoped","resolveAgentProfileMarkdownPathScoped"],"sources":["../../../src/config/paths.ts"],"sourcesContent":["import { join, sep } from 'path';\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\nimport { existsSync } from 'fs';\n\nimport type { Config } from './schema.js';\nimport {\n resolveAgentDir as resolveAgentDirScoped,\n resolveAgentHomeDir as resolveAgentHomeScoped,\n resolveAgentProfileDir as resolveAgentProfileDirScoped,\n resolveAgentProfileMarkdownPath as resolveAgentProfileMarkdownPathScoped,\n resolveAgentWorkspaceDir,\n} from '../agent/agent-scope.js';\nimport { ENV_VARS, resolveStateDir } from './paths-state.js';\n\nexport { ENV_VARS, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath, XOPC_DB_FILENAME } from './paths-state.js';\nexport { resolveDefaultAgentWorkspaceDir } from './workspace-defaults.js';\nexport {\n resolveAgentWorkspaceDir,\n resolveAgentDir as resolveAgentDirFromConfig,\n resolveAgentHomeDir as resolveAgentHomeDirFromConfig,\n} from '../agent/agent-scope.js';\n\n// ============================================\n// File Names\n// ============================================\nconst ENV_BUNDLED_EXTENSIONS_ROOT = 'XOPC_BUNDLED_EXTENSIONS_ROOT';\nconst ENV_BUNDLED_SKILLS_ROOT = 'XOPC_BUNDLED_SKILLS_ROOT';\n\nexport const FILENAMES = {\n CONFIG: 'xopc.json',\n MODELS_JSON: 'models.json',\n /** Primary SQLite state database (`~/.xopc/xopc.db`). */\n XOPC_DB: 'xopc.db',\n EXTENSIONS_LOCK: 'extensions-lock.json',\n CREDENTIALS_PROFILES: 'auth-profiles.json',\n WORKSPACE_STATE: 'workspace.json',\n SKILLS_CACHE: 'skills-cache.json',\n /** Hub / CLI install provenance for ~/.xopc/skills/<id>. */\n SKILLS_LOCK: 'skills-lock.json',\n PID: 'pid',\n STATUS: 'status.json',\n SOCKET: 'agent.sock',\n} as const;\n\n// ============================================\n// Workspace Files\n// ============================================\nexport const WORKSPACE_FILES = {\n SOUL: 'SOUL.md',\n IDENTITY: 'IDENTITY.md',\n AGENTS: 'AGENTS.md',\n TOOLS: 'TOOLS.md',\n HEARTBEAT: 'HEARTBEAT.md',\n MEMORY: 'MEMORY.md',\n} as const;\n\nexport const USER_PROFILE_FILENAME = 'PROFILE.md';\nexport const USER_MEMORY_FILENAME = 'MEMORY.md';\n\n// ============================================\n// Path Resolution Functions\n// ============================================\n\n/**\n * Resolve the main config file path\n */\nexport function resolveConfigPath(): string {\n return process.env[ENV_VARS.CONFIG_PATH] ?? join(resolveStateDir(), FILENAMES.CONFIG);\n}\n\n/**\n * Resolve the credentials directory\n */\nexport function resolveCredentialsDir(): string {\n return process.env[ENV_VARS.CREDENTIALS_DIR] ?? join(resolveStateDir(), 'credentials');\n}\n\n/**\n * Resolve the global auth-profiles.json path\n */\nexport function resolveAuthProfilesPath(): string {\n return join(resolveCredentialsDir(), FILENAMES.CREDENTIALS_PROFILES);\n}\n\n/** Global user profile root (`~/.xopc/user/`). */\nexport function resolveUserDir(): string {\n return join(resolveStateDir(), 'user');\n}\n\n/** Global human/user profile Markdown (`~/.xopc/user/PROFILE.md`). */\nexport function resolveUserProfilePath(): string {\n return join(resolveUserDir(), USER_PROFILE_FILENAME);\n}\n\n/** Global human/user long-term memory Markdown (`~/.xopc/user/MEMORY.md`). */\nexport function resolveUserMemoryPath(): string {\n return join(resolveUserDir(), USER_MEMORY_FILENAME);\n}\n\n/**\n * Resolve OAuth token file path for a provider\n */\nexport function resolveOAuthPath(provider: string): string {\n return join(resolveCredentialsDir(), 'oauth', `${provider}.json`);\n}\n\n/**\n * Internal agent state dir: `stateDir/agents/<id>/agent/`\n * (credentials, inbox IPC, pid, agent.json — not the Markdown workspace).\n */\nexport function resolveAgentDir(config: Config, agentId: string): string {\n return resolveAgentDirScoped(config, agentId);\n}\n\n/**\n * Per-agent home: `stateDir/agents/<id>/` (sessions + `agent/`).\n */\nexport function resolveAgentHomeDir(config: Config, agentId: string): string {\n return resolveAgentHomeScoped(config, agentId);\n}\n\n/** Agent profile Markdown root: `stateDir/agents/<id>/profile/`. */\nexport function resolveAgentProfileDir(config: Config, agentId: string): string {\n return resolveAgentProfileDirScoped(config, agentId);\n}\n\n/** Single file under {@link resolveAgentProfileDir} (basename only). */\nexport function resolveAgentProfileMarkdownPath(config: Config, agentId: string, filename: string): string {\n return resolveAgentProfileMarkdownPathScoped(config, agentId, filename);\n}\n\n/**\n * Resolve a profile system Markdown path (SOUL.md, …) under the agent `profile/` directory.\n */\nexport function resolveWorkspaceFile(config: Config, filename: string, agentId: string): string {\n return join(resolveAgentProfileDirScoped(config, agentId), filename);\n}\n\n/**\n * OpenClaw-aligned: per-agent auth-profiles.json directly under agent dir (no credentials subdirectory).\n */\nexport function resolveAgentAuthProfilesPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.CREDENTIALS_PROFILES);\n}\n\n/**\n * Resolve the inbox directory for an agent\n */\nexport function resolveInboxDir(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'inbox');\n}\n\n/**\n * Resolve the pending inbox directory\n */\nexport function resolveInboxPendingDir(config: Config, agentId: string): string {\n return join(resolveInboxDir(config, agentId), 'pending');\n}\n\n/**\n * Resolve the processed inbox directory\n */\nexport function resolveInboxProcessedDir(config: Config, agentId: string): string {\n return join(resolveInboxDir(config, agentId), 'processed');\n}\n\n/**\n * Resolve a specific inbox message path\n */\nexport function resolveInboxMessagePath(\n config: Config,\n messageId: string,\n pending: boolean,\n agentId: string,\n): string {\n const dir = pending ? resolveInboxPendingDir(config, agentId) : resolveInboxProcessedDir(config, agentId);\n return join(dir, `${messageId}.json`);\n}\n\n/**\n * Resolve the pid file path\n */\nexport function resolvePidPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.PID);\n}\n\n/**\n * Resolve the status.json path\n */\nexport function resolveStatusPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.STATUS);\n}\n\n/**\n * Resolve the Unix socket path\n */\nexport function resolveSocketPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.SOCKET);\n}\n\n/**\n * Resolve the extensions directory (global)\n */\nexport function resolveExtensionsDir(): string {\n return join(resolveStateDir(), 'extensions');\n}\n\n/**\n * Resolve the extensions lockfile path\n */\nexport function resolveExtensionsLockPath(): string {\n return join(resolveExtensionsDir(), FILENAMES.EXTENSIONS_LOCK);\n}\n\n/**\n * Per-agent extensions directory (`…/agents/<id>/agent/extensions/`) — used for discovery of\n * legacy or manually placed copies. CLI, web store, and `extensions dev` symlink installs use\n * {@link resolveExtensionsDir} (`~/.xopc/extensions`) only.\n */\nexport function resolveWorkspaceExtensionsDir(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'extensions');\n}\n\n/**\n * Resolve the skills directory (global)\n */\nexport function resolveSkillsDir(): string {\n return join(resolveStateDir(), 'skills');\n}\n\n/**\n * Resolve a specific skill path\n */\nexport function resolveSkillPath(skillId: string): string {\n return join(resolveSkillsDir(), skillId, 'SKILL.md');\n}\n\n/**\n * Skills hub lock file (~/.xopc/skills-lock.json): install source + content hash per managed skill id.\n */\nexport function resolveSkillsLockPath(): string {\n return join(resolveStateDir(), FILENAMES.SKILLS_LOCK);\n}\n\n/**\n * Resolve the logs directory\n */\nexport function resolveLogsDir(): string {\n return process.env[ENV_VARS.LOG_DIR] ?? join(resolveStateDir(), 'logs');\n}\n\n/**\n * Resolve a specific log file path\n */\nexport function resolveLogPath(date: string): string {\n return join(resolveLogsDir(), `xopc-${date}.log`);\n}\n\n/**\n * Resolve the bin directory\n */\nexport function resolveBinDir(): string {\n return join(resolveStateDir(), 'bin');\n}\n\n/**\n * Resolve the xopc CLI path\n */\nexport function resolveXopcBinPath(): string {\n return join(resolveBinDir(), 'xopc');\n}\n\n/**\n * Resolve the tools directory\n */\nexport function resolveToolsDir(): string {\n return join(resolveStateDir(), 'tools');\n}\n\n/**\n * Resolve the Node.js tools directory\n */\nexport function resolveNodeToolsDir(): string {\n return join(resolveToolsDir(), 'node');\n}\n\n/**\n * Resolve the current Node.js bin directory\n */\nexport function resolveNodeBinDir(): string {\n return join(resolveNodeToolsDir(), 'current', 'bin');\n}\n\n/**\n * Resolve the node binary path\n */\nexport function resolveNodeBinPath(): string {\n return join(resolveNodeBinDir(), 'node');\n}\n\n/**\n * Resolve the npm binary path\n */\nexport function resolveNpmBinPath(): string {\n return join(resolveNodeBinDir(), 'npm');\n}\n\n/**\n * Resolve the models.json path\n */\nexport function resolveModelsJsonPath(): string {\n return join(resolveStateDir(), FILENAMES.MODELS_JSON);\n}\n\n/**\n * OpenClaw-aligned: workspace setup state directory (`<workspace>/.xopc/`).\n */\nexport function resolveWorkspaceStateDir(config: Config, agentId: string): string {\n return join(resolveAgentWorkspaceDir(config, agentId), '.xopc');\n}\n\n/**\n * OpenClaw-aligned: workspace setup state file (`<workspace>/.xopc/workspace.json`).\n */\nexport function resolveWorkspaceStatePath(config: Config, agentId: string): string {\n return join(resolveWorkspaceStateDir(config, agentId), FILENAMES.WORKSPACE_STATE);\n}\n\n/**\n * Resolve the skills cache file path (internal agent state, under agent dir).\n */\nexport function resolveSkillsCachePath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'state', FILENAMES.SKILLS_CACHE);\n}\n\n/**\n * Resolve the bundled extensions directory (shipped with xopc).\n *\n * Layout-dependent candidates (first existing wins):\n * - `XOPC_BUNDLED_EXTENSIONS_ROOT` (Electron packaged gateway override)\n * - `dist/src/config` → `dist/extensions` (npm / gateway)\n * - `src/config` → `dist/extensions` when built, else `extensions/` (dev, tsx)\n * - `out/server` → `dist/electron/extensions` (Electron extension bundles)\n */\nexport function resolveBundledExtensionsDir(): string | null {\n const envDir = process.env[ENV_BUNDLED_EXTENSIONS_ROOT];\n if (envDir && existsSync(envDir)) {\n return envDir;\n }\n\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n const isElectronServerBundle = srcDir.endsWith(`${sep}out${sep}server`);\n const candidates = isElectronServerBundle\n ? [join(srcDir, '..', '..', 'dist', 'electron', 'extensions')]\n : [\n // In source-tree dev, prefer compiled bundled extensions when present: manifests point\n // at built JavaScript entries (for example src/index.js), while source folders contain TS.\n join(srcDir, '..', '..', 'dist', 'extensions'),\n join(srcDir, '..', '..', 'extensions'),\n join(srcDir, '..', '..', '..', 'dist', 'extensions'),\n join(srcDir, '..', '..', '..', 'extensions'),\n ];\n for (const dir of candidates) {\n if (existsSync(dir)) {\n return dir;\n }\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Resolve the bundled skills directory (shipped with xopc)\n */\nexport function resolveBundledSkillsDir(): string | null {\n const envDir = process.env[ENV_BUNDLED_SKILLS_ROOT];\n if (envDir && existsSync(envDir)) {\n return envDir;\n }\n\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n \n // Production (npm): dist/config/paths.js -> ../../ -> package root -> skills\n const packageRoot = join(srcDir, '..', '..');\n const skillsDir = join(packageRoot, 'skills');\n if (existsSync(skillsDir)) {\n return skillsDir;\n }\n \n // Development (source): src/config/paths.js -> ../../../ -> package root -> skills\n const devPackageRoot = join(srcDir, '..', '..', '..');\n const devSkillsDir = join(devPackageRoot, 'skills');\n if (existsSync(devSkillsDir)) {\n return devSkillsDir;\n }\n \n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Path to extension-sdk entry (for jiti / extension loader aliases).\n */\nexport function resolveExtensionSdkPath(): string {\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n const adjacent = join(srcDir, '..', 'extensions', 'sdk', 'index.ts');\n if (existsSync(adjacent)) {\n return adjacent;\n }\n const fromPackageRoot = join(srcDir, '..', '..', 'src', 'extensions', 'sdk', 'index.ts');\n if (existsSync(fromPackageRoot)) {\n return fromPackageRoot;\n }\n const cwd = join(process.cwd(), 'src', 'extensions', 'sdk', 'index.ts');\n if (existsSync(cwd)) {\n return cwd;\n }\n return adjacent;\n } catch {\n return join(process.cwd(), 'src', 'extensions', 'sdk', 'index.ts');\n }\n}\n\n// Re-export existsSync for bundled paths\nexport { existsSync };\n"],"mappings":"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"}
@@ -73,7 +73,6 @@ var ProfileManager = class {
73
73
  await mkdir(join(stateDir, "credentials"), { recursive: true });
74
74
  await mkdir(join(stateDir, "extensions"), { recursive: true });
75
75
  await mkdir(join(stateDir, "skills"), { recursive: true });
76
- await mkdir(join(stateDir, "cron"), { recursive: true });
77
76
  await mkdir(join(stateDir, "logs"), { recursive: true });
78
77
  await mkdir(join(stateDir, "bin"), { recursive: true });
79
78
  await mkdir(join(stateDir, "tools"), { recursive: true });
@@ -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":"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"}
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.ZodDefault<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.ZodDefault<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).default("coder") }).strict().default({ defaultAgent: "coder" });
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: { defaultAgent: "coder" }
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