@ifc-lite/cli 0.17.2 → 0.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.
Files changed (42) hide show
  1. package/dist/commands/layer-diff.d.ts +3 -0
  2. package/dist/commands/layer-diff.d.ts.map +1 -0
  3. package/dist/commands/layer-diff.js +46 -0
  4. package/dist/commands/layer-diff.js.map +1 -0
  5. package/dist/commands/layer-history.d.ts +61 -0
  6. package/dist/commands/layer-history.d.ts.map +1 -0
  7. package/dist/commands/layer-history.js +276 -0
  8. package/dist/commands/layer-history.js.map +1 -0
  9. package/dist/commands/layer-merge.d.ts +22 -0
  10. package/dist/commands/layer-merge.d.ts.map +1 -0
  11. package/dist/commands/layer-merge.js +138 -0
  12. package/dist/commands/layer-merge.js.map +1 -0
  13. package/dist/commands/layer-publish.d.ts +67 -0
  14. package/dist/commands/layer-publish.d.ts.map +1 -0
  15. package/dist/commands/layer-publish.js +305 -0
  16. package/dist/commands/layer-publish.js.map +1 -0
  17. package/dist/commands/layer-push.d.ts +22 -0
  18. package/dist/commands/layer-push.d.ts.map +1 -0
  19. package/dist/commands/layer-push.js +133 -0
  20. package/dist/commands/layer-push.js.map +1 -0
  21. package/dist/commands/layer-store.d.ts +66 -0
  22. package/dist/commands/layer-store.d.ts.map +1 -0
  23. package/dist/commands/layer-store.js +257 -0
  24. package/dist/commands/layer-store.js.map +1 -0
  25. package/dist/commands/layer-test-helpers.d.ts +10 -0
  26. package/dist/commands/layer-test-helpers.d.ts.map +1 -0
  27. package/dist/commands/layer-test-helpers.js +49 -0
  28. package/dist/commands/layer-test-helpers.js.map +1 -0
  29. package/dist/commands/layer.d.ts +2 -0
  30. package/dist/commands/layer.d.ts.map +1 -0
  31. package/dist/commands/layer.js +109 -0
  32. package/dist/commands/layer.js.map +1 -0
  33. package/dist/commands/mcp.d.ts.map +1 -1
  34. package/dist/commands/mcp.js +4 -1
  35. package/dist/commands/mcp.js.map +1 -1
  36. package/dist/commands/ref.d.ts +17 -0
  37. package/dist/commands/ref.d.ts.map +1 -0
  38. package/dist/commands/ref.js +173 -0
  39. package/dist/commands/ref.js.map +1 -0
  40. package/dist/index.js +15 -0
  41. package/dist/index.js.map +1 -1
  42. package/package.json +13 -11
@@ -0,0 +1,257 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Local layer store for `ifc-lite layer` / `ifc-lite ref` commands.
6
+ *
7
+ * Rooted at `.ifc-lite/` of the cwd (overridable with `--store <dir>`):
8
+ *
9
+ * .ifc-lite/layers/<blake3 hex>.ifcx published layer documents
10
+ * .ifc-lite/refs.json named refs → ordered layer ids
11
+ * .ifc-lite/draft.json draft descriptor (layer create)
12
+ * .ifc-lite/evidence/<blake3 hex> check-evidence bytes (IDS specs +
13
+ * reports) behind manifest digests
14
+ *
15
+ * Spec: docs/architecture/layer-prs/09-cli.md.
16
+ */
17
+ import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync, } from 'node:fs';
18
+ import { join, resolve } from 'node:path';
19
+ import { blake3Digest, computeLayerId, computeStackHash } from '@ifc-lite/ifcx';
20
+ import { getFlag } from '../output.js';
21
+ let atomicWriteSeq = 0;
22
+ /**
23
+ * Write via temp file + rename so a crash or a concurrent CLI process
24
+ * never leaves a torn refs.json or layer file behind.
25
+ */
26
+ function writeFileAtomic(path, text) {
27
+ const tmp = `${path}.${process.pid}.${atomicWriteSeq++}.tmp`;
28
+ writeFileSync(tmp, text, 'utf-8');
29
+ renameSync(tmp, path);
30
+ }
31
+ /** Open (without creating) a store rooted at `dir` or `<cwd>/.ifc-lite`. */
32
+ export function openStore(dir) {
33
+ return { dir: resolve(dir ?? join(process.cwd(), '.ifc-lite')) };
34
+ }
35
+ /** Store from CLI args: honours the `--store <dir>` override. */
36
+ export function storeFromArgs(args) {
37
+ return openStore(getFlag(args, '--store'));
38
+ }
39
+ function layersDir(store) {
40
+ return join(store.dir, 'layers');
41
+ }
42
+ function refsPath(store) {
43
+ return join(store.dir, 'refs.json');
44
+ }
45
+ function draftPath(store) {
46
+ return join(store.dir, 'draft.json');
47
+ }
48
+ // ---------------------------------------------------------------------------
49
+ // refs.json
50
+ // ---------------------------------------------------------------------------
51
+ export function readRefs(store) {
52
+ if (!existsSync(refsPath(store)))
53
+ return { refs: {} };
54
+ const parsed = JSON.parse(readFileSync(refsPath(store), 'utf-8'));
55
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
56
+ throw new Error(`Corrupt refs.json at ${refsPath(store)}: expected an object`);
57
+ }
58
+ const refs = parsed.refs;
59
+ if (typeof refs !== 'object' || refs === null || Array.isArray(refs)) {
60
+ throw new Error(`Corrupt refs.json at ${refsPath(store)}: missing "refs" object`);
61
+ }
62
+ for (const [name, entry] of Object.entries(refs)) {
63
+ const candidate = entry;
64
+ if (typeof candidate !== 'object' ||
65
+ candidate === null ||
66
+ !Array.isArray(candidate.layers) ||
67
+ !candidate.layers.every((id) => typeof id === 'string')) {
68
+ throw new Error(`Corrupt refs.json at ${refsPath(store)}: ref "${name}" must have layers: string[]`);
69
+ }
70
+ const policy = candidate.policy;
71
+ if (policy !== undefined) {
72
+ const okApproval = policy.requireHumanApproval === undefined || typeof policy.requireHumanApproval === 'boolean';
73
+ const okChecks = policy.requiredChecks === undefined ||
74
+ (Array.isArray(policy.requiredChecks) && policy.requiredChecks.every((c) => typeof c === 'string'));
75
+ if (typeof policy !== 'object' || policy === null || !okApproval || !okChecks) {
76
+ throw new Error(`Corrupt refs.json at ${refsPath(store)}: ref "${name}" has an invalid policy`);
77
+ }
78
+ }
79
+ }
80
+ return { refs: refs };
81
+ }
82
+ export function writeRefs(store, refs) {
83
+ mkdirSync(store.dir, { recursive: true });
84
+ writeFileAtomic(refsPath(store), `${JSON.stringify(refs, null, 2)}\n`);
85
+ }
86
+ export function getRef(store, name) {
87
+ return readRefs(store).refs[name];
88
+ }
89
+ export function requireRef(store, name) {
90
+ const entry = getRef(store, name);
91
+ if (!entry)
92
+ throw new Error(`No ref named "${name}" in store ${store.dir}`);
93
+ return entry;
94
+ }
95
+ export function setRef(store, name, entry) {
96
+ const refs = readRefs(store);
97
+ refs.refs[name] = entry;
98
+ writeRefs(store, refs);
99
+ }
100
+ /** Stack hash of a ref's current layer list. */
101
+ export function refStackHash(store, name) {
102
+ return computeStackHash(requireRef(store, name).layers);
103
+ }
104
+ // ---------------------------------------------------------------------------
105
+ // layers/<hex>.ifcx
106
+ // ---------------------------------------------------------------------------
107
+ function hexOf(layerId) {
108
+ return layerId.startsWith('blake3:') ? layerId.slice('blake3:'.length) : layerId;
109
+ }
110
+ /** Persist a published layer; `file.header.id` must be its blake3 id. */
111
+ export function storeLayer(store, file) {
112
+ const id = file.header.id;
113
+ if (!id.startsWith('blake3:')) {
114
+ throw new Error(`Layer header.id must be a blake3 content address, got "${id}"`);
115
+ }
116
+ mkdirSync(layersDir(store), { recursive: true });
117
+ writeFileAtomic(join(layersDir(store), `${hexOf(id)}.ifcx`), `${JSON.stringify(file, null, 2)}\n`);
118
+ return id;
119
+ }
120
+ export function hasLayer(store, layerId) {
121
+ return existsSync(join(layersDir(store), `${hexOf(layerId)}.ifcx`));
122
+ }
123
+ /** Resolve a full id, bare hex, or unique hex prefix to a full layer id. */
124
+ export function resolveLayerId(store, idOrPrefix) {
125
+ const hex = hexOf(idOrPrefix);
126
+ if (existsSync(join(layersDir(store), `${hex}.ifcx`)))
127
+ return `blake3:${hex}`;
128
+ if (!existsSync(layersDir(store))) {
129
+ throw new Error(`No layer "${idOrPrefix}" — store ${store.dir} has no layers`);
130
+ }
131
+ const matches = readdirSync(layersDir(store)).filter((f) => f.endsWith('.ifcx') && f.startsWith(hex));
132
+ if (matches.length === 1)
133
+ return `blake3:${matches[0].slice(0, -'.ifcx'.length)}`;
134
+ if (matches.length === 0)
135
+ throw new Error(`No layer "${idOrPrefix}" in store ${store.dir}`);
136
+ throw new Error(`Layer id prefix "${idOrPrefix}" is ambiguous (${matches.length} matches)`);
137
+ }
138
+ export function loadLayer(store, layerId) {
139
+ const id = resolveLayerId(store, layerId);
140
+ const file = parseIfcxJson(readFileSync(join(layersDir(store), `${hexOf(id)}.ifcx`), 'utf-8'), `layer ${id}`);
141
+ // Content addressing is only protection if it is checked: a layer file
142
+ // edited or bit-rotted on disk must fail loudly here, not compose
143
+ // silently into refs and merges.
144
+ const actual = computeLayerId(file);
145
+ if (actual !== id) {
146
+ throw new Error(`Layer ${id} failed integrity verification — its content hashes to ${actual}. ` +
147
+ `The file in ${layersDir(store)} was modified or corrupted after publishing.`);
148
+ }
149
+ return file;
150
+ }
151
+ /** Load a ref's layer documents, ordered weakest first. */
152
+ export function loadRefLayers(store, name) {
153
+ return requireRef(store, name).layers.map((id) => loadLayer(store, id));
154
+ }
155
+ // ---------------------------------------------------------------------------
156
+ // evidence/<hex> — check-evidence bytes (08-review.md §8.4)
157
+ // ---------------------------------------------------------------------------
158
+ function evidenceDir(store) {
159
+ return join(store.dir, 'evidence');
160
+ }
161
+ /**
162
+ * Content-address check evidence (an IDS spec or report) so `layer push`
163
+ * can later upload the bytes a manifest's `specDigest`/`report` name.
164
+ * Returns the `blake3:<hex>` digest — the same value the manifest carries.
165
+ */
166
+ export function storeEvidence(store, content) {
167
+ const digest = blake3Digest(content);
168
+ mkdirSync(evidenceDir(store), { recursive: true });
169
+ writeFileAtomic(join(evidenceDir(store), hexOf(digest)), content);
170
+ return digest;
171
+ }
172
+ export function loadEvidence(store, digest) {
173
+ // Digests come from provenance manifests, i.e. FOREIGN data: a crafted
174
+ // check entry like `report: "../../.env"` must not become a path under
175
+ // the evidence dir (layer push would read and upload the file). Only the
176
+ // exact content-address shape ever reaches the filesystem.
177
+ const hex = hexOf(digest);
178
+ if (!/^[0-9a-f]{64}$/.test(hex))
179
+ return undefined;
180
+ const file = join(evidenceDir(store), hex);
181
+ if (!existsSync(file))
182
+ return undefined;
183
+ return readFileSync(file, 'utf-8');
184
+ }
185
+ // ---------------------------------------------------------------------------
186
+ // draft.json
187
+ // ---------------------------------------------------------------------------
188
+ export function readDraft(store) {
189
+ if (!existsSync(draftPath(store)))
190
+ return undefined;
191
+ const parsed = JSON.parse(readFileSync(draftPath(store), 'utf-8'));
192
+ if (typeof parsed !== 'object' || parsed === null) {
193
+ throw new Error(`Corrupt draft.json at ${draftPath(store)}`);
194
+ }
195
+ return parsed;
196
+ }
197
+ export function writeDraft(store, draft) {
198
+ mkdirSync(store.dir, { recursive: true });
199
+ writeFileAtomic(draftPath(store), `${JSON.stringify(draft, null, 2)}\n`);
200
+ }
201
+ export function deleteDraft(store) {
202
+ if (existsSync(draftPath(store)))
203
+ rmSync(draftPath(store));
204
+ }
205
+ // ---------------------------------------------------------------------------
206
+ // IFCX file helpers + side resolution
207
+ // ---------------------------------------------------------------------------
208
+ export function parseIfcxJson(text, label) {
209
+ let parsed;
210
+ try {
211
+ parsed = JSON.parse(text);
212
+ }
213
+ catch (err) {
214
+ throw new Error(`Invalid IFCX (${label}): ${err instanceof Error ? err.message : String(err)}`);
215
+ }
216
+ const file = parsed;
217
+ if (typeof file !== 'object' || file === null || typeof file.header !== 'object' || !Array.isArray(file.data)) {
218
+ throw new Error(`Invalid IFCX (${label}): expected { header, imports, schemas, data }`);
219
+ }
220
+ return {
221
+ header: file.header,
222
+ imports: Array.isArray(file.imports) ? file.imports : [],
223
+ schemas: typeof file.schemas === 'object' && file.schemas !== null ? file.schemas : {},
224
+ data: file.data,
225
+ };
226
+ }
227
+ export function readIfcxFile(path) {
228
+ return parseIfcxJson(readFileSync(path, 'utf-8'), path);
229
+ }
230
+ /**
231
+ * Resolve a `<layer-id|ref|file.ifcx>` argument to an ordered layer list:
232
+ * refs win over layer ids, layer ids over file paths.
233
+ */
234
+ export function resolveSide(store, spec) {
235
+ if (getRef(store, spec)) {
236
+ return { kind: 'ref', layers: loadRefLayers(store, spec), label: `ref ${spec}` };
237
+ }
238
+ if (spec.startsWith('blake3:') || hasLayer(store, spec)) {
239
+ const id = resolveLayerId(store, spec);
240
+ return { kind: 'layer', layers: [loadLayer(store, id)], label: id };
241
+ }
242
+ if (existsSync(spec)) {
243
+ return { kind: 'file', layers: [readIfcxFile(spec)], label: spec };
244
+ }
245
+ // Last chance: maybe it is a layer-id prefix.
246
+ const id = resolveLayerId(store, spec);
247
+ return { kind: 'layer', layers: [loadLayer(store, id)], label: id };
248
+ }
249
+ /** Short display form of a `blake3:<hex>` id. */
250
+ export function shortId(layerId) {
251
+ return hexOf(layerId).slice(0, 12);
252
+ }
253
+ /** Default principal for provenance authorship. */
254
+ export function defaultPrincipal() {
255
+ return process.env.USER ?? process.env.USERNAME ?? 'unknown';
256
+ }
257
+ //# sourceMappingURL=layer-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-store.js","sourceRoot":"","sources":["../../src/commands/layer-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { IfcxFile, IfcxNode } from '@ifc-lite/ifcx';
2
+ import { type LayerStore } from './layer-store.js';
3
+ export declare const FIRE = "bsi::ifc::v5a::Pset_FireSafety::FireRating";
4
+ export declare const CLASS = "bsi::ifc::class";
5
+ export declare function tmpStore(): LayerStore;
6
+ export declare function makeDelta(nodes: IfcxNode[]): IfcxFile;
7
+ export declare const baseNodes: IfcxNode[];
8
+ /** Publish a base layer and point a fresh ref `main` at it. */
9
+ export declare function setupMain(store: LayerStore): string;
10
+ //# sourceMappingURL=layer-test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-test-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/layer-test-helpers.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9D,eAAO,MAAM,IAAI,+CAA+C,CAAC;AACjE,eAAO,MAAM,KAAK,oBAAoB,CAAC;AAEvC,wBAAgB,QAAQ,IAAI,UAAU,CAErC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAarD;AAED,eAAO,MAAM,SAAS,EAAE,QAAQ,EAM/B,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAUnD"}
@@ -0,0 +1,49 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /** Shared fixtures for the `layer` / `ref` command test suites. */
5
+ import { mkdtempSync } from 'node:fs';
6
+ import { tmpdir } from 'node:os';
7
+ import { join } from 'node:path';
8
+ import { openStore } from './layer-store.js';
9
+ import { publishLayer } from './layer-publish.js';
10
+ import { createRef, moveRef } from './ref.js';
11
+ export const FIRE = 'bsi::ifc::v5a::Pset_FireSafety::FireRating';
12
+ export const CLASS = 'bsi::ifc::class';
13
+ export function tmpStore() {
14
+ return openStore(mkdtempSync(join(tmpdir(), 'ifc-lite-layer-test-')));
15
+ }
16
+ export function makeDelta(nodes) {
17
+ return {
18
+ header: {
19
+ id: '',
20
+ ifcxVersion: 'ifcx_alpha',
21
+ dataVersion: '1.0.0',
22
+ author: 'test',
23
+ timestamp: '2026-01-01T00:00:00.000Z',
24
+ },
25
+ imports: [],
26
+ schemas: {},
27
+ data: nodes,
28
+ };
29
+ }
30
+ export const baseNodes = [
31
+ { path: 'storey-eg', children: { Wall: 'wall-1' } },
32
+ {
33
+ path: 'wall-1',
34
+ attributes: { [CLASS]: { code: 'IfcWall', uri: 'u' }, [FIRE]: 'REI60' },
35
+ },
36
+ ];
37
+ /** Publish a base layer and point a fresh ref `main` at it. */
38
+ export function setupMain(store) {
39
+ const published = publishLayer(store, {
40
+ delta: makeDelta(baseNodes),
41
+ baseRef: null,
42
+ intent: 'Import base model',
43
+ principal: 'alice',
44
+ });
45
+ createRef(store, 'main');
46
+ moveRef(store, 'main', published.layerId);
47
+ return published.layerId;
48
+ }
49
+ //# sourceMappingURL=layer-test-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-test-helpers.js","sourceRoot":"","sources":["../../src/commands/layer-test-helpers.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,mEAAmE;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,CAAC,MAAM,IAAI,GAAG,4CAA4C,CAAC;AACjE,MAAM,CAAC,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAEvC,MAAM,UAAU,QAAQ;IACtB,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAiB;IACzC,OAAO;QACL,MAAM,EAAE;YACN,EAAE,EAAE,EAAE;YACN,WAAW,EAAE,YAAY;YACzB,WAAW,EAAE,OAAO;YACpB,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,0BAA0B;SACtC;QACD,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,KAAK;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IACnD;QACE,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE;KACxE;CACF,CAAC;AAEF,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,KAAiB;IACzC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE;QACpC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC;QAC3B,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,mBAAmB;QAC3B,SAAS,EAAE,OAAO;KACnB,CAAC,CAAC;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,SAAS,CAAC,OAAO,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function layerCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../../src/commands/layer.ts"],"names":[],"mappings":"AA+BA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ChE"}
@@ -0,0 +1,109 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * `ifc-lite layer` — layered change tracking over a local layer store
6
+ * (`.ifc-lite/` of the cwd, override with --store <dir>).
7
+ *
8
+ * Publish content-addressed layers with provenance manifests, diff
9
+ * composed states, merge candidates into refs (with three-way planning
10
+ * and ref policy), and derive log/bake/revert/rebase from the same
11
+ * state-based op model.
12
+ *
13
+ * Spec: docs/architecture/layer-prs/09-cli.md.
14
+ */
15
+ import { layerCreateCommand, layerPublishCommand, layerStatusCommand, } from './layer-publish.js';
16
+ import { layerDiffCommand } from './layer-diff.js';
17
+ import { layerMergeCommand } from './layer-merge.js';
18
+ import { layerPushCommand } from './layer-push.js';
19
+ import { layerBakeCommand, layerLogCommand, layerRebaseCommand, layerRevertCommand, } from './layer-history.js';
20
+ export async function layerCommand(args) {
21
+ const sub = args[0];
22
+ if (!sub || sub === '--help' || sub === '-h') {
23
+ printUsage();
24
+ return;
25
+ }
26
+ const rest = args.slice(1);
27
+ switch (sub) {
28
+ case 'publish':
29
+ await layerPublishCommand(rest);
30
+ return;
31
+ case 'create':
32
+ await layerCreateCommand(rest);
33
+ return;
34
+ case 'status':
35
+ await layerStatusCommand(rest);
36
+ return;
37
+ case 'diff':
38
+ await layerDiffCommand(rest);
39
+ return;
40
+ case 'merge':
41
+ await layerMergeCommand(rest);
42
+ return;
43
+ case 'push':
44
+ await layerPushCommand(rest);
45
+ return;
46
+ case 'log':
47
+ await layerLogCommand(rest);
48
+ return;
49
+ case 'bake':
50
+ await layerBakeCommand(rest);
51
+ return;
52
+ case 'revert':
53
+ await layerRevertCommand(rest);
54
+ return;
55
+ case 'rebase':
56
+ await layerRebaseCommand(rest);
57
+ return;
58
+ default:
59
+ process.stderr.write(`Unknown layer subcommand: ${sub}\n`);
60
+ printUsage();
61
+ process.exit(1);
62
+ }
63
+ }
64
+ function printUsage() {
65
+ process.stdout.write(`Usage: ifc-lite layer <command> [...args]
66
+
67
+ Commands:
68
+ publish <delta.ifcx> Publish a delta as a content-addressed layer.
69
+ Flags: --base <ref|->, --intent "<text>",
70
+ --scope <claim> (repeatable),
71
+ --principal <id>, --kind human|agent|hybrid,
72
+ --strict-scope (exit 4 on scope mismatch),
73
+ --json
74
+ Defaults --base/--intent/--scope from draft.json.
75
+ create Record a draft descriptor (.ifc-lite/draft.json).
76
+ Flags: --base <ref>, --intent "<text>",
77
+ --scope <claim> (repeatable)
78
+ status Show the draft and whether its base ref moved.
79
+ diff <side> Diff composed states; a side is a ref, layer id,
80
+ or .ifcx file.
81
+ Flags: --against <side>, --components, --json
82
+ merge <layer-id> Merge a candidate into a ref (fast-forward or
83
+ three-way plan).
84
+ Flags: --into <ref>, --preview,
85
+ --resolve ours|theirs,
86
+ --waive <spec> --reason "<text>",
87
+ --approved-by <principal>, --json
88
+ push <ref|layer-id> Upload a ref's stack (or one layer) plus its
89
+ check evidence to a layer registry.
90
+ Flags: --registry <url>, --token <bearer>,
91
+ --set-ref (move the remote ref; exit 3 on
92
+ protected refs), --json
93
+ log <ref> Provenance log, newest first. Flags: --json
94
+ bake <ref> -o <out> Materialize a tombstone-free flat document.
95
+ revert <layer-id> Publish an inverse layer and append it to a ref.
96
+ Conflicts (exit 2) when later layers touched the
97
+ same components.
98
+ Flags: --in <ref>, --resolve ours|theirs, --json
99
+ rebase <layer-id> Re-plan a candidate onto a ref's current stack
100
+ and publish the rebased layer.
101
+ Flags: --onto <ref>, --json
102
+
103
+ All commands honour --store <dir> (default: <cwd>/.ifc-lite).
104
+
105
+ Exit codes: 0 clean, 2 conflicts, 3 policy failure, 4 scope violation
106
+ (with --strict-scope), 1 generic errors.
107
+ `);
108
+ }
109
+ //# sourceMappingURL=layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer.js","sourceRoot":"","sources":["../../src/commands/layer.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;GAUG;AAEH,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7C,UAAU,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS;YACZ,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO;QACT,KAAK,MAAM;YACT,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO;QACT,KAAK,OAAO;YACV,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO;QACT,KAAK,MAAM;YACT,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO;QACT,KAAK,KAAK;YACR,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO;QACT,KAAK,MAAM;YACT,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO;QACT;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAAC;YAC3D,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CtB,CAAC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AA8BA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8I9D"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AA8BA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiJ9D"}
@@ -133,11 +133,14 @@ export async function mcpCommand(args) {
133
133
  fatal(`Refusing to bind ${resolvedHost} without --token. Pass --token <bearer> or --insecure to override.`);
134
134
  }
135
135
  const sessionFactory = {
136
- build(scopeForSession) {
136
+ build(scopeForSession, sessionId) {
137
137
  return createMCPServer({
138
138
  version: VERSION,
139
139
  registry: new InMemoryModelRegistry(),
140
140
  scope: scopeForSession,
141
+ // Keys per-session state (layer workspaces) and its disposal
142
+ // (#1030); the transport rejects servers built without it.
143
+ sessionId,
141
144
  config: { readOnly, bsddEndpoint: bsdd, samplingEnabled: false },
142
145
  });
143
146
  },
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type LayerStore, type RefEntry } from './layer-store.js';
2
+ export interface RefSummary {
3
+ name: string;
4
+ layers: string[];
5
+ stackHash: string;
6
+ policy?: RefEntry['policy'];
7
+ }
8
+ export declare function listRefs(store: LayerStore): RefSummary[];
9
+ export declare function createRef(store: LayerStore, name: string, from?: string): RefEntry;
10
+ /** Move a ref to another ref's stack or a comma-separated layer-id list. */
11
+ export declare function moveRef(store: LayerStore, name: string, to: string): RefEntry;
12
+ export declare function protectRef(store: LayerStore, name: string, options: {
13
+ requiredChecks?: string[];
14
+ requireHumanApproval?: boolean;
15
+ }): RefEntry;
16
+ export declare function refCommand(args: string[]): Promise<void>;
17
+ //# sourceMappingURL=ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../src/commands/ref.ts"],"names":[],"mappings":"AAiBA,OAAO,EAQL,KAAK,UAAU,EACf,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;CAC7B;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,CAcxD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAQlF;AAED,4EAA4E;AAC5E,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,CAc7E;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAE,GACrE,QAAQ,CAUV;AAMD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB9D"}