diff --git a/packages/libclaudebox/config.ts b/packages/libclaudebox/config.ts index 8f93441..c7463e9 100644 --- a/packages/libclaudebox/config.ts +++ b/packages/libclaudebox/config.ts @@ -25,7 +25,7 @@ export const BASTION_SSH_KEY = join(homedir(), ".ssh", "build_instance_key"); // ── Interactive session config ────────────────────────────────── export const CLAUDEBOX_HOST = process.env.CLAUDEBOX_HOST || "localhost:3000"; -export const SESSION_PAGE_USER = process.env.CLAUDEBOX_SESSION_USER || "admin"; +export const SESSION_PAGE_USER = process.env.CLAUDEBOX_SESSION_USER || "aztec"; export const SESSION_PAGE_PASS = process.env.CLAUDEBOX_SESSION_PASS || ""; // ── Log URL builder ───────────────────────────────────────────── diff --git a/packages/libclaudebox/docker.ts b/packages/libclaudebox/docker.ts index edbe764..42e0e73 100644 --- a/packages/libclaudebox/docker.ts +++ b/packages/libclaudebox/docker.ts @@ -147,8 +147,6 @@ export class DockerService { const profile = await loadProfile(profileDir); const dockerConfig = profile.docker || {}; const containerImage = dockerConfig.image || DOCKER_IMAGE; - const mountRef = dockerConfig.mountReferenceRepo !== false; // default true - console.log(`[DOCKER] Starting session ${logId} (worktree=${worktreeId} profile=${profileDir})`); console.log(`[DOCKER] Sidecar: ${sidecarName}`); console.log(`[DOCKER] Claude: ${claudeName}`); @@ -218,13 +216,11 @@ export class DockerService { `${claudeProjectsDir}:${CONTAINER_HOME}/.claude/projects/-workspace:ro`, `${CLAUDEBOX_CODE_DIR}:/opt/claudebox:ro`, `${profileHostDir}:/opt/claudebox-profile:rw`, - `${BASTION_SSH_KEY}:${CONTAINER_HOME}/.ssh/build_instance_key:ro`, + `${BASTION_SSH_KEY}:/home/aztec-dev/.ssh/build_instance_key:ro`, `${CLAUDEBOX_STATS_DIR}:/stats:rw`, `${CLAUDEBOX_DIR}:${CONTAINER_HOME}/.claudebox:rw`, ]; - if (mountRef) { - sidecarBinds.push(`${join(REPO_DIR, ".git")}:/reference-repo/.git:ro`); - } + sidecarBinds.push(`${join(REPO_DIR, ".git")}:/reference-repo/.git:ro`); // Server URL for sidecar → server communication (internal port, not exposed to internet) const serverUrl = `http://host.docker.internal:${INTERNAL_PORT}`; @@ -301,7 +297,6 @@ export class DockerService { "-v", `${join(CLAUDEBOX_CODE_DIR, "profiles", profileDir)}:/opt/claudebox-profile:rw`, "-e", `CLAUDEBOX_MCP_URL=${mcpUrl}`, "-e", `SESSION_UUID=${sessionUuid}`, - "-e", `AZTEC_MCP_SERVER=http://${sidecarName}:9801/creds`, "-e", `CLAUDEBOX_SIDECAR_HOST=${sidecarName}`, "-e", `CLAUDEBOX_SIDECAR_PORT=9801`, "-e", `PARENT_LOG_ID=${logId}`, @@ -318,10 +313,8 @@ export class DockerService { if (dockerConfig.extraBinds) { for (const b of dockerConfig.extraBinds) claudeArgs.push("-v", b); } - // Mount reference repo for profiles that use local clone - if (mountRef) { - claudeArgs.push("-v", `${join(REPO_DIR, ".git")}:/reference-repo/.git:ro`); - } + // Mount reference repo for sparse pre-clone + claudeArgs.push("-v", `${join(REPO_DIR, ".git")}:/reference-repo/.git:ro`); // Auto-detect resume if (opts.worktreeId) { diff --git a/packages/libclaudebox/html/workspace.ts b/packages/libclaudebox/html/workspace.ts index 71a0469..6388c30 100644 --- a/packages/libclaudebox/html/workspace.ts +++ b/packages/libclaudebox/html/workspace.ts @@ -525,6 +525,13 @@ function PromptCard({text, time, user, slackLink}){ // ── Artifact helpers ───────────────────────────────────────────── +// Deduplicate artifacts by URL (or full text if no URL), keeping last occurrence +function dedupArtifacts(artifacts){ + var seen=new Map(); + for(var a of artifacts){var t=slackToMd(a.text);var u=t.match(/https?:\\/\\/\\S+/);seen.set(u?u[0]:t,a);} + return[...seen.values()]; +} + // Extract PR number from artifact text function artifactPrNum(text){ var m=text.match(/#(\\d+)/); @@ -534,7 +541,8 @@ function artifactPrNum(text){ // Build compact artifact chips for a run, marking PR updates function ArtifactChips({artifacts, priorPrNums}){ if(!artifacts||!artifacts.length)return null; - return html\`