human-to-code 0.0.1 → 0.1.1

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 (130) hide show
  1. package/Readme.md +366 -38
  2. package/SECURITY.md +175 -11
  3. package/dist/adapters/node.d.ts +8 -0
  4. package/dist/adapters/node.d.ts.map +1 -0
  5. package/dist/adapters/node.js +1071 -0
  6. package/dist/adapters/node.js.map +1 -0
  7. package/dist/adapters/python.d.ts +7 -0
  8. package/dist/adapters/python.d.ts.map +1 -0
  9. package/dist/adapters/python.js +540 -0
  10. package/dist/adapters/python.js.map +1 -0
  11. package/dist/adapters/rust.d.ts +7 -0
  12. package/dist/adapters/rust.d.ts.map +1 -0
  13. package/dist/adapters/rust.js +517 -0
  14. package/dist/adapters/rust.js.map +1 -0
  15. package/dist/analyzer-types.d.ts +153 -0
  16. package/dist/analyzer-types.d.ts.map +1 -0
  17. package/dist/analyzer-types.js +8 -0
  18. package/dist/analyzer-types.js.map +1 -0
  19. package/dist/analyzer-utils.d.ts +40 -0
  20. package/dist/analyzer-utils.d.ts.map +1 -0
  21. package/dist/analyzer-utils.js +591 -0
  22. package/dist/analyzer-utils.js.map +1 -0
  23. package/dist/analyzer.d.ts +21 -0
  24. package/dist/analyzer.d.ts.map +1 -0
  25. package/dist/analyzer.js +103 -0
  26. package/dist/analyzer.js.map +1 -0
  27. package/dist/certification.d.ts +102 -0
  28. package/dist/certification.d.ts.map +1 -0
  29. package/dist/certification.js +193 -0
  30. package/dist/certification.js.map +1 -0
  31. package/dist/cli.d.ts +4 -0
  32. package/dist/cli.d.ts.map +1 -0
  33. package/dist/cli.js +562 -0
  34. package/dist/cli.js.map +1 -0
  35. package/dist/compiler-skills.d.ts +25 -0
  36. package/dist/compiler-skills.d.ts.map +1 -0
  37. package/dist/compiler-skills.js +158 -0
  38. package/dist/compiler-skills.js.map +1 -0
  39. package/dist/compiler-tools.d.ts +29 -0
  40. package/dist/compiler-tools.d.ts.map +1 -0
  41. package/dist/compiler-tools.js +337 -0
  42. package/dist/compiler-tools.js.map +1 -0
  43. package/dist/config.d.ts +122 -0
  44. package/dist/config.d.ts.map +1 -0
  45. package/dist/config.js +704 -0
  46. package/dist/config.js.map +1 -0
  47. package/dist/context.d.ts +153 -0
  48. package/dist/context.d.ts.map +1 -0
  49. package/dist/context.js +772 -0
  50. package/dist/context.js.map +1 -0
  51. package/dist/contracts.d.ts +196 -0
  52. package/dist/contracts.d.ts.map +1 -0
  53. package/dist/contracts.js +721 -0
  54. package/dist/contracts.js.map +1 -0
  55. package/dist/discovery.d.ts +34 -0
  56. package/dist/discovery.d.ts.map +1 -0
  57. package/dist/discovery.js +312 -0
  58. package/dist/discovery.js.map +1 -0
  59. package/dist/documentation.d.ts +44 -0
  60. package/dist/documentation.d.ts.map +1 -0
  61. package/dist/documentation.js +418 -0
  62. package/dist/documentation.js.map +1 -0
  63. package/dist/index.d.ts +23 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +21 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/patch.d.ts +71 -0
  68. package/dist/patch.d.ts.map +1 -0
  69. package/dist/patch.js +394 -0
  70. package/dist/patch.js.map +1 -0
  71. package/dist/pinned-http.d.ts +15 -0
  72. package/dist/pinned-http.d.ts.map +1 -0
  73. package/dist/pinned-http.js +170 -0
  74. package/dist/pinned-http.js.map +1 -0
  75. package/dist/planner.d.ts +30 -0
  76. package/dist/planner.d.ts.map +1 -0
  77. package/dist/planner.js +228 -0
  78. package/dist/planner.js.map +1 -0
  79. package/dist/provider.d.ts +168 -0
  80. package/dist/provider.d.ts.map +1 -0
  81. package/dist/provider.js +512 -0
  82. package/dist/provider.js.map +1 -0
  83. package/dist/providers.d.ts +41 -0
  84. package/dist/providers.d.ts.map +1 -0
  85. package/dist/providers.js +954 -0
  86. package/dist/providers.js.map +1 -0
  87. package/dist/run-store.d.ts +24 -0
  88. package/dist/run-store.d.ts.map +1 -0
  89. package/dist/run-store.js +285 -0
  90. package/dist/run-store.js.map +1 -0
  91. package/dist/schemas.d.ts +18 -0
  92. package/dist/schemas.d.ts.map +1 -0
  93. package/dist/schemas.js +228 -0
  94. package/dist/schemas.js.map +1 -0
  95. package/dist/secret-scan.d.ts +30 -0
  96. package/dist/secret-scan.d.ts.map +1 -0
  97. package/dist/secret-scan.js +122 -0
  98. package/dist/secret-scan.js.map +1 -0
  99. package/dist/snapshot.d.ts +33 -0
  100. package/dist/snapshot.d.ts.map +1 -0
  101. package/dist/snapshot.js +136 -0
  102. package/dist/snapshot.js.map +1 -0
  103. package/dist/support-matrix.d.ts +23 -0
  104. package/dist/support-matrix.d.ts.map +1 -0
  105. package/dist/support-matrix.js +187 -0
  106. package/dist/support-matrix.js.map +1 -0
  107. package/dist/types.d.ts +63 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +8 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist/validation.d.ts +25 -0
  112. package/dist/validation.d.ts.map +1 -0
  113. package/dist/validation.js +388 -0
  114. package/dist/validation.js.map +1 -0
  115. package/dist/workflow.d.ts +65 -0
  116. package/dist/workflow.d.ts.map +1 -0
  117. package/dist/workflow.js +1623 -0
  118. package/dist/workflow.js.map +1 -0
  119. package/package.json +37 -9
  120. package/.claude/settings.local.json +0 -12
  121. package/.github/workflows/ci.yml +0 -18
  122. package/CONTRIBUTING.md +0 -40
  123. package/src/cli.ts +0 -218
  124. package/src/config.ts +0 -186
  125. package/src/discovery.ts +0 -186
  126. package/src/index.ts +0 -22
  127. package/src/types.ts +0 -74
  128. package/test/config.test.ts +0 -97
  129. package/test/discovery.test.ts +0 -91
  130. package/tsconfig.json +0 -17
@@ -0,0 +1,591 @@
1
+ import { createHash } from "node:crypto";
2
+ import { lstat, readFile, readdir } from "node:fs/promises";
3
+ import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
4
+ const DEFAULT_MAX_DIRECTORIES = 25_000;
5
+ const DEFAULT_MAX_FILES = 100_000;
6
+ const DEFAULT_MAX_TEXT_BYTES = 1_048_576;
7
+ const ALWAYS_IGNORED_DIRECTORIES = new Set([
8
+ ".git",
9
+ ".hg",
10
+ ".svn",
11
+ ".next",
12
+ ".nuxt",
13
+ ".turbo",
14
+ ".venv",
15
+ "venv",
16
+ "__pycache__",
17
+ "node_modules",
18
+ "target",
19
+ "dist",
20
+ "build",
21
+ "coverage",
22
+ ".coverage",
23
+ ".mypy_cache",
24
+ ".pytest_cache",
25
+ ".ruff_cache",
26
+ ]);
27
+ function toPosix(path) {
28
+ return sep === "/" ? path : path.split(sep).join("/");
29
+ }
30
+ export function normalizeProjectPath(path) {
31
+ const normalized = toPosix(path).replace(/^\.\//, "").replace(/\/$/, "");
32
+ return normalized === "" ? "." : normalized;
33
+ }
34
+ export function joinProjectPath(...parts) {
35
+ const joined = parts
36
+ .filter((part) => part !== "" && part !== ".")
37
+ .join("/")
38
+ .replace(/\/{2,}/g, "/");
39
+ return normalizeProjectPath(joined);
40
+ }
41
+ export function projectDirname(path) {
42
+ const normalized = normalizeProjectPath(path);
43
+ if (normalized === "." || !normalized.includes("/"))
44
+ return ".";
45
+ return normalized.slice(0, normalized.lastIndexOf("/"));
46
+ }
47
+ export function projectBasename(path) {
48
+ const normalized = normalizeProjectPath(path);
49
+ return normalized.slice(normalized.lastIndexOf("/") + 1);
50
+ }
51
+ export function isBelow(path, root) {
52
+ const candidate = normalizeProjectPath(path);
53
+ const parent = normalizeProjectPath(root);
54
+ return parent === "." || candidate === parent || candidate.startsWith(`${parent}/`);
55
+ }
56
+ export async function scanProject(rootInput, options = {}) {
57
+ const root = resolve(rootInput);
58
+ const diagnostics = [];
59
+ const scan = {
60
+ directoriesVisited: 0,
61
+ filesVisited: 0,
62
+ symlinksSkipped: 0,
63
+ ignoredEntries: 0,
64
+ unreadablePaths: [],
65
+ truncated: false,
66
+ };
67
+ const inventory = {
68
+ root,
69
+ files: [],
70
+ directories: [],
71
+ scan,
72
+ };
73
+ let rootStat;
74
+ try {
75
+ rootStat = await lstat(root);
76
+ }
77
+ catch {
78
+ diagnostics.push({
79
+ code: "ROOT_UNREADABLE",
80
+ message: "The analysis root does not exist or cannot be read.",
81
+ severity: "partial-scan",
82
+ paths: ["."],
83
+ });
84
+ scan.unreadablePaths.push(".");
85
+ return { inventory, diagnostics };
86
+ }
87
+ if (rootStat.isSymbolicLink()) {
88
+ diagnostics.push({
89
+ code: "ROOT_IS_SYMLINK",
90
+ message: "A symbolic-link root is refused because workspace confinement would be ambiguous.",
91
+ severity: "partial-scan",
92
+ paths: ["."],
93
+ });
94
+ return { inventory, diagnostics };
95
+ }
96
+ if (!rootStat.isDirectory()) {
97
+ diagnostics.push({
98
+ code: "ROOT_NOT_DIRECTORY",
99
+ message: "The analysis root must be a directory.",
100
+ severity: "partial-scan",
101
+ paths: ["."],
102
+ });
103
+ return { inventory, diagnostics };
104
+ }
105
+ const maxDirectories = options.maxDirectories ?? DEFAULT_MAX_DIRECTORIES;
106
+ const maxFiles = options.maxFiles ?? DEFAULT_MAX_FILES;
107
+ const pending = [
108
+ { absolute: root, relative: "." },
109
+ ];
110
+ while (pending.length > 0) {
111
+ if (scan.directoriesVisited >= maxDirectories || scan.filesVisited >= maxFiles) {
112
+ scan.truncated = true;
113
+ diagnostics.push({
114
+ code: "SCAN_LIMIT_EXCEEDED",
115
+ message: `Static scan stopped at ${maxDirectories} directories or ${maxFiles} files; no complete profile can be claimed.`,
116
+ severity: "partial-scan",
117
+ paths: ["."],
118
+ });
119
+ break;
120
+ }
121
+ const current = pending.shift();
122
+ if (!current)
123
+ break;
124
+ scan.directoriesVisited++;
125
+ inventory.directories.push(current.relative);
126
+ let entries;
127
+ try {
128
+ entries = await readdir(current.absolute, { withFileTypes: true });
129
+ }
130
+ catch {
131
+ scan.unreadablePaths.push(current.relative);
132
+ diagnostics.push({
133
+ code: "UNREADABLE_PATH",
134
+ message: "A directory could not be read, so project analysis is incomplete.",
135
+ severity: "partial-scan",
136
+ paths: [current.relative],
137
+ });
138
+ continue;
139
+ }
140
+ entries.sort((left, right) => left.name.localeCompare(right.name));
141
+ for (const entry of entries) {
142
+ const relPath = joinProjectPath(current.relative, entry.name);
143
+ if (entry.isSymbolicLink()) {
144
+ scan.symlinksSkipped++;
145
+ continue;
146
+ }
147
+ if (entry.isDirectory()) {
148
+ if (ALWAYS_IGNORED_DIRECTORIES.has(entry.name)) {
149
+ scan.ignoredEntries++;
150
+ continue;
151
+ }
152
+ pending.push({ absolute: resolve(current.absolute, entry.name), relative: relPath });
153
+ continue;
154
+ }
155
+ if (!entry.isFile())
156
+ continue;
157
+ scan.filesVisited++;
158
+ inventory.files.push(relPath);
159
+ if (scan.filesVisited >= maxFiles)
160
+ break;
161
+ }
162
+ }
163
+ inventory.directories.sort();
164
+ inventory.files.sort();
165
+ scan.unreadablePaths.sort();
166
+ return { inventory, diagnostics };
167
+ }
168
+ class StaticAnalyzerContext {
169
+ inventory;
170
+ diagnostics;
171
+ maximumTextBytes;
172
+ textCache = new Map();
173
+ constructor(inventory, diagnostics, options) {
174
+ this.inventory = inventory;
175
+ this.diagnostics = diagnostics;
176
+ this.maximumTextBytes = options.maxTextFileBytes ?? DEFAULT_MAX_TEXT_BYTES;
177
+ }
178
+ hasFile(path) {
179
+ return this.inventory.files.includes(normalizeProjectPath(path));
180
+ }
181
+ hasDirectory(path) {
182
+ return this.inventory.directories.includes(normalizeProjectPath(path));
183
+ }
184
+ filesBelow(path) {
185
+ const root = normalizeProjectPath(path);
186
+ return this.inventory.files.filter((file) => isBelow(file, root));
187
+ }
188
+ addDiagnostic(diagnostic) {
189
+ this.diagnostics.push({
190
+ ...diagnostic,
191
+ paths: [...diagnostic.paths].map(normalizeProjectPath).sort(),
192
+ });
193
+ }
194
+ async readText(path, maxBytes = this.maximumTextBytes) {
195
+ const relPath = normalizeProjectPath(path);
196
+ const cacheKey = `${relPath}\u0000${maxBytes}`;
197
+ if (this.textCache.has(cacheKey))
198
+ return this.textCache.get(cacheKey);
199
+ if (!this.hasFile(relPath) || isAbsolute(relPath) || relPath.split("/").includes("..")) {
200
+ this.addDiagnostic({
201
+ code: "READ_OUTSIDE_INVENTORY",
202
+ message: "An adapter attempted to read a path outside the confined static inventory.",
203
+ severity: "partial-scan",
204
+ paths: [relPath],
205
+ });
206
+ this.textCache.set(cacheKey, undefined);
207
+ return undefined;
208
+ }
209
+ const absolute = resolve(this.inventory.root, relPath);
210
+ const relativeCheck = relative(this.inventory.root, absolute);
211
+ if (relativeCheck.startsWith("..") || isAbsolute(relativeCheck)) {
212
+ this.addDiagnostic({
213
+ code: "PATH_ESCAPE_BLOCKED",
214
+ message: "A path escaped the analysis root and was blocked.",
215
+ severity: "partial-scan",
216
+ paths: [relPath],
217
+ });
218
+ this.textCache.set(cacheKey, undefined);
219
+ return undefined;
220
+ }
221
+ try {
222
+ const stat = await lstat(absolute);
223
+ if (!stat.isFile() || stat.isSymbolicLink()) {
224
+ this.addDiagnostic({
225
+ code: "NON_REGULAR_FILE_BLOCKED",
226
+ message: "Only regular, non-symbolic-link files may be inspected.",
227
+ severity: "partial-scan",
228
+ paths: [relPath],
229
+ });
230
+ this.textCache.set(cacheKey, undefined);
231
+ return undefined;
232
+ }
233
+ if (stat.size > maxBytes) {
234
+ this.addDiagnostic({
235
+ code: "ANALYSIS_FILE_TOO_LARGE",
236
+ message: `A ${stat.size}-byte file exceeded the ${maxBytes}-byte static-analysis limit.`,
237
+ severity: "partial-scan",
238
+ paths: [relPath],
239
+ });
240
+ this.textCache.set(cacheKey, undefined);
241
+ return undefined;
242
+ }
243
+ const text = await readFile(absolute, "utf8");
244
+ if (text.includes("\u0000")) {
245
+ this.addDiagnostic({
246
+ code: "BINARY_FILE_BLOCKED",
247
+ message: "A binary-looking file was not interpreted as project configuration.",
248
+ severity: "warning",
249
+ paths: [relPath],
250
+ });
251
+ this.textCache.set(cacheKey, undefined);
252
+ return undefined;
253
+ }
254
+ this.textCache.set(cacheKey, text);
255
+ return text;
256
+ }
257
+ catch {
258
+ this.addDiagnostic({
259
+ code: "UNREADABLE_FILE",
260
+ message: "A discovered file could not be read, so project analysis is incomplete.",
261
+ severity: "partial-scan",
262
+ paths: [relPath],
263
+ });
264
+ this.textCache.set(cacheKey, undefined);
265
+ return undefined;
266
+ }
267
+ }
268
+ async contentHash(path) {
269
+ const text = await this.readText(path);
270
+ return text === undefined ? undefined : sha256(text);
271
+ }
272
+ }
273
+ export function createAnalyzerContext(inventory, diagnostics, options = {}) {
274
+ return new StaticAnalyzerContext(inventory, diagnostics, options);
275
+ }
276
+ export function sha256(value) {
277
+ return createHash("sha256").update(value).digest("hex");
278
+ }
279
+ function canonicalize(value) {
280
+ if (Array.isArray(value))
281
+ return value.map(canonicalize);
282
+ if (value !== null && typeof value === "object") {
283
+ const entries = Object.entries(value)
284
+ .sort(([left], [right]) => left.localeCompare(right))
285
+ .map(([key, child]) => [key, canonicalize(child)]);
286
+ return Object.fromEntries(entries);
287
+ }
288
+ return value;
289
+ }
290
+ export function fingerprint(value) {
291
+ return sha256(JSON.stringify(canonicalize(value)));
292
+ }
293
+ export function finalizeWorkspace(profile) {
294
+ const normalized = {
295
+ ...profile,
296
+ manifests: sortedUnique(profile.manifests),
297
+ lockfiles: sortedUnique(profile.lockfiles),
298
+ sourceRoots: sortedUnique(profile.sourceRoots),
299
+ testRoots: sortedUnique(profile.testRoots),
300
+ generatedRoots: sortedUnique(profile.generatedRoots),
301
+ migrationRoots: sortedUnique(profile.migrationRoots),
302
+ protectedRoots: sortedUnique(profile.protectedRoots),
303
+ workspaceDependencies: sortedUnique(profile.workspaceDependencies),
304
+ publicExports: sortedUnique(profile.publicExports),
305
+ entryPoints: sortedUnique(profile.entryPoints),
306
+ routes: sortedUnique(profile.routes),
307
+ manualAcceptance: sortedUnique(profile.manualAcceptance),
308
+ diagnostics: [...profile.diagnostics].sort(compareDiagnostics),
309
+ evidence: [...profile.evidence].sort((left, right) => `${left.path}\u0000${left.kind}\u0000${left.detail}`.localeCompare(`${right.path}\u0000${right.kind}\u0000${right.detail}`)),
310
+ validationPlan: [...profile.validationPlan].sort((left, right) => left.id.localeCompare(right.id)),
311
+ };
312
+ return { ...normalized, fingerprint: fingerprint(normalized) };
313
+ }
314
+ export function compareDiagnostics(left, right) {
315
+ return `${left.severity}\u0000${left.code}\u0000${left.paths.join("\u0000")}`.localeCompare(`${right.severity}\u0000${right.code}\u0000${right.paths.join("\u0000")}`);
316
+ }
317
+ export function sortedUnique(values) {
318
+ return [...new Set(values)].sort((left, right) => left.localeCompare(right));
319
+ }
320
+ export function jsonSignal(value) {
321
+ if (value === null ||
322
+ typeof value === "boolean" ||
323
+ typeof value === "number" ||
324
+ typeof value === "string") {
325
+ return value;
326
+ }
327
+ if (Array.isArray(value))
328
+ return value.map((child) => String(child));
329
+ if (typeof value === "object") {
330
+ const result = {};
331
+ for (const [key, child] of Object.entries(value)) {
332
+ result[key] = jsonSignal(child);
333
+ }
334
+ return result;
335
+ }
336
+ return String(value);
337
+ }
338
+ /** Parse JSON-with-comments without loading or executing a JS/TS config file. */
339
+ export function parseJsonc(text) {
340
+ let output = "";
341
+ let inString = false;
342
+ let escaped = false;
343
+ let lineComment = false;
344
+ let blockComment = false;
345
+ for (let index = 0; index < text.length; index++) {
346
+ const char = text[index] ?? "";
347
+ const next = text[index + 1] ?? "";
348
+ if (lineComment) {
349
+ if (char === "\n") {
350
+ lineComment = false;
351
+ output += char;
352
+ }
353
+ continue;
354
+ }
355
+ if (blockComment) {
356
+ if (char === "*" && next === "/") {
357
+ blockComment = false;
358
+ index++;
359
+ }
360
+ else if (char === "\n") {
361
+ output += "\n";
362
+ }
363
+ continue;
364
+ }
365
+ if (inString) {
366
+ output += char;
367
+ if (escaped)
368
+ escaped = false;
369
+ else if (char === "\\")
370
+ escaped = true;
371
+ else if (char === '"')
372
+ inString = false;
373
+ continue;
374
+ }
375
+ if (char === '"') {
376
+ inString = true;
377
+ output += char;
378
+ continue;
379
+ }
380
+ if (char === "/" && next === "/") {
381
+ lineComment = true;
382
+ index++;
383
+ continue;
384
+ }
385
+ if (char === "/" && next === "*") {
386
+ blockComment = true;
387
+ index++;
388
+ continue;
389
+ }
390
+ output += char;
391
+ }
392
+ return JSON.parse(output.replace(/,\s*([}\]])/g, "$1"));
393
+ }
394
+ export function asObject(value) {
395
+ return value !== null && typeof value === "object" && !Array.isArray(value)
396
+ ? value
397
+ : undefined;
398
+ }
399
+ function stripTomlComment(line) {
400
+ let quoted;
401
+ let escaped = false;
402
+ for (let index = 0; index < line.length; index++) {
403
+ const char = line[index];
404
+ if (quoted) {
405
+ if (quoted === '"' && escaped)
406
+ escaped = false;
407
+ else if (quoted === '"' && char === "\\")
408
+ escaped = true;
409
+ else if (char === quoted)
410
+ quoted = undefined;
411
+ continue;
412
+ }
413
+ if (char === '"' || char === "'")
414
+ quoted = char;
415
+ else if (char === "#")
416
+ return line.slice(0, index);
417
+ }
418
+ return line;
419
+ }
420
+ function bracketDelta(value) {
421
+ let delta = 0;
422
+ let quoted;
423
+ let escaped = false;
424
+ for (const char of value) {
425
+ if (quoted) {
426
+ if (quoted === '"' && escaped)
427
+ escaped = false;
428
+ else if (quoted === '"' && char === "\\")
429
+ escaped = true;
430
+ else if (char === quoted)
431
+ quoted = undefined;
432
+ continue;
433
+ }
434
+ if (char === '"' || char === "'")
435
+ quoted = char;
436
+ else if (char === "[" || char === "{")
437
+ delta++;
438
+ else if (char === "]" || char === "}")
439
+ delta--;
440
+ }
441
+ return delta;
442
+ }
443
+ /** A conservative TOML reader for manifests; it never evaluates values. */
444
+ export function parseSimpleToml(text) {
445
+ const sections = new Map();
446
+ let section = "";
447
+ let current = new Map();
448
+ sections.set(section, [current]);
449
+ const lines = text.split(/\r?\n/);
450
+ for (let index = 0; index < lines.length; index++) {
451
+ const line = stripTomlComment(lines[index] ?? "").trim();
452
+ if (line === "")
453
+ continue;
454
+ const arrayHeader = /^\[\[([^\]]+)\]\]$/.exec(line);
455
+ if (arrayHeader) {
456
+ section = (arrayHeader[1] ?? "").trim();
457
+ current = new Map();
458
+ const existing = sections.get(section) ?? [];
459
+ existing.push(current);
460
+ sections.set(section, existing);
461
+ continue;
462
+ }
463
+ const header = /^\[([^\]]+)\]$/.exec(line);
464
+ if (header) {
465
+ section = (header[1] ?? "").trim();
466
+ const existing = sections.get(section);
467
+ if (existing?.[0])
468
+ current = existing[0];
469
+ else {
470
+ current = new Map();
471
+ sections.set(section, [current]);
472
+ }
473
+ continue;
474
+ }
475
+ const assignment = /^([^=]+?)\s*=\s*(.*)$/.exec(line);
476
+ if (!assignment)
477
+ continue;
478
+ const key = (assignment[1] ?? "").trim().replace(/^['"]|['"]$/g, "");
479
+ let raw = (assignment[2] ?? "").trim();
480
+ let depth = bracketDelta(raw);
481
+ while (depth > 0 && index + 1 < lines.length) {
482
+ index++;
483
+ const continued = stripTomlComment(lines[index] ?? "").trim();
484
+ raw += `\n${continued}`;
485
+ depth += bracketDelta(continued);
486
+ }
487
+ current.set(key, raw);
488
+ }
489
+ return { sections };
490
+ }
491
+ export function tomlSection(document, name) {
492
+ return document.sections.get(name)?.[0] ?? new Map();
493
+ }
494
+ export function tomlString(raw) {
495
+ if (raw === undefined)
496
+ return undefined;
497
+ const trimmed = raw.trim();
498
+ const match = /^(?:"((?:\\.|[^"])*)"|'([^']*)')$/.exec(trimmed);
499
+ if (!match)
500
+ return undefined;
501
+ return (match[1] ?? match[2] ?? "").replace(/\\"/g, '"');
502
+ }
503
+ export function tomlBoolean(raw) {
504
+ return raw === "true" ? true : raw === "false" ? false : undefined;
505
+ }
506
+ export function tomlArray(raw) {
507
+ if (!raw)
508
+ return [];
509
+ const values = [];
510
+ const matcher = /"((?:\\.|[^"])*)"|'([^']*)'/g;
511
+ for (const match of raw.matchAll(matcher))
512
+ values.push(match[1] ?? match[2] ?? "");
513
+ return values;
514
+ }
515
+ export function inlineTableString(raw, key) {
516
+ if (!raw)
517
+ return undefined;
518
+ const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
519
+ const match = new RegExp(`(?:^|[,\\s{])${escaped}\\s*=\\s*(?:"([^"]+)"|'([^']+)')`).exec(raw);
520
+ return match?.[1] ?? match?.[2];
521
+ }
522
+ export function globMatches(pattern, path) {
523
+ const normalizedPattern = normalizeProjectPath(pattern).replace(/^!/, "");
524
+ const normalizedPath = normalizeProjectPath(path);
525
+ let expression = "";
526
+ for (let index = 0; index < normalizedPattern.length; index++) {
527
+ const char = normalizedPattern[index] ?? "";
528
+ const next = normalizedPattern[index + 1] ?? "";
529
+ if (char === "*" && next === "*") {
530
+ expression += ".*";
531
+ index++;
532
+ }
533
+ else if (char === "*")
534
+ expression += "[^/]*";
535
+ else if (char === "?")
536
+ expression += "[^/]";
537
+ else
538
+ expression += char.replace(/[|\\{}()[\]^$+?.]/g, "\\$&");
539
+ }
540
+ return new RegExp(`^${expression}$`).test(normalizedPath);
541
+ }
542
+ export async function evidenceFor(context, path, kind, detail) {
543
+ const contentHash = await context.contentHash(path);
544
+ return {
545
+ kind,
546
+ path: normalizeProjectPath(path),
547
+ detail,
548
+ ...(contentHash === undefined ? {} : { contentHash }),
549
+ };
550
+ }
551
+ export function nearestExistingRoots(context, workspaceRoot, names) {
552
+ return names
553
+ .map((name) => joinProjectPath(workspaceRoot, name))
554
+ .filter((path) => context.hasDirectory(path));
555
+ }
556
+ export function filesWithExtensions(context, root, extensions) {
557
+ return context
558
+ .filesBelow(root)
559
+ .filter((file) => extensions.some((extension) => file.endsWith(extension)));
560
+ }
561
+ export function relativeToWorkspace(workspaceRoot, path) {
562
+ const normalizedRoot = normalizeProjectPath(workspaceRoot);
563
+ const normalizedPath = normalizeProjectPath(path);
564
+ if (normalizedRoot === ".")
565
+ return normalizedPath;
566
+ return normalizedPath === normalizedRoot
567
+ ? "."
568
+ : normalizedPath.slice(normalizedRoot.length + 1);
569
+ }
570
+ export function findAncestorFiles(context, startRoot, basenames) {
571
+ const result = [];
572
+ let current = normalizeProjectPath(startRoot);
573
+ while (true) {
574
+ for (const basename of basenames) {
575
+ const candidate = joinProjectPath(current, basename);
576
+ if (context.hasFile(candidate))
577
+ result.push(candidate);
578
+ }
579
+ if (current === ".")
580
+ break;
581
+ current = projectDirname(current);
582
+ }
583
+ return sortedUnique(result);
584
+ }
585
+ export function withoutAbsoluteRoot(profile) {
586
+ return jsonSignal({ ...profile, fingerprint: undefined });
587
+ }
588
+ export function nativeDirname(path) {
589
+ return dirname(path);
590
+ }
591
+ //# sourceMappingURL=analyzer-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer-utils.js","sourceRoot":"","sources":["../src/analyzer-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Deterministic, static project analysis.
3
+ *
4
+ * This module never imports application modules, evaluates config files, or
5
+ * invokes project commands. It only inventories regular files and delegates
6
+ * bounded text inspection to static ecosystem adapters.
7
+ */
8
+ import type { AnalyzerOptions, EcosystemAdapter, ProjectProfileV1 } from "./analyzer-types.ts";
9
+ export declare const DEFAULT_ECOSYSTEM_ADAPTERS: readonly EcosystemAdapter[];
10
+ /**
11
+ * Analyze a project root using the built-in React/NestJS, FastAPI, and Cargo
12
+ * adapters. Custom adapters are useful for downstream/private ecosystems, but
13
+ * are held to the same read-only context boundary.
14
+ */
15
+ export declare function analyzeProject(root: string, options?: AnalyzerOptions, adapters?: readonly EcosystemAdapter[]): Promise<ProjectProfileV1>;
16
+ export type { AnalysisEvidenceV1, AnalyzerContext, AnalyzerDiagnostic, AnalyzerDiagnosticSeverity, AnalyzerInventory, AnalyzerOptions, DependencyVersionEvidence, Ecosystem, EcosystemAdapter, FrameworkIdentity, ProfileSignalValue, ProjectAnalysisStatus, ProjectProfileV1, ScanSummaryV1, SupportDecision, SupportTier, ValidationCategory, ValidationCommandV1, WorkspaceOwnershipV1, WorkspaceProfileV1, } from "./analyzer-types.ts";
17
+ export { SUPPORT_MATRIX, SUPPORT_MATRIX_VERSION, supportFor } from "./support-matrix.ts";
18
+ export { NodeEcosystemAdapter, nodeEcosystemAdapter } from "./adapters/node.ts";
19
+ export { FastApiEcosystemAdapter, fastApiEcosystemAdapter } from "./adapters/python.ts";
20
+ export { RustEcosystemAdapter, rustEcosystemAdapter } from "./adapters/rust.ts";
21
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,gBAAgB,EAEhB,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAY7B,eAAO,MAAM,0BAA0B,EAAE,SAAS,gBAAgB,EAIxD,CAAC;AAgCX;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,EAC7B,QAAQ,GAAE,SAAS,gBAAgB,EAA+B,GACjE,OAAO,CAAC,gBAAgB,CAAC,CAoD3B;AAED,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}