terminal-pilot 0.0.47 → 0.0.49

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 (90) hide show
  1. package/dist/cli.d.ts +5 -0
  2. package/dist/cli.js +706 -164
  3. package/dist/cli.js.map +4 -4
  4. package/dist/commands/close-session.js.map +1 -1
  5. package/dist/commands/create-session.js.map +1 -1
  6. package/dist/commands/daemon-runtime.js.map +1 -1
  7. package/dist/commands/fill.js.map +1 -1
  8. package/dist/commands/get-session.js.map +1 -1
  9. package/dist/commands/index.js +77 -10
  10. package/dist/commands/index.js.map +4 -4
  11. package/dist/commands/install.js +81 -14
  12. package/dist/commands/install.js.map +4 -4
  13. package/dist/commands/installer.js +37 -6
  14. package/dist/commands/installer.js.map +3 -3
  15. package/dist/commands/list-sessions.js.map +1 -1
  16. package/dist/commands/press-key.js.map +1 -1
  17. package/dist/commands/read-history.js.map +1 -1
  18. package/dist/commands/read-screen.js.map +1 -1
  19. package/dist/commands/resize.js.map +1 -1
  20. package/dist/commands/runtime.js.map +1 -1
  21. package/dist/commands/screenshot.js.map +1 -1
  22. package/dist/commands/send-signal.js.map +1 -1
  23. package/dist/commands/type.js.map +1 -1
  24. package/dist/commands/uninstall.js +37 -6
  25. package/dist/commands/uninstall.js.map +3 -3
  26. package/dist/commands/wait-for-exit.js.map +1 -1
  27. package/dist/commands/wait-for.js.map +1 -1
  28. package/dist/composition.json +6 -1
  29. package/dist/testing/cli-repl.js +704 -163
  30. package/dist/testing/cli-repl.js.map +4 -4
  31. package/dist/testing/qa-cli.js +704 -163
  32. package/dist/testing/qa-cli.js.map +4 -4
  33. package/node_modules/@poe-code/agent-defs/README.md +15 -2
  34. package/node_modules/@poe-code/agent-defs/dist/agents/claude-code.js +2 -1
  35. package/node_modules/@poe-code/agent-defs/dist/agents/claude-desktop.js +1 -0
  36. package/node_modules/@poe-code/agent-defs/dist/agents/codex.js +2 -1
  37. package/node_modules/@poe-code/agent-defs/dist/agents/cursor.js +1 -0
  38. package/node_modules/@poe-code/agent-defs/dist/agents/gemini-cli.js +2 -1
  39. package/node_modules/@poe-code/agent-defs/dist/agents/goose.js +1 -0
  40. package/node_modules/@poe-code/agent-defs/dist/agents/index.d.ts +1 -0
  41. package/node_modules/@poe-code/agent-defs/dist/agents/index.js +1 -0
  42. package/node_modules/@poe-code/agent-defs/dist/agents/kimi.js +2 -1
  43. package/node_modules/@poe-code/agent-defs/dist/agents/opencode.js +2 -1
  44. package/node_modules/@poe-code/agent-defs/dist/agents/pi.d.ts +2 -0
  45. package/node_modules/@poe-code/agent-defs/dist/agents/pi.js +15 -0
  46. package/node_modules/@poe-code/agent-defs/dist/agents/poe-agent.js +1 -0
  47. package/node_modules/@poe-code/agent-defs/dist/capabilities.d.ts +14 -0
  48. package/node_modules/@poe-code/agent-defs/dist/capabilities.js +63 -0
  49. package/node_modules/@poe-code/agent-defs/dist/index.d.ts +3 -2
  50. package/node_modules/@poe-code/agent-defs/dist/index.js +2 -1
  51. package/node_modules/@poe-code/agent-defs/dist/registry.js +5 -1
  52. package/node_modules/@poe-code/agent-defs/dist/types.d.ts +8 -1
  53. package/node_modules/@poe-code/agent-skill-config/dist/apply.d.ts +2 -0
  54. package/node_modules/@poe-code/agent-skill-config/dist/apply.js +18 -14
  55. package/node_modules/@poe-code/agent-skill-config/dist/bridge-active-skills.js +3 -1
  56. package/node_modules/@poe-code/agent-skill-config/dist/configs.d.ts +2 -0
  57. package/node_modules/@poe-code/agent-skill-config/dist/configs.js +2 -1
  58. package/node_modules/@poe-code/frontmatter/README.md +3 -0
  59. package/node_modules/@poe-code/frontmatter/dist/index.d.ts +1 -1
  60. package/node_modules/@poe-code/frontmatter/dist/index.js +1 -1
  61. package/node_modules/@poe-code/frontmatter/dist/parse.d.ts +9 -0
  62. package/node_modules/@poe-code/frontmatter/dist/parse.js +16 -0
  63. package/node_modules/toolcraft-design/dist/acp/components.d.ts +8 -1
  64. package/node_modules/toolcraft-design/dist/acp/components.js +11 -6
  65. package/node_modules/toolcraft-design/dist/acp/index.d.ts +1 -0
  66. package/node_modules/toolcraft-design/dist/components/command-errors.d.ts +2 -0
  67. package/node_modules/toolcraft-design/dist/components/command-errors.js +8 -2
  68. package/node_modules/toolcraft-design/dist/components/help-formatter-plain.js +61 -25
  69. package/node_modules/toolcraft-design/dist/components/help-formatter.d.ts +17 -0
  70. package/node_modules/toolcraft-design/dist/components/help-formatter.js +128 -29
  71. package/node_modules/toolcraft-design/dist/components/index.d.ts +3 -3
  72. package/node_modules/toolcraft-design/dist/components/index.js +2 -2
  73. package/node_modules/toolcraft-design/dist/components/table.d.ts +1 -0
  74. package/node_modules/toolcraft-design/dist/components/table.js +52 -5
  75. package/node_modules/toolcraft-design/dist/components/template.d.ts +9 -0
  76. package/node_modules/toolcraft-design/dist/components/template.js +27 -2
  77. package/node_modules/toolcraft-design/dist/explorer/actions.d.ts +1 -0
  78. package/node_modules/toolcraft-design/dist/explorer/actions.js +1 -0
  79. package/node_modules/toolcraft-design/dist/explorer/reducer.js +1 -0
  80. package/node_modules/toolcraft-design/dist/explorer/runtime.js +21 -2
  81. package/node_modules/toolcraft-design/dist/explorer/state.d.ts +6 -0
  82. package/node_modules/toolcraft-design/dist/explorer/state.js +9 -6
  83. package/node_modules/toolcraft-design/dist/help-formatter.d.ts +2 -2
  84. package/node_modules/toolcraft-design/dist/help-formatter.js +1 -1
  85. package/node_modules/toolcraft-design/dist/index.d.ts +4 -4
  86. package/node_modules/toolcraft-design/dist/index.js +3 -3
  87. package/node_modules/toolcraft-design/dist/prompts/interactive/core.d.ts +5 -0
  88. package/node_modules/toolcraft-design/dist/prompts/interactive/core.js +15 -1
  89. package/node_modules/toolcraft-design/dist/prompts/primitives/spinner.js +1 -1
  90. package/package.json +4 -3
@@ -30,6 +30,8 @@ export interface DetailCtx {
30
30
  height: number;
31
31
  signal: AbortSignal;
32
32
  row: Row;
33
+ /** Re-run detail.items for the focused row and repaint the preview pane. */
34
+ reloadDetail?: () => void;
33
35
  }
34
36
  export interface Action<R> {
35
37
  id: string;
@@ -47,6 +49,8 @@ export interface ActionContext<R> {
47
49
  item?: DetailItem;
48
50
  filter: string;
49
51
  refresh: () => Promise<void>;
52
+ /** Re-run detail.items for the focused row and repaint the preview pane. */
53
+ reloadDetail: () => void;
50
54
  suspendAnd: <T>(fn: () => Promise<T>) => Promise<T>;
51
55
  openModal: (content: {
52
56
  title: string;
@@ -73,6 +77,8 @@ export interface ExplorerConfig<R> {
73
77
  keybindOverrides?: Record<string, string | string[]>;
74
78
  emptyHint?: string;
75
79
  initialFilter?: string;
80
+ /** Synchronous first paint rows; still refreshed via `rows()` after start. */
81
+ initialRows?: Row[];
76
82
  }
77
83
  export declare const REGION_HEADER: number;
78
84
  export declare const REGION_LIST: number;
@@ -17,23 +17,26 @@ export function createInitialState(config, size) {
17
17
  rows: normalizeSize(size.rows)
18
18
  };
19
19
  const multiSelect = config.multiSelect ?? true;
20
+ const initialRows = config.initialRows ?? [];
21
+ const initialFilter = config.initialFilter ?? "";
22
+ // Defer filtering to first rowsLoaded when empty; seed list immediately when provided.
20
23
  return {
21
24
  title: config.title,
22
25
  emptyHint: config.emptyHint ?? "No detail",
23
- rows: [],
24
- filtered: [],
26
+ rows: initialRows,
27
+ filtered: initialRows.map((_, index) => index),
25
28
  matchPositions: new Map(),
26
29
  cursor: 0,
27
- filter: config.initialFilter ?? "",
30
+ filter: initialFilter,
28
31
  filterFocused: false,
29
32
  focused: "list",
30
33
  detail: {
31
- rowId: null,
34
+ rowId: initialRows[0]?.id ?? null,
32
35
  items: null,
33
36
  cursor: 0,
34
37
  scroll: 0,
35
- token: 0,
36
- loading: false
38
+ token: initialRows.length > 0 ? 1 : 0,
39
+ loading: initialRows.length > 0
37
40
  },
38
41
  selected: new Set(),
39
42
  multiSelect,
@@ -1,2 +1,2 @@
1
- export { helpFormatter } from "./components/help-formatter.js";
2
- export type { CommandInfo, FormatColumnsOptions, OptionInfo } from "./components/help-formatter.js";
1
+ export { helpFormatter, formatColumns, formatCommand, formatUsage, formatOption, formatCommandList, formatOptionList, styleHelpToken, joinHelpTokens, renderHelpTokens } from "./components/help-formatter.js";
2
+ export type { CommandInfo, FormatColumnsOptions, OptionInfo, HelpToken, HelpTokenRole } from "./components/help-formatter.js";
@@ -1 +1 @@
1
- export { helpFormatter } from "./components/help-formatter.js";
1
+ export { helpFormatter, formatColumns, formatCommand, formatUsage, formatOption, formatCommandList, formatOptionList, styleHelpToken, joinHelpTokens, renderHelpTokens } from "./components/help-formatter.js";
@@ -12,12 +12,12 @@ export type { Color } from "./components/color.js";
12
12
  export { symbols } from "./components/symbols.js";
13
13
  export { createLogger, logger } from "./components/logger.js";
14
14
  export type { LoggerOutput } from "./components/logger.js";
15
- export { helpFormatter, formatColumns, formatCommand, formatUsage, formatOption, formatCommandList, formatOptionList } from "./components/help-formatter.js";
15
+ export { helpFormatter, formatColumns, formatCommand, formatUsage, formatOption, formatCommandList, formatOptionList, styleHelpToken, joinHelpTokens, renderHelpTokens } from "./components/help-formatter.js";
16
16
  export * as helpFormatterPlain from "./components/help-formatter-plain.js";
17
- export type { CommandInfo, OptionInfo, FormatColumnsOptions } from "./components/help-formatter.js";
17
+ export type { CommandInfo, OptionInfo, FormatColumnsOptions, HelpToken, HelpTokenRole } from "./components/help-formatter.js";
18
18
  export { formatCommandNotFound } from "./components/command-errors.js";
19
19
  export { formatCommandNotFoundPanel } from "./components/command-errors.js";
20
- export { renderTable } from "./components/table.js";
20
+ export { loggerTableWidth, renderTable } from "./components/table.js";
21
21
  export type { TableColumn, RenderTableOptions } from "./components/table.js";
22
22
  export { renderFileChanges } from "./components/file-changes.js";
23
23
  export type { FileChange, FileChangeDisplayMode, FileChangeKind, FileChangeOutputFormat, RenderFileChangesOptions } from "./components/file-changes.js";
@@ -29,7 +29,7 @@ export { renderInspectorCard } from "./components/inspector-card.js";
29
29
  export type { InspectorField, InspectorSection, RenderInspectorCardOptions } from "./components/inspector-card.js";
30
30
  export { renderResourceBrowser } from "./components/resource-browser.js";
31
31
  export type { RenderResourceBrowserOptions, ResourceBrowserGroup, ResourceBrowserItem } from "./components/resource-browser.js";
32
- export { getTemplatePartialNames, renderTemplate, resolveTemplatePartials } from "./components/template.js";
32
+ export { TemplateParseError, getTemplatePartialNames, renderTemplate, resolveTemplatePartials } from "./components/template.js";
33
33
  export type { RenderTemplateOptions, TemplateEscape } from "./components/template.js";
34
34
  export { openExternal } from "./components/browser.js";
35
35
  export * as acp from "./acp/index.js";
@@ -10,17 +10,17 @@ export { text } from "./components/text.js";
10
10
  export { color } from "./components/color.js";
11
11
  export { symbols } from "./components/symbols.js";
12
12
  export { createLogger, logger } from "./components/logger.js";
13
- export { helpFormatter, formatColumns, formatCommand, formatUsage, formatOption, formatCommandList, formatOptionList } from "./components/help-formatter.js";
13
+ export { helpFormatter, formatColumns, formatCommand, formatUsage, formatOption, formatCommandList, formatOptionList, styleHelpToken, joinHelpTokens, renderHelpTokens } from "./components/help-formatter.js";
14
14
  export * as helpFormatterPlain from "./components/help-formatter-plain.js";
15
15
  export { formatCommandNotFound } from "./components/command-errors.js";
16
16
  export { formatCommandNotFoundPanel } from "./components/command-errors.js";
17
- export { renderTable } from "./components/table.js";
17
+ export { loggerTableWidth, renderTable } from "./components/table.js";
18
18
  export { renderFileChanges } from "./components/file-changes.js";
19
19
  export { renderCatalog } from "./components/catalog.js";
20
20
  export { renderDetailCard } from "./components/detail-card.js";
21
21
  export { renderInspectorCard } from "./components/inspector-card.js";
22
22
  export { renderResourceBrowser } from "./components/resource-browser.js";
23
- export { getTemplatePartialNames, renderTemplate, resolveTemplatePartials } from "./components/template.js";
23
+ export { TemplateParseError, getTemplatePartialNames, renderTemplate, resolveTemplatePartials } from "./components/template.js";
24
24
  export { openExternal } from "./components/browser.js";
25
25
  // ACP rendering
26
26
  export * as acp from "./acp/index.js";
@@ -1,6 +1,11 @@
1
1
  import { EventEmitter } from "node:events";
2
2
  import { CANCEL } from "./cancel-symbol.js";
3
3
  export type PromptStateName = "initial" | "active" | "submit" | "cancel" | "error";
4
+ /**
5
+ * Builds the non-TTY rejection message, naming the documented `--yes` flag for the
6
+ * command being run and keeping `POE_NO_PROMPT=1` as the secondary CI alternative.
7
+ */
8
+ export declare function nonTtyPromptMessage(argv?: string[]): string;
4
9
  export interface PromptState<Value> {
5
10
  state: PromptStateName;
6
11
  value: Value | undefined;
@@ -22,6 +22,20 @@ const cursor = {
22
22
  const erase = {
23
23
  down: "\x1b[J"
24
24
  };
25
+ /**
26
+ * Builds the non-TTY rejection message, naming the documented `--yes` flag for the
27
+ * command being run and keeping `POE_NO_PROMPT=1` as the secondary CI alternative.
28
+ */
29
+ export function nonTtyPromptMessage(argv = process.argv) {
30
+ const tokens = [];
31
+ for (const arg of argv.slice(2)) {
32
+ if (arg.startsWith("-"))
33
+ break;
34
+ tokens.push(arg);
35
+ }
36
+ const retry = [...tokens, "--yes"].join(" ");
37
+ return `Interactive prompt requires a TTY. Re-run with \`${retry}\` to accept defaults non-interactively, or set POE_NO_PROMPT=1 in CI.`;
38
+ }
25
39
  export class Prompt extends EventEmitter {
26
40
  state = "initial";
27
41
  value;
@@ -92,7 +106,7 @@ export class Prompt extends EventEmitter {
92
106
  });
93
107
  }
94
108
  promptNonTty() {
95
- return Promise.reject(new Error("Interactive prompt requires a TTY. Set POE_NO_PROMPT=1 to accept defaults non-interactively."));
109
+ return Promise.reject(new Error(nonTtyPromptMessage()));
96
110
  }
97
111
  readNonTtyLine() {
98
112
  return new Promise((resolve) => {
@@ -33,7 +33,7 @@ export function spinner() {
33
33
  }
34
34
  fallback = process.env.POE_NO_SPINNER === "1" || !process.stdout.isTTY;
35
35
  if (fallback) {
36
- process.stdout.write(`${currentMessage}\n`);
36
+ process.stdout.write(`${color.gray("│")} ${currentMessage}\n`);
37
37
  return;
38
38
  }
39
39
  frameIndex = 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "terminal-pilot",
3
- "version": "0.0.47",
3
+ "version": "0.0.49",
4
4
  "description": "Playwright-like SDK and CLI for automating interactive CLI apps through a real PTY",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -24,8 +24,8 @@
24
24
  },
25
25
  "scripts": {
26
26
  "build": "rm -rf dist && tsc --emitDeclarationOnly && node scripts/build.mjs",
27
- "prepack": "node ../../scripts/set-bin-executable.mjs && node ../../scripts/manage-bundled-workspace-deps.mjs prepare . @poe-code/agent-skill-config @poe-code/agent-defs @poe-code/config-mutations toolcraft-design @poe-code/frontmatter fast-string-width fast-wrap-ansi jsonc-parser sisteransi smol-toml yaml",
28
- "postpack": "node ../../scripts/manage-bundled-workspace-deps.mjs cleanup . @poe-code/agent-skill-config @poe-code/agent-defs @poe-code/config-mutations toolcraft-design @poe-code/frontmatter fast-string-width fast-wrap-ansi jsonc-parser sisteransi smol-toml yaml",
27
+ "prepack": "node ../../scripts/set-bin-executable.mjs && node ../../scripts/manage-bundled-workspace-deps.mjs prepare . @poe-code/agent-skill-config @poe-code/agent-defs @poe-code/config-mutations @poe-code/user-error toolcraft-design @poe-code/frontmatter fast-string-width fast-wrap-ansi jsonc-parser sisteransi smol-toml yaml",
28
+ "postpack": "node ../../scripts/manage-bundled-workspace-deps.mjs cleanup . @poe-code/agent-skill-config @poe-code/agent-defs @poe-code/config-mutations @poe-code/user-error toolcraft-design @poe-code/frontmatter fast-string-width fast-wrap-ansi jsonc-parser sisteransi smol-toml yaml",
29
29
  "test": "cd ../.. && vitest run $(rg --files packages/terminal-pilot/src -g '*.test.ts' | sort | tr '\n' ' ')",
30
30
  "test:unit": "cd ../.. && vitest run $(rg --files packages/terminal-pilot/src -g '*.test.ts' | sort | tr '\n' ' ')",
31
31
  "qa:cli": "cd ../.. && tsx packages/terminal-pilot/src/testing/qa-cli.ts",
@@ -72,6 +72,7 @@
72
72
  "@poe-code/agent-skill-config",
73
73
  "@poe-code/agent-defs",
74
74
  "@poe-code/config-mutations",
75
+ "@poe-code/user-error",
75
76
  "toolcraft-design",
76
77
  "@poe-code/frontmatter",
77
78
  "fast-string-width",