terminal-pilot 0.0.40 → 0.0.41

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 (61) hide show
  1. package/README.md +13 -1
  2. package/dist/cli.js +20 -3
  3. package/dist/cli.js.map +2 -2
  4. package/dist/commands/close-session.js +9 -1
  5. package/dist/commands/close-session.js.map +2 -2
  6. package/dist/commands/create-session.js +9 -1
  7. package/dist/commands/create-session.js.map +2 -2
  8. package/dist/commands/daemon-runtime.js +9 -1
  9. package/dist/commands/daemon-runtime.js.map +2 -2
  10. package/dist/commands/fill.js +9 -1
  11. package/dist/commands/fill.js.map +2 -2
  12. package/dist/commands/get-session.js +9 -1
  13. package/dist/commands/get-session.js.map +2 -2
  14. package/dist/commands/index.d.ts +4 -0
  15. package/dist/commands/index.js +19 -2
  16. package/dist/commands/index.js.map +2 -2
  17. package/dist/commands/list-sessions.js +9 -1
  18. package/dist/commands/list-sessions.js.map +2 -2
  19. package/dist/commands/press-key.js +9 -1
  20. package/dist/commands/press-key.js.map +2 -2
  21. package/dist/commands/read-history.js +9 -1
  22. package/dist/commands/read-history.js.map +2 -2
  23. package/dist/commands/read-screen.js +9 -1
  24. package/dist/commands/read-screen.js.map +2 -2
  25. package/dist/commands/resize.js +9 -1
  26. package/dist/commands/resize.js.map +2 -2
  27. package/dist/commands/runtime.js +9 -1
  28. package/dist/commands/runtime.js.map +2 -2
  29. package/dist/commands/screenshot.js +9 -1
  30. package/dist/commands/screenshot.js.map +2 -2
  31. package/dist/commands/send-signal.js +9 -1
  32. package/dist/commands/send-signal.js.map +2 -2
  33. package/dist/commands/type.js +9 -1
  34. package/dist/commands/type.js.map +2 -2
  35. package/dist/commands/wait-for-exit.js +9 -1
  36. package/dist/commands/wait-for-exit.js.map +2 -2
  37. package/dist/commands/wait-for.d.ts +2 -0
  38. package/dist/commands/wait-for.js +19 -2
  39. package/dist/commands/wait-for.js.map +2 -2
  40. package/dist/index.js +9 -1
  41. package/dist/index.js.map +2 -2
  42. package/dist/terminal-pilot.js +9 -1
  43. package/dist/terminal-pilot.js.map +2 -2
  44. package/dist/terminal-session.d.ts +1 -0
  45. package/dist/terminal-session.js +9 -1
  46. package/dist/terminal-session.js.map +2 -2
  47. package/dist/testing/cli-repl.js +20 -3
  48. package/dist/testing/cli-repl.js.map +2 -2
  49. package/dist/testing/qa-cli.js +20 -3
  50. package/dist/testing/qa-cli.js.map +2 -2
  51. package/node_modules/toolcraft-design/dist/index.d.ts +2 -2
  52. package/node_modules/toolcraft-design/dist/index.js +1 -1
  53. package/node_modules/toolcraft-design/dist/render-markdown-plaintext.d.ts +2 -0
  54. package/node_modules/toolcraft-design/dist/render-markdown-plaintext.js +1 -0
  55. package/node_modules/toolcraft-design/dist/terminal-markdown/index.d.ts +2 -0
  56. package/node_modules/toolcraft-design/dist/terminal-markdown/index.js +1 -0
  57. package/node_modules/toolcraft-design/dist/terminal-markdown/parser/inline.js +38 -2
  58. package/node_modules/toolcraft-design/dist/terminal-markdown/plaintext-renderer.d.ts +11 -0
  59. package/node_modules/toolcraft-design/dist/terminal-markdown/plaintext-renderer.js +228 -0
  60. package/node_modules/toolcraft-design/package.json +4 -0
  61. package/package.json +1 -1
package/README.md CHANGED
@@ -168,7 +168,10 @@ class TerminalSession {
168
168
  press(key: TerminalKey): Promise<void>;
169
169
  send(raw: string): Promise<void>; // raw bytes / escape sequences
170
170
  signal(signal: string): Promise<void>;
171
- waitFor(pattern: string | RegExp, options?: WaitForOptions): Promise<string>;
171
+ waitFor(
172
+ pattern: string | RegExp,
173
+ options?: { timeout?: number; scope?: "history" | "screen" }
174
+ ): Promise<string>;
172
175
  waitForExit(options?: { timeout?: number }): Promise<number>; // throws on timeout
173
176
  waitForQuiet(ms: number): Promise<void>;
174
177
  screen(): Promise<TerminalScreen>;
@@ -249,6 +252,15 @@ Typical fixture workflow:
249
252
  4. Assert with `screen()` or `history()`
250
253
  5. `close()` the session
251
254
 
255
+ `waitFor(...)` searches captured output history by default. Use
256
+ `waitFor(pattern, { scope: "screen" })` when command echoes or previous output could match before
257
+ the expected interactive screen is visible.
258
+
259
+ When launching an interactive program through `npm run`, npm can buffer printable raw keys such as
260
+ `q` until `Enter` is pressed. Prefer launching the underlying executable directly for raw-key tests.
261
+ If the npm wrapper is part of the behavior under test, use `Control+c` for teardown and treat
262
+ printable-key delivery as npm-wrapper behavior rather than application behavior.
263
+
252
264
  Example fixture-based test:
253
265
 
254
266
  ```ts
package/dist/cli.js CHANGED
@@ -18995,10 +18995,13 @@ var TerminalSession = class {
18995
18995
  }
18996
18996
  async waitFor(pattern, opts) {
18997
18997
  const timeout = opts?.timeout ?? DEFAULT_TIMEOUT_MS;
18998
+ const scope = opts?.scope ?? "history";
18998
18999
  assertTimeout(timeout);
19000
+ assertWaitScope(scope);
18999
19001
  const startedAt = Date.now();
19000
19002
  while (Date.now() - startedAt <= timeout) {
19001
- const matched = matchPattern(this.rawBuffer, pattern);
19003
+ const source = scope === "screen" ? (await this.screen()).text : this.rawBuffer;
19004
+ const matched = matchPattern(source, pattern);
19002
19005
  if (matched !== null) {
19003
19006
  return matched;
19004
19007
  }
@@ -19119,6 +19122,11 @@ function assertTimeout(timeout) {
19119
19122
  throw new Error("Timeout must be a finite non-negative number.");
19120
19123
  }
19121
19124
  }
19125
+ function assertWaitScope(scope) {
19126
+ if (scope !== "history" && scope !== "screen") {
19127
+ throw new Error('Wait scope must be either "history" or "screen".');
19128
+ }
19129
+ }
19122
19130
  function assertQuietPeriod(duration) {
19123
19131
  if (!Number.isFinite(duration) || duration < 0) {
19124
19132
  throw new Error("Quiet period must be a finite non-negative number.");
@@ -22819,6 +22827,11 @@ var params15 = S.Object({
22819
22827
  timeout: S.Optional(
22820
22828
  S.Number({ short: "t", description: "Maximum wait time in milliseconds", minimum: 0 })
22821
22829
  ),
22830
+ scope: S.Optional(
22831
+ S.Enum(["history", "screen"], {
22832
+ description: "Search all captured output or only the current visible screen"
22833
+ })
22834
+ ),
22822
22835
  literal: S.Optional(
22823
22836
  S.Boolean({
22824
22837
  short: "l",
@@ -22842,7 +22855,11 @@ var waitFor = defineCommand({
22842
22855
  env
22843
22856
  );
22844
22857
  const pattern = params17.literal === true ? params17.pattern : new RegExp(params17.pattern);
22845
- const line = params17.timeout === void 0 ? await namedSession.session.waitFor(pattern) : await namedSession.session.waitFor(pattern, { timeout: params17.timeout });
22858
+ const options = params17.timeout === void 0 && params17.scope === void 0 ? void 0 : {
22859
+ ...params17.timeout === void 0 ? {} : { timeout: params17.timeout },
22860
+ ...params17.scope === void 0 ? {} : { scope: params17.scope }
22861
+ };
22862
+ const line = await namedSession.session.waitFor(pattern, options);
22846
22863
  return { matched: true, line };
22847
22864
  }
22848
22865
  });
@@ -23308,7 +23325,7 @@ function sleep2(ms) {
23308
23325
  // src/cli.ts
23309
23326
  configureTheme({ brand: "green", label: "Terminal Pilot" });
23310
23327
  function getBundledPackageVersion() {
23311
- return true ? "0.0.40" : void 0;
23328
+ return true ? "0.0.41" : void 0;
23312
23329
  }
23313
23330
  function normalizeArgv(argv) {
23314
23331
  if (argv.includes("--json") && !argv.some((argument) => argument === "--output" || argument.startsWith("--output="))) {