claude-yes 1.23.2 → 1.24.0
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/cli.ts +12 -1
- package/dist/claude-yes.js +215 -14
- package/dist/cli.js +215 -14
- package/dist/cli.js.map +4 -4
- package/dist/codex-yes.js +215 -14
- package/dist/copilot-yes.js +215 -14
- package/dist/cursor-yes.js +215 -14
- package/dist/gemini-yes.js +215 -14
- package/dist/grok-yes.js +215 -14
- package/dist/index.js +205 -9
- package/dist/index.js.map +6 -5
- package/index.ts +47 -4
- package/package.json +1 -1
- package/runningLock.spec.ts +477 -0
- package/runningLock.ts +324 -0
package/dist/cli.js.map
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../cli.ts", "index.js"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"#!/usr/bin/env node\nimport enhancedMs from 'enhanced-ms';\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport claudeYes from '.';\n\n// cli entry point\nconst argv = yargs(hideBin(process.argv))\n .usage('Usage: $0 [options] [claude args] [--] [prompts...]')\n .example(\n '$0 --exit-on-idle=30s --continue-on-crash \"help me solve all todos in my codebase\"',\n 'Run Claude with a 30 seconds idle timeout and continue on crash',\n )\n .option('continue-on-crash', {\n type: 'boolean',\n default: true,\n description:\n 'spawn Claude with --continue if it crashes, only works for claude',\n })\n .option('log-file', {\n type: 'string',\n description: 'Log file to write to',\n })\n .option('cli', {\n type: 'string',\n description:\n '
|
|
6
|
-
"import { createRequire } from \"node:module\";\nvar __create = Object.create;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __toESM = (mod, isNodeMode, target) => {\n target = mod != null ? __create(__getProtoOf(mod)) : {};\n const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target;\n for (let key of __getOwnPropNames(mod))\n if (!__hasOwnProp.call(to, key))\n __defProp(to, key, {\n get: () => mod[key],\n enumerable: true\n });\n return to;\n};\nvar __require = /* @__PURE__ */ createRequire(import.meta.url);\n\n// index.ts\nimport { fromReadable, fromWritable } from \"from-node-stream\";\nimport { mkdir, writeFile } from \"fs/promises\";\nimport path from \"path\";\nimport DIE from \"phpdie\";\nimport sflow from \"sflow\";\nimport { TerminalTextRender } from \"terminal-render\";\n\n// idleWaiter.ts\nclass IdleWaiter {\n lastActivityTime = Date.now();\n checkInterval = 100;\n constructor() {\n this.ping();\n }\n ping() {\n this.lastActivityTime = Date.now();\n return this;\n }\n async wait(ms) {\n while (this.lastActivityTime >= Date.now() - ms)\n await new Promise((resolve) => setTimeout(resolve, this.checkInterval));\n }\n}\n\n// ReadyManager.ts\nclass ReadyManager {\n isReady = false;\n readyQueue = [];\n wait() {\n if (this.isReady)\n return;\n return new Promise((resolve) => this.readyQueue.push(resolve));\n }\n unready() {\n this.isReady = false;\n }\n ready() {\n this.isReady = true;\n if (!this.readyQueue.length)\n return;\n this.readyQueue.splice(0).map((resolve) => resolve());\n }\n}\n\n// removeControlCharacters.ts\nfunction removeControlCharacters(str) {\n return str.replace(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, \"\");\n}\n\n// index.ts\nvar CLI_CONFIGURES = {\n grok: {\n install: \"npm install -g @vibe-kit/grok-cli\",\n ready: [/^ │ ❯ /],\n enter: [/^ 1. Yes/]\n },\n claude: {\n install: \"npm install -g @anthropic-ai/claude-code\",\n ready: [/\\? for shortcuts/],\n enter: [/❯ 1. Yes/, /❯ 1. Dark mode✔/, /Press Enter to continue…/],\n fatal: [\n /No conversation found to continue/,\n /⎿ Claude usage limit reached\\./\n ]\n },\n gemini: {\n install: \"npm install -g @google/gemini-cli\",\n ready: [/Type your message/],\n enter: [/│ ● 1. Yes, allow once/],\n fatal: []\n },\n codex: {\n install: \"npm install -g @openai/codex-cli\",\n ready: [/⏎ send/],\n enter: [\n /> 1. Yes, allow Codex to work in this folder/,\n /> 1. Approve and run now/\n ],\n fatal: [/Error: The cursor position could not be read within/],\n ensureArgs: (args) => {\n if (!args.includes(\"--search\"))\n return [\"--search\", ...args];\n return args;\n }\n },\n copilot: {\n install: \"npm install -g @github/copilot\",\n ready: [/^ > /],\n enter: [/ │ ❯ 1. Yes, proceed/, /❯ 1. Yes/],\n fatal: []\n },\n cursor: {\n install: \"open https://cursor.com/ja/docs/cli/installation\",\n binary: \"cursor-agent\",\n ready: [/\\/ commands/],\n enter: [/→ Run \\(once\\) \\(y\\) \\(enter\\)/, /▶ \\[a\\] Trust this workspace/],\n fatal: [/^ Error: You've hit your usage limit/]\n }\n};\nasync function claudeYes({\n cli = \"claude\",\n cliArgs = [],\n prompt,\n continueOnCrash,\n cwd,\n env,\n exitOnIdle,\n logFile,\n removeControlCharactersFromStdout = false,\n verbose = false\n} = {}) {\n const continueArgs = {\n codex: \"resume --last\".split(\" \"),\n claude: \"--continue\".split(\" \"),\n gemini: []\n };\n process.stdin.setRawMode?.(true);\n let isFatal = false;\n const stdinReady = new ReadyManager;\n const nextStdout = new ReadyManager;\n const shellOutputStream = new TransformStream;\n const outputWriter = shellOutputStream.writable.getWriter();\n const pty = await import(\"node-pty\").catch(async () => await import(\"bun-pty\")).catch(async () => DIE(\"Please install node-pty or bun-pty, run this: bun install bun-pty\"));\n const getPtyOptions = () => ({\n name: \"xterm-color\",\n ...getTerminalDimensions(),\n cwd: cwd ?? process.cwd(),\n env: env ?? process.env\n });\n const cliConf = CLI_CONFIGURES[cli] || {};\n cliArgs = cliConf.ensureArgs?.(cliArgs) ?? cliArgs;\n const cliCommand = cliConf?.binary || cli;\n let shell = tryCatch(() => pty.spawn(cliCommand, cliArgs, getPtyOptions()), (error) => {\n console.error(`Fatal: Failed to start ${cliCommand}.`);\n if (cliConf?.install)\n console.error(`If you did not installed it yet, Please install it first: ${cliConf.install}`);\n throw error;\n });\n const pendingExitCode = Promise.withResolvers();\n let pendingExitCodeValue = null;\n async function onData(data) {\n nextStdout.ready();\n await outputWriter.write(data);\n }\n shell.onData(onData);\n shell.onExit(function onExit({ exitCode: exitCode2 }) {\n nextStdout.ready();\n stdinReady.unready();\n const agentCrashed = exitCode2 !== 0;\n const continueArg = continueArgs[cli];\n if (agentCrashed && continueOnCrash && continueArg) {\n if (!continueArg) {\n return console.warn(`continueOnCrash is only supported for ${Object.keys(continueArgs).join(\", \")} currently, not ${cli}`);\n }\n if (isFatal) {\n return pendingExitCode.resolve(pendingExitCodeValue = exitCode2);\n }\n console.log(`${cli} crashed, restarting...`);\n shell = pty.spawn(cli, continueArg, getPtyOptions());\n shell.onData(onData);\n shell.onExit(onExit);\n return;\n }\n return pendingExitCode.resolve(pendingExitCodeValue = exitCode2);\n });\n process.stdout.on(\"resize\", () => {\n const { cols, rows } = getTerminalDimensions();\n shell.resize(cols, rows);\n });\n const terminalRender = new TerminalTextRender;\n const isStillWorkingQ = () => terminalRender.render().replace(/\\s+/g, \" \").match(/esc to interrupt|to run in background/);\n const idleWaiter = new IdleWaiter;\n if (exitOnIdle)\n idleWaiter.wait(exitOnIdle).then(async () => {\n if (isStillWorkingQ()) {\n console.log(\"[${cli}-yes] ${cli} is idle, but seems still working, not exiting yet\");\n return;\n }\n console.log(\"[${cli}-yes] ${cli} is idle, exiting...\");\n await exitAgent();\n });\n sflow(fromReadable(process.stdin)).map((buffer) => buffer.toString()).by({\n writable: new WritableStream({\n write: async (data) => {\n await stdinReady.wait();\n shell.write(data);\n }\n }),\n readable: shellOutputStream.readable\n }).forEach(() => idleWaiter.ping()).forEach((text) => {\n terminalRender.write(text);\n if (process.stdin.isTTY)\n return;\n if (!text.includes(\"\\x1B[6n\"))\n return;\n const { col, row } = terminalRender.getCursorPosition();\n console.log(`[${cli}-yes] Responding cursor position: row=${row}, col=${col}`);\n shell.write(`\\x1B[${row};${col}R`);\n }).forkTo((e) => e.map((e2) => removeControlCharacters(e2)).map((e2) => e2.replaceAll(\"\\r\", \"\")).by((s) => {\n if (cli === \"codex\")\n return s;\n return s.lines({ EOL: \"NONE\" });\n }).forEach(async (e2, i) => {\n const conf = CLI_CONFIGURES[cli] || null;\n if (!conf)\n return;\n if (conf.ready?.some((rx) => e2.match(rx))) {\n if (cli === \"gemini\" && i <= 80)\n return;\n stdinReady.ready();\n }\n if (conf.enter?.some((rx) => e2.match(rx))) {\n await sendEnter(300);\n return;\n }\n if (conf.fatal?.some((rx) => e2.match(rx))) {\n isFatal = true;\n await exitAgent();\n }\n }).run()).map((e) => removeControlCharactersFromStdout ? removeControlCharacters(e) : e).to(fromWritable(process.stdout)).then(() => null);\n if (cli === \"codex\")\n shell.write(`\\x1B[1;1R`);\n if (prompt)\n await sendMessage(prompt);\n const exitCode = await pendingExitCode.promise;\n console.log(`[${cli}-yes] ${cli} exited with code ${exitCode}`);\n if (logFile) {\n verbose && console.log(`[${cli}-yes] Writing rendered logs to ${logFile}`);\n const logFilePath = path.resolve(logFile);\n await mkdir(path.dirname(logFilePath), { recursive: true }).catch(() => null);\n await writeFile(logFilePath, terminalRender.render());\n }\n return { exitCode, logs: terminalRender.render() };\n async function sendEnter(waitms = 1000) {\n const st = Date.now();\n await idleWaiter.wait(waitms);\n const et = Date.now();\n shell.write(\"\\r\");\n }\n async function sendMessage(message) {\n await stdinReady.wait();\n shell.write(message);\n nextStdout.unready();\n idleWaiter.ping();\n await nextStdout.wait();\n await sendEnter();\n }\n async function exitAgent() {\n continueOnCrash = false;\n await sendMessage(\"/exit\");\n let exited = false;\n await Promise.race([\n pendingExitCode.promise.then(() => exited = true),\n new Promise((resolve) => setTimeout(() => {\n if (exited)\n return;\n shell.kill();\n resolve();\n }, 5000))\n ]);\n }\n function getTerminalDimensions() {\n if (!process.stdout.isTTY)\n return { cols: 80, rows: 30 };\n return {\n cols: Math.min(Math.max(20, process.stdout.columns), 80),\n rows: process.stdout.rows\n };\n }\n}\nfunction tryCatch(fn, catchFn) {\n try {\n return fn();\n } catch (error) {\n return catchFn(error);\n }\n}\nexport {\n removeControlCharacters,\n claudeYes as default,\n CLI_CONFIGURES\n};\n\n//# debugId=D17BB3E3D1DC936764756E2164756E21\n//# sourceMappingURL=index.js.map\n"
|
|
5
|
+
"#!/usr/bin/env node\nimport enhancedMs from 'enhanced-ms';\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport claudeYes from '.';\n\n// cli entry point\nconst argv = yargs(hideBin(process.argv))\n .usage('Usage: $0 [options] [claude args] [--] [prompts...]')\n .example(\n '$0 --exit-on-idle=30s --continue-on-crash \"help me solve all todos in my codebase\"',\n 'Run Claude with a 30 seconds idle timeout and continue on crash',\n )\n .option('continue-on-crash', {\n type: 'boolean',\n default: true,\n description:\n 'spawn Claude with --continue if it crashes, only works for claude',\n alias: 'c',\n })\n .option('log-file', {\n type: 'string',\n description: 'Log file to write to',\n })\n .option('cli', {\n type: 'string',\n description:\n 'CLI command to run. Supports: claude, gemini, codex, copilot, cursor, grok. Defaults to the CLI inferred from the executable name or \"claude\".',\n })\n .option('prompt', {\n type: 'string',\n description: 'Prompt to send to Claude',\n alias: 'p',\n })\n .option('verbose', {\n type: 'boolean',\n description: 'Enable verbose logging',\n default: false,\n })\n .option('exit-on-idle', {\n type: 'string',\n description: 'Exit after a period of inactivity, e.g., \"5s\" or \"1m\"',\n alias: 'e',\n })\n .option('disable-lock', {\n type: 'boolean',\n description:\n 'Disable the running lock feature that prevents concurrent agents in the same directory/repo',\n default: false,\n })\n .help()\n .version()\n .parserConfiguration({\n 'unknown-options-as-args': true,\n 'halt-at-non-option': true,\n })\n .parseSync();\n\n// detect cli name for cli, while package.json have multiple bin link: {\"claude-yes\": \"cli.js\", \"codex-yes\": \"cli.js\", \"gemini-yes\": \"cli.js\"}\nif (!argv.cli) {\n const cliName = process.argv[1]?.split('/').pop()?.split('-')[0];\n argv.cli = cliName || 'claude';\n}\n\n// Support: everything after a literal `--` is a prompt string. Example:\n// claude-yes --exit-on-idle=30s -- \"help me refactor this\"\n// In that example the prompt will be `help me refactor this` and won't be\n// passed as args to the underlying CLI binary.\nconst rawArgs = process.argv.slice(2);\nconst dashIndex = rawArgs.indexOf('--');\nlet promptFromDash: string | undefined = undefined;\nlet cliArgsForSpawn: string[] = [];\nif (dashIndex !== -1) {\n // join everything after `--` into a single prompt string\n const after = rawArgs.slice(dashIndex + 1);\n promptFromDash = after.join(' ');\n // use everything before `--` as the cli args\n cliArgsForSpawn = rawArgs.slice(0, dashIndex).map(String);\n} else {\n // fallback to yargs parsed positional args when `--` is not used\n cliArgsForSpawn = argv._.map((e) => String(e));\n}\n\nconsole.clear();\nconst { exitCode, logs } = await claudeYes({\n cli: argv.cli,\n // prefer explicit --prompt / -p; otherwise use the text after `--` if present\n prompt: argv.prompt || promptFromDash,\n exitOnIdle: argv.exitOnIdle ? enhancedMs(argv.exitOnIdle) : undefined,\n cliArgs: cliArgsForSpawn,\n continueOnCrash: argv.continueOnCrash,\n logFile: argv.logFile,\n verbose: argv.verbose,\n disableLock: argv.disableLock,\n});\n\nprocess.exit(exitCode ?? 1);\n",
|
|
6
|
+
"import { createRequire } from \"node:module\";\nvar __create = Object.create;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __toESM = (mod, isNodeMode, target) => {\n target = mod != null ? __create(__getProtoOf(mod)) : {};\n const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target;\n for (let key of __getOwnPropNames(mod))\n if (!__hasOwnProp.call(to, key))\n __defProp(to, key, {\n get: () => mod[key],\n enumerable: true\n });\n return to;\n};\nvar __require = /* @__PURE__ */ createRequire(import.meta.url);\n\n// index.ts\nimport { fromReadable, fromWritable } from \"from-node-stream\";\nimport { mkdir as mkdir2, writeFile as writeFile2 } from \"fs/promises\";\nimport path2 from \"path\";\nimport DIE from \"phpdie\";\nimport sflow from \"sflow\";\nimport { TerminalTextRender } from \"terminal-render\";\n\n// idleWaiter.ts\nclass IdleWaiter {\n lastActivityTime = Date.now();\n checkInterval = 100;\n constructor() {\n this.ping();\n }\n ping() {\n this.lastActivityTime = Date.now();\n return this;\n }\n async wait(ms) {\n while (this.lastActivityTime >= Date.now() - ms)\n await new Promise((resolve) => setTimeout(resolve, this.checkInterval));\n }\n}\n\n// ReadyManager.ts\nclass ReadyManager {\n isReady = false;\n readyQueue = [];\n wait() {\n if (this.isReady)\n return;\n return new Promise((resolve) => this.readyQueue.push(resolve));\n }\n unready() {\n this.isReady = false;\n }\n ready() {\n this.isReady = true;\n if (!this.readyQueue.length)\n return;\n this.readyQueue.splice(0).map((resolve) => resolve());\n }\n}\n\n// removeControlCharacters.ts\nfunction removeControlCharacters(str) {\n return str.replace(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, \"\");\n}\n\n// runningLock.ts\nimport { execSync } from \"child_process\";\nimport { existsSync } from \"fs\";\nimport { mkdir, readFile, rename, writeFile } from \"fs/promises\";\nimport { homedir } from \"os\";\nimport path from \"path\";\nvar LOCK_DIR = path.join(homedir(), \".claude-yes\");\nvar LOCK_FILE = path.join(LOCK_DIR, \"running.lock.json\");\nvar MAX_RETRIES = 5;\nvar RETRY_DELAYS = [50, 100, 200, 400, 800];\nvar POLL_INTERVAL = 2000;\nfunction isProcessRunning(pid) {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\nfunction getGitRoot(cwd) {\n try {\n const result = execSync(\"git rev-parse --show-toplevel\", {\n cwd,\n encoding: \"utf8\",\n stdio: [\"pipe\", \"pipe\", \"ignore\"]\n });\n return result.trim();\n } catch {\n return null;\n }\n}\nfunction isGitRepo(cwd) {\n try {\n const gitRoot = getGitRoot(cwd);\n return gitRoot !== null;\n } catch {\n return false;\n }\n}\nfunction resolveRealPath(p) {\n try {\n return path.resolve(p);\n } catch {\n return p;\n }\n}\nfunction sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\nasync function readLockFile() {\n try {\n await mkdir(LOCK_DIR, { recursive: true });\n if (!existsSync(LOCK_FILE)) {\n return { tasks: [] };\n }\n const content = await readFile(LOCK_FILE, \"utf8\");\n const lockFile = JSON.parse(content);\n lockFile.tasks = lockFile.tasks.filter((task) => {\n if (isProcessRunning(task.pid))\n return true;\n return false;\n });\n return lockFile;\n } catch (error) {\n return { tasks: [] };\n }\n}\nasync function writeLockFile(lockFile, retryCount = 0) {\n try {\n await mkdir(LOCK_DIR, { recursive: true });\n const tempFile = `${LOCK_FILE}.tmp.${process.pid}`;\n await writeFile(tempFile, JSON.stringify(lockFile, null, 2), \"utf8\");\n await rename(tempFile, LOCK_FILE);\n } catch (error) {\n if (retryCount < MAX_RETRIES) {\n await sleep(RETRY_DELAYS[retryCount] || 800);\n return writeLockFile(lockFile, retryCount + 1);\n }\n throw error;\n }\n}\nasync function checkLock(cwd, prompt) {\n const resolvedCwd = resolveRealPath(cwd);\n const gitRoot = isGitRepo(resolvedCwd) ? getGitRoot(resolvedCwd) : null;\n const lockKey = gitRoot || resolvedCwd;\n const lockFile = await readLockFile();\n const blockingTasks = lockFile.tasks.filter((task) => {\n if (!isProcessRunning(task.pid))\n return false;\n if (task.status !== \"running\")\n return false;\n if (gitRoot && task.gitRoot) {\n return task.gitRoot === gitRoot;\n } else {\n return task.cwd === lockKey;\n }\n });\n return {\n isLocked: blockingTasks.length > 0,\n blockingTasks,\n lockKey\n };\n}\nasync function addTask(task) {\n const lockFile = await readLockFile();\n lockFile.tasks = lockFile.tasks.filter((t) => t.pid !== task.pid);\n lockFile.tasks.push(task);\n await writeLockFile(lockFile);\n}\nasync function updateTaskStatus(pid, status) {\n const lockFile = await readLockFile();\n const task = lockFile.tasks.find((t) => t.pid === pid);\n if (task) {\n task.status = status;\n await writeLockFile(lockFile);\n }\n}\nasync function removeTask(pid) {\n const lockFile = await readLockFile();\n lockFile.tasks = lockFile.tasks.filter((t) => t.pid !== pid);\n await writeLockFile(lockFile);\n}\nasync function waitForUnlock(blockingTasks, currentTask) {\n const blockingTask = blockingTasks[0];\n console.log(`⏳ Queueing for unlock of: ${blockingTask.task}`);\n await addTask({ ...currentTask, status: \"queued\" });\n let dots = 0;\n while (true) {\n await sleep(POLL_INTERVAL);\n const lockCheck = await checkLock(currentTask.cwd, currentTask.task);\n if (!lockCheck.isLocked) {\n await updateTaskStatus(currentTask.pid, \"running\");\n console.log(`\n✓ Lock released, starting task...`);\n break;\n }\n dots = (dots + 1) % 4;\n process.stdout.write(`\\r⏳ Queueing${\".\".repeat(dots)}${\" \".repeat(3 - dots)}`);\n }\n}\nasync function acquireLock(cwd, prompt = \"no prompt provided\") {\n const resolvedCwd = resolveRealPath(cwd);\n const gitRoot = isGitRepo(resolvedCwd) ? getGitRoot(resolvedCwd) : null;\n const task = {\n cwd: resolvedCwd,\n gitRoot: gitRoot || undefined,\n task: prompt.substring(0, 100),\n pid: process.pid,\n status: \"running\",\n startedAt: Date.now(),\n lockedAt: Date.now()\n };\n const lockCheck = await checkLock(resolvedCwd, prompt);\n if (lockCheck.isLocked) {\n await waitForUnlock(lockCheck.blockingTasks, task);\n } else {\n await addTask(task);\n }\n}\nasync function releaseLock(pid = process.pid) {\n await removeTask(pid);\n}\nasync function updateCurrentTaskStatus(status, pid = process.pid) {\n await updateTaskStatus(pid, status);\n}\nfunction shouldUseLock(cwd) {\n const resolvedCwd = resolveRealPath(cwd);\n return true;\n}\n\n// index.ts\nvar CLI_CONFIGURES = {\n grok: {\n install: \"npm install -g @vibe-kit/grok-cli\",\n ready: [/^ │ ❯ /],\n enter: [/^ 1. Yes/]\n },\n claude: {\n install: \"npm install -g @anthropic-ai/claude-code\",\n ready: [/\\? for shortcuts/],\n enter: [/❯ 1. Yes/, /❯ 1. Dark mode✔/, /Press Enter to continue…/],\n fatal: [\n /No conversation found to continue/,\n /⎿ Claude usage limit reached\\./\n ]\n },\n gemini: {\n install: \"npm install -g @google/gemini-cli\",\n ready: [/Type your message/],\n enter: [/│ ● 1. Yes, allow once/],\n fatal: []\n },\n codex: {\n install: \"npm install -g @openai/codex-cli\",\n ready: [/⏎ send/],\n enter: [\n /> 1. Yes, allow Codex to work in this folder/,\n /> 1. Approve and run now/\n ],\n fatal: [/Error: The cursor position could not be read within/],\n ensureArgs: (args) => {\n if (!args.includes(\"--search\"))\n return [\"--search\", ...args];\n return args;\n }\n },\n copilot: {\n install: \"npm install -g @github/copilot\",\n ready: [/^ +> /, /Ctrl\\+c Exit/],\n enter: [/ │ ❯ 1. Yes, proceed/, /❯ 1. Yes/],\n fatal: []\n },\n cursor: {\n install: \"open https://cursor.com/ja/docs/cli/installation\",\n binary: \"cursor-agent\",\n ready: [/\\/ commands/],\n enter: [/→ Run \\(once\\) \\(y\\) \\(enter\\)/, /▶ \\[a\\] Trust this workspace/],\n fatal: [/^ Error: You've hit your usage limit/]\n }\n};\nasync function claudeYes({\n cli = \"claude\",\n cliArgs = [],\n prompt,\n continueOnCrash,\n cwd,\n env,\n exitOnIdle,\n logFile,\n removeControlCharactersFromStdout = false,\n verbose = false,\n disableLock = false\n} = {}) {\n const continueArgs = {\n codex: \"resume --last\".split(\" \"),\n claude: \"--continue\".split(\" \"),\n gemini: []\n };\n const workingDir = cwd ?? process.cwd();\n if (!disableLock && shouldUseLock(workingDir)) {\n await acquireLock(workingDir, prompt ?? \"Interactive session\");\n }\n const cleanupLock = async () => {\n if (!disableLock && shouldUseLock(workingDir)) {\n await releaseLock().catch(() => null);\n }\n };\n process.on(\"exit\", () => {\n if (!disableLock) {\n releaseLock().catch(() => null);\n }\n });\n process.on(\"SIGINT\", async () => {\n await cleanupLock();\n process.exit(130);\n });\n process.on(\"SIGTERM\", async () => {\n await cleanupLock();\n process.exit(143);\n });\n process.stdin.setRawMode?.(true);\n let isFatal = false;\n const stdinReady = new ReadyManager;\n const nextStdout = new ReadyManager;\n const shellOutputStream = new TransformStream;\n const outputWriter = shellOutputStream.writable.getWriter();\n const pty = await import(\"node-pty\").catch(async () => await import(\"bun-pty\")).catch(async () => DIE(\"Please install node-pty or bun-pty, run this: bun install bun-pty\"));\n const getPtyOptions = () => ({\n name: \"xterm-color\",\n ...getTerminalDimensions(),\n cwd: cwd ?? process.cwd(),\n env: env ?? process.env\n });\n const cliConf = CLI_CONFIGURES[cli] || {};\n cliArgs = cliConf.ensureArgs?.(cliArgs) ?? cliArgs;\n const cliCommand = cliConf?.binary || cli;\n let shell = tryCatch(() => pty.spawn(cliCommand, cliArgs, getPtyOptions()), (error) => {\n console.error(`Fatal: Failed to start ${cliCommand}.`);\n if (cliConf?.install)\n console.error(`If you did not installed it yet, Please install it first: ${cliConf.install}`);\n throw error;\n });\n const pendingExitCode = Promise.withResolvers();\n let pendingExitCodeValue = null;\n async function onData(data) {\n nextStdout.ready();\n await outputWriter.write(data);\n }\n shell.onData(onData);\n shell.onExit(function onExit({ exitCode: exitCode2 }) {\n nextStdout.ready();\n stdinReady.unready();\n const agentCrashed = exitCode2 !== 0;\n const continueArg = continueArgs[cli];\n if (agentCrashed && continueOnCrash && continueArg) {\n if (!continueArg) {\n return console.warn(`continueOnCrash is only supported for ${Object.keys(continueArgs).join(\", \")} currently, not ${cli}`);\n }\n if (isFatal) {\n return pendingExitCode.resolve(pendingExitCodeValue = exitCode2);\n }\n console.log(`${cli} crashed, restarting...`);\n shell = pty.spawn(cli, continueArg, getPtyOptions());\n shell.onData(onData);\n shell.onExit(onExit);\n return;\n }\n return pendingExitCode.resolve(pendingExitCodeValue = exitCode2);\n });\n process.stdout.on(\"resize\", () => {\n const { cols, rows } = getTerminalDimensions();\n shell.resize(cols, rows);\n });\n const terminalRender = new TerminalTextRender;\n const isStillWorkingQ = () => terminalRender.render().replace(/\\s+/g, \" \").match(/esc to interrupt|to run in background/);\n const idleWaiter = new IdleWaiter;\n if (exitOnIdle)\n idleWaiter.wait(exitOnIdle).then(async () => {\n if (isStillWorkingQ()) {\n console.log(\"[${cli}-yes] ${cli} is idle, but seems still working, not exiting yet\");\n return;\n }\n console.log(\"[${cli}-yes] ${cli} is idle, exiting...\");\n await exitAgent();\n });\n sflow(fromReadable(process.stdin)).map((buffer) => buffer.toString()).by({\n writable: new WritableStream({\n write: async (data) => {\n await stdinReady.wait();\n shell.write(data);\n }\n }),\n readable: shellOutputStream.readable\n }).forEach(() => idleWaiter.ping()).forEach((text) => {\n terminalRender.write(text);\n if (process.stdin.isTTY)\n return;\n if (!text.includes(\"\\x1B[6n\"))\n return;\n const { col, row } = terminalRender.getCursorPosition();\n shell.write(`\\x1B[${row};${col}R`);\n }).forkTo((e) => e.map((e2) => removeControlCharacters(e2)).map((e2) => e2.replaceAll(\"\\r\", \"\")).by((s) => {\n if (cli === \"codex\")\n return s;\n return s.lines({ EOL: \"NONE\" });\n }).forEach(async (e2, i) => {\n const conf = CLI_CONFIGURES[cli] || null;\n if (!conf)\n return;\n if (conf.ready?.some((rx) => e2.match(rx))) {\n if (cli === \"gemini\" && i <= 80)\n return;\n stdinReady.ready();\n }\n if (conf.enter?.some((rx) => e2.match(rx))) {\n await sendEnter(300);\n return;\n }\n if (conf.fatal?.some((rx) => e2.match(rx))) {\n isFatal = true;\n await exitAgent();\n }\n }).run()).map((e) => removeControlCharactersFromStdout ? removeControlCharacters(e) : e).to(fromWritable(process.stdout)).then(() => null);\n if (cli === \"codex\")\n shell.write(`\\x1B[1;1R`);\n if (prompt)\n await sendMessage(prompt);\n const exitCode = await pendingExitCode.promise;\n console.log(`[${cli}-yes] ${cli} exited with code ${exitCode}`);\n if (!disableLock && shouldUseLock(workingDir)) {\n await updateCurrentTaskStatus(exitCode === 0 ? \"completed\" : \"failed\").catch(() => null);\n await releaseLock().catch(() => null);\n }\n if (logFile) {\n verbose && console.log(`[${cli}-yes] Writing rendered logs to ${logFile}`);\n const logFilePath = path2.resolve(logFile);\n await mkdir2(path2.dirname(logFilePath), { recursive: true }).catch(() => null);\n await writeFile2(logFilePath, terminalRender.render());\n }\n return { exitCode, logs: terminalRender.render() };\n async function sendEnter(waitms = 1000) {\n const st = Date.now();\n await idleWaiter.wait(waitms);\n const et = Date.now();\n shell.write(\"\\r\");\n }\n async function sendMessage(message) {\n await stdinReady.wait();\n shell.write(message);\n nextStdout.unready();\n idleWaiter.ping();\n await nextStdout.wait();\n await sendEnter();\n }\n async function exitAgent() {\n continueOnCrash = false;\n await sendMessage(\"/exit\");\n let exited = false;\n await Promise.race([\n pendingExitCode.promise.then(() => exited = true),\n new Promise((resolve) => setTimeout(() => {\n if (exited)\n return;\n shell.kill();\n resolve();\n }, 5000))\n ]);\n }\n function getTerminalDimensions() {\n if (!process.stdout.isTTY)\n return { cols: 80, rows: 30 };\n return {\n cols: Math.min(Math.max(20, process.stdout.columns), 80),\n rows: process.stdout.rows\n };\n }\n}\nfunction tryCatch(fn, catchFn) {\n try {\n return fn();\n } catch (error) {\n return catchFn(error);\n }\n}\nexport {\n removeControlCharacters,\n claudeYes as default,\n CLI_CONFIGURES\n};\n\n//# debugId=6EB7DAB2DD725AD464756E2164756E21\n//# sourceMappingURL=index.js.map\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "4BC661A586B1849964756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
package/dist/codex-yes.js
CHANGED
|
@@ -25,11 +25,16 @@ import { hideBin } from "yargs/helpers";
|
|
|
25
25
|
|
|
26
26
|
// dist/index.js
|
|
27
27
|
import { fromReadable, fromWritable } from "from-node-stream";
|
|
28
|
-
import { mkdir, writeFile } from "fs/promises";
|
|
29
|
-
import
|
|
28
|
+
import { mkdir as mkdir2, writeFile as writeFile2 } from "fs/promises";
|
|
29
|
+
import path2 from "path";
|
|
30
30
|
import DIE from "phpdie";
|
|
31
31
|
import sflow from "sflow";
|
|
32
32
|
import { TerminalTextRender } from "terminal-render";
|
|
33
|
+
import { execSync } from "child_process";
|
|
34
|
+
import { existsSync } from "fs";
|
|
35
|
+
import { mkdir, readFile, rename, writeFile } from "fs/promises";
|
|
36
|
+
import { homedir } from "os";
|
|
37
|
+
import path from "path";
|
|
33
38
|
class IdleWaiter {
|
|
34
39
|
lastActivityTime = Date.now();
|
|
35
40
|
checkInterval = 100;
|
|
@@ -67,6 +72,169 @@ class ReadyManager {
|
|
|
67
72
|
function removeControlCharacters(str) {
|
|
68
73
|
return str.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, "");
|
|
69
74
|
}
|
|
75
|
+
var LOCK_DIR = path.join(homedir(), ".claude-yes");
|
|
76
|
+
var LOCK_FILE = path.join(LOCK_DIR, "running.lock.json");
|
|
77
|
+
var MAX_RETRIES = 5;
|
|
78
|
+
var RETRY_DELAYS = [50, 100, 200, 400, 800];
|
|
79
|
+
var POLL_INTERVAL = 2000;
|
|
80
|
+
function isProcessRunning(pid) {
|
|
81
|
+
try {
|
|
82
|
+
process.kill(pid, 0);
|
|
83
|
+
return true;
|
|
84
|
+
} catch {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function getGitRoot(cwd) {
|
|
89
|
+
try {
|
|
90
|
+
const result = execSync("git rev-parse --show-toplevel", {
|
|
91
|
+
cwd,
|
|
92
|
+
encoding: "utf8",
|
|
93
|
+
stdio: ["pipe", "pipe", "ignore"]
|
|
94
|
+
});
|
|
95
|
+
return result.trim();
|
|
96
|
+
} catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function isGitRepo(cwd) {
|
|
101
|
+
try {
|
|
102
|
+
const gitRoot = getGitRoot(cwd);
|
|
103
|
+
return gitRoot !== null;
|
|
104
|
+
} catch {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function resolveRealPath(p) {
|
|
109
|
+
try {
|
|
110
|
+
return path.resolve(p);
|
|
111
|
+
} catch {
|
|
112
|
+
return p;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function sleep(ms) {
|
|
116
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
117
|
+
}
|
|
118
|
+
async function readLockFile() {
|
|
119
|
+
try {
|
|
120
|
+
await mkdir(LOCK_DIR, { recursive: true });
|
|
121
|
+
if (!existsSync(LOCK_FILE)) {
|
|
122
|
+
return { tasks: [] };
|
|
123
|
+
}
|
|
124
|
+
const content = await readFile(LOCK_FILE, "utf8");
|
|
125
|
+
const lockFile = JSON.parse(content);
|
|
126
|
+
lockFile.tasks = lockFile.tasks.filter((task) => {
|
|
127
|
+
if (isProcessRunning(task.pid))
|
|
128
|
+
return true;
|
|
129
|
+
return false;
|
|
130
|
+
});
|
|
131
|
+
return lockFile;
|
|
132
|
+
} catch (error) {
|
|
133
|
+
return { tasks: [] };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async function writeLockFile(lockFile, retryCount = 0) {
|
|
137
|
+
try {
|
|
138
|
+
await mkdir(LOCK_DIR, { recursive: true });
|
|
139
|
+
const tempFile = `${LOCK_FILE}.tmp.${process.pid}`;
|
|
140
|
+
await writeFile(tempFile, JSON.stringify(lockFile, null, 2), "utf8");
|
|
141
|
+
await rename(tempFile, LOCK_FILE);
|
|
142
|
+
} catch (error) {
|
|
143
|
+
if (retryCount < MAX_RETRIES) {
|
|
144
|
+
await sleep(RETRY_DELAYS[retryCount] || 800);
|
|
145
|
+
return writeLockFile(lockFile, retryCount + 1);
|
|
146
|
+
}
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function checkLock(cwd, prompt) {
|
|
151
|
+
const resolvedCwd = resolveRealPath(cwd);
|
|
152
|
+
const gitRoot = isGitRepo(resolvedCwd) ? getGitRoot(resolvedCwd) : null;
|
|
153
|
+
const lockKey = gitRoot || resolvedCwd;
|
|
154
|
+
const lockFile = await readLockFile();
|
|
155
|
+
const blockingTasks = lockFile.tasks.filter((task) => {
|
|
156
|
+
if (!isProcessRunning(task.pid))
|
|
157
|
+
return false;
|
|
158
|
+
if (task.status !== "running")
|
|
159
|
+
return false;
|
|
160
|
+
if (gitRoot && task.gitRoot) {
|
|
161
|
+
return task.gitRoot === gitRoot;
|
|
162
|
+
} else {
|
|
163
|
+
return task.cwd === lockKey;
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
return {
|
|
167
|
+
isLocked: blockingTasks.length > 0,
|
|
168
|
+
blockingTasks,
|
|
169
|
+
lockKey
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
async function addTask(task) {
|
|
173
|
+
const lockFile = await readLockFile();
|
|
174
|
+
lockFile.tasks = lockFile.tasks.filter((t) => t.pid !== task.pid);
|
|
175
|
+
lockFile.tasks.push(task);
|
|
176
|
+
await writeLockFile(lockFile);
|
|
177
|
+
}
|
|
178
|
+
async function updateTaskStatus(pid, status) {
|
|
179
|
+
const lockFile = await readLockFile();
|
|
180
|
+
const task = lockFile.tasks.find((t) => t.pid === pid);
|
|
181
|
+
if (task) {
|
|
182
|
+
task.status = status;
|
|
183
|
+
await writeLockFile(lockFile);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
async function removeTask(pid) {
|
|
187
|
+
const lockFile = await readLockFile();
|
|
188
|
+
lockFile.tasks = lockFile.tasks.filter((t) => t.pid !== pid);
|
|
189
|
+
await writeLockFile(lockFile);
|
|
190
|
+
}
|
|
191
|
+
async function waitForUnlock(blockingTasks, currentTask) {
|
|
192
|
+
const blockingTask = blockingTasks[0];
|
|
193
|
+
console.log(`⏳ Queueing for unlock of: ${blockingTask.task}`);
|
|
194
|
+
await addTask({ ...currentTask, status: "queued" });
|
|
195
|
+
let dots = 0;
|
|
196
|
+
while (true) {
|
|
197
|
+
await sleep(POLL_INTERVAL);
|
|
198
|
+
const lockCheck = await checkLock(currentTask.cwd, currentTask.task);
|
|
199
|
+
if (!lockCheck.isLocked) {
|
|
200
|
+
await updateTaskStatus(currentTask.pid, "running");
|
|
201
|
+
console.log(`
|
|
202
|
+
✓ Lock released, starting task...`);
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
dots = (dots + 1) % 4;
|
|
206
|
+
process.stdout.write(`\r⏳ Queueing${".".repeat(dots)}${" ".repeat(3 - dots)}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async function acquireLock(cwd, prompt = "no prompt provided") {
|
|
210
|
+
const resolvedCwd = resolveRealPath(cwd);
|
|
211
|
+
const gitRoot = isGitRepo(resolvedCwd) ? getGitRoot(resolvedCwd) : null;
|
|
212
|
+
const task = {
|
|
213
|
+
cwd: resolvedCwd,
|
|
214
|
+
gitRoot: gitRoot || undefined,
|
|
215
|
+
task: prompt.substring(0, 100),
|
|
216
|
+
pid: process.pid,
|
|
217
|
+
status: "running",
|
|
218
|
+
startedAt: Date.now(),
|
|
219
|
+
lockedAt: Date.now()
|
|
220
|
+
};
|
|
221
|
+
const lockCheck = await checkLock(resolvedCwd, prompt);
|
|
222
|
+
if (lockCheck.isLocked) {
|
|
223
|
+
await waitForUnlock(lockCheck.blockingTasks, task);
|
|
224
|
+
} else {
|
|
225
|
+
await addTask(task);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
async function releaseLock(pid = process.pid) {
|
|
229
|
+
await removeTask(pid);
|
|
230
|
+
}
|
|
231
|
+
async function updateCurrentTaskStatus(status, pid = process.pid) {
|
|
232
|
+
await updateTaskStatus(pid, status);
|
|
233
|
+
}
|
|
234
|
+
function shouldUseLock(cwd) {
|
|
235
|
+
const resolvedCwd = resolveRealPath(cwd);
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
70
238
|
var CLI_CONFIGURES = {
|
|
71
239
|
grok: {
|
|
72
240
|
install: "npm install -g @vibe-kit/grok-cli",
|
|
@@ -104,7 +272,7 @@ var CLI_CONFIGURES = {
|
|
|
104
272
|
},
|
|
105
273
|
copilot: {
|
|
106
274
|
install: "npm install -g @github/copilot",
|
|
107
|
-
ready: [/^
|
|
275
|
+
ready: [/^ +> /, /Ctrl\+c Exit/],
|
|
108
276
|
enter: [/ │ ❯ 1. Yes, proceed/, /❯ 1. Yes/],
|
|
109
277
|
fatal: []
|
|
110
278
|
},
|
|
@@ -126,13 +294,36 @@ async function claudeYes({
|
|
|
126
294
|
exitOnIdle,
|
|
127
295
|
logFile,
|
|
128
296
|
removeControlCharactersFromStdout = false,
|
|
129
|
-
verbose = false
|
|
297
|
+
verbose = false,
|
|
298
|
+
disableLock = false
|
|
130
299
|
} = {}) {
|
|
131
300
|
const continueArgs = {
|
|
132
301
|
codex: "resume --last".split(" "),
|
|
133
302
|
claude: "--continue".split(" "),
|
|
134
303
|
gemini: []
|
|
135
304
|
};
|
|
305
|
+
const workingDir = cwd ?? process.cwd();
|
|
306
|
+
if (!disableLock && shouldUseLock(workingDir)) {
|
|
307
|
+
await acquireLock(workingDir, prompt ?? "Interactive session");
|
|
308
|
+
}
|
|
309
|
+
const cleanupLock = async () => {
|
|
310
|
+
if (!disableLock && shouldUseLock(workingDir)) {
|
|
311
|
+
await releaseLock().catch(() => null);
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
process.on("exit", () => {
|
|
315
|
+
if (!disableLock) {
|
|
316
|
+
releaseLock().catch(() => null);
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
process.on("SIGINT", async () => {
|
|
320
|
+
await cleanupLock();
|
|
321
|
+
process.exit(130);
|
|
322
|
+
});
|
|
323
|
+
process.on("SIGTERM", async () => {
|
|
324
|
+
await cleanupLock();
|
|
325
|
+
process.exit(143);
|
|
326
|
+
});
|
|
136
327
|
process.stdin.setRawMode?.(true);
|
|
137
328
|
let isFatal = false;
|
|
138
329
|
const stdinReady = new ReadyManager;
|
|
@@ -213,7 +404,6 @@ async function claudeYes({
|
|
|
213
404
|
if (!text.includes("\x1B[6n"))
|
|
214
405
|
return;
|
|
215
406
|
const { col, row } = terminalRender.getCursorPosition();
|
|
216
|
-
console.log(`[${cli}-yes] Responding cursor position: row=${row}, col=${col}`);
|
|
217
407
|
shell.write(`\x1B[${row};${col}R`);
|
|
218
408
|
}).forkTo((e) => e.map((e2) => removeControlCharacters(e2)).map((e2) => e2.replaceAll("\r", "")).by((s) => {
|
|
219
409
|
if (cli === "codex")
|
|
@@ -243,11 +433,15 @@ async function claudeYes({
|
|
|
243
433
|
await sendMessage(prompt);
|
|
244
434
|
const exitCode = await pendingExitCode.promise;
|
|
245
435
|
console.log(`[${cli}-yes] ${cli} exited with code ${exitCode}`);
|
|
436
|
+
if (!disableLock && shouldUseLock(workingDir)) {
|
|
437
|
+
await updateCurrentTaskStatus(exitCode === 0 ? "completed" : "failed").catch(() => null);
|
|
438
|
+
await releaseLock().catch(() => null);
|
|
439
|
+
}
|
|
246
440
|
if (logFile) {
|
|
247
441
|
verbose && console.log(`[${cli}-yes] Writing rendered logs to ${logFile}`);
|
|
248
|
-
const logFilePath =
|
|
249
|
-
await
|
|
250
|
-
await
|
|
442
|
+
const logFilePath = path2.resolve(logFile);
|
|
443
|
+
await mkdir2(path2.dirname(logFilePath), { recursive: true }).catch(() => null);
|
|
444
|
+
await writeFile2(logFilePath, terminalRender.render());
|
|
251
445
|
}
|
|
252
446
|
return { exitCode, logs: terminalRender.render() };
|
|
253
447
|
async function sendEnter(waitms = 1000) {
|
|
@@ -299,13 +493,14 @@ function tryCatch(fn, catchFn) {
|
|
|
299
493
|
var argv = yargs(hideBin(process.argv)).usage("Usage: $0 [options] [claude args] [--] [prompts...]").example('$0 --exit-on-idle=30s --continue-on-crash "help me solve all todos in my codebase"', "Run Claude with a 30 seconds idle timeout and continue on crash").option("continue-on-crash", {
|
|
300
494
|
type: "boolean",
|
|
301
495
|
default: true,
|
|
302
|
-
description: "spawn Claude with --continue if it crashes, only works for claude"
|
|
496
|
+
description: "spawn Claude with --continue if it crashes, only works for claude",
|
|
497
|
+
alias: "c"
|
|
303
498
|
}).option("log-file", {
|
|
304
499
|
type: "string",
|
|
305
500
|
description: "Log file to write to"
|
|
306
501
|
}).option("cli", {
|
|
307
502
|
type: "string",
|
|
308
|
-
description: '
|
|
503
|
+
description: 'CLI command to run. Supports: claude, gemini, codex, copilot, cursor, grok. Defaults to the CLI inferred from the executable name or "claude".'
|
|
309
504
|
}).option("prompt", {
|
|
310
505
|
type: "string",
|
|
311
506
|
description: "Prompt to send to Claude",
|
|
@@ -316,8 +511,13 @@ var argv = yargs(hideBin(process.argv)).usage("Usage: $0 [options] [claude args]
|
|
|
316
511
|
default: false
|
|
317
512
|
}).option("exit-on-idle", {
|
|
318
513
|
type: "string",
|
|
319
|
-
description: 'Exit after a period of inactivity, e.g., "5s" or "1m"'
|
|
320
|
-
|
|
514
|
+
description: 'Exit after a period of inactivity, e.g., "5s" or "1m"',
|
|
515
|
+
alias: "e"
|
|
516
|
+
}).option("disable-lock", {
|
|
517
|
+
type: "boolean",
|
|
518
|
+
description: "Disable the running lock feature that prevents concurrent agents in the same directory/repo",
|
|
519
|
+
default: false
|
|
520
|
+
}).help().version().parserConfiguration({
|
|
321
521
|
"unknown-options-as-args": true,
|
|
322
522
|
"halt-at-non-option": true
|
|
323
523
|
}).parseSync();
|
|
@@ -344,9 +544,10 @@ var { exitCode, logs } = await claudeYes({
|
|
|
344
544
|
cliArgs: cliArgsForSpawn,
|
|
345
545
|
continueOnCrash: argv.continueOnCrash,
|
|
346
546
|
logFile: argv.logFile,
|
|
347
|
-
verbose: argv.verbose
|
|
547
|
+
verbose: argv.verbose,
|
|
548
|
+
disableLock: argv.disableLock
|
|
348
549
|
});
|
|
349
550
|
process.exit(exitCode ?? 1);
|
|
350
551
|
|
|
351
|
-
//# debugId=
|
|
552
|
+
//# debugId=4BC661A586B1849964756E2164756E21
|
|
352
553
|
//# sourceMappingURL=cli.js.map
|