@aitne/daemon 0.1.2 → 0.1.4
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/LICENSE +21 -0
- package/dist/adapters/whatsapp-adapter.d.ts.map +1 -1
- package/dist/adapters/whatsapp-adapter.js +0 -1
- package/dist/adapters/whatsapp-adapter.js.map +1 -1
- package/dist/api/integration-route-gate.d.ts +15 -11
- package/dist/api/integration-route-gate.d.ts.map +1 -1
- package/dist/api/integration-route-gate.js +60 -23
- package/dist/api/integration-route-gate.js.map +1 -1
- package/dist/api/json-body.d.ts +22 -7
- package/dist/api/json-body.d.ts.map +1 -1
- package/dist/api/json-body.js +27 -8
- package/dist/api/json-body.js.map +1 -1
- package/dist/api/routes/agent.d.ts.map +1 -1
- package/dist/api/routes/agent.js +18 -0
- package/dist/api/routes/agent.js.map +1 -1
- package/dist/api/routes/backends.d.ts.map +1 -1
- package/dist/api/routes/backends.js +96 -1
- package/dist/api/routes/backends.js.map +1 -1
- package/dist/api/routes/books.js +1 -1
- package/dist/api/routes/books.js.map +1 -1
- package/dist/api/routes/context.d.ts.map +1 -1
- package/dist/api/routes/context.js +13 -1
- package/dist/api/routes/context.js.map +1 -1
- package/dist/api/routes/dashboard.d.ts.map +1 -1
- package/dist/api/routes/dashboard.js +75 -5
- package/dist/api/routes/dashboard.js.map +1 -1
- package/dist/api/routes/github.d.ts.map +1 -1
- package/dist/api/routes/github.js +38 -5
- package/dist/api/routes/github.js.map +1 -1
- package/dist/api/routes/integrations.d.ts +35 -6
- package/dist/api/routes/integrations.d.ts.map +1 -1
- package/dist/api/routes/integrations.js +191 -16
- package/dist/api/routes/integrations.js.map +1 -1
- package/dist/api/routes/mail.d.ts.map +1 -1
- package/dist/api/routes/mail.js +112 -46
- package/dist/api/routes/mail.js.map +1 -1
- package/dist/api/routes/observations.d.ts.map +1 -1
- package/dist/api/routes/observations.js +161 -8
- package/dist/api/routes/observations.js.map +1 -1
- package/dist/api/routes/setup-migrate.d.ts +9 -1
- package/dist/api/routes/setup-migrate.d.ts.map +1 -1
- package/dist/api/routes/setup-migrate.js +4 -2
- package/dist/api/routes/setup-migrate.js.map +1 -1
- package/dist/api/routes/skills.d.ts.map +1 -1
- package/dist/api/routes/skills.js +39 -1
- package/dist/api/routes/skills.js.map +1 -1
- package/dist/api/routes/voice.d.ts.map +1 -1
- package/dist/api/routes/voice.js +154 -14
- package/dist/api/routes/voice.js.map +1 -1
- package/dist/bootstrap/adapters.d.ts +109 -0
- package/dist/bootstrap/adapters.d.ts.map +1 -0
- package/dist/bootstrap/adapters.js +237 -0
- package/dist/bootstrap/adapters.js.map +1 -0
- package/dist/bootstrap/catchup.d.ts +23 -0
- package/dist/bootstrap/catchup.d.ts.map +1 -0
- package/dist/bootstrap/catchup.js +124 -0
- package/dist/bootstrap/catchup.js.map +1 -0
- package/dist/bootstrap/schedule-helpers.d.ts +18 -0
- package/dist/bootstrap/schedule-helpers.d.ts.map +1 -0
- package/dist/bootstrap/schedule-helpers.js +96 -0
- package/dist/bootstrap/schedule-helpers.js.map +1 -0
- package/dist/bootstrap/services.d.ts +60 -0
- package/dist/bootstrap/services.d.ts.map +1 -0
- package/dist/bootstrap/services.js +209 -0
- package/dist/bootstrap/services.js.map +1 -0
- package/dist/core/backends/backend-router.d.ts +23 -0
- package/dist/core/backends/backend-router.d.ts.map +1 -1
- package/dist/core/backends/backend-router.js +48 -3
- package/dist/core/backends/backend-router.js.map +1 -1
- package/dist/core/backends/claude-auth.d.ts +70 -0
- package/dist/core/backends/claude-auth.d.ts.map +1 -0
- package/dist/core/backends/claude-auth.js +198 -0
- package/dist/core/backends/claude-auth.js.map +1 -0
- package/dist/core/backends/claude-code-core.d.ts +47 -119
- package/dist/core/backends/claude-code-core.d.ts.map +1 -1
- package/dist/core/backends/claude-code-core.js +112 -1565
- package/dist/core/backends/claude-code-core.js.map +1 -1
- package/dist/core/backends/claude-delegated.d.ts +86 -0
- package/dist/core/backends/claude-delegated.d.ts.map +1 -0
- package/dist/core/backends/claude-delegated.js +801 -0
- package/dist/core/backends/claude-delegated.js.map +1 -0
- package/dist/core/backends/claude-errors.d.ts +39 -0
- package/dist/core/backends/claude-errors.d.ts.map +1 -0
- package/dist/core/backends/claude-errors.js +71 -0
- package/dist/core/backends/claude-errors.js.map +1 -0
- package/dist/core/backends/claude-probe.d.ts +103 -0
- package/dist/core/backends/claude-probe.d.ts.map +1 -0
- package/dist/core/backends/claude-probe.js +336 -0
- package/dist/core/backends/claude-probe.js.map +1 -0
- package/dist/core/backends/claude-tool-collection.d.ts +135 -0
- package/dist/core/backends/claude-tool-collection.d.ts.map +1 -0
- package/dist/core/backends/claude-tool-collection.js +831 -0
- package/dist/core/backends/claude-tool-collection.js.map +1 -0
- package/dist/core/backends/gemini-cli-core.d.ts +21 -0
- package/dist/core/backends/gemini-cli-core.d.ts.map +1 -1
- package/dist/core/backends/gemini-cli-core.js +84 -6
- package/dist/core/backends/gemini-cli-core.js.map +1 -1
- package/dist/core/backends/prompt-utils.d.ts +1 -0
- package/dist/core/backends/prompt-utils.d.ts.map +1 -1
- package/dist/core/backends/prompt-utils.js +60 -3
- package/dist/core/backends/prompt-utils.js.map +1 -1
- package/dist/core/context-builder.d.ts +36 -12
- package/dist/core/context-builder.d.ts.map +1 -1
- package/dist/core/context-builder.js +179 -89
- package/dist/core/context-builder.js.map +1 -1
- package/dist/core/dispatcher-date-utils.d.ts +49 -0
- package/dist/core/dispatcher-date-utils.d.ts.map +1 -0
- package/dist/core/dispatcher-date-utils.js +132 -0
- package/dist/core/dispatcher-date-utils.js.map +1 -0
- package/dist/core/dispatcher-error-handling.d.ts +159 -0
- package/dist/core/dispatcher-error-handling.d.ts.map +1 -0
- package/dist/core/dispatcher-error-handling.js +393 -0
- package/dist/core/dispatcher-error-handling.js.map +1 -0
- package/dist/core/dispatcher-hourly-check.d.ts +150 -0
- package/dist/core/dispatcher-hourly-check.d.ts.map +1 -0
- package/dist/core/dispatcher-hourly-check.js +665 -0
- package/dist/core/dispatcher-hourly-check.js.map +1 -0
- package/dist/core/dispatcher-message-handler.d.ts +170 -0
- package/dist/core/dispatcher-message-handler.d.ts.map +1 -0
- package/dist/core/dispatcher-message-handler.js +1054 -0
- package/dist/core/dispatcher-message-handler.js.map +1 -0
- package/dist/core/dispatcher-morning-routine.d.ts +169 -0
- package/dist/core/dispatcher-morning-routine.d.ts.map +1 -0
- package/dist/core/dispatcher-morning-routine.js +434 -0
- package/dist/core/dispatcher-morning-routine.js.map +1 -0
- package/dist/core/dispatcher-prompt.d.ts +107 -0
- package/dist/core/dispatcher-prompt.d.ts.map +1 -0
- package/dist/core/dispatcher-prompt.js +227 -0
- package/dist/core/dispatcher-prompt.js.map +1 -0
- package/dist/core/dispatcher-repository-helpers.d.ts +39 -0
- package/dist/core/dispatcher-repository-helpers.d.ts.map +1 -0
- package/dist/core/dispatcher-repository-helpers.js +86 -0
- package/dist/core/dispatcher-repository-helpers.js.map +1 -0
- package/dist/core/dispatcher-result-processor.d.ts +145 -0
- package/dist/core/dispatcher-result-processor.d.ts.map +1 -0
- package/dist/core/dispatcher-result-processor.js +414 -0
- package/dist/core/dispatcher-result-processor.js.map +1 -0
- package/dist/core/dispatcher-scheduled-tasks.d.ts +406 -0
- package/dist/core/dispatcher-scheduled-tasks.d.ts.map +1 -0
- package/dist/core/dispatcher-scheduled-tasks.js +998 -0
- package/dist/core/dispatcher-scheduled-tasks.js.map +1 -0
- package/dist/core/dispatcher-types.d.ts +296 -0
- package/dist/core/dispatcher-types.d.ts.map +1 -0
- package/dist/core/dispatcher-types.js +106 -0
- package/dist/core/dispatcher-types.js.map +1 -0
- package/dist/core/dispatcher.d.ts +86 -610
- package/dist/core/dispatcher.d.ts.map +1 -1
- package/dist/core/dispatcher.js +293 -3542
- package/dist/core/dispatcher.js.map +1 -1
- package/dist/core/integration-health.d.ts +18 -10
- package/dist/core/integration-health.d.ts.map +1 -1
- package/dist/core/integration-health.js +31 -1
- package/dist/core/integration-health.js.map +1 -1
- package/dist/core/integration-lifecycle.d.ts +65 -0
- package/dist/core/integration-lifecycle.d.ts.map +1 -1
- package/dist/core/integration-lifecycle.js +167 -16
- package/dist/core/integration-lifecycle.js.map +1 -1
- package/dist/core/integration-main-backend.d.ts +40 -0
- package/dist/core/integration-main-backend.d.ts.map +1 -1
- package/dist/core/integration-main-backend.js +89 -2
- package/dist/core/integration-main-backend.js.map +1 -1
- package/dist/core/management-md.d.ts +51 -17
- package/dist/core/management-md.d.ts.map +1 -1
- package/dist/core/management-md.js +233 -56
- package/dist/core/management-md.js.map +1 -1
- package/dist/core/output-language-policy.d.ts +74 -0
- package/dist/core/output-language-policy.d.ts.map +1 -0
- package/dist/core/output-language-policy.js +194 -0
- package/dist/core/output-language-policy.js.map +1 -0
- package/dist/core/prompts.d.ts +1 -0
- package/dist/core/prompts.d.ts.map +1 -1
- package/dist/core/prompts.js +121 -3
- package/dist/core/prompts.js.map +1 -1
- package/dist/core/repository-management-docs.d.ts +24 -0
- package/dist/core/repository-management-docs.d.ts.map +1 -1
- package/dist/core/repository-management-docs.js +210 -26
- package/dist/core/repository-management-docs.js.map +1 -1
- package/dist/core/routine-acquisition-plan.d.ts +131 -0
- package/dist/core/routine-acquisition-plan.d.ts.map +1 -0
- package/dist/core/routine-acquisition-plan.js +268 -0
- package/dist/core/routine-acquisition-plan.js.map +1 -0
- package/dist/core/routine-fetch-window-runner.d.ts +201 -0
- package/dist/core/routine-fetch-window-runner.d.ts.map +1 -0
- package/dist/core/routine-fetch-window-runner.js +661 -0
- package/dist/core/routine-fetch-window-runner.js.map +1 -0
- package/dist/core/routine-windows.d.ts +156 -0
- package/dist/core/routine-windows.d.ts.map +1 -0
- package/dist/core/routine-windows.js +330 -0
- package/dist/core/routine-windows.js.map +1 -0
- package/dist/core/skills-compiler.d.ts +11 -0
- package/dist/core/skills-compiler.d.ts.map +1 -1
- package/dist/core/skills-compiler.js +102 -13
- package/dist/core/skills-compiler.js.map +1 -1
- package/dist/core/skills-manifest.d.ts.map +1 -1
- package/dist/core/skills-manifest.js +26 -0
- package/dist/core/skills-manifest.js.map +1 -1
- package/dist/core/system-reset.d.ts.map +1 -1
- package/dist/core/system-reset.js +25 -2
- package/dist/core/system-reset.js.map +1 -1
- package/dist/db/observations.d.ts +45 -2
- package/dist/db/observations.d.ts.map +1 -1
- package/dist/db/observations.js +112 -14
- package/dist/db/observations.js.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +13 -25
- package/dist/db/schema.js.map +1 -1
- package/dist/index.js +83 -610
- package/dist/index.js.map +1 -1
- package/dist/observers/delegated-sync-worker.d.ts +45 -2
- package/dist/observers/delegated-sync-worker.d.ts.map +1 -1
- package/dist/observers/delegated-sync-worker.js +71 -21
- package/dist/observers/delegated-sync-worker.js.map +1 -1
- package/dist/observers/mail-poller.d.ts +12 -5
- package/dist/observers/mail-poller.d.ts.map +1 -1
- package/dist/observers/mail-poller.js +36 -14
- package/dist/observers/mail-poller.js.map +1 -1
- package/dist/observers/manager.d.ts +37 -5
- package/dist/observers/manager.d.ts.map +1 -1
- package/dist/observers/manager.js +28 -10
- package/dist/observers/manager.js.map +1 -1
- package/dist/safety/risk-classifier.d.ts.map +1 -1
- package/dist/safety/risk-classifier.js +5 -0
- package/dist/safety/risk-classifier.js.map +1 -1
- package/dist/services/delegated-backend-invoker.d.ts +1 -51
- package/dist/services/delegated-backend-invoker.d.ts.map +1 -1
- package/dist/services/delegated-backend-invoker.js +41 -480
- package/dist/services/delegated-backend-invoker.js.map +1 -1
- package/dist/services/delegated-invoker-audit.d.ts +94 -0
- package/dist/services/delegated-invoker-audit.d.ts.map +1 -0
- package/dist/services/delegated-invoker-audit.js +238 -0
- package/dist/services/delegated-invoker-audit.js.map +1 -0
- package/dist/services/delegated-invoker-cache-hits.d.ts +34 -0
- package/dist/services/delegated-invoker-cache-hits.d.ts.map +1 -0
- package/dist/services/delegated-invoker-cache-hits.js +104 -0
- package/dist/services/delegated-invoker-cache-hits.js.map +1 -0
- package/dist/services/delegated-invoker-janitors.d.ts +28 -0
- package/dist/services/delegated-invoker-janitors.d.ts.map +1 -0
- package/dist/services/delegated-invoker-janitors.js +104 -0
- package/dist/services/delegated-invoker-janitors.js.map +1 -0
- package/dist/services/delegated-invoker-utils.d.ts +42 -0
- package/dist/services/delegated-invoker-utils.d.ts.map +1 -0
- package/dist/services/delegated-invoker-utils.js +100 -0
- package/dist/services/delegated-invoker-utils.js.map +1 -0
- package/dist/services/delegated-task-runtime.d.ts +1 -1
- package/dist/services/delegated-task-runtime.js +1 -1
- package/dist/services/integrations/snapshot-partitions.d.ts +5 -0
- package/dist/services/integrations/snapshot-partitions.d.ts.map +1 -1
- package/dist/services/integrations/snapshot-partitions.js +12 -0
- package/dist/services/integrations/snapshot-partitions.js.map +1 -1
- package/dist/services/voice/transcriber-impl.d.ts.map +1 -1
- package/dist/services/voice/transcriber-impl.js +46 -0
- package/dist/services/voice/transcriber-impl.js.map +1 -1
- package/package.json +12 -12
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure timezone-aware date helpers used by the dispatcher's quota-reset
|
|
3
|
+
* logic (`resolveQuotaResetAtMs`) — no instance state, no I/O.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `core/dispatcher.ts` as part of phase D-2 of
|
|
6
|
+
* `docs/design/appendices/file-split-plan.md` (pattern A — pure
|
|
7
|
+
* functions). The dispatcher imports these directly at the call sites
|
|
8
|
+
* that previously read `this.…`; no re-export from `dispatcher.ts`
|
|
9
|
+
* because none of these were ever public surface.
|
|
10
|
+
*/
|
|
11
|
+
export interface LocalDateParts {
|
|
12
|
+
year: number;
|
|
13
|
+
month: number;
|
|
14
|
+
day: number;
|
|
15
|
+
hour: number;
|
|
16
|
+
minute: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Convert local-time `parts` in `timeZone` to a UTC epoch ms. Returns
|
|
20
|
+
* `null` when the wall-clock instant does not exist in the zone (e.g.
|
|
21
|
+
* the "spring forward" gap) or when `timeZone` is not a valid IANA id.
|
|
22
|
+
*
|
|
23
|
+
* The implementation iterates up to 3 times because the first offset
|
|
24
|
+
* lookup uses the UTC instant — the resolved offset can shift the wall
|
|
25
|
+
* time across a DST boundary, requiring another lookup at the new guess.
|
|
26
|
+
*/
|
|
27
|
+
export declare function localDateTimeToUtcMs(parts: LocalDateParts, timeZone?: string): number | null;
|
|
28
|
+
/**
|
|
29
|
+
* Return the offset (in minutes) that the given `timeZone` applied at
|
|
30
|
+
* the supplied instant. Positive east of UTC, negative west; `null`
|
|
31
|
+
* when `timeZone` is invalid or the platform's `Intl` data lacks the
|
|
32
|
+
* shortOffset name.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getTimeZoneOffsetMinutes(date: Date, timeZone: string): number | null;
|
|
35
|
+
/**
|
|
36
|
+
* Decompose `date` into year/month/day/hour/minute as observed in the
|
|
37
|
+
* given `timeZone`. Falls back to the runtime's local zone when the
|
|
38
|
+
* supplied id is invalid (matching the original behaviour from
|
|
39
|
+
* dispatcher.ts).
|
|
40
|
+
*/
|
|
41
|
+
export declare function getLocalDateParts(date: Date, timeZone?: string): LocalDateParts;
|
|
42
|
+
/**
|
|
43
|
+
* Lexicographic comparator on `LocalDateParts` — returns negative when
|
|
44
|
+
* `a < b`, positive when `a > b`, 0 when equal. Used by the quota-reset
|
|
45
|
+
* resolver to decide whether the next reset wall-clock has already
|
|
46
|
+
* passed today.
|
|
47
|
+
*/
|
|
48
|
+
export declare function compareLocalDateParts(a: LocalDateParts, b: LocalDateParts): number;
|
|
49
|
+
//# sourceMappingURL=dispatcher-date-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher-date-utils.d.ts","sourceRoot":"","sources":["../../src/core/dispatcher-date-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAyCf;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAyBf;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,CAiC/E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,EAAE,cAAc,EACjB,CAAC,EAAE,cAAc,GAChB,MAAM,CAMR"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure timezone-aware date helpers used by the dispatcher's quota-reset
|
|
3
|
+
* logic (`resolveQuotaResetAtMs`) — no instance state, no I/O.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `core/dispatcher.ts` as part of phase D-2 of
|
|
6
|
+
* `docs/design/appendices/file-split-plan.md` (pattern A — pure
|
|
7
|
+
* functions). The dispatcher imports these directly at the call sites
|
|
8
|
+
* that previously read `this.…`; no re-export from `dispatcher.ts`
|
|
9
|
+
* because none of these were ever public surface.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Convert local-time `parts` in `timeZone` to a UTC epoch ms. Returns
|
|
13
|
+
* `null` when the wall-clock instant does not exist in the zone (e.g.
|
|
14
|
+
* the "spring forward" gap) or when `timeZone` is not a valid IANA id.
|
|
15
|
+
*
|
|
16
|
+
* The implementation iterates up to 3 times because the first offset
|
|
17
|
+
* lookup uses the UTC instant — the resolved offset can shift the wall
|
|
18
|
+
* time across a DST boundary, requiring another lookup at the new guess.
|
|
19
|
+
*/
|
|
20
|
+
export function localDateTimeToUtcMs(parts, timeZone) {
|
|
21
|
+
if (!timeZone) {
|
|
22
|
+
return new Date(parts.year, parts.month - 1, parts.day, parts.hour, parts.minute, 0, 0).getTime();
|
|
23
|
+
}
|
|
24
|
+
const baseUtc = Date.UTC(parts.year, parts.month - 1, parts.day, parts.hour, parts.minute, 0, 0);
|
|
25
|
+
let guess = baseUtc;
|
|
26
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
27
|
+
const offsetMinutes = getTimeZoneOffsetMinutes(new Date(guess), timeZone);
|
|
28
|
+
if (offsetMinutes === null) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const nextGuess = baseUtc - offsetMinutes * 60 * 1000;
|
|
32
|
+
if (nextGuess === guess) {
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
guess = nextGuess;
|
|
36
|
+
}
|
|
37
|
+
const resolved = getLocalDateParts(new Date(guess), timeZone);
|
|
38
|
+
if (compareLocalDateParts(resolved, parts) !== 0) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
return guess;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Return the offset (in minutes) that the given `timeZone` applied at
|
|
45
|
+
* the supplied instant. Positive east of UTC, negative west; `null`
|
|
46
|
+
* when `timeZone` is invalid or the platform's `Intl` data lacks the
|
|
47
|
+
* shortOffset name.
|
|
48
|
+
*/
|
|
49
|
+
export function getTimeZoneOffsetMinutes(date, timeZone) {
|
|
50
|
+
let formatter;
|
|
51
|
+
try {
|
|
52
|
+
formatter = new Intl.DateTimeFormat("en-US", {
|
|
53
|
+
timeZone,
|
|
54
|
+
timeZoneName: "shortOffset",
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const zonePart = formatter.formatToParts(date).find((part) => part.type === "timeZoneName")?.value;
|
|
61
|
+
if (!zonePart) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
if (zonePart === "GMT") {
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
const match = /^GMT([+-])(\d{1,2})(?::?(\d{2}))?$/.exec(zonePart);
|
|
68
|
+
if (!match) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
const sign = match[1] === "-" ? -1 : 1;
|
|
72
|
+
const hours = Number(match[2]);
|
|
73
|
+
const minutes = Number(match[3] ?? "0");
|
|
74
|
+
return sign * (hours * 60 + minutes);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Decompose `date` into year/month/day/hour/minute as observed in the
|
|
78
|
+
* given `timeZone`. Falls back to the runtime's local zone when the
|
|
79
|
+
* supplied id is invalid (matching the original behaviour from
|
|
80
|
+
* dispatcher.ts).
|
|
81
|
+
*/
|
|
82
|
+
export function getLocalDateParts(date, timeZone) {
|
|
83
|
+
let formatter;
|
|
84
|
+
try {
|
|
85
|
+
formatter = new Intl.DateTimeFormat("en-US", {
|
|
86
|
+
timeZone,
|
|
87
|
+
year: "numeric",
|
|
88
|
+
month: "2-digit",
|
|
89
|
+
day: "2-digit",
|
|
90
|
+
hour: "2-digit",
|
|
91
|
+
minute: "2-digit",
|
|
92
|
+
hourCycle: "h23",
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
formatter = new Intl.DateTimeFormat("en-US", {
|
|
97
|
+
year: "numeric",
|
|
98
|
+
month: "2-digit",
|
|
99
|
+
day: "2-digit",
|
|
100
|
+
hour: "2-digit",
|
|
101
|
+
minute: "2-digit",
|
|
102
|
+
hourCycle: "h23",
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
const parts = formatter.formatToParts(date);
|
|
106
|
+
const valueOf = (type) => Number(parts.find((part) => part.type === type)?.value ?? "0");
|
|
107
|
+
return {
|
|
108
|
+
year: valueOf("year"),
|
|
109
|
+
month: valueOf("month"),
|
|
110
|
+
day: valueOf("day"),
|
|
111
|
+
hour: valueOf("hour"),
|
|
112
|
+
minute: valueOf("minute"),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Lexicographic comparator on `LocalDateParts` — returns negative when
|
|
117
|
+
* `a < b`, positive when `a > b`, 0 when equal. Used by the quota-reset
|
|
118
|
+
* resolver to decide whether the next reset wall-clock has already
|
|
119
|
+
* passed today.
|
|
120
|
+
*/
|
|
121
|
+
export function compareLocalDateParts(a, b) {
|
|
122
|
+
if (a.year !== b.year)
|
|
123
|
+
return a.year - b.year;
|
|
124
|
+
if (a.month !== b.month)
|
|
125
|
+
return a.month - b.month;
|
|
126
|
+
if (a.day !== b.day)
|
|
127
|
+
return a.day - b.day;
|
|
128
|
+
if (a.hour !== b.hour)
|
|
129
|
+
return a.hour - b.hour;
|
|
130
|
+
return a.minute - b.minute;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=dispatcher-date-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher-date-utils.js","sourceRoot":"","sources":["../../src/core/dispatcher-date-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `DispatcherErrorRouter` — owns the dispatcher's failure-path
|
|
3
|
+
* machinery: the shallow retry wrapper around BackendRouter
|
|
4
|
+
* (`executeWithRetry`), the post-throw cleanup + DM/dashboard
|
|
5
|
+
* notification (`handleError`), the quota-error introspection +
|
|
6
|
+
* formatting helpers, and the §4.5 delegated-connector health
|
|
7
|
+
* warning consult/dispatch pair.
|
|
8
|
+
*
|
|
9
|
+
* Extracted from `core/dispatcher.ts` as part of phase D-2 of
|
|
10
|
+
* `docs/design/appendices/file-split-plan.md`. Pattern B (stateful
|
|
11
|
+
* coordinator): the router owns its own logic but borrows live
|
|
12
|
+
* references from the dispatcher for state that must remain
|
|
13
|
+
* observable to the parent class — the `notifiedEvents` Set used to
|
|
14
|
+
* dedup outbound notifications, the `shutdownAwaiters` Set used to
|
|
15
|
+
* shortcut the retry sleep on SIGTERM, plus accessors for the
|
|
16
|
+
* dispatcher's `shutdown` flag and lazily-injected dashboard stream.
|
|
17
|
+
*
|
|
18
|
+
* Dispatcher entry points served:
|
|
19
|
+
* - `dispatchSafe` calls `executeWithRetry` around backend invokes
|
|
20
|
+
* and `handleError` on failure;
|
|
21
|
+
* - `handleMessage` calls the `consult/run` connector-warning pair
|
|
22
|
+
* before/after recording the user message;
|
|
23
|
+
* - the §4.5 finalize callbacks (`onRetemplateFinalize` /
|
|
24
|
+
* `onManagementScanFinalize`) bridge into the ResultProcessor —
|
|
25
|
+
* the success path uses ResultProcessor directly; the error path
|
|
26
|
+
* calls through these closures to keep the failure ordering
|
|
27
|
+
* identical to the pre-split file.
|
|
28
|
+
*
|
|
29
|
+
* Shared-state references held:
|
|
30
|
+
* - `notifiedEvents: Set<string>` — live reference; `handleError`
|
|
31
|
+
* deletes the entry as defense-in-depth cleanup when execution
|
|
32
|
+
* threw before reaching `processResult`.
|
|
33
|
+
* - `shutdownAwaiters: Set<() => void>` — live reference; the retry
|
|
34
|
+
* sleep races a 5-min timer against this awaiter set so SIGTERM
|
|
35
|
+
* resolves the wait promptly.
|
|
36
|
+
* - `isShutdown: () => boolean` — getter; on shutdown wakeup the
|
|
37
|
+
* retry loop rethrows instead of looping again.
|
|
38
|
+
* - `getDashboardStream: () => IDashboardStream | null` — lazy
|
|
39
|
+
* accessor; the dashboard stream is wired after construction.
|
|
40
|
+
*/
|
|
41
|
+
import type Database from "better-sqlite3";
|
|
42
|
+
import type { Event, MessageEvent, BackendId } from "@aitne/shared";
|
|
43
|
+
import type { AgentConfig } from "../config.js";
|
|
44
|
+
import { BackendQuotaError } from "./agent-core.js";
|
|
45
|
+
import { type DelegatedSignoutWarning } from "./delegated-connector-health.js";
|
|
46
|
+
import type { IDashboardStream, INotificationManager, IMessageRecorder } from "./dispatcher-types.js";
|
|
47
|
+
export interface DispatcherErrorRouterDeps {
|
|
48
|
+
db: Database.Database;
|
|
49
|
+
config: AgentConfig;
|
|
50
|
+
notificationMgr: INotificationManager;
|
|
51
|
+
messageRecorder: IMessageRecorder;
|
|
52
|
+
/** Live reference to the dispatcher's notify-dedup set. */
|
|
53
|
+
notifiedEvents: Set<string>;
|
|
54
|
+
/** Live reference to the dispatcher's shutdown-awaiter set. */
|
|
55
|
+
shutdownAwaiters: Set<() => void>;
|
|
56
|
+
/** Lazily-resolved dashboard stream (may be null in tests). */
|
|
57
|
+
getDashboardStream: () => IDashboardStream | null;
|
|
58
|
+
/** Returns the dispatcher's current shutdown flag. */
|
|
59
|
+
isShutdown: () => boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Closure that bridges into `ResultProcessor.finalizeRetemplateRun`.
|
|
62
|
+
* Used by `handleError` so a retemplate run that throws still
|
|
63
|
+
* rolls back / records the right outcome.
|
|
64
|
+
*/
|
|
65
|
+
onRetemplateFinalize: (event: Event, opts: {
|
|
66
|
+
errored: boolean;
|
|
67
|
+
}) => void;
|
|
68
|
+
/**
|
|
69
|
+
* Closure that bridges into `ResultProcessor.finalizeManagementScan`.
|
|
70
|
+
* Used by `handleError` so a management-scan that throws still
|
|
71
|
+
* records `failed` against the right repository row.
|
|
72
|
+
*/
|
|
73
|
+
onManagementScanFinalize: (event: Event, opts: {
|
|
74
|
+
errored: boolean;
|
|
75
|
+
}) => void;
|
|
76
|
+
}
|
|
77
|
+
export declare class DispatcherErrorRouter {
|
|
78
|
+
private readonly db;
|
|
79
|
+
private readonly config;
|
|
80
|
+
private readonly notificationMgr;
|
|
81
|
+
private readonly messageRecorder;
|
|
82
|
+
private readonly notifiedEvents;
|
|
83
|
+
private readonly shutdownAwaiters;
|
|
84
|
+
private readonly getDashboardStream;
|
|
85
|
+
private readonly isShutdown;
|
|
86
|
+
private readonly onRetemplateFinalize;
|
|
87
|
+
private readonly onManagementScanFinalize;
|
|
88
|
+
constructor(deps: DispatcherErrorRouterDeps);
|
|
89
|
+
isRetryable(error: unknown): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Defense-in-depth retry wrapper around BackendRouter.execute().
|
|
92
|
+
*
|
|
93
|
+
* **Primary retry responsibility lives inside each BackendCore** (§12/§13).
|
|
94
|
+
* Quota errors, timeouts, and auth failures are all normalized into
|
|
95
|
+
* BackendDecisiveFailure / BackendQuotaError before they reach this layer.
|
|
96
|
+
* The BackendRouter handles fallback on decisive failures.
|
|
97
|
+
*
|
|
98
|
+
* This outer loop exists solely as a safety net for raw 5xx errors that
|
|
99
|
+
* somehow escape the BackendCore → Router chain (e.g., an unexpected HTTP
|
|
100
|
+
* error from the SDK transport layer). In practice it almost never fires.
|
|
101
|
+
*/
|
|
102
|
+
executeWithRetry<T>(fn: () => Promise<T>, event: Event): Promise<T>;
|
|
103
|
+
handleError(event: Event, error: Error): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* Best-effort inline error to the dashboard tab whose POST triggered
|
|
106
|
+
* this event. `DashboardAdapter` is `notificationEligible=false`, so
|
|
107
|
+
* the normal `notificationMgr.send` path skips it — without this hook
|
|
108
|
+
* the browser sees the request accepted (200 OK), watches nothing
|
|
109
|
+
* happen, and hits the 120s waiting timeout with no explanation. We
|
|
110
|
+
* target the originating channel id; if the tab already reconnected
|
|
111
|
+
* with a new UUID the adapter silently drops, which matches the
|
|
112
|
+
* chat_error semantics.
|
|
113
|
+
*/
|
|
114
|
+
notifyDashboardError(event: Event, message: string): void;
|
|
115
|
+
extractQuotaError(error: unknown): BackendQuotaError | null;
|
|
116
|
+
formatQuotaMessage(quotaError: BackendQuotaError): string;
|
|
117
|
+
formatBackendLabel(backendId: BackendQuotaError["backendId"]): string;
|
|
118
|
+
resolveQuotaResetAtMs(resetHint: {
|
|
119
|
+
hour: number;
|
|
120
|
+
minute: number;
|
|
121
|
+
timeZone?: string;
|
|
122
|
+
}): number | null;
|
|
123
|
+
/**
|
|
124
|
+
* DELEGATED-MODE-V2-DESIGN.md §4.5 — at every DM dispatch, consult the
|
|
125
|
+
* cached probe for delegated integrations whose effective backend
|
|
126
|
+
* matches the session backend. Surfaces a one-shot DM (deduped via
|
|
127
|
+
* `runtime_state`) when the cached probe says required capabilities
|
|
128
|
+
* are no longer present.
|
|
129
|
+
*
|
|
130
|
+
* The consult itself is synchronous DB-only work (cheap on the hot
|
|
131
|
+
* path). The DM dispatch is fire-and-forget so the agent's response
|
|
132
|
+
* latency is not gated on Slack/Telegram round-trips. Per-warning
|
|
133
|
+
* dispatch failures are swallowed so a flaky messaging adapter never
|
|
134
|
+
* breaks the user's actual DM.
|
|
135
|
+
*
|
|
136
|
+
* Phase 1 of the §4.5 health check — synchronous cache consult only.
|
|
137
|
+
* Returns the warnings the dispatcher must surface this turn (or `[]`
|
|
138
|
+
* when nothing is broken / setup mode is active / the consult itself
|
|
139
|
+
* threw). Recovery markers are cleared inline by the consult helper, so
|
|
140
|
+
* the caller does not have to track them.
|
|
141
|
+
*
|
|
142
|
+
* Split from the dispatch step so the actual DM (and its messages-table
|
|
143
|
+
* persist) fires AFTER the dispatcher has recorded the inbound user
|
|
144
|
+
* message — otherwise the warning row's `CURRENT_TIMESTAMP` lands before
|
|
145
|
+
* the user-message row's, which makes `chat_meta` history reload reorder
|
|
146
|
+
* the bubbles (warning above user) and a one-time visual flicker leaks
|
|
147
|
+
* to the user. See `runDelegatedConnectorWarningDispatch` below.
|
|
148
|
+
*/
|
|
149
|
+
consultDelegatedConnectorWarnings(sessionBackend: BackendId): readonly DelegatedSignoutWarning[];
|
|
150
|
+
/**
|
|
151
|
+
* Phase 2 of the §4.5 health check — asynchronous DM dispatch + post-
|
|
152
|
+
* delivery bookkeeping (throttle marker + dashboard-channel persist).
|
|
153
|
+
* Caller invokes this AFTER the user message is recorded so the DM's
|
|
154
|
+
* messages-table row carries a strictly-later `CURRENT_TIMESTAMP`
|
|
155
|
+
* (preserves pre-reconcile chat order on the dashboard).
|
|
156
|
+
*/
|
|
157
|
+
runDelegatedConnectorWarningDispatch(warnings: readonly DelegatedSignoutWarning[], event: MessageEvent, sessionBackend: BackendId, sessionId: number): void;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=dispatcher-error-handling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher-error-handling.d.ts","sourceRoot":"","sources":["../../src/core/dispatcher-error-handling.ts"],"names":[],"mappings":"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"}
|