@vedangiitb/qwintly-core 1.4.12 → 1.5.0
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/{plannerTaskParser.js → helpers/plannerTaskParser.js} +5 -1
- 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/tests/plannerTaskParser.test.d.ts +2 -0
- package/dist/tests/plannerTaskParser.test.d.ts.map +1 -0
- package/dist/tests/plannerTaskParser.test.js +49 -0
- package/dist/tests/plannerTaskParser.test.js.map +1 -0
- 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
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { EVENT_TYPES } from "../../../types/events.js";
|
|
2
|
+
import { serializeError } from "./errors.helper.js";
|
|
3
|
+
export async function executeToolHandler(params) {
|
|
4
|
+
const { name, handler, effectiveArgs, styleTokenKeySet, step, logger } = params;
|
|
5
|
+
if (!handler) {
|
|
6
|
+
return {
|
|
7
|
+
success: false,
|
|
8
|
+
error: `No handler registered for "${name}".`,
|
|
9
|
+
error_detail: {
|
|
10
|
+
name: "MissingToolHandlerError",
|
|
11
|
+
message: `No handler registered for "${name}".`,
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
if (name === "update_global_styles") {
|
|
17
|
+
const flatKeys = Object.keys(effectiveArgs ?? {}).filter((k) => styleTokenKeySet.has(k));
|
|
18
|
+
if (flatKeys.length === 0) {
|
|
19
|
+
return {
|
|
20
|
+
success: false,
|
|
21
|
+
error: "must include at least one token key/value",
|
|
22
|
+
error_detail: {
|
|
23
|
+
name: "InvalidToolArgumentsError",
|
|
24
|
+
message: 'update_global_styles requires at least one token key/value (e.g. { radius: "0.75rem" }).',
|
|
25
|
+
},
|
|
26
|
+
note: "Resend update_global_styles with at least one token key/value, or skip this tool call.",
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return await handler(effectiveArgs);
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
logger(`AI tool: ${name} failed`, EVENT_TYPES.STEP_ERROR, true);
|
|
34
|
+
console.error("Tool loop: handler threw", err, {
|
|
35
|
+
tool: name,
|
|
36
|
+
step,
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
error: err instanceof Error ? err.message : String(err),
|
|
41
|
+
error_detail: serializeError(err),
|
|
42
|
+
note: "Tool handler threw. Inspect error_detail and retry with corrected args or a different approach.",
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function postProcessToolResult(params) {
|
|
47
|
+
const { name, toolResultRaw, effectiveArgs, readFileMeta, readFileDefaultMaxLines } = params;
|
|
48
|
+
if (name === "read_file" && readFileMeta) {
|
|
49
|
+
const path = typeof effectiveArgs.path === "string" ? effectiveArgs.path : "";
|
|
50
|
+
const originalJsonPayload = toolResultRaw?.kind === "json"
|
|
51
|
+
? toolResultRaw?.json
|
|
52
|
+
: undefined;
|
|
53
|
+
if (originalJsonPayload !== undefined) {
|
|
54
|
+
// Token-efficient: return JSON as structured data (no double-stringifying).
|
|
55
|
+
return { path, json: originalJsonPayload };
|
|
56
|
+
}
|
|
57
|
+
const rawContent = typeof toolResultRaw?.content === "string"
|
|
58
|
+
? String(toolResultRaw.content)
|
|
59
|
+
: typeof toolResultRaw === "string"
|
|
60
|
+
? toolResultRaw
|
|
61
|
+
: JSON.stringify(toolResultRaw ?? null);
|
|
62
|
+
return {
|
|
63
|
+
path,
|
|
64
|
+
start_line: readFileMeta.start,
|
|
65
|
+
end_line: readFileMeta.end,
|
|
66
|
+
truncated: readFileMeta.wasCapped,
|
|
67
|
+
content: rawContent,
|
|
68
|
+
note: readFileMeta.wasCapped
|
|
69
|
+
? `Capped to ${readFileDefaultMaxLines} lines. Request more with start_line/end_line.`
|
|
70
|
+
: undefined,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return toolResultRaw;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=toolExecution.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolExecution.helper.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/toolExecution.helper.ts"],"names":[],"mappings":"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","sourcesContent":["import { EVENT_TYPES, EventType } from \"../../../types/events.js\";\nimport { serializeError } from \"./errors.helper.js\";\n\nexport type Logger = (\n message: string,\n eventType: EventType,\n displayedSummary?: boolean,\n) => Promise<void>;\n\nexport async function executeToolHandler(params: {\n name: string;\n handler: ((args: any) => Promise<any>) | undefined;\n effectiveArgs: Record<string, unknown>;\n styleTokenKeySet: Set<string>;\n step: number;\n logger: Logger;\n}): Promise<unknown> {\n const { name, handler, effectiveArgs, styleTokenKeySet, step, logger } = params;\n\n if (!handler) {\n return {\n success: false,\n error: `No handler registered for \"${name}\".`,\n error_detail: {\n name: \"MissingToolHandlerError\",\n message: `No handler registered for \"${name}\".`,\n },\n };\n }\n\n try {\n if (name === \"update_global_styles\") {\n const flatKeys = Object.keys(effectiveArgs ?? {}).filter((k) =>\n styleTokenKeySet.has(k),\n );\n if (flatKeys.length === 0) {\n return {\n success: false,\n error: \"must include at least one token key/value\",\n error_detail: {\n name: \"InvalidToolArgumentsError\",\n message:\n 'update_global_styles requires at least one token key/value (e.g. { radius: \"0.75rem\" }).',\n },\n note: \"Resend update_global_styles with at least one token key/value, or skip this tool call.\",\n };\n }\n }\n return await handler(effectiveArgs);\n } catch (err) {\n logger(`AI tool: ${name} failed`, EVENT_TYPES.STEP_ERROR, true);\n console.error(\"Tool loop: handler threw\", err, {\n tool: name,\n step,\n });\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n error_detail: serializeError(err),\n note: \"Tool handler threw. Inspect error_detail and retry with corrected args or a different approach.\",\n };\n }\n}\n\nexport function postProcessToolResult(params: {\n name: string;\n toolResultRaw: unknown;\n effectiveArgs: Record<string, unknown>;\n readFileMeta: { start: number; end: number; wasCapped: boolean } | null;\n readFileDefaultMaxLines?: number;\n}): unknown {\n const { name, toolResultRaw, effectiveArgs, readFileMeta, readFileDefaultMaxLines } = params;\n\n if (name === \"read_file\" && readFileMeta) {\n const path = typeof effectiveArgs.path === \"string\" ? effectiveArgs.path : \"\";\n\n const originalJsonPayload =\n (toolResultRaw as any)?.kind === \"json\"\n ? (toolResultRaw as any)?.json\n : undefined;\n\n if (originalJsonPayload !== undefined) {\n // Token-efficient: return JSON as structured data (no double-stringifying).\n return { path, json: originalJsonPayload };\n }\n\n const rawContent =\n typeof (toolResultRaw as any)?.content === \"string\"\n ? String((toolResultRaw as any).content)\n : typeof toolResultRaw === \"string\"\n ? toolResultRaw\n : JSON.stringify(toolResultRaw ?? null);\n\n return {\n path,\n start_line: readFileMeta.start,\n end_line: readFileMeta.end,\n truncated: readFileMeta.wasCapped,\n content: rawContent,\n note: readFileMeta.wasCapped\n ? `Capped to ${readFileDefaultMaxLines} lines. Request more with start_line/end_line.`\n : undefined,\n };\n }\n\n return toolResultRaw;\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createWorkspaceToolImpls } from "../../tools/implementations/factories.js";
|
|
2
|
+
export declare function createToolHandlers(params: {
|
|
3
|
+
impls: ReturnType<typeof createWorkspaceToolImpls>;
|
|
4
|
+
workspaceRoot: string;
|
|
5
|
+
}): Record<string, (args: any) => Promise<any>>;
|
|
6
|
+
//# sourceMappingURL=toolHandlers.helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolHandlers.helper.d.ts","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/toolHandlers.helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAIpF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,KAAK,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;IACnD,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CA4F9C"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { getAvailableRoutes } from "../../tools/helpers/pageConfigJson.helpers.js";
|
|
2
|
+
import { nodeFs } from "./fsHelpers.js";
|
|
3
|
+
import { parsePlannerTasksUnknown } from "./plannerTaskParser.js";
|
|
4
|
+
export function createToolHandlers(params) {
|
|
5
|
+
return {
|
|
6
|
+
read_file: async (args) => {
|
|
7
|
+
const path = String(args.path ?? "");
|
|
8
|
+
const startLine = args.start_line === undefined ? undefined : Number(args.start_line);
|
|
9
|
+
const endLine = args.end_line === undefined ? undefined : Number(args.end_line);
|
|
10
|
+
const content = await params.impls.readFileImpl(path, startLine, endLine);
|
|
11
|
+
return { path, content };
|
|
12
|
+
},
|
|
13
|
+
write_file: (args) => params.impls.writeFileImpl(String(args.path ?? ""), String(args.content ?? "")),
|
|
14
|
+
list_dir: async (args) => {
|
|
15
|
+
const content = await params.impls.listDirImpl(String(args.path ?? ""), Number(args.depth ?? 1));
|
|
16
|
+
return { content };
|
|
17
|
+
},
|
|
18
|
+
search: async (args) => {
|
|
19
|
+
const results = await params.impls.searchImpl(String(args.search_query ?? ""));
|
|
20
|
+
return { results };
|
|
21
|
+
},
|
|
22
|
+
apply_patch: (args) => params.impls.applyPatchImpl(String(args.patch_string ?? "")),
|
|
23
|
+
update_global_styles: async (args) => {
|
|
24
|
+
const result = await params.impls.updateGlobalStylesImpl(args);
|
|
25
|
+
return result;
|
|
26
|
+
},
|
|
27
|
+
create_new_route: async (args) => {
|
|
28
|
+
const parentRoute = String(args.parent_route ?? "");
|
|
29
|
+
const routeName = String(args.route_name ?? "");
|
|
30
|
+
const result = await params.impls.createNewRouteImpl(parentRoute, routeName);
|
|
31
|
+
return result;
|
|
32
|
+
},
|
|
33
|
+
delete_element: async (args) => {
|
|
34
|
+
const route = String(args.route ?? "");
|
|
35
|
+
const element_id = String(args.element_id ?? "");
|
|
36
|
+
const result = await params.impls.deleteElementImpl(route, element_id);
|
|
37
|
+
return result;
|
|
38
|
+
},
|
|
39
|
+
insert_element: async (args) => {
|
|
40
|
+
const result = await params.impls.insertElementImpl(args);
|
|
41
|
+
if (!result.success) {
|
|
42
|
+
const available = await getAvailableRoutes({
|
|
43
|
+
workspaceRoot: params.workspaceRoot,
|
|
44
|
+
fs: nodeFs,
|
|
45
|
+
});
|
|
46
|
+
return {
|
|
47
|
+
success: false,
|
|
48
|
+
error: `insert_element failed: ${result.error}. Available routes are: ${JSON.stringify(available)}. If you intend to create a new route, create it using the 'create_new_route' tool.`,
|
|
49
|
+
available_routes: available,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
},
|
|
54
|
+
update_props: async (args) => {
|
|
55
|
+
const route = String(args.route ?? "");
|
|
56
|
+
const element_id = String(args.element_id ?? "");
|
|
57
|
+
const props = args.props;
|
|
58
|
+
const result = await params.impls.updatePropsImpl({
|
|
59
|
+
route,
|
|
60
|
+
element_id,
|
|
61
|
+
...props,
|
|
62
|
+
});
|
|
63
|
+
return result;
|
|
64
|
+
},
|
|
65
|
+
update_classname: async (args) => {
|
|
66
|
+
const route = String(args.route ?? "");
|
|
67
|
+
const element_id = String(args.element_id ?? "");
|
|
68
|
+
const class_name = String(args.class_name ?? "");
|
|
69
|
+
const result = await params.impls.updateClassNameImpl(route, element_id, class_name);
|
|
70
|
+
return result;
|
|
71
|
+
},
|
|
72
|
+
get_available_routes: async (args) => {
|
|
73
|
+
const routes = await getAvailableRoutes({ workspaceRoot: params.workspaceRoot, fs: nodeFs });
|
|
74
|
+
return { success: true, routes };
|
|
75
|
+
},
|
|
76
|
+
submit_codegen_done: async (args) => ({
|
|
77
|
+
success: true,
|
|
78
|
+
summary: String(args.summary ?? "").trim(),
|
|
79
|
+
}),
|
|
80
|
+
submit_planner_tasks: async (args) => {
|
|
81
|
+
const tasks = parsePlannerTasksUnknown(args.planner_tasks);
|
|
82
|
+
return { success: true, count: tasks.length };
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=toolHandlers.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolHandlers.helper.js","sourceRoot":"","sources":["../../../../src/ai/toolLoop/helpers/toolHandlers.helper.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAvailableRoutes } from \"../../tools/helpers/pageConfigJson.helpers.js\";\nimport { createWorkspaceToolImpls } from \"../../tools/implementations/factories.js\";\nimport { nodeFs } from \"./fsHelpers.js\";\nimport { parsePlannerTasksUnknown } from \"./plannerTaskParser.js\";\n\nexport function createToolHandlers(params: {\n impls: ReturnType<typeof createWorkspaceToolImpls>;\n workspaceRoot: string;\n}): Record<string, (args: any) => Promise<any>> {\n return {\n read_file: async (args) => {\n const path = String(args.path ?? \"\");\n const startLine =\n args.start_line === undefined ? undefined : Number(args.start_line);\n const endLine =\n args.end_line === undefined ? undefined : Number(args.end_line);\n const content = await params.impls.readFileImpl(path, startLine, endLine);\n return { path, content };\n },\n write_file: (args) =>\n params.impls.writeFileImpl(String(args.path ?? \"\"), String(args.content ?? \"\")),\n list_dir: async (args) => {\n const content = await params.impls.listDirImpl(\n String(args.path ?? \"\"),\n Number(args.depth ?? 1),\n );\n return { content };\n },\n search: async (args) => {\n const results = await params.impls.searchImpl(String(args.search_query ?? \"\"));\n return { results };\n },\n apply_patch: (args) =>\n params.impls.applyPatchImpl(String(args.patch_string ?? \"\")),\n update_global_styles: async (args) => {\n const result = await params.impls.updateGlobalStylesImpl(args);\n return result;\n },\n create_new_route: async (args) => {\n const parentRoute = String(args.parent_route ?? \"\");\n const routeName = String(args.route_name ?? \"\");\n const result = await params.impls.createNewRouteImpl(parentRoute, routeName);\n return result;\n },\n delete_element: async (args) => {\n const route = String(args.route ?? \"\");\n const element_id = String(args.element_id ?? \"\");\n const result = await params.impls.deleteElementImpl(route, element_id);\n return result;\n },\n insert_element: async (args) => {\n const result = await params.impls.insertElementImpl(args);\n if (!result.success) {\n const available = await getAvailableRoutes({\n workspaceRoot: params.workspaceRoot,\n fs: nodeFs,\n });\n return {\n success: false,\n error: `insert_element failed: ${result.error}. Available routes are: ${JSON.stringify(available)}. If you intend to create a new route, create it using the 'create_new_route' tool.`,\n available_routes: available,\n };\n }\n return result;\n },\n update_props: async (args) => {\n const route = String(args.route ?? \"\");\n const element_id = String(args.element_id ?? \"\");\n const props: any = args.props;\n const result = await params.impls.updatePropsImpl({\n route,\n element_id,\n ...props,\n });\n return result;\n },\n update_classname: async (args) => {\n const route = String(args.route ?? \"\");\n const element_id = String(args.element_id ?? \"\");\n const class_name = String(args.class_name ?? \"\");\n const result = await params.impls.updateClassNameImpl(\n route,\n element_id,\n class_name,\n );\n return result;\n },\n get_available_routes: async (args) => {\n const routes = await getAvailableRoutes({ workspaceRoot: params.workspaceRoot, fs: nodeFs });\n return { success: true, routes };\n },\n submit_codegen_done: async (args) => ({\n success: true,\n summary: String(args.summary ?? \"\").trim(),\n }),\n submit_planner_tasks: async (args) => {\n const tasks = parsePlannerTasksUnknown(args.planner_tasks);\n return { success: true, count: tasks.length };\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ToolEvent } from "./toolLoopContext.js";
|
|
2
|
+
export type ToolEventSummaryInput = {
|
|
3
|
+
name: string;
|
|
4
|
+
effectiveArgs: Record<string, unknown>;
|
|
5
|
+
modelArgs: Record<string, unknown>;
|
|
6
|
+
readFileMeta: {
|
|
7
|
+
start: number;
|
|
8
|
+
end: number;
|
|
9
|
+
wasCapped: boolean;
|
|
10
|
+
} | null;
|
|
11
|
+
toolResult: unknown;
|
|
12
|
+
toolResultRaw: unknown;
|
|
13
|
+
};
|
|
14
|
+
export declare const buildToolEventSummary: (input: ToolEventSummaryInput) => ToolEvent;
|
|
15
|
+
export declare const recordToolEvent: (params: {
|
|
16
|
+
name: string;
|
|
17
|
+
effectiveArgs: Record<string, unknown>;
|
|
18
|
+
modelArgs: Record<string, unknown>;
|
|
19
|
+
readFileMeta: {
|
|
20
|
+
start: number;
|
|
21
|
+
end: number;
|
|
22
|
+
wasCapped: boolean;
|
|
23
|
+
} | null;
|
|
24
|
+
toolEvents: ToolEvent[];
|
|
25
|
+
toolResult: unknown;
|
|
26
|
+
toolResultRaw: unknown;
|
|
27
|
+
}) => void;
|
|
28
|
+
//# sourceMappingURL=toolEventSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolEventSummary.d.ts","sourceRoot":"","sources":["../../../src/ai/toolLoop/toolEventSummary.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,MAAM,qBAAqB,GAAG;IAClC,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,CAAC;AA0RF,eAAO,MAAM,qBAAqB,GAChC,OAAO,qBAAqB,KAC3B,SAMF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ;IACtC,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,SAAS,EAAE,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CACxB,SAQA,CAAC"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { STYLE_TOKEN_KEYS } from "../../types/styleConfig.js";
|
|
2
|
+
import { getApplyPatchEventMeta } from "./helpers/applyPatch.helper.js";
|
|
3
|
+
const oneLine = (value, maxLen = 140) => {
|
|
4
|
+
let raw = "";
|
|
5
|
+
if (typeof value === "string") {
|
|
6
|
+
raw = value;
|
|
7
|
+
}
|
|
8
|
+
else if (value === undefined) {
|
|
9
|
+
raw = "";
|
|
10
|
+
}
|
|
11
|
+
else if (value === null) {
|
|
12
|
+
raw = "null";
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
raw = JSON.stringify(value);
|
|
16
|
+
}
|
|
17
|
+
const collapsed = raw.replace(/\s+/g, " ").trim();
|
|
18
|
+
if (collapsed.length <= maxLen)
|
|
19
|
+
return collapsed;
|
|
20
|
+
return `${collapsed.slice(0, Math.max(0, maxLen - 1))}…`;
|
|
21
|
+
};
|
|
22
|
+
const getStringArg = (effectiveArgs, key) => oneLine(effectiveArgs[key] ?? "");
|
|
23
|
+
const summarizeReadFile = (input) => {
|
|
24
|
+
if (input.name !== "read_file")
|
|
25
|
+
return null;
|
|
26
|
+
const path = typeof input.effectiveArgs.path === "string" ? input.effectiveArgs.path : "";
|
|
27
|
+
const start = input.readFileMeta?.start ?? Number(input.effectiveArgs.start_line ?? 1);
|
|
28
|
+
const end = input.readFileMeta?.end ?? Number(input.effectiveArgs.end_line ?? start);
|
|
29
|
+
return {
|
|
30
|
+
name: input.name,
|
|
31
|
+
summary: `read_file ${path}:${start}-${end}${input.readFileMeta?.wasCapped ? " (capped)" : ""}`,
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
const summarizeApplyPatch = (input) => {
|
|
35
|
+
if (input.name !== "apply_patch")
|
|
36
|
+
return null;
|
|
37
|
+
const meta = typeof input.modelArgs.patch_string === "object"
|
|
38
|
+
? input.modelArgs.patch_string
|
|
39
|
+
: null;
|
|
40
|
+
const fallback = getApplyPatchEventMeta(input.effectiveArgs);
|
|
41
|
+
let ok = "done";
|
|
42
|
+
if (input.toolResult?.success === true) {
|
|
43
|
+
ok = "success";
|
|
44
|
+
}
|
|
45
|
+
else if (input.toolResult?.success === false) {
|
|
46
|
+
ok = "failure";
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
name: input.name,
|
|
50
|
+
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}`,
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
const summarizeCreateNewRoute = (input) => {
|
|
54
|
+
if (input.name !== "create_new_route")
|
|
55
|
+
return null;
|
|
56
|
+
const parentRoute = getStringArg(input.effectiveArgs, "parent_route") || "/";
|
|
57
|
+
const routeName = getStringArg(input.effectiveArgs, "route_name");
|
|
58
|
+
const successVal = input.toolResult?.success;
|
|
59
|
+
if (typeof successVal !== "boolean")
|
|
60
|
+
return null;
|
|
61
|
+
const route = oneLine(input.toolResult?.route ?? "");
|
|
62
|
+
const createdFiles = Array.isArray(input.toolResult?.created_files)
|
|
63
|
+
? input.toolResult.created_files
|
|
64
|
+
: [];
|
|
65
|
+
const filesText = successVal === true ? ` created_files=${createdFiles.length}` : "";
|
|
66
|
+
const routeText = route ? ` route=${route}` : "";
|
|
67
|
+
const errText = successVal === false
|
|
68
|
+
? ` error=${oneLine(input.toolResult?.error ?? "unknown", 160)}`
|
|
69
|
+
: "";
|
|
70
|
+
return {
|
|
71
|
+
name: input.name,
|
|
72
|
+
summary: `create_new_route ${successVal ? "success" : "failure"} parent_route=${parentRoute} route_name=${routeName}${routeText}${filesText}${errText}`,
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
const summarizeInsertElement = (input) => {
|
|
76
|
+
if (input.name !== "insert_element")
|
|
77
|
+
return null;
|
|
78
|
+
const route = getStringArg(input.effectiveArgs, "route");
|
|
79
|
+
const parentId = getStringArg(input.effectiveArgs, "parent_id");
|
|
80
|
+
const beforeId = getStringArg(input.effectiveArgs, "before_id");
|
|
81
|
+
const successVal = input.toolResult?.success;
|
|
82
|
+
if (typeof successVal !== "boolean")
|
|
83
|
+
return null;
|
|
84
|
+
const insertedId = oneLine(input.toolResult?.inserted_id ?? "");
|
|
85
|
+
const changedVal = input.toolResult?.changed;
|
|
86
|
+
const changedText = typeof changedVal === "boolean" ? ` changed=${changedVal}` : "";
|
|
87
|
+
const beforeText = beforeId ? ` before_id=${beforeId}` : "";
|
|
88
|
+
const insertedText = insertedId ? ` inserted_id=${insertedId}` : "";
|
|
89
|
+
const errText = successVal === false
|
|
90
|
+
? ` error=${oneLine(input.toolResult?.error ?? "unknown", 160)}`
|
|
91
|
+
: "";
|
|
92
|
+
return {
|
|
93
|
+
name: input.name,
|
|
94
|
+
summary: `insert_element ${successVal ? "success" : "failure"} route=${route} parent_id=${parentId}${beforeText}${insertedText}${changedText}${errText}`,
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
const summarizeUpdateClassname = (input) => {
|
|
98
|
+
if (input.name !== "update_classname")
|
|
99
|
+
return null;
|
|
100
|
+
const route = getStringArg(input.effectiveArgs, "route");
|
|
101
|
+
const elementId = getStringArg(input.effectiveArgs, "element_id");
|
|
102
|
+
const className = oneLine(input.effectiveArgs.className ?? "", 160);
|
|
103
|
+
const successVal = input.toolResult?.success;
|
|
104
|
+
if (typeof successVal !== "boolean")
|
|
105
|
+
return null;
|
|
106
|
+
const changedVal = input.toolResult?.changed;
|
|
107
|
+
const changedText = typeof changedVal === "boolean" ? ` changed=${changedVal}` : "";
|
|
108
|
+
const updatedId = oneLine(input.toolResult?.updated_id ?? "");
|
|
109
|
+
const updatedText = updatedId ? ` updated_id=${updatedId}` : "";
|
|
110
|
+
const errText = successVal === false
|
|
111
|
+
? ` error=${oneLine(input.toolResult?.error ?? "unknown", 160)}`
|
|
112
|
+
: "";
|
|
113
|
+
return {
|
|
114
|
+
name: input.name,
|
|
115
|
+
summary: `update_classname ${successVal ? "success" : "failure"} route=${route} element_id=${elementId} className="${className}"${updatedText}${changedText}${errText}`,
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
const summarizeUpdateProps = (input) => {
|
|
119
|
+
if (input.name !== "update_props")
|
|
120
|
+
return null;
|
|
121
|
+
const route = getStringArg(input.effectiveArgs, "route");
|
|
122
|
+
const elementId = getStringArg(input.effectiveArgs, "element_id");
|
|
123
|
+
const successVal = input.toolResult?.success;
|
|
124
|
+
if (typeof successVal !== "boolean")
|
|
125
|
+
return null;
|
|
126
|
+
const changedVal = input.toolResult?.changed;
|
|
127
|
+
const changedText = typeof changedVal === "boolean" ? ` changed=${changedVal}` : "";
|
|
128
|
+
const updatedId = oneLine(input.toolResult?.updated_id ?? "");
|
|
129
|
+
const updatedText = updatedId ? ` updated_id=${updatedId}` : "";
|
|
130
|
+
const patchKeys = Object.keys(input.effectiveArgs ?? {}).filter((k) => {
|
|
131
|
+
if (k === "route" || k === "element_id")
|
|
132
|
+
return false;
|
|
133
|
+
const v = input.effectiveArgs[k];
|
|
134
|
+
return v !== undefined && v !== null;
|
|
135
|
+
});
|
|
136
|
+
patchKeys.sort((a, b) => a.localeCompare(b));
|
|
137
|
+
const keysText = patchKeys.length > 0
|
|
138
|
+
? ` keys=${oneLine(patchKeys.join(","), 140)}`
|
|
139
|
+
: "";
|
|
140
|
+
const errText = successVal === false
|
|
141
|
+
? ` error=${oneLine(input.toolResult?.error ?? "unknown", 160)}`
|
|
142
|
+
: "";
|
|
143
|
+
return {
|
|
144
|
+
name: input.name,
|
|
145
|
+
summary: `update_props ${successVal ? "success" : "failure"} route=${route} element_id=${elementId}${keysText}${updatedText}${changedText}${errText}`,
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
const summarizeUpdateGlobalStyles = (input) => {
|
|
149
|
+
if (input.name !== "update_global_styles")
|
|
150
|
+
return null;
|
|
151
|
+
const tokenKeySet = new Set(STYLE_TOKEN_KEYS);
|
|
152
|
+
const tokenKeys = Object.keys(input.effectiveArgs ?? {}).filter((k) => tokenKeySet.has(k));
|
|
153
|
+
const successVal = input.toolResult?.success;
|
|
154
|
+
if (typeof successVal !== "boolean")
|
|
155
|
+
return null;
|
|
156
|
+
const changedVal = input.toolResult?.changed;
|
|
157
|
+
const changedText = typeof changedVal === "boolean" ? ` changed=${changedVal}` : "";
|
|
158
|
+
const version = input.toolResult?.version;
|
|
159
|
+
const versionText = typeof version === "number" && Number.isFinite(version)
|
|
160
|
+
? ` version=${version}`
|
|
161
|
+
: "";
|
|
162
|
+
const created = input.toolResult?.created;
|
|
163
|
+
const createdText = typeof created === "boolean" ? ` created=${created}` : "";
|
|
164
|
+
tokenKeys.sort((a, b) => a.localeCompare(b));
|
|
165
|
+
const keysText = tokenKeys.length > 0
|
|
166
|
+
? ` tokens=${oneLine(tokenKeys.join(","), 160)}`
|
|
167
|
+
: "";
|
|
168
|
+
const errText = successVal === false
|
|
169
|
+
? ` error=${oneLine(input.toolResult?.error ?? "unknown", 160)}`
|
|
170
|
+
: "";
|
|
171
|
+
return {
|
|
172
|
+
name: input.name,
|
|
173
|
+
summary: `update_global_styles ${successVal ? "success" : "failure"}${keysText}${versionText}${createdText}${changedText}${errText}`,
|
|
174
|
+
};
|
|
175
|
+
};
|
|
176
|
+
const summarizeSearch = (input) => {
|
|
177
|
+
if (input.name !== "search")
|
|
178
|
+
return null;
|
|
179
|
+
const q = typeof input.effectiveArgs.search_query === "string" ? input.effectiveArgs.search_query.trim() : "";
|
|
180
|
+
const results = Array.isArray(input.toolResultRaw?.results)
|
|
181
|
+
? input.toolResultRaw.results
|
|
182
|
+
: [];
|
|
183
|
+
return {
|
|
184
|
+
name: input.name,
|
|
185
|
+
summary: `search "${q}" -> ${results.length} results`,
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
const summarizeListDir = (input) => {
|
|
189
|
+
if (input.name !== "list_dir")
|
|
190
|
+
return null;
|
|
191
|
+
const p = typeof input.effectiveArgs.path === "string" ? input.effectiveArgs.path : "";
|
|
192
|
+
const d = Number(input.effectiveArgs.depth ?? 1);
|
|
193
|
+
return { name: input.name, summary: `list_dir ${p} depth=${d}` };
|
|
194
|
+
};
|
|
195
|
+
const summarizeCreateFile = (input) => {
|
|
196
|
+
if (input.name !== "create_file")
|
|
197
|
+
return null;
|
|
198
|
+
const p = typeof input.effectiveArgs.path === "string" ? input.effectiveArgs.path : "";
|
|
199
|
+
return { name: input.name, summary: `create_file ${p}` };
|
|
200
|
+
};
|
|
201
|
+
const summarizeDeleteFile = (input) => {
|
|
202
|
+
if (input.name !== "delete_file")
|
|
203
|
+
return null;
|
|
204
|
+
const p = typeof input.effectiveArgs.path === "string" ? input.effectiveArgs.path : "";
|
|
205
|
+
return { name: input.name, summary: `delete_file ${p}` };
|
|
206
|
+
};
|
|
207
|
+
const summarizeGenericSuccessFailure = (input) => {
|
|
208
|
+
const successVal = input.toolResult?.success;
|
|
209
|
+
if (typeof successVal !== "boolean")
|
|
210
|
+
return null;
|
|
211
|
+
const changedVal = input.toolResult?.changed;
|
|
212
|
+
const changedText = typeof changedVal === "boolean" ? ` changed=${changedVal}` : "";
|
|
213
|
+
const errText = successVal === false
|
|
214
|
+
? ` error=${oneLine(input.toolResult?.error ?? "unknown", 160)}`
|
|
215
|
+
: "";
|
|
216
|
+
return {
|
|
217
|
+
name: input.name,
|
|
218
|
+
summary: `${input.name} ${successVal ? "success" : "failure"}${changedText}${errText}`,
|
|
219
|
+
};
|
|
220
|
+
};
|
|
221
|
+
const SUMMARIZERS = [
|
|
222
|
+
summarizeReadFile,
|
|
223
|
+
summarizeApplyPatch,
|
|
224
|
+
summarizeCreateNewRoute,
|
|
225
|
+
summarizeInsertElement,
|
|
226
|
+
summarizeUpdateClassname,
|
|
227
|
+
summarizeUpdateProps,
|
|
228
|
+
summarizeUpdateGlobalStyles,
|
|
229
|
+
summarizeSearch,
|
|
230
|
+
summarizeListDir,
|
|
231
|
+
summarizeCreateFile,
|
|
232
|
+
summarizeDeleteFile,
|
|
233
|
+
summarizeGenericSuccessFailure,
|
|
234
|
+
];
|
|
235
|
+
export const buildToolEventSummary = (input) => {
|
|
236
|
+
for (const summarizer of SUMMARIZERS) {
|
|
237
|
+
const evt = summarizer(input);
|
|
238
|
+
if (evt)
|
|
239
|
+
return evt;
|
|
240
|
+
}
|
|
241
|
+
return { name: input.name, summary: `${input.name} called` };
|
|
242
|
+
};
|
|
243
|
+
export const recordToolEvent = (params) => {
|
|
244
|
+
const { toolEvents, name } = params;
|
|
245
|
+
try {
|
|
246
|
+
toolEvents.push(buildToolEventSummary(params));
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
toolEvents.push({ name, summary: `${name} called` });
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
//# sourceMappingURL=toolEventSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolEventSummary.js","sourceRoot":"","sources":["../../../src/ai/toolLoop/toolEventSummary.ts"],"names":[],"mappings":"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","sourcesContent":["import { STYLE_TOKEN_KEYS } from \"../../types/styleConfig.js\";\nimport { getApplyPatchEventMeta } from \"./helpers/applyPatch.helper.js\";\nimport { ToolEvent } from \"./toolLoopContext.js\";\n\nexport type ToolEventSummaryInput = {\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\nconst oneLine = (value: unknown, maxLen = 140) => {\n let raw = \"\";\n if (typeof value === \"string\") {\n raw = value;\n } else if (value === undefined) {\n raw = \"\";\n } else if (value === null) {\n raw = \"null\";\n } else {\n raw = JSON.stringify(value);\n }\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\nconst getStringArg = (effectiveArgs: Record<string, unknown>, key: string) =>\n oneLine(effectiveArgs[key] ?? \"\");\n\ntype ToolEventSummarizer = (input: ToolEventSummaryInput) => ToolEvent | null;\n\nconst summarizeReadFile: ToolEventSummarizer = (input) => {\n if (input.name !== \"read_file\") return null;\n\n const path = typeof input.effectiveArgs.path === \"string\" ? input.effectiveArgs.path : \"\";\n const start =\n input.readFileMeta?.start ?? Number(input.effectiveArgs.start_line ?? 1);\n const end =\n input.readFileMeta?.end ?? Number(input.effectiveArgs.end_line ?? start);\n\n return {\n name: input.name,\n summary: `read_file ${path}:${start}-${end}${\n input.readFileMeta?.wasCapped ? \" (capped)\" : \"\"\n }`,\n };\n};\n\nconst summarizeApplyPatch: ToolEventSummarizer = (input) => {\n if (input.name !== \"apply_patch\") return null;\n\n const meta =\n typeof (input.modelArgs as any).patch_string === \"object\"\n ? ((input.modelArgs as any).patch_string as any)\n : null;\n const fallback = getApplyPatchEventMeta(input.effectiveArgs);\n let ok = \"done\";\n if ((input.toolResult as any)?.success === true) {\n ok = \"success\";\n } else if ((input.toolResult as any)?.success === false) {\n ok = \"failure\";\n }\n\n return {\n name: input.name,\n summary: `apply_patch files=${JSON.stringify(\n meta?.files ?? fallback.files,\n )} sha256=${String(meta?.sha256 ?? fallback.sha256).slice(0, 12)} chars=${\n meta?.chars ?? fallback.chars\n } result=${ok}`,\n };\n};\n\nconst summarizeCreateNewRoute: ToolEventSummarizer = (input) => {\n if (input.name !== \"create_new_route\") return null;\n\n const parentRoute = getStringArg(input.effectiveArgs, \"parent_route\") || \"/\";\n const routeName = getStringArg(input.effectiveArgs, \"route_name\");\n const successVal = (input.toolResult as any)?.success;\n if (typeof successVal !== \"boolean\") return null;\n\n const route = oneLine((input.toolResult as any)?.route ?? \"\");\n const createdFiles = Array.isArray((input.toolResult as any)?.created_files)\n ? ((input.toolResult as any).created_files as unknown[])\n : [];\n\n const filesText =\n successVal === true ? ` created_files=${createdFiles.length}` : \"\";\n const routeText = route ? ` route=${route}` : \"\";\n const errText =\n successVal === false\n ? ` error=${oneLine((input.toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n\n return {\n name: input.name,\n summary: `create_new_route ${successVal ? \"success\" : \"failure\"} parent_route=${parentRoute} route_name=${routeName}${routeText}${filesText}${errText}`,\n };\n};\n\nconst summarizeInsertElement: ToolEventSummarizer = (input) => {\n if (input.name !== \"insert_element\") return null;\n\n const route = getStringArg(input.effectiveArgs, \"route\");\n const parentId = getStringArg(input.effectiveArgs, \"parent_id\");\n const beforeId = getStringArg(input.effectiveArgs, \"before_id\");\n const successVal = (input.toolResult as any)?.success;\n if (typeof successVal !== \"boolean\") return null;\n\n const insertedId = oneLine((input.toolResult as any)?.inserted_id ?? \"\");\n const changedVal = (input.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((input.toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n\n return {\n name: input.name,\n summary: `insert_element ${successVal ? \"success\" : \"failure\"} route=${route} parent_id=${parentId}${beforeText}${insertedText}${changedText}${errText}`,\n };\n};\n\nconst summarizeUpdateClassname: ToolEventSummarizer = (input) => {\n if (input.name !== \"update_classname\") return null;\n\n const route = getStringArg(input.effectiveArgs, \"route\");\n const elementId = getStringArg(input.effectiveArgs, \"element_id\");\n const className = oneLine((input.effectiveArgs as any).className ?? \"\", 160);\n const successVal = (input.toolResult as any)?.success;\n if (typeof successVal !== \"boolean\") return null;\n\n const changedVal = (input.toolResult as any)?.changed;\n const changedText =\n typeof changedVal === \"boolean\" ? ` changed=${changedVal}` : \"\";\n const updatedId = oneLine((input.toolResult as any)?.updated_id ?? \"\");\n const updatedText = updatedId ? ` updated_id=${updatedId}` : \"\";\n const errText =\n successVal === false\n ? ` error=${oneLine((input.toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n\n return {\n name: input.name,\n summary: `update_classname ${successVal ? \"success\" : \"failure\"} route=${route} element_id=${elementId} className=\"${className}\"${updatedText}${changedText}${errText}`,\n };\n};\n\nconst summarizeUpdateProps: ToolEventSummarizer = (input) => {\n if (input.name !== \"update_props\") return null;\n\n const route = getStringArg(input.effectiveArgs, \"route\");\n const elementId = getStringArg(input.effectiveArgs, \"element_id\");\n const successVal = (input.toolResult as any)?.success;\n if (typeof successVal !== \"boolean\") return null;\n\n const changedVal = (input.toolResult as any)?.changed;\n const changedText =\n typeof changedVal === \"boolean\" ? ` changed=${changedVal}` : \"\";\n const updatedId = oneLine((input.toolResult as any)?.updated_id ?? \"\");\n const updatedText = updatedId ? ` updated_id=${updatedId}` : \"\";\n\n const patchKeys = Object.keys(input.effectiveArgs ?? {}).filter((k) => {\n if (k === \"route\" || k === \"element_id\") return false;\n const v = (input.effectiveArgs as any)[k];\n return v !== undefined && v !== null;\n });\n patchKeys.sort((a, b) => a.localeCompare(b));\n const keysText =\n patchKeys.length > 0\n ? ` keys=${oneLine(patchKeys.join(\",\"), 140)}`\n : \"\";\n\n const errText =\n successVal === false\n ? ` error=${oneLine((input.toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n\n return {\n name: input.name,\n summary: `update_props ${successVal ? \"success\" : \"failure\"} route=${route} element_id=${elementId}${keysText}${updatedText}${changedText}${errText}`,\n };\n};\n\nconst summarizeUpdateGlobalStyles: ToolEventSummarizer = (input) => {\n if (input.name !== \"update_global_styles\") return null;\n\n const tokenKeySet = new Set<string>(STYLE_TOKEN_KEYS as unknown as string[]);\n const tokenKeys = Object.keys(input.effectiveArgs ?? {}).filter((k) =>\n tokenKeySet.has(k),\n );\n const successVal = (input.toolResult as any)?.success;\n if (typeof successVal !== \"boolean\") return null;\n\n const changedVal = (input.toolResult as any)?.changed;\n const changedText =\n typeof changedVal === \"boolean\" ? ` changed=${changedVal}` : \"\";\n const version = (input.toolResult as any)?.version;\n const versionText =\n typeof version === \"number\" && Number.isFinite(version)\n ? ` version=${version}`\n : \"\";\n const created = (input.toolResult as any)?.created;\n const createdText = typeof created === \"boolean\" ? ` created=${created}` : \"\";\n tokenKeys.sort((a, b) => a.localeCompare(b));\n const keysText =\n tokenKeys.length > 0\n ? ` tokens=${oneLine(tokenKeys.join(\",\"), 160)}`\n : \"\";\n const errText =\n successVal === false\n ? ` error=${oneLine((input.toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n\n return {\n name: input.name,\n summary: `update_global_styles ${successVal ? \"success\" : \"failure\"}${keysText}${versionText}${createdText}${changedText}${errText}`,\n };\n};\n\nconst summarizeSearch: ToolEventSummarizer = (input) => {\n if (input.name !== \"search\") return null;\n\n const q = typeof input.effectiveArgs.search_query === \"string\" ? input.effectiveArgs.search_query.trim() : \"\";\n const results = Array.isArray((input.toolResultRaw as any)?.results)\n ? (input.toolResultRaw as any).results\n : [];\n\n return {\n name: input.name,\n summary: `search \"${q}\" -> ${results.length} results`,\n };\n};\n\nconst summarizeListDir: ToolEventSummarizer = (input) => {\n if (input.name !== \"list_dir\") return null;\n\n const p = typeof input.effectiveArgs.path === \"string\" ? input.effectiveArgs.path : \"\";\n const d = Number(input.effectiveArgs.depth ?? 1);\n return { name: input.name, summary: `list_dir ${p} depth=${d}` };\n};\n\nconst summarizeCreateFile: ToolEventSummarizer = (input) => {\n if (input.name !== \"create_file\") return null;\n const p = typeof input.effectiveArgs.path === \"string\" ? input.effectiveArgs.path : \"\";\n return { name: input.name, summary: `create_file ${p}` };\n};\n\nconst summarizeDeleteFile: ToolEventSummarizer = (input) => {\n if (input.name !== \"delete_file\") return null;\n const p = typeof input.effectiveArgs.path === \"string\" ? input.effectiveArgs.path : \"\";\n return { name: input.name, summary: `delete_file ${p}` };\n};\n\nconst summarizeGenericSuccessFailure: ToolEventSummarizer = (input) => {\n const successVal = (input.toolResult as any)?.success;\n if (typeof successVal !== \"boolean\") return null;\n\n const changedVal = (input.toolResult as any)?.changed;\n const changedText =\n typeof changedVal === \"boolean\" ? ` changed=${changedVal}` : \"\";\n const errText =\n successVal === false\n ? ` error=${oneLine((input.toolResult as any)?.error ?? \"unknown\", 160)}`\n : \"\";\n\n return {\n name: input.name,\n summary: `${input.name} ${successVal ? \"success\" : \"failure\"}${changedText}${errText}`,\n };\n};\n\nconst SUMMARIZERS: ToolEventSummarizer[] = [\n summarizeReadFile,\n summarizeApplyPatch,\n summarizeCreateNewRoute,\n summarizeInsertElement,\n summarizeUpdateClassname,\n summarizeUpdateProps,\n summarizeUpdateGlobalStyles,\n summarizeSearch,\n summarizeListDir,\n summarizeCreateFile,\n summarizeDeleteFile,\n summarizeGenericSuccessFailure,\n];\n\nexport const buildToolEventSummary = (\n input: ToolEventSummaryInput,\n): ToolEvent => {\n for (const summarizer of SUMMARIZERS) {\n const evt = summarizer(input);\n if (evt) return evt;\n }\n return { name: input.name, summary: `${input.name} called` };\n};\n\nexport const recordToolEvent = (params: {\n name: string;\n effectiveArgs: Record<string, unknown>;\n modelArgs: Record<string, unknown>;\n readFileMeta: { start: number; end: number; wasCapped: boolean } | null;\n toolEvents: ToolEvent[];\n toolResult: unknown;\n toolResultRaw: unknown;\n}) => {\n const { toolEvents, name } = params;\n try {\n toolEvents.push(buildToolEventSummary(params));\n } catch {\n toolEvents.push({ name, summary: `${name} called` });\n return;\n }\n};\n"]}
|
|
@@ -16,18 +16,4 @@ export declare const compactForModel: (input: {
|
|
|
16
16
|
toolEvents: ToolEvent[];
|
|
17
17
|
policy: Required<ToolLoopContextPolicy>;
|
|
18
18
|
}) => any[];
|
|
19
|
-
export declare const normalizeReadFileArgs: (args: Record<string, unknown>, maxLines: number) => {
|
|
20
|
-
effectiveArgs: {
|
|
21
|
-
start_line: number;
|
|
22
|
-
end_line: number;
|
|
23
|
-
};
|
|
24
|
-
start: number;
|
|
25
|
-
end: number;
|
|
26
|
-
wasCapped: boolean;
|
|
27
|
-
};
|
|
28
|
-
export declare const getApplyPatchEventMeta: (args: Record<string, unknown>) => {
|
|
29
|
-
chars: number;
|
|
30
|
-
sha256: string;
|
|
31
|
-
files: string[];
|
|
32
|
-
};
|
|
33
19
|
//# sourceMappingURL=toolLoopContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolLoopContext.d.ts","sourceRoot":"","sources":["../../../src/ai/toolLoop/toolLoopContext.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,qBAAqB,CAKlE,CAAC;
|
|
1
|
+
{"version":3,"file":"toolLoopContext.d.ts","sourceRoot":"","sources":["../../../src/ai/toolLoop/toolLoopContext.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,qBAAqB,CAKlE,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,EACZ,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,4BA0B9B,CAAC;AAiBF,eAAO,MAAM,eAAe,GAAI,OAAO;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,GAAG,EAAE,CAAC;IACrB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC;CACzC,UA8BA,CAAC"}
|