agent-yes 1.276.0 → 1.278.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.
Files changed (77) hide show
  1. package/README.md +10 -9
  2. package/agent-yes.config.schema.json +4 -1
  3. package/default.config.yaml +49 -0
  4. package/dist/{SUPPORTED_CLIS-G5YhpzKV.js → SUPPORTED_CLIS-CsdJ9ioV.js} +2 -2
  5. package/dist/{SUPPORTED_CLIS-D-hylNcp.js → SUPPORTED_CLIS-VhMjMwUF.js} +3 -3
  6. package/dist/{agentShare-BmQZ96CJ.js → agentShare-CrrK5XS6.js} +3 -3
  7. package/dist/{callback-BEgUEMY3.js → callback-BWzWDxmW.js} +3 -3
  8. package/dist/{callback-B2oH6mCo.js → callback-vLC1gkta.js} +3 -3
  9. package/dist/cli.js +11 -11
  10. package/dist/cmdDsh-BySPA9hP.js +45 -0
  11. package/dist/{cmdPs-E6fcHruY.js → cmdPs-CkAYEpir.js} +3 -3
  12. package/dist/{cwdConflictWarn-CqN5pJ-7.js → cwdConflictWarn-DIPD6HH5.js} +1 -1
  13. package/dist/{cwdPassthroughHint-DxdqgwEN.js → cwdPassthroughHint-C0tfZlgZ.js} +1 -1
  14. package/dist/dsh-legacy-yes.js +10 -0
  15. package/dist/dsh-tui-yes.js +10 -0
  16. package/dist/dsh-yes.js +10 -0
  17. package/dist/{expose-DTxYWQeW.js → expose-Ds9aUFsq.js} +1 -1
  18. package/dist/{forkNested-CZAvQj0y.js → forkNested-Dt5XP8ZH.js} +1 -1
  19. package/dist/{hist-QkZZBp-y.js → hist-DSYaJEd3.js} +1 -1
  20. package/dist/index.js +2 -2
  21. package/dist/{initMsg-DAwRS89d.js → initMsg-CeF4QNOM.js} +1 -1
  22. package/dist/{initMsg-C8ISz_C7.js → initMsg-DejbYYjX.js} +1 -1
  23. package/dist/{nodeRuntime-C_LtZrpR.js → nodeRuntime-_zeWDISM.js} +1 -1
  24. package/dist/{notifyDaemon-D_x5ow8y.js → notifyDaemon-C2ZvTuP9.js} +3 -3
  25. package/dist/{openBrowser-B50Lhaob.js → openBrowser-BNP8xByu.js} +1 -1
  26. package/dist/{parentLink-svMgYhEi.js → parentLink-Bv8ihRcu.js} +1 -1
  27. package/dist/{parentLink-i817PzXK.js → parentLink-HWunrH1s.js} +1 -1
  28. package/dist/{parentPingLoop-DP2y906e.js → parentPingLoop-D76L9Wfz.js} +4 -4
  29. package/dist/{remotes-gAI6-nv9.js → remotes-BlHTR9ow.js} +1 -1
  30. package/dist/{remotes-Cdlaj7AP.js → remotes-b6reVXzo.js} +2 -2
  31. package/dist/{rustBinary-bXjmCsim.js → rustBinary-4cx8XQVi.js} +2 -2
  32. package/dist/{rustBinary-BwgA8XyI.js → rustBinary-seVEdbv0.js} +2 -2
  33. package/dist/{schedule-CdEUIaEV.js → schedule-Nkg4x5L_.js} +6 -6
  34. package/dist/{serve-CvLw3YZx.js → serve-DpEwtxE1.js} +26 -26
  35. package/dist/{setup-BRyFMtpv.js → setup-Cqb-C9Fc.js} +4 -4
  36. package/dist/{spawnGate-DtC_ffme.js → spawnGate-B2hA_2NQ.js} +2 -2
  37. package/dist/{spawnGate-CdewnL8m.js → spawnGate-FLwTAPW6.js} +1 -1
  38. package/dist/{subcommands-CqBONdKo.js → subcommands-CTYuwj6q.js} +2 -2
  39. package/dist/{subcommands-BtRA2slB.js → subcommands-GXYgnWc8.js} +29 -22
  40. package/dist/{systemPathLink-Df_pstm2.js → systemPathLink-Dl2gJqeg.js} +1 -1
  41. package/dist/{terminal-8jfLRLtF.js → terminal-DKkGov9E.js} +2 -2
  42. package/dist/{todoCli-Cf0EHvfy.js → todoCli-MWrejmdM.js} +1 -1
  43. package/dist/{tray-BeIs4ffu.js → tray-BhPVpP_r.js} +1 -1
  44. package/dist/{trayApp-CnJiwYjb.js → trayApp-BzQD6Yst.js} +2 -2
  45. package/dist/trayApp-DJeWk65b.js +5 -0
  46. package/dist/{ts-CEtUijwR.js → ts-Bux2wmDB.js} +5 -5
  47. package/dist/{versionChecker-CL6Dvn--.js → versionChecker-C3XTN3V7.js} +2 -2
  48. package/dist/{webrtcRemote-CIbq5Hdt.js → webrtcRemote-H9Hok0_R.js} +1 -1
  49. package/dist/{widget-DvSx4hyW.js → widget-BeVnojVJ.js} +3 -3
  50. package/dist/{workspaceConfig-DctWuxUP.js → workspaceConfig-D6QndOCz.js} +1 -1
  51. package/dist/{ws-B830G79O.js → ws-Bv3g3GgQ.js} +3 -3
  52. package/dist/{ws-XngU-GGe.js → ws-C6-Cpoy4.js} +3 -3
  53. package/lab/ui/index.html +2 -1
  54. package/lab/ui/lab/build.ts +5 -4
  55. package/lab/ui/lab/index.md +14 -14
  56. package/lab/ui/lab/posts/2026-06-15-e2ee-share-links.html +128 -132
  57. package/lab/ui/lab/posts/2026-07-22-ay-callback.html +214 -167
  58. package/lab/ui/lab/posts/2026-08-11-an-address-space-for-agents.md +9 -9
  59. package/lab/ui/lab/posts/2026-08-11-no-daemon-owns-your-agents.md +13 -13
  60. package/lab/ui/lab/posts/2026-08-11-slack-term-safe-writes.md +26 -26
  61. package/lab/ui/lab/posts/2026-08-11-the-terminal-is-the-api.md +10 -10
  62. package/lab/ui/landing.html +2 -1
  63. package/package.json +4 -1
  64. package/ts/buildRustArgs.spec.ts +3 -0
  65. package/ts/cmdDsh.spec.ts +90 -0
  66. package/ts/cmdDsh.ts +62 -0
  67. package/ts/histStore.spec.ts +8 -4
  68. package/ts/histStore.ts +2 -7
  69. package/ts/identity.spec.ts +4 -1
  70. package/ts/initMsg.spec.ts +12 -2
  71. package/ts/invokedCli.spec.ts +1 -0
  72. package/ts/postbuild.ts +11 -8
  73. package/ts/subcommands.spec.ts +33 -0
  74. package/ts/subcommands.ts +23 -0
  75. package/ts/systemPathLink.spec.ts +12 -2
  76. package/ts/systemPathLink.ts +5 -1
  77. package/dist/trayApp-CUuEodHT.js +0 -5
package/README.md CHANGED
@@ -364,15 +364,16 @@ For deploying to cloud platforms like Google Cloud Run, AWS, Azure, see [Cloud D
364
364
 
365
365
  ### Supported CLI Tools
366
366
 
367
- | Tool | CLI Name | Description | Installation/Update |
368
- | ------- | --------- | --------------------------------- | --------------------------------------------------- |
369
- | Claude | `claude` | Anthropic's Claude Code (default) | `npm install -g @anthropic-ai/claude-code@latest` |
370
- | Codex | `codex` | OpenAI's Codex CLI | `npm install -g @openai/codex-cli@latest` |
371
- | Copilot | `copilot` | GitHub Copilot CLI | `npm install -g @github/copilot@latest` |
372
- | Cursor | `cursor` | Cursor agent CLI | See https://cursor.com/ja/docs/cli/installation |
373
- | Grok | `grok` | Vibe Kit's Grok CLI | `npm install -g @vibe-kit/grok-cli@latest` |
374
- | Qwen | `qwen` | Alibaba's Qwen Code CLI | `npm install -g @qwen-code/qwen-code@latest` |
375
- | Auggie | `auggie` | Augment Code's Auggie CLI | `npm install -g @augmentcode-inc/auggie-cli@latest` |
367
+ | Tool | CLI Name | Description | Installation/Update |
368
+ | ---------------- | ------------ | ---------------------------------- | --------------------------------------------------- |
369
+ | Claude | `claude` | Anthropic's Claude Code (default) | `npm install -g @anthropic-ai/claude-code@latest` |
370
+ | Codex | `codex` | OpenAI's Codex CLI | `npm install -g @openai/codex-cli@latest` |
371
+ | Copilot | `copilot` | GitHub Copilot CLI | `npm install -g @github/copilot@latest` |
372
+ | Cursor | `cursor` | Cursor agent CLI | See https://cursor.com/ja/docs/cli/installation |
373
+ | Grok | `grok` | Vibe Kit's Grok CLI | `npm install -g @vibe-kit/grok-cli@latest` |
374
+ | Qwen | `qwen` | Alibaba's Qwen Code CLI | `npm install -g @qwen-code/qwen-code@latest` |
375
+ | Auggie | `auggie` | Augment Code's Auggie CLI | `npm install -g @augmentcode-inc/auggie-cli@latest` |
376
+ | DeepSeek Harness | `dsh-legacy` | DeepSeek Harness (interactive TUI) | `npm install -g @deepseek-ai/dsh@latest` |
376
377
 
377
378
  The tool will:
378
379
 
@@ -32,7 +32,10 @@
32
32
  "qwen": { "$ref": "#/definitions/AgentCliConfig" },
33
33
  "auggie": { "$ref": "#/definitions/AgentCliConfig" },
34
34
  "amp": { "$ref": "#/definitions/AgentCliConfig" },
35
- "opencode": { "$ref": "#/definitions/AgentCliConfig" }
35
+ "opencode": { "$ref": "#/definitions/AgentCliConfig" },
36
+ "dsh": { "$ref": "#/definitions/AgentCliConfig" },
37
+ "dsh-tui": { "$ref": "#/definitions/AgentCliConfig" },
38
+ "dsh-legacy": { "$ref": "#/definitions/AgentCliConfig" }
36
39
  }
37
40
  }
38
41
  },
@@ -421,6 +421,55 @@ clis:
421
421
  flags: m
422
422
  ready: []
423
423
 
424
+ # DeepSeek Harness (dsh-legacy) — the original DeepSeek Harness CLI
425
+ # (https://github.com/deepseek-ai/deepseek-harness). `dsh --profile tui`
426
+ # boots a persistent interactive session: the ready prompt is `❯ `, tool
427
+ # approval is a numbered `1. yes / 2. no` menu auto-answered with `1`, and the
428
+ # initial task rides as the positional arg. Reachable as `ay dsh-legacy …`.
429
+ dsh-legacy:
430
+ promptArg: last-arg
431
+ defaultArgs:
432
+ - --profile
433
+ - tui
434
+ install:
435
+ npm: "npm install -g @deepseek-ai/dsh@latest"
436
+ help: https://github.com/deepseek-ai/deepseek-harness
437
+ ready:
438
+ - "❯ "
439
+ typingRespond:
440
+ "1\n":
441
+ - '1\. yes'
442
+ working: []
443
+ enter: []
444
+ fatal: []
445
+
446
+ # DeepSeek Harness TUI — the `❯` prompt line driveable as a plain interactive
447
+ # agent (same shell pattern as `bash`: no spinner/menu markers, `promptArg:
448
+ # typed` sends the initial command by typing it into the session once ready).
449
+ dsh:
450
+ binary: dsh-tui
451
+ promptArg: typed
452
+ ready:
453
+ - pattern: "❯"
454
+ flags: m
455
+ working: []
456
+ enter: []
457
+ fatal: []
458
+ exitCommands:
459
+ - exit
460
+ # Alias — `ay dsh-tui` launches the dsh-tui binary (same drive pattern as dsh).
461
+ dsh-tui:
462
+ binary: dsh-tui
463
+ promptArg: typed
464
+ ready:
465
+ - pattern: "❯"
466
+ flags: m
467
+ working: []
468
+ enter: []
469
+ fatal: []
470
+ exitCommands:
471
+ - exit
472
+
424
473
  # Bare interactive shells. Unlike the agent CLIs above, these aren't AI tools
425
474
  # — they're a plain login shell you can drive from the console and launch
426
475
  # other agents inside (e.g. `ay bash 'claude'`). `promptArg: typed` means any
@@ -1,8 +1,8 @@
1
- import { t as CLIS_CONFIG } from "./ts-CEtUijwR.js";
1
+ import { t as CLIS_CONFIG } from "./ts-Bux2wmDB.js";
2
2
 
3
3
  //#region ts/SUPPORTED_CLIS.ts
4
4
  const SUPPORTED_CLIS = Object.keys(CLIS_CONFIG);
5
5
 
6
6
  //#endregion
7
7
  export { SUPPORTED_CLIS as t };
8
- //# sourceMappingURL=SUPPORTED_CLIS-G5YhpzKV.js.map
8
+ //# sourceMappingURL=SUPPORTED_CLIS-CsdJ9ioV.js.map
@@ -1,12 +1,12 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-CL6Dvn--.js";
3
- import "./ts-CEtUijwR.js";
2
+ import "./versionChecker-C3XTN3V7.js";
3
+ import "./ts-Bux2wmDB.js";
4
4
  import "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-DoaKEUkO.js";
7
7
  import "./pidStore-B73xnAeT.js";
8
8
  import "./messageLog-DdjBNqgt.js";
9
9
  import "./todoStore-DF6vxHgV.js";
10
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-G5YhpzKV.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CsdJ9ioV.js";
11
11
 
12
12
  export { SUPPORTED_CLIS };
@@ -3,10 +3,10 @@ import "./globalPidIndex-DoaKEUkO.js";
3
3
  import "./messageLog-DdjBNqgt.js";
4
4
  import "./e2e-z1xpwSAg.js";
5
5
  import "./configShared-DKTgiz7K.js";
6
- import { z as resolveOne } from "./subcommands-BtRA2slB.js";
6
+ import { z as resolveOne } from "./subcommands-GXYgnWc8.js";
7
7
  import "./notifyStore-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
- import "./remotes-Cdlaj7AP.js";
9
+ import "./remotes-b6reVXzo.js";
10
10
  import { a as startShare } from "./share-DTlaFn6s.js";
11
11
 
12
12
  //#region ts/agentShare.ts
@@ -230,4 +230,4 @@ function transformEvent(rawEvent, agentId, forwarded) {
230
230
 
231
231
  //#endregion
232
232
  export { createScopedShare, listShares, revokeAllShares, revokeShare };
233
- //# sourceMappingURL=agentShare-BmQZ96CJ.js.map
233
+ //# sourceMappingURL=agentShare-CrrK5XS6.js.map
@@ -3,11 +3,11 @@ import "./globalPidIndex-DoaKEUkO.js";
3
3
  import "./messageLog-DdjBNqgt.js";
4
4
  import "./e2e-z1xpwSAg.js";
5
5
  import "./configShared-DKTgiz7K.js";
6
- import "./subcommands-BtRA2slB.js";
6
+ import "./subcommands-GXYgnWc8.js";
7
7
  import "./notifyStore-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
- import "./remotes-Cdlaj7AP.js";
9
+ import "./remotes-b6reVXzo.js";
10
10
  import "./callbackCore-Bl2gGcxg.js";
11
- import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-B2oH6mCo.js";
11
+ import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-vLC1gkta.js";
12
12
 
13
13
  export { cmdCallback };
@@ -1,5 +1,5 @@
1
1
  import { t as agentYesHome } from "./agentYesHome-BNtn19J4.js";
2
- import { z as resolveOne } from "./subcommands-BtRA2slB.js";
2
+ import { z as resolveOne } from "./subcommands-GXYgnWc8.js";
3
3
  import { a as mintCapability, o as parseExpires } from "./callbackCore-Bl2gGcxg.js";
4
4
  import { randomBytes } from "node:crypto";
5
5
  import { chmodSync, readFileSync, renameSync, writeFileSync } from "node:fs";
@@ -72,7 +72,7 @@ async function resolveBase(flag) {
72
72
  if (flag) return flag;
73
73
  if (process.env.AGENT_YES_CALLBACK_BASE) return process.env.AGENT_YES_CALLBACK_BASE;
74
74
  try {
75
- const { resolveLocalServeUrl } = await import("./serve-CvLw3YZx.js");
75
+ const { resolveLocalServeUrl } = await import("./serve-DpEwtxE1.js");
76
76
  const url = await resolveLocalServeUrl();
77
77
  if (url) return url;
78
78
  } catch {}
@@ -187,4 +187,4 @@ async function cmdCallback(rest) {
187
187
 
188
188
  //#endregion
189
189
  export { loadOrCreateCallbackSecret as i, isCallbackRevoked as n, loadCallbackSecretReadOnly as r, cmdCallback as t };
190
- //# sourceMappingURL=callback-B2oH6mCo.js.map
190
+ //# sourceMappingURL=callback-vLC1gkta.js.map
package/dist/cli.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env bun
2
2
  import { t as invokedCliName } from "./invokedCli-zdFbz1ST.js";
3
3
  import { n as logger } from "./logger-CDIsZ-Pp.js";
4
- import { a as versionString, r as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-CL6Dvn--.js";
5
- import { l as getRustBinary } from "./rustBinary-BwgA8XyI.js";
4
+ import { a as versionString, r as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-C3XTN3V7.js";
5
+ import { l as getRustBinary } from "./rustBinary-seVEdbv0.js";
6
6
  import { argv } from "process";
7
7
  import { spawn } from "child_process";
8
8
  import ms from "ms";
@@ -295,7 +295,7 @@ function buildRustArgs(argv, cliFromScript, supportedClis) {
295
295
  const rawArg = process.argv[2];
296
296
  const managerCommands = !invokedCliName(process.argv);
297
297
  const isHelpFlag = rawArg === "-h" || rawArg === "--help";
298
- const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken, isBareManagerInvocation } = await import("./subcommands-CqBONdKo.js");
298
+ const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken, isBareManagerInvocation } = await import("./subcommands-CTYuwj6q.js");
299
299
  if (isHelpFlag && process.argv.length === 3) {
300
300
  await cmdHelp(managerCommands);
301
301
  process.exit(0);
@@ -309,7 +309,7 @@ function buildRustArgs(argv, cliFromScript, supportedClis) {
309
309
  process.exit(code ?? 0);
310
310
  }
311
311
  {
312
- const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-D-hylNcp.js");
312
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-VhMjMwUF.js");
313
313
  if (isUnknownManagerToken(rawArg, managerCommands, SUPPORTED_CLIS)) {
314
314
  process.stderr.write(`ay: unknown subcommand or CLI '${rawArg}'.\n See 'ay help' for subcommands. To run an agent, name a CLI:\n 'ay <cli> …' (e.g. 'ay claude …') or 'ay --cli <cli> …'.\n`);
315
315
  process.exit(1);
@@ -317,7 +317,7 @@ function buildRustArgs(argv, cliFromScript, supportedClis) {
317
317
  }
318
318
  }
319
319
  {
320
- const { detectCwdPassthrough, SUPPRESS_CWD_WARN_ENV } = await import("./cwdPassthroughHint-DxdqgwEN.js");
320
+ const { detectCwdPassthrough, SUPPRESS_CWD_WARN_ENV } = await import("./cwdPassthroughHint-C0tfZlgZ.js");
321
321
  const dep = detectCwdPassthrough(process.argv);
322
322
  if (dep) {
323
323
  console.warn(dep.message);
@@ -328,16 +328,16 @@ await checkAndAutoUpdate();
328
328
  logger.info(versionString());
329
329
  const config = parseCliArgs(process.argv);
330
330
  if (config.tray) {
331
- const { startTray } = await import("./tray-BeIs4ffu.js");
331
+ const { startTray } = await import("./tray-BhPVpP_r.js");
332
332
  await startTray();
333
333
  await new Promise(() => {});
334
334
  }
335
335
  {
336
- const { ensureTray } = await import("./tray-BeIs4ffu.js");
336
+ const { ensureTray } = await import("./tray-BhPVpP_r.js");
337
337
  ensureTray();
338
338
  }
339
339
  if (!config.showVersion && !config.appendPrompt && !config.tray) {
340
- const { waitForSpawnCapacity } = await import("./spawnGate-CdewnL8m.js");
340
+ const { waitForSpawnCapacity } = await import("./spawnGate-FLwTAPW6.js");
341
341
  await waitForSpawnCapacity({
342
342
  onWait: (reason, waitedMs) => {
343
343
  if (config.verbose || waitedMs === 0) console.error(`[agent-yes] spawn gate: ${reason} — waiting…`);
@@ -346,7 +346,7 @@ if (!config.showVersion && !config.appendPrompt && !config.tray) {
346
346
  });
347
347
  }
348
348
  if (!config.showVersion && !config.appendPrompt && !config.tray) {
349
- const { warnIfCwdOccupied } = await import("./cwdConflictWarn-CqN5pJ-7.js");
349
+ const { warnIfCwdOccupied } = await import("./cwdConflictWarn-DIPD6HH5.js");
350
350
  await warnIfCwdOccupied(process.argv);
351
351
  }
352
352
  if (config.useRust) {
@@ -360,14 +360,14 @@ if (config.useRust) {
360
360
  }
361
361
  }
362
362
  if (rustBinary) {
363
- const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-D-hylNcp.js");
363
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-VhMjMwUF.js");
364
364
  const rustArgs = buildRustArgs(process.argv, config.cli, SUPPORTED_CLIS);
365
365
  if (config.verbose) {
366
366
  console.log(`[rust] Using binary: ${rustBinary}`);
367
367
  console.log(`[rust] Args: ${rustArgs.join(" ")}`);
368
368
  }
369
369
  const attach = config.attach || process.env.AGENT_YES_ATTACH === "1";
370
- const { shouldForkNested, buildSpawnTutorial, waitForRegistration, confirmAgentStarted, predictedLogPath } = await import("./forkNested-CZAvQj0y.js");
370
+ const { shouldForkNested, buildSpawnTutorial, waitForRegistration, confirmAgentStarted, predictedLogPath } = await import("./forkNested-Dt5XP8ZH.js");
371
371
  if (shouldForkNested({
372
372
  isTTY: Boolean(process.stdout.isTTY),
373
373
  ayPid: process.env.AGENT_YES_PID,
@@ -0,0 +1,45 @@
1
+ //#region ts/cmdDsh.ts
2
+ /**
3
+ * `ay dsh-legacy` subcommand — launch the DeepSeek Harness terminal client
4
+ * (dsh-tui), acting like `bunx dsh-tui` (or bare `dsh-tui` when already
5
+ * installed). This is a thin exec of the upstream TUI: agent-yes does not wrap
6
+ * or capture it, it just hands the terminal over, so `ay dsh-legacy <alpha>`
7
+ * runs dsh-tui verbatim. Passing `--help`/`-h` is not special-cased on purpose:
8
+ * the args are forwarded and dsh-tui prints its own help, so agent-yes never
9
+ * has a second copy of it to keep in sync.
10
+ *
11
+ * NOTE: `dsh-legacy` as a SUBCOMMAND shadows the DeepSeek *agent* CLI name in
12
+ * the manager entry. The canonical `dsh` agent CLI is now the minimal config
13
+ * entry (see default.config.yaml); to spawn the legacy DeepSeek agent CLI, use
14
+ * `ay --cli dsh-legacy`.
15
+ */
16
+ /** The upstream terminal client npm package/bin name. */
17
+ const DSH_TUI_BIN = "dsh-tui";
18
+ const defaultSpawn = (cmd, opts) => Bun.spawn(cmd, opts);
19
+ /**
20
+ * Resolve the argv prefix that launches dsh-tui: the bare bin when it is
21
+ * already on PATH (fast, deterministic), else `bunx` (which fetches/uses the
22
+ * cached package — the exact behavior of `bunx dsh-tui`).
23
+ */
24
+ async function dshTuiPrefix(spawn = defaultSpawn) {
25
+ try {
26
+ if (await spawn([DSH_TUI_BIN, "--version"], {
27
+ stdin: "ignore",
28
+ stdout: "ignore",
29
+ stderr: "ignore"
30
+ }).exited === 0) return [DSH_TUI_BIN];
31
+ } catch {}
32
+ return ["bunx", DSH_TUI_BIN];
33
+ }
34
+ /** Run `dsh-tui` in the foreground with the user's terminal (forward args). */
35
+ async function cmdDsh(rest, spawn = defaultSpawn) {
36
+ return await spawn([...await dshTuiPrefix(spawn), ...rest], {
37
+ stdin: "inherit",
38
+ stdout: "inherit",
39
+ stderr: "inherit"
40
+ }).exited ?? 0;
41
+ }
42
+
43
+ //#endregion
44
+ export { cmdDsh };
45
+ //# sourceMappingURL=cmdDsh-BySPA9hP.js.map
@@ -3,10 +3,10 @@ import "./globalPidIndex-DoaKEUkO.js";
3
3
  import "./messageLog-DdjBNqgt.js";
4
4
  import "./e2e-z1xpwSAg.js";
5
5
  import "./configShared-DKTgiz7K.js";
6
- import { $ as buildAgentForest, D as listRecords, et as flattenForest, u as deriveLiveState } from "./subcommands-BtRA2slB.js";
6
+ import { $ as buildAgentForest, D as listRecords, et as flattenForest, u as deriveLiveState } from "./subcommands-GXYgnWc8.js";
7
7
  import "./notifyStore-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
- import "./remotes-Cdlaj7AP.js";
9
+ import "./remotes-b6reVXzo.js";
10
10
  import yargs from "yargs";
11
11
  import { execFile } from "node:child_process";
12
12
  import { readFileSync } from "node:fs";
@@ -574,4 +574,4 @@ function readPpidSync(pid) {
574
574
 
575
575
  //#endregion
576
576
  export { cmdPs };
577
- //# sourceMappingURL=cmdPs-E6fcHruY.js.map
577
+ //# sourceMappingURL=cmdPs-CkAYEpir.js.map
@@ -61,4 +61,4 @@ async function warnIfCwdOccupied(rawArgv) {
61
61
 
62
62
  //#endregion
63
63
  export { warnIfCwdOccupied };
64
- //# sourceMappingURL=cwdConflictWarn-CqN5pJ-7.js.map
64
+ //# sourceMappingURL=cwdConflictWarn-DIPD6HH5.js.map
@@ -85,4 +85,4 @@ function detectCwdPassthrough(argv) {
85
85
 
86
86
  //#endregion
87
87
  export { SUPPRESS_CWD_WARN_ENV, detectCwdPassthrough };
88
- //# sourceMappingURL=cwdPassthroughHint-DxdqgwEN.js.map
88
+ //# sourceMappingURL=cwdPassthroughHint-C0tfZlgZ.js.map
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bun
2
+ import { existsSync } from "node:fs";
3
+ import { join, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ const root = join(dirname(fileURLToPath(import.meta.url)), "..");
6
+ if (typeof Bun !== "undefined" && existsSync(join(root, ".git"))) {
7
+ await import("../ts/cli.ts");
8
+ } else {
9
+ await import("./cli.js");
10
+ }
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bun
2
+ import { existsSync } from "node:fs";
3
+ import { join, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ const root = join(dirname(fileURLToPath(import.meta.url)), "..");
6
+ if (typeof Bun !== "undefined" && existsSync(join(root, ".git"))) {
7
+ await import("../ts/cli.ts");
8
+ } else {
9
+ await import("./cli.js");
10
+ }
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bun
2
+ import { existsSync } from "node:fs";
3
+ import { join, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ const root = join(dirname(fileURLToPath(import.meta.url)), "..");
6
+ if (typeof Bun !== "undefined" && existsSync(join(root, ".git"))) {
7
+ await import("../ts/cli.ts");
8
+ } else {
9
+ await import("./cli.js");
10
+ }
@@ -549,4 +549,4 @@ async function cmdExpose(args) {
549
549
 
550
550
  //#endregion
551
551
  export { cmdExpose, ensureExposure, listExposures, stopExposure };
552
- //# sourceMappingURL=expose-DTxYWQeW.js.map
552
+ //# sourceMappingURL=expose-Ds9aUFsq.js.map
@@ -141,4 +141,4 @@ async function confirmAgentStarted(pid, graceMs = 1500, aborted) {
141
141
 
142
142
  //#endregion
143
143
  export { buildSpawnTutorial, confirmAgentStarted, predictedLogPath, shouldForkNested, waitForRegistration };
144
- //# sourceMappingURL=forkNested-CZAvQj0y.js.map
144
+ //# sourceMappingURL=forkNested-Dt5XP8ZH.js.map
@@ -439,4 +439,4 @@ async function cmdHist(rest) {
439
439
 
440
440
  //#endregion
441
441
  export { cmdHist };
442
- //# sourceMappingURL=hist-QkZZBp-y.js.map
442
+ //# sourceMappingURL=hist-DSYaJEd3.js.map
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-CL6Dvn--.js";
3
- import { a as hasTodoStore, i as answerAsk, l as AgentContext, n as agentYes, o as listAsks, r as config, s as listAsksForProject, t as CLIS_CONFIG } from "./ts-CEtUijwR.js";
2
+ import "./versionChecker-C3XTN3V7.js";
3
+ import { a as hasTodoStore, i as answerAsk, l as AgentContext, n as agentYes, o as listAsks, r as config, s as listAsksForProject, t as CLIS_CONFIG } from "./ts-Bux2wmDB.js";
4
4
  import { a as renderTree, c as describeBlock, i as renderDigest, l as monitorHint, o as unblockedTasks, r as openBlockers, t as reconcileTodos, u as removeControlCharacters } from "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-DoaKEUkO.js";
@@ -1,3 +1,3 @@
1
- import { n as replyTargetOf, r as shortenHome, t as buildInitMsg } from "./initMsg-C8ISz_C7.js";
1
+ import { n as replyTargetOf, r as shortenHome, t as buildInitMsg } from "./initMsg-DejbYYjX.js";
2
2
 
3
3
  export { buildInitMsg };
@@ -86,4 +86,4 @@ function buildInitMsg(prompt, spawner, nonce, identity) {
86
86
 
87
87
  //#endregion
88
88
  export { replyTargetOf as n, shortenHome as r, buildInitMsg as t };
89
- //# sourceMappingURL=initMsg-C8ISz_C7.js.map
89
+ //# sourceMappingURL=initMsg-DejbYYjX.js.map
@@ -53,4 +53,4 @@ async function ensureNodeRuntime(which = Bun.which) {
53
53
 
54
54
  //#endregion
55
55
  export { liveEnv as n, ensureNodeRuntime as t };
56
- //# sourceMappingURL=nodeRuntime-C_LtZrpR.js.map
56
+ //# sourceMappingURL=nodeRuntime-_zeWDISM.js.map
@@ -3,10 +3,10 @@ import "./globalPidIndex-DoaKEUkO.js";
3
3
  import "./messageLog-DdjBNqgt.js";
4
4
  import "./e2e-z1xpwSAg.js";
5
5
  import "./configShared-DKTgiz7K.js";
6
- import { D as listRecords, I as renderLogTailLines, b as isPidAlive, u as deriveLiveState } from "./subcommands-BtRA2slB.js";
6
+ import { D as listRecords, I as renderLogTailLines, b as isPidAlive, u as deriveLiveState } from "./subcommands-GXYgnWc8.js";
7
7
  import { f as readInbox, g as daemonLockOwnerPath, h as daemonLockDir, i as gcInboxes, l as listInboxParents, m as shouldStealLock, n as appendEvent, s as hostId, u as liveWatchers, x as notifyDir } from "./notifyStore-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
- import "./remotes-Cdlaj7AP.js";
9
+ import "./remotes-b6reVXzo.js";
10
10
  import { mkdir, readFile, rename, rm, stat, writeFile } from "fs/promises";
11
11
  import { randomUUID } from "node:crypto";
12
12
  import { execFile, execFileSync } from "node:child_process";
@@ -863,4 +863,4 @@ async function ensureDaemon() {
863
863
 
864
864
  //#endregion
865
865
  export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
866
- //# sourceMappingURL=notifyDaemon-D_x5ow8y.js.map
866
+ //# sourceMappingURL=notifyDaemon-C2ZvTuP9.js.map
@@ -68,4 +68,4 @@ async function offerOpenInBrowser(url, prompt = "Open in browser now? [Y/n] ") {
68
68
 
69
69
  //#endregion
70
70
  export { offerOpenInBrowser };
71
- //# sourceMappingURL=openBrowser-B50Lhaob.js.map
71
+ //# sourceMappingURL=openBrowser-BNP8xByu.js.map
@@ -50,4 +50,4 @@ function spawnerFromRecords(records, parentPid) {
50
50
 
51
51
  //#endregion
52
52
  export { spawnerFromRecords as n, resolveSpawner as t };
53
- //# sourceMappingURL=parentLink-svMgYhEi.js.map
53
+ //# sourceMappingURL=parentLink-Bv8ihRcu.js.map
@@ -1,5 +1,5 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
2
  import "./globalPidIndex-DoaKEUkO.js";
3
- import { n as spawnerFromRecords, t as resolveSpawner } from "./parentLink-svMgYhEi.js";
3
+ import { n as spawnerFromRecords, t as resolveSpawner } from "./parentLink-Bv8ihRcu.js";
4
4
 
5
5
  export { resolveSpawner };
@@ -1,8 +1,8 @@
1
1
  import { n as logger } from "./logger-CDIsZ-Pp.js";
2
2
  import "./globalPidIndex-DoaKEUkO.js";
3
3
  import { t as classifyNeedsInput } from "./needsInput-BHopZGM8.js";
4
- import { n as replyTargetOf, r as shortenHome } from "./initMsg-C8ISz_C7.js";
5
- import { t as resolveSpawner } from "./parentLink-svMgYhEi.js";
4
+ import { n as replyTargetOf, r as shortenHome } from "./initMsg-DejbYYjX.js";
5
+ import { t as resolveSpawner } from "./parentLink-Bv8ihRcu.js";
6
6
  import { spawn } from "node:child_process";
7
7
 
8
8
  //#region ts/parentPing.ts
@@ -338,7 +338,7 @@ async function isParentWatching(parentWrapperPid, parentAgentPid, selfAgentPid,
338
338
  logger.debug("[parent-ping] watcher lookup failed:", error);
339
339
  }
340
340
  try {
341
- const { lastReadAt, READ_WINDOW_MS } = await import("./subcommands-CqBONdKo.js");
341
+ const { lastReadAt, READ_WINDOW_MS } = await import("./subcommands-CTYuwj6q.js");
342
342
  const last = await lastReadAt(`agent:${parentAgentPid}`, selfAgentPid);
343
343
  if (last !== null && now - last <= READ_WINDOW_MS) return true;
344
344
  } catch (error) {
@@ -466,4 +466,4 @@ function startParentPingLoop(opts) {
466
466
 
467
467
  //#endregion
468
468
  export { startParentPingLoop };
469
- //# sourceMappingURL=parentPingLoop-DP2y906e.js.map
469
+ //# sourceMappingURL=parentPingLoop-D76L9Wfz.js.map
@@ -1,5 +1,5 @@
1
1
  import "./e2e-z1xpwSAg.js";
2
2
  import "./webrtcLink-DLaJfTcB.js";
3
- import { a as resolveRemoteSpec, i as readRemotes, n as deleteRemoteAlias, o as writeRemoteAlias, r as parseDirectRemoteSpec, t as cmdRemote } from "./remotes-Cdlaj7AP.js";
3
+ import { a as resolveRemoteSpec, i as readRemotes, n as deleteRemoteAlias, o as writeRemoteAlias, r as parseDirectRemoteSpec, t as cmdRemote } from "./remotes-b6reVXzo.js";
4
4
 
5
5
  export { cmdRemote };
@@ -93,7 +93,7 @@ async function resolveRemoteSpec(spec) {
93
93
  * The bridge lives for the rest of the process (torn down on `process.exit`).
94
94
  */
95
95
  async function resolveWebrtc(link, keyword, label) {
96
- const { startWebrtcBridge } = await import("./webrtcRemote-CIbq5Hdt.js");
96
+ const { startWebrtcBridge } = await import("./webrtcRemote-H9Hok0_R.js");
97
97
  const bridge = await startWebrtcBridge(link);
98
98
  return {
99
99
  url: bridge.baseUrl,
@@ -181,4 +181,4 @@ async function cmdRemote(rest) {
181
181
 
182
182
  //#endregion
183
183
  export { resolveRemoteSpec as a, readRemotes as i, deleteRemoteAlias as n, writeRemoteAlias as o, parseDirectRemoteSpec as r, cmdRemote as t };
184
- //# sourceMappingURL=remotes-Cdlaj7AP.js.map
184
+ //# sourceMappingURL=remotes-b6reVXzo.js.map
@@ -1,4 +1,4 @@
1
- import "./versionChecker-CL6Dvn--.js";
2
- import { a as gcOldBinaryDirs, c as getDownloadUrl, i as findTrayLauncher, l as getRustBinary, n as findRustBinary, o as getBinDir, r as findSpawnHiddenLauncher, s as getBinaryName, t as downloadBinary } from "./rustBinary-BwgA8XyI.js";
1
+ import "./versionChecker-C3XTN3V7.js";
2
+ import { a as gcOldBinaryDirs, c as getDownloadUrl, i as findTrayLauncher, l as getRustBinary, n as findRustBinary, o as getBinDir, r as findSpawnHiddenLauncher, s as getBinaryName, t as downloadBinary } from "./rustBinary-seVEdbv0.js";
3
3
 
4
4
  export { gcOldBinaryDirs };
@@ -1,4 +1,4 @@
1
- import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-CL6Dvn--.js";
1
+ import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-C3XTN3V7.js";
2
2
  import { execFileSync } from "child_process";
3
3
  import { existsSync, mkdirSync, readdirSync, rmSync, statSync, unlinkSync } from "fs";
4
4
  import { chmod, copyFile } from "fs/promises";
@@ -310,4 +310,4 @@ async function getRustBinary(options = {}) {
310
310
 
311
311
  //#endregion
312
312
  export { gcOldBinaryDirs as a, getDownloadUrl as c, findTrayLauncher as i, getRustBinary as l, findRustBinary as n, getBinDir as o, findSpawnHiddenLauncher as r, getBinaryName as s, downloadBinary as t };
313
- //# sourceMappingURL=rustBinary-BwgA8XyI.js.map
313
+ //# sourceMappingURL=rustBinary-seVEdbv0.js.map
@@ -1,15 +1,15 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-CL6Dvn--.js";
3
- import "./ts-CEtUijwR.js";
2
+ import "./versionChecker-C3XTN3V7.js";
3
+ import "./ts-Bux2wmDB.js";
4
4
  import "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-DoaKEUkO.js";
7
7
  import "./pidStore-B73xnAeT.js";
8
8
  import "./messageLog-DdjBNqgt.js";
9
9
  import "./todoStore-DF6vxHgV.js";
10
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-G5YhpzKV.js";
11
- import { f as resolveSpawnCwd } from "./workspaceConfig-DctWuxUP.js";
12
- import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-C_LtZrpR.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CsdJ9ioV.js";
11
+ import { f as resolveSpawnCwd } from "./workspaceConfig-D6QndOCz.js";
12
+ import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-_zeWDISM.js";
13
13
  import { createHash } from "node:crypto";
14
14
 
15
15
  //#region ts/oxmgrService.ts
@@ -154,4 +154,4 @@ async function cmdSchedule(rest) {
154
154
 
155
155
  //#endregion
156
156
  export { cmdSchedule };
157
- //# sourceMappingURL=schedule-CdEUIaEV.js.map
157
+ //# sourceMappingURL=schedule-Nkg4x5L_.js.map