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