claude-yes 1.22.0 → 1.23.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.
@@ -25,11 +25,12 @@ import { hideBin } from "yargs/helpers";
25
25
 
26
26
  // dist/index.js
27
27
  import { fromReadable, fromWritable } from "from-node-stream";
28
- import { appendFile, mkdir, writeFile } from "fs/promises";
28
+ import { appendFile, mkdir, rm, writeFile } from "fs/promises";
29
29
  import path from "path";
30
30
  import DIE from "phpdie";
31
31
  import sflow from "sflow";
32
32
  import { TerminalTextRender } from "terminal-render";
33
+ import tsaComposer from "tsa-composer";
33
34
  class IdleWaiter {
34
35
  lastActivityTime = Date.now();
35
36
  checkInterval = 100;
@@ -75,7 +76,7 @@ var CLI_CONFIGURES = {
75
76
  },
76
77
  claude: {
77
78
  install: "npm install -g @anthropic-ai/claude-code",
78
- ready: [/^> /],
79
+ ready: [/\? for shortcuts/],
79
80
  enter: [/❯ 1. Yes/, /❯ 1. Dark mode✔/, /Press Enter to continue…/],
80
81
  fatal: [
81
82
  /No conversation found to continue/,
@@ -92,8 +93,8 @@ var CLI_CONFIGURES = {
92
93
  install: "npm install -g @openai/codex-cli",
93
94
  ready: [/⏎ send/],
94
95
  enter: [
95
- /\b▌ \> 1\. Approve and run now/,
96
- /\b\> 1\. Yes, allow Codex to work in this folder/
96
+ /> 1. Yes, allow Codex to work in this folder/,
97
+ /▌ > 1. Approve and run now/
97
98
  ],
98
99
  fatal: [/Error: The cursor position could not be read within/],
99
100
  ensureArgs: (args) => {
@@ -128,6 +129,11 @@ async function claudeYes({
128
129
  removeControlCharactersFromStdout = false,
129
130
  verbose = false
130
131
  } = {}) {
132
+ await rm("agent-yes.log").catch(() => null);
133
+ const yesLog = tsaComposer()(async function yesLog(msg) {
134
+ await appendFile("agent-yes.log", `${msg}
135
+ `).catch(() => null);
136
+ });
131
137
  const continueArgs = {
132
138
  codex: "resume --last".split(" "),
133
139
  claude: "--continue".split(" "),
@@ -195,8 +201,6 @@ async function claudeYes({
195
201
  console.log("[${cli}-yes] ${cli} is idle, exiting...");
196
202
  await exitAgent();
197
203
  });
198
- console.log(`[${cli}-yes] Started ${cli} with args: ${[cliCommand, ...cliArgs].join(" ")}`);
199
- shell.write("\x1B[1;1R");
200
204
  sflow(fromReadable(process.stdin)).map((buffer) => buffer.toString()).by({
201
205
  writable: new WritableStream({
202
206
  write: async (data) => {
@@ -209,29 +213,34 @@ async function claudeYes({
209
213
  terminalRender.write(text);
210
214
  if (process.stdin.isTTY)
211
215
  return;
212
- if (text.includes("\x1B[6n"))
216
+ if (!text.includes("\x1B[6n"))
213
217
  return;
214
218
  const { col, row } = terminalRender.getCursorPosition();
215
219
  console.log(`[${cli}-yes] Responding cursor position: row=${row}, col=${col}`);
216
220
  shell.write(`\x1B[${row};${col}R`);
217
- }).forkTo((e) => e.map((e2) => removeControlCharacters(e2)).map((e2) => e2.replaceAll("\r", "")).forEach((e2) => appendFile("io.log", "output|" + JSON.stringify(e2) + `
218
- `)).forEach(async (e2, i) => {
221
+ }).forkTo((e) => e.map((e2) => removeControlCharacters(e2)).map((e2) => e2.replaceAll("\r", "")).lines({ EOL: "NONE" }).forEach((e2) => yesLog`output|${e2}`).forEach(async (e2, i) => {
219
222
  const conf = CLI_CONFIGURES[cli] || null;
220
223
  if (!conf)
221
224
  return;
222
225
  if (conf.ready?.some((rx) => e2.match(rx))) {
226
+ await yesLog`ready |${e2}`;
223
227
  if (cli === "gemini" && i <= 80)
224
228
  return;
225
229
  stdinReady.ready();
226
230
  }
227
231
  if (conf.enter?.some((rx) => e2.match(rx))) {
232
+ await yesLog`enter |${e2}`;
228
233
  await sendEnter(300);
234
+ return;
229
235
  }
230
236
  if (conf.fatal?.some((rx) => e2.match(rx))) {
237
+ await yesLog`fatal |${e2}`;
231
238
  isFatal = true;
232
239
  await exitAgent();
233
240
  }
234
241
  }).run()).map((e) => removeControlCharactersFromStdout ? removeControlCharacters(e) : e).to(fromWritable(process.stdout)).then(() => null);
242
+ if (cli === "codex")
243
+ shell.write(`\x1B[1;1R`);
235
244
  if (prompt)
236
245
  await sendMessage(prompt);
237
246
  const exitCode = await pendingExitCode.promise;
@@ -247,11 +256,12 @@ async function claudeYes({
247
256
  const st = Date.now();
248
257
  await idleWaiter.wait(waitms);
249
258
  const et = Date.now();
250
- process.stdout.write(`\ridleWaiter.wait(${waitms}) took ${et - st}ms\r`);
259
+ await yesLog`sendEn| idleWaiter.wait(${String(waitms)}) took ${String(et - st)}ms`;
251
260
  shell.write("\r");
252
261
  }
253
262
  async function sendMessage(message) {
254
263
  await stdinReady.wait();
264
+ await yesLog`send |${message}`;
255
265
  shell.write(message);
256
266
  idleWaiter.ping();
257
267
  await sendEnter();
@@ -271,8 +281,10 @@ async function claudeYes({
271
281
  ]);
272
282
  }
273
283
  function getTerminalDimensions() {
284
+ if (!process.stdout.isTTY)
285
+ return { cols: 80, rows: 30 };
274
286
  return {
275
- cols: process.stdout.columns,
287
+ cols: Math.min(Math.max(20, process.stdout.columns), 80),
276
288
  rows: process.stdout.rows
277
289
  };
278
290
  }
@@ -338,5 +350,5 @@ var { exitCode, logs } = await claudeYes({
338
350
  });
339
351
  process.exit(exitCode ?? 1);
340
352
 
341
- //# debugId=F98366DB626CC88164756E2164756E21
353
+ //# debugId=FE903BBCCEA75D2B64756E2164756E21
342
354
  //# sourceMappingURL=cli.js.map
package/dist/cli.js CHANGED
@@ -25,11 +25,12 @@ import { hideBin } from "yargs/helpers";
25
25
 
26
26
  // dist/index.js
27
27
  import { fromReadable, fromWritable } from "from-node-stream";
28
- import { appendFile, mkdir, writeFile } from "fs/promises";
28
+ import { appendFile, mkdir, rm, writeFile } from "fs/promises";
29
29
  import path from "path";
30
30
  import DIE from "phpdie";
31
31
  import sflow from "sflow";
32
32
  import { TerminalTextRender } from "terminal-render";
33
+ import tsaComposer from "tsa-composer";
33
34
  class IdleWaiter {
34
35
  lastActivityTime = Date.now();
35
36
  checkInterval = 100;
@@ -75,7 +76,7 @@ var CLI_CONFIGURES = {
75
76
  },
76
77
  claude: {
77
78
  install: "npm install -g @anthropic-ai/claude-code",
78
- ready: [/^> /],
79
+ ready: [/\? for shortcuts/],
79
80
  enter: [/❯ 1. Yes/, /❯ 1. Dark mode✔/, /Press Enter to continue…/],
80
81
  fatal: [
81
82
  /No conversation found to continue/,
@@ -92,8 +93,8 @@ var CLI_CONFIGURES = {
92
93
  install: "npm install -g @openai/codex-cli",
93
94
  ready: [/⏎ send/],
94
95
  enter: [
95
- /\b▌ \> 1\. Approve and run now/,
96
- /\b\> 1\. Yes, allow Codex to work in this folder/
96
+ /> 1. Yes, allow Codex to work in this folder/,
97
+ /▌ > 1. Approve and run now/
97
98
  ],
98
99
  fatal: [/Error: The cursor position could not be read within/],
99
100
  ensureArgs: (args) => {
@@ -128,6 +129,11 @@ async function claudeYes({
128
129
  removeControlCharactersFromStdout = false,
129
130
  verbose = false
130
131
  } = {}) {
132
+ await rm("agent-yes.log").catch(() => null);
133
+ const yesLog = tsaComposer()(async function yesLog(msg) {
134
+ await appendFile("agent-yes.log", `${msg}
135
+ `).catch(() => null);
136
+ });
131
137
  const continueArgs = {
132
138
  codex: "resume --last".split(" "),
133
139
  claude: "--continue".split(" "),
@@ -195,8 +201,6 @@ async function claudeYes({
195
201
  console.log("[${cli}-yes] ${cli} is idle, exiting...");
196
202
  await exitAgent();
197
203
  });
198
- console.log(`[${cli}-yes] Started ${cli} with args: ${[cliCommand, ...cliArgs].join(" ")}`);
199
- shell.write("\x1B[1;1R");
200
204
  sflow(fromReadable(process.stdin)).map((buffer) => buffer.toString()).by({
201
205
  writable: new WritableStream({
202
206
  write: async (data) => {
@@ -209,29 +213,34 @@ async function claudeYes({
209
213
  terminalRender.write(text);
210
214
  if (process.stdin.isTTY)
211
215
  return;
212
- if (text.includes("\x1B[6n"))
216
+ if (!text.includes("\x1B[6n"))
213
217
  return;
214
218
  const { col, row } = terminalRender.getCursorPosition();
215
219
  console.log(`[${cli}-yes] Responding cursor position: row=${row}, col=${col}`);
216
220
  shell.write(`\x1B[${row};${col}R`);
217
- }).forkTo((e) => e.map((e2) => removeControlCharacters(e2)).map((e2) => e2.replaceAll("\r", "")).forEach((e2) => appendFile("io.log", "output|" + JSON.stringify(e2) + `
218
- `)).forEach(async (e2, i) => {
221
+ }).forkTo((e) => e.map((e2) => removeControlCharacters(e2)).map((e2) => e2.replaceAll("\r", "")).lines({ EOL: "NONE" }).forEach((e2) => yesLog`output|${e2}`).forEach(async (e2, i) => {
219
222
  const conf = CLI_CONFIGURES[cli] || null;
220
223
  if (!conf)
221
224
  return;
222
225
  if (conf.ready?.some((rx) => e2.match(rx))) {
226
+ await yesLog`ready |${e2}`;
223
227
  if (cli === "gemini" && i <= 80)
224
228
  return;
225
229
  stdinReady.ready();
226
230
  }
227
231
  if (conf.enter?.some((rx) => e2.match(rx))) {
232
+ await yesLog`enter |${e2}`;
228
233
  await sendEnter(300);
234
+ return;
229
235
  }
230
236
  if (conf.fatal?.some((rx) => e2.match(rx))) {
237
+ await yesLog`fatal |${e2}`;
231
238
  isFatal = true;
232
239
  await exitAgent();
233
240
  }
234
241
  }).run()).map((e) => removeControlCharactersFromStdout ? removeControlCharacters(e) : e).to(fromWritable(process.stdout)).then(() => null);
242
+ if (cli === "codex")
243
+ shell.write(`\x1B[1;1R`);
235
244
  if (prompt)
236
245
  await sendMessage(prompt);
237
246
  const exitCode = await pendingExitCode.promise;
@@ -247,11 +256,12 @@ async function claudeYes({
247
256
  const st = Date.now();
248
257
  await idleWaiter.wait(waitms);
249
258
  const et = Date.now();
250
- process.stdout.write(`\ridleWaiter.wait(${waitms}) took ${et - st}ms\r`);
259
+ await yesLog`sendEn| idleWaiter.wait(${String(waitms)}) took ${String(et - st)}ms`;
251
260
  shell.write("\r");
252
261
  }
253
262
  async function sendMessage(message) {
254
263
  await stdinReady.wait();
264
+ await yesLog`send |${message}`;
255
265
  shell.write(message);
256
266
  idleWaiter.ping();
257
267
  await sendEnter();
@@ -271,8 +281,10 @@ async function claudeYes({
271
281
  ]);
272
282
  }
273
283
  function getTerminalDimensions() {
284
+ if (!process.stdout.isTTY)
285
+ return { cols: 80, rows: 30 };
274
286
  return {
275
- cols: process.stdout.columns,
287
+ cols: Math.min(Math.max(20, process.stdout.columns), 80),
276
288
  rows: process.stdout.rows
277
289
  };
278
290
  }
@@ -338,5 +350,5 @@ var { exitCode, logs } = await claudeYes({
338
350
  });
339
351
  process.exit(exitCode ?? 1);
340
352
 
341
- //# debugId=F98366DB626CC88164756E2164756E21
353
+ //# debugId=FE903BBCCEA75D2B64756E2164756E21
342
354
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -3,9 +3,9 @@
3
3
  "sources": ["../cli.ts", "index.js"],
4
4
  "sourcesContent": [
5
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 'Claude CLI command, e.g. \"claude,gemini,codex,cursor,copilot\", default is \"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 })\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});\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 { appendFile, 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: [/^> /],\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 /\\b▌ \\> 1\\. Approve and run now/,\n /\\b\\> 1\\. Yes, allow Codex to work in this folder/\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 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 await outputWriter.write(data);\n }\n shell.onData(onData);\n shell.onExit(function onExit({ exitCode: exitCode2 }) {\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 console.log(`[${cli}-yes] Started ${cli} with args: ${[cliCommand, ...cliArgs].join(\" \")}`);\n shell.write(\"\\x1B[1;1R\");\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\", \"\")).forEach((e2) => appendFile(\"io.log\", \"output|\" + JSON.stringify(e2) + `\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 }\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 (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 process.stdout.write(`\\ridleWaiter.wait(${waitms}) took ${et - st}ms\\r`);\n shell.write(\"\\r\");\n }\n async function sendMessage(message) {\n await stdinReady.wait();\n shell.write(message);\n idleWaiter.ping();\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 return {\n cols: process.stdout.columns,\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=725F10399412016964756E2164756E21\n//# sourceMappingURL=index.js.map\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 { appendFile, mkdir, rm, writeFile } from \"fs/promises\";\nimport path from \"path\";\nimport DIE from \"phpdie\";\nimport sflow from \"sflow\";\nimport { TerminalTextRender } from \"terminal-render\";\nimport tsaComposer from \"tsa-composer\";\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 await rm(\"agent-yes.log\").catch(() => null);\n const yesLog = tsaComposer()(async function yesLog(msg) {\n await appendFile(\"agent-yes.log\", `${msg}\n`).catch(() => null);\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 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 await outputWriter.write(data);\n }\n shell.onData(onData);\n shell.onExit(function onExit({ exitCode: exitCode2 }) {\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\", \"\")).lines({ EOL: \"NONE\" }).forEach((e2) => yesLog`output|${e2}`).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 await yesLog`ready |${e2}`;\n if (cli === \"gemini\" && i <= 80)\n return;\n stdinReady.ready();\n }\n if (conf.enter?.some((rx) => e2.match(rx))) {\n await yesLog`enter |${e2}`;\n await sendEnter(300);\n return;\n }\n if (conf.fatal?.some((rx) => e2.match(rx))) {\n await yesLog`fatal |${e2}`;\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 await yesLog`sendEn| idleWaiter.wait(${String(waitms)}) took ${String(et - st)}ms`;\n shell.write(\"\\r\");\n }\n async function sendMessage(message) {\n await stdinReady.wait();\n await yesLog`send |${message}`;\n shell.write(message);\n idleWaiter.ping();\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=D97240F2071C1DE564756E2164756E21\n//# sourceMappingURL=index.js.map\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "F98366DB626CC88164756E2164756E21",
8
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AACA;AACA;AACA;;;ACiBA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,MAAM,WAAW;AAAA,EACf,mBAAmB,KAAK,IAAI;AAAA,EAC5B,gBAAgB;AAAA,EAChB,WAAW,GAAG;AAAA,IACZ,KAAK,KAAK;AAAA;AAAA,EAEZ,IAAI,GAAG;AAAA,IACL,KAAK,mBAAmB,KAAK,IAAI;AAAA,IACjC,OAAO;AAAA;AAAA,OAEH,KAAI,CAAC,IAAI;AAAA,IACb,OAAO,KAAK,oBAAoB,KAAK,IAAI,IAAI;AAAA,MAC3C,MAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,KAAK,aAAa,CAAC;AAAA;AAE5E;AAAA;AAGA,MAAM,aAAa;AAAA,EACjB,UAAU;AAAA,EACV,aAAa,CAAC;AAAA,EACd,IAAI,GAAG;AAAA,IACL,IAAI,KAAK;AAAA,MACP;AAAA,IACF,OAAO,IAAI,QAAQ,CAAC,YAAY,KAAK,WAAW,KAAK,OAAO,CAAC;AAAA;AAAA,EAE/D,OAAO,GAAG;AAAA,IACR,KAAK,UAAU;AAAA;AAAA,EAEjB,KAAK,GAAG;AAAA,IACN,KAAK,UAAU;AAAA,IACf,IAAI,CAAC,KAAK,WAAW;AAAA,MACnB;AAAA,IACF,KAAK,WAAW,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,QAAQ,CAAC;AAAA;AAExD;AAGA,SAAS,uBAAuB,CAAC,KAAK;AAAA,EACpC,OAAO,IAAI,QAAQ,+EAA+E,EAAE;AAAA;AAItG,IAAI,iBAAiB;AAAA,EACnB,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,OAAO,CAAC,SAAQ;AAAA,IAChB,OAAO,CAAC,YAAY;AAAA,EACtB;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,OAAO,CAAC,kBAAkB;AAAA,IAC1B,OAAO,CAAC,YAAW,mBAAmB,0BAA0B;AAAA,IAChE,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,OAAO,CAAC,mBAAmB;AAAA,IAC3B,OAAO,CAAC,wBAAuB;AAAA,IAC/B,OAAO,CAAC;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,OAAO,CAAC,QAAO;AAAA,IACf,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAO,CAAC,qDAAqD;AAAA,IAC7D,YAAY,CAAC,SAAS;AAAA,MACpB,IAAI,CAAC,KAAK,SAAS,UAAU;AAAA,QAC3B,OAAO,CAAC,YAAY,GAAG,IAAI;AAAA,MAC7B,OAAO;AAAA;AAAA,EAEX;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,OAAO,CAAC,OAAO;AAAA,IACf,OAAO,CAAC,wBAAuB,UAAU;AAAA,IACzC,OAAO,CAAC;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO,CAAC,aAAa;AAAA,IACrB,OAAO,CAAC,kCAAiC,8BAA8B;AAAA,IACvE,OAAO,CAAC,uCAAuC;AAAA,EACjD;AACF;AACA,eAAe,SAAS;AAAA,EACtB,MAAM;AAAA,EACN,UAAU,CAAC;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,oCAAoC;AAAA,EACpC,UAAU;AAAA,IACR,CAAC,GAAG;AAAA,EACN,MAAM,GAAG,eAAe,EAAE,MAAM,MAAM,IAAI;AAAA,EAC1C,MAAM,SAAS,YAAY,EAAE,eAAe,MAAM,CAAC,KAAK;AAAA,IACtD,MAAM,WAAW,iBAAiB,GAAG;AAAA,CACxC,EAAE,MAAM,MAAM,IAAI;AAAA,GAChB;AAAA,EACD,MAAM,eAAe;AAAA,IACnB,OAAO,gBAAgB,MAAM,GAAG;AAAA,IAChC,QAAQ,aAAa,MAAM,GAAG;AAAA,IAC9B,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,QAAQ,MAAM,aAAa,IAAI;AAAA,EAC/B,IAAI,UAAU;AAAA,EACd,MAAM,aAAa,IAAI;AAAA,EACvB,MAAM,oBAAoB,IAAI;AAAA,EAC9B,MAAM,eAAe,kBAAkB,SAAS,UAAU;AAAA,EAC1D,MAAM,MAAM,MAAa,mBAAY,MAAM,YAAY,MAAa,iBAAU,EAAE,MAAM,YAAY,IAAI,mEAAmE,CAAC;AAAA,EAC1K,MAAM,gBAAgB,OAAO;AAAA,IAC3B,MAAM;AAAA,OACH,sBAAsB;AAAA,IACzB,KAAK,OAAO,QAAQ,IAAI;AAAA,IACxB,KAAK,OAAO,QAAQ;AAAA,EACtB;AAAA,EACA,MAAM,UAAU,eAAe,QAAQ,CAAC;AAAA,EACxC,UAAU,QAAQ,aAAa,OAAO,KAAK;AAAA,EAC3C,MAAM,aAAa,SAAS,UAAU;AAAA,EACtC,IAAI,QAAQ,SAAS,MAAM,IAAI,MAAM,YAAY,SAAS,cAAc,CAAC,GAAG,CAAC,UAAU;AAAA,IACrF,QAAQ,MAAM,0BAA0B,aAAa;AAAA,IACrD,IAAI,SAAS;AAAA,MACX,QAAQ,MAAM,6DAA6D,QAAQ,SAAS;AAAA,IAC9F,MAAM;AAAA,GACP;AAAA,EACD,MAAM,kBAAkB,QAAQ,cAAc;AAAA,EAC9C,IAAI,uBAAuB;AAAA,EAC3B,eAAe,MAAM,CAAC,MAAM;AAAA,IAC1B,MAAM,aAAa,MAAM,IAAI;AAAA;AAAA,EAE/B,MAAM,OAAO,MAAM;AAAA,EACnB,MAAM,OAAO,SAAS,MAAM,GAAG,UAAU,aAAa;AAAA,IACpD,WAAW,QAAQ;AAAA,IACnB,MAAM,eAAe,cAAc;AAAA,IACnC,MAAM,cAAc,aAAa;AAAA,IACjC,IAAI,gBAAgB,mBAAmB,aAAa;AAAA,MAClD,IAAI,CAAC,aAAa;AAAA,QAChB,OAAO,QAAQ,KAAK,yCAAyC,OAAO,KAAK,YAAY,EAAE,KAAK,IAAI,oBAAoB,KAAK;AAAA,MAC3H;AAAA,MACA,IAAI,SAAS;AAAA,QACX,OAAO,gBAAgB,QAAQ,uBAAuB,SAAS;AAAA,MACjE;AAAA,MACA,QAAQ,IAAI,GAAG,4BAA4B;AAAA,MAC3C,QAAQ,IAAI,MAAM,KAAK,aAAa,cAAc,CAAC;AAAA,MACnD,MAAM,OAAO,MAAM;AAAA,MACnB,MAAM,OAAO,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,IACA,OAAO,gBAAgB,QAAQ,uBAAuB,SAAS;AAAA,GAChE;AAAA,EACD,QAAQ,OAAO,GAAG,UAAU,MAAM;AAAA,IAChC,QAAQ,MAAM,SAAS,sBAAsB;AAAA,IAC7C,MAAM,OAAO,MAAM,IAAI;AAAA,GACxB;AAAA,EACD,MAAM,iBAAiB,IAAI;AAAA,EAC3B,MAAM,kBAAkB,MAAM,eAAe,OAAO,EAAE,QAAQ,QAAQ,GAAG,EAAE,MAAM,uCAAuC;AAAA,EACxH,MAAM,aAAa,IAAI;AAAA,EACvB,IAAI;AAAA,IACF,WAAW,KAAK,UAAU,EAAE,KAAK,YAAY;AAAA,MAC3C,IAAI,gBAAgB,GAAG;AAAA,QACrB,QAAQ,IAAI,uEAAuE;AAAA,QACnF;AAAA,MACF;AAAA,MACA,QAAQ,IAAI,yCAAyC;AAAA,MACrD,MAAM,UAAU;AAAA,KACjB;AAAA,EACH,MAAM,aAAa,QAAQ,KAAK,CAAC,EAAE,IAAI,CAAC,WAAW,OAAO,SAAS,CAAC,EAAE,GAAG;AAAA,IACvE,UAAU,IAAI,eAAe;AAAA,MAC3B,OAAO,OAAO,SAAS;AAAA,QACrB,MAAM,WAAW,KAAK;AAAA,QACtB,MAAM,MAAM,IAAI;AAAA;AAAA,IAEpB,CAAC;AAAA,IACD,UAAU,kBAAkB;AAAA,EAC9B,CAAC,EAAE,QAAQ,MAAM,WAAW,KAAK,CAAC,EAAE,QAAQ,CAAC,SAAS;AAAA,IACpD,eAAe,MAAM,IAAI;AAAA,IACzB,IAAI,QAAQ,MAAM;AAAA,MAChB;AAAA,IACF,IAAI,CAAC,KAAK,SAAS,SAAS;AAAA,MAC1B;AAAA,IACF,QAAQ,KAAK,QAAQ,eAAe,kBAAkB;AAAA,IACtD,QAAQ,IAAI,IAAI,4CAA4C,YAAY,KAAK;AAAA,IAC7E,MAAM,MAAM,QAAQ,OAAO,MAAM;AAAA,GAClC,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,wBAAwB,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,WAAW,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,EAAE,QAAQ,CAAC,OAAO,gBAAgB,IAAI,EAAE,QAAQ,OAAO,IAAI,MAAM;AAAA,IACrL,MAAM,OAAO,eAAe,QAAQ;AAAA,IACpC,IAAI,CAAC;AAAA,MACH;AAAA,IACF,IAAI,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,GAAG;AAAA,MAC1C,MAAM,gBAAgB;AAAA,MACtB,IAAI,QAAQ,YAAY,KAAK;AAAA,QAC3B;AAAA,MACF,WAAW,MAAM;AAAA,IACnB;AAAA,IACA,IAAI,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,GAAG;AAAA,MAC1C,MAAM,gBAAgB;AAAA,MACtB,MAAM,UAAU,GAAG;AAAA,MACnB;AAAA,IACF;AAAA,IACA,IAAI,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,GAAG;AAAA,MAC1C,MAAM,gBAAgB;AAAA,MACtB,UAAU;AAAA,MACV,MAAM,UAAU;AAAA,IAClB;AAAA,GACD,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,oCAAoC,wBAAwB,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,QAAQ,MAAM,CAAC,EAAE,KAAK,MAAM,IAAI;AAAA,EACzI,IAAI,QAAQ;AAAA,IACV,MAAM,MAAM,WAAW;AAAA,EACzB,IAAI;AAAA,IACF,MAAM,YAAY,MAAM;AAAA,EAC1B,MAAM,WAAW,MAAM,gBAAgB;AAAA,EACvC,QAAQ,IAAI,IAAI,YAAY,wBAAwB,UAAU;AAAA,EAC9D,IAAI,SAAS;AAAA,IACX,WAAW,QAAQ,IAAI,IAAI,qCAAqC,SAAS;AAAA,IACzE,MAAM,cAAc,KAAK,QAAQ,OAAO;AAAA,IACxC,MAAM,MAAM,KAAK,QAAQ,WAAW,GAAG,EAAE,WAAW,KAAK,CAAC,EAAE,MAAM,MAAM,IAAI;AAAA,IAC5E,MAAM,UAAU,aAAa,eAAe,OAAO,CAAC;AAAA,EACtD;AAAA,EACA,OAAO,EAAE,UAAU,MAAM,eAAe,OAAO,EAAE;AAAA,EACjD,eAAe,SAAS,CAAC,SAAS,MAAM;AAAA,IACtC,MAAM,KAAK,KAAK,IAAI;AAAA,IACpB,MAAM,WAAW,KAAK,MAAM;AAAA,IAC5B,MAAM,KAAK,KAAK,IAAI;AAAA,IACpB,MAAM,iCAAiC,OAAO,MAAM,WAAW,OAAO,KAAK,EAAE;AAAA,IAC7E,MAAM,MAAM,IAAI;AAAA;AAAA,EAElB,eAAe,WAAW,CAAC,SAAS;AAAA,IAClC,MAAM,WAAW,KAAK;AAAA,IACtB,MAAM,gBAAgB;AAAA,IACtB,MAAM,MAAM,OAAO;AAAA,IACnB,WAAW,KAAK;AAAA,IAChB,MAAM,UAAU;AAAA;AAAA,EAElB,eAAe,SAAS,GAAG;AAAA,IACzB,kBAAkB;AAAA,IAClB,MAAM,YAAY,OAAO;AAAA,IACzB,IAAI,SAAS;AAAA,IACb,MAAM,QAAQ,KAAK;AAAA,MACjB,gBAAgB,QAAQ,KAAK,MAAM,SAAS,IAAI;AAAA,MAChD,IAAI,QAAQ,CAAC,YAAY,WAAW,MAAM;AAAA,QACxC,IAAI;AAAA,UACF;AAAA,QACF,MAAM,KAAK;AAAA,QACX,QAAQ;AAAA,SACP,IAAI,CAAC;AAAA,IACV,CAAC;AAAA;AAAA,EAEH,SAAS,qBAAqB,GAAG;AAAA,IAC/B,IAAI,CAAC,QAAQ,OAAO;AAAA,MAClB,OAAO,EAAE,MAAM,IAAI,MAAM,GAAG;AAAA,IAC9B,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,KAAK,IAAI,IAAI,QAAQ,OAAO,OAAO,GAAG,EAAE;AAAA,MACvD,MAAM,QAAQ,OAAO;AAAA,IACvB;AAAA;AAAA;AAGJ,SAAS,QAAQ,CAAC,IAAI,SAAS;AAAA,EAC7B,IAAI;AAAA,IACF,OAAO,GAAG;AAAA,IACV,OAAO,OAAO;AAAA,IACd,OAAO,QAAQ,KAAK;AAAA;AAAA;;;ADjSxB,IAAM,OAAO,MAAM,QAAQ,QAAQ,IAAI,CAAC,EACrC,MAAM,qDAAqD,EAC3D,QACC,sFACA,iEACF,EACC,OAAO,qBAAqB;AAAA,EAC3B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aACE;AACJ,CAAC,EACA,OAAO,YAAY;AAAA,EAClB,MAAM;AAAA,EACN,aAAa;AACf,CAAC,EACA,OAAO,OAAO;AAAA,EACb,MAAM;AAAA,EACN,aACE;AACJ,CAAC,EACA,OAAO,UAAU;AAAA,EAChB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AACT,CAAC,EACA,OAAO,WAAW;AAAA,EACjB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AACX,CAAC,EACA,OAAO,gBAAgB;AAAA,EACtB,MAAM;AAAA,EACN,aAAa;AACf,CAAC,EACA,oBAAoB;AAAA,EACnB,2BAA2B;AAAA,EAC3B,sBAAsB;AACxB,CAAC,EACA,UAAU;AAGb,IAAI,CAAC,KAAK,KAAK;AAAA,EACb,MAAM,UAAU,QAAQ,KAAK,IAAI,MAAM,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,EAAE;AAAA,EAC9D,KAAK,MAAM,WAAW;AACxB;AAMA,IAAM,UAAU,QAAQ,KAAK,MAAM,CAAC;AACpC,IAAM,YAAY,QAAQ,QAAQ,IAAI;AACtC,IAAI,iBAAqC;AACzC,IAAI,kBAA4B,CAAC;AACjC,IAAI,cAAc,IAAI;AAAA,EAEpB,MAAM,QAAQ,QAAQ,MAAM,YAAY,CAAC;AAAA,EACzC,iBAAiB,MAAM,KAAK,GAAG;AAAA,EAE/B,kBAAkB,QAAQ,MAAM,GAAG,SAAS,EAAE,IAAI,MAAM;AAC1D,EAAO;AAAA,EAEL,kBAAkB,KAAK,EAAE,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC;AAAA;AAG/C,QAAQ,MAAM;AACd,MAAQ,UAAU,SAAS,MAAM,UAAU;AAAA,EACzC,KAAK,KAAK;AAAA,EAEV,QAAQ,KAAK,UAAU;AAAA,EACvB,YAAY,KAAK,aAAa,WAAW,KAAK,UAAU,IAAI;AAAA,EAC5D,SAAS;AAAA,EACT,iBAAiB,KAAK;AAAA,EACtB,SAAS,KAAK;AAAA,EACd,SAAS,KAAK;AAChB,CAAC;AAED,QAAQ,KAAK,YAAY,CAAC;",
9
+ "debugId": "FE903BBCCEA75D2B64756E2164756E21",
10
10
  "names": []
11
11
  }
package/dist/codex-yes.js CHANGED
@@ -25,11 +25,12 @@ import { hideBin } from "yargs/helpers";
25
25
 
26
26
  // dist/index.js
27
27
  import { fromReadable, fromWritable } from "from-node-stream";
28
- import { appendFile, mkdir, writeFile } from "fs/promises";
28
+ import { appendFile, mkdir, rm, writeFile } from "fs/promises";
29
29
  import path from "path";
30
30
  import DIE from "phpdie";
31
31
  import sflow from "sflow";
32
32
  import { TerminalTextRender } from "terminal-render";
33
+ import tsaComposer from "tsa-composer";
33
34
  class IdleWaiter {
34
35
  lastActivityTime = Date.now();
35
36
  checkInterval = 100;
@@ -75,7 +76,7 @@ var CLI_CONFIGURES = {
75
76
  },
76
77
  claude: {
77
78
  install: "npm install -g @anthropic-ai/claude-code",
78
- ready: [/^> /],
79
+ ready: [/\? for shortcuts/],
79
80
  enter: [/❯ 1. Yes/, /❯ 1. Dark mode✔/, /Press Enter to continue…/],
80
81
  fatal: [
81
82
  /No conversation found to continue/,
@@ -92,8 +93,8 @@ var CLI_CONFIGURES = {
92
93
  install: "npm install -g @openai/codex-cli",
93
94
  ready: [/⏎ send/],
94
95
  enter: [
95
- /\b▌ \> 1\. Approve and run now/,
96
- /\b\> 1\. Yes, allow Codex to work in this folder/
96
+ /> 1. Yes, allow Codex to work in this folder/,
97
+ /▌ > 1. Approve and run now/
97
98
  ],
98
99
  fatal: [/Error: The cursor position could not be read within/],
99
100
  ensureArgs: (args) => {
@@ -128,6 +129,11 @@ async function claudeYes({
128
129
  removeControlCharactersFromStdout = false,
129
130
  verbose = false
130
131
  } = {}) {
132
+ await rm("agent-yes.log").catch(() => null);
133
+ const yesLog = tsaComposer()(async function yesLog(msg) {
134
+ await appendFile("agent-yes.log", `${msg}
135
+ `).catch(() => null);
136
+ });
131
137
  const continueArgs = {
132
138
  codex: "resume --last".split(" "),
133
139
  claude: "--continue".split(" "),
@@ -195,8 +201,6 @@ async function claudeYes({
195
201
  console.log("[${cli}-yes] ${cli} is idle, exiting...");
196
202
  await exitAgent();
197
203
  });
198
- console.log(`[${cli}-yes] Started ${cli} with args: ${[cliCommand, ...cliArgs].join(" ")}`);
199
- shell.write("\x1B[1;1R");
200
204
  sflow(fromReadable(process.stdin)).map((buffer) => buffer.toString()).by({
201
205
  writable: new WritableStream({
202
206
  write: async (data) => {
@@ -209,29 +213,34 @@ async function claudeYes({
209
213
  terminalRender.write(text);
210
214
  if (process.stdin.isTTY)
211
215
  return;
212
- if (text.includes("\x1B[6n"))
216
+ if (!text.includes("\x1B[6n"))
213
217
  return;
214
218
  const { col, row } = terminalRender.getCursorPosition();
215
219
  console.log(`[${cli}-yes] Responding cursor position: row=${row}, col=${col}`);
216
220
  shell.write(`\x1B[${row};${col}R`);
217
- }).forkTo((e) => e.map((e2) => removeControlCharacters(e2)).map((e2) => e2.replaceAll("\r", "")).forEach((e2) => appendFile("io.log", "output|" + JSON.stringify(e2) + `
218
- `)).forEach(async (e2, i) => {
221
+ }).forkTo((e) => e.map((e2) => removeControlCharacters(e2)).map((e2) => e2.replaceAll("\r", "")).lines({ EOL: "NONE" }).forEach((e2) => yesLog`output|${e2}`).forEach(async (e2, i) => {
219
222
  const conf = CLI_CONFIGURES[cli] || null;
220
223
  if (!conf)
221
224
  return;
222
225
  if (conf.ready?.some((rx) => e2.match(rx))) {
226
+ await yesLog`ready |${e2}`;
223
227
  if (cli === "gemini" && i <= 80)
224
228
  return;
225
229
  stdinReady.ready();
226
230
  }
227
231
  if (conf.enter?.some((rx) => e2.match(rx))) {
232
+ await yesLog`enter |${e2}`;
228
233
  await sendEnter(300);
234
+ return;
229
235
  }
230
236
  if (conf.fatal?.some((rx) => e2.match(rx))) {
237
+ await yesLog`fatal |${e2}`;
231
238
  isFatal = true;
232
239
  await exitAgent();
233
240
  }
234
241
  }).run()).map((e) => removeControlCharactersFromStdout ? removeControlCharacters(e) : e).to(fromWritable(process.stdout)).then(() => null);
242
+ if (cli === "codex")
243
+ shell.write(`\x1B[1;1R`);
235
244
  if (prompt)
236
245
  await sendMessage(prompt);
237
246
  const exitCode = await pendingExitCode.promise;
@@ -247,11 +256,12 @@ async function claudeYes({
247
256
  const st = Date.now();
248
257
  await idleWaiter.wait(waitms);
249
258
  const et = Date.now();
250
- process.stdout.write(`\ridleWaiter.wait(${waitms}) took ${et - st}ms\r`);
259
+ await yesLog`sendEn| idleWaiter.wait(${String(waitms)}) took ${String(et - st)}ms`;
251
260
  shell.write("\r");
252
261
  }
253
262
  async function sendMessage(message) {
254
263
  await stdinReady.wait();
264
+ await yesLog`send |${message}`;
255
265
  shell.write(message);
256
266
  idleWaiter.ping();
257
267
  await sendEnter();
@@ -271,8 +281,10 @@ async function claudeYes({
271
281
  ]);
272
282
  }
273
283
  function getTerminalDimensions() {
284
+ if (!process.stdout.isTTY)
285
+ return { cols: 80, rows: 30 };
274
286
  return {
275
- cols: process.stdout.columns,
287
+ cols: Math.min(Math.max(20, process.stdout.columns), 80),
276
288
  rows: process.stdout.rows
277
289
  };
278
290
  }
@@ -338,5 +350,5 @@ var { exitCode, logs } = await claudeYes({
338
350
  });
339
351
  process.exit(exitCode ?? 1);
340
352
 
341
- //# debugId=F98366DB626CC88164756E2164756E21
353
+ //# debugId=FE903BBCCEA75D2B64756E2164756E21
342
354
  //# sourceMappingURL=cli.js.map
@@ -25,11 +25,12 @@ import { hideBin } from "yargs/helpers";
25
25
 
26
26
  // dist/index.js
27
27
  import { fromReadable, fromWritable } from "from-node-stream";
28
- import { appendFile, mkdir, writeFile } from "fs/promises";
28
+ import { appendFile, mkdir, rm, writeFile } from "fs/promises";
29
29
  import path from "path";
30
30
  import DIE from "phpdie";
31
31
  import sflow from "sflow";
32
32
  import { TerminalTextRender } from "terminal-render";
33
+ import tsaComposer from "tsa-composer";
33
34
  class IdleWaiter {
34
35
  lastActivityTime = Date.now();
35
36
  checkInterval = 100;
@@ -75,7 +76,7 @@ var CLI_CONFIGURES = {
75
76
  },
76
77
  claude: {
77
78
  install: "npm install -g @anthropic-ai/claude-code",
78
- ready: [/^> /],
79
+ ready: [/\? for shortcuts/],
79
80
  enter: [/❯ 1. Yes/, /❯ 1. Dark mode✔/, /Press Enter to continue…/],
80
81
  fatal: [
81
82
  /No conversation found to continue/,
@@ -92,8 +93,8 @@ var CLI_CONFIGURES = {
92
93
  install: "npm install -g @openai/codex-cli",
93
94
  ready: [/⏎ send/],
94
95
  enter: [
95
- /\b▌ \> 1\. Approve and run now/,
96
- /\b\> 1\. Yes, allow Codex to work in this folder/
96
+ /> 1. Yes, allow Codex to work in this folder/,
97
+ /▌ > 1. Approve and run now/
97
98
  ],
98
99
  fatal: [/Error: The cursor position could not be read within/],
99
100
  ensureArgs: (args) => {
@@ -128,6 +129,11 @@ async function claudeYes({
128
129
  removeControlCharactersFromStdout = false,
129
130
  verbose = false
130
131
  } = {}) {
132
+ await rm("agent-yes.log").catch(() => null);
133
+ const yesLog = tsaComposer()(async function yesLog(msg) {
134
+ await appendFile("agent-yes.log", `${msg}
135
+ `).catch(() => null);
136
+ });
131
137
  const continueArgs = {
132
138
  codex: "resume --last".split(" "),
133
139
  claude: "--continue".split(" "),
@@ -195,8 +201,6 @@ async function claudeYes({
195
201
  console.log("[${cli}-yes] ${cli} is idle, exiting...");
196
202
  await exitAgent();
197
203
  });
198
- console.log(`[${cli}-yes] Started ${cli} with args: ${[cliCommand, ...cliArgs].join(" ")}`);
199
- shell.write("\x1B[1;1R");
200
204
  sflow(fromReadable(process.stdin)).map((buffer) => buffer.toString()).by({
201
205
  writable: new WritableStream({
202
206
  write: async (data) => {
@@ -209,29 +213,34 @@ async function claudeYes({
209
213
  terminalRender.write(text);
210
214
  if (process.stdin.isTTY)
211
215
  return;
212
- if (text.includes("\x1B[6n"))
216
+ if (!text.includes("\x1B[6n"))
213
217
  return;
214
218
  const { col, row } = terminalRender.getCursorPosition();
215
219
  console.log(`[${cli}-yes] Responding cursor position: row=${row}, col=${col}`);
216
220
  shell.write(`\x1B[${row};${col}R`);
217
- }).forkTo((e) => e.map((e2) => removeControlCharacters(e2)).map((e2) => e2.replaceAll("\r", "")).forEach((e2) => appendFile("io.log", "output|" + JSON.stringify(e2) + `
218
- `)).forEach(async (e2, i) => {
221
+ }).forkTo((e) => e.map((e2) => removeControlCharacters(e2)).map((e2) => e2.replaceAll("\r", "")).lines({ EOL: "NONE" }).forEach((e2) => yesLog`output|${e2}`).forEach(async (e2, i) => {
219
222
  const conf = CLI_CONFIGURES[cli] || null;
220
223
  if (!conf)
221
224
  return;
222
225
  if (conf.ready?.some((rx) => e2.match(rx))) {
226
+ await yesLog`ready |${e2}`;
223
227
  if (cli === "gemini" && i <= 80)
224
228
  return;
225
229
  stdinReady.ready();
226
230
  }
227
231
  if (conf.enter?.some((rx) => e2.match(rx))) {
232
+ await yesLog`enter |${e2}`;
228
233
  await sendEnter(300);
234
+ return;
229
235
  }
230
236
  if (conf.fatal?.some((rx) => e2.match(rx))) {
237
+ await yesLog`fatal |${e2}`;
231
238
  isFatal = true;
232
239
  await exitAgent();
233
240
  }
234
241
  }).run()).map((e) => removeControlCharactersFromStdout ? removeControlCharacters(e) : e).to(fromWritable(process.stdout)).then(() => null);
242
+ if (cli === "codex")
243
+ shell.write(`\x1B[1;1R`);
235
244
  if (prompt)
236
245
  await sendMessage(prompt);
237
246
  const exitCode = await pendingExitCode.promise;
@@ -247,11 +256,12 @@ async function claudeYes({
247
256
  const st = Date.now();
248
257
  await idleWaiter.wait(waitms);
249
258
  const et = Date.now();
250
- process.stdout.write(`\ridleWaiter.wait(${waitms}) took ${et - st}ms\r`);
259
+ await yesLog`sendEn| idleWaiter.wait(${String(waitms)}) took ${String(et - st)}ms`;
251
260
  shell.write("\r");
252
261
  }
253
262
  async function sendMessage(message) {
254
263
  await stdinReady.wait();
264
+ await yesLog`send |${message}`;
255
265
  shell.write(message);
256
266
  idleWaiter.ping();
257
267
  await sendEnter();
@@ -271,8 +281,10 @@ async function claudeYes({
271
281
  ]);
272
282
  }
273
283
  function getTerminalDimensions() {
284
+ if (!process.stdout.isTTY)
285
+ return { cols: 80, rows: 30 };
274
286
  return {
275
- cols: process.stdout.columns,
287
+ cols: Math.min(Math.max(20, process.stdout.columns), 80),
276
288
  rows: process.stdout.rows
277
289
  };
278
290
  }
@@ -338,5 +350,5 @@ var { exitCode, logs } = await claudeYes({
338
350
  });
339
351
  process.exit(exitCode ?? 1);
340
352
 
341
- //# debugId=F98366DB626CC88164756E2164756E21
353
+ //# debugId=FE903BBCCEA75D2B64756E2164756E21
342
354
  //# sourceMappingURL=cli.js.map