@agent-teams/engineering-foundation 0.1.1 → 0.2.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.
- package/README.md +20 -15
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.d.ts +6 -0
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.js +199 -0
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.d.ts +27 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.js +7 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.d.ts +5 -0
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.js +219 -0
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.d.ts +5 -0
- package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.js +2 -0
- package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/rules.d.ts +26 -0
- package/dist/capabilities/workspace-dependency-declarations/application/rules.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/rules.js +28 -0
- package/dist/capabilities/workspace-dependency-declarations/application/rules.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/contract/config.d.ts +14 -0
- package/dist/capabilities/workspace-dependency-declarations/contract/config.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/contract/config.js +25 -0
- package/dist/capabilities/workspace-dependency-declarations/contract/config.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/module.d.ts +3 -0
- package/dist/capabilities/workspace-dependency-declarations/module.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/module.js +45 -0
- package/dist/capabilities/workspace-dependency-declarations/module.js.map +1 -0
- package/dist/capability-runtime.d.ts +34 -0
- package/dist/capability-runtime.d.ts.map +1 -0
- package/dist/capability-runtime.js +86 -0
- package/dist/capability-runtime.js.map +1 -0
- package/dist/check-contract.d.ts +56 -0
- package/dist/check-contract.d.ts.map +1 -0
- package/dist/check-contract.js +2 -0
- package/dist/check-contract.js.map +1 -0
- package/dist/check-runner.d.ts +11 -0
- package/dist/check-runner.d.ts.map +1 -0
- package/dist/check-runner.js +70 -0
- package/dist/check-runner.js.map +1 -0
- package/dist/cli.js +105 -16
- package/dist/cli.js.map +1 -1
- package/dist/composition/capability-registry.d.ts +3 -0
- package/dist/composition/capability-registry.d.ts.map +1 -0
- package/dist/composition/capability-registry.js +6 -0
- package/dist/composition/capability-registry.js.map +1 -0
- package/dist/foundation-config.d.ts +12 -0
- package/dist/foundation-config.d.ts.map +1 -0
- package/dist/foundation-config.js +24 -0
- package/dist/foundation-config.js.map +1 -0
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/local-mode/consumer-policy.d.ts +0 -1
- package/dist/local-mode/consumer-policy.d.ts.map +1 -1
- package/dist/local-mode/consumer-policy.js +1 -4
- package/dist/local-mode/consumer-policy.js.map +1 -1
- package/dist/local-mode/inspection.d.ts +1 -1
- package/dist/local-mode/inspection.d.ts.map +1 -1
- package/dist/local-mode/inspection.js +1 -1
- package/dist/local-mode/inspection.js.map +1 -1
- package/dist/local-mode/service.js +2 -1
- package/dist/local-mode/service.js.map +1 -1
- package/dist/package-self-check.d.ts.map +1 -1
- package/dist/package-self-check.js +11 -4
- package/dist/package-self-check.js.map +1 -1
- package/dist/report-renderer.d.ts +3 -0
- package/dist/report-renderer.d.ts.map +1 -0
- package/dist/report-renderer.js +31 -0
- package/dist/report-renderer.js.map +1 -0
- package/dist/schema-catalog.d.ts +7 -0
- package/dist/schema-catalog.d.ts.map +1 -0
- package/dist/schema-catalog.js +58 -0
- package/dist/schema-catalog.js.map +1 -0
- package/dist/semantic-version.d.ts +2 -0
- package/dist/semantic-version.d.ts.map +1 -0
- package/dist/semantic-version.js +5 -0
- package/dist/semantic-version.js.map +1 -0
- package/dist/strict-yaml.d.ts +6 -0
- package/dist/strict-yaml.d.ts.map +1 -0
- package/dist/strict-yaml.js +112 -0
- package/dist/strict-yaml.js.map +1 -0
- package/package.json +6 -1
- package/presets/oxlint/base.json +39 -0
- package/presets/oxlint/node.json +8 -0
- package/presets/typescript/base.json +17 -0
- package/presets/typescript/node.json +9 -0
- package/schemas/foundation-check-report/v1.schema.json +138 -0
- package/schemas/foundation-config/v1.schema.json +49 -0
- package/schemas/workspace-dependency-declarations/v1.schema.json +61 -0
- package/dist/config.d.ts +0 -18
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -106
- package/dist/config.js.map +0 -1
|
@@ -3,7 +3,7 @@ import { readFile, stat } from "node:fs/promises";
|
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { pathToFileURL } from "node:url";
|
|
5
5
|
import { FoundationError } from "./errors.js";
|
|
6
|
-
import { isExactVersion } from "./
|
|
6
|
+
import { isExactVersion } from "./semantic-version.js";
|
|
7
7
|
import { FOUNDATION_LOCAL_MODE_PROTOCOL_VERSION, FOUNDATION_PACKAGE_NAME } from "./local-mode/types.js";
|
|
8
8
|
export const FOUNDATION_METADATA_SCHEMA_VERSION = 1;
|
|
9
9
|
function isRecord(value) {
|
|
@@ -96,13 +96,22 @@ export async function inspectFoundationPackage(packageRoot) {
|
|
|
96
96
|
types: "./dist/local-mode/index.d.ts",
|
|
97
97
|
import: "./dist/local-mode/index.js"
|
|
98
98
|
});
|
|
99
|
+
validateExport(manifest.exports, "./schemas/*", "./schemas/*");
|
|
100
|
+
validateExport(manifest.exports, "./presets/*", "./presets/*");
|
|
99
101
|
validateExport(manifest.exports, "./package.json", "./package.json");
|
|
100
102
|
for (const outputPath of [
|
|
101
103
|
"dist/cli.js",
|
|
102
104
|
"dist/index.d.ts",
|
|
103
105
|
"dist/index.js",
|
|
104
106
|
"dist/local-mode/index.d.ts",
|
|
105
|
-
"dist/local-mode/index.js"
|
|
107
|
+
"dist/local-mode/index.js",
|
|
108
|
+
"presets/oxlint/base.json",
|
|
109
|
+
"presets/oxlint/node.json",
|
|
110
|
+
"presets/typescript/base.json",
|
|
111
|
+
"presets/typescript/node.json",
|
|
112
|
+
"schemas/foundation-config/v1.schema.json",
|
|
113
|
+
"schemas/foundation-check-report/v1.schema.json",
|
|
114
|
+
"schemas/workspace-dependency-declarations/v1.schema.json"
|
|
106
115
|
]) {
|
|
107
116
|
try {
|
|
108
117
|
if (!(await stat(join(packageRoot, outputPath))).isFile()) {
|
|
@@ -118,8 +127,6 @@ export async function inspectFoundationPackage(packageRoot) {
|
|
|
118
127
|
import(pathToFileURL(join(packageRoot, "dist", "local-mode", "index.js")).href)
|
|
119
128
|
]);
|
|
120
129
|
for (const [exportName, candidate] of [
|
|
121
|
-
["defineFoundationConfig", rootExports.defineFoundationConfig],
|
|
122
|
-
["parseFoundationConfig", rootExports.parseFoundationConfig],
|
|
123
130
|
["FoundationError", rootExports.FoundationError],
|
|
124
131
|
[
|
|
125
132
|
"FoundationLocalModeService",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-self-check.js","sourceRoot":"","sources":["../src/package-self-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"package-self-check.js","sourceRoot":"","sources":["../src/package-self-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-renderer.d.ts","sourceRoot":"","sources":["../src/report-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,qBAAqB,CAAC;AAa7B,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAmBhF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
function renderDiagnostic(diagnostic) {
|
|
2
|
+
const location = diagnostic.location.start === undefined
|
|
3
|
+
? diagnostic.location.path
|
|
4
|
+
: `${diagnostic.location.path}:${diagnostic.location.start.line}:${diagnostic.location.start.column}`;
|
|
5
|
+
return [
|
|
6
|
+
`${location} ${diagnostic.severity.toUpperCase()} ${diagnostic.ruleId}`,
|
|
7
|
+
` ${diagnostic.message}`,
|
|
8
|
+
` Fix: ${diagnostic.remediation}`
|
|
9
|
+
].join("\n");
|
|
10
|
+
}
|
|
11
|
+
export function renderFoundationReportText(report) {
|
|
12
|
+
const lines = [
|
|
13
|
+
`Foundation check: ${report.outcome}`,
|
|
14
|
+
`Foundation version: ${report.foundationVersion}`,
|
|
15
|
+
`Diagnostics: ${report.summary.errors} error(s), ${report.summary.warnings} warning(s), ${report.summary.infos} info`
|
|
16
|
+
];
|
|
17
|
+
if (report.problem !== undefined) {
|
|
18
|
+
lines.push(`Problem ${report.problem.code}: ${report.problem.message}`);
|
|
19
|
+
}
|
|
20
|
+
for (const capability of report.capabilities) {
|
|
21
|
+
lines.push("", `${capability.capabilityId}: ${capability.outcome}`);
|
|
22
|
+
if (capability.problem !== undefined) {
|
|
23
|
+
lines.push(`Problem ${capability.problem.code}: ${capability.problem.message}`);
|
|
24
|
+
}
|
|
25
|
+
for (const diagnostic of capability.diagnostics) {
|
|
26
|
+
lines.push(renderDiagnostic(diagnostic));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return `${lines.join("\n")}\n`;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=report-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-renderer.js","sourceRoot":"","sources":["../src/report-renderer.ts"],"names":[],"mappings":"AAKA,SAAS,gBAAgB,CAAC,UAAgC;IACxD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS;QACtD,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI;QAC1B,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACxG,OAAO;QACL,GAAG,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,MAAM,EAAE;QACvE,KAAK,UAAU,CAAC,OAAO,EAAE;QACzB,UAAU,UAAU,CAAC,WAAW,EAAE;KACnC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAA6B;IACtE,MAAM,KAAK,GAAG;QACZ,qBAAqB,MAAM,CAAC,OAAO,EAAE;QACrC,uBAAuB,MAAM,CAAC,iBAAiB,EAAE;QACjD,gBAAgB,MAAM,CAAC,OAAO,CAAC,MAAM,cAAc,MAAM,CAAC,OAAO,CAAC,QAAQ,gBAAgB,MAAM,CAAC,OAAO,CAAC,KAAK,OAAO;KACtH,CAAC;IACF,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,YAAY,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const FOUNDATION_SCHEMA_IDS: readonly ["foundation-config/v1", "foundation-check-report/v1", "workspace-dependency-declarations/v1"];
|
|
2
|
+
export type FoundationSchemaId = (typeof FOUNDATION_SCHEMA_IDS)[number];
|
|
3
|
+
export declare function isFoundationSchemaId(value: string): value is FoundationSchemaId;
|
|
4
|
+
export declare function schemaPath(schemaId: FoundationSchemaId): string;
|
|
5
|
+
export declare function readFoundationSchema(schemaId: FoundationSchemaId): Promise<string>;
|
|
6
|
+
export declare function assertSchema(schemaId: FoundationSchemaId, input: unknown, phase: string): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=schema-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-catalog.d.ts","sourceRoot":"","sources":["../src/schema-catalog.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,qBAAqB,YAChC,sBAAsB,EACtB,4BAA4B,EAC5B,sCAAsC,CAC9B,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAKxE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,kBAAkB,CAE/E;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAE/D;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAEjB;AA6BD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { Ajv2020 } from "ajv/dist/2020.js";
|
|
5
|
+
import { CapabilityInputError } from "./capability-runtime.js";
|
|
6
|
+
export const FOUNDATION_SCHEMA_IDS = [
|
|
7
|
+
"foundation-config/v1",
|
|
8
|
+
"foundation-check-report/v1",
|
|
9
|
+
"workspace-dependency-declarations/v1"
|
|
10
|
+
];
|
|
11
|
+
const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
12
|
+
const validators = new Map();
|
|
13
|
+
export function isFoundationSchemaId(value) {
|
|
14
|
+
return FOUNDATION_SCHEMA_IDS.some((candidate) => candidate === value);
|
|
15
|
+
}
|
|
16
|
+
export function schemaPath(schemaId) {
|
|
17
|
+
return join(packageRoot, "schemas", `${schemaId}.schema.json`);
|
|
18
|
+
}
|
|
19
|
+
export async function readFoundationSchema(schemaId) {
|
|
20
|
+
return readFile(schemaPath(schemaId), "utf8");
|
|
21
|
+
}
|
|
22
|
+
function safeValidationMessage(errors) {
|
|
23
|
+
if (errors === null || errors === undefined || errors.length === 0) {
|
|
24
|
+
return "Input does not match the required schema.";
|
|
25
|
+
}
|
|
26
|
+
return errors
|
|
27
|
+
.slice(0, 8)
|
|
28
|
+
.map((error) => `${error.instancePath || "/"} ${error.message ?? "is invalid"}`)
|
|
29
|
+
.join("; ")
|
|
30
|
+
.slice(0, 1000);
|
|
31
|
+
}
|
|
32
|
+
async function validator(schemaId) {
|
|
33
|
+
const cached = validators.get(schemaId);
|
|
34
|
+
if (cached !== undefined) {
|
|
35
|
+
return cached;
|
|
36
|
+
}
|
|
37
|
+
const schema = JSON.parse(await readFoundationSchema(schemaId));
|
|
38
|
+
const ajv = new Ajv2020({
|
|
39
|
+
allErrors: true,
|
|
40
|
+
strict: true,
|
|
41
|
+
validateFormats: false
|
|
42
|
+
});
|
|
43
|
+
const compiled = ajv.compile(schema);
|
|
44
|
+
validators.set(schemaId, compiled);
|
|
45
|
+
return compiled;
|
|
46
|
+
}
|
|
47
|
+
export async function assertSchema(schemaId, input, phase) {
|
|
48
|
+
const validate = await validator(schemaId);
|
|
49
|
+
if (!validate(input)) {
|
|
50
|
+
throw new CapabilityInputError({
|
|
51
|
+
code: "SCHEMA_INVALID",
|
|
52
|
+
message: safeValidationMessage(validate.errors),
|
|
53
|
+
phase,
|
|
54
|
+
retryable: false
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=schema-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-catalog.js","sourceRoot":"","sources":["../src/schema-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EACL,OAAO,EAGR,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,sBAAsB;IACtB,4BAA4B;IAC5B,sCAAsC;CAC9B,CAAC;AAIX,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAwC,CAAC;AAEnE,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAA4B;IACrD,OAAO,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,QAAQ,cAAc,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAA4B;IAE5B,OAAO,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAiD;IAC9E,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnE,OAAO,2CAA2C,CAAC;IACrD,CAAC;IACD,OAAO,MAAM;SACV,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,YAAY,EAAE,CAAC;SAC/E,IAAI,CAAC,IAAI,CAAC;SACV,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAA4B;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAW,CAAC;IAC1E,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC;QACtB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAA4B,EAC5B,KAAc,EACd,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,oBAAoB,CAAC;YAC7B,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC/C,KAAK;YACL,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-version.d.ts","sourceRoot":"","sources":["../src/semantic-version.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const EXACT_SEMVER_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
|
|
2
|
+
export function isExactVersion(value) {
|
|
3
|
+
return EXACT_SEMVER_PATTERN.test(value);
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=semantic-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-version.js","sourceRoot":"","sources":["../src/semantic-version.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GACxB,2HAA2H,CAAC;AAE9H,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function assertNotCancelled(signal: AbortSignal | undefined): void;
|
|
2
|
+
export declare function assertRepositoryRelativePath(path: string, phase: string): void;
|
|
3
|
+
export declare function resolveContainedFile(consumerRoot: string, repositoryPath: string, phase: string): Promise<string>;
|
|
4
|
+
export declare function parseStrictYaml(source: string, phase: string): unknown;
|
|
5
|
+
export declare function loadStrictYamlFile(consumerRoot: string, repositoryPath: string, phase: string, signal?: AbortSignal): Promise<unknown>;
|
|
6
|
+
//# sourceMappingURL=strict-yaml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strict-yaml.d.ts","sourceRoot":"","sources":["../src/strict-yaml.ts"],"names":[],"mappings":"AAaA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CASxE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAc9E;AAED,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAmDjB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CA6CtE;AAED,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC,CAMlB"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { readFile, realpath, stat } from "node:fs/promises";
|
|
2
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
3
|
+
import { isAlias, isMap, isNode, isPair, parseDocument, visit } from "yaml";
|
|
4
|
+
import { CapabilityInputError } from "./capability-runtime.js";
|
|
5
|
+
const MAX_CONFIG_BYTES = 1024 * 1024;
|
|
6
|
+
function inputError(code, message, phase) {
|
|
7
|
+
throw new CapabilityInputError({ code, message, phase, retryable: false });
|
|
8
|
+
}
|
|
9
|
+
export function assertNotCancelled(signal) {
|
|
10
|
+
if (signal?.aborted === true) {
|
|
11
|
+
throw new CapabilityInputError({
|
|
12
|
+
code: "EXECUTION_CANCELLED",
|
|
13
|
+
message: "Foundation check was cancelled.",
|
|
14
|
+
phase: "execution",
|
|
15
|
+
retryable: false
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export function assertRepositoryRelativePath(path, phase) {
|
|
20
|
+
const segments = path.split("/");
|
|
21
|
+
if (path.length === 0 ||
|
|
22
|
+
isAbsolute(path) ||
|
|
23
|
+
path.includes("\\") ||
|
|
24
|
+
segments.some((segment) => segment === "" || segment === "." || segment === "..")) {
|
|
25
|
+
inputError("CONFIG_PATH_INVALID", "Configuration paths must be normalized repository-relative POSIX paths.", phase);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export async function resolveContainedFile(consumerRoot, repositoryPath, phase) {
|
|
29
|
+
assertRepositoryRelativePath(repositoryPath, phase);
|
|
30
|
+
let canonicalRoot;
|
|
31
|
+
try {
|
|
32
|
+
canonicalRoot = await realpath(consumerRoot);
|
|
33
|
+
const rootMetadata = await stat(canonicalRoot);
|
|
34
|
+
if (!rootMetadata.isDirectory()) {
|
|
35
|
+
inputError("CONSUMER_ROOT_INVALID", "Consumer root must be an existing directory.", phase);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (error instanceof CapabilityInputError) {
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
inputError("CONSUMER_ROOT_UNAVAILABLE", "Consumer root must be an existing accessible directory.", phase);
|
|
43
|
+
}
|
|
44
|
+
const candidate = resolve(canonicalRoot, repositoryPath);
|
|
45
|
+
let canonicalCandidate;
|
|
46
|
+
try {
|
|
47
|
+
canonicalCandidate = await realpath(candidate);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
inputError("CONFIG_FILE_UNAVAILABLE", `Required configuration file is unavailable: ${repositoryPath}.`, phase);
|
|
51
|
+
}
|
|
52
|
+
const relation = relative(canonicalRoot, canonicalCandidate);
|
|
53
|
+
if (relation === ".." || relation.startsWith(`..${sep}`) || isAbsolute(relation)) {
|
|
54
|
+
inputError("CONFIG_PATH_ESCAPE", `Configuration path escapes the consumer repository: ${repositoryPath}.`, phase);
|
|
55
|
+
}
|
|
56
|
+
const metadata = await stat(canonicalCandidate);
|
|
57
|
+
if (!metadata.isFile() || metadata.size > MAX_CONFIG_BYTES) {
|
|
58
|
+
inputError("CONFIG_FILE_INVALID", `Configuration file must be a regular file no larger than ${MAX_CONFIG_BYTES} bytes: ${repositoryPath}.`, phase);
|
|
59
|
+
}
|
|
60
|
+
return canonicalCandidate;
|
|
61
|
+
}
|
|
62
|
+
export function parseStrictYaml(source, phase) {
|
|
63
|
+
const document = parseDocument(source, {
|
|
64
|
+
customTags: [],
|
|
65
|
+
merge: false,
|
|
66
|
+
schema: "core",
|
|
67
|
+
uniqueKeys: true
|
|
68
|
+
});
|
|
69
|
+
if (document.errors.length > 0 || document.warnings.length > 0) {
|
|
70
|
+
const problem = [...document.errors, ...document.warnings]
|
|
71
|
+
.slice(0, 8)
|
|
72
|
+
.map((error) => error.message)
|
|
73
|
+
.join("; ")
|
|
74
|
+
.slice(0, 1000);
|
|
75
|
+
inputError("YAML_INVALID", problem || "YAML input is invalid.", phase);
|
|
76
|
+
}
|
|
77
|
+
let forbidden;
|
|
78
|
+
visit(document, (_key, node) => {
|
|
79
|
+
if (isAlias(node)) {
|
|
80
|
+
forbidden = "YAML aliases are prohibited.";
|
|
81
|
+
return visit.BREAK;
|
|
82
|
+
}
|
|
83
|
+
if (isNode(node) && (node.anchor !== undefined || node.tag !== undefined)) {
|
|
84
|
+
forbidden = "YAML anchors and explicit tags are prohibited.";
|
|
85
|
+
return visit.BREAK;
|
|
86
|
+
}
|
|
87
|
+
if (isPair(node) &&
|
|
88
|
+
isNode(node.key) &&
|
|
89
|
+
"value" in node.key &&
|
|
90
|
+
node.key.value === "<<") {
|
|
91
|
+
forbidden = "YAML merge keys are prohibited.";
|
|
92
|
+
return visit.BREAK;
|
|
93
|
+
}
|
|
94
|
+
if (isMap(node) && node.items.length > 10_000) {
|
|
95
|
+
forbidden = "YAML mapping exceeds the supported size limit.";
|
|
96
|
+
return visit.BREAK;
|
|
97
|
+
}
|
|
98
|
+
return;
|
|
99
|
+
});
|
|
100
|
+
if (forbidden !== undefined) {
|
|
101
|
+
inputError("YAML_FEATURE_PROHIBITED", forbidden, phase);
|
|
102
|
+
}
|
|
103
|
+
return document.toJS({ maxAliasCount: 0 });
|
|
104
|
+
}
|
|
105
|
+
export async function loadStrictYamlFile(consumerRoot, repositoryPath, phase, signal) {
|
|
106
|
+
assertNotCancelled(signal);
|
|
107
|
+
const path = await resolveContainedFile(consumerRoot, repositoryPath, phase);
|
|
108
|
+
const source = await readFile(path, "utf8");
|
|
109
|
+
assertNotCancelled(signal);
|
|
110
|
+
return parseStrictYaml(source, phase);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=strict-yaml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strict-yaml.js","sourceRoot":"","sources":["../src/strict-yaml.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-teams/engineering-foundation",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Versioned engineering policy, tooling, and conformance for Agent Teams repositories.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -17,10 +17,14 @@
|
|
|
17
17
|
"types": "./dist/local-mode/index.d.ts",
|
|
18
18
|
"import": "./dist/local-mode/index.js"
|
|
19
19
|
},
|
|
20
|
+
"./schemas/*": "./schemas/*",
|
|
21
|
+
"./presets/*": "./presets/*",
|
|
20
22
|
"./package.json": "./package.json"
|
|
21
23
|
},
|
|
22
24
|
"files": [
|
|
23
25
|
"dist",
|
|
26
|
+
"presets",
|
|
27
|
+
"schemas",
|
|
24
28
|
"LICENSE",
|
|
25
29
|
"README.md"
|
|
26
30
|
],
|
|
@@ -50,6 +54,7 @@
|
|
|
50
54
|
]
|
|
51
55
|
},
|
|
52
56
|
"dependencies": {
|
|
57
|
+
"ajv": "8.20.0",
|
|
53
58
|
"proper-lockfile": "4.1.2",
|
|
54
59
|
"yaml": "2.9.0"
|
|
55
60
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"categories": {
|
|
3
|
+
"correctness": "error",
|
|
4
|
+
"suspicious": "error"
|
|
5
|
+
},
|
|
6
|
+
"options": {
|
|
7
|
+
"reportUnusedDisableDirectives": "error",
|
|
8
|
+
"respectEslintDisableDirectives": false,
|
|
9
|
+
"typeAware": false,
|
|
10
|
+
"typeCheck": false
|
|
11
|
+
},
|
|
12
|
+
"plugins": [
|
|
13
|
+
"eslint",
|
|
14
|
+
"typescript",
|
|
15
|
+
"oxc",
|
|
16
|
+
"unicorn",
|
|
17
|
+
"import",
|
|
18
|
+
"promise"
|
|
19
|
+
],
|
|
20
|
+
"rules": {
|
|
21
|
+
"array-callback-return": "error",
|
|
22
|
+
"curly": "error",
|
|
23
|
+
"eqeqeq": "error",
|
|
24
|
+
"import/no-duplicates": "error",
|
|
25
|
+
"import/no-mutable-exports": "error",
|
|
26
|
+
"import/no-self-import": "error",
|
|
27
|
+
"no-eval": "error",
|
|
28
|
+
"no-implied-eval": "error",
|
|
29
|
+
"no-new-func": "error",
|
|
30
|
+
"no-promise-executor-return": "error",
|
|
31
|
+
"no-prototype-builtins": "error",
|
|
32
|
+
"oxc/no-accumulating-spread": "error",
|
|
33
|
+
"promise/no-return-wrap": "error",
|
|
34
|
+
"promise/param-names": "error",
|
|
35
|
+
"unicorn/error-message": "error",
|
|
36
|
+
"unicorn/no-abusive-eslint-disable": "error",
|
|
37
|
+
"unicorn/no-useless-undefined": "error"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"allowUnreachableCode": false,
|
|
4
|
+
"allowUnusedLabels": false,
|
|
5
|
+
"exactOptionalPropertyTypes": true,
|
|
6
|
+
"forceConsistentCasingInFileNames": true,
|
|
7
|
+
"moduleDetection": "force",
|
|
8
|
+
"noFallthroughCasesInSwitch": true,
|
|
9
|
+
"noImplicitOverride": true,
|
|
10
|
+
"noImplicitReturns": true,
|
|
11
|
+
"noUncheckedIndexedAccess": true,
|
|
12
|
+
"noUncheckedSideEffectImports": true,
|
|
13
|
+
"strict": true,
|
|
14
|
+
"useUnknownInCatchVariables": true,
|
|
15
|
+
"verbatimModuleSyntax": true
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schemas.agent-teams.ai/engineering-foundation/foundation-check-report/v1",
|
|
4
|
+
"title": "Agent Teams Engineering Foundation check report",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"reportSchemaVersion",
|
|
9
|
+
"foundationVersion",
|
|
10
|
+
"coverage",
|
|
11
|
+
"outcome",
|
|
12
|
+
"summary",
|
|
13
|
+
"capabilities"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"reportSchemaVersion": { "const": 1 },
|
|
17
|
+
"foundationVersion": { "type": "string" },
|
|
18
|
+
"coverage": { "const": "full" },
|
|
19
|
+
"outcome": { "$ref": "#/$defs/outcome" },
|
|
20
|
+
"summary": { "$ref": "#/$defs/summary" },
|
|
21
|
+
"capabilities": {
|
|
22
|
+
"type": "array",
|
|
23
|
+
"items": { "$ref": "#/$defs/capabilityReport" }
|
|
24
|
+
},
|
|
25
|
+
"problem": { "$ref": "#/$defs/problem" }
|
|
26
|
+
},
|
|
27
|
+
"$defs": {
|
|
28
|
+
"outcome": {
|
|
29
|
+
"enum": ["passed", "violations", "invalid-input", "failed", "cancelled"]
|
|
30
|
+
},
|
|
31
|
+
"severity": {
|
|
32
|
+
"enum": ["error", "warning", "info"]
|
|
33
|
+
},
|
|
34
|
+
"summary": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"additionalProperties": false,
|
|
37
|
+
"required": ["errors", "warnings", "infos"],
|
|
38
|
+
"properties": {
|
|
39
|
+
"errors": { "type": "integer", "minimum": 0 },
|
|
40
|
+
"warnings": { "type": "integer", "minimum": 0 },
|
|
41
|
+
"infos": { "type": "integer", "minimum": 0 }
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"position": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"additionalProperties": false,
|
|
47
|
+
"required": ["line", "column"],
|
|
48
|
+
"properties": {
|
|
49
|
+
"line": { "type": "integer", "minimum": 1 },
|
|
50
|
+
"column": { "type": "integer", "minimum": 1 }
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"location": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"additionalProperties": false,
|
|
56
|
+
"required": ["path"],
|
|
57
|
+
"properties": {
|
|
58
|
+
"path": { "type": "string", "minLength": 1 },
|
|
59
|
+
"start": { "$ref": "#/$defs/position" },
|
|
60
|
+
"end": { "$ref": "#/$defs/position" }
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"evidence": {
|
|
64
|
+
"type": "object",
|
|
65
|
+
"additionalProperties": false,
|
|
66
|
+
"required": ["kind", "value"],
|
|
67
|
+
"properties": {
|
|
68
|
+
"kind": { "type": "string", "minLength": 1 },
|
|
69
|
+
"value": { "type": "string", "maxLength": 500 }
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"diagnostic": {
|
|
73
|
+
"type": "object",
|
|
74
|
+
"additionalProperties": false,
|
|
75
|
+
"required": [
|
|
76
|
+
"ruleId",
|
|
77
|
+
"severity",
|
|
78
|
+
"subject",
|
|
79
|
+
"message",
|
|
80
|
+
"location",
|
|
81
|
+
"relatedLocations",
|
|
82
|
+
"evidence",
|
|
83
|
+
"remediation",
|
|
84
|
+
"requiresArchitectureReview"
|
|
85
|
+
],
|
|
86
|
+
"properties": {
|
|
87
|
+
"ruleId": { "type": "string", "minLength": 1 },
|
|
88
|
+
"severity": { "$ref": "#/$defs/severity" },
|
|
89
|
+
"subject": { "type": "string", "minLength": 1 },
|
|
90
|
+
"message": { "type": "string", "minLength": 1, "maxLength": 1000 },
|
|
91
|
+
"location": { "$ref": "#/$defs/location" },
|
|
92
|
+
"relatedLocations": {
|
|
93
|
+
"type": "array",
|
|
94
|
+
"items": { "$ref": "#/$defs/location" }
|
|
95
|
+
},
|
|
96
|
+
"evidence": {
|
|
97
|
+
"type": "array",
|
|
98
|
+
"items": { "$ref": "#/$defs/evidence" }
|
|
99
|
+
},
|
|
100
|
+
"remediation": { "type": "string", "minLength": 1, "maxLength": 1000 },
|
|
101
|
+
"requiresArchitectureReview": { "type": "boolean" }
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"problem": {
|
|
105
|
+
"type": "object",
|
|
106
|
+
"additionalProperties": false,
|
|
107
|
+
"required": ["code", "message", "phase", "retryable"],
|
|
108
|
+
"properties": {
|
|
109
|
+
"code": { "type": "string", "minLength": 1 },
|
|
110
|
+
"message": { "type": "string", "minLength": 1, "maxLength": 1000 },
|
|
111
|
+
"phase": { "type": "string", "minLength": 1 },
|
|
112
|
+
"retryable": { "type": "boolean" }
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"capabilityReport": {
|
|
116
|
+
"type": "object",
|
|
117
|
+
"additionalProperties": false,
|
|
118
|
+
"required": [
|
|
119
|
+
"capabilityId",
|
|
120
|
+
"capabilityConfigSchemaVersion",
|
|
121
|
+
"outcome",
|
|
122
|
+
"summary",
|
|
123
|
+
"diagnostics"
|
|
124
|
+
],
|
|
125
|
+
"properties": {
|
|
126
|
+
"capabilityId": { "type": "string", "minLength": 1 },
|
|
127
|
+
"capabilityConfigSchemaVersion": { "type": "integer", "minimum": 1 },
|
|
128
|
+
"outcome": { "$ref": "#/$defs/outcome" },
|
|
129
|
+
"summary": { "$ref": "#/$defs/summary" },
|
|
130
|
+
"diagnostics": {
|
|
131
|
+
"type": "array",
|
|
132
|
+
"items": { "$ref": "#/$defs/diagnostic" }
|
|
133
|
+
},
|
|
134
|
+
"problem": { "$ref": "#/$defs/problem" }
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|