Move agent override to env
This commit is contained in:
+51
-8
@@ -25,10 +25,20 @@ export const cursor = agent({
|
||||
|
||||
log.info("Running Cursor CLI...");
|
||||
|
||||
const startTime = Date.now();
|
||||
|
||||
return new Promise((resolve) => {
|
||||
const child = spawn(
|
||||
cliPath,
|
||||
["--print", fullPrompt, "--output-format", "text", "--approve-mcps", "--force"],
|
||||
[
|
||||
"--print",
|
||||
fullPrompt,
|
||||
"--output-format",
|
||||
"stream-json",
|
||||
"--stream-partial-output",
|
||||
"--approve-mcps",
|
||||
"--force",
|
||||
],
|
||||
{
|
||||
cwd: process.cwd(),
|
||||
env: {
|
||||
@@ -44,16 +54,36 @@ export const cursor = agent({
|
||||
|
||||
let stdout = "";
|
||||
let stderr = "";
|
||||
let jsonBuffer = "";
|
||||
|
||||
child.on("spawn", () => {
|
||||
log.debug("Cursor CLI process spawned");
|
||||
});
|
||||
|
||||
child.stdout?.on("data", (data) => {
|
||||
child.stdout?.on("data", async (data) => {
|
||||
const text = data.toString();
|
||||
stdout += text;
|
||||
// Stream output in real-time
|
||||
process.stdout.write(text);
|
||||
jsonBuffer += text;
|
||||
|
||||
// parse ndjson (newline-delimited json)
|
||||
const lines = jsonBuffer.split("\n");
|
||||
// keep last incomplete line in buffer
|
||||
jsonBuffer = lines.pop() || "";
|
||||
|
||||
for (const line of lines) {
|
||||
const trimmedLine = line.trim();
|
||||
if (!trimmedLine) continue;
|
||||
|
||||
try {
|
||||
const event = JSON.parse(trimmedLine);
|
||||
// log everything for now - we'll infer types from real output
|
||||
log.debug(`[cursor event] ${JSON.stringify(event, null, 2)}`);
|
||||
} catch {
|
||||
// if json parse fails, might be partial line or non-json output
|
||||
// log debug info but don't crash
|
||||
log.debug(`failed to parse json line: ${trimmedLine.substring(0, 100)}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
child.stderr?.on("data", (data) => {
|
||||
@@ -63,20 +93,32 @@ export const cursor = agent({
|
||||
log.warning(text);
|
||||
});
|
||||
|
||||
child.on("close", (code, signal) => {
|
||||
child.on("close", async (code, signal) => {
|
||||
// process any remaining buffered json
|
||||
if (jsonBuffer.trim()) {
|
||||
try {
|
||||
const event = JSON.parse(jsonBuffer.trim());
|
||||
log.debug(`[cursor event] ${JSON.stringify(event, null, 2)}`);
|
||||
} catch {
|
||||
// ignore parse errors for final buffer
|
||||
}
|
||||
}
|
||||
|
||||
if (signal) {
|
||||
log.warning(`Cursor CLI terminated by signal: ${signal}`);
|
||||
}
|
||||
|
||||
const duration = ((Date.now() - startTime) / 1000).toFixed(1);
|
||||
|
||||
if (code === 0) {
|
||||
log.success("Cursor CLI completed successfully");
|
||||
log.success(`Cursor CLI completed successfully in ${duration}s`);
|
||||
resolve({
|
||||
success: true,
|
||||
output: stdout.trim(),
|
||||
});
|
||||
} else {
|
||||
const errorMessage = stderr || `Cursor CLI exited with code ${code}`;
|
||||
log.error(`Cursor CLI failed: ${errorMessage}`);
|
||||
log.error(`Cursor CLI failed after ${duration}s: ${errorMessage}`);
|
||||
resolve({
|
||||
success: false,
|
||||
error: errorMessage,
|
||||
@@ -86,8 +128,9 @@ export const cursor = agent({
|
||||
});
|
||||
|
||||
child.on("error", (error) => {
|
||||
const duration = ((Date.now() - startTime) / 1000).toFixed(1);
|
||||
const errorMessage = error.message || String(error);
|
||||
log.error(`Cursor CLI execution failed: ${errorMessage}`);
|
||||
log.error(`Cursor CLI execution failed after ${duration}s: ${errorMessage}`);
|
||||
resolve({
|
||||
success: false,
|
||||
error: errorMessage,
|
||||
|
||||
@@ -24,7 +24,6 @@ import { setupGitAuth, setupGitBranch, setupGitConfig } from "./utils/setup.ts";
|
||||
// runtime validation using agents (needed for ArkType)
|
||||
// Note: The AgentName type is defined in external.ts, this is the runtime validator
|
||||
|
||||
const AGENT_OVERRIDE: AgentName | null = "cursor";
|
||||
export const AgentInputKey = type.enumerated(
|
||||
...Object.values(agents).flatMap((agent) => agent.apiKeyNames)
|
||||
);
|
||||
@@ -218,15 +217,15 @@ async function resolveAgent(
|
||||
repoContext,
|
||||
});
|
||||
|
||||
const configuredAgentName =
|
||||
(process.env.NODE_ENV === "development" && AGENT_OVERRIDE) ||
|
||||
payload.agent ||
|
||||
repoSettings.defaultAgent ||
|
||||
null;
|
||||
const agentOverride = process.env.AGENT_OVERRIDE as AgentName | undefined;
|
||||
const configuredAgentName = agentOverride || payload.agent || repoSettings.defaultAgent || null;
|
||||
|
||||
if (configuredAgentName) {
|
||||
const agentName = configuredAgentName;
|
||||
const agent = agents[agentName];
|
||||
if (!agent) {
|
||||
throw new Error(`invalid agent name: ${agentName}`);
|
||||
}
|
||||
log.info(`Selected configured agent: ${agentName}`);
|
||||
return { agentName, agent };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user