@xopcai/xopc 0.0.110 → 0.0.111
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/README.md +46 -4
- package/README.zh-CN.md +46 -4
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/Combination-BzaXOLd9.js +41 -0
- package/dist/gateway/static/root/assets/agent-avatar-dicebear-zlx9l5Yp.js +1 -0
- package/dist/gateway/static/root/assets/agent-browser-settings-page-B-0zGjt8.js +6 -0
- package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-Bz7JWjRM.js +1 -0
- package/dist/gateway/static/root/assets/agents-DwDnJlXT.js +71 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-DaQwdeCq.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-D2zv6r3P.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-BIppe_jj.js +1 -0
- package/dist/gateway/static/root/assets/archive-plugin-DEmu8eH7.js +1 -0
- package/dist/gateway/static/root/assets/attachment-load-B98lJoN5.js +2 -0
- package/dist/gateway/static/root/assets/{attachment-preview-renderer-CybMSIoS.js → attachment-preview-renderer-DonnL2dL.js} +1 -1
- package/dist/gateway/static/root/assets/binary-plugins-CL9QKmyo.js +2 -0
- package/dist/gateway/static/root/assets/block-editor-BOAhMAhT.js +180 -0
- package/dist/gateway/static/root/assets/channels-settings-Br8iRnXp.js +1 -0
- package/dist/gateway/static/root/assets/cn-JdwAhgNB.js +1 -0
- package/dist/gateway/static/root/assets/code-editor-dZTY2dRW.js +1 -0
- package/dist/gateway/static/root/assets/config-api-0o1WYdz2.js +3 -0
- package/dist/gateway/static/root/assets/connectors-settings-DDvHo9in.js +2 -0
- package/dist/gateway/static/root/assets/cron-api-Dj_UZKST.js +1 -0
- package/dist/gateway/static/root/assets/cron-dreaming-jobs-nCMWCf0p.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-Dv7GII9G.js +1 -0
- package/dist/gateway/static/root/assets/cron-schedule-picker-DH10KgD6.js +1 -0
- package/dist/gateway/static/root/assets/dist-By6Rh2ee.js +1 -0
- package/dist/gateway/static/root/assets/dist-CkobR7mk.js +1 -0
- package/dist/gateway/static/root/assets/dist-DokQNVMQ.js +1 -0
- package/dist/gateway/static/root/assets/dreaming-scene-BHMRVEUS.js +4585 -0
- package/dist/gateway/static/root/assets/dreaming-settings-L2rgZDQl.js +1 -0
- package/dist/gateway/static/root/assets/extension-debug-page-Cjx6pZVz.js +1 -0
- package/dist/gateway/static/root/assets/{extension-page-W1wiG38F.js → extension-page-BSPNL90V.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-m_UQYkVc.js +1 -0
- package/dist/gateway/static/root/assets/fetch-Bs7in_4F.js +1 -0
- package/dist/gateway/static/root/assets/format-interval-label-CftJ5uXu.js +1 -0
- package/dist/gateway/static/root/assets/gateway-config-api-Clfck-hW.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-CS177xni.js +1 -0
- package/dist/gateway/static/root/assets/gateway-startup-retry-BkjVJc38.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-kqJue0sE.js +1 -0
- package/dist/gateway/static/root/assets/goals-page-C0FujUB5.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-CJnzNSDo.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-config-api-Cp7CPuIn.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-ifSI1Wbh.js +1 -0
- package/dist/gateway/static/root/assets/html-workspace-editor-CQLWDiwE.js +1 -0
- package/dist/gateway/static/root/assets/index-COkF54xv.js +121 -0
- package/dist/gateway/static/root/assets/index-DIaSNGEO.css +1 -0
- package/dist/gateway/static/root/assets/interval-presets-B29Ss_2y.js +2 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings--MI1rYl7.js +1 -0
- package/dist/gateway/static/root/assets/locale-store-DjbfSsfA.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-BwrVNlyW.js +2 -0
- package/dist/gateway/static/root/assets/markdown-editor-AssmZFx4.js +2 -0
- package/dist/gateway/static/root/assets/markdown-split-B_oc9lJe.js +1 -0
- package/dist/gateway/static/root/assets/media-plugins-DLPvB5H3.js +1 -0
- package/dist/gateway/static/root/assets/mermaid-render-BbqDc_LQ.js +134 -0
- package/dist/gateway/static/root/assets/messages-Csef1aW7.js +3 -0
- package/dist/gateway/static/root/assets/middleware-Pd0e8Igk.js +1 -0
- package/dist/gateway/static/root/assets/models-hub-panel-DHGiTIvf.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-BM7zlDiT.js +2 -0
- package/dist/gateway/static/root/assets/note-image-lightbox-rSqAgOi9.js +1 -0
- package/dist/gateway/static/root/assets/note-time-hm6JO_Wi.js +1 -0
- package/dist/gateway/static/root/assets/notes-page-C9ACGEty.js +1 -0
- package/dist/gateway/static/root/assets/preview-open-alternatives-Bw_N2oZi.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-BhcWIKuM.js +1 -0
- package/dist/gateway/static/root/assets/save-bar-controls-CNP2jmw0.js +1 -0
- package/dist/gateway/static/root/assets/schedule-field-BPAWui3P.js +1 -0
- package/dist/gateway/static/root/assets/schedule-summary-B-hdSRdR.js +1 -0
- package/dist/gateway/static/root/assets/schema-form-CDPzua9q.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-DzkpSDZr.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BYS-rpzn.js +1 -0
- package/dist/gateway/static/root/assets/settings-collapsible-section-C9bff85B.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-section-BsrK7TBF.js +1 -0
- package/dist/gateway/static/root/assets/settings-page-DWK4Zo7s.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-DJiksNu4.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-DnutoY_S.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-6oRgJMpn.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-CU9i0nJV.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-ERbdWENm.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-qP1JDtDd.js +1 -0
- package/dist/gateway/static/root/assets/theme-store-CD2wtgZV.js +1 -0
- package/dist/gateway/static/root/assets/use-agent-defaults-form-D3FGVLZb.js +1 -0
- package/dist/gateway/static/root/assets/use-blob-object-url-D4BFuzZB.js +1 -0
- package/dist/gateway/static/root/assets/use-channel-catalog-C4mg1hjD.js +1 -0
- package/dist/gateway/static/root/assets/use-settings-tab-guard-F6C0mpJt.js +1 -0
- package/dist/gateway/static/root/assets/vendor-codemirror-CNP1wPe7.js +45 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-BnDDb6qO.js +1 -0
- package/dist/gateway/static/root/assets/voice-player-store-B2EwIhtY.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-page.utils-EYg_xBQS.js → workflow-page.utils-CRB7WX9l.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-2Fptr0je.js +18 -0
- package/dist/gateway/static/root/index.html +12 -10
- package/dist/package.js +1 -1
- package/dist/src/agent/goals/checklist-judge.d.ts +5 -0
- package/dist/src/agent/goals/checklist-judge.js +26 -2
- package/dist/src/agent/goals/checklist-judge.js.map +1 -1
- package/dist/src/agent/goals/evaluate-turn.d.ts +5 -1
- package/dist/src/agent/goals/evaluate-turn.js +29 -3
- package/dist/src/agent/goals/evaluate-turn.js.map +1 -1
- package/dist/src/agent/goals/goal-locale.d.ts +0 -2
- package/dist/src/agent/goals/goal-locale.js +2 -15
- package/dist/src/agent/goals/goal-locale.js.map +1 -1
- package/dist/src/agent/goals/persistent-goal-service.d.ts +9 -0
- package/dist/src/agent/goals/persistent-goal-service.js +2 -1
- package/dist/src/agent/goals/persistent-goal-service.js.map +1 -1
- package/dist/src/agent/goals/post-turn.d.ts +7 -0
- package/dist/src/agent/goals/post-turn.js +68 -23
- package/dist/src/agent/goals/post-turn.js.map +1 -1
- package/dist/src/agent/goals/state.d.ts +0 -5
- package/dist/src/agent/goals/state.js +1 -96
- package/dist/src/agent/goals/state.js.map +1 -1
- package/dist/src/agent/messaging/command-handler.d.ts +4 -0
- package/dist/src/agent/messaging/command-handler.js +6 -2
- package/dist/src/agent/messaging/command-handler.js.map +1 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +2 -0
- package/dist/src/agent/service/direct-turn-helpers.js +3 -2
- package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +10 -1
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service.js +20 -1
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +8 -0
- package/dist/src/agent/tools/cronjob-tool.d.ts +2 -0
- package/dist/src/agent/tools/cronjob-tool.js +27 -4
- package/dist/src/agent/tools/cronjob-tool.js.map +1 -1
- package/dist/src/agent/tools/edit.d.ts +2 -0
- package/dist/src/agent/tools/edit.js +10 -0
- package/dist/src/agent/tools/edit.js.map +1 -1
- package/dist/src/agent/tools/factory.js +16 -3
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/goal-evidence-recorder.d.ts +6 -0
- package/dist/src/agent/tools/goal-evidence-recorder.js +34 -0
- package/dist/src/agent/tools/goal-evidence-recorder.js.map +1 -0
- package/dist/src/agent/tools/goal-tool.d.ts +19 -0
- package/dist/src/agent/tools/goal-tool.js +101 -0
- package/dist/src/agent/tools/goal-tool.js.map +1 -0
- package/dist/src/agent/tools/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +2 -1
- package/dist/src/agent/tools/shell.d.ts +2 -0
- package/dist/src/agent/tools/shell.js +17 -2
- package/dist/src/agent/tools/shell.js.map +1 -1
- package/dist/src/agent/tools/workflow-tool.d.ts +1 -0
- package/dist/src/agent/tools/workflow-tool.js +10 -2
- package/dist/src/agent/tools/workflow-tool.js.map +1 -1
- package/dist/src/agent/tools/write.d.ts +2 -0
- package/dist/src/agent/tools/write.js +11 -0
- package/dist/src/agent/tools/write.js.map +1 -1
- package/dist/src/channels/attachments/inbound-persist.d.ts +7 -0
- package/dist/src/channels/attachments/inbound-persist.js +20 -2
- package/dist/src/channels/attachments/inbound-persist.js.map +1 -1
- package/dist/src/chat-commands/builtins/goal.d.ts +1 -1
- package/dist/src/chat-commands/builtins/goal.js +55 -97
- package/dist/src/chat-commands/builtins/goal.js.map +1 -1
- package/dist/src/chat-commands/builtins/subgoal.d.ts +1 -1
- package/dist/src/chat-commands/builtins/subgoal.js +49 -108
- package/dist/src/chat-commands/builtins/subgoal.js.map +1 -1
- package/dist/src/chat-commands/builtins/workflow.js +132 -8
- package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
- package/dist/src/chat-commands/context.d.ts +3 -0
- package/dist/src/chat-commands/context.js +5 -0
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/chat-commands/types.d.ts +5 -0
- package/dist/src/cli/command-catalog.js +43 -0
- package/dist/src/cli/command-catalog.js.map +1 -1
- package/dist/src/cli/command-loaders.js +1 -0
- package/dist/src/cli/command-loaders.js.map +1 -1
- package/dist/src/cli/command-manifest.js +4 -0
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/goal.d.ts +4 -0
- package/dist/src/cli/commands/goal.js +213 -0
- package/dist/src/cli/commands/goal.js.map +1 -0
- package/dist/src/cli/commands/onboard.js +11 -5
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/schema.d.ts +115 -0
- package/dist/src/config/schema.js +63 -4
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +14 -0
- package/dist/src/config/web-patch.js +45 -6
- package/dist/src/config/web-patch.js.map +1 -1
- package/dist/src/cron/executor.d.ts +2 -0
- package/dist/src/cron/executor.js +25 -0
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/cron/job-content.js +1 -0
- package/dist/src/cron/job-content.js.map +1 -1
- package/dist/src/cron/types.d.ts +19 -1
- package/dist/src/cron/validation.d.ts +20 -0
- package/dist/src/cron/validation.js +7 -0
- package/dist/src/cron/validation.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +14 -0
- package/dist/src/gateway/hono/routes/goals.d.ts +1 -1
- package/dist/src/gateway/hono/routes/goals.js +670 -173
- package/dist/src/gateway/hono/routes/goals.js.map +1 -1
- package/dist/src/gateway/hono/routes/home.d.ts +5 -0
- package/dist/src/gateway/hono/routes/home.js +88 -3
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/notes.js +20 -14
- package/dist/src/gateway/hono/routes/notes.js.map +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +6 -2
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +2 -0
- package/dist/src/gateway/service/agent-runner.js +6 -2
- package/dist/src/gateway/service/agent-runner.js.map +1 -1
- package/dist/src/gateway/service/run-gateway-agent.d.ts +3 -0
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service.d.ts +8 -0
- package/dist/src/gateway/service.js +69 -2
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-notifications.d.ts +29 -0
- package/dist/src/goals/goal-notifications.js +154 -0
- package/dist/src/goals/goal-notifications.js.map +1 -0
- package/dist/src/goals/goal-queue-store.d.ts +16 -0
- package/dist/src/goals/goal-queue-store.js +131 -0
- package/dist/src/goals/goal-queue-store.js.map +1 -0
- package/dist/src/goals/goal-queue-types.d.ts +31 -0
- package/dist/src/goals/goal-queue-types.js +1 -0
- package/dist/src/goals/goal-runner.d.ts +17 -0
- package/dist/src/goals/goal-runner.js +127 -0
- package/dist/src/goals/goal-runner.js.map +1 -0
- package/dist/src/goals/goal-service.d.ts +77 -0
- package/dist/src/goals/goal-service.js +261 -0
- package/dist/src/goals/goal-service.js.map +1 -0
- package/dist/src/goals/goal-store.d.ts +38 -0
- package/dist/src/goals/goal-store.js +404 -0
- package/dist/src/goals/goal-store.js.map +1 -0
- package/dist/src/goals/goal-workflow-judge.d.ts +13 -0
- package/dist/src/goals/goal-workflow-judge.js +147 -0
- package/dist/src/goals/goal-workflow-judge.js.map +1 -0
- package/dist/src/goals/index.d.ts +10 -0
- package/dist/src/goals/index.js +7 -0
- package/dist/src/goals/types.d.ts +119 -0
- package/dist/src/goals/types.js +1 -0
- package/dist/src/storage/sqlite/migrations/006_add_goals.sql +108 -0
- package/dist/src/storage/sqlite/migrations/007_goal_run_judge_schema.sql +4 -0
- package/dist/src/storage/sqlite/migrations/008_goal_queue_workflow_runs.sql +53 -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.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +163 -0
- package/dist/src/utils/logger/stats.d.ts +1 -1
- package/dist/src/workflows/domain/run.d.ts +1 -0
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
- package/dist/src/workflows/service/workflow-run-service.js +5 -1
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -0
- package/dist/src/workflows/service/workflow-session-bridge.js +7 -0
- package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
- package/dist/src/workflows/store/run-index-store.d.ts +8 -0
- package/dist/src/workflows/store/run-index-store.js +58 -0
- package/dist/src/workflows/store/run-index-store.js.map +1 -0
- package/dist/src/workflows/store/run-store.d.ts +2 -0
- package/dist/src/workflows/store/run-store.js +14 -21
- package/dist/src/workflows/store/run-store.js.map +1 -1
- package/package.json +9 -3
- package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +0 -41
- package/dist/gateway/static/root/assets/agents-CFFioJCI.js +0 -78
- package/dist/gateway/static/root/assets/apps-page-BYDmkbzG.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-CsbDaMvd.js +0 -1
- package/dist/gateway/static/root/assets/circle-check-C23XjkUj.js +0 -1
- package/dist/gateway/static/root/assets/copy-Dv6d4Dvw.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-Apk-7p4p.js +0 -1
- package/dist/gateway/static/root/assets/dist-DmGDgpy2.js +0 -1
- package/dist/gateway/static/root/assets/extension-debug-page-pxFC-tUa.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-COXSv6xP.js +0 -1
- package/dist/gateway/static/root/assets/fetch-CFdKBnE6.js +0 -1
- package/dist/gateway/static/root/assets/gateway-startup-retry-DdngdObI.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-DcmAMYmN.js +0 -1
- package/dist/gateway/static/root/assets/index-C_2yKRJX.js +0 -4845
- package/dist/gateway/static/root/assets/index-DI5_GsZt.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-DvTWUOzd.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-CZbdugWZ.js +0 -180
- package/dist/gateway/static/root/assets/note-time-RdyBZxj3.js +0 -1
- package/dist/gateway/static/root/assets/notes-page-mEAwy3e1.js +0 -1
- package/dist/gateway/static/root/assets/schema-form-DEvdni_r.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BsgffzV4.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-t6v8Dwb8.js +0 -2
- package/dist/gateway/static/root/assets/settings-form-section-BoYYZmJG.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-ClIthYF8.js +0 -3
- package/dist/gateway/static/root/assets/share-preview-page-Dd9et7KD.js +0 -2
- package/dist/gateway/static/root/assets/skills-page-DEXtxyfQ.js +0 -2
- package/dist/gateway/static/root/assets/theme-store-BZozwAeK.js +0 -1
- package/dist/gateway/static/root/assets/url-DQRqHuL-.js +0 -3
- package/dist/gateway/static/root/assets/vendor-codemirror-DYoKfS8f.js +0 -45
- package/dist/gateway/static/root/assets/voice-api-key-field-CNrKzQrf.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-EMZkzJNN.js +0 -18
- package/dist/src/agent/goals/checklist-user.d.ts +0 -24
- package/dist/src/agent/goals/checklist-user.js +0 -92
- package/dist/src/agent/goals/checklist-user.js.map +0 -1
- package/dist/src/agent/goals/goal-run-store.d.ts +0 -19
- package/dist/src/agent/goals/goal-run-store.js +0 -138
- package/dist/src/agent/goals/goal-run-store.js.map +0 -1
- package/dist/src/agent/goals/goal-run-types.d.ts +0 -28
- package/dist/src/agent/goals/goal-run-types.js +0 -6
- package/dist/src/agent/goals/goal-run-types.js.map +0 -1
- package/dist/src/agent/goals/patch-from-user-action.d.ts +0 -20
- package/dist/src/agent/goals/patch-from-user-action.js +0 -103
- package/dist/src/agent/goals/patch-from-user-action.js.map +0 -1
- /package/dist/gateway/static/root/assets/{note-detail-page-D4ZIVQbk.css → block-editor-D4ZIVQbk.css} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GoalStore } from "./goal-store.js";
|
|
2
|
+
import { GoalService, normalizeGoalUiLocale } from "./goal-service.js";
|
|
3
|
+
import { GoalQueueStore } from "./goal-queue-store.js";
|
|
4
|
+
import { GoalRunner } from "./goal-runner.js";
|
|
5
|
+
import { GoalNotificationService } from "./goal-notifications.js";
|
|
6
|
+
import { GoalWorkflowJudge } from "./goal-workflow-judge.js";
|
|
7
|
+
export { GoalNotificationService, GoalQueueStore, GoalRunner, GoalService, GoalStore, GoalWorkflowJudge, normalizeGoalUiLocale };
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
export type GoalStatus = 'active' | 'paused' | 'blocked' | 'needs_input' | 'done' | 'archived';
|
|
2
|
+
export type GoalPriority = 'low' | 'normal' | 'high';
|
|
3
|
+
export type GoalSource = 'chat' | 'cli' | 'cron' | 'workflow' | 'channel' | 'api';
|
|
4
|
+
export type GoalUiLocale = 'en' | 'zh';
|
|
5
|
+
export type GoalChecklistStatus = 'pending' | 'completed' | 'impossible';
|
|
6
|
+
export type GoalChecklistAddedBy = 'user' | 'judge';
|
|
7
|
+
export type GoalRunStatus = 'running' | 'succeeded' | 'failed' | 'aborted';
|
|
8
|
+
export type GoalRunVerdict = 'continue' | 'done' | 'blocked' | 'needs_input' | 'decompose';
|
|
9
|
+
export interface Goal {
|
|
10
|
+
id: string;
|
|
11
|
+
title: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
status: GoalStatus;
|
|
14
|
+
agentId: string;
|
|
15
|
+
priority: GoalPriority;
|
|
16
|
+
deadlineAt?: number;
|
|
17
|
+
createdAt: number;
|
|
18
|
+
updatedAt: number;
|
|
19
|
+
completedAt?: number;
|
|
20
|
+
archivedAt?: number;
|
|
21
|
+
activeSessionKey?: string;
|
|
22
|
+
currentRunId?: string;
|
|
23
|
+
nextAction?: string;
|
|
24
|
+
blockedReason?: string;
|
|
25
|
+
judgeModelRef?: string;
|
|
26
|
+
maxTurns: number;
|
|
27
|
+
turnsUsed: number;
|
|
28
|
+
uiLocale?: GoalUiLocale;
|
|
29
|
+
source: GoalSource;
|
|
30
|
+
}
|
|
31
|
+
export interface GoalChecklistItem {
|
|
32
|
+
id: string;
|
|
33
|
+
goalId: string;
|
|
34
|
+
text: string;
|
|
35
|
+
status: GoalChecklistStatus;
|
|
36
|
+
addedBy: GoalChecklistAddedBy;
|
|
37
|
+
addedAt: number;
|
|
38
|
+
completedAt?: number;
|
|
39
|
+
evidenceSummary?: string;
|
|
40
|
+
sortOrder: number;
|
|
41
|
+
}
|
|
42
|
+
export interface GoalRun {
|
|
43
|
+
id: string;
|
|
44
|
+
goalId: string;
|
|
45
|
+
sessionKey: string;
|
|
46
|
+
source: GoalSource;
|
|
47
|
+
status: GoalRunStatus;
|
|
48
|
+
startedAt: number;
|
|
49
|
+
finishedAt?: number;
|
|
50
|
+
verdict?: GoalRunVerdict;
|
|
51
|
+
reason?: string;
|
|
52
|
+
nextAction?: string;
|
|
53
|
+
assistantPreview?: string;
|
|
54
|
+
checklistProgress?: {
|
|
55
|
+
done: number;
|
|
56
|
+
total: number;
|
|
57
|
+
};
|
|
58
|
+
confidence?: number;
|
|
59
|
+
missingEvidence?: string[];
|
|
60
|
+
userQuestion?: string;
|
|
61
|
+
completedChecklistItemIds?: string[];
|
|
62
|
+
}
|
|
63
|
+
export interface GoalEvent {
|
|
64
|
+
id: string;
|
|
65
|
+
goalId: string;
|
|
66
|
+
runId?: string;
|
|
67
|
+
kind: string;
|
|
68
|
+
message: string;
|
|
69
|
+
data?: unknown;
|
|
70
|
+
createdAt: number;
|
|
71
|
+
}
|
|
72
|
+
export interface GoalEvidence {
|
|
73
|
+
id: string;
|
|
74
|
+
goalId: string;
|
|
75
|
+
runId?: string;
|
|
76
|
+
kind: 'file' | 'diff' | 'command' | 'test' | 'link' | 'message' | 'artifact';
|
|
77
|
+
title: string;
|
|
78
|
+
summary?: string;
|
|
79
|
+
uri?: string;
|
|
80
|
+
data?: unknown;
|
|
81
|
+
createdAt: number;
|
|
82
|
+
}
|
|
83
|
+
export interface GoalWithDetails extends Goal {
|
|
84
|
+
checklist: GoalChecklistItem[];
|
|
85
|
+
latestRun?: GoalRun;
|
|
86
|
+
}
|
|
87
|
+
export interface GoalListQuery {
|
|
88
|
+
status?: GoalStatus | GoalStatus[];
|
|
89
|
+
agentId?: string;
|
|
90
|
+
sessionKey?: string;
|
|
91
|
+
limit?: number;
|
|
92
|
+
offset?: number;
|
|
93
|
+
}
|
|
94
|
+
export interface CreateGoalInput {
|
|
95
|
+
title: string;
|
|
96
|
+
description?: string;
|
|
97
|
+
agentId: string;
|
|
98
|
+
sessionKey?: string;
|
|
99
|
+
priority?: GoalPriority;
|
|
100
|
+
deadlineAt?: number;
|
|
101
|
+
judgeModelRef?: string;
|
|
102
|
+
maxTurns: number;
|
|
103
|
+
uiLocale?: GoalUiLocale;
|
|
104
|
+
source?: GoalSource;
|
|
105
|
+
}
|
|
106
|
+
export interface GoalJudgeDecision {
|
|
107
|
+
verdict: GoalRunVerdict;
|
|
108
|
+
reason: string;
|
|
109
|
+
nextAction?: string;
|
|
110
|
+
assistantPreview?: string;
|
|
111
|
+
checklistProgress?: {
|
|
112
|
+
done: number;
|
|
113
|
+
total: number;
|
|
114
|
+
};
|
|
115
|
+
confidence?: number;
|
|
116
|
+
missingEvidence?: string[];
|
|
117
|
+
userQuestion?: string;
|
|
118
|
+
completedChecklistItemIds?: string[];
|
|
119
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS goals (
|
|
2
|
+
goal_id TEXT PRIMARY KEY,
|
|
3
|
+
title TEXT NOT NULL,
|
|
4
|
+
description TEXT,
|
|
5
|
+
status TEXT NOT NULL,
|
|
6
|
+
agent_id TEXT NOT NULL,
|
|
7
|
+
priority TEXT NOT NULL DEFAULT 'normal',
|
|
8
|
+
deadline_at INTEGER,
|
|
9
|
+
created_at INTEGER NOT NULL,
|
|
10
|
+
updated_at INTEGER NOT NULL,
|
|
11
|
+
completed_at INTEGER,
|
|
12
|
+
archived_at INTEGER,
|
|
13
|
+
active_session_key TEXT,
|
|
14
|
+
current_run_id TEXT,
|
|
15
|
+
next_action TEXT,
|
|
16
|
+
blocked_reason TEXT,
|
|
17
|
+
judge_model_ref TEXT,
|
|
18
|
+
max_turns INTEGER NOT NULL,
|
|
19
|
+
turns_used INTEGER NOT NULL DEFAULT 0,
|
|
20
|
+
ui_locale TEXT,
|
|
21
|
+
source TEXT NOT NULL DEFAULT 'chat'
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
CREATE INDEX IF NOT EXISTS idx_goals_status_updated
|
|
25
|
+
ON goals(status, updated_at DESC);
|
|
26
|
+
CREATE INDEX IF NOT EXISTS idx_goals_agent_updated
|
|
27
|
+
ON goals(agent_id, updated_at DESC);
|
|
28
|
+
CREATE INDEX IF NOT EXISTS idx_goals_active_session
|
|
29
|
+
ON goals(active_session_key);
|
|
30
|
+
|
|
31
|
+
CREATE TABLE IF NOT EXISTS goal_checklist_items (
|
|
32
|
+
item_id TEXT PRIMARY KEY,
|
|
33
|
+
goal_id TEXT NOT NULL,
|
|
34
|
+
text TEXT NOT NULL,
|
|
35
|
+
status TEXT NOT NULL,
|
|
36
|
+
added_by TEXT NOT NULL,
|
|
37
|
+
added_at INTEGER NOT NULL,
|
|
38
|
+
completed_at INTEGER,
|
|
39
|
+
evidence_summary TEXT,
|
|
40
|
+
sort_order INTEGER NOT NULL,
|
|
41
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
CREATE INDEX IF NOT EXISTS idx_goal_checklist_goal_order
|
|
45
|
+
ON goal_checklist_items(goal_id, sort_order);
|
|
46
|
+
|
|
47
|
+
CREATE TABLE IF NOT EXISTS goal_runs (
|
|
48
|
+
run_id TEXT PRIMARY KEY,
|
|
49
|
+
goal_id TEXT NOT NULL,
|
|
50
|
+
session_key TEXT NOT NULL,
|
|
51
|
+
source TEXT NOT NULL,
|
|
52
|
+
status TEXT NOT NULL,
|
|
53
|
+
started_at INTEGER NOT NULL,
|
|
54
|
+
finished_at INTEGER,
|
|
55
|
+
verdict TEXT,
|
|
56
|
+
reason TEXT,
|
|
57
|
+
next_action TEXT,
|
|
58
|
+
assistant_preview TEXT,
|
|
59
|
+
checklist_done INTEGER,
|
|
60
|
+
checklist_total INTEGER,
|
|
61
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
CREATE INDEX IF NOT EXISTS idx_goal_runs_goal_started
|
|
65
|
+
ON goal_runs(goal_id, started_at DESC);
|
|
66
|
+
CREATE INDEX IF NOT EXISTS idx_goal_runs_session_started
|
|
67
|
+
ON goal_runs(session_key, started_at DESC);
|
|
68
|
+
|
|
69
|
+
CREATE TABLE IF NOT EXISTS goal_events (
|
|
70
|
+
event_id TEXT PRIMARY KEY,
|
|
71
|
+
goal_id TEXT NOT NULL,
|
|
72
|
+
run_id TEXT,
|
|
73
|
+
kind TEXT NOT NULL,
|
|
74
|
+
message TEXT NOT NULL,
|
|
75
|
+
data_json TEXT,
|
|
76
|
+
created_at INTEGER NOT NULL,
|
|
77
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_goal_events_goal_created
|
|
81
|
+
ON goal_events(goal_id, created_at DESC);
|
|
82
|
+
|
|
83
|
+
CREATE TABLE IF NOT EXISTS goal_evidence (
|
|
84
|
+
evidence_id TEXT PRIMARY KEY,
|
|
85
|
+
goal_id TEXT NOT NULL,
|
|
86
|
+
run_id TEXT,
|
|
87
|
+
kind TEXT NOT NULL,
|
|
88
|
+
title TEXT NOT NULL,
|
|
89
|
+
summary TEXT,
|
|
90
|
+
uri TEXT,
|
|
91
|
+
data_json TEXT,
|
|
92
|
+
created_at INTEGER NOT NULL,
|
|
93
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
CREATE INDEX IF NOT EXISTS idx_goal_evidence_goal_created
|
|
97
|
+
ON goal_evidence(goal_id, created_at DESC);
|
|
98
|
+
|
|
99
|
+
CREATE TABLE IF NOT EXISTS goal_session_links (
|
|
100
|
+
goal_id TEXT NOT NULL,
|
|
101
|
+
session_key TEXT NOT NULL,
|
|
102
|
+
linked_at INTEGER NOT NULL,
|
|
103
|
+
PRIMARY KEY (goal_id, session_key),
|
|
104
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
CREATE INDEX IF NOT EXISTS idx_goal_session_links_session
|
|
108
|
+
ON goal_session_links(session_key, linked_at DESC);
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS goal_queue (
|
|
2
|
+
queue_id TEXT PRIMARY KEY,
|
|
3
|
+
goal_id TEXT NOT NULL,
|
|
4
|
+
status TEXT NOT NULL,
|
|
5
|
+
payload_json TEXT NOT NULL,
|
|
6
|
+
attempts INTEGER NOT NULL,
|
|
7
|
+
max_retries INTEGER NOT NULL,
|
|
8
|
+
enqueued_at INTEGER NOT NULL,
|
|
9
|
+
started_at INTEGER,
|
|
10
|
+
finished_at INTEGER,
|
|
11
|
+
next_run_at INTEGER,
|
|
12
|
+
session_key TEXT,
|
|
13
|
+
last_error TEXT,
|
|
14
|
+
source TEXT NOT NULL,
|
|
15
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
CREATE INDEX IF NOT EXISTS idx_goal_queue_status_next
|
|
19
|
+
ON goal_queue(status, next_run_at, enqueued_at);
|
|
20
|
+
CREATE INDEX IF NOT EXISTS idx_goal_queue_goal_status
|
|
21
|
+
ON goal_queue(goal_id, status);
|
|
22
|
+
CREATE INDEX IF NOT EXISTS idx_goal_queue_enqueued
|
|
23
|
+
ON goal_queue(enqueued_at DESC);
|
|
24
|
+
|
|
25
|
+
CREATE TABLE IF NOT EXISTS workflow_runs (
|
|
26
|
+
run_id TEXT PRIMARY KEY,
|
|
27
|
+
agent_id TEXT NOT NULL,
|
|
28
|
+
definition_id TEXT NOT NULL,
|
|
29
|
+
definition_version TEXT NOT NULL,
|
|
30
|
+
goal_id TEXT,
|
|
31
|
+
session_key TEXT NOT NULL,
|
|
32
|
+
parent_session_key TEXT,
|
|
33
|
+
status TEXT NOT NULL,
|
|
34
|
+
source_kind TEXT NOT NULL,
|
|
35
|
+
source_json TEXT NOT NULL,
|
|
36
|
+
metadata_json TEXT,
|
|
37
|
+
title TEXT NOT NULL,
|
|
38
|
+
created_at_ms INTEGER NOT NULL,
|
|
39
|
+
started_at_ms INTEGER,
|
|
40
|
+
completed_at_ms INTEGER,
|
|
41
|
+
metrics_json TEXT NOT NULL,
|
|
42
|
+
result_preview TEXT,
|
|
43
|
+
error_message TEXT
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_goal_created
|
|
47
|
+
ON workflow_runs(goal_id, created_at_ms DESC);
|
|
48
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_status_created
|
|
49
|
+
ON workflow_runs(agent_id, status, created_at_ms DESC);
|
|
50
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_definition_created
|
|
51
|
+
ON workflow_runs(definition_id, created_at_ms DESC);
|
|
52
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_created
|
|
53
|
+
ON workflow_runs(agent_id, created_at_ms DESC);
|
|
@@ -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 = 3;
|
|
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 = 8;
|
|
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 = 3;
|
|
14
14
|
/** Latest schema version this release supports (increment when adding migrations). */
|
|
15
|
-
const XOPC_DB_SCHEMA_VERSION =
|
|
15
|
+
const XOPC_DB_SCHEMA_VERSION = 8;
|
|
16
16
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
17
17
|
function resolveMigrationsDir(override) {
|
|
18
18
|
if (override) return override;
|
|
@@ -46,7 +46,7 @@ function applySingleMigration(db, migration) {
|
|
|
46
46
|
* Each step runs in its own transaction and updates schema_meta on success.
|
|
47
47
|
*/
|
|
48
48
|
function applyPendingMigrations(db, options = {}) {
|
|
49
|
-
const targetVersion = options.targetVersion ??
|
|
49
|
+
const targetVersion = options.targetVersion ?? 8;
|
|
50
50
|
let currentVersion = readSchemaVersion(db);
|
|
51
51
|
if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
|
|
52
52
|
if (currentVersion >= targetVersion) return currentVersion;
|
|
@@ -62,7 +62,7 @@ function applyPendingMigrations(db, options = {}) {
|
|
|
62
62
|
}
|
|
63
63
|
/** Inspect schema version without mutating the database. */
|
|
64
64
|
function inspectSchemaMigrationStatus(db, options = {}) {
|
|
65
|
-
const appVersion = options.targetVersion ??
|
|
65
|
+
const appVersion = options.targetVersion ?? 8;
|
|
66
66
|
const dbVersion = readSchemaVersion(db);
|
|
67
67
|
if (dbVersion > appVersion) return {
|
|
68
68
|
dbVersion,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","names":[],"sources":["../../../../../src/storage/sqlite/migrations/runner.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport type { DatabaseSync } from 'node:sqlite';\n\nimport { createLogger } from '../../../utils/logger.js';\nimport { readSchemaVersion, setSchemaVersion } from '../schema-version.js';\nimport { discoverSqlMigrations } from './discover.js';\nimport {\n DatabaseSchemaMigrationGapError,\n DatabaseSchemaTooNewError,\n} from './errors.js';\nimport type { ApplyMigrationsOptions, SqlMigration } from './types.js';\n\nconst log = createLogger('Sqlite:Migrations');\n\n/** Baseline schema version applied from schema.sql on first open. */\nexport const XOPC_DB_BASELINE_SCHEMA_VERSION = 3;\n\n/** Latest schema version this release supports (increment when adding migrations). */\nexport const XOPC_DB_SCHEMA_VERSION =
|
|
1
|
+
{"version":3,"file":"runner.js","names":[],"sources":["../../../../../src/storage/sqlite/migrations/runner.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport type { DatabaseSync } from 'node:sqlite';\n\nimport { createLogger } from '../../../utils/logger.js';\nimport { readSchemaVersion, setSchemaVersion } from '../schema-version.js';\nimport { discoverSqlMigrations } from './discover.js';\nimport {\n DatabaseSchemaMigrationGapError,\n DatabaseSchemaTooNewError,\n} from './errors.js';\nimport type { ApplyMigrationsOptions, SqlMigration } from './types.js';\n\nconst log = createLogger('Sqlite:Migrations');\n\n/** Baseline schema version applied from schema.sql on first open. */\nexport const XOPC_DB_BASELINE_SCHEMA_VERSION = 3;\n\n/** Latest schema version this release supports (increment when adding migrations). */\nexport const XOPC_DB_SCHEMA_VERSION = 8;\n\nconst MODULE_DIR = dirname(fileURLToPath(import.meta.url));\n\nexport function resolveMigrationsDir(override?: string): string {\n if (override) {\n return override;\n }\n // Packaged Electron gateway bundle: `out/server/index.js` + `out/server/migrations/`.\n const siblingDir = join(MODULE_DIR, 'migrations');\n if (existsSync(siblingDir)) {\n return siblingDir;\n }\n // Dev / dist: SQL files live next to `migrations/runner.js`.\n return MODULE_DIR;\n}\n\nfunction migrationByTarget(\n migrations: SqlMigration[],\n targetVersion: number,\n): SqlMigration | undefined {\n return migrations.find((migration) => migration.targetVersion === targetVersion);\n}\n\nfunction applySingleMigration(db: DatabaseSync, migration: SqlMigration): void {\n log.info({ targetVersion: migration.targetVersion, file: migration.filename }, 'Applying SQLite migration');\n db.exec('BEGIN IMMEDIATE');\n try {\n db.exec(migration.sql);\n setSchemaVersion(db, migration.targetVersion);\n db.exec('COMMIT');\n } catch (error) {\n try {\n db.exec('ROLLBACK');\n } catch {\n /* preserve original error */\n }\n const em = error instanceof Error ? error.message : String(error);\n throw new Error(\n `SQLite migration to v${migration.targetVersion} (${migration.filename}) failed: ${em}`,\n { cause: error },\n );\n }\n}\n\n/**\n * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.\n * Each step runs in its own transaction and updates schema_meta on success.\n */\nexport function applyPendingMigrations(\n db: DatabaseSync,\n options: ApplyMigrationsOptions = {},\n): number {\n const targetVersion = options.targetVersion ?? XOPC_DB_SCHEMA_VERSION;\n let currentVersion = readSchemaVersion(db);\n\n if (currentVersion > targetVersion) {\n throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);\n }\n\n if (currentVersion >= targetVersion) {\n return currentVersion;\n }\n\n const migrations = discoverSqlMigrations(resolveMigrationsDir(options.migrationsDir));\n\n while (currentVersion < targetVersion) {\n const nextVersion = currentVersion + 1;\n const migration = migrationByTarget(migrations, nextVersion);\n if (!migration) {\n throw new DatabaseSchemaMigrationGapError(currentVersion, targetVersion, nextVersion);\n }\n applySingleMigration(db, migration);\n currentVersion = nextVersion;\n }\n\n return currentVersion;\n}\n\nexport type SchemaMigrationStatus = {\n dbVersion: number;\n appVersion: number;\n pendingVersions: number[];\n isTooNew: boolean;\n hasMigrationGap: boolean;\n missingVersion: number | null;\n};\n\n/** Inspect schema version without mutating the database. */\nexport function inspectSchemaMigrationStatus(\n db: DatabaseSync,\n options: Pick<ApplyMigrationsOptions, 'migrationsDir' | 'targetVersion'> = {},\n): SchemaMigrationStatus {\n const appVersion = options.targetVersion ?? XOPC_DB_SCHEMA_VERSION;\n const dbVersion = readSchemaVersion(db);\n const isTooNew = dbVersion > appVersion;\n\n if (isTooNew) {\n return {\n dbVersion,\n appVersion,\n pendingVersions: [],\n isTooNew: true,\n hasMigrationGap: false,\n missingVersion: null,\n };\n }\n\n const migrations = discoverSqlMigrations(resolveMigrationsDir(options.migrationsDir));\n const pendingVersions: number[] = [];\n let hasMigrationGap = false;\n let missingVersion: number | null = null;\n\n for (let version = dbVersion + 1; version <= appVersion; version++) {\n if (migrationByTarget(migrations, version)) {\n pendingVersions.push(version);\n } else {\n hasMigrationGap = true;\n missingVersion = version;\n break;\n }\n }\n\n return {\n dbVersion,\n appVersion,\n pendingVersions,\n isTooNew: false,\n hasMigrationGap,\n missingVersion,\n };\n}\n"],"mappings":";;;;;;;;;aAMwD;AASxD,MAAM,MAAM,aAAa,oBAAoB;;AAG7C,MAAa,kCAAkC;;AAG/C,MAAa,yBAAyB;AAEtC,MAAM,aAAa,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC;AAE1D,SAAgB,qBAAqB,UAA2B;AAC9D,KAAI,SACF,QAAO;CAGT,MAAM,aAAa,KAAK,YAAY,aAAa;AACjD,KAAI,WAAW,WAAW,CACxB,QAAO;AAGT,QAAO;;AAGT,SAAS,kBACP,YACA,eAC0B;AAC1B,QAAO,WAAW,MAAM,cAAc,UAAU,kBAAkB,cAAc;;AAGlF,SAAS,qBAAqB,IAAkB,WAA+B;AAC7E,KAAI,KAAK;EAAE,eAAe,UAAU;EAAe,MAAM,UAAU;EAAU,EAAE,4BAA4B;AAC3G,IAAG,KAAK,kBAAkB;AAC1B,KAAI;AACF,KAAG,KAAK,UAAU,IAAI;AACtB,mBAAiB,IAAI,UAAU,cAAc;AAC7C,KAAG,KAAK,SAAS;UACV,OAAO;AACd,MAAI;AACF,MAAG,KAAK,WAAW;UACb;EAGR,MAAM,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACjE,QAAM,IAAI,MACR,wBAAwB,UAAU,cAAc,IAAI,UAAU,SAAS,YAAY,MACnF,EAAE,OAAO,OAAO,CACjB;;;;;;;AAQL,SAAgB,uBACd,IACA,UAAkC,EAAE,EAC5B;CACR,MAAM,gBAAgB,QAAQ,iBAAA;CAC9B,IAAI,iBAAiB,kBAAkB,GAAG;AAE1C,KAAI,iBAAiB,cACnB,OAAM,IAAI,0BAA0B,gBAAgB,cAAc;AAGpE,KAAI,kBAAkB,cACpB,QAAO;CAGT,MAAM,aAAa,sBAAsB,qBAAqB,QAAQ,cAAc,CAAC;AAErF,QAAO,iBAAiB,eAAe;EACrC,MAAM,cAAc,iBAAiB;EACrC,MAAM,YAAY,kBAAkB,YAAY,YAAY;AAC5D,MAAI,CAAC,UACH,OAAM,IAAI,gCAAgC,gBAAgB,eAAe,YAAY;AAEvF,uBAAqB,IAAI,UAAU;AACnC,mBAAiB;;AAGnB,QAAO;;;AAaT,SAAgB,6BACd,IACA,UAA2E,EAAE,EACtD;CACvB,MAAM,aAAa,QAAQ,iBAAA;CAC3B,MAAM,YAAY,kBAAkB,GAAG;AAGvC,KAFiB,YAAY,WAG3B,QAAO;EACL;EACA;EACA,iBAAiB,EAAE;EACnB,UAAU;EACV,iBAAiB;EACjB,gBAAgB;EACjB;CAGH,MAAM,aAAa,sBAAsB,qBAAqB,QAAQ,cAAc,CAAC;CACrF,MAAM,kBAA4B,EAAE;CACpC,IAAI,kBAAkB;CACtB,IAAI,iBAAgC;AAEpC,MAAK,IAAI,UAAU,YAAY,GAAG,WAAW,YAAY,UACvD,KAAI,kBAAkB,YAAY,QAAQ,CACxC,iBAAgB,KAAK,QAAQ;MACxB;AACL,oBAAkB;AAClB,mBAAiB;AACjB;;AAIJ,QAAO;EACL;EACA;EACA;EACA,UAAU;EACV;EACA;EACD"}
|
|
@@ -19,7 +19,7 @@ const log = createLogger('Sqlite:Migrations');
|
|
|
19
19
|
export const XOPC_DB_BASELINE_SCHEMA_VERSION = 3;
|
|
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 = 8;
|
|
23
23
|
|
|
24
24
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
25
25
|
|
|
@@ -31,7 +31,7 @@ function ensureXopcDatabaseSchema(db) {
|
|
|
31
31
|
bootstrapFreshDatabase(db);
|
|
32
32
|
currentVersion = 3;
|
|
33
33
|
}
|
|
34
|
-
applyPendingMigrations(db, { targetVersion:
|
|
34
|
+
applyPendingMigrations(db, { targetVersion: 8 });
|
|
35
35
|
}
|
|
36
36
|
//#endregion
|
|
37
37
|
export { SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION, ensureSchemaMetaTable, ensureXopcDatabaseSchema, readSchemaVersion, readSchemaVersionForTest, setSchemaVersion };
|
|
@@ -131,6 +131,36 @@ CREATE INDEX IF NOT EXISTS idx_cron_runs_job_started
|
|
|
131
131
|
CREATE INDEX IF NOT EXISTS idx_cron_runs_started
|
|
132
132
|
ON cron_runs(started_at DESC);
|
|
133
133
|
|
|
134
|
+
CREATE TABLE IF NOT EXISTS workflow_runs (
|
|
135
|
+
run_id TEXT PRIMARY KEY,
|
|
136
|
+
agent_id TEXT NOT NULL,
|
|
137
|
+
definition_id TEXT NOT NULL,
|
|
138
|
+
definition_version TEXT NOT NULL,
|
|
139
|
+
goal_id TEXT,
|
|
140
|
+
session_key TEXT NOT NULL,
|
|
141
|
+
parent_session_key TEXT,
|
|
142
|
+
status TEXT NOT NULL,
|
|
143
|
+
source_kind TEXT NOT NULL,
|
|
144
|
+
source_json TEXT NOT NULL,
|
|
145
|
+
metadata_json TEXT,
|
|
146
|
+
title TEXT NOT NULL,
|
|
147
|
+
created_at_ms INTEGER NOT NULL,
|
|
148
|
+
started_at_ms INTEGER,
|
|
149
|
+
completed_at_ms INTEGER,
|
|
150
|
+
metrics_json TEXT NOT NULL,
|
|
151
|
+
result_preview TEXT,
|
|
152
|
+
error_message TEXT
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_goal_created
|
|
156
|
+
ON workflow_runs(goal_id, created_at_ms DESC);
|
|
157
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_status_created
|
|
158
|
+
ON workflow_runs(agent_id, status, created_at_ms DESC);
|
|
159
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_definition_created
|
|
160
|
+
ON workflow_runs(definition_id, created_at_ms DESC);
|
|
161
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_created
|
|
162
|
+
ON workflow_runs(agent_id, created_at_ms DESC);
|
|
163
|
+
|
|
134
164
|
CREATE TABLE IF NOT EXISTS notes (
|
|
135
165
|
note_id TEXT PRIMARY KEY,
|
|
136
166
|
title TEXT,
|
|
@@ -199,3 +229,136 @@ CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(
|
|
|
199
229
|
end_line UNINDEXED,
|
|
200
230
|
tokenize='unicode61'
|
|
201
231
|
);
|
|
232
|
+
|
|
233
|
+
CREATE TABLE IF NOT EXISTS goals (
|
|
234
|
+
goal_id TEXT PRIMARY KEY,
|
|
235
|
+
title TEXT NOT NULL,
|
|
236
|
+
description TEXT,
|
|
237
|
+
status TEXT NOT NULL,
|
|
238
|
+
agent_id TEXT NOT NULL,
|
|
239
|
+
priority TEXT NOT NULL DEFAULT 'normal',
|
|
240
|
+
deadline_at INTEGER,
|
|
241
|
+
created_at INTEGER NOT NULL,
|
|
242
|
+
updated_at INTEGER NOT NULL,
|
|
243
|
+
completed_at INTEGER,
|
|
244
|
+
archived_at INTEGER,
|
|
245
|
+
active_session_key TEXT,
|
|
246
|
+
current_run_id TEXT,
|
|
247
|
+
next_action TEXT,
|
|
248
|
+
blocked_reason TEXT,
|
|
249
|
+
judge_model_ref TEXT,
|
|
250
|
+
max_turns INTEGER NOT NULL,
|
|
251
|
+
turns_used INTEGER NOT NULL DEFAULT 0,
|
|
252
|
+
ui_locale TEXT,
|
|
253
|
+
source TEXT NOT NULL DEFAULT 'chat'
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
CREATE INDEX IF NOT EXISTS idx_goals_status_updated
|
|
257
|
+
ON goals(status, updated_at DESC);
|
|
258
|
+
CREATE INDEX IF NOT EXISTS idx_goals_agent_updated
|
|
259
|
+
ON goals(agent_id, updated_at DESC);
|
|
260
|
+
CREATE INDEX IF NOT EXISTS idx_goals_active_session
|
|
261
|
+
ON goals(active_session_key);
|
|
262
|
+
|
|
263
|
+
CREATE TABLE IF NOT EXISTS goal_queue (
|
|
264
|
+
queue_id TEXT PRIMARY KEY,
|
|
265
|
+
goal_id TEXT NOT NULL,
|
|
266
|
+
status TEXT NOT NULL,
|
|
267
|
+
payload_json TEXT NOT NULL,
|
|
268
|
+
attempts INTEGER NOT NULL,
|
|
269
|
+
max_retries INTEGER NOT NULL,
|
|
270
|
+
enqueued_at INTEGER NOT NULL,
|
|
271
|
+
started_at INTEGER,
|
|
272
|
+
finished_at INTEGER,
|
|
273
|
+
next_run_at INTEGER,
|
|
274
|
+
session_key TEXT,
|
|
275
|
+
last_error TEXT,
|
|
276
|
+
source TEXT NOT NULL,
|
|
277
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
278
|
+
);
|
|
279
|
+
|
|
280
|
+
CREATE INDEX IF NOT EXISTS idx_goal_queue_status_next
|
|
281
|
+
ON goal_queue(status, next_run_at, enqueued_at);
|
|
282
|
+
CREATE INDEX IF NOT EXISTS idx_goal_queue_goal_status
|
|
283
|
+
ON goal_queue(goal_id, status);
|
|
284
|
+
CREATE INDEX IF NOT EXISTS idx_goal_queue_enqueued
|
|
285
|
+
ON goal_queue(enqueued_at DESC);
|
|
286
|
+
|
|
287
|
+
CREATE TABLE IF NOT EXISTS goal_checklist_items (
|
|
288
|
+
item_id TEXT PRIMARY KEY,
|
|
289
|
+
goal_id TEXT NOT NULL,
|
|
290
|
+
text TEXT NOT NULL,
|
|
291
|
+
status TEXT NOT NULL,
|
|
292
|
+
added_by TEXT NOT NULL,
|
|
293
|
+
added_at INTEGER NOT NULL,
|
|
294
|
+
completed_at INTEGER,
|
|
295
|
+
evidence_summary TEXT,
|
|
296
|
+
sort_order INTEGER NOT NULL,
|
|
297
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
298
|
+
);
|
|
299
|
+
|
|
300
|
+
CREATE INDEX IF NOT EXISTS idx_goal_checklist_goal_order
|
|
301
|
+
ON goal_checklist_items(goal_id, sort_order);
|
|
302
|
+
|
|
303
|
+
CREATE TABLE IF NOT EXISTS goal_runs (
|
|
304
|
+
run_id TEXT PRIMARY KEY,
|
|
305
|
+
goal_id TEXT NOT NULL,
|
|
306
|
+
session_key TEXT NOT NULL,
|
|
307
|
+
source TEXT NOT NULL,
|
|
308
|
+
status TEXT NOT NULL,
|
|
309
|
+
started_at INTEGER NOT NULL,
|
|
310
|
+
finished_at INTEGER,
|
|
311
|
+
verdict TEXT,
|
|
312
|
+
reason TEXT,
|
|
313
|
+
next_action TEXT,
|
|
314
|
+
assistant_preview TEXT,
|
|
315
|
+
checklist_done INTEGER,
|
|
316
|
+
checklist_total INTEGER,
|
|
317
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
318
|
+
);
|
|
319
|
+
|
|
320
|
+
CREATE INDEX IF NOT EXISTS idx_goal_runs_goal_started
|
|
321
|
+
ON goal_runs(goal_id, started_at DESC);
|
|
322
|
+
CREATE INDEX IF NOT EXISTS idx_goal_runs_session_started
|
|
323
|
+
ON goal_runs(session_key, started_at DESC);
|
|
324
|
+
|
|
325
|
+
CREATE TABLE IF NOT EXISTS goal_events (
|
|
326
|
+
event_id TEXT PRIMARY KEY,
|
|
327
|
+
goal_id TEXT NOT NULL,
|
|
328
|
+
run_id TEXT,
|
|
329
|
+
kind TEXT NOT NULL,
|
|
330
|
+
message TEXT NOT NULL,
|
|
331
|
+
data_json TEXT,
|
|
332
|
+
created_at INTEGER NOT NULL,
|
|
333
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
334
|
+
);
|
|
335
|
+
|
|
336
|
+
CREATE INDEX IF NOT EXISTS idx_goal_events_goal_created
|
|
337
|
+
ON goal_events(goal_id, created_at DESC);
|
|
338
|
+
|
|
339
|
+
CREATE TABLE IF NOT EXISTS goal_evidence (
|
|
340
|
+
evidence_id TEXT PRIMARY KEY,
|
|
341
|
+
goal_id TEXT NOT NULL,
|
|
342
|
+
run_id TEXT,
|
|
343
|
+
kind TEXT NOT NULL,
|
|
344
|
+
title TEXT NOT NULL,
|
|
345
|
+
summary TEXT,
|
|
346
|
+
uri TEXT,
|
|
347
|
+
data_json TEXT,
|
|
348
|
+
created_at INTEGER NOT NULL,
|
|
349
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
350
|
+
);
|
|
351
|
+
|
|
352
|
+
CREATE INDEX IF NOT EXISTS idx_goal_evidence_goal_created
|
|
353
|
+
ON goal_evidence(goal_id, created_at DESC);
|
|
354
|
+
|
|
355
|
+
CREATE TABLE IF NOT EXISTS goal_session_links (
|
|
356
|
+
goal_id TEXT NOT NULL,
|
|
357
|
+
session_key TEXT NOT NULL,
|
|
358
|
+
linked_at INTEGER NOT NULL,
|
|
359
|
+
PRIMARY KEY (goal_id, session_key),
|
|
360
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
361
|
+
);
|
|
362
|
+
|
|
363
|
+
CREATE INDEX IF NOT EXISTS idx_goal_session_links_session
|
|
364
|
+
ON goal_session_links(session_key, linked_at DESC);
|
|
@@ -14,11 +14,11 @@ export declare function getRuntimeLogStats(): {
|
|
|
14
14
|
byLevel: {
|
|
15
15
|
error: number;
|
|
16
16
|
debug: number;
|
|
17
|
+
silent: number;
|
|
17
18
|
trace: number;
|
|
18
19
|
info: number;
|
|
19
20
|
warn: number;
|
|
20
21
|
fatal: number;
|
|
21
|
-
silent: number;
|
|
22
22
|
};
|
|
23
23
|
byModule: {
|
|
24
24
|
[k: string]: number;
|
|
@@ -30,6 +30,7 @@ export interface WorkflowRunMetadata {
|
|
|
30
30
|
correlation?: WorkflowRunCorrelation;
|
|
31
31
|
origin?: WorkflowRunOrigin;
|
|
32
32
|
schedule?: WorkflowRunScheduleMetadata;
|
|
33
|
+
goalId?: string;
|
|
33
34
|
}
|
|
34
35
|
export type WorkflowRunReplayScope = 'failed_agents' | 'failed_phases';
|
|
35
36
|
export interface WorkflowRunReplayMetadata {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","names":[],"sources":["../../../../src/workflows/domain/run.ts"],"sourcesContent":["import type { WorkflowDefinitionDefaults, WorkflowDefinitionEstimatedAgents, WorkflowPermissionPolicy, WorkflowResourceRefs } from './definition.js';\nimport type { WorkflowArtifactRef, WorkflowResultEnvelope } from './result.js';\n\nexport type WorkflowRunStatus =\n | 'queued'\n | 'running'\n | 'succeeded'\n | 'failed'\n | 'cancelled'\n | 'timeout';\n\nconst TERMINAL_WORKFLOW_RUN_STATUSES = new Set<WorkflowRunStatus>([\n 'succeeded',\n 'failed',\n 'cancelled',\n 'timeout',\n]);\n\nexport function isTerminalWorkflowRunStatus(status: WorkflowRunStatus): boolean {\n return TERMINAL_WORKFLOW_RUN_STATUSES.has(status);\n}\n\nexport interface WorkflowRun {\n id: string;\n definitionId: string;\n definitionVersion: string;\n title: string;\n goal: string;\n input: unknown;\n status: WorkflowRunStatus;\n source: WorkflowRunSource;\n metadata?: WorkflowRunMetadata;\n result?: WorkflowResultEnvelope;\n error?: WorkflowRunError;\n metrics: WorkflowRunMetrics;\n createdAtMs: number;\n startedAtMs?: number;\n completedAtMs?: number;\n}\n\nexport interface WorkflowRunMetadata {\n sessionKey: string;\n triggerSource: WorkflowRunSource['kind'];\n agentId?: string;\n retryOfRunId?: string;\n replay?: WorkflowRunReplayMetadata;\n definition: WorkflowRunDefinitionSnapshot;\n input?: WorkflowRunInputEnvelope;\n correlation?: WorkflowRunCorrelation;\n origin?: WorkflowRunOrigin;\n schedule?: WorkflowRunScheduleMetadata;\n}\n\nexport type WorkflowRunReplayScope = 'failed_agents' | 'failed_phases';\n\nexport interface WorkflowRunReplayMetadata {\n sourceRunId: string;\n scope: WorkflowRunReplayScope;\n phaseIds?: string[];\n agentIds: string[];\n targetCount: number;\n createdAtMs: number;\n}\n\nexport interface WorkflowRunInputEnvelope {\n payload: unknown;\n goal?: string;\n variables?: Record<string, unknown>;\n context?: Record<string, unknown>;\n}\n\nexport interface WorkflowRunCorrelation {\n idempotencyKey?: string;\n requestId?: string;\n traceId?: string;\n parentRunId?: string;\n}\n\nexport interface WorkflowRunOrigin {\n channel: string;\n sessionKey?: string;\n chatId?: string;\n messageId?: string;\n scheduleId?: string;\n fireId?: string;\n requestId?: string;\n}\n\nexport interface WorkflowRunScheduleMetadata {\n scheduleId: string;\n fireId?: string;\n scheduledAtMs?: number;\n}\n\nexport interface WorkflowRunDefinitionSnapshot {\n id: string;\n name: string;\n title: string;\n version: string;\n contentHash?: string;\n runtimeHash?: string;\n source: 'builtin' | 'user';\n tags: string[];\n phaseCount: number;\n defaults?: WorkflowDefinitionDefaults;\n permissions?: WorkflowPermissionPolicy;\n resources?: WorkflowResourceRefs;\n estimatedAgents?: WorkflowDefinitionEstimatedAgents;\n}\n\nexport type WorkflowRunSource =\n | { kind: 'chat'; sessionKey: string; messageId?: string }\n | { kind: 'webui'; sessionKey?: string; requestId?: string }\n | { kind: 'cron'; scheduleId: string; fireId?: string; scheduledAtMs?: number }\n | { kind: 'api'; requestId?: string; idempotencyKey?: string }\n | { kind: 'im'; channel: string; chatId: string; messageId?: string; userId?: string };\n\nexport interface WorkflowRunMetrics {\n agentCount: number;\n doneAgentCount: number;\n errorAgentCount: number;\n skippedAgentCount: number;\n artifactCount: number;\n durationMs?: number;\n}\n\nexport interface WorkflowRunError {\n code: WorkflowRunErrorCode;\n message: string;\n detail?: string;\n recoverable: boolean;\n}\n\nexport type WorkflowRunErrorCode =\n | 'definition_not_found'\n | 'invalid_input'\n | 'runtime_error'\n | 'timeout'\n | 'cancelled'\n | 'result_validation_failed'\n | 'agent_quota_exceeded';\n\nexport interface WorkflowRunControls {\n canCancel: boolean;\n canRetry: boolean;\n canArchive: boolean;\n}\n\nexport interface WorkflowRunSummary {\n id: string;\n definitionId: string;\n title: string;\n status: WorkflowRunStatus;\n source: WorkflowRunSource;\n metadata?: WorkflowRunMetadata;\n createdAtMs: number;\n startedAtMs?: number;\n completedAtMs?: number;\n metrics: WorkflowRunMetrics;\n}\n\nexport interface WorkflowRunView {\n run: WorkflowRun;\n phases: WorkflowPhaseView[];\n agents: WorkflowAgentView[];\n logs: WorkflowLogEntry[];\n artifacts: WorkflowArtifactRef[];\n timeline: WorkflowTimelineItem[];\n controls: WorkflowRunControls;\n}\n\nexport type WorkflowPhaseStatus = 'pending' | 'running' | 'completed' | 'failed';\n\nexport interface WorkflowPhaseView {\n id: string;\n title: string;\n status: WorkflowPhaseStatus;\n startedAtMs?: number;\n completedAtMs?: number;\n agentIds: string[];\n}\n\nexport type WorkflowAgentStatus = 'queued' | 'running' | 'done' | 'error' | 'skipped';\n\nexport interface WorkflowAgentView {\n id: string;\n label: string;\n phaseId?: string;\n status: WorkflowAgentStatus;\n prompt?: string;\n invocation?: WorkflowAgentInvocationSnapshot;\n sessionKey: string;\n transcriptMessageCount: number;\n currentStep?: string;\n resultPreview?: string;\n error?: string;\n startedAtMs?: number;\n completedAtMs?: number;\n steps: WorkflowAgentStepView[];\n}\n\nexport interface WorkflowAgentInvocationSnapshot {\n prompt: string;\n label: string;\n phase?: string;\n modelRef?: string;\n resolvedModelRef?: string;\n schema?: unknown;\n toolset?: string[];\n maxIterations?: number;\n}\n\nexport type WorkflowAgentStepStatus = 'running' | 'done' | 'error';\n\nexport interface WorkflowAgentStepView {\n id: string;\n label: string;\n kind: 'tool' | 'llm' | 'thinking';\n toolName?: string;\n detail?: string;\n status: WorkflowAgentStepStatus;\n resultPreview?: string;\n error?: string;\n startedAtMs?: number;\n completedAtMs?: number;\n}\n\nexport interface WorkflowLogEntry {\n sequence: number;\n message: string;\n createdAtMs: number;\n}\n\nexport interface WorkflowTimelineItem {\n sequence: number;\n type: string;\n title: string;\n createdAtMs: number;\n}\n"],"mappings":";AAWA,MAAM,iCAAiC,IAAI,IAAuB;CAChE;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,4BAA4B,QAAoC;AAC9E,QAAO,+BAA+B,IAAI,OAAO"}
|
|
1
|
+
{"version":3,"file":"run.js","names":[],"sources":["../../../../src/workflows/domain/run.ts"],"sourcesContent":["import type { WorkflowDefinitionDefaults, WorkflowDefinitionEstimatedAgents, WorkflowPermissionPolicy, WorkflowResourceRefs } from './definition.js';\nimport type { WorkflowArtifactRef, WorkflowResultEnvelope } from './result.js';\n\nexport type WorkflowRunStatus =\n | 'queued'\n | 'running'\n | 'succeeded'\n | 'failed'\n | 'cancelled'\n | 'timeout';\n\nconst TERMINAL_WORKFLOW_RUN_STATUSES = new Set<WorkflowRunStatus>([\n 'succeeded',\n 'failed',\n 'cancelled',\n 'timeout',\n]);\n\nexport function isTerminalWorkflowRunStatus(status: WorkflowRunStatus): boolean {\n return TERMINAL_WORKFLOW_RUN_STATUSES.has(status);\n}\n\nexport interface WorkflowRun {\n id: string;\n definitionId: string;\n definitionVersion: string;\n title: string;\n goal: string;\n input: unknown;\n status: WorkflowRunStatus;\n source: WorkflowRunSource;\n metadata?: WorkflowRunMetadata;\n result?: WorkflowResultEnvelope;\n error?: WorkflowRunError;\n metrics: WorkflowRunMetrics;\n createdAtMs: number;\n startedAtMs?: number;\n completedAtMs?: number;\n}\n\nexport interface WorkflowRunMetadata {\n sessionKey: string;\n triggerSource: WorkflowRunSource['kind'];\n agentId?: string;\n retryOfRunId?: string;\n replay?: WorkflowRunReplayMetadata;\n definition: WorkflowRunDefinitionSnapshot;\n input?: WorkflowRunInputEnvelope;\n correlation?: WorkflowRunCorrelation;\n origin?: WorkflowRunOrigin;\n schedule?: WorkflowRunScheduleMetadata;\n goalId?: string;\n}\n\nexport type WorkflowRunReplayScope = 'failed_agents' | 'failed_phases';\n\nexport interface WorkflowRunReplayMetadata {\n sourceRunId: string;\n scope: WorkflowRunReplayScope;\n phaseIds?: string[];\n agentIds: string[];\n targetCount: number;\n createdAtMs: number;\n}\n\nexport interface WorkflowRunInputEnvelope {\n payload: unknown;\n goal?: string;\n variables?: Record<string, unknown>;\n context?: Record<string, unknown>;\n}\n\nexport interface WorkflowRunCorrelation {\n idempotencyKey?: string;\n requestId?: string;\n traceId?: string;\n parentRunId?: string;\n}\n\nexport interface WorkflowRunOrigin {\n channel: string;\n sessionKey?: string;\n chatId?: string;\n messageId?: string;\n scheduleId?: string;\n fireId?: string;\n requestId?: string;\n}\n\nexport interface WorkflowRunScheduleMetadata {\n scheduleId: string;\n fireId?: string;\n scheduledAtMs?: number;\n}\n\nexport interface WorkflowRunDefinitionSnapshot {\n id: string;\n name: string;\n title: string;\n version: string;\n contentHash?: string;\n runtimeHash?: string;\n source: 'builtin' | 'user';\n tags: string[];\n phaseCount: number;\n defaults?: WorkflowDefinitionDefaults;\n permissions?: WorkflowPermissionPolicy;\n resources?: WorkflowResourceRefs;\n estimatedAgents?: WorkflowDefinitionEstimatedAgents;\n}\n\nexport type WorkflowRunSource =\n | { kind: 'chat'; sessionKey: string; messageId?: string }\n | { kind: 'webui'; sessionKey?: string; requestId?: string }\n | { kind: 'cron'; scheduleId: string; fireId?: string; scheduledAtMs?: number }\n | { kind: 'api'; requestId?: string; idempotencyKey?: string }\n | { kind: 'im'; channel: string; chatId: string; messageId?: string; userId?: string };\n\nexport interface WorkflowRunMetrics {\n agentCount: number;\n doneAgentCount: number;\n errorAgentCount: number;\n skippedAgentCount: number;\n artifactCount: number;\n durationMs?: number;\n}\n\nexport interface WorkflowRunError {\n code: WorkflowRunErrorCode;\n message: string;\n detail?: string;\n recoverable: boolean;\n}\n\nexport type WorkflowRunErrorCode =\n | 'definition_not_found'\n | 'invalid_input'\n | 'runtime_error'\n | 'timeout'\n | 'cancelled'\n | 'result_validation_failed'\n | 'agent_quota_exceeded';\n\nexport interface WorkflowRunControls {\n canCancel: boolean;\n canRetry: boolean;\n canArchive: boolean;\n}\n\nexport interface WorkflowRunSummary {\n id: string;\n definitionId: string;\n title: string;\n status: WorkflowRunStatus;\n source: WorkflowRunSource;\n metadata?: WorkflowRunMetadata;\n createdAtMs: number;\n startedAtMs?: number;\n completedAtMs?: number;\n metrics: WorkflowRunMetrics;\n}\n\nexport interface WorkflowRunView {\n run: WorkflowRun;\n phases: WorkflowPhaseView[];\n agents: WorkflowAgentView[];\n logs: WorkflowLogEntry[];\n artifacts: WorkflowArtifactRef[];\n timeline: WorkflowTimelineItem[];\n controls: WorkflowRunControls;\n}\n\nexport type WorkflowPhaseStatus = 'pending' | 'running' | 'completed' | 'failed';\n\nexport interface WorkflowPhaseView {\n id: string;\n title: string;\n status: WorkflowPhaseStatus;\n startedAtMs?: number;\n completedAtMs?: number;\n agentIds: string[];\n}\n\nexport type WorkflowAgentStatus = 'queued' | 'running' | 'done' | 'error' | 'skipped';\n\nexport interface WorkflowAgentView {\n id: string;\n label: string;\n phaseId?: string;\n status: WorkflowAgentStatus;\n prompt?: string;\n invocation?: WorkflowAgentInvocationSnapshot;\n sessionKey: string;\n transcriptMessageCount: number;\n currentStep?: string;\n resultPreview?: string;\n error?: string;\n startedAtMs?: number;\n completedAtMs?: number;\n steps: WorkflowAgentStepView[];\n}\n\nexport interface WorkflowAgentInvocationSnapshot {\n prompt: string;\n label: string;\n phase?: string;\n modelRef?: string;\n resolvedModelRef?: string;\n schema?: unknown;\n toolset?: string[];\n maxIterations?: number;\n}\n\nexport type WorkflowAgentStepStatus = 'running' | 'done' | 'error';\n\nexport interface WorkflowAgentStepView {\n id: string;\n label: string;\n kind: 'tool' | 'llm' | 'thinking';\n toolName?: string;\n detail?: string;\n status: WorkflowAgentStepStatus;\n resultPreview?: string;\n error?: string;\n startedAtMs?: number;\n completedAtMs?: number;\n}\n\nexport interface WorkflowLogEntry {\n sequence: number;\n message: string;\n createdAtMs: number;\n}\n\nexport interface WorkflowTimelineItem {\n sequence: number;\n type: string;\n title: string;\n createdAtMs: number;\n}\n"],"mappings":";AAWA,MAAM,iCAAiC,IAAI,IAAuB;CAChE;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,4BAA4B,QAAoC;AAC9E,QAAO,+BAA+B,IAAI,OAAO"}
|
|
@@ -36,6 +36,7 @@ export declare function buildWorkflowRunInputEnvelope(input: unknown, goal?: str
|
|
|
36
36
|
export declare function buildWorkflowRunMetadata(params: {
|
|
37
37
|
definition: WorkflowDefinition;
|
|
38
38
|
agentId: string;
|
|
39
|
+
goalId?: string;
|
|
39
40
|
sessionKey: string;
|
|
40
41
|
source: WorkflowRunSource;
|
|
41
42
|
input: WorkflowRunInputEnvelope;
|
|
@@ -81,6 +81,7 @@ var WorkflowRunService = class {
|
|
|
81
81
|
metadata: buildWorkflowRunMetadata({
|
|
82
82
|
definition,
|
|
83
83
|
agentId: params.agentId,
|
|
84
|
+
goalId: params.goalId,
|
|
84
85
|
sessionKey,
|
|
85
86
|
source,
|
|
86
87
|
input: inputEnvelope,
|
|
@@ -188,6 +189,7 @@ var WorkflowRunService = class {
|
|
|
188
189
|
metadata: buildWorkflowRunMetadata({
|
|
189
190
|
definition,
|
|
190
191
|
agentId: params.agentId,
|
|
192
|
+
goalId: existing.run.metadata?.goalId,
|
|
191
193
|
sessionKey,
|
|
192
194
|
source,
|
|
193
195
|
input: inputEnvelope,
|
|
@@ -374,6 +376,7 @@ function buildWorkflowRunInputEnvelope(input, goal) {
|
|
|
374
376
|
};
|
|
375
377
|
}
|
|
376
378
|
function buildWorkflowRunMetadata(params) {
|
|
379
|
+
const goalId = params.goalId?.trim() || void 0;
|
|
377
380
|
return {
|
|
378
381
|
sessionKey: params.sessionKey,
|
|
379
382
|
triggerSource: params.source.kind,
|
|
@@ -387,7 +390,8 @@ function buildWorkflowRunMetadata(params) {
|
|
|
387
390
|
schedule: params.source.kind === "cron" ? {
|
|
388
391
|
scheduleId: params.source.scheduleId,
|
|
389
392
|
fireId: params.source.fireId
|
|
390
|
-
} : void 0
|
|
393
|
+
} : void 0,
|
|
394
|
+
goalId
|
|
391
395
|
};
|
|
392
396
|
}
|
|
393
397
|
function resolveWorkflowReplayTargets(view, scope) {
|