@xopcai/xopc 0.0.110 → 0.0.112
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/feishu/src/outbound/media-load.js +1 -1
- package/dist/extensions/feishu/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
- package/dist/extensions/telegram/src/inbound-processor.js +1 -1
- package/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/src/update-offset-store.js +1 -1
- package/dist/extensions/telegram/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +2 -2
- package/dist/extensions/weixin/src/auth/accounts.js +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/media/data-url.js +1 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
- package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +1 -1
- package/dist/gateway/static/root/apple-touch-icon.png +0 -0
- package/dist/gateway/static/root/assets/Combination-BzaXOLd9.js +41 -0
- package/dist/gateway/static/root/assets/agent-avatar-dicebear-EhRp-ZMa.js +1 -0
- package/dist/gateway/static/root/assets/agent-browser-settings-page-H4foVCiS.js +6 -0
- package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-DDNw2oNU.js +1 -0
- package/dist/gateway/static/root/assets/agents-E_X2kzS1.js +71 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-BIy7KEsM.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-DGQG8NwA.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-BZLvInLr.js +1 -0
- package/dist/gateway/static/root/assets/archive-plugin-uuQPupqx.js +1 -0
- package/dist/gateway/static/root/assets/attachment-load-DBkv0cAv.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-DxxN_VAR.js +2 -0
- package/dist/gateway/static/root/assets/block-editor-CwnUlRmO.js +180 -0
- package/dist/gateway/static/root/assets/channels-settings-BHvUKlzw.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-BD-NcD5d.js +3 -0
- package/dist/gateway/static/root/assets/config-reload-event-Bjh2zoKp.js +1 -0
- package/dist/gateway/static/root/assets/connectors-settings-VBzXcEXL.js +2 -0
- package/dist/gateway/static/root/assets/cron-api-C5DoipZA.js +1 -0
- package/dist/gateway/static/root/assets/cron-dreaming-jobs-nCMWCf0p.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-BLTpdm34.js +3 -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-DSVhXTPq.js +1 -0
- package/dist/gateway/static/root/assets/extension-debug-page-BDHA9o_e.js +1 -0
- package/dist/gateway/static/root/assets/{extension-page-W1wiG38F.js → extension-page-DmDLVSPE.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-1124aHw_.js +1 -0
- package/dist/gateway/static/root/assets/fetch-DOe56Wmy.js +1 -0
- package/dist/gateway/static/root/assets/format-cron-label-BsotZDO5.js +2 -0
- package/dist/gateway/static/root/assets/format-interval-label-tsMSvBSR.js +1 -0
- package/dist/gateway/static/root/assets/gateway-config-api-CsD4FC9D.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-HQ8FBhY2.js +1 -0
- package/dist/gateway/static/root/assets/gateway-startup-retry-C1zg7pH3.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-BG3Onph0.js +1 -0
- package/dist/gateway/static/root/assets/goals-page-DgeKn8zL.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-B5nI6lgz.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-config-api-CIv42nJD.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-DFcVuJ3M.js +1 -0
- package/dist/gateway/static/root/assets/html-workspace-editor-CQLWDiwE.js +1 -0
- package/dist/gateway/static/root/assets/index-5A_ZaABy.css +1 -0
- package/dist/gateway/static/root/assets/index-BTmbp2AU.js +121 -0
- package/dist/gateway/static/root/assets/interval-presets-DGP3S7OB.js +1 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-fETaDYQP.js +1 -0
- package/dist/gateway/static/root/assets/locale-store-DjbfSsfA.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-B1-b27lK.js +2 -0
- package/dist/gateway/static/root/assets/markdown-editor-AssmZFx4.js +2 -0
- package/dist/gateway/static/root/assets/markdown-split-CgeBJMOD.js +1 -0
- package/dist/gateway/static/root/assets/media-plugins-C30GzlV2.js +1 -0
- package/dist/gateway/static/root/assets/mermaid-render-BbqDc_LQ.js +134 -0
- package/dist/gateway/static/root/assets/messages-BUUfPaZ9.js +3 -0
- package/dist/gateway/static/root/assets/middleware-Pd0e8Igk.js +1 -0
- package/dist/gateway/static/root/assets/models-hub-panel-DPcTS1-u.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-xeGb4owe.js +2 -0
- package/dist/gateway/static/root/assets/note-image-lightbox-t1g0qZYh.js +1 -0
- package/dist/gateway/static/root/assets/note-time-hm6JO_Wi.js +1 -0
- package/dist/gateway/static/root/assets/notes-page-C_TdnKBe.js +1 -0
- package/dist/gateway/static/root/assets/preview-open-alternatives-DeWp9x5g.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-BtkPmJIN.js +1 -0
- package/dist/gateway/static/root/assets/save-bar-controls-BOaAOJI3.js +1 -0
- package/dist/gateway/static/root/assets/schedule-field-BLWLKqgw.js +1 -0
- package/dist/gateway/static/root/assets/schema-form-plqRFYT8.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-DOUjxzJm.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-qK_bnTrw.js +1 -0
- package/dist/gateway/static/root/assets/settings-collapsible-section-BP5zRrDI.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-section-Bv8MZplG.js +1 -0
- package/dist/gateway/static/root/assets/settings-page-DmDfE1ww.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-BEFwNcIZ.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-4OX1YCgp.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-CbKmJZot.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-YdtnUHtK.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-DwW1IzQ0.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-CGy4f_s2.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-BMuMvzl_.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-CjGHnDvN.js +1 -0
- package/dist/gateway/static/root/assets/use-settings-tab-guard-BMMFa0oA.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-DnRbhMNq.js +1 -0
- package/dist/gateway/static/root/assets/voice-player-store-D5vzWwls.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-page.utils-EYg_xBQS.js → workflow-page.utils-tjGpRVnw.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-DqqHKGj2.js +18 -0
- package/dist/gateway/static/root/favicon-16x16.png +0 -0
- package/dist/gateway/static/root/favicon-32x32.png +0 -0
- package/dist/gateway/static/root/favicon.ico +0 -0
- package/dist/gateway/static/root/favicon.svg +14 -12
- package/dist/gateway/static/root/index.html +18 -15
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +28 -2
- package/dist/src/agent/agent-manager.js +82 -11
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.js +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/context/workspace-state.js +1 -1
- package/dist/src/agent/context/workspace.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 +3 -16
- 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 +3 -2
- 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 +70 -25
- 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/image/load-image-media.js +2 -2
- package/dist/src/agent/ipc/inbox.js +3 -3
- package/dist/src/agent/ipc/socket.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +1 -1
- package/dist/src/agent/memory/builtin-memory-store.js +1 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
- package/dist/src/agent/memory/dreaming/events.js +1 -1
- package/dist/src/agent/memory/dreaming/last-run.js +1 -1
- package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
- package/dist/src/agent/memory/dreaming/preview.js +1 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
- package/dist/src/agent/memory/dreaming/utils.js +1 -1
- package/dist/src/agent/memory/memory-flush.js +1 -1
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/messaging/command-handler.d.ts +7 -0
- package/dist/src/agent/messaging/command-handler.js +11 -2
- package/dist/src/agent/messaging/command-handler.js.map +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/prompt/memory/index.js +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
- package/dist/src/agent/reply/post-compaction-context.js +1 -1
- package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
- package/dist/src/agent/sandbox/path-policy.js +2 -2
- 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/reconcile-dreaming-cron.js +8 -5
- package/dist/src/agent/service/reconcile-dreaming-cron.js.map +1 -1
- package/dist/src/agent/service.d.ts +2 -1
- package/dist/src/agent/service.js +30 -6
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +12 -0
- package/dist/src/agent/session/session-config-service.d.ts +8 -0
- package/dist/src/agent/session/session-config-service.js +20 -0
- package/dist/src/agent/session/session-config-service.js.map +1 -1
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/skills/config.js +2 -2
- package/dist/src/agent/skills/filesystem-watcher.d.ts +19 -0
- package/dist/src/agent/skills/filesystem-watcher.js +182 -0
- package/dist/src/agent/skills/filesystem-watcher.js.map +1 -0
- package/dist/src/agent/skills/hub-hash.js +2 -2
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +30 -36
- package/dist/src/agent/skills/hub-pull.js.map +1 -1
- package/dist/src/agent/skills/index.js +82 -38
- package/dist/src/agent/skills/index.js.map +1 -1
- package/dist/src/agent/skills/installer.js +2 -2
- package/dist/src/agent/skills/managed-store.d.ts +19 -0
- package/dist/src/agent/skills/managed-store.js +97 -38
- package/dist/src/agent/skills/managed-store.js.map +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/skills/skill-manager.d.ts +16 -6
- package/dist/src/agent/skills/skill-manager.js +79 -24
- package/dist/src/agent/skills/skill-manager.js.map +1 -1
- package/dist/src/agent/skills/skill-view-path.js +1 -1
- package/dist/src/agent/skills/test-framework.js +1 -1
- package/dist/src/agent/skills/types.d.ts +11 -0
- package/dist/src/agent/skills/watcher.js +1 -1
- package/dist/src/agent/starter-agents.js +1 -1
- package/dist/src/agent/tools/cronjob-tool.d.ts +8 -3
- package/dist/src/agent/tools/cronjob-tool.js +82 -24
- package/dist/src/agent/tools/cronjob-tool.js.map +1 -1
- package/dist/src/agent/tools/dreaming-tool.js +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 +17 -4
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/find.js +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/grep.js +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +1 -1
- 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/skill-manage-tool.js +1 -1
- package/dist/src/agent/tools/workflow-tool.d.ts +1 -0
- package/dist/src/agent/tools/workflow-tool.js +11 -3
- 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/agent/workflow/catalog.js +1 -1
- package/dist/src/agent/workspace-runtime/registry.d.ts +5 -0
- package/dist/src/agent/workspace-runtime/registry.js +7 -0
- package/dist/src/agent/workspace-runtime/registry.js.map +1 -1
- package/dist/src/ai-assist/text-assist.d.ts +39 -0
- package/dist/src/ai-assist/text-assist.js +234 -0
- package/dist/src/ai-assist/text-assist.js.map +1 -0
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/profiles/store.js +2 -2
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/browser/cache-dir-policy.js +1 -1
- package/dist/src/browser/cdp-local-launcher.js +2 -2
- package/dist/src/browser/providers/browser-ext-install.js +4 -4
- package/dist/src/browser/providers/cloakbrowser.js +5 -5
- package/dist/src/browser/providers/playwright-doctor.js +1 -1
- package/dist/src/browser/stealth.js +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/channels/outbound/persist-store.js +1 -1
- package/dist/src/channels/pairing/allow-from-file.js +1 -1
- package/dist/src/channels/pairing/pairing-store.js +2 -2
- package/dist/src/chat-commands/agent-edit.js +2 -2
- package/dist/src/chat-commands/builtins/config.js +3 -3
- 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/system.js +11 -4
- package/dist/src/chat-commands/builtins/system.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 +6 -0
- package/dist/src/chat-commands/context.js +12 -0
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/chat-commands/types.d.ts +7 -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/config.js +1 -1
- package/dist/src/cli/commands/cron.js +55 -16
- package/dist/src/cli/commands/cron.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
- package/dist/src/cli/commands/doctor/checks/cron-health.js +2 -83
- package/dist/src/cli/commands/doctor/checks/cron-health.js.map +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/doctor/checks/state-integrity.js +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
- package/dist/src/cli/commands/extension-create.js +1 -1
- package/dist/src/cli/commands/extension-dev.js +2 -2
- package/dist/src/cli/commands/extension-marketplace.js +2 -2
- package/dist/src/cli/commands/extension-pack.js +2 -2
- package/dist/src/cli/commands/extension.js +3 -3
- package/dist/src/cli/commands/gateway/logs.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/image.js +1 -1
- package/dist/src/cli/commands/init.js +2 -2
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/onboard.js +11 -5
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/skills-test.js +1 -1
- package/dist/src/cli/templates.js +1 -1
- package/dist/src/cli/utils/gateway-client.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -2
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/agent-typed-models.js +1 -1
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.js +8 -8
- package/dist/src/config/loader.js +4 -4
- package/dist/src/config/models-json.js +2 -2
- package/dist/src/config/paths-state.js +1 -1
- package/dist/src/config/paths.js +1 -1
- package/dist/src/config/profile.js +1 -1
- package/dist/src/config/reload.js +1 -1
- package/dist/src/config/schema.d.ts +115 -2
- package/dist/src/config/schema.js +63 -7
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +14 -1
- package/dist/src/config/web-patch.js +45 -8
- package/dist/src/config/web-patch.js.map +1 -1
- package/dist/src/config/workspace-path.js +1 -1
- package/dist/src/cron/executor.d.ts +2 -0
- package/dist/src/cron/executor.js +126 -70
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/cron/index.d.ts +1 -1
- package/dist/src/cron/index.js +3 -3
- package/dist/src/cron/job-content.js +1 -0
- package/dist/src/cron/job-content.js.map +1 -1
- package/dist/src/cron/run-log-store.d.ts +1 -0
- package/dist/src/cron/run-log-store.js +4 -2
- package/dist/src/cron/run-log-store.js.map +1 -1
- package/dist/src/cron/schedule.d.ts +10 -0
- package/dist/src/cron/schedule.js +85 -0
- package/dist/src/cron/schedule.js.map +1 -0
- package/dist/src/cron/service.d.ts +34 -77
- package/dist/src/cron/service.js +327 -264
- package/dist/src/cron/service.js.map +1 -1
- package/dist/src/cron/types.d.ts +97 -49
- package/dist/src/cron/validation.d.ts +374 -86
- package/dist/src/cron/validation.js +156 -129
- package/dist/src/cron/validation.js.map +1 -1
- package/dist/src/cron/workflow-run-completion.js +1 -1
- package/dist/src/daemon/constants.js +1 -1
- package/dist/src/daemon/install-plan.js +2 -2
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/schtasks.js +2 -2
- package/dist/src/daemon/systemd.js +2 -2
- package/dist/src/extensions/bundle-mcp.js +1 -1
- package/dist/src/extensions/discover-extensions.js +2 -2
- package/dist/src/extensions/health.js +1 -1
- package/dist/src/extensions/install.js +2 -2
- package/dist/src/extensions/loader.js +2 -2
- package/dist/src/extensions/lockfile.js +3 -3
- package/dist/src/extensions/security.js +1 -1
- package/dist/src/extensions/update.js +2 -2
- package/dist/src/gateway/agents-admin.js +2 -2
- package/dist/src/gateway/chat-stream/mapper.d.ts +1 -0
- package/dist/src/gateway/chat-stream/mapper.js +6 -2
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
- package/dist/src/gateway/chat-stream/protocol.d.ts +2 -0
- package/dist/src/gateway/file-path-classifier.js +2 -2
- package/dist/src/gateway/hono/lib/config-payload.d.ts +14 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/lib/extension-store.js +2 -2
- package/dist/src/gateway/hono/lib/static-ui.js +2 -2
- package/dist/src/gateway/hono/oauth-async.js +1 -1
- package/dist/src/gateway/hono/routes/agents.js +1 -1
- package/dist/src/gateway/hono/routes/ai-assist.d.ts +3 -0
- package/dist/src/gateway/hono/routes/ai-assist.js +66 -0
- package/dist/src/gateway/hono/routes/ai-assist.js.map +1 -0
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/commands-skills.js +7 -0
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
- package/dist/src/gateway/hono/routes/cron.js +24 -5
- package/dist/src/gateway/hono/routes/cron.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +1 -1
- 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 +90 -3
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/host-fs.js +2 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/models.js +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/shares.js +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +8 -4
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +2 -2
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/lock.js +3 -3
- package/dist/src/gateway/ports.js +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +2 -0
- package/dist/src/gateway/service/agent-runner.js +8 -4
- package/dist/src/gateway/service/agent-runner.js.map +1 -1
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +22 -10
- package/dist/src/gateway/service/marketplace-service.js +46 -5
- package/dist/src/gateway/service/marketplace-service.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 +79 -6
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +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/i18n/goals-bundle.js +1 -1
- package/dist/src/i18n/index.js +1 -1
- package/dist/src/i18n/share-tool-bundle.js +2 -2
- package/dist/src/infra/brew.js +1 -1
- package/dist/src/infra/package-json.js +1 -1
- package/dist/src/infra/package-update-steps.js +1 -1
- package/dist/src/infra/path-env.js +2 -2
- package/dist/src/infra/restart.js +1 -1
- package/dist/src/infra/stable-node-path.js +1 -1
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/infra/update-global.js +1 -1
- package/dist/src/infra/update-lock.js +2 -2
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/infra/update-runner.js +1 -1
- package/dist/src/infra/update-startup.js +1 -1
- package/dist/src/infra/write-file-atomic.js +2 -2
- package/dist/src/media/store.js +1 -1
- package/dist/src/notes/agent-context.js +1 -1
- package/dist/src/notes/service.js +1 -1
- package/dist/src/notes/store.js +2 -2
- package/dist/src/project-trust/trust-store.js +2 -2
- package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
- package/dist/src/providers/index.js +1 -1
- package/dist/src/providers/model-registry.js +4 -4
- package/dist/src/session/init-session-turn.js +2 -2
- package/dist/src/session/resolve-session.js +3 -3
- package/dist/src/session/session-title.js +2 -2
- package/dist/src/session/store.js +1 -1
- package/dist/src/share/share-auto.js +2 -2
- package/dist/src/share/share-store.js +3 -3
- package/dist/src/share/share-thumbnail.js +2 -2
- package/dist/src/share/share-zip.js +1 -1
- package/dist/src/share/site-share-store.js +3 -3
- package/dist/src/share/site-static-serve.js +1 -1
- package/dist/src/storage/sqlite/connection.js +1 -1
- package/dist/src/storage/sqlite/cron-job-repository.d.ts +6 -0
- package/dist/src/storage/sqlite/cron-job-repository.js +70 -0
- package/dist/src/storage/sqlite/cron-job-repository.js.map +1 -0
- package/dist/src/storage/sqlite/cron-run-repository.js +0 -1
- package/dist/src/storage/sqlite/cron-run-repository.js.map +1 -1
- package/dist/src/storage/sqlite/index.d.ts +1 -0
- package/dist/src/storage/sqlite/index.js +2 -1
- package/dist/src/storage/sqlite/memory-index-repository.js +2 -2
- 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/009_cron_jobs.sql +24 -0
- package/dist/src/storage/sqlite/migrations/discover.js +1 -1
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +4 -4
- 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 +2 -2
- package/dist/src/storage/sqlite/schema.sql +188 -0
- package/dist/src/tui/clipboard-image.js +3 -3
- package/dist/src/tui/extension-host/load-extensions.js +1 -1
- package/dist/src/tui/theme-manager.js +1 -1
- package/dist/src/tui/tui-command-formatters.js +4 -4
- package/dist/src/tui/tui-commands.js +2 -2
- package/dist/src/tui/tui-keybindings-file.js +1 -1
- package/dist/src/tui/tui-scoped-models.js +2 -2
- package/dist/src/tui/tui-settings.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +6 -6
- package/dist/src/tunnel/frpc-binary.js +4 -4
- package/dist/src/tunnel/frpc-config.js +1 -1
- package/dist/src/tunnel/frpc-extract.js +1 -1
- package/dist/src/tunnel/tunnel-state.js +1 -1
- package/dist/src/utils/logger/audit.js +1 -1
- package/dist/src/utils/logger/log-store.js +1 -1
- package/dist/src/utils/logger/rotation.js +1 -1
- package/dist/src/utils/logger/stats.d.ts +1 -1
- package/dist/src/utils/logger/streams.js +1 -1
- package/dist/src/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +2 -2
- package/dist/src/workflows/domain/run.d.ts +1 -0
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
- package/dist/src/workflows/engine/projector.js +23 -14
- package/dist/src/workflows/engine/projector.js.map +1 -1
- package/dist/src/workflows/engine/workflow-engine.d.ts +1 -0
- package/dist/src/workflows/engine/workflow-engine.js +36 -0
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/index.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
- package/dist/src/workflows/service/workflow-run-service.js +7 -3
- 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 +8 -1
- package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
- package/dist/src/workflows/store/event-store.js +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 +15 -22
- package/dist/src/workflows/store/run-store.js.map +1 -1
- package/package.json +10 -5
- 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/gateway/static/root/favicon-16.png +0 -0
- package/dist/gateway/static/root/favicon-32.png +0 -0
- 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/src/cron/persistence.d.ts +0 -62
- package/dist/src/cron/persistence.js +0 -188
- package/dist/src/cron/persistence.js.map +0 -1
- /package/dist/gateway/static/root/assets/{note-detail-page-D4ZIVQbk.css → block-editor-D4ZIVQbk.css} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-job-repository.js","names":[],"sources":["../../../../src/storage/sqlite/cron-job-repository.ts"],"sourcesContent":["import type { JobData } from '../../cron/types.js';\nimport { JobDataSchema } from '../../cron/validation.js';\nimport { getSqliteDatabase, runSqliteWriteTransaction } from './transaction.js';\n\ntype CronJobRow = {\n job_id: string;\n name: string;\n description: string | null;\n enabled: number;\n delete_after_run: number | null;\n created_at_ms: number;\n updated_at_ms: number;\n schedule_json: string;\n session_target: string;\n wake_mode: string;\n agent_id: string | null;\n session_key: string | null;\n working_directory: string | null;\n payload_json: string;\n delivery_json: string | null;\n failure_alert_json: string | null;\n state_json: string;\n};\n\nfunction parseJson(value: string | null): unknown {\n if (!value) return undefined;\n return JSON.parse(value);\n}\n\nfunction rowToCronJob(row: CronJobRow): JobData {\n const parsed = JobDataSchema.parse({\n id: row.job_id,\n name: row.name,\n description: row.description ?? undefined,\n enabled: row.enabled !== 0,\n deleteAfterRun: row.delete_after_run == null ? undefined : row.delete_after_run !== 0,\n createdAtMs: row.created_at_ms,\n updatedAtMs: row.updated_at_ms,\n schedule: parseJson(row.schedule_json),\n sessionTarget: row.session_target,\n wakeMode: row.wake_mode,\n agentId: row.agent_id ?? undefined,\n sessionKey: row.session_key ?? undefined,\n workingDirectory: row.working_directory ?? undefined,\n payload: parseJson(row.payload_json),\n delivery: parseJson(row.delivery_json),\n failureAlert: parseJson(row.failure_alert_json),\n state: parseJson(row.state_json) ?? {},\n });\n return parsed as JobData;\n}\n\nfunction bindJson(value: unknown): string | null {\n return value === undefined ? null : JSON.stringify(value);\n}\n\nfunction upsertJob(db: ReturnType<typeof getSqliteDatabase>, job: JobData): void {\n db.prepare(\n `INSERT OR REPLACE INTO cron_jobs (\n job_id, name, description, enabled, delete_after_run, created_at_ms, updated_at_ms,\n schedule_json, session_target, wake_mode, agent_id, session_key, working_directory,\n payload_json, delivery_json, failure_alert_json, state_json\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n job.id,\n job.name,\n job.description ?? null,\n job.enabled ? 1 : 0,\n job.deleteAfterRun == null ? null : job.deleteAfterRun ? 1 : 0,\n job.createdAtMs,\n job.updatedAtMs,\n JSON.stringify(job.schedule),\n job.sessionTarget,\n job.wakeMode,\n job.agentId ?? null,\n job.sessionKey ?? null,\n job.workingDirectory ?? null,\n JSON.stringify(job.payload),\n bindJson(job.delivery),\n bindJson(job.failureAlert),\n JSON.stringify(job.state ?? {}),\n );\n}\n\nexport function listCronJobs(): JobData[] {\n const rows = getSqliteDatabase()\n .prepare(\n `SELECT job_id, name, description, enabled, delete_after_run, created_at_ms, updated_at_ms,\n schedule_json, session_target, wake_mode, agent_id, session_key, working_directory,\n payload_json, delivery_json, failure_alert_json, state_json\n FROM cron_jobs\n ORDER BY created_at_ms DESC`,\n )\n .all() as CronJobRow[];\n return rows.map(rowToCronJob);\n}\n\nexport function getCronJob(jobId: string): JobData | null {\n const row = getSqliteDatabase()\n .prepare(\n `SELECT job_id, name, description, enabled, delete_after_run, created_at_ms, updated_at_ms,\n schedule_json, session_target, wake_mode, agent_id, session_key, working_directory,\n payload_json, delivery_json, failure_alert_json, state_json\n FROM cron_jobs\n WHERE job_id = ?`,\n )\n .get(jobId) as CronJobRow | undefined;\n return row ? rowToCronJob(row) : null;\n}\n\nexport function saveCronJob(job: JobData): void {\n runSqliteWriteTransaction((db) => upsertJob(db, job));\n}\n\nexport function saveCronJobs(jobs: JobData[]): void {\n runSqliteWriteTransaction((db) => {\n for (const job of jobs) upsertJob(db, job);\n });\n}\n\nexport function deleteCronJob(jobId: string): boolean {\n return runSqliteWriteTransaction((db) => {\n const result = db.prepare(`DELETE FROM cron_jobs WHERE job_id = ?`).run(jobId);\n return result.changes > 0;\n });\n}\n"],"mappings":";;;AAwBA,SAAS,UAAU,OAA+B;AAChD,KAAI,CAAC,MAAO,QAAO,KAAA;AACnB,QAAO,KAAK,MAAM,MAAM;;AAG1B,SAAS,aAAa,KAA0B;AAoB9C,QAnBe,cAAc,MAAM;EACjC,IAAI,IAAI;EACR,MAAM,IAAI;EACV,aAAa,IAAI,eAAe,KAAA;EAChC,SAAS,IAAI,YAAY;EACzB,gBAAgB,IAAI,oBAAoB,OAAO,KAAA,IAAY,IAAI,qBAAqB;EACpF,aAAa,IAAI;EACjB,aAAa,IAAI;EACjB,UAAU,UAAU,IAAI,cAAc;EACtC,eAAe,IAAI;EACnB,UAAU,IAAI;EACd,SAAS,IAAI,YAAY,KAAA;EACzB,YAAY,IAAI,eAAe,KAAA;EAC/B,kBAAkB,IAAI,qBAAqB,KAAA;EAC3C,SAAS,UAAU,IAAI,aAAa;EACpC,UAAU,UAAU,IAAI,cAAc;EACtC,cAAc,UAAU,IAAI,mBAAmB;EAC/C,OAAO,UAAU,IAAI,WAAW,IAAI,EAAE;EACvC,CACY;;AAGf,SAAS,SAAS,OAA+B;AAC/C,QAAO,UAAU,KAAA,IAAY,OAAO,KAAK,UAAU,MAAM;;AAG3D,SAAS,UAAU,IAA0C,KAAoB;AAC/E,IAAG,QACD;;;;kEAKD,CAAC,IACA,IAAI,IACJ,IAAI,MACJ,IAAI,eAAe,MACnB,IAAI,UAAU,IAAI,GAClB,IAAI,kBAAkB,OAAO,OAAO,IAAI,iBAAiB,IAAI,GAC7D,IAAI,aACJ,IAAI,aACJ,KAAK,UAAU,IAAI,SAAS,EAC5B,IAAI,eACJ,IAAI,UACJ,IAAI,WAAW,MACf,IAAI,cAAc,MAClB,IAAI,oBAAoB,MACxB,KAAK,UAAU,IAAI,QAAQ,EAC3B,SAAS,IAAI,SAAS,EACtB,SAAS,IAAI,aAAa,EAC1B,KAAK,UAAU,IAAI,SAAS,EAAE,CAAC,CAChC;;AAGH,SAAgB,eAA0B;AAUxC,QATa,mBAAmB,CAC7B,QACC;;;;oCAKD,CACA,KACQ,CAAC,IAAI,aAAa;;AAG/B,SAAgB,WAAW,OAA+B;CACxD,MAAM,MAAM,mBAAmB,CAC5B,QACC;;;;yBAKD,CACA,IAAI,MAAM;AACb,QAAO,MAAM,aAAa,IAAI,GAAG;;AAGnC,SAAgB,YAAY,KAAoB;AAC9C,4BAA2B,OAAO,UAAU,IAAI,IAAI,CAAC;;AAGvD,SAAgB,aAAa,MAAuB;AAClD,4BAA2B,OAAO;AAChC,OAAK,MAAM,OAAO,KAAM,WAAU,IAAI,IAAI;GAC1C;;AAGJ,SAAgB,cAAc,OAAwB;AACpD,QAAO,2BAA2B,OAAO;AAEvC,SADe,GAAG,QAAQ,yCAAyC,CAAC,IAAI,MAC3D,CAAC,UAAU;GACxB"}
|
|
@@ -56,7 +56,6 @@ function trimJobRuns(db, jobId) {
|
|
|
56
56
|
)`).run(jobId, excess);
|
|
57
57
|
}
|
|
58
58
|
function appendCronRun(execution) {
|
|
59
|
-
if (execution.status === "running") return;
|
|
60
59
|
const row = executionToInsert(execution);
|
|
61
60
|
runSqliteWriteTransaction((db) => {
|
|
62
61
|
db.prepare(`INSERT OR REPLACE INTO cron_runs (
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron-run-repository.js","names":[],"sources":["../../../../src/storage/sqlite/cron-run-repository.ts"],"sourcesContent":["import type { JobExecution } from '../../cron/execution-types.js';\nimport { getSqliteDatabase, runSqliteWriteTransaction } from './transaction.js';\n\nconst MAX_RUNS_PER_JOB = 2000;\nconst TRIM_TO_RUNS = 1500;\n\ntype CronRunRow = {\n run_id: string;\n job_id: string;\n status: string;\n started_at: number;\n ended_at: number | null;\n duration_ms: number | null;\n error: string | null;\n output: string | null;\n retry_count: number;\n summary: string | null;\n session_id: string | null;\n session_key: string | null;\n session_type: string | null;\n model: string | null;\n provider: string | null;\n usage_json: string | null;\n workflow_run_id: string | null;\n};\n\nfunction rowToExecution(row: CronRunRow): JobExecution {\n return {\n id: row.run_id,\n jobId: row.job_id,\n status: row.status as JobExecution['status'],\n startedAt: new Date(row.started_at).toISOString(),\n endedAt: row.ended_at != null ? new Date(row.ended_at).toISOString() : undefined,\n duration: row.duration_ms ?? undefined,\n error: row.error ?? undefined,\n output: row.output ?? undefined,\n retryCount: row.retry_count,\n summary: row.summary ?? undefined,\n sessionId: row.session_id ?? undefined,\n sessionKey: row.session_key ?? undefined,\n sessionType: row.session_type ?? undefined,\n model: row.model ?? undefined,\n provider: row.provider ?? undefined,\n usage: row.usage_json ? (JSON.parse(row.usage_json) as JobExecution['usage']) : undefined,\n workflowRunId: row.workflow_run_id ?? undefined,\n };\n}\n\nfunction executionToInsert(execution: JobExecution): CronRunRow {\n const startedAt = Date.parse(execution.startedAt);\n const endedAt = execution.endedAt ? Date.parse(execution.endedAt) : null;\n return {\n run_id: execution.id,\n job_id: execution.jobId,\n status: execution.status,\n started_at: startedAt,\n ended_at: endedAt,\n duration_ms: execution.duration ?? null,\n error: execution.error ?? null,\n output: execution.output ?? null,\n retry_count: execution.retryCount,\n summary: execution.summary ?? null,\n session_id: execution.sessionId ?? null,\n session_key: execution.sessionKey ?? null,\n session_type: execution.sessionType ?? null,\n model: execution.model ?? null,\n provider: execution.provider ?? null,\n usage_json: execution.usage ? JSON.stringify(execution.usage) : null,\n workflow_run_id: execution.workflowRunId ?? null,\n };\n}\n\nfunction trimJobRuns(db: ReturnType<typeof getSqliteDatabase>, jobId: string): void {\n const countRow = db\n .prepare(`SELECT COUNT(*) AS count FROM cron_runs WHERE job_id = ?`)\n .get(jobId) as { count: number };\n if (countRow.count <= MAX_RUNS_PER_JOB) {\n return;\n }\n const excess = countRow.count - TRIM_TO_RUNS;\n db.prepare(\n `DELETE FROM cron_runs WHERE run_id IN (\n SELECT run_id FROM cron_runs WHERE job_id = ?\n ORDER BY started_at ASC LIMIT ?\n )`,\n ).run(jobId, excess);\n}\n\nexport function appendCronRun(execution: JobExecution): void {\n
|
|
1
|
+
{"version":3,"file":"cron-run-repository.js","names":[],"sources":["../../../../src/storage/sqlite/cron-run-repository.ts"],"sourcesContent":["import type { JobExecution } from '../../cron/execution-types.js';\nimport { getSqliteDatabase, runSqliteWriteTransaction } from './transaction.js';\n\nconst MAX_RUNS_PER_JOB = 2000;\nconst TRIM_TO_RUNS = 1500;\n\ntype CronRunRow = {\n run_id: string;\n job_id: string;\n status: string;\n started_at: number;\n ended_at: number | null;\n duration_ms: number | null;\n error: string | null;\n output: string | null;\n retry_count: number;\n summary: string | null;\n session_id: string | null;\n session_key: string | null;\n session_type: string | null;\n model: string | null;\n provider: string | null;\n usage_json: string | null;\n workflow_run_id: string | null;\n};\n\nfunction rowToExecution(row: CronRunRow): JobExecution {\n return {\n id: row.run_id,\n jobId: row.job_id,\n status: row.status as JobExecution['status'],\n startedAt: new Date(row.started_at).toISOString(),\n endedAt: row.ended_at != null ? new Date(row.ended_at).toISOString() : undefined,\n duration: row.duration_ms ?? undefined,\n error: row.error ?? undefined,\n output: row.output ?? undefined,\n retryCount: row.retry_count,\n summary: row.summary ?? undefined,\n sessionId: row.session_id ?? undefined,\n sessionKey: row.session_key ?? undefined,\n sessionType: row.session_type ?? undefined,\n model: row.model ?? undefined,\n provider: row.provider ?? undefined,\n usage: row.usage_json ? (JSON.parse(row.usage_json) as JobExecution['usage']) : undefined,\n workflowRunId: row.workflow_run_id ?? undefined,\n };\n}\n\nfunction executionToInsert(execution: JobExecution): CronRunRow {\n const startedAt = Date.parse(execution.startedAt);\n const endedAt = execution.endedAt ? Date.parse(execution.endedAt) : null;\n return {\n run_id: execution.id,\n job_id: execution.jobId,\n status: execution.status,\n started_at: startedAt,\n ended_at: endedAt,\n duration_ms: execution.duration ?? null,\n error: execution.error ?? null,\n output: execution.output ?? null,\n retry_count: execution.retryCount,\n summary: execution.summary ?? null,\n session_id: execution.sessionId ?? null,\n session_key: execution.sessionKey ?? null,\n session_type: execution.sessionType ?? null,\n model: execution.model ?? null,\n provider: execution.provider ?? null,\n usage_json: execution.usage ? JSON.stringify(execution.usage) : null,\n workflow_run_id: execution.workflowRunId ?? null,\n };\n}\n\nfunction trimJobRuns(db: ReturnType<typeof getSqliteDatabase>, jobId: string): void {\n const countRow = db\n .prepare(`SELECT COUNT(*) AS count FROM cron_runs WHERE job_id = ?`)\n .get(jobId) as { count: number };\n if (countRow.count <= MAX_RUNS_PER_JOB) {\n return;\n }\n const excess = countRow.count - TRIM_TO_RUNS;\n db.prepare(\n `DELETE FROM cron_runs WHERE run_id IN (\n SELECT run_id FROM cron_runs WHERE job_id = ?\n ORDER BY started_at ASC LIMIT ?\n )`,\n ).run(jobId, excess);\n}\n\nexport function appendCronRun(execution: JobExecution): void {\n const row = executionToInsert(execution);\n runSqliteWriteTransaction((db) => {\n db.prepare(\n `INSERT OR REPLACE INTO cron_runs (\n run_id, job_id, status, started_at, ended_at, duration_ms,\n error, output, retry_count, summary, session_id, session_key,\n session_type, model, provider, usage_json, workflow_run_id\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n row.run_id,\n row.job_id,\n row.status,\n row.started_at,\n row.ended_at,\n row.duration_ms,\n row.error,\n row.output,\n row.retry_count,\n row.summary,\n row.session_id,\n row.session_key,\n row.session_type,\n row.model,\n row.provider,\n row.usage_json,\n row.workflow_run_id,\n );\n trimJobRuns(db, row.job_id);\n });\n}\n\nexport function readCronJobHistory(jobId: string, limit: number): JobExecution[] {\n if (limit <= 0) {\n return [];\n }\n const db = getSqliteDatabase();\n const rows = db\n .prepare(\n `SELECT run_id, job_id, status, started_at, ended_at, duration_ms,\n error, output, retry_count, summary, session_id, session_key,\n session_type, model, provider, usage_json, workflow_run_id\n FROM cron_runs\n WHERE job_id = ?\n ORDER BY started_at DESC\n LIMIT ?`,\n )\n .all(jobId, limit) as CronRunRow[];\n return rows.map(rowToExecution);\n}\n\nexport function readAllCronRuns(limit: number): JobExecution[] {\n if (limit <= 0) {\n return [];\n }\n const db = getSqliteDatabase();\n const rows = db\n .prepare(\n `SELECT run_id, job_id, status, started_at, ended_at, duration_ms,\n error, output, retry_count, summary, session_id, session_key,\n session_type, model, provider, usage_json, workflow_run_id\n FROM cron_runs\n ORDER BY started_at DESC\n LIMIT ?`,\n )\n .all(limit) as CronRunRow[];\n return rows.map(rowToExecution);\n}\n\nexport function deleteCronRunsForJob(jobId: string): void {\n runSqliteWriteTransaction((db) => {\n db.prepare(`DELETE FROM cron_runs WHERE job_id = ?`).run(jobId);\n });\n}\n"],"mappings":";;AAGA,MAAM,mBAAmB;AACzB,MAAM,eAAe;AAsBrB,SAAS,eAAe,KAA+B;AACrD,QAAO;EACL,IAAI,IAAI;EACR,OAAO,IAAI;EACX,QAAQ,IAAI;EACZ,WAAW,IAAI,KAAK,IAAI,WAAW,CAAC,aAAa;EACjD,SAAS,IAAI,YAAY,OAAO,IAAI,KAAK,IAAI,SAAS,CAAC,aAAa,GAAG,KAAA;EACvE,UAAU,IAAI,eAAe,KAAA;EAC7B,OAAO,IAAI,SAAS,KAAA;EACpB,QAAQ,IAAI,UAAU,KAAA;EACtB,YAAY,IAAI;EAChB,SAAS,IAAI,WAAW,KAAA;EACxB,WAAW,IAAI,cAAc,KAAA;EAC7B,YAAY,IAAI,eAAe,KAAA;EAC/B,aAAa,IAAI,gBAAgB,KAAA;EACjC,OAAO,IAAI,SAAS,KAAA;EACpB,UAAU,IAAI,YAAY,KAAA;EAC1B,OAAO,IAAI,aAAc,KAAK,MAAM,IAAI,WAAW,GAA6B,KAAA;EAChF,eAAe,IAAI,mBAAmB,KAAA;EACvC;;AAGH,SAAS,kBAAkB,WAAqC;CAC9D,MAAM,YAAY,KAAK,MAAM,UAAU,UAAU;CACjD,MAAM,UAAU,UAAU,UAAU,KAAK,MAAM,UAAU,QAAQ,GAAG;AACpE,QAAO;EACL,QAAQ,UAAU;EAClB,QAAQ,UAAU;EAClB,QAAQ,UAAU;EAClB,YAAY;EACZ,UAAU;EACV,aAAa,UAAU,YAAY;EACnC,OAAO,UAAU,SAAS;EAC1B,QAAQ,UAAU,UAAU;EAC5B,aAAa,UAAU;EACvB,SAAS,UAAU,WAAW;EAC9B,YAAY,UAAU,aAAa;EACnC,aAAa,UAAU,cAAc;EACrC,cAAc,UAAU,eAAe;EACvC,OAAO,UAAU,SAAS;EAC1B,UAAU,UAAU,YAAY;EAChC,YAAY,UAAU,QAAQ,KAAK,UAAU,UAAU,MAAM,GAAG;EAChE,iBAAiB,UAAU,iBAAiB;EAC7C;;AAGH,SAAS,YAAY,IAA0C,OAAqB;CAClF,MAAM,WAAW,GACd,QAAQ,2DAA2D,CACnE,IAAI,MAAM;AACb,KAAI,SAAS,SAAS,iBACpB;CAEF,MAAM,SAAS,SAAS,QAAQ;AAChC,IAAG,QACD;;;QAID,CAAC,IAAI,OAAO,OAAO;;AAGtB,SAAgB,cAAc,WAA+B;CAC3D,MAAM,MAAM,kBAAkB,UAAU;AACxC,4BAA2B,OAAO;AAChC,KAAG,QACD;;;;oEAKD,CAAC,IACA,IAAI,QACJ,IAAI,QACJ,IAAI,QACJ,IAAI,YACJ,IAAI,UACJ,IAAI,aACJ,IAAI,OACJ,IAAI,QACJ,IAAI,aACJ,IAAI,SACJ,IAAI,YACJ,IAAI,aACJ,IAAI,cACJ,IAAI,OACJ,IAAI,UACJ,IAAI,YACJ,IAAI,gBACL;AACD,cAAY,IAAI,IAAI,OAAO;GAC3B;;AAGJ,SAAgB,mBAAmB,OAAe,OAA+B;AAC/E,KAAI,SAAS,EACX,QAAO,EAAE;AAcX,QAZW,mBACI,CACZ,QACC;;;;;;gBAOD,CACA,IAAI,OAAO,MACH,CAAC,IAAI,eAAe;;AAGjC,SAAgB,gBAAgB,OAA+B;AAC7D,KAAI,SAAS,EACX,QAAO,EAAE;AAaX,QAXW,mBACI,CACZ,QACC;;;;;gBAMD,CACA,IAAI,MACI,CAAC,IAAI,eAAe;;AAGjC,SAAgB,qBAAqB,OAAqB;AACxD,4BAA2B,OAAO;AAChC,KAAG,QAAQ,yCAAyC,CAAC,IAAI,MAAM;GAC/D"}
|
|
@@ -10,6 +10,7 @@ export { buildGlobalSessionStats, classifyStoredRow, estimateTokensFromMessages,
|
|
|
10
10
|
export { deleteSessionRecord, ensureSessionRecord, getCurrentTranscriptId, getGlobalSessionStats, findSessionKeyByTranscriptId, getSessionPersistedLevels, getSessionMetadata, incrementSessionStatsOnAppend, listSessionMetadata, listSessionsByAgent, patchSessionMetadata, resetSessionRecord, resolveSessionAgentId, updateSessionStats, } from './session-repository.js';
|
|
11
11
|
export { appendTranscriptEntry, captureCompactionCheckpoint, getCompactionCheckpointDetail, listCompactionCheckpoints, loadCheckpointRows, loadLlmMessagesForSession, loadTranscriptRows, loadTranscriptRowsForSession, paginateTranscriptMessages, replaceTranscriptRows, restoreCompactionCheckpoint, } from './transcript-repository.js';
|
|
12
12
|
export { appendCronRun, deleteCronRunsForJob, readAllCronRuns, readCronJobHistory, } from './cron-run-repository.js';
|
|
13
|
+
export { deleteCronJob, getCronJob, listCronJobs, saveCronJob, saveCronJobs, } from './cron-job-repository.js';
|
|
13
14
|
export { deleteNoteRecord, getNoteRecord, listNoteRecords, upsertNoteRecord, } from './notes-repository.js';
|
|
14
15
|
export { deleteNoteAgentContextRecord, getNoteAgentContextRecord, upsertNoteAgentContextRecord, type NoteAgentContextRecord, } from './note-agent-context-repository.js';
|
|
15
16
|
export { resolveAgentIdFromMemoriesDir, searchMemoryIndex, syncMemoryIndex, type MemorySearchHit, } from './memory-index-repository.js';
|
|
@@ -11,8 +11,9 @@ import { buildGlobalSessionStats, classifyStoredRow, estimateTokensFromMessages,
|
|
|
11
11
|
import { deleteSessionRecord, ensureSessionRecord, findSessionKeyByTranscriptId, getCurrentTranscriptId, getGlobalSessionStats, getSessionMetadata, getSessionPersistedLevels, incrementSessionStatsOnAppend, listSessionMetadata, listSessionsByAgent, patchSessionMetadata, resetSessionRecord, resolveSessionAgentId, updateSessionStats } from "./session-repository.js";
|
|
12
12
|
import { appendTranscriptEntry, captureCompactionCheckpoint, getCompactionCheckpointDetail, listCompactionCheckpoints, loadCheckpointRows, loadLlmMessagesForSession, loadTranscriptRows, loadTranscriptRowsForSession, paginateTranscriptMessages, replaceTranscriptRows, restoreCompactionCheckpoint } from "./transcript-repository.js";
|
|
13
13
|
import { appendCronRun, deleteCronRunsForJob, readAllCronRuns, readCronJobHistory } from "./cron-run-repository.js";
|
|
14
|
+
import { deleteCronJob, getCronJob, listCronJobs, saveCronJob, saveCronJobs } from "./cron-job-repository.js";
|
|
14
15
|
import { deleteNoteRecord, getNoteRecord, listNoteRecords, upsertNoteRecord } from "./notes-repository.js";
|
|
15
16
|
import { deleteNoteAgentContextRecord, getNoteAgentContextRecord, upsertNoteAgentContextRecord } from "./note-agent-context-repository.js";
|
|
16
17
|
import { resolveAgentIdFromMemoriesDir, searchMemoryIndex, syncMemoryIndex } from "./memory-index-repository.js";
|
|
17
18
|
import { deleteSessionConfig, getSessionConfig, hasSessionConfig, setSessionConfig, updateSessionConfig } from "./config-repository.js";
|
|
18
|
-
export { DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, appendCronRun, appendTranscriptEntry, applyPendingMigrations, buildDefaultSessionMetadata, buildGlobalSessionStats, captureCompactionCheckpoint, classifyStoredRow, closeXopcDatabase, deleteCronRunsForJob, deleteNoteAgentContextRecord, deleteNoteRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, extractRoutingFromSessionKey, findSessionKeyByTranscriptId, getCompactionCheckpointDetail, getCurrentTranscriptId, getGlobalSessionStats, getNoteAgentContextRecord, getNoteRecord, getSessionConfig, getSessionMetadata, getSessionPersistedLevels, getSqliteDatabase, getXopcDatabase, hasSessionConfig, incrementSessionStatsOnAppend, inspectSchemaMigrationStatus, isXopcDatabaseOpen, listCompactionCheckpoints, listNoteRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, loadCheckpointRows, loadLlmMessagesForSession, loadTranscriptRows, loadTranscriptRowsForSession, metadataToSessionInsert, openXopcDatabase, paginateTranscriptMessages, parseSessionKeySource, patchSessionMetadata, readAllCronRuns, readCronJobHistory, readSchemaVersion, readSchemaVersionForTest, replaceTranscriptRows, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveAgentIdFromMemoriesDir, resolveAgentIdFromSessionKey, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreCompactionCheckpoint, runSqliteWriteTransaction, searchMemoryIndex, sessionConfigRowToConfig, sessionRowToMetadata, setSessionConfig, syncMemoryIndex, transcriptEntryRowToStoredRow, updateSessionConfig, updateSessionStats, upsertNoteAgentContextRecord, upsertNoteRecord };
|
|
19
|
+
export { DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, appendCronRun, appendTranscriptEntry, applyPendingMigrations, buildDefaultSessionMetadata, buildGlobalSessionStats, captureCompactionCheckpoint, classifyStoredRow, closeXopcDatabase, deleteCronJob, deleteCronRunsForJob, deleteNoteAgentContextRecord, deleteNoteRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, extractRoutingFromSessionKey, findSessionKeyByTranscriptId, getCompactionCheckpointDetail, getCronJob, getCurrentTranscriptId, getGlobalSessionStats, getNoteAgentContextRecord, getNoteRecord, getSessionConfig, getSessionMetadata, getSessionPersistedLevels, getSqliteDatabase, getXopcDatabase, hasSessionConfig, incrementSessionStatsOnAppend, inspectSchemaMigrationStatus, isXopcDatabaseOpen, listCompactionCheckpoints, listCronJobs, listNoteRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, loadCheckpointRows, loadLlmMessagesForSession, loadTranscriptRows, loadTranscriptRowsForSession, metadataToSessionInsert, openXopcDatabase, paginateTranscriptMessages, parseSessionKeySource, patchSessionMetadata, readAllCronRuns, readCronJobHistory, readSchemaVersion, readSchemaVersionForTest, replaceTranscriptRows, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveAgentIdFromMemoriesDir, resolveAgentIdFromSessionKey, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreCompactionCheckpoint, runSqliteWriteTransaction, saveCronJob, saveCronJobs, searchMemoryIndex, sessionConfigRowToConfig, sessionRowToMetadata, setSessionConfig, syncMemoryIndex, transcriptEntryRowToStoredRow, updateSessionConfig, updateSessionStats, upsertNoteAgentContextRecord, upsertNoteRecord };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
|
|
2
2
|
import { escapeFts5Query } from "./fts.js";
|
|
3
|
-
import { join, relative } from "node:path";
|
|
4
|
-
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
5
3
|
import { createHash } from "node:crypto";
|
|
4
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
5
|
+
import { join, relative } from "node:path";
|
|
6
6
|
//#region src/storage/sqlite/memory-index-repository.ts
|
|
7
7
|
const CURATED_MEMORY_FILENAMES = new Set(["MEMORY.md", "USER.md"]);
|
|
8
8
|
const MEMORY_SYNC_CACHE_TTL_MS = 3e4;
|
|
@@ -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);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS cron_jobs (
|
|
2
|
+
job_id TEXT PRIMARY KEY,
|
|
3
|
+
name TEXT NOT NULL,
|
|
4
|
+
description TEXT,
|
|
5
|
+
enabled INTEGER NOT NULL,
|
|
6
|
+
delete_after_run INTEGER,
|
|
7
|
+
created_at_ms INTEGER NOT NULL,
|
|
8
|
+
updated_at_ms INTEGER NOT NULL,
|
|
9
|
+
schedule_json TEXT NOT NULL,
|
|
10
|
+
session_target TEXT NOT NULL,
|
|
11
|
+
wake_mode TEXT NOT NULL,
|
|
12
|
+
agent_id TEXT,
|
|
13
|
+
session_key TEXT,
|
|
14
|
+
working_directory TEXT,
|
|
15
|
+
payload_json TEXT NOT NULL,
|
|
16
|
+
delivery_json TEXT,
|
|
17
|
+
failure_alert_json TEXT,
|
|
18
|
+
state_json TEXT NOT NULL DEFAULT '{}'
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
CREATE INDEX IF NOT EXISTS idx_cron_jobs_enabled_next
|
|
22
|
+
ON cron_jobs(enabled, job_id);
|
|
23
|
+
CREATE INDEX IF NOT EXISTS idx_cron_jobs_updated
|
|
24
|
+
ON cron_jobs(updated_at_ms DESC);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
2
1
|
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
3
|
//#region src/storage/sqlite/migrations/discover.ts
|
|
4
4
|
/** Matches `002_add_notes_index.sql` → target version 2. */
|
|
5
5
|
const MIGRATION_FILENAME = /^(\d{3})_[\w-]+\.sql$/;
|
|
@@ -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 = 9;
|
|
7
7
|
export declare function resolveMigrationsDir(override?: string): string;
|
|
8
8
|
/**
|
|
9
9
|
* Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
|
|
@@ -3,8 +3,8 @@ import { init_logger } from "../../../utils/logger.js";
|
|
|
3
3
|
import { readSchemaVersion, setSchemaVersion } from "../schema-version.js";
|
|
4
4
|
import { discoverSqlMigrations } from "./discover.js";
|
|
5
5
|
import { DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError } from "./errors.js";
|
|
6
|
-
import { dirname, join } from "node:path";
|
|
7
6
|
import { existsSync } from "node:fs";
|
|
7
|
+
import { dirname, join } from "node:path";
|
|
8
8
|
import { fileURLToPath } from "node:url";
|
|
9
9
|
//#region src/storage/sqlite/migrations/runner.ts
|
|
10
10
|
init_logger();
|
|
@@ -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 = 9;
|
|
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 ?? 9;
|
|
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 ?? 9;
|
|
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 = 9;\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 = 9;
|
|
23
23
|
|
|
24
24
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
25
25
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SCHEMA_META_SCHEMA_VERSION_KEY, ensureSchemaMetaTable, readSchemaVersion, readSchemaVersionForTest, setSchemaVersion } from "./schema-version.js";
|
|
2
2
|
import { XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION, applyPendingMigrations } from "./migrations/runner.js";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
4
3
|
import { readFileSync } from "node:fs";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
//#region src/storage/sqlite/schema.ts
|
|
7
7
|
const SCHEMA_DIR = dirname(fileURLToPath(import.meta.url));
|
|
@@ -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: 9 });
|
|
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,61 @@ 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 cron_jobs (
|
|
135
|
+
job_id TEXT PRIMARY KEY,
|
|
136
|
+
name TEXT NOT NULL,
|
|
137
|
+
description TEXT,
|
|
138
|
+
enabled INTEGER NOT NULL,
|
|
139
|
+
delete_after_run INTEGER,
|
|
140
|
+
created_at_ms INTEGER NOT NULL,
|
|
141
|
+
updated_at_ms INTEGER NOT NULL,
|
|
142
|
+
schedule_json TEXT NOT NULL,
|
|
143
|
+
session_target TEXT NOT NULL,
|
|
144
|
+
wake_mode TEXT NOT NULL,
|
|
145
|
+
agent_id TEXT,
|
|
146
|
+
session_key TEXT,
|
|
147
|
+
working_directory TEXT,
|
|
148
|
+
payload_json TEXT NOT NULL,
|
|
149
|
+
delivery_json TEXT,
|
|
150
|
+
failure_alert_json TEXT,
|
|
151
|
+
state_json TEXT NOT NULL DEFAULT '{}'
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
CREATE INDEX IF NOT EXISTS idx_cron_jobs_enabled_next
|
|
155
|
+
ON cron_jobs(enabled, job_id);
|
|
156
|
+
CREATE INDEX IF NOT EXISTS idx_cron_jobs_updated
|
|
157
|
+
ON cron_jobs(updated_at_ms DESC);
|
|
158
|
+
|
|
159
|
+
CREATE TABLE IF NOT EXISTS workflow_runs (
|
|
160
|
+
run_id TEXT PRIMARY KEY,
|
|
161
|
+
agent_id TEXT NOT NULL,
|
|
162
|
+
definition_id TEXT NOT NULL,
|
|
163
|
+
definition_version TEXT NOT NULL,
|
|
164
|
+
goal_id TEXT,
|
|
165
|
+
session_key TEXT NOT NULL,
|
|
166
|
+
parent_session_key TEXT,
|
|
167
|
+
status TEXT NOT NULL,
|
|
168
|
+
source_kind TEXT NOT NULL,
|
|
169
|
+
source_json TEXT NOT NULL,
|
|
170
|
+
metadata_json TEXT,
|
|
171
|
+
title TEXT NOT NULL,
|
|
172
|
+
created_at_ms INTEGER NOT NULL,
|
|
173
|
+
started_at_ms INTEGER,
|
|
174
|
+
completed_at_ms INTEGER,
|
|
175
|
+
metrics_json TEXT NOT NULL,
|
|
176
|
+
result_preview TEXT,
|
|
177
|
+
error_message TEXT
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_goal_created
|
|
181
|
+
ON workflow_runs(goal_id, created_at_ms DESC);
|
|
182
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_status_created
|
|
183
|
+
ON workflow_runs(agent_id, status, created_at_ms DESC);
|
|
184
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_definition_created
|
|
185
|
+
ON workflow_runs(definition_id, created_at_ms DESC);
|
|
186
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_created
|
|
187
|
+
ON workflow_runs(agent_id, created_at_ms DESC);
|
|
188
|
+
|
|
134
189
|
CREATE TABLE IF NOT EXISTS notes (
|
|
135
190
|
note_id TEXT PRIMARY KEY,
|
|
136
191
|
title TEXT,
|
|
@@ -199,3 +254,136 @@ CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(
|
|
|
199
254
|
end_line UNINDEXED,
|
|
200
255
|
tokenize='unicode61'
|
|
201
256
|
);
|
|
257
|
+
|
|
258
|
+
CREATE TABLE IF NOT EXISTS goals (
|
|
259
|
+
goal_id TEXT PRIMARY KEY,
|
|
260
|
+
title TEXT NOT NULL,
|
|
261
|
+
description TEXT,
|
|
262
|
+
status TEXT NOT NULL,
|
|
263
|
+
agent_id TEXT NOT NULL,
|
|
264
|
+
priority TEXT NOT NULL DEFAULT 'normal',
|
|
265
|
+
deadline_at INTEGER,
|
|
266
|
+
created_at INTEGER NOT NULL,
|
|
267
|
+
updated_at INTEGER NOT NULL,
|
|
268
|
+
completed_at INTEGER,
|
|
269
|
+
archived_at INTEGER,
|
|
270
|
+
active_session_key TEXT,
|
|
271
|
+
current_run_id TEXT,
|
|
272
|
+
next_action TEXT,
|
|
273
|
+
blocked_reason TEXT,
|
|
274
|
+
judge_model_ref TEXT,
|
|
275
|
+
max_turns INTEGER NOT NULL,
|
|
276
|
+
turns_used INTEGER NOT NULL DEFAULT 0,
|
|
277
|
+
ui_locale TEXT,
|
|
278
|
+
source TEXT NOT NULL DEFAULT 'chat'
|
|
279
|
+
);
|
|
280
|
+
|
|
281
|
+
CREATE INDEX IF NOT EXISTS idx_goals_status_updated
|
|
282
|
+
ON goals(status, updated_at DESC);
|
|
283
|
+
CREATE INDEX IF NOT EXISTS idx_goals_agent_updated
|
|
284
|
+
ON goals(agent_id, updated_at DESC);
|
|
285
|
+
CREATE INDEX IF NOT EXISTS idx_goals_active_session
|
|
286
|
+
ON goals(active_session_key);
|
|
287
|
+
|
|
288
|
+
CREATE TABLE IF NOT EXISTS goal_queue (
|
|
289
|
+
queue_id TEXT PRIMARY KEY,
|
|
290
|
+
goal_id TEXT NOT NULL,
|
|
291
|
+
status TEXT NOT NULL,
|
|
292
|
+
payload_json TEXT NOT NULL,
|
|
293
|
+
attempts INTEGER NOT NULL,
|
|
294
|
+
max_retries INTEGER NOT NULL,
|
|
295
|
+
enqueued_at INTEGER NOT NULL,
|
|
296
|
+
started_at INTEGER,
|
|
297
|
+
finished_at INTEGER,
|
|
298
|
+
next_run_at INTEGER,
|
|
299
|
+
session_key TEXT,
|
|
300
|
+
last_error TEXT,
|
|
301
|
+
source TEXT NOT NULL,
|
|
302
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
CREATE INDEX IF NOT EXISTS idx_goal_queue_status_next
|
|
306
|
+
ON goal_queue(status, next_run_at, enqueued_at);
|
|
307
|
+
CREATE INDEX IF NOT EXISTS idx_goal_queue_goal_status
|
|
308
|
+
ON goal_queue(goal_id, status);
|
|
309
|
+
CREATE INDEX IF NOT EXISTS idx_goal_queue_enqueued
|
|
310
|
+
ON goal_queue(enqueued_at DESC);
|
|
311
|
+
|
|
312
|
+
CREATE TABLE IF NOT EXISTS goal_checklist_items (
|
|
313
|
+
item_id TEXT PRIMARY KEY,
|
|
314
|
+
goal_id TEXT NOT NULL,
|
|
315
|
+
text TEXT NOT NULL,
|
|
316
|
+
status TEXT NOT NULL,
|
|
317
|
+
added_by TEXT NOT NULL,
|
|
318
|
+
added_at INTEGER NOT NULL,
|
|
319
|
+
completed_at INTEGER,
|
|
320
|
+
evidence_summary TEXT,
|
|
321
|
+
sort_order INTEGER NOT NULL,
|
|
322
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
323
|
+
);
|
|
324
|
+
|
|
325
|
+
CREATE INDEX IF NOT EXISTS idx_goal_checklist_goal_order
|
|
326
|
+
ON goal_checklist_items(goal_id, sort_order);
|
|
327
|
+
|
|
328
|
+
CREATE TABLE IF NOT EXISTS goal_runs (
|
|
329
|
+
run_id TEXT PRIMARY KEY,
|
|
330
|
+
goal_id TEXT NOT NULL,
|
|
331
|
+
session_key TEXT NOT NULL,
|
|
332
|
+
source TEXT NOT NULL,
|
|
333
|
+
status TEXT NOT NULL,
|
|
334
|
+
started_at INTEGER NOT NULL,
|
|
335
|
+
finished_at INTEGER,
|
|
336
|
+
verdict TEXT,
|
|
337
|
+
reason TEXT,
|
|
338
|
+
next_action TEXT,
|
|
339
|
+
assistant_preview TEXT,
|
|
340
|
+
checklist_done INTEGER,
|
|
341
|
+
checklist_total INTEGER,
|
|
342
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
CREATE INDEX IF NOT EXISTS idx_goal_runs_goal_started
|
|
346
|
+
ON goal_runs(goal_id, started_at DESC);
|
|
347
|
+
CREATE INDEX IF NOT EXISTS idx_goal_runs_session_started
|
|
348
|
+
ON goal_runs(session_key, started_at DESC);
|
|
349
|
+
|
|
350
|
+
CREATE TABLE IF NOT EXISTS goal_events (
|
|
351
|
+
event_id TEXT PRIMARY KEY,
|
|
352
|
+
goal_id TEXT NOT NULL,
|
|
353
|
+
run_id TEXT,
|
|
354
|
+
kind TEXT NOT NULL,
|
|
355
|
+
message TEXT NOT NULL,
|
|
356
|
+
data_json TEXT,
|
|
357
|
+
created_at INTEGER NOT NULL,
|
|
358
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
359
|
+
);
|
|
360
|
+
|
|
361
|
+
CREATE INDEX IF NOT EXISTS idx_goal_events_goal_created
|
|
362
|
+
ON goal_events(goal_id, created_at DESC);
|
|
363
|
+
|
|
364
|
+
CREATE TABLE IF NOT EXISTS goal_evidence (
|
|
365
|
+
evidence_id TEXT PRIMARY KEY,
|
|
366
|
+
goal_id TEXT NOT NULL,
|
|
367
|
+
run_id TEXT,
|
|
368
|
+
kind TEXT NOT NULL,
|
|
369
|
+
title TEXT NOT NULL,
|
|
370
|
+
summary TEXT,
|
|
371
|
+
uri TEXT,
|
|
372
|
+
data_json TEXT,
|
|
373
|
+
created_at INTEGER NOT NULL,
|
|
374
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
375
|
+
);
|
|
376
|
+
|
|
377
|
+
CREATE INDEX IF NOT EXISTS idx_goal_evidence_goal_created
|
|
378
|
+
ON goal_evidence(goal_id, created_at DESC);
|
|
379
|
+
|
|
380
|
+
CREATE TABLE IF NOT EXISTS goal_session_links (
|
|
381
|
+
goal_id TEXT NOT NULL,
|
|
382
|
+
session_key TEXT NOT NULL,
|
|
383
|
+
linked_at INTEGER NOT NULL,
|
|
384
|
+
PRIMARY KEY (goal_id, session_key),
|
|
385
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
|
|
386
|
+
);
|
|
387
|
+
|
|
388
|
+
CREATE INDEX IF NOT EXISTS idx_goal_session_links_session
|
|
389
|
+
ON goal_session_links(session_key, linked_at DESC);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { tmpdir } from "node:os";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
4
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
5
|
import { spawnSync } from "node:child_process";
|
|
6
6
|
//#region src/tui/clipboard-image.ts
|
|
7
7
|
const SUPPORTED_IMAGE_MIME_TYPES = [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { init_paths, resolveExtensionsDir } from "../../config/paths.js";
|
|
1
2
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { init_paths, resolveExtensionsDir } from "../../config/paths.js";
|
|
4
4
|
import { loadConfig } from "../../config/loader.js";
|
|
5
5
|
import { ExtensionLoader } from "../../extensions/loader.js";
|
|
6
6
|
import { getWorkspacePath } from "../../config/workspace-path-helpers.js";
|
|
@@ -2,8 +2,8 @@ import { resolveStateDir } from "../config/paths-state.js";
|
|
|
2
2
|
import { init_paths } from "../config/paths.js";
|
|
3
3
|
import { palette } from "./theme/dark.js";
|
|
4
4
|
import { palette as palette$1 } from "./theme/light.js";
|
|
5
|
-
import { join } from "node:path";
|
|
6
5
|
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
7
|
import chalk from "chalk";
|
|
8
8
|
//#region src/tui/theme-manager.ts
|
|
9
9
|
init_paths();
|