@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,34 @@
|
|
|
1
|
+
import { runCommand } from "../tools/runCommand.js";
|
|
2
|
+
function isAgentInternalPath(relPath) {
|
|
3
|
+
const normalized = relPath.replace(/\\/g, "/");
|
|
4
|
+
return normalized === ".auvira" || normalized.startsWith(".auvira/");
|
|
5
|
+
}
|
|
6
|
+
/** Returns changed files and unified diff for the current repo state. */
|
|
7
|
+
export async function gitDiff(repoPath) {
|
|
8
|
+
const nameResult = await runCommand(["git", "diff", "--name-only", "HEAD"], { cwd: repoPath });
|
|
9
|
+
const diffResult = await runCommand(["git", "diff", "HEAD"], {
|
|
10
|
+
cwd: repoPath,
|
|
11
|
+
});
|
|
12
|
+
const changedFiles = nameResult.stdout
|
|
13
|
+
.split("\n")
|
|
14
|
+
.map((line) => line.trim())
|
|
15
|
+
.filter((line) => Boolean(line) && !isAgentInternalPath(line));
|
|
16
|
+
return {
|
|
17
|
+
changedFiles,
|
|
18
|
+
diff: diffResult.stdout.trim(),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Initializes git and creates an initial commit when needed. */
|
|
22
|
+
export async function initGitRepo(repoPath) {
|
|
23
|
+
await runCommand(["git", "init"], { cwd: repoPath });
|
|
24
|
+
await runCommand(["git", "add", "-A"], { cwd: repoPath });
|
|
25
|
+
const status = await runCommand(["git", "status", "--porcelain"], {
|
|
26
|
+
cwd: repoPath,
|
|
27
|
+
});
|
|
28
|
+
if (status.stdout.trim()) {
|
|
29
|
+
await runCommand(["git", "commit", "-m", "Initial workspace snapshot"], {
|
|
30
|
+
cwd: repoPath,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=gitDiff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitDiff.js","sourceRoot":"","sources":["../../src/git/gitDiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAOpD,SAAS,mBAAmB,CAAC,OAAe;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/C,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACvE,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAgB;IAC5C,MAAM,UAAU,GAAG,MAAM,UAAU,CACjC,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EACtC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAClB,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAC3D,GAAG,EAAE,QAAQ;KACd,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM;SACnC,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjE,OAAO;QACL,YAAY;QACZ,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,MAAM,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,MAAM,UAAU,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE;QAChE,GAAG,EAAE,QAAQ;KACd,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACzB,MAAM,UAAU,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,4BAA4B,CAAC,EAAE;YACtE,GAAG,EAAE,QAAQ;SACd,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maskSecrets.d.ts","sourceRoot":"","sources":["../../src/git/maskSecrets.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GACjC,MAAM,CAcR"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Masks known secret patterns in error messages. */
|
|
2
|
+
export function maskSecrets(message, secrets) {
|
|
3
|
+
let masked = message;
|
|
4
|
+
for (const secret of secrets) {
|
|
5
|
+
if (!secret || secret.length < 4) {
|
|
6
|
+
continue;
|
|
7
|
+
}
|
|
8
|
+
masked = masked.split(secret).join("[REDACTED]");
|
|
9
|
+
}
|
|
10
|
+
return masked
|
|
11
|
+
.replace(/oauth2:[^@\s]+@/g, "oauth2:[REDACTED]@")
|
|
12
|
+
.replace(/Bearer\s+[A-Za-z0-9._-]+/gi, "Bearer [REDACTED]")
|
|
13
|
+
.replace(/api[_-]?key[=:\s]+[^\s]+/gi, "api_key=[REDACTED]");
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=maskSecrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maskSecrets.js","sourceRoot":"","sources":["../../src/git/maskSecrets.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,MAAM,UAAU,WAAW,CACzB,OAAe,EACf,OAAkC;IAElC,IAAI,MAAM,GAAG,OAAO,CAAC;IAErB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,MAAM;SACV,OAAO,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;SACjD,OAAO,CAAC,4BAA4B,EAAE,mBAAmB,CAAC;SAC1D,OAAO,CAAC,4BAA4B,EAAE,oBAAoB,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AgentGitLabConfig } from "../agent/types.js";
|
|
2
|
+
export interface ResolvedGitLabProject {
|
|
3
|
+
projectUrl: string;
|
|
4
|
+
token: string;
|
|
5
|
+
branch: string;
|
|
6
|
+
gitlabProjectId?: number;
|
|
7
|
+
pathWithNamespace?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface GitLabProjectApiRecord {
|
|
10
|
+
id: number;
|
|
11
|
+
http_url_to_repo: string;
|
|
12
|
+
path_with_namespace: string;
|
|
13
|
+
default_branch?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Normalizes GITLAB_BASE_URL to the GitLab API v4 root. */
|
|
16
|
+
export declare function normalizeGitLabApiBaseUrl(baseUrl?: string): string;
|
|
17
|
+
/** Returns GitLab web origin (e.g. https://gitlab.com) from API base URL. */
|
|
18
|
+
export declare function gitLabWebOriginFromApiBase(apiBaseUrl: string): string;
|
|
19
|
+
/** Fetches GitLab project metadata from the API. */
|
|
20
|
+
export declare function fetchGitLabProjectById(projectId: string | number, options?: {
|
|
21
|
+
apiBaseUrl?: string;
|
|
22
|
+
token?: string;
|
|
23
|
+
}): Promise<GitLabProjectApiRecord>;
|
|
24
|
+
/** Resolves GitLab config from projectUrl, numeric projectId, or env defaults. */
|
|
25
|
+
export declare function resolveGitLabProject(config: AgentGitLabConfig): Promise<ResolvedGitLabProject>;
|
|
26
|
+
//# sourceMappingURL=resolveGitLabProject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGitLabProject.d.ts","sourceRoot":"","sources":["../../src/git/resolveGitLabProject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAI3D,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,4DAA4D;AAC5D,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlE;AAED,6EAA6E;AAC7E,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAErE;AAaD,oDAAoD;AACpD,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,sBAAsB,CAAC,CA4BjC;AAED,kFAAkF;AAClF,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAgChC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { AgentConfigError } from "../agent/types.js";
|
|
2
|
+
import { sanitizeGitLabUrl } from "./sanitizeGitLabUrl.js";
|
|
3
|
+
/** Normalizes GITLAB_BASE_URL to the GitLab API v4 root. */
|
|
4
|
+
export function normalizeGitLabApiBaseUrl(baseUrl) {
|
|
5
|
+
const raw = (baseUrl ?? process.env.GITLAB_BASE_URL ?? "https://gitlab.com/api/v4").trim();
|
|
6
|
+
return raw.replace(/\/+$/, "");
|
|
7
|
+
}
|
|
8
|
+
/** Returns GitLab web origin (e.g. https://gitlab.com) from API base URL. */
|
|
9
|
+
export function gitLabWebOriginFromApiBase(apiBaseUrl) {
|
|
10
|
+
return apiBaseUrl.replace(/\/api\/v4\/?$/, "");
|
|
11
|
+
}
|
|
12
|
+
function resolveToken(config) {
|
|
13
|
+
const token = config?.token?.trim() || process.env.GITLAB_TOKEN?.trim();
|
|
14
|
+
if (!token) {
|
|
15
|
+
throw new AgentConfigError("gitlab.token or GITLAB_TOKEN env var is required", "INVALID_CONFIG");
|
|
16
|
+
}
|
|
17
|
+
return token;
|
|
18
|
+
}
|
|
19
|
+
/** Fetches GitLab project metadata from the API. */
|
|
20
|
+
export async function fetchGitLabProjectById(projectId, options) {
|
|
21
|
+
const apiBaseUrl = normalizeGitLabApiBaseUrl(options?.apiBaseUrl);
|
|
22
|
+
const token = options?.token ?? process.env.GITLAB_TOKEN?.trim();
|
|
23
|
+
if (!token) {
|
|
24
|
+
throw new AgentConfigError("GITLAB_TOKEN is required", "INVALID_CONFIG");
|
|
25
|
+
}
|
|
26
|
+
const encodedId = encodeURIComponent(String(projectId));
|
|
27
|
+
const response = await fetch(`${apiBaseUrl}/projects/${encodedId}`, {
|
|
28
|
+
headers: {
|
|
29
|
+
"PRIVATE-TOKEN": token,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
const payload = (await response.json());
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
throw new Error(payload.message ?? `GitLab project lookup failed (${response.status})`);
|
|
35
|
+
}
|
|
36
|
+
if (!payload.http_url_to_repo) {
|
|
37
|
+
throw new Error("GitLab project response missing http_url_to_repo");
|
|
38
|
+
}
|
|
39
|
+
return payload;
|
|
40
|
+
}
|
|
41
|
+
/** Resolves GitLab config from projectUrl, numeric projectId, or env defaults. */
|
|
42
|
+
export async function resolveGitLabProject(config) {
|
|
43
|
+
const token = resolveToken(config);
|
|
44
|
+
const apiBaseUrl = normalizeGitLabApiBaseUrl(process.env.GITLAB_BASE_URL);
|
|
45
|
+
if (config.projectUrl?.trim()) {
|
|
46
|
+
const projectUrl = sanitizeGitLabUrl(config.projectUrl);
|
|
47
|
+
return {
|
|
48
|
+
projectUrl,
|
|
49
|
+
token,
|
|
50
|
+
branch: config.branch ?? "main",
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (config.projectId !== undefined && String(config.projectId).trim()) {
|
|
54
|
+
const record = await fetchGitLabProjectById(config.projectId, {
|
|
55
|
+
apiBaseUrl,
|
|
56
|
+
token,
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
projectUrl: sanitizeGitLabUrl(record.http_url_to_repo),
|
|
60
|
+
token,
|
|
61
|
+
branch: config.branch ?? record.default_branch ?? "main",
|
|
62
|
+
gitlabProjectId: record.id,
|
|
63
|
+
pathWithNamespace: record.path_with_namespace,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
throw new AgentConfigError("gitlab.projectUrl or gitlab.projectId is required", "INVALID_CONFIG");
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=resolveGitLabProject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGitLabProject.js","sourceRoot":"","sources":["../../src/git/resolveGitLabProject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class GitLabUrlError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
/** Validates and returns a sanitized GitLab HTTPS project URL. */
|
|
5
|
+
export declare function sanitizeGitLabUrl(url: string): string;
|
|
6
|
+
/** Builds an authenticated clone URL without logging the token. */
|
|
7
|
+
export declare function buildGitLabCloneUrl(projectUrl: string, token: string): string;
|
|
8
|
+
//# sourceMappingURL=sanitizeGitLabUrl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizeGitLabUrl.d.ts","sourceRoot":"","sources":["../../src/git/sanitizeGitLabUrl.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAcD,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAoBrD;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI7E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export class GitLabUrlError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "GitLabUrlError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
const GITLAB_HOST_PATTERN = /^https:\/\/gitlab\.com\/[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*\.git$/;
|
|
8
|
+
const UNSAFE_URL_PATTERNS = [
|
|
9
|
+
/^git@/,
|
|
10
|
+
/^ssh:/,
|
|
11
|
+
/^file:/,
|
|
12
|
+
/^https:\/\/[^/]+@/,
|
|
13
|
+
/^https:\/\/[^:]+:[^@]+@/,
|
|
14
|
+
/[;&|`$()<>]/,
|
|
15
|
+
];
|
|
16
|
+
/** Validates and returns a sanitized GitLab HTTPS project URL. */
|
|
17
|
+
export function sanitizeGitLabUrl(url) {
|
|
18
|
+
const trimmed = url.trim();
|
|
19
|
+
for (const pattern of UNSAFE_URL_PATTERNS) {
|
|
20
|
+
if (pattern.test(trimmed)) {
|
|
21
|
+
throw new GitLabUrlError(`Rejected GitLab URL: ${trimmed}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (!trimmed.startsWith("https://gitlab.com/")) {
|
|
25
|
+
throw new GitLabUrlError("Only https://gitlab.com project URLs are supported");
|
|
26
|
+
}
|
|
27
|
+
if (!GITLAB_HOST_PATTERN.test(trimmed)) {
|
|
28
|
+
throw new GitLabUrlError(`Invalid GitLab project URL format: ${trimmed}`);
|
|
29
|
+
}
|
|
30
|
+
return trimmed;
|
|
31
|
+
}
|
|
32
|
+
/** Builds an authenticated clone URL without logging the token. */
|
|
33
|
+
export function buildGitLabCloneUrl(projectUrl, token) {
|
|
34
|
+
const sanitized = sanitizeGitLabUrl(projectUrl);
|
|
35
|
+
const withoutProtocol = sanitized.replace(/^https:\/\//, "");
|
|
36
|
+
return `https://oauth2:${encodeURIComponent(token)}@${withoutProtocol}`;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=sanitizeGitLabUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizeGitLabUrl.js","sourceRoot":"","sources":["../../src/git/sanitizeGitLabUrl.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,mBAAmB,GACvB,qEAAqE,CAAC;AAExE,MAAM,mBAAmB,GAAG;IAC1B,OAAO;IACP,OAAO;IACP,QAAQ;IACR,mBAAmB;IACnB,yBAAyB;IACzB,aAAa;CACd,CAAC;AAEF,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,cAAc,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,cAAc,CACtB,oDAAoD,CACrD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,cAAc,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,KAAa;IACnE,MAAM,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,kBAAkB,kBAAkB,CAAC,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;AAC1E,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { Agent } from "./agent/Agent.js";
|
|
2
|
+
export { AgentRun } from "./agent/AgentRun.js";
|
|
3
|
+
export { AgentConfigError, CursorAgentError, } from "./agent/types.js";
|
|
4
|
+
export { AgentNotFoundError } from "./agent/AgentRegistry.js";
|
|
5
|
+
export type { AgentCreateOptions, AgentPromptOptions, AgentSendOptions, AgentSendPayload, AgentImageInput, AgentWorkspaceMode, AgentRunResult, AgentRunStatus, AgentModelConfig, AgentCompletionOptions, CompletionContractContext, SelectedDomContext, ConversationTurn, } from "./agent/types.js";
|
|
6
|
+
export type { HarnessPinnedTarget } from "./providers/custom/harnessPinTypes.js";
|
|
7
|
+
export type { WorkspaceCheckpoint, WorkspaceDiffResult } from "./workspace/workspaceCheckpoint.js";
|
|
8
|
+
export type { TaskCompletionDecision } from "./agent/evaluateTaskCompletion.js";
|
|
9
|
+
export type { AgentRunEvent, AgentRunEventType, AgentToolName, AssistantContentBlock, CompletionEvaluatedEvent, EditDiffEvent, RunContinueEvent, RunDiffEvent, RunEarlyFinishEvent, } from "./agent/events.js";
|
|
10
|
+
export { AGENT_TOOL_NAMES, isToolEvent, isAssistantEvent, } from "./agent/events.js";
|
|
11
|
+
export { getAssistantEventText } from "./agent/assistantEvent.js";
|
|
12
|
+
export type { AgentRunOperation } from "./agent/AgentRun.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACnG,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,wBAAwB,EACxB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { Agent } from "./agent/Agent.js";
|
|
2
|
+
export { AgentRun } from "./agent/AgentRun.js";
|
|
3
|
+
export { AgentConfigError, CursorAgentError, } from "./agent/types.js";
|
|
4
|
+
export { AgentNotFoundError } from "./agent/AgentRegistry.js";
|
|
5
|
+
export { AGENT_TOOL_NAMES, isToolEvent, isAssistantEvent, } from "./agent/events.js";
|
|
6
|
+
export { getAssistantEventText } from "./agent/assistantEvent.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AA8B9D,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ProviderRunInput, ProviderRunOutput } from "../types.js";
|
|
2
|
+
/** Agentic custom provider: multi-turn grep/read/edit tool loop. */
|
|
3
|
+
export declare function runAgenticCustomProvider(input: ProviderRunInput): Promise<ProviderRunOutput>;
|
|
4
|
+
export type AgentMode = "agentic" | "json";
|
|
5
|
+
/** Resolves agent mode from env and harness context. */
|
|
6
|
+
export declare function resolveAgentMode(input: {
|
|
7
|
+
harnessPrompt?: boolean;
|
|
8
|
+
}): AgentMode;
|
|
9
|
+
//# sourceMappingURL=AgenticCustomProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgenticCustomProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/agentic/AgenticCustomProvider.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAqFvE,oEAAoE;AACpE,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAmU5B;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3C,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,SAAS,CASZ"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { buildAssistantEvent } from "../../agent/assistantEvent.js";
|
|
2
|
+
import { buildAgentPrompt } from "../../agent/buildAgentPrompt.js";
|
|
3
|
+
import { throwIfCancelled } from "../../agent/cancellation.js";
|
|
4
|
+
import { splitHarnessPrompt } from "../../agent/parseSendPayload.js";
|
|
5
|
+
import { gitDiff } from "../../git/gitDiff.js";
|
|
6
|
+
import { hasAllowlistedChanges } from "../../agent/tools/pathGuard.js";
|
|
7
|
+
import { extractAllowedWritePaths, extractPinnedTargetFromHarness, formatPinnedTargetLabel, harnessTargetFromDom, mergePinnedTarget, } from "../custom/harnessPrompt.js";
|
|
8
|
+
import { imagesToDataUrls } from "../custom/visionImages.js";
|
|
9
|
+
import { buildUserMessage, runAgentToolLoop } from "./agentLoop.js";
|
|
10
|
+
import { compilePriomptContext, } from "./priomptContext.js";
|
|
11
|
+
import { buildSeedContextBlocks } from "./seedRetrieval.js";
|
|
12
|
+
import { getRepairMaxToolCalls } from "./toolPolicy.js";
|
|
13
|
+
async function loadScreenshotDataUrl(screenshotPath) {
|
|
14
|
+
if (!screenshotPath) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
const { fileExists } = await import("../../tools/fileExists.js");
|
|
18
|
+
const { promises: fs } = await import("node:fs");
|
|
19
|
+
if (!(await fileExists(screenshotPath))) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const buffer = await fs.readFile(screenshotPath);
|
|
23
|
+
const mime = screenshotPath.endsWith(".png") ? "image/png" : "image/jpeg";
|
|
24
|
+
return `data:${mime};base64,${buffer.toString("base64")}`;
|
|
25
|
+
}
|
|
26
|
+
function buildAgenticSystemRules(harnessPrompt) {
|
|
27
|
+
if (harnessPrompt) {
|
|
28
|
+
const lines = [
|
|
29
|
+
"You are Auvira Agent, a Cursor-compatible coding agent.",
|
|
30
|
+
"HARNESS EDIT CONTRACT:",
|
|
31
|
+
"- Seed excerpts are authoritative.",
|
|
32
|
+
"- Apply focused mutations to ALLOWED WRITE PATHS as soon as the target is identified.",
|
|
33
|
+
"- The loop may continue if the current diff does not yet satisfy the owner request.",
|
|
34
|
+
"- Do not grep/read after a satisfying edit.",
|
|
35
|
+
"- Max 2 verify reads after editing.",
|
|
36
|
+
"- For style/vibe edits, use Tailwind/CSS/siteConfig instead of broad repo exploration.",
|
|
37
|
+
"Only edit files under ALLOWED_WRITE PATHS. Do not run shell/terminal commands.",
|
|
38
|
+
"When finished, respond with a concise summary of what you changed.",
|
|
39
|
+
];
|
|
40
|
+
return lines.join("\n");
|
|
41
|
+
}
|
|
42
|
+
return [
|
|
43
|
+
"You are Auvira Agent, a Cursor-compatible coding agent.",
|
|
44
|
+
"Use tools to explore the repository before editing.",
|
|
45
|
+
"Workflow: grep to locate files → read to copy exact strings → search_replace to edit.",
|
|
46
|
+
"Use write only when search_replace cannot apply or for full-file updates.",
|
|
47
|
+
"Make the smallest safe change that satisfies the request.",
|
|
48
|
+
"When finished, respond with a concise summary of what you changed.",
|
|
49
|
+
].join("\n");
|
|
50
|
+
}
|
|
51
|
+
function buildPinnedBlock(selectedDom, pinnedLabel) {
|
|
52
|
+
if (!selectedDom && !pinnedLabel) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
const content = [
|
|
56
|
+
pinnedLabel ? `Pinned target: ${pinnedLabel}` : undefined,
|
|
57
|
+
selectedDom ? JSON.stringify(selectedDom, null, 2) : undefined,
|
|
58
|
+
]
|
|
59
|
+
.filter(Boolean)
|
|
60
|
+
.join("\n");
|
|
61
|
+
return {
|
|
62
|
+
id: "pinned-target",
|
|
63
|
+
priority: 1,
|
|
64
|
+
label: "pinned",
|
|
65
|
+
content,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** Agentic custom provider: multi-turn grep/read/edit tool loop. */
|
|
69
|
+
export async function runAgenticCustomProvider(input) {
|
|
70
|
+
const model = input.model;
|
|
71
|
+
const bus = input.events;
|
|
72
|
+
const baseURL = model.baseURL?.replace(/\/+$/, "");
|
|
73
|
+
const apiKey = model.apiKey;
|
|
74
|
+
if (!baseURL || !apiKey) {
|
|
75
|
+
return {
|
|
76
|
+
ok: false,
|
|
77
|
+
response: "",
|
|
78
|
+
summary: "Custom model provider requires baseURL and apiKey",
|
|
79
|
+
error: {
|
|
80
|
+
message: "model.baseURL and model.apiKey are required for custom provider",
|
|
81
|
+
code: "PROVIDER_ERROR",
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
throwIfCancelled(input.signal);
|
|
86
|
+
const harnessPrompt = input.harnessPrompt === true;
|
|
87
|
+
const allowedWritePaths = harnessPrompt
|
|
88
|
+
? extractAllowedWritePaths(input.prompt)
|
|
89
|
+
: undefined;
|
|
90
|
+
const pinnedTargetStruct = harnessPrompt
|
|
91
|
+
? mergePinnedTarget(harnessTargetFromDom(input.selectedDom), extractPinnedTargetFromHarness(input.prompt))
|
|
92
|
+
: harnessTargetFromDom(input.selectedDom);
|
|
93
|
+
const pinnedLabel = formatPinnedTargetLabel(pinnedTargetStruct) ??
|
|
94
|
+
(input.selectedDom?.componentHint ?? input.selectedDom?.sectionTitle);
|
|
95
|
+
const seedBlocks = await buildSeedContextBlocks({
|
|
96
|
+
repoPath: input.repoPath,
|
|
97
|
+
prompt: input.prompt,
|
|
98
|
+
selectedDom: input.selectedDom,
|
|
99
|
+
harnessPrompt,
|
|
100
|
+
pinnedTarget: pinnedTargetStruct,
|
|
101
|
+
});
|
|
102
|
+
bus?.emit({
|
|
103
|
+
type: "context.files_selected",
|
|
104
|
+
files: seedBlocks
|
|
105
|
+
.map((block) => block.id.startsWith("seed-") && block.id !== "seed-grep-selectedDom"
|
|
106
|
+
? block.id.slice("seed-".length)
|
|
107
|
+
: block.label)
|
|
108
|
+
.filter((file) => !file.startsWith("grep:")),
|
|
109
|
+
});
|
|
110
|
+
const screenshotDataUrl = await loadScreenshotDataUrl(input.screenshotPath);
|
|
111
|
+
const imageDataUrls = input.images && input.images.length > 0
|
|
112
|
+
? imagesToDataUrls(input.images)
|
|
113
|
+
: screenshotDataUrl
|
|
114
|
+
? [screenshotDataUrl]
|
|
115
|
+
: [];
|
|
116
|
+
const hasVision = imageDataUrls.length > 0;
|
|
117
|
+
const harnessSplit = harnessPrompt ? splitHarnessPrompt(input.prompt) : undefined;
|
|
118
|
+
const ownerRequest = harnessSplit?.user ?? input.prompt;
|
|
119
|
+
const blocks = [];
|
|
120
|
+
if (harnessPrompt) {
|
|
121
|
+
const { system, user } = harnessSplit;
|
|
122
|
+
blocks.push({
|
|
123
|
+
id: "harness-system",
|
|
124
|
+
priority: 0,
|
|
125
|
+
label: "harness-system",
|
|
126
|
+
content: system.trim() || buildAgenticSystemRules(true),
|
|
127
|
+
});
|
|
128
|
+
if (allowedWritePaths?.length) {
|
|
129
|
+
blocks.push({
|
|
130
|
+
id: "allowlist",
|
|
131
|
+
priority: 0,
|
|
132
|
+
label: "allowlist",
|
|
133
|
+
content: `ALLOWED_WRITE_PATHS:\n${allowedWritePaths.map((p) => `- ${p}`).join("\n")}`,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
const pinned = buildPinnedBlock(input.selectedDom, pinnedLabel);
|
|
137
|
+
if (pinned) {
|
|
138
|
+
blocks.push(pinned);
|
|
139
|
+
}
|
|
140
|
+
blocks.push({
|
|
141
|
+
id: "owner-request",
|
|
142
|
+
priority: 2,
|
|
143
|
+
label: "owner-request",
|
|
144
|
+
content: user,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
blocks.push({
|
|
149
|
+
id: "system",
|
|
150
|
+
priority: 0,
|
|
151
|
+
label: "system",
|
|
152
|
+
content: buildAgenticSystemRules(false),
|
|
153
|
+
});
|
|
154
|
+
const pinned = buildPinnedBlock(input.selectedDom, pinnedLabel);
|
|
155
|
+
if (pinned) {
|
|
156
|
+
blocks.push(pinned);
|
|
157
|
+
}
|
|
158
|
+
blocks.push({
|
|
159
|
+
id: "user-request",
|
|
160
|
+
priority: 2,
|
|
161
|
+
label: "user-request",
|
|
162
|
+
content: buildAgentPrompt({
|
|
163
|
+
prompt: input.prompt,
|
|
164
|
+
screenshotPath: input.screenshotPath,
|
|
165
|
+
selectedDom: input.selectedDom,
|
|
166
|
+
validationCommand: "npm run build",
|
|
167
|
+
}),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
blocks.push(...seedBlocks);
|
|
171
|
+
const compiled = compilePriomptContext({ blocks });
|
|
172
|
+
const messages = [
|
|
173
|
+
{ role: "system", content: compiled.system },
|
|
174
|
+
];
|
|
175
|
+
for (const turn of input.conversationHistory ?? []) {
|
|
176
|
+
if (turn.role === "user" || turn.role === "assistant") {
|
|
177
|
+
messages.push({ role: turn.role, content: turn.content });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
messages.push({
|
|
181
|
+
role: "user",
|
|
182
|
+
content: buildUserMessage(compiled.user, imageDataUrls),
|
|
183
|
+
});
|
|
184
|
+
const loopResult = await runAgentToolLoop({
|
|
185
|
+
baseURL,
|
|
186
|
+
apiKey,
|
|
187
|
+
modelId: model.id,
|
|
188
|
+
model,
|
|
189
|
+
messages,
|
|
190
|
+
repoPath: input.repoPath,
|
|
191
|
+
allowedWritePaths,
|
|
192
|
+
enforceAllowlist: harnessPrompt,
|
|
193
|
+
harnessMode: harnessPrompt,
|
|
194
|
+
hasVision,
|
|
195
|
+
selectedDom: input.selectedDom,
|
|
196
|
+
completion: input.completion,
|
|
197
|
+
workspaceCheckpoint: input.workspaceCheckpoint,
|
|
198
|
+
completionAuto: input.completion?.auto !== false,
|
|
199
|
+
completionEvaluationEnabled: harnessPrompt,
|
|
200
|
+
completionConfidenceThreshold: input.completion?.confidenceThreshold,
|
|
201
|
+
referenceImages: imageDataUrls,
|
|
202
|
+
ownerRequest,
|
|
203
|
+
timeoutMs: input.timeoutMs,
|
|
204
|
+
signal: input.signal,
|
|
205
|
+
bus,
|
|
206
|
+
});
|
|
207
|
+
let diffResult = input.workspaceCheckpoint
|
|
208
|
+
? await input.workspaceCheckpoint.diff()
|
|
209
|
+
: await gitDiff(input.repoPath);
|
|
210
|
+
const harnessDiffOk = harnessPrompt &&
|
|
211
|
+
hasAllowlistedChanges(diffResult.changedFiles, allowedWritePaths);
|
|
212
|
+
const changedBeforeRetry = diffResult.changedFiles.length;
|
|
213
|
+
if (harnessPrompt &&
|
|
214
|
+
loopResult.editsApplied === 0 &&
|
|
215
|
+
changedBeforeRetry === 0 &&
|
|
216
|
+
!loopResult.ok) {
|
|
217
|
+
const retryMessage = "APPLY RETRY — your last turn did not change any allowlisted files. Use search_replace or write on ALLOWED_WRITE_PATHS now.";
|
|
218
|
+
messages.push({ role: "user", content: retryMessage });
|
|
219
|
+
const retryResult = await runAgentToolLoop({
|
|
220
|
+
baseURL,
|
|
221
|
+
apiKey,
|
|
222
|
+
modelId: model.id,
|
|
223
|
+
model,
|
|
224
|
+
messages,
|
|
225
|
+
repoPath: input.repoPath,
|
|
226
|
+
allowedWritePaths,
|
|
227
|
+
enforceAllowlist: true,
|
|
228
|
+
harnessMode: harnessPrompt,
|
|
229
|
+
hasVision,
|
|
230
|
+
selectedDom: input.selectedDom,
|
|
231
|
+
completion: input.completion,
|
|
232
|
+
workspaceCheckpoint: input.workspaceCheckpoint,
|
|
233
|
+
completionAuto: input.completion?.auto !== false,
|
|
234
|
+
completionEvaluationEnabled: harnessPrompt,
|
|
235
|
+
completionConfidenceThreshold: input.completion?.confidenceThreshold,
|
|
236
|
+
referenceImages: imageDataUrls,
|
|
237
|
+
ownerRequest,
|
|
238
|
+
timeoutMs: input.timeoutMs,
|
|
239
|
+
signal: input.signal,
|
|
240
|
+
bus,
|
|
241
|
+
maxToolCalls: getRepairMaxToolCalls(),
|
|
242
|
+
});
|
|
243
|
+
diffResult = input.workspaceCheckpoint
|
|
244
|
+
? await input.workspaceCheckpoint.diff()
|
|
245
|
+
: await gitDiff(input.repoPath);
|
|
246
|
+
if (retryResult.editsApplied > 0 || diffResult.changedFiles.length > 0) {
|
|
247
|
+
return {
|
|
248
|
+
ok: true,
|
|
249
|
+
response: retryResult.response,
|
|
250
|
+
summary: retryResult.summary,
|
|
251
|
+
usage: {
|
|
252
|
+
model: model.id,
|
|
253
|
+
provider: "custom",
|
|
254
|
+
inputTokens: retryResult.usage?.prompt_tokens,
|
|
255
|
+
outputTokens: retryResult.usage?.completion_tokens,
|
|
256
|
+
totalTokens: retryResult.usage?.total_tokens,
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
if (harnessDiffOk || loopResult.earlyFinish) {
|
|
262
|
+
return {
|
|
263
|
+
ok: true,
|
|
264
|
+
response: loopResult.response,
|
|
265
|
+
summary: loopResult.summary,
|
|
266
|
+
usage: {
|
|
267
|
+
model: model.id,
|
|
268
|
+
provider: "custom",
|
|
269
|
+
inputTokens: loopResult.usage?.prompt_tokens,
|
|
270
|
+
outputTokens: loopResult.usage?.completion_tokens,
|
|
271
|
+
totalTokens: loopResult.usage?.total_tokens,
|
|
272
|
+
},
|
|
273
|
+
diagnostics: loopResult.abortReason === "tool_budget_exceeded"
|
|
274
|
+
? {
|
|
275
|
+
abortReason: loopResult.abortReason,
|
|
276
|
+
toolCallCount: loopResult.toolCallCount,
|
|
277
|
+
editsApplied: loopResult.editsApplied,
|
|
278
|
+
changedFiles: diffResult.changedFiles,
|
|
279
|
+
providerCode: "PARTIAL_SUCCESS_BUDGET",
|
|
280
|
+
}
|
|
281
|
+
: undefined,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
if (loopResult.ok && (loopResult.editsApplied > 0 || diffResult.changedFiles.length > 0)) {
|
|
285
|
+
return {
|
|
286
|
+
ok: true,
|
|
287
|
+
response: loopResult.response,
|
|
288
|
+
summary: loopResult.summary,
|
|
289
|
+
usage: {
|
|
290
|
+
model: model.id,
|
|
291
|
+
provider: "custom",
|
|
292
|
+
inputTokens: loopResult.usage?.prompt_tokens,
|
|
293
|
+
outputTokens: loopResult.usage?.completion_tokens,
|
|
294
|
+
totalTokens: loopResult.usage?.total_tokens,
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
if (loopResult.error) {
|
|
299
|
+
if (harnessPrompt &&
|
|
300
|
+
loopResult.abortReason === "tool_budget_exceeded" &&
|
|
301
|
+
hasAllowlistedChanges(diffResult.changedFiles, allowedWritePaths)) {
|
|
302
|
+
return {
|
|
303
|
+
ok: true,
|
|
304
|
+
response: loopResult.response,
|
|
305
|
+
summary: loopResult.summary,
|
|
306
|
+
usage: {
|
|
307
|
+
model: model.id,
|
|
308
|
+
provider: "custom",
|
|
309
|
+
inputTokens: loopResult.usage?.prompt_tokens,
|
|
310
|
+
outputTokens: loopResult.usage?.completion_tokens,
|
|
311
|
+
totalTokens: loopResult.usage?.total_tokens,
|
|
312
|
+
},
|
|
313
|
+
diagnostics: {
|
|
314
|
+
abortReason: loopResult.abortReason,
|
|
315
|
+
toolCallCount: loopResult.toolCallCount,
|
|
316
|
+
editsApplied: loopResult.editsApplied,
|
|
317
|
+
changedFiles: diffResult.changedFiles,
|
|
318
|
+
providerCode: "PARTIAL_SUCCESS_BUDGET",
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
return {
|
|
323
|
+
ok: false,
|
|
324
|
+
response: loopResult.response,
|
|
325
|
+
summary: loopResult.summary,
|
|
326
|
+
error: {
|
|
327
|
+
message: loopResult.error.message,
|
|
328
|
+
code: loopResult.error.code,
|
|
329
|
+
},
|
|
330
|
+
diagnostics: {
|
|
331
|
+
abortReason: loopResult.abortReason,
|
|
332
|
+
toolCallCount: loopResult.toolCallCount,
|
|
333
|
+
editsApplied: loopResult.editsApplied,
|
|
334
|
+
providerCode: loopResult.error.code,
|
|
335
|
+
},
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
bus?.emit(buildAssistantEvent(loopResult.response || "No edits applied"));
|
|
339
|
+
return {
|
|
340
|
+
ok: false,
|
|
341
|
+
response: loopResult.response,
|
|
342
|
+
summary: loopResult.summary,
|
|
343
|
+
error: {
|
|
344
|
+
message: loopResult.abortReason ?? "No edits applied",
|
|
345
|
+
code: "EDIT_NOT_APPLIED",
|
|
346
|
+
},
|
|
347
|
+
diagnostics: {
|
|
348
|
+
abortReason: loopResult.abortReason,
|
|
349
|
+
toolCallCount: loopResult.toolCallCount,
|
|
350
|
+
editsApplied: loopResult.editsApplied,
|
|
351
|
+
providerCode: "EDIT_NOT_APPLIED",
|
|
352
|
+
},
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
/** Resolves agent mode from env and harness context. */
|
|
356
|
+
export function resolveAgentMode(input) {
|
|
357
|
+
const raw = process.env.AUVIRA_AGENT_MODE?.trim().toLowerCase();
|
|
358
|
+
if (raw === "json") {
|
|
359
|
+
return "json";
|
|
360
|
+
}
|
|
361
|
+
if (raw === "agentic") {
|
|
362
|
+
return "agentic";
|
|
363
|
+
}
|
|
364
|
+
return input.harnessPrompt ? "agentic" : "json";
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=AgenticCustomProvider.js.map
|