@xopcai/xopc 0.0.267 → 0.0.269
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/assets/{auth-D_IL6naL.js → auth-cwEj8rFb.js} +140 -29
- package/dist/browser-ext/dist/assets/sidepanel-C86O7q5Y.css +299 -0
- package/dist/browser-ext/dist/background.js +2 -2
- package/dist/browser-ext/dist/sidepanel.html +2 -2
- package/dist/browser-ext/dist/sidepanel.js +9501 -427
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-Bhyy6ENz.js → activity-store-DcwCSY6s.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-ZrSAMchm.js → agent-avatar-dicebear-D0NBOWC4.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-DiNFN8qS.js → agent-defaults-settings-panel-qKCezlBg.js} +1 -1
- package/dist/gateway/static/root/assets/agents-BMhnZKhP.js +1 -0
- package/dist/gateway/static/root/assets/{api-B2y7ZjZk.js → api-eaPO-mdr.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-D-L6yjS7.js → app-management-settings-panel-E3xm2teY.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-BW5eb53j.js → appearance-settings-CiZOjgls.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DduJDWGY.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-DwXvu1p9.js → archive-plugin-D09yo_Hc.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-DqU2BYBp.js → attachment-load-CNYb8Qru.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-C7qoj9Sd.js → automations-page-DsrfW5ii.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-X7hNHCjW.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-CfplDak2.js → binary-plugins-OWlaGqlY.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CzLs38ru.js → block-editor-CVND3M6r.js} +3 -3
- package/dist/gateway/static/root/assets/{browser-automation-inputs-s5I78Iko.js → browser-automation-inputs-D7IzVK_J.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-_SKi8s9b.js → browser-automations-page-CQ6cCpIv.js} +2 -2
- package/dist/gateway/static/root/assets/browser-settings-page-BZ7nK_pN.js +8 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-BfKvJO1C.js +7 -0
- package/dist/gateway/static/root/assets/channels-settings-D1UDxJuA.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-_OsWr_vS.js → channels-status-swr-D4JrgJKa.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-snvAu3hJ.js → chat-terminal-dock-BUjnhT7C.js} +2 -2
- package/dist/gateway/static/root/assets/connectors-page-C2nuqs_O.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-BhGZSbT6.js → cron-expression-DlyRIyUn.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-Cep5f9b-.js → date-picker-CU-ij_yE.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-BzSEBQku.js → dependency-picker-Z6Nf0Wjq.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-BwX_6Gah.js → desktop-pet-C0F5Iqnc.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-WrbVsU2b.js → desktop-pet-settings-Bj_W6HL1.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-BdXSwtAZ.js → extension-debug-page-Ba09EnAn.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-I95ukbRb.js → extension-page-C88aGXJs.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-8zUisBay.js → extension-settings-page-CMyt0A32.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-OObCK8jM.js → gateway-config-swr-bjzk_4hn.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-ogv8ZbvG.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-D_TxKN_A.js → gateway-startup-retry-DrbIzFyB.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-BGQxU-Ug.js → heartbeat-settings-BnrMRKaZ.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-CbcJCREd.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-fPU9yGsw.js → image-generation-api-CBWU9Ner.js} +1 -1
- package/dist/gateway/static/root/assets/index-7PZ6jmhy.css +2 -0
- package/dist/gateway/static/root/assets/{index-D2OtD9Wa.js → index-CfyyA9-g.js} +47 -47
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BUe_om99.js → keyboard-shortcuts-settings-B8Z7kKQY.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-D5XVZnK1.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-BZaLzfms.js → local-apps-page-CLSfzkRp.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-DFQX9kTl.js → locale-store-BQ2HKTWb.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-CWDU1AGN.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-Duf8w-Bl.js → management-settings-CuFNgQUy.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-D-5jHRWg.js → markdown-view-DIcfrLmG.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-2-QfzHmg.js → media-plugins-CSv6-xTA.js} +1 -1
- package/dist/gateway/static/root/assets/{messages-Dj8QuS6e.js → messages-BRjoarIr.js} +2 -2
- package/dist/gateway/static/root/assets/{mobile-pairing-wizard-DRaVIAt1.js → mobile-pairing-wizard-C7d_ztgp.js} +1 -1
- package/dist/gateway/static/root/assets/note-detail-panel-D5JuBLyt.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-C5-ccCi4.js +8 -0
- package/dist/gateway/static/root/assets/{page-tabs-DaZ7QpNO.js → page-tabs-BfV-PQa5.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-CWEuqCmv.js → preview-open-alternatives-DQS7NFpg.js} +1 -1
- package/dist/gateway/static/root/assets/proactive-page-fHjPigmx.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-CIGLPFm7.js → product-open-page-BIhjZLKg.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-6v_khvEt.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-CCy1aK4V.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-CsZLatKo.js → registry-api-CwveUfe8.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-pkqKRnch.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CslkSM-m.js → runtime-tools-settings-panel-DMQ0wpNg.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-B2gvVrBq.js → schema-form-C91g2PRU.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-Cr4E4cap.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-D1JRDRyL.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-CmlnuSO3.js → settings-form-section-Cem6L49Y.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-DWWgyelT.js → settings-page-afDUxqlV.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-CJrN3m1o.js → setup-status-panel-Cc_iP_vv.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-C12oyIKk.js → share-preview-page-CVEVHksg.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-BrMECMAB.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DuqIDYjc.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-yhW7LLqk.js → skills-page-CNrq1W6C.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-FaTlq8t-.js → skills-page.utils-D1wGfm22.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-CMrkoJLN.js → system-settings-panel-BLE8PxWE.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-m0oXUKl2.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-zRT6vaZc.js → theme-store-BejLVjIT.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-C2tAZaJz.js → tunnel-api-Dur80zSQ.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-BsDRt4QI.js → use-autosave-DmgEA8Qb.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-Dl10D_5q.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-CS5heYMP.js → voice-api-key-field-sZ0J83SF.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-DpJEu2RQ.js → voice-config-api-BEbz3avx.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-BeSz5Th5.js → work-discovery-overlay-BXnAlbmO.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BkwFey0a.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-CswgoIFU.js +6 -0
- package/dist/gateway/static/root/index.html +10 -10
- package/dist/gateway/static/root/notification-sw.js +15 -0
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/notifications.js +15 -1
- package/dist/packages/gateway-contract/src/proactive.js +104 -0
- package/dist/packages/realtime-protocol/src/voice.js +2 -1
- package/dist/src/agent/agent-manager.js +4 -4
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/embedded/model-runtime.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +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.js +2 -2
- 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/workflow/subagent-runner.d.ts +1 -0
- package/dist/src/agent/workflow/subagent-runner.js +2 -2
- 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/browser/providers/browser-ext-install.js +1 -1
- package/dist/src/browser/runtime/browser-runtime.js +3 -2
- package/dist/src/cli/commands/connectors.js +1 -1
- 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/connectors/connected-source-ingestion.js +1 -1
- package/dist/src/connectors/connection-recovery-service.js +1 -1
- package/dist/src/connectors/health.js +1 -1
- package/dist/src/extensions/lockfile.js +1 -1
- package/dist/src/gateway/agents-admin.js +1 -1
- 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/capabilities.js +1 -1
- package/dist/src/gateway/hono/routes/connectors.js +1 -1
- package/dist/src/gateway/hono/routes/index.js +0 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +12 -0
- package/dist/src/gateway/hono/routes/mcp.js +1 -1
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/proactive-control.d.ts +3 -0
- package/dist/src/gateway/hono/routes/proactive-control.js +161 -0
- package/dist/src/gateway/hono/routes/proactive.d.ts +1 -1
- package/dist/src/gateway/hono/routes/proactive.js +12 -5
- package/dist/src/gateway/hono/routes/voice.js +1 -1
- package/dist/src/gateway/security/gateway-scopes.js +5 -0
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service.d.ts +0 -1
- package/dist/src/gateway/service.js +28 -30
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/notifications/planner.js +4 -3
- package/dist/src/notifications/proactive-channel.d.ts +8 -0
- package/dist/src/notifications/proactive-channel.js +57 -0
- package/dist/src/notifications/proactive-policy.d.ts +3 -0
- package/dist/src/notifications/proactive-policy.js +32 -0
- package/dist/src/notifications/service.d.ts +78 -0
- package/dist/src/notifications/service.js +71 -13
- package/dist/src/notifications/store.d.ts +2 -0
- package/dist/src/notifications/store.js +8 -1
- package/dist/src/notifications/web-push.d.ts +19 -0
- package/dist/src/notifications/web-push.js +182 -0
- package/dist/src/proactive/actions/service.js +10 -2
- package/dist/src/proactive/actions/workflow.d.ts +15 -0
- package/dist/src/proactive/actions/workflow.js +88 -0
- package/dist/src/proactive/execution/agent-executor.d.ts +5 -0
- package/dist/src/proactive/execution/agent-executor.js +21 -0
- package/dist/src/proactive/execution/authorization.d.ts +3 -0
- package/dist/src/proactive/execution/authorization.js +23 -0
- package/dist/src/proactive/execution/context.js +2 -11
- package/dist/src/proactive/execution/insight.d.ts +7 -0
- package/dist/src/proactive/execution/insight.js +33 -2
- package/dist/src/proactive/execution/repository.d.ts +2 -0
- package/dist/src/proactive/execution/repository.js +38 -4
- package/dist/src/proactive/execution/types.d.ts +5 -0
- package/dist/src/proactive/execution/worker.js +38 -7
- package/dist/src/proactive/inbox/cards.d.ts +21 -0
- package/dist/src/proactive/inbox/cards.js +237 -0
- package/dist/src/proactive/inbox/delivery.d.ts +6 -0
- package/dist/src/proactive/inbox/delivery.js +52 -0
- package/dist/src/proactive/inbox/digest.d.ts +8 -0
- package/dist/src/proactive/inbox/digest.js +112 -0
- package/dist/src/proactive/inbox/lifecycle.d.ts +4 -0
- package/dist/src/proactive/inbox/lifecycle.js +58 -0
- package/dist/src/proactive/inbox/notification-policy.d.ts +1 -0
- package/dist/src/proactive/inbox/notification-policy.js +20 -0
- package/dist/src/proactive/inbox/repository.d.ts +1 -0
- package/dist/src/proactive/inbox/repository.js +68 -11
- package/dist/src/proactive/inbox/types.d.ts +9 -1
- package/dist/src/proactive/inbox/worker.js +9 -3
- package/dist/src/proactive/index.js +1 -1
- package/dist/src/proactive/maintenance.js +7 -0
- package/dist/src/proactive/metrics.d.ts +10 -0
- package/dist/src/proactive/metrics.js +27 -0
- package/dist/src/proactive/policy/presence.d.ts +2 -0
- package/dist/src/proactive/policy/presence.js +27 -0
- package/dist/src/proactive/policy/service.d.ts +53 -0
- package/dist/src/proactive/policy/service.js +122 -0
- package/dist/src/proactive/routing/matcher.js +3 -2
- package/dist/src/proactive/scenarios/control.d.ts +90 -0
- package/dist/src/proactive/scenarios/control.js +109 -0
- package/dist/src/proactive/scenarios/preview.d.ts +13 -0
- package/dist/src/proactive/scenarios/preview.js +81 -0
- package/dist/src/proactive/scenarios/prompt-composer.js +2 -2
- package/dist/src/proactive/scenarios/repository.js +5 -1
- package/dist/src/proactive/temporal/schedule.d.ts +3 -0
- package/dist/src/proactive/temporal/schedule.js +67 -0
- package/dist/src/proactive/temporal/worker.js +8 -4
- 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/register-runtime-providers.js +1 -1
- package/dist/src/storage/sqlite/migrations/159_proactive_controls.sql +68 -0
- package/dist/src/storage/sqlite/migrations/160_proactive_web_push.sql +27 -0
- package/dist/src/storage/sqlite/migrations/161_proactive_delivery_and_lifecycle.sql +51 -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/tui/tui-startup-resources.js +2 -2
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/voice/realtime/runtime.d.ts +2 -1
- package/dist/src/voice/realtime/runtime.js +21 -5
- package/dist/src/work-discovery/service.js +1 -1
- package/dist/src/workflows/domain/run.d.ts +1 -0
- package/dist/src/workflows/index.js +2 -2
- package/dist/src/workflows/service/workflow-run-service.d.ts +3 -0
- package/dist/src/workflows/service/workflow-run-service.js +27 -6
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -0
- package/package.json +3 -1
- package/dist/browser-ext/dist/assets/sidepanel-CEPaVLjr.css +0 -155
- package/dist/gateway/static/root/assets/agents-Bu6Hf59K.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-CiQIdz3N.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-CIARTLHO.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-DTdx66sX.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-Ck9U0Olx.js +0 -7
- package/dist/gateway/static/root/assets/channels-settings-I_vDpbnl.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BmKTnzo1.js +0 -2
- package/dist/gateway/static/root/assets/gateway-settings-DGj5b9Yv.js +0 -1
- package/dist/gateway/static/root/assets/home-page-BZPpK0A3.js +0 -1
- package/dist/gateway/static/root/assets/index-CRJrO4GI.css +0 -2
- package/dist/gateway/static/root/assets/local-app-workbench-page-CbQnffS9.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-WWCHqW_x.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-panel-BT-fWGxX.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-C4705PzN.js +0 -8
- package/dist/gateway/static/root/assets/project-detail-page-BZegJ6an.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-B7hUHeLI.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BE9hZpdh.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DmAAPMo1.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-CvBocGDA.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-D4BtSiLq.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-CzKGn056.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-BUaO62cy.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-Dy8h1SSJ.js +0 -2
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BebW0CDK.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-CU8jFgPF.js +0 -6
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
CREATE TABLE proactive_preferences (
|
|
2
|
+
workspace_id TEXT PRIMARY KEY,
|
|
3
|
+
preferences_json TEXT NOT NULL,
|
|
4
|
+
revision INTEGER NOT NULL DEFAULT 1
|
|
5
|
+
);
|
|
6
|
+
CREATE TABLE proactive_subscription_settings (
|
|
7
|
+
subscription_id TEXT PRIMARY KEY REFERENCES proactive_scenario_subscriptions(subscription_id) ON DELETE CASCADE,
|
|
8
|
+
settings_json TEXT NOT NULL,
|
|
9
|
+
revision INTEGER NOT NULL DEFAULT 1
|
|
10
|
+
);
|
|
11
|
+
CREATE TABLE proactive_schedule_state (
|
|
12
|
+
subscription_id TEXT PRIMARY KEY REFERENCES proactive_scenario_subscriptions(subscription_id) ON DELETE CASCADE,
|
|
13
|
+
next_due_at TEXT NOT NULL,
|
|
14
|
+
last_checked_at TEXT,
|
|
15
|
+
last_fingerprint TEXT
|
|
16
|
+
);
|
|
17
|
+
CREATE TABLE proactive_notification_budget (
|
|
18
|
+
dedupe_key TEXT PRIMARY KEY,
|
|
19
|
+
workspace_id TEXT NOT NULL,
|
|
20
|
+
local_day TEXT NOT NULL,
|
|
21
|
+
created_at TEXT NOT NULL
|
|
22
|
+
);
|
|
23
|
+
CREATE INDEX proactive_budget_day ON proactive_notification_budget(workspace_id, local_day);
|
|
24
|
+
ALTER TABLE proactive_runs ADD COLUMN outcome_reason TEXT;
|
|
25
|
+
ALTER TABLE proactive_runs ADD COLUMN policy_revision INTEGER NOT NULL DEFAULT 0;
|
|
26
|
+
ALTER TABLE proactive_inbox_items ADD COLUMN revision INTEGER NOT NULL DEFAULT 1;
|
|
27
|
+
ALTER TABLE proactive_inbox_items ADD COLUMN notification_revision INTEGER NOT NULL DEFAULT 1;
|
|
28
|
+
ALTER TABLE proactive_inbox_items ADD COLUMN expires_at TEXT;
|
|
29
|
+
CREATE TABLE proactive_card_changes (
|
|
30
|
+
sequence INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
31
|
+
workspace_id TEXT NOT NULL,
|
|
32
|
+
inbox_item_id TEXT NOT NULL,
|
|
33
|
+
deleted INTEGER NOT NULL DEFAULT 0
|
|
34
|
+
);
|
|
35
|
+
CREATE TRIGGER proactive_card_created AFTER INSERT ON proactive_inbox_items BEGIN
|
|
36
|
+
INSERT INTO proactive_card_changes(inbox_item_id, workspace_id)
|
|
37
|
+
SELECT NEW.inbox_item_id, s.workspace_id FROM proactive_insights x JOIN proactive_scenario_subscriptions s USING(subscription_id) WHERE x.insight_id = NEW.insight_id;
|
|
38
|
+
END;
|
|
39
|
+
CREATE TRIGGER proactive_card_updated AFTER UPDATE ON proactive_inbox_items
|
|
40
|
+
WHEN NEW.revision = OLD.revision BEGIN
|
|
41
|
+
UPDATE proactive_inbox_items SET revision = OLD.revision + 1 WHERE inbox_item_id = NEW.inbox_item_id;
|
|
42
|
+
INSERT INTO proactive_card_changes(inbox_item_id, workspace_id)
|
|
43
|
+
SELECT NEW.inbox_item_id, s.workspace_id FROM proactive_insights x JOIN proactive_scenario_subscriptions s USING(subscription_id) WHERE x.insight_id = NEW.insight_id;
|
|
44
|
+
END;
|
|
45
|
+
CREATE TRIGGER proactive_card_deleted AFTER DELETE ON proactive_inbox_items BEGIN
|
|
46
|
+
INSERT INTO proactive_card_changes(inbox_item_id, workspace_id, deleted)
|
|
47
|
+
SELECT OLD.inbox_item_id, workspace_id, 1 FROM proactive_card_changes WHERE inbox_item_id = OLD.inbox_item_id ORDER BY sequence DESC LIMIT 1;
|
|
48
|
+
END;
|
|
49
|
+
CREATE TRIGGER proactive_insight_card_updated AFTER UPDATE OF title, summary, decision_json, action_status, action_result_json, action_error ON proactive_insights BEGIN
|
|
50
|
+
UPDATE proactive_inbox_items SET updated_at = NEW.action_updated_at WHERE insight_id = NEW.insight_id AND NEW.action_updated_at IS NOT NULL;
|
|
51
|
+
END;
|
|
52
|
+
CREATE TABLE proactive_card_actions (
|
|
53
|
+
idempotency_key TEXT PRIMARY KEY,
|
|
54
|
+
inbox_item_id TEXT NOT NULL REFERENCES proactive_inbox_items(inbox_item_id) ON DELETE CASCADE,
|
|
55
|
+
request_json TEXT NOT NULL,
|
|
56
|
+
response_json TEXT NOT NULL
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
INSERT INTO proactive_card_changes(inbox_item_id, workspace_id)
|
|
60
|
+
SELECT i.inbox_item_id, s.workspace_id FROM proactive_inbox_items i JOIN proactive_insights x USING(insight_id) JOIN proactive_scenario_subscriptions s USING(subscription_id);
|
|
61
|
+
|
|
62
|
+
ALTER TABLE proactive_runs ADD COLUMN subscription_revision INTEGER NOT NULL DEFAULT 0;
|
|
63
|
+
ALTER TABLE proactive_runs ADD COLUMN policy_snapshot_json TEXT;
|
|
64
|
+
|
|
65
|
+
CREATE TRIGGER proactive_subscription_enabled_changed AFTER UPDATE OF enabled ON proactive_scenario_subscriptions
|
|
66
|
+
WHEN NEW.enabled <> OLD.enabled BEGIN
|
|
67
|
+
UPDATE proactive_subscription_settings SET revision = revision + 1 WHERE subscription_id = NEW.subscription_id;
|
|
68
|
+
END;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
CREATE TABLE proactive_web_push_keys (
|
|
2
|
+
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
3
|
+
public_key TEXT NOT NULL,
|
|
4
|
+
private_key TEXT NOT NULL
|
|
5
|
+
);
|
|
6
|
+
CREATE TABLE proactive_web_push_subscriptions (
|
|
7
|
+
id TEXT PRIMARY KEY,
|
|
8
|
+
workspace_id TEXT NOT NULL,
|
|
9
|
+
endpoint TEXT NOT NULL UNIQUE,
|
|
10
|
+
subscription_json TEXT NOT NULL,
|
|
11
|
+
language TEXT NOT NULL,
|
|
12
|
+
created_at TEXT NOT NULL
|
|
13
|
+
);
|
|
14
|
+
CREATE TABLE proactive_web_push_deliveries (
|
|
15
|
+
notification_id TEXT NOT NULL REFERENCES notification_events(event_id) ON DELETE CASCADE,
|
|
16
|
+
subscription_id TEXT NOT NULL REFERENCES proactive_web_push_subscriptions(id) ON DELETE CASCADE,
|
|
17
|
+
inbox_item_id TEXT NOT NULL,
|
|
18
|
+
notification_revision INTEGER NOT NULL DEFAULT 1,
|
|
19
|
+
status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'sending', 'sent', 'failed')),
|
|
20
|
+
attempt INTEGER NOT NULL DEFAULT 0,
|
|
21
|
+
next_attempt_at INTEGER NOT NULL,
|
|
22
|
+
lease_until INTEGER,
|
|
23
|
+
last_error TEXT,
|
|
24
|
+
PRIMARY KEY(notification_id, subscription_id)
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
CREATE INDEX proactive_web_push_due_idx ON proactive_web_push_deliveries(status, next_attempt_at);
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
ALTER TABLE proactive_inbox_items ADD COLUMN withdrawn_at TEXT;
|
|
2
|
+
ALTER TABLE proactive_inbox_items ADD COLUMN correlation_key TEXT;
|
|
3
|
+
CREATE INDEX proactive_card_correlation ON proactive_inbox_items(correlation_key);
|
|
4
|
+
CREATE TABLE proactive_presence (
|
|
5
|
+
workspace_id TEXT NOT NULL, client_id TEXT NOT NULL, surface TEXT NOT NULL,
|
|
6
|
+
expires_at INTEGER NOT NULL, PRIMARY KEY(workspace_id, client_id)
|
|
7
|
+
);
|
|
8
|
+
CREATE TABLE proactive_digest_queue (
|
|
9
|
+
inbox_item_id TEXT PRIMARY KEY REFERENCES proactive_inbox_items(inbox_item_id) ON DELETE CASCADE,
|
|
10
|
+
workspace_id TEXT NOT NULL, notification_revision INTEGER NOT NULL,
|
|
11
|
+
mode TEXT NOT NULL, due_at TEXT NOT NULL, consumed_at TEXT
|
|
12
|
+
);
|
|
13
|
+
CREATE INDEX proactive_digest_due ON proactive_digest_queue(consumed_at, due_at);
|
|
14
|
+
CREATE TABLE proactive_digests (
|
|
15
|
+
digest_id TEXT PRIMARY KEY, workspace_id TEXT NOT NULL, occurrence_key TEXT NOT NULL,
|
|
16
|
+
created_at TEXT NOT NULL, notification_id TEXT, UNIQUE(workspace_id, occurrence_key)
|
|
17
|
+
);
|
|
18
|
+
CREATE TABLE proactive_digest_members (
|
|
19
|
+
digest_id TEXT NOT NULL REFERENCES proactive_digests(digest_id) ON DELETE CASCADE,
|
|
20
|
+
inbox_item_id TEXT NOT NULL REFERENCES proactive_inbox_items(inbox_item_id) ON DELETE CASCADE,
|
|
21
|
+
notification_revision INTEGER NOT NULL, PRIMARY KEY(digest_id, inbox_item_id)
|
|
22
|
+
);
|
|
23
|
+
CREATE TABLE proactive_channel_deliveries (
|
|
24
|
+
notification_id TEXT PRIMARY KEY REFERENCES notification_events(event_id) ON DELETE CASCADE,
|
|
25
|
+
workspace_id TEXT NOT NULL, target_json TEXT NOT NULL,
|
|
26
|
+
status TEXT NOT NULL DEFAULT 'pending', attempt INTEGER NOT NULL DEFAULT 0,
|
|
27
|
+
next_attempt_at INTEGER NOT NULL, lease_until INTEGER, provider_message_id TEXT, last_error TEXT
|
|
28
|
+
);
|
|
29
|
+
CREATE TABLE proactive_preview_runs (
|
|
30
|
+
id TEXT PRIMARY KEY, subscription_id TEXT NOT NULL, created_at TEXT NOT NULL,
|
|
31
|
+
completed_at TEXT, status TEXT NOT NULL, error TEXT
|
|
32
|
+
);
|
|
33
|
+
CREATE TABLE proactive_delivery_decisions (
|
|
34
|
+
notification_key TEXT PRIMARY KEY, workspace_id TEXT NOT NULL, outcome TEXT NOT NULL, created_at TEXT NOT NULL
|
|
35
|
+
);
|
|
36
|
+
CREATE TABLE proactive_card_review_state (
|
|
37
|
+
inbox_item_id TEXT PRIMARY KEY REFERENCES proactive_inbox_items(inbox_item_id) ON DELETE CASCADE,
|
|
38
|
+
checked_at TEXT NOT NULL
|
|
39
|
+
);
|
|
40
|
+
CREATE TABLE proactive_workflow_links (
|
|
41
|
+
inbox_item_id TEXT PRIMARY KEY REFERENCES proactive_inbox_items(inbox_item_id) ON DELETE CASCADE,
|
|
42
|
+
definition_id TEXT NOT NULL, agent_id TEXT NOT NULL, attempt_key TEXT NOT NULL,
|
|
43
|
+
run_id TEXT, session_key TEXT, status TEXT NOT NULL, lease_until INTEGER, error TEXT
|
|
44
|
+
);
|
|
45
|
+
CREATE TABLE proactive_push_probes (
|
|
46
|
+
id TEXT PRIMARY KEY, workspace_id TEXT NOT NULL, subscription_id TEXT NOT NULL,
|
|
47
|
+
status TEXT NOT NULL, created_at INTEGER NOT NULL, opened_at INTEGER, error TEXT
|
|
48
|
+
);
|
|
49
|
+
ALTER TABLE proactive_runs ADD COLUMN input_tokens INTEGER;
|
|
50
|
+
ALTER TABLE proactive_runs ADD COLUMN output_tokens INTEGER;
|
|
51
|
+
ALTER TABLE proactive_runs ADD COLUMN estimated_cost_usd REAL;
|
|
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
|
|
|
3
3
|
/** Baseline schema version applied from schema.sql on first open. */
|
|
4
4
|
export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
|
|
5
5
|
/** Latest schema version this release supports (increment when adding migrations). */
|
|
6
|
-
export declare const XOPC_DB_SCHEMA_VERSION =
|
|
6
|
+
export declare const XOPC_DB_SCHEMA_VERSION = 161;
|
|
7
7
|
export declare function resolveMigrationsDir(override?: string): string;
|
|
8
8
|
/**
|
|
9
9
|
* Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
|
|
@@ -12,7 +12,7 @@ const log = createLogger("Sqlite:Migrations");
|
|
|
12
12
|
/** Baseline schema version applied from schema.sql on first open. */
|
|
13
13
|
const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
|
|
14
14
|
/** Latest schema version this release supports (increment when adding migrations). */
|
|
15
|
-
const XOPC_DB_SCHEMA_VERSION =
|
|
15
|
+
const XOPC_DB_SCHEMA_VERSION = 161;
|
|
16
16
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
17
17
|
function backupBeforeTaskCutover(db, databasePath) {
|
|
18
18
|
db.exec("PRAGMA wal_checkpoint(FULL)");
|
|
@@ -57,7 +57,7 @@ function applySingleMigration(db, migration) {
|
|
|
57
57
|
* Each step runs in its own transaction and updates schema_meta on success.
|
|
58
58
|
*/
|
|
59
59
|
function applyPendingMigrations(db, options = {}) {
|
|
60
|
-
const targetVersion = options.targetVersion ??
|
|
60
|
+
const targetVersion = options.targetVersion ?? 161;
|
|
61
61
|
let currentVersion = readSchemaVersion(db);
|
|
62
62
|
if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
|
|
63
63
|
if (currentVersion >= targetVersion) return currentVersion;
|
|
@@ -94,7 +94,7 @@ function applyPendingMigrations(db, options = {}) {
|
|
|
94
94
|
}
|
|
95
95
|
/** Inspect schema version without mutating the database. */
|
|
96
96
|
function inspectSchemaMigrationStatus(db, options = {}) {
|
|
97
|
-
const appVersion = options.targetVersion ??
|
|
97
|
+
const appVersion = options.targetVersion ?? 161;
|
|
98
98
|
const dbVersion = readSchemaVersion(db);
|
|
99
99
|
if (dbVersion > appVersion) return {
|
|
100
100
|
dbVersion,
|
|
@@ -19,7 +19,7 @@ const log = createLogger('Sqlite:Migrations');
|
|
|
19
19
|
export const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
|
|
20
20
|
|
|
21
21
|
/** Latest schema version this release supports (increment when adding migrations). */
|
|
22
|
-
export const XOPC_DB_SCHEMA_VERSION =
|
|
22
|
+
export const XOPC_DB_SCHEMA_VERSION = 161;
|
|
23
23
|
|
|
24
24
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
25
25
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths-state.js";
|
|
2
|
-
import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir } from "../config/paths.js";
|
|
3
2
|
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
3
|
+
import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir } from "../config/paths.js";
|
|
4
4
|
import { resolveBootstrapFilesSync } from "../agent/bootstrap/bootstrap-files.js";
|
|
5
5
|
import { createSkillConfigManager, isSkillEnabled } from "../agent/skills/config.js";
|
|
6
6
|
import { loadSkills } from "../agent/skills/index.js";
|
|
7
7
|
import { createWorkflowCatalog } from "../agent/workflow/catalog.js";
|
|
8
|
-
import { listConnectorInstances } from "../connectors/instances.js";
|
|
9
8
|
import { getWorkspacePath } from "../config/workspace-path-helpers.js";
|
|
10
9
|
import "../config/index.js";
|
|
10
|
+
import { listConnectorInstances } from "../connectors/instances.js";
|
|
11
11
|
import { basename } from "node:path";
|
|
12
12
|
//#region src/tui/tui-startup-resources.ts
|
|
13
13
|
init_paths();
|
package/dist/src/tui/tui.js
CHANGED
|
@@ -2,10 +2,10 @@ import { version } from "../../package.js";
|
|
|
2
2
|
import { resolveStateDir, resolveXopcDatabasePath } from "../config/paths-state.js";
|
|
3
3
|
import { parseAgentSessionKey } from "../routing/session-key-utils.js";
|
|
4
4
|
import { init_agent_session_key, normalizeAgentId } from "../routing/agent-session-key.js";
|
|
5
|
+
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
5
6
|
import { init_paths } from "../config/paths.js";
|
|
6
7
|
import { loadConfig } from "../config/loader.js";
|
|
7
8
|
import { getAllModels, getAllProviders, getApiKey, init_providers, isProviderConfiguredSync } from "../providers/index.js";
|
|
8
|
-
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
9
9
|
import { ProjectTrustStore, hasTrustRequiringProjectResources } from "../project-trust/trust-store.js";
|
|
10
10
|
import { renderWorkflowFinalSummary, renderWorkflowPanel } from "../agent/workflow/snapshot.js";
|
|
11
11
|
import { ensureStarterAgentsInitialized } from "../agent/starter-agents.js";
|
|
@@ -19,6 +19,7 @@ export declare class VoiceRealtimeRuntime {
|
|
|
19
19
|
private readonly preauthBudget;
|
|
20
20
|
private readonly socketsByPrincipal;
|
|
21
21
|
private readonly conversationReservations;
|
|
22
|
+
private readonly activeSessions;
|
|
22
23
|
private closed;
|
|
23
24
|
constructor(options: VoiceRealtimeRuntimeOptions);
|
|
24
25
|
private prepareSession;
|
|
@@ -26,7 +27,7 @@ export declare class VoiceRealtimeRuntime {
|
|
|
26
27
|
createSession(request: CreateVoiceSessionRequest, principalId: string, now?: number): Promise<CreateVoiceSessionResponse>;
|
|
27
28
|
handleUpgrade(req: IncomingMessage, socket: Socket, head: Buffer): boolean;
|
|
28
29
|
hasConversation(sessionKey: string): boolean;
|
|
29
|
-
cancelSession(sessionId: string, ticket: string, principalId: string): boolean
|
|
30
|
+
cancelSession(sessionId: string, ticket: string, principalId: string): Promise<boolean>;
|
|
30
31
|
close(): void;
|
|
31
32
|
private releaseConversationReservation;
|
|
32
33
|
private consumeTicket;
|
|
@@ -147,6 +147,7 @@ var VoiceRealtimeRuntime = class {
|
|
|
147
147
|
preauthBudget = createPreauthConnectionBudget();
|
|
148
148
|
socketsByPrincipal = /* @__PURE__ */ new Map();
|
|
149
149
|
conversationReservations = /* @__PURE__ */ new Map();
|
|
150
|
+
activeSessions = /* @__PURE__ */ new Map();
|
|
150
151
|
closed = false;
|
|
151
152
|
constructor(options) {
|
|
152
153
|
this.options = options;
|
|
@@ -263,7 +264,9 @@ var VoiceRealtimeRuntime = class {
|
|
|
263
264
|
};
|
|
264
265
|
}
|
|
265
266
|
handleUpgrade(req, socket, head) {
|
|
266
|
-
|
|
267
|
+
const url = new URL(req.url ?? "/", "http://gateway.local");
|
|
268
|
+
const pathAndQuery = `${url.pathname}${url.search}`;
|
|
269
|
+
if (url.pathname !== "/api/voice/realtime/v3/ws" && pathAndQuery !== "/api/realtime/v1/ws?transport=voice-v3") return false;
|
|
267
270
|
if (this.closed || this.wss.clients.size >= MAX_CONNECTIONS) {
|
|
268
271
|
socket.destroy();
|
|
269
272
|
return true;
|
|
@@ -285,12 +288,17 @@ var VoiceRealtimeRuntime = class {
|
|
|
285
288
|
this.pruneTickets(Date.now());
|
|
286
289
|
return this.conversationReservations.has(sessionKey);
|
|
287
290
|
}
|
|
288
|
-
cancelSession(sessionId, ticket, principalId) {
|
|
291
|
+
async cancelSession(sessionId, ticket, principalId) {
|
|
289
292
|
const key = ticketKey(ticket);
|
|
290
293
|
const claim = this.tickets.get(key);
|
|
291
|
-
if (
|
|
292
|
-
|
|
293
|
-
|
|
294
|
+
if (claim && claim.sessionId === sessionId && claim.principalId === principalId) {
|
|
295
|
+
this.tickets.delete(key);
|
|
296
|
+
this.releaseConversationReservation(claim);
|
|
297
|
+
return true;
|
|
298
|
+
}
|
|
299
|
+
const active = this.activeSessions.get(sessionId);
|
|
300
|
+
if (!active || active.principalId !== principalId || active.ticketKey !== key) return false;
|
|
301
|
+
await active.shutdown();
|
|
294
302
|
return true;
|
|
295
303
|
}
|
|
296
304
|
close() {
|
|
@@ -298,6 +306,7 @@ var VoiceRealtimeRuntime = class {
|
|
|
298
306
|
this.closed = true;
|
|
299
307
|
for (const client of this.wss.clients) client.close(1001, "Gateway stopping");
|
|
300
308
|
this.tickets.clear();
|
|
309
|
+
this.activeSessions.clear();
|
|
301
310
|
this.wss.close();
|
|
302
311
|
this.socketsByPrincipal.clear();
|
|
303
312
|
this.conversationReservations.clear();
|
|
@@ -362,6 +371,7 @@ var VoiceRealtimeRuntime = class {
|
|
|
362
371
|
const shutdown = async (reason, notify) => {
|
|
363
372
|
if (closed) return;
|
|
364
373
|
closed = true;
|
|
374
|
+
if (claim && this.activeSessions.get(claim.sessionId)?.socket === socket) this.activeSessions.delete(claim.sessionId);
|
|
365
375
|
unsubscribeMemory?.();
|
|
366
376
|
unsubscribeSession?.();
|
|
367
377
|
clearTimeout(startTimer);
|
|
@@ -418,6 +428,12 @@ var VoiceRealtimeRuntime = class {
|
|
|
418
428
|
return;
|
|
419
429
|
}
|
|
420
430
|
claim = consumed;
|
|
431
|
+
this.activeSessions.set(consumed.sessionId, {
|
|
432
|
+
principalId: consumed.principalId,
|
|
433
|
+
socket,
|
|
434
|
+
ticketKey: ticketKey(message.payload.ticket),
|
|
435
|
+
shutdown: () => shutdown("cancelled", false)
|
|
436
|
+
});
|
|
421
437
|
principalSockets.add(socket);
|
|
422
438
|
this.socketsByPrincipal.set(consumed.principalId, principalSockets);
|
|
423
439
|
clearTimeout(startTimer);
|
|
@@ -6,12 +6,12 @@ import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
|
6
6
|
import { buildSessionKey, init_session_key } from "../routing/session-key.js";
|
|
7
7
|
import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
|
|
8
8
|
import { init_providers, resolveModel } from "../providers/index.js";
|
|
9
|
-
import { isLocalModelBaseUrl } from "../providers/model-call.js";
|
|
10
9
|
import { writeKnowledgeItem } from "../knowledge-memory/repository.js";
|
|
11
10
|
import "../knowledge-memory/index.js";
|
|
12
11
|
import { createPriorityWindow, createUserGoal } from "../user-model/goals.js";
|
|
13
12
|
import { getAssertionSlot, getUserAssertion, linkAssertionEvidence, reconcileAssertion, setAssertionStatus } from "../user-model/repository.js";
|
|
14
13
|
import "../user-model/index.js";
|
|
14
|
+
import { isLocalModelBaseUrl } from "../providers/model-call.js";
|
|
15
15
|
import { allowsRemoteSourceProcessing } from "../user-context/sources/processing-policy.js";
|
|
16
16
|
import { analyzeUnderstandingSources, analyzeWorkContext, workDiscoveryResultMarkdown } from "./analyzer.js";
|
|
17
17
|
import { createUnderstandingSourceRun, getUnderstandingSourceRun, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceGrantPolicies, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
|
|
@@ -10,10 +10,10 @@ import { WorkflowEngine } from "./engine/workflow-engine.js";
|
|
|
10
10
|
import "./engine/index.js";
|
|
11
11
|
import { WorkflowEventStore, createWorkflowEventStore } from "./store/event-store.js";
|
|
12
12
|
import { WorkflowRunStore, createWorkflowRunStore } from "./store/run-store.js";
|
|
13
|
-
import { WorkflowRunService, buildWorkflowRunDefinitionSnapshot, buildWorkflowRunInputEnvelope, buildWorkflowRunMetadata, extractWorkflowRunSessionKey, resolveWorkflowReplayTargets } from "./service/workflow-run-service.js";
|
|
13
|
+
import { WorkflowRunService, buildWorkflowRunDefinitionSnapshot, buildWorkflowRunInputEnvelope, buildWorkflowRunMetadata, extractWorkflowRunSessionKey, preparationDefinition, resolveWorkflowReplayTargets } from "./service/workflow-run-service.js";
|
|
14
14
|
import { runViewToSnapshot } from "./service/run-view-to-snapshot.js";
|
|
15
15
|
import { buildWorkflowRunSessionKey, readWorkflowRunIdFromSessionCustomData } from "./service/workflow-session-key.js";
|
|
16
16
|
import { WORKFLOW_RUN_LINK_CONTEXT_KIND, WORKFLOW_SESSION_TYPE, WorkflowSessionBridge, formatParentRunLinkText } from "./service/workflow-session-bridge.js";
|
|
17
17
|
import "./registry/index.js";
|
|
18
18
|
import { resolveWorkflowRootDir, resolveWorkflowRunArtifactsDir, resolveWorkflowRunDir, resolveWorkflowRunsDir } from "./store/paths.js";
|
|
19
|
-
export { CatalogWorkflowDefinitionRegistry, DEFAULT_WORKFLOW_CONCURRENCY, DEFAULT_WORKFLOW_MAX_SUBAGENTS, DEFAULT_WORKFLOW_TIMEOUT_SEC, GraphWorkflowRuntime, WORKFLOW_RUN_LINK_CONTEXT_KIND, WORKFLOW_SESSION_TYPE, WorkflowEngine, WorkflowEventStore, WorkflowRunService, WorkflowRunStore, WorkflowSessionBridge, buildWorkflowDefinition, buildWorkflowRunDefinitionSnapshot, buildWorkflowRunInputEnvelope, buildWorkflowRunMetadata, buildWorkflowRunSessionKey, createGraphWorkflowRuntime, createWorkflowEventStore, createWorkflowRunStore, deriveWorkflowPhases, extractWorkflowRunSessionKey, formatParentRunLinkText, hashWorkflowStableValue, isTerminalWorkflowRunStatus, normalizeWorkflowDefinitionId, projectWorkflowRunView, readWorkflowRunIdFromSessionCustomData, renderWorkflowTemplate, resolveWorkflowReplayTargets, resolveWorkflowRootDir, resolveWorkflowRunArtifactsDir, resolveWorkflowRunDir, resolveWorkflowRunsDir, runViewToSnapshot, toWorkflowDefinitionTitle, validateWorkflowDefinitionInput, validateWorkflowGraph, validateWorkflowJsonSchema };
|
|
19
|
+
export { CatalogWorkflowDefinitionRegistry, DEFAULT_WORKFLOW_CONCURRENCY, DEFAULT_WORKFLOW_MAX_SUBAGENTS, DEFAULT_WORKFLOW_TIMEOUT_SEC, GraphWorkflowRuntime, WORKFLOW_RUN_LINK_CONTEXT_KIND, WORKFLOW_SESSION_TYPE, WorkflowEngine, WorkflowEventStore, WorkflowRunService, WorkflowRunStore, WorkflowSessionBridge, buildWorkflowDefinition, buildWorkflowRunDefinitionSnapshot, buildWorkflowRunInputEnvelope, buildWorkflowRunMetadata, buildWorkflowRunSessionKey, createGraphWorkflowRuntime, createWorkflowEventStore, createWorkflowRunStore, deriveWorkflowPhases, extractWorkflowRunSessionKey, formatParentRunLinkText, hashWorkflowStableValue, isTerminalWorkflowRunStatus, normalizeWorkflowDefinitionId, preparationDefinition, projectWorkflowRunView, readWorkflowRunIdFromSessionCustomData, renderWorkflowTemplate, resolveWorkflowReplayTargets, resolveWorkflowRootDir, resolveWorkflowRunArtifactsDir, resolveWorkflowRunDir, resolveWorkflowRunsDir, runViewToSnapshot, toWorkflowDefinitionTitle, validateWorkflowDefinitionInput, validateWorkflowGraph, validateWorkflowJsonSchema };
|
|
@@ -37,6 +37,7 @@ export declare class WorkflowRunService {
|
|
|
37
37
|
}
|
|
38
38
|
export declare function buildWorkflowRunInputEnvelope(input: unknown, goal?: string): WorkflowRunInputEnvelope;
|
|
39
39
|
export declare function buildWorkflowRunMetadata(params: {
|
|
40
|
+
preparationOnly?: boolean;
|
|
40
41
|
definition: WorkflowDefinition;
|
|
41
42
|
agentId: string;
|
|
42
43
|
taskRunId?: string;
|
|
@@ -57,3 +58,5 @@ export declare function resolveWorkflowReplayTargets(view: WorkflowRunView, scop
|
|
|
57
58
|
};
|
|
58
59
|
export declare function buildWorkflowRunDefinitionSnapshot(definition: WorkflowDefinition): WorkflowRunDefinitionSnapshot;
|
|
59
60
|
export declare function extractWorkflowRunSessionKey(source: WorkflowRunSource): string | null;
|
|
61
|
+
/** Preparation runs can only transform supplied context into a reviewable result. */
|
|
62
|
+
export declare function preparationDefinition(original: WorkflowDefinition): WorkflowDefinition;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TaskRunRepository } from "../../tasks/task-run-repository.js";
|
|
2
2
|
import { getDefaultAgentId, init_resolve_route } from "../../routing/resolve-route.js";
|
|
3
|
-
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
4
3
|
import { extractProfileAgentId, resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
4
|
+
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
5
5
|
import { TaskRepository } from "../../tasks/task-repository.js";
|
|
6
6
|
import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
|
|
7
7
|
import { getProjectWorkspacePathForSession } from "../../projects/workspace.js";
|
|
@@ -97,13 +97,14 @@ var WorkflowRunService = class {
|
|
|
97
97
|
message: `Workflow "${params.definitionId}" is not allowed for this agent`,
|
|
98
98
|
httpStatus: 409
|
|
99
99
|
};
|
|
100
|
-
|
|
100
|
+
let definition = await this.loadDefinition(params.definitionId);
|
|
101
101
|
if (!definition) return {
|
|
102
102
|
ok: false,
|
|
103
103
|
code: "definition_not_found",
|
|
104
104
|
message: "Workflow definition not found",
|
|
105
105
|
httpStatus: 404
|
|
106
106
|
};
|
|
107
|
+
if (params.preparationOnly) definition = preparationDefinition(definition);
|
|
107
108
|
const connectorPreflight = preflightWorkflowConnectors({
|
|
108
109
|
definition,
|
|
109
110
|
config: this.options.service.currentConfig,
|
|
@@ -174,7 +175,7 @@ var WorkflowRunService = class {
|
|
|
174
175
|
const contextRefs = resolvedContext ? [...resolvedContext.refs, ...passiveContextRefs] : requestedContextRefs;
|
|
175
176
|
let writebackPolicy;
|
|
176
177
|
try {
|
|
177
|
-
writebackPolicy = resolveWorkflowWritebackPolicy(params.writebackPolicy, {
|
|
178
|
+
writebackPolicy = resolveWorkflowWritebackPolicy(params.preparationOnly ? { targets: [] } : params.writebackPolicy, {
|
|
178
179
|
projectId,
|
|
179
180
|
taskId
|
|
180
181
|
});
|
|
@@ -252,6 +253,7 @@ var WorkflowRunService = class {
|
|
|
252
253
|
source,
|
|
253
254
|
metadata: buildWorkflowRunMetadata({
|
|
254
255
|
definition,
|
|
256
|
+
preparationOnly: params.preparationOnly,
|
|
255
257
|
agentId: params.agentId,
|
|
256
258
|
taskRunId: params.taskRunId,
|
|
257
259
|
projectId,
|
|
@@ -299,6 +301,7 @@ var WorkflowRunService = class {
|
|
|
299
301
|
return this.startWorkflowRun({
|
|
300
302
|
agentId: params.agentId,
|
|
301
303
|
definitionId: existing.run.definitionId,
|
|
304
|
+
preparationOnly: existing.run.metadata?.preparationOnly,
|
|
302
305
|
taskRunId: existing.run.metadata?.taskRunId,
|
|
303
306
|
projectId,
|
|
304
307
|
contextRefs: existing.run.metadata?.contextRefs,
|
|
@@ -320,14 +323,18 @@ var WorkflowRunService = class {
|
|
|
320
323
|
message: "Workflow run not found",
|
|
321
324
|
httpStatus: 404
|
|
322
325
|
};
|
|
323
|
-
|
|
326
|
+
let definition = await this.loadDefinition(existing.run.definitionId);
|
|
324
327
|
if (!definition) return {
|
|
325
328
|
ok: false,
|
|
326
329
|
code: "definition_not_found",
|
|
327
330
|
message: "Workflow definition not found",
|
|
328
331
|
httpStatus: 404
|
|
329
332
|
};
|
|
333
|
+
if (existing.run.metadata?.preparationOnly) definition = preparationDefinition(definition);
|
|
330
334
|
const targets = resolveWorkflowReplayTargets(existing, params.scope);
|
|
335
|
+
if (existing.run.metadata?.preparationOnly) {
|
|
336
|
+
for (const target of targets.targets) if (target.invocation) target.invocation.toolset = [];
|
|
337
|
+
}
|
|
331
338
|
if (targets.targets.length === 0) return {
|
|
332
339
|
ok: false,
|
|
333
340
|
code: "invalid_state",
|
|
@@ -412,6 +419,7 @@ var WorkflowRunService = class {
|
|
|
412
419
|
source,
|
|
413
420
|
metadata: buildWorkflowRunMetadata({
|
|
414
421
|
definition,
|
|
422
|
+
preparationOnly: existing.run.metadata?.preparationOnly,
|
|
415
423
|
agentId: params.agentId,
|
|
416
424
|
taskRunId,
|
|
417
425
|
projectId,
|
|
@@ -637,12 +645,13 @@ function buildWorkflowRunMetadata(params) {
|
|
|
637
645
|
taskId,
|
|
638
646
|
source: params.source
|
|
639
647
|
});
|
|
640
|
-
const writebackPolicy = resolveWorkflowWritebackPolicy(params.writebackPolicy, {
|
|
648
|
+
const writebackPolicy = resolveWorkflowWritebackPolicy(params.preparationOnly ? { targets: [] } : params.writebackPolicy, {
|
|
641
649
|
projectId,
|
|
642
650
|
taskId
|
|
643
651
|
});
|
|
644
652
|
return {
|
|
645
653
|
sessionKey: params.sessionKey,
|
|
654
|
+
...params.preparationOnly ? { preparationOnly: true } : {},
|
|
646
655
|
triggerSource: params.source.kind,
|
|
647
656
|
agentId: params.agentId,
|
|
648
657
|
projectId,
|
|
@@ -791,5 +800,17 @@ function isWorkflowRunInputEnvelope(input) {
|
|
|
791
800
|
if (!input || typeof input !== "object" || Array.isArray(input)) return false;
|
|
792
801
|
return "payload" in input || "variables" in input || "context" in input;
|
|
793
802
|
}
|
|
803
|
+
/** Preparation runs can only transform supplied context into a reviewable result. */
|
|
804
|
+
function preparationDefinition(original) {
|
|
805
|
+
const definition = structuredClone(original);
|
|
806
|
+
for (const node of definition.graph.nodes) if (node.kind === "agent") node.config.toolset = [];
|
|
807
|
+
definition.permissions = {
|
|
808
|
+
tools: [],
|
|
809
|
+
network: false,
|
|
810
|
+
fileSystem: "none"
|
|
811
|
+
};
|
|
812
|
+
definition.connectors = [];
|
|
813
|
+
return definition;
|
|
814
|
+
}
|
|
794
815
|
//#endregion
|
|
795
|
-
export { WorkflowRunService, buildWorkflowRunDefinitionSnapshot, buildWorkflowRunInputEnvelope, buildWorkflowRunMetadata, extractWorkflowRunSessionKey, resolveWorkflowReplayTargets };
|
|
816
|
+
export { WorkflowRunService, buildWorkflowRunDefinitionSnapshot, buildWorkflowRunInputEnvelope, buildWorkflowRunMetadata, extractWorkflowRunSessionKey, preparationDefinition, resolveWorkflowReplayTargets };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { WorkflowRunInputEnvelope, WorkflowRunContextRef, WorkflowRunReplayScope, WorkflowRunSource, WorkflowRunWritebackPolicy, WorkflowRunView } from '../domain/index.js';
|
|
2
2
|
export interface StartWorkflowRunServiceParams {
|
|
3
|
+
preparationOnly?: boolean;
|
|
3
4
|
agentId: string;
|
|
4
5
|
definitionId: string;
|
|
5
6
|
taskRunId?: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xopcai/xopc",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.269",
|
|
4
4
|
"description": "Local-first personal AI assistant with reviewable user understanding, durable tasks, workflows, automations, and local or cloud models.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -104,6 +104,7 @@
|
|
|
104
104
|
"thread-stream": "^4.2.0",
|
|
105
105
|
"undici": "^8.9.0",
|
|
106
106
|
"uuid": "^14.0.0",
|
|
107
|
+
"web-push": "^3.6.7",
|
|
107
108
|
"ws": "^8.21.0",
|
|
108
109
|
"zod": "^4.4.3"
|
|
109
110
|
},
|
|
@@ -138,6 +139,7 @@
|
|
|
138
139
|
"@types/markdown-it": "^14.1.2",
|
|
139
140
|
"@types/node": "^25.9.1",
|
|
140
141
|
"@types/qrcode-terminal": "^0.12.2",
|
|
142
|
+
"@types/web-push": "^3.6.4",
|
|
141
143
|
"@types/ws": "^8.18.1",
|
|
142
144
|
"@vitejs/plugin-react-swc": "^4.3.1",
|
|
143
145
|
"cross-env": "^10.1.0",
|