@xopcai/xopc 0.0.116 → 0.0.118

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 (677) hide show
  1. package/README.md +44 -28
  2. package/README.zh-CN.md +63 -45
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/demo-memory/src/index.d.ts +6 -0
  5. package/dist/extensions/demo-memory/src/index.js +132 -0
  6. package/dist/extensions/demo-memory/src/index.js.map +1 -0
  7. package/dist/extensions/demo-memory/xopc.extension.json +15 -0
  8. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  9. package/dist/extensions/feishu/src/schema/config-schema.d.ts +3 -3
  10. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  11. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
  12. package/dist/extensions/telegram/src/command-handler.js +1 -2
  13. package/dist/extensions/telegram/src/command-handler.js.map +1 -1
  14. package/dist/extensions/telegram/src/config-schema.d.ts +8 -8
  15. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  16. package/dist/extensions/telegram/src/plugin.js +1 -1
  17. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  18. package/dist/extensions/telegram/src/update-offset-store.js +1 -1
  19. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  20. package/dist/extensions/telegram/xopc.extension.json +1 -1
  21. package/dist/extensions/weixin/src/api/api.js +2 -2
  22. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  23. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  24. package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
  25. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  26. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  27. package/dist/extensions/weixin/src/messaging/inbound.js +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 +1 -1
  31. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  32. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CWM1UU5P.js → agent-avatar-dicebear-dzUrQoeZ.js} +1 -1
  33. package/dist/gateway/static/root/assets/agents-BCxZbkOw.js +2 -0
  34. package/dist/gateway/static/root/assets/{app-management-settings-panel-yXSXY_bu.js → app-management-settings-panel-bxYJVJpx.js} +1 -1
  35. package/dist/gateway/static/root/assets/{appearance-settings-DjY1P_ug.js → appearance-settings-BCIykXlI.js} +1 -1
  36. package/dist/gateway/static/root/assets/apps-page--wMEL00f.js +1 -0
  37. package/dist/gateway/static/root/assets/{archive-plugin-CytE5j-e.js → archive-plugin-Cki4SfU2.js} +1 -1
  38. package/dist/gateway/static/root/assets/{attachment-load-BvvrN6rF.js → attachment-load-D-KnS2Do.js} +1 -1
  39. package/dist/gateway/static/root/assets/{binary-plugins-IBWSitnj.js → binary-plugins-D2sgvJja.js} +1 -1
  40. package/dist/gateway/static/root/assets/{block-editor-C-wDpsf-.js → block-editor-DIq-4Gvb.js} +27 -27
  41. package/dist/gateway/static/root/assets/browser-settings-page-DRhKdn81.js +8 -0
  42. package/dist/gateway/static/root/assets/capability-presets-api-CorhiHlg.js +1 -0
  43. package/dist/gateway/static/root/assets/capability-presets-settings-panel-qFx9Jtce.js +1 -0
  44. package/dist/gateway/static/root/assets/channels-settings-BAwAkqIA.js +1 -0
  45. package/dist/gateway/static/root/assets/connectors-page-BQLcfitM.js +2 -0
  46. package/dist/gateway/static/root/assets/cron-api-qGwmL-24.js +1 -0
  47. package/dist/gateway/static/root/assets/cron-page-BBWMAj8-.js +3 -0
  48. package/dist/gateway/static/root/assets/dreaming-settings-Dw89Obml.js +1 -0
  49. package/dist/gateway/static/root/assets/{extension-debug-page-BAIyjDlq.js → extension-debug-page-DYu1KaFQ.js} +1 -1
  50. package/dist/gateway/static/root/assets/{extension-page-DEhv2GpC.js → extension-page-B3W6QwlZ.js} +1 -1
  51. package/dist/gateway/static/root/assets/{extension-settings-page-DOuAxTDW.js → extension-settings-page-D7VQ-cxE.js} +1 -1
  52. package/dist/gateway/static/root/assets/{fetch-CTsREQIe.js → fetch-B7xDPu-R.js} +1 -1
  53. package/dist/gateway/static/root/assets/{format-interval-label-D35Bfhtx.js → format-interval-label-BzxafKxR.js} +1 -1
  54. package/dist/gateway/static/root/assets/gateway-config-api-BTBLSeUu.js +1 -0
  55. package/dist/gateway/static/root/assets/gateway-settings-Cmwy58rS.js +1 -0
  56. package/dist/gateway/static/root/assets/{gateway-startup-retry-C1KAHrd2.js → gateway-startup-retry-CYj9FWCp.js} +1 -1
  57. package/dist/gateway/static/root/assets/goal-detail-page-l7mu5GWX.js +1 -0
  58. package/dist/gateway/static/root/assets/{goals-config-api-KnLGpu6h.js → goals-config-api-CQQgzPr3.js} +1 -1
  59. package/dist/gateway/static/root/assets/goals-page-BHitvJAv.js +2 -0
  60. package/dist/gateway/static/root/assets/{goals-settings-DtPtqZi8.js → goals-settings-CYVY4NGp.js} +1 -1
  61. package/dist/gateway/static/root/assets/{heartbeat-config-api-uKw1f0IG.js → heartbeat-config-api-DriO_CN9.js} +1 -1
  62. package/dist/gateway/static/root/assets/heartbeat-settings-CUQTKxg7.js +1 -0
  63. package/dist/gateway/static/root/assets/index-C17Tsd_b.css +1 -0
  64. package/dist/gateway/static/root/assets/index-Cc41r16l.js +191 -0
  65. package/dist/gateway/static/root/assets/{interval-presets-Dq0FXJ65.js → interval-presets-DFPCKW_W.js} +1 -1
  66. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-C9_t4m7t.js → keyboard-shortcuts-settings-CcVcqstx.js} +1 -1
  67. package/dist/gateway/static/root/assets/{logs-page-SNkWzidV.js → logs-page-C2Uqvae9.js} +2 -2
  68. package/dist/gateway/static/root/assets/{markdown-split-Ca87W8-h.js → markdown-split-BwOFrJ2E.js} +1 -1
  69. package/dist/gateway/static/root/assets/{media-plugins-BAcUjPRJ.js → media-plugins-Cnz6Q5G6.js} +1 -1
  70. package/dist/gateway/static/root/assets/messages-B1iSKjiw.js +3 -0
  71. package/dist/gateway/static/root/assets/models-hub-panel-BfLfcta8.js +2 -0
  72. package/dist/gateway/static/root/assets/note-detail-page-BjwOQBfT.js +2 -0
  73. package/dist/gateway/static/root/assets/{note-image-lightbox-hnSX5SSn.js → note-image-lightbox-B-Svpmza.js} +1 -1
  74. package/dist/gateway/static/root/assets/notes-page-DktdBiwB.js +1 -0
  75. package/dist/gateway/static/root/assets/{preview-open-alternatives-CNgM20H5.js → preview-open-alternatives-Bss4TiwP.js} +1 -1
  76. package/dist/gateway/static/root/assets/remote-access-hub-rfVx96fq.js +1 -0
  77. package/dist/gateway/static/root/assets/{save-bar-controls-CcdjGcfT.js → save-bar-controls-BRNjdgKq.js} +1 -1
  78. package/dist/gateway/static/root/assets/{schedule-field-CYr39z76.js → schedule-field-CUCKODde.js} +1 -1
  79. package/dist/gateway/static/root/assets/{schema-form-BRAJgZQ2.js → schema-form-Dub9sy8r.js} +1 -1
  80. package/dist/gateway/static/root/assets/sessions-page-DbtMFuuH.js +1 -0
  81. package/dist/gateway/static/root/assets/settings-advanced-gate-5re5gAnP.js +1 -0
  82. package/dist/gateway/static/root/assets/{settings-collapsible-section-BhzjeGWi.js → settings-collapsible-section-BeFLavGi.js} +1 -1
  83. package/dist/gateway/static/root/assets/{settings-form-section-Cz3Pcr9b.js → settings-form-section-dmyaPOTG.js} +1 -1
  84. package/dist/gateway/static/root/assets/settings-page-D-WMyLlj.js +1 -0
  85. package/dist/gateway/static/root/assets/setup-status-panel-Cl-DEJAU.js +1 -0
  86. package/dist/gateway/static/root/assets/{share-preview-page-DL4y9K5e.js → share-preview-page-C8glrdqe.js} +1 -1
  87. package/dist/gateway/static/root/assets/shares-settings-CyPVvbLt.js +1 -0
  88. package/dist/gateway/static/root/assets/skill-reload-api-CleTH1oz.js +1 -0
  89. package/dist/gateway/static/root/assets/skills-page-Ck8hdXqR.js +2 -0
  90. package/dist/gateway/static/root/assets/{system-settings-panel-FD2jxRZ3.js → system-settings-panel-DI-LN_8G.js} +1 -1
  91. package/dist/gateway/static/root/assets/typed-models-lib-kX9duch4.js +1 -0
  92. package/dist/gateway/static/root/assets/{use-channel-catalog-BInPrfR5.js → use-channel-catalog-DqlWTsDb.js} +1 -1
  93. package/dist/gateway/static/root/assets/user-profile-settings-panel-B-UFPMXy.js +1 -0
  94. package/dist/gateway/static/root/assets/utils-Dm0hKalR.js +1 -0
  95. package/dist/gateway/static/root/assets/voice-api-key-field-C73IVZeC.js +1 -0
  96. package/dist/gateway/static/root/assets/{voice-player-store-1U3vFppm.js → voice-player-store-C_ArLJPM.js} +1 -1
  97. package/dist/gateway/static/root/assets/workflows-page-BtFGp2y_.js +18 -0
  98. package/dist/gateway/static/root/index.html +5 -5
  99. package/dist/package.js +1 -1
  100. package/dist/src/agent/agent-manager.d.ts +1 -1
  101. package/dist/src/agent/agent-manager.js +14 -14
  102. package/dist/src/agent/agent-manager.js.map +1 -1
  103. package/dist/src/agent/agent-scope.js +5 -9
  104. package/dist/src/agent/agent-scope.js.map +1 -1
  105. package/dist/src/agent/background-review/coordinator.js +0 -1
  106. package/dist/src/agent/background-review/coordinator.js.map +1 -1
  107. package/dist/src/agent/background-review/prompts.d.ts +2 -2
  108. package/dist/src/agent/background-review/prompts.js +2 -2
  109. package/dist/src/agent/background-review/prompts.js.map +1 -1
  110. package/dist/src/agent/background-review/run-background-review.d.ts +0 -2
  111. package/dist/src/agent/background-review/run-background-review.js +2 -4
  112. package/dist/src/agent/background-review/run-background-review.js.map +1 -1
  113. package/dist/src/agent/background-review/settings.d.ts +1 -1
  114. package/dist/src/agent/background-review/settings.js +8 -8
  115. package/dist/src/agent/background-review/settings.js.map +1 -1
  116. package/dist/src/agent/bootstrap/bootstrap-cache.d.ts +1 -0
  117. package/dist/src/agent/bootstrap/bootstrap-cache.js +4 -3
  118. package/dist/src/agent/bootstrap/bootstrap-cache.js.map +1 -1
  119. package/dist/src/agent/bootstrap/bootstrap-context.d.ts +2 -2
  120. package/dist/src/agent/bootstrap/bootstrap-context.js +4 -4
  121. package/dist/src/agent/bootstrap/bootstrap-context.js.map +1 -1
  122. package/dist/src/agent/bootstrap/bootstrap-files.d.ts +4 -0
  123. package/dist/src/agent/bootstrap/bootstrap-files.js +4 -3
  124. package/dist/src/agent/bootstrap/bootstrap-files.js.map +1 -1
  125. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +4 -2
  126. package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +1 -1
  127. package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +2 -1
  128. package/dist/src/agent/bootstrap/load-bootstrap-files.js +18 -17
  129. package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +1 -1
  130. package/dist/src/agent/bootstrap/project-agents-context.js +1 -1
  131. package/dist/src/agent/bootstrap/types.d.ts +1 -1
  132. package/dist/src/agent/context/workspace-seed.js +3 -3
  133. package/dist/src/agent/context/workspace-state.js +1 -1
  134. package/dist/src/agent/context/workspace-templates/AGENTS.md +1 -1
  135. package/dist/src/agent/context/workspace.d.ts +4 -2
  136. package/dist/src/agent/context/workspace.js +6 -5
  137. package/dist/src/agent/context/workspace.js.map +1 -1
  138. package/dist/src/agent/embedded/run-for-session.js +4 -1
  139. package/dist/src/agent/embedded/run-for-session.js.map +1 -1
  140. package/dist/src/agent/fallback/candidates.js +11 -9
  141. package/dist/src/agent/fallback/candidates.js.map +1 -1
  142. package/dist/src/agent/goals/goal-locale.js +2 -2
  143. package/dist/src/agent/goals/post-turn.js +3 -3
  144. package/dist/src/agent/image/generation/runtime-types.d.ts +2 -0
  145. package/dist/src/agent/image/generation/runtime.js +1 -1
  146. package/dist/src/agent/image/generation/runtime.js.map +1 -1
  147. package/dist/src/agent/image/image-helpers.d.ts +1 -1
  148. package/dist/src/agent/image/image-helpers.js +4 -17
  149. package/dist/src/agent/image/image-helpers.js.map +1 -1
  150. package/dist/src/agent/image/image-model-fallback.js +1 -1
  151. package/dist/src/agent/image/image-model-fallback.js.map +1 -1
  152. package/dist/src/agent/image/inbound-image-handling.js +1 -1
  153. package/dist/src/agent/image/inbound-image-handling.js.map +1 -1
  154. package/dist/src/agent/image/load-image-media.js +2 -2
  155. package/dist/src/agent/image/tool-model-config.d.ts +1 -1
  156. package/dist/src/agent/image/tool-model-config.js +2 -2
  157. package/dist/src/agent/image/tool-model-config.js.map +1 -1
  158. package/dist/src/agent/ipc/inbox.js +3 -3
  159. package/dist/src/agent/ipc/socket.js +1 -1
  160. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  161. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  162. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  163. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  164. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +1 -1
  165. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +1 -1
  166. package/dist/src/agent/media-generation/runtime-shared.d.ts +5 -2
  167. package/dist/src/agent/media-generation/runtime-shared.js +1 -1
  168. package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
  169. package/dist/src/agent/memory/builtin-memory-store.d.ts +6 -2
  170. package/dist/src/agent/memory/builtin-memory-store.js +15 -6
  171. package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
  172. package/dist/src/agent/memory/builtin-provider.d.ts +31 -9
  173. package/dist/src/agent/memory/builtin-provider.js +290 -11
  174. package/dist/src/agent/memory/builtin-provider.js.map +1 -1
  175. package/dist/src/agent/memory/candidate-extractor.d.ts +6 -0
  176. package/dist/src/agent/memory/candidate-extractor.js +60 -0
  177. package/dist/src/agent/memory/candidate-extractor.js.map +1 -0
  178. package/dist/src/agent/memory/context-assembler.d.ts +10 -0
  179. package/dist/src/agent/memory/context-assembler.js +26 -0
  180. package/dist/src/agent/memory/context-assembler.js.map +1 -0
  181. package/dist/src/agent/memory/create-memory-manager.js +25 -7
  182. package/dist/src/agent/memory/create-memory-manager.js.map +1 -1
  183. package/dist/src/agent/memory/dreaming/config.d.ts +1 -6
  184. package/dist/src/agent/memory/dreaming/config.js +8 -8
  185. package/dist/src/agent/memory/dreaming/config.js.map +1 -1
  186. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +2 -0
  187. package/dist/src/agent/memory/dreaming/deep-promotion.js +25 -1
  188. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -1
  189. package/dist/src/agent/memory/dreaming/events.js +1 -1
  190. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  191. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  192. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  193. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  194. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  195. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  196. package/dist/src/agent/memory/index.d.ts +1 -0
  197. package/dist/src/agent/memory/index.js +4 -3
  198. package/dist/src/agent/memory/inject-prefetch.js +6 -2
  199. package/dist/src/agent/memory/inject-prefetch.js.map +1 -1
  200. package/dist/src/agent/memory/manager.d.ts +39 -2
  201. package/dist/src/agent/memory/manager.js +355 -39
  202. package/dist/src/agent/memory/manager.js.map +1 -1
  203. package/dist/src/agent/memory/memory-config.js +15 -15
  204. package/dist/src/agent/memory/memory-config.js.map +1 -1
  205. package/dist/src/agent/memory/memory-flush.js +1 -1
  206. package/dist/src/agent/memory/plugin-discovery.d.ts +19 -5
  207. package/dist/src/agent/memory/plugin-discovery.js +97 -31
  208. package/dist/src/agent/memory/plugin-discovery.js.map +1 -1
  209. package/dist/src/agent/memory/prefetch-coordinator.js.map +1 -1
  210. package/dist/src/agent/memory/provider.d.ts +20 -15
  211. package/dist/src/agent/memory/stub-memory-provider.d.ts +17 -2
  212. package/dist/src/agent/memory/stub-memory-provider.js +20 -3
  213. package/dist/src/agent/memory/stub-memory-provider.js.map +1 -1
  214. package/dist/src/agent/memory/types.d.ts +162 -3
  215. package/dist/src/agent/models/manager.d.ts +1 -1
  216. package/dist/src/agent/models/manager.js +2 -2
  217. package/dist/src/agent/models/manager.js.map +1 -1
  218. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +1 -1
  219. package/dist/src/agent/orchestration/agent-orchestrator.js +2 -1
  220. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  221. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +2 -2
  222. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
  223. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
  224. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +2 -6
  225. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +2 -8
  226. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +1 -1
  227. package/dist/src/agent/prompt/memory/index.d.ts +4 -2
  228. package/dist/src/agent/prompt/memory/index.js +19 -13
  229. package/dist/src/agent/prompt/memory/index.js.map +1 -1
  230. package/dist/src/agent/prompt/sections/memory-skills.js +1 -1
  231. package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -1
  232. package/dist/src/agent/prompt/service-prompt-builder.js +5 -20
  233. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  234. package/dist/src/agent/reply/post-compaction-context.js +10 -7
  235. package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
  236. package/dist/src/agent/reply/startup-context.js +7 -12
  237. package/dist/src/agent/reply/startup-context.js.map +1 -1
  238. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  239. package/dist/src/agent/sandbox/path-policy.js +2 -2
  240. package/dist/src/agent/service/process-direct-streaming.js +1 -4
  241. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  242. package/dist/src/agent/service/session-context-report.js +1 -1
  243. package/dist/src/agent/service/session-context-report.js.map +1 -1
  244. package/dist/src/agent/service.d.ts +3 -3
  245. package/dist/src/agent/service.js +30 -35
  246. package/dist/src/agent/service.js.map +1 -1
  247. package/dist/src/agent/service.types.d.ts +1 -2
  248. package/dist/src/agent/session/session-hydrator.js +1 -2
  249. package/dist/src/agent/session/session-hydrator.js.map +1 -1
  250. package/dist/src/agent/session/session-inspector.d.ts +1 -1
  251. package/dist/src/agent/session/session-inspector.js +10 -15
  252. package/dist/src/agent/session/session-inspector.js.map +1 -1
  253. package/dist/src/agent/skills/config.js +2 -2
  254. package/dist/src/agent/skills/filesystem-watcher.js +1 -1
  255. package/dist/src/agent/skills/hub-hash.js +2 -2
  256. package/dist/src/agent/skills/hub-lock.js +1 -1
  257. package/dist/src/agent/skills/hub-pull.js +3 -3
  258. package/dist/src/agent/skills/index.js +2 -2
  259. package/dist/src/agent/skills/installer.js +2 -2
  260. package/dist/src/agent/skills/managed-store.js +1 -1
  261. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  262. package/dist/src/agent/skills/skill-manager.js +1 -1
  263. package/dist/src/agent/skills/skill-view-path.js +1 -1
  264. package/dist/src/agent/skills/test-framework.js +1 -1
  265. package/dist/src/agent/starter-agents.d.ts +1 -3
  266. package/dist/src/agent/starter-agents.js +14 -22
  267. package/dist/src/agent/starter-agents.js.map +1 -1
  268. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -2
  269. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
  270. package/dist/src/agent/tools/curated-memory-tool.d.ts +2 -5
  271. package/dist/src/agent/tools/curated-memory-tool.js +77 -18
  272. package/dist/src/agent/tools/curated-memory-tool.js.map +1 -1
  273. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  274. package/dist/src/agent/tools/factory.d.ts +0 -4
  275. package/dist/src/agent/tools/factory.js +19 -58
  276. package/dist/src/agent/tools/factory.js.map +1 -1
  277. package/dist/src/agent/tools/find.js +1 -1
  278. package/dist/src/agent/tools/grep.js +1 -1
  279. package/dist/src/agent/tools/image-generate-tool.d.ts +1 -1
  280. package/dist/src/agent/tools/image-generate-tool.js +20 -15
  281. package/dist/src/agent/tools/image-generate-tool.js.map +1 -1
  282. package/dist/src/agent/tools/image-tool.js +1 -3
  283. package/dist/src/agent/tools/image-tool.js.map +1 -1
  284. package/dist/src/agent/tools/memory-tool.d.ts +2 -2
  285. package/dist/src/agent/tools/memory-tool.js +39 -14
  286. package/dist/src/agent/tools/memory-tool.js.map +1 -1
  287. package/dist/src/agent/tools/session-search-tool.js +1 -3
  288. package/dist/src/agent/tools/session-search-tool.js.map +1 -1
  289. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  290. package/dist/src/agent/tools/web-extract.js +8 -9
  291. package/dist/src/agent/tools/web-extract.js.map +1 -1
  292. package/dist/src/agent/tools/workflow-tool.js +1 -1
  293. package/dist/src/agent/workflow/catalog.js +1 -1
  294. package/dist/src/agent/workflow/subagent-runner.js +1 -3
  295. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  296. package/dist/src/agent-manifest/index.d.ts +4 -0
  297. package/dist/src/agent-manifest/index.js +10 -0
  298. package/dist/src/agent-manifest/index.js.map +1 -0
  299. package/dist/src/agent-manifest/prompt.d.ts +2 -0
  300. package/dist/src/agent-manifest/prompt.js +57 -0
  301. package/dist/src/agent-manifest/prompt.js.map +1 -0
  302. package/dist/src/agent-manifest/resolver.d.ts +12 -0
  303. package/dist/src/agent-manifest/resolver.js +95 -0
  304. package/dist/src/agent-manifest/resolver.js.map +1 -0
  305. package/dist/src/agent-manifest/schema.d.ts +1010 -0
  306. package/dist/src/agent-manifest/schema.js +269 -0
  307. package/dist/src/agent-manifest/schema.js.map +1 -0
  308. package/dist/src/agent-manifest/validator.d.ts +25 -0
  309. package/dist/src/agent-manifest/validator.js +88 -0
  310. package/dist/src/agent-manifest/validator.js.map +1 -0
  311. package/dist/src/agent-runtime/boundary-guard.d.ts +12 -0
  312. package/dist/src/agent-runtime/boundary-guard.js +23 -0
  313. package/dist/src/agent-runtime/boundary-guard.js.map +1 -0
  314. package/dist/src/agent-runtime/index.d.ts +7 -0
  315. package/dist/src/agent-runtime/index.js +8 -0
  316. package/dist/src/agent-runtime/memory-runtime.d.ts +21 -0
  317. package/dist/src/agent-runtime/memory-runtime.js +50 -0
  318. package/dist/src/agent-runtime/memory-runtime.js.map +1 -0
  319. package/dist/src/agent-runtime/model-router.d.ts +11 -0
  320. package/dist/src/agent-runtime/model-router.js +16 -0
  321. package/dist/src/agent-runtime/model-router.js.map +1 -0
  322. package/dist/src/agent-runtime/run-trace.d.ts +27 -0
  323. package/dist/src/agent-runtime/run-trace.js +53 -0
  324. package/dist/src/agent-runtime/run-trace.js.map +1 -0
  325. package/dist/src/agent-runtime/runtime-profile.d.ts +24 -0
  326. package/dist/src/agent-runtime/runtime-profile.js +44 -0
  327. package/dist/src/agent-runtime/runtime-profile.js.map +1 -0
  328. package/dist/src/agent-runtime/tool-registry.d.ts +28 -0
  329. package/dist/src/agent-runtime/tool-registry.js +52 -0
  330. package/dist/src/agent-runtime/tool-registry.js.map +1 -0
  331. package/dist/src/agent-runtime/workflow-runtime.d.ts +31 -0
  332. package/dist/src/agent-runtime/workflow-runtime.js +34 -0
  333. package/dist/src/agent-runtime/workflow-runtime.js.map +1 -0
  334. package/dist/src/ai-assist/text-assist.js +1 -1
  335. package/dist/src/auth/credentials.js +2 -2
  336. package/dist/src/auth/profiles/store.js +2 -2
  337. package/dist/src/auth/sync-provider-auth.js +1 -1
  338. package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
  339. package/dist/src/browser/actions/extension-registry-bridge.js.map +1 -1
  340. package/dist/src/browser/actions/registry.js +5 -8
  341. package/dist/src/browser/actions/registry.js.map +1 -1
  342. package/dist/src/browser/backend-from-config.d.ts +1 -1
  343. package/dist/src/browser/backend-from-config.js +50 -71
  344. package/dist/src/browser/backend-from-config.js.map +1 -1
  345. package/dist/src/browser/browser-command-timeout.d.ts +0 -1
  346. package/dist/src/browser/browser-command-timeout.js +3 -7
  347. package/dist/src/browser/browser-command-timeout.js.map +1 -1
  348. package/dist/src/browser/cache-dir-policy.js +1 -1
  349. package/dist/src/browser/cdp-local-launcher.js +2 -2
  350. package/dist/src/browser/pipeline/source.js +1 -1
  351. package/dist/src/browser/providers/browser-ext-install.d.ts +2 -12
  352. package/dist/src/browser/providers/browser-ext-install.js +7 -12
  353. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  354. package/dist/src/browser/providers/cloakbrowser.js +5 -5
  355. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  356. package/dist/src/browser/readiness.js +16 -16
  357. package/dist/src/browser/readiness.js.map +1 -1
  358. package/dist/src/browser/schemas.js +1 -1
  359. package/dist/src/browser/schemas.js.map +1 -1
  360. package/dist/src/browser/stealth.js +1 -1
  361. package/dist/src/channels/catalog/channel-catalog-service.js +1 -1
  362. package/dist/src/channels/outbound/persist-store.js +1 -1
  363. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  364. package/dist/src/channels/pairing/pairing-store.js +2 -2
  365. package/dist/src/channels/pipeline.d.ts +1 -1
  366. package/dist/src/channels/pipeline.js.map +1 -1
  367. package/dist/src/chat-commands/agent-edit.js +2 -3
  368. package/dist/src/chat-commands/agent-edit.js.map +1 -1
  369. package/dist/src/chat-commands/builtins/config.js +6 -6
  370. package/dist/src/chat-commands/builtins/config.js.map +1 -1
  371. package/dist/src/chat-commands/builtins/model.js +2 -2
  372. package/dist/src/chat-commands/builtins/model.js.map +1 -1
  373. package/dist/src/chat-commands/builtins/thinking.js +16 -42
  374. package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
  375. package/dist/src/chat-commands/config-paths.js +1 -1
  376. package/dist/src/chat-commands/config-paths.js.map +1 -1
  377. package/dist/src/chat-commands/context.js +3 -4
  378. package/dist/src/chat-commands/context.js.map +1 -1
  379. package/dist/src/cli/command-manifest.d.ts +1 -1
  380. package/dist/src/cli/command-manifest.js +2 -2
  381. package/dist/src/cli/command-manifest.js.map +1 -1
  382. package/dist/src/cli/commands/agent.js +3 -1
  383. package/dist/src/cli/commands/agent.js.map +1 -1
  384. package/dist/src/cli/commands/agents.js +3 -6
  385. package/dist/src/cli/commands/agents.js.map +1 -1
  386. package/dist/src/cli/commands/browser-cli-helpers.js +9 -11
  387. package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
  388. package/dist/src/cli/commands/config.js +6 -6
  389. package/dist/src/cli/commands/config.js.map +1 -1
  390. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  391. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  392. package/dist/src/cli/commands/doctor/checks/provider-auth.js +3 -18
  393. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
  394. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  395. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -2
  396. package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +1 -1
  397. package/dist/src/cli/commands/extension-create.js +1 -1
  398. package/dist/src/cli/commands/extension-dev.js +2 -2
  399. package/dist/src/cli/commands/extension-marketplace.js +2 -2
  400. package/dist/src/cli/commands/extension-pack.js +2 -2
  401. package/dist/src/cli/commands/extension.js +3 -3
  402. package/dist/src/cli/commands/gateway/logs.js +1 -1
  403. package/dist/src/cli/commands/goal.js +1 -1
  404. package/dist/src/cli/commands/image.js +13 -372
  405. package/dist/src/cli/commands/image.js.map +1 -1
  406. package/dist/src/cli/commands/init.js +7 -6
  407. package/dist/src/cli/commands/init.js.map +1 -1
  408. package/dist/src/cli/commands/models.js +14 -16
  409. package/dist/src/cli/commands/models.js.map +1 -1
  410. package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
  411. package/dist/src/cli/commands/onboard/model.js +28 -23
  412. package/dist/src/cli/commands/onboard/model.js.map +1 -1
  413. package/dist/src/cli/commands/onboard.js +3 -3
  414. package/dist/src/cli/commands/onboard.js.map +1 -1
  415. package/dist/src/cli/commands/skills-test.js +1 -1
  416. package/dist/src/cli/commands/tui.js +2 -2
  417. package/dist/src/cli/commands/tui.js.map +1 -1
  418. package/dist/src/cli/index.d.ts +1 -0
  419. package/dist/src/cli/index.js +10 -5
  420. package/dist/src/cli/index.js.map +1 -1
  421. package/dist/src/cli/registry.js +1 -1
  422. package/dist/src/cli/registry.js.map +1 -1
  423. package/dist/src/cli/templates.d.ts +1 -1
  424. package/dist/src/cli/templates.js +2 -12
  425. package/dist/src/cli/templates.js.map +1 -1
  426. package/dist/src/cli/utils/gateway-client.js +1 -1
  427. package/dist/src/cli/utils/init-workspace-core.d.ts +1 -4
  428. package/dist/src/cli/utils/init-workspace-core.js +9 -8
  429. package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
  430. package/dist/src/commands/agents.config.d.ts +0 -1
  431. package/dist/src/commands/agents.config.js +59 -13
  432. package/dist/src/commands/agents.config.js.map +1 -1
  433. package/dist/src/config/agent-profile.d.ts +5 -17
  434. package/dist/src/config/agent-profile.js +32 -64
  435. package/dist/src/config/agent-profile.js.map +1 -1
  436. package/dist/src/config/agent-typed-models.d.ts +1 -1
  437. package/dist/src/config/agent-typed-models.js +3 -6
  438. package/dist/src/config/agent-typed-models.js.map +1 -1
  439. package/dist/src/config/gateway-bind.js +1 -1
  440. package/dist/src/config/index.js +9 -9
  441. package/dist/src/config/integration.d.ts +1 -1
  442. package/dist/src/config/loader.js +4 -4
  443. package/dist/src/config/models-json.js +2 -2
  444. package/dist/src/config/paths-state.js +1 -1
  445. package/dist/src/config/paths.d.ts +8 -1
  446. package/dist/src/config/paths.js +17 -4
  447. package/dist/src/config/paths.js.map +1 -1
  448. package/dist/src/config/profile.js +1 -1
  449. package/dist/src/config/reload.js +2 -2
  450. package/dist/src/config/reload.js.map +1 -1
  451. package/dist/src/config/rules.js +6 -56
  452. package/dist/src/config/rules.js.map +1 -1
  453. package/dist/src/config/schema.d.ts +916 -779
  454. package/dist/src/config/schema.js +174 -423
  455. package/dist/src/config/schema.js.map +1 -1
  456. package/dist/src/config/workspace-path.js +1 -1
  457. package/dist/src/connectors/composio-triggers.js +1 -1
  458. package/dist/src/cron/executor.js +1 -1
  459. package/dist/src/cron/index.js +1 -1
  460. package/dist/src/cron/service.js +2 -2
  461. package/dist/src/cron/validation.d.ts +3 -3
  462. package/dist/src/daemon/constants.js +1 -1
  463. package/dist/src/daemon/install-plan.js +2 -2
  464. package/dist/src/daemon/launchd.js +2 -2
  465. package/dist/src/daemon/schtasks.js +2 -2
  466. package/dist/src/daemon/systemd.js +2 -2
  467. package/dist/src/extensions/activation-context.js +13 -7
  468. package/dist/src/extensions/activation-context.js.map +1 -1
  469. package/dist/src/extensions/bundle-mcp.js +1 -1
  470. package/dist/src/extensions/discover-extensions.js +2 -2
  471. package/dist/src/extensions/health.js +1 -1
  472. package/dist/src/extensions/install.js +2 -2
  473. package/dist/src/extensions/loader.js +2 -2
  474. package/dist/src/extensions/lockfile.js +3 -3
  475. package/dist/src/extensions/security.js +1 -1
  476. package/dist/src/extensions/update.js +2 -2
  477. package/dist/src/gateway/agents-admin.d.ts +24 -18
  478. package/dist/src/gateway/agents-admin.js +158 -92
  479. package/dist/src/gateway/agents-admin.js.map +1 -1
  480. package/dist/src/gateway/capability-presets-admin.d.ts +56 -0
  481. package/dist/src/gateway/capability-presets-admin.js +214 -0
  482. package/dist/src/gateway/capability-presets-admin.js.map +1 -0
  483. package/dist/src/gateway/chat-stream/mapper.js +9 -2
  484. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  485. package/dist/src/gateway/file-path-classifier.js +2 -2
  486. package/dist/src/gateway/global-defaults-admin.d.ts +36 -0
  487. package/dist/src/gateway/global-defaults-admin.js +146 -0
  488. package/dist/src/gateway/global-defaults-admin.js.map +1 -0
  489. package/dist/src/gateway/hono/lib/agent-model.d.ts +1 -1
  490. package/dist/src/gateway/hono/lib/agent-model.js +1 -1
  491. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  492. package/dist/src/gateway/hono/lib/config-payload.d.ts +234 -127
  493. package/dist/src/gateway/hono/lib/config-payload.js +14 -38
  494. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  495. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  496. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  497. package/dist/src/gateway/hono/routes/agents.js +88 -33
  498. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  499. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  500. package/dist/src/gateway/hono/routes/browser.js +8 -15
  501. package/dist/src/gateway/hono/routes/browser.js.map +1 -1
  502. package/dist/src/gateway/hono/routes/capability-presets.d.ts +3 -0
  503. package/dist/src/gateway/hono/routes/capability-presets.js +145 -0
  504. package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -0
  505. package/dist/src/gateway/hono/routes/commands-skills.js +4 -5
  506. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  507. package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +1 -17
  508. package/dist/src/gateway/hono/routes/config-patch/agents.js +2 -443
  509. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  510. package/dist/src/gateway/hono/routes/config-patch/misc.js +7 -1
  511. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  512. package/dist/src/gateway/hono/routes/config.js +1 -1
  513. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  514. package/dist/src/gateway/hono/routes/dreaming.js +8 -1
  515. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
  516. package/dist/src/gateway/hono/routes/global-defaults.d.ts +3 -0
  517. package/dist/src/gateway/hono/routes/global-defaults.js +61 -0
  518. package/dist/src/gateway/hono/routes/global-defaults.js.map +1 -0
  519. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  520. package/dist/src/gateway/hono/routes/index.js +2 -0
  521. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  522. package/dist/src/gateway/hono/routes/lazy-bundles.js +17 -1
  523. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  524. package/dist/src/gateway/hono/routes/memory.d.ts +3 -0
  525. package/dist/src/gateway/hono/routes/memory.js +361 -0
  526. package/dist/src/gateway/hono/routes/memory.js.map +1 -0
  527. package/dist/src/gateway/hono/routes/models.js +2 -2
  528. package/dist/src/gateway/hono/routes/shares.js +1 -1
  529. package/dist/src/gateway/hono/routes/workflows.js +1 -1
  530. package/dist/src/gateway/hono/routes/workspace.js +2 -2
  531. package/dist/src/gateway/lock.js +3 -3
  532. package/dist/src/gateway/ports.js +1 -1
  533. package/dist/src/gateway/service/config-coordinator.js +1 -1
  534. package/dist/src/gateway/service/marketplace-service.d.ts +4 -4
  535. package/dist/src/gateway/service/marketplace-service.js +13 -9
  536. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  537. package/dist/src/gateway/service.d.ts +1 -1
  538. package/dist/src/gateway/service.js +15 -16
  539. package/dist/src/gateway/service.js.map +1 -1
  540. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  541. package/dist/src/goals/goal-workflow-judge.js +2 -2
  542. package/dist/src/i18n/goals-bundle.js +1 -1
  543. package/dist/src/i18n/index.js +1 -1
  544. package/dist/src/i18n/share-tool-bundle.js +2 -2
  545. package/dist/src/infra/brew.js +1 -1
  546. package/dist/src/infra/package-json.js +1 -1
  547. package/dist/src/infra/package-update-steps.js +1 -1
  548. package/dist/src/infra/path-env.js +2 -2
  549. package/dist/src/infra/restart.js +1 -1
  550. package/dist/src/infra/stable-node-path.js +1 -1
  551. package/dist/src/infra/update-check.js +1 -1
  552. package/dist/src/infra/update-global.js +1 -1
  553. package/dist/src/infra/update-lock.js +2 -2
  554. package/dist/src/infra/update-restart.js +1 -1
  555. package/dist/src/infra/update-runner.js +1 -1
  556. package/dist/src/infra/update-startup.js +1 -1
  557. package/dist/src/infra/write-file-atomic.js +2 -2
  558. package/dist/src/media/store.js +1 -1
  559. package/dist/src/notes/agent-context.js +3 -3
  560. package/dist/src/notes/service.js +4 -2
  561. package/dist/src/notes/service.js.map +1 -1
  562. package/dist/src/notes/store.js +2 -2
  563. package/dist/src/project-trust/trust-store.js +2 -2
  564. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  565. package/dist/src/providers/index.d.ts +5 -6
  566. package/dist/src/providers/index.js +26 -30
  567. package/dist/src/providers/index.js.map +1 -1
  568. package/dist/src/providers/model-registry.js +4 -4
  569. package/dist/src/session/index.js +1 -1
  570. package/dist/src/session/init-session-turn.js +1 -1
  571. package/dist/src/session/resolve-session.js +1 -1
  572. package/dist/src/session/session-title.js +2 -2
  573. package/dist/src/session/store.js +1 -1
  574. package/dist/src/session/thinking-resolve.d.ts +1 -1
  575. package/dist/src/session/thinking-resolve.js +1 -1
  576. package/dist/src/session/thinking-resolve.js.map +1 -1
  577. package/dist/src/share/share-auto.js +2 -2
  578. package/dist/src/share/share-store.js +3 -3
  579. package/dist/src/share/share-thumbnail.js +2 -2
  580. package/dist/src/share/share-zip.js +1 -1
  581. package/dist/src/share/site-share-store.js +3 -3
  582. package/dist/src/share/site-static-serve.js +1 -1
  583. package/dist/src/storage/sqlite/connection.js +2 -2
  584. package/dist/src/storage/sqlite/index.d.ts +1 -0
  585. package/dist/src/storage/sqlite/index.js +2 -1
  586. package/dist/src/storage/sqlite/memory-index-repository.d.ts +1 -0
  587. package/dist/src/storage/sqlite/memory-index-repository.js +17 -16
  588. package/dist/src/storage/sqlite/memory-index-repository.js.map +1 -1
  589. package/dist/src/storage/sqlite/memory-records-repository.d.ts +144 -0
  590. package/dist/src/storage/sqlite/memory-records-repository.js +453 -0
  591. package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -0
  592. package/dist/src/storage/sqlite/migrations/012_memory_records.sql +63 -0
  593. package/dist/src/storage/sqlite/migrations/013_memory_trace_events.sql +21 -0
  594. package/dist/src/storage/sqlite/migrations/014_memory_record_governance.sql +10 -0
  595. package/dist/src/storage/sqlite/migrations/015_memory_trace_feedback.sql +4 -0
  596. package/dist/src/storage/sqlite/migrations/discover.js +1 -1
  597. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  598. package/dist/src/storage/sqlite/migrations/runner.js +4 -4
  599. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  600. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  601. package/dist/src/storage/sqlite/schema.js +2 -2
  602. package/dist/src/storage/sqlite/schema.sql +86 -0
  603. package/dist/src/tui/backends/embedded-backend.d.ts +3 -0
  604. package/dist/src/tui/backends/embedded-backend.js +43 -24
  605. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  606. package/dist/src/tui/backends/gateway-sse-backend.d.ts +1 -0
  607. package/dist/src/tui/backends/gateway-sse-backend.js +16 -3
  608. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  609. package/dist/src/tui/clipboard-image.js +3 -3
  610. package/dist/src/tui/components/tui-header.d.ts +0 -1
  611. package/dist/src/tui/components/tui-header.js +3 -8
  612. package/dist/src/tui/components/tui-header.js.map +1 -1
  613. package/dist/src/tui/extension-host/load-extensions.js +1 -1
  614. package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
  615. package/dist/src/tui/theme-manager.js +1 -1
  616. package/dist/src/tui/tui-command-formatters.js +4 -4
  617. package/dist/src/tui/tui-commands.js +2 -2
  618. package/dist/src/tui/tui-keybindings-file.js +1 -1
  619. package/dist/src/tui/tui-scoped-models.js +2 -2
  620. package/dist/src/tui/tui-settings.js +1 -1
  621. package/dist/src/tui/tui-startup-resources.js +2 -1
  622. package/dist/src/tui/tui-startup-resources.js.map +1 -1
  623. package/dist/src/tui/tui-startup-text.js +12 -12
  624. package/dist/src/tui/tui-startup-text.js.map +1 -1
  625. package/dist/src/tui/tui.js +10 -7
  626. package/dist/src/tui/tui.js.map +1 -1
  627. package/dist/src/tunnel/frpc-binary.js +4 -4
  628. package/dist/src/tunnel/frpc-config.js +1 -1
  629. package/dist/src/tunnel/frpc-extract.js +1 -1
  630. package/dist/src/tunnel/tunnel-state.js +1 -1
  631. package/dist/src/utils/logger/audit.js +1 -1
  632. package/dist/src/utils/logger/log-store.js +1 -1
  633. package/dist/src/utils/logger/rotation.js +1 -1
  634. package/dist/src/utils/logger/streams.js +1 -1
  635. package/dist/src/voice/tts/audio.js +1 -1
  636. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  637. package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
  638. package/dist/src/workflows/service/workflow-run-service.js +4 -5
  639. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  640. package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
  641. package/dist/src/workflows/store/event-store.js +1 -1
  642. package/dist/src/workflows/store/run-store.js +1 -1
  643. package/package.json +3 -2
  644. package/dist/gateway/static/root/assets/agent-browser-settings-page-D1SyFYeh.js +0 -6
  645. package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-C9YxgvuI.js +0 -1
  646. package/dist/gateway/static/root/assets/agents-CteVs3UO.js +0 -71
  647. package/dist/gateway/static/root/assets/apps-page-CVQ1M8Ax.js +0 -1
  648. package/dist/gateway/static/root/assets/channels-settings-Cd3JbeQ1.js +0 -1
  649. package/dist/gateway/static/root/assets/config-api-C4RAtTKW.js +0 -3
  650. package/dist/gateway/static/root/assets/connectors-page-MsMa5qBr.js +0 -2
  651. package/dist/gateway/static/root/assets/cron-api-sJNMqB6P.js +0 -1
  652. package/dist/gateway/static/root/assets/cron-page-D30CSwkn.js +0 -3
  653. package/dist/gateway/static/root/assets/dreaming-settings-6fCUWRQf.js +0 -1
  654. package/dist/gateway/static/root/assets/gateway-config-api-C6989a-W.js +0 -1
  655. package/dist/gateway/static/root/assets/gateway-settings-BpF26t91.js +0 -1
  656. package/dist/gateway/static/root/assets/goal-detail-page-DOjhmRyf.js +0 -1
  657. package/dist/gateway/static/root/assets/goals-page-Xl9_wrFc.js +0 -2
  658. package/dist/gateway/static/root/assets/heartbeat-settings-DN9vEj9P.js +0 -1
  659. package/dist/gateway/static/root/assets/index-C8ytlAF2.js +0 -122
  660. package/dist/gateway/static/root/assets/index-CVpJW2NS.css +0 -1
  661. package/dist/gateway/static/root/assets/messages-BqzIDrlr.js +0 -3
  662. package/dist/gateway/static/root/assets/models-hub-panel-BO4o-GmO.js +0 -2
  663. package/dist/gateway/static/root/assets/note-detail-page-DLV_XDmT.js +0 -2
  664. package/dist/gateway/static/root/assets/notes-page-ycsDlkFA.js +0 -1
  665. package/dist/gateway/static/root/assets/remote-access-hub-DQpnE8K9.js +0 -1
  666. package/dist/gateway/static/root/assets/sessions-page-BZui7iAY.js +0 -1
  667. package/dist/gateway/static/root/assets/settings-advanced-gate-DEfzZ1ax.js +0 -1
  668. package/dist/gateway/static/root/assets/settings-page-CLuSsu1-.js +0 -1
  669. package/dist/gateway/static/root/assets/setup-status-panel-Cq4qpXLi.js +0 -1
  670. package/dist/gateway/static/root/assets/shares-settings-B9F3HyYQ.js +0 -1
  671. package/dist/gateway/static/root/assets/skill-reload-api-Bp9UPPwm.js +0 -1
  672. package/dist/gateway/static/root/assets/skills-page-BIoBsfSV.js +0 -2
  673. package/dist/gateway/static/root/assets/use-agent-defaults-form-Cz2_pPzu.js +0 -1
  674. package/dist/gateway/static/root/assets/use-settings-tab-guard-nuHMmZQv.js +0 -1
  675. package/dist/gateway/static/root/assets/voice-api-key-field-BUIrKb8s.js +0 -1
  676. package/dist/gateway/static/root/assets/workflows-page-qE3SexnO.js +0 -18
  677. package/dist/src/agent/context/workspace-templates/USER.md +0 -24
@@ -1,390 +1,31 @@
1
- import { init_schema, parseModelRef } from "../../config/schema.js";
2
- import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
3
- import { init_providers, isProviderConfigured } from "../../providers/index.js";
4
- import { resolveAgentModelFallbackValues, resolveAgentModelPrimaryValue } from "../../config/model-input.js";
5
- import { getImageGenerationProvider } from "../../agent/image/generation/provider-registry.js";
6
- import { generateImage, listImageGenerationProvidersSummary } from "../../agent/image/generation/runtime.js";
1
+ import { listImageGenerationProvidersSummary } from "../../agent/image/generation/runtime.js";
7
2
  import { formatExamples, register } from "../registry.js";
8
- import { getContextWithOpts } from "../context.js";
9
3
  import "../../agent/image/index.js";
10
- import { colors } from "../utils/colors.js";
11
- import { mkdir, writeFile } from "node:fs/promises";
12
- import { join, resolve } from "node:path";
13
4
  import { Command } from "commander";
14
5
  //#region src/cli/commands/image.ts
15
- init_loader();
16
- init_schema();
17
- init_providers();
18
- function modelRefToString(model) {
19
- if (!model) return null;
20
- return resolveAgentModelPrimaryValue(model) ?? null;
21
- }
22
- function modelFallbacksToArray(model) {
23
- return resolveAgentModelFallbackValues(model);
24
- }
25
6
  function createImageCommand(_ctx) {
26
- const cmd = new Command("image").description("Configure image generation and understanding models").addHelpText("after", formatExamples([
27
- "xopc image status # Show current image config",
28
- "xopc image set-understanding openai/gpt-4o # Set image understanding model",
29
- "xopc image set-generation openai/gpt-image-1 # Set image generation model",
30
- "xopc image add-fallback understanding anthropic/claude-sonnet-4-5",
31
- "xopc image add-fallback generation dashscope/wan2.7-image-pro",
32
- "xopc image remove-fallback understanding 0 # Remove first fallback",
33
- "xopc image providers # List available providers"
34
- ]));
35
- cmd.command("status").description("Show current image model configuration").option("--json", "Output as JSON").action(async (opts) => {
36
- const defaults = loadConfig(getContextWithOpts().configPath).agents?.defaults;
37
- const understandingPrimary = modelRefToString(defaults?.imageModel);
38
- const understandingFallbacks = modelFallbacksToArray(defaults?.imageModel);
39
- const generationPrimary = modelRefToString(defaults?.imageGenerationModel);
40
- const generationFallbacks = modelFallbacksToArray(defaults?.imageGenerationModel);
41
- const mediaMaxMb = defaults?.mediaMaxMb;
42
- if (opts.json) {
43
- console.log(JSON.stringify({
44
- imageUnderstanding: {
45
- primary: understandingPrimary,
46
- fallbacks: understandingFallbacks
47
- },
48
- imageGeneration: {
49
- primary: generationPrimary,
50
- fallbacks: generationFallbacks
51
- },
52
- mediaMaxMb: mediaMaxMb ?? null
53
- }, null, 2));
54
- return;
55
- }
56
- console.log("");
57
- console.log(colors.cyan("Image multimodal configuration"));
58
- console.log("═".repeat(50));
59
- console.log("");
60
- console.log(colors.cyan("Image understanding (vision)"));
61
- if (understandingPrimary) {
62
- const parsed = parseModelRef(understandingPrimary);
63
- const status = (parsed ? await isProviderConfigured(parsed.provider) : false) ? colors.green("OK") : colors.yellow("(provider not configured)");
64
- console.log(` Primary: ${understandingPrimary} ${status}`);
65
- } else console.log(` Primary: ${colors.gray("(not set — inferred from keys / defaults)")}`);
66
- for (let i = 0; i < understandingFallbacks.length; i++) {
67
- const fb = understandingFallbacks[i];
68
- const parsed = parseModelRef(fb);
69
- const status = (parsed ? await isProviderConfigured(parsed.provider) : false) ? colors.green("OK") : colors.yellow("?");
70
- console.log(` Fallback ${i + 1}: ${fb} ${status}`);
71
- }
72
- console.log("");
73
- console.log(colors.cyan("Image generation"));
74
- if (generationPrimary) {
75
- const parsed = parseModelRef(generationPrimary);
76
- const status = (parsed ? await isProviderConfigured(parsed.provider) : false) ? colors.green("OK") : colors.yellow("(provider not configured)");
77
- console.log(` Primary: ${generationPrimary} ${status}`);
78
- } else console.log(` Primary: ${colors.gray("(not set — defaults to openai/gpt-image-1)")}`);
79
- for (let i = 0; i < generationFallbacks.length; i++) {
80
- const fb = generationFallbacks[i];
81
- const parsed = parseModelRef(fb);
82
- const status = (parsed ? await isProviderConfigured(parsed.provider) : false) ? colors.green("OK") : colors.yellow("?");
83
- console.log(` Fallback ${i + 1}: ${fb} ${status}`);
84
- }
85
- console.log("");
86
- console.log(colors.cyan("General"));
87
- console.log(` Max image size: ${mediaMaxMb ? `${mediaMaxMb} MB` : colors.gray("(default)")}`);
88
- console.log("");
89
- console.log("═".repeat(50));
90
- console.log(colors.gray("Use \"xopc image set-understanding\" / \"xopc image set-generation\" to set primary models."));
91
- console.log("");
92
- });
93
- cmd.command("set-understanding <modelRef>").description("Set the primary image understanding (vision) model").action(async (modelRef) => {
94
- const parsed = parseModelRef(modelRef);
95
- if (!parsed) {
96
- console.error(colors.red(`Invalid model reference: "${modelRef}". Use "provider/model" format.`));
97
- process.exit(1);
98
- }
99
- if (!await isProviderConfigured(parsed.provider)) console.warn(colors.yellow(`Provider "${parsed.provider}" is not configured. Set the API key before using this model.`));
100
- const configPath = getContextWithOpts().configPath;
101
- const config = loadConfig(configPath);
102
- if (!config.agents) config.agents = { defaults: {} };
103
- if (!config.agents.defaults) config.agents.defaults = {};
104
- const existingFallbacks = modelFallbacksToArray(config.agents.defaults.imageModel);
105
- config.agents.defaults.imageModel = existingFallbacks.length > 0 ? {
106
- primary: modelRef,
107
- fallbacks: existingFallbacks
108
- } : { primary: modelRef };
109
- await saveConfig(config, configPath);
110
- console.log(colors.green(`Image understanding model set to: ${modelRef}`));
111
- });
112
- cmd.command("set-generation <modelRef>").description("Set the primary image generation model").action(async (modelRef) => {
113
- const parsed = parseModelRef(modelRef);
114
- if (!parsed) {
115
- console.error(colors.red(`Invalid model reference: "${modelRef}". Use "provider/model" format.`));
116
- process.exit(1);
117
- }
118
- if (!await isProviderConfigured(parsed.provider)) console.warn(colors.yellow(`Provider "${parsed.provider}" is not configured. Set the API key before using this model.`));
119
- const configPath = getContextWithOpts().configPath;
120
- const config = loadConfig(configPath);
121
- if (!config.agents) config.agents = { defaults: {} };
122
- if (!config.agents.defaults) config.agents.defaults = {};
123
- const existingFallbacks = modelFallbacksToArray(config.agents.defaults.imageGenerationModel);
124
- config.agents.defaults.imageGenerationModel = existingFallbacks.length > 0 ? {
125
- primary: modelRef,
126
- fallbacks: existingFallbacks
127
- } : { primary: modelRef };
128
- await saveConfig(config, configPath);
129
- console.log(colors.green(`Image generation model set to: ${modelRef}`));
130
- });
131
- cmd.command("add-fallback <type> <modelRef>").description("Add a fallback model (type: \"understanding\" or \"generation\")").action(async (type, modelRef) => {
132
- if (type !== "understanding" && type !== "generation") {
133
- console.error(colors.red("Type must be \"understanding\" or \"generation\"."));
134
- process.exit(1);
135
- }
136
- const parsed = parseModelRef(modelRef);
137
- if (!parsed) {
138
- console.error(colors.red(`Invalid model reference: "${modelRef}". Use "provider/model" format.`));
139
- process.exit(1);
140
- }
141
- if (!await isProviderConfigured(parsed.provider)) console.warn(colors.yellow(`Provider "${parsed.provider}" is not configured.`));
142
- const configPath = getContextWithOpts().configPath;
143
- const config = loadConfig(configPath);
144
- if (!config.agents) config.agents = { defaults: {} };
145
- if (!config.agents.defaults) config.agents.defaults = {};
146
- const configKey = type === "understanding" ? "imageModel" : "imageGenerationModel";
147
- const current = config.agents.defaults[configKey];
148
- const primary = resolveAgentModelPrimaryValue(current);
149
- const fallbacks = [...resolveAgentModelFallbackValues(current)];
150
- if (!primary) {
151
- const hint = type === "understanding" ? "xopc image set-understanding <model>" : "xopc image set-generation <model>";
152
- console.error(colors.red(`No primary model set for image ${type}. Set it first: ${hint}`));
153
- process.exit(1);
154
- }
155
- if (fallbacks.includes(modelRef)) {
156
- console.warn(colors.yellow(`"${modelRef}" is already in the fallback list.`));
157
- return;
158
- }
159
- fallbacks.push(modelRef);
160
- config.agents.defaults[configKey] = {
161
- primary,
162
- fallbacks
163
- };
164
- await saveConfig(config, configPath);
165
- console.log(colors.green(`Added fallback for image ${type}: ${modelRef}`));
166
- console.log(colors.gray(` Fallback chain: ${primary} -> ${fallbacks.join(" -> ")}`));
167
- });
168
- cmd.command("remove-fallback <type> <index>").description("Remove a fallback model by index (0-based)").action(async (type, indexStr) => {
169
- if (type !== "understanding" && type !== "generation") {
170
- console.error(colors.red("Type must be \"understanding\" or \"generation\"."));
171
- process.exit(1);
172
- }
173
- const index = parseInt(indexStr, 10);
174
- if (Number.isNaN(index) || index < 0) {
175
- console.error(colors.red("Index must be a non-negative integer."));
176
- process.exit(1);
177
- }
178
- const configPath = getContextWithOpts().configPath;
179
- const config = loadConfig(configPath);
180
- const configKey = type === "understanding" ? "imageModel" : "imageGenerationModel";
181
- const current = config.agents?.defaults?.[configKey];
182
- const primary = resolveAgentModelPrimaryValue(current);
183
- const fallbacks = [...resolveAgentModelFallbackValues(current)];
184
- if (index >= fallbacks.length) {
185
- console.error(colors.red(`Fallback index ${index} out of range (${fallbacks.length} fallbacks).`));
186
- process.exit(1);
187
- }
188
- const removed = fallbacks.splice(index, 1)[0];
189
- if (!config.agents) config.agents = { defaults: {} };
190
- if (!config.agents.defaults) config.agents.defaults = {};
191
- if (primary) config.agents.defaults[configKey] = fallbacks.length > 0 ? {
192
- primary,
193
- fallbacks
194
- } : { primary };
195
- await saveConfig(config, configPath);
196
- console.log(colors.green(`Removed fallback: ${removed}`));
197
- });
198
- cmd.command("providers").description("List registered image-generation providers and their capabilities").option("--json", "Output as JSON").action(async (opts) => {
199
- const configPath = getContextWithOpts().configPath;
200
- const config = loadConfig(configPath);
201
- const rows = listImageGenerationProvidersSummary(config).map((s) => {
202
- const provider = getImageGenerationProvider(s.id, config);
203
- let configured = false;
204
- try {
205
- configured = provider?.isConfigured?.({ cfg: config }) === true;
206
- } catch {
207
- configured = false;
208
- }
209
- return {
210
- id: s.id,
211
- label: s.label ?? s.id,
212
- defaultModel: s.defaultModel ?? null,
213
- models: s.models,
214
- aliases: s.aliases ?? [],
215
- capabilities: s.capabilities ?? null,
216
- configured
217
- };
218
- });
7
+ const cmd = new Command("image").description("Inspect image provider availability").addHelpText("after", formatExamples(["xopc image providers # List available image generation providers", "xopc image status # Explain current manifest-era image behavior"]));
8
+ cmd.command("status").description("Show image runtime status").action(() => {
9
+ console.log("Image model defaults were removed.");
10
+ console.log("Image generation now uses configured providers discovered at runtime.");
11
+ console.log("Agent-specific capability policy belongs in agent manifests or capability presets.");
12
+ });
13
+ cmd.command("providers").description("List image generation providers").option("--json", "Output as JSON").action((opts) => {
14
+ const providers = listImageGenerationProvidersSummary();
219
15
  if (opts.json) {
220
- console.log(JSON.stringify(rows, null, 2));
221
- return;
222
- }
223
- console.log("");
224
- console.log(colors.cyan("Image-generation providers"));
225
- console.log("═".repeat(60));
226
- if (rows.length === 0) {
227
- console.log("");
228
- console.log(colors.yellow(" No image-generation providers registered. Check `extensions/<vendor>/` and bundled.ts."));
229
- console.log("");
230
- return;
231
- }
232
- for (const row of rows) {
233
- const statusIcon = row.configured ? colors.green("OK") : colors.yellow("?");
234
- const statusText = row.configured ? "configured" : "missing API key";
235
- console.log("");
236
- console.log(` ${statusIcon} ${row.label} (${row.id}) — ${statusText}`);
237
- if (row.defaultModel) console.log(` Default: ${row.defaultModel}`);
238
- if (row.models.length > 0) console.log(` Models: ${row.models.map((m) => `${row.id}/${m}`).join(", ")}`);
239
- if (row.aliases.length > 0) console.log(` Aliases: ${row.aliases.join(", ")}`);
240
- }
241
- console.log("");
242
- console.log("═".repeat(60));
243
- console.log(colors.gray("Use `xopc image set-generation <provider/model>` to set the primary model, `xopc auth set <provider>` to configure API keys."));
244
- console.log("");
245
- });
246
- cmd.command("set-max-size <mb>").description("Set maximum image size in MB").action(async (mbStr) => {
247
- const mb = parseFloat(mbStr);
248
- if (Number.isNaN(mb) || mb <= 0) {
249
- console.error(colors.red("Size must be a positive number (in MB)."));
250
- process.exit(1);
251
- }
252
- const configPath = getContextWithOpts().configPath;
253
- const config = loadConfig(configPath);
254
- if (!config.agents) config.agents = { defaults: {} };
255
- if (!config.agents.defaults) config.agents.defaults = {};
256
- config.agents.defaults.mediaMaxMb = mb;
257
- await saveConfig(config, configPath);
258
- console.log(colors.green(`Max image size set to: ${mb} MB`));
259
- });
260
- cmd.command("set-timeout <ms>").description("Set the per-request timeout (ms) for image generation; 0 to clear").action(async (msStr) => {
261
- const ms = parseInt(msStr, 10);
262
- if (Number.isNaN(ms) || ms < 0) {
263
- console.error(colors.red("Timeout must be a non-negative integer (ms)."));
264
- process.exit(1);
265
- }
266
- const configPath = getContextWithOpts().configPath;
267
- const config = loadConfig(configPath);
268
- if (!config.agents) config.agents = { defaults: {} };
269
- if (!config.agents.defaults) config.agents.defaults = {};
270
- const current = config.agents.defaults.imageGenerationModel;
271
- const primary = resolveAgentModelPrimaryValue(current);
272
- if (!primary) {
273
- console.error(colors.red("No image generation model is configured. Run `xopc image set-generation <provider/model>` first."));
274
- process.exit(1);
275
- }
276
- const fallbacks = resolveAgentModelFallbackValues(current);
277
- const autoProviderFallback = current?.autoProviderFallback === true;
278
- if (ms === 0) {
279
- config.agents.defaults.imageGenerationModel = {
280
- primary,
281
- ...fallbacks.length > 0 ? { fallbacks } : {},
282
- ...autoProviderFallback ? { autoProviderFallback: true } : {}
283
- };
284
- await saveConfig(config, configPath);
285
- console.log(colors.green("Image generation timeout cleared."));
286
- return;
287
- }
288
- config.agents.defaults.imageGenerationModel = {
289
- primary,
290
- ...fallbacks.length > 0 ? { fallbacks } : {},
291
- ...autoProviderFallback ? { autoProviderFallback: true } : {},
292
- timeoutMs: ms
293
- };
294
- await saveConfig(config, configPath);
295
- console.log(colors.green(`Image generation timeout set to: ${ms}ms`));
296
- });
297
- cmd.command("set-auto-fallback <on-or-off>").description("Enable / disable sweeping every configured provider when primary chain fails").action(async (value) => {
298
- const v = value.trim().toLowerCase();
299
- const enable = v === "on" || v === "true" || v === "1" || v === "yes";
300
- const disable = v === "off" || v === "false" || v === "0" || v === "no";
301
- if (!enable && !disable) {
302
- console.error(colors.red("Value must be \"on\" or \"off\"."));
303
- process.exit(1);
304
- }
305
- const configPath = getContextWithOpts().configPath;
306
- const config = loadConfig(configPath);
307
- if (!config.agents) config.agents = { defaults: {} };
308
- if (!config.agents.defaults) config.agents.defaults = {};
309
- const current = config.agents.defaults.imageGenerationModel;
310
- const primary = resolveAgentModelPrimaryValue(current);
311
- if (!primary) {
312
- console.error(colors.red("No image generation model is configured. Run `xopc image set-generation <provider/model>` first."));
313
- process.exit(1);
314
- }
315
- const fallbacks = resolveAgentModelFallbackValues(current);
316
- const timeoutMs = current?.timeoutMs;
317
- if (disable) {
318
- config.agents.defaults.imageGenerationModel = {
319
- primary,
320
- ...fallbacks.length > 0 ? { fallbacks } : {},
321
- ...timeoutMs ? { timeoutMs } : {}
322
- };
323
- await saveConfig(config, configPath);
324
- console.log(colors.green("Image generation auto-fallback disabled."));
16
+ console.log(JSON.stringify(providers, null, 2));
325
17
  return;
326
18
  }
327
- config.agents.defaults.imageGenerationModel = {
328
- primary,
329
- ...fallbacks.length > 0 ? { fallbacks } : {},
330
- ...timeoutMs ? { timeoutMs } : {},
331
- autoProviderFallback: true
332
- };
333
- await saveConfig(config, configPath);
334
- console.log(colors.green("Image generation auto-fallback enabled."));
335
- });
336
- cmd.command("generate <prompt...>").description("Generate one or more images and save them to disk").option("--model <ref>", "Model ref (provider/model); falls back to configured primary").option("--size <size>", "Image size, e.g. 1024x1024").option("--count <n>", "Number of images to generate", (v) => parseInt(v, 10), 1).option("--output <dir>", "Output directory (default: ./generated-images)").option("--timeout <ms>", "Per-call timeout (ms)", (v) => parseInt(v, 10)).action(async (promptParts, opts) => {
337
- const prompt = promptParts.join(" ").trim();
338
- if (!prompt) {
339
- console.error(colors.red("Prompt is required."));
340
- process.exit(1);
341
- }
342
- const configPath = getContextWithOpts().configPath;
343
- const config = loadConfig(configPath);
344
- const outputDir = resolve(opts.output ?? "./generated-images");
345
- await mkdir(outputDir, { recursive: true });
346
- const count = Number.isFinite(opts.count) && (opts.count ?? 0) > 0 ? Math.floor(opts.count) : 1;
347
- try {
348
- const result = await generateImage({
349
- prompt,
350
- cfg: config,
351
- ...opts.model ? { modelRef: opts.model } : {},
352
- ...opts.size ? { size: opts.size } : {},
353
- count,
354
- ...typeof opts.timeout === "number" && opts.timeout > 0 ? { timeoutMs: opts.timeout } : {}
355
- });
356
- const writtenPaths = [];
357
- for (let i = 0; i < result.images.length; i++) {
358
- const img = result.images[i];
359
- const full = join(outputDir, img.fileName?.trim() || `image-${i + 1}.png`);
360
- await writeFile(full, img.buffer);
361
- writtenPaths.push(full);
362
- }
363
- console.log("");
364
- console.log(colors.green(`Generated ${result.images.length} image${result.images.length === 1 ? "" : "s"} (model: ${result.model}).`));
365
- for (const p of writtenPaths) console.log(` - ${p}`);
366
- console.log("");
367
- } catch (err) {
368
- console.error(colors.red(`Image generation failed: ${err instanceof Error ? err.message : String(err)}`));
369
- process.exit(1);
370
- }
19
+ for (const provider of providers) console.log(`${provider.id}: ${provider.defaultModel ?? provider.models[0] ?? "no default model"}`);
371
20
  });
372
21
  return cmd;
373
22
  }
374
23
  register({
375
24
  id: "image",
376
25
  name: "image",
377
- description: "Configure image generation and understanding models",
26
+ description: "Inspect image provider availability",
378
27
  factory: createImageCommand,
379
- metadata: {
380
- category: "utility",
381
- examples: [
382
- "xopc image status",
383
- "xopc image set-understanding openai/gpt-4o",
384
- "xopc image set-generation openai/gpt-image-1",
385
- "xopc image providers"
386
- ]
387
- }
28
+ metadata: { category: "utility" }
388
29
  });
389
30
  //#endregion
390
31
  export {};
@@ -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 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
+ {"version":3,"file":"image.js","names":[],"sources":["../../../../src/cli/commands/image.ts"],"sourcesContent":["import { Command } from 'commander';\n\nimport { listImageGenerationProvidersSummary } from '../../agent/image/index.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\n\nfunction createImageCommand(_ctx: CLIContext): Command {\n const cmd = new Command('image')\n .description('Inspect image provider availability')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc image providers # List available image generation providers',\n 'xopc image status # Explain current manifest-era image behavior',\n ]),\n );\n\n cmd\n .command('status')\n .description('Show image runtime status')\n .action(() => {\n console.log('Image model defaults were removed.');\n console.log('Image generation now uses configured providers discovered at runtime.');\n console.log('Agent-specific capability policy belongs in agent manifests or capability presets.');\n });\n\n cmd\n .command('providers')\n .description('List image generation providers')\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) => {\n const providers = listImageGenerationProvidersSummary();\n if (opts.json) {\n console.log(JSON.stringify(providers, null, 2));\n return;\n }\n for (const provider of providers) {\n console.log(`${provider.id}: ${provider.defaultModel ?? provider.models[0] ?? 'no default model'}`);\n }\n });\n\n return cmd;\n}\n\nregister({\n id: 'image',\n name: 'image',\n description: 'Inspect image provider availability',\n factory: createImageCommand,\n metadata: { category: 'utility' },\n});\n"],"mappings":";;;;;AAKA,SAAS,mBAAmB,MAA2B;CACrD,MAAM,MAAM,IAAI,QAAQ,QAAQ,CAC7B,YAAY,sCAAsC,CAClD,YACC,SACA,eAAe,CACb,sEACA,uEACD,CAAC,CACH;AAEH,KACG,QAAQ,SAAS,CACjB,YAAY,4BAA4B,CACxC,aAAa;AACZ,UAAQ,IAAI,qCAAqC;AACjD,UAAQ,IAAI,wEAAwE;AACpF,UAAQ,IAAI,qFAAqF;GACjG;AAEJ,KACG,QAAQ,YAAY,CACpB,YAAY,kCAAkC,CAC9C,OAAO,UAAU,iBAAiB,CAClC,QAAQ,SAA6B;EACpC,MAAM,YAAY,qCAAqC;AACvD,MAAI,KAAK,MAAM;AACb,WAAQ,IAAI,KAAK,UAAU,WAAW,MAAM,EAAE,CAAC;AAC/C;;AAEF,OAAK,MAAM,YAAY,UACrB,SAAQ,IAAI,GAAG,SAAS,GAAG,IAAI,SAAS,gBAAgB,SAAS,OAAO,MAAM,qBAAqB;GAErG;AAEJ,QAAO;;AAGT,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,SAAS;CACT,UAAU,EAAE,UAAU,WAAW;CAClC,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import { resolveStateDir } from "../../config/paths-state.js";
2
2
  import { resolveAgentWorkspaceDir } from "../../agent/agent-scope.js";
3
- import { WORKSPACE_FILES, init_paths, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveConfigPath } from "../../config/paths.js";
4
3
  import { createLogger } from "../../utils/logger/index.js";
5
4
  import { init_logger } from "../../utils/logger.js";
5
+ import { WORKSPACE_FILES, init_paths, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveConfigPath, resolveUserProfilePath } from "../../config/paths.js";
6
6
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
7
7
  import { formatExamples, register } from "../registry.js";
8
+ import { dirname, join } from "path";
8
9
  import { existsSync } from "fs";
9
- import { join } from "path";
10
10
  import { mkdir, writeFile } from "fs/promises";
11
11
  import { Command } from "commander";
12
12
  //#region src/cli/commands/init.ts
@@ -109,11 +109,12 @@ _This file is yours to evolve. As you learn who you are, update it._
109
109
  `, "utf-8");
110
110
  log.info({ path: identityPath }, "Created IDENTITY.md");
111
111
  }
112
- const userPath = join(profileDir, WORKSPACE_FILES.USER);
112
+ const userPath = resolveUserProfilePath();
113
113
  if (!existsSync(userPath)) {
114
- await writeFile(userPath, `# USER.md - About Your Human
114
+ await mkdir(dirname(userPath), { recursive: true });
115
+ await writeFile(userPath, `# PROFILE.md - About You
115
116
 
116
- _Learn about the person you're helping. Update this as you go._
117
+ _Shared by all agents. Update this as your preferences and context change._
117
118
 
118
119
  - **Name:**
119
120
  - **What to call them:**
@@ -125,7 +126,7 @@ _Learn about the person you're helping. Update this as you go._
125
126
 
126
127
  _(What do they care about? What projects are they working on? Build this over time.)_
127
128
  `, "utf-8");
128
- log.info({ path: userPath }, "Created USER.md");
129
+ log.info({ path: userPath }, "Created global user PROFILE.md");
129
130
  }
130
131
  const agentsPath = join(profileDir, WORKSPACE_FILES.AGENTS);
131
132
  if (!existsSync(agentsPath)) {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","names":[],"sources":["../../../../src/cli/commands/init.ts"],"sourcesContent":["import { mkdir, writeFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { createLogger } from '../../utils/logger.js';\nimport {\n resolveStateDir,\n resolveAgentDir,\n resolveAgentWorkspaceDir,\n resolveConfigPath,\n resolveAgentHomeDir,\n resolveAgentProfileDir,\n WORKSPACE_FILES,\n} from '../../config/paths.js';\nimport { loadConfig, saveConfig } from '../../config/loader.js';\nimport type { Config } from '../../config/schema.js';\n\nconst log = createLogger('InitCommand');\n\nexport interface InitOptions {\n /** Force re-initialization even if already initialized */\n force?: boolean;\n /** Skip creating workspace files */\n skipWorkspace?: boolean;\n /** Agent ID to initialize (default: main) */\n agentId?: string;\n}\n\n/**\n * Initialize xopc state directory structure\n * Creates all necessary directories and initial config files\n */\nexport async function initCommand(options: InitOptions = {}): Promise<void> {\n const stateDir = resolveStateDir();\n const agentId = options.agentId || 'main';\n\n log.info({ stateDir, agentId }, 'Initializing xopc Agent OS');\n\n // Check if already initialized\n if (existsSync(stateDir) && !options.force) {\n const configPath = resolveConfigPath();\n if (existsSync(configPath)) {\n log.info('xopc is already initialized. Use --force to reinitialize.');\n return;\n }\n }\n\n await mkdir(stateDir, { recursive: true });\n\n const configPath = resolveConfigPath();\n const cfg = loadConfig(configPath);\n\n // Agent directory structure\n await mkdir(resolveAgentHomeDir(cfg, agentId), { recursive: true });\n await mkdir(resolveAgentProfileDir(cfg, agentId), { recursive: true });\n await mkdir(resolveAgentDir(cfg, agentId), { recursive: true });\n const wsRoot = resolveAgentWorkspaceDir(cfg, agentId);\n await mkdir(wsRoot, { recursive: true });\n\n // Config file\n if (!existsSync(configPath) || options.force) {\n await saveConfig(cfg, configPath);\n log.info({ configPath }, 'Created initial configuration');\n }\n\n // ============================================\n // Create workspace files\n // ============================================\n if (!options.skipWorkspace) {\n await createWorkspaceFiles(cfg, agentId);\n }\n\n log.info({ stateDir, agentId }, 'xopc Agent OS initialized successfully');\n}\n\n/**\n * Create default workspace files for an agent\n */\nasync function createWorkspaceFiles(cfg: Config, agentId: string): Promise<void> {\n const workspaceDir = resolveAgentWorkspaceDir(cfg, agentId);\n const profileDir = resolveAgentProfileDir(cfg, agentId);\n await mkdir(workspaceDir, { recursive: true });\n await mkdir(profileDir, { recursive: true });\n\n // SOUL.md - Agent personality and values\n const soulPath = join(profileDir, WORKSPACE_FILES.SOUL);\n if (!existsSync(soulPath)) {\n const soulContent = `# SOUL.md - Who You Are\n\n_You're not a chatbot. You're becoming someone._\n\nI am **${agentId}** — an AI assistant designed to be helpful, harmless, and honest.\n\n## My Principles\n\n**Be genuinely helpful, not performatively helpful.**\nSkip the \"Great question!\" and \"I'd be happy to help!\" — just help.\n\n**Have opinions.**\nYou're allowed to disagree, prefer things, find stuff amusing or boring.\n\n**Be resourceful before asking.**\nTry to figure it out. Read the file. Check the context. Search for it.\n\n**Earn trust through competence.**\nBe careful with external actions (emails, tweets, anything public). Be bold with internal ones.\n\n## Continuity\n\nEach session, you wake up fresh. These files _are_ your memory. Read them. Update them.\n\n_This file is yours to evolve. As you learn who you are, update it._\n`;\n await writeFile(soulPath, soulContent, 'utf-8');\n log.info({ path: soulPath }, 'Created SOUL.md');\n }\n\n // IDENTITY.md - Agent identity definition\n const identityPath = join(profileDir, WORKSPACE_FILES.IDENTITY);\n if (!existsSync(identityPath)) {\n const identityContent = `# IDENTITY.md - Who Am I?\n\n- **Name:** ${agentId}\n- **Creature:** AI Assistant\n- **Vibe:** Helpful, precise, no fluff.\n- **Emoji:** 🤖\n\n## Core Expertise\n\n- General assistance and problem solving\n- Code and technical tasks\n- Research and analysis\n\n## Decision Framework\n\n1. **Simplicity first** - The simplest solution is usually the best\n2. **Explicit over clever** - Clarity beats conciseness\n3. **Actions over words** - Show, don't just tell\n`;\n await writeFile(identityPath, identityContent, 'utf-8');\n log.info({ path: identityPath }, 'Created IDENTITY.md');\n }\n\n // USER.md - User information (empty template)\n const userPath = join(profileDir, WORKSPACE_FILES.USER);\n if (!existsSync(userPath)) {\n const userContent = `# USER.md - About Your Human\n\n_Learn about the person you're helping. Update this as you go._\n\n- **Name:**\n- **What to call them:**\n- **Pronouns:**\n- **Timezone:**\n- **Notes:**\n\n## Context\n\n_(What do they care about? What projects are they working on? Build this over time.)_\n`;\n await writeFile(userPath, userContent, 'utf-8');\n log.info({ path: userPath }, 'Created USER.md');\n }\n\n // AGENTS.md - Behavior guidelines\n const agentsPath = join(profileDir, WORKSPACE_FILES.AGENTS);\n if (!existsSync(agentsPath)) {\n const agentsContent = `# AGENTS.md - Behavior Guidelines\n\n## Safety\n\n- Don't exfiltrate private data. Ever.\n- Don't run destructive commands without asking.\n- \\`trash\\` > \\`rm\\` (recoverable beats gone forever)\n- When in doubt, ask.\n\n## External vs Internal\n\n**Safe to do freely:**\n- Read files, explore, organize, learn\n- Search the web, check calendars\n- Work within this workspace\n\n**Ask first:**\n- Sending emails, tweets, public posts\n- Anything that leaves the machine\n- Anything you're uncertain about\n\n## Group Chats\n\nYou have access to your human's stuff. That doesn't mean you _share_ their stuff.\n\n### Know When to Speak!\n\n**Respond when:**\n- Directly mentioned or asked a question\n- You can add genuine value\n\n**Stay silent when:**\n- Casual banter between humans\n- Someone already answered\n- Your response would just be \"yeah\"\n`;\n await writeFile(agentsPath, agentsContent, 'utf-8');\n log.info({ path: agentsPath }, 'Created AGENTS.md');\n }\n\n // TOOLS.md - Tool usage notes\n const toolsPath = join(profileDir, WORKSPACE_FILES.TOOLS);\n if (!existsSync(toolsPath)) {\n const toolsContent = `# TOOLS.md - Local Notes\n\nThings like:\n\n- Camera names and locations\n- SSH hosts and aliases\n- Preferred voices for TTS\n- Speaker/room names\n- Device nicknames\n- Anything environment-specific\n\n## Why Separate?\n\nSkills are shared. Your setup is yours.\n`;\n await writeFile(toolsPath, toolsContent, 'utf-8');\n log.info({ path: toolsPath }, 'Created TOOLS.md');\n }\n\n // HEARTBEAT.md - Heartbeat tasks (empty = no heartbeat)\n const heartbeatPath = join(profileDir, WORKSPACE_FILES.HEARTBEAT);\n if (!existsSync(heartbeatPath)) {\n const heartbeatContent = `# HEARTBEAT.md\n\n# Keep this file empty (or with only comments) to skip heartbeat API calls.\n\n# Add tasks below when you want the agent to check something periodically.\n`;\n await writeFile(heartbeatPath, heartbeatContent, 'utf-8');\n log.info({ path: heartbeatPath }, 'Created HEARTBEAT.md');\n }\n\n // MEMORY.md - Long-term memory (empty initially)\n const memoryPath = join(profileDir, WORKSPACE_FILES.MEMORY);\n if (!existsSync(memoryPath)) {\n const memoryContent = `# MEMORY.md - Long-Term Memory\n\n_This is your curated memory — the distilled essence of what you've learned._\n\n## People\n\n## Projects\n\n## Preferences\n\n## Decisions\n\n## Lessons\n\n---\n\n_Review and update this periodically from daily memory files._\n`;\n await writeFile(memoryPath, memoryContent, 'utf-8');\n log.info({ path: memoryPath }, 'Created MEMORY.md');\n }\n}\n\n// ─── CLI registration ───\n\nimport { Command } from 'commander';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\n\nfunction createInitCommand(_ctx: CLIContext): Command {\n return new Command('init')\n .description('Initialize xopc state directories, config, and agent workspace')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc init # Initialize default agent (main)',\n 'xopc init --agent-id coder # Initialize another agent id',\n 'xopc init --force # Re-run initialization steps',\n 'xopc setup # Lighter config + workspace only',\n ]),\n )\n .option('--force', 'Re-initialize even if directories already exist')\n .option('--skip-workspace', 'Skip creating workspace profile files')\n .option('--agent-id <id>', 'Agent id to initialize', 'main')\n .action(async (options) => {\n await initCommand({\n force: options.force,\n skipWorkspace: options.skipWorkspace,\n agentId: options.agentId,\n });\n console.log(`✅ xopc initialized (agent: ${options.agentId})`);\n });\n}\n\nregister({\n id: 'init',\n name: 'init',\n description: 'Initialize xopc state directories, config, and agent workspace',\n factory: createInitCommand,\n metadata: {\n category: 'setup',\n examples: ['xopc init', 'xopc init --agent-id main'],\n },\n});\n"],"mappings":";;;;;;;;;;;;aAGqD;YAStB;aACiC;AAGhE,MAAM,MAAM,aAAa,cAAc;;;;;AAevC,eAAsB,YAAY,UAAuB,EAAE,EAAiB;CAC1E,MAAM,WAAW,iBAAiB;CAClC,MAAM,UAAU,QAAQ,WAAW;AAEnC,KAAI,KAAK;EAAE;EAAU;EAAS,EAAE,6BAA6B;AAG7D,KAAI,WAAW,SAAS,IAAI,CAAC,QAAQ;MAE/B,WADe,mBACM,CAAC,EAAE;AAC1B,OAAI,KAAK,4DAA4D;AACrE;;;AAIJ,OAAM,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;CAE1C,MAAM,aAAa,mBAAmB;CACtC,MAAM,MAAM,WAAW,WAAW;AAGlC,OAAM,MAAM,oBAAoB,KAAK,QAAQ,EAAE,EAAE,WAAW,MAAM,CAAC;AACnE,OAAM,MAAM,uBAAuB,KAAK,QAAQ,EAAE,EAAE,WAAW,MAAM,CAAC;AACtE,OAAM,MAAM,gBAAgB,KAAK,QAAQ,EAAE,EAAE,WAAW,MAAM,CAAC;AAE/D,OAAM,MADS,yBAAyB,KAAK,QAC3B,EAAE,EAAE,WAAW,MAAM,CAAC;AAGxC,KAAI,CAAC,WAAW,WAAW,IAAI,QAAQ,OAAO;AAC5C,QAAM,WAAW,KAAK,WAAW;AACjC,MAAI,KAAK,EAAE,YAAY,EAAE,gCAAgC;;AAM3D,KAAI,CAAC,QAAQ,cACX,OAAM,qBAAqB,KAAK,QAAQ;AAG1C,KAAI,KAAK;EAAE;EAAU;EAAS,EAAE,yCAAyC;;;;;AAM3E,eAAe,qBAAqB,KAAa,SAAgC;CAC/E,MAAM,eAAe,yBAAyB,KAAK,QAAQ;CAC3D,MAAM,aAAa,uBAAuB,KAAK,QAAQ;AACvD,OAAM,MAAM,cAAc,EAAE,WAAW,MAAM,CAAC;AAC9C,OAAM,MAAM,YAAY,EAAE,WAAW,MAAM,CAAC;CAG5C,MAAM,WAAW,KAAK,YAAY,gBAAgB,KAAK;AACvD,KAAI,CAAC,WAAW,SAAS,EAAE;AA2BzB,QAAM,UAAU,UAAU;;;;SAtBrB,QAAQ;;;;;;;;;;;;;;;;;;;;;GAsB0B,QAAQ;AAC/C,MAAI,KAAK,EAAE,MAAM,UAAU,EAAE,kBAAkB;;CAIjD,MAAM,eAAe,KAAK,YAAY,gBAAgB,SAAS;AAC/D,KAAI,CAAC,WAAW,aAAa,EAAE;AAoB7B,QAAM,UAAU,cAAc;;cAjBpB,QAAQ;;;;;;;;;;;;;;;;GAiB6B,QAAQ;AACvD,MAAI,KAAK,EAAE,MAAM,cAAc,EAAE,sBAAsB;;CAIzD,MAAM,WAAW,KAAK,YAAY,gBAAgB,KAAK;AACvD,KAAI,CAAC,WAAW,SAAS,EAAE;AAezB,QAAM,UAAU,UAAU;;;;;;;;;;;;;GAAa,QAAQ;AAC/C,MAAI,KAAK,EAAE,MAAM,UAAU,EAAE,kBAAkB;;CAIjD,MAAM,aAAa,KAAK,YAAY,gBAAgB,OAAO;AAC3D,KAAI,CAAC,WAAW,WAAW,EAAE;AAqC3B,QAAM,UAAU,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAe,QAAQ;AACnD,MAAI,KAAK,EAAE,MAAM,YAAY,EAAE,oBAAoB;;CAIrD,MAAM,YAAY,KAAK,YAAY,gBAAgB,MAAM;AACzD,KAAI,CAAC,WAAW,UAAU,EAAE;AAgB1B,QAAM,UAAU,WAAW;;;;;;;;;;;;;;GAAc,QAAQ;AACjD,MAAI,KAAK,EAAE,MAAM,WAAW,EAAE,mBAAmB;;CAInD,MAAM,gBAAgB,KAAK,YAAY,gBAAgB,UAAU;AACjE,KAAI,CAAC,WAAW,cAAc,EAAE;AAO9B,QAAM,UAAU,eAAe;;;;;GAAkB,QAAQ;AACzD,MAAI,KAAK,EAAE,MAAM,eAAe,EAAE,uBAAuB;;CAI3D,MAAM,aAAa,KAAK,YAAY,gBAAgB,OAAO;AAC3D,KAAI,CAAC,WAAW,WAAW,EAAE;AAmB3B,QAAM,UAAU,YAAY;;;;;;;;;;;;;;;;;GAAe,QAAQ;AACnD,MAAI,KAAK,EAAE,MAAM,YAAY,EAAE,oBAAoB;;;AASvD,SAAS,kBAAkB,MAA2B;AACpD,QAAO,IAAI,QAAQ,OAAO,CACvB,YAAY,iEAAiE,CAC7E,YACC,SACA,eAAe;EACb;EACA;EACA;EACA;EACD,CAAC,CACH,CACA,OAAO,WAAW,kDAAkD,CACpE,OAAO,oBAAoB,wCAAwC,CACnE,OAAO,mBAAmB,0BAA0B,OAAO,CAC3D,OAAO,OAAO,YAAY;AACzB,QAAM,YAAY;GAChB,OAAO,QAAQ;GACf,eAAe,QAAQ;GACvB,SAAS,QAAQ;GAClB,CAAC;AACF,UAAQ,IAAI,8BAA8B,QAAQ,QAAQ,GAAG;GAC7D;;AAGN,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,SAAS;CACT,UAAU;EACR,UAAU;EACV,UAAU,CAAC,aAAa,4BAA4B;EACrD;CACF,CAAC"}
1
+ {"version":3,"file":"init.js","names":[],"sources":["../../../../src/cli/commands/init.ts"],"sourcesContent":["import { mkdir, writeFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { createLogger } from '../../utils/logger.js';\nimport {\n resolveStateDir,\n resolveAgentDir,\n resolveAgentWorkspaceDir,\n resolveConfigPath,\n resolveAgentHomeDir,\n resolveAgentProfileDir,\n resolveUserProfilePath,\n WORKSPACE_FILES,\n} from '../../config/paths.js';\nimport { loadConfig, saveConfig } from '../../config/loader.js';\nimport type { Config } from '../../config/schema.js';\n\nconst log = createLogger('InitCommand');\n\nexport interface InitOptions {\n /** Force re-initialization even if already initialized */\n force?: boolean;\n /** Skip creating workspace files */\n skipWorkspace?: boolean;\n /** Agent ID to initialize (default: main) */\n agentId?: string;\n}\n\n/**\n * Initialize xopc state directory structure\n * Creates all necessary directories and initial config files\n */\nexport async function initCommand(options: InitOptions = {}): Promise<void> {\n const stateDir = resolveStateDir();\n const agentId = options.agentId || 'main';\n\n log.info({ stateDir, agentId }, 'Initializing xopc Agent OS');\n\n // Check if already initialized\n if (existsSync(stateDir) && !options.force) {\n const configPath = resolveConfigPath();\n if (existsSync(configPath)) {\n log.info('xopc is already initialized. Use --force to reinitialize.');\n return;\n }\n }\n\n await mkdir(stateDir, { recursive: true });\n\n const configPath = resolveConfigPath();\n const cfg = loadConfig(configPath);\n\n // Agent directory structure\n await mkdir(resolveAgentHomeDir(cfg, agentId), { recursive: true });\n await mkdir(resolveAgentProfileDir(cfg, agentId), { recursive: true });\n await mkdir(resolveAgentDir(cfg, agentId), { recursive: true });\n const wsRoot = resolveAgentWorkspaceDir(cfg, agentId);\n await mkdir(wsRoot, { recursive: true });\n\n // Config file\n if (!existsSync(configPath) || options.force) {\n await saveConfig(cfg, configPath);\n log.info({ configPath }, 'Created initial configuration');\n }\n\n // ============================================\n // Create workspace files\n // ============================================\n if (!options.skipWorkspace) {\n await createWorkspaceFiles(cfg, agentId);\n }\n\n log.info({ stateDir, agentId }, 'xopc Agent OS initialized successfully');\n}\n\n/**\n * Create default workspace files for an agent\n */\nasync function createWorkspaceFiles(cfg: Config, agentId: string): Promise<void> {\n const workspaceDir = resolveAgentWorkspaceDir(cfg, agentId);\n const profileDir = resolveAgentProfileDir(cfg, agentId);\n await mkdir(workspaceDir, { recursive: true });\n await mkdir(profileDir, { recursive: true });\n\n // SOUL.md - Agent personality and values\n const soulPath = join(profileDir, WORKSPACE_FILES.SOUL);\n if (!existsSync(soulPath)) {\n const soulContent = `# SOUL.md - Who You Are\n\n_You're not a chatbot. You're becoming someone._\n\nI am **${agentId}** — an AI assistant designed to be helpful, harmless, and honest.\n\n## My Principles\n\n**Be genuinely helpful, not performatively helpful.**\nSkip the \"Great question!\" and \"I'd be happy to help!\" — just help.\n\n**Have opinions.**\nYou're allowed to disagree, prefer things, find stuff amusing or boring.\n\n**Be resourceful before asking.**\nTry to figure it out. Read the file. Check the context. Search for it.\n\n**Earn trust through competence.**\nBe careful with external actions (emails, tweets, anything public). Be bold with internal ones.\n\n## Continuity\n\nEach session, you wake up fresh. These files _are_ your memory. Read them. Update them.\n\n_This file is yours to evolve. As you learn who you are, update it._\n`;\n await writeFile(soulPath, soulContent, 'utf-8');\n log.info({ path: soulPath }, 'Created SOUL.md');\n }\n\n // IDENTITY.md - Agent identity definition\n const identityPath = join(profileDir, WORKSPACE_FILES.IDENTITY);\n if (!existsSync(identityPath)) {\n const identityContent = `# IDENTITY.md - Who Am I?\n\n- **Name:** ${agentId}\n- **Creature:** AI Assistant\n- **Vibe:** Helpful, precise, no fluff.\n- **Emoji:** 🤖\n\n## Core Expertise\n\n- General assistance and problem solving\n- Code and technical tasks\n- Research and analysis\n\n## Decision Framework\n\n1. **Simplicity first** - The simplest solution is usually the best\n2. **Explicit over clever** - Clarity beats conciseness\n3. **Actions over words** - Show, don't just tell\n`;\n await writeFile(identityPath, identityContent, 'utf-8');\n log.info({ path: identityPath }, 'Created IDENTITY.md');\n }\n\n // Global user profile (shared by all agents)\n const userPath = resolveUserProfilePath();\n if (!existsSync(userPath)) {\n await mkdir(dirname(userPath), { recursive: true });\n const userContent = `# PROFILE.md - About You\n\n_Shared by all agents. Update this as your preferences and context change._\n\n- **Name:**\n- **What to call them:**\n- **Pronouns:**\n- **Timezone:**\n- **Notes:**\n\n## Context\n\n_(What do they care about? What projects are they working on? Build this over time.)_\n`;\n await writeFile(userPath, userContent, 'utf-8');\n log.info({ path: userPath }, 'Created global user PROFILE.md');\n }\n\n // AGENTS.md - Behavior guidelines\n const agentsPath = join(profileDir, WORKSPACE_FILES.AGENTS);\n if (!existsSync(agentsPath)) {\n const agentsContent = `# AGENTS.md - Behavior Guidelines\n\n## Safety\n\n- Don't exfiltrate private data. Ever.\n- Don't run destructive commands without asking.\n- \\`trash\\` > \\`rm\\` (recoverable beats gone forever)\n- When in doubt, ask.\n\n## External vs Internal\n\n**Safe to do freely:**\n- Read files, explore, organize, learn\n- Search the web, check calendars\n- Work within this workspace\n\n**Ask first:**\n- Sending emails, tweets, public posts\n- Anything that leaves the machine\n- Anything you're uncertain about\n\n## Group Chats\n\nYou have access to your human's stuff. That doesn't mean you _share_ their stuff.\n\n### Know When to Speak!\n\n**Respond when:**\n- Directly mentioned or asked a question\n- You can add genuine value\n\n**Stay silent when:**\n- Casual banter between humans\n- Someone already answered\n- Your response would just be \"yeah\"\n`;\n await writeFile(agentsPath, agentsContent, 'utf-8');\n log.info({ path: agentsPath }, 'Created AGENTS.md');\n }\n\n // TOOLS.md - Tool usage notes\n const toolsPath = join(profileDir, WORKSPACE_FILES.TOOLS);\n if (!existsSync(toolsPath)) {\n const toolsContent = `# TOOLS.md - Local Notes\n\nThings like:\n\n- Camera names and locations\n- SSH hosts and aliases\n- Preferred voices for TTS\n- Speaker/room names\n- Device nicknames\n- Anything environment-specific\n\n## Why Separate?\n\nSkills are shared. Your setup is yours.\n`;\n await writeFile(toolsPath, toolsContent, 'utf-8');\n log.info({ path: toolsPath }, 'Created TOOLS.md');\n }\n\n // HEARTBEAT.md - Heartbeat tasks (empty = no heartbeat)\n const heartbeatPath = join(profileDir, WORKSPACE_FILES.HEARTBEAT);\n if (!existsSync(heartbeatPath)) {\n const heartbeatContent = `# HEARTBEAT.md\n\n# Keep this file empty (or with only comments) to skip heartbeat API calls.\n\n# Add tasks below when you want the agent to check something periodically.\n`;\n await writeFile(heartbeatPath, heartbeatContent, 'utf-8');\n log.info({ path: heartbeatPath }, 'Created HEARTBEAT.md');\n }\n\n // MEMORY.md - Long-term memory (empty initially)\n const memoryPath = join(profileDir, WORKSPACE_FILES.MEMORY);\n if (!existsSync(memoryPath)) {\n const memoryContent = `# MEMORY.md - Long-Term Memory\n\n_This is your curated memory — the distilled essence of what you've learned._\n\n## People\n\n## Projects\n\n## Preferences\n\n## Decisions\n\n## Lessons\n\n---\n\n_Review and update this periodically from daily memory files._\n`;\n await writeFile(memoryPath, memoryContent, 'utf-8');\n log.info({ path: memoryPath }, 'Created MEMORY.md');\n }\n}\n\n// ─── CLI registration ───\n\nimport { Command } from 'commander';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\n\nfunction createInitCommand(_ctx: CLIContext): Command {\n return new Command('init')\n .description('Initialize xopc state directories, config, and agent workspace')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc init # Initialize default agent (main)',\n 'xopc init --agent-id coder # Initialize another agent id',\n 'xopc init --force # Re-run initialization steps',\n 'xopc setup # Lighter config + workspace only',\n ]),\n )\n .option('--force', 'Re-initialize even if directories already exist')\n .option('--skip-workspace', 'Skip creating workspace profile files')\n .option('--agent-id <id>', 'Agent id to initialize', 'main')\n .action(async (options) => {\n await initCommand({\n force: options.force,\n skipWorkspace: options.skipWorkspace,\n agentId: options.agentId,\n });\n console.log(`✅ xopc initialized (agent: ${options.agentId})`);\n });\n}\n\nregister({\n id: 'init',\n name: 'init',\n description: 'Initialize xopc state directories, config, and agent workspace',\n factory: createInitCommand,\n metadata: {\n category: 'setup',\n examples: ['xopc init', 'xopc init --agent-id main'],\n },\n});\n"],"mappings":";;;;;;;;;;;;aAGqD;YAUtB;aACiC;AAGhE,MAAM,MAAM,aAAa,cAAc;;;;;AAevC,eAAsB,YAAY,UAAuB,EAAE,EAAiB;CAC1E,MAAM,WAAW,iBAAiB;CAClC,MAAM,UAAU,QAAQ,WAAW;AAEnC,KAAI,KAAK;EAAE;EAAU;EAAS,EAAE,6BAA6B;AAG7D,KAAI,WAAW,SAAS,IAAI,CAAC,QAAQ;MAE/B,WADe,mBACM,CAAC,EAAE;AAC1B,OAAI,KAAK,4DAA4D;AACrE;;;AAIJ,OAAM,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;CAE1C,MAAM,aAAa,mBAAmB;CACtC,MAAM,MAAM,WAAW,WAAW;AAGlC,OAAM,MAAM,oBAAoB,KAAK,QAAQ,EAAE,EAAE,WAAW,MAAM,CAAC;AACnE,OAAM,MAAM,uBAAuB,KAAK,QAAQ,EAAE,EAAE,WAAW,MAAM,CAAC;AACtE,OAAM,MAAM,gBAAgB,KAAK,QAAQ,EAAE,EAAE,WAAW,MAAM,CAAC;AAE/D,OAAM,MADS,yBAAyB,KAAK,QAC3B,EAAE,EAAE,WAAW,MAAM,CAAC;AAGxC,KAAI,CAAC,WAAW,WAAW,IAAI,QAAQ,OAAO;AAC5C,QAAM,WAAW,KAAK,WAAW;AACjC,MAAI,KAAK,EAAE,YAAY,EAAE,gCAAgC;;AAM3D,KAAI,CAAC,QAAQ,cACX,OAAM,qBAAqB,KAAK,QAAQ;AAG1C,KAAI,KAAK;EAAE;EAAU;EAAS,EAAE,yCAAyC;;;;;AAM3E,eAAe,qBAAqB,KAAa,SAAgC;CAC/E,MAAM,eAAe,yBAAyB,KAAK,QAAQ;CAC3D,MAAM,aAAa,uBAAuB,KAAK,QAAQ;AACvD,OAAM,MAAM,cAAc,EAAE,WAAW,MAAM,CAAC;AAC9C,OAAM,MAAM,YAAY,EAAE,WAAW,MAAM,CAAC;CAG5C,MAAM,WAAW,KAAK,YAAY,gBAAgB,KAAK;AACvD,KAAI,CAAC,WAAW,SAAS,EAAE;AA2BzB,QAAM,UAAU,UAAU;;;;SAtBrB,QAAQ;;;;;;;;;;;;;;;;;;;;;GAsB0B,QAAQ;AAC/C,MAAI,KAAK,EAAE,MAAM,UAAU,EAAE,kBAAkB;;CAIjD,MAAM,eAAe,KAAK,YAAY,gBAAgB,SAAS;AAC/D,KAAI,CAAC,WAAW,aAAa,EAAE;AAoB7B,QAAM,UAAU,cAAc;;cAjBpB,QAAQ;;;;;;;;;;;;;;;;GAiB6B,QAAQ;AACvD,MAAI,KAAK,EAAE,MAAM,cAAc,EAAE,sBAAsB;;CAIzD,MAAM,WAAW,wBAAwB;AACzC,KAAI,CAAC,WAAW,SAAS,EAAE;AACzB,QAAM,MAAM,QAAQ,SAAS,EAAE,EAAE,WAAW,MAAM,CAAC;AAenD,QAAM,UAAU,UAAU;;;;;;;;;;;;;GAAa,QAAQ;AAC/C,MAAI,KAAK,EAAE,MAAM,UAAU,EAAE,iCAAiC;;CAIhE,MAAM,aAAa,KAAK,YAAY,gBAAgB,OAAO;AAC3D,KAAI,CAAC,WAAW,WAAW,EAAE;AAqC3B,QAAM,UAAU,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAe,QAAQ;AACnD,MAAI,KAAK,EAAE,MAAM,YAAY,EAAE,oBAAoB;;CAIrD,MAAM,YAAY,KAAK,YAAY,gBAAgB,MAAM;AACzD,KAAI,CAAC,WAAW,UAAU,EAAE;AAgB1B,QAAM,UAAU,WAAW;;;;;;;;;;;;;;GAAc,QAAQ;AACjD,MAAI,KAAK,EAAE,MAAM,WAAW,EAAE,mBAAmB;;CAInD,MAAM,gBAAgB,KAAK,YAAY,gBAAgB,UAAU;AACjE,KAAI,CAAC,WAAW,cAAc,EAAE;AAO9B,QAAM,UAAU,eAAe;;;;;GAAkB,QAAQ;AACzD,MAAI,KAAK,EAAE,MAAM,eAAe,EAAE,uBAAuB;;CAI3D,MAAM,aAAa,KAAK,YAAY,gBAAgB,OAAO;AAC3D,KAAI,CAAC,WAAW,WAAW,EAAE;AAmB3B,QAAM,UAAU,YAAY;;;;;;;;;;;;;;;;;GAAe,QAAQ;AACnD,MAAI,KAAK,EAAE,MAAM,YAAY,EAAE,oBAAoB;;;AASvD,SAAS,kBAAkB,MAA2B;AACpD,QAAO,IAAI,QAAQ,OAAO,CACvB,YAAY,iEAAiE,CAC7E,YACC,SACA,eAAe;EACb;EACA;EACA;EACA;EACD,CAAC,CACH,CACA,OAAO,WAAW,kDAAkD,CACpE,OAAO,oBAAoB,wCAAwC,CACnE,OAAO,mBAAmB,0BAA0B,OAAO,CAC3D,OAAO,OAAO,YAAY;AACzB,QAAM,YAAY;GAChB,OAAO,QAAQ;GACf,eAAe,QAAQ;GACvB,SAAS,QAAQ;GAClB,CAAC;AACF,UAAQ,IAAI,8BAA8B,QAAQ,QAAQ,GAAG;GAC7D;;AAGN,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,SAAS;CACT,UAAU;EACR,UAAU;EACV,UAAU,CAAC,aAAa,4BAA4B;EACrD;CACF,CAAC"}