@xopcai/xopc 0.0.117 → 0.0.119
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 +26 -24
- package/README.zh-CN.md +46 -42
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BBLhJ2C6.js → agent-avatar-dicebear-CU8J6zou.js} +1 -1
- package/dist/gateway/static/root/assets/agents-B0hkpLhP.js +2 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-B9vfYoEr.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-ClOzIO24.js +1 -0
- package/dist/gateway/static/root/assets/{apps-page-DdDx0V4z.js → apps-page-DU0dz9Zo.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-DZsVqMhU.js → archive-plugin-BkVIgZzA.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CIol6JWX.js → attachment-load-CaCMWh1D.js} +1 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-DhGDpKP3.js +1 -0
- package/dist/gateway/static/root/assets/automations-page-CTedroVo.js +1 -0
- package/dist/gateway/static/root/assets/{binary-plugins-B3UauMfp.js → binary-plugins-B4TO_bsn.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-2HJoFchH.js → block-editor-DJRWwWNI.js} +6 -6
- package/dist/gateway/static/root/assets/browser-settings-page-FCDwOOBK.js +8 -0
- package/dist/gateway/static/root/assets/capability-presets-api-Befi89CL.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-_G8eb2vJ.js +1 -0
- package/dist/gateway/static/root/assets/channel-recipient-api-BNSuJb5f.js +1 -0
- package/dist/gateway/static/root/assets/channels-settings-C3d5JBJX.js +1 -0
- package/dist/gateway/static/root/assets/cn-BQ_8x0bT.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-yaUNvt5u.js +2 -0
- package/dist/gateway/static/root/assets/cron-expression-B3B1eqnr.js +2 -0
- package/dist/gateway/static/root/assets/dreaming-settings-DNrdg1Ve.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-DX5WRE_t.js → extension-debug-page-DYh402XV.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-Buah7Bw-.js → extension-page-Cr_TizrN.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DuroLVnf.js → extension-settings-page-BU1KoKRj.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-B5zdl27C.js → fetch-Y7AEX4H3.js} +1 -1
- package/dist/gateway/static/root/assets/format-cron-label-arqgGlVV.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-api-gT4ZhE7h.js → gateway-config-api-RbMmAOpX.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-C79wkXef.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-B3kL8KGY.js → gateway-startup-retry-DiD_Tx4N.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-9paXuHdo.js +1 -0
- package/dist/gateway/static/root/assets/{goals-config-api-AR-fVh0P.js → goals-config-api-DqxVi0p5.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-page-Cpb21ezg.js → goals-page-CS0R-Af2.js} +2 -2
- package/dist/gateway/static/root/assets/goals-settings-CSuzZ8Ae.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-DXPaYJm3.js +1 -0
- package/dist/gateway/static/root/assets/index-BoKafJIZ.js +191 -0
- package/dist/gateway/static/root/assets/index-CArhCcYn.css +1 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-Dvg53qnd.js +1 -0
- package/dist/gateway/static/root/assets/{logs-page-DefCgF4o.js → logs-page-DLXPcksQ.js} +2 -2
- package/dist/gateway/static/root/assets/{markdown-split-ChbR9LGO.js → markdown-split-CpHxbtWJ.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-B82oP80n.js → media-plugins-SFPQRSxq.js} +1 -1
- package/dist/gateway/static/root/assets/messages-CrDHEbss.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-panel-BDF2iyRk.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-CSb_hwig.js +2 -0
- package/dist/gateway/static/root/assets/{note-image-lightbox-CDknITM3.js → note-image-lightbox-BUYURRgn.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-BsIBSFyZ.js +1 -0
- package/dist/gateway/static/root/assets/{preview-open-alternatives-DV3xQsWB.js → preview-open-alternatives-BHz9iWYA.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CwzSovcS.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-BODCXnvY.js → save-bar-controls-CefkOlRg.js} +1 -1
- package/dist/gateway/static/root/assets/schedule-field-CmTRoOcE.js +1 -0
- package/dist/gateway/static/root/assets/{schema-form-qtfEI6QM.js → schema-form-FMKv1vGu.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-PHmX-NmA.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BRAeKJN4.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-BHZKjVcS.js → settings-collapsible-section-BouO6JTi.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-5i35D-J1.js → settings-form-section-D-4lBl6X.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-KKrbFjy8.js +1 -0
- package/dist/gateway/static/root/assets/settings-page-layout-BJ4Gsef5.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-CrUjHPQo.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-B0H63tDv.js → share-preview-page-BDy2btRN.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-B18OBmH5.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-C28-2uKQ.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-Bm2ebkwl.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-CRngrlnZ.js +1 -0
- package/dist/gateway/static/root/assets/typed-models-lib-BltBc0b-.js +1 -0
- package/dist/gateway/static/root/assets/{use-channel-catalog-BCjP_VHb.js → use-channel-catalog-CjN-51e6.js} +1 -1
- package/dist/gateway/static/root/assets/user-profile-settings-panel-DJ1dKwZy.js +1 -0
- package/dist/gateway/static/root/assets/utils-B5M5-YvK.js +1 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-CeEevm7z.js +1 -0
- package/dist/gateway/static/root/assets/{voice-player-store-BlF9V05n.js → voice-player-store-B7ykUlHM.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-C4PzUQjB.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-BL84_-Ky.js +18 -0
- package/dist/gateway/static/root/index.html +6 -7
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +4 -5
- package/dist/src/agent/agent-manager.js +6 -9
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.js +0 -2
- package/dist/src/agent/agent-scope.js.map +1 -1
- package/dist/src/agent/background-review/prompts.d.ts +2 -2
- package/dist/src/agent/background-review/prompts.js +2 -2
- package/dist/src/agent/background-review/prompts.js.map +1 -1
- package/dist/src/agent/background-review/settings.d.ts +1 -1
- package/dist/src/agent/background-review/settings.js +7 -8
- package/dist/src/agent/background-review/settings.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-cache.d.ts +1 -0
- package/dist/src/agent/bootstrap/bootstrap-cache.js +4 -3
- package/dist/src/agent/bootstrap/bootstrap-cache.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-files.d.ts +4 -0
- package/dist/src/agent/bootstrap/bootstrap-files.js +4 -3
- package/dist/src/agent/bootstrap/bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +4 -2
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +2 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +17 -16
- package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/types.d.ts +1 -1
- package/dist/src/agent/context/workspace-templates/AGENTS.md +1 -1
- package/dist/src/agent/context/workspace.d.ts +4 -2
- package/dist/src/agent/context/workspace.js +5 -4
- package/dist/src/agent/context/workspace.js.map +1 -1
- package/dist/src/agent/embedded/run-for-session.js +106 -15
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/fallback/candidates.d.ts +0 -8
- package/dist/src/agent/fallback/candidates.js +10 -11
- package/dist/src/agent/fallback/candidates.js.map +1 -1
- package/dist/src/agent/index.js +1 -1
- package/dist/src/agent/lifecycle/handlers/compaction.d.ts +1 -3
- package/dist/src/agent/lifecycle/handlers/compaction.js +1 -16
- package/dist/src/agent/lifecycle/handlers/compaction.js.map +1 -1
- package/dist/src/agent/lifecycle/progress.d.ts +0 -1
- package/dist/src/agent/lifecycle/progress.js +1 -6
- package/dist/src/agent/lifecycle/progress.js.map +1 -1
- package/dist/src/agent/lifecycle/timeout-wrapper.d.ts +1 -2
- package/dist/src/agent/lifecycle/timeout-wrapper.js +1 -7
- package/dist/src/agent/lifecycle/timeout-wrapper.js.map +1 -1
- package/dist/src/agent/memory/builtin-memory-store.d.ts +4 -2
- package/dist/src/agent/memory/builtin-memory-store.js +11 -6
- package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
- package/dist/src/agent/memory/builtin-provider.js +36 -7
- package/dist/src/agent/memory/builtin-provider.js.map +1 -1
- package/dist/src/agent/memory/candidate-extractor.d.ts +6 -0
- package/dist/src/agent/memory/candidate-extractor.js +60 -0
- package/dist/src/agent/memory/candidate-extractor.js.map +1 -0
- package/dist/src/agent/memory/manager.d.ts +2 -1
- package/dist/src/agent/memory/manager.js +27 -3
- package/dist/src/agent/memory/manager.js.map +1 -1
- package/dist/src/agent/memory/memory-config.js +3 -0
- package/dist/src/agent/memory/memory-config.js.map +1 -1
- package/dist/src/agent/memory/prefetch-coordinator.js.map +1 -1
- package/dist/src/agent/memory/types.d.ts +27 -4
- package/dist/src/agent/middleware/self-verify.d.ts +0 -1
- package/dist/src/agent/middleware/self-verify.js +0 -2
- package/dist/src/agent/middleware/self-verify.js.map +1 -1
- package/dist/src/agent/models/index.d.ts +1 -1
- package/dist/src/agent/models/manager.d.ts +4 -20
- package/dist/src/agent/models/manager.js +9 -126
- package/dist/src/agent/models/manager.js.map +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.d.ts +0 -4
- package/dist/src/agent/orchestration/agent-orchestrator.js +1 -9
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
- package/dist/src/agent/prompt/memory/index.d.ts +4 -2
- package/dist/src/agent/prompt/memory/index.js +18 -12
- package/dist/src/agent/prompt/memory/index.js.map +1 -1
- package/dist/src/agent/prompt/sections/memory-skills.js +1 -1
- package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +2 -2
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.d.ts +0 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +4 -31
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/prompt/subagent-context.js +1 -1
- package/dist/src/agent/prompt/subagent-context.js.map +1 -1
- package/dist/src/agent/prompt/types.d.ts +1 -1
- package/dist/src/agent/reply/post-compaction-context.js +1 -3
- package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
- package/dist/src/agent/reply/startup-context.js +1 -5
- package/dist/src/agent/reply/startup-context.js.map +1 -1
- package/dist/src/agent/service.d.ts +4 -12
- package/dist/src/agent/service.js +10 -48
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +2 -2
- package/dist/src/agent/session/session-config-service.d.ts +11 -11
- package/dist/src/agent/session/session-config-service.js +14 -14
- package/dist/src/agent/session/session-config-service.js.map +1 -1
- package/dist/src/agent/session/session-inspector.js +3 -2
- package/dist/src/agent/session/session-inspector.js.map +1 -1
- package/dist/src/agent/starter-agents.js +12 -12
- package/dist/src/agent/starter-agents.js.map +1 -1
- package/dist/src/agent/tools/automation-tool.d.ts +14 -0
- package/dist/src/agent/tools/automation-tool.js +102 -0
- package/dist/src/agent/tools/automation-tool.js.map +1 -0
- package/dist/src/agent/tools/curated-memory-tool.js +57 -2
- package/dist/src/agent/tools/curated-memory-tool.js.map +1 -1
- package/dist/src/agent/tools/delegate-tool.js +1 -1
- package/dist/src/agent/tools/delegate-tool.js.map +1 -1
- package/dist/src/agent/tools/factory.d.ts +3 -3
- package/dist/src/agent/tools/factory.js +2 -2
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/index.d.ts +1 -1
- package/dist/src/agent/tools/index.js +2 -2
- package/dist/src/agent/tools/web-extract.js +6 -8
- package/dist/src/agent/tools/web-extract.js.map +1 -1
- package/dist/src/agent-manifest/index.js +2 -2
- package/dist/src/agent-manifest/resolver.d.ts +4 -2
- package/dist/src/agent-manifest/resolver.js +6 -3
- package/dist/src/agent-manifest/resolver.js.map +1 -1
- package/dist/src/agent-manifest/schema.d.ts +238 -0
- package/dist/src/agent-manifest/schema.js +16 -5
- package/dist/src/agent-manifest/schema.js.map +1 -1
- package/dist/src/agent-manifest/validator.d.ts +3 -2
- package/dist/src/agent-manifest/validator.js +2 -1
- package/dist/src/agent-manifest/validator.js.map +1 -1
- package/dist/src/ai-assist/text-assist.d.ts +1 -1
- package/dist/src/ai-assist/text-assist.js +56 -0
- package/dist/src/ai-assist/text-assist.js.map +1 -1
- package/dist/src/auth/profiles/store.js.map +1 -1
- package/dist/src/automations/api/routes.d.ts +3 -0
- package/dist/src/automations/api/routes.js +193 -0
- package/dist/src/automations/api/routes.js.map +1 -0
- package/dist/src/automations/domain/index.d.ts +3 -0
- package/dist/src/automations/domain/index.js +3 -0
- package/dist/src/automations/domain/schedule.d.ts +4 -0
- package/dist/src/automations/domain/schedule.js +37 -0
- package/dist/src/automations/domain/schedule.js.map +1 -0
- package/dist/src/automations/domain/types.d.ts +160 -0
- package/dist/src/automations/domain/validation.d.ts +370 -0
- package/dist/src/automations/domain/validation.js +149 -0
- package/dist/src/automations/domain/validation.js.map +1 -0
- package/dist/src/automations/draft/automation-draft-prompt.d.ts +26 -0
- package/dist/src/automations/draft/automation-draft-prompt.js +127 -0
- package/dist/src/automations/draft/automation-draft-prompt.js.map +1 -0
- package/dist/src/automations/draft/automation-draft-service.d.ts +12 -0
- package/dist/src/automations/draft/automation-draft-service.js +135 -0
- package/dist/src/automations/draft/automation-draft-service.js.map +1 -0
- package/dist/src/automations/draft/automation-draft-validator.d.ts +99 -0
- package/dist/src/automations/draft/automation-draft-validator.js +105 -0
- package/dist/src/automations/draft/automation-draft-validator.js.map +1 -0
- package/dist/src/automations/draft/automation-draft.types.d.ts +40 -0
- package/dist/src/automations/draft/index.d.ts +3 -0
- package/dist/src/automations/draft/index.js +3 -0
- package/dist/src/automations/index.d.ts +3 -0
- package/dist/src/automations/index.js +8 -0
- package/dist/src/automations/product-events.d.ts +5 -0
- package/dist/src/automations/product-events.js +21 -0
- package/dist/src/automations/product-events.js.map +1 -0
- package/dist/src/automations/service/action-executor.d.ts +9 -0
- package/dist/src/automations/service/action-executor.js +157 -0
- package/dist/src/automations/service/action-executor.js.map +1 -0
- package/dist/src/automations/service/automation-service.d.ts +54 -0
- package/dist/src/automations/service/automation-service.js +404 -0
- package/dist/src/automations/service/automation-service.js.map +1 -0
- package/dist/src/automations/service/index.d.ts +2 -0
- package/dist/src/automations/service/index.js +3 -0
- package/dist/src/automations/storage/automation-repository.d.ts +6 -0
- package/dist/src/automations/storage/automation-repository.js +61 -0
- package/dist/src/automations/storage/automation-repository.js.map +1 -0
- package/dist/src/automations/storage/automation-run-repository.d.ts +17 -0
- package/dist/src/automations/storage/automation-run-repository.js +130 -0
- package/dist/src/automations/storage/automation-run-repository.js.map +1 -0
- package/dist/src/automations/storage/index.d.ts +2 -0
- package/dist/src/automations/storage/index.js +3 -0
- package/dist/src/channels/pipeline.d.ts +1 -1
- package/dist/src/channels/pipeline.js.map +1 -1
- package/dist/src/channels/plugin-types.d.ts +3 -0
- package/dist/src/chat-commands/agent-edit.js +0 -1
- package/dist/src/chat-commands/agent-edit.js.map +1 -1
- package/dist/src/chat-commands/builtins/model.js +2 -2
- package/dist/src/chat-commands/builtins/model.js.map +1 -1
- package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
- package/dist/src/cli/command-catalog.js +0 -39
- package/dist/src/cli/command-catalog.js.map +1 -1
- package/dist/src/cli/command-loaders.js +0 -1
- package/dist/src/cli/command-loaders.js.map +1 -1
- package/dist/src/cli/command-manifest.d.ts +1 -1
- package/dist/src/cli/command-manifest.js +1 -5
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/agents.js +7 -6
- package/dist/src/cli/commands/agents.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/{cron-health.d.ts → migrations.d.ts} +1 -1
- package/dist/src/cli/commands/doctor/checks/migrations.js +40 -0
- package/dist/src/cli/commands/doctor/checks/migrations.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +0 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +1 -1
- package/dist/src/cli/commands/doctor/flow.js +2 -2
- package/dist/src/cli/commands/doctor/flow.js.map +1 -1
- package/dist/src/cli/commands/gateway/call.js +2 -2
- package/dist/src/cli/commands/gateway/call.js.map +1 -1
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/gateway/run-foreground.js +4 -2
- package/dist/src/cli/commands/gateway/run-foreground.js.map +1 -1
- package/dist/src/cli/commands/init.js +33 -14
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/models.js +13 -31
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/onboard/model.js +17 -10
- package/dist/src/cli/commands/onboard/model.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +2 -2
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/tui.js +26 -4
- package/dist/src/cli/commands/tui.js.map +1 -1
- package/dist/src/cli/index.d.ts +1 -0
- package/dist/src/cli/index.js +10 -5
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/registry.js +1 -1
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/cli/templates.d.ts +1 -1
- package/dist/src/cli/templates.js +1 -11
- package/dist/src/cli/templates.js.map +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -0
- package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
- package/dist/src/commands/agents.config.d.ts +9 -0
- package/dist/src/commands/agents.config.js +42 -12
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/agent-profile.js +5 -3
- package/dist/src/config/agent-profile.js.map +1 -1
- package/dist/src/config/agent-typed-models.js +3 -5
- package/dist/src/config/agent-typed-models.js.map +1 -1
- package/dist/src/config/config-surface.d.ts +3 -0
- package/dist/src/config/index.d.ts +0 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/paths.d.ts +8 -10
- package/dist/src/config/paths.js +16 -16
- package/dist/src/config/paths.js.map +1 -1
- package/dist/src/config/profile.js +0 -1
- package/dist/src/config/profile.js.map +1 -1
- package/dist/src/config/rules.js +0 -5
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +45 -44
- package/dist/src/config/schema.js +68 -52
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +0 -12
- package/dist/src/config/web-patch.js +2 -29
- package/dist/src/config/web-patch.js.map +1 -1
- package/dist/src/extensions/api.d.ts +2 -0
- package/dist/src/extensions/api.js +10 -0
- package/dist/src/extensions/api.js.map +1 -1
- package/dist/src/extensions/extension-registry-impl.d.ts +4 -1
- package/dist/src/extensions/extension-registry-impl.js +8 -0
- package/dist/src/extensions/extension-registry-impl.js.map +1 -1
- package/dist/src/extensions/loader.d.ts +3 -3
- package/dist/src/extensions/loader.js +3 -3
- package/dist/src/extensions/loader.js.map +1 -1
- package/dist/src/extensions/sdk/testing.d.ts +2 -0
- package/dist/src/extensions/sdk/testing.js +7 -0
- package/dist/src/extensions/sdk/testing.js.map +1 -1
- package/dist/src/extensions/types/core.d.ts +10 -1
- package/dist/src/extensions/types/index.d.ts +1 -1
- package/dist/src/extensions/types/{phase4.d.ts → registration.d.ts} +2 -2
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/agent-builtin-tools.js +1 -1
- package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
- package/dist/src/gateway/agents-admin.d.ts +8 -0
- package/dist/src/gateway/agents-admin.js +63 -34
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/capability-presets-admin.d.ts +1 -0
- package/dist/src/gateway/capability-presets-admin.js +19 -10
- package/dist/src/gateway/capability-presets-admin.js.map +1 -1
- package/dist/src/gateway/chat-stream/mapper.js +9 -2
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
- package/dist/src/gateway/dreaming-automation-reconciler.d.ts +11 -0
- package/dist/src/gateway/dreaming-automation-reconciler.js +105 -0
- package/dist/src/gateway/dreaming-automation-reconciler.js.map +1 -0
- package/dist/src/gateway/global-defaults-admin.d.ts +36 -0
- package/dist/src/gateway/global-defaults-admin.js +146 -0
- package/dist/src/gateway/global-defaults-admin.js.map +1 -0
- package/dist/src/gateway/heartbeat/service.d.ts +0 -2
- package/dist/src/gateway/heartbeat/service.js +0 -7
- package/dist/src/gateway/heartbeat/service.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +5 -6
- package/dist/src/gateway/hono/lib/config-payload.js +2 -2
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/agents.js +33 -1
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/commands-skills.js +4 -5
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +12 -6
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +27 -37
- package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
- package/dist/src/gateway/hono/routes/global-defaults.d.ts +3 -0
- package/dist/src/gateway/hono/routes/global-defaults.js +61 -0
- package/dist/src/gateway/hono/routes/global-defaults.js.map +1 -0
- package/dist/src/gateway/hono/routes/home.d.ts +2 -2
- package/dist/src/gateway/hono/routes/home.js +34 -25
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +21 -9
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/memory.js +75 -4
- package/dist/src/gateway/hono/routes/memory.js.map +1 -1
- package/dist/src/gateway/hono/routes/migrations.d.ts +3 -0
- package/dist/src/gateway/hono/routes/migrations.js +35 -0
- package/dist/src/gateway/hono/routes/migrations.js.map +1 -0
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/public-gateway.js +2 -1
- package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +14 -0
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/run-loop.js +2 -0
- package/dist/src/gateway/run-loop.js.map +1 -1
- package/dist/src/gateway/security/operator-scopes.js +5 -1
- package/dist/src/gateway/security/operator-scopes.js.map +1 -1
- package/dist/src/gateway/service/config-coordinator.d.ts +4 -4
- package/dist/src/gateway/service/config-coordinator.js +14 -8
- package/dist/src/gateway/service/config-coordinator.js.map +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +4 -4
- package/dist/src/gateway/service/marketplace-service.js +11 -7
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service/sessions-api.d.ts +2 -1
- package/dist/src/gateway/service/sessions-api.js +6 -1
- package/dist/src/gateway/service/sessions-api.js.map +1 -1
- package/dist/src/gateway/service.d.ts +7 -3
- package/dist/src/gateway/service.js +61 -27
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-service.js +45 -4
- package/dist/src/goals/goal-service.js.map +1 -1
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/migrations/config/default-capability-preset.d.ts +10 -0
- package/dist/src/migrations/config/default-capability-preset.js +135 -0
- package/dist/src/migrations/config/default-capability-preset.js.map +1 -0
- package/dist/src/migrations/index.d.ts +4 -0
- package/dist/src/migrations/index.js +4 -0
- package/dist/src/migrations/registry.d.ts +8 -0
- package/dist/src/migrations/registry.js +18 -0
- package/dist/src/migrations/registry.js.map +1 -0
- package/dist/src/migrations/runner.d.ts +17 -0
- package/dist/src/migrations/runner.js +191 -0
- package/dist/src/migrations/runner.js.map +1 -0
- package/dist/src/migrations/types.d.ts +34 -0
- package/dist/src/notes/service.js +27 -2
- package/dist/src/notes/service.js.map +1 -1
- package/dist/src/providers/index.d.ts +4 -5
- package/dist/src/providers/index.js +16 -16
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/providers/model-registry.d.ts +0 -1
- package/dist/src/providers/model-registry.js +0 -3
- package/dist/src/providers/model-registry.js.map +1 -1
- package/dist/src/routing/resolve-tui-session-key.d.ts +3 -0
- package/dist/src/routing/resolve-tui-session-key.js +14 -3
- package/dist/src/routing/resolve-tui-session-key.js.map +1 -1
- package/dist/src/session/session-workspace.js +2 -7
- package/dist/src/session/session-workspace.js.map +1 -1
- package/dist/src/session/store.js +0 -5
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/transcript-outline.d.ts +47 -0
- package/dist/src/session/transcript-outline.js +481 -0
- package/dist/src/session/transcript-outline.js.map +1 -0
- package/dist/src/storage/sqlite/index.d.ts +1 -3
- package/dist/src/storage/sqlite/index.js +2 -4
- package/dist/src/storage/sqlite/memory-index-repository.d.ts +1 -0
- package/dist/src/storage/sqlite/memory-index-repository.js +15 -14
- package/dist/src/storage/sqlite/memory-index-repository.js.map +1 -1
- package/dist/src/storage/sqlite/memory-records-repository.d.ts +44 -1
- package/dist/src/storage/sqlite/memory-records-repository.js +164 -20
- package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/014_memory_record_governance.sql +10 -0
- package/dist/src/storage/sqlite/migrations/015_memory_trace_feedback.sql +4 -0
- package/dist/src/storage/sqlite/migrations/016_automations.sql +47 -0
- package/dist/src/storage/sqlite/migrations/017_automation_run_events.sql +14 -0
- package/dist/src/storage/sqlite/migrations/018_automation_safety.sql +1 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +56 -46
- package/dist/src/tui/backends/embedded-backend.d.ts +9 -0
- package/dist/src/tui/backends/embedded-backend.js +55 -27
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/backends/gateway-sse-backend.d.ts +4 -0
- package/dist/src/tui/backends/gateway-sse-backend.js +30 -3
- package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
- package/dist/src/tui/components/tui-header.d.ts +0 -1
- package/dist/src/tui/components/tui-header.js +3 -8
- package/dist/src/tui/components/tui-header.js.map +1 -1
- package/dist/src/tui/tui-backend.d.ts +4 -0
- package/dist/src/tui/tui-commands.d.ts +5 -0
- package/dist/src/tui/tui-commands.js +43 -0
- package/dist/src/tui/tui-commands.js.map +1 -1
- package/dist/src/tui/tui-startup-resources.js +2 -1
- package/dist/src/tui/tui-startup-resources.js.map +1 -1
- package/dist/src/tui/tui-startup-text.js +12 -12
- package/dist/src/tui/tui-startup-text.js.map +1 -1
- package/dist/src/tui/tui-transcript-tree.d.ts +1 -1
- package/dist/src/tui/tui-transcript-tree.js +17 -257
- package/dist/src/tui/tui-transcript-tree.js.map +1 -1
- package/dist/src/tui/tui-types.d.ts +2 -0
- package/dist/src/tui/tui-types.js.map +1 -1
- package/dist/src/tui/tui.js +11 -3
- package/dist/src/tui/tui.js.map +1 -1
- package/dist/src/workflows/domain/index.js +1 -1
- package/dist/src/workflows/domain/run.d.ts +7 -7
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/index.js +2 -2
- package/dist/src/workflows/service/workflow-run-service.d.ts +2 -0
- package/dist/src/workflows/service/workflow-run-service.js +31 -9
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -1
- package/package.json +4 -2
- package/dist/gateway/static/root/assets/agents-C6xgagZd.js +0 -71
- package/dist/gateway/static/root/assets/app-management-settings-panel-CBpLONvG.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-CGcc54yj.js +0 -1
- package/dist/gateway/static/root/assets/browser-settings-page-CUOO-PQk.js +0 -8
- package/dist/gateway/static/root/assets/capability-presets-api-XQoMTI0A.js +0 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-CfqF-kGr.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-BYyRzsex.js +0 -1
- package/dist/gateway/static/root/assets/cn-JdwAhgNB.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DIvEz4NX.js +0 -2
- package/dist/gateway/static/root/assets/createLucideIcon-DPHK1VkS.js +0 -1
- package/dist/gateway/static/root/assets/cron-api-R41aQCX9.js +0 -1
- package/dist/gateway/static/root/assets/cron-dreaming-jobs-nCMWCf0p.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-D97nFqQD.js +0 -3
- package/dist/gateway/static/root/assets/dreaming-settings-Bceaw1PG.js +0 -1
- package/dist/gateway/static/root/assets/format-cron-label-BsotZDO5.js +0 -2
- package/dist/gateway/static/root/assets/format-interval-label-Dn_QKIqb.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-iISWAZRm.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-DCUROLMQ.js +0 -1
- package/dist/gateway/static/root/assets/goals-settings-CPAuFwoD.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-D7bKFEeO.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-CC69vNx0.js +0 -1
- package/dist/gateway/static/root/assets/index-CwhK8qCh.js +0 -122
- package/dist/gateway/static/root/assets/index-CyfhARL-.css +0 -1
- package/dist/gateway/static/root/assets/interval-presets-0DtsnxE0.js +0 -1
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BPREtN8B.js +0 -1
- package/dist/gateway/static/root/assets/messages-Cf1O9JB0.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-DmKiIihT.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-CxxfLRJZ.js +0 -2
- package/dist/gateway/static/root/assets/notes-page-X2slSx7V.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BvmUWqgu.js +0 -1
- package/dist/gateway/static/root/assets/schedule-field-CgJSCD3B.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-B0yESuuL.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-q2M8RKOo.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-CGozabLD.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-FoOSe6nU.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-Cy5zWyYQ.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DaZNFro9.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-CnwtUzvw.js +0 -2
- package/dist/gateway/static/root/assets/system-settings-panel-DXs2VmBt.js +0 -1
- package/dist/gateway/static/root/assets/typed-models-lib-4gPuydz_.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DvKiOglO.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-CAVZcONQ.js +0 -18
- package/dist/src/agent/context/workspace-templates/USER.md +0 -24
- package/dist/src/agent/fallback/error.d.ts +0 -22
- package/dist/src/agent/fallback/error.js +0 -32
- package/dist/src/agent/fallback/error.js.map +0 -1
- package/dist/src/agent/fallback/index.d.ts +0 -5
- package/dist/src/agent/fallback/index.js +0 -9
- package/dist/src/agent/fallback/index.js.map +0 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +0 -29
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +0 -76
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +0 -1
- package/dist/src/agent/service/reconcile-dreaming-cron.d.ts +0 -6
- package/dist/src/agent/service/reconcile-dreaming-cron.js +0 -84
- package/dist/src/agent/service/reconcile-dreaming-cron.js.map +0 -1
- package/dist/src/agent/tools/cronjob-tool.d.ts +0 -29
- package/dist/src/agent/tools/cronjob-tool.js +0 -274
- package/dist/src/agent/tools/cronjob-tool.js.map +0 -1
- package/dist/src/cli/commands/cron-cli.d.ts +0 -2
- package/dist/src/cli/commands/cron-cli.js +0 -15
- package/dist/src/cli/commands/cron-cli.js.map +0 -1
- package/dist/src/cli/commands/cron.d.ts +0 -4
- package/dist/src/cli/commands/cron.js +0 -188
- package/dist/src/cli/commands/cron.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/cron-health.js +0 -35
- package/dist/src/cli/commands/doctor/checks/cron-health.js.map +0 -1
- package/dist/src/cron/execution-types.d.ts +0 -42
- package/dist/src/cron/executor.d.ts +0 -67
- package/dist/src/cron/executor.js +0 -669
- package/dist/src/cron/executor.js.map +0 -1
- package/dist/src/cron/index.d.ts +0 -7
- package/dist/src/cron/index.js +0 -7
- package/dist/src/cron/job-content.d.ts +0 -5
- package/dist/src/cron/job-content.js +0 -15
- package/dist/src/cron/job-content.js.map +0 -1
- package/dist/src/cron/run-log-store.d.ts +0 -12
- package/dist/src/cron/run-log-store.js +0 -58
- package/dist/src/cron/run-log-store.js.map +0 -1
- package/dist/src/cron/schedule.d.ts +0 -10
- package/dist/src/cron/schedule.js +0 -85
- package/dist/src/cron/schedule.js.map +0 -1
- package/dist/src/cron/service.d.ts +0 -58
- package/dist/src/cron/service.js +0 -419
- package/dist/src/cron/service.js.map +0 -1
- package/dist/src/cron/types.d.ts +0 -183
- package/dist/src/cron/validation.d.ts +0 -500
- package/dist/src/cron/validation.js +0 -192
- package/dist/src/cron/validation.js.map +0 -1
- package/dist/src/cron/workflow-run-completion.d.ts +0 -23
- package/dist/src/cron/workflow-run-completion.js +0 -72
- package/dist/src/cron/workflow-run-completion.js.map +0 -1
- package/dist/src/extensions/types/phase4.js +0 -1
- package/dist/src/gateway/hono/routes/cron.d.ts +0 -3
- package/dist/src/gateway/hono/routes/cron.js +0 -109
- package/dist/src/gateway/hono/routes/cron.js.map +0 -1
- package/dist/src/storage/sqlite/cron-job-repository.d.ts +0 -6
- package/dist/src/storage/sqlite/cron-job-repository.js +0 -70
- package/dist/src/storage/sqlite/cron-job-repository.js.map +0 -1
- package/dist/src/storage/sqlite/cron-run-repository.d.ts +0 -5
- package/dist/src/storage/sqlite/cron-run-repository.js +0 -96
- package/dist/src/storage/sqlite/cron-run-repository.js.map +0 -1
- /package/dist/src/{cron → automations/domain}/types.js +0 -0
- /package/dist/src/{config/defaults.d.ts → automations/draft/automation-draft.types.js} +0 -0
- /package/dist/src/{config/defaults.js → extensions/types/registration.js} +0 -0
- /package/dist/src/{cron/execution-types.js → migrations/types.js} +0 -0
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { CronExpressionParser } from "cron-parser";
|
|
3
|
-
//#region src/cron/validation.ts
|
|
4
|
-
const nonEmptyString = z.string().trim().min(1);
|
|
5
|
-
const optionalTrimmedString = (max) => z.preprocess((v) => {
|
|
6
|
-
if (v === void 0) return void 0;
|
|
7
|
-
if (v === null) return v;
|
|
8
|
-
if (typeof v !== "string") return v;
|
|
9
|
-
const t = v.trim();
|
|
10
|
-
return t.length === 0 ? void 0 : t;
|
|
11
|
-
}, z.string().min(1).max(max).optional());
|
|
12
|
-
const CronScheduleSchema = z.discriminatedUnion("kind", [
|
|
13
|
-
z.object({
|
|
14
|
-
kind: z.literal("at"),
|
|
15
|
-
at: nonEmptyString
|
|
16
|
-
}).strict(),
|
|
17
|
-
z.object({
|
|
18
|
-
kind: z.literal("every"),
|
|
19
|
-
everyMs: z.number().int().min(1),
|
|
20
|
-
anchorMs: z.number().int().nonnegative().optional()
|
|
21
|
-
}).strict(),
|
|
22
|
-
z.object({
|
|
23
|
-
kind: z.literal("cron"),
|
|
24
|
-
expr: nonEmptyString.superRefine((val, ctx) => {
|
|
25
|
-
try {
|
|
26
|
-
CronExpressionParser.parse(val);
|
|
27
|
-
} catch {
|
|
28
|
-
ctx.addIssue({
|
|
29
|
-
code: z.ZodIssueCode.custom,
|
|
30
|
-
message: `Invalid cron expression: ${val}`
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}),
|
|
34
|
-
tz: optionalTrimmedString(100),
|
|
35
|
-
staggerMs: z.number().int().nonnegative().optional()
|
|
36
|
-
}).strict()
|
|
37
|
-
]);
|
|
38
|
-
const CronDeliverySchema = z.discriminatedUnion("mode", [
|
|
39
|
-
z.object({ mode: z.literal("none") }).strict(),
|
|
40
|
-
z.object({
|
|
41
|
-
mode: z.literal("announce"),
|
|
42
|
-
channel: optionalTrimmedString(32),
|
|
43
|
-
to: optionalTrimmedString(200),
|
|
44
|
-
accountId: optionalTrimmedString(100),
|
|
45
|
-
threadId: z.union([z.string(), z.number()]).optional(),
|
|
46
|
-
bestEffort: z.boolean().optional(),
|
|
47
|
-
completionDestination: z.object({
|
|
48
|
-
mode: z.literal("webhook"),
|
|
49
|
-
to: nonEmptyString
|
|
50
|
-
}).strict().optional(),
|
|
51
|
-
failureDestination: z.object({
|
|
52
|
-
mode: z.enum(["announce", "webhook"]).optional(),
|
|
53
|
-
channel: optionalTrimmedString(32),
|
|
54
|
-
to: optionalTrimmedString(500),
|
|
55
|
-
accountId: optionalTrimmedString(100)
|
|
56
|
-
}).strict().optional()
|
|
57
|
-
}).strict(),
|
|
58
|
-
z.object({
|
|
59
|
-
mode: z.literal("webhook"),
|
|
60
|
-
to: nonEmptyString,
|
|
61
|
-
bestEffort: z.boolean().optional()
|
|
62
|
-
}).strict()
|
|
63
|
-
]);
|
|
64
|
-
const CronSystemEventPayloadSchema = z.object({
|
|
65
|
-
kind: z.literal("systemEvent"),
|
|
66
|
-
text: z.string().min(1).max(5e4)
|
|
67
|
-
}).strict();
|
|
68
|
-
const CronAgentTurnPayloadSchema = z.object({
|
|
69
|
-
kind: z.literal("agentTurn"),
|
|
70
|
-
message: z.string().min(1).max(5e4),
|
|
71
|
-
model: optionalTrimmedString(100),
|
|
72
|
-
thinking: optionalTrimmedString(50),
|
|
73
|
-
toolsAllow: z.array(z.string().trim().min(1)).optional(),
|
|
74
|
-
timeoutSeconds: z.number().int().min(1).max(86400).optional()
|
|
75
|
-
}).strict();
|
|
76
|
-
const CronGoalContinuePayloadSchema = z.object({
|
|
77
|
-
kind: z.literal("goalContinue"),
|
|
78
|
-
goalId: nonEmptyString.max(100),
|
|
79
|
-
message: optionalTrimmedString(5e4),
|
|
80
|
-
maxRetries: z.number().int().min(0).max(10).optional()
|
|
81
|
-
}).strict();
|
|
82
|
-
const WorkflowRunInputEnvelopeSchema = z.object({
|
|
83
|
-
payload: z.unknown(),
|
|
84
|
-
goal: optionalTrimmedString(5e3),
|
|
85
|
-
variables: z.record(z.string(), z.unknown()).optional(),
|
|
86
|
-
context: z.record(z.string(), z.unknown()).optional()
|
|
87
|
-
}).strict();
|
|
88
|
-
const CronWorkflowRunPayloadSchema = z.object({
|
|
89
|
-
kind: z.literal("workflowRun"),
|
|
90
|
-
definitionId: nonEmptyString.max(200),
|
|
91
|
-
input: z.unknown().optional(),
|
|
92
|
-
inputEnvelope: WorkflowRunInputEnvelopeSchema.optional(),
|
|
93
|
-
goal: optionalTrimmedString(5e3),
|
|
94
|
-
agentId: optionalTrimmedString(64),
|
|
95
|
-
sessionKey: optionalTrimmedString(300),
|
|
96
|
-
maxRetries: z.number().int().min(0).max(10).optional(),
|
|
97
|
-
waitForCompletion: z.boolean().optional(),
|
|
98
|
-
source: z.object({
|
|
99
|
-
kind: z.literal("cron").optional(),
|
|
100
|
-
scheduleId: optionalTrimmedString(200),
|
|
101
|
-
fireId: optionalTrimmedString(200),
|
|
102
|
-
scheduledAtMs: z.number().int().nonnegative().optional()
|
|
103
|
-
}).strict().optional()
|
|
104
|
-
}).strict();
|
|
105
|
-
const CronPayloadSchema = z.discriminatedUnion("kind", [
|
|
106
|
-
CronSystemEventPayloadSchema,
|
|
107
|
-
CronAgentTurnPayloadSchema,
|
|
108
|
-
CronGoalContinuePayloadSchema,
|
|
109
|
-
CronWorkflowRunPayloadSchema
|
|
110
|
-
]);
|
|
111
|
-
const CronFailureAlertSchema = z.object({
|
|
112
|
-
after: z.number().int().min(1).optional(),
|
|
113
|
-
cooldownMs: z.number().int().nonnegative().optional(),
|
|
114
|
-
includeSkipped: z.boolean().optional(),
|
|
115
|
-
mode: z.enum(["announce", "webhook"]).optional(),
|
|
116
|
-
channel: optionalTrimmedString(32),
|
|
117
|
-
to: optionalTrimmedString(500),
|
|
118
|
-
accountId: optionalTrimmedString(100)
|
|
119
|
-
}).strict();
|
|
120
|
-
const JobStateSchema = z.object({
|
|
121
|
-
nextRunAtMs: z.number().int().nonnegative().optional(),
|
|
122
|
-
runningAtMs: z.number().int().nonnegative().optional(),
|
|
123
|
-
runningSessionKey: optionalTrimmedString(300),
|
|
124
|
-
lastRunAtMs: z.number().int().nonnegative().optional(),
|
|
125
|
-
lastRunStatus: z.enum([
|
|
126
|
-
"ok",
|
|
127
|
-
"error",
|
|
128
|
-
"skipped"
|
|
129
|
-
]).optional(),
|
|
130
|
-
lastError: z.string().optional(),
|
|
131
|
-
lastDurationMs: z.number().int().nonnegative().optional(),
|
|
132
|
-
consecutiveErrors: z.number().int().nonnegative().optional(),
|
|
133
|
-
consecutiveSkipped: z.number().int().nonnegative().optional(),
|
|
134
|
-
lastDeliveryStatus: z.enum([
|
|
135
|
-
"delivered",
|
|
136
|
-
"not-delivered",
|
|
137
|
-
"unknown",
|
|
138
|
-
"not-requested"
|
|
139
|
-
]).optional(),
|
|
140
|
-
lastDeliveryError: z.string().optional(),
|
|
141
|
-
lastFailureAlertAtMs: z.number().int().nonnegative().optional()
|
|
142
|
-
}).strict();
|
|
143
|
-
const JobDataSchema = z.object({
|
|
144
|
-
id: nonEmptyString.max(64),
|
|
145
|
-
name: nonEmptyString.max(200),
|
|
146
|
-
description: z.string().max(2e3).optional(),
|
|
147
|
-
enabled: z.boolean(),
|
|
148
|
-
deleteAfterRun: z.boolean().optional(),
|
|
149
|
-
createdAtMs: z.number().int().nonnegative(),
|
|
150
|
-
updatedAtMs: z.number().int().nonnegative(),
|
|
151
|
-
schedule: CronScheduleSchema,
|
|
152
|
-
sessionTarget: z.union([
|
|
153
|
-
z.literal("main"),
|
|
154
|
-
z.literal("isolated"),
|
|
155
|
-
z.literal("current"),
|
|
156
|
-
z.string().regex(/^session:.+$/)
|
|
157
|
-
]),
|
|
158
|
-
wakeMode: z.enum(["now", "next-heartbeat"]),
|
|
159
|
-
agentId: optionalTrimmedString(64),
|
|
160
|
-
sessionKey: optionalTrimmedString(300),
|
|
161
|
-
workingDirectory: optionalTrimmedString(4096),
|
|
162
|
-
payload: CronPayloadSchema,
|
|
163
|
-
delivery: CronDeliverySchema.optional(),
|
|
164
|
-
failureAlert: z.union([z.literal(false), CronFailureAlertSchema]).optional(),
|
|
165
|
-
state: JobStateSchema.default({})
|
|
166
|
-
}).strict();
|
|
167
|
-
const AddJobRequestSchema = JobDataSchema.omit({
|
|
168
|
-
id: true,
|
|
169
|
-
name: true,
|
|
170
|
-
enabled: true,
|
|
171
|
-
createdAtMs: true,
|
|
172
|
-
updatedAtMs: true,
|
|
173
|
-
sessionTarget: true,
|
|
174
|
-
wakeMode: true,
|
|
175
|
-
state: true
|
|
176
|
-
}).extend({
|
|
177
|
-
id: optionalTrimmedString(64),
|
|
178
|
-
name: optionalTrimmedString(200),
|
|
179
|
-
enabled: z.boolean().optional(),
|
|
180
|
-
sessionTarget: JobDataSchema.shape.sessionTarget.optional(),
|
|
181
|
-
wakeMode: JobDataSchema.shape.wakeMode.optional(),
|
|
182
|
-
state: JobStateSchema.partial().optional()
|
|
183
|
-
});
|
|
184
|
-
const UpdateJobRequestSchema = JobDataSchema.omit({
|
|
185
|
-
id: true,
|
|
186
|
-
createdAtMs: true,
|
|
187
|
-
updatedAtMs: true
|
|
188
|
-
}).partial().refine((data) => Object.keys(data).length > 0, { message: "At least one field must be provided for update" });
|
|
189
|
-
//#endregion
|
|
190
|
-
export { AddJobRequestSchema, CronDeliverySchema, CronFailureAlertSchema, CronPayloadSchema, CronScheduleSchema, JobDataSchema, JobStateSchema, UpdateJobRequestSchema };
|
|
191
|
-
|
|
192
|
-
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","names":[],"sources":["../../../src/cron/validation.ts"],"sourcesContent":["import { CronExpressionParser } from 'cron-parser';\nimport { z } from 'zod';\n\nconst nonEmptyString = z.string().trim().min(1);\n\nconst optionalTrimmedString = (max: number) =>\n z.preprocess((v) => {\n if (v === undefined) return undefined;\n if (v === null) return v;\n if (typeof v !== 'string') return v;\n const t = v.trim();\n return t.length === 0 ? undefined : t;\n }, z.string().min(1).max(max).optional());\n\nexport const CronScheduleSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('at'),\n at: nonEmptyString,\n }).strict(),\n z.object({\n kind: z.literal('every'),\n everyMs: z.number().int().min(1),\n anchorMs: z.number().int().nonnegative().optional(),\n }).strict(),\n z.object({\n kind: z.literal('cron'),\n expr: nonEmptyString.superRefine((val, ctx) => {\n try {\n CronExpressionParser.parse(val);\n } catch {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Invalid cron expression: ${val}`,\n });\n }\n }),\n tz: optionalTrimmedString(100),\n staggerMs: z.number().int().nonnegative().optional(),\n }).strict(),\n]);\n\nexport const CronDeliverySchema = z.discriminatedUnion('mode', [\n z.object({ mode: z.literal('none') }).strict(),\n z.object({\n mode: z.literal('announce'),\n channel: optionalTrimmedString(32),\n to: optionalTrimmedString(200),\n accountId: optionalTrimmedString(100),\n threadId: z.union([z.string(), z.number()]).optional(),\n bestEffort: z.boolean().optional(),\n completionDestination: z.object({\n mode: z.literal('webhook'),\n to: nonEmptyString,\n }).strict().optional(),\n failureDestination: z.object({\n mode: z.enum(['announce', 'webhook']).optional(),\n channel: optionalTrimmedString(32),\n to: optionalTrimmedString(500),\n accountId: optionalTrimmedString(100),\n }).strict().optional(),\n }).strict(),\n z.object({\n mode: z.literal('webhook'),\n to: nonEmptyString,\n bestEffort: z.boolean().optional(),\n }).strict(),\n]);\n\nconst CronSystemEventPayloadSchema = z.object({\n kind: z.literal('systemEvent'),\n text: z.string().min(1).max(50000),\n}).strict();\n\nconst CronAgentTurnPayloadSchema = z.object({\n kind: z.literal('agentTurn'),\n message: z.string().min(1).max(50000),\n model: optionalTrimmedString(100),\n thinking: optionalTrimmedString(50),\n toolsAllow: z.array(z.string().trim().min(1)).optional(),\n timeoutSeconds: z.number().int().min(1).max(86400).optional(),\n}).strict();\n\nconst CronGoalContinuePayloadSchema = z.object({\n kind: z.literal('goalContinue'),\n goalId: nonEmptyString.max(100),\n message: optionalTrimmedString(50000),\n maxRetries: z.number().int().min(0).max(10).optional(),\n}).strict();\n\nconst WorkflowRunInputEnvelopeSchema = z.object({\n payload: z.unknown(),\n goal: optionalTrimmedString(5000),\n variables: z.record(z.string(), z.unknown()).optional(),\n context: z.record(z.string(), z.unknown()).optional(),\n}).strict();\n\nconst CronWorkflowRunPayloadSchema = z.object({\n kind: z.literal('workflowRun'),\n definitionId: nonEmptyString.max(200),\n input: z.unknown().optional(),\n inputEnvelope: WorkflowRunInputEnvelopeSchema.optional(),\n goal: optionalTrimmedString(5000),\n agentId: optionalTrimmedString(64),\n sessionKey: optionalTrimmedString(300),\n maxRetries: z.number().int().min(0).max(10).optional(),\n waitForCompletion: z.boolean().optional(),\n source: z.object({\n kind: z.literal('cron').optional(),\n scheduleId: optionalTrimmedString(200),\n fireId: optionalTrimmedString(200),\n scheduledAtMs: z.number().int().nonnegative().optional(),\n }).strict().optional(),\n}).strict();\n\nexport const CronPayloadSchema = z.discriminatedUnion('kind', [\n CronSystemEventPayloadSchema,\n CronAgentTurnPayloadSchema,\n CronGoalContinuePayloadSchema,\n CronWorkflowRunPayloadSchema,\n]);\n\nexport const CronFailureAlertSchema = z.object({\n after: z.number().int().min(1).optional(),\n cooldownMs: z.number().int().nonnegative().optional(),\n includeSkipped: z.boolean().optional(),\n mode: z.enum(['announce', 'webhook']).optional(),\n channel: optionalTrimmedString(32),\n to: optionalTrimmedString(500),\n accountId: optionalTrimmedString(100),\n}).strict();\n\nexport const JobStateSchema = z.object({\n nextRunAtMs: z.number().int().nonnegative().optional(),\n runningAtMs: z.number().int().nonnegative().optional(),\n runningSessionKey: optionalTrimmedString(300),\n lastRunAtMs: z.number().int().nonnegative().optional(),\n lastRunStatus: z.enum(['ok', 'error', 'skipped']).optional(),\n lastError: z.string().optional(),\n lastDurationMs: z.number().int().nonnegative().optional(),\n consecutiveErrors: z.number().int().nonnegative().optional(),\n consecutiveSkipped: z.number().int().nonnegative().optional(),\n lastDeliveryStatus: z.enum(['delivered', 'not-delivered', 'unknown', 'not-requested']).optional(),\n lastDeliveryError: z.string().optional(),\n lastFailureAlertAtMs: z.number().int().nonnegative().optional(),\n}).strict();\n\nexport const JobDataSchema = z.object({\n id: nonEmptyString.max(64),\n name: nonEmptyString.max(200),\n description: z.string().max(2000).optional(),\n enabled: z.boolean(),\n deleteAfterRun: z.boolean().optional(),\n createdAtMs: z.number().int().nonnegative(),\n updatedAtMs: z.number().int().nonnegative(),\n schedule: CronScheduleSchema,\n sessionTarget: z.union([\n z.literal('main'),\n z.literal('isolated'),\n z.literal('current'),\n z.string().regex(/^session:.+$/),\n ]),\n wakeMode: z.enum(['now', 'next-heartbeat']),\n agentId: optionalTrimmedString(64),\n sessionKey: optionalTrimmedString(300),\n workingDirectory: optionalTrimmedString(4096),\n payload: CronPayloadSchema,\n delivery: CronDeliverySchema.optional(),\n failureAlert: z.union([z.literal(false), CronFailureAlertSchema]).optional(),\n state: JobStateSchema.default({}),\n}).strict();\n\nexport const AddJobRequestSchema = JobDataSchema.omit({\n id: true,\n name: true,\n enabled: true,\n createdAtMs: true,\n updatedAtMs: true,\n sessionTarget: true,\n wakeMode: true,\n state: true,\n}).extend({\n id: optionalTrimmedString(64),\n name: optionalTrimmedString(200),\n enabled: z.boolean().optional(),\n sessionTarget: JobDataSchema.shape.sessionTarget.optional(),\n wakeMode: JobDataSchema.shape.wakeMode.optional(),\n state: JobStateSchema.partial().optional(),\n});\n\nexport const UpdateJobRequestSchema = JobDataSchema.omit({\n id: true,\n createdAtMs: true,\n updatedAtMs: true,\n}).partial().refine(\n (data) => Object.keys(data).length > 0,\n { message: 'At least one field must be provided for update' },\n);\n\nexport type ValidatedJobData = z.infer<typeof JobDataSchema>;\nexport type ValidatedAddJobRequest = z.infer<typeof AddJobRequestSchema>;\nexport type ValidatedUpdateJobRequest = z.infer<typeof UpdateJobRequestSchema>;\nexport type ValidatedCronPayload = z.infer<typeof CronPayloadSchema>;\nexport type ValidatedCronDelivery = z.infer<typeof CronDeliverySchema>;\n"],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { WorkflowRunView } from '../workflows/domain/index.js';
|
|
2
|
-
/** Default wait budget for cron workflow runs (35 minutes). */
|
|
3
|
-
export declare const DEFAULT_WORKFLOW_CRON_WAIT_MS: number;
|
|
4
|
-
export declare const WORKFLOW_CRON_POLL_MS = 3000;
|
|
5
|
-
export declare function resolveWorkflowCronWaitMs(jobTimeoutMs: number | undefined): number;
|
|
6
|
-
export declare function waitForWorkflowRunView(params: {
|
|
7
|
-
readView: (runId: string) => Promise<WorkflowRunView | null>;
|
|
8
|
-
runId: string;
|
|
9
|
-
signal: AbortSignal;
|
|
10
|
-
timeoutMs: number;
|
|
11
|
-
pollIntervalMs?: number;
|
|
12
|
-
}): Promise<{
|
|
13
|
-
kind: 'terminal';
|
|
14
|
-
view: WorkflowRunView;
|
|
15
|
-
} | {
|
|
16
|
-
kind: 'timeout';
|
|
17
|
-
lastView: WorkflowRunView | null;
|
|
18
|
-
} | {
|
|
19
|
-
kind: 'aborted';
|
|
20
|
-
}>;
|
|
21
|
-
export declare function buildWorkflowRunCronSummary(view: WorkflowRunView): string;
|
|
22
|
-
export declare function isWorkflowRunCronSuccess(view: WorkflowRunView): boolean;
|
|
23
|
-
export declare function buildWorkflowRunDeliveryText(view: WorkflowRunView): string;
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { renderWorkflowText } from "../agent/workflow/snapshot.js";
|
|
2
|
-
import { runViewToSnapshot } from "../workflows/service/run-view-to-snapshot.js";
|
|
3
|
-
import { isTerminalWorkflowRunStatus } from "../workflows/domain/run.js";
|
|
4
|
-
import "../workflows/domain/index.js";
|
|
5
|
-
//#region src/cron/workflow-run-completion.ts
|
|
6
|
-
/** Default wait budget for cron workflow runs (35 minutes). */
|
|
7
|
-
const DEFAULT_WORKFLOW_CRON_WAIT_MS = 2100 * 1e3;
|
|
8
|
-
const WORKFLOW_CRON_POLL_MS = 3e3;
|
|
9
|
-
function resolveWorkflowCronWaitMs(jobTimeoutMs) {
|
|
10
|
-
return Math.max(jobTimeoutMs && Number.isFinite(jobTimeoutMs) ? jobTimeoutMs : 0, DEFAULT_WORKFLOW_CRON_WAIT_MS);
|
|
11
|
-
}
|
|
12
|
-
async function waitForWorkflowRunView(params) {
|
|
13
|
-
const pollIntervalMs = params.pollIntervalMs ?? 3e3;
|
|
14
|
-
const deadline = Date.now() + params.timeoutMs;
|
|
15
|
-
let lastView = null;
|
|
16
|
-
while (Date.now() < deadline) {
|
|
17
|
-
if (params.signal.aborted) return { kind: "aborted" };
|
|
18
|
-
const view = await params.readView(params.runId);
|
|
19
|
-
if (view) {
|
|
20
|
-
lastView = view;
|
|
21
|
-
if (isTerminalWorkflowRunStatus(view.run.status)) return {
|
|
22
|
-
kind: "terminal",
|
|
23
|
-
view
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
await sleep(pollIntervalMs, params.signal);
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
29
|
-
kind: "timeout",
|
|
30
|
-
lastView
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
function buildWorkflowRunCronSummary(view) {
|
|
34
|
-
const status = view.run.status;
|
|
35
|
-
const label = view.run.goal.trim() || view.run.definitionId;
|
|
36
|
-
if (status === "succeeded") return `Workflow ${view.run.definitionId} succeeded: ${label}`;
|
|
37
|
-
if (status === "failed") {
|
|
38
|
-
const detail = view.run.error?.message?.trim();
|
|
39
|
-
return detail ? `Workflow ${view.run.definitionId} failed: ${detail}` : `Workflow ${view.run.definitionId} failed`;
|
|
40
|
-
}
|
|
41
|
-
if (status === "timeout") return `Workflow ${view.run.definitionId} timed out`;
|
|
42
|
-
if (status === "cancelled") return `Workflow ${view.run.definitionId} cancelled`;
|
|
43
|
-
return `Workflow ${view.run.definitionId} finished (${status})`;
|
|
44
|
-
}
|
|
45
|
-
function isWorkflowRunCronSuccess(view) {
|
|
46
|
-
return view.run.status === "succeeded";
|
|
47
|
-
}
|
|
48
|
-
function buildWorkflowRunDeliveryText(view) {
|
|
49
|
-
const body = renderWorkflowText(runViewToSnapshot(view), view.run.status === "succeeded", { showResultPreviews: true });
|
|
50
|
-
return `${buildWorkflowRunCronSummary(view)}\n\n${body}`;
|
|
51
|
-
}
|
|
52
|
-
function sleep(ms, signal) {
|
|
53
|
-
return new Promise((resolve, reject) => {
|
|
54
|
-
if (signal.aborted) {
|
|
55
|
-
reject(/* @__PURE__ */ new Error("aborted"));
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
const timer = setTimeout(resolve, ms);
|
|
59
|
-
const onAbort = () => {
|
|
60
|
-
clearTimeout(timer);
|
|
61
|
-
reject(/* @__PURE__ */ new Error("aborted"));
|
|
62
|
-
};
|
|
63
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
64
|
-
}).catch((err) => {
|
|
65
|
-
if (signal.aborted || err instanceof Error && err.message === "aborted") return;
|
|
66
|
-
throw err;
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
//#endregion
|
|
70
|
-
export { DEFAULT_WORKFLOW_CRON_WAIT_MS, WORKFLOW_CRON_POLL_MS, buildWorkflowRunCronSummary, buildWorkflowRunDeliveryText, isWorkflowRunCronSuccess, resolveWorkflowCronWaitMs, waitForWorkflowRunView };
|
|
71
|
-
|
|
72
|
-
//# sourceMappingURL=workflow-run-completion.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-run-completion.js","names":[],"sources":["../../../src/cron/workflow-run-completion.ts"],"sourcesContent":["import { renderWorkflowText } from '../agent/workflow/snapshot.js';\nimport type { WorkflowRunView } from '../workflows/domain/index.js';\nimport { isTerminalWorkflowRunStatus } from '../workflows/domain/index.js';\nimport { runViewToSnapshot } from '../workflows/service/run-view-to-snapshot.js';\n\n/** Default wait budget for cron workflow runs (35 minutes). */\nexport const DEFAULT_WORKFLOW_CRON_WAIT_MS = 35 * 60 * 1000;\nexport const WORKFLOW_CRON_POLL_MS = 3000;\n\nexport function resolveWorkflowCronWaitMs(jobTimeoutMs: number | undefined): number {\n const configured = jobTimeoutMs && Number.isFinite(jobTimeoutMs) ? jobTimeoutMs : 0;\n return Math.max(configured, DEFAULT_WORKFLOW_CRON_WAIT_MS);\n}\n\nexport async function waitForWorkflowRunView(params: {\n readView: (runId: string) => Promise<WorkflowRunView | null>;\n runId: string;\n signal: AbortSignal;\n timeoutMs: number;\n pollIntervalMs?: number;\n}): Promise<\n | { kind: 'terminal'; view: WorkflowRunView }\n | { kind: 'timeout'; lastView: WorkflowRunView | null }\n | { kind: 'aborted' }\n> {\n const pollIntervalMs = params.pollIntervalMs ?? WORKFLOW_CRON_POLL_MS;\n const deadline = Date.now() + params.timeoutMs;\n let lastView: WorkflowRunView | null = null;\n\n while (Date.now() < deadline) {\n if (params.signal.aborted) {\n return { kind: 'aborted' };\n }\n\n const view = await params.readView(params.runId);\n if (view) {\n lastView = view;\n if (isTerminalWorkflowRunStatus(view.run.status)) {\n return { kind: 'terminal', view };\n }\n }\n\n await sleep(pollIntervalMs, params.signal);\n }\n\n return { kind: 'timeout', lastView };\n}\n\nexport function buildWorkflowRunCronSummary(view: WorkflowRunView): string {\n const status = view.run.status;\n const label = view.run.goal.trim() || view.run.definitionId;\n if (status === 'succeeded') {\n return `Workflow ${view.run.definitionId} succeeded: ${label}`;\n }\n if (status === 'failed') {\n const detail = view.run.error?.message?.trim();\n return detail\n ? `Workflow ${view.run.definitionId} failed: ${detail}`\n : `Workflow ${view.run.definitionId} failed`;\n }\n if (status === 'timeout') {\n return `Workflow ${view.run.definitionId} timed out`;\n }\n if (status === 'cancelled') {\n return `Workflow ${view.run.definitionId} cancelled`;\n }\n return `Workflow ${view.run.definitionId} finished (${status})`;\n}\n\nexport function isWorkflowRunCronSuccess(view: WorkflowRunView): boolean {\n return view.run.status === 'succeeded';\n}\n\nexport function buildWorkflowRunDeliveryText(view: WorkflowRunView): string {\n const snapshot = runViewToSnapshot(view);\n const completed = view.run.status === 'succeeded';\n const body = renderWorkflowText(snapshot, completed, { showResultPreviews: true });\n const header = buildWorkflowRunCronSummary(view);\n return `${header}\\n\\n${body}`;\n}\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (signal.aborted) {\n reject(new Error('aborted'));\n return;\n }\n const timer = setTimeout(resolve, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(new Error('aborted'));\n };\n signal.addEventListener('abort', onAbort, { once: true });\n }).catch((err) => {\n if (signal.aborted || (err instanceof Error && err.message === 'aborted')) {\n return;\n }\n throw err;\n });\n}\n"],"mappings":";;;;;;AAMA,MAAa,gCAAgC,OAAU;AACvD,MAAa,wBAAwB;AAErC,SAAgB,0BAA0B,cAA0C;AAElF,QAAO,KAAK,IADO,gBAAgB,OAAO,SAAS,aAAa,GAAG,eAAe,GACtD,8BAA8B;;AAG5D,eAAsB,uBAAuB,QAU3C;CACA,MAAM,iBAAiB,OAAO,kBAAA;CAC9B,MAAM,WAAW,KAAK,KAAK,GAAG,OAAO;CACrC,IAAI,WAAmC;AAEvC,QAAO,KAAK,KAAK,GAAG,UAAU;AAC5B,MAAI,OAAO,OAAO,QAChB,QAAO,EAAE,MAAM,WAAW;EAG5B,MAAM,OAAO,MAAM,OAAO,SAAS,OAAO,MAAM;AAChD,MAAI,MAAM;AACR,cAAW;AACX,OAAI,4BAA4B,KAAK,IAAI,OAAO,CAC9C,QAAO;IAAE,MAAM;IAAY;IAAM;;AAIrC,QAAM,MAAM,gBAAgB,OAAO,OAAO;;AAG5C,QAAO;EAAE,MAAM;EAAW;EAAU;;AAGtC,SAAgB,4BAA4B,MAA+B;CACzE,MAAM,SAAS,KAAK,IAAI;CACxB,MAAM,QAAQ,KAAK,IAAI,KAAK,MAAM,IAAI,KAAK,IAAI;AAC/C,KAAI,WAAW,YACb,QAAO,YAAY,KAAK,IAAI,aAAa,cAAc;AAEzD,KAAI,WAAW,UAAU;EACvB,MAAM,SAAS,KAAK,IAAI,OAAO,SAAS,MAAM;AAC9C,SAAO,SACH,YAAY,KAAK,IAAI,aAAa,WAAW,WAC7C,YAAY,KAAK,IAAI,aAAa;;AAExC,KAAI,WAAW,UACb,QAAO,YAAY,KAAK,IAAI,aAAa;AAE3C,KAAI,WAAW,YACb,QAAO,YAAY,KAAK,IAAI,aAAa;AAE3C,QAAO,YAAY,KAAK,IAAI,aAAa,aAAa,OAAO;;AAG/D,SAAgB,yBAAyB,MAAgC;AACvE,QAAO,KAAK,IAAI,WAAW;;AAG7B,SAAgB,6BAA6B,MAA+B;CAG1E,MAAM,OAAO,mBAFI,kBAAkB,KAEK,EADtB,KAAK,IAAI,WAAW,aACe,EAAE,oBAAoB,MAAM,CAAC;AAElF,QAAO,GADQ,4BAA4B,KAC3B,CAAC,MAAM;;AAGzB,SAAS,MAAM,IAAY,QAAoC;AAC7D,QAAO,IAAI,SAAe,SAAS,WAAW;AAC5C,MAAI,OAAO,SAAS;AAClB,0BAAO,IAAI,MAAM,UAAU,CAAC;AAC5B;;EAEF,MAAM,QAAQ,WAAW,SAAS,GAAG;EACrC,MAAM,gBAAgB;AACpB,gBAAa,MAAM;AACnB,0BAAO,IAAI,MAAM,UAAU,CAAC;;AAE9B,SAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,MAAM,CAAC;GACzD,CAAC,OAAO,QAAQ;AAChB,MAAI,OAAO,WAAY,eAAe,SAAS,IAAI,YAAY,UAC7D;AAEF,QAAM;GACN"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { CronJobAlreadyRunningError } from "../../../cron/service.js";
|
|
2
|
-
import { createGatewayRouteLogger, logRouteError } from "../lib/route-logger.js";
|
|
3
|
-
//#region src/gateway/hono/routes/cron.ts
|
|
4
|
-
const log = createGatewayRouteLogger("Cron");
|
|
5
|
-
function registerCronRoutes(authenticated, deps) {
|
|
6
|
-
const { service } = deps;
|
|
7
|
-
authenticated.get("/api/cron", async (c) => {
|
|
8
|
-
const jobs = await service.cronServiceInstance.listJobs();
|
|
9
|
-
return c.json({ jobs });
|
|
10
|
-
});
|
|
11
|
-
authenticated.post("/api/cron", async (c) => {
|
|
12
|
-
const { schedule, name, description, sessionTarget, wakeMode, agentId, workingDirectory, delivery, payload, failureAlert, deleteAfterRun } = await c.req.json();
|
|
13
|
-
if (!schedule || !payload) return c.json({ error: "Missing required fields: schedule, payload" }, 400);
|
|
14
|
-
try {
|
|
15
|
-
const result = await service.cronServiceInstance.addJob(schedule, {
|
|
16
|
-
name,
|
|
17
|
-
description,
|
|
18
|
-
sessionTarget,
|
|
19
|
-
wakeMode,
|
|
20
|
-
...typeof agentId === "string" && agentId.trim() ? { agentId: agentId.trim() } : {},
|
|
21
|
-
...typeof workingDirectory === "string" && workingDirectory.trim() ? { workingDirectory: workingDirectory.trim() } : {},
|
|
22
|
-
...typeof deleteAfterRun === "boolean" ? { deleteAfterRun } : {},
|
|
23
|
-
delivery,
|
|
24
|
-
failureAlert,
|
|
25
|
-
payload
|
|
26
|
-
});
|
|
27
|
-
return c.json(result, 201);
|
|
28
|
-
} catch (err) {
|
|
29
|
-
logRouteError(log, c, err, "gateway.route.cron", { operation: "addJob" });
|
|
30
|
-
return c.json({ error: err instanceof Error ? err.message : "Failed to add job" }, 400);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
authenticated.get("/api/cron/metrics", async (c) => {
|
|
34
|
-
const metrics = await service.cronServiceInstance.getMetrics();
|
|
35
|
-
return c.json(metrics);
|
|
36
|
-
});
|
|
37
|
-
authenticated.get("/api/cron/runs/history", async (c) => {
|
|
38
|
-
const raw = c.req.query("limit");
|
|
39
|
-
const limit = raw ? parseInt(raw, 10) : 50;
|
|
40
|
-
const runs = await service.cronServiceInstance.getAllRunsHistory(Number.isFinite(limit) ? limit : 50);
|
|
41
|
-
return c.json({ runs });
|
|
42
|
-
});
|
|
43
|
-
authenticated.get("/api/cron/:id", async (c) => {
|
|
44
|
-
const id = c.req.param("id");
|
|
45
|
-
const job = await service.cronServiceInstance.getJob(id);
|
|
46
|
-
if (!job) return c.json({ error: "Job not found" }, 404);
|
|
47
|
-
return c.json({ job });
|
|
48
|
-
});
|
|
49
|
-
authenticated.post("/api/cron/:id/toggle", async (c) => {
|
|
50
|
-
const id = c.req.param("id");
|
|
51
|
-
const { enabled } = await c.req.json();
|
|
52
|
-
if (typeof enabled !== "boolean") return c.json({ error: "Missing required field: enabled" }, 400);
|
|
53
|
-
const result = await service.cronServiceInstance.toggleJob(id, enabled);
|
|
54
|
-
return c.json({ toggled: result });
|
|
55
|
-
});
|
|
56
|
-
authenticated.post("/api/cron/:id/run", async (c) => {
|
|
57
|
-
const id = c.req.param("id");
|
|
58
|
-
try {
|
|
59
|
-
const result = await service.cronServiceInstance.runJobNow(id);
|
|
60
|
-
return c.json({
|
|
61
|
-
triggered: true,
|
|
62
|
-
job: result.job,
|
|
63
|
-
history: result.history
|
|
64
|
-
});
|
|
65
|
-
} catch (err) {
|
|
66
|
-
if (err instanceof CronJobAlreadyRunningError) {
|
|
67
|
-
log.info({
|
|
68
|
-
jobId: err.jobId,
|
|
69
|
-
runningSessionKey: err.runningSessionKey
|
|
70
|
-
}, "Cron job run requested while already running");
|
|
71
|
-
return c.json({
|
|
72
|
-
error: err.message,
|
|
73
|
-
code: "job_already_running",
|
|
74
|
-
jobId: err.jobId,
|
|
75
|
-
runningSessionKey: err.runningSessionKey
|
|
76
|
-
}, 409);
|
|
77
|
-
}
|
|
78
|
-
logRouteError(log, c, err, "gateway.route.cron", { operation: "runJob" });
|
|
79
|
-
return c.json({ error: err instanceof Error ? err.message : "Failed to run job" }, 400);
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
authenticated.get("/api/cron/:id/history", async (c) => {
|
|
83
|
-
const id = c.req.param("id");
|
|
84
|
-
const raw = c.req.query("limit");
|
|
85
|
-
const limit = raw ? parseInt(raw, 10) : 10;
|
|
86
|
-
const history = await service.cronServiceInstance.getJobHistory(id, Number.isFinite(limit) ? limit : 10);
|
|
87
|
-
return c.json({ history });
|
|
88
|
-
});
|
|
89
|
-
authenticated.patch("/api/cron/:id", async (c) => {
|
|
90
|
-
const id = c.req.param("id");
|
|
91
|
-
const body = await c.req.json();
|
|
92
|
-
try {
|
|
93
|
-
const result = await service.cronServiceInstance.updateJob(id, body);
|
|
94
|
-
return c.json({ updated: result });
|
|
95
|
-
} catch (err) {
|
|
96
|
-
logRouteError(log, c, err, "gateway.route.cron", { operation: "updateJob" });
|
|
97
|
-
return c.json({ error: err instanceof Error ? err.message : "Failed to update job" }, 400);
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
authenticated.delete("/api/cron/:id", async (c) => {
|
|
101
|
-
const id = c.req.param("id");
|
|
102
|
-
const result = await service.cronServiceInstance.removeJob(id);
|
|
103
|
-
return c.json({ removed: result });
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
//#endregion
|
|
107
|
-
export { registerCronRoutes };
|
|
108
|
-
|
|
109
|
-
//# sourceMappingURL=cron.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cron.js","names":[],"sources":["../../../../../src/gateway/hono/routes/cron.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { CronJobAlreadyRunningError } from '../../../cron/service.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\nimport { createGatewayRouteLogger, logRouteError } from '../lib/route-logger.js';\n\nconst log = createGatewayRouteLogger('Cron');\n\nexport function registerCronRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n const { service } = deps;\n\n // ========== Cron REST API (/api/cron) ==========\n\n // GET /api/cron - List all jobs\n authenticated.get('/api/cron', async (c) => {\n const jobs = await service.cronServiceInstance.listJobs();\n return c.json({ jobs });\n });\n\n // POST /api/cron - Add new job\n authenticated.post('/api/cron', async (c) => {\n const body = await c.req.json();\n const { schedule, name, description, sessionTarget, wakeMode, agentId, workingDirectory, delivery, payload, failureAlert, deleteAfterRun } = body;\n\n if (!schedule || !payload) {\n return c.json({ error: 'Missing required fields: schedule, payload' }, 400);\n }\n\n try {\n const result = await service.cronServiceInstance.addJob(schedule, {\n name,\n description,\n sessionTarget,\n wakeMode,\n ...(typeof agentId === 'string' && agentId.trim() ? { agentId: agentId.trim() } : {}),\n ...(typeof workingDirectory === 'string' && workingDirectory.trim()\n ? { workingDirectory: workingDirectory.trim() }\n : {}),\n ...(typeof deleteAfterRun === 'boolean' ? { deleteAfterRun } : {}),\n delivery,\n failureAlert,\n payload,\n });\n return c.json(result, 201);\n } catch (err) {\n logRouteError(log, c, err, 'gateway.route.cron', { operation: 'addJob' });\n return c.json({ error: err instanceof Error ? err.message : 'Failed to add job' }, 400);\n }\n });\n\n // GET /api/cron/metrics - Get cron metrics (must be before /:id)\n authenticated.get('/api/cron/metrics', async (c) => {\n const metrics = await service.cronServiceInstance.getMetrics();\n return c.json(metrics);\n });\n\n // GET /api/cron/runs/history - Recent runs across all jobs (must be before /:id)\n authenticated.get('/api/cron/runs/history', async (c) => {\n const raw = c.req.query('limit');\n const limit = raw ? parseInt(raw, 10) : 50;\n const runs = await service.cronServiceInstance.getAllRunsHistory(Number.isFinite(limit) ? limit : 50);\n return c.json({ runs });\n });\n\n // GET /api/cron/:id - Get single job (must be after /metrics)\n authenticated.get('/api/cron/:id', async (c) => {\n const id = c.req.param('id');\n const job = await service.cronServiceInstance.getJob(id);\n if (!job) {\n return c.json({ error: 'Job not found' }, 404);\n }\n return c.json({ job });\n });\n\n // POST /api/cron/:id/toggle - Toggle job enabled\n authenticated.post('/api/cron/:id/toggle', async (c) => {\n const id = c.req.param('id');\n const body = await c.req.json();\n const { enabled } = body;\n\n if (typeof enabled !== 'boolean') {\n return c.json({ error: 'Missing required field: enabled' }, 400);\n }\n\n const result = await service.cronServiceInstance.toggleJob(id, enabled);\n return c.json({ toggled: result });\n });\n\n // POST /api/cron/:id/run - Trigger job manually\n authenticated.post('/api/cron/:id/run', async (c) => {\n const id = c.req.param('id');\n\n try {\n const result = await service.cronServiceInstance.runJobNow(id);\n return c.json({ triggered: true, job: result.job, history: result.history });\n } catch (err) {\n if (err instanceof CronJobAlreadyRunningError) {\n log.info(\n { jobId: err.jobId, runningSessionKey: err.runningSessionKey },\n 'Cron job run requested while already running',\n );\n return c.json(\n {\n error: err.message,\n code: 'job_already_running',\n jobId: err.jobId,\n runningSessionKey: err.runningSessionKey,\n },\n 409,\n );\n }\n logRouteError(log, c, err, 'gateway.route.cron', { operation: 'runJob' });\n return c.json({ error: err instanceof Error ? err.message : 'Failed to run job' }, 400);\n }\n });\n\n // GET /api/cron/:id/history - Get job execution history\n authenticated.get('/api/cron/:id/history', async (c) => {\n const id = c.req.param('id');\n const raw = c.req.query('limit');\n const limit = raw ? parseInt(raw, 10) : 10;\n const history = await service.cronServiceInstance.getJobHistory(id, Number.isFinite(limit) ? limit : 10);\n return c.json({ history });\n });\n\n // PATCH /api/cron/:id - Update job\n authenticated.patch('/api/cron/:id', async (c) => {\n const id = c.req.param('id');\n const body = await c.req.json();\n\n try {\n const result = await service.cronServiceInstance.updateJob(id, body);\n return c.json({ updated: result });\n } catch (err) {\n logRouteError(log, c, err, 'gateway.route.cron', { operation: 'updateJob' });\n return c.json({ error: err instanceof Error ? err.message : 'Failed to update job' }, 400);\n }\n });\n\n // DELETE /api/cron/:id - Remove job\n authenticated.delete('/api/cron/:id', async (c) => {\n const id = c.req.param('id');\n const result = await service.cronServiceInstance.removeJob(id);\n return c.json({ removed: result });\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { JobData } from '../../cron/types.js';
|
|
2
|
-
export declare function listCronJobs(): JobData[];
|
|
3
|
-
export declare function getCronJob(jobId: string): JobData | null;
|
|
4
|
-
export declare function saveCronJob(job: JobData): void;
|
|
5
|
-
export declare function saveCronJobs(jobs: JobData[]): void;
|
|
6
|
-
export declare function deleteCronJob(jobId: string): boolean;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
|
|
2
|
-
import { JobDataSchema } from "../../cron/validation.js";
|
|
3
|
-
//#region src/storage/sqlite/cron-job-repository.ts
|
|
4
|
-
function parseJson(value) {
|
|
5
|
-
if (!value) return void 0;
|
|
6
|
-
return JSON.parse(value);
|
|
7
|
-
}
|
|
8
|
-
function rowToCronJob(row) {
|
|
9
|
-
return JobDataSchema.parse({
|
|
10
|
-
id: row.job_id,
|
|
11
|
-
name: row.name,
|
|
12
|
-
description: row.description ?? void 0,
|
|
13
|
-
enabled: row.enabled !== 0,
|
|
14
|
-
deleteAfterRun: row.delete_after_run == null ? void 0 : row.delete_after_run !== 0,
|
|
15
|
-
createdAtMs: row.created_at_ms,
|
|
16
|
-
updatedAtMs: row.updated_at_ms,
|
|
17
|
-
schedule: parseJson(row.schedule_json),
|
|
18
|
-
sessionTarget: row.session_target,
|
|
19
|
-
wakeMode: row.wake_mode,
|
|
20
|
-
agentId: row.agent_id ?? void 0,
|
|
21
|
-
sessionKey: row.session_key ?? void 0,
|
|
22
|
-
workingDirectory: row.working_directory ?? void 0,
|
|
23
|
-
payload: parseJson(row.payload_json),
|
|
24
|
-
delivery: parseJson(row.delivery_json),
|
|
25
|
-
failureAlert: parseJson(row.failure_alert_json),
|
|
26
|
-
state: parseJson(row.state_json) ?? {}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
function bindJson(value) {
|
|
30
|
-
return value === void 0 ? null : JSON.stringify(value);
|
|
31
|
-
}
|
|
32
|
-
function upsertJob(db, job) {
|
|
33
|
-
db.prepare(`INSERT OR REPLACE INTO cron_jobs (
|
|
34
|
-
job_id, name, description, enabled, delete_after_run, created_at_ms, updated_at_ms,
|
|
35
|
-
schedule_json, session_target, wake_mode, agent_id, session_key, working_directory,
|
|
36
|
-
payload_json, delivery_json, failure_alert_json, state_json
|
|
37
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(job.id, job.name, job.description ?? null, job.enabled ? 1 : 0, job.deleteAfterRun == null ? null : job.deleteAfterRun ? 1 : 0, job.createdAtMs, job.updatedAtMs, JSON.stringify(job.schedule), job.sessionTarget, job.wakeMode, job.agentId ?? null, job.sessionKey ?? null, job.workingDirectory ?? null, JSON.stringify(job.payload), bindJson(job.delivery), bindJson(job.failureAlert), JSON.stringify(job.state ?? {}));
|
|
38
|
-
}
|
|
39
|
-
function listCronJobs() {
|
|
40
|
-
return getSqliteDatabase().prepare(`SELECT job_id, name, description, enabled, delete_after_run, created_at_ms, updated_at_ms,
|
|
41
|
-
schedule_json, session_target, wake_mode, agent_id, session_key, working_directory,
|
|
42
|
-
payload_json, delivery_json, failure_alert_json, state_json
|
|
43
|
-
FROM cron_jobs
|
|
44
|
-
ORDER BY created_at_ms DESC`).all().map(rowToCronJob);
|
|
45
|
-
}
|
|
46
|
-
function getCronJob(jobId) {
|
|
47
|
-
const row = getSqliteDatabase().prepare(`SELECT job_id, name, description, enabled, delete_after_run, created_at_ms, updated_at_ms,
|
|
48
|
-
schedule_json, session_target, wake_mode, agent_id, session_key, working_directory,
|
|
49
|
-
payload_json, delivery_json, failure_alert_json, state_json
|
|
50
|
-
FROM cron_jobs
|
|
51
|
-
WHERE job_id = ?`).get(jobId);
|
|
52
|
-
return row ? rowToCronJob(row) : null;
|
|
53
|
-
}
|
|
54
|
-
function saveCronJob(job) {
|
|
55
|
-
runSqliteWriteTransaction((db) => upsertJob(db, job));
|
|
56
|
-
}
|
|
57
|
-
function saveCronJobs(jobs) {
|
|
58
|
-
runSqliteWriteTransaction((db) => {
|
|
59
|
-
for (const job of jobs) upsertJob(db, job);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
function deleteCronJob(jobId) {
|
|
63
|
-
return runSqliteWriteTransaction((db) => {
|
|
64
|
-
return db.prepare(`DELETE FROM cron_jobs WHERE job_id = ?`).run(jobId).changes > 0;
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
//#endregion
|
|
68
|
-
export { deleteCronJob, getCronJob, listCronJobs, saveCronJob, saveCronJobs };
|
|
69
|
-
|
|
70
|
-
//# sourceMappingURL=cron-job-repository.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { JobExecution } from '../../cron/execution-types.js';
|
|
2
|
-
export declare function appendCronRun(execution: JobExecution): void;
|
|
3
|
-
export declare function readCronJobHistory(jobId: string, limit: number): JobExecution[];
|
|
4
|
-
export declare function readAllCronRuns(limit: number): JobExecution[];
|
|
5
|
-
export declare function deleteCronRunsForJob(jobId: string): void;
|