workday-daemon 0.9.0 → 0.10.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.
- package/dist/collectors/git-tracker.d.ts +6 -7
- package/dist/collectors/git-tracker.js +28 -39
- package/dist/collectors/git-tracker.js.map +1 -1
- package/dist/core/constants.d.ts +6 -0
- package/dist/core/constants.js +7 -0
- package/dist/core/constants.js.map +1 -1
- package/dist/core/day-lifecycle.d.ts +10 -0
- package/dist/core/day-lifecycle.js +14 -0
- package/dist/core/day-lifecycle.js.map +1 -0
- package/dist/core/session-tracker.d.ts +45 -12
- package/dist/core/session-tracker.js +157 -47
- package/dist/core/session-tracker.js.map +1 -1
- package/dist/core/status-renderer.js +5 -3
- package/dist/core/status-renderer.js.map +1 -1
- package/dist/core/types.d.ts +11 -7
- package/dist/core/types.js +0 -7
- package/dist/core/types.js.map +1 -1
- package/dist/daemon.js +10 -8
- package/dist/daemon.js.map +1 -1
- package/dist/http-server.d.ts +10 -1
- package/dist/http-server.js +67 -4
- package/dist/http-server.js.map +1 -1
- package/dist/push/report-builder.js +21 -2
- package/dist/push/report-builder.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AppConfig, Secrets, PollResult, ReflogEntry, RepoTracker, LedgerQuery } from '../core/types.js';
|
|
1
|
+
import type { AppConfig, Secrets, PollResult, ReflogEntry, RepoTracker, WatchingRepo, LedgerQuery } from '../core/types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Main git activity tracker.
|
|
4
4
|
* Orchestrates GitClient, ReflogParser, SnapshotParser.
|
|
@@ -57,14 +57,13 @@ export declare class GitTracker {
|
|
|
57
57
|
private cacheBranchRef;
|
|
58
58
|
/** Get or initialize per-repo tracking state */
|
|
59
59
|
private getOrCreateRepoState;
|
|
60
|
-
/** Filter reflog entries to only those newer than last seen timestamp */
|
|
61
|
-
private filterNewReflogEntries;
|
|
62
60
|
/**
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* PENDING → ACTIVE on dynamics or commit.
|
|
61
|
+
* Live view for watching-card synthesis: configured repos currently on a
|
|
62
|
+
* task branch (as of their last poll), in config.repos order.
|
|
66
63
|
*/
|
|
67
|
-
|
|
64
|
+
getWatchingRepos(): readonly WatchingRepo[];
|
|
65
|
+
/** Filter reflog entries to only those newer than last seen timestamp */
|
|
66
|
+
private filterNewReflogEntries;
|
|
68
67
|
/** Enrich reflog entries with extracted task keys */
|
|
69
68
|
enrichReflogEntries(entries: ReflogEntry[]): Array<{
|
|
70
69
|
readonly entry: ReflogEntry;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { basename } from 'node:path';
|
|
2
|
-
import { RepoState } from '../core/types.js';
|
|
3
2
|
import { extractTask, getConfiguredDefaultBranchName } from '../core/config.js';
|
|
4
3
|
import { GitClient } from './git-client.js';
|
|
5
4
|
import { ReflogParser } from './reflog-parser.js';
|
|
@@ -120,6 +119,10 @@ export class GitTracker {
|
|
|
120
119
|
// Parse reflog, filter to new entries only
|
|
121
120
|
const allEntries = this.reflogParser.parseEntries(raw.reflog);
|
|
122
121
|
const newEntries = this.filterNewReflogEntries(allEntries, state);
|
|
122
|
+
// Branch-guard for prev-snapshot seeding (A-3): a snapshot taken on
|
|
123
|
+
// another branch must never seed a newborn candidate's baseline.
|
|
124
|
+
const branchChanged = state.currentBranch !== null && state.currentBranch !== raw.branch;
|
|
125
|
+
const prevEvidenceSnapshot = branchChanged ? null : state.prevEvidenceSnapshot;
|
|
123
126
|
// Update stored state
|
|
124
127
|
state.previousSnapshot = snapshot;
|
|
125
128
|
state.currentBranch = raw.branch;
|
|
@@ -131,8 +134,6 @@ export class GitTracker {
|
|
|
131
134
|
else if (newEntries.length > 0) {
|
|
132
135
|
state.lastReflogTs = newEntries[newEntries.length - 1].ts;
|
|
133
136
|
}
|
|
134
|
-
// Determine repo state based on signals
|
|
135
|
-
this.updateRepoState(state, task, delta, newEntries);
|
|
136
137
|
// PR-equivalent evidence snapshot (only when an evidence base was supplied
|
|
137
138
|
// AND git accepted it — fetchRepoState transparently drops it on bad-ref).
|
|
138
139
|
let evidenceSnapshot = null;
|
|
@@ -147,6 +148,10 @@ export class GitTracker {
|
|
|
147
148
|
};
|
|
148
149
|
evidenceBasis = mergeBaseSha !== null ? 'merge_base' : 'base_sha';
|
|
149
150
|
}
|
|
151
|
+
// Remember this tick's snapshot for the next tick's seeding — merge-base
|
|
152
|
+
// basis only (a base_sha snapshot is anchored differently and would
|
|
153
|
+
// corrupt a merge-base baseline).
|
|
154
|
+
state.prevEvidenceSnapshot = evidenceBasis === 'merge_base' ? evidenceSnapshot : null;
|
|
150
155
|
// Commit ledger: replay branch-reflog transitions (exact per-operation
|
|
151
156
|
// accounting) or seed a fresh ledger. Only on developer branches with a
|
|
152
157
|
// resolved default branch + merge-base — everything else falls back to
|
|
@@ -166,6 +171,7 @@ export class GitTracker {
|
|
|
166
171
|
evidenceSnapshot,
|
|
167
172
|
evidenceBasis,
|
|
168
173
|
mergeBaseSha,
|
|
174
|
+
prevEvidenceSnapshot,
|
|
169
175
|
ledgerUpdate,
|
|
170
176
|
};
|
|
171
177
|
}
|
|
@@ -215,17 +221,34 @@ export class GitTracker {
|
|
|
215
221
|
let state = this.repoStates.get(repoPath);
|
|
216
222
|
if (!state) {
|
|
217
223
|
state = {
|
|
218
|
-
state: RepoState.Idle,
|
|
219
224
|
currentBranch: null,
|
|
220
225
|
currentTask: null,
|
|
221
|
-
activeSessionId: null,
|
|
222
226
|
previousSnapshot: null,
|
|
223
227
|
lastReflogTs: 0,
|
|
228
|
+
prevEvidenceSnapshot: null,
|
|
224
229
|
};
|
|
225
230
|
this.repoStates.set(repoPath, state);
|
|
226
231
|
}
|
|
227
232
|
return state;
|
|
228
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Live view for watching-card synthesis: configured repos currently on a
|
|
236
|
+
* task branch (as of their last poll), in config.repos order.
|
|
237
|
+
*/
|
|
238
|
+
getWatchingRepos() {
|
|
239
|
+
const result = [];
|
|
240
|
+
for (const repoPath of this.config.repos) {
|
|
241
|
+
const state = this.repoStates.get(repoPath);
|
|
242
|
+
if (!state || state.currentTask === null || state.currentBranch === null)
|
|
243
|
+
continue;
|
|
244
|
+
result.push({
|
|
245
|
+
repoName: basename(repoPath),
|
|
246
|
+
branch: state.currentBranch,
|
|
247
|
+
task: state.currentTask,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
return result;
|
|
251
|
+
}
|
|
229
252
|
/** Filter reflog entries to only those newer than last seen timestamp */
|
|
230
253
|
filterNewReflogEntries(entries, state) {
|
|
231
254
|
if (state.lastReflogTs === 0) {
|
|
@@ -234,40 +257,6 @@ export class GitTracker {
|
|
|
234
257
|
}
|
|
235
258
|
return entries.filter(e => e.ts > state.lastReflogTs);
|
|
236
259
|
}
|
|
237
|
-
/**
|
|
238
|
-
* Update repo state based on collected signals.
|
|
239
|
-
* IDLE → PENDING on checkout to own branch.
|
|
240
|
-
* PENDING → ACTIVE on dynamics or commit.
|
|
241
|
-
*/
|
|
242
|
-
updateRepoState(state, task, delta, newEntries) {
|
|
243
|
-
const hasCommit = newEntries.some(e => e.type === 'commit');
|
|
244
|
-
const hasCheckout = newEntries.some(e => e.type === 'checkout');
|
|
245
|
-
// Check if branch changed to a non-developer branch
|
|
246
|
-
if (task === null) {
|
|
247
|
-
if (state.state !== RepoState.Idle) {
|
|
248
|
-
state.state = RepoState.Idle;
|
|
249
|
-
state.activeSessionId = null;
|
|
250
|
-
}
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
switch (state.state) {
|
|
254
|
-
case RepoState.Idle:
|
|
255
|
-
// Any signal on own branch → open PENDING
|
|
256
|
-
if (hasCheckout || hasCommit || delta.hasDynamics) {
|
|
257
|
-
state.state = RepoState.Pending;
|
|
258
|
-
}
|
|
259
|
-
break;
|
|
260
|
-
case RepoState.Pending:
|
|
261
|
-
// Dynamics or commit → promote to ACTIVE
|
|
262
|
-
if (delta.hasDynamics || hasCommit) {
|
|
263
|
-
state.state = RepoState.Active;
|
|
264
|
-
}
|
|
265
|
-
break;
|
|
266
|
-
case RepoState.Active:
|
|
267
|
-
// Stay active — session manager will handle lastSeenAt updates
|
|
268
|
-
break;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
260
|
/** Enrich reflog entries with extracted task keys */
|
|
272
261
|
enrichReflogEntries(entries) {
|
|
273
262
|
return entries.map(entry => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-tracker.js","sourceRoot":"","sources":["../../src/collectors/git-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAarC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"git-tracker.js","sourceRoot":"","sources":["../../src/collectors/git-tracker.ts"],"names":[],"mappings":"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"}
|
package/dist/core/constants.d.ts
CHANGED
|
@@ -38,6 +38,12 @@ export declare const TEMPO_BASE_URL = "https://api.tempo.io";
|
|
|
38
38
|
export declare const TEMPO_RATE_LIMIT_MS = 210;
|
|
39
39
|
export declare const TEMPO_TOLERANCE_SECONDS = 60;
|
|
40
40
|
export declare const CRASH_RECOVERY_LOOKBACK_DAYS = 7;
|
|
41
|
+
/**
|
|
42
|
+
* In-memory candidate lifetime since its last dynamics/commit tick. While
|
|
43
|
+
* activity continues (even without leadership) the TTL keeps resetting; a
|
|
44
|
+
* candidate that goes quiet evaporates silently — no disk traces.
|
|
45
|
+
*/
|
|
46
|
+
export declare const CANDIDATE_TTL_MINUTES = 30;
|
|
41
47
|
export declare const MAX_BODY_BYTES = 4096;
|
|
42
48
|
export declare const DAEMON_START_MAX_ATTEMPTS = 25;
|
|
43
49
|
export declare const DAEMON_START_POLL_MS = 200;
|
package/dist/core/constants.js
CHANGED
|
@@ -70,6 +70,13 @@ export const TEMPO_RATE_LIMIT_MS = 210;
|
|
|
70
70
|
export const TEMPO_TOLERANCE_SECONDS = 60;
|
|
71
71
|
// ─── Daemon crash recovery ──────────────────────────────────────────────
|
|
72
72
|
export const CRASH_RECOVERY_LOOKBACK_DAYS = 7;
|
|
73
|
+
// ─── Candidate sessions (lazy birth) ────────────────────────────────────
|
|
74
|
+
/**
|
|
75
|
+
* In-memory candidate lifetime since its last dynamics/commit tick. While
|
|
76
|
+
* activity continues (even without leadership) the TTL keeps resetting; a
|
|
77
|
+
* candidate that goes quiet evaporates silently — no disk traces.
|
|
78
|
+
*/
|
|
79
|
+
export const CANDIDATE_TTL_MINUTES = 30;
|
|
73
80
|
// ─── HTTP body size limit ───────────────────────────────────────────────
|
|
74
81
|
export const MAX_BODY_BYTES = 4096;
|
|
75
82
|
// ─── CLI daemon startup polling ─────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DailyLog } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Lazy-day gate: a day exists on disk only after a confirmed fact.
|
|
4
|
+
*
|
|
5
|
+
* Facts are: an activated session, a manual entry, or the file already
|
|
6
|
+
* existing on disk (loaded days keep being written so recovery/edits are
|
|
7
|
+
* never lost). Signals alone do NOT materialize a day — a quiet weekend
|
|
8
|
+
* with a couple of checkouts leaves nothing behind.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isDayMaterialized(log: DailyLog, loadedFromDisk: boolean): boolean;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy-day gate: a day exists on disk only after a confirmed fact.
|
|
3
|
+
*
|
|
4
|
+
* Facts are: an activated session, a manual entry, or the file already
|
|
5
|
+
* existing on disk (loaded days keep being written so recovery/edits are
|
|
6
|
+
* never lost). Signals alone do NOT materialize a day — a quiet weekend
|
|
7
|
+
* with a couple of checkouts leaves nothing behind.
|
|
8
|
+
*/
|
|
9
|
+
export function isDayMaterialized(log, loadedFromDisk) {
|
|
10
|
+
return loadedFromDisk
|
|
11
|
+
|| log.sessions.length > 0
|
|
12
|
+
|| (log.manualEntries?.length ?? 0) > 0;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=day-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"day-lifecycle.js","sourceRoot":"","sources":["../../src/core/day-lifecycle.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAa,EAAE,cAAuB;IACtE,OAAO,cAAc;WAChB,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;WACvB,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -26,6 +26,8 @@ export declare class SessionTracker {
|
|
|
26
26
|
private dailyLog;
|
|
27
27
|
private readonly config;
|
|
28
28
|
private lastEvaluatorResult;
|
|
29
|
+
private readonly candidates;
|
|
30
|
+
private loadedFromDisk;
|
|
29
31
|
onSessionClosed: ((sessionId: string) => void) | null;
|
|
30
32
|
constructor(config: AppConfig, initialLog?: DailyLog);
|
|
31
33
|
getDailyLog(): DailyLog;
|
|
@@ -33,10 +35,11 @@ export declare class SessionTracker {
|
|
|
33
35
|
* Process one poll tick for a single repo.
|
|
34
36
|
*
|
|
35
37
|
* Flow:
|
|
36
|
-
* 1.
|
|
37
|
-
* 2.
|
|
38
|
-
*
|
|
39
|
-
*
|
|
38
|
+
* 1. Log signals (dynamics, commits, checkouts) — into the in-memory draft
|
|
39
|
+
* 2. Session lifecycle: open session → tick; task gone/changed → close
|
|
40
|
+
* session AND drop the candidate
|
|
41
|
+
* 3. No session: activity births a candidate (in-memory Session, honest
|
|
42
|
+
* startedAt = first signal); an existing candidate ticks like a session
|
|
40
43
|
*/
|
|
41
44
|
processPollResult(result: PollResult): void;
|
|
42
45
|
/**
|
|
@@ -55,10 +58,15 @@ export declare class SessionTracker {
|
|
|
55
58
|
*/
|
|
56
59
|
private pruneEmptySessions;
|
|
57
60
|
/**
|
|
58
|
-
* Handle day boundary: close all sessions,
|
|
59
|
-
*
|
|
61
|
+
* Handle day boundary: close all sessions, evaporate candidates, start a
|
|
62
|
+
* fresh in-memory draft. The caller writes the returned log to disk ONLY
|
|
63
|
+
* when it is materialized — an empty day leaves no file and no console
|
|
64
|
+
* noise (lazy day).
|
|
60
65
|
*/
|
|
61
|
-
handleDayBoundary():
|
|
66
|
+
handleDayBoundary(): {
|
|
67
|
+
oldLog: DailyLog;
|
|
68
|
+
materialized: boolean;
|
|
69
|
+
};
|
|
62
70
|
/** Set dayStartedAt (called by daemon on startup) */
|
|
63
71
|
setDayStartedAt(timestamp: string): void;
|
|
64
72
|
/** Add manual time adjustment to a session */
|
|
@@ -89,7 +97,10 @@ export declare class SessionTracker {
|
|
|
89
97
|
};
|
|
90
98
|
/** Get manual minutes for a session */
|
|
91
99
|
getManualMinutes(session: Session): number;
|
|
92
|
-
/**
|
|
100
|
+
/**
|
|
101
|
+
* Write current daily log to disk (atomic). No-op until the day is
|
|
102
|
+
* materialized: file exists ⇔ a confirmed fact happened (lazy day).
|
|
103
|
+
*/
|
|
93
104
|
flush(): void;
|
|
94
105
|
/** Get summary of open sessions (for status display) */
|
|
95
106
|
getOpenSessions(): readonly Session[];
|
|
@@ -106,9 +117,13 @@ export declare class SessionTracker {
|
|
|
106
117
|
* query) with a zero counter and a pointer at the current branch tip.
|
|
107
118
|
*/
|
|
108
119
|
getLedgerQueries(repoPaths: readonly string[]): Map<string, LedgerQuery | null>;
|
|
109
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
* Build TickInput[] for all open sessions (except manually paused) and
|
|
122
|
+
* all candidates — candidates compete for leadership like sessions do.
|
|
123
|
+
*/
|
|
110
124
|
buildTickInputs(pollResults: readonly PollResult[]): readonly TickInput[];
|
|
111
|
-
|
|
125
|
+
private toTickInput;
|
|
126
|
+
/** Apply evaluator results: auto-pause, auto-resume, candidate promotion */
|
|
112
127
|
applyEvaluatorResult(result: EvaluatorResult): void;
|
|
113
128
|
getLastEvaluatorResult(): EvaluatorResult | null;
|
|
114
129
|
/**
|
|
@@ -129,11 +144,23 @@ export declare class SessionTracker {
|
|
|
129
144
|
hasOpenPause(session: Session): boolean;
|
|
130
145
|
/**
|
|
131
146
|
* True when someone is plausibly mid-work: at least one open, unpaused
|
|
132
|
-
* session
|
|
147
|
+
* session OR a live candidate (a session mid-birth). Used as the
|
|
148
|
+
* quiet-window gate for self-update restarts.
|
|
133
149
|
*/
|
|
134
150
|
hasActiveWork(): boolean;
|
|
151
|
+
/** Candidate sessions (in-memory, not yet confirmed facts) in birth order. */
|
|
152
|
+
getCandidates(): readonly Session[];
|
|
153
|
+
/**
|
|
154
|
+
* TTL evaporation: a candidate whose last activity is older than
|
|
155
|
+
* CANDIDATE_TTL_MINUTES vanishes without logs or traces (A-7).
|
|
156
|
+
*/
|
|
157
|
+
sweepCandidates(now: number): void;
|
|
158
|
+
private dropCandidate;
|
|
159
|
+
private dropAllCandidates;
|
|
135
160
|
private findOpenSession;
|
|
136
|
-
|
|
161
|
+
/** Open session first, then candidate — for baseSha/ledger poll context. */
|
|
162
|
+
private findOpenOrCandidateSession;
|
|
163
|
+
private createSession;
|
|
137
164
|
private closeSession;
|
|
138
165
|
private closeOpenPause;
|
|
139
166
|
private getOpenPauseSource;
|
|
@@ -164,6 +191,12 @@ export declare class SessionTracker {
|
|
|
164
191
|
* The baseline ratchets down when branch totals drop below it (own work
|
|
165
192
|
* merged upstream, dropped commits) so evidence never goes negative and
|
|
166
193
|
* subsequent work is counted from the new, lower base.
|
|
194
|
+
*
|
|
195
|
+
* First tick (baseline == null): seeded from the PREVIOUS tick's snapshot
|
|
196
|
+
* when available (A-3) — a candidate born from a burst would otherwise
|
|
197
|
+
* bake that burst into the baseline and lose it from the line counters.
|
|
198
|
+
* The prev snapshot is branch-guarded by GitTracker: null when the branch
|
|
199
|
+
* changed this tick, so edits carried over a checkout are never counted.
|
|
167
200
|
*/
|
|
168
201
|
private applyMergeBaseEvidence;
|
|
169
202
|
/**
|