@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.
- package/dist/ai/generate/gemini.client.js +1 -1
- package/dist/ai/generate/gemini.client.js.map +1 -1
- package/dist/ai/generate/generateClient.d.ts.map +1 -1
- package/dist/ai/generate/generateClient.js +7 -3
- package/dist/ai/generate/generateClient.js.map +1 -1
- package/dist/ai/toolLoop/helpers/aiCall.helper.d.ts +16 -0
- package/dist/ai/toolLoop/helpers/aiCall.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/aiCall.helper.js +23 -0
- package/dist/ai/toolLoop/helpers/aiCall.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/applyPatch.helper.d.ts +6 -0
- package/dist/ai/toolLoop/helpers/applyPatch.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/applyPatch.helper.js +10 -0
- package/dist/ai/toolLoop/helpers/applyPatch.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/errors.helper.d.ts +15 -0
- package/dist/ai/toolLoop/helpers/errors.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/errors.helper.js +50 -0
- package/dist/ai/toolLoop/helpers/errors.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/fsHelpers.d.ts +5 -0
- package/dist/ai/toolLoop/helpers/fsHelpers.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/fsHelpers.js +28 -0
- package/dist/ai/toolLoop/helpers/fsHelpers.js.map +1 -0
- package/dist/ai/toolLoop/helpers/patchRetry.helper.d.ts +11 -0
- package/dist/ai/toolLoop/helpers/patchRetry.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/patchRetry.helper.js +30 -0
- package/dist/ai/toolLoop/helpers/patchRetry.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/persistTokens.helpers.d.ts +7 -0
- package/dist/ai/toolLoop/helpers/persistTokens.helpers.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/persistTokens.helpers.js +25 -0
- package/dist/ai/toolLoop/helpers/persistTokens.helpers.js.map +1 -0
- package/dist/ai/toolLoop/{plannerTaskParser.d.ts → helpers/plannerTaskParser.d.ts} +1 -1
- package/dist/ai/toolLoop/helpers/plannerTaskParser.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/plannerTaskParser.js.map +1 -0
- package/dist/ai/toolLoop/helpers/readFile.helpers.d.ts +10 -0
- package/dist/ai/toolLoop/helpers/readFile.helpers.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/readFile.helpers.js +26 -0
- package/dist/ai/toolLoop/helpers/readFile.helpers.js.map +1 -0
- package/dist/ai/toolLoop/helpers/signatures.helper.d.ts +2 -0
- package/dist/ai/toolLoop/helpers/signatures.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/signatures.helper.js +23 -0
- package/dist/ai/toolLoop/helpers/signatures.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/toolArgs.helper.d.ts +12 -0
- package/dist/ai/toolLoop/helpers/toolArgs.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/toolArgs.helper.js +40 -0
- package/dist/ai/toolLoop/helpers/toolArgs.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/toolExecution.helper.d.ts +22 -0
- package/dist/ai/toolLoop/helpers/toolExecution.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/toolExecution.helper.js +75 -0
- package/dist/ai/toolLoop/helpers/toolExecution.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/toolHandlers.helper.d.ts +6 -0
- package/dist/ai/toolLoop/helpers/toolHandlers.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/toolHandlers.helper.js +86 -0
- package/dist/ai/toolLoop/helpers/toolHandlers.helper.js.map +1 -0
- package/dist/ai/toolLoop/toolEventSummary.d.ts +28 -0
- package/dist/ai/toolLoop/toolEventSummary.d.ts.map +1 -0
- package/dist/ai/toolLoop/toolEventSummary.js +253 -0
- package/dist/ai/toolLoop/toolEventSummary.js.map +1 -0
- package/dist/ai/toolLoop/toolLoopContext.d.ts +0 -14
- package/dist/ai/toolLoop/toolLoopContext.d.ts.map +1 -1
- package/dist/ai/toolLoop/toolLoopContext.js +7 -50
- package/dist/ai/toolLoop/toolLoopContext.js.map +1 -1
- package/dist/ai/toolLoop/toolLoopRunner.d.ts +6 -5
- package/dist/ai/toolLoop/toolLoopRunner.d.ts.map +1 -1
- package/dist/ai/toolLoop/toolLoopRunner.js +48 -281
- package/dist/ai/toolLoop/toolLoopRunner.js.map +1 -1
- package/dist/ai/toolLoop/toolStatusMessage.d.ts +6 -0
- package/dist/ai/toolLoop/toolStatusMessage.d.ts.map +1 -0
- package/dist/ai/toolLoop/toolStatusMessage.js +140 -0
- package/dist/ai/toolLoop/toolStatusMessage.js.map +1 -0
- package/dist/ai/tools/helpers/applyPatch.helpers.d.ts.map +1 -1
- package/dist/ai/tools/helpers/applyPatch.helpers.js +9 -4
- package/dist/ai/tools/helpers/applyPatch.helpers.js.map +1 -1
- package/dist/ai/tools/helpers/fileSystem.helpers.d.ts.map +1 -1
- package/dist/ai/tools/helpers/fileSystem.helpers.js +7 -1
- package/dist/ai/tools/helpers/fileSystem.helpers.js.map +1 -1
- package/dist/ai/tools/helpers/pageConfigJson.helpers.d.ts +13 -0
- package/dist/ai/tools/helpers/pageConfigJson.helpers.d.ts.map +1 -1
- package/dist/ai/tools/helpers/pageConfigJson.helpers.js +51 -21
- package/dist/ai/tools/helpers/pageConfigJson.helpers.js.map +1 -1
- package/dist/ai/tools/implementations/applyPatch.impl.js +2 -2
- package/dist/ai/tools/implementations/applyPatch.impl.js.map +1 -1
- package/dist/ai/tools/implementations/createNewRoute.impl.js +1 -1
- package/dist/ai/tools/implementations/createNewRoute.impl.js.map +1 -1
- package/dist/ai/tools/implementations/deleteElement.impl.d.ts.map +1 -1
- package/dist/ai/tools/implementations/deleteElement.impl.js +5 -37
- package/dist/ai/tools/implementations/deleteElement.impl.js.map +1 -1
- package/dist/ai/tools/implementations/insertElement.impl.d.ts.map +1 -1
- package/dist/ai/tools/implementations/insertElement.impl.js +9 -46
- package/dist/ai/tools/implementations/insertElement.impl.js.map +1 -1
- package/dist/ai/tools/implementations/updateClassName.impl.d.ts.map +1 -1
- package/dist/ai/tools/implementations/updateClassName.impl.js +5 -37
- package/dist/ai/tools/implementations/updateClassName.impl.js.map +1 -1
- package/dist/ai/tools/implementations/updateGlobalStyles.impl.d.ts.map +1 -1
- package/dist/ai/tools/implementations/updateGlobalStyles.impl.js +4 -3
- package/dist/ai/tools/implementations/updateGlobalStyles.impl.js.map +1 -1
- package/dist/ai/tools/implementations/updateProps.impl.d.ts.map +1 -1
- package/dist/ai/tools/implementations/updateProps.impl.js +5 -37
- package/dist/ai/tools/implementations/updateProps.impl.js.map +1 -1
- package/dist/ai/tools/schemas/createNewRoute.schema.d.ts.map +1 -1
- package/dist/ai/tools/schemas/createNewRoute.schema.js +1 -1
- package/dist/ai/tools/schemas/createNewRoute.schema.js.map +1 -1
- package/dist/ai/tools/schemas/deleteElement.schema.d.ts.map +1 -1
- package/dist/ai/tools/schemas/deleteElement.schema.js +1 -2
- package/dist/ai/tools/schemas/deleteElement.schema.js.map +1 -1
- package/dist/ai/tools/schemas/elementProps.schema.d.ts +101 -0
- package/dist/ai/tools/schemas/elementProps.schema.d.ts.map +1 -0
- package/dist/ai/tools/schemas/elementProps.schema.js +74 -0
- package/dist/ai/tools/schemas/elementProps.schema.js.map +1 -0
- package/dist/ai/tools/schemas/insertElement.schema.d.ts.map +1 -1
- package/dist/ai/tools/schemas/insertElement.schema.js +2 -74
- package/dist/ai/tools/schemas/insertElement.schema.js.map +1 -1
- package/dist/ai/tools/schemas/updateClassName.schema.d.ts.map +1 -1
- package/dist/ai/tools/schemas/updateClassName.schema.js +1 -2
- package/dist/ai/tools/schemas/updateClassName.schema.js.map +1 -1
- package/dist/ai/tools/schemas/updateProps.schema.d.ts +9 -9
- package/dist/ai/tools/schemas/updateProps.schema.d.ts.map +1 -1
- package/dist/ai/tools/schemas/updateProps.schema.js +3 -69
- package/dist/ai/tools/schemas/updateProps.schema.js.map +1 -1
- package/dist/image/unsplash.service.d.ts.map +1 -1
- package/dist/image/unsplash.service.js +6 -2
- package/dist/image/unsplash.service.js.map +1 -1
- package/dist/indexer/projectInfoIndex.d.ts.map +1 -1
- package/dist/indexer/projectInfoIndex.js +33 -25
- package/dist/indexer/projectInfoIndex.js.map +1 -1
- package/dist/types/styleConfig.d.ts.map +1 -1
- package/dist/types/styleConfig.js +2 -3
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/utils.d.ts +3 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +8 -0
- package/dist/utils/utils.js.map +1 -1
- package/dist/utils/workspace.d.ts +1 -1
- package/dist/utils/workspace.d.ts.map +1 -1
- package/dist/utils/workspace.js +6 -11
- package/dist/utils/workspace.js.map +1 -1
- package/package.json +1 -1
- package/dist/ai/toolLoop/plannerTaskParser.d.ts.map +0 -1
- package/dist/ai/toolLoop/plannerTaskParser.js.map +0 -1
- package/dist/ai/toolLoop/toolLoopRunnerUtils.d.ts +0 -51
- package/dist/ai/toolLoop/toolLoopRunnerUtils.d.ts.map +0 -1
- package/dist/ai/toolLoop/toolLoopRunnerUtils.js +0 -367
- package/dist/ai/toolLoop/toolLoopRunnerUtils.js.map +0 -1
- /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.
|
|
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,
|
|
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;
|
|
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
|
-
|
|
4
|
-
|
|
6
|
+
const GenerateReponse = providerFactory[provider];
|
|
7
|
+
if (!GenerateReponse) {
|
|
8
|
+
throw new Error(`Unknown provider: ${provider}`);
|
|
5
9
|
}
|
|
6
|
-
|
|
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,
|
|
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 @@
|
|
|
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 "
|
|
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 @@
|
|
|
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"}
|