@solidnumber/cli 2.17.0 → 2.19.0
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/README.md +15 -0
- package/dist/commands/accounting.d.ts +10 -1
- package/dist/commands/accounting.d.ts.map +1 -1
- package/dist/commands/accounting.js +77 -52
- package/dist/commands/accounting.js.map +1 -1
- package/dist/commands/agent.js +214 -0
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/apply.d.ts +10 -0
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +436 -51
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/books.d.ts +24 -0
- package/dist/commands/books.d.ts.map +1 -0
- package/dist/commands/books.js +242 -0
- package/dist/commands/books.js.map +1 -0
- package/dist/commands/call.js +11 -0
- package/dist/commands/call.js.map +1 -1
- package/dist/commands/company.js +84 -22
- package/dist/commands/company.js.map +1 -1
- package/dist/commands/dispatch_shortcuts.d.ts +7 -0
- package/dist/commands/dispatch_shortcuts.d.ts.map +1 -1
- package/dist/commands/dispatch_shortcuts.js +2 -0
- package/dist/commands/dispatch_shortcuts.js.map +1 -1
- package/dist/commands/how-to.js +1 -1
- package/dist/commands/how-to.js.map +1 -1
- package/dist/commands/update.d.ts +22 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +197 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +43 -0
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +39 -0
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/apply/engine.d.ts +13 -0
- package/dist/lib/apply/engine.d.ts.map +1 -1
- package/dist/lib/apply/engine.js +122 -13
- package/dist/lib/apply/engine.js.map +1 -1
- package/dist/lib/apply/lock.d.ts +107 -0
- package/dist/lib/apply/lock.d.ts.map +1 -0
- package/dist/lib/apply/lock.js +285 -0
- package/dist/lib/apply/lock.js.map +1 -0
- package/dist/lib/apply/registry.d.ts +62 -5
- package/dist/lib/apply/registry.d.ts.map +1 -1
- package/dist/lib/apply/registry.js +151 -1
- package/dist/lib/apply/registry.js.map +1 -1
- package/dist/lib/config.d.ts +3 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +15 -0
- package/dist/lib/config.js.map +1 -1
- package/package.json +1 -1
- package/platform-docs/ai.txt +2 -2
- package/platform-docs/llms.txt +16 -12
package/dist/lib/apply/engine.js
CHANGED
|
@@ -36,6 +36,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.parseManifest = parseManifest;
|
|
37
37
|
exports.extractList = extractList;
|
|
38
38
|
exports.specMatches = specMatches;
|
|
39
|
+
exports.changedFields = changedFields;
|
|
40
|
+
exports.preImage = preImage;
|
|
41
|
+
exports.valuesEqual = valuesEqual;
|
|
39
42
|
exports.planKind = planKind;
|
|
40
43
|
exports.actionIdempotencyKey = actionIdempotencyKey;
|
|
41
44
|
exports.tallyResults = tallyResults;
|
|
@@ -101,20 +104,37 @@ function normalizeResource(r, index) {
|
|
|
101
104
|
delete spec.identity;
|
|
102
105
|
}
|
|
103
106
|
const identityField = String(obj.identity || metadata.identity || recon.identity);
|
|
104
|
-
|
|
107
|
+
// A singleton has exactly one instance per company: its identity is the kind name.
|
|
108
|
+
const identityValue = recon.singleton ? recon.kind : (spec[identityField] ?? metadata.name);
|
|
105
109
|
if (identityValue === undefined || identityValue === null || identityValue === '') {
|
|
106
110
|
throw new Error(`${kind} entry #${index + 1} has no identity — set spec.${identityField} (or metadata.name)`);
|
|
107
111
|
}
|
|
112
|
+
if (recon.managedFields) {
|
|
113
|
+
const allowed = new Set([...recon.managedFields, identityField, ...(recon.singleton ? [] : [])]);
|
|
114
|
+
const stray = Object.keys(spec).filter((k) => !allowed.has(k));
|
|
115
|
+
if (stray.length) {
|
|
116
|
+
throw new Error(`${kind} entry #${index + 1} declares ${stray.map((f) => `"${f}"`).join(', ')} — ` +
|
|
117
|
+
`apply manages only: ${recon.managedFields.join(', ')}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
108
120
|
return { kind, identity: String(identityValue), spec };
|
|
109
121
|
}
|
|
110
122
|
/** Pull the resource array out of a list response, tolerating common shapes. */
|
|
111
123
|
function extractList(resp, recon) {
|
|
124
|
+
if (recon.singleton) {
|
|
125
|
+
// `{ brand: {...} }` or `{ brand: null }` → zero or one item, identity = kind.
|
|
126
|
+
const o = (resp && typeof resp === 'object') ? resp : {};
|
|
127
|
+
const one = recon.listKey ? o[recon.listKey] : resp;
|
|
128
|
+
if (!one || typeof one !== 'object' || Array.isArray(one))
|
|
129
|
+
return [];
|
|
130
|
+
return [{ ...one, [recon.identity]: recon.kind }];
|
|
131
|
+
}
|
|
112
132
|
if (Array.isArray(resp))
|
|
113
133
|
return resp;
|
|
114
134
|
if (!resp || typeof resp !== 'object')
|
|
115
135
|
return [];
|
|
116
136
|
const o = resp;
|
|
117
|
-
const candidates = [recon.listKey, 'items', 'results', 'data', `${recon.kind}s`].filter(Boolean);
|
|
137
|
+
const candidates = [recon.listKey, 'items', 'results', 'entries', 'data', `${recon.kind}s`].filter(Boolean);
|
|
118
138
|
for (const key of candidates) {
|
|
119
139
|
if (Array.isArray(o[key]))
|
|
120
140
|
return o[key];
|
|
@@ -132,6 +152,18 @@ function specMatches(desired, current) {
|
|
|
132
152
|
}
|
|
133
153
|
return true;
|
|
134
154
|
}
|
|
155
|
+
/** Declared fields whose value differs from the current server item. */
|
|
156
|
+
function changedFields(desired, current) {
|
|
157
|
+
return Object.keys(desired).filter((k) => !deepEqual(desired[k], current[k]));
|
|
158
|
+
}
|
|
159
|
+
/** The server's current values of exactly the declared fields (an update's pre-image). */
|
|
160
|
+
function preImage(desired, current) {
|
|
161
|
+
const out = {};
|
|
162
|
+
for (const k of Object.keys(desired))
|
|
163
|
+
out[k] = current[k] === undefined ? null : current[k];
|
|
164
|
+
return out;
|
|
165
|
+
}
|
|
166
|
+
function valuesEqual(a, b) { return deepEqual(a, b); }
|
|
135
167
|
function deepEqual(a, b) {
|
|
136
168
|
if (a === b)
|
|
137
169
|
return true;
|
|
@@ -168,27 +200,45 @@ function planKind(recon, desired, current, opts = {}) {
|
|
|
168
200
|
seen.add(d.identity);
|
|
169
201
|
const existing = currentByIdentity.get(d.identity);
|
|
170
202
|
if (!existing) {
|
|
171
|
-
|
|
203
|
+
if (recon.create === null) {
|
|
204
|
+
actions.push({
|
|
205
|
+
kind: d.kind, identity: d.identity, action: 'unsupported',
|
|
206
|
+
reason: recon.createReason ?? `${d.kind} cannot be created by apply`,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
actions.push({ kind: d.kind, identity: d.identity, action: 'create', spec: d.spec });
|
|
211
|
+
}
|
|
172
212
|
continue;
|
|
173
213
|
}
|
|
174
214
|
if (specMatches(d.spec, existing)) {
|
|
175
|
-
|
|
215
|
+
// Carry the spec: an unchanged resource still becomes a lock baseline.
|
|
216
|
+
actions.push({ kind: d.kind, identity: d.identity, action: 'noop', id: existing[recon.idField], spec: d.spec });
|
|
176
217
|
}
|
|
177
218
|
else if (recon.updateMethod === null) {
|
|
178
219
|
actions.push({
|
|
179
220
|
kind: d.kind, identity: d.identity, action: 'unsupported',
|
|
180
|
-
reason: `${d.kind} is immutable — delete and recreate to change`,
|
|
221
|
+
reason: recon.updateReason ?? `${d.kind} is immutable — delete and recreate to change`,
|
|
181
222
|
id: existing[recon.idField],
|
|
182
223
|
});
|
|
183
224
|
}
|
|
184
225
|
else {
|
|
185
|
-
actions.push({
|
|
226
|
+
actions.push({
|
|
227
|
+
kind: d.kind, identity: d.identity, action: 'update',
|
|
228
|
+
id: existing[recon.idField], spec: d.spec,
|
|
229
|
+
changed: changedFields(d.spec, existing),
|
|
230
|
+
before: preImage(d.spec, existing),
|
|
231
|
+
});
|
|
186
232
|
}
|
|
187
233
|
}
|
|
188
|
-
if (opts.prune) {
|
|
234
|
+
if (opts.prune && recon.prunable !== false && !recon.singleton) {
|
|
189
235
|
for (const [idv, item] of currentByIdentity) {
|
|
190
236
|
if (!seen.has(idv)) {
|
|
191
|
-
actions.push({
|
|
237
|
+
actions.push({
|
|
238
|
+
kind: recon.kind, identity: idv, action: 'prune',
|
|
239
|
+
id: item[recon.idField],
|
|
240
|
+
before: { ...item },
|
|
241
|
+
});
|
|
192
242
|
}
|
|
193
243
|
}
|
|
194
244
|
}
|
|
@@ -252,16 +302,30 @@ async function executePlan(client, recon, actions, dryRun) {
|
|
|
252
302
|
continue;
|
|
253
303
|
}
|
|
254
304
|
const key = actionIdempotencyKey(a);
|
|
255
|
-
|
|
305
|
+
// ⛔ A kind with no in-place update route has no item path to build. Only
|
|
306
|
+
// `create` is reachable for it, so an update or delete arriving here is a
|
|
307
|
+
// planning bug and must fail loudly rather than throw a TypeError deep in a
|
|
308
|
+
// request. Surfaced by tightening itemPath to `string | null`: this line
|
|
309
|
+
// had dereferenced it unguarded since the file was written.
|
|
310
|
+
const item = recon.itemPath === null
|
|
311
|
+
? null
|
|
312
|
+
: recon.itemPath.replace('{id}', String(a.id));
|
|
313
|
+
if (item === null && a.action !== 'create') {
|
|
314
|
+
results.push({
|
|
315
|
+
...a,
|
|
316
|
+
status: 'failed',
|
|
317
|
+
error: `${recon.kind} has no item route — ${recon.updateReason ?? 'it cannot be changed in place'}`,
|
|
318
|
+
});
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
256
321
|
try {
|
|
257
322
|
if (a.action === 'create') {
|
|
323
|
+
if (recon.create === null)
|
|
324
|
+
throw new Error(`${recon.kind} cannot be created by apply`);
|
|
258
325
|
await client.post(recon.create, a.spec, { idempotencyKey: key });
|
|
259
326
|
}
|
|
260
327
|
else if (a.action === 'update') {
|
|
261
|
-
|
|
262
|
-
await client.put(item, a.spec, { idempotencyKey: key });
|
|
263
|
-
else
|
|
264
|
-
await client.patch(item, a.spec, { idempotencyKey: key });
|
|
328
|
+
await executeUpdate(client, recon, a, item, key);
|
|
265
329
|
}
|
|
266
330
|
else if (a.action === 'prune') {
|
|
267
331
|
await client.delete(item, { idempotencyKey: key });
|
|
@@ -274,4 +338,49 @@ async function executePlan(client, recon, actions, dryRun) {
|
|
|
274
338
|
}
|
|
275
339
|
return results;
|
|
276
340
|
}
|
|
341
|
+
/**
|
|
342
|
+
* Write one update. A kind with `updateRoutes` splits the CHANGED fields across
|
|
343
|
+
* routes (an agent's autonomy, pause state and model each live behind a
|
|
344
|
+
* different endpoint); a route that owns no changed field is never called, so
|
|
345
|
+
* reconciling one setting cannot touch another. `writeMap` turns a read-side
|
|
346
|
+
* field into its write-side body (a line's `is_active` is written as `status`).
|
|
347
|
+
*/
|
|
348
|
+
async function executeUpdate(client, recon, a, item, key) {
|
|
349
|
+
const spec = a.spec ?? {};
|
|
350
|
+
if (!recon.updateRoutes) {
|
|
351
|
+
const body = toWriteBody(recon, spec);
|
|
352
|
+
if (recon.updateMethod === 'put')
|
|
353
|
+
await client.put(item, body, { idempotencyKey: key });
|
|
354
|
+
else
|
|
355
|
+
await client.patch(item, body, { idempotencyKey: key });
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
const changed = new Set(a.changed ?? Object.keys(spec));
|
|
359
|
+
for (let i = 0; i < recon.updateRoutes.length; i++) {
|
|
360
|
+
const route = recon.updateRoutes[i];
|
|
361
|
+
const subset = {};
|
|
362
|
+
for (const f of route.fields)
|
|
363
|
+
if (changed.has(f) && f in spec)
|
|
364
|
+
subset[f] = spec[f];
|
|
365
|
+
if (Object.keys(subset).length === 0)
|
|
366
|
+
continue;
|
|
367
|
+
const body = toWriteBody(recon, subset);
|
|
368
|
+
const path = route.path.replace('{id}', String(a.id));
|
|
369
|
+
const routeKey = `${key}-${i}`;
|
|
370
|
+
if (route.method === 'put')
|
|
371
|
+
await client.put(path, body, { idempotencyKey: routeKey });
|
|
372
|
+
else
|
|
373
|
+
await client.patch(path, body, { idempotencyKey: routeKey });
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
function toWriteBody(recon, spec) {
|
|
377
|
+
if (!recon.writeMap)
|
|
378
|
+
return spec;
|
|
379
|
+
const body = {};
|
|
380
|
+
for (const [k, v] of Object.entries(spec)) {
|
|
381
|
+
const map = recon.writeMap[k];
|
|
382
|
+
Object.assign(body, map ? map(v) : { [k]: v });
|
|
383
|
+
}
|
|
384
|
+
return body;
|
|
385
|
+
}
|
|
277
386
|
//# sourceMappingURL=engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/lib/apply/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/lib/apply/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { Reconciler } from './registry';
|
|
2
|
+
import { DesiredResource, ExecResult, PlannedAction } from './engine';
|
|
3
|
+
export declare const LOCK_VERSION = 1;
|
|
4
|
+
export declare const MAX_RUNS = 20;
|
|
5
|
+
export interface LockedResource {
|
|
6
|
+
kind: string;
|
|
7
|
+
identity: string;
|
|
8
|
+
id?: string | number;
|
|
9
|
+
/** Managed fields as last applied (the desired spec that was written). */
|
|
10
|
+
spec: Record<string, unknown>;
|
|
11
|
+
spec_hash: string;
|
|
12
|
+
applied_at: string;
|
|
13
|
+
}
|
|
14
|
+
export interface RunAction {
|
|
15
|
+
kind: string;
|
|
16
|
+
identity: string;
|
|
17
|
+
action: 'create' | 'update' | 'prune';
|
|
18
|
+
id?: string | number;
|
|
19
|
+
before?: Record<string, unknown> | null;
|
|
20
|
+
after?: Record<string, unknown> | null;
|
|
21
|
+
}
|
|
22
|
+
export interface LockRun {
|
|
23
|
+
run_id: string;
|
|
24
|
+
at: string;
|
|
25
|
+
cli_version: string;
|
|
26
|
+
kind: 'apply' | 'rollback';
|
|
27
|
+
/** For a rollback: the run it reverted. */
|
|
28
|
+
reverts?: string;
|
|
29
|
+
actions: RunAction[];
|
|
30
|
+
}
|
|
31
|
+
export interface ApplyLock {
|
|
32
|
+
version: number;
|
|
33
|
+
company_id: number;
|
|
34
|
+
manifest: string;
|
|
35
|
+
applied_at: string | null;
|
|
36
|
+
cli_version: string;
|
|
37
|
+
resources: Record<string, LockedResource>;
|
|
38
|
+
runs: LockRun[];
|
|
39
|
+
}
|
|
40
|
+
export declare function lockKey(kind: string, identity: string): string;
|
|
41
|
+
export declare function lockPathFor(manifestPath: string): string;
|
|
42
|
+
export declare function specHash(spec: Record<string, unknown>): string;
|
|
43
|
+
export declare function emptyLock(companyId: number, manifestPath: string, cliVersion: string): ApplyLock;
|
|
44
|
+
export declare function readLock(lockPath: string): ApplyLock | null;
|
|
45
|
+
export declare function writeLock(lockPath: string, lock: ApplyLock): void;
|
|
46
|
+
export declare function newRunId(now?: Date): string;
|
|
47
|
+
/**
|
|
48
|
+
* Fold an executed (non-dry-run) plan into the lock: resources that were
|
|
49
|
+
* created/updated/unchanged are recorded with the spec that now holds on the
|
|
50
|
+
* server; pruned ones are dropped; failed actions leave the lock untouched for
|
|
51
|
+
* that resource. Returns the new lock and the run record that was appended.
|
|
52
|
+
*/
|
|
53
|
+
export declare function mergeRun(lock: ApplyLock, results: ExecResult[], opts: {
|
|
54
|
+
cliVersion: string;
|
|
55
|
+
kind?: 'apply' | 'rollback';
|
|
56
|
+
reverts?: string;
|
|
57
|
+
now?: Date;
|
|
58
|
+
}): {
|
|
59
|
+
lock: ApplyLock;
|
|
60
|
+
run: LockRun;
|
|
61
|
+
};
|
|
62
|
+
export type DriftState = 'in_sync' | 'manifest_changed' | 'live_changed' | 'conflict' | 'missing' | 'never_applied' | 'removed_from_manifest';
|
|
63
|
+
export interface DriftEntry {
|
|
64
|
+
kind: string;
|
|
65
|
+
identity: string;
|
|
66
|
+
state: DriftState;
|
|
67
|
+
/** Fields where LIVE differs from the lock (production edits). */
|
|
68
|
+
live_diff?: Array<{
|
|
69
|
+
field: string;
|
|
70
|
+
lock: unknown;
|
|
71
|
+
live: unknown;
|
|
72
|
+
}>;
|
|
73
|
+
/** Fields where the MANIFEST differs from the lock (git edits). */
|
|
74
|
+
manifest_diff?: Array<{
|
|
75
|
+
field: string;
|
|
76
|
+
lock: unknown;
|
|
77
|
+
manifest: unknown;
|
|
78
|
+
}>;
|
|
79
|
+
}
|
|
80
|
+
export declare function classifyDrift(desired: DesiredResource[], lock: ApplyLock | null, liveByKind: Map<string, {
|
|
81
|
+
recon: Reconciler;
|
|
82
|
+
items: Array<Record<string, unknown>>;
|
|
83
|
+
}>): DriftEntry[];
|
|
84
|
+
/** States that mean production moved behind git's back. */
|
|
85
|
+
export declare function isProductionDrift(e: DriftEntry): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Invert one run into a plan, most recent action first:
|
|
88
|
+
* update → update back to `before`
|
|
89
|
+
* create → prune the id it created
|
|
90
|
+
* prune → create from `before` (server-only fields stripped)
|
|
91
|
+
* Pure; the caller executes it with the ordinary engine.
|
|
92
|
+
*/
|
|
93
|
+
export declare function buildRollbackPlan(run: LockRun, reconFor: (kind: string) => Reconciler | undefined): {
|
|
94
|
+
actions: PlannedAction[];
|
|
95
|
+
skipped: Array<{
|
|
96
|
+
kind: string;
|
|
97
|
+
identity: string;
|
|
98
|
+
reason: string;
|
|
99
|
+
}>;
|
|
100
|
+
};
|
|
101
|
+
/** The manifest-worthy view of one live item: allow-listed fields, or everything minus read-only. */
|
|
102
|
+
export declare function shapeForExport(recon: Reconciler, item: Record<string, unknown>): Record<string, unknown>;
|
|
103
|
+
export declare function toManifestYaml(docs: Array<{
|
|
104
|
+
kind: string;
|
|
105
|
+
spec: Record<string, unknown>;
|
|
106
|
+
}>, yamlDump: (o: unknown) => string): string;
|
|
107
|
+
//# sourceMappingURL=lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../../src/lib/apply/lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.MAX_RUNS = exports.LOCK_VERSION = void 0;
|
|
37
|
+
exports.lockKey = lockKey;
|
|
38
|
+
exports.lockPathFor = lockPathFor;
|
|
39
|
+
exports.specHash = specHash;
|
|
40
|
+
exports.emptyLock = emptyLock;
|
|
41
|
+
exports.readLock = readLock;
|
|
42
|
+
exports.writeLock = writeLock;
|
|
43
|
+
exports.newRunId = newRunId;
|
|
44
|
+
exports.mergeRun = mergeRun;
|
|
45
|
+
exports.classifyDrift = classifyDrift;
|
|
46
|
+
exports.isProductionDrift = isProductionDrift;
|
|
47
|
+
exports.buildRollbackPlan = buildRollbackPlan;
|
|
48
|
+
exports.shapeForExport = shapeForExport;
|
|
49
|
+
exports.toManifestYaml = toManifestYaml;
|
|
50
|
+
/**
|
|
51
|
+
* `solid apply` lockfile, drift classification, rollback plan and export shaping.
|
|
52
|
+
*
|
|
53
|
+
* The lock lives NEXT TO the manifest (`site.yaml` → `site.lock.json`) so it is
|
|
54
|
+
* committed with it. It records, per resource, the server id and the managed
|
|
55
|
+
* fields as they stood when apply last wrote them — which is what makes a
|
|
56
|
+
* three-way comparison possible:
|
|
57
|
+
*
|
|
58
|
+
* manifest (git) lock (last apply) live (production)
|
|
59
|
+
*
|
|
60
|
+
* and what `rollback` restores from: every run stores a pre-image (`before`)
|
|
61
|
+
* for each write it made.
|
|
62
|
+
*
|
|
63
|
+
* Everything in here that decides is pure (classifyDrift, buildRollbackPlan,
|
|
64
|
+
* shapeForExport, mergeRun); the two functions that touch disk are thin.
|
|
65
|
+
*/
|
|
66
|
+
const fs = __importStar(require("node:fs"));
|
|
67
|
+
const path = __importStar(require("node:path"));
|
|
68
|
+
const node_crypto_1 = require("node:crypto");
|
|
69
|
+
const registry_1 = require("./registry");
|
|
70
|
+
const engine_1 = require("./engine");
|
|
71
|
+
exports.LOCK_VERSION = 1;
|
|
72
|
+
exports.MAX_RUNS = 20;
|
|
73
|
+
function lockKey(kind, identity) { return `${kind}/${identity}`; }
|
|
74
|
+
function lockPathFor(manifestPath) {
|
|
75
|
+
const dir = path.dirname(manifestPath);
|
|
76
|
+
const base = path.basename(manifestPath).replace(/\.(ya?ml|json)$/i, '');
|
|
77
|
+
return path.join(dir, `${base}.lock.json`);
|
|
78
|
+
}
|
|
79
|
+
function specHash(spec) {
|
|
80
|
+
return (0, node_crypto_1.createHash)('sha256').update(stableStringify(spec)).digest('hex').slice(0, 16);
|
|
81
|
+
}
|
|
82
|
+
function stableStringify(v) {
|
|
83
|
+
if (v === null || typeof v !== 'object')
|
|
84
|
+
return JSON.stringify(v);
|
|
85
|
+
if (Array.isArray(v))
|
|
86
|
+
return `[${v.map(stableStringify).join(',')}]`;
|
|
87
|
+
const o = v;
|
|
88
|
+
return `{${Object.keys(o).sort().map((k) => `${JSON.stringify(k)}:${stableStringify(o[k])}`).join(',')}}`;
|
|
89
|
+
}
|
|
90
|
+
function emptyLock(companyId, manifestPath, cliVersion) {
|
|
91
|
+
return {
|
|
92
|
+
version: exports.LOCK_VERSION, company_id: companyId, manifest: path.basename(manifestPath),
|
|
93
|
+
applied_at: null, cli_version: cliVersion, resources: {}, runs: [],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function readLock(lockPath) {
|
|
97
|
+
if (!fs.existsSync(lockPath))
|
|
98
|
+
return null;
|
|
99
|
+
const parsed = JSON.parse(fs.readFileSync(lockPath, 'utf8'));
|
|
100
|
+
if (parsed.version !== exports.LOCK_VERSION) {
|
|
101
|
+
throw new Error(`${path.basename(lockPath)} is lock version ${parsed.version}; this CLI writes version ${exports.LOCK_VERSION}`);
|
|
102
|
+
}
|
|
103
|
+
return parsed;
|
|
104
|
+
}
|
|
105
|
+
function writeLock(lockPath, lock) {
|
|
106
|
+
fs.writeFileSync(lockPath, JSON.stringify(lock, null, 2) + '\n');
|
|
107
|
+
}
|
|
108
|
+
function newRunId(now = new Date()) {
|
|
109
|
+
return now.toISOString().replace(/[-:]/g, '').replace(/\.\d{3}Z$/, 'Z');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Fold an executed (non-dry-run) plan into the lock: resources that were
|
|
113
|
+
* created/updated/unchanged are recorded with the spec that now holds on the
|
|
114
|
+
* server; pruned ones are dropped; failed actions leave the lock untouched for
|
|
115
|
+
* that resource. Returns the new lock and the run record that was appended.
|
|
116
|
+
*/
|
|
117
|
+
function mergeRun(lock, results, opts) {
|
|
118
|
+
const now = opts.now ?? new Date();
|
|
119
|
+
const at = now.toISOString();
|
|
120
|
+
const resources = { ...lock.resources };
|
|
121
|
+
const actions = [];
|
|
122
|
+
for (const r of results) {
|
|
123
|
+
const key = lockKey(r.kind, r.identity);
|
|
124
|
+
if (r.status === 'failed')
|
|
125
|
+
continue;
|
|
126
|
+
if (r.action === 'noop') {
|
|
127
|
+
// Re-affirm: the server already matched the manifest. Record it so a
|
|
128
|
+
// later `drift` has a baseline even for resources apply never wrote.
|
|
129
|
+
if (r.spec || resources[key]) {
|
|
130
|
+
const spec = r.spec ?? resources[key].spec;
|
|
131
|
+
resources[key] = { kind: r.kind, identity: r.identity, id: r.id ?? resources[key]?.id, spec, spec_hash: specHash(spec), applied_at: resources[key]?.applied_at ?? at };
|
|
132
|
+
}
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (r.action === 'unsupported')
|
|
136
|
+
continue;
|
|
137
|
+
if (r.action === 'prune') {
|
|
138
|
+
delete resources[key];
|
|
139
|
+
actions.push({ kind: r.kind, identity: r.identity, action: 'prune', id: r.id, before: r.before ?? null, after: null });
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (r.action === 'create' || r.action === 'update') {
|
|
143
|
+
const spec = r.spec ?? {};
|
|
144
|
+
resources[key] = { kind: r.kind, identity: r.identity, id: r.id, spec, spec_hash: specHash(spec), applied_at: at };
|
|
145
|
+
actions.push({
|
|
146
|
+
kind: r.kind, identity: r.identity, action: r.action, id: r.id,
|
|
147
|
+
before: r.action === 'update' ? (r.before ?? null) : null, after: spec,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const run = { run_id: newRunId(now), at, cli_version: opts.cliVersion, kind: opts.kind ?? 'apply', actions };
|
|
152
|
+
if (opts.reverts)
|
|
153
|
+
run.reverts = opts.reverts;
|
|
154
|
+
const runs = [...lock.runs, run].slice(-exports.MAX_RUNS);
|
|
155
|
+
return { lock: { ...lock, applied_at: at, cli_version: opts.cliVersion, resources, runs }, run };
|
|
156
|
+
}
|
|
157
|
+
function classifyDrift(desired, lock, liveByKind) {
|
|
158
|
+
const out = [];
|
|
159
|
+
const declared = new Set();
|
|
160
|
+
for (const d of desired) {
|
|
161
|
+
const key = lockKey(d.kind, d.identity);
|
|
162
|
+
declared.add(key);
|
|
163
|
+
const live = liveByKind.get(d.kind);
|
|
164
|
+
const item = live?.items.find((i) => String(i[live.recon.identity]) === d.identity);
|
|
165
|
+
const locked = lock?.resources[key];
|
|
166
|
+
if (!item) {
|
|
167
|
+
out.push({ kind: d.kind, identity: d.identity, state: 'missing' });
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (!locked) {
|
|
171
|
+
out.push({ kind: d.kind, identity: d.identity, state: 'never_applied' });
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
const fields = Array.from(new Set([...Object.keys(locked.spec), ...Object.keys(d.spec)]));
|
|
175
|
+
const live_diff = [];
|
|
176
|
+
const manifest_diff = [];
|
|
177
|
+
for (const f of fields) {
|
|
178
|
+
const lockV = locked.spec[f];
|
|
179
|
+
if (!(0, engine_1.valuesEqual)(lockV ?? null, item[f] ?? null))
|
|
180
|
+
live_diff.push({ field: f, lock: lockV ?? null, live: item[f] ?? null });
|
|
181
|
+
if (!(0, engine_1.valuesEqual)(lockV ?? null, d.spec[f] ?? null))
|
|
182
|
+
manifest_diff.push({ field: f, lock: lockV ?? null, manifest: d.spec[f] ?? null });
|
|
183
|
+
}
|
|
184
|
+
const state = live_diff.length && manifest_diff.length ? 'conflict'
|
|
185
|
+
: live_diff.length ? 'live_changed'
|
|
186
|
+
: manifest_diff.length ? 'manifest_changed'
|
|
187
|
+
: 'in_sync';
|
|
188
|
+
const e = { kind: d.kind, identity: d.identity, state };
|
|
189
|
+
if (live_diff.length)
|
|
190
|
+
e.live_diff = live_diff;
|
|
191
|
+
if (manifest_diff.length)
|
|
192
|
+
e.manifest_diff = manifest_diff;
|
|
193
|
+
out.push(e);
|
|
194
|
+
}
|
|
195
|
+
if (lock) {
|
|
196
|
+
for (const key of Object.keys(lock.resources)) {
|
|
197
|
+
if (!declared.has(key)) {
|
|
198
|
+
const r = lock.resources[key];
|
|
199
|
+
out.push({ kind: r.kind, identity: r.identity, state: 'removed_from_manifest' });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return out;
|
|
204
|
+
}
|
|
205
|
+
/** States that mean production moved behind git's back. */
|
|
206
|
+
function isProductionDrift(e) {
|
|
207
|
+
return e.state === 'live_changed' || e.state === 'conflict';
|
|
208
|
+
}
|
|
209
|
+
// ── Rollback ─────────────────────────────────────────────────────────────────
|
|
210
|
+
/**
|
|
211
|
+
* Invert one run into a plan, most recent action first:
|
|
212
|
+
* update → update back to `before`
|
|
213
|
+
* create → prune the id it created
|
|
214
|
+
* prune → create from `before` (server-only fields stripped)
|
|
215
|
+
* Pure; the caller executes it with the ordinary engine.
|
|
216
|
+
*/
|
|
217
|
+
function buildRollbackPlan(run, reconFor) {
|
|
218
|
+
const actions = [];
|
|
219
|
+
const skipped = [];
|
|
220
|
+
for (const a of [...run.actions].reverse()) {
|
|
221
|
+
const recon = reconFor(a.kind);
|
|
222
|
+
if (!recon) {
|
|
223
|
+
skipped.push({ kind: a.kind, identity: a.identity, reason: 'unknown kind' });
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (a.action === 'update') {
|
|
227
|
+
if (!a.before) {
|
|
228
|
+
skipped.push({ kind: a.kind, identity: a.identity, reason: 'no pre-image recorded' });
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
if (recon.updateMethod === null) {
|
|
232
|
+
skipped.push({ kind: a.kind, identity: a.identity, reason: `${a.kind} is immutable` });
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
actions.push({ kind: a.kind, identity: a.identity, action: 'update', id: a.id, spec: a.before, changed: Object.keys(a.before), before: a.after ?? undefined });
|
|
236
|
+
}
|
|
237
|
+
else if (a.action === 'create') {
|
|
238
|
+
if (recon.prunable === false || recon.singleton) {
|
|
239
|
+
skipped.push({ kind: a.kind, identity: a.identity, reason: `${a.kind} is never deleted by apply` });
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (a.id === undefined || a.id === null) {
|
|
243
|
+
skipped.push({ kind: a.kind, identity: a.identity, reason: 'created id was not recorded' });
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
actions.push({ kind: a.kind, identity: a.identity, action: 'prune', id: a.id, before: a.after ?? undefined });
|
|
247
|
+
}
|
|
248
|
+
else if (a.action === 'prune') {
|
|
249
|
+
if (!a.before) {
|
|
250
|
+
skipped.push({ kind: a.kind, identity: a.identity, reason: 'no pre-image recorded' });
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
if (recon.create === null) {
|
|
254
|
+
skipped.push({ kind: a.kind, identity: a.identity, reason: `${a.kind} cannot be created by apply` });
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
actions.push({ kind: a.kind, identity: a.identity, action: 'create', spec: shapeForExport(recon, a.before) });
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return { actions, skipped };
|
|
261
|
+
}
|
|
262
|
+
// ── Export ───────────────────────────────────────────────────────────────────
|
|
263
|
+
/** The manifest-worthy view of one live item: allow-listed fields, or everything minus read-only. */
|
|
264
|
+
function shapeForExport(recon, item) {
|
|
265
|
+
const fields = recon.exportFields ?? recon.managedFields;
|
|
266
|
+
const out = {};
|
|
267
|
+
if (!recon.singleton)
|
|
268
|
+
out[recon.identity] = item[recon.identity];
|
|
269
|
+
if (fields) {
|
|
270
|
+
for (const f of fields)
|
|
271
|
+
if (item[f] !== undefined)
|
|
272
|
+
out[f] = item[f];
|
|
273
|
+
return out;
|
|
274
|
+
}
|
|
275
|
+
for (const [k, v] of Object.entries(item)) {
|
|
276
|
+
if (registry_1.READ_ONLY_FIELDS.has(k) || k.endsWith('_at'))
|
|
277
|
+
continue;
|
|
278
|
+
out[k] = v;
|
|
279
|
+
}
|
|
280
|
+
return out;
|
|
281
|
+
}
|
|
282
|
+
function toManifestYaml(docs, yamlDump) {
|
|
283
|
+
return docs.map((d) => yamlDump({ kind: d.kind, ...d.spec }).trimEnd()).join('\n---\n') + '\n';
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=lock.js.map
|