instar 1.3.606 → 1.3.608
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/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +333 -32
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +38 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/coordination/CrossMachineMandate.d.ts +53 -0
- package/dist/coordination/CrossMachineMandate.d.ts.map +1 -0
- package/dist/coordination/CrossMachineMandate.js +76 -0
- package/dist/coordination/CrossMachineMandate.js.map +1 -0
- package/dist/core/AccountCredentialShare.d.ts +115 -0
- package/dist/core/AccountCredentialShare.d.ts.map +1 -0
- package/dist/core/AccountCredentialShare.js +113 -0
- package/dist/core/AccountCredentialShare.js.map +1 -0
- package/dist/core/AccountFollowMeGrants.d.ts +92 -0
- package/dist/core/AccountFollowMeGrants.d.ts.map +1 -0
- package/dist/core/AccountFollowMeGrants.js +106 -0
- package/dist/core/AccountFollowMeGrants.js.map +1 -0
- package/dist/core/CoherenceJournal.d.ts +1 -1
- package/dist/core/CoherenceJournal.d.ts.map +1 -1
- package/dist/core/CoherenceJournal.js +12 -2
- package/dist/core/CoherenceJournal.js.map +1 -1
- package/dist/core/PairingEpochManager.d.ts +68 -0
- package/dist/core/PairingEpochManager.d.ts.map +1 -0
- package/dist/core/PairingEpochManager.js +88 -0
- package/dist/core/PairingEpochManager.js.map +1 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +38 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/SecretStore.d.ts +44 -0
- package/dist/core/SecretStore.d.ts.map +1 -1
- package/dist/core/SecretStore.js +126 -0
- package/dist/core/SecretStore.js.map +1 -1
- package/dist/core/SecretSync.d.ts.map +1 -1
- package/dist/core/SecretSync.js +6 -0
- package/dist/core/SecretSync.js.map +1 -1
- package/dist/core/SubscriptionAccountMetaReplicatedStore.d.ts +106 -0
- package/dist/core/SubscriptionAccountMetaReplicatedStore.d.ts.map +1 -0
- package/dist/core/SubscriptionAccountMetaReplicatedStore.js +263 -0
- package/dist/core/SubscriptionAccountMetaReplicatedStore.js.map +1 -0
- package/dist/core/SubscriptionPool.d.ts +23 -5
- package/dist/core/SubscriptionPool.d.ts.map +1 -1
- package/dist/core/SubscriptionPool.js +30 -6
- package/dist/core/SubscriptionPool.js.map +1 -1
- package/dist/core/devGatedFeatures.d.ts.map +1 -1
- package/dist/core/devGatedFeatures.js +12 -0
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/core/types.d.ts +37 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/monitoring/AutonomousLivenessReconciler.d.ts +278 -0
- package/dist/monitoring/AutonomousLivenessReconciler.d.ts.map +1 -0
- package/dist/monitoring/AutonomousLivenessReconciler.js +660 -0
- package/dist/monitoring/AutonomousLivenessReconciler.js.map +1 -0
- package/dist/monitoring/ResumeQueue.d.ts +10 -0
- package/dist/monitoring/ResumeQueue.d.ts.map +1 -1
- package/dist/monitoring/ResumeQueue.js +12 -0
- package/dist/monitoring/ResumeQueue.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +7 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts +1 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +6 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts +4 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +10 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +64 -64
- package/src/scaffold/templates.ts +7 -0
- package/upgrades/1.3.607.md +25 -0
- package/upgrades/1.3.608.md +29 -0
- package/upgrades/side-effects/autonomous-liveness-reconciler.md +39 -0
- package/upgrades/side-effects/ws52-account-follow-me-pr1.md +74 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WS5.2 §6.1a — the `subscription-account-meta` replicated JournalKind.
|
|
3
|
+
*
|
|
4
|
+
* Registry follow-me = METADATA ONLY (spec §6.1, R2). A redacted projection of a
|
|
5
|
+
* SubscriptionAccount replicates so a peer machine KNOWS the account exists and how loaded it
|
|
6
|
+
* is (`GET /subscription-pool?scope=pool`, WS5.1) WITHOUT ever holding its login. THE LOGIN
|
|
7
|
+
* LOCATION (`configHome`) AND EVERY CREDENTIAL FIELD ARE STRIPPED — `configHome` is meaningless
|
|
8
|
+
* cross-machine and replicating it would invite the "just point at the path" leak the boundary
|
|
9
|
+
* forbids; no credential field exists in this shape at all.
|
|
10
|
+
*
|
|
11
|
+
* It rides the MODERN ReplicatedKindRegistry path (like the 8 WS2 `*-record` kinds): the
|
|
12
|
+
* schema below is validated on top of the generic envelope by BOTH CoherenceJournal.validate()
|
|
13
|
+
* (send/source-of-truth mirror) AND JournalSyncApplier.validateData (receive side) — both route
|
|
14
|
+
* through `replicatedRegistry.getByKind()` first. This resolves the spec↔code divergence: the
|
|
15
|
+
* spec cited the legacy inline `JournalSyncApplier.validateData` branch (line 574), but the
|
|
16
|
+
* codebase moved to the registry; registering THIS schema satisfies the spec's intent (a strict
|
|
17
|
+
* receive-side validator) on the current architecture. The dual-registry coupling test asserts
|
|
18
|
+
* the kind is ALSO present in JOURNAL_KINDS — a kind without its validator suspect-flags peers.
|
|
19
|
+
*
|
|
20
|
+
* Free-text content-injection surface = `nickname`/`email` (operator/provider free text rendered
|
|
21
|
+
* into agent context + the dashboard). Both are control-char-stripped + length-clamped (≤256).
|
|
22
|
+
* `email` is operator/provider PII that lands at-rest in each same-operator peer's plaintext
|
|
23
|
+
* coherence-journal replica — accepted as low-stakes (email is NEVER a secret); named, not silent.
|
|
24
|
+
*
|
|
25
|
+
* Ships DARK behind `multiMachine.accountFollowMe` (this kind only emits/applies when enabled).
|
|
26
|
+
*/
|
|
27
|
+
import { RESERVED_ENVELOPE_FIELDS, } from './ReplicatedRecordEnvelope.js';
|
|
28
|
+
export const SUBSCRIPTION_ACCOUNT_META_STORE_KEY = 'subscriptionAccountMeta';
|
|
29
|
+
export const SUBSCRIPTION_ACCOUNT_META_KIND = 'subscription-account-meta';
|
|
30
|
+
/** Account meta is reference, not authority → LOW impact (latest-writer on the holder stream). */
|
|
31
|
+
export const SUBSCRIPTION_ACCOUNT_META_IMPACT_TIER = 'low';
|
|
32
|
+
const MAX_FREETEXT = 256;
|
|
33
|
+
// Mirrors the source-of-truth closed sets in SubscriptionPool.ts (PROVIDERS/FRAMEWORKS/STATUSES
|
|
34
|
+
// are module-local there). KEEP IN SYNC — the receive-side validator must reject a value the
|
|
35
|
+
// local pool would reject. A drift is caught by the schema-parity unit test below.
|
|
36
|
+
const PROVIDERS = ['anthropic', 'openai', 'github-copilot', 'google'];
|
|
37
|
+
const FRAMEWORKS = ['claude-code', 'codex-cli', 'gemini-cli', 'pi-cli'];
|
|
38
|
+
const STATUSES = ['active', 'warming', 'rate-limited', 'needs-reauth', 'disabled'];
|
|
39
|
+
const QUOTA_SOURCES = ['claude-code-usage-screen', 'oauth-usage-endpoint-fallback'];
|
|
40
|
+
const ID_RE = /^[a-z0-9-]+$/;
|
|
41
|
+
const VALUE_FIELDS = ['id', 'nickname', 'email', 'provider', 'framework', 'status', 'quota'];
|
|
42
|
+
// `op` is a RESERVED envelope field (owned by the envelope, never store-owned) — it is read from
|
|
43
|
+
// `raw` to branch put/delete but is NOT in knownFields. `deletedAt` IS a store field (tombstone).
|
|
44
|
+
const ALL_KNOWN_FIELDS = [...VALUE_FIELDS, 'deletedAt'];
|
|
45
|
+
function isIso8601(v) {
|
|
46
|
+
if (typeof v !== 'string' || v.length === 0 || v.length > 64)
|
|
47
|
+
return false;
|
|
48
|
+
const t = Date.parse(v);
|
|
49
|
+
return Number.isFinite(t);
|
|
50
|
+
}
|
|
51
|
+
/** Non-empty, control-char-free, length-clamped free text. null ⇒ reject. */
|
|
52
|
+
function cleanText(v, { required }) {
|
|
53
|
+
if (v === undefined || v === null)
|
|
54
|
+
return required ? null : undefined;
|
|
55
|
+
if (typeof v !== 'string')
|
|
56
|
+
return null;
|
|
57
|
+
// eslint-disable-next-line no-control-regex
|
|
58
|
+
if (/[\x00-\x1F\x7F]/.test(v))
|
|
59
|
+
return null; // control chars never survive
|
|
60
|
+
const clamped = v.length > MAX_FREETEXT ? v.slice(0, MAX_FREETEXT) : v;
|
|
61
|
+
if (required && clamped.length === 0)
|
|
62
|
+
return null;
|
|
63
|
+
return clamped;
|
|
64
|
+
}
|
|
65
|
+
/** Validate the optional AccountQuotaSnapshot projection strictly. undefined ⇒ absent; null ⇒ reject. */
|
|
66
|
+
function validateQuota(v) {
|
|
67
|
+
if (v === undefined)
|
|
68
|
+
return undefined;
|
|
69
|
+
if (v === null)
|
|
70
|
+
return undefined; // absent quota is fine
|
|
71
|
+
if (typeof v !== 'object' || Array.isArray(v))
|
|
72
|
+
return null;
|
|
73
|
+
const q = v;
|
|
74
|
+
const out = {};
|
|
75
|
+
const knownQuota = ['fiveHour', 'sevenDay', 'perModel', 'extraUsage', 'source', 'measuredAt'];
|
|
76
|
+
for (const k of Object.keys(q))
|
|
77
|
+
if (!knownQuota.includes(k))
|
|
78
|
+
return null; // extra key → reject
|
|
79
|
+
for (const win of ['fiveHour', 'sevenDay']) {
|
|
80
|
+
if (q[win] !== undefined) {
|
|
81
|
+
const w = q[win];
|
|
82
|
+
if (typeof w !== 'object' || w === null || Array.isArray(w))
|
|
83
|
+
return null;
|
|
84
|
+
const ww = w;
|
|
85
|
+
for (const k of Object.keys(ww))
|
|
86
|
+
if (k !== 'utilizationPct' && k !== 'resetsAt')
|
|
87
|
+
return null;
|
|
88
|
+
if (typeof ww.utilizationPct !== 'number' || !Number.isFinite(ww.utilizationPct))
|
|
89
|
+
return null;
|
|
90
|
+
if (!isIso8601(ww.resetsAt))
|
|
91
|
+
return null;
|
|
92
|
+
out[win] = { utilizationPct: ww.utilizationPct, resetsAt: ww.resetsAt };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (q.perModel !== undefined) {
|
|
96
|
+
if (typeof q.perModel !== 'object' || q.perModel === null || Array.isArray(q.perModel))
|
|
97
|
+
return null;
|
|
98
|
+
const pm = q.perModel;
|
|
99
|
+
for (const val of Object.values(pm)) {
|
|
100
|
+
if (val !== null && (typeof val !== 'number' || !Number.isFinite(val)))
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
out.perModel = pm;
|
|
104
|
+
}
|
|
105
|
+
if (q.extraUsage !== undefined) {
|
|
106
|
+
const e = q.extraUsage;
|
|
107
|
+
if (typeof e !== 'object' || e === null || Array.isArray(e))
|
|
108
|
+
return null;
|
|
109
|
+
const ee = e;
|
|
110
|
+
for (const k of Object.keys(ee))
|
|
111
|
+
if (!['isEnabled', 'usedCredits', 'monthlyLimit'].includes(k))
|
|
112
|
+
return null;
|
|
113
|
+
if (typeof ee.isEnabled !== 'boolean')
|
|
114
|
+
return null;
|
|
115
|
+
if (typeof ee.usedCredits !== 'number' || !Number.isFinite(ee.usedCredits))
|
|
116
|
+
return null;
|
|
117
|
+
if (typeof ee.monthlyLimit !== 'number' || !Number.isFinite(ee.monthlyLimit))
|
|
118
|
+
return null;
|
|
119
|
+
out.extraUsage = { isEnabled: ee.isEnabled, usedCredits: ee.usedCredits, monthlyLimit: ee.monthlyLimit };
|
|
120
|
+
}
|
|
121
|
+
if (q.source !== undefined) {
|
|
122
|
+
if (typeof q.source !== 'string' || !QUOTA_SOURCES.includes(q.source))
|
|
123
|
+
return null;
|
|
124
|
+
out.source = q.source;
|
|
125
|
+
}
|
|
126
|
+
if (q.measuredAt !== undefined) {
|
|
127
|
+
if (!isIso8601(q.measuredAt))
|
|
128
|
+
return null;
|
|
129
|
+
out.measuredAt = q.measuredAt;
|
|
130
|
+
}
|
|
131
|
+
return out;
|
|
132
|
+
}
|
|
133
|
+
export const subscriptionAccountMetaStoreSchema = {
|
|
134
|
+
knownFields: ALL_KNOWN_FIELDS,
|
|
135
|
+
validate(raw, ctx) {
|
|
136
|
+
const op = raw.op;
|
|
137
|
+
// ── DELETE (tombstone) branch — an account meta removal. Only deletedAt is a legal field.
|
|
138
|
+
if (op === 'delete') {
|
|
139
|
+
const deletedAt = isIso8601(raw.deletedAt) ? raw.deletedAt : undefined;
|
|
140
|
+
for (const k of Object.keys(raw)) {
|
|
141
|
+
if (k === 'op' || k === 'deletedAt')
|
|
142
|
+
continue;
|
|
143
|
+
if (VALUE_FIELDS.includes(k))
|
|
144
|
+
ctx.countDroppedField();
|
|
145
|
+
}
|
|
146
|
+
return deletedAt !== undefined ? { deletedAt } : {};
|
|
147
|
+
}
|
|
148
|
+
// ── VALUE (put) branch — the redacted, credential-free projection. ──────────
|
|
149
|
+
// id — required, charset-clamped MIRRORING SubscriptionPool ID_RE (a forged id cannot
|
|
150
|
+
// smuggle characters the local add() would reject).
|
|
151
|
+
if (typeof raw.id !== 'string' || raw.id.length === 0 || raw.id.length > MAX_FREETEXT || !ID_RE.test(raw.id)) {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
const id = raw.id;
|
|
155
|
+
// nickname — required, control-char-free, ≤256.
|
|
156
|
+
const nickname = cleanText(raw.nickname, { required: true });
|
|
157
|
+
if (nickname === null || nickname === undefined)
|
|
158
|
+
return null;
|
|
159
|
+
// email — OPTIONAL, control-char-free, ≤256.
|
|
160
|
+
const email = cleanText(raw.email, { required: false });
|
|
161
|
+
if (email === null)
|
|
162
|
+
return null; // present-but-malformed → reject
|
|
163
|
+
// provider / framework / status — required closed-set membership (markup can't survive an enum).
|
|
164
|
+
if (typeof raw.provider !== 'string' || !PROVIDERS.includes(raw.provider))
|
|
165
|
+
return null;
|
|
166
|
+
if (typeof raw.framework !== 'string' || !FRAMEWORKS.includes(raw.framework))
|
|
167
|
+
return null;
|
|
168
|
+
if (typeof raw.status !== 'string' || !STATUSES.includes(raw.status))
|
|
169
|
+
return null;
|
|
170
|
+
// quota — OPTIONAL, strict shape; malformed → reject the whole record (§6.1a).
|
|
171
|
+
const quota = validateQuota(raw.quota);
|
|
172
|
+
if (quota === null)
|
|
173
|
+
return null;
|
|
174
|
+
// Extra/unknown STORE keys (incl. a smuggled configHome or any credential field) → reject.
|
|
175
|
+
// Reserved envelope fields (op/recordKey/hlc/origin/observed) ride in `raw` and are the
|
|
176
|
+
// envelope's, not the store's — exempt them from the store-field whitelist check.
|
|
177
|
+
for (const k of Object.keys(raw)) {
|
|
178
|
+
if (ALL_KNOWN_FIELDS.includes(k))
|
|
179
|
+
continue;
|
|
180
|
+
if (RESERVED_ENVELOPE_FIELDS.includes(k))
|
|
181
|
+
continue;
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
const out = {
|
|
185
|
+
id,
|
|
186
|
+
nickname,
|
|
187
|
+
provider: raw.provider,
|
|
188
|
+
framework: raw.framework,
|
|
189
|
+
status: raw.status,
|
|
190
|
+
};
|
|
191
|
+
if (email !== undefined)
|
|
192
|
+
out.email = email;
|
|
193
|
+
if (quota !== undefined)
|
|
194
|
+
out.quota = quota;
|
|
195
|
+
return out;
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
/** The ReplicatedKindRegistry registration for the `subscription-account-meta` store.
|
|
199
|
+
* server.ts registers this onto the shared registry; the dual-registry coupling test
|
|
200
|
+
* asserts `kind` is also present in JOURNAL_KINDS. */
|
|
201
|
+
export const SUBSCRIPTION_ACCOUNT_META_KIND_REGISTRATION = {
|
|
202
|
+
kind: SUBSCRIPTION_ACCOUNT_META_KIND,
|
|
203
|
+
store: SUBSCRIPTION_ACCOUNT_META_STORE_KEY,
|
|
204
|
+
schema: subscriptionAccountMetaStoreSchema,
|
|
205
|
+
};
|
|
206
|
+
/** The recordKey for an account's meta stream — the account id (charset-clamped at the schema). */
|
|
207
|
+
export function deriveSubscriptionAccountMetaRecordKey(accountId) {
|
|
208
|
+
return accountId;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* The redacted, credential-free projection that crosses the wire (R2 defense-in-depth).
|
|
212
|
+
* Built by EXPLICIT ALLOWLIST (never by deleting fields off the source account) — so a future
|
|
213
|
+
* field added to SubscriptionAccount, or a credential field, can NEVER ride along: only these
|
|
214
|
+
* seven keys are ever copied, and `configHome` + every credential field are simply not among
|
|
215
|
+
* them. The receive-side schema (subscriptionAccountMetaStoreSchema) independently rejects any
|
|
216
|
+
* non-whitelisted key, so the boundary is enforced on BOTH ends.
|
|
217
|
+
*/
|
|
218
|
+
export function projectAccountToMeta(account) {
|
|
219
|
+
const out = {
|
|
220
|
+
id: account.id,
|
|
221
|
+
nickname: account.nickname,
|
|
222
|
+
provider: account.provider,
|
|
223
|
+
framework: account.framework,
|
|
224
|
+
status: account.status,
|
|
225
|
+
};
|
|
226
|
+
if (typeof account.email === 'string' && account.email.length > 0)
|
|
227
|
+
out.email = account.email;
|
|
228
|
+
if (account.lastQuota && typeof account.lastQuota === 'object')
|
|
229
|
+
out.quota = account.lastQuota;
|
|
230
|
+
return out;
|
|
231
|
+
}
|
|
232
|
+
/** Build the full replicated envelope (projection + envelope fields) for an account-meta put. */
|
|
233
|
+
export function buildSubscriptionAccountMetaData(input) {
|
|
234
|
+
const { account, hlc, origin, observed } = input;
|
|
235
|
+
return {
|
|
236
|
+
...projectAccountToMeta(account),
|
|
237
|
+
recordKey: deriveSubscriptionAccountMetaRecordKey(account.id),
|
|
238
|
+
hlc,
|
|
239
|
+
op: 'put',
|
|
240
|
+
origin,
|
|
241
|
+
...(observed !== undefined ? { observed } : {}),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
/** Build the tombstone envelope for a removed account-meta. */
|
|
245
|
+
export function buildSubscriptionAccountMetaTombstoneData(input) {
|
|
246
|
+
return {
|
|
247
|
+
deletedAt: input.deletedAt,
|
|
248
|
+
recordKey: deriveSubscriptionAccountMetaRecordKey(input.accountId),
|
|
249
|
+
hlc: input.hlc,
|
|
250
|
+
op: 'delete',
|
|
251
|
+
origin: input.origin,
|
|
252
|
+
...(input.observed !== undefined ? { observed: input.observed } : {}),
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/** Contributing journal kinds (for rollback-unmerge's kindsForStore wiring). */
|
|
256
|
+
export function subscriptionAccountMetaContributingKinds() {
|
|
257
|
+
return [SUBSCRIPTION_ACCOUNT_META_KIND];
|
|
258
|
+
}
|
|
259
|
+
/** Impact tier resolver for ReplicatedStoreReader.tierOf (LOW; conservative for unknown). */
|
|
260
|
+
export function subscriptionAccountMetaTierOf(_store) {
|
|
261
|
+
return SUBSCRIPTION_ACCOUNT_META_IMPACT_TIER;
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=SubscriptionAccountMetaReplicatedStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionAccountMetaReplicatedStore.js","sourceRoot":"","sources":["../../src/core/SubscriptionAccountMetaReplicatedStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EACL,wBAAwB,GAKzB,MAAM,+BAA+B,CAAC;AAIvC,MAAM,CAAC,MAAM,mCAAmC,GAAG,yBAAyB,CAAC;AAC7E,MAAM,CAAC,MAAM,8BAA8B,GAAG,2BAA2B,CAAC;AAC1E,kGAAkG;AAClG,MAAM,CAAC,MAAM,qCAAqC,GAAe,KAAK,CAAC;AAEvE,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,gGAAgG;AAChG,6FAA6F;AAC7F,mFAAmF;AACnF,MAAM,SAAS,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,CAAU,CAAC;AAC/E,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAU,CAAC;AACjF,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,CAAU,CAAC;AAC5F,MAAM,aAAa,GAAG,CAAC,0BAA0B,EAAE,+BAA+B,CAAU,CAAC;AAC7F,MAAM,KAAK,GAAG,cAAc,CAAC;AAE7B,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AACtG,iGAAiG;AACjG,kGAAkG;AAClG,MAAM,gBAAgB,GAA0B,CAAC,GAAG,YAAY,EAAE,WAAW,CAAC,CAAC;AAE/E,SAAS,SAAS,CAAC,CAAU;IAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IAC3E,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,6EAA6E;AAC7E,SAAS,SAAS,CAAC,CAAU,EAAE,EAAE,QAAQ,EAAyB;IAChE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvC,4CAA4C;IAC5C,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,8BAA8B;IAC1E,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yGAAyG;AACzG,SAAS,aAAa,CAAC,CAAU;IAC/B,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC,CAAC,uBAAuB;IACzD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,CAAC,GAAG,CAA4B,CAAC;IACvC,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9F,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,qBAAqB;IAE/F,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,CAAU,EAAE,CAAC;QACpD,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACzE,MAAM,EAAE,GAAG,CAA4B,CAAC;YACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,KAAK,UAAU;oBAAE,OAAO,IAAI,CAAC;YAC7F,IAAI,OAAO,EAAE,CAAC,cAAc,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC9F,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC;YACzC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACpG,MAAM,EAAE,GAAG,CAAC,CAAC,QAAmC,CAAC;QACjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACpC,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QACtF,CAAC;QACD,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;IACpB,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;QACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACzE,MAAM,EAAE,GAAG,CAA4B,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC5G,IAAI,OAAO,EAAE,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAC;QACxF,IAAI,OAAO,EAAE,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1F,GAAG,CAAC,UAAU,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC;IAC3G,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAwC,CAAC;YAAE,OAAO,IAAI,CAAC;QACrH,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,kCAAkC,GAAqB;IAClE,WAAW,EAAE,gBAAgB;IAC7B,QAAQ,CAAC,GAAsC,EAAE,GAAyB;QACxE,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QAElB,2FAA2F;QAC3F,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,SAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,WAAW;oBAAE,SAAS;gBAC9C,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAkC,CAAC;oBAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACzF,CAAC;YACD,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,CAAC;QAED,+EAA+E;QAC/E,sFAAsF;QACtF,oDAAoD;QACpD,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7G,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QAElB,gDAAgD;QAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAE7D,6CAA6C;QAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,CAAC,iCAAiC;QAElE,iGAAiG;QACjG,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAsC,CAAC;YAAE,OAAO,IAAI,CAAC;QACrH,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAwC,CAAC;YAAE,OAAO,IAAI,CAAC;QACzH,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAmC,CAAC;YAAE,OAAO,IAAI,CAAC;QAE/G,+EAA+E;QAC/E,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAEhC,2FAA2F;QAC3F,wFAAwF;QACxF,kFAAkF;QAClF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC3C,IAAI,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,SAAS;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAA4B;YACnC,EAAE;YACF,QAAQ;YACR,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC;QACF,IAAI,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3C,IAAI,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3C,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC;AAEF;;uDAEuD;AACvD,MAAM,CAAC,MAAM,2CAA2C,GAAG;IACzD,IAAI,EAAE,8BAA8B;IACpC,KAAK,EAAE,mCAAmC;IAC1C,MAAM,EAAE,kCAAkC;CAClC,CAAC;AAEX,mGAAmG;AACnG,MAAM,UAAU,sCAAsC,CAAC,SAAiB;IACtE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAQpC;IACC,MAAM,GAAG,GAA4B;QACnC,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;IACF,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7F,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;QAAE,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;IAC9F,OAAO,GAAG,CAAC;AACb,CAAC;AAYD,iGAAiG;AACjG,MAAM,UAAU,gCAAgC,CAAC,KAKhD;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACjD,OAAO;QACL,GAAG,oBAAoB,CAAC,OAAO,CAAC;QAChC,SAAS,EAAE,sCAAsC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,GAAG;QACH,EAAE,EAAE,KAAqB;QACzB,MAAM;QACN,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,yCAAyC,CAAC,KAMzD;IACC,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,sCAAsC,CAAC,KAAK,CAAC,SAAS,CAAC;QAClE,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,EAAE,EAAE,QAAwB;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC;AACJ,CAAC;AAUD,gFAAgF;AAChF,MAAM,UAAU,wCAAwC;IACtD,OAAO,CAAC,8BAA8B,CAAC,CAAC;AAC1C,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,6BAA6B,CAAC,MAAc;IAC1D,OAAO,qCAAqC,CAAC;AAC/C,CAAC"}
|
|
@@ -8,11 +8,18 @@
|
|
|
8
8
|
* provider." Each account is a first-class registry entry keyed to its login
|
|
9
9
|
* LOCATION — its per-account config home (e.g. CLAUDE_CONFIG_DIR) — NOT its
|
|
10
10
|
* tokens. This is the load-bearing invariant behind decision 1A
|
|
11
|
-
* ("re-enroll per machine
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
11
|
+
* ("re-enroll per machine"): because the registry only ever stores the
|
|
12
|
+
* config-home path, a leaked registry file never leaks a credential.
|
|
13
|
+
*
|
|
14
|
+
* Cross-machine account follow-me (WS5.2, docs/specs/ws52-account-follow-me-security.md):
|
|
15
|
+
* the DEFAULT is RE-MINT PER MACHINE (Mechanism B) — each machine drives its OWN
|
|
16
|
+
* operator-approved login and holds its own grant; an OAuth config-home NEVER crosses
|
|
17
|
+
* machines. Only a NON-credential, redacted metadata projection replicates (the
|
|
18
|
+
* `subscription-account-meta` JournalKind — id/nickname/email/provider/framework/status/
|
|
19
|
+
* quota; configHome STRIPPED). Shipping each account's credential blob over E2E secret-sync
|
|
20
|
+
* is Mechanism A — a SEPARATE, per-provider-allowlist, default-OFF path that is REFUSED for
|
|
21
|
+
* Anthropic (its ToS prohibits relocating Claude OAuth tokens). NOT the default; do not
|
|
22
|
+
* conflate the two.
|
|
16
23
|
*
|
|
17
24
|
* Why never tokens: Anthropic prohibits Claude OAuth tokens in non-Claude-Code
|
|
18
25
|
* tools and enforces it. The pool drives each account through its real
|
|
@@ -28,6 +35,7 @@
|
|
|
28
35
|
* entirely unaffected.
|
|
29
36
|
*/
|
|
30
37
|
import type { ComponentHealth } from './types.js';
|
|
38
|
+
import type { SubscriptionAccountMetaReplicationEmitter } from './SubscriptionAccountMetaReplicatedStore.js';
|
|
31
39
|
/** Provider behind a subscription (the account's billing identity). */
|
|
32
40
|
export type SubscriptionProvider = 'anthropic' | 'openai' | 'github-copilot' | 'google';
|
|
33
41
|
/** Framework client that drives the account. */
|
|
@@ -133,7 +141,17 @@ export declare class ValidationError extends Error {
|
|
|
133
141
|
export declare class SubscriptionPool {
|
|
134
142
|
private storePath;
|
|
135
143
|
private store;
|
|
144
|
+
/**
|
|
145
|
+
* WS5.2 §6.1a — optional emit seam for cross-machine registry follow-me (metadata only).
|
|
146
|
+
* Wired in server.ts ONLY when `multiMachine.accountFollowMe` resolves enabled; null = no
|
|
147
|
+
* replication (single-machine / dark default). The pool emits a REDACTED projection
|
|
148
|
+
* (projectAccountToMeta strips configHome + every credential field by allowlist) — never the
|
|
149
|
+
* login location, never a token.
|
|
150
|
+
*/
|
|
151
|
+
private metaReplication;
|
|
136
152
|
constructor(config: SubscriptionPoolConfig);
|
|
153
|
+
/** Inject the follow-me meta emitter (server.ts, gated behind accountFollowMe). */
|
|
154
|
+
setMetaReplicationEmitter(emitter: SubscriptionAccountMetaReplicationEmitter | null): void;
|
|
137
155
|
/** All accounts (a shallow copy — callers can't mutate the store). */
|
|
138
156
|
list(): SubscriptionAccount[];
|
|
139
157
|
/** One account by id, or null. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionPool.d.ts","sourceRoot":"","sources":["../../src/core/SubscriptionPool.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"SubscriptionPool.d.ts","sourceRoot":"","sources":["../../src/core/SubscriptionPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,11 +8,18 @@
|
|
|
8
8
|
* provider." Each account is a first-class registry entry keyed to its login
|
|
9
9
|
* LOCATION — its per-account config home (e.g. CLAUDE_CONFIG_DIR) — NOT its
|
|
10
10
|
* tokens. This is the load-bearing invariant behind decision 1A
|
|
11
|
-
* ("re-enroll per machine
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
11
|
+
* ("re-enroll per machine"): because the registry only ever stores the
|
|
12
|
+
* config-home path, a leaked registry file never leaks a credential.
|
|
13
|
+
*
|
|
14
|
+
* Cross-machine account follow-me (WS5.2, docs/specs/ws52-account-follow-me-security.md):
|
|
15
|
+
* the DEFAULT is RE-MINT PER MACHINE (Mechanism B) — each machine drives its OWN
|
|
16
|
+
* operator-approved login and holds its own grant; an OAuth config-home NEVER crosses
|
|
17
|
+
* machines. Only a NON-credential, redacted metadata projection replicates (the
|
|
18
|
+
* `subscription-account-meta` JournalKind — id/nickname/email/provider/framework/status/
|
|
19
|
+
* quota; configHome STRIPPED). Shipping each account's credential blob over E2E secret-sync
|
|
20
|
+
* is Mechanism A — a SEPARATE, per-provider-allowlist, default-OFF path that is REFUSED for
|
|
21
|
+
* Anthropic (its ToS prohibits relocating Claude OAuth tokens). NOT the default; do not
|
|
22
|
+
* conflate the two.
|
|
16
23
|
*
|
|
17
24
|
* Why never tokens: Anthropic prohibits Claude OAuth tokens in non-Claude-Code
|
|
18
25
|
* tools and enforces it. The pool drives each account through its real
|
|
@@ -75,10 +82,22 @@ export class ValidationError extends Error {
|
|
|
75
82
|
export class SubscriptionPool {
|
|
76
83
|
storePath;
|
|
77
84
|
store;
|
|
85
|
+
/**
|
|
86
|
+
* WS5.2 §6.1a — optional emit seam for cross-machine registry follow-me (metadata only).
|
|
87
|
+
* Wired in server.ts ONLY when `multiMachine.accountFollowMe` resolves enabled; null = no
|
|
88
|
+
* replication (single-machine / dark default). The pool emits a REDACTED projection
|
|
89
|
+
* (projectAccountToMeta strips configHome + every credential field by allowlist) — never the
|
|
90
|
+
* login location, never a token.
|
|
91
|
+
*/
|
|
92
|
+
metaReplication = null;
|
|
78
93
|
constructor(config) {
|
|
79
94
|
this.storePath = path.join(config.stateDir, 'subscription-pool.json');
|
|
80
95
|
this.store = this.load();
|
|
81
96
|
}
|
|
97
|
+
/** Inject the follow-me meta emitter (server.ts, gated behind accountFollowMe). */
|
|
98
|
+
setMetaReplicationEmitter(emitter) {
|
|
99
|
+
this.metaReplication = emitter;
|
|
100
|
+
}
|
|
82
101
|
// ── Reads ────────────────────────────────────────────────────────
|
|
83
102
|
/** All accounts (a shallow copy — callers can't mutate the store). */
|
|
84
103
|
list() {
|
|
@@ -142,6 +161,7 @@ export class SubscriptionPool {
|
|
|
142
161
|
};
|
|
143
162
|
this.store.accounts.push(account);
|
|
144
163
|
this.save();
|
|
164
|
+
this.metaReplication?.emitPut(account);
|
|
145
165
|
return { ...account };
|
|
146
166
|
}
|
|
147
167
|
/**
|
|
@@ -195,6 +215,8 @@ export class SubscriptionPool {
|
|
|
195
215
|
}
|
|
196
216
|
acct.version += 1;
|
|
197
217
|
this.save();
|
|
218
|
+
// Re-emit on any mutation — a peer must SEE a status/quota change (§6.1a holder stream).
|
|
219
|
+
this.metaReplication?.emitPut(acct);
|
|
198
220
|
return { ...acct };
|
|
199
221
|
}
|
|
200
222
|
/** Remove an account. Returns true if one was removed. */
|
|
@@ -202,8 +224,10 @@ export class SubscriptionPool {
|
|
|
202
224
|
const before = this.store.accounts.length;
|
|
203
225
|
this.store.accounts = this.store.accounts.filter((a) => a.id !== id);
|
|
204
226
|
const removed = this.store.accounts.length < before;
|
|
205
|
-
if (removed)
|
|
227
|
+
if (removed) {
|
|
206
228
|
this.save();
|
|
229
|
+
this.metaReplication?.emitDelete(id, new Date().toISOString());
|
|
230
|
+
}
|
|
207
231
|
return removed;
|
|
208
232
|
}
|
|
209
233
|
// ── Health ───────────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionPool.js","sourceRoot":"","sources":["../../src/core/SubscriptionPool.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"SubscriptionPool.js","sourceRoot":"","sources":["../../src/core/SubscriptionPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devGatedFeatures.d.ts","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"devGatedFeatures.d.ts","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EA6U/C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,sBAAsB,GACtB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,EA4HnD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO5E"}
|
|
@@ -162,6 +162,12 @@ export const DEV_GATED_FEATURES = [
|
|
|
162
162
|
description: 'WS4.1 durable operator-bound /ack across machines — a pooled-attention ack whose owner is briefly offline is persisted with the authenticated operator principal and re-delivered when the owner returns.',
|
|
163
163
|
justification: 'Coordinates between the operator\'s OWN machines only — no external egress; the persisted intent is bound to the AUTHENTICATED operator and the owner REVALIDATES at apply time (a stale resolve against a since-escalated item is rejected — current state wins); when dark the routes 503 and the precedence guard is inert; strict single-machine no-op (no peers). No destructive action, no third-party spend. Operator directive 2026-06-13 topic 13481.',
|
|
164
164
|
},
|
|
165
|
+
{
|
|
166
|
+
name: 'accountFollowMe',
|
|
167
|
+
configPath: 'multiMachine.accountFollowMe.enabled',
|
|
168
|
+
description: 'WS5.2 Account Follow-Me — seamless cross-machine account/quota sharing (re-mint per machine, ToS-safe; no OAuth token copied). Gates the non-credential metadata projection + the security primitives.',
|
|
169
|
+
justification: 'No external egress and no third-party spend from the flag itself. The credential SHARE path (Mechanism A sealed-transport) is SEPARATELY gated by credentialTransport (default empty, anthropic REFUSED); the enroll path (Mechanism B) is operator-mandate-gated (deny-by-default, needs a PIN-issued mandate) — so the real authority is the operator mandate, NOT this flag. In PR1 there is NO live-credential code path at all (only the non-credential subscription-account-meta projection + inert primitives), so live-on-dev is functionally inert. Dev-live is the dogfooding intent (prove follow-me on the operator\'s own machines). Strict single-machine no-op. Operator directive 2026-06-13 topic 13481 + ws52-account-follow-me-security.md §9.',
|
|
170
|
+
},
|
|
165
171
|
{
|
|
166
172
|
name: 'ws43RoleGuard',
|
|
167
173
|
configPath: 'multiMachine.seamlessness.ws43RoleGuard',
|
|
@@ -250,6 +256,12 @@ export const DEV_GATED_FEATURES = [
|
|
|
250
256
|
description: 'Proactive cross-topic work-overlap councilor (parallel-activity-coherence Phase B).',
|
|
251
257
|
justification: 'D4-verified observe-only: ticks on a cadence, emits an in-process `overlap` event with NO listener wired, and appends to a local sentinel-events.jsonl audit. No fetch/Telegram/relay, no LLM, no destructive or external action.',
|
|
252
258
|
},
|
|
259
|
+
{
|
|
260
|
+
name: 'autonomousLivenessReconciler',
|
|
261
|
+
configPath: 'monitoring.autonomousLivenessReconciler.enabled',
|
|
262
|
+
description: 'Level-triggered self-heal for an autonomous run marked active but with no live session ("dead but marked active" — docs/specs/autonomous-liveness-reconciler.md).',
|
|
263
|
+
justification: 'Ships dryRun-first (the component code-defaults dryRun:true): on the dev agent the gate makes the reconcile loop + GET /autonomous/liveness LIVE but it only LOGS "would respawn" until a deliberate dryRun:false flip — zero spawns, zero spend while dark/dryRun. Live, its only action is a bounded (P19 cap), lease-gated, operator-stop-respecting, quota-gated respawn of a run the run-state file already says should be alive — the strictly-safe direction. Never blocks/rewrites a message. Routes 503 when off.',
|
|
264
|
+
},
|
|
253
265
|
{
|
|
254
266
|
name: 'autonomousHeartbeat',
|
|
255
267
|
configPath: 'monitoring.autonomousHeartbeat.enabled',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devGatedFeatures.js","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"devGatedFeatures.js","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -3799,6 +3799,43 @@ export interface MonitoringConfig {
|
|
|
3799
3799
|
/** Cadence between overlap scans, in minutes (default 15). */
|
|
3800
3800
|
cadenceMinutes?: number;
|
|
3801
3801
|
};
|
|
3802
|
+
/**
|
|
3803
|
+
* AutonomousLivenessReconciler — level-triggered self-heal for an autonomous
|
|
3804
|
+
* run marked active (with time remaining) but with no live session ("dead but
|
|
3805
|
+
* marked active"). DEV-GATED: `enabled` OMITTED in ConfigDefaults so the
|
|
3806
|
+
* dev-agent gate decides (LIVE on dev / DARK on fleet). dryRun-FIRST.
|
|
3807
|
+
* docs/specs/autonomous-liveness-reconciler.md.
|
|
3808
|
+
*/
|
|
3809
|
+
autonomousLivenessReconciler?: {
|
|
3810
|
+
/** Live-on-dev / dark-fleet — OMITTED so resolveDevAgentGate decides. */
|
|
3811
|
+
enabled?: boolean;
|
|
3812
|
+
/** Observe-only: log would-respawn + would-have-capped (default: true). */
|
|
3813
|
+
dryRun?: boolean;
|
|
3814
|
+
/** Reconcile cadence (default 120). */
|
|
3815
|
+
tickIntervalSec?: number;
|
|
3816
|
+
/** Consecutive observations before acting (default 2). */
|
|
3817
|
+
debounceTicks?: number;
|
|
3818
|
+
/** Min wall-clock a candidate must persist (default 180). */
|
|
3819
|
+
debounceWindowSec?: number;
|
|
3820
|
+
/** Bound on a single spawn (default 45000). */
|
|
3821
|
+
respawnTimeoutMs?: number;
|
|
3822
|
+
/** P19 redie brake — respawns per window (default 3). */
|
|
3823
|
+
respawnCapPerWindow?: number;
|
|
3824
|
+
/** Redie cap window (default 21600 = 6h). */
|
|
3825
|
+
respawnCapWindowSec?: number;
|
|
3826
|
+
/** Separate infra-failure budget (default 6). */
|
|
3827
|
+
spawnFailureRetryCeiling?: number;
|
|
3828
|
+
/** Bound on pressure-deferral ticks before acting/escalating (default 10). */
|
|
3829
|
+
maxPressureBlockedTicks?: number;
|
|
3830
|
+
/** Wall-clock bound on pressure-deferral (default 1800 = 30m). */
|
|
3831
|
+
maxPressureBlockedSec?: number;
|
|
3832
|
+
/** Respawn fresh when no resume UUID (default false → raise attention). */
|
|
3833
|
+
allowFreshFallback?: boolean;
|
|
3834
|
+
/** Stale-`spawning` TTL (default respawnTimeoutMs + grace). */
|
|
3835
|
+
inflightSpawnTtlMs?: number;
|
|
3836
|
+
/** Self-heal line on a live respawn (default true). */
|
|
3837
|
+
notifyUser?: boolean;
|
|
3838
|
+
};
|
|
3802
3839
|
/**
|
|
3803
3840
|
* AutonomousProgressHeartbeat — a hedged, change-gated, sparse liveness
|
|
3804
3841
|
* BACKSTOP that posts ONE purely-observational line when an autonomous run
|