@beignet/cli 0.0.39 → 0.0.41

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 (112) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +110 -16
  3. package/dist/analysis/source-index.d.ts +38 -0
  4. package/dist/analysis/source-index.d.ts.map +1 -0
  5. package/dist/analysis/source-index.js +271 -0
  6. package/dist/analysis/source-index.js.map +1 -0
  7. package/dist/analysis/workspace.d.ts +16 -0
  8. package/dist/analysis/workspace.d.ts.map +1 -0
  9. package/dist/analysis/workspace.js +134 -0
  10. package/dist/analysis/workspace.js.map +1 -0
  11. package/dist/app-map-schema.d.ts +5 -0
  12. package/dist/app-map-schema.d.ts.map +1 -0
  13. package/dist/app-map-schema.js +26 -0
  14. package/dist/app-map-schema.js.map +1 -0
  15. package/dist/app-map.d.ts +96 -0
  16. package/dist/app-map.d.ts.map +1 -0
  17. package/dist/app-map.js +1141 -0
  18. package/dist/app-map.js.map +1 -0
  19. package/dist/check.d.ts +7 -0
  20. package/dist/check.d.ts.map +1 -1
  21. package/dist/check.js +20 -5
  22. package/dist/check.js.map +1 -1
  23. package/dist/config.d.ts +1 -1
  24. package/dist/config.d.ts.map +1 -1
  25. package/dist/config.js +4 -2
  26. package/dist/config.js.map +1 -1
  27. package/dist/db.d.ts +32 -7
  28. package/dist/db.d.ts.map +1 -1
  29. package/dist/db.js +182 -14
  30. package/dist/db.js.map +1 -1
  31. package/dist/explain.d.ts +98 -0
  32. package/dist/explain.d.ts.map +1 -0
  33. package/dist/explain.js +512 -0
  34. package/dist/explain.js.map +1 -0
  35. package/dist/framework.d.ts +3 -0
  36. package/dist/framework.d.ts.map +1 -0
  37. package/dist/framework.js +6 -0
  38. package/dist/framework.js.map +1 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +79 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/inspect.d.ts +4 -2
  43. package/dist/inspect.d.ts.map +1 -1
  44. package/dist/inspect.js +173 -36
  45. package/dist/inspect.js.map +1 -1
  46. package/dist/lib.d.ts +4 -0
  47. package/dist/lib.d.ts.map +1 -1
  48. package/dist/lib.js +2 -0
  49. package/dist/lib.js.map +1 -1
  50. package/dist/make/payments.d.ts.map +1 -1
  51. package/dist/make/payments.js +2 -0
  52. package/dist/make/payments.js.map +1 -1
  53. package/dist/make.d.ts.map +1 -1
  54. package/dist/make.js +157 -3
  55. package/dist/make.js.map +1 -1
  56. package/dist/mcp.d.ts +1 -1
  57. package/dist/mcp.d.ts.map +1 -1
  58. package/dist/mcp.js +69 -1
  59. package/dist/mcp.js.map +1 -1
  60. package/dist/preflight.d.ts.map +1 -1
  61. package/dist/preflight.js +10 -0
  62. package/dist/preflight.js.map +1 -1
  63. package/dist/provider-add.d.ts.map +1 -1
  64. package/dist/provider-add.js +167 -13
  65. package/dist/provider-add.js.map +1 -1
  66. package/dist/provider-audit.d.ts +6 -0
  67. package/dist/provider-audit.d.ts.map +1 -1
  68. package/dist/provider-audit.js +63 -15
  69. package/dist/provider-audit.js.map +1 -1
  70. package/dist/templates/agents.d.ts.map +1 -1
  71. package/dist/templates/agents.js +17 -4
  72. package/dist/templates/agents.js.map +1 -1
  73. package/dist/templates/base.d.ts.map +1 -1
  74. package/dist/templates/base.js +10 -4
  75. package/dist/templates/base.js.map +1 -1
  76. package/dist/templates/index.d.ts +1 -1
  77. package/dist/templates/index.d.ts.map +1 -1
  78. package/dist/templates/index.js +8 -1
  79. package/dist/templates/index.js.map +1 -1
  80. package/dist/templates/server.d.ts +3 -0
  81. package/dist/templates/server.d.ts.map +1 -1
  82. package/dist/templates/server.js +55 -1
  83. package/dist/templates/server.js.map +1 -1
  84. package/dist/templates/shadcn.js +1 -1
  85. package/dist/templates/shared.js +1 -1
  86. package/package.json +2 -2
  87. package/skills/app-structure/SKILL.md +38 -5
  88. package/src/analysis/source-index.ts +395 -0
  89. package/src/analysis/workspace.ts +180 -0
  90. package/src/app-map-schema.ts +28 -0
  91. package/src/app-map.ts +1705 -0
  92. package/src/check.ts +27 -4
  93. package/src/config.ts +7 -3
  94. package/src/db.ts +232 -14
  95. package/src/explain.ts +786 -0
  96. package/src/framework.ts +13 -0
  97. package/src/index.ts +113 -2
  98. package/src/inspect.ts +259 -40
  99. package/src/lib.ts +36 -0
  100. package/src/make/payments.ts +7 -0
  101. package/src/make.ts +232 -2
  102. package/src/mcp.ts +107 -1
  103. package/src/preflight.ts +14 -0
  104. package/src/provider-add.ts +211 -12
  105. package/src/provider-audit.ts +127 -22
  106. package/src/templates/agents.ts +17 -4
  107. package/src/templates/base.ts +22 -4
  108. package/src/templates/index.ts +18 -1
  109. package/src/templates/server.ts +58 -1
  110. package/src/templates/shadcn.ts +1 -1
  111. package/src/templates/shared.ts +1 -1
  112. package/src/test-helpers/generated-app.ts +1 -1
@@ -0,0 +1,512 @@
1
+ import { mapApp, projectAppMap, } from "./app-map.js";
2
+ /** Targets supported by `beignet explain` and the MCP `explain` tool. */
3
+ export const explainTargetKinds = [
4
+ "feature",
5
+ "route",
6
+ "provider",
7
+ "diagnostic",
8
+ ];
9
+ /** Explain one source-backed Beignet app concept without generating advice. */
10
+ export async function explainApp(options) {
11
+ const targetText = options.target.trim();
12
+ if (!targetText) {
13
+ throw new Error(`Pass a non-empty ${options.kind} target to beignet explain.`);
14
+ }
15
+ const appMap = await mapApp({ cwd: options.cwd, strict: true });
16
+ const scope = options.kind === "diagnostic"
17
+ ? diagnosticScope(appMap, targetText)
18
+ : nodeScope(appMap, resolveTargetNode(appMap, options.kind, targetText));
19
+ const target = options.kind === "diagnostic"
20
+ ? diagnosticTarget(targetText, scope.findings)
21
+ : nodeTarget(options.kind, scope.nodes[0]);
22
+ const selectedEdges = selectExplanationEdges(scope.edges, target.id);
23
+ const relationships = explainRelationships(scope.nodes, selectedEdges);
24
+ const evidenceNodes = scope.nodes.filter((node) => node.id === target.id);
25
+ const evidence = explainEvidence(evidenceNodes, relationships, scope.findings, target);
26
+ const suggestedFiles = suggestedFilesFromEvidence([
27
+ ...evidence,
28
+ ...relationshipNodeEvidence(relationships),
29
+ ]);
30
+ return {
31
+ schemaVersion: 1,
32
+ targetDir: appMap.targetDir,
33
+ app: appMap.app,
34
+ query: { kind: options.kind, target: targetText },
35
+ target,
36
+ summary: explainSummary(target, scope.nodes, scope.edges, scope.findings),
37
+ scope: {
38
+ nodes: scope.nodes.length,
39
+ relationships: scope.edges.length,
40
+ returnedRelationships: relationships.length,
41
+ findings: scope.findings.length,
42
+ truncated: relationships.length < scope.edges.length,
43
+ },
44
+ evidence,
45
+ relationships,
46
+ conventions: conventionsFor(options.kind),
47
+ findings: scope.findings,
48
+ suggestedFiles,
49
+ suggestedActions: suggestedActions(target, scope.findings, appMap.targetDir),
50
+ };
51
+ }
52
+ /** Format a concise, source-backed explanation for terminal use. */
53
+ export function formatExplain(result) {
54
+ const relationshipLines = result.relationships.map((relationship) => `- ${relationship.from.id} --${relationship.kind}--> ${relationship.to.id} (${formatSource(relationship.evidence)})`);
55
+ const findingLines = result.findings.map((finding) => `- [${finding.source}/${finding.severity}] ${finding.code}: ${finding.message}${finding.location ? ` (${formatSource(finding.location)})` : ""}`);
56
+ const fileLines = result.suggestedFiles.map((file) => `- ${formatSource(file)} — ${file.reasons.join("; ")}`);
57
+ const actionLines = result.suggestedActions.map((action) => {
58
+ const details = [
59
+ ...(action.cwd ? [` cwd: ${action.cwd}`] : []),
60
+ ...(action.command ? [` ${action.command}`] : []),
61
+ ];
62
+ return `- ${action.description}${details.length > 0 ? `\n${details.join("\n")}` : ""}`;
63
+ });
64
+ return [
65
+ `Explain ${result.query.kind}: ${result.target.name}`,
66
+ `App root: ${result.targetDir}`,
67
+ `Target: ${result.target.id}${result.target.status ? ` (${result.target.status})` : ""}`,
68
+ result.target.source ? `Source: ${formatSource(result.target.source)}` : "",
69
+ `Summary: ${result.summary}`,
70
+ `Scope: ${result.scope.nodes} nodes, ${result.scope.returnedRelationships} of ${result.scope.relationships} relationships, ${result.scope.findings} findings${result.scope.truncated ? " (relationship list truncated)" : ""}`,
71
+ "",
72
+ "Conventions:",
73
+ ...result.conventions.map((convention) => `- ${convention}`),
74
+ "",
75
+ "Relationships:",
76
+ ...(relationshipLines.length > 0 ? relationshipLines : ["- None found."]),
77
+ "",
78
+ "Findings:",
79
+ ...(findingLines.length > 0 ? findingLines : ["- None found."]),
80
+ "",
81
+ "Suggested files:",
82
+ ...(fileLines.length > 0 ? fileLines : ["- None found."]),
83
+ "",
84
+ "Suggested actions:",
85
+ ...actionLines,
86
+ ]
87
+ .filter((line, index, lines) => line !== "" || lines[index - 1] !== "")
88
+ .join("\n");
89
+ }
90
+ function nodeScope(appMap, targetNode) {
91
+ if (targetNode.kind === "feature") {
92
+ const projection = projectAppMap(appMap, { feature: targetNode.name });
93
+ return {
94
+ nodes: moveTargetFirst(projection.nodes, targetNode.id),
95
+ edges: projection.edges,
96
+ findings: allFindings(projection),
97
+ };
98
+ }
99
+ const connectedEdges = appMap.edges.filter((edge) => edge.from === targetNode.id || edge.to === targetNode.id);
100
+ const connectedIds = new Set([targetNode.id]);
101
+ for (const edge of connectedEdges) {
102
+ connectedIds.add(edge.from);
103
+ connectedIds.add(edge.to);
104
+ }
105
+ const nodes = moveTargetFirst(appMap.nodes.filter((node) => connectedIds.has(node.id)), targetNode.id);
106
+ const files = scopeFiles(nodes, connectedEdges);
107
+ const terms = targetTerms(targetNode);
108
+ const findings = allFindings(appMap).filter((finding) => (finding.location && files.has(finding.location.file)) ||
109
+ terms.some((term) => normalized(finding.message).includes(term)));
110
+ return { nodes, edges: connectedEdges, findings };
111
+ }
112
+ function diagnosticScope(appMap, target) {
113
+ const code = normalized(target);
114
+ const findings = allFindings(appMap).filter((finding) => normalized(finding.code) === code);
115
+ if (findings.length === 0) {
116
+ const codes = [
117
+ ...new Set(allFindings(appMap).map((finding) => finding.code)),
118
+ ]
119
+ .sort()
120
+ .slice(0, 20);
121
+ throw new Error(`Could not explain diagnostic "${target}". ${codes.length > 0 ? `Available diagnostic codes: ${codes.join(", ")}.` : "This app has no diagnostics."}`);
122
+ }
123
+ const seedIds = new Set(appMap.nodes
124
+ .filter((node) => findings.some((finding) => findingMatchesNode(finding, node)))
125
+ .map((node) => node.id));
126
+ const connectedEdges = appMap.edges.filter((edge) => seedIds.has(edge.from) || seedIds.has(edge.to));
127
+ const connectedIds = new Set(seedIds);
128
+ for (const edge of connectedEdges) {
129
+ connectedIds.add(edge.from);
130
+ connectedIds.add(edge.to);
131
+ }
132
+ return {
133
+ nodes: appMap.nodes.filter((node) => connectedIds.has(node.id)),
134
+ edges: connectedEdges,
135
+ findings,
136
+ };
137
+ }
138
+ function resolveTargetNode(appMap, kind, target) {
139
+ const nodeKind = kind;
140
+ const candidates = appMap.nodes.filter((node) => node.kind === nodeKind);
141
+ const query = normalized(target);
142
+ let matches = candidates.filter((node) => aliasesForNode(node).some((alias) => normalized(alias) === query));
143
+ if (kind === "provider" && matches.length === 0) {
144
+ const portIds = new Set(appMap.nodes
145
+ .filter((node) => node.kind === "port" &&
146
+ [node.id, node.name].some((alias) => normalized(alias) === query))
147
+ .map((node) => node.id));
148
+ matches = candidates.filter((node) => appMap.edges.some((edge) => edge.kind === "provides" &&
149
+ edge.from === node.id &&
150
+ portIds.has(edge.to)));
151
+ const packageProviders = matches.filter((node) => node.details?.sourceType !== "app-binding");
152
+ if (packageProviders.length > 0)
153
+ matches = packageProviders;
154
+ }
155
+ if (matches.length === 1)
156
+ return matches[0];
157
+ if (matches.length > 1) {
158
+ throw new Error(`The ${kind} target "${target}" is ambiguous. Matches: ${matches.map((node) => node.id).join(", ")}.`);
159
+ }
160
+ const available = candidates
161
+ .map((node) => node.name)
162
+ .sort()
163
+ .slice(0, 20);
164
+ throw new Error(`Could not explain ${kind} "${target}". ${available.length > 0 ? `Available ${kind}s: ${available.join(", ")}.` : `This app has no mapped ${kind}s.`}`);
165
+ }
166
+ function aliasesForNode(node) {
167
+ const aliases = [node.id, node.name];
168
+ if (node.runtimeName)
169
+ aliases.push(node.runtimeName);
170
+ if (node.id.includes("#"))
171
+ aliases.push(node.id.slice(node.id.lastIndexOf("#") + 1));
172
+ if (node.kind === "route" && typeof node.details?.path === "string") {
173
+ aliases.push(node.details.path);
174
+ }
175
+ if (node.kind === "provider") {
176
+ aliases.push(node.name.replace(/^@beignet\//, ""));
177
+ if (typeof node.details?.displayName === "string") {
178
+ aliases.push(node.details.displayName);
179
+ }
180
+ }
181
+ return aliases;
182
+ }
183
+ function targetTerms(node) {
184
+ return aliasesForNode(node)
185
+ .map(normalized)
186
+ .filter((term) => term.length >= 4);
187
+ }
188
+ function diagnosticTarget(query, findings) {
189
+ const code = findings[0]?.code ?? query;
190
+ return {
191
+ kind: "diagnostic",
192
+ id: `diagnostic:${code}`,
193
+ name: code,
194
+ ...(findings[0]?.location ? { source: findings[0].location } : {}),
195
+ details: {
196
+ matches: findings.length,
197
+ sources: [...new Set(findings.map((finding) => finding.source))].sort(),
198
+ },
199
+ };
200
+ }
201
+ function nodeTarget(kind, node) {
202
+ if (!node)
203
+ throw new Error(`Could not resolve the ${kind} explanation target.`);
204
+ return {
205
+ kind,
206
+ id: node.id,
207
+ name: node.name,
208
+ source: node.source,
209
+ ...(node.status ? { status: node.status } : {}),
210
+ ...(node.details ? { details: node.details } : {}),
211
+ };
212
+ }
213
+ function explainRelationships(nodes, edges) {
214
+ const byId = new Map(nodes.map((node) => [node.id, node]));
215
+ return edges.flatMap((edge) => {
216
+ const from = byId.get(edge.from);
217
+ const to = byId.get(edge.to);
218
+ if (!from || !to)
219
+ return [];
220
+ return [
221
+ {
222
+ kind: edge.kind,
223
+ from: relatedNode(from),
224
+ to: relatedNode(to),
225
+ evidence: edge.evidence,
226
+ ...(edge.details ? { details: edge.details } : {}),
227
+ },
228
+ ];
229
+ });
230
+ }
231
+ function selectExplanationEdges(edges, targetId) {
232
+ const maximumRelationships = 80;
233
+ if (edges.length <= maximumRelationships)
234
+ return edges;
235
+ return [...edges]
236
+ .sort((left, right) => {
237
+ const priority = edgePriority(left, targetId) - edgePriority(right, targetId);
238
+ if (priority !== 0)
239
+ return priority;
240
+ return `${left.kind}:${left.from}:${left.to}`.localeCompare(`${right.kind}:${right.from}:${right.to}`);
241
+ })
242
+ .slice(0, maximumRelationships);
243
+ }
244
+ function edgePriority(edge, targetId) {
245
+ if (edge.kind === "depends-on")
246
+ return 0;
247
+ if (edge.kind === "executes" || edge.kind === "binds")
248
+ return 1;
249
+ if ([
250
+ "authorizes",
251
+ "dispatches",
252
+ "emits",
253
+ "listens-to",
254
+ "publishes",
255
+ "sends",
256
+ ].includes(edge.kind)) {
257
+ return 2;
258
+ }
259
+ if (edge.from === targetId || edge.to === targetId)
260
+ return 3;
261
+ return 4;
262
+ }
263
+ function relationshipNodeEvidence(relationships) {
264
+ const evidence = [];
265
+ for (const relationship of relationships) {
266
+ evidence.push({
267
+ source: relationship.from.source,
268
+ reason: `related ${relationship.from.kind} ${relationship.from.id}`,
269
+ });
270
+ evidence.push({
271
+ source: relationship.to.source,
272
+ reason: `related ${relationship.to.kind} ${relationship.to.id}`,
273
+ });
274
+ }
275
+ return evidence;
276
+ }
277
+ function relatedNode(node) {
278
+ return {
279
+ id: node.id,
280
+ kind: node.kind,
281
+ name: node.name,
282
+ ...(node.runtimeName ? { runtimeName: node.runtimeName } : {}),
283
+ ...(node.feature ? { feature: node.feature } : {}),
284
+ source: node.source,
285
+ ...(node.status ? { status: node.status } : {}),
286
+ ...(node.details ? { details: node.details } : {}),
287
+ };
288
+ }
289
+ function allFindings(appMap) {
290
+ return [
291
+ ...appMap.diagnostics.doctor.map((diagnostic) => ({
292
+ source: "doctor",
293
+ severity: diagnostic.severity,
294
+ code: diagnostic.code,
295
+ message: diagnostic.message,
296
+ ...(diagnostic.file
297
+ ? {
298
+ location: {
299
+ file: diagnostic.file,
300
+ ...(diagnostic.contract
301
+ ? { exportName: diagnostic.contract }
302
+ : {}),
303
+ },
304
+ }
305
+ : {}),
306
+ })),
307
+ ...appMap.diagnostics.lint.map((diagnostic) => ({
308
+ source: "lint",
309
+ severity: diagnostic.severity,
310
+ code: diagnostic.code,
311
+ message: diagnostic.message,
312
+ location: {
313
+ file: diagnostic.file,
314
+ ...(diagnostic.line ? { line: diagnostic.line } : {}),
315
+ ...(diagnostic.column ? { column: diagnostic.column } : {}),
316
+ },
317
+ details: { importPath: diagnostic.importPath },
318
+ })),
319
+ ...appMap.unresolved.map((unresolved) => ({
320
+ source: "app-map",
321
+ severity: "warning",
322
+ code: unresolved.code,
323
+ message: unresolved.message,
324
+ location: unresolved.source,
325
+ })),
326
+ ].sort(compareFindings);
327
+ }
328
+ function findingMatchesNode(finding, node) {
329
+ if (finding.location?.file === node.source.file)
330
+ return true;
331
+ if (finding.location?.exportName &&
332
+ finding.location.exportName === node.source.exportName) {
333
+ return true;
334
+ }
335
+ const message = normalized(finding.message);
336
+ if (/\.(ts|tsx|mts|cts|json)$/.test(node.source.file) &&
337
+ message.includes(normalized(node.source.file))) {
338
+ return true;
339
+ }
340
+ return [node.runtimeName, node.source.exportName]
341
+ .filter((term) => Boolean(term && term.length >= 4))
342
+ .some((term) => message.includes(normalized(term)));
343
+ }
344
+ function explainEvidence(nodes, relationships, findings, target) {
345
+ const evidence = [];
346
+ for (const node of nodes) {
347
+ evidence.push({
348
+ source: node.source,
349
+ reason: `${node.kind} ${node.id}`,
350
+ });
351
+ }
352
+ for (const relationship of relationships) {
353
+ evidence.push({
354
+ source: relationship.evidence,
355
+ reason: `${relationship.from.id} ${relationship.kind} ${relationship.to.id}`,
356
+ });
357
+ }
358
+ for (const finding of findings) {
359
+ if (finding.location) {
360
+ evidence.push({
361
+ source: finding.location,
362
+ reason: `${finding.source} finding ${finding.code}`,
363
+ });
364
+ }
365
+ }
366
+ for (const source of providerRegistrationSources(target)) {
367
+ evidence.push({
368
+ source,
369
+ reason: `provider registration ${target.id}`,
370
+ });
371
+ }
372
+ const seen = new Set();
373
+ return evidence.filter((item) => {
374
+ const key = `${sourceKey(item.source)}:${item.reason}`;
375
+ if (seen.has(key))
376
+ return false;
377
+ seen.add(key);
378
+ return true;
379
+ });
380
+ }
381
+ function suggestedFilesFromEvidence(evidence) {
382
+ const files = new Map();
383
+ for (const item of evidence) {
384
+ const key = item.source.file;
385
+ const existing = files.get(key);
386
+ if (existing) {
387
+ if (existing.line !== item.source.line ||
388
+ existing.column !== item.source.column) {
389
+ delete existing.line;
390
+ delete existing.column;
391
+ }
392
+ if (!existing.reasons.includes(item.reason)) {
393
+ existing.reasons.push(item.reason);
394
+ }
395
+ continue;
396
+ }
397
+ files.set(key, {
398
+ file: item.source.file,
399
+ ...(item.source.line ? { line: item.source.line } : {}),
400
+ ...(item.source.column ? { column: item.source.column } : {}),
401
+ reasons: [item.reason],
402
+ });
403
+ }
404
+ return [...files.values()];
405
+ }
406
+ function suggestedActions(target, findings, targetDir) {
407
+ const inspectCommand = target.kind === "feature"
408
+ ? `beignet map --feature ${target.name} --json`
409
+ : target.kind === "route"
410
+ ? "beignet routes --json"
411
+ : target.kind === "provider"
412
+ ? "beignet provider audit --json"
413
+ : findings.some((finding) => finding.source === "lint")
414
+ ? "beignet lint --json"
415
+ : "beignet doctor --strict --json";
416
+ const actions = [
417
+ {
418
+ kind: "inspect",
419
+ description: `Inspect the source-backed ${target.kind} context.`,
420
+ command: inspectCommand,
421
+ cwd: targetDir,
422
+ },
423
+ ];
424
+ for (const finding of findings) {
425
+ actions.push({
426
+ kind: "address-finding",
427
+ description: `${finding.code}: ${finding.message}`,
428
+ ...(finding.location ? { file: finding.location.file } : {}),
429
+ });
430
+ }
431
+ actions.push({
432
+ kind: "validate",
433
+ description: "Run the complete validation loop after making changes.",
434
+ command: "beignet check",
435
+ cwd: targetDir,
436
+ });
437
+ return actions;
438
+ }
439
+ function providerRegistrationSources(target) {
440
+ if (target.kind !== "provider")
441
+ return [];
442
+ const sources = target.details?.registrationSources;
443
+ if (!Array.isArray(sources))
444
+ return [];
445
+ return sources.filter(isAppMapSource);
446
+ }
447
+ function isAppMapSource(value) {
448
+ return (typeof value === "object" &&
449
+ value !== null &&
450
+ "file" in value &&
451
+ typeof value.file === "string");
452
+ }
453
+ function explainSummary(target, nodes, edges, findings) {
454
+ const fileCount = new Set([
455
+ ...nodes.map((node) => node.source.file),
456
+ ...findings.flatMap((finding) => finding.location ? [finding.location.file] : []),
457
+ ]).size;
458
+ if (target.kind === "diagnostic") {
459
+ return `${target.name} has ${countLabel(findings.length, "finding")} across ${countLabel(fileCount, "mapped source")}.`;
460
+ }
461
+ return `${target.name} is ${target.status ?? "mapped"} with ${countLabel(edges.length, "relationship")}, ${countLabel(fileCount, "source")}, and ${countLabel(findings.length, "relevant finding")}.`;
462
+ }
463
+ function conventionsFor(kind) {
464
+ switch (kind) {
465
+ case "feature":
466
+ return [
467
+ "Feature-owned contracts, use cases, policies, ports, workflows, clients, components, and tests stay under features/<feature>/.",
468
+ "Feature route groups and workflow artifacts register through the central server entrypoints.",
469
+ ];
470
+ case "route":
471
+ return [
472
+ "Contracts own HTTP method, path, schemas, responses, metadata, and route errors; routes bind contracts to use cases.",
473
+ "Feature route groups compose centrally in server/routes.ts and runtime route adapters stay thin.",
474
+ ];
475
+ case "provider":
476
+ return [
477
+ "Ports define app-facing interfaces, providers adapt external systems, and app infrastructure wires them together.",
478
+ "Lifecycle providers register in server/providers.ts and provider-backed app ports wire through infra/port-wiring.ts.",
479
+ ];
480
+ case "diagnostic":
481
+ return [
482
+ "Doctor findings describe framework convention drift; lint findings describe dependency-direction violations.",
483
+ "Fix the app structure or wiring named by the finding, then run the complete validation loop.",
484
+ ];
485
+ }
486
+ }
487
+ function scopeFiles(nodes, edges) {
488
+ return new Set([
489
+ ...nodes.map((node) => node.source.file),
490
+ ...edges.map((edge) => edge.evidence.file),
491
+ ]);
492
+ }
493
+ function moveTargetFirst(nodes, id) {
494
+ const target = nodes.find((node) => node.id === id);
495
+ return target ? [target, ...nodes.filter((node) => node.id !== id)] : nodes;
496
+ }
497
+ function compareFindings(left, right) {
498
+ return `${left.code}:${left.location?.file ?? ""}:${left.location?.line ?? 0}:${left.message}`.localeCompare(`${right.code}:${right.location?.file ?? ""}:${right.location?.line ?? 0}:${right.message}`);
499
+ }
500
+ function sourceKey(source) {
501
+ return `${source.file}:${source.line ?? 0}:${source.column ?? 0}:${source.exportName ?? ""}`;
502
+ }
503
+ function formatSource(source) {
504
+ return `${source.file}${source.line ? `:${source.line}${source.column ? `:${source.column}` : ""}` : ""}`;
505
+ }
506
+ function normalized(value) {
507
+ return value.trim().replace(/\s+/g, " ").toLowerCase();
508
+ }
509
+ function countLabel(count, noun) {
510
+ return `${count} ${noun}${count === 1 ? "" : "s"}`;
511
+ }
512
+ //# sourceMappingURL=explain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../src/explain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ResolvedBeignetConfig } from "./config.js";
2
+ export declare function assertNextFramework(config: ResolvedBeignetConfig, command: string, generatedSurface: string): void;
3
+ //# sourceMappingURL=framework.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GACvB,IAAI,CAMN"}
@@ -0,0 +1,6 @@
1
+ export function assertNextFramework(config, command, generatedSurface) {
2
+ if (config.framework === "next")
3
+ return;
4
+ throw new Error(`${command} currently supports framework: "next" because it generates ${generatedSurface}. For framework: "web", define the framework-neutral artifact directly and mount its HTTP entrypoint through @beignet/web.`);
5
+ }
6
+ //# sourceMappingURL=framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework.js","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CACjC,MAA6B,EAC7B,OAAe,EACf,gBAAwB;IAExB,IAAI,MAAM,CAAC,SAAS,KAAK,MAAM;QAAE,OAAO;IAExC,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,8DAA8D,gBAAgB,4HAA4H,CACrN,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAIL,KAAK,cAAc,EAInB,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,eAAe,CAAC;AA2BvB,KAAK,UAAU,GAAG,cAAc,GAAG;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AA2lFF,wBAAsB,IAAI,CACxB,MAAM,WAAwB,EAC9B,OAAO,GAAE,4BAA4B,CAAC,UAAU,CAAe,GAC9D,OAAO,CAAC,IAAI,CAAC,CAiBf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAIL,KAAK,cAAc,EAInB,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,eAAe,CAAC;AA6BvB,KAAK,UAAU,GAAG,cAAc,GAAG;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AAwsFF,wBAAsB,IAAI,CACxB,MAAM,WAAwB,EAC9B,OAAO,GAAE,4BAA4B,CAAC,UAAU,CAAe,GAC9D,OAAO,CAAC,IAAI,CAAC,CAiBf"}