instar 1.3.1343 → 1.3.1344

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 (126) hide show
  1. package/dist/cli.js +23 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/identity.d.ts +129 -0
  4. package/dist/commands/identity.d.ts.map +1 -0
  5. package/dist/commands/identity.js +411 -0
  6. package/dist/commands/identity.js.map +1 -0
  7. package/dist/commands/machine.d.ts.map +1 -1
  8. package/dist/commands/machine.js +3 -1
  9. package/dist/commands/machine.js.map +1 -1
  10. package/dist/commands/server.d.ts.map +1 -1
  11. package/dist/commands/server.js +215 -1
  12. package/dist/commands/server.js.map +1 -1
  13. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  14. package/dist/config/ConfigDefaults.js +8 -0
  15. package/dist/config/ConfigDefaults.js.map +1 -1
  16. package/dist/core/AgentIdentityAdoption.d.ts +422 -0
  17. package/dist/core/AgentIdentityAdoption.d.ts.map +1 -0
  18. package/dist/core/AgentIdentityAdoption.js +866 -0
  19. package/dist/core/AgentIdentityAdoption.js.map +1 -0
  20. package/dist/core/AgentIdentityAudit.d.ts +41 -0
  21. package/dist/core/AgentIdentityAudit.d.ts.map +1 -0
  22. package/dist/core/AgentIdentityAudit.js +97 -0
  23. package/dist/core/AgentIdentityAudit.js.map +1 -0
  24. package/dist/core/AgentIdentityCoherence.d.ts +220 -0
  25. package/dist/core/AgentIdentityCoherence.d.ts.map +1 -0
  26. package/dist/core/AgentIdentityCoherence.js +465 -0
  27. package/dist/core/AgentIdentityCoherence.js.map +1 -0
  28. package/dist/core/AgentIdentityHandover.d.ts +21 -2
  29. package/dist/core/AgentIdentityHandover.d.ts.map +1 -1
  30. package/dist/core/AgentIdentityHandover.js +56 -4
  31. package/dist/core/AgentIdentityHandover.js.map +1 -1
  32. package/dist/core/AgentIdentityItems.d.ts +73 -0
  33. package/dist/core/AgentIdentityItems.d.ts.map +1 -0
  34. package/dist/core/AgentIdentityItems.js +89 -0
  35. package/dist/core/AgentIdentityItems.js.map +1 -0
  36. package/dist/core/AgentIdentityLock.d.ts +69 -0
  37. package/dist/core/AgentIdentityLock.d.ts.map +1 -0
  38. package/dist/core/AgentIdentityLock.js +199 -0
  39. package/dist/core/AgentIdentityLock.js.map +1 -0
  40. package/dist/core/AgentIdentityRuntime.d.ts +81 -0
  41. package/dist/core/AgentIdentityRuntime.d.ts.map +1 -0
  42. package/dist/core/AgentIdentityRuntime.js +35 -0
  43. package/dist/core/AgentIdentityRuntime.js.map +1 -0
  44. package/dist/core/LeaseCoordinator.d.ts +11 -2
  45. package/dist/core/LeaseCoordinator.d.ts.map +1 -1
  46. package/dist/core/LeaseCoordinator.js +24 -6
  47. package/dist/core/LeaseCoordinator.js.map +1 -1
  48. package/dist/core/MeshRpc.d.ts +9 -0
  49. package/dist/core/MeshRpc.d.ts.map +1 -1
  50. package/dist/core/MeshRpc.js +9 -0
  51. package/dist/core/MeshRpc.js.map +1 -1
  52. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  53. package/dist/core/PostUpdateMigrator.js +32 -0
  54. package/dist/core/PostUpdateMigrator.js.map +1 -1
  55. package/dist/core/WriteDomainRegistry.d.ts.map +1 -1
  56. package/dist/core/WriteDomainRegistry.js +18 -0
  57. package/dist/core/WriteDomainRegistry.js.map +1 -1
  58. package/dist/core/types.d.ts +12 -0
  59. package/dist/core/types.d.ts.map +1 -1
  60. package/dist/core/types.js.map +1 -1
  61. package/dist/data/standards-guard-index.json +1 -1
  62. package/dist/data/standards-guard-index.meta.json +2 -2
  63. package/dist/data/standards-registry.meta.json +1 -1
  64. package/dist/identity/IdentityKeyFile.d.ts +12 -0
  65. package/dist/identity/IdentityKeyFile.d.ts.map +1 -1
  66. package/dist/identity/IdentityKeyFile.js +22 -0
  67. package/dist/identity/IdentityKeyFile.js.map +1 -1
  68. package/dist/scaffold/templates.d.ts.map +1 -1
  69. package/dist/scaffold/templates.js +8 -0
  70. package/dist/scaffold/templates.js.map +1 -1
  71. package/dist/server/AgentServer.d.ts +9 -0
  72. package/dist/server/AgentServer.d.ts.map +1 -1
  73. package/dist/server/AgentServer.js +122 -113
  74. package/dist/server/AgentServer.js.map +1 -1
  75. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  76. package/dist/server/CapabilityIndex.js +10 -0
  77. package/dist/server/CapabilityIndex.js.map +1 -1
  78. package/dist/server/routes/provenance.d.ts +7 -2
  79. package/dist/server/routes/provenance.d.ts.map +1 -1
  80. package/dist/server/routes/provenance.js +12 -1
  81. package/dist/server/routes/provenance.js.map +1 -1
  82. package/dist/server/routes.d.ts +2 -0
  83. package/dist/server/routes.d.ts.map +1 -1
  84. package/dist/server/routes.js +88 -0
  85. package/dist/server/routes.js.map +1 -1
  86. package/dist/testing/selfActionRegistry.d.ts.map +1 -1
  87. package/dist/testing/selfActionRegistry.js +121 -0
  88. package/dist/testing/selfActionRegistry.js.map +1 -1
  89. package/dist/threadline/InboundMessageGate.d.ts +7 -0
  90. package/dist/threadline/InboundMessageGate.d.ts.map +1 -1
  91. package/dist/threadline/InboundMessageGate.js +9 -0
  92. package/dist/threadline/InboundMessageGate.js.map +1 -1
  93. package/dist/threadline/ThreadlineBootstrap.d.ts +24 -0
  94. package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -1
  95. package/dist/threadline/ThreadlineBootstrap.js +176 -61
  96. package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
  97. package/dist/threadline/ThreadlineEndpoints.d.ts +16 -2
  98. package/dist/threadline/ThreadlineEndpoints.d.ts.map +1 -1
  99. package/dist/threadline/ThreadlineEndpoints.js +21 -2
  100. package/dist/threadline/ThreadlineEndpoints.js.map +1 -1
  101. package/dist/threadline/UnifiedTrustWiring.d.ts.map +1 -1
  102. package/dist/threadline/UnifiedTrustWiring.js +13 -0
  103. package/dist/threadline/UnifiedTrustWiring.js.map +1 -1
  104. package/dist/threadline/client/IdentityManager.d.ts +45 -3
  105. package/dist/threadline/client/IdentityManager.d.ts.map +1 -1
  106. package/dist/threadline/client/IdentityManager.js +130 -18
  107. package/dist/threadline/client/IdentityManager.js.map +1 -1
  108. package/dist/threadline/client/JoinedMeshDetector.d.ts +41 -20
  109. package/dist/threadline/client/JoinedMeshDetector.d.ts.map +1 -1
  110. package/dist/threadline/client/JoinedMeshDetector.js +83 -38
  111. package/dist/threadline/client/JoinedMeshDetector.js.map +1 -1
  112. package/dist/threadline/client/ThreadlineClient.d.ts +17 -0
  113. package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -1
  114. package/dist/threadline/client/ThreadlineClient.js +35 -0
  115. package/dist/threadline/client/ThreadlineClient.js.map +1 -1
  116. package/dist/threadline/listener-daemon.d.ts.map +1 -1
  117. package/dist/threadline/listener-daemon.js +12 -7
  118. package/dist/threadline/listener-daemon.js.map +1 -1
  119. package/package.json +1 -1
  120. package/src/data/builtin-manifest.json +96 -96
  121. package/src/data/standards-guard-index.json +1 -1
  122. package/src/data/standards-guard-index.meta.json +2 -2
  123. package/src/data/standards-registry.meta.json +1 -1
  124. package/src/scaffold/templates.ts +8 -0
  125. package/upgrades/1.3.1344.md +29 -0
  126. package/upgrades/side-effects/a2a-single-agent-identity-part-a.md +187 -0
@@ -0,0 +1,411 @@
1
+ /**
2
+ * `instar identity` — replacing an EXISTING agent identity is a command on that machine,
3
+ * run by the agent after a human yes (a2a-single-agent-identity §1.4).
4
+ *
5
+ * instar identity adopt --from <machine-name-or-id>
6
+ * Under the identity lock, FIRST moves the existing identity file(s) and
7
+ * `threadline/agent-info.json` aside (`*.superseded-<ISO>`; a present-but-invalid
8
+ * file as `identity.json.invalid-<ISO>`) so this machine's observe answer reads
9
+ * `not-provisioned` and its stale memory cannot pin; THEN requests the identity from
10
+ * the named sibling over `agent-identity-request`; verifies signature, AAD, the sealed
11
+ * key hashing to the value and the in-memory keypair check — WITHOUT the
12
+ * `reachable-agree` and last-known rules (the human named the source, and this
13
+ * machine's memory is precisely what is being corrected); installs; calls the reload
14
+ * lever on the running server; restarts a running listener daemon. ANY refusal or
15
+ * failure restores every moved file and says so.
16
+ *
17
+ * instar identity init --standalone --i-understand-peers-must-repin
18
+ * Mints a NEW identity on a fleet with no usable candidate (provenance
19
+ * `minted-by-operator-recovery`). Peers must re-pin the new address.
20
+ *
21
+ * instar identity status
22
+ * The on-disk posture + fingerprint (never key material).
23
+ *
24
+ * Nothing here ever DELETES an identity file (L12: superseded files are renamed).
25
+ */
26
+ import fs from 'node:fs';
27
+ import path from 'node:path';
28
+ import crypto from 'node:crypto';
29
+ import pc from 'picocolors';
30
+ import { loadConfig } from '../core/Config.js';
31
+ import { MachineIdentityManager, isRegistryEntryActive, sign, verify } from '../core/MachineIdentity.js';
32
+ import { MeshRpcClient } from '../core/MeshRpcClient.js';
33
+ import { installAdoptedIdentity, openAdoptionEnvelope, readAgentIdentityPosture, verifyObserveResponse, } from '../core/AgentIdentityAdoption.js';
34
+ import { AgentIdentityAudit } from '../core/AgentIdentityAudit.js';
35
+ import { withIdentityLock, IdentityLockedError } from '../core/AgentIdentityLock.js';
36
+ import { fingerprintOf } from '../core/AgentIdentityHandover.js';
37
+ import { readIdentityKeyFile, writeFileAtomicOwnerOnly } from '../identity/IdentityKeyFile.js';
38
+ import { generateIdentityKeyPair } from '../threadline/ThreadlineCrypto.js';
39
+ import { restartListener } from './listener.js';
40
+ const IDENTITY_FILES = ['identity.json', path.join('threadline', 'identity.json')];
41
+ const LAST_KNOWN_FILE = path.join('threadline', 'agent-info.json');
42
+ function stamp(now) {
43
+ return now.toISOString().replace(/[:.]/g, '-');
44
+ }
45
+ /**
46
+ * Move the existing identity file(s) and the last-known pin aside (rename, never unlink).
47
+ * A present-but-invalid or encrypted identity file is moved as `.invalid-<ISO>`.
48
+ */
49
+ export function moveIdentityAside(stateDir, now) {
50
+ const moved = [];
51
+ for (const rel of IDENTITY_FILES) {
52
+ const full = path.join(stateDir, rel);
53
+ if (!fs.existsSync(full))
54
+ continue;
55
+ let usable = false;
56
+ try {
57
+ const loaded = readIdentityKeyFile(full, { repair: false });
58
+ usable = !!loaded && !loaded.encrypted && !!loaded.privateKey;
59
+ }
60
+ catch {
61
+ usable = false;
62
+ }
63
+ const to = `${full}.${usable ? 'superseded' : 'invalid'}-${stamp(now)}`;
64
+ fs.renameSync(full, to);
65
+ moved.push({ from: full, to });
66
+ }
67
+ const lastKnown = path.join(stateDir, LAST_KNOWN_FILE);
68
+ if (fs.existsSync(lastKnown)) {
69
+ const to = `${lastKnown}.superseded-${stamp(now)}`;
70
+ fs.renameSync(lastKnown, to);
71
+ moved.push({ from: lastKnown, to });
72
+ }
73
+ return moved;
74
+ }
75
+ /** Put every moved file back (only the ones that are still at their backup path). */
76
+ export function restoreMoved(moved) {
77
+ const restored = [];
78
+ for (const m of moved) {
79
+ try {
80
+ if (fs.existsSync(m.to) && !fs.existsSync(m.from)) {
81
+ fs.renameSync(m.to, m.from);
82
+ restored.push(m);
83
+ }
84
+ }
85
+ catch {
86
+ /* a backup that cannot be moved back stays where it is — never deleted */
87
+ }
88
+ }
89
+ return restored;
90
+ }
91
+ /** `instar identity adopt --from <sibling>` — the core, pure over the injected transport. */
92
+ export async function adoptFromSibling(d) {
93
+ const now = d.now ?? (() => new Date());
94
+ const nonce = d.mintNonce ?? (() => crypto.randomBytes(12).toString('hex'));
95
+ const existing = readAgentIdentityPosture(d.stateDir);
96
+ const voidFill = existing.state === 'not-provisioned';
97
+ // 1. Under the lock: move the existing files aside so this machine reads not-provisioned.
98
+ let moved = [];
99
+ try {
100
+ moved = withIdentityLock(d.stateDir, () => moveIdentityAside(d.stateDir, now()), d.lockDeps);
101
+ }
102
+ catch (err) {
103
+ const reason = err instanceof IdentityLockedError ? 'identity-locked' : 'move-aside-failed';
104
+ return { ok: false, reason, detail: err instanceof Error ? err.message : String(err), restored: [] };
105
+ }
106
+ const fail = (reason, detail) => {
107
+ const restored = restoreMoved(moved);
108
+ d.audit?.append('cli-adopt', { machineId: d.selfMachineId, from: d.from.machineId, ok: false, reason, detail, restored: restored.map((m) => path.basename(m.from)) });
109
+ return { ok: false, reason, detail, restored };
110
+ };
111
+ // 2. Observe the named sibling (signed) for the value it publishes.
112
+ const obsNonce = nonce();
113
+ const obs = await d.send({ type: 'agent-identity-observe', agentName: d.agentName, requesterNonce: obsNonce }, 8000);
114
+ if (!obs.ok)
115
+ return fail(`observe-${obs.reason}`, obs.reason === 'no-handler' ? `${d.from.nickname} runs an older version without the identity verbs — update it first` : `${d.from.nickname} could not be reached`);
116
+ const verified = verifyObserveResponse(obs.result, { machineId: d.from.machineId, requesterNonce: obsNonce, nickname: d.from.nickname }, d.verifySig);
117
+ if (verified.state === 'unreachable')
118
+ return fail(`observe-${verified.reason ?? 'unverified'}`, `${d.from.nickname}'s answer did not verify against its registered machine key`);
119
+ if (verified.state !== 'provisioned' || !verified.fingerprint)
120
+ return fail('source-not-provisioned', `${d.from.nickname} publishes no agent identity; nothing to adopt from it`);
121
+ const expected = verified.fingerprint;
122
+ // 3. Request the identity; verify signature, nonce, AAD, key hashing, keypair IN MEMORY.
123
+ if (!d.ownEncryptionPrivateKeyPem)
124
+ return fail('no-encryption-key', 'this machine has no X25519 encryption key to open a sealed identity (re-run `instar join`)');
125
+ const reqNonce = nonce();
126
+ const req = await d.send({ type: 'agent-identity-request', agentName: d.agentName, expectedFingerprint: expected, requesterNonce: reqNonce }, 15000);
127
+ if (!req.ok)
128
+ return fail(`request-${req.reason}`, `the request to ${d.from.nickname} failed (${req.reason})`);
129
+ const opened = openAdoptionEnvelope({
130
+ response: req.result,
131
+ responderMachineId: d.from.machineId,
132
+ selfMachineId: d.selfMachineId,
133
+ expectedFingerprint: expected,
134
+ requesterNonce: reqNonce,
135
+ ownEncryptionPrivateKeyPem: d.ownEncryptionPrivateKeyPem,
136
+ verifySig: d.verifySig,
137
+ });
138
+ if (!opened.ok) {
139
+ const reason = opened.rejection === 'refused' ? `refused:${opened.refusal ?? 'unknown'}` : opened.rejection;
140
+ return fail(reason, `${d.from.nickname} answered ${reason}`);
141
+ }
142
+ // 4. Install (void-fill — the files were moved aside, so a present file means a race).
143
+ const installed = installAdoptedIdentity({
144
+ stateDir: d.stateDir,
145
+ identity: opened.identity,
146
+ origin: 'adopted-by-operator',
147
+ selfMachineId: d.selfMachineId,
148
+ adoptedFrom: opened.adoptedFrom,
149
+ producedBy: 'instar identity adopt',
150
+ lockDeps: d.lockDeps,
151
+ });
152
+ if (!installed.ok)
153
+ return fail(installed.reason, installed.detail ?? installed.reason);
154
+ // 5. The reload lever on the running server (nothing if no server is up — the next boot
155
+ // loads the new file), then a running listener daemon is restarted (stop + start).
156
+ const reloaded = await d.reload();
157
+ let listenerRestarted = false;
158
+ if (d.listenerRunning()) {
159
+ try {
160
+ await d.restartListener();
161
+ listenerRestarted = true;
162
+ }
163
+ catch {
164
+ listenerRestarted = false;
165
+ }
166
+ }
167
+ d.audit?.append('cli-adopt', { machineId: d.selfMachineId, from: d.from.machineId, ok: true, fingerprint: installed.fingerprint, voidFill, movedAside: moved.map((m) => path.basename(m.to)), reloaded: reloaded.ok, listenerRestarted });
168
+ return { ok: true, fingerprint: installed.fingerprint, movedAside: moved, reloaded, listenerRestarted, voidFill };
169
+ }
170
+ /** `instar identity init --standalone --i-understand-peers-must-repin` — the core. */
171
+ export async function initStandalone(d) {
172
+ if (!d.acknowledged) {
173
+ return { ok: false, reason: 'not-acknowledged', detail: 'a new identity is a NEW address: every peer must re-pin it. Re-run with --i-understand-peers-must-repin to confirm.', restored: [] };
174
+ }
175
+ const now = d.now ?? (() => new Date());
176
+ let moved = [];
177
+ let fingerprint = '';
178
+ try {
179
+ withIdentityLock(d.stateDir, () => {
180
+ moved = moveIdentityAside(d.stateDir, now());
181
+ // Deliberate operator mint — the one minting site outside the guarded primitives
182
+ // (listed in the mint-site census by file).
183
+ const kp = generateIdentityKeyPair();
184
+ fingerprint = fingerprintOf(kp.publicKey.toString('base64'));
185
+ const file = {
186
+ version: 1,
187
+ publicKey: kp.publicKey.toString('base64'),
188
+ privateKey: kp.privateKey.toString('base64'),
189
+ privateKeyEncryption: 'none',
190
+ createdAt: now().toISOString(),
191
+ provenance: {
192
+ schemaVersion: 1,
193
+ origin: 'minted-by-operator-recovery',
194
+ rootFingerprint: fingerprint,
195
+ machineId: d.selfMachineId ?? 'standalone',
196
+ createdAt: now().toISOString(),
197
+ producedBy: 'instar identity init --standalone',
198
+ },
199
+ };
200
+ writeFileAtomicOwnerOnly(path.join(d.stateDir, 'identity.json'), JSON.stringify(file, null, 2) + '\n');
201
+ }, d.lockDeps);
202
+ }
203
+ catch (err) {
204
+ const restored = restoreMoved(moved);
205
+ const reason = err instanceof IdentityLockedError ? 'identity-locked' : 'mint-failed';
206
+ d.audit?.append('cli-init-standalone', { machineId: d.selfMachineId, ok: false, reason, restored: restored.map((m) => path.basename(m.from)) });
207
+ return { ok: false, reason, detail: err instanceof Error ? err.message : String(err), restored };
208
+ }
209
+ const reloaded = await d.reload();
210
+ let listenerRestarted = false;
211
+ if (d.listenerRunning()) {
212
+ try {
213
+ await d.restartListener();
214
+ listenerRestarted = true;
215
+ }
216
+ catch {
217
+ listenerRestarted = false;
218
+ }
219
+ }
220
+ d.audit?.append('cli-init-standalone', { machineId: d.selfMachineId, ok: true, fingerprint, movedAside: moved.map((m) => path.basename(m.to)), reloaded: reloaded.ok, listenerRestarted });
221
+ return { ok: true, fingerprint, movedAside: moved, reloaded, listenerRestarted };
222
+ }
223
+ function resolveSibling(mgr, selfId, nameOrId) {
224
+ const byNick = mgr.resolveNickname(nameOrId);
225
+ const registry = mgr.loadRegistry();
226
+ const id = byNick ?? Object.entries(registry.machines).find(([mid, e]) => isRegistryEntryActive(e) && mid !== selfId && (e.name === nameOrId || mid === nameOrId || mid.startsWith(nameOrId)))?.[0] ?? null;
227
+ if (!id || id === selfId)
228
+ return null;
229
+ const e = registry.machines[id];
230
+ return { machineId: id, nickname: e?.nickname ?? e?.name ?? id };
231
+ }
232
+ function peerUrlOf(mgr, machineId) {
233
+ const direct = mgr.getMachineUrl(machineId);
234
+ if (direct)
235
+ return direct;
236
+ const endpoints = mgr.getMachineEndpoints(machineId) ?? [];
237
+ for (const ep of endpoints)
238
+ if (typeof ep?.url === 'string' && ep.url)
239
+ return ep.url;
240
+ return null;
241
+ }
242
+ /** POST /agent-identity/reload on the local server, if one is up. */
243
+ async function reloadOnLocalServer(config) {
244
+ const port = config.port ?? 4040;
245
+ try {
246
+ const r = await fetch(`http://127.0.0.1:${port}/agent-identity/reload`, {
247
+ method: 'POST',
248
+ headers: { Authorization: `Bearer ${config.authToken ?? ''}`, 'Content-Type': 'application/json' },
249
+ body: '{}',
250
+ signal: AbortSignal.timeout(15_000),
251
+ });
252
+ const j = (await r.json().catch(() => ({})));
253
+ if (!r.ok)
254
+ return { ok: false, detail: `server answered ${r.status}${j.error ? ` (${j.error})` : ''}` };
255
+ return { ok: true, detail: `server reloaded (${j.fingerprint ?? 'no fingerprint'}; ${j.connected ? 'relay connected' : j.reason ?? 'not connected'})` };
256
+ }
257
+ catch {
258
+ return { ok: false, detail: 'no server is up on this machine — the next boot loads the new file' };
259
+ }
260
+ }
261
+ function listenerRunningIn(stateDir) {
262
+ try {
263
+ const pid = parseInt(fs.readFileSync(path.join(stateDir, 'listener-daemon.pid'), 'utf-8').trim(), 10);
264
+ if (!Number.isFinite(pid) || pid <= 0)
265
+ return false;
266
+ process.kill(pid, 0);
267
+ return true;
268
+ }
269
+ catch {
270
+ return false;
271
+ }
272
+ }
273
+ function describeMoved(moved) {
274
+ return moved.length ? moved.map((m) => ` ${path.basename(m.from)} → ${path.basename(m.to)}`).join('\n') : ' (nothing to move — the identity slot was empty)';
275
+ }
276
+ export async function identityAdopt(options) {
277
+ let config;
278
+ try {
279
+ config = loadConfig(options.dir);
280
+ }
281
+ catch {
282
+ console.log(pc.red('Not initialized. Run `instar init` first.'));
283
+ process.exit(1);
284
+ }
285
+ if (!options.from) {
286
+ console.log(pc.red('Name the sibling to adopt from: instar identity adopt --from <machine-name-or-id>'));
287
+ process.exit(1);
288
+ }
289
+ const mgr = new MachineIdentityManager(config.stateDir);
290
+ if (!mgr.hasIdentity()) {
291
+ console.log(pc.red('This machine is not paired (no machine identity). Pair it first with `instar join`.'));
292
+ process.exit(1);
293
+ }
294
+ const self = mgr.loadIdentity();
295
+ const from = resolveSibling(mgr, self.machineId, options.from);
296
+ if (!from) {
297
+ console.log(pc.red(`No ACTIVE sibling named "${options.from}" in the machine registry.`));
298
+ process.exit(1);
299
+ }
300
+ const url = peerUrlOf(mgr, from.machineId);
301
+ if (!url) {
302
+ console.log(pc.red(`${from.nickname} has no known URL in the registry; it must be online and reachable.`));
303
+ process.exit(1);
304
+ }
305
+ const signingPem = mgr.loadSigningKey();
306
+ let n = 0;
307
+ const client = new MeshRpcClient({ selfMachineId: self.machineId, sign: (c) => sign(c, signingPem), nonce: () => `${self.machineId}:idcli:${Date.now()}:${++n}` });
308
+ const send = async (cmd, timeoutMs) => {
309
+ try {
310
+ const r = await client.send({ machineId: from.machineId, url }, cmd, 0, { timeoutMs });
311
+ if (r.ok)
312
+ return { ok: true, result: r.result };
313
+ return { ok: false, reason: r.reason === 'no-handler' ? 'no-handler' : 'transport' };
314
+ }
315
+ catch {
316
+ return { ok: false, reason: 'transport' };
317
+ }
318
+ };
319
+ console.log(pc.blue(`Adopting the agent identity ${from.nickname} publishes onto this machine (${self.name ?? self.machineId})…`));
320
+ const result = await adoptFromSibling({
321
+ stateDir: config.stateDir,
322
+ agentName: config.projectName,
323
+ selfMachineId: self.machineId,
324
+ from,
325
+ send,
326
+ verifySig: (machineId, canonical, sig) => {
327
+ const pem = mgr.getSigningPublicKeyPem(machineId);
328
+ if (!pem)
329
+ return false;
330
+ try {
331
+ return verify(canonical, sig, pem);
332
+ }
333
+ catch {
334
+ return false;
335
+ }
336
+ },
337
+ ownEncryptionPrivateKeyPem: (() => { try {
338
+ return mgr.loadEncryptionKey();
339
+ }
340
+ catch {
341
+ return null;
342
+ } })(),
343
+ reload: () => reloadOnLocalServer(config),
344
+ listenerRunning: () => listenerRunningIn(config.stateDir),
345
+ restartListener: () => restartListener({ dir: options.dir }),
346
+ audit: new AgentIdentityAudit(config.stateDir),
347
+ });
348
+ if (!result.ok) {
349
+ console.log(pc.red(` Refused (${result.reason}): ${result.detail}`));
350
+ console.log(pc.dim(` Restored ${result.restored.length} moved file(s); nothing was changed.`));
351
+ process.exit(1);
352
+ }
353
+ console.log(pc.green(` Installed ${result.fingerprint} (adopted-by-operator, from ${from.nickname}).`));
354
+ console.log(pc.dim(' Moved aside (kept, never deleted):\n' + describeMoved(result.movedAside)));
355
+ console.log(pc.dim(` Reload: ${result.reloaded.detail}`));
356
+ if (result.listenerRestarted)
357
+ console.log(pc.dim(' Listener daemon restarted under the new key.'));
358
+ }
359
+ export async function identityInit(options) {
360
+ let config;
361
+ try {
362
+ config = loadConfig(options.dir);
363
+ }
364
+ catch {
365
+ console.log(pc.red('Not initialized. Run `instar init` first.'));
366
+ process.exit(1);
367
+ }
368
+ if (!options.standalone) {
369
+ console.log(pc.red('`instar identity init` only mints with --standalone (a fleet with no usable candidate). To copy a sibling\'s identity use `instar identity adopt --from <machine>`.'));
370
+ process.exit(1);
371
+ }
372
+ const mgr = new MachineIdentityManager(config.stateDir);
373
+ const selfId = mgr.hasIdentity() ? mgr.loadIdentity().machineId : null;
374
+ const result = await initStandalone({
375
+ stateDir: config.stateDir,
376
+ selfMachineId: selfId,
377
+ acknowledged: options.iUnderstandPeersMustRepin === true,
378
+ reload: () => reloadOnLocalServer(config),
379
+ listenerRunning: () => listenerRunningIn(config.stateDir),
380
+ restartListener: () => restartListener({ dir: options.dir }),
381
+ audit: new AgentIdentityAudit(config.stateDir),
382
+ });
383
+ if (!result.ok) {
384
+ console.log(pc.red(` Refused (${result.reason}): ${result.detail}`));
385
+ process.exit(1);
386
+ }
387
+ console.log(pc.green(` Minted a NEW agent identity ${result.fingerprint} (minted-by-operator-recovery).`));
388
+ console.log(pc.yellow(' Every peer that pinned the old address must re-pin this one.'));
389
+ console.log(pc.dim(' Moved aside (kept, never deleted):\n' + describeMoved(result.movedAside)));
390
+ console.log(pc.dim(` Reload: ${result.reloaded.detail}`));
391
+ if (result.listenerRestarted)
392
+ console.log(pc.dim(' Listener daemon restarted under the new key.'));
393
+ }
394
+ export async function identityStatus(options) {
395
+ let config;
396
+ try {
397
+ config = loadConfig(options.dir);
398
+ }
399
+ catch {
400
+ console.log(pc.red('Not initialized. Run `instar init` first.'));
401
+ process.exit(1);
402
+ }
403
+ const posture = readAgentIdentityPosture(config.stateDir);
404
+ if (posture.state === 'provisioned')
405
+ console.log(`${pc.green('provisioned')} fingerprint ${posture.fingerprint} (${path.relative(config.stateDir, posture.path)})`);
406
+ else if (posture.state === 'invalid')
407
+ console.log(`${pc.red('invalid')} ${posture.path}: ${posture.reason} — \`instar identity adopt --from <sibling>\` moves it aside and installs the fleet's identity`);
408
+ else
409
+ console.log(`${pc.yellow('not-provisioned')} no agent identity on this machine — a paired machine adopts it from a sibling automatically; a standalone one mints with \`instar identity init --standalone --i-understand-peers-must-repin\``);
410
+ }
411
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/commands/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,GAGtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAyB,MAAM,8BAA8B,CAAC;AAC5G,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA8BhD,MAAM,cAAc,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;AACnF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAEnE,SAAS,KAAK,CAAC,GAAS;IACtB,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,GAAS;IAC3D,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5D,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACxE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACvD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,GAAG,SAAS,eAAe,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,KAAkB;IAC7C,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC5B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,CAAuB;IAC5D,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,wBAAwB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,KAAK,iBAAiB,CAAC;IAEtD,0FAA0F;IAC1F,IAAI,KAAK,GAAgB,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,GAAG,YAAY,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC5F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACvG,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,MAAc,EAAe,EAAE;QAC3D,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACtK,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACjD,CAAC,CAAC;IAEF,oEAAoE;IACpE,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAA2B,EAAE,IAAI,CAAC,CAAC;IAC9I,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,qEAAqE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,uBAAuB,CAAC,CAAC;IACrN,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACtJ,IAAI,QAAQ,CAAC,KAAK,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC,WAAW,QAAQ,CAAC,MAAM,IAAI,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,6DAA6D,CAAC,CAAC;IACjL,IAAI,QAAQ,CAAC,KAAK,KAAK,aAAa,IAAI,CAAC,QAAQ,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,wDAAwD,CAAC,CAAC;IACjL,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC;IAEtC,yFAAyF;IACzF,IAAI,CAAC,CAAC,CAAC,0BAA0B;QAAE,OAAO,IAAI,CAAC,mBAAmB,EAAE,4FAA4F,CAAC,CAAC;IAClK,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAA2B,EAAE,KAAK,CAAC,CAAC;IAC9K,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,QAAQ,YAAY,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9G,MAAM,MAAM,GAAG,oBAAoB,CAAC;QAClC,QAAQ,EAAE,GAAG,CAAC,MAAM;QACpB,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;QACpC,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,mBAAmB,EAAE,QAAQ;QAC7B,cAAc,EAAE,QAAQ;QACxB,0BAA0B,EAAE,CAAC,CAAC,0BAA0B;QACxD,SAAS,EAAE,CAAC,CAAC,SAAS;KACvB,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;QAC5G,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,aAAa,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,uFAAuF;IACvF,MAAM,SAAS,GAAG,sBAAsB,CAAC;QACvC,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,qBAAqB;QAC7B,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,uBAAuB;QACnC,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACrB,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAEvF,wFAAwF;IACxF,sFAAsF;IACtF,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;YAC1B,iBAAiB,GAAG,IAAI,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC1O,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;AACpH,CAAC;AAkBD,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,CAAqB;IACxD,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,qHAAqH,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAChM,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,GAAgB,EAAE,CAAC;IAC5B,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,CAAC;QACH,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChC,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7C,iFAAiF;YACjF,4CAA4C;YAC5C,MAAM,EAAE,GAAG,uBAAuB,EAAE,CAAC;YACrC,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG;gBACX,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC1C,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC5C,oBAAoB,EAAE,MAAM;gBAC5B,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;gBAC9B,UAAU,EAAE;oBACV,aAAa,EAAE,CAAC;oBAChB,MAAM,EAAE,6BAA6B;oBACrC,eAAe,EAAE,WAAW;oBAC5B,SAAS,EAAE,CAAC,CAAC,aAAa,IAAI,YAAY;oBAC1C,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;oBAC9B,UAAU,EAAE,mCAAmC;iBAChD;aACF,CAAC;YACF,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACzG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,GAAG,YAAY,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC;QACtF,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QAChJ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnG,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;YAC1B,iBAAiB,GAAG,IAAI,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC3L,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;AACnF,CAAC;AAWD,SAAS,cAAc,CAAC,GAA2B,EAAE,MAAc,EAAE,QAAgB;IACnF,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;IACpC,MAAM,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5M,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAChC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,SAAS,CAAC,GAA2B,EAAE,SAAiB;IAC/D,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC3D,KAAK,MAAM,EAAE,IAAI,SAAoC;QAAE,IAAI,OAAO,EAAE,EAAE,GAAG,KAAK,QAAQ,IAAI,EAAE,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC,GAAG,CAAC;IAChH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qEAAqE;AACrE,KAAK,UAAU,mBAAmB,CAAC,MAA6C;IAC9E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,wBAAwB,EAAE;YACtE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAClG,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAmF,CAAC;QAC/H,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;QACxG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC,WAAW,IAAI,gBAAgB,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,eAAe,GAAG,EAAE,CAAC;IAC1J,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oEAAoE,EAAE,CAAC;IACrG,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAkB;IACvC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,qDAAqD,CAAC;AACrK,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA2B;IAC7D,IAAI,MAAqC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC,CAAC;QACzG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC,CAAC;QAC3G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,4BAA4B,OAAO,CAAC,IAAI,4BAA4B,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,qEAAqE,CAAC,CAAC,CAAC;QAC3G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IACxC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACnK,MAAM,IAAI,GAAgB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,CAAC,EAAE;gBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;YAChD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACvF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,+BAA+B,IAAI,CAAC,QAAQ,iCAAiC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IACnI,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;QACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,WAAW;QAC7B,aAAa,EAAE,IAAI,CAAC,SAAS;QAC7B,IAAI;QACJ,IAAI;QACJ,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE;YACvC,MAAM,GAAG,GAAG,GAAG,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,CAAC,GAAG;gBAAE,OAAO,KAAK,CAAC;YACvB,IAAI,CAAC;gBAAC,OAAO,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,KAAK,CAAC;YAAC,CAAC;QACrE,CAAC;QACD,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAAC,OAAO,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QACxG,MAAM,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;QACzC,eAAe,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;QACzD,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5D,KAAK,EAAE,IAAI,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC/C,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,QAAQ,CAAC,MAAM,sCAAsC,CAAC,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,WAAW,+BAA+B,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACzG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wCAAwC,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,iBAAiB;QAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA2B;IAC5D,IAAI,MAAqC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,qKAAqK,CAAC,CAAC,CAAC;QAC3L,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,OAAO,CAAC,yBAAyB,KAAK,IAAI;QACxD,MAAM,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;QACzC,eAAe,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;QACzD,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5D,KAAK,EAAE,IAAI,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC/C,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,iCAAiC,MAAM,CAAC,WAAW,iCAAiC,CAAC,CAAC,CAAC;IAC5G,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,gEAAgE,CAAC,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wCAAwC,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,iBAAiB;QAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,IAAI,MAAqC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,KAAK,KAAK,aAAa;QAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,iBAAiB,OAAO,CAAC,WAAW,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACjK,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,gGAAgG,CAAC,CAAC;;QACvM,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,kMAAkM,CAAC,CAAC;AACtP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../src/commands/machine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../src/commands/machine.ts"],"names":[],"mappings":"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"}
@@ -247,7 +247,9 @@ export async function removeMachine(nameOrId, options) {
247
247
  }
248
248
  mgr.revokeMachine(machineId, localIdentity.machineId, 'Removed via CLI');
249
249
  console.log(pc.green(`Machine "${entry.name}" has been revoked.`));
250
- console.log(pc.dim('Secrets should be rotated. The revoked machine can no longer authenticate.'));
250
+ console.log(pc.dim('Secrets should be rotated. The revoked machine can no longer authenticate to the mesh with its machine key.'));
251
+ // a2a-single-agent-identity §1.4: true of the MACHINE key, false of the AGENT key — say so.
252
+ console.log(pc.yellow(`${entry.name} is revoked for the mesh but still holds a copy of the agent identity and can sign as ${config.projectName} until the identity is rotated fleet-wide.`));
251
253
  }
252
254
  export async function whoami(options) {
253
255
  let config;