@auvira.ai/sdk 0.2.9

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 (303) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +414 -0
  3. package/dist/agent/Agent.d.ts +27 -0
  4. package/dist/agent/Agent.d.ts.map +1 -0
  5. package/dist/agent/Agent.js +144 -0
  6. package/dist/agent/Agent.js.map +1 -0
  7. package/dist/agent/AgentRegistry.d.ts +13 -0
  8. package/dist/agent/AgentRegistry.d.ts.map +1 -0
  9. package/dist/agent/AgentRegistry.js +28 -0
  10. package/dist/agent/AgentRegistry.js.map +1 -0
  11. package/dist/agent/AgentRun.d.ts +38 -0
  12. package/dist/agent/AgentRun.d.ts.map +1 -0
  13. package/dist/agent/AgentRun.js +101 -0
  14. package/dist/agent/AgentRun.js.map +1 -0
  15. package/dist/agent/ConversationStore.d.ts +18 -0
  16. package/dist/agent/ConversationStore.d.ts.map +1 -0
  17. package/dist/agent/ConversationStore.js +38 -0
  18. package/dist/agent/ConversationStore.js.map +1 -0
  19. package/dist/agent/RunEventBus.d.ts +43 -0
  20. package/dist/agent/RunEventBus.d.ts.map +1 -0
  21. package/dist/agent/RunEventBus.js +289 -0
  22. package/dist/agent/RunEventBus.js.map +1 -0
  23. package/dist/agent/assistantEvent.d.ts +11 -0
  24. package/dist/agent/assistantEvent.d.ts.map +1 -0
  25. package/dist/agent/assistantEvent.js +20 -0
  26. package/dist/agent/assistantEvent.js.map +1 -0
  27. package/dist/agent/buildAgentPrompt.d.ts +10 -0
  28. package/dist/agent/buildAgentPrompt.d.ts.map +1 -0
  29. package/dist/agent/buildAgentPrompt.js +39 -0
  30. package/dist/agent/buildAgentPrompt.js.map +1 -0
  31. package/dist/agent/cancellation.d.ts +9 -0
  32. package/dist/agent/cancellation.d.ts.map +1 -0
  33. package/dist/agent/cancellation.js +18 -0
  34. package/dist/agent/cancellation.js.map +1 -0
  35. package/dist/agent/editCompletion.d.ts +35 -0
  36. package/dist/agent/editCompletion.d.ts.map +1 -0
  37. package/dist/agent/editCompletion.js +179 -0
  38. package/dist/agent/editCompletion.js.map +1 -0
  39. package/dist/agent/editEvents.d.ts +11 -0
  40. package/dist/agent/editEvents.d.ts.map +1 -0
  41. package/dist/agent/editEvents.js +36 -0
  42. package/dist/agent/editEvents.js.map +1 -0
  43. package/dist/agent/evaluateTaskCompletion.d.ts +49 -0
  44. package/dist/agent/evaluateTaskCompletion.d.ts.map +1 -0
  45. package/dist/agent/evaluateTaskCompletion.js +257 -0
  46. package/dist/agent/evaluateTaskCompletion.js.map +1 -0
  47. package/dist/agent/events.d.ts +182 -0
  48. package/dist/agent/events.d.ts.map +1 -0
  49. package/dist/agent/events.js +25 -0
  50. package/dist/agent/events.js.map +1 -0
  51. package/dist/agent/parseSendPayload.d.ts +24 -0
  52. package/dist/agent/parseSendPayload.d.ts.map +1 -0
  53. package/dist/agent/parseSendPayload.js +71 -0
  54. package/dist/agent/parseSendPayload.js.map +1 -0
  55. package/dist/agent/patchUtils.d.ts +17 -0
  56. package/dist/agent/patchUtils.d.ts.map +1 -0
  57. package/dist/agent/patchUtils.js +90 -0
  58. package/dist/agent/patchUtils.js.map +1 -0
  59. package/dist/agent/resolveModelConfig.d.ts +4 -0
  60. package/dist/agent/resolveModelConfig.d.ts.map +1 -0
  61. package/dist/agent/resolveModelConfig.js +27 -0
  62. package/dist/agent/resolveModelConfig.js.map +1 -0
  63. package/dist/agent/runAgentTask.d.ts +14 -0
  64. package/dist/agent/runAgentTask.d.ts.map +1 -0
  65. package/dist/agent/runAgentTask.js +376 -0
  66. package/dist/agent/runAgentTask.js.map +1 -0
  67. package/dist/agent/runResult.d.ts +10 -0
  68. package/dist/agent/runResult.d.ts.map +1 -0
  69. package/dist/agent/runResult.js +34 -0
  70. package/dist/agent/runResult.js.map +1 -0
  71. package/dist/agent/runValidationWithRepair.d.ts +32 -0
  72. package/dist/agent/runValidationWithRepair.d.ts.map +1 -0
  73. package/dist/agent/runValidationWithRepair.js +114 -0
  74. package/dist/agent/runValidationWithRepair.js.map +1 -0
  75. package/dist/agent/tools/edit.d.ts +4 -0
  76. package/dist/agent/tools/edit.d.ts.map +1 -0
  77. package/dist/agent/tools/edit.js +98 -0
  78. package/dist/agent/tools/edit.js.map +1 -0
  79. package/dist/agent/tools/executeTool.d.ts +8 -0
  80. package/dist/agent/tools/executeTool.d.ts.map +1 -0
  81. package/dist/agent/tools/executeTool.js +104 -0
  82. package/dist/agent/tools/executeTool.js.map +1 -0
  83. package/dist/agent/tools/glob.d.ts +6 -0
  84. package/dist/agent/tools/glob.d.ts.map +1 -0
  85. package/dist/agent/tools/glob.js +77 -0
  86. package/dist/agent/tools/glob.js.map +1 -0
  87. package/dist/agent/tools/grep.d.ts +4 -0
  88. package/dist/agent/tools/grep.d.ts.map +1 -0
  89. package/dist/agent/tools/grep.js +61 -0
  90. package/dist/agent/tools/grep.js.map +1 -0
  91. package/dist/agent/tools/pathGuard.d.ts +11 -0
  92. package/dist/agent/tools/pathGuard.d.ts.map +1 -0
  93. package/dist/agent/tools/pathGuard.js +55 -0
  94. package/dist/agent/tools/pathGuard.js.map +1 -0
  95. package/dist/agent/tools/read.d.ts +4 -0
  96. package/dist/agent/tools/read.d.ts.map +1 -0
  97. package/dist/agent/tools/read.js +41 -0
  98. package/dist/agent/tools/read.js.map +1 -0
  99. package/dist/agent/tools/types.d.ts +46 -0
  100. package/dist/agent/tools/types.d.ts.map +1 -0
  101. package/dist/agent/tools/types.js +2 -0
  102. package/dist/agent/tools/types.js.map +1 -0
  103. package/dist/agent/tools/write.d.ts +4 -0
  104. package/dist/agent/tools/write.d.ts.map +1 -0
  105. package/dist/agent/tools/write.js +63 -0
  106. package/dist/agent/tools/write.js.map +1 -0
  107. package/dist/agent/types.d.ts +193 -0
  108. package/dist/agent/types.d.ts.map +1 -0
  109. package/dist/agent/types.js +18 -0
  110. package/dist/agent/types.js.map +1 -0
  111. package/dist/agent/validateOptions.d.ts +12 -0
  112. package/dist/agent/validateOptions.d.ts.map +1 -0
  113. package/dist/agent/validateOptions.js +91 -0
  114. package/dist/agent/validateOptions.js.map +1 -0
  115. package/dist/git/cloneGitLabProject.d.ts +10 -0
  116. package/dist/git/cloneGitLabProject.d.ts.map +1 -0
  117. package/dist/git/cloneGitLabProject.js +24 -0
  118. package/dist/git/cloneGitLabProject.js.map +1 -0
  119. package/dist/git/createAgentBranch.d.ts +3 -0
  120. package/dist/git/createAgentBranch.d.ts.map +1 -0
  121. package/dist/git/createAgentBranch.js +14 -0
  122. package/dist/git/createAgentBranch.js.map +1 -0
  123. package/dist/git/gitDiff.d.ts +9 -0
  124. package/dist/git/gitDiff.d.ts.map +1 -0
  125. package/dist/git/gitDiff.js +34 -0
  126. package/dist/git/gitDiff.js.map +1 -0
  127. package/dist/git/maskSecrets.d.ts +3 -0
  128. package/dist/git/maskSecrets.d.ts.map +1 -0
  129. package/dist/git/maskSecrets.js +15 -0
  130. package/dist/git/maskSecrets.js.map +1 -0
  131. package/dist/git/resolveGitLabProject.d.ts +26 -0
  132. package/dist/git/resolveGitLabProject.d.ts.map +1 -0
  133. package/dist/git/resolveGitLabProject.js +68 -0
  134. package/dist/git/resolveGitLabProject.js.map +1 -0
  135. package/dist/git/sanitizeGitLabUrl.d.ts +8 -0
  136. package/dist/git/sanitizeGitLabUrl.d.ts.map +1 -0
  137. package/dist/git/sanitizeGitLabUrl.js +38 -0
  138. package/dist/git/sanitizeGitLabUrl.js.map +1 -0
  139. package/dist/index.d.ts +13 -0
  140. package/dist/index.d.ts.map +1 -0
  141. package/dist/index.js +7 -0
  142. package/dist/index.js.map +1 -0
  143. package/dist/providers/agentic/AgenticCustomProvider.d.ts +9 -0
  144. package/dist/providers/agentic/AgenticCustomProvider.d.ts.map +1 -0
  145. package/dist/providers/agentic/AgenticCustomProvider.js +366 -0
  146. package/dist/providers/agentic/AgenticCustomProvider.js.map +1 -0
  147. package/dist/providers/agentic/agentLoop.d.ts +79 -0
  148. package/dist/providers/agentic/agentLoop.d.ts.map +1 -0
  149. package/dist/providers/agentic/agentLoop.js +646 -0
  150. package/dist/providers/agentic/agentLoop.js.map +1 -0
  151. package/dist/providers/agentic/priomptContext.d.ts +29 -0
  152. package/dist/providers/agentic/priomptContext.d.ts.map +1 -0
  153. package/dist/providers/agentic/priomptContext.js +90 -0
  154. package/dist/providers/agentic/priomptContext.js.map +1 -0
  155. package/dist/providers/agentic/seedRetrieval.d.ts +12 -0
  156. package/dist/providers/agentic/seedRetrieval.d.ts.map +1 -0
  157. package/dist/providers/agentic/seedRetrieval.js +58 -0
  158. package/dist/providers/agentic/seedRetrieval.js.map +1 -0
  159. package/dist/providers/agentic/toolPolicy.d.ts +15 -0
  160. package/dist/providers/agentic/toolPolicy.d.ts.map +1 -0
  161. package/dist/providers/agentic/toolPolicy.js +53 -0
  162. package/dist/providers/agentic/toolPolicy.js.map +1 -0
  163. package/dist/providers/agentic/toolSchemas.d.ts +177 -0
  164. package/dist/providers/agentic/toolSchemas.d.ts.map +1 -0
  165. package/dist/providers/agentic/toolSchemas.js +104 -0
  166. package/dist/providers/agentic/toolSchemas.js.map +1 -0
  167. package/dist/providers/agentic/trimAgentHistory.d.ts +18 -0
  168. package/dist/providers/agentic/trimAgentHistory.d.ts.map +1 -0
  169. package/dist/providers/agentic/trimAgentHistory.js +68 -0
  170. package/dist/providers/agentic/trimAgentHistory.js.map +1 -0
  171. package/dist/providers/custom/CustomModelProvider.d.ts +4 -0
  172. package/dist/providers/custom/CustomModelProvider.d.ts.map +1 -0
  173. package/dist/providers/custom/CustomModelProvider.js +538 -0
  174. package/dist/providers/custom/CustomModelProvider.js.map +1 -0
  175. package/dist/providers/custom/discoverTargetFiles.d.ts +16 -0
  176. package/dist/providers/custom/discoverTargetFiles.d.ts.map +1 -0
  177. package/dist/providers/custom/discoverTargetFiles.js +231 -0
  178. package/dist/providers/custom/discoverTargetFiles.js.map +1 -0
  179. package/dist/providers/custom/harnessPinTypes.d.ts +15 -0
  180. package/dist/providers/custom/harnessPinTypes.d.ts.map +1 -0
  181. package/dist/providers/custom/harnessPinTypes.js +46 -0
  182. package/dist/providers/custom/harnessPinTypes.js.map +1 -0
  183. package/dist/providers/custom/harnessPrompt.d.ts +29 -0
  184. package/dist/providers/custom/harnessPrompt.d.ts.map +1 -0
  185. package/dist/providers/custom/harnessPrompt.js +356 -0
  186. package/dist/providers/custom/harnessPrompt.js.map +1 -0
  187. package/dist/providers/custom/harnessSectionContext.d.ts +7 -0
  188. package/dist/providers/custom/harnessSectionContext.d.ts.map +1 -0
  189. package/dist/providers/custom/harnessSectionContext.js +82 -0
  190. package/dist/providers/custom/harnessSectionContext.js.map +1 -0
  191. package/dist/providers/custom/modelRequestDefaults.d.ts +16 -0
  192. package/dist/providers/custom/modelRequestDefaults.d.ts.map +1 -0
  193. package/dist/providers/custom/modelRequestDefaults.js +71 -0
  194. package/dist/providers/custom/modelRequestDefaults.js.map +1 -0
  195. package/dist/providers/custom/parseModelEditPlan.d.ts +21 -0
  196. package/dist/providers/custom/parseModelEditPlan.d.ts.map +1 -0
  197. package/dist/providers/custom/parseModelEditPlan.js +164 -0
  198. package/dist/providers/custom/parseModelEditPlan.js.map +1 -0
  199. package/dist/providers/custom/selectPromptFiles.d.ts +18 -0
  200. package/dist/providers/custom/selectPromptFiles.d.ts.map +1 -0
  201. package/dist/providers/custom/selectPromptFiles.js +180 -0
  202. package/dist/providers/custom/selectPromptFiles.js.map +1 -0
  203. package/dist/providers/custom/visionImages.d.ts +4 -0
  204. package/dist/providers/custom/visionImages.d.ts.map +1 -0
  205. package/dist/providers/custom/visionImages.js +10 -0
  206. package/dist/providers/custom/visionImages.js.map +1 -0
  207. package/dist/providers/openhands/OpenHandsMockProvider.d.ts +6 -0
  208. package/dist/providers/openhands/OpenHandsMockProvider.d.ts.map +1 -0
  209. package/dist/providers/openhands/OpenHandsMockProvider.js +73 -0
  210. package/dist/providers/openhands/OpenHandsMockProvider.js.map +1 -0
  211. package/dist/providers/openhands/OpenHandsProvider.d.ts +4 -0
  212. package/dist/providers/openhands/OpenHandsProvider.d.ts.map +1 -0
  213. package/dist/providers/openhands/OpenHandsProvider.js +163 -0
  214. package/dist/providers/openhands/OpenHandsProvider.js.map +1 -0
  215. package/dist/providers/openhands/openHandsEvents.d.ts +6 -0
  216. package/dist/providers/openhands/openHandsEvents.d.ts.map +1 -0
  217. package/dist/providers/openhands/openHandsEvents.js +54 -0
  218. package/dist/providers/openhands/openHandsEvents.js.map +1 -0
  219. package/dist/providers/openhands/types.d.ts +16 -0
  220. package/dist/providers/openhands/types.d.ts.map +1 -0
  221. package/dist/providers/openhands/types.js +2 -0
  222. package/dist/providers/openhands/types.js.map +1 -0
  223. package/dist/providers/runProvider.d.ts +4 -0
  224. package/dist/providers/runProvider.d.ts.map +1 -0
  225. package/dist/providers/runProvider.js +16 -0
  226. package/dist/providers/runProvider.js.map +1 -0
  227. package/dist/providers/types.d.ts +35 -0
  228. package/dist/providers/types.d.ts.map +1 -0
  229. package/dist/providers/types.js +5 -0
  230. package/dist/providers/types.js.map +1 -0
  231. package/dist/server/routes.d.ts +9 -0
  232. package/dist/server/routes.d.ts.map +1 -0
  233. package/dist/server/routes.js +58 -0
  234. package/dist/server/routes.js.map +1 -0
  235. package/dist/server/server.d.ts +10 -0
  236. package/dist/server/server.d.ts.map +1 -0
  237. package/dist/server/server.js +39 -0
  238. package/dist/server/server.js.map +1 -0
  239. package/dist/tools/fileExists.d.ts +3 -0
  240. package/dist/tools/fileExists.d.ts.map +1 -0
  241. package/dist/tools/fileExists.js +12 -0
  242. package/dist/tools/fileExists.js.map +1 -0
  243. package/dist/tools/resolveBuildValidation.d.ts +8 -0
  244. package/dist/tools/resolveBuildValidation.d.ts.map +1 -0
  245. package/dist/tools/resolveBuildValidation.js +35 -0
  246. package/dist/tools/resolveBuildValidation.js.map +1 -0
  247. package/dist/tools/runCommand.d.ts +17 -0
  248. package/dist/tools/runCommand.d.ts.map +1 -0
  249. package/dist/tools/runCommand.js +92 -0
  250. package/dist/tools/runCommand.js.map +1 -0
  251. package/dist/tools/safeValidateCommand.d.ts +9 -0
  252. package/dist/tools/safeValidateCommand.d.ts.map +1 -0
  253. package/dist/tools/safeValidateCommand.js +59 -0
  254. package/dist/tools/safeValidateCommand.js.map +1 -0
  255. package/dist/util/apiThrottle.d.ts +14 -0
  256. package/dist/util/apiThrottle.d.ts.map +1 -0
  257. package/dist/util/apiThrottle.js +50 -0
  258. package/dist/util/apiThrottle.js.map +1 -0
  259. package/dist/util/globMatch.d.ts +7 -0
  260. package/dist/util/globMatch.d.ts.map +1 -0
  261. package/dist/util/globMatch.js +25 -0
  262. package/dist/util/globMatch.js.map +1 -0
  263. package/dist/util/modelApiClient.d.ts +47 -0
  264. package/dist/util/modelApiClient.d.ts.map +1 -0
  265. package/dist/util/modelApiClient.js +245 -0
  266. package/dist/util/modelApiClient.js.map +1 -0
  267. package/dist/util/screenshotBase64.d.ts +3 -0
  268. package/dist/util/screenshotBase64.d.ts.map +1 -0
  269. package/dist/util/screenshotBase64.js +7 -0
  270. package/dist/util/screenshotBase64.js.map +1 -0
  271. package/dist/workspace/cleanupWorkspace.d.ts +3 -0
  272. package/dist/workspace/cleanupWorkspace.d.ts.map +1 -0
  273. package/dist/workspace/cleanupWorkspace.js +6 -0
  274. package/dist/workspace/cleanupWorkspace.js.map +1 -0
  275. package/dist/workspace/copyLocalRepo.d.ts +5 -0
  276. package/dist/workspace/copyLocalRepo.d.ts.map +1 -0
  277. package/dist/workspace/copyLocalRepo.js +34 -0
  278. package/dist/workspace/copyLocalRepo.js.map +1 -0
  279. package/dist/workspace/createWorkspace.d.ts +7 -0
  280. package/dist/workspace/createWorkspace.d.ts.map +1 -0
  281. package/dist/workspace/createWorkspace.js +10 -0
  282. package/dist/workspace/createWorkspace.js.map +1 -0
  283. package/dist/workspace/prepareWorkspace.d.ts +4 -0
  284. package/dist/workspace/prepareWorkspace.d.ts.map +1 -0
  285. package/dist/workspace/prepareWorkspace.js +46 -0
  286. package/dist/workspace/prepareWorkspace.js.map +1 -0
  287. package/dist/workspace/resolveWorkspaceMode.d.ts +7 -0
  288. package/dist/workspace/resolveWorkspaceMode.d.ts.map +1 -0
  289. package/dist/workspace/resolveWorkspaceMode.js +15 -0
  290. package/dist/workspace/resolveWorkspaceMode.js.map +1 -0
  291. package/dist/workspace/syncRepoToOwner.d.ts +3 -0
  292. package/dist/workspace/syncRepoToOwner.d.ts.map +1 -0
  293. package/dist/workspace/syncRepoToOwner.js +14 -0
  294. package/dist/workspace/syncRepoToOwner.js.map +1 -0
  295. package/dist/workspace/workspaceCheckpoint.d.ts +20 -0
  296. package/dist/workspace/workspaceCheckpoint.d.ts.map +1 -0
  297. package/dist/workspace/workspaceCheckpoint.js +243 -0
  298. package/dist/workspace/workspaceCheckpoint.js.map +1 -0
  299. package/dist/workspace/writeScreenshot.d.ts +15 -0
  300. package/dist/workspace/writeScreenshot.d.ts.map +1 -0
  301. package/dist/workspace/writeScreenshot.js +56 -0
  302. package/dist/workspace/writeScreenshot.js.map +1 -0
  303. package/package.json +53 -0
@@ -0,0 +1,356 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { fileExists } from "../../tools/fileExists.js";
4
+ import { discoverTargetFiles, TARGET_FILE_CANDIDATES, } from "./discoverTargetFiles.js";
5
+ import { finalizePinnedTarget, PIN_MANDATORY_PAGE, PIN_MANDATORY_SITE_CONFIG, } from "./harnessPinTypes.js";
6
+ import { extractPageSectionFunctionSnippet, extractSiteConfigSectionSnippet, pinnedSnippetPath, PINNED_SNIPPET_PREFIX, } from "./harnessSectionContext.js";
7
+ export { formatPinnedTargetLabel } from "./harnessPinTypes.js";
8
+ const ALLOWLIST_HEADER = /^ALLOWED[_ ]WRITE[_ ]PATHS:\s*$/i;
9
+ const MAX_DIR_EXPAND_FILES = 40;
10
+ const SCAN_EXTENSIONS = new Set([".tsx", ".ts", ".jsx", ".js", ".css"]);
11
+ export const HARNESS_REPO_FILE_BYTE_LIMIT = 48_000;
12
+ function parseUiSelectedTargetBlock(prompt) {
13
+ const lines = prompt.split("\n");
14
+ const start = lines.findIndex((line) => /^UI-SELECTED TARGET:\s*$/i.test(line.trim()));
15
+ if (start < 0) {
16
+ return undefined;
17
+ }
18
+ const partial = {};
19
+ for (let i = start + 1; i < lines.length; i += 1) {
20
+ const line = lines[i].trim();
21
+ if (!line) {
22
+ continue;
23
+ }
24
+ if (/^[A-Z][A-Z0-9 _-]+:/.test(line) && !line.startsWith("-")) {
25
+ break;
26
+ }
27
+ const sectionIndex = line.match(/^-?\s*sectionIndex:\s*(\d+)/i);
28
+ if (sectionIndex) {
29
+ partial.sectionIndex = Number(sectionIndex[1]);
30
+ continue;
31
+ }
32
+ const type = line.match(/^-?\s*type:\s*(.+)$/i);
33
+ if (type) {
34
+ partial.sectionType = type[1].trim();
35
+ continue;
36
+ }
37
+ const title = line.match(/^-?\s*title:\s*(.+)$/i);
38
+ if (title) {
39
+ partial.sectionTitle = title[1].trim();
40
+ continue;
41
+ }
42
+ const kind = line.match(/^-?\s*kind:\s*(hero|section)/i);
43
+ if (kind) {
44
+ partial.kind = kind[1].toLowerCase();
45
+ continue;
46
+ }
47
+ const fieldPath = line.match(/^-?\s*(?:elementFieldPath|fieldPath):\s*(.+)$/i);
48
+ if (fieldPath) {
49
+ partial.fieldPath = fieldPath[1].trim();
50
+ }
51
+ }
52
+ if (partial.sectionIndex == null &&
53
+ !partial.sectionType &&
54
+ !partial.sectionTitle &&
55
+ !partial.fieldPath) {
56
+ return undefined;
57
+ }
58
+ return finalizePinnedTarget(partial);
59
+ }
60
+ function parsePinnedTargetBlock(prompt) {
61
+ const match = prompt.match(/Section\s*\[(\d+)\]\s+(\w+)\s+—\s+"([^"]+)"/i);
62
+ if (!match) {
63
+ return undefined;
64
+ }
65
+ return finalizePinnedTarget({
66
+ sectionIndex: Number(match[1]),
67
+ sectionType: match[2].toLowerCase(),
68
+ sectionTitle: match[3],
69
+ kind: "section",
70
+ });
71
+ }
72
+ function parseZeroChangeRetryPin(prompt) {
73
+ const retry = prompt.match(/Pinned target from preview:\s*section index\s*(\d+)/i);
74
+ if (retry) {
75
+ return finalizePinnedTarget({
76
+ sectionIndex: Number(retry[1]),
77
+ kind: "section",
78
+ });
79
+ }
80
+ const generic = prompt.match(/section index\s*(\d+)/i);
81
+ if (generic && /APPLY RETRY|zero.?change|no file changes/i.test(prompt)) {
82
+ return finalizePinnedTarget({
83
+ sectionIndex: Number(generic[1]),
84
+ kind: "section",
85
+ });
86
+ }
87
+ return undefined;
88
+ }
89
+ /** Parses structured pin metadata from harness-compiled prompts. */
90
+ export function extractPinnedTargetFromHarness(prompt) {
91
+ return (parseUiSelectedTargetBlock(prompt) ??
92
+ parsePinnedTargetBlock(prompt) ??
93
+ parseZeroChangeRetryPin(prompt));
94
+ }
95
+ /** Extracts ALLOWED_WRITE_PATHS entries from a harness-compiled prompt. */
96
+ export function extractAllowedWritePaths(prompt) {
97
+ const lines = prompt.split("\n");
98
+ const paths = [];
99
+ let inSection = false;
100
+ for (const line of lines) {
101
+ if (ALLOWLIST_HEADER.test(line.trim())) {
102
+ inSection = true;
103
+ continue;
104
+ }
105
+ if (!inSection) {
106
+ continue;
107
+ }
108
+ const bullet = line.match(/^\s*[-*]\s+(.+)$/);
109
+ if (bullet) {
110
+ paths.push(bullet[1].trim());
111
+ continue;
112
+ }
113
+ if (line.trim() === "") {
114
+ continue;
115
+ }
116
+ if (/^[A-Z][A-Z0-9 _-]+:/.test(line.trim())) {
117
+ break;
118
+ }
119
+ }
120
+ return paths;
121
+ }
122
+ /** Extracts a pinned target label from harness user blocks (legacy). */
123
+ export function extractPinnedHintFromHarness(prompt) {
124
+ const structured = extractPinnedTargetFromHarness(prompt)?.componentHint;
125
+ if (structured) {
126
+ return structured;
127
+ }
128
+ const legacy = prompt.match(/^PINNED TARGET:\s*(.+)$/im);
129
+ return legacy?.[1]?.trim();
130
+ }
131
+ export function harnessTargetFromDom(selectedDom) {
132
+ if (!selectedDom) {
133
+ return undefined;
134
+ }
135
+ const partial = {
136
+ sectionIndex: selectedDom.sectionIndex,
137
+ sectionType: selectedDom.sectionType,
138
+ sectionTitle: selectedDom.sectionTitle,
139
+ kind: selectedDom.kind,
140
+ fieldPath: selectedDom.id,
141
+ componentHint: selectedDom.componentHint,
142
+ };
143
+ if (partial.sectionIndex == null &&
144
+ !partial.sectionType &&
145
+ !partial.sectionTitle &&
146
+ !partial.componentHint) {
147
+ return undefined;
148
+ }
149
+ return finalizePinnedTarget(partial);
150
+ }
151
+ /** Merges DOM and harness pin sources; DOM wins on conflicts. */
152
+ export function mergePinnedTarget(fromDom, fromHarness) {
153
+ if (!fromDom && !fromHarness) {
154
+ return undefined;
155
+ }
156
+ return finalizePinnedTarget({
157
+ ...fromHarness,
158
+ ...fromDom,
159
+ componentHint: fromDom?.componentHint ?? fromHarness?.componentHint,
160
+ });
161
+ }
162
+ async function expandDirectoryFiles(repoPath, relativeDir) {
163
+ const absoluteDir = join(repoPath, relativeDir);
164
+ const found = [];
165
+ async function walk(currentRel) {
166
+ if (found.length >= MAX_DIR_EXPAND_FILES) {
167
+ return;
168
+ }
169
+ const absolute = join(repoPath, currentRel);
170
+ let entries;
171
+ try {
172
+ entries = await fs.readdir(absolute, { withFileTypes: true });
173
+ }
174
+ catch {
175
+ return;
176
+ }
177
+ for (const entry of entries) {
178
+ if (found.length >= MAX_DIR_EXPAND_FILES) {
179
+ break;
180
+ }
181
+ const rel = `${currentRel}/${entry.name}`.replace(/\/+/g, "/");
182
+ if (entry.name === "node_modules" || entry.name === ".next") {
183
+ continue;
184
+ }
185
+ if (entry.isDirectory()) {
186
+ await walk(rel);
187
+ }
188
+ else if (entry.isFile()) {
189
+ const ext = entry.name.slice(entry.name.lastIndexOf("."));
190
+ if (SCAN_EXTENSIONS.has(ext)) {
191
+ found.push(rel);
192
+ }
193
+ }
194
+ }
195
+ }
196
+ try {
197
+ const stat = await fs.stat(absoluteDir);
198
+ if (!stat.isDirectory()) {
199
+ return [];
200
+ }
201
+ }
202
+ catch {
203
+ return [];
204
+ }
205
+ await walk(relativeDir.replace(/\/+$/, ""));
206
+ return found;
207
+ }
208
+ async function resolveAllowlistPath(repoPath, relativePath) {
209
+ const absolute = join(repoPath, relativePath);
210
+ try {
211
+ const stat = await fs.stat(absolute);
212
+ if (stat.isDirectory()) {
213
+ return expandDirectoryFiles(repoPath, relativePath);
214
+ }
215
+ if (stat.isFile()) {
216
+ return [relativePath];
217
+ }
218
+ }
219
+ catch {
220
+ // missing path
221
+ }
222
+ return [];
223
+ }
224
+ function pinMandatoryPaths(pinned) {
225
+ if (pinned?.sectionIndex == null && !pinned?.sectionTitle) {
226
+ return [];
227
+ }
228
+ return [...PIN_MANDATORY_SITE_CONFIG, ...PIN_MANDATORY_PAGE];
229
+ }
230
+ /** Builds synthetic snippet snapshots for pinned section context. */
231
+ export async function buildPinnedSectionSnapshots(repoPath, pinned) {
232
+ if (!pinned || pinned.sectionIndex == null) {
233
+ return [];
234
+ }
235
+ const snapshots = [];
236
+ for (const rel of PIN_MANDATORY_SITE_CONFIG) {
237
+ const abs = join(repoPath, rel);
238
+ if (!(await fileExists(abs))) {
239
+ continue;
240
+ }
241
+ const content = await fs.readFile(abs, "utf8");
242
+ const snippet = extractSiteConfigSectionSnippet(content, pinned.sectionIndex);
243
+ if (snippet) {
244
+ snapshots.push({
245
+ path: pinnedSnippetPath("siteConfig", pinned.sectionIndex),
246
+ content: snippet,
247
+ });
248
+ }
249
+ break;
250
+ }
251
+ for (const rel of PIN_MANDATORY_PAGE) {
252
+ const abs = join(repoPath, rel);
253
+ if (!(await fileExists(abs))) {
254
+ continue;
255
+ }
256
+ const content = await fs.readFile(abs, "utf8");
257
+ const snippet = extractPageSectionFunctionSnippet(content, pinned.sectionType, pinned.sectionTitle);
258
+ if (snippet) {
259
+ snapshots.push({
260
+ path: pinnedSnippetPath("page"),
261
+ content: snippet,
262
+ });
263
+ }
264
+ break;
265
+ }
266
+ return snapshots;
267
+ }
268
+ /** Discovers edit targets from harness prompts, preferring ALLOWED_WRITE_PATHS. */
269
+ export async function discoverHarnessTargetFiles(repoPath, harnessPrompt, pinned) {
270
+ const ordered = new Set();
271
+ const allowed = extractAllowedWritePaths(harnessPrompt);
272
+ for (const relativePath of allowed) {
273
+ const expanded = await resolveAllowlistPath(repoPath, relativePath);
274
+ for (const file of expanded) {
275
+ ordered.add(file);
276
+ }
277
+ }
278
+ for (const relativePath of pinMandatoryPaths(pinned)) {
279
+ if (await fileExists(join(repoPath, relativePath))) {
280
+ ordered.add(relativePath);
281
+ }
282
+ }
283
+ if (ordered.size > 0) {
284
+ return [...ordered];
285
+ }
286
+ const resolvedPin = pinned ?? extractPinnedTargetFromHarness(harnessPrompt);
287
+ if (resolvedPin?.componentHint) {
288
+ return discoverTargetFiles(repoPath, {
289
+ componentHint: resolvedPin.componentHint,
290
+ text: resolvedPin.sectionTitle,
291
+ sectionIndex: resolvedPin.sectionIndex,
292
+ sectionType: resolvedPin.sectionType,
293
+ sectionTitle: resolvedPin.sectionTitle,
294
+ kind: resolvedPin.kind,
295
+ });
296
+ }
297
+ for (const relativePath of TARGET_FILE_CANDIDATES) {
298
+ if (await fileExists(join(repoPath, relativePath))) {
299
+ ordered.add(relativePath);
300
+ }
301
+ }
302
+ if (ordered.size > 0) {
303
+ return [...ordered];
304
+ }
305
+ return discoverTargetFiles(repoPath);
306
+ }
307
+ function dedupePaths(paths) {
308
+ return [...new Set(paths.filter((p) => !p.startsWith(PINNED_SNIPPET_PREFIX)))];
309
+ }
310
+ /** Merges harness, DOM, and pin-mandatory discovery paths. */
311
+ export async function discoverMergedHarnessPaths(repoPath, harnessPrompt, selectedDom, pinned) {
312
+ const resolvedPin = pinned ??
313
+ mergePinnedTarget(harnessTargetFromDom(selectedDom), extractPinnedTargetFromHarness(harnessPrompt));
314
+ const harnessPaths = await discoverHarnessTargetFiles(repoPath, harnessPrompt, resolvedPin);
315
+ const domPaths = await discoverTargetFiles(repoPath, {
316
+ ...selectedDom,
317
+ componentHint: selectedDom?.componentHint ?? resolvedPin?.componentHint,
318
+ text: selectedDom?.text ?? resolvedPin?.sectionTitle,
319
+ sectionIndex: selectedDom?.sectionIndex ?? resolvedPin?.sectionIndex,
320
+ sectionType: selectedDom?.sectionType ?? resolvedPin?.sectionType,
321
+ sectionTitle: selectedDom?.sectionTitle ?? resolvedPin?.sectionTitle,
322
+ kind: selectedDom?.kind ?? resolvedPin?.kind,
323
+ });
324
+ return dedupePaths([...harnessPaths, ...domPaths]);
325
+ }
326
+ /** Limits repository file attachments for long harness prompts. */
327
+ export function limitHarnessRepositoryFiles(files, maxBytes = HARNESS_REPO_FILE_BYTE_LIMIT) {
328
+ const mandatory = files.filter((f) => f.path.startsWith(PINNED_SNIPPET_PREFIX));
329
+ const regular = files.filter((f) => !f.path.startsWith(PINNED_SNIPPET_PREFIX));
330
+ const selected = [...mandatory];
331
+ let total = mandatory.reduce((sum, file) => sum + Buffer.byteLength(file.content, "utf8"), 0);
332
+ for (const file of regular) {
333
+ const size = Buffer.byteLength(file.content, "utf8");
334
+ if (selected.length > mandatory.length && total + size > maxBytes) {
335
+ break;
336
+ }
337
+ selected.push(file);
338
+ total += size;
339
+ }
340
+ return selected;
341
+ }
342
+ /** Builds the user message for harness prompts without duplicating grounded context. */
343
+ export function buildHarnessUserPrompt(user, files) {
344
+ if (user.includes("GROUNDED CODE CONTEXT")) {
345
+ return user;
346
+ }
347
+ const limited = limitHarnessRepositoryFiles(files);
348
+ if (limited.length === 0) {
349
+ return user;
350
+ }
351
+ const repoSection = limited
352
+ .map((file) => `--- ${file.path} ---\n${file.content}`)
353
+ .join("\n\n");
354
+ return `${user}\n\nRepository files:\n${repoSection}`;
355
+ }
356
+ //# sourceMappingURL=harnessPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harnessPrompt.js","sourceRoot":"","sources":["../../../src/providers/custom/harnessPrompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const PINNED_SNIPPET_PREFIX = "__harness__/";
2
+ /** Extracts a siteConfig sections[N] object block as text. */
3
+ export declare function extractSiteConfigSectionSnippet(content: string, sectionIndex: number): string | undefined;
4
+ /** Extracts an inline page section renderer block matching type/title. */
5
+ export declare function extractPageSectionFunctionSnippet(pageContent: string, sectionType?: string, sectionTitle?: string): string | undefined;
6
+ export declare function pinnedSnippetPath(kind: "siteConfig" | "page", sectionIndex?: number): string;
7
+ //# sourceMappingURL=harnessSectionContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harnessSectionContext.d.ts","sourceRoot":"","sources":["../../../src/providers/custom/harnessSectionContext.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AAEpD,8DAA8D;AAC9D,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAmDpB;AAED,0EAA0E;AAC1E,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,GAAG,SAAS,CAmCpB;AASD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,YAAY,GAAG,MAAM,EAC3B,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAKR"}
@@ -0,0 +1,82 @@
1
+ const SNIPPET_MAX_BYTES = 4_096;
2
+ export const PINNED_SNIPPET_PREFIX = "__harness__/";
3
+ /** Extracts a siteConfig sections[N] object block as text. */
4
+ export function extractSiteConfigSectionSnippet(content, sectionIndex) {
5
+ const marker = `sections[${sectionIndex}]`;
6
+ const arrayMatch = content.match(/sections\s*:\s*\[/);
7
+ if (!arrayMatch || arrayMatch.index === undefined) {
8
+ return undefined;
9
+ }
10
+ const fromArray = content.slice(arrayMatch.index);
11
+ let depth = 0;
12
+ let elementIndex = -1;
13
+ let elementStart = -1;
14
+ for (let i = 0; i < fromArray.length; i += 1) {
15
+ const ch = fromArray[i];
16
+ if (ch === "[") {
17
+ depth += 1;
18
+ if (depth === 2) {
19
+ elementIndex += 1;
20
+ if (elementIndex === sectionIndex) {
21
+ elementStart = i;
22
+ }
23
+ }
24
+ }
25
+ else if (ch === "]") {
26
+ if (depth === 2 && elementIndex === sectionIndex && elementStart >= 0) {
27
+ const snippet = fromArray.slice(elementStart, i + 1).trim();
28
+ return truncateSnippet(snippet);
29
+ }
30
+ depth -= 1;
31
+ }
32
+ else if (ch === "{" && depth === 2 && elementIndex === sectionIndex && elementStart < 0) {
33
+ elementStart = i;
34
+ }
35
+ else if (ch === "}" && depth === 2 && elementIndex === sectionIndex && elementStart >= 0) {
36
+ const snippet = fromArray.slice(elementStart, i + 1).trim();
37
+ return truncateSnippet(snippet);
38
+ }
39
+ }
40
+ const titlePattern = new RegExp(`(?:^|[,{\\n])\\s*(?:\\{[^}]*"type"\\s*:\\s*"[^"]+"[^}]*"title"\\s*:\\s*"[^"]+"[^}]*\\}|[^\\]]*type\\s*:\\s*'[^']+'[^\\]]*title\\s*:\\s*'[^']+')`, "g");
41
+ const matches = [...content.matchAll(titlePattern)];
42
+ if (matches[sectionIndex]) {
43
+ return truncateSnippet(matches[sectionIndex][0].trim());
44
+ }
45
+ if (content.includes(marker)) {
46
+ const idx = content.indexOf(marker);
47
+ return truncateSnippet(content.slice(idx, idx + 800));
48
+ }
49
+ return undefined;
50
+ }
51
+ /** Extracts an inline page section renderer block matching type/title. */
52
+ export function extractPageSectionFunctionSnippet(pageContent, sectionType, sectionTitle) {
53
+ const patterns = [];
54
+ if (sectionType) {
55
+ const pascal = sectionType.charAt(0).toUpperCase() + sectionType.slice(1).toLowerCase();
56
+ patterns.push(new RegExp(`function\\s+${pascal}Section[\\s\\S]*?(?=\\nfunction\\s|$)`, "i"), new RegExp(`function\\s+${pascal}[\\s\\S]*?(?=\\nfunction\\s|$)`, "i"), new RegExp(`data-section-type=["']${sectionType}["'][\\s\\S]{0,1200}`, "i"));
57
+ }
58
+ if (sectionTitle) {
59
+ const escaped = sectionTitle.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
60
+ patterns.push(new RegExp(`.{0,400}${escaped}.{0,400}`, "i"));
61
+ }
62
+ for (const pattern of patterns) {
63
+ const match = pageContent.match(pattern);
64
+ if (match?.[0]) {
65
+ return truncateSnippet(match[0].trim());
66
+ }
67
+ }
68
+ return undefined;
69
+ }
70
+ function truncateSnippet(snippet) {
71
+ if (Buffer.byteLength(snippet, "utf8") <= SNIPPET_MAX_BYTES) {
72
+ return snippet;
73
+ }
74
+ return snippet.slice(0, SNIPPET_MAX_BYTES);
75
+ }
76
+ export function pinnedSnippetPath(kind, sectionIndex) {
77
+ if (kind === "siteConfig" && sectionIndex != null) {
78
+ return `${PINNED_SNIPPET_PREFIX}siteConfig.sections[${sectionIndex}].snippet`;
79
+ }
80
+ return `${PINNED_SNIPPET_PREFIX}page.section.snippet`;
81
+ }
82
+ //# sourceMappingURL=harnessSectionContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harnessSectionContext.js","sourceRoot":"","sources":["../../../src/providers/custom/harnessSectionContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type ModelRequestProfile = "agentic" | "agentic_vision" | "json";
2
+ export interface ApplyCustomModelRequestDefaultsInput {
3
+ profile: ModelRequestProfile;
4
+ modelId: string;
5
+ /** When set, overrides profile default cap (e.g. length retry bump). */
6
+ maxCompletionTokensOverride?: number;
7
+ }
8
+ /** True when the model id targets MiniMax (direct or routed). */
9
+ export declare function isMiniMaxModel(modelId: string): boolean;
10
+ /** Resolves max_completion_tokens for a request profile. */
11
+ export declare function getMaxCompletionTokens(profile: ModelRequestProfile, override?: number): number;
12
+ /** Applies MiniMax chat/completions defaults shared by JSON and agentic providers. */
13
+ export declare function applyCustomModelRequestDefaults(body: Record<string, unknown>, input: ApplyCustomModelRequestDefaultsInput): void;
14
+ /** Bumps token cap by 50% for a single length-retry attempt. */
15
+ export declare function bumpMaxCompletionTokensForLengthRetry(profile: ModelRequestProfile, currentCap: number): number;
16
+ //# sourceMappingURL=modelRequestDefaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelRequestDefaults.d.ts","sourceRoot":"","sources":["../../../src/providers/custom/modelRequestDefaults.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAExE,MAAM,WAAW,oCAAoC;IACnD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;AAcD,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAaD,4DAA4D;AAC5D,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAgBR;AAkBD,sFAAsF;AACtF,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,oCAAoC,GAC1C,IAAI,CAgBN;AAED,gEAAgE;AAChE,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,mBAAmB,EAC5B,UAAU,EAAE,MAAM,GACjB,MAAM,CAIR"}
@@ -0,0 +1,71 @@
1
+ const DEFAULT_CAPS = {
2
+ agentic: 2048,
3
+ agentic_vision: 4096,
4
+ json: 8192,
5
+ };
6
+ const PROFILE_ENV_KEYS = {
7
+ agentic: "CUSTOM_MODEL_MAX_COMPLETION_TOKENS_AGENTIC",
8
+ agentic_vision: "CUSTOM_MODEL_MAX_COMPLETION_TOKENS_VISION",
9
+ json: "CUSTOM_MODEL_MAX_COMPLETION_TOKENS_JSON",
10
+ };
11
+ /** True when the model id targets MiniMax (direct or routed). */
12
+ export function isMiniMaxModel(modelId) {
13
+ return modelId.toLowerCase().includes("minimax");
14
+ }
15
+ function parsePositiveInt(raw, fallback) {
16
+ if (!raw?.trim()) {
17
+ return fallback;
18
+ }
19
+ const parsed = Number.parseInt(raw, 10);
20
+ if (!Number.isFinite(parsed) || parsed < 1) {
21
+ return fallback;
22
+ }
23
+ return parsed;
24
+ }
25
+ /** Resolves max_completion_tokens for a request profile. */
26
+ export function getMaxCompletionTokens(profile, override) {
27
+ if (override !== undefined && override > 0) {
28
+ return override;
29
+ }
30
+ const global = process.env.CUSTOM_MODEL_MAX_COMPLETION_TOKENS?.trim();
31
+ if (global) {
32
+ return parsePositiveInt(global, DEFAULT_CAPS[profile]);
33
+ }
34
+ const profileEnv = process.env[PROFILE_ENV_KEYS[profile]]?.trim();
35
+ if (profileEnv) {
36
+ return parsePositiveInt(profileEnv, DEFAULT_CAPS[profile]);
37
+ }
38
+ return DEFAULT_CAPS[profile];
39
+ }
40
+ function resolveThinking(profile) {
41
+ const env = process.env.CUSTOM_MODEL_THINKING?.trim().toLowerCase();
42
+ if (env === "disabled") {
43
+ return { type: "disabled" };
44
+ }
45
+ if (env === "adaptive") {
46
+ return { type: "adaptive" };
47
+ }
48
+ if (profile === "json") {
49
+ return { type: "disabled" };
50
+ }
51
+ return { type: "adaptive" };
52
+ }
53
+ /** Applies MiniMax chat/completions defaults shared by JSON and agentic providers. */
54
+ export function applyCustomModelRequestDefaults(body, input) {
55
+ body.service_tier = "priority";
56
+ body.max_completion_tokens = getMaxCompletionTokens(input.profile, input.maxCompletionTokensOverride);
57
+ if (!isMiniMaxModel(input.modelId)) {
58
+ return;
59
+ }
60
+ body.thinking = resolveThinking(input.profile);
61
+ if (input.profile === "agentic" || input.profile === "agentic_vision") {
62
+ body.reasoning_split = true;
63
+ }
64
+ }
65
+ /** Bumps token cap by 50% for a single length-retry attempt. */
66
+ export function bumpMaxCompletionTokensForLengthRetry(profile, currentCap) {
67
+ const bumped = Math.ceil(currentCap * 1.5);
68
+ const profileCeiling = DEFAULT_CAPS[profile] * 2;
69
+ return Math.min(bumped, profileCeiling);
70
+ }
71
+ //# sourceMappingURL=modelRequestDefaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelRequestDefaults.js","sourceRoot":"","sources":["../../../src/providers/custom/modelRequestDefaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export type EditParseFailure = "EMPTY_CONTENT" | "PARSE_FAILED" | "MISSING_EDITS" | "INVALID_EDIT_SHAPE";
2
+ export interface ModelEdit {
3
+ path: string;
4
+ search?: string;
5
+ replace?: string;
6
+ content?: string;
7
+ }
8
+ export interface ModelEditPlan {
9
+ summary?: string;
10
+ response?: string;
11
+ edits: ModelEdit[];
12
+ }
13
+ export interface ParseModelEditPlanResult {
14
+ plan?: ModelEditPlan;
15
+ failure?: EditParseFailure;
16
+ }
17
+ /** Parses and normalizes model edit-plan JSON from raw LLM output. */
18
+ export declare function parseModelEditPlan(raw: string): ParseModelEditPlanResult;
19
+ /** Truncates raw model output for repair prompts. */
20
+ export declare function truncateModelOutput(raw: string, maxChars?: number): string;
21
+ //# sourceMappingURL=parseModelEditPlan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseModelEditPlan.d.ts","sourceRoot":"","sources":["../../../src/providers/custom/parseModelEditPlan.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,cAAc,GACd,eAAe,GACf,oBAAoB,CAAC;AAEzB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAoKD,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,wBAAwB,CAgCxE;AAED,qDAAqD;AACrD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAM,GAAG,MAAM,CAMvE"}