@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"goal-run-store.js","names":[],"sources":["../../../../src/agent/goals/goal-run-store.ts"],"sourcesContent":["import { createHash, randomUUID } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport type { Config } from '../../config/schema.js';\nimport { extractProfileAgentId } from '../../config/agent-profile.js';\nimport { resolveAgentHomeDir } from '../agent-scope.js';\nimport { writeTextAtomic } from '../../infra/write-file-atomic.js';\nimport { createLogger } from '../../utils/logger.js';\n\nimport { checklistCounts } from './checklist-types.js';\nimport type { GoalPostTurnDecision } from './evaluate-turn.js';\nimport type { GoalRunFileV1, GoalRunRecord } from './goal-run-types.js';\nimport { GOAL_RUN_FILE_VERSION } from './goal-run-types.js';\n\nconst log = createLogger('GoalRunStore');\n\nconst MAX_REASON_CHARS = 4_000;\nconst MAX_GOAL_CHARS = 4_000;\nconst MAX_ASSISTANT_PREVIEW_CHARS = 2_000;\nconst MAX_RUNS_PER_FILE = 400;\n\nfunction truncate(s: string, max: number): string {\n const t = s.trim();\n if (t.length <= max) return t;\n return `${t.slice(0, max - 1)}…`;\n}\n\nexport function resolveGoalRunsFilePath(config: Config, sessionKey: string): string {\n const agentId = extractProfileAgentId(sessionKey, config);\n const home = resolveAgentHomeDir(config, agentId);\n const hash = createHash('sha256').update(sessionKey, 'utf8').digest('hex');\n return join(home, 'goal-runs', `${hash}.json`);\n}\n\nfunction isGoalRunFileV1(x: unknown): x is GoalRunFileV1 {\n if (!x || typeof x !== 'object' || Array.isArray(x)) return false;\n const o = x as Record<string, unknown>;\n if (o.version !== GOAL_RUN_FILE_VERSION) return false;\n if (typeof o.sessionKey !== 'string' || !o.sessionKey.trim()) return false;\n if (!Array.isArray(o.runs)) return false;\n return true;\n}\n\nfunction parseGoalRunFile(raw: string): GoalRunFileV1 | null {\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!isGoalRunFileV1(parsed)) return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction buildRecordFromDecision(\n sessionKey: string,\n decision: GoalPostTurnDecision,\n assistantPlainText: string,\n): GoalRunRecord | null {\n const ns = decision.newState;\n if (!ns) return null;\n const items = ns.checklist ?? [];\n const progress =\n items.length > 0\n ? (() => {\n const c = checklistCounts(items);\n return { done: c.completed + c.impossible, total: c.total };\n })()\n : undefined;\n\n return {\n id: randomUUID(),\n at: Date.now(),\n goalTitle: truncate(ns.goal, MAX_GOAL_CHARS),\n turnsUsed: ns.turnsUsed,\n maxTurns: ns.maxTurns,\n verdict: decision.verdict,\n statusAfter: ns.status,\n ...(decision.reason.trim() ? { reason: truncate(decision.reason, MAX_REASON_CHARS) } : {}),\n willContinue: decision.shouldContinue,\n ...(progress ? { checklistProgress: progress } : {}),\n ...(assistantPlainText.trim()\n ? { assistantPreview: truncate(assistantPlainText, MAX_ASSISTANT_PREVIEW_CHARS) }\n : {}),\n };\n}\n\n/**\n * Append one run after persistent-goal post-turn evaluation (best-effort; logs on failure).\n */\nexport async function appendGoalRun(opts: {\n config: Config;\n sessionKey: string;\n decision: GoalPostTurnDecision;\n assistantPlainText: string;\n}): Promise<void> {\n const { config, sessionKey, decision, assistantPlainText } = opts;\n const record = buildRecordFromDecision(sessionKey, decision, assistantPlainText);\n if (!record) return;\n\n const filePath = resolveGoalRunsFilePath(config, sessionKey);\n\n let existing: GoalRunFileV1 = {\n version: GOAL_RUN_FILE_VERSION,\n sessionKey,\n runs: [],\n };\n\n try {\n const raw = await readFile(filePath, 'utf8');\n const parsed = parseGoalRunFile(raw);\n if (parsed) {\n if (parsed.sessionKey !== sessionKey) {\n log.warn({ sessionKey, filePath }, 'Goal run file sessionKey mismatch; refusing append');\n return;\n }\n existing = parsed;\n }\n } catch (err) {\n const code = err && typeof err === 'object' && 'code' in err ? String((err as NodeJS.ErrnoException).code) : '';\n if (code !== 'ENOENT') {\n log.warn(\n { err, sessionKey, filePath },\n `Goal run read failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n return;\n }\n }\n\n const nextRuns = [...existing.runs, record];\n const trimmed =\n nextRuns.length > MAX_RUNS_PER_FILE ? nextRuns.slice(nextRuns.length - MAX_RUNS_PER_FILE) : nextRuns;\n\n const out: GoalRunFileV1 = {\n version: GOAL_RUN_FILE_VERSION,\n sessionKey,\n runs: trimmed,\n };\n\n await writeTextAtomic(filePath, `${JSON.stringify(out, null, 2)}\\n`);\n}\n\n/**\n * List runs for a session (newest first). Missing or invalid file yields [].\n */\nexport async function listGoalRuns(\n config: Config,\n sessionKey: string,\n opts?: { limit?: number },\n): Promise<GoalRunRecord[]> {\n const limit = Math.min(500, Math.max(1, Math.floor(opts?.limit ?? 50)));\n const filePath = resolveGoalRunsFilePath(config, sessionKey);\n let raw: string;\n try {\n raw = await readFile(filePath, 'utf8');\n } catch (err) {\n const code = err && typeof err === 'object' && 'code' in err ? String((err as NodeJS.ErrnoException).code) : '';\n if (code === 'ENOENT') return [];\n log.debug(\n { err, sessionKey, filePath },\n `Goal run list read failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n return [];\n }\n const parsed = parseGoalRunFile(raw);\n if (!parsed || parsed.sessionKey !== sessionKey) return [];\n const rev = [...parsed.runs].reverse();\n return rev.slice(0, limit);\n}\n"],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { PersistentGoalStatus } from './state.js';
|
|
2
|
-
/** Matches {@link GoalPostTurnDecision} `verdict` for persisted runs. */
|
|
3
|
-
export type GoalRunVerdict = 'done' | 'continue' | 'skipped' | 'inactive' | 'decompose';
|
|
4
|
-
export declare const GOAL_RUN_FILE_VERSION: 1;
|
|
5
|
-
export interface GoalRunChecklistProgress {
|
|
6
|
-
done: number;
|
|
7
|
-
total: number;
|
|
8
|
-
}
|
|
9
|
-
/** One persisted evaluation after an assistant turn (Hermes post-turn). */
|
|
10
|
-
export interface GoalRunRecord {
|
|
11
|
-
id: string;
|
|
12
|
-
at: number;
|
|
13
|
-
goalTitle: string;
|
|
14
|
-
turnsUsed: number;
|
|
15
|
-
maxTurns: number;
|
|
16
|
-
verdict: GoalRunVerdict;
|
|
17
|
-
statusAfter: PersistentGoalStatus;
|
|
18
|
-
reason?: string;
|
|
19
|
-
willContinue: boolean;
|
|
20
|
-
checklistProgress?: GoalRunChecklistProgress;
|
|
21
|
-
/** Truncated assistant visible text for this turn (context, not full transcript). */
|
|
22
|
-
assistantPreview?: string;
|
|
23
|
-
}
|
|
24
|
-
export interface GoalRunFileV1 {
|
|
25
|
-
version: typeof GOAL_RUN_FILE_VERSION;
|
|
26
|
-
sessionKey: string;
|
|
27
|
-
runs: GoalRunRecord[];
|
|
28
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"goal-run-types.js","names":[],"sources":["../../../../src/agent/goals/goal-run-types.ts"],"sourcesContent":["import type { PersistentGoalStatus } from './state.js';\n\n/** Matches {@link GoalPostTurnDecision} `verdict` for persisted runs. */\nexport type GoalRunVerdict = 'done' | 'continue' | 'skipped' | 'inactive' | 'decompose';\n\nexport const GOAL_RUN_FILE_VERSION = 1 as const;\n\nexport interface GoalRunChecklistProgress {\n done: number;\n total: number;\n}\n\n/** One persisted evaluation after an assistant turn (Hermes post-turn). */\nexport interface GoalRunRecord {\n id: string;\n at: number;\n goalTitle: string;\n turnsUsed: number;\n maxTurns: number;\n verdict: GoalRunVerdict;\n statusAfter: PersistentGoalStatus;\n reason?: string;\n willContinue: boolean;\n checklistProgress?: GoalRunChecklistProgress;\n /** Truncated assistant visible text for this turn (context, not full transcript). */\n assistantPreview?: string;\n}\n\nexport interface GoalRunFileV1 {\n version: typeof GOAL_RUN_FILE_VERSION;\n sessionKey: string;\n runs: GoalRunRecord[];\n}\n"],"mappings":";AAKA,MAAa,wBAAwB"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export type PersistentGoalUserAction = 'pause' | 'resume' | 'clear' | 'restart';
|
|
2
|
-
export type PersistentGoalUserActionResult = {
|
|
3
|
-
kind: 'updated';
|
|
4
|
-
customData: Record<string, unknown>;
|
|
5
|
-
kickoff?: string;
|
|
6
|
-
} | {
|
|
7
|
-
kind: 'noop';
|
|
8
|
-
message: string;
|
|
9
|
-
} | {
|
|
10
|
-
kind: 'error';
|
|
11
|
-
error: string;
|
|
12
|
-
};
|
|
13
|
-
export interface GoalsConfigSlice {
|
|
14
|
-
maxTurns?: number;
|
|
15
|
-
judgeModelRef?: string;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Pure transition for `/goal` slash and `POST /api/goals/webchat` so behaviour stays aligned.
|
|
19
|
-
*/
|
|
20
|
-
export declare function applyPersistentGoalUserAction(customData: Record<string, unknown> | undefined, action: PersistentGoalUserAction, goalsCfg?: GoalsConfigSlice): PersistentGoalUserActionResult;
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { PERSISTENT_GOAL_CUSTOM_KEY, defaultMaxTurns, mergeCustomDataPatch, readPersistentGoal, serializePersistentGoal } from "./state.js";
|
|
2
|
-
//#region src/agent/goals/patch-from-user-action.ts
|
|
3
|
-
function baseCustomData(customData) {
|
|
4
|
-
return { ...customData ?? {} };
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Pure transition for `/goal` slash and `POST /api/goals/webchat` so behaviour stays aligned.
|
|
8
|
-
*/
|
|
9
|
-
function applyPersistentGoalUserAction(customData, action, goalsCfg) {
|
|
10
|
-
const s = readPersistentGoal(customData);
|
|
11
|
-
if (action === "clear") {
|
|
12
|
-
if (!s || s.status === "cleared") return {
|
|
13
|
-
kind: "noop",
|
|
14
|
-
message: "No active goal."
|
|
15
|
-
};
|
|
16
|
-
const b = baseCustomData(customData);
|
|
17
|
-
delete b[PERSISTENT_GOAL_CUSTOM_KEY];
|
|
18
|
-
return {
|
|
19
|
-
kind: "updated",
|
|
20
|
-
customData: b
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
if (!s || s.status === "cleared") {
|
|
24
|
-
if (action === "pause") return {
|
|
25
|
-
kind: "noop",
|
|
26
|
-
message: "No goal set."
|
|
27
|
-
};
|
|
28
|
-
if (action === "resume") return {
|
|
29
|
-
kind: "noop",
|
|
30
|
-
message: "No goal to resume."
|
|
31
|
-
};
|
|
32
|
-
if (action === "restart") return {
|
|
33
|
-
kind: "error",
|
|
34
|
-
error: "No goal to restart."
|
|
35
|
-
};
|
|
36
|
-
return {
|
|
37
|
-
kind: "error",
|
|
38
|
-
error: "No goal set."
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
if (action === "pause") {
|
|
42
|
-
if (s.status !== "active") return {
|
|
43
|
-
kind: "noop",
|
|
44
|
-
message: statusLineForMessage(s)
|
|
45
|
-
};
|
|
46
|
-
const next = {
|
|
47
|
-
...s,
|
|
48
|
-
status: "paused",
|
|
49
|
-
pausedReason: "user-paused"
|
|
50
|
-
};
|
|
51
|
-
return {
|
|
52
|
-
kind: "updated",
|
|
53
|
-
customData: mergeCustomDataPatch(baseCustomData(customData), { [PERSISTENT_GOAL_CUSTOM_KEY]: serializePersistentGoal(next) })
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
if (action === "resume") {
|
|
57
|
-
const next = {
|
|
58
|
-
...s,
|
|
59
|
-
status: "active",
|
|
60
|
-
pausedReason: void 0,
|
|
61
|
-
turnsUsed: 0,
|
|
62
|
-
consecutiveParseFailures: 0
|
|
63
|
-
};
|
|
64
|
-
return {
|
|
65
|
-
kind: "updated",
|
|
66
|
-
customData: mergeCustomDataPatch(baseCustomData(customData), { [PERSISTENT_GOAL_CUSTOM_KEY]: serializePersistentGoal(next) })
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
const maxTurns = typeof s.maxTurns === "number" && Number.isFinite(s.maxTurns) ? Math.max(1, Math.min(500, Math.floor(s.maxTurns))) : defaultMaxTurns(goalsCfg);
|
|
70
|
-
const judgeFromCfg = typeof goalsCfg?.judgeModelRef === "string" ? goalsCfg.judgeModelRef.trim() : void 0;
|
|
71
|
-
const judgeModelRef = (s.judgeModelRef ?? judgeFromCfg)?.trim() || void 0;
|
|
72
|
-
const next = {
|
|
73
|
-
goal: s.goal,
|
|
74
|
-
status: "active",
|
|
75
|
-
turnsUsed: 0,
|
|
76
|
-
maxTurns,
|
|
77
|
-
createdAt: Date.now(),
|
|
78
|
-
lastTurnAt: 0,
|
|
79
|
-
consecutiveParseFailures: 0,
|
|
80
|
-
...judgeModelRef ? { judgeModelRef } : {},
|
|
81
|
-
...s.uiLocale ? { uiLocale: s.uiLocale } : {},
|
|
82
|
-
...s.checklist?.length ? {
|
|
83
|
-
checklist: s.checklist.map((it) => ({ ...it })),
|
|
84
|
-
decomposed: true
|
|
85
|
-
} : {}
|
|
86
|
-
};
|
|
87
|
-
return {
|
|
88
|
-
kind: "updated",
|
|
89
|
-
customData: mergeCustomDataPatch(baseCustomData(customData), { [PERSISTENT_GOAL_CUSTOM_KEY]: serializePersistentGoal(next) }),
|
|
90
|
-
kickoff: s.goal
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
function statusLineForMessage(state) {
|
|
94
|
-
const turns = `${state.turnsUsed}/${state.maxTurns} turns`;
|
|
95
|
-
if (state.status === "active") return `⊙ Goal (active, ${turns}): ${state.goal}`;
|
|
96
|
-
if (state.status === "paused") return `⏸ Goal (paused, ${turns}${state.pausedReason ? ` — ${state.pausedReason}` : ""}): ${state.goal}`;
|
|
97
|
-
if (state.status === "done") return `✓ Goal done (${turns}): ${state.goal}`;
|
|
98
|
-
return `Goal (${state.status}, ${turns}): ${state.goal}`;
|
|
99
|
-
}
|
|
100
|
-
//#endregion
|
|
101
|
-
export { applyPersistentGoalUserAction };
|
|
102
|
-
|
|
103
|
-
//# sourceMappingURL=patch-from-user-action.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"patch-from-user-action.js","names":[],"sources":["../../../../src/agent/goals/patch-from-user-action.ts"],"sourcesContent":["import {\n defaultMaxTurns,\n mergeCustomDataPatch,\n readPersistentGoal,\n serializePersistentGoal,\n PERSISTENT_GOAL_CUSTOM_KEY,\n type PersistentGoalState,\n} from './state.js';\n\nexport type PersistentGoalUserAction = 'pause' | 'resume' | 'clear' | 'restart';\n\nexport type PersistentGoalUserActionResult =\n | { kind: 'updated'; customData: Record<string, unknown>; kickoff?: string }\n | { kind: 'noop'; message: string }\n | { kind: 'error'; error: string };\n\nexport interface GoalsConfigSlice {\n maxTurns?: number;\n judgeModelRef?: string;\n}\n\nfunction baseCustomData(customData: Record<string, unknown> | undefined): Record<string, unknown> {\n return { ...(customData ?? {}) };\n}\n\n/**\n * Pure transition for `/goal` slash and `POST /api/goals/webchat` so behaviour stays aligned.\n */\nexport function applyPersistentGoalUserAction(\n customData: Record<string, unknown> | undefined,\n action: PersistentGoalUserAction,\n goalsCfg?: GoalsConfigSlice,\n): PersistentGoalUserActionResult {\n const s = readPersistentGoal(customData);\n\n if (action === 'clear') {\n if (!s || s.status === 'cleared') {\n return { kind: 'noop', message: 'No active goal.' };\n }\n const b = baseCustomData(customData);\n delete b[PERSISTENT_GOAL_CUSTOM_KEY];\n return { kind: 'updated', customData: b };\n }\n\n if (!s || s.status === 'cleared') {\n if (action === 'pause') return { kind: 'noop', message: 'No goal set.' };\n if (action === 'resume') return { kind: 'noop', message: 'No goal to resume.' };\n if (action === 'restart') return { kind: 'error', error: 'No goal to restart.' };\n return { kind: 'error', error: 'No goal set.' };\n }\n\n if (action === 'pause') {\n if (s.status !== 'active') {\n return { kind: 'noop', message: statusLineForMessage(s) };\n }\n const next = { ...s, status: 'paused' as const, pausedReason: 'user-paused' as const };\n return {\n kind: 'updated',\n customData: mergeCustomDataPatch(baseCustomData(customData), {\n [PERSISTENT_GOAL_CUSTOM_KEY]: serializePersistentGoal(next),\n }),\n };\n }\n\n if (action === 'resume') {\n const next: PersistentGoalState = {\n ...s,\n status: 'active',\n pausedReason: undefined,\n turnsUsed: 0,\n consecutiveParseFailures: 0,\n };\n return {\n kind: 'updated',\n customData: mergeCustomDataPatch(baseCustomData(customData), {\n [PERSISTENT_GOAL_CUSTOM_KEY]: serializePersistentGoal(next),\n }),\n };\n }\n\n // restart\n const maxTurns =\n typeof s.maxTurns === 'number' && Number.isFinite(s.maxTurns)\n ? Math.max(1, Math.min(500, Math.floor(s.maxTurns)))\n : defaultMaxTurns(goalsCfg);\n const judgeFromCfg =\n typeof goalsCfg?.judgeModelRef === 'string' ? goalsCfg.judgeModelRef.trim() : undefined;\n const judgeModelRef = (s.judgeModelRef ?? judgeFromCfg)?.trim() || undefined;\n const next: PersistentGoalState = {\n goal: s.goal,\n status: 'active',\n turnsUsed: 0,\n maxTurns,\n createdAt: Date.now(),\n lastTurnAt: 0,\n consecutiveParseFailures: 0,\n ...(judgeModelRef ? { judgeModelRef } : {}),\n ...(s.uiLocale ? { uiLocale: s.uiLocale } : {}),\n ...(s.checklist?.length\n ? {\n checklist: s.checklist.map((it) => ({ ...it })),\n decomposed: true,\n }\n : {}),\n };\n return {\n kind: 'updated',\n customData: mergeCustomDataPatch(baseCustomData(customData), {\n [PERSISTENT_GOAL_CUSTOM_KEY]: serializePersistentGoal(next),\n }),\n kickoff: s.goal,\n };\n}\n\nfunction statusLineForMessage(state: PersistentGoalState): string {\n const turns = `${state.turnsUsed}/${state.maxTurns} turns`;\n if (state.status === 'active') {\n return `⊙ Goal (active, ${turns}): ${state.goal}`;\n }\n if (state.status === 'paused') {\n const extra = state.pausedReason ? ` — ${state.pausedReason}` : '';\n return `⏸ Goal (paused, ${turns}${extra}): ${state.goal}`;\n }\n if (state.status === 'done') {\n return `✓ Goal done (${turns}): ${state.goal}`;\n }\n return `Goal (${state.status}, ${turns}): ${state.goal}`;\n}\n"],"mappings":";;AAqBA,SAAS,eAAe,YAA0E;AAChG,QAAO,EAAE,GAAI,cAAc,EAAE,EAAG;;;;;AAMlC,SAAgB,8BACd,YACA,QACA,UACgC;CAChC,MAAM,IAAI,mBAAmB,WAAW;AAExC,KAAI,WAAW,SAAS;AACtB,MAAI,CAAC,KAAK,EAAE,WAAW,UACrB,QAAO;GAAE,MAAM;GAAQ,SAAS;GAAmB;EAErD,MAAM,IAAI,eAAe,WAAW;AACpC,SAAO,EAAE;AACT,SAAO;GAAE,MAAM;GAAW,YAAY;GAAG;;AAG3C,KAAI,CAAC,KAAK,EAAE,WAAW,WAAW;AAChC,MAAI,WAAW,QAAS,QAAO;GAAE,MAAM;GAAQ,SAAS;GAAgB;AACxE,MAAI,WAAW,SAAU,QAAO;GAAE,MAAM;GAAQ,SAAS;GAAsB;AAC/E,MAAI,WAAW,UAAW,QAAO;GAAE,MAAM;GAAS,OAAO;GAAuB;AAChF,SAAO;GAAE,MAAM;GAAS,OAAO;GAAgB;;AAGjD,KAAI,WAAW,SAAS;AACtB,MAAI,EAAE,WAAW,SACf,QAAO;GAAE,MAAM;GAAQ,SAAS,qBAAqB,EAAE;GAAE;EAE3D,MAAM,OAAO;GAAE,GAAG;GAAG,QAAQ;GAAmB,cAAc;GAAwB;AACtF,SAAO;GACL,MAAM;GACN,YAAY,qBAAqB,eAAe,WAAW,EAAE,GAC1D,6BAA6B,wBAAwB,KAAK,EAC5D,CAAC;GACH;;AAGH,KAAI,WAAW,UAAU;EACvB,MAAM,OAA4B;GAChC,GAAG;GACH,QAAQ;GACR,cAAc,KAAA;GACd,WAAW;GACX,0BAA0B;GAC3B;AACD,SAAO;GACL,MAAM;GACN,YAAY,qBAAqB,eAAe,WAAW,EAAE,GAC1D,6BAA6B,wBAAwB,KAAK,EAC5D,CAAC;GACH;;CAIH,MAAM,WACJ,OAAO,EAAE,aAAa,YAAY,OAAO,SAAS,EAAE,SAAS,GACzD,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,EAAE,SAAS,CAAC,CAAC,GAClD,gBAAgB,SAAS;CAC/B,MAAM,eACJ,OAAO,UAAU,kBAAkB,WAAW,SAAS,cAAc,MAAM,GAAG,KAAA;CAChF,MAAM,iBAAiB,EAAE,iBAAiB,eAAe,MAAM,IAAI,KAAA;CACnE,MAAM,OAA4B;EAChC,MAAM,EAAE;EACR,QAAQ;EACR,WAAW;EACX;EACA,WAAW,KAAK,KAAK;EACrB,YAAY;EACZ,0BAA0B;EAC1B,GAAI,gBAAgB,EAAE,eAAe,GAAG,EAAE;EAC1C,GAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,EAAE;EAC9C,GAAI,EAAE,WAAW,SACb;GACE,WAAW,EAAE,UAAU,KAAK,QAAQ,EAAE,GAAG,IAAI,EAAE;GAC/C,YAAY;GACb,GACD,EAAE;EACP;AACD,QAAO;EACL,MAAM;EACN,YAAY,qBAAqB,eAAe,WAAW,EAAE,GAC1D,6BAA6B,wBAAwB,KAAK,EAC5D,CAAC;EACF,SAAS,EAAE;EACZ;;AAGH,SAAS,qBAAqB,OAAoC;CAChE,MAAM,QAAQ,GAAG,MAAM,UAAU,GAAG,MAAM,SAAS;AACnD,KAAI,MAAM,WAAW,SACnB,QAAO,mBAAmB,MAAM,KAAK,MAAM;AAE7C,KAAI,MAAM,WAAW,SAEnB,QAAO,mBAAmB,QADZ,MAAM,eAAe,MAAM,MAAM,iBAAiB,GACxB,KAAK,MAAM;AAErD,KAAI,MAAM,WAAW,OACnB,QAAO,gBAAgB,MAAM,KAAK,MAAM;AAE1C,QAAO,SAAS,MAAM,OAAO,IAAI,MAAM,KAAK,MAAM"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import type { JobData } from './types.js';
|
|
2
|
-
export interface JobsFile {
|
|
3
|
-
jobs: JobData[];
|
|
4
|
-
version: number;
|
|
5
|
-
}
|
|
6
|
-
export declare class CronPersistence {
|
|
7
|
-
private filePath;
|
|
8
|
-
private cache;
|
|
9
|
-
private dirty;
|
|
10
|
-
private saveTimeout;
|
|
11
|
-
private readonly debounceMs;
|
|
12
|
-
constructor(filePath: string);
|
|
13
|
-
/**
|
|
14
|
-
* Initialize the storage file
|
|
15
|
-
*/
|
|
16
|
-
initialize(): Promise<void>;
|
|
17
|
-
/**
|
|
18
|
-
* Load jobs from disk (with caching)
|
|
19
|
-
*/
|
|
20
|
-
load(): Promise<JobsFile>;
|
|
21
|
-
/**
|
|
22
|
-
* Save jobs to disk (debounced)
|
|
23
|
-
*/
|
|
24
|
-
save(data: JobsFile): Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* Force immediate save (sync to disk)
|
|
27
|
-
*/
|
|
28
|
-
flush(): Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Get all jobs
|
|
31
|
-
*/
|
|
32
|
-
getJobs(): Promise<JobData[]>;
|
|
33
|
-
/**
|
|
34
|
-
* Get a single job by ID
|
|
35
|
-
*/
|
|
36
|
-
getJob(id: string): Promise<JobData | null>;
|
|
37
|
-
/**
|
|
38
|
-
* Add a new job
|
|
39
|
-
*/
|
|
40
|
-
addJob(job: JobData): Promise<void>;
|
|
41
|
-
/**
|
|
42
|
-
* Update an existing job
|
|
43
|
-
*/
|
|
44
|
-
updateJob(id: string, updates: Partial<JobData>, options?: {
|
|
45
|
-
clearAgentId?: boolean;
|
|
46
|
-
clearWorkingDirectory?: boolean;
|
|
47
|
-
}): Promise<boolean>;
|
|
48
|
-
/**
|
|
49
|
-
* Remove a job
|
|
50
|
-
*/
|
|
51
|
-
removeJob(id: string): Promise<boolean>;
|
|
52
|
-
/** Atomic write (fsync + rename) via shared helper. */
|
|
53
|
-
private writeToDisk;
|
|
54
|
-
/**
|
|
55
|
-
* Mark cache as dirty and schedule debounced save
|
|
56
|
-
*/
|
|
57
|
-
private markDirty;
|
|
58
|
-
/**
|
|
59
|
-
* Clear cache (useful for testing)
|
|
60
|
-
*/
|
|
61
|
-
clearCache(): void;
|
|
62
|
-
}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { createLogger } from "../utils/logger/index.js";
|
|
2
|
-
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
4
|
-
import { JobDataSchema } from "./validation.js";
|
|
5
|
-
import { access, readFile } from "fs/promises";
|
|
6
|
-
//#region src/cron/persistence.ts
|
|
7
|
-
init_write_file_atomic();
|
|
8
|
-
init_logger();
|
|
9
|
-
const log = createLogger("CronPersistence");
|
|
10
|
-
const DEFAULT_JOBS_FILE = {
|
|
11
|
-
jobs: [],
|
|
12
|
-
version: 1
|
|
13
|
-
};
|
|
14
|
-
var CronPersistence = class {
|
|
15
|
-
filePath;
|
|
16
|
-
cache = null;
|
|
17
|
-
dirty = false;
|
|
18
|
-
saveTimeout = null;
|
|
19
|
-
debounceMs = 500;
|
|
20
|
-
constructor(filePath) {
|
|
21
|
-
this.filePath = filePath;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Initialize the storage file
|
|
25
|
-
*/
|
|
26
|
-
async initialize() {
|
|
27
|
-
try {
|
|
28
|
-
await access(this.filePath);
|
|
29
|
-
await this.load();
|
|
30
|
-
} catch {
|
|
31
|
-
await this.save(DEFAULT_JOBS_FILE);
|
|
32
|
-
log.info({ path: this.filePath }, "Created new jobs file");
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Load jobs from disk (with caching)
|
|
37
|
-
*/
|
|
38
|
-
async load() {
|
|
39
|
-
if (this.cache) return this.cache;
|
|
40
|
-
try {
|
|
41
|
-
const content = await readFile(this.filePath, "utf-8");
|
|
42
|
-
const data = JSON.parse(content);
|
|
43
|
-
if (!data.jobs || !Array.isArray(data.jobs)) {
|
|
44
|
-
log.warn({ path: this.filePath }, "Cron jobs file invalid (missing jobs[]), resetting to empty");
|
|
45
|
-
this.cache = DEFAULT_JOBS_FILE;
|
|
46
|
-
return this.cache;
|
|
47
|
-
}
|
|
48
|
-
const valid = [];
|
|
49
|
-
for (const j of data.jobs) {
|
|
50
|
-
const r = JobDataSchema.safeParse(j);
|
|
51
|
-
if (r.success) valid.push(r.data);
|
|
52
|
-
else log.warn({
|
|
53
|
-
jobId: j.id,
|
|
54
|
-
issues: r.error.flatten()
|
|
55
|
-
}, "Dropped invalid cron job");
|
|
56
|
-
}
|
|
57
|
-
if (valid.length !== data.jobs.length) {
|
|
58
|
-
data.jobs = valid;
|
|
59
|
-
data.version = (data.version ?? 1) + 1;
|
|
60
|
-
this.cache = data;
|
|
61
|
-
await this.writeToDisk(data);
|
|
62
|
-
this.dirty = false;
|
|
63
|
-
log.info({ count: valid.length }, "Persisted cron jobs after validation");
|
|
64
|
-
return data;
|
|
65
|
-
}
|
|
66
|
-
this.cache = data;
|
|
67
|
-
log.debug({ jobCount: data.jobs.length }, "Loaded jobs from disk");
|
|
68
|
-
return data;
|
|
69
|
-
} catch (error) {
|
|
70
|
-
const em = error instanceof Error ? error.message : String(error);
|
|
71
|
-
log.error({
|
|
72
|
-
err: error,
|
|
73
|
-
path: this.filePath,
|
|
74
|
-
errorMessage: em
|
|
75
|
-
}, `Failed to load cron jobs file: ${em}`);
|
|
76
|
-
this.cache = DEFAULT_JOBS_FILE;
|
|
77
|
-
return this.cache;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Save jobs to disk (debounced)
|
|
82
|
-
*/
|
|
83
|
-
async save(data) {
|
|
84
|
-
this.cache = data;
|
|
85
|
-
this.markDirty();
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Force immediate save (sync to disk)
|
|
89
|
-
*/
|
|
90
|
-
async flush() {
|
|
91
|
-
if (!this.dirty || !this.cache) return;
|
|
92
|
-
if (this.saveTimeout) {
|
|
93
|
-
clearTimeout(this.saveTimeout);
|
|
94
|
-
this.saveTimeout = null;
|
|
95
|
-
}
|
|
96
|
-
await this.writeToDisk(this.cache);
|
|
97
|
-
this.dirty = false;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Get all jobs
|
|
101
|
-
*/
|
|
102
|
-
async getJobs() {
|
|
103
|
-
return (await this.load()).jobs;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Get a single job by ID
|
|
107
|
-
*/
|
|
108
|
-
async getJob(id) {
|
|
109
|
-
return (await this.getJobs()).find((j) => j.id === id) || null;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Add a new job
|
|
113
|
-
*/
|
|
114
|
-
async addJob(job) {
|
|
115
|
-
const data = await this.load();
|
|
116
|
-
data.jobs.push(job);
|
|
117
|
-
data.version++;
|
|
118
|
-
await this.save(data);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Update an existing job
|
|
122
|
-
*/
|
|
123
|
-
async updateJob(id, updates, options) {
|
|
124
|
-
const data = await this.load();
|
|
125
|
-
const index = data.jobs.findIndex((j) => j.id === id);
|
|
126
|
-
if (index === -1) return false;
|
|
127
|
-
const merged = {
|
|
128
|
-
...data.jobs[index],
|
|
129
|
-
...updates,
|
|
130
|
-
updated_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
131
|
-
};
|
|
132
|
-
if (options?.clearAgentId) delete merged.agentId;
|
|
133
|
-
if (options?.clearWorkingDirectory) delete merged.workingDirectory;
|
|
134
|
-
data.jobs[index] = merged;
|
|
135
|
-
data.version++;
|
|
136
|
-
await this.save(data);
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Remove a job
|
|
141
|
-
*/
|
|
142
|
-
async removeJob(id) {
|
|
143
|
-
const data = await this.load();
|
|
144
|
-
const initialLength = data.jobs.length;
|
|
145
|
-
data.jobs = data.jobs.filter((j) => j.id !== id);
|
|
146
|
-
if (data.jobs.length === initialLength) return false;
|
|
147
|
-
data.version++;
|
|
148
|
-
await this.save(data);
|
|
149
|
-
return true;
|
|
150
|
-
}
|
|
151
|
-
/** Atomic write (fsync + rename) via shared helper. */
|
|
152
|
-
async writeToDisk(data) {
|
|
153
|
-
await writeTextAtomic(this.filePath, JSON.stringify(data, null, 2));
|
|
154
|
-
log.debug({ jobCount: data.jobs.length }, "Jobs saved to disk");
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Mark cache as dirty and schedule debounced save
|
|
158
|
-
*/
|
|
159
|
-
markDirty() {
|
|
160
|
-
this.dirty = true;
|
|
161
|
-
if (this.saveTimeout) clearTimeout(this.saveTimeout);
|
|
162
|
-
this.saveTimeout = setTimeout(() => {
|
|
163
|
-
this.flush().catch((err) => {
|
|
164
|
-
const em = err instanceof Error ? err.message : String(err);
|
|
165
|
-
log.error({
|
|
166
|
-
err,
|
|
167
|
-
path: this.filePath,
|
|
168
|
-
errorMessage: em
|
|
169
|
-
}, `Failed to save cron jobs file: ${em}`);
|
|
170
|
-
});
|
|
171
|
-
}, this.debounceMs);
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Clear cache (useful for testing)
|
|
175
|
-
*/
|
|
176
|
-
clearCache() {
|
|
177
|
-
this.cache = null;
|
|
178
|
-
this.dirty = false;
|
|
179
|
-
if (this.saveTimeout) {
|
|
180
|
-
clearTimeout(this.saveTimeout);
|
|
181
|
-
this.saveTimeout = null;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
//#endregion
|
|
186
|
-
export { CronPersistence };
|
|
187
|
-
|
|
188
|
-
//# sourceMappingURL=persistence.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","names":[],"sources":["../../../src/cron/persistence.ts"],"sourcesContent":["// Cron persistence layer with atomic writes and caching\nimport { readFile, access } from 'fs/promises';\nimport { writeTextAtomic } from '../infra/write-file-atomic.js';\nimport { createLogger } from '../utils/logger.js';\nimport type { JobData } from './types.js';\nimport { JobDataSchema } from './validation.js';\n\nconst log = createLogger('CronPersistence');\n\nexport interface JobsFile {\n jobs: JobData[];\n version: number;\n}\n\nconst DEFAULT_JOBS_FILE: JobsFile = {\n jobs: [],\n version: 1,\n};\n\nexport class CronPersistence {\n private filePath: string;\n private cache: JobsFile | null = null;\n private dirty = false;\n private saveTimeout: ReturnType<typeof setTimeout> | null = null;\n private readonly debounceMs = 500; // Debounce saves\n\n constructor(filePath: string) {\n this.filePath = filePath;\n }\n\n /**\n * Initialize the storage file\n */\n async initialize(): Promise<void> {\n try {\n await access(this.filePath);\n // File exists, load it\n await this.load();\n } catch {\n // File doesn't exist, create it\n await this.save(DEFAULT_JOBS_FILE);\n log.info({ path: this.filePath }, 'Created new jobs file');\n }\n }\n\n /**\n * Load jobs from disk (with caching)\n */\n async load(): Promise<JobsFile> {\n // Return cache if available\n if (this.cache) {\n return this.cache;\n }\n\n try {\n const content = await readFile(this.filePath, 'utf-8');\n const data = JSON.parse(content) as JobsFile;\n \n // Validate basic structure\n if (!data.jobs || !Array.isArray(data.jobs)) {\n log.warn({ path: this.filePath }, 'Cron jobs file invalid (missing jobs[]), resetting to empty');\n this.cache = DEFAULT_JOBS_FILE;\n return this.cache;\n }\n\n const valid: JobData[] = [];\n for (const j of data.jobs) {\n const r = JobDataSchema.safeParse(j);\n if (r.success) {\n valid.push(r.data as JobData);\n } else {\n log.warn(\n { jobId: (j as { id?: string }).id, issues: r.error.flatten() },\n 'Dropped invalid cron job'\n );\n }\n }\n\n if (valid.length !== data.jobs.length) {\n data.jobs = valid;\n data.version = (data.version ?? 1) + 1;\n this.cache = data;\n await this.writeToDisk(data);\n this.dirty = false;\n log.info({ count: valid.length }, 'Persisted cron jobs after validation');\n return data;\n }\n\n this.cache = data;\n log.debug({ jobCount: data.jobs.length }, 'Loaded jobs from disk');\n return data;\n } catch (error) {\n const em = error instanceof Error ? error.message : String(error);\n log.error({ err: error, path: this.filePath, errorMessage: em }, `Failed to load cron jobs file: ${em}`);\n this.cache = DEFAULT_JOBS_FILE;\n return this.cache;\n }\n }\n\n /**\n * Save jobs to disk (debounced)\n */\n async save(data: JobsFile): Promise<void> {\n this.cache = data;\n this.markDirty();\n }\n\n /**\n * Force immediate save (sync to disk)\n */\n async flush(): Promise<void> {\n if (!this.dirty || !this.cache) {\n return;\n }\n\n // Clear any pending debounced save\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n this.saveTimeout = null;\n }\n\n await this.writeToDisk(this.cache);\n this.dirty = false;\n }\n\n /**\n * Get all jobs\n */\n async getJobs(): Promise<JobData[]> {\n const data = await this.load();\n return data.jobs;\n }\n\n /**\n * Get a single job by ID\n */\n async getJob(id: string): Promise<JobData | null> {\n const jobs = await this.getJobs();\n return jobs.find((j) => j.id === id) || null;\n }\n\n /**\n * Add a new job\n */\n async addJob(job: JobData): Promise<void> {\n const data = await this.load();\n data.jobs.push(job);\n data.version++;\n await this.save(data);\n }\n\n /**\n * Update an existing job\n */\n async updateJob(\n id: string,\n updates: Partial<JobData>,\n options?: { clearAgentId?: boolean; clearWorkingDirectory?: boolean },\n ): Promise<boolean> {\n const data = await this.load();\n const index = data.jobs.findIndex((j) => j.id === id);\n \n if (index === -1) return false;\n\n const merged: JobData = {\n ...data.jobs[index],\n ...updates,\n updated_at: new Date().toISOString(),\n };\n if (options?.clearAgentId) {\n delete merged.agentId;\n }\n if (options?.clearWorkingDirectory) {\n delete merged.workingDirectory;\n }\n data.jobs[index] = merged;\n data.version++;\n await this.save(data);\n return true;\n }\n\n /**\n * Remove a job\n */\n async removeJob(id: string): Promise<boolean> {\n const data = await this.load();\n const initialLength = data.jobs.length;\n data.jobs = data.jobs.filter((j) => j.id !== id);\n \n if (data.jobs.length === initialLength) return false;\n\n data.version++;\n await this.save(data);\n return true;\n }\n\n /** Atomic write (fsync + rename) via shared helper. */\n private async writeToDisk(data: JobsFile): Promise<void> {\n await writeTextAtomic(this.filePath, JSON.stringify(data, null, 2));\n log.debug({ jobCount: data.jobs.length }, 'Jobs saved to disk');\n }\n\n /**\n * Mark cache as dirty and schedule debounced save\n */\n private markDirty(): void {\n this.dirty = true;\n\n // Debounce saves\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n }\n\n this.saveTimeout = setTimeout(() => {\n this.flush().catch((err) => {\n const em = err instanceof Error ? err.message : String(err);\n log.error({ err, path: this.filePath, errorMessage: em }, `Failed to save cron jobs file: ${em}`);\n });\n }, this.debounceMs);\n }\n\n /**\n * Clear cache (useful for testing)\n */\n clearCache(): void {\n this.cache = null;\n this.dirty = false;\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n this.saveTimeout = null;\n }\n }\n}\n"],"mappings":"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"}
|
/package/dist/gateway/static/root/assets/{note-detail-page-D4ZIVQbk.css → block-editor-D4ZIVQbk.css}
RENAMED
|
File without changes
|