@warpgogol/forge 2.9.23 → 2.11.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/dist/os/core/handlers/forge-autonomy-validate.d.ts.map +1 -1
- package/dist/os/core/handlers/forge-autonomy-validate.js +40 -3
- package/dist/os/core/handlers/forge-autonomy-validate.js.map +1 -1
- package/os/core/handlers/forge-autonomy-validate.ts +49 -3
- package/package.json +1 -3
- package/src/types/werkstatt-engine-shims.d.ts +1263 -0
- package/src/types/werkstatt-shared-shims.d.ts +5549 -0
- package/os/core/handlers/lifecycle-handlers.test.ts +0 -524
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge-autonomy-validate.d.ts","sourceRoot":"","sources":["../../../../os/core/handlers/forge-autonomy-validate.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"forge-autonomy-validate.d.ts","sourceRoot":"","sources":["../../../../os/core/handlers/forge-autonomy-validate.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAmD/B,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,yBAAyB,CAAC;IACnC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,YAAY,GAAG,mBAAmB,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9F;AAaD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,CAAC,CAuD1D"}
|
|
@@ -14,13 +14,50 @@ Type-only imports (import type) are exempt.</purpose>
|
|
|
14
14
|
</MODULE_CONTRACT>
|
|
15
15
|
<CHANGE_SUMMARY>
|
|
16
16
|
<item>RFC-0940: initial forge.autonomy.validate handler implementing FORGE-AUTONOMY-01.</item>
|
|
17
|
+
<item>ADR-0019: inlined scanDirectoryForImports to make forge dependency-free.</item>
|
|
17
18
|
</CHANGE_SUMMARY>
|
|
18
19
|
*/
|
|
19
|
-
import { readFile } from "node:fs/promises";
|
|
20
|
-
import { join } from "node:path";
|
|
21
|
-
import { scanDirectoryForImports } from "@warpgogol/werkstatt-shared/share/import-scan";
|
|
20
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
21
|
+
import { join, relative } from "node:path";
|
|
22
22
|
const FORBIDDEN_PACKAGE = "@warpgogol/werkstatt-engine";
|
|
23
23
|
const ADAPTER_DIR_PREFIX = "packages/forge/os/werkstatt/";
|
|
24
|
+
const EXCLUDE_DIRS = new Set(["node_modules", "tests", "tests-handoff", "dist", "templates"]);
|
|
25
|
+
const EXCLUDE_SUFFIXES = [".test.ts", ".spec.ts"];
|
|
26
|
+
const IMPORT_PATTERN = /(?:^|\n)\s*(?:import\s+(?:type\s+)?[^;]+?\s+from\s+|require\s*\(\s*)["'`]([^"'`]+)["'`]/g;
|
|
27
|
+
function shouldExcludeFile(fileName) {
|
|
28
|
+
return EXCLUDE_SUFFIXES.some((suffix) => fileName.endsWith(suffix));
|
|
29
|
+
}
|
|
30
|
+
async function scanDirectoryForImports(dir, workspaceRoot, specifierFilter) {
|
|
31
|
+
let scannedFiles = 0;
|
|
32
|
+
const violations = [];
|
|
33
|
+
const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
const fullPath = join(dir, entry.name);
|
|
36
|
+
if (entry.isDirectory()) {
|
|
37
|
+
if (EXCLUDE_DIRS.has(entry.name))
|
|
38
|
+
continue;
|
|
39
|
+
const subResult = await scanDirectoryForImports(fullPath, workspaceRoot, specifierFilter);
|
|
40
|
+
scannedFiles += subResult.scannedFiles;
|
|
41
|
+
violations.push(...subResult.violations);
|
|
42
|
+
}
|
|
43
|
+
else if (entry.name.endsWith(".ts") && !shouldExcludeFile(entry.name)) {
|
|
44
|
+
scannedFiles++;
|
|
45
|
+
const content = await readFile(fullPath, "utf8").catch(() => "");
|
|
46
|
+
let match;
|
|
47
|
+
const pattern = new RegExp(IMPORT_PATTERN.source, "g");
|
|
48
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
49
|
+
const specifier = match[1];
|
|
50
|
+
if (specifierFilter(specifier)) {
|
|
51
|
+
violations.push({
|
|
52
|
+
file: relative(workspaceRoot, fullPath),
|
|
53
|
+
specifier,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return { violations, scannedFiles };
|
|
60
|
+
}
|
|
24
61
|
function isTypeOnlyImport(content, specifier) {
|
|
25
62
|
const specifierIdx = content.indexOf(specifier);
|
|
26
63
|
if (specifierIdx === -1)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge-autonomy-validate.js","sourceRoot":"","sources":["../../../../os/core/handlers/forge-autonomy-validate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"forge-autonomy-validate.js","sourceRoot":"","sources":["../../../../os/core/handlers/forge-autonomy-validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,12 +14,12 @@ Type-only imports (import type) are exempt.</purpose>
|
|
|
14
14
|
</MODULE_CONTRACT>
|
|
15
15
|
<CHANGE_SUMMARY>
|
|
16
16
|
<item>RFC-0940: initial forge.autonomy.validate handler implementing FORGE-AUTONOMY-01.</item>
|
|
17
|
+
<item>ADR-0019: inlined scanDirectoryForImports to make forge dependency-free.</item>
|
|
17
18
|
</CHANGE_SUMMARY>
|
|
18
19
|
*/
|
|
19
20
|
|
|
20
|
-
import { readFile } from "node:fs/promises";
|
|
21
|
-
import { join } from "node:path";
|
|
22
|
-
import { scanDirectoryForImports } from "@warpgogol/werkstatt-shared/share/import-scan";
|
|
21
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
22
|
+
import { join, relative } from "node:path";
|
|
23
23
|
import type {
|
|
24
24
|
ForgeCommandInput,
|
|
25
25
|
ForgeCommandResult,
|
|
@@ -29,6 +29,52 @@ import type {
|
|
|
29
29
|
const FORBIDDEN_PACKAGE = "@warpgogol/werkstatt-engine";
|
|
30
30
|
const ADAPTER_DIR_PREFIX = "packages/forge/os/werkstatt/";
|
|
31
31
|
|
|
32
|
+
const EXCLUDE_DIRS = new Set(["node_modules", "tests", "tests-handoff", "dist", "templates"]);
|
|
33
|
+
const EXCLUDE_SUFFIXES = [".test.ts", ".spec.ts"];
|
|
34
|
+
const IMPORT_PATTERN =
|
|
35
|
+
/(?:^|\n)\s*(?:import\s+(?:type\s+)?[^;]+?\s+from\s+|require\s*\(\s*)["'`]([^"'`]+)["'`]/g;
|
|
36
|
+
|
|
37
|
+
function shouldExcludeFile(fileName: string): boolean {
|
|
38
|
+
return EXCLUDE_SUFFIXES.some((suffix) => fileName.endsWith(suffix));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async function scanDirectoryForImports(
|
|
42
|
+
dir: string,
|
|
43
|
+
workspaceRoot: string,
|
|
44
|
+
specifierFilter: (specifier: string) => boolean,
|
|
45
|
+
): Promise<{ violations: { file: string; specifier: string }[]; scannedFiles: number }> {
|
|
46
|
+
let scannedFiles = 0;
|
|
47
|
+
const violations: { file: string; specifier: string }[] = [];
|
|
48
|
+
const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
49
|
+
|
|
50
|
+
for (const entry of entries) {
|
|
51
|
+
const fullPath = join(dir, entry.name);
|
|
52
|
+
|
|
53
|
+
if (entry.isDirectory()) {
|
|
54
|
+
if (EXCLUDE_DIRS.has(entry.name)) continue;
|
|
55
|
+
const subResult = await scanDirectoryForImports(fullPath, workspaceRoot, specifierFilter);
|
|
56
|
+
scannedFiles += subResult.scannedFiles;
|
|
57
|
+
violations.push(...subResult.violations);
|
|
58
|
+
} else if (entry.name.endsWith(".ts") && !shouldExcludeFile(entry.name)) {
|
|
59
|
+
scannedFiles++;
|
|
60
|
+
const content = await readFile(fullPath, "utf8").catch(() => "");
|
|
61
|
+
let match: RegExpExecArray | null;
|
|
62
|
+
const pattern = new RegExp(IMPORT_PATTERN.source, "g");
|
|
63
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
64
|
+
const specifier = match[1]!;
|
|
65
|
+
if (specifierFilter(specifier)) {
|
|
66
|
+
violations.push({
|
|
67
|
+
file: relative(workspaceRoot, fullPath),
|
|
68
|
+
specifier,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return { violations, scannedFiles };
|
|
76
|
+
}
|
|
77
|
+
|
|
32
78
|
export interface ForgeAutonomyViolation {
|
|
33
79
|
ruleId: "FORGE-AUTONOMY-01";
|
|
34
80
|
file: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@warpgogol/forge",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.11.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -178,8 +178,6 @@
|
|
|
178
178
|
"devDependencies": {
|
|
179
179
|
"@types/node": "^24.0.0",
|
|
180
180
|
"@types/picomatch": "^4.0.2",
|
|
181
|
-
"@warpgogol/werkstatt-engine": "*",
|
|
182
|
-
"@warpgogol/werkstatt-shared": "^0.8.6",
|
|
183
181
|
"eslint": "^10.8.0",
|
|
184
182
|
"fast-check": "^4.9.0",
|
|
185
183
|
"typescript": "^6.0.3",
|