@codemieai/code 0.0.3 → 0.0.5
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/README.md +375 -325
- package/bin/codemie-claude.js +23 -0
- package/bin/codemie-code.js +49 -11
- package/bin/codemie-codex.js +12 -13
- package/dist/agents/adapters/claude-code.d.ts +5 -0
- package/dist/agents/adapters/claude-code.d.ts.map +1 -1
- package/dist/agents/adapters/claude-code.js +76 -18
- package/dist/agents/adapters/claude-code.js.map +1 -1
- package/dist/agents/adapters/codex.d.ts +5 -0
- package/dist/agents/adapters/codex.d.ts.map +1 -1
- package/dist/agents/adapters/codex.js +75 -17
- package/dist/agents/adapters/codex.js.map +1 -1
- package/dist/agents/codemie-code/agent.d.ts.map +1 -1
- package/dist/agents/codemie-code/agent.js +187 -21
- package/dist/agents/codemie-code/agent.js.map +1 -1
- package/dist/agents/codemie-code/config.d.ts.map +1 -1
- package/dist/agents/codemie-code/config.js +29 -27
- package/dist/agents/codemie-code/config.js.map +1 -1
- package/dist/agents/codemie-code/index.d.ts +16 -2
- package/dist/agents/codemie-code/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/index.js +74 -6
- package/dist/agents/codemie-code/index.js.map +1 -1
- package/dist/agents/codemie-code/modes/contextAwarePlanning.d.ts +87 -0
- package/dist/agents/codemie-code/modes/contextAwarePlanning.d.ts.map +1 -0
- package/dist/agents/codemie-code/modes/contextAwarePlanning.js +957 -0
- package/dist/agents/codemie-code/modes/contextAwarePlanning.js.map +1 -0
- package/dist/agents/codemie-code/modes/planMode.d.ts +116 -0
- package/dist/agents/codemie-code/modes/planMode.d.ts.map +1 -0
- package/dist/agents/codemie-code/modes/planMode.js +537 -0
- package/dist/agents/codemie-code/modes/planMode.js.map +1 -0
- package/dist/agents/codemie-code/prompts.d.ts +29 -0
- package/dist/agents/codemie-code/prompts.d.ts.map +1 -1
- package/dist/agents/codemie-code/prompts.js +129 -0
- package/dist/agents/codemie-code/prompts.js.map +1 -1
- package/dist/agents/codemie-code/storage/todoStorage.d.ts +78 -0
- package/dist/agents/codemie-code/storage/todoStorage.d.ts.map +1 -0
- package/dist/agents/codemie-code/storage/todoStorage.js +225 -0
- package/dist/agents/codemie-code/storage/todoStorage.js.map +1 -0
- package/dist/agents/codemie-code/tokenUtils.js +1 -1
- package/dist/agents/codemie-code/tokenUtils.js.map +1 -1
- package/dist/agents/codemie-code/tools/index.d.ts +26 -0
- package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/tools/index.js +182 -14
- package/dist/agents/codemie-code/tools/index.js.map +1 -1
- package/dist/agents/codemie-code/tools/planning.d.ts +53 -0
- package/dist/agents/codemie-code/tools/planning.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/planning.js +224 -0
- package/dist/agents/codemie-code/tools/planning.js.map +1 -0
- package/dist/agents/codemie-code/types.d.ts +170 -6
- package/dist/agents/codemie-code/types.d.ts.map +1 -1
- package/dist/agents/codemie-code/types.js.map +1 -1
- package/dist/agents/codemie-code/ui/progressTracker.d.ts +125 -0
- package/dist/agents/codemie-code/ui/progressTracker.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui/progressTracker.js +343 -0
- package/dist/agents/codemie-code/ui/progressTracker.js.map +1 -0
- package/dist/agents/codemie-code/ui/todoPanel.d.ts +112 -0
- package/dist/agents/codemie-code/ui/todoPanel.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui/todoPanel.js +318 -0
- package/dist/agents/codemie-code/ui/todoPanel.js.map +1 -0
- package/dist/agents/codemie-code/ui.d.ts +106 -10
- package/dist/agents/codemie-code/ui.d.ts.map +1 -1
- package/dist/agents/codemie-code/ui.js +913 -129
- package/dist/agents/codemie-code/ui.js.map +1 -1
- package/dist/agents/codemie-code/utils/progressionEnforcer.d.ts +87 -0
- package/dist/agents/codemie-code/utils/progressionEnforcer.d.ts.map +1 -0
- package/dist/agents/codemie-code/utils/progressionEnforcer.js +293 -0
- package/dist/agents/codemie-code/utils/progressionEnforcer.js.map +1 -0
- package/dist/agents/codemie-code/utils/todoParser.d.ts +41 -0
- package/dist/agents/codemie-code/utils/todoParser.d.ts.map +1 -0
- package/dist/agents/codemie-code/utils/todoParser.js +305 -0
- package/dist/agents/codemie-code/utils/todoParser.js.map +1 -0
- package/dist/agents/codemie-code/utils/todoValidator.d.ts +65 -0
- package/dist/agents/codemie-code/utils/todoValidator.d.ts.map +1 -0
- package/dist/agents/codemie-code/utils/todoValidator.js +249 -0
- package/dist/agents/codemie-code/utils/todoValidator.js.map +1 -0
- package/dist/agents/codemie-code/validators/planValidator.d.ts +94 -0
- package/dist/agents/codemie-code/validators/planValidator.d.ts.map +1 -0
- package/dist/agents/codemie-code/validators/planValidator.js +281 -0
- package/dist/agents/codemie-code/validators/planValidator.js.map +1 -0
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +7 -5
- package/dist/agents/registry.js.map +1 -1
- package/dist/cli/commands/auth.d.ts +3 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +170 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +40 -13
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +209 -16
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/env.js +3 -3
- package/dist/cli/commands/env.js.map +1 -1
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +2 -1
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +15 -9
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +177 -11
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/tools.d.ts +6 -0
- package/dist/cli/commands/tools.d.ts.map +1 -0
- package/dist/cli/commands/tools.js +244 -0
- package/dist/cli/commands/tools.js.map +1 -0
- package/dist/cli/commands/version.js +1 -1
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/commands/workflow.d.ts +6 -0
- package/dist/cli/commands/workflow.d.ts.map +1 -0
- package/dist/cli/commands/workflow.js +424 -0
- package/dist/cli/commands/workflow.js.map +1 -0
- package/dist/cli/index.js +39 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/clients/adapters/github.d.ts +17 -0
- package/dist/clients/adapters/github.d.ts.map +1 -0
- package/dist/clients/adapters/github.js +150 -0
- package/dist/clients/adapters/github.js.map +1 -0
- package/dist/clients/adapters/gitlab.d.ts +17 -0
- package/dist/clients/adapters/gitlab.d.ts.map +1 -0
- package/dist/clients/adapters/gitlab.js +147 -0
- package/dist/clients/adapters/gitlab.js.map +1 -0
- package/dist/clients/registry.d.ts +20 -0
- package/dist/clients/registry.d.ts.map +1 -0
- package/dist/clients/registry.js +27 -0
- package/dist/clients/registry.js.map +1 -0
- package/dist/tools/detector.d.ts +33 -0
- package/dist/tools/detector.d.ts.map +1 -0
- package/dist/tools/detector.js +145 -0
- package/dist/tools/detector.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/manager.d.ts +21 -0
- package/dist/tools/manager.d.ts.map +1 -0
- package/dist/tools/manager.js +104 -0
- package/dist/tools/manager.js.map +1 -0
- package/dist/tools/registry.d.ts +8 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +36 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +41 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +5 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/types/sso.d.ts +42 -0
- package/dist/types/sso.d.ts.map +1 -0
- package/dist/types/sso.js +2 -0
- package/dist/types/sso.js.map +1 -0
- package/dist/utils/agent-compatibility.d.ts +32 -0
- package/dist/utils/agent-compatibility.d.ts.map +1 -0
- package/dist/utils/agent-compatibility.js +140 -0
- package/dist/utils/agent-compatibility.js.map +1 -0
- package/dist/utils/codemie-integration-validator.d.ts +17 -0
- package/dist/utils/codemie-integration-validator.d.ts.map +1 -0
- package/dist/utils/codemie-integration-validator.js +105 -0
- package/dist/utils/codemie-integration-validator.js.map +1 -0
- package/dist/utils/codemie-model-fetcher.d.ts +11 -0
- package/dist/utils/codemie-model-fetcher.d.ts.map +1 -0
- package/dist/utils/codemie-model-fetcher.js +242 -0
- package/dist/utils/codemie-model-fetcher.js.map +1 -0
- package/dist/utils/config-loader.d.ts +23 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +73 -27
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/credential-store.d.ts +16 -0
- package/dist/utils/credential-store.d.ts.map +1 -0
- package/dist/utils/credential-store.js +109 -0
- package/dist/utils/credential-store.js.map +1 -0
- package/dist/utils/first-time.d.ts +1 -1
- package/dist/utils/first-time.d.ts.map +1 -1
- package/dist/utils/first-time.js +52 -71
- package/dist/utils/first-time.js.map +1 -1
- package/dist/utils/health-checker.d.ts.map +1 -1
- package/dist/utils/health-checker.js +5 -1
- package/dist/utils/health-checker.js.map +1 -1
- package/dist/utils/model-fetcher.d.ts.map +1 -1
- package/dist/utils/model-fetcher.js +15 -2
- package/dist/utils/model-fetcher.js.map +1 -1
- package/dist/utils/sso-auth.d.ts +15 -0
- package/dist/utils/sso-auth.d.ts.map +1 -0
- package/dist/utils/sso-auth.js +207 -0
- package/dist/utils/sso-auth.js.map +1 -0
- package/dist/utils/sso-gateway.d.ts +47 -0
- package/dist/utils/sso-gateway.d.ts.map +1 -0
- package/dist/utils/sso-gateway.js +298 -0
- package/dist/utils/sso-gateway.js.map +1 -0
- package/dist/workflows/detector.d.ts +37 -0
- package/dist/workflows/detector.d.ts.map +1 -0
- package/dist/workflows/detector.js +160 -0
- package/dist/workflows/detector.js.map +1 -0
- package/dist/workflows/index.d.ts +8 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/index.js +8 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/installer.d.ts +24 -0
- package/dist/workflows/installer.d.ts.map +1 -0
- package/dist/workflows/installer.js +105 -0
- package/dist/workflows/installer.js.map +1 -0
- package/dist/workflows/registry.d.ts +29 -0
- package/dist/workflows/registry.d.ts.map +1 -0
- package/dist/workflows/registry.js +54 -0
- package/dist/workflows/registry.js.map +1 -0
- package/dist/workflows/templates/github/metadata.d.ts +6 -0
- package/dist/workflows/templates/github/metadata.d.ts.map +1 -0
- package/dist/workflows/templates/github/metadata.js +111 -0
- package/dist/workflows/templates/github/metadata.js.map +1 -0
- package/dist/workflows/templates/gitlab/metadata.d.ts +6 -0
- package/dist/workflows/templates/gitlab/metadata.d.ts.map +1 -0
- package/dist/workflows/templates/gitlab/metadata.js +14 -0
- package/dist/workflows/templates/gitlab/metadata.js.map +1 -0
- package/dist/workflows/types.d.ts +71 -0
- package/dist/workflows/types.d.ts.map +1 -0
- package/dist/workflows/types.js +5 -0
- package/dist/workflows/types.js.map +1 -0
- package/package.json +19 -6
- package/src/workflows/templates/github/code-ci.yml +529 -0
- package/src/workflows/templates/github/inline-fix.yml +665 -0
- package/src/workflows/templates/github/pr-review.yml +677 -0
- package/.claude/agents/README.md +0 -298
- package/.claude/agents/release-manager.md +0 -857
- package/.codemie/guides/git-workflow.md +0 -493
- package/CLAUDE.md +0 -225
- package/config.example.json +0 -10
- package/dist/agents/codemie-code/streaming/events.d.ts +0 -7
- package/dist/agents/codemie-code/streaming/events.d.ts.map +0 -1
- package/dist/agents/codemie-code/streaming/events.js +0 -7
- package/dist/agents/codemie-code/streaming/events.js.map +0 -1
- package/dist/agents/codemie-code/streaming/formatter.d.ts +0 -2
- package/dist/agents/codemie-code/streaming/formatter.d.ts.map +0 -1
- package/dist/agents/codemie-code/streaming/formatter.js +0 -2
- package/dist/agents/codemie-code/streaming/formatter.js.map +0 -1
- package/dist/agents/codemie-code/streaming/ui.d.ts +0 -2
- package/dist/agents/codemie-code/streaming/ui.d.ts.map +0 -1
- package/dist/agents/codemie-code/streaming/ui.js +0 -2
- package/dist/agents/codemie-code/streaming/ui.js.map +0 -1
- package/dist/agents/codemie-code/tools/command.d.ts +0 -2
- package/dist/agents/codemie-code/tools/command.d.ts.map +0 -1
- package/dist/agents/codemie-code/tools/command.js +0 -2
- package/dist/agents/codemie-code/tools/command.js.map +0 -1
- package/dist/agents/codemie-code/tools/filesystem.d.ts +0 -2
- package/dist/agents/codemie-code/tools/filesystem.d.ts.map +0 -1
- package/dist/agents/codemie-code/tools/filesystem.js +0 -2
- package/dist/agents/codemie-code/tools/filesystem.js.map +0 -1
- package/dist/agents/codemie-code/tools/git.d.ts +0 -2
- package/dist/agents/codemie-code/tools/git.d.ts.map +0 -1
- package/dist/agents/codemie-code/tools/git.js +0 -2
- package/dist/agents/codemie-code/tools/git.js.map +0 -1
- package/dist/agents/codemie-code/tools/security.d.ts +0 -2
- package/dist/agents/codemie-code/tools/security.d.ts.map +0 -1
- package/dist/agents/codemie-code/tools/security.js +0 -2
- package/dist/agents/codemie-code/tools/security.js.map +0 -1
- package/eslint.config.mjs +0 -43
- package/scripts/README.md +0 -80
- package/scripts/release.sh +0 -156
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Todo Parser Utility
|
|
3
|
+
*
|
|
4
|
+
* Handles parsing todos from multiple input formats:
|
|
5
|
+
* - String with bullet lines: "- Plan\n- Search\n- Edit\n- Verify"
|
|
6
|
+
* - List of strings: ["Plan the work", "Search repo", "Edit files", "Run tests"]
|
|
7
|
+
* - List of objects: [{"content":"Plan", "status":"pending"}, {"content":"Search", "status":"in_progress"}]
|
|
8
|
+
* - GitHub-style checkboxes: "- [ ] pending\n- [x] completed"
|
|
9
|
+
*
|
|
10
|
+
* Ported from langchain-code's planner.py with TypeScript improvements
|
|
11
|
+
*/
|
|
12
|
+
// Valid status mappings and aliases
|
|
13
|
+
const ALLOWED_STATUSES = new Set(['pending', 'in_progress', 'completed']);
|
|
14
|
+
const STATUS_ALIASES = {
|
|
15
|
+
'in-progress': 'in_progress',
|
|
16
|
+
'progress': 'in_progress',
|
|
17
|
+
'doing': 'in_progress',
|
|
18
|
+
'todo': 'pending',
|
|
19
|
+
'tbd': 'pending',
|
|
20
|
+
'done': 'completed',
|
|
21
|
+
'complete': 'completed',
|
|
22
|
+
'finished': 'completed',
|
|
23
|
+
};
|
|
24
|
+
// Regex for GitHub-style checkboxes: "- [x] Do thing" or "* [ ] Task" or "1) [x] Task"
|
|
25
|
+
const CHECKBOX_REGEX = /^\s*(?:[-*+]|\d+[.)])?\s*(\[[ xX]\])?\s*(.+)$/;
|
|
26
|
+
/**
|
|
27
|
+
* Normalize a status string to a valid status
|
|
28
|
+
*/
|
|
29
|
+
function normalizeStatus(status) {
|
|
30
|
+
if (!status)
|
|
31
|
+
return 'pending';
|
|
32
|
+
const normalized = status.trim().toLowerCase();
|
|
33
|
+
const mapped = STATUS_ALIASES[normalized] || normalized;
|
|
34
|
+
return ALLOWED_STATUSES.has(mapped) ? mapped : 'pending';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse a single todo item from various formats
|
|
38
|
+
*/
|
|
39
|
+
function parseOneTodo(item) {
|
|
40
|
+
if (item === null || item === undefined) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
if (typeof item === 'string') {
|
|
44
|
+
const trimmed = item.trim();
|
|
45
|
+
if (!trimmed)
|
|
46
|
+
return null;
|
|
47
|
+
// Handle GitHub-style checkboxes: "- [x] Do thing" / "* [ ] Task"
|
|
48
|
+
const match = CHECKBOX_REGEX.exec(trimmed);
|
|
49
|
+
if (match) {
|
|
50
|
+
const [, checkbox, content] = match;
|
|
51
|
+
const cleanContent = (content || '').trim().replace(/^[-|*]+\s*/, '').trim();
|
|
52
|
+
if (!cleanContent)
|
|
53
|
+
return null;
|
|
54
|
+
const status = (checkbox && checkbox.toLowerCase() === '[x]') ? 'completed' : 'pending';
|
|
55
|
+
return {
|
|
56
|
+
content: cleanContent,
|
|
57
|
+
status,
|
|
58
|
+
timestamp: new Date()
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// Handle plain bullet points: "- Task" or "* Task"
|
|
62
|
+
const cleanContent = trimmed.replace(/^[-|*+]\s*/, '').trim();
|
|
63
|
+
if (!cleanContent)
|
|
64
|
+
return null;
|
|
65
|
+
return {
|
|
66
|
+
content: cleanContent,
|
|
67
|
+
status: 'pending',
|
|
68
|
+
timestamp: new Date()
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (typeof item === 'object' && item !== null) {
|
|
72
|
+
const content = item.content || item.task || item.title || '';
|
|
73
|
+
const cleanContent = String(content).trim();
|
|
74
|
+
if (!cleanContent)
|
|
75
|
+
return null;
|
|
76
|
+
return {
|
|
77
|
+
content: cleanContent,
|
|
78
|
+
status: normalizeStatus(item.status),
|
|
79
|
+
timestamp: new Date(),
|
|
80
|
+
metadata: item.metadata
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// Fallback: convert to string and try again
|
|
84
|
+
return parseOneTodo(String(item));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Parse todos from various input formats
|
|
88
|
+
*/
|
|
89
|
+
function parseTodoList(input) {
|
|
90
|
+
const todos = [];
|
|
91
|
+
const errors = [];
|
|
92
|
+
const warnings = [];
|
|
93
|
+
let detectedFormat = 'mixed';
|
|
94
|
+
try {
|
|
95
|
+
if (typeof input === 'string') {
|
|
96
|
+
// Handle multi-line string input
|
|
97
|
+
const lines = input.split('\n').filter(line => line.trim());
|
|
98
|
+
detectedFormat = lines.some(line => CHECKBOX_REGEX.test(line)) ? 'github_checkboxes' : 'string_bullets';
|
|
99
|
+
for (const line of lines) {
|
|
100
|
+
const todo = parseOneTodo(line);
|
|
101
|
+
if (todo) {
|
|
102
|
+
todos.push(todo);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (Array.isArray(input)) {
|
|
107
|
+
// Handle array input
|
|
108
|
+
const hasObjects = input.some(item => typeof item === 'object' && item !== null);
|
|
109
|
+
detectedFormat = hasObjects ? 'object_array' : 'string_array';
|
|
110
|
+
for (const item of input) {
|
|
111
|
+
const todo = parseOneTodo(item);
|
|
112
|
+
if (todo) {
|
|
113
|
+
todos.push(todo);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else if (typeof input === 'object' && input !== null && 'items' in input) {
|
|
118
|
+
// Handle object with 'items' property
|
|
119
|
+
detectedFormat = 'object_array';
|
|
120
|
+
if (Array.isArray(input.items)) {
|
|
121
|
+
for (const item of input.items) {
|
|
122
|
+
const todo = parseOneTodo(item);
|
|
123
|
+
if (todo) {
|
|
124
|
+
todos.push(todo);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// Single item
|
|
131
|
+
const todo = parseOneTodo(input);
|
|
132
|
+
if (todo) {
|
|
133
|
+
todos.push(todo);
|
|
134
|
+
detectedFormat = typeof input === 'object' ? 'object_array' : 'string_array';
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Deduplicate consecutive duplicates by content
|
|
138
|
+
const deduped = [];
|
|
139
|
+
let lastContent = null;
|
|
140
|
+
for (const todo of todos.slice(0, 50)) { // Limit to 50 items
|
|
141
|
+
if (todo.content !== lastContent) {
|
|
142
|
+
deduped.push({ ...todo, index: deduped.length });
|
|
143
|
+
lastContent = todo.content;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
warnings.push(`Duplicate todo removed: "${todo.content}"`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (todos.length > 50) {
|
|
150
|
+
warnings.push(`Todo list truncated to 50 items (was ${todos.length})`);
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
todos: deduped,
|
|
154
|
+
errors,
|
|
155
|
+
warnings,
|
|
156
|
+
detectedFormat
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
errors.push(`Failed to parse todos: ${error instanceof Error ? error.message : String(error)}`);
|
|
161
|
+
return {
|
|
162
|
+
todos: [],
|
|
163
|
+
errors,
|
|
164
|
+
warnings,
|
|
165
|
+
detectedFormat: 'mixed'
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Enforce single in-progress rule
|
|
171
|
+
* Only one todo can be "in_progress" at a time
|
|
172
|
+
*/
|
|
173
|
+
function enforceSingleInProgressRule(todos, preferIndex) {
|
|
174
|
+
const inProgressIndices = todos
|
|
175
|
+
.map((todo, index) => ({ todo, index }))
|
|
176
|
+
.filter(({ todo }) => todo.status === 'in_progress')
|
|
177
|
+
.map(({ index }) => index);
|
|
178
|
+
if (inProgressIndices.length <= 1) {
|
|
179
|
+
return todos;
|
|
180
|
+
}
|
|
181
|
+
// Keep preferred index or first one, downgrade others to pending
|
|
182
|
+
const keepIndex = preferIndex !== undefined ? preferIndex : inProgressIndices[0];
|
|
183
|
+
return todos.map((todo, index) => {
|
|
184
|
+
if (todo.status === 'in_progress' && index !== keepIndex) {
|
|
185
|
+
return {
|
|
186
|
+
...todo,
|
|
187
|
+
status: 'pending',
|
|
188
|
+
lastUpdated: new Date()
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
return todo;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Validate sequential progression
|
|
196
|
+
* Ensures todos are completed in order (no skipping ahead)
|
|
197
|
+
*/
|
|
198
|
+
function enforceSequentialProgression(todos) {
|
|
199
|
+
let blocked = false;
|
|
200
|
+
return todos.map(todo => {
|
|
201
|
+
const currentStatus = todo.status;
|
|
202
|
+
// If we're blocked and this todo is in_progress or completed, downgrade to pending
|
|
203
|
+
if (blocked && (currentStatus === 'in_progress' || currentStatus === 'completed')) {
|
|
204
|
+
return {
|
|
205
|
+
...todo,
|
|
206
|
+
status: 'pending',
|
|
207
|
+
lastUpdated: new Date()
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
// If this todo is not completed, block future todos
|
|
211
|
+
if (currentStatus !== 'completed') {
|
|
212
|
+
blocked = true;
|
|
213
|
+
}
|
|
214
|
+
return todo;
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Main parsing function with validation
|
|
219
|
+
*/
|
|
220
|
+
export function parseTodos(input, options = {}) {
|
|
221
|
+
const { enforceSequential = true, enforceSingleInProgress = true, preferredInProgressIndex } = options;
|
|
222
|
+
let result = parseTodoList(input);
|
|
223
|
+
if (result.todos.length === 0) {
|
|
224
|
+
return result;
|
|
225
|
+
}
|
|
226
|
+
// Apply enforcement rules
|
|
227
|
+
let processedTodos = result.todos;
|
|
228
|
+
if (enforceSequential) {
|
|
229
|
+
processedTodos = enforceSequentialProgression(processedTodos);
|
|
230
|
+
}
|
|
231
|
+
if (enforceSingleInProgress) {
|
|
232
|
+
processedTodos = enforceSingleInProgressRule(processedTodos, preferredInProgressIndex);
|
|
233
|
+
}
|
|
234
|
+
// Update indices
|
|
235
|
+
processedTodos = processedTodos.map((todo, index) => ({
|
|
236
|
+
...todo,
|
|
237
|
+
index
|
|
238
|
+
}));
|
|
239
|
+
return {
|
|
240
|
+
...result,
|
|
241
|
+
todos: processedTodos
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Calculate progress information from todos
|
|
246
|
+
*/
|
|
247
|
+
export function calculateProgress(todos) {
|
|
248
|
+
const total = todos.length;
|
|
249
|
+
const completed = todos.filter(t => t.status === 'completed').length;
|
|
250
|
+
const pending = todos.filter(t => t.status === 'pending').length;
|
|
251
|
+
const inProgress = todos.filter(t => t.status === 'in_progress').length;
|
|
252
|
+
const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
|
|
253
|
+
const currentTodo = todos.find(t => t.status === 'in_progress');
|
|
254
|
+
return {
|
|
255
|
+
total,
|
|
256
|
+
completed,
|
|
257
|
+
pending,
|
|
258
|
+
inProgress,
|
|
259
|
+
percentage,
|
|
260
|
+
currentTodo
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Generate diff between two todo states
|
|
265
|
+
*/
|
|
266
|
+
export function diffTodos(before, after) {
|
|
267
|
+
const changes = [];
|
|
268
|
+
const _maxLength = Math.max(before.length, after.length);
|
|
269
|
+
// Check status changes in existing todos
|
|
270
|
+
for (let i = 0; i < Math.min(before.length, after.length); i++) {
|
|
271
|
+
const prevStatus = before[i]?.status || 'pending';
|
|
272
|
+
const currStatus = after[i]?.status || 'pending';
|
|
273
|
+
if (prevStatus !== currStatus) {
|
|
274
|
+
const content = after[i]?.content || before[i]?.content || '(unknown)';
|
|
275
|
+
changes.push(`[${i + 1}] ${content} -> ${currStatus}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Check for added todos
|
|
279
|
+
if (after.length > before.length) {
|
|
280
|
+
for (let i = before.length; i < after.length; i++) {
|
|
281
|
+
const content = after[i]?.content || '(unknown)';
|
|
282
|
+
changes.push(`[+] ${content} (added)`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// Check for removed todos
|
|
286
|
+
if (before.length > after.length) {
|
|
287
|
+
for (let i = after.length; i < before.length; i++) {
|
|
288
|
+
const content = before[i]?.content || '(unknown)';
|
|
289
|
+
changes.push(`[-] ${content} (removed)`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return changes;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Mark all remaining todos as completed
|
|
296
|
+
* Used when agent finishes work but forgot to update todos
|
|
297
|
+
*/
|
|
298
|
+
export function completeAllTodos(todos) {
|
|
299
|
+
return todos.map(todo => ({
|
|
300
|
+
...todo,
|
|
301
|
+
status: todo.status === 'completed' ? 'completed' : 'completed',
|
|
302
|
+
lastUpdated: new Date()
|
|
303
|
+
}));
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=todoParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todoParser.js","sourceRoot":"","sources":["../../../../src/agents/codemie-code/utils/todoParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,oCAAoC;AACpC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAC1E,MAAM,cAAc,GAA2B;IAC7C,aAAa,EAAE,aAAa;IAC5B,UAAU,EAAE,aAAa;IACzB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,WAAW;IACvB,UAAU,EAAE,WAAW;CACxB,CAAC;AAEF,uFAAuF;AACvF,MAAM,cAAc,GAAG,+CAA+C,CAAC;AAEvE;;GAEG;AACH,SAAS,eAAe,CAAC,MAAiC;IACxD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;IAExD,OAAO,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,IAAS;IAC7B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,kEAAkE;QAClE,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;YACpC,MAAM,YAAY,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAE7E,IAAI,CAAC,YAAY;gBAAE,OAAO,IAAI,CAAC;YAE/B,MAAM,MAAM,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YACxF,OAAO;gBACL,OAAO,EAAE,YAAY;gBACrB,MAAM;gBACN,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;QACJ,CAAC;QAED,mDAAmD;QACnD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9D,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAE/B,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAE5C,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAE/B,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;YACpC,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAU;IAC/B,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,cAAc,GAAsC,OAAO,CAAC;IAEhE,IAAI,CAAC;QACH,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,iCAAiC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC;YAExG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,qBAAqB;YACrB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;YACjF,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC;YAE9D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YAC3E,sCAAsC;YACtC,cAAc,GAAG,cAAc,CAAC;YAEhC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,IAAI,EAAE,CAAC;wBACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,cAAc;YACd,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,cAAc,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,MAAM,OAAO,GAAW,EAAE,CAAC;QAC3B,IAAI,WAAW,GAAkB,IAAI,CAAC;QAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,oBAAoB;YAC3D,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACjD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,wCAAwC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACzE,CAAC;QAED,OAAO;YACL,KAAK,EAAE,OAAO;YACd,MAAM;YACN,QAAQ;YACR,cAAc;SACf,CAAC;IAEJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEhG,OAAO;YACL,KAAK,EAAE,EAAE;YACT,MAAM;YACN,QAAQ;YACR,cAAc,EAAE,OAAO;SACxB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAAC,KAAa,EAAE,WAAoB;IACtE,MAAM,iBAAiB,GAAG,KAAK;SAC5B,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SACvC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC;SACnD,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAE7B,IAAI,iBAAiB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iEAAiE;IACjE,MAAM,SAAS,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAEjF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzD,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,SAAkB;gBAC1B,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,4BAA4B,CAAC,KAAa;IACjD,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;QAElC,mFAAmF;QACnF,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,aAAa,IAAI,aAAa,KAAK,WAAW,CAAC,EAAE,CAAC;YAClF,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,SAAkB;gBAC1B,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC;QACJ,CAAC;QAED,oDAAoD;QACpD,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAU,EAAE,UAInC,EAAE;IACJ,MAAM,EACJ,iBAAiB,GAAG,IAAI,EACxB,uBAAuB,GAAG,IAAI,EAC9B,wBAAwB,EACzB,GAAG,OAAO,CAAC;IAEZ,IAAI,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAElC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,0BAA0B;IAC1B,IAAI,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;IAElC,IAAI,iBAAiB,EAAE,CAAC;QACtB,cAAc,GAAG,4BAA4B,CAAC,cAAc,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,uBAAuB,EAAE,CAAC;QAC5B,cAAc,GAAG,2BAA2B,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;IACzF,CAAC;IAED,iBAAiB;IACjB,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACpD,GAAG,IAAI;QACP,KAAK;KACN,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,GAAG,MAAM;QACT,KAAK,EAAE,cAAc;KACtB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;IACrE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,MAAM,CAAC;IACxE,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;IAEhE,OAAO;QACL,KAAK;QACL,SAAS;QACT,OAAO;QACP,UAAU;QACV,UAAU;QACV,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,KAAa;IACrD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzD,yCAAyC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC;QAClD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC;QAEjD,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,WAAW,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,OAAO,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,WAAW,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,OAAO,OAAO,UAAU,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,WAAW,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,OAAO,OAAO,YAAY,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,GAAG,IAAI;QACP,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAoB;QACxE,WAAW,EAAE,IAAI,IAAI,EAAE;KACxB,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Todo Validator Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides validation and quality checking for todo lists
|
|
5
|
+
* Ensures todos follow best practices and are actionable
|
|
6
|
+
*/
|
|
7
|
+
import type { Todo, ProgressInfo } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Validation result for a single todo
|
|
10
|
+
*/
|
|
11
|
+
export interface TodoValidationResult {
|
|
12
|
+
/** Whether the todo is valid */
|
|
13
|
+
isValid: boolean;
|
|
14
|
+
/** Validation errors */
|
|
15
|
+
errors: string[];
|
|
16
|
+
/** Warnings for improvement */
|
|
17
|
+
warnings: string[];
|
|
18
|
+
/** Quality score (0-100) */
|
|
19
|
+
qualityScore: number;
|
|
20
|
+
/** Suggestions for improvement */
|
|
21
|
+
suggestions: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Validation result for entire todo list
|
|
25
|
+
*/
|
|
26
|
+
export interface TodoListValidationResult {
|
|
27
|
+
/** Whether the entire list is valid */
|
|
28
|
+
isValid: boolean;
|
|
29
|
+
/** Overall errors */
|
|
30
|
+
errors: string[];
|
|
31
|
+
/** Overall warnings */
|
|
32
|
+
warnings: string[];
|
|
33
|
+
/** Individual todo validations */
|
|
34
|
+
todoValidations: TodoValidationResult[];
|
|
35
|
+
/** Overall quality score (0-100) */
|
|
36
|
+
overallQuality: number;
|
|
37
|
+
/** List-level suggestions */
|
|
38
|
+
suggestions: string[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Validate a single todo item
|
|
42
|
+
*/
|
|
43
|
+
export declare function validateTodo(todo: Todo): TodoValidationResult;
|
|
44
|
+
/**
|
|
45
|
+
* Validate entire todo list
|
|
46
|
+
*/
|
|
47
|
+
export declare function validateTodoList(todos: Todo[]): TodoListValidationResult;
|
|
48
|
+
/**
|
|
49
|
+
* Check if todo status transition is valid
|
|
50
|
+
*/
|
|
51
|
+
export declare function isValidStatusTransition(from: Todo['status'], to: Todo['status']): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Suggest improvements for a todo
|
|
54
|
+
*/
|
|
55
|
+
export declare function suggestImprovements(todo: Todo): string[];
|
|
56
|
+
/**
|
|
57
|
+
* Generate quality report for todo list
|
|
58
|
+
*/
|
|
59
|
+
export declare function generateQualityReport(todos: Todo[]): {
|
|
60
|
+
summary: string;
|
|
61
|
+
qualityScore: number;
|
|
62
|
+
recommendations: string[];
|
|
63
|
+
progressInfo: ProgressInfo;
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=todoValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todoValidator.d.ts","sourceRoot":"","sources":["../../../../src/agents/codemie-code/utils/todoValidator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAC;IAEjB,wBAAwB;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IAErB,kCAAkC;IACpC,WAAW,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IAEjB,qBAAqB;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,kCAAkC;IAClC,eAAe,EAAE,oBAAoB,EAAE,CAAC;IAExC,oCAAoC;IACpC,cAAc,EAAE,MAAM,CAAC;IAEvB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,oBAAoB,CA+E7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,wBAAwB,CAiFxE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,OAAO,CAgBzF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,CAgCxD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,YAAY,CAAC;CAC5B,CA0BA"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Todo Validator Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides validation and quality checking for todo lists
|
|
5
|
+
* Ensures todos follow best practices and are actionable
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Validate a single todo item
|
|
9
|
+
*/
|
|
10
|
+
export function validateTodo(todo) {
|
|
11
|
+
const errors = [];
|
|
12
|
+
const warnings = [];
|
|
13
|
+
const suggestions = [];
|
|
14
|
+
let qualityScore = 100;
|
|
15
|
+
// Check content
|
|
16
|
+
if (!todo.content || typeof todo.content !== 'string') {
|
|
17
|
+
errors.push('Todo content is required and must be a string');
|
|
18
|
+
qualityScore -= 50;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const content = todo.content.trim();
|
|
22
|
+
// Check minimum length
|
|
23
|
+
if (content.length < 3) {
|
|
24
|
+
warnings.push('Todo content is very short (less than 3 characters)');
|
|
25
|
+
qualityScore -= 20;
|
|
26
|
+
}
|
|
27
|
+
// Check maximum length
|
|
28
|
+
if (content.length > 200) {
|
|
29
|
+
warnings.push('Todo content is very long (over 200 characters)');
|
|
30
|
+
suggestions.push('Consider breaking long todos into smaller, more specific steps');
|
|
31
|
+
qualityScore -= 10;
|
|
32
|
+
}
|
|
33
|
+
// Check for vague language
|
|
34
|
+
const vagueWords = ['thing', 'stuff', 'handle', 'deal with', 'manage', 'work on'];
|
|
35
|
+
const lowerContent = content.toLowerCase();
|
|
36
|
+
const foundVague = vagueWords.filter(word => lowerContent.includes(word));
|
|
37
|
+
if (foundVague.length > 0) {
|
|
38
|
+
warnings.push(`Contains vague language: ${foundVague.join(', ')}`);
|
|
39
|
+
suggestions.push('Use specific, actionable language (e.g., "Read config.ts file" not "Handle configuration")');
|
|
40
|
+
qualityScore -= 15;
|
|
41
|
+
}
|
|
42
|
+
// Check for verb-first structure (good practice)
|
|
43
|
+
const verbs = ['read', 'write', 'create', 'update', 'delete', 'fix', 'implement', 'test', 'review', 'analyze', 'install', 'configure', 'run', 'execute', 'build', 'deploy'];
|
|
44
|
+
const startsWithVerb = verbs.some(verb => lowerContent.startsWith(verb));
|
|
45
|
+
if (!startsWithVerb) {
|
|
46
|
+
suggestions.push('Consider starting with an action verb (e.g., "Read file" instead of "File reading")');
|
|
47
|
+
qualityScore -= 5;
|
|
48
|
+
}
|
|
49
|
+
// Check for file paths or specific targets
|
|
50
|
+
const hasSpecifics = /\.(ts|js|py|md|json|yml|yaml|txt)|src\/|\/.*\/|[A-Z][a-zA-Z]*\./.test(content);
|
|
51
|
+
if (!hasSpecifics && content.length > 10) {
|
|
52
|
+
suggestions.push('Consider being more specific about files, functions, or components');
|
|
53
|
+
qualityScore -= 5;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Check status
|
|
57
|
+
const validStatuses = ['pending', 'in_progress', 'completed'];
|
|
58
|
+
if (!validStatuses.includes(todo.status)) {
|
|
59
|
+
errors.push(`Invalid status: ${todo.status}. Must be one of: ${validStatuses.join(', ')}`);
|
|
60
|
+
qualityScore -= 30;
|
|
61
|
+
}
|
|
62
|
+
// Check timestamps
|
|
63
|
+
if (todo.timestamp && !(todo.timestamp instanceof Date)) {
|
|
64
|
+
warnings.push('Timestamp should be a Date object');
|
|
65
|
+
qualityScore -= 5;
|
|
66
|
+
}
|
|
67
|
+
if (todo.lastUpdated && !(todo.lastUpdated instanceof Date)) {
|
|
68
|
+
warnings.push('lastUpdated should be a Date object');
|
|
69
|
+
qualityScore -= 5;
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
isValid: errors.length === 0,
|
|
73
|
+
errors,
|
|
74
|
+
warnings,
|
|
75
|
+
qualityScore: Math.max(0, qualityScore),
|
|
76
|
+
suggestions
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Validate entire todo list
|
|
81
|
+
*/
|
|
82
|
+
export function validateTodoList(todos) {
|
|
83
|
+
const errors = [];
|
|
84
|
+
const warnings = [];
|
|
85
|
+
const suggestions = [];
|
|
86
|
+
const todoValidations = [];
|
|
87
|
+
// Validate each todo
|
|
88
|
+
for (let i = 0; i < todos.length; i++) {
|
|
89
|
+
const validation = validateTodo(todos[i]);
|
|
90
|
+
todoValidations.push(validation);
|
|
91
|
+
// Collect errors and warnings
|
|
92
|
+
errors.push(...validation.errors.map(error => `Todo ${i + 1}: ${error}`));
|
|
93
|
+
warnings.push(...validation.warnings.map(warning => `Todo ${i + 1}: ${warning}`));
|
|
94
|
+
}
|
|
95
|
+
// Check list-level constraints
|
|
96
|
+
// Check for duplicate content
|
|
97
|
+
const contentMap = new Map();
|
|
98
|
+
todos.forEach((todo, index) => {
|
|
99
|
+
const content = todo.content.toLowerCase().trim();
|
|
100
|
+
if (!contentMap.has(content)) {
|
|
101
|
+
contentMap.set(content, []);
|
|
102
|
+
}
|
|
103
|
+
contentMap.get(content).push(index + 1);
|
|
104
|
+
});
|
|
105
|
+
for (const [, indices] of contentMap) {
|
|
106
|
+
if (indices.length > 1) {
|
|
107
|
+
warnings.push(`Duplicate todo content found at positions: ${indices.join(', ')}`);
|
|
108
|
+
suggestions.push('Remove or merge duplicate todos');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Check for too many in_progress todos
|
|
112
|
+
const inProgressCount = todos.filter(t => t.status === 'in_progress').length;
|
|
113
|
+
if (inProgressCount > 1) {
|
|
114
|
+
errors.push(`Too many in_progress todos (${inProgressCount}). Only one should be in_progress at a time.`);
|
|
115
|
+
}
|
|
116
|
+
// Check for proper progression
|
|
117
|
+
let foundNonCompleted = false;
|
|
118
|
+
for (let i = 0; i < todos.length; i++) {
|
|
119
|
+
const todo = todos[i];
|
|
120
|
+
if (foundNonCompleted && todo.status === 'completed') {
|
|
121
|
+
warnings.push(`Todo ${i + 1} is completed but earlier todos are not. Consider sequential execution.`);
|
|
122
|
+
suggestions.push('Complete todos in order to maintain clear progress tracking');
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
if (todo.status !== 'completed') {
|
|
126
|
+
foundNonCompleted = true;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Check list size
|
|
130
|
+
if (todos.length === 0) {
|
|
131
|
+
warnings.push('Todo list is empty');
|
|
132
|
+
}
|
|
133
|
+
else if (todos.length === 1) {
|
|
134
|
+
suggestions.push('Consider breaking complex tasks into multiple steps');
|
|
135
|
+
}
|
|
136
|
+
else if (todos.length > 10) {
|
|
137
|
+
warnings.push('Todo list is quite long (>10 items). Consider grouping or prioritizing.');
|
|
138
|
+
}
|
|
139
|
+
// Calculate overall quality
|
|
140
|
+
const totalQuality = todoValidations.reduce((sum, validation) => sum + validation.qualityScore, 0);
|
|
141
|
+
const overallQuality = todos.length > 0 ? Math.round(totalQuality / todos.length) : 0;
|
|
142
|
+
// Add quality-based suggestions
|
|
143
|
+
if (overallQuality < 70) {
|
|
144
|
+
suggestions.push('Consider revising todos to be more specific and actionable');
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
isValid: errors.length === 0,
|
|
148
|
+
errors,
|
|
149
|
+
warnings,
|
|
150
|
+
todoValidations,
|
|
151
|
+
overallQuality,
|
|
152
|
+
suggestions
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Check if todo status transition is valid
|
|
157
|
+
*/
|
|
158
|
+
export function isValidStatusTransition(from, to) {
|
|
159
|
+
// Valid transitions:
|
|
160
|
+
// pending -> in_progress
|
|
161
|
+
// pending -> completed (skip in_progress if needed)
|
|
162
|
+
// in_progress -> completed
|
|
163
|
+
// in_progress -> pending (rollback)
|
|
164
|
+
// completed -> pending (reopen - rare but allowed)
|
|
165
|
+
// completed -> in_progress (reopen - rare but allowed)
|
|
166
|
+
const validTransitions = {
|
|
167
|
+
'pending': ['in_progress', 'completed'],
|
|
168
|
+
'in_progress': ['completed', 'pending'],
|
|
169
|
+
'completed': ['pending', 'in_progress'] // Allow reopening for corrections
|
|
170
|
+
};
|
|
171
|
+
return validTransitions[from]?.includes(to) ?? false;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Suggest improvements for a todo
|
|
175
|
+
*/
|
|
176
|
+
export function suggestImprovements(todo) {
|
|
177
|
+
const suggestions = [];
|
|
178
|
+
const content = todo.content.toLowerCase().trim();
|
|
179
|
+
// Suggest more specific language
|
|
180
|
+
if (content.includes('fix')) {
|
|
181
|
+
suggestions.push('Be more specific about what needs to be fixed (e.g., "Fix TypeScript error in config.ts")');
|
|
182
|
+
}
|
|
183
|
+
if (content.includes('update')) {
|
|
184
|
+
suggestions.push('Specify what needs to be updated and how');
|
|
185
|
+
}
|
|
186
|
+
if (content.includes('improve')) {
|
|
187
|
+
suggestions.push('Define specific improvements to be made');
|
|
188
|
+
}
|
|
189
|
+
// Suggest breaking down complex tasks
|
|
190
|
+
if (content.includes(' and ')) {
|
|
191
|
+
suggestions.push('Consider breaking this into separate todos (contains "and")');
|
|
192
|
+
}
|
|
193
|
+
if (content.includes('implement')) {
|
|
194
|
+
suggestions.push('Consider breaking implementation into smaller steps (plan, code, test, review)');
|
|
195
|
+
}
|
|
196
|
+
// Suggest adding context
|
|
197
|
+
if (!content.includes('.') && !content.includes('/')) {
|
|
198
|
+
suggestions.push('Consider adding file paths or specific locations');
|
|
199
|
+
}
|
|
200
|
+
return suggestions;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Generate quality report for todo list
|
|
204
|
+
*/
|
|
205
|
+
export function generateQualityReport(todos) {
|
|
206
|
+
const validation = validateTodoList(todos);
|
|
207
|
+
const progressInfo = calculateProgress(todos);
|
|
208
|
+
const recommendations = [
|
|
209
|
+
...validation.suggestions,
|
|
210
|
+
...validation.todoValidations
|
|
211
|
+
.flatMap((v, i) => v.suggestions.map(s => `Todo ${i + 1}: ${s}`))
|
|
212
|
+
];
|
|
213
|
+
let summary = `Todo list contains ${todos.length} items with ${validation.errors.length} errors and ${validation.warnings.length} warnings.`;
|
|
214
|
+
if (validation.overallQuality >= 80) {
|
|
215
|
+
summary += ' Quality is excellent.';
|
|
216
|
+
}
|
|
217
|
+
else if (validation.overallQuality >= 60) {
|
|
218
|
+
summary += ' Quality is good but could be improved.';
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
summary += ' Quality needs improvement.';
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
summary,
|
|
225
|
+
qualityScore: validation.overallQuality,
|
|
226
|
+
recommendations: recommendations.slice(0, 10), // Limit recommendations
|
|
227
|
+
progressInfo
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Calculate progress information from todos
|
|
232
|
+
*/
|
|
233
|
+
function calculateProgress(todos) {
|
|
234
|
+
const total = todos.length;
|
|
235
|
+
const completed = todos.filter(t => t.status === 'completed').length;
|
|
236
|
+
const pending = todos.filter(t => t.status === 'pending').length;
|
|
237
|
+
const inProgress = todos.filter(t => t.status === 'in_progress').length;
|
|
238
|
+
const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
|
|
239
|
+
const currentTodo = todos.find(t => t.status === 'in_progress');
|
|
240
|
+
return {
|
|
241
|
+
total,
|
|
242
|
+
completed,
|
|
243
|
+
pending,
|
|
244
|
+
inProgress,
|
|
245
|
+
percentage,
|
|
246
|
+
currentTodo
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=todoValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todoValidator.js","sourceRoot":"","sources":["../../../../src/agents/codemie-code/utils/todoValidator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+CH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAU;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,YAAY,GAAG,GAAG,CAAC;IAEvB,gBAAgB;IAChB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC7D,YAAY,IAAI,EAAE,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEpC,uBAAuB;QACvB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACrE,YAAY,IAAI,EAAE,CAAC;QACrB,CAAC;QAED,uBAAuB;QACvB,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YACjE,WAAW,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;YACnF,YAAY,IAAI,EAAE,CAAC;QACrB,CAAC;QAED,2BAA2B;QAC3B,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClF,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAE1E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,4BAA4B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnE,WAAW,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;YAC/G,YAAY,IAAI,EAAE,CAAC;QACrB,CAAC;QAED,iDAAiD;QACjD,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5K,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,WAAW,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;YACxG,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,2CAA2C;QAC3C,MAAM,YAAY,GAAG,iEAAiE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrG,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACzC,WAAW,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;YACvF,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,eAAe;IACf,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAC9D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3F,YAAY,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,mBAAmB;IACnB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,YAAY,IAAI,CAAC,EAAE,CAAC;QACxD,QAAQ,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,YAAY,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,YAAY,IAAI,CAAC,EAAE,CAAC;QAC5D,QAAQ,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACrD,YAAY,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC5B,MAAM;QACN,QAAQ;QACR,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC;QACvC,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,eAAe,GAA2B,EAAE,CAAC;IAEnD,qBAAqB;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEjC,8BAA8B;QAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1E,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,+BAA+B;IAE/B,8BAA8B;IAC9B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,UAAU,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,8CAA8C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClF,WAAW,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,MAAM,CAAC;IAC7E,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,+BAA+B,eAAe,8CAA8C,CAAC,CAAC;IAC5G,CAAC;IAED,+BAA+B;IAC/B,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,iBAAiB,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;YACtG,WAAW,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YAChF,MAAM;QACR,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,iBAAiB,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,WAAW,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAC1E,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IAC3F,CAAC;IAED,4BAA4B;IAC5B,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,GAAG,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACnG,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtF,gCAAgC;IAChC,IAAI,cAAc,GAAG,EAAE,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IACjF,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC5B,MAAM;QACN,QAAQ;QACR,eAAe;QACf,cAAc;QACd,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAoB,EAAE,EAAkB;IAC9E,qBAAqB;IACrB,yBAAyB;IACzB,oDAAoD;IACpD,2BAA2B;IAC3B,oCAAoC;IACpC,mDAAmD;IACnD,uDAAuD;IAEvD,MAAM,gBAAgB,GAA6B;QACjD,SAAS,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC;QACvC,aAAa,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;QACvC,WAAW,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,kCAAkC;KAC3E,CAAC;IAEF,OAAO,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAU;IAC5C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAElD,iCAAiC;IACjC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,WAAW,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;IAChH,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,WAAW,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,WAAW,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC9D,CAAC;IAED,sCAAsC;IACtC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,WAAW,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,WAAW,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;IACrG,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,WAAW,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IAMjD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,eAAe,GAAa;QAChC,GAAG,UAAU,CAAC,WAAW;QACzB,GAAG,UAAU,CAAC,eAAe;aAC1B,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;KACpE,CAAC;IAEF,IAAI,OAAO,GAAG,sBAAsB,KAAK,CAAC,MAAM,eAAe,UAAU,CAAC,MAAM,CAAC,MAAM,eAAe,UAAU,CAAC,QAAQ,CAAC,MAAM,YAAY,CAAC;IAE7I,IAAI,UAAU,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;QACpC,OAAO,IAAI,wBAAwB,CAAC;IACtC,CAAC;SAAM,IAAI,UAAU,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;QAC3C,OAAO,IAAI,yCAAyC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,6BAA6B,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,OAAO;QACP,YAAY,EAAE,UAAU,CAAC,cAAc;QACvC,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,wBAAwB;QACvE,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;IACrE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,MAAM,CAAC;IACxE,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;IAEhE,OAAO;QACL,KAAK;QACL,SAAS;QACT,OAAO;QACP,UAAU;QACV,UAAU;QACV,WAAW;KACZ,CAAC;AACJ,CAAC"}
|