@agent-teams/engineering-foundation 0.1.0 → 0.2.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 (96) hide show
  1. package/README.md +20 -15
  2. package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.d.ts +6 -0
  3. package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.d.ts.map +1 -0
  4. package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.js +199 -0
  5. package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.js.map +1 -0
  6. package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.d.ts +27 -0
  7. package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.d.ts.map +1 -0
  8. package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.js +7 -0
  9. package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.js.map +1 -0
  10. package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.d.ts +5 -0
  11. package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.d.ts.map +1 -0
  12. package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.js +219 -0
  13. package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.js.map +1 -0
  14. package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.d.ts +5 -0
  15. package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.d.ts.map +1 -0
  16. package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.js +2 -0
  17. package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.js.map +1 -0
  18. package/dist/capabilities/workspace-dependency-declarations/application/rules.d.ts +26 -0
  19. package/dist/capabilities/workspace-dependency-declarations/application/rules.d.ts.map +1 -0
  20. package/dist/capabilities/workspace-dependency-declarations/application/rules.js +28 -0
  21. package/dist/capabilities/workspace-dependency-declarations/application/rules.js.map +1 -0
  22. package/dist/capabilities/workspace-dependency-declarations/contract/config.d.ts +19 -0
  23. package/dist/capabilities/workspace-dependency-declarations/contract/config.d.ts.map +1 -0
  24. package/dist/capabilities/workspace-dependency-declarations/contract/config.js +10 -0
  25. package/dist/capabilities/workspace-dependency-declarations/contract/config.js.map +1 -0
  26. package/dist/capabilities/workspace-dependency-declarations/module.d.ts +3 -0
  27. package/dist/capabilities/workspace-dependency-declarations/module.d.ts.map +1 -0
  28. package/dist/capabilities/workspace-dependency-declarations/module.js +45 -0
  29. package/dist/capabilities/workspace-dependency-declarations/module.js.map +1 -0
  30. package/dist/capability-runtime.d.ts +34 -0
  31. package/dist/capability-runtime.d.ts.map +1 -0
  32. package/dist/capability-runtime.js +86 -0
  33. package/dist/capability-runtime.js.map +1 -0
  34. package/dist/check-contract.d.ts +56 -0
  35. package/dist/check-contract.d.ts.map +1 -0
  36. package/dist/check-contract.js +2 -0
  37. package/dist/check-contract.js.map +1 -0
  38. package/dist/check-runner.d.ts +11 -0
  39. package/dist/check-runner.d.ts.map +1 -0
  40. package/dist/check-runner.js +70 -0
  41. package/dist/check-runner.js.map +1 -0
  42. package/dist/cli.js +73 -8
  43. package/dist/cli.js.map +1 -1
  44. package/dist/composition/capability-registry.d.ts +3 -0
  45. package/dist/composition/capability-registry.d.ts.map +1 -0
  46. package/dist/composition/capability-registry.js +6 -0
  47. package/dist/composition/capability-registry.js.map +1 -0
  48. package/dist/foundation-config.d.ts +15 -0
  49. package/dist/foundation-config.d.ts.map +1 -0
  50. package/dist/foundation-config.js +10 -0
  51. package/dist/foundation-config.js.map +1 -0
  52. package/dist/index.d.ts +0 -2
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +0 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/local-mode/consumer-policy.d.ts +0 -1
  57. package/dist/local-mode/consumer-policy.d.ts.map +1 -1
  58. package/dist/local-mode/consumer-policy.js +1 -4
  59. package/dist/local-mode/consumer-policy.js.map +1 -1
  60. package/dist/local-mode/inspection.d.ts +1 -1
  61. package/dist/local-mode/inspection.d.ts.map +1 -1
  62. package/dist/local-mode/inspection.js +1 -1
  63. package/dist/local-mode/inspection.js.map +1 -1
  64. package/dist/local-mode/service.js +2 -1
  65. package/dist/local-mode/service.js.map +1 -1
  66. package/dist/package-self-check.d.ts.map +1 -1
  67. package/dist/package-self-check.js +11 -4
  68. package/dist/package-self-check.js.map +1 -1
  69. package/dist/report-renderer.d.ts +3 -0
  70. package/dist/report-renderer.d.ts.map +1 -0
  71. package/dist/report-renderer.js +31 -0
  72. package/dist/report-renderer.js.map +1 -0
  73. package/dist/schema-catalog.d.ts +7 -0
  74. package/dist/schema-catalog.d.ts.map +1 -0
  75. package/dist/schema-catalog.js +58 -0
  76. package/dist/schema-catalog.js.map +1 -0
  77. package/dist/semantic-version.d.ts +2 -0
  78. package/dist/semantic-version.d.ts.map +1 -0
  79. package/dist/semantic-version.js +5 -0
  80. package/dist/semantic-version.js.map +1 -0
  81. package/dist/strict-yaml.d.ts +6 -0
  82. package/dist/strict-yaml.d.ts.map +1 -0
  83. package/dist/strict-yaml.js +99 -0
  84. package/dist/strict-yaml.js.map +1 -0
  85. package/package.json +6 -1
  86. package/presets/oxlint/base.json +39 -0
  87. package/presets/oxlint/node.json +8 -0
  88. package/presets/typescript/base.json +17 -0
  89. package/presets/typescript/node.json +9 -0
  90. package/schemas/foundation-check-report/v1.schema.json +138 -0
  91. package/schemas/foundation-config/v1.schema.json +49 -0
  92. package/schemas/workspace-dependency-declarations/v1.schema.json +61 -0
  93. package/dist/config.d.ts +0 -18
  94. package/dist/config.d.ts.map +0 -1
  95. package/dist/config.js +0 -106
  96. package/dist/config.js.map +0 -1
package/README.md CHANGED
@@ -2,12 +2,14 @@
2
2
 
3
3
  Development-only engineering foundation for Agent Teams repositories.
4
4
 
5
- The package exposes a typed consumer configuration and explicit local versus
6
- registry lifecycle tooling. It is not a production runtime dependency.
5
+ The package exposes strict YAML configuration, deterministic policy checks,
6
+ shared compiler/linter presets, and explicit local versus registry lifecycle
7
+ tooling. It is not a production runtime dependency.
7
8
 
8
9
  Consumer CI should run both policy gates:
9
10
 
10
11
  ```bash
12
+ agent-teams-foundation check
11
13
  agent-teams-foundation assert-dev-only
12
14
  agent-teams-foundation assert-registry
13
15
  ```
@@ -16,17 +18,20 @@ Local attach accepts only a built target whose versioned local-mode protocol,
16
18
  exports, runtime dependencies, and real CLI self-check agree with its package
17
19
  metadata.
18
20
 
19
- ```ts
20
- import { defineFoundationConfig } from "@agent-teams/engineering-foundation";
21
-
22
- export default defineFoundationConfig({
23
- schemaVersion: 1,
24
- projectId: "agent-teams-orchestrator",
25
- projectKind: "service",
26
- capabilities: {
27
- architecture: { enabled: true, configPath: "architecture/package-catalog.yaml" },
28
- documentation: { enabled: true, configPath: "docs/metadata.schema.json" },
29
- lint: { enabled: true }
30
- }
31
- });
21
+ ```yaml
22
+ schemaVersion: 1
23
+ project:
24
+ id: consumer-repository
25
+ capabilities:
26
+ workspace.dependency-declarations:
27
+ configPath: architecture/foundation/dependency-declarations.yaml
32
28
  ```
29
+
30
+ The root file is `foundation.config.yaml`. Use
31
+ `agent-teams-foundation schema foundation-config/v1` for its canonical schema
32
+ and `agent-teams-foundation explain <rule-id>` for rule guidance.
33
+
34
+ TypeScript consumers may extend
35
+ `@agent-teams/engineering-foundation/presets/typescript/node.json`. Oxlint JSON
36
+ configuration extends
37
+ `./node_modules/@agent-teams/engineering-foundation/presets/oxlint/node.json`.
@@ -0,0 +1,6 @@
1
+ import type { WorkspaceSnapshot } from "../../../application/model/workspace-snapshot.js";
2
+ import type { WorkspaceReader } from "../../../application/ports/workspace-reader.js";
3
+ export declare class PnpmWorkspaceReader implements WorkspaceReader {
4
+ read(consumerRoot: string, signal?: AbortSignal): Promise<WorkspaceSnapshot>;
5
+ }
6
+ //# sourceMappingURL=pnpm-workspace-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pnpm-workspace-reader.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAIV,iBAAiB,EAClB,MAAM,kDAAkD,CAAC;AAE1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAmRtF,qBAAa,mBAAoB,YAAW,eAAe;IACnD,IAAI,CACR,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,CAAC,CA2B5B;CACF"}
@@ -0,0 +1,199 @@
1
+ import { glob, readFile, realpath, stat } from "node:fs/promises";
2
+ import { isAbsolute, posix, relative, resolve, sep } from "node:path";
3
+ import { CapabilityInputError } from "../../../../../capability-runtime.js";
4
+ import { assertNotCancelled, loadStrictYamlFile } from "../../../../../strict-yaml.js";
5
+ import { DEPENDENCY_SECTIONS } from "../../../application/model/workspace-snapshot.js";
6
+ const MAX_MANIFEST_BYTES = 2 * 1024 * 1024;
7
+ const MAX_WORKSPACE_PACKAGES = 5_000;
8
+ const READ_CONCURRENCY = 32;
9
+ const IGNORED_GLOBS = [
10
+ "**/.git/**",
11
+ "**/node_modules/**",
12
+ "**/dist/**",
13
+ "**/coverage/**"
14
+ ];
15
+ function inputError(code, message, phase) {
16
+ throw new CapabilityInputError({ code, message, phase, retryable: false });
17
+ }
18
+ function isRecord(value) {
19
+ return typeof value === "object" && value !== null && !Array.isArray(value);
20
+ }
21
+ function toPosixPath(path) {
22
+ return path.split(sep).join("/");
23
+ }
24
+ function validateWorkspacePatterns(value) {
25
+ if (value === undefined) {
26
+ return [];
27
+ }
28
+ if (!Array.isArray(value) ||
29
+ value.some((pattern) => typeof pattern !== "string" ||
30
+ pattern.length === 0 ||
31
+ pattern.includes("\\") ||
32
+ pattern.startsWith("/") ||
33
+ pattern.split("/").includes(".."))) {
34
+ inputError("PNPM_WORKSPACE_INVALID", "pnpm-workspace.yaml packages must contain repository-relative POSIX glob patterns.", "workspace-discovery");
35
+ }
36
+ return value;
37
+ }
38
+ function stringRecord(value, field, phase) {
39
+ if (!isRecord(value)) {
40
+ inputError("GOVERNED_INPUT_INVALID", `${field} must be an object.`, phase);
41
+ }
42
+ for (const [name, specifier] of Object.entries(value)) {
43
+ if (name.length === 0 || typeof specifier !== "string" || specifier.length === 0) {
44
+ inputError("GOVERNED_INPUT_INVALID", `${field} must contain non-empty string values.`, phase);
45
+ }
46
+ }
47
+ return value;
48
+ }
49
+ function optionalStringArray(value, field) {
50
+ if (value === undefined) {
51
+ return [];
52
+ }
53
+ if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) {
54
+ inputError("PACKAGE_MANIFEST_INVALID", `${field} must be an array of package names.`, "package-manifest");
55
+ }
56
+ return value;
57
+ }
58
+ async function readJsonManifest(consumerRoot, manifestPath, signal) {
59
+ assertNotCancelled(signal);
60
+ const canonicalRoot = await realpath(consumerRoot);
61
+ const absolutePath = resolve(canonicalRoot, manifestPath);
62
+ const canonicalPath = await realpath(absolutePath).catch(() => inputError("PACKAGE_MANIFEST_UNAVAILABLE", `Workspace package manifest is unavailable: ${manifestPath}.`, "package-manifest"));
63
+ const relation = relative(canonicalRoot, canonicalPath);
64
+ if (relation === ".." ||
65
+ relation.startsWith(`..${sep}`) ||
66
+ isAbsolute(relation)) {
67
+ inputError("PACKAGE_MANIFEST_ESCAPE", `Workspace package manifest escapes the consumer repository: ${manifestPath}.`, "package-manifest");
68
+ }
69
+ const metadata = await stat(canonicalPath);
70
+ if (!metadata.isFile() || metadata.size > MAX_MANIFEST_BYTES) {
71
+ inputError("PACKAGE_MANIFEST_INVALID", `Workspace package manifest must be a regular file no larger than ${MAX_MANIFEST_BYTES} bytes: ${manifestPath}.`, "package-manifest");
72
+ }
73
+ let input;
74
+ try {
75
+ input = JSON.parse(await readFile(canonicalPath, "utf8"));
76
+ }
77
+ catch {
78
+ inputError("PACKAGE_MANIFEST_INVALID", `Workspace package manifest is not valid JSON: ${manifestPath}.`, "package-manifest");
79
+ }
80
+ if (!isRecord(input)) {
81
+ inputError("PACKAGE_MANIFEST_INVALID", `Workspace package manifest must contain an object: ${manifestPath}.`, "package-manifest");
82
+ }
83
+ const packageName = typeof input.name === "string" && input.name.length > 0
84
+ ? input.name
85
+ : `<unnamed:${manifestPath}>`;
86
+ const dependencies = [];
87
+ for (const section of DEPENDENCY_SECTIONS) {
88
+ if (input[section] === undefined) {
89
+ continue;
90
+ }
91
+ const declarations = stringRecord(input[section], `${manifestPath} ${section}`, "package-manifest");
92
+ for (const [dependencyName, specifier] of Object.entries(declarations)) {
93
+ dependencies.push({
94
+ packageName,
95
+ manifestPath,
96
+ section,
97
+ dependencyName,
98
+ specifier
99
+ });
100
+ }
101
+ }
102
+ const bundledDependencies = [
103
+ ...optionalStringArray(input.bundleDependencies, `${manifestPath} bundleDependencies`),
104
+ ...optionalStringArray(input.bundledDependencies, `${manifestPath} bundledDependencies`)
105
+ ].toSorted();
106
+ return {
107
+ name: packageName,
108
+ manifestPath,
109
+ ...(typeof input.packageManager === "string"
110
+ ? { packageManager: input.packageManager }
111
+ : {}),
112
+ dependencies: dependencies.toSorted(compareDeclarations),
113
+ bundledDependencies
114
+ };
115
+ }
116
+ function compareDeclarations(left, right) {
117
+ return (left.dependencyName.localeCompare(right.dependencyName) ||
118
+ left.section.localeCompare(right.section));
119
+ }
120
+ function parseCatalog(workspace, field) {
121
+ const value = workspace[field];
122
+ if (value === undefined) {
123
+ return [];
124
+ }
125
+ if (field === "catalog") {
126
+ return Object.entries(stringRecord(value, "catalog", "workspace-manifest")).map(([dependencyName, version]) => ({
127
+ catalogName: "default",
128
+ dependencyName,
129
+ version
130
+ }));
131
+ }
132
+ if (!isRecord(value)) {
133
+ inputError("PNPM_WORKSPACE_INVALID", "catalogs must be an object.", "workspace-manifest");
134
+ }
135
+ const entries = [];
136
+ for (const [catalogName, catalog] of Object.entries(value)) {
137
+ for (const [dependencyName, version] of Object.entries(stringRecord(catalog, `catalogs.${catalogName}`, "workspace-manifest"))) {
138
+ entries.push({ catalogName, dependencyName, version });
139
+ }
140
+ }
141
+ return entries;
142
+ }
143
+ function selectedByPatterns(directory, patterns) {
144
+ if (directory === ".") {
145
+ return true;
146
+ }
147
+ const positive = patterns.filter((pattern) => !pattern.startsWith("!"));
148
+ const negative = patterns
149
+ .filter((pattern) => pattern.startsWith("!"))
150
+ .map((pattern) => pattern.slice(1));
151
+ return (positive.some((pattern) => posix.matchesGlob(directory, pattern)) &&
152
+ !negative.some((pattern) => posix.matchesGlob(directory, pattern)));
153
+ }
154
+ async function discoverManifestPaths(consumerRoot, patterns, signal) {
155
+ const manifests = new Set(["package.json"]);
156
+ for await (const candidate of glob("**/package.json", {
157
+ cwd: consumerRoot,
158
+ exclude: IGNORED_GLOBS
159
+ })) {
160
+ assertNotCancelled(signal);
161
+ const manifestPath = toPosixPath(candidate);
162
+ const directory = posix.dirname(manifestPath);
163
+ if (selectedByPatterns(directory, patterns)) {
164
+ manifests.add(manifestPath);
165
+ if (manifests.size > MAX_WORKSPACE_PACKAGES) {
166
+ inputError("WORKSPACE_LIMIT_EXCEEDED", `Workspace contains more than ${MAX_WORKSPACE_PACKAGES} package manifests.`, "workspace-discovery");
167
+ }
168
+ }
169
+ }
170
+ return [...manifests].toSorted();
171
+ }
172
+ async function readManifestBatch(consumerRoot, paths, signal) {
173
+ const packages = [];
174
+ for (let index = 0; index < paths.length; index += READ_CONCURRENCY) {
175
+ const batch = paths.slice(index, index + READ_CONCURRENCY);
176
+ packages.push(...(await Promise.all(batch.map((path) => readJsonManifest(consumerRoot, path, signal)))));
177
+ }
178
+ return packages.toSorted((left, right) => left.manifestPath.localeCompare(right.manifestPath));
179
+ }
180
+ export class PnpmWorkspaceReader {
181
+ async read(consumerRoot, signal) {
182
+ const input = await loadStrictYamlFile(consumerRoot, "pnpm-workspace.yaml", "workspace-manifest", signal);
183
+ if (!isRecord(input)) {
184
+ inputError("PNPM_WORKSPACE_INVALID", "pnpm-workspace.yaml must contain an object.", "workspace-manifest");
185
+ }
186
+ const patterns = validateWorkspacePatterns(input.packages);
187
+ const manifestPaths = await discoverManifestPaths(consumerRoot, patterns, signal);
188
+ return {
189
+ ...(typeof input.catalogMode === "string" ? { catalogMode: input.catalogMode } : {}),
190
+ catalogs: [
191
+ ...parseCatalog(input, "catalog"),
192
+ ...parseCatalog(input, "catalogs")
193
+ ].toSorted((left, right) => left.catalogName.localeCompare(right.catalogName) ||
194
+ left.dependencyName.localeCompare(right.dependencyName)),
195
+ packages: await readManifestBatch(consumerRoot, manifestPaths, signal)
196
+ };
197
+ }
198
+ }
199
+ //# sourceMappingURL=pnpm-workspace-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pnpm-workspace-reader.js","sourceRoot":"","sources":["../../../../../../src/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export declare const DEPENDENCY_SECTIONS: readonly ["dependencies", "devDependencies", "optionalDependencies", "peerDependencies"];
2
+ export type DependencySection = (typeof DEPENDENCY_SECTIONS)[number];
3
+ export interface DependencyDeclaration {
4
+ readonly packageName: string;
5
+ readonly manifestPath: string;
6
+ readonly section: DependencySection;
7
+ readonly dependencyName: string;
8
+ readonly specifier: string;
9
+ }
10
+ export interface WorkspacePackage {
11
+ readonly name: string;
12
+ readonly manifestPath: string;
13
+ readonly packageManager?: string;
14
+ readonly dependencies: readonly DependencyDeclaration[];
15
+ readonly bundledDependencies: readonly string[];
16
+ }
17
+ export interface CatalogEntry {
18
+ readonly catalogName: string;
19
+ readonly dependencyName: string;
20
+ readonly version: string;
21
+ }
22
+ export interface WorkspaceSnapshot {
23
+ readonly catalogMode?: string;
24
+ readonly catalogs: readonly CatalogEntry[];
25
+ readonly packages: readonly WorkspacePackage[];
26
+ }
27
+ //# sourceMappingURL=workspace-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-snapshot.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,YAC9B,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,CACV,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACxD,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAChD"}
@@ -0,0 +1,7 @@
1
+ export const DEPENDENCY_SECTIONS = [
2
+ "dependencies",
3
+ "devDependencies",
4
+ "optionalDependencies",
5
+ "peerDependencies"
6
+ ];
7
+ //# sourceMappingURL=workspace-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-snapshot.js","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,cAAc;IACd,iBAAiB;IACjB,sBAAsB;IACtB,kBAAkB;CACV,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { FoundationDiagnostic } from "../../../../check-contract.js";
2
+ import type { WorkspaceDependencyDeclarationsConfig } from "../../contract/config.js";
3
+ import type { WorkspaceSnapshot } from "../model/workspace-snapshot.js";
4
+ export declare function evaluateWorkspaceDependencies(snapshot: WorkspaceSnapshot, config: WorkspaceDependencyDeclarationsConfig): readonly FoundationDiagnostic[];
5
+ //# sourceMappingURL=evaluate-workspace-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate-workspace-dependencies.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,gCAAgC,CAAC;AAuRxC,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,qCAAqC,GAC5C,SAAS,oBAAoB,EAAE,CAOjC"}
@@ -0,0 +1,219 @@
1
+ import { isExactVersion } from "../../../../semantic-version.js";
2
+ import { RULES } from "../rules.js";
3
+ function diagnostic(input) {
4
+ return {
5
+ ruleId: input.rule.id,
6
+ severity: input.rule.severity,
7
+ subject: input.subject,
8
+ message: input.message,
9
+ location: { path: input.path },
10
+ relatedLocations: [],
11
+ evidence: input.evidence ?? [],
12
+ remediation: input.rule.remediation,
13
+ requiresArchitectureReview: input.rule.requiresArchitectureReview
14
+ };
15
+ }
16
+ function declarationSubject(declaration) {
17
+ return `${declaration.packageName}:${declaration.section}:${declaration.dependencyName}`;
18
+ }
19
+ function catalogName(specifier) {
20
+ if (specifier === "catalog:") {
21
+ return "default";
22
+ }
23
+ if (specifier.startsWith("catalog:") && specifier.length > "catalog:".length) {
24
+ return specifier.slice("catalog:".length);
25
+ }
26
+ return undefined;
27
+ }
28
+ function isReservedPackage(name, scopes) {
29
+ return scopes.some((scope) => name.startsWith(scope));
30
+ }
31
+ function evaluateCatalogs(snapshot) {
32
+ const diagnostics = [];
33
+ if (snapshot.catalogMode !== "strict") {
34
+ diagnostics.push(diagnostic({
35
+ rule: RULES.catalogModeNotStrict,
36
+ subject: "pnpm-workspace:catalogMode",
37
+ message: "pnpm workspace catalogMode must be strict.",
38
+ path: "pnpm-workspace.yaml",
39
+ evidence: [
40
+ { kind: "actual", value: snapshot.catalogMode ?? "missing" }
41
+ ]
42
+ }));
43
+ }
44
+ for (const entry of snapshot.catalogs) {
45
+ if (!isExactVersion(entry.version)) {
46
+ diagnostics.push(diagnostic({
47
+ rule: RULES.catalogVersionNotExact,
48
+ subject: `catalog:${entry.catalogName}:${entry.dependencyName}`,
49
+ message: `Catalog dependency ${entry.dependencyName} must use an exact version.`,
50
+ path: "pnpm-workspace.yaml",
51
+ evidence: [{ kind: "specifier", value: entry.version }]
52
+ }));
53
+ }
54
+ }
55
+ return diagnostics;
56
+ }
57
+ function evaluatePackageManager(snapshot) {
58
+ const root = snapshot.packages.find((entry) => entry.manifestPath === "package.json");
59
+ const packageManager = root?.packageManager;
60
+ if (packageManager === undefined ||
61
+ !packageManager.startsWith("pnpm@") ||
62
+ !isExactVersion(packageManager.slice("pnpm@".length))) {
63
+ return [
64
+ diagnostic({
65
+ rule: RULES.packageManagerNotExact,
66
+ subject: "workspace-root:packageManager",
67
+ message: "The workspace root must pin an exact pnpm version.",
68
+ path: "package.json",
69
+ evidence: [{ kind: "actual", value: packageManager ?? "missing" }]
70
+ })
71
+ ];
72
+ }
73
+ return [];
74
+ }
75
+ function evaluatePackageNames(snapshot) {
76
+ const diagnostics = [];
77
+ const byName = new Map();
78
+ for (const workspacePackage of snapshot.packages) {
79
+ if (workspacePackage.name.startsWith("<unnamed:")) {
80
+ diagnostics.push(diagnostic({
81
+ rule: RULES.workspacePackageNameMissing,
82
+ subject: workspacePackage.manifestPath,
83
+ message: "Workspace package manifest must declare a package name.",
84
+ path: workspacePackage.manifestPath
85
+ }));
86
+ continue;
87
+ }
88
+ const paths = byName.get(workspacePackage.name) ?? [];
89
+ paths.push(workspacePackage.manifestPath);
90
+ byName.set(workspacePackage.name, paths);
91
+ }
92
+ for (const [name, paths] of byName) {
93
+ if (paths.length > 1) {
94
+ diagnostics.push(diagnostic({
95
+ rule: RULES.duplicateWorkspacePackageName,
96
+ subject: name,
97
+ message: `Workspace package name ${name} is declared by multiple manifests.`,
98
+ path: paths.toSorted()[0] ?? "package.json",
99
+ evidence: [{ kind: "manifest-paths", value: paths.toSorted().join(", ") }]
100
+ }));
101
+ }
102
+ }
103
+ return diagnostics;
104
+ }
105
+ function evaluateDeclarations(snapshot, config) {
106
+ const diagnostics = [];
107
+ const workspaceNames = new Set(snapshot.packages
108
+ .map((entry) => entry.name)
109
+ .filter((name) => !name.startsWith("<unnamed:")));
110
+ const devOnly = new Set(config.policies.developmentOnlyPackages);
111
+ const exactRegistryDevOnly = new Set(config.policies.exactRegistryDevelopmentOnlyPackages);
112
+ const allDevOnly = new Set([...devOnly, ...exactRegistryDevOnly]);
113
+ const catalogKeys = new Set(snapshot.catalogs.map((entry) => `${entry.catalogName}\u0000${entry.dependencyName}`));
114
+ for (const workspacePackage of snapshot.packages) {
115
+ const grouped = Map.groupBy(workspacePackage.dependencies, (declaration) => declaration.dependencyName);
116
+ for (const [dependencyName, declarations] of grouped) {
117
+ if (declarations.length > 1) {
118
+ diagnostics.push(diagnostic({
119
+ rule: RULES.dependencyDeclaredMultipleTimes,
120
+ subject: `${workspacePackage.name}:${dependencyName}`,
121
+ message: `Dependency ${dependencyName} is declared in multiple dependency sections.`,
122
+ path: workspacePackage.manifestPath,
123
+ evidence: [
124
+ {
125
+ kind: "sections",
126
+ value: declarations.map((entry) => entry.section).toSorted().join(", ")
127
+ }
128
+ ]
129
+ }));
130
+ }
131
+ }
132
+ for (const dependency of workspacePackage.dependencies) {
133
+ const subject = declarationSubject(dependency);
134
+ if (allDevOnly.has(dependency.dependencyName)) {
135
+ if (dependency.section !== "devDependencies") {
136
+ diagnostics.push(diagnostic({
137
+ rule: RULES.developmentOnlyPackageInRuntimeSection,
138
+ subject,
139
+ message: `Development-only package ${dependency.dependencyName} cannot be declared in ${dependency.section}.`,
140
+ path: dependency.manifestPath
141
+ }));
142
+ }
143
+ if (exactRegistryDevOnly.has(dependency.dependencyName) &&
144
+ !isExactVersion(dependency.specifier)) {
145
+ diagnostics.push(diagnostic({
146
+ rule: RULES.exactRegistryDevelopmentOnlyPackageVersionNotExact,
147
+ subject,
148
+ message: `Development-only package ${dependency.dependencyName} must use an exact registry version.`,
149
+ path: dependency.manifestPath,
150
+ evidence: [{ kind: "specifier", value: dependency.specifier }]
151
+ }));
152
+ }
153
+ if (exactRegistryDevOnly.has(dependency.dependencyName)) {
154
+ continue;
155
+ }
156
+ }
157
+ if (workspaceNames.has(dependency.dependencyName)) {
158
+ if (!dependency.specifier.startsWith("workspace:")) {
159
+ diagnostics.push(diagnostic({
160
+ rule: RULES.internalDependencyWithoutWorkspaceProtocol,
161
+ subject,
162
+ message: `Internal dependency ${dependency.dependencyName} must use the workspace protocol.`,
163
+ path: dependency.manifestPath,
164
+ evidence: [{ kind: "specifier", value: dependency.specifier }]
165
+ }));
166
+ }
167
+ continue;
168
+ }
169
+ if (isReservedPackage(dependency.dependencyName, config.policies.reservedScopes)) {
170
+ diagnostics.push(diagnostic({
171
+ rule: RULES.reservedScopePackageNotInWorkspace,
172
+ subject,
173
+ message: `Reserved-scope dependency ${dependency.dependencyName} is not a workspace package.`,
174
+ path: dependency.manifestPath
175
+ }));
176
+ continue;
177
+ }
178
+ const referencedCatalog = catalogName(dependency.specifier);
179
+ if (referencedCatalog === undefined) {
180
+ diagnostics.push(diagnostic({
181
+ rule: RULES.externalVersionNotCataloged,
182
+ subject,
183
+ message: `External dependency ${dependency.dependencyName} must use a catalog reference.`,
184
+ path: dependency.manifestPath,
185
+ evidence: [{ kind: "specifier", value: dependency.specifier }]
186
+ }));
187
+ }
188
+ else if (!catalogKeys.has(`${referencedCatalog}\u0000${dependency.dependencyName}`)) {
189
+ diagnostics.push(diagnostic({
190
+ rule: RULES.catalogReferenceMissing,
191
+ subject,
192
+ message: `Catalog ${referencedCatalog} does not declare ${dependency.dependencyName}.`,
193
+ path: dependency.manifestPath,
194
+ evidence: [{ kind: "catalog", value: referencedCatalog }]
195
+ }));
196
+ }
197
+ }
198
+ for (const packageName of workspacePackage.bundledDependencies) {
199
+ if (allDevOnly.has(packageName)) {
200
+ diagnostics.push(diagnostic({
201
+ rule: RULES.developmentOnlyPackageBundled,
202
+ subject: `${workspacePackage.name}:bundle:${packageName}`,
203
+ message: `Development-only package ${packageName} cannot be bundled.`,
204
+ path: workspacePackage.manifestPath
205
+ }));
206
+ }
207
+ }
208
+ }
209
+ return diagnostics;
210
+ }
211
+ export function evaluateWorkspaceDependencies(snapshot, config) {
212
+ return [
213
+ ...evaluateCatalogs(snapshot),
214
+ ...evaluatePackageManager(snapshot),
215
+ ...evaluatePackageNames(snapshot),
216
+ ...evaluateDeclarations(snapshot, config)
217
+ ];
218
+ }
219
+ //# sourceMappingURL=evaluate-workspace-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate-workspace-dependencies.js","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { WorkspaceSnapshot } from "../model/workspace-snapshot.js";
2
+ export interface WorkspaceReader {
3
+ read(consumerRoot: string, signal?: AbortSignal): Promise<WorkspaceSnapshot>;
4
+ }
5
+ //# sourceMappingURL=workspace-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-reader.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC9E"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workspace-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-reader.js","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import type { DiagnosticSeverity } from "../../../check-contract.js";
2
+ export interface RuleMetadata {
3
+ readonly id: string;
4
+ readonly rationale: string;
5
+ readonly severity: DiagnosticSeverity;
6
+ readonly remediation: string;
7
+ readonly documentation: string;
8
+ readonly requiresArchitectureReview: boolean;
9
+ }
10
+ export declare const RULES: Readonly<{
11
+ catalogModeNotStrict: RuleMetadata;
12
+ catalogReferenceMissing: RuleMetadata;
13
+ catalogVersionNotExact: RuleMetadata;
14
+ dependencyDeclaredMultipleTimes: RuleMetadata;
15
+ developmentOnlyPackageBundled: RuleMetadata;
16
+ developmentOnlyPackageInRuntimeSection: RuleMetadata;
17
+ exactRegistryDevelopmentOnlyPackageVersionNotExact: RuleMetadata;
18
+ duplicateWorkspacePackageName: RuleMetadata;
19
+ externalVersionNotCataloged: RuleMetadata;
20
+ internalDependencyWithoutWorkspaceProtocol: RuleMetadata;
21
+ packageManagerNotExact: RuleMetadata;
22
+ reservedScopePackageNotInWorkspace: RuleMetadata;
23
+ workspacePackageNameMissing: RuleMetadata;
24
+ }>;
25
+ export declare const RULES_BY_ID: ReadonlyMap<string, RuleMetadata>;
26
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/workspace-dependency-declarations/application/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;CAC9C;AAqBD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;EAoEhB,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAEzD,CAAC"}