@vedangiitb/qwintly-core 1.4.12 → 1.4.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/generate/gemini.client.js +1 -1
- package/dist/ai/generate/gemini.client.js.map +1 -1
- package/dist/ai/generate/generateClient.d.ts.map +1 -1
- package/dist/ai/generate/generateClient.js +7 -3
- package/dist/ai/generate/generateClient.js.map +1 -1
- package/dist/ai/toolLoop/helpers/aiCall.helper.d.ts +16 -0
- package/dist/ai/toolLoop/helpers/aiCall.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/aiCall.helper.js +23 -0
- package/dist/ai/toolLoop/helpers/aiCall.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/applyPatch.helper.d.ts +6 -0
- package/dist/ai/toolLoop/helpers/applyPatch.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/applyPatch.helper.js +10 -0
- package/dist/ai/toolLoop/helpers/applyPatch.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/errors.helper.d.ts +15 -0
- package/dist/ai/toolLoop/helpers/errors.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/errors.helper.js +50 -0
- package/dist/ai/toolLoop/helpers/errors.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/fsHelpers.d.ts +5 -0
- package/dist/ai/toolLoop/helpers/fsHelpers.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/fsHelpers.js +28 -0
- package/dist/ai/toolLoop/helpers/fsHelpers.js.map +1 -0
- package/dist/ai/toolLoop/helpers/patchRetry.helper.d.ts +11 -0
- package/dist/ai/toolLoop/helpers/patchRetry.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/patchRetry.helper.js +30 -0
- package/dist/ai/toolLoop/helpers/patchRetry.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/persistTokens.helpers.d.ts +7 -0
- package/dist/ai/toolLoop/helpers/persistTokens.helpers.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/persistTokens.helpers.js +25 -0
- package/dist/ai/toolLoop/helpers/persistTokens.helpers.js.map +1 -0
- package/dist/ai/toolLoop/{plannerTaskParser.d.ts → helpers/plannerTaskParser.d.ts} +1 -1
- package/dist/ai/toolLoop/helpers/plannerTaskParser.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/plannerTaskParser.js.map +1 -0
- package/dist/ai/toolLoop/helpers/readFile.helpers.d.ts +10 -0
- package/dist/ai/toolLoop/helpers/readFile.helpers.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/readFile.helpers.js +26 -0
- package/dist/ai/toolLoop/helpers/readFile.helpers.js.map +1 -0
- package/dist/ai/toolLoop/helpers/signatures.helper.d.ts +2 -0
- package/dist/ai/toolLoop/helpers/signatures.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/signatures.helper.js +23 -0
- package/dist/ai/toolLoop/helpers/signatures.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/toolArgs.helper.d.ts +12 -0
- package/dist/ai/toolLoop/helpers/toolArgs.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/toolArgs.helper.js +40 -0
- package/dist/ai/toolLoop/helpers/toolArgs.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/toolExecution.helper.d.ts +22 -0
- package/dist/ai/toolLoop/helpers/toolExecution.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/toolExecution.helper.js +75 -0
- package/dist/ai/toolLoop/helpers/toolExecution.helper.js.map +1 -0
- package/dist/ai/toolLoop/helpers/toolHandlers.helper.d.ts +6 -0
- package/dist/ai/toolLoop/helpers/toolHandlers.helper.d.ts.map +1 -0
- package/dist/ai/toolLoop/helpers/toolHandlers.helper.js +86 -0
- package/dist/ai/toolLoop/helpers/toolHandlers.helper.js.map +1 -0
- package/dist/ai/toolLoop/toolEventSummary.d.ts +28 -0
- package/dist/ai/toolLoop/toolEventSummary.d.ts.map +1 -0
- package/dist/ai/toolLoop/toolEventSummary.js +253 -0
- package/dist/ai/toolLoop/toolEventSummary.js.map +1 -0
- package/dist/ai/toolLoop/toolLoopContext.d.ts +0 -14
- package/dist/ai/toolLoop/toolLoopContext.d.ts.map +1 -1
- package/dist/ai/toolLoop/toolLoopContext.js +7 -50
- package/dist/ai/toolLoop/toolLoopContext.js.map +1 -1
- package/dist/ai/toolLoop/toolLoopRunner.d.ts +6 -5
- package/dist/ai/toolLoop/toolLoopRunner.d.ts.map +1 -1
- package/dist/ai/toolLoop/toolLoopRunner.js +48 -281
- package/dist/ai/toolLoop/toolLoopRunner.js.map +1 -1
- package/dist/ai/toolLoop/toolStatusMessage.d.ts +6 -0
- package/dist/ai/toolLoop/toolStatusMessage.d.ts.map +1 -0
- package/dist/ai/toolLoop/toolStatusMessage.js +140 -0
- package/dist/ai/toolLoop/toolStatusMessage.js.map +1 -0
- package/dist/ai/tools/helpers/applyPatch.helpers.d.ts.map +1 -1
- package/dist/ai/tools/helpers/applyPatch.helpers.js +9 -4
- package/dist/ai/tools/helpers/applyPatch.helpers.js.map +1 -1
- package/dist/ai/tools/helpers/fileSystem.helpers.d.ts.map +1 -1
- package/dist/ai/tools/helpers/fileSystem.helpers.js +7 -1
- package/dist/ai/tools/helpers/fileSystem.helpers.js.map +1 -1
- package/dist/ai/tools/helpers/pageConfigJson.helpers.d.ts +13 -0
- package/dist/ai/tools/helpers/pageConfigJson.helpers.d.ts.map +1 -1
- package/dist/ai/tools/helpers/pageConfigJson.helpers.js +51 -21
- package/dist/ai/tools/helpers/pageConfigJson.helpers.js.map +1 -1
- package/dist/ai/tools/implementations/applyPatch.impl.js +2 -2
- package/dist/ai/tools/implementations/applyPatch.impl.js.map +1 -1
- package/dist/ai/tools/implementations/createNewRoute.impl.js +1 -1
- package/dist/ai/tools/implementations/createNewRoute.impl.js.map +1 -1
- package/dist/ai/tools/implementations/deleteElement.impl.d.ts.map +1 -1
- package/dist/ai/tools/implementations/deleteElement.impl.js +5 -37
- package/dist/ai/tools/implementations/deleteElement.impl.js.map +1 -1
- package/dist/ai/tools/implementations/insertElement.impl.d.ts.map +1 -1
- package/dist/ai/tools/implementations/insertElement.impl.js +9 -46
- package/dist/ai/tools/implementations/insertElement.impl.js.map +1 -1
- package/dist/ai/tools/implementations/updateClassName.impl.d.ts.map +1 -1
- package/dist/ai/tools/implementations/updateClassName.impl.js +5 -37
- package/dist/ai/tools/implementations/updateClassName.impl.js.map +1 -1
- package/dist/ai/tools/implementations/updateGlobalStyles.impl.d.ts.map +1 -1
- package/dist/ai/tools/implementations/updateGlobalStyles.impl.js +4 -3
- package/dist/ai/tools/implementations/updateGlobalStyles.impl.js.map +1 -1
- package/dist/ai/tools/implementations/updateProps.impl.d.ts.map +1 -1
- package/dist/ai/tools/implementations/updateProps.impl.js +5 -37
- package/dist/ai/tools/implementations/updateProps.impl.js.map +1 -1
- package/dist/ai/tools/schemas/createNewRoute.schema.d.ts.map +1 -1
- package/dist/ai/tools/schemas/createNewRoute.schema.js +1 -1
- package/dist/ai/tools/schemas/createNewRoute.schema.js.map +1 -1
- package/dist/ai/tools/schemas/deleteElement.schema.d.ts.map +1 -1
- package/dist/ai/tools/schemas/deleteElement.schema.js +1 -2
- package/dist/ai/tools/schemas/deleteElement.schema.js.map +1 -1
- package/dist/ai/tools/schemas/elementProps.schema.d.ts +101 -0
- package/dist/ai/tools/schemas/elementProps.schema.d.ts.map +1 -0
- package/dist/ai/tools/schemas/elementProps.schema.js +74 -0
- package/dist/ai/tools/schemas/elementProps.schema.js.map +1 -0
- package/dist/ai/tools/schemas/insertElement.schema.d.ts.map +1 -1
- package/dist/ai/tools/schemas/insertElement.schema.js +2 -74
- package/dist/ai/tools/schemas/insertElement.schema.js.map +1 -1
- package/dist/ai/tools/schemas/updateClassName.schema.d.ts.map +1 -1
- package/dist/ai/tools/schemas/updateClassName.schema.js +1 -2
- package/dist/ai/tools/schemas/updateClassName.schema.js.map +1 -1
- package/dist/ai/tools/schemas/updateProps.schema.d.ts +9 -9
- package/dist/ai/tools/schemas/updateProps.schema.d.ts.map +1 -1
- package/dist/ai/tools/schemas/updateProps.schema.js +3 -69
- package/dist/ai/tools/schemas/updateProps.schema.js.map +1 -1
- package/dist/image/unsplash.service.d.ts.map +1 -1
- package/dist/image/unsplash.service.js +6 -2
- package/dist/image/unsplash.service.js.map +1 -1
- package/dist/indexer/projectInfoIndex.d.ts.map +1 -1
- package/dist/indexer/projectInfoIndex.js +33 -25
- package/dist/indexer/projectInfoIndex.js.map +1 -1
- package/dist/types/styleConfig.d.ts.map +1 -1
- package/dist/types/styleConfig.js +2 -3
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/utils.d.ts +3 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +8 -0
- package/dist/utils/utils.js.map +1 -1
- package/dist/utils/workspace.d.ts +1 -1
- package/dist/utils/workspace.d.ts.map +1 -1
- package/dist/utils/workspace.js +6 -11
- package/dist/utils/workspace.js.map +1 -1
- package/package.json +1 -1
- package/dist/ai/toolLoop/plannerTaskParser.d.ts.map +0 -1
- package/dist/ai/toolLoop/plannerTaskParser.js.map +0 -1
- package/dist/ai/toolLoop/toolLoopRunnerUtils.d.ts +0 -51
- package/dist/ai/toolLoop/toolLoopRunnerUtils.d.ts.map +0 -1
- package/dist/ai/toolLoop/toolLoopRunnerUtils.js +0 -367
- package/dist/ai/toolLoop/toolLoopRunnerUtils.js.map +0 -1
- /package/dist/ai/toolLoop/{plannerTaskParser.js → helpers/plannerTaskParser.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolLoopRunner.js","sourceRoot":"","sources":["../../../src/ai/toolLoop/toolLoopRunner.ts"],"names":[],"mappings":"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","sourcesContent":["import { FunctionCallingConfigMode, Tool } from \"@google/genai\";\nimport fs from \"node:fs/promises\";\nimport type { GenTokensRepository } from \"../../repository/genTokens.repository.js\";\nimport { persistToolCall } from \"../../services/toolcallPersist.service.js\";\nimport { EVENT_TYPES, EventType } from \"../../types/events.js\";\nimport { STYLE_TOKEN_KEYS } from \"../../types/styleConfig.js\";\nimport { getAvailableRoutes } from \"../tools/helpers/pageConfigJson.helpers.js\";\nimport { createWorkspaceToolImpls } from \"../tools/implementations/factories.js\";\nimport { CoreFs } from \"../tools/implementations/workspaceDeps.js\";\nimport { parsePlannerTasksUnknown } from \"./plannerTaskParser.js\";\nimport {\n compactForModel,\n DEFAULT_CONTEXT_POLICY,\n normalizeReadFileArgs,\n redactFunctionCallArgs,\n ToolEvent,\n ToolLoopContextPolicy,\n} from \"./toolLoopContext.js\";\nimport {\n aiCallWithRetry,\n buildToolStatusMessage,\n recordToolEvent,\n serializeError,\n} from \"./toolLoopRunnerUtils.js\";\n\nexport type ToolLoopResult = {\n contents: any[];\n modelContents: any[];\n finalText: string;\n steps: number;\n terminalCall?: {\n name: string;\n args: Record<string, unknown>;\n response: unknown;\n };\n};\n\nexport type Logger = (\n message: string,\n eventType: EventType,\n displayedSummary?: boolean,\n) => Promise<void>;\n\nexport type AiCallResponse = {\n functionCalls?: any[];\n text?: string;\n};\n\nexport type AiCallFn = (\n request: unknown,\n options: {\n tools?: Tool[];\n model?: string;\n toolCallingMode?: FunctionCallingConfigMode;\n },\n) => Promise<AiCallResponse>;\n\nexport type RunToolLoopOptions = {\n initialContents: any[];\n tools: Tool[];\n workspaceRoot: string;\n maxSteps?: number;\n toolCallingMode?: FunctionCallingConfigMode;\n terminalToolNames?: string[];\n keepFullTrace?: boolean;\n contextPolicy?: ToolLoopContextPolicy;\n aiCall: AiCallFn;\n logger: Logger;\n applyPatchAutoRetryMax?: number;\n aiCallAutoRetryMax?: number;\n aiCallAutoRetryBaseMs?: number;\n aiCallAutoRetryMaxMs?: number;\n persistResponse?: (modelInput: any, modelOutput: any) => Promise<void>;\n tokenPersistence?: {\n repository: Pick<GenTokensRepository, \"persistGenTokens\">;\n sessionId: string;\n model: string;\n };\n};\n\nexport async function runToolLoop(\n options: RunToolLoopOptions,\n): Promise<ToolLoopResult> {\n const isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n const styleTokenKeySet = new Set<string>(\n STYLE_TOKEN_KEYS as unknown as string[],\n );\n\n const {\n initialContents,\n tools,\n workspaceRoot,\n maxSteps = 30,\n toolCallingMode = FunctionCallingConfigMode.ANY,\n terminalToolNames = [],\n keepFullTrace = true,\n contextPolicy,\n aiCall,\n logger,\n applyPatchAutoRetryMax = 2,\n aiCallAutoRetryMax = 3, // must have it to try 3 times as gemini errors a lot due to high demand sometimes\n aiCallAutoRetryBaseMs = 400,\n aiCallAutoRetryMaxMs = 10_000,\n persistResponse,\n tokenPersistence,\n } = options;\n\n const extractUsageTokenCounts = (rawResponse: unknown) => {\n const usage = (rawResponse as any)?.usageMetadata;\n const promptTokenCount = usage?.promptTokenCount;\n const candidatesTokenCount = usage?.candidatesTokenCount;\n\n const inputTokens = Number(promptTokenCount);\n const outputTokens = Number(candidatesTokenCount);\n\n if (!Number.isFinite(inputTokens) || inputTokens < 0) return null;\n if (!Number.isFinite(outputTokens) || outputTokens < 0) return null;\n\n return { inputTokens, outputTokens };\n };\n\n let totalInputTokens = 0;\n let totalOutputTokens = 0;\n let sawAnyTokenUsage = false;\n\n const persistTokensOnce = async () => {\n if (!tokenPersistence) return;\n if (!sawAnyTokenUsage) return;\n\n try {\n await tokenPersistence.repository.persistGenTokens(\n tokenPersistence.sessionId,\n totalInputTokens,\n totalOutputTokens,\n tokenPersistence.model,\n );\n } catch (err) {\n console.error(\"Tool loop: failed to persist gen tokens\", err);\n }\n };\n\n const nodeFs: CoreFs = {\n readFile: async (absolutePath) => fs.readFile(absolutePath, \"utf-8\"),\n writeFile: async (absolutePath, content) =>\n fs.writeFile(absolutePath, content ?? \"\", \"utf-8\"),\n mkdirp: async (absoluteDir) => {\n await fs.mkdir(absoluteDir, { recursive: true });\n },\n rmFile: async (absolutePath) => fs.rm(absolutePath, { force: true }),\n stat: async (absolutePath) => fs.stat(absolutePath),\n safeReadDir: async (absoluteDir) =>\n fs.readdir(absoluteDir, { withFileTypes: true }),\n };\n\n const impls = createWorkspaceToolImpls({\n workspaceRoot,\n fs: nodeFs,\n });\n\n const toolHandlers: Record<string, (args: any) => Promise<any>> = {\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 impls.readFileImpl(path, startLine, endLine);\n return { path, content };\n },\n write_file: (args) =>\n impls.writeFileImpl(String(args.path ?? \"\"), String(args.content ?? \"\")),\n list_dir: async (args) => {\n const content = await impls.listDirImpl(\n String(args.path ?? \"\"),\n Number(args.depth ?? 1),\n );\n return { content };\n },\n search: async (args) => {\n const results = await impls.searchImpl(String(args.search_query ?? \"\"));\n return { results };\n },\n apply_patch: (args) =>\n impls.applyPatchImpl(String(args.patch_string ?? \"\")),\n update_global_styles: async (args) => {\n const result = await 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 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 impls.deleteElementImpl(route, element_id);\n return result;\n },\n insert_element: async (args) => {\n const result = await impls.insertElementImpl(args);\n if (!result.success) {\n const available = await getAvailableRoutes({\n 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 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 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, 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 if (typeof aiCall !== \"function\") {\n throw new Error(\"Tool loop: aiCall is required.\");\n }\n\n const policy: Required<ToolLoopContextPolicy> = {\n ...DEFAULT_CONTEXT_POLICY,\n ...(contextPolicy ?? {}),\n };\n\n const toolEvents: ToolEvent[] = [];\n let applyPatchRetryCount = 0;\n\n const EXECUTION_GUIDE_MARKER = \"TOOL_LOOP_EXECUTION_GUIDE_V1\";\n const executionGuideInstruction = {\n role: \"user\",\n parts: [\n {\n text:\n `${EXECUTION_GUIDE_MARKER}\\n` +\n `Execution limit: At most ${maxSteps} assistant turn(s) in this tool loop. ` +\n `One turn = one assistant response in the tool loop.\\n` +\n `Complete the task in as few turns as possible and avoid unnecessary actions. Prioritize correctness.`,\n },\n ],\n };\n\n const fullTraceContents: any[] = keepFullTrace\n ? [...initialContents, executionGuideInstruction]\n : [];\n let modelContents: any[] = [...initialContents, executionGuideInstruction];\n const pinnedInitialCount = initialContents.length + 1;\n const pushBoth = (fullItem: any, modelItem: any) => {\n if (keepFullTrace) fullTraceContents.push(fullItem);\n modelContents.push(modelItem);\n };\n const pushModelOnly = (modelItem: any) => {\n modelContents.push(modelItem);\n };\n\n for (let step = 0; step < maxSteps; step++) {\n modelContents = compactForModel({\n initialCount: pinnedInitialCount,\n modelContents,\n toolEvents,\n policy,\n });\n\n if (policy.logApproxModelChars) {\n const approxChars = JSON.stringify(modelContents).length;\n console.log(\"Tool loop: approx model chars\", {\n approxChars,\n step: step + 1,\n });\n }\n\n let response: Awaited<ReturnType<AiCallFn>>;\n try {\n response = await aiCallWithRetry({\n aiCall,\n request: modelContents,\n options: { tools, toolCallingMode },\n retryMax: aiCallAutoRetryMax,\n retryBaseMs: aiCallAutoRetryBaseMs,\n retryMaxMs: aiCallAutoRetryMaxMs,\n step: step + 1,\n logger,\n });\n } catch (err) {\n logger(\n \"Tool loop: AI provider error; preserving context and continuing\",\n EVENT_TYPES.STEP_ERROR,\n );\n console.error(\"Tool loop: aiCall failed (provider/server side)\", err, {\n step: step + 1,\n error: serializeError(err),\n });\n\n const message =\n err instanceof Error ? err.message : JSON.stringify(err ?? null);\n const providerErrorInstruction = {\n role: \"user\",\n parts: [\n {\n text:\n `AI provider error (server-side). Do NOT clear or restart context; continue from the existing conversation state.\\n` +\n `Error: ${message}\\n` +\n `Next: retry the last request using the same context. If you were about to call tools, resend a valid tool call.`,\n },\n ],\n };\n if (keepFullTrace) fullTraceContents.push(providerErrorInstruction);\n continue;\n }\n\n if (persistResponse) {\n try {\n await persistResponse(modelContents, response);\n } catch (err) {\n console.error(\"Tool loop: failed to persist response\", err, {\n step: step + 1,\n });\n }\n }\n\n {\n const usage = extractUsageTokenCounts(response);\n if (usage) {\n sawAnyTokenUsage = true;\n totalInputTokens += usage.inputTokens;\n totalOutputTokens += usage.outputTokens;\n }\n }\n\n const functionCalls = response.functionCalls ?? [];\n if (functionCalls.length === 0) {\n await persistTokensOnce();\n return {\n contents: keepFullTrace ? fullTraceContents : modelContents,\n modelContents,\n finalText: (response.text ?? \"\").trim(),\n steps: step + 1,\n };\n }\n\n const signatureById = (() => {\n try {\n const candidates = Array.isArray((response as any)?.candidates)\n ? ((response as any).candidates as any[])\n : [];\n const parts = candidates?.[0]?.content?.parts;\n const arr = Array.isArray(parts) ? (parts as any[]) : [];\n const map = new Map<string, string>();\n for (const p of arr) {\n const fc = p?.functionCall;\n const id = fc?.id;\n const sig = p?.thoughtSignature ?? p?.thought_signature;\n if (typeof id === \"string\" && typeof sig === \"string\" && sig) {\n map.set(id, sig);\n }\n }\n return map;\n } catch {\n return new Map<string, string>();\n }\n })();\n\n for (let callIndex = 0; callIndex < functionCalls.length; callIndex++) {\n const call = functionCalls[callIndex];\n const name = call.name?.toString() ?? \"\";\n const args = (call.args ?? {}) as Record<string, unknown>;\n const thoughtSignature: string | undefined = (() => {\n const direct =\n (call as any)?.thought_signature ?? (call as any)?.thoughtSignature;\n if (typeof direct === \"string\" && direct) return direct;\n const id = (call as any)?.id;\n if (typeof id === \"string\" && signatureById.has(id)) {\n return signatureById.get(id);\n }\n return undefined;\n })();\n\n if (!name) {\n logger(\n \"Tool loop: malformed function call from model; preserving context and continuing\",\n EVENT_TYPES.STEP_ERROR,\n );\n const malformedInstruction = {\n role: \"user\",\n parts: [\n {\n text:\n `Malformed function call received (missing tool name). Do NOT clear or restart context.\\n` +\n `Resend a single valid tool call with a non-empty name and JSON args.\\n` +\n `Bad call: ${JSON.stringify(call ?? null).slice(0, 1500)}`,\n },\n ],\n };\n if (keepFullTrace) fullTraceContents.push(malformedInstruction);\n modelContents.push(malformedInstruction);\n continue;\n }\n\n const handler = toolHandlers[name];\n const handlerMissingResult = !handler\n ? {\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 : null;\n\n let effectiveArgs: Record<string, unknown> = args;\n let readFileMeta: {\n start: number;\n end: number;\n wasCapped: boolean;\n } | null = null;\n if (name === \"read_file\") {\n const normalized = normalizeReadFileArgs(\n effectiveArgs,\n policy.readFileDefaultMaxLines,\n );\n effectiveArgs = normalized.effectiveArgs;\n readFileMeta = {\n start: normalized.start,\n end: normalized.end,\n wasCapped: normalized.wasCapped,\n };\n }\n\n if (name === \"update_global_styles\") {\n const tokensMaybe = (effectiveArgs as any)?.tokens;\n const normalized: Record<string, unknown> = {};\n\n if (isPlainObject(tokensMaybe)) {\n for (const [k, v] of Object.entries(tokensMaybe)) {\n if (!styleTokenKeySet.has(k)) continue;\n if (typeof v !== \"string\") continue;\n normalized[k] = v;\n }\n }\n\n for (const [k, v] of Object.entries(effectiveArgs ?? {})) {\n if (!styleTokenKeySet.has(k)) continue;\n if (typeof v !== \"string\") continue;\n normalized[k] = v;\n }\n\n effectiveArgs = normalized;\n }\n\n logger(\n buildToolStatusMessage(name, effectiveArgs, readFileMeta),\n EVENT_TYPES.STEP_STARTED,\n true,\n );\n\n const modelArgs = redactFunctionCallArgs(name, effectiveArgs);\n\n const functionCallPart = {\n functionCall: {\n name,\n args: effectiveArgs,\n },\n ...(thoughtSignature\n ? {\n thoughtSignature: thoughtSignature,\n thought_signature: thoughtSignature,\n }\n : {}),\n };\n\n const functionCallPartModel = {\n functionCall: {\n name,\n args: modelArgs,\n },\n ...(thoughtSignature\n ? {\n thoughtSignature: thoughtSignature,\n thought_signature: thoughtSignature,\n }\n : {}),\n };\n\n const assistantFull = {\n role: \"model\",\n parts: [\n {\n ...functionCallPart,\n },\n ],\n };\n\n const assistantModel = {\n role: \"model\",\n parts: [\n {\n ...functionCallPartModel,\n },\n ],\n };\n\n if (keepFullTrace) {\n pushBoth(assistantFull, assistantModel);\n } else {\n pushModelOnly(assistantModel);\n }\n\n let toolResultRaw: unknown;\n if (handlerMissingResult) {\n toolResultRaw = handlerMissingResult;\n } else {\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 toolResultRaw = {\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 } else {\n toolResultRaw = await handler(effectiveArgs);\n }\n } else {\n toolResultRaw = await handler(effectiveArgs);\n }\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: step + 1,\n });\n toolResultRaw = {\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 let toolResult: unknown = toolResultRaw;\n\n if (name === \"read_file\" && readFileMeta) {\n const path = String(effectiveArgs.path ?? \"\");\n\n const jsonPayload =\n (toolResultRaw as any)?.kind === \"json\"\n ? (toolResultRaw as any)?.json\n : undefined;\n if (jsonPayload !== undefined) {\n // Token-efficient: return JSON as structured data (no double-stringifying).\n toolResult = { path, json: jsonPayload };\n } else {\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 toolResult = {\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 ${policy.readFileDefaultMaxLines} lines. Request more with start_line/end_line.`\n : undefined,\n };\n }\n }\n\n try {\n await persistToolCall(name, modelArgs, toolResult);\n } catch (err) {\n console.error(\"Tool loop: failed to persist tool call\", err, {\n tool: name,\n step: step + 1,\n });\n }\n\n const responseFull = {\n role: \"user\",\n parts: [\n {\n functionResponse: {\n name,\n response: toolResult,\n },\n },\n ],\n };\n\n if (keepFullTrace) {\n fullTraceContents.push(responseFull);\n }\n modelContents.push(responseFull);\n\n if (\n name === \"apply_patch\" &&\n (toolResult as any)?.success === false &&\n applyPatchAutoRetryMax > 0 &&\n applyPatchRetryCount < applyPatchAutoRetryMax\n ) {\n applyPatchRetryCount += 1;\n\n const error = String((toolResult as any)?.error ?? \"unknown error\");\n const debugFiles = Array.isArray((toolResult as any)?.debug?.files)\n ? ((toolResult as any).debug.files as Array<{\n path?: string;\n head?: string;\n }>)\n : [];\n\n const debugText =\n debugFiles.length > 0\n ? `\\n\\nFILE SNAPSHOTS (for regenerating the patch):\\n${debugFiles\n .slice(0, 3)\n .map(\n (f) =>\n `--- ${String(f.path ?? \"\")} ---\\n${String(\n f.head ?? \"\",\n )}\\n--- end ---`,\n )\n .join(\"\\n\\n\")}`\n : \"\";\n\n const retryInstruction = {\n role: \"user\",\n parts: [\n {\n text:\n `apply_patch failed (attempt ${applyPatchRetryCount}/${applyPatchAutoRetryMax}): ${error}\\n` +\n `Regenerate a patch that matches the current file contents. ` +\n `For large rewrites, prefer write_file(path, content) or Delete+Add instead of Update.` +\n debugText,\n },\n ],\n };\n\n if (keepFullTrace) fullTraceContents.push(retryInstruction);\n modelContents.push(retryInstruction);\n }\n\n recordToolEvent({\n toolEvents,\n name,\n effectiveArgs,\n modelArgs,\n readFileMeta,\n toolResult,\n toolResultRaw,\n });\n\n if (terminalToolNames.includes(name)) {\n await persistTokensOnce();\n return {\n contents: keepFullTrace ? fullTraceContents : modelContents,\n modelContents,\n finalText: \"\",\n steps: step + 1,\n terminalCall: { name, args: effectiveArgs, response: toolResultRaw },\n };\n }\n }\n }\n\n await persistTokensOnce();\n return {\n contents: keepFullTrace ? fullTraceContents : modelContents,\n modelContents,\n finalText: `Stopped: max steps reached (${maxSteps}).`,\n steps: maxSteps,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"toolLoopRunner.js","sourceRoot":"","sources":["../../../src/ai/toolLoop/toolLoopRunner.ts"],"names":[],"mappings":"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","sourcesContent":["import { FunctionCallingConfigMode, Tool } from \"@google/genai\";\nimport type { GenTokensRepository } from \"../../repository/genTokens.repository.js\";\nimport { persistToolCall } from \"../../services/toolcallPersist.service.js\";\nimport { EVENT_TYPES, EventType } from \"../../types/events.js\";\nimport { STYLE_TOKEN_KEYS } from \"../../types/styleConfig.js\";\nimport { createWorkspaceToolImpls } from \"../tools/implementations/factories.js\";\nimport { aiCallWithRetry } from \"./helpers/aiCall.helper.js\";\nimport { serializeError } from \"./helpers/errors.helper.js\";\nimport { nodeFs } from \"./helpers/fsHelpers.js\";\nimport { handleApplyPatchFailure } from \"./helpers/patchRetry.helper.js\";\nimport {\n extractUsageTokenCounts,\n persistTokensOnce,\n} from \"./helpers/persistTokens.helpers.js\";\nimport { extractThoughtSignatures } from \"./helpers/signatures.helper.js\";\nimport { normalizeToolArgs } from \"./helpers/toolArgs.helper.js\";\nimport {\n executeToolHandler,\n postProcessToolResult,\n} from \"./helpers/toolExecution.helper.js\";\nimport { createToolHandlers } from \"./helpers/toolHandlers.helper.js\";\nimport { recordToolEvent } from \"./toolEventSummary.js\";\nimport {\n compactForModel,\n DEFAULT_CONTEXT_POLICY,\n redactFunctionCallArgs,\n ToolEvent,\n ToolLoopContextPolicy,\n} from \"./toolLoopContext.js\";\nimport { buildToolStatusMessage } from \"./toolStatusMessage.js\";\n\nexport type ToolLoopResult = {\n contents: any[];\n modelContents: any[];\n finalText: string;\n steps: number;\n terminalCall?: {\n name: string;\n args: Record<string, unknown>;\n response: unknown;\n };\n};\n\nexport type Logger = (\n message: string,\n eventType: EventType,\n displayedSummary?: boolean,\n) => Promise<void>;\n\nexport type AiCallResponse = {\n functionCalls?: any[];\n text?: string;\n};\n\nexport type AiCallFn = (\n request: unknown,\n options: {\n tools?: Tool[];\n model?: string;\n toolCallingMode?: FunctionCallingConfigMode;\n },\n) => Promise<AiCallResponse>;\n\nexport type TokenPersistence = {\n repository: Pick<GenTokensRepository, \"persistGenTokens\">;\n sessionId: string;\n model: string;\n};\n\nexport type RunToolLoopOptions = {\n initialContents: any[];\n tools: Tool[];\n workspaceRoot: string;\n maxSteps?: number;\n toolCallingMode?: FunctionCallingConfigMode;\n terminalToolNames?: string[];\n keepFullTrace?: boolean;\n contextPolicy?: ToolLoopContextPolicy;\n aiCall: AiCallFn;\n logger: Logger;\n applyPatchAutoRetryMax?: number;\n aiCallAutoRetryMax?: number;\n aiCallAutoRetryBaseMs?: number;\n aiCallAutoRetryMaxMs?: number;\n persistResponse?: (modelInput: any, modelOutput: any) => Promise<void>;\n tokenPersistence?: TokenPersistence;\n};\n\nexport async function runToolLoop(\n options: RunToolLoopOptions,\n): Promise<ToolLoopResult> {\n const styleTokenKeySet = new Set<string>(\n STYLE_TOKEN_KEYS as unknown as string[],\n );\n\n const {\n initialContents,\n tools,\n workspaceRoot,\n maxSteps = 30,\n toolCallingMode = FunctionCallingConfigMode.ANY,\n terminalToolNames = [],\n keepFullTrace = true,\n contextPolicy,\n aiCall,\n logger,\n applyPatchAutoRetryMax = 2,\n aiCallAutoRetryMax = 3, // must have it to try 3 times as gemini errors a lot due to high demand sometimes\n aiCallAutoRetryBaseMs = 400,\n aiCallAutoRetryMaxMs = 10_000,\n persistResponse,\n tokenPersistence,\n } = options;\n\n let totalInputTokens = 0;\n let totalOutputTokens = 0;\n let sawAnyTokenUsage = false;\n\n const impls = createWorkspaceToolImpls({\n workspaceRoot,\n fs: nodeFs,\n });\n\n const toolHandlers = createToolHandlers({\n impls,\n workspaceRoot,\n });\n\n if (typeof aiCall !== \"function\") {\n throw new Error(\"Tool loop: aiCall is required.\");\n }\n\n const policy: Required<ToolLoopContextPolicy> = {\n ...DEFAULT_CONTEXT_POLICY,\n ...(contextPolicy ?? {}),\n };\n\n const toolEvents: ToolEvent[] = [];\n let applyPatchRetryCount = 0;\n\n const EXECUTION_GUIDE_MARKER = \"TOOL_LOOP_EXECUTION_GUIDE_V1\";\n const executionGuideInstruction = {\n role: \"user\",\n parts: [\n {\n text:\n `${EXECUTION_GUIDE_MARKER}\\n` +\n `Execution limit: At most ${maxSteps} assistant turn(s) in this tool loop. ` +\n `One turn = one assistant response in the tool loop.\\n` +\n `Complete the task in as few turns as possible and avoid unnecessary actions. Prioritize correctness.`,\n },\n ],\n };\n\n const fullTraceContents: any[] = keepFullTrace\n ? [...initialContents, executionGuideInstruction]\n : [];\n let modelContents: any[] = [...initialContents, executionGuideInstruction];\n const pinnedInitialCount = initialContents.length + 1;\n const pushBoth = (fullItem: any, modelItem: any) => {\n if (keepFullTrace) fullTraceContents.push(fullItem);\n modelContents.push(modelItem);\n };\n const pushModelOnly = (modelItem: any) => {\n modelContents.push(modelItem);\n };\n\n for (let step = 0; step < maxSteps; step++) {\n modelContents = compactForModel({\n initialCount: pinnedInitialCount,\n modelContents,\n toolEvents,\n policy,\n });\n\n if (policy.logApproxModelChars) {\n const approxChars = JSON.stringify(modelContents).length;\n console.log(\"Tool loop: approx model chars\", {\n approxChars,\n step: step + 1,\n });\n }\n\n let response: Awaited<ReturnType<AiCallFn>>;\n try {\n response = await aiCallWithRetry({\n aiCall,\n request: modelContents,\n options: { tools, toolCallingMode },\n retryMax: aiCallAutoRetryMax,\n retryBaseMs: aiCallAutoRetryBaseMs,\n retryMaxMs: aiCallAutoRetryMaxMs,\n step: step + 1,\n logger,\n });\n } catch (err) {\n logger(\n \"Tool loop: AI provider error; preserving context and continuing\",\n EVENT_TYPES.STEP_ERROR,\n );\n console.error(\"Tool loop: aiCall failed (provider/server side)\", err, {\n step: step + 1,\n error: serializeError(err),\n });\n\n const message =\n err instanceof Error ? err.message : JSON.stringify(err ?? null);\n const providerErrorInstruction = {\n role: \"user\",\n parts: [\n {\n text:\n `AI provider error (server-side). Do NOT clear or restart context; continue from the existing conversation state.\\n` +\n `Error: ${message}\\n` +\n `Next: retry the last request using the same context. If you were about to call tools, resend a valid tool call.`,\n },\n ],\n };\n if (keepFullTrace) fullTraceContents.push(providerErrorInstruction);\n continue;\n }\n\n if (persistResponse) {\n try {\n await persistResponse(modelContents, response);\n } catch (err) {\n console.error(\"Tool loop: failed to persist response\", err, {\n step: step + 1,\n });\n }\n }\n\n {\n const usage = extractUsageTokenCounts(response);\n if (usage) {\n sawAnyTokenUsage = true;\n totalInputTokens += usage.inputTokens;\n totalOutputTokens += usage.outputTokens;\n }\n }\n\n const functionCalls = response.functionCalls ?? [];\n if (functionCalls.length === 0) {\n await persistTokensOnce(\n tokenPersistence,\n sawAnyTokenUsage,\n totalInputTokens,\n totalOutputTokens,\n );\n return {\n contents: keepFullTrace ? fullTraceContents : modelContents,\n modelContents,\n finalText: (response.text ?? \"\").trim(),\n steps: step + 1,\n };\n }\n\n const signatureById = extractThoughtSignatures(response);\n\n for (let callIndex = 0; callIndex < functionCalls.length; callIndex++) {\n const call = functionCalls[callIndex];\n const name = call.name?.toString() ?? \"\";\n const args = (call.args ?? {}) as Record<string, unknown>;\n const thoughtSignature: string | undefined = (() => {\n const direct =\n (call as any)?.thought_signature ?? (call as any)?.thoughtSignature;\n if (typeof direct === \"string\" && direct) return direct;\n const id = (call as any)?.id;\n if (typeof id === \"string\" && signatureById.has(id)) {\n return signatureById.get(id);\n }\n return undefined;\n })();\n\n if (!name) {\n logger(\n \"Tool loop: malformed function call from model; preserving context and continuing\",\n EVENT_TYPES.STEP_ERROR,\n );\n const malformedInstruction = {\n role: \"user\",\n parts: [\n {\n text:\n `Malformed function call received (missing tool name). Do NOT clear or restart context.\\n` +\n `Resend a single valid tool call with a non-empty name and JSON args.\\n` +\n `Bad call: ${JSON.stringify(call ?? null).slice(0, 1500)}`,\n },\n ],\n };\n if (keepFullTrace) fullTraceContents.push(malformedInstruction);\n modelContents.push(malformedInstruction);\n continue;\n }\n\n const handler = toolHandlers[name];\n\n const { effectiveArgs, readFileMeta } = normalizeToolArgs(\n name,\n args,\n {\n readFileDefaultMaxLines: policy.readFileDefaultMaxLines,\n styleTokenKeySet,\n }\n );\n\n logger(\n buildToolStatusMessage(name, effectiveArgs, readFileMeta),\n EVENT_TYPES.STEP_STARTED,\n true,\n );\n\n const modelArgs = redactFunctionCallArgs(name, effectiveArgs);\n\n const functionCallPart = {\n functionCall: {\n name,\n args: effectiveArgs,\n },\n ...(thoughtSignature\n ? {\n thoughtSignature: thoughtSignature,\n thought_signature: thoughtSignature,\n }\n : {}),\n };\n\n const functionCallPartModel = {\n functionCall: {\n name,\n args: modelArgs,\n },\n ...(thoughtSignature\n ? {\n thoughtSignature: thoughtSignature,\n thought_signature: thoughtSignature,\n }\n : {}),\n };\n\n const assistantFull = {\n role: \"model\",\n parts: [\n {\n ...functionCallPart,\n },\n ],\n };\n\n const assistantModel = {\n role: \"model\",\n parts: [\n {\n ...functionCallPartModel,\n },\n ],\n };\n\n if (keepFullTrace) {\n pushBoth(assistantFull, assistantModel);\n } else {\n pushModelOnly(assistantModel);\n }\n\n const toolResultRaw = await executeToolHandler({\n name,\n handler,\n effectiveArgs,\n styleTokenKeySet,\n step: step + 1,\n logger,\n });\n\n const toolResult = postProcessToolResult({\n name,\n toolResultRaw,\n effectiveArgs,\n readFileMeta,\n readFileDefaultMaxLines: policy.readFileDefaultMaxLines,\n });\n\n try {\n await persistToolCall(name, modelArgs, toolResult);\n } catch (err) {\n console.error(\"Tool loop: failed to persist tool call\", err, {\n tool: name,\n step: step + 1,\n });\n }\n\n const responseFull = {\n role: \"user\",\n parts: [\n {\n functionResponse: {\n name,\n response: toolResult,\n },\n },\n ],\n };\n\n if (keepFullTrace) {\n fullTraceContents.push(responseFull);\n }\n modelContents.push(responseFull);\n\n if (\n name === \"apply_patch\" &&\n (toolResult as any)?.success === false &&\n applyPatchAutoRetryMax > 0 &&\n applyPatchRetryCount < applyPatchAutoRetryMax\n ) {\n const failureResult = handleApplyPatchFailure({\n toolResult,\n applyPatchAutoRetryMax,\n applyPatchRetryCount,\n keepFullTrace,\n fullTraceContents,\n modelContents,\n });\n applyPatchRetryCount = failureResult.applyPatchRetryCount;\n }\n\n recordToolEvent({\n toolEvents,\n name,\n effectiveArgs,\n modelArgs,\n readFileMeta,\n toolResult,\n toolResultRaw,\n });\n\n if (terminalToolNames.includes(name)) {\n await persistTokensOnce(\n tokenPersistence,\n sawAnyTokenUsage,\n totalInputTokens,\n totalOutputTokens,\n );\n return {\n contents: keepFullTrace ? fullTraceContents : modelContents,\n modelContents,\n finalText: \"\",\n steps: step + 1,\n terminalCall: { name, args: effectiveArgs, response: toolResultRaw },\n };\n }\n }\n }\n\n await persistTokensOnce(\n tokenPersistence,\n sawAnyTokenUsage,\n totalInputTokens,\n totalOutputTokens,\n );\n return {\n contents: keepFullTrace ? fullTraceContents : modelContents,\n modelContents,\n finalText: `Stopped: max steps reached (${maxSteps}).`,\n steps: maxSteps,\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolStatusMessage.d.ts","sourceRoot":"","sources":["../../../src/ai/toolLoop/toolStatusMessage.ts"],"names":[],"mappings":"AAsJA,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,EACZ,eAAe,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,cAAc;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,KACtE,MAOF,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { getApplyPatchEventMeta } from "./helpers/applyPatch.helper.js";
|
|
2
|
+
const buildReadFileStatus = ({ name, effectiveArgs, readFileMeta, }) => {
|
|
3
|
+
if (name !== "read_file")
|
|
4
|
+
return null;
|
|
5
|
+
const path = typeof effectiveArgs.path === "string" ? effectiveArgs.path : "";
|
|
6
|
+
if (readFileMeta) {
|
|
7
|
+
return `AI tool: Reading file "${path}" (lines ${readFileMeta.start}-${readFileMeta.end}${readFileMeta.wasCapped ? ", capped" : ""})`;
|
|
8
|
+
}
|
|
9
|
+
const start = effectiveArgs.start_line === undefined ? 1 : Number(effectiveArgs.start_line);
|
|
10
|
+
const end = effectiveArgs.end_line === undefined
|
|
11
|
+
? undefined
|
|
12
|
+
: Number(effectiveArgs.end_line);
|
|
13
|
+
const lines = end === undefined ? `starting at line ${start}` : `lines ${start}-${end}`;
|
|
14
|
+
return `AI tool: Reading file "${path}" (${lines})`;
|
|
15
|
+
};
|
|
16
|
+
const buildWriteFileStatus = ({ name, effectiveArgs }) => {
|
|
17
|
+
if (name !== "write_file")
|
|
18
|
+
return null;
|
|
19
|
+
const path = typeof effectiveArgs.path === "string" ? effectiveArgs.path : "";
|
|
20
|
+
return `AI tool: Writing file "${path}"`;
|
|
21
|
+
};
|
|
22
|
+
const buildApplyPatchStatus = ({ name, effectiveArgs }) => {
|
|
23
|
+
if (name !== "apply_patch")
|
|
24
|
+
return null;
|
|
25
|
+
const meta = getApplyPatchEventMeta(effectiveArgs);
|
|
26
|
+
const files = Array.isArray(meta.files) ? meta.files : [];
|
|
27
|
+
if (files.length === 0)
|
|
28
|
+
return "AI tool: Applying patch";
|
|
29
|
+
if (files.length <= 3)
|
|
30
|
+
return `AI tool: Applying changes to "${files.join(", ")}"`;
|
|
31
|
+
return `AI tool: Applying changes to ${files.length} files: "${files
|
|
32
|
+
.slice(0, 3)
|
|
33
|
+
.join(", ")}" (+${files.length - 3} more)`;
|
|
34
|
+
};
|
|
35
|
+
const buildSearchStatus = ({ name, effectiveArgs }) => {
|
|
36
|
+
if (name !== "search")
|
|
37
|
+
return null;
|
|
38
|
+
const query = typeof effectiveArgs.search_query === "string" ? effectiveArgs.search_query : "";
|
|
39
|
+
return query
|
|
40
|
+
? `AI tool: Searching workspace for "${query}"`
|
|
41
|
+
: "AI tool: Searching workspace";
|
|
42
|
+
};
|
|
43
|
+
const buildListDirStatus = ({ name, effectiveArgs }) => {
|
|
44
|
+
if (name !== "list_dir")
|
|
45
|
+
return null;
|
|
46
|
+
const path = typeof effectiveArgs.path === "string" ? effectiveArgs.path : "";
|
|
47
|
+
const depth = effectiveArgs.depth === undefined ? 1 : Number(effectiveArgs.depth);
|
|
48
|
+
return `AI tool: Listing contents of directory "${path}" (depth: ${depth})`;
|
|
49
|
+
};
|
|
50
|
+
const buildUpdateGlobalStylesStatus = ({ name, effectiveArgs }) => {
|
|
51
|
+
if (name !== "update_global_styles")
|
|
52
|
+
return null;
|
|
53
|
+
const keys = Object.keys(effectiveArgs);
|
|
54
|
+
return keys.length > 0
|
|
55
|
+
? `AI tool: Updating global styles (${keys.join(", ")})`
|
|
56
|
+
: "AI tool: Updating global styles";
|
|
57
|
+
};
|
|
58
|
+
const buildCreateNewRouteStatus = ({ name, effectiveArgs }) => {
|
|
59
|
+
if (name !== "create_new_route")
|
|
60
|
+
return null;
|
|
61
|
+
const route = typeof effectiveArgs.route_name === "string" ? effectiveArgs.route_name : "";
|
|
62
|
+
const parent = typeof effectiveArgs.parent_route === "string" ? effectiveArgs.parent_route : "/";
|
|
63
|
+
return `AI tool: Creating new route "${route}" (parent: "${parent}")`;
|
|
64
|
+
};
|
|
65
|
+
const buildDeleteElementStatus = ({ name, effectiveArgs }) => {
|
|
66
|
+
if (name !== "delete_element")
|
|
67
|
+
return null;
|
|
68
|
+
const route = typeof effectiveArgs.route === "string" ? effectiveArgs.route : "";
|
|
69
|
+
const id = typeof effectiveArgs.element_id === "string" ? effectiveArgs.element_id : "";
|
|
70
|
+
return `AI tool: Deleting element "${id}" from route "${route}"`;
|
|
71
|
+
};
|
|
72
|
+
const buildInsertElementStatus = ({ name, effectiveArgs }) => {
|
|
73
|
+
if (name !== "insert_element")
|
|
74
|
+
return null;
|
|
75
|
+
const route = typeof effectiveArgs.route === "string" ? effectiveArgs.route : "";
|
|
76
|
+
const parent = typeof effectiveArgs.parent_id === "string" ? effectiveArgs.parent_id : "";
|
|
77
|
+
const before = typeof effectiveArgs.before_id === "string" ? effectiveArgs.before_id : "";
|
|
78
|
+
const beforeStr = before ? `, before "${before}"` : "";
|
|
79
|
+
return `AI tool: Inserting element into route "${route}" (under parent "${parent}"${beforeStr})`;
|
|
80
|
+
};
|
|
81
|
+
const buildUpdatePropsStatus = ({ name, effectiveArgs }) => {
|
|
82
|
+
if (name !== "update_props")
|
|
83
|
+
return null;
|
|
84
|
+
const route = typeof effectiveArgs.route === "string" ? effectiveArgs.route : "";
|
|
85
|
+
const id = typeof effectiveArgs.element_id === "string" ? effectiveArgs.element_id : "";
|
|
86
|
+
return `AI tool: Updating properties for element "${id}" on route "${route}"`;
|
|
87
|
+
};
|
|
88
|
+
const buildUpdateClassnameStatus = ({ name, effectiveArgs }) => {
|
|
89
|
+
if (name !== "update_classname")
|
|
90
|
+
return null;
|
|
91
|
+
const route = typeof effectiveArgs.route === "string" ? effectiveArgs.route : "";
|
|
92
|
+
const id = typeof effectiveArgs.element_id === "string" ? effectiveArgs.element_id : "";
|
|
93
|
+
const className = typeof effectiveArgs.class_name === "string" ? effectiveArgs.class_name : "";
|
|
94
|
+
const classNameStr = className ? ` to "${className}"` : "";
|
|
95
|
+
return `AI tool: Updating class name for element "${id}" on route "${route}"${classNameStr}`;
|
|
96
|
+
};
|
|
97
|
+
const buildGetAvailableRoutesStatus = ({ name }) => {
|
|
98
|
+
if (name !== "get_available_routes")
|
|
99
|
+
return null;
|
|
100
|
+
return "AI tool: Retrieving available routes";
|
|
101
|
+
};
|
|
102
|
+
const buildSubmitPlannerTasksStatus = ({ name }) => {
|
|
103
|
+
if (name !== "submit_planner_tasks")
|
|
104
|
+
return null;
|
|
105
|
+
return "AI tool: Submitting planner tasks";
|
|
106
|
+
};
|
|
107
|
+
const buildSubmitCodegenDoneStatus = ({ name, effectiveArgs }) => {
|
|
108
|
+
if (name !== "submit_codegen_done")
|
|
109
|
+
return null;
|
|
110
|
+
const summary = typeof effectiveArgs.summary === "string" ? effectiveArgs.summary : "";
|
|
111
|
+
return summary
|
|
112
|
+
? `AI tool: Submitting completed work: "${summary}"`
|
|
113
|
+
: "AI tool: Submitting completed work";
|
|
114
|
+
};
|
|
115
|
+
const BUILDERS = [
|
|
116
|
+
buildReadFileStatus,
|
|
117
|
+
buildWriteFileStatus,
|
|
118
|
+
buildApplyPatchStatus,
|
|
119
|
+
buildSearchStatus,
|
|
120
|
+
buildListDirStatus,
|
|
121
|
+
buildUpdateGlobalStylesStatus,
|
|
122
|
+
buildCreateNewRouteStatus,
|
|
123
|
+
buildDeleteElementStatus,
|
|
124
|
+
buildInsertElementStatus,
|
|
125
|
+
buildUpdatePropsStatus,
|
|
126
|
+
buildUpdateClassnameStatus,
|
|
127
|
+
buildGetAvailableRoutesStatus,
|
|
128
|
+
buildSubmitPlannerTasksStatus,
|
|
129
|
+
buildSubmitCodegenDoneStatus,
|
|
130
|
+
];
|
|
131
|
+
export const buildToolStatusMessage = (name, effectiveArgs, readFileMeta) => {
|
|
132
|
+
const input = { name, effectiveArgs, readFileMeta };
|
|
133
|
+
for (const b of BUILDERS) {
|
|
134
|
+
const msg = b(input);
|
|
135
|
+
if (msg)
|
|
136
|
+
return msg;
|
|
137
|
+
}
|
|
138
|
+
return `AI tool: ${name}`;
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=toolStatusMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolStatusMessage.js","sourceRoot":"","sources":["../../../src/ai/toolLoop/toolStatusMessage.ts"],"names":[],"mappings":"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","sourcesContent":["import { getApplyPatchEventMeta } from \"./helpers/applyPatch.helper.js\";\n\ntype StatusMessageInput = {\n name: string;\n effectiveArgs: Record<string, unknown>;\n readFileMeta: { start: number; end: number; wasCapped: boolean } | null;\n};\n\ntype StatusMessageBuilder = (input: StatusMessageInput) => string | null;\n\nconst buildReadFileStatus: StatusMessageBuilder = ({\n name,\n effectiveArgs,\n readFileMeta,\n}) => {\n if (name !== \"read_file\") return null;\n\n const path = typeof effectiveArgs.path === \"string\" ? effectiveArgs.path : \"\";\n if (readFileMeta) {\n return `AI tool: Reading file \"${path}\" (lines ${readFileMeta.start}-${readFileMeta.end}${\n readFileMeta.wasCapped ? \", capped\" : \"\"\n })`;\n }\n\n const start =\n effectiveArgs.start_line === undefined ? 1 : Number(effectiveArgs.start_line);\n const end =\n effectiveArgs.end_line === undefined\n ? undefined\n : Number(effectiveArgs.end_line);\n const lines = end === undefined ? `starting at line ${start}` : `lines ${start}-${end}`;\n return `AI tool: Reading file \"${path}\" (${lines})`;\n};\n\nconst buildWriteFileStatus: StatusMessageBuilder = ({ name, effectiveArgs }) => {\n if (name !== \"write_file\") return null;\n const path = typeof effectiveArgs.path === \"string\" ? effectiveArgs.path : \"\";\n return `AI tool: Writing file \"${path}\"`;\n};\n\nconst buildApplyPatchStatus: StatusMessageBuilder = ({ name, effectiveArgs }) => {\n if (name !== \"apply_patch\") return null;\n\n const meta = getApplyPatchEventMeta(effectiveArgs);\n const files = Array.isArray(meta.files) ? meta.files : [];\n if (files.length === 0) return \"AI tool: Applying patch\";\n if (files.length <= 3) return `AI tool: Applying changes to \"${files.join(\", \")}\"`;\n return `AI tool: Applying changes to ${files.length} files: \"${files\n .slice(0, 3)\n .join(\", \")}\" (+${files.length - 3} more)`;\n};\n\nconst buildSearchStatus: StatusMessageBuilder = ({ name, effectiveArgs }) => {\n if (name !== \"search\") return null;\n const query = typeof effectiveArgs.search_query === \"string\" ? effectiveArgs.search_query : \"\";\n return query\n ? `AI tool: Searching workspace for \"${query}\"`\n : \"AI tool: Searching workspace\";\n};\n\nconst buildListDirStatus: StatusMessageBuilder = ({ name, effectiveArgs }) => {\n if (name !== \"list_dir\") return null;\n const path = typeof effectiveArgs.path === \"string\" ? effectiveArgs.path : \"\";\n const depth = effectiveArgs.depth === undefined ? 1 : Number(effectiveArgs.depth);\n return `AI tool: Listing contents of directory \"${path}\" (depth: ${depth})`;\n};\n\nconst buildUpdateGlobalStylesStatus: StatusMessageBuilder = ({ name, effectiveArgs }) => {\n if (name !== \"update_global_styles\") return null;\n const keys = Object.keys(effectiveArgs);\n return keys.length > 0\n ? `AI tool: Updating global styles (${keys.join(\", \")})`\n : \"AI tool: Updating global styles\";\n};\n\nconst buildCreateNewRouteStatus: StatusMessageBuilder = ({ name, effectiveArgs }) => {\n if (name !== \"create_new_route\") return null;\n const route = typeof effectiveArgs.route_name === \"string\" ? effectiveArgs.route_name : \"\";\n const parent =\n typeof effectiveArgs.parent_route === \"string\" ? effectiveArgs.parent_route : \"/\";\n return `AI tool: Creating new route \"${route}\" (parent: \"${parent}\")`;\n};\n\nconst buildDeleteElementStatus: StatusMessageBuilder = ({ name, effectiveArgs }) => {\n if (name !== \"delete_element\") return null;\n const route = typeof effectiveArgs.route === \"string\" ? effectiveArgs.route : \"\";\n const id = typeof effectiveArgs.element_id === \"string\" ? effectiveArgs.element_id : \"\";\n return `AI tool: Deleting element \"${id}\" from route \"${route}\"`;\n};\n\nconst buildInsertElementStatus: StatusMessageBuilder = ({ name, effectiveArgs }) => {\n if (name !== \"insert_element\") return null;\n const route = typeof effectiveArgs.route === \"string\" ? effectiveArgs.route : \"\";\n const parent = typeof effectiveArgs.parent_id === \"string\" ? effectiveArgs.parent_id : \"\";\n const before = typeof effectiveArgs.before_id === \"string\" ? effectiveArgs.before_id : \"\";\n const beforeStr = before ? `, before \"${before}\"` : \"\";\n return `AI tool: Inserting element into route \"${route}\" (under parent \"${parent}\"${beforeStr})`;\n};\n\nconst buildUpdatePropsStatus: StatusMessageBuilder = ({ name, effectiveArgs }) => {\n if (name !== \"update_props\") return null;\n const route = typeof effectiveArgs.route === \"string\" ? effectiveArgs.route : \"\";\n const id = typeof effectiveArgs.element_id === \"string\" ? effectiveArgs.element_id : \"\";\n return `AI tool: Updating properties for element \"${id}\" on route \"${route}\"`;\n};\n\nconst buildUpdateClassnameStatus: StatusMessageBuilder = ({ name, effectiveArgs }) => {\n if (name !== \"update_classname\") return null;\n const route = typeof effectiveArgs.route === \"string\" ? effectiveArgs.route : \"\";\n const id = typeof effectiveArgs.element_id === \"string\" ? effectiveArgs.element_id : \"\";\n const className = typeof effectiveArgs.class_name === \"string\" ? effectiveArgs.class_name : \"\";\n const classNameStr = className ? ` to \"${className}\"` : \"\";\n return `AI tool: Updating class name for element \"${id}\" on route \"${route}\"${classNameStr}`;\n};\n\nconst buildGetAvailableRoutesStatus: StatusMessageBuilder = ({ name }) => {\n if (name !== \"get_available_routes\") return null;\n return \"AI tool: Retrieving available routes\";\n};\n\nconst buildSubmitPlannerTasksStatus: StatusMessageBuilder = ({ name }) => {\n if (name !== \"submit_planner_tasks\") return null;\n return \"AI tool: Submitting planner tasks\";\n};\n\nconst buildSubmitCodegenDoneStatus: StatusMessageBuilder = ({ name, effectiveArgs }) => {\n if (name !== \"submit_codegen_done\") return null;\n const summary = typeof effectiveArgs.summary === \"string\" ? effectiveArgs.summary : \"\";\n return summary\n ? `AI tool: Submitting completed work: \"${summary}\"`\n : \"AI tool: Submitting completed work\";\n};\n\nconst BUILDERS: StatusMessageBuilder[] = [\n buildReadFileStatus,\n buildWriteFileStatus,\n buildApplyPatchStatus,\n buildSearchStatus,\n buildListDirStatus,\n buildUpdateGlobalStylesStatus,\n buildCreateNewRouteStatus,\n buildDeleteElementStatus,\n buildInsertElementStatus,\n buildUpdatePropsStatus,\n buildUpdateClassnameStatus,\n buildGetAvailableRoutesStatus,\n buildSubmitPlannerTasksStatus,\n buildSubmitCodegenDoneStatus,\n];\n\nexport const buildToolStatusMessage = (\n name: string,\n effectiveArgs: Record<string, unknown>,\n readFileMeta: { start: number; end: number; wasCapped: boolean } | null,\n): string => {\n const input: StatusMessageInput = { name, effectiveArgs, readFileMeta };\n for (const b of BUILDERS) {\n const msg = b(input);\n if (msg) return msg;\n }\n return `AI tool: ${name}`;\n};\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyPatch.helpers.d.ts","sourceRoot":"","sources":["../../../../src/ai/tools/helpers/applyPatch.helpers.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAC3B;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB,GACD;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,KAAK,SAAS,GACV;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB,CAAC;
|
|
1
|
+
{"version":3,"file":"applyPatch.helpers.d.ts","sourceRoot":"","sources":["../../../../src/ai/tools/helpers/applyPatch.helpers.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAC3B;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB,GACD;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,KAAK,SAAS,GACV;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB,CAAC;AAiEF,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAqJ1E;AA4ED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,EAAE,GACjB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAyEvC;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,WAG9C"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
const normalizeNewlines = (value) => value.replace(/\r\n/g, "\n");
|
|
3
|
-
const normalizeLineForLooseMatch = (value) =>
|
|
4
|
-
|
|
5
|
-
.
|
|
6
|
-
|
|
3
|
+
const normalizeLineForLooseMatch = (value) => {
|
|
4
|
+
let trimmed = value;
|
|
5
|
+
while (trimmed.endsWith(" ") || trimmed.endsWith("\t")) {
|
|
6
|
+
trimmed = trimmed.slice(0, -1);
|
|
7
|
+
}
|
|
8
|
+
return trimmed
|
|
9
|
+
.replace(/;$/g, "")
|
|
10
|
+
.replace(/['"]/g, '"');
|
|
11
|
+
};
|
|
7
12
|
const normalizeLineForWhitespaceAgnosticMatch = (value) => normalizeLineForLooseMatch(value).trim().replace(/\s+/g, " ");
|
|
8
13
|
const stripOuterMarkdownCodeFence = (value) => {
|
|
9
14
|
const lines = value.split("\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyPatch.helpers.js","sourceRoot":"","sources":["../../../../src/ai/tools/helpers/applyPatch.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\";\n\nexport type ApplyPatchOperation =\n | {\n kind: \"update\";\n filePath: string;\n moveTo?: string;\n hunks: PatchHunk[];\n }\n | {\n kind: \"add\";\n filePath: string;\n hunks: PatchHunk[];\n }\n | {\n kind: \"delete\";\n filePath: string;\n };\n\ntype PatchLine =\n | { kind: \"context\"; text: string }\n | { kind: \"add\"; text: string }\n | { kind: \"delete\"; text: string };\n\nexport type PatchHunk = {\n label?: string;\n anchorEOF?: boolean;\n lines: PatchLine[];\n};\n\nconst normalizeNewlines = (value: string) => value.replace(/\\r\\n/g, \"\\n\");\n\nconst normalizeLineForLooseMatch = (value: string) =>\n value\n .replace(/[ \\t]+$/g, \"\")\n .replace(/;$/g, \"\")\n .replace(/['\"]/g, '\"');\n\nconst normalizeLineForWhitespaceAgnosticMatch = (value: string) =>\n normalizeLineForLooseMatch(value).trim().replace(/\\s+/g, \" \");\n\nconst stripOuterMarkdownCodeFence = (value: string) => {\n const lines = value.split(\"\\n\");\n\n let start = 0;\n while (start < lines.length && !lines[start].trim()) start += 1;\n\n let end = lines.length - 1;\n while (end >= 0 && !lines[end].trim()) end -= 1;\n\n if (start >= end) return value;\n\n const first = lines[start].trim();\n const last = lines[end].trim();\n\n const isFenceStart = /^```[a-zA-Z0-9_-]*\\s*$/.test(first);\n const isFenceEnd = last === \"```\";\n\n if (!isFenceStart || !isFenceEnd) return value;\n\n return lines.slice(start + 1, end).join(\"\\n\");\n};\n\nconst dedentBlock = (value: string) => {\n const lines = value.split(\"\\n\");\n let minIndent: number | null = null;\n\n for (const line of lines) {\n if (!line.trim()) continue;\n const match = /^[ \\t]+/.exec(line);\n const indent = match ? match[0].length : 0;\n minIndent = minIndent === null ? indent : Math.min(minIndent, indent);\n if (minIndent === 0) break;\n }\n\n if (!minIndent) return value;\n return lines\n .map((line) => {\n if (!line.trim()) return line;\n return line.slice(minIndent);\n })\n .join(\"\\n\");\n};\n\nconst preprocessPatchString = (patchString: string) => {\n const normalized = normalizeNewlines(patchString ?? \"\");\n return dedentBlock(stripOuterMarkdownCodeFence(normalized));\n};\n\nexport function parseApplyPatch(patchString: string): ApplyPatchOperation[] {\n const preprocessed = preprocessPatchString(patchString);\n const rawLines = preprocessed.split(\"\\n\");\n\n let startIndex = 0;\n while (startIndex < rawLines.length && !rawLines[startIndex].trim()) {\n startIndex += 1;\n }\n if (\n startIndex >= rawLines.length ||\n rawLines[startIndex].replace(/^\\uFEFF/, \"\").trim() !== \"*** Begin Patch\"\n ) {\n throw new Error('Invalid patch: missing \"*** Begin Patch\" header.');\n }\n\n let endIndex = -1;\n for (let idx = rawLines.length - 1; idx >= startIndex; idx -= 1) {\n if (rawLines[idx].trim() === \"*** End Patch\") {\n endIndex = idx;\n break;\n }\n }\n if (endIndex === -1) endIndex = rawLines.length;\n\n const hasFooter = endIndex !== rawLines.length;\n const hasNonEmptyAfterFooter = hasFooter\n ? rawLines.slice(endIndex + 1).some((line) => Boolean(line.trim()))\n : false;\n const lines =\n hasFooter && !hasNonEmptyAfterFooter\n ? rawLines.slice(startIndex + 1, endIndex)\n : rawLines.slice(startIndex + 1);\n const operations: ApplyPatchOperation[] = [];\n\n const isOpHeader = (line: string) =>\n line.startsWith(\"*** Add File:\") ||\n line.startsWith(\"*** Update File:\") ||\n line.startsWith(\"*** Delete File:\");\n\n let i = 0;\n while (i < lines.length) {\n const line = lines[i];\n if (line.trim() === \"*** End Patch\") {\n i += 1;\n continue;\n }\n if (!line.trim()) {\n i += 1;\n continue;\n }\n\n if (!isOpHeader(line)) {\n throw new Error(`Invalid patch: expected file header at line ${i + 2}.`);\n }\n\n if (line.startsWith(\"*** Add File:\") || line.startsWith(\"*** Update File:\")) {\n const kind = line.startsWith(\"*** Add File:\") ? \"add\" : \"update\";\n const headerLength = line.startsWith(\"*** Add File:\")\n ? \"*** Add File:\".length\n : \"*** Update File:\".length;\n const filePath = line.slice(headerLength).trim();\n if (!filePath) {\n throw new Error(\n `Invalid patch: empty ${kind === \"add\" ? \"Add\" : \"Update\"} File path.`,\n );\n }\n i += 1;\n\n let moveTo: string | undefined;\n if (i < lines.length && lines[i].startsWith(\"*** Move to:\")) {\n if (kind !== \"update\") {\n throw new Error(`Invalid patch: Move operations are only allowed for Update File.`);\n }\n moveTo = lines[i].slice(\"*** Move to:\".length).trim();\n if (!moveTo) throw new Error(`Invalid patch: empty Move to path.`);\n i += 1;\n }\n\n const hunks: PatchHunk[] = [];\n let currentHunk: PatchHunk | null = null;\n\n const pushHunk = () => {\n if (!currentHunk) return;\n if (currentHunk.lines.length === 0 && !currentHunk.anchorEOF) return;\n hunks.push(currentHunk);\n };\n\n while (i < lines.length && !isOpHeader(lines[i])) {\n const current = lines[i];\n if (!currentHunk) currentHunk = { lines: [] };\n\n if (current.trim() === \"*** End Patch\") {\n i += 1;\n continue;\n }\n\n if (current === \"*** End of File\") {\n currentHunk.anchorEOF = true;\n i += 1;\n continue;\n }\n\n if (current.startsWith(\"@@\")) {\n pushHunk();\n currentHunk = { label: current.slice(2).trim() || undefined, lines: [] };\n i += 1;\n continue;\n }\n\n const prefix = current.slice(0, 1);\n\n // Tolerate a common patch style:\n // - For \"*** Add File:\", unprefixed lines are treated as additions (full line content preserved).\n // - For \"*** Update File:\", unprefixed lines are treated as context (full line content preserved).\n if (kind === \"add\") {\n if (prefix === \"+\") {\n currentHunk.lines.push({ kind: \"add\", text: current.slice(1) });\n } else if (prefix === \"-\") {\n currentHunk.lines.push({ kind: \"delete\", text: current.slice(1) });\n } else {\n currentHunk.lines.push({ kind: \"add\", text: current });\n }\n i += 1;\n continue;\n }\n\n // update\n if (prefix === \" \") currentHunk.lines.push({ kind: \"context\", text: current.slice(1) });\n else if (prefix === \"+\") currentHunk.lines.push({ kind: \"add\", text: current.slice(1) });\n else if (prefix === \"-\") currentHunk.lines.push({ kind: \"delete\", text: current.slice(1) });\n else currentHunk.lines.push({ kind: \"context\", text: current });\n i += 1;\n }\n\n pushHunk();\n operations.push({ kind, filePath, moveTo, hunks } as any);\n continue;\n }\n\n if (line.startsWith(\"*** Delete File:\")) {\n const filePath = line.slice(\"*** Delete File:\".length).trim();\n if (!filePath) throw new Error(\"Invalid patch: empty Delete File path.\");\n operations.push({ kind: \"delete\", filePath });\n i += 1;\n continue;\n }\n }\n\n return operations;\n}\n\nconst findSubsequence = (\n haystack: string[],\n needle: string[],\n startIndex: number,\n anchorEOF: boolean,\n) => {\n if (needle.length === 0) return anchorEOF ? haystack.length : startIndex;\n\n const lastStart = haystack.length - needle.length;\n const from = Math.max(0, Math.min(startIndex, haystack.length));\n const candidates = anchorEOF ? [lastStart] : Array.from({ length: lastStart - from + 1 }, (_, i) => from + i);\n\n for (const pos of candidates) {\n if (pos < 0 || pos > lastStart) continue;\n let ok = true;\n for (let i = 0; i < needle.length; i++) {\n if ((haystack[pos + i] ?? \"\") !== needle[i]) {\n ok = false;\n break;\n }\n }\n if (ok) return pos;\n }\n\n return -1;\n};\n\ntype HunkSearchResult = { pos: number; mode: \"strict\" | \"loose\" | \"ws\" };\n\nconst findHunkPosition = (\n fileLines: string[],\n expected: string[],\n cursor: number,\n requireEnd: boolean,\n): HunkSearchResult => {\n const strictFromCursor = requireEnd\n ? findSubsequence(fileLines, expected, 0, true)\n : findSubsequence(fileLines, expected, cursor, false);\n if (strictFromCursor !== -1) return { pos: strictFromCursor, mode: \"strict\" };\n\n if (!requireEnd) {\n const strictFromStart = findSubsequence(fileLines, expected, 0, false);\n if (strictFromStart !== -1) return { pos: strictFromStart, mode: \"strict\" };\n }\n\n const looseFileLines = fileLines.map(normalizeLineForLooseMatch);\n const looseExpected = expected.map(normalizeLineForLooseMatch);\n\n const looseFromCursor = requireEnd\n ? findSubsequence(looseFileLines, looseExpected, 0, true)\n : findSubsequence(looseFileLines, looseExpected, cursor, false);\n if (looseFromCursor !== -1) return { pos: looseFromCursor, mode: \"loose\" };\n\n if (!requireEnd) {\n const looseFromStart = findSubsequence(looseFileLines, looseExpected, 0, false);\n if (looseFromStart !== -1) return { pos: looseFromStart, mode: \"loose\" };\n }\n\n const wsFileLines = fileLines.map(normalizeLineForWhitespaceAgnosticMatch);\n const wsExpected = expected.map(normalizeLineForWhitespaceAgnosticMatch);\n\n const wsFromCursor = requireEnd\n ? findSubsequence(wsFileLines, wsExpected, 0, true)\n : findSubsequence(wsFileLines, wsExpected, cursor, false);\n if (wsFromCursor !== -1) return { pos: wsFromCursor, mode: \"ws\" };\n\n if (!requireEnd) {\n const wsFromStart = findSubsequence(wsFileLines, wsExpected, 0, false);\n if (wsFromStart !== -1) return { pos: wsFromStart, mode: \"ws\" };\n }\n\n return { pos: -1, mode: \"strict\" };\n};\n\nexport function applyHunksToContent(\n content: string,\n hunks: PatchHunk[],\n): { content: string; changed: boolean } {\n const normalized = normalizeNewlines(content);\n const newline = content.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n const endsWithNewline = normalized.endsWith(\"\\n\");\n const fileLines = normalized.split(\"\\n\");\n\n let cursor = 0;\n let changed = false;\n\n for (const hunk of hunks) {\n const expected = hunk.lines\n .filter((l) => l.kind === \"context\" || l.kind === \"delete\")\n .map((l) => l.text);\n\n const requireEnd = Boolean(hunk.anchorEOF);\n const { pos, mode } = findHunkPosition(fileLines, expected, cursor, requireEnd);\n\n if (pos === -1) {\n const preview = expected.slice(0, 3).join(\"\\\\n\");\n throw new Error(\n `Patch hunk failed to apply${hunk.label ? ` (${hunk.label})` : \"\"}: context not found. Expected (first lines): ${preview}`,\n );\n }\n\n const linesEqual = (a: string, b: string) => {\n if (mode === \"strict\") return a === b;\n if (mode === \"loose\") {\n return normalizeLineForLooseMatch(a) === normalizeLineForLooseMatch(b);\n }\n return (\n normalizeLineForWhitespaceAgnosticMatch(a) ===\n normalizeLineForWhitespaceAgnosticMatch(b)\n );\n };\n\n let idx = pos;\n for (const line of hunk.lines) {\n if (line.kind === \"context\") {\n if (!linesEqual(fileLines[idx] ?? \"\", line.text)) {\n throw new Error(\n `Patch context mismatch at line ${idx + 1}: expected \"${line.text}\"`,\n );\n }\n idx += 1;\n continue;\n }\n\n if (line.kind === \"delete\") {\n if (!linesEqual(fileLines[idx] ?? \"\", line.text)) {\n throw new Error(\n `Patch delete mismatch at line ${idx + 1}: expected \"${line.text}\"`,\n );\n }\n fileLines.splice(idx, 1);\n changed = true;\n continue;\n }\n\n if (line.kind === \"add\") {\n fileLines.splice(idx, 0, line.text);\n idx += 1;\n changed = true;\n }\n }\n\n cursor = idx;\n }\n\n let next = fileLines.join(\"\\n\");\n if (endsWithNewline && !next.endsWith(\"\\n\")) next += \"\\n\";\n next = next.replace(/\\n/g, newline);\n\n return { content: next, changed };\n}\n\nexport function isTextFilePath(filePath: string) {\n const ext = path.extname(filePath).toLowerCase();\n return ext !== \".png\" && ext !== \".jpg\" && ext !== \".jpeg\" && ext !== \".gif\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"applyPatch.helpers.js","sourceRoot":"","sources":["../../../../src/ai/tools/helpers/applyPatch.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\";\n\nexport type ApplyPatchOperation =\n | {\n kind: \"update\";\n filePath: string;\n moveTo?: string;\n hunks: PatchHunk[];\n }\n | {\n kind: \"add\";\n filePath: string;\n hunks: PatchHunk[];\n }\n | {\n kind: \"delete\";\n filePath: string;\n };\n\ntype PatchLine =\n | { kind: \"context\"; text: string }\n | { kind: \"add\"; text: string }\n | { kind: \"delete\"; text: string };\n\nexport type PatchHunk = {\n label?: string;\n anchorEOF?: boolean;\n lines: PatchLine[];\n};\n\nconst normalizeNewlines = (value: string) => value.replace(/\\r\\n/g, \"\\n\");\n\nconst normalizeLineForLooseMatch = (value: string) => {\n let trimmed = value;\n while (trimmed.endsWith(\" \") || trimmed.endsWith(\"\\t\")) {\n trimmed = trimmed.slice(0, -1);\n }\n return trimmed\n .replace(/;$/g, \"\")\n .replace(/['\"]/g, '\"');\n};\n\nconst normalizeLineForWhitespaceAgnosticMatch = (value: string) =>\n normalizeLineForLooseMatch(value).trim().replace(/\\s+/g, \" \");\n\nconst stripOuterMarkdownCodeFence = (value: string) => {\n const lines = value.split(\"\\n\");\n\n let start = 0;\n while (start < lines.length && !lines[start].trim()) start += 1;\n\n let end = lines.length - 1;\n while (end >= 0 && !lines[end].trim()) end -= 1;\n\n if (start >= end) return value;\n\n const first = lines[start].trim();\n const last = lines[end].trim();\n\n const isFenceStart = /^```[a-zA-Z0-9_-]*\\s*$/.test(first);\n const isFenceEnd = last === \"```\";\n\n if (!isFenceStart || !isFenceEnd) return value;\n\n return lines.slice(start + 1, end).join(\"\\n\");\n};\n\nconst dedentBlock = (value: string) => {\n const lines = value.split(\"\\n\");\n let minIndent: number | null = null;\n\n for (const line of lines) {\n if (!line.trim()) continue;\n const match = /^[ \\t]+/.exec(line);\n const indent = match ? match[0].length : 0;\n minIndent = minIndent === null ? indent : Math.min(minIndent, indent);\n if (minIndent === 0) break;\n }\n\n if (!minIndent) return value;\n return lines\n .map((line) => {\n if (!line.trim()) return line;\n return line.slice(minIndent);\n })\n .join(\"\\n\");\n};\n\nconst preprocessPatchString = (patchString: string) => {\n const normalized = normalizeNewlines(patchString ?? \"\");\n return dedentBlock(stripOuterMarkdownCodeFence(normalized));\n};\n\nexport function parseApplyPatch(patchString: string): ApplyPatchOperation[] {\n const preprocessed = preprocessPatchString(patchString);\n const rawLines = preprocessed.split(\"\\n\");\n\n let startIndex = 0;\n while (startIndex < rawLines.length && !rawLines[startIndex].trim()) {\n startIndex += 1;\n }\n if (\n startIndex >= rawLines.length ||\n rawLines[startIndex].replace(/^\\uFEFF/, \"\").trim() !== \"*** Begin Patch\"\n ) {\n throw new Error('Invalid patch: missing \"*** Begin Patch\" header.');\n }\n\n let endIndex = -1;\n for (let idx = rawLines.length - 1; idx >= startIndex; idx -= 1) {\n if (rawLines[idx].trim() === \"*** End Patch\") {\n endIndex = idx;\n break;\n }\n }\n if (endIndex === -1) endIndex = rawLines.length;\n\n const hasFooter = endIndex !== rawLines.length;\n const hasNonEmptyAfterFooter = hasFooter\n ? rawLines.slice(endIndex + 1).some((line) => Boolean(line.trim()))\n : false;\n const lines =\n hasFooter && !hasNonEmptyAfterFooter\n ? rawLines.slice(startIndex + 1, endIndex)\n : rawLines.slice(startIndex + 1);\n const operations: ApplyPatchOperation[] = [];\n\n const isOpHeader = (line: string) =>\n line.startsWith(\"*** Add File:\") ||\n line.startsWith(\"*** Update File:\") ||\n line.startsWith(\"*** Delete File:\");\n\n let i = 0;\n while (i < lines.length) {\n const line = lines[i];\n if (line.trim() === \"*** End Patch\") {\n i += 1;\n continue;\n }\n if (!line.trim()) {\n i += 1;\n continue;\n }\n\n if (!isOpHeader(line)) {\n throw new Error(`Invalid patch: expected file header at line ${i + 2}.`);\n }\n\n if (line.startsWith(\"*** Add File:\") || line.startsWith(\"*** Update File:\")) {\n const kind = line.startsWith(\"*** Add File:\") ? \"add\" : \"update\";\n const headerLength = line.startsWith(\"*** Add File:\")\n ? \"*** Add File:\".length\n : \"*** Update File:\".length;\n const filePath = line.slice(headerLength).trim();\n if (!filePath) {\n throw new Error(\n `Invalid patch: empty ${kind === \"add\" ? \"Add\" : \"Update\"} File path.`,\n );\n }\n i += 1;\n\n let moveTo: string | undefined;\n if (i < lines.length && lines[i].startsWith(\"*** Move to:\")) {\n if (kind !== \"update\") {\n throw new Error(`Invalid patch: Move operations are only allowed for Update File.`);\n }\n moveTo = lines[i].slice(\"*** Move to:\".length).trim();\n if (!moveTo) throw new Error(`Invalid patch: empty Move to path.`);\n i += 1;\n }\n\n const hunks: PatchHunk[] = [];\n let currentHunk: PatchHunk | null = null;\n\n const pushHunk = () => {\n if (!currentHunk) return;\n if (currentHunk.lines.length === 0 && !currentHunk.anchorEOF) return;\n hunks.push(currentHunk);\n };\n\n while (i < lines.length && !isOpHeader(lines[i])) {\n const current = lines[i];\n if (!currentHunk) currentHunk = { lines: [] };\n\n if (current.trim() === \"*** End Patch\") {\n i += 1;\n continue;\n }\n\n if (current === \"*** End of File\") {\n currentHunk.anchorEOF = true;\n i += 1;\n continue;\n }\n\n if (current.startsWith(\"@@\")) {\n pushHunk();\n currentHunk = { label: current.slice(2).trim() || undefined, lines: [] };\n i += 1;\n continue;\n }\n\n const prefix = current.slice(0, 1);\n\n // Tolerate a common patch style:\n // - For \"*** Add File:\", unprefixed lines are treated as additions (full line content preserved).\n // - For \"*** Update File:\", unprefixed lines are treated as context (full line content preserved).\n if (kind === \"add\") {\n if (prefix === \"+\") {\n currentHunk.lines.push({ kind: \"add\", text: current.slice(1) });\n } else if (prefix === \"-\") {\n currentHunk.lines.push({ kind: \"delete\", text: current.slice(1) });\n } else {\n currentHunk.lines.push({ kind: \"add\", text: current });\n }\n i += 1;\n continue;\n }\n\n // update\n if (prefix === \" \") currentHunk.lines.push({ kind: \"context\", text: current.slice(1) });\n else if (prefix === \"+\") currentHunk.lines.push({ kind: \"add\", text: current.slice(1) });\n else if (prefix === \"-\") currentHunk.lines.push({ kind: \"delete\", text: current.slice(1) });\n else currentHunk.lines.push({ kind: \"context\", text: current });\n i += 1;\n }\n\n pushHunk();\n operations.push({ kind, filePath, moveTo, hunks } as any);\n continue;\n }\n\n if (line.startsWith(\"*** Delete File:\")) {\n const filePath = line.slice(\"*** Delete File:\".length).trim();\n if (!filePath) throw new Error(\"Invalid patch: empty Delete File path.\");\n operations.push({ kind: \"delete\", filePath });\n i += 1;\n continue;\n }\n }\n\n return operations;\n}\n\nconst findSubsequence = (\n haystack: string[],\n needle: string[],\n startIndex: number,\n anchorEOF: boolean,\n) => {\n if (needle.length === 0) return anchorEOF ? haystack.length : startIndex;\n\n const lastStart = haystack.length - needle.length;\n const from = Math.max(0, Math.min(startIndex, haystack.length));\n const candidates = anchorEOF ? [lastStart] : Array.from({ length: lastStart - from + 1 }, (_, i) => from + i);\n\n for (const pos of candidates) {\n if (pos < 0 || pos > lastStart) continue;\n let ok = true;\n for (let i = 0; i < needle.length; i++) {\n if ((haystack[pos + i] ?? \"\") !== needle[i]) {\n ok = false;\n break;\n }\n }\n if (ok) return pos;\n }\n\n return -1;\n};\n\ntype HunkSearchResult = { pos: number; mode: \"strict\" | \"loose\" | \"ws\" };\n\nconst findHunkPosition = (\n fileLines: string[],\n expected: string[],\n cursor: number,\n requireEnd: boolean,\n): HunkSearchResult => {\n const strictFromCursor = requireEnd\n ? findSubsequence(fileLines, expected, 0, true)\n : findSubsequence(fileLines, expected, cursor, false);\n if (strictFromCursor !== -1) return { pos: strictFromCursor, mode: \"strict\" };\n\n if (!requireEnd) {\n const strictFromStart = findSubsequence(fileLines, expected, 0, false);\n if (strictFromStart !== -1) return { pos: strictFromStart, mode: \"strict\" };\n }\n\n const looseFileLines = fileLines.map(normalizeLineForLooseMatch);\n const looseExpected = expected.map(normalizeLineForLooseMatch);\n\n const looseFromCursor = requireEnd\n ? findSubsequence(looseFileLines, looseExpected, 0, true)\n : findSubsequence(looseFileLines, looseExpected, cursor, false);\n if (looseFromCursor !== -1) return { pos: looseFromCursor, mode: \"loose\" };\n\n if (!requireEnd) {\n const looseFromStart = findSubsequence(looseFileLines, looseExpected, 0, false);\n if (looseFromStart !== -1) return { pos: looseFromStart, mode: \"loose\" };\n }\n\n const wsFileLines = fileLines.map(normalizeLineForWhitespaceAgnosticMatch);\n const wsExpected = expected.map(normalizeLineForWhitespaceAgnosticMatch);\n\n const wsFromCursor = requireEnd\n ? findSubsequence(wsFileLines, wsExpected, 0, true)\n : findSubsequence(wsFileLines, wsExpected, cursor, false);\n if (wsFromCursor !== -1) return { pos: wsFromCursor, mode: \"ws\" };\n\n if (!requireEnd) {\n const wsFromStart = findSubsequence(wsFileLines, wsExpected, 0, false);\n if (wsFromStart !== -1) return { pos: wsFromStart, mode: \"ws\" };\n }\n\n return { pos: -1, mode: \"strict\" };\n};\n\nexport function applyHunksToContent(\n content: string,\n hunks: PatchHunk[],\n): { content: string; changed: boolean } {\n const normalized = normalizeNewlines(content);\n const newline = content.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n const endsWithNewline = normalized.endsWith(\"\\n\");\n const fileLines = normalized.split(\"\\n\");\n\n let cursor = 0;\n let changed = false;\n\n for (const hunk of hunks) {\n const expected = hunk.lines\n .filter((l) => l.kind === \"context\" || l.kind === \"delete\")\n .map((l) => l.text);\n\n const requireEnd = Boolean(hunk.anchorEOF);\n const { pos, mode } = findHunkPosition(fileLines, expected, cursor, requireEnd);\n\n if (pos === -1) {\n const preview = expected.slice(0, 3).join(\"\\\\n\");\n throw new Error(\n `Patch hunk failed to apply${hunk.label ? ` (${hunk.label})` : \"\"}: context not found. Expected (first lines): ${preview}`,\n );\n }\n\n const linesEqual = (a: string, b: string) => {\n if (mode === \"strict\") return a === b;\n if (mode === \"loose\") {\n return normalizeLineForLooseMatch(a) === normalizeLineForLooseMatch(b);\n }\n return (\n normalizeLineForWhitespaceAgnosticMatch(a) ===\n normalizeLineForWhitespaceAgnosticMatch(b)\n );\n };\n\n let idx = pos;\n for (const line of hunk.lines) {\n if (line.kind === \"context\") {\n if (!linesEqual(fileLines[idx] ?? \"\", line.text)) {\n throw new Error(\n `Patch context mismatch at line ${idx + 1}: expected \"${line.text}\"`,\n );\n }\n idx += 1;\n continue;\n }\n\n if (line.kind === \"delete\") {\n if (!linesEqual(fileLines[idx] ?? \"\", line.text)) {\n throw new Error(\n `Patch delete mismatch at line ${idx + 1}: expected \"${line.text}\"`,\n );\n }\n fileLines.splice(idx, 1);\n changed = true;\n continue;\n }\n\n if (line.kind === \"add\") {\n fileLines.splice(idx, 0, line.text);\n idx += 1;\n changed = true;\n }\n }\n\n cursor = idx;\n }\n\n let next = fileLines.join(\"\\n\");\n if (endsWithNewline && !next.endsWith(\"\\n\")) next += \"\\n\";\n next = next.replace(/\\n/g, newline);\n\n return { content: next, changed };\n}\n\nexport function isTextFilePath(filePath: string) {\n const ext = path.extname(filePath).toLowerCase();\n return ext !== \".png\" && ext !== \".jpg\" && ext !== \".jpeg\" && ext !== \".gif\";\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileSystem.helpers.d.ts","sourceRoot":"","sources":["../../../../src/ai/tools/helpers/fileSystem.helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fileSystem.helpers.d.ts","sourceRoot":"","sources":["../../../../src/ai/tools/helpers/fileSystem.helpers.ts"],"names":[],"mappings":"AAkDA,eAAO,MAAM,eAAe,GAAI,eAAe,MAAM,EAAE,WAAW,MAAM,WAoBvE,CAAC"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
const normalizeForPrefixCheck = (value) =>
|
|
2
|
+
const normalizeForPrefixCheck = (value) => {
|
|
3
|
+
let normalized = value.replace(/\\/g, "/");
|
|
4
|
+
while (normalized.endsWith("/")) {
|
|
5
|
+
normalized = normalized.slice(0, -1);
|
|
6
|
+
}
|
|
7
|
+
return normalized;
|
|
8
|
+
};
|
|
3
9
|
const stripKnownWorkspacePrefix = (inputPath, workspaceRoot) => {
|
|
4
10
|
const inputNormalized = normalizeForPrefixCheck(inputPath);
|
|
5
11
|
const workspaceNormalized = normalizeForPrefixCheck(workspaceRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileSystem.helpers.js","sourceRoot":"","sources":["../../../../src/ai/tools/helpers/fileSystem.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,uBAAuB,GAAG,CAAC,KAAa,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"fileSystem.helpers.js","sourceRoot":"","sources":["../../../../src/ai/tools/helpers/fileSystem.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\";\n\nconst normalizeForPrefixCheck = (value: string) => {\n let normalized = value.replace(/\\\\/g, \"/\");\n while (normalized.endsWith(\"/\")) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n};\n\nconst stripKnownWorkspacePrefix = (inputPath: string, workspaceRoot: string) => {\n const inputNormalized = normalizeForPrefixCheck(inputPath);\n const workspaceNormalized = normalizeForPrefixCheck(workspaceRoot);\n const caseInsensitive = process.platform === \"win32\";\n const inputCmp = caseInsensitive ? inputNormalized.toLowerCase() : inputNormalized;\n const workspaceCmp = caseInsensitive\n ? workspaceNormalized.toLowerCase()\n : workspaceNormalized;\n\n if (\n inputCmp === workspaceCmp ||\n inputCmp.startsWith(`${workspaceCmp}/`)\n ) {\n return inputNormalized.slice(workspaceNormalized.length);\n }\n\n const hardcodedWorkspace = \"/tmp/workspace\";\n if (\n inputCmp === (caseInsensitive ? hardcodedWorkspace.toLowerCase() : hardcodedWorkspace) ||\n inputCmp.startsWith(`${caseInsensitive ? hardcodedWorkspace.toLowerCase() : hardcodedWorkspace}/`)\n ) {\n return inputNormalized.slice(hardcodedWorkspace.length);\n }\n\n const hardcodedWorkspaceNoSlash = \"tmp/workspace\";\n if (\n inputCmp ===\n (caseInsensitive\n ? hardcodedWorkspaceNoSlash.toLowerCase()\n : hardcodedWorkspaceNoSlash) ||\n inputCmp.startsWith(\n `${caseInsensitive ? hardcodedWorkspaceNoSlash.toLowerCase() : hardcodedWorkspaceNoSlash}/`,\n )\n ) {\n return inputNormalized.slice(hardcodedWorkspaceNoSlash.length);\n }\n\n return null;\n};\n\nexport const toWorkspacePath = (workspaceRoot: string, inputPath: string) => {\n const stripped = stripKnownWorkspacePrefix(inputPath, workspaceRoot);\n const isAbsoluteInput = path.isAbsolute(inputPath);\n\n if (stripped === null && isAbsoluteInput) {\n throw new Error(\n `Path \"${inputPath}\" is absolute but not within workspace \"${workspaceRoot}\".`,\n );\n }\n\n const relativePath = (stripped ?? inputPath).replace(/^[\\/\\\\]+/, \"\");\n const resolvedRoot = path.resolve(workspaceRoot);\n const resolved = path.resolve(resolvedRoot, relativePath);\n const rel = path.relative(resolvedRoot, resolved);\n\n if (rel.startsWith(\"..\") || path.isAbsolute(rel)) {\n throw new Error(`Path \"${inputPath}\" resolves outside the workspace root.`);\n }\n\n return resolved;\n};\n"]}
|
|
@@ -25,4 +25,17 @@ export declare const getAvailableRoutes: (deps: {
|
|
|
25
25
|
}) => Promise<string[]>;
|
|
26
26
|
export declare const matchRoute: (physicalRoute: string, requestedRoute: string) => boolean;
|
|
27
27
|
export declare const resolvePageConfigJsonPath: (workspaceRoot: string, route: string, fs: CoreFs) => Promise<string>;
|
|
28
|
+
export declare const loadAndPreparePageConfig: (workspaceRoot: string, route: string, fs: CoreFs) => Promise<{
|
|
29
|
+
success: false;
|
|
30
|
+
error: string;
|
|
31
|
+
configPath?: undefined;
|
|
32
|
+
elements?: undefined;
|
|
33
|
+
existingIds?: undefined;
|
|
34
|
+
} | {
|
|
35
|
+
success: true;
|
|
36
|
+
configPath: string;
|
|
37
|
+
elements: BuilderElement[];
|
|
38
|
+
existingIds: Set<string>;
|
|
39
|
+
error?: undefined;
|
|
40
|
+
}>;
|
|
28
41
|
//# sourceMappingURL=pageConfigJson.helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageConfigJson.helpers.d.ts","sourceRoot":"","sources":["../../../../src/ai/tools/helpers/pageConfigJson.helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,OAAO,MAAM,KAAG,MAAM,EAQ5D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,YAM5C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,EAAE,OAAO,MAAM,WAOzE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,cAkBrD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,QAAQ,cAAc,WACO,CAAC;AAEtE,eAAO,MAAM,iBAAiB,GAAI,UAAU,cAAc,EAAE,gBAa3D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,UAAU,cAAc,EAAE,EAC1B,aAAa,GAAG,CAAC,MAAM,CAAC,SA0BzB,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,cAAc,EAAE,EAC1B,WAAW,MAAM,KAChB,cAAc,GAAG,IAkBnB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,UAAU,cAAc,EAAE,EAC1B,IAAI,MAAM,KACT,OAkBF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,UAAU,MAAM,EAAE,SAAS,MAAM,kBAkDtE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,MAAM;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE;QACF,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;YAClD,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,MAAM,OAAO,CAAC;SACvB,CAAC,CAAC,CAAC;KACL,CAAC;CACH,KAAG,OAAO,CAAC,MAAM,EAAE,CAoCnB,CAAC;
|
|
1
|
+
{"version":3,"file":"pageConfigJson.helpers.d.ts","sourceRoot":"","sources":["../../../../src/ai/tools/helpers/pageConfigJson.helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,OAAO,MAAM,KAAG,MAAM,EAQ5D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,YAM5C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,EAAE,OAAO,MAAM,WAOzE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,cAkBrD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,QAAQ,cAAc,WACO,CAAC;AAEtE,eAAO,MAAM,iBAAiB,GAAI,UAAU,cAAc,EAAE,gBAa3D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,UAAU,cAAc,EAAE,EAC1B,aAAa,GAAG,CAAC,MAAM,CAAC,SA0BzB,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,cAAc,EAAE,EAC1B,WAAW,MAAM,KAChB,cAAc,GAAG,IAkBnB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,UAAU,cAAc,EAAE,EAC1B,IAAI,MAAM,KACT,OAkBF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,UAAU,MAAM,EAAE,SAAS,MAAM,kBAkDtE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,MAAM;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE;QACF,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;YAClD,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,MAAM,OAAO,CAAC;SACvB,CAAC,CAAC,CAAC;KACL,CAAC;CACH,KAAG,OAAO,CAAC,MAAM,EAAE,CAoCnB,CAAC;AAWF,eAAO,MAAM,UAAU,GAAI,eAAe,MAAM,EAAE,gBAAgB,MAAM,KAAG,OA6B1E,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,eAAe,MAAM,EACrB,OAAO,MAAM,EACb,IAAI,MAAM,KACT,OAAO,CAAC,MAAM,CAsBhB,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,eAAe,MAAM,EACrB,OAAO,MAAM,EACb,IAAI,MAAM;;;;;;;;;;;;EA4CX,CAAC"}
|