@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.
- package/dist/browser-ext/dist/background.js +59 -13
- package/dist/browser-ext/dist/content.js +0 -5
- package/dist/browser-ext/manifest.json +2 -1
- package/dist/extensions/telegram/src/inbound-processor.js +2 -2
- package/dist/extensions/telegram/src/plugin.js +3 -2
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-w3eq3YpP.js → activity-store-Ci5Rxmi_.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-k039rbUz.js → agent-avatar-dicebear-D82jpmFL.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-vul32IsP.js +1 -0
- package/dist/gateway/static/root/assets/{agents-Bmth_bSQ.js → agents-p3kWyz1T.js} +1 -1
- package/dist/gateway/static/root/assets/{api-2joIfbrH.js → api-CXIzQJ2Z.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-ByJ4kiD0.js → app-management-settings-panel-mhxcQpkQ.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-BK2Jga-B.js → appearance-settings-BIMwACUF.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-CJFJKNwS.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-DMDKtYpi.js → archive-plugin-C63Xp_sU.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-B764Ql3Z.js → attachment-load-D12KYOav.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-D-sO8CZe.js → automations-page-DXj0o5CY.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-B2wxcpgq.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-fxtzYRpv.js → binary-plugins-Bcv8hun6.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-Bcjtvckh.js → block-editor-C61LqK_-.js} +50 -50
- package/dist/gateway/static/root/assets/{browser-automation-inputs-BSmnusjD.js → browser-automation-inputs-CAclu735.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-DC_OQIBk.js → browser-automations-page-BITfKX8L.js} +2 -2
- package/dist/gateway/static/root/assets/browser-settings-page-BMjY8cyv.js +8 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-wB3Vgmp3.js +7 -0
- package/dist/gateway/static/root/assets/channels-settings-U5ffzu4r.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-BuWjIG_a.js → channels-status-swr-Cmbx0E8O.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-5SevEo_I.js → chat-terminal-dock-CNBgHN9U.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-BGaF--m5.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-DtsfalBM.js → cron-expression-DCTN4QAG.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-tDEQV5TP.js → date-picker-BuEyUxZn.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-HhNwg0Y2.js → dependency-picker-l6IXzk0C.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-acU4Li-C.js → desktop-pet-cGn_20DO.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-R84AR0Pe.js → desktop-pet-settings-DIfccDKS.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-CrLlRkSN.js → extension-debug-page-CTS5RP_D.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BH5lmZXE.js → extension-page-Dg9YssYH.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BscjNAd1.js → extension-settings-page-CWZYL8Fi.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-9HidFZUd.js → gateway-config-swr-Chsr5wGH.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-vHI_Que8.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DRCPXONr.js → gateway-startup-retry-C9ynH6VV.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-K5Zhl2rx.js → heartbeat-settings-WUhSfvob.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-CYjlMzPx.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-CR6Kle8H.js → image-generation-api-D_TsVe7h.js} +1 -1
- package/dist/gateway/static/root/assets/index-BBlJYVxR.js +74 -0
- package/dist/gateway/static/root/assets/index-_I0dD2LN.css +2 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-B1QR49-7.js → keyboard-shortcuts-settings-DGBf6YfD.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-CLlIl83V.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-C74It-T8.js → local-apps-page-DGWP_xsQ.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-BfZGZKSs.js → locale-store-B2v8mNJw.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-DuhCigiB.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-1kNnYL97.js → management-settings-DUAZ-dtt.js} +1 -1
- package/dist/gateway/static/root/assets/markdown-view-DBWu9d_n.js +201 -0
- package/dist/gateway/static/root/assets/{media-plugins-B5c0AoS1.js → media-plugins-CsUjcIBy.js} +1 -1
- package/dist/gateway/static/root/assets/messages-ChSTFZR5.js +3 -0
- package/dist/gateway/static/root/assets/{mobile-pairing-wizard-CsIZqK51.js → mobile-pairing-wizard-Dxu8twiQ.js} +1 -1
- package/dist/gateway/static/root/assets/note-detail-panel-DMdbaTZp.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-xe_vX0nM.js +8 -0
- package/dist/gateway/static/root/assets/{page-tabs-CqJN6Ljz.js → page-tabs-YeJKwV-7.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-DqRIGxf4.js → preview-open-alternatives-BfJ3jMDG.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-DE2nPE_K.js → product-open-page-B7NRGPox.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-hG7ELibZ.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-C5G2ET4w.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-Bpy8XX-5.js → registry-api-B9OZUdwC.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-Dnd73xWt.js → remote-access-hub-DTO-faxH.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Bb4b74-P.js → runtime-tools-settings-panel-uJ8Br3ZL.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DoPU5j3J.js → schema-form-CXwn6up5.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-CwzsUCgP.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-Djc3EdoO.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-Ci-9WajJ.js → settings-form-section-YVNYsR0U.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-CL_2F95D.js → settings-page-cHqrIdVR.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-MUAMcZLD.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-XUA3oKQX.js → share-preview-page-DnjSDQru.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-C7A0aywX.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-D1xSGJAQ.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-sXXAZDc9.js → skills-page-DkrGEdiY.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-DD79Bl1I.js → skills-page.utils-CqZbiZuK.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-BEH64qBV.js → system-settings-panel-Dmw0RfxZ.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-BvZSCLUH.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-CISSxU1c.js → theme-store-CubltMKm.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-DrKDhnJm.js → tunnel-api-CiieC6HP.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-CPYePL-Q.js → use-autosave-XQ3SuyB9.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-BKJC7tyW.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-DKqzrCXx.js → voice-api-key-field-D4QzVgdt.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-e9xWjwBX.js → voice-config-api-B1ZbyVmF.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-kTQug6bq.js → work-discovery-overlay-D5Tf8GRZ.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-m9SKj_GT.js → workflow-run-setup-panel-BW9p8Maz.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-DuqRodIc.js +5 -0
- package/dist/gateway/static/root/index.html +10 -10
- package/dist/package.js +1 -1
- package/dist/packages/realtime-protocol/src/voice.js +6 -1
- package/dist/src/agent/agent-manager.js +24 -7
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/embedded/execution-context.d.ts +2 -1
- package/dist/src/agent/embedded/execution-context.js +10 -4
- package/dist/src/agent/embedded/index.d.ts +1 -1
- package/dist/src/agent/embedded/index.js +2 -2
- package/dist/src/agent/embedded/model-runtime.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +5 -4
- package/dist/src/agent/embedded/run-turn.js +22 -3
- package/dist/src/agent/embedded/types.d.ts +1 -1
- package/dist/src/agent/image/tool-model-config.js +1 -1
- package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js +6 -3
- package/dist/src/agent/service/process-direct-streaming.js +6 -3
- package/dist/src/agent/service.d.ts +2 -0
- package/dist/src/agent/service.js +23 -9
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/tasks/task-judge-service.js +3 -3
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +17 -2
- package/dist/src/agent/tools/browser/tool/schemas.d.ts +85 -1
- package/dist/src/agent/tools/browser/tool/schemas.js +212 -5
- package/dist/src/agent/tools/clarify-tool.d.ts +17 -3
- package/dist/src/agent/tools/clarify-tool.js +27 -32
- package/dist/src/agent/tools/cli-clarify.js +23 -8
- package/dist/src/agent/tools/factory.js +14 -4
- package/dist/src/ai-assist/text-assist.js +1 -1
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/oauth/xopc-cloud.js +1 -1
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +2 -2
- package/dist/src/automations/domain/validation.d.ts +4 -4
- package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -1
- package/dist/src/browser/drivers/extension-driver.d.ts +4 -4
- package/dist/src/browser/drivers/extension-driver.js +20 -8
- package/dist/src/browser/drivers/playwright-driver.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.d.ts +3 -0
- package/dist/src/browser/providers/browser-ext-install.js +19 -4
- package/dist/src/browser/providers/extension.d.ts +14 -1
- package/dist/src/browser/providers/extension.js +89 -11
- package/dist/src/browser/providers/playwright-install.js +8 -12
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/config/index.js +4 -4
- package/dist/src/config/loader.js +2 -2
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/extensions/lockfile.js +1 -1
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/chat-stream/mapper.js +5 -1
- package/dist/src/gateway/chat-stream/protocol.d.ts +5 -1
- package/dist/src/gateway/clarify-runtime.d.ts +7 -5
- package/dist/src/gateway/clarify-runtime.js +8 -11
- package/dist/src/gateway/ephemeral-clarification-waiter.d.ts +17 -0
- package/dist/src/gateway/ephemeral-clarification-waiter.js +46 -0
- package/dist/src/gateway/file-path-classifier.js +1 -1
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/routes/agent-stream.js +44 -18
- package/dist/src/gateway/hono/routes/browser.js +149 -27
- package/dist/src/gateway/hono/routes/lazy-bundles.js +1 -1
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +10 -2
- package/dist/src/gateway/hono/routes/side-chats.js +24 -4
- package/dist/src/gateway/security/gateway-scopes.js +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +25 -36
- package/dist/src/gateway/service/agent-runner.js +103 -32
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service/run-gateway-agent.js +5 -2
- package/dist/src/gateway/service/session-input-coordinator.js +4 -1
- package/dist/src/gateway/service/sessions-api.js +1 -1
- package/dist/src/gateway/service.d.ts +4 -2
- package/dist/src/gateway/service.js +36 -20
- package/dist/src/gateway/side-chat/manager.d.ts +2 -1
- package/dist/src/gateway/side-chat/manager.js +5 -4
- package/dist/src/gateway/side-chat/run-service.d.ts +5 -1
- package/dist/src/gateway/side-chat/run-service.js +24 -23
- package/dist/src/gateway/side-chat/types.d.ts +3 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
- package/dist/src/providers/index.js +2 -2
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/providers/model-thinking.js +57 -20
- package/dist/src/providers/register-runtime-providers.js +1 -1
- package/dist/src/storage/sqlite/clarification-wait-repository.d.ts +41 -0
- package/dist/src/storage/sqlite/clarification-wait-repository.js +418 -0
- package/dist/src/storage/sqlite/index.d.ts +2 -1
- package/dist/src/storage/sqlite/index.js +2 -1
- package/dist/src/storage/sqlite/migrations/154_session_clarification_waits.sql +60 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/session-input-repository.d.ts +11 -6
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/voice/realtime/agentEngine.js +7 -2
- package/dist/src/voice/realtime/runtime.types.d.ts +5 -0
- package/dist/src/work-discovery/service.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +1 -1
- package/package.json +3 -3
- package/skills/creative/hatch-pet/SKILL.md +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D4J4oq8p.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-B3ky7cWU.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-Ds5-_-9z.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-C1FojyG6.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-settings-panel-Bs59UCut.js +0 -7
- package/dist/gateway/static/root/assets/channels-settings-CM9vNmoo.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BPZ44D-V.js +0 -2
- package/dist/gateway/static/root/assets/gateway-settings-BxLcW6ij.js +0 -1
- package/dist/gateway/static/root/assets/home-page-CZAg9RBv.js +0 -1
- package/dist/gateway/static/root/assets/index-D4Ykja-U.js +0 -72
- package/dist/gateway/static/root/assets/index-zIJ3AXgR.css +0 -2
- package/dist/gateway/static/root/assets/local-app-workbench-page-wicoV-ti.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-xX-7S49A.js +0 -2
- package/dist/gateway/static/root/assets/markdown-view-DjiwT28p.js +0 -201
- package/dist/gateway/static/root/assets/messages-DaIwVWar.js +0 -3
- package/dist/gateway/static/root/assets/note-detail-panel-CfWxopl4.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-CYN-LCHJ.js +0 -8
- package/dist/gateway/static/root/assets/project-detail-page-B5G3LzDq.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-CuVK2mKu.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-XL4LyKZe.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-0ForzDSS.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DVws6XZc.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-BwDvcacF.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-BJjrATqE.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-0jxMi75O.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-B6zLDfDl.js +0 -2
- package/dist/gateway/static/root/assets/workflows-page-Bcd1XqP7.js +0 -5
- package/dist/src/gateway/clarify-bridge.d.ts +0 -46
- 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:
|
|
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 };
|