@telora/daemon 0.22.13 → 0.22.52
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/build-info.json +5 -3
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +1 -0
- package/dist/backends/index.js.map +1 -1
- package/dist/ci/ci-status.d.ts.map +1 -1
- package/dist/ci/ci-status.js +1 -0
- package/dist/ci/ci-status.js.map +1 -1
- package/dist/completion/detector.d.ts +9 -0
- package/dist/completion/detector.d.ts.map +1 -1
- package/dist/completion/detector.js +18 -0
- package/dist/completion/detector.js.map +1 -1
- package/dist/completion/event-phases.d.ts +20 -0
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +46 -13
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/event.d.ts +69 -9
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +109 -22
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/liveness-firing.d.ts +27 -0
- package/dist/completion/liveness-firing.d.ts.map +1 -0
- package/dist/completion/liveness-firing.js +79 -0
- package/dist/completion/liveness-firing.js.map +1 -0
- package/dist/completion/review-exit-phase.js +4 -4
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade.js +8 -0
- package/dist/completion/state-cascade.js.map +1 -1
- package/dist/completion/stdin-turn-tracker.d.ts +19 -0
- package/dist/completion/stdin-turn-tracker.d.ts.map +1 -0
- package/dist/completion/stdin-turn-tracker.js +57 -0
- package/dist/completion/stdin-turn-tracker.js.map +1 -0
- package/dist/completion/supervision-firing-record.d.ts +242 -0
- package/dist/completion/supervision-firing-record.d.ts.map +1 -0
- package/dist/completion/supervision-firing-record.js +292 -0
- package/dist/completion/supervision-firing-record.js.map +1 -0
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +9 -0
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/directive/directive-dispatch.d.ts +7 -1
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +105 -39
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-executor.d.ts +1 -10
- package/dist/directive/directive-executor.d.ts.map +1 -1
- package/dist/directive/directive-executor.js +51 -33
- package/dist/directive/directive-executor.js.map +1 -1
- package/dist/directive/directive-queue.d.ts +35 -9
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +15 -8
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/directive/directive-verify-hold-gate.d.ts +33 -0
- package/dist/directive/directive-verify-hold-gate.d.ts.map +1 -0
- package/dist/directive/directive-verify-hold-gate.js +57 -0
- package/dist/directive/directive-verify-hold-gate.js.map +1 -0
- package/dist/directive/phase-sync.d.ts +11 -0
- package/dist/directive/phase-sync.d.ts.map +1 -1
- package/dist/directive/phase-sync.js +12 -0
- package/dist/directive/phase-sync.js.map +1 -1
- package/dist/drift/staleness-sensor.d.ts +62 -67
- package/dist/drift/staleness-sensor.d.ts.map +1 -1
- package/dist/drift/staleness-sensor.js +233 -68
- package/dist/drift/staleness-sensor.js.map +1 -1
- package/dist/drift/staleness.d.ts +8 -0
- package/dist/drift/staleness.d.ts.map +1 -1
- package/dist/drift/staleness.js +7 -1
- package/dist/drift/staleness.js.map +1 -1
- package/dist/focus/focus-engine.js +1 -1
- package/dist/focus/focus-engine.js.map +1 -1
- package/dist/focus/focus-team-state.d.ts.map +1 -1
- package/dist/focus/focus-team-state.js +2 -0
- package/dist/focus/focus-team-state.js.map +1 -1
- package/dist/focus/focus-worktree-state.d.ts.map +1 -1
- package/dist/focus/focus-worktree-state.js +5 -2
- package/dist/focus/focus-worktree-state.js.map +1 -1
- package/dist/focus/listener-spawn.d.ts +39 -0
- package/dist/focus/listener-spawn.d.ts.map +1 -1
- package/dist/focus/listener-spawn.js +140 -24
- package/dist/focus/listener-spawn.js.map +1 -1
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +53 -25
- package/dist/focus/listener.js.map +1 -1
- package/dist/focus/session-health.d.ts +25 -3
- package/dist/focus/session-health.d.ts.map +1 -1
- package/dist/focus/session-health.js +32 -1
- package/dist/focus/session-health.js.map +1 -1
- package/dist/focus/team-actionable-work.d.ts +41 -2
- package/dist/focus/team-actionable-work.d.ts.map +1 -1
- package/dist/focus/team-actionable-work.js +52 -7
- package/dist/focus/team-actionable-work.js.map +1 -1
- package/dist/merge/focus-merge.d.ts +12 -1
- package/dist/merge/focus-merge.d.ts.map +1 -1
- package/dist/merge/focus-merge.js +33 -2
- package/dist/merge/focus-merge.js.map +1 -1
- package/dist/nexus/return.d.ts +105 -1
- package/dist/nexus/return.d.ts.map +1 -1
- package/dist/nexus/return.js +237 -47
- package/dist/nexus/return.js.map +1 -1
- package/dist/queries/schemas.d.ts +12 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +7 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/sessions.d.ts.map +1 -1
- package/dist/queries/sessions.js +1 -0
- package/dist/queries/sessions.js.map +1 -1
- package/dist/shell/heartbeat-metadata.d.ts +102 -0
- package/dist/shell/heartbeat-metadata.d.ts.map +1 -0
- package/dist/shell/heartbeat-metadata.js +172 -0
- package/dist/shell/heartbeat-metadata.js.map +1 -0
- package/dist/shell/heartbeat.d.ts +7 -22
- package/dist/shell/heartbeat.d.ts.map +1 -1
- package/dist/shell/heartbeat.js +120 -89
- package/dist/shell/heartbeat.js.map +1 -1
- package/dist/shell/unified-shell.d.ts.map +1 -1
- package/dist/shell/unified-shell.js +21 -12
- package/dist/shell/unified-shell.js.map +1 -1
- package/dist/spawn/helpers.d.ts.map +1 -1
- package/dist/spawn/helpers.js +7 -1
- package/dist/spawn/helpers.js.map +1 -1
- package/dist/spawn/process-spawn.d.ts +32 -1
- package/dist/spawn/process-spawn.d.ts.map +1 -1
- package/dist/spawn/process-spawn.js +43 -5
- package/dist/spawn/process-spawn.js.map +1 -1
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/session.d.ts +11 -0
- package/dist/types/session.d.ts.map +1 -1
- package/dist/update/auto-update-idle.d.ts +22 -0
- package/dist/update/auto-update-idle.d.ts.map +1 -1
- package/dist/update/auto-update-idle.js +8 -1
- package/dist/update/auto-update-idle.js.map +1 -1
- package/dist/update/auto-update.d.ts +0 -6
- package/dist/update/auto-update.d.ts.map +1 -1
- package/dist/update/auto-update.js +20 -6
- package/dist/update/auto-update.js.map +1 -1
- package/dist/update/version-check.d.ts +73 -0
- package/dist/update/version-check.d.ts.map +1 -1
- package/dist/update/version-check.js +107 -11
- package/dist/update/version-check.js.map +1 -1
- package/dist/verify/stall-detector-config.d.ts +26 -0
- package/dist/verify/stall-detector-config.d.ts.map +1 -1
- package/dist/verify/stall-detector-config.js +32 -0
- package/dist/verify/stall-detector-config.js.map +1 -1
- package/dist/verify/stall-detectors.d.ts +40 -0
- package/dist/verify/stall-detectors.d.ts.map +1 -1
- package/dist/verify/stall-detectors.js +60 -6
- package/dist/verify/stall-detectors.js.map +1 -1
- package/dist/verify/stalled-team-backstop.d.ts +43 -0
- package/dist/verify/stalled-team-backstop.d.ts.map +1 -0
- package/dist/verify/stalled-team-backstop.js +131 -0
- package/dist/verify/stalled-team-backstop.js.map +1 -0
- package/dist/worktree/verify-interlock.d.ts.map +1 -1
- package/dist/worktree/verify-interlock.js +3 -1
- package/dist/worktree/verify-interlock.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/verify/stalled-team-backstop-detector.test.ts
|
|
3
|
+
// PINNED-BY-END
|
|
4
|
+
/**
|
|
5
|
+
* Stalled-team backstop -- a completion-event-INDEPENDENT reap.
|
|
6
|
+
*
|
|
7
|
+
* Every mechanism that ends a stalled team from the completion handler runs only
|
|
8
|
+
* when the detector's `complete` event fires. On 2026-09-07 a suppressed
|
|
9
|
+
* `complete` (a leaked stdin-turn count) left a HEALTHY, idle lead holding a
|
|
10
|
+
* focus and a governor slot for 43 minutes -- no stall escalation, no no-progress
|
|
11
|
+
* cycle, no teardown -- until a human restarted the daemon. This backstop reads
|
|
12
|
+
* liveness DIRECTLY (the per-team last-activity clock) so it holds whether the
|
|
13
|
+
* completion event is suppressed, never fires, or is latched: it does not share
|
|
14
|
+
* that event as a precondition.
|
|
15
|
+
*
|
|
16
|
+
* It fires between the two existing windows -- above the 5-min liveness-badge park
|
|
17
|
+
* band (a legit park has resumed and been recorded FP by observeLivenessBadge
|
|
18
|
+
* before this acts) and below the 3h blind idle-stall timer -- records a
|
|
19
|
+
* STALLED_TEAM_REAP supervision firing (so its own true/false-positive rate is
|
|
20
|
+
* readable, like the mechanisms it backstops), reaps via terminateTeam (whose
|
|
21
|
+
* normal close path gives the same uncommitted-work preservation a
|
|
22
|
+
* completion-handler teardown does), and files ONE idempotent team_failure so the
|
|
23
|
+
* wedge is visible. Extracted from stall-detectors.ts to keep that file under the
|
|
24
|
+
* file-size floor.
|
|
25
|
+
*
|
|
26
|
+
* @module verify/stalled-team-backstop
|
|
27
|
+
*/
|
|
28
|
+
import { ESCALATION_REASONS, ESCALATION_DISPOSITIONS, withRetry, } from '@telora/daemon-core';
|
|
29
|
+
import { fileEscalationIdempotent as defaultFileEscalationIdempotent, } from '../queries/escalation-suppression.js';
|
|
30
|
+
import { focusBlockageCauseKey } from '../queries/cause-key.js';
|
|
31
|
+
import { recordFiring, isMechanismDemoted, markLatestFiringUnacted, SUPERVISION_MECHANISM, } from '../completion/supervision-firing-record.js';
|
|
32
|
+
import { getActiveTeams, terminateTeam } from '../focus/focus-executor.js';
|
|
33
|
+
import { getTeamLastActivityAt } from '../focus/focus-team-state.js';
|
|
34
|
+
import { resolveStalledTeamBackstopMinutes } from './stall-detector-config.js';
|
|
35
|
+
import { isTeamRecoverable } from './stall-detectors.js';
|
|
36
|
+
import { createLogger } from '../shell/log.js';
|
|
37
|
+
const log = createLogger({ module: 'stall-detectors' });
|
|
38
|
+
const defaultStalledTeamBackstopDeps = {
|
|
39
|
+
getLastActivityAt: getTeamLastActivityAt,
|
|
40
|
+
isTeamRecoverable,
|
|
41
|
+
getLeadSessionId: (focusId) => getActiveTeams().get(focusId)?.leadSessionId ?? null,
|
|
42
|
+
recoverTeam: (focusId) => terminateTeam(focusId, 'teardown'),
|
|
43
|
+
isActingAllowed: () => !isMechanismDemoted(SUPERVISION_MECHANISM.LIVENESS_BADGE),
|
|
44
|
+
fileEscalation: defaultFileEscalationIdempotent,
|
|
45
|
+
now: () => Date.now(),
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Pure decision: has this team's activity clock frozen past the BACKSTOP window
|
|
49
|
+
* (shorter than the 3h blind idle timer)? False when no activity has been
|
|
50
|
+
* recorded yet (a team still initializing has not stalled). Exported for direct
|
|
51
|
+
* unit testing.
|
|
52
|
+
*/
|
|
53
|
+
export function isStalledTeamBackstopEligible(lastActivityMs, nowMs, windowMs) {
|
|
54
|
+
if (lastActivityMs === null)
|
|
55
|
+
return false;
|
|
56
|
+
return nowMs - lastActivityMs > windowMs;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Check ONE focus's team for a stall and REAP it WITHOUT depending on the
|
|
60
|
+
* completion event. A genuinely working team is never reaped: its clock keeps
|
|
61
|
+
* advancing, so its idle age stays under the window.
|
|
62
|
+
*/
|
|
63
|
+
export async function checkStalledTeamBackstopForFocus(ctx, deps = defaultStalledTeamBackstopDeps) {
|
|
64
|
+
if (!deps.isTeamRecoverable(ctx.focusId))
|
|
65
|
+
return;
|
|
66
|
+
const windowMinutes = deps.windowMinutes ?? resolveStalledTeamBackstopMinutes();
|
|
67
|
+
const windowMs = windowMinutes * 60_000;
|
|
68
|
+
const nowMs = (deps.now ?? Date.now)();
|
|
69
|
+
const lastActivityMs = deps.getLastActivityAt(ctx.focusId);
|
|
70
|
+
if (!isStalledTeamBackstopEligible(lastActivityMs, nowMs, windowMs))
|
|
71
|
+
return;
|
|
72
|
+
const idleMinutes = Math.floor((nowMs - lastActivityMs) / 60_000);
|
|
73
|
+
// Record the firing whether or not we act -- the rate must be readable even
|
|
74
|
+
// when the mechanism is demoted to observe-only.
|
|
75
|
+
recordFiring({
|
|
76
|
+
mechanism: SUPERVISION_MECHANISM.STALLED_TEAM_REAP,
|
|
77
|
+
focusId: ctx.focusId,
|
|
78
|
+
predicted: `team wedged: executing but no agent event for ~${idleMinutes}m ` +
|
|
79
|
+
`(> ${windowMinutes}m backstop), completion event not fired`,
|
|
80
|
+
now: nowMs,
|
|
81
|
+
});
|
|
82
|
+
// Block-to-observe by a reading: act only while the observe-only liveness badge
|
|
83
|
+
// has NOT been shown false-positive-heavy. When demoted, record and defer to
|
|
84
|
+
// the blind idle-stall timer -- and mark the firing UNACTED so the settle sweep
|
|
85
|
+
// cannot true-positive it by silence (which would launder the demotion).
|
|
86
|
+
if (!deps.isActingAllowed()) {
|
|
87
|
+
markLatestFiringUnacted(SUPERVISION_MECHANISM.STALLED_TEAM_REAP, ctx.focusId);
|
|
88
|
+
log.info(`[stall-detectors] stalled-team backstop OBSERVING focus "${ctx.focusName}" ` +
|
|
89
|
+
`(idle ~${idleMinutes}m > ${windowMinutes}m) -- liveness signal demoted to ` +
|
|
90
|
+
`observe-only; deferring to the blind idle-stall timer.`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const recovered = deps.recoverTeam(ctx.focusId);
|
|
94
|
+
if (!recovered) {
|
|
95
|
+
log.warn(`[stall-detectors] stalled-team backstop: focus "${ctx.focusName}" is idle past ` +
|
|
96
|
+
`the backstop window but terminateTeam found no live team to recover (already torn down?).`);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
log.warn(`[stall-detectors] Reaped stalled team for focus "${ctx.focusName}" (no agent event ` +
|
|
100
|
+
`for ~${idleMinutes}m > ${windowMinutes}m backstop) WITHOUT a completion event: ` +
|
|
101
|
+
`terminated so wip-preserve, slot release, and delivery re-gating resume; filing a ` +
|
|
102
|
+
`team_failure so the wedge is visible.`);
|
|
103
|
+
// File ONE team_failure escalation (idempotent by cause key -- at most one open
|
|
104
|
+
// row per focus). agent_resolvable so it does not block respawn and rides into
|
|
105
|
+
// the next spawn; the agent-resolvable promotion path escalates it to the
|
|
106
|
+
// operator only if it survives unresolved.
|
|
107
|
+
const causeKey = focusBlockageCauseKey('team_failure', ctx.focusId, 'stalled_team_reap');
|
|
108
|
+
try {
|
|
109
|
+
await withRetry(() => deps.fileEscalation({
|
|
110
|
+
causeKey,
|
|
111
|
+
organizationId: ctx.organizationId,
|
|
112
|
+
sessionId: deps.getLeadSessionId(ctx.focusId) ?? '',
|
|
113
|
+
issueId: null,
|
|
114
|
+
reasonType: ESCALATION_REASONS.BLOCKED_BY_EXTERNAL,
|
|
115
|
+
disposition: ESCALATION_DISPOSITIONS.AGENT_RESOLVABLE,
|
|
116
|
+
anchor: { focusId: ctx.focusId },
|
|
117
|
+
escalationKind: 'team_failure',
|
|
118
|
+
description: `Team for focus "${ctx.focusName}" produced no agent event for ~${idleMinutes} ` +
|
|
119
|
+
`minutes (> ${windowMinutes}m backstop) while still holding the focus and a ` +
|
|
120
|
+
`governor slot, with no completion event. The daemon reaped it directly from the ` +
|
|
121
|
+
`poll loop (reading liveness, not the completion event), preserving its ` +
|
|
122
|
+
`uncommitted work and releasing its slot. If the underlying cause recurs the ` +
|
|
123
|
+
`incoming team will hit it again.`,
|
|
124
|
+
}), { maxAttempts: 3, label: `file-stalled-team-reap-${ctx.focusId}` });
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
log.warn(`[stall-detectors] stalled-team backstop: failed to file team_failure for ` +
|
|
128
|
+
`"${ctx.focusName}":`, err.message);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=stalled-team-backstop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stalled-team-backstop.js","sourceRoot":"","sources":["../../src/verify/stalled-team-backstop.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-interlock.d.ts","sourceRoot":"","sources":["../../src/worktree/verify-interlock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify-interlock.d.ts","sourceRoot":"","sources":["../../src/worktree/verify-interlock.ts"],"names":[],"mappings":"AA6DA;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,IAAI,CAgBlE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,2EAA2E;AAC3E,MAAM,WAAW,6BAA6B;IAC5C,6EAA6E;IAC7E,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3D;AAED;;;GAGG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAChC;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAClB;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC;AAEnC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iCAAiC,CAAC,CAAC,EACjD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,CAAC,EACf,IAAI,GAAE,6BAAkC,GACvC,sBAAsB,CAAC,CAAC,CAAC,CAM3B"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
-
// Pinned by:
|
|
2
|
+
// Pinned by: packages/daemon/src/directive/directive-verify-hold-disposal-convergence.test.ts,
|
|
3
|
+
// packages/daemon/src/directive/directive-verify-hold-gate.test.ts,
|
|
4
|
+
// packages/daemon/src/focus/pending-spawn-verify-hold.test.ts
|
|
3
5
|
// PINNED-BY-END
|
|
4
6
|
/**
|
|
5
7
|
* Per-worktree verify interlock.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-interlock.js","sourceRoot":"","sources":["../../src/worktree/verify-interlock.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,
|
|
1
|
+
{"version":3,"file":"verify-interlock.js","sourceRoot":"","sources":["../../src/worktree/verify-interlock.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,+FAA+F;AAC/F,sEAAsE;AACtE,gEAAgE;AAChE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;AAExC,gFAAgF;AAChF,SAAS,MAAM,CAAC,YAAoB;IAClC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,YAAoB;IACpD,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACjC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,GAAG,CAAC,KAAK,CAAC,uCAAuC,GAAG,WAAW,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClF,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,uCAAuC,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAC1F,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAAoB;IACxD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,kBAAkB;IAChC,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAgBD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iCAAiC,CAC/C,YAAoB,EACpB,MAAe,EACf,OAAsC,EAAE;IAExC,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,IAAI,qBAAqB,CAAC;IACxE,IAAI,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;AAC/C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telora/daemon",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.52",
|
|
4
4
|
"description": "Agent orchestration daemon for Telora - spawns and manages Claude Code instances",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
},
|
|
38
38
|
"//testRunner": "Uses Node.js built-in test runner (node:test) via tsx for TypeScript support. The root package uses Vitest; this is a deliberate choice for the daemon package to avoid framework dependencies. Test files live beside the modules they exercise (owner-directory layout); the runner discovers them recursively.",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@telora/daemon-core": "^0.2.
|
|
41
|
-
"@telora/mcp-products": "^0.22.
|
|
40
|
+
"@telora/daemon-core": "^0.2.92",
|
|
41
|
+
"@telora/mcp-products": "^0.22.137",
|
|
42
42
|
"commander": "^14.0.3",
|
|
43
43
|
"yaml": "^2.4.0",
|
|
44
44
|
"zod": "^4.3.6"
|