@xopcai/xopc 0.0.121 → 0.0.123

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 (309) hide show
  1. package/README.md +23 -3
  2. package/README.zh-CN.md +23 -3
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-4AW4JgSU.js → agent-avatar-dicebear-Bicr3ZBg.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-CxDSFHGx.js +2 -0
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-CE6GkGU2.js → app-management-settings-panel-CbEy9sR1.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-BmaUjghw.js → appearance-settings-CTHja6n9.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-CyZdgqvm.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-CX4_KWut.js → archive-plugin-Bpy64GjU.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-jf-PIIUU.js → attachment-load-DMkp4xSb.js} +1 -1
  12. package/dist/gateway/static/root/assets/automation-suggestion-card-KnYaP7NT.js +1 -0
  13. package/dist/gateway/static/root/assets/automations-page-8VLKM4au.js +1 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-DG9XQikd.js → binary-plugins-DA9C5mCw.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-Up_VIxLJ.js → block-editor-CiSXk_YC.js} +6 -6
  16. package/dist/gateway/static/root/assets/browser-settings-page-5tPg0DcP.js +8 -0
  17. package/dist/gateway/static/root/assets/{capability-presets-api-CGM4OyMw.js → capability-presets-api-CEJ44WCU.js} +1 -1
  18. package/dist/gateway/static/root/assets/{capability-presets-settings-panel-CzWt0LBb.js → capability-presets-settings-panel-BJW3aVST.js} +1 -1
  19. package/dist/gateway/static/root/assets/{channel-recipient-api-BEByL4_o.js → channel-recipient-api-CDhrhfhN.js} +1 -1
  20. package/dist/gateway/static/root/assets/channels-settings-CorUCTrs.js +1 -0
  21. package/dist/gateway/static/root/assets/connectors-page-VKstC3sP.js +2 -0
  22. package/dist/gateway/static/root/assets/directory-picker-path-field-7jKfbH0J.js +1 -0
  23. package/dist/gateway/static/root/assets/dreaming-settings-m1-wmz4o.js +1 -0
  24. package/dist/gateway/static/root/assets/{extension-debug-page-DZxa_j7-.js → extension-debug-page-C9qQQrBS.js} +1 -1
  25. package/dist/gateway/static/root/assets/{extension-page-CseziW53.js → extension-page-DcBBMEGl.js} +1 -1
  26. package/dist/gateway/static/root/assets/{extension-settings-page-B_9J-xyo.js → extension-settings-page-BQ-jMMP9.js} +1 -1
  27. package/dist/gateway/static/root/assets/{fetch-Cs4ck8zA.js → fetch-Dtpbbe0s.js} +1 -1
  28. package/dist/gateway/static/root/assets/{gateway-config-api-Dl223a7r.js → gateway-config-api-BN6pyX2c.js} +1 -1
  29. package/dist/gateway/static/root/assets/gateway-settings-hQtgVmSR.js +1 -0
  30. package/dist/gateway/static/root/assets/{gateway-startup-retry-IvePwjFE.js → gateway-startup-retry-BIET2x3y.js} +1 -1
  31. package/dist/gateway/static/root/assets/goal-create-dialog-BuIMDx6C.js +1 -0
  32. package/dist/gateway/static/root/assets/goal-detail-page-FEypCq74.js +1 -0
  33. package/dist/gateway/static/root/assets/{goals-config-api-CUCP6yCl.js → goals-config-api-CQm2r1Ty.js} +1 -1
  34. package/dist/gateway/static/root/assets/goals-page-C4-2_MLG.js +2 -0
  35. package/dist/gateway/static/root/assets/{goals-settings-Dj87qPxv.js → goals-settings-DDrdRMxB.js} +1 -1
  36. package/dist/gateway/static/root/assets/heartbeat-settings-BJVok3Sl.js +1 -0
  37. package/dist/gateway/static/root/assets/index-CBDr5xjB.css +1 -0
  38. package/dist/gateway/static/root/assets/index-T0SaNd5a.js +191 -0
  39. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DJgYw0nB.js → keyboard-shortcuts-settings-C2TuQppb.js} +1 -1
  40. package/dist/gateway/static/root/assets/logs-page-DwkwPgid.js +2 -0
  41. package/dist/gateway/static/root/assets/{markdown-split-gnQ_EiGo.js → markdown-split-DhONQ81k.js} +1 -1
  42. package/dist/gateway/static/root/assets/{media-plugins-CQV-mgJn.js → media-plugins-DS44pJzr.js} +1 -1
  43. package/dist/gateway/static/root/assets/messages-avfvyZuQ.js +3 -0
  44. package/dist/gateway/static/root/assets/models-hub-panel-huNY4A1G.js +2 -0
  45. package/dist/gateway/static/root/assets/notes-page-DdfGuEZ1.js +1 -0
  46. package/dist/gateway/static/root/assets/notes-workbench-B0bT9Hqa.js +2 -0
  47. package/dist/gateway/static/root/assets/{preview-open-alternatives-BPMXC-2u.js → preview-open-alternatives-Dej6zHnr.js} +1 -1
  48. package/dist/gateway/static/root/assets/project-detail-page-CjxhPorG.js +1 -0
  49. package/dist/gateway/static/root/assets/projects-page-C4Z5OJMF.js +1 -0
  50. package/dist/gateway/static/root/assets/remote-access-hub-CVCOPUVd.js +1 -0
  51. package/dist/gateway/static/root/assets/{save-bar-controls-BEHqwZjz.js → save-bar-controls-Zu1FzH6z.js} +1 -1
  52. package/dist/gateway/static/root/assets/{schedule-field-CMY25m97.js → schedule-field-BW78mKc0.js} +1 -1
  53. package/dist/gateway/static/root/assets/{schema-form-CxjxsFfg.js → schema-form-Cc-IOydE.js} +1 -1
  54. package/dist/gateway/static/root/assets/segmented-styles-BL8oLBEp.js +1 -0
  55. package/dist/gateway/static/root/assets/sessions-page-B4qExXHC.js +1 -0
  56. package/dist/gateway/static/root/assets/settings-advanced-gate-Ce8yLTBi.js +1 -0
  57. package/dist/gateway/static/root/assets/{settings-collapsible-section-s-kiLAxP.js → settings-collapsible-section-DIpIYht_.js} +1 -1
  58. package/dist/gateway/static/root/assets/{settings-form-section-CIxIEYxU.js → settings-form-section-BFxBNxOG.js} +1 -1
  59. package/dist/gateway/static/root/assets/settings-page-C4fivemT.js +1 -0
  60. package/dist/gateway/static/root/assets/settings-page-layout-CLx4o2PN.js +1 -0
  61. package/dist/gateway/static/root/assets/setup-status-panel-Kyc4eUf0.js +1 -0
  62. package/dist/gateway/static/root/assets/share-preview-page-ZswWCrDu.js +2 -0
  63. package/dist/gateway/static/root/assets/shares-settings-Bu76CMiC.js +1 -0
  64. package/dist/gateway/static/root/assets/skill-reload-api-D-CFg86j.js +1 -0
  65. package/dist/gateway/static/root/assets/skills-page-CUU4f6Ss.js +2 -0
  66. package/dist/gateway/static/root/assets/{system-settings-panel-Czjf0kLJ.js → system-settings-panel-3ZNcGRhS.js} +1 -1
  67. package/dist/gateway/static/root/assets/{typed-models-lib-Cmt8SYdI.js → typed-models-lib-bpzZjiVF.js} +1 -1
  68. package/dist/gateway/static/root/assets/{use-channel-catalog-DyM-ckEQ.js → use-channel-catalog-BCjZLZ3O.js} +1 -1
  69. package/dist/gateway/static/root/assets/{user-profile-settings-panel-BygLv8vm.js → user-profile-settings-panel-CIXafITi.js} +1 -1
  70. package/dist/gateway/static/root/assets/{utils-CloW8coB.js → utils-DXMtz5j_.js} +1 -1
  71. package/dist/gateway/static/root/assets/voice-api-key-field-C1MrQD8R.js +1 -0
  72. package/dist/gateway/static/root/assets/workflow-run-setup-panel-DqizIcY5.js +3 -0
  73. package/dist/gateway/static/root/assets/workflow-start-dialog-B4sZpTDQ.js +1 -0
  74. package/dist/gateway/static/root/assets/workflows-page-B3sVNPFk.js +18 -0
  75. package/dist/gateway/static/root/index.html +5 -5
  76. package/dist/package.js +1 -1
  77. package/dist/src/agent/agent-manager.d.ts +2 -0
  78. package/dist/src/agent/agent-manager.js +47 -7
  79. package/dist/src/agent/agent-manager.js.map +1 -1
  80. package/dist/src/agent/context/project-context.d.ts +19 -0
  81. package/dist/src/agent/context/project-context.js +90 -0
  82. package/dist/src/agent/context/project-context.js.map +1 -0
  83. package/dist/src/agent/goals/goal-locale.js +2 -2
  84. package/dist/src/agent/memory/types.d.ts +1 -0
  85. package/dist/src/agent/prompt/service-prompt-builder.d.ts +1 -0
  86. package/dist/src/agent/prompt/service-prompt-builder.js +2 -0
  87. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  88. package/dist/src/agent/prompt/system-prompt-params.d.ts +2 -0
  89. package/dist/src/agent/prompt/system-prompt-params.js +1 -0
  90. package/dist/src/agent/prompt/system-prompt-params.js.map +1 -1
  91. package/dist/src/agent/prompt/system-prompt.d.ts +1 -0
  92. package/dist/src/agent/prompt/system-prompt.js +2 -1
  93. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  94. package/dist/src/agent/service.js +4 -3
  95. package/dist/src/agent/service.js.map +1 -1
  96. package/dist/src/agent/session/session-config-service.js +6 -1
  97. package/dist/src/agent/session/session-config-service.js.map +1 -1
  98. package/dist/src/agent/session/session-hydrator.js +7 -3
  99. package/dist/src/agent/session/session-hydrator.js.map +1 -1
  100. package/dist/src/agent/session/session-inspector.js +9 -5
  101. package/dist/src/agent/session/session-inspector.js.map +1 -1
  102. package/dist/src/agent/starter-agents.js +5 -34
  103. package/dist/src/agent/starter-agents.js.map +1 -1
  104. package/dist/src/agent/tools/factory.js +1 -1
  105. package/dist/src/agent/tools/factory.js.map +1 -1
  106. package/dist/src/agent/tools/goal-tool.d.ts +5 -1
  107. package/dist/src/agent/tools/goal-tool.js +8 -2
  108. package/dist/src/agent/tools/goal-tool.js.map +1 -1
  109. package/dist/src/agent/tools/index.d.ts +1 -1
  110. package/dist/src/agent/workflow/index.js +2 -2
  111. package/dist/src/agent/workflow/runtime.js +1 -1
  112. package/dist/src/automations/api/routes.js +13 -2
  113. package/dist/src/automations/api/routes.js.map +1 -1
  114. package/dist/src/automations/domain/types.d.ts +2 -0
  115. package/dist/src/automations/domain/validation.d.ts +3 -0
  116. package/dist/src/automations/domain/validation.js +1 -0
  117. package/dist/src/automations/domain/validation.js.map +1 -1
  118. package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -0
  119. package/dist/src/automations/service/action-executor.js +3 -1
  120. package/dist/src/automations/service/action-executor.js.map +1 -1
  121. package/dist/src/automations/service/automation-service.d.ts +4 -1
  122. package/dist/src/automations/service/automation-service.js +2 -2
  123. package/dist/src/automations/service/automation-service.js.map +1 -1
  124. package/dist/src/automations/storage/automation-repository.d.ts +3 -1
  125. package/dist/src/automations/storage/automation-repository.js +7 -5
  126. package/dist/src/automations/storage/automation-repository.js.map +1 -1
  127. package/dist/src/automations/storage/automation-run-repository.d.ts +1 -0
  128. package/dist/src/automations/storage/automation-run-repository.js +12 -1
  129. package/dist/src/automations/storage/automation-run-repository.js.map +1 -1
  130. package/dist/src/chat-commands/builtins/goal.js +4 -1
  131. package/dist/src/chat-commands/builtins/goal.js.map +1 -1
  132. package/dist/src/chat-commands/context.js +2 -1
  133. package/dist/src/chat-commands/context.js.map +1 -1
  134. package/dist/src/cli/command-loaders.js +1 -0
  135. package/dist/src/cli/command-loaders.js.map +1 -1
  136. package/dist/src/cli/command-manifest.js +4 -0
  137. package/dist/src/cli/command-manifest.js.map +1 -1
  138. package/dist/src/cli/commands/agent.js +2 -2
  139. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  140. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  141. package/dist/src/cli/commands/goal.js +27 -4
  142. package/dist/src/cli/commands/goal.js.map +1 -1
  143. package/dist/src/cli/commands/models.js +1 -1
  144. package/dist/src/cli/commands/onboard.js +1 -1
  145. package/dist/src/cli/commands/profile.js +1 -1
  146. package/dist/src/cli/commands/project.d.ts +4 -0
  147. package/dist/src/cli/commands/project.js +239 -0
  148. package/dist/src/cli/commands/project.js.map +1 -0
  149. package/dist/src/cli/commands/tunnel.js +1 -1
  150. package/dist/src/cli/commands/update.js +1 -1
  151. package/dist/src/cli/extension-cli-register.js +1 -1
  152. package/dist/src/config/index.js +1 -1
  153. package/dist/src/gateway/hono/routes/goals.js +51 -4
  154. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  155. package/dist/src/gateway/hono/routes/index.js +2 -0
  156. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  157. package/dist/src/gateway/hono/routes/memory.js +5 -1
  158. package/dist/src/gateway/hono/routes/memory.js.map +1 -1
  159. package/dist/src/gateway/hono/routes/notes.js +5 -0
  160. package/dist/src/gateway/hono/routes/notes.js.map +1 -1
  161. package/dist/src/gateway/hono/routes/projects.d.ts +3 -0
  162. package/dist/src/gateway/hono/routes/projects.js +662 -0
  163. package/dist/src/gateway/hono/routes/projects.js.map +1 -0
  164. package/dist/src/gateway/hono/routes/sessions.js +47 -7
  165. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  166. package/dist/src/gateway/hono/routes/workflows.js +27 -4
  167. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  168. package/dist/src/gateway/run-loop.js +1 -1
  169. package/dist/src/gateway/service.d.ts +3 -0
  170. package/dist/src/gateway/service.js +10 -3
  171. package/dist/src/gateway/service.js.map +1 -1
  172. package/dist/src/goals/goal-service.d.ts +1 -1
  173. package/dist/src/goals/goal-service.js +2 -1
  174. package/dist/src/goals/goal-service.js.map +1 -1
  175. package/dist/src/goals/goal-store.d.ts +1 -1
  176. package/dist/src/goals/goal-store.js +12 -6
  177. package/dist/src/goals/goal-store.js.map +1 -1
  178. package/dist/src/goals/goal-workflow-judge.js +1 -1
  179. package/dist/src/goals/types.d.ts +3 -0
  180. package/dist/src/i18n/goals-bundle.js +1 -1
  181. package/dist/src/i18n/index.js +1 -1
  182. package/dist/src/i18n/share-tool-bundle.js +2 -2
  183. package/dist/src/notes/agent-context.js +2 -2
  184. package/dist/src/projects/automation-bind.d.ts +1 -0
  185. package/dist/src/projects/automation-bind.js +16 -0
  186. package/dist/src/projects/automation-bind.js.map +1 -0
  187. package/dist/src/projects/goal-bind.d.ts +4 -0
  188. package/dist/src/projects/goal-bind.js +40 -0
  189. package/dist/src/projects/goal-bind.js.map +1 -0
  190. package/dist/src/projects/index.d.ts +12 -0
  191. package/dist/src/projects/index.js +12 -0
  192. package/dist/src/projects/memory-bind.d.ts +1 -0
  193. package/dist/src/projects/memory-bind.js +16 -0
  194. package/dist/src/projects/memory-bind.js.map +1 -0
  195. package/dist/src/projects/project-agent.d.ts +10 -0
  196. package/dist/src/projects/project-agent.js +27 -0
  197. package/dist/src/projects/project-agent.js.map +1 -0
  198. package/dist/src/projects/project-loop.d.ts +58 -0
  199. package/dist/src/projects/project-loop.js +118 -0
  200. package/dist/src/projects/project-loop.js.map +1 -0
  201. package/dist/src/projects/project-service.d.ts +40 -0
  202. package/dist/src/projects/project-service.js +187 -0
  203. package/dist/src/projects/project-service.js.map +1 -0
  204. package/dist/src/projects/project-store.d.ts +31 -0
  205. package/dist/src/projects/project-store.js +193 -0
  206. package/dist/src/projects/project-store.js.map +1 -0
  207. package/dist/src/projects/session-bind.d.ts +5 -0
  208. package/dist/src/projects/session-bind.js +46 -0
  209. package/dist/src/projects/session-bind.js.map +1 -0
  210. package/dist/src/projects/types.d.ts +62 -0
  211. package/dist/src/projects/types.js +1 -0
  212. package/dist/src/projects/workflow-bind.d.ts +1 -0
  213. package/dist/src/projects/workflow-bind.js +16 -0
  214. package/dist/src/projects/workflow-bind.js.map +1 -0
  215. package/dist/src/projects/workspace-project.d.ts +22 -0
  216. package/dist/src/projects/workspace-project.js +143 -0
  217. package/dist/src/projects/workspace-project.js.map +1 -0
  218. package/dist/src/projects/workspace.d.ts +5 -0
  219. package/dist/src/projects/workspace.js +25 -0
  220. package/dist/src/projects/workspace.js.map +1 -0
  221. package/dist/src/session/index.d.ts +1 -1
  222. package/dist/src/session/index.js +3 -3
  223. package/dist/src/session/session-workspace.d.ts +4 -2
  224. package/dist/src/session/session-workspace.js +10 -3
  225. package/dist/src/session/session-workspace.js.map +1 -1
  226. package/dist/src/session/types.d.ts +3 -0
  227. package/dist/src/session/types.js.map +1 -1
  228. package/dist/src/storage/sqlite/memory-records-repository.d.ts +3 -0
  229. package/dist/src/storage/sqlite/memory-records-repository.js +16 -5
  230. package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -1
  231. package/dist/src/storage/sqlite/migrations/019_projects.sql +40 -0
  232. package/dist/src/storage/sqlite/migrations/020_project_default_agent.sql +1 -0
  233. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  234. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  235. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  236. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  237. package/dist/src/storage/sqlite/notes-repository.js +20 -4
  238. package/dist/src/storage/sqlite/notes-repository.js.map +1 -1
  239. package/dist/src/storage/sqlite/row-mappers.d.ts +2 -0
  240. package/dist/src/storage/sqlite/row-mappers.js +2 -0
  241. package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
  242. package/dist/src/storage/sqlite/schema.js +1 -1
  243. package/dist/src/storage/sqlite/session-repository.js +10 -5
  244. package/dist/src/storage/sqlite/session-repository.js.map +1 -1
  245. package/dist/src/storage/sqlite/transcript-repository.js +8 -0
  246. package/dist/src/storage/sqlite/transcript-repository.js.map +1 -1
  247. package/dist/src/tui/backends/embedded-backend.d.ts +7 -1
  248. package/dist/src/tui/backends/embedded-backend.js +41 -2
  249. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  250. package/dist/src/tui/backends/gateway-sse-backend.d.ts +7 -1
  251. package/dist/src/tui/backends/gateway-sse-backend.js +22 -0
  252. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  253. package/dist/src/tui/tui-backend.d.ts +16 -0
  254. package/dist/src/tui/tui-commands.js +145 -0
  255. package/dist/src/tui/tui-commands.js.map +1 -1
  256. package/dist/src/tui/tui.js +21 -0
  257. package/dist/src/tui/tui.js.map +1 -1
  258. package/dist/src/workflows/domain/run.d.ts +1 -0
  259. package/dist/src/workflows/domain/run.js.map +1 -1
  260. package/dist/src/workflows/index.js +1 -1
  261. package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
  262. package/dist/src/workflows/service/workflow-run-service.js +18 -4
  263. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  264. package/dist/src/workflows/service/workflow-run-service.types.d.ts +2 -0
  265. package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -0
  266. package/dist/src/workflows/service/workflow-session-bridge.js +3 -0
  267. package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
  268. package/dist/src/workflows/store/run-index-store.d.ts +1 -0
  269. package/dist/src/workflows/store/run-index-store.js +13 -3
  270. package/dist/src/workflows/store/run-index-store.js.map +1 -1
  271. package/dist/src/workflows/store/run-store.d.ts +3 -1
  272. package/dist/src/workflows/store/run-store.js +5 -2
  273. package/dist/src/workflows/store/run-store.js.map +1 -1
  274. package/package.json +10 -1
  275. package/dist/gateway/static/root/assets/agents-2SVUUPlp.js +0 -2
  276. package/dist/gateway/static/root/assets/apps-page-BWeQ1I49.js +0 -1
  277. package/dist/gateway/static/root/assets/automation-suggestion-card-BHk5rtJz.js +0 -1
  278. package/dist/gateway/static/root/assets/automations-page-QHotl53D.js +0 -1
  279. package/dist/gateway/static/root/assets/browser-settings-page-Cmwi6IIQ.js +0 -8
  280. package/dist/gateway/static/root/assets/channels-settings-BOMCUe2J.js +0 -1
  281. package/dist/gateway/static/root/assets/connectors-page-C-Dexk_F.js +0 -2
  282. package/dist/gateway/static/root/assets/dreaming-settings-WPEj8pir.js +0 -1
  283. package/dist/gateway/static/root/assets/gateway-settings-DdzbtW9R.js +0 -1
  284. package/dist/gateway/static/root/assets/goal-detail-page-Dxldogms.js +0 -1
  285. package/dist/gateway/static/root/assets/goals-page-DU5Nd6Xp.js +0 -2
  286. package/dist/gateway/static/root/assets/heartbeat-settings-Cgm5JmwH.js +0 -1
  287. package/dist/gateway/static/root/assets/index-BU1pvxmS.js +0 -191
  288. package/dist/gateway/static/root/assets/index-l54WfSqe.css +0 -1
  289. package/dist/gateway/static/root/assets/logs-page-C10aS4XO.js +0 -2
  290. package/dist/gateway/static/root/assets/messages-C6Kc4Jhf.js +0 -3
  291. package/dist/gateway/static/root/assets/models-hub-panel-B35CAfg6.js +0 -2
  292. package/dist/gateway/static/root/assets/note-detail-page-Brlwse8x.js +0 -2
  293. package/dist/gateway/static/root/assets/note-image-lightbox-BthwKjLA.js +0 -1
  294. package/dist/gateway/static/root/assets/note-time-hm6JO_Wi.js +0 -1
  295. package/dist/gateway/static/root/assets/notes-page-CoAwRc7L.js +0 -1
  296. package/dist/gateway/static/root/assets/remote-access-hub-B36RQ05h.js +0 -1
  297. package/dist/gateway/static/root/assets/sessions-page-73THChnj.js +0 -1
  298. package/dist/gateway/static/root/assets/settings-advanced-gate-CR9VsY-R.js +0 -1
  299. package/dist/gateway/static/root/assets/settings-page-BJ1AhfKI.js +0 -1
  300. package/dist/gateway/static/root/assets/settings-page-layout--6qT7ZJa.js +0 -1
  301. package/dist/gateway/static/root/assets/setup-status-panel-C1TtS1vJ.js +0 -1
  302. package/dist/gateway/static/root/assets/share-preview-page-BZADSbS1.js +0 -2
  303. package/dist/gateway/static/root/assets/shares-settings-gqC8Rmhy.js +0 -1
  304. package/dist/gateway/static/root/assets/skill-reload-api-C9P-WYvS.js +0 -1
  305. package/dist/gateway/static/root/assets/skills-page-CEpSvOhF.js +0 -2
  306. package/dist/gateway/static/root/assets/voice-api-key-field-BsoqJba6.js +0 -1
  307. package/dist/gateway/static/root/assets/voice-player-store-DduWlJYV.js +0 -1
  308. package/dist/gateway/static/root/assets/workflow-run-setup-panel-CcQeX6l5.js +0 -3
  309. package/dist/gateway/static/root/assets/workflows-page-CeA8A9Ef.js +0 -18
@@ -0,0 +1,239 @@
1
+ import { init_loader, loadConfig } from "../../config/loader.js";
2
+ import { closeXopcDatabase, isXopcDatabaseOpen, openXopcDatabase } from "../../storage/sqlite/connection.js";
3
+ import { GoalService } from "../../goals/goal-service.js";
4
+ import "../../goals/index.js";
5
+ import { getSessionMetadata } from "../../storage/sqlite/session-repository.js";
6
+ import "../../storage/sqlite/index.js";
7
+ import { formatExamples, register } from "../registry.js";
8
+ import { ProjectService } from "../../projects/project-service.js";
9
+ import { isValidProjectAgentId, normalizeProjectAgentId } from "../../projects/project-agent.js";
10
+ import "../../projects/index.js";
11
+ import { Command } from "commander";
12
+ //#region src/cli/commands/project.ts
13
+ init_loader();
14
+ function parseStatus(raw) {
15
+ return raw === "active" || raw === "paused" || raw === "archived" ? raw : void 0;
16
+ }
17
+ async function withProjects(_ctx, fn) {
18
+ const wasOpen = isXopcDatabaseOpen();
19
+ if (!wasOpen) openXopcDatabase();
20
+ try {
21
+ return await fn(new ProjectService());
22
+ } finally {
23
+ if (!wasOpen) closeXopcDatabase();
24
+ }
25
+ }
26
+ function resolveProject(projects, ref) {
27
+ return projects.get(ref) ?? projects.getBySlug(ref);
28
+ }
29
+ function formatProject(project) {
30
+ const counts = [
31
+ project.sessionCount != null ? `sessions ${project.sessionCount}` : void 0,
32
+ project.goalCount != null ? `goals ${project.goalCount}` : void 0,
33
+ project.activeGoalCount != null ? `active goals ${project.activeGoalCount}` : void 0
34
+ ].filter(Boolean).join(" | ");
35
+ return [
36
+ `${project.id} [${project.status}] ${project.name}`,
37
+ ` Slug: ${project.slug}`,
38
+ project.defaultAgentId ? ` Default agent: ${project.defaultAgentId}` : " Default agent: global default",
39
+ project.description ? ` Description: ${project.description}` : void 0,
40
+ project.workspaceRoot ? ` Workspace: ${project.workspaceRoot}` : void 0,
41
+ counts ? ` ${counts}` : void 0,
42
+ ` Updated: ${new Date(project.updatedAt).toISOString()}`
43
+ ].filter(Boolean).join("\n");
44
+ }
45
+ function createProjectCommand(ctx) {
46
+ const cmd = new Command("project").description("Manage long-running projects").addHelpText("after", formatExamples([
47
+ "xopc project list",
48
+ "xopc project new xopc --workspace ~/develop/github/xopc",
49
+ "xopc project show xopc",
50
+ "xopc project attach-session <session-key> xopc",
51
+ "xopc project attach-goal <goal-id> xopc"
52
+ ]));
53
+ cmd.addCommand(new Command("list").description("List projects").option("--status <status>", "active, paused, or archived").option("--search <query>", "Search by name, slug, or description").option("--limit <n>", "Maximum rows", "20").option("--json", "Output JSON").action(async (options) => {
54
+ await withProjects(ctx, (projects) => {
55
+ const result = projects.list({
56
+ status: parseStatus(options.status),
57
+ search: options.search,
58
+ limit: Number(options.limit) || 20
59
+ });
60
+ if (options.json) {
61
+ console.log(JSON.stringify(result, null, 2));
62
+ return;
63
+ }
64
+ if (!result.items.length) {
65
+ console.log("No projects.");
66
+ return;
67
+ }
68
+ console.log("Projects:\n");
69
+ for (const project of result.items) console.log(`${formatProject(project)}\n`);
70
+ });
71
+ }));
72
+ cmd.addCommand(new Command("new").description("Create a project").argument("<name>", "Project name").option("--description <text>", "Project description").option("--default-agent <id>", "Default agent id for new project sessions and goals").option("--workspace <path>", "Project workspace root").option("--brief <text>", "Project brief").option("--instructions <text>", "Project instructions").option("--json", "Output JSON").action(async (name, options) => {
73
+ const cfg = loadConfig(ctx.configPath);
74
+ const defaultAgentId = normalizeProjectAgentId(options.defaultAgent);
75
+ if (!isValidProjectAgentId(cfg, defaultAgentId)) {
76
+ console.error(`Agent not found: ${options.defaultAgent}`);
77
+ process.exit(1);
78
+ }
79
+ await withProjects(ctx, (projects) => {
80
+ const project = projects.create({
81
+ name,
82
+ description: options.description,
83
+ defaultAgentId,
84
+ workspaceRoot: options.workspace,
85
+ brief: options.brief,
86
+ instructions: options.instructions
87
+ });
88
+ if (options.json) {
89
+ console.log(JSON.stringify(project, null, 2));
90
+ return;
91
+ }
92
+ console.log(`Created project ${project.id}`);
93
+ console.log(` ${project.name} (${project.slug})`);
94
+ });
95
+ }));
96
+ cmd.addCommand(new Command("show").description("Show project details").argument("<project>", "Project id or slug").option("--json", "Output JSON").action(async (projectRef, options) => {
97
+ await withProjects(ctx, (projects) => {
98
+ const project = resolveProject(projects, projectRef);
99
+ const detailed = project ? projects.getWithDetails(project.id) : null;
100
+ if (!detailed) {
101
+ console.error(`Project not found: ${projectRef}`);
102
+ process.exit(1);
103
+ }
104
+ if (options.json) {
105
+ console.log(JSON.stringify(detailed, null, 2));
106
+ return;
107
+ }
108
+ console.log(formatProject(detailed));
109
+ if (detailed.brief) console.log(`\nBrief:\n${detailed.brief}`);
110
+ if (detailed.instructions) console.log(`\nInstructions:\n${detailed.instructions}`);
111
+ });
112
+ }));
113
+ cmd.addCommand(new Command("update").description("Update a project").argument("<project>", "Project id or slug").option("--name <name>", "New name").option("--description <text>", "Project description").option("--default-agent <id>", "Default agent id for new project sessions and goals").option("--clear-default-agent", "Clear project default agent").option("--status <status>", "active, paused, or archived").option("--workspace <path>", "Project workspace root").option("--brief <text>", "Project brief").option("--instructions <text>", "Project instructions").action(async (projectRef, options) => {
114
+ const cfg = loadConfig(ctx.configPath);
115
+ const defaultAgentId = options.clearDefaultAgent ? null : normalizeProjectAgentId(options.defaultAgent);
116
+ if (defaultAgentId && !isValidProjectAgentId(cfg, defaultAgentId)) {
117
+ console.error(`Agent not found: ${options.defaultAgent}`);
118
+ process.exit(1);
119
+ }
120
+ await withProjects(ctx, (projects) => {
121
+ const project = resolveProject(projects, projectRef);
122
+ if (!project) {
123
+ console.error(`Project not found: ${projectRef}`);
124
+ process.exit(1);
125
+ }
126
+ const updated = projects.update(project.id, {
127
+ name: options.name,
128
+ description: options.description,
129
+ ...options.clearDefaultAgent || options.defaultAgent !== void 0 ? { defaultAgentId } : {},
130
+ status: parseStatus(options.status),
131
+ workspaceRoot: options.workspace,
132
+ brief: options.brief,
133
+ instructions: options.instructions
134
+ });
135
+ console.log(`Updated project ${updated.id}`);
136
+ });
137
+ }));
138
+ cmd.addCommand(new Command("archive").description("Archive a project").argument("<project>", "Project id or slug").action(async (projectRef) => {
139
+ await withProjects(ctx, (projects) => {
140
+ const project = resolveProject(projects, projectRef);
141
+ if (!project) {
142
+ console.error(`Project not found: ${projectRef}`);
143
+ process.exit(1);
144
+ }
145
+ projects.update(project.id, { status: "archived" });
146
+ console.log(`Archived project ${project.name}`);
147
+ });
148
+ }));
149
+ cmd.addCommand(new Command("attach-session").description("Attach a session to a project").argument("<session-key>", "Session key").argument("<project>", "Project id or slug").action(async (sessionKey, projectRef) => {
150
+ await withProjects(ctx, (projects) => {
151
+ const project = resolveProject(projects, projectRef);
152
+ if (!project) {
153
+ console.error(`Project not found: ${projectRef}`);
154
+ process.exit(1);
155
+ }
156
+ projects.attachSession(sessionKey, project.id);
157
+ console.log(`Attached session to ${project.name}`);
158
+ });
159
+ }));
160
+ cmd.addCommand(new Command("detach-session").description("Detach a session from its project").argument("<session-key>", "Session key").action(async (sessionKey) => {
161
+ await withProjects(ctx, (projects) => {
162
+ projects.detachSession(sessionKey);
163
+ console.log("Detached session from project.");
164
+ });
165
+ }));
166
+ cmd.addCommand(new Command("attach-goal").description("Attach a goal to a project").argument("<goal-id>", "Goal id").argument("<project>", "Project id or slug").action(async (goalId, projectRef) => {
167
+ await withProjects(ctx, (projects) => {
168
+ const project = resolveProject(projects, projectRef);
169
+ if (!project) {
170
+ console.error(`Project not found: ${projectRef}`);
171
+ process.exit(1);
172
+ }
173
+ projects.attachGoal(goalId, project.id);
174
+ console.log(`Attached goal to ${project.name}`);
175
+ });
176
+ }));
177
+ cmd.addCommand(new Command("detach-goal").description("Detach a goal from its project").argument("<goal-id>", "Goal id").action(async (goalId) => {
178
+ await withProjects(ctx, (projects) => {
179
+ projects.detachGoal(goalId);
180
+ console.log("Detached goal from project.");
181
+ });
182
+ }));
183
+ cmd.addCommand(new Command("sessions").description("List sessions in a project").argument("<project>", "Project id or slug").option("--limit <n>", "Maximum rows", "20").action(async (projectRef, options) => {
184
+ await withProjects(ctx, (projects) => {
185
+ const project = resolveProject(projects, projectRef);
186
+ if (!project) {
187
+ console.error(`Project not found: ${projectRef}`);
188
+ process.exit(1);
189
+ }
190
+ const keys = projects.listSessionKeys(project.id, Number(options.limit) || 20);
191
+ if (!keys.length) {
192
+ console.log("No sessions.");
193
+ return;
194
+ }
195
+ for (const key of keys) {
196
+ const session = getSessionMetadata(key);
197
+ const label = session?.name ? ` - ${session.name}` : "";
198
+ console.log(`${key}${label}`);
199
+ }
200
+ });
201
+ }));
202
+ cmd.addCommand(new Command("goals").description("List goals in a project").argument("<project>", "Project id or slug").option("--limit <n>", "Maximum rows", "20").action(async (projectRef, options) => {
203
+ await withProjects(ctx, (projects) => {
204
+ const project = resolveProject(projects, projectRef);
205
+ if (!project) {
206
+ console.error(`Project not found: ${projectRef}`);
207
+ process.exit(1);
208
+ }
209
+ const goals = new GoalService().list({
210
+ projectId: project.id,
211
+ limit: Number(options.limit) || 20
212
+ });
213
+ if (!goals.length) {
214
+ console.log("No goals.");
215
+ return;
216
+ }
217
+ for (const goal of goals) console.log(`${goal.id} [${goal.status}] ${goal.title}`);
218
+ });
219
+ }));
220
+ return cmd;
221
+ }
222
+ register({
223
+ id: "project",
224
+ name: "project",
225
+ description: "Manage long-running projects",
226
+ factory: createProjectCommand,
227
+ metadata: {
228
+ category: "utility",
229
+ examples: [
230
+ "xopc project list",
231
+ "xopc project new xopc",
232
+ "xopc project show <project>"
233
+ ]
234
+ }
235
+ });
236
+ //#endregion
237
+ export { createProjectCommand };
238
+
239
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","names":[],"sources":["../../../../src/cli/commands/project.ts"],"sourcesContent":["import { Command } from 'commander';\n\nimport { loadConfig } from '../../config/loader.js';\nimport {\n isValidProjectAgentId,\n normalizeProjectAgentId,\n ProjectService,\n type Project,\n type ProjectStatus,\n} from '../../projects/index.js';\nimport {\n closeXopcDatabase,\n getSessionMetadata,\n isXopcDatabaseOpen,\n openXopcDatabase,\n} from '../../storage/sqlite/index.js';\nimport { GoalService } from '../../goals/index.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\n\nfunction parseStatus(raw: string | undefined): ProjectStatus | undefined {\n return raw === 'active' || raw === 'paused' || raw === 'archived' ? raw : undefined;\n}\n\nasync function withProjects<T>(_ctx: CLIContext, fn: (projects: ProjectService) => Promise<T> | T): Promise<T> {\n const wasOpen = isXopcDatabaseOpen();\n if (!wasOpen) openXopcDatabase();\n try {\n return await fn(new ProjectService());\n } finally {\n if (!wasOpen) closeXopcDatabase();\n }\n}\n\nfunction resolveProject(projects: ProjectService, ref: string): Project | null {\n return projects.get(ref) ?? projects.getBySlug(ref);\n}\n\nfunction formatProject(project: Project & { sessionCount?: number; goalCount?: number; activeGoalCount?: number }): string {\n const counts = [\n project.sessionCount != null ? `sessions ${project.sessionCount}` : undefined,\n project.goalCount != null ? `goals ${project.goalCount}` : undefined,\n project.activeGoalCount != null ? `active goals ${project.activeGoalCount}` : undefined,\n ].filter(Boolean).join(' | ');\n const lines = [\n `${project.id} [${project.status}] ${project.name}`,\n ` Slug: ${project.slug}`,\n project.defaultAgentId ? ` Default agent: ${project.defaultAgentId}` : ' Default agent: global default',\n project.description ? ` Description: ${project.description}` : undefined,\n project.workspaceRoot ? ` Workspace: ${project.workspaceRoot}` : undefined,\n counts ? ` ${counts}` : undefined,\n ` Updated: ${new Date(project.updatedAt).toISOString()}`,\n ];\n return lines.filter(Boolean).join('\\n');\n}\n\nfunction createProjectCommand(ctx: CLIContext): Command {\n const cmd = new Command('project')\n .description('Manage long-running projects')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc project list',\n 'xopc project new xopc --workspace ~/develop/github/xopc',\n 'xopc project show xopc',\n 'xopc project attach-session <session-key> xopc',\n 'xopc project attach-goal <goal-id> xopc',\n ]),\n );\n\n cmd.addCommand(\n new Command('list')\n .description('List projects')\n .option('--status <status>', 'active, paused, or archived')\n .option('--search <query>', 'Search by name, slug, or description')\n .option('--limit <n>', 'Maximum rows', '20')\n .option('--json', 'Output JSON')\n .action(async (options) => {\n await withProjects(ctx, (projects) => {\n const result = projects.list({\n status: parseStatus(options.status),\n search: options.search,\n limit: Number(options.limit) || 20,\n });\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n if (!result.items.length) {\n console.log('No projects.');\n return;\n }\n console.log('Projects:\\n');\n for (const project of result.items) {\n console.log(`${formatProject(project)}\\n`);\n }\n });\n }),\n );\n\n cmd.addCommand(\n new Command('new')\n .description('Create a project')\n .argument('<name>', 'Project name')\n .option('--description <text>', 'Project description')\n .option('--default-agent <id>', 'Default agent id for new project sessions and goals')\n .option('--workspace <path>', 'Project workspace root')\n .option('--brief <text>', 'Project brief')\n .option('--instructions <text>', 'Project instructions')\n .option('--json', 'Output JSON')\n .action(async (name, options) => {\n const cfg = loadConfig(ctx.configPath);\n const defaultAgentId = normalizeProjectAgentId(options.defaultAgent);\n if (!isValidProjectAgentId(cfg, defaultAgentId)) {\n console.error(`Agent not found: ${options.defaultAgent}`);\n process.exit(1);\n }\n await withProjects(ctx, (projects) => {\n const project = projects.create({\n name,\n description: options.description,\n defaultAgentId,\n workspaceRoot: options.workspace,\n brief: options.brief,\n instructions: options.instructions,\n });\n if (options.json) {\n console.log(JSON.stringify(project, null, 2));\n return;\n }\n console.log(`Created project ${project.id}`);\n console.log(` ${project.name} (${project.slug})`);\n });\n }),\n );\n\n cmd.addCommand(\n new Command('show')\n .description('Show project details')\n .argument('<project>', 'Project id or slug')\n .option('--json', 'Output JSON')\n .action(async (projectRef, options) => {\n await withProjects(ctx, (projects) => {\n const project = resolveProject(projects, projectRef);\n const detailed = project ? projects.getWithDetails(project.id) : null;\n if (!detailed) {\n console.error(`Project not found: ${projectRef}`);\n process.exit(1);\n }\n if (options.json) {\n console.log(JSON.stringify(detailed, null, 2));\n return;\n }\n console.log(formatProject(detailed));\n if (detailed.brief) console.log(`\\nBrief:\\n${detailed.brief}`);\n if (detailed.instructions) console.log(`\\nInstructions:\\n${detailed.instructions}`);\n });\n }),\n );\n\n cmd.addCommand(\n new Command('update')\n .description('Update a project')\n .argument('<project>', 'Project id or slug')\n .option('--name <name>', 'New name')\n .option('--description <text>', 'Project description')\n .option('--default-agent <id>', 'Default agent id for new project sessions and goals')\n .option('--clear-default-agent', 'Clear project default agent')\n .option('--status <status>', 'active, paused, or archived')\n .option('--workspace <path>', 'Project workspace root')\n .option('--brief <text>', 'Project brief')\n .option('--instructions <text>', 'Project instructions')\n .action(async (projectRef, options) => {\n const cfg = loadConfig(ctx.configPath);\n const defaultAgentId = options.clearDefaultAgent ? null : normalizeProjectAgentId(options.defaultAgent);\n if (defaultAgentId && !isValidProjectAgentId(cfg, defaultAgentId)) {\n console.error(`Agent not found: ${options.defaultAgent}`);\n process.exit(1);\n }\n await withProjects(ctx, (projects) => {\n const project = resolveProject(projects, projectRef);\n if (!project) {\n console.error(`Project not found: ${projectRef}`);\n process.exit(1);\n }\n const updated = projects.update(project.id, {\n name: options.name,\n description: options.description,\n ...(options.clearDefaultAgent || options.defaultAgent !== undefined ? { defaultAgentId } : {}),\n status: parseStatus(options.status),\n workspaceRoot: options.workspace,\n brief: options.brief,\n instructions: options.instructions,\n });\n console.log(`Updated project ${updated.id}`);\n });\n }),\n );\n\n cmd.addCommand(\n new Command('archive')\n .description('Archive a project')\n .argument('<project>', 'Project id or slug')\n .action(async (projectRef) => {\n await withProjects(ctx, (projects) => {\n const project = resolveProject(projects, projectRef);\n if (!project) {\n console.error(`Project not found: ${projectRef}`);\n process.exit(1);\n }\n projects.update(project.id, { status: 'archived' });\n console.log(`Archived project ${project.name}`);\n });\n }),\n );\n\n cmd.addCommand(\n new Command('attach-session')\n .description('Attach a session to a project')\n .argument('<session-key>', 'Session key')\n .argument('<project>', 'Project id or slug')\n .action(async (sessionKey, projectRef) => {\n await withProjects(ctx, (projects) => {\n const project = resolveProject(projects, projectRef);\n if (!project) {\n console.error(`Project not found: ${projectRef}`);\n process.exit(1);\n }\n projects.attachSession(sessionKey, project.id);\n console.log(`Attached session to ${project.name}`);\n });\n }),\n );\n\n cmd.addCommand(\n new Command('detach-session')\n .description('Detach a session from its project')\n .argument('<session-key>', 'Session key')\n .action(async (sessionKey) => {\n await withProjects(ctx, (projects) => {\n projects.detachSession(sessionKey);\n console.log('Detached session from project.');\n });\n }),\n );\n\n cmd.addCommand(\n new Command('attach-goal')\n .description('Attach a goal to a project')\n .argument('<goal-id>', 'Goal id')\n .argument('<project>', 'Project id or slug')\n .action(async (goalId, projectRef) => {\n await withProjects(ctx, (projects) => {\n const project = resolveProject(projects, projectRef);\n if (!project) {\n console.error(`Project not found: ${projectRef}`);\n process.exit(1);\n }\n projects.attachGoal(goalId, project.id);\n console.log(`Attached goal to ${project.name}`);\n });\n }),\n );\n\n cmd.addCommand(\n new Command('detach-goal')\n .description('Detach a goal from its project')\n .argument('<goal-id>', 'Goal id')\n .action(async (goalId) => {\n await withProjects(ctx, (projects) => {\n projects.detachGoal(goalId);\n console.log('Detached goal from project.');\n });\n }),\n );\n\n cmd.addCommand(\n new Command('sessions')\n .description('List sessions in a project')\n .argument('<project>', 'Project id or slug')\n .option('--limit <n>', 'Maximum rows', '20')\n .action(async (projectRef, options) => {\n await withProjects(ctx, (projects) => {\n const project = resolveProject(projects, projectRef);\n if (!project) {\n console.error(`Project not found: ${projectRef}`);\n process.exit(1);\n }\n const keys = projects.listSessionKeys(project.id, Number(options.limit) || 20);\n if (!keys.length) {\n console.log('No sessions.');\n return;\n }\n for (const key of keys) {\n const session = getSessionMetadata(key);\n const label = session?.name ? ` - ${session.name}` : '';\n console.log(`${key}${label}`);\n }\n });\n }),\n );\n\n cmd.addCommand(\n new Command('goals')\n .description('List goals in a project')\n .argument('<project>', 'Project id or slug')\n .option('--limit <n>', 'Maximum rows', '20')\n .action(async (projectRef, options) => {\n await withProjects(ctx, (projects) => {\n const project = resolveProject(projects, projectRef);\n if (!project) {\n console.error(`Project not found: ${projectRef}`);\n process.exit(1);\n }\n const goals = new GoalService().list({ projectId: project.id, limit: Number(options.limit) || 20 });\n if (!goals.length) {\n console.log('No goals.');\n return;\n }\n for (const goal of goals) {\n console.log(`${goal.id} [${goal.status}] ${goal.title}`);\n }\n });\n }),\n );\n\n return cmd;\n}\n\nregister({\n id: 'project',\n name: 'project',\n description: 'Manage long-running projects',\n factory: createProjectCommand,\n metadata: {\n category: 'utility',\n examples: ['xopc project list', 'xopc project new xopc', 'xopc project show <project>'],\n },\n});\n\nexport { createProjectCommand };\n"],"mappings":"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"}
@@ -3,8 +3,8 @@ import { init_logger } from "../../utils/logger.js";
3
3
  import { loadConfig, saveConfig } from "../../config/loader.js";
4
4
  import { resolveGatewayEffectiveHost } from "../../config/gateway-bind.js";
5
5
  import { loadTunnelState } from "../../tunnel/tunnel-state.js";
6
- import "../../config/index.js";
7
6
  import { formatExamples, register } from "../registry.js";
7
+ import "../../config/index.js";
8
8
  import { TUNNEL_RISK_SUMMARY_LINES, TunnelConsentError, assertTunnelMayStart, hasValidTunnelConsent } from "../../tunnel/consent.js";
9
9
  import { resolveTunnelBrokerUrl, resolveTunnelRegistrationSecret } from "../../tunnel/env.js";
10
10
  import { ensureFrpcBinary } from "../../tunnel/frpc-binary.js";
@@ -1,7 +1,7 @@
1
1
  import { PACKAGE_VERSION, init_package_version } from "../../package-version.js";
2
2
  import { loadConfig } from "../../config/loader.js";
3
- import "../../config/index.js";
4
3
  import { formatExamples, register } from "../registry.js";
4
+ import "../../config/index.js";
5
5
  import { acquireUpdateLock } from "../../infra/update-lock.js";
6
6
  import { normalizeUpdateChannel } from "../../infra/update-channels.js";
7
7
  import { compareSemver, resolveNpmChannelTag } from "../../infra/update-check.js";
@@ -4,9 +4,9 @@ import { ExtensionLoader } from "../extensions/loader.js";
4
4
  import "../extensions/index.js";
5
5
  import { MessageBus } from "../infra/bus/queue.js";
6
6
  import "../infra/bus/index.js";
7
+ import { createDefaultContext } from "./registry.js";
7
8
  import { getWorkspacePath } from "../config/workspace-path-helpers.js";
8
9
  import "../config/index.js";
9
- import { createDefaultContext } from "./registry.js";
10
10
  import { registerExtensionCliProgram } from "../extensions/sdk/channel-helpers.js";
11
11
  import { join } from "path";
12
12
  //#region src/cli/extension-cli-register.ts
@@ -13,10 +13,10 @@ import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_
13
13
  import { CustomModelSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
14
14
  import { canonicalizeConfiguredMcpServer, isKnownCliMcpTypeAlias, normalizeConfiguredMcpServers, resolveXopcMcpTransportAlias } from "./mcp-config-normalize.js";
15
15
  import { formatThinkingLevels, listThinkingLevels, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, thinkLevelToNumber } from "../agent/transcript/thinking-types.js";
16
- import { diffConfigPaths } from "./diff.js";
17
16
  import { getWorkspacePath } from "./workspace-path-helpers.js";
18
17
  import { listAgentProfileMarkdownDirs, listAgentWorkspaceDirs } from "./workspace-dirs.js";
19
18
  import { ProfileManager, createProfile, deleteProfile, getCurrentProfile, getProfileManager, getProfileNameFromDir, getSwitchCommand, listProfiles, resolveProfileStateDir } from "./profile.js";
19
+ import { diffConfigPaths } from "./diff.js";
20
20
  import { BASE_RELOAD_RULES, buildReloadPlan, matchReloadRule } from "./rules.js";
21
21
  import { ConfigHotReloader } from "./reload.js";
22
22
  //#region src/config/index.ts
@@ -1,9 +1,11 @@
1
1
  import { buildSessionKey, init_session_key, sanitizeSegment } from "../../../routing/session-key.js";
2
2
  import { getDefaultAgentId, init_resolve_route } from "../../../routing/resolve-route.js";
3
- import { createWorkflowCatalog } from "../../../agent/workflow/catalog.js";
4
3
  import { GoalService, normalizeGoalUiLocale } from "../../../goals/goal-service.js";
5
4
  import "../../../goals/index.js";
5
+ import { createWorkflowCatalog } from "../../../agent/workflow/catalog.js";
6
6
  import { MAX_WEBCHAT_ATTACHMENT_FILE_BYTES } from "../../chat-limits.js";
7
+ import { resolveProjectAgentId } from "../../../projects/project-agent.js";
8
+ import "../../../projects/index.js";
7
9
  //#region src/gateway/hono/routes/goals.ts
8
10
  init_session_key();
9
11
  init_resolve_route();
@@ -231,12 +233,14 @@ function registerGoalsRoutes(authenticated, deps) {
231
233
  const limit = parseLimit(c.req.query("limit"));
232
234
  const offsetRaw = c.req.query("offset")?.trim();
233
235
  const offset = offsetRaw ? Math.max(0, Number.parseInt(offsetRaw, 10) || 0) : 0;
236
+ const projectId = c.req.query("projectId")?.trim() || void 0;
234
237
  return c.json({
235
238
  ok: true,
236
239
  goals: goals.list({
237
240
  status,
238
241
  agentId,
239
242
  sessionKey,
243
+ projectId,
240
244
  limit,
241
245
  offset
242
246
  })
@@ -263,7 +267,17 @@ function registerGoalsRoutes(authenticated, deps) {
263
267
  error: attachmentError
264
268
  }, 400);
265
269
  const preparedContextAttachments = contextMessage.attachments?.length ? await deps.service.agentService.prepareInboundAttachments(sessionKey ?? `goal:${Date.now()}`, contextMessage.attachments) : void 0;
266
- const agentId = typeof body.agentId === "string" && body.agentId.trim() ? body.agentId.trim() : sessionKey ? void 0 : getDefaultAgentId(cfg());
270
+ const projectId = typeof body.projectId === "string" && body.projectId.trim() ? body.projectId.trim() : void 0;
271
+ if (projectId && !deps.service.projects.get(projectId)) return c.json({
272
+ ok: false,
273
+ error: "Project not found"
274
+ }, 404);
275
+ const agentId = sessionKey ? typeof body.agentId === "string" && body.agentId.trim() ? body.agentId.trim() : void 0 : resolveProjectAgentId({
276
+ config: cfg(),
277
+ projects: deps.service.projects,
278
+ explicitAgentId: typeof body.agentId === "string" ? body.agentId : void 0,
279
+ projectId
280
+ });
267
281
  const maxTurns = typeof body.maxTurns === "number" && Number.isFinite(body.maxTurns) ? Math.max(1, Math.min(500, Math.floor(body.maxTurns))) : void 0;
268
282
  const goal = goals.create({
269
283
  title,
@@ -276,6 +290,7 @@ function registerGoalsRoutes(authenticated, deps) {
276
290
  maxTurns,
277
291
  uiLocale: normalizeGoalUiLocale(body.uiLocale),
278
292
  source: body.source === "cli" || body.source === "cron" || body.source === "workflow" || body.source === "channel" || body.source === "api" ? body.source : "chat",
293
+ projectId,
279
294
  config: cfg()
280
295
  });
281
296
  goals.setContextMessage({
@@ -426,6 +441,14 @@ function registerGoalsRoutes(authenticated, deps) {
426
441
  if ("judgeModelRef" in body) patch.judgeModelRef = typeof body.judgeModelRef === "string" ? body.judgeModelRef : void 0;
427
442
  if ("nextAction" in body) patch.nextAction = typeof body.nextAction === "string" ? body.nextAction : void 0;
428
443
  if ("blockedReason" in body) patch.blockedReason = typeof body.blockedReason === "string" ? body.blockedReason : void 0;
444
+ if ("projectId" in body) {
445
+ const nextProjectId = typeof body.projectId === "string" && body.projectId.trim() ? body.projectId.trim() : void 0;
446
+ if (nextProjectId && !deps.service.projects.get(nextProjectId)) return c.json({
447
+ ok: false,
448
+ error: "Project not found"
449
+ }, 404);
450
+ patch.projectId = nextProjectId;
451
+ }
429
452
  const locale = normalizeGoalUiLocale(body.uiLocale);
430
453
  if (locale) patch.uiLocale = locale;
431
454
  if (Object.keys(patch).length > 0) goal = goals.update(goalId, patch);
@@ -481,7 +504,22 @@ function registerGoalsRoutes(authenticated, deps) {
481
504
  peerId
482
505
  }
483
506
  } });
507
+ if (goal.projectId) try {
508
+ deps.service.projects.attachSession(sessionKey, goal.projectId);
509
+ } catch {
510
+ return c.json({
511
+ ok: false,
512
+ error: "Session not found"
513
+ }, 404);
514
+ }
484
515
  goals.attachSession(goalId, sessionKey);
516
+ } else if (goal.projectId) try {
517
+ deps.service.projects.attachSession(sessionKey, goal.projectId);
518
+ } catch {
519
+ return c.json({
520
+ ok: false,
521
+ error: "Session not found"
522
+ }, 404);
485
523
  }
486
524
  const queued = deps.service.enqueueGoalRun(goalId, {
487
525
  userTurn: parseUserTurnInput(body.userTurn),
@@ -632,11 +670,20 @@ function registerGoalsRoutes(authenticated, deps) {
632
670
  ok: false,
633
671
  error: "Missing sessionKey"
634
672
  }, 400);
635
- const goal = goals.attachSession(goalId, sessionKey);
636
- if (!goal) return c.json({
673
+ const currentGoal = goals.get(goalId);
674
+ if (!currentGoal) return c.json({
637
675
  ok: false,
638
676
  error: "Goal not found"
639
677
  }, 404);
678
+ if (currentGoal.projectId) try {
679
+ deps.service.projects.attachSession(sessionKey, currentGoal.projectId);
680
+ } catch {
681
+ return c.json({
682
+ ok: false,
683
+ error: "Session not found"
684
+ }, 404);
685
+ }
686
+ const goal = goals.attachSession(goalId, sessionKey);
640
687
  return c.json({
641
688
  ok: true,
642
689
  goal