wabachi 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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/dist/architecture/canon/authority.d.ts +35 -0
  4. package/dist/architecture/canon/authority.js +76 -0
  5. package/dist/architecture/canon/authority.js.map +1 -0
  6. package/dist/architecture/canon/boundaries.d.ts +31 -0
  7. package/dist/architecture/canon/boundaries.js +73 -0
  8. package/dist/architecture/canon/boundaries.js.map +1 -0
  9. package/dist/architecture/canon/codec.d.ts +10 -0
  10. package/dist/architecture/canon/codec.js +516 -0
  11. package/dist/architecture/canon/codec.js.map +1 -0
  12. package/dist/architecture/canon/constraints.d.ts +60 -0
  13. package/dist/architecture/canon/constraints.js +116 -0
  14. package/dist/architecture/canon/constraints.js.map +1 -0
  15. package/dist/architecture/canon/decisions.d.ts +62 -0
  16. package/dist/architecture/canon/decisions.js +192 -0
  17. package/dist/architecture/canon/decisions.js.map +1 -0
  18. package/dist/architecture/canon/deployment.d.ts +89 -0
  19. package/dist/architecture/canon/deployment.js +156 -0
  20. package/dist/architecture/canon/deployment.js.map +1 -0
  21. package/dist/architecture/canon/document.d.ts +60 -0
  22. package/dist/architecture/canon/document.js +106 -0
  23. package/dist/architecture/canon/document.js.map +1 -0
  24. package/dist/architecture/canon/elements.d.ts +21 -0
  25. package/dist/architecture/canon/elements.js +87 -0
  26. package/dist/architecture/canon/elements.js.map +1 -0
  27. package/dist/architecture/canon/flows.d.ts +37 -0
  28. package/dist/architecture/canon/flows.js +82 -0
  29. package/dist/architecture/canon/flows.js.map +1 -0
  30. package/dist/architecture/canon/identity.d.ts +45 -0
  31. package/dist/architecture/canon/identity.js +83 -0
  32. package/dist/architecture/canon/identity.js.map +1 -0
  33. package/dist/architecture/canon/relationships.d.ts +48 -0
  34. package/dist/architecture/canon/relationships.js +181 -0
  35. package/dist/architecture/canon/relationships.js.map +1 -0
  36. package/dist/architecture/canon/repository-mappings.d.ts +51 -0
  37. package/dist/architecture/canon/repository-mappings.js +134 -0
  38. package/dist/architecture/canon/repository-mappings.js.map +1 -0
  39. package/dist/architecture/canon/responsibilities.d.ts +40 -0
  40. package/dist/architecture/canon/responsibilities.js +89 -0
  41. package/dist/architecture/canon/responsibilities.js.map +1 -0
  42. package/dist/architecture/canon/validate.d.ts +14 -0
  43. package/dist/architecture/canon/validate.js +389 -0
  44. package/dist/architecture/canon/validate.js.map +1 -0
  45. package/dist/architecture/canon/views.d.ts +101 -0
  46. package/dist/architecture/canon/views.js +182 -0
  47. package/dist/architecture/canon/views.js.map +1 -0
  48. package/dist/architecture/cli.d.ts +2 -0
  49. package/dist/architecture/cli.js +158 -0
  50. package/dist/architecture/cli.js.map +1 -0
  51. package/dist/architecture/documentation/html.d.ts +3 -0
  52. package/dist/architecture/documentation/html.js +143 -0
  53. package/dist/architecture/documentation/html.js.map +1 -0
  54. package/dist/architecture/documentation/model.d.ts +46 -0
  55. package/dist/architecture/documentation/model.js +13 -0
  56. package/dist/architecture/documentation/model.js.map +1 -0
  57. package/dist/architecture/documentation/project.d.ts +4 -0
  58. package/dist/architecture/documentation/project.js +166 -0
  59. package/dist/architecture/documentation/project.js.map +1 -0
  60. package/dist/architecture/documentation/site.d.ts +43 -0
  61. package/dist/architecture/documentation/site.js +147 -0
  62. package/dist/architecture/documentation/site.js.map +1 -0
  63. package/dist/architecture/projection/structurizr-export.d.ts +65 -0
  64. package/dist/architecture/projection/structurizr-export.js +136 -0
  65. package/dist/architecture/projection/structurizr-export.js.map +1 -0
  66. package/dist/architecture/projection/structurizr.d.ts +34 -0
  67. package/dist/architecture/projection/structurizr.js +667 -0
  68. package/dist/architecture/projection/structurizr.js.map +1 -0
  69. package/dist/cli.d.ts +1 -0
  70. package/dist/cli.js +143 -0
  71. package/dist/cli.js.map +1 -0
  72. package/dist/index.d.ts +2 -0
  73. package/dist/index.js +6 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/runtime/correlation.d.ts +143 -0
  76. package/dist/runtime/correlation.js +919 -0
  77. package/dist/runtime/correlation.js.map +1 -0
  78. package/dist/runtime/facts.d.ts +138 -0
  79. package/dist/runtime/facts.js +614 -0
  80. package/dist/runtime/facts.js.map +1 -0
  81. package/dist/runtime/fixtureProvider.d.ts +10 -0
  82. package/dist/runtime/fixtureProvider.js +30 -0
  83. package/dist/runtime/fixtureProvider.js.map +1 -0
  84. package/dist/runtime/graftProvider.d.ts +8 -0
  85. package/dist/runtime/graftProvider.js +107 -0
  86. package/dist/runtime/graftProvider.js.map +1 -0
  87. package/dist/runtime/graftWiring.d.ts +30 -0
  88. package/dist/runtime/graftWiring.js +3 -0
  89. package/dist/runtime/graftWiring.js.map +1 -0
  90. package/dist/runtime/manifest.d.ts +17 -0
  91. package/dist/runtime/manifest.js +39 -0
  92. package/dist/runtime/manifest.js.map +1 -0
  93. package/dist/runtime/matrix.d.ts +337 -0
  94. package/dist/runtime/matrix.js +1485 -0
  95. package/dist/runtime/matrix.js.map +1 -0
  96. package/dist/runtime/observation.d.ts +36 -0
  97. package/dist/runtime/observation.js +3 -0
  98. package/dist/runtime/observation.js.map +1 -0
  99. package/dist/runtime/provider.d.ts +34 -0
  100. package/dist/runtime/provider.js +2 -0
  101. package/dist/runtime/provider.js.map +1 -0
  102. package/dist/runtime/repository.d.ts +20 -0
  103. package/dist/runtime/repository.js +55 -0
  104. package/dist/runtime/repository.js.map +1 -0
  105. package/dist/runtime/run.d.ts +21 -0
  106. package/dist/runtime/run.js +80 -0
  107. package/dist/runtime/run.js.map +1 -0
  108. package/dist/runtime/scipProvider.d.ts +11 -0
  109. package/dist/runtime/scipProvider.js +126 -0
  110. package/dist/runtime/scipProvider.js.map +1 -0
  111. package/dist/runtime/typescriptProvider.d.ts +10 -0
  112. package/dist/runtime/typescriptProvider.js +289 -0
  113. package/dist/runtime/typescriptProvider.js.map +1 -0
  114. package/dist/runtime/workflow.d.ts +30 -0
  115. package/dist/runtime/workflow.js +153 -0
  116. package/dist/runtime/workflow.js.map +1 -0
  117. package/package.json +72 -0
@@ -0,0 +1,289 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import ts from "typescript";
4
+ import { OBSERVATION_SCHEMA_VERSION, } from "./observation.js";
5
+ /**
6
+ * Compiler-authoritative semantic evidence provider (Issue #7). Discovers
7
+ * the workspace's TypeScript project configuration, builds a Program using
8
+ * full TypeScript compiler/TypeChecker semantics, and emits both lossless
9
+ * raw evidence and normalized observations (Issue #5 envelope) for
10
+ * declarations/symbols, references, imports/exports, type relationships,
11
+ * extends/implements, and statically resolvable calls.
12
+ */
13
+ export function createTypeScriptProvider() {
14
+ return {
15
+ identity: { id: "typescript", version: ts.version, determinism: "deterministic" },
16
+ async isAvailable(context) {
17
+ return findTsconfig(context.workspaceRoot) !== undefined;
18
+ },
19
+ async execute(context) {
20
+ const startedAt = new Date().toISOString();
21
+ const tsconfigPath = findTsconfig(context.workspaceRoot);
22
+ if (tsconfigPath === undefined) {
23
+ throw new Error("no tsconfig.json found in workspace");
24
+ }
25
+ const configFile = ts.readConfigFile(tsconfigPath, ts.sys.readFile);
26
+ if (configFile.error) {
27
+ throw new Error(formatDiagnostic(configFile.error));
28
+ }
29
+ const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(tsconfigPath));
30
+ const program = ts.createProgram({
31
+ rootNames: parsed.fileNames,
32
+ options: parsed.options,
33
+ });
34
+ const checker = program.getTypeChecker();
35
+ const rootFileNames = new Set(parsed.fileNames.map((file) => path.resolve(file)));
36
+ const sourceFiles = program
37
+ .getSourceFiles()
38
+ .filter((sf) => !sf.isDeclarationFile && rootFileNames.has(path.resolve(sf.fileName)));
39
+ const collector = new ObservationCollector(checker, context);
40
+ for (const sourceFile of sourceFiles) {
41
+ collector.visitSourceFile(sourceFile);
42
+ }
43
+ const diagnostics = ts.getPreEmitDiagnostics(program).map((diagnostic) => formatDiagnosticEntry(diagnostic));
44
+ const metaRelativePath = "meta.json";
45
+ const meta = {
46
+ typescriptVersion: ts.version,
47
+ tsconfigPath: path.relative(context.workspaceRoot, tsconfigPath),
48
+ compilerOptions: sanitizeCompilerOptions(parsed.options),
49
+ rootFiles: parsed.fileNames.map((file) => path.relative(context.workspaceRoot, file)).sort(),
50
+ diagnosticCount: diagnostics.length,
51
+ };
52
+ await writeFile(path.join(context.artifactRoot, metaRelativePath), `${JSON.stringify(meta, null, 2)}\n`, "utf8");
53
+ const diagnosticsRelativePath = "diagnostics.json";
54
+ await writeFile(path.join(context.artifactRoot, diagnosticsRelativePath), `${JSON.stringify(diagnostics, null, 2)}\n`, "utf8");
55
+ const observationsRelativePath = "observations.jsonl";
56
+ const observationsLines = collector.observations.map((observation) => JSON.stringify(observation));
57
+ await writeFile(path.join(context.artifactRoot, observationsRelativePath), observationsLines.length > 0 ? `${observationsLines.join("\n")}\n` : "", "utf8");
58
+ const nativeDir = "native";
59
+ await mkdir(path.join(context.artifactRoot, nativeDir), { recursive: true });
60
+ const nativeArtifacts = [];
61
+ for (const [relPath, symbols] of collector.nativeBySourceFile) {
62
+ const nativeRelativePath = path.join(nativeDir, `${sanitizeFileName(relPath)}.json`);
63
+ await writeFile(path.join(context.artifactRoot, nativeRelativePath), `${JSON.stringify(symbols, null, 2)}\n`, "utf8");
64
+ nativeArtifacts.push(nativeRelativePath);
65
+ }
66
+ return {
67
+ status: "ok",
68
+ artifacts: [metaRelativePath, diagnosticsRelativePath, observationsRelativePath, ...nativeArtifacts],
69
+ observationArtifacts: [observationsRelativePath],
70
+ startedAt,
71
+ finishedAt: new Date().toISOString(),
72
+ };
73
+ },
74
+ };
75
+ }
76
+ function findTsconfig(workspaceRoot) {
77
+ const candidate = path.join(workspaceRoot, "tsconfig.json");
78
+ return ts.sys.fileExists(candidate) ? candidate : undefined;
79
+ }
80
+ function sanitizeCompilerOptions(options) {
81
+ const sanitized = {};
82
+ for (const [key, value] of Object.entries(options)) {
83
+ if (key === "configFilePath")
84
+ continue;
85
+ if (typeof value === "object" && value !== null)
86
+ continue;
87
+ sanitized[key] = value;
88
+ }
89
+ return sanitized;
90
+ }
91
+ function sanitizeFileName(relPath) {
92
+ return relPath.replace(/[\\/]/gu, "__");
93
+ }
94
+ function formatDiagnostic(diagnostic) {
95
+ return ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
96
+ }
97
+ function formatDiagnosticEntry(diagnostic) {
98
+ const entry = {
99
+ category: ts.DiagnosticCategory[diagnostic.category],
100
+ code: diagnostic.code,
101
+ message: ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n"),
102
+ };
103
+ if (diagnostic.file && diagnostic.start !== undefined) {
104
+ const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
105
+ entry.file = diagnostic.file.fileName;
106
+ entry.line = line + 1;
107
+ entry.column = character + 1;
108
+ }
109
+ return entry;
110
+ }
111
+ /** Declarations that carry a symbol worth emitting as a `defines` observation. */
112
+ const NAMED_DECLARATION_KINDS = new Set([
113
+ ts.SyntaxKind.ClassDeclaration,
114
+ ts.SyntaxKind.InterfaceDeclaration,
115
+ ts.SyntaxKind.TypeAliasDeclaration,
116
+ ts.SyntaxKind.EnumDeclaration,
117
+ ts.SyntaxKind.FunctionDeclaration,
118
+ ts.SyntaxKind.MethodDeclaration,
119
+ ts.SyntaxKind.MethodSignature,
120
+ ts.SyntaxKind.PropertyDeclaration,
121
+ ts.SyntaxKind.PropertySignature,
122
+ ts.SyntaxKind.GetAccessor,
123
+ ts.SyntaxKind.SetAccessor,
124
+ ts.SyntaxKind.VariableDeclaration,
125
+ ts.SyntaxKind.ModuleDeclaration,
126
+ ]);
127
+ class ObservationCollector {
128
+ checker;
129
+ observations = [];
130
+ nativeBySourceFile = new Map();
131
+ repository;
132
+ workspaceRoot;
133
+ providerIdentity;
134
+ constructor(checker, context) {
135
+ this.checker = checker;
136
+ this.repository = context.repository;
137
+ this.workspaceRoot = context.workspaceRoot;
138
+ this.providerIdentity = { id: "typescript", version: ts.version, determinism: "deterministic" };
139
+ }
140
+ visitSourceFile(sourceFile) {
141
+ const relPath = path.relative(this.workspaceRoot, sourceFile.fileName);
142
+ const nativeEntries = [];
143
+ this.nativeBySourceFile.set(relPath, nativeEntries);
144
+ const visit = (node) => {
145
+ if (NAMED_DECLARATION_KINDS.has(node.kind)) {
146
+ this.emitDefinition(sourceFile, node, nativeEntries);
147
+ }
148
+ if (ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) {
149
+ this.emitHeritage(sourceFile, node);
150
+ }
151
+ if (ts.isImportDeclaration(node)) {
152
+ this.emitImport(sourceFile, node);
153
+ }
154
+ if (ts.isExportDeclaration(node) || ts.isExportAssignment(node)) {
155
+ this.emitExport(sourceFile, node);
156
+ }
157
+ if (ts.isCallExpression(node)) {
158
+ this.emitCall(sourceFile, node);
159
+ }
160
+ ts.forEachChild(node, visit);
161
+ };
162
+ for (const statement of sourceFile.statements) {
163
+ if (hasExportModifier(statement)) {
164
+ this.emitModifierExport(sourceFile, statement);
165
+ }
166
+ }
167
+ ts.forEachChild(sourceFile, visit);
168
+ }
169
+ span(sourceFile, node) {
170
+ const start = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
171
+ const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());
172
+ return `L${start.line + 1}C${start.character + 1}-L${end.line + 1}C${end.character + 1}`;
173
+ }
174
+ evidence(sourceFile, node) {
175
+ return { path: path.relative(this.workspaceRoot, sourceFile.fileName), span: this.span(sourceFile, node) };
176
+ }
177
+ push(predicate, subject, object, source, native) {
178
+ this.observations.push({
179
+ schemaVersion: OBSERVATION_SCHEMA_VERSION,
180
+ subject,
181
+ predicate,
182
+ object,
183
+ provider: this.providerIdentity,
184
+ repository: this.repository,
185
+ source,
186
+ determinism: "deterministic",
187
+ providerNative: native,
188
+ });
189
+ }
190
+ emitDefinition(sourceFile, node, nativeEntries) {
191
+ if (node.name === undefined || !isIdentifierLike(node.name))
192
+ return;
193
+ const symbol = this.checker.getSymbolAtLocation(node.name);
194
+ const name = node.name.getText(sourceFile);
195
+ const kind = ts.SyntaxKind[node.kind];
196
+ const span = this.span(sourceFile, node);
197
+ const qualifiedName = symbol ? this.checker.getFullyQualifiedName(symbol) : name;
198
+ const symbolFlags = symbol ? (ts.SymbolFlags[symbol.flags] ?? symbol.flags) : undefined;
199
+ const typeText = symbol ? safeTypeToString(this.checker, symbol, node) : undefined;
200
+ nativeEntries.push({ kind, name, qualifiedName, symbolFlags, type: typeText, span });
201
+ const relPath = path.relative(this.workspaceRoot, sourceFile.fileName);
202
+ this.push("defines", { id: relPath, kind: "module" }, { id: qualifiedName, kind }, this.evidence(sourceFile, node), { kind, name, qualifiedName, symbolFlags, type: typeText, span });
203
+ }
204
+ emitHeritage(sourceFile, node) {
205
+ if (node.name === undefined)
206
+ return;
207
+ const subjectSymbol = this.checker.getSymbolAtLocation(node.name);
208
+ const subjectName = subjectSymbol
209
+ ? this.checker.getFullyQualifiedName(subjectSymbol)
210
+ : node.name.getText(sourceFile);
211
+ const subjectKind = ts.SyntaxKind[node.kind];
212
+ for (const clause of node.heritageClauses ?? []) {
213
+ const predicate = clause.token === ts.SyntaxKind.ExtendsKeyword ? "extends" : "implements";
214
+ for (const typeExpr of clause.types) {
215
+ const objectName = typeExpr.expression.getText(sourceFile);
216
+ const objectSymbol = this.checker.getSymbolAtLocation(typeExpr.expression);
217
+ const qualifiedObjectName = objectSymbol ? this.checker.getFullyQualifiedName(objectSymbol) : objectName;
218
+ this.push(predicate, { id: subjectName, kind: subjectKind }, { id: qualifiedObjectName, kind: "type-reference" }, this.evidence(sourceFile, typeExpr), { subjectKind, subject: subjectName, predicate, object: qualifiedObjectName });
219
+ }
220
+ }
221
+ }
222
+ emitImport(sourceFile, node) {
223
+ const moduleSpecifier = node.moduleSpecifier.getText(sourceFile).replace(/^['"]|['"]$/gu, "");
224
+ const relPath = path.relative(this.workspaceRoot, sourceFile.fileName);
225
+ this.push("imports", { id: relPath, kind: "module" }, { id: moduleSpecifier, kind: "module" }, this.evidence(sourceFile, node), { text: node.getText(sourceFile) });
226
+ }
227
+ emitExport(sourceFile, node) {
228
+ const relPath = path.relative(this.workspaceRoot, sourceFile.fileName);
229
+ const moduleSpecifier = ts.isExportDeclaration(node) && node.moduleSpecifier
230
+ ? node.moduleSpecifier.getText(sourceFile).replace(/^['"]|['"]$/gu, "")
231
+ : undefined;
232
+ this.push("exports", { id: relPath, kind: "module" }, { id: moduleSpecifier ?? relPath, kind: "module" }, this.evidence(sourceFile, node), { text: node.getText(sourceFile) });
233
+ }
234
+ emitModifierExport(sourceFile, statement) {
235
+ const relPath = path.relative(this.workspaceRoot, sourceFile.fileName);
236
+ const names = declaredNames(statement);
237
+ for (const name of names.length > 0 ? names : [relPath]) {
238
+ this.push("exports", { id: relPath, kind: "module" }, { id: name, kind: "declaration" }, this.evidence(sourceFile, statement), { text: statement.getText(sourceFile).slice(0, 200) });
239
+ }
240
+ }
241
+ emitCall(sourceFile, node) {
242
+ const signature = this.checker.getResolvedSignature(node);
243
+ const declaration = signature?.declaration;
244
+ const calleeText = node.expression.getText(sourceFile);
245
+ const relPath = path.relative(this.workspaceRoot, sourceFile.fileName);
246
+ if (!declaration || !declaration.getSourceFile()) {
247
+ // Unresolved call target (e.g. dynamic/ambient): record what the compiler can see without inventing a resolution.
248
+ return;
249
+ }
250
+ const symbol = this.checker.getSymbolAtLocation(node.expression);
251
+ const calleeName = symbol ? this.checker.getFullyQualifiedName(symbol) : calleeText;
252
+ this.push("calls", { id: `${relPath}#${this.span(sourceFile, node)}`, kind: "call-site" }, { id: calleeName, kind: "function" }, this.evidence(sourceFile, node), { calleeText });
253
+ }
254
+ }
255
+ function isIdentifierLike(node) {
256
+ return ts.isIdentifier(node);
257
+ }
258
+ function hasExportModifier(node) {
259
+ const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined;
260
+ return modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) ?? false;
261
+ }
262
+ function declaredNames(statement) {
263
+ if (ts.isVariableStatement(statement)) {
264
+ return statement.declarationList.declarations
265
+ .map((decl) => (ts.isIdentifier(decl.name) ? decl.name.text : undefined))
266
+ .filter((name) => name !== undefined);
267
+ }
268
+ if ((ts.isClassDeclaration(statement) ||
269
+ ts.isInterfaceDeclaration(statement) ||
270
+ ts.isFunctionDeclaration(statement) ||
271
+ ts.isTypeAliasDeclaration(statement) ||
272
+ ts.isEnumDeclaration(statement) ||
273
+ ts.isModuleDeclaration(statement)) &&
274
+ statement.name !== undefined &&
275
+ ts.isIdentifier(statement.name)) {
276
+ return [statement.name.text];
277
+ }
278
+ return [];
279
+ }
280
+ function safeTypeToString(checker, symbol, node) {
281
+ try {
282
+ const type = checker.getTypeOfSymbolAtLocation(symbol, node);
283
+ return checker.typeToString(type);
284
+ }
285
+ catch {
286
+ return undefined;
287
+ }
288
+ }
289
+ //# sourceMappingURL=typescriptProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescriptProvider.js","sourceRoot":"","sources":["../../src/runtime/typescriptProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type FactNormalizationResult } from "./facts.js";
2
+ import { type ProviderMatrix, type ProviderMatrixArtifactPaths } from "./matrix.js";
3
+ import type { CorrelationResult } from "./correlation.js";
4
+ import type { Provider, ProviderIdentity } from "./provider.js";
5
+ import { type RunResult } from "./run.js";
6
+ export declare const MATRIX_WORKFLOW_SCHEMA_VERSION: 1;
7
+ export interface MatrixWorkflowOptions {
8
+ readonly source: string;
9
+ /** A full, explicit commit SHA; symbolic refs are deliberately rejected. */
10
+ readonly revision: string;
11
+ readonly runRoot: string;
12
+ readonly providers: readonly Provider[];
13
+ readonly additionOrder?: readonly ProviderIdentity[];
14
+ }
15
+ export interface MatrixWorkflowResult extends RunResult {
16
+ readonly observationPath: string;
17
+ readonly normalizedFactsPath: string;
18
+ readonly correlationPath: string;
19
+ readonly matrix: ProviderMatrix;
20
+ readonly matrixPaths: ProviderMatrixArtifactPaths;
21
+ }
22
+ /**
23
+ * Executes providers once, then builds every downstream artifact exclusively
24
+ * from the persisted observation/fact artifacts. No model or provider is
25
+ * consulted during matrix generation.
26
+ */
27
+ export declare function runProviderMatrix(options: MatrixWorkflowOptions): Promise<MatrixWorkflowResult>;
28
+ /** Public type anchor for callers that persist the result for later review. */
29
+ export type MatrixNormalizationResult = FactNormalizationResult;
30
+ export type MatrixCorrelation = CorrelationResult;
@@ -0,0 +1,153 @@
1
+ import { createReadStream, createWriteStream } from "node:fs";
2
+ import { mkdir, readFile, unlink, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { pipeline as pipelineCallback } from "node:stream";
5
+ import { createGzip } from "node:zlib";
6
+ import { promisify } from "node:util";
7
+ import { FACT_SCHEMA_VERSION, normalizeFacts, validateObservationEnvelope, } from "./facts.js";
8
+ import { buildProviderMatrix, writeNormalizedFactsArtifact, writeProviderMatrixArtifacts, } from "./matrix.js";
9
+ import { OBSERVATION_SCHEMA_VERSION } from "./observation.js";
10
+ import { writeManifest } from "./manifest.js";
11
+ import { run } from "./run.js";
12
+ const pipeline = promisify(pipelineCallback);
13
+ export const MATRIX_WORKFLOW_SCHEMA_VERSION = 1;
14
+ /**
15
+ * Executes providers once, then builds every downstream artifact exclusively
16
+ * from the persisted observation/fact artifacts. No model or provider is
17
+ * consulted during matrix generation.
18
+ */
19
+ export async function runProviderMatrix(options) {
20
+ assertCommitSha(options.revision);
21
+ const runRoot = path.resolve(options.runRoot);
22
+ const configuredProviderIdentities = options.providers.map((provider) => provider.identity);
23
+ const configuredAdditionOrder = options.additionOrder ?? configuredProviderIdentities;
24
+ await mkdir(runRoot, { recursive: true });
25
+ await writeJson(path.join(runRoot, "config.json"), {
26
+ schemaVersion: MATRIX_WORKFLOW_SCHEMA_VERSION,
27
+ command: "matrix",
28
+ source: options.source,
29
+ revision: options.revision.toLowerCase(),
30
+ nodeOptions: process.env.NODE_OPTIONS ?? "default",
31
+ providers: configuredProviderIdentities.map((provider) => provider.id),
32
+ additionOrder: configuredAdditionOrder.map((provider) => provider.id),
33
+ });
34
+ const runResult = await run({
35
+ source: options.source,
36
+ revision: options.revision.toLowerCase(),
37
+ runRoot,
38
+ providers: options.providers,
39
+ });
40
+ if (runResult.manifest.repository.commitSha !== options.revision.toLowerCase()) {
41
+ throw new Error(`resolved commit ${runResult.manifest.repository.commitSha} does not equal requested SHA ${options.revision}`);
42
+ }
43
+ const observations = await readObservationArtifacts(runRoot, runResult);
44
+ const observationPath = path.join(runRoot, "normalized", "observations.json");
45
+ await writeJson(observationPath, {
46
+ schemaVersion: OBSERVATION_SCHEMA_VERSION,
47
+ repository: runResult.manifest.repository,
48
+ observations,
49
+ });
50
+ const normalized = normalizeFacts(observations, {
51
+ providers: runResult.manifest.providers.map((entry) => entry.identity),
52
+ includeComparisons: false,
53
+ });
54
+ const normalizedFactsPath = path.join(runRoot, "normalized", "facts.json");
55
+ await writeNormalizedFactsArtifact(normalizedFactsPath, normalized);
56
+ const correlationPath = path.join(runRoot, "normalized", "correlation.json");
57
+ await writeJson(correlationPath, {
58
+ schemaVersion: 1,
59
+ inputFactSchemaVersion: FACT_SCHEMA_VERSION,
60
+ repository: runResult.manifest.repository,
61
+ providers: runResult.manifest.providers.map((entry) => entry.identity),
62
+ correlation: normalized.correlation,
63
+ });
64
+ const manifestIdentityById = new Map(runResult.manifest.providers.map((entry) => [entry.identity.id, entry.identity]));
65
+ const mappedAdditionOrder = configuredAdditionOrder
66
+ .map((configured) => manifestIdentityById.get(configured.id))
67
+ .filter((identity) => identity !== undefined);
68
+ const matrix = buildProviderMatrix(normalized, {
69
+ providers: runResult.manifest.providers.map((entry) => entry.identity),
70
+ additionOrder: mappedAdditionOrder.length > 0 ? mappedAdditionOrder : undefined,
71
+ });
72
+ const matrixPaths = await writeProviderMatrixArtifacts(runRoot, matrix);
73
+ const retainedManifest = await retainRawProviderArtifacts(runRoot, runResult.manifest);
74
+ await writeManifest(runRoot, retainedManifest);
75
+ return {
76
+ ...runResult,
77
+ manifest: retainedManifest,
78
+ observationPath,
79
+ normalizedFactsPath,
80
+ correlationPath,
81
+ matrix,
82
+ matrixPaths,
83
+ };
84
+ }
85
+ /**
86
+ * Raw provider output can exceed ordinary repository file limits. gzip is
87
+ * lossless, keeps the original relative path in the suffix, and is recorded
88
+ * in the manifest rather than silently replacing evidence.
89
+ */
90
+ async function retainRawProviderArtifacts(runRoot, manifest) {
91
+ const providers = [];
92
+ for (const entry of manifest.providers) {
93
+ if (entry.result.status !== "ok") {
94
+ providers.push(entry);
95
+ continue;
96
+ }
97
+ const retainedArtifacts = [];
98
+ for (const relativePath of entry.result.artifacts) {
99
+ const sourcePath = path.join(runRoot, "raw", entry.identity.id, relativePath);
100
+ const retainedPath = `${relativePath}.gz`;
101
+ const destinationPath = path.join(runRoot, "raw", entry.identity.id, retainedPath);
102
+ await pipeline(createReadStream(sourcePath), createGzip(), createWriteStream(destinationPath));
103
+ await unlink(sourcePath);
104
+ retainedArtifacts.push(retainedPath);
105
+ }
106
+ providers.push({
107
+ ...entry,
108
+ result: { ...entry.result, retainedArtifacts },
109
+ });
110
+ }
111
+ return { ...manifest, providers };
112
+ }
113
+ async function readObservationArtifacts(runRoot, result) {
114
+ const observations = [];
115
+ for (const entry of result.manifest.providers) {
116
+ if (entry.result.status !== "ok")
117
+ continue;
118
+ for (const relativePath of entry.result.observationArtifacts ?? []) {
119
+ if (path.isAbsolute(relativePath) || relativePath.split(path.sep).includes("..")) {
120
+ throw new Error(`provider ${entry.identity.id} returned an unsafe observation artifact path`);
121
+ }
122
+ const filePath = path.join(runRoot, "raw", entry.identity.id, relativePath);
123
+ const content = await readFile(filePath, "utf8");
124
+ const values = relativePath.endsWith(".jsonl")
125
+ ? content
126
+ .split("\n")
127
+ .filter((line) => line.trim().length > 0)
128
+ .map((line) => JSON.parse(line))
129
+ : JSON.parse(content);
130
+ if (!Array.isArray(values))
131
+ throw new Error(`observation artifact is not an array: ${filePath}`);
132
+ for (const value of values) {
133
+ const validation = validateObservationEnvelope(value);
134
+ const structuralErrors = validation.errors.filter((error) => error !== "predicate is not a supported observation predicate");
135
+ if (structuralErrors.length > 0) {
136
+ throw new Error(`invalid observation in ${filePath}: ${structuralErrors.join("; ")}`);
137
+ }
138
+ observations.push(value);
139
+ }
140
+ }
141
+ }
142
+ return observations;
143
+ }
144
+ function assertCommitSha(value) {
145
+ if (!/^[0-9a-f]{40}$/iu.test(value)) {
146
+ throw new Error("matrix requires an explicit 40-character commit SHA via --revision");
147
+ }
148
+ }
149
+ async function writeJson(filePath, value) {
150
+ await mkdir(path.dirname(filePath), { recursive: true });
151
+ await writeFile(filePath, `${JSON.stringify(value, null, 2)}\n`, "utf8");
152
+ }
153
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/runtime/workflow.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "wabachi",
3
+ "version": "0.1.0",
4
+ "description": "Repository analysis and Architecture Canon tooling for deterministic codebase understanding.",
5
+ "type": "module",
6
+ "bin": {
7
+ "wabachi": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md",
12
+ "LICENSE"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc -p tsconfig.build.json && node scripts/chmod-bin.mjs",
16
+ "start": "node dist/index.js",
17
+ "test": "node --test --import tsx src/**/*.test.ts scripts/**/*.test.mjs",
18
+ "typecheck": "tsc --noEmit",
19
+ "lint": "eslint 'src/**/*.ts' 'scripts/**/*.mjs' 'eslint.config.mjs'",
20
+ "format": "prettier --write .",
21
+ "format:check": "prettier --check .",
22
+ "smoke-test": "node scripts/smoke-test.mjs",
23
+ "test:package": "pnpm run build && node scripts/run-package-suite.mjs",
24
+ "governance:actions": "node scripts/validate-action-pins.mjs",
25
+ "verify": "pnpm run format:check && pnpm run lint && pnpm run typecheck && pnpm test && pnpm run governance:actions && pnpm run test:package",
26
+ "prepack": "pnpm run build",
27
+ "prepublishOnly": "pnpm run typecheck && pnpm test"
28
+ },
29
+ "dependencies": {
30
+ "@sourcegraph/scip-typescript": "0.4.0",
31
+ "typescript": "^6.0.3"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^26.5.1",
35
+ "eslint": "10.8.1",
36
+ "js-yaml": "^4.1.0",
37
+ "prettier": "3.9.6",
38
+ "tsx": "^4.23.12",
39
+ "typescript-eslint": "8.67.0"
40
+ },
41
+ "engines": {
42
+ "node": ">=22.13"
43
+ },
44
+ "packageManager": "pnpm@11.18.0",
45
+ "publishConfig": {
46
+ "access": "public",
47
+ "registry": "https://registry.npmjs.org/",
48
+ "executableFiles": [
49
+ "dist/index.js"
50
+ ]
51
+ },
52
+ "license": "MIT",
53
+ "repository": {
54
+ "type": "git",
55
+ "url": "git+https://github.com/yohn-jp/wabachi.git"
56
+ },
57
+ "homepage": "https://github.com/yohn-jp/wabachi#readme",
58
+ "bugs": {
59
+ "url": "https://github.com/yohn-jp/wabachi/issues"
60
+ },
61
+ "keywords": [
62
+ "architecture",
63
+ "codebase",
64
+ "repository-analysis",
65
+ "scip",
66
+ "typescript",
67
+ "developer-tools",
68
+ "ai-agents"
69
+ ],
70
+ "main": "dist/index.js",
71
+ "types": "./dist/index.d.ts"
72
+ }