@jini-ai/daemon 0.2.1 → 0.3.0

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.
Files changed (77) hide show
  1. package/README.md +92 -0
  2. package/dist/agent-executor.d.ts +714 -42
  3. package/dist/agent-executor.d.ts.map +1 -1
  4. package/dist/agent-executor.js +1416 -351
  5. package/dist/agent-executor.js.map +1 -1
  6. package/dist/continuation/index.d.ts +1 -0
  7. package/dist/continuation/index.d.ts.map +1 -1
  8. package/dist/continuation/index.js +1 -0
  9. package/dist/continuation/index.js.map +1 -1
  10. package/dist/continuation/run-scoped-context-store.d.ts +79 -0
  11. package/dist/continuation/run-scoped-context-store.d.ts.map +1 -0
  12. package/dist/continuation/run-scoped-context-store.js +56 -0
  13. package/dist/continuation/run-scoped-context-store.js.map +1 -0
  14. package/dist/continuation/run-start-handler.d.ts +39 -9
  15. package/dist/continuation/run-start-handler.d.ts.map +1 -1
  16. package/dist/continuation/run-start-handler.js +12 -2
  17. package/dist/continuation/run-start-handler.js.map +1 -1
  18. package/dist/delegated-tool-bridge.d.ts +8 -0
  19. package/dist/delegated-tool-bridge.d.ts.map +1 -1
  20. package/dist/delegated-tool-bridge.js +117 -1
  21. package/dist/delegated-tool-bridge.js.map +1 -1
  22. package/dist/event-log.d.ts +18 -105
  23. package/dist/event-log.d.ts.map +1 -1
  24. package/dist/event-log.js +0 -17
  25. package/dist/event-log.js.map +1 -1
  26. package/dist/frontend-capability-tools.d.ts +1 -1
  27. package/dist/frontend-capability-tools.js +1 -1
  28. package/dist/frontend-session-registry.d.ts.map +1 -1
  29. package/dist/frontend-session-registry.js +26 -10
  30. package/dist/frontend-session-registry.js.map +1 -1
  31. package/dist/image-prompt-delivery.d.ts +56 -0
  32. package/dist/image-prompt-delivery.d.ts.map +1 -0
  33. package/dist/image-prompt-delivery.js +104 -0
  34. package/dist/image-prompt-delivery.js.map +1 -0
  35. package/dist/index.d.ts +2 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +2 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/remote-tool-bridge.d.ts +45 -0
  40. package/dist/remote-tool-bridge.d.ts.map +1 -0
  41. package/dist/remote-tool-bridge.js +23 -0
  42. package/dist/remote-tool-bridge.js.map +1 -0
  43. package/dist/routines/routine-store.js +1 -1
  44. package/dist/routines/schedule.d.ts +0 -8
  45. package/dist/routines/schedule.d.ts.map +1 -1
  46. package/dist/routines/schedule.js +71 -44
  47. package/dist/routines/schedule.js.map +1 -1
  48. package/dist/routines/scheduler.d.ts +43 -0
  49. package/dist/routines/scheduler.d.ts.map +1 -1
  50. package/dist/routines/scheduler.js +160 -120
  51. package/dist/routines/scheduler.js.map +1 -1
  52. package/dist/run/core/retry.d.ts.map +1 -1
  53. package/dist/run/core/retry.js +47 -35
  54. package/dist/run/core/retry.js.map +1 -1
  55. package/dist/run/diagnostics/diagnostics.d.ts.map +1 -1
  56. package/dist/run/diagnostics/diagnostics.js +149 -91
  57. package/dist/run/diagnostics/diagnostics.js.map +1 -1
  58. package/dist/run-lifecycle.d.ts +84 -4
  59. package/dist/run-lifecycle.d.ts.map +1 -1
  60. package/dist/run-lifecycle.js +378 -116
  61. package/dist/run-lifecycle.js.map +1 -1
  62. package/dist/terminal-session.d.ts +1 -1
  63. package/dist/terminal-session.d.ts.map +1 -1
  64. package/dist/terminal-session.js +1 -1
  65. package/dist/tool-executor.d.ts +26 -6
  66. package/dist/tool-executor.d.ts.map +1 -1
  67. package/dist/tool-executor.js +220 -55
  68. package/dist/tool-executor.js.map +1 -1
  69. package/dist/tool-result-media.d.ts +79 -0
  70. package/dist/tool-result-media.d.ts.map +1 -0
  71. package/dist/tool-result-media.js +80 -0
  72. package/dist/tool-result-media.js.map +1 -0
  73. package/dist/tool-result-surfaces.d.ts +78 -0
  74. package/dist/tool-result-surfaces.d.ts.map +1 -0
  75. package/dist/tool-result-surfaces.js +92 -0
  76. package/dist/tool-result-surfaces.js.map +1 -0
  77. package/package.json +18 -9
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @module image-prompt-delivery
3
+ *
4
+ * The `'prompt-path'` half of `RuntimeAgentDef.imageDelivery`
5
+ * (`@jini-ai/agent-runtime`'s `types.ts` — see that field's own doc for the
6
+ * full three-mode contract and why `'native'` defs must never also go
7
+ * through here). A def declares `imageDelivery: 'prompt-path'` when its CLI
8
+ * has no dedicated image-attachment mechanism but CAN read a local file once
9
+ * its path is named in the prompt text — confirmed for Claude Code by a live
10
+ * probe (see `defs/claude.ts`'s module doc): piping a prompt naming
11
+ * `/tmp/probe-image.png` into a real `claude -p` produced an accurate
12
+ * description of the image, but only once that path's directory was on the
13
+ * CLI's allowed-directory list.
14
+ *
15
+ * `applyImagePromptDelivery` is the ONE function `agent-executor.ts#run`
16
+ * calls, once, before `buildArgs`/`preparePromptFileForAgent`/
17
+ * `writePromptToStdin` ever see the prompt or `extraAllowedDirs` — see that
18
+ * module's own call site for why every downstream consumer of "the prompt"
19
+ * and "the allowed dirs" was switched to this function's output rather than
20
+ * the raw `input.prompt`/`input.extraAllowedDirs`. Adopting this mechanism
21
+ * for another def is exactly one line: add `imageDelivery: 'prompt-path'` to
22
+ * that def's literal. No other file needs to change.
23
+ *
24
+ * **Zero images is a strict no-op.** Every function below returns its inputs
25
+ * completely unchanged (not merely "equivalent" — literally the same
26
+ * `prompt` string and the same `extraAllowedDirs` reference/value) when
27
+ * `imagePaths` is empty, so a run with no attachments is byte-identical to
28
+ * this module never having been added. See
29
+ * `__tests__/image-prompt-delivery.test.ts`'s "byte-identical" case for the
30
+ * exact-equality regression proof.
31
+ */
32
+ import path from 'node:path';
33
+ /**
34
+ * Appends an attachments section to `prompt`, naming each image as a real
35
+ * file the user provided rather than dumping bare paths — legible to a
36
+ * model, which needs to understand these are attachments to read and act on,
37
+ * not incidental text. `imagePaths` must already be non-empty; callers (just
38
+ * `applyImagePromptDelivery` below) are expected to have filtered/checked
39
+ * that themselves so this function's own contract stays a straightforward
40
+ * "always augment" rather than duplicating the empty-check in two places.
41
+ *
42
+ * @param prompt - The user's original prompt text, unmodified up to this point.
43
+ * @param imagePaths - One or more absolute image file paths, already filtered non-empty.
44
+ * @returns `prompt` with an attachments section appended.
45
+ * @complexity O(n) in the number of images — one line rendered per path, no I/O.
46
+ * @overallScore 100
47
+ */
48
+ export function augmentPromptWithImageAttachments(prompt, imagePaths) {
49
+ const list = imagePaths.map((imagePath, index) => `${index + 1}. ${imagePath}`).join('\n');
50
+ const plural = imagePaths.length === 1;
51
+ return (`${prompt}\n\n---\n` +
52
+ `The user attached the following image ${plural ? 'file' : 'files'} to this message. ` +
53
+ `${plural ? 'It is a' : 'These are'} real file${plural ? '' : 's'} on disk — read ${plural ? 'it' : 'each one'} directly ` +
54
+ `(e.g. with your file-reading tool) before responding:\n${list}`);
55
+ }
56
+ /**
57
+ * Directories a 'prompt-path' def's CLI must be allowed to read from so it
58
+ * can actually open the files the augmented prompt just told it about — the
59
+ * second half of the live-probe finding in `defs/claude.ts`'s module doc
60
+ * (the CLI refused the same path until its directory was allow-listed).
61
+ * Deduplicated, and order-stable (`Set` preserves insertion order) so a
62
+ * snapshot/equality test against the merged list is deterministic.
63
+ *
64
+ * @param imagePaths - One or more absolute image file paths, already filtered non-empty.
65
+ * @returns Each path's containing directory (`node:path#dirname`), deduplicated.
66
+ * @complexity O(n) in the number of images.
67
+ * @overallScore 100
68
+ */
69
+ export function deriveImageAllowedDirs(imagePaths) {
70
+ return [...new Set(imagePaths.map((imagePath) => path.dirname(imagePath)))];
71
+ }
72
+ /**
73
+ * Applies `'prompt-path'` image delivery when — and only when — `def`
74
+ * declares it and `imagePaths` is non-empty. Every other combination
75
+ * (`'native'`, `'unsupported'`, `undefined` delivery, or zero images on any
76
+ * def) returns `{ prompt, extraAllowedDirs }` completely unchanged, which is
77
+ * what keeps 'native' defs (ACP, pi-rpc, qoder) provably unaffected — this
78
+ * function is the single place that decides whether augmentation happens at
79
+ * all, so a 'native' def's `imageDelivery` value alone is what protects it
80
+ * from double delivery, not a second check duplicated at each call site.
81
+ *
82
+ * @param imageDelivery - `def.imageDelivery` — the def's own declared mode; pass this field directly rather than the whole def so this module has no dependency on `RuntimeAgentDef` beyond the one field's type.
83
+ * @param prompt - The user's original prompt text.
84
+ * @param imagePaths - The run's raw image paths, exactly as the caller received them (may be undefined/empty/contain blanks — this function does the filtering).
85
+ * @param extraAllowedDirs - The run's caller-supplied allowed directories, exactly as received.
86
+ * @returns The prompt and allowed-dirs to actually use for this run's `buildArgs`/prompt-delivery calls.
87
+ * @complexity O(n) in the number of images; O(1) when delivery is not `'prompt-path'` or there are no images.
88
+ * @overallScore 100
89
+ */
90
+ export function applyImagePromptDelivery(imageDelivery, prompt, imagePaths, extraAllowedDirs) {
91
+ if (imageDelivery !== 'prompt-path')
92
+ return { prompt, extraAllowedDirs };
93
+ const paths = (imagePaths ?? []).filter((p) => typeof p === 'string' && p.length > 0);
94
+ if (paths.length === 0)
95
+ return { prompt, extraAllowedDirs };
96
+ const mergedDirs = new Set(extraAllowedDirs ?? []);
97
+ for (const dir of deriveImageAllowedDirs(paths))
98
+ mergedDirs.add(dir);
99
+ return {
100
+ prompt: augmentPromptWithImageAttachments(prompt, paths),
101
+ extraAllowedDirs: [...mergedDirs],
102
+ };
103
+ }
104
+ //# sourceMappingURL=image-prompt-delivery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-prompt-delivery.js","sourceRoot":"","sources":["../src/image-prompt-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iCAAiC,CAAC,MAAc,EAAE,UAA6B;IAC7F,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3F,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;IACvC,OAAO,CACL,GAAG,MAAM,WAAW;QACpB,yCAAyC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,oBAAoB;QACtF,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,aAAa,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,mBAAmB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,YAAY;QAC1H,0DAA0D,IAAI,EAAE,CACjE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAA6B;IAClE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAA+C,EAC/C,MAAc,EACd,UAAyC,EACzC,gBAA+C;IAE/C,IAAI,aAAa,KAAK,aAAa;QAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAEzE,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAE5D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI,sBAAsB,CAAC,KAAK,CAAC;QAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAErE,OAAO;QACL,MAAM,EAAE,iCAAiC,CAAC,MAAM,EAAE,KAAK,CAAC;QACxD,gBAAgB,EAAE,CAAC,GAAG,UAAU,CAAC;KAClC,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -17,7 +17,7 @@
17
17
  *
18
18
  * `terminal-session.ts` (2026-07-21) adds the interactive-terminal session manager: a
19
19
  * `node-pty`-backed `PtySpawn` wired into `@jini-ai/platform`'s generic `TerminalService`, plus
20
- * session-ownership gating and the kill/write/resize lock `@jini-ai/http`'s `terminals.ts` route
20
+ * session-ownership gating and the kill/write/resize lock `@jini-ai/http-kit`'s `terminals.ts` route
21
21
  * pack calls into. This is this workspace's first native-compiled-addon dependency — see this
22
22
  * package's `package.json` and `source-map.md`'s dated section.
23
23
  */
@@ -26,6 +26,7 @@ export * from './close-status.js';
26
26
  export * from './run-lifecycle.js';
27
27
  export * from './tool-executor.js';
28
28
  export * from './delegated-tool-bridge.js';
29
+ export * from './remote-tool-bridge.js';
29
30
  export * from './frontend-session-registry.js';
30
31
  export * from './frontend-capability-tools.js';
31
32
  export * from './agent-executor.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -17,7 +17,7 @@
17
17
  *
18
18
  * `terminal-session.ts` (2026-07-21) adds the interactive-terminal session manager: a
19
19
  * `node-pty`-backed `PtySpawn` wired into `@jini-ai/platform`'s generic `TerminalService`, plus
20
- * session-ownership gating and the kill/write/resize lock `@jini-ai/http`'s `terminals.ts` route
20
+ * session-ownership gating and the kill/write/resize lock `@jini-ai/http-kit`'s `terminals.ts` route
21
21
  * pack calls into. This is this workspace's first native-compiled-addon dependency — see this
22
22
  * package's `package.json` and `source-map.md`'s dated section.
23
23
  */
@@ -26,6 +26,7 @@ export * from './close-status.js';
26
26
  export * from './run-lifecycle.js';
27
27
  export * from './tool-executor.js';
28
28
  export * from './delegated-tool-bridge.js';
29
+ export * from './remote-tool-bridge.js';
29
30
  export * from './frontend-session-registry.js';
30
31
  export * from './frontend-capability-tools.js';
31
32
  export * from './agent-executor.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * `RemoteToolEventRecorder` — lets a tool call that executed in a DIFFERENT process from the one
3
+ * holding this run's `RunLifecycle` still record its `tool_use`/`tool_result` events into that
4
+ * run's own event log, so the run's SSE subscribers (a chat UI, a reattaching client) see it the
5
+ * same way they see a locally-executed delegated tool call.
6
+ *
7
+ * This exists because `DelegatedToolBridge.execute()` (this package's `delegated-tool-bridge.ts`)
8
+ * calls `lifecycle.emit()` directly, in-process — there was previously no way for a caller that
9
+ * executed a tool somewhere else to report the outcome back into this run's log. That absence is
10
+ * what forced `ToolExecutor`/`ToolRegistry`/`RunLifecycle` to all live in one process per run (see
11
+ * this repo's own `tovu-learnings.md` §1a). This module is the missing half: the same two event
12
+ * shapes `DelegatedToolBridge.execute()` already emits (`tool_use` then `tool_result`), exposed as
13
+ * a small, explicit recording API a *transport* (this package does not itself expose one — see
14
+ * `@jini-ai/http-kit`'s `remote-run-events.ts`) can wrap with authentication and call remotely.
15
+ *
16
+ * This does not change how tool execution is authorized. A caller of `recordToolUse`/
17
+ * `recordToolResult` has, by definition, already run the tool through its OWN `ToolExecutor` (with
18
+ * its own `ToolPolicy` gate) before calling this — this module only records that the run's chat UI
19
+ * should reflect. It is not a second execution path and does not itself run anything.
20
+ */
21
+ import type { RunProtocolEvent } from '@jini-ai/protocol';
22
+ import type { RunLifecycle } from './run-lifecycle.js';
23
+ export interface RemoteToolUseRecord {
24
+ /** Stable agent-side correlation id, matched by the following `recordToolResult` call. */
25
+ readonly toolUseId: string;
26
+ /** Jini registry id — never an agent-vendor-specific tool name. */
27
+ readonly toolId: string;
28
+ readonly input: unknown;
29
+ }
30
+ export interface RemoteToolResultRecord {
31
+ readonly toolUseId: string;
32
+ readonly content: string;
33
+ readonly isError?: boolean;
34
+ }
35
+ export interface RemoteToolEventRecorder {
36
+ /** Records that a tool call started. Throws (matching `RunLifecycle.emit`) if `runId` is unknown or already terminal. */
37
+ recordToolUse(runId: string, record: RemoteToolUseRecord): Promise<RunProtocolEvent>;
38
+ /** Records that a tool call finished (or failed) — mirrors `DelegatedToolBridge.execute()`'s own `tool_result` shape exactly. */
39
+ recordToolResult(runId: string, record: RemoteToolResultRecord): Promise<RunProtocolEvent>;
40
+ }
41
+ export interface CreateRemoteToolEventRecorderOptions {
42
+ readonly lifecycle: RunLifecycle;
43
+ }
44
+ export declare function createRemoteToolEventRecorder(options: CreateRemoteToolEventRecorderOptions): RemoteToolEventRecorder;
45
+ //# sourceMappingURL=remote-tool-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-tool-bridge.d.ts","sourceRoot":"","sources":["../src/remote-tool-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,0FAA0F;IAC1F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,yHAAyH;IACzH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrF,iIAAiI;IACjI,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC5F;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;CAClC;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,oCAAoC,GAAG,uBAAuB,CAsBpH"}
@@ -0,0 +1,23 @@
1
+ export function createRemoteToolEventRecorder(options) {
2
+ const { lifecycle } = options;
3
+ return {
4
+ recordToolUse(runId, record) {
5
+ return lifecycle.emit(runId, {
6
+ event: 'agent',
7
+ data: { type: 'tool_use', id: record.toolUseId, name: record.toolId, input: record.input },
8
+ });
9
+ },
10
+ recordToolResult(runId, record) {
11
+ return lifecycle.emit(runId, {
12
+ event: 'agent',
13
+ data: {
14
+ type: 'tool_result',
15
+ toolUseId: record.toolUseId,
16
+ content: record.content,
17
+ ...(record.isError ? { isError: true } : {}),
18
+ },
19
+ });
20
+ },
21
+ };
22
+ }
23
+ //# sourceMappingURL=remote-tool-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-tool-bridge.js","sourceRoot":"","sources":["../src/remote-tool-bridge.ts"],"names":[],"mappings":"AAgDA,MAAM,UAAU,6BAA6B,CAAC,OAA6C;IACzF,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAE9B,OAAO;QACL,aAAa,CAAC,KAAK,EAAE,MAAM;YACzB,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE;gBAC3B,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;aAC3F,CAAC,CAAC;QACL,CAAC;QACD,gBAAgB,CAAC,KAAK,EAAE,MAAM;YAC5B,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE;gBAC3B,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE;oBACJ,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7C;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `RoutineStore` — the CRUD + run-history persistence port for `@jini-ai/http`'s routine routes.
2
+ * `RoutineStore` — the CRUD + run-history persistence port for `@jini-ai/http-kit`'s routine routes.
3
3
  * Designed the same way `../event-log.js`'s `EventLog` is designed (that module's own doc
4
4
  * comment is the explicit template named by the porting proposal,
5
5
  * `ADS-memory/reports/proposals/PROP-http-route-packs-automation-routines-2026-07-21.md`): a
@@ -55,14 +55,6 @@ export declare function tzWallToUtcCandidates(timezone: string, year: number, mo
55
55
  */
56
56
  export declare function tzWallToUtcGapFallback(timezone: string, year: number, month: number, day: number, hour: number, minute: number): Date | null;
57
57
  export declare function nextHourlyRunAt(minute: number, now?: Date): Date;
58
- /**
59
- * Returns the next instant at which the wall-clock in `timezone` reads "HH:MM" on a day where
60
- * `predicate(weekday)` holds. Walks forward at most 14 calendar days as a safety bound (covers
61
- * any weekday-based pattern). Exported (unlike this module's other internal helpers) so its
62
- * 14-day-exhaustion fallback is directly unit-testable: every `predicate` `nextRunAtForSchedule`
63
- * actually passes (daily/weekdays/weekly) structurally guarantees a match within 7 days, making
64
- * that branch otherwise unreachable through the public schedule-kind API alone.
65
- */
66
58
  export declare function nextWallTimeMatching(timezone: string, time: string, predicate: (weekday: Weekday) => boolean, now: Date): Date | null;
67
59
  export declare function nextRunAtForSchedule(schedule: RoutineSchedule, now?: Date): Date | null;
68
60
  export declare function isValidWallTime(time: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/routines/schedule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIjF;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,IAAI,GACV;IACD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB,CAoCA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,IAAI,EAAE,CAoBR;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,IAAI,GAAG,IAAI,CAWb;AAwBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAa,GAAG,IAAI,CAQtE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,EACxC,GAAG,EAAE,IAAI,GACR,IAAI,GAAG,IAAI,CAuCb;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAa,GAAG,IAAI,GAAG,IAAI,CAe7F;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMrD;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAQnD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CA2BhE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAYjE"}
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/routines/schedule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIjF;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,IAAI,GACV;IACD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB,CAoCA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,IAAI,EAAE,CAoBR;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,IAAI,GAAG,IAAI,CAWb;AAwBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAa,GAAG,IAAI,CAQtE;AA6DD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,EACxC,GAAG,EAAE,IAAI,GACR,IAAI,GAAG,IAAI,CAuBb;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAa,GAAG,IAAI,GAAG,IAAI,CAe7F;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMrD;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAQnD;AA6BD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAahE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAYjE"}
@@ -136,7 +136,8 @@ export function nextHourlyRunAt(minute, now = new Date()) {
136
136
  * actually passes (daily/weekdays/weekly) structurally guarantees a match within 7 days, making
137
137
  * that branch otherwise unreachable through the public schedule-kind API alone.
138
138
  */
139
- export function nextWallTimeMatching(timezone, time, predicate, now) {
139
+ /** Parses a strict "HH:MM" 24-hour wall time, returning `null` for any malformed or out-of-range value. */
140
+ function parseWallTime(time) {
140
141
  const m = /^(\d{2}):(\d{2})$/.exec(time);
141
142
  if (!m)
142
143
  return null;
@@ -146,39 +147,58 @@ export function nextWallTimeMatching(timezone, time, predicate, now) {
146
147
  return null;
147
148
  if (!Number.isFinite(minute) || minute < 0 || minute > 59)
148
149
  return null;
150
+ return { hour, minute };
151
+ }
152
+ /**
153
+ * Resolves the requested wall time on one specific calendar day in `timezone` to the instant a
154
+ * routine should fire, given that everything at or before `now` has already passed.
155
+ *
156
+ * `abandon` covers the case where the requested wall time cannot be represented as a `Date` at all
157
+ * — see {@link nextWallTimeMatching} for when that actually happens.
158
+ */
159
+ function resolveDayFireInstant(timezone, date, hour, minute, now) {
160
+ const candidates = tzWallToUtcCandidates(timezone, date.year, date.month, date.day, hour, minute);
161
+ if (candidates.length === 0) {
162
+ // Spring-forward gap: no valid wall instant exists today; pick the synthesized post-gap
163
+ // fallback so the routine still fires today.
164
+ const fallback = tzWallToUtcGapFallback(timezone, date.year, date.month, date.day, hour, minute);
165
+ if (!fallback)
166
+ return { kind: 'abandon' };
167
+ return fallback.getTime() > now.getTime() ? { kind: 'fire', at: fallback } : { kind: 'next-day' };
168
+ }
169
+ // Iterate candidates in ascending order so that on a fall-back overlap day, when `now`
170
+ // already passed the first occurrence (EDT), we still pick the second one (EST) before
171
+ // walking to the next day.
172
+ for (const candidate of candidates) {
173
+ if (candidate.getTime() > now.getTime())
174
+ return { kind: 'fire', at: candidate };
175
+ }
176
+ return { kind: 'next-day' };
177
+ }
178
+ export function nextWallTimeMatching(timezone, time, predicate, now) {
179
+ const wall = parseWallTime(time);
180
+ if (!wall)
181
+ return null;
149
182
  // Walk day by day in the target timezone.
150
183
  for (let offset = 0; offset < 14; offset += 1) {
151
184
  const probe = new Date(now.getTime() + offset * 24 * 60 * 60_000);
152
185
  const parts = partsInTimezone(timezone, probe);
153
186
  if (!predicate(parts.weekday))
154
187
  continue;
155
- const candidates = tzWallToUtcCandidates(timezone, parts.year, parts.month, parts.day, hour, minute);
156
- if (candidates.length === 0) {
157
- // Spring-forward gap: no valid wall instant exists today; pick the synthesized post-gap
158
- // fallback so the routine still fires today.
159
- const fallback = tzWallToUtcGapFallback(timezone, parts.year, parts.month, parts.day, hour, minute);
160
- // Null-safety guard against tzWallToUtcGapFallback's `Date | null` return type (it returns
161
- // null only for an invalid timezone). Structurally unreachable from THIS call site: the
162
- // unguarded `partsInTimezone(timezone, probe)` two lines above already succeeded for this
163
- // exact `timezone` earlier in this same loop iteration, which proves it valid before
164
- // `tzWallToUtcGapFallback` (guarding the identical Intl call) is ever reached — so this
165
- // branch cannot be exercised without bypassing that invariant. Kept rather than removed:
166
- // the guard is still correct defensive programming against the function's real signature,
167
- // and `tzWallToUtcGapFallback`'s own null path is independently covered by a direct test
168
- // (see schedule.test.ts) against an invalid timezone.
169
- if (!fallback)
170
- return null;
171
- if (fallback.getTime() > now.getTime())
172
- return fallback;
173
- continue;
174
- }
175
- // Iterate candidates in ascending order so that on a fall-back overlap day, when `now`
176
- // already passed the first occurrence (EDT), we still pick the second one (EST) before
177
- // walking to the next day.
178
- for (const candidate of candidates) {
179
- if (candidate.getTime() > now.getTime())
180
- return candidate;
181
- }
188
+ const resolution = resolveDayFireInstant(timezone, parts, wall.hour, wall.minute, now);
189
+ if (resolution.kind === 'fire')
190
+ return resolution.at;
191
+ // `abandon` means `tzWallToUtcGapFallback` returned null. Its own `catch` fires whenever the
192
+ // Intl call inside it throws — which an invalid timezone causes, but so does an
193
+ // unrepresentable instant. The latter is reachable from right here despite `timezone` being
194
+ // proven valid by the `partsInTimezone` call above: when `now` sits within a day of the
195
+ // maximum representable `Date` (+275760-09-13), `Date.UTC(...)` for a later wall time that
196
+ // same day overflows to `NaN`, `new Date(NaN)` makes `formatToParts` throw `RangeError`, and
197
+ // both `tzWallToUtcCandidates` (hence the empty candidate list) and `tzWallToUtcGapFallback`
198
+ // swallow it. No later day can succeed either, so give up rather than spin the remaining
199
+ // iterations. Covered by a direct test in schedule.test.ts.
200
+ if (resolution.kind === 'abandon')
201
+ return null;
182
202
  }
183
203
  return null;
184
204
  }
@@ -218,30 +238,37 @@ export function isValidTimezone(tz) {
218
238
  return false;
219
239
  }
220
240
  }
241
+ function validateHourlyMinute(minute) {
242
+ if (!Number.isInteger(minute) || minute < 0 || minute > 59) {
243
+ throw new Error('hourly.minute must be an integer 0-59');
244
+ }
245
+ }
246
+ function validateWeekday(weekday) {
247
+ if (!Number.isInteger(weekday) || weekday < 0 || weekday > 6) {
248
+ throw new Error('weekly.weekday must be 0-6');
249
+ }
250
+ }
251
+ function validateWallClockSchedule(schedule) {
252
+ if (!isValidWallTime(schedule.time)) {
253
+ throw new Error(`Invalid time: ${schedule.time}`);
254
+ }
255
+ if (!isValidTimezone(schedule.timezone)) {
256
+ throw new Error(`Invalid timezone: ${schedule.timezone}`);
257
+ }
258
+ if (schedule.kind === 'weekly') {
259
+ validateWeekday(schedule.weekday);
260
+ }
261
+ }
221
262
  export function validateSchedule(schedule) {
222
263
  if (!schedule || typeof schedule !== 'object') {
223
264
  throw new Error('schedule is required');
224
265
  }
225
266
  if (schedule.kind === 'hourly') {
226
- const m = schedule.minute;
227
- if (!Number.isInteger(m) || m < 0 || m > 59) {
228
- throw new Error('hourly.minute must be an integer 0-59');
229
- }
267
+ validateHourlyMinute(schedule.minute);
230
268
  return;
231
269
  }
232
270
  if (schedule.kind === 'daily' || schedule.kind === 'weekdays' || schedule.kind === 'weekly') {
233
- if (!isValidWallTime(schedule.time)) {
234
- throw new Error(`Invalid time: ${schedule.time}`);
235
- }
236
- if (!isValidTimezone(schedule.timezone)) {
237
- throw new Error(`Invalid timezone: ${schedule.timezone}`);
238
- }
239
- if (schedule.kind === 'weekly') {
240
- const w = schedule.weekday;
241
- if (!Number.isInteger(w) || w < 0 || w > 6) {
242
- throw new Error('weekly.weekday must be 0-6');
243
- }
244
- }
271
+ validateWallClockSchedule(schedule);
245
272
  return;
246
273
  }
247
274
  throw new Error(`Unsupported schedule kind: ${schedule.kind}`);
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/routines/schedule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/routines/schedule.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,49 @@ export declare class RoutineService {
29
29
  private scheduleRoutineAt;
30
30
  nextRunAt(routineId: string): Date | null;
31
31
  runNow(routineId: string): Promise<RoutineRunHandlerStart>;
32
+ /**
33
+ * Wraps a persistence failure as a {@link ScheduledRunPersistenceError} when this attempt was a
34
+ * scheduled fire, so the caller retries the same slot instead of advancing the cadence. Manual
35
+ * fires have no slot to retry and surface the original error unchanged.
36
+ */
37
+ private asPersistenceFailure;
38
+ /**
39
+ * Tear-down for when the durable routine_run row was never inserted (insertRun threw, or another
40
+ * daemon already won the slot). Prefers the explicit `discardUnstarted` callback when the handler
41
+ * distinguishes the two cases — that one drops the in-memory chat run entirely instead of
42
+ * finalizing it as `canceled`, so duplicate scheduled losers do not surface phantom runs on a run
43
+ * listing. Handlers that do not implement the split still see `discard`.
44
+ */
45
+ private discardUnstartedRun;
46
+ /**
47
+ * Claims the durable routine_run row for this attempt. Returns `false` when a sibling daemon
48
+ * already won the slot (the in-memory run has been discarded and the caller should just hand the
49
+ * handler's start handle back); throws when the write itself failed.
50
+ */
51
+ private claimRunRow;
52
+ /**
53
+ * Copies the real project/conversation/run IDs `prepare()` resolved back onto the start handle and
54
+ * persists them. Scheduled fires always write (the row was inserted with routine placeholders);
55
+ * manual fires write only when `prepare()` actually changed something.
56
+ */
57
+ private persistPreparedIds;
58
+ /**
59
+ * Finalizes a run whose `prepare()` step failed. Terminates the in-memory chat run created by
60
+ * `handler(...)` so its `completion` promise resolves instead of waiting forever on a run that
61
+ * will never start, surfacing (but not rethrowing) any cleanup failure, then persists the
62
+ * terminal row.
63
+ *
64
+ * The placeholder IDs are cleared first: they are only replaced with real resources by
65
+ * `prepare()`, so a failure before that enrichment would otherwise leave the terminal row
66
+ * pointing at fabricated project/conversation IDs. For scheduled runs the slot claim was already
67
+ * accepted at `insertRun()`, so retrying the same slot is not appropriate — the caller lets the
68
+ * error propagate so the scheduler advances to the next cadence.
69
+ */
70
+ private finalizeUnpreparedRun;
71
+ /** Persists the terminal row once the host's run completes (or its completion promise rejects). */
72
+ private wireRunCompletion;
73
+ /** Hands control to the host's `start()`, finalizing the row as failed if it throws synchronously. */
74
+ private startPreparedRun;
32
75
  private start_;
33
76
  }
34
77
  //# sourceMappingURL=scheduler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/routines/scheduler.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAEV,kBAAkB,EAElB,iBAAiB,EACjB,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AAYpB;;;;;GAKG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;IAEnD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,aAAa,EAAE,OAAO;gBAFtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,OAAO;CAKlC;AAMD,qBAAa,cAAc;IAMb,OAAO,CAAC,QAAQ,CAAC,WAAW;IALxC,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,QAAQ,CAAsD;IACtE,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,OAAO,CAAS;gBAEK,WAAW,EAAE,kBAAkB;IAE5D,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAI/C,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAMZ,aAAa,IAAI,IAAI;IASrB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAWtC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQnC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,iBAAiB;IAmCzB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAInC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;YAIlD,MAAM;CA4KrB"}
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/routines/scheduler.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAEV,kBAAkB,EAElB,iBAAiB,EACjB,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AAYpB;;;;;GAKG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;IAEnD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,aAAa,EAAE,OAAO;gBAFtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,OAAO;CAKlC;AAwBD,qBAAa,cAAc;IAMb,OAAO,CAAC,QAAQ,CAAC,WAAW;IALxC,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,QAAQ,CAAsD;IACtE,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,OAAO,CAAS;gBAEK,WAAW,EAAE,kBAAkB;IAE5D,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAI/C,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAMZ,aAAa,IAAI,IAAI;IASrB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAWtC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQnC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,iBAAiB;IAmCzB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAInC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIhE;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAanB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,qBAAqB;IA6B7B,mGAAmG;IACnG,OAAO,CAAC,iBAAiB;IAsBzB,sGAAsG;IACtG,OAAO,CAAC,gBAAgB;YAeV,MAAM;CAkErB"}