@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,128 @@
|
|
|
1
|
+
import { createAiCoderEvidence, deduplicateAiCoderEvidence, } from "./evidence.js";
|
|
2
|
+
import { compareAiCoderText } from "../deterministic-order.js";
|
|
3
|
+
const PROVIDER = Object.freeze({
|
|
4
|
+
id: "galaxy.lexical-baseline",
|
|
5
|
+
kind: "lexical",
|
|
6
|
+
version: "1.0.0",
|
|
7
|
+
});
|
|
8
|
+
function throwIfAborted(signal) {
|
|
9
|
+
if (signal?.aborted)
|
|
10
|
+
throw signal.reason ?? new DOMException("Retrieval canceled.", "AbortError");
|
|
11
|
+
}
|
|
12
|
+
function byteLength(value) {
|
|
13
|
+
return new TextEncoder().encode(value).byteLength;
|
|
14
|
+
}
|
|
15
|
+
function evidenceId(parts) {
|
|
16
|
+
const value = parts.join(":");
|
|
17
|
+
let hash = 0x811c9dc5;
|
|
18
|
+
for (let index = 0; index < value.length; index += 1)
|
|
19
|
+
hash = Math.imul(hash ^ value.charCodeAt(index), 0x01000193) >>> 0;
|
|
20
|
+
return `lexical:${hash.toString(16).padStart(8, "0")}`;
|
|
21
|
+
}
|
|
22
|
+
/** Adapter-neutral lexical baseline. Hosts may add syntax, language-service,
|
|
23
|
+
* semantic or graph providers without changing this policy or evidence shape. */
|
|
24
|
+
export async function retrieveAiCoderLexicalEvidence(input) {
|
|
25
|
+
const evidence = [];
|
|
26
|
+
const textMatches = [];
|
|
27
|
+
let queriesRun = 0;
|
|
28
|
+
let bytesRead = 0;
|
|
29
|
+
let filesRead = 0;
|
|
30
|
+
let exhaustedBudget = false;
|
|
31
|
+
for (const stage of input.plan.stages) {
|
|
32
|
+
throwIfAborted(input.signal);
|
|
33
|
+
if (stage.kind === "path_search") {
|
|
34
|
+
for (const query of stage.queries) {
|
|
35
|
+
if (queriesRun >= input.plan.budget.maxQueries)
|
|
36
|
+
break;
|
|
37
|
+
const matches = await input.adapter.searchPaths({
|
|
38
|
+
limit: stage.limit,
|
|
39
|
+
query,
|
|
40
|
+
...(input.signal ? { signal: input.signal } : {}),
|
|
41
|
+
});
|
|
42
|
+
queriesRun += 1;
|
|
43
|
+
for (const match of matches.slice(0, stage.limit)) {
|
|
44
|
+
evidence.push(createAiCoderEvidence({
|
|
45
|
+
id: evidenceId(["path", query, match.path]),
|
|
46
|
+
kind: "path_match",
|
|
47
|
+
location: Object.freeze({ path: match.path }),
|
|
48
|
+
provider: PROVIDER,
|
|
49
|
+
reason: input.reason,
|
|
50
|
+
relevance: match.score ?? 0.55,
|
|
51
|
+
snippet: match.path,
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (stage.kind === "text_search") {
|
|
57
|
+
for (const query of stage.queries) {
|
|
58
|
+
if (queriesRun >= input.plan.budget.maxQueries)
|
|
59
|
+
break;
|
|
60
|
+
const matches = await input.adapter.searchText({
|
|
61
|
+
limit: stage.limit,
|
|
62
|
+
query,
|
|
63
|
+
...(input.signal ? { signal: input.signal } : {}),
|
|
64
|
+
});
|
|
65
|
+
queriesRun += 1;
|
|
66
|
+
for (const match of matches.slice(0, stage.limit)) {
|
|
67
|
+
textMatches.push(match);
|
|
68
|
+
evidence.push(createAiCoderEvidence({
|
|
69
|
+
...(match.contentHash ? { contentHash: match.contentHash } : {}),
|
|
70
|
+
id: evidenceId(["text", query, match.path, match.line]),
|
|
71
|
+
kind: "text_match",
|
|
72
|
+
location: Object.freeze({ endLine: match.line, path: match.path, startLine: match.line }),
|
|
73
|
+
provider: PROVIDER,
|
|
74
|
+
reason: input.reason,
|
|
75
|
+
relevance: match.score ?? 0.7,
|
|
76
|
+
snippet: match.preview,
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const distinct = [...new Map(textMatches.map((match) => [match.path, match])).values()]
|
|
83
|
+
.sort((left, right) => (right.score ?? 0) - (left.score ?? 0)
|
|
84
|
+
|| compareAiCoderText(left.path, right.path)
|
|
85
|
+
|| left.line - right.line)
|
|
86
|
+
.slice(0, Math.min(stage.limit, input.plan.budget.maxFiles));
|
|
87
|
+
for (const match of distinct) {
|
|
88
|
+
throwIfAborted(input.signal);
|
|
89
|
+
if (bytesRead >= input.plan.budget.maxBytes) {
|
|
90
|
+
exhaustedBudget = true;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
const startLine = Math.max(1, match.line - input.plan.budget.readContextLines);
|
|
94
|
+
const endLine = match.line + input.plan.budget.readContextLines;
|
|
95
|
+
const remainingBytes = Math.max(1, input.plan.budget.maxBytes - bytesRead);
|
|
96
|
+
const read = await input.adapter.readRange({
|
|
97
|
+
endLine,
|
|
98
|
+
maxBytes: remainingBytes,
|
|
99
|
+
path: match.path,
|
|
100
|
+
...(input.signal ? { signal: input.signal } : {}),
|
|
101
|
+
startLine,
|
|
102
|
+
});
|
|
103
|
+
const usedBytes = byteLength(read.content);
|
|
104
|
+
bytesRead += usedBytes;
|
|
105
|
+
filesRead += 1;
|
|
106
|
+
exhaustedBudget ||= read.truncated || bytesRead >= input.plan.budget.maxBytes;
|
|
107
|
+
evidence.push(createAiCoderEvidence({
|
|
108
|
+
contentHash: read.contentHash,
|
|
109
|
+
id: evidenceId(["range", read.path, read.startLine, read.endLine, read.contentHash]),
|
|
110
|
+
kind: "file_range",
|
|
111
|
+
location: Object.freeze({ endLine: read.endLine, path: read.path, startLine: read.startLine }),
|
|
112
|
+
provider: PROVIDER,
|
|
113
|
+
reason: input.reason,
|
|
114
|
+
relevance: Math.max(0.75, match.score ?? 0),
|
|
115
|
+
snippet: read.content,
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return Object.freeze({
|
|
121
|
+
bytesRead,
|
|
122
|
+
evidence: deduplicateAiCoderEvidence(evidence).slice(0, input.plan.budget.maxMatches),
|
|
123
|
+
exhaustedBudget,
|
|
124
|
+
filesRead,
|
|
125
|
+
queriesRun,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=lexical-retriever.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexical-retriever.js","sourceRoot":"","sources":["../../src/retrieval/lexical-retriever.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type AiCoderRetrievalIntent = "find_text" | "inspect_structure" | "locate_code" | "review_change" | "understand_code";
|
|
2
|
+
export type AiCoderRetrievalBudget = Readonly<{
|
|
3
|
+
maxBytes: number;
|
|
4
|
+
maxFiles: number;
|
|
5
|
+
maxMatches: number;
|
|
6
|
+
maxQueries: number;
|
|
7
|
+
readContextLines: number;
|
|
8
|
+
}>;
|
|
9
|
+
export type AiCoderRetrievalStage = Readonly<{
|
|
10
|
+
kind: "path_search" | "read_ranges" | "text_search";
|
|
11
|
+
limit: number;
|
|
12
|
+
queries: readonly string[];
|
|
13
|
+
}>;
|
|
14
|
+
export type AiCoderRetrievalPlan = Readonly<{
|
|
15
|
+
budget: AiCoderRetrievalBudget;
|
|
16
|
+
intent: AiCoderRetrievalIntent;
|
|
17
|
+
stages: readonly AiCoderRetrievalStage[];
|
|
18
|
+
}>;
|
|
19
|
+
export declare function inferAiCoderRetrievalIntent(goal: string): AiCoderRetrievalIntent;
|
|
20
|
+
export declare function createAiCoderLexicalRetrievalPlan(input: Readonly<{
|
|
21
|
+
budget?: Partial<AiCoderRetrievalBudget>;
|
|
22
|
+
goal: string;
|
|
23
|
+
intent?: AiCoderRetrievalIntent;
|
|
24
|
+
}>): AiCoderRetrievalPlan;
|
|
25
|
+
//# sourceMappingURL=retrieval-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval-policy.d.ts","sourceRoot":"","sources":["../../src/retrieval/retrieval-policy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAC9B,WAAW,GACX,mBAAmB,GACnB,aAAa,GACb,eAAe,GACf,iBAAiB,CAAC;AAEtB,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,IAAI,EAAE,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAC1C,CAAC,CAAC;AAuBH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAOhF;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,QAAQ,CAAC;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC,CAAC,GAAG,oBAAoB,CAuCxB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
const STOP_WORDS = new Set([
|
|
2
|
+
"a", "an", "and", "are", "be", "các", "cho", "code", "của", "do", "file", "for", "hãy", "in", "is", "là",
|
|
3
|
+
"of", "on", "please", "project", "sửa", "the", "this", "to", "trong", "và", "workspace",
|
|
4
|
+
]);
|
|
5
|
+
function unique(values) {
|
|
6
|
+
return [...new Set(values)];
|
|
7
|
+
}
|
|
8
|
+
function terms(goal) {
|
|
9
|
+
const quoted = [...goal.matchAll(/["'`]([^"'`]{2,80})["'`]/g)]
|
|
10
|
+
.map((match) => match[1]?.trim())
|
|
11
|
+
.filter((value) => Boolean(value));
|
|
12
|
+
const identifiers = goal.match(/[A-Za-z_$][\w$.-]{2,}/g) ?? [];
|
|
13
|
+
const words = goal.toLocaleLowerCase().match(/[\p{L}\p{N}_-]{3,}/gu) ?? [];
|
|
14
|
+
return unique([...quoted, ...identifiers, ...words]
|
|
15
|
+
.map((value) => value.trim())
|
|
16
|
+
.filter((value) => value && !STOP_WORDS.has(value.toLocaleLowerCase())))
|
|
17
|
+
.slice(0, 12);
|
|
18
|
+
}
|
|
19
|
+
export function inferAiCoderRetrievalIntent(goal) {
|
|
20
|
+
const normalized = goal.toLocaleLowerCase();
|
|
21
|
+
if (/\b(review|audit|diff|regression)\b|rà soát|đánh giá/.test(normalized))
|
|
22
|
+
return "review_change";
|
|
23
|
+
if (/\b(structure|architecture|directory|folder|tree)\b|cấu trúc|kiến trúc/.test(normalized))
|
|
24
|
+
return "inspect_structure";
|
|
25
|
+
if (/\b(where|locate|symbol|definition|reference)\b|ở đâu|định nghĩa|tham chiếu/.test(normalized))
|
|
26
|
+
return "locate_code";
|
|
27
|
+
if (/\b(find|search|grep|contains)\b|tìm kiếm|tìm chuỗi/.test(normalized))
|
|
28
|
+
return "find_text";
|
|
29
|
+
return "understand_code";
|
|
30
|
+
}
|
|
31
|
+
export function createAiCoderLexicalRetrievalPlan(input) {
|
|
32
|
+
const budget = Object.freeze({
|
|
33
|
+
maxBytes: Math.max(1, Math.floor(input.budget?.maxBytes ?? 64_000)),
|
|
34
|
+
maxFiles: Math.max(1, Math.floor(input.budget?.maxFiles ?? 12)),
|
|
35
|
+
maxMatches: Math.max(1, Math.floor(input.budget?.maxMatches ?? 40)),
|
|
36
|
+
maxQueries: Math.max(1, Math.floor(input.budget?.maxQueries ?? 4)),
|
|
37
|
+
readContextLines: Math.max(0, Math.floor(input.budget?.readContextLines ?? 12)),
|
|
38
|
+
});
|
|
39
|
+
const intent = input.intent ?? inferAiCoderRetrievalIntent(input.goal);
|
|
40
|
+
const queryTerms = terms(input.goal);
|
|
41
|
+
const pathQueries = queryTerms.filter((value) => /[./\\]|\.(?:ts|tsx|js|jsx|py|rs|go|java|json|md)$/i.test(value));
|
|
42
|
+
const textQueries = queryTerms.filter((value) => !pathQueries.includes(value));
|
|
43
|
+
const pathQuota = pathQueries.length
|
|
44
|
+
? Math.max(1, budget.maxQueries - (textQueries.length ? 1 : 0))
|
|
45
|
+
: 0;
|
|
46
|
+
const textQuota = Math.max(0, budget.maxQueries - pathQuota);
|
|
47
|
+
const stages = [];
|
|
48
|
+
if (intent === "inspect_structure" || pathQueries.length) {
|
|
49
|
+
stages.push(Object.freeze({
|
|
50
|
+
kind: "path_search",
|
|
51
|
+
limit: budget.maxMatches,
|
|
52
|
+
queries: Object.freeze((pathQueries.length ? pathQueries : queryTerms).slice(0, pathQueries.length ? pathQuota : budget.maxQueries)),
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
if (textQueries.length || !stages.length) {
|
|
56
|
+
stages.push(Object.freeze({
|
|
57
|
+
kind: "text_search",
|
|
58
|
+
limit: budget.maxMatches,
|
|
59
|
+
queries: Object.freeze((textQueries.length ? textQueries : queryTerms).slice(0, pathQueries.length ? textQuota : budget.maxQueries)),
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
if (intent !== "inspect_structure") {
|
|
63
|
+
stages.push(Object.freeze({
|
|
64
|
+
kind: "read_ranges",
|
|
65
|
+
limit: budget.maxFiles,
|
|
66
|
+
queries: Object.freeze([]),
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
return Object.freeze({ budget, intent, stages: Object.freeze(stages) });
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=retrieval-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval-policy.js","sourceRoot":"","sources":["../../src/retrieval/retrieval-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type AiCoderWorkspaceEntryKind } from "../context/checkpoint.js";
|
|
2
|
+
export type AiCoderCompletionWrite = Readonly<{
|
|
3
|
+
afterHash: string | null;
|
|
4
|
+
afterKind?: AiCoderWorkspaceEntryKind;
|
|
5
|
+
beforeHash: string | null;
|
|
6
|
+
beforeKind?: AiCoderWorkspaceEntryKind;
|
|
7
|
+
path: string;
|
|
8
|
+
sequence: number;
|
|
9
|
+
toolCallId: string;
|
|
10
|
+
workspaceFingerprint: string;
|
|
11
|
+
}>;
|
|
12
|
+
export type AiCoderCompletionValidation = Readonly<{
|
|
13
|
+
detail: string;
|
|
14
|
+
id: string;
|
|
15
|
+
paths?: readonly string[];
|
|
16
|
+
scope: "paths" | "workspace";
|
|
17
|
+
sequence: number;
|
|
18
|
+
status: "failed" | "not_run" | "passed";
|
|
19
|
+
workspaceFingerprint: string;
|
|
20
|
+
}>;
|
|
21
|
+
export type AiCoderCompletionDiffReview = Readonly<{
|
|
22
|
+
diffHash: string;
|
|
23
|
+
sequence: number;
|
|
24
|
+
workspaceFingerprint: string;
|
|
25
|
+
}>;
|
|
26
|
+
export type AiCoderAcceptanceCriterion = Readonly<{
|
|
27
|
+
evidenceIds: readonly string[];
|
|
28
|
+
id: string;
|
|
29
|
+
required: boolean;
|
|
30
|
+
status: "pending" | "satisfied" | "waived";
|
|
31
|
+
text: string;
|
|
32
|
+
}>;
|
|
33
|
+
export type AiCoderCompletionSnapshot = Readonly<{
|
|
34
|
+
acceptanceCriteria: readonly AiCoderAcceptanceCriterion[];
|
|
35
|
+
finalDiffReview: AiCoderCompletionDiffReview | null;
|
|
36
|
+
finalReport: string;
|
|
37
|
+
finalReportStored: boolean;
|
|
38
|
+
finalWorkspaceFingerprint: string | null;
|
|
39
|
+
inspectedWorkspace: boolean;
|
|
40
|
+
openProblems?: readonly string[];
|
|
41
|
+
pendingApprovals: number;
|
|
42
|
+
researchSources: readonly Readonly<{
|
|
43
|
+
contentHash: string | null;
|
|
44
|
+
kind: "fetch" | "search";
|
|
45
|
+
toolCallId: string;
|
|
46
|
+
url: string;
|
|
47
|
+
}>[];
|
|
48
|
+
runningToolCalls: number;
|
|
49
|
+
tokenLedgerFinalized: boolean;
|
|
50
|
+
traceFinalized: boolean;
|
|
51
|
+
validations: readonly AiCoderCompletionValidation[];
|
|
52
|
+
writes: readonly AiCoderCompletionWrite[];
|
|
53
|
+
}>;
|
|
54
|
+
export type AiCoderCompletionRequirements = Readonly<{
|
|
55
|
+
requireFinalReportPersistence?: boolean;
|
|
56
|
+
requireInspection?: boolean;
|
|
57
|
+
requireTokenLedger?: boolean;
|
|
58
|
+
requireTrace?: boolean;
|
|
59
|
+
requireValidation?: boolean;
|
|
60
|
+
research?: Readonly<{
|
|
61
|
+
minFetchCalls?: number;
|
|
62
|
+
minSearchCalls?: number;
|
|
63
|
+
requireCitations?: boolean;
|
|
64
|
+
requiredDomains?: readonly string[];
|
|
65
|
+
}>;
|
|
66
|
+
}>;
|
|
67
|
+
export type AiCoderCompletionIssue = Readonly<{
|
|
68
|
+
code: "ACCEPTANCE_CRITERIA_OPEN" | "DIFF_NOT_REVIEWED" | "FINAL_REPORT_EMPTY" | "FINAL_REPORT_NOT_STORED" | "INSPECTION_MISSING" | "OPEN_PROBLEMS" | "PENDING_APPROVAL" | "RESEARCH_CITATION_MISSING" | "RESEARCH_EVIDENCE_MISSING" | "RUNNING_TOOL_CALL" | "TOKEN_LEDGER_NOT_FINALIZED" | "TRACE_NOT_FINALIZED" | "VALIDATION_FAILED" | "VALIDATION_MISSING" | "WORKSPACE_EVIDENCE_STALE" | "WRITE_EVIDENCE_INVALID" | "WRITE_NOT_VALIDATED";
|
|
69
|
+
detail: string;
|
|
70
|
+
}>;
|
|
71
|
+
export declare function evaluateAiCoderCompletion(snapshot: AiCoderCompletionSnapshot, requirements?: AiCoderCompletionRequirements): Readonly<{
|
|
72
|
+
issues: readonly AiCoderCompletionIssue[];
|
|
73
|
+
ok: boolean;
|
|
74
|
+
}>;
|
|
75
|
+
//# sourceMappingURL=completion-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion-gate.d.ts","sourceRoot":"","sources":["../../src/runtime/completion-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { isAiCoderWorkspaceMutationEvidence, } from "../context/checkpoint.js";
|
|
2
|
+
function writeIsValidated(write, validations) {
|
|
3
|
+
const coveredBy = (scopePath) => {
|
|
4
|
+
const normalizedScope = scopePath.replaceAll("\\", "/").replace(/^\.\//, "").replace(/\/$/, "") || ".";
|
|
5
|
+
const normalizedWrite = write.path.replaceAll("\\", "/").replace(/^\.\//, "");
|
|
6
|
+
return normalizedScope === "."
|
|
7
|
+
|| normalizedWrite === normalizedScope
|
|
8
|
+
|| normalizedWrite.startsWith(`${normalizedScope}/`);
|
|
9
|
+
};
|
|
10
|
+
return validations.some((validation) => validation.status === "passed"
|
|
11
|
+
&& validation.sequence > write.sequence
|
|
12
|
+
&& (validation.scope === "workspace" || validation.paths?.some(coveredBy)));
|
|
13
|
+
}
|
|
14
|
+
export function evaluateAiCoderCompletion(snapshot, requirements = {}) {
|
|
15
|
+
const issues = [];
|
|
16
|
+
const add = (code, detail) => issues.push(Object.freeze({ code, detail }));
|
|
17
|
+
if (!snapshot.finalReport.trim())
|
|
18
|
+
add("FINAL_REPORT_EMPTY", "The final user-facing report is empty.");
|
|
19
|
+
if ((requirements.requireInspection ?? true) && !snapshot.inspectedWorkspace) {
|
|
20
|
+
add("INSPECTION_MISSING", "Workspace inspection evidence is missing.");
|
|
21
|
+
}
|
|
22
|
+
if (snapshot.runningToolCalls)
|
|
23
|
+
add("RUNNING_TOOL_CALL", `${snapshot.runningToolCalls} tool call(s) are still running.`);
|
|
24
|
+
if (snapshot.pendingApprovals)
|
|
25
|
+
add("PENDING_APPROVAL", `${snapshot.pendingApprovals} approval request(s) are still pending.`);
|
|
26
|
+
const research = requirements.research;
|
|
27
|
+
if (research !== undefined) {
|
|
28
|
+
const searched = snapshot.researchSources.filter((source) => source.kind === "search");
|
|
29
|
+
const fetched = snapshot.researchSources.filter((source) => source.kind === "fetch" && source.contentHash?.trim());
|
|
30
|
+
const searchCalls = new Set(searched.map((source) => source.toolCallId)).size;
|
|
31
|
+
const fetchCalls = new Set(fetched.map((source) => source.toolCallId)).size;
|
|
32
|
+
const missing = [];
|
|
33
|
+
if (searchCalls < (research.minSearchCalls ?? 0)) {
|
|
34
|
+
missing.push(`search calls ${searchCalls}/${research.minSearchCalls}`);
|
|
35
|
+
}
|
|
36
|
+
if (fetchCalls < (research.minFetchCalls ?? 0)) {
|
|
37
|
+
missing.push(`fetch calls ${fetchCalls}/${research.minFetchCalls}`);
|
|
38
|
+
}
|
|
39
|
+
for (const requiredDomain of research.requiredDomains ?? []) {
|
|
40
|
+
const covered = fetched.some((source) => {
|
|
41
|
+
try {
|
|
42
|
+
const hostname = new URL(source.url).hostname.toLowerCase();
|
|
43
|
+
return hostname === requiredDomain || hostname.endsWith(`.${requiredDomain}`);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
if (!covered)
|
|
50
|
+
missing.push(`fetched domain ${requiredDomain}`);
|
|
51
|
+
}
|
|
52
|
+
if (missing.length)
|
|
53
|
+
add("RESEARCH_EVIDENCE_MISSING", `Missing research evidence: ${missing.join(", ")}.`);
|
|
54
|
+
if (research.requireCitations
|
|
55
|
+
&& !fetched.some((source) => snapshot.finalReport.includes(source.url))) {
|
|
56
|
+
add("RESEARCH_CITATION_MISSING", "The final report must cite at least one successfully fetched source URL.");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (snapshot.openProblems?.length) {
|
|
60
|
+
add("OPEN_PROBLEMS", `${snapshot.openProblems.length} unresolved problem(s) remain.`);
|
|
61
|
+
}
|
|
62
|
+
const openCriteria = snapshot.acceptanceCriteria.filter((criterion) => criterion.required && criterion.status !== "satisfied");
|
|
63
|
+
if (openCriteria.length) {
|
|
64
|
+
add("ACCEPTANCE_CRITERIA_OPEN", `Open criterion ids: ${openCriteria.map((item) => item.id).join(", ")}.`);
|
|
65
|
+
}
|
|
66
|
+
const latestById = new Map();
|
|
67
|
+
for (const validation of snapshot.validations) {
|
|
68
|
+
const previous = latestById.get(validation.id);
|
|
69
|
+
if (!previous || previous.sequence <= validation.sequence)
|
|
70
|
+
latestById.set(validation.id, validation);
|
|
71
|
+
}
|
|
72
|
+
const effectiveValidations = [...latestById.values()];
|
|
73
|
+
const currentValidations = effectiveValidations.filter((validation) => (snapshot.finalWorkspaceFingerprint !== null
|
|
74
|
+
&& validation.workspaceFingerprint === snapshot.finalWorkspaceFingerprint));
|
|
75
|
+
const staleValidations = effectiveValidations.filter((validation) => !currentValidations.includes(validation));
|
|
76
|
+
if (staleValidations.length) {
|
|
77
|
+
add("WORKSPACE_EVIDENCE_STALE", `Stale validation ids: ${staleValidations.map((item) => item.id).join(", ")}.`);
|
|
78
|
+
}
|
|
79
|
+
const failedValidations = currentValidations.filter((validation) => validation.status === "failed");
|
|
80
|
+
if (failedValidations.length) {
|
|
81
|
+
add("VALIDATION_FAILED", `Failed validation ids: ${failedValidations.map((item) => item.id).join(", ")}.`);
|
|
82
|
+
}
|
|
83
|
+
if ((requirements.requireValidation ?? false) && !currentValidations.some((item) => item.status === "passed")) {
|
|
84
|
+
add("VALIDATION_MISSING", "A successful validation result is required.");
|
|
85
|
+
}
|
|
86
|
+
for (const write of snapshot.writes) {
|
|
87
|
+
if (!write.path.trim() || !write.workspaceFingerprint.trim()
|
|
88
|
+
|| !isAiCoderWorkspaceMutationEvidence(write)) {
|
|
89
|
+
add("WRITE_EVIDENCE_INVALID", `${write.path || "<blank>"} does not contain valid mutation evidence.`);
|
|
90
|
+
}
|
|
91
|
+
if (!writeIsValidated(write, currentValidations))
|
|
92
|
+
add("WRITE_NOT_VALIDATED", `${write.path} has no later successful validation evidence.`);
|
|
93
|
+
}
|
|
94
|
+
const lastWriteSequence = Math.max(0, ...snapshot.writes.map((item) => item.sequence));
|
|
95
|
+
const finalDiffIsCurrent = snapshot.finalDiffReview !== null
|
|
96
|
+
&& snapshot.finalWorkspaceFingerprint !== null
|
|
97
|
+
&& snapshot.finalDiffReview.sequence > lastWriteSequence
|
|
98
|
+
&& snapshot.finalDiffReview.workspaceFingerprint === snapshot.finalWorkspaceFingerprint
|
|
99
|
+
&& snapshot.finalDiffReview.diffHash.trim().length > 0;
|
|
100
|
+
if (snapshot.writes.length && !finalDiffIsCurrent) {
|
|
101
|
+
add("DIFF_NOT_REVIEWED", "The final diff has not been reviewed after workspace mutation.");
|
|
102
|
+
}
|
|
103
|
+
if ((requirements.requireFinalReportPersistence ?? false) && !snapshot.finalReportStored) {
|
|
104
|
+
add("FINAL_REPORT_NOT_STORED", "The final report has not been persisted.");
|
|
105
|
+
}
|
|
106
|
+
if ((requirements.requireTokenLedger ?? true) && !snapshot.tokenLedgerFinalized) {
|
|
107
|
+
add("TOKEN_LEDGER_NOT_FINALIZED", "The token ledger has not been finalized.");
|
|
108
|
+
}
|
|
109
|
+
if ((requirements.requireTrace ?? false) && !snapshot.traceFinalized) {
|
|
110
|
+
add("TRACE_NOT_FINALIZED", "The trace has not been finalized.");
|
|
111
|
+
}
|
|
112
|
+
return Object.freeze({ issues: Object.freeze(issues), ok: issues.length === 0 });
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=completion-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion-gate.js","sourceRoot":"","sources":["../../src/runtime/completion-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { AiCoderResumeRequest, AiCoderRunDependencies, AiCoderRunHandle, AiCoderRunRequest } from "./runtime-types.js";
|
|
2
|
+
export declare class AiCoderRunController {
|
|
3
|
+
private readonly dependencies;
|
|
4
|
+
private readonly active;
|
|
5
|
+
private readonly clock;
|
|
6
|
+
private readonly idFactory;
|
|
7
|
+
private readonly sleep;
|
|
8
|
+
constructor(dependencies: AiCoderRunDependencies);
|
|
9
|
+
start(request: AiCoderRunRequest): AiCoderRunHandle;
|
|
10
|
+
resume(request: AiCoderResumeRequest): AiCoderRunHandle;
|
|
11
|
+
cancel(runId: string, reason?: string): boolean;
|
|
12
|
+
pause(runId: string, reason?: string): boolean;
|
|
13
|
+
resolveApproval(runId: string, requestId: string, decision: "denied" | "granted"): Promise<boolean>;
|
|
14
|
+
private launch;
|
|
15
|
+
private requestControl;
|
|
16
|
+
private notify;
|
|
17
|
+
private transition;
|
|
18
|
+
private checkControl;
|
|
19
|
+
private awaitWithContext;
|
|
20
|
+
private awaitInterruptible;
|
|
21
|
+
private createPersistenceContext;
|
|
22
|
+
private armDeadline;
|
|
23
|
+
private waitForPendingApprovals;
|
|
24
|
+
private execute;
|
|
25
|
+
private buildPromptSnapshot;
|
|
26
|
+
private emitPromptSnapshot;
|
|
27
|
+
private adoptToolSet;
|
|
28
|
+
private prepare;
|
|
29
|
+
private validateAttachments;
|
|
30
|
+
private assertCheckpointCompatibility;
|
|
31
|
+
private verifyResumeWorkspace;
|
|
32
|
+
private restoreEvidence;
|
|
33
|
+
private runLoop;
|
|
34
|
+
private runModelRound;
|
|
35
|
+
private recordNoProgressIncident;
|
|
36
|
+
private countNoProgressEpisode;
|
|
37
|
+
private nudgeRepeatedObservation;
|
|
38
|
+
private shouldAttemptFinalization;
|
|
39
|
+
private enterFinalizationMode;
|
|
40
|
+
private prepareToolCallBatch;
|
|
41
|
+
private executeToolCall;
|
|
42
|
+
private recordApprovalBlockedToolCall;
|
|
43
|
+
private traceToolResult;
|
|
44
|
+
private assertToolResultContract;
|
|
45
|
+
private assertToolEffectCapabilities;
|
|
46
|
+
private captureWorkspaceFingerprint;
|
|
47
|
+
private applyToolEffects;
|
|
48
|
+
private completionSnapshot;
|
|
49
|
+
private isReadyForFinalResponse;
|
|
50
|
+
private tryComplete;
|
|
51
|
+
private saveCheckpoint;
|
|
52
|
+
private finishFromError;
|
|
53
|
+
private result;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=run-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-controller.d.ts","sourceRoot":"","sources":["../../src/runtime/run-controller.ts"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAEV,oBAAoB,EAEpB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EASlB,MAAM,oBAAoB,CAAC;AAmtB5B,qBAAa,oBAAoB;IAMnB,OAAO,CAAC,QAAQ,CAAC,YAAY;IALzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+D;gBAExD,YAAY,EAAE,sBAAsB;IAMjE,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB;IAInD,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,gBAAgB;IAIvD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAwB,GAAG,OAAO;IAO9D,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAsB,GAAG,OAAO;IAOrD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBzG,OAAO,CAAC,MAAM;IAyEd,OAAO,CAAC,cAAc;YAMR,MAAM;YAoBN,UAAU;IAOxB,OAAO,CAAC,YAAY;YAWN,gBAAgB;YAsBhB,kBAAkB;IAKhC,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,WAAW;YAaL,uBAAuB;YAuBvB,OAAO;IAkBrB,OAAO,CAAC,mBAAmB;YA6Bb,kBAAkB;YAclB,YAAY;YA4BZ,OAAO;IAoHrB,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,6BAA6B;YAqBvB,qBAAqB;YAuBrB,eAAe;YAwGf,OAAO;YAwIP,aAAa;IAgJ3B,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,qBAAqB;YAYf,oBAAoB;YAsCpB,eAAe;YA+Pf,6BAA6B;YAsD7B,eAAe;IAmB7B,OAAO,CAAC,wBAAwB;IA4DhC,OAAO,CAAC,4BAA4B;YAyBtB,2BAA2B;YAkD3B,gBAAgB;IAoT9B,OAAO,CAAC,kBAAkB;YA8BZ,uBAAuB;YAoCvB,WAAW;YA6GX,cAAc;YAiMd,eAAe;IAyC7B,OAAO,CAAC,MAAM;CAkBf"}
|