instar 1.3.276 → 1.3.277

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.
@@ -15,11 +15,29 @@
15
15
  * Part of Phase 4 (secret sync via tunnel).
16
16
  */
17
17
  import crypto from 'node:crypto';
18
+ /** Per-agent keychain account: scoped by the absolute stateDir so two agents
19
+ * on one machine can never clobber each other's master key. Readable in
20
+ * Keychain Access (the path IS the identity — debuggable, collision-free). */
21
+ export declare function perAgentKeychainAccount(stateDir: string): string;
22
+ /** The 8-byte key fingerprint stored in the v2 header. */
23
+ export declare function keyIdOf(key: Buffer): Buffer;
24
+ /** Injectable keychain operations (per service+account). Production uses the
25
+ * real OS keychain (macOS `security` / Linux `secret-tool`); tests inject a
26
+ * fake so the per-agent/adoption logic is unit-testable WITHOUT touching a
27
+ * real keychain (the VITEST file-key guard stays in force when this is not
28
+ * injected — an injected fake is, by definition, not the real keychain). */
29
+ export interface KeychainOps {
30
+ read: (service: string, account: string) => Buffer | null;
31
+ /** Returns true on success. */
32
+ write: (service: string, account: string, key: Buffer) => boolean;
33
+ }
18
34
  export interface SecretStoreConfig {
19
35
  /** State directory (.instar) */
20
36
  stateDir: string;
21
37
  /** Force file-based key storage (skip keychain) */
22
38
  forceFileKey?: boolean;
39
+ /** Test seam — see KeychainOps. Absent in production (real keychain used). */
40
+ keychainOps?: KeychainOps;
23
41
  }
24
42
  /** The decrypted secrets object (flat key-value or nested) */
25
43
  export type Secrets = Record<string, unknown>;
@@ -42,27 +60,60 @@ export declare class MasterKeyManager {
42
60
  private stateDir;
43
61
  private forceFile;
44
62
  private keyFilePath;
45
- constructor(stateDir: string, forceFile?: boolean);
46
- /** Retrieve or generate the master key. */
63
+ private kc;
64
+ constructor(stateDir: string, forceFile?: boolean, keychainOps?: KeychainOps);
65
+ /**
66
+ * Retrieve or generate the master key. Resolution order (vault-key-coherence,
67
+ * CMT-1038 — the per-agent fix for the machine-global-slot bifurcation):
68
+ * 1. the PER-AGENT keychain entry (`master-key:<stateDir>`);
69
+ * 2. the LEGACY global entry (`master-key`) — ADOPTED on sight: copied into
70
+ * the per-agent account (the global entry is left in place for other
71
+ * not-yet-migrated agents; this code never writes it again);
72
+ * 3. the per-agent file key (generating one — and writing the PER-AGENT
73
+ * keychain entry, never the global one — when none exists anywhere).
74
+ */
47
75
  getMasterKey(): Buffer;
76
+ /**
77
+ * Every key this agent could plausibly have encrypted its store with, primary
78
+ * first: [resolved primary, the OTHER source's key if it exists and differs].
79
+ * Read-only — alternates NEVER generate. Backs the dual-key read fallback
80
+ * (a v1 store written before the sources diverged stays readable, loudly).
81
+ */
82
+ getCandidateKeys(): Array<{
83
+ key: Buffer;
84
+ source: 'keychain' | 'file';
85
+ }>;
48
86
  /** Whether the master key is stored in the OS keychain (vs file fallback). */
49
87
  get isKeychainBacked(): boolean;
50
- private readKeychain;
51
- private writeKeychain;
52
- private readMacKeychain;
53
- private writeMacKeychain;
54
- private readLinuxKeychain;
55
- private writeLinuxKeychain;
88
+ private tryRead;
89
+ private readOsKeychain;
90
+ private writeOsKeychain;
56
91
  private getFileKey;
57
92
  }
58
93
  export declare class SecretStore {
59
94
  private stateDir;
60
95
  private keyManager;
61
96
  private encryptedPath;
97
+ /** Which key source decrypted the LAST successful read() — observability for
98
+ * the dual-key fallback ('keychain' | 'file'; null before any read). */
99
+ lastReadKeySource: 'keychain' | 'file' | null;
62
100
  constructor(config: SecretStoreConfig);
63
- /** Read and decrypt secrets from the encrypted store. Returns empty object if no secrets exist. */
101
+ /**
102
+ * Read and decrypt secrets from the encrypted store. Returns empty object if
103
+ * no secrets exist.
104
+ *
105
+ * Vault-key-coherence (CMT-1038): tries every candidate key (primary first,
106
+ * then the OTHER source — keychain↔file) so a store written before the key
107
+ * sources diverged stays READABLE instead of looking "empty" to half the
108
+ * readers (the 2026-06-05 bifurcation incident). A v2 file's keyId header
109
+ * names the required key, so wrong-key is a precise error distinct from
110
+ * corruption. Success via a non-primary key emits a loud degradation report;
111
+ * the next write() converges the store back to the primary key.
112
+ */
64
113
  read(): Secrets;
65
- /** Encrypt and write secrets to the store. */
114
+ /** Record the source that decrypted; loudly report a non-primary success. */
115
+ private noteReadKeySource;
116
+ /** Encrypt and write secrets to the store (v2 format — keyId header). */
66
117
  write(secrets: Secrets): void;
67
118
  /** Get a specific secret by dot-notation path (e.g., 'telegram.token'). */
68
119
  get(keyPath: string): unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"SecretStore.d.ts","sourceRoot":"","sources":["../../src/core/SecretStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AAkBjC,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,8DAA8D;AAC9D,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9C,0CAA0C;AAC1C,MAAM,WAAW,sBAAsB;IACrC,2CAA2C;IAC3C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;CACb;AAID;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,WAAW,CAAS;gBAEhB,QAAQ,EAAE,MAAM,EAAE,SAAS,UAAQ;IAe/C,2CAA2C;IAC3C,YAAY,IAAI,MAAM;IAWtB,8EAA8E;IAC9E,IAAI,gBAAgB,IAAI,OAAO,CAQ9B;IAID,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,UAAU;CAsBnB;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,aAAa,CAAS;gBAElB,MAAM,EAAE,iBAAiB;IAMrC,mGAAmG;IACnG,IAAI,IAAI,OAAO;IAUf,8CAA8C;IAC9C,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAe7B,2EAA2E;IAC3E,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAK7B,kDAAkD;IAClD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAM1C,qDAAqD;IACrD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM7B,4CAA4C;IAC5C,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,oDAAoD;IACpD,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,uCAAuC;IACvC,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,UAAU;CAcnB;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,wBAAwB,EAAE,MAAM,GAC/B,sBAAsB,CA0CxB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,sBAAsB,EAC/B,aAAa,EAAE,MAAM,CAAC,SAAS,GAC9B,OAAO,CA4BT"}
1
+ {"version":3,"file":"SecretStore.d.ts","sourceRoot":"","sources":["../../src/core/SecretStore.ts"],"names":[],"mappings":"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"}
@@ -22,11 +22,28 @@ import { DegradationReporter } from '../monitoring/DegradationReporter.js';
22
22
  import { SafeFsExecutor } from './SafeFsExecutor.js';
23
23
  // ── Constants ────────────────────────────────────────────────────────
24
24
  const KEYCHAIN_SERVICE = 'instar-secret-store';
25
- const KEYCHAIN_ACCOUNT = 'master-key';
25
+ /** LEGACY machine-global account — the root of the 2026-06-05 key-bifurcation
26
+ * incident (one slot shared by every agent on the box, silently overwritable
27
+ * by any fresh-stateDir SecretStore). Read for ADOPTION only; never written. */
28
+ const KEYCHAIN_ACCOUNT_LEGACY = 'master-key';
26
29
  const MASTER_KEY_LENGTH = 32; // AES-256
27
30
  const IV_LENGTH = 12; // AES-256-GCM
28
31
  const AUTH_TAG_LENGTH = 16;
29
32
  const HKDF_INFO = 'instar-secret-sync-v1';
33
+ /** v2 at-rest store format magic: 'ISv2' | keyId(8) | iv(12) | tag(16) | ct.
34
+ * The keyId (sha256(key) prefix) makes wrong-key diagnosable vs corruption. */
35
+ const STORE_MAGIC_V2 = Buffer.from('ISv2', 'ascii');
36
+ const KEY_ID_LENGTH = 8;
37
+ /** Per-agent keychain account: scoped by the absolute stateDir so two agents
38
+ * on one machine can never clobber each other's master key. Readable in
39
+ * Keychain Access (the path IS the identity — debuggable, collision-free). */
40
+ export function perAgentKeychainAccount(stateDir) {
41
+ return `master-key:${path.resolve(stateDir)}`;
42
+ }
43
+ /** The 8-byte key fingerprint stored in the v2 header. */
44
+ export function keyIdOf(key) {
45
+ return crypto.createHash('sha256').update(key).digest().subarray(0, KEY_ID_LENGTH);
46
+ }
30
47
  // ── Master Key Management ────────────────────────────────────────────
31
48
  /**
32
49
  * Store/retrieve the master key from the OS keychain.
@@ -36,147 +53,201 @@ export class MasterKeyManager {
36
53
  stateDir;
37
54
  forceFile;
38
55
  keyFilePath;
39
- constructor(stateDir, forceFile = false) {
56
+ kc;
57
+ constructor(stateDir, forceFile = false, keychainOps) {
40
58
  this.stateDir = stateDir;
41
- // Test runs are ALWAYS file-key-only. The keychain entry is machine-global
42
- // (one service/account shared by every agent and process on the box), so a
43
- // test constructing a SecretStore against a fresh stateDir would generate a
44
- // new master key and silently OVERWRITE that global entry — breaking every
45
- // real store encrypted with the old key (2026-06-05 incident: an integration
46
- // test run did exactly this to the dev agent's vault). Structural guard, not
47
- // per-test convention: no test can pollute the keychain even if it forgets
48
- // forceFileKey.
49
- const inTestRun = !!process.env.VITEST || process.env.NODE_ENV === 'test';
59
+ // Test runs are ALWAYS file-key-only — UNLESS a fake keychain is injected
60
+ // (an injected KeychainOps is by definition not the real keychain, so the
61
+ // pollution risk the guard exists for cannot occur). The real-keychain
62
+ // guard (2026-06-05 incident: an integration test overwrote the then-
63
+ // machine-global entry and broke the dev agent's vault) stays structural:
64
+ // no test without an explicit fake can touch the OS keychain.
65
+ const inTestRun = (!!process.env.VITEST || process.env.NODE_ENV === 'test') && !keychainOps;
50
66
  this.forceFile = forceFile || inTestRun;
51
67
  this.keyFilePath = path.join(stateDir, 'machine', 'secrets-master.key');
68
+ this.kc = keychainOps ?? {
69
+ read: (service, account) => this.readOsKeychain(service, account),
70
+ write: (service, account, key) => this.writeOsKeychain(service, account, key),
71
+ };
52
72
  }
53
- /** Retrieve or generate the master key. */
73
+ /**
74
+ * Retrieve or generate the master key. Resolution order (vault-key-coherence,
75
+ * CMT-1038 — the per-agent fix for the machine-global-slot bifurcation):
76
+ * 1. the PER-AGENT keychain entry (`master-key:<stateDir>`);
77
+ * 2. the LEGACY global entry (`master-key`) — ADOPTED on sight: copied into
78
+ * the per-agent account (the global entry is left in place for other
79
+ * not-yet-migrated agents; this code never writes it again);
80
+ * 3. the per-agent file key (generating one — and writing the PER-AGENT
81
+ * keychain entry, never the global one — when none exists anywhere).
82
+ */
54
83
  getMasterKey() {
55
84
  if (!this.forceFile) {
56
- // Try keychain first
57
- const keychainKey = this.readKeychain();
58
- if (keychainKey)
59
- return keychainKey;
85
+ const account = perAgentKeychainAccount(this.stateDir);
86
+ const own = this.tryRead(account);
87
+ if (own)
88
+ return own;
89
+ const legacy = this.tryRead(KEYCHAIN_ACCOUNT_LEGACY);
90
+ if (legacy) {
91
+ // Adoption: persist under the per-agent account so this agent's key
92
+ // resolution stops depending on the shared slot. Best-effort — a
93
+ // failed write just means adoption retries on the next read.
94
+ try {
95
+ this.kc.write(KEYCHAIN_SERVICE, account, legacy);
96
+ }
97
+ catch { /* @silent-fallback-ok — retried next read */ }
98
+ return legacy;
99
+ }
60
100
  }
61
101
  // File fallback
62
102
  return this.getFileKey();
63
103
  }
104
+ /**
105
+ * Every key this agent could plausibly have encrypted its store with, primary
106
+ * first: [resolved primary, the OTHER source's key if it exists and differs].
107
+ * Read-only — alternates NEVER generate. Backs the dual-key read fallback
108
+ * (a v1 store written before the sources diverged stays readable, loudly).
109
+ */
110
+ getCandidateKeys() {
111
+ const out = [];
112
+ const push = (key, source) => {
113
+ if (key && !out.some((c) => c.key.equals(key)))
114
+ out.push({ key, source });
115
+ };
116
+ if (this.forceFile) {
117
+ push(this.getFileKey(), 'file');
118
+ // Alternate: an existing keychain key (never generated) — covers a store
119
+ // written under keychain resolution before forceFileKey was flipped on.
120
+ push(this.tryRead(perAgentKeychainAccount(this.stateDir)), 'keychain');
121
+ push(this.tryRead(KEYCHAIN_ACCOUNT_LEGACY), 'keychain');
122
+ return out;
123
+ }
124
+ push(this.tryRead(perAgentKeychainAccount(this.stateDir)), 'keychain');
125
+ push(this.tryRead(KEYCHAIN_ACCOUNT_LEGACY), 'keychain');
126
+ // Existing file key as an alternate (do NOT generate one here — getFileKey
127
+ // generates; alternates must be read-only).
128
+ try {
129
+ if (fs.existsSync(this.keyFilePath)) {
130
+ push(Buffer.from(fs.readFileSync(this.keyFilePath, 'utf-8').trim(), 'hex'), 'file');
131
+ }
132
+ }
133
+ catch { /* @silent-fallback-ok — unreadable alternate is simply absent */ }
134
+ if (out.length === 0)
135
+ push(this.getMasterKey(), this.forceFile ? 'file' : 'keychain');
136
+ return out;
137
+ }
64
138
  /** Whether the master key is stored in the OS keychain (vs file fallback). */
65
139
  get isKeychainBacked() {
66
140
  if (this.forceFile)
67
141
  return false;
68
142
  try {
69
- return this.readKeychain() !== null;
143
+ return (this.tryRead(perAgentKeychainAccount(this.stateDir)) !== null ||
144
+ this.tryRead(KEYCHAIN_ACCOUNT_LEGACY) !== null);
70
145
  }
71
146
  catch {
72
147
  // @silent-fallback-ok — keychain unavailable, file fallback
73
148
  return false;
74
149
  }
75
150
  }
76
- // ── Keychain ────────────────────────────────────────────────────
77
- readKeychain() {
78
- if (process.platform === 'darwin') {
79
- return this.readMacKeychain();
151
+ tryRead(account) {
152
+ try {
153
+ return this.kc.read(KEYCHAIN_SERVICE, account);
80
154
  }
81
- else if (process.platform === 'linux') {
82
- return this.readLinuxKeychain();
155
+ catch {
156
+ return null; /* @silent-fallback-ok — keychain unavailable */
83
157
  }
84
- return null; // Windows or unsupported — fall through to file
85
158
  }
86
- writeKeychain(key) {
159
+ // ── OS keychain backends (account-parameterized) ────────────────
160
+ readOsKeychain(service, account) {
87
161
  if (process.platform === 'darwin') {
88
- return this.writeMacKeychain(key);
162
+ try {
163
+ const result = execFileSync('security', [
164
+ 'find-generic-password',
165
+ '-s', service,
166
+ '-a', account,
167
+ '-w', // Print password only
168
+ ], { encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'] }).trim();
169
+ return Buffer.from(result, 'base64');
170
+ }
171
+ catch {
172
+ // @silent-fallback-ok — platform keychain read
173
+ return null;
174
+ }
89
175
  }
90
176
  else if (process.platform === 'linux') {
91
- return this.writeLinuxKeychain(key);
92
- }
93
- return false;
94
- }
95
- readMacKeychain() {
96
- try {
97
- const result = execFileSync('security', [
98
- 'find-generic-password',
99
- '-s', KEYCHAIN_SERVICE,
100
- '-a', KEYCHAIN_ACCOUNT,
101
- '-w', // Print password only
102
- ], { encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'] }).trim();
103
- return Buffer.from(result, 'base64');
104
- }
105
- catch {
106
- // @silent-fallback-ok — platform keychain read
107
- return null;
177
+ try {
178
+ const result = execFileSync('secret-tool', [
179
+ 'lookup',
180
+ 'service', service,
181
+ 'account', account,
182
+ ], { encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'] }).trim();
183
+ return Buffer.from(result, 'base64');
184
+ }
185
+ catch {
186
+ // @silent-fallback-ok — linux keychain read
187
+ return null;
188
+ }
108
189
  }
190
+ return null; // Windows or unsupported — fall through to file
109
191
  }
110
- writeMacKeychain(key) {
111
- try {
112
- // Delete existing entry first (ignore errors if it doesn't exist)
192
+ writeOsKeychain(service, account, key) {
193
+ if (process.platform === 'darwin') {
113
194
  try {
195
+ // Delete existing entry first (ignore errors if it doesn't exist)
196
+ try {
197
+ execFileSync('security', [
198
+ 'delete-generic-password',
199
+ '-s', service,
200
+ '-a', account,
201
+ ], { stdio: 'pipe', timeout: 5000 });
202
+ }
203
+ catch {
204
+ // @silent-fallback-ok — entry may not exist
205
+ }
114
206
  execFileSync('security', [
115
- 'delete-generic-password',
116
- '-s', KEYCHAIN_SERVICE,
117
- '-a', KEYCHAIN_ACCOUNT,
207
+ 'add-generic-password',
208
+ '-s', service,
209
+ '-a', account,
210
+ '-w', key.toString('base64'),
118
211
  ], { stdio: 'pipe', timeout: 5000 });
212
+ return true;
119
213
  }
120
- catch {
121
- // @silent-fallback-ok — entry may not exist
214
+ catch (err) {
215
+ DegradationReporter.getInstance().report({
216
+ feature: 'SecretStore.writeMacOSKeychain',
217
+ primary: 'Persist master key to macOS keychain',
218
+ fallback: 'Key only in memory — lost on restart',
219
+ reason: `Why: ${err instanceof Error ? err.message : String(err)}`,
220
+ impact: 'Master key not persisted, may be lost',
221
+ });
222
+ return false;
122
223
  }
123
- execFileSync('security', [
124
- 'add-generic-password',
125
- '-s', KEYCHAIN_SERVICE,
126
- '-a', KEYCHAIN_ACCOUNT,
127
- '-w', key.toString('base64'),
128
- ], { stdio: 'pipe', timeout: 5000 });
129
- return true;
130
- }
131
- catch (err) {
132
- DegradationReporter.getInstance().report({
133
- feature: 'SecretStore.writeMacOSKeychain',
134
- primary: 'Persist master key to macOS keychain',
135
- fallback: 'Key only in memory — lost on restart',
136
- reason: `Why: ${err instanceof Error ? err.message : String(err)}`,
137
- impact: 'Master key not persisted, may be lost',
138
- });
139
- return false;
140
- }
141
- }
142
- readLinuxKeychain() {
143
- try {
144
- const result = execFileSync('secret-tool', [
145
- 'lookup',
146
- 'service', KEYCHAIN_SERVICE,
147
- 'account', KEYCHAIN_ACCOUNT,
148
- ], { encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'] }).trim();
149
- return Buffer.from(result, 'base64');
150
224
  }
151
- catch {
152
- // @silent-fallback-ok — linux keychain read
153
- return null;
154
- }
155
- }
156
- writeLinuxKeychain(key) {
157
- try {
158
- execFileSync('secret-tool', [
159
- 'store',
160
- '--label', 'Instar Secret Store Master Key',
161
- 'service', KEYCHAIN_SERVICE,
162
- 'account', KEYCHAIN_ACCOUNT,
163
- ], {
164
- input: key.toString('base64'),
165
- timeout: 5000,
166
- stdio: ['pipe', 'pipe', 'pipe'],
167
- });
168
- return true;
169
- }
170
- catch (err) {
171
- DegradationReporter.getInstance().report({
172
- feature: 'SecretStore.writeLinuxKeychain',
173
- primary: 'Persist master key to Linux keychain',
174
- fallback: 'Key only in memory — lost on restart',
175
- reason: `Why: ${err instanceof Error ? err.message : String(err)}`,
176
- impact: 'Master key not persisted, may be lost',
177
- });
178
- return false;
225
+ else if (process.platform === 'linux') {
226
+ try {
227
+ execFileSync('secret-tool', [
228
+ 'store',
229
+ '--label', 'Instar Secret Store Master Key',
230
+ 'service', service,
231
+ 'account', account,
232
+ ], {
233
+ input: key.toString('base64'),
234
+ timeout: 5000,
235
+ stdio: ['pipe', 'pipe', 'pipe'],
236
+ });
237
+ return true;
238
+ }
239
+ catch (err) {
240
+ DegradationReporter.getInstance().report({
241
+ feature: 'SecretStore.writeLinuxKeychain',
242
+ primary: 'Persist master key to Linux keychain',
243
+ fallback: 'Key only in memory — lost on restart',
244
+ reason: `Why: ${err instanceof Error ? err.message : String(err)}`,
245
+ impact: 'Master key not persisted, may be lost',
246
+ });
247
+ return false;
248
+ }
179
249
  }
250
+ return false;
180
251
  }
181
252
  // ── File fallback ───────────────────────────────────────────────
182
253
  getFileKey() {
@@ -186,9 +257,15 @@ export class MasterKeyManager {
186
257
  }
187
258
  // Generate new key
188
259
  const key = crypto.randomBytes(MASTER_KEY_LENGTH);
189
- // Try to store in keychain first
190
- if (!this.forceFile && this.writeKeychain(key)) {
191
- return key;
260
+ // Try to store under the PER-AGENT keychain account first (never the
261
+ // legacy global slot — writing that slot is how the 2026-06-05 incident
262
+ // broke every other vault on the machine).
263
+ if (!this.forceFile) {
264
+ try {
265
+ if (this.kc.write(KEYCHAIN_SERVICE, perAgentKeychainAccount(this.stateDir), key))
266
+ return key;
267
+ }
268
+ catch { /* @silent-fallback-ok — fall through to file */ }
192
269
  }
193
270
  // Write to file with restrictive permissions
194
271
  const dir = path.dirname(this.keyFilePath);
@@ -204,24 +281,80 @@ export class SecretStore {
204
281
  stateDir;
205
282
  keyManager;
206
283
  encryptedPath;
284
+ /** Which key source decrypted the LAST successful read() — observability for
285
+ * the dual-key fallback ('keychain' | 'file'; null before any read). */
286
+ lastReadKeySource = null;
207
287
  constructor(config) {
208
288
  this.stateDir = config.stateDir;
209
- this.keyManager = new MasterKeyManager(config.stateDir, config.forceFileKey);
289
+ this.keyManager = new MasterKeyManager(config.stateDir, config.forceFileKey, config.keychainOps);
210
290
  this.encryptedPath = path.join(config.stateDir, 'secrets', 'config.secrets.enc');
211
291
  }
212
- /** Read and decrypt secrets from the encrypted store. Returns empty object if no secrets exist. */
292
+ /**
293
+ * Read and decrypt secrets from the encrypted store. Returns empty object if
294
+ * no secrets exist.
295
+ *
296
+ * Vault-key-coherence (CMT-1038): tries every candidate key (primary first,
297
+ * then the OTHER source — keychain↔file) so a store written before the key
298
+ * sources diverged stays READABLE instead of looking "empty" to half the
299
+ * readers (the 2026-06-05 bifurcation incident). A v2 file's keyId header
300
+ * names the required key, so wrong-key is a precise error distinct from
301
+ * corruption. Success via a non-primary key emits a loud degradation report;
302
+ * the next write() converges the store back to the primary key.
303
+ */
213
304
  read() {
214
305
  if (!fs.existsSync(this.encryptedPath)) {
215
306
  return {};
216
307
  }
217
308
  const raw = fs.readFileSync(this.encryptedPath);
218
- const masterKey = this.keyManager.getMasterKey();
219
- return this.decryptAES(raw, masterKey);
309
+ const candidates = this.keyManager.getCandidateKeys();
310
+ // ── v2 format: 'ISv2' | keyId(8) | iv | tag | ct — the keyId names the key ──
311
+ if (raw.length > STORE_MAGIC_V2.length + KEY_ID_LENGTH && raw.subarray(0, STORE_MAGIC_V2.length).equals(STORE_MAGIC_V2)) {
312
+ const wantId = raw.subarray(STORE_MAGIC_V2.length, STORE_MAGIC_V2.length + KEY_ID_LENGTH);
313
+ const body = raw.subarray(STORE_MAGIC_V2.length + KEY_ID_LENGTH);
314
+ const match = candidates.find((c) => keyIdOf(c.key).equals(wantId));
315
+ if (!match) {
316
+ throw new Error(`SecretStore: store is encrypted with key id ${wantId.toString('hex')} — ` +
317
+ `no resolvable key matches (have: ${candidates.map((c) => `${c.source}:${keyIdOf(c.key).toString('hex')}`).join(', ') || 'none'}). ` +
318
+ `The vault is NOT empty; the matching master key is missing.`);
319
+ }
320
+ const secrets = this.decryptAES(body, match.key); // auth failure here = real corruption (key matched)
321
+ this.noteReadKeySource(match.source, candidates[0]?.source);
322
+ return secrets;
323
+ }
324
+ // ── v1 (legacy, headerless): try candidates in order ──
325
+ let lastErr = null;
326
+ for (const c of candidates) {
327
+ try {
328
+ const secrets = this.decryptAES(raw, c.key);
329
+ this.noteReadKeySource(c.source, candidates[0]?.source);
330
+ return secrets;
331
+ }
332
+ catch (err) {
333
+ lastErr = err;
334
+ }
335
+ }
336
+ throw new Error(`SecretStore: no resolvable key decrypts the store (tried ${candidates.length}: ` +
337
+ `${candidates.map((c) => `${c.source}:${keyIdOf(c.key).toString('hex')}`).join(', ') || 'none'}). ` +
338
+ `The vault is NOT empty; the matching master key is missing. Last error: ` +
339
+ `${lastErr instanceof Error ? lastErr.message : String(lastErr)}`);
340
+ }
341
+ /** Record the source that decrypted; loudly report a non-primary success. */
342
+ noteReadKeySource(used, primary) {
343
+ this.lastReadKeySource = used;
344
+ if (primary && used !== primary) {
345
+ DegradationReporter.getInstance().report({
346
+ feature: 'SecretStore.dualKeyRead',
347
+ primary: `Decrypt the vault with the primary (${primary}) master key`,
348
+ fallback: `Decrypted with the ${used} key instead`,
349
+ reason: 'Why: the keychain and file master keys have DIVERGED for this agent (the 2026-06-05 bifurcation class). The data is intact and readable.',
350
+ impact: 'The next write() re-encrypts with the primary key (v2 format), converging the sources. If divergence persists, inspect the per-agent keychain entry and .instar/machine/secrets-master.key.',
351
+ });
352
+ }
220
353
  }
221
- /** Encrypt and write secrets to the store. */
354
+ /** Encrypt and write secrets to the store (v2 format — keyId header). */
222
355
  write(secrets) {
223
356
  const masterKey = this.keyManager.getMasterKey();
224
- const encrypted = this.encryptAES(secrets, masterKey);
357
+ const encrypted = Buffer.concat([STORE_MAGIC_V2, keyIdOf(masterKey), this.encryptAES(secrets, masterKey)]);
225
358
  const dir = path.dirname(this.encryptedPath);
226
359
  if (!fs.existsSync(dir)) {
227
360
  fs.mkdirSync(dir, { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"SecretStore.js","sourceRoot":"","sources":["../../src/core/SecretStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SecretStore.js","sourceRoot":"","sources":["../../src/core/SecretStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,wEAAwE;AAExE,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAC/C;;iFAEiF;AACjF,MAAM,uBAAuB,GAAG,YAAY,CAAC;AAC7C,MAAM,iBAAiB,GAAG,EAAE,CAAC,CAAC,UAAU;AACxC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,cAAc;AACpC,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAC1C;gFACgF;AAChF,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACpD,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB;;+EAE+E;AAC/E,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO,cAAc,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AACrF,CAAC;AAuCD,wEAAwE;AAExE;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACnB,QAAQ,CAAS;IACjB,SAAS,CAAU;IACnB,WAAW,CAAS;IACpB,EAAE,CAAc;IAExB,YAAY,QAAgB,EAAE,SAAS,GAAG,KAAK,EAAE,WAAyB;QACxE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,0EAA0E;QAC1E,0EAA0E;QAC1E,uEAAuE;QACvE,sEAAsE;QACtE,0EAA0E;QAC1E,8DAA8D;QAC9D,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QAC5F,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,SAAS,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;QACxE,IAAI,CAAC,EAAE,GAAG,WAAW,IAAI;YACvB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC;YACjE,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;SAC9E,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACrD,IAAI,MAAM,EAAE,CAAC;gBACX,oEAAoE;gBACpE,iEAAiE;gBACjE,6DAA6D;gBAC7D,IAAI,CAAC;oBAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,6CAA6C,CAAC,CAAC;gBACjH,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,gBAAgB;QACd,MAAM,GAAG,GAAwD,EAAE,CAAC;QACpE,MAAM,IAAI,GAAG,CAAC,GAAkB,EAAE,MAA2B,EAAQ,EAAE;YACrE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC;QACF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;YAChC,yEAAyE;YACzE,wEAAwE;YACxE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACvE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,UAAU,CAAC,CAAC;YACxD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,UAAU,CAAC,CAAC;QACxD,2EAA2E;QAC3E,4CAA4C;QAC5C,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,iEAAiE,CAAC,CAAC;QAC7E,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACtF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,8EAA8E;IAC9E,IAAI,gBAAgB;QAClB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACjC,IAAI,CAAC;YACH,OAAO,CACL,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI;gBAC7D,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAC/C,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,OAAe;QAC7B,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAAC,CAAC;QACvD,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC,CAAC,gDAAgD;QAAC,CAAC;IACzE,CAAC;IAED,mEAAmE;IAE3D,cAAc,CAAC,OAAe,EAAE,OAAe;QACrD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE;oBACtC,uBAAuB;oBACvB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,sBAAsB;iBAC7B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjF,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;gBAC/C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE;oBACzC,QAAQ;oBACR,SAAS,EAAE,OAAO;oBAClB,SAAS,EAAE,OAAO;iBACnB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjF,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,4CAA4C;gBAC5C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,gDAAgD;IAC/D,CAAC;IAEO,eAAe,CAAC,OAAe,EAAE,OAAe,EAAE,GAAW;QACnE,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,kEAAkE;gBAClE,IAAI,CAAC;oBACH,YAAY,CAAC,UAAU,EAAE;wBACvB,yBAAyB;wBACzB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,OAAO;qBACd,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvC,CAAC;gBAAC,MAAM,CAAC;oBACP,4CAA4C;gBAC9C,CAAC;gBACD,YAAY,CAAC,UAAU,EAAE;oBACvB,sBAAsB;oBACtB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;iBAC7B,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrC,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,mBAAmB,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;oBACvC,OAAO,EAAE,gCAAgC;oBACzC,OAAO,EAAE,sCAAsC;oBAC/C,QAAQ,EAAE,sCAAsC;oBAChD,MAAM,EAAE,QAAQ,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;oBAClE,MAAM,EAAE,uCAAuC;iBAChD,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,YAAY,CAAC,aAAa,EAAE;oBAC1B,OAAO;oBACP,SAAS,EAAE,gCAAgC;oBAC3C,SAAS,EAAE,OAAO;oBAClB,SAAS,EAAE,OAAO;iBACnB,EAAE;oBACD,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC7B,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;iBAChC,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,mBAAmB,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;oBACvC,OAAO,EAAE,gCAAgC;oBACzC,OAAO,EAAE,sCAAsC;oBAC/C,QAAQ,EAAE,sCAAsC;oBAChD,MAAM,EAAE,QAAQ,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;oBAClE,MAAM,EAAE,uCAAuC;iBAChD,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mEAAmE;IAE3D,UAAU;QAChB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,mBAAmB;QACnB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAElD,qEAAqE;QACrE,wEAAwE;QACxE,2CAA2C;QAC3C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;oBAAE,OAAO,GAAG,CAAC;YAC/F,CAAC;YAAC,MAAM,CAAC,CAAC,gDAAgD,CAAC,CAAC;QAC9D,CAAC;QAED,6CAA6C;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED,wEAAwE;AAExE,MAAM,OAAO,WAAW;IACd,QAAQ,CAAS;IACjB,UAAU,CAAmB;IAC7B,aAAa,CAAS;IAC9B;6EACyE;IACzE,iBAAiB,GAA+B,IAAI,CAAC;IAErD,YAAY,MAAyB;QACnC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACjG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACnF,CAAC;IAED;;;;;;;;;;;OAWG;IACH,IAAI;QACF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;QAEtD,+EAA+E;QAC/E,IAAI,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,aAAa,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YACxH,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;YAC1F,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,+CAA+C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK;oBAC1E,oCAAoC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,KAAK;oBACpI,6DAA6D,CAC9D,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,oDAAoD;YACtG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5D,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,yDAAyD;QACzD,IAAI,OAAO,GAAY,IAAI,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACxD,OAAO,OAAO,CAAC;YACjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,GAAG,GAAG,CAAC;YAChB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CACb,4DAA4D,UAAU,CAAC,MAAM,IAAI;YACjF,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,KAAK;YACnG,0EAA0E;YAC1E,GAAG,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAClE,CAAC;IACJ,CAAC;IAED,6EAA6E;IACrE,iBAAiB,CAAC,IAAyB,EAAE,OAAwC;QAC3F,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAChC,mBAAmB,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;gBACvC,OAAO,EAAE,yBAAyB;gBAClC,OAAO,EAAE,uCAAuC,OAAO,cAAc;gBACrE,QAAQ,EAAE,sBAAsB,IAAI,cAAc;gBAClD,MAAM,EAAE,0IAA0I;gBAClJ,MAAM,EAAE,6LAA6L;aACtM,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,KAAK,CAAC,OAAgB;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QAE3G,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,6BAA6B;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5C,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IAED,2EAA2E;IAC3E,GAAG,CAAC,OAAe;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,kDAAkD;IAClD,GAAG,CAAC,OAAe,EAAE,KAAc;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,qDAAqD;IACrD,MAAM,CAAC,OAAe;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,4CAA4C;IAC5C,IAAI,MAAM;QACR,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;IAED,oDAAoD;IACpD,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;IAC1C,CAAC;IAED,uCAAuC;IACvC,OAAO;QACL,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACtC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,6BAA6B,EAAE,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED,kEAAkE;IAE1D,UAAU,CAAC,IAAa,EAAE,GAAW;QAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAChC,4CAA4C;QAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEO,UAAU,CAAC,GAAW,EAAE,GAAW;QACzC,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,eAAe,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACjE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;CACF;AAED,wEAAwE;AAExE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,wBAAgC;IAEhC,qCAAqC;IACrC,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACvF,gDAAgD;IAChD,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAEzF,wDAAwD;IACxD,6DAA6D;IAC7D,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;IAC7E,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,KAAK,EAAE;QACtD,CAAC,CAAC,eAAe,CAAC,oBAAoB,CAAC;QACvC,CAAC,CAAC,oBAAoB,CAAC,CAAC,mBAAmB;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;QAC1C,GAAG,EAAE,aAAa;QAClB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;QACxC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,SAAS,EAAE,YAAY;KACxB,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,IAAI,GAAG,oBAAoB,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAEhF,sBAAsB;IACtB,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAEhC,OAAO;QACL,kBAAkB,EAAE,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3D,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzB,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA+B,EAC/B,aAA+B;IAE/B,4CAA4C;IAC5C,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IAC/E,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;QAC1C,GAAG,EAAE,eAAe,CAAC,oBAAoB,CAAC;QAC1C,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;QACxC,UAAU,EAAE,aAAa;QACzB,SAAS,EAAE,YAAY;KACxB,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,IAAI,GAAG,oBAAoB,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAEhF,sBAAsB;IACtB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IACrF,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,wEAAwE;AAExE,yDAAyD;AACzD,SAAS,eAAe,CAAC,YAAoB;IAC3C,qEAAqE;IACrE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,uDAAuD;AACvD,SAAS,cAAc,CAAC,GAA4B,EAAE,OAAe;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,GAAY,GAAG,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7E,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qDAAqD;AACrD,SAAS,cAAc,CAAC,GAA4B,EAAE,OAAe,EAAE,KAAc;IACnF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,GAA4B,GAAG,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAA4B,CAAC;IACzD,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC3C,CAAC;AAED,0DAA0D;AAC1D,SAAS,iBAAiB,CAAC,GAA4B,EAAE,OAAe;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,GAA4B,GAAG,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACpE,OAAO,CAAC,qBAAqB;QAC/B,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAA4B,CAAC;IACzD,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC"}