@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
@@ -10,7 +10,7 @@ export class GenerateGeminiReponse {
10
10
  }
11
11
  }
12
12
  async aiResponse(request, options = {}) {
13
- const { tools, schema, toolCallingMode = FunctionCallingConfigMode.AUTO, } = options;
13
+ const { tools, schema, toolCallingMode = FunctionCallingConfigMode.ANY, } = options;
14
14
  const config = {};
15
15
  if (tools && tools.length > 0) {
16
16
  config.tools = tools;
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.client.js","sourceRoot":"","sources":["../../../src/ai/generate/gemini.client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EAEzB,WAAW,GAEZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAQrD,MAAM,OAAO,qBAAqB;IAIhC,YAAY,YAAoB,EAAE,KAAc;QAFzC,UAAK,GAAW,aAAa,CAAC;QAGnC,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QACxD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,OAAgB,EAAE,UAA6B,EAAE;QACvE,MAAM,EACJ,KAAK,EACL,MAAM,EACN,eAAe,GAAG,yBAAyB,CAAC,IAAI,GACjD,GAAG,OAAO,CAAC;QAEZ,MAAM,MAAM,GAA0B,EAAE,CAAC;QAEzC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,UAAU,GAAG;gBAClB,qBAAqB,EAAE;oBACrB,IAAI,EAAE,eAAe;iBACtB;aACF,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;YAC7C,MAAM,CAAC,kBAAkB,GAAG,eAAe,CAAC,MAAa,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;gBAC9C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,OAAc;gBACxB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;aAClD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,IAAI,KAAK,CACvB,yBAAyB,GAAG,EAAE,OAAO,IAAI,eAAe,EAAE,CAC3D,CAAC;YACD,OAAe,CAAC,KAAK,GAAG,GAAG,CAAC;YAC7B,MAAM,OAAO,CAAC;QAChB,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\n FunctionCallingConfigMode,\n GenerateContentConfig,\n GoogleGenAI,\n Tool,\n} from \"@google/genai\";\nimport type { ZodSchema } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\nexport const DEFAULT_MODEL = \"gemini-3.1-flash-lite\";\n\ntype AIResponseOptions = {\n tools?: Tool[];\n schema?: ZodSchema;\n toolCallingMode?: FunctionCallingConfigMode;\n};\n\nexport class GenerateGeminiReponse {\n public gemini: GoogleGenAI;\n public model: string = DEFAULT_MODEL;\n\n constructor(geminiApiKey: string, model?: string) {\n this.gemini = new GoogleGenAI({ apiKey: geminiApiKey });\n if (model) {\n this.model = model;\n }\n }\n\n public async aiResponse(request: unknown, options: AIResponseOptions = {}) {\n const {\n tools,\n schema,\n toolCallingMode = FunctionCallingConfigMode.AUTO,\n } = options;\n\n const config: GenerateContentConfig = {};\n\n if (tools && tools.length > 0) {\n config.tools = tools;\n config.toolConfig = {\n functionCallingConfig: {\n mode: toolCallingMode,\n },\n };\n }\n\n if (schema) {\n config.responseMimeType = \"application/json\";\n config.responseJsonSchema = zodToJsonSchema(schema as any);\n }\n\n try {\n return await this.gemini.models.generateContent({\n model: this.model,\n contents: request as any,\n ...(Object.keys(config).length > 0 && { config }),\n });\n } catch (err: any) {\n const wrapped = new Error(\n `AI generation failed: ${err?.message || \"Unknown error\"}`,\n );\n (wrapped as any).cause = err;\n throw wrapped;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"gemini.client.js","sourceRoot":"","sources":["../../../src/ai/generate/gemini.client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EAEzB,WAAW,GAEZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAQrD,MAAM,OAAO,qBAAqB;IAIhC,YAAY,YAAoB,EAAE,KAAc;QAFzC,UAAK,GAAW,aAAa,CAAC;QAGnC,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QACxD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,OAAgB,EAAE,UAA6B,EAAE;QACvE,MAAM,EACJ,KAAK,EACL,MAAM,EACN,eAAe,GAAG,yBAAyB,CAAC,GAAG,GAChD,GAAG,OAAO,CAAC;QAEZ,MAAM,MAAM,GAA0B,EAAE,CAAC;QAEzC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,UAAU,GAAG;gBAClB,qBAAqB,EAAE;oBACrB,IAAI,EAAE,eAAe;iBACtB;aACF,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;YAC7C,MAAM,CAAC,kBAAkB,GAAG,eAAe,CAAC,MAAa,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;gBAC9C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,OAAc;gBACxB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;aAClD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,IAAI,KAAK,CACvB,yBAAyB,GAAG,EAAE,OAAO,IAAI,eAAe,EAAE,CAC3D,CAAC;YACD,OAAe,CAAC,KAAK,GAAG,GAAG,CAAC;YAC7B,MAAM,OAAO,CAAC;QAChB,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\n FunctionCallingConfigMode,\n GenerateContentConfig,\n GoogleGenAI,\n Tool,\n} from \"@google/genai\";\nimport type { ZodSchema } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\nexport const DEFAULT_MODEL = \"gemini-3.1-flash-lite\";\n\ntype AIResponseOptions = {\n tools?: Tool[];\n schema?: ZodSchema;\n toolCallingMode?: FunctionCallingConfigMode;\n};\n\nexport class GenerateGeminiReponse {\n public gemini: GoogleGenAI;\n public model: string = DEFAULT_MODEL;\n\n constructor(geminiApiKey: string, model?: string) {\n this.gemini = new GoogleGenAI({ apiKey: geminiApiKey });\n if (model) {\n this.model = model;\n }\n }\n\n public async aiResponse(request: unknown, options: AIResponseOptions = {}) {\n const {\n tools,\n schema,\n toolCallingMode = FunctionCallingConfigMode.ANY,\n } = options;\n\n const config: GenerateContentConfig = {};\n\n if (tools && tools.length > 0) {\n config.tools = tools;\n config.toolConfig = {\n functionCallingConfig: {\n mode: toolCallingMode,\n },\n };\n }\n\n if (schema) {\n config.responseMimeType = \"application/json\";\n config.responseJsonSchema = zodToJsonSchema(schema as any);\n }\n\n try {\n return await this.gemini.models.generateContent({\n model: this.model,\n contents: request as any,\n ...(Object.keys(config).length > 0 && { config }),\n });\n } catch (err: any) {\n const wrapped = new Error(\n `AI generation failed: ${err?.message || \"Unknown error\"}`,\n );\n (wrapped as any).cause = err;\n throw wrapped;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"generateClient.d.ts","sourceRoot":"","sources":["../../../src/ai/generate/generateClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,eAAO,MAAM,SAAS,GACpB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,QAAQ,MAAM,0BAMf,CAAC"}
1
+ {"version":3,"file":"generateClient.d.ts","sourceRoot":"","sources":["../../../src/ai/generate/generateClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAM3D,eAAO,MAAM,SAAS,GAAI,UAAU,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,0BAOzE,CAAC"}
@@ -1,8 +1,12 @@
1
1
  import { GenerateGeminiReponse } from "./gemini.client.js";
2
+ const providerFactory = {
3
+ gemini: GenerateGeminiReponse,
4
+ };
2
5
  export const getClient = (provider, apiKey, model) => {
3
- if (provider === "gemini") {
4
- return new GenerateGeminiReponse(apiKey, model);
6
+ const GenerateReponse = providerFactory[provider];
7
+ if (!GenerateReponse) {
8
+ throw new Error(`Unknown provider: ${provider}`);
5
9
  }
6
- throw new Error(`Unknown provider: ${provider}`);
10
+ return new GenerateReponse(apiKey, model);
7
11
  };
8
12
  //# sourceMappingURL=generateClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateClient.js","sourceRoot":"","sources":["../../../src/ai/generate/generateClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAgB,EAChB,MAAc,EACd,KAAc,EACd,EAAE;IACF,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,IAAI,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC","sourcesContent":["import { GenerateGeminiReponse } from \"./gemini.client.js\";\r\n\r\nexport const getClient = (\r\n provider: string,\r\n apiKey: string,\r\n model?: string,\r\n) => {\r\n if (provider === \"gemini\") {\r\n return new GenerateGeminiReponse(apiKey, model);\r\n }\r\n throw new Error(`Unknown provider: ${provider}`);\r\n};\r\n"]}
1
+ {"version":3,"file":"generateClient.js","sourceRoot":"","sources":["../../../src/ai/generate/generateClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,eAAe,GAAG;IACtB,MAAM,EAAE,qBAAqB;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,MAAc,EAAE,KAAc,EAAE,EAAE;IAC5E,MAAM,eAAe,GACnB,eAAe,CAAC,QAAwC,CAAC,CAAC;IAC5D,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC,CAAC","sourcesContent":["import { GenerateGeminiReponse } from \"./gemini.client.js\";\r\n\r\nconst providerFactory = {\r\n gemini: GenerateGeminiReponse,\r\n};\r\n\r\nexport const getClient = (provider: string, apiKey: string, model?: string) => {\r\n const GenerateReponse =\r\n providerFactory[provider as keyof typeof providerFactory];\r\n if (!GenerateReponse) {\r\n throw new Error(`Unknown provider: ${provider}`);\r\n }\r\n return new GenerateReponse(apiKey, model);\r\n};\r\n"]}
@@ -0,0 +1,16 @@
1
+ import { FunctionCallingConfigMode, Tool } from "@google/genai";
2
+ import { AiCallFn, Logger } from "../toolLoopRunner.js";
3
+ export declare const aiCallWithRetry: (params: {
4
+ aiCall: AiCallFn;
5
+ request: unknown;
6
+ options: {
7
+ tools?: Tool[];
8
+ toolCallingMode?: FunctionCallingConfigMode;
9
+ };
10
+ retryMax: number;
11
+ retryBaseMs: number;
12
+ retryMaxMs: number;
13
+ step: number;
14
+ logger: Logger;
15
+ }) => Promise<import("../toolLoopRunner.js").AiCallResponse>;
16
+ //# sourceMappingURL=aiCall.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiCall.helper.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/aiCall.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAIhE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAExD,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,2DA2BA,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { EVENT_TYPES } from "../../../types/events.js";
2
+ import { computeBackoffMs, sleep } from "../../../utils/utils.js";
3
+ import { isTransientAiCallError } from "./errors.helper.js";
4
+ export const aiCallWithRetry = async (params) => {
5
+ const { aiCall, request, options, retryMax, retryBaseMs, retryMaxMs, logger, } = params;
6
+ let retryCount = 0;
7
+ while (true) {
8
+ try {
9
+ return await aiCall(request, options);
10
+ }
11
+ catch (err) {
12
+ const transient = isTransientAiCallError(err);
13
+ if (!transient || retryMax <= 0 || retryCount >= retryMax) {
14
+ throw err;
15
+ }
16
+ retryCount += 1;
17
+ const delayMs = computeBackoffMs(retryCount, retryBaseMs, retryMaxMs);
18
+ logger("Tool loop: aiCall failed; retrying", EVENT_TYPES.STEP_RETRY);
19
+ await sleep(delayMs);
20
+ }
21
+ }
22
+ };
23
+ //# sourceMappingURL=aiCall.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiCall.helper.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/aiCall.helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,MASrC,EAAE,EAAE;IACH,MAAM,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,QAAQ,EACR,WAAW,EACX,UAAU,EACV,MAAM,GACP,GAAG,MAAM,CAAC;IAEX,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,SAAS,IAAI,QAAQ,IAAI,CAAC,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;gBAC1D,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,UAAU,IAAI,CAAC,CAAC;YAChB,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YACtE,MAAM,CAAC,oCAAoC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YACrE,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { FunctionCallingConfigMode, Tool } from \"@google/genai\";\nimport { EVENT_TYPES } from \"../../../types/events.js\";\nimport { computeBackoffMs, sleep } from \"../../../utils/utils.js\";\nimport { isTransientAiCallError } from \"./errors.helper.js\";\nimport { AiCallFn, Logger } from \"../toolLoopRunner.js\";\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"]}
@@ -0,0 +1,6 @@
1
+ export declare const getApplyPatchEventMeta: (args: Record<string, unknown>) => {
2
+ chars: number;
3
+ sha256: string;
4
+ files: string[];
5
+ };
6
+ //# sourceMappingURL=applyPatch.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyPatch.helper.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/applyPatch.helper.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;CAOnE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { extractPatchFiles, sha256Hex } from "./fsHelpers.js";
2
+ export const getApplyPatchEventMeta = (args) => {
3
+ const patch = typeof args.patch_string === "string" ? args.patch_string : "";
4
+ return {
5
+ chars: patch.length,
6
+ sha256: sha256Hex(patch),
7
+ files: extractPatchFiles(patch),
8
+ };
9
+ };
10
+ //# sourceMappingURL=applyPatch.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyPatch.helper.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/applyPatch.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAA6B,EAAE,EAAE;IACtE,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC;QACxB,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;KAChC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { extractPatchFiles, sha256Hex } from \"./fsHelpers.js\";\r\n\r\nexport const getApplyPatchEventMeta = (args: Record<string, unknown>) => {\r\n const patch = typeof args.patch_string === \"string\" ? args.patch_string : \"\";\r\n return {\r\n chars: patch.length,\r\n sha256: sha256Hex(patch),\r\n files: extractPatchFiles(patch),\r\n };\r\n};\r\n"]}
@@ -0,0 +1,15 @@
1
+ export declare const serializeError: (err: unknown) => {
2
+ name: string;
3
+ message: string;
4
+ stack: string | undefined;
5
+ cause: unknown;
6
+ value?: undefined;
7
+ } | {
8
+ name: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
9
+ message: string;
10
+ value: unknown;
11
+ stack?: undefined;
12
+ cause?: undefined;
13
+ };
14
+ export declare const isTransientAiCallError: (err: unknown) => boolean;
15
+ //# sourceMappingURL=errors.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.helper.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/errors.helper.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,GAAI,KAAK,OAAO;;;;;;;;;;;;CAuB1C,CAAC;AA6BF,eAAO,MAAM,sBAAsB,GAAI,KAAK,OAAO,YAQlD,CAAC"}
@@ -0,0 +1,50 @@
1
+ export const serializeError = (err) => {
2
+ if (err instanceof Error) {
3
+ const cause = err.cause;
4
+ return {
5
+ name: err.name,
6
+ message: err.message,
7
+ stack: err.stack,
8
+ cause: cause instanceof Error
9
+ ? {
10
+ name: cause.name,
11
+ message: cause.message,
12
+ stack: cause.stack,
13
+ }
14
+ : cause,
15
+ };
16
+ }
17
+ return {
18
+ name: typeof err,
19
+ message: typeof err === "string" ? err : "Non-Error thrown",
20
+ value: err,
21
+ };
22
+ };
23
+ const isSingleNodeTransient = (node) => {
24
+ if (!node)
25
+ return false;
26
+ const code = node.error?.code ?? node.code ?? node.statusCode ?? node.response?.status;
27
+ const status = node.error?.status ?? node.status ?? node.response?.data?.error?.status;
28
+ const message = node.error?.message ??
29
+ node.message ??
30
+ node.response?.data?.error?.message;
31
+ const msg = typeof message === "string" ? message.toLowerCase() : "";
32
+ const stat = typeof status === "string" ? status.toUpperCase() : "";
33
+ return (code === 503 ||
34
+ code === 429 ||
35
+ stat === "UNAVAILABLE" ||
36
+ stat === "RESOURCE_EXHAUSTED" ||
37
+ msg.includes("high demand") ||
38
+ msg.includes("try again later") ||
39
+ msg.includes("temporar"));
40
+ };
41
+ export const isTransientAiCallError = (err) => {
42
+ let cur = err;
43
+ for (let depth = 0; depth < 4 && cur; depth++) {
44
+ if (isSingleNodeTransient(cur))
45
+ return true;
46
+ cur = cur.cause;
47
+ }
48
+ return false;
49
+ };
50
+ //# sourceMappingURL=errors.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.helper.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/errors.helper.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAY,EAAE,EAAE;IAC7C,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAI,GAAW,CAAC,KAAgB,CAAC;QAC5C,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EACH,KAAK,YAAY,KAAK;gBACpB,CAAC,CAAC;oBACE,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB;gBACH,CAAC,CAAC,KAAK;SACZ,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO,GAAG;QAChB,OAAO,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;QAC3D,KAAK,EAAE,GAAG;KACX,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,IAAS,EAAW,EAAE;IACnD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,IAAI,GACR,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE5E,MAAM,MAAM,GACV,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;IAE1E,MAAM,OAAO,GACX,IAAI,CAAC,KAAK,EAAE,OAAO;QACnB,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;IAEtC,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,OAAO,CACL,IAAI,KAAK,GAAG;QACZ,IAAI,KAAK,GAAG;QACZ,IAAI,KAAK,aAAa;QACtB,IAAI,KAAK,oBAAoB;QAC7B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC3B,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CACzB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAY,EAAE,EAAE;IACrD,IAAI,GAAG,GAAQ,GAAU,CAAC;IAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9C,IAAI,qBAAqB,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;IAClB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC","sourcesContent":["export const serializeError = (err: unknown) => {\r\n if (err instanceof Error) {\r\n const cause = (err as any).cause as unknown;\r\n return {\r\n name: err.name,\r\n message: err.message,\r\n stack: err.stack,\r\n cause:\r\n cause instanceof Error\r\n ? {\r\n name: cause.name,\r\n message: cause.message,\r\n stack: cause.stack,\r\n }\r\n : cause,\r\n };\r\n }\r\n\r\n return {\r\n name: typeof err,\r\n message: typeof err === \"string\" ? err : \"Non-Error thrown\",\r\n value: err,\r\n };\r\n};\r\n\r\nconst isSingleNodeTransient = (node: any): boolean => {\r\n if (!node) return false;\r\n const code =\r\n node.error?.code ?? node.code ?? node.statusCode ?? node.response?.status;\r\n\r\n const status =\r\n node.error?.status ?? node.status ?? node.response?.data?.error?.status;\r\n\r\n const message =\r\n node.error?.message ??\r\n node.message ??\r\n node.response?.data?.error?.message;\r\n\r\n const msg = typeof message === \"string\" ? message.toLowerCase() : \"\";\r\n const stat = typeof status === \"string\" ? status.toUpperCase() : \"\";\r\n\r\n return (\r\n code === 503 ||\r\n code === 429 ||\r\n stat === \"UNAVAILABLE\" ||\r\n stat === \"RESOURCE_EXHAUSTED\" ||\r\n msg.includes(\"high demand\") ||\r\n msg.includes(\"try again later\") ||\r\n msg.includes(\"temporar\")\r\n );\r\n};\r\n\r\nexport const isTransientAiCallError = (err: unknown) => {\r\n let cur: any = err as any;\r\n for (let depth = 0; depth < 4 && cur; depth++) {\r\n if (isSingleNodeTransient(cur)) return true;\r\n cur = cur.cause;\r\n }\r\n\r\n return false;\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { CoreFs } from "../../tools/implementations/workspaceDeps.js";
2
+ export declare const sha256Hex: (value: string) => string;
3
+ export declare const extractPatchFiles: (patchString: string) => string[];
4
+ export declare const nodeFs: CoreFs;
5
+ //# sourceMappingURL=fsHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fsHelpers.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/fsHelpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,8CAA8C,CAAC;AAEtE,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,WAC0B,CAAC;AAElE,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,KAAG,MAAM,EAgB7D,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAWpB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ export const sha256Hex = (value) => crypto.createHash("sha256").update(value, "utf8").digest("hex");
4
+ export const extractPatchFiles = (patchString) => {
5
+ const lines = patchString.replace(/\r\n/g, "\n").split("\n");
6
+ const files = new Set();
7
+ for (const line of lines) {
8
+ const match = /^\*\*\* (Update File|Add File|Delete File):\s+(\S.*)$/.exec(line) ??
9
+ /^\*\*\* Move to:\s+(\S.*)$/.exec(line);
10
+ if (!match)
11
+ continue;
12
+ const filePath = (match[2] ?? match[1] ?? "").trim();
13
+ if (filePath)
14
+ files.add(filePath);
15
+ }
16
+ return [...files];
17
+ };
18
+ export const nodeFs = {
19
+ readFile: async (absolutePath) => fs.readFile(absolutePath, "utf-8"),
20
+ writeFile: async (absolutePath, content) => fs.writeFile(absolutePath, content ?? "", "utf-8"),
21
+ mkdirp: async (absoluteDir) => {
22
+ await fs.mkdir(absoluteDir, { recursive: true });
23
+ },
24
+ rmFile: async (absolutePath) => fs.rm(absolutePath, { force: true }),
25
+ stat: async (absolutePath) => fs.stat(absolutePath),
26
+ safeReadDir: async (absoluteDir) => fs.readdir(absoluteDir, { withFileTypes: true }),
27
+ };
28
+ //# sourceMappingURL=fsHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fsHelpers.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/fsHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGlC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CACzC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAY,EAAE;IACjE,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GACT,uDAAuD,CAAC,IAAI,CAAC,IAAI,CAAC;YAClE,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,QAAQ;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IACpE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,CACzC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC;IACpD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;QAC5B,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACpE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;IACnD,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CACjC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;CACnD,CAAC","sourcesContent":["import crypto from \"node:crypto\";\r\nimport fs from \"node:fs/promises\";\r\nimport { CoreFs } from \"../../tools/implementations/workspaceDeps.js\";\r\n\r\nexport const sha256Hex = (value: string) =>\r\n crypto.createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\r\n\r\nexport const extractPatchFiles = (patchString: string): string[] => {\r\n const lines = patchString.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\r\n const files = new Set<string>();\r\n\r\n for (const line of lines) {\r\n const match =\r\n /^\\*\\*\\* (Update File|Add File|Delete File):\\s+(\\S.*)$/.exec(line) ??\r\n /^\\*\\*\\* Move to:\\s+(\\S.*)$/.exec(line);\r\n\r\n if (!match) continue;\r\n\r\n const filePath = (match[2] ?? match[1] ?? \"\").trim();\r\n if (filePath) files.add(filePath);\r\n }\r\n\r\n return [...files];\r\n};\r\n\r\nexport const nodeFs: CoreFs = {\r\n readFile: async (absolutePath) => fs.readFile(absolutePath, \"utf-8\"),\r\n writeFile: async (absolutePath, content) =>\r\n fs.writeFile(absolutePath, content ?? \"\", \"utf-8\"),\r\n mkdirp: async (absoluteDir) => {\r\n await fs.mkdir(absoluteDir, { recursive: true });\r\n },\r\n rmFile: async (absolutePath) => fs.rm(absolutePath, { force: true }),\r\n stat: async (absolutePath) => fs.stat(absolutePath),\r\n safeReadDir: async (absoluteDir) =>\r\n fs.readdir(absoluteDir, { withFileTypes: true }),\r\n};\r\n"]}
@@ -0,0 +1,11 @@
1
+ export declare function handleApplyPatchFailure(params: {
2
+ toolResult: any;
3
+ applyPatchAutoRetryMax: number;
4
+ applyPatchRetryCount: number;
5
+ keepFullTrace: boolean;
6
+ fullTraceContents: any[];
7
+ modelContents: any[];
8
+ }): {
9
+ applyPatchRetryCount: number;
10
+ };
11
+ //# sourceMappingURL=patchRetry.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patchRetry.helper.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/patchRetry.helper.ts"],"names":[],"mappings":"AAAA,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,UAAU,EAAE,GAAG,CAAC;IAChB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,GAAG,EAAE,CAAC;IACzB,aAAa,EAAE,GAAG,EAAE,CAAC;CACtB,GAAG;IAAE,oBAAoB,EAAE,MAAM,CAAA;CAAE,CA2CnC"}
@@ -0,0 +1,30 @@
1
+ export function handleApplyPatchFailure(params) {
2
+ let { applyPatchRetryCount, toolResult, applyPatchAutoRetryMax, keepFullTrace, fullTraceContents, modelContents } = params;
3
+ applyPatchRetryCount += 1;
4
+ const error = String(toolResult?.error ?? "unknown error");
5
+ const debugFiles = Array.isArray(toolResult?.debug?.files)
6
+ ? toolResult.debug.files
7
+ : [];
8
+ const debugText = debugFiles.length > 0
9
+ ? `\n\nFILE SNAPSHOTS (for regenerating the patch):\n${debugFiles
10
+ .slice(0, 3)
11
+ .map((f) => `--- ${String(f.path ?? "")} ---\n${String(f.head ?? "")}\n--- end ---`)
12
+ .join("\n\n")}`
13
+ : "";
14
+ const retryInstruction = {
15
+ role: "user",
16
+ parts: [
17
+ {
18
+ text: `apply_patch failed (attempt ${applyPatchRetryCount}/${applyPatchAutoRetryMax}): ${error}\n` +
19
+ `Regenerate a patch that matches the current file contents. ` +
20
+ `For large rewrites, prefer write_file(path, content) or Delete+Add instead of Update.` +
21
+ debugText,
22
+ },
23
+ ],
24
+ };
25
+ if (keepFullTrace)
26
+ fullTraceContents.push(retryInstruction);
27
+ modelContents.push(retryInstruction);
28
+ return { applyPatchRetryCount };
29
+ }
30
+ //# sourceMappingURL=patchRetry.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patchRetry.helper.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/patchRetry.helper.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,uBAAuB,CAAC,MAOvC;IACC,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,sBAAsB,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAE3H,oBAAoB,IAAI,CAAC,CAAC;IAE1B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,eAAe,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC;QACxD,CAAC,CAAE,UAAU,CAAC,KAAK,CAAC,KAGf;QACL,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,SAAS,GACb,UAAU,CAAC,MAAM,GAAG,CAAC;QACnB,CAAC,CAAC,qDAAqD,UAAU;aAC5D,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,SAAS,MAAM,CACxC,CAAC,CAAC,IAAI,IAAI,EAAE,CACb,eAAe,CACnB;aACA,IAAI,CAAC,MAAM,CAAC,EAAE;QACnB,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,gBAAgB,GAAG;QACvB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE;YACL;gBACE,IAAI,EACF,+BAA+B,oBAAoB,IAAI,sBAAsB,MAAM,KAAK,IAAI;oBAC5F,6DAA6D;oBAC7D,uFAAuF;oBACvF,SAAS;aACZ;SACF;KACF,CAAC;IAEF,IAAI,aAAa;QAAE,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5D,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAErC,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAClC,CAAC","sourcesContent":["export function handleApplyPatchFailure(params: {\n toolResult: any;\n applyPatchAutoRetryMax: number;\n applyPatchRetryCount: number;\n keepFullTrace: boolean;\n fullTraceContents: any[];\n modelContents: any[];\n}): { applyPatchRetryCount: number } {\n let { applyPatchRetryCount, toolResult, applyPatchAutoRetryMax, keepFullTrace, fullTraceContents, modelContents } = params;\n\n applyPatchRetryCount += 1;\n\n const error = String(toolResult?.error ?? \"unknown error\");\n const debugFiles = Array.isArray(toolResult?.debug?.files)\n ? (toolResult.debug.files as Array<{\n path?: string;\n head?: string;\n }>)\n : [];\n\n const debugText =\n debugFiles.length > 0\n ? `\\n\\nFILE SNAPSHOTS (for regenerating the patch):\\n${debugFiles\n .slice(0, 3)\n .map(\n (f) =>\n `--- ${String(f.path ?? \"\")} ---\\n${String(\n f.head ?? \"\",\n )}\\n--- end ---`,\n )\n .join(\"\\n\\n\")}`\n : \"\";\n\n const retryInstruction = {\n role: \"user\",\n parts: [\n {\n text:\n `apply_patch failed (attempt ${applyPatchRetryCount}/${applyPatchAutoRetryMax}): ${error}\\n` +\n `Regenerate a patch that matches the current file contents. ` +\n `For large rewrites, prefer write_file(path, content) or Delete+Add instead of Update.` +\n debugText,\n },\n ],\n };\n\n if (keepFullTrace) fullTraceContents.push(retryInstruction);\n modelContents.push(retryInstruction);\n\n return { applyPatchRetryCount };\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { TokenPersistence } from "../toolLoopRunner.js";
2
+ export declare const persistTokensOnce: (tokenPersistence: TokenPersistence | undefined, sawAnyTokenUsage: boolean, totalInputTokens: number, totalOutputTokens: number) => Promise<void>;
3
+ export declare const extractUsageTokenCounts: (rawResponse: unknown) => {
4
+ inputTokens: number;
5
+ outputTokens: number;
6
+ } | null;
7
+ //# sourceMappingURL=persistTokens.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistTokens.helpers.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/persistTokens.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,eAAO,MAAM,iBAAiB,GAC5B,kBAAkB,gBAAgB,GAAG,SAAS,EAC9C,kBAAkB,OAAO,EACzB,kBAAkB,MAAM,EACxB,mBAAmB,MAAM,kBAe1B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,aAAa,OAAO;;;QAY3D,CAAC"}
@@ -0,0 +1,25 @@
1
+ export const persistTokensOnce = async (tokenPersistence, sawAnyTokenUsage, totalInputTokens, totalOutputTokens) => {
2
+ if (!tokenPersistence)
3
+ return;
4
+ if (!sawAnyTokenUsage)
5
+ return;
6
+ try {
7
+ await tokenPersistence.repository.persistGenTokens(tokenPersistence.sessionId, totalInputTokens, totalOutputTokens, tokenPersistence.model);
8
+ }
9
+ catch (err) {
10
+ console.error("Tool loop: failed to persist gen tokens", err);
11
+ }
12
+ };
13
+ export const extractUsageTokenCounts = (rawResponse) => {
14
+ const usage = rawResponse?.usageMetadata;
15
+ const promptTokenCount = usage?.promptTokenCount;
16
+ const candidatesTokenCount = usage?.candidatesTokenCount;
17
+ const inputTokens = Number(promptTokenCount);
18
+ const outputTokens = Number(candidatesTokenCount);
19
+ if (!Number.isFinite(inputTokens) || inputTokens < 0)
20
+ return null;
21
+ if (!Number.isFinite(outputTokens) || outputTokens < 0)
22
+ return null;
23
+ return { inputTokens, outputTokens };
24
+ };
25
+ //# sourceMappingURL=persistTokens.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistTokens.helpers.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/persistTokens.helpers.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,gBAA8C,EAC9C,gBAAyB,EACzB,gBAAwB,EACxB,iBAAyB,EACzB,EAAE;IACF,IAAI,CAAC,gBAAgB;QAAE,OAAO;IAC9B,IAAI,CAAC,gBAAgB;QAAE,OAAO;IAE9B,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC,UAAU,CAAC,gBAAgB,CAChD,gBAAgB,CAAC,SAAS,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,CAAC,KAAK,CACvB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,WAAoB,EAAE,EAAE;IAC9D,MAAM,KAAK,GAAI,WAAmB,EAAE,aAAa,CAAC;IAClD,MAAM,gBAAgB,GAAG,KAAK,EAAE,gBAAgB,CAAC;IACjD,MAAM,oBAAoB,GAAG,KAAK,EAAE,oBAAoB,CAAC;IAEzD,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAElD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AACvC,CAAC,CAAC","sourcesContent":["import { TokenPersistence } from \"../toolLoopRunner.js\";\r\n\r\nexport const persistTokensOnce = async (\r\n tokenPersistence: TokenPersistence | undefined,\r\n sawAnyTokenUsage: boolean,\r\n totalInputTokens: number,\r\n totalOutputTokens: number,\r\n) => {\r\n if (!tokenPersistence) return;\r\n if (!sawAnyTokenUsage) return;\r\n\r\n try {\r\n await tokenPersistence.repository.persistGenTokens(\r\n tokenPersistence.sessionId,\r\n totalInputTokens,\r\n totalOutputTokens,\r\n tokenPersistence.model,\r\n );\r\n } catch (err) {\r\n console.error(\"Tool loop: failed to persist gen tokens\", err);\r\n }\r\n};\r\n\r\nexport const extractUsageTokenCounts = (rawResponse: unknown) => {\r\n const usage = (rawResponse as any)?.usageMetadata;\r\n const promptTokenCount = usage?.promptTokenCount;\r\n const candidatesTokenCount = usage?.candidatesTokenCount;\r\n\r\n const inputTokens = Number(promptTokenCount);\r\n const outputTokens = Number(candidatesTokenCount);\r\n\r\n if (!Number.isFinite(inputTokens) || inputTokens < 0) return null;\r\n if (!Number.isFinite(outputTokens) || outputTokens < 0) return null;\r\n\r\n return { inputTokens, outputTokens };\r\n};\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { PlannerTask } from "../../types/plannerTasks.types.js";
2
+ import { PlannerTask } from "../../../types/plannerTasks.types.js";
3
3
  export declare const PlannerTaskSchema: z.ZodObject<{
4
4
  description: z.ZodString;
5
5
  targets: z.ZodArray<z.ZodString>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plannerTaskParser.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/plannerTaskParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plannerTaskParser.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/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"]}
@@ -0,0 +1,10 @@
1
+ export declare const normalizeReadFileArgs: (args: Record<string, unknown>, maxLines: number) => {
2
+ effectiveArgs: {
3
+ start_line: number;
4
+ end_line: number;
5
+ };
6
+ start: number;
7
+ end: number;
8
+ wasCapped: boolean;
9
+ };
10
+ //# sourceMappingURL=readFile.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readFile.helpers.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/readFile.helpers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,MAAM;;;;;;;;CAmCjB,CAAC"}
@@ -0,0 +1,26 @@
1
+ export const normalizeReadFileArgs = (args, maxLines) => {
2
+ const requestedStart = args.start_line === undefined || args.start_line === null
3
+ ? 1
4
+ : Number(args.start_line);
5
+ const requestedEnd = args.end_line === undefined || args.end_line === null
6
+ ? undefined
7
+ : Number(args.end_line);
8
+ const start = Number.isFinite(requestedStart) && requestedStart > 0 ? requestedStart : 1;
9
+ const cap = Math.max(1, Math.floor(maxLines));
10
+ const desiredEnd = requestedEnd === undefined ||
11
+ !Number.isFinite(requestedEnd) ||
12
+ requestedEnd < start
13
+ ? start + cap - 1
14
+ : requestedEnd;
15
+ const cappedEnd = Math.min(desiredEnd, start + cap - 1);
16
+ const wasCapped = requestedEnd === undefined ||
17
+ desiredEnd !== requestedEnd ||
18
+ cappedEnd !== desiredEnd;
19
+ return {
20
+ effectiveArgs: { ...args, start_line: start, end_line: cappedEnd },
21
+ start,
22
+ end: cappedEnd,
23
+ wasCapped,
24
+ };
25
+ };
26
+ //# sourceMappingURL=readFile.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readFile.helpers.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/readFile.helpers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,IAA6B,EAC7B,QAAgB,EAChB,EAAE;IACF,MAAM,cAAc,GAClB,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;QACvD,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE9B,MAAM,YAAY,GAChB,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;QACnD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE5B,MAAM,KAAK,GACT,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9C,MAAM,UAAU,GACd,YAAY,KAAK,SAAS;QAC1B,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9B,YAAY,GAAG,KAAK;QAClB,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC;QACjB,CAAC,CAAC,YAAY,CAAC;IAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,SAAS,GACb,YAAY,KAAK,SAAS;QAC1B,UAAU,KAAK,YAAY;QAC3B,SAAS,KAAK,UAAU,CAAC;IAE3B,OAAO;QACL,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE;QAClE,KAAK;QACL,GAAG,EAAE,SAAS;QACd,SAAS;KACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["export const normalizeReadFileArgs = (\r\n args: Record<string, unknown>,\r\n maxLines: number,\r\n) => {\r\n const requestedStart =\r\n args.start_line === undefined || args.start_line === null\r\n ? 1\r\n : Number(args.start_line);\r\n\r\n const requestedEnd =\r\n args.end_line === undefined || args.end_line === null\r\n ? undefined\r\n : Number(args.end_line);\r\n\r\n const start =\r\n Number.isFinite(requestedStart) && requestedStart > 0 ? requestedStart : 1;\r\n const cap = Math.max(1, Math.floor(maxLines));\r\n\r\n const desiredEnd =\r\n requestedEnd === undefined ||\r\n !Number.isFinite(requestedEnd) ||\r\n requestedEnd < start\r\n ? start + cap - 1\r\n : requestedEnd;\r\n\r\n const cappedEnd = Math.min(desiredEnd, start + cap - 1);\r\n const wasCapped =\r\n requestedEnd === undefined ||\r\n desiredEnd !== requestedEnd ||\r\n cappedEnd !== desiredEnd;\r\n\r\n return {\r\n effectiveArgs: { ...args, start_line: start, end_line: cappedEnd },\r\n start,\r\n end: cappedEnd,\r\n wasCapped,\r\n };\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ export declare function extractThoughtSignatures(response: any): Map<string, string>;
2
+ //# sourceMappingURL=signatures.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signatures.helper.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/signatures.helper.ts"],"names":[],"mappings":"AAAA,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB3E"}
@@ -0,0 +1,23 @@
1
+ export function extractThoughtSignatures(response) {
2
+ try {
3
+ const candidates = Array.isArray(response?.candidates)
4
+ ? response.candidates
5
+ : [];
6
+ const parts = candidates?.[0]?.content?.parts;
7
+ const arr = Array.isArray(parts) ? parts : [];
8
+ const map = new Map();
9
+ for (const p of arr) {
10
+ const fc = p?.functionCall;
11
+ const id = fc?.id;
12
+ const sig = p?.thoughtSignature ?? p?.thought_signature;
13
+ if (typeof id === "string" && typeof sig === "string" && sig) {
14
+ map.set(id, sig);
15
+ }
16
+ }
17
+ return map;
18
+ }
19
+ catch {
20
+ return new Map();
21
+ }
22
+ }
23
+ //# sourceMappingURL=signatures.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signatures.helper.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/signatures.helper.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,wBAAwB,CAAC,QAAa;IACpD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;YACpD,CAAC,CAAE,QAAQ,CAAC,UAAoB;YAChC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;QAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,CAAC;YAC3B,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,CAAC,EAAE,gBAAgB,IAAI,CAAC,EAAE,iBAAiB,CAAC;YACxD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,EAAE,CAAC;gBAC7D,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAkB,CAAC;IACnC,CAAC;AACH,CAAC","sourcesContent":["export function extractThoughtSignatures(response: any): Map<string, string> {\n try {\n const candidates = Array.isArray(response?.candidates)\n ? (response.candidates as any[])\n : [];\n const parts = candidates?.[0]?.content?.parts;\n const arr = Array.isArray(parts) ? (parts as any[]) : [];\n const map = new Map<string, string>();\n for (const p of arr) {\n const fc = p?.functionCall;\n const id = fc?.id;\n const sig = p?.thoughtSignature ?? p?.thought_signature;\n if (typeof id === \"string\" && typeof sig === \"string\" && sig) {\n map.set(id, sig);\n }\n }\n return map;\n } catch {\n return new Map<string, string>();\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ export declare function normalizeToolArgs(name: string, args: Record<string, unknown>, options: {
2
+ readFileDefaultMaxLines: number;
3
+ styleTokenKeySet: Set<string>;
4
+ }): {
5
+ effectiveArgs: Record<string, unknown>;
6
+ readFileMeta: {
7
+ start: number;
8
+ end: number;
9
+ wasCapped: boolean;
10
+ } | null;
11
+ };
12
+ //# sourceMappingURL=toolArgs.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolArgs.helper.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/toolArgs.helper.ts"],"names":[],"mappings":"AA2BA,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE;IACP,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B,GACA;IACD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,OAAO,CAAC;KACpB,GAAG,IAAI,CAAC;CACV,CAwBA"}
@@ -0,0 +1,40 @@
1
+ import { isPlainObject } from "../../../utils/utils.js";
2
+ import { normalizeReadFileArgs } from "./readFile.helpers.js";
3
+ function normalizeUpdateGlobalStylesArgs(args, styleTokenKeySet) {
4
+ const normalized = {};
5
+ const tokensMaybe = args?.tokens;
6
+ if (isPlainObject(tokensMaybe)) {
7
+ for (const [k, v] of Object.entries(tokensMaybe)) {
8
+ if (styleTokenKeySet.has(k) && typeof v === "string") {
9
+ normalized[k] = v;
10
+ }
11
+ }
12
+ }
13
+ for (const [k, v] of Object.entries(args ?? {})) {
14
+ if (styleTokenKeySet.has(k) && typeof v === "string") {
15
+ normalized[k] = v;
16
+ }
17
+ }
18
+ return normalized;
19
+ }
20
+ export function normalizeToolArgs(name, args, options) {
21
+ if (name === "read_file") {
22
+ const normalized = normalizeReadFileArgs(args, options.readFileDefaultMaxLines);
23
+ return {
24
+ effectiveArgs: normalized.effectiveArgs,
25
+ readFileMeta: {
26
+ start: normalized.start,
27
+ end: normalized.end,
28
+ wasCapped: normalized.wasCapped,
29
+ },
30
+ };
31
+ }
32
+ if (name === "update_global_styles") {
33
+ return {
34
+ effectiveArgs: normalizeUpdateGlobalStylesArgs(args, options.styleTokenKeySet),
35
+ readFileMeta: null,
36
+ };
37
+ }
38
+ return { effectiveArgs: args, readFileMeta: null };
39
+ }
40
+ //# sourceMappingURL=toolArgs.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolArgs.helper.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/toolArgs.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,SAAS,+BAA+B,CACtC,IAA6B,EAC7B,gBAA6B;IAE7B,MAAM,UAAU,GAA4B,EAAE,CAAC;IAE/C,MAAM,WAAW,GAAG,IAAI,EAAE,MAAM,CAAC;IACjC,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACjD,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACrD,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QAChD,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACrD,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,IAA6B,EAC7B,OAGC;IASD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,qBAAqB,CACtC,IAAI,EACJ,OAAO,CAAC,uBAAuB,CAChC,CAAC;QACF,OAAO;YACL,aAAa,EAAE,UAAU,CAAC,aAAa;YACvC,YAAY,EAAE;gBACZ,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,GAAG,EAAE,UAAU,CAAC,GAAG;gBACnB,SAAS,EAAE,UAAU,CAAC,SAAS;aAChC;SACF,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;QACpC,OAAO;YACL,aAAa,EAAE,+BAA+B,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC;YAC9E,YAAY,EAAE,IAAI;SACnB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACrD,CAAC","sourcesContent":["import { isPlainObject } from \"../../../utils/utils.js\";\nimport { normalizeReadFileArgs } from \"./readFile.helpers.js\";\n\nfunction normalizeUpdateGlobalStylesArgs(\n args: Record<string, unknown>,\n styleTokenKeySet: Set<string>\n): Record<string, unknown> {\n const normalized: Record<string, unknown> = {};\n\n const tokensMaybe = args?.tokens;\n if (isPlainObject(tokensMaybe)) {\n for (const [k, v] of Object.entries(tokensMaybe)) {\n if (styleTokenKeySet.has(k) && typeof v === \"string\") {\n normalized[k] = v;\n }\n }\n }\n\n for (const [k, v] of Object.entries(args ?? {})) {\n if (styleTokenKeySet.has(k) && typeof v === \"string\") {\n normalized[k] = v;\n }\n }\n\n return normalized;\n}\n\nexport function normalizeToolArgs(\n name: string,\n args: Record<string, unknown>,\n options: {\n readFileDefaultMaxLines: number;\n styleTokenKeySet: Set<string>;\n }\n): {\n effectiveArgs: Record<string, unknown>;\n readFileMeta: {\n start: number;\n end: number;\n wasCapped: boolean;\n } | null;\n} {\n if (name === \"read_file\") {\n const normalized = normalizeReadFileArgs(\n args,\n options.readFileDefaultMaxLines,\n );\n return {\n effectiveArgs: normalized.effectiveArgs,\n readFileMeta: {\n start: normalized.start,\n end: normalized.end,\n wasCapped: normalized.wasCapped,\n },\n };\n }\n\n if (name === \"update_global_styles\") {\n return {\n effectiveArgs: normalizeUpdateGlobalStylesArgs(args, options.styleTokenKeySet),\n readFileMeta: null,\n };\n }\n\n return { effectiveArgs: args, readFileMeta: null };\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import { EventType } from "../../../types/events.js";
2
+ export type Logger = (message: string, eventType: EventType, displayedSummary?: boolean) => Promise<void>;
3
+ export declare function executeToolHandler(params: {
4
+ name: string;
5
+ handler: ((args: any) => Promise<any>) | undefined;
6
+ effectiveArgs: Record<string, unknown>;
7
+ styleTokenKeySet: Set<string>;
8
+ step: number;
9
+ logger: Logger;
10
+ }): Promise<unknown>;
11
+ export declare function postProcessToolResult(params: {
12
+ name: string;
13
+ toolResultRaw: unknown;
14
+ effectiveArgs: Record<string, unknown>;
15
+ readFileMeta: {
16
+ start: number;
17
+ end: number;
18
+ wasCapped: boolean;
19
+ } | null;
20
+ readFileDefaultMaxLines?: number;
21
+ }): unknown;
22
+ //# sourceMappingURL=toolExecution.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolExecution.helper.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/toolExecution.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,MAAM,MAAM,GAAG,CACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,gBAAgB,CAAC,EAAE,OAAO,KACvB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;IACnD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CA8CnB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC,GAAG,OAAO,CAoCV"}