@auvira.ai/sdk 0.2.9
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/LICENSE +21 -0
- package/README.md +414 -0
- package/dist/agent/Agent.d.ts +27 -0
- package/dist/agent/Agent.d.ts.map +1 -0
- package/dist/agent/Agent.js +144 -0
- package/dist/agent/Agent.js.map +1 -0
- package/dist/agent/AgentRegistry.d.ts +13 -0
- package/dist/agent/AgentRegistry.d.ts.map +1 -0
- package/dist/agent/AgentRegistry.js +28 -0
- package/dist/agent/AgentRegistry.js.map +1 -0
- package/dist/agent/AgentRun.d.ts +38 -0
- package/dist/agent/AgentRun.d.ts.map +1 -0
- package/dist/agent/AgentRun.js +101 -0
- package/dist/agent/AgentRun.js.map +1 -0
- package/dist/agent/ConversationStore.d.ts +18 -0
- package/dist/agent/ConversationStore.d.ts.map +1 -0
- package/dist/agent/ConversationStore.js +38 -0
- package/dist/agent/ConversationStore.js.map +1 -0
- package/dist/agent/RunEventBus.d.ts +43 -0
- package/dist/agent/RunEventBus.d.ts.map +1 -0
- package/dist/agent/RunEventBus.js +289 -0
- package/dist/agent/RunEventBus.js.map +1 -0
- package/dist/agent/assistantEvent.d.ts +11 -0
- package/dist/agent/assistantEvent.d.ts.map +1 -0
- package/dist/agent/assistantEvent.js +20 -0
- package/dist/agent/assistantEvent.js.map +1 -0
- package/dist/agent/buildAgentPrompt.d.ts +10 -0
- package/dist/agent/buildAgentPrompt.d.ts.map +1 -0
- package/dist/agent/buildAgentPrompt.js +39 -0
- package/dist/agent/buildAgentPrompt.js.map +1 -0
- package/dist/agent/cancellation.d.ts +9 -0
- package/dist/agent/cancellation.d.ts.map +1 -0
- package/dist/agent/cancellation.js +18 -0
- package/dist/agent/cancellation.js.map +1 -0
- package/dist/agent/editCompletion.d.ts +35 -0
- package/dist/agent/editCompletion.d.ts.map +1 -0
- package/dist/agent/editCompletion.js +179 -0
- package/dist/agent/editCompletion.js.map +1 -0
- package/dist/agent/editEvents.d.ts +11 -0
- package/dist/agent/editEvents.d.ts.map +1 -0
- package/dist/agent/editEvents.js +36 -0
- package/dist/agent/editEvents.js.map +1 -0
- package/dist/agent/evaluateTaskCompletion.d.ts +49 -0
- package/dist/agent/evaluateTaskCompletion.d.ts.map +1 -0
- package/dist/agent/evaluateTaskCompletion.js +257 -0
- package/dist/agent/evaluateTaskCompletion.js.map +1 -0
- package/dist/agent/events.d.ts +182 -0
- package/dist/agent/events.d.ts.map +1 -0
- package/dist/agent/events.js +25 -0
- package/dist/agent/events.js.map +1 -0
- package/dist/agent/parseSendPayload.d.ts +24 -0
- package/dist/agent/parseSendPayload.d.ts.map +1 -0
- package/dist/agent/parseSendPayload.js +71 -0
- package/dist/agent/parseSendPayload.js.map +1 -0
- package/dist/agent/patchUtils.d.ts +17 -0
- package/dist/agent/patchUtils.d.ts.map +1 -0
- package/dist/agent/patchUtils.js +90 -0
- package/dist/agent/patchUtils.js.map +1 -0
- package/dist/agent/resolveModelConfig.d.ts +4 -0
- package/dist/agent/resolveModelConfig.d.ts.map +1 -0
- package/dist/agent/resolveModelConfig.js +27 -0
- package/dist/agent/resolveModelConfig.js.map +1 -0
- package/dist/agent/runAgentTask.d.ts +14 -0
- package/dist/agent/runAgentTask.d.ts.map +1 -0
- package/dist/agent/runAgentTask.js +376 -0
- package/dist/agent/runAgentTask.js.map +1 -0
- package/dist/agent/runResult.d.ts +10 -0
- package/dist/agent/runResult.d.ts.map +1 -0
- package/dist/agent/runResult.js +34 -0
- package/dist/agent/runResult.js.map +1 -0
- package/dist/agent/runValidationWithRepair.d.ts +32 -0
- package/dist/agent/runValidationWithRepair.d.ts.map +1 -0
- package/dist/agent/runValidationWithRepair.js +114 -0
- package/dist/agent/runValidationWithRepair.js.map +1 -0
- package/dist/agent/tools/edit.d.ts +4 -0
- package/dist/agent/tools/edit.d.ts.map +1 -0
- package/dist/agent/tools/edit.js +98 -0
- package/dist/agent/tools/edit.js.map +1 -0
- package/dist/agent/tools/executeTool.d.ts +8 -0
- package/dist/agent/tools/executeTool.d.ts.map +1 -0
- package/dist/agent/tools/executeTool.js +104 -0
- package/dist/agent/tools/executeTool.js.map +1 -0
- package/dist/agent/tools/glob.d.ts +6 -0
- package/dist/agent/tools/glob.d.ts.map +1 -0
- package/dist/agent/tools/glob.js +77 -0
- package/dist/agent/tools/glob.js.map +1 -0
- package/dist/agent/tools/grep.d.ts +4 -0
- package/dist/agent/tools/grep.d.ts.map +1 -0
- package/dist/agent/tools/grep.js +61 -0
- package/dist/agent/tools/grep.js.map +1 -0
- package/dist/agent/tools/pathGuard.d.ts +11 -0
- package/dist/agent/tools/pathGuard.d.ts.map +1 -0
- package/dist/agent/tools/pathGuard.js +55 -0
- package/dist/agent/tools/pathGuard.js.map +1 -0
- package/dist/agent/tools/read.d.ts +4 -0
- package/dist/agent/tools/read.d.ts.map +1 -0
- package/dist/agent/tools/read.js +41 -0
- package/dist/agent/tools/read.js.map +1 -0
- package/dist/agent/tools/types.d.ts +46 -0
- package/dist/agent/tools/types.d.ts.map +1 -0
- package/dist/agent/tools/types.js +2 -0
- package/dist/agent/tools/types.js.map +1 -0
- package/dist/agent/tools/write.d.ts +4 -0
- package/dist/agent/tools/write.d.ts.map +1 -0
- package/dist/agent/tools/write.js +63 -0
- package/dist/agent/tools/write.js.map +1 -0
- package/dist/agent/types.d.ts +193 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +18 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agent/validateOptions.d.ts +12 -0
- package/dist/agent/validateOptions.d.ts.map +1 -0
- package/dist/agent/validateOptions.js +91 -0
- package/dist/agent/validateOptions.js.map +1 -0
- package/dist/git/cloneGitLabProject.d.ts +10 -0
- package/dist/git/cloneGitLabProject.d.ts.map +1 -0
- package/dist/git/cloneGitLabProject.js +24 -0
- package/dist/git/cloneGitLabProject.js.map +1 -0
- package/dist/git/createAgentBranch.d.ts +3 -0
- package/dist/git/createAgentBranch.d.ts.map +1 -0
- package/dist/git/createAgentBranch.js +14 -0
- package/dist/git/createAgentBranch.js.map +1 -0
- package/dist/git/gitDiff.d.ts +9 -0
- package/dist/git/gitDiff.d.ts.map +1 -0
- package/dist/git/gitDiff.js +34 -0
- package/dist/git/gitDiff.js.map +1 -0
- package/dist/git/maskSecrets.d.ts +3 -0
- package/dist/git/maskSecrets.d.ts.map +1 -0
- package/dist/git/maskSecrets.js +15 -0
- package/dist/git/maskSecrets.js.map +1 -0
- package/dist/git/resolveGitLabProject.d.ts +26 -0
- package/dist/git/resolveGitLabProject.d.ts.map +1 -0
- package/dist/git/resolveGitLabProject.js +68 -0
- package/dist/git/resolveGitLabProject.js.map +1 -0
- package/dist/git/sanitizeGitLabUrl.d.ts +8 -0
- package/dist/git/sanitizeGitLabUrl.d.ts.map +1 -0
- package/dist/git/sanitizeGitLabUrl.js +38 -0
- package/dist/git/sanitizeGitLabUrl.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/agentic/AgenticCustomProvider.d.ts +9 -0
- package/dist/providers/agentic/AgenticCustomProvider.d.ts.map +1 -0
- package/dist/providers/agentic/AgenticCustomProvider.js +366 -0
- package/dist/providers/agentic/AgenticCustomProvider.js.map +1 -0
- package/dist/providers/agentic/agentLoop.d.ts +79 -0
- package/dist/providers/agentic/agentLoop.d.ts.map +1 -0
- package/dist/providers/agentic/agentLoop.js +646 -0
- package/dist/providers/agentic/agentLoop.js.map +1 -0
- package/dist/providers/agentic/priomptContext.d.ts +29 -0
- package/dist/providers/agentic/priomptContext.d.ts.map +1 -0
- package/dist/providers/agentic/priomptContext.js +90 -0
- package/dist/providers/agentic/priomptContext.js.map +1 -0
- package/dist/providers/agentic/seedRetrieval.d.ts +12 -0
- package/dist/providers/agentic/seedRetrieval.d.ts.map +1 -0
- package/dist/providers/agentic/seedRetrieval.js +58 -0
- package/dist/providers/agentic/seedRetrieval.js.map +1 -0
- package/dist/providers/agentic/toolPolicy.d.ts +15 -0
- package/dist/providers/agentic/toolPolicy.d.ts.map +1 -0
- package/dist/providers/agentic/toolPolicy.js +53 -0
- package/dist/providers/agentic/toolPolicy.js.map +1 -0
- package/dist/providers/agentic/toolSchemas.d.ts +177 -0
- package/dist/providers/agentic/toolSchemas.d.ts.map +1 -0
- package/dist/providers/agentic/toolSchemas.js +104 -0
- package/dist/providers/agentic/toolSchemas.js.map +1 -0
- package/dist/providers/agentic/trimAgentHistory.d.ts +18 -0
- package/dist/providers/agentic/trimAgentHistory.d.ts.map +1 -0
- package/dist/providers/agentic/trimAgentHistory.js +68 -0
- package/dist/providers/agentic/trimAgentHistory.js.map +1 -0
- package/dist/providers/custom/CustomModelProvider.d.ts +4 -0
- package/dist/providers/custom/CustomModelProvider.d.ts.map +1 -0
- package/dist/providers/custom/CustomModelProvider.js +538 -0
- package/dist/providers/custom/CustomModelProvider.js.map +1 -0
- package/dist/providers/custom/discoverTargetFiles.d.ts +16 -0
- package/dist/providers/custom/discoverTargetFiles.d.ts.map +1 -0
- package/dist/providers/custom/discoverTargetFiles.js +231 -0
- package/dist/providers/custom/discoverTargetFiles.js.map +1 -0
- package/dist/providers/custom/harnessPinTypes.d.ts +15 -0
- package/dist/providers/custom/harnessPinTypes.d.ts.map +1 -0
- package/dist/providers/custom/harnessPinTypes.js +46 -0
- package/dist/providers/custom/harnessPinTypes.js.map +1 -0
- package/dist/providers/custom/harnessPrompt.d.ts +29 -0
- package/dist/providers/custom/harnessPrompt.d.ts.map +1 -0
- package/dist/providers/custom/harnessPrompt.js +356 -0
- package/dist/providers/custom/harnessPrompt.js.map +1 -0
- package/dist/providers/custom/harnessSectionContext.d.ts +7 -0
- package/dist/providers/custom/harnessSectionContext.d.ts.map +1 -0
- package/dist/providers/custom/harnessSectionContext.js +82 -0
- package/dist/providers/custom/harnessSectionContext.js.map +1 -0
- package/dist/providers/custom/modelRequestDefaults.d.ts +16 -0
- package/dist/providers/custom/modelRequestDefaults.d.ts.map +1 -0
- package/dist/providers/custom/modelRequestDefaults.js +71 -0
- package/dist/providers/custom/modelRequestDefaults.js.map +1 -0
- package/dist/providers/custom/parseModelEditPlan.d.ts +21 -0
- package/dist/providers/custom/parseModelEditPlan.d.ts.map +1 -0
- package/dist/providers/custom/parseModelEditPlan.js +164 -0
- package/dist/providers/custom/parseModelEditPlan.js.map +1 -0
- package/dist/providers/custom/selectPromptFiles.d.ts +18 -0
- package/dist/providers/custom/selectPromptFiles.d.ts.map +1 -0
- package/dist/providers/custom/selectPromptFiles.js +180 -0
- package/dist/providers/custom/selectPromptFiles.js.map +1 -0
- package/dist/providers/custom/visionImages.d.ts +4 -0
- package/dist/providers/custom/visionImages.d.ts.map +1 -0
- package/dist/providers/custom/visionImages.js +10 -0
- package/dist/providers/custom/visionImages.js.map +1 -0
- package/dist/providers/openhands/OpenHandsMockProvider.d.ts +6 -0
- package/dist/providers/openhands/OpenHandsMockProvider.d.ts.map +1 -0
- package/dist/providers/openhands/OpenHandsMockProvider.js +73 -0
- package/dist/providers/openhands/OpenHandsMockProvider.js.map +1 -0
- package/dist/providers/openhands/OpenHandsProvider.d.ts +4 -0
- package/dist/providers/openhands/OpenHandsProvider.d.ts.map +1 -0
- package/dist/providers/openhands/OpenHandsProvider.js +163 -0
- package/dist/providers/openhands/OpenHandsProvider.js.map +1 -0
- package/dist/providers/openhands/openHandsEvents.d.ts +6 -0
- package/dist/providers/openhands/openHandsEvents.d.ts.map +1 -0
- package/dist/providers/openhands/openHandsEvents.js +54 -0
- package/dist/providers/openhands/openHandsEvents.js.map +1 -0
- package/dist/providers/openhands/types.d.ts +16 -0
- package/dist/providers/openhands/types.d.ts.map +1 -0
- package/dist/providers/openhands/types.js +2 -0
- package/dist/providers/openhands/types.js.map +1 -0
- package/dist/providers/runProvider.d.ts +4 -0
- package/dist/providers/runProvider.d.ts.map +1 -0
- package/dist/providers/runProvider.js +16 -0
- package/dist/providers/runProvider.js.map +1 -0
- package/dist/providers/types.d.ts +35 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +5 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/server/routes.d.ts +9 -0
- package/dist/server/routes.d.ts.map +1 -0
- package/dist/server/routes.js +58 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/server/server.d.ts +10 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +39 -0
- package/dist/server/server.js.map +1 -0
- package/dist/tools/fileExists.d.ts +3 -0
- package/dist/tools/fileExists.d.ts.map +1 -0
- package/dist/tools/fileExists.js +12 -0
- package/dist/tools/fileExists.js.map +1 -0
- package/dist/tools/resolveBuildValidation.d.ts +8 -0
- package/dist/tools/resolveBuildValidation.d.ts.map +1 -0
- package/dist/tools/resolveBuildValidation.js +35 -0
- package/dist/tools/resolveBuildValidation.js.map +1 -0
- package/dist/tools/runCommand.d.ts +17 -0
- package/dist/tools/runCommand.d.ts.map +1 -0
- package/dist/tools/runCommand.js +92 -0
- package/dist/tools/runCommand.js.map +1 -0
- package/dist/tools/safeValidateCommand.d.ts +9 -0
- package/dist/tools/safeValidateCommand.d.ts.map +1 -0
- package/dist/tools/safeValidateCommand.js +59 -0
- package/dist/tools/safeValidateCommand.js.map +1 -0
- package/dist/util/apiThrottle.d.ts +14 -0
- package/dist/util/apiThrottle.d.ts.map +1 -0
- package/dist/util/apiThrottle.js +50 -0
- package/dist/util/apiThrottle.js.map +1 -0
- package/dist/util/globMatch.d.ts +7 -0
- package/dist/util/globMatch.d.ts.map +1 -0
- package/dist/util/globMatch.js +25 -0
- package/dist/util/globMatch.js.map +1 -0
- package/dist/util/modelApiClient.d.ts +47 -0
- package/dist/util/modelApiClient.d.ts.map +1 -0
- package/dist/util/modelApiClient.js +245 -0
- package/dist/util/modelApiClient.js.map +1 -0
- package/dist/util/screenshotBase64.d.ts +3 -0
- package/dist/util/screenshotBase64.d.ts.map +1 -0
- package/dist/util/screenshotBase64.js +7 -0
- package/dist/util/screenshotBase64.js.map +1 -0
- package/dist/workspace/cleanupWorkspace.d.ts +3 -0
- package/dist/workspace/cleanupWorkspace.d.ts.map +1 -0
- package/dist/workspace/cleanupWorkspace.js +6 -0
- package/dist/workspace/cleanupWorkspace.js.map +1 -0
- package/dist/workspace/copyLocalRepo.d.ts +5 -0
- package/dist/workspace/copyLocalRepo.d.ts.map +1 -0
- package/dist/workspace/copyLocalRepo.js +34 -0
- package/dist/workspace/copyLocalRepo.js.map +1 -0
- package/dist/workspace/createWorkspace.d.ts +7 -0
- package/dist/workspace/createWorkspace.d.ts.map +1 -0
- package/dist/workspace/createWorkspace.js +10 -0
- package/dist/workspace/createWorkspace.js.map +1 -0
- package/dist/workspace/prepareWorkspace.d.ts +4 -0
- package/dist/workspace/prepareWorkspace.d.ts.map +1 -0
- package/dist/workspace/prepareWorkspace.js +46 -0
- package/dist/workspace/prepareWorkspace.js.map +1 -0
- package/dist/workspace/resolveWorkspaceMode.d.ts +7 -0
- package/dist/workspace/resolveWorkspaceMode.d.ts.map +1 -0
- package/dist/workspace/resolveWorkspaceMode.js +15 -0
- package/dist/workspace/resolveWorkspaceMode.js.map +1 -0
- package/dist/workspace/syncRepoToOwner.d.ts +3 -0
- package/dist/workspace/syncRepoToOwner.d.ts.map +1 -0
- package/dist/workspace/syncRepoToOwner.js +14 -0
- package/dist/workspace/syncRepoToOwner.js.map +1 -0
- package/dist/workspace/workspaceCheckpoint.d.ts +20 -0
- package/dist/workspace/workspaceCheckpoint.d.ts.map +1 -0
- package/dist/workspace/workspaceCheckpoint.js +243 -0
- package/dist/workspace/workspaceCheckpoint.js.map +1 -0
- package/dist/workspace/writeScreenshot.d.ts +15 -0
- package/dist/workspace/writeScreenshot.d.ts.map +1 -0
- package/dist/workspace/writeScreenshot.js +56 -0
- package/dist/workspace/writeScreenshot.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { withApiConcurrencyLimit } from "../util/apiThrottle.js";
|
|
3
|
+
import { postJsonWithRetry } from "../util/modelApiClient.js";
|
|
4
|
+
const EVALUATOR_SYSTEM_PROMPT = `You are evaluating whether a code edit task is complete.
|
|
5
|
+
|
|
6
|
+
You are given:
|
|
7
|
+
- the owner request
|
|
8
|
+
- selected DOM / pinned target context if available
|
|
9
|
+
- reference image presence/content if available
|
|
10
|
+
- changed files
|
|
11
|
+
- workspace checkpoint diff patch
|
|
12
|
+
- recent tool results
|
|
13
|
+
|
|
14
|
+
Decide whether the current diff fully satisfies the user's requested edit.
|
|
15
|
+
|
|
16
|
+
Do not rely on keywords alone.
|
|
17
|
+
Do not assume all visual edits need wiring.
|
|
18
|
+
Do not assume all single-file edits are complete.
|
|
19
|
+
Judge from the actual diff and task evidence.
|
|
20
|
+
|
|
21
|
+
Return JSON only:
|
|
22
|
+
{
|
|
23
|
+
"isComplete": true | false,
|
|
24
|
+
"confidence": number,
|
|
25
|
+
"reason": string,
|
|
26
|
+
"missingWork": string[],
|
|
27
|
+
"nextActionHint": string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
Rules:
|
|
31
|
+
- isComplete=true only if the diff appears sufficient to satisfy the requested visible/functional change.
|
|
32
|
+
- isComplete=false if the diff only changes assets/styles/config but the requested target likely still needs component wiring, prop changes, route updates, content mapping, or validation.
|
|
33
|
+
- If uncertain, use confidence below 0.75.
|
|
34
|
+
- missingWork should be short and actionable.
|
|
35
|
+
- nextActionHint should suggest the smallest next action, not broad exploration.`;
|
|
36
|
+
/** Stable cache key for completion evaluator verdicts within a run. */
|
|
37
|
+
export function computeCompletionEvaluationKey(input) {
|
|
38
|
+
const payload = JSON.stringify({
|
|
39
|
+
ownerRequest: input.ownerRequest,
|
|
40
|
+
selectedDom: input.selectedDom ?? null,
|
|
41
|
+
changedFiles: [...input.changedFiles].sort(),
|
|
42
|
+
diffPatch: input.diffPatch,
|
|
43
|
+
recentToolResults: input.recentToolResults,
|
|
44
|
+
threshold: input.threshold,
|
|
45
|
+
includeReferenceImages: input.includeReferenceImages,
|
|
46
|
+
});
|
|
47
|
+
return createHash("sha256").update(payload).digest("hex");
|
|
48
|
+
}
|
|
49
|
+
function parsePositiveFloat(raw, fallback) {
|
|
50
|
+
if (!raw?.trim()) {
|
|
51
|
+
return fallback;
|
|
52
|
+
}
|
|
53
|
+
const value = Number.parseFloat(raw);
|
|
54
|
+
return Number.isFinite(value) ? value : fallback;
|
|
55
|
+
}
|
|
56
|
+
function parsePositiveInt(raw, fallback) {
|
|
57
|
+
if (!raw?.trim()) {
|
|
58
|
+
return fallback;
|
|
59
|
+
}
|
|
60
|
+
const value = Number.parseInt(raw, 10);
|
|
61
|
+
return Number.isFinite(value) ? value : fallback;
|
|
62
|
+
}
|
|
63
|
+
/** Default confidence threshold for accepting LLM completion verdict. */
|
|
64
|
+
export function getTaskCompletionConfidenceThreshold(override) {
|
|
65
|
+
if (override !== undefined) {
|
|
66
|
+
return override;
|
|
67
|
+
}
|
|
68
|
+
return parsePositiveFloat(process.env.AUVIRA_TASK_COMPLETION_CONFIDENCE, 0.75);
|
|
69
|
+
}
|
|
70
|
+
/** Default max incomplete-continuation nudges per run. */
|
|
71
|
+
export function getCompletionMaxContinues() {
|
|
72
|
+
return parsePositiveInt(process.env.AUVIRA_COMPLETION_MAX_CONTINUES, 2);
|
|
73
|
+
}
|
|
74
|
+
function getEvaluatorTimeoutMs(override) {
|
|
75
|
+
if (override !== undefined) {
|
|
76
|
+
return override;
|
|
77
|
+
}
|
|
78
|
+
return parsePositiveInt(process.env.AUVIRA_TASK_COMPLETION_TIMEOUT_MS, 15_000);
|
|
79
|
+
}
|
|
80
|
+
function resolveEvaluatorModelId(model) {
|
|
81
|
+
const override = process.env.AUVIRA_TASK_COMPLETION_MODEL?.trim();
|
|
82
|
+
return override || model.id;
|
|
83
|
+
}
|
|
84
|
+
function tryParseDecision(raw) {
|
|
85
|
+
try {
|
|
86
|
+
const parsed = JSON.parse(raw);
|
|
87
|
+
if (typeof parsed.isComplete !== "boolean") {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
if (typeof parsed.confidence !== "number" || !Number.isFinite(parsed.confidence)) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
if (typeof parsed.reason !== "string" || !parsed.reason.trim()) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
isComplete: parsed.isComplete,
|
|
98
|
+
confidence: parsed.confidence,
|
|
99
|
+
reason: parsed.reason.trim(),
|
|
100
|
+
missingWork: Array.isArray(parsed.missingWork)
|
|
101
|
+
? parsed.missingWork.filter((item) => typeof item === "string")
|
|
102
|
+
: undefined,
|
|
103
|
+
nextActionHint: typeof parsed.nextActionHint === "string"
|
|
104
|
+
? parsed.nextActionHint.trim()
|
|
105
|
+
: undefined,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function formatSelectedDom(selectedDom) {
|
|
113
|
+
if (!selectedDom) {
|
|
114
|
+
return "None";
|
|
115
|
+
}
|
|
116
|
+
return JSON.stringify(selectedDom, null, 2);
|
|
117
|
+
}
|
|
118
|
+
function formatRecentTools(results) {
|
|
119
|
+
if (results.length === 0) {
|
|
120
|
+
return "None";
|
|
121
|
+
}
|
|
122
|
+
return results
|
|
123
|
+
.map((result) => {
|
|
124
|
+
const path = result.path ? ` path=${result.path}` : "";
|
|
125
|
+
return `- ${result.name} ok=${result.ok}${path}\n ${result.output.slice(0, 400)}`;
|
|
126
|
+
})
|
|
127
|
+
.join("\n");
|
|
128
|
+
}
|
|
129
|
+
function buildEvaluatorUserContent(input) {
|
|
130
|
+
return [
|
|
131
|
+
"OWNER REQUEST:",
|
|
132
|
+
input.ownerRequest,
|
|
133
|
+
"",
|
|
134
|
+
"SELECTED DOM:",
|
|
135
|
+
formatSelectedDom(input.selectedDom),
|
|
136
|
+
"",
|
|
137
|
+
"ALLOWED WRITE PATHS:",
|
|
138
|
+
input.allowedWritePaths?.map((path) => `- ${path}`).join("\n") || "None",
|
|
139
|
+
"",
|
|
140
|
+
"CHANGED FILES:",
|
|
141
|
+
input.changedFiles.map((file) => `- ${file}`).join("\n") || "None",
|
|
142
|
+
"",
|
|
143
|
+
"WORKSPACE CHECKPOINT DIFF PATCH:",
|
|
144
|
+
input.diffPatch.slice(0, 12_000) || "(empty)",
|
|
145
|
+
"",
|
|
146
|
+
"RECENT TOOL RESULTS:",
|
|
147
|
+
formatRecentTools(input.recentToolResults),
|
|
148
|
+
].join("\n");
|
|
149
|
+
}
|
|
150
|
+
function buildEvaluatorMessages(input) {
|
|
151
|
+
const text = buildEvaluatorUserContent(input);
|
|
152
|
+
const includeImages = input.includeReferenceImages !== false;
|
|
153
|
+
const images = includeImages ? (input.referenceImages?.filter(Boolean) ?? []) : [];
|
|
154
|
+
if (images.length === 0) {
|
|
155
|
+
return [
|
|
156
|
+
{ role: "system", content: EVALUATOR_SYSTEM_PROMPT },
|
|
157
|
+
{ role: "user", content: text },
|
|
158
|
+
];
|
|
159
|
+
}
|
|
160
|
+
return [
|
|
161
|
+
{ role: "system", content: EVALUATOR_SYSTEM_PROMPT },
|
|
162
|
+
{
|
|
163
|
+
role: "user",
|
|
164
|
+
content: [
|
|
165
|
+
{ type: "text", text },
|
|
166
|
+
...images.map((url) => ({
|
|
167
|
+
type: "image_url",
|
|
168
|
+
image_url: { url },
|
|
169
|
+
})),
|
|
170
|
+
],
|
|
171
|
+
},
|
|
172
|
+
];
|
|
173
|
+
}
|
|
174
|
+
/** Evaluates whether the current workspace checkpoint diff satisfies the owner request. */
|
|
175
|
+
export async function evaluateTaskCompletion(input) {
|
|
176
|
+
const baseURL = input.model.baseURL?.trim();
|
|
177
|
+
const apiKey = input.model.apiKey?.trim();
|
|
178
|
+
if (!baseURL || !apiKey) {
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
const startedMs = Date.now();
|
|
182
|
+
const timeoutMs = getEvaluatorTimeoutMs(input.timeoutMs);
|
|
183
|
+
const modelId = resolveEvaluatorModelId(input.model);
|
|
184
|
+
const requestBody = {
|
|
185
|
+
model: modelId,
|
|
186
|
+
messages: buildEvaluatorMessages(input),
|
|
187
|
+
temperature: 0,
|
|
188
|
+
response_format: { type: "json_object" },
|
|
189
|
+
max_completion_tokens: 512,
|
|
190
|
+
};
|
|
191
|
+
try {
|
|
192
|
+
const { value: result } = await withApiConcurrencyLimit((queueWaitMs) => postJsonWithRetry({
|
|
193
|
+
url: `${baseURL}/chat/completions`,
|
|
194
|
+
headers: {
|
|
195
|
+
Authorization: `Bearer ${apiKey}`,
|
|
196
|
+
"Content-Type": "application/json",
|
|
197
|
+
},
|
|
198
|
+
body: requestBody,
|
|
199
|
+
timeoutMs,
|
|
200
|
+
signal: input.signal,
|
|
201
|
+
}, queueWaitMs));
|
|
202
|
+
const evaluatorMs = Date.now() - startedMs;
|
|
203
|
+
if (!result.ok || !result.data) {
|
|
204
|
+
input.bus?.emit({
|
|
205
|
+
type: "completion.evaluated",
|
|
206
|
+
source: "error",
|
|
207
|
+
changedFiles: input.changedFiles,
|
|
208
|
+
evaluatorMs,
|
|
209
|
+
reason: result.errorMessage ?? "Evaluator API request failed",
|
|
210
|
+
});
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
const content = result.data.choices?.[0]?.message?.content?.trim() ?? "";
|
|
214
|
+
const decision = tryParseDecision(content);
|
|
215
|
+
if (!decision) {
|
|
216
|
+
input.bus?.emit({
|
|
217
|
+
type: "completion.evaluated",
|
|
218
|
+
source: "error",
|
|
219
|
+
changedFiles: input.changedFiles,
|
|
220
|
+
evaluatorMs,
|
|
221
|
+
reason: "Failed to parse evaluator JSON response",
|
|
222
|
+
});
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
input.bus?.emit({
|
|
226
|
+
type: "completion.evaluated",
|
|
227
|
+
source: "llm",
|
|
228
|
+
isComplete: decision.isComplete,
|
|
229
|
+
confidence: decision.confidence,
|
|
230
|
+
reason: decision.reason,
|
|
231
|
+
missingWork: decision.missingWork,
|
|
232
|
+
nextActionHint: decision.nextActionHint,
|
|
233
|
+
changedFiles: input.changedFiles,
|
|
234
|
+
evaluatorMs,
|
|
235
|
+
});
|
|
236
|
+
return decision;
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
input.bus?.emit({
|
|
240
|
+
type: "completion.evaluated",
|
|
241
|
+
source: "error",
|
|
242
|
+
changedFiles: input.changedFiles,
|
|
243
|
+
evaluatorMs: Date.now() - startedMs,
|
|
244
|
+
reason: error instanceof Error ? error.message : "Evaluator failed",
|
|
245
|
+
});
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
export function buildIncompleteContinuationNudge(decision) {
|
|
250
|
+
const missing = decision.missingWork?.filter(Boolean).join("; ") || decision.reason;
|
|
251
|
+
const hint = decision.nextActionHint?.trim();
|
|
252
|
+
const hintLine = hint ? `\nNext action: ${hint}` : "";
|
|
253
|
+
return (`The current diff is not complete yet.\n` +
|
|
254
|
+
`Missing work: ${missing}\n` +
|
|
255
|
+
`Continue with the next smallest safe edit on ALLOWED WRITE PATHS.${hintLine}`);
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=evaluateTaskCompletion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluateTaskCompletion.js","sourceRoot":"","sources":["../../src/agent/evaluateTaskCompletion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/** Base fields present on every streamed run event. */
|
|
2
|
+
export interface AgentRunEventBase {
|
|
3
|
+
type: string;
|
|
4
|
+
runId: string;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
}
|
|
7
|
+
export interface RunStartedEvent extends AgentRunEventBase {
|
|
8
|
+
type: "run.started";
|
|
9
|
+
promptPreview: string;
|
|
10
|
+
}
|
|
11
|
+
export interface WorkspacePreparedEvent extends AgentRunEventBase {
|
|
12
|
+
type: "workspace.prepared";
|
|
13
|
+
workspaceId: string;
|
|
14
|
+
branchName: string;
|
|
15
|
+
repoPath: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ScreenshotSavedEvent extends AgentRunEventBase {
|
|
18
|
+
type: "screenshot.saved";
|
|
19
|
+
path: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ContextFilesSelectedEvent extends AgentRunEventBase {
|
|
22
|
+
type: "context.files_selected";
|
|
23
|
+
files: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface ModelAttemptEvent extends AgentRunEventBase {
|
|
26
|
+
type: "model.attempt";
|
|
27
|
+
attempt: number;
|
|
28
|
+
maxAttempts: number;
|
|
29
|
+
}
|
|
30
|
+
export interface ModelRequestEvent extends AgentRunEventBase {
|
|
31
|
+
type: "model.request";
|
|
32
|
+
provider: string;
|
|
33
|
+
model: string;
|
|
34
|
+
hasVision: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface ModelResponseEvent extends AgentRunEventBase {
|
|
37
|
+
type: "model.response";
|
|
38
|
+
contentPreview: string;
|
|
39
|
+
timingMs: number;
|
|
40
|
+
httpRetries: number;
|
|
41
|
+
}
|
|
42
|
+
export interface ModelRepairEvent extends AgentRunEventBase {
|
|
43
|
+
type: "model.repair";
|
|
44
|
+
reason: string;
|
|
45
|
+
priorOutputSnippet: string;
|
|
46
|
+
}
|
|
47
|
+
export interface ThinkingEvent extends AgentRunEventBase {
|
|
48
|
+
type: "thinking";
|
|
49
|
+
text: string;
|
|
50
|
+
}
|
|
51
|
+
export interface AssistantContentBlock {
|
|
52
|
+
type: "text";
|
|
53
|
+
text: string;
|
|
54
|
+
}
|
|
55
|
+
export interface AssistantEvent extends AgentRunEventBase {
|
|
56
|
+
type: "assistant";
|
|
57
|
+
message: {
|
|
58
|
+
role: "assistant";
|
|
59
|
+
content: AssistantContentBlock[];
|
|
60
|
+
};
|
|
61
|
+
/** Flat text alias for backward compatibility. */
|
|
62
|
+
text: string;
|
|
63
|
+
}
|
|
64
|
+
export type AssistantEventInput = {
|
|
65
|
+
type: "assistant";
|
|
66
|
+
message: AssistantEvent["message"];
|
|
67
|
+
text: string;
|
|
68
|
+
};
|
|
69
|
+
export interface ToolStartEvent extends AgentRunEventBase {
|
|
70
|
+
type: "tool.start";
|
|
71
|
+
name: string;
|
|
72
|
+
input: Record<string, unknown>;
|
|
73
|
+
}
|
|
74
|
+
export interface ToolEndEvent extends AgentRunEventBase {
|
|
75
|
+
type: "tool.end";
|
|
76
|
+
name: string;
|
|
77
|
+
ok: boolean;
|
|
78
|
+
output: Record<string, unknown>;
|
|
79
|
+
}
|
|
80
|
+
export interface EditParsedEvent extends AgentRunEventBase {
|
|
81
|
+
type: "edit.parsed";
|
|
82
|
+
editCount: number;
|
|
83
|
+
paths: string[];
|
|
84
|
+
}
|
|
85
|
+
export interface EditAppliedEvent extends AgentRunEventBase {
|
|
86
|
+
type: "edit.applied";
|
|
87
|
+
path: string;
|
|
88
|
+
applied: boolean;
|
|
89
|
+
linesAdded?: number;
|
|
90
|
+
linesRemoved?: number;
|
|
91
|
+
errorMessage?: string;
|
|
92
|
+
}
|
|
93
|
+
export interface EditDiffEvent extends AgentRunEventBase {
|
|
94
|
+
type: "edit.diff";
|
|
95
|
+
path: string;
|
|
96
|
+
patch: string;
|
|
97
|
+
truncated: boolean;
|
|
98
|
+
linesAdded?: number;
|
|
99
|
+
linesRemoved?: number;
|
|
100
|
+
applied: true;
|
|
101
|
+
}
|
|
102
|
+
export interface RunDiffEvent extends AgentRunEventBase {
|
|
103
|
+
type: "run.diff";
|
|
104
|
+
changedFiles: string[];
|
|
105
|
+
patch: string;
|
|
106
|
+
truncated: boolean;
|
|
107
|
+
}
|
|
108
|
+
export interface CompletionEvaluatedEvent extends AgentRunEventBase {
|
|
109
|
+
type: "completion.evaluated";
|
|
110
|
+
source: "llm" | "skipped" | "error" | "cached";
|
|
111
|
+
isComplete?: boolean;
|
|
112
|
+
confidence?: number;
|
|
113
|
+
reason?: string;
|
|
114
|
+
missingWork?: string[];
|
|
115
|
+
nextActionHint?: string;
|
|
116
|
+
changedFiles?: string[];
|
|
117
|
+
evaluatorMs?: number;
|
|
118
|
+
}
|
|
119
|
+
export interface RunContinueEvent extends AgentRunEventBase {
|
|
120
|
+
type: "run.continue";
|
|
121
|
+
reason: "style_only_incomplete" | "completion_callback" | "min_turns_pending";
|
|
122
|
+
changedFiles: string[];
|
|
123
|
+
toolCallCount?: number;
|
|
124
|
+
deferredFinishCount: number;
|
|
125
|
+
styleOnly: boolean;
|
|
126
|
+
wiringComplete: boolean;
|
|
127
|
+
}
|
|
128
|
+
export interface RunEarlyFinishEvent extends AgentRunEventBase {
|
|
129
|
+
type: "run.early_finish";
|
|
130
|
+
reason: "diff_detected" | "completion_contract_met" | "completion_satisfied" | "max_turns";
|
|
131
|
+
changedFiles: string[];
|
|
132
|
+
toolCallCount?: number;
|
|
133
|
+
elapsedMs?: number;
|
|
134
|
+
styleOnly?: boolean;
|
|
135
|
+
wiringComplete?: boolean;
|
|
136
|
+
deferredFinishCount?: number;
|
|
137
|
+
confidence?: number;
|
|
138
|
+
completionReason?: string;
|
|
139
|
+
}
|
|
140
|
+
export interface ValidationStartedEvent extends AgentRunEventBase {
|
|
141
|
+
type: "validation.started";
|
|
142
|
+
command: string;
|
|
143
|
+
}
|
|
144
|
+
export interface ValidationCompletedEvent extends AgentRunEventBase {
|
|
145
|
+
type: "validation.completed";
|
|
146
|
+
command: string;
|
|
147
|
+
ok: boolean;
|
|
148
|
+
exitCode: number | null;
|
|
149
|
+
stdoutPreview: string;
|
|
150
|
+
stderrPreview: string;
|
|
151
|
+
}
|
|
152
|
+
export interface RunCompletedEvent extends AgentRunEventBase {
|
|
153
|
+
type: "run.completed";
|
|
154
|
+
ok: true;
|
|
155
|
+
}
|
|
156
|
+
export interface RunFailedEvent extends AgentRunEventBase {
|
|
157
|
+
type: "run.failed";
|
|
158
|
+
ok: false;
|
|
159
|
+
code: string;
|
|
160
|
+
message: string;
|
|
161
|
+
abortReason?: string;
|
|
162
|
+
toolCallCount?: number;
|
|
163
|
+
editsApplied?: number;
|
|
164
|
+
changedFiles?: string[];
|
|
165
|
+
providerCode?: string;
|
|
166
|
+
}
|
|
167
|
+
export interface ConversationUpdatedEvent extends AgentRunEventBase {
|
|
168
|
+
type: "conversation.updated";
|
|
169
|
+
turnCount: number;
|
|
170
|
+
}
|
|
171
|
+
export type AgentRunEvent = RunStartedEvent | WorkspacePreparedEvent | ScreenshotSavedEvent | ContextFilesSelectedEvent | ModelAttemptEvent | ModelRequestEvent | ModelResponseEvent | ModelRepairEvent | ThinkingEvent | AssistantEvent | ToolStartEvent | ToolEndEvent | EditParsedEvent | EditAppliedEvent | EditDiffEvent | RunDiffEvent | CompletionEvaluatedEvent | RunContinueEvent | RunEarlyFinishEvent | ValidationStartedEvent | ValidationCompletedEvent | RunCompletedEvent | RunFailedEvent | ConversationUpdatedEvent;
|
|
172
|
+
export type AgentRunEventType = AgentRunEvent["type"];
|
|
173
|
+
/** Payload for emitting a typed run event (without runId/timestamp). */
|
|
174
|
+
export type AgentRunEventInput<T extends AgentRunEventType = AgentRunEventType> = Omit<Extract<AgentRunEvent, {
|
|
175
|
+
type: T;
|
|
176
|
+
}>, keyof AgentRunEventBase>;
|
|
177
|
+
/** Synthetic tool names emitted in the run timeline. */
|
|
178
|
+
export declare const AGENT_TOOL_NAMES: readonly ["prepare_workspace", "write_screenshot", "select_context_files", "model_completion", "parse_edit_plan", "apply_file_edit", "git_diff", "run_validation", "openhands_cli", "grep", "read", "glob", "list_dir", "search_replace", "write"];
|
|
179
|
+
export type AgentToolName = (typeof AGENT_TOOL_NAMES)[number];
|
|
180
|
+
export declare function isToolEvent(event: AgentRunEvent): event is ToolStartEvent | ToolEndEvent;
|
|
181
|
+
export declare function isAssistantEvent(event: AgentRunEvent): event is AssistantEvent;
|
|
182
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/agent/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Synthetic tool names emitted in the run timeline. */
|
|
2
|
+
export const AGENT_TOOL_NAMES = [
|
|
3
|
+
"prepare_workspace",
|
|
4
|
+
"write_screenshot",
|
|
5
|
+
"select_context_files",
|
|
6
|
+
"model_completion",
|
|
7
|
+
"parse_edit_plan",
|
|
8
|
+
"apply_file_edit",
|
|
9
|
+
"git_diff",
|
|
10
|
+
"run_validation",
|
|
11
|
+
"openhands_cli",
|
|
12
|
+
"grep",
|
|
13
|
+
"read",
|
|
14
|
+
"glob",
|
|
15
|
+
"list_dir",
|
|
16
|
+
"search_replace",
|
|
17
|
+
"write",
|
|
18
|
+
];
|
|
19
|
+
export function isToolEvent(event) {
|
|
20
|
+
return event.type === "tool.start" || event.type === "tool.end";
|
|
21
|
+
}
|
|
22
|
+
export function isAssistantEvent(event) {
|
|
23
|
+
return event.type === "assistant";
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/agent/events.ts"],"names":[],"mappings":"AAyOA,wDAAwD;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,mBAAmB;IACnB,kBAAkB;IAClB,sBAAsB;IACtB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,UAAU;IACV,gBAAgB;IAChB,eAAe;IACf,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,gBAAgB;IAChB,OAAO;CACC,CAAC;AAIX,MAAM,UAAU,WAAW,CACzB,KAAoB;IAEpB,OAAO,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAoB;IACnD,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AgentImageInput, AgentSendOptions } from "./types.js";
|
|
2
|
+
export type AgentSendPayload = string | {
|
|
3
|
+
text: string;
|
|
4
|
+
images?: AgentImageInput[];
|
|
5
|
+
};
|
|
6
|
+
export interface ParsedSendPayload {
|
|
7
|
+
prompt: string;
|
|
8
|
+
images: AgentImageInput[];
|
|
9
|
+
/** @deprecated First image as raw base64 for legacy screenshot writers. */
|
|
10
|
+
screenshotBase64?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Normalizes Cursor-style send payloads into prompt text and vision fields. */
|
|
13
|
+
export declare function parseSendPayload(payload: AgentSendPayload, options?: AgentSendOptions): ParsedSendPayload;
|
|
14
|
+
/** Splits harness bootstrap/continue prompts on the Cursor delimiter. */
|
|
15
|
+
export declare function splitHarnessPrompt(prompt: string): {
|
|
16
|
+
system: string;
|
|
17
|
+
user: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function isHarnessPrompt(prompt: string): boolean;
|
|
20
|
+
export declare function isHarnessRepairTurn(prompt: string): boolean;
|
|
21
|
+
export declare function isHarnessZeroChangeRetry(prompt: string): boolean;
|
|
22
|
+
/** Builds an internal SDK repair user block when harness did not send one. */
|
|
23
|
+
export declare function buildInternalBuildRepairPrompt(stderr: string): string;
|
|
24
|
+
//# sourceMappingURL=parseSendPayload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseSendPayload.d.ts","sourceRoot":"","sources":["../../src/agent/parseSendPayload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAgBD,gFAAgF;AAChF,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,gBAAqB,GAC7B,iBAAiB,CA0BnB;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAWA;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAOvD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAK3D;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,8EAA8E;AAC9E,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQrE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { normalizeScreenshotBase64 } from "../util/screenshotBase64.js";
|
|
2
|
+
function imagesFromDeprecatedOptions(options) {
|
|
3
|
+
if (options.screenshotBase64) {
|
|
4
|
+
return [
|
|
5
|
+
{
|
|
6
|
+
data: normalizeScreenshotBase64(options.screenshotBase64),
|
|
7
|
+
mimeType: "image/png",
|
|
8
|
+
},
|
|
9
|
+
];
|
|
10
|
+
}
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
/** Normalizes Cursor-style send payloads into prompt text and vision fields. */
|
|
14
|
+
export function parseSendPayload(payload, options = {}) {
|
|
15
|
+
if (typeof payload === "string") {
|
|
16
|
+
const images = imagesFromDeprecatedOptions(options);
|
|
17
|
+
return {
|
|
18
|
+
prompt: payload,
|
|
19
|
+
images,
|
|
20
|
+
screenshotBase64: images[0]?.data,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const payloadImages = payload.images?.map((image) => ({
|
|
24
|
+
data: normalizeScreenshotBase64(image.data),
|
|
25
|
+
mimeType: image.mimeType || "image/png",
|
|
26
|
+
})) ?? [];
|
|
27
|
+
const images = payloadImages.length > 0
|
|
28
|
+
? payloadImages
|
|
29
|
+
: imagesFromDeprecatedOptions(options);
|
|
30
|
+
return {
|
|
31
|
+
prompt: payload.text,
|
|
32
|
+
images,
|
|
33
|
+
screenshotBase64: images[0]?.data,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** Splits harness bootstrap/continue prompts on the Cursor delimiter. */
|
|
37
|
+
export function splitHarnessPrompt(prompt) {
|
|
38
|
+
const delimiter = "\n\n---\n\n";
|
|
39
|
+
const index = prompt.indexOf(delimiter);
|
|
40
|
+
if (index === -1) {
|
|
41
|
+
return { system: "", user: prompt };
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
system: prompt.slice(0, index).trim(),
|
|
45
|
+
user: prompt.slice(index + delimiter.length).trim(),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export function isHarnessPrompt(prompt) {
|
|
49
|
+
return (prompt.includes("\n\n---\n\n") ||
|
|
50
|
+
prompt.includes("APPLY RETRY") ||
|
|
51
|
+
prompt.includes("BUILD VALIDATION FAILED") ||
|
|
52
|
+
prompt.includes("NEW EDIT TURN"));
|
|
53
|
+
}
|
|
54
|
+
export function isHarnessRepairTurn(prompt) {
|
|
55
|
+
return (prompt.includes("BUILD VALIDATION FAILED") ||
|
|
56
|
+
prompt.includes("Failure reason: build_failed"));
|
|
57
|
+
}
|
|
58
|
+
export function isHarnessZeroChangeRetry(prompt) {
|
|
59
|
+
return prompt.includes("APPLY RETRY");
|
|
60
|
+
}
|
|
61
|
+
/** Builds an internal SDK repair user block when harness did not send one. */
|
|
62
|
+
export function buildInternalBuildRepairPrompt(stderr) {
|
|
63
|
+
const excerpt = stderr.trim().slice(0, 4_000);
|
|
64
|
+
return [
|
|
65
|
+
"BUILD VALIDATION FAILED — repair this edit.",
|
|
66
|
+
"Failure reason: build_failed",
|
|
67
|
+
`ERROR LOG (excerpt):\n${excerpt || "(no stderr captured)"}`,
|
|
68
|
+
"Return JSON edits that fix the build while preserving the owner intent.",
|
|
69
|
+
].join("\n\n");
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=parseSendPayload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseSendPayload.js","sourceRoot":"","sources":["../../src/agent/parseSendPayload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Max chars for edit.diff / run.diff patch fields (`AUVIRA_EVENT_DIFF_MAX_CHARS`). */
|
|
2
|
+
export declare function getDiffMaxChars(): number;
|
|
3
|
+
/** Returns a prefix preview of text (no masking — bus handles that). */
|
|
4
|
+
export declare function previewText(text: string, max?: number): string;
|
|
5
|
+
/** Counts added/removed lines between two file snapshots. */
|
|
6
|
+
export declare function countLineStats(before: string, after: string): {
|
|
7
|
+
linesAdded: number;
|
|
8
|
+
linesRemoved: number;
|
|
9
|
+
};
|
|
10
|
+
/** Best-effort unified diff without external dependencies. */
|
|
11
|
+
export declare function buildUnifiedPatch(relPath: string, before: string, after: string): string;
|
|
12
|
+
/** Caps patch length for stream emission. */
|
|
13
|
+
export declare function capPatch(patch: string, maxChars: number): {
|
|
14
|
+
patch: string;
|
|
15
|
+
truncated: boolean;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=patchUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patchUtils.d.ts","sourceRoot":"","sources":["../../src/agent/patchUtils.ts"],"names":[],"mappings":"AAEA,uFAAuF;AACvF,wBAAgB,eAAe,IAAI,MAAM,CAUxC;AAED,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,MAAM,CAK1D;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAyB9C;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAiDR;AAED,6CAA6C;AAC7C,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAKvC"}
|