openplanr 0.6.0 → 0.8.0

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/dist/agents/claude-agent.d.ts.map +1 -1
  2. package/dist/agents/claude-agent.js +5 -1
  3. package/dist/agents/claude-agent.js.map +1 -1
  4. package/dist/agents/implementation-bridge.d.ts.map +1 -1
  5. package/dist/agents/implementation-bridge.js +27 -4
  6. package/dist/agents/implementation-bridge.js.map +1 -1
  7. package/dist/ai/prompts/prompt-builder.d.ts +2 -0
  8. package/dist/ai/prompts/prompt-builder.d.ts.map +1 -1
  9. package/dist/ai/prompts/prompt-builder.js +21 -1
  10. package/dist/ai/prompts/prompt-builder.js.map +1 -1
  11. package/dist/ai/prompts/system-prompts.d.ts +2 -0
  12. package/dist/ai/prompts/system-prompts.d.ts.map +1 -1
  13. package/dist/ai/prompts/system-prompts.js +66 -0
  14. package/dist/ai/prompts/system-prompts.js.map +1 -1
  15. package/dist/ai/schemas/ai-response-schemas.d.ts +29 -0
  16. package/dist/ai/schemas/ai-response-schemas.d.ts.map +1 -1
  17. package/dist/ai/schemas/ai-response-schemas.js +21 -0
  18. package/dist/ai/schemas/ai-response-schemas.js.map +1 -1
  19. package/dist/ai/types.d.ts +1 -0
  20. package/dist/ai/types.d.ts.map +1 -1
  21. package/dist/ai/types.js +1 -0
  22. package/dist/ai/types.js.map +1 -1
  23. package/dist/cli/commands/estimate.d.ts +3 -0
  24. package/dist/cli/commands/estimate.d.ts.map +1 -0
  25. package/dist/cli/commands/estimate.js +367 -0
  26. package/dist/cli/commands/estimate.js.map +1 -0
  27. package/dist/cli/commands/init.d.ts.map +1 -1
  28. package/dist/cli/commands/init.js +10 -1
  29. package/dist/cli/commands/init.js.map +1 -1
  30. package/dist/cli/commands/quick.d.ts +13 -0
  31. package/dist/cli/commands/quick.d.ts.map +1 -0
  32. package/dist/cli/commands/quick.js +332 -0
  33. package/dist/cli/commands/quick.js.map +1 -0
  34. package/dist/cli/commands/search.d.ts +3 -0
  35. package/dist/cli/commands/search.d.ts.map +1 -0
  36. package/dist/cli/commands/search.js +115 -0
  37. package/dist/cli/commands/search.js.map +1 -0
  38. package/dist/cli/commands/status.d.ts.map +1 -1
  39. package/dist/cli/commands/status.js +31 -1
  40. package/dist/cli/commands/status.js.map +1 -1
  41. package/dist/cli/index.js +6 -0
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/models/schema.d.ts +1 -0
  44. package/dist/models/schema.d.ts.map +1 -1
  45. package/dist/models/schema.js +1 -0
  46. package/dist/models/schema.js.map +1 -1
  47. package/dist/models/types.d.ts +3 -2
  48. package/dist/models/types.d.ts.map +1 -1
  49. package/dist/services/artifact-service.d.ts.map +1 -1
  50. package/dist/services/artifact-service.js +2 -0
  51. package/dist/services/artifact-service.js.map +1 -1
  52. package/dist/services/config-service.d.ts.map +1 -1
  53. package/dist/services/config-service.js +1 -0
  54. package/dist/services/config-service.js.map +1 -1
  55. package/dist/templates/guides/estimation.md.hbs +71 -0
  56. package/dist/templates/quick/quick-task.md.hbs +29 -0
  57. package/dist/utils/constants.d.ts +2 -0
  58. package/dist/utils/constants.d.ts.map +1 -1
  59. package/dist/utils/constants.js +2 -0
  60. package/dist/utils/constants.js.map +1 -1
  61. package/package.json +1 -1
@@ -0,0 +1,367 @@
1
+ import chalk from 'chalk';
2
+ import { buildEstimatePrompt } from '../../ai/prompts/prompt-builder.js';
3
+ import { aiEstimateResponseSchema } from '../../ai/schemas/ai-response-schemas.js';
4
+ import { TOKEN_BUDGETS } from '../../ai/types.js';
5
+ import { generateStreamingJSON, getAIProvider } from '../../services/ai-service.js';
6
+ import { findArtifactTypeById, listArtifacts, readArtifact, readArtifactRaw, updateArtifact, } from '../../services/artifact-service.js';
7
+ import { loadConfig } from '../../services/config-service.js';
8
+ import { promptSelect } from '../../services/prompt-service.js';
9
+ import { createSpinner, logger } from '../../utils/logger.js';
10
+ import { parseMarkdown } from '../../utils/markdown.js';
11
+ // ---------------------------------------------------------------------------
12
+ // Display helpers
13
+ // ---------------------------------------------------------------------------
14
+ function complexityColor(complexity) {
15
+ if (complexity === 'low')
16
+ return chalk.green(complexity);
17
+ if (complexity === 'medium')
18
+ return chalk.yellow(complexity);
19
+ return chalk.red(complexity);
20
+ }
21
+ function displayEstimate(id, estimate) {
22
+ console.log('');
23
+ console.log(chalk.bold(` ${id} — Effort Estimate`));
24
+ console.log(` ${'─'.repeat(40)}`);
25
+ console.log(` Story Points: ${chalk.bold(String(estimate.storyPoints))}`);
26
+ console.log(` Hours: ${estimate.estimatedHours}h`);
27
+ console.log(` Complexity: ${complexityColor(estimate.complexity)}`);
28
+ console.log('');
29
+ console.log(` ${chalk.dim('Risk Factors:')}`);
30
+ for (const risk of estimate.riskFactors) {
31
+ console.log(` • ${risk}`);
32
+ }
33
+ console.log('');
34
+ console.log(` ${chalk.dim('Reasoning:')}`);
35
+ console.log(` ${estimate.reasoning}`);
36
+ if (estimate.assumptions.length > 0) {
37
+ console.log('');
38
+ console.log(` ${chalk.dim('Assumptions:')}`);
39
+ for (const a of estimate.assumptions) {
40
+ console.log(` • ${a}`);
41
+ }
42
+ }
43
+ console.log('');
44
+ }
45
+ function displayRollupTable(estimates) {
46
+ console.log('');
47
+ console.log(chalk.bold(' Rollup Summary'));
48
+ console.log(` ${'─'.repeat(55)}`);
49
+ console.log(` ${chalk.dim('ID'.padEnd(12))} ${chalk.dim('Points'.padEnd(8))} ${chalk.dim('Hours'.padEnd(8))} ${chalk.dim('Complexity')}`);
50
+ console.log(` ${'─'.repeat(55)}`);
51
+ let totalPoints = 0;
52
+ let totalHours = 0;
53
+ let maxComplexity = 'low';
54
+ const complexityOrder = { low: 0, medium: 1, high: 2 };
55
+ for (const { id, estimate } of estimates) {
56
+ totalPoints += estimate.storyPoints;
57
+ totalHours += estimate.estimatedHours;
58
+ if (complexityOrder[estimate.complexity] > complexityOrder[maxComplexity]) {
59
+ maxComplexity = estimate.complexity;
60
+ }
61
+ console.log(` ${id.padEnd(12)} ${String(estimate.storyPoints).padEnd(8)} ${(`${estimate.estimatedHours}h`).padEnd(8)} ${complexityColor(estimate.complexity)}`);
62
+ }
63
+ console.log(` ${'─'.repeat(55)}`);
64
+ console.log(` ${chalk.bold('TOTAL'.padEnd(12))} ${chalk.bold(String(totalPoints).padEnd(8))} ${chalk.bold(`${totalHours}h`.padEnd(8))} ${complexityColor(maxComplexity)}`);
65
+ console.log('');
66
+ }
67
+ // ---------------------------------------------------------------------------
68
+ // Markdown persistence
69
+ // ---------------------------------------------------------------------------
70
+ function buildEstimateSection(estimate) {
71
+ const lines = [];
72
+ lines.push('## Estimate');
73
+ lines.push(`- **Story Points:** ${estimate.storyPoints}`);
74
+ lines.push(`- **Hours:** ${estimate.estimatedHours}h`);
75
+ lines.push(`- **Complexity:** ${estimate.complexity}`);
76
+ lines.push('');
77
+ lines.push('### Risk Factors');
78
+ for (const risk of estimate.riskFactors) {
79
+ lines.push(`- ${risk}`);
80
+ }
81
+ lines.push('');
82
+ lines.push('### Reasoning');
83
+ lines.push(estimate.reasoning);
84
+ if (estimate.assumptions.length > 0) {
85
+ lines.push('');
86
+ lines.push('### Assumptions');
87
+ for (const a of estimate.assumptions) {
88
+ lines.push(`- ${a}`);
89
+ }
90
+ }
91
+ return lines.join('\n');
92
+ }
93
+ // ---------------------------------------------------------------------------
94
+ // Save helper
95
+ // ---------------------------------------------------------------------------
96
+ async function saveEstimateToArtifact(raw, result, projectDir, config, type, artifactId) {
97
+ let updated = raw;
98
+ // --- Inject estimate fields into frontmatter (preserving original formatting) ---
99
+ // Remove old estimate fields if present, then add fresh ones before closing ---
100
+ updated = updated.replace(/^estimatedEffort:.*\n/m, '');
101
+ updated = updated.replace(/^estimatedPoints:.*\n/m, '');
102
+ updated = updated.replace(/^estimatedHours:.*\n/m, '');
103
+ updated = updated.replace(/^complexity:.*\n/m, '');
104
+ const estimateFields = [
105
+ `estimatedPoints: ${result.storyPoints}`,
106
+ `estimatedHours: ${result.estimatedHours}`,
107
+ `complexity: "${result.complexity}"`,
108
+ ].join('\n');
109
+ // Insert before the closing --- of frontmatter (second occurrence)
110
+ const closingIdx = updated.indexOf('\n---', updated.indexOf('---') + 3);
111
+ if (closingIdx !== -1) {
112
+ updated = `${updated.slice(0, closingIdx)}\n${estimateFields}${updated.slice(closingIdx)}`;
113
+ }
114
+ // --- Append or replace ## Estimate section in body ---
115
+ const estimateSection = buildEstimateSection(result);
116
+ const sectionRegex = /\n## Estimate\n[\s\S]*?(?=\n## |\n*$)/;
117
+ if (sectionRegex.test(updated)) {
118
+ updated = updated.replace(sectionRegex, `\n${estimateSection}`);
119
+ }
120
+ else {
121
+ updated = `${updated.trimEnd()}\n\n${estimateSection}\n`;
122
+ }
123
+ await updateArtifact(projectDir, config, type, artifactId, updated);
124
+ logger.success(`Saved estimate to ${artifactId}`);
125
+ }
126
+ // ---------------------------------------------------------------------------
127
+ // Core estimation
128
+ // ---------------------------------------------------------------------------
129
+ async function estimateSingle(projectDir, config, artifactId, opts) {
130
+ const type = findArtifactTypeById(artifactId);
131
+ if (!type) {
132
+ logger.error(`Cannot determine artifact type from ID: ${artifactId}`);
133
+ logger.dim('Expected format: EPIC-001, FEAT-001, US-001, TASK-001, QT-001');
134
+ return null;
135
+ }
136
+ const raw = await readArtifactRaw(projectDir, config, type, artifactId);
137
+ if (!raw) {
138
+ logger.error(`Artifact not found: ${artifactId}`);
139
+ return null;
140
+ }
141
+ // Build codebase context (best-effort)
142
+ let codebaseContext;
143
+ try {
144
+ const { buildCodebaseContext, extractKeywords, formatCodebaseContext } = await import('../../ai/codebase/index.js');
145
+ const keywords = extractKeywords(raw);
146
+ const ctx = await buildCodebaseContext(projectDir, keywords);
147
+ codebaseContext = formatCodebaseContext(ctx);
148
+ }
149
+ catch {
150
+ // Codebase scanning is best-effort
151
+ }
152
+ const provider = await getAIProvider(config);
153
+ const messages = buildEstimatePrompt(raw, type, codebaseContext);
154
+ const spinner = createSpinner(`Estimating ${artifactId}...`);
155
+ const { result } = await generateStreamingJSON(provider, messages, aiEstimateResponseSchema, {
156
+ maxTokens: TOKEN_BUDGETS.estimate,
157
+ });
158
+ spinner.stop();
159
+ displayEstimate(artifactId, result);
160
+ // Interactive action prompt (skip in non-interactive / epic rollup mode)
161
+ if (!opts.save && !opts.silent) {
162
+ const action = await promptSelect('Action:', [
163
+ { name: 'Save estimate to artifact', value: 'save' },
164
+ { name: 'Re-estimate', value: 'retry' },
165
+ { name: 'Discard', value: 'discard' },
166
+ ]);
167
+ if (action === 'retry') {
168
+ return estimateSingle(projectDir, config, artifactId, opts);
169
+ }
170
+ if (action === 'discard') {
171
+ logger.info('Estimate discarded.');
172
+ return result;
173
+ }
174
+ // action === 'save' → fall through
175
+ opts.save = true;
176
+ }
177
+ if (opts.save) {
178
+ saveEstimateToArtifact(raw, result, projectDir, config, type, artifactId);
179
+ }
180
+ return result;
181
+ }
182
+ // ---------------------------------------------------------------------------
183
+ // Epic rollup
184
+ // ---------------------------------------------------------------------------
185
+ async function estimateEpicRollup(projectDir, config, epicId, opts) {
186
+ // Verify epic exists
187
+ const epicRaw = await readArtifactRaw(projectDir, config, 'epic', epicId);
188
+ if (!epicRaw) {
189
+ logger.error(`Epic not found: ${epicId}`);
190
+ process.exit(1);
191
+ }
192
+ logger.heading(`Estimating all artifacts under ${epicId}`);
193
+ // Build hierarchy: epic → features → stories → tasks
194
+ const features = await listArtifacts(projectDir, config, 'feature');
195
+ const stories = await listArtifacts(projectDir, config, 'story');
196
+ const tasks = await listArtifacts(projectDir, config, 'task');
197
+ // Find features under this epic
198
+ const epicFeatureIds = new Set();
199
+ for (const f of features) {
200
+ const data = await readArtifact(projectDir, config, 'feature', f.id);
201
+ if (data?.data.epicId === epicId)
202
+ epicFeatureIds.add(f.id);
203
+ }
204
+ // Find stories under those features
205
+ const epicStoryIds = new Set();
206
+ for (const s of stories) {
207
+ const data = await readArtifact(projectDir, config, 'story', s.id);
208
+ if (data?.data.featureId && epicFeatureIds.has(data.data.featureId)) {
209
+ epicStoryIds.add(s.id);
210
+ }
211
+ }
212
+ // Find tasks under those stories (or directly under features)
213
+ const leafTasks = [];
214
+ for (const t of tasks) {
215
+ const data = await readArtifact(projectDir, config, 'task', t.id);
216
+ const parentStory = data?.data.storyId;
217
+ const parentFeature = data?.data.featureId;
218
+ if ((parentStory && epicStoryIds.has(parentStory)) ||
219
+ (parentFeature && epicFeatureIds.has(parentFeature))) {
220
+ leafTasks.push({ id: t.id, type: 'task' });
221
+ }
222
+ }
223
+ if (leafTasks.length === 0) {
224
+ // Fall back to estimating features/stories if no tasks exist
225
+ if (epicFeatureIds.size > 0) {
226
+ for (const fId of epicFeatureIds)
227
+ leafTasks.push({ id: fId, type: 'feature' });
228
+ }
229
+ else {
230
+ logger.warn(`No artifacts found under ${epicId}`);
231
+ return;
232
+ }
233
+ }
234
+ logger.dim(`Found ${leafTasks.length} artifact${leafTasks.length !== 1 ? 's' : ''} to estimate`);
235
+ console.log('');
236
+ const results = [];
237
+ for (let i = 0; i < leafTasks.length; i++) {
238
+ const { id } = leafTasks[i];
239
+ logger.dim(` [${i + 1}/${leafTasks.length}] Estimating ${id}...`);
240
+ const estimate = await estimateSingle(projectDir, config, id, {
241
+ save: opts.save,
242
+ silent: true,
243
+ });
244
+ if (estimate) {
245
+ results.push({ id, estimate });
246
+ }
247
+ }
248
+ if (results.length > 1) {
249
+ displayRollupTable(results);
250
+ }
251
+ // Interactive save prompt if not already saving
252
+ if (!opts.save && results.length > 0) {
253
+ const action = await promptSelect('Action:', [
254
+ { name: 'Save all estimates to artifacts', value: 'save' },
255
+ { name: 'Discard all', value: 'discard' },
256
+ ]);
257
+ if (action === 'save') {
258
+ for (const { id, estimate } of results) {
259
+ const type = findArtifactTypeById(id);
260
+ if (!type)
261
+ continue;
262
+ const raw = await readArtifactRaw(projectDir, config, type, id);
263
+ if (!raw)
264
+ continue;
265
+ await saveEstimateToArtifact(raw, estimate, projectDir, config, type, id);
266
+ }
267
+ }
268
+ else {
269
+ logger.info('Estimates discarded.');
270
+ }
271
+ }
272
+ }
273
+ // ---------------------------------------------------------------------------
274
+ // Calibration
275
+ // ---------------------------------------------------------------------------
276
+ async function calibrate(projectDir, config) {
277
+ logger.heading('Estimate Calibration Report');
278
+ console.log('');
279
+ const types = ['task', 'quick'];
280
+ const calibrationData = [];
281
+ for (const type of types) {
282
+ const artifacts = await listArtifacts(projectDir, config, type);
283
+ for (const artifact of artifacts) {
284
+ const raw = await readArtifactRaw(projectDir, config, type, artifact.id);
285
+ if (!raw)
286
+ continue;
287
+ const { data } = parseMarkdown(raw);
288
+ if (data.estimatedPoints) {
289
+ calibrationData.push({
290
+ id: artifact.id,
291
+ type,
292
+ status: data.status || 'unknown',
293
+ points: data.estimatedPoints,
294
+ hours: data.estimatedHours || 0,
295
+ complexity: data.complexity || 'unknown',
296
+ });
297
+ }
298
+ }
299
+ }
300
+ if (calibrationData.length === 0) {
301
+ logger.warn('No artifacts with estimates found. Run `planr estimate <id> --save` first.');
302
+ return;
303
+ }
304
+ // Display table
305
+ console.log(` ${chalk.dim('ID'.padEnd(12))} ${chalk.dim('Status'.padEnd(14))} ${chalk.dim('Points'.padEnd(8))} ${chalk.dim('Hours'.padEnd(8))} ${chalk.dim('Complexity')}`);
306
+ console.log(` ${'─'.repeat(60)}`);
307
+ for (const item of calibrationData) {
308
+ const statusColor = item.status === 'done'
309
+ ? chalk.green
310
+ : item.status === 'in-progress'
311
+ ? chalk.yellow
312
+ : chalk.dim;
313
+ console.log(` ${item.id.padEnd(12)} ${statusColor(item.status.padEnd(14))} ${String(item.points).padEnd(8)} ${(`${item.hours}h`).padEnd(8)} ${complexityColor(item.complexity)}`);
314
+ }
315
+ // Summary
316
+ const doneItems = calibrationData.filter((d) => d.status === 'done');
317
+ const totalPoints = calibrationData.reduce((s, d) => s + d.points, 0);
318
+ const totalHours = calibrationData.reduce((s, d) => s + d.hours, 0);
319
+ console.log(` ${'─'.repeat(60)}`);
320
+ console.log('');
321
+ console.log(` ${chalk.bold('Summary')}`);
322
+ console.log(` Total estimated: ${totalPoints} points, ${totalHours}h`);
323
+ console.log(` Artifacts: ${calibrationData.length} estimated, ${doneItems.length} completed`);
324
+ if (doneItems.length > 0) {
325
+ const donePoints = doneItems.reduce((s, d) => s + d.points, 0);
326
+ const avgPoints = (donePoints / doneItems.length).toFixed(1);
327
+ console.log(` Avg points/done: ${avgPoints}`);
328
+ }
329
+ console.log('');
330
+ }
331
+ // ---------------------------------------------------------------------------
332
+ // Command registration
333
+ // ---------------------------------------------------------------------------
334
+ export function registerEstimateCommand(program) {
335
+ program
336
+ .command('estimate')
337
+ .description('AI-powered effort estimation for any artifact')
338
+ .argument('[artifactId]', 'artifact ID (e.g., TASK-001, US-002, QT-001)')
339
+ .option('--epic <epicId>', 'estimate all artifacts under an epic with rollup')
340
+ .option('--save', 'persist estimates to artifact frontmatter')
341
+ .option('--calibrate', 'compare past estimates — show accuracy report')
342
+ .action(async (artifactId, opts) => {
343
+ const projectDir = program.opts().projectDir;
344
+ const config = await loadConfig(projectDir);
345
+ if (opts.calibrate) {
346
+ await calibrate(projectDir, config);
347
+ return;
348
+ }
349
+ if (opts.epic) {
350
+ await estimateEpicRollup(projectDir, config, opts.epic, { save: opts.save });
351
+ return;
352
+ }
353
+ if (!artifactId) {
354
+ logger.error('Please provide an artifact ID or use --epic / --calibrate');
355
+ logger.dim('Usage: planr estimate TASK-001 [--save]');
356
+ logger.dim(' planr estimate --epic EPIC-001 [--save]');
357
+ logger.dim(' planr estimate --calibrate');
358
+ process.exit(1);
359
+ }
360
+ const result = await estimateSingle(projectDir, config, artifactId, {
361
+ save: opts.save,
362
+ });
363
+ if (!result)
364
+ process.exit(1);
365
+ });
366
+ }
367
+ //# sourceMappingURL=estimate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../../src/cli/commands/estimate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,GACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,eAAe,CAAC,UAAkB;IACzC,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe,CAAC,EAAU,EAAE,QAA4B;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,oBAAoB,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,SAA8D;IACxF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAC9H,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEnC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,aAAa,GAA8B,KAAK,CAAC;IACrD,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAEvD,KAAK,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,SAAS,EAAE,CAAC;QACzC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC;QACpC,UAAU,IAAI,QAAQ,CAAC,cAAc,CAAC;QACtC,IAAI,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1E,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC;QACtC,CAAC;QACD,OAAO,CAAC,GAAG,CACT,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CACpJ,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,aAAa,CAAC,EAAE,CAC/J,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,SAAS,oBAAoB,CAAC,QAA4B;IACxD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,qBAAqB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,KAAK,UAAU,sBAAsB,CACnC,GAAW,EACX,MAA0B,EAC1B,UAAkB,EAClB,MAAuB,EACvB,IAAkB,EAClB,UAAkB;IAElB,IAAI,OAAO,GAAG,GAAG,CAAC;IAElB,mFAAmF;IACnF,gFAAgF;IAChF,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IACvD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAEnD,MAAM,cAAc,GAAG;QACrB,oBAAoB,MAAM,CAAC,WAAW,EAAE;QACxC,mBAAmB,MAAM,CAAC,cAAc,EAAE;QAC1C,gBAAgB,MAAM,CAAC,UAAU,GAAG;KACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,mEAAmE;IACnE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;IAC7F,CAAC;IAED,wDAAwD;IACxD,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,uCAAuC,CAAC;IAE7D,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,eAAe,EAAE,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,eAAe,IAAI,CAAC;IAC3D,CAAC;IAED,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACpE,MAAM,CAAC,OAAO,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,KAAK,UAAU,cAAc,CAC3B,UAAkB,EAClB,MAAuB,EACvB,UAAkB,EAClB,IAA0C;IAE1C,MAAM,IAAI,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,CAAC,KAAK,CAAC,2CAA2C,UAAU,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IACxE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,CAAC,KAAK,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uCAAuC;IACvC,IAAI,eAAmC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,oBAAoB,EAAE,eAAe,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CACnF,4BAA4B,CAC7B,CAAC;QACF,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC7D,eAAe,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IAEjE,MAAM,OAAO,GAAG,aAAa,CAAC,cAAc,UAAU,KAAK,CAAC,CAAC;IAE7D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,wBAAwB,EAAE;QAC3F,SAAS,EAAE,aAAa,CAAC,QAAQ;KAClC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEpC,yEAAyE;IACzE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAS,SAAS,EAAE;YACnD,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,MAAM,EAAE;YACpD,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE;YACvC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;SACtC,CAAC,CAAC;QAEH,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,mCAAmC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,KAAK,UAAU,kBAAkB,CAC/B,UAAkB,EAClB,MAAuB,EACvB,MAAc,EACd,IAAwB;IAExB,qBAAqB;IACrB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAC;IAE3D,qDAAqD;IACrD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9D,gCAAgC;IAChC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACrE,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,oCAAoC;IACpC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAmB,CAAC,EAAE,CAAC;YAC9E,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,MAAM,SAAS,GAA8C,EAAE,CAAC;IAChE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,IAAI,EAAE,IAAI,CAAC,OAA6B,CAAC;QAC7D,MAAM,aAAa,GAAG,IAAI,EAAE,IAAI,CAAC,SAA+B,CAAC;QACjE,IACE,CAAC,WAAW,IAAI,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC9C,CAAC,aAAa,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EACpD,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,6DAA6D;QAC7D,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,KAAK,MAAM,GAAG,IAAI,cAAc;gBAAE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,SAAS,SAAS,CAAC,MAAM,YAAY,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,OAAO,GAAwD,EAAE,CAAC;IAExE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5D,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QACH,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAS,SAAS,EAAE;YACnD,EAAE,IAAI,EAAE,iCAAiC,EAAE,KAAK,EAAE,MAAM,EAAE;YAC1D,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE;SAC1C,CAAC,CAAC;QAEH,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,KAAK,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;gBACtC,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;gBAChE,IAAI,CAAC,GAAG;oBAAE,SAAS;gBACnB,MAAM,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,KAAK,UAAU,SAAS,CAAC,UAAkB,EAAE,MAAuB;IAClE,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,KAAK,GAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,eAAe,GAOhB,EAAE,CAAC;IAER,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAChE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,eAAe,CAAC,IAAI,CAAC;oBACnB,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,IAAI;oBACJ,MAAM,EAAG,IAAI,CAAC,MAAiB,IAAI,SAAS;oBAC5C,MAAM,EAAE,IAAI,CAAC,eAAyB;oBACtC,KAAK,EAAG,IAAI,CAAC,cAAyB,IAAI,CAAC;oBAC3C,UAAU,EAAG,IAAI,CAAC,UAAqB,IAAI,SAAS;iBACrD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAC1F,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAChK,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEnC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,WAAW,GACf,IAAI,CAAC,MAAM,KAAK,MAAM;YACpB,CAAC,CAAC,KAAK,CAAC,KAAK;YACb,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa;gBAC7B,CAAC,CAAC,KAAK,CAAC,MAAM;gBACd,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAClB,OAAO,CAAC,GAAG,CACT,KAAK,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CACtK,CAAC;IACJ,CAAC;IAED,UAAU;IACV,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,wBAAwB,WAAW,YAAY,UAAU,GAAG,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CACT,wBAAwB,eAAe,CAAC,MAAM,eAAe,SAAS,CAAC,MAAM,YAAY,CAC1F,CAAC;IACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,QAAQ,CAAC,cAAc,EAAE,8CAA8C,CAAC;SACxE,MAAM,CAAC,iBAAiB,EAAE,kDAAkD,CAAC;SAC7E,MAAM,CAAC,QAAQ,EAAE,2CAA2C,CAAC;SAC7D,MAAM,CAAC,aAAa,EAAE,+CAA+C,CAAC;SACtE,MAAM,CACL,KAAK,EACH,UAA8B,EAC9B,IAA4D,EAC5D,EAAE;QACF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,UAAoB,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC1E,MAAM,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACtD,MAAM,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC7D,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE;YAClE,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CACF,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAoGnD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA6GnD"}
@@ -9,8 +9,9 @@ import { createChecklist } from '../../services/checklist-service.js';
9
9
  import { createDefaultConfig, saveConfig } from '../../services/config-service.js';
10
10
  import { saveCredential } from '../../services/credentials-service.js';
11
11
  import { promptConfirm, promptSecret, promptSelect, promptText, } from '../../services/prompt-service.js';
12
+ import { renderTemplate } from '../../services/template-service.js';
12
13
  import { ARTIFACT_DIRS, CONFIG_FILENAME } from '../../utils/constants.js';
13
- import { ensureDir, fileExists } from '../../utils/fs.js';
14
+ import { ensureDir, fileExists, writeFile } from '../../utils/fs.js';
14
15
  import { logger } from '../../utils/logger.js';
15
16
  export function registerInitCommand(program) {
16
17
  program
@@ -76,6 +77,13 @@ export function registerInitCommand(program) {
76
77
  // Create checklist
77
78
  await createChecklist(projectDir, config);
78
79
  logger.success(`Created agile development checklist`);
80
+ // Create estimation guide
81
+ const estimationPath = path.join(agileDir, 'ESTIMATION.md');
82
+ if (!(await fileExists(estimationPath))) {
83
+ const estimationContent = await renderTemplate('guides/estimation.md.hbs', {});
84
+ await writeFile(estimationPath, estimationContent);
85
+ logger.success('Created estimation guide');
86
+ }
79
87
  // Summary
80
88
  logger.heading('Planr initialized!');
81
89
  logger.info(`Project: ${projectName}`);
@@ -87,6 +95,7 @@ export function registerInitCommand(program) {
87
95
  logger.dim('');
88
96
  logger.dim('Next steps:');
89
97
  logger.dim(' planr epic create — Create your first epic');
98
+ logger.dim(' planr quick "description" — Quick standalone task list (no agile ceremony)');
90
99
  logger.dim(' planr rules generate — Generate AI agent rules');
91
100
  logger.dim(' planr config show — View configuration');
92
101
  });
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `planr quick` command group.
3
+ *
4
+ * Standalone task lists without the full agile hierarchy.
5
+ * Ideal for prototyping, bug fixes, hackathons, or any work
6
+ * that doesn't need epics/features/stories.
7
+ *
8
+ * Quick tasks can later be promoted into the agile hierarchy
9
+ * via `planr quick promote`.
10
+ */
11
+ import type { Command } from 'commander';
12
+ export declare function registerQuickCommand(program: Command): void;
13
+ //# sourceMappingURL=quick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/quick.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAkJpD"}