@vedangiitb/qwintly-core 1.4.12 → 1.4.13

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 (142) hide show
  1. package/dist/ai/generate/gemini.client.js +1 -1
  2. package/dist/ai/generate/gemini.client.js.map +1 -1
  3. package/dist/ai/generate/generateClient.d.ts.map +1 -1
  4. package/dist/ai/generate/generateClient.js +7 -3
  5. package/dist/ai/generate/generateClient.js.map +1 -1
  6. package/dist/ai/toolLoop/helpers/aiCall.helper.d.ts +16 -0
  7. package/dist/ai/toolLoop/helpers/aiCall.helper.d.ts.map +1 -0
  8. package/dist/ai/toolLoop/helpers/aiCall.helper.js +23 -0
  9. package/dist/ai/toolLoop/helpers/aiCall.helper.js.map +1 -0
  10. package/dist/ai/toolLoop/helpers/applyPatch.helper.d.ts +6 -0
  11. package/dist/ai/toolLoop/helpers/applyPatch.helper.d.ts.map +1 -0
  12. package/dist/ai/toolLoop/helpers/applyPatch.helper.js +10 -0
  13. package/dist/ai/toolLoop/helpers/applyPatch.helper.js.map +1 -0
  14. package/dist/ai/toolLoop/helpers/errors.helper.d.ts +15 -0
  15. package/dist/ai/toolLoop/helpers/errors.helper.d.ts.map +1 -0
  16. package/dist/ai/toolLoop/helpers/errors.helper.js +50 -0
  17. package/dist/ai/toolLoop/helpers/errors.helper.js.map +1 -0
  18. package/dist/ai/toolLoop/helpers/fsHelpers.d.ts +5 -0
  19. package/dist/ai/toolLoop/helpers/fsHelpers.d.ts.map +1 -0
  20. package/dist/ai/toolLoop/helpers/fsHelpers.js +28 -0
  21. package/dist/ai/toolLoop/helpers/fsHelpers.js.map +1 -0
  22. package/dist/ai/toolLoop/helpers/patchRetry.helper.d.ts +11 -0
  23. package/dist/ai/toolLoop/helpers/patchRetry.helper.d.ts.map +1 -0
  24. package/dist/ai/toolLoop/helpers/patchRetry.helper.js +30 -0
  25. package/dist/ai/toolLoop/helpers/patchRetry.helper.js.map +1 -0
  26. package/dist/ai/toolLoop/helpers/persistTokens.helpers.d.ts +7 -0
  27. package/dist/ai/toolLoop/helpers/persistTokens.helpers.d.ts.map +1 -0
  28. package/dist/ai/toolLoop/helpers/persistTokens.helpers.js +25 -0
  29. package/dist/ai/toolLoop/helpers/persistTokens.helpers.js.map +1 -0
  30. package/dist/ai/toolLoop/{plannerTaskParser.d.ts → helpers/plannerTaskParser.d.ts} +1 -1
  31. package/dist/ai/toolLoop/helpers/plannerTaskParser.d.ts.map +1 -0
  32. package/dist/ai/toolLoop/helpers/plannerTaskParser.js.map +1 -0
  33. package/dist/ai/toolLoop/helpers/readFile.helpers.d.ts +10 -0
  34. package/dist/ai/toolLoop/helpers/readFile.helpers.d.ts.map +1 -0
  35. package/dist/ai/toolLoop/helpers/readFile.helpers.js +26 -0
  36. package/dist/ai/toolLoop/helpers/readFile.helpers.js.map +1 -0
  37. package/dist/ai/toolLoop/helpers/signatures.helper.d.ts +2 -0
  38. package/dist/ai/toolLoop/helpers/signatures.helper.d.ts.map +1 -0
  39. package/dist/ai/toolLoop/helpers/signatures.helper.js +23 -0
  40. package/dist/ai/toolLoop/helpers/signatures.helper.js.map +1 -0
  41. package/dist/ai/toolLoop/helpers/toolArgs.helper.d.ts +12 -0
  42. package/dist/ai/toolLoop/helpers/toolArgs.helper.d.ts.map +1 -0
  43. package/dist/ai/toolLoop/helpers/toolArgs.helper.js +40 -0
  44. package/dist/ai/toolLoop/helpers/toolArgs.helper.js.map +1 -0
  45. package/dist/ai/toolLoop/helpers/toolExecution.helper.d.ts +22 -0
  46. package/dist/ai/toolLoop/helpers/toolExecution.helper.d.ts.map +1 -0
  47. package/dist/ai/toolLoop/helpers/toolExecution.helper.js +75 -0
  48. package/dist/ai/toolLoop/helpers/toolExecution.helper.js.map +1 -0
  49. package/dist/ai/toolLoop/helpers/toolHandlers.helper.d.ts +6 -0
  50. package/dist/ai/toolLoop/helpers/toolHandlers.helper.d.ts.map +1 -0
  51. package/dist/ai/toolLoop/helpers/toolHandlers.helper.js +86 -0
  52. package/dist/ai/toolLoop/helpers/toolHandlers.helper.js.map +1 -0
  53. package/dist/ai/toolLoop/toolEventSummary.d.ts +28 -0
  54. package/dist/ai/toolLoop/toolEventSummary.d.ts.map +1 -0
  55. package/dist/ai/toolLoop/toolEventSummary.js +253 -0
  56. package/dist/ai/toolLoop/toolEventSummary.js.map +1 -0
  57. package/dist/ai/toolLoop/toolLoopContext.d.ts +0 -14
  58. package/dist/ai/toolLoop/toolLoopContext.d.ts.map +1 -1
  59. package/dist/ai/toolLoop/toolLoopContext.js +7 -50
  60. package/dist/ai/toolLoop/toolLoopContext.js.map +1 -1
  61. package/dist/ai/toolLoop/toolLoopRunner.d.ts +6 -5
  62. package/dist/ai/toolLoop/toolLoopRunner.d.ts.map +1 -1
  63. package/dist/ai/toolLoop/toolLoopRunner.js +48 -281
  64. package/dist/ai/toolLoop/toolLoopRunner.js.map +1 -1
  65. package/dist/ai/toolLoop/toolStatusMessage.d.ts +6 -0
  66. package/dist/ai/toolLoop/toolStatusMessage.d.ts.map +1 -0
  67. package/dist/ai/toolLoop/toolStatusMessage.js +140 -0
  68. package/dist/ai/toolLoop/toolStatusMessage.js.map +1 -0
  69. package/dist/ai/tools/helpers/applyPatch.helpers.d.ts.map +1 -1
  70. package/dist/ai/tools/helpers/applyPatch.helpers.js +9 -4
  71. package/dist/ai/tools/helpers/applyPatch.helpers.js.map +1 -1
  72. package/dist/ai/tools/helpers/fileSystem.helpers.d.ts.map +1 -1
  73. package/dist/ai/tools/helpers/fileSystem.helpers.js +7 -1
  74. package/dist/ai/tools/helpers/fileSystem.helpers.js.map +1 -1
  75. package/dist/ai/tools/helpers/pageConfigJson.helpers.d.ts +13 -0
  76. package/dist/ai/tools/helpers/pageConfigJson.helpers.d.ts.map +1 -1
  77. package/dist/ai/tools/helpers/pageConfigJson.helpers.js +51 -21
  78. package/dist/ai/tools/helpers/pageConfigJson.helpers.js.map +1 -1
  79. package/dist/ai/tools/implementations/applyPatch.impl.js +2 -2
  80. package/dist/ai/tools/implementations/applyPatch.impl.js.map +1 -1
  81. package/dist/ai/tools/implementations/createNewRoute.impl.js +1 -1
  82. package/dist/ai/tools/implementations/createNewRoute.impl.js.map +1 -1
  83. package/dist/ai/tools/implementations/deleteElement.impl.d.ts.map +1 -1
  84. package/dist/ai/tools/implementations/deleteElement.impl.js +5 -37
  85. package/dist/ai/tools/implementations/deleteElement.impl.js.map +1 -1
  86. package/dist/ai/tools/implementations/insertElement.impl.d.ts.map +1 -1
  87. package/dist/ai/tools/implementations/insertElement.impl.js +9 -46
  88. package/dist/ai/tools/implementations/insertElement.impl.js.map +1 -1
  89. package/dist/ai/tools/implementations/updateClassName.impl.d.ts.map +1 -1
  90. package/dist/ai/tools/implementations/updateClassName.impl.js +5 -37
  91. package/dist/ai/tools/implementations/updateClassName.impl.js.map +1 -1
  92. package/dist/ai/tools/implementations/updateGlobalStyles.impl.d.ts.map +1 -1
  93. package/dist/ai/tools/implementations/updateGlobalStyles.impl.js +4 -3
  94. package/dist/ai/tools/implementations/updateGlobalStyles.impl.js.map +1 -1
  95. package/dist/ai/tools/implementations/updateProps.impl.d.ts.map +1 -1
  96. package/dist/ai/tools/implementations/updateProps.impl.js +5 -37
  97. package/dist/ai/tools/implementations/updateProps.impl.js.map +1 -1
  98. package/dist/ai/tools/schemas/createNewRoute.schema.d.ts.map +1 -1
  99. package/dist/ai/tools/schemas/createNewRoute.schema.js +1 -1
  100. package/dist/ai/tools/schemas/createNewRoute.schema.js.map +1 -1
  101. package/dist/ai/tools/schemas/deleteElement.schema.d.ts.map +1 -1
  102. package/dist/ai/tools/schemas/deleteElement.schema.js +1 -2
  103. package/dist/ai/tools/schemas/deleteElement.schema.js.map +1 -1
  104. package/dist/ai/tools/schemas/elementProps.schema.d.ts +101 -0
  105. package/dist/ai/tools/schemas/elementProps.schema.d.ts.map +1 -0
  106. package/dist/ai/tools/schemas/elementProps.schema.js +74 -0
  107. package/dist/ai/tools/schemas/elementProps.schema.js.map +1 -0
  108. package/dist/ai/tools/schemas/insertElement.schema.d.ts.map +1 -1
  109. package/dist/ai/tools/schemas/insertElement.schema.js +2 -74
  110. package/dist/ai/tools/schemas/insertElement.schema.js.map +1 -1
  111. package/dist/ai/tools/schemas/updateClassName.schema.d.ts.map +1 -1
  112. package/dist/ai/tools/schemas/updateClassName.schema.js +1 -2
  113. package/dist/ai/tools/schemas/updateClassName.schema.js.map +1 -1
  114. package/dist/ai/tools/schemas/updateProps.schema.d.ts +9 -9
  115. package/dist/ai/tools/schemas/updateProps.schema.d.ts.map +1 -1
  116. package/dist/ai/tools/schemas/updateProps.schema.js +3 -69
  117. package/dist/ai/tools/schemas/updateProps.schema.js.map +1 -1
  118. package/dist/image/unsplash.service.d.ts.map +1 -1
  119. package/dist/image/unsplash.service.js +6 -2
  120. package/dist/image/unsplash.service.js.map +1 -1
  121. package/dist/indexer/projectInfoIndex.d.ts.map +1 -1
  122. package/dist/indexer/projectInfoIndex.js +33 -25
  123. package/dist/indexer/projectInfoIndex.js.map +1 -1
  124. package/dist/types/styleConfig.d.ts.map +1 -1
  125. package/dist/types/styleConfig.js +2 -3
  126. package/dist/types/styleConfig.js.map +1 -1
  127. package/dist/utils/utils.d.ts +3 -0
  128. package/dist/utils/utils.d.ts.map +1 -1
  129. package/dist/utils/utils.js +8 -0
  130. package/dist/utils/utils.js.map +1 -1
  131. package/dist/utils/workspace.d.ts +1 -1
  132. package/dist/utils/workspace.d.ts.map +1 -1
  133. package/dist/utils/workspace.js +6 -11
  134. package/dist/utils/workspace.js.map +1 -1
  135. package/package.json +1 -1
  136. package/dist/ai/toolLoop/plannerTaskParser.d.ts.map +0 -1
  137. package/dist/ai/toolLoop/plannerTaskParser.js.map +0 -1
  138. package/dist/ai/toolLoop/toolLoopRunnerUtils.d.ts +0 -51
  139. package/dist/ai/toolLoop/toolLoopRunnerUtils.d.ts.map +0 -1
  140. package/dist/ai/toolLoop/toolLoopRunnerUtils.js +0 -367
  141. package/dist/ai/toolLoop/toolLoopRunnerUtils.js.map +0 -1
  142. /package/dist/ai/toolLoop/{plannerTaskParser.js → helpers/plannerTaskParser.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/utils/workspace.ts"],"names":[],"mappings":"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","sourcesContent":["// infra/fs/workspace.ts\r\nimport { Dirent } from \"fs\";\r\nimport fs from \"fs/promises\";\r\nimport path from \"path\";\r\n\r\nexport async function createFolder(path: string) {\r\n await fs.mkdir(path, { recursive: true });\r\n}\r\n\r\nexport async function removeFolder(path: string) {\r\n await fs.rm(path, { recursive: true, force: true });\r\n}\r\n\r\nexport async function createFile(path: string, content: string) {\r\n try {\r\n await fs.writeFile(path, content, \"utf-8\");\r\n } catch (err) {\r\n throw err;\r\n }\r\n}\r\n\r\nexport async function removeFile(path: string) {\r\n await fs.rm(path, { force: true });\r\n}\r\n\r\nexport async function copyFile(from: string, to: string) {\r\n await fs.copyFile(from, to);\r\n}\r\n\r\nexport async function stat(path: string) {\r\n return await fs.stat(path);\r\n}\r\n\r\nexport async function readDir(path: string) {\r\n return await fs.readdir(path, { withFileTypes: true });\r\n}\r\n\r\nconst sortDirents = (a: Dirent, b: Dirent) => {\r\n const aIsDir = a.isDirectory();\r\n const bIsDir = b.isDirectory();\r\n if (aIsDir !== bIsDir) return aIsDir ? -1 : 1;\r\n return a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\r\n};\r\n\r\nexport async function safeReadDir(dir: string) {\r\n try {\r\n const entries = await fs.readdir(dir, { withFileTypes: true });\r\n return entries.sort(sortDirents);\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nexport async function readFile(path: string) {\r\n try {\r\n return await fs.readFile(path, \"utf-8\");\r\n } catch (err) {\r\n const code = (err as NodeJS.ErrnoException | null)?.code;\r\n if (code !== \"ENOENT\") {\r\n console.error(\"Error while reading file\", err, { path });\r\n }\r\n return \"\";\r\n }\r\n}\r\n\r\nexport async function readTsFiles(dir: string, results: any[] = []) {\r\n try {\r\n await fs.access(dir); // existence check\r\n } catch {\r\n return results; // directory doesn't exist → skip\r\n }\r\n\r\n const entries = await fs.readdir(dir);\r\n const ALLOWED_EXT = [\".ts\", \".tsx\"];\r\n\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry);\r\n const stat = await fs.stat(fullPath);\r\n\r\n if (stat.isDirectory()) {\r\n readTsFiles(fullPath, results);\r\n } else if (ALLOWED_EXT.includes(path.extname(entry))) {\r\n results.push({\r\n name: entry,\r\n path: fullPath,\r\n description: filterDescription(await fs.readFile(fullPath, \"utf-8\")),\r\n });\r\n }\r\n }\r\n\r\n return results;\r\n}\r\n\r\nexport const filterDescription = (content: string): string => {\r\n if (!content) return \"\";\r\n const DESC_REGEX = /DESC_START([\\s\\S]*?)DESC_END/g;\r\n const match = DESC_REGEX.exec(content);\r\n DESC_REGEX.lastIndex = 0;\r\n\r\n if (!match) return \"\";\r\n\r\n return match[1].trim();\r\n};\r\n"]}
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/utils/workspace.ts"],"names":[],"mappings":"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","sourcesContent":["// infra/fs/workspace.ts\r\nimport { Dirent } from \"node:fs\";\r\nimport fs from \"node:fs/promises\";\r\nimport path from \"node:path\";\r\n\r\nexport async function createFolder(path: string) {\r\n await fs.mkdir(path, { recursive: true });\r\n}\r\n\r\nexport async function removeFolder(path: string) {\r\n await fs.rm(path, { recursive: true, force: true });\r\n}\r\n\r\nexport async function createFile(path: string, content: string) {\r\n await fs.writeFile(path, content, \"utf-8\");\r\n}\r\n\r\nexport async function removeFile(path: string) {\r\n await fs.rm(path, { force: true });\r\n}\r\n\r\nexport async function copyFile(from: string, to: string) {\r\n await fs.copyFile(from, to);\r\n}\r\n\r\nexport async function stat(path: string) {\r\n return await fs.stat(path);\r\n}\r\n\r\nexport async function readDir(path: string) {\r\n return await fs.readdir(path, { withFileTypes: true });\r\n}\r\n\r\nconst sortDirents = (a: Dirent, b: Dirent) => {\r\n const aIsDir = a.isDirectory();\r\n const bIsDir = b.isDirectory();\r\n if (aIsDir !== bIsDir) return aIsDir ? -1 : 1;\r\n return a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\r\n};\r\n\r\nexport async function safeReadDir(dir: string) {\r\n try {\r\n const entries = await fs.readdir(dir, { withFileTypes: true });\r\n return entries.sort(sortDirents);\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nexport async function readFile(path: string) {\r\n try {\r\n return await fs.readFile(path, \"utf-8\");\r\n } catch (err) {\r\n const code = (err as NodeJS.ErrnoException | null)?.code;\r\n if (code !== \"ENOENT\") {\r\n console.error(\"Error while reading file\", err, { path });\r\n }\r\n return \"\";\r\n }\r\n}\r\n\r\nexport async function readTsFiles(dir: string, results: any[] = []) {\r\n try {\r\n await fs.access(dir); // existence check\r\n } catch {\r\n return results; // directory doesn't exist → skip\r\n }\r\n\r\n const entries = await fs.readdir(dir);\r\n const ALLOWED_EXT = new Set([\".ts\", \".tsx\"]);\r\n\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry);\r\n const stat = await fs.stat(fullPath);\r\n\r\n if (stat.isDirectory()) {\r\n await readTsFiles(fullPath, results);\r\n } else if (ALLOWED_EXT.has(path.extname(entry))) {\r\n results.push({\r\n name: entry,\r\n path: fullPath,\r\n description: filterDescription(await fs.readFile(fullPath, \"utf-8\")),\r\n });\r\n }\r\n }\r\n\r\n return results;\r\n}\r\n\r\nexport const filterDescription = (content: string): string => {\r\n if (!content) return \"\";\r\n const DESC_REGEX = /DESC_START([\\s\\S]*?)DESC_END/g;\r\n const match = DESC_REGEX.exec(content);\r\n DESC_REGEX.lastIndex = 0;\r\n\r\n if (!match) return \"\";\r\n\r\n return match[1].trim();\r\n};\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vedangiitb/qwintly-core",
3
- "version": "1.4.12",
3
+ "version": "1.4.13",
4
4
  "description": "Qwintly Core",
5
5
  "homepage": "https://github.com/vedangiitb/qwintly-core#readme",
6
6
  "bugs": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"plannerTaskParser.d.ts","sourceRoot":"","sources":["../../../src/ai/toolLoop/plannerTaskParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAEhE,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;kBAA6B,CAAC;AAQ7D,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,EAAE,CAEtE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAgBjE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"plannerTaskParser.js","sourceRoot":"","sources":["../../../src/ai/toolLoop/plannerTaskParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;AAE7D,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAC9D,OAAO,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAkB,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,8DAA8D,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACtF,CAAC;IACJ,CAAC;IAED,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC","sourcesContent":["import { z } from \"zod\";\nimport { PlannerTask } from \"../../types/plannerTasks.types.js\";\n\nexport const PlannerTaskSchema = z.object({\n description: z.string().min(1),\n targets: z.array(z.string().min(1)),\n});\n\nexport const PlannerTasksSchema = z.array(PlannerTaskSchema);\n\nfunction stripCodeFences(input: string) {\n const trimmed = (input ?? \"\").trim();\n const withoutStart = trimmed.replace(/^```(?:json)?\\s*/i, \"\");\n return withoutStart.replace(/```$/i, \"\").trim();\n}\n\nexport function parsePlannerTasksUnknown(value: unknown): PlannerTask[] {\n return PlannerTasksSchema.parse(value) as PlannerTask[];\n}\n\nexport function parsePlannerTasksJson(text: string): PlannerTask[] {\n const cleaned = stripCodeFences(text);\n if (!cleaned) {\n throw new Error(\"Planner tasks parse failed: empty response text.\");\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(cleaned);\n } catch (err) {\n throw new Error(\n `Planner tasks parse failed: invalid JSON. First 200 chars: ${cleaned.slice(0, 200)}`,\n );\n }\n\n return parsePlannerTasksUnknown(parsed);\n}\n"]}
@@ -1,51 +0,0 @@
1
- import { FunctionCallingConfigMode, Tool } from "@google/genai";
2
- import { ToolEvent } from "./toolLoopContext.js";
3
- import { AiCallFn, Logger } from "./toolLoopRunner.js";
4
- export declare const sleep: (ms: number) => Promise<void>;
5
- export declare const serializeError: (err: unknown) => {
6
- name: string;
7
- message: string;
8
- stack: string | undefined;
9
- cause: unknown;
10
- value?: undefined;
11
- } | {
12
- name: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
13
- message: string;
14
- value: unknown;
15
- stack?: undefined;
16
- cause?: undefined;
17
- };
18
- export declare const isTransientAiCallError: (err: unknown) => boolean;
19
- export declare const computeBackoffMs: (attempt: number, baseMs: number, maxMs: number) => number;
20
- export declare const aiCallWithRetry: (params: {
21
- aiCall: AiCallFn;
22
- request: unknown;
23
- options: {
24
- tools?: Tool[];
25
- toolCallingMode?: FunctionCallingConfigMode;
26
- };
27
- retryMax: number;
28
- retryBaseMs: number;
29
- retryMaxMs: number;
30
- step: number;
31
- logger: Logger;
32
- }) => Promise<import("./toolLoopRunner.js").AiCallResponse>;
33
- export declare const buildToolStatusMessage: (name: string, effectiveArgs: Record<string, unknown>, readFileMeta: {
34
- start: number;
35
- end: number;
36
- wasCapped: boolean;
37
- } | null) => string;
38
- export declare const recordToolEvent: (params: {
39
- toolEvents: ToolEvent[];
40
- name: string;
41
- effectiveArgs: Record<string, unknown>;
42
- modelArgs: Record<string, unknown>;
43
- readFileMeta: {
44
- start: number;
45
- end: number;
46
- wasCapped: boolean;
47
- } | null;
48
- toolResult: unknown;
49
- toolResultRaw: unknown;
50
- }) => void;
51
- //# sourceMappingURL=toolLoopRunnerUtils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolLoopRunnerUtils.d.ts","sourceRoot":"","sources":["../../../src/ai/toolLoop/toolLoopRunnerUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAA0B,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGvD,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,kBACsC,CAAC;AAEvE,eAAO,MAAM,cAAc,GAAI,KAAK,OAAO;;;;;;;;;;;;CAuB1C,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,KAAK,OAAO,YA2BlD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,EACf,QAAQ,MAAM,EACd,OAAO,MAAM,WAMd,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,QAAQ;IAC5C,MAAM,EAAE,QAAQ,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;QAAC,eAAe,CAAC,EAAE,yBAAyB,CAAA;KAAE,CAAC;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,0DA2BA,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,EACZ,eAAe,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,cAAc;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,KACtE,MAiGF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ;IACtC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CACxB,SAsPA,CAAC"}
@@ -1,367 +0,0 @@
1
- import { EVENT_TYPES } from "../../types/events.js";
2
- import { getApplyPatchEventMeta } from "./toolLoopContext.js";
3
- import { STYLE_TOKEN_KEYS } from "../../types/styleConfig.js";
4
- export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
5
- export const serializeError = (err) => {
6
- if (err instanceof Error) {
7
- const cause = err.cause;
8
- return {
9
- name: err.name,
10
- message: err.message,
11
- stack: err.stack,
12
- cause: cause instanceof Error
13
- ? {
14
- name: cause.name,
15
- message: cause.message,
16
- stack: cause.stack,
17
- }
18
- : cause,
19
- };
20
- }
21
- return {
22
- name: typeof err,
23
- message: typeof err === "string" ? err : "Non-Error thrown",
24
- value: err,
25
- };
26
- };
27
- export const isTransientAiCallError = (err) => {
28
- let cur = err;
29
- for (let depth = 0; depth < 4 && cur; depth++) {
30
- const code = cur?.error?.code ?? cur?.code ?? cur?.statusCode ?? cur?.response?.status;
31
- const status = cur?.error?.status ?? cur?.status ?? cur?.response?.data?.error?.status;
32
- const message = cur?.error?.message ?? cur?.message ?? cur?.response?.data?.error?.message;
33
- const msg = typeof message === "string" ? message.toLowerCase() : "";
34
- const stat = typeof status === "string" ? status.toUpperCase() : "";
35
- if (code === 503)
36
- return true;
37
- if (code === 429)
38
- return true;
39
- if (stat === "UNAVAILABLE")
40
- return true;
41
- if (stat === "RESOURCE_EXHAUSTED")
42
- return true;
43
- if (msg.includes("high demand"))
44
- return true;
45
- if (msg.includes("try again later"))
46
- return true;
47
- if (msg.includes("temporar"))
48
- return true;
49
- cur = cur?.cause;
50
- }
51
- return false;
52
- };
53
- export const computeBackoffMs = (attempt, baseMs, maxMs) => {
54
- const exp = baseMs * Math.pow(2, Math.max(0, attempt - 1));
55
- const capped = Math.min(maxMs, exp);
56
- const jitter = capped * (0.2 * Math.random());
57
- return Math.round(capped + jitter);
58
- };
59
- export const aiCallWithRetry = async (params) => {
60
- const { aiCall, request, options, retryMax, retryBaseMs, retryMaxMs, logger, } = params;
61
- let retryCount = 0;
62
- while (true) {
63
- try {
64
- return await aiCall(request, options);
65
- }
66
- catch (err) {
67
- const transient = isTransientAiCallError(err);
68
- if (!transient || retryMax <= 0 || retryCount >= retryMax) {
69
- throw err;
70
- }
71
- retryCount += 1;
72
- const delayMs = computeBackoffMs(retryCount, retryBaseMs, retryMaxMs);
73
- logger("Tool loop: aiCall failed; retrying", EVENT_TYPES.STEP_RETRY);
74
- await sleep(delayMs);
75
- }
76
- }
77
- };
78
- export const buildToolStatusMessage = (name, effectiveArgs, readFileMeta) => {
79
- if (name === "read_file") {
80
- const path = typeof effectiveArgs.path === "string" ? effectiveArgs.path : "";
81
- if (readFileMeta) {
82
- return `AI tool: Reading file "${path}" (lines ${readFileMeta.start}-${readFileMeta.end}${readFileMeta.wasCapped ? ", capped" : ""})`;
83
- }
84
- const start = effectiveArgs.start_line !== undefined ? Number(effectiveArgs.start_line) : 1;
85
- const end = effectiveArgs.end_line !== undefined ? Number(effectiveArgs.end_line) : undefined;
86
- const lines = end !== undefined ? `lines ${start}-${end}` : `starting at line ${start}`;
87
- return `AI tool: Reading file "${path}" (${lines})`;
88
- }
89
- if (name === "write_file") {
90
- const path = typeof effectiveArgs.path === "string" ? effectiveArgs.path : "";
91
- return `AI tool: Writing file "${path}"`;
92
- }
93
- if (name === "apply_patch") {
94
- const meta = getApplyPatchEventMeta(effectiveArgs);
95
- const files = Array.isArray(meta.files) ? meta.files : [];
96
- if (files.length === 0) {
97
- return "AI tool: Applying patch";
98
- }
99
- if (files.length <= 3) {
100
- return `AI tool: Applying changes to "${files.join(", ")}"`;
101
- }
102
- return `AI tool: Applying changes to ${files.length} files: "${files.slice(0, 3).join(", ")}" (+${files.length - 3} more)`;
103
- }
104
- if (name === "search") {
105
- const query = typeof effectiveArgs.search_query === "string" ? effectiveArgs.search_query : "";
106
- return query ? `AI tool: Searching workspace for "${query}"` : "AI tool: Searching workspace";
107
- }
108
- if (name === "list_dir") {
109
- const path = typeof effectiveArgs.path === "string" ? effectiveArgs.path : "";
110
- const depth = effectiveArgs.depth !== undefined ? Number(effectiveArgs.depth) : 1;
111
- return `AI tool: Listing contents of directory "${path}" (depth: ${depth})`;
112
- }
113
- if (name === "update_global_styles") {
114
- const keys = Object.keys(effectiveArgs);
115
- return keys.length > 0
116
- ? `AI tool: Updating global styles (${keys.join(", ")})`
117
- : "AI tool: Updating global styles";
118
- }
119
- if (name === "create_new_route") {
120
- const route = typeof effectiveArgs.route_name === "string" ? effectiveArgs.route_name : "";
121
- const parent = typeof effectiveArgs.parent_route === "string" ? effectiveArgs.parent_route : "/";
122
- return `AI tool: Creating new route "${route}" (parent: "${parent}")`;
123
- }
124
- if (name === "delete_element") {
125
- const route = typeof effectiveArgs.route === "string" ? effectiveArgs.route : "";
126
- const id = typeof effectiveArgs.element_id === "string" ? effectiveArgs.element_id : "";
127
- return `AI tool: Deleting element "${id}" from route "${route}"`;
128
- }
129
- if (name === "insert_element") {
130
- const route = typeof effectiveArgs.route === "string" ? effectiveArgs.route : "";
131
- const parent = typeof effectiveArgs.parent_id === "string" ? effectiveArgs.parent_id : "";
132
- const before = typeof effectiveArgs.before_id === "string" ? effectiveArgs.before_id : "";
133
- const beforeStr = before ? `, before "${before}"` : "";
134
- return `AI tool: Inserting element into route "${route}" (under parent "${parent}"${beforeStr})`;
135
- }
136
- if (name === "update_props") {
137
- const route = typeof effectiveArgs.route === "string" ? effectiveArgs.route : "";
138
- const id = typeof effectiveArgs.element_id === "string" ? effectiveArgs.element_id : "";
139
- return `AI tool: Updating properties for element "${id}" on route "${route}"`;
140
- }
141
- if (name === "update_classname") {
142
- const route = typeof effectiveArgs.route === "string" ? effectiveArgs.route : "";
143
- const id = typeof effectiveArgs.element_id === "string" ? effectiveArgs.element_id : "";
144
- const className = typeof effectiveArgs.class_name === "string" ? effectiveArgs.class_name : "";
145
- const classNameStr = className ? ` to "${className}"` : "";
146
- return `AI tool: Updating class name for element "${id}" on route "${route}"${classNameStr}`;
147
- }
148
- if (name === "get_available_routes") {
149
- return "AI tool: Retrieving available routes";
150
- }
151
- if (name === "submit_planner_tasks") {
152
- return "AI tool: Submitting planner tasks";
153
- }
154
- if (name === "submit_codegen_done") {
155
- const summary = typeof effectiveArgs.summary === "string" ? effectiveArgs.summary : "";
156
- return summary ? `AI tool: Submitting completed work: "${summary}"` : "AI tool: Submitting completed work";
157
- }
158
- return `AI tool: ${name}`;
159
- };
160
- export const recordToolEvent = (params) => {
161
- const oneLine = (value, maxLen = 140) => {
162
- const raw = typeof value === "string"
163
- ? value
164
- : value === undefined
165
- ? ""
166
- : value === null
167
- ? "null"
168
- : JSON.stringify(value);
169
- const collapsed = raw.replace(/\s+/g, " ").trim();
170
- if (collapsed.length <= maxLen)
171
- return collapsed;
172
- return `${collapsed.slice(0, Math.max(0, maxLen - 1))}…`;
173
- };
174
- const getStringArg = (key) => oneLine(params.effectiveArgs[key] ?? "");
175
- const { toolEvents, name, effectiveArgs, modelArgs, readFileMeta, toolResult, toolResultRaw, } = params;
176
- try {
177
- if (name === "read_file") {
178
- const path = String(effectiveArgs.path ?? "");
179
- const start = readFileMeta?.start ?? Number(effectiveArgs.start_line ?? 1);
180
- const end = readFileMeta?.end ?? Number(effectiveArgs.end_line ?? start);
181
- toolEvents.push({
182
- name,
183
- summary: `read_file ${path}:${start}-${end}${readFileMeta?.wasCapped ? " (capped)" : ""}`,
184
- });
185
- return;
186
- }
187
- if (name === "apply_patch") {
188
- const meta = typeof modelArgs.patch_string === "object"
189
- ? modelArgs.patch_string
190
- : null;
191
- const fallback = getApplyPatchEventMeta(effectiveArgs);
192
- const ok = toolResult?.success === true
193
- ? "success"
194
- : toolResult?.success === false
195
- ? "failure"
196
- : "done";
197
- toolEvents.push({
198
- name,
199
- summary: `apply_patch files=${JSON.stringify(meta?.files ?? fallback.files)} sha256=${String(meta?.sha256 ?? fallback.sha256).slice(0, 12)} chars=${meta?.chars ?? fallback.chars} result=${ok}`,
200
- });
201
- return;
202
- }
203
- if (name === "create_new_route") {
204
- const parentRoute = getStringArg("parent_route") || "/";
205
- const routeName = getStringArg("route_name");
206
- const successVal = toolResult?.success;
207
- if (typeof successVal === "boolean") {
208
- const route = oneLine(toolResult?.route ?? "");
209
- const createdFiles = Array.isArray(toolResult?.created_files)
210
- ? toolResult.created_files
211
- : [];
212
- const filesText = successVal === true
213
- ? ` created_files=${createdFiles.length}`
214
- : "";
215
- const routeText = route ? ` route=${route}` : "";
216
- const errText = successVal === false
217
- ? ` error=${oneLine(toolResult?.error ?? "unknown", 160)}`
218
- : "";
219
- toolEvents.push({
220
- name,
221
- summary: `create_new_route ${successVal ? "success" : "failure"} parent_route=${parentRoute} route_name=${routeName}${routeText}${filesText}${errText}`,
222
- });
223
- return;
224
- }
225
- }
226
- if (name === "insert_element") {
227
- const route = getStringArg("route");
228
- const parentId = getStringArg("parent_id");
229
- const beforeId = getStringArg("before_id");
230
- const successVal = toolResult?.success;
231
- if (typeof successVal === "boolean") {
232
- const insertedId = oneLine(toolResult?.inserted_id ?? "");
233
- const changedVal = toolResult?.changed;
234
- const changedText = typeof changedVal === "boolean" ? ` changed=${changedVal}` : "";
235
- const beforeText = beforeId ? ` before_id=${beforeId}` : "";
236
- const insertedText = insertedId ? ` inserted_id=${insertedId}` : "";
237
- const errText = successVal === false
238
- ? ` error=${oneLine(toolResult?.error ?? "unknown", 160)}`
239
- : "";
240
- toolEvents.push({
241
- name,
242
- summary: `insert_element ${successVal ? "success" : "failure"} route=${route} parent_id=${parentId}${beforeText}${insertedText}${changedText}${errText}`,
243
- });
244
- return;
245
- }
246
- }
247
- if (name === "update_classname") {
248
- const route = getStringArg("route");
249
- const elementId = getStringArg("element_id");
250
- const className = oneLine(effectiveArgs.className ?? "", 160);
251
- const successVal = toolResult?.success;
252
- if (typeof successVal === "boolean") {
253
- const changedVal = toolResult?.changed;
254
- const changedText = typeof changedVal === "boolean" ? ` changed=${changedVal}` : "";
255
- const updatedId = oneLine(toolResult?.updated_id ?? "");
256
- const updatedText = updatedId ? ` updated_id=${updatedId}` : "";
257
- const errText = successVal === false
258
- ? ` error=${oneLine(toolResult?.error ?? "unknown", 160)}`
259
- : "";
260
- toolEvents.push({
261
- name,
262
- summary: `update_classname ${successVal ? "success" : "failure"} route=${route} element_id=${elementId} className="${className}"${updatedText}${changedText}${errText}`,
263
- });
264
- return;
265
- }
266
- }
267
- if (name === "update_props") {
268
- const route = getStringArg("route");
269
- const elementId = getStringArg("element_id");
270
- const successVal = toolResult?.success;
271
- if (typeof successVal === "boolean") {
272
- const changedVal = toolResult?.changed;
273
- const changedText = typeof changedVal === "boolean" ? ` changed=${changedVal}` : "";
274
- const updatedId = oneLine(toolResult?.updated_id ?? "");
275
- const updatedText = updatedId ? ` updated_id=${updatedId}` : "";
276
- const patchKeys = Object.keys(effectiveArgs ?? {}).filter((k) => {
277
- if (k === "route" || k === "element_id")
278
- return false;
279
- const v = effectiveArgs[k];
280
- return v !== undefined && v !== null;
281
- });
282
- const keysText = patchKeys.length > 0
283
- ? ` keys=${oneLine(patchKeys.sort().join(","), 140)}`
284
- : "";
285
- const errText = successVal === false
286
- ? ` error=${oneLine(toolResult?.error ?? "unknown", 160)}`
287
- : "";
288
- toolEvents.push({
289
- name,
290
- summary: `update_props ${successVal ? "success" : "failure"} route=${route} element_id=${elementId}${keysText}${updatedText}${changedText}${errText}`,
291
- });
292
- return;
293
- }
294
- }
295
- if (name === "update_global_styles") {
296
- const tokenKeySet = new Set(STYLE_TOKEN_KEYS);
297
- const tokenKeys = Object.keys(effectiveArgs ?? {}).filter((k) => tokenKeySet.has(k));
298
- const successVal = toolResult?.success;
299
- if (typeof successVal === "boolean") {
300
- const changedVal = toolResult?.changed;
301
- const changedText = typeof changedVal === "boolean" ? ` changed=${changedVal}` : "";
302
- const version = toolResult?.version;
303
- const versionText = typeof version === "number" && Number.isFinite(version)
304
- ? ` version=${version}`
305
- : "";
306
- const created = toolResult?.created;
307
- const createdText = typeof created === "boolean" ? ` created=${created}` : "";
308
- const keysText = tokenKeys.length > 0
309
- ? ` tokens=${oneLine(tokenKeys.sort().join(","), 160)}`
310
- : "";
311
- const errText = successVal === false
312
- ? ` error=${oneLine(toolResult?.error ?? "unknown", 160)}`
313
- : "";
314
- toolEvents.push({
315
- name,
316
- summary: `update_global_styles ${successVal ? "success" : "failure"}${keysText}${versionText}${createdText}${changedText}${errText}`,
317
- });
318
- return;
319
- }
320
- }
321
- if (name === "search") {
322
- const q = String(effectiveArgs.search_query ?? "").trim();
323
- const results = Array.isArray(toolResultRaw?.results)
324
- ? toolResultRaw.results
325
- : [];
326
- toolEvents.push({
327
- name,
328
- summary: `search "${q}" -> ${results.length} results`,
329
- });
330
- return;
331
- }
332
- if (name === "list_dir") {
333
- const p = String(effectiveArgs.path ?? "");
334
- const d = Number(effectiveArgs.depth ?? 1);
335
- toolEvents.push({ name, summary: `list_dir ${p} depth=${d}` });
336
- return;
337
- }
338
- if (name === "create_file") {
339
- const p = String(effectiveArgs.path ?? "");
340
- toolEvents.push({ name, summary: `create_file ${p}` });
341
- return;
342
- }
343
- if (name === "delete_file") {
344
- const p = String(effectiveArgs.path ?? "");
345
- toolEvents.push({ name, summary: `delete_file ${p}` });
346
- return;
347
- }
348
- const successVal = toolResult?.success;
349
- if (typeof successVal === "boolean") {
350
- const changedVal = toolResult?.changed;
351
- const changedText = typeof changedVal === "boolean" ? ` changed=${changedVal}` : "";
352
- const errText = successVal === false
353
- ? ` error=${oneLine(toolResult?.error ?? "unknown", 160)}`
354
- : "";
355
- toolEvents.push({
356
- name,
357
- summary: `${name} ${successVal ? "success" : "failure"}${changedText}${errText}`,
358
- });
359
- return;
360
- }
361
- toolEvents.push({ name, summary: `${name} called` });
362
- }
363
- catch {
364
- toolEvents.push({ name, summary: `${name} called` });
365
- }
366
- };
367
- //# sourceMappingURL=toolLoopRunnerUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolLoopRunnerUtils.js","sourceRoot":"","sources":["../../../src/ai/toolLoop/toolLoopRunnerUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { FunctionCallingConfigMode, Tool } from \"@google/genai\";\nimport { EVENT_TYPES } from \"../../types/events.js\";\nimport { getApplyPatchEventMeta, ToolEvent } from \"./toolLoopContext.js\";\nimport { AiCallFn, Logger } from \"./toolLoopRunner.js\";\nimport { STYLE_TOKEN_KEYS } from \"../../types/styleConfig.js\";\n\nexport const sleep = (ms: number) =>\n new Promise<void>((resolve) => setTimeout(resolve, Math.max(0, ms)));\n\nexport const serializeError = (err: unknown) => {\n if (err instanceof Error) {\n const cause = (err as any).cause as unknown;\n return {\n name: err.name,\n message: err.message,\n stack: err.stack,\n cause:\n cause instanceof Error\n ? {\n name: cause.name,\n message: cause.message,\n stack: cause.stack,\n }\n : cause,\n };\n }\n\n return {\n name: typeof err,\n message: typeof err === \"string\" ? err : \"Non-Error thrown\",\n value: err,\n };\n};\n\nexport const isTransientAiCallError = (err: unknown) => {\n let cur: any = err as any;\n for (let depth = 0; depth < 4 && cur; depth++) {\n const code =\n cur?.error?.code ?? cur?.code ?? cur?.statusCode ?? cur?.response?.status;\n\n const status =\n cur?.error?.status ?? cur?.status ?? cur?.response?.data?.error?.status;\n\n const message =\n cur?.error?.message ?? cur?.message ?? cur?.response?.data?.error?.message;\n\n const msg = typeof message === \"string\" ? message.toLowerCase() : \"\";\n const stat = typeof status === \"string\" ? status.toUpperCase() : \"\";\n\n if (code === 503) return true;\n if (code === 429) return true;\n if (stat === \"UNAVAILABLE\") return true;\n if (stat === \"RESOURCE_EXHAUSTED\") return true;\n if (msg.includes(\"high demand\")) return true;\n if (msg.includes(\"try again later\")) return true;\n if (msg.includes(\"temporar\")) return true;\n\n cur = cur?.cause;\n }\n\n return false;\n};\n\nexport const computeBackoffMs = (\n attempt: number,\n baseMs: number,\n maxMs: number,\n) => {\n const exp = baseMs * Math.pow(2, Math.max(0, attempt - 1));\n const capped = Math.min(maxMs, exp);\n const jitter = capped * (0.2 * Math.random());\n return Math.round(capped + jitter);\n};\n\nexport const aiCallWithRetry = async (params: {\n aiCall: AiCallFn;\n request: unknown;\n options: { tools?: Tool[]; toolCallingMode?: FunctionCallingConfigMode };\n retryMax: number;\n retryBaseMs: number;\n retryMaxMs: number;\n step: number;\n logger: Logger;\n}) => {\n const {\n aiCall,\n request,\n options,\n retryMax,\n retryBaseMs,\n retryMaxMs,\n logger,\n } = params;\n\n let retryCount = 0;\n while (true) {\n try {\n return await aiCall(request, options);\n } catch (err) {\n const transient = isTransientAiCallError(err);\n if (!transient || retryMax <= 0 || retryCount >= retryMax) {\n throw err;\n }\n\n retryCount += 1;\n const delayMs = computeBackoffMs(retryCount, retryBaseMs, retryMaxMs);\n logger(\"Tool loop: aiCall failed; retrying\", EVENT_TYPES.STEP_RETRY);\n await sleep(delayMs);\n }\n }\n};\n\nexport const buildToolStatusMessage = (\n name: string,\n effectiveArgs: Record<string, unknown>,\n readFileMeta: { start: number; end: number; wasCapped: boolean } | null,\n): string => {\n if (name === \"read_file\") {\n const path = typeof effectiveArgs.path === \"string\" ? effectiveArgs.path : \"\";\n if (readFileMeta) {\n return `AI tool: Reading file \"${path}\" (lines ${readFileMeta.start}-${readFileMeta.end}${\n readFileMeta.wasCapped ? \", capped\" : \"\"\n })`;\n }\n const start = effectiveArgs.start_line !== undefined ? Number(effectiveArgs.start_line) : 1;\n const end = effectiveArgs.end_line !== undefined ? Number(effectiveArgs.end_line) : undefined;\n const lines = end !== undefined ? `lines ${start}-${end}` : `starting at line ${start}`;\n return `AI tool: Reading file \"${path}\" (${lines})`;\n }\n\n if (name === \"write_file\") {\n const path = typeof effectiveArgs.path === \"string\" ? effectiveArgs.path : \"\";\n return `AI tool: Writing file \"${path}\"`;\n }\n\n if (name === \"apply_patch\") {\n const meta = getApplyPatchEventMeta(effectiveArgs);\n const files = Array.isArray(meta.files) ? meta.files : [];\n if (files.length === 0) {\n return \"AI tool: Applying patch\";\n }\n if (files.length <= 3) {\n return `AI tool: Applying changes to \"${files.join(\", \")}\"`;\n }\n return `AI tool: Applying changes to ${files.length} files: \"${files.slice(0, 3).join(\", \")}\" (+${files.length - 3} more)`;\n }\n\n if (name === \"search\") {\n const query = typeof effectiveArgs.search_query === \"string\" ? effectiveArgs.search_query : \"\";\n return query ? `AI tool: Searching workspace for \"${query}\"` : \"AI tool: Searching workspace\";\n }\n\n if (name === \"list_dir\") {\n const path = typeof effectiveArgs.path === \"string\" ? effectiveArgs.path : \"\";\n const depth = effectiveArgs.depth !== undefined ? Number(effectiveArgs.depth) : 1;\n return `AI tool: Listing contents of directory \"${path}\" (depth: ${depth})`;\n }\n\n if (name === \"update_global_styles\") {\n const keys = Object.keys(effectiveArgs);\n return keys.length > 0\n ? `AI tool: Updating global styles (${keys.join(\", \")})`\n : \"AI tool: Updating global styles\";\n }\n\n if (name === \"create_new_route\") {\n const route = typeof effectiveArgs.route_name === \"string\" ? effectiveArgs.route_name : \"\";\n const parent = typeof effectiveArgs.parent_route === \"string\" ? effectiveArgs.parent_route : \"/\";\n return `AI tool: Creating new route \"${route}\" (parent: \"${parent}\")`;\n }\n\n if (name === \"delete_element\") {\n const route = typeof effectiveArgs.route === \"string\" ? effectiveArgs.route : \"\";\n const id = typeof effectiveArgs.element_id === \"string\" ? effectiveArgs.element_id : \"\";\n return `AI tool: Deleting element \"${id}\" from route \"${route}\"`;\n }\n\n if (name === \"insert_element\") {\n const route = typeof effectiveArgs.route === \"string\" ? effectiveArgs.route : \"\";\n const parent = typeof effectiveArgs.parent_id === \"string\" ? effectiveArgs.parent_id : \"\";\n const before = typeof effectiveArgs.before_id === \"string\" ? effectiveArgs.before_id : \"\";\n const beforeStr = before ? `, before \"${before}\"` : \"\";\n return `AI tool: Inserting element into route \"${route}\" (under parent \"${parent}\"${beforeStr})`;\n }\n\n if (name === \"update_props\") {\n const route = typeof effectiveArgs.route === \"string\" ? effectiveArgs.route : \"\";\n const id = typeof effectiveArgs.element_id === \"string\" ? effectiveArgs.element_id : \"\";\n return `AI tool: Updating properties for element \"${id}\" on route \"${route}\"`;\n }\n\n if (name === \"update_classname\") {\n const route = typeof effectiveArgs.route === \"string\" ? effectiveArgs.route : \"\";\n const id = typeof effectiveArgs.element_id === \"string\" ? effectiveArgs.element_id : \"\";\n const className = typeof effectiveArgs.class_name === \"string\" ? effectiveArgs.class_name : \"\";\n const classNameStr = className ? ` to \"${className}\"` : \"\";\n return `AI tool: Updating class name for element \"${id}\" on route \"${route}\"${classNameStr}`;\n }\n\n if (name === \"get_available_routes\") {\n return \"AI tool: Retrieving available routes\";\n }\n\n if (name === \"submit_planner_tasks\") {\n return \"AI tool: Submitting planner tasks\";\n }\n\n if (name === \"submit_codegen_done\") {\n const summary = typeof effectiveArgs.summary === \"string\" ? effectiveArgs.summary : \"\";\n return summary ? `AI tool: Submitting completed work: \"${summary}\"` : \"AI tool: Submitting completed work\";\n }\n\n return `AI tool: ${name}`;\n};\n\nexport const recordToolEvent = (params: {\n toolEvents: ToolEvent[];\n name: string;\n effectiveArgs: Record<string, unknown>;\n modelArgs: Record<string, unknown>;\n readFileMeta: { start: number; end: number; wasCapped: boolean } | null;\n toolResult: unknown;\n toolResultRaw: unknown;\n}) => {\n const oneLine = (value: unknown, maxLen = 140) => {\n const raw =\n typeof value === \"string\"\n ? value\n : value === undefined\n ? \"\"\n : value === null\n ? \"null\"\n : JSON.stringify(value);\n const collapsed = raw.replace(/\\s+/g, \" \").trim();\n if (collapsed.length <= maxLen) return collapsed;\n return `${collapsed.slice(0, Math.max(0, maxLen - 1))}…`;\n };\n\n const getStringArg = (key: string) => oneLine(params.effectiveArgs[key] ?? \"\");\n\n const {\n toolEvents,\n name,\n effectiveArgs,\n modelArgs,\n readFileMeta,\n toolResult,\n toolResultRaw,\n } = params;\n\n try {\n if (name === \"read_file\") {\n const path = String(effectiveArgs.path ?? \"\");\n const start =\n readFileMeta?.start ?? Number(effectiveArgs.start_line ?? 1);\n const end = readFileMeta?.end ?? Number(effectiveArgs.end_line ?? start);\n toolEvents.push({\n name,\n summary: `read_file ${path}:${start}-${end}${readFileMeta?.wasCapped ? \" (capped)\" : \"\"}`,\n });\n return;\n }\n\n if (name === \"apply_patch\") {\n const meta =\n typeof (modelArgs as any).patch_string === \"object\"\n ? ((modelArgs as any).patch_string as any)\n : null;\n const fallback = getApplyPatchEventMeta(effectiveArgs);\n const ok =\n (toolResult as any)?.success === true\n ? \"success\"\n : (toolResult as any)?.success === false\n ? \"failure\"\n : \"done\";\n toolEvents.push({\n name,\n summary: `apply_patch files=${JSON.stringify(meta?.files ?? fallback.files)} sha256=${String(meta?.sha256 ?? fallback.sha256).slice(0, 12)} chars=${meta?.chars ?? fallback.chars} result=${ok}`,\n });\n return;\n }\n\n if (name === \"create_new_route\") {\n const parentRoute = getStringArg(\"parent_route\") || \"/\";\n const routeName = getStringArg(\"route_name\");\n const successVal = (toolResult as any)?.success;\n if (typeof successVal === \"boolean\") {\n const route = oneLine((toolResult as any)?.route ?? \"\");\n const createdFiles = Array.isArray((toolResult as any)?.created_files)\n ? ((toolResult as any).created_files as unknown[])\n : [];\n const filesText =\n successVal === true\n ? ` created_files=${createdFiles.length}`\n : \"\";\n const routeText = route ? ` route=${route}` : \"\";\n const errText =\n successVal === false\n ? ` error=${oneLine((toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n toolEvents.push({\n name,\n summary: `create_new_route ${successVal ? \"success\" : \"failure\"} parent_route=${parentRoute} route_name=${routeName}${routeText}${filesText}${errText}`,\n });\n return;\n }\n }\n\n if (name === \"insert_element\") {\n const route = getStringArg(\"route\");\n const parentId = getStringArg(\"parent_id\");\n const beforeId = getStringArg(\"before_id\");\n const successVal = (toolResult as any)?.success;\n if (typeof successVal === \"boolean\") {\n const insertedId = oneLine((toolResult as any)?.inserted_id ?? \"\");\n const changedVal = (toolResult as any)?.changed;\n const changedText =\n typeof changedVal === \"boolean\" ? ` changed=${changedVal}` : \"\";\n const beforeText = beforeId ? ` before_id=${beforeId}` : \"\";\n const insertedText = insertedId ? ` inserted_id=${insertedId}` : \"\";\n const errText =\n successVal === false\n ? ` error=${oneLine((toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n toolEvents.push({\n name,\n summary: `insert_element ${successVal ? \"success\" : \"failure\"} route=${route} parent_id=${parentId}${beforeText}${insertedText}${changedText}${errText}`,\n });\n return;\n }\n }\n\n if (name === \"update_classname\") {\n const route = getStringArg(\"route\");\n const elementId = getStringArg(\"element_id\");\n const className = oneLine(effectiveArgs.className ?? \"\", 160);\n const successVal = (toolResult as any)?.success;\n if (typeof successVal === \"boolean\") {\n const changedVal = (toolResult as any)?.changed;\n const changedText =\n typeof changedVal === \"boolean\" ? ` changed=${changedVal}` : \"\";\n const updatedId = oneLine((toolResult as any)?.updated_id ?? \"\");\n const updatedText = updatedId ? ` updated_id=${updatedId}` : \"\";\n const errText =\n successVal === false\n ? ` error=${oneLine((toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n toolEvents.push({\n name,\n summary: `update_classname ${successVal ? \"success\" : \"failure\"} route=${route} element_id=${elementId} className=\"${className}\"${updatedText}${changedText}${errText}`,\n });\n return;\n }\n }\n\n if (name === \"update_props\") {\n const route = getStringArg(\"route\");\n const elementId = getStringArg(\"element_id\");\n const successVal = (toolResult as any)?.success;\n if (typeof successVal === \"boolean\") {\n const changedVal = (toolResult as any)?.changed;\n const changedText =\n typeof changedVal === \"boolean\" ? ` changed=${changedVal}` : \"\";\n const updatedId = oneLine((toolResult as any)?.updated_id ?? \"\");\n const updatedText = updatedId ? ` updated_id=${updatedId}` : \"\";\n const patchKeys = Object.keys(effectiveArgs ?? {}).filter((k) => {\n if (k === \"route\" || k === \"element_id\") return false;\n const v = (effectiveArgs as any)[k];\n return v !== undefined && v !== null;\n });\n const keysText =\n patchKeys.length > 0\n ? ` keys=${oneLine(patchKeys.sort().join(\",\"), 140)}`\n : \"\";\n const errText =\n successVal === false\n ? ` error=${oneLine((toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n toolEvents.push({\n name,\n summary: `update_props ${successVal ? \"success\" : \"failure\"} route=${route} element_id=${elementId}${keysText}${updatedText}${changedText}${errText}`,\n });\n return;\n }\n }\n\n if (name === \"update_global_styles\") {\n const tokenKeySet = new Set<string>(STYLE_TOKEN_KEYS as unknown as string[]);\n const tokenKeys =\n Object.keys(effectiveArgs ?? {}).filter((k) => tokenKeySet.has(k));\n const successVal = (toolResult as any)?.success;\n if (typeof successVal === \"boolean\") {\n const changedVal = (toolResult as any)?.changed;\n const changedText =\n typeof changedVal === \"boolean\" ? ` changed=${changedVal}` : \"\";\n const version = (toolResult as any)?.version;\n const versionText =\n typeof version === \"number\" && Number.isFinite(version)\n ? ` version=${version}`\n : \"\";\n const created = (toolResult as any)?.created;\n const createdText =\n typeof created === \"boolean\" ? ` created=${created}` : \"\";\n const keysText =\n tokenKeys.length > 0\n ? ` tokens=${oneLine(tokenKeys.sort().join(\",\"), 160)}`\n : \"\";\n const errText =\n successVal === false\n ? ` error=${oneLine((toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n toolEvents.push({\n name,\n summary: `update_global_styles ${successVal ? \"success\" : \"failure\"}${keysText}${versionText}${createdText}${changedText}${errText}`,\n });\n return;\n }\n }\n\n if (name === \"search\") {\n const q = String(effectiveArgs.search_query ?? \"\").trim();\n const results = Array.isArray((toolResultRaw as any)?.results)\n ? (toolResultRaw as any).results\n : [];\n toolEvents.push({\n name,\n summary: `search \"${q}\" -> ${results.length} results`,\n });\n return;\n }\n\n if (name === \"list_dir\") {\n const p = String(effectiveArgs.path ?? \"\");\n const d = Number(effectiveArgs.depth ?? 1);\n toolEvents.push({ name, summary: `list_dir ${p} depth=${d}` });\n return;\n }\n\n if (name === \"create_file\") {\n const p = String(effectiveArgs.path ?? \"\");\n toolEvents.push({ name, summary: `create_file ${p}` });\n return;\n }\n\n if (name === \"delete_file\") {\n const p = String(effectiveArgs.path ?? \"\");\n toolEvents.push({ name, summary: `delete_file ${p}` });\n return;\n }\n\n const successVal = (toolResult as any)?.success;\n if (typeof successVal === \"boolean\") {\n const changedVal = (toolResult as any)?.changed;\n const changedText = typeof changedVal === \"boolean\" ? ` changed=${changedVal}` : \"\";\n const errText =\n successVal === false\n ? ` error=${oneLine((toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n toolEvents.push({\n name,\n summary: `${name} ${successVal ? \"success\" : \"failure\"}${changedText}${errText}`,\n });\n return;\n }\n\n toolEvents.push({ name, summary: `${name} called` });\n } catch {\n toolEvents.push({ name, summary: `${name} called` });\n }\n};\n"]}