@karmaniverous/jeeves-runner
    Preparing search index...

    Changelog

    All notable changes to this project will be documented in this file.

    • (release) GitHub release notes and changelog use the new version tag
    • [JEEVES-0] chore(deps): jeeves 0.7.0 and dependency updates

    • @karmaniverous/jeeves 0.6.0 -> 0.7.0 (exact) in core, service, openclaw

    • all other dependencies to latest within peer constraints; typescript held at ^6.0.3 (typescript-eslint 8.71.2 peers typescript <6.1.0); happy-dom 20 -> 21

    • plugin tests: fetchJson now passes its default timeout signal (jeeves#119)

    • [JEEVES-0] fix: no default launcher timeout, trigger status codes, release notes

    • core: a manifest without timeout_seconds means no timeout; remove DEFAULT_LAUNCHER_TIMEOUT_MS (#119)

    • service: typed scheduler errors; POST /jobs/:id/run returns 404/409/500; CLI trigger exits 1 on a non-OK response (#118)

    • openclaw: runner_trigger uses a 30-minute client timeout (jeeves 0.7.0 fetchJson defaults to 2 minutes; the route waits for the job)

    • release-it: releaseNotes use git-cliff --unreleased (karmaniverous/npm-package-template-ts#30)

    Closes #118 Closes #119

    • [JEEVES-0] fix: address PR #121 review

    • CLI trigger reads the body as text so a non-JSON error still reports the HTTP status (adds 502 test)

    • docs: no-timeout applies to script jobs; session jobs keep the 5-minute session default

    • Updated core

    • [116] feat: sync-jobs from jeeves-scripts list --json; shared manifest mapping in runner-core

    • core: pure manifestEntryToJob mapping, list --json schemas, launcher path normalisation (DD#61, DD#62, DD#70); scriptsDir config, jobsDir deprecated (DD#64)

    • core: update schema built from a defaults-free base so omitted fields stay unchanged on PATCH (#114, DD#75)

    • service: sync-jobs --scripts-dir/--dry-run/--reset-enabled/--prune; enabled set on insert only with drift report (#103, DD#65); manifest schedule applied and reverts reported (DD#66); prerequisite informational and printed on add (DD#76); orphans disabled only with --prune, never deleted (DD#69); fatal list failures write nothing (DD#63); single transaction

    Refs #116, #103, #114

    • [116] fix: compare path scripts after normalisation so equivalent launcher paths are not rewritten (DD#70)
    • [116] fix: pass the release tag to git-cliff so releases are not filed under [unreleased]

    Refs #115

    • [116] fix: record and alert scheduled runs skipped at maxConcurrency (no retry)

    A scheduled fire that hits maxConcurrency now writes a runs row (status skipped, error 'max_concurrency: n/max running (...)') and alerts the job's on_failure, falling back to notifications.defaultOnFailure. Retry is deferred (DD#73).

    Refs #113

    • [116] feat!: remove init-scripts command

    BREAKING CHANGE: jeeves-runner init-scripts is removed (no stub). New script projects use npx @karmaniverous/jeeves-scripts-core init.

    Refs #116

    • [116] docs: sync-jobs from jeeves-scripts, scriptsDir/jobsDir, maxConcurrency skips, launcher schedule-revert warnings

    Refs #116, #113

    • [116] feat: 10s default timeout for launcher jobs; review fixes

    • core: DEFAULT_LAUNCHER_TIMEOUT_MS (10s) for manifests without timeout_seconds, applied on insert only (DD#71)

    • docs: stop recommending a tsx runners entry; generic runners example; document the 10s default

    • tests: exact --dry-run report output; list --json timeout is fatal; default timeout on insert only

    Refs #116

    • [116] feat: defaultOnFailure/defaultOnSuccess as per-job fallbacks; SOLID/DRY pass

    • scheduler: one resolveChannels helper; job result alerts and #113 skip alerts fall back to notifications.defaultOnFailure/defaultOnSuccess (DD#77)

    • core: mapping reports the fields a manifest specifies (JobField, OPTIONAL_JOB_KEYS, specifiedJobFields) so every consumer gets omitted-means-unchanged

    • service: one toDesiredJob row builder for both sync sources; recordSkip and errorMessage helpers; runSyncCommand returns an exit code (testable)

    • tests: in-process sync-command suite incl. real-launcher end to end; deterministic #113 tests; channel fallback; legacy validation and I/O errors; transaction rollback; report labels; CLI flag wiring end to end (replaces --help string test)

    • docs: fallback semantics in README, configuration guide and skill

    Refs #116

    • [116] fix: address Copilot review on #117

    • sync: orphan detection uses every manifested id, so an entry skipped for an invalid schedule is never pruned

    • core: explicit timeout_seconds: null means no timeout; only an absent key gets the 10s default

    • legacy sync: unreadable jobs dir counts as a skip

    • scheduler: failure alerts (#113 skip and startup) catch and log notifier errors; alert helpers moved to scheduler/alerts.ts

    • tests: typed output mock; split oversized test files (sync-scripts, sync-orphans, run-scripts-list, sync-jobs.cli, job-routes.fields) with a shared scripts-sync harness; regression tests for each fix

    Refs #116, #113

    • [116] chore(release): name GitHub releases @

    Refs #116

    • Updated core
    • Release @karmaniverous/jeeves-runner v0.12.0
    • [104] chore: remove stan support
    • [104] updated jeeves
    • Updated core
    • Release @karmaniverous/jeeves-runner v0.11.0
    • [104] chore(deps): pin @karmaniverous/jeeves 0.6.0-9
    • [104] updated core
    • [104] chore: release @karmaniverous/jeeves-runner v0.11.0-2
    • [104] fix: tests and typecheck read source, not dist

    Service and openclaw vitest configs alias, and tsconfigs path-map, @karmaniverous/jeeves-runner-core to packages/core/src, so typecheck and tests pass on a clean checkout with no dist/. The rollup TS and dts plugins override paths so the build still types against built core and keeps it external. CLI tests run the CLI from source via tsx, and the service test script no longer builds first.

    Closes #112

    • [104] fix(release): update root package-lock in after:bump hook
    • [104] chore(deps): pin @karmaniverous/jeeves 0.6.0-8
    • [104] updated core
    • [104] chore: release @karmaniverous/jeeves-runner v0.11.0-1
    • [104] chore(deps): ncu -u --peer across all packages (reject @karmaniverous/jeeves)
    • [104] style: apply prettier 3.9 formatting to service sources
    • [104] chore(knip): remove unused zod dependency from packages/service
    • [104] chore(prettier): format docs/config files; ignore generated CHANGELOG.md
    • [104] feat: move core and service to @karmaniverous/jeeves 0.6.0-4; drop v0.x TOOLS.md descriptor fields
    • [104] chore(deps): pin @karmaniverous/jeeves 0.6.0-6
    • [104] fix(release): use --github.preRelease for release-it 21
    • [104] fix(service): write config apply to the --config file, not relative to cwd (#109)
    • [104] refactor(service): drop node:sqlite shim in favour of @types/node (#111)
    • [104] fix(deps): runner-core ^0.2.2-0 for single core copy; engines node >=22.13 (#108, #110)
    • [104] chore(deps): pin @karmaniverous/jeeves 0.6.0-7
    • [104] chore: release @karmaniverous/jeeves-runner v0.11.0-0
    • [93-95] fix: complete 0.10.1 spec gaps (#93, #95, #97)

    • Remove timeout from DispatchOptions, dispatchSession, runDispatcher (#93)

    • Add script-vs-session env/args scheduler test (#95)

    • Sync openclaw.plugin.json version to 0.8.0 (#97)

    • Add release-it after:bump hook to auto-sync manifest version

    • Fix stale JSDoc on ExecutionOptions.jobEnv

    • DRY: extract skip() helper in syncJobs

    • Add reconcile-loop prevention tests for never-firing schedules

    • Remove redundant weak migration version test

    • Sync docs: remove timeout from script-helpers.md, add runners/outputChannel

    • Sync docs: add Endpoint/HttpMethod to core README exports

    • Sync docs: fix runs/queues/queue_items table schemas in architecture.md

    • Sync docs: add queue/state endpoint sections to api-reference.md

    • Sync docs: update job response examples with env/args/output_channel fields

    • Updated core

    • Release @karmaniverous/jeeves-runner v0.10.1
    • [92-95] feat: flat RRStack defense, env precedence fix, 0.10.0 tests (#92, #95) (#99)

    Co-authored-by: jgs-jeeves jgs-jeeves@users.noreply.github.com (#99)

    • [91-96] fix: SOLID/DRY review -- contract types, error handling, test utils (#94, #92)
    • [91-96] test: replace trivial tests, add cron-registry + sync-jobs coverage
    • [91-96] docs: sync guides, README, and plugin manifest with 0.10.1 changes
    • [91-96] fix: prevent reconcile retry loop for never-firing schedules

    Store schedule string for failed registrations so reconcile only retries when the schedule actually changes. Clean up schedule strings for disabled/deleted never-firing jobs.

    Resolves copilot review comment on PR #100.

    • Updated core
    • Release @karmaniverous/jeeves-runner v0.10.0
    • [77][89] feat: adopt core schemas, add per-job env/args, migration 006, resolve DD#44/DD#45

    Service adoption of core endpoint catalog and canonical schemas:

    • schemas/job.ts, run.ts, queue.ts: re-export from @karmaniverous/jeeves-runner-core
    • job-routes.ts: import createJobSchema/updateJobSchema/updateScriptSchema from core
    • job-routes.ts: add output_channel, env, args to POST and PATCH (resolves DD#44)
    • Remove 'retry' from runTriggerSchema (DD#46)

    Per-job arguments (#89):

    • Migration 006: add env TEXT and args TEXT columns to jobs
    • executor.ts: add jobEnv/jobArgs to ExecutionOptions, thread into spawn
    • scheduler.ts: parse env/args JSON from job row, pass to executor (script jobs only)
    • sync-jobs.ts: add env/args to JobDefinition and UPSERT
    • cron-registry.ts: add env/args/output_channel to JobRow type

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • [77] feat: wire catalog derivation end-to-end

    Plugin:

    • Add @karmaniverous/jeeves-runner-core dependency
    • Add catalogTool() helper that derives method, description from RUNNER_ENDPOINTS
    • Refactor all 16 custom tools (runnerTools, inspectionTools, managementTools) to use catalogTool()
    • Fix test mock to include DEFAULT_BIND_ADDRESS for core import chain

    Service:

    • routes.ts: reference getEndpoint() for /status and /jobs paths

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • [77] [89] fix: guard JSON.parse for job env/args with try/catch

    Malformed JSON in the env or args DB columns would crash the scheduler. Wrap parsing in try/catch with a warn-level log. Job proceeds without the malformed env/args rather than failing to start.

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • [77][89] test: add coverage for jobEnv, jobArgs, output_channel; remove trivial test

    New tests:

    • executor: jobEnv vars arrive in child process env
    • executor: jobArgs appear in child process argv
    • job-routes: POST /jobs round-trips output_channel, env, args
    • job-routes: PATCH /jobs/:id updates output_channel, env, args

    Removed:

    • endpoints: 'should have valid HTTP methods' (redundant with TypeScript satisfies constraint)

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • Updated core
    • Release @karmaniverous/jeeves-runner v0.9.17
    • Updated deps
    • Release @karmaniverous/jeeves-runner v0.9.16
    • [87] feat: add jobsDir config field and sync-jobs command (#87)

    Add optional jobsDir field to runnerConfigSchema for specifying job definition file locations. Add sync-jobs CLI command that reads JSON files from the jobs directory and upserts job definitions into the SQLite database with schedule validation.

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • [87] fix: use UPSERT, guard inline scripts, validate field types (review feedback)
    • Updated core
    • Release @karmaniverous/jeeves-runner v0.9.15
    • Bump @karmaniverous/jeeves to ^0.5.11 across all packages
    • Updated core
    • Release @karmaniverous/jeeves-runner v0.9.14
    • [81] chore: update dependencies
    • Release @karmaniverous/jeeves-runner v0.9.13
    • [81] feat: config harmonization (gatewayUrl, gatewayApiKey, logging) #81

    Replace nested gateway.url/gateway.tokenPath with flat gatewayUrl/gatewayApiKey. Replace log.level/log.file with logging.level/logging.file. Add backward-compat preprocess transform for old config shape. gatewayApiKey is a direct string value (no more file indirection via tokenPath).

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • [81] fix: update stale error message and add combined migration test

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • Updated dependency
    • Release @karmaniverous/jeeves-runner v0.9.12
    • Pin jeeves-runner-core dependency to ^0.1.1
    • Release @karmaniverous/jeeves-runner v0.9.11
    • [ISSUES-50] fix: resolve dispatcher issues and update skill docs (#50, #64, #70, #78)

    • Use resolveCommand() in dispatchSession instead of hardcoded 'node' (#78)

    • Add runners option to DispatchOptions for custom command resolution

    • Fix session completion polling to use status from sessions_list (#70)

    • Fall back to history-based check when session not in sessions_list

    • Add outputChannel to job schema and DB migration (#64)

    • Change dispatchSession to capture stdout and return DispatchResult

    • Update SKILL.md with script authoring reference and job patterns (#50)

    • Add tests for resolveCommand in dispatchSession, status-based completion, outputChannel schema validation, and stdout capture

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • [ISSUES-50] fix: cache trimmed stdout, keep String() for lint compliance (review feedback)
    • Release @karmaniverous/jeeves-runner v0.9.10
    • Create @karmaniverous/jeeves-runner-core package (#73)
    • Resolve lint warnings in config schema files
    • Add npm publish safety net (.npmignore + gitignore *.local)
    • Move changelog generation to after:bump hook
    • Migrate changelog from auto-changelog to git-cliff (#75)
    • Bump @karmaniverous/jeeves to ^0.5.10
    • Apply minor/patch dependency updates via ncu
    • Standardize all packages to rollup with TS config
    • Release @karmaniverous/jeeves-runner v0.9.9
    • Updated jeeves-core
    • Release @karmaniverous/jeeves-runner v0.9.8
    • Updated jeeves core
    • Release @karmaniverous/jeeves-runner v0.9.7
    • Updated jeeves-core
    • Release @karmaniverous/jeeves-runner v0.9.6
    • Release @karmaniverous/jeeves-runner v0.9.5
    • Unhoisted jeeves
    • Release @karmaniverous/jeeves-runner v0.9.4
    • Hoisted jeeves
    • Removed knip from packages
    • Release @karmaniverous/jeeves-runner v0.9.3
    • Resolve runner version at runtime instead of build time
    • [65] fix: remove redundant replace plugin from runner rollup config
    • [67] fix: consume core importMetaUrl in plugin CLI, bump @karmaniverous/jeeves to ^0.5.4
    • Release @karmaniverous/jeeves-runner v0.9.2
    • Update dependencies, bump @karmaniverous/jeeves to ^0.5.3
    • Release @karmaniverous/jeeves-runner v0.9.1
    • Bump @karmaniverous/jeeves to ^0.5.1
    • Bump @karmaniverous/jeeves to ^0.5.1
    • Resolve all build/docs warnings
    • Remove hoisted script utilities from runner
    • Adopt core v0.5.1 APIs across runner and plugin
    • Extract shared scheduler test helpers and deduplicate constants
    • Adopt core v0.5.1 APIs across runner and plugin
    • Extract shared scheduler test helpers and deduplicate constants
    • Update skill, guides, and tests for v0.9.0 core adoption
    • Update skill, guides, and tests for v0.9.0 core adoption
    • Close coverage gaps for v0.9.0 core adoption
    • Close coverage gaps for v0.9.0 core adoption
    • Release @karmaniverous/jeeves-runner v0.9.0
    • [CORE-046] chore(core): integrate 0.4.6 init fix
    • Release @karmaniverous/jeeves-runner v0.8.3
    • (core) Integrate descriptor run callback
    • Release @karmaniverous/jeeves-runner v0.8.2
    • (service) Correct startCommand path doubling in descriptor
    • Release @karmaniverous/jeeves-runner v0.8.1
    • (service) Implement v0.8.0 Phase 1 foundation tasks\n\nP1.1: Config path migration - migrateConfig() function with auto-migration\n from legacy flat config to nested directory layout (#42)\nP1.2: Bind address - replace hardcoded 127.0.0.1 default with\n DEFAULT_BIND_ADDRESS from @karmaniverous/jeeves (#42)\nP1.3: Version reporting fix - inject version at build time via\n @rollup/plugin-replace instead of runtime package.json reads (#39, #26)\nP1.4: Session executor validation - added comprehensive tests verifying\n type='session' flows correctly through cron-registry -> scheduler ->\n session-executor for both manual triggers and scheduled fires (#43)\nP1.5: RRStack reconciliation fix - track next fire times in cron-registry\n and re-register jobs whose fire time is in the past during\n reconciliation, preventing stale timers after failed re-arms (#44)\nP1.6: Script utilities hoist - copied and genericized fs-utils, shell,\n run-script, runner-client, google-auth, spawn-worker, and\n slack-workspace from jeeves-runner-scripts into client/ (#49)\n\nAlso fixes pre-existing TSDoc lint warnings in executor.ts.
    • Implement v0.8.0 Phase 2 โ€” descriptor + independent plugin work
    • Implement v0.8.0 Phase 3 โ€” factory consumers
    • (service) Add init-scripts CLI command
    • (service) Resolve TSDoc warnings in google-auth
    • Require Node >=22 (node:sqlite), skip Node 20 in CI
    • (service) Remove redundant version prop from route/server deps
    • (service) DRY โ€” extract shared pino options builder and CLI withDb helper
    • Address Gemini PR review feedback
    • Full documentation audit for v0.8.0 Component SDK adoption
    • Add script helpers guide, update index.md patterns, README helpers table
    • Audit branch coverage โ€” remove trivial tests, add missing tests
    • Bump @karmaniverous/jeeves to ^0.4.3 in service and openclaw packages
    • Update all dependencies including @karmaniverous/jeeves ^0.4.4 (Zod v4)
    • Release @karmaniverous/jeeves-runner v0.8.0
    • (service) Add require condition to exports map for CJS compatibility
    • [47] feat(service): replace tsRunner with configurable runners map keyed by extension
    • Release @karmaniverous/jeeves-runner v0.7.4
    • [45] feat(service): add configurable tsRunner for TypeScript scripts
    • Skip .cmd and .ps1 executor tests on non-Windows platforms
    • Release @karmaniverous/jeeves-runner v0.7.3
    • Release @karmaniverous/jeeves-runner v0.7.2
    • Bump rrstack to 0.17.1 (fixes minutely nextEvent hang)
    • Release @karmaniverous/jeeves-runner v0.7.1
    • Update core dependency to v0.3.0 and migrate /health to /status (#36, #37)
    • Release @karmaniverous/jeeves-runner v0.7.0
    • (service) Phase 1 โ€” scheduling foundation with RRStack support
    • (service) Phase 2 โ€” job management endpoints and inline scripts
    • (service) Phase 3 โ€” queue and state inspection endpoints
    • (service) Add configurable bind address (#34)
    • (service) Add JSONPath support to GET /state/:namespace/:key
    • Change PUT /jobs/:id to PATCH (partial update semantics)
    • Remove deprecated POST enable/disable aliases
    • DRY toggle route and harden tool helper
    • DRY job-not-found constant, eliminate SELECT-before-UPDATE, add @module tags
    • Extract shared route test harness, fix corrupted emoji in slack notifier
    • Complete SOLID/DRY sweep โ€” field-map update builder, single-query queue status, shared test fixtures, fix unimplemented overlap policy, CLI rrstack validation
    • Add @module TSDoc tags to all source modules
    • Split large test files (routes, scheduler) to respect 300 LOC limit
    • Release @karmaniverous/jeeves-runner v0.6.0
    • Adopt @karmaniverous/jeeves ^0.2.0 core SDK (#33) (#33)
    • Release @karmaniverous/jeeves-runner v0.5.0
    • Release @karmaniverous/jeeves-runner v0.4.1
    • Add tagPrefix to auto-changelog config for monorepo tags
    • Sync documentation with v0.3.1 implementation
    • Remove stale plantuml from knip ignoreBinaries
    • Release @karmaniverous/jeeves-runner v0.4.0
    • Add PRAGMA busy_timeout=5000 to prevent SQLITE_BUSY errors
    • Release @karmaniverous/jeeves-runner v0.3.1
    • Restructure as npm workspaces monorepo
    • [breaking] Remove cursor backward-compat aliases, rename to state API
    • Change default port from 3100 to 1937
    • Add service install/uninstall CLI command (Linux/Windows/macOS)
    • Add validate, init, and config-show CLI commands
    • Update typedoc, knip, and stan configs for monorepo paths
    • Resolve all tsdoc and typedoc warnings
    • Resolve conflicts with main (keep next structure)
    • Code review cleanup โ€” trim trivial tests, merge notification helper, add maintenance coverage
    • Add service and plugin guides, architecture diagrams, fix typedoc config
    • Update dependencies (eslint-plugin-tsdoc, @types/node)
    • Release @karmaniverous/jeeves-runner v0.3.0