@xopcai/xopc 0.0.252 → 0.0.254

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 (220) hide show
  1. package/dist/browser-ext/dist/background.js +59 -13
  2. package/dist/browser-ext/dist/content.js +0 -5
  3. package/dist/browser-ext/manifest.json +2 -1
  4. package/dist/extensions/telegram/src/inbound-processor.js +2 -2
  5. package/dist/extensions/telegram/src/plugin.js +3 -2
  6. package/dist/extensions/telegram/xopc.extension.json +1 -1
  7. package/dist/gateway/static/root/assets/{activity-store-w3eq3YpP.js → activity-store-Ci5Rxmi_.js} +1 -1
  8. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-k039rbUz.js → agent-avatar-dicebear-D82jpmFL.js} +1 -1
  9. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-vul32IsP.js +1 -0
  10. package/dist/gateway/static/root/assets/{agents-Bmth_bSQ.js → agents-p3kWyz1T.js} +1 -1
  11. package/dist/gateway/static/root/assets/{api-2joIfbrH.js → api-CXIzQJ2Z.js} +1 -1
  12. package/dist/gateway/static/root/assets/{app-management-settings-panel-ByJ4kiD0.js → app-management-settings-panel-mhxcQpkQ.js} +1 -1
  13. package/dist/gateway/static/root/assets/{appearance-settings-BK2Jga-B.js → appearance-settings-BIMwACUF.js} +1 -1
  14. package/dist/gateway/static/root/assets/apps-page-CJFJKNwS.js +1 -0
  15. package/dist/gateway/static/root/assets/{archive-plugin-DMDKtYpi.js → archive-plugin-C63Xp_sU.js} +1 -1
  16. package/dist/gateway/static/root/assets/{attachment-load-B764Ql3Z.js → attachment-load-D12KYOav.js} +1 -1
  17. package/dist/gateway/static/root/assets/{automations-page-D-sO8CZe.js → automations-page-DXj0o5CY.js} +1 -1
  18. package/dist/gateway/static/root/assets/automations-workspace-B2wxcpgq.js +6 -0
  19. package/dist/gateway/static/root/assets/{binary-plugins-fxtzYRpv.js → binary-plugins-Bcv8hun6.js} +1 -1
  20. package/dist/gateway/static/root/assets/{block-editor-Bcjtvckh.js → block-editor-C61LqK_-.js} +50 -50
  21. package/dist/gateway/static/root/assets/{browser-automation-inputs-BSmnusjD.js → browser-automation-inputs-CAclu735.js} +1 -1
  22. package/dist/gateway/static/root/assets/{browser-automations-page-DC_OQIBk.js → browser-automations-page-BITfKX8L.js} +2 -2
  23. package/dist/gateway/static/root/assets/browser-settings-page-BMjY8cyv.js +8 -0
  24. package/dist/gateway/static/root/assets/capabilities-settings-panel-wB3Vgmp3.js +7 -0
  25. package/dist/gateway/static/root/assets/channels-settings-U5ffzu4r.js +1 -0
  26. package/dist/gateway/static/root/assets/{channels-status-swr-BuWjIG_a.js → channels-status-swr-Cmbx0E8O.js} +1 -1
  27. package/dist/gateway/static/root/assets/{chat-terminal-dock-5SevEo_I.js → chat-terminal-dock-CNBgHN9U.js} +1 -1
  28. package/dist/gateway/static/root/assets/connectors-page-BGaF--m5.js +2 -0
  29. package/dist/gateway/static/root/assets/{cron-expression-DtsfalBM.js → cron-expression-DCTN4QAG.js} +1 -1
  30. package/dist/gateway/static/root/assets/{date-picker-tDEQV5TP.js → date-picker-BuEyUxZn.js} +1 -1
  31. package/dist/gateway/static/root/assets/{dependency-picker-HhNwg0Y2.js → dependency-picker-l6IXzk0C.js} +1 -1
  32. package/dist/gateway/static/root/assets/{desktop-pet-acU4Li-C.js → desktop-pet-cGn_20DO.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-settings-R84AR0Pe.js → desktop-pet-settings-DIfccDKS.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-debug-page-CrLlRkSN.js → extension-debug-page-CTS5RP_D.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-page-BH5lmZXE.js → extension-page-Dg9YssYH.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-settings-page-BscjNAd1.js → extension-settings-page-CWZYL8Fi.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-config-swr-9HidFZUd.js → gateway-config-swr-Chsr5wGH.js} +1 -1
  38. package/dist/gateway/static/root/assets/gateway-settings-vHI_Que8.js +1 -0
  39. package/dist/gateway/static/root/assets/{gateway-startup-retry-DRCPXONr.js → gateway-startup-retry-C9ynH6VV.js} +1 -1
  40. package/dist/gateway/static/root/assets/{heartbeat-settings-K5Zhl2rx.js → heartbeat-settings-WUhSfvob.js} +1 -1
  41. package/dist/gateway/static/root/assets/home-page-CYjlMzPx.js +1 -0
  42. package/dist/gateway/static/root/assets/{image-generation-api-CR6Kle8H.js → image-generation-api-D_TsVe7h.js} +1 -1
  43. package/dist/gateway/static/root/assets/index-BBlJYVxR.js +74 -0
  44. package/dist/gateway/static/root/assets/index-_I0dD2LN.css +2 -0
  45. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-B1QR49-7.js → keyboard-shortcuts-settings-DGBf6YfD.js} +1 -1
  46. package/dist/gateway/static/root/assets/local-app-workbench-page-CLlIl83V.js +2 -0
  47. package/dist/gateway/static/root/assets/{local-apps-page-C74It-T8.js → local-apps-page-DGWP_xsQ.js} +1 -1
  48. package/dist/gateway/static/root/assets/{locale-store-BfZGZKSs.js → locale-store-B2v8mNJw.js} +1 -1
  49. package/dist/gateway/static/root/assets/logs-page-DuhCigiB.js +2 -0
  50. package/dist/gateway/static/root/assets/{management-settings-1kNnYL97.js → management-settings-DUAZ-dtt.js} +1 -1
  51. package/dist/gateway/static/root/assets/markdown-view-DBWu9d_n.js +201 -0
  52. package/dist/gateway/static/root/assets/{media-plugins-B5c0AoS1.js → media-plugins-CsUjcIBy.js} +1 -1
  53. package/dist/gateway/static/root/assets/messages-ChSTFZR5.js +3 -0
  54. package/dist/gateway/static/root/assets/{mobile-pairing-wizard-CsIZqK51.js → mobile-pairing-wizard-Dxu8twiQ.js} +1 -1
  55. package/dist/gateway/static/root/assets/note-detail-panel-DMdbaTZp.js +5 -0
  56. package/dist/gateway/static/root/assets/notes-page-xe_vX0nM.js +8 -0
  57. package/dist/gateway/static/root/assets/{page-tabs-CqJN6Ljz.js → page-tabs-YeJKwV-7.js} +1 -1
  58. package/dist/gateway/static/root/assets/{preview-open-alternatives-DqRIGxf4.js → preview-open-alternatives-BfJ3jMDG.js} +1 -1
  59. package/dist/gateway/static/root/assets/{product-open-page-DE2nPE_K.js → product-open-page-B7NRGPox.js} +1 -1
  60. package/dist/gateway/static/root/assets/project-detail-page-hG7ELibZ.js +1 -0
  61. package/dist/gateway/static/root/assets/projects-page-C5G2ET4w.js +1 -0
  62. package/dist/gateway/static/root/assets/{registry-api-Bpy8XX-5.js → registry-api-B9OZUdwC.js} +1 -1
  63. package/dist/gateway/static/root/assets/{remote-access-hub-Dnd73xWt.js → remote-access-hub-DTO-faxH.js} +1 -1
  64. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Bb4b74-P.js → runtime-tools-settings-panel-uJ8Br3ZL.js} +1 -1
  65. package/dist/gateway/static/root/assets/{schema-form-DoPU5j3J.js → schema-form-CXwn6up5.js} +1 -1
  66. package/dist/gateway/static/root/assets/sessions-page-CwzsUCgP.js +1 -0
  67. package/dist/gateway/static/root/assets/settings-advanced-gate-Djc3EdoO.js +1 -0
  68. package/dist/gateway/static/root/assets/{settings-form-section-Ci-9WajJ.js → settings-form-section-YVNYsR0U.js} +1 -1
  69. package/dist/gateway/static/root/assets/{settings-page-CL_2F95D.js → settings-page-cHqrIdVR.js} +1 -1
  70. package/dist/gateway/static/root/assets/setup-status-panel-MUAMcZLD.js +1 -0
  71. package/dist/gateway/static/root/assets/{share-preview-page-XUA3oKQX.js → share-preview-page-DnjSDQru.js} +1 -1
  72. package/dist/gateway/static/root/assets/shares-settings-C7A0aywX.js +1 -0
  73. package/dist/gateway/static/root/assets/skill-reload-api-D1xSGJAQ.js +1 -0
  74. package/dist/gateway/static/root/assets/{skills-page-sXXAZDc9.js → skills-page-DkrGEdiY.js} +1 -1
  75. package/dist/gateway/static/root/assets/{skills-page.utils-DD79Bl1I.js → skills-page.utils-CqZbiZuK.js} +1 -1
  76. package/dist/gateway/static/root/assets/{system-settings-panel-BEH64qBV.js → system-settings-panel-Dmw0RfxZ.js} +1 -1
  77. package/dist/gateway/static/root/assets/task-detail-page-BvZSCLUH.js +1 -0
  78. package/dist/gateway/static/root/assets/{theme-store-CISSxU1c.js → theme-store-CubltMKm.js} +1 -1
  79. package/dist/gateway/static/root/assets/{tunnel-api-DrKDhnJm.js → tunnel-api-CiieC6HP.js} +1 -1
  80. package/dist/gateway/static/root/assets/{use-autosave-CPYePL-Q.js → use-autosave-XQ3SuyB9.js} +1 -1
  81. package/dist/gateway/static/root/assets/user-model-page-BKJC7tyW.js +2 -0
  82. package/dist/gateway/static/root/assets/{voice-api-key-field-DKqzrCXx.js → voice-api-key-field-D4QzVgdt.js} +1 -1
  83. package/dist/gateway/static/root/assets/{voice-config-api-e9xWjwBX.js → voice-config-api-B1ZbyVmF.js} +1 -1
  84. package/dist/gateway/static/root/assets/{work-discovery-overlay-kTQug6bq.js → work-discovery-overlay-D5Tf8GRZ.js} +1 -1
  85. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-m9SKj_GT.js → workflow-run-setup-panel-BW9p8Maz.js} +2 -2
  86. package/dist/gateway/static/root/assets/workflows-page-DuqRodIc.js +5 -0
  87. package/dist/gateway/static/root/index.html +10 -10
  88. package/dist/package.js +1 -1
  89. package/dist/packages/realtime-protocol/src/voice.js +6 -1
  90. package/dist/src/agent/agent-manager.js +24 -7
  91. package/dist/src/agent/background-review/run-background-review.js +1 -1
  92. package/dist/src/agent/embedded/execution-context.d.ts +2 -1
  93. package/dist/src/agent/embedded/execution-context.js +10 -4
  94. package/dist/src/agent/embedded/index.d.ts +1 -1
  95. package/dist/src/agent/embedded/index.js +2 -2
  96. package/dist/src/agent/embedded/model-runtime.js +1 -1
  97. package/dist/src/agent/embedded/run-for-session.js +5 -4
  98. package/dist/src/agent/embedded/run-turn.js +22 -3
  99. package/dist/src/agent/embedded/types.d.ts +1 -1
  100. package/dist/src/agent/image/tool-model-config.js +1 -1
  101. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  102. package/dist/src/agent/service/direct-turn-helpers.js +6 -3
  103. package/dist/src/agent/service/process-direct-streaming.js +6 -3
  104. package/dist/src/agent/service.d.ts +2 -0
  105. package/dist/src/agent/service.js +23 -9
  106. package/dist/src/agent/session/session-inspector.js +1 -1
  107. package/dist/src/agent/skills/hub-lock.js +1 -1
  108. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  109. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +17 -2
  110. package/dist/src/agent/tools/browser/tool/schemas.d.ts +85 -1
  111. package/dist/src/agent/tools/browser/tool/schemas.js +212 -5
  112. package/dist/src/agent/tools/clarify-tool.d.ts +17 -3
  113. package/dist/src/agent/tools/clarify-tool.js +27 -32
  114. package/dist/src/agent/tools/cli-clarify.js +23 -8
  115. package/dist/src/agent/tools/factory.js +14 -4
  116. package/dist/src/ai-assist/text-assist.js +1 -1
  117. package/dist/src/auth/credentials.js +2 -2
  118. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  119. package/dist/src/auth/profiles/store.js +1 -1
  120. package/dist/src/auth/sync-provider-auth.js +2 -2
  121. package/dist/src/automations/domain/validation.d.ts +4 -4
  122. package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -1
  123. package/dist/src/browser/drivers/extension-driver.d.ts +4 -4
  124. package/dist/src/browser/drivers/extension-driver.js +20 -8
  125. package/dist/src/browser/drivers/playwright-driver.js +1 -1
  126. package/dist/src/browser/providers/browser-ext-install.d.ts +3 -0
  127. package/dist/src/browser/providers/browser-ext-install.js +19 -4
  128. package/dist/src/browser/providers/extension.d.ts +14 -1
  129. package/dist/src/browser/providers/extension.js +89 -11
  130. package/dist/src/browser/providers/playwright-install.js +8 -12
  131. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  132. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  133. package/dist/src/cli/commands/models.js +1 -1
  134. package/dist/src/config/index.js +4 -4
  135. package/dist/src/config/loader.js +2 -2
  136. package/dist/src/config/models-json.js +1 -1
  137. package/dist/src/extensions/lockfile.js +1 -1
  138. package/dist/src/gateway/agents-admin.js +1 -1
  139. package/dist/src/gateway/chat-stream/mapper.js +5 -1
  140. package/dist/src/gateway/chat-stream/protocol.d.ts +5 -1
  141. package/dist/src/gateway/clarify-runtime.d.ts +7 -5
  142. package/dist/src/gateway/clarify-runtime.js +8 -11
  143. package/dist/src/gateway/ephemeral-clarification-waiter.d.ts +17 -0
  144. package/dist/src/gateway/ephemeral-clarification-waiter.js +46 -0
  145. package/dist/src/gateway/file-path-classifier.js +1 -1
  146. package/dist/src/gateway/heartbeat/service.js +1 -1
  147. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  148. package/dist/src/gateway/hono/routes/agent-stream.js +44 -18
  149. package/dist/src/gateway/hono/routes/browser.js +149 -27
  150. package/dist/src/gateway/hono/routes/lazy-bundles.js +1 -1
  151. package/dist/src/gateway/hono/routes/models.js +1 -1
  152. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +10 -2
  153. package/dist/src/gateway/hono/routes/side-chats.js +24 -4
  154. package/dist/src/gateway/security/gateway-scopes.js +1 -1
  155. package/dist/src/gateway/service/agent-runner.d.ts +25 -36
  156. package/dist/src/gateway/service/agent-runner.js +103 -32
  157. package/dist/src/gateway/service/config-coordinator.js +1 -1
  158. package/dist/src/gateway/service/run-gateway-agent.js +5 -2
  159. package/dist/src/gateway/service/session-input-coordinator.js +4 -1
  160. package/dist/src/gateway/service/sessions-api.js +1 -1
  161. package/dist/src/gateway/service.d.ts +4 -2
  162. package/dist/src/gateway/service.js +36 -20
  163. package/dist/src/gateway/side-chat/manager.d.ts +2 -1
  164. package/dist/src/gateway/side-chat/manager.js +5 -4
  165. package/dist/src/gateway/side-chat/run-service.d.ts +5 -1
  166. package/dist/src/gateway/side-chat/run-service.js +24 -23
  167. package/dist/src/gateway/side-chat/types.d.ts +3 -1
  168. package/dist/src/heartbeat/index.js +1 -1
  169. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  170. package/dist/src/providers/index.js +2 -2
  171. package/dist/src/providers/model-registry.js +1 -1
  172. package/dist/src/providers/model-thinking.js +57 -20
  173. package/dist/src/providers/register-runtime-providers.js +1 -1
  174. package/dist/src/storage/sqlite/clarification-wait-repository.d.ts +41 -0
  175. package/dist/src/storage/sqlite/clarification-wait-repository.js +418 -0
  176. package/dist/src/storage/sqlite/index.d.ts +2 -1
  177. package/dist/src/storage/sqlite/index.js +2 -1
  178. package/dist/src/storage/sqlite/migrations/154_session_clarification_waits.sql +60 -0
  179. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  180. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  181. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  182. package/dist/src/storage/sqlite/schema.js +1 -1
  183. package/dist/src/storage/sqlite/session-input-repository.d.ts +11 -6
  184. package/dist/src/tui/tui-startup-resources.js +1 -1
  185. package/dist/src/tui/tui.js +1 -1
  186. package/dist/src/voice/realtime/agentEngine.js +7 -2
  187. package/dist/src/voice/realtime/runtime.types.d.ts +5 -0
  188. package/dist/src/work-discovery/service.js +1 -1
  189. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  190. package/package.json +3 -3
  191. package/skills/creative/hatch-pet/SKILL.md +1 -1
  192. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D4J4oq8p.js +0 -1
  193. package/dist/gateway/static/root/assets/apps-page-B3ky7cWU.js +0 -1
  194. package/dist/gateway/static/root/assets/automations-workspace-Ds5-_-9z.js +0 -6
  195. package/dist/gateway/static/root/assets/browser-settings-page-C1FojyG6.js +0 -3
  196. package/dist/gateway/static/root/assets/capabilities-settings-panel-Bs59UCut.js +0 -7
  197. package/dist/gateway/static/root/assets/channels-settings-CM9vNmoo.js +0 -1
  198. package/dist/gateway/static/root/assets/connectors-page-BPZ44D-V.js +0 -2
  199. package/dist/gateway/static/root/assets/gateway-settings-BxLcW6ij.js +0 -1
  200. package/dist/gateway/static/root/assets/home-page-CZAg9RBv.js +0 -1
  201. package/dist/gateway/static/root/assets/index-D4Ykja-U.js +0 -72
  202. package/dist/gateway/static/root/assets/index-zIJ3AXgR.css +0 -2
  203. package/dist/gateway/static/root/assets/local-app-workbench-page-wicoV-ti.js +0 -2
  204. package/dist/gateway/static/root/assets/logs-page-xX-7S49A.js +0 -2
  205. package/dist/gateway/static/root/assets/markdown-view-DjiwT28p.js +0 -201
  206. package/dist/gateway/static/root/assets/messages-DaIwVWar.js +0 -3
  207. package/dist/gateway/static/root/assets/note-detail-panel-CfWxopl4.js +0 -5
  208. package/dist/gateway/static/root/assets/notes-page-CYN-LCHJ.js +0 -8
  209. package/dist/gateway/static/root/assets/project-detail-page-B5G3LzDq.js +0 -1
  210. package/dist/gateway/static/root/assets/projects-page-CuVK2mKu.js +0 -1
  211. package/dist/gateway/static/root/assets/sessions-page-XL4LyKZe.js +0 -1
  212. package/dist/gateway/static/root/assets/settings-advanced-gate-0ForzDSS.js +0 -1
  213. package/dist/gateway/static/root/assets/setup-status-panel-DVws6XZc.js +0 -1
  214. package/dist/gateway/static/root/assets/shares-settings-BwDvcacF.js +0 -1
  215. package/dist/gateway/static/root/assets/skill-reload-api-BJjrATqE.js +0 -1
  216. package/dist/gateway/static/root/assets/task-detail-page-0jxMi75O.js +0 -1
  217. package/dist/gateway/static/root/assets/user-model-page-B6zLDfDl.js +0 -2
  218. package/dist/gateway/static/root/assets/workflows-page-Bcd1XqP7.js +0 -5
  219. package/dist/src/gateway/clarify-bridge.d.ts +0 -46
  220. package/dist/src/gateway/clarify-bridge.js +0 -111
@@ -1,6 +1,6 @@
1
1
  import { DEFAULT_ACK_MAX_CHARS, HEARTBEAT_OK, NO_REPLY, shouldSilence, stripHeartbeatToken } from "./tokens.js";
2
- import { appendCronEventLines } from "./event-prompt.js";
3
2
  import { isWithinActiveHours } from "./active-hours.js";
4
3
  import { isHeartbeatContentEmpty } from "./content-check.js";
4
+ import { appendCronEventLines } from "./event-prompt.js";
5
5
  import { createHeartbeatWake } from "./wake.js";
6
6
  export { DEFAULT_ACK_MAX_CHARS, HEARTBEAT_OK, NO_REPLY, appendCronEventLines, createHeartbeatWake, isHeartbeatContentEmpty, isWithinActiveHours, shouldSilence, stripHeartbeatToken };
@@ -1,5 +1,5 @@
1
- import { init_sync_provider_auth, resolveProviderApiKeyForAgentSync } from "../../auth/sync-provider-auth.js";
2
1
  import { getApiKeyFromEnv, init_env_keys } from "../env-keys.js";
2
+ import { init_sync_provider_auth, resolveProviderApiKeyForAgentSync } from "../../auth/sync-provider-auth.js";
3
3
  import { getDefaultAuthProfileStore } from "./auth-profile-store.js";
4
4
  //#region src/providers/auth-runtime/resolve-auth.ts
5
5
  init_env_keys();
@@ -1,11 +1,11 @@
1
1
  import { __esmMin, __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
3
- import { getModelOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
4
- import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
5
3
  import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
6
4
  import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
7
5
  import { ModelRegistry, getModelRegistry, init_model_registry, prewarmModelRegistry, resetModelRegistry } from "./model-registry.js";
6
+ import { getModelOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
8
7
  import { CredentialResolver, hasCredentials, init_credentials } from "../auth/credentials.js";
8
+ import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
9
9
  import { EXTENSION_PROVIDER_BASE_URL, init_constants } from "./constants.js";
10
10
  import { applyOfficialModelMetadataCorrections, getSupplementalModels, init_model_supplements } from "./model-supplements.js";
11
11
  import { getProviderRegistry, init_plugin_registry } from "./plugin-registry.js";
@@ -1,8 +1,8 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
- import { resolveModelsJsonPath } from "../config/paths.js";
5
4
  import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
5
+ import { resolveModelsJsonPath } from "../config/paths.js";
6
6
  import { getDefaultModelValues, init_models_json, validateModelsConfig } from "../config/models-json.js";
7
7
  import { getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
8
8
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
@@ -1,5 +1,18 @@
1
1
  import { getSupportedThinkingLevels } from "@earendil-works/pi-ai";
2
2
  //#region src/providers/model-thinking.ts
3
+ const TOGGLE_THINKING_FORMATS = new Set([
4
+ "zai",
5
+ "qwen",
6
+ "qwen-chat-template",
7
+ "chat-template",
8
+ "deepseek",
9
+ "together",
10
+ "baseten",
11
+ "string-thinking"
12
+ ]);
13
+ function preferredEnabledLevel(options) {
14
+ return options.includes("high") ? "high" : options.find((option) => option !== "off");
15
+ }
3
16
  /** Use the same capability metadata as the provider runtime. */
4
17
  function getModelThinking(model) {
5
18
  const base = { supportsAdaptive: false };
@@ -10,29 +23,53 @@ function getModelThinking(model) {
10
23
  initialValue: "off"
11
24
  };
12
25
  const compat = model.compat;
13
- const binaryFormat = [
14
- "zai",
15
- "qwen",
16
- "qwen-chat-template",
17
- "chat-template"
18
- ].includes(compat?.thinkingFormat ?? "");
19
- const binaryProvider = model.provider === "zai" || model.provider === "z.ai";
20
- if ((binaryFormat || binaryProvider) && compat?.supportsReasoningEffort !== true) return {
21
- ...base,
22
- mode: "toggle",
23
- options: ["off", "high"],
24
- initialValue: "high"
25
- };
26
- if (compat?.supportsReasoningEffort === false) return {
27
- ...base,
28
- mode: "unknown",
29
- options: ["off"],
30
- initialValue: "off"
31
- };
32
26
  const options = getSupportedThinkingLevels(model);
27
+ const enabledLevel = preferredEnabledLevel(options);
28
+ if ((TOGGLE_THINKING_FORMATS.has(compat?.thinkingFormat ?? "") || model.provider === "zai" || model.provider === "z.ai") && compat?.supportsReasoningEffort !== true && enabledLevel) {
29
+ if (options.includes("off")) return {
30
+ ...base,
31
+ mode: "toggle",
32
+ options: ["off", enabledLevel],
33
+ initialValue: enabledLevel
34
+ };
35
+ return {
36
+ ...base,
37
+ mode: "fixed",
38
+ options: [enabledLevel],
39
+ initialValue: enabledLevel
40
+ };
41
+ }
42
+ if (compat?.supportsReasoningEffort === false) {
43
+ if (enabledLevel) return {
44
+ ...base,
45
+ mode: "fixed",
46
+ options: [enabledLevel],
47
+ initialValue: enabledLevel
48
+ };
49
+ return {
50
+ ...base,
51
+ mode: "none",
52
+ options: ["off"],
53
+ initialValue: "off"
54
+ };
55
+ }
56
+ if (options.length === 1) {
57
+ const only = options[0] ?? "off";
58
+ return only === "off" ? {
59
+ ...base,
60
+ mode: "none",
61
+ options: ["off"],
62
+ initialValue: "off"
63
+ } : {
64
+ ...base,
65
+ mode: "fixed",
66
+ options: [only],
67
+ initialValue: only
68
+ };
69
+ }
33
70
  return {
34
71
  ...base,
35
- mode: options.length > 1 ? "levels" : "none",
72
+ mode: "levels",
36
73
  options,
37
74
  initialValue: options.includes("medium") ? "medium" : options[0] ?? "off"
38
75
  };
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
3
2
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
3
+ import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
4
4
  import { XOPC_CLOUD_PROVIDER_ID, init_xopc_cloud_config, resolveXopcModelRouterUrl } from "./xopc-cloud-config.js";
5
5
  //#region src/providers/register-runtime-providers.ts
6
6
  function registerRuntimeProvider(modelRuntime, source) {
@@ -0,0 +1,41 @@
1
+ import type { ClarificationKind, ClarificationResponseAction, ClarificationWait, ClarificationWaitSnapshot } from '@xopcai/gateway-contract';
2
+ import { type SessionInput } from './session-input-repository.js';
3
+ export type CreateClarificationInput = {
4
+ sessionKey: string;
5
+ runId: string;
6
+ toolCallId: string;
7
+ kind: ClarificationKind;
8
+ question: string;
9
+ choices?: string[];
10
+ suggestedAnswer?: string;
11
+ approvalKey?: string;
12
+ now?: number;
13
+ };
14
+ export type ResolveClarificationInput = {
15
+ id: string;
16
+ expectedVersion: number;
17
+ idempotencyKey: string;
18
+ action: ClarificationResponseAction;
19
+ answer?: string;
20
+ now?: number;
21
+ };
22
+ export type ResolveClarificationResult = {
23
+ ok: true;
24
+ clarification: ClarificationWait;
25
+ idempotent: boolean;
26
+ queued: boolean;
27
+ } | {
28
+ ok: false;
29
+ code: 'NOT_FOUND' | 'CONFLICT' | 'EXPIRED' | 'INVALID';
30
+ clarification?: ClarificationWait;
31
+ };
32
+ export declare function getClarification(id: string): ClarificationWait | undefined;
33
+ export declare function getActiveClarification(sessionKey: string): ClarificationWait | undefined;
34
+ export declare function getClarificationSnapshot(sessionKey: string): ClarificationWaitSnapshot | undefined;
35
+ export declare function createClarificationWait(input: CreateClarificationInput): ClarificationWait;
36
+ export declare function isClarificationSuspended(sessionKey: string, runId: string): boolean;
37
+ export declare function resolveClarification(input: ResolveClarificationInput): ResolveClarificationResult;
38
+ export declare function getClarificationResumeInput(sessionKey: string, runId: string): SessionInput | undefined;
39
+ export declare function consumeClarificationResume(input: SessionInput): boolean;
40
+ export declare function consumeClarificationApproval(sessionKey: string, approvalKey: string): 'approved' | 'denied' | undefined;
41
+ export declare function supersedeActiveClarification(sessionKey: string, now?: number): ClarificationWait | undefined;
@@ -0,0 +1,418 @@
1
+ import { isXopcDatabaseOpen } from "./connection.js";
2
+ import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
3
+ import { readCurrentSessionId } from "./session-instance-repository.js";
4
+ import { bumpSessionInputRevision, getSessionInputById, getSessionInputState, insertSessionInput } from "./session-input-repository.js";
5
+ import { TaskRunRepository } from "../../tasks/task-run-repository.js";
6
+ import { randomUUID } from "node:crypto";
7
+ //#region src/storage/sqlite/clarification-wait-repository.ts
8
+ const APPROVAL_TTL_MS = 10 * 6e4;
9
+ const STALE_CONTEXT_MS = 1440 * 6e4;
10
+ function rowToWait(row) {
11
+ return JSON.parse(row.data_json);
12
+ }
13
+ function getRow(id) {
14
+ return getSqliteDatabase().prepare(`SELECT id, session_key, session_id, status, version, data_json
15
+ FROM session_clarification_waits WHERE id = ?`).get(id);
16
+ }
17
+ function writeWait(wait, expectedVersion) {
18
+ const next = {
19
+ ...wait,
20
+ version: expectedVersion + 1,
21
+ updatedAt: wait.updatedAt || Date.now()
22
+ };
23
+ return getSqliteDatabase().prepare(`UPDATE session_clarification_waits
24
+ SET status = ?, version = ?, data_json = ?
25
+ WHERE id = ? AND version = ?`).run(next.status, next.version, JSON.stringify(next), next.id, expectedVersion).changes ? next : void 0;
26
+ }
27
+ function taskWaitsForClarification(taskId, clarificationId) {
28
+ return new TaskRunRepository().listActiveWaits(taskId).filter((wait) => wait.condition.clarificationId === clarificationId);
29
+ }
30
+ function resolveTaskWait(wait, resolution) {
31
+ if (!wait.taskRunId) return;
32
+ const runs = new TaskRunRepository();
33
+ const run = runs.get(wait.taskRunId);
34
+ if (!run) return;
35
+ for (const taskWait of taskWaitsForClarification(run.taskId, wait.id)) runs.resolveWait({
36
+ waitId: taskWait.id,
37
+ actor: {
38
+ kind: "user",
39
+ id: wait.principalId
40
+ },
41
+ resolution
42
+ });
43
+ }
44
+ function cancelTaskRun(wait, reason, now) {
45
+ if (!wait.taskRunId) return;
46
+ const runs = new TaskRunRepository();
47
+ const run = runs.get(wait.taskRunId);
48
+ if (!run || ![
49
+ "queued",
50
+ "running",
51
+ "waiting",
52
+ "verifying"
53
+ ].includes(run.status)) return;
54
+ runs.finalize({
55
+ runId: run.id,
56
+ expectedVersion: run.version,
57
+ actor: {
58
+ kind: "user",
59
+ id: wait.principalId
60
+ },
61
+ terminalCode: "clarification_cancelled",
62
+ terminalMessage: reason,
63
+ now,
64
+ receipt: {
65
+ status: "cancelled",
66
+ summary: reason,
67
+ changes: [],
68
+ evidence: [],
69
+ verification: {
70
+ status: "unverified",
71
+ checks: []
72
+ },
73
+ remainingWork: [wait.checkpoint.objectiveSummary],
74
+ needsUser: false,
75
+ completionVerdict: "not_achieved"
76
+ }
77
+ });
78
+ }
79
+ function markTaskWaiting(wait) {
80
+ if (!wait.taskRunId) return;
81
+ const runs = new TaskRunRepository();
82
+ const run = runs.get(wait.taskRunId);
83
+ if (!run || run.status !== "running") return;
84
+ runs.createWait({
85
+ taskId: run.taskId,
86
+ taskRunId: run.id,
87
+ kind: wait.kind === "approval" ? "approval" : "user_input",
88
+ reason: wait.question,
89
+ condition: {
90
+ type: "clarification",
91
+ clarificationId: wait.id
92
+ }
93
+ });
94
+ runs.setStatus({
95
+ runId: run.id,
96
+ expectedVersion: run.version,
97
+ from: ["running"],
98
+ to: "waiting",
99
+ actor: { kind: "system" }
100
+ });
101
+ }
102
+ function getClarification(id) {
103
+ if (!isXopcDatabaseOpen()) return void 0;
104
+ const row = getRow(id);
105
+ return row ? rowToWait(row) : void 0;
106
+ }
107
+ function getActiveClarification(sessionKey) {
108
+ if (!isXopcDatabaseOpen()) return void 0;
109
+ const sessionId = readCurrentSessionId(getSqliteDatabase(), sessionKey);
110
+ if (!sessionId) return void 0;
111
+ const row = getSqliteDatabase().prepare(`SELECT id, session_key, session_id, status, version, data_json
112
+ FROM session_clarification_waits
113
+ WHERE session_key = ? AND session_id = ? AND status IN ('open', 'queued')
114
+ ORDER BY version DESC LIMIT 1`).get(sessionKey, sessionId);
115
+ return row ? rowToWait(row) : void 0;
116
+ }
117
+ function getClarificationSnapshot(sessionKey) {
118
+ if (!isXopcDatabaseOpen()) return void 0;
119
+ const sessionId = readCurrentSessionId(getSqliteDatabase(), sessionKey);
120
+ if (!sessionId) return void 0;
121
+ const state = getSessionInputState(sessionKey);
122
+ const now = Date.now();
123
+ const active = getActiveClarification(sessionKey);
124
+ const clarification = active?.kind === "approval" && active.expiresAt !== void 0 && active.expiresAt <= now ? expireApproval(active, now) : active;
125
+ return {
126
+ sessionId,
127
+ revision: state.revision,
128
+ serverTime: now,
129
+ clarification: clarification?.status === "open" || clarification?.status === "queued" ? clarification : null
130
+ };
131
+ }
132
+ function createClarificationWait(input) {
133
+ return runSqliteWriteTransaction((db) => {
134
+ const sessionId = readCurrentSessionId(db, input.sessionKey);
135
+ if (!sessionId) throw new Error("Clarification requires a persisted session.");
136
+ const duplicate = db.prepare(`SELECT id, session_key, session_id, status, version, data_json
137
+ FROM session_clarification_waits
138
+ WHERE session_id = ? AND origin_run_id = ? AND origin_tool_call_id = ?`).get(sessionId, input.runId, input.toolCallId);
139
+ if (duplicate) return rowToWait(duplicate);
140
+ const now = input.now ?? Date.now();
141
+ const runtime = getSessionInputState(input.sessionKey);
142
+ const origin = runtime.activeInputId ? getSessionInputById(input.sessionKey, runtime.activeInputId) : void 0;
143
+ const active = getActiveClarification(input.sessionKey);
144
+ if (active) {
145
+ writeWait({
146
+ ...active,
147
+ status: "superseded",
148
+ resolution: "cancelled",
149
+ resolvedAt: now,
150
+ updatedAt: now
151
+ }, active.version);
152
+ resolveTaskWait(active, { superseded: true });
153
+ cancelTaskRun(active, "Task superseded by a newer clarification request.", now);
154
+ }
155
+ const lastEntry = db.prepare("SELECT entry_id FROM transcript_entries WHERE session_id = ? ORDER BY seq DESC LIMIT 1").get(sessionId);
156
+ const wait = {
157
+ id: randomUUID(),
158
+ principalId: "local-owner",
159
+ sessionKey: input.sessionKey,
160
+ sessionId,
161
+ objectiveId: origin?.id ?? input.runId,
162
+ objectiveRevision: (active?.objectiveRevision ?? 0) + 1,
163
+ originRunId: input.runId,
164
+ originInputId: origin?.id ?? input.runId,
165
+ originToolCallId: input.toolCallId,
166
+ taskRunId: origin?.taskRunId,
167
+ kind: input.kind,
168
+ status: "open",
169
+ question: input.question.trim(),
170
+ choices: input.choices,
171
+ suggestedAnswer: input.suggestedAnswer,
172
+ checkpoint: {
173
+ transcriptEntryId: lastEntry?.entry_id,
174
+ objectiveSummary: origin?.content ?? input.question.trim(),
175
+ completedSteps: [],
176
+ pendingSteps: [input.question.trim()],
177
+ originalRequestAt: origin?.createdAtMs ?? now
178
+ },
179
+ expiresAt: input.kind === "approval" ? now + APPROVAL_TTL_MS : void 0,
180
+ approvalKey: input.approvalKey,
181
+ version: 1,
182
+ createdAt: now,
183
+ updatedAt: now
184
+ };
185
+ db.prepare(`INSERT INTO session_clarification_waits (
186
+ id, principal_id, session_key, session_id, status, version, data_json,
187
+ origin_run_id, origin_tool_call_id
188
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(wait.id, wait.principalId, wait.sessionKey, wait.sessionId, wait.status, wait.version, JSON.stringify(wait), wait.originRunId, wait.originToolCallId);
189
+ markTaskWaiting(wait);
190
+ bumpSessionInputRevision(db, input.sessionKey);
191
+ return wait;
192
+ });
193
+ }
194
+ function isClarificationSuspended(sessionKey, runId) {
195
+ const wait = getActiveClarification(sessionKey);
196
+ return Boolean(wait?.status === "open" && wait.originRunId === runId);
197
+ }
198
+ function expireApproval(wait, now) {
199
+ const expired = {
200
+ ...wait,
201
+ status: "expired",
202
+ resolution: "cancelled",
203
+ resolvedAt: now,
204
+ updatedAt: now
205
+ };
206
+ const updated = writeWait(expired, wait.version) ?? getClarification(wait.id) ?? expired;
207
+ resolveTaskWait(updated, { expired: true });
208
+ cancelTaskRun(updated, "Approval expired before the task could continue.", now);
209
+ bumpSessionInputRevision(getSqliteDatabase(), wait.sessionKey);
210
+ return updated;
211
+ }
212
+ function resolveClarification(input) {
213
+ return runSqliteWriteTransaction((db) => {
214
+ const wait = getClarification(input.id);
215
+ if (!wait || readCurrentSessionId(db, wait.sessionKey) !== wait.sessionId) return {
216
+ ok: false,
217
+ code: "NOT_FOUND"
218
+ };
219
+ const now = input.now ?? Date.now();
220
+ if (wait.kind === "approval" && wait.expiresAt !== void 0 && wait.expiresAt <= now) return {
221
+ ok: false,
222
+ code: "EXPIRED",
223
+ clarification: expireApproval(wait, now)
224
+ };
225
+ if (db.prepare("SELECT id FROM session_inputs WHERE session_key = ? AND client_message_id = ?").get(wait.sessionKey, input.idempotencyKey)) return {
226
+ ok: true,
227
+ clarification: wait,
228
+ idempotent: true,
229
+ queued: wait.status === "queued"
230
+ };
231
+ if (wait.responseIdempotencyKey === input.idempotencyKey) return {
232
+ ok: true,
233
+ clarification: wait,
234
+ idempotent: true,
235
+ queued: wait.status === "queued"
236
+ };
237
+ if (wait.version !== input.expectedVersion || wait.status !== "open") return {
238
+ ok: false,
239
+ code: "CONFLICT",
240
+ clarification: wait
241
+ };
242
+ const trimmed = input.answer?.trim() ?? "";
243
+ if (input.action === "answer" && !trimmed) return {
244
+ ok: false,
245
+ code: "INVALID"
246
+ };
247
+ if (input.action === "agent_decide" && wait.kind === "approval") return {
248
+ ok: false,
249
+ code: "INVALID"
250
+ };
251
+ const resolution = input.action === "answer" ? "answered" : input.action === "agent_decide" ? "agent_decide" : "cancelled";
252
+ if (input.action === "cancel") {
253
+ const cancelled = writeWait({
254
+ ...wait,
255
+ status: "cancelled",
256
+ resolution,
257
+ responseIdempotencyKey: input.idempotencyKey,
258
+ resolvedAt: now,
259
+ updatedAt: now
260
+ }, wait.version);
261
+ if (!cancelled) return {
262
+ ok: false,
263
+ code: "CONFLICT",
264
+ clarification: getClarification(wait.id)
265
+ };
266
+ resolveTaskWait(cancelled, { cancelled: true });
267
+ cancelTaskRun(cancelled, "Task cancelled while waiting for clarification.", now);
268
+ bumpSessionInputRevision(db, wait.sessionKey);
269
+ return {
270
+ ok: true,
271
+ clarification: cancelled,
272
+ idempotent: false,
273
+ queued: false
274
+ };
275
+ }
276
+ const answer = input.action === "agent_decide" ? "Use your best judgment and continue without additional user input." : trimmed;
277
+ const queued = writeWait({
278
+ ...wait,
279
+ status: "queued",
280
+ answer,
281
+ resolution,
282
+ responseIdempotencyKey: input.idempotencyKey,
283
+ updatedAt: now
284
+ }, wait.version);
285
+ if (!queued) return {
286
+ ok: false,
287
+ code: "CONFLICT",
288
+ clarification: getClarification(wait.id)
289
+ };
290
+ const stale = now - wait.checkpoint.originalRequestAt >= STALE_CONTEXT_MS;
291
+ const content = [
292
+ "Resume the objective that was waiting for clarification.",
293
+ `Original objective: ${wait.checkpoint.objectiveSummary}`,
294
+ `Clarification question: ${wait.question}`,
295
+ `User response: ${answer}`,
296
+ stale ? "The request is over 24 hours old. Re-check mutable state before acting." : "",
297
+ "Do not repeat completed side effects. Continue from the stored transcript and current state."
298
+ ].filter(Boolean).join("\n");
299
+ const origin = getSessionInputById(wait.sessionKey, wait.originInputId);
300
+ insertSessionInput({
301
+ id: randomUUID(),
302
+ sessionKey: wait.sessionKey,
303
+ expectedSessionId: wait.sessionId,
304
+ clientMessageId: input.idempotencyKey,
305
+ requestedDelivery: "next",
306
+ effectiveDelivery: "next",
307
+ status: "queued",
308
+ content,
309
+ kind: "clarification_resume",
310
+ payload: {
311
+ waitId: wait.id,
312
+ objectiveRevision: wait.objectiveRevision,
313
+ resolution
314
+ },
315
+ taskRunId: wait.taskRunId,
316
+ contextRefs: origin?.contextRefs,
317
+ contextSnapshots: origin?.contextSnapshots,
318
+ thinking: origin?.thinking,
319
+ origin: {
320
+ type: "system",
321
+ source: "internal"
322
+ }
323
+ });
324
+ return {
325
+ ok: true,
326
+ clarification: queued,
327
+ idempotent: false,
328
+ queued: true
329
+ };
330
+ });
331
+ }
332
+ function getClarificationResumeInput(sessionKey, runId) {
333
+ if (!isXopcDatabaseOpen()) return void 0;
334
+ const state = getSessionInputState(sessionKey);
335
+ if (state.activeRunId !== runId || !state.activeInputId) return void 0;
336
+ const input = getSessionInputById(sessionKey, state.activeInputId);
337
+ return input?.kind === "clarification_resume" ? input : void 0;
338
+ }
339
+ function consumeClarificationResume(input) {
340
+ if (input.kind !== "clarification_resume") return true;
341
+ return runSqliteWriteTransaction((db) => {
342
+ const wait = input.payload ? getClarification(input.payload.waitId) : void 0;
343
+ if (!wait || wait.status !== "queued" || wait.objectiveRevision !== input.payload?.objectiveRevision) return false;
344
+ if (readCurrentSessionId(db, input.sessionKey) !== wait.sessionId) return false;
345
+ if (wait.taskRunId) {
346
+ const runs = new TaskRunRepository();
347
+ const run = runs.get(wait.taskRunId);
348
+ if (!run || run.status !== "waiting") return false;
349
+ if (runs.listActiveWaits(run.taskId).filter((item) => item.taskRunId === run.id).some((item) => item.condition.clarificationId !== wait.id)) return false;
350
+ resolveTaskWait(wait, {
351
+ clarificationId: wait.id,
352
+ resolution: wait.resolution
353
+ });
354
+ runs.setStatus({
355
+ runId: run.id,
356
+ expectedVersion: run.version,
357
+ from: ["waiting"],
358
+ to: "running",
359
+ actor: { kind: "system" }
360
+ });
361
+ } else resolveTaskWait(wait, {
362
+ clarificationId: wait.id,
363
+ resolution: wait.resolution
364
+ });
365
+ if (!writeWait({
366
+ ...wait,
367
+ status: "resolved",
368
+ resolvedAt: Date.now(),
369
+ updatedAt: Date.now()
370
+ }, wait.version)) return false;
371
+ bumpSessionInputRevision(db, wait.sessionKey);
372
+ return true;
373
+ });
374
+ }
375
+ function consumeClarificationApproval(sessionKey, approvalKey) {
376
+ return runSqliteWriteTransaction(() => {
377
+ const state = getSessionInputState(sessionKey);
378
+ if (!state.activeInputId) return void 0;
379
+ const input = getSessionInputById(sessionKey, state.activeInputId);
380
+ if (input?.kind !== "clarification_resume" || !input.payload) return void 0;
381
+ const wait = getClarification(input.payload.waitId);
382
+ if (!wait || wait.kind !== "approval" || wait.approvalKey !== approvalKey || wait.approvalConsumedAt) return;
383
+ const approved = wait.answer === "Allow once";
384
+ writeWait({
385
+ ...wait,
386
+ approvalConsumedAt: Date.now(),
387
+ updatedAt: Date.now()
388
+ }, wait.version);
389
+ return approved ? "approved" : "denied";
390
+ });
391
+ }
392
+ function supersedeActiveClarification(sessionKey, now = Date.now()) {
393
+ return runSqliteWriteTransaction((db) => {
394
+ const wait = getActiveClarification(sessionKey);
395
+ if (!wait) return void 0;
396
+ if (wait.status === "queued") {
397
+ const queued = db.prepare(`SELECT id FROM session_inputs
398
+ WHERE session_key = ? AND kind = 'clarification_resume'
399
+ AND status = 'queued' AND json_extract(payload_json, '$.waitId') = ?`).get(sessionKey, wait.id);
400
+ if (queued) db.prepare(`UPDATE session_inputs SET status = 'cancelled', version = version + 1, updated_at_ms = ?
401
+ WHERE id = ? AND status = 'queued'`).run(now, queued.id);
402
+ }
403
+ const updated = writeWait({
404
+ ...wait,
405
+ status: "superseded",
406
+ resolution: "cancelled",
407
+ resolvedAt: now,
408
+ updatedAt: now
409
+ }, wait.version);
410
+ if (!updated) return void 0;
411
+ resolveTaskWait(updated, { superseded: true });
412
+ cancelTaskRun(updated, "Task superseded by a newer instruction.", now);
413
+ bumpSessionInputRevision(db, sessionKey);
414
+ return updated;
415
+ });
416
+ }
417
+ //#endregion
418
+ export { consumeClarificationApproval, consumeClarificationResume, createClarificationWait, getActiveClarification, getClarification, getClarificationResumeInput, getClarificationSnapshot, isClarificationSuspended, resolveClarification, supersedeActiveClarification };
@@ -14,7 +14,8 @@ export { closeTemporalAssertions, createTemporalAssertion, linkContextObjects, l
14
14
  export { createCollaborationRule, getCollaborationRule, listCollaborationRules, setCollaborationRuleStatus, type CollaborationRule, } from './collaboration-rule-repository.js';
15
15
  export { createContextEvidence, type ContextEvidence } from './context-evidence-repository.js';
16
16
  export { getUserPerson, getUserPeopleIndexState, listUserPeople, mergeUserPeople, replaceUserPeopleIndex, summarizeUserPeople, updateUserPerson, } from './user-people-repository.js';
17
- export { cancelQueuedSessionInput, claimNextSessionInput, findSessionInput, finishSessionInputRun, getSessionInputState, getSessionInputById, insertSessionInput, listActiveSessionInputRuns, mutateQueuedSessionInput, recoverSessionInputState, setSessionInputStatus, type SessionInput, type SessionInputDelivery, type SessionInputState, type SessionInputStatus, } from './session-input-repository.js';
17
+ export { cancelQueuedSessionInput, claimNextSessionInput, findSessionInput, finishSessionInputRun, getSessionInputState, getSessionInputById, insertSessionInput, listActiveSessionInputRuns, mutateQueuedSessionInput, recoverSessionInputState, setSessionInputStatus, type SessionInput, type SessionInputDelivery, type SessionInputPayload, type SessionInputState, type SessionInputStatus, } from './session-input-repository.js';
18
+ export { consumeClarificationApproval, consumeClarificationResume, createClarificationWait, getActiveClarification, getClarification, getClarificationResumeInput, getClarificationSnapshot, isClarificationSuspended, resolveClarification, supersedeActiveClarification, type CreateClarificationInput, type ResolveClarificationInput, type ResolveClarificationResult, } from './clarification-wait-repository.js';
18
19
  export { replaceLatestSessionTurnAndQueueInput, validateLatestSessionTurnTarget, type ReplaceLatestSessionTurnInput, type ReplaceLatestSessionTurnResult, } from './session-turn-replace-repository.js';
19
20
  export { acknowledgeHomeAttention, isHomeAttentionAcknowledged, type HomeAttentionSubjectKind, } from './home-attention-repository.js';
20
21
  export { claimNextConnectorLearningJob, enqueueConnectorLearningJob, listConnectorLearningJobs, recoverStaleConnectorLearningJobs, setConnectorLearningPaused, updateConnectorLearningJob, type ConnectorLearningJob, type ConnectorLearningMode, type ConnectorLearningPhase, type ConnectorLearningStatus, } from './connector-learning-repository.js';
@@ -16,6 +16,7 @@ import { createCollaborationRule, getCollaborationRule, listCollaborationRules,
16
16
  import { createContextEvidence } from "./context-evidence-repository.js";
17
17
  import { getUserPeopleIndexState, getUserPerson, listUserPeople, mergeUserPeople, replaceUserPeopleIndex, summarizeUserPeople, updateUserPerson } from "./user-people-repository.js";
18
18
  import { cancelQueuedSessionInput, claimNextSessionInput, findSessionInput, finishSessionInputRun, getSessionInputById, getSessionInputState, insertSessionInput, listActiveSessionInputRuns, mutateQueuedSessionInput, recoverSessionInputState, setSessionInputStatus } from "./session-input-repository.js";
19
+ import { consumeClarificationApproval, consumeClarificationResume, createClarificationWait, getActiveClarification, getClarification, getClarificationResumeInput, getClarificationSnapshot, isClarificationSuspended, resolveClarification, supersedeActiveClarification } from "./clarification-wait-repository.js";
19
20
  import { buildDefaultSessionMetadata } from "./session-metadata.js";
20
21
  import { buildGlobalSessionStats, classifyStoredRow, estimateTokensFromMessages, extractFtsContent, metadataToSessionInsert, sessionConfigRowToConfig, sessionRowToMetadata, transcriptEntryRowToStoredRow } from "./row-mappers.js";
21
22
  import { replaceLatestSessionTurnAndQueueInput, validateLatestSessionTurnTarget } from "./session-turn-replace-repository.js";
@@ -38,4 +39,4 @@ import { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeC
38
39
  import { getConnectorAccount, listConnectorAccounts, reconcileConnectorAccount, refreshConnectorAccountCurrent } from "./connector-account-repository.js";
39
40
  import { getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, listConnectorSyncPolicies, upsertConnectorSyncPolicy } from "./connector-sync-policy-repository.js";
40
41
  import { getUserTrustPolicy, setUserTrustPolicy } from "./user-trust-repository.js";
41
- export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundaryIfUnchanged, appendComposerInputHistory, appendConnectorExecutionAudit, appendTranscriptEntry, applyPendingMigrations, authenticateDeviceAccessToken, bindEndpointPrincipal, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRefreshProofMessage, buildRelationshipPrompt, cancelQueuedSessionInput, claimConnectorWebhookDelivery, claimContextExtractionRun, claimKnowledgeSourceItems, claimNextConnectorLearningJob, claimNextSessionInput, classifyStoredRow, clearComposerInputHistory, clearGatewayIdentityForTest, closeTemporalAssertions, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, consumeConnectorApproval, consumeDevicePairingToken, countKnowledgeSourceItems, createCollaborationRule, createConnectorApproval, createContextEvidence, createDevice, createDevicePairingSetup, createEndpointPrincipal, createObjectLinkRecord, createTemporalAssertion, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, deleteEndpointSessionBinding, deleteKnowledgeSourceItems, deleteNoteAgentContextRecord, deleteNoteRecord, deleteObjectLinkRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, enqueueConnectorLearningJob, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findSessionInput, findSessionKeyBySessionId, finishContextExtractionRun, finishEndpointToolInvocationAudit, finishKnowledgeSyncRun, finishSessionInputRun, getActivityEventRecord, getCachedConnectorCatalogEntry, getCollaborationRule, getConnectorAccount, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, getContextExtractionRun, getCurrentSessionId, getDevice, getEndpointPrincipal, getEndpointSessionBinding, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getNoteAgentContextRecord, getNoteRecord, getOrCreateGatewayIdentity, getRelationshipSettings, getSessionConfig, getSessionInputById, getSessionInputState, getSessionMetadata, getSessionPersistedLevels, getSessionTaskPlan, getSqliteDatabase, getUserPeopleIndexState, getUserPerson, getUserTrustPolicy, getXopcDatabase, hasIndependentExtractionOutput, hasSessionConfig, incrementSessionStatsOnAppend, insertSessionInput, inspectSchemaMigrationStatus, isDevicePairingSetupActive, isHomeAttentionAcknowledged, isProactiveSupportAllowed, isXopcDatabaseOpen, issueDeviceTokenPair, linkContextObjects, listActiveSessionInputRuns, listActivityRecords, listCachedConnectorCatalogEntries, listCollaborationRules, listCompactionBoundaries, listComposerInputHistory, listConnectorAccounts, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listConnectorSyncPolicies, listContextExtractionOutputs, listContextExtractionRuns, listContextObjectRelations, listDevices, listEndpointPrincipals, listEndpointToolInvocationAudits, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTemporalAssertions, listUserPeople, loadCompactionSourceSnapshot, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, mergeUserPeople, metadataToSessionInsert, mutateQueuedSessionInput, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, reconcileConnectorAccount, recordActivityEvent, recoverSessionInputState, recoverStaleConnectorLearningJobs, refreshConnectorAccountCurrent, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, replaceLatestSessionTurnAndQueueInput, replaceTranscriptRows, replaceUserPeopleIndex, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeDevice, revokeEndpointPrincipal, rotateDeviceRefreshToken, runSqliteWriteTransaction, searchSessionTranscript, sessionConfigRowToConfig, sessionRowToMetadata, setCollaborationRuleStatus, setConnectorLearningPaused, setEndpointSessionBinding, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setSessionConfig, setSessionInputStatus, setSessionTaskPlan, setUserTrustPolicy, signGatewayPayload, startEndpointToolInvocationAudit, startKnowledgeSyncRun, summarizeUserPeople, touchEndpointPrincipal, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateUserPerson, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertConnectorSyncPolicy, upsertKnowledgeSourceItems, upsertNoteAgentContextRecord, upsertNoteRecord, validateLatestSessionTurnTarget };
42
+ export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundaryIfUnchanged, appendComposerInputHistory, appendConnectorExecutionAudit, appendTranscriptEntry, applyPendingMigrations, authenticateDeviceAccessToken, bindEndpointPrincipal, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRefreshProofMessage, buildRelationshipPrompt, cancelQueuedSessionInput, claimConnectorWebhookDelivery, claimContextExtractionRun, claimKnowledgeSourceItems, claimNextConnectorLearningJob, claimNextSessionInput, classifyStoredRow, clearComposerInputHistory, clearGatewayIdentityForTest, closeTemporalAssertions, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, consumeClarificationApproval, consumeClarificationResume, consumeConnectorApproval, consumeDevicePairingToken, countKnowledgeSourceItems, createClarificationWait, createCollaborationRule, createConnectorApproval, createContextEvidence, createDevice, createDevicePairingSetup, createEndpointPrincipal, createObjectLinkRecord, createTemporalAssertion, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, deleteEndpointSessionBinding, deleteKnowledgeSourceItems, deleteNoteAgentContextRecord, deleteNoteRecord, deleteObjectLinkRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, enqueueConnectorLearningJob, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findSessionInput, findSessionKeyBySessionId, finishContextExtractionRun, finishEndpointToolInvocationAudit, finishKnowledgeSyncRun, finishSessionInputRun, getActiveClarification, getActivityEventRecord, getCachedConnectorCatalogEntry, getClarification, getClarificationResumeInput, getClarificationSnapshot, getCollaborationRule, getConnectorAccount, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, getContextExtractionRun, getCurrentSessionId, getDevice, getEndpointPrincipal, getEndpointSessionBinding, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getNoteAgentContextRecord, getNoteRecord, getOrCreateGatewayIdentity, getRelationshipSettings, getSessionConfig, getSessionInputById, getSessionInputState, getSessionMetadata, getSessionPersistedLevels, getSessionTaskPlan, getSqliteDatabase, getUserPeopleIndexState, getUserPerson, getUserTrustPolicy, getXopcDatabase, hasIndependentExtractionOutput, hasSessionConfig, incrementSessionStatsOnAppend, insertSessionInput, inspectSchemaMigrationStatus, isClarificationSuspended, isDevicePairingSetupActive, isHomeAttentionAcknowledged, isProactiveSupportAllowed, isXopcDatabaseOpen, issueDeviceTokenPair, linkContextObjects, listActiveSessionInputRuns, listActivityRecords, listCachedConnectorCatalogEntries, listCollaborationRules, listCompactionBoundaries, listComposerInputHistory, listConnectorAccounts, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listConnectorSyncPolicies, listContextExtractionOutputs, listContextExtractionRuns, listContextObjectRelations, listDevices, listEndpointPrincipals, listEndpointToolInvocationAudits, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTemporalAssertions, listUserPeople, loadCompactionSourceSnapshot, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, mergeUserPeople, metadataToSessionInsert, mutateQueuedSessionInput, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, reconcileConnectorAccount, recordActivityEvent, recoverSessionInputState, recoverStaleConnectorLearningJobs, refreshConnectorAccountCurrent, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, replaceLatestSessionTurnAndQueueInput, replaceTranscriptRows, replaceUserPeopleIndex, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveClarification, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeDevice, revokeEndpointPrincipal, rotateDeviceRefreshToken, runSqliteWriteTransaction, searchSessionTranscript, sessionConfigRowToConfig, sessionRowToMetadata, setCollaborationRuleStatus, setConnectorLearningPaused, setEndpointSessionBinding, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setSessionConfig, setSessionInputStatus, setSessionTaskPlan, setUserTrustPolicy, signGatewayPayload, startEndpointToolInvocationAudit, startKnowledgeSyncRun, summarizeUserPeople, supersedeActiveClarification, touchEndpointPrincipal, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateUserPerson, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertConnectorSyncPolicy, upsertKnowledgeSourceItems, upsertNoteAgentContextRecord, upsertNoteRecord, validateLatestSessionTurnTarget };