@duyquangnvx/agent-cli 0.17.0 → 0.18.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 (251) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +2 -2
  3. package/agents-section.md +5 -0
  4. package/dist/agent-cli.d.ts +69 -11
  5. package/dist/agent-cli.js +69 -10
  6. package/dist/agent-cli.js.map +1 -1
  7. package/dist/built-ins/agents-md.d.ts +9 -9
  8. package/dist/built-ins/agents-md.js +8 -8
  9. package/dist/built-ins/agents-md.js.map +1 -1
  10. package/dist/built-ins/doctor-rows.js +5 -3
  11. package/dist/built-ins/doctor-rows.js.map +1 -1
  12. package/dist/built-ins/doctor.d.ts +1 -1
  13. package/dist/built-ins/doctor.js +16 -15
  14. package/dist/built-ins/doctor.js.map +1 -1
  15. package/dist/built-ins/install/dependency.js +1 -1
  16. package/dist/built-ins/install/dependency.js.map +1 -1
  17. package/dist/built-ins/install/global-npm.js +6 -4
  18. package/dist/built-ins/install/global-npm.js.map +1 -1
  19. package/dist/built-ins/npm.d.ts +3 -2
  20. package/dist/built-ins/npm.js +16 -9
  21. package/dist/built-ins/npm.js.map +1 -1
  22. package/dist/{project-root.js → built-ins/project-root.js} +1 -1
  23. package/dist/built-ins/project-root.js.map +1 -0
  24. package/dist/built-ins/skill/hub.d.ts +3 -2
  25. package/dist/built-ins/skill/hub.js +43 -16
  26. package/dist/built-ins/skill/hub.js.map +1 -1
  27. package/dist/built-ins/skill/install-command.d.ts +3 -4
  28. package/dist/built-ins/skill/install-command.js +20 -21
  29. package/dist/built-ins/skill/install-command.js.map +1 -1
  30. package/dist/built-ins/skill/packaged.js +5 -2
  31. package/dist/built-ins/skill/packaged.js.map +1 -1
  32. package/dist/built-ins/skill/skill.d.ts +5 -2
  33. package/dist/built-ins/skill/skill.js +1 -1
  34. package/dist/built-ins/skill/skill.js.map +1 -1
  35. package/dist/built-ins/update.d.ts +1 -1
  36. package/dist/built-ins/update.js +4 -9
  37. package/dist/built-ins/update.js.map +1 -1
  38. package/dist/check-examples.d.ts +6 -0
  39. package/dist/check-examples.js +53 -0
  40. package/dist/check-examples.js.map +1 -0
  41. package/dist/check-next-steps.d.ts +10 -0
  42. package/dist/check-next-steps.js +47 -0
  43. package/dist/check-next-steps.js.map +1 -0
  44. package/dist/command-errors.d.ts +8 -0
  45. package/dist/command-errors.js +25 -0
  46. package/dist/command-errors.js.map +1 -0
  47. package/dist/{flags.d.ts → command-line/flags.d.ts} +4 -4
  48. package/dist/{flags.js → command-line/flags.js} +7 -10
  49. package/dist/command-line/flags.js.map +1 -0
  50. package/dist/{input.d.ts → command-line/input.d.ts} +1 -1
  51. package/dist/{input.js → command-line/input.js} +1 -1
  52. package/dist/command-line/input.js.map +1 -0
  53. package/dist/{invocation.d.ts → command-line/invocation.d.ts} +6 -3
  54. package/dist/{invocation.js → command-line/invocation.js} +9 -5
  55. package/dist/command-line/invocation.js.map +1 -0
  56. package/dist/{parse-input.d.ts → command-line/parse-input.d.ts} +2 -2
  57. package/dist/{parse-input.js → command-line/parse-input.js} +3 -3
  58. package/dist/command-line/parse-input.js.map +1 -0
  59. package/dist/command-line/route-line.d.ts +15 -0
  60. package/dist/command-line/route-line.js +18 -0
  61. package/dist/command-line/route-line.js.map +1 -0
  62. package/dist/{route.d.ts → command-line/route.d.ts} +2 -2
  63. package/dist/{route.js → command-line/route.js} +1 -1
  64. package/dist/command-line/route.js.map +1 -0
  65. package/dist/command-line/shell-words.d.ts +12 -0
  66. package/dist/command-line/shell-words.js +83 -0
  67. package/dist/command-line/shell-words.js.map +1 -0
  68. package/dist/command-line/suggest.js.map +1 -0
  69. package/dist/command-line/tokenize.js.map +1 -0
  70. package/dist/{usage.d.ts → command-line/usage.d.ts} +1 -1
  71. package/dist/{usage.js → command-line/usage.js} +2 -2
  72. package/dist/command-line/usage.js.map +1 -0
  73. package/dist/command-spec.d.ts +13 -4
  74. package/dist/command-spec.js +22 -11
  75. package/dist/command-spec.js.map +1 -1
  76. package/dist/{agent.d.ts → context/agent.d.ts} +1 -1
  77. package/dist/context/agent.js.map +1 -0
  78. package/dist/{confirm.d.ts → context/confirm.d.ts} +3 -3
  79. package/dist/{confirm.js → context/confirm.js} +9 -11
  80. package/dist/context/confirm.js.map +1 -0
  81. package/dist/{cost.d.ts → context/cost.d.ts} +3 -3
  82. package/dist/context/cost.js +16 -0
  83. package/dist/context/cost.js.map +1 -0
  84. package/dist/context/declared.d.ts +8 -0
  85. package/dist/context/declared.js +10 -0
  86. package/dist/context/declared.js.map +1 -0
  87. package/dist/{errno.d.ts → context/errno.d.ts} +4 -3
  88. package/dist/{errno.js → context/errno.js} +14 -7
  89. package/dist/context/errno.js.map +1 -0
  90. package/dist/{files.js → context/files.js} +1 -1
  91. package/dist/context/files.js.map +1 -0
  92. package/dist/{interrupts.d.ts → context/interrupts.d.ts} +14 -10
  93. package/dist/{interrupts.js → context/interrupts.js} +30 -27
  94. package/dist/context/interrupts.js.map +1 -0
  95. package/dist/{operator.d.ts → context/operator.d.ts} +4 -3
  96. package/dist/{operator.js → context/operator.js} +4 -3
  97. package/dist/context/operator.js.map +1 -0
  98. package/dist/{outputs.d.ts → context/outputs.d.ts} +6 -5
  99. package/dist/{outputs.js → context/outputs.js} +10 -9
  100. package/dist/context/outputs.js.map +1 -0
  101. package/dist/{project.d.ts → context/project.d.ts} +4 -3
  102. package/dist/{project.js → context/project.js} +8 -7
  103. package/dist/context/project.js.map +1 -0
  104. package/dist/{secrets.d.ts → context/secrets.d.ts} +8 -1
  105. package/dist/context/secrets.js +85 -0
  106. package/dist/context/secrets.js.map +1 -0
  107. package/dist/{side-task.d.ts → context/side-task.d.ts} +2 -2
  108. package/dist/{side-task.js → context/side-task.js} +1 -1
  109. package/dist/context/side-task.js.map +1 -0
  110. package/dist/{spawn.d.ts → context/spawn.d.ts} +4 -3
  111. package/dist/{spawn.js → context/spawn.js} +7 -6
  112. package/dist/context/spawn.js.map +1 -0
  113. package/dist/{spill.d.ts → context/spill.d.ts} +4 -3
  114. package/dist/{spill.js → context/spill.js} +4 -4
  115. package/dist/context/spill.js.map +1 -0
  116. package/dist/{stdin.d.ts → context/stdin.d.ts} +2 -2
  117. package/dist/{stdin.js → context/stdin.js} +2 -2
  118. package/dist/context/stdin.js.map +1 -0
  119. package/dist/{tools.d.ts → context/tools.d.ts} +4 -3
  120. package/dist/{tools.js → context/tools.js} +8 -10
  121. package/dist/context/tools.js.map +1 -0
  122. package/dist/context.d.ts +51 -27
  123. package/dist/define-command.d.ts +47 -0
  124. package/dist/define-command.js +25 -0
  125. package/dist/define-command.js.map +1 -0
  126. package/dist/define.d.ts +72 -63
  127. package/dist/define.js +0 -14
  128. package/dist/define.js.map +1 -1
  129. package/dist/error-table.d.ts +9 -6
  130. package/dist/error-table.js +6 -6
  131. package/dist/error-table.js.map +1 -1
  132. package/dist/errors.d.ts +15 -1
  133. package/dist/errors.js +24 -6
  134. package/dist/errors.js.map +1 -1
  135. package/dist/execute.d.ts +8 -7
  136. package/dist/execute.js +51 -22
  137. package/dist/execute.js.map +1 -1
  138. package/dist/exit-classes.d.ts +1 -2
  139. package/dist/exit-classes.js +41 -48
  140. package/dist/exit-classes.js.map +1 -1
  141. package/dist/help-json.d.ts +4 -3
  142. package/dist/help-json.js +33 -11
  143. package/dist/help-json.js.map +1 -1
  144. package/dist/help.js.map +1 -1
  145. package/dist/index.d.ts +19 -26
  146. package/dist/index.js +6 -18
  147. package/dist/index.js.map +1 -1
  148. package/dist/list.d.ts +6 -5
  149. package/dist/list.js +17 -11
  150. package/dist/list.js.map +1 -1
  151. package/dist/next-step.d.ts +23 -0
  152. package/dist/next-step.js +20 -0
  153. package/dist/next-step.js.map +1 -0
  154. package/dist/output.d.ts +11 -5
  155. package/dist/output.js +25 -11
  156. package/dist/output.js.map +1 -1
  157. package/dist/root-spec.d.ts +5 -0
  158. package/dist/root-spec.js +15 -0
  159. package/dist/root-spec.js.map +1 -0
  160. package/dist/run-cli.d.ts +2 -2
  161. package/dist/run-cli.js +12 -11
  162. package/dist/run-cli.js.map +1 -1
  163. package/dist/run-command.d.ts +4 -4
  164. package/dist/run-command.js +66 -37
  165. package/dist/run-command.js.map +1 -1
  166. package/dist/run-options.d.ts +11 -4
  167. package/dist/run-process.js +22 -7
  168. package/dist/run-process.js.map +1 -1
  169. package/dist/runtime-codes.d.ts +33 -0
  170. package/dist/runtime-codes.js +50 -0
  171. package/dist/runtime-codes.js.map +1 -0
  172. package/dist/style.js +1 -1
  173. package/dist/style.js.map +1 -1
  174. package/dist/testing.d.ts +27 -0
  175. package/dist/testing.js +66 -0
  176. package/dist/testing.js.map +1 -0
  177. package/dist/version.d.ts +4 -1
  178. package/dist/version.js +6 -1
  179. package/dist/version.js.map +1 -1
  180. package/docs/README.md +51 -0
  181. package/docs/example/archive.test.ts +280 -0
  182. package/docs/example/archive.ts +160 -0
  183. package/docs/example/bin.test.ts +118 -0
  184. package/docs/example/bin.ts +5 -0
  185. package/docs/example/bundle.test.ts +57 -0
  186. package/docs/example/bundle.ts +57 -0
  187. package/docs/example/cli.test.ts +428 -0
  188. package/docs/example/cli.ts +191 -0
  189. package/docs/example/commit.test.ts +78 -0
  190. package/docs/example/commit.ts +26 -0
  191. package/docs/example/define.ts +16 -0
  192. package/docs/example/errors.ts +17 -0
  193. package/docs/example/export.test.ts +64 -0
  194. package/docs/example/export.ts +32 -0
  195. package/docs/example/fake-ports.ts +14 -0
  196. package/docs/example/folder.ts +48 -0
  197. package/docs/example/import.test.ts +53 -0
  198. package/docs/example/import.ts +50 -0
  199. package/docs/example/package.json +21 -0
  200. package/docs/example/ports.ts +105 -0
  201. package/docs/example/serve.test.ts +49 -0
  202. package/docs/example/serve.ts +40 -0
  203. package/docs/example/store.ts +62 -0
  204. package/docs/example/tsdown.config.ts +33 -0
  205. package/docs/getting-started.md +19 -0
  206. package/docs/guides/commands.md +35 -0
  207. package/docs/guides/doctor.md +52 -0
  208. package/docs/guides/effects-and-plans.md +44 -0
  209. package/docs/guides/errors.md +57 -0
  210. package/docs/guides/lists.md +18 -0
  211. package/docs/guides/local-state.md +28 -0
  212. package/docs/guides/long-runs.md +109 -0
  213. package/docs/guides/remote-services.md +124 -0
  214. package/docs/guides/shipping.md +61 -0
  215. package/docs/guides/testing.md +69 -0
  216. package/docs/principles.md +39 -0
  217. package/docs/reference.md +25 -0
  218. package/package.json +12 -1
  219. package/dist/agent.js.map +0 -1
  220. package/dist/confirm.js.map +0 -1
  221. package/dist/cost.js +0 -16
  222. package/dist/cost.js.map +0 -1
  223. package/dist/errno.js.map +0 -1
  224. package/dist/files.js.map +0 -1
  225. package/dist/flags.js.map +0 -1
  226. package/dist/input.js.map +0 -1
  227. package/dist/interrupts.js.map +0 -1
  228. package/dist/invocation.js.map +0 -1
  229. package/dist/operator.js.map +0 -1
  230. package/dist/outputs.js.map +0 -1
  231. package/dist/parse-input.js.map +0 -1
  232. package/dist/project-root.js.map +0 -1
  233. package/dist/project.js.map +0 -1
  234. package/dist/route.js.map +0 -1
  235. package/dist/secrets.js +0 -31
  236. package/dist/secrets.js.map +0 -1
  237. package/dist/side-task.js.map +0 -1
  238. package/dist/spawn.js.map +0 -1
  239. package/dist/spill.js.map +0 -1
  240. package/dist/stdin.js.map +0 -1
  241. package/dist/suggest.js.map +0 -1
  242. package/dist/tokenize.js.map +0 -1
  243. package/dist/tools.js.map +0 -1
  244. package/dist/usage.js.map +0 -1
  245. /package/dist/{project-root.d.ts → built-ins/project-root.d.ts} +0 -0
  246. /package/dist/{suggest.d.ts → command-line/suggest.d.ts} +0 -0
  247. /package/dist/{suggest.js → command-line/suggest.js} +0 -0
  248. /package/dist/{tokenize.d.ts → command-line/tokenize.d.ts} +0 -0
  249. /package/dist/{tokenize.js → command-line/tokenize.js} +0 -0
  250. /package/dist/{agent.js → context/agent.js} +0 -0
  251. /package/dist/{files.d.ts → context/files.d.ts} +0 -0
@@ -0,0 +1,83 @@
1
+ const BLANK = /\s/;
2
+ // Unquoted, these make the line more than one command with its words, so its words can't be checked.
3
+ const SHELL_SYNTAX = new Set(["|", "&", ";", ">", "(", ")", "$", "`"]);
4
+ const STDIN_REDIRECT = "<";
5
+ // Inside double quotes a backslash escapes only these, as in POSIX sh.
6
+ const DOUBLE_QUOTE_ESCAPES = new Set(["$", "`", '"', "\\"]);
7
+ function quotedFrom(line, start, quote) {
8
+ let word = "";
9
+ for (let index = start; index < line.length; index += 1) {
10
+ const char = line[index] ?? "";
11
+ if (char === quote)
12
+ return { word, end: index + 1 };
13
+ const next = line[index + 1];
14
+ if (quote === '"' && char === "\\" && next !== undefined && DOUBLE_QUOTE_ESCAPES.has(next)) {
15
+ word += next;
16
+ index += 1;
17
+ }
18
+ else {
19
+ word += char;
20
+ }
21
+ }
22
+ return undefined;
23
+ }
24
+ function skipBlanks(line, start) {
25
+ let index = start;
26
+ while (BLANK.test(line[index] ?? ""))
27
+ index += 1;
28
+ return index;
29
+ }
30
+ function isBoundary(char) {
31
+ return BLANK.test(char) || char === STDIN_REDIRECT || SHELL_SYNTAX.has(char);
32
+ }
33
+ // One word from `start` up to the next blank or shell operator, its quotes and escapes removed.
34
+ function wordFrom(line, start) {
35
+ let word = "";
36
+ let index = start;
37
+ while (index < line.length && !isBoundary(line[index] ?? "")) {
38
+ const char = line[index] ?? "";
39
+ if (char === "'" || char === '"') {
40
+ const quoted = quotedFrom(line, index + 1, char);
41
+ if (quoted === undefined)
42
+ return { reason: `its ${char} is never closed` };
43
+ word += quoted.word;
44
+ index = quoted.end;
45
+ }
46
+ else if (char === "\\") {
47
+ word += line[index + 1] ?? "";
48
+ index += 2;
49
+ }
50
+ else {
51
+ word += char;
52
+ index += 1;
53
+ }
54
+ }
55
+ return { word, end: index };
56
+ }
57
+ /**
58
+ * The words a POSIX shell would pass for `line`, without the file of a `< file` redirect; a reason
59
+ * instead when a quote is left open or the line uses other shell syntax.
60
+ */
61
+ export function shellWords(line) {
62
+ const words = [];
63
+ let index = skipBlanks(line, 0);
64
+ while (index < line.length) {
65
+ const redirect = line[index] === STDIN_REDIRECT;
66
+ if (redirect)
67
+ index = skipBlanks(line, index + 1);
68
+ const char = line[index];
69
+ if (char === undefined || char === STDIN_REDIRECT) {
70
+ return { ok: false, reason: "its `<` names no file" };
71
+ }
72
+ if (SHELL_SYNTAX.has(char))
73
+ return { ok: false, reason: `it uses the shell's \`${char}\`` };
74
+ const scanned = wordFrom(line, index);
75
+ if ("reason" in scanned)
76
+ return { ok: false, reason: scanned.reason };
77
+ if (!redirect)
78
+ words.push(scanned.word);
79
+ index = skipBlanks(line, scanned.end);
80
+ }
81
+ return { ok: true, words };
82
+ }
83
+ //# sourceMappingURL=shell-words.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-words.js","sourceRoot":"","sources":["../../src/command-line/shell-words.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/command-line/suggest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../../src/command-line/tokenize.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { UsageError } from "./errors.js";
1
+ import { UsageError } from "../errors.js";
2
2
  import { type Invocation } from "./invocation.js";
3
3
  export declare const INVALID_INPUT = "INVALID_INPUT";
4
4
  export declare const UNKNOWN_OPTION = "UNKNOWN_OPTION";
@@ -1,6 +1,6 @@
1
- import { UsageError } from "./errors.js";
1
+ import { STDIN_OPERAND } from "../context/stdin.js";
2
+ import { UsageError } from "../errors.js";
2
3
  import { commandLineOf, commandLineRenaming } from "./invocation.js";
3
- import { STDIN_OPERAND } from "./stdin.js";
4
4
  export const INVALID_INPUT = "INVALID_INPUT";
5
5
  export const UNKNOWN_OPTION = "UNKNOWN_OPTION";
6
6
  export const UNKNOWN_COMMAND = "UNKNOWN_COMMAND";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/command-line/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAmB,MAAM,iBAAiB,CAAC;AAEtF,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAUjD,SAAS,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAW;IAChF,OAAO,IAAI,UAAU,CAAC;QACpB,IAAI;QACJ,OAAO,EAAE,GAAG,OAAO,UAAU,WAAW,IAAI;QAC5C,IAAI,EACF,WAAW,CAAC,MAAM,KAAK,CAAC;YACtB,CAAC,CAAC,SAAS,WAAW,wBAAwB,MAAM,EAAE;YACtD,CAAC,CAAC,gBAAgB,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;KAC3F,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,UAAsB,EACtB,IAAY,EACZ,WAA8B;IAE9B,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,mBAAmB,IAAI,GAAG;QACnC,WAAW;QACX,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACpC,mBAAmB,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CACzD;QACD,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,cAAc,CAC5B,WAAmB,EACnB,UAAsB,EACtB,IAAY;IAEZ,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtF,OAAO,IAAI,UAAU,CAAC;QACpB,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,mBAAmB,IAAI,WAAW,WAAW,IAAI;QAC1D,IAAI,EACF,wFAAwF;YACxF,KAAK,SAAS,yCAAyC;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,IAAY,EACZ,WAA8B;IAE9B,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,oBAAoB,IAAI,GAAG;QACpC,WAAW;QACX,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,WAAW,IAAI,UAAU,EAAE,CAAC;QAC5E,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,OAAe;IACpE,OAAO,IAAI,UAAU,CAAC;QACpB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,SAAS,WAAW,qCAAqC;KAChE,CAAC,CAAC;AACL,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type * as z from "zod";
2
+ import { type StandardFlag } from "./command-line/flags.js";
3
+ import { type InputField } from "./command-line/input.js";
2
4
  import { type Command, type Commands, type Example } from "./define.js";
3
- import { type StandardFlag } from "./flags.js";
4
- import { type InputField } from "./input.js";
5
5
  import { type ListSpec } from "./list.js";
6
6
  /** Everything help, help JSON and input parsing know about one Command. */
7
7
  export interface CommandSpec {
@@ -17,6 +17,7 @@ export interface CommandSpec {
17
17
  readonly hidden: boolean;
18
18
  readonly operator: boolean;
19
19
  readonly effect: Command["effect"];
20
+ /** The examples as help prints them, each starting with the Run-as. */
20
21
  readonly examples: readonly Example[];
21
22
  readonly args: readonly InputField[];
22
23
  /** The options the author declared; Standard flags are kept apart in `standardFlags`. */
@@ -33,11 +34,19 @@ export interface GroupSpec {
33
34
  export type SpecNode = CommandSpec | GroupSpec;
34
35
  /** The group's Commands and groups that help and suggestions may name: hidden Commands left out. */
35
36
  export declare function visibleCommands({ commands }: GroupSpec): Readonly<Record<string, SpecNode>>;
37
+ /** The words that label a Command in errors and spill files: its path, or the CLI's name for a single-Command CLI. */
38
+ export declare function commandLabel(path: readonly string[], cliName: string): readonly string[];
39
+ /** How the CLI is named: in an example's line, and in the lines it gives its caller. */
40
+ export interface CliNames {
41
+ readonly name: string;
42
+ readonly runAs: string;
43
+ }
36
44
  interface SpecPlace {
37
45
  readonly path: readonly string[];
38
46
  readonly builtIn: boolean;
47
+ readonly names: CliNames;
39
48
  }
40
- export declare function commandSpec(commandLine: string, command: Command, { path, builtIn }?: SpecPlace): CommandSpec;
49
+ export declare function commandSpec(commandLine: string, command: Command, { path, builtIn, names }: SpecPlace): CommandSpec;
41
50
  /** The root group of a multi-Command CLI: the author's Commands, then the Built-in Commands. */
42
- export declare function groupSpec(commandLine: string, commands: Commands, builtIns: Commands): GroupSpec;
51
+ export declare function groupSpec(names: CliNames, commands: Commands, builtIns: Commands): GroupSpec;
43
52
  export {};
@@ -1,12 +1,16 @@
1
+ import { standardFlagsFor } from "./command-line/flags.js";
2
+ import { argFields, optionFields } from "./command-line/input.js";
1
3
  import { isCommand } from "./define.js";
2
- import { standardFlagsFor } from "./flags.js";
3
- import { argFields, optionFields } from "./input.js";
4
4
  import { listSpec } from "./list.js";
5
5
  import { hasPlan } from "./planned.js";
6
6
  /** The group's Commands and groups that help and suggestions may name: hidden Commands left out. */
7
7
  export function visibleCommands({ commands }) {
8
8
  return Object.fromEntries(Object.entries(commands).filter(([, node]) => node.kind === "group" || !node.hidden));
9
9
  }
10
+ /** The words that label a Command in errors and spill files: its path, or the CLI's name for a single-Command CLI. */
11
+ export function commandLabel(path, cliName) {
12
+ return path.length === 0 ? [cliName] : path;
13
+ }
10
14
  function declaredOf(command) {
11
15
  if (!hasPlan(command)) {
12
16
  return { outputs: false, force: undefined, cost: false };
@@ -17,8 +21,14 @@ function declaredOf(command) {
17
21
  cost: command.cost !== undefined,
18
22
  };
19
23
  }
20
- const SINGLE_COMMAND = { path: [], builtIn: false };
21
- export function commandSpec(commandLine, command, { path, builtIn } = SINGLE_COMMAND) {
24
+ // An example that does not start with the CLI's name prints as written, for `checkExamples` to report.
25
+ function withRunAs(example, { name, runAs }) {
26
+ const { command } = example;
27
+ return command === name || command.startsWith(`${name} `)
28
+ ? { ...example, command: `${runAs}${command.slice(name.length)}` }
29
+ : example;
30
+ }
31
+ export function commandSpec(commandLine, command, { path, builtIn, names }) {
22
32
  const list = command.rows === undefined ? undefined : listSpec(command.rows);
23
33
  return {
24
34
  kind: "command",
@@ -31,7 +41,7 @@ export function commandSpec(commandLine, command, { path, builtIn } = SINGLE_COM
31
41
  hidden: command.hidden === true,
32
42
  operator: command.operator === true,
33
43
  effect: command.effect,
34
- examples: command.examples,
44
+ examples: command.examples.map((example) => withRunAs(example, names)),
35
45
  args: argFields(command.args),
36
46
  options: optionFields(command.options),
37
47
  standardFlags: standardFlagsFor(command.effect, declaredOf(command), list),
@@ -43,16 +53,17 @@ function group(commandLine, commands) {
43
53
  return { kind: "group", commandLine, commands };
44
54
  }
45
55
  /** The root group of a multi-Command CLI: the author's Commands, then the Built-in Commands. */
46
- export function groupSpec(commandLine, commands, builtIns) {
47
- return group(commandLine, {
48
- ...specsOf(commandLine, commands, { path: [], builtIn: false }),
49
- ...specsOf(commandLine, builtIns, { path: [], builtIn: true }),
56
+ export function groupSpec(names, commands, builtIns) {
57
+ const { runAs } = names;
58
+ return group(runAs, {
59
+ ...specsOf(runAs, commands, { path: [], builtIn: false, names }),
60
+ ...specsOf(runAs, builtIns, { path: [], builtIn: true, names }),
50
61
  });
51
62
  }
52
- function specsOf(commandLine, commands, { path, builtIn }) {
63
+ function specsOf(commandLine, commands, { path, builtIn, names }) {
53
64
  return Object.fromEntries(Object.entries(commands).map(([key, node]) => [
54
65
  key,
55
- specOf(`${commandLine} ${key}`, node, { path: [...path, key], builtIn }),
66
+ specOf(`${commandLine} ${key}`, node, { path: [...path, key], builtIn, names }),
56
67
  ]));
57
68
  }
58
69
  function specOf(commandLine, node, place) {
@@ -1 +1 @@
1
- {"version":3,"file":"command-spec.js","sourceRoot":"","sources":["../src/command-spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-spec.js","sourceRoot":"","sources":["../src/command-spec.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Env } from "./context.js";
1
+ import type { Env } from "../context.js";
2
2
  /**
3
3
  * Whether a Coding agent, not a person, is running the Agent CLI. Some Coding agents run commands
4
4
  * in a PTY, so a TTY alone doesn't mean a person is watching.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/context/agent.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;AACvE,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;AAElF,oEAAoE;AACpE,qGAAqG;AACrG,MAAM,OAAO,GAAuC;IAClD,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC5C,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;IACtB,KAAK,CAAC,eAAe,CAAC;IACtB,KAAK,CAAC,UAAU,CAAC;IACjB,KAAK,CAAC,iBAAiB,CAAC;IACxB,KAAK,CAAC,YAAY,CAAC;IACnB,KAAK,CAAC,aAAa,CAAC;IACpB,KAAK,CAAC,UAAU,CAAC;IACjB,KAAK,CAAC,mBAAmB,CAAC;IAC1B,KAAK,CAAC,eAAe,CAAC;IACtB,KAAK,CAAC,SAAS,CAAC;IAChB,KAAK,CAAC,uBAAuB,CAAC;IAC9B,KAAK,CAAC,YAAY,CAAC;IACnB,KAAK,CAAC,aAAa,CAAC;IACpB,KAAK,CAAC,iBAAiB,CAAC;IACxB,KAAK,CAAC,cAAc,CAAC;IACrB,MAAM,CAAC,4BAA4B,EAAE,YAAY,CAAC;IAClD,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;IAC9B,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrF,KAAK,CAAC,gBAAgB,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,GAAQ;IAC9B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC"}
@@ -1,9 +1,9 @@
1
- import { type Invocation } from "./invocation.js";
1
+ import type { Context } from "../context.js";
2
2
  export declare const CONFIRMATION_REQUIRED = "CONFIRMATION_REQUIRED";
3
3
  export declare const CONFIRMATION_MISMATCH = "CONFIRMATION_MISMATCH";
4
4
  export interface Confirmation {
5
- readonly invocation: Invocation;
5
+ readonly rerun: Context["rerun"];
6
6
  readonly commandLine: string;
7
7
  readonly given: string | undefined;
8
8
  }
9
- export declare function checkConfirmation({ invocation, commandLine, given }: Confirmation, expected: string): void;
9
+ export declare function checkConfirmation({ rerun, commandLine, given }: Confirmation, expected: string): void;
@@ -1,28 +1,26 @@
1
- import { UsageError } from "./errors.js";
2
- import { CONFIRM_FLAG } from "./flags.js";
3
- import { commandLineOf } from "./invocation.js";
1
+ import { CONFIRM_FLAG } from "../command-line/flags.js";
2
+ import { UsageError } from "../errors.js";
4
3
  export const CONFIRMATION_REQUIRED = "CONFIRMATION_REQUIRED";
5
4
  export const CONFIRMATION_MISMATCH = "CONFIRMATION_MISMATCH";
6
- export function checkConfirmation({ invocation, commandLine, given }, expected) {
5
+ export function checkConfirmation({ rerun, commandLine, given }, expected) {
7
6
  if (given === expected) {
8
7
  return;
9
8
  }
10
- const confirmed = commandLineOf(invocation, {
11
- remove: [CONFIRM_FLAG.flag],
12
- add: [CONFIRM_FLAG.flag, expected],
13
- });
14
- const hint = `to confirm, run \`${confirmed}\``;
9
+ const advice = {
10
+ hint: "to confirm, run the Next step",
11
+ next: [rerun({ remove: [CONFIRM_FLAG.flag], add: [CONFIRM_FLAG.flag, expected] })],
12
+ };
15
13
  if (given === undefined) {
16
14
  throw new UsageError({
17
15
  code: CONFIRMATION_REQUIRED,
18
16
  message: `\`${commandLine}\` is destructive and needs ${CONFIRM_FLAG.flag}`,
19
- hint,
17
+ ...advice,
20
18
  });
21
19
  }
22
20
  throw new UsageError({
23
21
  code: CONFIRMATION_MISMATCH,
24
22
  message: `${CONFIRM_FLAG.flag} ${JSON.stringify(given)} does not match the target of \`${commandLine}\``,
25
- hint,
23
+ ...advice,
26
24
  });
27
25
  }
28
26
  //# sourceMappingURL=confirm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/context/confirm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAe,UAAU,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAC7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAQ7D,MAAM,UAAU,iBAAiB,CAC/B,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAgB,EAC3C,QAAgB;IAEhB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAW;QACrB,IAAI,EAAE,+BAA+B;QACrC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;KACnF,CAAC;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,UAAU,CAAC;YACnB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,KAAK,WAAW,+BAA+B,YAAY,CAAC,IAAI,EAAE;YAC3E,GAAG,MAAM;SACV,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,UAAU,CAAC;QACnB,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,GAAG,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,mCAAmC,WAAW,IAAI;QACxG,GAAG,MAAM;KACV,CAAC,CAAC;AACL,CAAC"}
@@ -1,9 +1,9 @@
1
- import { type Invocation } from "./invocation.js";
1
+ import type { Context } from "../context.js";
2
2
  export declare const NOT_CONFIRMED = "NOT_CONFIRMED";
3
3
  export interface Approval {
4
- readonly invocation: Invocation;
4
+ readonly rerun: Context["rerun"];
5
5
  readonly commandLine: string;
6
6
  readonly yes: boolean;
7
7
  }
8
8
  /** Refuses a run whose Plan states a cost the caller has not approved with `--yes`. */
9
- export declare function checkCost({ invocation, commandLine, yes }: Approval, cost: string | undefined): void;
9
+ export declare function checkCost({ rerun, commandLine, yes }: Approval, cost: string | undefined): void;
@@ -0,0 +1,16 @@
1
+ import { YES_FLAG } from "../command-line/flags.js";
2
+ import { CliError } from "../errors.js";
3
+ export const NOT_CONFIRMED = "NOT_CONFIRMED";
4
+ /** Refuses a run whose Plan states a cost the caller has not approved with `--yes`. */
5
+ export function checkCost({ rerun, commandLine, yes }, cost) {
6
+ if (cost === undefined || yes) {
7
+ return;
8
+ }
9
+ throw new CliError({
10
+ code: NOT_CONFIRMED,
11
+ message: `\`${commandLine}\` needs ${YES_FLAG.flag}: ${cost}`,
12
+ hint: "to approve the cost, run the Next step",
13
+ next: [rerun({ add: [YES_FLAG.flag] })],
14
+ });
15
+ }
16
+ //# sourceMappingURL=cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/context/cost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAQ7C,uFAAuF;AACvF,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAY,EAAE,IAAwB;IACvF,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,MAAM,IAAI,QAAQ,CAAC;QACjB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,KAAK,WAAW,YAAY,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE;QAC7D,IAAI,EAAE,wCAAwC;QAC9C,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACxC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type Command, type Commands } from "../define.js";
2
+ /**
3
+ * What the CLI declares itself (`own`) and every Command under `commands` declares, each name once,
4
+ * for a `doctor` row: a Command requires only its own, but `doctor` checks them all.
5
+ */
6
+ export declare function declaredIn<Need extends {
7
+ readonly name: string;
8
+ }>(own: readonly Need[], commands: Commands, needsOf: (command: Command) => readonly Need[] | undefined): Need[];
@@ -0,0 +1,10 @@
1
+ import { isCommand } from "../define.js";
2
+ /**
3
+ * What the CLI declares itself (`own`) and every Command under `commands` declares, each name once,
4
+ * for a `doctor` row: a Command requires only its own, but `doctor` checks them all.
5
+ */
6
+ export function declaredIn(own, commands, needsOf) {
7
+ const walk = (node) => isCommand(node) ? [...(needsOf(node) ?? [])] : Object.values(node).flatMap(walk);
8
+ return [...new Map([...own, ...walk(commands)].map((need) => [need.name, need])).values()];
9
+ }
10
+ //# sourceMappingURL=declared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declared.js","sourceRoot":"","sources":["../../src/context/declared.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtE;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,GAAoB,EACpB,QAAkB,EAClB,OAA0D;IAE1D,MAAM,IAAI,GAAG,CAAC,IAAwB,EAAU,EAAE,CAChD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7F,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { Env } from "./context.js";
1
+ import type { Env } from "../context.js";
2
+ import type { Rerun } from "../next-step.js";
2
3
  export declare const PERMISSION_DENIED = "PERMISSION_DENIED";
3
4
  export declare const DISK_FULL = "DISK_FULL";
4
5
  export declare const NOT_FOUND = "NOT_FOUND";
@@ -11,8 +12,8 @@ export interface FileAccess {
11
12
  }
12
13
  export type FileError = (error: unknown, at: FileAccess) => unknown;
13
14
  export interface ErrnoScope {
14
- /** The caller's command line, ready to paste. */
15
- readonly callerLine: string;
15
+ /** The caller's own line, the Next step once the cause is fixed. */
16
+ readonly rerun: Rerun;
16
17
  readonly env: Env;
17
18
  readonly platform: NodeJS.Platform;
18
19
  }
@@ -1,5 +1,5 @@
1
+ import { CliError, errnoOf } from "../errors.js";
1
2
  import { isAgent } from "./agent.js";
2
- import { CliError, errnoOf } from "./errors.js";
3
3
  export const PERMISSION_DENIED = "PERMISSION_DENIED";
4
4
  export const DISK_FULL = "DISK_FULL";
5
5
  export const NOT_FOUND = "NOT_FOUND";
@@ -7,16 +7,22 @@ export const ALREADY_EXISTS = "ALREADY_EXISTS";
7
7
  export const NOT_A_FILE = "NOT_A_FILE";
8
8
  // The same errnos happen with no sandbox at all (a root-owned folder), so only a detected agent is
9
9
  // pointed at its sandbox. Native Windows has no such sandbox: there a program holding the file denies it.
10
- function permissionHint({ path, access, callerLine, env, platform }) {
10
+ function permissionAdvice({ path, access, rerun, env, platform }) {
11
11
  if (platform === "win32") {
12
- return `a program may hold ${path} open: close it, then run \`${callerLine}\` again`;
12
+ return {
13
+ hint: `a program may hold ${path} open: close it, then run the Next step`,
14
+ next: [rerun],
15
+ };
13
16
  }
14
17
  if (!isAgent(env))
15
- return `check the permissions of ${path} and its folder`;
18
+ return { hint: `check the permissions of ${path} and its folder` };
16
19
  const allow = access === "read"
17
20
  ? `to allow reading ${path} in the sandbox`
18
21
  : `to allow ${path} in the sandbox's write list`;
19
- return `your sandbox may block it: ask your user to run \`! ${callerLine}\`, or ${allow}`;
22
+ return {
23
+ hint: `your sandbox may block it: ask your user to type ! then the Next step, or ${allow}`,
24
+ next: [rerun],
25
+ };
20
26
  }
21
27
  export function fileErrorOf(scope) {
22
28
  return (error, at) => classifyErrno(error, { ...at, ...scope });
@@ -31,14 +37,15 @@ function classifyErrno(error, context) {
31
37
  return new CliError({
32
38
  code: PERMISSION_DENIED,
33
39
  message: `permission denied: ${path}`,
34
- hint: permissionHint(context),
40
+ ...permissionAdvice(context),
35
41
  }, { cause: error });
36
42
  case "ENOSPC":
37
43
  case "EDQUOT":
38
44
  return new CliError({
39
45
  code: DISK_FULL,
40
46
  message: `no space left on the disk holding ${path}`,
41
- hint: `free space on that disk, then run \`${context.callerLine}\` again`,
47
+ hint: "free space on that disk, then run the Next step",
48
+ next: [context.rerun],
42
49
  }, { cause: error });
43
50
  case "ENOENT":
44
51
  case "ENOTDIR":
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errno.js","sourceRoot":"","sources":["../../src/context/errno.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { access, chmod, link, mkdir, open, readdir, readFile, realpath, rename, rm, stat, writeFile, } from "node:fs/promises";
2
2
  import { basename, dirname, join, resolve } from "node:path";
3
3
  import { setTimeout as sleep } from "node:timers/promises";
4
- import { errnoOf, isMissingFile, isNothingThere } from "./errors.js";
4
+ import { errnoOf, isMissingFile, isNothingThere } from "../errors.js";
5
5
  const TEMP_FILE = /^\..+\.agent-cli-(\d+)\.tmp$/;
6
6
  /** Where the Runtime writes `path` before moving it into place; a dead writer's is swept. */
7
7
  export function tempPathOf(path) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/context/files.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,41 @@
1
- import { type Clock } from "./clock.js";
1
+ import { type Clock } from "../clock.js";
2
+ import { type Advice } from "../errors.js";
3
+ import type { Rerun } from "../next-step.js";
2
4
  export declare const INTERRUPTED = "INTERRUPTED";
3
5
  export declare const DEADLINE_EXCEEDED = "DEADLINE_EXCEEDED";
4
6
  /** How long an interrupted Command may take to settle before the run ends without it. */
5
7
  export declare const GRACE_MS = 3000;
8
+ export interface DeadlineOptions {
9
+ readonly ignoreStop?: boolean;
10
+ }
6
11
  export interface RunControlOptions {
7
12
  readonly commandLine: string;
8
- /** The caller's command line, ready to paste, that the hints ask to run again. */
9
- readonly callerLine: string;
13
+ /** The caller's own line, the Next step of an interrupt or a missed deadline. */
14
+ readonly rerun: Rerun;
10
15
  /** The caller's signal, whose abort interrupts the run. */
11
16
  readonly outer: AbortSignal | undefined;
12
17
  readonly clock: Clock;
13
18
  readonly progress: (message: string) => void;
14
- /** The whole run's deadline and the hint, naming the resume command line, it ends with. */
19
+ /** The whole run's deadline and the advice, naming the resume Next step, it ends with. */
15
20
  readonly runDeadline: {
16
21
  readonly ms: number;
17
- readonly hint: () => string;
22
+ readonly advice: () => Advice;
18
23
  } | undefined;
19
24
  }
20
25
  /** One Command run's cancellation: its signal, its deadlines and the steps it must finish. */
21
26
  export declare class RunControl {
22
27
  #private;
23
28
  readonly signal: AbortSignal;
24
- constructor({ commandLine, callerLine, outer, clock, progress, runDeadline }: RunControlOptions);
25
- deadline(ms: number): AbortSignal;
26
- timeout(ms: number): AbortSignal;
29
+ constructor({ commandLine, rerun, outer, clock, progress, runDeadline }: RunControlOptions);
30
+ deadline(ms: number, options?: DeadlineOptions): AbortSignal;
27
31
  runToEnd<T>(name: string, work: () => Promise<T>): Promise<T>;
28
32
  /** Waits for the Command, its must-finish steps, and no longer than the grace once interrupted. */
29
33
  settle<T>(work: Promise<T>): Promise<T>;
30
34
  /**
31
35
  * The error a run ends with: an interrupt or the run deadline outranks what the Command threw,
32
36
  * unless the Command threw its own `INTERRUPTED`, saying what it finished before it stopped.
33
- * Otherwise each leaf that is not a `CliError` and whose cause chain holds a deadline's or timeout's
34
- * abort is reported as that abort, so a declared error keeps its own code.
37
+ * Otherwise each leaf that is not a `CliError` and whose cause chain holds a deadline's abort is
38
+ * reported as that abort, so a declared error keeps its own code.
35
39
  */
36
40
  errorAfter(error: unknown): unknown;
37
41
  /** Stops the run's timers and its hold on the caller's signal, for a run that never settles. */