maistro 1.0.390

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 (111) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +107 -0
  3. package/dist/app.d.ts +247 -0
  4. package/dist/app.d.ts.map +1 -0
  5. package/dist/app.js +4971 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/buildInfo.d.ts +5 -0
  8. package/dist/buildInfo.d.ts.map +1 -0
  9. package/dist/buildInfo.js +2 -0
  10. package/dist/buildInfo.js.map +1 -0
  11. package/dist/caffeinate.d.ts +72 -0
  12. package/dist/caffeinate.d.ts.map +1 -0
  13. package/dist/caffeinate.js +258 -0
  14. package/dist/caffeinate.js.map +1 -0
  15. package/dist/claudePath.d.ts +10 -0
  16. package/dist/claudePath.d.ts.map +1 -0
  17. package/dist/claudePath.js +34 -0
  18. package/dist/claudePath.js.map +1 -0
  19. package/dist/clipboard.d.ts +44 -0
  20. package/dist/clipboard.d.ts.map +1 -0
  21. package/dist/clipboard.js +442 -0
  22. package/dist/clipboard.js.map +1 -0
  23. package/dist/config.d.ts +211 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +933 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/constants.d.ts +50 -0
  28. package/dist/constants.d.ts.map +1 -0
  29. package/dist/constants.js +81 -0
  30. package/dist/constants.js.map +1 -0
  31. package/dist/contextBuilder.d.ts +38 -0
  32. package/dist/contextBuilder.d.ts.map +1 -0
  33. package/dist/contextBuilder.js +113 -0
  34. package/dist/contextBuilder.js.map +1 -0
  35. package/dist/dependencyDetector.d.ts +57 -0
  36. package/dist/dependencyDetector.d.ts.map +1 -0
  37. package/dist/dependencyDetector.js +505 -0
  38. package/dist/dependencyDetector.js.map +1 -0
  39. package/dist/executor.d.ts +83 -0
  40. package/dist/executor.d.ts.map +1 -0
  41. package/dist/executor.js +583 -0
  42. package/dist/executor.js.map +1 -0
  43. package/dist/git.d.ts +85 -0
  44. package/dist/git.d.ts.map +1 -0
  45. package/dist/git.js +283 -0
  46. package/dist/git.js.map +1 -0
  47. package/dist/imageManager.d.ts +161 -0
  48. package/dist/imageManager.d.ts.map +1 -0
  49. package/dist/imageManager.js +674 -0
  50. package/dist/imageManager.js.map +1 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +437 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/input-visual-test.d.ts +9 -0
  56. package/dist/input-visual-test.d.ts.map +1 -0
  57. package/dist/input-visual-test.js +108 -0
  58. package/dist/input-visual-test.js.map +1 -0
  59. package/dist/inputBox.d.ts +228 -0
  60. package/dist/inputBox.d.ts.map +1 -0
  61. package/dist/inputBox.js +966 -0
  62. package/dist/inputBox.js.map +1 -0
  63. package/dist/logger.d.ts +136 -0
  64. package/dist/logger.d.ts.map +1 -0
  65. package/dist/logger.js +347 -0
  66. package/dist/logger.js.map +1 -0
  67. package/dist/orchestrator.d.ts +149 -0
  68. package/dist/orchestrator.d.ts.map +1 -0
  69. package/dist/orchestrator.js +821 -0
  70. package/dist/orchestrator.js.map +1 -0
  71. package/dist/planner.d.ts +86 -0
  72. package/dist/planner.d.ts.map +1 -0
  73. package/dist/planner.js +830 -0
  74. package/dist/planner.js.map +1 -0
  75. package/dist/pty-test-runner.d.ts +87 -0
  76. package/dist/pty-test-runner.d.ts.map +1 -0
  77. package/dist/pty-test-runner.js +721 -0
  78. package/dist/pty-test-runner.js.map +1 -0
  79. package/dist/screen.d.ts +44 -0
  80. package/dist/screen.d.ts.map +1 -0
  81. package/dist/screen.js +152 -0
  82. package/dist/screen.js.map +1 -0
  83. package/dist/taskQueue.d.ts +70 -0
  84. package/dist/taskQueue.d.ts.map +1 -0
  85. package/dist/taskQueue.js +282 -0
  86. package/dist/taskQueue.js.map +1 -0
  87. package/dist/tui-test-harness.d.ts +216 -0
  88. package/dist/tui-test-harness.d.ts.map +1 -0
  89. package/dist/tui-test-harness.js +527 -0
  90. package/dist/tui-test-harness.js.map +1 -0
  91. package/dist/types.d.ts +257 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +46 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/ui-visual-test.d.ts +15 -0
  96. package/dist/ui-visual-test.d.ts.map +1 -0
  97. package/dist/ui-visual-test.js +141 -0
  98. package/dist/ui-visual-test.js.map +1 -0
  99. package/dist/ui.d.ts +272 -0
  100. package/dist/ui.d.ts.map +1 -0
  101. package/dist/ui.js +1531 -0
  102. package/dist/ui.js.map +1 -0
  103. package/dist/validator.d.ts +53 -0
  104. package/dist/validator.d.ts.map +1 -0
  105. package/dist/validator.js +491 -0
  106. package/dist/validator.js.map +1 -0
  107. package/dist/versionCheck.d.ts +63 -0
  108. package/dist/versionCheck.d.ts.map +1 -0
  109. package/dist/versionCheck.js +261 -0
  110. package/dist/versionCheck.js.map +1 -0
  111. package/package.json +62 -0
@@ -0,0 +1,228 @@
1
+ import { type PastedImageResult } from './imageManager.js';
2
+ export type { PastedImageResult };
3
+ /**
4
+ * Get the display width of a string (accounts for wide characters like CJK, emoji).
5
+ * Returns the number of terminal columns the string occupies.
6
+ */
7
+ export declare function getDisplayWidth(str: string): number;
8
+ /**
9
+ * Get the character index that corresponds to a given display column.
10
+ * Returns the index of the character at or before the column.
11
+ */
12
+ export declare function charIndexAtDisplayColumn(str: string, column: number): number;
13
+ /**
14
+ * Reusable InputBox component with consistent rendering and behavior.
15
+ *
16
+ * Features:
17
+ * - Full-screen redraw approach (reliable across all terminals)
18
+ * - Consistent structure: top border, input line(s), bottom border, hint (outside)
19
+ * - Multi-line input support via Ctrl+J (\x0a), Shift+Enter (in supported terminals),
20
+ * or pasting multi-line text. Note: Most terminals (iTerm2, Terminal.app) send the
21
+ * same sequence for Shift+Enter as Enter, so Ctrl+J is the reliable method.
22
+ * - Escape-to-clear with confirmation (press twice within 1 second)
23
+ * - Cursor movement (arrows, Home/End)
24
+ * - Backspace/Delete support
25
+ * - Image paste detection (base64, data URLs, iTerm2 sequences)
26
+ */
27
+ export interface InputBoxOptions {
28
+ /** Placeholder text shown when input is empty */
29
+ placeholder?: string;
30
+ /** Hint text shown below the input box (right-aligned) */
31
+ hint?: string;
32
+ /** Initial input value */
33
+ initialValue?: string;
34
+ /** Callback to clear screen and redraw content above input bar (REQUIRED for reliable rendering) */
35
+ onRedraw: (inputLines?: number) => void;
36
+ /** Callback when Enter is pressed (receives trimmed input) */
37
+ onSubmit?: (value: string) => void;
38
+ /** Callback when Escape cancels (only when input is empty or after double-escape) */
39
+ onCancel?: () => void;
40
+ /** Callback on each input change */
41
+ onChange?: (value: string) => void;
42
+ /** Custom key handler for additional keys (return true if handled) */
43
+ onKey?: (key: string, inputBox: InputBox) => boolean;
44
+ /**
45
+ * Callback when image data is pasted (base64, data URL, or iTerm2 escape sequence).
46
+ * Return true to prevent the data from being inserted as text.
47
+ * The callback receives the raw pasted data and detection result.
48
+ */
49
+ onImagePaste?: (data: string, detection: PastedImageResult) => boolean | Promise<boolean>;
50
+ /**
51
+ * Callback when CTRL+V is pressed to check system clipboard for images.
52
+ * This is called synchronously with the key press and should return a Promise.
53
+ * Return true if an image was found and handled, false to allow normal paste behavior.
54
+ */
55
+ onClipboardPaste?: () => Promise<boolean>;
56
+ /** Stream to write to (default: process.stdout) */
57
+ stdout?: NodeJS.WriteStream;
58
+ /** Stream to read from (default: process.stdin) */
59
+ stdin?: NodeJS.ReadStream;
60
+ /**
61
+ * Input mode: 'multi-line' (default) allows newlines, 'single-line' disables them.
62
+ */
63
+ mode?: 'single-line' | 'multi-line';
64
+ /**
65
+ * History array for navigation. When provided, enables history browsing.
66
+ * Most recent entries should be at the end of the array.
67
+ */
68
+ history?: string[];
69
+ /**
70
+ * Callback when history navigation is triggered (Shift+Up/Down or Up/Down at boundaries).
71
+ * Return the new value to set, or null to do nothing.
72
+ * @param direction - 'up' for previous history, 'down' for next history
73
+ * @param currentValue - The current input value (to save before navigating)
74
+ * @param historyIndex - Current history index (-1 means not in history)
75
+ */
76
+ onHistoryNavigate?: (direction: 'up' | 'down', currentValue: string, historyIndex: number) => string | null;
77
+ /**
78
+ * Callback when Up/Down is pressed at the first/last line of input.
79
+ * Used for task navigation in execution mode.
80
+ * Return true if handled (prevents default cursor movement).
81
+ */
82
+ onBoundaryNavigation?: (direction: 'up' | 'down') => boolean;
83
+ /**
84
+ * Whether to use Shift+Arrow for history navigation.
85
+ * If false (default), history is triggered by Up/Down when at input boundaries.
86
+ * If true, Shift+Up/Down always navigates history regardless of cursor position.
87
+ */
88
+ shiftArrowHistory?: boolean;
89
+ /**
90
+ * Custom footer rendering callback. When provided, this is called instead of
91
+ * the default hint rendering. Useful for adding extra content (like image lists)
92
+ * alongside the hint.
93
+ * @param escPendingClear - Whether escape-to-clear confirmation is pending
94
+ * @param termWidth - Current terminal width
95
+ */
96
+ customFooter?: (escPendingClear: boolean, termWidth: number) => void;
97
+ /**
98
+ * Callback to conditionally hide the input box visually.
99
+ * When this returns true, render() skips drawing borders and input line,
100
+ * but the InputBox still processes key events.
101
+ * Useful for menus where input should only appear for certain selections.
102
+ */
103
+ hideWhen?: () => boolean;
104
+ }
105
+ export declare class InputBox {
106
+ private inputBuffer;
107
+ private cursorIndex;
108
+ private isFirstRender;
109
+ private escPendingClear;
110
+ private escTimeout;
111
+ private escapeBuffer;
112
+ private escapeTimeout;
113
+ private resolved;
114
+ private options;
115
+ private stdout;
116
+ private stdin;
117
+ private dataHandler;
118
+ private rawModeWasEnabled;
119
+ private preferredVisualCol;
120
+ private historyIndex;
121
+ private savedInput;
122
+ private lastRenderedLineCount;
123
+ constructor(options: InputBoxOptions);
124
+ /** Get current input value */
125
+ getValue(): string;
126
+ /** Set input value programmatically */
127
+ setValue(value: string): void;
128
+ /** Clear input */
129
+ clear(): void;
130
+ /** Update history array */
131
+ setHistory(history: string[]): void;
132
+ /** Mark as first render (call after external screen redraw) */
133
+ markFirstRender(): void;
134
+ /** Get current history index (-1 means not browsing history) */
135
+ getHistoryIndex(): number;
136
+ /** Reset history navigation state (call when user modifies input) */
137
+ resetHistoryState(): void;
138
+ /**
139
+ * Navigate history in the given direction.
140
+ * @returns true if navigation occurred, false if at boundary
141
+ */
142
+ navigateHistory(direction: 'up' | 'down'): boolean;
143
+ /**
144
+ * Check if cursor is at the first visual line of input
145
+ */
146
+ isAtFirstLine(): boolean;
147
+ /**
148
+ * Check if cursor is at the last visual line of input
149
+ */
150
+ isAtLastLine(): boolean;
151
+ private safeWrite;
152
+ private getTermWidth;
153
+ private getTermHeight;
154
+ /**
155
+ * Get cursor position info within multi-line input.
156
+ * Returns the logical line number and column within that line.
157
+ */
158
+ private getLineInfo;
159
+ /**
160
+ * Get the content width available for text (terminal width minus prefix).
161
+ * Prefix is "> " for first line and " " for continuation lines = 2 chars.
162
+ */
163
+ private getContentWidth;
164
+ /**
165
+ * Get visual line info for navigation.
166
+ * Visual lines are what you see on screen after wrapping.
167
+ * Returns info about which visual row the cursor is on within the current logical line.
168
+ * Uses display width to account for wide characters (CJK, emoji, etc.).
169
+ */
170
+ private getVisualLineInfo;
171
+ /**
172
+ * Calculate cursor index from logical line number and column.
173
+ */
174
+ private cursorIndexFromLineCol;
175
+ /**
176
+ * Render the input box.
177
+ * Uses full-screen redraw approach for reliability.
178
+ * Supports multi-line input with proper cursor positioning.
179
+ *
180
+ * Self-clears previous output to prevent duplication when onRedraw is empty.
181
+ */
182
+ render(): void;
183
+ /**
184
+ * Handle a key press
185
+ */
186
+ handleKey(key: string): void;
187
+ /**
188
+ * Insert text at current cursor position
189
+ */
190
+ private insertText;
191
+ /**
192
+ * Handle bare escape key (no sequence following)
193
+ */
194
+ private handleBareEscape;
195
+ /**
196
+ * Clean up and stop listening
197
+ */
198
+ cleanup(): void;
199
+ /**
200
+ * Start listening for input
201
+ */
202
+ start(): void;
203
+ /**
204
+ * Run as a promise (convenience method)
205
+ */
206
+ prompt(): Promise<string | null>;
207
+ }
208
+ /**
209
+ * Create and run an InputBox as a promise
210
+ */
211
+ export declare function inputBox(options: InputBoxOptions): Promise<string | null>;
212
+ /**
213
+ * Create a single-line InputBox (no multi-line support)
214
+ */
215
+ export declare function singleLineInput(options: Omit<InputBoxOptions, 'mode'>): InputBox;
216
+ /**
217
+ * Create an InputBox with history navigation support
218
+ */
219
+ export declare function inputWithHistory(options: Omit<InputBoxOptions, 'mode'> & {
220
+ history: string[];
221
+ }): InputBox;
222
+ /**
223
+ * Create a single-line InputBox with history navigation
224
+ */
225
+ export declare function singleLineWithHistory(options: Omit<InputBoxOptions, 'mode' | 'shiftArrowHistory'> & {
226
+ history: string[];
227
+ }): InputBox;
228
+ //# sourceMappingURL=inputBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputBox.d.ts","sourceRoot":"","sources":["../src/inputBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAIlG,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnD;AAwED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAS5E;AAED;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oGAAoG;IACpG,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,sEAAsE;IACtE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IACrD;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAI1B;;OAEG;IACH,IAAI,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IAEpC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAE5G;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK,OAAO,CAAC;IAE7D;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAErE;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,iBAAiB,CAAU;IAEnC,OAAO,CAAC,kBAAkB,CAAgB;IAE1C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,qBAAqB,CAAS;gBAE1B,OAAO,EAAE,eAAe;IA4BpC,8BAA8B;IAC9B,QAAQ,IAAI,MAAM;IAIlB,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B,kBAAkB;IAClB,KAAK,IAAI,IAAI;IAQb,2BAA2B;IAC3B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAInC,+DAA+D;IAC/D,eAAe,IAAI,IAAI;IAIvB,gEAAgE;IAChE,eAAe,IAAI,MAAM;IAIzB,qEAAqE;IACrE,iBAAiB,IAAI,IAAI;IAKzB;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO;IAkElD;;OAEG;IACH,aAAa,IAAI,OAAO;IAKxB;;OAEG;IACH,YAAY,IAAI,OAAO;IAKvB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAsBnB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAQ9B;;;;;;OAMG;IACH,MAAM,IAAI,IAAI;IA0Id;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IA8U5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoCxB;;OAEG;IACH,OAAO,IAAI,IAAI;IA0Bf;;OAEG;IACH,KAAK,IAAI,IAAI;IAqBb;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAkBjC;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAG/E;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,QAAQ,CAEhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAC7D,QAAQ,CAEV;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,mBAAmB,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GACnF,QAAQ,CAMV"}