@ponythewhite/base-context 1.0.0 → 1.0.1
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/CHANGELOG.md +33 -0
- package/NOTICE +0 -5
- package/README.md +44 -27
- package/dist/NOTICE +0 -5
- package/dist/base-context-runtime/pyproject.toml +1 -1
- package/dist/base-context-runtime/src/rlm/__init__.py +7 -5
- package/dist/base-context-runtime/test/test_subagent_registry.py +28 -1
- package/dist/base-context-runtime/uv.lock +1 -1
- package/dist/build-info.json +1 -1
- package/dist/bundle/amazon-bedrock.js +21 -0
- package/dist/bundle/{anthropic-YY4S534V.js → anthropic-UV5GZDGU.js} +5 -5
- package/dist/bundle/{azure-openai-responses-JRP6MIM3.js → azure-openai-responses-WSNPXLYC.js} +6 -6
- package/dist/bundle/{bundled-modules-P5HARVZA.js → bundled-modules-TXUMJ2XQ.js} +71 -16
- package/dist/bundle/chunk-27QCJ2AZ.js +2578 -0
- package/dist/bundle/{chunk-MZHTNNVA.js → chunk-4GXPNXOJ.js} +8 -0
- package/dist/bundle/{chunk-SC5KG5R4.js → chunk-DGNX7HQ3.js} +1 -7
- package/dist/bundle/{chunk-A53O363M.js → chunk-GRJFXLBM.js} +0 -1
- package/dist/bundle/chunk-HKINIBP4.js +29 -0
- package/dist/bundle/{chunk-UDSW6FNG.js → chunk-KTNETTHI.js} +1 -1
- package/dist/bundle/{chunk-BYVP7LWV.js → chunk-S3INFPZZ.js} +1861 -4662
- package/dist/bundle/{chunk-73DCPU3D.js → chunk-V3L54UD6.js} +1019 -3427
- package/dist/bundle/{chunk-U7AUVG3B.js → chunk-VSIYFWYI.js} +24 -6
- package/dist/bundle/{chunk-IW77OXFS.js → chunk-W46VZFI6.js} +0 -2099
- package/dist/bundle/{cli-main-O4X7GFGY.js → cli-main-BYMSRPH6.js} +8 -6
- package/dist/bundle/cli.js +2 -2
- package/dist/bundle/{google-AUTVGDGZ.js → google-T32FMD4G.js} +6 -6
- package/dist/bundle/{google-vertex-Q75D7RKS.js → google-vertex-56KP6I3B.js} +3 -3
- package/dist/bundle/{main-XKOW2BV6.js → main-ODOYCEQC.js} +7 -5
- package/dist/bundle/{mistral-7ESB7QUD.js → mistral-WGBMYIVU.js} +5 -5
- package/dist/bundle/{openai-codex-responses-LV3QRPN4.js → openai-codex-responses-PIV2RQ3G.js} +6 -6
- package/dist/bundle/{openai-completions-OJECLPXJ.js → openai-completions-64C3JPR4.js} +11 -22
- package/dist/bundle/{openai-responses-FN6HZMBC.js → openai-responses-UI7RSTDV.js} +6 -6
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +108 -59
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/daemon-ps.d.ts +4 -3
- package/dist/cli/daemon-ps.d.ts.map +1 -1
- package/dist/cli/daemon-ps.js +6 -1
- package/dist/cli/daemon-ps.js.map +1 -1
- package/dist/cli/product-doctor.d.ts +0 -1
- package/dist/cli/product-doctor.d.ts.map +1 -1
- package/dist/cli/product-doctor.js +6 -3
- package/dist/cli/product-doctor.js.map +1 -1
- package/dist/config.d.ts +0 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -8
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-config.d.ts +1 -2
- package/dist/core/agent-session-config.d.ts.map +1 -1
- package/dist/core/agent-session-config.js +0 -3
- package/dist/core/agent-session-config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +5 -4
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +5 -3
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -27
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +10 -6
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +107 -107
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +8 -35
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +33 -243
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/cron-jobs.d.ts.map +1 -1
- package/dist/core/cron-jobs.js +7 -1
- package/dist/core/cron-jobs.js.map +1 -1
- package/dist/core/inference-coordinator.d.ts +6 -1
- package/dist/core/inference-coordinator.d.ts.map +1 -1
- package/dist/core/inference-coordinator.js +18 -2
- package/dist/core/inference-coordinator.js.map +1 -1
- package/dist/core/kernel/bootstrap.d.ts.map +1 -1
- package/dist/core/kernel/bootstrap.js +2 -2
- package/dist/core/kernel/bootstrap.js.map +1 -1
- package/dist/core/kernel/repl-manager.d.ts +2 -0
- package/dist/core/kernel/repl-manager.d.ts.map +1 -1
- package/dist/core/kernel/repl-manager.js +44 -1
- package/dist/core/kernel/repl-manager.js.map +1 -1
- package/dist/core/logging.d.ts +4 -3
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/logging.js +6 -6
- package/dist/core/logging.js.map +1 -1
- package/dist/core/mcp/mcp-manager.d.ts.map +1 -1
- package/dist/core/mcp/mcp-manager.js +3 -3
- package/dist/core/mcp/mcp-manager.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -16
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +88 -196
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -19
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +36 -266
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/provider-contracts.d.ts +5 -6
- package/dist/core/provider-contracts.d.ts.map +1 -1
- package/dist/core/provider-contracts.js +25 -36
- package/dist/core/provider-contracts.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +0 -2
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/rlm-max-subagents.d.ts +32 -0
- package/dist/core/rlm-max-subagents.d.ts.map +1 -0
- package/dist/core/rlm-max-subagents.js +50 -0
- package/dist/core/rlm-max-subagents.js.map +1 -0
- package/dist/core/rlm-runtime.d.ts +3 -3
- package/dist/core/rlm-runtime.d.ts.map +1 -1
- package/dist/core/rlm-runtime.js.map +1 -1
- package/dist/core/sdk.d.ts +4 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +27 -14
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +3 -16
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +12 -44
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +6 -6
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/installer.mjs +2 -3
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +39 -34
- package/dist/main.js.map +1 -1
- package/dist/modes/acp/acp-mode.d.ts.map +1 -1
- package/dist/modes/acp/acp-mode.js +1 -1
- package/dist/modes/acp/acp-mode.js.map +1 -1
- package/dist/modes/agent-connection/daemon-agent-connection.d.ts +6 -2
- package/dist/modes/agent-connection/daemon-agent-connection.d.ts.map +1 -1
- package/dist/modes/agent-connection/daemon-agent-connection.js +13 -2
- package/dist/modes/agent-connection/daemon-agent-connection.js.map +1 -1
- package/dist/modes/agent-connection/in-process-agent-connection.d.ts +2 -0
- package/dist/modes/agent-connection/in-process-agent-connection.d.ts.map +1 -1
- package/dist/modes/agent-connection/in-process-agent-connection.js +6 -0
- package/dist/modes/agent-connection/in-process-agent-connection.js.map +1 -1
- package/dist/modes/agent-connection/types.d.ts +3 -0
- package/dist/modes/agent-connection/types.d.ts.map +1 -1
- package/dist/modes/agent-connection/types.js.map +1 -1
- package/dist/modes/agents-view/agents-view-mode.d.ts.map +1 -1
- package/dist/modes/agents-view/agents-view-mode.js +2 -19
- package/dist/modes/agents-view/agents-view-mode.js.map +1 -1
- package/dist/modes/daemon/daemon-mode.d.ts +5 -0
- package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-mode.js +107 -12
- package/dist/modes/daemon/daemon-mode.js.map +1 -1
- package/dist/modes/daemon/daemon-protocol.d.ts +194 -165
- package/dist/modes/daemon/daemon-protocol.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-protocol.js +16 -11
- package/dist/modes/daemon/daemon-protocol.js.map +1 -1
- package/dist/modes/daemon/daemon-rlm-capacity-coordinator.d.ts +19 -0
- package/dist/modes/daemon/daemon-rlm-capacity-coordinator.d.ts.map +1 -0
- package/dist/modes/daemon/daemon-rlm-capacity-coordinator.js +74 -0
- package/dist/modes/daemon/daemon-rlm-capacity-coordinator.js.map +1 -0
- package/dist/modes/daemon/daemon-rlm-capacity.d.ts +19 -0
- package/dist/modes/daemon/daemon-rlm-capacity.d.ts.map +1 -0
- package/dist/modes/daemon/daemon-rlm-capacity.js +85 -0
- package/dist/modes/daemon/daemon-rlm-capacity.js.map +1 -0
- package/dist/modes/daemon/daemon-session-summarizer.d.ts +2 -3
- package/dist/modes/daemon/daemon-session-summarizer.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-session-summarizer.js +32 -23
- package/dist/modes/daemon/daemon-session-summarizer.js.map +1 -1
- package/dist/modes/daemon/daemon-state-root.d.ts +15 -0
- package/dist/modes/daemon/daemon-state-root.d.ts.map +1 -0
- package/dist/modes/daemon/daemon-state-root.js +40 -0
- package/dist/modes/daemon/daemon-state-root.js.map +1 -0
- package/dist/modes/daemon/daemon-supervisor-ownership.d.ts +2 -0
- package/dist/modes/daemon/daemon-supervisor-ownership.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-supervisor-ownership.js +27 -0
- package/dist/modes/daemon/daemon-supervisor-ownership.js.map +1 -1
- package/dist/modes/daemon/daemon-supervisor.d.ts +10 -1
- package/dist/modes/daemon/daemon-supervisor.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-supervisor.js +213 -20
- package/dist/modes/daemon/daemon-supervisor.js.map +1 -1
- package/dist/modes/daemon/daemon-worker-protocol.d.ts +28 -1
- package/dist/modes/daemon/daemon-worker-protocol.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-worker-protocol.js +16 -2
- package/dist/modes/daemon/daemon-worker-protocol.js.map +1 -1
- package/dist/modes/daemon/saved-session-catalog.d.ts.map +1 -1
- package/dist/modes/daemon/saved-session-catalog.js +2 -0
- package/dist/modes/daemon/saved-session-catalog.js.map +1 -1
- package/dist/modes/interactive/auth-flows.d.ts +0 -6
- package/dist/modes/interactive/auth-flows.d.ts.map +1 -1
- package/dist/modes/interactive/auth-flows.js +6 -126
- package/dist/modes/interactive/auth-flows.js.map +1 -1
- package/dist/modes/interactive/components/configuration-menu.d.ts +3 -0
- package/dist/modes/interactive/components/configuration-menu.d.ts.map +1 -1
- package/dist/modes/interactive/components/configuration-menu.js +13 -2
- package/dist/modes/interactive/components/configuration-menu.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +2 -2
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +0 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +0 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +0 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +3 -40
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +2 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +13 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +2 -11
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/feature-hints.d.ts.map +1 -1
- package/dist/modes/interactive/feature-hints.js +0 -4
- package/dist/modes/interactive/feature-hints.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -12
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +81 -507
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/onboarding.d.ts +0 -3
- package/dist/modes/interactive/onboarding.d.ts.map +1 -1
- package/dist/modes/interactive/onboarding.js +0 -17
- package/dist/modes/interactive/onboarding.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +2 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +24 -11
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/node/amazon-bedrock.d.ts +2 -0
- package/dist/node/amazon-bedrock.d.ts.map +1 -0
- package/dist/node/amazon-bedrock.js +6 -0
- package/dist/node/amazon-bedrock.js.map +1 -0
- package/dist/product-identity.d.ts +0 -1
- package/dist/product-identity.d.ts.map +1 -1
- package/dist/product-identity.js +0 -1
- package/dist/product-identity.js.map +1 -1
- package/docs/development.md +1 -1
- package/docs/fork-philosophy.md +4 -8
- package/docs/installation.md +83 -62
- package/docs/providers.md +23 -25
- package/docs/quickstart.md +19 -10
- package/docs/rlm-runtime.md +13 -5
- package/docs/rpc.md +4 -4
- package/docs/sdk.md +20 -11
- package/docs/sessions.md +0 -1
- package/docs/settings.md +9 -42
- package/docs/skills.md +0 -1
- package/docs/upstream-0.9.5.md +171 -0
- package/docs/usage.md +14 -10
- package/package.json +4 -4
- package/dist/core/agent-traces.d.ts +0 -149
- package/dist/core/agent-traces.d.ts.map +0 -1
- package/dist/core/agent-traces.js +0 -904
- package/dist/core/agent-traces.js.map +0 -1
- package/dist/core/prime-inference-auth.d.ts +0 -70
- package/dist/core/prime-inference-auth.d.ts.map +0 -1
- package/dist/core/prime-inference-auth.js +0 -352
- package/dist/core/prime-inference-auth.js.map +0 -1
- package/dist/core/prime-inference-model-selection.d.ts +0 -16
- package/dist/core/prime-inference-model-selection.d.ts.map +0 -1
- package/dist/core/prime-inference-model-selection.js +0 -16
- package/dist/core/prime-inference-model-selection.js.map +0 -1
- package/dist/core/prime-inference-models.d.ts +0 -6
- package/dist/core/prime-inference-models.d.ts.map +0 -1
- package/dist/core/prime-inference-models.js +0 -62
- package/dist/core/prime-inference-models.js.map +0 -1
- package/dist/core/telemetry.d.ts +0 -95
- package/dist/core/telemetry.d.ts.map +0 -1
- package/dist/core/telemetry.js +0 -637
- package/dist/core/telemetry.js.map +0 -1
- package/dist/modes/interactive/components/prime-onboarding-splash.d.ts +0 -39
- package/dist/modes/interactive/components/prime-onboarding-splash.d.ts.map +0 -1
- package/dist/modes/interactive/components/prime-onboarding-splash.js +0 -286
- package/dist/modes/interactive/components/prime-onboarding-splash.js.map +0 -1
- package/dist/modes/interactive/components/prime-team-selector.d.ts +0 -30
- package/dist/modes/interactive/components/prime-team-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/prime-team-selector.js +0 -166
- package/dist/modes/interactive/components/prime-team-selector.js.map +0 -1
- package/dist/skills/prime-intellect/SKILL.md +0 -87
- package/dist/skills/prime-intellect/references/compute.md +0 -45
- package/dist/skills/prime-intellect/references/environments.md +0 -73
- package/dist/skills/prime-intellect/references/inference.md +0 -47
- package/dist/skills/prime-intellect/references/sandboxes.md +0 -75
- package/skills/prime-intellect/SKILL.md +0 -87
- package/skills/prime-intellect/references/compute.md +0 -45
- package/skills/prime-intellect/references/environments.md +0 -73
- package/skills/prime-intellect/references/inference.md +0 -47
- package/skills/prime-intellect/references/sandboxes.md +0 -75
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron-jobs.js","sourceRoot":"","sources":["../../src/core/cron-jobs.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n\tcloseSync,\n\texistsSync,\n\tfsyncSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\trenameSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { lockSync } from \"proper-lockfile\";\nimport { getSessionArtifactPathForFile } from \"./session-manager.js\";\n\nexport type AgentCronJobStatus = \"active\" | \"paused\" | \"completed\" | \"cancelled\";\nexport type AgentCronScheduleKind = \"once\" | \"cron\" | \"interval\";\nexport type AgentCronJobSource = \"cron\" | \"heartbeat\" | \"rlm_heartbeat\";\nexport type AgentCronJobRuntimeKind = \"top-level\" | \"subagent\";\nexport type AgentHeartbeatUpdateAction = \"pause\" | \"resume\" | \"clear\";\nexport type AgentHeartbeatManagementAction = \"pause\" | \"resume\" | \"stop\";\nexport type AgentRlmHeartbeatStatusUpdate = \"pause\" | \"resume\";\n/**\n * How a scheduled heartbeat prompt is delivered when the target session is busy:\n * \"steer\" interrupts the current turn, \"follow_up\" waits for it to finish.\n */\nexport type AgentHeartbeatDeliveryMode = \"steer\" | \"follow_up\";\n\nexport interface AgentCronSchedule {\n\tkind: AgentCronScheduleKind;\n\texpression: string;\n\tintervalMs?: number;\n}\n\nexport interface AgentCronJob {\n\tid: string;\n\tstatus: AgentCronJobStatus;\n\tsource?: AgentCronJobSource;\n\truntimeKind?: AgentCronJobRuntimeKind;\n\t/** Delivery mode for heartbeat/rlm_heartbeat jobs when the session is busy. Defaults to \"steer\". */\n\tdeliveryMode?: AgentHeartbeatDeliveryMode;\n\tactiveSessionId: string;\n\tsessionId: string;\n\tsessionFile: string;\n\tcwd: string;\n\tlabel?: string;\n\tprompt: string;\n\tschedule: AgentCronSchedule;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tnextRunAt?: string;\n\tlastRunAt?: string;\n\tlastSkippedAt?: string;\n\tlastError?: string;\n\trunCount: number;\n}\n\nexport interface CreateAgentCronJobInput {\n\tactiveSessionId: string;\n\tsessionId: string;\n\tsessionFile: string;\n\tcwd: string;\n\tlabel?: string;\n\tprompt: string;\n\tscheduleText: string;\n\tsource?: AgentCronJobSource;\n\truntimeKind?: AgentCronJobRuntimeKind;\n\tdeliveryMode?: AgentHeartbeatDeliveryMode;\n\tnow?: Date;\n}\n\nexport type AgentCronJobRunResult = \"ran\" | \"skipped\";\n\nexport interface AgentCronDispatch {\n\tid: string;\n\tjob: AgentCronJob;\n}\n\nexport interface AgentCronSchedulerHooks {\n\trunJob: (job: AgentCronJob) => Promise<AgentCronJobRunResult | undefined>;\n\tbeginDispatch?: (dispatch: AgentCronDispatch) => (() => void) | undefined;\n\tnow?: () => Date;\n\tonError?: (job: AgentCronJob, error: unknown) => void;\n}\n\nexport interface HeartbeatCronSessionActivity {\n\tisStreaming: boolean;\n\tisCompacting?: boolean;\n\tisRetrying?: boolean;\n\tisBashRunning: boolean;\n\thasPendingSessionWork: boolean;\n\tunfinishedActionCount: number;\n}\n\ninterface CronJobsFile {\n\tjobs?: unknown;\n\tdispatches?: unknown;\n}\n\ninterface AgentCronDispatchRecord {\n\tid: string;\n\tjobId: string;\n\tclaimedAt: string;\n\tscheduledFor: string;\n}\n\ninterface CronJobsState {\n\tjobs: AgentCronJob[];\n\tdispatches: AgentCronDispatchRecord[];\n}\n\nexport const SESSION_SCHEDULED_JOBS_FILENAME = \"scheduled-jobs.json\";\n\nconst MAX_TIMEOUT_MS = 2_147_483_647;\nconst ONE_SECOND_MS = 1000;\nconst ONE_MINUTE_MS = 60_000;\nexport const DEFAULT_HEARTBEAT_SCHEDULE = \"every 5m\";\nexport const DEFAULT_HEARTBEAT_DELIVERY_MODE: AgentHeartbeatDeliveryMode = \"steer\";\n\nexport type ParsedHeartbeatCommand =\n\t| { type: \"status\" }\n\t| { type: \"pause\" }\n\t| { type: \"resume\" }\n\t| { type: \"clear\" }\n\t| { type: \"set\"; schedule: string; instruction: string; deliveryMode?: AgentHeartbeatDeliveryMode };\n\nexport interface AgentRlmHeartbeatController {\n\tlistRlmHeartbeats(options?: { includeInactive?: boolean }): AgentCronJob[];\n\tcreateRlmHeartbeat(input: {\n\t\tinstruction: string;\n\t\tinterval?: string;\n\t\tlabel?: string;\n\t\tdeliveryMode?: AgentHeartbeatDeliveryMode;\n\t}): AgentCronJob;\n\tupdateRlmHeartbeat(input: {\n\t\tid: string;\n\t\tinstruction?: string;\n\t\tinterval?: string;\n\t\tlabel?: string;\n\t\tstatus?: AgentRlmHeartbeatStatusUpdate;\n\t\tdeliveryMode?: AgentHeartbeatDeliveryMode;\n\t}): AgentCronJob | undefined;\n\tdeleteRlmHeartbeat(id: string): AgentCronJob | undefined;\n}\n\nfunction heartbeatCatalogSignature(jobs: readonly AgentCronJob[]): string {\n\treturn JSON.stringify(\n\t\tjobs\n\t\t\t.filter((job) => isHeartbeatCronJob(job) && (job.status === \"active\" || job.status === \"paused\"))\n\t\t\t.sort((left, right) => left.id.localeCompare(right.id))\n\t\t\t.map((job) => ({\n\t\t\t\tid: job.id,\n\t\t\t\tstatus: job.status,\n\t\t\t\tsource: job.source,\n\t\t\t\truntimeKind: job.runtimeKind,\n\t\t\t\tdeliveryMode: job.deliveryMode,\n\t\t\t\tactiveSessionId: job.activeSessionId,\n\t\t\t\tsessionId: job.sessionId,\n\t\t\t\tsessionFile: job.sessionFile,\n\t\t\t\tcwd: job.cwd,\n\t\t\t\tlabel: job.label,\n\t\t\t\tprompt: job.prompt,\n\t\t\t\tschedule: job.schedule,\n\t\t\t\tcreatedAt: job.createdAt,\n\t\t\t})),\n\t);\n}\n\nexport class AgentCronJobStore {\n\tprivate readonly sessionArtifactFiles = new Map<string, string>();\n\tprivate readonly heartbeatChangeListeners = new Set<() => void>();\n\n\tconstructor(\n\t\tprivate readonly filePath?: string,\n\t\tprivate readonly sessionArtifactMode = false,\n\t) {\n\t\tif (!filePath && !sessionArtifactMode) {\n\t\t\tthrow new Error(\"Cron job store requires a file path\");\n\t\t}\n\t}\n\n\tstatic forSessionArtifacts(): AgentCronJobStore {\n\t\treturn new AgentCronJobStore(undefined, true);\n\t}\n\n\tonHeartbeatChange(listener: () => void): () => void {\n\t\tthis.heartbeatChangeListeners.add(listener);\n\t\treturn () => this.heartbeatChangeListeners.delete(listener);\n\t}\n\n\tregisterSessionArtifact(sessionId: string, artifactDir: string): boolean {\n\t\tif (!this.sessionArtifactMode) {\n\t\t\treturn false;\n\t\t}\n\t\tconst path = join(artifactDir, SESSION_SCHEDULED_JOBS_FILENAME);\n\t\tif (this.sessionArtifactFiles.get(sessionId) === path) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.sessionArtifactFiles.set(sessionId, path);\n\t\treturn true;\n\t}\n\n\trecoverSessionArtifact(sessionId: string, now = new Date()): AgentCronJob[] {\n\t\tconst path = this.sessionArtifactFiles.get(sessionId);\n\t\tif (!path) {\n\t\t\treturn [];\n\t\t}\n\t\treturn withCronJobsStateLocks([path], () => {\n\t\t\tconst state = readJobsState(path);\n\t\t\tconst recovered: AgentCronJob[] = [];\n\t\t\tif (state.dispatches.length > 0) {\n\t\t\t\trecoverInterruptedInState(state, now, recovered);\n\t\t\t\twriteJobsState(path, state);\n\t\t\t}\n\t\t\treturn recovered;\n\t\t});\n\t}\n\n\tlist(): AgentCronJob[] {\n\t\treturn this.readJobs().sort((a, b) => compareOptionalIso(a.nextRunAt, b.nextRunAt));\n\t}\n\n\t/** Import supported declarations directly as paused data; never import dispatch ownership. */\n\timportPaused(\n\t\tjobs: readonly AgentCronJob[],\n\t\ttarget: { sessionId: string; sessionFile: string; cwd: string },\n\t): AgentCronJob[] {\n\t\tconst now = new Date().toISOString();\n\t\tconst imported = jobs.map((job): AgentCronJob => {\n\t\t\tif (\n\t\t\t\t!isAgentCronJob(job) ||\n\t\t\t\t(job.status !== \"active\" && job.status !== \"paused\") ||\n\t\t\t\t(job.source === \"rlm_heartbeat\" && job.schedule.kind === \"once\") ||\n\t\t\t\tjob.runtimeKind === \"subagent\"\n\t\t\t)\n\t\t\t\tthrow new Error(\"Unsupported paused schedule owner\");\n\t\t\treturn {\n\t\t\t\tid: randomUUID(),\n\t\t\t\tstatus: \"paused\",\n\t\t\t\tsource: job.source ?? \"cron\",\n\t\t\t\truntimeKind: \"top-level\",\n\t\t\t\tactiveSessionId: target.sessionId,\n\t\t\t\tsessionId: target.sessionId,\n\t\t\t\tsessionFile: target.sessionFile,\n\t\t\t\tcwd: target.cwd,\n\t\t\t\tprompt: job.prompt,\n\t\t\t\tschedule: {\n\t\t\t\t\tkind: job.schedule.kind,\n\t\t\t\t\texpression: job.schedule.expression,\n\t\t\t\t\t...(job.schedule.kind === \"interval\" ? { intervalMs: job.schedule.intervalMs } : {}),\n\t\t\t\t},\n\t\t\t\t...(job.label === undefined ? {} : { label: job.label }),\n\t\t\t\t...(job.deliveryMode === undefined ? {} : { deliveryMode: job.deliveryMode }),\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now,\n\t\t\t\trunCount: 0,\n\t\t\t};\n\t\t});\n\t\tif (imported.length > 0) this.writeJobs([...this.readJobs(), ...imported]);\n\t\treturn imported;\n\t}\n\n\tcreate(input: CreateAgentCronJobInput): AgentCronJob {\n\t\tconst now = input.now ?? new Date();\n\t\tconst prompt = input.prompt.trim();\n\t\tif (!prompt) {\n\t\t\tthrow new Error(\"Cron job prompt cannot be empty\");\n\t\t}\n\t\tconst parsed = parseAgentCronSchedule(input.scheduleText, now);\n\t\tconst nowIso = now.toISOString();\n\t\tconst job: AgentCronJob = {\n\t\t\tid: randomUUID(),\n\t\t\tstatus: \"active\",\n\t\t\tsource: input.source ?? \"cron\",\n\t\t\truntimeKind: input.runtimeKind,\n\t\t\tactiveSessionId: input.activeSessionId,\n\t\t\tsessionId: input.sessionId,\n\t\t\tsessionFile: input.sessionFile,\n\t\t\tcwd: input.cwd,\n\t\t\tlabel: normalizeOptionalLabel(input.label),\n\t\t\tprompt,\n\t\t\tschedule: parsed.schedule,\n\t\t\tcreatedAt: nowIso,\n\t\t\tupdatedAt: nowIso,\n\t\t\tnextRunAt: parsed.nextRunAt.toISOString(),\n\t\t\trunCount: 0,\n\t\t};\n\t\tthis.writeJobs([...this.readJobs(), job]);\n\t\treturn job;\n\t}\n\n\t/**\n\t * Active session ids are daemon-local. When a persisted session is restored,\n\t * bind jobs stored for its stable session file to the new live session id.\n\t * When a live session switches to another persisted file, move jobs stored for\n\t * its stable active session id to the new file so future restores target the\n\t * current session instead of the previous one.\n\t */\n\trebindSessionJobs(input: {\n\t\tactiveSessionId: string;\n\t\tsessionId: string;\n\t\tsessionFile: string;\n\t\tcwd: string;\n\t}): AgentCronJob[] {\n\t\tconst targetSessionFile = resolve(input.sessionFile);\n\t\tconst reboundJobs: AgentCronJob[] = [];\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.activeSessionId !== input.activeSessionId && resolve(job.sessionFile) !== targetSessionFile) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tjob.activeSessionId === input.activeSessionId &&\n\t\t\t\tjob.sessionId === input.sessionId &&\n\t\t\t\tresolve(job.sessionFile) === targetSessionFile &&\n\t\t\t\tjob.cwd === input.cwd\n\t\t\t) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tconst rebound = {\n\t\t\t\t...job,\n\t\t\t\tactiveSessionId: input.activeSessionId,\n\t\t\t\tsessionId: input.sessionId,\n\t\t\t\tsessionFile: input.sessionFile,\n\t\t\t\tcwd: input.cwd,\n\t\t\t};\n\t\t\treboundJobs.push(rebound);\n\t\t\treturn rebound;\n\t\t});\n\t\tif (reboundJobs.length > 0) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn reboundJobs;\n\t}\n\n\tgetHeartbeat(activeSessionId: string): AgentCronJob | undefined {\n\t\treturn this.readJobs()\n\t\t\t.filter((job) => {\n\t\t\t\treturn (\n\t\t\t\t\tjob.activeSessionId === activeSessionId &&\n\t\t\t\t\tjob.source === \"heartbeat\" &&\n\t\t\t\t\t(job.status === \"active\" || job.status === \"paused\")\n\t\t\t\t);\n\t\t\t})\n\t\t\t.sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt))[0];\n\t}\n\n\tgetLatestHeartbeat(activeSessionId: string): AgentCronJob | undefined {\n\t\treturn this.readJobs()\n\t\t\t.filter((job) => job.activeSessionId === activeSessionId && job.source === \"heartbeat\")\n\t\t\t.sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt))[0];\n\t}\n\n\tcreateHeartbeat(input: CreateAgentCronJobInput): AgentCronJob {\n\t\tconst now = input.now ?? new Date();\n\t\tconst parsed = parseAgentCronSchedule(input.scheduleText, now);\n\t\tif (parsed.schedule.kind === \"once\") {\n\t\t\tthrow new Error(\"Heartbeat schedule must be recurring\");\n\t\t}\n\t\tconst existing = this.readJobs().map((job) => {\n\t\t\tif (\n\t\t\t\tjob.activeSessionId === input.activeSessionId &&\n\t\t\t\tjob.source === \"heartbeat\" &&\n\t\t\t\t(job.status === \"active\" || job.status === \"paused\")\n\t\t\t) {\n\t\t\t\treturn { ...job, status: \"cancelled\" as const, nextRunAt: undefined, updatedAt: now.toISOString() };\n\t\t\t}\n\t\t\treturn job;\n\t\t});\n\t\tconst prompt = input.prompt.trim();\n\t\tif (!prompt) {\n\t\t\tthrow new Error(\"Heartbeat instruction cannot be empty\");\n\t\t}\n\t\tconst nowIso = now.toISOString();\n\t\tconst job: AgentCronJob = {\n\t\t\tid: randomUUID(),\n\t\t\tstatus: \"active\",\n\t\t\tsource: \"heartbeat\",\n\t\t\truntimeKind: input.runtimeKind,\n\t\t\tdeliveryMode: input.deliveryMode ?? DEFAULT_HEARTBEAT_DELIVERY_MODE,\n\t\t\tactiveSessionId: input.activeSessionId,\n\t\t\tsessionId: input.sessionId,\n\t\t\tsessionFile: input.sessionFile,\n\t\t\tcwd: input.cwd,\n\t\t\tlabel: normalizeOptionalLabel(input.label),\n\t\t\tprompt,\n\t\t\tschedule: parsed.schedule,\n\t\t\tcreatedAt: nowIso,\n\t\t\tupdatedAt: nowIso,\n\t\t\tnextRunAt: parsed.nextRunAt.toISOString(),\n\t\t\trunCount: 0,\n\t\t};\n\t\tthis.writeJobs([...existing, job]);\n\t\treturn job;\n\t}\n\n\tlistRlmHeartbeats(activeSessionId: string, options: { includeInactive?: boolean } = {}): AgentCronJob[] {\n\t\treturn this.readJobs()\n\t\t\t.filter((job) => {\n\t\t\t\tif (job.activeSessionId !== activeSessionId || job.source !== \"rlm_heartbeat\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (options.includeInactive) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn job.status === \"active\" || job.status === \"paused\";\n\t\t\t})\n\t\t\t.sort((a, b) => compareOptionalIso(a.nextRunAt, b.nextRunAt));\n\t}\n\n\tcreateRlmHeartbeat(input: CreateAgentCronJobInput): AgentCronJob {\n\t\tconst now = input.now ?? new Date();\n\t\tconst parsed = parseAgentCronSchedule(input.scheduleText, now);\n\t\tif (parsed.schedule.kind === \"once\") {\n\t\t\tthrow new Error(\"RLM heartbeat schedule must be recurring\");\n\t\t}\n\t\tconst prompt = input.prompt.trim();\n\t\tif (!prompt) {\n\t\t\tthrow new Error(\"RLM heartbeat instruction cannot be empty\");\n\t\t}\n\t\tconst nowIso = now.toISOString();\n\t\tconst job: AgentCronJob = {\n\t\t\tid: randomUUID(),\n\t\t\tstatus: \"active\",\n\t\t\tsource: \"rlm_heartbeat\",\n\t\t\truntimeKind: input.runtimeKind,\n\t\t\tdeliveryMode: input.deliveryMode ?? DEFAULT_HEARTBEAT_DELIVERY_MODE,\n\t\t\tactiveSessionId: input.activeSessionId,\n\t\t\tsessionId: input.sessionId,\n\t\t\tsessionFile: input.sessionFile,\n\t\t\tcwd: input.cwd,\n\t\t\tlabel: normalizeOptionalLabel(input.label),\n\t\t\tprompt,\n\t\t\tschedule: parsed.schedule,\n\t\t\tcreatedAt: nowIso,\n\t\t\tupdatedAt: nowIso,\n\t\t\tnextRunAt: parsed.nextRunAt.toISOString(),\n\t\t\trunCount: 0,\n\t\t};\n\t\tthis.writeJobs([...this.readJobs(), job]);\n\t\treturn job;\n\t}\n\n\tupdateRlmHeartbeat(\n\t\tactiveSessionId: string,\n\t\tid: string,\n\t\tupdate: {\n\t\t\tlabel?: string;\n\t\t\tprompt?: string;\n\t\t\tscheduleText?: string;\n\t\t\tstatus?: AgentRlmHeartbeatStatusUpdate;\n\t\t\tdeliveryMode?: AgentHeartbeatDeliveryMode;\n\t\t\tnow?: Date;\n\t\t},\n\t): AgentCronJob | undefined {\n\t\tconst now = update.now ?? new Date();\n\t\tlet updated: AgentCronJob | undefined;\n\t\tlet matchedRlmHeartbeat = false;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id || job.activeSessionId !== activeSessionId || job.source !== \"rlm_heartbeat\") {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tmatchedRlmHeartbeat = true;\n\t\t\tif (job.status === \"cancelled\" || job.status === \"completed\") {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tlet nextJob: AgentCronJob = { ...job };\n\t\t\tif (update.label !== undefined) {\n\t\t\t\tnextJob = { ...nextJob, label: normalizeOptionalLabel(update.label) };\n\t\t\t}\n\t\t\tif (update.deliveryMode !== undefined) {\n\t\t\t\tnextJob = { ...nextJob, deliveryMode: update.deliveryMode };\n\t\t\t}\n\t\t\tif (update.prompt !== undefined) {\n\t\t\t\tconst prompt = update.prompt.trim();\n\t\t\t\tif (!prompt) {\n\t\t\t\t\tthrow new Error(\"RLM heartbeat instruction cannot be empty\");\n\t\t\t\t}\n\t\t\t\tnextJob = { ...nextJob, prompt };\n\t\t\t}\n\t\t\tif (update.scheduleText !== undefined) {\n\t\t\t\tconst parsed = parseAgentCronSchedule(update.scheduleText, now);\n\t\t\t\tif (parsed.schedule.kind === \"once\") {\n\t\t\t\t\tthrow new Error(\"RLM heartbeat schedule must be recurring\");\n\t\t\t\t}\n\t\t\t\tnextJob =\n\t\t\t\t\tnextJob.status === \"paused\"\n\t\t\t\t\t\t? withoutNextRunAt({ ...nextJob, schedule: parsed.schedule })\n\t\t\t\t\t\t: { ...nextJob, schedule: parsed.schedule, nextRunAt: parsed.nextRunAt.toISOString() };\n\t\t\t}\n\t\t\tif (update.status === \"pause\") {\n\t\t\t\tnextJob = withoutNextRunAt({ ...nextJob, status: \"paused\" });\n\t\t\t} else if (update.status === \"resume\") {\n\t\t\t\tconst nextRunAt = nextRunAtForSchedule(nextJob.schedule, now);\n\t\t\t\tif (!nextRunAt) {\n\t\t\t\t\tthrow new Error(\"RLM heartbeat schedule must be recurring\");\n\t\t\t\t}\n\t\t\t\tnextJob = { ...nextJob, status: \"active\", nextRunAt: nextRunAt.toISOString() };\n\t\t\t}\n\t\t\tupdated = { ...nextJob, updatedAt: now.toISOString() };\n\t\t\treturn updated;\n\t\t});\n\t\tif (matchedRlmHeartbeat && updated) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn updated;\n\t}\n\n\tdeleteRlmHeartbeat(activeSessionId: string, id: string, now = new Date()): AgentCronJob | undefined {\n\t\tlet deleted: AgentCronJob | undefined;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id || job.activeSessionId !== activeSessionId || job.source !== \"rlm_heartbeat\") {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tdeleted = withoutNextRunAt({ ...job, status: \"cancelled\", updatedAt: now.toISOString() });\n\t\t\treturn deleted;\n\t\t});\n\t\tif (deleted) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn deleted;\n\t}\n\n\tcancelRlmHeartbeatsForSession(activeSessionId: string, now = new Date()): AgentCronJob[] {\n\t\tconst cancelled: AgentCronJob[] = [];\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (\n\t\t\t\tjob.activeSessionId !== activeSessionId ||\n\t\t\t\tjob.source !== \"rlm_heartbeat\" ||\n\t\t\t\t(job.status !== \"active\" && job.status !== \"paused\")\n\t\t\t) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tconst cancelledJob = withoutNextRunAt({ ...job, status: \"cancelled\", updatedAt: now.toISOString() });\n\t\t\tcancelled.push(cancelledJob);\n\t\t\treturn cancelledJob;\n\t\t});\n\t\tif (cancelled.length > 0) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn cancelled;\n\t}\n\n\tcancelJobsForSession(\n\t\tinput: { activeSessionId?: string; sessionId?: string; sessionFile?: string },\n\t\tnow = new Date(),\n\t): AgentCronJob[] {\n\t\tconst targetSessionFile = input.sessionFile ? resolve(input.sessionFile) : undefined;\n\t\tconst cancelled: AgentCronJob[] = [];\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tconst matches =\n\t\t\t\t(input.activeSessionId !== undefined && job.activeSessionId === input.activeSessionId) ||\n\t\t\t\t(input.sessionId !== undefined && job.sessionId === input.sessionId) ||\n\t\t\t\t(targetSessionFile !== undefined && resolve(job.sessionFile) === targetSessionFile);\n\t\t\tif (!matches || (job.status !== \"active\" && job.status !== \"paused\")) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tconst cancelledJob = withoutNextRunAt({ ...job, status: \"cancelled\", updatedAt: now.toISOString() });\n\t\t\tcancelled.push(cancelledJob);\n\t\t\treturn cancelledJob;\n\t\t});\n\t\tif (cancelled.length > 0) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn cancelled;\n\t}\n\n\tpauseHeartbeat(activeSessionId: string, now = new Date()): AgentCronJob | undefined {\n\t\tlet paused: AgentCronJob | undefined;\n\t\tconst current = this.getHeartbeat(activeSessionId);\n\t\tif (!current) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== current.id) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tpaused = { ...job, status: \"paused\", nextRunAt: undefined, updatedAt: now.toISOString() };\n\t\t\treturn paused;\n\t\t});\n\t\tthis.writeJobs(jobs);\n\t\treturn paused;\n\t}\n\n\tresumeHeartbeat(activeSessionId: string, now = new Date()): AgentCronJob | undefined {\n\t\tlet resumed: AgentCronJob | undefined;\n\t\tconst current = this.getHeartbeat(activeSessionId);\n\t\tif (!current) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst nextRunAt = nextRunAtForSchedule(current.schedule, now);\n\t\tif (!nextRunAt) {\n\t\t\tthrow new Error(\"Heartbeat schedule must be recurring\");\n\t\t}\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== current.id) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tresumed = { ...job, status: \"active\", nextRunAt: nextRunAt.toISOString(), updatedAt: now.toISOString() };\n\t\t\treturn resumed;\n\t\t});\n\t\tthis.writeJobs(jobs);\n\t\treturn resumed;\n\t}\n\n\tclearHeartbeat(activeSessionId: string, now = new Date()): AgentCronJob | undefined {\n\t\tlet cleared: AgentCronJob | undefined;\n\t\tconst current = this.getHeartbeat(activeSessionId);\n\t\tif (!current) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== current.id) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tcleared = { ...job, status: \"cancelled\", nextRunAt: undefined, updatedAt: now.toISOString() };\n\t\t\treturn cleared;\n\t\t});\n\t\tthis.writeJobs(jobs);\n\t\treturn cleared;\n\t}\n\n\tmanageHeartbeat(\n\t\tactiveSessionId: string,\n\t\tid: string,\n\t\taction: AgentHeartbeatManagementAction,\n\t\tnow = new Date(),\n\t): AgentCronJob | undefined {\n\t\tlet updated: AgentCronJob | undefined;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id || job.activeSessionId !== activeSessionId || !isHeartbeatCronJob(job)) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tif (job.status === \"cancelled\" || job.status === \"completed\") {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tif (action === \"pause\") {\n\t\t\t\tupdated = withoutNextRunAt({ ...job, status: \"paused\", updatedAt: now.toISOString() });\n\t\t\t\treturn updated;\n\t\t\t}\n\t\t\tif (action === \"stop\") {\n\t\t\t\tupdated = withoutNextRunAt({ ...job, status: \"cancelled\", updatedAt: now.toISOString() });\n\t\t\t\treturn updated;\n\t\t\t}\n\t\t\tconst nextRunAt = nextRunAtForSchedule(job.schedule, now);\n\t\t\tif (!nextRunAt) {\n\t\t\t\tthrow new Error(\"Heartbeat schedule must be recurring\");\n\t\t\t}\n\t\t\tupdated = {\n\t\t\t\t...job,\n\t\t\t\tstatus: \"active\",\n\t\t\t\tnextRunAt: nextRunAt.toISOString(),\n\t\t\t\tupdatedAt: now.toISOString(),\n\t\t\t};\n\t\t\treturn updated;\n\t\t});\n\t\tif (updated) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn updated;\n\t}\n\n\tresumeCronJob(\n\t\tid: string,\n\t\towner: { activeSessionId: string; sessionId: string; sessionFile: string },\n\t\tnow = new Date(),\n\t): AgentCronJob | undefined {\n\t\tconst jobs = this.readJobs();\n\t\tconst current = jobs.find((job) => job.id === id);\n\t\tif (!current) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (\n\t\t\tcurrent.activeSessionId !== owner.activeSessionId ||\n\t\t\tcurrent.sessionId !== owner.sessionId ||\n\t\t\tresolve(current.sessionFile) !== resolve(owner.sessionFile)\n\t\t) {\n\t\t\tthrow new Error(\"Cron job does not belong to the bound session\");\n\t\t}\n\t\tif (current.status !== \"paused\" || current.source !== \"cron\" || current.runtimeKind !== \"top-level\") {\n\t\t\tthrow new Error(\"Only paused top-level cron jobs can be resumed\");\n\t\t}\n\t\tconst nextRunAt = nextRunAtForSchedule(current.schedule, now);\n\t\tif (!nextRunAt) {\n\t\t\tthrow new Error(\"Cron resume requires a recurring schedule; reschedule one-shot jobs explicitly\");\n\t\t}\n\t\tconst resumed: AgentCronJob = {\n\t\t\t...current,\n\t\t\tstatus: \"active\",\n\t\t\tnextRunAt: nextRunAt.toISOString(),\n\t\t\tupdatedAt: now.toISOString(),\n\t\t};\n\t\tthis.writeJobs(jobs.map((job) => (job.id === id ? resumed : job)));\n\t\treturn resumed;\n\t}\n\n\tcancel(id: string, now = new Date()): AgentCronJob | undefined {\n\t\tlet cancelled: AgentCronJob | undefined;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id || job.status === \"cancelled\") {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tcancelled = { ...job, status: \"cancelled\", nextRunAt: undefined, updatedAt: now.toISOString() };\n\t\t\treturn cancelled;\n\t\t});\n\t\tif (cancelled) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn cancelled;\n\t}\n\n\trecordRunResult(id: string, result: { now?: Date; error?: unknown }): AgentCronJob | undefined {\n\t\tconst now = result.now ?? new Date();\n\t\tlet updated: AgentCronJob | undefined;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tif (job.status !== \"active\") {\n\t\t\t\tupdated = job;\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tconst lastError = result.error === undefined ? undefined : errorMessage(result.error);\n\t\t\tconst nextRunAt =\n\t\t\t\tjob.schedule.kind === \"cron\"\n\t\t\t\t\t? nextRunAtForSchedule(job.schedule, new Date(now.getTime() + 1))\n\t\t\t\t\t: job.schedule.kind === \"interval\"\n\t\t\t\t\t\t? nextRunAtForSchedule(job.schedule, now)\n\t\t\t\t\t\t: undefined;\n\t\t\tupdated = {\n\t\t\t\t...job,\n\t\t\t\tstatus: job.schedule.kind === \"once\" ? \"completed\" : \"active\",\n\t\t\t\tnextRunAt: nextRunAt?.toISOString(),\n\t\t\t\tlastRunAt: now.toISOString(),\n\t\t\t\tlastError,\n\t\t\t\trunCount: job.runCount + 1,\n\t\t\t\tupdatedAt: now.toISOString(),\n\t\t\t};\n\t\t\treturn updated;\n\t\t});\n\t\tif (updated) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn updated;\n\t}\n\n\trecordSkipResult(id: string, result: { now?: Date }): AgentCronJob | undefined {\n\t\tconst now = result.now ?? new Date();\n\t\tlet updated: AgentCronJob | undefined;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tif (job.status !== \"active\") {\n\t\t\t\tupdated = job;\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tconst nextRunAt = nextRunAtForSchedule(job.schedule, now);\n\t\t\tupdated = {\n\t\t\t\t...job,\n\t\t\t\tnextRunAt: nextRunAt?.toISOString(),\n\t\t\t\tlastSkippedAt: now.toISOString(),\n\t\t\t\tupdatedAt: now.toISOString(),\n\t\t\t};\n\t\t\treturn updated;\n\t\t});\n\t\tif (updated) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn updated;\n\t}\n\n\tdue(now = new Date()): AgentCronJob[] {\n\t\treturn this.readJobs().filter((job) => isDueJob(job, now));\n\t}\n\n\tclaimDue(dueAt = new Date(), claimedAt = dueAt): AgentCronDispatch[] {\n\t\treturn this.mutateStates((state) => claimDueInState(state, dueAt, claimedAt));\n\t}\n\n\tgetClaimedJob(id: string): AgentCronJob | undefined {\n\t\tfor (const state of this.readStates()) {\n\t\t\tif (!state.dispatches.some((dispatch) => dispatch.jobId === id)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn state.jobs.find((job) => job.id === id && job.status === \"active\");\n\t\t}\n\t\treturn undefined;\n\t}\n\n\trecordDispatchResult(\n\t\tdispatchId: string,\n\t\tresult: { now?: Date; outcome: AgentCronJobRunResult; error?: unknown },\n\t): AgentCronJob | undefined {\n\t\tlet updated: AgentCronJob | undefined;\n\t\tthis.mutateStates((state) => {\n\t\t\tconst dispatch = state.dispatches.find((candidate) => candidate.id === dispatchId);\n\t\t\tif (!dispatch) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst now = result.now ?? new Date();\n\t\t\tstate.dispatches = state.dispatches.filter((candidate) => candidate.id !== dispatchId);\n\t\t\tstate.jobs = state.jobs.map((job) => {\n\t\t\t\tif (job.id !== dispatch.jobId || job.status !== \"active\") {\n\t\t\t\t\treturn job;\n\t\t\t\t}\n\t\t\t\tif (result.outcome === \"skipped\" && result.error === undefined) {\n\t\t\t\t\tconst nextRunAt = nextRunAtForSchedule(job.schedule, now);\n\t\t\t\t\tupdated = {\n\t\t\t\t\t\t...job,\n\t\t\t\t\t\tstatus: job.schedule.kind === \"once\" ? \"completed\" : job.status,\n\t\t\t\t\t\tnextRunAt: nextRunAt?.toISOString(),\n\t\t\t\t\t\tlastSkippedAt: now.toISOString(),\n\t\t\t\t\t\tupdatedAt: now.toISOString(),\n\t\t\t\t\t};\n\t\t\t\t\treturn updated;\n\t\t\t\t}\n\t\t\t\tupdated = {\n\t\t\t\t\t...job,\n\t\t\t\t\tstatus: job.schedule.kind === \"once\" ? \"completed\" : job.status,\n\t\t\t\t\tlastRunAt: now.toISOString(),\n\t\t\t\t\tlastError: result.error === undefined ? undefined : errorMessage(result.error),\n\t\t\t\t\trunCount: job.runCount + 1,\n\t\t\t\t\tupdatedAt: now.toISOString(),\n\t\t\t\t};\n\t\t\t\treturn updated;\n\t\t\t});\n\t\t\treturn [];\n\t\t});\n\t\treturn updated;\n\t}\n\n\trecoverInterruptedDispatches(now = new Date()): AgentCronJob[] {\n\t\tconst recovered: AgentCronJob[] = [];\n\t\tthis.mutateStates((state) => {\n\t\t\trecoverInterruptedInState(state, now, recovered);\n\t\t\treturn [];\n\t\t});\n\t\treturn recovered;\n\t}\n\n\trecoverInterruptedDispatchesById(dispatchIds: readonly string[], now = new Date()): AgentCronJob[] {\n\t\tconst recovered: AgentCronJob[] = [];\n\t\tconst interruptedDispatchIds = new Set(dispatchIds);\n\t\tthis.mutateStates((state) => {\n\t\t\trecoverInterruptedInState(state, now, recovered, interruptedDispatchIds);\n\t\t\treturn [];\n\t\t});\n\t\treturn recovered;\n\t}\n\n\tgetDueJob(id: string, now = new Date()): AgentCronJob | undefined {\n\t\treturn this.readJobs().find((job) => job.id === id && isDueJob(job, now));\n\t}\n\n\tnextActiveRunAt(): Date | undefined {\n\t\tconst times = this.readJobs()\n\t\t\t.filter((job) => job.status === \"active\" && job.nextRunAt !== undefined)\n\t\t\t.map((job) => new Date(job.nextRunAt!))\n\t\t\t.filter((date) => Number.isFinite(date.getTime()))\n\t\t\t.sort((a, b) => a.getTime() - b.getTime());\n\t\treturn times[0];\n\t}\n\n\tprivate readJobs(): AgentCronJob[] {\n\t\treturn this.readStates().flatMap((state) => state.jobs);\n\t}\n\n\tprivate readStates(): CronJobsState[] {\n\t\tif (this.sessionArtifactMode) {\n\t\t\treturn [...this.sessionArtifactFiles.values()].map((path) => readJobsState(path));\n\t\t}\n\t\treturn [readJobsState(this.requireFilePath())];\n\t}\n\n\tprivate mutateStates(mutator: (state: CronJobsState) => AgentCronDispatch[]): AgentCronDispatch[] {\n\t\tconst paths = this.sessionArtifactMode ? [...this.sessionArtifactFiles.values()] : [this.requireFilePath()];\n\t\tconst previousHeartbeats = heartbeatCatalogSignature(this.readJobs());\n\t\tlet changed = false;\n\t\tconst dispatches = withCronJobsStateLocks(paths, () => {\n\t\t\tconst dispatches: AgentCronDispatch[] = [];\n\t\t\tfor (const path of paths) {\n\t\t\t\tconst state = readJobsState(path);\n\t\t\t\tconst before = JSON.stringify(state);\n\t\t\t\tdispatches.push(...mutator(state));\n\t\t\t\tif (JSON.stringify(state) !== before) {\n\t\t\t\t\twriteJobsState(path, state);\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dispatches;\n\t\t});\n\t\tif (changed && heartbeatCatalogSignature(this.readJobs()) !== previousHeartbeats) {\n\t\t\tthis.notifyHeartbeatChange();\n\t\t}\n\t\treturn dispatches;\n\t}\n\n\tprivate writeJobs(jobs: readonly AgentCronJob[]): void {\n\t\tconst previousHeartbeats = heartbeatCatalogSignature(this.readJobs());\n\t\tif (this.sessionArtifactMode) {\n\t\t\tconst registeredSessionIds = new Set(this.sessionArtifactFiles.keys());\n\t\t\tconst unregistered = jobs.find((job) => !registeredSessionIds.has(job.sessionId));\n\t\t\tif (unregistered) {\n\t\t\t\tthrow new Error(`Cron job ${unregistered.id} targets an unregistered session artifact`);\n\t\t\t}\n\t\t\tconst paths = [...this.sessionArtifactFiles.values()];\n\t\t\twithCronJobsStateLocks(paths, () => {\n\t\t\t\tconst currentBySessionId = new Map(\n\t\t\t\t\t[...this.sessionArtifactFiles].map(([sessionId, path]) => [sessionId, readJobsState(path)]),\n\t\t\t\t);\n\t\t\t\tconst incomingById = new Map(jobs.map((job) => [job.id, job]));\n\t\t\t\tconst mergedJobsBySessionId = new Map<string, AgentCronJob[]>();\n\t\t\t\tfor (const [sessionId, current] of currentBySessionId) {\n\t\t\t\t\tconst retained = current.jobs.filter((job) => {\n\t\t\t\t\t\tconst incoming = incomingById.get(job.id);\n\t\t\t\t\t\treturn incoming === undefined || incoming.sessionId === sessionId;\n\t\t\t\t\t});\n\t\t\t\t\tmergedJobsBySessionId.set(\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\tmergeFreshJobs(\n\t\t\t\t\t\t\tretained,\n\t\t\t\t\t\t\tjobs.filter((job) => job.sessionId === sessionId),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst sessionIdByJobId = new Map(\n\t\t\t\t\t[...mergedJobsBySessionId].flatMap(([sessionId, sessionJobs]) =>\n\t\t\t\t\t\tsessionJobs.map((job) => [job.id, sessionId] as const),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tconst dispatches = [...currentBySessionId.values()].flatMap((state) => state.dispatches);\n\t\t\t\tfor (const [sessionId, path] of this.sessionArtifactFiles) {\n\t\t\t\t\tconst current = currentBySessionId.get(sessionId) ?? { jobs: [], dispatches: [] };\n\t\t\t\t\tconst nextState = {\n\t\t\t\t\t\tjobs: mergedJobsBySessionId.get(sessionId) ?? [],\n\t\t\t\t\t\tdispatches: dispatches.filter((dispatch) => sessionIdByJobId.get(dispatch.jobId) === sessionId),\n\t\t\t\t\t};\n\t\t\t\t\tif (JSON.stringify(current) !== JSON.stringify(nextState)) {\n\t\t\t\t\t\twriteJobsState(path, nextState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (heartbeatCatalogSignature(this.readJobs()) !== previousHeartbeats) {\n\t\t\t\tthis.notifyHeartbeatChange();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst path = this.requireFilePath();\n\t\twithCronJobsStateLocks([path], () => writeJobsFile(path, jobs, true));\n\t\tif (heartbeatCatalogSignature(this.readJobs()) !== previousHeartbeats) {\n\t\t\tthis.notifyHeartbeatChange();\n\t\t}\n\t}\n\n\tprivate notifyHeartbeatChange(): void {\n\t\tfor (const listener of this.heartbeatChangeListeners) {\n\t\t\tlistener();\n\t\t}\n\t}\n\n\tprivate requireFilePath(): string {\n\t\tif (!this.filePath) {\n\t\t\tthrow new Error(\"Cron job store does not have a legacy file path\");\n\t\t}\n\t\treturn this.filePath;\n\t}\n}\n\nexport function migrateLegacyCronJobsToSessionArtifacts(\n\tfilePath: string,\n\toptions: { isSessionOwned?: (job: AgentCronJob) => boolean; now?: Date } = {},\n): number {\n\tconst now = options.now ?? new Date();\n\tconst legacyState = readJobsState(filePath);\n\trecoverInterruptedInState(legacyState, now, []);\n\tconst jobs = legacyState.jobs.map((job) => {\n\t\tif (\n\t\t\t!options.isSessionOwned ||\n\t\t\toptions.isSessionOwned(job) ||\n\t\t\t(job.status !== \"active\" && job.status !== \"paused\")\n\t\t) {\n\t\t\treturn job;\n\t\t}\n\t\treturn withoutNextRunAt({ ...job, status: \"cancelled\", updatedAt: now.toISOString() });\n\t});\n\tif (jobs.length === 0) {\n\t\treturn 0;\n\t}\n\tconst jobsByArtifact = new Map<string, AgentCronJob[]>();\n\tfor (const job of jobs) {\n\t\tconst artifactPath = join(\n\t\t\tgetSessionArtifactPathForFile(resolve(job.sessionFile), job.sessionId),\n\t\t\tSESSION_SCHEDULED_JOBS_FILENAME,\n\t\t);\n\t\tconst grouped = jobsByArtifact.get(artifactPath) ?? [];\n\t\tgrouped.push(job);\n\t\tjobsByArtifact.set(artifactPath, grouped);\n\t}\n\tfor (const [artifactPath, artifactJobs] of jobsByArtifact) {\n\t\twriteJobsFile(artifactPath, artifactJobs, true);\n\t}\n\trenameSync(filePath, `${filePath}.migrated-${Date.now()}`);\n\treturn jobs.length;\n}\n\nexport class AgentCronScheduler {\n\tprivate timer: ReturnType<typeof setTimeout> | undefined;\n\tprivate running = false;\n\tprivate stopped = true;\n\tprivate hasStarted = false;\n\tprivate readonly dispatchLanes = new Map<string, Promise<void>>();\n\n\tconstructor(\n\t\tprivate readonly store: AgentCronJobStore,\n\t\tprivate readonly hooks: AgentCronSchedulerHooks,\n\t) {}\n\n\tstart(): void {\n\t\tthis.stopped = false;\n\t\tif (!this.hasStarted) {\n\t\t\tthis.hasStarted = true;\n\t\t\tthis.store.recoverInterruptedDispatches(this.now());\n\t\t}\n\t\tthis.scheduleNext();\n\t}\n\n\tstop(): void {\n\t\tthis.stopped = true;\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = undefined;\n\t\t}\n\t}\n\n\twake(): void {\n\t\tif (this.stopped) {\n\t\t\treturn;\n\t\t}\n\t\tthis.scheduleNext(0);\n\t}\n\n\tasync runDue(now = this.now()): Promise<number> {\n\t\tif (this.running || (this.stopped && this.hasStarted)) {\n\t\t\treturn 0;\n\t\t}\n\t\tthis.running = true;\n\t\tconst dispatches: Array<{ dispatch: AgentCronDispatch; endDispatch?: () => void }> = [];\n\t\tlet claimedDispatches: AgentCronDispatch[] | undefined;\n\t\ttry {\n\t\t\tclaimedDispatches = this.store.claimDue(now, this.now());\n\t\t\tfor (const dispatch of claimedDispatches) {\n\t\t\t\tdispatches.push({ dispatch, endDispatch: this.hooks.beginDispatch?.(dispatch) });\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tfor (const claimed of dispatches) claimed.endDispatch?.();\n\t\t\tif (claimedDispatches) {\n\t\t\t\tthis.store.recoverInterruptedDispatchesById(\n\t\t\t\t\tclaimedDispatches.map((dispatch) => dispatch.id),\n\t\t\t\t\tthis.now(),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tthis.running = false;\n\t\t\tif (!this.stopped) {\n\t\t\t\tthis.scheduleNext();\n\t\t\t}\n\t\t}\n\t\tconst results = await Promise.all(\n\t\t\tdispatches.map(({ dispatch, endDispatch }) => this.queueDispatch(dispatch, endDispatch)),\n\t\t);\n\t\treturn results.filter((result) => result !== \"skipped\").length;\n\t}\n\n\tprivate queueDispatch(\n\t\tdispatch: AgentCronDispatch,\n\t\tendDispatch?: () => void,\n\t): Promise<AgentCronJobRunResult | undefined> {\n\t\tconst laneKey = dispatch.job.activeSessionId;\n\t\tconst previous = this.dispatchLanes.get(laneKey) ?? Promise.resolve();\n\t\tconst task = previous\n\t\t\t.catch(() => undefined)\n\t\t\t.then(async (): Promise<AgentCronJobRunResult | undefined> => {\n\t\t\t\ttry {\n\t\t\t\t\tconst job = this.store.getClaimedJob(dispatch.job.id);\n\t\t\t\t\tif (!job) {\n\t\t\t\t\t\tthis.store.recordDispatchResult(dispatch.id, { now: this.now(), outcome: \"skipped\" });\n\t\t\t\t\t\treturn \"skipped\";\n\t\t\t\t\t}\n\t\t\t\t\tlet runResult: AgentCronJobRunResult | undefined;\n\t\t\t\t\tlet error: unknown;\n\t\t\t\t\ttry {\n\t\t\t\t\t\trunResult = await this.hooks.runJob(job);\n\t\t\t\t\t} catch (runError) {\n\t\t\t\t\t\terror = runError;\n\t\t\t\t\t\tthis.hooks.onError?.(job, runError);\n\t\t\t\t\t}\n\t\t\t\t\tthis.store.recordDispatchResult(dispatch.id, {\n\t\t\t\t\t\tnow: this.now(),\n\t\t\t\t\t\toutcome: runResult === \"skipped\" && error === undefined ? \"skipped\" : \"ran\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t});\n\t\t\t\t\treturn runResult;\n\t\t\t\t} finally {\n\t\t\t\t\tendDispatch?.();\n\t\t\t\t}\n\t\t\t});\n\t\tconst lane = task.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\tthis.dispatchLanes.set(laneKey, lane);\n\t\tvoid lane.finally(() => {\n\t\t\tif (this.dispatchLanes.get(laneKey) === lane) {\n\t\t\t\tthis.dispatchLanes.delete(laneKey);\n\t\t\t}\n\t\t});\n\t\treturn task;\n\t}\n\n\tprivate scheduleNext(delayMs?: number): void {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = undefined;\n\t\t}\n\t\tconst now = this.now();\n\t\tconst nextDelay =\n\t\t\tdelayMs ??\n\t\t\t(() => {\n\t\t\t\tconst next = this.store.nextActiveRunAt();\n\t\t\t\tif (!next) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn Math.max(0, next.getTime() - now.getTime());\n\t\t\t})();\n\t\tif (nextDelay === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tthis.timer = setTimeout(\n\t\t\t() => {\n\t\t\t\tvoid this.runDue();\n\t\t\t},\n\t\t\tMath.min(nextDelay, MAX_TIMEOUT_MS),\n\t\t);\n\t}\n\n\tprivate now(): Date {\n\t\treturn this.hooks.now?.() ?? new Date();\n\t}\n}\n\nexport function parseAgentCronSchedule(\n\tinput: string,\n\tnow = new Date(),\n): { schedule: AgentCronSchedule; nextRunAt: Date } {\n\tconst text = stripMatchingQuotes(input.trim());\n\tif (!text) {\n\t\tthrow new Error(\"Cron schedule cannot be empty\");\n\t}\n\n\tconst inMatch = /^in\\s+(\\d+)\\s*(m|min|mins|minute|minutes|h|hr|hrs|hour|hours|d|day|days)$/i.exec(text);\n\tif (inMatch) {\n\t\tconst amount = Number.parseInt(inMatch[1]!, 10);\n\t\tconst unit = inMatch[2]!.toLowerCase();\n\t\tconst multiplier = unit.startsWith(\"m\")\n\t\t\t? ONE_MINUTE_MS\n\t\t\t: unit.startsWith(\"h\")\n\t\t\t\t? 60 * ONE_MINUTE_MS\n\t\t\t\t: 24 * 60 * ONE_MINUTE_MS;\n\t\treturn {\n\t\t\tschedule: { kind: \"once\", expression: text },\n\t\t\tnextRunAt: new Date(now.getTime() + amount * multiplier),\n\t\t};\n\t}\n\n\tconst everyMatch =\n\t\t/^(?:every|each)\\s+(\\d+)\\s*(s|sec|secs|second|seconds|m|min|mins|minute|minutes|h|hr|hrs|hour|hours)$/i.exec(\n\t\t\ttext,\n\t\t);\n\tif (everyMatch) {\n\t\tconst amount = Number.parseInt(everyMatch[1]!, 10);\n\t\tconst unit = everyMatch[2]!.toLowerCase();\n\t\tconst multiplier = unit.startsWith(\"s\")\n\t\t\t? ONE_SECOND_MS\n\t\t\t: unit.startsWith(\"m\")\n\t\t\t\t? ONE_MINUTE_MS\n\t\t\t\t: 60 * ONE_MINUTE_MS;\n\t\tconst intervalMs = amount * multiplier;\n\t\tif (intervalMs < 10 * ONE_SECOND_MS) {\n\t\t\tthrow new Error(\"Recurring interval must be at least 10 seconds\");\n\t\t}\n\t\treturn {\n\t\t\tschedule: { kind: \"interval\", expression: text, intervalMs },\n\t\t\tnextRunAt: new Date(now.getTime() + intervalMs),\n\t\t};\n\t}\n\n\tif (text.toLowerCase().startsWith(\"at \")) {\n\t\tconst when = new Date(text.slice(3).trim());\n\t\tif (!Number.isFinite(when.getTime())) {\n\t\t\tthrow new Error(\"Invalid one-shot schedule. Use: at <ISO date>\");\n\t\t}\n\t\tif (when.getTime() <= now.getTime()) {\n\t\t\tthrow new Error(\"One-shot schedule must be in the future\");\n\t\t}\n\t\treturn { schedule: { kind: \"once\", expression: text }, nextRunAt: when };\n\t}\n\n\tconst expression = normalizeCronAlias(text);\n\tconst nextRunAt = nextCronRunAfter(expression, now);\n\treturn { schedule: { kind: \"cron\", expression }, nextRunAt };\n}\n\nexport function normalizeHeartbeatSchedule(input: string | undefined): string {\n\tconst text = input?.trim();\n\tif (!text) {\n\t\treturn DEFAULT_HEARTBEAT_SCHEDULE;\n\t}\n\tif (/^\\d+\\s*(s|sec|secs|second|seconds|m|min|mins|minute|minutes|h|hr|hrs|hour|hours)$/i.test(text)) {\n\t\treturn `every ${text}`;\n\t}\n\treturn text;\n}\n\nexport function normalizeHeartbeatDeliveryMode(value: unknown): AgentHeartbeatDeliveryMode | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (value === \"steer\" || value === \"follow_up\") {\n\t\treturn value;\n\t}\n\tthrow new Error('Heartbeat delivery mode must be \"steer\" or \"follow_up\"');\n}\n\nexport function resolveHeartbeatStreamingBehavior(\n\tdeliveryMode: AgentHeartbeatDeliveryMode | undefined,\n): \"steer\" | \"followUp\" {\n\treturn (deliveryMode ?? DEFAULT_HEARTBEAT_DELIVERY_MODE) === \"follow_up\" ? \"followUp\" : \"steer\";\n}\n\nexport function parseHeartbeatCommand(input: string): ParsedHeartbeatCommand {\n\tconst text = input.replace(/^\\/heartbeat\\b/, \"\").trim();\n\tif (!text || text === \"status\") {\n\t\treturn { type: \"status\" };\n\t}\n\tif (text === \"pause\") {\n\t\treturn { type: \"pause\" };\n\t}\n\tif (text === \"resume\") {\n\t\treturn { type: \"resume\" };\n\t}\n\tif (text === \"clear\" || text === \"stop\") {\n\t\treturn { type: \"clear\" };\n\t}\n\n\tconst leadingDelivery = consumeDeliveryOption(text);\n\tlet deliveryMode = leadingDelivery.deliveryMode;\n\tlet remaining = leadingDelivery.rest;\n\n\tconst option = consumeEveryOption(remaining);\n\tif (option) {\n\t\tconst trailingDelivery = consumeDeliveryOption(option.rest);\n\t\tdeliveryMode = trailingDelivery.deliveryMode ?? deliveryMode;\n\t\tif (!trailingDelivery.rest) {\n\t\t\tthrow new Error(\"Usage: /heartbeat [--every <interval>] [--steer|--follow-up] <instruction>\");\n\t\t}\n\t\treturn {\n\t\t\ttype: \"set\",\n\t\t\tschedule: normalizeHeartbeatSchedule(option.interval),\n\t\t\tinstruction: trailingDelivery.rest,\n\t\t\t...(deliveryMode ? { deliveryMode } : {}),\n\t\t};\n\t}\n\n\tconst leadingSchedule = consumeLeadingEverySchedule(remaining);\n\tif (leadingSchedule) {\n\t\tconst trailingDelivery = consumeDeliveryOption(leadingSchedule.rest);\n\t\tdeliveryMode = trailingDelivery.deliveryMode ?? deliveryMode;\n\t\tif (!trailingDelivery.rest) {\n\t\t\tthrow new Error(\"Usage: /heartbeat [--every <interval>] [--steer|--follow-up] <instruction>\");\n\t\t}\n\t\treturn {\n\t\t\ttype: \"set\",\n\t\t\tschedule: normalizeHeartbeatSchedule(leadingSchedule.interval),\n\t\t\tinstruction: trailingDelivery.rest,\n\t\t\t...(deliveryMode ? { deliveryMode } : {}),\n\t\t};\n\t}\n\n\tremaining = remaining.trim();\n\tif (!remaining) {\n\t\tthrow new Error(\"Usage: /heartbeat [--every <interval>] [--steer|--follow-up] <instruction>\");\n\t}\n\treturn {\n\t\ttype: \"set\",\n\t\tschedule: DEFAULT_HEARTBEAT_SCHEDULE,\n\t\tinstruction: remaining,\n\t\t...(deliveryMode ? { deliveryMode } : {}),\n\t};\n}\n\nexport function nextRunAtForSchedule(schedule: AgentCronSchedule, after: Date): Date | undefined {\n\tif (schedule.kind === \"once\") {\n\t\treturn undefined;\n\t}\n\tif (schedule.kind === \"interval\") {\n\t\tif (!schedule.intervalMs || schedule.intervalMs <= 0) {\n\t\t\tthrow new Error(`Invalid interval schedule: ${schedule.expression}`);\n\t\t}\n\t\treturn new Date(after.getTime() + schedule.intervalMs);\n\t}\n\treturn nextCronRunAfter(schedule.expression, after);\n}\n\nexport function formatAgentCronJob(job: AgentCronJob): string {\n\tconst next = job.nextRunAt ? new Date(job.nextRunAt).toLocaleString() : \"-\";\n\tconst last = job.lastRunAt ? new Date(job.lastRunAt).toLocaleString() : \"-\";\n\tconst preview = job.prompt.replace(/\\s+/g, \" \").slice(0, 80);\n\tconst error = job.lastError ? ` error=${job.lastError}` : \"\";\n\tconst label = job.label ? ` label=\"${job.label}\"` : \"\";\n\tconst skipped = job.lastSkippedAt ? ` skipped=${new Date(job.lastSkippedAt).toLocaleString()}` : \"\";\n\treturn `${job.id} ${job.status}${label} next=${next} last=${last}${skipped} runs=${job.runCount} schedule=\"${job.schedule.expression}\" prompt=\"${preview}\"${error}`;\n}\n\nfunction consumeDeliveryOption(text: string): { deliveryMode: AgentHeartbeatDeliveryMode | undefined; rest: string } {\n\tlet rest = text.trim();\n\tif (/(?:^|\\s)--deliver=?$/i.test(rest)) {\n\t\tthrow new Error('Heartbeat delivery mode must be \"steer\" or \"follow_up\"');\n\t}\n\tlet deliveryMode: AgentHeartbeatDeliveryMode | undefined;\n\tlet leading = consumeLeadingDeliveryFlag(rest);\n\twhile (leading) {\n\t\tdeliveryMode = leading.deliveryMode;\n\t\trest = leading.rest.trim();\n\t\tleading = consumeLeadingDeliveryFlag(rest);\n\t}\n\n\tlet trailing = consumeTrailingDeliveryFlag(rest);\n\tlet trailingDeliveryMode: AgentHeartbeatDeliveryMode | undefined;\n\twhile (trailing) {\n\t\t// Consume all trailing flags, but keep the rightmost flag's mode because it\n\t\t// is textually latest and should win over earlier flags.\n\t\ttrailingDeliveryMode ??= trailing.deliveryMode;\n\t\trest = trailing.rest.trim();\n\t\ttrailing = consumeTrailingDeliveryFlag(rest);\n\t}\n\treturn { deliveryMode: trailingDeliveryMode ?? deliveryMode, rest };\n}\n\nfunction consumeLeadingDeliveryFlag(\n\ttext: string,\n): { deliveryMode: AgentHeartbeatDeliveryMode; rest: string } | undefined {\n\tconst match = /^--(?:deliver(?:=|\\s+)(\\S+)|(steer)|(follow[-_]up))(?:\\s+|$)([\\s\\S]*)$/i.exec(text);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tdeliveryMode: parseDeliveryModeToken(match[1] ?? match[2] ?? match[3] ?? \"\"),\n\t\trest: match[4]?.trim() ?? \"\",\n\t};\n}\n\nfunction consumeTrailingDeliveryFlag(\n\ttext: string,\n): { deliveryMode: AgentHeartbeatDeliveryMode; rest: string } | undefined {\n\tconst deliverWithSpace = /^([\\s\\S]*?)\\s+--deliver\\s+(\\S+)$/i.exec(text);\n\tif (deliverWithSpace) {\n\t\treturn { deliveryMode: parseDeliveryModeToken(deliverWithSpace[2] ?? \"\"), rest: deliverWithSpace[1] ?? \"\" };\n\t}\n\tconst deliverWithEquals = /^([\\s\\S]*?)\\s+--deliver=(\\S+)$/i.exec(text);\n\tif (deliverWithEquals) {\n\t\treturn { deliveryMode: parseDeliveryModeToken(deliverWithEquals[2] ?? \"\"), rest: deliverWithEquals[1] ?? \"\" };\n\t}\n\tconst shorthand = /^([\\s\\S]*?)\\s+--(steer|follow[-_]up)$/i.exec(text);\n\tif (shorthand) {\n\t\treturn { deliveryMode: parseDeliveryModeToken(shorthand[2] ?? \"\"), rest: shorthand[1] ?? \"\" };\n\t}\n\treturn undefined;\n}\n\nfunction parseDeliveryModeToken(token: string): AgentHeartbeatDeliveryMode {\n\tconst normalized = token.toLowerCase().replace(\"-\", \"_\");\n\tif (normalized === \"steer\" || normalized === \"follow_up\") {\n\t\treturn normalized;\n\t}\n\tthrow new Error('Heartbeat delivery mode must be \"steer\" or \"follow_up\"');\n}\n\nfunction consumeEveryOption(text: string): { interval: string; rest: string } | undefined {\n\tconst match =\n\t\t/^--every(?:=|\\s+)(?:\"([^\"]+)\"|'([^']+)'|(\\d+\\s*(?:s|sec|secs|second|seconds|m|min|mins|minute|minutes|h|hr|hrs|hour|hours))|(\\S+))(?:\\s+|$)([\\s\\S]*)$/i.exec(\n\t\t\ttext,\n\t\t);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tinterval: match[1] ?? match[2] ?? match[3] ?? match[4] ?? \"\",\n\t\trest: match[5]?.trim() ?? \"\",\n\t};\n}\n\nfunction consumeLeadingEverySchedule(text: string): { interval: string; rest: string } | undefined {\n\tconst match =\n\t\t/^(every|each)\\s+\\d+\\s*(?:s|sec|secs|second|seconds|m|min|mins|minute|minutes|h|hr|hrs|hour|hours)\\b/i.exec(text);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tinterval: match[0],\n\t\trest: text\n\t\t\t.slice(match[0].length)\n\t\t\t.trim()\n\t\t\t// Strip only a standalone \"--\" separator, never a flag like \"--follow-up\".\n\t\t\t.replace(/^--(?=\\s|$)/, \"\")\n\t\t\t.trim(),\n\t};\n}\n\nexport function isHeartbeatCronJob(job: AgentCronJob): boolean {\n\treturn job.source === \"heartbeat\" || job.source === \"rlm_heartbeat\";\n}\n\nexport function shouldDeferHeartbeatCronJob(job: AgentCronJob, activity: HeartbeatCronSessionActivity): boolean {\n\tif (!isHeartbeatCronJob(job)) {\n\t\treturn false;\n\t}\n\t// States where delivering a heartbeat is unsafe or would stack redundant work,\n\t// regardless of delivery mode.\n\tconst busyBesidesStreaming =\n\t\tactivity.isCompacting === true ||\n\t\tactivity.isRetrying === true ||\n\t\tactivity.isBashRunning ||\n\t\tactivity.hasPendingSessionWork ||\n\t\t(!activity.isStreaming && activity.unfinishedActionCount > 0);\n\tif (busyBesidesStreaming) {\n\t\treturn true;\n\t}\n\t// \"steer\" heartbeats interrupt the current turn, so a plain streaming turn must\n\t// not defer them; \"follow_up\" heartbeats wait, so streaming still defers.\n\tif (resolveHeartbeatStreamingBehavior(job.deliveryMode) === \"steer\") {\n\t\treturn false;\n\t}\n\treturn activity.isStreaming;\n}\n\nfunction nextCronRunAfter(expression: string, after: Date): Date {\n\tconst fields = parseCronExpression(expression);\n\tconst candidate = new Date(after.getTime());\n\tcandidate.setSeconds(0, 0);\n\tcandidate.setMinutes(candidate.getMinutes() + 1);\n\n\tconst deadline = candidate.getTime() + 366 * 24 * 60 * ONE_MINUTE_MS;\n\twhile (candidate.getTime() <= deadline) {\n\t\tif (matchesCronFields(candidate, fields)) {\n\t\t\treturn candidate;\n\t\t}\n\t\tcandidate.setMinutes(candidate.getMinutes() + 1);\n\t}\n\tthrow new Error(`Cron schedule did not match within one year: ${expression}`);\n}\n\nfunction parseCronExpression(expression: string): CronFields {\n\tconst parts = expression.trim().split(/\\s+/);\n\tif (parts.length !== 5) {\n\t\tthrow new Error(\n\t\t\t\"Unsupported cron schedule. Use 'in 10m', 'at <ISO date>', @hourly, or five fields: minute hour day month weekday\",\n\t\t);\n\t}\n\treturn {\n\t\tminute: parseCronField(parts[0]!, 0, 59),\n\t\thour: parseCronField(parts[1]!, 0, 23),\n\t\tdayOfMonth: parseCronField(parts[2]!, 1, 31),\n\t\tmonth: parseCronField(parts[3]!, 1, 12),\n\t\tdayOfWeek: parseCronField(parts[4]!, 0, 7),\n\t};\n}\n\ninterface CronFields {\n\tminute: Set<number>;\n\thour: Set<number>;\n\tdayOfMonth: Set<number>;\n\tmonth: Set<number>;\n\tdayOfWeek: Set<number>;\n}\n\nfunction parseCronField(field: string, min: number, max: number): Set<number> {\n\tconst values = new Set<number>();\n\tfor (const part of field.split(\",\")) {\n\t\tif (!part) {\n\t\t\tthrow new Error(`Invalid cron field: ${field}`);\n\t\t}\n\t\tconst [rangeText, stepText] = part.split(\"/\");\n\t\tconst step = stepText === undefined ? 1 : parseCronNumber(stepText, 1, max);\n\t\tlet start: number;\n\t\tlet end: number;\n\t\tif (rangeText === \"*\") {\n\t\t\tstart = min;\n\t\t\tend = max;\n\t\t} else if (rangeText?.includes(\"-\")) {\n\t\t\tconst [startText, endText] = rangeText.split(\"-\");\n\t\t\tstart = parseCronNumber(startText, min, max);\n\t\t\tend = parseCronNumber(endText, min, max);\n\t\t\tif (start > end) {\n\t\t\t\tthrow new Error(`Invalid cron range: ${rangeText}`);\n\t\t\t}\n\t\t} else {\n\t\t\tstart = parseCronNumber(rangeText, min, max);\n\t\t\tend = start;\n\t\t}\n\t\tfor (let value = start; value <= end; value += step) {\n\t\t\tvalues.add(value);\n\t\t}\n\t}\n\treturn values;\n}\n\nfunction parseCronNumber(value: string | undefined, min: number, max: number): number {\n\tif (!value || !/^\\d+$/.test(value)) {\n\t\tthrow new Error(`Invalid cron number: ${value ?? \"\"}`);\n\t}\n\tconst parsed = Number.parseInt(value, 10);\n\tif (parsed < min || parsed > max) {\n\t\tthrow new Error(`Cron number out of range: ${value}`);\n\t}\n\treturn parsed;\n}\n\nfunction matchesCronFields(date: Date, fields: CronFields): boolean {\n\tconst day = date.getDay();\n\tconst dayMatches = fields.dayOfWeek.has(day) || (day === 0 && fields.dayOfWeek.has(7));\n\treturn (\n\t\tfields.minute.has(date.getMinutes()) &&\n\t\tfields.hour.has(date.getHours()) &&\n\t\tfields.dayOfMonth.has(date.getDate()) &&\n\t\tfields.month.has(date.getMonth() + 1) &&\n\t\tdayMatches\n\t);\n}\n\nfunction normalizeCronAlias(text: string): string {\n\tswitch (text) {\n\t\tcase \"@hourly\":\n\t\t\treturn \"0 * * * *\";\n\t\tcase \"@daily\":\n\t\t\treturn \"0 0 * * *\";\n\t\tcase \"@weekly\":\n\t\t\treturn \"0 0 * * 0\";\n\t\tcase \"@monthly\":\n\t\t\treturn \"0 0 1 * *\";\n\t\tdefault:\n\t\t\treturn text;\n\t}\n}\n\nfunction stripMatchingQuotes(value: string): string {\n\tif (\n\t\tvalue.length >= 2 &&\n\t\t((value.startsWith('\"') && value.endsWith('\"')) || (value.startsWith(\"'\") && value.endsWith(\"'\")))\n\t) {\n\t\treturn value.slice(1, -1);\n\t}\n\treturn value;\n}\n\nfunction isDueJob(job: AgentCronJob, now: Date): boolean {\n\treturn job.status === \"active\" && job.nextRunAt !== undefined && Date.parse(job.nextRunAt) <= now.getTime();\n}\n\nfunction withCronJobsStateLocks<T>(paths: readonly string[], action: () => T): T {\n\tconst releases: Array<() => void> = [];\n\ttry {\n\t\tfor (const path of [...new Set(paths)].sort()) {\n\t\t\tmkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n\t\t\tlet release: (() => void) | undefined;\n\t\t\tlet lockCompromised = false;\n\t\t\tfor (let attempt = 0; attempt < 100; attempt++) {\n\t\t\t\ttry {\n\t\t\t\t\trelease = lockSync(path, {\n\t\t\t\t\t\trealpath: false,\n\t\t\t\t\t\tlockfilePath: `${path}.lock`,\n\t\t\t\t\t\tstale: 30_000,\n\t\t\t\t\t\tonCompromised: () => {\n\t\t\t\t\t\t\tlockCompromised = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tif (lockCompromised) {\n\t\t\t\t\t\trelease();\n\t\t\t\t\t\tthrow new Error(`Cron jobs lock compromised: ${path}`);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (lockCompromised) {\n\t\t\t\t\t\tthrow new Error(`Cron jobs lock compromised: ${path}`);\n\t\t\t\t\t}\n\t\t\t\t\tif ((error as NodeJS.ErrnoException).code !== \"ELOCKED\" || attempt === 99) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tAtomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 10);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!release) {\n\t\t\t\tthrow new Error(`Could not coordinate scheduled jobs: ${path}`);\n\t\t\t}\n\t\t\treleases.push(release);\n\t\t}\n\t\treturn action();\n\t} finally {\n\t\tfor (const release of releases.reverse()) {\n\t\t\trelease();\n\t\t}\n\t}\n}\n\nfunction readJobsState(path: string): CronJobsState {\n\tif (!existsSync(path)) {\n\t\treturn { jobs: [], dispatches: [] };\n\t}\n\tconst parsed = JSON.parse(readFileSync(path, \"utf-8\")) as CronJobsFile;\n\treturn {\n\t\tjobs: Array.isArray(parsed.jobs) ? parsed.jobs.filter(isAgentCronJob) : [],\n\t\tdispatches: Array.isArray(parsed.dispatches) ? parsed.dispatches.filter(isAgentCronDispatchRecord) : [],\n\t};\n}\n\nfunction writeJobsFile(path: string, jobs: readonly AgentCronJob[], mergeCurrent: boolean): void {\n\tconst current = readJobsState(path);\n\twriteJobsState(path, {\n\t\tjobs: mergeCurrent ? mergeFreshJobs(current.jobs, jobs) : [...jobs],\n\t\tdispatches: current.dispatches,\n\t});\n}\n\nfunction writeJobsState(path: string, state: CronJobsState): void {\n\tconst directory = dirname(path);\n\tmkdirSync(directory, { recursive: true, mode: 0o700 });\n\tconst tempPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n\tconst descriptor = openSync(tempPath, \"w\", 0o600);\n\ttry {\n\t\twriteFileSync(descriptor, `${JSON.stringify(state, null, 2)}\\n`, \"utf-8\");\n\t\tfsyncSync(descriptor);\n\t} finally {\n\t\tcloseSync(descriptor);\n\t}\n\trenameSync(tempPath, path);\n\ttry {\n\t\tconst directoryDescriptor = openSync(directory, \"r\");\n\t\ttry {\n\t\t\tfsyncSync(directoryDescriptor);\n\t\t} finally {\n\t\t\tcloseSync(directoryDescriptor);\n\t\t}\n\t} catch {\n\t\t// Directory fsync is unavailable on some platforms; the atomic rename still protects readers.\n\t}\n}\n\nfunction claimDueInState(state: CronJobsState, dueAt: Date, claimedAt: Date): AgentCronDispatch[] {\n\tconst dispatches: AgentCronDispatch[] = [];\n\tconst claimedJobIds = new Set(state.dispatches.map((dispatch) => dispatch.jobId));\n\tstate.jobs = state.jobs.map((job) => {\n\t\tif (!isDueJob(job, dueAt)) {\n\t\t\treturn job;\n\t\t}\n\t\tconst scheduledFor = job.nextRunAt!;\n\t\tconst nextRunAt = nextRunAtForSchedule(job.schedule, claimedAt)?.toISOString();\n\t\tconst advanced = nextRunAt\n\t\t\t? { ...job, nextRunAt, updatedAt: claimedAt.toISOString() }\n\t\t\t: withoutNextRunAt({ ...job, updatedAt: claimedAt.toISOString() });\n\t\tif (claimedJobIds.has(job.id)) {\n\t\t\treturn { ...advanced, lastSkippedAt: claimedAt.toISOString() };\n\t\t}\n\t\tconst dispatch: AgentCronDispatchRecord = {\n\t\t\tid: randomUUID(),\n\t\t\tjobId: job.id,\n\t\t\tclaimedAt: claimedAt.toISOString(),\n\t\t\tscheduledFor,\n\t\t};\n\t\tstate.dispatches.push(dispatch);\n\t\tdispatches.push({ id: dispatch.id, job: advanced });\n\t\treturn advanced;\n\t});\n\treturn dispatches;\n}\n\nfunction recoverInterruptedInState(\n\tstate: CronJobsState,\n\tnow: Date,\n\trecovered: AgentCronJob[],\n\tdispatchIds?: ReadonlySet<string>,\n): void {\n\tconst interrupted = dispatchIds\n\t\t? state.dispatches.filter((dispatch) => dispatchIds.has(dispatch.id))\n\t\t: state.dispatches;\n\tif (interrupted.length === 0) {\n\t\treturn;\n\t}\n\tconst interruptedIds = new Set(interrupted.map((dispatch) => dispatch.jobId));\n\tstate.dispatches = dispatchIds ? state.dispatches.filter((dispatch) => !dispatchIds.has(dispatch.id)) : [];\n\tstate.jobs = state.jobs.map((job) => {\n\t\tif (!interruptedIds.has(job.id) || job.status !== \"active\") {\n\t\t\treturn job;\n\t\t}\n\t\tconst next = {\n\t\t\t...job,\n\t\t\tstatus: job.schedule.kind === \"once\" ? (\"completed\" as const) : job.status,\n\t\t\tlastError: \"Interrupted before scheduled operation completion\",\n\t\t\tupdatedAt: now.toISOString(),\n\t\t};\n\t\trecovered.push(next);\n\t\treturn next;\n\t});\n}\n\nfunction mergeFreshJobs(currentJobs: readonly AgentCronJob[], nextJobs: readonly AgentCronJob[]): AgentCronJob[] {\n\tconst merged = new Map<string, AgentCronJob>();\n\tfor (const job of currentJobs) {\n\t\tmerged.set(job.id, job);\n\t}\n\tfor (const job of nextJobs) {\n\t\tconst current = merged.get(job.id);\n\t\tif (!current || isAtLeastAsFresh(job, current)) {\n\t\t\tmerged.set(job.id, job);\n\t\t}\n\t}\n\treturn [...merged.values()];\n}\n\nfunction isAtLeastAsFresh(candidate: AgentCronJob, current: AgentCronJob): boolean {\n\tconst candidateTime = Date.parse(candidate.updatedAt);\n\tconst currentTime = Date.parse(current.updatedAt);\n\tif (!Number.isFinite(currentTime)) {\n\t\treturn true;\n\t}\n\tif (!Number.isFinite(candidateTime)) {\n\t\treturn false;\n\t}\n\treturn candidateTime >= currentTime;\n}\n\nfunction compareOptionalIso(left: string | undefined, right: string | undefined): number {\n\tif (left === right) {\n\t\treturn 0;\n\t}\n\tif (left === undefined) {\n\t\treturn 1;\n\t}\n\tif (right === undefined) {\n\t\treturn -1;\n\t}\n\treturn Date.parse(left) - Date.parse(right);\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction normalizeOptionalLabel(label: string | undefined): string | undefined {\n\tconst trimmed = label?.trim();\n\treturn trimmed ? trimmed : undefined;\n}\n\nfunction withoutNextRunAt(job: AgentCronJob): AgentCronJob {\n\tconst { nextRunAt: _nextRunAt, ...rest } = job;\n\treturn rest;\n}\n\nexport function isAgentCronJob(value: unknown): value is AgentCronJob {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst candidate = value as Partial<AgentCronJob>;\n\treturn (\n\t\ttypeof candidate.id === \"string\" &&\n\t\t(candidate.status === \"active\" ||\n\t\t\tcandidate.status === \"paused\" ||\n\t\t\tcandidate.status === \"completed\" ||\n\t\t\tcandidate.status === \"cancelled\") &&\n\t\t(candidate.source === undefined ||\n\t\t\tcandidate.source === \"cron\" ||\n\t\t\tcandidate.source === \"heartbeat\" ||\n\t\t\tcandidate.source === \"rlm_heartbeat\") &&\n\t\t(candidate.runtimeKind === undefined ||\n\t\t\tcandidate.runtimeKind === \"top-level\" ||\n\t\t\tcandidate.runtimeKind === \"subagent\") &&\n\t\t(candidate.deliveryMode === undefined ||\n\t\t\tcandidate.deliveryMode === \"steer\" ||\n\t\t\tcandidate.deliveryMode === \"follow_up\") &&\n\t\ttypeof candidate.activeSessionId === \"string\" &&\n\t\ttypeof candidate.sessionId === \"string\" &&\n\t\ttypeof candidate.sessionFile === \"string\" &&\n\t\ttypeof candidate.cwd === \"string\" &&\n\t\t(candidate.label === undefined || typeof candidate.label === \"string\") &&\n\t\ttypeof candidate.prompt === \"string\" &&\n\t\ttypeof candidate.schedule === \"object\" &&\n\t\tcandidate.schedule !== null &&\n\t\t(candidate.schedule.kind === \"once\" ||\n\t\t\tcandidate.schedule.kind === \"cron\" ||\n\t\t\t(candidate.schedule.kind === \"interval\" &&\n\t\t\t\ttypeof candidate.schedule.intervalMs === \"number\" &&\n\t\t\t\tcandidate.schedule.intervalMs > 0)) &&\n\t\ttypeof candidate.schedule.expression === \"string\" &&\n\t\ttypeof candidate.createdAt === \"string\" &&\n\t\ttypeof candidate.updatedAt === \"string\" &&\n\t\ttypeof candidate.runCount === \"number\"\n\t);\n}\n\nfunction isAgentCronDispatchRecord(value: unknown): value is AgentCronDispatchRecord {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst candidate = value as Partial<AgentCronDispatchRecord>;\n\treturn (\n\t\ttypeof candidate.id === \"string\" &&\n\t\ttypeof candidate.jobId === \"string\" &&\n\t\ttypeof candidate.claimedAt === \"string\" &&\n\t\ttypeof candidate.scheduledFor === \"string\"\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cron-jobs.js","sourceRoot":"","sources":["../../src/core/cron-jobs.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n\tcloseSync,\n\texistsSync,\n\tfsyncSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\trenameSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { getLogger } from \"@ponythewhite/base-context-ai\";\nimport { lockSync } from \"proper-lockfile\";\nimport { getSessionArtifactPathForFile } from \"./session-manager.js\";\n\nexport type AgentCronJobStatus = \"active\" | \"paused\" | \"completed\" | \"cancelled\";\nexport type AgentCronScheduleKind = \"once\" | \"cron\" | \"interval\";\nexport type AgentCronJobSource = \"cron\" | \"heartbeat\" | \"rlm_heartbeat\";\nexport type AgentCronJobRuntimeKind = \"top-level\" | \"subagent\";\nexport type AgentHeartbeatUpdateAction = \"pause\" | \"resume\" | \"clear\";\nexport type AgentHeartbeatManagementAction = \"pause\" | \"resume\" | \"stop\";\nexport type AgentRlmHeartbeatStatusUpdate = \"pause\" | \"resume\";\n/**\n * How a scheduled heartbeat prompt is delivered when the target session is busy:\n * \"steer\" interrupts the current turn, \"follow_up\" waits for it to finish.\n */\nexport type AgentHeartbeatDeliveryMode = \"steer\" | \"follow_up\";\n\nexport interface AgentCronSchedule {\n\tkind: AgentCronScheduleKind;\n\texpression: string;\n\tintervalMs?: number;\n}\n\nexport interface AgentCronJob {\n\tid: string;\n\tstatus: AgentCronJobStatus;\n\tsource?: AgentCronJobSource;\n\truntimeKind?: AgentCronJobRuntimeKind;\n\t/** Delivery mode for heartbeat/rlm_heartbeat jobs when the session is busy. Defaults to \"steer\". */\n\tdeliveryMode?: AgentHeartbeatDeliveryMode;\n\tactiveSessionId: string;\n\tsessionId: string;\n\tsessionFile: string;\n\tcwd: string;\n\tlabel?: string;\n\tprompt: string;\n\tschedule: AgentCronSchedule;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tnextRunAt?: string;\n\tlastRunAt?: string;\n\tlastSkippedAt?: string;\n\tlastError?: string;\n\trunCount: number;\n}\n\nexport interface CreateAgentCronJobInput {\n\tactiveSessionId: string;\n\tsessionId: string;\n\tsessionFile: string;\n\tcwd: string;\n\tlabel?: string;\n\tprompt: string;\n\tscheduleText: string;\n\tsource?: AgentCronJobSource;\n\truntimeKind?: AgentCronJobRuntimeKind;\n\tdeliveryMode?: AgentHeartbeatDeliveryMode;\n\tnow?: Date;\n}\n\nexport type AgentCronJobRunResult = \"ran\" | \"skipped\";\n\nexport interface AgentCronDispatch {\n\tid: string;\n\tjob: AgentCronJob;\n}\n\nexport interface AgentCronSchedulerHooks {\n\trunJob: (job: AgentCronJob) => Promise<AgentCronJobRunResult | undefined>;\n\tbeginDispatch?: (dispatch: AgentCronDispatch) => (() => void) | undefined;\n\tnow?: () => Date;\n\tonError?: (job: AgentCronJob, error: unknown) => void;\n}\n\nexport interface HeartbeatCronSessionActivity {\n\tisStreaming: boolean;\n\tisCompacting?: boolean;\n\tisRetrying?: boolean;\n\tisBashRunning: boolean;\n\thasPendingSessionWork: boolean;\n\tunfinishedActionCount: number;\n}\n\ninterface CronJobsFile {\n\tjobs?: unknown;\n\tdispatches?: unknown;\n}\n\ninterface AgentCronDispatchRecord {\n\tid: string;\n\tjobId: string;\n\tclaimedAt: string;\n\tscheduledFor: string;\n}\n\ninterface CronJobsState {\n\tjobs: AgentCronJob[];\n\tdispatches: AgentCronDispatchRecord[];\n}\n\nexport const SESSION_SCHEDULED_JOBS_FILENAME = \"scheduled-jobs.json\";\n\nconst log = getLogger(\"coding-agent.cron\");\nconst MAX_TIMEOUT_MS = 2_147_483_647;\nconst ONE_SECOND_MS = 1000;\nconst ONE_MINUTE_MS = 60_000;\nexport const DEFAULT_HEARTBEAT_SCHEDULE = \"every 5m\";\nexport const DEFAULT_HEARTBEAT_DELIVERY_MODE: AgentHeartbeatDeliveryMode = \"steer\";\n\nexport type ParsedHeartbeatCommand =\n\t| { type: \"status\" }\n\t| { type: \"pause\" }\n\t| { type: \"resume\" }\n\t| { type: \"clear\" }\n\t| { type: \"set\"; schedule: string; instruction: string; deliveryMode?: AgentHeartbeatDeliveryMode };\n\nexport interface AgentRlmHeartbeatController {\n\tlistRlmHeartbeats(options?: { includeInactive?: boolean }): AgentCronJob[];\n\tcreateRlmHeartbeat(input: {\n\t\tinstruction: string;\n\t\tinterval?: string;\n\t\tlabel?: string;\n\t\tdeliveryMode?: AgentHeartbeatDeliveryMode;\n\t}): AgentCronJob;\n\tupdateRlmHeartbeat(input: {\n\t\tid: string;\n\t\tinstruction?: string;\n\t\tinterval?: string;\n\t\tlabel?: string;\n\t\tstatus?: AgentRlmHeartbeatStatusUpdate;\n\t\tdeliveryMode?: AgentHeartbeatDeliveryMode;\n\t}): AgentCronJob | undefined;\n\tdeleteRlmHeartbeat(id: string): AgentCronJob | undefined;\n}\n\nfunction heartbeatCatalogSignature(jobs: readonly AgentCronJob[]): string {\n\treturn JSON.stringify(\n\t\tjobs\n\t\t\t.filter((job) => isHeartbeatCronJob(job) && (job.status === \"active\" || job.status === \"paused\"))\n\t\t\t.sort((left, right) => left.id.localeCompare(right.id))\n\t\t\t.map((job) => ({\n\t\t\t\tid: job.id,\n\t\t\t\tstatus: job.status,\n\t\t\t\tsource: job.source,\n\t\t\t\truntimeKind: job.runtimeKind,\n\t\t\t\tdeliveryMode: job.deliveryMode,\n\t\t\t\tactiveSessionId: job.activeSessionId,\n\t\t\t\tsessionId: job.sessionId,\n\t\t\t\tsessionFile: job.sessionFile,\n\t\t\t\tcwd: job.cwd,\n\t\t\t\tlabel: job.label,\n\t\t\t\tprompt: job.prompt,\n\t\t\t\tschedule: job.schedule,\n\t\t\t\tcreatedAt: job.createdAt,\n\t\t\t})),\n\t);\n}\n\nexport class AgentCronJobStore {\n\tprivate readonly sessionArtifactFiles = new Map<string, string>();\n\tprivate readonly heartbeatChangeListeners = new Set<() => void>();\n\n\tconstructor(\n\t\tprivate readonly filePath?: string,\n\t\tprivate readonly sessionArtifactMode = false,\n\t) {\n\t\tif (!filePath && !sessionArtifactMode) {\n\t\t\tthrow new Error(\"Cron job store requires a file path\");\n\t\t}\n\t}\n\n\tstatic forSessionArtifacts(): AgentCronJobStore {\n\t\treturn new AgentCronJobStore(undefined, true);\n\t}\n\n\tonHeartbeatChange(listener: () => void): () => void {\n\t\tthis.heartbeatChangeListeners.add(listener);\n\t\treturn () => this.heartbeatChangeListeners.delete(listener);\n\t}\n\n\tregisterSessionArtifact(sessionId: string, artifactDir: string): boolean {\n\t\tif (!this.sessionArtifactMode) {\n\t\t\treturn false;\n\t\t}\n\t\tconst path = join(artifactDir, SESSION_SCHEDULED_JOBS_FILENAME);\n\t\tif (this.sessionArtifactFiles.get(sessionId) === path) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.sessionArtifactFiles.set(sessionId, path);\n\t\treturn true;\n\t}\n\n\trecoverSessionArtifact(sessionId: string, now = new Date()): AgentCronJob[] {\n\t\tconst path = this.sessionArtifactFiles.get(sessionId);\n\t\tif (!path) {\n\t\t\treturn [];\n\t\t}\n\t\treturn withCronJobsStateLocks([path], () => {\n\t\t\tconst state = readJobsState(path);\n\t\t\tconst recovered: AgentCronJob[] = [];\n\t\t\tif (state.dispatches.length > 0) {\n\t\t\t\trecoverInterruptedInState(state, now, recovered);\n\t\t\t\twriteJobsState(path, state);\n\t\t\t}\n\t\t\treturn recovered;\n\t\t});\n\t}\n\n\tlist(): AgentCronJob[] {\n\t\treturn this.readJobs().sort((a, b) => compareOptionalIso(a.nextRunAt, b.nextRunAt));\n\t}\n\n\t/** Import supported declarations directly as paused data; never import dispatch ownership. */\n\timportPaused(\n\t\tjobs: readonly AgentCronJob[],\n\t\ttarget: { sessionId: string; sessionFile: string; cwd: string },\n\t): AgentCronJob[] {\n\t\tconst now = new Date().toISOString();\n\t\tconst imported = jobs.map((job): AgentCronJob => {\n\t\t\tif (\n\t\t\t\t!isAgentCronJob(job) ||\n\t\t\t\t(job.status !== \"active\" && job.status !== \"paused\") ||\n\t\t\t\t(job.source === \"rlm_heartbeat\" && job.schedule.kind === \"once\") ||\n\t\t\t\tjob.runtimeKind === \"subagent\"\n\t\t\t)\n\t\t\t\tthrow new Error(\"Unsupported paused schedule owner\");\n\t\t\treturn {\n\t\t\t\tid: randomUUID(),\n\t\t\t\tstatus: \"paused\",\n\t\t\t\tsource: job.source ?? \"cron\",\n\t\t\t\truntimeKind: \"top-level\",\n\t\t\t\tactiveSessionId: target.sessionId,\n\t\t\t\tsessionId: target.sessionId,\n\t\t\t\tsessionFile: target.sessionFile,\n\t\t\t\tcwd: target.cwd,\n\t\t\t\tprompt: job.prompt,\n\t\t\t\tschedule: {\n\t\t\t\t\tkind: job.schedule.kind,\n\t\t\t\t\texpression: job.schedule.expression,\n\t\t\t\t\t...(job.schedule.kind === \"interval\" ? { intervalMs: job.schedule.intervalMs } : {}),\n\t\t\t\t},\n\t\t\t\t...(job.label === undefined ? {} : { label: job.label }),\n\t\t\t\t...(job.deliveryMode === undefined ? {} : { deliveryMode: job.deliveryMode }),\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now,\n\t\t\t\trunCount: 0,\n\t\t\t};\n\t\t});\n\t\tif (imported.length > 0) this.writeJobs([...this.readJobs(), ...imported]);\n\t\treturn imported;\n\t}\n\n\tcreate(input: CreateAgentCronJobInput): AgentCronJob {\n\t\tconst now = input.now ?? new Date();\n\t\tconst prompt = input.prompt.trim();\n\t\tif (!prompt) {\n\t\t\tthrow new Error(\"Cron job prompt cannot be empty\");\n\t\t}\n\t\tconst parsed = parseAgentCronSchedule(input.scheduleText, now);\n\t\tconst nowIso = now.toISOString();\n\t\tconst job: AgentCronJob = {\n\t\t\tid: randomUUID(),\n\t\t\tstatus: \"active\",\n\t\t\tsource: input.source ?? \"cron\",\n\t\t\truntimeKind: input.runtimeKind,\n\t\t\tactiveSessionId: input.activeSessionId,\n\t\t\tsessionId: input.sessionId,\n\t\t\tsessionFile: input.sessionFile,\n\t\t\tcwd: input.cwd,\n\t\t\tlabel: normalizeOptionalLabel(input.label),\n\t\t\tprompt,\n\t\t\tschedule: parsed.schedule,\n\t\t\tcreatedAt: nowIso,\n\t\t\tupdatedAt: nowIso,\n\t\t\tnextRunAt: parsed.nextRunAt.toISOString(),\n\t\t\trunCount: 0,\n\t\t};\n\t\tthis.writeJobs([...this.readJobs(), job]);\n\t\treturn job;\n\t}\n\n\t/**\n\t * Active session ids are daemon-local. When a persisted session is restored,\n\t * bind jobs stored for its stable session file to the new live session id.\n\t * When a live session switches to another persisted file, move jobs stored for\n\t * its stable active session id to the new file so future restores target the\n\t * current session instead of the previous one.\n\t */\n\trebindSessionJobs(input: {\n\t\tactiveSessionId: string;\n\t\tsessionId: string;\n\t\tsessionFile: string;\n\t\tcwd: string;\n\t}): AgentCronJob[] {\n\t\tconst targetSessionFile = resolve(input.sessionFile);\n\t\tconst reboundJobs: AgentCronJob[] = [];\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.activeSessionId !== input.activeSessionId && resolve(job.sessionFile) !== targetSessionFile) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tjob.activeSessionId === input.activeSessionId &&\n\t\t\t\tjob.sessionId === input.sessionId &&\n\t\t\t\tresolve(job.sessionFile) === targetSessionFile &&\n\t\t\t\tjob.cwd === input.cwd\n\t\t\t) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tconst rebound = {\n\t\t\t\t...job,\n\t\t\t\tactiveSessionId: input.activeSessionId,\n\t\t\t\tsessionId: input.sessionId,\n\t\t\t\tsessionFile: input.sessionFile,\n\t\t\t\tcwd: input.cwd,\n\t\t\t};\n\t\t\treboundJobs.push(rebound);\n\t\t\treturn rebound;\n\t\t});\n\t\tif (reboundJobs.length > 0) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn reboundJobs;\n\t}\n\n\tgetHeartbeat(activeSessionId: string): AgentCronJob | undefined {\n\t\treturn this.readJobs()\n\t\t\t.filter((job) => {\n\t\t\t\treturn (\n\t\t\t\t\tjob.activeSessionId === activeSessionId &&\n\t\t\t\t\tjob.source === \"heartbeat\" &&\n\t\t\t\t\t(job.status === \"active\" || job.status === \"paused\")\n\t\t\t\t);\n\t\t\t})\n\t\t\t.sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt))[0];\n\t}\n\n\tgetLatestHeartbeat(activeSessionId: string): AgentCronJob | undefined {\n\t\treturn this.readJobs()\n\t\t\t.filter((job) => job.activeSessionId === activeSessionId && job.source === \"heartbeat\")\n\t\t\t.sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt))[0];\n\t}\n\n\tcreateHeartbeat(input: CreateAgentCronJobInput): AgentCronJob {\n\t\tconst now = input.now ?? new Date();\n\t\tconst parsed = parseAgentCronSchedule(input.scheduleText, now);\n\t\tif (parsed.schedule.kind === \"once\") {\n\t\t\tthrow new Error(\"Heartbeat schedule must be recurring\");\n\t\t}\n\t\tconst existing = this.readJobs().map((job) => {\n\t\t\tif (\n\t\t\t\tjob.activeSessionId === input.activeSessionId &&\n\t\t\t\tjob.source === \"heartbeat\" &&\n\t\t\t\t(job.status === \"active\" || job.status === \"paused\")\n\t\t\t) {\n\t\t\t\treturn { ...job, status: \"cancelled\" as const, nextRunAt: undefined, updatedAt: now.toISOString() };\n\t\t\t}\n\t\t\treturn job;\n\t\t});\n\t\tconst prompt = input.prompt.trim();\n\t\tif (!prompt) {\n\t\t\tthrow new Error(\"Heartbeat instruction cannot be empty\");\n\t\t}\n\t\tconst nowIso = now.toISOString();\n\t\tconst job: AgentCronJob = {\n\t\t\tid: randomUUID(),\n\t\t\tstatus: \"active\",\n\t\t\tsource: \"heartbeat\",\n\t\t\truntimeKind: input.runtimeKind,\n\t\t\tdeliveryMode: input.deliveryMode ?? DEFAULT_HEARTBEAT_DELIVERY_MODE,\n\t\t\tactiveSessionId: input.activeSessionId,\n\t\t\tsessionId: input.sessionId,\n\t\t\tsessionFile: input.sessionFile,\n\t\t\tcwd: input.cwd,\n\t\t\tlabel: normalizeOptionalLabel(input.label),\n\t\t\tprompt,\n\t\t\tschedule: parsed.schedule,\n\t\t\tcreatedAt: nowIso,\n\t\t\tupdatedAt: nowIso,\n\t\t\tnextRunAt: parsed.nextRunAt.toISOString(),\n\t\t\trunCount: 0,\n\t\t};\n\t\tthis.writeJobs([...existing, job]);\n\t\treturn job;\n\t}\n\n\tlistRlmHeartbeats(activeSessionId: string, options: { includeInactive?: boolean } = {}): AgentCronJob[] {\n\t\treturn this.readJobs()\n\t\t\t.filter((job) => {\n\t\t\t\tif (job.activeSessionId !== activeSessionId || job.source !== \"rlm_heartbeat\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (options.includeInactive) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn job.status === \"active\" || job.status === \"paused\";\n\t\t\t})\n\t\t\t.sort((a, b) => compareOptionalIso(a.nextRunAt, b.nextRunAt));\n\t}\n\n\tcreateRlmHeartbeat(input: CreateAgentCronJobInput): AgentCronJob {\n\t\tconst now = input.now ?? new Date();\n\t\tconst parsed = parseAgentCronSchedule(input.scheduleText, now);\n\t\tif (parsed.schedule.kind === \"once\") {\n\t\t\tthrow new Error(\"RLM heartbeat schedule must be recurring\");\n\t\t}\n\t\tconst prompt = input.prompt.trim();\n\t\tif (!prompt) {\n\t\t\tthrow new Error(\"RLM heartbeat instruction cannot be empty\");\n\t\t}\n\t\tconst nowIso = now.toISOString();\n\t\tconst job: AgentCronJob = {\n\t\t\tid: randomUUID(),\n\t\t\tstatus: \"active\",\n\t\t\tsource: \"rlm_heartbeat\",\n\t\t\truntimeKind: input.runtimeKind,\n\t\t\tdeliveryMode: input.deliveryMode ?? DEFAULT_HEARTBEAT_DELIVERY_MODE,\n\t\t\tactiveSessionId: input.activeSessionId,\n\t\t\tsessionId: input.sessionId,\n\t\t\tsessionFile: input.sessionFile,\n\t\t\tcwd: input.cwd,\n\t\t\tlabel: normalizeOptionalLabel(input.label),\n\t\t\tprompt,\n\t\t\tschedule: parsed.schedule,\n\t\t\tcreatedAt: nowIso,\n\t\t\tupdatedAt: nowIso,\n\t\t\tnextRunAt: parsed.nextRunAt.toISOString(),\n\t\t\trunCount: 0,\n\t\t};\n\t\tthis.writeJobs([...this.readJobs(), job]);\n\t\treturn job;\n\t}\n\n\tupdateRlmHeartbeat(\n\t\tactiveSessionId: string,\n\t\tid: string,\n\t\tupdate: {\n\t\t\tlabel?: string;\n\t\t\tprompt?: string;\n\t\t\tscheduleText?: string;\n\t\t\tstatus?: AgentRlmHeartbeatStatusUpdate;\n\t\t\tdeliveryMode?: AgentHeartbeatDeliveryMode;\n\t\t\tnow?: Date;\n\t\t},\n\t): AgentCronJob | undefined {\n\t\tconst now = update.now ?? new Date();\n\t\tlet updated: AgentCronJob | undefined;\n\t\tlet matchedRlmHeartbeat = false;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id || job.activeSessionId !== activeSessionId || job.source !== \"rlm_heartbeat\") {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tmatchedRlmHeartbeat = true;\n\t\t\tif (job.status === \"cancelled\" || job.status === \"completed\") {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tlet nextJob: AgentCronJob = { ...job };\n\t\t\tif (update.label !== undefined) {\n\t\t\t\tnextJob = { ...nextJob, label: normalizeOptionalLabel(update.label) };\n\t\t\t}\n\t\t\tif (update.deliveryMode !== undefined) {\n\t\t\t\tnextJob = { ...nextJob, deliveryMode: update.deliveryMode };\n\t\t\t}\n\t\t\tif (update.prompt !== undefined) {\n\t\t\t\tconst prompt = update.prompt.trim();\n\t\t\t\tif (!prompt) {\n\t\t\t\t\tthrow new Error(\"RLM heartbeat instruction cannot be empty\");\n\t\t\t\t}\n\t\t\t\tnextJob = { ...nextJob, prompt };\n\t\t\t}\n\t\t\tif (update.scheduleText !== undefined) {\n\t\t\t\tconst parsed = parseAgentCronSchedule(update.scheduleText, now);\n\t\t\t\tif (parsed.schedule.kind === \"once\") {\n\t\t\t\t\tthrow new Error(\"RLM heartbeat schedule must be recurring\");\n\t\t\t\t}\n\t\t\t\tnextJob =\n\t\t\t\t\tnextJob.status === \"paused\"\n\t\t\t\t\t\t? withoutNextRunAt({ ...nextJob, schedule: parsed.schedule })\n\t\t\t\t\t\t: { ...nextJob, schedule: parsed.schedule, nextRunAt: parsed.nextRunAt.toISOString() };\n\t\t\t}\n\t\t\tif (update.status === \"pause\") {\n\t\t\t\tnextJob = withoutNextRunAt({ ...nextJob, status: \"paused\" });\n\t\t\t} else if (update.status === \"resume\") {\n\t\t\t\tconst nextRunAt = nextRunAtForSchedule(nextJob.schedule, now);\n\t\t\t\tif (!nextRunAt) {\n\t\t\t\t\tthrow new Error(\"RLM heartbeat schedule must be recurring\");\n\t\t\t\t}\n\t\t\t\tnextJob = { ...nextJob, status: \"active\", nextRunAt: nextRunAt.toISOString() };\n\t\t\t}\n\t\t\tupdated = { ...nextJob, updatedAt: now.toISOString() };\n\t\t\treturn updated;\n\t\t});\n\t\tif (matchedRlmHeartbeat && updated) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn updated;\n\t}\n\n\tdeleteRlmHeartbeat(activeSessionId: string, id: string, now = new Date()): AgentCronJob | undefined {\n\t\tlet deleted: AgentCronJob | undefined;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id || job.activeSessionId !== activeSessionId || job.source !== \"rlm_heartbeat\") {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tdeleted = withoutNextRunAt({ ...job, status: \"cancelled\", updatedAt: now.toISOString() });\n\t\t\treturn deleted;\n\t\t});\n\t\tif (deleted) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn deleted;\n\t}\n\n\tcancelRlmHeartbeatsForSession(activeSessionId: string, now = new Date()): AgentCronJob[] {\n\t\tconst cancelled: AgentCronJob[] = [];\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (\n\t\t\t\tjob.activeSessionId !== activeSessionId ||\n\t\t\t\tjob.source !== \"rlm_heartbeat\" ||\n\t\t\t\t(job.status !== \"active\" && job.status !== \"paused\")\n\t\t\t) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tconst cancelledJob = withoutNextRunAt({ ...job, status: \"cancelled\", updatedAt: now.toISOString() });\n\t\t\tcancelled.push(cancelledJob);\n\t\t\treturn cancelledJob;\n\t\t});\n\t\tif (cancelled.length > 0) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn cancelled;\n\t}\n\n\tcancelJobsForSession(\n\t\tinput: { activeSessionId?: string; sessionId?: string; sessionFile?: string },\n\t\tnow = new Date(),\n\t): AgentCronJob[] {\n\t\tconst targetSessionFile = input.sessionFile ? resolve(input.sessionFile) : undefined;\n\t\tconst cancelled: AgentCronJob[] = [];\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tconst matches =\n\t\t\t\t(input.activeSessionId !== undefined && job.activeSessionId === input.activeSessionId) ||\n\t\t\t\t(input.sessionId !== undefined && job.sessionId === input.sessionId) ||\n\t\t\t\t(targetSessionFile !== undefined && resolve(job.sessionFile) === targetSessionFile);\n\t\t\tif (!matches || (job.status !== \"active\" && job.status !== \"paused\")) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tconst cancelledJob = withoutNextRunAt({ ...job, status: \"cancelled\", updatedAt: now.toISOString() });\n\t\t\tcancelled.push(cancelledJob);\n\t\t\treturn cancelledJob;\n\t\t});\n\t\tif (cancelled.length > 0) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn cancelled;\n\t}\n\n\tpauseHeartbeat(activeSessionId: string, now = new Date()): AgentCronJob | undefined {\n\t\tlet paused: AgentCronJob | undefined;\n\t\tconst current = this.getHeartbeat(activeSessionId);\n\t\tif (!current) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== current.id) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tpaused = { ...job, status: \"paused\", nextRunAt: undefined, updatedAt: now.toISOString() };\n\t\t\treturn paused;\n\t\t});\n\t\tthis.writeJobs(jobs);\n\t\treturn paused;\n\t}\n\n\tresumeHeartbeat(activeSessionId: string, now = new Date()): AgentCronJob | undefined {\n\t\tlet resumed: AgentCronJob | undefined;\n\t\tconst current = this.getHeartbeat(activeSessionId);\n\t\tif (!current) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst nextRunAt = nextRunAtForSchedule(current.schedule, now);\n\t\tif (!nextRunAt) {\n\t\t\tthrow new Error(\"Heartbeat schedule must be recurring\");\n\t\t}\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== current.id) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tresumed = { ...job, status: \"active\", nextRunAt: nextRunAt.toISOString(), updatedAt: now.toISOString() };\n\t\t\treturn resumed;\n\t\t});\n\t\tthis.writeJobs(jobs);\n\t\treturn resumed;\n\t}\n\n\tclearHeartbeat(activeSessionId: string, now = new Date()): AgentCronJob | undefined {\n\t\tlet cleared: AgentCronJob | undefined;\n\t\tconst current = this.getHeartbeat(activeSessionId);\n\t\tif (!current) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== current.id) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tcleared = { ...job, status: \"cancelled\", nextRunAt: undefined, updatedAt: now.toISOString() };\n\t\t\treturn cleared;\n\t\t});\n\t\tthis.writeJobs(jobs);\n\t\treturn cleared;\n\t}\n\n\tmanageHeartbeat(\n\t\tactiveSessionId: string,\n\t\tid: string,\n\t\taction: AgentHeartbeatManagementAction,\n\t\tnow = new Date(),\n\t): AgentCronJob | undefined {\n\t\tlet updated: AgentCronJob | undefined;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id || job.activeSessionId !== activeSessionId || !isHeartbeatCronJob(job)) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tif (job.status === \"cancelled\" || job.status === \"completed\") {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tif (action === \"pause\") {\n\t\t\t\tupdated = withoutNextRunAt({ ...job, status: \"paused\", updatedAt: now.toISOString() });\n\t\t\t\treturn updated;\n\t\t\t}\n\t\t\tif (action === \"stop\") {\n\t\t\t\tupdated = withoutNextRunAt({ ...job, status: \"cancelled\", updatedAt: now.toISOString() });\n\t\t\t\treturn updated;\n\t\t\t}\n\t\t\tconst nextRunAt = nextRunAtForSchedule(job.schedule, now);\n\t\t\tif (!nextRunAt) {\n\t\t\t\tthrow new Error(\"Heartbeat schedule must be recurring\");\n\t\t\t}\n\t\t\tupdated = {\n\t\t\t\t...job,\n\t\t\t\tstatus: \"active\",\n\t\t\t\tnextRunAt: nextRunAt.toISOString(),\n\t\t\t\tupdatedAt: now.toISOString(),\n\t\t\t};\n\t\t\treturn updated;\n\t\t});\n\t\tif (updated) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn updated;\n\t}\n\n\tresumeCronJob(\n\t\tid: string,\n\t\towner: { activeSessionId: string; sessionId: string; sessionFile: string },\n\t\tnow = new Date(),\n\t): AgentCronJob | undefined {\n\t\tconst jobs = this.readJobs();\n\t\tconst current = jobs.find((job) => job.id === id);\n\t\tif (!current) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (\n\t\t\tcurrent.activeSessionId !== owner.activeSessionId ||\n\t\t\tcurrent.sessionId !== owner.sessionId ||\n\t\t\tresolve(current.sessionFile) !== resolve(owner.sessionFile)\n\t\t) {\n\t\t\tthrow new Error(\"Cron job does not belong to the bound session\");\n\t\t}\n\t\tif (current.status !== \"paused\" || current.source !== \"cron\" || current.runtimeKind !== \"top-level\") {\n\t\t\tthrow new Error(\"Only paused top-level cron jobs can be resumed\");\n\t\t}\n\t\tconst nextRunAt = nextRunAtForSchedule(current.schedule, now);\n\t\tif (!nextRunAt) {\n\t\t\tthrow new Error(\"Cron resume requires a recurring schedule; reschedule one-shot jobs explicitly\");\n\t\t}\n\t\tconst resumed: AgentCronJob = {\n\t\t\t...current,\n\t\t\tstatus: \"active\",\n\t\t\tnextRunAt: nextRunAt.toISOString(),\n\t\t\tupdatedAt: now.toISOString(),\n\t\t};\n\t\tthis.writeJobs(jobs.map((job) => (job.id === id ? resumed : job)));\n\t\treturn resumed;\n\t}\n\n\tcancel(id: string, now = new Date()): AgentCronJob | undefined {\n\t\tlet cancelled: AgentCronJob | undefined;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id || job.status === \"cancelled\") {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tcancelled = { ...job, status: \"cancelled\", nextRunAt: undefined, updatedAt: now.toISOString() };\n\t\t\treturn cancelled;\n\t\t});\n\t\tif (cancelled) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn cancelled;\n\t}\n\n\trecordRunResult(id: string, result: { now?: Date; error?: unknown }): AgentCronJob | undefined {\n\t\tconst now = result.now ?? new Date();\n\t\tlet updated: AgentCronJob | undefined;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tif (job.status !== \"active\") {\n\t\t\t\tupdated = job;\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tconst lastError = result.error === undefined ? undefined : errorMessage(result.error);\n\t\t\tconst nextRunAt =\n\t\t\t\tjob.schedule.kind === \"cron\"\n\t\t\t\t\t? nextRunAtForSchedule(job.schedule, new Date(now.getTime() + 1))\n\t\t\t\t\t: job.schedule.kind === \"interval\"\n\t\t\t\t\t\t? nextRunAtForSchedule(job.schedule, now)\n\t\t\t\t\t\t: undefined;\n\t\t\tupdated = {\n\t\t\t\t...job,\n\t\t\t\tstatus: job.schedule.kind === \"once\" ? \"completed\" : \"active\",\n\t\t\t\tnextRunAt: nextRunAt?.toISOString(),\n\t\t\t\tlastRunAt: now.toISOString(),\n\t\t\t\tlastError,\n\t\t\t\trunCount: job.runCount + 1,\n\t\t\t\tupdatedAt: now.toISOString(),\n\t\t\t};\n\t\t\treturn updated;\n\t\t});\n\t\tif (updated) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn updated;\n\t}\n\n\trecordSkipResult(id: string, result: { now?: Date }): AgentCronJob | undefined {\n\t\tconst now = result.now ?? new Date();\n\t\tlet updated: AgentCronJob | undefined;\n\t\tconst jobs = this.readJobs().map((job) => {\n\t\t\tif (job.id !== id) {\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tif (job.status !== \"active\") {\n\t\t\t\tupdated = job;\n\t\t\t\treturn job;\n\t\t\t}\n\t\t\tconst nextRunAt = nextRunAtForSchedule(job.schedule, now);\n\t\t\tupdated = {\n\t\t\t\t...job,\n\t\t\t\tnextRunAt: nextRunAt?.toISOString(),\n\t\t\t\tlastSkippedAt: now.toISOString(),\n\t\t\t\tupdatedAt: now.toISOString(),\n\t\t\t};\n\t\t\treturn updated;\n\t\t});\n\t\tif (updated) {\n\t\t\tthis.writeJobs(jobs);\n\t\t}\n\t\treturn updated;\n\t}\n\n\tdue(now = new Date()): AgentCronJob[] {\n\t\treturn this.readJobs().filter((job) => isDueJob(job, now));\n\t}\n\n\tclaimDue(dueAt = new Date(), claimedAt = dueAt): AgentCronDispatch[] {\n\t\treturn this.mutateStates((state) => claimDueInState(state, dueAt, claimedAt));\n\t}\n\n\tgetClaimedJob(id: string): AgentCronJob | undefined {\n\t\tfor (const state of this.readStates()) {\n\t\t\tif (!state.dispatches.some((dispatch) => dispatch.jobId === id)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn state.jobs.find((job) => job.id === id && job.status === \"active\");\n\t\t}\n\t\treturn undefined;\n\t}\n\n\trecordDispatchResult(\n\t\tdispatchId: string,\n\t\tresult: { now?: Date; outcome: AgentCronJobRunResult; error?: unknown },\n\t): AgentCronJob | undefined {\n\t\tlet updated: AgentCronJob | undefined;\n\t\tthis.mutateStates((state) => {\n\t\t\tconst dispatch = state.dispatches.find((candidate) => candidate.id === dispatchId);\n\t\t\tif (!dispatch) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst now = result.now ?? new Date();\n\t\t\tstate.dispatches = state.dispatches.filter((candidate) => candidate.id !== dispatchId);\n\t\t\tstate.jobs = state.jobs.map((job) => {\n\t\t\t\tif (job.id !== dispatch.jobId || job.status !== \"active\") {\n\t\t\t\t\treturn job;\n\t\t\t\t}\n\t\t\t\tif (result.outcome === \"skipped\" && result.error === undefined) {\n\t\t\t\t\tconst nextRunAt = nextRunAtForSchedule(job.schedule, now);\n\t\t\t\t\tupdated = {\n\t\t\t\t\t\t...job,\n\t\t\t\t\t\tstatus: job.schedule.kind === \"once\" ? \"completed\" : job.status,\n\t\t\t\t\t\tnextRunAt: nextRunAt?.toISOString(),\n\t\t\t\t\t\tlastSkippedAt: now.toISOString(),\n\t\t\t\t\t\tupdatedAt: now.toISOString(),\n\t\t\t\t\t};\n\t\t\t\t\treturn updated;\n\t\t\t\t}\n\t\t\t\tupdated = {\n\t\t\t\t\t...job,\n\t\t\t\t\tstatus: job.schedule.kind === \"once\" ? \"completed\" : job.status,\n\t\t\t\t\tlastRunAt: now.toISOString(),\n\t\t\t\t\tlastError: result.error === undefined ? undefined : errorMessage(result.error),\n\t\t\t\t\trunCount: job.runCount + 1,\n\t\t\t\t\tupdatedAt: now.toISOString(),\n\t\t\t\t};\n\t\t\t\treturn updated;\n\t\t\t});\n\t\t\treturn [];\n\t\t});\n\t\treturn updated;\n\t}\n\n\trecoverInterruptedDispatches(now = new Date()): AgentCronJob[] {\n\t\tconst recovered: AgentCronJob[] = [];\n\t\tthis.mutateStates((state) => {\n\t\t\trecoverInterruptedInState(state, now, recovered);\n\t\t\treturn [];\n\t\t});\n\t\treturn recovered;\n\t}\n\n\trecoverInterruptedDispatchesById(dispatchIds: readonly string[], now = new Date()): AgentCronJob[] {\n\t\tconst recovered: AgentCronJob[] = [];\n\t\tconst interruptedDispatchIds = new Set(dispatchIds);\n\t\tthis.mutateStates((state) => {\n\t\t\trecoverInterruptedInState(state, now, recovered, interruptedDispatchIds);\n\t\t\treturn [];\n\t\t});\n\t\treturn recovered;\n\t}\n\n\tgetDueJob(id: string, now = new Date()): AgentCronJob | undefined {\n\t\treturn this.readJobs().find((job) => job.id === id && isDueJob(job, now));\n\t}\n\n\tnextActiveRunAt(): Date | undefined {\n\t\tconst times = this.readJobs()\n\t\t\t.filter((job) => job.status === \"active\" && job.nextRunAt !== undefined)\n\t\t\t.map((job) => new Date(job.nextRunAt!))\n\t\t\t.filter((date) => Number.isFinite(date.getTime()))\n\t\t\t.sort((a, b) => a.getTime() - b.getTime());\n\t\treturn times[0];\n\t}\n\n\tprivate readJobs(): AgentCronJob[] {\n\t\treturn this.readStates().flatMap((state) => state.jobs);\n\t}\n\n\tprivate readStates(): CronJobsState[] {\n\t\tif (this.sessionArtifactMode) {\n\t\t\treturn [...this.sessionArtifactFiles.values()].map((path) => readJobsState(path));\n\t\t}\n\t\treturn [readJobsState(this.requireFilePath())];\n\t}\n\n\tprivate mutateStates(mutator: (state: CronJobsState) => AgentCronDispatch[]): AgentCronDispatch[] {\n\t\tconst paths = this.sessionArtifactMode ? [...this.sessionArtifactFiles.values()] : [this.requireFilePath()];\n\t\tconst previousHeartbeats = heartbeatCatalogSignature(this.readJobs());\n\t\tlet changed = false;\n\t\tconst dispatches = withCronJobsStateLocks(paths, () => {\n\t\t\tconst dispatches: AgentCronDispatch[] = [];\n\t\t\tfor (const path of paths) {\n\t\t\t\tconst state = readJobsState(path);\n\t\t\t\tconst before = JSON.stringify(state);\n\t\t\t\tdispatches.push(...mutator(state));\n\t\t\t\tif (JSON.stringify(state) !== before) {\n\t\t\t\t\twriteJobsState(path, state);\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dispatches;\n\t\t});\n\t\tif (changed && heartbeatCatalogSignature(this.readJobs()) !== previousHeartbeats) {\n\t\t\tthis.notifyHeartbeatChange();\n\t\t}\n\t\treturn dispatches;\n\t}\n\n\tprivate writeJobs(jobs: readonly AgentCronJob[]): void {\n\t\tconst previousHeartbeats = heartbeatCatalogSignature(this.readJobs());\n\t\tif (this.sessionArtifactMode) {\n\t\t\tconst registeredSessionIds = new Set(this.sessionArtifactFiles.keys());\n\t\t\tconst unregistered = jobs.find((job) => !registeredSessionIds.has(job.sessionId));\n\t\t\tif (unregistered) {\n\t\t\t\tthrow new Error(`Cron job ${unregistered.id} targets an unregistered session artifact`);\n\t\t\t}\n\t\t\tconst paths = [...this.sessionArtifactFiles.values()];\n\t\t\twithCronJobsStateLocks(paths, () => {\n\t\t\t\tconst currentBySessionId = new Map(\n\t\t\t\t\t[...this.sessionArtifactFiles].map(([sessionId, path]) => [sessionId, readJobsState(path)]),\n\t\t\t\t);\n\t\t\t\tconst incomingById = new Map(jobs.map((job) => [job.id, job]));\n\t\t\t\tconst mergedJobsBySessionId = new Map<string, AgentCronJob[]>();\n\t\t\t\tfor (const [sessionId, current] of currentBySessionId) {\n\t\t\t\t\tconst retained = current.jobs.filter((job) => {\n\t\t\t\t\t\tconst incoming = incomingById.get(job.id);\n\t\t\t\t\t\treturn incoming === undefined || incoming.sessionId === sessionId;\n\t\t\t\t\t});\n\t\t\t\t\tmergedJobsBySessionId.set(\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\tmergeFreshJobs(\n\t\t\t\t\t\t\tretained,\n\t\t\t\t\t\t\tjobs.filter((job) => job.sessionId === sessionId),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst sessionIdByJobId = new Map(\n\t\t\t\t\t[...mergedJobsBySessionId].flatMap(([sessionId, sessionJobs]) =>\n\t\t\t\t\t\tsessionJobs.map((job) => [job.id, sessionId] as const),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tconst dispatches = [...currentBySessionId.values()].flatMap((state) => state.dispatches);\n\t\t\t\tfor (const [sessionId, path] of this.sessionArtifactFiles) {\n\t\t\t\t\tconst current = currentBySessionId.get(sessionId) ?? { jobs: [], dispatches: [] };\n\t\t\t\t\tconst nextState = {\n\t\t\t\t\t\tjobs: mergedJobsBySessionId.get(sessionId) ?? [],\n\t\t\t\t\t\tdispatches: dispatches.filter((dispatch) => sessionIdByJobId.get(dispatch.jobId) === sessionId),\n\t\t\t\t\t};\n\t\t\t\t\tif (JSON.stringify(current) !== JSON.stringify(nextState)) {\n\t\t\t\t\t\twriteJobsState(path, nextState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (heartbeatCatalogSignature(this.readJobs()) !== previousHeartbeats) {\n\t\t\t\tthis.notifyHeartbeatChange();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst path = this.requireFilePath();\n\t\twithCronJobsStateLocks([path], () => writeJobsFile(path, jobs, true));\n\t\tif (heartbeatCatalogSignature(this.readJobs()) !== previousHeartbeats) {\n\t\t\tthis.notifyHeartbeatChange();\n\t\t}\n\t}\n\n\tprivate notifyHeartbeatChange(): void {\n\t\tfor (const listener of this.heartbeatChangeListeners) {\n\t\t\tlistener();\n\t\t}\n\t}\n\n\tprivate requireFilePath(): string {\n\t\tif (!this.filePath) {\n\t\t\tthrow new Error(\"Cron job store does not have a legacy file path\");\n\t\t}\n\t\treturn this.filePath;\n\t}\n}\n\nexport function migrateLegacyCronJobsToSessionArtifacts(\n\tfilePath: string,\n\toptions: { isSessionOwned?: (job: AgentCronJob) => boolean; now?: Date } = {},\n): number {\n\tconst now = options.now ?? new Date();\n\tconst legacyState = readJobsState(filePath);\n\trecoverInterruptedInState(legacyState, now, []);\n\tconst jobs = legacyState.jobs.map((job) => {\n\t\tif (\n\t\t\t!options.isSessionOwned ||\n\t\t\toptions.isSessionOwned(job) ||\n\t\t\t(job.status !== \"active\" && job.status !== \"paused\")\n\t\t) {\n\t\t\treturn job;\n\t\t}\n\t\treturn withoutNextRunAt({ ...job, status: \"cancelled\", updatedAt: now.toISOString() });\n\t});\n\tif (jobs.length === 0) {\n\t\treturn 0;\n\t}\n\tconst jobsByArtifact = new Map<string, AgentCronJob[]>();\n\tfor (const job of jobs) {\n\t\tconst artifactPath = join(\n\t\t\tgetSessionArtifactPathForFile(resolve(job.sessionFile), job.sessionId),\n\t\t\tSESSION_SCHEDULED_JOBS_FILENAME,\n\t\t);\n\t\tconst grouped = jobsByArtifact.get(artifactPath) ?? [];\n\t\tgrouped.push(job);\n\t\tjobsByArtifact.set(artifactPath, grouped);\n\t}\n\tfor (const [artifactPath, artifactJobs] of jobsByArtifact) {\n\t\twriteJobsFile(artifactPath, artifactJobs, true);\n\t}\n\trenameSync(filePath, `${filePath}.migrated-${Date.now()}`);\n\treturn jobs.length;\n}\n\nexport class AgentCronScheduler {\n\tprivate timer: ReturnType<typeof setTimeout> | undefined;\n\tprivate running = false;\n\tprivate stopped = true;\n\tprivate hasStarted = false;\n\tprivate readonly dispatchLanes = new Map<string, Promise<void>>();\n\n\tconstructor(\n\t\tprivate readonly store: AgentCronJobStore,\n\t\tprivate readonly hooks: AgentCronSchedulerHooks,\n\t) {}\n\n\tstart(): void {\n\t\tthis.stopped = false;\n\t\tif (!this.hasStarted) {\n\t\t\tthis.hasStarted = true;\n\t\t\tthis.store.recoverInterruptedDispatches(this.now());\n\t\t}\n\t\tthis.scheduleNext();\n\t}\n\n\tstop(): void {\n\t\tthis.stopped = true;\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = undefined;\n\t\t}\n\t}\n\n\twake(): void {\n\t\tif (this.stopped) {\n\t\t\treturn;\n\t\t}\n\t\tthis.scheduleNext(0);\n\t}\n\n\tasync runDue(now = this.now()): Promise<number> {\n\t\tif (this.running || (this.stopped && this.hasStarted)) {\n\t\t\treturn 0;\n\t\t}\n\t\tthis.running = true;\n\t\tconst dispatches: Array<{ dispatch: AgentCronDispatch; endDispatch?: () => void }> = [];\n\t\tlet claimedDispatches: AgentCronDispatch[] | undefined;\n\t\ttry {\n\t\t\tclaimedDispatches = this.store.claimDue(now, this.now());\n\t\t\tfor (const dispatch of claimedDispatches) {\n\t\t\t\tdispatches.push({ dispatch, endDispatch: this.hooks.beginDispatch?.(dispatch) });\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tfor (const claimed of dispatches) claimed.endDispatch?.();\n\t\t\tif (claimedDispatches) {\n\t\t\t\tthis.store.recoverInterruptedDispatchesById(\n\t\t\t\t\tclaimedDispatches.map((dispatch) => dispatch.id),\n\t\t\t\t\tthis.now(),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tthis.running = false;\n\t\t\tif (!this.stopped) {\n\t\t\t\tthis.scheduleNext();\n\t\t\t}\n\t\t}\n\t\tconst results = await Promise.all(\n\t\t\tdispatches.map(({ dispatch, endDispatch }) => this.queueDispatch(dispatch, endDispatch)),\n\t\t);\n\t\treturn results.filter((result) => result !== \"skipped\").length;\n\t}\n\n\tprivate queueDispatch(\n\t\tdispatch: AgentCronDispatch,\n\t\tendDispatch?: () => void,\n\t): Promise<AgentCronJobRunResult | undefined> {\n\t\tconst laneKey = dispatch.job.activeSessionId;\n\t\tconst previous = this.dispatchLanes.get(laneKey) ?? Promise.resolve();\n\t\tconst task = previous\n\t\t\t.catch(() => undefined)\n\t\t\t.then(async (): Promise<AgentCronJobRunResult | undefined> => {\n\t\t\t\ttry {\n\t\t\t\t\tconst job = this.store.getClaimedJob(dispatch.job.id);\n\t\t\t\t\tif (!job) {\n\t\t\t\t\t\tthis.store.recordDispatchResult(dispatch.id, { now: this.now(), outcome: \"skipped\" });\n\t\t\t\t\t\treturn \"skipped\";\n\t\t\t\t\t}\n\t\t\t\t\tlet runResult: AgentCronJobRunResult | undefined;\n\t\t\t\t\tlet error: unknown;\n\t\t\t\t\ttry {\n\t\t\t\t\t\trunResult = await this.hooks.runJob(job);\n\t\t\t\t\t} catch (runError) {\n\t\t\t\t\t\terror = runError;\n\t\t\t\t\t\tthis.hooks.onError?.(job, runError);\n\t\t\t\t\t}\n\t\t\t\t\tthis.store.recordDispatchResult(dispatch.id, {\n\t\t\t\t\t\tnow: this.now(),\n\t\t\t\t\t\toutcome: runResult === \"skipped\" && error === undefined ? \"skipped\" : \"ran\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t});\n\t\t\t\t\treturn runResult;\n\t\t\t\t} finally {\n\t\t\t\t\tendDispatch?.();\n\t\t\t\t}\n\t\t\t});\n\t\tconst lane = task.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\tthis.dispatchLanes.set(laneKey, lane);\n\t\tvoid lane.finally(() => {\n\t\t\tif (this.dispatchLanes.get(laneKey) === lane) {\n\t\t\t\tthis.dispatchLanes.delete(laneKey);\n\t\t\t}\n\t\t});\n\t\treturn task;\n\t}\n\n\tprivate scheduleNext(delayMs?: number): void {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = undefined;\n\t\t}\n\t\tconst now = this.now();\n\t\tconst nextDelay =\n\t\t\tdelayMs ??\n\t\t\t(() => {\n\t\t\t\tconst next = this.store.nextActiveRunAt();\n\t\t\t\tif (!next) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn Math.max(0, next.getTime() - now.getTime());\n\t\t\t})();\n\t\tif (nextDelay === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tthis.timer = setTimeout(\n\t\t\t() => {\n\t\t\t\tvoid this.runDue().catch((error) => {\n\t\t\t\t\tlog.error(\"Scheduled job dispatch failed\", {\n\t\t\t\t\t\terror: error instanceof Error ? (error.stack ?? error.message) : String(error),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tMath.min(nextDelay, MAX_TIMEOUT_MS),\n\t\t);\n\t}\n\n\tprivate now(): Date {\n\t\treturn this.hooks.now?.() ?? new Date();\n\t}\n}\n\nexport function parseAgentCronSchedule(\n\tinput: string,\n\tnow = new Date(),\n): { schedule: AgentCronSchedule; nextRunAt: Date } {\n\tconst text = stripMatchingQuotes(input.trim());\n\tif (!text) {\n\t\tthrow new Error(\"Cron schedule cannot be empty\");\n\t}\n\n\tconst inMatch = /^in\\s+(\\d+)\\s*(m|min|mins|minute|minutes|h|hr|hrs|hour|hours|d|day|days)$/i.exec(text);\n\tif (inMatch) {\n\t\tconst amount = Number.parseInt(inMatch[1]!, 10);\n\t\tconst unit = inMatch[2]!.toLowerCase();\n\t\tconst multiplier = unit.startsWith(\"m\")\n\t\t\t? ONE_MINUTE_MS\n\t\t\t: unit.startsWith(\"h\")\n\t\t\t\t? 60 * ONE_MINUTE_MS\n\t\t\t\t: 24 * 60 * ONE_MINUTE_MS;\n\t\treturn {\n\t\t\tschedule: { kind: \"once\", expression: text },\n\t\t\tnextRunAt: new Date(now.getTime() + amount * multiplier),\n\t\t};\n\t}\n\n\tconst everyMatch =\n\t\t/^(?:every|each)\\s+(\\d+)\\s*(s|sec|secs|second|seconds|m|min|mins|minute|minutes|h|hr|hrs|hour|hours)$/i.exec(\n\t\t\ttext,\n\t\t);\n\tif (everyMatch) {\n\t\tconst amount = Number.parseInt(everyMatch[1]!, 10);\n\t\tconst unit = everyMatch[2]!.toLowerCase();\n\t\tconst multiplier = unit.startsWith(\"s\")\n\t\t\t? ONE_SECOND_MS\n\t\t\t: unit.startsWith(\"m\")\n\t\t\t\t? ONE_MINUTE_MS\n\t\t\t\t: 60 * ONE_MINUTE_MS;\n\t\tconst intervalMs = amount * multiplier;\n\t\tif (intervalMs < 10 * ONE_SECOND_MS) {\n\t\t\tthrow new Error(\"Recurring interval must be at least 10 seconds\");\n\t\t}\n\t\treturn {\n\t\t\tschedule: { kind: \"interval\", expression: text, intervalMs },\n\t\t\tnextRunAt: new Date(now.getTime() + intervalMs),\n\t\t};\n\t}\n\n\tif (text.toLowerCase().startsWith(\"at \")) {\n\t\tconst when = new Date(text.slice(3).trim());\n\t\tif (!Number.isFinite(when.getTime())) {\n\t\t\tthrow new Error(\"Invalid one-shot schedule. Use: at <ISO date>\");\n\t\t}\n\t\tif (when.getTime() <= now.getTime()) {\n\t\t\tthrow new Error(\"One-shot schedule must be in the future\");\n\t\t}\n\t\treturn { schedule: { kind: \"once\", expression: text }, nextRunAt: when };\n\t}\n\n\tconst expression = normalizeCronAlias(text);\n\tconst nextRunAt = nextCronRunAfter(expression, now);\n\treturn { schedule: { kind: \"cron\", expression }, nextRunAt };\n}\n\nexport function normalizeHeartbeatSchedule(input: string | undefined): string {\n\tconst text = input?.trim();\n\tif (!text) {\n\t\treturn DEFAULT_HEARTBEAT_SCHEDULE;\n\t}\n\tif (/^\\d+\\s*(s|sec|secs|second|seconds|m|min|mins|minute|minutes|h|hr|hrs|hour|hours)$/i.test(text)) {\n\t\treturn `every ${text}`;\n\t}\n\treturn text;\n}\n\nexport function normalizeHeartbeatDeliveryMode(value: unknown): AgentHeartbeatDeliveryMode | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (value === \"steer\" || value === \"follow_up\") {\n\t\treturn value;\n\t}\n\tthrow new Error('Heartbeat delivery mode must be \"steer\" or \"follow_up\"');\n}\n\nexport function resolveHeartbeatStreamingBehavior(\n\tdeliveryMode: AgentHeartbeatDeliveryMode | undefined,\n): \"steer\" | \"followUp\" {\n\treturn (deliveryMode ?? DEFAULT_HEARTBEAT_DELIVERY_MODE) === \"follow_up\" ? \"followUp\" : \"steer\";\n}\n\nexport function parseHeartbeatCommand(input: string): ParsedHeartbeatCommand {\n\tconst text = input.replace(/^\\/heartbeat\\b/, \"\").trim();\n\tif (!text || text === \"status\") {\n\t\treturn { type: \"status\" };\n\t}\n\tif (text === \"pause\") {\n\t\treturn { type: \"pause\" };\n\t}\n\tif (text === \"resume\") {\n\t\treturn { type: \"resume\" };\n\t}\n\tif (text === \"clear\" || text === \"stop\") {\n\t\treturn { type: \"clear\" };\n\t}\n\n\tconst leadingDelivery = consumeDeliveryOption(text);\n\tlet deliveryMode = leadingDelivery.deliveryMode;\n\tlet remaining = leadingDelivery.rest;\n\n\tconst option = consumeEveryOption(remaining);\n\tif (option) {\n\t\tconst trailingDelivery = consumeDeliveryOption(option.rest);\n\t\tdeliveryMode = trailingDelivery.deliveryMode ?? deliveryMode;\n\t\tif (!trailingDelivery.rest) {\n\t\t\tthrow new Error(\"Usage: /heartbeat [--every <interval>] [--steer|--follow-up] <instruction>\");\n\t\t}\n\t\treturn {\n\t\t\ttype: \"set\",\n\t\t\tschedule: normalizeHeartbeatSchedule(option.interval),\n\t\t\tinstruction: trailingDelivery.rest,\n\t\t\t...(deliveryMode ? { deliveryMode } : {}),\n\t\t};\n\t}\n\n\tconst leadingSchedule = consumeLeadingEverySchedule(remaining);\n\tif (leadingSchedule) {\n\t\tconst trailingDelivery = consumeDeliveryOption(leadingSchedule.rest);\n\t\tdeliveryMode = trailingDelivery.deliveryMode ?? deliveryMode;\n\t\tif (!trailingDelivery.rest) {\n\t\t\tthrow new Error(\"Usage: /heartbeat [--every <interval>] [--steer|--follow-up] <instruction>\");\n\t\t}\n\t\treturn {\n\t\t\ttype: \"set\",\n\t\t\tschedule: normalizeHeartbeatSchedule(leadingSchedule.interval),\n\t\t\tinstruction: trailingDelivery.rest,\n\t\t\t...(deliveryMode ? { deliveryMode } : {}),\n\t\t};\n\t}\n\n\tremaining = remaining.trim();\n\tif (!remaining) {\n\t\tthrow new Error(\"Usage: /heartbeat [--every <interval>] [--steer|--follow-up] <instruction>\");\n\t}\n\treturn {\n\t\ttype: \"set\",\n\t\tschedule: DEFAULT_HEARTBEAT_SCHEDULE,\n\t\tinstruction: remaining,\n\t\t...(deliveryMode ? { deliveryMode } : {}),\n\t};\n}\n\nexport function nextRunAtForSchedule(schedule: AgentCronSchedule, after: Date): Date | undefined {\n\tif (schedule.kind === \"once\") {\n\t\treturn undefined;\n\t}\n\tif (schedule.kind === \"interval\") {\n\t\tif (!schedule.intervalMs || schedule.intervalMs <= 0) {\n\t\t\tthrow new Error(`Invalid interval schedule: ${schedule.expression}`);\n\t\t}\n\t\treturn new Date(after.getTime() + schedule.intervalMs);\n\t}\n\treturn nextCronRunAfter(schedule.expression, after);\n}\n\nexport function formatAgentCronJob(job: AgentCronJob): string {\n\tconst next = job.nextRunAt ? new Date(job.nextRunAt).toLocaleString() : \"-\";\n\tconst last = job.lastRunAt ? new Date(job.lastRunAt).toLocaleString() : \"-\";\n\tconst preview = job.prompt.replace(/\\s+/g, \" \").slice(0, 80);\n\tconst error = job.lastError ? ` error=${job.lastError}` : \"\";\n\tconst label = job.label ? ` label=\"${job.label}\"` : \"\";\n\tconst skipped = job.lastSkippedAt ? ` skipped=${new Date(job.lastSkippedAt).toLocaleString()}` : \"\";\n\treturn `${job.id} ${job.status}${label} next=${next} last=${last}${skipped} runs=${job.runCount} schedule=\"${job.schedule.expression}\" prompt=\"${preview}\"${error}`;\n}\n\nfunction consumeDeliveryOption(text: string): { deliveryMode: AgentHeartbeatDeliveryMode | undefined; rest: string } {\n\tlet rest = text.trim();\n\tif (/(?:^|\\s)--deliver=?$/i.test(rest)) {\n\t\tthrow new Error('Heartbeat delivery mode must be \"steer\" or \"follow_up\"');\n\t}\n\tlet deliveryMode: AgentHeartbeatDeliveryMode | undefined;\n\tlet leading = consumeLeadingDeliveryFlag(rest);\n\twhile (leading) {\n\t\tdeliveryMode = leading.deliveryMode;\n\t\trest = leading.rest.trim();\n\t\tleading = consumeLeadingDeliveryFlag(rest);\n\t}\n\n\tlet trailing = consumeTrailingDeliveryFlag(rest);\n\tlet trailingDeliveryMode: AgentHeartbeatDeliveryMode | undefined;\n\twhile (trailing) {\n\t\t// Consume all trailing flags, but keep the rightmost flag's mode because it\n\t\t// is textually latest and should win over earlier flags.\n\t\ttrailingDeliveryMode ??= trailing.deliveryMode;\n\t\trest = trailing.rest.trim();\n\t\ttrailing = consumeTrailingDeliveryFlag(rest);\n\t}\n\treturn { deliveryMode: trailingDeliveryMode ?? deliveryMode, rest };\n}\n\nfunction consumeLeadingDeliveryFlag(\n\ttext: string,\n): { deliveryMode: AgentHeartbeatDeliveryMode; rest: string } | undefined {\n\tconst match = /^--(?:deliver(?:=|\\s+)(\\S+)|(steer)|(follow[-_]up))(?:\\s+|$)([\\s\\S]*)$/i.exec(text);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tdeliveryMode: parseDeliveryModeToken(match[1] ?? match[2] ?? match[3] ?? \"\"),\n\t\trest: match[4]?.trim() ?? \"\",\n\t};\n}\n\nfunction consumeTrailingDeliveryFlag(\n\ttext: string,\n): { deliveryMode: AgentHeartbeatDeliveryMode; rest: string } | undefined {\n\tconst deliverWithSpace = /^([\\s\\S]*?)\\s+--deliver\\s+(\\S+)$/i.exec(text);\n\tif (deliverWithSpace) {\n\t\treturn { deliveryMode: parseDeliveryModeToken(deliverWithSpace[2] ?? \"\"), rest: deliverWithSpace[1] ?? \"\" };\n\t}\n\tconst deliverWithEquals = /^([\\s\\S]*?)\\s+--deliver=(\\S+)$/i.exec(text);\n\tif (deliverWithEquals) {\n\t\treturn { deliveryMode: parseDeliveryModeToken(deliverWithEquals[2] ?? \"\"), rest: deliverWithEquals[1] ?? \"\" };\n\t}\n\tconst shorthand = /^([\\s\\S]*?)\\s+--(steer|follow[-_]up)$/i.exec(text);\n\tif (shorthand) {\n\t\treturn { deliveryMode: parseDeliveryModeToken(shorthand[2] ?? \"\"), rest: shorthand[1] ?? \"\" };\n\t}\n\treturn undefined;\n}\n\nfunction parseDeliveryModeToken(token: string): AgentHeartbeatDeliveryMode {\n\tconst normalized = token.toLowerCase().replace(\"-\", \"_\");\n\tif (normalized === \"steer\" || normalized === \"follow_up\") {\n\t\treturn normalized;\n\t}\n\tthrow new Error('Heartbeat delivery mode must be \"steer\" or \"follow_up\"');\n}\n\nfunction consumeEveryOption(text: string): { interval: string; rest: string } | undefined {\n\tconst match =\n\t\t/^--every(?:=|\\s+)(?:\"([^\"]+)\"|'([^']+)'|(\\d+\\s*(?:s|sec|secs|second|seconds|m|min|mins|minute|minutes|h|hr|hrs|hour|hours))|(\\S+))(?:\\s+|$)([\\s\\S]*)$/i.exec(\n\t\t\ttext,\n\t\t);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tinterval: match[1] ?? match[2] ?? match[3] ?? match[4] ?? \"\",\n\t\trest: match[5]?.trim() ?? \"\",\n\t};\n}\n\nfunction consumeLeadingEverySchedule(text: string): { interval: string; rest: string } | undefined {\n\tconst match =\n\t\t/^(every|each)\\s+\\d+\\s*(?:s|sec|secs|second|seconds|m|min|mins|minute|minutes|h|hr|hrs|hour|hours)\\b/i.exec(text);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tinterval: match[0],\n\t\trest: text\n\t\t\t.slice(match[0].length)\n\t\t\t.trim()\n\t\t\t// Strip only a standalone \"--\" separator, never a flag like \"--follow-up\".\n\t\t\t.replace(/^--(?=\\s|$)/, \"\")\n\t\t\t.trim(),\n\t};\n}\n\nexport function isHeartbeatCronJob(job: AgentCronJob): boolean {\n\treturn job.source === \"heartbeat\" || job.source === \"rlm_heartbeat\";\n}\n\nexport function shouldDeferHeartbeatCronJob(job: AgentCronJob, activity: HeartbeatCronSessionActivity): boolean {\n\tif (!isHeartbeatCronJob(job)) {\n\t\treturn false;\n\t}\n\t// States where delivering a heartbeat is unsafe or would stack redundant work,\n\t// regardless of delivery mode.\n\tconst busyBesidesStreaming =\n\t\tactivity.isCompacting === true ||\n\t\tactivity.isRetrying === true ||\n\t\tactivity.isBashRunning ||\n\t\tactivity.hasPendingSessionWork ||\n\t\t(!activity.isStreaming && activity.unfinishedActionCount > 0);\n\tif (busyBesidesStreaming) {\n\t\treturn true;\n\t}\n\t// \"steer\" heartbeats interrupt the current turn, so a plain streaming turn must\n\t// not defer them; \"follow_up\" heartbeats wait, so streaming still defers.\n\tif (resolveHeartbeatStreamingBehavior(job.deliveryMode) === \"steer\") {\n\t\treturn false;\n\t}\n\treturn activity.isStreaming;\n}\n\nfunction nextCronRunAfter(expression: string, after: Date): Date {\n\tconst fields = parseCronExpression(expression);\n\tconst candidate = new Date(after.getTime());\n\tcandidate.setSeconds(0, 0);\n\tcandidate.setMinutes(candidate.getMinutes() + 1);\n\n\tconst deadline = candidate.getTime() + 366 * 24 * 60 * ONE_MINUTE_MS;\n\twhile (candidate.getTime() <= deadline) {\n\t\tif (matchesCronFields(candidate, fields)) {\n\t\t\treturn candidate;\n\t\t}\n\t\tcandidate.setMinutes(candidate.getMinutes() + 1);\n\t}\n\tthrow new Error(`Cron schedule did not match within one year: ${expression}`);\n}\n\nfunction parseCronExpression(expression: string): CronFields {\n\tconst parts = expression.trim().split(/\\s+/);\n\tif (parts.length !== 5) {\n\t\tthrow new Error(\n\t\t\t\"Unsupported cron schedule. Use 'in 10m', 'at <ISO date>', @hourly, or five fields: minute hour day month weekday\",\n\t\t);\n\t}\n\treturn {\n\t\tminute: parseCronField(parts[0]!, 0, 59),\n\t\thour: parseCronField(parts[1]!, 0, 23),\n\t\tdayOfMonth: parseCronField(parts[2]!, 1, 31),\n\t\tmonth: parseCronField(parts[3]!, 1, 12),\n\t\tdayOfWeek: parseCronField(parts[4]!, 0, 7),\n\t};\n}\n\ninterface CronFields {\n\tminute: Set<number>;\n\thour: Set<number>;\n\tdayOfMonth: Set<number>;\n\tmonth: Set<number>;\n\tdayOfWeek: Set<number>;\n}\n\nfunction parseCronField(field: string, min: number, max: number): Set<number> {\n\tconst values = new Set<number>();\n\tfor (const part of field.split(\",\")) {\n\t\tif (!part) {\n\t\t\tthrow new Error(`Invalid cron field: ${field}`);\n\t\t}\n\t\tconst [rangeText, stepText] = part.split(\"/\");\n\t\tconst step = stepText === undefined ? 1 : parseCronNumber(stepText, 1, max);\n\t\tlet start: number;\n\t\tlet end: number;\n\t\tif (rangeText === \"*\") {\n\t\t\tstart = min;\n\t\t\tend = max;\n\t\t} else if (rangeText?.includes(\"-\")) {\n\t\t\tconst [startText, endText] = rangeText.split(\"-\");\n\t\t\tstart = parseCronNumber(startText, min, max);\n\t\t\tend = parseCronNumber(endText, min, max);\n\t\t\tif (start > end) {\n\t\t\t\tthrow new Error(`Invalid cron range: ${rangeText}`);\n\t\t\t}\n\t\t} else {\n\t\t\tstart = parseCronNumber(rangeText, min, max);\n\t\t\tend = start;\n\t\t}\n\t\tfor (let value = start; value <= end; value += step) {\n\t\t\tvalues.add(value);\n\t\t}\n\t}\n\treturn values;\n}\n\nfunction parseCronNumber(value: string | undefined, min: number, max: number): number {\n\tif (!value || !/^\\d+$/.test(value)) {\n\t\tthrow new Error(`Invalid cron number: ${value ?? \"\"}`);\n\t}\n\tconst parsed = Number.parseInt(value, 10);\n\tif (parsed < min || parsed > max) {\n\t\tthrow new Error(`Cron number out of range: ${value}`);\n\t}\n\treturn parsed;\n}\n\nfunction matchesCronFields(date: Date, fields: CronFields): boolean {\n\tconst day = date.getDay();\n\tconst dayMatches = fields.dayOfWeek.has(day) || (day === 0 && fields.dayOfWeek.has(7));\n\treturn (\n\t\tfields.minute.has(date.getMinutes()) &&\n\t\tfields.hour.has(date.getHours()) &&\n\t\tfields.dayOfMonth.has(date.getDate()) &&\n\t\tfields.month.has(date.getMonth() + 1) &&\n\t\tdayMatches\n\t);\n}\n\nfunction normalizeCronAlias(text: string): string {\n\tswitch (text) {\n\t\tcase \"@hourly\":\n\t\t\treturn \"0 * * * *\";\n\t\tcase \"@daily\":\n\t\t\treturn \"0 0 * * *\";\n\t\tcase \"@weekly\":\n\t\t\treturn \"0 0 * * 0\";\n\t\tcase \"@monthly\":\n\t\t\treturn \"0 0 1 * *\";\n\t\tdefault:\n\t\t\treturn text;\n\t}\n}\n\nfunction stripMatchingQuotes(value: string): string {\n\tif (\n\t\tvalue.length >= 2 &&\n\t\t((value.startsWith('\"') && value.endsWith('\"')) || (value.startsWith(\"'\") && value.endsWith(\"'\")))\n\t) {\n\t\treturn value.slice(1, -1);\n\t}\n\treturn value;\n}\n\nfunction isDueJob(job: AgentCronJob, now: Date): boolean {\n\treturn job.status === \"active\" && job.nextRunAt !== undefined && Date.parse(job.nextRunAt) <= now.getTime();\n}\n\nfunction withCronJobsStateLocks<T>(paths: readonly string[], action: () => T): T {\n\tconst releases: Array<() => void> = [];\n\ttry {\n\t\tfor (const path of [...new Set(paths)].sort()) {\n\t\t\tmkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n\t\t\tlet release: (() => void) | undefined;\n\t\t\tlet lockCompromised = false;\n\t\t\tfor (let attempt = 0; attempt < 100; attempt++) {\n\t\t\t\ttry {\n\t\t\t\t\trelease = lockSync(path, {\n\t\t\t\t\t\trealpath: false,\n\t\t\t\t\t\tlockfilePath: `${path}.lock`,\n\t\t\t\t\t\tstale: 30_000,\n\t\t\t\t\t\tonCompromised: () => {\n\t\t\t\t\t\t\tlockCompromised = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tif (lockCompromised) {\n\t\t\t\t\t\trelease();\n\t\t\t\t\t\tthrow new Error(`Cron jobs lock compromised: ${path}`);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (lockCompromised) {\n\t\t\t\t\t\tthrow new Error(`Cron jobs lock compromised: ${path}`);\n\t\t\t\t\t}\n\t\t\t\t\tif ((error as NodeJS.ErrnoException).code !== \"ELOCKED\" || attempt === 99) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tAtomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 10);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!release) {\n\t\t\t\tthrow new Error(`Could not coordinate scheduled jobs: ${path}`);\n\t\t\t}\n\t\t\treleases.push(release);\n\t\t}\n\t\treturn action();\n\t} finally {\n\t\tfor (const release of releases.reverse()) {\n\t\t\trelease();\n\t\t}\n\t}\n}\n\nfunction readJobsState(path: string): CronJobsState {\n\tif (!existsSync(path)) {\n\t\treturn { jobs: [], dispatches: [] };\n\t}\n\tconst parsed = JSON.parse(readFileSync(path, \"utf-8\")) as CronJobsFile;\n\treturn {\n\t\tjobs: Array.isArray(parsed.jobs) ? parsed.jobs.filter(isAgentCronJob) : [],\n\t\tdispatches: Array.isArray(parsed.dispatches) ? parsed.dispatches.filter(isAgentCronDispatchRecord) : [],\n\t};\n}\n\nfunction writeJobsFile(path: string, jobs: readonly AgentCronJob[], mergeCurrent: boolean): void {\n\tconst current = readJobsState(path);\n\twriteJobsState(path, {\n\t\tjobs: mergeCurrent ? mergeFreshJobs(current.jobs, jobs) : [...jobs],\n\t\tdispatches: current.dispatches,\n\t});\n}\n\nfunction writeJobsState(path: string, state: CronJobsState): void {\n\tconst directory = dirname(path);\n\tmkdirSync(directory, { recursive: true, mode: 0o700 });\n\tconst tempPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n\tconst descriptor = openSync(tempPath, \"w\", 0o600);\n\ttry {\n\t\twriteFileSync(descriptor, `${JSON.stringify(state, null, 2)}\\n`, \"utf-8\");\n\t\tfsyncSync(descriptor);\n\t} finally {\n\t\tcloseSync(descriptor);\n\t}\n\trenameSync(tempPath, path);\n\ttry {\n\t\tconst directoryDescriptor = openSync(directory, \"r\");\n\t\ttry {\n\t\t\tfsyncSync(directoryDescriptor);\n\t\t} finally {\n\t\t\tcloseSync(directoryDescriptor);\n\t\t}\n\t} catch {\n\t\t// Directory fsync is unavailable on some platforms; the atomic rename still protects readers.\n\t}\n}\n\nfunction claimDueInState(state: CronJobsState, dueAt: Date, claimedAt: Date): AgentCronDispatch[] {\n\tconst dispatches: AgentCronDispatch[] = [];\n\tconst claimedJobIds = new Set(state.dispatches.map((dispatch) => dispatch.jobId));\n\tstate.jobs = state.jobs.map((job) => {\n\t\tif (!isDueJob(job, dueAt)) {\n\t\t\treturn job;\n\t\t}\n\t\tconst scheduledFor = job.nextRunAt!;\n\t\tconst nextRunAt = nextRunAtForSchedule(job.schedule, claimedAt)?.toISOString();\n\t\tconst advanced = nextRunAt\n\t\t\t? { ...job, nextRunAt, updatedAt: claimedAt.toISOString() }\n\t\t\t: withoutNextRunAt({ ...job, updatedAt: claimedAt.toISOString() });\n\t\tif (claimedJobIds.has(job.id)) {\n\t\t\treturn { ...advanced, lastSkippedAt: claimedAt.toISOString() };\n\t\t}\n\t\tconst dispatch: AgentCronDispatchRecord = {\n\t\t\tid: randomUUID(),\n\t\t\tjobId: job.id,\n\t\t\tclaimedAt: claimedAt.toISOString(),\n\t\t\tscheduledFor,\n\t\t};\n\t\tstate.dispatches.push(dispatch);\n\t\tdispatches.push({ id: dispatch.id, job: advanced });\n\t\treturn advanced;\n\t});\n\treturn dispatches;\n}\n\nfunction recoverInterruptedInState(\n\tstate: CronJobsState,\n\tnow: Date,\n\trecovered: AgentCronJob[],\n\tdispatchIds?: ReadonlySet<string>,\n): void {\n\tconst interrupted = dispatchIds\n\t\t? state.dispatches.filter((dispatch) => dispatchIds.has(dispatch.id))\n\t\t: state.dispatches;\n\tif (interrupted.length === 0) {\n\t\treturn;\n\t}\n\tconst interruptedIds = new Set(interrupted.map((dispatch) => dispatch.jobId));\n\tstate.dispatches = dispatchIds ? state.dispatches.filter((dispatch) => !dispatchIds.has(dispatch.id)) : [];\n\tstate.jobs = state.jobs.map((job) => {\n\t\tif (!interruptedIds.has(job.id) || job.status !== \"active\") {\n\t\t\treturn job;\n\t\t}\n\t\tconst next = {\n\t\t\t...job,\n\t\t\tstatus: job.schedule.kind === \"once\" ? (\"completed\" as const) : job.status,\n\t\t\tlastError: \"Interrupted before scheduled operation completion\",\n\t\t\tupdatedAt: now.toISOString(),\n\t\t};\n\t\trecovered.push(next);\n\t\treturn next;\n\t});\n}\n\nfunction mergeFreshJobs(currentJobs: readonly AgentCronJob[], nextJobs: readonly AgentCronJob[]): AgentCronJob[] {\n\tconst merged = new Map<string, AgentCronJob>();\n\tfor (const job of currentJobs) {\n\t\tmerged.set(job.id, job);\n\t}\n\tfor (const job of nextJobs) {\n\t\tconst current = merged.get(job.id);\n\t\tif (!current || isAtLeastAsFresh(job, current)) {\n\t\t\tmerged.set(job.id, job);\n\t\t}\n\t}\n\treturn [...merged.values()];\n}\n\nfunction isAtLeastAsFresh(candidate: AgentCronJob, current: AgentCronJob): boolean {\n\tconst candidateTime = Date.parse(candidate.updatedAt);\n\tconst currentTime = Date.parse(current.updatedAt);\n\tif (!Number.isFinite(currentTime)) {\n\t\treturn true;\n\t}\n\tif (!Number.isFinite(candidateTime)) {\n\t\treturn false;\n\t}\n\treturn candidateTime >= currentTime;\n}\n\nfunction compareOptionalIso(left: string | undefined, right: string | undefined): number {\n\tif (left === right) {\n\t\treturn 0;\n\t}\n\tif (left === undefined) {\n\t\treturn 1;\n\t}\n\tif (right === undefined) {\n\t\treturn -1;\n\t}\n\treturn Date.parse(left) - Date.parse(right);\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction normalizeOptionalLabel(label: string | undefined): string | undefined {\n\tconst trimmed = label?.trim();\n\treturn trimmed ? trimmed : undefined;\n}\n\nfunction withoutNextRunAt(job: AgentCronJob): AgentCronJob {\n\tconst { nextRunAt: _nextRunAt, ...rest } = job;\n\treturn rest;\n}\n\nexport function isAgentCronJob(value: unknown): value is AgentCronJob {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst candidate = value as Partial<AgentCronJob>;\n\treturn (\n\t\ttypeof candidate.id === \"string\" &&\n\t\t(candidate.status === \"active\" ||\n\t\t\tcandidate.status === \"paused\" ||\n\t\t\tcandidate.status === \"completed\" ||\n\t\t\tcandidate.status === \"cancelled\") &&\n\t\t(candidate.source === undefined ||\n\t\t\tcandidate.source === \"cron\" ||\n\t\t\tcandidate.source === \"heartbeat\" ||\n\t\t\tcandidate.source === \"rlm_heartbeat\") &&\n\t\t(candidate.runtimeKind === undefined ||\n\t\t\tcandidate.runtimeKind === \"top-level\" ||\n\t\t\tcandidate.runtimeKind === \"subagent\") &&\n\t\t(candidate.deliveryMode === undefined ||\n\t\t\tcandidate.deliveryMode === \"steer\" ||\n\t\t\tcandidate.deliveryMode === \"follow_up\") &&\n\t\ttypeof candidate.activeSessionId === \"string\" &&\n\t\ttypeof candidate.sessionId === \"string\" &&\n\t\ttypeof candidate.sessionFile === \"string\" &&\n\t\ttypeof candidate.cwd === \"string\" &&\n\t\t(candidate.label === undefined || typeof candidate.label === \"string\") &&\n\t\ttypeof candidate.prompt === \"string\" &&\n\t\ttypeof candidate.schedule === \"object\" &&\n\t\tcandidate.schedule !== null &&\n\t\t(candidate.schedule.kind === \"once\" ||\n\t\t\tcandidate.schedule.kind === \"cron\" ||\n\t\t\t(candidate.schedule.kind === \"interval\" &&\n\t\t\t\ttypeof candidate.schedule.intervalMs === \"number\" &&\n\t\t\t\tcandidate.schedule.intervalMs > 0)) &&\n\t\ttypeof candidate.schedule.expression === \"string\" &&\n\t\ttypeof candidate.createdAt === \"string\" &&\n\t\ttypeof candidate.updatedAt === \"string\" &&\n\t\ttypeof candidate.runCount === \"number\"\n\t);\n}\n\nfunction isAgentCronDispatchRecord(value: unknown): value is AgentCronDispatchRecord {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst candidate = value as Partial<AgentCronDispatchRecord>;\n\treturn (\n\t\ttypeof candidate.id === \"string\" &&\n\t\ttypeof candidate.jobId === \"string\" &&\n\t\ttypeof candidate.claimedAt === \"string\" &&\n\t\ttypeof candidate.scheduledFor === \"string\"\n\t);\n}\n"]}
|