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,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":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5G;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;IACjC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,iCAAiC;IACjC,MAAM,EAAE,UAAU,CAAC;IACnB,sDAAsD;IACtD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oDAAoD;IACpD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,QAAQ,EAAE,aAAa,CAAC;IACxB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uFAAuF;IACvF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;IAC9B,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,8EAA8E;IAC9E,yBAAyB,CAAC,EAAE,yBAAyB,EAAE,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,MAAM,EAAE,aAAa,CAAC;IACtB,iCAAiC;IACjC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,yBAAyB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACxD,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,gBAAgB,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,eAAe,EAAE,aAAa,CAAC;IAC/B,8CAA8C;IAC9C,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,MAAM,GAAG,cAAc,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,yCAAyC;IACzC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uDAAuD;IACvD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,4BAA4B;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,aAO5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,aAAa,CAAC,GAAG,IAAI,CAcpG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,YAAY,CAYd"}
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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"}