@galaxy-stack/ai-coder-core 0.1.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/LICENSE +21 -0
- package/README.md +131 -0
- package/dist/approval/approval-policy.d.ts +31 -0
- package/dist/approval/approval-policy.d.ts.map +1 -0
- package/dist/approval/approval-policy.js +179 -0
- package/dist/approval/approval-policy.js.map +1 -0
- package/dist/approval/index.d.ts +2 -0
- package/dist/approval/index.d.ts.map +1 -0
- package/dist/approval/index.js +2 -0
- package/dist/approval/index.js.map +1 -0
- package/dist/context/attachment-types.d.ts +35 -0
- package/dist/context/attachment-types.d.ts.map +1 -0
- package/dist/context/attachment-types.js +9 -0
- package/dist/context/attachment-types.js.map +1 -0
- package/dist/context/checkpoint.d.ts +194 -0
- package/dist/context/checkpoint.d.ts.map +1 -0
- package/dist/context/checkpoint.js +921 -0
- package/dist/context/checkpoint.js.map +1 -0
- package/dist/context/context-manager.d.ts +153 -0
- package/dist/context/context-manager.d.ts.map +1 -0
- package/dist/context/context-manager.js +541 -0
- package/dist/context/context-manager.js.map +1 -0
- package/dist/context/context-profile.d.ts +42 -0
- package/dist/context/context-profile.d.ts.map +1 -0
- package/dist/context/context-profile.js +102 -0
- package/dist/context/context-profile.js.map +1 -0
- package/dist/context/index.d.ts +7 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +7 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/token-ledger.d.ts +102 -0
- package/dist/context/token-ledger.d.ts.map +1 -0
- package/dist/context/token-ledger.js +205 -0
- package/dist/context/token-ledger.js.map +1 -0
- package/dist/context/tool-output.d.ts +46 -0
- package/dist/context/tool-output.d.ts.map +1 -0
- package/dist/context/tool-output.js +82 -0
- package/dist/context/tool-output.js.map +1 -0
- package/dist/deterministic-order.d.ts +3 -0
- package/dist/deterministic-order.d.ts.map +1 -0
- package/dist/deterministic-order.js +5 -0
- package/dist/deterministic-order.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/ports/approval-port.d.ts +29 -0
- package/dist/ports/approval-port.d.ts.map +1 -0
- package/dist/ports/approval-port.js +9 -0
- package/dist/ports/approval-port.js.map +1 -0
- package/dist/ports/artifact-port.d.ts +66 -0
- package/dist/ports/artifact-port.d.ts.map +1 -0
- package/dist/ports/artifact-port.js +9 -0
- package/dist/ports/artifact-port.js.map +1 -0
- package/dist/ports/capability-port.d.ts +62 -0
- package/dist/ports/capability-port.d.ts.map +1 -0
- package/dist/ports/capability-port.js +9 -0
- package/dist/ports/capability-port.js.map +1 -0
- package/dist/ports/coding-model-port.d.ts +12 -0
- package/dist/ports/coding-model-port.d.ts.map +1 -0
- package/dist/ports/coding-model-port.js +9 -0
- package/dist/ports/coding-model-port.js.map +1 -0
- package/dist/ports/command-port.d.ts +94 -0
- package/dist/ports/command-port.d.ts.map +1 -0
- package/dist/ports/command-port.js +9 -0
- package/dist/ports/command-port.js.map +1 -0
- package/dist/ports/execution-context.d.ts +30 -0
- package/dist/ports/execution-context.d.ts.map +1 -0
- package/dist/ports/execution-context.js +11 -0
- package/dist/ports/execution-context.js.map +1 -0
- package/dist/ports/git-port.d.ts +27 -0
- package/dist/ports/git-port.d.ts.map +1 -0
- package/dist/ports/git-port.js +9 -0
- package/dist/ports/git-port.js.map +1 -0
- package/dist/ports/host-adapter.d.ts +36 -0
- package/dist/ports/host-adapter.d.ts.map +1 -0
- package/dist/ports/host-adapter.js +9 -0
- package/dist/ports/host-adapter.js.map +1 -0
- package/dist/ports/index.d.ts +16 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +16 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/pagination.d.ts +17 -0
- package/dist/ports/pagination.d.ts.map +1 -0
- package/dist/ports/pagination.js +9 -0
- package/dist/ports/pagination.js.map +1 -0
- package/dist/ports/persistence-port.d.ts +59 -0
- package/dist/ports/persistence-port.d.ts.map +1 -0
- package/dist/ports/persistence-port.js +9 -0
- package/dist/ports/persistence-port.js.map +1 -0
- package/dist/ports/port-result.d.ts +29 -0
- package/dist/ports/port-result.d.ts.map +1 -0
- package/dist/ports/port-result.js +20 -0
- package/dist/ports/port-result.js.map +1 -0
- package/dist/ports/preview-port.d.ts +27 -0
- package/dist/ports/preview-port.d.ts.map +1 -0
- package/dist/ports/preview-port.js +9 -0
- package/dist/ports/preview-port.js.map +1 -0
- package/dist/ports/research-port.d.ts +40 -0
- package/dist/ports/research-port.d.ts.map +1 -0
- package/dist/ports/research-port.js +9 -0
- package/dist/ports/research-port.js.map +1 -0
- package/dist/ports/trace-port.d.ts +26 -0
- package/dist/ports/trace-port.d.ts.map +1 -0
- package/dist/ports/trace-port.js +9 -0
- package/dist/ports/trace-port.js.map +1 -0
- package/dist/ports/workspace-port.d.ts +126 -0
- package/dist/ports/workspace-port.d.ts.map +1 -0
- package/dist/ports/workspace-port.js +9 -0
- package/dist/ports/workspace-port.js.map +1 -0
- package/dist/prompt/index.d.ts +2 -0
- package/dist/prompt/index.d.ts.map +1 -0
- package/dist/prompt/index.js +2 -0
- package/dist/prompt/index.js.map +1 -0
- package/dist/prompt/prompt-assembler.d.ts +114 -0
- package/dist/prompt/prompt-assembler.d.ts.map +1 -0
- package/dist/prompt/prompt-assembler.js +363 -0
- package/dist/prompt/prompt-assembler.js.map +1 -0
- package/dist/retrieval/evidence.d.ts +41 -0
- package/dist/retrieval/evidence.d.ts.map +1 -0
- package/dist/retrieval/evidence.js +48 -0
- package/dist/retrieval/evidence.js.map +1 -0
- package/dist/retrieval/index.d.ts +4 -0
- package/dist/retrieval/index.d.ts.map +1 -0
- package/dist/retrieval/index.js +4 -0
- package/dist/retrieval/index.js.map +1 -0
- package/dist/retrieval/lexical-retriever.d.ts +56 -0
- package/dist/retrieval/lexical-retriever.d.ts.map +1 -0
- package/dist/retrieval/lexical-retriever.js +128 -0
- package/dist/retrieval/lexical-retriever.js.map +1 -0
- package/dist/retrieval/retrieval-policy.d.ts +25 -0
- package/dist/retrieval/retrieval-policy.d.ts.map +1 -0
- package/dist/retrieval/retrieval-policy.js +71 -0
- package/dist/retrieval/retrieval-policy.js.map +1 -0
- package/dist/runtime/completion-gate.d.ts +75 -0
- package/dist/runtime/completion-gate.d.ts.map +1 -0
- package/dist/runtime/completion-gate.js +114 -0
- package/dist/runtime/completion-gate.js.map +1 -0
- package/dist/runtime/index.d.ts +7 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/run-controller.d.ts +55 -0
- package/dist/runtime/run-controller.d.ts.map +1 -0
- package/dist/runtime/run-controller.js +2673 -0
- package/dist/runtime/run-controller.js.map +1 -0
- package/dist/runtime/runtime-error.d.ts +7 -0
- package/dist/runtime/runtime-error.d.ts.map +1 -0
- package/dist/runtime/runtime-error.js +11 -0
- package/dist/runtime/runtime-error.js.map +1 -0
- package/dist/runtime/runtime-types.d.ts +303 -0
- package/dist/runtime/runtime-types.d.ts.map +1 -0
- package/dist/runtime/runtime-types.js +2 -0
- package/dist/runtime/runtime-types.js.map +1 -0
- package/dist/runtime/state-machine.d.ts +27 -0
- package/dist/runtime/state-machine.d.ts.map +1 -0
- package/dist/runtime/state-machine.js +68 -0
- package/dist/runtime/state-machine.js.map +1 -0
- package/dist/runtime/trace-emitter.d.ts +17 -0
- package/dist/runtime/trace-emitter.d.ts.map +1 -0
- package/dist/runtime/trace-emitter.js +91 -0
- package/dist/runtime/trace-emitter.js.map +1 -0
- package/dist/tools/coding-messages.d.ts +112 -0
- package/dist/tools/coding-messages.d.ts.map +1 -0
- package/dist/tools/coding-messages.js +20 -0
- package/dist/tools/coding-messages.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/json-schema.d.ts +18 -0
- package/dist/tools/json-schema.d.ts.map +1 -0
- package/dist/tools/json-schema.js +299 -0
- package/dist/tools/json-schema.js.map +1 -0
- package/dist/tools/settings-types.d.ts +41 -0
- package/dist/tools/settings-types.d.ts.map +1 -0
- package/dist/tools/settings-types.js +88 -0
- package/dist/tools/settings-types.js.map +1 -0
- package/dist/tools/tool-effect-profile.d.ts +44 -0
- package/dist/tools/tool-effect-profile.d.ts.map +1 -0
- package/dist/tools/tool-effect-profile.js +157 -0
- package/dist/tools/tool-effect-profile.js.map +1 -0
- package/dist/tools/tool-registry-types.d.ts +72 -0
- package/dist/tools/tool-registry-types.d.ts.map +1 -0
- package/dist/tools/tool-registry-types.js +9 -0
- package/dist/tools/tool-registry-types.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +155 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +599 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/tool-registry.schema.json +144 -0
- package/docs/ARCHITECTURE.md +259 -0
- package/docs/HOST_CONFORMANCE.md +210 -0
- package/docs/PROMPT_CONTRACT.md +123 -0
- package/docs/TOOL_EFFECT_PROFILE.md +77 -0
- package/docs/TOOL_REGISTRY_COMPARISON.md +358 -0
- package/package.json +76 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-28
|
|
6
|
+
* @desc Deterministic validator for the JSON Schema subset accepted by AI Coder tools.
|
|
7
|
+
*/
|
|
8
|
+
import { compareAiCoderText } from "../deterministic-order.js";
|
|
9
|
+
const JSON_SCHEMA_TYPES = new Set([
|
|
10
|
+
"array",
|
|
11
|
+
"boolean",
|
|
12
|
+
"integer",
|
|
13
|
+
"null",
|
|
14
|
+
"number",
|
|
15
|
+
"object",
|
|
16
|
+
"string",
|
|
17
|
+
]);
|
|
18
|
+
const SUPPORTED_KEYWORDS = new Set([
|
|
19
|
+
"$defs", "$id", "$ref", "$schema", "additionalProperties", "const",
|
|
20
|
+
"default", "description", "enum", "items", "maxItems", "maxLength",
|
|
21
|
+
"maximum", "minItems", "minLength", "minimum", "pattern", "properties",
|
|
22
|
+
"required", "title", "type", "uniqueItems", "oneOf",
|
|
23
|
+
]);
|
|
24
|
+
function isRecord(value) {
|
|
25
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
26
|
+
}
|
|
27
|
+
function valueType(value) {
|
|
28
|
+
if (Array.isArray(value))
|
|
29
|
+
return "array";
|
|
30
|
+
if (value === null)
|
|
31
|
+
return "null";
|
|
32
|
+
if (Number.isInteger(value))
|
|
33
|
+
return "integer";
|
|
34
|
+
return typeof value;
|
|
35
|
+
}
|
|
36
|
+
function decodePointerSegment(segment) {
|
|
37
|
+
return segment.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
38
|
+
}
|
|
39
|
+
function resolveLocalRef(root, reference) {
|
|
40
|
+
if (reference === "#")
|
|
41
|
+
return root;
|
|
42
|
+
if (!reference.startsWith("#/"))
|
|
43
|
+
return null;
|
|
44
|
+
let current = root;
|
|
45
|
+
for (const rawSegment of reference.slice(2).split("/")) {
|
|
46
|
+
if (!isRecord(current))
|
|
47
|
+
return null;
|
|
48
|
+
current = current[decodePointerSegment(rawSegment)];
|
|
49
|
+
}
|
|
50
|
+
return isRecord(current) ? current : null;
|
|
51
|
+
}
|
|
52
|
+
function canonicalValue(value) {
|
|
53
|
+
if (Array.isArray(value))
|
|
54
|
+
return `[${value.map(canonicalValue).join(",")}]`;
|
|
55
|
+
if (isRecord(value)) {
|
|
56
|
+
return `{${Object.keys(value)
|
|
57
|
+
.sort(compareAiCoderText)
|
|
58
|
+
.map((key) => `${JSON.stringify(key)}:${canonicalValue(value[key])}`)
|
|
59
|
+
.join(",")}}`;
|
|
60
|
+
}
|
|
61
|
+
return JSON.stringify(value);
|
|
62
|
+
}
|
|
63
|
+
function validateNode(schema, value, path, errors, root, referenceStack) {
|
|
64
|
+
if (typeof schema.$ref === "string") {
|
|
65
|
+
const resolved = resolveLocalRef(root, schema.$ref);
|
|
66
|
+
if (!resolved) {
|
|
67
|
+
errors.push(`${path} dùng $ref không resolve được: ${schema.$ref}.`);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (referenceStack.has(schema.$ref)) {
|
|
71
|
+
errors.push(`${path} gặp vòng lặp $ref không được hỗ trợ: ${schema.$ref}.`);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
validateNode(resolved, value, path, errors, root, new Set([...referenceStack, schema.$ref]));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if ("const" in schema && !Object.is(schema.const, value)) {
|
|
78
|
+
errors.push(`${path} phải bằng ${String(schema.const)}.`);
|
|
79
|
+
}
|
|
80
|
+
if (Array.isArray(schema.oneOf)) {
|
|
81
|
+
const matchingBranches = schema.oneOf.reduce((count, branch) => {
|
|
82
|
+
if (!isRecord(branch))
|
|
83
|
+
return count;
|
|
84
|
+
const branchErrors = [];
|
|
85
|
+
validateNode(branch, value, path, branchErrors, root, referenceStack);
|
|
86
|
+
return branchErrors.length === 0 ? count + 1 : count;
|
|
87
|
+
}, 0);
|
|
88
|
+
if (matchingBranches !== 1) {
|
|
89
|
+
errors.push(`${path} phải khớp chính xác một nhánh oneOf, nhận ${matchingBranches}.`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const expected = typeof schema.type === "string" ? schema.type : null;
|
|
93
|
+
if (expected) {
|
|
94
|
+
const actual = valueType(value);
|
|
95
|
+
const typeMatches = expected === "number"
|
|
96
|
+
? typeof value === "number" && Number.isFinite(value)
|
|
97
|
+
: expected === "object" ? isRecord(value) : expected === actual;
|
|
98
|
+
if (!typeMatches) {
|
|
99
|
+
errors.push(`${path} phải có type ${expected}, nhận ${actual}.`);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (Array.isArray(schema.enum) && !schema.enum.some((item) => Object.is(item, value))) {
|
|
104
|
+
errors.push(`${path} phải thuộc enum ${schema.enum.map(String).join(", ")}.`);
|
|
105
|
+
}
|
|
106
|
+
if (typeof value === "string") {
|
|
107
|
+
if (typeof schema.minLength === "number" && value.length < schema.minLength) {
|
|
108
|
+
errors.push(`${path} ngắn hơn minLength=${schema.minLength}.`);
|
|
109
|
+
}
|
|
110
|
+
if (typeof schema.maxLength === "number" && value.length > schema.maxLength) {
|
|
111
|
+
errors.push(`${path} dài hơn maxLength=${schema.maxLength}.`);
|
|
112
|
+
}
|
|
113
|
+
if (typeof schema.pattern === "string") {
|
|
114
|
+
try {
|
|
115
|
+
if (!new RegExp(schema.pattern).test(value))
|
|
116
|
+
errors.push(`${path} không khớp pattern ${schema.pattern}.`);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
errors.push(`${path} dùng pattern không hợp lệ: ${schema.pattern}.`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (typeof value === "number") {
|
|
124
|
+
if (typeof schema.minimum === "number" && value < schema.minimum)
|
|
125
|
+
errors.push(`${path} nhỏ hơn minimum=${schema.minimum}.`);
|
|
126
|
+
if (typeof schema.maximum === "number" && value > schema.maximum)
|
|
127
|
+
errors.push(`${path} lớn hơn maximum=${schema.maximum}.`);
|
|
128
|
+
}
|
|
129
|
+
if (Array.isArray(value)) {
|
|
130
|
+
if (typeof schema.minItems === "number" && value.length < schema.minItems)
|
|
131
|
+
errors.push(`${path} ít hơn minItems=${schema.minItems}.`);
|
|
132
|
+
if (typeof schema.maxItems === "number" && value.length > schema.maxItems)
|
|
133
|
+
errors.push(`${path} vượt maxItems=${schema.maxItems}.`);
|
|
134
|
+
if (schema.uniqueItems === true) {
|
|
135
|
+
const canonicalItems = value.map(canonicalValue);
|
|
136
|
+
if (new Set(canonicalItems).size !== canonicalItems.length)
|
|
137
|
+
errors.push(`${path} phải có các phần tử duy nhất.`);
|
|
138
|
+
}
|
|
139
|
+
const itemSchema = isRecord(schema.items) ? schema.items : null;
|
|
140
|
+
if (itemSchema)
|
|
141
|
+
value.forEach((item, index) => validateNode(itemSchema, item, `${path}[${index}]`, errors, root, referenceStack));
|
|
142
|
+
}
|
|
143
|
+
if (isRecord(value)) {
|
|
144
|
+
const properties = isRecord(schema.properties) ? schema.properties : {};
|
|
145
|
+
const required = Array.isArray(schema.required)
|
|
146
|
+
? schema.required.filter((item) => typeof item === "string")
|
|
147
|
+
: [];
|
|
148
|
+
required.forEach((key) => {
|
|
149
|
+
if (!(key in value))
|
|
150
|
+
errors.push(`${path}.${key} là trường bắt buộc.`);
|
|
151
|
+
});
|
|
152
|
+
Object.entries(value).forEach(([key, item]) => {
|
|
153
|
+
const propertySchema = properties[key];
|
|
154
|
+
if (propertySchema) {
|
|
155
|
+
validateNode(propertySchema, item, `${path}.${key}`, errors, root, referenceStack);
|
|
156
|
+
}
|
|
157
|
+
else if (schema.additionalProperties === false) {
|
|
158
|
+
errors.push(`${path}.${key} không được khai báo trong schema.`);
|
|
159
|
+
}
|
|
160
|
+
else if (isRecord(schema.additionalProperties)) {
|
|
161
|
+
validateNode(schema.additionalProperties, item, `${path}.${key}`, errors, root, referenceStack);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
function validateNonNegativeInteger(value, path, errors) {
|
|
167
|
+
if (value !== undefined && (!Number.isInteger(value) || Number(value) < 0)) {
|
|
168
|
+
errors.push(`${path} phải là integer không âm.`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function validateSchemaDefinitionNode(schema, path, errors, root) {
|
|
172
|
+
if (!isRecord(schema)) {
|
|
173
|
+
errors.push(`${path} phải là JSON Schema object.`);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
Object.keys(schema).forEach((keyword) => {
|
|
177
|
+
if (!SUPPORTED_KEYWORDS.has(keyword))
|
|
178
|
+
errors.push(`${path}.${keyword} không thuộc JSON Schema subset được hỗ trợ.`);
|
|
179
|
+
});
|
|
180
|
+
if (schema.type !== undefined && (typeof schema.type !== "string" || !JSON_SCHEMA_TYPES.has(schema.type))) {
|
|
181
|
+
errors.push(`${path}.type không hợp lệ.`);
|
|
182
|
+
}
|
|
183
|
+
if (schema.$ref !== undefined) {
|
|
184
|
+
if (typeof schema.$ref !== "string" || !schema.$ref.startsWith("#")) {
|
|
185
|
+
errors.push(`${path} chỉ hỗ trợ local $ref.`);
|
|
186
|
+
}
|
|
187
|
+
else if (!resolveLocalRef(root, schema.$ref)) {
|
|
188
|
+
errors.push(`${path} dùng $ref không resolve được: ${schema.$ref}.`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (schema.pattern !== undefined) {
|
|
192
|
+
if (typeof schema.pattern !== "string") {
|
|
193
|
+
errors.push(`${path}.pattern phải là string.`);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
try {
|
|
197
|
+
new RegExp(schema.pattern);
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
errors.push(`${path}.pattern không phải regular expression hợp lệ.`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (schema.enum !== undefined && (!Array.isArray(schema.enum) || schema.enum.length === 0)) {
|
|
205
|
+
errors.push(`${path}.enum phải là array không rỗng.`);
|
|
206
|
+
}
|
|
207
|
+
if (Array.isArray(schema.enum)) {
|
|
208
|
+
const canonicalItems = schema.enum.map(canonicalValue);
|
|
209
|
+
if (new Set(canonicalItems).size !== canonicalItems.length)
|
|
210
|
+
errors.push(`${path}.enum không được chứa giá trị trùng.`);
|
|
211
|
+
}
|
|
212
|
+
if (schema.oneOf !== undefined && (!Array.isArray(schema.oneOf) || schema.oneOf.length === 0)) {
|
|
213
|
+
errors.push(`${path}.oneOf phải là array schema không rỗng.`);
|
|
214
|
+
}
|
|
215
|
+
if (schema.required !== undefined && !Array.isArray(schema.required))
|
|
216
|
+
errors.push(`${path}.required phải là array.`);
|
|
217
|
+
if (Array.isArray(schema.required)) {
|
|
218
|
+
if (schema.required.some((item) => typeof item !== "string" || item.length === 0))
|
|
219
|
+
errors.push(`${path}.required chỉ được chứa string không rỗng.`);
|
|
220
|
+
const required = schema.required.filter((item) => typeof item === "string");
|
|
221
|
+
if (new Set(required).size !== required.length)
|
|
222
|
+
errors.push(`${path}.required không được chứa tên trùng.`);
|
|
223
|
+
if (isRecord(schema.properties)) {
|
|
224
|
+
const declaredProperties = schema.properties;
|
|
225
|
+
required.forEach((key) => {
|
|
226
|
+
if (!(key in declaredProperties))
|
|
227
|
+
errors.push(`${path}.required chứa property không được khai báo: ${key}.`);
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (schema.additionalProperties !== undefined && typeof schema.additionalProperties !== "boolean" && !isRecord(schema.additionalProperties)) {
|
|
232
|
+
errors.push(`${path}.additionalProperties phải là boolean hoặc schema.`);
|
|
233
|
+
}
|
|
234
|
+
if (schema.uniqueItems !== undefined && typeof schema.uniqueItems !== "boolean")
|
|
235
|
+
errors.push(`${path}.uniqueItems phải là boolean.`);
|
|
236
|
+
validateNonNegativeInteger(schema.minLength, `${path}.minLength`, errors);
|
|
237
|
+
validateNonNegativeInteger(schema.maxLength, `${path}.maxLength`, errors);
|
|
238
|
+
validateNonNegativeInteger(schema.minItems, `${path}.minItems`, errors);
|
|
239
|
+
validateNonNegativeInteger(schema.maxItems, `${path}.maxItems`, errors);
|
|
240
|
+
if (typeof schema.minLength === "number" && typeof schema.maxLength === "number" && schema.minLength > schema.maxLength)
|
|
241
|
+
errors.push(`${path}.minLength không được lớn hơn maxLength.`);
|
|
242
|
+
if (typeof schema.minItems === "number" && typeof schema.maxItems === "number" && schema.minItems > schema.maxItems)
|
|
243
|
+
errors.push(`${path}.minItems không được lớn hơn maxItems.`);
|
|
244
|
+
if (schema.minimum !== undefined && (typeof schema.minimum !== "number" || !Number.isFinite(schema.minimum)))
|
|
245
|
+
errors.push(`${path}.minimum phải là finite number.`);
|
|
246
|
+
if (schema.maximum !== undefined && (typeof schema.maximum !== "number" || !Number.isFinite(schema.maximum)))
|
|
247
|
+
errors.push(`${path}.maximum phải là finite number.`);
|
|
248
|
+
if (typeof schema.minimum === "number" && typeof schema.maximum === "number" && schema.minimum > schema.maximum)
|
|
249
|
+
errors.push(`${path}.minimum không được lớn hơn maximum.`);
|
|
250
|
+
if (schema.items !== undefined)
|
|
251
|
+
validateSchemaDefinitionNode(schema.items, `${path}.items`, errors, root);
|
|
252
|
+
if (Array.isArray(schema.oneOf)) {
|
|
253
|
+
schema.oneOf.forEach((branch, index) => {
|
|
254
|
+
validateSchemaDefinitionNode(branch, `${path}.oneOf[${index}]`, errors, root);
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
if (isRecord(schema.additionalProperties))
|
|
258
|
+
validateSchemaDefinitionNode(schema.additionalProperties, `${path}.additionalProperties`, errors, root);
|
|
259
|
+
if (schema.properties !== undefined) {
|
|
260
|
+
if (!isRecord(schema.properties))
|
|
261
|
+
errors.push(`${path}.properties phải là object.`);
|
|
262
|
+
else
|
|
263
|
+
Object.entries(schema.properties).forEach(([key, child]) => validateSchemaDefinitionNode(child, `${path}.properties.${key}`, errors, root));
|
|
264
|
+
}
|
|
265
|
+
if (schema.$defs !== undefined) {
|
|
266
|
+
if (!isRecord(schema.$defs))
|
|
267
|
+
errors.push(`${path}.$defs phải là object.`);
|
|
268
|
+
else
|
|
269
|
+
Object.entries(schema.$defs).forEach(([key, child]) => validateSchemaDefinitionNode(child, `${path}.$defs.${key}`, errors, root));
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/** Validates that a schema itself belongs to the deterministic subset supported by this runtime. */
|
|
273
|
+
export function validateAiCoderJsonSchemaDefinition(schema) {
|
|
274
|
+
const errors = [];
|
|
275
|
+
if (!isRecord(schema))
|
|
276
|
+
errors.push("$ phải là JSON Schema object.");
|
|
277
|
+
else
|
|
278
|
+
validateSchemaDefinitionNode(schema, "$", errors, schema);
|
|
279
|
+
return Object.freeze({ valid: errors.length === 0, errors: Object.freeze(errors) });
|
|
280
|
+
}
|
|
281
|
+
export function assertAiCoderJsonSchemaDefinition(schema, label) {
|
|
282
|
+
const result = validateAiCoderJsonSchemaDefinition(schema);
|
|
283
|
+
if (!result.valid)
|
|
284
|
+
throw new Error(`${label} không hợp lệ: ${result.errors.join(" ")}`);
|
|
285
|
+
}
|
|
286
|
+
export function validateAiCoderJsonSchema(schema, value) {
|
|
287
|
+
const definition = validateAiCoderJsonSchemaDefinition(schema);
|
|
288
|
+
if (!definition.valid)
|
|
289
|
+
return definition;
|
|
290
|
+
const errors = [];
|
|
291
|
+
validateNode(schema, value, "$", errors, schema, new Set());
|
|
292
|
+
return Object.freeze({ valid: errors.length === 0, errors: Object.freeze(errors) });
|
|
293
|
+
}
|
|
294
|
+
export function assertAiCoderJsonSchema(schema, value, label) {
|
|
295
|
+
const result = validateAiCoderJsonSchema(schema, value);
|
|
296
|
+
if (!result.valid)
|
|
297
|
+
throw new Error(`${label} không hợp lệ: ${result.errors.join(" ")}`);
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=json-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/tools/json-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-28
|
|
6
|
+
* @desc Versioned runtime-only settings for the single coding agent.
|
|
7
|
+
*/
|
|
8
|
+
/** The core deliberately exposes no multi-agent execution mode. */
|
|
9
|
+
export type AiCoderExecutionMode = "single";
|
|
10
|
+
export type AiCoderTokenProfile = "balanced" | "conservative" | "extended";
|
|
11
|
+
export type AiCoderApprovalProfile = "strict" | "balanced" | "trusted-workspace";
|
|
12
|
+
export type AiCoderProviderKind = "anthropic" | "openai" | "gemini" | "ollama" | "openai-compatible" | "host";
|
|
13
|
+
export type AiCoderCredentialSource = "manual-config" | "secret-handle";
|
|
14
|
+
export type AiCoderSingleAgentSettings = Readonly<{
|
|
15
|
+
baseUrl: string;
|
|
16
|
+
credentialSource: AiCoderCredentialSource;
|
|
17
|
+
maxParallelToolCalls: number;
|
|
18
|
+
maxRetries: number;
|
|
19
|
+
maxToolCalls: number;
|
|
20
|
+
maxToolRounds: number;
|
|
21
|
+
maxTurns: number;
|
|
22
|
+
model: string;
|
|
23
|
+
preserveThinking: boolean;
|
|
24
|
+
provider: AiCoderProviderKind;
|
|
25
|
+
requestTimeoutMs: number;
|
|
26
|
+
temperature: number;
|
|
27
|
+
tokenProfile: AiCoderTokenProfile;
|
|
28
|
+
}>;
|
|
29
|
+
export type AiCoderSafetySettings = Readonly<{
|
|
30
|
+
approvalProfile: AiCoderApprovalProfile;
|
|
31
|
+
}>;
|
|
32
|
+
export type AiCoderCoreSettings = Readonly<{
|
|
33
|
+
executionMode: "single";
|
|
34
|
+
safety: AiCoderSafetySettings;
|
|
35
|
+
schemaVersion: 2;
|
|
36
|
+
singleAgent: AiCoderSingleAgentSettings;
|
|
37
|
+
}>;
|
|
38
|
+
export declare const DEFAULT_AI_CODER_CORE_SETTINGS: AiCoderCoreSettings;
|
|
39
|
+
/** Runtime guard used when loading untrusted JSON from host settings storage. */
|
|
40
|
+
export declare function isAiCoderCoreSettings(value: unknown): value is AiCoderCoreSettings;
|
|
41
|
+
//# sourceMappingURL=settings-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-types.d.ts","sourceRoot":"","sources":["../../src/tools/settings-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,mEAAmE;AACnE,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAC5C,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC;AAC3E,MAAM,MAAM,sBAAsB,GAC9B,QAAQ,GACR,UAAU,GACV,mBAAmB,CAAC;AACxB,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,mBAAmB,GACnB,MAAM,CAAC;AACX,MAAM,MAAM,uBAAuB,GAAG,eAAe,GAAG,eAAe,CAAC;AAExE,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,mBAAmB,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,eAAe,EAAE,sBAAsB,CAAC;CACzC,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,aAAa,EAAE,QAAQ,CAAC;IACxB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,0BAA0B,CAAC;CACzC,CAAC,CAAC;AAEH,eAAO,MAAM,8BAA8B,EAAE,mBAmB3C,CAAC;AAUH,iFAAiF;AACjF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,mBAAmB,CAqD9B"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-28
|
|
6
|
+
* @desc Versioned runtime-only settings for the single coding agent.
|
|
7
|
+
*/
|
|
8
|
+
export const DEFAULT_AI_CODER_CORE_SETTINGS = Object.freeze({
|
|
9
|
+
executionMode: "single",
|
|
10
|
+
safety: Object.freeze({ approvalProfile: "balanced" }),
|
|
11
|
+
schemaVersion: 2,
|
|
12
|
+
singleAgent: Object.freeze({
|
|
13
|
+
baseUrl: "https://ollama.com",
|
|
14
|
+
credentialSource: "manual-config",
|
|
15
|
+
maxParallelToolCalls: 1,
|
|
16
|
+
maxRetries: 3,
|
|
17
|
+
maxToolCalls: 48,
|
|
18
|
+
maxToolRounds: 24,
|
|
19
|
+
maxTurns: 24,
|
|
20
|
+
model: "glm-5.3-flash:cloud",
|
|
21
|
+
preserveThinking: true,
|
|
22
|
+
provider: "ollama",
|
|
23
|
+
requestTimeoutMs: 180_000,
|
|
24
|
+
temperature: 0,
|
|
25
|
+
tokenProfile: "balanced",
|
|
26
|
+
}),
|
|
27
|
+
});
|
|
28
|
+
function isRecord(value) {
|
|
29
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
30
|
+
}
|
|
31
|
+
function isPositiveInteger(value) {
|
|
32
|
+
return Number.isInteger(value) && typeof value === "number" && value > 0;
|
|
33
|
+
}
|
|
34
|
+
/** Runtime guard used when loading untrusted JSON from host settings storage. */
|
|
35
|
+
export function isAiCoderCoreSettings(value) {
|
|
36
|
+
if (!isRecord(value) || value.schemaVersion !== 2)
|
|
37
|
+
return false;
|
|
38
|
+
if (value.executionMode !== "single")
|
|
39
|
+
return false;
|
|
40
|
+
if (!isRecord(value.safety) || !isRecord(value.singleAgent))
|
|
41
|
+
return false;
|
|
42
|
+
const safety = value.safety;
|
|
43
|
+
const singleAgent = value.singleAgent;
|
|
44
|
+
const approvalProfiles = [
|
|
45
|
+
"strict",
|
|
46
|
+
"balanced",
|
|
47
|
+
"trusted-workspace",
|
|
48
|
+
];
|
|
49
|
+
const credentialSources = [
|
|
50
|
+
"manual-config",
|
|
51
|
+
"secret-handle",
|
|
52
|
+
];
|
|
53
|
+
const providers = [
|
|
54
|
+
"anthropic",
|
|
55
|
+
"openai",
|
|
56
|
+
"gemini",
|
|
57
|
+
"ollama",
|
|
58
|
+
"openai-compatible",
|
|
59
|
+
"host",
|
|
60
|
+
];
|
|
61
|
+
const tokenProfiles = [
|
|
62
|
+
"balanced",
|
|
63
|
+
"conservative",
|
|
64
|
+
"extended",
|
|
65
|
+
];
|
|
66
|
+
return (approvalProfiles.includes(safety.approvalProfile) &&
|
|
67
|
+
typeof singleAgent.baseUrl === "string" &&
|
|
68
|
+
singleAgent.baseUrl.length > 0 &&
|
|
69
|
+
credentialSources.includes(singleAgent.credentialSource) &&
|
|
70
|
+
isPositiveInteger(singleAgent.maxParallelToolCalls) &&
|
|
71
|
+
Number.isInteger(singleAgent.maxRetries) &&
|
|
72
|
+
typeof singleAgent.maxRetries === "number" &&
|
|
73
|
+
singleAgent.maxRetries >= 0 &&
|
|
74
|
+
isPositiveInteger(singleAgent.maxToolCalls) &&
|
|
75
|
+
isPositiveInteger(singleAgent.maxToolRounds) &&
|
|
76
|
+
isPositiveInteger(singleAgent.maxTurns) &&
|
|
77
|
+
typeof singleAgent.model === "string" &&
|
|
78
|
+
singleAgent.model.length > 0 &&
|
|
79
|
+
typeof singleAgent.preserveThinking === "boolean" &&
|
|
80
|
+
providers.includes(singleAgent.provider) &&
|
|
81
|
+
isPositiveInteger(singleAgent.requestTimeoutMs) &&
|
|
82
|
+
typeof singleAgent.temperature === "number" &&
|
|
83
|
+
Number.isFinite(singleAgent.temperature) &&
|
|
84
|
+
singleAgent.temperature >= 0 &&
|
|
85
|
+
singleAgent.temperature <= 2 &&
|
|
86
|
+
tokenProfiles.includes(singleAgent.tokenProfile));
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=settings-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/tools/settings-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical host-effect policy for the built-in AI Coder tool catalog.
|
|
3
|
+
*
|
|
4
|
+
* Hosts must consume this profile instead of maintaining a local copy. The
|
|
5
|
+
* runtime treats these entries as a maximum authority boundary: a tool may
|
|
6
|
+
* omit an allowed effect, but it must never emit an effect absent here.
|
|
7
|
+
*/
|
|
8
|
+
import type { AiCoderToolDescriptor } from "./tool-registry-types.js";
|
|
9
|
+
declare const EFFECT_CAPABILITY_NAMES: readonly ["approval", "criterion_satisfy", "criterion_waive", "diff_review", "inspect", "plan", "research", "state_version", "validate", "write"];
|
|
10
|
+
export type AiCoderToolEffectCapability = (typeof EFFECT_CAPABILITY_NAMES)[number];
|
|
11
|
+
export declare const AI_CODER_TOOL_EFFECT_CAPABILITIES: readonly AiCoderToolEffectCapability[];
|
|
12
|
+
export declare const AI_CODER_CORE_TOOL_EFFECT_PROFILE_VERSION = "1.1.0";
|
|
13
|
+
/**
|
|
14
|
+
* Exact effect capabilities for all 21 built-in tools. An empty or omitted
|
|
15
|
+
* effect is always valid; these arrays only describe effects a host may attest.
|
|
16
|
+
* Acceptance-criterion effects intentionally remain unavailable to built-in
|
|
17
|
+
* tools until a dedicated evidence-bearing contract is introduced.
|
|
18
|
+
*/
|
|
19
|
+
export declare const AI_CODER_CORE_TOOL_EFFECT_PROFILE: Readonly<Record<string, readonly AiCoderToolEffectCapability[]>>;
|
|
20
|
+
export type AiCoderCoreToolEffectMetadata = Readonly<{
|
|
21
|
+
canonicalToolIds: Readonly<Record<string, string>>;
|
|
22
|
+
effectCapabilities: Readonly<Record<string, readonly AiCoderToolEffectCapability[]>>;
|
|
23
|
+
}>;
|
|
24
|
+
type EffectProfileInput = Readonly<{
|
|
25
|
+
descriptors?: readonly Pick<AiCoderToolDescriptor, "id" | "modelName">[];
|
|
26
|
+
effectCapabilities?: Readonly<Record<string, readonly string[]>>;
|
|
27
|
+
}>;
|
|
28
|
+
/** Return every catalog/profile drift issue without throwing at the first one. */
|
|
29
|
+
export declare function validateAiCoderCoreToolEffectProfile(input?: EffectProfileInput): readonly string[];
|
|
30
|
+
export declare function assertAiCoderCoreToolEffectProfile(input?: EffectProfileInput): void;
|
|
31
|
+
/**
|
|
32
|
+
* Fail closed when a host changes the authority of a built-in tool. Unknown
|
|
33
|
+
* canonical IDs are extension/MCP tools and remain governed by the host's
|
|
34
|
+
* explicitly declared profile.
|
|
35
|
+
*/
|
|
36
|
+
export declare function assertAiCoderCoreToolEffectCapabilities(canonicalToolId: string, actual: readonly string[]): void;
|
|
37
|
+
/**
|
|
38
|
+
* Build the exact active model-name mapping plus the complete stable effect
|
|
39
|
+
* policy expected by `AiCoderRuntimeToolSet`. Hosts should call this for the
|
|
40
|
+
* registry's active descriptors on every tool-set snapshot.
|
|
41
|
+
*/
|
|
42
|
+
export declare function createAiCoderCoreToolEffectMetadata(descriptors: readonly Pick<AiCoderToolDescriptor, "id" | "modelName">[]): AiCoderCoreToolEffectMetadata;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=tool-effect-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-effect-profile.d.ts","sourceRoot":"","sources":["../../src/tools/tool-effect-profile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,QAAA,MAAM,uBAAuB,mJAWnB,CAAC;AAEX,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnF,eAAO,MAAM,iCAAiC,EAAE,SAAS,2BAA2B,EAEnF,CAAC;AAEF,eAAO,MAAM,yCAAyC,UAAU,CAAC;AAQjE;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,EAAE,QAAQ,CACtD,MAAM,CAAC,MAAM,EAAE,SAAS,2BAA2B,EAAE,CAAC,CAuBtD,CAAC;AAEH,MAAM,MAAM,6BAA6B,GAAG,QAAQ,CAAC;IACnD,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,2BAA2B,EAAE,CAAC,CAAC,CAAC;CACtF,CAAC,CAAC;AAEH,KAAK,kBAAkB,GAAG,QAAQ,CAAC;IACjC,WAAW,CAAC,EAAE,SAAS,IAAI,CAAC,qBAAqB,EAAE,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC;IACzE,kBAAkB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CAClE,CAAC,CAAC;AAMH,kFAAkF;AAClF,wBAAgB,oCAAoC,CAClD,KAAK,GAAE,kBAAuB,GAC7B,SAAS,MAAM,EAAE,CAsCnB;AAED,wBAAgB,kCAAkC,CAAC,KAAK,GAAE,kBAAuB,GAAG,IAAI,CAGvF;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,CACrD,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,IAAI,CAWN;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,SAAS,IAAI,CAAC,qBAAqB,EAAE,IAAI,GAAG,WAAW,CAAC,EAAE,GACtE,6BAA6B,CAqB/B"}
|