renma 0.1.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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +350 -0
  3. package/dist/catalog.d.ts +8 -0
  4. package/dist/catalog.d.ts.map +1 -0
  5. package/dist/catalog.js +140 -0
  6. package/dist/catalog.js.map +1 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +301 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands/catalog.d.ts +24 -0
  12. package/dist/commands/catalog.d.ts.map +1 -0
  13. package/dist/commands/catalog.js +88 -0
  14. package/dist/commands/catalog.js.map +1 -0
  15. package/dist/commands/graph.d.ts +45 -0
  16. package/dist/commands/graph.d.ts.map +1 -0
  17. package/dist/commands/graph.js +344 -0
  18. package/dist/commands/graph.js.map +1 -0
  19. package/dist/commands/inspect.d.ts +36 -0
  20. package/dist/commands/inspect.d.ts.map +1 -0
  21. package/dist/commands/inspect.js +143 -0
  22. package/dist/commands/inspect.js.map +1 -0
  23. package/dist/commands/ownership.d.ts +50 -0
  24. package/dist/commands/ownership.d.ts.map +1 -0
  25. package/dist/commands/ownership.js +154 -0
  26. package/dist/commands/ownership.js.map +1 -0
  27. package/dist/commands/readiness.d.ts +64 -0
  28. package/dist/commands/readiness.d.ts.map +1 -0
  29. package/dist/commands/readiness.js +614 -0
  30. package/dist/commands/readiness.js.map +1 -0
  31. package/dist/commands/scan.d.ts +4 -0
  32. package/dist/commands/scan.d.ts.map +1 -0
  33. package/dist/commands/scan.js +12 -0
  34. package/dist/commands/scan.js.map +1 -0
  35. package/dist/commands/suggest-semantic-split.d.ts +8 -0
  36. package/dist/commands/suggest-semantic-split.d.ts.map +1 -0
  37. package/dist/commands/suggest-semantic-split.js +215 -0
  38. package/dist/commands/suggest-semantic-split.js.map +1 -0
  39. package/dist/config.d.ts +15 -0
  40. package/dist/config.d.ts.map +1 -0
  41. package/dist/config.js +184 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/discovery.d.ts +7 -0
  44. package/dist/discovery.d.ts.map +1 -0
  45. package/dist/discovery.js +122 -0
  46. package/dist/discovery.js.map +1 -0
  47. package/dist/index.d.ts +3 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +4 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/markdown.d.ts +4 -0
  52. package/dist/markdown.d.ts.map +1 -0
  53. package/dist/markdown.js +77 -0
  54. package/dist/markdown.js.map +1 -0
  55. package/dist/metadata.d.ts +8 -0
  56. package/dist/metadata.d.ts.map +1 -0
  57. package/dist/metadata.js +61 -0
  58. package/dist/metadata.js.map +1 -0
  59. package/dist/model.d.ts +56 -0
  60. package/dist/model.d.ts.map +1 -0
  61. package/dist/model.js +2 -0
  62. package/dist/model.js.map +1 -0
  63. package/dist/report.d.ts +6 -0
  64. package/dist/report.d.ts.map +1 -0
  65. package/dist/report.js +39 -0
  66. package/dist/report.js.map +1 -0
  67. package/dist/rule-engine.d.ts +16 -0
  68. package/dist/rule-engine.d.ts.map +1 -0
  69. package/dist/rule-engine.js +10 -0
  70. package/dist/rule-engine.js.map +1 -0
  71. package/dist/rules.d.ts +7 -0
  72. package/dist/rules.d.ts.map +1 -0
  73. package/dist/rules.js +1413 -0
  74. package/dist/rules.js.map +1 -0
  75. package/dist/scanner.d.ts +5 -0
  76. package/dist/scanner.d.ts.map +1 -0
  77. package/dist/scanner.js +104 -0
  78. package/dist/scanner.js.map +1 -0
  79. package/dist/types.d.ts +99 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +2 -0
  82. package/dist/types.js.map +1 -0
  83. package/package.json +56 -0
  84. package/scripts/split-reference.mjs +172 -0
package/dist/cli.js ADDED
@@ -0,0 +1,301 @@
1
+ import { parseArgs } from "node:util";
2
+ import packageJson from "../package.json" with { type: "json" };
3
+ import { runCatalogCommand } from "./commands/catalog.js";
4
+ import { runGraphCommand, } from "./commands/graph.js";
5
+ import { runInspectCommand } from "./commands/inspect.js";
6
+ import { runOwnershipCommand, } from "./commands/ownership.js";
7
+ import { runReadinessCommand, } from "./commands/readiness.js";
8
+ import { runScanCommand } from "./commands/scan.js";
9
+ import { runSuggestSemanticSplitCommand, } from "./commands/suggest-semantic-split.js";
10
+ import { ConfigError } from "./config.js";
11
+ export async function main(argv = process.argv.slice(2)) {
12
+ let parsed;
13
+ try {
14
+ parsed = parseArgs({
15
+ args: argv,
16
+ allowPositionals: true,
17
+ options: {
18
+ config: { type: "string", short: "c" },
19
+ "fail-on": { type: "string" },
20
+ format: { type: "string" },
21
+ "include-owned": { type: "boolean" },
22
+ json: { type: "boolean" },
23
+ lines: { type: "string" },
24
+ view: { type: "string" },
25
+ "max-context-bytes": { type: "string" },
26
+ "max-source-bytes": { type: "string" },
27
+ help: { type: "boolean", short: "h" },
28
+ version: { type: "boolean", short: "v" },
29
+ },
30
+ });
31
+ }
32
+ catch (error) {
33
+ console.error(error instanceof Error ? error.message : String(error));
34
+ return 2;
35
+ }
36
+ if (parsed.values.help) {
37
+ console.log(helpText());
38
+ return 0;
39
+ }
40
+ if (parsed.values.version) {
41
+ console.log(packageJson.version);
42
+ return 0;
43
+ }
44
+ const [command = "scan", target = "."] = parsed.positionals;
45
+ if (command !== "scan" &&
46
+ command !== "catalog" &&
47
+ command !== "graph" &&
48
+ command !== "ownership" &&
49
+ command !== "readiness" &&
50
+ command !== "suggest-semantic-split" &&
51
+ command !== "inspect") {
52
+ console.error(command ? `Unknown command "${command}".` : "Missing command.");
53
+ console.error("Run renma --help for usage.");
54
+ return 2;
55
+ }
56
+ if (command === "suggest-semantic-split") {
57
+ return runSuggestSemanticSplit(parsed.values, target);
58
+ }
59
+ if (command === "inspect") {
60
+ return runInspect(parsed.values, target);
61
+ }
62
+ if (command === "catalog") {
63
+ return runCatalog(parsed.values, target);
64
+ }
65
+ if (command === "graph") {
66
+ return runGraph(parsed.values, target);
67
+ }
68
+ if (command === "ownership") {
69
+ return runOwnership(parsed.values, target);
70
+ }
71
+ if (command === "readiness") {
72
+ return runReadiness(parsed.values, target);
73
+ }
74
+ return runScan(parsed.values, target);
75
+ }
76
+ async function runScan(values, target) {
77
+ const failOnValue = stringValue(values["fail-on"]);
78
+ const failOn = parseSeverity(failOnValue);
79
+ if (failOnValue && !failOn) {
80
+ console.error("--fail-on must be one of: low, medium, high, critical.");
81
+ return 2;
82
+ }
83
+ const format = values.json ? "json" : stringValue(values.format);
84
+ if (format !== undefined && format !== "text" && format !== "json") {
85
+ console.error("--format must be either text or json.");
86
+ return 2;
87
+ }
88
+ const configPath = stringValue(values.config);
89
+ const overrides = {
90
+ ...(configPath ? { configPath } : {}),
91
+ ...(failOn ? { failOn } : {}),
92
+ ...(format ? { format } : {}),
93
+ };
94
+ try {
95
+ return await runScanCommand(target, overrides);
96
+ }
97
+ catch (error) {
98
+ console.error(error instanceof ConfigError || error instanceof Error
99
+ ? error.message
100
+ : String(error));
101
+ return 2;
102
+ }
103
+ }
104
+ async function runCatalog(values, target) {
105
+ const format = values.json ? "json" : (stringValue(values.format) ?? "json");
106
+ if (format !== "json" && format !== "markdown") {
107
+ console.error("--format must be either json or markdown.");
108
+ return 2;
109
+ }
110
+ const configPath = stringValue(values.config);
111
+ const overrides = {
112
+ ...(configPath ? { configPath } : {}),
113
+ };
114
+ try {
115
+ return await runCatalogCommand(target, {
116
+ format: format,
117
+ overrides,
118
+ });
119
+ }
120
+ catch (error) {
121
+ console.error(error instanceof ConfigError || error instanceof Error
122
+ ? error.message
123
+ : String(error));
124
+ return 2;
125
+ }
126
+ }
127
+ async function runGraph(values, target) {
128
+ const format = values.json ? "json" : (stringValue(values.format) ?? "json");
129
+ if (format !== "json" && format !== "markdown" && format !== "mermaid") {
130
+ console.error("--format must be one of: json, markdown, mermaid.");
131
+ return 2;
132
+ }
133
+ const view = stringValue(values.view) ?? (format === "json" ? "full" : "summary");
134
+ if (view !== "summary" && view !== "workflow" && view !== "full") {
135
+ console.error("--view must be one of: summary, workflow, full.");
136
+ return 2;
137
+ }
138
+ const configPath = stringValue(values.config);
139
+ const overrides = {
140
+ ...(configPath ? { configPath } : {}),
141
+ };
142
+ try {
143
+ return await runGraphCommand(target, {
144
+ format: format,
145
+ view: view,
146
+ overrides,
147
+ });
148
+ }
149
+ catch (error) {
150
+ console.error(error instanceof ConfigError || error instanceof Error
151
+ ? error.message
152
+ : String(error));
153
+ return 2;
154
+ }
155
+ }
156
+ async function runOwnership(values, target) {
157
+ const format = values.json ? "json" : (stringValue(values.format) ?? "json");
158
+ if (format !== "json" && format !== "markdown") {
159
+ console.error("--format must be either json or markdown.");
160
+ return 2;
161
+ }
162
+ const configPath = stringValue(values.config);
163
+ const overrides = {
164
+ ...(configPath ? { configPath } : {}),
165
+ };
166
+ try {
167
+ return await runOwnershipCommand(target, {
168
+ format: format,
169
+ includeOwned: values["include-owned"] === true,
170
+ overrides,
171
+ });
172
+ }
173
+ catch (error) {
174
+ console.error(error instanceof ConfigError || error instanceof Error
175
+ ? error.message
176
+ : String(error));
177
+ return 2;
178
+ }
179
+ }
180
+ async function runReadiness(values, target) {
181
+ const format = values.json ? "json" : (stringValue(values.format) ?? "json");
182
+ if (format !== "json" && format !== "markdown") {
183
+ console.error("--format must be either json or markdown.");
184
+ return 2;
185
+ }
186
+ const configPath = stringValue(values.config);
187
+ const overrides = {
188
+ ...(configPath ? { configPath } : {}),
189
+ };
190
+ try {
191
+ return await runReadinessCommand(target, {
192
+ format: format,
193
+ overrides,
194
+ });
195
+ }
196
+ catch (error) {
197
+ console.error(error instanceof ConfigError || error instanceof Error
198
+ ? error.message
199
+ : String(error));
200
+ return 2;
201
+ }
202
+ }
203
+ function runSuggestSemanticSplit(values, target) {
204
+ const format = values.json
205
+ ? "json"
206
+ : (stringValue(values.format) ?? "prompt");
207
+ if (format !== "prompt" && format !== "json") {
208
+ console.error("--format must be either prompt or json.");
209
+ return Promise.resolve(2);
210
+ }
211
+ let maxContextBytes;
212
+ let maxSourceBytes;
213
+ try {
214
+ maxContextBytes = parseOptionalPositiveInt(stringValue(values["max-context-bytes"]), "--max-context-bytes");
215
+ maxSourceBytes = parseOptionalPositiveInt(stringValue(values["max-source-bytes"]), "--max-source-bytes");
216
+ }
217
+ catch (error) {
218
+ console.error(error instanceof Error ? error.message : String(error));
219
+ return Promise.resolve(2);
220
+ }
221
+ return runSuggestSemanticSplitCommand(target, {
222
+ format: format,
223
+ ...(maxContextBytes ? { maxContextBytes } : {}),
224
+ ...(maxSourceBytes ? { maxSourceBytes } : {}),
225
+ });
226
+ }
227
+ function runInspect(values, target) {
228
+ const format = values.json ? "json" : (stringValue(values.format) ?? "json");
229
+ if (format !== "text" && format !== "json") {
230
+ console.error("--format must be either text or json.");
231
+ return Promise.resolve(2);
232
+ }
233
+ const lines = stringValue(values.lines);
234
+ return runInspectCommand(target, {
235
+ format: format,
236
+ ...(lines ? { lines } : {}),
237
+ });
238
+ }
239
+ function stringValue(value) {
240
+ return typeof value === "string" ? value : undefined;
241
+ }
242
+ function parseSeverity(value) {
243
+ if (value === "low" ||
244
+ value === "medium" ||
245
+ value === "high" ||
246
+ value === "critical")
247
+ return value;
248
+ return undefined;
249
+ }
250
+ function parseOptionalPositiveInt(value, name) {
251
+ if (!value) {
252
+ return undefined;
253
+ }
254
+ const parsed = Number.parseInt(value, 10);
255
+ if (!Number.isInteger(parsed) || parsed <= 0) {
256
+ throw new ConfigError(`${name} must be a positive integer.`);
257
+ }
258
+ return parsed;
259
+ }
260
+ function helpText() {
261
+ return [
262
+ `renma ${packageJson.version}`,
263
+ "",
264
+ "Usage: renma scan [path] [options]",
265
+ "",
266
+ "Additional usage:",
267
+ " renma scan [path] [options]",
268
+ " renma catalog [path] [options]",
269
+ " renma graph [path] [options]",
270
+ " renma ownership [path] [options]",
271
+ " renma readiness [path] [options]",
272
+ " renma inspect <file> [options]",
273
+ " renma suggest-semantic-split <file> [options]",
274
+ "",
275
+ "Commands:",
276
+ " scan Scan a repository or skill directory",
277
+ " catalog Print deterministic normalized asset catalog",
278
+ " graph Print deterministic repository graph snapshot",
279
+ " ownership Print deterministic ownership coverage report",
280
+ " readiness Print deterministic agent readiness report",
281
+ " inspect Inspect repository files/assets by outline or exact line slice",
282
+ " suggest-semantic-split Print a Codex-ready semantic split prompt",
283
+ "",
284
+ "The inspect command is an inspection helper; it does not choose task context or assemble prompts.",
285
+ "",
286
+ "Options:",
287
+ " -c, --config <path> scan: read JSON config from path",
288
+ " --fail-on <level> scan: exit 1 when findings meet severity: low, medium, high, critical",
289
+ " --format <format> scan: text or json; catalog/ownership/readiness: json or markdown; graph: json, markdown, or mermaid; suggest-semantic-split: prompt or json",
290
+ " --include-owned ownership: include owned asset details",
291
+ " --json Shortcut for --format json",
292
+ " --view <view> graph: summary, workflow, or full",
293
+ " --lines <range> inspect: exact line range, e.g. L10-L42",
294
+ " --max-source-bytes <n> suggest-semantic-split: source file byte budget",
295
+ " --max-context-bytes <n>",
296
+ " suggest-semantic-split: nearby context byte budget",
297
+ " -h, --help Show help",
298
+ " -v, --version Show version",
299
+ ].join("\n");
300
+ }
301
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type ConfigOverrides } from "../config.js";
2
+ import type { Catalog } from "../model.js";
3
+ import type { Diagnostic } from "../types.js";
4
+ export type CatalogFormat = "json" | "markdown";
5
+ /** Complete result emitted by the catalog command before formatting. */
6
+ export interface CatalogResult {
7
+ root: string;
8
+ configPath?: string;
9
+ scannedFileCount: number;
10
+ catalog: Catalog;
11
+ diagnostics: Diagnostic[];
12
+ }
13
+ /** Run catalog discovery, format output, and return a CLI-style exit code. */
14
+ export declare function runCatalogCommand(targetPath: string, options: {
15
+ format: CatalogFormat;
16
+ overrides?: ConfigOverrides;
17
+ }): Promise<number>;
18
+ /** Discover repository artifacts and build their normalized catalog model. */
19
+ export declare function catalog(targetPath: string, overrides?: ConfigOverrides): Promise<CatalogResult>;
20
+ /** Format the catalog command result as deterministic pretty JSON. */
21
+ export declare function formatCatalogJson(result: CatalogResult): string;
22
+ /** Format a compact Markdown catalog intended for code review and generated docs. */
23
+ export declare function formatCatalogMarkdown(result: CatalogResult): string;
24
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,KAAK,EAAE,OAAO,EAA4B,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,CAAC;AAEhD,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,8EAA8E;AAC9E,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,CAAC,EAAE,eAAe,CAAA;CAAE,GAC9D,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,8EAA8E;AAC9E,wBAAsB,OAAO,CAC3B,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,eAAoB,GAC9B,OAAO,CAAC,aAAa,CAAC,CAcxB;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE/D;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAsCnE"}
@@ -0,0 +1,88 @@
1
+ import path from "node:path";
2
+ import { buildCatalog } from "../catalog.js";
3
+ import { loadConfig } from "../config.js";
4
+ import { discoverArtifacts } from "../discovery.js";
5
+ import { parseDocument } from "../markdown.js";
6
+ /** Run catalog discovery, format output, and return a CLI-style exit code. */
7
+ export async function runCatalogCommand(targetPath, options) {
8
+ const result = await catalog(targetPath, options.overrides ?? {});
9
+ process.stdout.write(options.format === "json"
10
+ ? formatCatalogJson(result)
11
+ : formatCatalogMarkdown(result));
12
+ return result.diagnostics.some((diagnostic) => diagnostic.severity === "error")
13
+ ? 1
14
+ : 0;
15
+ }
16
+ /** Discover repository artifacts and build their normalized catalog model. */
17
+ export async function catalog(targetPath, overrides = {}) {
18
+ const root = path.resolve(targetPath);
19
+ const { config, configPath } = await loadConfig(root, overrides);
20
+ const { artifacts, diagnostics } = await discoverArtifacts(root, config);
21
+ const documents = artifacts.map(parseDocument);
22
+ const built = buildCatalog(documents);
23
+ return {
24
+ root,
25
+ ...(configPath ? { configPath } : {}),
26
+ scannedFileCount: artifacts.length,
27
+ catalog: built.catalog,
28
+ diagnostics: [...diagnostics, ...built.diagnostics],
29
+ };
30
+ }
31
+ /** Format the catalog command result as deterministic pretty JSON. */
32
+ export function formatCatalogJson(result) {
33
+ return `${JSON.stringify(result, null, 2)}\n`;
34
+ }
35
+ /** Format a compact Markdown catalog intended for code review and generated docs. */
36
+ export function formatCatalogMarkdown(result) {
37
+ const lines = [
38
+ "# Renma Catalog",
39
+ "",
40
+ `Root: ${result.root}`,
41
+ `Config: ${result.configPath ?? "(defaults)"}`,
42
+ `Files scanned: ${result.scannedFileCount}`,
43
+ `Assets: ${result.catalog.assets.length}`,
44
+ `Dependencies: ${result.catalog.dependencies.length}`,
45
+ ];
46
+ if (result.diagnostics.length > 0) {
47
+ lines.push("", "## Diagnostics");
48
+ for (const diagnostic of result.diagnostics) {
49
+ lines.push(`- ${diagnostic.severity}: ${diagnostic.path ? `${diagnostic.path}: ` : ""}${diagnostic.message}`);
50
+ }
51
+ }
52
+ lines.push("", "## Assets");
53
+ for (const entry of result.catalog.entries) {
54
+ lines.push("", `### ${entry.id}`, "");
55
+ lines.push(`- Kind: ${entry.kind}`);
56
+ lines.push(`- Path: ${entry.sourcePath}`);
57
+ lines.push(`- Hash: ${entry.contentHash}`);
58
+ lines.push(`- Owner: ${entry.metadata.owner ?? "(none)"}`);
59
+ lines.push(`- Status: ${entry.metadata.status ?? "(unspecified)"}`);
60
+ lines.push(`- Tags: ${list(entry.metadata.tags)}`);
61
+ lines.push(`- Dependencies: ${dependencySummary(entry, result.catalog.dependencies)}`);
62
+ lines.push(`- Dependents: ${dependentSummary(entry, result.catalog.dependencies)}`);
63
+ }
64
+ return `${lines.join("\n")}\n`;
65
+ }
66
+ /** Summarize outgoing dependency edges for one asset. */
67
+ function dependencySummary(entry, dependencies) {
68
+ const outbound = dependencies.filter((dependency) => dependency.from === entry.id);
69
+ if (outbound.length === 0)
70
+ return "(none)";
71
+ return outbound
72
+ .map((dependency) => `${dependency.kind}:${dependency.to}`)
73
+ .join(", ");
74
+ }
75
+ /** Summarize incoming dependency edges for one asset. */
76
+ function dependentSummary(entry, dependencies) {
77
+ const inbound = dependencies.filter((dependency) => dependency.to === entry.id);
78
+ if (inbound.length === 0)
79
+ return "(none)";
80
+ return inbound
81
+ .map((dependency) => `${dependency.kind}:${dependency.from}`)
82
+ .join(", ");
83
+ }
84
+ /** Render an empty-aware comma-delimited list for Markdown output. */
85
+ function list(values) {
86
+ return values.length > 0 ? values.join(", ") : "(none)";
87
+ }
88
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { ConfigOverrides } from "../config.js";
2
+ import type { AssetKind, AssetStatus, DependencyKind } from "../model.js";
3
+ import type { Diagnostic } from "../types.js";
4
+ export type GraphFormat = "json" | "markdown" | "mermaid";
5
+ export type GraphView = "summary" | "workflow" | "full";
6
+ export interface GraphReport {
7
+ root: string;
8
+ configPath?: string;
9
+ scannedFileCount: number;
10
+ view: GraphView;
11
+ nodeCount: number;
12
+ edgeCount: number;
13
+ nodes: GraphNode[];
14
+ edges: GraphEdge[];
15
+ diagnostics?: Diagnostic[];
16
+ }
17
+ export interface GraphNode {
18
+ id: string;
19
+ kind: AssetKind;
20
+ sourcePath: string;
21
+ owner?: string;
22
+ status?: AssetStatus;
23
+ tags: string[];
24
+ groupedCount?: number;
25
+ }
26
+ export interface GraphEdge {
27
+ from: string;
28
+ to: string;
29
+ kind: DependencyKind;
30
+ sourcePath: string;
31
+ resolved: boolean;
32
+ targetId?: string;
33
+ targetKind?: AssetKind;
34
+ targetPath?: string;
35
+ }
36
+ export declare function runGraphCommand(targetPath: string, options: {
37
+ format: GraphFormat;
38
+ view?: GraphView;
39
+ overrides?: ConfigOverrides;
40
+ }): Promise<number>;
41
+ export declare function graph(targetPath: string, overrides?: ConfigOverrides): Promise<GraphReport>;
42
+ export declare function formatGraphJson(report: GraphReport): string;
43
+ export declare function formatGraphMermaid(report: GraphReport, view?: GraphView): string;
44
+ export declare function formatGraphMarkdown(report: GraphReport, view?: GraphView): string;
45
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAEV,SAAS,EACT,WAAW,EAEX,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAC1D,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IACP,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,GACA,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAsB,KAAK,CACzB,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,eAAoB,GAC9B,OAAO,CAAC,WAAW,CAAC,CAoBtB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAE3D;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE,SAAqB,GAC1B,MAAM,CAsDR;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE,SAAqB,GAC1B,MAAM,CAuDR"}