azcodr 2.2.0 → 2.4.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 (78) hide show
  1. package/.agents/scripts/agent_guard.js +63 -0
  2. package/.agents/skills/lets-build/SKILL.md +1 -1
  3. package/.github/workflows/ci.yml +21 -0
  4. package/.github/workflows/publish.yml +7 -0
  5. package/CODE_OF_CONDUCT.md +122 -0
  6. package/CONTRIBUTING.md +85 -0
  7. package/README.md +73 -3
  8. package/SECURITY.md +32 -0
  9. package/data/memory.template +36 -0
  10. package/docs/rules/clean_code.md +13 -0
  11. package/docs/tipping-points.md +37 -0
  12. package/lib/agent-guard-command.d.ts +28 -0
  13. package/lib/agent-guard-command.d.ts.map +1 -0
  14. package/lib/agent-guard-command.js +103 -0
  15. package/lib/agent-guard-command.js.map +1 -0
  16. package/lib/agent-guard-file.d.ts +32 -0
  17. package/lib/agent-guard-file.d.ts.map +1 -0
  18. package/lib/agent-guard-file.js +77 -0
  19. package/lib/agent-guard-file.js.map +1 -0
  20. package/lib/agent-guard-tdd.d.ts +34 -0
  21. package/lib/agent-guard-tdd.d.ts.map +1 -0
  22. package/lib/agent-guard-tdd.js +77 -0
  23. package/lib/agent-guard-tdd.js.map +1 -0
  24. package/lib/agent-guard.d.ts +38 -0
  25. package/lib/agent-guard.d.ts.map +1 -0
  26. package/lib/agent-guard.js +80 -0
  27. package/lib/agent-guard.js.map +1 -0
  28. package/lib/boundaries.d.ts +41 -0
  29. package/lib/boundaries.d.ts.map +1 -0
  30. package/lib/boundaries.js +158 -0
  31. package/lib/boundaries.js.map +1 -0
  32. package/lib/cli-boundaries.d.ts +18 -0
  33. package/lib/cli-boundaries.d.ts.map +1 -0
  34. package/lib/cli-boundaries.js +46 -0
  35. package/lib/cli-boundaries.js.map +1 -0
  36. package/lib/cli-parse.d.ts +5 -0
  37. package/lib/cli-parse.d.ts.map +1 -1
  38. package/lib/cli-parse.js +35 -5
  39. package/lib/cli-parse.js.map +1 -1
  40. package/lib/cli.d.ts +17 -0
  41. package/lib/cli.d.ts.map +1 -1
  42. package/lib/cli.js +47 -5
  43. package/lib/cli.js.map +1 -1
  44. package/lib/guards.d.ts +6 -0
  45. package/lib/guards.d.ts.map +1 -1
  46. package/lib/guards.js +10 -1
  47. package/lib/guards.js.map +1 -1
  48. package/lib/index.d.ts +15 -0
  49. package/lib/index.d.ts.map +1 -1
  50. package/lib/index.js +12 -0
  51. package/lib/index.js.map +1 -1
  52. package/lib/repo.js +4 -4
  53. package/lib/repo.js.map +1 -1
  54. package/lib/scaffold.d.ts +2 -7
  55. package/lib/scaffold.d.ts.map +1 -1
  56. package/lib/scaffold.js +7 -10
  57. package/lib/scaffold.js.map +1 -1
  58. package/lib/validate.d.ts +33 -0
  59. package/lib/validate.d.ts.map +1 -0
  60. package/lib/validate.js +24 -0
  61. package/lib/validate.js.map +1 -0
  62. package/memory.md +24 -0
  63. package/package.json +10 -2
  64. package/scripts/validate/links.js +0 -1
  65. package/scripts/validate/root.js +1 -1
  66. package/src/agent-guard-command.ts +118 -0
  67. package/src/agent-guard-file.ts +107 -0
  68. package/src/agent-guard-tdd.ts +96 -0
  69. package/src/agent-guard.ts +123 -0
  70. package/src/boundaries.ts +198 -0
  71. package/src/cli-boundaries.ts +67 -0
  72. package/src/cli-parse.ts +40 -4
  73. package/src/cli.ts +57 -15
  74. package/src/guards.ts +11 -1
  75. package/src/index.ts +40 -0
  76. package/src/repo.ts +4 -4
  77. package/src/scaffold.ts +7 -10
  78. package/src/validate.ts +47 -0
@@ -0,0 +1,158 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ export const DEFAULT_BOUNDARY_RULES = [
4
+ {
5
+ fromLayer: 'domain',
6
+ disallowImportsFrom: ['infrastructure', 'infra', 'adapters', 'cli', 'transport', 'controllers']
7
+ },
8
+ {
9
+ fromLayer: 'core',
10
+ disallowImportsFrom: ['infrastructure', 'infra', 'adapters', 'presentation', 'ui']
11
+ }
12
+ ];
13
+ function isSkippedDir(name) {
14
+ return name.startsWith('.') || name === 'node_modules' || name === 'lib';
15
+ }
16
+ function isEligibleSource(name) {
17
+ const isScript = name.endsWith('.ts') || name.endsWith('.js');
18
+ if (!isScript || name.endsWith('.d.ts'))
19
+ return false;
20
+ return !name.includes('.test.') && !name.includes('.spec.');
21
+ }
22
+ export function findSourceFiles(dir) {
23
+ if (!fs.existsSync(dir))
24
+ return [];
25
+ const results = [];
26
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
27
+ for (const entry of entries) {
28
+ if (isSkippedDir(entry.name))
29
+ continue;
30
+ const full = path.join(dir, entry.name);
31
+ if (entry.isDirectory()) {
32
+ results.push(...findSourceFiles(full));
33
+ }
34
+ else if (isEligibleSource(entry.name)) {
35
+ results.push(path.resolve(full));
36
+ }
37
+ }
38
+ return results.sort();
39
+ }
40
+ function resolveImportTarget(sourceFile, specifier) {
41
+ const dir = path.dirname(sourceFile);
42
+ const candidate = path.resolve(dir, specifier);
43
+ if (fs.existsSync(candidate))
44
+ return candidate;
45
+ if (specifier.endsWith('.js')) {
46
+ const tsCandidate = path.resolve(dir, specifier.slice(0, -3) + '.ts');
47
+ if (fs.existsSync(tsCandidate))
48
+ return tsCandidate;
49
+ }
50
+ return null;
51
+ }
52
+ export function extractLocalImports(filePath) {
53
+ if (!fs.existsSync(filePath))
54
+ return [];
55
+ const content = fs.readFileSync(filePath, 'utf-8');
56
+ const imports = [];
57
+ const regex = /(?:import|export)\s+(?:(?:[\s\S]*?from\s+)|)['"](\.[^'"]+)['"]|import\s*\(\s*['"](\.[^'"]+)['"]\s*\)/g;
58
+ for (const match of content.matchAll(regex)) {
59
+ const spec = match[1] ?? match[2];
60
+ if (spec) {
61
+ const resolved = resolveImportTarget(filePath, spec);
62
+ if (resolved && !imports.includes(resolved)) {
63
+ imports.push(resolved);
64
+ }
65
+ }
66
+ }
67
+ return imports.sort();
68
+ }
69
+ export function buildDependencyGraph(files) {
70
+ const graph = new Map();
71
+ for (const file of files) {
72
+ graph.set(file, extractLocalImports(file));
73
+ }
74
+ return graph;
75
+ }
76
+ export function detectDependencyCycles(graph) {
77
+ const cycles = [];
78
+ const visited = new Set();
79
+ const inStack = new Set();
80
+ const pathStack = [];
81
+ function dfs(node) {
82
+ visited.add(node);
83
+ inStack.add(node);
84
+ pathStack.push(node);
85
+ for (const neighbor of graph.get(node) ?? []) {
86
+ if (!visited.has(neighbor)) {
87
+ dfs(neighbor);
88
+ }
89
+ else if (inStack.has(neighbor)) {
90
+ const startIdx = pathStack.indexOf(neighbor);
91
+ if (startIdx !== -1) {
92
+ cycles.push([...pathStack.slice(startIdx), neighbor]);
93
+ }
94
+ }
95
+ }
96
+ inStack.delete(node);
97
+ pathStack.pop();
98
+ }
99
+ for (const node of graph.keys()) {
100
+ if (!visited.has(node))
101
+ dfs(node);
102
+ }
103
+ return cycles;
104
+ }
105
+ function hasLayerSegment(pathStr, segment) {
106
+ return new RegExp(`(^|[/\\\\])${segment}([/\\\\]|$)`, 'i').test(pathStr);
107
+ }
108
+ export function detectBoundaryViolations(graph, rules = DEFAULT_BOUNDARY_RULES) {
109
+ const violations = [];
110
+ for (const [file, imports] of graph.entries()) {
111
+ for (const rule of rules) {
112
+ if (hasLayerSegment(file, rule.fromLayer)) {
113
+ for (const imported of imports) {
114
+ for (const disallowed of rule.disallowImportsFrom) {
115
+ if (hasLayerSegment(imported, disallowed)) {
116
+ violations.push({
117
+ file,
118
+ importedFile: imported,
119
+ fromLayer: rule.fromLayer,
120
+ toLayer: disallowed
121
+ });
122
+ }
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
128
+ return violations;
129
+ }
130
+ /**
131
+ * Inspects a source tree for architectural boundary violations and circular dependency cycles.
132
+ *
133
+ * @param sourceDir - Directory containing source code (e.g. src/).
134
+ * @param rules - Architectural boundary rules.
135
+ * @returns Report summarizing cycle and boundary findings.
136
+ */
137
+ export function inspectBoundaries(sourceDir, rules = DEFAULT_BOUNDARY_RULES) {
138
+ const files = findSourceFiles(sourceDir);
139
+ const graph = buildDependencyGraph(files);
140
+ const cycles = detectDependencyCycles(graph);
141
+ const violations = detectBoundaryViolations(graph, rules);
142
+ return {
143
+ moduleCount: files.length,
144
+ cycles,
145
+ violations,
146
+ ok: cycles.length === 0 && violations.length === 0
147
+ };
148
+ }
149
+ export default {
150
+ DEFAULT_BOUNDARY_RULES,
151
+ findSourceFiles,
152
+ extractLocalImports,
153
+ buildDependencyGraph,
154
+ detectDependencyCycles,
155
+ detectBoundaryViolations,
156
+ inspectBoundaries
157
+ };
158
+ //# sourceMappingURL=boundaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundaries.js","sourceRoot":"","sources":["../src/boundaries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { BoundaryReport } from './boundaries.js';
2
+ import type { CliParsedOptions } from './cli-parse.js';
3
+ export interface BoundaryIo {
4
+ out: (msg: string) => void;
5
+ err: (msg: string) => void;
6
+ exit: (code: number) => void | number;
7
+ cwd: string;
8
+ }
9
+ export declare function resolveBoundaryTarget(targetDir: string | null, cwd: string): string;
10
+ export declare function formatBoundaryReport(targetDir: string, report: BoundaryReport, out: (msg: string) => void): void;
11
+ export declare function handleBoundariesCommand(parsed: CliParsedOptions, io: BoundaryIo): Promise<void | number>;
12
+ declare const _default: {
13
+ resolveBoundaryTarget: typeof resolveBoundaryTarget;
14
+ formatBoundaryReport: typeof formatBoundaryReport;
15
+ handleBoundariesCommand: typeof handleBoundariesCommand;
16
+ };
17
+ export default _default;
18
+ //# sourceMappingURL=cli-boundaries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-boundaries.d.ts","sourceRoot":"","sources":["../src/cli-boundaries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAAC;IACtC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnF;AAcD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACzB,IAAI,CASN;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,gBAAgB,EACxB,EAAE,EAAE,UAAU,GACb,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CASxB;;;;;;AAED,wBAIE"}
@@ -0,0 +1,46 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs';
3
+ import { inspectBoundaries } from './boundaries.js';
4
+ export function resolveBoundaryTarget(targetDir, cwd) {
5
+ if (targetDir) {
6
+ return path.resolve(cwd, targetDir);
7
+ }
8
+ const defaultSrc = path.join(cwd, 'src');
9
+ return fs.existsSync(defaultSrc) ? defaultSrc : cwd;
10
+ }
11
+ function printViolations(report, out) {
12
+ const total = report.cycles.length + report.violations.length;
13
+ out(`🚨 ARCHITECTURAL VIOLATIONS DETECTED (${total}):`);
14
+ for (const cycle of report.cycles) {
15
+ out(` - Circular Dependency: ${cycle.join(' -> ')}`);
16
+ }
17
+ for (const v of report.violations) {
18
+ out(` - Layer Boundary Breach: ${v.file} illegally imports ${v.importedFile} (${v.fromLayer} -> ${v.toLayer})`);
19
+ }
20
+ out(' Action Required: Invert dependencies via Ports or extract shared modules.\n');
21
+ }
22
+ export function formatBoundaryReport(targetDir, report, out) {
23
+ out(`\n🔍 Inspecting Architectural Boundaries in: ${targetDir}`);
24
+ out('--------------------------------------------------------------');
25
+ if (report.ok) {
26
+ out(`✅ Analyzed ${report.moduleCount} modules: 0 circular cycles, 0 boundary violations.`);
27
+ out('🎉 SUCCESS: Architecture is clean and drift-free! (0 violations)\n');
28
+ }
29
+ else {
30
+ printViolations(report, out);
31
+ }
32
+ }
33
+ export async function handleBoundariesCommand(parsed, io) {
34
+ const targetDir = resolveBoundaryTarget(parsed.targetDir, io.cwd);
35
+ const report = inspectBoundaries(targetDir);
36
+ if (!parsed.silent) {
37
+ formatBoundaryReport(targetDir, report, io.out);
38
+ }
39
+ return io.exit(report.ok ? 0 : 1);
40
+ }
41
+ export default {
42
+ resolveBoundaryTarget,
43
+ formatBoundaryReport,
44
+ handleBoundariesCommand
45
+ };
46
+ //# sourceMappingURL=cli-boundaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-boundaries.js","sourceRoot":"","sources":["../src/cli-boundaries.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAWpD,MAAM,UAAU,qBAAqB,CAAC,SAAwB,EAAE,GAAW;IACzE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,OAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;AACtD,CAAC;AAED,SAAS,eAAe,CAAC,MAAsB,EAAE,GAA0B;IACzE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;IAC9D,GAAG,CAAC,yCAAyC,KAAK,IAAI,CAAC,CAAC;IACxD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,GAAG,CAAC,6BAA6B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,GAAG,CAAC,+BAA+B,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;IACpH,CAAC;IACD,GAAG,CAAC,gFAAgF,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,MAAsB,EACtB,GAA0B;IAE1B,GAAG,CAAC,gDAAgD,SAAS,EAAE,CAAC,CAAC;IACjE,GAAG,CAAC,gEAAgE,CAAC,CAAC;IACtE,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,GAAG,CAAC,cAAc,MAAM,CAAC,WAAW,qDAAqD,CAAC,CAAC;QAC3F,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAwB,EACxB,EAAc;IAEd,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAE5C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,eAAe;IACb,qBAAqB;IACrB,oBAAoB;IACpB,uBAAuB;CACxB,CAAC"}
@@ -4,7 +4,9 @@
4
4
  * Table-driven: every boolean flag is one Map entry, so adding a flag cannot
5
5
  * raise the complexity of the parser itself.
6
6
  */
7
+ export type CliCommand = 'scaffold' | 'check' | 'boundaries';
7
8
  export interface CliParsedOptions {
9
+ command: CliCommand;
8
10
  targetDir: string | null;
9
11
  force: boolean;
10
12
  noGit: boolean;
@@ -15,6 +17,8 @@ export interface CliParsedOptions {
15
17
  }
16
18
  export type BooleanFlagKey = 'force' | 'noGit' | 'dryRun' | 'silent';
17
19
  export declare function emptyOptions(): Omit<CliParsedOptions, 'terminal' | 'message'>;
20
+ export declare const CHECK_COMMANDS: Set<string>;
21
+ export declare const BOUNDARY_COMMANDS: Set<string>;
18
22
  export declare const BOOLEAN_FLAGS: Map<string, BooleanFlagKey>;
19
23
  export interface ArgOutcome {
20
24
  terminal: 'help' | 'version' | 'unknown-flag' | 'extra-arg' | null;
@@ -25,6 +29,7 @@ export declare function parseArgs(rawArgs: readonly string[]): CliParsedOptions;
25
29
  declare const _default: {
26
30
  emptyOptions: typeof emptyOptions;
27
31
  BOOLEAN_FLAGS: Map<string, BooleanFlagKey>;
32
+ CHECK_COMMANDS: Set<string>;
28
33
  applyArg: typeof applyArg;
29
34
  parseArgs: typeof parseArgs;
30
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"cli-parse.d.ts","sourceRoot":"","sources":["../src/cli-parse.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,IAAI,CAAC;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,wBAAgB,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAC,CAE7E;AAED,eAAO,MAAM,aAAa,6BAQxB,CAAC;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,IAAI,CAAC;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAC,EACrD,GAAG,EAAE,MAAM,GACV,UAAU,CAsBZ;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,gBAAgB,CAStE;;;;;;;AAED,wBAAoE"}
1
+ {"version":3,"file":"cli-parse.d.ts","sourceRoot":"","sources":["../src/cli-parse.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,IAAI,CAAC;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,wBAAgB,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAC,CAS7E;AAED,eAAO,MAAM,cAAc,aAA0C,CAAC;AACtE,eAAO,MAAM,iBAAiB,aAAgD,CAAC;AAE/E,eAAO,MAAM,aAAa,6BAQxB,CAAC;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,IAAI,CAAC;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAwBD,wBAAgB,QAAQ,CACtB,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAC,EACrD,GAAG,EAAE,MAAM,GACV,UAAU,CAuBZ;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,gBAAgB,CAStE;;;;;;;;AAED,wBAAoF"}
package/lib/cli-parse.js CHANGED
@@ -5,8 +5,17 @@
5
5
  * raise the complexity of the parser itself.
6
6
  */
7
7
  export function emptyOptions() {
8
- return { targetDir: null, force: false, noGit: false, dryRun: false, silent: false };
8
+ return {
9
+ command: 'scaffold',
10
+ targetDir: null,
11
+ force: false,
12
+ noGit: false,
13
+ dryRun: false,
14
+ silent: false
15
+ };
9
16
  }
17
+ export const CHECK_COMMANDS = new Set(['check', 'validate', 'audit']);
18
+ export const BOUNDARY_COMMANDS = new Set(['boundaries', 'boundary', 'cycles']);
10
19
  export const BOOLEAN_FLAGS = new Map([
11
20
  ['-f', 'force'],
12
21
  ['--force', 'force'],
@@ -16,11 +25,30 @@ export const BOOLEAN_FLAGS = new Map([
16
25
  ['-s', 'silent'],
17
26
  ['--silent', 'silent']
18
27
  ]);
19
- export function applyArg(state, arg) {
28
+ function checkSpecialFlag(arg) {
20
29
  if (arg === '-h' || arg === '--help')
21
- return { terminal: 'help' };
30
+ return 'help';
22
31
  if (arg === '-v' || arg === '--version')
23
- return { terminal: 'version' };
32
+ return 'version';
33
+ return null;
34
+ }
35
+ function checkCommandKeyword(arg, state) {
36
+ if (state.targetDir !== null || state.command !== 'scaffold')
37
+ return false;
38
+ if (CHECK_COMMANDS.has(arg)) {
39
+ state.command = 'check';
40
+ return true;
41
+ }
42
+ if (BOUNDARY_COMMANDS.has(arg)) {
43
+ state.command = 'boundaries';
44
+ return true;
45
+ }
46
+ return false;
47
+ }
48
+ export function applyArg(state, arg) {
49
+ const special = checkSpecialFlag(arg);
50
+ if (special !== null)
51
+ return { terminal: special };
24
52
  const flag = BOOLEAN_FLAGS.get(arg);
25
53
  if (flag !== undefined) {
26
54
  state[flag] = true;
@@ -32,6 +60,8 @@ export function applyArg(state, arg) {
32
60
  message: `Unknown argument '${arg}'. Run 'npx azcodr --help' for available options.`
33
61
  };
34
62
  }
63
+ if (checkCommandKeyword(arg, state))
64
+ return { terminal: null };
35
65
  if (!state.targetDir) {
36
66
  state.targetDir = arg;
37
67
  return { terminal: null };
@@ -51,5 +81,5 @@ export function parseArgs(rawArgs) {
51
81
  }
52
82
  return { ...state, terminal: null, message: undefined };
53
83
  }
54
- export default { emptyOptions, BOOLEAN_FLAGS, applyArg, parseArgs };
84
+ export default { emptyOptions, BOOLEAN_FLAGS, CHECK_COMMANDS, applyArg, parseArgs };
55
85
  //# sourceMappingURL=cli-parse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-parse.js","sourceRoot":"","sources":["../src/cli-parse.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACvF,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAyB;IAC3D,CAAC,IAAI,EAAE,OAAO,CAAC;IACf,CAAC,SAAS,EAAE,OAAO,CAAC;IACpB,CAAC,UAAU,EAAE,OAAO,CAAC;IACrB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAChB,CAAC,WAAW,EAAE,QAAQ,CAAC;IACvB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAChB,CAAC,UAAU,EAAE,QAAQ,CAAC;CACvB,CAAC,CAAC;AAOH,MAAM,UAAU,QAAQ,CACtB,KAAqD,EACrD,GAAW;IAEX,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAClE,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,WAAW;QAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACxE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACnB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,qBAAqB,GAAG,mDAAmD;SACrF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;QACtB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,wBAAwB,GAAG,mDAAmD;KACxF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAA0B;IAClD,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAC1D,CAAC;AAED,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"cli-parse.js","sourceRoot":"","sources":["../src/cli-parse.ts"],"names":[],"mappings":"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"}
package/lib/cli.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { ScaffoldOptions, ScaffoldResult } from './scaffold.js';
2
+ import type { CliParsedOptions } from './cli-parse.js';
2
3
  import { askQuestion } from './cli-target.js';
3
4
  export declare function printHelp(out?: (msg: string) => void): void;
4
5
  export declare function printVersion(out?: (msg: string) => void): void;
@@ -13,6 +14,14 @@ export interface CliIo {
13
14
  cwd?: string;
14
15
  templateDir?: string;
15
16
  scaffold?: (options?: ScaffoldOptions) => ScaffoldResult;
17
+ validate?: (workspaceRoot: string, reporter?: any) => {
18
+ errors: number;
19
+ warnings: number;
20
+ } | Promise<{
21
+ errors: number;
22
+ warnings: number;
23
+ }>;
24
+ boundaries?: (parsed: CliParsedOptions, io: any) => Promise<void | number>;
16
25
  }
17
26
  export interface NormalizedCliIo {
18
27
  out: (msg: string) => void;
@@ -25,6 +34,14 @@ export interface NormalizedCliIo {
25
34
  cwd: string;
26
35
  templateDir: string;
27
36
  scaffoldFn: (options?: ScaffoldOptions) => ScaffoldResult;
37
+ validateFn: (workspaceRoot: string, reporter?: any) => {
38
+ errors: number;
39
+ warnings: number;
40
+ } | Promise<{
41
+ errors: number;
42
+ warnings: number;
43
+ }>;
44
+ boundariesFn: (parsed: CliParsedOptions, io: any) => Promise<void | number>;
28
45
  }
29
46
  export declare function runCli(rawArgs?: string[], io?: CliIo): Promise<void | number>;
30
47
  export declare function main(): Promise<void>;
package/lib/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGrE,OAAO,EAAE,WAAW,EAA0C,MAAM,iBAAiB,CAAC;AAatF,wBAAgB,SAAS,CAAC,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAkB,GAAG,IAAI,CAwBxE;AAED,wBAAgB,YAAY,CAAC,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAkB,GAAG,IAAI,CAE3E;AAED,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,cAAc,CAAC;CAC1D;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACnD,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,cAAc,CAAC;CAC3D;AA6HD,wBAAsB,MAAM,CAC1B,OAAO,GAAE,MAAM,EAA0B,EACzC,EAAE,GAAE,KAAU,GACb,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAqBxB;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAO1C;AAED,OAAO,EAAE,WAAW,EAAE,CAAC;;;;;;;;AAEvB,wBAME"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAA0C,MAAM,iBAAiB,CAAC;AAatF,wBAAgB,SAAS,CAAC,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAkB,GAAG,IAAI,CA8BxE;AAED,wBAAgB,YAAY,CAAC,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAkB,GAAG,IAAI,CAE3E;AAED,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,cAAc,CAAC;IACzD,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,KAAK;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3I,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACnD,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,cAAc,CAAC;IAC1D,UAAU,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,KAAK;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5I,YAAY,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;CAC7E;AAqJD,wBAAsB,MAAM,CAC1B,OAAO,GAAE,MAAM,EAA0B,EACzC,EAAE,GAAE,KAAU,GACb,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CA2BxB;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAO1C;AAED,OAAO,EAAE,WAAW,EAAE,CAAC;;;;;;;;AAEvB,wBAME"}
package/lib/cli.js CHANGED
@@ -3,6 +3,8 @@ import path from 'node:path';
3
3
  import process from 'node:process';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  import { scaffold, getTemplateDir } from './scaffold.js';
6
+ import { validate, createSilentReporter } from './validate.js';
7
+ import { handleBoundariesCommand } from './cli-boundaries.js';
6
8
  import { parseArgs } from './cli-parse.js';
7
9
  import { askQuestion, resolveTargetDir, ensureWritableTarget } from './cli-target.js';
8
10
  const pkg = JSON.parse(fs.readFileSync(path.join(path.dirname(fileURLToPath(import.meta.url)), '..', 'package.json'), 'utf-8'));
@@ -13,9 +15,13 @@ Enterprise Multi-Tenant Architecture & Agentic Engineering Starter Template
13
15
 
14
16
  Usage:
15
17
  npx azcodr [directory] [options]
18
+ npx azcodr check [directory] [options]
19
+ npx azcodr boundaries [directory] [options]
16
20
 
17
21
  Commands:
18
- [directory] Scaffold azcodr template into directory (default: current directory)
22
+ [directory] Scaffold azcodr template into directory (default: current directory)
23
+ check [directory] Validate architecture and governance rules (alias: validate, audit)
24
+ boundaries [directory] Inspect dependency cycles and layer boundaries (alias: boundary, cycles)
19
25
 
20
26
  Options:
21
27
  -d, --dry-run Simulate scaffolding without modifying filesystem
@@ -27,16 +33,34 @@ Options:
27
33
 
28
34
  Examples:
29
35
  npx azcodr my-project
36
+ npx azcodr check
37
+ npx azcodr boundaries ./src
38
+ npx azcodr check ./existing-repo
30
39
  npx azcodr . --dry-run
31
- npx azcodr . --force
32
40
  `);
33
41
  }
34
42
  export function printVersion(out = console.log) {
35
43
  out(pkg.version);
36
44
  }
37
- function normalizeIo(io = {}) {
38
- const { out = console.log, err = console.error, exit = process.exit, stdin = process.stdin, stdout = process.stdout, cwd = process.cwd(), templateDir = getTemplateDir(), scaffold: scaffoldFn = scaffold } = io;
39
- return { out, err, exit, stdin, stdout, cwd, templateDir, scaffoldFn };
45
+ function defaultStreams(io) {
46
+ return {
47
+ out: io.out ?? console.log,
48
+ err: io.err ?? console.error,
49
+ exit: io.exit ?? process.exit,
50
+ stdin: io.stdin ?? process.stdin,
51
+ stdout: io.stdout ?? process.stdout
52
+ };
53
+ }
54
+ function normalizeIo(io) {
55
+ const streams = defaultStreams(io);
56
+ return {
57
+ ...streams,
58
+ cwd: io.cwd ?? process.cwd(),
59
+ templateDir: io.templateDir ?? getTemplateDir(),
60
+ scaffoldFn: io.scaffold ?? scaffold,
61
+ validateFn: io.validate ?? validate,
62
+ boundariesFn: io.boundaries ?? handleBoundariesCommand
63
+ };
40
64
  }
41
65
  function outBanner(fullIo) {
42
66
  fullIo.out('\n🚀 azcodr - Enterprise Multi-Tenant Architecture & Agentic Engineering\n');
@@ -54,6 +78,18 @@ function handleTerminal(parsed, io) {
54
78
  err(`❌ Error: ${parsed.message}`);
55
79
  return exit(1);
56
80
  }
81
+ async function handleCheckCommand(parsed, fullIo) {
82
+ const checkDir = parsed.targetDir ? path.resolve(fullIo.cwd, parsed.targetDir) : fullIo.cwd;
83
+ const reporter = parsed.silent ? createSilentReporter() : undefined;
84
+ const result = await fullIo.validateFn(checkDir, reporter);
85
+ if (result.errors !== 0)
86
+ return fullIo.exit(1);
87
+ const srcDir = path.join(checkDir, 'src');
88
+ if (fs.existsSync(srcDir)) {
89
+ return fullIo.boundariesFn({ ...parsed, targetDir: srcDir }, fullIo);
90
+ }
91
+ return fullIo.exit(0);
92
+ }
57
93
  function reportDryRun(result, out) {
58
94
  for (const action of result.actions) {
59
95
  out(` [preview] ${action}`);
@@ -135,6 +171,12 @@ export async function runCli(rawArgs = process.argv.slice(2), io = {}) {
135
171
  const parsed = parseArgs(rawArgs);
136
172
  if (parsed.terminal !== null)
137
173
  return handleTerminal(parsed, fullIo);
174
+ if (parsed.command === 'check') {
175
+ return handleCheckCommand(parsed, fullIo);
176
+ }
177
+ if (parsed.command === 'boundaries') {
178
+ return fullIo.boundariesFn(parsed, fullIo);
179
+ }
138
180
  if (!parsed.silent) {
139
181
  outBanner(fullIo);
140
182
  }
package/lib/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/lib/guards.d.ts CHANGED
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Resolves the root filesystem directory of the azcodr template files.
3
+ *
4
+ * @returns Absolute filesystem path to the template root directory.
5
+ */
6
+ export declare function getTemplateDir(): string;
1
7
  /**
2
8
  * Options for configuring protected target verification.
3
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAOpF;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxD;AAwCD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CASlG;;;;;;AAED,wBAIE"}
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAOpF;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxD;AAwCD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CASlG;;;;;;AAED,wBAIE"}
package/lib/guards.js CHANGED
@@ -2,8 +2,17 @@ import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import os from 'node:os';
4
4
  import process from 'node:process';
5
+ import { fileURLToPath } from 'node:url';
5
6
  import { ScaffoldError, ERROR_CODES } from './errors.js';
6
- import { getTemplateDir } from './scaffold.js';
7
+ /**
8
+ * Resolves the root filesystem directory of the azcodr template files.
9
+ *
10
+ * @returns Absolute filesystem path to the template root directory.
11
+ */
12
+ export function getTemplateDir() {
13
+ const currentDir = import.meta.dirname ?? path.dirname(fileURLToPath(import.meta.url));
14
+ return path.resolve(currentDir, '..');
15
+ }
7
16
  /**
8
17
  * Filesystem scope guard (Supply Chain: filesystem access).
9
18
  * Constrains all reads/writes to targetDir / templateDir, throwing if candidate escapes root.
package/lib/guards.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -13,6 +13,21 @@ export type ScaffoldErrorCode = 'E_TARGET_IS_TEMPLATE' | 'E_TARGET_NOT_EMPTY' |
13
13
  * Core scaffolding functions, guards, utilities, error classes, and constants.
14
14
  */
15
15
  export { scaffold, validateTarget, copyTemplate, ensureSymlink, ensureSymlinkOrPointer, isSameCaseInsensitiveFile, makeScriptsExecutable, initGit, isInsideGitWorkTree, runGit, assertInside, isProtectedTarget, getTemplateDir, TEMPLATE_ITEMS, ScaffoldError, ERROR_CODES } from './scaffold.js';
16
+ /**
17
+ * Standalone architecture validation engine.
18
+ */
19
+ export { validate, createSilentReporter } from './validate.js';
20
+ export type { ValidationResult, ValidationReporter } from './validate.js';
21
+ /**
22
+ * Agent-runtime architectural enforcement and safety guards.
23
+ */
24
+ export { inspectPreTool, inspectCommand, inspectFileWrite, inspectTddRequirement, readTddState, writeTddState } from './agent-guard.js';
25
+ export type { GuardDecision, GuardOptions, ToolEnvelope, CommandViolation, FileCheckResult, SessionTddState } from './agent-guard.js';
26
+ /**
27
+ * Architectural boundary enforcement and dependency cycle prevention.
28
+ */
29
+ export { inspectBoundaries, detectDependencyCycles, detectBoundaryViolations, findSourceFiles, extractLocalImports, buildDependencyGraph, DEFAULT_BOUNDARY_RULES } from './boundaries.js';
30
+ export type { BoundaryRule, BoundaryViolation, BoundaryReport } from './boundaries.js';
16
31
  /**
17
32
  * Type definitions and option interfaces for scaffolding operations.
18
33
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,sBAAsB,GACtB,oBAAoB,GACpB,uBAAuB,GACvB,oBAAoB,GACpB,eAAe,GACf,eAAe,CAAC;AAEpB;;GAEG;AACH,OAAO,EACL,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,OAAO,EACP,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,EACZ,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,YAAY,EACV,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,cAAc,MAAM,eAAe,CAAC;AAE3C;;GAEG;AACH,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,sBAAsB,GACtB,oBAAoB,GACpB,uBAAuB,GACvB,oBAAoB,GACpB,eAAe,GACf,eAAe,CAAC;AAEpB;;GAEG;AACH,OAAO,EACL,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,OAAO,EACP,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,EACZ,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC/D,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAE1E;;GAEG;AACH,OAAO,EACL,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACd,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEvF;;GAEG;AACH,YAAY,EACV,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,cAAc,MAAM,eAAe,CAAC;AAE3C;;GAEG;AACH,eAAe,cAAc,CAAC"}
package/lib/index.js CHANGED
@@ -9,6 +9,18 @@
9
9
  * Core scaffolding functions, guards, utilities, error classes, and constants.
10
10
  */
11
11
  export { scaffold, validateTarget, copyTemplate, ensureSymlink, ensureSymlinkOrPointer, isSameCaseInsensitiveFile, makeScriptsExecutable, initGit, isInsideGitWorkTree, runGit, assertInside, isProtectedTarget, getTemplateDir, TEMPLATE_ITEMS, ScaffoldError, ERROR_CODES } from './scaffold.js';
12
+ /**
13
+ * Standalone architecture validation engine.
14
+ */
15
+ export { validate, createSilentReporter } from './validate.js';
16
+ /**
17
+ * Agent-runtime architectural enforcement and safety guards.
18
+ */
19
+ export { inspectPreTool, inspectCommand, inspectFileWrite, inspectTddRequirement, readTddState, writeTddState } from './agent-guard.js';
20
+ /**
21
+ * Architectural boundary enforcement and dependency cycle prevention.
22
+ */
23
+ export { inspectBoundaries, detectDependencyCycles, detectBoundaryViolations, findSourceFiles, extractLocalImports, buildDependencyGraph, DEFAULT_BOUNDARY_RULES } from './boundaries.js';
12
24
  import scaffoldModule from './scaffold.js';
13
25
  /**
14
26
  * Default export providing the unified azcodr scaffolding module.