artifact-contracts 0.1.1 → 0.2.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 (113) hide show
  1. package/README.md +254 -2
  2. package/cli-contract.yaml +529 -0
  3. package/dist/agents/index.d.ts +3 -0
  4. package/dist/agents/index.d.ts.map +1 -0
  5. package/dist/agents/index.js +2 -0
  6. package/dist/agents/index.js.map +1 -0
  7. package/dist/agents/orchestrator.d.ts +3 -0
  8. package/dist/agents/orchestrator.d.ts.map +1 -0
  9. package/dist/agents/orchestrator.js +109 -0
  10. package/dist/agents/orchestrator.js.map +1 -0
  11. package/dist/agents/types.d.ts +21 -0
  12. package/dist/agents/types.d.ts.map +1 -0
  13. package/dist/agents/types.js +2 -0
  14. package/dist/agents/types.js.map +1 -0
  15. package/dist/cli/audit.d.ts +12 -0
  16. package/dist/cli/audit.d.ts.map +1 -0
  17. package/dist/cli/audit.js +122 -0
  18. package/dist/cli/audit.js.map +1 -0
  19. package/dist/cli/explain.d.ts +5 -0
  20. package/dist/cli/explain.d.ts.map +1 -0
  21. package/dist/cli/explain.js +47 -0
  22. package/dist/cli/explain.js.map +1 -0
  23. package/dist/cli/index.d.ts +3 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +35 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/list.d.ts +7 -0
  28. package/dist/cli/list.d.ts.map +1 -0
  29. package/dist/cli/list.js +49 -0
  30. package/dist/cli/list.js.map +1 -0
  31. package/dist/cli/resolve.d.ts +5 -0
  32. package/dist/cli/resolve.d.ts.map +1 -0
  33. package/dist/cli/resolve.js +21 -0
  34. package/dist/cli/resolve.js.map +1 -0
  35. package/dist/cli/validate.d.ts +5 -0
  36. package/dist/cli/validate.d.ts.map +1 -0
  37. package/dist/cli/validate.js +36 -0
  38. package/dist/cli/validate.js.map +1 -0
  39. package/dist/core/index.d.ts +10 -0
  40. package/dist/core/index.d.ts.map +1 -0
  41. package/dist/core/index.js +6 -0
  42. package/dist/core/index.js.map +1 -0
  43. package/dist/core/lookup.d.ts +12 -0
  44. package/dist/core/lookup.d.ts.map +1 -0
  45. package/dist/core/lookup.js +24 -0
  46. package/dist/core/lookup.js.map +1 -0
  47. package/dist/core/matcher.d.ts +3 -0
  48. package/dist/core/matcher.d.ts.map +1 -0
  49. package/dist/core/matcher.js +14 -0
  50. package/dist/core/matcher.js.map +1 -0
  51. package/dist/core/resolver.d.ts +18 -0
  52. package/dist/core/resolver.d.ts.map +1 -0
  53. package/dist/core/resolver.js +98 -0
  54. package/dist/core/resolver.js.map +1 -0
  55. package/dist/core/schema.d.ts +160 -0
  56. package/dist/core/schema.d.ts.map +1 -0
  57. package/dist/core/schema.js +69 -0
  58. package/dist/core/schema.js.map +1 -0
  59. package/dist/core/validator.d.ts +16 -0
  60. package/dist/core/validator.d.ts.map +1 -0
  61. package/dist/core/validator.js +86 -0
  62. package/dist/core/validator.js.map +1 -0
  63. package/dist/generated/commands.d.ts +2 -0
  64. package/dist/generated/commands.d.ts.map +1 -0
  65. package/dist/generated/commands.js +2 -0
  66. package/dist/generated/commands.js.map +1 -0
  67. package/dist/generated/dsl/agents.d.ts +34 -0
  68. package/dist/generated/dsl/agents.d.ts.map +1 -0
  69. package/dist/generated/dsl/agents.js +42 -0
  70. package/dist/generated/dsl/agents.js.map +1 -0
  71. package/dist/generated/dsl/handoffs.d.ts +339 -0
  72. package/dist/generated/dsl/handoffs.d.ts.map +1 -0
  73. package/dist/generated/dsl/handoffs.js +74 -0
  74. package/dist/generated/dsl/handoffs.js.map +1 -0
  75. package/dist/generated/dsl/index.d.ts +13 -0
  76. package/dist/generated/dsl/index.d.ts.map +1 -0
  77. package/dist/generated/dsl/index.js +10 -0
  78. package/dist/generated/dsl/index.js.map +1 -0
  79. package/dist/generated/dsl/tasks.d.ts +23 -0
  80. package/dist/generated/dsl/tasks.d.ts.map +1 -0
  81. package/dist/generated/dsl/tasks.js +25 -0
  82. package/dist/generated/dsl/tasks.js.map +1 -0
  83. package/dist/generated/dsl/workflows.d.ts +31 -0
  84. package/dist/generated/dsl/workflows.d.ts.map +1 -0
  85. package/dist/generated/dsl/workflows.js +32 -0
  86. package/dist/generated/dsl/workflows.js.map +1 -0
  87. package/dist/generated/index.d.ts +7 -0
  88. package/dist/generated/index.d.ts.map +1 -0
  89. package/dist/generated/index.js +7 -0
  90. package/dist/generated/index.js.map +1 -0
  91. package/dist/generated/policy.d.ts +146 -0
  92. package/dist/generated/policy.d.ts.map +1 -0
  93. package/dist/generated/policy.js +236 -0
  94. package/dist/generated/policy.js.map +1 -0
  95. package/dist/generated/program.d.ts +33 -0
  96. package/dist/generated/program.d.ts.map +1 -0
  97. package/dist/generated/program.js +92 -0
  98. package/dist/generated/program.js.map +1 -0
  99. package/dist/generated/schemas.d.ts +471 -0
  100. package/dist/generated/schemas.d.ts.map +1 -0
  101. package/dist/generated/schemas.js +640 -0
  102. package/dist/generated/schemas.js.map +1 -0
  103. package/dist/generated/types.d.ts +187 -0
  104. package/dist/generated/types.d.ts.map +1 -0
  105. package/dist/generated/types.js +3 -0
  106. package/dist/generated/types.js.map +1 -0
  107. package/dist/index.d.ts +4 -3
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +3 -5
  110. package/dist/index.js.map +1 -0
  111. package/package.json +47 -10
  112. package/schemas/2026A.config.json +47 -0
  113. package/schemas/2026A.json +116 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export interface AuditOptions {
2
+ config?: string;
3
+ adapter?: string;
4
+ model?: string;
5
+ showPrompt?: boolean;
6
+ dryRun?: boolean;
7
+ failOn?: string;
8
+ output?: string;
9
+ reportFormat?: string;
10
+ }
11
+ export declare function handleAudit(options: AuditOptions): Promise<void>;
12
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDtE"}
@@ -0,0 +1,122 @@
1
+ import { writeFileSync } from "node:fs";
2
+ import { stringify as yamlStringify } from "yaml";
3
+ import { loadDocument, resolveDocument } from "../core/index.js";
4
+ const EXIT_FINDINGS = 10;
5
+ const EXIT_RUNTIME_MISSING = 11;
6
+ const EXIT_ADAPTER_ERROR = 12;
7
+ export async function handleAudit(options) {
8
+ let loadResult;
9
+ try {
10
+ loadResult = loadDocument(options.config);
11
+ }
12
+ catch (err) {
13
+ process.stderr.write(`Error: ${err.message}\n`);
14
+ process.exit(3);
15
+ }
16
+ const resolved = resolveDocument(loadResult);
17
+ const context = buildAuditContext(resolved);
18
+ if (options.showPrompt || options.dryRun) {
19
+ console.log(context);
20
+ return;
21
+ }
22
+ const { runAgentTask } = await import("../agents/orchestrator.js");
23
+ let result;
24
+ try {
25
+ result = await runAgentTask(context, "audit-artifact-definitions", {
26
+ adapter: options.adapter ?? "mock",
27
+ model: options.model,
28
+ }, {
29
+ dryRun: false,
30
+ failOn: options.failOn ?? "error",
31
+ });
32
+ }
33
+ catch (err) {
34
+ const exitCode = err.exitCode;
35
+ if (exitCode === EXIT_RUNTIME_MISSING) {
36
+ process.stderr.write(err.message + "\n");
37
+ process.exit(EXIT_RUNTIME_MISSING);
38
+ }
39
+ if (exitCode === EXIT_ADAPTER_ERROR) {
40
+ process.stderr.write(`Adapter error: ${err.message}\n`);
41
+ process.exit(EXIT_ADAPTER_ERROR);
42
+ }
43
+ throw err;
44
+ }
45
+ const fmt = options.reportFormat ?? "text";
46
+ const content = formatResult(result, fmt);
47
+ if (options.output) {
48
+ writeFileSync(options.output, content, "utf-8");
49
+ process.stderr.write(`Report written to ${options.output}\n`);
50
+ }
51
+ else {
52
+ console.log(content);
53
+ }
54
+ const exitCode = computeExitCode(result, options.failOn ?? "error");
55
+ if (exitCode !== 0)
56
+ process.exit(exitCode);
57
+ }
58
+ function buildAuditContext(resolved) {
59
+ const lines = [
60
+ "# Artifact Definitions Audit",
61
+ "",
62
+ `## System: ${resolved.system.id}`,
63
+ resolved.system.name ? `Name: ${resolved.system.name}` : "",
64
+ "",
65
+ `## Artifacts (${Object.keys(resolved.artifacts).length} total)`,
66
+ "",
67
+ ];
68
+ for (const [id, artifact] of Object.entries(resolved.artifacts)) {
69
+ lines.push(`### ${id}`);
70
+ lines.push(`- type: ${artifact.type}`);
71
+ lines.push(`- authority: ${artifact.authority}`);
72
+ lines.push(`- manual_edit: ${artifact.manual_edit}`);
73
+ lines.push(`- change_control: ${artifact.change_control}`);
74
+ lines.push(`- path_patterns: ${artifact.path_patterns.join(", ")}`);
75
+ if (artifact.exclude_patterns?.length) {
76
+ lines.push(`- exclude_patterns: ${artifact.exclude_patterns.join(", ")}`);
77
+ }
78
+ if (artifact.description) {
79
+ lines.push(`- description: ${artifact.description}`);
80
+ }
81
+ lines.push("");
82
+ }
83
+ lines.push("## Instructions");
84
+ lines.push("");
85
+ lines.push("Analyze these artifact definitions for:");
86
+ lines.push("1. Naming consistency (kebab-case, descriptive IDs)");
87
+ lines.push("2. Authority appropriateness for each artifact type");
88
+ lines.push("3. Missing common file types that should be tracked");
89
+ lines.push("4. Potential path_patterns overlaps or gaps");
90
+ lines.push("5. Appropriate manual_edit / change_control settings");
91
+ lines.push("");
92
+ return lines.filter((l) => l !== undefined).join("\n");
93
+ }
94
+ function formatResult(result, fmt) {
95
+ if (result.status === "error") {
96
+ const msg = result.errorMessage ?? "Unknown error";
97
+ if (fmt === "json")
98
+ return JSON.stringify({ error: msg }, null, 2);
99
+ if (fmt === "yaml")
100
+ return yamlStringify({ error: msg });
101
+ return `Error: ${msg}`;
102
+ }
103
+ if (fmt === "json")
104
+ return JSON.stringify(result.data ?? result.raw, null, 2);
105
+ if (fmt === "yaml")
106
+ return yamlStringify(result.data ?? result.raw);
107
+ return result.raw || JSON.stringify(result.data, null, 2);
108
+ }
109
+ function computeExitCode(result, failOn) {
110
+ if (result.status !== "success")
111
+ return 1;
112
+ const data = result.data;
113
+ if (!data?.findings)
114
+ return 0;
115
+ const levels = ["info", "warning", "error", "critical"];
116
+ const threshold = levels.indexOf(failOn);
117
+ if (threshold < 0)
118
+ return 0;
119
+ const hasBlockingFindings = data.findings.some((f) => levels.indexOf(f.severity) >= threshold);
120
+ return hasBlockingFindings ? EXIT_FINDINGS : 0;
121
+ }
122
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function handleExplain(filePath: string, options: {
2
+ config?: string;
3
+ format?: string;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/cli/explain.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CAiDf"}
@@ -0,0 +1,47 @@
1
+ import { stringify as yamlStringify } from "yaml";
2
+ import { loadDocument, resolveDocument, lookupByPath } from "../core/index.js";
3
+ export async function handleExplain(filePath, options) {
4
+ let loadResult;
5
+ try {
6
+ loadResult = loadDocument(options.config);
7
+ }
8
+ catch (err) {
9
+ process.stderr.write(`Error: ${err.message}\n`);
10
+ process.exit(3);
11
+ }
12
+ const resolved = resolveDocument(loadResult);
13
+ const matches = lookupByPath(filePath, resolved.artifacts);
14
+ if (matches.length === 0) {
15
+ process.stderr.write(`No artifact matches: ${filePath}\n`);
16
+ process.exit(4);
17
+ }
18
+ if (matches.length > 1) {
19
+ process.stderr.write(`Overlap detected: ${filePath}\n`);
20
+ process.stderr.write(` matches: ${matches.map((m) => m.id).join(", ")}\n`);
21
+ process.stderr.write(" Use exclude_patterns to resolve the ambiguity.\n");
22
+ process.exit(2);
23
+ }
24
+ const { id, artifact } = matches[0];
25
+ const format = options.format ?? "text";
26
+ if (format === "json") {
27
+ console.log(JSON.stringify({ id, ...artifact }, null, 2));
28
+ }
29
+ else if (format === "yaml") {
30
+ console.log(yamlStringify({ [id]: artifact }));
31
+ }
32
+ else {
33
+ console.log(filePath);
34
+ console.log(` artifact: ${id}`);
35
+ console.log(` type: ${artifact.type}`);
36
+ console.log(` authority: ${artifact.authority}`);
37
+ console.log(` manual edit: ${artifact.manual_edit}`);
38
+ console.log(` change control: ${artifact.change_control}`);
39
+ if (artifact.visibility !== "internal") {
40
+ console.log(` visibility: ${artifact.visibility}`);
41
+ }
42
+ if (artifact.description) {
43
+ console.log(` description: ${artifact.description}`);
44
+ }
45
+ }
46
+ }
47
+ //# sourceMappingURL=explain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/cli/explain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE/E,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,OAA6C;IAE7C,IAAI,UAAU,CAAC;IACf,IAAI,CAAC;QACH,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,QAAQ,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,QAAQ,IAAI,CAAC,CAAC;QACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAc,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACtD,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oDAAoD,CACrD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IAExC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;QAC5D,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { fileURLToPath } from "node:url";
4
+ import { dirname, resolve } from "node:path";
5
+ import { createProgram } from "../generated/program.js";
6
+ import { handleValidate } from "./validate.js";
7
+ import { handleResolve } from "./resolve.js";
8
+ import { handleList } from "./list.js";
9
+ import { handleExplain } from "./explain.js";
10
+ import { handleAudit } from "./audit.js";
11
+ const __dirname = dirname(fileURLToPath(import.meta.url));
12
+ const pkg = JSON.parse(readFileSync(resolve(__dirname, "../../package.json"), "utf-8"));
13
+ const handlers = {
14
+ validate: async (opts) => {
15
+ await handleValidate(opts);
16
+ },
17
+ resolve: async (opts) => {
18
+ await handleResolve(opts);
19
+ },
20
+ list: async (opts) => {
21
+ await handleList(opts);
22
+ },
23
+ explain: async (path, opts) => {
24
+ if (!path) {
25
+ console.error("Error: <path> argument is required");
26
+ process.exit(1);
27
+ }
28
+ await handleExplain(path, opts);
29
+ },
30
+ audit: async (opts) => {
31
+ await handleAudit(opts);
32
+ },
33
+ };
34
+ createProgram(handlers, pkg.version).parse();
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAwB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CACzC,CAAC;AAEzB,MAAM,QAAQ,GAAoB;IAChC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACpB,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF,CAAC;AAEF,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function handleList(options: {
2
+ config?: string;
3
+ authority?: string;
4
+ path?: string;
5
+ format?: string;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/cli/list.ts"],"names":[],"mappings":"AAQA,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDhB"}
@@ -0,0 +1,49 @@
1
+ import { stringify as yamlStringify } from "yaml";
2
+ import { loadDocument, resolveDocument, lookupByPath, } from "../core/index.js";
3
+ export async function handleList(options) {
4
+ let loadResult;
5
+ try {
6
+ loadResult = loadDocument(options.config);
7
+ }
8
+ catch (err) {
9
+ process.stderr.write(`Error: ${err.message}\n`);
10
+ process.exit(3);
11
+ }
12
+ const resolved = resolveDocument(loadResult);
13
+ let entries = Object.entries(resolved.artifacts);
14
+ if (options.authority) {
15
+ entries = entries.filter(([, a]) => a.authority === options.authority);
16
+ }
17
+ if (options.path) {
18
+ const matches = lookupByPath(options.path, resolved.artifacts);
19
+ entries = matches.map((m) => [m.id, m.artifact]);
20
+ }
21
+ const format = options.format ?? "text";
22
+ if (format === "json") {
23
+ const obj = Object.fromEntries(entries);
24
+ console.log(JSON.stringify(obj, null, 2));
25
+ }
26
+ else if (format === "yaml") {
27
+ const obj = Object.fromEntries(entries);
28
+ console.log(yamlStringify(obj));
29
+ }
30
+ else {
31
+ if (entries.length === 0) {
32
+ console.log("No artifacts found.");
33
+ return;
34
+ }
35
+ for (const [id, artifact] of entries) {
36
+ const desc = artifact.description ? ` — ${artifact.description}` : "";
37
+ console.log(`${id} [${artifact.authority}]${desc}`);
38
+ console.log(` type: ${artifact.type}`);
39
+ console.log(` manual_edit: ${artifact.manual_edit}`);
40
+ console.log(` change_control: ${artifact.change_control}`);
41
+ console.log(` path_patterns: ${artifact.path_patterns.join(", ")}`);
42
+ if (artifact.exclude_patterns?.length) {
43
+ console.log(` exclude_patterns: ${artifact.exclude_patterns.join(", ")}`);
44
+ }
45
+ console.log();
46
+ }
47
+ }
48
+ }
49
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/cli/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function handleResolve(options: {
2
+ config?: string;
3
+ format?: string;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/cli/resolve.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhB"}
@@ -0,0 +1,21 @@
1
+ import { stringify as yamlStringify } from "yaml";
2
+ import { loadDocument, resolveDocument } from "../core/index.js";
3
+ export async function handleResolve(options) {
4
+ let loadResult;
5
+ try {
6
+ loadResult = loadDocument(options.config);
7
+ }
8
+ catch (err) {
9
+ process.stderr.write(`Error: ${err.message}\n`);
10
+ process.exit(3);
11
+ }
12
+ const resolved = resolveDocument(loadResult);
13
+ const format = options.format ?? "yaml";
14
+ if (format === "json") {
15
+ console.log(JSON.stringify(resolved, null, 2));
16
+ }
17
+ else {
18
+ console.log(yamlStringify(resolved));
19
+ }
20
+ }
21
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/cli/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAGnC;IACC,IAAI,UAAU,CAAC;IACf,IAAI,CAAC;QACH,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function handleValidate(options: {
2
+ config?: string;
3
+ checkFiles?: boolean;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAEA,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoChB"}
@@ -0,0 +1,36 @@
1
+ import { loadDocument, validateDocument } from "../core/index.js";
2
+ export async function handleValidate(options) {
3
+ let loadResult;
4
+ try {
5
+ loadResult = loadDocument(options.config);
6
+ }
7
+ catch (err) {
8
+ process.stderr.write(`Error: ${err.message}\n`);
9
+ process.exit(3);
10
+ }
11
+ const result = await validateDocument(loadResult, {
12
+ checkFiles: options.checkFiles,
13
+ });
14
+ if (result.valid) {
15
+ process.stderr.write("✓ Validation passed\n");
16
+ if (options.checkFiles) {
17
+ process.stderr.write("✓ No file overlaps detected\n");
18
+ }
19
+ }
20
+ else {
21
+ const hasOverlaps = result.overlaps.length > 0;
22
+ const hasSchemaErrors = result.diagnostics.some((d) => d.severity === "error" && !result.overlaps.some((o) => d.path === o.path));
23
+ process.stderr.write("✗ Validation failed\n\n");
24
+ for (const d of result.diagnostics) {
25
+ const prefix = d.severity === "error" ? "ERROR" : "WARN";
26
+ process.stderr.write(` ${prefix}: ${d.message}\n`);
27
+ if (d.path)
28
+ process.stderr.write(` at ${d.path}\n`);
29
+ }
30
+ if (hasOverlaps && !hasSchemaErrors) {
31
+ process.exit(2);
32
+ }
33
+ process.exit(1);
34
+ }
35
+ }
36
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAGpC;IACC,IAAI,UAAU,CAAC;IACf,IAAI,CAAC;QACH,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE;QAChD,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/C,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CACjF,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,CAAC,IAAI;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { ArtifactContractsDocumentSchema, ArtifactContractsConfigSchema, ArtifactDefinitionSchema, SystemSchema, AuthoritySchema, ManualEditSchema, ChangeControlSchema, VisibilitySchema, ARTIFACT_ID_PATTERN, applyDefaults, } from "./schema.js";
2
+ export type { Authority, ManualEdit, ChangeControl, Visibility, ArtifactDefinition, ArtifactContractsDocument, ArtifactContractsConfig, ResolvedArtifact, } from "./schema.js";
3
+ export { loadConfig, loadDocument, resolveDocument, } from "./resolver.js";
4
+ export type { LoadResult, ResolvedDocument } from "./resolver.js";
5
+ export { matchesArtifact } from "./matcher.js";
6
+ export { lookupByPath, detectOverlaps, } from "./lookup.js";
7
+ export type { LookupResult, LookupOverlap } from "./lookup.js";
8
+ export { validateDocument } from "./validator.js";
9
+ export type { Diagnostic, ValidationResult } from "./validator.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,wBAAwB,EACxB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,SAAS,EACT,UAAU,EACV,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EACL,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { ArtifactContractsDocumentSchema, ArtifactContractsConfigSchema, ArtifactDefinitionSchema, SystemSchema, AuthoritySchema, ManualEditSchema, ChangeControlSchema, VisibilitySchema, ARTIFACT_ID_PATTERN, applyDefaults, } from "./schema.js";
2
+ export { loadConfig, loadDocument, resolveDocument, } from "./resolver.js";
3
+ export { matchesArtifact } from "./matcher.js";
4
+ export { lookupByPath, detectOverlaps, } from "./lookup.js";
5
+ export { validateDocument } from "./validator.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,wBAAwB,EACxB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AAarB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EACL,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ResolvedArtifact } from "./schema.js";
2
+ export interface LookupResult {
3
+ id: string;
4
+ artifact: ResolvedArtifact;
5
+ }
6
+ export interface LookupOverlap {
7
+ path: string;
8
+ matchingArtifacts: string[];
9
+ }
10
+ export declare function lookupByPath(filePath: string, artifacts: Record<string, ResolvedArtifact>): LookupResult[];
11
+ export declare function detectOverlaps(filePaths: string[], artifacts: Record<string, ResolvedArtifact>): LookupOverlap[];
12
+ //# sourceMappingURL=lookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../src/core/lookup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAC1C,YAAY,EAAE,CAUhB;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAC1C,aAAa,EAAE,CAcjB"}
@@ -0,0 +1,24 @@
1
+ import { matchesArtifact } from "./matcher.js";
2
+ export function lookupByPath(filePath, artifacts) {
3
+ const matches = [];
4
+ for (const [id, artifact] of Object.entries(artifacts)) {
5
+ if (matchesArtifact(filePath, artifact)) {
6
+ matches.push({ id, artifact });
7
+ }
8
+ }
9
+ return matches;
10
+ }
11
+ export function detectOverlaps(filePaths, artifacts) {
12
+ const overlaps = [];
13
+ for (const filePath of filePaths) {
14
+ const matches = lookupByPath(filePath, artifacts);
15
+ if (matches.length > 1) {
16
+ overlaps.push({
17
+ path: filePath,
18
+ matchingArtifacts: matches.map((m) => m.id),
19
+ });
20
+ }
21
+ }
22
+ return overlaps;
23
+ }
24
+ //# sourceMappingURL=lookup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/core/lookup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAY/C,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,SAA2C;IAE3C,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,IAAI,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAAmB,EACnB,SAA2C;IAE3C,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ArtifactDefinition, ResolvedArtifact } from "./schema.js";
2
+ export declare function matchesArtifact(filePath: string, artifact: ArtifactDefinition | ResolvedArtifact): boolean;
3
+ //# sourceMappingURL=matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../src/core/matcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAExE,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,kBAAkB,GAAG,gBAAgB,GAC9C,OAAO,CAgBT"}
@@ -0,0 +1,14 @@
1
+ import { minimatch } from "minimatch";
2
+ export function matchesArtifact(filePath, artifact) {
3
+ const normalizedPath = filePath.replace(/\\/g, "/");
4
+ const included = artifact.path_patterns.some((pattern) => minimatch(normalizedPath, pattern, { dot: true }));
5
+ if (!included)
6
+ return false;
7
+ if (artifact.exclude_patterns) {
8
+ const excluded = artifact.exclude_patterns.some((pattern) => minimatch(normalizedPath, pattern, { dot: true }));
9
+ if (excluded)
10
+ return false;
11
+ }
12
+ return true;
13
+ }
14
+ //# sourceMappingURL=matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/core/matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,QAA+C;IAE/C,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CACvD,SAAS,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAClD,CAAC;IACF,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC1D,SAAS,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAClD,CAAC;QACF,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAC;IAC7B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type ArtifactContractsDocument, type ArtifactContractsConfig, type ResolvedArtifact } from "./schema.js";
2
+ export interface LoadResult {
3
+ document: ArtifactContractsDocument;
4
+ config: ArtifactContractsConfig | null;
5
+ configDir: string;
6
+ }
7
+ export interface ResolvedDocument {
8
+ artifactContracts: string;
9
+ system: {
10
+ id: string;
11
+ name?: string;
12
+ };
13
+ artifacts: Record<string, ResolvedArtifact>;
14
+ }
15
+ export declare function loadConfig(configPath?: string): ArtifactContractsConfig | null;
16
+ export declare function loadDocument(configPath?: string): LoadResult;
17
+ export declare function resolveDocument(result: LoadResult): ResolvedDocument;
18
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAE5B,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,yBAAyB,CAAC;IACpC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC7C;AAED,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAkB9E;AAED,wBAAgB,YAAY,CAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,UAAU,CAmBZ;AAuDD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAapE"}