@soddong/agentic-contract-validation 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.
- package/CHANGELOG.md +17 -0
- package/README.md +157 -0
- package/dist/database.d.ts +17 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +76 -0
- package/dist/database.js.map +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +21 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +173 -0
- package/dist/registry.js.map +1 -0
- package/dist/seed-apply.d.ts +22 -0
- package/dist/seed-apply.d.ts.map +1 -0
- package/dist/seed-apply.js +198 -0
- package/dist/seed-apply.js.map +1 -0
- package/docs/build.md +25 -0
- package/docs/configuration.md +18 -0
- package/docs/delivery.md +9 -0
- package/docs/operations.md +7 -0
- package/docs/publishing.md +11 -0
- package/docs/schema/generated/README.md +22 -0
- package/docs/schema/generated/schema.json +563 -0
- package/docs/schema/generated/schema.mmd +48 -0
- package/docs/schema/generated/schema.svg +83 -0
- package/docs/schema/generated/validation_contract_profiles.md +72 -0
- package/docs/schema/generated/validation_contract_profiles.svg +71 -0
- package/docs/schema/generated/validation_contract_provider_manifests.md +62 -0
- package/docs/schema/generated/validation_contract_provider_manifests.svg +49 -0
- package/docs/schema/generated/validation_contract_rules.md +91 -0
- package/docs/schema/generated/validation_contract_rules.svg +52 -0
- package/docs/schema/generated/validation_contract_schema_migrations.md +47 -0
- package/docs/schema/generated/validation_contract_schema_migrations.svg +27 -0
- package/docs/usage.md +55 -0
- package/package.json +27 -0
- package/src/database/migrations/0001_validation_contract_registry.sql +78 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface AgenticSeedApplyInput {
|
|
2
|
+
readonly projectRoot?: string;
|
|
3
|
+
readonly databasePath?: string;
|
|
4
|
+
readonly sourcePackageName: string;
|
|
5
|
+
readonly sourcePackageVersion: string;
|
|
6
|
+
readonly bundleCode: string;
|
|
7
|
+
readonly bundleVersion: string;
|
|
8
|
+
readonly methodologyCode?: string;
|
|
9
|
+
readonly sourceSection: string;
|
|
10
|
+
readonly targetOperation: string;
|
|
11
|
+
readonly itemKey?: string;
|
|
12
|
+
readonly itemPayload?: unknown;
|
|
13
|
+
readonly mode: "apply";
|
|
14
|
+
}
|
|
15
|
+
export interface AgenticSeedApplyResult {
|
|
16
|
+
readonly status: "applied" | "skipped" | "blocked" | "failed";
|
|
17
|
+
readonly targetRefs?: readonly string[];
|
|
18
|
+
readonly message?: string;
|
|
19
|
+
readonly diagnostics?: readonly unknown[];
|
|
20
|
+
}
|
|
21
|
+
export declare function applyAgenticSeed(input: AgenticSeedApplyInput): Promise<AgenticSeedApplyResult>;
|
|
22
|
+
//# sourceMappingURL=seed-apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-apply.d.ts","sourceRoot":"","sources":["../src/seed-apply.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC9D,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CAC3C;AAgND,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAuCpG"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { openValidationContractDatabase } from "./database.js";
|
|
2
|
+
import { ValidationContractRegistry } from "./registry.js";
|
|
3
|
+
const supportedValidationTypes = new Set([
|
|
4
|
+
"STRUCTURE",
|
|
5
|
+
"SCHEMA",
|
|
6
|
+
"REFERENCE_INTEGRITY",
|
|
7
|
+
"POLICY",
|
|
8
|
+
"CONTENT_RULE",
|
|
9
|
+
"QUALITY_CHECKLIST",
|
|
10
|
+
"RUBRIC",
|
|
11
|
+
"EXAMPLE_BASED_REVIEW"
|
|
12
|
+
]);
|
|
13
|
+
const supportedExecutionModes = new Set(["AUTOMATED", "HUMAN_REVIEW", "LLM_EVALUATION", "HYBRID"]);
|
|
14
|
+
const supportedSeverityCodes = new Set(["ERROR", "WARNING", "INFO"]);
|
|
15
|
+
function isRecord(value) {
|
|
16
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
function asArray(value) {
|
|
19
|
+
if (!Array.isArray(value)) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
return value.filter(isRecord);
|
|
23
|
+
}
|
|
24
|
+
function stringValue(value, key) {
|
|
25
|
+
const raw = value[key];
|
|
26
|
+
return typeof raw === "string" && raw.length > 0 ? raw : undefined;
|
|
27
|
+
}
|
|
28
|
+
function objectValue(value, key) {
|
|
29
|
+
const raw = value[key];
|
|
30
|
+
return isRecord(raw) ? raw : undefined;
|
|
31
|
+
}
|
|
32
|
+
function sourceMetadata(input, payload) {
|
|
33
|
+
return {
|
|
34
|
+
seedSourcePackageName: input.sourcePackageName,
|
|
35
|
+
seedSourcePackageVersion: input.sourcePackageVersion,
|
|
36
|
+
seedBundleCode: input.bundleCode,
|
|
37
|
+
seedBundleVersion: input.bundleVersion,
|
|
38
|
+
seedSourceSection: input.sourceSection,
|
|
39
|
+
seedTargetOperation: input.targetOperation,
|
|
40
|
+
seedItemKey: input.itemKey,
|
|
41
|
+
seedPayload: payload
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function normalizeValidationTypeCode(value) {
|
|
45
|
+
if (value === undefined) {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
if (supportedValidationTypes.has(value)) {
|
|
49
|
+
return { value: value };
|
|
50
|
+
}
|
|
51
|
+
switch (value) {
|
|
52
|
+
case "NAMING":
|
|
53
|
+
return { value: "POLICY", originalValue: value };
|
|
54
|
+
case "REFERENCE":
|
|
55
|
+
return { value: "REFERENCE_INTEGRITY", originalValue: value };
|
|
56
|
+
default:
|
|
57
|
+
return { originalValue: value };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function normalizeExecutionModeCode(value) {
|
|
61
|
+
return value !== undefined && supportedExecutionModes.has(value) ? value : undefined;
|
|
62
|
+
}
|
|
63
|
+
function normalizeSeverityCode(value) {
|
|
64
|
+
return value !== undefined && supportedSeverityCodes.has(value) ? value : undefined;
|
|
65
|
+
}
|
|
66
|
+
function mergeMetadata(input, payload, existing, extra) {
|
|
67
|
+
return {
|
|
68
|
+
...existing,
|
|
69
|
+
...extra,
|
|
70
|
+
...sourceMetadata(input, payload)
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function normalizeRule(input, profilePayload, rulePayload) {
|
|
74
|
+
const ruleId = stringValue(rulePayload, "ruleId");
|
|
75
|
+
const validationType = normalizeValidationTypeCode(stringValue(rulePayload, "validationTypeCode"));
|
|
76
|
+
const executionModeCode = normalizeExecutionModeCode(stringValue(rulePayload, "executionModeCode"));
|
|
77
|
+
const severityCode = normalizeSeverityCode(stringValue(rulePayload, "severityCode"));
|
|
78
|
+
const appliesToTypeCode = stringValue(rulePayload, "appliesToTypeCode");
|
|
79
|
+
const message = stringValue(rulePayload, "message");
|
|
80
|
+
const providerModule = stringValue(rulePayload, "providerModule") ?? stringValue(profilePayload, "providerModule");
|
|
81
|
+
if (ruleId === undefined ||
|
|
82
|
+
providerModule === undefined ||
|
|
83
|
+
validationType.value === undefined ||
|
|
84
|
+
executionModeCode === undefined ||
|
|
85
|
+
severityCode === undefined ||
|
|
86
|
+
appliesToTypeCode === undefined ||
|
|
87
|
+
message === undefined) {
|
|
88
|
+
throw new Error(`Invalid validation rule seed payload: ${ruleId ?? "(missing ruleId)"}`);
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
ruleId,
|
|
92
|
+
providerModule,
|
|
93
|
+
validationTypeCode: validationType.value,
|
|
94
|
+
executionModeCode,
|
|
95
|
+
severityCode,
|
|
96
|
+
appliesToTypeCode,
|
|
97
|
+
appliesToRef: stringValue(rulePayload, "appliesToRef"),
|
|
98
|
+
sourceComponentRef: stringValue(rulePayload, "sourceComponentRef"),
|
|
99
|
+
parameters: objectValue(rulePayload, "parameters"),
|
|
100
|
+
message,
|
|
101
|
+
remediation: stringValue(rulePayload, "remediation"),
|
|
102
|
+
metadata: mergeMetadata(input, rulePayload, objectValue(rulePayload, "metadata"), validationType.originalValue === undefined
|
|
103
|
+
? undefined
|
|
104
|
+
: {
|
|
105
|
+
originalValidationTypeCode: validationType.originalValue,
|
|
106
|
+
normalizedValidationTypeCode: validationType.value
|
|
107
|
+
})
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function normalizeProfile(input, payload) {
|
|
111
|
+
const profileId = stringValue(payload, "profileId");
|
|
112
|
+
const providerModule = stringValue(payload, "providerModule");
|
|
113
|
+
const targetDomain = stringValue(payload, "targetDomain");
|
|
114
|
+
const rules = asArray(payload.rules);
|
|
115
|
+
if (profileId === undefined || providerModule === undefined || targetDomain === undefined || rules.length === 0) {
|
|
116
|
+
throw new Error(`Invalid validation profile seed payload: ${profileId ?? "(missing profileId)"}`);
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
profileId,
|
|
120
|
+
providerModule,
|
|
121
|
+
targetDomain,
|
|
122
|
+
rules: rules.map((rule) => normalizeRule(input, payload, rule)),
|
|
123
|
+
metadata: mergeMetadata(input, payload, objectValue(payload, "metadata"))
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function applied(targetRefs, skippedCount) {
|
|
127
|
+
if (targetRefs.length === 0 && skippedCount > 0) {
|
|
128
|
+
return {
|
|
129
|
+
status: "skipped",
|
|
130
|
+
message: `All ${skippedCount} validation profile seed item(s) already exist.`
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
status: "applied",
|
|
135
|
+
targetRefs,
|
|
136
|
+
message: skippedCount > 0 ? `${skippedCount} validation profile seed item(s) already existed.` : undefined
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function applyValidationProfiles(ctx) {
|
|
140
|
+
const targetRefs = [];
|
|
141
|
+
let skippedCount = 0;
|
|
142
|
+
for (const payload of asArray(ctx.input.itemPayload)) {
|
|
143
|
+
const profile = normalizeProfile(ctx.input, payload);
|
|
144
|
+
const result = ctx.registry.registerValidationProfile({
|
|
145
|
+
providerVersion: ctx.input.sourcePackageVersion,
|
|
146
|
+
profile,
|
|
147
|
+
metadata: sourceMetadata(ctx.input, payload)
|
|
148
|
+
});
|
|
149
|
+
if (result.status === "skipped") {
|
|
150
|
+
skippedCount += 1;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
targetRefs.push(`validationProfile:${profile.profileId}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return applied(targetRefs, skippedCount);
|
|
157
|
+
}
|
|
158
|
+
export async function applyAgenticSeed(input) {
|
|
159
|
+
if (input.mode !== "apply") {
|
|
160
|
+
return {
|
|
161
|
+
status: "failed",
|
|
162
|
+
message: "agentic-contract-validation only supports apply mode."
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
const db = openValidationContractDatabase({
|
|
166
|
+
projectRoot: input.projectRoot,
|
|
167
|
+
databasePath: input.databasePath
|
|
168
|
+
});
|
|
169
|
+
try {
|
|
170
|
+
const ctx = {
|
|
171
|
+
input,
|
|
172
|
+
db,
|
|
173
|
+
registry: new ValidationContractRegistry(db)
|
|
174
|
+
};
|
|
175
|
+
const applyInTransaction = db.transaction(() => {
|
|
176
|
+
switch (input.sourceSection) {
|
|
177
|
+
case "validationProfiles":
|
|
178
|
+
return applyValidationProfiles(ctx);
|
|
179
|
+
default:
|
|
180
|
+
return {
|
|
181
|
+
status: "blocked",
|
|
182
|
+
message: `Unsupported validation contract seed section: ${input.sourceSection}`
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
return applyInTransaction();
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
return {
|
|
190
|
+
status: "failed",
|
|
191
|
+
message: error instanceof Error ? error.message : String(error)
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
finally {
|
|
195
|
+
db.close();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=seed-apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-apply.js","sourceRoot":"","sources":["../src/seed-apply.ts"],"names":[],"mappings":"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"}
|
package/docs/build.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Build
|
|
2
|
+
|
|
3
|
+
## Build
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm run build --workspace @soddong/agentic-contract-validation
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Typecheck
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm run typecheck --workspace @soddong/agentic-contract-validation
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Dev Test
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm run dev:test:agentic-contract-validation
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Pack Dry Run
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm pack --workspace @soddong/agentic-contract-validation --dry-run
|
|
25
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
`@soddong/agentic-contract-validation`은 별도 package 전용 configuration을 사용하지 않습니다.
|
|
4
|
+
|
|
5
|
+
registry DB 경로는 consumer project의 `agentic.config.json` runtime database 설정을 따릅니다.
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"runtime": {
|
|
10
|
+
"database": {
|
|
11
|
+
"type": "sqlite",
|
|
12
|
+
"path": ".agentic/platform.sqlite"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
환경별 registry, 인증, delivery 값은 consumer project, `.npmrc`, CI/CD variables에서 제공합니다.
|
package/docs/delivery.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Operations
|
|
2
|
+
|
|
3
|
+
`@soddong/agentic-contract-validation`은 runtime process, CLI, adapter를 제공하지 않습니다.
|
|
4
|
+
|
|
5
|
+
`0.2.0`부터 validation provider/profile/rule registry를 SQLite에 저장할 수 있습니다. 기본 DB 경로는 consumer project의 `agentic.config.json` runtime database 설정을 따르며, 설정이 없으면 `.agentic/platform.sqlite`를 사용합니다.
|
|
6
|
+
|
|
7
|
+
운영 확인 대상은 설치된 package version, public contract API 호환성, `validation_contract_%` table migration 적용 여부입니다.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Publishing
|
|
2
|
+
|
|
3
|
+
`@soddong/agentic-contract-validation`은 package 내부에 registry를 고정하지 않습니다.
|
|
4
|
+
|
|
5
|
+
공식 registry publish 예시:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm publish --workspace @soddong/agentic-contract-validation --registry=https://registry.npmjs.org/
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
publish 전에는 build, typecheck, dev-test, consistency check, pack dry-run을 수행합니다.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# agentic-contract-validation
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
Agentic Platform validation contract registry database.
|
|
6
|
+
|
|
7
|
+
## Tables
|
|
8
|
+
|
|
9
|
+
| Name | Columns | Comment | Type |
|
|
10
|
+
| ----------------------------------------------------------------------------------- | ------- | ------------------------------------------------------------ | ----- |
|
|
11
|
+
| [validation_contract_schema_migrations](validation_contract_schema_migrations.md) | 3 | validation contract registry migration 적용 이력을 관리한다. | table |
|
|
12
|
+
| [validation_contract_provider_manifests](validation_contract_provider_manifests.md) | 7 | validation provider manifest를 관리한다. | table |
|
|
13
|
+
| [validation_contract_profiles](validation_contract_profiles.md) | 8 | provider manifest가 제공하는 validation profile을 관리한다. | table |
|
|
14
|
+
| [validation_contract_rules](validation_contract_rules.md) | 17 | validation profile에 포함된 rule contract를 관리한다. | table |
|
|
15
|
+
|
|
16
|
+
## Relations
|
|
17
|
+
|
|
18
|
+

|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
> Generated by [tbls](https://github.com/k1LoW/tbls)
|