workday-daemon 0.4.4 → 0.5.1
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-client.d.ts +12 -5
- package/dist/collectors/git-client.js +28 -15
- package/dist/collectors/git-client.js.map +1 -1
- package/dist/collectors/git-tracker.js +14 -4
- package/dist/collectors/git-tracker.js.map +1 -1
- package/dist/collectors/reflog-parser.js +7 -1
- package/dist/collectors/reflog-parser.js.map +1 -1
- package/dist/core/activity-evaluator.d.ts +46 -8
- package/dist/core/activity-evaluator.js +110 -33
- package/dist/core/activity-evaluator.js.map +1 -1
- package/dist/core/config.d.ts +1 -2
- package/dist/core/config.js +2 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/constants.d.ts +35 -22
- package/dist/core/constants.js +39 -12
- package/dist/core/constants.js.map +1 -1
- package/dist/core/session-tracker.d.ts +22 -12
- package/dist/core/session-tracker.js +86 -21
- package/dist/core/session-tracker.js.map +1 -1
- package/dist/core/status-renderer.js +8 -3
- package/dist/core/status-renderer.js.map +1 -1
- package/dist/core/types.d.ts +17 -6
- package/dist/core/types.js.map +1 -1
- package/dist/http-server.js +1 -1
- package/dist/http-server.js.map +1 -1
- package/package.json +2 -1
|
@@ -10,13 +10,20 @@ export declare class GitClient {
|
|
|
10
10
|
* Execute batched git command for a single repo.
|
|
11
11
|
* Always: branch name, current HEAD SHA, working-tree diff, untracked status, reflog.
|
|
12
12
|
* When baseSha is provided: also a diff and commit count vs that base — used
|
|
13
|
-
* for PR-equivalent evidence stats on the open session.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* the counter with upstream commits.
|
|
13
|
+
* for PR-equivalent evidence stats on the open session. The caller passes the
|
|
14
|
+
* fresh merge-base with the default branch here when available (rebase-stable),
|
|
15
|
+
* falling back to the session's sticky baseSha.
|
|
17
16
|
* ~80–120ms per repo.
|
|
18
17
|
*/
|
|
19
|
-
fetchRepoState(repoPath: string, baseSha?: string
|
|
18
|
+
fetchRepoState(repoPath: string, baseSha?: string): Promise<RawGitOutput>;
|
|
19
|
+
/**
|
|
20
|
+
* `git merge-base HEAD <ref>` — the point where the current branch diverges
|
|
21
|
+
* from the default branch. Null when histories are unrelated, the ref is
|
|
22
|
+
* gone, or git is busy. Resolved fresh every tick so evidence diffs never
|
|
23
|
+
* run against a stale merge-base (the staleness was exactly what inflated
|
|
24
|
+
* line counts after rebases).
|
|
25
|
+
*/
|
|
26
|
+
getMergeBase(repoPath: string, ref: string): Promise<string | null>;
|
|
20
27
|
/** Verify that a ref exists locally (`git rev-parse --verify`). */
|
|
21
28
|
refExists(repoPath: string, ref: string): Promise<boolean>;
|
|
22
29
|
/**
|
|
@@ -16,13 +16,12 @@ export class GitClient {
|
|
|
16
16
|
* Execute batched git command for a single repo.
|
|
17
17
|
* Always: branch name, current HEAD SHA, working-tree diff, untracked status, reflog.
|
|
18
18
|
* When baseSha is provided: also a diff and commit count vs that base — used
|
|
19
|
-
* for PR-equivalent evidence stats on the open session.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* the counter with upstream commits.
|
|
19
|
+
* for PR-equivalent evidence stats on the open session. The caller passes the
|
|
20
|
+
* fresh merge-base with the default branch here when available (rebase-stable),
|
|
21
|
+
* falling back to the session's sticky baseSha.
|
|
23
22
|
* ~80–120ms per repo.
|
|
24
23
|
*/
|
|
25
|
-
async fetchRepoState(repoPath, baseSha
|
|
24
|
+
async fetchRepoState(repoPath, baseSha) {
|
|
26
25
|
if (!existsSync(repoPath)) {
|
|
27
26
|
throw new Error(`Repo path not found: ${repoPath}`);
|
|
28
27
|
}
|
|
@@ -46,13 +45,10 @@ export class GitClient {
|
|
|
46
45
|
// rewrites the tip, so this still returns 1 — not 2 like the reflog scan.
|
|
47
46
|
`git -C "${repoPath}" rev-list ${baseSha}..HEAD --count`);
|
|
48
47
|
}
|
|
49
|
-
if (defaultBranchRef) {
|
|
50
|
-
parts.push(`echo ${GIT_BATCH_SEPARATOR}`, `git -C "${repoPath}" merge-base HEAD ${defaultBranchRef}`);
|
|
51
|
-
}
|
|
52
48
|
const cmd = parts.join(' && ');
|
|
53
49
|
try {
|
|
54
50
|
const { stdout } = await execAsync(cmd, { maxBuffer: GIT_MAX_BUFFER_BYTES, windowsHide: true });
|
|
55
|
-
return GitClient.parseSections(stdout, baseSha !== undefined
|
|
51
|
+
return GitClient.parseSections(stdout, baseSha !== undefined);
|
|
56
52
|
}
|
|
57
53
|
catch (error) {
|
|
58
54
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -61,14 +57,33 @@ export class GitClient {
|
|
|
61
57
|
throw new Error(`Git is locked in ${repoPath} (index.lock exists)`);
|
|
62
58
|
}
|
|
63
59
|
// baseSha can become invalid after a hard reset / force-push — fall back
|
|
64
|
-
// to a baseless fetch
|
|
65
|
-
// recapture from merge-base on the next tick).
|
|
60
|
+
// to a baseless fetch; the next tick recaptures a base.
|
|
66
61
|
if (baseSha && (message.includes('unknown revision') || message.includes('bad revision'))) {
|
|
67
|
-
return this.fetchRepoState(repoPath, undefined
|
|
62
|
+
return this.fetchRepoState(repoPath, undefined);
|
|
68
63
|
}
|
|
69
64
|
throw new Error(`Git command failed for ${repoPath}: ${message}`);
|
|
70
65
|
}
|
|
71
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* `git merge-base HEAD <ref>` — the point where the current branch diverges
|
|
69
|
+
* from the default branch. Null when histories are unrelated, the ref is
|
|
70
|
+
* gone, or git is busy. Resolved fresh every tick so evidence diffs never
|
|
71
|
+
* run against a stale merge-base (the staleness was exactly what inflated
|
|
72
|
+
* line counts after rebases).
|
|
73
|
+
*/
|
|
74
|
+
async getMergeBase(repoPath, ref) {
|
|
75
|
+
try {
|
|
76
|
+
const { stdout } = await execAsync(`git -C "${repoPath}" merge-base HEAD ${ref}`, {
|
|
77
|
+
maxBuffer: GIT_MAX_BUFFER_BYTES,
|
|
78
|
+
windowsHide: true,
|
|
79
|
+
});
|
|
80
|
+
const sha = stdout.trim();
|
|
81
|
+
return /^[0-9a-f]{40}$/.test(sha) ? sha : null;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
72
87
|
/** Verify that a ref exists locally (`git rev-parse --verify`). */
|
|
73
88
|
async refExists(repoPath, ref) {
|
|
74
89
|
try {
|
|
@@ -99,14 +114,13 @@ export class GitClient {
|
|
|
99
114
|
return null;
|
|
100
115
|
}
|
|
101
116
|
}
|
|
102
|
-
static parseSections(raw, withBase
|
|
117
|
+
static parseSections(raw, withBase) {
|
|
103
118
|
const normalized = raw.replace(/\r\n/g, '\n');
|
|
104
119
|
// Windows echo may add trailing space: "---WORKDAY-SEP--- \n"
|
|
105
120
|
const sections = normalized.split(new RegExp(GIT_BATCH_SEPARATOR + '\\s*\\n'));
|
|
106
121
|
let idx = 5; // fixed: branch, head, diff, status, reflog
|
|
107
122
|
const diffSinceBase = withBase ? (sections[idx++] ?? '').trim() : undefined;
|
|
108
123
|
const commitsSinceBase = withBase ? (sections[idx++] ?? '').trim() : undefined;
|
|
109
|
-
const mergeBase = withMergeBase ? (sections[idx++] ?? '').trim() : undefined;
|
|
110
124
|
return {
|
|
111
125
|
branch: (sections[0] ?? '').trim(),
|
|
112
126
|
currentHead: (sections[1] ?? '').trim(),
|
|
@@ -115,7 +129,6 @@ export class GitClient {
|
|
|
115
129
|
reflog: (sections[4] ?? '').trim(),
|
|
116
130
|
diffSinceBase,
|
|
117
131
|
commitsSinceBase,
|
|
118
|
-
mergeBase: mergeBase && /^[0-9a-f]{40}$/.test(mergeBase) ? mergeBase : undefined,
|
|
119
132
|
};
|
|
120
133
|
}
|
|
121
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-client.js","sourceRoot":"","sources":["../../src/collectors/git-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjF,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC;;;GAGG;AACH,MAAM,OAAO,SAAS;IACH,WAAW,CAAS;IAErC,YAAmB,cAAsB,EAAE;QACzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"git-client.js","sourceRoot":"","sources":["../../src/collectors/git-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,7 +87,14 @@ export class GitTracker {
|
|
|
87
87
|
async pollRepo(repoPath, baseSha) {
|
|
88
88
|
const now = Date.now();
|
|
89
89
|
const defaultBranchRef = await this.resolveDefaultBranchRef(repoPath);
|
|
90
|
-
|
|
90
|
+
// Evidence base: fresh merge-base with the default branch (rebase-stable
|
|
91
|
+
// branch totals — resolved every tick on purpose), falling back to the
|
|
92
|
+
// session's sticky baseSha when no default branch is available.
|
|
93
|
+
const mergeBaseSha = defaultBranchRef
|
|
94
|
+
? await this.gitClient.getMergeBase(repoPath, defaultBranchRef)
|
|
95
|
+
: null;
|
|
96
|
+
const evidenceBase = mergeBaseSha ?? baseSha ?? undefined;
|
|
97
|
+
const raw = await this.gitClient.fetchRepoState(repoPath, evidenceBase);
|
|
91
98
|
// Detached HEAD shows as commit SHA (7-40 hex chars); skip to avoid disrupting sessions
|
|
92
99
|
if (raw.branch === 'HEAD' || /^[0-9a-f]{7,40}$/.test(raw.branch)) {
|
|
93
100
|
return null;
|
|
@@ -114,9 +121,10 @@ export class GitTracker {
|
|
|
114
121
|
}
|
|
115
122
|
// Determine repo state based on signals
|
|
116
123
|
this.updateRepoState(state, task, delta, newEntries);
|
|
117
|
-
// PR-equivalent evidence snapshot (only when
|
|
118
|
-
// git accepted it — fetchRepoState transparently drops it on bad-ref).
|
|
124
|
+
// PR-equivalent evidence snapshot (only when an evidence base was supplied
|
|
125
|
+
// AND git accepted it — fetchRepoState transparently drops it on bad-ref).
|
|
119
126
|
let evidenceSnapshot = null;
|
|
127
|
+
let evidenceBasis = null;
|
|
120
128
|
if (raw.diffSinceBase !== undefined && raw.commitsSinceBase !== undefined) {
|
|
121
129
|
const { added, removed, fileCount } = SnapshotParser.parseDiffNumstatTotals(raw.diffSinceBase);
|
|
122
130
|
const commits = parseInt(raw.commitsSinceBase, 10);
|
|
@@ -126,6 +134,7 @@ export class GitTracker {
|
|
|
126
134
|
linesRemoved: removed,
|
|
127
135
|
filesChanged: fileCount,
|
|
128
136
|
};
|
|
137
|
+
evidenceBasis = mergeBaseSha !== null ? 'merge_base' : 'base_sha';
|
|
129
138
|
}
|
|
130
139
|
return {
|
|
131
140
|
repoPath,
|
|
@@ -136,7 +145,8 @@ export class GitTracker {
|
|
|
136
145
|
newReflogEntries: newEntries,
|
|
137
146
|
currentHead: raw.currentHead,
|
|
138
147
|
evidenceSnapshot,
|
|
139
|
-
|
|
148
|
+
evidenceBasis,
|
|
149
|
+
mergeBaseSha,
|
|
140
150
|
};
|
|
141
151
|
}
|
|
142
152
|
/**
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"git-tracker.js","sourceRoot":"","sources":["../../src/collectors/git-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,13 @@ export class ReflogParser {
|
|
|
29
29
|
if (isNaN(ts))
|
|
30
30
|
continue;
|
|
31
31
|
let type;
|
|
32
|
-
if (action.startsWith('
|
|
32
|
+
if (action.startsWith('rebase')) {
|
|
33
|
+
// Catches "rebase (start|pick|finish): ..." and "rebase -i (start): ..."
|
|
34
|
+
// — checked before 'commit' since rebase picks also produce commits but
|
|
35
|
+
// we want to treat the whole sequence as a single rebase event.
|
|
36
|
+
type = 'rebase';
|
|
37
|
+
}
|
|
38
|
+
else if (action.startsWith('commit')) {
|
|
33
39
|
type = 'commit';
|
|
34
40
|
}
|
|
35
41
|
else if (action.startsWith('checkout')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflog-parser.js","sourceRoot":"","sources":["../../src/collectors/reflog-parser.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,YAAY;IACN,WAAW,CAAS;IAErC,YAAmB,WAAmB;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;OAKG;IACI,YAAY,CAAC,IAAY;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,MAAM,OAAO,GAAqD,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACtB,qEAAqE,CACtE,CAAC;YACF,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,yDAAyD;YACzD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,KAAK,CAAC,EAAE,CAAC;gBAAE,SAAS;YAExB,IAAI,IAAqB,CAAC;YAC1B,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzC,IAAI,GAAG,UAAU,CAAC;YACpB,CAAC;iBAAM,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,IAAI,GAAG,OAAO,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,OAAO,CAAC;YACjB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,4EAA4E;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAEjE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACI,qBAAqB,CAAC,OAAe;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACI,sBAAsB,CAAC,OAAe;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"reflog-parser.js","sourceRoot":"","sources":["../../src/collectors/reflog-parser.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,YAAY;IACN,WAAW,CAAS;IAErC,YAAmB,WAAmB;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;OAKG;IACI,YAAY,CAAC,IAAY;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,MAAM,OAAO,GAAqD,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACtB,qEAAqE,CACtE,CAAC;YACF,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,yDAAyD;YACzD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,KAAK,CAAC,EAAE,CAAC;gBAAE,SAAS;YAExB,IAAI,IAAqB,CAAC;YAC1B,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,yEAAyE;gBACzE,wEAAwE;gBACxE,gEAAgE;gBAChE,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvC,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzC,IAAI,GAAG,UAAU,CAAC;YACpB,CAAC;iBAAM,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,IAAI,GAAG,OAAO,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,OAAO,CAAC;YACjB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,4EAA4E;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAEjE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACI,qBAAqB,CAAC,OAAe;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACI,sBAAsB,CAAC,OAAe;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -3,28 +3,66 @@ import type { TickInput, EvaluatorResult } from './types.js';
|
|
|
3
3
|
* Pure computational class — no I/O.
|
|
4
4
|
* Maintains per-session activity score and EMA, determines cross-repo leadership.
|
|
5
5
|
*
|
|
6
|
-
* Per-session
|
|
6
|
+
* Per-session maxTicks comes from the caller (resolved from sensitivity); the
|
|
7
|
+
* touch floor is derived from it via STAMINA_FLOOR_RATIO.
|
|
7
8
|
*/
|
|
8
9
|
export declare class ActivityEvaluator {
|
|
9
10
|
private readonly emaAlpha;
|
|
11
|
+
private readonly attentionAlpha;
|
|
10
12
|
private readonly commitBonus;
|
|
13
|
+
private readonly linesPerGainTick;
|
|
11
14
|
private readonly state;
|
|
15
|
+
private lastLeaderId;
|
|
12
16
|
constructor(diffPollSeconds: number);
|
|
13
17
|
/**
|
|
14
18
|
* Process one tick for all sessions. Returns scores and leader.
|
|
15
19
|
* Manually paused sessions must NOT be included in ticks (caller responsibility).
|
|
16
20
|
*
|
|
17
|
-
* Scoring algorithm:
|
|
21
|
+
* Scoring algorithm ("stamina"):
|
|
18
22
|
* 1. EMA — binary moving average of activity (1 if dynamics/commit, 0 otherwise)
|
|
19
|
-
* 2.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
23
|
+
* 2. Touch floor — any active tick lifts score to STAMINA_FLOOR_RATIO * maxTicks.
|
|
24
|
+
* A single stray keystroke buys a small leash (Normal: ~7.5 min), nothing more.
|
|
25
|
+
* 3. Frequency gain — ema * FREQUENCY_GAIN_MAX per active tick. Only a sustained
|
|
26
|
+
* tick-after-tick stream of updates (EMA → 1) outpaces decay on its own.
|
|
27
|
+
* 4. Volume gain — deltaMagnitude / linesPerGainTick (STAMINA_LINES_PER_MINUTE,
|
|
28
|
+
* tick-normalized), capped at VOLUME_GAIN_MAX, so a bulk paste can't fill
|
|
29
|
+
* the bar in one tick.
|
|
22
30
|
* 5. Commit bonus — instant COMMIT_BONUS_SECONDS / diffPollSeconds ticks
|
|
23
|
-
* 6. Cap score at
|
|
24
|
-
* 7.
|
|
25
|
-
*
|
|
31
|
+
* 6. Cap score at maxTicks (fixed ceiling)
|
|
32
|
+
* 7. Decay — BASE_DECAY on active ticks; on idle ticks BASE_DECAY +
|
|
33
|
+
* DECAY_BOOST × EMA (asymmetric fade: the denser the recent work, the
|
|
34
|
+
* faster the buffer cools once activity stops — a full Normal bar drains
|
|
35
|
+
* in ~15 min after an abrupt stop, not 45)
|
|
36
|
+
* 8. score == 0 → idle timeout → eligible for auto-pause (unless ignoreIdleTimeout)
|
|
37
|
+
*
|
|
38
|
+
* Leadership is driven by a separate short-window attention EMA (~2 min),
|
|
39
|
+
* not by the stamina score — see pickLeader. This keeps repo handover fast
|
|
40
|
+
* (~2 min) regardless of how full the bars are, while a single stray touch
|
|
41
|
+
* can never steal leadership.
|
|
42
|
+
*
|
|
43
|
+
* Net effect (30s ticks, Normal 15–45 min): light sporadic edits hover at the
|
|
44
|
+
* floor; a relentless every-tick stream saturates in ~40 min; ~10+ lines per
|
|
45
|
+
* tick saturates in ~15 min; reaching 100% is intentionally hard.
|
|
26
46
|
*/
|
|
27
47
|
processAllTicks(ticks: readonly TickInput[]): EvaluatorResult;
|
|
48
|
+
/**
|
|
49
|
+
* Leadership by attention EMA with takeover hysteresis.
|
|
50
|
+
*
|
|
51
|
+
* Candidates: sessions with score > 0. The current leader keeps the lead
|
|
52
|
+
* until a challenger's attention exceeds it by more than attentionAlpha —
|
|
53
|
+
* one isolated touch's worth — so a stray save can never steal leadership
|
|
54
|
+
* by construction, while a genuine switch (old repo idle, new repo active
|
|
55
|
+
* tick after tick) hands over within ~2 minutes. Without a defending
|
|
56
|
+
* leader the most-attended candidate wins (normalizedScore as tiebreak).
|
|
57
|
+
*/
|
|
58
|
+
private pickLeader;
|
|
59
|
+
/**
|
|
60
|
+
* Ticks until score hits 0 with no further activity. With asymmetric decay
|
|
61
|
+
* this is no longer score/BASE_DECAY — simulate the fade (EMA cools too,
|
|
62
|
+
* so the drain slows over time). Bounded by the score itself (decay ≥ 1),
|
|
63
|
+
* i.e. at most maxTicks iterations.
|
|
64
|
+
*/
|
|
65
|
+
private estimateIdleTicks;
|
|
28
66
|
/** Remove session state on close */
|
|
29
67
|
removeSession(sessionId: string): void;
|
|
30
68
|
/** Clear all state (day boundary, daemon stop) */
|
|
@@ -1,88 +1,165 @@
|
|
|
1
|
-
import { EMA_WINDOW_MINUTES,
|
|
1
|
+
import { EMA_WINDOW_MINUTES, ATTENTION_WINDOW_MINUTES, STAMINA_FLOOR_RATIO, FREQUENCY_GAIN_MAX, STAMINA_LINES_PER_MINUTE, VOLUME_GAIN_MAX, COMMIT_BONUS_SECONDS, BASE_DECAY, DECAY_BOOST, } from './constants.js';
|
|
2
2
|
/**
|
|
3
3
|
* Pure computational class — no I/O.
|
|
4
4
|
* Maintains per-session activity score and EMA, determines cross-repo leadership.
|
|
5
5
|
*
|
|
6
|
-
* Per-session
|
|
6
|
+
* Per-session maxTicks comes from the caller (resolved from sensitivity); the
|
|
7
|
+
* touch floor is derived from it via STAMINA_FLOOR_RATIO.
|
|
7
8
|
*/
|
|
8
9
|
export class ActivityEvaluator {
|
|
9
10
|
emaAlpha;
|
|
11
|
+
attentionAlpha;
|
|
10
12
|
commitBonus;
|
|
13
|
+
linesPerGainTick;
|
|
11
14
|
state = new Map();
|
|
15
|
+
lastLeaderId = null;
|
|
12
16
|
constructor(diffPollSeconds) {
|
|
13
17
|
const emaWindowTicks = EMA_WINDOW_MINUTES * 60 / diffPollSeconds;
|
|
14
18
|
this.emaAlpha = 1 / emaWindowTicks;
|
|
19
|
+
const attentionWindowTicks = ATTENTION_WINDOW_MINUTES * 60 / diffPollSeconds;
|
|
20
|
+
this.attentionAlpha = 1 / attentionWindowTicks;
|
|
15
21
|
this.commitBonus = COMMIT_BONUS_SECONDS / diffPollSeconds;
|
|
22
|
+
this.linesPerGainTick = STAMINA_LINES_PER_MINUTE * diffPollSeconds / 60;
|
|
16
23
|
}
|
|
17
24
|
/**
|
|
18
25
|
* Process one tick for all sessions. Returns scores and leader.
|
|
19
26
|
* Manually paused sessions must NOT be included in ticks (caller responsibility).
|
|
20
27
|
*
|
|
21
|
-
* Scoring algorithm:
|
|
28
|
+
* Scoring algorithm ("stamina"):
|
|
22
29
|
* 1. EMA — binary moving average of activity (1 if dynamics/commit, 0 otherwise)
|
|
23
|
-
* 2.
|
|
24
|
-
*
|
|
25
|
-
*
|
|
30
|
+
* 2. Touch floor — any active tick lifts score to STAMINA_FLOOR_RATIO * maxTicks.
|
|
31
|
+
* A single stray keystroke buys a small leash (Normal: ~7.5 min), nothing more.
|
|
32
|
+
* 3. Frequency gain — ema * FREQUENCY_GAIN_MAX per active tick. Only a sustained
|
|
33
|
+
* tick-after-tick stream of updates (EMA → 1) outpaces decay on its own.
|
|
34
|
+
* 4. Volume gain — deltaMagnitude / linesPerGainTick (STAMINA_LINES_PER_MINUTE,
|
|
35
|
+
* tick-normalized), capped at VOLUME_GAIN_MAX, so a bulk paste can't fill
|
|
36
|
+
* the bar in one tick.
|
|
26
37
|
* 5. Commit bonus — instant COMMIT_BONUS_SECONDS / diffPollSeconds ticks
|
|
27
|
-
* 6. Cap score at
|
|
28
|
-
* 7.
|
|
29
|
-
*
|
|
38
|
+
* 6. Cap score at maxTicks (fixed ceiling)
|
|
39
|
+
* 7. Decay — BASE_DECAY on active ticks; on idle ticks BASE_DECAY +
|
|
40
|
+
* DECAY_BOOST × EMA (asymmetric fade: the denser the recent work, the
|
|
41
|
+
* faster the buffer cools once activity stops — a full Normal bar drains
|
|
42
|
+
* in ~15 min after an abrupt stop, not 45)
|
|
43
|
+
* 8. score == 0 → idle timeout → eligible for auto-pause (unless ignoreIdleTimeout)
|
|
44
|
+
*
|
|
45
|
+
* Leadership is driven by a separate short-window attention EMA (~2 min),
|
|
46
|
+
* not by the stamina score — see pickLeader. This keeps repo handover fast
|
|
47
|
+
* (~2 min) regardless of how full the bars are, while a single stray touch
|
|
48
|
+
* can never steal leadership.
|
|
49
|
+
*
|
|
50
|
+
* Net effect (30s ticks, Normal 15–45 min): light sporadic edits hover at the
|
|
51
|
+
* floor; a relentless every-tick stream saturates in ~40 min; ~10+ lines per
|
|
52
|
+
* tick saturates in ~15 min; reaching 100% is intentionally hard.
|
|
30
53
|
*/
|
|
31
54
|
processAllTicks(ticks) {
|
|
32
55
|
const scores = new Map();
|
|
33
56
|
for (const tick of ticks) {
|
|
34
57
|
const st = this.getOrCreateState(tick.sessionId);
|
|
35
58
|
const hasActivity = tick.signals.hasDynamics || tick.signals.hasCommit;
|
|
36
|
-
// 1. EMA
|
|
59
|
+
// 1. EMA updates (binary input): slow EMA = activity frequency for the
|
|
60
|
+
// stamina formula, fast attention EMA = leadership signal.
|
|
37
61
|
st.ema = this.emaAlpha * (hasActivity ? 1 : 0) + (1 - this.emaAlpha) * st.ema;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
st.score +=
|
|
62
|
+
st.attention = this.attentionAlpha * (hasActivity ? 1 : 0) + (1 - this.attentionAlpha) * st.attention;
|
|
63
|
+
if (hasActivity) {
|
|
64
|
+
// 2. Touch floor
|
|
65
|
+
st.score = Math.max(st.score, tick.maxTicks * STAMINA_FLOOR_RATIO);
|
|
66
|
+
// 3. Frequency gain
|
|
67
|
+
st.score += Math.min(1, st.ema) * FREQUENCY_GAIN_MAX;
|
|
68
|
+
// 4. Volume gain
|
|
69
|
+
st.score += Math.min(VOLUME_GAIN_MAX, tick.signals.deltaMagnitude / this.linesPerGainTick);
|
|
70
|
+
// 5. Commit bonus
|
|
71
|
+
if (tick.signals.hasCommit) {
|
|
72
|
+
st.score += this.commitBonus;
|
|
73
|
+
}
|
|
74
|
+
// 6. Cap at the sensitivity ceiling
|
|
75
|
+
st.score = Math.min(st.score, tick.maxTicks);
|
|
44
76
|
}
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
st.score = Math.min(st.score, dynamicMaxScore);
|
|
51
|
-
// 6. Decay
|
|
52
|
-
st.score = Math.max(0, st.score - BASE_DECAY);
|
|
77
|
+
// 7. Decay — asymmetric: idle ticks after dense work drain faster
|
|
78
|
+
const decay = hasActivity
|
|
79
|
+
? BASE_DECAY
|
|
80
|
+
: BASE_DECAY + DECAY_BOOST * Math.min(1, st.ema);
|
|
81
|
+
st.score = Math.max(0, st.score - decay);
|
|
53
82
|
// Build result for this session
|
|
54
|
-
const normalizedScore =
|
|
83
|
+
const normalizedScore = tick.maxTicks > 0 ? st.score / tick.maxTicks : 0;
|
|
55
84
|
scores.set(tick.sessionId, {
|
|
56
85
|
score: st.score,
|
|
57
|
-
maxScore:
|
|
86
|
+
maxScore: tick.maxTicks,
|
|
58
87
|
normalizedScore,
|
|
59
88
|
ema: st.ema,
|
|
89
|
+
etaTicks: this.estimateIdleTicks(st),
|
|
60
90
|
isIdleTimeout: st.score === 0 && !tick.ignoreIdleTimeout,
|
|
61
91
|
});
|
|
62
92
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
93
|
+
const leaderId = this.pickLeader(scores);
|
|
94
|
+
this.lastLeaderId = leaderId;
|
|
95
|
+
return { scores, leaderId };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Leadership by attention EMA with takeover hysteresis.
|
|
99
|
+
*
|
|
100
|
+
* Candidates: sessions with score > 0. The current leader keeps the lead
|
|
101
|
+
* until a challenger's attention exceeds it by more than attentionAlpha —
|
|
102
|
+
* one isolated touch's worth — so a stray save can never steal leadership
|
|
103
|
+
* by construction, while a genuine switch (old repo idle, new repo active
|
|
104
|
+
* tick after tick) hands over within ~2 minutes. Without a defending
|
|
105
|
+
* leader the most-attended candidate wins (normalizedScore as tiebreak).
|
|
106
|
+
*/
|
|
107
|
+
pickLeader(scores) {
|
|
108
|
+
let best = null;
|
|
109
|
+
let bestAttention = -1;
|
|
110
|
+
let bestNorm = -1;
|
|
66
111
|
for (const [sessionId, sessionScore] of scores) {
|
|
67
|
-
if (sessionScore.score
|
|
112
|
+
if (sessionScore.score <= 0)
|
|
113
|
+
continue;
|
|
114
|
+
const attention = this.state.get(sessionId)?.attention ?? 0;
|
|
115
|
+
if (attention > bestAttention || (attention === bestAttention && sessionScore.normalizedScore > bestNorm)) {
|
|
116
|
+
best = sessionId;
|
|
117
|
+
bestAttention = attention;
|
|
68
118
|
bestNorm = sessionScore.normalizedScore;
|
|
69
|
-
leaderId = sessionId;
|
|
70
119
|
}
|
|
71
120
|
}
|
|
72
|
-
|
|
121
|
+
const prev = this.lastLeaderId;
|
|
122
|
+
if (prev !== null && prev !== best && (scores.get(prev)?.score ?? 0) > 0) {
|
|
123
|
+
const prevAttention = this.state.get(prev)?.attention ?? 0;
|
|
124
|
+
if (bestAttention <= prevAttention + this.attentionAlpha) {
|
|
125
|
+
return prev;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return best;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Ticks until score hits 0 with no further activity. With asymmetric decay
|
|
132
|
+
* this is no longer score/BASE_DECAY — simulate the fade (EMA cools too,
|
|
133
|
+
* so the drain slows over time). Bounded by the score itself (decay ≥ 1),
|
|
134
|
+
* i.e. at most maxTicks iterations.
|
|
135
|
+
*/
|
|
136
|
+
estimateIdleTicks(st) {
|
|
137
|
+
let score = st.score;
|
|
138
|
+
let ema = st.ema;
|
|
139
|
+
let ticks = 0;
|
|
140
|
+
while (score > 0) {
|
|
141
|
+
ema *= 1 - this.emaAlpha;
|
|
142
|
+
score -= BASE_DECAY + DECAY_BOOST * Math.min(1, ema);
|
|
143
|
+
ticks++;
|
|
144
|
+
}
|
|
145
|
+
return ticks;
|
|
73
146
|
}
|
|
74
147
|
/** Remove session state on close */
|
|
75
148
|
removeSession(sessionId) {
|
|
76
149
|
this.state.delete(sessionId);
|
|
150
|
+
if (this.lastLeaderId === sessionId) {
|
|
151
|
+
this.lastLeaderId = null;
|
|
152
|
+
}
|
|
77
153
|
}
|
|
78
154
|
/** Clear all state (day boundary, daemon stop) */
|
|
79
155
|
clear() {
|
|
80
156
|
this.state.clear();
|
|
157
|
+
this.lastLeaderId = null;
|
|
81
158
|
}
|
|
82
159
|
getOrCreateState(sessionId) {
|
|
83
160
|
let st = this.state.get(sessionId);
|
|
84
161
|
if (!st) {
|
|
85
|
-
st = { score: 0, ema: 0 };
|
|
162
|
+
st = { score: 0, ema: 0, attention: 0 };
|
|
86
163
|
this.state.set(sessionId, st);
|
|
87
164
|
}
|
|
88
165
|
return st;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-evaluator.js","sourceRoot":"","sources":["../../src/core/activity-evaluator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"activity-evaluator.js","sourceRoot":"","sources":["../../src/core/activity-evaluator.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -19,9 +19,8 @@ export declare function getSensitivityForRepo(config: AppConfig, repo: string):
|
|
|
19
19
|
* Returns undefined when nothing is configured; the caller takes over.
|
|
20
20
|
*/
|
|
21
21
|
export declare function getConfiguredDefaultBranchName(config: AppConfig, repoPath: string): string | undefined;
|
|
22
|
-
/** Resolve (
|
|
22
|
+
/** Resolve (maxTicks, ignoreIdleTimeout) for evaluator from sensitivity. */
|
|
23
23
|
export declare function resolveSensitivityTicks(level: SensitivityLevel, pollSeconds: number): {
|
|
24
|
-
minTicks: number;
|
|
25
24
|
maxTicks: number;
|
|
26
25
|
ignoreIdleTimeout: boolean;
|
|
27
26
|
};
|
package/dist/core/config.js
CHANGED
|
@@ -182,12 +182,10 @@ export function getConfiguredDefaultBranchName(config, repoPath) {
|
|
|
182
182
|
?? config.defaultBranches?.[repoPath]
|
|
183
183
|
?? config.defaultBranch;
|
|
184
184
|
}
|
|
185
|
-
/** Resolve (
|
|
185
|
+
/** Resolve (maxTicks, ignoreIdleTimeout) for evaluator from sensitivity. */
|
|
186
186
|
export function resolveSensitivityTicks(level, pollSeconds) {
|
|
187
|
-
const t = SENSITIVITY_TIMEOUTS[level];
|
|
188
187
|
return {
|
|
189
|
-
|
|
190
|
-
maxTicks: t.max * 60 / pollSeconds,
|
|
188
|
+
maxTicks: SENSITIVITY_TIMEOUTS[level] * 60 / pollSeconds,
|
|
191
189
|
ignoreIdleTimeout: level === SensitivityLevel.AlwaysOn,
|
|
192
190
|
};
|
|
193
191
|
}
|