instar 1.3.533 → 1.3.535

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.
Files changed (56) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +98 -2
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/CredentialWriteFunnel.d.ts +16 -0
  5. package/dist/core/CredentialWriteFunnel.d.ts.map +1 -1
  6. package/dist/core/CredentialWriteFunnel.js +19 -0
  7. package/dist/core/CredentialWriteFunnel.js.map +1 -1
  8. package/dist/core/EscalationHintStore.d.ts +60 -0
  9. package/dist/core/EscalationHintStore.d.ts.map +1 -0
  10. package/dist/core/EscalationHintStore.js +163 -0
  11. package/dist/core/EscalationHintStore.js.map +1 -0
  12. package/dist/core/ModelTierEscalation.d.ts +10 -0
  13. package/dist/core/ModelTierEscalation.d.ts.map +1 -1
  14. package/dist/core/ModelTierEscalation.js +4 -0
  15. package/dist/core/ModelTierEscalation.js.map +1 -1
  16. package/dist/core/OAuthRefresher.d.ts +18 -1
  17. package/dist/core/OAuthRefresher.d.ts.map +1 -1
  18. package/dist/core/OAuthRefresher.js +23 -1
  19. package/dist/core/OAuthRefresher.js.map +1 -1
  20. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  21. package/dist/core/PostUpdateMigrator.js +15 -0
  22. package/dist/core/PostUpdateMigrator.js.map +1 -1
  23. package/dist/core/QuotaPoller.d.ts.map +1 -1
  24. package/dist/core/QuotaPoller.js +7 -0
  25. package/dist/core/QuotaPoller.js.map +1 -1
  26. package/dist/core/TopicProfileTransferCarrier.d.ts +27 -0
  27. package/dist/core/TopicProfileTransferCarrier.d.ts.map +1 -1
  28. package/dist/core/TopicProfileTransferCarrier.js +24 -1
  29. package/dist/core/TopicProfileTransferCarrier.js.map +1 -1
  30. package/dist/monitoring/AccountSwitcher.d.ts.map +1 -1
  31. package/dist/monitoring/AccountSwitcher.js +13 -2
  32. package/dist/monitoring/AccountSwitcher.js.map +1 -1
  33. package/dist/monitoring/CredentialProvider.d.ts +20 -0
  34. package/dist/monitoring/CredentialProvider.d.ts.map +1 -1
  35. package/dist/monitoring/CredentialProvider.js +26 -0
  36. package/dist/monitoring/CredentialProvider.js.map +1 -1
  37. package/dist/scaffold/templates.d.ts.map +1 -1
  38. package/dist/scaffold/templates.js +1 -0
  39. package/dist/scaffold/templates.js.map +1 -1
  40. package/dist/server/AgentServer.d.ts +10 -0
  41. package/dist/server/AgentServer.d.ts.map +1 -1
  42. package/dist/server/AgentServer.js +26 -0
  43. package/dist/server/AgentServer.js.map +1 -1
  44. package/dist/server/routes.d.ts +6 -0
  45. package/dist/server/routes.d.ts.map +1 -1
  46. package/dist/server/routes.js +47 -1
  47. package/dist/server/routes.js.map +1 -1
  48. package/package.json +4 -2
  49. package/scripts/lint-no-direct-destructive.js +4 -0
  50. package/scripts/lint-no-unfunneled-credential-write.js +155 -0
  51. package/src/data/builtin-manifest.json +64 -64
  52. package/src/scaffold/templates.ts +1 -0
  53. package/upgrades/1.3.535.md +66 -0
  54. package/upgrades/side-effects/live-credential-repointing-increment-a-funnel-routing.md +86 -0
  55. package/upgrades/side-effects/ws53-escalation-rides-topic.md +52 -0
  56. package/upgrades/1.3.533.md +0 -25
@@ -74,4 +74,20 @@ export declare class CredentialWriteFunnel {
74
74
  /** Test/observability: how many slots currently have a live lock queue tail. */
75
75
  get trackedSlotCount(): number;
76
76
  }
77
+ /**
78
+ * Process-wide shared funnel singleton (Step 4b). Every in-process credential writer — the
79
+ * QuotaPoller refresh path (via `refreshClaudeToken`), the AccountSwitcher write (via
80
+ * `writeCredentialsSerialized`), and the swap executor (Step 5) — routes through THIS instance so
81
+ * a refresh write and a swap on the same slot share one per-slot lock and can never interleave.
82
+ * In-memory ⇒ a process restart clears any crash-stale hold. Tests inject their own instance.
83
+ */
84
+ export declare const credentialWriteFunnel: CredentialWriteFunnel;
85
+ /**
86
+ * Thrown by a void-returning serialized writer when the per-slot lock could not be acquired in
87
+ * time (the funnel SKIPPED the write rather than wedging). It is a transient "busy, retry" signal
88
+ * — NEVER a credential failure: callers must not treat it as a dead login / needs-reauth.
89
+ */
90
+ export declare class CredentialWriteSkippedError extends Error {
91
+ constructor(reason: string);
92
+ }
77
93
  //# sourceMappingURL=CredentialWriteFunnel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CredentialWriteFunnel.d.ts","sourceRoot":"","sources":["../../src/core/CredentialWriteFunnel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,mGAAmG;AACnG,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,GAAG,EAAE,OAAO,CAAC;IACb,kCAAkC;IAClC,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,4BAA4B;IAC3C,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID,qBAAa,qBAAqB;IAChC,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,mGAAmG;IACnG,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAE/B,IAAI,GAAE,4BAAiC;IAInD;;;;OAIG;IACG,YAAY,CAAC,CAAC,EAClB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACxB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAuC3B;;;;;OAKG;IACG,aAAa,CAAC,CAAC,EACnB,KAAK,EAAE,MAAM,EAAE,EACf,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACxB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAe3B;;;;OAIG;IACG,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAa5E,oEAAoE;IACpE,iBAAiB,IAAI,OAAO;IAI5B,gFAAgF;IAChF,IAAI,gBAAgB,IAAI,MAAM,CAE7B;CACF"}
1
+ {"version":3,"file":"CredentialWriteFunnel.d.ts","sourceRoot":"","sources":["../../src/core/CredentialWriteFunnel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,mGAAmG;AACnG,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,GAAG,EAAE,OAAO,CAAC;IACb,kCAAkC;IAClC,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,4BAA4B;IAC3C,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID,qBAAa,qBAAqB;IAChC,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,mGAAmG;IACnG,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAE/B,IAAI,GAAE,4BAAiC;IAInD;;;;OAIG;IACG,YAAY,CAAC,CAAC,EAClB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACxB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAuC3B;;;;;OAKG;IACG,aAAa,CAAC,CAAC,EACnB,KAAK,EAAE,MAAM,EAAE,EACf,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACxB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAe3B;;;;OAIG;IACG,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAa5E,oEAAoE;IACpE,iBAAiB,IAAI,OAAO;IAI5B,gFAAgF;IAChF,IAAI,gBAAgB,IAAI,MAAM,CAE7B;CACF;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,uBAA8B,CAAC;AAEjE;;;;GAIG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,MAAM,EAAE,MAAM;CAI3B"}
@@ -125,4 +125,23 @@ export class CredentialWriteFunnel {
125
125
  return this.slotTails.size;
126
126
  }
127
127
  }
128
+ /**
129
+ * Process-wide shared funnel singleton (Step 4b). Every in-process credential writer — the
130
+ * QuotaPoller refresh path (via `refreshClaudeToken`), the AccountSwitcher write (via
131
+ * `writeCredentialsSerialized`), and the swap executor (Step 5) — routes through THIS instance so
132
+ * a refresh write and a swap on the same slot share one per-slot lock and can never interleave.
133
+ * In-memory ⇒ a process restart clears any crash-stale hold. Tests inject their own instance.
134
+ */
135
+ export const credentialWriteFunnel = new CredentialWriteFunnel();
136
+ /**
137
+ * Thrown by a void-returning serialized writer when the per-slot lock could not be acquired in
138
+ * time (the funnel SKIPPED the write rather than wedging). It is a transient "busy, retry" signal
139
+ * — NEVER a credential failure: callers must not treat it as a dead login / needs-reauth.
140
+ */
141
+ export class CredentialWriteSkippedError extends Error {
142
+ constructor(reason) {
143
+ super(reason);
144
+ this.name = 'CredentialWriteSkippedError';
145
+ }
146
+ }
128
147
  //# sourceMappingURL=CredentialWriteFunnel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CredentialWriteFunnel.js","sourceRoot":"","sources":["../../src/core/CredentialWriteFunnel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CredentialWriteFunnel.js","sourceRoot":"","sources":["../../src/core/CredentialWriteFunnel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { EscalationTier } from './ModelTierEscalation.js';
2
+ /** Default hint TTL — a topic not resumed within this window drops the hint. */
3
+ export declare const DEFAULT_ESCALATION_HINT_TTL_MS: number;
4
+ /** One ephemeral carry: the trigger to re-evaluate + the tier the source ran. */
5
+ export interface EscalationHint {
6
+ /** The escalation trigger label the source topic was running under (e.g.
7
+ * 'build' / 'autonomous' / 'instar-dev' / 'spec-converge' / 'transfer'). A
8
+ * free-string label — NEVER trusted as authority; the destination governor
9
+ * re-evaluates from real state. Recorded for audit only. */
10
+ trigger: string;
11
+ /** The tier the source session was on (always 'escalated' for a filed hint —
12
+ * a default-tier topic files no hint). Recorded for audit/observability. */
13
+ sourceTier: EscalationTier;
14
+ /** Source machine id (audit only — peer-asserted, never a principal). */
15
+ sourceMachineId?: string;
16
+ /** Epoch ms after which the hint is treated as absent. */
17
+ expiresAt: number;
18
+ /** Epoch ms the hint was filed (audit/observability). */
19
+ filedAt: number;
20
+ }
21
+ export interface EscalationHintStoreDeps {
22
+ /** File the hints persist to (JSON). */
23
+ filePath: string;
24
+ /** Hint TTL (ms). Defaults to DEFAULT_ESCALATION_HINT_TTL_MS. */
25
+ ttlMs?: number;
26
+ /** Wall clock — injectable for tests. Defaults to `Date.now`. */
27
+ now?: () => number;
28
+ }
29
+ export declare class EscalationHintStore {
30
+ private readonly d;
31
+ private hints;
32
+ private loaded;
33
+ private readonly now;
34
+ private readonly ttlMs;
35
+ constructor(deps: EscalationHintStoreDeps);
36
+ private load;
37
+ private persist;
38
+ /**
39
+ * File an escalation hint for a topic (the transfer SOURCE leg). Idempotent —
40
+ * a newer file for the same topic replaces the older one. Stamps `expiresAt`
41
+ * from the TTL.
42
+ */
43
+ file(sessionKey: string, hint: Omit<EscalationHint, 'expiresAt' | 'filedAt'>): void;
44
+ /**
45
+ * Read a topic's live (non-expired) hint WITHOUT consuming it. Returns null
46
+ * when absent or expired. Observability/peek surface.
47
+ */
48
+ peek(sessionKey: string): EscalationHint | null;
49
+ /**
50
+ * Read AND remove a topic's live hint (the destination resume leg). Returns
51
+ * null when absent or expired (an expired hint is removed as a side effect).
52
+ * Consume-once: a single transfer yields at most one re-admit attempt.
53
+ */
54
+ consume(sessionKey: string): EscalationHint | null;
55
+ /** Remove a topic's hint (e.g. a suppress write, or an explicit clear). */
56
+ clear(sessionKey: string): void;
57
+ /** All live (non-expired) hints — diagnostics surface. Prunes expired. */
58
+ all(): Record<string, EscalationHint>;
59
+ }
60
+ //# sourceMappingURL=EscalationHintStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EscalationHintStore.d.ts","sourceRoot":"","sources":["../../src/core/EscalationHintStore.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,gFAAgF;AAChF,eAAO,MAAM,8BAA8B,QAAqB,CAAC;AAEjE,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B;;;iEAG6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB;iFAC6E;IAC7E,UAAU,EAAE,cAAc,CAAC;IAC3B,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD,MAAM,WAAW,uBAAuB;IACtC,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAA0B;IAC5C,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,IAAI,EAAE,uBAAuB;IAMzC,OAAO,CAAC,IAAI;IA6BZ,OAAO,CAAC,OAAO;IAgBf;;;;OAIG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,SAAS,CAAC,GAAG,IAAI;IAOnF;;;OAGG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAQ/C;;;;OAIG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAUlD,2EAA2E;IAC3E,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ/B,0EAA0E;IAC1E,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;CAatC"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * EscalationHintStore — WS5.3 ("escalation rides the topic") of
3
+ * docs/specs/MULTI-MACHINE-SEAMLESSNESS-SPEC.md (mirrored at
4
+ * docs/specs/ws53-escalation-rides-topic.md).
5
+ *
6
+ * The EPHEMERAL carrier for "this topic was running on the escalated tier
7
+ * when it moved." Model-tier escalation leases are keyed on the spawn-
8
+ * generated session-instance-id (see EscalationGovernor.ts header); a
9
+ * `POST /pool/transfer` respawns the topic's session on the destination with
10
+ * a NEW instance id, so the live escalation state is DROPPED and the resumed
11
+ * session starts on the default tier mid-heavy-work. WS5.3 carries the source
12
+ * topic's active escalation TRIGGER as a hint so the destination has a REASON
13
+ * to re-evaluate escalation under its OWN cost guards.
14
+ *
15
+ * THE LOAD-BEARING SAFETY INVARIANT (spec §"safety invariant"): a hint is a
16
+ * trigger carry, NEVER a tier grant. The destination MUST re-decide through
17
+ * its own `EscalationGovernor.admit()` (every cost guard intact) — the hint
18
+ * only decides WHETHER to ask, never the answer. This store carries no tier
19
+ * authority; the re-admit chokepoint (ModelSwapService.swap → admit) is the
20
+ * single decision authority and is untouched here.
21
+ *
22
+ * Design (deliberately tiny — it is a hint, not state):
23
+ * - **Ephemeral by TTL**: every hint carries an `expiresAt`; a hint older
24
+ * than the TTL is treated as absent (a topic that moved long ago and was
25
+ * never resumed must not silently re-escalate days later — the destination
26
+ * governor's own dwell/quota would re-price it anyway, but a stale hint is
27
+ * never even surfaced). Expiry is evaluated lazily on read.
28
+ * - **Consume-once**: `consume()` returns the live hint AND removes it, so a
29
+ * single transfer produces at most one re-admit attempt. A re-transfer
30
+ * files a fresh hint.
31
+ * - **Durable enough**: the source leg of the transfer runs on the
32
+ * holder/router and the destination resume is lazy (next message), so the
33
+ * hint outlives the request; an atomic JSON write survives a restart in
34
+ * that gap. Corrupt/absent file → no hints (the safe direction: no hint =
35
+ * no re-admit = default tier).
36
+ * - **NOT the durable topic profile**: a topic profile is sticky operator
37
+ * intent and must not gain a transient "was escalated" bit. The hint lives
38
+ * in its own file and is consumed, never resolved into a pin.
39
+ */
40
+ import fs from 'node:fs';
41
+ import path from 'node:path';
42
+ /** Default hint TTL — a topic not resumed within this window drops the hint. */
43
+ export const DEFAULT_ESCALATION_HINT_TTL_MS = 6 * 60 * 60 * 1000; // 6h (mirrors maxEscalationTtlMs)
44
+ export class EscalationHintStore {
45
+ d;
46
+ hints = {};
47
+ loaded = false;
48
+ now;
49
+ ttlMs;
50
+ constructor(deps) {
51
+ this.d = deps;
52
+ this.now = deps.now ?? (() => Date.now());
53
+ this.ttlMs = deps.ttlMs ?? DEFAULT_ESCALATION_HINT_TTL_MS;
54
+ }
55
+ load() {
56
+ if (this.loaded)
57
+ return;
58
+ try {
59
+ if (fs.existsSync(this.d.filePath)) {
60
+ const raw = JSON.parse(fs.readFileSync(this.d.filePath, 'utf-8'));
61
+ if (raw && typeof raw === 'object' && raw.hints && typeof raw.hints === 'object') {
62
+ // Shape-validate each entry — a malformed entry is dropped, never
63
+ // trusted (no hint = the safe direction).
64
+ for (const [k, v] of Object.entries(raw.hints)) {
65
+ if (v && typeof v === 'object' &&
66
+ typeof v.trigger === 'string' &&
67
+ typeof v.expiresAt === 'number') {
68
+ this.hints[k] = v;
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+ catch {
75
+ // @silent-fallback-ok — a corrupt/absent hint file means NO hints, which
76
+ // is the safe direction: no hint ⇒ no re-admit ⇒ the resumed session
77
+ // stays on the default tier (exactly as if WS5.3 were off). Never throws
78
+ // into the transfer/spawn path.
79
+ this.hints = {};
80
+ }
81
+ this.loaded = true;
82
+ }
83
+ persist() {
84
+ const dir = path.dirname(this.d.filePath);
85
+ try {
86
+ fs.mkdirSync(dir, { recursive: true });
87
+ const tmp = `${this.d.filePath}.${process.pid}.tmp`;
88
+ fs.writeFileSync(tmp, JSON.stringify({ version: 1, hints: this.hints }, null, 2));
89
+ fs.renameSync(tmp, this.d.filePath); // atomic swap
90
+ }
91
+ catch {
92
+ // @silent-fallback-ok — a failed hint persist keeps the in-memory hint
93
+ // authoritative for this process (the common case: file then consume in
94
+ // the same process). A lost durable copy only loses the re-admit across a
95
+ // restart-in-the-gap, which degrades to default tier — never an error,
96
+ // never a thrown exception into the transfer path.
97
+ }
98
+ }
99
+ /**
100
+ * File an escalation hint for a topic (the transfer SOURCE leg). Idempotent —
101
+ * a newer file for the same topic replaces the older one. Stamps `expiresAt`
102
+ * from the TTL.
103
+ */
104
+ file(sessionKey, hint) {
105
+ this.load();
106
+ const filedAt = this.now();
107
+ this.hints[sessionKey] = { ...hint, filedAt, expiresAt: filedAt + this.ttlMs };
108
+ this.persist();
109
+ }
110
+ /**
111
+ * Read a topic's live (non-expired) hint WITHOUT consuming it. Returns null
112
+ * when absent or expired. Observability/peek surface.
113
+ */
114
+ peek(sessionKey) {
115
+ this.load();
116
+ const h = this.hints[sessionKey];
117
+ if (!h)
118
+ return null;
119
+ if (this.now() >= h.expiresAt)
120
+ return null; // lazily expired
121
+ return { ...h };
122
+ }
123
+ /**
124
+ * Read AND remove a topic's live hint (the destination resume leg). Returns
125
+ * null when absent or expired (an expired hint is removed as a side effect).
126
+ * Consume-once: a single transfer yields at most one re-admit attempt.
127
+ */
128
+ consume(sessionKey) {
129
+ this.load();
130
+ const h = this.hints[sessionKey];
131
+ if (!h)
132
+ return null;
133
+ delete this.hints[sessionKey];
134
+ this.persist();
135
+ if (this.now() >= h.expiresAt)
136
+ return null; // expired — removed, not returned
137
+ return { ...h };
138
+ }
139
+ /** Remove a topic's hint (e.g. a suppress write, or an explicit clear). */
140
+ clear(sessionKey) {
141
+ this.load();
142
+ if (this.hints[sessionKey]) {
143
+ delete this.hints[sessionKey];
144
+ this.persist();
145
+ }
146
+ }
147
+ /** All live (non-expired) hints — diagnostics surface. Prunes expired. */
148
+ all() {
149
+ this.load();
150
+ const now = this.now();
151
+ let changed = false;
152
+ for (const [k, h] of Object.entries(this.hints)) {
153
+ if (now >= h.expiresAt) {
154
+ delete this.hints[k];
155
+ changed = true;
156
+ }
157
+ }
158
+ if (changed)
159
+ this.persist();
160
+ return { ...this.hints };
161
+ }
162
+ }
163
+ //# sourceMappingURL=EscalationHintStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EscalationHintStore.js","sourceRoot":"","sources":["../../src/core/EscalationHintStore.ts"],"names":[],"mappings":"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"}
@@ -66,6 +66,16 @@ export interface TierEscalationConfig {
66
66
  enabled: boolean;
67
67
  /** Log intended swaps without performing them. `enabled:false` wins. */
68
68
  dryRun: boolean;
69
+ /**
70
+ * WS5.3 — "escalation rides the topic". When a topic running on the
71
+ * escalated tier is moved via `POST /pool/transfer`, carry its active
72
+ * escalation TRIGGER as an ephemeral hint so the destination RE-ADMITS the
73
+ * resumed session through ITS OWN `EscalationGovernor.admit()` cost guards
74
+ * (a trigger carry, NEVER a tier grant — the destination always re-decides).
75
+ * Rides UNDER `enabled`: with `enabled:false` the whole carry+re-admit path
76
+ * is a strict no-op. Default false ⇒ ships dark independently of the rest
77
+ * of the escalation feature. */
78
+ ridesTopic: boolean;
69
79
  triggers: TierEscalationTriggers;
70
80
  frameworks: Partial<Record<EscalationFramework, TierEscalationFrameworkEntry>>;
71
81
  costGuards: TierEscalationCostGuards;
@@ -1 +1 @@
1
- {"version":3,"file":"ModelTierEscalation.d.ts","sourceRoot":"","sources":["../../src/core/ModelTierEscalation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ModelTierEscalation.d.ts","sourceRoot":"","sources":["../../src/core/ModelTierEscalation.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,9 @@ export const ESCALATION_FRAMEWORKS = [
30
30
  export const DEFAULT_TIER_ESCALATION_CONFIG = {
31
31
  enabled: false,
32
32
  dryRun: true,
33
+ // WS5.3 escalation-rides-topic sub-flag — ships dark (default false). Rides
34
+ // under `enabled`: a no-op while escalation itself is off.
35
+ ridesTopic: false,
33
36
  triggers: {
34
37
  skills: ['build', 'autonomous', 'instar-dev', 'spec-converge'],
35
38
  projectDesign: true,
@@ -210,6 +213,7 @@ export function normalizeTierEscalationConfig(raw) {
210
213
  return {
211
214
  enabled: typeof r.enabled === 'boolean' ? r.enabled : d.enabled,
212
215
  dryRun: typeof r.dryRun === 'boolean' ? r.dryRun : d.dryRun,
216
+ ridesTopic: typeof r.ridesTopic === 'boolean' ? r.ridesTopic : d.ridesTopic,
213
217
  triggers: {
214
218
  skills: Array.isArray(r.triggers?.skills)
215
219
  ? r.triggers.skills.filter((s) => typeof s === 'string')
@@ -1 +1 @@
1
- {"version":3,"file":"ModelTierEscalation.js","sourceRoot":"","sources":["../../src/core/ModelTierEscalation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH,MAAM,CAAC,MAAM,qBAAqB,GAAmC;IACnE,aAAa;IACb,WAAW;IACX,YAAY;IACZ,QAAQ;CACT,CAAC;AAqDF,sEAAsE;AACtE,MAAM,CAAC,MAAM,8BAA8B,GAAyB;IAClE,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE;QACR,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,CAAC;QAC9D,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,KAAK;KACtB;IACD,UAAU,EAAE;QACV,aAAa,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE;QAC1E,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;QAC/C,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;QAChD,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;KAC7C;IACD,UAAU,EAAE;QACV,kBAAkB,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE;QACtD,oBAAoB,EAAE,IAAI;QAC1B,gCAAgC,EAAE,CAAC;QACnC,qBAAqB,EAAE,CAAC;QACxB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,UAAU,EAAE,KAAK;QACrC,cAAc,EAAE,OAAO,EAAE,OAAO;QAChC,iBAAiB,EAAE,CAAC;KACrB;CACF,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAEjF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;IACnB,kBAAkB;IAClB,2BAA2B;IAC3B,MAAM;IACN,QAAQ;IACR,OAAO;CACC,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,SAAS;IACT,eAAe;IACf,SAAS;IACT,cAAc;IACd,SAAS;CACD,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAmD;IAC7E,aAAa,EAAE,sBAAsB;IACrC,WAAW,EAAE,qBAAqB;IAClC,YAAY,EAAE,mBAAmB;IACjC,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgD;IAC1E,aAAa,EAAE,aAAa;IAC5B,WAAW,EAAE,kBAAkB;IAC/B,YAAY,EAAE,kBAAkB;IAChC,QAAQ,EAAE,kBAAkB;CAC7B,CAAC;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAkBpD,yEAAyE;AACzE,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;IAC/E,OAAO,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,IAAoB,EACpB,MAAwC,EACxC,KAA0C;IAE1C,IAAI,CAAE,qBAA2C,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACtE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,GAAG,SAAgC,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;IAC5C,uEAAuE;IACvE,4EAA4E;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QAChE,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;QAChB,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACrF,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QACf,kEAAkE;QAClE,+DAA+D;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACpD,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACnG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACtC,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,MAAwC;IAExC,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5D,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC;AACjD,CAAC;AAED;+DAC+D;AAC/D,MAAM,UAAU,iBAAiB,CAAC,MAAwC;IACxE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,EAAE,IAAI,qBAAqB,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,MAAgC,EAChC,KAAa;IAEb,MAAM,OAAO,GAAG,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,6EAA6E;IAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAClF,OAAO,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,GAAG,YAAY,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAC3C,GAAY;IAEZ,MAAM,CAAC,GAAG,8BAA8B,CAAC;IACzC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO;YACL,GAAG,CAAC;YACJ,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC3D,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE;YAC/B,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE;SAC5F,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,GAAG,GAAoC,CAAC;IAC/C,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;QAC/D,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;QAC3D,QAAQ,EAAE;YACR,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACvC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;gBACrE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1B,aAAa,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa;YACnH,cAAc,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc;SACxH;QACD,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAC1G,UAAU,EAAE;YACV,GAAG,CAAC,CAAC,UAAU;YACf,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,kBAAkB,EAAE;gBAClB,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,kBAAkB,IAAI,OAAO,CAAC,CAAC,UAAU,CAAC,kBAAkB,KAAK,QAAQ;oBACzF,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB;oBACjC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC;aACrC;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ModelTierEscalation.js","sourceRoot":"","sources":["../../src/core/ModelTierEscalation.ts"],"names":[],"mappings":"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"}
@@ -40,11 +40,12 @@
40
40
  * injectable, so the whole refresh runs hermetically with zero keychain, zero
41
41
  * network, and a deterministic clock in tests.
42
42
  */
43
+ import { CredentialWriteFunnel } from './CredentialWriteFunnel.js';
43
44
  /** Public Claude Code OAuth token endpoint (from the official client binary). */
44
45
  export declare const CLAUDE_TOKEN_URL = "https://platform.claude.com/v1/oauth/token";
45
46
  /** Public Claude Code OAuth client id (from the official client binary). */
46
47
  export declare const CLAUDE_CODE_CLIENT_ID = "9d1c250a-e61b-44d9-88ed-5944d1962f5e";
47
- export type RefreshFailReason = 'unsupported-account' | 'read-failed' | 'no-refresh-token' | 'exchange-failed' | 'malformed-response' | 'write-failed';
48
+ export type RefreshFailReason = 'unsupported-account' | 'read-failed' | 'no-refresh-token' | 'exchange-failed' | 'malformed-response' | 'write-failed' | 'write-skipped';
48
49
  export type RefreshResult = {
49
50
  ok: true;
50
51
  accessToken: string;
@@ -87,8 +88,24 @@ export interface RefreshDeps {
87
88
  now?: () => number;
88
89
  tokenUrl?: string;
89
90
  clientId?: string;
91
+ /**
92
+ * The credential-write funnel (Step 4b). The token write is serialized through
93
+ * `withSlotLock(configHome, …)` so a refresh write can never interleave with a
94
+ * swap (Step 5) or another refresh on the SAME slot. Defaults to the process-wide
95
+ * `credentialWriteFunnel` singleton; tests inject their own to assert serialization.
96
+ */
97
+ funnel?: CredentialWriteFunnel;
90
98
  }
91
99
  export declare function expandHome(p: string): string;
100
+ /**
101
+ * Canonical per-slot lock key for a config home (Step 4b). The funnel keys its per-slot lock on
102
+ * THIS string, so two writers to the SAME keychain entry must derive the SAME key regardless of
103
+ * how the home was spelled. `path.resolve` over the home-expanded path strips a trailing slash and
104
+ * collapses `.`/`..` so `~/.claude` and `~/.claude/` (or `/h/.claude` and `/h/./.claude`) map to one
105
+ * lock — closing the string-identity race a refresh and a switch could otherwise have on the same
106
+ * account (second-pass review, 2026-06-13).
107
+ */
108
+ export declare function credentialSlotKey(configHome: string): string;
92
109
  /**
93
110
  * macOS keychain service name for a config home's Claude Code credentials.
94
111
  * The default home (`~/.claude`) has no hash suffix; every other config home is
@@ -1 +1 @@
1
- {"version":3,"file":"OAuthRefresher.d.ts","sourceRoot":"","sources":["../../src/core/OAuthRefresher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAQH,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,CAAC;AAEnB,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;CACrD;AAED,mFAAmF;AACnF,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACpE,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC;AAE5E,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED,oDAAoD;AACpD,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,EAAE,eAoDpC,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,eAAwC,GAC9C,WAAW,GAAG,IAAI,CAUpB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,aAAa,CAAC,CA+ExB"}
1
+ {"version":3,"file":"OAuthRefresher.d.ts","sourceRoot":"","sources":["../../src/core/OAuthRefresher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAOH,OAAO,EAAE,qBAAqB,EAAyB,MAAM,4BAA4B,CAAC;AAE1F,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;CACrD;AAED,mFAAmF;AACnF,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACpE,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC;AAE5E,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED,oDAAoD;AACpD,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,EAAE,eAoDpC,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,eAAwC,GAC9C,WAAW,GAAG,IAAI,CAUpB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,aAAa,CAAC,CA2FxB"}
@@ -45,6 +45,7 @@ import crypto from 'node:crypto';
45
45
  import fs from 'node:fs';
46
46
  import os from 'node:os';
47
47
  import path from 'node:path';
48
+ import { credentialWriteFunnel } from './CredentialWriteFunnel.js';
48
49
  /** Public Claude Code OAuth token endpoint (from the official client binary). */
49
50
  export const CLAUDE_TOKEN_URL = 'https://platform.claude.com/v1/oauth/token';
50
51
  /** Public Claude Code OAuth client id (from the official client binary). */
@@ -57,6 +58,17 @@ export function expandHome(p) {
57
58
  }
58
59
  return p;
59
60
  }
61
+ /**
62
+ * Canonical per-slot lock key for a config home (Step 4b). The funnel keys its per-slot lock on
63
+ * THIS string, so two writers to the SAME keychain entry must derive the SAME key regardless of
64
+ * how the home was spelled. `path.resolve` over the home-expanded path strips a trailing slash and
65
+ * collapses `.`/`..` so `~/.claude` and `~/.claude/` (or `/h/.claude` and `/h/./.claude`) map to one
66
+ * lock — closing the string-identity race a refresh and a switch could otherwise have on the same
67
+ * account (second-pass review, 2026-06-13).
68
+ */
69
+ export function credentialSlotKey(configHome) {
70
+ return path.resolve(expandHome(configHome));
71
+ }
60
72
  /**
61
73
  * macOS keychain service name for a config home's Claude Code credentials.
62
74
  * The default home (`~/.claude`) has no hash suffix; every other config home is
@@ -151,6 +163,7 @@ export async function refreshClaudeToken(configHome, deps = {}) {
151
163
  const now = deps.now ?? (() => Date.now());
152
164
  const tokenUrl = deps.tokenUrl ?? CLAUDE_TOKEN_URL;
153
165
  const clientId = deps.clientId ?? CLAUDE_CODE_CLIENT_ID;
166
+ const funnel = deps.funnel ?? credentialWriteFunnel;
154
167
  const raw = store.read(configHome);
155
168
  if (!raw)
156
169
  return { ok: false, reason: 'read-failed' };
@@ -214,7 +227,16 @@ export async function refreshClaudeToken(configHome, deps = {}) {
214
227
  expiresAt,
215
228
  };
216
229
  const updatedRaw = { ...parsed, claudeAiOauth: updatedOauth };
217
- if (!store.write(configHome, JSON.stringify(updatedRaw))) {
230
+ // Serialize the write through the per-slot funnel (Step 4b): a refresh write can never
231
+ // interleave with a swap or another refresh on the SAME configHome slot. A lock-timeout is
232
+ // NOT a corruption — it is "busy, retry": surface 'write-skipped' so the QuotaPoller treats it
233
+ // as no-snapshot-this-cycle, NEVER needs-reauth. The exchange already succeeded; the existing
234
+ // (still-valid) credential is untouched.
235
+ const writeOutcome = await funnel.withSlotLock(credentialSlotKey(configHome), () => store.write(configHome, JSON.stringify(updatedRaw)));
236
+ if (!writeOutcome.ran) {
237
+ return { ok: false, reason: 'write-skipped' };
238
+ }
239
+ if (!writeOutcome.value) {
218
240
  return { ok: false, reason: 'write-failed' };
219
241
  }
220
242
  return { ok: true, accessToken: newAccess, expiresAt, rotated };
@@ -1 +1 @@
1
- {"version":3,"file":"OAuthRefresher.js","sourceRoot":"","sources":["../../src/core/OAuthRefresher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OAuthRefresher.js","sourceRoot":"","sources":["../../src/core/OAuthRefresher.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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"}
@@ -3478,11 +3478,26 @@ Rule: I do not state that work landed inside another agent's state unless I have
3478
3478
  **Model-Tier Escalation (EXPERIMENTAL — escalate the model for heavy work)** — A policy layer that can run my claude-code sessions on the ultra model (\`claude-fable-5\`) for the two heavy-work triggers — spec/project design (\`spec-converge\`) and implementation or long autonomous runs (\`build\`, \`autonomous\`, \`instar-dev\`) — and on the default tier (\`claude-opus-4-8\`) the rest of the time. EXPERIMENTAL and dark by default: \`models.tierEscalation\` in \`.instar/config.json\` ships \`enabled:false\` (and \`dryRun:true\`, which logs intended swaps without performing them). Frameworks with no escalated model configured (codex/gemini/pi) are never touched. Every escalation passes cost guards first (quota headroom, per-account concurrent-escalation cap, hourly budget, TTL + dwell hysteresis) and is audited.
3479
3479
  - Swap a session's tier (server-side authority — body carries a TIER ONLY, never a model id): \`curl -X POST -H "Authorization: Bearer $AUTH" http://localhost:${port}/sessions/SESSION_NAME/model-swap -H 'Content-Type: application/json' -d '{"tier":"escalated"}'\` (\`"default"\` to de-escalate). Refuses protected/non-idle sessions; honors enabled/dryRun; 202 = swap sent but unconfirmed.
3480
3480
  - Proactive: user asks "what model are you running?" / "why are you on Fable/Opus?" → \`GET /sessions\` reports each session's live \`model\`; name the trigger that escalated it (or say escalation is disabled/dry-run on this agent). User says "stop using the expensive model" → set \`models.tierEscalation.enabled:false\` and restart sessions to apply.
3481
+ - **Escalation rides a moved topic (WS5.3 — multi-machine).** When a topic running on the escalated tier is moved between my machines via \`POST /pool/transfer\`, the live escalation no longer silently drops on the resumed session. The source carries the topic's escalation TRIGGER as an ephemeral hint and the DESTINATION re-admits the resumed session through ITS OWN \`EscalationGovernor\` cost guards (quota/budget/dwell/TTL) — a trigger carry, NEVER a free tier grant. If the destination's guards refuse (at its concurrent-escalation cap, no quota headroom) or the topic is pinned \`escalationOverride:'suppress'\`, the session runs default tier — the move degrades safely, never smuggles escalation across or strands a wall. Ships dark behind \`models.tierEscalation.ridesTopic\` (default false) under \`tierEscalation.enabled\`; single-machine installs are a no-op. Proactive: user asks "did my heavy-work session keep its bigger model after the move?" → it re-evaluates under the destination's guards; if it dropped to default, name the guard that refused (cap/quota/suppress).
3481
3482
  `;
3482
3483
  content += '\n' + modelTierSection;
3483
3484
  patched = true;
3484
3485
  result.upgraded.push('CLAUDE.md: added Model-Tier Escalation awareness section');
3485
3486
  }
3487
+ // WS5.3 (escalation-rides-topic): existing agents that ALREADY carry the
3488
+ // Model-Tier Escalation section need the new rides-topic bullet too. Idempotent,
3489
+ // content-sniffed on the distinctive WS5.3 marker, appended right after the
3490
+ // section's existing "stop using the expensive model" proactive line.
3491
+ if (content.includes('Model-Tier Escalation (EXPERIMENTAL') &&
3492
+ !content.includes('Escalation rides a moved topic (WS5.3')) {
3493
+ const anchor = '- Proactive: user asks "what model are you running?" / "why are you on Fable/Opus?" → `GET /sessions` reports each session\'s live `model`; name the trigger that escalated it (or say escalation is disabled/dry-run on this agent). User says "stop using the expensive model" → set `models.tierEscalation.enabled:false` and restart sessions to apply.';
3494
+ const ridesBullet = '\n- **Escalation rides a moved topic (WS5.3 — multi-machine).** When a topic running on the escalated tier is moved between my machines via `POST /pool/transfer`, the live escalation no longer silently drops on the resumed session. The source carries the topic\'s escalation TRIGGER as an ephemeral hint and the DESTINATION re-admits the resumed session through ITS OWN `EscalationGovernor` cost guards (quota/budget/dwell/TTL) — a trigger carry, NEVER a free tier grant. If the destination\'s guards refuse (at its concurrent-escalation cap, no quota headroom) or the topic is pinned `escalationOverride:\'suppress\'`, the session runs default tier — the move degrades safely, never smuggles escalation across or strands a wall. Ships dark behind `models.tierEscalation.ridesTopic` (default false) under `tierEscalation.enabled`; single-machine installs are a no-op. Proactive: user asks "did my heavy-work session keep its bigger model after the move?" → it re-evaluates under the destination\'s guards; if it dropped to default, name the guard that refused (cap/quota/suppress).';
3495
+ if (content.includes(anchor)) {
3496
+ content = content.replace(anchor, anchor + ridesBullet);
3497
+ patched = true;
3498
+ result.upgraded.push('CLAUDE.md: added WS5.3 escalation-rides-topic bullet to Model-Tier Escalation section');
3499
+ }
3500
+ }
3486
3501
  // MTP Protocol — the two EXO 3.0 tests (refusal + endorsement) on ORG-INTENT.
3487
3502
  // Existing agents need to know the /intent/org/test-action endpoint + the
3488
3503
  // three-layer protocol exist. Content-sniffed on a distinctive marker.