@ifc-lite/cli 0.38.1 → 0.39.1

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 (82) hide show
  1. package/README.md +2 -0
  2. package/dist/commands/check.d.ts.map +1 -1
  3. package/dist/commands/check.js +4 -4
  4. package/dist/commands/check.js.map +1 -1
  5. package/dist/commands/flow-ai.d.ts +20 -0
  6. package/dist/commands/flow-ai.d.ts.map +1 -0
  7. package/dist/commands/flow-ai.js +35 -0
  8. package/dist/commands/flow-ai.js.map +1 -0
  9. package/dist/commands/flow-host.d.ts +2 -1
  10. package/dist/commands/flow-host.d.ts.map +1 -1
  11. package/dist/commands/flow-host.js +7 -1
  12. package/dist/commands/flow-host.js.map +1 -1
  13. package/dist/commands/flow-review.d.ts +28 -0
  14. package/dist/commands/flow-review.d.ts.map +1 -0
  15. package/dist/commands/flow-review.js +154 -0
  16. package/dist/commands/flow-review.js.map +1 -0
  17. package/dist/commands/flow-tracking.d.ts +4 -0
  18. package/dist/commands/flow-tracking.d.ts.map +1 -1
  19. package/dist/commands/flow-tracking.js +25 -4
  20. package/dist/commands/flow-tracking.js.map +1 -1
  21. package/dist/commands/flow.d.ts.map +1 -1
  22. package/dist/commands/flow.js +126 -25
  23. package/dist/commands/flow.js.map +1 -1
  24. package/dist/commands/ids-audit-lint.d.ts +3 -0
  25. package/dist/commands/ids-audit-lint.d.ts.map +1 -0
  26. package/dist/commands/ids-audit-lint.js +129 -0
  27. package/dist/commands/ids-audit-lint.js.map +1 -0
  28. package/dist/commands/ids-diff.d.ts +2 -0
  29. package/dist/commands/ids-diff.d.ts.map +1 -0
  30. package/dist/commands/ids-diff.js +61 -0
  31. package/dist/commands/ids-diff.js.map +1 -0
  32. package/dist/commands/ids-explain.d.ts +2 -0
  33. package/dist/commands/ids-explain.d.ts.map +1 -0
  34. package/dist/commands/ids-explain.js +53 -0
  35. package/dist/commands/ids-explain.js.map +1 -0
  36. package/dist/commands/ids-fmt.d.ts +2 -0
  37. package/dist/commands/ids-fmt.d.ts.map +1 -0
  38. package/dist/commands/ids-fmt.js +54 -0
  39. package/dist/commands/ids-fmt.js.map +1 -0
  40. package/dist/commands/ids-subcommand.d.ts +31 -0
  41. package/dist/commands/ids-subcommand.d.ts.map +1 -0
  42. package/dist/commands/ids-subcommand.js +101 -0
  43. package/dist/commands/ids-subcommand.js.map +1 -0
  44. package/dist/commands/ids.d.ts.map +1 -1
  45. package/dist/commands/ids.js +25 -2
  46. package/dist/commands/ids.js.map +1 -1
  47. package/dist/commands/info.js +11 -11
  48. package/dist/commands/info.js.map +1 -1
  49. package/dist/commands/semantic-file.d.ts +2 -0
  50. package/dist/commands/semantic-file.d.ts.map +1 -0
  51. package/dist/commands/semantic-file.js +24 -0
  52. package/dist/commands/semantic-file.js.map +1 -0
  53. package/dist/commands/semantic-serve.d.ts +2 -0
  54. package/dist/commands/semantic-serve.d.ts.map +1 -0
  55. package/dist/commands/semantic-serve.js +48 -0
  56. package/dist/commands/semantic-serve.js.map +1 -0
  57. package/dist/commands/semantic.d.ts +3 -0
  58. package/dist/commands/semantic.d.ts.map +1 -0
  59. package/dist/commands/semantic.js +130 -0
  60. package/dist/commands/semantic.js.map +1 -0
  61. package/dist/geometry-report.d.ts.map +1 -1
  62. package/dist/geometry-report.js +2 -1
  63. package/dist/geometry-report.js.map +1 -1
  64. package/dist/headless-backend-store-authoring.d.ts +4 -4
  65. package/dist/headless-backend-store-authoring.d.ts.map +1 -1
  66. package/dist/headless-backend-store-authoring.js +7 -5
  67. package/dist/headless-backend-store-authoring.js.map +1 -1
  68. package/dist/headless-backend.d.ts.map +1 -1
  69. package/dist/headless-backend.js +1 -57
  70. package/dist/headless-backend.js.map +1 -1
  71. package/dist/help.d.ts.map +1 -1
  72. package/dist/help.js +13 -2
  73. package/dist/help.js.map +1 -1
  74. package/dist/index.js +4 -0
  75. package/dist/index.js.map +1 -1
  76. package/dist/out-flag-commands.js +1 -1
  77. package/dist/out-flag-commands.js.map +1 -1
  78. package/dist/output.d.ts +11 -0
  79. package/dist/output.d.ts.map +1 -1
  80. package/dist/output.js +13 -0
  81. package/dist/output.js.map +1 -1
  82. package/package.json +26 -23
@@ -8,10 +8,17 @@
8
8
  * flow run <graph.flow.json> <model.ifc> [--input k=v]... [--out F] [--tracking F|--no-tracking] [--json]
9
9
  * flow describe <graph.flow.json> [--json] inputs/outputs schema (the Hops `/io`)
10
10
  * flow validate <graph.flow.json> [--json] document + node availability report
11
+ * flow review <checkpoint.json> [--approve D | --reject] review a paused run (see `flow-review.ts`)
12
+ * flow resume <graph.flow.json> <model.ifc> --checkpoint F resume a reviewed run
13
+ *
14
+ * AI nodes (`@ifc-lite/flow-nodes/ai`) run only when the environment names a
15
+ * provider (`flow-ai.ts`), spend one root budget per run (`--ai-max-requests`,
16
+ * `--ai-max-output-tokens`), and pause the run for review: `run` then needs
17
+ * `--checkpoint F` and exits 3.
11
18
  *
12
19
  * The CLI is a trusted caller running a local file, so no capability grants
13
20
  * are applied to model/viewer/export capabilities; the graph's declared
14
- * `capabilities` are still reported. `network.fetch:<host>` and
21
+ * `capabilities` are still reported. `network.ai`, `network.fetch:<host>` and
15
22
  * `secret.read:<NAME>` are the exception: they are ALWAYS checked against
16
23
  * the graph's own declared capabilities regardless of trust level (see
17
24
  * `FlowHost.networkGrants`'s doc comment in `@ifc-lite/flow-nodes`) — a
@@ -34,14 +41,36 @@
34
41
  */
35
42
  import { createHash } from 'node:crypto';
36
43
  import { readFile, stat, writeFile } from 'node:fs/promises';
37
- import { checkAvailability, declaredInputKeys, describeFlowIO, parseFlowDocument, resolveDeclaredParam, runFlow, validateFlowWiring, } from '@ifc-lite/flow';
44
+ import { checkAvailability, declaredInputKeys, describeFlowIO, parseFlowDocument, resolveDeclaredParam, runFlow, validateFlowWiring } from '@ifc-lite/flow';
45
+ import { resumeOutputs } from '@ifc-lite/flow/checkpoint';
38
46
  import { parseCapabilities } from '@ifc-lite/extensions';
39
47
  import { buildRedactionMap, createStandardRegistry, headlessFeatures, interpolateSecrets, redactDeep, resolveSecretValues, usableSecretNames, validateSecretReferences, } from '@ifc-lite/flow-nodes';
48
+ import { aiNodes, AI_FEATURE, FLOW_AI_BUDGET } from '@ifc-lite/flow-nodes/ai';
49
+ import { createRootBudget, restoreRootBudget } from '@ifc-lite/ai';
40
50
  import { createHeadlessContext } from '../loader.js';
51
+ import { createCliAiService } from './flow-ai.js';
52
+ import { flowAiConfig } from '@ifc-lite/ai/chat-completions';
53
+ import { sourceDigestOf } from '@ifc-lite/flow/checkpoint-file';
54
+ import { checkDistinctDestinations, checkPauseDestination, checkpointNodes, claimForResume, failResume, finishResume, PAUSED_FOR_REVIEW, preparePause, reportPause, reviewCommand, savePause } from './flow-review.js';
41
55
  import { createCliFlowSession } from './flow-host.js';
42
56
  import { fatal, getAllFlags, hasFlag, printJson } from '../output.js';
43
57
  import { defaultTrackingPath, FileTrackingStore } from './flow-tracking.js';
44
- const USAGE = 'Usage: ifc-lite flow <run|describe|validate> <graph.flow.json> [<model.ifc>] [--input k=v]... [--out F] [--tracking F | --no-tracking] [--json]';
58
+ const USAGE = 'Usage: ifc-lite flow <run|resume|describe|validate|review> <graph.flow.json> [<model.ifc>] [--input k=v]... [--out F] [--tracking F | --no-tracking] [--checkpoint F] [--json]';
59
+ /** The standard nodes plus the AI nodes, so an AI graph reports what it lacks instead of an unknown type. */
60
+ function cliRegistry() {
61
+ return createStandardRegistry().registerAll(aiNodes);
62
+ }
63
+ function cliFeatures() {
64
+ const features = headlessFeatures(usableSecretNames(process.env));
65
+ return flowAiConfig(process.env) ? { ...features, backend: new Set([...features.backend, AI_FEATURE]) } : features;
66
+ }
67
+ function budgetLimit(args, flag, fallback) {
68
+ const raw = requireFlagValue(args, flag);
69
+ const value = raw === undefined ? fallback : Number(raw);
70
+ if (!Number.isSafeInteger(value) || value < 1)
71
+ fatal(`${flag} must be a positive whole number`);
72
+ return value;
73
+ }
45
74
  async function loadDocument(path) {
46
75
  if (!path)
47
76
  fatal(USAGE);
@@ -59,7 +88,7 @@ async function loadDocument(path) {
59
88
  fatal(err.message);
60
89
  }
61
90
  }
62
- const VALUE_FLAGS = new Set(['--input', '--out', '--tracking']);
91
+ const VALUE_FLAGS = new Set(['--input', '--out', '--tracking', '--checkpoint', '--next-checkpoint', '--approve', '--ai-max-requests', '--ai-max-output-tokens']);
63
92
  /** Arguments that are neither flags nor the value of a value-taking flag. */
64
93
  function positionalArgs(args) {
65
94
  const out = [];
@@ -132,7 +161,9 @@ export async function flowCommand(args) {
132
161
  const sub = args[0];
133
162
  const positional = positionalArgs(args.slice(1));
134
163
  const json = hasFlag(args, '--json');
135
- const registry = createStandardRegistry();
164
+ const registry = cliRegistry();
165
+ if (sub === 'review')
166
+ return reviewCommand(args, positional[0], json, requireFlagValue(args, '--approve'));
136
167
  if (sub === 'describe') {
137
168
  const doc = await loadDocument(positional[0]);
138
169
  const info = describeFlowIO(doc, registry);
@@ -155,7 +186,7 @@ export async function flowCommand(args) {
155
186
  // output naming a port no node has would otherwise validate clean and
156
187
  // then produce nothing at run time.
157
188
  const wiring = validateFlowWiring(doc, registry);
158
- const availability = checkAvailability(doc, registry, headlessFeatures(usableSecretNames(process.env)));
189
+ const availability = checkAvailability(doc, registry, cliFeatures());
159
190
  const problems = availability.filter((a) => a.status === 'unavailable' || a.status === 'unknown');
160
191
  // The report goes out in either format FIRST, then the exit code — a
161
192
  // `--json` run that printed `ok: false` and returned 0 let CI read an
@@ -177,12 +208,20 @@ export async function flowCommand(args) {
177
208
  }
178
209
  return;
179
210
  }
180
- if (sub !== 'run')
211
+ if (sub !== 'run' && sub !== 'resume')
181
212
  fatal(USAGE);
182
213
  const [graphPath, modelPath] = positional;
183
214
  if (!modelPath)
184
215
  fatal(USAGE);
185
216
  const doc = await loadDocument(graphPath);
217
+ const checkpointPath = requireFlagValue(args, '--checkpoint');
218
+ // Refuse malformed arguments before consuming a reviewed checkpoint.
219
+ const out = requireFlagValue(args, '--out');
220
+ const trackingPath = requireFlagValue(args, '--tracking') ?? defaultTrackingPath(graphPath);
221
+ const requestedBudget = { maxRequests: budgetLimit(args, '--ai-max-requests', FLOW_AI_BUDGET.maxRequests),
222
+ maxOutputTokens: budgetLimit(args, '--ai-max-output-tokens', FLOW_AI_BUDGET.maxOutputTokens) };
223
+ if (sub === 'resume' && !checkpointPath)
224
+ fatal('flow resume needs --checkpoint <file>');
186
225
  // Capabilities first: `declaredSecrets` reads the all-or-nothing parse, so
187
226
  // with one malformed capability every secret would be reported undeclared
188
227
  // instead of the malformed capability itself (#5446 review).
@@ -198,46 +237,104 @@ export async function flowCommand(args) {
198
237
  process.stderr.write(` error secrets: ${e.message}\n`);
199
238
  fatal(`${secretErrors.length} secret reference problem(s); see above`);
200
239
  }
240
+ const inputs = parseInputs(getAllFlags(args, '--input'), doc, registry);
241
+ // A resume's restored nodes are not executed again, so they need no host
242
+ // service: replaying a reviewed AI proposal needs no provider.
243
+ const restored = new Set(sub === 'resume' ? await checkpointNodes(checkpointPath) : []);
244
+ const unavailable = checkAvailability(doc, registry, cliFeatures())
245
+ .filter((node) => !restored.has(node.nodeId) && (node.status === 'unknown' || node.status === 'unavailable'));
246
+ if (unavailable.length)
247
+ fatal(`Flow cannot run on this host: ${unavailable.map((node) => `${node.nodeId}: ${node.reasons.join('; ')}`).join(' | ')}`);
248
+ const reviewsAhead = doc.nodes.some((n) => registry.get(n.type)?.review && !restored.has(n.id));
249
+ const nextCheckpoint = sub === 'resume' ? requireFlagValue(args, '--next-checkpoint') : checkpointPath;
250
+ if (reviewsAhead && !nextCheckpoint) {
251
+ fatal(sub === 'resume' ? 'this graph pauses for review again after the checkpoint; pass --next-checkpoint <file>' : 'this graph pauses for review; pass --checkpoint <file> to save the proposal');
252
+ }
253
+ if (reviewsAhead && nextCheckpoint) {
254
+ try {
255
+ await checkPauseDestination(nextCheckpoint);
256
+ }
257
+ catch (error) {
258
+ fatal(error.message);
259
+ }
260
+ }
261
+ const destinations = [checkpointPath, sub === 'resume' ? nextCheckpoint : undefined, out, hasFlag(args, '--no-tracking') ? undefined : trackingPath].filter((path) => path !== undefined);
262
+ try {
263
+ await checkDistinctDestinations(destinations);
264
+ }
265
+ catch (error) {
266
+ fatal(error.message);
267
+ }
201
268
  const secretValues = resolveSecretValues(doc, process.env);
202
269
  const redaction = buildRedactionMap(secretValues);
203
270
  const runDoc = interpolateSecrets(doc, secretValues);
204
- // The host follows the model the graph works on: `model.openFromSource`
205
- // can replace the command-line model mid-run (see `flow-host.ts`).
206
- const session = createCliFlowSession(await createHeadlessContext(modelPath), capsResult.value);
207
- const host = session.host;
271
+ const modelBytes = await readFile(modelPath);
208
272
  let tracking;
209
- const trackingPath = requireFlagValue(args, '--tracking') ?? defaultTrackingPath(graphPath);
210
273
  // An existing sidecar is opened even when no node is tracked any more:
211
274
  // that is how a set whose node was deleted gets removed from the model.
212
275
  const wantsTracking = doc.nodes.some((n) => registry.get(n.type)?.tracked) || (await stat(trackingPath).then(() => true, () => false));
213
276
  if (!hasFlag(args, '--no-tracking') && wantsTracking) {
214
- const pin = `file:${createHash('sha256').update(await readFile(modelPath)).digest('hex')}`;
277
+ const pin = `file:${createHash('sha256').update(modelBytes).digest('hex')}`;
215
278
  tracking = await FileTrackingStore.open(trackingPath, pin);
216
279
  if (tracking.loadedPin !== undefined && tracking.loadedPin !== pin) {
217
280
  process.stderr.write(` warn tracking sidecar ${tracking.path} was written against another model state; tracked elements that are missing will be re-created\n`);
218
281
  }
219
282
  }
283
+ // Bind approval to the exact execution graph, including resolved secret parameters.
284
+ const aiAhead = doc.nodes.some(n => !restored.has(n.id) && registry.get(n.type)?.requires?.backend?.includes(AI_FEATURE));
285
+ const resume = sub === 'resume' ? await claimForResume(checkpointPath, runDoc, inputs, sourceDigestOf(modelBytes, tracking?.fingerprint()), registry, aiAhead) : undefined;
286
+ // The host follows the model the graph works on: `model.openFromSource`
287
+ // can replace the command-line model mid-run (see `flow-host.ts`).
288
+ const aiConfig = flowAiConfig(process.env);
289
+ const budget = restoreRootBudget(resume?.checkpoint.budget) ?? createRootBudget(requestedBudget);
290
+ const initialModel = await createHeadlessContext(modelPath);
291
+ const session = createCliFlowSession(initialModel, capsResult.value, aiConfig ? createCliAiService(aiConfig, budget) : undefined);
292
+ const host = session.host;
220
293
  const result = await runFlow(runDoc, {
221
294
  host,
222
295
  registry,
223
296
  // `--input` overrides are NOT scanned for `{{secret:NAME}}` — a secret
224
297
  // must be authored into the graph's own node params, not passed at the
225
298
  // command line, where it would land in shell history / process args.
226
- inputs: parseInputs(getAllFlags(args, '--input'), doc, registry),
227
- features: headlessFeatures(usableSecretNames(process.env)),
299
+ inputs,
300
+ features: cliFeatures(),
301
+ ...(resume ? { resume: resumeOutputs(resume.checkpoint) } : {}),
228
302
  modelRevisions: { [host.defaultModelId ?? 'model']: 0 },
229
303
  tracking,
230
304
  });
231
- const trackingWritten = tracking ? await tracking.flush() : false;
232
- // A failed run can still have written through earlier nodes. Exporting
233
- // that half-applied state would hand the next step a model no graph run
234
- // ever produced, under a green-looking file on disk.
235
- const out = requireFlagValue(args, '--out');
305
+ const paused = result.ok && result.review.length > 0;
306
+ const activeModelChanged = session.active() !== initialModel;
236
307
  const wrote = out !== undefined && result.ok;
237
- if (wrote) {
238
- const { bim, store } = session.active();
239
- const content = bim.export.ifc(null, { schema: store.schemaVersion ?? 'IFC4', includeMutations: true });
240
- await writeFile(out, typeof content === 'string' ? content : Buffer.from(content));
308
+ let trackingWritten = false;
309
+ let pause;
310
+ try {
311
+ if (paused && activeModelChanged && out === undefined)
312
+ throw new Error('the run opened a different model before pausing for review; pass --out so the resume starts from that model');
313
+ if (paused && result.writes > 0 && out === undefined)
314
+ throw new Error('the run wrote to the model before pausing for review; pass --out so the resume can start from that model');
315
+ if (paused && !nextCheckpoint)
316
+ throw new Error(`the run paused for review at ${result.review.join(', ')} with no checkpoint file to save it to`);
317
+ let written;
318
+ if (wrote) {
319
+ const { bim, store } = session.active();
320
+ const content = bim.export.ifc(null, { schema: store.schemaVersion ?? 'IFC4', includeMutations: true });
321
+ written = typeof content === 'string' ? content : Buffer.from(content);
322
+ }
323
+ // Refuse secrets in every restored output before either durable side effect.
324
+ const proposal = paused ? preparePause({ registry, doc: runDoc, result, inputs, sourceDigest: sourceDigestOf(written ?? modelBytes, tracking?.fingerprint()), budget: { ...budget } }, redaction) : undefined;
325
+ if (written !== undefined)
326
+ await writeFile(out, written);
327
+ trackingWritten = tracking ? await tracking.flush() : false;
328
+ if (proposal)
329
+ pause = await savePause(nextCheckpoint, proposal);
330
+ if (resume)
331
+ await finishResume(resume, result);
332
+ }
333
+ catch (error) {
334
+ const message = redactDeep(error.message, redaction);
335
+ if (resume)
336
+ await failResume(resume, message);
337
+ fatal(message);
241
338
  }
242
339
  // Redaction runs at the OUTER boundary, right before anything leaves this
243
340
  // process — on the whole summary object (`--json` output included), not
@@ -246,8 +343,10 @@ export async function flowCommand(args) {
246
343
  // caught here too, not only at the point it was substituted in.
247
344
  const summary = redactDeep(summarize(result), redaction);
248
345
  if (json)
249
- printJson({ ...summary, out: wrote ? out : null, tracking: trackingWritten ? tracking.path : null });
346
+ printJson({ ...summary, out: wrote ? out : null, tracking: trackingWritten ? tracking.path : null, ...(pause ? { checkpoint: { path: nextCheckpoint, id: pause.id, proposalDigest: pause.proposalDigest } } : {}) });
250
347
  else {
348
+ if (pause)
349
+ reportPause(pause, nextCheckpoint);
251
350
  process.stdout.write(`${result.ok ? 'ok' : 'FAILED'}: ${Object.entries(summary.nodes).map(([k, v]) => `${v} ${k}`).join(', ')}\n`);
252
351
  // `summary` was already redacted (deep) above; `redactDeep` walks Maps
253
352
  // too, so `o.data` here never carries a raw secret value.
@@ -269,5 +368,7 @@ export async function flowCommand(args) {
269
368
  }
270
369
  if (!result.ok)
271
370
  process.exit(1);
371
+ if (pause)
372
+ process.exit(PAUSED_FOR_REVIEW);
272
373
  }
273
374
  //# sourceMappingURL=flow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/commands/flow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/commands/flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function idsAuditCommand(args: string[]): Promise<void>;
2
+ export declare function idsLintCommand(args: string[]): Promise<void>;
3
+ //# sourceMappingURL=ids-audit-lint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-audit-lint.d.ts","sourceRoot":"","sources":["../../src/commands/ids-audit-lint.ts"],"names":[],"mappings":"AA+CA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBnE;AA4DD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqClE"}
@@ -0,0 +1,129 @@
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 ids audit <rules.ids> [--json]
6
+ * ifc-lite ids lint <rules.ids> [--json] [--rules C,…] [--severity C=level,…] [--fail-on error|warning|info|never]
7
+ *
8
+ * `audit` answers "is this a valid IDS 1.0 file?" (`@ifc-lite/ids`
9
+ * `auditIDSDocument`). `lint` answers "does it mean what the author
10
+ * intends?" (`@ifc-lite/ids-authoring`'s rule catalogue, the same engine
11
+ * the Studio runs). Exit codes: see `ids-subcommand.ts`.
12
+ */
13
+ import { auditIDSDocument } from '@ifc-lite/ids';
14
+ import { createLintContext, lintDocument, LINT_RULES, nodePath, studioDocumentFromIds, } from '@ifc-lite/ids-authoring';
15
+ import { printJson } from '../output.js';
16
+ import { countLine, EXIT_CLEAN, EXIT_FINDINGS, IdsUsageError, positionals, readIds, readText, rejectUnknownFlags, runIdsSubcommand, tally, } from './ids-subcommand.js';
17
+ const AUDIT_FLAGS = new Set(['--json']);
18
+ function auditLine(issue) {
19
+ const path = issue.path || '(document)';
20
+ const where = issue.line !== undefined ? `${path} (line ${issue.line})` : path;
21
+ return ` ${issue.severity.padEnd(8)}${issue.code.padEnd(36)}${where}\n ${issue.message}\n`;
22
+ }
23
+ export async function idsAuditCommand(args) {
24
+ await runIdsSubcommand(async () => {
25
+ rejectUnknownFlags(args, AUDIT_FLAGS, new Set());
26
+ const [file, extra] = positionals(args, new Set());
27
+ if (!file || extra)
28
+ throw new IdsUsageError('usage: ifc-lite ids audit <rules.ids> [--json]');
29
+ const report = await auditIDSDocument(await readText(file));
30
+ const counts = tally(report.issues);
31
+ const exit = counts.error > 0 ? EXIT_FINDINGS : EXIT_CLEAN;
32
+ if (args.includes('--json')) {
33
+ printJson({ file, status: report.status, counts, issues: report.issues });
34
+ return exit;
35
+ }
36
+ process.stdout.write(`\n IDS audit: ${file}\n\n`);
37
+ for (const issue of report.issues)
38
+ process.stdout.write(auditLine(issue));
39
+ if (report.issues.length > 0)
40
+ process.stdout.write('\n');
41
+ process.stdout.write(` ${countLine(counts)}\n Result: ${exit === EXIT_CLEAN ? 'PASS' : 'FAIL'}\n\n`);
42
+ return exit;
43
+ });
44
+ }
45
+ const LINT_FLAGS = new Set(['--json']);
46
+ const LINT_VALUE_FLAGS = new Set(['--rules', '--severity', '--fail-on', '--model']);
47
+ const SEVERITIES = ['error', 'warning', 'info'];
48
+ const RANK = { error: 0, warning: 1, info: 2 };
49
+ function knownCode(code) {
50
+ if (!LINT_RULES.some((r) => r.code === code))
51
+ throw new IdsUsageError(`unknown lint rule ${code}`);
52
+ return code;
53
+ }
54
+ /** `--severity IDSL-ENT-002=error,IDSL-SPEC-008=off` */
55
+ function parseSeverity(raw) {
56
+ if (raw === undefined)
57
+ return undefined;
58
+ const out = {};
59
+ for (const part of raw.split(',')) {
60
+ const [code, level] = part.split('=');
61
+ if (!level || !(level === 'off' || SEVERITIES.includes(level))) {
62
+ throw new IdsUsageError(`--severity expects CODE=error|warning|info|off, got "${part}"`);
63
+ }
64
+ out[knownCode(code)] = level;
65
+ }
66
+ return out;
67
+ }
68
+ function parseFailOn(raw) {
69
+ if (raw === undefined)
70
+ return 'error';
71
+ if (raw === 'never' || SEVERITIES.includes(raw))
72
+ return raw;
73
+ throw new IdsUsageError(`--fail-on expects error|warning|info|never, got "${raw}"`);
74
+ }
75
+ function flagValue(args, flag) {
76
+ const i = args.indexOf(flag);
77
+ return i === -1 ? undefined : args[i + 1];
78
+ }
79
+ function toRow(doc, d) {
80
+ const specIndex = d.specId ? doc.nodes.specs.findIndex((s) => s.id === d.specId) : -1;
81
+ return {
82
+ code: d.code,
83
+ severity: d.severity,
84
+ path: nodePath(doc, d.nodeId) ?? d.nodeId,
85
+ ...(specIndex >= 0 ? { spec: doc.ids.specifications[specIndex].name } : {}),
86
+ message: d.message,
87
+ fixable: (d.fixes?.length ?? 0) > 0,
88
+ docsUrl: d.docsUrl,
89
+ };
90
+ }
91
+ export async function idsLintCommand(args) {
92
+ await runIdsSubcommand(async () => {
93
+ rejectUnknownFlags(args, LINT_FLAGS, LINT_VALUE_FLAGS);
94
+ if (args.includes('--model')) {
95
+ throw new IdsUsageError('model-aware lint (--model) is not available in this build; it ships with the IDS model loop');
96
+ }
97
+ const [file, extra] = positionals(args, LINT_VALUE_FLAGS);
98
+ if (!file || extra)
99
+ throw new IdsUsageError('usage: ifc-lite ids lint <rules.ids> [--json] [--rules C,…] [--severity C=level,…] [--fail-on level]');
100
+ const rulesFlag = flagValue(args, '--rules');
101
+ const rules = rulesFlag?.split(',').map(knownCode);
102
+ const severity = parseSeverity(flagValue(args, '--severity'));
103
+ const failOn = parseFailOn(flagValue(args, '--fail-on'));
104
+ const doc = studioDocumentFromIds(await readIds(file));
105
+ const result = lintDocument(doc, await createLintContext(), { rules, severity });
106
+ const rows = result.diagnostics
107
+ .map((d) => toRow(doc, d))
108
+ .sort((a, b) => RANK[a.severity] - RANK[b.severity] || a.path.localeCompare(b.path) || a.code.localeCompare(b.code));
109
+ const counts = tally(rows);
110
+ const failing = failOn === 'never' ? false : rows.some((r) => RANK[r.severity] <= RANK[failOn]);
111
+ const exit = failing ? EXIT_FINDINGS : EXIT_CLEAN;
112
+ if (args.includes('--json')) {
113
+ printJson({ file, counts, suppressed: result.suppressed.length, diagnostics: rows });
114
+ return exit;
115
+ }
116
+ process.stdout.write(`\n IDS lint: ${file}\n\n`);
117
+ for (const r of rows) {
118
+ const spec = r.spec !== undefined ? ` "${r.spec}"` : '';
119
+ process.stdout.write(` ${r.severity.padEnd(8)}${r.code.padEnd(15)}${r.path}${spec}\n ${r.message}${r.fixable ? ' [fix available]' : ''}\n`);
120
+ }
121
+ if (rows.length > 0)
122
+ process.stdout.write('\n');
123
+ const fixable = rows.filter((r) => r.fixable).length;
124
+ const suppressed = result.suppressed.length > 0 ? `, ${result.suppressed.length} suppressed` : '';
125
+ process.stdout.write(` ${countLine(counts)} (${fixable} fixable${suppressed})\n Result: ${exit === EXIT_CLEAN ? 'PASS' : 'FAIL'}\n\n`);
126
+ return exit;
127
+ });
128
+ }
129
+ //# sourceMappingURL=ids-audit-lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-audit-lint.js","sourceRoot":"","sources":["../../src/commands/ids-audit-lint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function idsDiffCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=ids-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-diff.d.ts","sourceRoot":"","sources":["../../src/commands/ids-diff.ts"],"names":[],"mappings":"AAkCA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBlE"}
@@ -0,0 +1,61 @@
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 ids diff <before.ids> <after.ids> [--json | --md]
6
+ *
7
+ * Semantic diff of two IDS files: specifications and facets are paired by
8
+ * the re-identification cascade (identifier, then name + applicability,
9
+ * then similarity), so a renamed specification or an edited requirement
10
+ * reads as a change. Exit 1 when the documents differ (CI use), 2 when one
11
+ * cannot be read.
12
+ */
13
+ import { diffIds } from '@ifc-lite/ids-authoring';
14
+ import { printJson } from '../output.js';
15
+ import { EXIT_CLEAN, EXIT_FINDINGS, IdsUsageError, positionals, readIds, rejectUnknownFlags, runIdsSubcommand } from './ids-subcommand.js';
16
+ const DIFF_FLAGS = new Set(['--json', '--md']);
17
+ const MARK = { added: '+', removed: '-', changed: '~' };
18
+ function markdown(before, after, entries) {
19
+ const lines = [`## IDS changes: \`${before}\` → \`${after}\``, ''];
20
+ if (entries.length === 0)
21
+ return `${lines.join('\n')}No changes.\n`;
22
+ for (const change of ['added', 'removed', 'changed']) {
23
+ const group = entries.filter((e) => e.change === change);
24
+ if (group.length === 0)
25
+ continue;
26
+ lines.push(`### ${change[0].toUpperCase()}${change.slice(1)} (${group.length})`, '');
27
+ for (const e of group)
28
+ lines.push(`- ${e.text} (\`${e.path}\`)`);
29
+ lines.push('');
30
+ }
31
+ return lines.join('\n');
32
+ }
33
+ export async function idsDiffCommand(args) {
34
+ await runIdsSubcommand(async () => {
35
+ rejectUnknownFlags(args, DIFF_FLAGS, new Set());
36
+ const [before, after, extra] = positionals(args, new Set());
37
+ if (!before || !after || extra)
38
+ throw new IdsUsageError('usage: ifc-lite ids diff <before.ids> <after.ids> [--json | --md]');
39
+ if (args.includes('--json') && args.includes('--md'))
40
+ throw new IdsUsageError('--json and --md cannot be combined');
41
+ const diff = diffIds(await readIds(before), await readIds(after));
42
+ const exit = diff.identical ? EXIT_CLEAN : EXIT_FINDINGS;
43
+ if (args.includes('--json')) {
44
+ printJson({ before, after, identical: diff.identical, entries: diff.entries });
45
+ return exit;
46
+ }
47
+ if (args.includes('--md')) {
48
+ process.stdout.write(markdown(before, after, diff.entries));
49
+ return exit;
50
+ }
51
+ process.stdout.write(`\n IDS diff: ${before} → ${after}\n\n`);
52
+ for (const e of diff.entries)
53
+ process.stdout.write(` ${MARK[e.change]} ${e.text}\n ${e.path}\n`);
54
+ if (diff.entries.length > 0)
55
+ process.stdout.write('\n');
56
+ const count = diff.entries.length;
57
+ process.stdout.write(` ${count === 0 ? 'No changes' : `${count} change${count === 1 ? '' : 's'}`}\n\n`);
58
+ return exit;
59
+ });
60
+ }
61
+ //# sourceMappingURL=ids-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-diff.js","sourceRoot":"","sources":["../../src/commands/ids-diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function idsExplainCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=ids-explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-explain.d.ts","sourceRoot":"","sources":["../../src/commands/ids-explain.ts"],"names":[],"mappings":"AA4CA,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAYrE"}
@@ -0,0 +1,53 @@
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
+ import { describeFacet } from '@ifc-lite/ids-authoring';
5
+ import { EXIT_CLEAN, IdsUsageError, positionals, readIds, rejectUnknownFlags, runIdsSubcommand } from './ids-subcommand.js';
6
+ const EXPLAIN_FLAGS = new Set(['--md']);
7
+ const EXPLAIN_VALUE_FLAGS = new Set(['--lang']);
8
+ const LOCALES = ['en', 'de', 'fr'];
9
+ function cardinality(spec) {
10
+ if (spec.maxOccurs === 0)
11
+ return 'prohibited';
12
+ return (spec.minOccurs ?? 0) > 0 ? 'required' : 'optional';
13
+ }
14
+ function render(ids, locale, md) {
15
+ const out = [];
16
+ out.push(md ? `# ${ids.info.title}` : `\n ${ids.info.title}`);
17
+ if (ids.info.description)
18
+ out.push(md ? `\n${ids.info.description}` : ` ${ids.info.description}`);
19
+ for (const spec of ids.specifications) {
20
+ const head = `${spec.name} (${cardinality(spec)}, ${spec.ifcVersions.join(' ')})`;
21
+ out.push(md ? `\n## ${head}\n` : `\n ${head}`);
22
+ if (spec.description)
23
+ out.push(md ? `${spec.description}\n` : ` ${spec.description}`);
24
+ const bullet = md ? '- ' : ' - ';
25
+ out.push(md ? '**Applies to**\n' : ' Applies to:');
26
+ for (const facet of spec.applicability.facets)
27
+ out.push(`${bullet}${describeFacet(facet, 'applicability', 'required', locale)}`);
28
+ if (spec.requirements.length > 0) {
29
+ out.push(md ? '\n**Requires**\n' : ' Requires:');
30
+ for (const r of spec.requirements)
31
+ out.push(`${bullet}${describeFacet(r.facet, 'requirements', r.optionality, locale)}`);
32
+ }
33
+ if (spec.instructions)
34
+ out.push(md ? `\n> ${spec.instructions}` : ` Instructions: ${spec.instructions}`);
35
+ }
36
+ return `${out.join('\n')}\n${md ? '' : '\n'}`;
37
+ }
38
+ export async function idsExplainCommand(args) {
39
+ await runIdsSubcommand(async () => {
40
+ rejectUnknownFlags(args, EXPLAIN_FLAGS, EXPLAIN_VALUE_FLAGS);
41
+ const [file, extra] = positionals(args, EXPLAIN_VALUE_FLAGS);
42
+ if (!file || extra)
43
+ throw new IdsUsageError('usage: ifc-lite ids explain <rules.ids> [--lang en|de|fr] [--md]');
44
+ const langIndex = args.indexOf('--lang');
45
+ const lang = langIndex === -1 ? 'en' : args[langIndex + 1];
46
+ if (!LOCALES.includes(lang))
47
+ throw new IdsUsageError(`--lang expects ${LOCALES.join('|')}, got "${lang}"`);
48
+ const ids = await readIds(file);
49
+ process.stdout.write(render(ids, lang, args.includes('--md')));
50
+ return EXIT_CLEAN;
51
+ });
52
+ }
53
+ //# sourceMappingURL=ids-explain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-explain.js","sourceRoot":"","sources":["../../src/commands/ids-explain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function idsFmtCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=ids-fmt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-fmt.d.ts","sourceRoot":"","sources":["../../src/commands/ids-fmt.ts"],"names":[],"mappings":"AAwBA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BjE"}