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.
- package/LICENSE +21 -0
- package/README.md +84 -0
- package/dist/architecture/canon/authority.d.ts +35 -0
- package/dist/architecture/canon/authority.js +76 -0
- package/dist/architecture/canon/authority.js.map +1 -0
- package/dist/architecture/canon/boundaries.d.ts +31 -0
- package/dist/architecture/canon/boundaries.js +73 -0
- package/dist/architecture/canon/boundaries.js.map +1 -0
- package/dist/architecture/canon/codec.d.ts +10 -0
- package/dist/architecture/canon/codec.js +516 -0
- package/dist/architecture/canon/codec.js.map +1 -0
- package/dist/architecture/canon/constraints.d.ts +60 -0
- package/dist/architecture/canon/constraints.js +116 -0
- package/dist/architecture/canon/constraints.js.map +1 -0
- package/dist/architecture/canon/decisions.d.ts +62 -0
- package/dist/architecture/canon/decisions.js +192 -0
- package/dist/architecture/canon/decisions.js.map +1 -0
- package/dist/architecture/canon/deployment.d.ts +89 -0
- package/dist/architecture/canon/deployment.js +156 -0
- package/dist/architecture/canon/deployment.js.map +1 -0
- package/dist/architecture/canon/document.d.ts +60 -0
- package/dist/architecture/canon/document.js +106 -0
- package/dist/architecture/canon/document.js.map +1 -0
- package/dist/architecture/canon/elements.d.ts +21 -0
- package/dist/architecture/canon/elements.js +87 -0
- package/dist/architecture/canon/elements.js.map +1 -0
- package/dist/architecture/canon/flows.d.ts +37 -0
- package/dist/architecture/canon/flows.js +82 -0
- package/dist/architecture/canon/flows.js.map +1 -0
- package/dist/architecture/canon/identity.d.ts +45 -0
- package/dist/architecture/canon/identity.js +83 -0
- package/dist/architecture/canon/identity.js.map +1 -0
- package/dist/architecture/canon/relationships.d.ts +48 -0
- package/dist/architecture/canon/relationships.js +181 -0
- package/dist/architecture/canon/relationships.js.map +1 -0
- package/dist/architecture/canon/repository-mappings.d.ts +51 -0
- package/dist/architecture/canon/repository-mappings.js +134 -0
- package/dist/architecture/canon/repository-mappings.js.map +1 -0
- package/dist/architecture/canon/responsibilities.d.ts +40 -0
- package/dist/architecture/canon/responsibilities.js +89 -0
- package/dist/architecture/canon/responsibilities.js.map +1 -0
- package/dist/architecture/canon/validate.d.ts +14 -0
- package/dist/architecture/canon/validate.js +389 -0
- package/dist/architecture/canon/validate.js.map +1 -0
- package/dist/architecture/canon/views.d.ts +101 -0
- package/dist/architecture/canon/views.js +182 -0
- package/dist/architecture/canon/views.js.map +1 -0
- package/dist/architecture/cli.d.ts +2 -0
- package/dist/architecture/cli.js +158 -0
- package/dist/architecture/cli.js.map +1 -0
- package/dist/architecture/documentation/html.d.ts +3 -0
- package/dist/architecture/documentation/html.js +143 -0
- package/dist/architecture/documentation/html.js.map +1 -0
- package/dist/architecture/documentation/model.d.ts +46 -0
- package/dist/architecture/documentation/model.js +13 -0
- package/dist/architecture/documentation/model.js.map +1 -0
- package/dist/architecture/documentation/project.d.ts +4 -0
- package/dist/architecture/documentation/project.js +166 -0
- package/dist/architecture/documentation/project.js.map +1 -0
- package/dist/architecture/documentation/site.d.ts +43 -0
- package/dist/architecture/documentation/site.js +147 -0
- package/dist/architecture/documentation/site.js.map +1 -0
- package/dist/architecture/projection/structurizr-export.d.ts +65 -0
- package/dist/architecture/projection/structurizr-export.js +136 -0
- package/dist/architecture/projection/structurizr-export.js.map +1 -0
- package/dist/architecture/projection/structurizr.d.ts +34 -0
- package/dist/architecture/projection/structurizr.js +667 -0
- package/dist/architecture/projection/structurizr.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +143 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/correlation.d.ts +143 -0
- package/dist/runtime/correlation.js +919 -0
- package/dist/runtime/correlation.js.map +1 -0
- package/dist/runtime/facts.d.ts +138 -0
- package/dist/runtime/facts.js +614 -0
- package/dist/runtime/facts.js.map +1 -0
- package/dist/runtime/fixtureProvider.d.ts +10 -0
- package/dist/runtime/fixtureProvider.js +30 -0
- package/dist/runtime/fixtureProvider.js.map +1 -0
- package/dist/runtime/graftProvider.d.ts +8 -0
- package/dist/runtime/graftProvider.js +107 -0
- package/dist/runtime/graftProvider.js.map +1 -0
- package/dist/runtime/graftWiring.d.ts +30 -0
- package/dist/runtime/graftWiring.js +3 -0
- package/dist/runtime/graftWiring.js.map +1 -0
- package/dist/runtime/manifest.d.ts +17 -0
- package/dist/runtime/manifest.js +39 -0
- package/dist/runtime/manifest.js.map +1 -0
- package/dist/runtime/matrix.d.ts +337 -0
- package/dist/runtime/matrix.js +1485 -0
- package/dist/runtime/matrix.js.map +1 -0
- package/dist/runtime/observation.d.ts +36 -0
- package/dist/runtime/observation.js +3 -0
- package/dist/runtime/observation.js.map +1 -0
- package/dist/runtime/provider.d.ts +34 -0
- package/dist/runtime/provider.js +2 -0
- package/dist/runtime/provider.js.map +1 -0
- package/dist/runtime/repository.d.ts +20 -0
- package/dist/runtime/repository.js +55 -0
- package/dist/runtime/repository.js.map +1 -0
- package/dist/runtime/run.d.ts +21 -0
- package/dist/runtime/run.js +80 -0
- package/dist/runtime/run.js.map +1 -0
- package/dist/runtime/scipProvider.d.ts +11 -0
- package/dist/runtime/scipProvider.js +126 -0
- package/dist/runtime/scipProvider.js.map +1 -0
- package/dist/runtime/typescriptProvider.d.ts +10 -0
- package/dist/runtime/typescriptProvider.js +289 -0
- package/dist/runtime/typescriptProvider.js.map +1 -0
- package/dist/runtime/workflow.d.ts +30 -0
- package/dist/runtime/workflow.js +153 -0
- package/dist/runtime/workflow.js.map +1 -0
- 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
|
+
}
|