@hs-x/cli 0.3.6 → 0.4.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 (211) hide show
  1. package/README.md +126 -0
  2. package/dist/cli/index.d.ts.map +1 -1
  3. package/dist/cli/index.js +58 -59
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/cli/kit.d.ts.map +1 -1
  6. package/dist/cli/kit.js +1 -1
  7. package/dist/cli/kit.js.map +1 -1
  8. package/dist/cloudflare-auth.d.ts +19 -0
  9. package/dist/cloudflare-auth.d.ts.map +1 -1
  10. package/dist/cloudflare-auth.js +83 -2
  11. package/dist/cloudflare-auth.js.map +1 -1
  12. package/dist/cloudflare-oauth.d.ts.map +1 -1
  13. package/dist/cloudflare-oauth.js +18 -19
  14. package/dist/cloudflare-oauth.js.map +1 -1
  15. package/dist/cloudflare-scoped-resource.d.ts +41 -0
  16. package/dist/cloudflare-scoped-resource.d.ts.map +1 -0
  17. package/dist/cloudflare-scoped-resource.js +74 -0
  18. package/dist/cloudflare-scoped-resource.js.map +1 -0
  19. package/dist/command-catalog.d.ts +13 -0
  20. package/dist/command-catalog.d.ts.map +1 -0
  21. package/dist/command-catalog.js +50 -0
  22. package/dist/command-catalog.js.map +1 -0
  23. package/dist/commands/completion.d.ts.map +1 -1
  24. package/dist/commands/completion.js +287 -47
  25. package/dist/commands/completion.js.map +1 -1
  26. package/dist/commands/connect.d.ts.map +1 -1
  27. package/dist/commands/connect.js +274 -38
  28. package/dist/commands/connect.js.map +1 -1
  29. package/dist/commands/control-plane-read.d.ts +31 -3
  30. package/dist/commands/control-plane-read.d.ts.map +1 -1
  31. package/dist/commands/control-plane-read.js +136 -37
  32. package/dist/commands/control-plane-read.js.map +1 -1
  33. package/dist/commands/deploy-retry.d.ts +20 -0
  34. package/dist/commands/deploy-retry.d.ts.map +1 -0
  35. package/dist/commands/deploy-retry.js +106 -0
  36. package/dist/commands/deploy-retry.js.map +1 -0
  37. package/dist/commands/deploy.d.ts +16 -8
  38. package/dist/commands/deploy.d.ts.map +1 -1
  39. package/dist/commands/deploy.js +1027 -373
  40. package/dist/commands/deploy.js.map +1 -1
  41. package/dist/commands/dev.d.ts +19 -1
  42. package/dist/commands/dev.d.ts.map +1 -1
  43. package/dist/commands/dev.js +1378 -88
  44. package/dist/commands/dev.js.map +1 -1
  45. package/dist/commands/doctor.d.ts.map +1 -1
  46. package/dist/commands/doctor.js +27 -10
  47. package/dist/commands/doctor.js.map +1 -1
  48. package/dist/commands/flags.d.ts +9 -4
  49. package/dist/commands/flags.d.ts.map +1 -1
  50. package/dist/commands/flags.js +208 -80
  51. package/dist/commands/flags.js.map +1 -1
  52. package/dist/commands/help-command.d.ts.map +1 -1
  53. package/dist/commands/help-command.js +177 -86
  54. package/dist/commands/help-command.js.map +1 -1
  55. package/dist/commands/init.d.ts.map +1 -1
  56. package/dist/commands/init.js +5 -0
  57. package/dist/commands/init.js.map +1 -1
  58. package/dist/commands/link.d.ts.map +1 -1
  59. package/dist/commands/link.js +74 -15
  60. package/dist/commands/link.js.map +1 -1
  61. package/dist/commands/project.d.ts +107 -0
  62. package/dist/commands/project.d.ts.map +1 -0
  63. package/dist/commands/project.js +586 -0
  64. package/dist/commands/project.js.map +1 -0
  65. package/dist/commands/secrets.d.ts +2 -2
  66. package/dist/commands/status.d.ts.map +1 -1
  67. package/dist/commands/status.js +15 -5
  68. package/dist/commands/status.js.map +1 -1
  69. package/dist/commands/validate.d.ts +19 -0
  70. package/dist/commands/validate.d.ts.map +1 -1
  71. package/dist/commands/validate.js +26 -7
  72. package/dist/commands/validate.js.map +1 -1
  73. package/dist/constants.d.ts +1 -1
  74. package/dist/constants.js +1 -1
  75. package/dist/control-plane-tenant-provisioning.d.ts +24 -0
  76. package/dist/control-plane-tenant-provisioning.d.ts.map +1 -0
  77. package/dist/control-plane-tenant-provisioning.js +85 -0
  78. package/dist/control-plane-tenant-provisioning.js.map +1 -0
  79. package/dist/deploy-targets.d.ts +24 -0
  80. package/dist/deploy-targets.d.ts.map +1 -0
  81. package/dist/deploy-targets.js +38 -0
  82. package/dist/deploy-targets.js.map +1 -0
  83. package/dist/dev/account-selection.d.ts +16 -0
  84. package/dist/dev/account-selection.d.ts.map +1 -0
  85. package/dist/dev/account-selection.js +22 -0
  86. package/dist/dev/account-selection.js.map +1 -0
  87. package/dist/dev/browser-log-bridge.d.ts +32 -0
  88. package/dist/dev/browser-log-bridge.d.ts.map +1 -0
  89. package/dist/dev/browser-log-bridge.js +156 -0
  90. package/dist/dev/browser-log-bridge.js.map +1 -0
  91. package/dist/dev/compat-shim.d.ts +3 -3
  92. package/dist/dev/compat-shim.d.ts.map +1 -1
  93. package/dist/dev/compat-shim.js +29 -4
  94. package/dist/dev/compat-shim.js.map +1 -1
  95. package/dist/dev/component-selection.d.ts +25 -0
  96. package/dist/dev/component-selection.d.ts.map +1 -0
  97. package/dist/dev/component-selection.js +79 -0
  98. package/dist/dev/component-selection.js.map +1 -0
  99. package/dist/dev/console-capture.d.ts +18 -0
  100. package/dist/dev/console-capture.d.ts.map +1 -0
  101. package/dist/dev/console-capture.js +57 -0
  102. package/dist/dev/console-capture.js.map +1 -0
  103. package/dist/dev/event-bus.d.ts +1 -1
  104. package/dist/dev/event-bus.js +1 -1
  105. package/dist/dev/frontend-log-relay.d.ts +27 -0
  106. package/dist/dev/frontend-log-relay.d.ts.map +1 -0
  107. package/dist/dev/frontend-log-relay.js +102 -0
  108. package/dist/dev/frontend-log-relay.js.map +1 -0
  109. package/dist/dev/invoke.d.ts +3 -4
  110. package/dist/dev/invoke.d.ts.map +1 -1
  111. package/dist/dev/invoke.js +9 -4
  112. package/dist/dev/invoke.js.map +1 -1
  113. package/dist/dev/keyboard.d.ts +1 -0
  114. package/dist/dev/keyboard.d.ts.map +1 -1
  115. package/dist/dev/keyboard.js +9 -3
  116. package/dist/dev/keyboard.js.map +1 -1
  117. package/dist/dev/log-server.js +3 -0
  118. package/dist/dev/log-server.js.map +1 -1
  119. package/dist/dev/loopback-http-listener.d.ts +18 -0
  120. package/dist/dev/loopback-http-listener.d.ts.map +1 -0
  121. package/dist/dev/loopback-http-listener.js +91 -0
  122. package/dist/dev/loopback-http-listener.js.map +1 -0
  123. package/dist/dev/managed-session.d.ts +124 -0
  124. package/dist/dev/managed-session.d.ts.map +1 -0
  125. package/dist/dev/managed-session.js +597 -0
  126. package/dist/dev/managed-session.js.map +1 -0
  127. package/dist/dev/port-process.d.ts +21 -0
  128. package/dist/dev/port-process.d.ts.map +1 -0
  129. package/dist/dev/port-process.js +145 -0
  130. package/dist/dev/port-process.js.map +1 -0
  131. package/dist/dev/session-manager.d.ts +11 -1
  132. package/dist/dev/session-manager.d.ts.map +1 -1
  133. package/dist/dev/session-manager.js +65 -14
  134. package/dist/dev/session-manager.js.map +1 -1
  135. package/dist/dev/stream-event-format.d.ts +14 -0
  136. package/dist/dev/stream-event-format.d.ts.map +1 -0
  137. package/dist/dev/stream-event-format.js +262 -0
  138. package/dist/dev/stream-event-format.js.map +1 -0
  139. package/dist/dev/stream-filter.d.ts.map +1 -1
  140. package/dist/dev/stream-filter.js +16 -1
  141. package/dist/dev/stream-filter.js.map +1 -1
  142. package/dist/dev/stream-renderer.d.ts +4 -2
  143. package/dist/dev/stream-renderer.d.ts.map +1 -1
  144. package/dist/dev/stream-renderer.js +224 -84
  145. package/dist/dev/stream-renderer.js.map +1 -1
  146. package/dist/errors-registry.d.ts.map +1 -1
  147. package/dist/errors-registry.js +246 -0
  148. package/dist/errors-registry.js.map +1 -1
  149. package/dist/help.d.ts.map +1 -1
  150. package/dist/help.js +20 -3
  151. package/dist/help.js.map +1 -1
  152. package/dist/hubspot-app-logs.d.ts +38 -5
  153. package/dist/hubspot-app-logs.d.ts.map +1 -1
  154. package/dist/hubspot-app-logs.js +88 -17
  155. package/dist/hubspot-app-logs.js.map +1 -1
  156. package/dist/hubspot-auth.d.ts +19 -1
  157. package/dist/hubspot-auth.d.ts.map +1 -1
  158. package/dist/hubspot-auth.js +228 -83
  159. package/dist/hubspot-auth.js.map +1 -1
  160. package/dist/hubspot-developer-client.d.ts +87 -0
  161. package/dist/hubspot-developer-client.d.ts.map +1 -1
  162. package/dist/hubspot-developer-client.js +232 -1
  163. package/dist/hubspot-developer-client.js.map +1 -1
  164. package/dist/hubspot-project-archive.d.ts +21 -0
  165. package/dist/hubspot-project-archive.d.ts.map +1 -0
  166. package/dist/hubspot-project-archive.js +281 -0
  167. package/dist/hubspot-project-archive.js.map +1 -0
  168. package/dist/hubspot-project.d.ts +32 -0
  169. package/dist/hubspot-project.d.ts.map +1 -0
  170. package/dist/hubspot-project.js +269 -0
  171. package/dist/hubspot-project.js.map +1 -0
  172. package/dist/local-project-picker.js +1 -1
  173. package/dist/local-project-picker.js.map +1 -1
  174. package/dist/machine-artifact.d.ts +16 -0
  175. package/dist/machine-artifact.d.ts.map +1 -0
  176. package/dist/machine-artifact.js +18 -0
  177. package/dist/machine-artifact.js.map +1 -0
  178. package/dist/machine-id.d.ts +15 -0
  179. package/dist/machine-id.d.ts.map +1 -1
  180. package/dist/machine-id.js +53 -0
  181. package/dist/machine-id.js.map +1 -1
  182. package/dist/mutation-consent.d.ts +20 -0
  183. package/dist/mutation-consent.d.ts.map +1 -0
  184. package/dist/mutation-consent.js +9 -0
  185. package/dist/mutation-consent.js.map +1 -0
  186. package/dist/output-context.d.ts +3 -0
  187. package/dist/output-context.d.ts.map +1 -1
  188. package/dist/output-context.js +7 -1
  189. package/dist/output-context.js.map +1 -1
  190. package/dist/prompt.d.ts.map +1 -1
  191. package/dist/prompt.js +123 -48
  192. package/dist/prompt.js.map +1 -1
  193. package/dist/reporter/index.js +1 -1
  194. package/dist/reporter/index.js.map +1 -1
  195. package/dist/reporter/style.d.ts.map +1 -1
  196. package/dist/reporter/style.js +5 -0
  197. package/dist/reporter/style.js.map +1 -1
  198. package/dist/services/hubspot-dev-client.js +3 -0
  199. package/dist/services/hubspot-dev-client.js.map +1 -1
  200. package/dist/services/telemetry.d.ts +1 -2
  201. package/dist/services/telemetry.d.ts.map +1 -1
  202. package/dist/services/telemetry.js +1 -10
  203. package/dist/services/telemetry.js.map +1 -1
  204. package/dist/telemetry.d.ts.map +1 -1
  205. package/dist/telemetry.js +1 -7
  206. package/dist/telemetry.js.map +1 -1
  207. package/dist/tenant-data-plane-provisioning.d.ts +35 -0
  208. package/dist/tenant-data-plane-provisioning.d.ts.map +1 -0
  209. package/dist/tenant-data-plane-provisioning.js +38 -0
  210. package/dist/tenant-data-plane-provisioning.js.map +1 -0
  211. package/package.json +14 -12
@@ -0,0 +1,16 @@
1
+ import { Effect } from 'effect';
2
+ import type { ReporterApi } from './services/reporter.js';
3
+ export type TextArtifactKind = 'help' | 'shell-completion' | 'version';
4
+ export interface TextArtifact {
5
+ readonly artifact: TextArtifactKind;
6
+ readonly content_type: 'text/plain';
7
+ readonly content: string;
8
+ readonly topic?: string;
9
+ readonly shell?: 'bash' | 'zsh' | 'fish';
10
+ readonly version?: string;
11
+ }
12
+ /** Stable payload stored in the standard `{schema_version, command, ok, data}` envelope. */
13
+ export declare function textArtifact(artifact: TextArtifactKind, content: string, metadata?: Omit<TextArtifact, 'artifact' | 'content_type' | 'content'>): TextArtifact;
14
+ /** Emit a text artifact through an Effect-facing JSON reporter. */
15
+ export declare function emitReporterTextArtifact(reporter: ReporterApi, artifact: TextArtifact): Effect.Effect<void>;
16
+ //# sourceMappingURL=machine-artifact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-artifact.d.ts","sourceRoot":"","sources":["../src/machine-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,cAAc,GAAG,SAAS,CAAM,GACzE,YAAY,CAOd;AAED,mEAAmE;AACnE,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,YAAY,GACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAMrB"}
@@ -0,0 +1,18 @@
1
+ import { Effect } from 'effect';
2
+ /** Stable payload stored in the standard `{schema_version, command, ok, data}` envelope. */
3
+ export function textArtifact(artifact, content, metadata = {}) {
4
+ return {
5
+ artifact,
6
+ content_type: 'text/plain',
7
+ content,
8
+ ...metadata,
9
+ };
10
+ }
11
+ /** Emit a text artifact through an Effect-facing JSON reporter. */
12
+ export function emitReporterTextArtifact(reporter, artifact) {
13
+ return reporter.data(artifact).pipe(
14
+ // JSON reporters need an explicit terminal emission; runHandler only adds
15
+ // one automatically for NDJSON streams.
16
+ Effect.flatMap(() => reporter.done()));
17
+ }
18
+ //# sourceMappingURL=machine-artifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-artifact.js","sourceRoot":"","sources":["../src/machine-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAchC,4FAA4F;AAC5F,MAAM,UAAU,YAAY,CAC1B,QAA0B,EAC1B,OAAe,EACf,WAAwE,EAAE;IAE1E,OAAO;QACL,QAAQ;QACR,YAAY,EAAE,YAAY;QAC1B,OAAO;QACP,GAAG,QAAQ;KACZ,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,wBAAwB,CACtC,QAAqB,EACrB,QAAsB;IAEtB,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI;IACjC,0EAA0E;IAC1E,wCAAwC;IACxC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CACtC,CAAC;AACJ,CAAC"}
@@ -1,3 +1,18 @@
1
1
  export declare function defaultMachineIdPath(): string;
2
+ export declare function defaultMachineSecretPath(): string;
3
+ /**
4
+ * Local bearer capability for pre-link machine event writes and reads.
5
+ *
6
+ * The machine id is intentionally safe to display and use as a storage key;
7
+ * this independently-generated secret is the proof that the caller owns that
8
+ * machine. Only its SHA-256 digest is retained by the control plane.
9
+ */
10
+ export declare function getMachineSecret(path?: string): Promise<string>;
2
11
  export declare function getMachineId(path?: string): Promise<string>;
12
+ /**
13
+ * Resolve the identity a deploy plan would use without creating local state.
14
+ * Existing/env identities remain stable; a fresh machine gets a valid ephemeral
15
+ * value that is intentionally not persisted by a dry run.
16
+ */
17
+ export declare function previewMachineId(path?: string): Promise<string>;
3
18
  //# sourceMappingURL=machine-id.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"machine-id.d.ts","sourceRoot":"","sources":["../src/machine-id.ts"],"names":[],"mappings":"AAOA,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAED,wBAAsB,YAAY,CAAC,IAAI,GAAE,MAA+B,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBzF"}
1
+ {"version":3,"file":"machine-id.d.ts","sourceRoot":"","sources":["../src/machine-id.ts"],"names":[],"mappings":"AAOA,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,MAAmC,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBjG;AAED,wBAAsB,YAAY,CAAC,IAAI,GAAE,MAA+B,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,MAA+B,GAAG,OAAO,CAAC,MAAM,CAAC,CAE7F"}
@@ -9,7 +9,51 @@ export function defaultMachineIdPath() {
9
9
  return override;
10
10
  return statePath('machine-id');
11
11
  }
12
+ export function defaultMachineSecretPath() {
13
+ const override = process.env.HSX_MACHINE_SECRET_PATH;
14
+ if (override && override.length > 0)
15
+ return override;
16
+ return statePath('machine-secret');
17
+ }
18
+ /**
19
+ * Local bearer capability for pre-link machine event writes and reads.
20
+ *
21
+ * The machine id is intentionally safe to display and use as a storage key;
22
+ * this independently-generated secret is the proof that the caller owns that
23
+ * machine. Only its SHA-256 digest is retained by the control plane.
24
+ */
25
+ export async function getMachineSecret(path = defaultMachineSecretPath()) {
26
+ const fromEnv = process.env.HSX_MACHINE_SECRET;
27
+ if (fromEnv && fromEnv.length > 0)
28
+ return normalizeMachineSecret(fromEnv);
29
+ try {
30
+ return normalizeMachineSecret((await readFile(path, 'utf8')).trim());
31
+ }
32
+ catch {
33
+ const secret = randomBytes(32).toString('hex');
34
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
35
+ await writeFile(path, `${secret}\n`, { encoding: 'utf8', mode: 0o600 });
36
+ try {
37
+ await chmod(path, 0o600);
38
+ }
39
+ catch {
40
+ // Best effort on platforms without POSIX permissions.
41
+ }
42
+ return secret;
43
+ }
44
+ }
12
45
  export async function getMachineId(path = defaultMachineIdPath()) {
46
+ return resolveMachineId(path, true);
47
+ }
48
+ /**
49
+ * Resolve the identity a deploy plan would use without creating local state.
50
+ * Existing/env identities remain stable; a fresh machine gets a valid ephemeral
51
+ * value that is intentionally not persisted by a dry run.
52
+ */
53
+ export async function previewMachineId(path = defaultMachineIdPath()) {
54
+ return resolveMachineId(path, false);
55
+ }
56
+ async function resolveMachineId(path, persist) {
13
57
  const fromEnv = process.env.HSX_MACHINE_ID;
14
58
  if (fromEnv && fromEnv.length > 0) {
15
59
  return normalizeMachineId(fromEnv);
@@ -20,6 +64,8 @@ export async function getMachineId(path = defaultMachineIdPath()) {
20
64
  }
21
65
  catch {
22
66
  const machineId = `m_${randomBytes(10).toString('hex')}`;
67
+ if (!persist)
68
+ return machineId;
23
69
  await mkdir(dirname(path), { recursive: true, mode: 0o700 });
24
70
  await writeFile(path, `${machineId}\n`, 'utf8');
25
71
  try {
@@ -38,4 +84,11 @@ function normalizeMachineId(value) {
38
84
  }
39
85
  return normalized;
40
86
  }
87
+ function normalizeMachineSecret(value) {
88
+ const normalized = value.trim();
89
+ if (!/^[a-f0-9]{64}$/.test(normalized)) {
90
+ throw new Error('HSX_MACHINE_SECRET must be exactly 64 lowercase hexadecimal characters.');
91
+ }
92
+ return normalized;
93
+ }
41
94
  //# sourceMappingURL=machine-id.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"machine-id.js","sourceRoot":"","sources":["../src/machine-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEjD,MAAM,UAAU,oBAAoB;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACjD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrD,OAAO,SAAS,CAAC,YAAY,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,oBAAoB,EAAE;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC3C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,GAAG,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"machine-id.js","sourceRoot":"","sources":["../src/machine-id.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * One consent contract for commands that change remote or durable local state.
3
+ *
4
+ * Callers render their read-only preview before invoking this helper. `--yes`
5
+ * acknowledges only that preview; it must never choose semantic inputs, enable
6
+ * force behavior, or skip validation.
7
+ */
8
+ export type MutationConsent = 'proceed' | 'cancelled' | 'require-yes';
9
+ export interface MutationConsentInput {
10
+ readonly yes: boolean;
11
+ readonly machineOutput: boolean;
12
+ readonly interactive: boolean;
13
+ readonly message: string;
14
+ readonly confirm: (options: {
15
+ readonly message: string;
16
+ readonly default: false;
17
+ }) => Promise<boolean | undefined>;
18
+ }
19
+ export declare function requestMutationConsent(input: MutationConsentInput): Promise<MutationConsent>;
20
+ //# sourceMappingURL=mutation-consent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-consent.d.ts","sourceRoot":"","sources":["../src/mutation-consent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;AAEtE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE;QAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;KACzB,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;CACpC;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAM1B"}
@@ -0,0 +1,9 @@
1
+ export async function requestMutationConsent(input) {
2
+ if (input.yes)
3
+ return 'proceed';
4
+ if (input.machineOutput || !input.interactive)
5
+ return 'require-yes';
6
+ const confirmed = await input.confirm({ message: input.message, default: false });
7
+ return confirmed === true ? 'proceed' : 'cancelled';
8
+ }
9
+ //# sourceMappingURL=mutation-consent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-consent.js","sourceRoot":"","sources":["../src/mutation-consent.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAA2B;IAE3B,IAAI,KAAK,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,OAAO,aAAa,CAAC;IAEpE,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAClF,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;AACtD,CAAC"}
@@ -4,10 +4,13 @@ export interface CliOutputFlags {
4
4
  readonly quiet: boolean;
5
5
  readonly verbose: boolean;
6
6
  readonly debug: boolean;
7
+ readonly noColor: boolean;
7
8
  }
8
9
  export declare function resolveCliOutputFlags(argv: readonly string[]): CliOutputFlags;
9
10
  export declare function withCliOutputFlags<T>(flags: CliOutputFlags, thunk: () => T): T;
10
11
  export declare function currentCliOutputFlags(): CliOutputFlags;
11
12
  export declare function currentReporterArgv(): readonly string[];
12
13
  export declare function isMachineOutput(): boolean;
14
+ /** True while the current invocation has explicitly disabled ANSI styling. */
15
+ export declare function isNoColorRequested(): boolean;
13
16
  //# sourceMappingURL=output-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"output-context.d.ts","sourceRoot":"","sources":["../src/output-context.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAYD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAQ7E;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAE9E;AAED,wBAAgB,qBAAqB,IAAI,cAAc,CAEtD;AAED,wBAAgB,mBAAmB,IAAI,SAAS,MAAM,EAAE,CAWvD;AAED,wBAAgB,eAAe,IAAI,OAAO,CAGzC"}
1
+ {"version":3,"file":"output-context.d.ts","sourceRoot":"","sources":["../src/output-context.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAaD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAS7E;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAE9E;AAED,wBAAgB,qBAAqB,IAAI,cAAc,CAEtD;AAED,wBAAgB,mBAAmB,IAAI,SAAS,MAAM,EAAE,CAWvD;AAED,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
@@ -5,15 +5,17 @@ const DEFAULT_FLAGS = {
5
5
  quiet: false,
6
6
  verbose: false,
7
7
  debug: false,
8
+ noColor: false,
8
9
  };
9
10
  const storage = new AsyncLocalStorage();
10
11
  export function resolveCliOutputFlags(argv) {
11
12
  return {
12
- json: argv.includes('--json'),
13
+ json: argv.includes('--json') || argv.includes('--format-output-as-json'),
13
14
  jsonStream: argv.includes('--json-stream'),
14
15
  quiet: argv.includes('--quiet') || argv.includes('-q'),
15
16
  verbose: argv.includes('--verbose'),
16
17
  debug: argv.includes('--debug'),
18
+ noColor: argv.includes('--no-color'),
17
19
  };
18
20
  }
19
21
  export function withCliOutputFlags(flags, thunk) {
@@ -43,4 +45,8 @@ export function isMachineOutput() {
43
45
  const flags = currentCliOutputFlags();
44
46
  return flags.json || flags.jsonStream;
45
47
  }
48
+ /** True while the current invocation has explicitly disabled ANSI styling. */
49
+ export function isNoColorRequested() {
50
+ return currentCliOutputFlags().noColor;
51
+ }
46
52
  //# sourceMappingURL=output-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"output-context.js","sourceRoot":"","sources":["../src/output-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAUrD,MAAM,aAAa,GAAmB;IACpC,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,KAAK;IACjB,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAkB,CAAC;AAExD,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC3D,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QACnC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAI,KAAqB,EAAE,KAAc;IACzE,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,6DAA6D;IAC7D,IAAI,KAAK,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"output-context.js","sourceRoot":"","sources":["../src/output-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAWrD,MAAM,aAAa,GAAmB;IACpC,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,KAAK;IACjB,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAkB,CAAC;AAExD,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC3D,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACzE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QACnC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/B,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAI,KAAqB,EAAE,KAAc;IACzE,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,6DAA6D;IAC7D,IAAI,KAAK,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC;AACxC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB;IAChC,OAAO,qBAAqB,EAAE,CAAC,OAAO,CAAC;AACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,OAAO,MAAmC,CAAC;AA4C9D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,kFAAkF;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AA+FD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,aAAa,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;CAAE,GACjD,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,OAAO,IAAI,CAAC,CAAC;AAC7C,wBAAsB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AA4DnF;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmFrF;AAED,wBAAgB,aAAa,CAC3B,KAAK,GAAE,MAAM,CAAC,cAA8B,EAC5C,MAAM,GAAE,MAAM,CAAC,cAA+B,GAC7C,OAAO,CAET;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,cAAc,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;CAAE,GAClD,OAAO,CAAC,OAAO,GAAG,SAAS,GAAG,OAAO,IAAI,CAAC,CAAC;AAC9C,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;AAsDxF,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACrD,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrB,kFAAkF;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,EACjD,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;CAAE,GACpD,OAAO,CAAC,CAAC,GAAG,SAAS,GAAG,OAAO,IAAI,CAAC,CAAC;AACxC,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,EACjD,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AA6N1B,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EACtD,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAoIvC"}
package/dist/prompt.js CHANGED
@@ -33,6 +33,9 @@ function withEscapeCancel(rl, stdin, stderr, onCancel, onBack) {
33
33
  function promptAllowed(explicitIsTTY, stdin, stderr) {
34
34
  if (isMachineOutput())
35
35
  return false;
36
+ const ci = process.env.CI?.trim().toLowerCase();
37
+ if (ci && !['0', 'false', 'no', 'off'].includes(ci))
38
+ return false;
36
39
  return (explicitIsTTY ??
37
40
  Boolean(stderr.isTTY && stdin.isTTY));
38
41
  }
@@ -146,10 +149,15 @@ export async function promptText(opts) {
146
149
  }
147
150
  : undefined);
148
151
  const answer = await new Promise((resolve) => {
152
+ let answered = false;
149
153
  rl.question(` ${arrow} ${wrap(BOLD, opts.message)}${defaultHint} `, (input) => {
154
+ answered = true;
150
155
  resolve(input);
151
156
  });
152
- rl.on('close', () => resolve(''));
157
+ rl.on('close', () => {
158
+ if (!answered)
159
+ resolve(undefined);
160
+ });
153
161
  });
154
162
  detach();
155
163
  rl.close();
@@ -157,6 +165,8 @@ export async function promptText(opts) {
157
165
  return undefined;
158
166
  if (backed)
159
167
  return BACK;
168
+ if (answer === undefined)
169
+ return undefined;
160
170
  const value = answer.trim() === '' ? (opts.default ?? '') : answer.trim();
161
171
  if (opts.validate) {
162
172
  const err = opts.validate(value);
@@ -191,50 +201,70 @@ export async function promptPassword(opts) {
191
201
  callback();
192
202
  },
193
203
  });
194
- stderr.write(` ${arrow} ${wrap(BOLD, opts.message)} `);
195
- const rl = readline.createInterface({ input: stdin, output: sink, terminal: true });
196
- let cancelled = false;
197
- const detach = withEscapeCancel(rl, stdin, stderr, () => {
198
- cancelled = true;
199
- });
200
- let maskedLength = 0;
201
- const renderMask = (text, key) => {
202
- if (key?.name === 'backspace') {
203
- if (maskedLength > 0) {
204
- stderr.write('\b \b');
205
- maskedLength -= 1;
204
+ for (;;) {
205
+ stderr.write(` ${arrow} ${wrap(BOLD, opts.message)} `);
206
+ const rl = readline.createInterface({ input: stdin, output: sink, terminal: true });
207
+ let cancelled = false;
208
+ const detach = withEscapeCancel(rl, stdin, stderr, () => {
209
+ cancelled = true;
210
+ });
211
+ let maskedLength = 0;
212
+ const renderMask = (text, key) => {
213
+ if (key?.name === 'backspace') {
214
+ if (maskedLength > 0) {
215
+ stderr.write('\b \b');
216
+ maskedLength -= 1;
217
+ }
218
+ return;
219
+ }
220
+ if (!text ||
221
+ key?.name === 'return' ||
222
+ key?.name === 'enter' ||
223
+ key?.name === 'escape' ||
224
+ key?.ctrl ||
225
+ key?.meta) {
226
+ return;
227
+ }
228
+ const added = Array.from(text).filter((character) => character >= ' ').length;
229
+ if (added > 0) {
230
+ stderr.write('•'.repeat(added));
231
+ maskedLength += added;
232
+ }
233
+ };
234
+ stdin.on('keypress', renderMask);
235
+ const answer = await new Promise((resolve) => {
236
+ let answered = false;
237
+ rl.question('', (input) => {
238
+ answered = true;
239
+ resolve(input);
240
+ });
241
+ rl.on('close', () => {
242
+ if (!answered)
243
+ resolve(undefined);
244
+ });
245
+ });
246
+ detach();
247
+ stdin.off('keypress', renderMask);
248
+ rl.close();
249
+ // readline's terminating newline went to the sink, so end the prompt line
250
+ // ourselves (withEscapeCancel already prints one on cancel).
251
+ if (cancelled)
252
+ return undefined;
253
+ if (answer === undefined)
254
+ return undefined;
255
+ const value = answer.trim();
256
+ if (opts.validate) {
257
+ const err = opts.validate(value);
258
+ if (err) {
259
+ stderr.write(`\n ${color ? `${ESC}31m✗${RESET}` : '[x]'} ${err}\n`);
260
+ continue;
206
261
  }
207
- return;
208
- }
209
- if (!text ||
210
- key?.name === 'return' ||
211
- key?.name === 'enter' ||
212
- key?.name === 'escape' ||
213
- key?.ctrl ||
214
- key?.meta) {
215
- return;
216
- }
217
- const added = Array.from(text).filter((character) => character >= ' ').length;
218
- if (added > 0) {
219
- stderr.write('•'.repeat(added));
220
- maskedLength += added;
221
262
  }
222
- };
223
- stdin.on('keypress', renderMask);
224
- const answer = await new Promise((resolve) => {
225
- rl.question('', (input) => resolve(input));
226
- rl.on('close', () => resolve(''));
227
- });
228
- detach();
229
- stdin.off('keypress', renderMask);
230
- rl.close();
231
- // readline's terminating newline went to the sink, so end the prompt line
232
- // ourselves (withEscapeCancel already prints one on cancel).
233
- if (cancelled)
234
- return undefined;
235
- stderr.write(` ${color ? wrap(DIM, 'received') : 'received'}\n`);
236
- const value = answer.trim();
237
- return value === '' ? undefined : value;
263
+ if (value === '')
264
+ return undefined;
265
+ stderr.write(` ${color ? wrap(DIM, 'received') : 'received'}\n`);
266
+ return value;
267
+ }
238
268
  }
239
269
  export function isInteractive(stdin = process.stdin, stderr = process.stderr) {
240
270
  return promptAllowed(undefined, stdin, stderr);
@@ -261,8 +291,15 @@ export async function promptConfirm(opts) {
261
291
  }
262
292
  : undefined);
263
293
  const answer = await new Promise((resolve) => {
264
- rl.question(` ${arrow} ${wrap(BOLD, opts.message)} ${hint} `, resolve);
265
- rl.on('close', () => resolve(''));
294
+ let answered = false;
295
+ rl.question(` ${arrow} ${wrap(BOLD, opts.message)} ${hint} `, (input) => {
296
+ answered = true;
297
+ resolve(input);
298
+ });
299
+ rl.on('close', () => {
300
+ if (!answered)
301
+ resolve(undefined);
302
+ });
266
303
  });
267
304
  detach();
268
305
  rl.close();
@@ -270,6 +307,8 @@ export async function promptConfirm(opts) {
270
307
  return undefined;
271
308
  if (backed)
272
309
  return BACK;
310
+ if (answer === undefined)
311
+ return undefined;
273
312
  const trimmed = answer.trim().toLowerCase();
274
313
  if (trimmed === '')
275
314
  return defaultValue;
@@ -339,14 +378,21 @@ async function promptSelectArrow(opts, stderr, stdin) {
339
378
  return await new Promise((resolve) => {
340
379
  let typedDigits = '';
341
380
  let digitTimer;
381
+ let settled = false;
342
382
  const finish = (value) => {
383
+ if (settled)
384
+ return;
385
+ settled = true;
343
386
  if (digitTimer)
344
387
  clearTimeout(digitTimer);
345
388
  stdin.setRawMode(false);
346
389
  stdin.pause();
347
390
  stdin.removeListener('data', onData);
391
+ stdin.removeListener('end', onEnd);
392
+ stdin.removeListener('close', onEnd);
348
393
  resolve(value);
349
394
  };
395
+ const onEnd = () => finish(undefined);
350
396
  const commitDigits = () => {
351
397
  if (!typedDigits)
352
398
  return;
@@ -359,7 +405,7 @@ async function promptSelectArrow(opts, stderr, stdin) {
359
405
  };
360
406
  const onData = (chunk) => {
361
407
  // Ctrl-C
362
- if (chunk === '\x03') {
408
+ if (chunk === '\x03' || chunk === '\x04') {
363
409
  stderr.write('\n');
364
410
  finish(undefined);
365
411
  return;
@@ -415,6 +461,8 @@ async function promptSelectArrow(opts, stderr, stdin) {
415
461
  }
416
462
  };
417
463
  stdin.on('data', onData);
464
+ stdin.once('end', onEnd);
465
+ stdin.once('close', onEnd);
418
466
  });
419
467
  }
420
468
  async function promptSelectNumbered(opts, stderr, stdin) {
@@ -439,9 +487,27 @@ async function promptSelectNumbered(opts, stderr, stdin) {
439
487
  const rl = readline.createInterface({ input: stdin, output: stderr, terminal: true });
440
488
  const hint = wrap(DIM, `(${defaultIndex + 1})`);
441
489
  const answer = await new Promise((resolve) => {
442
- rl.question(` ${wrap(DIM, '>')} ${hint} `, resolve);
490
+ let answered = false;
491
+ let settled = false;
492
+ const finish = (value) => {
493
+ if (settled)
494
+ return;
495
+ settled = true;
496
+ resolve(value);
497
+ };
498
+ rl.question(` ${wrap(DIM, '>')} ${hint} `, (input) => {
499
+ answered = true;
500
+ finish(input);
501
+ });
502
+ rl.on('SIGINT', () => finish(undefined));
503
+ rl.on('close', () => {
504
+ if (!answered)
505
+ finish(undefined);
506
+ });
443
507
  });
444
508
  rl.close();
509
+ if (answer === undefined)
510
+ return undefined;
445
511
  const trimmed = answer.trim();
446
512
  if (opts.allowBack && trimmed.toLowerCase() === 'b')
447
513
  return BACK;
@@ -511,15 +577,22 @@ export async function promptMultiSelect(opts) {
511
577
  stdinTTY.resume();
512
578
  stdinTTY.setEncoding('utf8');
513
579
  return await new Promise((resolve) => {
580
+ let settled = false;
514
581
  const finish = (value) => {
582
+ if (settled)
583
+ return;
584
+ settled = true;
515
585
  stdinTTY.setRawMode(false);
516
586
  stdinTTY.pause();
517
587
  stdinTTY.removeListener('data', onData);
588
+ stdinTTY.removeListener('end', onEnd);
589
+ stdinTTY.removeListener('close', onEnd);
518
590
  resolve(value);
519
591
  };
592
+ const onEnd = () => finish(undefined);
520
593
  const onData = (chunk) => {
521
594
  notice = undefined;
522
- if (chunk === '\x03' || chunk === '\x1b' || chunk === 'q') {
595
+ if (chunk === '\x03' || chunk === '\x04' || chunk === '\x1b' || chunk === 'q') {
523
596
  stderr.write('\n');
524
597
  finish(undefined);
525
598
  return;
@@ -578,6 +651,8 @@ export async function promptMultiSelect(opts) {
578
651
  }
579
652
  };
580
653
  stdinTTY.on('data', onData);
654
+ stdinTTY.once('end', onEnd);
655
+ stdinTTY.once('close', onEnd);
581
656
  });
582
657
  }
583
658
  //# sourceMappingURL=prompt.js.map