@xopcai/xopc 0.0.142 → 0.0.143

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 (543) hide show
  1. package/README.md +1 -1
  2. package/dist/browser-ext/manifest.json +1 -1
  3. package/dist/extensions/telegram/xopc.extension.json +1 -1
  4. package/dist/gateway/static/root/assets/activity-center-store-jITiX2vJ.js +1 -0
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BawPxiu5.js → agent-avatar-dicebear-DiME9u_P.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-DzBXhZXO.js +2 -0
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-81xd1p9R.js → app-management-settings-panel-Cuo7SbUP.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DYeQsYU8.js → appearance-settings-DUfdNQqk.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-CKuKK5AU.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-D_oa7oti.js → archive-plugin-B-Qk6cGr.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-Cd-bwI2N.js → attachment-load-Di6EEbQX.js} +1 -1
  12. package/dist/gateway/static/root/assets/automation-suggestion-card-DGxvRxtO.js +1 -0
  13. package/dist/gateway/static/root/assets/automations-page-D-FF_WKV.js +4 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-O8svLKWw.js → binary-plugins-ZaOZDH2I.js} +1 -1
  15. package/dist/gateway/static/root/assets/block-editor-BTFhjWfg.js +184 -0
  16. package/dist/gateway/static/root/assets/browser-settings-page-BvKLdEQt.js +8 -0
  17. package/dist/gateway/static/root/assets/{capability-presets-api-dJy1Eqgx.js → capability-presets-api-BU-pVZiZ.js} +1 -1
  18. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DgyeEwzh.js +2 -0
  19. package/dist/gateway/static/root/assets/{channel-recipient-api-Bfuhp2ty.js → channel-recipient-api-DuulnhIj.js} +1 -1
  20. package/dist/gateway/static/root/assets/channels-settings-BbVsdD_I.js +1 -0
  21. package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +1 -0
  22. package/dist/gateway/static/root/assets/check-BODqo66o.js +1 -0
  23. package/dist/gateway/static/root/assets/chunk-QUQL4437-DXsxWP7r.js +4 -0
  24. package/dist/gateway/static/root/assets/circle-alert-RzVebuX2.js +1 -0
  25. package/dist/gateway/static/root/assets/connectors-page-B8QqVy3I.js +2 -0
  26. package/dist/gateway/static/root/assets/{desktop-pet-DFMfIb5F.js → desktop-pet---yzVxVR.js} +1 -1
  27. package/dist/gateway/static/root/assets/desktop-pet-settings-Dc3gqBJE.js +1 -0
  28. package/dist/gateway/static/root/assets/{directory-picker-path-field-BrYt1gAr.js → directory-picker-path-field-DCmOGLtK.js} +1 -1
  29. package/dist/gateway/static/root/assets/dreaming-settings-BgT5KZVe.js +3 -0
  30. package/dist/gateway/static/root/assets/{extension-debug-page-Bh630pLD.js → extension-debug-page-ByaKTTq4.js} +1 -1
  31. package/dist/gateway/static/root/assets/extension-page-BmRzHAZr.js +1 -0
  32. package/dist/gateway/static/root/assets/extension-settings-page-JUtwIhbF.js +1 -0
  33. package/dist/gateway/static/root/assets/{fetch-B1WtuprY.js → fetch-8QNN25Sh.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-config-api-De2N821l.js → gateway-config-api-CxicF50_.js} +1 -1
  35. package/dist/gateway/static/root/assets/gateway-settings-Bz2I_EO5.js +1 -0
  36. package/dist/gateway/static/root/assets/{gateway-startup-retry-nEujFSDj.js → gateway-startup-retry-5YBnS9Fj.js} +1 -1
  37. package/dist/gateway/static/root/assets/goal-create-dialog-VcoyuZGN.js +1 -0
  38. package/dist/gateway/static/root/assets/goal-detail-page-Cilkap2G.js +4 -0
  39. package/dist/gateway/static/root/assets/{goals-config-api-DUy3eEse.js → goals-config-api-CwcHRdC0.js} +1 -1
  40. package/dist/gateway/static/root/assets/goals-page-C6eoni4z.js +2 -0
  41. package/dist/gateway/static/root/assets/goals-settings-o4i-qAOS.js +1 -0
  42. package/dist/gateway/static/root/assets/heartbeat-settings-DQQkETX8.js +1 -0
  43. package/dist/gateway/static/root/assets/index-BKRqeRHm.js +257 -0
  44. package/dist/gateway/static/root/assets/index-CphxClbs.css +1 -0
  45. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CVIwwM15.js → keyboard-shortcuts-settings-LT6qB-ua.js} +1 -1
  46. package/dist/gateway/static/root/assets/logs-page-Dli2e3fS.js +7 -0
  47. package/dist/gateway/static/root/assets/{markdown-split-B_6us9j7.js → markdown-split-Dw-yE2-y.js} +1 -1
  48. package/dist/gateway/static/root/assets/{media-plugins-D_fryIyj.js → media-plugins-D9NNNUgE.js} +1 -1
  49. package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +5 -0
  50. package/dist/gateway/static/root/assets/models-hub-panel-DVn2Q1Ik.js +2 -0
  51. package/dist/gateway/static/root/assets/notes-page-CRgbJGgk.js +1 -0
  52. package/dist/gateway/static/root/assets/notes-workbench-BxZRHLWx.js +2 -0
  53. package/dist/gateway/static/root/assets/{page-tabs-D_8jGlqx.js → page-tabs-D4hkWVt_.js} +1 -1
  54. package/dist/gateway/static/root/assets/{preview-open-alternatives-BBLMK8Mp.js → preview-open-alternatives-CIckv0uy.js} +1 -1
  55. package/dist/gateway/static/root/assets/project-detail-page-Doz53xLn.js +1 -0
  56. package/dist/gateway/static/root/assets/projects-page-DoMtcRLg.js +1 -0
  57. package/dist/gateway/static/root/assets/remote-access-hub-BeHVEgrm.js +1 -0
  58. package/dist/gateway/static/root/assets/{save-bar-controls-DVS3FR5r.js → save-bar-controls-B0b42kB2.js} +1 -1
  59. package/dist/gateway/static/root/assets/{schedule-field-D6vKd6-T.js → schedule-field-BtjEkczK.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schema-form-BPy4lbIh.js → schema-form-Bf0bk3i6.js} +1 -1
  61. package/dist/gateway/static/root/assets/sessions-page-Bk4bQsBe.js +1 -0
  62. package/dist/gateway/static/root/assets/settings-advanced-gate-DdFyaRMm.js +1 -0
  63. package/dist/gateway/static/root/assets/{settings-collapsible-section-WzdikxPt.js → settings-collapsible-section-BTKTdTNX.js} +1 -1
  64. package/dist/gateway/static/root/assets/{settings-form-section-CvfzhBV-.js → settings-form-section-DL4P0sAj.js} +1 -1
  65. package/dist/gateway/static/root/assets/{settings-loading-skeleton-BxR-Ulhi.js → settings-loading-skeleton-BV6KFNj4.js} +1 -1
  66. package/dist/gateway/static/root/assets/settings-page-B_4DsX5W.js +1 -0
  67. package/dist/gateway/static/root/assets/{settings-page-layout-CKefvbYi.js → settings-page-layout-CyGlrInB.js} +1 -1
  68. package/dist/gateway/static/root/assets/setup-status-panel-DJ1_MLgX.js +1 -0
  69. package/dist/gateway/static/root/assets/share-preview-page-BQBV7YrV.js +2 -0
  70. package/dist/gateway/static/root/assets/shares-settings-0VuFLBeU.js +1 -0
  71. package/dist/gateway/static/root/assets/skill-reload-api-DO87Ckeo.js +1 -0
  72. package/dist/gateway/static/root/assets/skills-page-D3VdtxAn.js +2 -0
  73. package/dist/gateway/static/root/assets/{system-settings-panel-BokgAgf7.js → system-settings-panel-D85fBBuI.js} +1 -1
  74. package/dist/gateway/static/root/assets/{typed-models-lib-BwHlNL3L.js → typed-models-lib-CwEuYrHX.js} +1 -1
  75. package/dist/gateway/static/root/assets/{use-channel-catalog-DR11ap3A.js → use-channel-catalog-COXIfXcl.js} +1 -1
  76. package/dist/gateway/static/root/assets/user-context-page-m9JVQ73F.js +1 -0
  77. package/dist/gateway/static/root/assets/user-profile-fields-editor-DtQiuY7E.js +1 -0
  78. package/dist/gateway/static/root/assets/user-profile-settings-panel-CWM0fEpb.js +1 -0
  79. package/dist/gateway/static/root/assets/{utils-BKUWB-TT.js → utils--BO6xT3u.js} +1 -1
  80. package/dist/gateway/static/root/assets/voice-api-key-field-LoT3wgZ9.js +1 -0
  81. package/dist/gateway/static/root/assets/with-selector-aYPsXwdl.js +1 -0
  82. package/dist/gateway/static/root/assets/work-item-detail-page-DSTMz_mO.js +1 -0
  83. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CL_rnAUB.js → workflow-run-setup-panel-B35lJzvm.js} +2 -2
  84. package/dist/gateway/static/root/assets/workflows-page-BfSm9oR8.js +11 -0
  85. package/dist/gateway/static/root/assets/workflows-page-DLioOiRN.css +1 -0
  86. package/dist/gateway/static/root/connector-icons/README.md +11 -0
  87. package/dist/gateway/static/root/connector-icons/airtable.svg +13 -0
  88. package/dist/gateway/static/root/connector-icons/asana.svg +15 -0
  89. package/dist/gateway/static/root/connector-icons/brave-search.svg +1 -0
  90. package/dist/gateway/static/root/connector-icons/clickup.svg +19 -0
  91. package/dist/gateway/static/root/connector-icons/composio.svg +266 -0
  92. package/dist/gateway/static/root/connector-icons/discord.svg +15 -0
  93. package/dist/gateway/static/root/connector-icons/dropbox.svg +152 -0
  94. package/dist/gateway/static/root/connector-icons/excel.svg +56 -0
  95. package/dist/gateway/static/root/connector-icons/fetch.svg +6 -0
  96. package/dist/gateway/static/root/connector-icons/figma.svg +178 -0
  97. package/dist/gateway/static/root/connector-icons/filesystem.svg +6 -0
  98. package/dist/gateway/static/root/connector-icons/github.svg +10 -0
  99. package/dist/gateway/static/root/connector-icons/gmail.svg +3 -0
  100. package/dist/gateway/static/root/connector-icons/google-calendar.svg +3 -0
  101. package/dist/gateway/static/root/connector-icons/google-docs.svg +25 -0
  102. package/dist/gateway/static/root/connector-icons/google-drive.svg +25 -0
  103. package/dist/gateway/static/root/connector-icons/google-sheets.svg +1 -0
  104. package/dist/gateway/static/root/connector-icons/hubspot.svg +142 -0
  105. package/dist/gateway/static/root/connector-icons/jira.svg +15 -0
  106. package/dist/gateway/static/root/connector-icons/linear.svg +5 -0
  107. package/dist/gateway/static/root/connector-icons/memory.svg +5 -0
  108. package/dist/gateway/static/root/connector-icons/microsoft-teams.svg +33 -0
  109. package/dist/gateway/static/root/connector-icons/notion.svg +5 -0
  110. package/dist/gateway/static/root/connector-icons/one-drive.svg +13 -0
  111. package/dist/gateway/static/root/connector-icons/outlook.svg +76 -0
  112. package/dist/gateway/static/root/connector-icons/playwright.svg +9 -0
  113. package/dist/gateway/static/root/connector-icons/salesforce.svg +17 -0
  114. package/dist/gateway/static/root/connector-icons/sequential-thinking.svg +8 -0
  115. package/dist/gateway/static/root/connector-icons/shopify.svg +5 -0
  116. package/dist/gateway/static/root/connector-icons/slack.svg +9 -0
  117. package/dist/gateway/static/root/connector-icons/spotify.svg +43 -0
  118. package/dist/gateway/static/root/connector-icons/stripe.svg +11 -0
  119. package/dist/gateway/static/root/connector-icons/telegram.svg +130 -0
  120. package/dist/gateway/static/root/connector-icons/time.svg +6 -0
  121. package/dist/gateway/static/root/connector-icons/todoist.svg +277 -0
  122. package/dist/gateway/static/root/connector-icons/trello.svg +19 -0
  123. package/dist/gateway/static/root/connector-icons/twitter.svg +128 -0
  124. package/dist/gateway/static/root/connector-icons/whatsapp.svg +61 -0
  125. package/dist/gateway/static/root/connector-icons/youtube.svg +11 -0
  126. package/dist/gateway/static/root/index.html +9 -6
  127. package/dist/package.js +1 -1
  128. package/dist/src/agent/agent-manager.d.ts +2 -0
  129. package/dist/src/agent/agent-manager.js +8 -0
  130. package/dist/src/agent/agent-manager.js.map +1 -1
  131. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  132. package/dist/src/agent/background-review/prompts.js +3 -2
  133. package/dist/src/agent/background-review/prompts.js.map +1 -1
  134. package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
  135. package/dist/src/agent/embedded/xopc-tools-bridge.d.ts +9 -0
  136. package/dist/src/agent/embedded/xopc-tools-bridge.js +71 -3
  137. package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
  138. package/dist/src/agent/goals/post-turn.js +5 -4
  139. package/dist/src/agent/goals/post-turn.js.map +1 -1
  140. package/dist/src/agent/mcp/mcp-transport.js +4 -1
  141. package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
  142. package/dist/src/agent/memory/context/planner.d.ts +1 -0
  143. package/dist/src/agent/memory/context/planner.js +60 -14
  144. package/dist/src/agent/memory/context/planner.js.map +1 -1
  145. package/dist/src/agent/memory/context/types.d.ts +3 -1
  146. package/dist/src/agent/memory/lifecycle.d.ts +11 -0
  147. package/dist/src/agent/memory/lifecycle.js +50 -0
  148. package/dist/src/agent/memory/lifecycle.js.map +1 -0
  149. package/dist/src/agent/memory/source-origin.d.ts +3 -0
  150. package/dist/src/agent/memory/source-origin.js +19 -0
  151. package/dist/src/agent/memory/source-origin.js.map +1 -0
  152. package/dist/src/agent/memory/understanding/service.js +5 -0
  153. package/dist/src/agent/memory/understanding/service.js.map +1 -1
  154. package/dist/src/agent/memory/user-context-coordinator.js +7 -2
  155. package/dist/src/agent/memory/user-context-coordinator.js.map +1 -1
  156. package/dist/src/agent/prompt/sections/behavior.d.ts +2 -0
  157. package/dist/src/agent/prompt/sections/behavior.js +30 -1
  158. package/dist/src/agent/prompt/sections/behavior.js.map +1 -1
  159. package/dist/src/agent/prompt/sections/tooling.js +1 -1
  160. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  161. package/dist/src/agent/prompt/service-prompt-builder.js +8 -1
  162. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  163. package/dist/src/agent/prompt/system-prompt.d.ts +2 -0
  164. package/dist/src/agent/prompt/system-prompt.js +6 -3
  165. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  166. package/dist/src/agent/service/process-direct-streaming.js +22 -0
  167. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  168. package/dist/src/agent/service.d.ts +2 -0
  169. package/dist/src/agent/service.js +9 -3
  170. package/dist/src/agent/service.js.map +1 -1
  171. package/dist/src/agent/starter-agents.js +1 -1
  172. package/dist/src/agent/starter-agents.js.map +1 -1
  173. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  174. package/dist/src/agent/tool-manuals/xopc-use.js +1 -1
  175. package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -1
  176. package/dist/src/agent/tools/composio-tool.d.ts +18 -5
  177. package/dist/src/agent/tools/composio-tool.js +252 -35
  178. package/dist/src/agent/tools/composio-tool.js.map +1 -1
  179. package/dist/src/agent/tools/factory.js +7 -3
  180. package/dist/src/agent/tools/factory.js.map +1 -1
  181. package/dist/src/agent/tools/index.d.ts +1 -1
  182. package/dist/src/agent/tools/index.js +2 -2
  183. package/dist/src/agent/tools/workflow-tool.d.ts +0 -1
  184. package/dist/src/agent/tools/workflow-tool.js +3 -16
  185. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  186. package/dist/src/agent/workflow/builtins/index.d.ts +2 -28
  187. package/dist/src/agent/workflow/builtins/index.js +226 -41
  188. package/dist/src/agent/workflow/builtins/index.js.map +1 -1
  189. package/dist/src/agent/workflow/catalog.d.ts +32 -34
  190. package/dist/src/agent/workflow/catalog.js +158 -154
  191. package/dist/src/agent/workflow/catalog.js.map +1 -1
  192. package/dist/src/agent/workflow/index.d.ts +4 -6
  193. package/dist/src/agent/workflow/index.js +2 -5
  194. package/dist/src/agent/workflow/snapshot.d.ts +2 -2
  195. package/dist/src/agent/workflow/snapshot.js +2 -2
  196. package/dist/src/agent/workflow/snapshot.js.map +1 -1
  197. package/dist/src/agent/workflow/structured-output-tool.d.ts +2 -2
  198. package/dist/src/agent/workflow/structured-output-tool.js +2 -2
  199. package/dist/src/agent/workflow/structured-output-tool.js.map +1 -1
  200. package/dist/src/agent/workflow/subagent-runner.js +1 -1
  201. package/dist/src/agent/workflow/types.d.ts +31 -26
  202. package/dist/src/agent-manifest/index.d.ts +1 -0
  203. package/dist/src/agent-manifest/index.js +3 -1
  204. package/dist/src/agent-manifest/index.js.map +1 -1
  205. package/dist/src/agent-manifest/preset-chain.d.ts +10 -0
  206. package/dist/src/agent-manifest/preset-chain.js +32 -0
  207. package/dist/src/agent-manifest/preset-chain.js.map +1 -0
  208. package/dist/src/agent-manifest/resolver.js +3 -10
  209. package/dist/src/agent-manifest/resolver.js.map +1 -1
  210. package/dist/src/agent-manifest/schema.d.ts +4 -4
  211. package/dist/src/automations/api/routes.js +13 -1
  212. package/dist/src/automations/api/routes.js.map +1 -1
  213. package/dist/src/automations/domain/validation.d.ts +14 -14
  214. package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
  215. package/dist/src/browser/providers/browser-ext-install.d.ts +11 -1
  216. package/dist/src/browser/providers/browser-ext-install.js +39 -14
  217. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  218. package/dist/src/capabilities/store-connector.d.ts +0 -1
  219. package/dist/src/capabilities/store-connector.js +3 -5
  220. package/dist/src/capabilities/store-connector.js.map +1 -1
  221. package/dist/src/chat-commands/builtins/review.js +72 -73
  222. package/dist/src/chat-commands/builtins/review.js.map +1 -1
  223. package/dist/src/chat-commands/builtins/workflow.js +9 -54
  224. package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
  225. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  226. package/dist/src/cli/commands/extension-create.js +2 -2
  227. package/dist/src/cli/commands/extension-create.js.map +1 -1
  228. package/dist/src/cli/commands/extension-marketplace.js +42 -36
  229. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  230. package/dist/src/cli/commands/extension-pack.d.ts +6 -0
  231. package/dist/src/cli/commands/extension-pack.js +3 -2
  232. package/dist/src/cli/commands/extension-pack.js.map +1 -1
  233. package/dist/src/commands/agents.config.d.ts +1 -0
  234. package/dist/src/commands/agents.config.js +1 -0
  235. package/dist/src/commands/agents.config.js.map +1 -1
  236. package/dist/src/config/schema.d.ts +6 -6
  237. package/dist/src/config/schema.js +6 -22
  238. package/dist/src/config/schema.js.map +1 -1
  239. package/dist/src/config/web-patch.d.ts +1 -1
  240. package/dist/src/connectors/approval.d.ts +2 -0
  241. package/dist/src/connectors/approval.js +33 -0
  242. package/dist/src/connectors/approval.js.map +1 -0
  243. package/dist/src/connectors/auth-provider-registry.d.ts +9 -0
  244. package/dist/src/connectors/auth-provider-registry.js +17 -0
  245. package/dist/src/connectors/auth-provider-registry.js.map +1 -0
  246. package/dist/src/connectors/builtin-catalog.js +55 -116
  247. package/dist/src/connectors/builtin-catalog.js.map +1 -1
  248. package/dist/src/connectors/catalog.js +7 -2
  249. package/dist/src/connectors/catalog.js.map +1 -1
  250. package/dist/src/connectors/composio-catalog.d.ts +19 -0
  251. package/dist/src/connectors/composio-catalog.js +237 -0
  252. package/dist/src/connectors/composio-catalog.js.map +1 -0
  253. package/dist/src/connectors/composio-logo.d.ts +1 -0
  254. package/dist/src/connectors/composio-logo.js +51 -0
  255. package/dist/src/connectors/composio-logo.js.map +1 -0
  256. package/dist/src/connectors/composio-sessions.d.ts +116 -0
  257. package/dist/src/connectors/composio-sessions.js +296 -0
  258. package/dist/src/connectors/composio-sessions.js.map +1 -0
  259. package/dist/src/connectors/composio-triggers.d.ts +17 -0
  260. package/dist/src/connectors/composio-triggers.js +48 -5
  261. package/dist/src/connectors/composio-triggers.js.map +1 -1
  262. package/dist/src/connectors/composio.d.ts +31 -2
  263. package/dist/src/connectors/composio.js +374 -151
  264. package/dist/src/connectors/composio.js.map +1 -1
  265. package/dist/src/connectors/connector-memory-sync.d.ts +15 -0
  266. package/dist/src/connectors/connector-memory-sync.js +90 -0
  267. package/dist/src/connectors/connector-memory-sync.js.map +1 -0
  268. package/dist/src/connectors/install.js +35 -92
  269. package/dist/src/connectors/install.js.map +1 -1
  270. package/dist/src/connectors/instances.js +6 -2
  271. package/dist/src/connectors/instances.js.map +1 -1
  272. package/dist/src/connectors/integration-strategy.d.ts +3 -0
  273. package/dist/src/connectors/integration-strategy.js +29 -0
  274. package/dist/src/connectors/integration-strategy.js.map +1 -0
  275. package/dist/src/connectors/policy.d.ts +13 -0
  276. package/dist/src/connectors/policy.js +48 -0
  277. package/dist/src/connectors/policy.js.map +1 -0
  278. package/dist/src/connectors/providers.js +1 -1
  279. package/dist/src/connectors/runtime-adapter-registry.d.ts +25 -0
  280. package/dist/src/connectors/runtime-adapter-registry.js +154 -0
  281. package/dist/src/connectors/runtime-adapter-registry.js.map +1 -0
  282. package/dist/src/connectors/types.d.ts +113 -4
  283. package/dist/src/connectors/workflow-preflight.d.ts +20 -0
  284. package/dist/src/connectors/workflow-preflight.js +70 -0
  285. package/dist/src/connectors/workflow-preflight.js.map +1 -0
  286. package/dist/src/extensions/install-transaction.d.ts +16 -0
  287. package/dist/src/extensions/install-transaction.js +76 -0
  288. package/dist/src/extensions/install-transaction.js.map +1 -0
  289. package/dist/src/extensions/install.d.ts +2 -0
  290. package/dist/src/extensions/install.js +23 -1
  291. package/dist/src/extensions/install.js.map +1 -1
  292. package/dist/src/gateway/agents-admin.d.ts +2 -0
  293. package/dist/src/gateway/agents-admin.js +7 -0
  294. package/dist/src/gateway/agents-admin.js.map +1 -1
  295. package/dist/src/gateway/capability-presets-admin.d.ts +11 -0
  296. package/dist/src/gateway/capability-presets-admin.js +11 -4
  297. package/dist/src/gateway/capability-presets-admin.js.map +1 -1
  298. package/dist/src/gateway/chat-stream/mapper.js +17 -0
  299. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  300. package/dist/src/gateway/chat-stream/protocol.d.ts +18 -1
  301. package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -3
  302. package/dist/src/gateway/hono/routes/agents.js +3 -0
  303. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  304. package/dist/src/gateway/hono/routes/capability-presets.js +19 -1
  305. package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -1
  306. package/dist/src/gateway/hono/routes/connectors.js +188 -25
  307. package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
  308. package/dist/src/gateway/hono/routes/goals.js +22 -3
  309. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  310. package/dist/src/gateway/hono/routes/home.d.ts +60 -1
  311. package/dist/src/gateway/hono/routes/home.js +244 -18
  312. package/dist/src/gateway/hono/routes/home.js.map +1 -1
  313. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  314. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  315. package/dist/src/gateway/hono/routes/memory.js +14 -1
  316. package/dist/src/gateway/hono/routes/memory.js.map +1 -1
  317. package/dist/src/gateway/hono/routes/projects.js +103 -2
  318. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  319. package/dist/src/gateway/hono/routes/public-gateway.js +93 -0
  320. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  321. package/dist/src/gateway/hono/routes/workflows.js +137 -22
  322. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  323. package/dist/src/gateway/hono/routes/you.d.ts +23 -0
  324. package/dist/src/gateway/hono/routes/you.js +538 -0
  325. package/dist/src/gateway/hono/routes/you.js.map +1 -0
  326. package/dist/src/gateway/hono/sse.d.ts +2 -1
  327. package/dist/src/gateway/hono/sse.js +2 -1
  328. package/dist/src/gateway/hono/sse.js.map +1 -1
  329. package/dist/src/gateway/service/marketplace-service.d.ts +13 -1
  330. package/dist/src/gateway/service/marketplace-service.js +96 -40
  331. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  332. package/dist/src/gateway/service.d.ts +2 -0
  333. package/dist/src/gateway/service.js +7 -1
  334. package/dist/src/gateway/service.js.map +1 -1
  335. package/dist/src/goals/goal-service.d.ts +7 -5
  336. package/dist/src/goals/goal-service.js +25 -13
  337. package/dist/src/goals/goal-service.js.map +1 -1
  338. package/dist/src/goals/goal-store.js +46 -7
  339. package/dist/src/goals/goal-store.js.map +1 -1
  340. package/dist/src/goals/types.d.ts +24 -0
  341. package/dist/src/storage/sqlite/connector-repository.d.ts +49 -0
  342. package/dist/src/storage/sqlite/connector-repository.js +385 -0
  343. package/dist/src/storage/sqlite/connector-repository.js.map +1 -0
  344. package/dist/src/storage/sqlite/index.d.ts +3 -0
  345. package/dist/src/storage/sqlite/index.js +4 -1
  346. package/dist/src/storage/sqlite/migrations/030_connectors.sql +94 -0
  347. package/dist/src/storage/sqlite/migrations/031_connector_approvals.sql +24 -0
  348. package/dist/src/storage/sqlite/migrations/032_connector_webhook_deliveries.sql +15 -0
  349. package/dist/src/storage/sqlite/migrations/033_user_trust_policies.sql +6 -0
  350. package/dist/src/storage/sqlite/migrations/034_allow_global_auto_trust.sql +14 -0
  351. package/dist/src/storage/sqlite/migrations/035_user_profile_prompt_state.sql +7 -0
  352. package/dist/src/storage/sqlite/migrations/036_goal_outcome_metric.sql +12 -0
  353. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  354. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  355. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  356. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  357. package/dist/src/storage/sqlite/schema.js +1 -1
  358. package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +3 -0
  359. package/dist/src/storage/sqlite/user-profile-setup-repository.js +34 -0
  360. package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +1 -0
  361. package/dist/src/storage/sqlite/user-trust-repository.d.ts +3 -0
  362. package/dist/src/storage/sqlite/user-trust-repository.js +34 -0
  363. package/dist/src/storage/sqlite/user-trust-repository.js.map +1 -0
  364. package/dist/src/tui/components/assistant-message.js +15 -0
  365. package/dist/src/tui/components/assistant-message.js.map +1 -1
  366. package/dist/src/tui/tui-agent-events.js +85 -1
  367. package/dist/src/tui/tui-agent-events.js.map +1 -1
  368. package/dist/src/tui/tui-command-formatters.js +7 -7
  369. package/dist/src/tui/tui-command-formatters.js.map +1 -1
  370. package/dist/src/tui/tui-commands.js +1 -1
  371. package/dist/src/tui/tui-startup-resources.js +1 -1
  372. package/dist/src/user-context/import.d.ts +12 -0
  373. package/dist/src/user-context/import.js +48 -0
  374. package/dist/src/user-context/import.js.map +1 -0
  375. package/dist/src/user-context/profile.d.ts +37 -0
  376. package/dist/src/user-context/profile.js +165 -0
  377. package/dist/src/user-context/profile.js.map +1 -0
  378. package/dist/src/user-context/projection.d.ts +54 -0
  379. package/dist/src/user-context/projection.js +121 -0
  380. package/dist/src/user-context/projection.js.map +1 -0
  381. package/dist/src/user-context/source-recommendations.d.ts +13 -0
  382. package/dist/src/user-context/source-recommendations.js +86 -0
  383. package/dist/src/user-context/source-recommendations.js.map +1 -0
  384. package/dist/src/user-context/trust-policy.d.ts +11 -0
  385. package/dist/src/user-context/trust-policy.js +31 -0
  386. package/dist/src/user-context/trust-policy.js.map +1 -0
  387. package/dist/src/workflows/authoring/index.d.ts +1 -0
  388. package/dist/src/workflows/authoring/index.js +2 -0
  389. package/dist/src/workflows/authoring/workflow-draft-store.d.ts +33 -0
  390. package/dist/src/workflows/authoring/workflow-draft-store.js +74 -0
  391. package/dist/src/workflows/authoring/workflow-draft-store.js.map +1 -0
  392. package/dist/src/workflows/domain/definition-utils.d.ts +6 -4
  393. package/dist/src/workflows/domain/definition-utils.js +28 -26
  394. package/dist/src/workflows/domain/definition-utils.js.map +1 -1
  395. package/dist/src/workflows/domain/definition.d.ts +79 -6
  396. package/dist/src/workflows/domain/event.d.ts +18 -2
  397. package/dist/src/workflows/domain/index.js +3 -3
  398. package/dist/src/workflows/domain/run.d.ts +16 -2
  399. package/dist/src/workflows/domain/run.js.map +1 -1
  400. package/dist/src/workflows/domain/validation.d.ts +9 -5
  401. package/dist/src/workflows/domain/validation.js +183 -40
  402. package/dist/src/workflows/domain/validation.js.map +1 -1
  403. package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +2 -3
  404. package/dist/src/workflows/draft/workflow-draft-prompt.js +31 -73
  405. package/dist/src/workflows/draft/workflow-draft-prompt.js.map +1 -1
  406. package/dist/src/workflows/draft/workflow-draft-service.js +4 -8
  407. package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -1
  408. package/dist/src/workflows/draft/workflow-draft-validator.js +29 -37
  409. package/dist/src/workflows/draft/workflow-draft-validator.js.map +1 -1
  410. package/dist/src/workflows/draft/workflow-draft.types.d.ts +4 -4
  411. package/dist/src/workflows/engine/projector.js +43 -1
  412. package/dist/src/workflows/engine/projector.js.map +1 -1
  413. package/dist/src/workflows/engine/workflow-engine.d.ts +2 -3
  414. package/dist/src/workflows/engine/workflow-engine.js +24 -4
  415. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  416. package/dist/src/workflows/index.js +4 -7
  417. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +1 -9
  418. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -1
  419. package/dist/src/workflows/runtime/graph-workflow-runtime.d.ts +10 -0
  420. package/dist/src/workflows/runtime/graph-workflow-runtime.js +295 -0
  421. package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +1 -0
  422. package/dist/src/workflows/runtime/index.d.ts +1 -2
  423. package/dist/src/workflows/runtime/index.js +2 -5
  424. package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +5 -8
  425. package/dist/src/workflows/service/workflow-run-service.js +15 -1
  426. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  427. package/dist/src/workflows/service/workflow-run-service.types.d.ts +2 -1
  428. package/package.json +4 -3
  429. package/dist/gateway/static/root/assets/agents-CyvCIHnB.js +0 -2
  430. package/dist/gateway/static/root/assets/apps-page-DK_Vx6nl.js +0 -1
  431. package/dist/gateway/static/root/assets/automation-suggestion-card-B1LV3YYv.js +0 -1
  432. package/dist/gateway/static/root/assets/automations-page-fzrovqhv.js +0 -4
  433. package/dist/gateway/static/root/assets/block-editor-Dhj5f4Bx.js +0 -184
  434. package/dist/gateway/static/root/assets/browser-settings-page-BDn-n-UB.js +0 -8
  435. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Co5ipo_Q.js +0 -1
  436. package/dist/gateway/static/root/assets/channels-settings-BWlpaxg9.js +0 -1
  437. package/dist/gateway/static/root/assets/channels-status-swr-D_jkIZLV.js +0 -1
  438. package/dist/gateway/static/root/assets/connectors-page-BcekbW4q.js +0 -2
  439. package/dist/gateway/static/root/assets/desktop-pet-settings-BJCUuL8Y.js +0 -1
  440. package/dist/gateway/static/root/assets/dreaming-settings-BN1Z2mIo.js +0 -3
  441. package/dist/gateway/static/root/assets/extension-page-B-1KxvVy.js +0 -1
  442. package/dist/gateway/static/root/assets/extension-settings-page-BF9NACI3.js +0 -1
  443. package/dist/gateway/static/root/assets/gateway-settings-DN9sNREz.js +0 -1
  444. package/dist/gateway/static/root/assets/goal-create-dialog-BpoQW8cD.js +0 -1
  445. package/dist/gateway/static/root/assets/goal-detail-page-CBRSPd0b.js +0 -4
  446. package/dist/gateway/static/root/assets/goals-page-BCcBi407.js +0 -2
  447. package/dist/gateway/static/root/assets/goals-settings-pkTXzXkh.js +0 -1
  448. package/dist/gateway/static/root/assets/heartbeat-settings-ezsufgLQ.js +0 -1
  449. package/dist/gateway/static/root/assets/index-B8s8Pq5U.css +0 -1
  450. package/dist/gateway/static/root/assets/index-DcUaXYeb.js +0 -262
  451. package/dist/gateway/static/root/assets/logs-page-DQtTRXtj.js +0 -7
  452. package/dist/gateway/static/root/assets/messages-BXNELNBa.js +0 -3
  453. package/dist/gateway/static/root/assets/models-hub-panel-BP2M9n6Q.js +0 -2
  454. package/dist/gateway/static/root/assets/notes-page-CspveYaO.js +0 -1
  455. package/dist/gateway/static/root/assets/notes-workbench-BHwzJ0OC.js +0 -2
  456. package/dist/gateway/static/root/assets/project-detail-page-Dy3rsobs.js +0 -1
  457. package/dist/gateway/static/root/assets/projects-page-CWKpPE0L.js +0 -1
  458. package/dist/gateway/static/root/assets/remote-access-hub-CqNRyXEo.js +0 -1
  459. package/dist/gateway/static/root/assets/sessions-page-MEME7ivF.js +0 -1
  460. package/dist/gateway/static/root/assets/settings-advanced-gate-JVd0qaSF.js +0 -1
  461. package/dist/gateway/static/root/assets/settings-page-DYEbB1EV.js +0 -1
  462. package/dist/gateway/static/root/assets/setup-status-panel-dWN8BJ3z.js +0 -1
  463. package/dist/gateway/static/root/assets/share-preview-page-D8foINzP.js +0 -2
  464. package/dist/gateway/static/root/assets/shares-settings-Tgbv1s7G.js +0 -1
  465. package/dist/gateway/static/root/assets/skill-reload-api-D_YK0b_Z.js +0 -1
  466. package/dist/gateway/static/root/assets/skills-page-DGytfoZK.js +0 -2
  467. package/dist/gateway/static/root/assets/toast-z0toXu32.js +0 -1
  468. package/dist/gateway/static/root/assets/user-profile-settings-panel-8YtygcJp.js +0 -1
  469. package/dist/gateway/static/root/assets/voice-api-key-field-BVH71EFf.js +0 -1
  470. package/dist/gateway/static/root/assets/work-item-detail-page-JeTE7XNM.js +0 -1
  471. package/dist/gateway/static/root/assets/workflow-start-dialog-_u8Uc1ze.js +0 -1
  472. package/dist/gateway/static/root/assets/workflows-page-ixgk_y1l.js +0 -18
  473. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +0 -13
  474. package/dist/src/agent/workflow/builtins/audit-repo.js +0 -183
  475. package/dist/src/agent/workflow/builtins/audit-repo.js.map +0 -1
  476. package/dist/src/agent/workflow/builtins/client-proposal.d.ts +0 -12
  477. package/dist/src/agent/workflow/builtins/client-proposal.js +0 -164
  478. package/dist/src/agent/workflow/builtins/client-proposal.js.map +0 -1
  479. package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +0 -12
  480. package/dist/src/agent/workflow/builtins/competitor-scan.js +0 -164
  481. package/dist/src/agent/workflow/builtins/competitor-scan.js.map +0 -1
  482. package/dist/src/agent/workflow/builtins/content-draft.d.ts +0 -13
  483. package/dist/src/agent/workflow/builtins/content-draft.js +0 -159
  484. package/dist/src/agent/workflow/builtins/content-draft.js.map +0 -1
  485. package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +0 -11
  486. package/dist/src/agent/workflow/builtins/content-repurpose.js +0 -146
  487. package/dist/src/agent/workflow/builtins/content-repurpose.js.map +0 -1
  488. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +0 -13
  489. package/dist/src/agent/workflow/builtins/debug-incident.js +0 -177
  490. package/dist/src/agent/workflow/builtins/debug-incident.js.map +0 -1
  491. package/dist/src/agent/workflow/builtins/decision-compare.d.ts +0 -13
  492. package/dist/src/agent/workflow/builtins/decision-compare.js +0 -187
  493. package/dist/src/agent/workflow/builtins/decision-compare.js.map +0 -1
  494. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +0 -12
  495. package/dist/src/agent/workflow/builtins/implementation-plan.js +0 -185
  496. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +0 -1
  497. package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +0 -11
  498. package/dist/src/agent/workflow/builtins/inbox-triage.js +0 -158
  499. package/dist/src/agent/workflow/builtins/inbox-triage.js.map +0 -1
  500. package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +0 -12
  501. package/dist/src/agent/workflow/builtins/meeting-prep.js +0 -152
  502. package/dist/src/agent/workflow/builtins/meeting-prep.js.map +0 -1
  503. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +0 -14
  504. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +0 -171
  505. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +0 -1
  506. package/dist/src/agent/workflow/builtins/offer-design.d.ts +0 -12
  507. package/dist/src/agent/workflow/builtins/offer-design.js +0 -170
  508. package/dist/src/agent/workflow/builtins/offer-design.js.map +0 -1
  509. package/dist/src/agent/workflow/builtins/pr-review.d.ts +0 -12
  510. package/dist/src/agent/workflow/builtins/pr-review.js +0 -178
  511. package/dist/src/agent/workflow/builtins/pr-review.js.map +0 -1
  512. package/dist/src/agent/workflow/builtins/release-check.d.ts +0 -11
  513. package/dist/src/agent/workflow/builtins/release-check.js +0 -174
  514. package/dist/src/agent/workflow/builtins/release-check.js.map +0 -1
  515. package/dist/src/agent/workflow/builtins/research.d.ts +0 -13
  516. package/dist/src/agent/workflow/builtins/research.js +0 -188
  517. package/dist/src/agent/workflow/builtins/research.js.map +0 -1
  518. package/dist/src/agent/workflow/builtins/weekly-review.d.ts +0 -12
  519. package/dist/src/agent/workflow/builtins/weekly-review.js +0 -139
  520. package/dist/src/agent/workflow/builtins/weekly-review.js.map +0 -1
  521. package/dist/src/agent/workflow/last-run-memory.d.ts +0 -42
  522. package/dist/src/agent/workflow/last-run-memory.js +0 -60
  523. package/dist/src/agent/workflow/last-run-memory.js.map +0 -1
  524. package/dist/src/agent/workflow/lint.d.ts +0 -38
  525. package/dist/src/agent/workflow/lint.js +0 -74
  526. package/dist/src/agent/workflow/lint.js.map +0 -1
  527. package/dist/src/agent/workflow/meta-locale.d.ts +0 -12
  528. package/dist/src/agent/workflow/meta-locale.js +0 -62
  529. package/dist/src/agent/workflow/meta-locale.js.map +0 -1
  530. package/dist/src/agent/workflow/parser.d.ts +0 -20
  531. package/dist/src/agent/workflow/parser.js +0 -152
  532. package/dist/src/agent/workflow/parser.js.map +0 -1
  533. package/dist/src/agent/workflow/runtime.d.ts +0 -34
  534. package/dist/src/agent/workflow/runtime.js +0 -402
  535. package/dist/src/agent/workflow/runtime.js.map +0 -1
  536. package/dist/src/connectors/oauth.d.ts +0 -22
  537. package/dist/src/connectors/oauth.js +0 -99
  538. package/dist/src/connectors/oauth.js.map +0 -1
  539. package/dist/src/workflows/runtime/script-runtime.d.ts +0 -3
  540. package/dist/src/workflows/runtime/script-runtime.js +0 -3
  541. package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +0 -5
  542. package/dist/src/workflows/runtime/script-workflow-runtime.js +0 -15
  543. package/dist/src/workflows/runtime/script-workflow-runtime.js.map +0 -1
@@ -0,0 +1,538 @@
1
+ import { runSqliteWriteTransaction } from "../../../storage/sqlite/transaction.js";
2
+ import { deleteMemoryRecord, getMemoryRecord, listMemoryRecords, upsertMemoryRecord } from "../../../storage/sqlite/memory-records-repository.js";
3
+ import { USER_TRUST_LEVELS, isUserTrustLevel } from "../../../user-context/trust-policy.js";
4
+ import { getUserTrustPolicy, setUserTrustPolicy } from "../../../storage/sqlite/user-trust-repository.js";
5
+ import { getUserProfilePromptState, setUserProfilePromptState } from "../../../storage/sqlite/user-profile-setup-repository.js";
6
+ import "../../../storage/sqlite/index.js";
7
+ import { MemoryPolicySchema, init_schema } from "../../../agent-manifest/schema.js";
8
+ import { init_agent_scope, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
9
+ import { resolveEffectiveAgentManifestForAgent } from "../../../config/agent-profile.js";
10
+ import { GoalService } from "../../../goals/goal-service.js";
11
+ import { draftGoalContract } from "../../../goals/goal-contract-draft.js";
12
+ import "../../../goals/index.js";
13
+ import { listConnectorCatalog } from "../../../connectors/catalog.js";
14
+ import { nextMemoryReviewAt, resolveMemoryStability } from "../../../agent/memory/lifecycle.js";
15
+ import { listConnectorInstances } from "../../../connectors/instances.js";
16
+ import { uninstallConnector } from "../../../connectors/install.js";
17
+ import { prepareUpdateAgent, readUserProfileFile, writeUserProfileFile } from "../../agents-admin.js";
18
+ import { isUserContextRecord, projectPersonalContextSources, projectUserContextRecord, recordsDerivedFromPersonalContextSource } from "../../../user-context/projection.js";
19
+ import { prepareUserContextImport } from "../../../user-context/import.js";
20
+ import { buildUserProfileSetup, parseUserProfileMarkdown, patchUserProfileMarkdown } from "../../../user-context/profile.js";
21
+ import { buildGoalSourceRecommendations } from "../../../user-context/source-recommendations.js";
22
+ //#region src/gateway/hono/routes/you.ts
23
+ init_agent_scope();
24
+ init_schema();
25
+ const VISIBLE_STATUSES = new Set([
26
+ "active",
27
+ "candidate",
28
+ "needs_review"
29
+ ]);
30
+ const ACTIONABLE_INSIGHT_KINDS = new Set([
31
+ "routine",
32
+ "commitment",
33
+ "long_term_goal",
34
+ "derived_insight",
35
+ "task_lesson"
36
+ ]);
37
+ const INSIGHT_ACCEPTED_TAG = "insight-action:accepted";
38
+ const INSIGHT_DISMISSED_TAG = "insight-action:dismissed";
39
+ const PLAYBOOK_IDS = [
40
+ "communication",
41
+ "execution",
42
+ "routines"
43
+ ];
44
+ const PROFILE_FIELD_LIMITS = {
45
+ callName: 80,
46
+ pronouns: 80,
47
+ timezone: 100,
48
+ notes: 5e3
49
+ };
50
+ const PROFILE_PROMPT_SNOOZE_MS = 10080 * 60 * 1e3;
51
+ const ALL_MEMORY_STATUSES = [
52
+ "candidate",
53
+ "active",
54
+ "needs_review",
55
+ "stale",
56
+ "archived",
57
+ "rejected"
58
+ ];
59
+ function listAllAgentMemoryRecords(agentId, statuses) {
60
+ return statuses.flatMap((status) => {
61
+ const records = [];
62
+ let offset = 0;
63
+ while (true) {
64
+ const page = listMemoryRecords({
65
+ agentId,
66
+ status,
67
+ limit: 500,
68
+ offset
69
+ });
70
+ records.push(...page);
71
+ if (page.length < 500) break;
72
+ offset += page.length;
73
+ }
74
+ return records;
75
+ });
76
+ }
77
+ async function readProfileBundle(config) {
78
+ const result = await readUserProfileFile();
79
+ const profileContent = result.ok ? result.data.content : "";
80
+ const profile = parseUserProfileMarkdown(profileContent);
81
+ return {
82
+ profileContent,
83
+ profile,
84
+ profileSetup: buildUserProfileSetup({
85
+ profile,
86
+ promptState: getUserProfilePromptState(),
87
+ config
88
+ })
89
+ };
90
+ }
91
+ function parseProfilePatch(body) {
92
+ if (!body || typeof body !== "object" || Array.isArray(body)) return { error: "Invalid profile patch" };
93
+ const record = body;
94
+ const patch = {};
95
+ for (const field of Object.keys(PROFILE_FIELD_LIMITS)) {
96
+ if (!(field in record)) continue;
97
+ if (typeof record[field] !== "string") return { error: `${field} must be a string` };
98
+ const value = record[field].trim();
99
+ if (value.length > PROFILE_FIELD_LIMITS[field]) return { error: `${field} is too long` };
100
+ patch[field] = value;
101
+ }
102
+ return Object.keys(patch).length > 0 ? { patch } : { error: "No profile fields provided" };
103
+ }
104
+ function playbookForRecord(record) {
105
+ if (record.kind === "preference" || record.kind === "boundary" || record.kind === "tool_preference") return "communication";
106
+ if (record.kind === "task_lesson" || record.kind === "derived_insight") return "execution";
107
+ if (record.kind === "routine") return "routines";
108
+ }
109
+ function buildPersonalPlaybooks(records) {
110
+ return PLAYBOOK_IDS.flatMap((id) => {
111
+ const rules = records.filter((record) => playbookForRecord(record) === id);
112
+ if (rules.length === 0) return [];
113
+ return [{
114
+ id,
115
+ enabled: rules.some((record) => record.status === "active"),
116
+ rules: rules.map((record) => ({
117
+ id: record.id,
118
+ statement: record.content,
119
+ origin: record.explicitness
120
+ })),
121
+ updatedAt: rules.map((record) => record.updatedAt).sort().at(-1)
122
+ }];
123
+ });
124
+ }
125
+ function buildInsightSuggestions(records) {
126
+ return records.filter((record) => record.status === "active").filter((record) => ACTIONABLE_INSIGHT_KINDS.has(record.kind)).filter((record) => !record.tags?.includes(INSIGHT_ACCEPTED_TAG) && !record.tags?.includes(INSIGHT_DISMISSED_TAG)).filter((record) => {
127
+ const stability = resolveMemoryStability(record);
128
+ return record.explicitness === "explicit" || (record.evidence?.length ?? 0) >= 2 || stability.band === "strong";
129
+ }).sort((left, right) => right.importance - left.importance || Date.parse(right.updatedAt) - Date.parse(left.updatedAt)).slice(0, 5).map((record) => ({
130
+ id: record.id,
131
+ insight: record.content,
132
+ kind: record.kind,
133
+ action: record.kind === "routine" ? "make_repeatable" : "start_progress",
134
+ evidenceCount: record.evidence?.length ?? 0,
135
+ confidence: record.confidence,
136
+ sourceName: record.source.provider ?? "local"
137
+ }));
138
+ }
139
+ function selectedAgentId(config) {
140
+ return resolveDefaultAgentId(config);
141
+ }
142
+ function editableRecord(recordId, config) {
143
+ const record = getMemoryRecord(recordId);
144
+ if (!record || record.scope.agentId !== selectedAgentId(config) || !VISIBLE_STATUSES.has(record.status) || !isUserContextRecord(record)) return null;
145
+ return record;
146
+ }
147
+ function preserveRecord(record, patch) {
148
+ return upsertMemoryRecord({
149
+ id: record.id,
150
+ providerId: record.source.provider ?? "local",
151
+ kind: record.kind,
152
+ agentId: record.scope.agentId,
153
+ workspaceId: record.scope.workspaceId,
154
+ sessionKey: record.scope.sessionKey,
155
+ projectId: record.scope.projectId,
156
+ content: record.content,
157
+ source: record.source,
158
+ confidence: record.confidence,
159
+ tags: record.tags,
160
+ status: record.status,
161
+ sensitivity: record.sensitivity,
162
+ canonicalKey: record.canonicalKey,
163
+ explicitness: record.explicitness,
164
+ durability: record.durability,
165
+ importance: record.importance,
166
+ disclosurePolicy: record.disclosurePolicy,
167
+ evidence: record.evidence,
168
+ reviewAfter: record.reviewAfter,
169
+ expiresAt: record.expiresAt,
170
+ validFrom: record.validFrom,
171
+ validTo: record.validTo,
172
+ supersedesRecordId: record.supersedesRecordId,
173
+ conflictGroupId: record.conflictGroupId,
174
+ ...patch
175
+ });
176
+ }
177
+ function registerYouRoutes(authenticated, deps) {
178
+ authenticated.get("/api/you", async (c) => {
179
+ const config = deps.service.currentConfig;
180
+ const agentId = selectedAgentId(config);
181
+ const profileBundle = await readProfileBundle(config);
182
+ const allUserContextRecords = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES).filter(isUserContextRecord);
183
+ const records = allUserContextRecords.filter((record) => VISIBLE_STATUSES.has(record.status));
184
+ const pausedPlaybookRecords = listMemoryRecords({
185
+ agentId,
186
+ status: "archived",
187
+ limit: 200
188
+ }).filter(isUserContextRecord).filter((record) => record.tags?.some((tag) => tag.startsWith("playbook:paused:")));
189
+ const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);
190
+ const trustPolicy = getUserTrustPolicy();
191
+ const sourceDefinitions = listConnectorCatalog();
192
+ const sourceInstances = listConnectorInstances(config);
193
+ const sources = projectPersonalContextSources(sourceDefinitions, sourceInstances, allUserContextRecords);
194
+ const activeGoals = new GoalService().list({
195
+ agentId,
196
+ status: [
197
+ "active",
198
+ "paused",
199
+ "blocked",
200
+ "needs_input"
201
+ ],
202
+ limit: 20
203
+ });
204
+ return c.json({
205
+ agentId,
206
+ scope: {
207
+ profile: "global",
208
+ memory: "agent",
209
+ trust: "global",
210
+ agentId
211
+ },
212
+ ...profileBundle,
213
+ understanding: records.map(projectUserContextRecord),
214
+ insights: buildInsightSuggestions(records),
215
+ playbooks: buildPersonalPlaybooks([...records.filter((record) => record.status === "active"), ...pausedPlaybookRecords]),
216
+ sources,
217
+ sourceRecommendations: buildGoalSourceRecommendations(sourceDefinitions.filter((definition) => definition.capabilities.includes("context") || definition.capabilities.includes("memory_source")), new Set(sourceInstances.map((instance) => instance.connectorId)), activeGoals),
218
+ controls: {
219
+ mode: manifest.memory.mode,
220
+ sensitiveWritePolicy: manifest.memory.privacy?.sensitiveWritePolicy ?? "confirm",
221
+ crossAgentSharing: manifest.memory.privacy?.crossAgentSharing ?? "deny"
222
+ },
223
+ trust: {
224
+ defaultActionLevel: trustPolicy.defaultActionLevel,
225
+ levels: USER_TRUST_LEVELS,
226
+ autoRequiresExplicitOptIn: true
227
+ }
228
+ });
229
+ });
230
+ authenticated.get("/api/you/profile", async (c) => {
231
+ return c.json(await readProfileBundle(deps.service.currentConfig));
232
+ });
233
+ authenticated.get("/api/you/export", async (c) => {
234
+ const config = deps.service.currentConfig;
235
+ const agentId = selectedAgentId(config);
236
+ const profileBundle = await readProfileBundle(config);
237
+ const understanding = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES).filter(isUserContextRecord).map((record) => ({
238
+ statement: record.content,
239
+ kind: record.kind,
240
+ status: record.status,
241
+ sensitivity: record.sensitivity ?? "normal",
242
+ durability: record.durability,
243
+ canReference: record.disclosurePolicy !== "silent",
244
+ sourceName: record.source.provider ?? "local",
245
+ updatedAt: record.updatedAt
246
+ }));
247
+ return c.json({
248
+ version: 1,
249
+ exportedAt: (/* @__PURE__ */ new Date()).toISOString(),
250
+ agentId,
251
+ profile: profileBundle.profile,
252
+ understanding
253
+ });
254
+ });
255
+ authenticated.post("/api/you/import", deps.strictRateLimitMiddleware, async (c) => {
256
+ const body = await c.req.json().catch(() => null);
257
+ if (!body || typeof body !== "object" || Array.isArray(body) || body.version !== 1 || !Array.isArray(body.understanding)) return c.json({ error: "Invalid About You export" }, 400);
258
+ if (body.understanding.length > 500) return c.json({ error: "Import is limited to 500 understandings" }, 400);
259
+ const config = deps.service.currentConfig;
260
+ const agentId = selectedAgentId(config);
261
+ const existingStatements = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES).filter(isUserContextRecord).map((record) => record.content);
262
+ const { imports, skippedCount } = prepareUserContextImport(body.understanding, existingStatements);
263
+ runSqliteWriteTransaction(() => {
264
+ for (const item of imports) upsertMemoryRecord({
265
+ providerId: "local",
266
+ kind: item.kind,
267
+ agentId,
268
+ content: item.statement,
269
+ source: {
270
+ provider: "local",
271
+ path: "import://about-you"
272
+ },
273
+ confidence: 1,
274
+ tags: ["user-understanding", "user-import"],
275
+ status: "candidate",
276
+ sensitivity: item.sensitivity,
277
+ explicitness: "explicit",
278
+ durability: item.durability,
279
+ importance: .7,
280
+ disclosurePolicy: item.canReference ? "referenceable" : "silent"
281
+ });
282
+ });
283
+ return c.json({
284
+ ok: true,
285
+ importedCount: imports.length,
286
+ skippedCount
287
+ });
288
+ });
289
+ authenticated.patch("/api/you/profile", deps.strictRateLimitMiddleware, async (c) => {
290
+ const config = deps.service.currentConfig;
291
+ const parsed = parseProfilePatch(await c.req.json().catch(() => null));
292
+ if ("error" in parsed) return c.json({ error: parsed.error }, 400);
293
+ const current = await readUserProfileFile();
294
+ const saved = await writeUserProfileFile(patchUserProfileMarkdown(current.ok ? current.data.content : "", parsed.patch));
295
+ if (saved.ok === false) return c.json({ error: saved.error }, saved.status ?? 500);
296
+ if (parsed.patch.callName !== void 0) setUserProfilePromptState({ state: "active" });
297
+ deps.service.refreshUserProfileContext();
298
+ return c.json(await readProfileBundle(config));
299
+ });
300
+ authenticated.post("/api/you/profile-prompt", deps.strictRateLimitMiddleware, async (c) => {
301
+ const body = await c.req.json().catch(() => ({}));
302
+ const action = typeof body.action === "string" ? body.action : "";
303
+ if (action !== "snooze" && action !== "reset") return c.json({ error: "Action must be snooze or reset" }, 400);
304
+ const config = deps.service.currentConfig;
305
+ const current = await readProfileBundle(config);
306
+ const suggestionHash = current.profileSetup.callNameSuggestion?.id;
307
+ const promptState = action === "snooze" ? setUserProfilePromptState({
308
+ state: "snoozed",
309
+ suggestionHash,
310
+ snoozedUntil: new Date(Date.now() + PROFILE_PROMPT_SNOOZE_MS).toISOString()
311
+ }) : setUserProfilePromptState({
312
+ state: "active",
313
+ suggestionHash
314
+ });
315
+ return c.json({ profileSetup: buildUserProfileSetup({
316
+ profile: current.profile,
317
+ promptState,
318
+ config
319
+ }) });
320
+ });
321
+ authenticated.patch("/api/you/trust", deps.strictRateLimitMiddleware, async (c) => {
322
+ const body = await c.req.json().catch(() => ({}));
323
+ if (!isUserTrustLevel(body.defaultActionLevel)) return c.json({ error: "Invalid default action level" }, 400);
324
+ const policy = setUserTrustPolicy(body.defaultActionLevel);
325
+ deps.service.refreshActionTrustPolicy();
326
+ return c.json({ trust: {
327
+ defaultActionLevel: policy.defaultActionLevel,
328
+ levels: USER_TRUST_LEVELS,
329
+ autoRequiresExplicitOptIn: true
330
+ } });
331
+ });
332
+ authenticated.patch("/api/you/playbooks/:id", deps.strictRateLimitMiddleware, async (c) => {
333
+ const id = c.req.param("id");
334
+ if (!PLAYBOOK_IDS.includes(id)) return c.json({ error: "Playbook not found" }, 404);
335
+ const enabled = (await c.req.json().catch(() => ({}))).enabled;
336
+ if (typeof enabled !== "boolean") return c.json({ error: "enabled must be a boolean" }, 400);
337
+ const config = deps.service.currentConfig;
338
+ const agentId = selectedAgentId(config);
339
+ const pauseTag = `playbook:paused:${id}`;
340
+ const active = listMemoryRecords({
341
+ agentId,
342
+ status: "active",
343
+ limit: 500
344
+ }).filter(isUserContextRecord).filter((record) => playbookForRecord(record) === id);
345
+ const paused = listMemoryRecords({
346
+ agentId,
347
+ status: "archived",
348
+ limit: 500
349
+ }).filter(isUserContextRecord).filter((record) => record.tags?.includes(pauseTag));
350
+ const targets = enabled ? paused : active;
351
+ runSqliteWriteTransaction(() => {
352
+ for (const record of targets) preserveRecord(record, {
353
+ status: enabled ? "active" : "archived",
354
+ tags: enabled ? (record.tags ?? []).filter((tag) => tag !== pauseTag) : [...new Set([...record.tags ?? [], pauseTag])]
355
+ });
356
+ });
357
+ const current = active.concat(paused);
358
+ return c.json({
359
+ ok: true,
360
+ playbook: buildPersonalPlaybooks(current.map((record) => ({
361
+ ...record,
362
+ status: enabled ? "active" : "archived"
363
+ })))[0]
364
+ });
365
+ });
366
+ authenticated.patch("/api/you/insights/:id", deps.strictRateLimitMiddleware, async (c) => {
367
+ const config = deps.service.currentConfig;
368
+ const existing = editableRecord(c.req.param("id"), config);
369
+ if (!existing || existing.status !== "active" || !ACTIONABLE_INSIGHT_KINDS.has(existing.kind)) return c.json({ error: "Insight not found" }, 404);
370
+ const body = await c.req.json().catch(() => ({}));
371
+ const action = typeof body.action === "string" ? body.action : "";
372
+ if (action === "dismiss") {
373
+ preserveRecord(existing, { tags: [...new Set([...existing.tags ?? [], INSIGHT_DISMISSED_TAG])] });
374
+ return c.json({
375
+ ok: true,
376
+ status: "dismissed"
377
+ });
378
+ }
379
+ if (action !== "apply") return c.json({ error: "Action must be apply or dismiss" }, 400);
380
+ const title = existing.content.trim().split(/\r?\n/)[0].slice(0, 72);
381
+ const uiLocale = body.uiLocale === "zh" ? "zh" : "en";
382
+ const contractDraft = await draftGoalContract({
383
+ title,
384
+ context: existing.content,
385
+ uiLocale,
386
+ modelRef: config.goals?.judgeModelRef
387
+ });
388
+ const goals = new GoalService();
389
+ const goal = goals.create({
390
+ title,
391
+ description: existing.content,
392
+ agentId: selectedAgentId(config),
393
+ priority: "normal",
394
+ uiLocale,
395
+ source: "api",
396
+ contract: contractDraft.contract,
397
+ config
398
+ });
399
+ goals.setContextMessage({
400
+ goalId: goal.id,
401
+ text: existing.content
402
+ });
403
+ let queued = false;
404
+ try {
405
+ deps.service.enqueueGoalRun(goal.id, { source: "api" });
406
+ queued = true;
407
+ } catch {
408
+ queued = false;
409
+ } finally {
410
+ preserveRecord(existing, { tags: [...new Set([...existing.tags ?? [], INSIGHT_ACCEPTED_TAG])] });
411
+ }
412
+ return c.json({
413
+ ok: true,
414
+ status: queued ? "queued" : "saved",
415
+ goal: goals.get(goal.id),
416
+ href: `/goals/${goal.id}`
417
+ });
418
+ });
419
+ authenticated.patch("/api/you/controls", deps.strictRateLimitMiddleware, async (c) => {
420
+ const config = deps.service.currentConfig;
421
+ const agentId = selectedAgentId(config);
422
+ const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);
423
+ const body = await c.req.json().catch(() => ({}));
424
+ const parsed = MemoryPolicySchema.safeParse({
425
+ ...manifest.memory,
426
+ mode: body.mode,
427
+ privacy: {
428
+ ...manifest.memory.privacy,
429
+ sensitiveWritePolicy: body.sensitiveWritePolicy,
430
+ crossAgentSharing: body.crossAgentSharing
431
+ }
432
+ });
433
+ if (!parsed.success) return c.json({ error: parsed.error.issues[0]?.message ?? "Invalid personal context controls" }, 400);
434
+ const prep = prepareUpdateAgent(config, agentId, { memory: parsed.data });
435
+ if (prep.ok === false) return c.json({ error: prep.error }, prep.status ?? 400);
436
+ const saved = await deps.service.saveConfig(prep.data.nextConfig);
437
+ if (!saved.saved) return c.json({ error: saved.error ?? "save failed" }, 500);
438
+ const updated = resolveEffectiveAgentManifestForAgent(deps.service.currentConfig, agentId);
439
+ return c.json({ controls: {
440
+ mode: updated.memory.mode,
441
+ sensitiveWritePolicy: updated.memory.privacy?.sensitiveWritePolicy ?? "confirm",
442
+ crossAgentSharing: updated.memory.privacy?.crossAgentSharing ?? "deny"
443
+ } });
444
+ });
445
+ authenticated.delete("/api/you/sources/:instanceId", deps.strictRateLimitMiddleware, async (c) => {
446
+ const config = deps.service.currentConfig;
447
+ const instanceId = c.req.param("instanceId");
448
+ const installedInstances = listConnectorInstances(config);
449
+ const instance = installedInstances.find((item) => item.instanceId === instanceId);
450
+ const definition = instance ? listConnectorCatalog().find((item) => item.id === instance.connectorId) : void 0;
451
+ if (!instance || !definition || !definition.capabilities.some((capability) => capability === "context" || capability === "memory_source")) return c.json({ error: "Personal context source not found" }, 404);
452
+ const body = await c.req.json().catch(() => ({}));
453
+ if (typeof body.deleteDerivedUnderstanding !== "boolean") return c.json({ error: "deleteDerivedUnderstanding must be a boolean" }, 400);
454
+ try {
455
+ const sourceInstances = installedInstances.filter((item) => item.connectorId === instance.connectorId);
456
+ for (const sourceInstance of sourceInstances) uninstallConnector(config, sourceInstance.instanceId);
457
+ const saved = await deps.service.saveConfig(config);
458
+ if (!saved.saved) return c.json({ error: saved.error ?? "save failed" }, 500);
459
+ } catch (error) {
460
+ return c.json({ error: error instanceof Error ? error.message : String(error) }, 400);
461
+ }
462
+ let deletedUnderstandingCount = 0;
463
+ if (body.deleteDerivedUnderstanding) {
464
+ const agentId = selectedAgentId(config);
465
+ const targets = recordsDerivedFromPersonalContextSource(listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES), agentId, instance.connectorId);
466
+ runSqliteWriteTransaction(() => {
467
+ for (const record of targets) deleteMemoryRecord(record.id);
468
+ });
469
+ deletedUnderstandingCount = targets.length;
470
+ }
471
+ return c.json({
472
+ ok: true,
473
+ deletedUnderstandingCount
474
+ });
475
+ });
476
+ authenticated.patch("/api/you/understanding/:id", deps.strictRateLimitMiddleware, async (c) => {
477
+ const config = deps.service.currentConfig;
478
+ const existing = editableRecord(c.req.param("id"), config);
479
+ if (!existing) return c.json({ error: "Understanding not found" }, 404);
480
+ const body = await c.req.json().catch(() => ({}));
481
+ const action = typeof body.action === "string" ? body.action : "";
482
+ if (action === "confirm") return c.json({ understanding: projectUserContextRecord(preserveRecord(existing, {
483
+ status: "active",
484
+ reviewAfter: nextMemoryReviewAt(existing)
485
+ })) });
486
+ if (action === "reject") return c.json({ understanding: projectUserContextRecord(preserveRecord(existing, { status: "rejected" })) });
487
+ if (action === "update") {
488
+ const content = typeof body.content === "string" ? body.content.trim() : "";
489
+ if (!content) return c.json({ error: "Updated understanding cannot be empty" }, 400);
490
+ const replacement = upsertMemoryRecord({
491
+ providerId: "local",
492
+ kind: existing.kind,
493
+ agentId: existing.scope.agentId,
494
+ workspaceId: existing.scope.workspaceId,
495
+ sessionKey: existing.scope.sessionKey,
496
+ projectId: existing.scope.projectId,
497
+ content,
498
+ source: { provider: "local" },
499
+ confidence: 1,
500
+ tags: [...new Set([
501
+ ...existing.tags ?? [],
502
+ "user-understanding",
503
+ "explicit-user-correction"
504
+ ])],
505
+ status: "active",
506
+ sensitivity: existing.sensitivity,
507
+ explicitness: "explicit",
508
+ durability: existing.durability,
509
+ importance: Math.max(existing.importance, .8),
510
+ disclosurePolicy: existing.disclosurePolicy,
511
+ evidence: existing.evidence,
512
+ reviewAfter: nextMemoryReviewAt({
513
+ durability: existing.durability,
514
+ explicitness: "explicit"
515
+ }),
516
+ supersedesRecordId: existing.id,
517
+ conflictGroupId: existing.conflictGroupId
518
+ });
519
+ preserveRecord(existing, {
520
+ status: "archived",
521
+ validTo: (/* @__PURE__ */ new Date()).toISOString()
522
+ });
523
+ return c.json({ understanding: projectUserContextRecord(replacement) });
524
+ }
525
+ return c.json({ error: "Action must be confirm, reject, or update" }, 400);
526
+ });
527
+ authenticated.delete("/api/you/understanding/:id", deps.strictRateLimitMiddleware, (c) => {
528
+ const config = deps.service.currentConfig;
529
+ const existing = editableRecord(c.req.param("id"), config);
530
+ if (!existing) return c.json({ error: "Understanding not found" }, 404);
531
+ deleteMemoryRecord(existing.id);
532
+ return c.json({ ok: true });
533
+ });
534
+ }
535
+ //#endregion
536
+ export { buildInsightSuggestions, buildPersonalPlaybooks, registerYouRoutes };
537
+
538
+ //# sourceMappingURL=you.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"you.js","names":[],"sources":["../../../../../src/gateway/hono/routes/you.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { resolveDefaultAgentId } from '../../../agent/agent-scope.js';\nimport type { MemoryRecord } from '../../../agent/memory/types.js';\nimport { nextMemoryReviewAt, resolveMemoryStability } from '../../../agent/memory/lifecycle.js';\nimport { MemoryPolicySchema } from '../../../agent-manifest/schema.js';\nimport { resolveEffectiveAgentManifestForAgent } from '../../../config/agent-profile.js';\nimport type { Config } from '../../../config/schema.js';\nimport { listConnectorCatalog } from '../../../connectors/catalog.js';\nimport { listConnectorInstances } from '../../../connectors/instances.js';\nimport { uninstallConnector } from '../../../connectors/install.js';\nimport { draftGoalContract, GoalService } from '../../../goals/index.js';\nimport { prepareUpdateAgent, readUserProfileFile, writeUserProfileFile } from '../../agents-admin.js';\nimport {\n deleteMemoryRecord,\n getMemoryRecord,\n getUserProfilePromptState,\n getUserTrustPolicy,\n listMemoryRecords,\n runSqliteWriteTransaction,\n setUserProfilePromptState,\n setUserTrustPolicy,\n upsertMemoryRecord,\n} from '../../../storage/sqlite/index.js';\nimport { isUserTrustLevel, USER_TRUST_LEVELS } from '../../../user-context/trust-policy.js';\nimport {\n buildUserProfileSetup,\n parseUserProfileMarkdown,\n patchUserProfileMarkdown,\n type UserProfileFields,\n} from '../../../user-context/profile.js';\nimport {\n isUserContextRecord,\n projectPersonalContextSources,\n projectUserContextRecord,\n recordsDerivedFromPersonalContextSource,\n} from '../../../user-context/projection.js';\nimport { prepareUserContextImport } from '../../../user-context/import.js';\nimport { buildGoalSourceRecommendations } from '../../../user-context/source-recommendations.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\n\nconst VISIBLE_STATUSES = new Set<MemoryRecord['status']>(['active', 'candidate', 'needs_review']);\nconst ACTIONABLE_INSIGHT_KINDS = new Set<MemoryRecord['kind']>([\n 'routine',\n 'commitment',\n 'long_term_goal',\n 'derived_insight',\n 'task_lesson',\n]);\nconst INSIGHT_ACCEPTED_TAG = 'insight-action:accepted';\nconst INSIGHT_DISMISSED_TAG = 'insight-action:dismissed';\nconst PLAYBOOK_IDS = ['communication', 'execution', 'routines'] as const;\ntype PlaybookId = typeof PLAYBOOK_IDS[number];\nconst PROFILE_FIELD_LIMITS: Record<keyof UserProfileFields, number> = {\n callName: 80,\n pronouns: 80,\n timezone: 100,\n notes: 5_000,\n};\nconst PROFILE_PROMPT_SNOOZE_MS = 7 * 24 * 60 * 60 * 1_000;\nconst ALL_MEMORY_STATUSES: MemoryRecord['status'][] = [\n 'candidate',\n 'active',\n 'needs_review',\n 'stale',\n 'archived',\n 'rejected',\n];\n\nfunction listAllAgentMemoryRecords(agentId: string, statuses: MemoryRecord['status'][]): MemoryRecord[] {\n return statuses.flatMap((status) => {\n const records: MemoryRecord[] = [];\n let offset = 0;\n while (true) {\n const page = listMemoryRecords({ agentId, status, limit: 500, offset });\n records.push(...page);\n if (page.length < 500) break;\n offset += page.length;\n }\n return records;\n });\n}\n\nasync function readProfileBundle(config: Config) {\n const result = await readUserProfileFile();\n const profileContent = result.ok ? result.data.content : '';\n const profile = parseUserProfileMarkdown(profileContent);\n const promptState = getUserProfilePromptState();\n return {\n profileContent,\n profile,\n profileSetup: buildUserProfileSetup({ profile, promptState, config }),\n };\n}\n\nfunction parseProfilePatch(body: unknown): { patch: Partial<UserProfileFields> } | { error: string } {\n if (!body || typeof body !== 'object' || Array.isArray(body)) return { error: 'Invalid profile patch' };\n const record = body as Record<string, unknown>;\n const patch: Partial<UserProfileFields> = {};\n for (const field of Object.keys(PROFILE_FIELD_LIMITS) as Array<keyof UserProfileFields>) {\n if (!(field in record)) continue;\n if (typeof record[field] !== 'string') return { error: `${field} must be a string` };\n const value = record[field].trim();\n if (value.length > PROFILE_FIELD_LIMITS[field]) {\n return { error: `${field} is too long` };\n }\n patch[field] = value;\n }\n return Object.keys(patch).length > 0 ? { patch } : { error: 'No profile fields provided' };\n}\n\nfunction playbookForRecord(record: MemoryRecord): PlaybookId | undefined {\n if (record.kind === 'preference' || record.kind === 'boundary' || record.kind === 'tool_preference') return 'communication';\n if (record.kind === 'task_lesson' || record.kind === 'derived_insight') return 'execution';\n if (record.kind === 'routine') return 'routines';\n return undefined;\n}\n\nexport function buildPersonalPlaybooks(records: MemoryRecord[]) {\n return PLAYBOOK_IDS.flatMap((id) => {\n const rules = records.filter((record) => playbookForRecord(record) === id);\n if (rules.length === 0) return [];\n return [{\n id,\n enabled: rules.some((record) => record.status === 'active'),\n rules: rules.map((record) => ({\n id: record.id,\n statement: record.content,\n origin: record.explicitness,\n })),\n updatedAt: rules.map((record) => record.updatedAt).sort().at(-1),\n }];\n });\n}\n\nexport function buildInsightSuggestions(records: MemoryRecord[]) {\n return records\n .filter((record) => record.status === 'active')\n .filter((record) => ACTIONABLE_INSIGHT_KINDS.has(record.kind))\n .filter((record) => !record.tags?.includes(INSIGHT_ACCEPTED_TAG) && !record.tags?.includes(INSIGHT_DISMISSED_TAG))\n .filter((record) => {\n const stability = resolveMemoryStability(record);\n return record.explicitness === 'explicit' || (record.evidence?.length ?? 0) >= 2 || stability.band === 'strong';\n })\n .sort((left, right) => right.importance - left.importance || Date.parse(right.updatedAt) - Date.parse(left.updatedAt))\n .slice(0, 5)\n .map((record) => ({\n id: record.id,\n insight: record.content,\n kind: record.kind,\n action: record.kind === 'routine' ? 'make_repeatable' as const : 'start_progress' as const,\n evidenceCount: record.evidence?.length ?? 0,\n confidence: record.confidence,\n sourceName: record.source.provider ?? 'local',\n }));\n}\n\nfunction selectedAgentId(config: Config): string {\n return resolveDefaultAgentId(config);\n}\n\nfunction editableRecord(recordId: string, config: Config): MemoryRecord | null {\n const record = getMemoryRecord(recordId);\n if (\n !record\n || record.scope.agentId !== selectedAgentId(config)\n || !VISIBLE_STATUSES.has(record.status)\n || !isUserContextRecord(record)\n ) return null;\n return record;\n}\n\nfunction preserveRecord(record: MemoryRecord, patch: Partial<Parameters<typeof upsertMemoryRecord>[0]>) {\n return upsertMemoryRecord({\n id: record.id,\n providerId: record.source.provider ?? 'local',\n kind: record.kind,\n agentId: record.scope.agentId,\n workspaceId: record.scope.workspaceId,\n sessionKey: record.scope.sessionKey,\n projectId: record.scope.projectId,\n content: record.content,\n source: record.source,\n confidence: record.confidence,\n tags: record.tags,\n status: record.status,\n sensitivity: record.sensitivity,\n canonicalKey: record.canonicalKey,\n explicitness: record.explicitness,\n durability: record.durability,\n importance: record.importance,\n disclosurePolicy: record.disclosurePolicy,\n evidence: record.evidence,\n reviewAfter: record.reviewAfter,\n expiresAt: record.expiresAt,\n validFrom: record.validFrom,\n validTo: record.validTo,\n supersedesRecordId: record.supersedesRecordId,\n conflictGroupId: record.conflictGroupId,\n ...patch,\n });\n}\n\nexport function registerYouRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n authenticated.get('/api/you', async (c) => {\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const profileBundle = await readProfileBundle(config);\n const allUserContextRecords = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES)\n .filter(isUserContextRecord);\n const records = allUserContextRecords.filter((record) => VISIBLE_STATUSES.has(record.status));\n const pausedPlaybookRecords = listMemoryRecords({ agentId, status: 'archived', limit: 200 })\n .filter(isUserContextRecord)\n .filter((record) => record.tags?.some((tag) => tag.startsWith('playbook:paused:')));\n const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n const trustPolicy = getUserTrustPolicy();\n const sourceDefinitions = listConnectorCatalog();\n const sourceInstances = listConnectorInstances(config);\n const sources = projectPersonalContextSources(sourceDefinitions, sourceInstances, allUserContextRecords);\n const activeGoals = new GoalService().list({\n agentId,\n status: ['active', 'paused', 'blocked', 'needs_input'],\n limit: 20,\n });\n return c.json({\n agentId,\n scope: {\n profile: 'global',\n memory: 'agent',\n trust: 'global',\n agentId,\n },\n ...profileBundle,\n understanding: records.map(projectUserContextRecord),\n insights: buildInsightSuggestions(records),\n playbooks: buildPersonalPlaybooks([...records.filter((record) => record.status === 'active'), ...pausedPlaybookRecords]),\n sources,\n sourceRecommendations: buildGoalSourceRecommendations(\n sourceDefinitions.filter((definition) => (\n definition.capabilities.includes('context') || definition.capabilities.includes('memory_source')\n )),\n new Set(sourceInstances.map((instance) => instance.connectorId)),\n activeGoals,\n ),\n controls: {\n mode: manifest.memory.mode,\n sensitiveWritePolicy: manifest.memory.privacy?.sensitiveWritePolicy ?? 'confirm',\n crossAgentSharing: manifest.memory.privacy?.crossAgentSharing ?? 'deny',\n },\n trust: {\n defaultActionLevel: trustPolicy.defaultActionLevel,\n levels: USER_TRUST_LEVELS,\n autoRequiresExplicitOptIn: true,\n },\n });\n });\n\n authenticated.get('/api/you/profile', async (c) => {\n return c.json(await readProfileBundle(deps.service.currentConfig as Config));\n });\n\n authenticated.get('/api/you/export', async (c) => {\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const profileBundle = await readProfileBundle(config);\n const understanding = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES)\n .filter(isUserContextRecord)\n .map((record) => ({\n statement: record.content,\n kind: record.kind,\n status: record.status,\n sensitivity: record.sensitivity ?? 'normal',\n durability: record.durability,\n canReference: record.disclosurePolicy !== 'silent',\n sourceName: record.source.provider ?? 'local',\n updatedAt: record.updatedAt,\n }));\n return c.json({\n version: 1,\n exportedAt: new Date().toISOString(),\n agentId,\n profile: profileBundle.profile,\n understanding,\n });\n });\n\n authenticated.post('/api/you/import', deps.strictRateLimitMiddleware, async (c) => {\n const body = await c.req.json().catch(() => null);\n if (!body || typeof body !== 'object' || Array.isArray(body) || body.version !== 1 || !Array.isArray(body.understanding)) {\n return c.json({ error: 'Invalid About You export' }, 400);\n }\n if (body.understanding.length > 500) return c.json({ error: 'Import is limited to 500 understandings' }, 400);\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const existingStatements = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES)\n .filter(isUserContextRecord)\n .map((record) => record.content);\n const { imports, skippedCount } = prepareUserContextImport(body.understanding, existingStatements);\n runSqliteWriteTransaction(() => {\n for (const item of imports) {\n upsertMemoryRecord({\n providerId: 'local',\n kind: item.kind,\n agentId,\n content: item.statement,\n source: { provider: 'local', path: 'import://about-you' },\n confidence: 1,\n tags: ['user-understanding', 'user-import'],\n status: 'candidate',\n sensitivity: item.sensitivity,\n explicitness: 'explicit',\n durability: item.durability,\n importance: 0.7,\n disclosurePolicy: item.canReference ? 'referenceable' : 'silent',\n });\n }\n });\n return c.json({ ok: true, importedCount: imports.length, skippedCount });\n });\n\n authenticated.patch('/api/you/profile', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const parsed = parseProfilePatch(await c.req.json().catch(() => null));\n if ('error' in parsed) return c.json({ error: parsed.error }, 400);\n const current = await readUserProfileFile();\n const content = current.ok ? current.data.content : '';\n const nextContent = patchUserProfileMarkdown(content, parsed.patch);\n const saved = await writeUserProfileFile(nextContent);\n if (saved.ok === false) return c.json({ error: saved.error }, saved.status ?? 500);\n if (parsed.patch.callName !== undefined) {\n setUserProfilePromptState({ state: 'active' });\n }\n deps.service.refreshUserProfileContext();\n return c.json(await readProfileBundle(config));\n });\n\n authenticated.post('/api/you/profile-prompt', deps.strictRateLimitMiddleware, async (c) => {\n const body = await c.req.json().catch(() => ({}));\n const action = typeof body.action === 'string' ? body.action : '';\n if (action !== 'snooze' && action !== 'reset') {\n return c.json({ error: 'Action must be snooze or reset' }, 400);\n }\n const config = deps.service.currentConfig as Config;\n const current = await readProfileBundle(config);\n const suggestionHash = current.profileSetup.callNameSuggestion?.id;\n const promptState = action === 'snooze'\n ? setUserProfilePromptState({\n state: 'snoozed',\n suggestionHash,\n snoozedUntil: new Date(Date.now() + PROFILE_PROMPT_SNOOZE_MS).toISOString(),\n })\n : setUserProfilePromptState({ state: 'active', suggestionHash });\n return c.json({\n profileSetup: buildUserProfileSetup({ profile: current.profile, promptState, config }),\n });\n });\n\n authenticated.patch('/api/you/trust', deps.strictRateLimitMiddleware, async (c) => {\n const body = await c.req.json().catch(() => ({}));\n if (!isUserTrustLevel(body.defaultActionLevel)) {\n return c.json({ error: 'Invalid default action level' }, 400);\n }\n const policy = setUserTrustPolicy(body.defaultActionLevel);\n deps.service.refreshActionTrustPolicy();\n return c.json({\n trust: {\n defaultActionLevel: policy.defaultActionLevel,\n levels: USER_TRUST_LEVELS,\n autoRequiresExplicitOptIn: true,\n },\n });\n });\n\n authenticated.patch('/api/you/playbooks/:id', deps.strictRateLimitMiddleware, async (c) => {\n const id = c.req.param('id') as PlaybookId;\n if (!PLAYBOOK_IDS.includes(id)) return c.json({ error: 'Playbook not found' }, 404);\n const body = await c.req.json().catch(() => ({}));\n const enabled = body.enabled;\n if (typeof enabled !== 'boolean') return c.json({ error: 'enabled must be a boolean' }, 400);\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const pauseTag = `playbook:paused:${id}`;\n const active = listMemoryRecords({ agentId, status: 'active', limit: 500 })\n .filter(isUserContextRecord)\n .filter((record) => playbookForRecord(record) === id);\n const paused = listMemoryRecords({ agentId, status: 'archived', limit: 500 })\n .filter(isUserContextRecord)\n .filter((record) => record.tags?.includes(pauseTag));\n const targets = enabled ? paused : active;\n runSqliteWriteTransaction(() => {\n for (const record of targets) {\n preserveRecord(record, {\n status: enabled ? 'active' : 'archived',\n tags: enabled\n ? (record.tags ?? []).filter((tag) => tag !== pauseTag)\n : [...new Set([...(record.tags ?? []), pauseTag])],\n });\n }\n });\n const current = active.concat(paused);\n return c.json({ ok: true, playbook: buildPersonalPlaybooks(current.map((record) => ({\n ...record,\n status: enabled ? 'active' : 'archived',\n })))[0] });\n });\n\n authenticated.patch('/api/you/insights/:id', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const existing = editableRecord(c.req.param('id'), config);\n if (!existing || existing.status !== 'active' || !ACTIONABLE_INSIGHT_KINDS.has(existing.kind)) {\n return c.json({ error: 'Insight not found' }, 404);\n }\n const body = await c.req.json().catch(() => ({}));\n const action = typeof body.action === 'string' ? body.action : '';\n if (action === 'dismiss') {\n preserveRecord(existing, { tags: [...new Set([...(existing.tags ?? []), INSIGHT_DISMISSED_TAG])] });\n return c.json({ ok: true, status: 'dismissed' });\n }\n if (action !== 'apply') return c.json({ error: 'Action must be apply or dismiss' }, 400);\n\n const title = existing.content.trim().split(/\\r?\\n/)[0]!.slice(0, 72);\n const uiLocale = body.uiLocale === 'zh' ? 'zh' : 'en';\n const contractDraft = await draftGoalContract({\n title,\n context: existing.content,\n uiLocale,\n modelRef: config.goals?.judgeModelRef,\n });\n const goals = new GoalService();\n const goal = goals.create({\n title,\n description: existing.content,\n agentId: selectedAgentId(config),\n priority: 'normal',\n uiLocale,\n source: 'api',\n contract: contractDraft.contract,\n config,\n });\n goals.setContextMessage({ goalId: goal.id, text: existing.content });\n let queued = false;\n try {\n deps.service.enqueueGoalRun(goal.id, { source: 'api' });\n queued = true;\n } catch {\n queued = false;\n } finally {\n preserveRecord(existing, { tags: [...new Set([...(existing.tags ?? []), INSIGHT_ACCEPTED_TAG])] });\n }\n return c.json({ ok: true, status: queued ? 'queued' : 'saved', goal: goals.get(goal.id), href: `/goals/${goal.id}` });\n });\n\n authenticated.patch('/api/you/controls', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n const body = await c.req.json().catch(() => ({}));\n const parsed = MemoryPolicySchema.safeParse({\n ...manifest.memory,\n mode: body.mode,\n privacy: {\n ...manifest.memory.privacy,\n sensitiveWritePolicy: body.sensitiveWritePolicy,\n crossAgentSharing: body.crossAgentSharing,\n },\n });\n if (!parsed.success) {\n return c.json({ error: parsed.error.issues[0]?.message ?? 'Invalid personal context controls' }, 400);\n }\n const prep = prepareUpdateAgent(config, agentId, { memory: parsed.data });\n if (prep.ok === false) return c.json({ error: prep.error }, prep.status ?? 400);\n const saved = await deps.service.saveConfig(prep.data.nextConfig);\n if (!saved.saved) return c.json({ error: saved.error ?? 'save failed' }, 500);\n const updated = resolveEffectiveAgentManifestForAgent(deps.service.currentConfig as Config, agentId);\n return c.json({\n controls: {\n mode: updated.memory.mode,\n sensitiveWritePolicy: updated.memory.privacy?.sensitiveWritePolicy ?? 'confirm',\n crossAgentSharing: updated.memory.privacy?.crossAgentSharing ?? 'deny',\n },\n });\n });\n\n authenticated.delete('/api/you/sources/:instanceId', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const instanceId = c.req.param('instanceId');\n const installedInstances = listConnectorInstances(config);\n const instance = installedInstances.find((item) => item.instanceId === instanceId);\n const definition = instance\n ? listConnectorCatalog().find((item) => item.id === instance.connectorId)\n : undefined;\n if (!instance || !definition || !definition.capabilities.some((capability) => (\n capability === 'context' || capability === 'memory_source'\n ))) {\n return c.json({ error: 'Personal context source not found' }, 404);\n }\n const body = await c.req.json().catch(() => ({}));\n if (typeof body.deleteDerivedUnderstanding !== 'boolean') {\n return c.json({ error: 'deleteDerivedUnderstanding must be a boolean' }, 400);\n }\n\n try {\n const sourceInstances = installedInstances.filter((item) => item.connectorId === instance.connectorId);\n for (const sourceInstance of sourceInstances) {\n uninstallConnector(config, sourceInstance.instanceId);\n }\n const saved = await deps.service.saveConfig(config);\n if (!saved.saved) return c.json({ error: saved.error ?? 'save failed' }, 500);\n } catch (error) {\n return c.json({ error: error instanceof Error ? error.message : String(error) }, 400);\n }\n\n let deletedUnderstandingCount = 0;\n if (body.deleteDerivedUnderstanding) {\n const agentId = selectedAgentId(config);\n const targets = recordsDerivedFromPersonalContextSource(\n listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES),\n agentId,\n instance.connectorId,\n );\n runSqliteWriteTransaction(() => {\n for (const record of targets) deleteMemoryRecord(record.id);\n });\n deletedUnderstandingCount = targets.length;\n }\n return c.json({ ok: true, deletedUnderstandingCount });\n });\n\n authenticated.patch('/api/you/understanding/:id', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const existing = editableRecord(c.req.param('id'), config);\n if (!existing) return c.json({ error: 'Understanding not found' }, 404);\n const body = await c.req.json().catch(() => ({}));\n const action = typeof body.action === 'string' ? body.action : '';\n if (action === 'confirm') {\n return c.json({\n understanding: projectUserContextRecord(preserveRecord(existing, {\n status: 'active',\n reviewAfter: nextMemoryReviewAt(existing),\n })),\n });\n }\n if (action === 'reject') {\n return c.json({ understanding: projectUserContextRecord(preserveRecord(existing, { status: 'rejected' })) });\n }\n if (action === 'update') {\n const content = typeof body.content === 'string' ? body.content.trim() : '';\n if (!content) return c.json({ error: 'Updated understanding cannot be empty' }, 400);\n const replacement = upsertMemoryRecord({\n providerId: 'local',\n kind: existing.kind,\n agentId: existing.scope.agentId,\n workspaceId: existing.scope.workspaceId,\n sessionKey: existing.scope.sessionKey,\n projectId: existing.scope.projectId,\n content,\n source: { provider: 'local' },\n confidence: 1,\n tags: [...new Set([...(existing.tags ?? []), 'user-understanding', 'explicit-user-correction'])],\n status: 'active',\n sensitivity: existing.sensitivity,\n explicitness: 'explicit',\n durability: existing.durability,\n importance: Math.max(existing.importance, 0.8),\n disclosurePolicy: existing.disclosurePolicy,\n evidence: existing.evidence,\n reviewAfter: nextMemoryReviewAt({ durability: existing.durability, explicitness: 'explicit' }),\n supersedesRecordId: existing.id,\n conflictGroupId: existing.conflictGroupId,\n });\n preserveRecord(existing, { status: 'archived', validTo: new Date().toISOString() });\n return c.json({ understanding: projectUserContextRecord(replacement) });\n }\n return c.json({ error: 'Action must be confirm, reject, or update' }, 400);\n });\n\n authenticated.delete('/api/you/understanding/:id', deps.strictRateLimitMiddleware, (c) => {\n const config = deps.service.currentConfig as Config;\n const existing = editableRecord(c.req.param('id'), config);\n if (!existing) return c.json({ error: 'Understanding not found' }, 404);\n deleteMemoryRecord(existing.id);\n return c.json({ ok: true });\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;kBAEsE;aAGC;AAoCvE,MAAM,mBAAmB,IAAI,IAA4B;CAAC;CAAU;CAAa;CAAe,CAAC;AACjG,MAAM,2BAA2B,IAAI,IAA0B;CAC7D;CACA;CACA;CACA;CACA;CACD,CAAC;AACF,MAAM,uBAAuB;AAC7B,MAAM,wBAAwB;AAC9B,MAAM,eAAe;CAAC;CAAiB;CAAa;CAAW;AAE/D,MAAM,uBAAgE;CACpE,UAAU;CACV,UAAU;CACV,UAAU;CACV,OAAO;CACR;AACD,MAAM,2BAA2B,QAAc,KAAK;AACpD,MAAM,sBAAgD;CACpD;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAS,0BAA0B,SAAiB,UAAoD;AACtG,QAAO,SAAS,SAAS,WAAW;EAClC,MAAM,UAA0B,EAAE;EAClC,IAAI,SAAS;AACb,SAAO,MAAM;GACX,MAAM,OAAO,kBAAkB;IAAE;IAAS;IAAQ,OAAO;IAAK;IAAQ,CAAC;AACvE,WAAQ,KAAK,GAAG,KAAK;AACrB,OAAI,KAAK,SAAS,IAAK;AACvB,aAAU,KAAK;;AAEjB,SAAO;GACP;;AAGJ,eAAe,kBAAkB,QAAgB;CAC/C,MAAM,SAAS,MAAM,qBAAqB;CAC1C,MAAM,iBAAiB,OAAO,KAAK,OAAO,KAAK,UAAU;CACzD,MAAM,UAAU,yBAAyB,eAAe;AAExD,QAAO;EACL;EACA;EACA,cAAc,sBAAsB;GAAE;GAAS,aAJ7B,2BAIwC;GAAE;GAAQ,CAAC;EACtE;;AAGH,SAAS,kBAAkB,MAA0E;AACnG,KAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,KAAK,CAAE,QAAO,EAAE,OAAO,yBAAyB;CACvG,MAAM,SAAS;CACf,MAAM,QAAoC,EAAE;AAC5C,MAAK,MAAM,SAAS,OAAO,KAAK,qBAAqB,EAAoC;AACvF,MAAI,EAAE,SAAS,QAAS;AACxB,MAAI,OAAO,OAAO,WAAW,SAAU,QAAO,EAAE,OAAO,GAAG,MAAM,oBAAoB;EACpF,MAAM,QAAQ,OAAO,OAAO,MAAM;AAClC,MAAI,MAAM,SAAS,qBAAqB,OACtC,QAAO,EAAE,OAAO,GAAG,MAAM,eAAe;AAE1C,QAAM,SAAS;;AAEjB,QAAO,OAAO,KAAK,MAAM,CAAC,SAAS,IAAI,EAAE,OAAO,GAAG,EAAE,OAAO,8BAA8B;;AAG5F,SAAS,kBAAkB,QAA8C;AACvE,KAAI,OAAO,SAAS,gBAAgB,OAAO,SAAS,cAAc,OAAO,SAAS,kBAAmB,QAAO;AAC5G,KAAI,OAAO,SAAS,iBAAiB,OAAO,SAAS,kBAAmB,QAAO;AAC/E,KAAI,OAAO,SAAS,UAAW,QAAO;;AAIxC,SAAgB,uBAAuB,SAAyB;AAC9D,QAAO,aAAa,SAAS,OAAO;EAClC,MAAM,QAAQ,QAAQ,QAAQ,WAAW,kBAAkB,OAAO,KAAK,GAAG;AAC1E,MAAI,MAAM,WAAW,EAAG,QAAO,EAAE;AACjC,SAAO,CAAC;GACN;GACA,SAAS,MAAM,MAAM,WAAW,OAAO,WAAW,SAAS;GAC3D,OAAO,MAAM,KAAK,YAAY;IAC5B,IAAI,OAAO;IACX,WAAW,OAAO;IAClB,QAAQ,OAAO;IAChB,EAAE;GACH,WAAW,MAAM,KAAK,WAAW,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG;GACjE,CAAC;GACF;;AAGJ,SAAgB,wBAAwB,SAAyB;AAC/D,QAAO,QACJ,QAAQ,WAAW,OAAO,WAAW,SAAS,CAC9C,QAAQ,WAAW,yBAAyB,IAAI,OAAO,KAAK,CAAC,CAC7D,QAAQ,WAAW,CAAC,OAAO,MAAM,SAAS,qBAAqB,IAAI,CAAC,OAAO,MAAM,SAAS,sBAAsB,CAAC,CACjH,QAAQ,WAAW;EAClB,MAAM,YAAY,uBAAuB,OAAO;AAChD,SAAO,OAAO,iBAAiB,eAAe,OAAO,UAAU,UAAU,MAAM,KAAK,UAAU,SAAS;GACvG,CACD,MAAM,MAAM,UAAU,MAAM,aAAa,KAAK,cAAc,KAAK,MAAM,MAAM,UAAU,GAAG,KAAK,MAAM,KAAK,UAAU,CAAC,CACrH,MAAM,GAAG,EAAE,CACX,KAAK,YAAY;EAChB,IAAI,OAAO;EACX,SAAS,OAAO;EAChB,MAAM,OAAO;EACb,QAAQ,OAAO,SAAS,YAAY,oBAA6B;EACjE,eAAe,OAAO,UAAU,UAAU;EAC1C,YAAY,OAAO;EACnB,YAAY,OAAO,OAAO,YAAY;EACvC,EAAE;;AAGP,SAAS,gBAAgB,QAAwB;AAC/C,QAAO,sBAAsB,OAAO;;AAGtC,SAAS,eAAe,UAAkB,QAAqC;CAC7E,MAAM,SAAS,gBAAgB,SAAS;AACxC,KACE,CAAC,UACE,OAAO,MAAM,YAAY,gBAAgB,OAAO,IAChD,CAAC,iBAAiB,IAAI,OAAO,OAAO,IACpC,CAAC,oBAAoB,OAAO,CAC/B,QAAO;AACT,QAAO;;AAGT,SAAS,eAAe,QAAsB,OAA0D;AACtG,QAAO,mBAAmB;EACxB,IAAI,OAAO;EACX,YAAY,OAAO,OAAO,YAAY;EACtC,MAAM,OAAO;EACb,SAAS,OAAO,MAAM;EACtB,aAAa,OAAO,MAAM;EAC1B,YAAY,OAAO,MAAM;EACzB,WAAW,OAAO,MAAM;EACxB,SAAS,OAAO;EAChB,QAAQ,OAAO;EACf,YAAY,OAAO;EACnB,MAAM,OAAO;EACb,QAAQ,OAAO;EACf,aAAa,OAAO;EACpB,cAAc,OAAO;EACrB,cAAc,OAAO;EACrB,YAAY,OAAO;EACnB,YAAY,OAAO;EACnB,kBAAkB,OAAO;EACzB,UAAU,OAAO;EACjB,aAAa,OAAO;EACpB,WAAW,OAAO;EAClB,WAAW,OAAO;EAClB,SAAS,OAAO;EAChB,oBAAoB,OAAO;EAC3B,iBAAiB,OAAO;EACxB,GAAG;EACJ,CAAC;;AAGJ,SAAgB,kBAAkB,eAAqB,MAAoC;AACzF,eAAc,IAAI,YAAY,OAAO,MAAM;EACzC,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,UAAU,gBAAgB,OAAO;EACvC,MAAM,gBAAgB,MAAM,kBAAkB,OAAO;EACrD,MAAM,wBAAwB,0BAA0B,SAAS,oBAAoB,CAClF,OAAO,oBAAoB;EAC9B,MAAM,UAAU,sBAAsB,QAAQ,WAAW,iBAAiB,IAAI,OAAO,OAAO,CAAC;EAC7F,MAAM,wBAAwB,kBAAkB;GAAE;GAAS,QAAQ;GAAY,OAAO;GAAK,CAAC,CACzF,OAAO,oBAAoB,CAC3B,QAAQ,WAAW,OAAO,MAAM,MAAM,QAAQ,IAAI,WAAW,mBAAmB,CAAC,CAAC;EACrF,MAAM,WAAW,sCAAsC,QAAQ,QAAQ;EACvE,MAAM,cAAc,oBAAoB;EACxC,MAAM,oBAAoB,sBAAsB;EAChD,MAAM,kBAAkB,uBAAuB,OAAO;EACtD,MAAM,UAAU,8BAA8B,mBAAmB,iBAAiB,sBAAsB;EACxG,MAAM,cAAc,IAAI,aAAa,CAAC,KAAK;GACzC;GACA,QAAQ;IAAC;IAAU;IAAU;IAAW;IAAc;GACtD,OAAO;GACR,CAAC;AACF,SAAO,EAAE,KAAK;GACZ;GACA,OAAO;IACL,SAAS;IACT,QAAQ;IACR,OAAO;IACP;IACD;GACD,GAAG;GACH,eAAe,QAAQ,IAAI,yBAAyB;GACpD,UAAU,wBAAwB,QAAQ;GAC1C,WAAW,uBAAuB,CAAC,GAAG,QAAQ,QAAQ,WAAW,OAAO,WAAW,SAAS,EAAE,GAAG,sBAAsB,CAAC;GACxH;GACA,uBAAuB,+BACrB,kBAAkB,QAAQ,eACxB,WAAW,aAAa,SAAS,UAAU,IAAI,WAAW,aAAa,SAAS,gBAAgB,CAChG,EACF,IAAI,IAAI,gBAAgB,KAAK,aAAa,SAAS,YAAY,CAAC,EAChE,YACD;GACD,UAAU;IACR,MAAM,SAAS,OAAO;IACtB,sBAAsB,SAAS,OAAO,SAAS,wBAAwB;IACvE,mBAAmB,SAAS,OAAO,SAAS,qBAAqB;IAClE;GACD,OAAO;IACL,oBAAoB,YAAY;IAChC,QAAQ;IACR,2BAA2B;IAC5B;GACF,CAAC;GACF;AAEF,eAAc,IAAI,oBAAoB,OAAO,MAAM;AACjD,SAAO,EAAE,KAAK,MAAM,kBAAkB,KAAK,QAAQ,cAAwB,CAAC;GAC5E;AAEF,eAAc,IAAI,mBAAmB,OAAO,MAAM;EAChD,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,UAAU,gBAAgB,OAAO;EACvC,MAAM,gBAAgB,MAAM,kBAAkB,OAAO;EACrD,MAAM,gBAAgB,0BAA0B,SAAS,oBAAoB,CAC1E,OAAO,oBAAoB,CAC3B,KAAK,YAAY;GAChB,WAAW,OAAO;GAClB,MAAM,OAAO;GACb,QAAQ,OAAO;GACf,aAAa,OAAO,eAAe;GACnC,YAAY,OAAO;GACnB,cAAc,OAAO,qBAAqB;GAC1C,YAAY,OAAO,OAAO,YAAY;GACtC,WAAW,OAAO;GACnB,EAAE;AACL,SAAO,EAAE,KAAK;GACZ,SAAS;GACT,6BAAY,IAAI,MAAM,EAAC,aAAa;GACpC;GACA,SAAS,cAAc;GACvB;GACD,CAAC;GACF;AAEF,eAAc,KAAK,mBAAmB,KAAK,2BAA2B,OAAO,MAAM;EACjF,MAAM,OAAO,MAAM,EAAE,IAAI,MAAM,CAAC,YAAY,KAAK;AACjD,MAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,KAAK,IAAI,KAAK,YAAY,KAAK,CAAC,MAAM,QAAQ,KAAK,cAAc,CACtH,QAAO,EAAE,KAAK,EAAE,OAAO,4BAA4B,EAAE,IAAI;AAE3D,MAAI,KAAK,cAAc,SAAS,IAAK,QAAO,EAAE,KAAK,EAAE,OAAO,2CAA2C,EAAE,IAAI;EAC7G,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,UAAU,gBAAgB,OAAO;EACvC,MAAM,qBAAqB,0BAA0B,SAAS,oBAAoB,CAC/E,OAAO,oBAAoB,CAC3B,KAAK,WAAW,OAAO,QAAQ;EAClC,MAAM,EAAE,SAAS,iBAAiB,yBAAyB,KAAK,eAAe,mBAAmB;AAClG,kCAAgC;AAC9B,QAAK,MAAM,QAAQ,QACjB,oBAAmB;IACjB,YAAY;IACZ,MAAM,KAAK;IACX;IACA,SAAS,KAAK;IACd,QAAQ;KAAE,UAAU;KAAS,MAAM;KAAsB;IACzD,YAAY;IACZ,MAAM,CAAC,sBAAsB,cAAc;IAC3C,QAAQ;IACR,aAAa,KAAK;IAClB,cAAc;IACd,YAAY,KAAK;IACjB,YAAY;IACZ,kBAAkB,KAAK,eAAe,kBAAkB;IACzD,CAAC;IAEJ;AACF,SAAO,EAAE,KAAK;GAAE,IAAI;GAAM,eAAe,QAAQ;GAAQ;GAAc,CAAC;GACxE;AAEF,eAAc,MAAM,oBAAoB,KAAK,2BAA2B,OAAO,MAAM;EACnF,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,SAAS,kBAAkB,MAAM,EAAE,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC;AACtE,MAAI,WAAW,OAAQ,QAAO,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO,EAAE,IAAI;EAClE,MAAM,UAAU,MAAM,qBAAqB;EAG3C,MAAM,QAAQ,MAAM,qBADA,yBADJ,QAAQ,KAAK,QAAQ,KAAK,UAAU,IACE,OAAO,MACT,CAAC;AACrD,MAAI,MAAM,OAAO,MAAO,QAAO,EAAE,KAAK,EAAE,OAAO,MAAM,OAAO,EAAE,MAAM,UAAU,IAAI;AAClF,MAAI,OAAO,MAAM,aAAa,KAAA,EAC5B,2BAA0B,EAAE,OAAO,UAAU,CAAC;AAEhD,OAAK,QAAQ,2BAA2B;AACxC,SAAO,EAAE,KAAK,MAAM,kBAAkB,OAAO,CAAC;GAC9C;AAEF,eAAc,KAAK,2BAA2B,KAAK,2BAA2B,OAAO,MAAM;EACzF,MAAM,OAAO,MAAM,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE;EACjD,MAAM,SAAS,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAC/D,MAAI,WAAW,YAAY,WAAW,QACpC,QAAO,EAAE,KAAK,EAAE,OAAO,kCAAkC,EAAE,IAAI;EAEjE,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,UAAU,MAAM,kBAAkB,OAAO;EAC/C,MAAM,iBAAiB,QAAQ,aAAa,oBAAoB;EAChE,MAAM,cAAc,WAAW,WAC3B,0BAA0B;GACxB,OAAO;GACP;GACA,cAAc,IAAI,KAAK,KAAK,KAAK,GAAG,yBAAyB,CAAC,aAAa;GAC5E,CAAC,GACF,0BAA0B;GAAE,OAAO;GAAU;GAAgB,CAAC;AAClE,SAAO,EAAE,KAAK,EACZ,cAAc,sBAAsB;GAAE,SAAS,QAAQ;GAAS;GAAa;GAAQ,CAAC,EACvF,CAAC;GACF;AAEF,eAAc,MAAM,kBAAkB,KAAK,2BAA2B,OAAO,MAAM;EACjF,MAAM,OAAO,MAAM,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE;AACjD,MAAI,CAAC,iBAAiB,KAAK,mBAAmB,CAC5C,QAAO,EAAE,KAAK,EAAE,OAAO,gCAAgC,EAAE,IAAI;EAE/D,MAAM,SAAS,mBAAmB,KAAK,mBAAmB;AAC1D,OAAK,QAAQ,0BAA0B;AACvC,SAAO,EAAE,KAAK,EACZ,OAAO;GACL,oBAAoB,OAAO;GAC3B,QAAQ;GACR,2BAA2B;GAC5B,EACF,CAAC;GACF;AAEF,eAAc,MAAM,0BAA0B,KAAK,2BAA2B,OAAO,MAAM;EACzF,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK;AAC5B,MAAI,CAAC,aAAa,SAAS,GAAG,CAAE,QAAO,EAAE,KAAK,EAAE,OAAO,sBAAsB,EAAE,IAAI;EAEnF,MAAM,WAAU,MADG,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE,EAC5B;AACrB,MAAI,OAAO,YAAY,UAAW,QAAO,EAAE,KAAK,EAAE,OAAO,6BAA6B,EAAE,IAAI;EAC5F,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,UAAU,gBAAgB,OAAO;EACvC,MAAM,WAAW,mBAAmB;EACpC,MAAM,SAAS,kBAAkB;GAAE;GAAS,QAAQ;GAAU,OAAO;GAAK,CAAC,CACxE,OAAO,oBAAoB,CAC3B,QAAQ,WAAW,kBAAkB,OAAO,KAAK,GAAG;EACvD,MAAM,SAAS,kBAAkB;GAAE;GAAS,QAAQ;GAAY,OAAO;GAAK,CAAC,CAC1E,OAAO,oBAAoB,CAC3B,QAAQ,WAAW,OAAO,MAAM,SAAS,SAAS,CAAC;EACtD,MAAM,UAAU,UAAU,SAAS;AACnC,kCAAgC;AAC9B,QAAK,MAAM,UAAU,QACnB,gBAAe,QAAQ;IACrB,QAAQ,UAAU,WAAW;IAC7B,MAAM,WACD,OAAO,QAAQ,EAAE,EAAE,QAAQ,QAAQ,QAAQ,SAAS,GACrD,CAAC,GAAG,IAAI,IAAI,CAAC,GAAI,OAAO,QAAQ,EAAE,EAAG,SAAS,CAAC,CAAC;IACrD,CAAC;IAEJ;EACF,MAAM,UAAU,OAAO,OAAO,OAAO;AACrC,SAAO,EAAE,KAAK;GAAE,IAAI;GAAM,UAAU,uBAAuB,QAAQ,KAAK,YAAY;IAClF,GAAG;IACH,QAAQ,UAAU,WAAW;IAC9B,EAAE,CAAC,CAAC;GAAI,CAAC;GACV;AAEF,eAAc,MAAM,yBAAyB,KAAK,2BAA2B,OAAO,MAAM;EACxF,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,WAAW,eAAe,EAAE,IAAI,MAAM,KAAK,EAAE,OAAO;AAC1D,MAAI,CAAC,YAAY,SAAS,WAAW,YAAY,CAAC,yBAAyB,IAAI,SAAS,KAAK,CAC3F,QAAO,EAAE,KAAK,EAAE,OAAO,qBAAqB,EAAE,IAAI;EAEpD,MAAM,OAAO,MAAM,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE;EACjD,MAAM,SAAS,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAC/D,MAAI,WAAW,WAAW;AACxB,kBAAe,UAAU,EAAE,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAI,SAAS,QAAQ,EAAE,EAAG,sBAAsB,CAAC,CAAC,EAAE,CAAC;AACnG,UAAO,EAAE,KAAK;IAAE,IAAI;IAAM,QAAQ;IAAa,CAAC;;AAElD,MAAI,WAAW,QAAS,QAAO,EAAE,KAAK,EAAE,OAAO,mCAAmC,EAAE,IAAI;EAExF,MAAM,QAAQ,SAAS,QAAQ,MAAM,CAAC,MAAM,QAAQ,CAAC,GAAI,MAAM,GAAG,GAAG;EACrE,MAAM,WAAW,KAAK,aAAa,OAAO,OAAO;EACjD,MAAM,gBAAgB,MAAM,kBAAkB;GAC5C;GACA,SAAS,SAAS;GAClB;GACA,UAAU,OAAO,OAAO;GACzB,CAAC;EACF,MAAM,QAAQ,IAAI,aAAa;EAC/B,MAAM,OAAO,MAAM,OAAO;GACxB;GACA,aAAa,SAAS;GACtB,SAAS,gBAAgB,OAAO;GAChC,UAAU;GACV;GACA,QAAQ;GACR,UAAU,cAAc;GACxB;GACD,CAAC;AACF,QAAM,kBAAkB;GAAE,QAAQ,KAAK;GAAI,MAAM,SAAS;GAAS,CAAC;EACpE,IAAI,SAAS;AACb,MAAI;AACF,QAAK,QAAQ,eAAe,KAAK,IAAI,EAAE,QAAQ,OAAO,CAAC;AACvD,YAAS;UACH;AACN,YAAS;YACD;AACR,kBAAe,UAAU,EAAE,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAI,SAAS,QAAQ,EAAE,EAAG,qBAAqB,CAAC,CAAC,EAAE,CAAC;;AAEpG,SAAO,EAAE,KAAK;GAAE,IAAI;GAAM,QAAQ,SAAS,WAAW;GAAS,MAAM,MAAM,IAAI,KAAK,GAAG;GAAE,MAAM,UAAU,KAAK;GAAM,CAAC;GACrH;AAEF,eAAc,MAAM,qBAAqB,KAAK,2BAA2B,OAAO,MAAM;EACpF,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,UAAU,gBAAgB,OAAO;EACvC,MAAM,WAAW,sCAAsC,QAAQ,QAAQ;EACvE,MAAM,OAAO,MAAM,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE;EACjD,MAAM,SAAS,mBAAmB,UAAU;GAC1C,GAAG,SAAS;GACZ,MAAM,KAAK;GACX,SAAS;IACP,GAAG,SAAS,OAAO;IACnB,sBAAsB,KAAK;IAC3B,mBAAmB,KAAK;IACzB;GACF,CAAC;AACF,MAAI,CAAC,OAAO,QACV,QAAO,EAAE,KAAK,EAAE,OAAO,OAAO,MAAM,OAAO,IAAI,WAAW,qCAAqC,EAAE,IAAI;EAEvG,MAAM,OAAO,mBAAmB,QAAQ,SAAS,EAAE,QAAQ,OAAO,MAAM,CAAC;AACzE,MAAI,KAAK,OAAO,MAAO,QAAO,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,EAAE,KAAK,UAAU,IAAI;EAC/E,MAAM,QAAQ,MAAM,KAAK,QAAQ,WAAW,KAAK,KAAK,WAAW;AACjE,MAAI,CAAC,MAAM,MAAO,QAAO,EAAE,KAAK,EAAE,OAAO,MAAM,SAAS,eAAe,EAAE,IAAI;EAC7E,MAAM,UAAU,sCAAsC,KAAK,QAAQ,eAAyB,QAAQ;AACpG,SAAO,EAAE,KAAK,EACZ,UAAU;GACR,MAAM,QAAQ,OAAO;GACrB,sBAAsB,QAAQ,OAAO,SAAS,wBAAwB;GACtE,mBAAmB,QAAQ,OAAO,SAAS,qBAAqB;GACjE,EACF,CAAC;GACF;AAEF,eAAc,OAAO,gCAAgC,KAAK,2BAA2B,OAAO,MAAM;EAChG,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,aAAa,EAAE,IAAI,MAAM,aAAa;EAC5C,MAAM,qBAAqB,uBAAuB,OAAO;EACzD,MAAM,WAAW,mBAAmB,MAAM,SAAS,KAAK,eAAe,WAAW;EAClF,MAAM,aAAa,WACf,sBAAsB,CAAC,MAAM,SAAS,KAAK,OAAO,SAAS,YAAY,GACvE,KAAA;AACJ,MAAI,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,aAAa,MAAM,eAC7D,eAAe,aAAa,eAAe,gBAC3C,CACA,QAAO,EAAE,KAAK,EAAE,OAAO,qCAAqC,EAAE,IAAI;EAEpE,MAAM,OAAO,MAAM,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE;AACjD,MAAI,OAAO,KAAK,+BAA+B,UAC7C,QAAO,EAAE,KAAK,EAAE,OAAO,gDAAgD,EAAE,IAAI;AAG/E,MAAI;GACF,MAAM,kBAAkB,mBAAmB,QAAQ,SAAS,KAAK,gBAAgB,SAAS,YAAY;AACtG,QAAK,MAAM,kBAAkB,gBAC3B,oBAAmB,QAAQ,eAAe,WAAW;GAEvD,MAAM,QAAQ,MAAM,KAAK,QAAQ,WAAW,OAAO;AACnD,OAAI,CAAC,MAAM,MAAO,QAAO,EAAE,KAAK,EAAE,OAAO,MAAM,SAAS,eAAe,EAAE,IAAI;WACtE,OAAO;AACd,UAAO,EAAE,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAAE,EAAE,IAAI;;EAGvF,IAAI,4BAA4B;AAChC,MAAI,KAAK,4BAA4B;GACnC,MAAM,UAAU,gBAAgB,OAAO;GACvC,MAAM,UAAU,wCACd,0BAA0B,SAAS,oBAAoB,EACvD,SACA,SAAS,YACV;AACD,mCAAgC;AAC9B,SAAK,MAAM,UAAU,QAAS,oBAAmB,OAAO,GAAG;KAC3D;AACF,+BAA4B,QAAQ;;AAEtC,SAAO,EAAE,KAAK;GAAE,IAAI;GAAM;GAA2B,CAAC;GACtD;AAEF,eAAc,MAAM,8BAA8B,KAAK,2BAA2B,OAAO,MAAM;EAC7F,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,WAAW,eAAe,EAAE,IAAI,MAAM,KAAK,EAAE,OAAO;AAC1D,MAAI,CAAC,SAAU,QAAO,EAAE,KAAK,EAAE,OAAO,2BAA2B,EAAE,IAAI;EACvE,MAAM,OAAO,MAAM,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE;EACjD,MAAM,SAAS,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAC/D,MAAI,WAAW,UACb,QAAO,EAAE,KAAK,EACZ,eAAe,yBAAyB,eAAe,UAAU;GAC/D,QAAQ;GACR,aAAa,mBAAmB,SAAS;GAC1C,CAAC,CAAC,EACJ,CAAC;AAEJ,MAAI,WAAW,SACb,QAAO,EAAE,KAAK,EAAE,eAAe,yBAAyB,eAAe,UAAU,EAAE,QAAQ,YAAY,CAAC,CAAC,EAAE,CAAC;AAE9G,MAAI,WAAW,UAAU;GACvB,MAAM,UAAU,OAAO,KAAK,YAAY,WAAW,KAAK,QAAQ,MAAM,GAAG;AACzE,OAAI,CAAC,QAAS,QAAO,EAAE,KAAK,EAAE,OAAO,yCAAyC,EAAE,IAAI;GACpF,MAAM,cAAc,mBAAmB;IACrC,YAAY;IACZ,MAAM,SAAS;IACf,SAAS,SAAS,MAAM;IACxB,aAAa,SAAS,MAAM;IAC5B,YAAY,SAAS,MAAM;IAC3B,WAAW,SAAS,MAAM;IAC1B;IACA,QAAQ,EAAE,UAAU,SAAS;IAC7B,YAAY;IACZ,MAAM,CAAC,GAAG,IAAI,IAAI;KAAC,GAAI,SAAS,QAAQ,EAAE;KAAG;KAAsB;KAA2B,CAAC,CAAC;IAChG,QAAQ;IACR,aAAa,SAAS;IACtB,cAAc;IACd,YAAY,SAAS;IACrB,YAAY,KAAK,IAAI,SAAS,YAAY,GAAI;IAC9C,kBAAkB,SAAS;IAC3B,UAAU,SAAS;IACnB,aAAa,mBAAmB;KAAE,YAAY,SAAS;KAAY,cAAc;KAAY,CAAC;IAC9F,oBAAoB,SAAS;IAC7B,iBAAiB,SAAS;IAC3B,CAAC;AACF,kBAAe,UAAU;IAAE,QAAQ;IAAY,0BAAS,IAAI,MAAM,EAAC,aAAa;IAAE,CAAC;AACnF,UAAO,EAAE,KAAK,EAAE,eAAe,yBAAyB,YAAY,EAAE,CAAC;;AAEzE,SAAO,EAAE,KAAK,EAAE,OAAO,6CAA6C,EAAE,IAAI;GAC1E;AAEF,eAAc,OAAO,8BAA8B,KAAK,4BAA4B,MAAM;EACxF,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,WAAW,eAAe,EAAE,IAAI,MAAM,KAAK,EAAE,OAAO;AAC1D,MAAI,CAAC,SAAU,QAAO,EAAE,KAAK,EAAE,OAAO,2BAA2B,EAAE,IAAI;AACvE,qBAAmB,SAAS,GAAG;AAC/B,SAAO,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC;GAC3B"}
@@ -14,7 +14,8 @@ export interface SSEHandlerConfig {
14
14
  * SSE events follow XOPC Chat Stream Protocol v1:
15
15
  * run_start, user_message, user_transcript, assistant_message_start,
16
16
  * assistant_delta, thinking_delta, thinking_end, tool_start, tool_update,
17
- * tool_end, assistant_message_end, compaction, tts_audio, clarify_request,
17
+ * tool_end, review_start, review_delta, review_end, assistant_message_end,
18
+ * compaction, tts_audio, clarify_request,
18
19
  * run_end, error.
19
20
  */
20
21
  export declare function createAgentSSEHandler(config: SSEHandlerConfig): (c: Context) => Promise<Response>;
@@ -30,7 +30,8 @@ function maxBase64CharsForBinary(maxBinaryBytes) {
30
30
  * SSE events follow XOPC Chat Stream Protocol v1:
31
31
  * run_start, user_message, user_transcript, assistant_message_start,
32
32
  * assistant_delta, thinking_delta, thinking_end, tool_start, tool_update,
33
- * tool_end, assistant_message_end, compaction, tts_audio, clarify_request,
33
+ * tool_end, review_start, review_delta, review_end, assistant_message_end,
34
+ * compaction, tts_audio, clarify_request,
34
35
  * run_end, error.
35
36
  */
36
37
  function createAgentSSEHandler(config) {