#!/usr/bin/env bun /** * Dev entrypoint — launches cli.tsx with MACRO.* defines injected * via Bun's -d flag (bunfig.toml [define] doesn't propagate to * dynamically imported modules at runtime). */ import { join, dirname } from "node:path"; import { fileURLToPath } from "node:url"; import { getMacroDefines } from "./defines.ts"; // Resolve project root from this script's location const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const projectRoot = join(__dirname, ".."); const cliPath = join(projectRoot, "src/entrypoints/cli.tsx"); const defines = getMacroDefines(); const defineArgs = Object.entries(defines).flatMap(([k, v]) => [ "-d", `${k}:${v}`, ]); // Bun --feature flags: enable feature() gates at runtime. // Default features enabled in dev mode. const DEFAULT_FEATURES = [ "BUDDY", "TRANSCRIPT_CLASSIFIER", "BRIDGE_MODE", "AGENT_TRIGGERS_REMOTE", "CHICAGO_MCP", "VOICE_MODE", "SHOT_STATS", "PROMPT_CACHE_BREAK_DETECTION", "TOKEN_BUDGET", // P0: local features "AGENT_TRIGGERS", "ULTRATHINK", "BUILTIN_EXPLORE_PLAN_AGENTS", "LODESTONE", // P1: API-dependent features "EXTRACT_MEMORIES", "VERIFICATION_AGENT", "KAIROS_BRIEF", "AWAY_SUMMARY", "ULTRAPLAN", // P2: daemon + remote control server "DAEMON", // ACP (Agent Client Protocol) agent mode "ACP", // PR-package restored features "WORKFLOW_SCRIPTS", "HISTORY_SNIP", "CONTEXT_COLLAPSE", "MONITOR_TOOL", "FORK_SUBAGENT", "UDS_INBOX", "KAIROS", "COORDINATOR_MODE", "LAN_PIPES", "BG_SESSIONS", "TEMPLATES", // "REVIEW_ARTIFACT", // API 请求无响应,需进一步排查 schema 兼容性 // API content block types "CONNECTOR_TEXT", // Attribution tracking "COMMIT_ATTRIBUTION", // Server mode (claude server / claude open) "DIRECT_CONNECT", // Reactive compaction (auto-compress on 413 prompt_too_long) "REACTIVE_COMPACT", // Skill search (auto-discover relevant skills per turn) "EXPERIMENTAL_SKILL_SEARCH", // Built-in skill learning / evolution MVP (manual commands, no auto hooks) "SKILL_LEARNING", // Web browser tool (navigate/screenshot via fetch, full browser via Bun WebView) "WEB_BROWSER_TOOL", // Cached microcompact (KV cache deletion for efficient context management) "CACHED_MICROCOMPACT", // P3: poor mode (disable extract_memories + prompt_suggestion) "POOR", // Team Memory (shared memory files between agent teammates) "TEAMMEM", ]; // Any env var matching FEATURE_=1 will also enable that feature. // e.g. FEATURE_PROACTIVE=1 bun run dev const envFeatures = Object.entries(process.env) .filter(([k]) => k.startsWith("FEATURE_")) .map(([k]) => k.replace("FEATURE_", "")); const allFeatures = [...new Set([...DEFAULT_FEATURES, ...envFeatures])]; const featureArgs = allFeatures.flatMap((name) => ["--feature", name]); // If BUN_INSPECT is set, pass --inspect-wait to the child process const inspectArgs = process.env.BUN_INSPECT ? ["--inspect-wait=" + process.env.BUN_INSPECT] : []; const result = Bun.spawnSync( ["bun", ...inspectArgs, "run", ...defineArgs, ...featureArgs, cliPath, ...process.argv.slice(2)], { stdio: ["inherit", "inherit", "inherit"], cwd: projectRoot }, ); process.exit(result.exitCode ?? 0);