Tak Hoffman
556af3f08b
fix(cron): cancel timed-out runs before side effects (openclaw#22411) thanks @Takhoffman
...
Verified:
- pnpm check
- pnpm vitest run src/memory/qmd-manager.test.ts src/cron/service.issue-regressions.test.ts src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts --maxWorkers=1
Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-02-22 15:45:27 -06:00
Peter Steinberger
5d90e31807
refactor(cron): share timed job-execution helper
2026-02-22 20:18:20 +00:00
Peter Steinberger
7e83e7b3a7
fix(cron): narrow manual run execution state
2026-02-22 20:19:23 +01:00
Peter Steinberger
9cf445e37c
fix(cron): restore interval cadence after restart
2026-02-22 20:19:23 +01:00
Peter Steinberger
aa4c250eb8
fix(cron): split run and delivery status tracking
2026-02-22 20:19:23 +01:00
Peter Steinberger
c3bb723673
fix(cron): enforce timeout for manual cron runs
2026-02-22 20:19:23 +01:00
Peter Steinberger
8bf3c37c6c
fix(cron): keep watchdog timer armed during ticks
2026-02-22 20:19:23 +01:00
Peter Steinberger
5db1ee4ec6
fix(cron): keep manual runs non-blocking
2026-02-22 20:19:22 +01:00
Peter Steinberger
34ea33f057
refactor: dedupe core config and runtime helpers
2026-02-22 17:11:54 +00:00
Frank Yang
1051f42f96
fix(stability): patch regex retries and timeout abort handling
2026-02-22 10:59:34 +01:00
Vignesh Natarajan
961bde27fe
Cron: guard missing expr in schedule parsing
2026-02-21 20:18:11 -08:00
Vignesh Natarajan
2830dafbe9
Cron: keep list/status responsive during startup catch-up
2026-02-21 19:13:04 -08:00
Simone Macario
09d5f508b1
fix(cron): persist delivered flag in job state to surface delivery failures (openclaw#19174) thanks @simonemacario
...
Verified:
- pnpm build
- pnpm check
- pnpm test:macmini
Co-authored-by: simonemacario <2116609+simonemacario@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-02-21 12:47:29 -06:00
Tak Hoffman
7417c36268
fix(cron): honor maxConcurrentRuns in timer loop (openclaw#22413) thanks @Takhoffman
...
Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm check
- pnpm test:macmini (failed on unrelated baseline test: src/memory/qmd-manager.test.ts > throws when sqlite index is busy)
Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-02-20 22:31:58 -06:00
Peter Steinberger
b8b43175c5
style: align formatting with oxfmt 0.33
2026-02-18 01:34:35 +00:00
Peter Steinberger
31f9be126c
style: run oxfmt and fix gate failures
2026-02-18 01:29:02 +00:00
Peter Steinberger
6dcc052bb4
fix: stabilize model catalog and pi discovery auth storage compatibility
2026-02-18 02:09:40 +01:00
Peter Steinberger
dd4eb8bf63
fix(cron): retry next-second schedule compute on undefined
2026-02-17 23:48:14 +01:00
Peter Steinberger
c26cf6aa83
feat(cron): add default stagger controls for scheduled jobs
2026-02-17 23:48:14 +01:00
Tyler Yust
75001a0490
fix cron announce routing and timeout handling
2026-02-17 11:40:04 -08:00
cpojer
d0cb8c19b2
chore: wtf.
2026-02-17 13:36:48 +09:00
Sebastian
ed11e93cf2
chore(format)
2026-02-16 23:20:16 -05:00
Vignesh Natarajan
f988abf202
Cron: route reminders by session namespace
2026-02-17 01:54:59 +01:00
cpojer
c70597daeb
chore: Fix formatting.
2026-02-17 09:40:00 +09:00
Peter Steinberger
80c7d04ad2
refactor(cron): reuse shared run outcome telemetry types
2026-02-17 00:32:34 +00:00
cpojer
90ef2d6bdf
chore: Update formatting.
2026-02-17 09:18:40 +09:00
Marcus Widing
8af4712c40
fix(cron): prevent spin loop when job completes within scheduled second ( #17821 )
...
When a cron job fires and completes within the same wall-clock second it
was scheduled for, the next-run computation could return undefined or the
same second, causing the scheduler to re-trigger the job hundreds of
times in a tight loop.
Two-layer fix:
1. computeJobNextRunAtMs: When computeNextRunAtMs returns undefined for a
cron-kind schedule (edge case where floored nowSecondMs matches the
schedule), retry with the ceiling (next second) as reference time.
This ensures we always get the next valid occurrence.
2. applyJobResult: Add MIN_REFIRE_GAP_MS (2s) safety net for cron-kind
jobs. After a successful run, nextRunAtMs is guaranteed to be at
least 2s in the future. This breaks any remaining spin-loop edge
cases without affecting normal daily/hourly schedules (where the
natural next run is hours/days away).
Fixes #17821
2026-02-16 23:59:44 +01:00
Rob Dunn
ddea5458d0
cron: log model+token usage per run + add usage report script
2026-02-16 23:58:38 +01:00
Peter Steinberger
b991919755
refactor(cron): dedupe next-run recompute paths
2026-02-16 17:06:40 +00:00
pierreeurope
fec4be8dec
fix(cron): prevent daily jobs from skipping days (48h jump) #17852 ( #17903 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 1ffe6a45af
Co-authored-by: pierreeurope <248892285+pierreeurope@users.noreply.github.com >
Co-authored-by: sebslight <19554889+sebslight@users.noreply.github.com >
Reviewed-by: @sebslight
2026-02-16 08:35:49 -05:00
Advait Paliwal
bc67af6ad8
cron: separate webhook POST delivery from announce ( #17901 )
...
* cron: split webhook delivery from announce mode
* cron: validate webhook delivery target
* cron: remove legacy webhook fallback config
* fix: finalize cron webhook delivery prep (#17901 ) (thanks @advaitpaliwal)
---------
Co-authored-by: Tyler Yust <TYTYYUST@YAHOO.COM >
2026-02-16 02:36:00 -08:00
Peter Steinberger
17e5a5015c
perf: avoid async cron timer callbacks
2026-02-16 02:45:00 +00:00
Peter Steinberger
5b2cb8ba11
refactor(cron): dedupe finished event emit
2026-02-16 01:37:03 +00:00
Peter Steinberger
a73e7786e7
refactor(cron): share runnable job filter
2026-02-16 01:29:01 +00:00
Peter Steinberger
2679089e9e
refactor(cron): dedupe next-run recompute loop
2026-02-16 01:27:40 +00:00
Peter Steinberger
c95a61aa9d
refactor(cron): dedupe read-only load flow
2026-02-16 01:26:37 +00:00
Advait Paliwal
115cfb4430
gateway: add cron finished-run webhook ( #14535 )
...
* gateway: add cron finished webhook delivery
* config: allow cron webhook in runtime schema
* cron: require notify flag for webhook posts
* ui/docs: add cron notify toggle and webhook docs
* fix: harden cron webhook auth and fill notify coverage (#14535 ) (thanks @advaitpaliwal)
---------
Co-authored-by: Tyler Yust <TYTYYUST@YAHOO.COM >
2026-02-15 16:14:17 -08:00
Peter Steinberger
b3ef3fca75
refactor(cron): share legacy delivery helpers
2026-02-15 17:29:08 +00:00
Gustavo Madeira Santana
88caa4b50c
chore(cron): simplify enabled checks for lint
2026-02-15 10:30:19 -05:00
Alejandro Santander
9a344da298
fix(cron): treat missing enabled as true in update() (openclaw#15477) thanks @eternauta1337
...
Verified:
- pnpm exec vitest src/cron/service.issue-regressions.test.ts
Co-authored-by: eternauta1337 <550409+eternauta1337@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-02-15 08:52:02 -06:00
Vignesh Natarajan
4c4d2558e3
fix (heartbeat/cron): preserve cron prompts for tagged interval events
2026-02-14 19:46:31 -08:00
Vignesh Natarajan
7b89e68d18
fix (cron): skip startup replay for interrupted running jobs
2026-02-14 19:06:37 -08:00
Peter Steinberger
20dea3cdb1
perf(cron): make wakeMode now busy-wait configurable
2026-02-14 23:51:47 +00:00
Peter Steinberger
6b400eca5c
refactor(cron): share job tick state normalization
2026-02-14 21:44:30 +00:00
zerone0x
c60844931b
fix(cron): prevent list/status from silently skipping recurring jobs (openclaw#16201) thanks @zerone0x
...
Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm check
- pnpm test:macmini
Co-authored-by: zerone0x <39543393+zerone0x@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-02-14 13:33:29 -06:00
青雲
80407cbc6a
fix: recompute all cron next-run times after job update (openclaw#15905) thanks @echoVic
...
Verified:
- pnpm check
- pnpm vitest src/cron/service.issue-regressions.test.ts src/cron/service.issue-13992-regression.test.ts
Co-authored-by: echoVic <16428813+echoVic@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-02-14 12:37:22 -06:00
Peter Steinberger
45a2cd55cc
fix: harden isolated cron announce delivery fallback ( #15739 ) (thanks @widingmarcus-cyber)
2026-02-13 23:49:10 +01:00
Marcus Widing
ea95e88dd6
fix(cron): prevent duplicate delivery for isolated jobs with announce mode
...
When an isolated cron job delivers its output via deliverOutboundPayloads
or the subagent announce flow, the finish handler in executeJobCore
unconditionally posts a summary to the main agent session and wakes it
via requestHeartbeatNow. The main agent then generates a second response
that is also delivered to the target channel, resulting in duplicate
messages with different content.
Add a `delivered` flag to RunCronAgentTurnResult that is set to true
when the isolated run successfully delivers its output. In executeJobCore,
skip the enqueueSystemEvent + requestHeartbeatNow call when the flag is
set, preventing the main agent from waking up and double-posting.
Fixes #15692
2026-02-13 23:49:10 +01:00
Sebastian
d31caa81ef
fix(runtime): guard cleanup and preserve skipped cron jobs
2026-02-12 09:28:47 -05:00
niceysam
f7e05d0136
fix: exclude maxTokens from config redaction + honor deleteAfterRun on skipped cron jobs ( #13342 )
...
* fix: exclude maxTokens and token-count fields from config redaction
The /token/i regex in SENSITIVE_KEY_PATTERNS falsely matched fields like
maxTokens, maxOutputTokens, maxCompletionTokens etc. These are numeric
config fields for token counts, not sensitive credentials.
Added a whitelist (SENSITIVE_KEY_WHITELIST) that explicitly excludes
known token-count field names from redaction. This prevents config
corruption when maxTokens gets replaced with __OPENCLAW_REDACTED__
during config round-trips.
Fixes #13236
* fix: honor deleteAfterRun for one-shot 'at' jobs with 'skipped' status
Previously, deleteAfterRun only triggered when result.status was 'ok'.
For one-shot 'at' jobs, a 'skipped' status (e.g. empty heartbeat file)
would leave the job in state but disabled, never getting cleaned up.
Now deleteAfterRun also triggers on 'skipped' status for 'at' jobs,
since a skipped one-shot job has no meaningful retry path.
Fixes #13249
* Cron: format timer.ts
---------
Co-authored-by: nice03 <niceyslee@gmail.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-02-12 07:55:05 -06:00