instar 1.3.644 → 1.3.646
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/core/OAuthRefresher.d.ts +9 -0
- package/dist/core/OAuthRefresher.d.ts.map +1 -1
- package/dist/core/OAuthRefresher.js +46 -2
- package/dist/core/OAuthRefresher.js.map +1 -1
- package/dist/core/QuotaPoller.d.ts +9 -3
- package/dist/core/QuotaPoller.d.ts.map +1 -1
- package/dist/core/QuotaPoller.js +8 -6
- package/dist/core/QuotaPoller.js.map +1 -1
- package/dist/monitoring/CredentialProvider.d.ts.map +1 -1
- package/dist/monitoring/CredentialProvider.js +23 -3
- package/dist/monitoring/CredentialProvider.js.map +1 -1
- package/dist/scheduler/JobRunHistory.d.ts +22 -0
- package/dist/scheduler/JobRunHistory.d.ts.map +1 -1
- package/dist/scheduler/JobRunHistory.js +141 -10
- package/dist/scheduler/JobRunHistory.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +2 -2
- package/upgrades/1.3.645.md +50 -0
- package/upgrades/1.3.646.md +39 -0
- package/upgrades/eli16/jobrunhistory-incremental-cache.md +43 -0
- package/upgrades/eli16/keychain-residual-async-read.md +29 -0
- package/upgrades/side-effects/jobrunhistory-incremental-cache.md +61 -0
- package/upgrades/side-effects/keychain-residual-async-read.md +70 -0
|
@@ -79,6 +79,15 @@ export interface CredentialStore {
|
|
|
79
79
|
* store omits it.
|
|
80
80
|
*/
|
|
81
81
|
readAsync?(configHome: string): Promise<string | null>;
|
|
82
|
+
/**
|
|
83
|
+
* Optional NON-BLOCKING write. Mirror of `readAsync` for the write half of the refresh
|
|
84
|
+
* read-merge-write: a slow/contended `securityd` keychain WRITE (`add-generic-password`) is an
|
|
85
|
+
* out-of-process spawn that, run synchronously, blocked the event loop just like the read — and
|
|
86
|
+
* the refresh path issues a read AND a write per cycle. When present, `refreshClaudeToken` prefers
|
|
87
|
+
* this so the write yields the loop instead of freezing it. Optional so existing mocks that only
|
|
88
|
+
* implement the sync `write` keep compiling; the refresher falls back to `write` when omitted.
|
|
89
|
+
*/
|
|
90
|
+
writeAsync?(configHome: string, rawJson: string): Promise<boolean>;
|
|
82
91
|
}
|
|
83
92
|
/** POST-capable fetch surface (distinct from QuotaPoller's GET-only FetchImpl). */
|
|
84
93
|
export type RefreshFetch = (url: string, init: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthRefresher.d.ts","sourceRoot":"","sources":["../../src/core/OAuthRefresher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAQH,OAAO,EAAE,qBAAqB,EAAyB,MAAM,4BAA4B,CAAC;AAc1F,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,+CAA+C,CAAC;AAC7E,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,yCAAyC,CAAC;AAK5E,MAAM,MAAM,iBAAiB,GACzB,qBAAqB,GACrB,aAAa,GACb,kBAAkB,GAClB,iBAAiB,GACjB,oBAAoB,GACpB,cAAc,GACd,eAAe,CAAC;AAEpB,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACtE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACpD;;;;;;OAMG;IACH,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"OAuthRefresher.d.ts","sourceRoot":"","sources":["../../src/core/OAuthRefresher.ts"],"names":[],"mappings":"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"}
|
|
@@ -174,6 +174,41 @@ export const defaultCredentialStore = {
|
|
|
174
174
|
return false; // @silent-fallback-ok: file write failed
|
|
175
175
|
}
|
|
176
176
|
},
|
|
177
|
+
/**
|
|
178
|
+
* NON-BLOCKING write: the same `add-generic-password` keychain write as `write` but off the event
|
|
179
|
+
* loop (PROMISIFIED `execFile` on darwin, `fs.promises` on non-darwin). Same args, same 3s timeout,
|
|
180
|
+
* same false-on-error semantics. Lets the refresh write yield a slow `securityd` instead of freezing
|
|
181
|
+
* the loop — the write half of the read-merge-write the QuotaPoller's refresher runs per cycle.
|
|
182
|
+
*/
|
|
183
|
+
async writeAsync(configHome, rawJson) {
|
|
184
|
+
if (process.platform === 'darwin') {
|
|
185
|
+
try {
|
|
186
|
+
await execFileAsync('security', [
|
|
187
|
+
'add-generic-password',
|
|
188
|
+
'-U', // update the existing entry in place
|
|
189
|
+
'-a',
|
|
190
|
+
os.userInfo().username,
|
|
191
|
+
'-s',
|
|
192
|
+
claudeCredentialService(configHome),
|
|
193
|
+
'-w',
|
|
194
|
+
rawJson,
|
|
195
|
+
], { timeout: KEYCHAIN_TIMEOUT_MS });
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return false; // @silent-fallback-ok: keychain write failed / timeout → caller falls to needs-reauth
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
try {
|
|
203
|
+
const p = claudeCredentialFilePath(configHome);
|
|
204
|
+
await fs.promises.mkdir(path.dirname(p), { recursive: true });
|
|
205
|
+
await fs.promises.writeFile(p, rawJson, { mode: 0o600 });
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return false; // @silent-fallback-ok: file write failed
|
|
210
|
+
}
|
|
211
|
+
},
|
|
177
212
|
};
|
|
178
213
|
/** Parse the `claudeAiOauth` block out of a config home's credential store. */
|
|
179
214
|
export function readClaudeOauth(configHome, store = defaultCredentialStore) {
|
|
@@ -223,7 +258,10 @@ export async function refreshClaudeToken(configHome, deps = {}) {
|
|
|
223
258
|
const tokenUrl = deps.tokenUrl ?? CLAUDE_TOKEN_URL;
|
|
224
259
|
const clientId = deps.clientId ?? CLAUDE_CODE_CLIENT_ID;
|
|
225
260
|
const funnel = deps.funnel ?? credentialWriteFunnel;
|
|
226
|
-
|
|
261
|
+
// NON-BLOCKING read: prefer the store's async keychain read so a slow/contended `securityd`
|
|
262
|
+
// yields the event loop instead of freezing it (this runs per-account on the QuotaPoller timer).
|
|
263
|
+
// Falls back to the sync `read` for any store that doesn't implement `readAsync` (test mocks).
|
|
264
|
+
const raw = store.readAsync ? await store.readAsync(configHome) : store.read(configHome);
|
|
227
265
|
if (!raw)
|
|
228
266
|
return { ok: false, reason: 'read-failed' };
|
|
229
267
|
let parsed;
|
|
@@ -291,7 +329,13 @@ export async function refreshClaudeToken(configHome, deps = {}) {
|
|
|
291
329
|
// NOT a corruption — it is "busy, retry": surface 'write-skipped' so the QuotaPoller treats it
|
|
292
330
|
// as no-snapshot-this-cycle, NEVER needs-reauth. The exchange already succeeded; the existing
|
|
293
331
|
// (still-valid) credential is untouched.
|
|
294
|
-
|
|
332
|
+
// NON-BLOCKING write: prefer the store's async keychain write (off the event loop) so the write
|
|
333
|
+
// half of this read-merge-write yields a slow `securityd` instead of freezing the loop. Falls back
|
|
334
|
+
// to the sync `write` for any store that doesn't implement `writeAsync` (test mocks). The funnel's
|
|
335
|
+
// per-slot lock already serializes against a concurrent swap/refresh on the SAME slot regardless.
|
|
336
|
+
const writeOutcome = await funnel.withSlotLock(credentialSlotKey(configHome), () => store.writeAsync
|
|
337
|
+
? store.writeAsync(configHome, JSON.stringify(updatedRaw))
|
|
338
|
+
: store.write(configHome, JSON.stringify(updatedRaw)));
|
|
295
339
|
if (!writeOutcome.ran) {
|
|
296
340
|
return { ok: false, reason: 'write-skipped' };
|
|
297
341
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthRefresher.js","sourceRoot":"","sources":["../../src/core/OAuthRefresher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAyB,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAE1F,qGAAqG;AACrG,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,iFAAiF;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,4CAA4C,CAAC;AAC7E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,qBAAqB,GAAG,sCAAsC,CAAC;AAE5E,MAAM,aAAa,GAAG,YAAY,CAAC;AACnC,MAAM,cAAc,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"OAuthRefresher.js","sourceRoot":"","sources":["../../src/core/OAuthRefresher.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,8 +34,14 @@
|
|
|
34
34
|
import type { SubscriptionPool, SubscriptionAccount, AccountQuotaSnapshot } from './SubscriptionPool.js';
|
|
35
35
|
import { type RefreshResult } from './OAuthRefresher.js';
|
|
36
36
|
import type { CredentialLocationGate } from './CredentialLocationGate.js';
|
|
37
|
-
/**
|
|
38
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Injectable token resolver — returns an account's OAuth access token or null.
|
|
39
|
+
* The default (`defaultTokenResolver`) is ASYNC so the per-account keychain read happens OFF the
|
|
40
|
+
* event loop (a slow/contended `securityd` read used to freeze the loop every poll cycle — the
|
|
41
|
+
* dashboard-flap / false-sleep residual). `pollAccount` `await`s the result, so a SYNC resolver
|
|
42
|
+
* (e.g. a test stub returning a plain string) is equally valid — hence the union return type.
|
|
43
|
+
*/
|
|
44
|
+
export type TokenResolver = (account: SubscriptionAccount) => string | null | Promise<string | null>;
|
|
39
45
|
/**
|
|
40
46
|
* Injectable account refresher — exchanges a config home's stored refresh token
|
|
41
47
|
* for a fresh access token (see OAuthRefresher). Defaults to the real keychain/
|
|
@@ -95,7 +101,7 @@ export interface BurnRate {
|
|
|
95
101
|
* is still returned here (it's a valid string) — expiry is detected by the usage
|
|
96
102
|
* read's 401 and recovered by the refresher, not by this resolver.
|
|
97
103
|
*/
|
|
98
|
-
export declare function defaultTokenResolver(account: SubscriptionAccount): string | null
|
|
104
|
+
export declare function defaultTokenResolver(account: SubscriptionAccount): Promise<string | null>;
|
|
99
105
|
/**
|
|
100
106
|
* Read the account email (`oauthAccount.emailAddress`) Claude Code records for a
|
|
101
107
|
* config home. This is a PUBLIC account identifier (not a secret) — it lets the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuotaPoller.d.ts","sourceRoot":"","sources":["../../src/core/QuotaPoller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAE1E
|
|
1
|
+
{"version":3,"file":"QuotaPoller.d.ts","sourceRoot":"","sources":["../../src/core/QuotaPoller.ts"],"names":[],"mappings":"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"}
|
package/dist/core/QuotaPoller.js
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
*/
|
|
34
34
|
import fs from 'node:fs';
|
|
35
35
|
import path from 'node:path';
|
|
36
|
-
import {
|
|
36
|
+
import { readClaudeOauthAsync, refreshClaudeToken, expandHome, } from './OAuthRefresher.js';
|
|
37
37
|
const USAGE_URL = 'https://api.anthropic.com/api/oauth/usage';
|
|
38
38
|
/**
|
|
39
39
|
* Resolve a claude-code account's OAuth access token from its config home,
|
|
@@ -44,13 +44,15 @@ const USAGE_URL = 'https://api.anthropic.com/api/oauth/usage';
|
|
|
44
44
|
* is still returned here (it's a valid string) — expiry is detected by the usage
|
|
45
45
|
* read's 401 and recovered by the refresher, not by this resolver.
|
|
46
46
|
*/
|
|
47
|
-
export function defaultTokenResolver(account) {
|
|
47
|
+
export async function defaultTokenResolver(account) {
|
|
48
48
|
if (account.provider !== 'anthropic' || account.framework !== 'claude-code') {
|
|
49
49
|
return null;
|
|
50
50
|
}
|
|
51
|
-
// Single periodic
|
|
52
|
-
//
|
|
53
|
-
|
|
51
|
+
// Single periodic keychain read per poll cycle, bounded by OAuthRefresher's 3s timeout AND run
|
|
52
|
+
// OFF the event loop via `readClaudeOauthAsync` (promisified `security` spawn). The earlier sync
|
|
53
|
+
// read blocked the loop for the full spawn duration each cycle — under multi-agent `securityd`
|
|
54
|
+
// contention that was seconds, and across N accounts a burst (the residual freeze this fixes).
|
|
55
|
+
const oauth = await readClaudeOauthAsync(account.configHome);
|
|
54
56
|
const tok = oauth?.accessToken;
|
|
55
57
|
return typeof tok === 'string' && tok.startsWith('sk-ant-oat') ? tok : null;
|
|
56
58
|
}
|
|
@@ -239,7 +241,7 @@ export class QuotaPoller {
|
|
|
239
241
|
// so a swap mid-poll can't read/refresh/flag the wrong tenant. account.id is preserved (only
|
|
240
242
|
// the slot home moves), so pool.update + logging still name the right account.
|
|
241
243
|
const slotAccount = this.accountForReads(account);
|
|
242
|
-
const token = this.tokenResolver(slotAccount);
|
|
244
|
+
const token = await this.tokenResolver(slotAccount);
|
|
243
245
|
if (!token) {
|
|
244
246
|
this.logger.warn(`[QuotaPoller] no resolvable token for account ${account.id} — skipping`);
|
|
245
247
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuotaPoller.js","sourceRoot":"","sources":["../../src/core/QuotaPoller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"QuotaPoller.js","sourceRoot":"","sources":["../../src/core/QuotaPoller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CredentialProvider.d.ts","sourceRoot":"","sources":["../../src/monitoring/CredentialProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"CredentialProvider.d.ts","sourceRoot":"","sources":["../../src/monitoring/CredentialProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,11 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Part of the Instar Quota Migration spec (Phase 1).
|
|
9
9
|
*/
|
|
10
|
-
import { execFileSync } from 'node:child_process';
|
|
10
|
+
import { execFile, execFileSync } from 'node:child_process';
|
|
11
11
|
import fs from 'node:fs';
|
|
12
12
|
import os from 'node:os';
|
|
13
13
|
import path from 'node:path';
|
|
14
|
+
import { promisify } from 'node:util';
|
|
14
15
|
import { SafeFsExecutor } from '../core/SafeFsExecutor.js';
|
|
15
16
|
import { credentialWriteFunnel, } from '../core/CredentialWriteFunnel.js';
|
|
16
17
|
import { credentialSlotKey } from '../core/OAuthRefresher.js';
|
|
@@ -38,6 +39,14 @@ export function redactEmail(email) {
|
|
|
38
39
|
}
|
|
39
40
|
// ── Keychain Provider (macOS) ───────────────────────────────────────
|
|
40
41
|
const KEYCHAIN_SERVICE = 'Claude Code-credentials';
|
|
42
|
+
/**
|
|
43
|
+
* Promisified async exec for the NON-BLOCKING keychain read. The macOS keychain read is an
|
|
44
|
+
* out-of-process `security` spawn; run SYNCHRONOUSLY (`execFileSync`) it blocks the event loop for
|
|
45
|
+
* the whole spawn — under multi-agent `securityd` contention that was seconds every QuotaCollector
|
|
46
|
+
* poll cycle (the dashboard-flap / false-sleep residual). `readCredentials` (the polled read on the
|
|
47
|
+
* collection-cycle timer) uses this so the read yields the loop instead of freezing it.
|
|
48
|
+
*/
|
|
49
|
+
const execFileAsync = promisify(execFile);
|
|
41
50
|
export class KeychainCredentialProvider {
|
|
42
51
|
platform = 'darwin';
|
|
43
52
|
securityLevel = 'os-encrypted';
|
|
@@ -47,8 +56,19 @@ export class KeychainCredentialProvider {
|
|
|
47
56
|
}
|
|
48
57
|
async readCredentials() {
|
|
49
58
|
try {
|
|
50
|
-
|
|
51
|
-
|
|
59
|
+
// NON-BLOCKING keychain read (promisified `execFile`) so a slow/contended `securityd` yields
|
|
60
|
+
// the event loop instead of freezing it. `readCredentials` is already async (callers await it);
|
|
61
|
+
// the prior `execFileSync` made the `async` a lie — it blocked the loop for the spawn duration
|
|
62
|
+
// on the QuotaCollector poll timer. Same args + same 10s timeout + same null-on-error semantics.
|
|
63
|
+
const { stdout } = await execFileAsync('security', ['find-generic-password', '-s', KEYCHAIN_SERVICE, '-w'], { encoding: 'utf-8', timeout: 10000 });
|
|
64
|
+
// RULE 3: EXEMPT — this parses our OWN credential store (the `Claude Code-credentials`
|
|
65
|
+
// keychain entry the agent itself owns, fixed `claudeAiOauth` schema), NOT an evolving
|
|
66
|
+
// upstream UI/log we detect state from. It is fail-SAFE (any parse error → the `catch`
|
|
67
|
+
// returns null → caller treats it as no-creds/needs-reauth) and cross-checked downstream
|
|
68
|
+
// (a stale/wrong token surfaces as a 401 → needs-reauth, never silent corruption). The
|
|
69
|
+
// async conversion is behavior-preserving; the parse itself is unchanged from the prior
|
|
70
|
+
// (already-merged) sync read.
|
|
71
|
+
const data = JSON.parse(stdout.trim());
|
|
52
72
|
const oauth = data.claudeAiOauth;
|
|
53
73
|
if (!oauth?.accessToken)
|
|
54
74
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CredentialProvider.js","sourceRoot":"","sources":["../../src/monitoring/CredentialProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"CredentialProvider.js","sourceRoot":"","sources":["../../src/monitoring/CredentialProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -104,6 +104,9 @@ export declare class JobRunHistory {
|
|
|
104
104
|
private ledgerDir;
|
|
105
105
|
private file;
|
|
106
106
|
private machineId;
|
|
107
|
+
private cachedRuns;
|
|
108
|
+
private cachedSize;
|
|
109
|
+
private cachedMtimeMs;
|
|
107
110
|
constructor(stateDir: string);
|
|
108
111
|
setMachineId(machineId: string): void;
|
|
109
112
|
/**
|
|
@@ -219,6 +222,25 @@ export declare class JobRunHistory {
|
|
|
219
222
|
* a degradation event is reported. Essential fields are always preserved.
|
|
220
223
|
*/
|
|
221
224
|
private applyRowSizeCap;
|
|
225
|
+
/**
|
|
226
|
+
* Parse a JSONL string into JobRun rows, skipping torn/corrupt lines
|
|
227
|
+
* (matches the long-standing readLines convention — a corrupt line reads as
|
|
228
|
+
* absent and is repaired on the next compaction/append).
|
|
229
|
+
*/
|
|
230
|
+
private parseJsonl;
|
|
231
|
+
/**
|
|
232
|
+
* Read all entries — cache-aware. Returns the parsed rows in file (append)
|
|
233
|
+
* order. The result is the SAME as a full readFileSync+parse, but the
|
|
234
|
+
* per-call cost is O(bytes-appended-since-last-read), not O(file-size):
|
|
235
|
+
*
|
|
236
|
+
* - file unchanged (size + mtime match the cache) → return the cache, no IO.
|
|
237
|
+
* - file grew with an intact prefix → read ONLY the appended tail and merge.
|
|
238
|
+
* - file shrank / was rewritten (compaction, external truncation) → one
|
|
239
|
+
* full re-read (rare).
|
|
240
|
+
*
|
|
241
|
+
* On any read error the cache is cleared and an empty list is returned (the
|
|
242
|
+
* historical fail-safe).
|
|
243
|
+
*/
|
|
222
244
|
private readLines;
|
|
223
245
|
}
|
|
224
246
|
//# sourceMappingURL=JobRunHistory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobRunHistory.d.ts","sourceRoot":"","sources":["../../src/scheduler/JobRunHistory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,yBAAyB;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,sDAAsD;IACtD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,sDAAsD;IACtD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,MAAM;IACrB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB;IACxB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;IACtE,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAExC;iFAC6E;IAC7E,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IACtC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;8CAE0C;IAC1C,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC;IACtC,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;gEAC4D;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;0CACsC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AAsBD,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAuB;
|
|
1
|
+
{"version":3,"file":"JobRunHistory.d.ts","sourceRoot":"","sources":["../../src/scheduler/JobRunHistory.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,29 @@ export class JobRunHistory {
|
|
|
39
39
|
ledgerDir;
|
|
40
40
|
file;
|
|
41
41
|
machineId = null;
|
|
42
|
+
// ── Event-loop-freeze fix: incremental in-memory cache of parsed runs ──
|
|
43
|
+
//
|
|
44
|
+
// job-runs.jsonl is an append-only ledger that grows to tens of MB. Every
|
|
45
|
+
// read operation (findRun, recordCompletion, recordReflection, recordHandoff,
|
|
46
|
+
// query, stats, allStats, getLastHandoff) used to call readLines(), which did
|
|
47
|
+
// a SYNCHRONOUS full-file readFileSync + per-line JSON.parse on every call.
|
|
48
|
+
// The scheduler calls these on every job completion, on the wake-reaper tick,
|
|
49
|
+
// and on every job spawn — and the dashboard polls history routes — so a
|
|
50
|
+
// 13MB ledger blocked the event loop for 13-16s, repeatedly. A live
|
|
51
|
+
// /usr/bin/sample caught ~39% of main-thread time in JsonParser.
|
|
52
|
+
//
|
|
53
|
+
// The ledger is single-writer-per-process for JobRun rows (this instance),
|
|
54
|
+
// but a SECOND writer exists in-process — MigrationLedger.appendMigrationEvent
|
|
55
|
+
// appends `migration.*` rows to the SAME file. So the cache is validated
|
|
56
|
+
// against the file's (size, mtimeMs) and, when the file only GREW with an
|
|
57
|
+
// intact prefix, only the appended TAIL is read+parsed (O(delta), not O(13MB)).
|
|
58
|
+
// A shrink/truncation (compaction by another path, or external rewrite) falls
|
|
59
|
+
// back to a full re-read. This preserves the existing "JSONL append-only,
|
|
60
|
+
// dedup last-entry-per-runId, skip torn lines" semantics exactly — it only
|
|
61
|
+
// removes the per-call full parse.
|
|
62
|
+
cachedRuns = null;
|
|
63
|
+
cachedSize = 0;
|
|
64
|
+
cachedMtimeMs = 0;
|
|
42
65
|
constructor(stateDir) {
|
|
43
66
|
this.ledgerDir = path.join(stateDir, 'ledger');
|
|
44
67
|
this.file = path.join(this.ledgerDir, 'job-runs.jsonl');
|
|
@@ -340,13 +363,52 @@ export class JobRunHistory {
|
|
|
340
363
|
deduped.sort((a, b) => a.startedAt.localeCompare(b.startedAt));
|
|
341
364
|
const content = deduped.map(l => JSON.stringify(l)).join('\n') + '\n';
|
|
342
365
|
fs.writeFileSync(this.file, content);
|
|
366
|
+
// The rewrite invalidates the (size, mtime) readLines() just cached.
|
|
367
|
+
// Seed the cache with the deduped set and the post-rewrite stat so the
|
|
368
|
+
// first read after boot is a no-IO cache hit, not a full 13MB re-parse.
|
|
369
|
+
try {
|
|
370
|
+
const stat = fs.statSync(this.file);
|
|
371
|
+
this.cachedRuns = deduped;
|
|
372
|
+
this.cachedSize = stat.size;
|
|
373
|
+
this.cachedMtimeMs = stat.mtimeMs;
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
// @silent-fallback-ok — if the post-compaction stat fails, drop the cache
|
|
377
|
+
// so the next read re-reads the freshly-written file from disk. The
|
|
378
|
+
// compaction itself already succeeded (writeFileSync above); this only
|
|
379
|
+
// governs whether we seed the in-memory cache or rebuild it lazily.
|
|
380
|
+
this.cachedRuns = null;
|
|
381
|
+
this.cachedSize = 0;
|
|
382
|
+
this.cachedMtimeMs = 0;
|
|
383
|
+
}
|
|
343
384
|
console.log(`[JobRunHistory] Compacted ${removed} duplicate entries (${deduped.length} unique runs preserved)`);
|
|
344
385
|
}
|
|
345
386
|
}
|
|
346
387
|
appendLine(data) {
|
|
347
388
|
try {
|
|
348
389
|
const capped = this.applyRowSizeCap(data);
|
|
349
|
-
|
|
390
|
+
const serialized = JSON.stringify(capped) + '\n';
|
|
391
|
+
fs.appendFileSync(this.file, serialized);
|
|
392
|
+
// Keep the in-memory cache coherent with our own append so the read that
|
|
393
|
+
// typically follows a completion does NOT have to re-stat+tail-read. If
|
|
394
|
+
// the cache isn't populated yet, leave it null — the next read builds it.
|
|
395
|
+
if (this.cachedRuns !== null) {
|
|
396
|
+
this.cachedRuns.push(capped);
|
|
397
|
+
try {
|
|
398
|
+
const stat = fs.statSync(this.file);
|
|
399
|
+
this.cachedSize = stat.size;
|
|
400
|
+
this.cachedMtimeMs = stat.mtimeMs;
|
|
401
|
+
}
|
|
402
|
+
catch {
|
|
403
|
+
// @silent-fallback-ok — if we can't stat after writing, drop the cache
|
|
404
|
+
// so the NEXT read does a fresh full re-read rather than trusting a
|
|
405
|
+
// stale (size,mtime). This is a self-correcting fail-safe (the data is
|
|
406
|
+
// already durably on disk via appendFileSync), not a lost write.
|
|
407
|
+
this.cachedRuns = null;
|
|
408
|
+
this.cachedSize = 0;
|
|
409
|
+
this.cachedMtimeMs = 0;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
350
412
|
}
|
|
351
413
|
catch (error) {
|
|
352
414
|
console.error(`[JobRunHistory] Failed to write:`, error);
|
|
@@ -389,21 +451,86 @@ export class JobRunHistory {
|
|
|
389
451
|
}
|
|
390
452
|
return truncated;
|
|
391
453
|
}
|
|
454
|
+
/**
|
|
455
|
+
* Parse a JSONL string into JobRun rows, skipping torn/corrupt lines
|
|
456
|
+
* (matches the long-standing readLines convention — a corrupt line reads as
|
|
457
|
+
* absent and is repaired on the next compaction/append).
|
|
458
|
+
*/
|
|
459
|
+
parseJsonl(content) {
|
|
460
|
+
const trimmed = content.trim();
|
|
461
|
+
if (!trimmed)
|
|
462
|
+
return [];
|
|
463
|
+
return trimmed.split('\n').map(line => {
|
|
464
|
+
try {
|
|
465
|
+
return JSON.parse(line);
|
|
466
|
+
}
|
|
467
|
+
catch {
|
|
468
|
+
// @silent-fallback-ok — a torn/corrupt JSONL line reads as absent; the
|
|
469
|
+
// next compaction/append repairs it. This is the long-standing readLines
|
|
470
|
+
// convention (moved here unchanged), not a new degradation.
|
|
471
|
+
return null;
|
|
472
|
+
}
|
|
473
|
+
}).filter(Boolean);
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Read all entries — cache-aware. Returns the parsed rows in file (append)
|
|
477
|
+
* order. The result is the SAME as a full readFileSync+parse, but the
|
|
478
|
+
* per-call cost is O(bytes-appended-since-last-read), not O(file-size):
|
|
479
|
+
*
|
|
480
|
+
* - file unchanged (size + mtime match the cache) → return the cache, no IO.
|
|
481
|
+
* - file grew with an intact prefix → read ONLY the appended tail and merge.
|
|
482
|
+
* - file shrank / was rewritten (compaction, external truncation) → one
|
|
483
|
+
* full re-read (rare).
|
|
484
|
+
*
|
|
485
|
+
* On any read error the cache is cleared and an empty list is returned (the
|
|
486
|
+
* historical fail-safe).
|
|
487
|
+
*/
|
|
392
488
|
readLines() {
|
|
393
|
-
if (!fs.existsSync(this.file))
|
|
489
|
+
if (!fs.existsSync(this.file)) {
|
|
490
|
+
this.cachedRuns = [];
|
|
491
|
+
this.cachedSize = 0;
|
|
492
|
+
this.cachedMtimeMs = 0;
|
|
394
493
|
return [];
|
|
494
|
+
}
|
|
395
495
|
try {
|
|
396
|
-
const
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
496
|
+
const stat = fs.statSync(this.file);
|
|
497
|
+
const size = stat.size;
|
|
498
|
+
const mtimeMs = stat.mtimeMs;
|
|
499
|
+
// Fast path: nothing changed on disk since the last read.
|
|
500
|
+
if (this.cachedRuns !== null && size === this.cachedSize && mtimeMs === this.cachedMtimeMs) {
|
|
501
|
+
return this.cachedRuns;
|
|
502
|
+
}
|
|
503
|
+
// Incremental tail-read: the file only grew and our cached prefix is
|
|
504
|
+
// still valid (no truncation/rewrite). Read just the new bytes.
|
|
505
|
+
if (this.cachedRuns !== null && size > this.cachedSize && this.cachedSize > 0) {
|
|
506
|
+
const fd = fs.openSync(this.file, 'r');
|
|
400
507
|
try {
|
|
401
|
-
|
|
508
|
+
const tailLen = size - this.cachedSize;
|
|
509
|
+
const buf = Buffer.allocUnsafe(tailLen);
|
|
510
|
+
fs.readSync(fd, buf, 0, tailLen, this.cachedSize);
|
|
511
|
+
const tail = buf.toString('utf-8');
|
|
512
|
+
// The cached prefix ended on a newline boundary IFF the byte at
|
|
513
|
+
// cachedSize-1 was '\n'. appendLine always writes a trailing '\n',
|
|
514
|
+
// so a grow that begins mid-line means the previous write was torn;
|
|
515
|
+
// parseJsonl drops that torn fragment safely. Merge the new rows.
|
|
516
|
+
const newRuns = this.parseJsonl(tail);
|
|
517
|
+
if (newRuns.length > 0)
|
|
518
|
+
this.cachedRuns = this.cachedRuns.concat(newRuns);
|
|
519
|
+
this.cachedSize = size;
|
|
520
|
+
this.cachedMtimeMs = mtimeMs;
|
|
521
|
+
return this.cachedRuns;
|
|
402
522
|
}
|
|
403
|
-
|
|
404
|
-
|
|
523
|
+
finally {
|
|
524
|
+
fs.closeSync(fd);
|
|
405
525
|
}
|
|
406
|
-
}
|
|
526
|
+
}
|
|
527
|
+
// Full re-read: first read, or the file shrank / was rewritten.
|
|
528
|
+
const content = fs.readFileSync(this.file, 'utf-8');
|
|
529
|
+
const runs = this.parseJsonl(content);
|
|
530
|
+
this.cachedRuns = runs;
|
|
531
|
+
this.cachedSize = size;
|
|
532
|
+
this.cachedMtimeMs = mtimeMs;
|
|
533
|
+
return runs;
|
|
407
534
|
}
|
|
408
535
|
catch (error) {
|
|
409
536
|
console.error(`[JobRunHistory] Failed to read:`, error);
|
|
@@ -414,6 +541,10 @@ export class JobRunHistory {
|
|
|
414
541
|
reason: `Failed to read ledger: ${error instanceof Error ? error.message : String(error)}`,
|
|
415
542
|
impact: 'Job history queries return empty results',
|
|
416
543
|
});
|
|
544
|
+
// Clear the cache so a transient error doesn't pin a stale view.
|
|
545
|
+
this.cachedRuns = null;
|
|
546
|
+
this.cachedSize = 0;
|
|
547
|
+
this.cachedMtimeMs = 0;
|
|
417
548
|
return [];
|
|
418
549
|
}
|
|
419
550
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobRunHistory.js","sourceRoot":"","sources":["../../src/scheduler/JobRunHistory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JobRunHistory.js","sourceRoot":"","sources":["../../src/scheduler/JobRunHistory.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-06-
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-06-22T19:03:48.553Z",
|
|
5
|
+
"instarVersion": "1.3.646",
|
|
6
6
|
"entryCount": 202,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
The first keychain fix (PR #1248) took the credential-AUDIT keychain read off the event loop. A live
|
|
9
|
+
`/usr/bin/sample` of the running server then found THREE MORE timer-driven synchronous macOS keychain
|
|
10
|
+
reads still blocking the loop — all on the QuotaManager / QuotaPoller poll path, which runs every ~60s
|
|
11
|
+
(and as often as ~10s at the critical quota tier — the source of the longer freezes). This converts
|
|
12
|
+
all three to async (promisified `execFile`), completing the keychain class:
|
|
13
|
+
|
|
14
|
+
- `KeychainCredentialProvider.readCredentials` — was `execFileSync` on an already-`async` method (the
|
|
15
|
+
sync call made the `async` a lie); now `await execFileAsync`, same args + same 10s timeout.
|
|
16
|
+
- `QuotaPoller.defaultTokenResolver` — the per-account keychain read in `pollAll`; now `await`s the
|
|
17
|
+
async read the first fix added. The `TokenResolver` type widened to accept a `Promise` so a sync test
|
|
18
|
+
stub stays valid.
|
|
19
|
+
- `OAuthRefresher.refreshClaudeToken` — the 401-path read-merge-write now prefers the async read AND a
|
|
20
|
+
new optional `writeAsync` (promisified `add-generic-password`, same 3s timeout). Both fall back to
|
|
21
|
+
the sync `read`/`write` for any store that doesn't implement the async variant.
|
|
22
|
+
|
|
23
|
+
Behavior-preserving (same args, timeouts, and null/false-on-error semantics); 258 tests green.
|
|
24
|
+
|
|
25
|
+
## What to Tell Your User
|
|
26
|
+
|
|
27
|
+
If your dashboard still flapped "Disconnected" or the agent still occasionally misreported itself as
|
|
28
|
+
asleep after the first keychain fix, this is the rest of the cause: the periodic quota-poll keychain
|
|
29
|
+
reads were still freezing the server loop. After this update those run off the loop too, so the
|
|
30
|
+
dashboard stays connected under multi-agent keychain contention. Note honestly: there is ALSO a
|
|
31
|
+
separate, non-keychain freeze still being fixed (a large-JSON file read) — not part of this change.
|
|
32
|
+
|
|
33
|
+
## Summary of New Capabilities
|
|
34
|
+
|
|
35
|
+
- The QuotaManager collection-cycle keychain read (`KeychainCredentialProvider.readCredentials`) runs
|
|
36
|
+
off the event loop (the sync call on an already-`async` method is gone).
|
|
37
|
+
- The QuotaPoller per-account token resolver reads the keychain off the loop; the refresh path's
|
|
38
|
+
read-merge-write reads AND writes off the loop via the existing async read + a new optional
|
|
39
|
+
`writeAsync` keychain write.
|
|
40
|
+
- Completes the keychain class of the dashboard "disconnected" flapping + SleepWakeDetector false-wakes
|
|
41
|
+
begun by the tmux Event-Loop Resilience fix (v1.3.643) and the first keychain fix (PR #1248).
|
|
42
|
+
|
|
43
|
+
## Evidence
|
|
44
|
+
|
|
45
|
+
Root cause diagnosed by a live `/usr/bin/sample` of the running server during a freeze (main-thread
|
|
46
|
+
samples in the `security` keychain spawn on the quota-poll timer). Covered by a new
|
|
47
|
+
`credential-provider-async-read` test suite plus extended `oauth-refresher-async-read` and updated
|
|
48
|
+
`quota-poller` suites (28 tests in the three targeted files, parity with the sync paths + fallback to
|
|
49
|
+
sync for stores without the async variant); 258 tests green across the affected suites, tsc clean,
|
|
50
|
+
no-silent-fallbacks ratchet + sync-subprocess chokepoint lint green.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
`JobRunHistory.readLines()` did a synchronous `readFileSync` + per-line `JSON.parse` of the entire
|
|
9
|
+
`.instar/ledger/job-runs.jsonl` (~13MB) on EVERY call — on the hot path of `findRun` /
|
|
10
|
+
`recordCompletion` / `recordHandoff` / `query` / `stats` (every job completion/spawn, ~60s cadence).
|
|
11
|
+
A live `/usr/bin/sample` caught the event loop frozen 13–16s in `ReadFileUtf8 → ParseJson →
|
|
12
|
+
WriteFileUtf8`, misreported by SleepWakeDetector as a ~15s "wake". This is the THIRD distinct
|
|
13
|
+
event-loop blocker behind the dashboard "disconnected" flapping (after sync tmux and sync keychain
|
|
14
|
+
reads). The read path now uses an incremental in-memory cache keyed on `(size, mtimeMs)`: unchanged
|
|
15
|
+
file → cache hit (zero IO); append → tail-read only (O(delta)); shrink/compaction → one full re-read.
|
|
16
|
+
|
|
17
|
+
## What to Tell Your User
|
|
18
|
+
|
|
19
|
+
If your dashboard kept dropping its connection even after the tmux and keychain fixes, this was the
|
|
20
|
+
remaining cause: a 13MB job-history file re-read whole, every minute, on the server's main thread.
|
|
21
|
+
After this update that freeze is gone. (A separate cleanup — capping that file's unbounded growth —
|
|
22
|
+
is tracked separately.)
|
|
23
|
+
|
|
24
|
+
## Summary of New Capabilities
|
|
25
|
+
|
|
26
|
+
- Incremental `(size, mtimeMs)`-keyed in-memory cache in `JobRunHistory`; unchanged file = zero-IO
|
|
27
|
+
cache hit, append = tail-read only, compaction = one full re-read. Existing semantics (append-only,
|
|
28
|
+
dedup-last-wins, torn-line skip, corrupt-file recovery) preserved exactly.
|
|
29
|
+
- Removes the third event-loop blocker behind the dashboard flapping + the associated SleepWakeDetector
|
|
30
|
+
false-wakes.
|
|
31
|
+
|
|
32
|
+
## Evidence
|
|
33
|
+
|
|
34
|
+
Root cause diagnosed by a live `/usr/bin/sample` (main thread in ReadFileUtf8 → ParseJson →
|
|
35
|
+
WriteFileUtf8) + an mtime-watch catching the 13MB rewrite, correlated with 15–20s freezes every
|
|
36
|
+
~20–60s. Fix covered by 4 new regression tests (cache-hit does zero full-file reads across 75 ops;
|
|
37
|
+
external append via tail-read; torn-line skip; full re-read on shrink) on top of 30 existing; full
|
|
38
|
+
scheduler suite green (346 tests total); tsc clean; no-silent-fallbacks + bounded-accumulation +
|
|
39
|
+
no-wholefile-sync-read lints green.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# JobRunHistory incremental cache — event-loop freeze fix — ELI16
|
|
2
|
+
|
|
3
|
+
## What this is
|
|
4
|
+
|
|
5
|
+
Your agent's server runs everything on one main thread. If any single operation makes that thread
|
|
6
|
+
wait, *everything* waits — the dashboard, your messages, every background check. That's a "freeze,"
|
|
7
|
+
and a long-enough freeze drops the dashboard's live connection (the "Disconnected" flapping).
|
|
8
|
+
|
|
9
|
+
This fixes the THIRD distinct freeze behind that flapping. (The first was a slow shared terminal
|
|
10
|
+
manager; the second was reading the macOS keychain the blocking way — both already fixed.) This one:
|
|
11
|
+
the agent keeps a log of every background job it has ever run, in a file called `job-runs.jsonl`. That
|
|
12
|
+
file has grown to about **13 megabytes**. And every time a job finished or started — which happens
|
|
13
|
+
about every minute — the server read the WHOLE 13MB file from disk and re-parsed all of it, on the
|
|
14
|
+
main thread. That single operation froze the server for **13 to 16 seconds**, every minute or so. It
|
|
15
|
+
even looked to the agent like the laptop had gone to sleep (a blocked main thread uses almost no CPU,
|
|
16
|
+
so the sleep-detector misreads it).
|
|
17
|
+
|
|
18
|
+
## What already exists
|
|
19
|
+
|
|
20
|
+
The agent already uses this "keep a cached copy instead of re-reading from scratch" pattern elsewhere
|
|
21
|
+
(the cartographer code map serves a cached snapshot instead of recomputing live). This job-history
|
|
22
|
+
file just never got that treatment — it re-read the whole thing every single time.
|
|
23
|
+
|
|
24
|
+
## What's new
|
|
25
|
+
|
|
26
|
+
The job-run history now keeps a **smart in-memory cache**. It remembers the file's size and
|
|
27
|
+
last-modified time:
|
|
28
|
+
- If nothing changed since last time → it returns the cached copy instantly, reading nothing from
|
|
29
|
+
disk.
|
|
30
|
+
- If a new line was appended (the normal case) → it reads ONLY the new bit at the end, not the whole
|
|
31
|
+
13MB.
|
|
32
|
+
- If the file was compacted (shrunk) → it does one full re-read to stay correct.
|
|
33
|
+
|
|
34
|
+
So the per-call full-file read+parse is gone from every hot path. The freeze it caused is eliminated.
|
|
35
|
+
All the existing behavior (how it dedupes, recovers from a corrupt file, etc.) is preserved exactly,
|
|
36
|
+
proven by the test suite.
|
|
37
|
+
|
|
38
|
+
## What you need to decide
|
|
39
|
+
|
|
40
|
+
Nothing. It's a self-contained, low-risk read-path cache, fully covered by tests. One honest note:
|
|
41
|
+
the `job-runs.jsonl` file (and a separate 91MB cartographer file) keep growing without a size limit —
|
|
42
|
+
the cache makes reading them cheap regardless, but capping their growth is a separate cleanup item
|
|
43
|
+
I've flagged to track, not fixed here.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# The rest of the keychain freezes are gone
|
|
2
|
+
|
|
3
|
+
You know how your dashboard kept showing "Disconnected" and the agent sometimes thought it had gone to
|
|
4
|
+
sleep when it hadn't? We already fixed the two biggest causes: the slow tmux calls, and then the worst
|
|
5
|
+
of the keychain reads.
|
|
6
|
+
|
|
7
|
+
A "keychain read" is the agent asking the Mac's secure password store (the same vault Safari uses to
|
|
8
|
+
remember your logins) for the saved login it needs to talk to its account. On a Mac, that question goes
|
|
9
|
+
to a single system service shared by every app and every agent on the machine. When that service is busy
|
|
10
|
+
— and it gets busy when several agents ask at once — each question can take seconds to answer. The
|
|
11
|
+
problem was that the agent asked the question the BLOCKING way: it stood frozen at the counter waiting
|
|
12
|
+
for the answer instead of going off and doing other work. While frozen, it couldn't talk to your
|
|
13
|
+
dashboard, so the dashboard dropped the connection and the agent's "am I awake?" check misread the
|
|
14
|
+
stillness as the computer going to sleep.
|
|
15
|
+
|
|
16
|
+
The first fix only converted ONE place that asked the blocking question. After it shipped, we ran a live
|
|
17
|
+
profiler on the running server and caught THREE MORE places still asking the blocking way — all of them
|
|
18
|
+
on the part of the agent that checks, roughly every 60 seconds (and as often as every 10 seconds when an
|
|
19
|
+
account is running low), how much quota each of your accounts has left. Each check was reading the
|
|
20
|
+
keychain the frozen-at-the-counter way, once per account.
|
|
21
|
+
|
|
22
|
+
This update converts all three of those to ask the question the non-blocking way: the agent leaves a note
|
|
23
|
+
("tell me when you have the answer") and keeps doing its other work in the meantime, so the dashboard
|
|
24
|
+
stays connected and the false "I went to sleep" reports stop. Same answers, same timeouts, same safety
|
|
25
|
+
behavior if the keychain can't be read — just no more freezing.
|
|
26
|
+
|
|
27
|
+
One honest note: there is still a SEPARATE freeze being fixed that has nothing to do with the keychain —
|
|
28
|
+
it's caused by reading one large JSON file the blocking way. That one is being handled on its own and is
|
|
29
|
+
not part of this change. With this update, the keychain class of freezes is finished.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Side-Effects Review — JobRunHistory incremental cache (event-loop freeze fix)
|
|
2
|
+
|
|
3
|
+
**Slug:** `jobrunhistory-incremental-cache` · **Tier:** 1 (focused bug fix, no spec; live-profiler
|
|
4
|
+
root-cause). Parent principle: **Structure beats Willpower** — never block the event loop (the third
|
|
5
|
+
distinct event-loop blocker behind the dashboard "disconnected" flapping, after sync tmux + sync
|
|
6
|
+
keychain reads).
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
`JobRunHistory.readLines()` (`src/scheduler/JobRunHistory.ts`) did `fs.readFileSync` + per-line
|
|
11
|
+
`JSON.parse` of the ENTIRE `.instar/ledger/job-runs.jsonl` (~13MB) on EVERY call — and it is on the
|
|
12
|
+
hot path of `findRun` / `recordCompletion` / `recordReflection` / `recordHandoff` / `query` / `stats`
|
|
13
|
+
/ `allStats` / `getLastHandoff`, all driven by the scheduler every job completion/spawn (~60s
|
|
14
|
+
cadence: health-check, commitment-detection, mentor jobs). A live `/usr/bin/sample` caught the main
|
|
15
|
+
thread in `ReadFileUtf8 → ParseJson → WriteFileUtf8` — a 13–16s event-loop freeze misreported by
|
|
16
|
+
SleepWakeDetector as a ~15s "wake" (the ~0-CPU false-sleep signature). This adds an **incremental
|
|
17
|
+
in-memory cache** of parsed runs keyed on the file's `(size, mtimeMs)`: an unchanged file returns the
|
|
18
|
+
cache with ZERO IO/parse; an append-only growth reads ONLY the appended tail via `fs.readSync` from
|
|
19
|
+
the last offset (O(delta), not O(13MB)); a shrink/rewrite (compaction) triggers one full re-read.
|
|
20
|
+
|
|
21
|
+
## 1. Correctness / behavioral equivalence
|
|
22
|
+
|
|
23
|
+
Existing semantics preserved exactly: append-only, dedup-last-wins, torn-line skip, corrupt-file
|
|
24
|
+
recovery. `appendLine` keeps the cache coherent so the read after a completion is also free;
|
|
25
|
+
`compact()` re-seeds the cache after its rewrite. Verified: 30 original `JobRunHistory` tests + 4 new
|
|
26
|
+
regression tests (cache-hit does zero full-file reads across 75 ops; external append picked up via
|
|
27
|
+
tail-read; torn-line skipped; full re-read on shrink); the full scheduler suite (incl. MigrationLedger,
|
|
28
|
+
reaper, run-record) = 325; 346 total green.
|
|
29
|
+
|
|
30
|
+
## 2. Cache-coherence / multi-writer safety
|
|
31
|
+
|
|
32
|
+
The file has two in-process append writers (this instance + `MigrationLedger.appendMigrationEvent`),
|
|
33
|
+
both append-only. The `(size, mtimeMs)` key + intact-prefix tail-read handles an external append
|
|
34
|
+
correctly (picks up appended rows via tail-read). A shrink (only `compact()` rewrites) forces a full
|
|
35
|
+
re-read, so a compaction can never serve a stale cache. The cache is per-process in-memory (not
|
|
36
|
+
shared) — no cross-process coherence concern (each process reads its own view, same as before).
|
|
37
|
+
|
|
38
|
+
## 3. Fail-safe
|
|
39
|
+
|
|
40
|
+
The new fail paths (cache read, tail-read, stat) fall back to a full re-read or to the prior
|
|
41
|
+
behavior; each genuinely fail-safe catch is tagged `@silent-fallback-ok`. A stat/read error degrades
|
|
42
|
+
to a full re-read (correct result, just not the fast path) — never wrong data, never a crash.
|
|
43
|
+
|
|
44
|
+
## 4. Blast radius
|
|
45
|
+
|
|
46
|
+
One module (`JobRunHistory.ts`) + its test. No API/route change, no schema change, no write-path
|
|
47
|
+
semantics change (`compact()` still rewrites on its existing cadence — see the residual note). No
|
|
48
|
+
new external surface.
|
|
49
|
+
|
|
50
|
+
## 5. Residual (tracked, NOT fixed here — out of scope)
|
|
51
|
+
|
|
52
|
+
`job-runs.jsonl` grows UNBOUNDED to 13MB (and the cartographer `index.json` is 91MB) — a genuine
|
|
53
|
+
Bounded-Accumulation issue. The cache makes READS cheap regardless of size, but `compact()` still
|
|
54
|
+
does a full synchronous ~13MB WRITE on startup, and the file keeps growing. A retention/rotation cap
|
|
55
|
+
on `job-runs.jsonl` (and the cartographer index) is a separate Bounded-Accumulation follow-up worth
|
|
56
|
+
filing — named here so it is not silently dropped.
|
|
57
|
+
|
|
58
|
+
## 6. Rollback
|
|
59
|
+
|
|
60
|
+
Revert the one source file. The change is purely a read-path cache; reverting restores the (slow but
|
|
61
|
+
correct) full-read behavior.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Side-Effects Review — Keychain residual: the remaining timer-driven sync keychain reads → async
|
|
2
|
+
|
|
3
|
+
**Slug:** `keychain-residual-async-read` · **Tier:** 1 (focused low-risk bug fix, no spec; completes
|
|
4
|
+
the keychain class of the dashboard event-loop freeze that the first fix opened). Parent principle:
|
|
5
|
+
**Structure beats Willpower** — the same "never block the event loop" guarantee, applied to the three
|
|
6
|
+
remaining timer-driven sync keychain call sites the first fix (PR #1248) did not cover.
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
The first keychain fix (PR #1248, merged as `e14d8ead4`) took the credential-audit hot path's
|
|
11
|
+
synchronous `security` keychain read off the event loop. A live `/usr/bin/sample` of the running
|
|
12
|
+
server then found THREE MORE timer-driven synchronous keychain call sites still freezing the loop —
|
|
13
|
+
all on the QuotaManager / QuotaPoller poll path, which runs every ~60s (and as often as every ~10s at
|
|
14
|
+
the critical quota tier). This converts those three to async (promisified `execFile`), completing the
|
|
15
|
+
keychain class:
|
|
16
|
+
|
|
17
|
+
1. **`KeychainCredentialProvider.readCredentials`** (`src/monitoring/CredentialProvider.ts`) — was a
|
|
18
|
+
synchronous `execFileSync('security', …)` on a method already declared `async` (callers already
|
|
19
|
+
`await` it, so the sync call made the `async` a lie). Driven by the QuotaManager collection-cycle
|
|
20
|
+
timer (60s, down to 10s at the critical tier — the source of the longer freezes). Now
|
|
21
|
+
`await execFileAsync(...)`, SAME args + SAME 10s timeout + SAME null-on-error semantics.
|
|
22
|
+
2. **`QuotaPoller.defaultTokenResolver`** (`src/core/QuotaPoller.ts`) — the per-account periodic
|
|
23
|
+
keychain read inside `pollAll`. Was sync `readClaudeOauth`; now `await readClaudeOauthAsync` (the
|
|
24
|
+
async read the first fix already added). `pollAccount` now `await`s the resolver; the `TokenResolver`
|
|
25
|
+
type widened to `string | null | Promise<string | null>` so a sync test stub stays valid.
|
|
26
|
+
3. **`OAuthRefresher.refreshClaudeToken`** (`src/core/OAuthRefresher.ts`) — the read-merge-write on the
|
|
27
|
+
401 refresh path issues a keychain READ and a keychain WRITE per cycle. The read now prefers the
|
|
28
|
+
existing async `readAsync`; a NEW optional `writeAsync` (promisified `add-generic-password`, same
|
|
29
|
+
3s timeout, same false-on-error semantics) is preferred for the write. Both fall back to the sync
|
|
30
|
+
`read`/`write` for any store that doesn't implement the async variant (test mocks).
|
|
31
|
+
|
|
32
|
+
## 1. Behavioral equivalence / correctness
|
|
33
|
+
|
|
34
|
+
Each async variant mirrors its sync sibling's args, timeout, and null/false-on-error semantics
|
|
35
|
+
exactly. `readCredentials` keeps its identical JSON parse (now over `stdout`). `defaultTokenResolver`
|
|
36
|
+
keeps the identical `sk-ant-oat` prefix check. `refreshClaudeToken`'s async read/write are gated on
|
|
37
|
+
the OPTIONAL interface methods (`store.readAsync ? … : store.read`, `store.writeAsync ? … : store.write`),
|
|
38
|
+
so every existing `CredentialStore` mock that implements only the sync methods compiles AND runs
|
|
39
|
+
unchanged. 258 tests across the affected suites green (28 in the three targeted files), tsc clean,
|
|
40
|
+
lints clean.
|
|
41
|
+
|
|
42
|
+
## 2. Failure modes / fail-safe
|
|
43
|
+
|
|
44
|
+
Identical to the sync paths. A keychain read that fails or times out returns `null` → the caller falls
|
|
45
|
+
to needs-reauth / no-snapshot-this-cycle, retried next cycle. A `writeAsync` failure returns `false` →
|
|
46
|
+
`refreshClaudeToken` already maps a failed write to `write-skipped` (NOT needs-reauth — the exchange
|
|
47
|
+
succeeded and the still-valid credential is untouched). The `funnel.withSlotLock` per-slot lock still
|
|
48
|
+
serializes the write against a concurrent swap/refresh on the same slot regardless of sync vs async.
|
|
49
|
+
|
|
50
|
+
## 3. Blast radius
|
|
51
|
+
|
|
52
|
+
Three source files (`CredentialProvider.ts`, `QuotaPoller.ts`, `OAuthRefresher.ts`) + their three test
|
|
53
|
+
files. No credential VALUE ever leaves the funnel; no new external surface; no write-path SEMANTICS
|
|
54
|
+
change (only the off-loop execution + the new optional `writeAsync` method). The `TokenResolver` type
|
|
55
|
+
widening is backward compatible (a sync resolver is still accepted). The non-darwin `writeAsync` branch
|
|
56
|
+
uses `fs.promises` with the same `0o600` mode + recursive mkdir as the sync `write`.
|
|
57
|
+
|
|
58
|
+
## 4. Interactions
|
|
59
|
+
|
|
60
|
+
Completes the keychain leg of the dashboard event-loop-freeze work begun by the tmux Event-Loop
|
|
61
|
+
Resilience fix (v1.3.643) and the first keychain fix (PR #1248). Those took the SYNC TMUX calls and the
|
|
62
|
+
credential-AUDIT keychain read off the loop; this takes the remaining QUOTA-POLL keychain reads + the
|
|
63
|
+
refresh read-write off the loop. There is ALSO a separate, NON-keychain residual freeze (a large-JSON
|
|
64
|
+
file read) still being addressed independently — this PR does not touch it.
|
|
65
|
+
|
|
66
|
+
## 5. Rollback
|
|
67
|
+
|
|
68
|
+
Revert the three source files. The change is additive (one new optional interface method `writeAsync`,
|
|
69
|
+
one promisified `execFile` per call site, a widened union return type) plus the sync paths retained as
|
|
70
|
+
fallbacks — so a partial revert that keeps any single async conversion is also safe.
|