@sortedyuan/maybecode 0.3.2 → 0.5.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 (295) hide show
  1. package/README.md +166 -55
  2. package/README.zh-CN.md +267 -0
  3. package/dist/application.d.ts +40 -34
  4. package/dist/application.d.ts.map +1 -1
  5. package/dist/application.js +290 -170
  6. package/dist/application.js.map +1 -1
  7. package/dist/args.d.ts +2 -2
  8. package/dist/args.d.ts.map +1 -1
  9. package/dist/args.js +50 -27
  10. package/dist/args.js.map +1 -1
  11. package/dist/bin.js +82 -71
  12. package/dist/bin.js.map +4 -4
  13. package/dist/cli/chunk-3IORPKBL.js +3572 -0
  14. package/dist/cli/chunk-3IORPKBL.js.map +7 -0
  15. package/dist/cli/{chunk-LVTRXPDS.js → chunk-4B2Z6KW7.js} +1547 -1536
  16. package/dist/cli/chunk-4B2Z6KW7.js.map +7 -0
  17. package/dist/cli/{chunk-JT6VBKOM.js → chunk-4WG6JIJJ.js} +127 -33
  18. package/dist/cli/{chunk-JT6VBKOM.js.map → chunk-4WG6JIJJ.js.map} +3 -3
  19. package/dist/cli/{chunk-K5JWPNSY.js → chunk-5SLWALZK.js} +3521 -16164
  20. package/dist/cli/chunk-5SLWALZK.js.map +7 -0
  21. package/dist/cli/chunk-MNBYXL5Y.js +132 -0
  22. package/dist/cli/chunk-MNBYXL5Y.js.map +7 -0
  23. package/dist/cli/{chunk-F4XRPLUM.js → chunk-SLWLUEHQ.js} +226 -86
  24. package/dist/cli/chunk-SLWLUEHQ.js.map +7 -0
  25. package/dist/cli/chunk-UQDZ55LQ.js +199 -0
  26. package/dist/cli/chunk-UQDZ55LQ.js.map +7 -0
  27. package/dist/cli/{chunk-7ISOHFS7.js → chunk-WMSG5ZTR.js} +717 -388
  28. package/dist/cli/chunk-WMSG5ZTR.js.map +7 -0
  29. package/dist/cli/chunk-WVIRS76R.js +4057 -0
  30. package/dist/cli/chunk-WVIRS76R.js.map +7 -0
  31. package/dist/cli/{chunk-HOU5ITUK.js → chunk-XTEMRAQW.js} +1 -1
  32. package/dist/cli/chunk-XTEMRAQW.js.map +7 -0
  33. package/dist/cli/chunk-Z3BOPBVU.js +91 -0
  34. package/dist/cli/chunk-Z3BOPBVU.js.map +7 -0
  35. package/dist/cli/{configured-WHY3GGAJ.js → configured-ACNM6TRQ.js} +10 -9
  36. package/dist/cli/{file-type-R2T7TBHI.js → file-type-HLHPV7WC.js} +817 -13
  37. package/dist/cli/file-type-HLHPV7WC.js.map +7 -0
  38. package/dist/cli/mcp-auth-XD5U7WCV.js +74 -0
  39. package/dist/cli/mcp-auth-XD5U7WCV.js.map +7 -0
  40. package/dist/cli/onboarding-WQWCPYEO.js +530 -0
  41. package/dist/cli/onboarding-WQWCPYEO.js.map +7 -0
  42. package/dist/cli/onboarding-check-HRRI5OJ7.js +32 -0
  43. package/dist/cli/onboarding-check-HRRI5OJ7.js.map +7 -0
  44. package/dist/cli/{retained-tui-VJ3VX4R3.js → retained-tui-QF5VMYLC.js} +788 -332
  45. package/dist/cli/retained-tui-QF5VMYLC.js.map +7 -0
  46. package/dist/cli/{sixel-LWTCM76G.js → sixel-ISZ4FZ3U.js} +37 -37
  47. package/dist/cli/{sixel-LWTCM76G.js.map → sixel-ISZ4FZ3U.js.map} +1 -1
  48. package/dist/cli/{team-T7G7PPNN.js → team-O2I5BXHM.js} +7 -6
  49. package/dist/cli/{team-v2-JGBBQ7FR.js → team-v2-YYO2G7DJ.js} +816 -390
  50. package/dist/cli/team-v2-YYO2G7DJ.js.map +7 -0
  51. package/dist/cli/{web-server-FOMNPY7Q.js → web-server-SXMH6FGA.js} +55 -19
  52. package/dist/cli/web-server-SXMH6FGA.js.map +7 -0
  53. package/dist/cli/{web-ui-COB6PKC5.js → web-ui-UWQUFE4W.js} +7 -6
  54. package/dist/config-schema.json +337 -0
  55. package/dist/configured.d.ts +18 -11
  56. package/dist/configured.d.ts.map +1 -1
  57. package/dist/configured.js +213 -390
  58. package/dist/configured.js.map +1 -1
  59. package/dist/controller.d.ts +19 -18
  60. package/dist/controller.d.ts.map +1 -1
  61. package/dist/delegation-commands.d.ts +1 -1
  62. package/dist/delegation-commands.d.ts.map +1 -1
  63. package/dist/delegation-commands.js +8 -8
  64. package/dist/delegation-commands.js.map +1 -1
  65. package/dist/errors.d.ts +2 -1
  66. package/dist/errors.d.ts.map +1 -1
  67. package/dist/errors.js +2 -1
  68. package/dist/errors.js.map +1 -1
  69. package/dist/events.d.ts +8 -6
  70. package/dist/events.d.ts.map +1 -1
  71. package/dist/fork-picker.d.ts.map +1 -1
  72. package/dist/fork-picker.js +19 -5
  73. package/dist/fork-picker.js.map +1 -1
  74. package/dist/git-request.d.ts +6 -6
  75. package/dist/git-request.d.ts.map +1 -1
  76. package/dist/git-request.js +28 -15
  77. package/dist/git-request.js.map +1 -1
  78. package/dist/goal-commands.d.ts +1 -1
  79. package/dist/goal-commands.d.ts.map +1 -1
  80. package/dist/goal-commands.js +12 -5
  81. package/dist/goal-commands.js.map +1 -1
  82. package/dist/index.d.ts +5 -37
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +3 -36
  85. package/dist/index.js.map +1 -1
  86. package/dist/instructions.d.ts +2 -7
  87. package/dist/instructions.d.ts.map +1 -1
  88. package/dist/instructions.js +7 -15
  89. package/dist/instructions.js.map +1 -1
  90. package/dist/keymap.d.ts +2 -2
  91. package/dist/keymap.d.ts.map +1 -1
  92. package/dist/keymap.js +2 -2
  93. package/dist/keymap.js.map +1 -1
  94. package/dist/maybecode-config.schema.json +1765 -0
  95. package/dist/mcp-auth.d.ts +1 -1
  96. package/dist/mcp-auth.d.ts.map +1 -1
  97. package/dist/mcp-auth.js +11 -8
  98. package/dist/mcp-auth.js.map +1 -1
  99. package/dist/mcp-commands.d.ts.map +1 -1
  100. package/dist/mcp-commands.js +18 -4
  101. package/dist/mcp-commands.js.map +1 -1
  102. package/dist/mcp-interaction-ui.d.ts.map +1 -1
  103. package/dist/mcp-interaction-ui.js +11 -4
  104. package/dist/mcp-interaction-ui.js.map +1 -1
  105. package/dist/media-history.d.ts +1 -1
  106. package/dist/media-history.d.ts.map +1 -1
  107. package/dist/media-history.js +8 -2
  108. package/dist/media-history.js.map +1 -1
  109. package/dist/model-picker.d.ts.map +1 -1
  110. package/dist/model-picker.js +10 -11
  111. package/dist/model-picker.js.map +1 -1
  112. package/dist/model-transition.d.ts +11 -0
  113. package/dist/model-transition.d.ts.map +1 -0
  114. package/dist/model-transition.js +48 -0
  115. package/dist/model-transition.js.map +1 -0
  116. package/dist/model.d.ts +2 -2
  117. package/dist/model.d.ts.map +1 -1
  118. package/dist/model.js +8 -4
  119. package/dist/model.js.map +1 -1
  120. package/dist/onboarding-check.d.ts +3 -0
  121. package/dist/onboarding-check.d.ts.map +1 -0
  122. package/dist/onboarding-check.js +22 -0
  123. package/dist/onboarding-check.js.map +1 -0
  124. package/dist/onboarding.d.ts +6 -0
  125. package/dist/onboarding.d.ts.map +1 -0
  126. package/dist/onboarding.js +463 -0
  127. package/dist/onboarding.js.map +1 -0
  128. package/dist/plugins/application.d.ts +6 -4
  129. package/dist/plugins/application.d.ts.map +1 -1
  130. package/dist/plugins/application.js +106 -52
  131. package/dist/plugins/application.js.map +1 -1
  132. package/dist/plugins/instructions.d.ts +1 -1
  133. package/dist/plugins/instructions.d.ts.map +1 -1
  134. package/dist/plugins/instructions.js +24 -11
  135. package/dist/plugins/instructions.js.map +1 -1
  136. package/dist/plugins/resources.d.ts +2 -2
  137. package/dist/plugins/resources.d.ts.map +1 -1
  138. package/dist/plugins/resources.js +22 -12
  139. package/dist/plugins/resources.js.map +1 -1
  140. package/dist/policy.d.ts +1 -1
  141. package/dist/policy.d.ts.map +1 -1
  142. package/dist/policy.js +59 -11
  143. package/dist/policy.js.map +1 -1
  144. package/dist/run.d.ts +2 -0
  145. package/dist/run.d.ts.map +1 -1
  146. package/dist/run.js +38 -33
  147. package/dist/run.js.map +1 -1
  148. package/dist/runtime-instructions.d.ts +1 -1
  149. package/dist/runtime-instructions.d.ts.map +1 -1
  150. package/dist/runtime-instructions.js +15 -7
  151. package/dist/runtime-instructions.js.map +1 -1
  152. package/dist/session-navigation.d.ts +6 -0
  153. package/dist/session-navigation.d.ts.map +1 -0
  154. package/dist/session-navigation.js +64 -0
  155. package/dist/session-navigation.js.map +1 -0
  156. package/dist/session-picker.d.ts +1 -1
  157. package/dist/session-picker.d.ts.map +1 -1
  158. package/dist/session-picker.js +23 -32
  159. package/dist/session-picker.js.map +1 -1
  160. package/dist/settings.d.ts +718 -0
  161. package/dist/settings.d.ts.map +1 -0
  162. package/dist/settings.js +14 -0
  163. package/dist/settings.js.map +1 -0
  164. package/dist/skills.d.ts +1 -1
  165. package/dist/skills.d.ts.map +1 -1
  166. package/dist/skills.js +10 -12
  167. package/dist/skills.js.map +1 -1
  168. package/dist/slash-commands.d.ts +2 -2
  169. package/dist/slash-commands.d.ts.map +1 -1
  170. package/dist/slash-commands.js +149 -67
  171. package/dist/slash-commands.js.map +1 -1
  172. package/dist/team-execution.d.ts +10 -0
  173. package/dist/team-execution.d.ts.map +1 -0
  174. package/dist/team-execution.js +29 -0
  175. package/dist/team-execution.js.map +1 -0
  176. package/dist/team-patches.d.ts.map +1 -1
  177. package/dist/team-patches.js +149 -52
  178. package/dist/team-patches.js.map +1 -1
  179. package/dist/team-plan.d.ts +2 -2
  180. package/dist/team-plan.d.ts.map +1 -1
  181. package/dist/team-plan.js +115 -34
  182. package/dist/team-plan.js.map +1 -1
  183. package/dist/team-recovery.d.ts +1 -1
  184. package/dist/team-recovery.d.ts.map +1 -1
  185. package/dist/team-recovery.js +40 -10
  186. package/dist/team-recovery.js.map +1 -1
  187. package/dist/team-v2.d.ts.map +1 -1
  188. package/dist/team-v2.js +335 -104
  189. package/dist/team-v2.js.map +1 -1
  190. package/dist/team-verification.d.ts +4 -2
  191. package/dist/team-verification.d.ts.map +1 -1
  192. package/dist/team-verification.js +300 -97
  193. package/dist/team-verification.js.map +1 -1
  194. package/dist/team.d.ts +2 -2
  195. package/dist/team.d.ts.map +1 -1
  196. package/dist/team.js +172 -62
  197. package/dist/team.js.map +1 -1
  198. package/dist/terminal-web.d.ts +1 -0
  199. package/dist/terminal-web.d.ts.map +1 -1
  200. package/dist/terminal-web.js +28 -10
  201. package/dist/terminal-web.js.map +1 -1
  202. package/dist/ui/actions.d.ts.map +1 -1
  203. package/dist/ui/actions.js.map +1 -1
  204. package/dist/ui/retained-tui.d.ts.map +1 -1
  205. package/dist/ui/retained-tui.js +231 -173
  206. package/dist/ui/retained-tui.js.map +1 -1
  207. package/dist/ui/{prototype-view.d.ts → terminal-view.d.ts} +7 -7
  208. package/dist/ui/terminal-view.d.ts.map +1 -0
  209. package/dist/ui/{prototype-view.js → terminal-view.js} +185 -98
  210. package/dist/ui/terminal-view.js.map +1 -0
  211. package/dist/web-commands.d.ts.map +1 -1
  212. package/dist/web-commands.js +160 -57
  213. package/dist/web-commands.js.map +1 -1
  214. package/dist/web-extension.d.ts.map +1 -1
  215. package/dist/web-extension.js +14 -4
  216. package/dist/web-extension.js.map +1 -1
  217. package/dist/web-server.d.ts.map +1 -1
  218. package/dist/web-server.js +2 -1
  219. package/dist/web-server.js.map +1 -1
  220. package/dist/web-ui.d.ts.map +1 -1
  221. package/dist/web-ui.js +167 -40
  222. package/dist/web-ui.js.map +1 -1
  223. package/dist/workspace-configuration.d.ts +7 -0
  224. package/dist/workspace-configuration.d.ts.map +1 -0
  225. package/dist/workspace-configuration.js +134 -0
  226. package/dist/workspace-configuration.js.map +1 -0
  227. package/dist/workspace-state.d.ts +20 -0
  228. package/dist/workspace-state.d.ts.map +1 -0
  229. package/dist/workspace-state.js +2 -0
  230. package/dist/workspace-state.js.map +1 -0
  231. package/dist/workspace.d.ts +26 -43
  232. package/dist/workspace.d.ts.map +1 -1
  233. package/dist/workspace.js +261 -323
  234. package/dist/workspace.js.map +1 -1
  235. package/package.json +21 -31
  236. package/dist/cli/chunk-7ISOHFS7.js.map +0 -7
  237. package/dist/cli/chunk-F4XRPLUM.js.map +0 -7
  238. package/dist/cli/chunk-H7SNBFO4.js +0 -5522
  239. package/dist/cli/chunk-H7SNBFO4.js.map +0 -7
  240. package/dist/cli/chunk-HOU5ITUK.js.map +0 -7
  241. package/dist/cli/chunk-K5JWPNSY.js.map +0 -7
  242. package/dist/cli/chunk-LVTRXPDS.js.map +0 -7
  243. package/dist/cli/chunk-VAZMCNBB.js +0 -686
  244. package/dist/cli/chunk-VAZMCNBB.js.map +0 -7
  245. package/dist/cli/chunk-WOFEI42C.js +0 -7820
  246. package/dist/cli/chunk-WOFEI42C.js.map +0 -7
  247. package/dist/cli/file-type-R2T7TBHI.js.map +0 -7
  248. package/dist/cli/mcp-auth-UNRHSIKJ.js +0 -63
  249. package/dist/cli/mcp-auth-UNRHSIKJ.js.map +0 -7
  250. package/dist/cli/retained-tui-VJ3VX4R3.js.map +0 -7
  251. package/dist/cli/team-v2-JGBBQ7FR.js.map +0 -7
  252. package/dist/cli/tui-SA74DKMA.js +0 -1705
  253. package/dist/cli/tui-SA74DKMA.js.map +0 -7
  254. package/dist/cli/web-server-FOMNPY7Q.js.map +0 -7
  255. package/dist/delegation.d.ts +0 -2
  256. package/dist/delegation.d.ts.map +0 -1
  257. package/dist/delegation.js +0 -2
  258. package/dist/delegation.js.map +0 -1
  259. package/dist/history-memory.d.ts +0 -2
  260. package/dist/history-memory.d.ts.map +0 -1
  261. package/dist/history-memory.js +0 -2
  262. package/dist/history-memory.js.map +0 -1
  263. package/dist/subagent-budget.d.ts +0 -2
  264. package/dist/subagent-budget.d.ts.map +0 -1
  265. package/dist/subagent-budget.js +0 -2
  266. package/dist/subagent-budget.js.map +0 -1
  267. package/dist/subagent-files.d.ts +0 -2
  268. package/dist/subagent-files.d.ts.map +0 -1
  269. package/dist/subagent-files.js +0 -2
  270. package/dist/subagent-files.js.map +0 -1
  271. package/dist/subagent-host.d.ts +0 -2
  272. package/dist/subagent-host.d.ts.map +0 -1
  273. package/dist/subagent-host.js +0 -2
  274. package/dist/subagent-host.js.map +0 -1
  275. package/dist/subagent-instructions.d.ts +0 -2
  276. package/dist/subagent-instructions.d.ts.map +0 -1
  277. package/dist/subagent-instructions.js +0 -2
  278. package/dist/subagent-instructions.js.map +0 -1
  279. package/dist/subagents.d.ts +0 -2
  280. package/dist/subagents.d.ts.map +0 -1
  281. package/dist/subagents.js +0 -2
  282. package/dist/subagents.js.map +0 -1
  283. package/dist/summarizer.d.ts +0 -2
  284. package/dist/summarizer.d.ts.map +0 -1
  285. package/dist/summarizer.js +0 -2
  286. package/dist/summarizer.js.map +0 -1
  287. package/dist/tui.d.ts +0 -7
  288. package/dist/tui.d.ts.map +0 -1
  289. package/dist/tui.js +0 -1109
  290. package/dist/tui.js.map +0 -1
  291. package/dist/ui/prototype-view.d.ts.map +0 -1
  292. package/dist/ui/prototype-view.js.map +0 -1
  293. /package/dist/cli/{configured-WHY3GGAJ.js.map → configured-ACNM6TRQ.js.map} +0 -0
  294. /package/dist/cli/{team-T7G7PPNN.js.map → team-O2I5BXHM.js.map} +0 -0
  295. /package/dist/cli/{web-ui-COB6PKC5.js.map → web-ui-UWQUFE4W.js.map} +0 -0
@@ -1119,7 +1119,7 @@ __name(stringWidth, "stringWidth");
1119
1119
  import { clearLine, cursorTo, moveCursor } from "node:readline";
1120
1120
  import { createInterface } from "node:readline/promises";
1121
1121
 
1122
- // packages/ui/keybindings/dist/index.js
1122
+ // packages/ui/tui/dist/keybindings/index.js
1123
1123
  var Keymap = class {
1124
1124
  static {
1125
1125
  __name(this, "Keymap");
@@ -1195,7 +1195,10 @@ function mergeKeyBindings(defaults, overrides = [], options = {}) {
1195
1195
  const replaced = new Set(overrides.map((binding) => `${binding.context}\0${binding.action}`));
1196
1196
  const keyId = /* @__PURE__ */ __name((binding) => `${binding.context}\0${formatKeySequence(parseKeySequence(binding.keys, options))}`, "keyId");
1197
1197
  const rebound = new Set(overrides.map(keyId));
1198
- return [...defaults.filter((binding) => !replaced.has(`${binding.context}\0${binding.action}`) && !rebound.has(keyId(binding))), ...overrides];
1198
+ return [
1199
+ ...defaults.filter((binding) => !replaced.has(`${binding.context}\0${binding.action}`) && !rebound.has(keyId(binding))),
1200
+ ...overrides
1201
+ ];
1199
1202
  }
1200
1203
  __name(mergeKeyBindings, "mergeKeyBindings");
1201
1204
  function keyStroke(key, modifiers = {}) {
@@ -1339,7 +1342,8 @@ __name(sameStroke, "sameStroke");
1339
1342
 
1340
1343
  // packages/ui/tui/dist/node-terminal.js
1341
1344
  var import_tty_events = __toESM(require_index_min(), 1);
1342
- import { PassThrough } from "node:stream";
1345
+ import { PassThrough, Writable } from "node:stream";
1346
+ import { setImmediate as waitImmediate } from "node:timers/promises";
1343
1347
 
1344
1348
  // packages/ui/tui/dist/image-support.js
1345
1349
  var import_node_ansiparser = __toESM(require_ansiparser(), 1);
@@ -1586,6 +1590,7 @@ var TerminalImageSupport = class {
1586
1590
  // packages/ui/tui/dist/node-terminal.js
1587
1591
  function createNodeTerminal(options = {}) {
1588
1592
  const source = options.input ?? process.stdin;
1593
+ source.ref?.();
1589
1594
  const output = options.output ?? process.stdout;
1590
1595
  const interactive = output.isTTY === true;
1591
1596
  const imageSupport = new TerminalImageSupport(output);
@@ -1595,7 +1600,10 @@ function createNodeTerminal(options = {}) {
1595
1600
  const endFilteredInput = /* @__PURE__ */ __name(() => filtered?.end(), "endFilteredInput");
1596
1601
  if (filtered && reports) {
1597
1602
  const terminalSource = source;
1598
- Object.assign(filtered, { isTTY: terminalSource.isTTY, setRawMode: /* @__PURE__ */ __name((enabled) => terminalSource.setRawMode?.(enabled), "setRawMode") });
1603
+ Object.assign(filtered, {
1604
+ isTTY: terminalSource.isTTY,
1605
+ setRawMode: /* @__PURE__ */ __name((enabled) => terminalSource.setRawMode?.(enabled), "setRawMode")
1606
+ });
1599
1607
  reports.on("keypress", (key) => filtered.write(key.sequence));
1600
1608
  reports.on("paste", (text) => filtered.write(`\x1B[200~${text}\x1B[201~`));
1601
1609
  reports.on("unknownSequence", (sequence) => {
@@ -1605,23 +1613,66 @@ function createNodeTerminal(options = {}) {
1605
1613
  source.on("end", endFilteredInput);
1606
1614
  }
1607
1615
  const historySize = 200;
1608
- const readline = createInterface({
1616
+ let passwordActive = false;
1617
+ let viewActive = false;
1618
+ let keyInputActive = false;
1619
+ const readlineOutput = new Writable({
1620
+ write(chunk, encoding, callback) {
1621
+ if (!passwordActive && !viewActive && !keyInputActive)
1622
+ output.write(chunk, encoding);
1623
+ callback();
1624
+ }
1625
+ });
1626
+ Object.defineProperties(readlineOutput, {
1627
+ isTTY: { get: /* @__PURE__ */ __name(() => output.isTTY, "get") },
1628
+ columns: { get: /* @__PURE__ */ __name(() => output.columns, "get") }
1629
+ });
1630
+ const lifetime = new AbortController();
1631
+ const interruptListeners = /* @__PURE__ */ new Set();
1632
+ const onReadlineClose = /* @__PURE__ */ __name(() => lifetime.abort(new Error("Terminal closed")), "onReadlineClose");
1633
+ const createReadline = /* @__PURE__ */ __name((size) => createInterface({
1609
1634
  input,
1610
- output,
1635
+ output: readlineOutput,
1611
1636
  terminal: interactive,
1612
- historySize,
1637
+ historySize: size,
1613
1638
  removeHistoryDuplicates: true,
1614
1639
  escapeCodeTimeout: 100
1615
- });
1616
- const history = readline.history;
1640
+ }).on("SIGINT", () => {
1641
+ for (const listener of interruptListeners)
1642
+ listener();
1643
+ }).on("close", onReadlineClose), "createReadline");
1644
+ let readline = createReadline(historySize);
1645
+ let history = readline.history;
1646
+ const replaceReadline = /* @__PURE__ */ __name(async (size) => {
1647
+ readline.removeListener("close", onReadlineClose);
1648
+ input.pause();
1649
+ await waitImmediate();
1650
+ readline.close();
1651
+ if (closed || lifetime.signal.aborted)
1652
+ return;
1653
+ readline = createReadline(size);
1654
+ history = readline.history;
1655
+ }, "replaceReadline");
1617
1656
  let activePrompt;
1657
+ let activeEscape;
1618
1658
  let activeSuggestionProvider;
1619
1659
  let activeSuggestions = [];
1620
1660
  let renderedSuggestionCount = 0;
1621
1661
  let suggestionVersion = 0;
1662
+ const suggestionTasks = /* @__PURE__ */ new Set();
1663
+ const suggestionErrors = [];
1664
+ const ownSuggestion = /* @__PURE__ */ __name((task) => {
1665
+ const pending = task.then(() => {
1666
+ suggestionTasks.delete(pending);
1667
+ }, (error) => {
1668
+ suggestionTasks.delete(pending);
1669
+ suggestionErrors.push(error);
1670
+ lifetime.abort(error);
1671
+ });
1672
+ suggestionTasks.add(pending);
1673
+ }, "ownSuggestion");
1622
1674
  let activeSuggestionInput;
1623
1675
  let activeKeyRead;
1624
- let viewActive = false;
1625
1676
  let suppressInterrupt = false;
1626
1677
  let closed = false;
1627
1678
  let questionReserved = false;
@@ -1694,17 +1745,12 @@ ${formatSuggestion(suggestion, output.columns)}`);
1694
1745
  }, "replaceSuggestions");
1695
1746
  const refreshSuggestions = /* @__PURE__ */ __name(async () => {
1696
1747
  const provider = activeSuggestionProvider;
1697
- if (!interactive || activePrompt === void 0 || provider === void 0) {
1748
+ if (closed || !interactive || activePrompt === void 0 || provider === void 0) {
1698
1749
  return;
1699
1750
  }
1700
1751
  const line = readline.line;
1701
1752
  const version = ++suggestionVersion;
1702
- let suggestions;
1703
- try {
1704
- suggestions = await provider(line);
1705
- } catch {
1706
- suggestions = [];
1707
- }
1753
+ const suggestions = await provider(line);
1708
1754
  if (version !== suggestionVersion || provider !== activeSuggestionProvider || activePrompt === void 0 || line !== readline.line) {
1709
1755
  return;
1710
1756
  }
@@ -1736,14 +1782,19 @@ ${formatSuggestion(suggestion, output.columns)}`);
1736
1782
  read.resolve(toKeyStroke(value, key));
1737
1783
  wakeInputWaiters();
1738
1784
  queueMicrotask(() => {
1739
- if (!closed && activePrompt === void 0) {
1785
+ if (!closed && !questionReserved && activePrompt === void 0) {
1740
1786
  readline.write(void 0, { ctrl: true, name: "u" });
1741
1787
  }
1788
+ keyInputActive = activeKeyRead !== void 0;
1742
1789
  });
1743
1790
  return;
1744
1791
  }
1745
1792
  if (activePrompt === void 0)
1746
1793
  return;
1794
+ if (key.name === "escape" && activeEscape !== void 0) {
1795
+ activeEscape();
1796
+ return;
1797
+ }
1747
1798
  if (key.name === "tab" && activeSuggestionProvider !== void 0) {
1748
1799
  const line = readline.line;
1749
1800
  const completed = completeActiveSuggestion(line);
@@ -1753,11 +1804,11 @@ ${formatSuggestion(suggestion, output.columns)}`);
1753
1804
  readline.write(void 0, { ctrl: true, name: "u" });
1754
1805
  readline.write(expected);
1755
1806
  }
1756
- void refreshSuggestions().then(() => {
1807
+ ownSuggestion(refreshSuggestions().then(() => {
1757
1808
  if (!completed && activePrompt !== void 0 && readline.line === line) {
1758
1809
  completeActiveSuggestion(line);
1759
1810
  }
1760
- });
1811
+ }));
1761
1812
  });
1762
1813
  return;
1763
1814
  }
@@ -1767,30 +1818,50 @@ ${formatSuggestion(suggestion, output.columns)}`);
1767
1818
  activeSuggestions = [];
1768
1819
  return;
1769
1820
  }
1770
- queueMicrotask(() => void refreshSuggestions());
1821
+ queueMicrotask(() => {
1822
+ if (!closed)
1823
+ ownSuggestion(refreshSuggestions());
1824
+ });
1771
1825
  }, "onKeypress");
1772
1826
  if (interactive)
1773
1827
  input.prependListener("keypress", onKeypress);
1774
- const updateImageSize = /* @__PURE__ */ __name(() => imageSupport.query(), "updateImageSize");
1828
+ const updateImageSize = /* @__PURE__ */ __name(() => {
1829
+ imageSupport.query();
1830
+ readlineOutput.emit("resize");
1831
+ }, "updateImageSize");
1775
1832
  output.on("resize", updateImageSize);
1776
1833
  return {
1777
1834
  imageSupport,
1778
1835
  colors: options.colors ?? interactive,
1779
1836
  interactive,
1780
1837
  async question(prompt, questionOptions = {}) {
1838
+ const signal = questionOptions.signal === void 0 ? lifetime.signal : AbortSignal.any([lifetime.signal, questionOptions.signal]);
1781
1839
  if (activePrompt !== void 0 || activeKeyRead !== void 0 || viewActive || questionReserved)
1782
- await waitForInput(questionOptions.signal);
1840
+ await waitForInput(signal);
1783
1841
  try {
1784
1842
  if (closed)
1785
1843
  throw new Error("Terminal closed");
1786
- questionOptions.signal?.throwIfAborted();
1844
+ signal.throwIfAborted();
1845
+ if (questionOptions.password && (!interactive || source.isTTY !== true)) {
1846
+ throw new Error("Password input requires an interactive terminal");
1847
+ }
1848
+ if (questionOptions.password && questionOptions.suggestions !== void 0) {
1849
+ throw new Error("Password input does not support suggestions");
1850
+ }
1787
1851
  } catch (error) {
1788
1852
  questionReserved = false;
1789
1853
  wakeInputWaiters();
1790
1854
  throw error;
1791
1855
  }
1792
- const previousHistory = questionOptions.history === false ? [...history] : void 0;
1856
+ const previousHistory = interactive && (questionOptions.history === false || questionOptions.password) ? [...history] : void 0;
1857
+ passwordActive = questionOptions.password === true;
1858
+ if (passwordActive) {
1859
+ questionReserved = true;
1860
+ await replaceReadline(0);
1861
+ output.write(prompt);
1862
+ }
1793
1863
  activePrompt = prompt;
1864
+ activeEscape = questionOptions.onEscape;
1794
1865
  questionReserved = false;
1795
1866
  activeSuggestionProvider = questionOptions.suggestions;
1796
1867
  activeSuggestions = [];
@@ -1798,14 +1869,21 @@ ${formatSuggestion(suggestion, output.columns)}`);
1798
1869
  renderedSuggestionCount = 0;
1799
1870
  suggestionVersion += 1;
1800
1871
  try {
1801
- return await (questionOptions.signal === void 0 ? readline.question(prompt) : readline.question(prompt, { signal: questionOptions.signal }));
1872
+ return await readline.question(prompt, { signal });
1802
1873
  } finally {
1874
+ if (passwordActive) {
1875
+ if (!closed && !lifetime.signal.aborted)
1876
+ await replaceReadline(historySize);
1877
+ output.write("\n");
1878
+ passwordActive = false;
1879
+ }
1803
1880
  suggestionVersion += 1;
1804
1881
  eraseSuggestionRows();
1805
1882
  activeSuggestionProvider = void 0;
1806
1883
  activeSuggestions = [];
1807
1884
  activeSuggestionInput = void 0;
1808
1885
  activePrompt = void 0;
1886
+ activeEscape = void 0;
1809
1887
  wakeInputWaiters();
1810
1888
  if (previousHistory !== void 0) {
1811
1889
  history.splice(0, history.length, ...previousHistory);
@@ -1820,13 +1898,19 @@ ${formatSuggestion(suggestion, output.columns)}`);
1820
1898
  readline.setPrompt(prompt.replace(/^\r?\n/u, ""));
1821
1899
  if (interactive)
1822
1900
  readline.prompt(true);
1901
+ if (passwordActive) {
1902
+ clearLine(output, 0);
1903
+ cursorTo(output, 0);
1904
+ output.write(prompt);
1905
+ }
1823
1906
  drawSuggestionRows();
1824
1907
  },
1825
1908
  readKey({ signal } = {}) {
1909
+ signal = signal === void 0 ? lifetime.signal : AbortSignal.any([lifetime.signal, signal]);
1826
1910
  if (!interactive) {
1827
1911
  return Promise.reject(new Error("Key input requires an interactive terminal"));
1828
1912
  }
1829
- if (activePrompt !== void 0 || activeKeyRead !== void 0) {
1913
+ if (activePrompt !== void 0 || activeKeyRead !== void 0 || questionReserved) {
1830
1914
  return Promise.reject(new Error("The terminal input is already active"));
1831
1915
  }
1832
1916
  if (signal?.aborted)
@@ -1836,6 +1920,7 @@ ${formatSuggestion(suggestion, output.columns)}`);
1836
1920
  if (activeKeyRead !== read)
1837
1921
  return;
1838
1922
  activeKeyRead = void 0;
1923
+ keyInputActive = false;
1839
1924
  read.cleanup();
1840
1925
  reject(abortError(signal?.reason));
1841
1926
  wakeInputWaiters();
@@ -1846,6 +1931,7 @@ ${formatSuggestion(suggestion, output.columns)}`);
1846
1931
  cleanup: /* @__PURE__ */ __name(() => signal?.removeEventListener("abort", onAbort), "cleanup")
1847
1932
  };
1848
1933
  activeKeyRead = read;
1934
+ keyInputActive = true;
1849
1935
  signal?.addEventListener("abort", onAbort, { once: true });
1850
1936
  });
1851
1937
  },
@@ -1887,8 +1973,8 @@ ${formatSuggestion(suggestion, output.columns)}`);
1887
1973
  return;
1888
1974
  }
1889
1975
  eraseSuggestionRows();
1890
- const line = readline.line;
1891
- const position = readline.cursor;
1976
+ const line = passwordActive ? "" : readline.line;
1977
+ const position = passwordActive ? 0 : readline.cursor;
1892
1978
  clearLine(output, 0);
1893
1979
  cursorTo(output, 0);
1894
1980
  const update = text.replace(/^\r?\n/u, "");
@@ -1909,11 +1995,14 @@ ${formatSuggestion(suggestion, output.columns)}`);
1909
1995
  }
1910
1996
  listener();
1911
1997
  }, "wrapped");
1912
- readline.on("SIGINT", wrapped);
1913
- return () => readline.off("SIGINT", wrapped);
1998
+ interruptListeners.add(wrapped);
1999
+ return () => {
2000
+ interruptListeners.delete(wrapped);
2001
+ };
1914
2002
  },
1915
- close() {
2003
+ async close() {
1916
2004
  closed = true;
2005
+ lifetime.abort(new Error("Terminal closed"));
1917
2006
  wakeInputWaiters();
1918
2007
  activeKeyRead?.reject(new Error("Terminal closed"));
1919
2008
  activeKeyRead?.cleanup();
@@ -1923,11 +2012,16 @@ ${formatSuggestion(suggestion, output.columns)}`);
1923
2012
  if (interactive)
1924
2013
  input.removeListener("keypress", onKeypress);
1925
2014
  readline.close();
2015
+ interruptListeners.clear();
1926
2016
  output.removeListener("resize", updateImageSize);
1927
2017
  reports?.pause();
1928
2018
  reports?.removeAllListeners();
1929
2019
  source.removeListener("end", endFilteredInput);
1930
2020
  filtered?.destroy();
2021
+ source.unref?.();
2022
+ await Promise.all([...suggestionTasks]);
2023
+ if (suggestionErrors.length)
2024
+ throw new AggregateError(suggestionErrors, "Terminal suggestion processing failed");
1931
2025
  }
1932
2026
  };
1933
2027
  }
@@ -1995,4 +2089,4 @@ export {
1995
2089
  TerminalImageSupport,
1996
2090
  createNodeTerminal
1997
2091
  };
1998
- //# sourceMappingURL=chunk-JT6VBKOM.js.map
2092
+ //# sourceMappingURL=chunk-4WG6JIJJ.js.map