@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.
Files changed (197) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +131 -0
  3. package/dist/approval/approval-policy.d.ts +31 -0
  4. package/dist/approval/approval-policy.d.ts.map +1 -0
  5. package/dist/approval/approval-policy.js +179 -0
  6. package/dist/approval/approval-policy.js.map +1 -0
  7. package/dist/approval/index.d.ts +2 -0
  8. package/dist/approval/index.d.ts.map +1 -0
  9. package/dist/approval/index.js +2 -0
  10. package/dist/approval/index.js.map +1 -0
  11. package/dist/context/attachment-types.d.ts +35 -0
  12. package/dist/context/attachment-types.d.ts.map +1 -0
  13. package/dist/context/attachment-types.js +9 -0
  14. package/dist/context/attachment-types.js.map +1 -0
  15. package/dist/context/checkpoint.d.ts +194 -0
  16. package/dist/context/checkpoint.d.ts.map +1 -0
  17. package/dist/context/checkpoint.js +921 -0
  18. package/dist/context/checkpoint.js.map +1 -0
  19. package/dist/context/context-manager.d.ts +153 -0
  20. package/dist/context/context-manager.d.ts.map +1 -0
  21. package/dist/context/context-manager.js +541 -0
  22. package/dist/context/context-manager.js.map +1 -0
  23. package/dist/context/context-profile.d.ts +42 -0
  24. package/dist/context/context-profile.d.ts.map +1 -0
  25. package/dist/context/context-profile.js +102 -0
  26. package/dist/context/context-profile.js.map +1 -0
  27. package/dist/context/index.d.ts +7 -0
  28. package/dist/context/index.d.ts.map +1 -0
  29. package/dist/context/index.js +7 -0
  30. package/dist/context/index.js.map +1 -0
  31. package/dist/context/token-ledger.d.ts +102 -0
  32. package/dist/context/token-ledger.d.ts.map +1 -0
  33. package/dist/context/token-ledger.js +205 -0
  34. package/dist/context/token-ledger.js.map +1 -0
  35. package/dist/context/tool-output.d.ts +46 -0
  36. package/dist/context/tool-output.d.ts.map +1 -0
  37. package/dist/context/tool-output.js +82 -0
  38. package/dist/context/tool-output.js.map +1 -0
  39. package/dist/deterministic-order.d.ts +3 -0
  40. package/dist/deterministic-order.d.ts.map +1 -0
  41. package/dist/deterministic-order.js +5 -0
  42. package/dist/deterministic-order.js.map +1 -0
  43. package/dist/index.d.ts +19 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +19 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/ports/approval-port.d.ts +29 -0
  48. package/dist/ports/approval-port.d.ts.map +1 -0
  49. package/dist/ports/approval-port.js +9 -0
  50. package/dist/ports/approval-port.js.map +1 -0
  51. package/dist/ports/artifact-port.d.ts +66 -0
  52. package/dist/ports/artifact-port.d.ts.map +1 -0
  53. package/dist/ports/artifact-port.js +9 -0
  54. package/dist/ports/artifact-port.js.map +1 -0
  55. package/dist/ports/capability-port.d.ts +62 -0
  56. package/dist/ports/capability-port.d.ts.map +1 -0
  57. package/dist/ports/capability-port.js +9 -0
  58. package/dist/ports/capability-port.js.map +1 -0
  59. package/dist/ports/coding-model-port.d.ts +12 -0
  60. package/dist/ports/coding-model-port.d.ts.map +1 -0
  61. package/dist/ports/coding-model-port.js +9 -0
  62. package/dist/ports/coding-model-port.js.map +1 -0
  63. package/dist/ports/command-port.d.ts +94 -0
  64. package/dist/ports/command-port.d.ts.map +1 -0
  65. package/dist/ports/command-port.js +9 -0
  66. package/dist/ports/command-port.js.map +1 -0
  67. package/dist/ports/execution-context.d.ts +30 -0
  68. package/dist/ports/execution-context.d.ts.map +1 -0
  69. package/dist/ports/execution-context.js +11 -0
  70. package/dist/ports/execution-context.js.map +1 -0
  71. package/dist/ports/git-port.d.ts +27 -0
  72. package/dist/ports/git-port.d.ts.map +1 -0
  73. package/dist/ports/git-port.js +9 -0
  74. package/dist/ports/git-port.js.map +1 -0
  75. package/dist/ports/host-adapter.d.ts +36 -0
  76. package/dist/ports/host-adapter.d.ts.map +1 -0
  77. package/dist/ports/host-adapter.js +9 -0
  78. package/dist/ports/host-adapter.js.map +1 -0
  79. package/dist/ports/index.d.ts +16 -0
  80. package/dist/ports/index.d.ts.map +1 -0
  81. package/dist/ports/index.js +16 -0
  82. package/dist/ports/index.js.map +1 -0
  83. package/dist/ports/pagination.d.ts +17 -0
  84. package/dist/ports/pagination.d.ts.map +1 -0
  85. package/dist/ports/pagination.js +9 -0
  86. package/dist/ports/pagination.js.map +1 -0
  87. package/dist/ports/persistence-port.d.ts +59 -0
  88. package/dist/ports/persistence-port.d.ts.map +1 -0
  89. package/dist/ports/persistence-port.js +9 -0
  90. package/dist/ports/persistence-port.js.map +1 -0
  91. package/dist/ports/port-result.d.ts +29 -0
  92. package/dist/ports/port-result.d.ts.map +1 -0
  93. package/dist/ports/port-result.js +20 -0
  94. package/dist/ports/port-result.js.map +1 -0
  95. package/dist/ports/preview-port.d.ts +27 -0
  96. package/dist/ports/preview-port.d.ts.map +1 -0
  97. package/dist/ports/preview-port.js +9 -0
  98. package/dist/ports/preview-port.js.map +1 -0
  99. package/dist/ports/research-port.d.ts +40 -0
  100. package/dist/ports/research-port.d.ts.map +1 -0
  101. package/dist/ports/research-port.js +9 -0
  102. package/dist/ports/research-port.js.map +1 -0
  103. package/dist/ports/trace-port.d.ts +26 -0
  104. package/dist/ports/trace-port.d.ts.map +1 -0
  105. package/dist/ports/trace-port.js +9 -0
  106. package/dist/ports/trace-port.js.map +1 -0
  107. package/dist/ports/workspace-port.d.ts +126 -0
  108. package/dist/ports/workspace-port.d.ts.map +1 -0
  109. package/dist/ports/workspace-port.js +9 -0
  110. package/dist/ports/workspace-port.js.map +1 -0
  111. package/dist/prompt/index.d.ts +2 -0
  112. package/dist/prompt/index.d.ts.map +1 -0
  113. package/dist/prompt/index.js +2 -0
  114. package/dist/prompt/index.js.map +1 -0
  115. package/dist/prompt/prompt-assembler.d.ts +114 -0
  116. package/dist/prompt/prompt-assembler.d.ts.map +1 -0
  117. package/dist/prompt/prompt-assembler.js +363 -0
  118. package/dist/prompt/prompt-assembler.js.map +1 -0
  119. package/dist/retrieval/evidence.d.ts +41 -0
  120. package/dist/retrieval/evidence.d.ts.map +1 -0
  121. package/dist/retrieval/evidence.js +48 -0
  122. package/dist/retrieval/evidence.js.map +1 -0
  123. package/dist/retrieval/index.d.ts +4 -0
  124. package/dist/retrieval/index.d.ts.map +1 -0
  125. package/dist/retrieval/index.js +4 -0
  126. package/dist/retrieval/index.js.map +1 -0
  127. package/dist/retrieval/lexical-retriever.d.ts +56 -0
  128. package/dist/retrieval/lexical-retriever.d.ts.map +1 -0
  129. package/dist/retrieval/lexical-retriever.js +128 -0
  130. package/dist/retrieval/lexical-retriever.js.map +1 -0
  131. package/dist/retrieval/retrieval-policy.d.ts +25 -0
  132. package/dist/retrieval/retrieval-policy.d.ts.map +1 -0
  133. package/dist/retrieval/retrieval-policy.js +71 -0
  134. package/dist/retrieval/retrieval-policy.js.map +1 -0
  135. package/dist/runtime/completion-gate.d.ts +75 -0
  136. package/dist/runtime/completion-gate.d.ts.map +1 -0
  137. package/dist/runtime/completion-gate.js +114 -0
  138. package/dist/runtime/completion-gate.js.map +1 -0
  139. package/dist/runtime/index.d.ts +7 -0
  140. package/dist/runtime/index.d.ts.map +1 -0
  141. package/dist/runtime/index.js +7 -0
  142. package/dist/runtime/index.js.map +1 -0
  143. package/dist/runtime/run-controller.d.ts +55 -0
  144. package/dist/runtime/run-controller.d.ts.map +1 -0
  145. package/dist/runtime/run-controller.js +2673 -0
  146. package/dist/runtime/run-controller.js.map +1 -0
  147. package/dist/runtime/runtime-error.d.ts +7 -0
  148. package/dist/runtime/runtime-error.d.ts.map +1 -0
  149. package/dist/runtime/runtime-error.js +11 -0
  150. package/dist/runtime/runtime-error.js.map +1 -0
  151. package/dist/runtime/runtime-types.d.ts +303 -0
  152. package/dist/runtime/runtime-types.d.ts.map +1 -0
  153. package/dist/runtime/runtime-types.js +2 -0
  154. package/dist/runtime/runtime-types.js.map +1 -0
  155. package/dist/runtime/state-machine.d.ts +27 -0
  156. package/dist/runtime/state-machine.d.ts.map +1 -0
  157. package/dist/runtime/state-machine.js +68 -0
  158. package/dist/runtime/state-machine.js.map +1 -0
  159. package/dist/runtime/trace-emitter.d.ts +17 -0
  160. package/dist/runtime/trace-emitter.d.ts.map +1 -0
  161. package/dist/runtime/trace-emitter.js +91 -0
  162. package/dist/runtime/trace-emitter.js.map +1 -0
  163. package/dist/tools/coding-messages.d.ts +112 -0
  164. package/dist/tools/coding-messages.d.ts.map +1 -0
  165. package/dist/tools/coding-messages.js +20 -0
  166. package/dist/tools/coding-messages.js.map +1 -0
  167. package/dist/tools/index.d.ts +7 -0
  168. package/dist/tools/index.d.ts.map +1 -0
  169. package/dist/tools/index.js +7 -0
  170. package/dist/tools/index.js.map +1 -0
  171. package/dist/tools/json-schema.d.ts +18 -0
  172. package/dist/tools/json-schema.d.ts.map +1 -0
  173. package/dist/tools/json-schema.js +299 -0
  174. package/dist/tools/json-schema.js.map +1 -0
  175. package/dist/tools/settings-types.d.ts +41 -0
  176. package/dist/tools/settings-types.d.ts.map +1 -0
  177. package/dist/tools/settings-types.js +88 -0
  178. package/dist/tools/settings-types.js.map +1 -0
  179. package/dist/tools/tool-effect-profile.d.ts +44 -0
  180. package/dist/tools/tool-effect-profile.d.ts.map +1 -0
  181. package/dist/tools/tool-effect-profile.js +157 -0
  182. package/dist/tools/tool-effect-profile.js.map +1 -0
  183. package/dist/tools/tool-registry-types.d.ts +72 -0
  184. package/dist/tools/tool-registry-types.d.ts.map +1 -0
  185. package/dist/tools/tool-registry-types.js +9 -0
  186. package/dist/tools/tool-registry-types.js.map +1 -0
  187. package/dist/tools/tool-registry.d.ts +155 -0
  188. package/dist/tools/tool-registry.d.ts.map +1 -0
  189. package/dist/tools/tool-registry.js +599 -0
  190. package/dist/tools/tool-registry.js.map +1 -0
  191. package/dist/tools/tool-registry.schema.json +144 -0
  192. package/docs/ARCHITECTURE.md +259 -0
  193. package/docs/HOST_CONFORMANCE.md +210 -0
  194. package/docs/PROMPT_CONTRACT.md +123 -0
  195. package/docs/TOOL_EFFECT_PROFILE.md +77 -0
  196. package/docs/TOOL_REGISTRY_COMPARISON.md +358 -0
  197. 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,7 @@
1
+ export * from "./completion-gate.js";
2
+ export * from "./run-controller.js";
3
+ export * from "./runtime-error.js";
4
+ export * from "./runtime-types.js";
5
+ export * from "./state-machine.js";
6
+ export * from "./trace-emitter.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ export * from "./completion-gate.js";
2
+ export * from "./run-controller.js";
3
+ export * from "./runtime-error.js";
4
+ export * from "./runtime-types.js";
5
+ export * from "./state-machine.js";
6
+ export * from "./trace-emitter.js";
7
+ //# sourceMappingURL=index.js.map
@@ -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"}