mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
133 lines
4.7 KiB
TypeScript
133 lines
4.7 KiB
TypeScript
import { AgentManager } from "./packages/server/src/server/acp/agent-manager.js";
|
||
import { createWorktree } from "./packages/server/src/utils/worktree.js";
|
||
import { exec } from "child_process";
|
||
import { promisify } from "util";
|
||
|
||
const execAsync = promisify(exec);
|
||
|
||
async function testWorktreeAgent() {
|
||
console.log("=== Testing Worktree Agent Creation ===\n");
|
||
|
||
const testBranchName = "test-worktree-feature";
|
||
const cwd = process.cwd(); // voice-dev directory
|
||
|
||
try {
|
||
// Step 1: Test worktree creation directly
|
||
console.log("Step 1: Testing worktree creation utility...");
|
||
console.log(` Current directory: ${cwd}`);
|
||
console.log(` Branch name: ${testBranchName}\n`);
|
||
|
||
const worktreeConfig = await createWorktree({
|
||
branchName: testBranchName,
|
||
cwd,
|
||
});
|
||
|
||
console.log("✓ Worktree created successfully!");
|
||
console.log(` Branch: ${worktreeConfig.branchName}`);
|
||
console.log(` Path: ${worktreeConfig.worktreePath}`);
|
||
console.log(` Repo type: ${worktreeConfig.repoType}`);
|
||
console.log(` Repo path: ${worktreeConfig.repoPath}\n`);
|
||
|
||
// Step 2: Verify worktree exists in git
|
||
console.log("Step 2: Verifying worktree in git...");
|
||
const { stdout: worktreeList } = await execAsync("git worktree list");
|
||
console.log("Git worktree list:");
|
||
console.log(worktreeList);
|
||
|
||
if (!worktreeList.includes(worktreeConfig.worktreePath)) {
|
||
throw new Error("Worktree not found in git worktree list!");
|
||
}
|
||
console.log("✓ Worktree verified in git\n");
|
||
|
||
// Step 3: Check pwd and git status in worktree
|
||
console.log("Step 3: Checking pwd and git status in worktree...");
|
||
const { stdout: pwd } = await execAsync("pwd", {
|
||
cwd: worktreeConfig.worktreePath,
|
||
});
|
||
console.log(` pwd: ${pwd.trim()}`);
|
||
|
||
const { stdout: gitStatus } = await execAsync("git status", {
|
||
cwd: worktreeConfig.worktreePath,
|
||
});
|
||
console.log(" git status:");
|
||
console.log(gitStatus);
|
||
|
||
if (!pwd.trim().includes(testBranchName)) {
|
||
throw new Error(`pwd doesn't include branch name! Got: ${pwd}`);
|
||
}
|
||
|
||
if (!gitStatus.includes(testBranchName)) {
|
||
throw new Error(`git status doesn't show branch! Got: ${gitStatus}`);
|
||
}
|
||
console.log("✓ Working directory and git status verified\n");
|
||
|
||
// Step 4: Create agent in worktree
|
||
console.log("Step 4: Creating agent in worktree...");
|
||
const agentManager = new AgentManager();
|
||
await agentManager.initialize();
|
||
|
||
const agentId = await agentManager.createAgent({
|
||
cwd: worktreeConfig.worktreePath,
|
||
});
|
||
|
||
console.log(`✓ Agent created: ${agentId}`);
|
||
|
||
// Step 5: Initialize agent and check its cwd
|
||
console.log("\nStep 5: Initializing agent and verifying cwd...");
|
||
const { info } = await agentManager.initializeAgentAndGetHistory(agentId);
|
||
|
||
console.log(` Agent cwd: ${info.cwd}`);
|
||
console.log(` Expected: ${worktreeConfig.worktreePath}`);
|
||
|
||
if (info.cwd !== worktreeConfig.worktreePath) {
|
||
throw new Error(
|
||
`Agent cwd mismatch! Expected ${worktreeConfig.worktreePath}, got ${info.cwd}`
|
||
);
|
||
}
|
||
console.log("✓ Agent cwd verified\n");
|
||
|
||
// Step 6: Send a prompt to verify it's working in the worktree
|
||
console.log("Step 6: Sending test prompt to agent...");
|
||
const { didComplete } = await agentManager.sendPrompt(
|
||
agentId,
|
||
"Run pwd and git status to verify you're in a worktree. Reply with the output.",
|
||
{ maxWait: 30000 }
|
||
);
|
||
|
||
console.log(` Prompt completed: ${didComplete}`);
|
||
|
||
// Get agent updates to see the response
|
||
const updates = agentManager.getAgentUpdates(agentId);
|
||
const lastFewUpdates = updates.slice(-5);
|
||
console.log("\n Last few agent updates:");
|
||
lastFewUpdates.forEach((update, i) => {
|
||
console.log(
|
||
` ${i + 1}. [${update.notification.type}] ${JSON.stringify(update.notification).substring(0, 100)}...`
|
||
);
|
||
});
|
||
|
||
// Kill the agent
|
||
console.log("\nStep 7: Cleaning up agent...");
|
||
await agentManager.killAgent(agentId);
|
||
console.log("✓ Agent killed\n");
|
||
|
||
console.log("=== ALL TESTS PASSED ===");
|
||
console.log("\n⚠️ IMPORTANT: Worktree still exists at:");
|
||
console.log(` ${worktreeConfig.worktreePath}`);
|
||
console.log("\nTo clean up manually, run:");
|
||
console.log(` git worktree remove ${worktreeConfig.worktreePath}`);
|
||
console.log(` git branch -D ${testBranchName}`);
|
||
|
||
process.exit(0);
|
||
} catch (error) {
|
||
console.error("\n❌ TEST FAILED:");
|
||
console.error(error);
|
||
console.log("\n⚠️ If worktree was created, clean up manually with:");
|
||
console.log(` git worktree remove voice-dev-${testBranchName} || true`);
|
||
console.log(` git branch -D ${testBranchName} || true`);
|
||
process.exit(1);
|
||
}
|
||
}
|
||
|
||
testWorktreeAgent();
|