@telora/daemon 0.15.24 → 0.15.27
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 +2 -2
- package/dist/ai-inspection-context.d.ts +7 -0
- package/dist/ai-inspection-context.d.ts.map +1 -1
- package/dist/ai-inspection-context.js +79 -0
- package/dist/ai-inspection-context.js.map +1 -1
- package/dist/ai-inspection-runner.d.ts.map +1 -1
- package/dist/ai-inspection-runner.js +1 -0
- package/dist/ai-inspection-runner.js.map +1 -1
- package/dist/assembly-resolvers.js +270 -12
- package/dist/assembly-resolvers.js.map +1 -1
- package/dist/cli/session-state.d.ts +25 -0
- package/dist/cli/session-state.d.ts.map +1 -0
- package/dist/cli/session-state.js +192 -0
- package/dist/cli/session-state.js.map +1 -0
- package/dist/focus-completion.d.ts +12 -4
- package/dist/focus-completion.d.ts.map +1 -1
- package/dist/focus-completion.js +36 -19
- package/dist/focus-completion.js.map +1 -1
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +19 -0
- package/dist/focus-engine.js.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/merge-back-loop.d.ts +103 -0
- package/dist/merge-back-loop.d.ts.map +1 -0
- package/dist/merge-back-loop.js +440 -0
- package/dist/merge-back-loop.js.map +1 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +1 -0
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +1 -0
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/issues.d.ts +41 -0
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +39 -0
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/schemas.d.ts +4 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +2 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/sessions.d.ts +11 -0
- package/dist/queries/sessions.d.ts.map +1 -1
- package/dist/queries/sessions.js +28 -0
- package/dist/queries/sessions.js.map +1 -1
- package/dist/stage-classifier.d.ts +1 -1
- package/dist/stage-classifier.d.ts.map +1 -1
- package/dist/stage-classifier.js +3 -3
- package/dist/stage-classifier.js.map +1 -1
- package/dist/trigger-executor.d.ts +28 -0
- package/dist/trigger-executor.d.ts.map +1 -1
- package/dist/trigger-executor.js +84 -0
- package/dist/trigger-executor.js.map +1 -1
- package/dist/types/delivery.d.ts +5 -0
- package/dist/types/delivery.d.ts.map +1 -1
- package/dist/types/focus.d.ts +1 -0
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/worktree-state.d.ts +58 -0
- package/dist/worktree-state.d.ts.map +1 -0
- package/dist/worktree-state.js +135 -0
- package/dist/worktree-state.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worktree write-state observation.
|
|
3
|
+
*
|
|
4
|
+
* Pure-observation helper that consolidates the four signals indicating
|
|
5
|
+
* whether a focus's worktree is currently being written to:
|
|
6
|
+
*
|
|
7
|
+
* 1. an in-memory focus team is active (phase not in shutting_down/terminated)
|
|
8
|
+
* 2. an agent_sessions DB row for the focus is in an active/starting status
|
|
9
|
+
* 3. a recent commit has landed on HEAD within a configurable threshold
|
|
10
|
+
* 4. the worktree is dirty (uncommitted changes)
|
|
11
|
+
*
|
|
12
|
+
* Used by the continuous merge-back loop to gate "is it safe to attempt
|
|
13
|
+
* merge right now?". Pure observation — no side effects, no mutations.
|
|
14
|
+
*/
|
|
15
|
+
export interface WorktreeWriteReason {
|
|
16
|
+
code: string;
|
|
17
|
+
message: string;
|
|
18
|
+
}
|
|
19
|
+
export interface WorktreeWriteSignal {
|
|
20
|
+
active: boolean;
|
|
21
|
+
reason: WorktreeWriteReason | null;
|
|
22
|
+
}
|
|
23
|
+
export interface WorktreeStateDeps {
|
|
24
|
+
hasActiveTeam: (focusId: string) => boolean;
|
|
25
|
+
getActiveTeamPhase: (focusId: string) => string | null;
|
|
26
|
+
getFocusWorktree: (focusId: string) => {
|
|
27
|
+
worktreePath: string;
|
|
28
|
+
branchName: string;
|
|
29
|
+
} | undefined;
|
|
30
|
+
getActiveSessionForFocus: (focusId: string) => Promise<{
|
|
31
|
+
id: string;
|
|
32
|
+
status: string;
|
|
33
|
+
} | null>;
|
|
34
|
+
worktreeHasUncommittedChanges: (worktreePath: string) => boolean;
|
|
35
|
+
getLastCommitTimestampMs: (worktreePath: string) => number | null;
|
|
36
|
+
now: () => number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Observe whether a focus's worktree is currently being written.
|
|
40
|
+
*
|
|
41
|
+
* Returns a signal containing `active: true` plus the first matching reason,
|
|
42
|
+
* or `active: false` with `reason: null` when no writer is detected. The
|
|
43
|
+
* `no_worktree` case is reported as `active: false` with a non-null reason
|
|
44
|
+
* so callers can distinguish "no writer because nothing exists yet" from
|
|
45
|
+
* "no writer because everything is quiescent".
|
|
46
|
+
*
|
|
47
|
+
* Order of checks (returns on first hit):
|
|
48
|
+
* 1. in-memory active team (non-terminal phase) -> active_team
|
|
49
|
+
* 2. no persistent worktree -> { active: false, no_worktree }
|
|
50
|
+
* 3. DB session row in active/starting status -> active_session
|
|
51
|
+
* 4. recent commit within threshold -> recent_commit
|
|
52
|
+
* 5. dirty worktree -> dirty_worktree
|
|
53
|
+
* 6. otherwise -> { active: false, null }
|
|
54
|
+
*/
|
|
55
|
+
export declare function isWorktreeBeingWritten(focusId: string, opts?: {
|
|
56
|
+
recentCommitThresholdMs?: number;
|
|
57
|
+
}, deps?: Partial<WorktreeStateDeps>): Promise<WorktreeWriteSignal>;
|
|
58
|
+
//# sourceMappingURL=worktree-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-state.d.ts","sourceRoot":"","sources":["../src/worktree-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACvD,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAChG,wBAAwB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC9F,6BAA6B,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;IACjE,wBAAwB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAClE,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAoCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,uBAAuB,CAAC,EAAE,MAAM,CAAA;CAAO,EAC/C,IAAI,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACpC,OAAO,CAAC,mBAAmB,CAAC,CAmE9B"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worktree write-state observation.
|
|
3
|
+
*
|
|
4
|
+
* Pure-observation helper that consolidates the four signals indicating
|
|
5
|
+
* whether a focus's worktree is currently being written to:
|
|
6
|
+
*
|
|
7
|
+
* 1. an in-memory focus team is active (phase not in shutting_down/terminated)
|
|
8
|
+
* 2. an agent_sessions DB row for the focus is in an active/starting status
|
|
9
|
+
* 3. a recent commit has landed on HEAD within a configurable threshold
|
|
10
|
+
* 4. the worktree is dirty (uncommitted changes)
|
|
11
|
+
*
|
|
12
|
+
* Used by the continuous merge-back loop to gate "is it safe to attempt
|
|
13
|
+
* merge right now?". Pure observation — no side effects, no mutations.
|
|
14
|
+
*/
|
|
15
|
+
import { hasActiveTeam, getActiveTeams } from './focus-team-state.js';
|
|
16
|
+
import { getFocusWorktree } from './focus-worktree-state.js';
|
|
17
|
+
import { worktreeHasUncommittedChanges } from './worktree-safety.js';
|
|
18
|
+
import { runGitSync } from './git-types.js';
|
|
19
|
+
import { getActiveSessionForFocus } from './queries/sessions.js';
|
|
20
|
+
const DEFAULT_RECENT_COMMIT_THRESHOLD_MS = 30_000;
|
|
21
|
+
/**
|
|
22
|
+
* Read the unix-epoch milliseconds timestamp of the worktree's HEAD commit.
|
|
23
|
+
* Returns null on any failure (git error, non-numeric output, missing repo).
|
|
24
|
+
*/
|
|
25
|
+
function defaultGetLastCommitTimestampMs(worktreePath) {
|
|
26
|
+
try {
|
|
27
|
+
const result = runGitSync(['log', '-1', '--format=%ct', 'HEAD'], worktreePath);
|
|
28
|
+
if (!result.success)
|
|
29
|
+
return null;
|
|
30
|
+
const trimmed = result.output.trim();
|
|
31
|
+
if (trimmed.length === 0)
|
|
32
|
+
return null;
|
|
33
|
+
const seconds = Number.parseInt(trimmed, 10);
|
|
34
|
+
if (!Number.isFinite(seconds) || Number.isNaN(seconds))
|
|
35
|
+
return null;
|
|
36
|
+
return seconds * 1000;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const defaultDeps = {
|
|
43
|
+
hasActiveTeam,
|
|
44
|
+
getActiveTeamPhase: (focusId) => getActiveTeams().get(focusId)?.phase ?? null,
|
|
45
|
+
getFocusWorktree: (focusId) => {
|
|
46
|
+
const info = getFocusWorktree(focusId);
|
|
47
|
+
if (!info)
|
|
48
|
+
return undefined;
|
|
49
|
+
return { worktreePath: info.worktreePath, branchName: info.branchName };
|
|
50
|
+
},
|
|
51
|
+
getActiveSessionForFocus,
|
|
52
|
+
worktreeHasUncommittedChanges,
|
|
53
|
+
getLastCommitTimestampMs: defaultGetLastCommitTimestampMs,
|
|
54
|
+
now: () => Date.now(),
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Observe whether a focus's worktree is currently being written.
|
|
58
|
+
*
|
|
59
|
+
* Returns a signal containing `active: true` plus the first matching reason,
|
|
60
|
+
* or `active: false` with `reason: null` when no writer is detected. The
|
|
61
|
+
* `no_worktree` case is reported as `active: false` with a non-null reason
|
|
62
|
+
* so callers can distinguish "no writer because nothing exists yet" from
|
|
63
|
+
* "no writer because everything is quiescent".
|
|
64
|
+
*
|
|
65
|
+
* Order of checks (returns on first hit):
|
|
66
|
+
* 1. in-memory active team (non-terminal phase) -> active_team
|
|
67
|
+
* 2. no persistent worktree -> { active: false, no_worktree }
|
|
68
|
+
* 3. DB session row in active/starting status -> active_session
|
|
69
|
+
* 4. recent commit within threshold -> recent_commit
|
|
70
|
+
* 5. dirty worktree -> dirty_worktree
|
|
71
|
+
* 6. otherwise -> { active: false, null }
|
|
72
|
+
*/
|
|
73
|
+
export async function isWorktreeBeingWritten(focusId, opts = {}, deps = {}) {
|
|
74
|
+
const d = { ...defaultDeps, ...deps };
|
|
75
|
+
const thresholdMs = opts.recentCommitThresholdMs ?? DEFAULT_RECENT_COMMIT_THRESHOLD_MS;
|
|
76
|
+
// 1. In-memory active team
|
|
77
|
+
if (d.hasActiveTeam(focusId)) {
|
|
78
|
+
const phase = d.getActiveTeamPhase(focusId);
|
|
79
|
+
if (phase !== null && phase !== 'shutting_down' && phase !== 'terminated') {
|
|
80
|
+
return {
|
|
81
|
+
active: true,
|
|
82
|
+
reason: {
|
|
83
|
+
code: 'active_team',
|
|
84
|
+
message: `in-memory team phase=${phase}`,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// 2. No persistent worktree
|
|
90
|
+
const worktree = d.getFocusWorktree(focusId);
|
|
91
|
+
if (!worktree) {
|
|
92
|
+
return {
|
|
93
|
+
active: false,
|
|
94
|
+
reason: { code: 'no_worktree', message: 'focus has no worktree' },
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
// 3. Active DB session for this focus
|
|
98
|
+
const session = await d.getActiveSessionForFocus(focusId);
|
|
99
|
+
if (session && (session.status === 'active' || session.status === 'starting')) {
|
|
100
|
+
return {
|
|
101
|
+
active: true,
|
|
102
|
+
reason: {
|
|
103
|
+
code: 'active_session',
|
|
104
|
+
message: `agent_sessions row ${session.id} is status=${session.status}`,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// 4. Recent commit
|
|
109
|
+
const lastCommitMs = d.getLastCommitTimestampMs(worktree.worktreePath);
|
|
110
|
+
if (lastCommitMs !== null) {
|
|
111
|
+
const ageMs = d.now() - lastCommitMs;
|
|
112
|
+
if (ageMs >= 0 && ageMs <= thresholdMs) {
|
|
113
|
+
return {
|
|
114
|
+
active: true,
|
|
115
|
+
reason: {
|
|
116
|
+
code: 'recent_commit',
|
|
117
|
+
message: `last commit ${ageMs}ms ago`,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// 5. Dirty worktree
|
|
123
|
+
if (d.worktreeHasUncommittedChanges(worktree.worktreePath)) {
|
|
124
|
+
return {
|
|
125
|
+
active: true,
|
|
126
|
+
reason: {
|
|
127
|
+
code: 'dirty_worktree',
|
|
128
|
+
message: 'git status --porcelain non-empty',
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
// 6. Quiescent
|
|
133
|
+
return { active: false, reason: null };
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=worktree-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-state.js","sourceRoot":"","sources":["../src/worktree-state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telora/daemon",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.27",
|
|
4
4
|
"description": "Agent orchestration daemon for Telora - spawns and manages Claude Code instances",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"//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. See src/__tests__/ for test files.",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@telora/daemon-core": "^0.2.
|
|
38
|
+
"@telora/daemon-core": "^0.2.17",
|
|
39
39
|
"@telora/mcp-products": "^0.22.1",
|
|
40
40
|
"commander": "^14.0.3",
|
|
41
41
|
"zod": "^4.3.6"
|