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.
- package/LICENSE +15 -0
- package/README.md +107 -0
- package/dist/app.d.ts +247 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +4971 -0
- package/dist/app.js.map +1 -0
- package/dist/buildInfo.d.ts +5 -0
- package/dist/buildInfo.d.ts.map +1 -0
- package/dist/buildInfo.js +2 -0
- package/dist/buildInfo.js.map +1 -0
- package/dist/caffeinate.d.ts +72 -0
- package/dist/caffeinate.d.ts.map +1 -0
- package/dist/caffeinate.js +258 -0
- package/dist/caffeinate.js.map +1 -0
- package/dist/claudePath.d.ts +10 -0
- package/dist/claudePath.d.ts.map +1 -0
- package/dist/claudePath.js +34 -0
- package/dist/claudePath.js.map +1 -0
- package/dist/clipboard.d.ts +44 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +442 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/config.d.ts +211 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +933 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +50 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +81 -0
- package/dist/constants.js.map +1 -0
- package/dist/contextBuilder.d.ts +38 -0
- package/dist/contextBuilder.d.ts.map +1 -0
- package/dist/contextBuilder.js +113 -0
- package/dist/contextBuilder.js.map +1 -0
- package/dist/dependencyDetector.d.ts +57 -0
- package/dist/dependencyDetector.d.ts.map +1 -0
- package/dist/dependencyDetector.js +505 -0
- package/dist/dependencyDetector.js.map +1 -0
- package/dist/executor.d.ts +83 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +583 -0
- package/dist/executor.js.map +1 -0
- package/dist/git.d.ts +85 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +283 -0
- package/dist/git.js.map +1 -0
- package/dist/imageManager.d.ts +161 -0
- package/dist/imageManager.d.ts.map +1 -0
- package/dist/imageManager.js +674 -0
- package/dist/imageManager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +437 -0
- package/dist/index.js.map +1 -0
- package/dist/input-visual-test.d.ts +9 -0
- package/dist/input-visual-test.d.ts.map +1 -0
- package/dist/input-visual-test.js +108 -0
- package/dist/input-visual-test.js.map +1 -0
- package/dist/inputBox.d.ts +228 -0
- package/dist/inputBox.d.ts.map +1 -0
- package/dist/inputBox.js +966 -0
- package/dist/inputBox.js.map +1 -0
- package/dist/logger.d.ts +136 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +347 -0
- package/dist/logger.js.map +1 -0
- package/dist/orchestrator.d.ts +149 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +821 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/planner.d.ts +86 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +830 -0
- package/dist/planner.js.map +1 -0
- package/dist/pty-test-runner.d.ts +87 -0
- package/dist/pty-test-runner.d.ts.map +1 -0
- package/dist/pty-test-runner.js +721 -0
- package/dist/pty-test-runner.js.map +1 -0
- package/dist/screen.d.ts +44 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +152 -0
- package/dist/screen.js.map +1 -0
- package/dist/taskQueue.d.ts +70 -0
- package/dist/taskQueue.d.ts.map +1 -0
- package/dist/taskQueue.js +282 -0
- package/dist/taskQueue.js.map +1 -0
- package/dist/tui-test-harness.d.ts +216 -0
- package/dist/tui-test-harness.d.ts.map +1 -0
- package/dist/tui-test-harness.js +527 -0
- package/dist/tui-test-harness.js.map +1 -0
- package/dist/types.d.ts +257 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +46 -0
- package/dist/types.js.map +1 -0
- package/dist/ui-visual-test.d.ts +15 -0
- package/dist/ui-visual-test.d.ts.map +1 -0
- package/dist/ui-visual-test.js +141 -0
- package/dist/ui-visual-test.js.map +1 -0
- package/dist/ui.d.ts +272 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +1531 -0
- package/dist/ui.js.map +1 -0
- package/dist/validator.d.ts +53 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +491 -0
- package/dist/validator.js.map +1 -0
- package/dist/versionCheck.d.ts +63 -0
- package/dist/versionCheck.d.ts.map +1 -0
- package/dist/versionCheck.js +261 -0
- package/dist/versionCheck.js.map +1 -0
- package/package.json +62 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task status in the execution pipeline
|
|
3
|
+
*/
|
|
4
|
+
export type TaskStatus = 'pending' | 'in_progress' | 'completed' | 'failed' | 'skipped';
|
|
5
|
+
/**
|
|
6
|
+
* Project execution status
|
|
7
|
+
*/
|
|
8
|
+
export type ProjectStatus = 'idle' | 'planning' | 'ready' | 'executing' | 'paused' | 'completed' | 'failed';
|
|
9
|
+
/**
|
|
10
|
+
* Action to take when a task fails after all retries
|
|
11
|
+
* - retry: Keep retrying (up to maxRetries)
|
|
12
|
+
* - skip: Skip this task and continue with next tasks
|
|
13
|
+
* - stop: Stop execution and wait for human intervention
|
|
14
|
+
*/
|
|
15
|
+
export type FailureAction = 'retry' | 'skip' | 'stop';
|
|
16
|
+
/**
|
|
17
|
+
* Type of failure when a task fails
|
|
18
|
+
* - execution: Claude Code execution failed (code not written or error during implementation)
|
|
19
|
+
* - acceptance: Code was implemented but failed acceptance criteria validation
|
|
20
|
+
*/
|
|
21
|
+
export type FailureType = 'execution' | 'acceptance';
|
|
22
|
+
/**
|
|
23
|
+
* Record of a single retry attempt
|
|
24
|
+
*/
|
|
25
|
+
export interface RetryAttempt {
|
|
26
|
+
/** Which attempt this was (1-based) */
|
|
27
|
+
attempt: number;
|
|
28
|
+
/** When the attempt was made */
|
|
29
|
+
timestamp: string;
|
|
30
|
+
/** Type of failure */
|
|
31
|
+
failureType: FailureType;
|
|
32
|
+
/** Brief description of what went wrong */
|
|
33
|
+
reason: string;
|
|
34
|
+
/** Full error output (for detailed view) */
|
|
35
|
+
fullError?: string;
|
|
36
|
+
/** Duration of this attempt in milliseconds */
|
|
37
|
+
durationMs?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Metadata for an image associated with a task
|
|
41
|
+
*/
|
|
42
|
+
export interface ImageMetadata {
|
|
43
|
+
/** Unique identifier used in placeholders [image:id] */
|
|
44
|
+
id: string;
|
|
45
|
+
/** Original filename */
|
|
46
|
+
originalName: string;
|
|
47
|
+
/** Path relative to .maistro/images/ */
|
|
48
|
+
storagePath: string;
|
|
49
|
+
/** MIME type (e.g., "image/png") */
|
|
50
|
+
mimeType: string;
|
|
51
|
+
/** File size in bytes */
|
|
52
|
+
size: number;
|
|
53
|
+
/** Optional description provided by user */
|
|
54
|
+
description?: string;
|
|
55
|
+
/** Source: 'file', 'url', or 'paste' */
|
|
56
|
+
source: 'file' | 'url' | 'paste';
|
|
57
|
+
/** Original URL if downloaded from web */
|
|
58
|
+
sourceUrl?: string;
|
|
59
|
+
/** Timestamp when added */
|
|
60
|
+
createdAt: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* A single task to be executed by Claude Code
|
|
64
|
+
*/
|
|
65
|
+
export interface Task {
|
|
66
|
+
/** Unique identifier for the task */
|
|
67
|
+
id: string;
|
|
68
|
+
/** Short title describing the task */
|
|
69
|
+
title: string;
|
|
70
|
+
/** Detailed description of what needs to be done */
|
|
71
|
+
description: string;
|
|
72
|
+
/** Acceptance criteria - short, validatable conditions for task completion */
|
|
73
|
+
acceptanceCriteria?: string[];
|
|
74
|
+
/** Current status of the task */
|
|
75
|
+
status: TaskStatus;
|
|
76
|
+
/** IDs of tasks that must complete before this one */
|
|
77
|
+
dependencies: string[];
|
|
78
|
+
/** Glob patterns for files relevant to this task */
|
|
79
|
+
contextPatterns: string[];
|
|
80
|
+
/** Test command to run for validation (optional) */
|
|
81
|
+
testCommand?: string;
|
|
82
|
+
/** Number of retry attempts made */
|
|
83
|
+
retryCount: number;
|
|
84
|
+
/** Maximum retries before failing (default: 3) */
|
|
85
|
+
maxRetries: number;
|
|
86
|
+
/** Action to take when task fails after all retries (default: 'skip') */
|
|
87
|
+
ifFailed: FailureAction;
|
|
88
|
+
/** Per-task timeout in milliseconds (default: 60 minutes) */
|
|
89
|
+
timeout: number;
|
|
90
|
+
/** Error message if task failed */
|
|
91
|
+
error?: string;
|
|
92
|
+
/** Type of failure if task failed (execution vs acceptance criteria) */
|
|
93
|
+
failureType?: FailureType;
|
|
94
|
+
/** Brief summary of why task failed (e.g., "Test assertions failed", "Build error") */
|
|
95
|
+
failureReason?: string;
|
|
96
|
+
/** History of retry attempts with detailed error info */
|
|
97
|
+
retryHistory?: RetryAttempt[];
|
|
98
|
+
/** Timestamp when task was created */
|
|
99
|
+
createdAt: string;
|
|
100
|
+
/** Timestamp when task was last updated */
|
|
101
|
+
updatedAt: string;
|
|
102
|
+
/** Execution duration in milliseconds (set when task completes) */
|
|
103
|
+
durationMs?: number;
|
|
104
|
+
/** Brief summary of what was accomplished (2 lines, set after successful completion) */
|
|
105
|
+
resultSummary?: string;
|
|
106
|
+
/** Image IDs referenced in this task's description (e.g., from [image:id] placeholders) */
|
|
107
|
+
imageRefs?: string[];
|
|
108
|
+
/** Results from acceptance criteria validation (set after validation runs) */
|
|
109
|
+
acceptanceCriteriaResults?: AcceptanceCriterionResult[];
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Overall project state
|
|
113
|
+
*/
|
|
114
|
+
export interface ProjectState {
|
|
115
|
+
/** The original goal/PRD provided by the user */
|
|
116
|
+
goal: string;
|
|
117
|
+
/** Name of the project */
|
|
118
|
+
projectName: string;
|
|
119
|
+
/** Path to the project directory */
|
|
120
|
+
projectPath: string;
|
|
121
|
+
/** Current status of the project */
|
|
122
|
+
status: ProjectStatus;
|
|
123
|
+
/** All tasks for this project */
|
|
124
|
+
tasks: Task[];
|
|
125
|
+
/** Index of the current task being executed */
|
|
126
|
+
currentTaskIndex: number;
|
|
127
|
+
/** Timestamp when project was created */
|
|
128
|
+
createdAt: string;
|
|
129
|
+
/** Timestamp when project was last updated */
|
|
130
|
+
updatedAt: string;
|
|
131
|
+
/** Image metadata for all project images (keyed by image ID) */
|
|
132
|
+
images?: Record<string, ImageMetadata>;
|
|
133
|
+
/** Input history for the TUI (max 20 entries, persisted across sessions) */
|
|
134
|
+
inputHistory?: string[];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Result from executing a task
|
|
138
|
+
*/
|
|
139
|
+
export interface ExecutionResult {
|
|
140
|
+
/** Whether the execution succeeded */
|
|
141
|
+
success: boolean;
|
|
142
|
+
/** Output from Claude Code */
|
|
143
|
+
output: string;
|
|
144
|
+
/** Error output if any */
|
|
145
|
+
error?: string;
|
|
146
|
+
/** Exit code from the process */
|
|
147
|
+
exitCode: number;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Result for a single acceptance criterion validation
|
|
151
|
+
*/
|
|
152
|
+
export interface AcceptanceCriterionResult {
|
|
153
|
+
/** The criterion text that was validated */
|
|
154
|
+
criterion: string;
|
|
155
|
+
/** Whether the criterion passed */
|
|
156
|
+
passed: boolean;
|
|
157
|
+
/** Explanation of why it passed or failed */
|
|
158
|
+
explanation: string;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Result from validation
|
|
162
|
+
*/
|
|
163
|
+
export interface ValidationResult {
|
|
164
|
+
/** Whether validation passed */
|
|
165
|
+
passed: boolean;
|
|
166
|
+
/** Details about what was checked */
|
|
167
|
+
details: string;
|
|
168
|
+
/** Test output if tests were run */
|
|
169
|
+
testOutput?: string;
|
|
170
|
+
/** Review feedback if AI review was used */
|
|
171
|
+
reviewFeedback?: string;
|
|
172
|
+
/** Per-criterion results from acceptance criteria validation */
|
|
173
|
+
acceptanceCriteriaResults?: AcceptanceCriterionResult[];
|
|
174
|
+
/** Brief summary of what was accomplished (2 lines) */
|
|
175
|
+
resultSummary?: string;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Configuration for Maistro
|
|
179
|
+
*/
|
|
180
|
+
export interface MaistroConfig {
|
|
181
|
+
/** Path to store project state */
|
|
182
|
+
statePath: string;
|
|
183
|
+
/** Default test command */
|
|
184
|
+
defaultTestCommand?: string;
|
|
185
|
+
/** Maximum retries per task (default: 3) */
|
|
186
|
+
maxRetries: number;
|
|
187
|
+
/** Delay between retry attempts in milliseconds (default: 60000 = 1 minute) */
|
|
188
|
+
retryDelayMs: number;
|
|
189
|
+
/** Default timeout for Claude Code execution in milliseconds (default: 3600000 = 1 hour) */
|
|
190
|
+
executionTimeout: number;
|
|
191
|
+
/** Default action when task fails after all retries (default: 'skip') */
|
|
192
|
+
defaultIfFailed: FailureAction;
|
|
193
|
+
/** Whether to use AI review for validation */
|
|
194
|
+
useAIReview: boolean;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Question type for discovery phase
|
|
198
|
+
*/
|
|
199
|
+
export type DiscoveryQuestionType = 'choice' | 'text' | 'multi-choice';
|
|
200
|
+
/**
|
|
201
|
+
* A single question to ask during project discovery
|
|
202
|
+
*/
|
|
203
|
+
export interface DiscoveryQuestion {
|
|
204
|
+
/** Unique identifier for the question */
|
|
205
|
+
id: string;
|
|
206
|
+
/** The question to ask the user */
|
|
207
|
+
question: string;
|
|
208
|
+
/** Type of input expected */
|
|
209
|
+
type: DiscoveryQuestionType;
|
|
210
|
+
/** Options for choice/multi-choice questions */
|
|
211
|
+
options?: string[];
|
|
212
|
+
/** Default value or selection */
|
|
213
|
+
default?: string;
|
|
214
|
+
/** Reason why this question is being asked */
|
|
215
|
+
reason?: string;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Result from the discovery phase
|
|
219
|
+
*/
|
|
220
|
+
export interface DiscoveryResult {
|
|
221
|
+
/** Brief summary of understanding of the goal */
|
|
222
|
+
summary: string;
|
|
223
|
+
/** Questions that were asked */
|
|
224
|
+
questions: DiscoveryQuestion[];
|
|
225
|
+
/** Assumptions made about the project */
|
|
226
|
+
assumptions: string[];
|
|
227
|
+
/** User's answers to the questions (keyed by question id) */
|
|
228
|
+
answers: Record<string, string>;
|
|
229
|
+
/** Whether the user confirmed the discovery results */
|
|
230
|
+
confirmed: boolean;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Context built from discovery to inform task decomposition
|
|
234
|
+
*/
|
|
235
|
+
export interface ProjectContext {
|
|
236
|
+
/** Original goal */
|
|
237
|
+
goal: string;
|
|
238
|
+
/** Summary from discovery */
|
|
239
|
+
summary: string;
|
|
240
|
+
/** User's preferences and answers */
|
|
241
|
+
preferences: Record<string, string>;
|
|
242
|
+
/** Confirmed assumptions */
|
|
243
|
+
assumptions: string[];
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Default configuration
|
|
247
|
+
*/
|
|
248
|
+
export declare const DEFAULT_CONFIG: MaistroConfig;
|
|
249
|
+
/**
|
|
250
|
+
* Create a new task with default values
|
|
251
|
+
*/
|
|
252
|
+
export declare function createTask(partial: Partial<Task> & Pick<Task, 'id' | 'title' | 'description'>): Task;
|
|
253
|
+
/**
|
|
254
|
+
* Create a new project state with default values
|
|
255
|
+
*/
|
|
256
|
+
export declare function createProjectState(goal: string, projectName: string, projectPath: string): ProjectState;
|
|
257
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default configuration
|
|
3
|
+
*/
|
|
4
|
+
export const DEFAULT_CONFIG = {
|
|
5
|
+
statePath: '.maistro/state.json',
|
|
6
|
+
maxRetries: 3,
|
|
7
|
+
retryDelayMs: 60 * 1000, // 1 minute between retries
|
|
8
|
+
executionTimeout: 60 * 60 * 1000, // 1 hour per task
|
|
9
|
+
defaultIfFailed: 'skip',
|
|
10
|
+
useAIReview: false,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Create a new task with default values
|
|
14
|
+
*/
|
|
15
|
+
export function createTask(partial) {
|
|
16
|
+
const now = new Date().toISOString();
|
|
17
|
+
return {
|
|
18
|
+
status: 'pending',
|
|
19
|
+
dependencies: [],
|
|
20
|
+
contextPatterns: [],
|
|
21
|
+
retryCount: 0,
|
|
22
|
+
maxRetries: DEFAULT_CONFIG.maxRetries,
|
|
23
|
+
ifFailed: DEFAULT_CONFIG.defaultIfFailed,
|
|
24
|
+
timeout: DEFAULT_CONFIG.executionTimeout,
|
|
25
|
+
createdAt: now,
|
|
26
|
+
updatedAt: now,
|
|
27
|
+
...partial,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create a new project state with default values
|
|
32
|
+
*/
|
|
33
|
+
export function createProjectState(goal, projectName, projectPath) {
|
|
34
|
+
const now = new Date().toISOString();
|
|
35
|
+
return {
|
|
36
|
+
goal,
|
|
37
|
+
projectName,
|
|
38
|
+
projectPath,
|
|
39
|
+
status: 'idle',
|
|
40
|
+
tasks: [],
|
|
41
|
+
currentTaskIndex: 0,
|
|
42
|
+
createdAt: now,
|
|
43
|
+
updatedAt: now,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAoQA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,SAAS,EAAE,qBAAqB;IAChC,UAAU,EAAE,CAAC;IACb,YAAY,EAAE,EAAE,GAAG,IAAI,EAAE,2BAA2B;IACpD,gBAAgB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,kBAAkB;IACpD,eAAe,EAAE,MAAM;IACvB,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAmE;IAC5F,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;QACnB,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,cAAc,CAAC,UAAU;QACrC,QAAQ,EAAE,cAAc,CAAC,eAAe;QACxC,OAAO,EAAE,cAAc,CAAC,gBAAgB;QACxC,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,GAAG,OAAO;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,WAAmB,EACnB,WAAmB;IAEnB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO;QACL,IAAI;QACJ,WAAW;QACX,WAAW;QACX,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,EAAE;QACT,gBAAgB,EAAE,CAAC;QACnB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* UI Visual Test Script
|
|
4
|
+
*
|
|
5
|
+
* Renders UI components in terminal for visual verification.
|
|
6
|
+
* Run with: npx tsx src/ui-visual-test.ts
|
|
7
|
+
*
|
|
8
|
+
* This script tests:
|
|
9
|
+
* - Input box rendering with placeholder and various input lengths
|
|
10
|
+
* - Cursor block positioning
|
|
11
|
+
* - Border alignment
|
|
12
|
+
* - Indeterminate progress bar animation
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=ui-visual-test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-visual-test.d.ts","sourceRoot":"","sources":["../src/ui-visual-test.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* UI Visual Test Script
|
|
4
|
+
*
|
|
5
|
+
* Renders UI components in terminal for visual verification.
|
|
6
|
+
* Run with: npx tsx src/ui-visual-test.ts
|
|
7
|
+
*
|
|
8
|
+
* This script tests:
|
|
9
|
+
* - Input box rendering with placeholder and various input lengths
|
|
10
|
+
* - Cursor block positioning
|
|
11
|
+
* - Border alignment
|
|
12
|
+
* - Indeterminate progress bar animation
|
|
13
|
+
*/
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Constants matching app.ts planViewInput implementation
|
|
16
|
+
// ============================================================================
|
|
17
|
+
const HINT = 'Enter send';
|
|
18
|
+
const PLACEHOLDER = 'type command...';
|
|
19
|
+
// ANSI escape sequences
|
|
20
|
+
const ANSI = {
|
|
21
|
+
RESET: '\x1b[0m',
|
|
22
|
+
DIM: '\x1b[90m',
|
|
23
|
+
CYAN: '\x1b[36m',
|
|
24
|
+
REVERSE: '\x1b[7m',
|
|
25
|
+
HIDE_CURSOR: '\x1b[?25l',
|
|
26
|
+
SHOW_CURSOR: '\x1b[?25h',
|
|
27
|
+
};
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Helper Functions
|
|
30
|
+
// ============================================================================
|
|
31
|
+
function visualWidth(str) {
|
|
32
|
+
return str.replace(/\x1b\[[0-9;]*m/g, '').length;
|
|
33
|
+
}
|
|
34
|
+
function renderInputLine(inputBuffer, termWidth) {
|
|
35
|
+
const contentWidth = termWidth - 2;
|
|
36
|
+
const hintLen = HINT.length;
|
|
37
|
+
if (inputBuffer) {
|
|
38
|
+
const usedWidth = 2 + inputBuffer.length + 1 + hintLen;
|
|
39
|
+
const padding = Math.max(1, contentWidth - usedWidth);
|
|
40
|
+
return `${ANSI.DIM}>${ANSI.RESET} ${inputBuffer}${ANSI.REVERSE} ${ANSI.RESET}${' '.repeat(padding)}${ANSI.DIM}${HINT}${ANSI.RESET}`;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const usedWidth = 2 + 1 + PLACEHOLDER.length + hintLen;
|
|
44
|
+
const padding = Math.max(1, contentWidth - usedWidth);
|
|
45
|
+
return `${ANSI.DIM}> ${ANSI.RESET}${ANSI.REVERSE} ${ANSI.RESET}${ANSI.DIM}${PLACEHOLDER}${' '.repeat(padding)}${HINT}${ANSI.RESET}`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function renderInputBox(inputBuffer, termWidth) {
|
|
49
|
+
const border = `${ANSI.DIM}${'─'.repeat(termWidth)}${ANSI.RESET}`;
|
|
50
|
+
return [border, renderInputLine(inputBuffer, termWidth), border];
|
|
51
|
+
}
|
|
52
|
+
function renderProgressBar(pos, barWidth, bounceWidth) {
|
|
53
|
+
let bar = '';
|
|
54
|
+
for (let i = 0; i < barWidth; i++) {
|
|
55
|
+
if (i >= pos && i < pos + bounceWidth) {
|
|
56
|
+
bar += `${ANSI.CYAN}█${ANSI.RESET}`;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
bar += `${ANSI.DIM}░${ANSI.RESET}`;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return bar;
|
|
63
|
+
}
|
|
64
|
+
// ============================================================================
|
|
65
|
+
// Visual Tests
|
|
66
|
+
// ============================================================================
|
|
67
|
+
function runVisualTests() {
|
|
68
|
+
const termWidth = process.stdout.columns || 80;
|
|
69
|
+
console.log('\n' + '='.repeat(termWidth));
|
|
70
|
+
console.log('UI VISUAL TESTS');
|
|
71
|
+
console.log('='.repeat(termWidth));
|
|
72
|
+
console.log(`Terminal width: ${termWidth}`);
|
|
73
|
+
console.log(`Content width: ${termWidth - 2}`);
|
|
74
|
+
// Test 1: Placeholder mode
|
|
75
|
+
console.log('\n' + '-'.repeat(40));
|
|
76
|
+
console.log('Test 1: Placeholder Mode');
|
|
77
|
+
console.log('-'.repeat(40));
|
|
78
|
+
const placeholderLines = renderInputBox('', termWidth);
|
|
79
|
+
process.stdout.write(ANSI.HIDE_CURSOR);
|
|
80
|
+
console.log(placeholderLines.join('\n'));
|
|
81
|
+
process.stdout.write(ANSI.SHOW_CURSOR);
|
|
82
|
+
console.log(`Line width: ${visualWidth(placeholderLines[1])} (expected: ${termWidth - 2})`);
|
|
83
|
+
// Test 2: Short input
|
|
84
|
+
console.log('\n' + '-'.repeat(40));
|
|
85
|
+
console.log('Test 2: Short Input ("run")');
|
|
86
|
+
console.log('-'.repeat(40));
|
|
87
|
+
const shortLines = renderInputBox('run', termWidth);
|
|
88
|
+
process.stdout.write(ANSI.HIDE_CURSOR);
|
|
89
|
+
console.log(shortLines.join('\n'));
|
|
90
|
+
process.stdout.write(ANSI.SHOW_CURSOR);
|
|
91
|
+
console.log(`Line width: ${visualWidth(shortLines[1])} (expected: ${termWidth - 2})`);
|
|
92
|
+
// Test 3: Medium input
|
|
93
|
+
console.log('\n' + '-'.repeat(40));
|
|
94
|
+
console.log('Test 3: Medium Input ("expand")');
|
|
95
|
+
console.log('-'.repeat(40));
|
|
96
|
+
const mediumLines = renderInputBox('expand', termWidth);
|
|
97
|
+
process.stdout.write(ANSI.HIDE_CURSOR);
|
|
98
|
+
console.log(mediumLines.join('\n'));
|
|
99
|
+
process.stdout.write(ANSI.SHOW_CURSOR);
|
|
100
|
+
console.log(`Line width: ${visualWidth(mediumLines[1])} (expected: ${termWidth - 2})`);
|
|
101
|
+
// Test 4: Long input
|
|
102
|
+
console.log('\n' + '-'.repeat(40));
|
|
103
|
+
console.log('Test 4: Long Input');
|
|
104
|
+
console.log('-'.repeat(40));
|
|
105
|
+
const longInput = 'modify add new task for testing the long input case';
|
|
106
|
+
const longLines = renderInputBox(longInput, termWidth);
|
|
107
|
+
process.stdout.write(ANSI.HIDE_CURSOR);
|
|
108
|
+
console.log(longLines.join('\n'));
|
|
109
|
+
process.stdout.write(ANSI.SHOW_CURSOR);
|
|
110
|
+
console.log(`Line width: ${visualWidth(longLines[1])} (expected: ${termWidth - 2})`);
|
|
111
|
+
// Test 5: Indeterminate progress bar
|
|
112
|
+
console.log('\n' + '-'.repeat(40));
|
|
113
|
+
console.log('Test 5: Indeterminate Progress Bar Animation');
|
|
114
|
+
console.log('-'.repeat(40));
|
|
115
|
+
const barWidth = 30;
|
|
116
|
+
const bounceWidth = 6;
|
|
117
|
+
const positions = [0, 4, 8, 12, 16, 20, 24, 20, 16, 12, 8, 4, 0];
|
|
118
|
+
for (const pos of positions) {
|
|
119
|
+
const bar = renderProgressBar(pos, barWidth, bounceWidth);
|
|
120
|
+
console.log(`${bar} 📋 Task 1 ${ANSI.CYAN}Executing${ANSI.RESET} ${ANSI.DIM}(5s)${ANSI.RESET}`);
|
|
121
|
+
}
|
|
122
|
+
// Test 6: Verify cursor is inside box
|
|
123
|
+
console.log('\n' + '-'.repeat(40));
|
|
124
|
+
console.log('Test 6: Cursor Position Verification');
|
|
125
|
+
console.log('-'.repeat(40));
|
|
126
|
+
console.log('The cursor block (inverted space) should appear:');
|
|
127
|
+
console.log('- In placeholder mode: After "> "');
|
|
128
|
+
console.log('- In input mode: After the typed text\n');
|
|
129
|
+
const verifyLines = renderInputBox('test', termWidth);
|
|
130
|
+
process.stdout.write(ANSI.HIDE_CURSOR);
|
|
131
|
+
console.log(verifyLines.join('\n'));
|
|
132
|
+
process.stdout.write(ANSI.SHOW_CURSOR);
|
|
133
|
+
console.log('\nCursor should be visible as inverted block after "test"');
|
|
134
|
+
console.log('\n' + '='.repeat(termWidth));
|
|
135
|
+
console.log('VISUAL TESTS COMPLETE');
|
|
136
|
+
console.log('='.repeat(termWidth) + '\n');
|
|
137
|
+
}
|
|
138
|
+
// Run tests
|
|
139
|
+
runVisualTests();
|
|
140
|
+
export {};
|
|
141
|
+
//# sourceMappingURL=ui-visual-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-visual-test.js","sourceRoot":"","sources":["../src/ui-visual-test.ts"],"names":[],"mappings":"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"}
|