@xopcai/xopc 0.0.86 → 0.0.88

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 (658) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/feishu/src/adapters/cli-login.js +3 -3
  3. package/dist/extensions/feishu/src/adapters/cli-login.js.map +1 -1
  4. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  5. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  6. package/dist/extensions/telegram/src/delivery-chat-id.d.ts +1 -1
  7. package/dist/extensions/telegram/src/delivery-chat-id.js +1 -1
  8. package/dist/extensions/telegram/src/delivery-chat-id.js.map +1 -1
  9. package/dist/extensions/telegram/src/plugin.js +1 -1
  10. package/dist/extensions/telegram/src/routing-integration.js +3 -2
  11. package/dist/extensions/telegram/src/routing-integration.js.map +1 -1
  12. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  13. package/dist/extensions/telegram/xopc.extension.json +1 -1
  14. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js +2 -2
  15. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js.map +1 -1
  16. package/dist/extensions/weixin/src/api/api.js +3 -3
  17. package/dist/extensions/weixin/src/api/api.js.map +1 -1
  18. package/dist/extensions/weixin/src/auth/accounts.js +12 -12
  19. package/dist/extensions/weixin/src/auth/accounts.js.map +1 -1
  20. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  21. package/dist/extensions/weixin/src/delivery-to.js +2 -2
  22. package/dist/extensions/weixin/src/delivery-to.js.map +1 -1
  23. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  24. package/dist/extensions/weixin/src/messaging/debug-mode.js +5 -5
  25. package/dist/extensions/weixin/src/messaging/debug-mode.js.map +1 -1
  26. package/dist/extensions/weixin/src/messaging/inbound.js +11 -11
  27. package/dist/extensions/weixin/src/messaging/inbound.js.map +1 -1
  28. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  29. package/dist/extensions/weixin/src/plugin.js +1 -1
  30. package/dist/extensions/weixin/src/storage/sync-buf.js +4 -4
  31. package/dist/extensions/weixin/src/storage/sync-buf.js.map +1 -1
  32. package/dist/extensions/weixin/src/workflow-progress.d.ts +1 -1
  33. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  34. package/dist/extensions/weixin/src/workflow-progress.js.map +1 -1
  35. package/dist/gateway/static/root/assets/agents-CRxETUZx.js +222 -0
  36. package/dist/gateway/static/root/assets/{apps-page-DrfytjOb.js → apps-page-wKWf3l57.js} +1 -1
  37. package/dist/gateway/static/root/assets/channels-settings-DDbqVNkx.js +1 -0
  38. package/dist/gateway/static/root/assets/{channels-status-swr-Bs5kMCMI.js → channels-status-swr-DIsl75Y3.js} +1 -1
  39. package/dist/gateway/static/root/assets/copy-SxMW6Xpc.js +1 -0
  40. package/dist/gateway/static/root/assets/{cron-api-BuVcZ5zR.js → cron-api-N9hvuRrn.js} +1 -1
  41. package/dist/gateway/static/root/assets/{cron-page-BMrloeFH.js → cron-page-tlNGNxhP.js} +1 -1
  42. package/dist/gateway/static/root/assets/{dist-CKU1OOTf.js → dist-CJwfHYvT.js} +1 -1
  43. package/dist/gateway/static/root/assets/{extension-debug-page-BdW_46sN.js → extension-debug-page-BVJohZoZ.js} +1 -1
  44. package/dist/gateway/static/root/assets/{extension-page-DW47KI82.js → extension-page-BT2tmElC.js} +1 -1
  45. package/dist/gateway/static/root/assets/extension-settings-page-BSS47c2j.js +1 -0
  46. package/dist/gateway/static/root/assets/{fetch-B2MYHbWg.js → fetch-BaFNUtkE.js} +1 -1
  47. package/dist/gateway/static/root/assets/{field-primitives-DPG-oJmx.js → field-primitives-QwYEq6Hz.js} +1 -1
  48. package/dist/gateway/static/root/assets/{heartbeat-config-api-C8dNts9i.js → heartbeat-config-api-BVSidEDJ.js} +1 -1
  49. package/dist/gateway/static/root/assets/index-CqZzHNEg.css +1 -0
  50. package/dist/gateway/static/root/assets/{index-BmVYculr.js → index-qNrVJp-y.js} +97 -95
  51. package/dist/gateway/static/root/assets/{logs-page-sTsVWz0X.js → logs-page-DDonPVLn.js} +1 -1
  52. package/dist/gateway/static/root/assets/sessions-page-DKt-Wmib.js +1 -0
  53. package/dist/gateway/static/root/assets/{settings-form-section-DuvRQW--.js → settings-form-section-B8N3A3Zo.js} +1 -1
  54. package/dist/gateway/static/root/assets/settings-page-DcJjvvw4.js +3 -0
  55. package/dist/gateway/static/root/assets/{share-preview-page-BtG2kLDh.js → share-preview-page-Q7KqkO-u.js} +1 -1
  56. package/dist/gateway/static/root/assets/skills-page-DuJ4BTO3.js +2 -0
  57. package/dist/gateway/static/root/assets/{theme-store-DryYl3qD.js → theme-store-BbRc5ugR.js} +1 -1
  58. package/dist/gateway/static/root/assets/url-D6jvVYIA.js +7 -0
  59. package/dist/gateway/static/root/assets/{utils-BY7bU1DT.js → utils-CxDGduqK.js} +1 -1
  60. package/dist/gateway/static/root/assets/voice-api-key-field-CTyHz7L_.js +1 -0
  61. package/dist/gateway/static/root/assets/workflows-page-GacJ41Fv.js +27 -0
  62. package/dist/gateway/static/root/index.html +6 -5
  63. package/dist/package.js +1 -1
  64. package/dist/src/agent/agent-manager.js +7 -7
  65. package/dist/src/agent/agent-scope.d.ts +4 -0
  66. package/dist/src/agent/agent-scope.js +53 -10
  67. package/dist/src/agent/agent-scope.js.map +1 -1
  68. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +2 -1
  69. package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +1 -1
  70. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
  71. package/dist/src/agent/child-agent-factory.d.ts +15 -0
  72. package/dist/src/agent/child-agent-factory.js +35 -2
  73. package/dist/src/agent/child-agent-factory.js.map +1 -1
  74. package/dist/src/agent/client-error-format.d.ts +20 -0
  75. package/dist/src/agent/client-error-format.js +97 -0
  76. package/dist/src/agent/client-error-format.js.map +1 -0
  77. package/dist/src/agent/context/workspace-seed.js +2 -2
  78. package/dist/src/agent/embedded/run-turn.js +23 -4
  79. package/dist/src/agent/embedded/run-turn.js.map +1 -1
  80. package/dist/src/agent/embedded/session-tool-result-guard.js +2 -1
  81. package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
  82. package/dist/src/agent/embedded/tool-result-truncation.js +2 -1
  83. package/dist/src/agent/embedded/tool-result-truncation.js.map +1 -1
  84. package/dist/src/agent/fallback/candidates.js +2 -2
  85. package/dist/src/agent/fallback/candidates.js.map +1 -1
  86. package/dist/src/agent/goals/goal-locale.d.ts +1 -1
  87. package/dist/src/agent/goals/goal-run-store.js +4 -4
  88. package/dist/src/agent/goals/persistent-goal-apis.d.ts +0 -2
  89. package/dist/src/agent/goals/persistent-goal-service.js +1 -2
  90. package/dist/src/agent/goals/persistent-goal-service.js.map +1 -1
  91. package/dist/src/agent/goals/post-turn.js +2 -2
  92. package/dist/src/agent/image/generation/normalization.js +2 -12
  93. package/dist/src/agent/image/generation/normalization.js.map +1 -1
  94. package/dist/src/agent/image/generation/provider-registry.d.ts +4 -8
  95. package/dist/src/agent/image/generation/provider-registry.js.map +1 -1
  96. package/dist/src/agent/image/generation/runtime.d.ts +2 -2
  97. package/dist/src/agent/image/generation/runtime.js.map +1 -1
  98. package/dist/src/agent/image/generation/types.d.ts +0 -18
  99. package/dist/src/agent/image/image-helpers.js +6 -1
  100. package/dist/src/agent/image/image-helpers.js.map +1 -1
  101. package/dist/src/agent/image/index.d.ts +1 -1
  102. package/dist/src/agent/image/load-image-media.js +2 -2
  103. package/dist/src/agent/inbound/inbound-loop.d.ts +5 -0
  104. package/dist/src/agent/inbound/inbound-loop.js +41 -10
  105. package/dist/src/agent/inbound/inbound-loop.js.map +1 -1
  106. package/dist/src/agent/inbound/turn-dispatcher.d.ts +4 -0
  107. package/dist/src/agent/inbound/turn-dispatcher.js +7 -5
  108. package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
  109. package/dist/src/agent/ipc/bus.js +1 -1
  110. package/dist/src/agent/ipc/inbox.js +2 -2
  111. package/dist/src/agent/ipc/socket.js +1 -1
  112. package/dist/src/agent/mcp/bundle-mcp-materialize.js +2 -1
  113. package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +1 -1
  114. package/dist/src/agent/mcp/bundle-mcp-names.js +2 -1
  115. package/dist/src/agent/mcp/bundle-mcp-names.js.map +1 -1
  116. package/dist/src/agent/mcp/bundle-mcp-runtime.js +2 -1
  117. package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
  118. package/dist/src/agent/mcp/mcp-transport-config.js +2 -1
  119. package/dist/src/agent/mcp/mcp-transport-config.js.map +1 -1
  120. package/dist/src/agent/mcp/mcp-transport.js +2 -1
  121. package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
  122. package/dist/src/agent/media-generation/runtime-shared.js +2 -9
  123. package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
  124. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  125. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  126. package/dist/src/agent/memory/dreaming/events.js +1 -1
  127. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  128. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  129. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  130. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  131. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  132. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  133. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  134. package/dist/src/agent/messaging/command-handler.d.ts +6 -0
  135. package/dist/src/agent/messaging/command-handler.js +5 -0
  136. package/dist/src/agent/messaging/command-handler.js.map +1 -1
  137. package/dist/src/agent/models/manager.js +1 -1
  138. package/dist/src/agent/orchestration/llm-turn-retry.d.ts +2 -0
  139. package/dist/src/agent/orchestration/llm-turn-retry.js +9 -1
  140. package/dist/src/agent/orchestration/llm-turn-retry.js.map +1 -1
  141. package/dist/src/agent/prompt/safety.d.ts +0 -7
  142. package/dist/src/agent/prompt/safety.js +1 -20
  143. package/dist/src/agent/prompt/safety.js.map +1 -1
  144. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  145. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  146. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  147. package/dist/src/agent/sandbox/path-policy.js +2 -2
  148. package/dist/src/agent/service/build-direct-message-content.js +2 -2
  149. package/dist/src/agent/service/build-direct-message-content.js.map +1 -1
  150. package/dist/src/agent/service/direct-turn-helpers.d.ts +3 -1
  151. package/dist/src/agent/service/direct-turn-helpers.js +6 -1
  152. package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
  153. package/dist/src/agent/service/process-direct-one-shot.d.ts +4 -0
  154. package/dist/src/agent/service/process-direct-one-shot.js +15 -2
  155. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
  156. package/dist/src/agent/service/process-direct-streaming.d.ts +4 -0
  157. package/dist/src/agent/service/process-direct-streaming.js +53 -7
  158. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  159. package/dist/src/agent/service/webchat-tts.d.ts +1 -2
  160. package/dist/src/agent/service/webchat-tts.js +2 -2
  161. package/dist/src/agent/service/webchat-tts.js.map +1 -1
  162. package/dist/src/agent/service.d.ts +8 -0
  163. package/dist/src/agent/service.js +25 -5
  164. package/dist/src/agent/service.js.map +1 -1
  165. package/dist/src/agent/session/session-inspector.js +1 -1
  166. package/dist/src/agent/skills/config.js +1 -1
  167. package/dist/src/agent/skills/hub-hash.js +2 -2
  168. package/dist/src/agent/skills/hub-lock.js +1 -1
  169. package/dist/src/agent/skills/hub-pull.js +2 -2
  170. package/dist/src/agent/skills/index.js +1 -1
  171. package/dist/src/agent/skills/managed-store.js +1 -1
  172. package/dist/src/agent/skills/scanner.js +1 -1
  173. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  174. package/dist/src/agent/skills/skill-manager.js +1 -1
  175. package/dist/src/agent/tools/create-share-tool.js +27 -20
  176. package/dist/src/agent/tools/create-share-tool.js.map +1 -1
  177. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  178. package/dist/src/agent/tools/factory.js +2 -2
  179. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  180. package/dist/src/agent/tools/index.d.ts +0 -1
  181. package/dist/src/agent/tools/index.js +4 -5
  182. package/dist/src/agent/tools/send-media.js +1 -1
  183. package/dist/src/agent/tools/shell.js +0 -13
  184. package/dist/src/agent/tools/shell.js.map +1 -1
  185. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  186. package/dist/src/agent/tools/workflow-tool.js +70 -16
  187. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  188. package/dist/src/agent/tools/write.js +1 -1
  189. package/dist/src/agent/workflow/agent-progress.d.ts +5 -0
  190. package/dist/src/agent/workflow/agent-progress.js +65 -0
  191. package/dist/src/agent/workflow/agent-progress.js.map +1 -0
  192. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +1 -1
  193. package/dist/src/agent/workflow/builtins/audit-repo.js +14 -0
  194. package/dist/src/agent/workflow/builtins/audit-repo.js.map +1 -1
  195. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +1 -1
  196. package/dist/src/agent/workflow/builtins/debug-incident.js +14 -0
  197. package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -1
  198. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +12 -0
  199. package/dist/src/agent/workflow/builtins/implementation-plan.js +175 -0
  200. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +1 -0
  201. package/dist/src/agent/workflow/builtins/index.d.ts +3 -1
  202. package/dist/src/agent/workflow/builtins/index.js +11 -1
  203. package/dist/src/agent/workflow/builtins/index.js.map +1 -1
  204. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +1 -1
  205. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +14 -0
  206. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +1 -1
  207. package/dist/src/agent/workflow/builtins/pr-review.d.ts +1 -1
  208. package/dist/src/agent/workflow/builtins/pr-review.js +14 -0
  209. package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -1
  210. package/dist/src/agent/workflow/builtins/release-check.d.ts +11 -0
  211. package/dist/src/agent/workflow/builtins/release-check.js +165 -0
  212. package/dist/src/agent/workflow/builtins/release-check.js.map +1 -0
  213. package/dist/src/agent/workflow/builtins/research.d.ts +1 -1
  214. package/dist/src/agent/workflow/builtins/research.js +14 -0
  215. package/dist/src/agent/workflow/builtins/research.js.map +1 -1
  216. package/dist/src/agent/workflow/catalog.js +1 -1
  217. package/dist/src/agent/workflow/channel-capability.d.ts +3 -3
  218. package/dist/src/agent/workflow/index.d.ts +2 -1
  219. package/dist/src/agent/workflow/index.js +3 -2
  220. package/dist/src/agent/workflow/lint.d.ts +38 -0
  221. package/dist/src/agent/workflow/lint.js +74 -0
  222. package/dist/src/agent/workflow/lint.js.map +1 -0
  223. package/dist/src/agent/workflow/meta-locale.d.ts +12 -0
  224. package/dist/src/agent/workflow/meta-locale.js +62 -0
  225. package/dist/src/agent/workflow/meta-locale.js.map +1 -0
  226. package/dist/src/agent/workflow/parser.js +7 -1
  227. package/dist/src/agent/workflow/parser.js.map +1 -1
  228. package/dist/src/agent/workflow/runtime.d.ts +4 -1
  229. package/dist/src/agent/workflow/runtime.js +88 -8
  230. package/dist/src/agent/workflow/runtime.js.map +1 -1
  231. package/dist/src/agent/workflow/snapshot.js +2 -12
  232. package/dist/src/agent/workflow/snapshot.js.map +1 -1
  233. package/dist/src/agent/workflow/step-labels.d.ts +8 -0
  234. package/dist/src/agent/workflow/step-labels.js +48 -0
  235. package/dist/src/agent/workflow/step-labels.js.map +1 -0
  236. package/dist/src/agent/workflow/subagent-runner.js +46 -1
  237. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  238. package/dist/src/agent/workflow/types.d.ts +76 -1
  239. package/dist/src/auth/credentials.d.ts +5 -0
  240. package/dist/src/auth/credentials.js +12 -3
  241. package/dist/src/auth/credentials.js.map +1 -1
  242. package/dist/src/auth/profiles/store.js +1 -1
  243. package/dist/src/auth/sync-provider-auth.js +1 -1
  244. package/dist/src/browser/cache-dir-policy.js +1 -1
  245. package/dist/src/browser/cdp-local-launcher.js +2 -2
  246. package/dist/src/browser/index.js +4 -4
  247. package/dist/src/browser/manager.d.ts +1 -3
  248. package/dist/src/browser/manager.js +0 -6
  249. package/dist/src/browser/manager.js.map +1 -1
  250. package/dist/src/browser/providers/browser-ext-install.d.ts +4 -4
  251. package/dist/src/browser/providers/browser-ext-install.js +41 -88
  252. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  253. package/dist/src/browser/providers/cloakbrowser.d.ts +0 -5
  254. package/dist/src/browser/providers/cloakbrowser.js +6 -59
  255. package/dist/src/browser/providers/cloakbrowser.js.map +1 -1
  256. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  257. package/dist/src/browser/stealth.js +1 -1
  258. package/dist/src/channels/attachments/inbound-persist.js +1 -1
  259. package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
  260. package/dist/src/channels/attachments/voice-stt-webchat.js +10 -8
  261. package/dist/src/channels/attachments/voice-stt-webchat.js.map +1 -1
  262. package/dist/src/channels/outbound/persist-store.js +1 -1
  263. package/dist/src/channels/pairing/allow-from-file.js +9 -9
  264. package/dist/src/channels/pairing/allow-from-file.js.map +1 -1
  265. package/dist/src/channels/pairing/pairing-store.js +7 -7
  266. package/dist/src/channels/pairing/pairing-store.js.map +1 -1
  267. package/dist/src/chat-commands/builtins/config.js +2 -2
  268. package/dist/src/chat-commands/builtins/session.js +1 -1
  269. package/dist/src/chat-commands/builtins/session.js.map +1 -1
  270. package/dist/src/chat-commands/builtins/tts.js +2 -2
  271. package/dist/src/chat-commands/builtins/tts.js.map +1 -1
  272. package/dist/src/chat-commands/context.d.ts +3 -0
  273. package/dist/src/chat-commands/context.js +22 -4
  274. package/dist/src/chat-commands/context.js.map +1 -1
  275. package/dist/src/chat-commands/session-key.d.ts +4 -37
  276. package/dist/src/chat-commands/session-key.js +49 -85
  277. package/dist/src/chat-commands/session-key.js.map +1 -1
  278. package/dist/src/chat-commands/types.d.ts +2 -0
  279. package/dist/src/cli/commands/agent/interactive.js +2 -2
  280. package/dist/src/cli/commands/agent/interactive.js.map +1 -1
  281. package/dist/src/cli/commands/agent/sessions.js +2 -2
  282. package/dist/src/cli/commands/agent/sessions.js.map +1 -1
  283. package/dist/src/cli/commands/agent.js +4 -5
  284. package/dist/src/cli/commands/agent.js.map +1 -1
  285. package/dist/src/cli/commands/channels.js +1 -5
  286. package/dist/src/cli/commands/channels.js.map +1 -1
  287. package/dist/src/cli/commands/config.js +1 -1
  288. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  289. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  290. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
  291. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  292. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  293. package/dist/src/cli/commands/extension-dev.js +1 -1
  294. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  295. package/dist/src/cli/commands/extension-pack.js +1 -1
  296. package/dist/src/cli/commands/gateway/lifecycle-core.js +1 -1
  297. package/dist/src/cli/commands/gateway/lifecycle-core.js.map +1 -1
  298. package/dist/src/cli/commands/gateway/logs.d.ts +9 -0
  299. package/dist/src/cli/commands/gateway/logs.js +50 -17
  300. package/dist/src/cli/commands/gateway/logs.js.map +1 -1
  301. package/dist/src/cli/commands/image.js +23 -22
  302. package/dist/src/cli/commands/image.js.map +1 -1
  303. package/dist/src/cli/commands/init.js +4 -4
  304. package/dist/src/cli/commands/onboard.js +1 -1
  305. package/dist/src/cli/commands/session/utils.js +2 -2
  306. package/dist/src/cli/commands/session/utils.js.map +1 -1
  307. package/dist/src/cli/commands/update.js +26 -46
  308. package/dist/src/cli/commands/update.js.map +1 -1
  309. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  310. package/dist/src/cli/utils/session.d.ts +0 -5
  311. package/dist/src/cli/utils/session.js +1 -6
  312. package/dist/src/cli/utils/session.js.map +1 -1
  313. package/dist/src/commands/agents.config.js +1 -1
  314. package/dist/src/commands/agents.config.js.map +1 -1
  315. package/dist/src/config/agent-profile.js +6 -28
  316. package/dist/src/config/agent-profile.js.map +1 -1
  317. package/dist/src/config/agent-typed-models.d.ts +18 -0
  318. package/dist/src/config/agent-typed-models.js +53 -0
  319. package/dist/src/config/agent-typed-models.js.map +1 -0
  320. package/dist/src/config/gateway-bind.js +1 -1
  321. package/dist/src/config/index.js +6 -6
  322. package/dist/src/config/loader.js +2 -2
  323. package/dist/src/config/model-input.js +2 -5
  324. package/dist/src/config/model-input.js.map +1 -1
  325. package/dist/src/config/models-json.js +2 -2
  326. package/dist/src/config/paths-state.js +1 -1
  327. package/dist/src/config/profile.js +2 -2
  328. package/dist/src/config/schema.d.ts +253 -217
  329. package/dist/src/config/schema.js +91 -40
  330. package/dist/src/config/schema.js.map +1 -1
  331. package/dist/src/config/voice.d.ts +3 -28
  332. package/dist/src/config/voice.js +27 -261
  333. package/dist/src/config/voice.js.map +1 -1
  334. package/dist/src/config/workspace-path-helpers.d.ts +1 -2
  335. package/dist/src/config/workspace-path-helpers.js.map +1 -1
  336. package/dist/src/config/workspace-path.js +1 -1
  337. package/dist/src/cron/executor.js +2 -2
  338. package/dist/src/cron/persistence.js +1 -1
  339. package/dist/src/cron/run-log-store.js +1 -1
  340. package/dist/src/daemon/constants.js +1 -1
  341. package/dist/src/daemon/install-plan.js +27 -3
  342. package/dist/src/daemon/install-plan.js.map +1 -1
  343. package/dist/src/daemon/launchd.d.ts +8 -0
  344. package/dist/src/daemon/launchd.js +7 -14
  345. package/dist/src/daemon/launchd.js.map +1 -1
  346. package/dist/src/daemon/schtasks.d.ts +25 -0
  347. package/dist/src/daemon/schtasks.js +168 -48
  348. package/dist/src/daemon/schtasks.js.map +1 -1
  349. package/dist/src/daemon/service.js +5 -4
  350. package/dist/src/daemon/service.js.map +1 -1
  351. package/dist/src/daemon/systemd.d.ts +6 -0
  352. package/dist/src/daemon/systemd.js +20 -5
  353. package/dist/src/daemon/systemd.js.map +1 -1
  354. package/dist/src/extensions/activation-context.js +0 -1
  355. package/dist/src/extensions/activation-context.js.map +1 -1
  356. package/dist/src/extensions/bundle-mcp.js +1 -1
  357. package/dist/src/extensions/discover-extensions.js +1 -1
  358. package/dist/src/extensions/health.js +1 -1
  359. package/dist/src/extensions/loader.js +1 -1
  360. package/dist/src/extensions/lockfile.js +2 -2
  361. package/dist/src/extensions/normalize-manifest.js +0 -1
  362. package/dist/src/extensions/normalize-manifest.js.map +1 -1
  363. package/dist/src/extensions/types/manifest.d.ts +0 -2
  364. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  365. package/dist/src/gateway/agent-builtin-tools.js +1 -0
  366. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  367. package/dist/src/gateway/agents-admin.d.ts +9 -0
  368. package/dist/src/gateway/agents-admin.js +28 -4
  369. package/dist/src/gateway/agents-admin.js.map +1 -1
  370. package/dist/src/gateway/config-tools-web.js +3 -2
  371. package/dist/src/gateway/config-tools-web.js.map +1 -1
  372. package/dist/src/gateway/file-path-classifier.js +2 -2
  373. package/dist/src/gateway/heartbeat/service.js +2 -2
  374. package/dist/src/gateway/heartbeat/service.js.map +1 -1
  375. package/dist/src/gateway/hono/app.js +1 -1
  376. package/dist/src/gateway/hono/lib/agent-model.d.ts +25 -10
  377. package/dist/src/gateway/hono/lib/agent-model.js +60 -36
  378. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  379. package/dist/src/gateway/hono/lib/config-payload.js +29 -6
  380. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  381. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  382. package/dist/src/gateway/hono/lib/mask-secret-length.d.ts +6 -0
  383. package/dist/src/gateway/hono/lib/mask-secret-length.js +16 -0
  384. package/dist/src/gateway/hono/lib/mask-secret-length.js.map +1 -0
  385. package/dist/src/gateway/hono/lib/safe-providers-config.d.ts +1 -1
  386. package/dist/src/gateway/hono/lib/safe-providers-config.js +2 -1
  387. package/dist/src/gateway/hono/lib/safe-providers-config.js.map +1 -1
  388. package/dist/src/gateway/hono/lib/safe-voice-config.js +16 -54
  389. package/dist/src/gateway/hono/lib/safe-voice-config.js.map +1 -1
  390. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  391. package/dist/src/gateway/hono/oauth.js +1 -1
  392. package/dist/src/gateway/hono/routes/agents.js +2 -2
  393. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  394. package/dist/src/gateway/hono/routes/config-patch/agents.js +25 -7
  395. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  396. package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -11
  397. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
  398. package/dist/src/gateway/hono/routes/config-patch/gateway.js +3 -2
  399. package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +1 -1
  400. package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -3
  401. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  402. package/dist/src/gateway/hono/routes/config.js +59 -0
  403. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  404. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  405. package/dist/src/gateway/hono/routes/goals.js +1 -1
  406. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  407. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  408. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  409. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  410. package/dist/src/gateway/hono/routes/models.js +75 -12
  411. package/dist/src/gateway/hono/routes/models.js.map +1 -1
  412. package/dist/src/gateway/hono/routes/sessions.js +28 -7
  413. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  414. package/dist/src/gateway/hono/routes/shares.js +15 -13
  415. package/dist/src/gateway/hono/routes/shares.js.map +1 -1
  416. package/dist/src/gateway/hono/routes/tunnel.js +1 -1
  417. package/dist/src/gateway/hono/routes/update.js +4 -2
  418. package/dist/src/gateway/hono/routes/update.js.map +1 -1
  419. package/dist/src/gateway/hono/routes/voice.js +75 -0
  420. package/dist/src/gateway/hono/routes/voice.js.map +1 -1
  421. package/dist/src/gateway/hono/routes/workflows.d.ts +3 -0
  422. package/dist/src/gateway/hono/routes/workflows.js +347 -0
  423. package/dist/src/gateway/hono/routes/workflows.js.map +1 -0
  424. package/dist/src/gateway/hono/routes/workspace.js +4 -4
  425. package/dist/src/gateway/hono/sse.js +16 -33
  426. package/dist/src/gateway/hono/sse.js.map +1 -1
  427. package/dist/src/gateway/lock.js +11 -11
  428. package/dist/src/gateway/lock.js.map +1 -1
  429. package/dist/src/gateway/ports.js +6 -6
  430. package/dist/src/gateway/ports.js.map +1 -1
  431. package/dist/src/gateway/resolve-webchat-session-key.d.ts +19 -0
  432. package/dist/src/gateway/resolve-webchat-session-key.js +46 -0
  433. package/dist/src/gateway/resolve-webchat-session-key.js.map +1 -0
  434. package/dist/src/gateway/service/agent-runner.js +2 -2
  435. package/dist/src/gateway/service/marketplace-service.js +2 -2
  436. package/dist/src/gateway/service/run-gateway-agent.js +9 -11
  437. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  438. package/dist/src/gateway/service/sessions-api.d.ts +3 -0
  439. package/dist/src/gateway/service/sessions-api.js +8 -0
  440. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  441. package/dist/src/gateway/service.d.ts +3 -2
  442. package/dist/src/gateway/service.js +9 -8
  443. package/dist/src/gateway/service.js.map +1 -1
  444. package/dist/src/gateway/session-reset-service.d.ts +20 -0
  445. package/dist/src/gateway/session-reset-service.js +54 -0
  446. package/dist/src/gateway/session-reset-service.js.map +1 -0
  447. package/dist/src/gateway/startup-readiness.d.ts +1 -1
  448. package/dist/src/gateway/startup-readiness.js +1 -0
  449. package/dist/src/gateway/startup-readiness.js.map +1 -1
  450. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  451. package/dist/src/heartbeat/index.js +1 -1
  452. package/dist/src/infra/gateway-processes.js +2 -2
  453. package/dist/src/infra/gateway-processes.js.map +1 -1
  454. package/dist/src/infra/restart.js +2 -2
  455. package/dist/src/infra/run-command.d.ts +16 -0
  456. package/dist/src/infra/run-command.js +67 -0
  457. package/dist/src/infra/run-command.js.map +1 -0
  458. package/dist/src/infra/update-check.js +1 -1
  459. package/dist/src/infra/update-global.d.ts +45 -0
  460. package/dist/src/infra/update-global.js +224 -0
  461. package/dist/src/infra/update-global.js.map +1 -0
  462. package/dist/src/infra/update-lock.js +3 -3
  463. package/dist/src/infra/update-runner.js +1 -1
  464. package/dist/src/infra/update-startup.js +2 -2
  465. package/dist/src/infra/write-file-atomic.js +2 -2
  466. package/dist/src/mcp/channel-shared.js +2 -1
  467. package/dist/src/mcp/channel-shared.js.map +1 -1
  468. package/dist/src/providers/auth-runtime/auth-profile-store.js +2 -2
  469. package/dist/src/providers/auth-runtime/auth-profile-store.js.map +1 -1
  470. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -12
  471. package/dist/src/providers/auth-runtime/resolve-auth.js.map +1 -1
  472. package/dist/src/providers/auth-runtime/types.d.ts +6 -12
  473. package/dist/src/providers/index.js +2 -2
  474. package/dist/src/providers/model-registry.js +1 -1
  475. package/dist/src/routing/agent-session-key.d.ts +58 -0
  476. package/dist/src/routing/agent-session-key.js +164 -0
  477. package/dist/src/routing/agent-session-key.js.map +1 -0
  478. package/dist/src/routing/index.d.ts +1 -1
  479. package/dist/src/routing/index.js +4 -2
  480. package/dist/src/routing/index.js.map +1 -1
  481. package/dist/src/routing/resolve-route.d.ts +15 -0
  482. package/dist/src/routing/resolve-route.js +41 -20
  483. package/dist/src/routing/resolve-route.js.map +1 -1
  484. package/dist/src/routing/resolve-tui-session-key.d.ts +25 -0
  485. package/dist/src/routing/resolve-tui-session-key.js +54 -0
  486. package/dist/src/routing/resolve-tui-session-key.js.map +1 -0
  487. package/dist/src/routing/session-key-utils.d.ts +24 -0
  488. package/dist/src/routing/session-key-utils.js +92 -0
  489. package/dist/src/routing/session-key-utils.js.map +1 -0
  490. package/dist/src/routing/session-key.d.ts +19 -49
  491. package/dist/src/routing/session-key.js +143 -116
  492. package/dist/src/routing/session-key.js.map +1 -1
  493. package/dist/src/session/config-store.js +2 -2
  494. package/dist/src/session/index.d.ts +6 -0
  495. package/dist/src/session/index.js +7 -1
  496. package/dist/src/session/init-session-turn.d.ts +30 -0
  497. package/dist/src/session/init-session-turn.js +102 -0
  498. package/dist/src/session/init-session-turn.js.map +1 -0
  499. package/dist/src/session/lifecycle-timestamps.d.ts +8 -0
  500. package/dist/src/session/lifecycle-timestamps.js +16 -0
  501. package/dist/src/session/lifecycle-timestamps.js.map +1 -0
  502. package/dist/src/session/manager.d.ts +7 -1
  503. package/dist/src/session/manager.js +8 -1
  504. package/dist/src/session/manager.js.map +1 -1
  505. package/dist/src/session/parity/jsonl-transcript-io.js +2 -2
  506. package/dist/src/session/parity/sessions-json-file.js +1 -1
  507. package/dist/src/session/parity/transcript-file-lock.js +2 -2
  508. package/dist/src/session/parity/transcript-paths.js +2 -2
  509. package/dist/src/session/parity/transcript-paths.js.map +1 -1
  510. package/dist/src/session/parity/xopc-session-disk-entry.d.ts +6 -0
  511. package/dist/src/session/reset-policy.d.ts +32 -0
  512. package/dist/src/session/reset-policy.js +65 -0
  513. package/dist/src/session/reset-policy.js.map +1 -0
  514. package/dist/src/session/reset-triggers.d.ts +20 -0
  515. package/dist/src/session/reset-triggers.js +63 -0
  516. package/dist/src/session/reset-triggers.js.map +1 -0
  517. package/dist/src/session/reset-type.d.ts +12 -0
  518. package/dist/src/session/reset-type.js +25 -0
  519. package/dist/src/session/reset-type.js.map +1 -0
  520. package/dist/src/session/resolve-session.d.ts +30 -0
  521. package/dist/src/session/resolve-session.js +93 -0
  522. package/dist/src/session/resolve-session.js.map +1 -0
  523. package/dist/src/session/search-index-cache.js +1 -1
  524. package/dist/src/session/search-index.js +1 -1
  525. package/dist/src/session/session-title.js +3 -2
  526. package/dist/src/session/session-title.js.map +1 -1
  527. package/dist/src/session/store.d.ts +11 -4
  528. package/dist/src/session/store.js +62 -11
  529. package/dist/src/session/store.js.map +1 -1
  530. package/dist/src/session/transcript-events.js +2 -1
  531. package/dist/src/session/transcript-events.js.map +1 -1
  532. package/dist/src/share/share-auto.js +2 -2
  533. package/dist/src/share/share-store.js +3 -3
  534. package/dist/src/share/share-thumbnail.js +2 -2
  535. package/dist/src/share/share-url.d.ts +33 -0
  536. package/dist/src/share/share-url.js +56 -14
  537. package/dist/src/share/share-url.js.map +1 -1
  538. package/dist/src/share/share-zip.js +1 -1
  539. package/dist/src/share/site-share-store.js +3 -3
  540. package/dist/src/share/site-static-serve.js +1 -1
  541. package/dist/src/tui/backends/embedded-backend.js +4 -9
  542. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  543. package/dist/src/tui/backends/gateway-sse-backend.js +1 -1
  544. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  545. package/dist/src/tui/clipboard-image.js +3 -3
  546. package/dist/src/tui/components/chat-log.js +3 -3
  547. package/dist/src/tui/components/chat-log.js.map +1 -1
  548. package/dist/src/tui/theme-manager.js +1 -1
  549. package/dist/src/tui/theme.d.ts +0 -2
  550. package/dist/src/tui/theme.js +1 -3
  551. package/dist/src/tui/theme.js.map +1 -1
  552. package/dist/src/tui/tui-agent-events.js +2 -1
  553. package/dist/src/tui/tui-agent-events.js.map +1 -1
  554. package/dist/src/tui/tui-commands.d.ts +3 -0
  555. package/dist/src/tui/tui-commands.js +45 -10
  556. package/dist/src/tui/tui-commands.js.map +1 -1
  557. package/dist/src/tui/tui-keybindings-file.js +2 -22
  558. package/dist/src/tui/tui-keybindings-file.js.map +1 -1
  559. package/dist/src/tui/tui-scoped-models.js +2 -2
  560. package/dist/src/tui/tui-session-actions.d.ts +28 -0
  561. package/dist/src/tui/tui-session-actions.js +88 -0
  562. package/dist/src/tui/tui-session-actions.js.map +1 -0
  563. package/dist/src/tui/tui-settings.js +1 -1
  564. package/dist/src/tui/tui.js +54 -49
  565. package/dist/src/tui/tui.js.map +1 -1
  566. package/dist/src/tunnel/frpc-binary.js +3 -3
  567. package/dist/src/tunnel/frpc-config.js +1 -1
  568. package/dist/src/tunnel/frpc-extract.js +1 -1
  569. package/dist/src/tunnel/tunnel-state.js +1 -1
  570. package/dist/src/utils/logger/audit.js +1 -1
  571. package/dist/src/utils/logger/log-store.js +1 -1
  572. package/dist/src/utils/logger/rotation.js +1 -1
  573. package/dist/src/utils/string-coerce.d.ts +2 -0
  574. package/dist/src/utils/string-coerce.js +10 -1
  575. package/dist/src/utils/string-coerce.js.map +1 -1
  576. package/dist/src/voice/metadata/builtin.d.ts +2 -0
  577. package/dist/src/voice/metadata/builtin.js +420 -0
  578. package/dist/src/voice/metadata/builtin.js.map +1 -0
  579. package/dist/src/voice/metadata/index.d.ts +4 -0
  580. package/dist/src/voice/metadata/index.js +3 -0
  581. package/dist/src/voice/metadata/registry.d.ts +5 -0
  582. package/dist/src/voice/metadata/registry.js +34 -0
  583. package/dist/src/voice/metadata/registry.js.map +1 -0
  584. package/dist/src/voice/metadata/types.d.ts +41 -0
  585. package/dist/src/voice/metadata/types.js +1 -0
  586. package/dist/src/voice/stt/config-slice.d.ts +2 -5
  587. package/dist/src/voice/stt/config-slice.js +5 -26
  588. package/dist/src/voice/stt/config-slice.js.map +1 -1
  589. package/dist/src/voice/stt/list-providers.d.ts +3 -3
  590. package/dist/src/voice/stt/list-providers.js +41 -6
  591. package/dist/src/voice/stt/list-providers.js.map +1 -1
  592. package/dist/src/voice/stt/types.d.ts +1 -18
  593. package/dist/src/voice/stt/types.js +4 -2
  594. package/dist/src/voice/stt/types.js.map +1 -1
  595. package/dist/src/voice/tts/audio.js +1 -1
  596. package/dist/src/voice/tts/config-slice.d.ts +3 -7
  597. package/dist/src/voice/tts/config-slice.js +7 -38
  598. package/dist/src/voice/tts/config-slice.js.map +1 -1
  599. package/dist/src/voice/tts/list-providers.d.ts +3 -3
  600. package/dist/src/voice/tts/list-providers.js +41 -6
  601. package/dist/src/voice/tts/list-providers.js.map +1 -1
  602. package/dist/src/voice/tts/merge-config.js +2 -48
  603. package/dist/src/voice/tts/merge-config.js.map +1 -1
  604. package/dist/src/voice/tts/providers/alibaba-speech.js +1 -1
  605. package/dist/src/voice/tts/providers/alibaba-speech.js.map +1 -1
  606. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  607. package/dist/src/voice/tts/types.d.ts +1 -29
  608. package/dist/src/voice/tts/types.js +19 -17
  609. package/dist/src/voice/tts/types.js.map +1 -1
  610. package/dist/src/workflows/domain/command.d.ts +18 -0
  611. package/dist/src/workflows/domain/command.js +1 -0
  612. package/dist/src/workflows/domain/definition.d.ts +62 -0
  613. package/dist/src/workflows/domain/definition.js +1 -0
  614. package/dist/src/workflows/domain/event.d.ts +67 -0
  615. package/dist/src/workflows/domain/event.js +1 -0
  616. package/dist/src/workflows/domain/index.d.ts +5 -0
  617. package/dist/src/workflows/domain/index.js +2 -0
  618. package/dist/src/workflows/domain/result.d.ts +65 -0
  619. package/dist/src/workflows/domain/result.js +1 -0
  620. package/dist/src/workflows/domain/run.d.ts +120 -0
  621. package/dist/src/workflows/domain/run.js +14 -0
  622. package/dist/src/workflows/domain/run.js.map +1 -0
  623. package/dist/src/workflows/engine/index.d.ts +2 -0
  624. package/dist/src/workflows/engine/index.js +3 -0
  625. package/dist/src/workflows/engine/projector.d.ts +3 -0
  626. package/dist/src/workflows/engine/projector.js +205 -0
  627. package/dist/src/workflows/engine/projector.js.map +1 -0
  628. package/dist/src/workflows/engine/workflow-engine.d.ts +31 -0
  629. package/dist/src/workflows/engine/workflow-engine.js +188 -0
  630. package/dist/src/workflows/engine/workflow-engine.js.map +1 -0
  631. package/dist/src/workflows/index.d.ts +6 -0
  632. package/dist/src/workflows/index.js +11 -0
  633. package/dist/src/workflows/runtime/index.d.ts +1 -0
  634. package/dist/src/workflows/runtime/index.js +4 -0
  635. package/dist/src/workflows/runtime/script-runtime.d.ts +3 -0
  636. package/dist/src/workflows/runtime/script-runtime.js +3 -0
  637. package/dist/src/workflows/store/event-store.d.ts +17 -0
  638. package/dist/src/workflows/store/event-store.js +83 -0
  639. package/dist/src/workflows/store/event-store.js.map +1 -0
  640. package/dist/src/workflows/store/paths.d.ts +7 -0
  641. package/dist/src/workflows/store/paths.js +26 -0
  642. package/dist/src/workflows/store/paths.js.map +1 -0
  643. package/dist/src/workflows/store/run-store.d.ts +13 -0
  644. package/dist/src/workflows/store/run-store.js +68 -0
  645. package/dist/src/workflows/store/run-store.js.map +1 -0
  646. package/package.json +5 -8
  647. package/dist/gateway/static/root/assets/agents-mS3_HpRI.js +0 -222
  648. package/dist/gateway/static/root/assets/channels-settings-BG6b9KrW.js +0 -1
  649. package/dist/gateway/static/root/assets/extension-settings-page-B-W4x2xP.js +0 -1
  650. package/dist/gateway/static/root/assets/index-ew_2L2We.css +0 -1
  651. package/dist/gateway/static/root/assets/sessions-page-FaG_Vlkb.js +0 -1
  652. package/dist/gateway/static/root/assets/settings-page-Bet1OerL.js +0 -3
  653. package/dist/gateway/static/root/assets/skills-page-DhUO235y.js +0 -2
  654. package/dist/gateway/static/root/assets/url-BwNL6Rgk.js +0 -3
  655. package/dist/gateway/static/root/assets/voice-api-key-field-CGEydndO.js +0 -1
  656. package/dist/src/agent/tools/browser-legacy-tools.d.ts +0 -17
  657. package/dist/src/agent/tools/browser-legacy-tools.js +0 -766
  658. package/dist/src/agent/tools/browser-legacy-tools.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"image.js","names":["resolvePath"],"sources":["../../../../src/cli/commands/image.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises';\nimport { join, resolve as resolvePath } from 'node:path';\nimport { Command } from 'commander';\nimport { loadConfig, saveConfig } from '../../config/loader.js';\nimport { parseModelRef, type AgentModelConfig } from '../../config/schema.js';\nimport {\n resolveAgentModelPrimaryValue,\n resolveAgentModelFallbackValues,\n} from '../../config/model-input.js';\nimport { isProviderConfigured } from '../../providers/index.js';\nimport {\n generateImage,\n getImageGenerationProvider,\n listImageGenerationProvidersSummary,\n} from '../../agent/image/index.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { colors } from '../utils/colors.js';\nimport { getContextWithOpts } from '../context.js';\n\nfunction modelRefToString(model?: AgentModelConfig): string | null {\n if (!model) {\n return null;\n }\n return resolveAgentModelPrimaryValue(model) ?? null;\n}\n\nfunction modelFallbacksToArray(model?: AgentModelConfig): string[] {\n return resolveAgentModelFallbackValues(model);\n}\n\nfunction createImageCommand(_ctx: CLIContext): Command {\n const cmd = new Command('image')\n .description('Configure image generation and understanding models')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc image status # Show current image config',\n 'xopc image set-understanding openai/gpt-4o # Set image understanding model',\n 'xopc image set-generation openai/gpt-image-1 # Set image generation model',\n 'xopc image add-fallback understanding anthropic/claude-sonnet-4-5',\n 'xopc image add-fallback generation dashscope/wan2.7-image-pro',\n 'xopc image remove-fallback understanding 0 # Remove first fallback',\n 'xopc image providers # List available providers',\n ]),\n );\n\n cmd\n .command('status')\n .description('Show current image model configuration')\n .option('--json', 'Output as JSON')\n .action(async (opts: { json?: boolean }) => {\n const ctx = getContextWithOpts();\n const config = loadConfig(ctx.configPath);\n const defaults = config.agents?.defaults;\n\n const understandingPrimary = modelRefToString(defaults?.imageModel);\n const understandingFallbacks = modelFallbacksToArray(defaults?.imageModel);\n const generationPrimary = modelRefToString(defaults?.imageGenerationModel);\n const generationFallbacks = modelFallbacksToArray(defaults?.imageGenerationModel);\n const mediaMaxMb = defaults?.mediaMaxMb;\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n imageUnderstanding: {\n primary: understandingPrimary,\n fallbacks: understandingFallbacks,\n },\n imageGeneration: {\n primary: generationPrimary,\n fallbacks: generationFallbacks,\n },\n mediaMaxMb: mediaMaxMb ?? null,\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n console.log('');\n console.log(colors.cyan('Image multimodal configuration'));\n console.log('═'.repeat(50));\n\n console.log('');\n console.log(colors.cyan('Image understanding (vision)'));\n if (understandingPrimary) {\n const parsed = parseModelRef(understandingPrimary);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('(provider not configured)');\n console.log(` Primary: ${understandingPrimary} ${status}`);\n } else {\n console.log(` Primary: ${colors.gray('(not set — inferred from keys / defaults)')}`);\n }\n for (let i = 0; i < understandingFallbacks.length; i++) {\n const fb = understandingFallbacks[i]!;\n const parsed = parseModelRef(fb);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('?');\n console.log(` Fallback ${i + 1}: ${fb} ${status}`);\n }\n\n console.log('');\n console.log(colors.cyan('Image generation'));\n if (generationPrimary) {\n const parsed = parseModelRef(generationPrimary);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('(provider not configured)');\n console.log(` Primary: ${generationPrimary} ${status}`);\n } else {\n console.log(` Primary: ${colors.gray('(not set — defaults to openai/gpt-image-1)')}`);\n }\n for (let i = 0; i < generationFallbacks.length; i++) {\n const fb = generationFallbacks[i]!;\n const parsed = parseModelRef(fb);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('?');\n console.log(` Fallback ${i + 1}: ${fb} ${status}`);\n }\n\n console.log('');\n console.log(colors.cyan('General'));\n console.log(` Max image size: ${mediaMaxMb ? `${mediaMaxMb} MB` : colors.gray('(default)')}`);\n\n console.log('');\n console.log('═'.repeat(50));\n console.log(\n colors.gray(\n 'Use \"xopc image set-understanding\" / \"xopc image set-generation\" to set primary models.',\n ),\n );\n console.log('');\n });\n\n cmd\n .command('set-understanding <modelRef>')\n .description('Set the primary image understanding (vision) model')\n .action(async (modelRef: string) => {\n const parsed = parseModelRef(modelRef);\n if (!parsed) {\n console.error(\n colors.red(`Invalid model reference: \"${modelRef}\". Use \"provider/model\" format.`),\n );\n process.exit(1);\n }\n\n const configured = await isProviderConfigured(parsed.provider);\n if (!configured) {\n console.warn(\n colors.yellow(\n `Provider \"${parsed.provider}\" is not configured. Set the API key before using this model.`,\n ),\n );\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n const existingFallbacks = modelFallbacksToArray(config.agents.defaults.imageModel);\n if (existingFallbacks.length > 0) {\n config.agents.defaults.imageModel = {\n primary: modelRef,\n fallbacks: existingFallbacks,\n };\n } else {\n config.agents.defaults.imageModel = modelRef;\n }\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Image understanding model set to: ${modelRef}`));\n });\n\n cmd\n .command('set-generation <modelRef>')\n .description('Set the primary image generation model')\n .action(async (modelRef: string) => {\n const parsed = parseModelRef(modelRef);\n if (!parsed) {\n console.error(\n colors.red(`Invalid model reference: \"${modelRef}\". Use \"provider/model\" format.`),\n );\n process.exit(1);\n }\n\n const configured = await isProviderConfigured(parsed.provider);\n if (!configured) {\n console.warn(\n colors.yellow(\n `Provider \"${parsed.provider}\" is not configured. Set the API key before using this model.`,\n ),\n );\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n const existingFallbacks = modelFallbacksToArray(config.agents.defaults.imageGenerationModel);\n if (existingFallbacks.length > 0) {\n config.agents.defaults.imageGenerationModel = {\n primary: modelRef,\n fallbacks: existingFallbacks,\n };\n } else {\n config.agents.defaults.imageGenerationModel = modelRef;\n }\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Image generation model set to: ${modelRef}`));\n });\n\n cmd\n .command('add-fallback <type> <modelRef>')\n .description('Add a fallback model (type: \"understanding\" or \"generation\")')\n .action(async (type: string, modelRef: string) => {\n if (type !== 'understanding' && type !== 'generation') {\n console.error(colors.red('Type must be \"understanding\" or \"generation\".'));\n process.exit(1);\n }\n\n const parsed = parseModelRef(modelRef);\n if (!parsed) {\n console.error(\n colors.red(`Invalid model reference: \"${modelRef}\". Use \"provider/model\" format.`),\n );\n process.exit(1);\n }\n\n const configured = await isProviderConfigured(parsed.provider);\n if (!configured) {\n console.warn(colors.yellow(`Provider \"${parsed.provider}\" is not configured.`));\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n const configKey = type === 'understanding' ? 'imageModel' : 'imageGenerationModel';\n const current = config.agents.defaults[configKey];\n const primary = resolveAgentModelPrimaryValue(current);\n const fallbacks = [...resolveAgentModelFallbackValues(current)];\n\n if (!primary) {\n const hint =\n type === 'understanding'\n ? 'xopc image set-understanding <model>'\n : 'xopc image set-generation <model>';\n console.error(colors.red(`No primary model set for image ${type}. Set it first: ${hint}`));\n process.exit(1);\n }\n\n if (fallbacks.includes(modelRef)) {\n console.warn(colors.yellow(`\"${modelRef}\" is already in the fallback list.`));\n return;\n }\n\n fallbacks.push(modelRef);\n config.agents.defaults[configKey] = { primary, fallbacks };\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Added fallback for image ${type}: ${modelRef}`));\n console.log(colors.gray(` Fallback chain: ${primary} -> ${fallbacks.join(' -> ')}`));\n });\n\n cmd\n .command('remove-fallback <type> <index>')\n .description('Remove a fallback model by index (0-based)')\n .action(async (type: string, indexStr: string) => {\n if (type !== 'understanding' && type !== 'generation') {\n console.error(colors.red('Type must be \"understanding\" or \"generation\".'));\n process.exit(1);\n }\n\n const index = parseInt(indexStr, 10);\n if (Number.isNaN(index) || index < 0) {\n console.error(colors.red('Index must be a non-negative integer.'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n const configKey = type === 'understanding' ? 'imageModel' : 'imageGenerationModel';\n const current = config.agents?.defaults?.[configKey];\n const primary = resolveAgentModelPrimaryValue(current);\n const fallbacks = [...resolveAgentModelFallbackValues(current)];\n\n if (index >= fallbacks.length) {\n console.error(\n colors.red(`Fallback index ${index} out of range (${fallbacks.length} fallbacks).`),\n );\n process.exit(1);\n }\n\n const removed = fallbacks.splice(index, 1)[0];\n\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n if (fallbacks.length > 0 && primary) {\n config.agents.defaults[configKey] = { primary, fallbacks };\n } else if (primary) {\n config.agents.defaults[configKey] = primary;\n }\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Removed fallback: ${removed}`));\n });\n\n cmd\n .command('providers')\n .description('List registered image-generation providers and their capabilities')\n .option('--json', 'Output as JSON')\n .action(async (opts: { json?: boolean }) => {\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n\n const summaries = listImageGenerationProvidersSummary(config);\n const rows = summaries.map((s) => {\n const provider = getImageGenerationProvider(s.id, config);\n let configured = false;\n try {\n configured = provider?.isConfigured?.({ cfg: config }) === true;\n } catch {\n configured = false;\n }\n return {\n id: s.id,\n label: s.label ?? s.id,\n defaultModel: s.defaultModel ?? null,\n models: s.models,\n aliases: s.aliases ?? [],\n capabilities: s.capabilities ?? null,\n configured,\n };\n });\n\n if (opts.json) {\n console.log(JSON.stringify(rows, null, 2));\n return;\n }\n\n console.log('');\n console.log(colors.cyan('Image-generation providers'));\n console.log('═'.repeat(60));\n\n if (rows.length === 0) {\n console.log('');\n console.log(\n colors.yellow(\n ' No image-generation providers registered. Check `extensions/<vendor>/` and bundled.ts.',\n ),\n );\n console.log('');\n return;\n }\n\n for (const row of rows) {\n const statusIcon = row.configured ? colors.green('OK') : colors.yellow('?');\n const statusText = row.configured ? 'configured' : 'missing API key';\n console.log('');\n console.log(` ${statusIcon} ${row.label} (${row.id}) — ${statusText}`);\n if (row.defaultModel) console.log(` Default: ${row.defaultModel}`);\n if (row.models.length > 0) {\n console.log(` Models: ${row.models.map((m) => `${row.id}/${m}`).join(', ')}`);\n }\n if (row.aliases.length > 0) {\n console.log(` Aliases: ${row.aliases.join(', ')}`);\n }\n }\n\n console.log('');\n console.log('═'.repeat(60));\n console.log(\n colors.gray(\n 'Use `xopc image set-generation <provider/model>` to set the primary model, ' +\n '`xopc auth set <provider>` to configure API keys.',\n ),\n );\n console.log('');\n });\n\n cmd\n .command('set-max-size <mb>')\n .description('Set maximum image size in MB')\n .action(async (mbStr: string) => {\n const mb = parseFloat(mbStr);\n if (Number.isNaN(mb) || mb <= 0) {\n console.error(colors.red('Size must be a positive number (in MB).'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n config.agents.defaults.mediaMaxMb = mb;\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Max image size set to: ${mb} MB`));\n });\n\n cmd\n .command('set-timeout <ms>')\n .description('Set the per-request timeout (ms) for image generation; 0 to clear')\n .action(async (msStr: string) => {\n const ms = parseInt(msStr, 10);\n if (Number.isNaN(ms) || ms < 0) {\n console.error(colors.red('Timeout must be a non-negative integer (ms).'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) config.agents = { defaults: {} } as typeof config.agents;\n if (!config.agents.defaults) config.agents.defaults = {} as typeof config.agents.defaults;\n\n const current = config.agents.defaults.imageGenerationModel;\n const primary = resolveAgentModelPrimaryValue(current);\n const fallbacks = resolveAgentModelFallbackValues(current);\n const autoProviderFallback =\n typeof current === 'object' && current !== null && !Array.isArray(current)\n ? (current as { autoProviderFallback?: boolean }).autoProviderFallback === true\n : false;\n\n if (ms === 0) {\n // Clear timeout but keep other knobs.\n if (primary && fallbacks.length === 0 && !autoProviderFallback) {\n config.agents.defaults.imageGenerationModel = primary;\n } else if (primary || fallbacks.length > 0) {\n config.agents.defaults.imageGenerationModel = {\n ...(primary ? { primary } : {}),\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(autoProviderFallback ? { autoProviderFallback: true } : {}),\n };\n } else {\n delete (config.agents.defaults as Record<string, unknown>).imageGenerationModel;\n }\n await saveConfig(config, configPath);\n console.log(colors.green('Image generation timeout cleared.'));\n return;\n }\n\n config.agents.defaults.imageGenerationModel = {\n ...(primary ? { primary } : {}),\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(autoProviderFallback ? { autoProviderFallback: true } : {}),\n timeoutMs: ms,\n };\n await saveConfig(config, configPath);\n console.log(colors.green(`Image generation timeout set to: ${ms}ms`));\n });\n\n cmd\n .command('set-auto-fallback <on-or-off>')\n .description('Enable / disable sweeping every configured provider when primary chain fails')\n .action(async (value: string) => {\n const v = value.trim().toLowerCase();\n const enable = v === 'on' || v === 'true' || v === '1' || v === 'yes';\n const disable = v === 'off' || v === 'false' || v === '0' || v === 'no';\n if (!enable && !disable) {\n console.error(colors.red('Value must be \"on\" or \"off\".'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) config.agents = { defaults: {} } as typeof config.agents;\n if (!config.agents.defaults) config.agents.defaults = {} as typeof config.agents.defaults;\n\n const current = config.agents.defaults.imageGenerationModel;\n const primary = resolveAgentModelPrimaryValue(current);\n const fallbacks = resolveAgentModelFallbackValues(current);\n const timeoutMs =\n typeof current === 'object' && current !== null && !Array.isArray(current)\n ? (current as { timeoutMs?: number }).timeoutMs\n : undefined;\n\n if (disable) {\n if (primary && fallbacks.length === 0 && !timeoutMs) {\n config.agents.defaults.imageGenerationModel = primary;\n } else if (primary || fallbacks.length > 0 || timeoutMs) {\n config.agents.defaults.imageGenerationModel = {\n ...(primary ? { primary } : {}),\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(timeoutMs ? { timeoutMs } : {}),\n };\n } else {\n delete (config.agents.defaults as Record<string, unknown>).imageGenerationModel;\n }\n await saveConfig(config, configPath);\n console.log(colors.green('Image generation auto-fallback disabled.'));\n return;\n }\n\n config.agents.defaults.imageGenerationModel = {\n ...(primary ? { primary } : {}),\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(timeoutMs ? { timeoutMs } : {}),\n autoProviderFallback: true,\n };\n await saveConfig(config, configPath);\n console.log(colors.green('Image generation auto-fallback enabled.'));\n });\n\n cmd\n .command('generate <prompt...>')\n .description('Generate one or more images and save them to disk')\n .option('--model <ref>', 'Model ref (provider/model); falls back to configured primary')\n .option('--size <size>', 'Image size, e.g. 1024x1024')\n .option('--count <n>', 'Number of images to generate', (v) => parseInt(v, 10), 1)\n .option('--output <dir>', 'Output directory (default: ./generated-images)')\n .option('--timeout <ms>', 'Per-call timeout (ms)', (v) => parseInt(v, 10))\n .action(\n async (\n promptParts: string[],\n opts: { model?: string; size?: string; count?: number; output?: string; timeout?: number },\n ) => {\n const prompt = promptParts.join(' ').trim();\n if (!prompt) {\n console.error(colors.red('Prompt is required.'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n const outputDir = resolvePath(opts.output ?? './generated-images');\n await mkdir(outputDir, { recursive: true });\n\n const count = Number.isFinite(opts.count) && (opts.count ?? 0) > 0 ? Math.floor(opts.count!) : 1;\n\n try {\n const result = await generateImage({\n prompt,\n cfg: config,\n ...(opts.model ? { modelRef: opts.model } : {}),\n ...(opts.size ? { size: opts.size } : {}),\n count,\n ...(typeof opts.timeout === 'number' && opts.timeout > 0 ? { timeoutMs: opts.timeout } : {}),\n });\n\n const writtenPaths: string[] = [];\n for (let i = 0; i < result.images.length; i++) {\n const img = result.images[i];\n const fileName = img.fileName?.trim() || `image-${i + 1}.png`;\n const full = join(outputDir, fileName);\n await writeFile(full, img.buffer);\n writtenPaths.push(full);\n }\n\n console.log('');\n console.log(\n colors.green(\n `Generated ${result.images.length} image${result.images.length === 1 ? '' : 's'} (model: ${result.model}).`,\n ),\n );\n for (const p of writtenPaths) console.log(` - ${p}`);\n console.log('');\n } catch (err) {\n console.error(colors.red(`Image generation failed: ${err instanceof Error ? err.message : String(err)}`));\n process.exit(1);\n }\n },\n );\n\n return cmd;\n}\n\nregister({\n id: 'image',\n name: 'image',\n description: 'Configure image generation and understanding models',\n factory: createImageCommand,\n metadata: {\n category: 'utility',\n examples: [\n 'xopc image status',\n 'xopc image set-understanding openai/gpt-4o',\n 'xopc image set-generation openai/gpt-image-1',\n 'xopc image providers',\n ],\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"image.js","names":["resolvePath"],"sources":["../../../../src/cli/commands/image.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises';\nimport { join, resolve as resolvePath } from 'node:path';\nimport { Command } from 'commander';\nimport { loadConfig, saveConfig } from '../../config/loader.js';\nimport { parseModelRef, type AgentModelConfig } from '../../config/schema.js';\nimport {\n resolveAgentModelPrimaryValue,\n resolveAgentModelFallbackValues,\n} from '../../config/model-input.js';\nimport { isProviderConfigured } from '../../providers/index.js';\nimport {\n generateImage,\n getImageGenerationProvider,\n listImageGenerationProvidersSummary,\n} from '../../agent/image/index.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { colors } from '../utils/colors.js';\nimport { getContextWithOpts } from '../context.js';\n\nfunction modelRefToString(model?: AgentModelConfig): string | null {\n if (!model) {\n return null;\n }\n return resolveAgentModelPrimaryValue(model) ?? null;\n}\n\nfunction modelFallbacksToArray(model?: AgentModelConfig): string[] {\n return resolveAgentModelFallbackValues(model);\n}\n\nfunction createImageCommand(_ctx: CLIContext): Command {\n const cmd = new Command('image')\n .description('Configure image generation and understanding models')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc image status # Show current image config',\n 'xopc image set-understanding openai/gpt-4o # Set image understanding model',\n 'xopc image set-generation openai/gpt-image-1 # Set image generation model',\n 'xopc image add-fallback understanding anthropic/claude-sonnet-4-5',\n 'xopc image add-fallback generation dashscope/wan2.7-image-pro',\n 'xopc image remove-fallback understanding 0 # Remove first fallback',\n 'xopc image providers # List available providers',\n ]),\n );\n\n cmd\n .command('status')\n .description('Show current image model configuration')\n .option('--json', 'Output as JSON')\n .action(async (opts: { json?: boolean }) => {\n const ctx = getContextWithOpts();\n const config = loadConfig(ctx.configPath);\n const defaults = config.agents?.defaults;\n\n const understandingPrimary = modelRefToString(defaults?.imageModel);\n const understandingFallbacks = modelFallbacksToArray(defaults?.imageModel);\n const generationPrimary = modelRefToString(defaults?.imageGenerationModel);\n const generationFallbacks = modelFallbacksToArray(defaults?.imageGenerationModel);\n const mediaMaxMb = defaults?.mediaMaxMb;\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n imageUnderstanding: {\n primary: understandingPrimary,\n fallbacks: understandingFallbacks,\n },\n imageGeneration: {\n primary: generationPrimary,\n fallbacks: generationFallbacks,\n },\n mediaMaxMb: mediaMaxMb ?? null,\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n console.log('');\n console.log(colors.cyan('Image multimodal configuration'));\n console.log('═'.repeat(50));\n\n console.log('');\n console.log(colors.cyan('Image understanding (vision)'));\n if (understandingPrimary) {\n const parsed = parseModelRef(understandingPrimary);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('(provider not configured)');\n console.log(` Primary: ${understandingPrimary} ${status}`);\n } else {\n console.log(` Primary: ${colors.gray('(not set — inferred from keys / defaults)')}`);\n }\n for (let i = 0; i < understandingFallbacks.length; i++) {\n const fb = understandingFallbacks[i]!;\n const parsed = parseModelRef(fb);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('?');\n console.log(` Fallback ${i + 1}: ${fb} ${status}`);\n }\n\n console.log('');\n console.log(colors.cyan('Image generation'));\n if (generationPrimary) {\n const parsed = parseModelRef(generationPrimary);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('(provider not configured)');\n console.log(` Primary: ${generationPrimary} ${status}`);\n } else {\n console.log(` Primary: ${colors.gray('(not set — defaults to openai/gpt-image-1)')}`);\n }\n for (let i = 0; i < generationFallbacks.length; i++) {\n const fb = generationFallbacks[i]!;\n const parsed = parseModelRef(fb);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('?');\n console.log(` Fallback ${i + 1}: ${fb} ${status}`);\n }\n\n console.log('');\n console.log(colors.cyan('General'));\n console.log(` Max image size: ${mediaMaxMb ? `${mediaMaxMb} MB` : colors.gray('(default)')}`);\n\n console.log('');\n console.log('═'.repeat(50));\n console.log(\n colors.gray(\n 'Use \"xopc image set-understanding\" / \"xopc image set-generation\" to set primary models.',\n ),\n );\n console.log('');\n });\n\n cmd\n .command('set-understanding <modelRef>')\n .description('Set the primary image understanding (vision) model')\n .action(async (modelRef: string) => {\n const parsed = parseModelRef(modelRef);\n if (!parsed) {\n console.error(\n colors.red(`Invalid model reference: \"${modelRef}\". Use \"provider/model\" format.`),\n );\n process.exit(1);\n }\n\n const configured = await isProviderConfigured(parsed.provider);\n if (!configured) {\n console.warn(\n colors.yellow(\n `Provider \"${parsed.provider}\" is not configured. Set the API key before using this model.`,\n ),\n );\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n const existingFallbacks = modelFallbacksToArray(config.agents.defaults.imageModel);\n config.agents.defaults.imageModel =\n existingFallbacks.length > 0\n ? { primary: modelRef, fallbacks: existingFallbacks }\n : { primary: modelRef };\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Image understanding model set to: ${modelRef}`));\n });\n\n cmd\n .command('set-generation <modelRef>')\n .description('Set the primary image generation model')\n .action(async (modelRef: string) => {\n const parsed = parseModelRef(modelRef);\n if (!parsed) {\n console.error(\n colors.red(`Invalid model reference: \"${modelRef}\". Use \"provider/model\" format.`),\n );\n process.exit(1);\n }\n\n const configured = await isProviderConfigured(parsed.provider);\n if (!configured) {\n console.warn(\n colors.yellow(\n `Provider \"${parsed.provider}\" is not configured. Set the API key before using this model.`,\n ),\n );\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n const existingFallbacks = modelFallbacksToArray(config.agents.defaults.imageGenerationModel);\n config.agents.defaults.imageGenerationModel =\n existingFallbacks.length > 0\n ? { primary: modelRef, fallbacks: existingFallbacks }\n : { primary: modelRef };\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Image generation model set to: ${modelRef}`));\n });\n\n cmd\n .command('add-fallback <type> <modelRef>')\n .description('Add a fallback model (type: \"understanding\" or \"generation\")')\n .action(async (type: string, modelRef: string) => {\n if (type !== 'understanding' && type !== 'generation') {\n console.error(colors.red('Type must be \"understanding\" or \"generation\".'));\n process.exit(1);\n }\n\n const parsed = parseModelRef(modelRef);\n if (!parsed) {\n console.error(\n colors.red(`Invalid model reference: \"${modelRef}\". Use \"provider/model\" format.`),\n );\n process.exit(1);\n }\n\n const configured = await isProviderConfigured(parsed.provider);\n if (!configured) {\n console.warn(colors.yellow(`Provider \"${parsed.provider}\" is not configured.`));\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n const configKey = type === 'understanding' ? 'imageModel' : 'imageGenerationModel';\n const current = config.agents.defaults[configKey];\n const primary = resolveAgentModelPrimaryValue(current);\n const fallbacks = [...resolveAgentModelFallbackValues(current)];\n\n if (!primary) {\n const hint =\n type === 'understanding'\n ? 'xopc image set-understanding <model>'\n : 'xopc image set-generation <model>';\n console.error(colors.red(`No primary model set for image ${type}. Set it first: ${hint}`));\n process.exit(1);\n }\n\n if (fallbacks.includes(modelRef)) {\n console.warn(colors.yellow(`\"${modelRef}\" is already in the fallback list.`));\n return;\n }\n\n fallbacks.push(modelRef);\n config.agents.defaults[configKey] = { primary, fallbacks };\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Added fallback for image ${type}: ${modelRef}`));\n console.log(colors.gray(` Fallback chain: ${primary} -> ${fallbacks.join(' -> ')}`));\n });\n\n cmd\n .command('remove-fallback <type> <index>')\n .description('Remove a fallback model by index (0-based)')\n .action(async (type: string, indexStr: string) => {\n if (type !== 'understanding' && type !== 'generation') {\n console.error(colors.red('Type must be \"understanding\" or \"generation\".'));\n process.exit(1);\n }\n\n const index = parseInt(indexStr, 10);\n if (Number.isNaN(index) || index < 0) {\n console.error(colors.red('Index must be a non-negative integer.'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n const configKey = type === 'understanding' ? 'imageModel' : 'imageGenerationModel';\n const current = config.agents?.defaults?.[configKey];\n const primary = resolveAgentModelPrimaryValue(current);\n const fallbacks = [...resolveAgentModelFallbackValues(current)];\n\n if (index >= fallbacks.length) {\n console.error(\n colors.red(`Fallback index ${index} out of range (${fallbacks.length} fallbacks).`),\n );\n process.exit(1);\n }\n\n const removed = fallbacks.splice(index, 1)[0];\n\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n if (primary) {\n config.agents.defaults[configKey] =\n fallbacks.length > 0 ? { primary, fallbacks } : { primary };\n }\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Removed fallback: ${removed}`));\n });\n\n cmd\n .command('providers')\n .description('List registered image-generation providers and their capabilities')\n .option('--json', 'Output as JSON')\n .action(async (opts: { json?: boolean }) => {\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n\n const summaries = listImageGenerationProvidersSummary(config);\n const rows = summaries.map((s) => {\n const provider = getImageGenerationProvider(s.id, config);\n let configured = false;\n try {\n configured = provider?.isConfigured?.({ cfg: config }) === true;\n } catch {\n configured = false;\n }\n return {\n id: s.id,\n label: s.label ?? s.id,\n defaultModel: s.defaultModel ?? null,\n models: s.models,\n aliases: s.aliases ?? [],\n capabilities: s.capabilities ?? null,\n configured,\n };\n });\n\n if (opts.json) {\n console.log(JSON.stringify(rows, null, 2));\n return;\n }\n\n console.log('');\n console.log(colors.cyan('Image-generation providers'));\n console.log('═'.repeat(60));\n\n if (rows.length === 0) {\n console.log('');\n console.log(\n colors.yellow(\n ' No image-generation providers registered. Check `extensions/<vendor>/` and bundled.ts.',\n ),\n );\n console.log('');\n return;\n }\n\n for (const row of rows) {\n const statusIcon = row.configured ? colors.green('OK') : colors.yellow('?');\n const statusText = row.configured ? 'configured' : 'missing API key';\n console.log('');\n console.log(` ${statusIcon} ${row.label} (${row.id}) — ${statusText}`);\n if (row.defaultModel) console.log(` Default: ${row.defaultModel}`);\n if (row.models.length > 0) {\n console.log(` Models: ${row.models.map((m) => `${row.id}/${m}`).join(', ')}`);\n }\n if (row.aliases.length > 0) {\n console.log(` Aliases: ${row.aliases.join(', ')}`);\n }\n }\n\n console.log('');\n console.log('═'.repeat(60));\n console.log(\n colors.gray(\n 'Use `xopc image set-generation <provider/model>` to set the primary model, ' +\n '`xopc auth set <provider>` to configure API keys.',\n ),\n );\n console.log('');\n });\n\n cmd\n .command('set-max-size <mb>')\n .description('Set maximum image size in MB')\n .action(async (mbStr: string) => {\n const mb = parseFloat(mbStr);\n if (Number.isNaN(mb) || mb <= 0) {\n console.error(colors.red('Size must be a positive number (in MB).'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n config.agents.defaults.mediaMaxMb = mb;\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Max image size set to: ${mb} MB`));\n });\n\n cmd\n .command('set-timeout <ms>')\n .description('Set the per-request timeout (ms) for image generation; 0 to clear')\n .action(async (msStr: string) => {\n const ms = parseInt(msStr, 10);\n if (Number.isNaN(ms) || ms < 0) {\n console.error(colors.red('Timeout must be a non-negative integer (ms).'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) config.agents = { defaults: {} } as typeof config.agents;\n if (!config.agents.defaults) config.agents.defaults = {} as typeof config.agents.defaults;\n\n const current = config.agents.defaults.imageGenerationModel;\n const primary = resolveAgentModelPrimaryValue(current);\n if (!primary) {\n console.error(\n colors.red('No image generation model is configured. Run `xopc image set-generation <provider/model>` first.'),\n );\n process.exit(1);\n }\n const fallbacks = resolveAgentModelFallbackValues(current);\n const autoProviderFallback = current?.autoProviderFallback === true;\n\n if (ms === 0) {\n config.agents.defaults.imageGenerationModel = {\n primary,\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(autoProviderFallback ? { autoProviderFallback: true } : {}),\n };\n await saveConfig(config, configPath);\n console.log(colors.green('Image generation timeout cleared.'));\n return;\n }\n\n config.agents.defaults.imageGenerationModel = {\n primary,\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(autoProviderFallback ? { autoProviderFallback: true } : {}),\n timeoutMs: ms,\n };\n await saveConfig(config, configPath);\n console.log(colors.green(`Image generation timeout set to: ${ms}ms`));\n });\n\n cmd\n .command('set-auto-fallback <on-or-off>')\n .description('Enable / disable sweeping every configured provider when primary chain fails')\n .action(async (value: string) => {\n const v = value.trim().toLowerCase();\n const enable = v === 'on' || v === 'true' || v === '1' || v === 'yes';\n const disable = v === 'off' || v === 'false' || v === '0' || v === 'no';\n if (!enable && !disable) {\n console.error(colors.red('Value must be \"on\" or \"off\".'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) config.agents = { defaults: {} } as typeof config.agents;\n if (!config.agents.defaults) config.agents.defaults = {} as typeof config.agents.defaults;\n\n const current = config.agents.defaults.imageGenerationModel;\n const primary = resolveAgentModelPrimaryValue(current);\n if (!primary) {\n console.error(\n colors.red('No image generation model is configured. Run `xopc image set-generation <provider/model>` first.'),\n );\n process.exit(1);\n }\n const fallbacks = resolveAgentModelFallbackValues(current);\n const timeoutMs = current?.timeoutMs;\n\n if (disable) {\n config.agents.defaults.imageGenerationModel = {\n primary,\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(timeoutMs ? { timeoutMs } : {}),\n };\n await saveConfig(config, configPath);\n console.log(colors.green('Image generation auto-fallback disabled.'));\n return;\n }\n\n config.agents.defaults.imageGenerationModel = {\n primary,\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(timeoutMs ? { timeoutMs } : {}),\n autoProviderFallback: true,\n };\n await saveConfig(config, configPath);\n console.log(colors.green('Image generation auto-fallback enabled.'));\n });\n\n cmd\n .command('generate <prompt...>')\n .description('Generate one or more images and save them to disk')\n .option('--model <ref>', 'Model ref (provider/model); falls back to configured primary')\n .option('--size <size>', 'Image size, e.g. 1024x1024')\n .option('--count <n>', 'Number of images to generate', (v) => parseInt(v, 10), 1)\n .option('--output <dir>', 'Output directory (default: ./generated-images)')\n .option('--timeout <ms>', 'Per-call timeout (ms)', (v) => parseInt(v, 10))\n .action(\n async (\n promptParts: string[],\n opts: { model?: string; size?: string; count?: number; output?: string; timeout?: number },\n ) => {\n const prompt = promptParts.join(' ').trim();\n if (!prompt) {\n console.error(colors.red('Prompt is required.'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n const outputDir = resolvePath(opts.output ?? './generated-images');\n await mkdir(outputDir, { recursive: true });\n\n const count = Number.isFinite(opts.count) && (opts.count ?? 0) > 0 ? Math.floor(opts.count!) : 1;\n\n try {\n const result = await generateImage({\n prompt,\n cfg: config,\n ...(opts.model ? { modelRef: opts.model } : {}),\n ...(opts.size ? { size: opts.size } : {}),\n count,\n ...(typeof opts.timeout === 'number' && opts.timeout > 0 ? { timeoutMs: opts.timeout } : {}),\n });\n\n const writtenPaths: string[] = [];\n for (let i = 0; i < result.images.length; i++) {\n const img = result.images[i];\n const fileName = img.fileName?.trim() || `image-${i + 1}.png`;\n const full = join(outputDir, fileName);\n await writeFile(full, img.buffer);\n writtenPaths.push(full);\n }\n\n console.log('');\n console.log(\n colors.green(\n `Generated ${result.images.length} image${result.images.length === 1 ? '' : 's'} (model: ${result.model}).`,\n ),\n );\n for (const p of writtenPaths) console.log(` - ${p}`);\n console.log('');\n } catch (err) {\n console.error(colors.red(`Image generation failed: ${err instanceof Error ? err.message : String(err)}`));\n process.exit(1);\n }\n },\n );\n\n return cmd;\n}\n\nregister({\n id: 'image',\n name: 'image',\n description: 'Configure image generation and understanding models',\n factory: createImageCommand,\n metadata: {\n category: 'utility',\n examples: [\n 'xopc image status',\n 'xopc image set-understanding openai/gpt-4o',\n 'xopc image set-generation openai/gpt-image-1',\n 'xopc image providers',\n ],\n },\n});\n"],"mappings":";;;;;;;;;;;;;;aAGgE;aACc;gBAKd;AAUhE,SAAS,iBAAiB,OAAyC;AACjE,KAAI,CAAC,MACH,QAAO;AAET,QAAO,8BAA8B,MAAM,IAAI;;AAGjD,SAAS,sBAAsB,OAAoC;AACjE,QAAO,gCAAgC,MAAM;;AAG/C,SAAS,mBAAmB,MAA2B;CACrD,MAAM,MAAM,IAAI,QAAQ,QAAQ,CAC7B,YAAY,sDAAsD,CAClE,YACC,SACA,eAAe;EACb;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,CACH;AAEH,KACG,QAAQ,SAAS,CACjB,YAAY,yCAAyC,CACrD,OAAO,UAAU,iBAAiB,CAClC,OAAO,OAAO,SAA6B;EAG1C,MAAM,WADS,WADH,oBACiB,CAAC,WACP,CAAC,QAAQ;EAEhC,MAAM,uBAAuB,iBAAiB,UAAU,WAAW;EACnE,MAAM,yBAAyB,sBAAsB,UAAU,WAAW;EAC1E,MAAM,oBAAoB,iBAAiB,UAAU,qBAAqB;EAC1E,MAAM,sBAAsB,sBAAsB,UAAU,qBAAqB;EACjF,MAAM,aAAa,UAAU;AAE7B,MAAI,KAAK,MAAM;AACb,WAAQ,IACN,KAAK,UACH;IACE,oBAAoB;KAClB,SAAS;KACT,WAAW;KACZ;IACD,iBAAiB;KACf,SAAS;KACT,WAAW;KACZ;IACD,YAAY,cAAc;IAC3B,EACD,MACA,EACD,CACF;AACD;;AAGF,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,OAAO,KAAK,iCAAiC,CAAC;AAC1D,UAAQ,IAAI,IAAI,OAAO,GAAG,CAAC;AAE3B,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,OAAO,KAAK,+BAA+B,CAAC;AACxD,MAAI,sBAAsB;GACxB,MAAM,SAAS,cAAc,qBAAqB;GAElD,MAAM,UADa,SAAS,MAAM,qBAAqB,OAAO,SAAS,GAAG,SAC9C,OAAO,MAAM,KAAK,GAAG,OAAO,OAAO,4BAA4B;AAC3F,WAAQ,IAAI,cAAc,qBAAqB,GAAG,SAAS;QAE3D,SAAQ,IAAI,cAAc,OAAO,KAAK,4CAA4C,GAAG;AAEvF,OAAK,IAAI,IAAI,GAAG,IAAI,uBAAuB,QAAQ,KAAK;GACtD,MAAM,KAAK,uBAAuB;GAClC,MAAM,SAAS,cAAc,GAAG;GAEhC,MAAM,UADa,SAAS,MAAM,qBAAqB,OAAO,SAAS,GAAG,SAC9C,OAAO,MAAM,KAAK,GAAG,OAAO,OAAO,IAAI;AACnE,WAAQ,IAAI,cAAc,IAAI,EAAE,IAAI,GAAG,GAAG,SAAS;;AAGrD,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,OAAO,KAAK,mBAAmB,CAAC;AAC5C,MAAI,mBAAmB;GACrB,MAAM,SAAS,cAAc,kBAAkB;GAE/C,MAAM,UADa,SAAS,MAAM,qBAAqB,OAAO,SAAS,GAAG,SAC9C,OAAO,MAAM,KAAK,GAAG,OAAO,OAAO,4BAA4B;AAC3F,WAAQ,IAAI,cAAc,kBAAkB,GAAG,SAAS;QAExD,SAAQ,IAAI,cAAc,OAAO,KAAK,6CAA6C,GAAG;AAExF,OAAK,IAAI,IAAI,GAAG,IAAI,oBAAoB,QAAQ,KAAK;GACnD,MAAM,KAAK,oBAAoB;GAC/B,MAAM,SAAS,cAAc,GAAG;GAEhC,MAAM,UADa,SAAS,MAAM,qBAAqB,OAAO,SAAS,GAAG,SAC9C,OAAO,MAAM,KAAK,GAAG,OAAO,OAAO,IAAI;AACnE,WAAQ,IAAI,cAAc,IAAI,EAAE,IAAI,GAAG,GAAG,SAAS;;AAGrD,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,OAAO,KAAK,UAAU,CAAC;AACnC,UAAQ,IAAI,qBAAqB,aAAa,GAAG,WAAW,OAAO,OAAO,KAAK,YAAY,GAAG;AAE9F,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,IAAI,OAAO,GAAG,CAAC;AAC3B,UAAQ,IACN,OAAO,KACL,8FACD,CACF;AACD,UAAQ,IAAI,GAAG;GACf;AAEJ,KACG,QAAQ,+BAA+B,CACvC,YAAY,qDAAqD,CACjE,OAAO,OAAO,aAAqB;EAClC,MAAM,SAAS,cAAc,SAAS;AACtC,MAAI,CAAC,QAAQ;AACX,WAAQ,MACN,OAAO,IAAI,6BAA6B,SAAS,iCAAiC,CACnF;AACD,WAAQ,KAAK,EAAE;;AAIjB,MAAI,CAAC,MADoB,qBAAqB,OAAO,SAAS,CAE5D,SAAQ,KACN,OAAO,OACL,aAAa,OAAO,SAAS,+DAC9B,CACF;EAGH,MAAM,aAAa,oBAAoB,CAAC;EACxC,MAAM,SAAS,WAAW,WAAW;AACrC,MAAI,CAAC,OAAO,OACV,QAAO,SAAS,EAAE,UAAU,EAAE,EAAE;AAElC,MAAI,CAAC,OAAO,OAAO,SACjB,QAAO,OAAO,WAAW,EAAE;EAG7B,MAAM,oBAAoB,sBAAsB,OAAO,OAAO,SAAS,WAAW;AAClF,SAAO,OAAO,SAAS,aACrB,kBAAkB,SAAS,IACvB;GAAE,SAAS;GAAU,WAAW;GAAmB,GACnD,EAAE,SAAS,UAAU;AAE3B,QAAM,WAAW,QAAQ,WAAW;AACpC,UAAQ,IAAI,OAAO,MAAM,qCAAqC,WAAW,CAAC;GAC1E;AAEJ,KACG,QAAQ,4BAA4B,CACpC,YAAY,yCAAyC,CACrD,OAAO,OAAO,aAAqB;EAClC,MAAM,SAAS,cAAc,SAAS;AACtC,MAAI,CAAC,QAAQ;AACX,WAAQ,MACN,OAAO,IAAI,6BAA6B,SAAS,iCAAiC,CACnF;AACD,WAAQ,KAAK,EAAE;;AAIjB,MAAI,CAAC,MADoB,qBAAqB,OAAO,SAAS,CAE5D,SAAQ,KACN,OAAO,OACL,aAAa,OAAO,SAAS,+DAC9B,CACF;EAGH,MAAM,aAAa,oBAAoB,CAAC;EACxC,MAAM,SAAS,WAAW,WAAW;AACrC,MAAI,CAAC,OAAO,OACV,QAAO,SAAS,EAAE,UAAU,EAAE,EAAE;AAElC,MAAI,CAAC,OAAO,OAAO,SACjB,QAAO,OAAO,WAAW,EAAE;EAG7B,MAAM,oBAAoB,sBAAsB,OAAO,OAAO,SAAS,qBAAqB;AAC5F,SAAO,OAAO,SAAS,uBACrB,kBAAkB,SAAS,IACvB;GAAE,SAAS;GAAU,WAAW;GAAmB,GACnD,EAAE,SAAS,UAAU;AAE3B,QAAM,WAAW,QAAQ,WAAW;AACpC,UAAQ,IAAI,OAAO,MAAM,kCAAkC,WAAW,CAAC;GACvE;AAEJ,KACG,QAAQ,iCAAiC,CACzC,YAAY,mEAA+D,CAC3E,OAAO,OAAO,MAAc,aAAqB;AAChD,MAAI,SAAS,mBAAmB,SAAS,cAAc;AACrD,WAAQ,MAAM,OAAO,IAAI,oDAAgD,CAAC;AAC1E,WAAQ,KAAK,EAAE;;EAGjB,MAAM,SAAS,cAAc,SAAS;AACtC,MAAI,CAAC,QAAQ;AACX,WAAQ,MACN,OAAO,IAAI,6BAA6B,SAAS,iCAAiC,CACnF;AACD,WAAQ,KAAK,EAAE;;AAIjB,MAAI,CAAC,MADoB,qBAAqB,OAAO,SAAS,CAE5D,SAAQ,KAAK,OAAO,OAAO,aAAa,OAAO,SAAS,sBAAsB,CAAC;EAGjF,MAAM,aAAa,oBAAoB,CAAC;EACxC,MAAM,SAAS,WAAW,WAAW;AACrC,MAAI,CAAC,OAAO,OACV,QAAO,SAAS,EAAE,UAAU,EAAE,EAAE;AAElC,MAAI,CAAC,OAAO,OAAO,SACjB,QAAO,OAAO,WAAW,EAAE;EAG7B,MAAM,YAAY,SAAS,kBAAkB,eAAe;EAC5D,MAAM,UAAU,OAAO,OAAO,SAAS;EACvC,MAAM,UAAU,8BAA8B,QAAQ;EACtD,MAAM,YAAY,CAAC,GAAG,gCAAgC,QAAQ,CAAC;AAE/D,MAAI,CAAC,SAAS;GACZ,MAAM,OACJ,SAAS,kBACL,yCACA;AACN,WAAQ,MAAM,OAAO,IAAI,kCAAkC,KAAK,kBAAkB,OAAO,CAAC;AAC1F,WAAQ,KAAK,EAAE;;AAGjB,MAAI,UAAU,SAAS,SAAS,EAAE;AAChC,WAAQ,KAAK,OAAO,OAAO,IAAI,SAAS,oCAAoC,CAAC;AAC7E;;AAGF,YAAU,KAAK,SAAS;AACxB,SAAO,OAAO,SAAS,aAAa;GAAE;GAAS;GAAW;AAE1D,QAAM,WAAW,QAAQ,WAAW;AACpC,UAAQ,IAAI,OAAO,MAAM,4BAA4B,KAAK,IAAI,WAAW,CAAC;AAC1E,UAAQ,IAAI,OAAO,KAAK,sBAAsB,QAAQ,MAAM,UAAU,KAAK,OAAO,GAAG,CAAC;GACtF;AAEJ,KACG,QAAQ,iCAAiC,CACzC,YAAY,6CAA6C,CACzD,OAAO,OAAO,MAAc,aAAqB;AAChD,MAAI,SAAS,mBAAmB,SAAS,cAAc;AACrD,WAAQ,MAAM,OAAO,IAAI,oDAAgD,CAAC;AAC1E,WAAQ,KAAK,EAAE;;EAGjB,MAAM,QAAQ,SAAS,UAAU,GAAG;AACpC,MAAI,OAAO,MAAM,MAAM,IAAI,QAAQ,GAAG;AACpC,WAAQ,MAAM,OAAO,IAAI,wCAAwC,CAAC;AAClE,WAAQ,KAAK,EAAE;;EAGjB,MAAM,aAAa,oBAAoB,CAAC;EACxC,MAAM,SAAS,WAAW,WAAW;EACrC,MAAM,YAAY,SAAS,kBAAkB,eAAe;EAC5D,MAAM,UAAU,OAAO,QAAQ,WAAW;EAC1C,MAAM,UAAU,8BAA8B,QAAQ;EACtD,MAAM,YAAY,CAAC,GAAG,gCAAgC,QAAQ,CAAC;AAE/D,MAAI,SAAS,UAAU,QAAQ;AAC7B,WAAQ,MACN,OAAO,IAAI,kBAAkB,MAAM,iBAAiB,UAAU,OAAO,cAAc,CACpF;AACD,WAAQ,KAAK,EAAE;;EAGjB,MAAM,UAAU,UAAU,OAAO,OAAO,EAAE,CAAC;AAE3C,MAAI,CAAC,OAAO,OACV,QAAO,SAAS,EAAE,UAAU,EAAE,EAAE;AAElC,MAAI,CAAC,OAAO,OAAO,SACjB,QAAO,OAAO,WAAW,EAAE;AAG7B,MAAI,QACF,QAAO,OAAO,SAAS,aACrB,UAAU,SAAS,IAAI;GAAE;GAAS;GAAW,GAAG,EAAE,SAAS;AAG/D,QAAM,WAAW,QAAQ,WAAW;AACpC,UAAQ,IAAI,OAAO,MAAM,qBAAqB,UAAU,CAAC;GACzD;AAEJ,KACG,QAAQ,YAAY,CACpB,YAAY,oEAAoE,CAChF,OAAO,UAAU,iBAAiB,CAClC,OAAO,OAAO,SAA6B;EAC1C,MAAM,aAAa,oBAAoB,CAAC;EACxC,MAAM,SAAS,WAAW,WAAW;EAGrC,MAAM,OADY,oCAAoC,OAChC,CAAC,KAAK,MAAM;GAChC,MAAM,WAAW,2BAA2B,EAAE,IAAI,OAAO;GACzD,IAAI,aAAa;AACjB,OAAI;AACF,iBAAa,UAAU,eAAe,EAAE,KAAK,QAAQ,CAAC,KAAK;WACrD;AACN,iBAAa;;AAEf,UAAO;IACL,IAAI,EAAE;IACN,OAAO,EAAE,SAAS,EAAE;IACpB,cAAc,EAAE,gBAAgB;IAChC,QAAQ,EAAE;IACV,SAAS,EAAE,WAAW,EAAE;IACxB,cAAc,EAAE,gBAAgB;IAChC;IACD;IACD;AAEF,MAAI,KAAK,MAAM;AACb,WAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,EAAE,CAAC;AAC1C;;AAGF,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,OAAO,KAAK,6BAA6B,CAAC;AACtD,UAAQ,IAAI,IAAI,OAAO,GAAG,CAAC;AAE3B,MAAI,KAAK,WAAW,GAAG;AACrB,WAAQ,IAAI,GAAG;AACf,WAAQ,IACN,OAAO,OACL,2FACD,CACF;AACD,WAAQ,IAAI,GAAG;AACf;;AAGF,OAAK,MAAM,OAAO,MAAM;GACtB,MAAM,aAAa,IAAI,aAAa,OAAO,MAAM,KAAK,GAAG,OAAO,OAAO,IAAI;GAC3E,MAAM,aAAa,IAAI,aAAa,eAAe;AACnD,WAAQ,IAAI,GAAG;AACf,WAAQ,IAAI,KAAK,WAAW,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,MAAM,aAAa;AACvE,OAAI,IAAI,aAAc,SAAQ,IAAI,iBAAiB,IAAI,eAAe;AACtE,OAAI,IAAI,OAAO,SAAS,EACtB,SAAQ,IAAI,iBAAiB,IAAI,OAAO,KAAK,MAAM,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,KAAK,GAAG;AAEpF,OAAI,IAAI,QAAQ,SAAS,EACvB,SAAQ,IAAI,iBAAiB,IAAI,QAAQ,KAAK,KAAK,GAAG;;AAI1D,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,IAAI,OAAO,GAAG,CAAC;AAC3B,UAAQ,IACN,OAAO,KACL,+HAED,CACF;AACD,UAAQ,IAAI,GAAG;GACf;AAEJ,KACG,QAAQ,oBAAoB,CAC5B,YAAY,+BAA+B,CAC3C,OAAO,OAAO,UAAkB;EAC/B,MAAM,KAAK,WAAW,MAAM;AAC5B,MAAI,OAAO,MAAM,GAAG,IAAI,MAAM,GAAG;AAC/B,WAAQ,MAAM,OAAO,IAAI,0CAA0C,CAAC;AACpE,WAAQ,KAAK,EAAE;;EAGjB,MAAM,aAAa,oBAAoB,CAAC;EACxC,MAAM,SAAS,WAAW,WAAW;AACrC,MAAI,CAAC,OAAO,OACV,QAAO,SAAS,EAAE,UAAU,EAAE,EAAE;AAElC,MAAI,CAAC,OAAO,OAAO,SACjB,QAAO,OAAO,WAAW,EAAE;AAE7B,SAAO,OAAO,SAAS,aAAa;AAEpC,QAAM,WAAW,QAAQ,WAAW;AACpC,UAAQ,IAAI,OAAO,MAAM,0BAA0B,GAAG,KAAK,CAAC;GAC5D;AAEJ,KACG,QAAQ,mBAAmB,CAC3B,YAAY,oEAAoE,CAChF,OAAO,OAAO,UAAkB;EAC/B,MAAM,KAAK,SAAS,OAAO,GAAG;AAC9B,MAAI,OAAO,MAAM,GAAG,IAAI,KAAK,GAAG;AAC9B,WAAQ,MAAM,OAAO,IAAI,+CAA+C,CAAC;AACzE,WAAQ,KAAK,EAAE;;EAGjB,MAAM,aAAa,oBAAoB,CAAC;EACxC,MAAM,SAAS,WAAW,WAAW;AACrC,MAAI,CAAC,OAAO,OAAQ,QAAO,SAAS,EAAE,UAAU,EAAE,EAAE;AACpD,MAAI,CAAC,OAAO,OAAO,SAAU,QAAO,OAAO,WAAW,EAAE;EAExD,MAAM,UAAU,OAAO,OAAO,SAAS;EACvC,MAAM,UAAU,8BAA8B,QAAQ;AACtD,MAAI,CAAC,SAAS;AACZ,WAAQ,MACN,OAAO,IAAI,mGAAmG,CAC/G;AACD,WAAQ,KAAK,EAAE;;EAEjB,MAAM,YAAY,gCAAgC,QAAQ;EAC1D,MAAM,uBAAuB,SAAS,yBAAyB;AAE/D,MAAI,OAAO,GAAG;AACZ,UAAO,OAAO,SAAS,uBAAuB;IAC5C;IACA,GAAI,UAAU,SAAS,IAAI,EAAE,WAAW,GAAG,EAAE;IAC7C,GAAI,uBAAuB,EAAE,sBAAsB,MAAM,GAAG,EAAE;IAC/D;AACD,SAAM,WAAW,QAAQ,WAAW;AACpC,WAAQ,IAAI,OAAO,MAAM,oCAAoC,CAAC;AAC9D;;AAGF,SAAO,OAAO,SAAS,uBAAuB;GAC5C;GACA,GAAI,UAAU,SAAS,IAAI,EAAE,WAAW,GAAG,EAAE;GAC7C,GAAI,uBAAuB,EAAE,sBAAsB,MAAM,GAAG,EAAE;GAC9D,WAAW;GACZ;AACD,QAAM,WAAW,QAAQ,WAAW;AACpC,UAAQ,IAAI,OAAO,MAAM,oCAAoC,GAAG,IAAI,CAAC;GACrE;AAEJ,KACG,QAAQ,gCAAgC,CACxC,YAAY,+EAA+E,CAC3F,OAAO,OAAO,UAAkB;EAC/B,MAAM,IAAI,MAAM,MAAM,CAAC,aAAa;EACpC,MAAM,SAAS,MAAM,QAAQ,MAAM,UAAU,MAAM,OAAO,MAAM;EAChE,MAAM,UAAU,MAAM,SAAS,MAAM,WAAW,MAAM,OAAO,MAAM;AACnE,MAAI,CAAC,UAAU,CAAC,SAAS;AACvB,WAAQ,MAAM,OAAO,IAAI,mCAA+B,CAAC;AACzD,WAAQ,KAAK,EAAE;;EAGjB,MAAM,aAAa,oBAAoB,CAAC;EACxC,MAAM,SAAS,WAAW,WAAW;AACrC,MAAI,CAAC,OAAO,OAAQ,QAAO,SAAS,EAAE,UAAU,EAAE,EAAE;AACpD,MAAI,CAAC,OAAO,OAAO,SAAU,QAAO,OAAO,WAAW,EAAE;EAExD,MAAM,UAAU,OAAO,OAAO,SAAS;EACvC,MAAM,UAAU,8BAA8B,QAAQ;AACtD,MAAI,CAAC,SAAS;AACZ,WAAQ,MACN,OAAO,IAAI,mGAAmG,CAC/G;AACD,WAAQ,KAAK,EAAE;;EAEjB,MAAM,YAAY,gCAAgC,QAAQ;EAC1D,MAAM,YAAY,SAAS;AAE3B,MAAI,SAAS;AACX,UAAO,OAAO,SAAS,uBAAuB;IAC5C;IACA,GAAI,UAAU,SAAS,IAAI,EAAE,WAAW,GAAG,EAAE;IAC7C,GAAI,YAAY,EAAE,WAAW,GAAG,EAAE;IACnC;AACD,SAAM,WAAW,QAAQ,WAAW;AACpC,WAAQ,IAAI,OAAO,MAAM,2CAA2C,CAAC;AACrE;;AAGF,SAAO,OAAO,SAAS,uBAAuB;GAC5C;GACA,GAAI,UAAU,SAAS,IAAI,EAAE,WAAW,GAAG,EAAE;GAC7C,GAAI,YAAY,EAAE,WAAW,GAAG,EAAE;GAClC,sBAAsB;GACvB;AACD,QAAM,WAAW,QAAQ,WAAW;AACpC,UAAQ,IAAI,OAAO,MAAM,0CAA0C,CAAC;GACpE;AAEJ,KACG,QAAQ,uBAAuB,CAC/B,YAAY,oDAAoD,CAChE,OAAO,iBAAiB,+DAA+D,CACvF,OAAO,iBAAiB,6BAA6B,CACrD,OAAO,eAAe,iCAAiC,MAAM,SAAS,GAAG,GAAG,EAAE,EAAE,CAChF,OAAO,kBAAkB,iDAAiD,CAC1E,OAAO,kBAAkB,0BAA0B,MAAM,SAAS,GAAG,GAAG,CAAC,CACzE,OACC,OACE,aACA,SACG;EACH,MAAM,SAAS,YAAY,KAAK,IAAI,CAAC,MAAM;AAC3C,MAAI,CAAC,QAAQ;AACX,WAAQ,MAAM,OAAO,IAAI,sBAAsB,CAAC;AAChD,WAAQ,KAAK,EAAE;;EAGjB,MAAM,aAAa,oBAAoB,CAAC;EACxC,MAAM,SAAS,WAAW,WAAW;EACrC,MAAM,YAAYA,QAAY,KAAK,UAAU,qBAAqB;AAClE,QAAM,MAAM,WAAW,EAAE,WAAW,MAAM,CAAC;EAE3C,MAAM,QAAQ,OAAO,SAAS,KAAK,MAAM,KAAK,KAAK,SAAS,KAAK,IAAI,KAAK,MAAM,KAAK,MAAO,GAAG;AAE/F,MAAI;GACF,MAAM,SAAS,MAAM,cAAc;IACjC;IACA,KAAK;IACL,GAAI,KAAK,QAAQ,EAAE,UAAU,KAAK,OAAO,GAAG,EAAE;IAC9C,GAAI,KAAK,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,EAAE;IACxC;IACA,GAAI,OAAO,KAAK,YAAY,YAAY,KAAK,UAAU,IAAI,EAAE,WAAW,KAAK,SAAS,GAAG,EAAE;IAC5F,CAAC;GAEF,MAAM,eAAyB,EAAE;AACjC,QAAK,IAAI,IAAI,GAAG,IAAI,OAAO,OAAO,QAAQ,KAAK;IAC7C,MAAM,MAAM,OAAO,OAAO;IAE1B,MAAM,OAAO,KAAK,WADD,IAAI,UAAU,MAAM,IAAI,SAAS,IAAI,EAAE,MAClB;AACtC,UAAM,UAAU,MAAM,IAAI,OAAO;AACjC,iBAAa,KAAK,KAAK;;AAGzB,WAAQ,IAAI,GAAG;AACf,WAAQ,IACN,OAAO,MACL,aAAa,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO,WAAW,IAAI,KAAK,IAAI,WAAW,OAAO,MAAM,IACzG,CACF;AACD,QAAK,MAAM,KAAK,aAAc,SAAQ,IAAI,OAAO,IAAI;AACrD,WAAQ,IAAI,GAAG;WACR,KAAK;AACZ,WAAQ,MAAM,OAAO,IAAI,4BAA4B,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI,GAAG,CAAC;AACzG,WAAQ,KAAK,EAAE;;GAGpB;AAEH,QAAO;;AAGT,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,SAAS;CACT,UAAU;EACR,UAAU;EACV,UAAU;GACR;GACA;GACA;GACA;GACD;EACF;CACF,CAAC"}
@@ -1,14 +1,14 @@
1
- import { resolveStateDir } from "../../config/paths-state.js";
2
- import { resolveAgentWorkspaceDir } from "../../agent/agent-scope.js";
1
+ import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
3
2
  import { createLogger } from "../../utils/logger/index.js";
4
3
  import { init_logger } from "../../utils/logger.js";
4
+ import { resolveStateDir } from "../../config/paths-state.js";
5
+ import { resolveAgentWorkspaceDir } from "../../agent/agent-scope.js";
5
6
  import { WORKSPACE_FILES, init_paths, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveAgentProfileDir, resolveBinDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveExtensionsDir, resolveInboxDir, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogsDir, resolveSessionsDir, resolveSkillsDir, resolveToolsDir, resolveWorkspaceStateDir, resolveWorkspaceStatePath } from "../../config/paths.js";
6
- import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
7
7
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
8
8
  import { formatExamples, register } from "../registry.js";
9
+ import { mkdir, writeFile } from "fs/promises";
9
10
  import { join } from "path";
10
11
  import { existsSync } from "fs";
11
- import { mkdir, writeFile } from "fs/promises";
12
12
  import { Command } from "commander";
13
13
  //#region src/cli/commands/init.ts
14
14
  init_write_file_atomic();
@@ -1,6 +1,6 @@
1
- import { ConfigSchema, init_schema } from "../../config/schema.js";
2
1
  import { init_agent_scope, resolveAgentProfileDir, resolveDefaultAgentId } from "../../agent/agent-scope.js";
3
2
  import { WORKSPACE_FILES, init_paths } from "../../config/paths.js";
3
+ import { ConfigSchema, init_schema } from "../../config/schema.js";
4
4
  import { saveConfig } from "../../config/loader.js";
5
5
  import { resolveGatewayLocalClientHost } from "../../config/gateway-bind.js";
6
6
  import { isWeixinOnboardConfigured } from "../../../extensions/weixin/src/adapters/onboard-cli.js";
@@ -1,5 +1,5 @@
1
1
  import { getContextWithOpts } from "../../context.js";
2
- import { getSessionManager } from "../../utils/session.js";
2
+ import { getSessionIndex } from "../../utils/session.js";
3
3
  //#region src/cli/commands/session/utils.ts
4
4
  /**
5
5
  * Session command utilities
@@ -9,7 +9,7 @@ import { getSessionManager } from "../../utils/session.js";
9
9
  */
10
10
  async function getManager() {
11
11
  getContextWithOpts();
12
- return getSessionManager();
12
+ return getSessionIndex();
13
13
  }
14
14
  /**
15
15
  * Collect multiple option values into array
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../../../../src/cli/commands/session/utils.ts"],"sourcesContent":["/**\n * Session command utilities\n */\n\nimport { getSessionManager } from '../../utils/session.js';\nimport { getContextWithOpts } from '../../context.js';\nimport type { SessionIndex } from '../../../session/index.js';\n\n/**\n * Get initialized session manager\n */\nexport async function getManager(): Promise<SessionIndex> {\n getContextWithOpts();\n return getSessionManager();\n}\n\n/**\n * Collect multiple option values into array\n */\nexport function collect(value: string, previous: string[]): string[] {\n return previous.concat([value]);\n}\n"],"mappings":";;;;;;;;;AAWA,eAAsB,aAAoC;AACxD,qBAAoB;AACpB,QAAO,mBAAmB;;;;;AAM5B,SAAgB,QAAQ,OAAe,UAA8B;AACnE,QAAO,SAAS,OAAO,CAAC,MAAM,CAAC"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../../../../src/cli/commands/session/utils.ts"],"sourcesContent":["/**\n * Session command utilities\n */\n\nimport { getSessionIndex } from '../../utils/session.js';\nimport { getContextWithOpts } from '../../context.js';\nimport type { SessionIndex } from '../../../session/index.js';\n\n/**\n * Get initialized session manager\n */\nexport async function getManager(): Promise<SessionIndex> {\n getContextWithOpts();\n return getSessionIndex();\n}\n\n/**\n * Collect multiple option values into array\n */\nexport function collect(value: string, previous: string[]): string[] {\n return previous.concat([value]);\n}\n"],"mappings":";;;;;;;;;AAWA,eAAsB,aAAoC;AACxD,qBAAoB;AACpB,QAAO,iBAAiB;;;;;AAM1B,SAAgB,QAAQ,OAAe,UAA8B;AACnE,QAAO,SAAS,OAAO,CAAC,MAAM,CAAC"}
@@ -4,7 +4,7 @@ import { formatExamples, register } from "../registry.js";
4
4
  import "../../config/index.js";
5
5
  import { normalizeUpdateChannel } from "../../infra/update-channels.js";
6
6
  import { compareSemver, detectInstallKind, resolveNpmChannelTag, resolvePackageRoot } from "../../infra/update-check.js";
7
- import { spawn } from "node:child_process";
7
+ import { formatGlobalInstallFailure, resolveGlobalInstallSpec, resolveGlobalManager, runGlobalPackageInstall } from "../../infra/update-global.js";
8
8
  import { Command } from "commander";
9
9
  //#region src/cli/commands/update.ts
10
10
  init_package_version();
@@ -86,10 +86,9 @@ function createUpdateCommand(_ctx) {
86
86
  return;
87
87
  }
88
88
  }
89
- const packageManager = detectGlobalPackageManager();
90
- const spec = `@xopcai/xopc@${resolved.version}`;
89
+ const packageManager = await resolveGlobalManager({ root });
90
+ const spec = resolveGlobalInstallSpec({ version: resolved.version });
91
91
  if (!options.json) console.log(`Installing ${spec} via ${packageManager}...`);
92
- const installArgs = buildInstallArgs(packageManager, spec);
93
92
  const { acquireUpdateLock } = await import("../../infra/update-lock.js");
94
93
  const lock = process.env.XOPC_AUTO_UPDATE ? { release: async () => {} } : await acquireUpdateLock("cli");
95
94
  if (!lock) {
@@ -102,72 +101,53 @@ function createUpdateCommand(_ctx) {
102
101
  else console.error(`❌ ${message}`);
103
102
  process.exit(1);
104
103
  }
105
- let exitCode;
104
+ let installResult;
106
105
  try {
107
- exitCode = await runInstallCommand(installArgs);
106
+ installResult = await runGlobalPackageInstall({
107
+ manager: packageManager,
108
+ spec,
109
+ pkgRoot: root,
110
+ echoToTerminal: !options.json
111
+ });
108
112
  } finally {
109
113
  await lock.release();
110
114
  }
111
- if (exitCode === 0) if (options.json) console.log(JSON.stringify({
115
+ if (installResult.exitCode === 0) if (options.json) console.log(JSON.stringify({
112
116
  status: "ok",
113
117
  previousVersion: PACKAGE_VERSION,
114
118
  installedVersion: resolved.version,
115
119
  channel: resolved.tag,
116
- packageManager
120
+ packageManager: installResult.packageManager
117
121
  }));
118
122
  else {
119
123
  console.log(`✅ Updated to v${resolved.version}`);
120
124
  console.log("Restart the gateway to use the new version: xopc gateway restart");
121
125
  }
122
126
  else {
127
+ const message = formatGlobalInstallFailure({
128
+ packageManager: installResult.packageManager,
129
+ spec,
130
+ exitCode: installResult.exitCode,
131
+ stderr: installResult.stderr,
132
+ usedFallback: installResult.usedFallback
133
+ });
123
134
  if (options.json) console.log(JSON.stringify({
124
135
  status: "error",
125
136
  reason: "install-failed",
126
- exitCode,
127
- packageManager
137
+ exitCode: installResult.exitCode,
138
+ packageManager: installResult.packageManager,
139
+ usedFallback: installResult.usedFallback,
140
+ stderrTail: installResult.stderr.trim().slice(-4e3) || void 0,
141
+ message
128
142
  }));
129
143
  else {
130
- console.error(`❌ Update failed (exit code ${exitCode})`);
131
- console.error(`Try manually: ${packageManager} install -g ${spec}`);
144
+ console.error(`❌ Update failed (exit code ${installResult.exitCode})`);
145
+ console.error(message);
132
146
  }
133
147
  process.exit(1);
134
148
  }
135
149
  });
136
150
  }
137
- /**
138
- * Detect which package manager was used to install xopc globally.
139
- * Checks common indicators: npm_config_user_agent, process.env, argv paths.
140
- */
141
- function detectGlobalPackageManager() {
142
- if ((process.env.npm_config_user_agent ?? "").startsWith("pnpm/")) return "pnpm";
143
- return "npm";
144
- }
145
- function buildInstallArgs(manager, spec) {
146
- if (manager === "pnpm") return [
147
- "pnpm",
148
- "add",
149
- "-g",
150
- spec
151
- ];
152
- return [
153
- "npm",
154
- "install",
155
- "-g",
156
- spec,
157
- "--no-fund",
158
- "--no-audit"
159
- ];
160
- }
161
- function runInstallCommand(argv) {
162
- return new Promise((resolve) => {
163
- const child = spawn(argv[0], argv.slice(1), {
164
- stdio: "inherit",
165
- env: process.env
166
- });
167
- child.on("error", () => resolve(1));
168
- child.on("exit", (code) => resolve(code ?? 1));
169
- });
170
- }
171
151
  register({
172
152
  id: "update",
173
153
  name: "update",
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","names":[],"sources":["../../../../src/cli/commands/update.ts"],"sourcesContent":["// src/cli/commands/update.ts\n\nimport { Command } from 'commander';\nimport { spawn } from 'node:child_process';\n\nimport { loadConfig } from '../../config/index.js';\nimport { PACKAGE_VERSION } from '../../package-version.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { normalizeUpdateChannel, DEFAULT_PACKAGE_CHANNEL } from '../../infra/update-channels.js';\nimport {\n resolveNpmChannelTag,\n compareSemver,\n detectInstallKind,\n resolvePackageRoot,\n} from '../../infra/update-check.js';\n\nfunction createUpdateCommand(_ctx: CLIContext): Command {\n return new Command('update')\n .description('Check for and install xopc updates')\n .option('--check', 'Only check for updates without installing')\n .option('--yes', 'Skip confirmation prompts')\n .option('--channel <channel>', 'Update channel: stable, beta, or dev (default: from config, else stable)')\n .option('--json', 'Output results as JSON')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc update',\n 'xopc update --check',\n 'xopc update --channel beta',\n 'xopc update --yes',\n 'xopc update --json',\n ]),\n )\n .action(\n async (options: { check?: boolean; yes?: boolean; channel?: string; json?: boolean }) => {\n const fromCli = options.channel;\n const fromConfig = (() => {\n try {\n return loadConfig().update?.channel;\n } catch {\n return undefined;\n }\n })();\n const channel = normalizeUpdateChannel(fromCli ?? fromConfig) ?? DEFAULT_PACKAGE_CHANNEL;\n\n // Check current install kind\n const root = await resolvePackageRoot();\n if (root) {\n const installKind = await detectInstallKind(root);\n if (installKind === 'git') {\n const message = 'Running from a git checkout. Use `git pull` to update instead.';\n if (options.json) {\n console.log(JSON.stringify({ status: 'skipped', reason: 'git-checkout', message }));\n } else {\n console.log(message);\n }\n return;\n }\n }\n\n if (!options.json) {\n console.log(`Checking for updates (channel: ${channel})...`);\n }\n\n const resolved = await resolveNpmChannelTag({ channel });\n if (!resolved.version) {\n const message = 'Could not reach npm registry. Check your network connection.';\n if (options.json) {\n console.log(JSON.stringify({ status: 'error', reason: 'registry-unreachable', message }));\n } else {\n console.error(message);\n }\n process.exit(1);\n }\n\n const comparison = compareSemver(PACKAGE_VERSION, resolved.version);\n if (comparison === null || comparison >= 0) {\n const message = `Already up to date: v${PACKAGE_VERSION} (${resolved.tag}: v${resolved.version})`;\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'up-to-date',\n currentVersion: PACKAGE_VERSION,\n latestVersion: resolved.version,\n channel: resolved.tag,\n }),\n );\n } else {\n console.log(`✅ ${message}`);\n }\n return;\n }\n\n if (options.check) {\n const message = `Update available: v${PACKAGE_VERSION} → v${resolved.version} (${resolved.tag})`;\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'update-available',\n currentVersion: PACKAGE_VERSION,\n latestVersion: resolved.version,\n channel: resolved.tag,\n }),\n );\n } else {\n console.log(`📦 ${message}`);\n console.log('Run `xopc update` to install.');\n }\n return;\n }\n\n if (!options.yes && !process.env.XOPC_AUTO_UPDATE) {\n const { confirm } = await import('@inquirer/prompts');\n const shouldUpdate = await confirm({\n message: `Update from v${PACKAGE_VERSION} to v${resolved.version} (${resolved.tag})?`,\n default: true,\n });\n if (!shouldUpdate) {\n console.log('Update cancelled.');\n return;\n }\n }\n\n const packageManager = detectGlobalPackageManager();\n const spec = `@xopcai/xopc@${resolved.version}`;\n\n if (!options.json) {\n console.log(`Installing ${spec} via ${packageManager}...`);\n }\n\n const installArgs = buildInstallArgs(packageManager, spec);\n\n // Gateway / auto-update spawn this CLI with XOPC_AUTO_UPDATE=1 after acquiring the lock.\n const { acquireUpdateLock } = await import('../../infra/update-lock.js');\n const lock = process.env.XOPC_AUTO_UPDATE\n ? { release: async () => {} }\n : await acquireUpdateLock('cli');\n if (!lock) {\n const message = 'Another update is already in progress. Try again later.';\n if (options.json) {\n console.log(JSON.stringify({ status: 'error', reason: 'lock-held', message }));\n } else {\n console.error(`❌ ${message}`);\n }\n process.exit(1);\n }\n\n let exitCode: number;\n try {\n exitCode = await runInstallCommand(installArgs);\n } finally {\n await lock.release();\n }\n\n if (exitCode === 0) {\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'ok',\n previousVersion: PACKAGE_VERSION,\n installedVersion: resolved.version,\n channel: resolved.tag,\n packageManager,\n }),\n );\n } else {\n console.log(`✅ Updated to v${resolved.version}`);\n console.log('Restart the gateway to use the new version: xopc gateway restart');\n }\n } else {\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'error',\n reason: 'install-failed',\n exitCode,\n packageManager,\n }),\n );\n } else {\n console.error(`❌ Update failed (exit code ${exitCode})`);\n console.error(`Try manually: ${packageManager} install -g ${spec}`);\n }\n process.exit(1);\n }\n },\n );\n}\n\n/**\n * Detect which package manager was used to install xopc globally.\n * Checks common indicators: npm_config_user_agent, process.env, argv paths.\n */\nfunction detectGlobalPackageManager(): 'npm' | 'pnpm' {\n const userAgent = process.env.npm_config_user_agent ?? '';\n if (userAgent.startsWith('pnpm/')) return 'pnpm';\n return 'npm';\n}\n\nfunction buildInstallArgs(manager: 'npm' | 'pnpm', spec: string): string[] {\n if (manager === 'pnpm') {\n return ['pnpm', 'add', '-g', spec];\n }\n return ['npm', 'install', '-g', spec, '--no-fund', '--no-audit'];\n}\n\nfunction runInstallCommand(argv: string[]): Promise<number> {\n return new Promise((resolve) => {\n const child = spawn(argv[0], argv.slice(1), {\n stdio: 'inherit',\n env: process.env,\n });\n child.on('error', () => resolve(1));\n child.on('exit', (code) => resolve(code ?? 1));\n });\n}\n\nregister({\n id: 'update',\n name: 'update',\n description: 'Check for and install xopc updates',\n factory: createUpdateCommand,\n metadata: {\n category: 'maintenance',\n examples: [\n 'xopc update',\n 'xopc update --check',\n 'xopc update --channel beta',\n 'xopc update --yes --json',\n ],\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"update.js","names":[],"sources":["../../../../src/cli/commands/update.ts"],"sourcesContent":["// src/cli/commands/update.ts\n\nimport { Command } from 'commander';\n\nimport { loadConfig } from '../../config/index.js';\nimport {\n formatGlobalInstallFailure,\n resolveGlobalInstallSpec,\n resolveGlobalManager,\n runGlobalPackageInstall,\n} from '../../infra/update-global.js';\nimport { normalizeUpdateChannel, DEFAULT_PACKAGE_CHANNEL } from '../../infra/update-channels.js';\nimport {\n resolveNpmChannelTag,\n compareSemver,\n detectInstallKind,\n resolvePackageRoot,\n} from '../../infra/update-check.js';\nimport { PACKAGE_VERSION } from '../../package-version.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\n\nfunction createUpdateCommand(_ctx: CLIContext): Command {\n return new Command('update')\n .description('Check for and install xopc updates')\n .option('--check', 'Only check for updates without installing')\n .option('--yes', 'Skip confirmation prompts')\n .option('--channel <channel>', 'Update channel: stable, beta, or dev (default: from config, else stable)')\n .option('--json', 'Output results as JSON')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc update',\n 'xopc update --check',\n 'xopc update --channel beta',\n 'xopc update --yes',\n 'xopc update --json',\n ]),\n )\n .action(\n async (options: { check?: boolean; yes?: boolean; channel?: string; json?: boolean }) => {\n const fromCli = options.channel;\n const fromConfig = (() => {\n try {\n return loadConfig().update?.channel;\n } catch {\n return undefined;\n }\n })();\n const channel = normalizeUpdateChannel(fromCli ?? fromConfig) ?? DEFAULT_PACKAGE_CHANNEL;\n\n const root = await resolvePackageRoot();\n if (root) {\n const installKind = await detectInstallKind(root);\n if (installKind === 'git') {\n const message = 'Running from a git checkout. Use `git pull` to update instead.';\n if (options.json) {\n console.log(JSON.stringify({ status: 'skipped', reason: 'git-checkout', message }));\n } else {\n console.log(message);\n }\n return;\n }\n }\n\n if (!options.json) {\n console.log(`Checking for updates (channel: ${channel})...`);\n }\n\n const resolved = await resolveNpmChannelTag({ channel });\n if (!resolved.version) {\n const message = 'Could not reach npm registry. Check your network connection.';\n if (options.json) {\n console.log(JSON.stringify({ status: 'error', reason: 'registry-unreachable', message }));\n } else {\n console.error(message);\n }\n process.exit(1);\n }\n\n const comparison = compareSemver(PACKAGE_VERSION, resolved.version);\n if (comparison === null || comparison >= 0) {\n const message = `Already up to date: v${PACKAGE_VERSION} (${resolved.tag}: v${resolved.version})`;\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'up-to-date',\n currentVersion: PACKAGE_VERSION,\n latestVersion: resolved.version,\n channel: resolved.tag,\n }),\n );\n } else {\n console.log(`✅ ${message}`);\n }\n return;\n }\n\n if (options.check) {\n const message = `Update available: v${PACKAGE_VERSION} → v${resolved.version} (${resolved.tag})`;\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'update-available',\n currentVersion: PACKAGE_VERSION,\n latestVersion: resolved.version,\n channel: resolved.tag,\n }),\n );\n } else {\n console.log(`📦 ${message}`);\n console.log('Run `xopc update` to install.');\n }\n return;\n }\n\n if (!options.yes && !process.env.XOPC_AUTO_UPDATE) {\n const { confirm } = await import('@inquirer/prompts');\n const shouldUpdate = await confirm({\n message: `Update from v${PACKAGE_VERSION} to v${resolved.version} (${resolved.tag})?`,\n default: true,\n });\n if (!shouldUpdate) {\n console.log('Update cancelled.');\n return;\n }\n }\n\n const packageManager = await resolveGlobalManager({ root });\n const spec = resolveGlobalInstallSpec({ version: resolved.version });\n\n if (!options.json) {\n console.log(`Installing ${spec} via ${packageManager}...`);\n }\n\n const { acquireUpdateLock } = await import('../../infra/update-lock.js');\n const lock = process.env.XOPC_AUTO_UPDATE\n ? { release: async () => {} }\n : await acquireUpdateLock('cli');\n if (!lock) {\n const message = 'Another update is already in progress. Try again later.';\n if (options.json) {\n console.log(JSON.stringify({ status: 'error', reason: 'lock-held', message }));\n } else {\n console.error(`❌ ${message}`);\n }\n process.exit(1);\n }\n\n let installResult: Awaited<ReturnType<typeof runGlobalPackageInstall>>;\n try {\n installResult = await runGlobalPackageInstall({\n manager: packageManager,\n spec,\n pkgRoot: root,\n echoToTerminal: !options.json,\n });\n } finally {\n await lock.release();\n }\n\n if (installResult.exitCode === 0) {\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'ok',\n previousVersion: PACKAGE_VERSION,\n installedVersion: resolved.version,\n channel: resolved.tag,\n packageManager: installResult.packageManager,\n }),\n );\n } else {\n console.log(`✅ Updated to v${resolved.version}`);\n console.log('Restart the gateway to use the new version: xopc gateway restart');\n }\n } else {\n const message = formatGlobalInstallFailure({\n packageManager: installResult.packageManager,\n spec,\n exitCode: installResult.exitCode,\n stderr: installResult.stderr,\n usedFallback: installResult.usedFallback,\n });\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'error',\n reason: 'install-failed',\n exitCode: installResult.exitCode,\n packageManager: installResult.packageManager,\n usedFallback: installResult.usedFallback,\n stderrTail: installResult.stderr.trim().slice(-4000) || undefined,\n message,\n }),\n );\n } else {\n console.error(`❌ Update failed (exit code ${installResult.exitCode})`);\n console.error(message);\n }\n process.exit(1);\n }\n },\n );\n}\n\nregister({\n id: 'update',\n name: 'update',\n description: 'Check for and install xopc updates',\n factory: createUpdateCommand,\n metadata: {\n category: 'maintenance',\n examples: [\n 'xopc update',\n 'xopc update --check',\n 'xopc update --channel beta',\n 'xopc update --yes --json',\n ],\n },\n});\n"],"mappings":";;;;;;;;;sBAkB2D;AAG3D,SAAS,oBAAoB,MAA2B;AACtD,QAAO,IAAI,QAAQ,SAAS,CACzB,YAAY,qCAAqC,CACjD,OAAO,WAAW,4CAA4C,CAC9D,OAAO,SAAS,4BAA4B,CAC5C,OAAO,uBAAuB,2EAA2E,CACzG,OAAO,UAAU,yBAAyB,CAC1C,YACC,SACA,eAAe;EACb;EACA;EACA;EACA;EACA;EACD,CAAC,CACH,CACA,OACC,OAAO,YAAkF;EACvF,MAAM,UAAU,QAAQ;EACxB,MAAM,oBAAoB;AACxB,OAAI;AACF,WAAO,YAAY,CAAC,QAAQ;WACtB;AACN;;MAEA;EACJ,MAAM,UAAU,uBAAuB,WAAW,WAAW,IAAA;EAE7D,MAAM,OAAO,MAAM,oBAAoB;AACvC,MAAI;OAEE,MADsB,kBAAkB,KAAK,KAC7B,OAAO;IACzB,MAAM,UAAU;AAChB,QAAI,QAAQ,KACV,SAAQ,IAAI,KAAK,UAAU;KAAE,QAAQ;KAAW,QAAQ;KAAgB;KAAS,CAAC,CAAC;QAEnF,SAAQ,IAAI,QAAQ;AAEtB;;;AAIJ,MAAI,CAAC,QAAQ,KACX,SAAQ,IAAI,kCAAkC,QAAQ,MAAM;EAG9D,MAAM,WAAW,MAAM,qBAAqB,EAAE,SAAS,CAAC;AACxD,MAAI,CAAC,SAAS,SAAS;GACrB,MAAM,UAAU;AAChB,OAAI,QAAQ,KACV,SAAQ,IAAI,KAAK,UAAU;IAAE,QAAQ;IAAS,QAAQ;IAAwB;IAAS,CAAC,CAAC;OAEzF,SAAQ,MAAM,QAAQ;AAExB,WAAQ,KAAK,EAAE;;EAGjB,MAAM,aAAa,cAAc,iBAAiB,SAAS,QAAQ;AACnE,MAAI,eAAe,QAAQ,cAAc,GAAG;GAC1C,MAAM,UAAU,wBAAwB,gBAAgB,IAAI,SAAS,IAAI,KAAK,SAAS,QAAQ;AAC/F,OAAI,QAAQ,KACV,SAAQ,IACN,KAAK,UAAU;IACb,QAAQ;IACR,gBAAgB;IAChB,eAAe,SAAS;IACxB,SAAS,SAAS;IACnB,CAAC,CACH;OAED,SAAQ,IAAI,KAAK,UAAU;AAE7B;;AAGF,MAAI,QAAQ,OAAO;GACjB,MAAM,UAAU,sBAAsB,gBAAgB,MAAM,SAAS,QAAQ,IAAI,SAAS,IAAI;AAC9F,OAAI,QAAQ,KACV,SAAQ,IACN,KAAK,UAAU;IACb,QAAQ;IACR,gBAAgB;IAChB,eAAe,SAAS;IACxB,SAAS,SAAS;IACnB,CAAC,CACH;QACI;AACL,YAAQ,IAAI,MAAM,UAAU;AAC5B,YAAQ,IAAI,gCAAgC;;AAE9C;;AAGF,MAAI,CAAC,QAAQ,OAAO,CAAC,QAAQ,IAAI,kBAAkB;GACjD,MAAM,EAAE,YAAY,MAAM,OAAO;AAKjC,OAAI,CAAC,MAJsB,QAAQ;IACjC,SAAS,gBAAgB,gBAAgB,OAAO,SAAS,QAAQ,IAAI,SAAS,IAAI;IAClF,SAAS;IACV,CAAC,EACiB;AACjB,YAAQ,IAAI,oBAAoB;AAChC;;;EAIJ,MAAM,iBAAiB,MAAM,qBAAqB,EAAE,MAAM,CAAC;EAC3D,MAAM,OAAO,yBAAyB,EAAE,SAAS,SAAS,SAAS,CAAC;AAEpE,MAAI,CAAC,QAAQ,KACX,SAAQ,IAAI,cAAc,KAAK,OAAO,eAAe,KAAK;EAG5D,MAAM,EAAE,sBAAsB,MAAM,OAAO;EAC3C,MAAM,OAAO,QAAQ,IAAI,mBACrB,EAAE,SAAS,YAAY,IAAI,GAC3B,MAAM,kBAAkB,MAAM;AAClC,MAAI,CAAC,MAAM;GACT,MAAM,UAAU;AAChB,OAAI,QAAQ,KACV,SAAQ,IAAI,KAAK,UAAU;IAAE,QAAQ;IAAS,QAAQ;IAAa;IAAS,CAAC,CAAC;OAE9E,SAAQ,MAAM,KAAK,UAAU;AAE/B,WAAQ,KAAK,EAAE;;EAGjB,IAAI;AACJ,MAAI;AACF,mBAAgB,MAAM,wBAAwB;IAC5C,SAAS;IACT;IACA,SAAS;IACT,gBAAgB,CAAC,QAAQ;IAC1B,CAAC;YACM;AACR,SAAM,KAAK,SAAS;;AAGtB,MAAI,cAAc,aAAa,EAC7B,KAAI,QAAQ,KACV,SAAQ,IACN,KAAK,UAAU;GACb,QAAQ;GACR,iBAAiB;GACjB,kBAAkB,SAAS;GAC3B,SAAS,SAAS;GAClB,gBAAgB,cAAc;GAC/B,CAAC,CACH;OACI;AACL,WAAQ,IAAI,iBAAiB,SAAS,UAAU;AAChD,WAAQ,IAAI,mEAAmE;;OAE5E;GACL,MAAM,UAAU,2BAA2B;IACzC,gBAAgB,cAAc;IAC9B;IACA,UAAU,cAAc;IACxB,QAAQ,cAAc;IACtB,cAAc,cAAc;IAC7B,CAAC;AACF,OAAI,QAAQ,KACV,SAAQ,IACN,KAAK,UAAU;IACb,QAAQ;IACR,QAAQ;IACR,UAAU,cAAc;IACxB,gBAAgB,cAAc;IAC9B,cAAc,cAAc;IAC5B,YAAY,cAAc,OAAO,MAAM,CAAC,MAAM,KAAM,IAAI,KAAA;IACxD;IACD,CAAC,CACH;QACI;AACL,YAAQ,MAAM,8BAA8B,cAAc,SAAS,GAAG;AACtE,YAAQ,MAAM,QAAQ;;AAExB,WAAQ,KAAK,EAAE;;GAGpB;;AAGL,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,SAAS;CACT,UAAU;EACR,UAAU;EACV,UAAU;GACR;GACA;GACA;GACA;GACD;EACF;CACF,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { ConfigSchema, init_schema } from "../../config/schema.js";
2
2
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
3
- import { dirname, join } from "node:path";
4
- import { existsSync, mkdirSync, readFileSync } from "node:fs";
5
3
  import { randomBytes } from "node:crypto";
4
+ import { existsSync, mkdirSync, readFileSync } from "node:fs";
5
+ import { dirname, join } from "node:path";
6
6
  //#region src/cli/utils/init-workspace-core.ts
7
7
  init_schema();
8
8
  init_loader();
@@ -7,11 +7,6 @@ import { SessionIndex } from '../../session/index.js';
7
7
  * Eliminates repeated initialization boilerplate
8
8
  */
9
9
  export declare function getSessionIndex(): Promise<SessionIndex>;
10
- /**
11
- * Get session manager and handle errors consistently
12
- */
13
- /** @deprecated Use {@link getSessionIndex}. */
14
- export declare const getSessionManager: typeof getSessionIndex;
15
10
  export declare function getSessionIndexSafe(): Promise<{
16
11
  manager: SessionIndex;
17
12
  error: null;
@@ -15,11 +15,6 @@ async function getSessionIndex() {
15
15
  await manager.initialize();
16
16
  return manager;
17
17
  }
18
- /**
19
- * Get session manager and handle errors consistently
20
- */
21
- /** @deprecated Use {@link getSessionIndex}. */
22
- const getSessionManager = getSessionIndex;
23
18
  async function getSessionIndexSafe() {
24
19
  try {
25
20
  return {
@@ -34,6 +29,6 @@ async function getSessionIndexSafe() {
34
29
  }
35
30
  }
36
31
  //#endregion
37
- export { getSessionIndex, getSessionIndexSafe, getSessionManager };
32
+ export { getSessionIndex, getSessionIndexSafe };
38
33
 
39
34
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","names":[],"sources":["../../../../src/cli/utils/session.ts"],"sourcesContent":["/**\n * Session management utilities for CLI commands\n */\n\nimport { SessionIndex } from '../../session/index.js';\nimport { loadConfig } from '../../config/loader.js';\n\n/**\n * Get initialized SessionManager instance\n * Eliminates repeated initialization boilerplate\n */\nexport async function getSessionIndex(): Promise<SessionIndex> {\n const config = loadConfig();\n const manager = new SessionIndex({ config });\n await manager.initialize();\n return manager;\n}\n\n/**\n * Get session manager and handle errors consistently\n */\n/** @deprecated Use {@link getSessionIndex}. */\nexport const getSessionManager = getSessionIndex;\n\nexport async function getSessionIndexSafe(): Promise<\n { manager: SessionIndex; error: null } | { manager: null; error: Error }\n> {\n try {\n const manager = await getSessionIndex();\n return { manager, error: null };\n } catch (error) {\n return { manager: null, error: error as Error };\n }\n}\n"],"mappings":";;;;;;;aAKoD;;;;;AAMpD,eAAsB,kBAAyC;CAE7D,MAAM,UAAU,IAAI,aAAa,EAAE,QADpB,YAC0B,EAAE,CAAC;AAC5C,OAAM,QAAQ,YAAY;AAC1B,QAAO;;;;;;AAOT,MAAa,oBAAoB;AAEjC,eAAsB,sBAEpB;AACA,KAAI;AAEF,SAAO;GAAE,SAAA,MADa,iBAAiB;GACrB,OAAO;GAAM;UACxB,OAAO;AACd,SAAO;GAAE,SAAS;GAAa;GAAgB"}
1
+ {"version":3,"file":"session.js","names":[],"sources":["../../../../src/cli/utils/session.ts"],"sourcesContent":["/**\n * Session management utilities for CLI commands\n */\n\nimport { SessionIndex } from '../../session/index.js';\nimport { loadConfig } from '../../config/loader.js';\n\n/**\n * Get initialized SessionManager instance\n * Eliminates repeated initialization boilerplate\n */\nexport async function getSessionIndex(): Promise<SessionIndex> {\n const config = loadConfig();\n const manager = new SessionIndex({ config });\n await manager.initialize();\n return manager;\n}\n\nexport async function getSessionIndexSafe(): Promise<\n { manager: SessionIndex; error: null } | { manager: null; error: Error }\n> {\n try {\n const manager = await getSessionIndex();\n return { manager, error: null };\n } catch (error) {\n return { manager: null, error: error as Error };\n }\n}\n"],"mappings":";;;;;;;aAKoD;;;;;AAMpD,eAAsB,kBAAyC;CAE7D,MAAM,UAAU,IAAI,aAAa,EAAE,QADpB,YAC0B,EAAE,CAAC;AAC5C,OAAM,QAAQ,YAAY;AAC1B,QAAO;;AAGT,eAAsB,sBAEpB;AACA,KAAI;AAEF,SAAO;GAAE,SAAA,MADa,iBAAiB;GACrB,OAAO;GAAM;UACxB,OAAO;AACd,SAAO;GAAE,SAAS;GAAa;GAAgB"}
@@ -26,7 +26,7 @@ function applyAgentConfig(cfg, params) {
26
26
  ...params.description?.trim() ? { description: params.description.trim() } : {},
27
27
  ...params.workspace ? { workspace: params.workspace } : {},
28
28
  ...params.agentDir ? { agentDir: params.agentDir } : {},
29
- ...params.model ? { model: params.model } : {}
29
+ ...params.model ? { model: { primary: params.model } } : {}
30
30
  };
31
31
  const nextList = [...list];
32
32
  if (index >= 0) nextList[index] = nextEntry;
@@ -1 +1 @@
1
- {"version":3,"file":"agents.config.js","names":[],"sources":["../../../src/commands/agents.config.ts"],"sourcesContent":["/**\n * Mutate `agents.list` / bindings when adding or removing agents.\n */\n\nimport { rm } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\n\nimport type { Config } from '../config/schema.js';\nimport {\n listAgentEntries,\n normalizeAgentId,\n resolveAgentHomeDir,\n resolveAgentWorkspaceDir,\n resolveDefaultAgentId,\n DEFAULT_AGENT_ID,\n} from '../agent/agent-scope.js';\n\ntype AgentEntry = NonNullable<NonNullable<Config['agents']>['list']>[number];\n\nexport { listAgentEntries };\n\nexport function findAgentEntryIndex(list: AgentEntry[], agentId: string): number {\n const id = normalizeAgentId(agentId);\n return list.findIndex((e) => normalizeAgentId(e.id) === id);\n}\n\nexport function applyAgentConfig(\n cfg: Config,\n params: {\n agentId: string;\n name?: string;\n description?: string;\n workspace?: string;\n agentDir?: string;\n model?: string;\n },\n): Config {\n const agentId = normalizeAgentId(params.agentId);\n const name = params.name?.trim();\n const list = listAgentEntries(cfg);\n const index = findAgentEntryIndex(list, agentId);\n const base = index >= 0 ? list[index] : { id: agentId, enabled: true as const };\n const nextEntry: AgentEntry = {\n ...base,\n enabled: base.enabled ?? true,\n ...(name ? { name } : {}),\n ...(params.description?.trim() ? { description: params.description.trim() } : {}),\n ...(params.workspace ? { workspace: params.workspace } : {}),\n ...(params.agentDir ? { agentDir: params.agentDir } : {}),\n ...(params.model ? { model: params.model } : {}),\n };\n const nextList = [...list];\n if (index >= 0) {\n nextList[index] = nextEntry;\n } else {\n if (nextList.length === 0 && agentId !== normalizeAgentId(resolveDefaultAgentId(cfg))) {\n nextList.push({ id: resolveDefaultAgentId(cfg), enabled: true });\n }\n nextList.push(nextEntry);\n }\n return {\n ...cfg,\n agents: {\n ...cfg.agents,\n list: nextList,\n },\n };\n}\n\nexport function pruneAgentConfig(\n cfg: Config,\n agentId: string,\n): { config: Config; removedBindings: number } {\n const id = normalizeAgentId(agentId);\n const agents = listAgentEntries(cfg);\n const nextAgentsList = agents.filter((e) => normalizeAgentId(e.id) !== id);\n const nextAgents = nextAgentsList.length > 0 ? nextAgentsList : undefined;\n\n const bindings = cfg.bindings ?? [];\n const filteredBindings = bindings.filter((b) => normalizeAgentId(b.agentId) !== id);\n\n return {\n config: {\n ...cfg,\n agents: nextAgents ? { ...cfg.agents, list: nextAgents } : { ...cfg.agents, list: undefined },\n bindings: filteredBindings,\n },\n removedBindings: bindings.length - filteredBindings.length,\n };\n}\n\nexport async function removeAgentDirsFromDisk(cfg: Config, id: string): Promise<void> {\n const aid = normalizeAgentId(id);\n if (aid === DEFAULT_AGENT_ID) {\n throw new Error('Refusing to delete the main agent home on disk from this command.');\n }\n const home = resolveAgentHomeDir(cfg, aid);\n const ws = resolveAgentWorkspaceDir(cfg, aid);\n if (existsSync(home)) {\n await rm(home, { recursive: true, force: true });\n }\n if (existsSync(ws) && ws !== home) {\n await rm(ws, { recursive: true, force: true });\n }\n}\n"],"mappings":";;;;;;;kBAeiC;AAMjC,SAAgB,oBAAoB,MAAoB,SAAyB;CAC/E,MAAM,KAAK,iBAAiB,QAAQ;AACpC,QAAO,KAAK,WAAW,MAAM,iBAAiB,EAAE,GAAG,KAAK,GAAG;;AAG7D,SAAgB,iBACd,KACA,QAQQ;CACR,MAAM,UAAU,iBAAiB,OAAO,QAAQ;CAChD,MAAM,OAAO,OAAO,MAAM,MAAM;CAChC,MAAM,OAAO,iBAAiB,IAAI;CAClC,MAAM,QAAQ,oBAAoB,MAAM,QAAQ;CAChD,MAAM,OAAO,SAAS,IAAI,KAAK,SAAS;EAAE,IAAI;EAAS,SAAS;EAAe;CAC/E,MAAM,YAAwB;EAC5B,GAAG;EACH,SAAS,KAAK,WAAW;EACzB,GAAI,OAAO,EAAE,MAAM,GAAG,EAAE;EACxB,GAAI,OAAO,aAAa,MAAM,GAAG,EAAE,aAAa,OAAO,YAAY,MAAM,EAAE,GAAG,EAAE;EAChF,GAAI,OAAO,YAAY,EAAE,WAAW,OAAO,WAAW,GAAG,EAAE;EAC3D,GAAI,OAAO,WAAW,EAAE,UAAU,OAAO,UAAU,GAAG,EAAE;EACxD,GAAI,OAAO,QAAQ,EAAE,OAAO,OAAO,OAAO,GAAG,EAAE;EAChD;CACD,MAAM,WAAW,CAAC,GAAG,KAAK;AAC1B,KAAI,SAAS,EACX,UAAS,SAAS;MACb;AACL,MAAI,SAAS,WAAW,KAAK,YAAY,iBAAiB,sBAAsB,IAAI,CAAC,CACnF,UAAS,KAAK;GAAE,IAAI,sBAAsB,IAAI;GAAE,SAAS;GAAM,CAAC;AAElE,WAAS,KAAK,UAAU;;AAE1B,QAAO;EACL,GAAG;EACH,QAAQ;GACN,GAAG,IAAI;GACP,MAAM;GACP;EACF;;AAGH,SAAgB,iBACd,KACA,SAC6C;CAC7C,MAAM,KAAK,iBAAiB,QAAQ;CAEpC,MAAM,iBADS,iBAAiB,IACH,CAAC,QAAQ,MAAM,iBAAiB,EAAE,GAAG,KAAK,GAAG;CAC1E,MAAM,aAAa,eAAe,SAAS,IAAI,iBAAiB,KAAA;CAEhE,MAAM,WAAW,IAAI,YAAY,EAAE;CACnC,MAAM,mBAAmB,SAAS,QAAQ,MAAM,iBAAiB,EAAE,QAAQ,KAAK,GAAG;AAEnF,QAAO;EACL,QAAQ;GACN,GAAG;GACH,QAAQ,aAAa;IAAE,GAAG,IAAI;IAAQ,MAAM;IAAY,GAAG;IAAE,GAAG,IAAI;IAAQ,MAAM,KAAA;IAAW;GAC7F,UAAU;GACX;EACD,iBAAiB,SAAS,SAAS,iBAAiB;EACrD;;AAGH,eAAsB,wBAAwB,KAAa,IAA2B;CACpF,MAAM,MAAM,iBAAiB,GAAG;AAChC,KAAI,QAAA,OACF,OAAM,IAAI,MAAM,oEAAoE;CAEtF,MAAM,OAAO,oBAAoB,KAAK,IAAI;CAC1C,MAAM,KAAK,yBAAyB,KAAK,IAAI;AAC7C,KAAI,WAAW,KAAK,CAClB,OAAM,GAAG,MAAM;EAAE,WAAW;EAAM,OAAO;EAAM,CAAC;AAElD,KAAI,WAAW,GAAG,IAAI,OAAO,KAC3B,OAAM,GAAG,IAAI;EAAE,WAAW;EAAM,OAAO;EAAM,CAAC"}
1
+ {"version":3,"file":"agents.config.js","names":[],"sources":["../../../src/commands/agents.config.ts"],"sourcesContent":["/**\n * Mutate `agents.list` / bindings when adding or removing agents.\n */\n\nimport { rm } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\n\nimport type { Config } from '../config/schema.js';\nimport {\n listAgentEntries,\n normalizeAgentId,\n resolveAgentHomeDir,\n resolveAgentWorkspaceDir,\n resolveDefaultAgentId,\n DEFAULT_AGENT_ID,\n} from '../agent/agent-scope.js';\n\ntype AgentEntry = NonNullable<NonNullable<Config['agents']>['list']>[number];\n\nexport { listAgentEntries };\n\nexport function findAgentEntryIndex(list: AgentEntry[], agentId: string): number {\n const id = normalizeAgentId(agentId);\n return list.findIndex((e) => normalizeAgentId(e.id) === id);\n}\n\nexport function applyAgentConfig(\n cfg: Config,\n params: {\n agentId: string;\n name?: string;\n description?: string;\n workspace?: string;\n agentDir?: string;\n model?: string;\n },\n): Config {\n const agentId = normalizeAgentId(params.agentId);\n const name = params.name?.trim();\n const list = listAgentEntries(cfg);\n const index = findAgentEntryIndex(list, agentId);\n const base = index >= 0 ? list[index] : { id: agentId, enabled: true as const };\n const nextEntry: AgentEntry = {\n ...base,\n enabled: base.enabled ?? true,\n ...(name ? { name } : {}),\n ...(params.description?.trim() ? { description: params.description.trim() } : {}),\n ...(params.workspace ? { workspace: params.workspace } : {}),\n ...(params.agentDir ? { agentDir: params.agentDir } : {}),\n ...(params.model ? { model: { primary: params.model } } : {}),\n };\n const nextList = [...list];\n if (index >= 0) {\n nextList[index] = nextEntry;\n } else {\n if (nextList.length === 0 && agentId !== normalizeAgentId(resolveDefaultAgentId(cfg))) {\n nextList.push({ id: resolveDefaultAgentId(cfg), enabled: true });\n }\n nextList.push(nextEntry);\n }\n return {\n ...cfg,\n agents: {\n ...cfg.agents,\n list: nextList,\n },\n };\n}\n\nexport function pruneAgentConfig(\n cfg: Config,\n agentId: string,\n): { config: Config; removedBindings: number } {\n const id = normalizeAgentId(agentId);\n const agents = listAgentEntries(cfg);\n const nextAgentsList = agents.filter((e) => normalizeAgentId(e.id) !== id);\n const nextAgents = nextAgentsList.length > 0 ? nextAgentsList : undefined;\n\n const bindings = cfg.bindings ?? [];\n const filteredBindings = bindings.filter((b) => normalizeAgentId(b.agentId) !== id);\n\n return {\n config: {\n ...cfg,\n agents: nextAgents ? { ...cfg.agents, list: nextAgents } : { ...cfg.agents, list: undefined },\n bindings: filteredBindings,\n },\n removedBindings: bindings.length - filteredBindings.length,\n };\n}\n\nexport async function removeAgentDirsFromDisk(cfg: Config, id: string): Promise<void> {\n const aid = normalizeAgentId(id);\n if (aid === DEFAULT_AGENT_ID) {\n throw new Error('Refusing to delete the main agent home on disk from this command.');\n }\n const home = resolveAgentHomeDir(cfg, aid);\n const ws = resolveAgentWorkspaceDir(cfg, aid);\n if (existsSync(home)) {\n await rm(home, { recursive: true, force: true });\n }\n if (existsSync(ws) && ws !== home) {\n await rm(ws, { recursive: true, force: true });\n }\n}\n"],"mappings":";;;;;;;kBAeiC;AAMjC,SAAgB,oBAAoB,MAAoB,SAAyB;CAC/E,MAAM,KAAK,iBAAiB,QAAQ;AACpC,QAAO,KAAK,WAAW,MAAM,iBAAiB,EAAE,GAAG,KAAK,GAAG;;AAG7D,SAAgB,iBACd,KACA,QAQQ;CACR,MAAM,UAAU,iBAAiB,OAAO,QAAQ;CAChD,MAAM,OAAO,OAAO,MAAM,MAAM;CAChC,MAAM,OAAO,iBAAiB,IAAI;CAClC,MAAM,QAAQ,oBAAoB,MAAM,QAAQ;CAChD,MAAM,OAAO,SAAS,IAAI,KAAK,SAAS;EAAE,IAAI;EAAS,SAAS;EAAe;CAC/E,MAAM,YAAwB;EAC5B,GAAG;EACH,SAAS,KAAK,WAAW;EACzB,GAAI,OAAO,EAAE,MAAM,GAAG,EAAE;EACxB,GAAI,OAAO,aAAa,MAAM,GAAG,EAAE,aAAa,OAAO,YAAY,MAAM,EAAE,GAAG,EAAE;EAChF,GAAI,OAAO,YAAY,EAAE,WAAW,OAAO,WAAW,GAAG,EAAE;EAC3D,GAAI,OAAO,WAAW,EAAE,UAAU,OAAO,UAAU,GAAG,EAAE;EACxD,GAAI,OAAO,QAAQ,EAAE,OAAO,EAAE,SAAS,OAAO,OAAO,EAAE,GAAG,EAAE;EAC7D;CACD,MAAM,WAAW,CAAC,GAAG,KAAK;AAC1B,KAAI,SAAS,EACX,UAAS,SAAS;MACb;AACL,MAAI,SAAS,WAAW,KAAK,YAAY,iBAAiB,sBAAsB,IAAI,CAAC,CACnF,UAAS,KAAK;GAAE,IAAI,sBAAsB,IAAI;GAAE,SAAS;GAAM,CAAC;AAElE,WAAS,KAAK,UAAU;;AAE1B,QAAO;EACL,GAAG;EACH,QAAQ;GACN,GAAG,IAAI;GACP,MAAM;GACP;EACF;;AAGH,SAAgB,iBACd,KACA,SAC6C;CAC7C,MAAM,KAAK,iBAAiB,QAAQ;CAEpC,MAAM,iBADS,iBAAiB,IACH,CAAC,QAAQ,MAAM,iBAAiB,EAAE,GAAG,KAAK,GAAG;CAC1E,MAAM,aAAa,eAAe,SAAS,IAAI,iBAAiB,KAAA;CAEhE,MAAM,WAAW,IAAI,YAAY,EAAE;CACnC,MAAM,mBAAmB,SAAS,QAAQ,MAAM,iBAAiB,EAAE,QAAQ,KAAK,GAAG;AAEnF,QAAO;EACL,QAAQ;GACN,GAAG;GACH,QAAQ,aAAa;IAAE,GAAG,IAAI;IAAQ,MAAM;IAAY,GAAG;IAAE,GAAG,IAAI;IAAQ,MAAM,KAAA;IAAW;GAC7F,UAAU;GACX;EACD,iBAAiB,SAAS,SAAS,iBAAiB;EACrD;;AAGH,eAAsB,wBAAwB,KAAa,IAA2B;CACpF,MAAM,MAAM,iBAAiB,GAAG;AAChC,KAAI,QAAA,OACF,OAAM,IAAI,MAAM,oEAAoE;CAEtF,MAAM,OAAO,oBAAoB,KAAK,IAAI;CAC1C,MAAM,KAAK,yBAAyB,KAAK,IAAI;AAC7C,KAAI,WAAW,KAAK,CAClB,OAAM,GAAG,MAAM;EAAE,WAAW;EAAM,OAAO;EAAM,CAAC;AAElD,KAAI,WAAW,GAAG,IAAI,OAAO,KAC3B,OAAM,GAAG,IAAI;EAAE,WAAW;EAAM,OAAO;EAAM,CAAC"}
@@ -1,5 +1,5 @@
1
- import { getAgentDefaultModelRef, init_schema } from "./schema.js";
2
1
  import { init_agent_scope, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
2
+ import { getAgentDefaultModelRef, init_schema } from "./schema.js";
3
3
  import { init_session_key, parseSessionKey } from "../routing/session-key.js";
4
4
  import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
5
5
  //#region src/config/agent-profile.ts
@@ -9,37 +9,15 @@ init_resolve_route();
9
9
  init_session_key();
10
10
  function mergeModelConfig(base, override) {
11
11
  if (override === void 0) return base;
12
- if (typeof override === "string") return override.trim() ? override : base;
13
- const b = typeof base === "string" ? {
14
- primary: base,
15
- fallbacks: []
16
- } : {
17
- primary: base?.primary,
18
- fallbacks: [...base?.fallbacks ?? []]
19
- };
20
- const o = override;
12
+ if (base === void 0) return override;
21
13
  return {
22
- primary: o.primary ?? b.primary,
23
- fallbacks: o.fallbacks ?? b.fallbacks
14
+ primary: override.primary ?? base.primary,
15
+ fallbacks: override.fallbacks ?? base.fallbacks
24
16
  };
25
17
  }
26
18
  function primaryAndFallbacksFromModelConfig(raw) {
27
- if (raw === void 0 || raw === null) return {
28
- primary: void 0,
29
- fallbacks: []
30
- };
31
- if (typeof raw === "string") {
32
- const s = raw.trim();
33
- return s ? {
34
- primary: s,
35
- fallbacks: []
36
- } : {
37
- primary: void 0,
38
- fallbacks: []
39
- };
40
- }
41
- const primary = raw.primary?.trim();
42
- const fallbacks = Array.isArray(raw.fallbacks) ? raw.fallbacks.map((s) => String(s).trim()).filter(Boolean) : [];
19
+ const primary = raw?.primary?.trim();
20
+ const fallbacks = Array.isArray(raw?.fallbacks) ? raw.fallbacks.map((s) => s.trim()).filter(Boolean) : [];
43
21
  return {
44
22
  primary: primary || void 0,
45
23
  fallbacks
@@ -1 +1 @@
1
- {"version":3,"file":"agent-profile.js","names":[],"sources":["../../../src/config/agent-profile.ts"],"sourcesContent":["/**\n * Effective agent profile: merges `agents.defaults` with `agents.list` entry.\n * Subagent session keys fall back to the configured default agent id for profile lookup.\n */\n\nimport type { ThinkLevel, ReasoningLevel, VerboseLevel } from '../agent/transcript/thinking-types.js';\nimport type { Config } from './schema.js';\nimport type { AgentModelConfig } from './schema.js';\nimport { getAgentDefaultModelRef } from './schema.js';\nimport { resolveAgentWorkspaceDir } from '../agent/agent-scope.js';\nimport { getDefaultAgentId, agentExists } from '../routing/resolve-route.js';\nimport { parseSessionKey } from '../routing/session-key.js';\n\nexport { resolveAgentWorkspaceDir } from '../agent/agent-scope.js';\n\nexport type { AgentModelConfig };\n\nexport interface EffectiveAgentTools {\n /** Tool names to exclude (merged: union of defaults + list entry disables). */\n disable: Set<string>;\n}\n\nexport interface EffectiveAgentProfile {\n agentId: string;\n /** Resolved absolute Markdown workspace path (tool cwd, attachments, daily memory/, …). */\n resolvedWorkspacePath: string;\n /** Primary model ref (provider/model); may be empty → runtime default. */\n primaryModelRef: string | undefined;\n fallbacks: string[];\n thinkingDefault?: ThinkLevel;\n reasoningDefault?: ReasoningLevel;\n verboseDefault?: VerboseLevel;\n systemPromptOverride?: string;\n /** When set, only these skill names appear in `<available_skills>`. */\n skillsAllowlist?: string[];\n tools: EffectiveAgentTools;\n params: Record<string, unknown>;\n}\n\nfunction mergeModelConfig(\n base: AgentModelConfig | undefined,\n override: AgentModelConfig | undefined,\n): AgentModelConfig | undefined {\n if (override === undefined) {\n return base;\n }\n if (typeof override === 'string') {\n return override.trim() ? override : base;\n }\n const b =\n typeof base === 'string'\n ? { primary: base, fallbacks: [] as string[] }\n : { primary: base?.primary, fallbacks: [...(base?.fallbacks ?? [])] };\n const o = override;\n return {\n primary: o.primary ?? b.primary,\n fallbacks: o.fallbacks ?? b.fallbacks,\n };\n}\n\nfunction primaryAndFallbacksFromModelConfig(\n raw: AgentModelConfig | undefined,\n): { primary?: string; fallbacks: string[] } {\n if (raw === undefined || raw === null) {\n return { primary: undefined, fallbacks: [] };\n }\n if (typeof raw === 'string') {\n const s = raw.trim();\n return s ? { primary: s, fallbacks: [] } : { primary: undefined, fallbacks: [] };\n }\n const primary = raw.primary?.trim();\n const fallbacks = Array.isArray(raw.fallbacks) ? raw.fallbacks.map((s) => String(s).trim()).filter(Boolean) : [];\n return { primary: primary || undefined, fallbacks };\n}\n\nfunction mergeDisableLists(a?: string[], b?: string[]): Set<string> {\n const out = new Set<string>();\n for (const x of a ?? []) {\n const s = String(x).trim();\n if (s) {\n out.add(s);\n }\n }\n for (const x of b ?? []) {\n const s = String(x).trim();\n if (s) {\n out.add(s);\n }\n }\n return out;\n}\n\n/**\n * Agent id used for config lookup from a session key (subagent keys → default agent).\n */\nexport function extractProfileAgentId(sessionKey: string | undefined | null, config: Config): string {\n const parsed = parseSessionKey(sessionKey ?? '');\n if (!parsed) {\n return getDefaultAgentId(config);\n }\n const aid = parsed.agentId;\n if (aid === 'subagent' || aid.startsWith('subagent:')) {\n return getDefaultAgentId(config);\n }\n if (!agentExists(aid, config)) {\n return getDefaultAgentId(config);\n }\n return aid.toLowerCase();\n}\n\n/**\n * Merge `agents.defaults` with the matching `agents.list` entry.\n */\nexport function resolveEffectiveAgentProfile(config: Config, agentId: string): EffectiveAgentProfile {\n const defaults = config.agents?.defaults;\n const list = config.agents?.list;\n const entry = Array.isArray(list)\n ? list.find((a) => a && a.enabled !== false && a.id.toLowerCase() === agentId.toLowerCase())\n : undefined;\n\n const resolvedWorkspacePath = resolveAgentWorkspaceDir(config, agentId);\n\n const mergedModel = mergeModelConfig(defaults?.model as AgentModelConfig | undefined, entry?.model as AgentModelConfig | undefined);\n const { primary: primaryFromMerged, fallbacks: fallbacksFromMerged } = primaryAndFallbacksFromModelConfig(mergedModel);\n const globalDefault = getAgentDefaultModelRef(config);\n const primaryModelRef = primaryFromMerged?.trim() || globalDefault;\n\n const disable = mergeDisableLists(\n defaults?.tools?.disable as string[] | undefined,\n entry?.tools?.disable as string[] | undefined,\n );\n\n const params: Record<string, unknown> = {\n ...(defaults?.params as Record<string, unknown> | undefined),\n ...(entry?.params as Record<string, unknown> | undefined),\n };\n\n return {\n agentId: agentId.toLowerCase(),\n resolvedWorkspacePath,\n primaryModelRef,\n fallbacks: fallbacksFromMerged,\n thinkingDefault: entry?.thinkingDefault ?? defaults?.thinkingDefault,\n reasoningDefault: entry?.reasoningDefault ?? defaults?.reasoningDefault,\n verboseDefault: entry?.verboseDefault ?? defaults?.verboseDefault,\n systemPromptOverride: entry?.systemPromptOverride?.trim()\n ? entry.systemPromptOverride\n : defaults?.systemPromptOverride?.trim()\n ? defaults.systemPromptOverride\n : undefined,\n skillsAllowlist: entry?.skills?.length ? [...entry.skills] : defaults?.skills?.length ? [...defaults.skills] : undefined,\n tools: { disable },\n params,\n };\n}\n\nexport function resolveEffectiveAgentProfileForSession(\n config: Config,\n sessionKey: string | undefined | null,\n): EffectiveAgentProfile {\n const id = extractProfileAgentId(sessionKey, config);\n return resolveEffectiveAgentProfile(config, id);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"agent-profile.js","names":[],"sources":["../../../src/config/agent-profile.ts"],"sourcesContent":["/**\n * Effective agent profile: merges `agents.defaults` with `agents.list` entry.\n * Subagent session keys fall back to the configured default agent id for profile lookup.\n */\n\nimport type { ThinkLevel, ReasoningLevel, VerboseLevel } from '../agent/transcript/thinking-types.js';\nimport type { Config } from './schema.js';\nimport type { AgentModelConfig } from './schema.js';\nimport { getAgentDefaultModelRef } from './schema.js';\nimport { resolveAgentWorkspaceDir } from '../agent/agent-scope.js';\nimport { getDefaultAgentId, agentExists } from '../routing/resolve-route.js';\nimport { parseSessionKey } from '../routing/session-key.js';\n\nexport { resolveAgentWorkspaceDir } from '../agent/agent-scope.js';\n\nexport type { AgentModelConfig };\n\nexport interface EffectiveAgentTools {\n /** Tool names to exclude (merged: union of defaults + list entry disables). */\n disable: Set<string>;\n}\n\nexport interface EffectiveAgentProfile {\n agentId: string;\n /** Resolved absolute Markdown workspace path (tool cwd, attachments, daily memory/, …). */\n resolvedWorkspacePath: string;\n /** Primary model ref (provider/model); may be empty → runtime default. */\n primaryModelRef: string | undefined;\n fallbacks: string[];\n thinkingDefault?: ThinkLevel;\n reasoningDefault?: ReasoningLevel;\n verboseDefault?: VerboseLevel;\n systemPromptOverride?: string;\n /** When set, only these skill names appear in `<available_skills>`. */\n skillsAllowlist?: string[];\n tools: EffectiveAgentTools;\n params: Record<string, unknown>;\n}\n\nfunction mergeModelConfig(\n base: AgentModelConfig | undefined,\n override: AgentModelConfig | undefined,\n): AgentModelConfig | undefined {\n if (override === undefined) return base;\n if (base === undefined) return override;\n return {\n primary: override.primary ?? base.primary,\n fallbacks: override.fallbacks ?? base.fallbacks,\n };\n}\n\nfunction primaryAndFallbacksFromModelConfig(\n raw: AgentModelConfig | undefined,\n): { primary?: string; fallbacks: string[] } {\n const primary = raw?.primary?.trim();\n const fallbacks = Array.isArray(raw?.fallbacks)\n ? raw.fallbacks.map((s) => s.trim()).filter(Boolean)\n : [];\n return { primary: primary || undefined, fallbacks };\n}\n\nfunction mergeDisableLists(a?: string[], b?: string[]): Set<string> {\n const out = new Set<string>();\n for (const x of a ?? []) {\n const s = String(x).trim();\n if (s) {\n out.add(s);\n }\n }\n for (const x of b ?? []) {\n const s = String(x).trim();\n if (s) {\n out.add(s);\n }\n }\n return out;\n}\n\n/**\n * Agent id used for config lookup from a session key (subagent keys → default agent).\n */\nexport function extractProfileAgentId(sessionKey: string | undefined | null, config: Config): string {\n const parsed = parseSessionKey(sessionKey ?? '');\n if (!parsed) {\n return getDefaultAgentId(config);\n }\n const aid = parsed.agentId;\n if (aid === 'subagent' || aid.startsWith('subagent:')) {\n return getDefaultAgentId(config);\n }\n if (!agentExists(aid, config)) {\n return getDefaultAgentId(config);\n }\n return aid.toLowerCase();\n}\n\n/**\n * Merge `agents.defaults` with the matching `agents.list` entry.\n */\nexport function resolveEffectiveAgentProfile(config: Config, agentId: string): EffectiveAgentProfile {\n const defaults = config.agents?.defaults;\n const list = config.agents?.list;\n const entry = Array.isArray(list)\n ? list.find((a) => a && a.enabled !== false && a.id.toLowerCase() === agentId.toLowerCase())\n : undefined;\n\n const resolvedWorkspacePath = resolveAgentWorkspaceDir(config, agentId);\n\n const mergedModel = mergeModelConfig(defaults?.model, entry?.model);\n const { primary: primaryFromMerged, fallbacks: fallbacksFromMerged } = primaryAndFallbacksFromModelConfig(mergedModel);\n const globalDefault = getAgentDefaultModelRef(config);\n const primaryModelRef = primaryFromMerged?.trim() || globalDefault;\n\n const disable = mergeDisableLists(\n defaults?.tools?.disable as string[] | undefined,\n entry?.tools?.disable as string[] | undefined,\n );\n\n const params: Record<string, unknown> = {\n ...(defaults?.params as Record<string, unknown> | undefined),\n ...(entry?.params as Record<string, unknown> | undefined),\n };\n\n return {\n agentId: agentId.toLowerCase(),\n resolvedWorkspacePath,\n primaryModelRef,\n fallbacks: fallbacksFromMerged,\n thinkingDefault: entry?.thinkingDefault ?? defaults?.thinkingDefault,\n reasoningDefault: entry?.reasoningDefault ?? defaults?.reasoningDefault,\n verboseDefault: entry?.verboseDefault ?? defaults?.verboseDefault,\n systemPromptOverride: entry?.systemPromptOverride?.trim()\n ? entry.systemPromptOverride\n : defaults?.systemPromptOverride?.trim()\n ? defaults.systemPromptOverride\n : undefined,\n skillsAllowlist: entry?.skills?.length ? [...entry.skills] : defaults?.skills?.length ? [...defaults.skills] : undefined,\n tools: { disable },\n params,\n };\n}\n\nexport function resolveEffectiveAgentProfileForSession(\n config: Config,\n sessionKey: string | undefined | null,\n): EffectiveAgentProfile {\n const id = extractProfileAgentId(sessionKey, config);\n return resolveEffectiveAgentProfile(config, id);\n}\n"],"mappings":";;;;;aAQsD;kBACa;oBACU;kBACjB;AA4B5D,SAAS,iBACP,MACA,UAC8B;AAC9B,KAAI,aAAa,KAAA,EAAW,QAAO;AACnC,KAAI,SAAS,KAAA,EAAW,QAAO;AAC/B,QAAO;EACL,SAAS,SAAS,WAAW,KAAK;EAClC,WAAW,SAAS,aAAa,KAAK;EACvC;;AAGH,SAAS,mCACP,KAC2C;CAC3C,MAAM,UAAU,KAAK,SAAS,MAAM;CACpC,MAAM,YAAY,MAAM,QAAQ,KAAK,UAAU,GAC3C,IAAI,UAAU,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,QAAQ,GAClD,EAAE;AACN,QAAO;EAAE,SAAS,WAAW,KAAA;EAAW;EAAW;;AAGrD,SAAS,kBAAkB,GAAc,GAA2B;CAClE,MAAM,sBAAM,IAAI,KAAa;AAC7B,MAAK,MAAM,KAAK,KAAK,EAAE,EAAE;EACvB,MAAM,IAAI,OAAO,EAAE,CAAC,MAAM;AAC1B,MAAI,EACF,KAAI,IAAI,EAAE;;AAGd,MAAK,MAAM,KAAK,KAAK,EAAE,EAAE;EACvB,MAAM,IAAI,OAAO,EAAE,CAAC,MAAM;AAC1B,MAAI,EACF,KAAI,IAAI,EAAE;;AAGd,QAAO;;;;;AAMT,SAAgB,sBAAsB,YAAuC,QAAwB;CACnG,MAAM,SAAS,gBAAgB,cAAc,GAAG;AAChD,KAAI,CAAC,OACH,QAAO,kBAAkB,OAAO;CAElC,MAAM,MAAM,OAAO;AACnB,KAAI,QAAQ,cAAc,IAAI,WAAW,YAAY,CACnD,QAAO,kBAAkB,OAAO;AAElC,KAAI,CAAC,YAAY,KAAK,OAAO,CAC3B,QAAO,kBAAkB,OAAO;AAElC,QAAO,IAAI,aAAa;;;;;AAM1B,SAAgB,6BAA6B,QAAgB,SAAwC;CACnG,MAAM,WAAW,OAAO,QAAQ;CAChC,MAAM,OAAO,OAAO,QAAQ;CAC5B,MAAM,QAAQ,MAAM,QAAQ,KAAK,GAC7B,KAAK,MAAM,MAAM,KAAK,EAAE,YAAY,SAAS,EAAE,GAAG,aAAa,KAAK,QAAQ,aAAa,CAAC,GAC1F,KAAA;CAEJ,MAAM,wBAAwB,yBAAyB,QAAQ,QAAQ;CAGvE,MAAM,EAAE,SAAS,mBAAmB,WAAW,wBAAwB,mCADnD,iBAAiB,UAAU,OAAO,OAAO,MACwD,CAAC;CACtH,MAAM,gBAAgB,wBAAwB,OAAO;CACrD,MAAM,kBAAkB,mBAAmB,MAAM,IAAI;CAErD,MAAM,UAAU,kBACd,UAAU,OAAO,SACjB,OAAO,OAAO,QACf;CAED,MAAM,SAAkC;EACtC,GAAI,UAAU;EACd,GAAI,OAAO;EACZ;AAED,QAAO;EACL,SAAS,QAAQ,aAAa;EAC9B;EACA;EACA,WAAW;EACX,iBAAiB,OAAO,mBAAmB,UAAU;EACrD,kBAAkB,OAAO,oBAAoB,UAAU;EACvD,gBAAgB,OAAO,kBAAkB,UAAU;EACnD,sBAAsB,OAAO,sBAAsB,MAAM,GACrD,MAAM,uBACN,UAAU,sBAAsB,MAAM,GACpC,SAAS,uBACT,KAAA;EACN,iBAAiB,OAAO,QAAQ,SAAS,CAAC,GAAG,MAAM,OAAO,GAAG,UAAU,QAAQ,SAAS,CAAC,GAAG,SAAS,OAAO,GAAG,KAAA;EAC/G,OAAO,EAAE,SAAS;EAClB;EACD;;AAGH,SAAgB,uCACd,QACA,YACuB;AAEvB,QAAO,6BAA6B,QADzB,sBAAsB,YAAY,OACC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Named model roles (`agents.defaults.models` / `agents.list[].models`).
3
+ * Merged per agent id for workflow and other callers.
4
+ */
5
+ import type { AgentTypedModel, Config } from './schema.js';
6
+ export type { AgentTypedModel };
7
+ /**
8
+ * Merge defaults + per-agent typed models. Agent entry wins on same `id`.
9
+ */
10
+ export declare function mergeTypedModels(defaults?: AgentTypedModel[], entry?: AgentTypedModel[]): Map<string, AgentTypedModel>;
11
+ export declare function resolveEffectiveTypedModels(config: Config, agentId: string): Map<string, AgentTypedModel>;
12
+ /** Resolve a typed model id to `provider/model`, or undefined when not configured. */
13
+ export declare function resolveTypedModelRef(config: Config, agentId: string, typeId: string): string | undefined;
14
+ /**
15
+ * Resolve a model reference: `provider/model`, typed id (`small`), or `@small`.
16
+ * Throws when the ref is invalid or the typed id is unknown.
17
+ */
18
+ export declare function resolveModelRef(config: Config, agentId: string, ref: string): string;