@pupt/cli 0.0.1 → 2.3.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.
- package/LICENSE +21 -0
- package/README.md +54 -29
- package/dist/annotations/annotation-analyzer.d.ts +17 -0
- package/dist/annotations/annotation-analyzer.d.ts.map +1 -0
- package/dist/annotations/annotation-analyzer.js +145 -0
- package/dist/annotations/annotation-analyzer.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +435 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +164 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/annotate.d.ts +2 -0
- package/dist/commands/annotate.d.ts.map +1 -0
- package/dist/commands/annotate.js +99 -0
- package/dist/commands/annotate.js.map +1 -0
- package/dist/commands/base-command.d.ts +23 -0
- package/dist/commands/base-command.d.ts.map +1 -0
- package/dist/commands/base-command.js +41 -0
- package/dist/commands/base-command.js.map +1 -0
- package/dist/commands/cache.d.ts +9 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +31 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +93 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/edit.d.ts +2 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +35 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/help.d.ts +2 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +26 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/history.d.ts +12 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +317 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +137 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +16 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +263 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/review.d.ts +3 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +160 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/run.d.ts +32 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +367 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +45 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +113 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config/config-manager.d.ts +19 -0
- package/dist/config/config-manager.d.ts.map +1 -0
- package/dist/config/config-manager.js +221 -0
- package/dist/config/config-manager.js.map +1 -0
- package/dist/config/global-paths.d.ts +5 -0
- package/dist/config/global-paths.d.ts.map +1 -0
- package/dist/config/global-paths.js +16 -0
- package/dist/config/global-paths.js.map +1 -0
- package/dist/config/migration.d.ts +12 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +270 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/history/enhanced-history-manager.d.ts +27 -0
- package/dist/history/enhanced-history-manager.d.ts.map +1 -0
- package/dist/history/enhanced-history-manager.js +116 -0
- package/dist/history/enhanced-history-manager.js.map +1 -0
- package/dist/history/history-manager.d.ts +43 -0
- package/dist/history/history-manager.d.ts.map +1 -0
- package/dist/history/history-manager.js +229 -0
- package/dist/history/history-manager.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/input-types/file-search-prompt.d.ts +11 -0
- package/dist/prompts/input-types/file-search-prompt.d.ts.map +1 -0
- package/dist/prompts/input-types/file-search-prompt.js +53 -0
- package/dist/prompts/input-types/file-search-prompt.js.map +1 -0
- package/dist/prompts/input-types/review-file-prompt.d.ts +3 -0
- package/dist/prompts/input-types/review-file-prompt.d.ts.map +1 -0
- package/dist/prompts/input-types/review-file-prompt.js +9 -0
- package/dist/prompts/input-types/review-file-prompt.js.map +1 -0
- package/dist/schemas/config-schema.d.ts +1637 -0
- package/dist/schemas/config-schema.d.ts.map +1 -0
- package/dist/schemas/config-schema.js +136 -0
- package/dist/schemas/config-schema.js.map +1 -0
- package/dist/search/search-engine.d.ts +8 -0
- package/dist/search/search-engine.d.ts.map +1 -0
- package/dist/search/search-engine.js +53 -0
- package/dist/search/search-engine.js.map +1 -0
- package/dist/services/git-service.d.ts +28 -0
- package/dist/services/git-service.d.ts.map +1 -0
- package/dist/services/git-service.js +157 -0
- package/dist/services/git-service.js.map +1 -0
- package/dist/services/input-collector.d.ts +9 -0
- package/dist/services/input-collector.d.ts.map +1 -0
- package/dist/services/input-collector.js +162 -0
- package/dist/services/input-collector.js.map +1 -0
- package/dist/services/logging-service.d.ts +49 -0
- package/dist/services/logging-service.d.ts.map +1 -0
- package/dist/services/logging-service.js +203 -0
- package/dist/services/logging-service.js.map +1 -0
- package/dist/services/module-cache.d.ts +42 -0
- package/dist/services/module-cache.d.ts.map +1 -0
- package/dist/services/module-cache.js +205 -0
- package/dist/services/module-cache.js.map +1 -0
- package/dist/services/module-entry-builder.d.ts +20 -0
- package/dist/services/module-entry-builder.d.ts.map +1 -0
- package/dist/services/module-entry-builder.js +71 -0
- package/dist/services/module-entry-builder.js.map +1 -0
- package/dist/services/output-capture-service.d.ts +28 -0
- package/dist/services/output-capture-service.d.ts.map +1 -0
- package/dist/services/output-capture-service.js +348 -0
- package/dist/services/output-capture-service.js.map +1 -0
- package/dist/services/package-manager.d.ts +18 -0
- package/dist/services/package-manager.d.ts.map +1 -0
- package/dist/services/package-manager.js +141 -0
- package/dist/services/package-manager.js.map +1 -0
- package/dist/services/pattern-detector.d.ts +15 -0
- package/dist/services/pattern-detector.d.ts.map +1 -0
- package/dist/services/pattern-detector.js +228 -0
- package/dist/services/pattern-detector.js.map +1 -0
- package/dist/services/prompt-resolver.d.ts +32 -0
- package/dist/services/prompt-resolver.d.ts.map +1 -0
- package/dist/services/prompt-resolver.js +73 -0
- package/dist/services/prompt-resolver.js.map +1 -0
- package/dist/services/pupt-prompt-source.d.ts +16 -0
- package/dist/services/pupt-prompt-source.d.ts.map +1 -0
- package/dist/services/pupt-prompt-source.js +74 -0
- package/dist/services/pupt-prompt-source.js.map +1 -0
- package/dist/services/pupt-service.d.ts +33 -0
- package/dist/services/pupt-service.d.ts.map +1 -0
- package/dist/services/pupt-service.js +119 -0
- package/dist/services/pupt-service.js.map +1 -0
- package/dist/services/review-data-builder.d.ts +25 -0
- package/dist/services/review-data-builder.d.ts.map +1 -0
- package/dist/services/review-data-builder.js +333 -0
- package/dist/services/review-data-builder.js.map +1 -0
- package/dist/services/suggestion-generator.d.ts +11 -0
- package/dist/services/suggestion-generator.d.ts.map +1 -0
- package/dist/services/suggestion-generator.js +158 -0
- package/dist/services/suggestion-generator.js.map +1 -0
- package/dist/services/ui-service.d.ts +49 -0
- package/dist/services/ui-service.d.ts.map +1 -0
- package/dist/services/ui-service.js +196 -0
- package/dist/services/ui-service.js.map +1 -0
- package/dist/types/annotations.d.ts +50 -0
- package/dist/types/annotations.d.ts.map +1 -0
- package/dist/types/annotations.js +2 -0
- package/dist/types/annotations.js.map +1 -0
- package/dist/types/config.d.ts +110 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +12 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/history.d.ts +36 -0
- package/dist/types/history.d.ts.map +1 -0
- package/dist/types/history.js +2 -0
- package/dist/types/history.js.map +1 -0
- package/dist/types/patterns.d.ts +25 -0
- package/dist/types/patterns.d.ts.map +1 -0
- package/dist/types/patterns.js +2 -0
- package/dist/types/patterns.js.map +1 -0
- package/dist/types/prompt.d.ts +29 -0
- package/dist/types/prompt.d.ts.map +1 -0
- package/dist/types/prompt.js +24 -0
- package/dist/types/prompt.js.map +1 -0
- package/dist/types/review.d.ts +81 -0
- package/dist/types/review.d.ts.map +1 -0
- package/dist/types/review.js +2 -0
- package/dist/types/review.js.map +1 -0
- package/dist/ui/console-ui.d.ts +30 -0
- package/dist/ui/console-ui.d.ts.map +1 -0
- package/dist/ui/console-ui.js +88 -0
- package/dist/ui/console-ui.js.map +1 -0
- package/dist/ui/interactive-search.d.ts +8 -0
- package/dist/ui/interactive-search.d.ts.map +1 -0
- package/dist/ui/interactive-search.js +29 -0
- package/dist/ui/interactive-search.js.map +1 -0
- package/dist/utils/annotation-migration.d.ts +12 -0
- package/dist/utils/annotation-migration.d.ts.map +1 -0
- package/dist/utils/annotation-migration.js +88 -0
- package/dist/utils/annotation-migration.js.map +1 -0
- package/dist/utils/date-formatter.d.ts +10 -0
- package/dist/utils/date-formatter.d.ts.map +1 -0
- package/dist/utils/date-formatter.js +46 -0
- package/dist/utils/date-formatter.js.map +1 -0
- package/dist/utils/editor.d.ts +14 -0
- package/dist/utils/editor.d.ts.map +1 -0
- package/dist/utils/editor.js +52 -0
- package/dist/utils/editor.js.map +1 -0
- package/dist/utils/errors.d.ts +58 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +275 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/git-info.d.ts +10 -0
- package/dist/utils/git-info.d.ts.map +1 -0
- package/dist/utils/git-info.js +44 -0
- package/dist/utils/git-info.js.map +1 -0
- package/dist/utils/gitignore.d.ts +10 -0
- package/dist/utils/gitignore.d.ts.map +1 -0
- package/dist/utils/gitignore.js +72 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/logger.d.ts +39 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +143 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/platform.d.ts +9 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +45 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/project-root.d.ts +22 -0
- package/dist/utils/project-root.d.ts.map +1 -0
- package/dist/utils/project-root.js +226 -0
- package/dist/utils/project-root.js.map +1 -0
- package/dist/utils/prompt-dir-resolver.d.ts +5 -0
- package/dist/utils/prompt-dir-resolver.d.ts.map +1 -0
- package/dist/utils/prompt-dir-resolver.js +25 -0
- package/dist/utils/prompt-dir-resolver.js.map +1 -0
- package/dist/utils/security.d.ts +5 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +57 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/utils/tool-detection.d.ts +14 -0
- package/dist/utils/tool-detection.d.ts.map +1 -0
- package/dist/utils/tool-detection.js +43 -0
- package/dist/utils/tool-detection.js.map +1 -0
- package/package.json +79 -7
- package/prompts/prompts/ad-hoc-long.prompt +60 -0
- package/prompts/prompts/ad-hoc.prompt +29 -0
- package/prompts/prompts/code-review.prompt +99 -0
- package/prompts/prompts/debugging-error-message.prompt +81 -0
- package/prompts/prompts/fix-github-actions.prompt +62 -0
- package/prompts/prompts/fix-test-errors.prompt +73 -0
- package/prompts/prompts/git-commit-comment.prompt +61 -0
- package/prompts/prompts/implementation-phase.prompt +53 -0
- package/prompts/prompts/implementation-plan.prompt +101 -0
- package/prompts/prompts/new-feature.prompt +89 -0
- package/prompts/prompts/new-project.prompt +9 -0
- package/prompts/prompts/one-shot-change.prompt +79 -0
- package/prompts/prompts/pupt-prompt-improvement.prompt +270 -0
- package/prompts/prompts/simple-test.prompt +8 -0
- package/prompts/prompts/update-design.prompt +71 -0
- package/prompts/prompts/update-documentation.prompt +6 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import yaml from "js-yaml";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { AnnotationAnalyzer } from "../annotations/annotation-analyzer.js";
|
|
5
|
+
import { getDataDir } from "../config/global-paths.js";
|
|
6
|
+
import { HistoryManager } from "../history/history-manager.js";
|
|
7
|
+
import { PuptService } from "./pupt-service.js";
|
|
8
|
+
export class ReviewDataBuilder {
|
|
9
|
+
config;
|
|
10
|
+
historyManager;
|
|
11
|
+
puptService;
|
|
12
|
+
annotationAnalyzer;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.config = config;
|
|
15
|
+
this.historyManager = new HistoryManager(config.historyDir || path.join(getDataDir(), "history"), config.annotationDir);
|
|
16
|
+
const modules = config.modules || [];
|
|
17
|
+
this.puptService = new PuptService({ modules, environment: config.environment });
|
|
18
|
+
this.annotationAnalyzer = new AnnotationAnalyzer();
|
|
19
|
+
}
|
|
20
|
+
async buildReviewData(options) {
|
|
21
|
+
// Get all history entries
|
|
22
|
+
let historyEntries = await this.historyManager.listHistory();
|
|
23
|
+
// Filter by time if specified
|
|
24
|
+
if (options.since) {
|
|
25
|
+
historyEntries = this.filterBySince(historyEntries, options.since);
|
|
26
|
+
}
|
|
27
|
+
// Filter by prompt name if specified
|
|
28
|
+
if (options.promptName) {
|
|
29
|
+
historyEntries = historyEntries.filter((entry) => this.extractPromptName(entry) === options.promptName);
|
|
30
|
+
}
|
|
31
|
+
// Group entries by prompt
|
|
32
|
+
const entriesByPrompt = this.groupByPrompt(historyEntries);
|
|
33
|
+
// Get all annotations
|
|
34
|
+
const annotations = await this.getAnnotations();
|
|
35
|
+
// Build prompt review data for each unique prompt
|
|
36
|
+
const prompts = [];
|
|
37
|
+
for (const [promptName, entries] of entriesByPrompt) {
|
|
38
|
+
const promptData = await this.buildPromptReviewData(promptName, entries, annotations);
|
|
39
|
+
prompts.push(promptData);
|
|
40
|
+
}
|
|
41
|
+
// Calculate metadata
|
|
42
|
+
const metadata = this.calculateMetadata(options.since || "30d", prompts, historyEntries);
|
|
43
|
+
return {
|
|
44
|
+
metadata,
|
|
45
|
+
prompts,
|
|
46
|
+
cross_prompt_patterns: [], // Will be implemented in Phase 5
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
filterBySince(entries, since) {
|
|
50
|
+
const cutoffDate = this.parseSinceDate(since);
|
|
51
|
+
return entries.filter((entry) => {
|
|
52
|
+
const entryDate = new Date(entry.timestamp);
|
|
53
|
+
return entryDate >= cutoffDate;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
parseSinceDate(since) {
|
|
57
|
+
const now = new Date();
|
|
58
|
+
const match = since.match(/^(\d+)([dDhHmMwW])$/);
|
|
59
|
+
if (!match) {
|
|
60
|
+
// Try to parse as ISO date
|
|
61
|
+
const date = new Date(since);
|
|
62
|
+
if (!isNaN(date.getTime())) {
|
|
63
|
+
return date;
|
|
64
|
+
}
|
|
65
|
+
throw new Error(`Invalid since format: ${since}`);
|
|
66
|
+
}
|
|
67
|
+
const [, amountStr, unit] = match;
|
|
68
|
+
const amount = parseInt(amountStr, 10);
|
|
69
|
+
switch (unit.toLowerCase()) {
|
|
70
|
+
case "d":
|
|
71
|
+
now.setDate(now.getDate() - amount);
|
|
72
|
+
break;
|
|
73
|
+
case "h":
|
|
74
|
+
now.setHours(now.getHours() - amount);
|
|
75
|
+
break;
|
|
76
|
+
case "m":
|
|
77
|
+
now.setMinutes(now.getMinutes() - amount);
|
|
78
|
+
break;
|
|
79
|
+
case "w":
|
|
80
|
+
now.setDate(now.getDate() - amount * 7);
|
|
81
|
+
break;
|
|
82
|
+
default:
|
|
83
|
+
throw new Error(`Invalid time unit: ${unit}`);
|
|
84
|
+
}
|
|
85
|
+
return now;
|
|
86
|
+
}
|
|
87
|
+
groupByPrompt(entries) {
|
|
88
|
+
const grouped = new Map();
|
|
89
|
+
for (const entry of entries) {
|
|
90
|
+
const promptName = this.extractPromptName(entry);
|
|
91
|
+
let group = grouped.get(promptName);
|
|
92
|
+
if (!group) {
|
|
93
|
+
group = [];
|
|
94
|
+
grouped.set(promptName, group);
|
|
95
|
+
}
|
|
96
|
+
group.push(entry);
|
|
97
|
+
}
|
|
98
|
+
return grouped;
|
|
99
|
+
}
|
|
100
|
+
async buildPromptReviewData(promptName, entries, allAnnotations) {
|
|
101
|
+
// Get prompt content and metadata
|
|
102
|
+
let promptContent = "";
|
|
103
|
+
let promptPath = "";
|
|
104
|
+
// let promptMetadata = {};
|
|
105
|
+
try {
|
|
106
|
+
await this.puptService.init();
|
|
107
|
+
const prompts = this.puptService.getPromptsAsAdapted();
|
|
108
|
+
const prompt = prompts.find((p) => {
|
|
109
|
+
const ext = path.extname(p.path);
|
|
110
|
+
return path.basename(p.path, ext) === promptName;
|
|
111
|
+
});
|
|
112
|
+
if (prompt) {
|
|
113
|
+
promptContent = prompt.content;
|
|
114
|
+
promptPath = prompt.path;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// Prompt file might have been deleted
|
|
118
|
+
promptPath = entries[0]?.templatePath || `prompts/${promptName}.prompt`;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Prompt file might have been deleted
|
|
123
|
+
promptPath = entries[0]?.templatePath || `prompts/${promptName}.prompt`;
|
|
124
|
+
}
|
|
125
|
+
// Get last modified time
|
|
126
|
+
let lastModified = "";
|
|
127
|
+
try {
|
|
128
|
+
const stats = await fs.stat(promptPath);
|
|
129
|
+
lastModified = stats.mtime.toISOString();
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Use most recent execution time as fallback
|
|
133
|
+
lastModified = entries[entries.length - 1]?.timestamp || new Date().toISOString();
|
|
134
|
+
}
|
|
135
|
+
// Filter annotations for this prompt
|
|
136
|
+
const promptAnnotations = allAnnotations.filter((annotation) => {
|
|
137
|
+
return entries.some((entry) => {
|
|
138
|
+
const historyFileName = this.getHistoryFileName(entry);
|
|
139
|
+
return annotation.historyFile === historyFileName;
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
// Calculate usage statistics
|
|
143
|
+
const usageStatistics = this.calculateUsageStatistics(entries, promptAnnotations);
|
|
144
|
+
// Calculate execution outcomes
|
|
145
|
+
const executionOutcomes = this.calculateExecutionOutcomes(promptAnnotations);
|
|
146
|
+
return {
|
|
147
|
+
name: promptName,
|
|
148
|
+
path: promptPath,
|
|
149
|
+
content: promptContent,
|
|
150
|
+
last_modified: lastModified,
|
|
151
|
+
usage_statistics: usageStatistics,
|
|
152
|
+
execution_outcomes: executionOutcomes,
|
|
153
|
+
environment_correlations: {}, // Will be enhanced in future phases
|
|
154
|
+
captured_outputs: [], // Will be populated in Phase 2
|
|
155
|
+
user_annotations: promptAnnotations,
|
|
156
|
+
detected_patterns: [], // Will be populated in Phase 5
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
getHistoryFileName(entry) {
|
|
160
|
+
// Use the actual filename from the entry
|
|
161
|
+
return entry.filename;
|
|
162
|
+
}
|
|
163
|
+
extractPromptName(entry) {
|
|
164
|
+
// Extract prompt name from template path
|
|
165
|
+
if (entry.templatePath) {
|
|
166
|
+
const ext = path.extname(entry.templatePath);
|
|
167
|
+
return path.basename(entry.templatePath, ext);
|
|
168
|
+
}
|
|
169
|
+
// Fallback to extracting from filename if template path not available
|
|
170
|
+
const match = entry.filename.match(/history_.*?_(.+)\.json$/);
|
|
171
|
+
return match ? match[1] : "unknown";
|
|
172
|
+
}
|
|
173
|
+
async getAnnotations() {
|
|
174
|
+
if (!this.config.annotationDir) {
|
|
175
|
+
return [];
|
|
176
|
+
}
|
|
177
|
+
try {
|
|
178
|
+
const files = await fs.readdir(this.config.annotationDir);
|
|
179
|
+
const annotationFiles = files.filter((f) => (f.endsWith(".md") && f.includes("annotation")) ||
|
|
180
|
+
(f.endsWith(".json") && f.includes("annotation")));
|
|
181
|
+
const rawAnnotations = [];
|
|
182
|
+
for (const file of annotationFiles) {
|
|
183
|
+
const filePath = path.join(this.config.annotationDir, file);
|
|
184
|
+
if (file.endsWith(".json")) {
|
|
185
|
+
// Handle JSON format
|
|
186
|
+
const data = (await fs.readJson(filePath));
|
|
187
|
+
rawAnnotations.push({
|
|
188
|
+
...data,
|
|
189
|
+
notes: data.notes || "",
|
|
190
|
+
annotationPath: filePath,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
// Handle legacy markdown format
|
|
195
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
196
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
197
|
+
if (frontmatterMatch) {
|
|
198
|
+
const metadata = yaml.load(frontmatterMatch[1]);
|
|
199
|
+
const notes = content
|
|
200
|
+
.slice(frontmatterMatch[0].length)
|
|
201
|
+
.trim()
|
|
202
|
+
.replace(/^## Notes\n\n/, ""); // Remove the "## Notes" header if present
|
|
203
|
+
rawAnnotations.push({
|
|
204
|
+
...metadata,
|
|
205
|
+
notes,
|
|
206
|
+
annotationPath: filePath,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return this.annotationAnalyzer.parseAnnotations(rawAnnotations);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
// Directory might not exist
|
|
215
|
+
return [];
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
calculateUsageStatistics(entries, annotations) {
|
|
219
|
+
const totalRuns = entries.length;
|
|
220
|
+
const annotatedRuns = annotations.length;
|
|
221
|
+
// Calculate success rate from annotations
|
|
222
|
+
const successCount = annotations.filter((a) => a.status === "success").length;
|
|
223
|
+
const successRate = annotatedRuns > 0 ? successCount / annotatedRuns : 0;
|
|
224
|
+
// Get last used time
|
|
225
|
+
const lastUsed = entries[entries.length - 1]?.timestamp || new Date().toISOString();
|
|
226
|
+
// Calculate average duration from enhanced history entries
|
|
227
|
+
let avgDuration = "N/A";
|
|
228
|
+
let avgActiveTime = "N/A";
|
|
229
|
+
let avgUserInputs = "N/A";
|
|
230
|
+
const enhancedEntries = entries;
|
|
231
|
+
const durationsMs = [];
|
|
232
|
+
const activeTimesMs = [];
|
|
233
|
+
const userInputCounts = [];
|
|
234
|
+
for (const entry of enhancedEntries) {
|
|
235
|
+
if (entry.execution) {
|
|
236
|
+
// Parse duration (format: "123ms" or "1h 2m 3s")
|
|
237
|
+
if (entry.execution.duration) {
|
|
238
|
+
const match = entry.execution.duration.match(/^(\d+)ms$/);
|
|
239
|
+
if (match) {
|
|
240
|
+
durationsMs.push(parseInt(match[1], 10));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// Parse active time if available
|
|
244
|
+
if (entry.execution.active_time) {
|
|
245
|
+
const match = entry.execution.active_time.match(/^(\d+)ms$/);
|
|
246
|
+
if (match) {
|
|
247
|
+
activeTimesMs.push(parseInt(match[1], 10));
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Track user input counts
|
|
251
|
+
if (entry.execution.user_input_count !== undefined) {
|
|
252
|
+
userInputCounts.push(entry.execution.user_input_count);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Calculate averages
|
|
257
|
+
if (durationsMs.length > 0) {
|
|
258
|
+
const avg = durationsMs.reduce((a, b) => a + b, 0) / durationsMs.length;
|
|
259
|
+
avgDuration = `${Math.round(avg)}ms`;
|
|
260
|
+
}
|
|
261
|
+
if (activeTimesMs.length > 0) {
|
|
262
|
+
const avg = activeTimesMs.reduce((a, b) => a + b, 0) / activeTimesMs.length;
|
|
263
|
+
avgActiveTime = `${Math.round(avg)}ms`;
|
|
264
|
+
}
|
|
265
|
+
if (userInputCounts.length > 0) {
|
|
266
|
+
const avg = userInputCounts.reduce((a, b) => a + b, 0) / userInputCounts.length;
|
|
267
|
+
avgUserInputs = avg.toFixed(1);
|
|
268
|
+
}
|
|
269
|
+
return {
|
|
270
|
+
total_runs: totalRuns,
|
|
271
|
+
annotated_runs: annotatedRuns,
|
|
272
|
+
success_rate: successRate,
|
|
273
|
+
avg_duration: avgDuration,
|
|
274
|
+
last_used: lastUsed,
|
|
275
|
+
avg_active_time: avgActiveTime,
|
|
276
|
+
avg_user_inputs: avgUserInputs,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
calculateExecutionOutcomes(annotations) {
|
|
280
|
+
let success = 0;
|
|
281
|
+
let partial = 0;
|
|
282
|
+
let failure = 0;
|
|
283
|
+
for (const annotation of annotations) {
|
|
284
|
+
switch (annotation.status) {
|
|
285
|
+
case "success":
|
|
286
|
+
success++;
|
|
287
|
+
break;
|
|
288
|
+
case "partial":
|
|
289
|
+
partial++;
|
|
290
|
+
break;
|
|
291
|
+
case "failure":
|
|
292
|
+
failure++;
|
|
293
|
+
break;
|
|
294
|
+
default:
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return { success, partial, failure };
|
|
299
|
+
}
|
|
300
|
+
calculateMetadata(analysisPeriod, prompts, allEntries) {
|
|
301
|
+
const totalPrompts = prompts.length;
|
|
302
|
+
const totalExecutions = allEntries.length;
|
|
303
|
+
// Calculate data completeness
|
|
304
|
+
const dataCompleteness = this.calculateDataCompleteness(prompts, allEntries);
|
|
305
|
+
return {
|
|
306
|
+
analysis_period: analysisPeriod,
|
|
307
|
+
total_prompts: totalPrompts,
|
|
308
|
+
total_executions: totalExecutions,
|
|
309
|
+
data_completeness: dataCompleteness,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
calculateDataCompleteness(prompts, entries) {
|
|
313
|
+
if (entries.length === 0) {
|
|
314
|
+
return {
|
|
315
|
+
with_annotations: 0,
|
|
316
|
+
with_output_capture: 0,
|
|
317
|
+
with_environment_data: 0,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
// Count entries with annotations
|
|
321
|
+
const totalAnnotations = prompts.reduce((sum, prompt) => sum + prompt.user_annotations.length, 0);
|
|
322
|
+
const withAnnotations = Math.round((totalAnnotations / entries.length) * 100);
|
|
323
|
+
// Output capture and environment data will be tracked in future phases
|
|
324
|
+
const withOutputCapture = 0;
|
|
325
|
+
const withEnvironmentData = 0;
|
|
326
|
+
return {
|
|
327
|
+
with_annotations: withAnnotations,
|
|
328
|
+
with_output_capture: withOutputCapture,
|
|
329
|
+
with_environment_data: withEnvironmentData,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=review-data-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-data-builder.js","sourceRoot":"","sources":["../../src/services/review-data-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Pattern, Suggestion } from '../types/patterns.js';
|
|
2
|
+
export declare class SuggestionGenerator {
|
|
3
|
+
generateSuggestions(patterns: Pattern[]): Suggestion[];
|
|
4
|
+
private generateSuggestion;
|
|
5
|
+
private sortPatternsByImpact;
|
|
6
|
+
private calculateImpactScore;
|
|
7
|
+
private calculateExpectedImprovement;
|
|
8
|
+
private generatePromptSpecificFixes;
|
|
9
|
+
private truncateEvidence;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=suggestion-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestion-generator.d.ts","sourceRoot":"","sources":["../../src/services/suggestion-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAW,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEzE,qBAAa,mBAAmB;IAC9B,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE;IAOtD,OAAO,CAAC,kBAAkB;IA6F1B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,4BAA4B;IAkBpC,OAAO,CAAC,2BAA2B;IA4BnC,OAAO,CAAC,gBAAgB;CAMzB"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
export class SuggestionGenerator {
|
|
2
|
+
generateSuggestions(patterns) {
|
|
3
|
+
// Sort patterns by impact score (frequency * severity weight * correlation)
|
|
4
|
+
const sortedPatterns = this.sortPatternsByImpact(patterns);
|
|
5
|
+
return sortedPatterns.map(pattern => this.generateSuggestion(pattern));
|
|
6
|
+
}
|
|
7
|
+
generateSuggestion(pattern) {
|
|
8
|
+
const baseProps = {
|
|
9
|
+
pattern_type: pattern.type,
|
|
10
|
+
priority: pattern.severity,
|
|
11
|
+
evidence_cited: pattern.evidence.map(e => this.truncateEvidence(e)),
|
|
12
|
+
affected_prompts: pattern.affectedPrompts,
|
|
13
|
+
impact_score: this.calculateImpactScore(pattern),
|
|
14
|
+
expected_improvement: this.calculateExpectedImprovement(pattern),
|
|
15
|
+
};
|
|
16
|
+
switch (pattern.type) {
|
|
17
|
+
case 'verification_gap':
|
|
18
|
+
return {
|
|
19
|
+
...baseProps,
|
|
20
|
+
improvement: 'Add explicit verification steps to ensure all tests pass before marking tasks complete',
|
|
21
|
+
specific_changes: [
|
|
22
|
+
'Add explicit verification step: "Run \'npm test\' and verify ALL tests pass (0 failing)"',
|
|
23
|
+
'Include requirement: "Do not proceed until all tests are green"',
|
|
24
|
+
'Add checkpoint: "After implementation, verify the solution works by running tests"',
|
|
25
|
+
],
|
|
26
|
+
prompt_specific_fixes: this.generatePromptSpecificFixes(pattern, 'verification'),
|
|
27
|
+
implementation_example: `# Verification Requirements
|
|
28
|
+
After completing the implementation:
|
|
29
|
+
1. Run \`npm test\` and ensure output shows "0 failing"
|
|
30
|
+
2. If any tests fail, debug and fix ALL failures
|
|
31
|
+
3. Run tests again to confirm all pass
|
|
32
|
+
4. Only mark complete when ALL tests are green`,
|
|
33
|
+
};
|
|
34
|
+
case 'incomplete_task':
|
|
35
|
+
return {
|
|
36
|
+
...baseProps,
|
|
37
|
+
improvement: 'Ensure all errors are fixed completely before considering the task done',
|
|
38
|
+
specific_changes: [
|
|
39
|
+
'Replace "fix the error" with "fix ALL errors until none remain"',
|
|
40
|
+
'Add instruction: "Continue debugging until all tests pass and build succeeds"',
|
|
41
|
+
'Continue fixing ALL errors until none remain',
|
|
42
|
+
],
|
|
43
|
+
prompt_specific_fixes: this.generatePromptSpecificFixes(pattern, 'completion'),
|
|
44
|
+
implementation_example: `# Task Completion Requirements
|
|
45
|
+
- Fix ALL errors, not just the first one encountered
|
|
46
|
+
- Continue iterating until:
|
|
47
|
+
- All tests pass (0 failures)
|
|
48
|
+
- Build completes successfully
|
|
49
|
+
- No linting errors remain
|
|
50
|
+
- Do not stop at partial success`,
|
|
51
|
+
};
|
|
52
|
+
case 'environment_specific':
|
|
53
|
+
return {
|
|
54
|
+
...baseProps,
|
|
55
|
+
improvement: 'Add environment awareness and branch-specific handling to the prompt',
|
|
56
|
+
specific_changes: [
|
|
57
|
+
'Add environment check: "Note the current git branch with \'git branch\'"',
|
|
58
|
+
'Include branch context: "Consider branch-specific configurations"',
|
|
59
|
+
'Add fallback: "If issues occur on feature branches, check for branch-specific settings"',
|
|
60
|
+
],
|
|
61
|
+
prompt_specific_fixes: this.generatePromptSpecificFixes(pattern, 'environment'),
|
|
62
|
+
implementation_example: `# Environment Awareness
|
|
63
|
+
1. Check current branch: \`git branch --show-current\`
|
|
64
|
+
2. Note any branch-specific configurations
|
|
65
|
+
3. If on a feature branch, ensure compatibility with main branch
|
|
66
|
+
4. Test changes work on both current branch and main`,
|
|
67
|
+
};
|
|
68
|
+
case 'ambiguous_objective':
|
|
69
|
+
return {
|
|
70
|
+
...baseProps,
|
|
71
|
+
improvement: 'Replace ambiguous instructions with specific, measurable criteria',
|
|
72
|
+
specific_changes: [
|
|
73
|
+
'Define specific error types to fix',
|
|
74
|
+
'Specify exact success criteria (e.g., "all 5 tests pass")',
|
|
75
|
+
'Define clear success criteria',
|
|
76
|
+
'List specific tasks in priority order',
|
|
77
|
+
],
|
|
78
|
+
prompt_specific_fixes: this.generatePromptSpecificFixes(pattern, 'clarity'),
|
|
79
|
+
implementation_example: `# Clear Objectives
|
|
80
|
+
Instead of: "Fix the errors"
|
|
81
|
+
Use: "Fix all TypeScript compilation errors (npm run build should succeed with 0 errors)"
|
|
82
|
+
|
|
83
|
+
Instead of: "Make it work"
|
|
84
|
+
Use: "Ensure all unit tests pass (npm test shows 0 failures) and the feature works as specified"`,
|
|
85
|
+
};
|
|
86
|
+
default:
|
|
87
|
+
return {
|
|
88
|
+
...baseProps,
|
|
89
|
+
improvement: 'Review and improve prompt clarity',
|
|
90
|
+
specific_changes: ['Add specific success criteria', 'Include verification steps'],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
sortPatternsByImpact(patterns) {
|
|
95
|
+
return patterns.sort((a, b) => {
|
|
96
|
+
const scoreA = this.calculateImpactScore(a);
|
|
97
|
+
const scoreB = this.calculateImpactScore(b);
|
|
98
|
+
return scoreB - scoreA;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
calculateImpactScore(pattern) {
|
|
102
|
+
const severityWeights = {
|
|
103
|
+
critical: 4,
|
|
104
|
+
high: 3,
|
|
105
|
+
medium: 2,
|
|
106
|
+
low: 1,
|
|
107
|
+
};
|
|
108
|
+
return pattern.frequency * severityWeights[pattern.severity] * pattern.correlation_strength;
|
|
109
|
+
}
|
|
110
|
+
calculateExpectedImprovement(pattern) {
|
|
111
|
+
// Estimate improvement based on correlation strength and severity
|
|
112
|
+
const baseImprovement = pattern.correlation_strength * 100;
|
|
113
|
+
let severityMultiplier;
|
|
114
|
+
if (pattern.severity === 'critical') {
|
|
115
|
+
severityMultiplier = 0.9;
|
|
116
|
+
}
|
|
117
|
+
else if (pattern.severity === 'high') {
|
|
118
|
+
severityMultiplier = 0.7;
|
|
119
|
+
}
|
|
120
|
+
else if (pattern.severity === 'medium') {
|
|
121
|
+
severityMultiplier = 0.5;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
severityMultiplier = 0.3;
|
|
125
|
+
}
|
|
126
|
+
const improvement = Math.round(baseImprovement * severityMultiplier);
|
|
127
|
+
return `${improvement}% reduction in ${pattern.type.replace(/_/g, ' ')} issues`;
|
|
128
|
+
}
|
|
129
|
+
generatePromptSpecificFixes(pattern, fixType) {
|
|
130
|
+
const fixes = {};
|
|
131
|
+
pattern.affectedPrompts.forEach(promptName => {
|
|
132
|
+
switch (fixType) {
|
|
133
|
+
case 'verification':
|
|
134
|
+
fixes[promptName] = `Add to ${promptName}: "After implementation, run tests and verify 0 failures before proceeding"`;
|
|
135
|
+
break;
|
|
136
|
+
case 'completion':
|
|
137
|
+
fixes[promptName] = `Update ${promptName}: Replace partial fix instructions with "Continue until ALL errors are resolved"`;
|
|
138
|
+
break;
|
|
139
|
+
case 'environment':
|
|
140
|
+
fixes[promptName] = `Enhance ${promptName}: Add git branch awareness and environment checks`;
|
|
141
|
+
break;
|
|
142
|
+
case 'clarity':
|
|
143
|
+
fixes[promptName] = `Clarify ${promptName}: Replace vague objectives with specific, measurable success criteria`;
|
|
144
|
+
break;
|
|
145
|
+
default:
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
return fixes;
|
|
150
|
+
}
|
|
151
|
+
truncateEvidence(text, maxLength = 100) {
|
|
152
|
+
if (text.length <= maxLength) {
|
|
153
|
+
return text;
|
|
154
|
+
}
|
|
155
|
+
return `${text.substring(0, maxLength - 3)}...`;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=suggestion-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestion-generator.js","sourceRoot":"","sources":["../../src/services/suggestion-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Ora } from 'ora';
|
|
2
|
+
export declare enum LogLevel {
|
|
3
|
+
ERROR = 0,
|
|
4
|
+
WARN = 1,
|
|
5
|
+
INFO = 2,
|
|
6
|
+
DEBUG = 3
|
|
7
|
+
}
|
|
8
|
+
interface UIOptions {
|
|
9
|
+
logLevel?: LogLevel;
|
|
10
|
+
useColor?: boolean;
|
|
11
|
+
silent?: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface ListOptions {
|
|
14
|
+
numbered?: boolean;
|
|
15
|
+
indent?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class ConsoleUI {
|
|
18
|
+
private logLevel;
|
|
19
|
+
private useColor;
|
|
20
|
+
private silent;
|
|
21
|
+
constructor(options?: UIOptions);
|
|
22
|
+
success(message: string): void;
|
|
23
|
+
error(error: Error | string): void;
|
|
24
|
+
warn(message: string): void;
|
|
25
|
+
info(message: string): void;
|
|
26
|
+
debug(message: string): void;
|
|
27
|
+
prompt(title: string, description?: string): void;
|
|
28
|
+
progress(message: string, current: number, total: number): void;
|
|
29
|
+
spinner(text: string): Ora;
|
|
30
|
+
table(data: unknown[]): void;
|
|
31
|
+
json(data: unknown, pretty?: boolean): void;
|
|
32
|
+
list(items: string[], options?: ListOptions): void;
|
|
33
|
+
header(text: string): void;
|
|
34
|
+
box(content: string, title?: string): void;
|
|
35
|
+
divider(): void;
|
|
36
|
+
formatCommand(command: string): string;
|
|
37
|
+
formatPath(path: string): string;
|
|
38
|
+
formatUrl(url: string): string;
|
|
39
|
+
formatHighlight(text: string): string;
|
|
40
|
+
formatDim(text: string): string;
|
|
41
|
+
formatBold(text: string): string;
|
|
42
|
+
setLogLevel(level: LogLevel): void;
|
|
43
|
+
setSilent(silent: boolean): void;
|
|
44
|
+
setUseColor(useColor: boolean): void;
|
|
45
|
+
clear(): void;
|
|
46
|
+
newline(): void;
|
|
47
|
+
}
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=ui-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-service.d.ts","sourceRoot":"","sources":["../../src/services/ui-service.ts"],"names":[],"mappings":"AAEA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAI/B,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAU;gBAEZ,OAAO,GAAE,SAAc;IAWnC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9B,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAOlC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM5B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAQjD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAU/D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAiB1B,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK5B,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,UAAO,GAAG,IAAI;IAMxC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI;IActD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO1B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAa1C,OAAO,IAAI,IAAI;IAOf,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI9B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKhC,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAIlC,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIhC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAMpC,KAAK,IAAI,IAAI;IAMb,OAAO,IAAI,IAAI;CAKhB"}
|