@xopcai/xopc 0.0.180 → 0.0.187

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 (762) hide show
  1. package/README.md +1 -1
  2. package/README.zh-CN.md +1 -1
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{activity-store-DFKtQDgE.js → activity-store-WlR2zEvA.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CcTvB_4W.js → agent-avatar-dicebear-RedDszrG.js} +1 -1
  7. package/dist/gateway/static/root/assets/agents-Df9mTa-K.js +2 -0
  8. package/dist/gateway/static/root/assets/{api-CUClAvuL.js → api-tVOllncq.js} +1 -1
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-Ib-cWKHM.js → app-management-settings-panel-C9hKBzaF.js} +1 -1
  10. package/dist/gateway/static/root/assets/{appearance-settings-CRSN8WuA.js → appearance-settings-5cQvq7hd.js} +1 -1
  11. package/dist/gateway/static/root/assets/apps-page-Bd3tN-k2.js +1 -0
  12. package/dist/gateway/static/root/assets/{archive-plugin-BBF9zspN.js → archive-plugin-Ct-shK4n.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-D3QQfA7w.js → attachment-load-CpPj3m-q.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-page-w6K9GZQ7.js +6 -0
  15. package/dist/gateway/static/root/assets/{binary-plugins-D78XOjJ3.js → binary-plugins-BpSXZBle.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-D_VVXlYX.js → block-editor-B8hR2tXc.js} +46 -46
  17. package/dist/gateway/static/root/assets/browser-settings-page-jb5Hf-hm.js +8 -0
  18. package/dist/gateway/static/root/assets/browser-workflow-inputs-D_LAXUrh.js +1 -0
  19. package/dist/gateway/static/root/assets/{browser-workflows-page-58DBMXgG.js → browser-workflows-page-CPAs7-6s.js} +2 -2
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel-BjUe4raq.js +7 -0
  21. package/dist/gateway/static/root/assets/capability-presets-api-CKklVY2p.js +1 -0
  22. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DiWIMYRr.js +1 -0
  23. package/dist/gateway/static/root/assets/{channel-recipient-api-DYtoNV5A.js → channel-recipient-api-WWN-nbFL.js} +1 -1
  24. package/dist/gateway/static/root/assets/channels-settings-D8IkjMuX.js +1 -0
  25. package/dist/gateway/static/root/assets/channels-status-swr-CySs1GQX.js +1 -0
  26. package/dist/gateway/static/root/assets/{connector-logo-CxIXnifA.js → connector-logo-CdNkVFdB.js} +1 -1
  27. package/dist/gateway/static/root/assets/connectors-page-BT2ahw52.js +2 -0
  28. package/dist/gateway/static/root/assets/desktop-pet-Bm_IEAf3.js +1 -0
  29. package/dist/gateway/static/root/assets/{desktop-pet-settings-BOIp4q0Z.js → desktop-pet-settings-C0Ve04-G.js} +1 -1
  30. package/dist/gateway/static/root/assets/{directory-picker-path-field-C8_lsW6S.js → directory-picker-path-field-B2cvhvAI.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-debug-page-CMNnSJP6.js → extension-debug-page-DNashgGu.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-page-t0pJqLvM.js → extension-page-Bvo-5htX.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-settings-page-aiR-tKnW.js → extension-settings-page-BBESdISV.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-config-api-CkyQBD6r.js → gateway-config-api-ClQvokMo.js} +1 -1
  35. package/dist/gateway/static/root/assets/{gateway-settings-BIZfAgfB.js → gateway-settings-CIRs2QVy.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-startup-retry-CSU7UvzG.js → gateway-startup-retry-CntXJF6W.js} +1 -1
  37. package/dist/gateway/static/root/assets/heartbeat-settings-CWKcZuvc.js +1 -0
  38. package/dist/gateway/static/root/assets/home-page-C59f8UJw.js +3 -0
  39. package/dist/gateway/static/root/assets/{image-generation-api-BR6Kb77X.js → image-generation-api-DjSAQwGy.js} +1 -1
  40. package/dist/gateway/static/root/assets/index-D-YfWVyS.css +1 -0
  41. package/dist/gateway/static/root/assets/index-vi5KlR5_.js +222 -0
  42. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-D76uYKeQ.js → keyboard-shortcuts-settings-ahKHpjoW.js} +1 -1
  43. package/dist/gateway/static/root/assets/local-app-workbench-page-DRB4UQBE.js +2 -0
  44. package/dist/gateway/static/root/assets/{local-apps-page-BsLnojTh.js → local-apps-page-B6GKdgza.js} +1 -1
  45. package/dist/gateway/static/root/assets/{locale-store-BNC8HUCI.js → locale-store-Bff30u5V.js} +1 -1
  46. package/dist/gateway/static/root/assets/logs-page-CNp4XiBN.js +7 -0
  47. package/dist/gateway/static/root/assets/{markdown-split-D6smTQWD.js → markdown-split-BeNMJm_i.js} +1 -1
  48. package/dist/gateway/static/root/assets/{media-plugins-D1TmMF0A.js → media-plugins-Bdzrj_-6.js} +1 -1
  49. package/dist/gateway/static/root/assets/messages-CPxz48hr.js +3 -0
  50. package/dist/gateway/static/root/assets/{notes-page-Vt-diFf0.js → notes-page-MYIi-9S9.js} +1 -1
  51. package/dist/gateway/static/root/assets/notes-workbench-DqSkeDXX.js +4 -0
  52. package/dist/gateway/static/root/assets/{page-tabs-BnSzIjH0.js → page-tabs-3t88bbGx.js} +1 -1
  53. package/dist/gateway/static/root/assets/{preview-open-alternatives-CF12Eqi4.js → preview-open-alternatives-Cf_BWbeE.js} +1 -1
  54. package/dist/gateway/static/root/assets/product-delivery-C8JbSj5Y.js +1 -0
  55. package/dist/gateway/static/root/assets/{product-open-page-Du0TE_CU.js → product-open-page-CKq73c98.js} +1 -1
  56. package/dist/gateway/static/root/assets/project-detail-page-BrbHs4Wp.js +1 -0
  57. package/dist/gateway/static/root/assets/projects-page-B80rtkj6.js +1 -0
  58. package/dist/gateway/static/root/assets/remote-access-hub-_Q3GEznb.js +1 -0
  59. package/dist/gateway/static/root/assets/{schema-form-BKvpxqof.js → schema-form-NqOm-OG1.js} +1 -1
  60. package/dist/gateway/static/root/assets/sessions-page-55dJOUVg.js +1 -0
  61. package/dist/gateway/static/root/assets/settings-advanced-gate-CSFCZj14.js +1 -0
  62. package/dist/gateway/static/root/assets/{settings-form-section-kt6GIS32.js → settings-form-section-DYAS8p8z.js} +1 -1
  63. package/dist/gateway/static/root/assets/{settings-loading-skeleton-85eUPcKz.js → settings-loading-skeleton-DZFhxihA.js} +1 -1
  64. package/dist/gateway/static/root/assets/settings-page-BSIiMLi-.js +1 -0
  65. package/dist/gateway/static/root/assets/{settings-page-layout-CkkCee_x.js → settings-page-layout-DfFfkdED.js} +1 -1
  66. package/dist/gateway/static/root/assets/setup-status-panel-q_yE6-H1.js +1 -0
  67. package/dist/gateway/static/root/assets/{share-preview-page-BtLEstaI.js → share-preview-page-CYtrQaZN.js} +1 -1
  68. package/dist/gateway/static/root/assets/shares-settings-gYkRX9Ik.js +1 -0
  69. package/dist/gateway/static/root/assets/skill-reload-api-BoNBMKW6.js +1 -0
  70. package/dist/gateway/static/root/assets/skills-page-GZHKDFSb.js +2 -0
  71. package/dist/gateway/static/root/assets/{skills-page.utils-C2SHvq8V.js → skills-page.utils-BBXirAjc.js} +1 -1
  72. package/dist/gateway/static/root/assets/system-settings-panel-DLf5YvFl.js +1 -0
  73. package/dist/gateway/static/root/assets/task-detail-page-DFGkuYfl.js +1 -0
  74. package/dist/gateway/static/root/assets/{theme-store-ClDa_Bci.js → theme-store-y7e_tvYi.js} +1 -1
  75. package/dist/gateway/static/root/assets/time-picker-5sHEZ5w5.js +1 -0
  76. package/dist/gateway/static/root/assets/{typed-models-lib-GsmwmB40.js → typed-models-lib-DR12j_dr.js} +1 -1
  77. package/dist/gateway/static/root/assets/use-save-bar-registration-BsvcJgZl.js +1 -0
  78. package/dist/gateway/static/root/assets/user-context-page-q5dr8JFG.js +1 -0
  79. package/dist/gateway/static/root/assets/{voice-api-key-field-Blaxsbb3.js → voice-api-key-field-DKADXFWD.js} +1 -1
  80. package/dist/gateway/static/root/assets/work-discovery-overlay-BC1nExf8.js +1 -0
  81. package/dist/gateway/static/root/assets/work-discovery-page-fNvSg40M.js +1 -0
  82. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CTG4RpRE.js → workflow-run-setup-panel-C8X5W-8k.js} +2 -2
  83. package/dist/gateway/static/root/assets/workflows-page-YJBKmPYK.js +11 -0
  84. package/dist/gateway/static/root/index.html +8 -8
  85. package/dist/package.js +1 -1
  86. package/dist/packages/gateway-contract/src/product-delivery.js +1 -3
  87. package/dist/packages/gateway-contract/src/project-monitoring.js +31 -0
  88. package/dist/packages/gateway-contract/src/task-lifecycle.js +67 -0
  89. package/dist/packages/gateway-contract/src/task-runs.js +80 -0
  90. package/dist/packages/gateway-contract/src/tasks.js +353 -0
  91. package/dist/src/activity/types.d.ts +2 -2
  92. package/dist/src/agent/agent-instance-gateway.d.ts +1 -1
  93. package/dist/src/agent/agent-manager.d.ts +3 -3
  94. package/dist/src/agent/agent-manager.js +23 -22
  95. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -1
  96. package/dist/src/agent/child-agent-factory.d.ts +1 -2
  97. package/dist/src/agent/child-agent-factory.js +4 -10
  98. package/dist/src/agent/context/execution-scope.d.ts +2 -2
  99. package/dist/src/agent/context/execution-scope.js +17 -20
  100. package/dist/src/agent/context/project-context.d.ts +6 -2
  101. package/dist/src/agent/context/project-context.js +17 -25
  102. package/dist/src/agent/context/workspace-templates/AGENTS.md +1 -1
  103. package/dist/src/agent/embedded/model-runtime.js +1 -1
  104. package/dist/src/agent/embedded/run-turn.js +2 -0
  105. package/dist/src/agent/embedded/session-tool-result-guard.d.ts +2 -0
  106. package/dist/src/agent/embedded/session-tool-result-guard.js +16 -4
  107. package/dist/src/agent/image/tool-model-config.js +1 -1
  108. package/dist/src/agent/inbound/inbound-loop.js +1 -1
  109. package/dist/src/agent/inbound/turn-dispatcher.js +1 -1
  110. package/dist/src/agent/ipc/inbox.js +1 -1
  111. package/dist/src/agent/lifecycle/progress.js +0 -1
  112. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +3 -5
  113. package/dist/src/agent/mcp/bundle-mcp-policy.js +8 -5
  114. package/dist/src/agent/mcp/index.js +2 -2
  115. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +5 -6
  116. package/dist/src/agent/memory/builtin-provider.d.ts +1 -5
  117. package/dist/src/agent/memory/builtin-provider.js +75 -229
  118. package/dist/src/agent/memory/compaction.js +1 -1
  119. package/dist/src/agent/memory/context/planner.d.ts +3 -0
  120. package/dist/src/agent/memory/context/planner.js +32 -11
  121. package/dist/src/agent/memory/context/types.d.ts +6 -0
  122. package/dist/src/agent/memory/create-memory-manager.d.ts +1 -2
  123. package/dist/src/agent/memory/create-memory-manager.js +4 -4
  124. package/dist/src/agent/memory/dreaming/config.d.ts +16 -13
  125. package/dist/src/agent/memory/dreaming/config.js +47 -40
  126. package/dist/src/agent/memory/dreaming/constants.d.ts +5 -22
  127. package/dist/src/agent/memory/dreaming/constants.js +6 -24
  128. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +4 -11
  129. package/dist/src/agent/memory/dreaming/deep-promotion.js +126 -279
  130. package/dist/src/agent/memory/dreaming/light-sweep.d.ts +5 -2
  131. package/dist/src/agent/memory/dreaming/light-sweep.js +79 -197
  132. package/dist/src/agent/memory/dreaming/preview.d.ts +3 -9
  133. package/dist/src/agent/memory/dreaming/preview.js +34 -77
  134. package/dist/src/agent/memory/dreaming/promotion-lifecycle.d.ts +1 -15
  135. package/dist/src/agent/memory/dreaming/promotion-lifecycle.js +3 -42
  136. package/dist/src/agent/memory/dreaming/rem-patterns.d.ts +7 -13
  137. package/dist/src/agent/memory/dreaming/rem-patterns.js +104 -261
  138. package/dist/src/agent/memory/dreaming/runner.d.ts +10 -0
  139. package/dist/src/agent/memory/dreaming/runner.js +78 -0
  140. package/dist/src/agent/memory/dreaming/schedule.d.ts +23 -0
  141. package/dist/src/agent/memory/dreaming/schedule.js +38 -0
  142. package/dist/src/agent/memory/dreaming/scope.d.ts +2 -4
  143. package/dist/src/agent/memory/dreaming/scope.js +21 -13
  144. package/dist/src/agent/memory/dreaming/utils.d.ts +2 -51
  145. package/dist/src/agent/memory/dreaming/utils.js +4 -112
  146. package/dist/src/agent/memory/index.d.ts +1 -3
  147. package/dist/src/agent/memory/index.js +2 -3
  148. package/dist/src/agent/memory/manager.d.ts +1 -5
  149. package/dist/src/agent/memory/manager.js +1 -27
  150. package/dist/src/agent/memory/memory-config.d.ts +1 -6
  151. package/dist/src/agent/memory/memory-config.js +2 -23
  152. package/dist/src/agent/memory/summary-generator.d.ts +1 -1
  153. package/dist/src/agent/memory/types.d.ts +5 -48
  154. package/dist/src/agent/memory/understanding/service.js +1 -2
  155. package/dist/src/agent/memory/user-context-coordinator.d.ts +2 -1
  156. package/dist/src/agent/memory/user-context-coordinator.js +32 -14
  157. package/dist/src/agent/messaging/command-handler.d.ts +1 -9
  158. package/dist/src/agent/messaging/command-handler.js +0 -8
  159. package/dist/src/agent/messaging/outbound-coordinator.d.ts +5 -14
  160. package/dist/src/agent/messaging/outbound-coordinator.js +4 -9
  161. package/dist/src/agent/middleware/index.d.ts +1 -1
  162. package/dist/src/agent/middleware/self-verify.d.ts +2 -2
  163. package/dist/src/agent/middleware/self-verify.js +7 -7
  164. package/dist/src/agent/orchestration/agent-orchestrator.js +16 -66
  165. package/dist/src/agent/prompt/response-language.d.ts +3 -0
  166. package/dist/src/agent/prompt/response-language.js +11 -0
  167. package/dist/src/agent/prompt/sections/behavior.js +2 -2
  168. package/dist/src/agent/prompt/sections/memory-skills.js +10 -13
  169. package/dist/src/agent/prompt/sections/response-language.d.ts +2 -0
  170. package/dist/src/agent/prompt/sections/response-language.js +13 -0
  171. package/dist/src/agent/prompt/sections/tooling.js +0 -2
  172. package/dist/src/agent/prompt/service-prompt-builder.d.ts +1 -1
  173. package/dist/src/agent/prompt/service-prompt-builder.js +6 -29
  174. package/dist/src/agent/prompt/subagent-context.d.ts +2 -0
  175. package/dist/src/agent/prompt/subagent-context.js +1 -0
  176. package/dist/src/agent/prompt/system-prompt.d.ts +3 -0
  177. package/dist/src/agent/prompt/system-prompt.js +10 -2
  178. package/dist/src/agent/service/direct-turn-helpers.d.ts +2 -2
  179. package/dist/src/agent/service/direct-turn-helpers.js +8 -5
  180. package/dist/src/agent/service/process-direct-streaming.d.ts +2 -2
  181. package/dist/src/agent/service/process-direct-streaming.js +2 -2
  182. package/dist/src/agent/service.d.ts +6 -9
  183. package/dist/src/agent/service.js +31 -25
  184. package/dist/src/agent/service.types.d.ts +2 -15
  185. package/dist/src/agent/session/index.d.ts +1 -1
  186. package/dist/src/agent/session/session-config-service.d.ts +1 -0
  187. package/dist/src/agent/session/session-config-service.js +14 -0
  188. package/dist/src/agent/session/session-inspector.js +1 -1
  189. package/dist/src/agent/session/session-state-bag.d.ts +8 -8
  190. package/dist/src/agent/session/session-state-bag.js +10 -10
  191. package/dist/src/agent/skills/hub-lock.js +1 -1
  192. package/dist/src/agent/source-context/types.d.ts +1 -1
  193. package/dist/src/agent/source-context/types.js +1 -1
  194. package/dist/src/agent/starter-agents.js +1 -1
  195. package/dist/src/agent/{outcomes → tasks}/execution-verifier.d.ts +3 -0
  196. package/dist/src/agent/{outcomes → tasks}/execution-verifier.js +3 -2
  197. package/dist/src/agent/tasks/task-judge-service.d.ts +31 -0
  198. package/dist/src/agent/tasks/task-judge-service.js +183 -0
  199. package/dist/src/agent/tool-manuals/index.js +1 -1
  200. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  201. package/dist/src/agent/tool-manuals/xopc-use.js +253 -118
  202. package/dist/src/agent/tools/apply-patch.d.ts +1 -5
  203. package/dist/src/agent/tools/apply-patch.js +1 -12
  204. package/dist/src/agent/tools/clarify-tool.js +1 -1
  205. package/dist/src/agent/tools/delegate-tool.js +4 -4
  206. package/dist/src/agent/tools/dreaming-tool.d.ts +0 -1
  207. package/dist/src/agent/tools/dreaming-tool.js +48 -80
  208. package/dist/src/agent/tools/exec-command.d.ts +0 -2
  209. package/dist/src/agent/tools/exec-command.js +2 -19
  210. package/dist/src/agent/tools/factory.d.ts +2 -4
  211. package/dist/src/agent/tools/factory.js +8 -29
  212. package/dist/src/agent/tools/index.d.ts +0 -2
  213. package/dist/src/agent/tools/index.js +1 -3
  214. package/dist/src/agent/tools/managed-job-tool.js +1 -1
  215. package/dist/src/agent/tools/memory-tool.d.ts +0 -3
  216. package/dist/src/agent/tools/memory-tool.js +14 -36
  217. package/dist/src/agent/tools/tool-manual-tool.js +1 -1
  218. package/dist/src/agent/tools/workflow-tool.d.ts +1 -1
  219. package/dist/src/agent/tools/workflow-tool.js +4 -4
  220. package/dist/src/agent/tools/write.d.ts +0 -2
  221. package/dist/src/agent/tools/write.js +0 -11
  222. package/dist/src/agent/tools/xopc-use-tool.d.ts +5 -4
  223. package/dist/src/agent/tools/xopc-use-tool.js +987 -143
  224. package/dist/src/agent/transcript/thinking-types.d.ts +3 -0
  225. package/dist/src/agent/workflow/builtins/index.js +2 -2
  226. package/dist/src/agent/workflow/index.js +2 -2
  227. package/dist/src/agent/workflow/subagent-runner.js +1 -0
  228. package/dist/src/agent/workflow/workflow-child-tools.js +0 -3
  229. package/dist/src/agent/workspace-runtime/registry.d.ts +2 -4
  230. package/dist/src/agent/workspace-runtime/registry.js +1 -2
  231. package/dist/src/agent-manifest/index.js +3 -3
  232. package/dist/src/agent-manifest/resolver.d.ts +20 -1
  233. package/dist/src/agent-manifest/resolver.js +47 -20
  234. package/dist/src/agent-manifest/schema.d.ts +128 -52
  235. package/dist/src/agent-manifest/schema.js +46 -8
  236. package/dist/src/agent-runtime/memory-runtime.d.ts +2 -2
  237. package/dist/src/ai-assist/text-assist.js +4 -4
  238. package/dist/src/auth/credentials.js +2 -2
  239. package/dist/src/auth/profiles/store.js +1 -1
  240. package/dist/src/auth/sync-provider-auth.js +2 -2
  241. package/dist/src/automations/domain/defaults.js +1 -1
  242. package/dist/src/automations/domain/types.d.ts +15 -1
  243. package/dist/src/automations/domain/validation.d.ts +336 -12
  244. package/dist/src/automations/domain/validation.js +6 -0
  245. package/dist/src/automations/draft/automation-draft-prompt.js +3 -3
  246. package/dist/src/automations/draft/automation-draft-validator.d.ts +62 -1
  247. package/dist/src/automations/draft/automation-draft-validator.js +1 -0
  248. package/dist/src/automations/index.js +1 -1
  249. package/dist/src/automations/service/action-executor.d.ts +2 -2
  250. package/dist/src/automations/service/action-executor.js +21 -1
  251. package/dist/src/automations/service/automation-service.js +21 -21
  252. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  253. package/dist/src/browser/providers/cloakbrowser.js +1 -1
  254. package/dist/src/chat-commands/builtins/understanding.d.ts +1 -0
  255. package/dist/src/chat-commands/builtins/understanding.js +91 -0
  256. package/dist/src/chat-commands/context.d.ts +0 -3
  257. package/dist/src/chat-commands/context.js +0 -2
  258. package/dist/src/chat-commands/index.d.ts +1 -2
  259. package/dist/src/chat-commands/index.js +3 -5
  260. package/dist/src/chat-commands/types.d.ts +0 -3
  261. package/dist/src/cli/command-catalog.js +0 -43
  262. package/dist/src/cli/command-loaders.js +0 -1
  263. package/dist/src/cli/command-manifest.js +0 -4
  264. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  265. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  266. package/dist/src/cli/commands/gateway/lifecycle-core.js +1 -1
  267. package/dist/src/cli/commands/gateway/restart-health.d.ts +2 -2
  268. package/dist/src/cli/commands/gateway/restart-health.js +3 -3
  269. package/dist/src/cli/commands/gateway/service.js +4 -4
  270. package/dist/src/cli/commands/models.js +1 -1
  271. package/dist/src/cli/commands/onboard/gateway.js +1 -1
  272. package/dist/src/cli/commands/project.js +12 -33
  273. package/dist/src/cli/commands/providers.d.ts +4 -4
  274. package/dist/src/cli/commands/providers.js +16 -16
  275. package/dist/src/cli/commands/search.js +7 -7
  276. package/dist/src/cli/commands/setup-shared/index.d.ts +2 -2
  277. package/dist/src/cli/commands/setup-shared/index.js +2 -2
  278. package/dist/src/cli/commands/setup-shared/output.d.ts +4 -4
  279. package/dist/src/cli/commands/setup-shared/output.js +26 -26
  280. package/dist/src/cli/commands/setup-shared/runner.d.ts +8 -8
  281. package/dist/src/cli/commands/setup-shared/runner.js +9 -9
  282. package/dist/src/cli/commands/setup-shared/types.d.ts +2 -2
  283. package/dist/src/cli/commands/skills.d.ts +7 -0
  284. package/dist/src/cli/commands/skills.js +16 -16
  285. package/dist/src/cli/commands/update.js +1 -1
  286. package/dist/src/cli/commands/voice.d.ts +1 -1
  287. package/dist/src/cli/commands/voice.js +6 -6
  288. package/dist/src/cli/templates.js +1 -1
  289. package/dist/src/commands/agents.config.js +2 -18
  290. package/dist/src/config/agent-profile.d.ts +1 -1
  291. package/dist/src/config/agent-profile.js +1 -1
  292. package/dist/src/config/index.js +7 -7
  293. package/dist/src/config/loader.js +1 -1
  294. package/dist/src/config/models-json.js +1 -1
  295. package/dist/src/config/paths.d.ts +0 -3
  296. package/dist/src/config/paths.js +2 -7
  297. package/dist/src/config/schema.d.ts +160 -258
  298. package/dist/src/config/schema.js +8 -114
  299. package/dist/src/config/web-patch.d.ts +0 -29
  300. package/dist/src/config/web-patch.js +2 -69
  301. package/dist/src/connectors/composio-catalog.js +7 -20
  302. package/dist/src/connectors/composio-sessions.js +14 -4
  303. package/dist/src/connectors/composio.d.ts +7 -2
  304. package/dist/src/connectors/composio.js +49 -40
  305. package/dist/src/connectors/connected-source-ingestion.js +2 -1
  306. package/dist/src/connectors/connected-source-normalizers.js +5 -5
  307. package/dist/src/connectors/connector-identity.d.ts +2 -0
  308. package/dist/src/connectors/connector-identity.js +64 -1
  309. package/dist/src/connectors/learning-coordinator.js +34 -15
  310. package/dist/src/connectors/learning-recipes.d.ts +2 -0
  311. package/dist/src/connectors/learning-recipes.js +11 -1
  312. package/dist/src/connectors/source-change-publisher.js +5 -4
  313. package/dist/src/connectors/types.d.ts +16 -0
  314. package/dist/src/daemon/launchd.js +2 -2
  315. package/dist/src/daemon/schtasks.js +1 -1
  316. package/dist/src/daemon/service.js +3 -3
  317. package/dist/src/daemon/systemd.js +1 -1
  318. package/dist/src/daemon/types.d.ts +5 -5
  319. package/dist/src/discussions/analyzer.d.ts +6 -6
  320. package/dist/src/discussions/analyzer.js +32 -22
  321. package/dist/src/discussions/index.d.ts +3 -2
  322. package/dist/src/discussions/index.js +5 -4
  323. package/dist/src/discussions/live-worker.d.ts +5 -3
  324. package/dist/src/discussions/live-worker.js +24 -12
  325. package/dist/src/discussions/{worker.d.ts → organizer-worker.d.ts} +3 -5
  326. package/dist/src/discussions/organizer-worker.js +58 -0
  327. package/dist/src/discussions/organizer.d.ts +22 -0
  328. package/dist/src/discussions/organizer.js +92 -0
  329. package/dist/src/discussions/repository.d.ts +16 -5
  330. package/dist/src/discussions/repository.js +159 -135
  331. package/dist/src/discussions/sealer.d.ts +25 -0
  332. package/dist/src/discussions/sealer.js +116 -0
  333. package/dist/src/discussions/service.d.ts +2 -1
  334. package/dist/src/discussions/service.js +70 -60
  335. package/dist/src/discussions/transcript.js +1 -1
  336. package/dist/src/discussions/types.d.ts +45 -20
  337. package/dist/src/discussions/types.js +4 -2
  338. package/dist/src/extensions/lockfile.js +1 -1
  339. package/dist/src/extensions/types/core.d.ts +3 -3
  340. package/dist/src/extensions/types/tui.d.ts +2 -2
  341. package/dist/src/extensions/update.d.ts +3 -3
  342. package/dist/src/extensions/update.js +13 -13
  343. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  344. package/dist/src/gateway/agent-builtin-tools.js +0 -1
  345. package/dist/src/gateway/agent-run-relay.d.ts +1 -1
  346. package/dist/src/gateway/agents-admin.js +17 -19
  347. package/dist/src/gateway/capability-presets-admin.d.ts +13 -0
  348. package/dist/src/gateway/capability-presets-admin.js +59 -2
  349. package/dist/src/gateway/chat-limits.d.ts +6 -2
  350. package/dist/src/gateway/chat-limits.js +17 -3
  351. package/dist/src/gateway/chat-stream/thinking-delta-coalescer.js +3 -3
  352. package/dist/src/gateway/dreaming-automation-reconciler.js +13 -12
  353. package/dist/src/gateway/file-path-classifier.js +1 -1
  354. package/dist/src/gateway/heartbeat/service.js +1 -1
  355. package/dist/src/gateway/hono/app.js +9 -10
  356. package/dist/src/gateway/hono/index.d.ts +1 -1
  357. package/dist/src/gateway/hono/index.js +2 -2
  358. package/dist/src/gateway/hono/lib/config-payload.d.ts +15 -35
  359. package/dist/src/gateway/hono/lib/config-payload.js +6 -4
  360. package/dist/src/gateway/hono/middleware/strict-rate-limit.d.ts +4 -0
  361. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +8 -1
  362. package/dist/src/gateway/hono/routes/activity.js +1 -2
  363. package/dist/src/gateway/hono/routes/agent-stream.js +135 -34
  364. package/dist/src/gateway/hono/routes/capability-presets.js +27 -1
  365. package/dist/src/gateway/hono/routes/composer-history.js +1 -1
  366. package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +1 -1
  367. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -6
  368. package/dist/src/gateway/hono/routes/connectors.js +35 -30
  369. package/dist/src/gateway/hono/routes/deps.d.ts +1 -0
  370. package/dist/src/gateway/hono/routes/discussions.js +13 -3
  371. package/dist/src/gateway/hono/routes/home.d.ts +1 -1
  372. package/dist/src/gateway/hono/routes/home.js +2 -2
  373. package/dist/src/gateway/hono/routes/index.js +2 -4
  374. package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -16
  375. package/dist/src/gateway/hono/routes/media.js +9 -3
  376. package/dist/src/gateway/hono/routes/memory.js +38 -113
  377. package/dist/src/gateway/hono/routes/models.js +1 -1
  378. package/dist/src/gateway/hono/routes/projects.js +220 -588
  379. package/dist/src/gateway/hono/routes/public-gateway.js +4 -2
  380. package/dist/src/gateway/hono/routes/{work.d.ts → tasks.d.ts} +1 -1
  381. package/dist/src/gateway/hono/routes/tasks.js +343 -0
  382. package/dist/src/gateway/hono/routes/workflows.js +7 -8
  383. package/dist/src/gateway/hono/routes/you.d.ts +1 -1
  384. package/dist/src/gateway/hono/routes/you.js +250 -78
  385. package/dist/src/gateway/hono/sse.d.ts +1 -16
  386. package/dist/src/gateway/hono/sse.js +4 -161
  387. package/dist/src/gateway/index.js +2 -2
  388. package/dist/src/gateway/rate-limit/buckets.d.ts +3 -0
  389. package/dist/src/gateway/rate-limit/buckets.js +12 -0
  390. package/dist/src/gateway/security/csp.d.ts +2 -0
  391. package/dist/src/gateway/security/csp.js +4 -0
  392. package/dist/src/gateway/service/agent-runner.d.ts +32 -13
  393. package/dist/src/gateway/service/agent-runner.js +97 -46
  394. package/dist/src/gateway/service/config-coordinator.js +1 -1
  395. package/dist/src/gateway/service/run-gateway-agent.d.ts +1 -1
  396. package/dist/src/gateway/service/run-gateway-agent.js +27 -42
  397. package/dist/src/gateway/service/session-input-coordinator.d.ts +59 -0
  398. package/dist/src/gateway/service/session-input-coordinator.js +183 -0
  399. package/dist/src/gateway/service/sessions-api.d.ts +1 -0
  400. package/dist/src/gateway/service.d.ts +28 -16
  401. package/dist/src/gateway/service.js +150 -133
  402. package/dist/src/gateway/session-reset-service.js +6 -6
  403. package/dist/src/gateway/user-turn-input.d.ts +0 -1
  404. package/dist/src/heartbeat/index.js +1 -1
  405. package/dist/src/i18n/index.d.ts +0 -1
  406. package/dist/src/i18n/index.js +1 -2
  407. package/dist/src/i18n/language-consistency.d.ts +10 -0
  408. package/dist/src/i18n/language-consistency.js +34 -0
  409. package/dist/src/i18n/response-language.d.ts +8 -0
  410. package/dist/src/i18n/response-language.js +17 -0
  411. package/dist/src/i18n/share-tool-bundle.js +2 -2
  412. package/dist/src/mcp/channel-bridge.js +5 -3
  413. package/dist/src/media/store.js +1 -1
  414. package/dist/src/media/types.d.ts +1 -1
  415. package/dist/src/media/uri.js +1 -2
  416. package/dist/src/media-understanding/runner.d.ts +1 -1
  417. package/dist/src/media-understanding/runner.js +9 -9
  418. package/dist/src/media-understanding/types.d.ts +4 -4
  419. package/dist/src/mobile/notification-service.js +16 -21
  420. package/dist/src/mobile/notification-types.d.ts +2 -2
  421. package/dist/src/notes/types.d.ts +0 -1
  422. package/dist/src/proactive/events/product-event-bridge.js +17 -14
  423. package/dist/src/proactive/execution/context.js +45 -28
  424. package/dist/src/proactive/execution/insight.js +1 -1
  425. package/dist/src/proactive/temporal/worker.js +2 -2
  426. package/dist/src/projects/index.d.ts +0 -1
  427. package/dist/src/projects/index.js +1 -2
  428. package/dist/src/projects/project-loop.d.ts +16 -8
  429. package/dist/src/projects/project-loop.js +41 -48
  430. package/dist/src/projects/project-service.d.ts +14 -4
  431. package/dist/src/projects/project-service.js +18 -10
  432. package/dist/src/projects/project-store.d.ts +36 -3
  433. package/dist/src/projects/project-store.js +116 -14
  434. package/dist/src/projects/types.d.ts +50 -3
  435. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  436. package/dist/src/providers/index.js +2 -2
  437. package/dist/src/providers/model-registry.js +1 -1
  438. package/dist/src/providers/model-response.d.ts +4 -0
  439. package/dist/src/providers/model-response.js +28 -0
  440. package/dist/src/providers/register-runtime-providers.js +1 -1
  441. package/dist/src/session/config-types.d.ts +3 -0
  442. package/dist/src/session/index.d.ts +0 -1
  443. package/dist/src/session/index.js +1 -2
  444. package/dist/src/session/init-session-turn.js +6 -6
  445. package/dist/src/session/store.js +4 -4
  446. package/dist/src/session/types.d.ts +1 -6
  447. package/dist/src/share/site-proxy.js +1 -1
  448. package/dist/src/storage/sqlite/config-repository.js +7 -4
  449. package/dist/src/storage/sqlite/connection.js +1 -1
  450. package/dist/src/storage/sqlite/connector-account-repository.d.ts +12 -0
  451. package/dist/src/storage/sqlite/connector-account-repository.js +143 -0
  452. package/dist/src/storage/sqlite/connector-learning-repository.d.ts +5 -2
  453. package/dist/src/storage/sqlite/connector-learning-repository.js +14 -7
  454. package/dist/src/storage/sqlite/connector-repository.js +12 -3
  455. package/dist/src/storage/sqlite/connector-sync-policy-repository.d.ts +4 -3
  456. package/dist/src/storage/sqlite/connector-sync-policy-repository.js +20 -10
  457. package/dist/src/storage/sqlite/dreaming-repository.d.ts +61 -0
  458. package/dist/src/storage/sqlite/dreaming-repository.js +88 -0
  459. package/dist/src/storage/sqlite/index.d.ts +6 -4
  460. package/dist/src/storage/sqlite/index.js +7 -5
  461. package/dist/src/storage/sqlite/memory-readiness-repository.d.ts +7 -0
  462. package/dist/src/storage/sqlite/memory-readiness-repository.js +30 -0
  463. package/dist/src/storage/sqlite/memory-records-repository.d.ts +31 -26
  464. package/dist/src/storage/sqlite/memory-records-repository.js +109 -138
  465. package/dist/src/storage/sqlite/migrations/090_outcome_contract_judgment.sql +2 -0
  466. package/dist/src/storage/sqlite/migrations/091_context_allocation.sql +1 -0
  467. package/dist/src/storage/sqlite/migrations/092_outcome_execution_runtime.sql +88 -0
  468. package/dist/src/storage/sqlite/migrations/093_remove_legacy_goals.sql +174 -0
  469. package/dist/src/storage/sqlite/migrations/094_outcome_judgment_and_authority.sql +3 -0
  470. package/dist/src/storage/sqlite/migrations/095_session_input_queue.sql +35 -0
  471. package/dist/src/storage/sqlite/migrations/096_drop_work_intakes.sql +6 -0
  472. package/dist/src/storage/sqlite/migrations/097_work_item_lifecycle.sql +194 -0
  473. package/dist/src/storage/sqlite/migrations/098_discussion_note_documents.sql +99 -0
  474. package/dist/src/storage/sqlite/migrations/099_task_model.sql +500 -0
  475. package/dist/src/storage/sqlite/migrations/100_project_task_taskrun.sql +763 -0
  476. package/dist/src/storage/sqlite/migrations/101_session_response_language.sql +1 -0
  477. package/dist/src/storage/sqlite/migrations/102_session_user_context_mode.sql +2 -0
  478. package/dist/src/storage/sqlite/migrations/103_finalize_structured_memory.sql +3 -0
  479. package/dist/src/storage/sqlite/migrations/104_turn_memory_feedback.sql +77 -0
  480. package/dist/src/storage/sqlite/migrations/105_dreaming_ledger.sql +34 -0
  481. package/dist/src/storage/sqlite/migrations/106_dreaming_run_reproducibility.sql +2 -0
  482. package/dist/src/storage/sqlite/migrations/107_connector_accounts.sql +146 -0
  483. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  484. package/dist/src/storage/sqlite/migrations/runner.js +37 -5
  485. package/dist/src/storage/sqlite/migrations/runner.ts +44 -3
  486. package/dist/src/storage/sqlite/migrations/types.d.ts +2 -0
  487. package/dist/src/storage/sqlite/migrations/types.ts +2 -0
  488. package/dist/src/storage/sqlite/row-mappers.d.ts +2 -2
  489. package/dist/src/storage/sqlite/row-mappers.js +2 -2
  490. package/dist/src/storage/sqlite/schema.d.ts +3 -1
  491. package/dist/src/storage/sqlite/schema.js +5 -2
  492. package/dist/src/storage/sqlite/schema.sql +76 -61
  493. package/dist/src/storage/sqlite/session-input-repository.d.ts +59 -0
  494. package/dist/src/storage/sqlite/session-input-repository.js +147 -0
  495. package/dist/src/storage/sqlite/session-repository.js +5 -6
  496. package/dist/src/{work → tasks}/attention-governor.d.ts +5 -5
  497. package/dist/src/{work → tasks}/attention-governor.js +3 -4
  498. package/dist/src/tasks/execution-context.d.ts +23 -0
  499. package/dist/src/{work → tasks}/execution-context.js +7 -20
  500. package/dist/src/{work → tasks}/home-query-service.d.ts +16 -28
  501. package/dist/src/{work → tasks}/home-query-service.js +56 -126
  502. package/dist/src/tasks/index.d.ts +20 -0
  503. package/dist/src/tasks/index.js +21 -0
  504. package/dist/src/{work → tasks}/project-monitoring-service.js +1 -1
  505. package/dist/src/{work → tasks}/project-operating-view-service.d.ts +2 -4
  506. package/dist/src/tasks/project-operating-view-service.js +77 -0
  507. package/dist/src/tasks/task-application-service.d.ts +35 -0
  508. package/dist/src/tasks/task-application-service.js +423 -0
  509. package/dist/src/tasks/task-context-assembler.d.ts +36 -0
  510. package/dist/src/tasks/task-context-assembler.js +125 -0
  511. package/dist/src/tasks/task-context-repository.d.ts +52 -0
  512. package/dist/src/tasks/task-context-repository.js +97 -0
  513. package/dist/src/tasks/task-contract-definition.d.ts +10 -0
  514. package/dist/src/{work/outcome-contract-definition.js → tasks/task-contract-definition.js} +7 -5
  515. package/dist/src/tasks/task-contract-planner.d.ts +17 -0
  516. package/dist/src/tasks/task-contract-planner.js +87 -0
  517. package/dist/src/tasks/task-dependency-service.d.ts +21 -0
  518. package/dist/src/tasks/task-dependency-service.js +81 -0
  519. package/dist/src/tasks/task-outbox-dispatcher.d.ts +6 -0
  520. package/dist/src/tasks/task-outbox-dispatcher.js +31 -0
  521. package/dist/src/tasks/task-read-model-projector.d.ts +16 -0
  522. package/dist/src/tasks/task-read-model-projector.js +93 -0
  523. package/dist/src/tasks/task-repository.d.ts +82 -0
  524. package/dist/src/tasks/task-repository.js +185 -0
  525. package/dist/src/{work/outcome-run-coordinator.d.ts → tasks/task-run-coordinator.d.ts} +6 -8
  526. package/dist/src/tasks/task-run-coordinator.js +130 -0
  527. package/dist/src/tasks/task-run-dispatcher.d.ts +11 -0
  528. package/dist/src/tasks/task-run-dispatcher.js +90 -0
  529. package/dist/src/tasks/task-run-repository.d.ts +102 -0
  530. package/dist/src/tasks/task-run-repository.js +312 -0
  531. package/dist/src/tasks/task-signal-service.d.ts +8 -0
  532. package/dist/src/tasks/task-signal-service.js +72 -0
  533. package/dist/src/tasks/task-value-metrics-service.d.ts +4 -0
  534. package/dist/src/tasks/task-value-metrics-service.js +78 -0
  535. package/dist/src/tasks/task-workflow-coordinator.d.ts +5 -0
  536. package/dist/src/tasks/task-workflow-coordinator.js +54 -0
  537. package/dist/src/tui/backends/embedded-backend.d.ts +11 -1
  538. package/dist/src/tui/backends/embedded-backend.js +29 -3
  539. package/dist/src/tui/backends/gateway-sse-backend.d.ts +6 -3
  540. package/dist/src/tui/backends/gateway-sse-backend.js +38 -127
  541. package/dist/src/tui/components/settings-selector.js +0 -20
  542. package/dist/src/tui/components/tui-bottom-bar.d.ts +2 -3
  543. package/dist/src/tui/components/tui-bottom-bar.js +4 -9
  544. package/dist/src/tui/extension-host/runtime-context.js +1 -1
  545. package/dist/src/tui/tui-backend.d.ts +13 -1
  546. package/dist/src/tui/tui-backend.js +10 -1
  547. package/dist/src/tui/tui-command-formatters.js +1 -2
  548. package/dist/src/tui/tui-commands.js +8 -19
  549. package/dist/src/tui/tui-session-actions.js +0 -2
  550. package/dist/src/tui/tui-settings.d.ts +0 -6
  551. package/dist/src/tui/tui-settings.js +0 -10
  552. package/dist/src/tui/tui-startup-resources.js +1 -1
  553. package/dist/src/tui/tui-types.d.ts +1 -4
  554. package/dist/src/tui/tui-types.js +1 -2
  555. package/dist/src/tui/tui.js +90 -73
  556. package/dist/src/tui/xopc-tui-keybindings.d.ts +25 -6
  557. package/dist/src/tui/xopc-tui-keybindings.js +0 -5
  558. package/dist/src/tunnel/frpc-extract.js +1 -1
  559. package/dist/src/user-context/config.d.ts +165 -16
  560. package/dist/src/user-context/config.js +74 -14
  561. package/dist/src/user-context/context-compiler.d.ts +4 -8
  562. package/dist/src/user-context/context-compiler.js +7 -10
  563. package/dist/src/user-context/interaction-state.js +8 -4
  564. package/dist/src/user-context/manual-understanding.d.ts +19 -0
  565. package/dist/src/user-context/manual-understanding.js +69 -0
  566. package/dist/src/user-context/memory-episode-evaluator.d.ts +32 -0
  567. package/dist/src/user-context/memory-episode-evaluator.js +35 -0
  568. package/dist/src/user-context/memory-readiness.d.ts +33 -0
  569. package/dist/src/user-context/memory-readiness.js +41 -0
  570. package/dist/src/user-context/memory-use-audit.js +3 -2
  571. package/dist/src/user-context/projection.d.ts +13 -0
  572. package/dist/src/user-context/projection.js +13 -2
  573. package/dist/src/user-context/relationship-continuity.js +1 -1
  574. package/dist/src/user-context/runtime.d.ts +0 -2
  575. package/dist/src/user-context/runtime.js +1 -10
  576. package/dist/src/user-context/source-recommendations.d.ts +5 -5
  577. package/dist/src/user-context/source-recommendations.js +9 -8
  578. package/dist/src/voice/stt/transcribe-core.js +3 -3
  579. package/dist/src/voice/stt/types.d.ts +2 -2
  580. package/dist/src/voice/tts/speak-core.js +4 -4
  581. package/dist/src/voice/tts/types.d.ts +2 -2
  582. package/dist/src/work-discovery/analyzer.js +5 -5
  583. package/dist/src/work-discovery/service.d.ts +1 -10
  584. package/dist/src/work-discovery/service.js +3 -5
  585. package/dist/src/work-discovery/types.d.ts +1 -1
  586. package/dist/src/workflows/domain/run.d.ts +3 -4
  587. package/dist/src/workflows/draft/workflow-draft-prompt.js +1 -1
  588. package/dist/src/workflows/index.js +1 -1
  589. package/dist/src/workflows/service/workflow-run-service.d.ts +2 -2
  590. package/dist/src/workflows/service/workflow-run-service.js +105 -35
  591. package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -2
  592. package/dist/src/workflows/service/workflow-session-bridge.js +4 -12
  593. package/dist/src/workflows/store/run-index-store.d.ts +1 -1
  594. package/dist/src/workflows/store/run-index-store.js +10 -8
  595. package/dist/src/workflows/store/run-store.d.ts +1 -1
  596. package/dist/src/workflows/store/run-store.js +2 -2
  597. package/package.json +5 -5
  598. package/dist/gateway/static/root/assets/agents-DgGj9bu6.js +0 -2
  599. package/dist/gateway/static/root/assets/apps-page-B5xahuT-.js +0 -1
  600. package/dist/gateway/static/root/assets/automations-page-BUYrvMmD.js +0 -6
  601. package/dist/gateway/static/root/assets/browser-settings-page-Cjw07q9h.js +0 -8
  602. package/dist/gateway/static/root/assets/browser-workflow-inputs-_gu08MA4.js +0 -1
  603. package/dist/gateway/static/root/assets/capabilities-settings-panel-D_dfVxHY.js +0 -7
  604. package/dist/gateway/static/root/assets/capability-presets-api-DhCn9rPv.js +0 -1
  605. package/dist/gateway/static/root/assets/capability-presets-settings-panel-LWWIYUT7.js +0 -1
  606. package/dist/gateway/static/root/assets/channels-settings-Cyj5OunL.js +0 -1
  607. package/dist/gateway/static/root/assets/channels-status-swr-TEFnV0IG.js +0 -1
  608. package/dist/gateway/static/root/assets/connectors-page-0TobCpBB.js +0 -2
  609. package/dist/gateway/static/root/assets/desktop-pet-CwVSLL6N.js +0 -1
  610. package/dist/gateway/static/root/assets/dreaming-scene-BHMRVEUS.js +0 -4585
  611. package/dist/gateway/static/root/assets/dreaming-settings-Da9FeWQl.js +0 -3
  612. package/dist/gateway/static/root/assets/format-cron-label-arqgGlVV.js +0 -1
  613. package/dist/gateway/static/root/assets/goals-settings-Dx9uTyWF.js +0 -1
  614. package/dist/gateway/static/root/assets/heartbeat-settings-Cnr5ORXL.js +0 -1
  615. package/dist/gateway/static/root/assets/index-B0Tdge_q.css +0 -1
  616. package/dist/gateway/static/root/assets/index-BA56bQ68.js +0 -224
  617. package/dist/gateway/static/root/assets/local-app-workbench-page-DSUNtLHg.js +0 -2
  618. package/dist/gateway/static/root/assets/logs-page-yI8kpQtO.js +0 -7
  619. package/dist/gateway/static/root/assets/messages-H_iJjnEM.js +0 -3
  620. package/dist/gateway/static/root/assets/notes-workbench-BD297EZt.js +0 -4
  621. package/dist/gateway/static/root/assets/outcome-detail-page-C5i_ZR9a.js +0 -1
  622. package/dist/gateway/static/root/assets/product-delivery-BVG-eWQO.js +0 -1
  623. package/dist/gateway/static/root/assets/project-detail-page-D1HGz7Dy.js +0 -1
  624. package/dist/gateway/static/root/assets/projects-page-CqP2TnW-.js +0 -1
  625. package/dist/gateway/static/root/assets/remote-access-hub-BXdVJLS3.js +0 -1
  626. package/dist/gateway/static/root/assets/save-bar-controls-B53UNtDM.js +0 -1
  627. package/dist/gateway/static/root/assets/schedule-field-C3dIMN5q.js +0 -1
  628. package/dist/gateway/static/root/assets/sessions-page-CPAwDdl5.js +0 -1
  629. package/dist/gateway/static/root/assets/settings-advanced-gate-C-jGsoft.js +0 -1
  630. package/dist/gateway/static/root/assets/settings-page-Di5x6Xrc.js +0 -1
  631. package/dist/gateway/static/root/assets/setup-status-panel-uxEE6gAB.js +0 -1
  632. package/dist/gateway/static/root/assets/shares-settings-2mcsMWgn.js +0 -1
  633. package/dist/gateway/static/root/assets/skill-reload-api-ocDwsrEt.js +0 -1
  634. package/dist/gateway/static/root/assets/skills-page-9_jfsFU5.js +0 -2
  635. package/dist/gateway/static/root/assets/system-settings-panel-CIJ66cUy.js +0 -1
  636. package/dist/gateway/static/root/assets/time-picker-D0zAsHOo.js +0 -1
  637. package/dist/gateway/static/root/assets/use-channel-catalog-BQz3K7xj.js +0 -1
  638. package/dist/gateway/static/root/assets/user-context-page-Bn4BLg4W.js +0 -1
  639. package/dist/gateway/static/root/assets/work-copy-Cwyan9Sn.js +0 -1
  640. package/dist/gateway/static/root/assets/work-discovery-page-iJ9RBSpu.js +0 -1
  641. package/dist/gateway/static/root/assets/work-item-detail-page-CqTH7PQX.js +0 -1
  642. package/dist/gateway/static/root/assets/work-page-H3m99ccS.js +0 -3
  643. package/dist/gateway/static/root/assets/workflows-page-BxZSKMfv.js +0 -11
  644. package/dist/packages/gateway-contract/src/outcomes.js +0 -137
  645. package/dist/packages/gateway-contract/src/work-intake.js +0 -85
  646. package/dist/src/agent/goals/checklist-judge.d.ts +0 -48
  647. package/dist/src/agent/goals/checklist-judge.js +0 -237
  648. package/dist/src/agent/goals/checklist-types.d.ts +0 -21
  649. package/dist/src/agent/goals/checklist-types.js +0 -24
  650. package/dist/src/agent/goals/evaluate-turn.d.ts +0 -29
  651. package/dist/src/agent/goals/evaluate-turn.js +0 -209
  652. package/dist/src/agent/goals/goal-locale.d.ts +0 -26
  653. package/dist/src/agent/goals/goal-locale.js +0 -61
  654. package/dist/src/agent/goals/judge.d.ts +0 -41
  655. package/dist/src/agent/goals/judge.js +0 -176
  656. package/dist/src/agent/goals/persistent-goal-apis.d.ts +0 -15
  657. package/dist/src/agent/goals/persistent-goal-apis.js +0 -1
  658. package/dist/src/agent/goals/persistent-goal-service.d.ts +0 -93
  659. package/dist/src/agent/goals/persistent-goal-service.js +0 -128
  660. package/dist/src/agent/goals/post-turn.d.ts +0 -28
  661. package/dist/src/agent/goals/post-turn.js +0 -187
  662. package/dist/src/agent/goals/state.d.ts +0 -46
  663. package/dist/src/agent/goals/state.js +0 -80
  664. package/dist/src/agent/memory/builtin-memory-store.d.ts +0 -54
  665. package/dist/src/agent/memory/builtin-memory-store.js +0 -315
  666. package/dist/src/agent/memory/dreaming/events.d.ts +0 -36
  667. package/dist/src/agent/memory/dreaming/events.js +0 -42
  668. package/dist/src/agent/memory/dreaming/last-run.d.ts +0 -80
  669. package/dist/src/agent/memory/dreaming/last-run.js +0 -96
  670. package/dist/src/agent/memory/dreaming/short-term-store.d.ts +0 -75
  671. package/dist/src/agent/memory/dreaming/short-term-store.js +0 -273
  672. package/dist/src/agent/outcomes/execution-evaluation.d.ts +0 -20
  673. package/dist/src/agent/outcomes/execution-evaluation.js +0 -48
  674. package/dist/src/agent/prompt/memory/index.d.ts +0 -23
  675. package/dist/src/agent/prompt/memory/index.js +0 -101
  676. package/dist/src/agent/tools/curated-memory-tool.d.ts +0 -3
  677. package/dist/src/agent/tools/curated-memory-tool.js +0 -174
  678. package/dist/src/agent/tools/goal-evidence-recorder.d.ts +0 -6
  679. package/dist/src/agent/tools/goal-evidence-recorder.js +0 -32
  680. package/dist/src/agent/tools/goal-tool.d.ts +0 -29
  681. package/dist/src/agent/tools/goal-tool.js +0 -136
  682. package/dist/src/chat-commands/builtins/goal.d.ts +0 -4
  683. package/dist/src/chat-commands/builtins/goal.js +0 -122
  684. package/dist/src/chat-commands/builtins/subgoal.d.ts +0 -4
  685. package/dist/src/chat-commands/builtins/subgoal.js +0 -117
  686. package/dist/src/cli/commands/goal.d.ts +0 -4
  687. package/dist/src/cli/commands/goal.js +0 -235
  688. package/dist/src/discussions/pipeline.d.ts +0 -33
  689. package/dist/src/discussions/pipeline.js +0 -205
  690. package/dist/src/discussions/worker.js +0 -74
  691. package/dist/src/gateway/hono/routes/dreaming.d.ts +0 -3
  692. package/dist/src/gateway/hono/routes/dreaming.js +0 -323
  693. package/dist/src/gateway/hono/routes/execution-receipts.d.ts +0 -3
  694. package/dist/src/gateway/hono/routes/execution-receipts.js +0 -163
  695. package/dist/src/gateway/hono/routes/goals.d.ts +0 -4
  696. package/dist/src/gateway/hono/routes/goals.js +0 -786
  697. package/dist/src/gateway/hono/routes/work.js +0 -207
  698. package/dist/src/goals/goal-notifications.d.ts +0 -31
  699. package/dist/src/goals/goal-notifications.js +0 -157
  700. package/dist/src/goals/goal-queue-store.d.ts +0 -18
  701. package/dist/src/goals/goal-queue-store.js +0 -133
  702. package/dist/src/goals/goal-queue-types.d.ts +0 -42
  703. package/dist/src/goals/goal-queue-types.js +0 -1
  704. package/dist/src/goals/goal-runner.d.ts +0 -17
  705. package/dist/src/goals/goal-runner.js +0 -153
  706. package/dist/src/goals/goal-service.d.ts +0 -87
  707. package/dist/src/goals/goal-service.js +0 -323
  708. package/dist/src/goals/goal-store.d.ts +0 -44
  709. package/dist/src/goals/goal-store.js +0 -472
  710. package/dist/src/goals/goal-workflow-judge.d.ts +0 -13
  711. package/dist/src/goals/goal-workflow-judge.js +0 -145
  712. package/dist/src/goals/index.d.ts +0 -10
  713. package/dist/src/goals/index.js +0 -7
  714. package/dist/src/goals/types.d.ts +0 -136
  715. package/dist/src/goals/types.js +0 -1
  716. package/dist/src/i18n/goals-bundle.d.ts +0 -35
  717. package/dist/src/i18n/goals-bundle.js +0 -61
  718. package/dist/src/i18n/locales/goals.en.js +0 -36
  719. package/dist/src/i18n/locales/goals.zh.js +0 -35
  720. package/dist/src/projects/goal-bind.d.ts +0 -4
  721. package/dist/src/projects/goal-bind.js +0 -38
  722. package/dist/src/session/abort-cutoff.d.ts +0 -6
  723. package/dist/src/session/abort-cutoff.js +0 -8
  724. package/dist/src/storage/sqlite/execution-receipt-repository.d.ts +0 -146
  725. package/dist/src/storage/sqlite/execution-receipt-repository.js +0 -235
  726. package/dist/src/storage/sqlite/memory-index-repository.d.ts +0 -18
  727. package/dist/src/storage/sqlite/memory-index-repository.js +0 -136
  728. package/dist/src/tui/tui-follow-up-queue.d.ts +0 -9
  729. package/dist/src/tui/tui-follow-up-queue.js +0 -16
  730. package/dist/src/work/execution-context.d.ts +0 -16
  731. package/dist/src/work/index.d.ts +0 -14
  732. package/dist/src/work/index.js +0 -15
  733. package/dist/src/work/outcome-contract-definition.d.ts +0 -8
  734. package/dist/src/work/outcome-execution-service.d.ts +0 -27
  735. package/dist/src/work/outcome-execution-service.js +0 -60
  736. package/dist/src/work/outcome-projection-service.d.ts +0 -7
  737. package/dist/src/work/outcome-projection-service.js +0 -51
  738. package/dist/src/work/outcome-receipt-service.d.ts +0 -13
  739. package/dist/src/work/outcome-receipt-service.js +0 -55
  740. package/dist/src/work/outcome-repository.d.ts +0 -50
  741. package/dist/src/work/outcome-repository.js +0 -112
  742. package/dist/src/work/outcome-run-coordinator.js +0 -117
  743. package/dist/src/work/project-operating-view-service.js +0 -46
  744. package/dist/src/work/work-intake-repository.d.ts +0 -49
  745. package/dist/src/work/work-intake-repository.js +0 -97
  746. package/dist/src/work/work-intake-service.d.ts +0 -26
  747. package/dist/src/work/work-intake-service.js +0 -171
  748. package/dist/src/work/work-value-metrics-service.d.ts +0 -4
  749. package/dist/src/work/work-value-metrics-service.js +0 -88
  750. package/dist/src/work-items/agent-context.d.ts +0 -7
  751. package/dist/src/work-items/agent-context.js +0 -73
  752. package/dist/src/work-items/index.d.ts +0 -5
  753. package/dist/src/work-items/index.js +0 -5
  754. package/dist/src/work-items/types.d.ts +0 -112
  755. package/dist/src/work-items/types.js +0 -1
  756. package/dist/src/work-items/work-item-service.d.ts +0 -36
  757. package/dist/src/work-items/work-item-service.js +0 -281
  758. package/dist/src/work-items/work-item-store.d.ts +0 -22
  759. package/dist/src/work-items/work-item-store.js +0 -313
  760. package/dist/src/work-items/work-item-workflow-judge.d.ts +0 -8
  761. package/dist/src/work-items/work-item-workflow-judge.js +0 -48
  762. /package/dist/src/{work → tasks}/project-monitoring-service.d.ts +0 -0
@@ -1,29 +1,59 @@
1
1
  import { runWithActivityContext } from "../../activity/context.js";
2
2
  import { getSessionMetadata } from "../../storage/sqlite/session-repository.js";
3
3
  import "../../storage/sqlite/index.js";
4
+ import { ObjectLinkService } from "../../activity/service.js";
4
5
  import "../../activity/index.js";
6
+ import { TaskRepository } from "../../tasks/task-repository.js";
7
+ import { TaskRunRepository } from "../../tasks/task-run-repository.js";
8
+ import { TaskReadModelProjector } from "../../tasks/task-read-model-projector.js";
9
+ import { TaskCommandSchema, TaskContextInputSchema } from "../../../packages/gateway-contract/src/tasks.js";
5
10
  import { appendProductDeliveryText } from "../../../packages/gateway-contract/src/product-delivery.js";
11
+ import { CreateAutomationSchema, UpdateAutomationSchema } from "../../automations/domain/validation.js";
12
+ import "../../automations/index.js";
6
13
  import { isValidProjectAgentId, normalizeProjectAgentId } from "../../projects/project-agent.js";
7
14
  import "../../projects/index.js";
15
+ import { TaskContextRepository } from "../../tasks/task-context-repository.js";
16
+ import { TaskDependencyError, TaskDependencyService } from "../../tasks/task-dependency-service.js";
17
+ import { TaskApplicationService } from "../../tasks/task-application-service.js";
18
+ import { defineTaskContract } from "../../tasks/task-contract-definition.js";
19
+ import "../../tasks/index.js";
20
+ import { randomUUID } from "node:crypto";
8
21
  import { Type } from "@sinclair/typebox";
9
22
  //#region src/agent/tools/xopc-use-tool.ts
10
23
  const XopcUseToolSchema = Type.Object({
11
24
  mode: Type.Union([
12
25
  Type.Literal("project"),
26
+ Type.Literal("automation"),
13
27
  Type.Literal("note"),
14
- Type.Literal("work_item"),
28
+ Type.Literal("task"),
29
+ Type.Literal("task_run"),
15
30
  Type.Literal("local_app"),
16
31
  Type.Literal("settings")
17
32
  ]),
18
- command: Type.String({ description: "Object command. Supports project list/get/create/update/resolve_workspace, note list/get/create/append/update/preview_edit, work_item list/get/create/update, local_app list/get/create/validate, and settings open." }),
33
+ command: Type.String({ description: "Object command. Supports project list/get/create/update/resolve_workspace/list_milestones/create_milestone/update_milestone/list_updates/create_update, automation list/get/create/update/delete/run/pause/resume/history, note list/get/create/append/update/preview_edit, task list/get/create/update_dependencies/add_context/remove_context/command, task_run list/get/cancel, local_app list/get/create/validate, and settings open." }),
19
34
  args: Type.Optional(Type.Record(Type.String(), Type.Any())),
20
35
  dryRun: Type.Optional(Type.Boolean({ description: "Validate and preview the action without mutating xopc state." }))
21
36
  });
22
37
  const PROJECT_STATUSES = new Set([
38
+ "planned",
23
39
  "active",
24
40
  "paused",
41
+ "completed",
42
+ "cancelled",
25
43
  "archived"
26
44
  ]);
45
+ const PROJECT_HEALTHS = new Set([
46
+ "unknown",
47
+ "on_track",
48
+ "at_risk",
49
+ "off_track"
50
+ ]);
51
+ const MILESTONE_STATUSES = new Set([
52
+ "planned",
53
+ "active",
54
+ "completed",
55
+ "cancelled"
56
+ ]);
27
57
  const NOTE_KINDS = new Set([
28
58
  "thought",
29
59
  "todo",
@@ -39,22 +69,31 @@ const NOTE_STATUSES = new Set([
39
69
  "archived",
40
70
  "trashed"
41
71
  ]);
42
- const WORK_ITEM_STATUSES = new Set([
72
+ const TASK_PHASES = new Set([
43
73
  "backlog",
44
- "todo",
45
- "in_progress",
46
- "blocked",
47
- "needs_input",
48
- "in_review",
49
- "done",
50
- "cancelled"
74
+ "ready",
75
+ "active",
76
+ "review",
77
+ "closed"
51
78
  ]);
52
- const WORK_ITEM_PRIORITIES = new Set([
53
- "urgent",
54
- "high",
79
+ const TASK_PRIORITIES = new Set([
80
+ "low",
55
81
  "normal",
56
- "low"
82
+ "high",
83
+ "critical"
57
84
  ]);
85
+ const TASK_COMMANDS = new Set([
86
+ "mark_ready",
87
+ "start",
88
+ "request_review",
89
+ "close",
90
+ "reopen",
91
+ "add_wait",
92
+ "resolve_wait",
93
+ "delegate",
94
+ "revise_contract"
95
+ ]);
96
+ const TASK_CREATE_MODES = new Set(["capture", "start"]);
58
97
  function okText(details) {
59
98
  return {
60
99
  content: [{
@@ -109,7 +148,7 @@ function stringArray(value) {
109
148
  if (!Array.isArray(value)) return void 0;
110
149
  return value.filter((item) => typeof item === "string");
111
150
  }
112
- function nullableNumber(value) {
151
+ function nullableFiniteNumber(value) {
113
152
  if (value === null) return null;
114
153
  return finiteNumber(value);
115
154
  }
@@ -154,6 +193,28 @@ function deliveryForXopcResult(mode, command, result, dryRun) {
154
193
  "continue_in_chat"
155
194
  ]
156
195
  };
196
+ } else if (mode === "automation") {
197
+ source = record(resultRecord.automation);
198
+ const id = deliveryText(source?.id);
199
+ if (id) {
200
+ const enabled = source?.enabled === true;
201
+ primary = {
202
+ kind: "automation",
203
+ id,
204
+ title: deliveryText(source?.name) ?? "Automation",
205
+ summary: deliverySummary(source?.description),
206
+ status: enabled ? "enabled" : "paused",
207
+ revision: deliveryRevision(source?.updatedAtMs),
208
+ projectId: deliveryText(source?.projectId),
209
+ capabilities: [
210
+ "open",
211
+ "edit",
212
+ "continue_in_chat",
213
+ "run",
214
+ enabled ? "pause" : "resume"
215
+ ]
216
+ };
217
+ }
157
218
  } else if (mode === "note") {
158
219
  source = record(resultRecord.note);
159
220
  const id = deliveryText(source?.id);
@@ -164,6 +225,7 @@ function deliveryForXopcResult(mode, command, result, dryRun) {
164
225
  summary: deliverySummary(source?.markdown),
165
226
  status: deliveryText(source?.status),
166
227
  revision: deliveryRevision(source?.localVersion) ?? deliveryRevision(source?.updatedAt),
228
+ projectId: deliveryText(resultRecord.projectId),
167
229
  capabilities: [
168
230
  "open",
169
231
  "preview",
@@ -172,22 +234,40 @@ function deliveryForXopcResult(mode, command, result, dryRun) {
172
234
  "share"
173
235
  ]
174
236
  };
175
- } else if (mode === "work_item") {
176
- source = record(resultRecord.item);
237
+ } else if (mode === "task") {
238
+ source = record(resultRecord.task);
177
239
  const id = deliveryText(source?.id);
178
- if (id) primary = {
179
- kind: "work_item",
180
- id,
181
- title: deliveryText(source?.title) ?? "Work item",
182
- summary: deliverySummary(source?.description, source?.nextAction),
183
- status: deliveryText(source?.status),
184
- revision: deliveryRevision(source?.updatedAt),
240
+ if (id) {
241
+ const phase = deliveryText(source?.phase);
242
+ const operationalState = deliveryText(resultRecord.operationalState);
243
+ const runCapability = phase === "ready" && (!operationalState || operationalState === "idle") ? "run" : void 0;
244
+ primary = {
245
+ kind: "task",
246
+ id,
247
+ title: deliveryText(source?.title) ?? "Task",
248
+ status: operationalState ? `${phase}/${operationalState}` : phase,
249
+ revision: deliveryRevision(source?.version) ?? deliveryRevision(source?.updatedAt),
250
+ projectId: deliveryText(source?.projectId),
251
+ capabilities: [
252
+ "open",
253
+ "edit",
254
+ "continue_in_chat",
255
+ ...runCapability ? [runCapability] : []
256
+ ]
257
+ };
258
+ }
259
+ } else if (mode === "task_run") {
260
+ const run = record(resultRecord.run);
261
+ source = record(record(resultRecord.model)?.task);
262
+ const taskId = deliveryText(source?.id) ?? deliveryText(run?.taskId);
263
+ if (taskId) primary = {
264
+ kind: "task",
265
+ id: taskId,
266
+ title: deliveryText(source?.title) ?? "Task",
267
+ status: deliveryText(run?.status),
268
+ revision: deliveryRevision(run?.version),
185
269
  projectId: deliveryText(source?.projectId),
186
- capabilities: [
187
- "open",
188
- "edit",
189
- "continue_in_chat"
190
- ]
270
+ capabilities: ["open", "continue_in_chat"]
191
271
  };
192
272
  } else if (mode === "local_app") {
193
273
  source = record(resultRecord.app);
@@ -208,7 +288,7 @@ function deliveryForXopcResult(mode, command, result, dryRun) {
208
288
  "run"
209
289
  ]
210
290
  };
211
- } else {
291
+ } else if (mode === "settings") {
212
292
  source = record(resultRecord.settings);
213
293
  const id = deliveryText(source?.section);
214
294
  if (id) primary = {
@@ -226,7 +306,7 @@ function deliveryForXopcResult(mode, command, result, dryRun) {
226
306
  if (!primary) return void 0;
227
307
  return {
228
308
  version: 1,
229
- operation: command === "create" ? "created" : command === "get" || command === "resolve_workspace" || mode === "settings" ? "opened" : command === "validate" ? "completed" : "updated",
309
+ operation: mode === "task" && deliveryText(resultRecord.runId) || mode === "automation" && command === "run" ? "started" : command === "create" ? "created" : command === "get" || command === "resolve_workspace" || mode === "settings" ? "opened" : command === "validate" ? "completed" : "updated",
230
310
  primary
231
311
  };
232
312
  }
@@ -236,6 +316,18 @@ function currentProjectId(args, deps) {
236
316
  const sessionKey = trimString(args.sessionKey) ?? deps.getCurrentSessionKey?.();
237
317
  return sessionKey ? getSessionMetadata(sessionKey)?.projectId : void 0;
238
318
  }
319
+ function automationPayload(args, key) {
320
+ return record(args[key]) ?? args;
321
+ }
322
+ function pickDefined(source, fields) {
323
+ return Object.fromEntries(fields.filter((field) => source[field] !== void 0).map((field) => [field, source[field]]));
324
+ }
325
+ function automationProjectError(projectId, deps) {
326
+ if (!projectId) return void 0;
327
+ const projects = deps.getProjectService?.();
328
+ if (!projects) return "Project service is unavailable";
329
+ return projects.get(projectId) ? void 0 : `Project not found: ${projectId}`;
330
+ }
239
331
  function projectWorkspaceRootArg(args) {
240
332
  return trimString(args.workspaceRoot) ?? trimString(args.workspacePath) ?? trimString(args.path);
241
333
  }
@@ -330,7 +422,34 @@ async function handleProject(command, args, deps, dryRun) {
330
422
  createWorkspaceRoot: args.createWorkspaceRoot === true,
331
423
  projectKind: trimString(args.projectKind),
332
424
  brief: trimString(args.brief),
333
- instructions: trimString(args.instructions)
425
+ instructions: trimString(args.instructions),
426
+ outcome: trimString(args.outcome),
427
+ successCriteria: args.successCriteria === void 0 ? void 0 : stringArray(args.successCriteria),
428
+ scope: args.scope === void 0 ? void 0 : record(args.scope),
429
+ nonGoals: args.nonGoals === void 0 ? void 0 : stringArray(args.nonGoals),
430
+ health: args.health === void 0 ? void 0 : enumValue(args.health, PROJECT_HEALTHS),
431
+ ownerId: trimString(args.ownerId),
432
+ targetAt: args.targetAt === void 0 ? void 0 : finiteNumber(args.targetAt)
433
+ };
434
+ if (args.successCriteria !== void 0 && !input.successCriteria) return {
435
+ ok: false,
436
+ error: "Invalid successCriteria"
437
+ };
438
+ if (args.scope !== void 0 && !input.scope) return {
439
+ ok: false,
440
+ error: "Invalid scope"
441
+ };
442
+ if (args.nonGoals !== void 0 && !input.nonGoals) return {
443
+ ok: false,
444
+ error: "Invalid nonGoals"
445
+ };
446
+ if (args.health !== void 0 && !input.health) return {
447
+ ok: false,
448
+ error: "Invalid project health"
449
+ };
450
+ if (args.targetAt !== void 0 && input.targetAt === void 0) return {
451
+ ok: false,
452
+ error: "Invalid targetAt"
334
453
  };
335
454
  if (dryRun) return {
336
455
  ok: true,
@@ -358,12 +477,39 @@ async function handleProject(command, args, deps, dryRun) {
358
477
  ...workspaceRoot !== void 0 ? { workspaceRoot } : {},
359
478
  ...args.createWorkspaceRoot === true ? { createWorkspaceRoot: true } : {},
360
479
  ...args.brief !== void 0 ? { brief: optionalString(args.brief) } : {},
361
- ...args.instructions !== void 0 ? { instructions: optionalString(args.instructions) } : {}
480
+ ...args.instructions !== void 0 ? { instructions: optionalString(args.instructions) } : {},
481
+ ...args.outcome !== void 0 ? { outcome: optionalString(args.outcome) } : {},
482
+ ...args.successCriteria !== void 0 ? { successCriteria: stringArray(args.successCriteria) } : {},
483
+ ...args.scope !== void 0 ? { scope: record(args.scope) } : {},
484
+ ...args.nonGoals !== void 0 ? { nonGoals: stringArray(args.nonGoals) } : {},
485
+ ...args.health !== void 0 ? { health: enumValue(args.health, PROJECT_HEALTHS) } : {},
486
+ ...args.ownerId !== void 0 ? { ownerId: optionalString(args.ownerId) } : {},
487
+ ...args.targetAt !== void 0 ? { targetAt: nullableFiniteNumber(args.targetAt) } : {}
362
488
  };
363
489
  if (args.status !== void 0 && patch.status === void 0) return {
364
490
  ok: false,
365
491
  error: "Invalid project status"
366
492
  };
493
+ if (args.successCriteria !== void 0 && patch.successCriteria === void 0) return {
494
+ ok: false,
495
+ error: "Invalid successCriteria"
496
+ };
497
+ if (args.scope !== void 0 && patch.scope === void 0) return {
498
+ ok: false,
499
+ error: "Invalid scope"
500
+ };
501
+ if (args.nonGoals !== void 0 && patch.nonGoals === void 0) return {
502
+ ok: false,
503
+ error: "Invalid nonGoals"
504
+ };
505
+ if (args.health !== void 0 && patch.health === void 0) return {
506
+ ok: false,
507
+ error: "Invalid project health"
508
+ };
509
+ if (args.targetAt !== void 0 && patch.targetAt === void 0) return {
510
+ ok: false,
511
+ error: "Invalid targetAt"
512
+ };
367
513
  if (dryRun) return {
368
514
  ok: true,
369
515
  dryRun: true,
@@ -376,35 +522,385 @@ async function handleProject(command, args, deps, dryRun) {
376
522
  project: projects.update(id, patch)
377
523
  };
378
524
  }
525
+ const projectId = trimString(args.projectId) ?? trimString(args.id);
526
+ if (command === "list_milestones") {
527
+ if (!projectId) return {
528
+ ok: false,
529
+ error: "projectId is required"
530
+ };
531
+ return {
532
+ ok: true,
533
+ projectId,
534
+ items: projects.listMilestones(projectId)
535
+ };
536
+ }
537
+ if (command === "create_milestone") {
538
+ if (!projectId) return {
539
+ ok: false,
540
+ error: "projectId is required"
541
+ };
542
+ const title = trimString(args.title);
543
+ const status = args.status === void 0 ? void 0 : enumValue(args.status, MILESTONE_STATUSES);
544
+ const targetAt = args.targetAt === void 0 ? void 0 : finiteNumber(args.targetAt);
545
+ const sortOrder = args.sortOrder === void 0 ? void 0 : finiteNumber(args.sortOrder);
546
+ if (!title) return {
547
+ ok: false,
548
+ error: "title is required"
549
+ };
550
+ if (args.status !== void 0 && !status) return {
551
+ ok: false,
552
+ error: "Invalid milestone status"
553
+ };
554
+ if (args.targetAt !== void 0 && targetAt === void 0) return {
555
+ ok: false,
556
+ error: "Invalid targetAt"
557
+ };
558
+ if (args.sortOrder !== void 0 && sortOrder === void 0) return {
559
+ ok: false,
560
+ error: "Invalid sortOrder"
561
+ };
562
+ const input = {
563
+ title,
564
+ description: trimString(args.description),
565
+ status,
566
+ targetAt,
567
+ sortOrder
568
+ };
569
+ if (dryRun) return {
570
+ ok: true,
571
+ dryRun: true,
572
+ action: "create_project_milestone",
573
+ projectId,
574
+ input
575
+ };
576
+ return {
577
+ ok: true,
578
+ milestone: projects.createMilestone(projectId, input),
579
+ project: projects.get(projectId)
580
+ };
581
+ }
582
+ if (command === "update_milestone") {
583
+ if (!projectId) return {
584
+ ok: false,
585
+ error: "projectId is required"
586
+ };
587
+ const milestoneId = trimString(args.milestoneId);
588
+ if (!milestoneId) return {
589
+ ok: false,
590
+ error: "milestoneId is required"
591
+ };
592
+ const patch = {
593
+ ...args.title !== void 0 ? { title: trimString(args.title) ?? "" } : {},
594
+ ...args.description !== void 0 ? { description: optionalString(args.description) } : {},
595
+ ...args.status !== void 0 ? { status: enumValue(args.status, MILESTONE_STATUSES) } : {},
596
+ ...args.targetAt !== void 0 ? { targetAt: nullableFiniteNumber(args.targetAt) } : {},
597
+ ...args.sortOrder !== void 0 ? { sortOrder: finiteNumber(args.sortOrder) } : {}
598
+ };
599
+ if (args.status !== void 0 && patch.status === void 0) return {
600
+ ok: false,
601
+ error: "Invalid milestone status"
602
+ };
603
+ if (args.targetAt !== void 0 && patch.targetAt === void 0) return {
604
+ ok: false,
605
+ error: "Invalid targetAt"
606
+ };
607
+ if (args.sortOrder !== void 0 && patch.sortOrder === void 0) return {
608
+ ok: false,
609
+ error: "Invalid sortOrder"
610
+ };
611
+ if (dryRun) return {
612
+ ok: true,
613
+ dryRun: true,
614
+ action: "update_project_milestone",
615
+ projectId,
616
+ milestoneId,
617
+ patch
618
+ };
619
+ return {
620
+ ok: true,
621
+ milestone: projects.updateMilestone(projectId, milestoneId, patch),
622
+ project: projects.get(projectId)
623
+ };
624
+ }
625
+ if (command === "list_updates") {
626
+ if (!projectId) return {
627
+ ok: false,
628
+ error: "projectId is required"
629
+ };
630
+ return {
631
+ ok: true,
632
+ projectId,
633
+ items: projects.listUpdates(projectId, boundedLimit(args.limit))
634
+ };
635
+ }
636
+ if (command === "create_update") {
637
+ if (!projectId) return {
638
+ ok: false,
639
+ error: "projectId is required"
640
+ };
641
+ const health = enumValue(args.health, PROJECT_HEALTHS);
642
+ const summary = trimString(args.summary);
643
+ const progress = args.progress === void 0 ? void 0 : stringArray(args.progress);
644
+ const risks = args.risks === void 0 ? void 0 : stringArray(args.risks);
645
+ const nextSteps = args.nextSteps === void 0 ? void 0 : stringArray(args.nextSteps);
646
+ if (!health) return {
647
+ ok: false,
648
+ error: "health is required"
649
+ };
650
+ if (!summary) return {
651
+ ok: false,
652
+ error: "summary is required"
653
+ };
654
+ if (args.progress !== void 0 && !progress) return {
655
+ ok: false,
656
+ error: "Invalid progress"
657
+ };
658
+ if (args.risks !== void 0 && !risks) return {
659
+ ok: false,
660
+ error: "Invalid risks"
661
+ };
662
+ if (args.nextSteps !== void 0 && !nextSteps) return {
663
+ ok: false,
664
+ error: "Invalid nextSteps"
665
+ };
666
+ const input = {
667
+ health,
668
+ summary,
669
+ progress,
670
+ risks,
671
+ nextSteps,
672
+ actor: {
673
+ kind: "agent",
674
+ agentId: deps.getCurrentAgentId?.(),
675
+ sessionKey: deps.getCurrentSessionKey?.()
676
+ }
677
+ };
678
+ if (dryRun) return {
679
+ ok: true,
680
+ dryRun: true,
681
+ action: "create_project_update",
682
+ projectId,
683
+ input
684
+ };
685
+ return {
686
+ ok: true,
687
+ update: projects.createUpdate(projectId, input),
688
+ project: projects.get(projectId)
689
+ };
690
+ }
379
691
  return {
380
692
  ok: false,
381
693
  error: `Unsupported project command: ${command}`
382
694
  };
383
695
  }
696
+ async function handleAutomation(command, args, deps, dryRun) {
697
+ const automations = deps.getAutomationService?.();
698
+ if (!automations) return {
699
+ ok: false,
700
+ error: "Automation service is unavailable"
701
+ };
702
+ if (command === "list") {
703
+ const projectId = currentProjectId(args, deps);
704
+ const projectError = automationProjectError(projectId, deps);
705
+ if (projectError) return {
706
+ ok: false,
707
+ error: projectError
708
+ };
709
+ return {
710
+ ok: true,
711
+ items: await automations.list({ projectId }),
712
+ ...projectId ? { projectId } : {}
713
+ };
714
+ }
715
+ if (command === "get") {
716
+ const id = trimString(args.automationId) ?? trimString(args.id);
717
+ if (!id) return {
718
+ ok: false,
719
+ error: "automationId is required"
720
+ };
721
+ const automation = await automations.get(id);
722
+ return automation ? {
723
+ ok: true,
724
+ automation
725
+ } : {
726
+ ok: false,
727
+ error: `Automation not found: ${id}`
728
+ };
729
+ }
730
+ if (command === "create") {
731
+ const source = automationPayload(args, "automation");
732
+ const projectId = trimString(args.projectId) ?? trimString(source.projectId) ?? currentProjectId({}, deps);
733
+ const projectError = automationProjectError(projectId, deps);
734
+ if (projectError) return {
735
+ ok: false,
736
+ error: projectError
737
+ };
738
+ const input = CreateAutomationSchema.parse({
739
+ ...pickDefined(source, [
740
+ "id",
741
+ "name",
742
+ "description",
743
+ "enabled",
744
+ "trigger",
745
+ "action",
746
+ "safety",
747
+ "afterRun",
748
+ "reliability",
749
+ "state"
750
+ ]),
751
+ ...projectId ? { projectId } : {}
752
+ });
753
+ if (dryRun) return {
754
+ ok: true,
755
+ dryRun: true,
756
+ action: "create_automation",
757
+ input,
758
+ projectId
759
+ };
760
+ return {
761
+ ok: true,
762
+ automation: await automations.create(input),
763
+ ...projectId ? { projectId } : {}
764
+ };
765
+ }
766
+ if (command === "update") {
767
+ const id = trimString(args.automationId) ?? trimString(args.id);
768
+ if (!id) return {
769
+ ok: false,
770
+ error: "automationId is required"
771
+ };
772
+ const source = automationPayload(args, "patch");
773
+ const patch = UpdateAutomationSchema.parse(pickDefined(source, [
774
+ "name",
775
+ "description",
776
+ "projectId",
777
+ "enabled",
778
+ "trigger",
779
+ "action",
780
+ "safety",
781
+ "afterRun",
782
+ "reliability",
783
+ "state"
784
+ ]));
785
+ const projectError = automationProjectError(patch.projectId, deps);
786
+ if (projectError) return {
787
+ ok: false,
788
+ error: projectError
789
+ };
790
+ if (dryRun) return {
791
+ ok: true,
792
+ dryRun: true,
793
+ action: "update_automation",
794
+ automationId: id,
795
+ patch
796
+ };
797
+ const automation = await automations.update(id, patch);
798
+ return automation ? {
799
+ ok: true,
800
+ automation
801
+ } : {
802
+ ok: false,
803
+ error: `Automation not found: ${id}`
804
+ };
805
+ }
806
+ if (command === "history") {
807
+ const automationId = trimString(args.automationId) ?? trimString(args.id);
808
+ const projectId = automationId ? void 0 : currentProjectId(args, deps);
809
+ const projectError = automationProjectError(projectId, deps);
810
+ if (projectError) return {
811
+ ok: false,
812
+ error: projectError
813
+ };
814
+ return {
815
+ ok: true,
816
+ items: await automations.listRuns({
817
+ automationId,
818
+ projectId,
819
+ limit: boundedLimit(args.limit, 20, 50)
820
+ }),
821
+ ...projectId ? { projectId } : {}
822
+ };
823
+ }
824
+ if (![
825
+ "delete",
826
+ "run",
827
+ "pause",
828
+ "resume"
829
+ ].includes(command)) return {
830
+ ok: false,
831
+ error: `Unsupported automation command: ${command}`
832
+ };
833
+ const id = trimString(args.automationId) ?? trimString(args.id);
834
+ if (!id) return {
835
+ ok: false,
836
+ error: "automationId is required"
837
+ };
838
+ const current = await automations.get(id);
839
+ if (!current) return {
840
+ ok: false,
841
+ error: `Automation not found: ${id}`
842
+ };
843
+ if (dryRun) return {
844
+ ok: true,
845
+ dryRun: true,
846
+ action: `${command}_automation`,
847
+ automationId: id,
848
+ automation: current
849
+ };
850
+ if (command === "delete") return {
851
+ ok: true,
852
+ removed: await automations.remove(id),
853
+ automation: current
854
+ };
855
+ if (command === "run") return {
856
+ ok: true,
857
+ automation: current,
858
+ run: await automations.runNow(id)
859
+ };
860
+ if (command === "pause" || command === "resume") {
861
+ const automation = command === "pause" ? await automations.pause(id) : await automations.resume(id);
862
+ return automation ? {
863
+ ok: true,
864
+ automation
865
+ } : {
866
+ ok: false,
867
+ error: `Automation not found: ${id}`
868
+ };
869
+ }
870
+ return {
871
+ ok: false,
872
+ error: `Automation command failed: ${command}`
873
+ };
874
+ }
384
875
  async function handleNote(command, args, deps, dryRun) {
385
876
  const notes = deps.getNotesService?.();
386
877
  if (!notes) return {
387
878
  ok: false,
388
879
  error: "Notes service is unavailable"
389
880
  };
390
- if (command === "list") return {
391
- ok: true,
392
- ...await notes.listNotes({
393
- status: enumValue(args.status, NOTE_STATUSES),
394
- kind: enumValue(args.kind, NOTE_KINDS),
395
- tag: trimString(args.tag),
396
- search: trimString(args.search),
397
- pinned: typeof args.pinned === "boolean" ? args.pinned : void 0,
398
- limit: boundedLimit(args.limit),
399
- offset: offset(args.offset),
400
- sortBy: enumValue(args.sortBy, new Set([
401
- "createdAt",
402
- "updatedAt",
403
- "lastOpenedAt"
404
- ])),
405
- sortOrder: enumValue(args.sortOrder, new Set(["asc", "desc"]))
406
- })
407
- };
881
+ if (command === "list") {
882
+ const projectId = currentProjectId(args, deps);
883
+ return {
884
+ ok: true,
885
+ ...await notes.listNotes({
886
+ status: enumValue(args.status, NOTE_STATUSES),
887
+ kind: enumValue(args.kind, NOTE_KINDS),
888
+ tag: trimString(args.tag),
889
+ projectId,
890
+ search: trimString(args.search),
891
+ pinned: typeof args.pinned === "boolean" ? args.pinned : void 0,
892
+ limit: boundedLimit(args.limit),
893
+ offset: offset(args.offset),
894
+ sortBy: enumValue(args.sortBy, new Set([
895
+ "createdAt",
896
+ "updatedAt",
897
+ "lastOpenedAt"
898
+ ])),
899
+ sortOrder: enumValue(args.sortOrder, new Set(["asc", "desc"]))
900
+ }),
901
+ ...projectId ? { projectId } : {}
902
+ };
903
+ }
408
904
  if (command === "get") {
409
905
  const id = trimString(args.noteId) ?? trimString(args.id);
410
906
  if (!id) return {
@@ -421,6 +917,17 @@ async function handleNote(command, args, deps, dryRun) {
421
917
  };
422
918
  }
423
919
  if (command === "create") {
920
+ const projectId = currentProjectId(args, deps);
921
+ const projectService = projectId ? deps.getProjectService?.() : void 0;
922
+ if (projectId && !projectService) return {
923
+ ok: false,
924
+ error: "Project service is unavailable"
925
+ };
926
+ const project = projectId ? projectService?.get(projectId) : void 0;
927
+ if (projectId && !project) return {
928
+ ok: false,
929
+ error: `Project not found: ${projectId}`
930
+ };
424
931
  const markdown = typeof args.markdown === "string" ? args.markdown : trimString(args.content) ?? "";
425
932
  const input = {
426
933
  title: trimString(args.title),
@@ -434,11 +941,29 @@ async function handleNote(command, args, deps, dryRun) {
434
941
  ok: true,
435
942
  dryRun: true,
436
943
  action: "create_note",
437
- input
438
- };
944
+ input,
945
+ projectId
946
+ };
947
+ const note = await notes.createNote(input);
948
+ if (project) new ObjectLinkService().create({
949
+ id: `note:${note.id}:project:${project.id}`,
950
+ from: {
951
+ kind: "note",
952
+ id: note.id,
953
+ title: note.title
954
+ },
955
+ to: {
956
+ kind: "project",
957
+ id: project.id,
958
+ title: project.name
959
+ },
960
+ relation: "belongs_to",
961
+ source: "user"
962
+ });
439
963
  return {
440
964
  ok: true,
441
- note: await notes.createNote(input)
965
+ note,
966
+ ...projectId ? { projectId } : {}
442
967
  };
443
968
  }
444
969
  if (command === "append") {
@@ -548,151 +1073,470 @@ async function handleNote(command, args, deps, dryRun) {
548
1073
  error: `Unsupported note command: ${command}`
549
1074
  };
550
1075
  }
551
- async function handleWorkItem(command, args, deps, dryRun) {
552
- const workItems = deps.getWorkItemService?.();
553
- if (!workItems) return {
554
- ok: false,
555
- error: "Work item service is unavailable"
556
- };
1076
+ async function handleTask(command, args, deps, dryRun) {
1077
+ const tasks = new TaskRepository();
1078
+ const dependencies = new TaskDependencyService();
1079
+ const context = new TaskContextRepository();
1080
+ const runs = new TaskRunRepository();
1081
+ const projector = new TaskReadModelProjector();
557
1082
  if (command === "list") {
558
1083
  const projectId = currentProjectId(args, deps);
559
- if (!projectId) return {
560
- ok: false,
561
- error: "projectId is required"
562
- };
1084
+ const phase = enumValue(args.phase, TASK_PHASES);
1085
+ const priority = enumValue(args.priority, TASK_PRIORITIES);
1086
+ const search = trimString(args.search)?.toLocaleLowerCase();
1087
+ const start = offset(args.offset) ?? 0;
1088
+ const limit = boundedLimit(args.limit);
1089
+ const matching = (projectId ? tasks.listByProject(projectId, 200) : tasks.list({ limit: 200 })).filter((task) => (!phase || task.phase === phase) && (!priority || task.priority === priority) && (!search || `${task.title}\n${task.contract?.objective ?? ""}`.toLocaleLowerCase().includes(search)));
563
1090
  return {
564
1091
  ok: true,
565
- ...workItems.listProjectWorkItems(projectId, {
566
- status: enumValue(args.status, WORK_ITEM_STATUSES),
567
- priority: enumValue(args.priority, WORK_ITEM_PRIORITIES),
568
- includeArchived: args.includeArchived === true,
569
- search: trimString(args.search),
570
- sortBy: enumValue(args.sortBy, new Set([
571
- "updatedAt",
572
- "createdAt",
573
- "priority",
574
- "status"
575
- ])),
576
- sortOrder: enumValue(args.sortOrder, new Set(["asc", "desc"])),
577
- limit: boundedLimit(args.limit),
578
- offset: offset(args.offset)
579
- })
1092
+ items: matching.slice(start, start + limit),
1093
+ total: matching.length,
1094
+ ...projectId ? { projectId } : {}
580
1095
  };
581
1096
  }
582
1097
  if (command === "get") {
583
- const id = trimString(args.workItemId) ?? trimString(args.id);
1098
+ const id = trimString(args.taskId) ?? trimString(args.id);
584
1099
  if (!id) return {
585
1100
  ok: false,
586
- error: "workItemId is required"
1101
+ error: "taskId is required"
587
1102
  };
588
- const item = workItems.getWorkItem(id);
589
- return item ? {
590
- ok: true,
591
- item
592
- } : {
1103
+ const task = tasks.get(id);
1104
+ if (!task) return {
593
1105
  ok: false,
594
- error: `Work item not found: ${id}`
1106
+ error: `Task not found: ${id}`
1107
+ };
1108
+ const model = projector.project(task);
1109
+ return {
1110
+ ok: true,
1111
+ task,
1112
+ model,
1113
+ operationalState: model.operationalState,
1114
+ attention: model.attention,
1115
+ allowedCommands: model.allowedCommands,
1116
+ dependencies: dependencies.listDependencies(id),
1117
+ dependents: dependencies.listDependents(id),
1118
+ context: context.list(id),
1119
+ authorityGrants: context.listActiveGrants(id),
1120
+ runs: runs.listByTask(id),
1121
+ receipts: runs.listReceipts(id),
1122
+ waits: runs.listActiveWaits(id)
595
1123
  };
596
1124
  }
597
1125
  if (command === "create") {
1126
+ const objective = trimString(args.objective) ?? trimString(args.title);
1127
+ if (!objective) return {
1128
+ ok: false,
1129
+ error: "objective is required"
1130
+ };
1131
+ const createMode = args.createMode === void 0 ? "capture" : enumValue(args.createMode, TASK_CREATE_MODES);
1132
+ if (!createMode) return {
1133
+ ok: false,
1134
+ error: "Invalid createMode"
1135
+ };
1136
+ if (createMode === "start" && !deps.dispatchTaskRuns) return {
1137
+ ok: false,
1138
+ error: "Task execution service is unavailable"
1139
+ };
598
1140
  const projectId = currentProjectId(args, deps);
599
- const title = trimString(args.title);
600
- if (!projectId) return {
1141
+ if (projectId) {
1142
+ const projects = deps.getProjectService?.();
1143
+ if (!projects) return {
1144
+ ok: false,
1145
+ error: "Project service is unavailable"
1146
+ };
1147
+ if (!projects.get(projectId)) return {
1148
+ ok: false,
1149
+ error: `Project not found: ${projectId}`
1150
+ };
1151
+ }
1152
+ const priority = args.priority === void 0 ? void 0 : enumValue(args.priority, TASK_PRIORITIES);
1153
+ if (args.priority !== void 0 && !priority) return {
601
1154
  ok: false,
602
- error: "projectId is required"
1155
+ error: "Invalid task priority"
603
1156
  };
604
- if (!title) return {
1157
+ const dueAt = args.dueAt === void 0 ? void 0 : finiteNumber(args.dueAt);
1158
+ if (args.dueAt !== void 0 && (dueAt === void 0 || dueAt < 0)) return {
605
1159
  ok: false,
606
- error: "title is required"
1160
+ error: "Invalid dueAt"
1161
+ };
1162
+ const locale = args.locale === void 0 ? void 0 : enumValue(args.locale, new Set(["en", "zh"]));
1163
+ if (args.locale !== void 0 && !locale) return {
1164
+ ok: false,
1165
+ error: "Invalid locale"
607
1166
  };
1167
+ const dependsOnTaskIds = args.dependsOnTaskIds === void 0 ? [] : stringArray(args.dependsOnTaskIds);
1168
+ if (!dependsOnTaskIds) return {
1169
+ ok: false,
1170
+ error: "Invalid dependsOnTaskIds"
1171
+ };
1172
+ const baseContract = defineTaskContract(objective);
1173
+ const contractFields = [
1174
+ "expectedOutputs",
1175
+ "acceptanceCriteria",
1176
+ "constraints",
1177
+ "approvalRequired",
1178
+ "assumptions",
1179
+ "risks"
1180
+ ];
1181
+ const contract = { ...baseContract };
1182
+ for (const field of contractFields) {
1183
+ if (args[field] === void 0) continue;
1184
+ const value = stringArray(args[field]);
1185
+ if (!value) return {
1186
+ ok: false,
1187
+ error: `Invalid ${field}`
1188
+ };
1189
+ contract[field] = value;
1190
+ }
1191
+ const sessionKey = trimString(args.sessionKey) ?? deps.getCurrentSessionKey?.();
1192
+ const agentId = trimString(args.agentId) ?? deps.getCurrentAgentId?.() ?? "main";
608
1193
  const input = {
609
- title,
610
- description: trimString(args.description),
611
- status: enumValue(args.status, WORK_ITEM_STATUSES),
612
- priority: enumValue(args.priority, WORK_ITEM_PRIORITIES),
613
- ownerAgentId: trimString(args.ownerAgentId),
614
- nextAction: trimString(args.nextAction),
615
- blockedReason: trimString(args.blockedReason),
616
- dueAt: finiteNumber(args.dueAt)
1194
+ idempotencyKey: trimString(args.idempotencyKey) ?? randomUUID(),
1195
+ title: trimString(args.title) ?? objective,
1196
+ priority: priority ?? "normal",
1197
+ ...dueAt === void 0 ? {} : { dueAt },
1198
+ ...projectId ? { projectId } : {},
1199
+ ...locale ? { locale } : {},
1200
+ contract: {
1201
+ ...contract,
1202
+ acceptancePolicy: "verified_auto",
1203
+ outputDestinations: []
1204
+ },
1205
+ dependencies: dependsOnTaskIds,
1206
+ context: sessionKey ? [{
1207
+ targetKind: "session",
1208
+ targetId: sessionKey,
1209
+ role: "input",
1210
+ pinned: false,
1211
+ retrievalPolicy: {},
1212
+ metadata: {}
1213
+ }] : [],
1214
+ authorityGrants: [],
1215
+ activation: createMode === "capture" ? {
1216
+ mode: "capture",
1217
+ phase: "backlog"
1218
+ } : {
1219
+ mode: "start",
1220
+ executor: {
1221
+ kind: "agent",
1222
+ agentId
1223
+ }
1224
+ }
1225
+ };
1226
+ if (dryRun) return {
1227
+ ok: true,
1228
+ dryRun: true,
1229
+ action: "create_task",
1230
+ createMode,
1231
+ input,
1232
+ dependsOnTaskIds
1233
+ };
1234
+ const created = new TaskApplicationService().create(input, {
1235
+ kind: "agent",
1236
+ id: agentId
1237
+ });
1238
+ if (created.ok === false) return {
1239
+ ok: false,
1240
+ error: created.reason,
1241
+ ...created
1242
+ };
1243
+ if (created.runId) deps.dispatchTaskRuns?.();
1244
+ return {
1245
+ ok: true,
1246
+ task: created.model.task,
1247
+ operationalState: created.model.operationalState,
1248
+ createMode,
1249
+ ...created.runId ? { runId: created.runId } : {}
617
1250
  };
618
- if (args.status !== void 0 && input.status === void 0) return {
1251
+ }
1252
+ if (command === "update_dependencies") {
1253
+ const id = trimString(args.taskId) ?? trimString(args.id);
1254
+ const expectedVersion = finiteNumber(args.expectedVersion);
1255
+ const dependsOnTaskIds = stringArray(args.dependsOnTaskIds);
1256
+ if (!id) return {
619
1257
  ok: false,
620
- error: "Invalid work item status"
1258
+ error: "taskId is required"
621
1259
  };
622
- if (args.priority !== void 0 && input.priority === void 0) return {
1260
+ if (expectedVersion === void 0 || !Number.isInteger(expectedVersion) || expectedVersion < 1) return {
623
1261
  ok: false,
624
- error: "Invalid work item priority"
1262
+ error: "expectedVersion is required"
625
1263
  };
626
- if (args.dueAt !== void 0 && input.dueAt === void 0) return {
1264
+ if (!dependsOnTaskIds) return {
627
1265
  ok: false,
628
- error: "Invalid dueAt"
1266
+ error: "dependsOnTaskIds is required"
629
1267
  };
630
1268
  if (dryRun) return {
631
1269
  ok: true,
632
1270
  dryRun: true,
633
- action: "create_work_item",
634
- projectId,
1271
+ action: "update_task_dependencies",
1272
+ taskId: id,
1273
+ expectedVersion,
1274
+ dependsOnTaskIds
1275
+ };
1276
+ try {
1277
+ return {
1278
+ ok: true,
1279
+ task: dependencies.replace({
1280
+ taskId: id,
1281
+ dependsOnTaskIds,
1282
+ expectedVersion
1283
+ }),
1284
+ dependencies: dependencies.listDependencies(id),
1285
+ dependents: dependencies.listDependents(id)
1286
+ };
1287
+ } catch (error) {
1288
+ if (!(error instanceof TaskDependencyError)) throw error;
1289
+ return {
1290
+ ok: false,
1291
+ error: error.message,
1292
+ reason: error.code
1293
+ };
1294
+ }
1295
+ }
1296
+ if (command === "add_context") {
1297
+ const id = trimString(args.taskId) ?? trimString(args.id);
1298
+ if (!id) return {
1299
+ ok: false,
1300
+ error: "taskId is required"
1301
+ };
1302
+ if (!tasks.get(id)) return {
1303
+ ok: false,
1304
+ error: `Task not found: ${id}`
1305
+ };
1306
+ const parsed = TaskContextInputSchema.safeParse({
1307
+ targetKind: args.targetKind,
1308
+ targetId: args.targetId,
1309
+ role: args.role,
1310
+ title: args.title,
1311
+ pinned: args.pinned === true,
1312
+ retrievalPolicy: record(args.retrievalPolicy) ?? {},
1313
+ metadata: record(args.metadata) ?? {}
1314
+ });
1315
+ if (!parsed.success) return {
1316
+ ok: false,
1317
+ error: "Invalid task context edge"
1318
+ };
1319
+ const input = {
1320
+ taskId: id,
1321
+ ...parsed.data,
1322
+ createdBy: {
1323
+ kind: "agent",
1324
+ id: deps.getCurrentAgentId?.()
1325
+ }
1326
+ };
1327
+ if (dryRun) return {
1328
+ ok: true,
1329
+ dryRun: true,
1330
+ action: "add_task_context",
635
1331
  input
636
1332
  };
637
1333
  return {
638
1334
  ok: true,
639
- item: workItems.createProjectWorkItem(projectId, input)
1335
+ edge: context.add(input),
1336
+ context: context.list(id)
640
1337
  };
641
1338
  }
642
- if (command === "update") {
643
- const id = trimString(args.workItemId) ?? trimString(args.id);
1339
+ if (command === "remove_context") {
1340
+ const id = trimString(args.taskId) ?? trimString(args.id);
1341
+ const edgeId = trimString(args.edgeId);
644
1342
  if (!id) return {
645
1343
  ok: false,
646
- error: "workItemId is required"
1344
+ error: "taskId is required"
647
1345
  };
648
- const dueAt = args.dueAt !== void 0 ? nullableNumber(args.dueAt) : void 0;
649
- const archivedAt = args.archivedAt !== void 0 ? nullableNumber(args.archivedAt) : void 0;
650
- const patch = {
651
- ...args.title !== void 0 ? { title: trimString(args.title) ?? "" } : {},
652
- ...args.description !== void 0 ? { description: optionalString(args.description) } : {},
653
- ...args.status !== void 0 ? { status: enumValue(args.status, WORK_ITEM_STATUSES) } : {},
654
- ...args.priority !== void 0 ? { priority: enumValue(args.priority, WORK_ITEM_PRIORITIES) } : {},
655
- ...args.ownerAgentId !== void 0 ? { ownerAgentId: optionalString(args.ownerAgentId) } : {},
656
- ...args.nextAction !== void 0 ? { nextAction: optionalString(args.nextAction) } : {},
657
- ...args.blockedReason !== void 0 ? { blockedReason: optionalString(args.blockedReason) } : {},
658
- ...args.dueAt !== void 0 ? { dueAt } : {},
659
- ...args.archivedAt !== void 0 ? { archivedAt } : {}
1346
+ if (!edgeId) return {
1347
+ ok: false,
1348
+ error: "edgeId is required"
660
1349
  };
661
- if (args.status !== void 0 && patch.status === void 0) return {
1350
+ if (dryRun) return {
1351
+ ok: true,
1352
+ dryRun: true,
1353
+ action: "remove_task_context",
1354
+ taskId: id,
1355
+ edgeId
1356
+ };
1357
+ return context.remove(id, edgeId) ? {
1358
+ ok: true,
1359
+ taskId: id,
1360
+ edgeId,
1361
+ context: context.list(id)
1362
+ } : {
662
1363
  ok: false,
663
- error: "Invalid work item status"
1364
+ error: `Task context edge not found: ${edgeId}`
664
1365
  };
665
- if (args.priority !== void 0 && patch.priority === void 0) return {
1366
+ }
1367
+ if (command === "command") {
1368
+ const id = trimString(args.taskId) ?? trimString(args.id);
1369
+ const commandType = enumValue(args.type, TASK_COMMANDS);
1370
+ const expectedVersion = finiteNumber(args.expectedVersion);
1371
+ if (!id) return {
666
1372
  ok: false,
667
- error: "Invalid work item priority"
1373
+ error: "taskId is required"
668
1374
  };
669
- if (args.dueAt !== void 0 && dueAt === void 0) return {
1375
+ if (!commandType) return {
670
1376
  ok: false,
671
- error: "Invalid dueAt"
1377
+ error: "Invalid task command type"
672
1378
  };
673
- if (args.archivedAt !== void 0 && archivedAt === void 0) return {
1379
+ if (expectedVersion === void 0 || !Number.isInteger(expectedVersion) || expectedVersion < 1) return {
674
1380
  ok: false,
675
- error: "Invalid archivedAt"
1381
+ error: "expectedVersion is required"
1382
+ };
1383
+ if (commandType === "start" && !deps.dispatchTaskRuns) return {
1384
+ ok: false,
1385
+ error: "Task execution service is unavailable"
1386
+ };
1387
+ const commandArgs = args.commandArgs && typeof args.commandArgs === "object" ? args.commandArgs : {};
1388
+ const parsedCommand = TaskCommandSchema.safeParse({
1389
+ type: commandType,
1390
+ ...commandArgs
1391
+ });
1392
+ if (!parsedCommand.success) return {
1393
+ ok: false,
1394
+ error: "Invalid task command payload"
676
1395
  };
677
1396
  if (dryRun) return {
678
1397
  ok: true,
679
1398
  dryRun: true,
680
- action: "update_work_item",
681
- workItemId: id,
682
- patch
1399
+ action: "execute_task_command",
1400
+ taskId: id,
1401
+ command: parsedCommand.data,
1402
+ expectedVersion
1403
+ };
1404
+ const result = new TaskApplicationService().execute({
1405
+ taskId: id,
1406
+ idempotencyKey: trimString(args.idempotencyKey) ?? randomUUID(),
1407
+ expectedVersion,
1408
+ command: parsedCommand.data,
1409
+ actor: {
1410
+ kind: "agent",
1411
+ id: deps.getCurrentAgentId?.()
1412
+ }
1413
+ });
1414
+ if (result.ok === false) return {
1415
+ ok: false,
1416
+ error: result.reason,
1417
+ command: parsedCommand.data,
1418
+ ...result
683
1419
  };
684
- const item = workItems.updateWorkItem(id, patch);
685
- return item ? {
1420
+ if (result.runId) deps.dispatchTaskRuns?.();
1421
+ return {
686
1422
  ok: true,
687
- item
688
- } : {
1423
+ task: result.model.task,
1424
+ operationalState: result.model.operationalState,
1425
+ command: parsedCommand.data,
1426
+ ...result.runId ? { runId: result.runId } : {}
1427
+ };
1428
+ }
1429
+ return {
1430
+ ok: false,
1431
+ error: `Unsupported task command: ${command}`
1432
+ };
1433
+ }
1434
+ async function handleTaskRun(command, args, dryRun, deps) {
1435
+ const runs = new TaskRunRepository();
1436
+ if (command === "list") {
1437
+ const taskId = trimString(args.taskId);
1438
+ if (!taskId) return {
1439
+ ok: false,
1440
+ error: "taskId is required"
1441
+ };
1442
+ const limit = boundedLimit(args.limit);
1443
+ return {
1444
+ ok: true,
1445
+ taskId,
1446
+ items: runs.listByTask(taskId).slice(0, limit),
1447
+ receipts: runs.listReceipts(taskId, limit),
1448
+ activeWaits: runs.listActiveWaits(taskId)
1449
+ };
1450
+ }
1451
+ if (command === "get") {
1452
+ const runId = trimString(args.runId) ?? trimString(args.id);
1453
+ if (!runId) return {
689
1454
  ok: false,
690
- error: `Work item not found: ${id}`
1455
+ error: "runId is required"
1456
+ };
1457
+ const run = runs.get(runId);
1458
+ if (!run) return {
1459
+ ok: false,
1460
+ error: `TaskRun not found: ${runId}`
1461
+ };
1462
+ return {
1463
+ ok: true,
1464
+ run,
1465
+ receipt: runs.getReceipt(runId),
1466
+ events: runs.listEvents(runId),
1467
+ activeWaits: runs.listActiveWaits(run.taskId)
1468
+ };
1469
+ }
1470
+ if (command === "cancel") {
1471
+ const runId = trimString(args.runId) ?? trimString(args.id);
1472
+ const expectedVersion = finiteNumber(args.expectedVersion);
1473
+ if (!runId) return {
1474
+ ok: false,
1475
+ error: "runId is required"
1476
+ };
1477
+ if (expectedVersion === void 0 || !Number.isInteger(expectedVersion) || expectedVersion < 1) return {
1478
+ ok: false,
1479
+ error: "expectedVersion is required"
1480
+ };
1481
+ const run = runs.get(runId);
1482
+ if (!run) return {
1483
+ ok: false,
1484
+ error: `TaskRun not found: ${runId}`
1485
+ };
1486
+ if (run.version !== expectedVersion) return {
1487
+ ok: false,
1488
+ error: "TaskRun changed",
1489
+ reason: "conflict",
1490
+ run
1491
+ };
1492
+ const task = new TaskRepository().require(run.taskId);
1493
+ const reason = trimString(args.reason) ?? "TaskRun cancelled by agent";
1494
+ if (dryRun) return {
1495
+ ok: true,
1496
+ dryRun: true,
1497
+ action: "cancel_task_run",
1498
+ runId,
1499
+ expectedVersion,
1500
+ reason
1501
+ };
1502
+ const result = new TaskApplicationService().completeRun({
1503
+ runId,
1504
+ expectedRunVersion: expectedVersion,
1505
+ actor: {
1506
+ kind: "agent",
1507
+ id: deps.getCurrentAgentId?.()
1508
+ },
1509
+ terminalCode: "cancelled_by_agent",
1510
+ terminalMessage: reason,
1511
+ receipt: {
1512
+ status: "cancelled",
1513
+ summary: reason,
1514
+ changes: [],
1515
+ evidence: [],
1516
+ verification: {
1517
+ status: "unverified",
1518
+ checks: []
1519
+ },
1520
+ remainingWork: [task.contract?.objective ?? task.title],
1521
+ needsUser: false,
1522
+ completionVerdict: "not_achieved"
1523
+ }
1524
+ });
1525
+ if (result.ok === false) return {
1526
+ ok: false,
1527
+ error: result.reason,
1528
+ ...result
1529
+ };
1530
+ return {
1531
+ ok: true,
1532
+ run: runs.get(runId),
1533
+ receipt: runs.getReceipt(runId),
1534
+ model: result.model
691
1535
  };
692
1536
  }
693
1537
  return {
694
1538
  ok: false,
695
- error: `Unsupported work_item command: ${command}`
1539
+ error: `Unsupported task_run command: ${command}`
696
1540
  };
697
1541
  }
698
1542
  async function handleLocalApp(command, args, deps, dryRun) {
@@ -791,7 +1635,7 @@ function createXopcUseTool(deps) {
791
1635
  return {
792
1636
  name: "xopc_use",
793
1637
  label: "XOPC Use",
794
- description: "Operate first-class xopc objects through one safe entry point. Use for projects, notes, project work items, local apps, and exact settings jump targets instead of editing storage files directly. For non-trivial object changes, load the built-in manual first with tool_manual({ tool: \"xopc_use\" }).",
1638
+ description: "Operate first-class xopc objects through one safe entry point. Use for projects, automations, notes, tasks, TaskRuns, local apps, and exact settings jump targets instead of editing storage files directly. For non-trivial object changes, load the built-in manual first with tool_manual({ tool: \"xopc_use\" }).",
795
1639
  parameters: XopcUseToolSchema,
796
1640
  mutatesWorkspace: true,
797
1641
  mutationScope: "external",
@@ -825,7 +1669,7 @@ function createXopcUseTool(deps) {
825
1669
  kind: "xopc_use",
826
1670
  toolCallId
827
1671
  }
828
- }, async () => mode === "project" ? await handleProject(command, args, deps, dryRun) : mode === "note" ? await handleNote(command, args, deps, dryRun) : mode === "work_item" ? await handleWorkItem(command, args, deps, dryRun) : mode === "local_app" ? await handleLocalApp(command, args, deps, dryRun) : mode === "settings" ? handleSettings(command, args) : {
1672
+ }, async () => mode === "project" ? await handleProject(command, args, deps, dryRun) : mode === "automation" ? await handleAutomation(command, args, deps, dryRun) : mode === "note" ? await handleNote(command, args, deps, dryRun) : mode === "task" ? await handleTask(command, args, deps, dryRun) : mode === "task_run" ? await handleTaskRun(command, args, dryRun, deps) : mode === "local_app" ? await handleLocalApp(command, args, deps, dryRun) : mode === "settings" ? handleSettings(command, args) : {
829
1673
  ok: false,
830
1674
  error: `Unsupported mode: ${String(mode)}`
831
1675
  });