saga-mcp 1.4.1 → 1.5.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/README.md +76 -56
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/schema.d.ts +1 -1
- package/dist/schema.js +33 -0
- package/dist/schema.js.map +1 -1
- package/dist/tools/activity.js +5 -0
- package/dist/tools/activity.js.map +1 -1
- package/dist/tools/comments.d.ts +4 -0
- package/dist/tools/comments.js +58 -0
- package/dist/tools/comments.js.map +1 -0
- package/dist/tools/dashboard.js +41 -0
- package/dist/tools/dashboard.js.map +1 -1
- package/dist/tools/export-import.js +45 -7
- package/dist/tools/export-import.js.map +1 -1
- package/dist/tools/tasks.d.ts +2 -0
- package/dist/tools/tasks.js +99 -11
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/templates.d.ts +4 -0
- package/dist/tools/templates.js +150 -0
- package/dist/tools/templates.js.map +1 -0
- package/manifest.json +16 -10
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,14 +7,18 @@ A Jira-like project tracker MCP server for AI agents. SQLite-backed, per-project
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
9
|
- **Full hierarchy**: Projects > Epics > Tasks > Subtasks
|
|
10
|
+
- **Task dependencies**: Express sequencing with auto-block/unblock when deps are met
|
|
11
|
+
- **Comments**: Threaded discussions on tasks — leave breadcrumbs across sessions
|
|
12
|
+
- **Templates**: Reusable task sets with `{variable}` substitution
|
|
13
|
+
- **Dashboard**: One tool call gives full overview with natural language summary
|
|
10
14
|
- **SQLite**: Self-contained `.tracker.db` file per project — zero setup, no external database
|
|
11
15
|
- **Activity log**: Every mutation is automatically tracked with old/new values
|
|
12
|
-
- **Dashboard**: One tool call gives full project overview (stats, blocked tasks, recent changes)
|
|
13
16
|
- **Notes system**: Decisions, context, meeting notes, blockers — all searchable
|
|
14
17
|
- **Batch operations**: Create multiple subtasks or update multiple tasks in one call
|
|
15
|
-
- **
|
|
16
|
-
- **Import/export**: Full project backup and migration as JSON
|
|
18
|
+
- **31 focused tools**: With MCP safety annotations on every tool
|
|
19
|
+
- **Import/export**: Full project backup and migration as JSON (with dependencies and comments)
|
|
17
20
|
- **Source references**: Link tasks to specific code locations
|
|
21
|
+
- **Auto time tracking**: Hours computed automatically from activity log
|
|
18
22
|
- **Cross-platform**: Works on macOS, Windows, and Linux
|
|
19
23
|
|
|
20
24
|
## Quick Start
|
|
@@ -79,7 +83,7 @@ No API keys, no accounts, no external services. Everything is stored locally in
|
|
|
79
83
|
| Tool | Description | Annotations |
|
|
80
84
|
|------|-------------|-------------|
|
|
81
85
|
| `tracker_init` | Initialize tracker and create first project | `readOnly: false`, `idempotent: true` |
|
|
82
|
-
| `tracker_dashboard` | Full project overview
|
|
86
|
+
| `tracker_dashboard` | Full project overview with natural language summary | `readOnly: true` |
|
|
83
87
|
|
|
84
88
|
### Projects
|
|
85
89
|
|
|
@@ -101,10 +105,10 @@ No API keys, no accounts, no external services. Everything is stored locally in
|
|
|
101
105
|
|
|
102
106
|
| Tool | Description | Annotations |
|
|
103
107
|
|------|-------------|-------------|
|
|
104
|
-
| `task_create` | Create a task
|
|
105
|
-
| `task_list` | List/filter tasks
|
|
106
|
-
| `task_get` | Get task with subtasks and
|
|
107
|
-
| `task_update` | Update task (
|
|
108
|
+
| `task_create` | Create a task with optional dependencies | `readOnly: false` |
|
|
109
|
+
| `task_list` | List/filter tasks with dependency info | `readOnly: true` |
|
|
110
|
+
| `task_get` | Get task with subtasks, notes, comments, and dependencies | `readOnly: true` |
|
|
111
|
+
| `task_update` | Update task (auto-logs, auto-blocks/unblocks) | `readOnly: false`, `idempotent: true` |
|
|
108
112
|
| `task_batch_update` | Update multiple tasks at once | `readOnly: false`, `idempotent: true` |
|
|
109
113
|
|
|
110
114
|
### Subtasks
|
|
@@ -115,6 +119,22 @@ No API keys, no accounts, no external services. Everything is stored locally in
|
|
|
115
119
|
| `subtask_update` | Update subtask title/status | `readOnly: false`, `idempotent: true` |
|
|
116
120
|
| `subtask_delete` | Delete subtask(s) — supports batch | `destructive: true`, `idempotent: true` |
|
|
117
121
|
|
|
122
|
+
### Comments
|
|
123
|
+
|
|
124
|
+
| Tool | Description | Annotations |
|
|
125
|
+
|------|-------------|-------------|
|
|
126
|
+
| `comment_add` | Add a comment to a task (threaded discussion) | `readOnly: false` |
|
|
127
|
+
| `comment_list` | List all comments on a task | `readOnly: true` |
|
|
128
|
+
|
|
129
|
+
### Templates
|
|
130
|
+
|
|
131
|
+
| Tool | Description | Annotations |
|
|
132
|
+
|------|-------------|-------------|
|
|
133
|
+
| `template_create` | Create a reusable task template with `{variable}` placeholders | `readOnly: false` |
|
|
134
|
+
| `template_list` | List available templates | `readOnly: true` |
|
|
135
|
+
| `template_apply` | Apply template to create tasks with variable substitution | `readOnly: false` |
|
|
136
|
+
| `template_delete` | Delete a template | `destructive: true`, `idempotent: true` |
|
|
137
|
+
|
|
118
138
|
### Notes
|
|
119
139
|
|
|
120
140
|
| Tool | Description | Annotations |
|
|
@@ -136,12 +156,12 @@ No API keys, no accounts, no external services. Everything is stored locally in
|
|
|
136
156
|
|
|
137
157
|
| Tool | Description | Annotations |
|
|
138
158
|
|------|-------------|-------------|
|
|
139
|
-
| `tracker_export` | Export full project as nested JSON
|
|
159
|
+
| `tracker_export` | Export full project as nested JSON (includes dependencies and comments) | `readOnly: true` |
|
|
140
160
|
| `tracker_import` | Import project from JSON (matching export format) | `readOnly: false` |
|
|
141
161
|
|
|
142
162
|
## Usage Examples
|
|
143
163
|
|
|
144
|
-
### Example 1: Starting a
|
|
164
|
+
### Example 1: Starting a project with dependencies
|
|
145
165
|
|
|
146
166
|
**User prompt:** "Set up tracking for my new e-commerce API project"
|
|
147
167
|
|
|
@@ -149,68 +169,59 @@ No API keys, no accounts, no external services. Everything is stored locally in
|
|
|
149
169
|
```
|
|
150
170
|
tracker_init({ project_name: "E-Commerce API", project_description: "REST API for online store" })
|
|
151
171
|
epic_create({ project_id: 1, name: "Authentication", priority: "high" })
|
|
152
|
-
|
|
153
|
-
task_create({ epic_id: 1, title: "Implement JWT auth", priority: "high" })
|
|
154
|
-
task_create({ epic_id: 1, title: "Add OAuth2 Google login", priority: "medium" })
|
|
155
|
-
subtask_create({ task_id: 1, titles: ["Set up JWT library", "Create login endpoint", "Create refresh endpoint", "Add middleware"] })
|
|
172
|
+
task_create({ epic_id: 1, title: "Design auth schema", priority: "critical" })
|
|
173
|
+
task_create({ epic_id: 1, title: "Implement JWT auth", priority: "high", depends_on: [1] })
|
|
174
|
+
task_create({ epic_id: 1, title: "Add OAuth2 Google login", priority: "medium", depends_on: [2] })
|
|
156
175
|
```
|
|
157
176
|
|
|
158
|
-
**
|
|
159
|
-
|
|
160
|
-
### Example 2: Resuming work on an existing project
|
|
177
|
+
**Result:** Task 2 and 3 are auto-blocked because their dependencies aren't done yet. When task 1 is marked done, task 2 auto-unblocks.
|
|
161
178
|
|
|
162
|
-
|
|
179
|
+
### Example 2: Resuming work with dashboard summary
|
|
163
180
|
|
|
164
181
|
**Tool calls:**
|
|
165
182
|
```
|
|
166
183
|
tracker_dashboard({})
|
|
167
184
|
```
|
|
168
185
|
|
|
169
|
-
**
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
"project": { "id": 1, "name": "E-Commerce API", "status": "active" },
|
|
173
|
-
"stats": {
|
|
174
|
-
"total_epics": 2,
|
|
175
|
-
"total_tasks": 5,
|
|
176
|
-
"tasks_done": 2,
|
|
177
|
-
"tasks_in_progress": 1,
|
|
178
|
-
"tasks_blocked": 1,
|
|
179
|
-
"tasks_todo": 1,
|
|
180
|
-
"completion_pct": 40.0
|
|
181
|
-
},
|
|
182
|
-
"epics": [
|
|
183
|
-
{ "name": "Authentication", "task_count": 3, "done_count": 2, "completion_pct": 66.7 },
|
|
184
|
-
{ "name": "Product Catalog", "task_count": 2, "done_count": 0, "completion_pct": 0 }
|
|
185
|
-
],
|
|
186
|
-
"blocked_tasks": [
|
|
187
|
-
{ "id": 4, "title": "Add rate limiting", "epic_name": "Authentication" }
|
|
188
|
-
],
|
|
189
|
-
"recent_activity": [...],
|
|
190
|
-
"recent_notes": [...]
|
|
191
|
-
}
|
|
186
|
+
**Response includes a natural language summary:**
|
|
187
|
+
```
|
|
188
|
+
"E-Commerce API: 5 tasks across 2 epics. 40% complete. Active: Authentication (2/3 done). Next up: Product Catalog (2 tasks). 1 blocked task(s)."
|
|
192
189
|
```
|
|
193
190
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
### Example 3: Recording a decision and marking tasks done
|
|
191
|
+
Plus the full structured data (stats, epics, blocked tasks, overdue tasks, activity, notes).
|
|
197
192
|
|
|
198
|
-
|
|
193
|
+
### Example 3: Using templates for repeated workflows
|
|
199
194
|
|
|
200
|
-
**
|
|
195
|
+
**Create a template:**
|
|
201
196
|
```
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
197
|
+
template_create({
|
|
198
|
+
name: "feature_workflow",
|
|
199
|
+
description: "Standard feature implementation",
|
|
200
|
+
tasks: [
|
|
201
|
+
{ "title": "Design {feature} API", "priority": "critical", "estimated_hours": 2 },
|
|
202
|
+
{ "title": "Implement {feature}", "priority": "high", "estimated_hours": 8 },
|
|
203
|
+
{ "title": "Write tests for {feature}", "priority": "high", "estimated_hours": 4 },
|
|
204
|
+
{ "title": "Document {feature}", "priority": "medium", "estimated_hours": 1 }
|
|
205
|
+
]
|
|
209
206
|
})
|
|
210
|
-
task_batch_update({ ids: [8, 9], status: "done" })
|
|
211
207
|
```
|
|
212
208
|
|
|
213
|
-
**
|
|
209
|
+
**Apply it:**
|
|
210
|
+
```
|
|
211
|
+
template_apply({ template_id: 1, epic_id: 2, variables: { "feature": "user auth" } })
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Creates 4 tasks: "Design user auth API", "Implement user auth", "Write tests for user auth", "Document user auth".
|
|
215
|
+
|
|
216
|
+
### Example 4: Task comments as decision trail
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
comment_add({ task_id: 5, content: "Investigated root cause: CORS headers missing on preflight" })
|
|
220
|
+
comment_add({ task_id: 5, content: "Fixed by adding OPTIONS handler. Tested with curl." })
|
|
221
|
+
task_update({ id: 5, status: "done" })
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Comments persist across sessions — next time an agent calls `task_get(5)`, it sees the full discussion thread.
|
|
214
225
|
|
|
215
226
|
## How It Works
|
|
216
227
|
|
|
@@ -222,9 +233,18 @@ saga-mcp stores everything in a single SQLite file (`.tracker.db`) per project.
|
|
|
222
233
|
Project
|
|
223
234
|
└── Epic (feature/workstream)
|
|
224
235
|
└── Task (unit of work)
|
|
225
|
-
|
|
236
|
+
├── Subtask (checklist item)
|
|
237
|
+
├── Comment (discussion thread)
|
|
238
|
+
└── Dependencies (blocked by other tasks)
|
|
226
239
|
```
|
|
227
240
|
|
|
241
|
+
### Task Dependencies
|
|
242
|
+
|
|
243
|
+
Tasks can depend on other tasks. When you set `depends_on: [2, 3]` on a task:
|
|
244
|
+
- The task is auto-blocked if any dependency isn't `done`
|
|
245
|
+
- When a dependency is marked `done`, downstream tasks are re-evaluated
|
|
246
|
+
- If all dependencies are met, the blocked task auto-unblocks to `todo`
|
|
247
|
+
|
|
228
248
|
### Note Types
|
|
229
249
|
|
|
230
250
|
Notes replace scattered markdown files. Each note has a type:
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,8 @@ import { definitions as noteDefs, handlers as noteHandlers } from './tools/notes
|
|
|
10
10
|
import { definitions as dashboardDefs, handlers as dashboardHandlers } from './tools/dashboard.js';
|
|
11
11
|
import { definitions as searchDefs, handlers as searchHandlers } from './tools/search.js';
|
|
12
12
|
import { definitions as activityDefs, handlers as activityHandlers } from './tools/activity.js';
|
|
13
|
+
import { definitions as commentDefs, handlers as commentHandlers } from './tools/comments.js';
|
|
14
|
+
import { definitions as templateDefs, handlers as templateHandlers } from './tools/templates.js';
|
|
13
15
|
import { definitions as exportImportDefs, handlers as exportImportHandlers } from './tools/export-import.js';
|
|
14
16
|
import { closeDb } from './db.js';
|
|
15
17
|
const ALL_TOOLS = [
|
|
@@ -18,6 +20,8 @@ const ALL_TOOLS = [
|
|
|
18
20
|
...taskDefs,
|
|
19
21
|
...subtaskDefs,
|
|
20
22
|
...noteDefs,
|
|
23
|
+
...commentDefs,
|
|
24
|
+
...templateDefs,
|
|
21
25
|
...dashboardDefs,
|
|
22
26
|
...searchDefs,
|
|
23
27
|
...activityDefs,
|
|
@@ -29,6 +33,8 @@ const ALL_HANDLERS = {
|
|
|
29
33
|
...taskHandlers,
|
|
30
34
|
...subtaskHandlers,
|
|
31
35
|
...noteHandlers,
|
|
36
|
+
...commentHandlers,
|
|
37
|
+
...templateHandlers,
|
|
32
38
|
...dashboardHandlers,
|
|
33
39
|
...searchHandlers,
|
|
34
40
|
...activityHandlers,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SCHEMA_SQL = "\n-- Core hierarchy: projects > epics > tasks > subtasks\n\nCREATE TABLE IF NOT EXISTS projects (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'active'\n CHECK (status IN ('active', 'on_hold', 'completed', 'archived')),\n tags TEXT NOT NULL DEFAULT '[]',\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS epics (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id INTEGER NOT NULL REFERENCES projects(id) ON DELETE CASCADE,\n name TEXT NOT NULL,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'planned'\n CHECK (status IN ('planned', 'in_progress', 'completed', 'cancelled')),\n priority TEXT NOT NULL DEFAULT 'medium'\n CHECK (priority IN ('low', 'medium', 'high', 'critical')),\n sort_order INTEGER NOT NULL DEFAULT 0,\n tags TEXT NOT NULL DEFAULT '[]',\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS tasks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n epic_id INTEGER NOT NULL REFERENCES epics(id) ON DELETE CASCADE,\n title TEXT NOT NULL,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'todo'\n CHECK (status IN ('todo', 'in_progress', 'review', 'done', 'blocked')),\n priority TEXT NOT NULL DEFAULT 'medium'\n CHECK (priority IN ('low', 'medium', 'high', 'critical')),\n sort_order INTEGER NOT NULL DEFAULT 0,\n assigned_to TEXT,\n estimated_hours REAL,\n actual_hours REAL,\n due_date TEXT,\n source_ref TEXT,\n tags TEXT NOT NULL DEFAULT '[]',\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS subtasks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,\n title TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'todo'\n CHECK (status IN ('todo', 'in_progress', 'done')),\n sort_order INTEGER NOT NULL DEFAULT 0,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Unified notes (replaces summaries + status_updates + context)\n\nCREATE TABLE IF NOT EXISTS notes (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n title TEXT NOT NULL,\n content TEXT NOT NULL,\n note_type TEXT NOT NULL DEFAULT 'general'\n CHECK (note_type IN (\n 'general', 'decision', 'context', 'meeting',\n 'technical', 'blocker', 'progress', 'release'\n )),\n related_entity_type TEXT CHECK (related_entity_type IN ('project', 'epic', 'task') OR related_entity_type IS NULL),\n related_entity_id INTEGER,\n tags TEXT NOT NULL DEFAULT '[]',\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Automatic activity log\n\nCREATE TABLE IF NOT EXISTS activity_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n entity_type TEXT NOT NULL,\n entity_id INTEGER NOT NULL,\n action TEXT NOT NULL,\n field_name TEXT,\n old_value TEXT,\n new_value TEXT,\n summary TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Indexes\n\nCREATE INDEX IF NOT EXISTS idx_epics_project_id ON epics(project_id);\nCREATE INDEX IF NOT EXISTS idx_tasks_epic_id ON tasks(epic_id);\nCREATE INDEX IF NOT EXISTS idx_subtasks_task_id ON subtasks(task_id);\n\nCREATE INDEX IF NOT EXISTS idx_projects_status ON projects(status);\nCREATE INDEX IF NOT EXISTS idx_epics_status ON epics(status);\nCREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);\nCREATE INDEX IF NOT EXISTS idx_subtasks_status ON subtasks(status);\n\nCREATE INDEX IF NOT EXISTS idx_epics_priority ON epics(priority);\nCREATE INDEX IF NOT EXISTS idx_tasks_priority ON tasks(priority);\n\nCREATE INDEX IF NOT EXISTS idx_epics_sort ON epics(project_id, sort_order);\nCREATE INDEX IF NOT EXISTS idx_tasks_sort ON tasks(epic_id, sort_order);\nCREATE INDEX IF NOT EXISTS idx_subtasks_sort ON subtasks(task_id, sort_order);\n\nCREATE INDEX IF NOT EXISTS idx_notes_type ON notes(note_type);\nCREATE INDEX IF NOT EXISTS idx_notes_entity ON notes(related_entity_type, related_entity_id);\nCREATE INDEX IF NOT EXISTS idx_notes_created ON notes(created_at DESC);\n\nCREATE INDEX IF NOT EXISTS idx_activity_entity ON activity_log(entity_type, entity_id);\nCREATE INDEX IF NOT EXISTS idx_activity_created ON activity_log(created_at DESC);\nCREATE INDEX IF NOT EXISTS idx_activity_action ON activity_log(action);\n\nCREATE INDEX IF NOT EXISTS idx_tasks_assigned ON tasks(assigned_to);\nCREATE INDEX IF NOT EXISTS idx_tasks_due ON tasks(due_date);\n";
|
|
1
|
+
export declare const SCHEMA_SQL = "\n-- Core hierarchy: projects > epics > tasks > subtasks\n\nCREATE TABLE IF NOT EXISTS projects (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'active'\n CHECK (status IN ('active', 'on_hold', 'completed', 'archived')),\n tags TEXT NOT NULL DEFAULT '[]',\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS epics (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id INTEGER NOT NULL REFERENCES projects(id) ON DELETE CASCADE,\n name TEXT NOT NULL,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'planned'\n CHECK (status IN ('planned', 'in_progress', 'completed', 'cancelled')),\n priority TEXT NOT NULL DEFAULT 'medium'\n CHECK (priority IN ('low', 'medium', 'high', 'critical')),\n sort_order INTEGER NOT NULL DEFAULT 0,\n tags TEXT NOT NULL DEFAULT '[]',\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS tasks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n epic_id INTEGER NOT NULL REFERENCES epics(id) ON DELETE CASCADE,\n title TEXT NOT NULL,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'todo'\n CHECK (status IN ('todo', 'in_progress', 'review', 'done', 'blocked')),\n priority TEXT NOT NULL DEFAULT 'medium'\n CHECK (priority IN ('low', 'medium', 'high', 'critical')),\n sort_order INTEGER NOT NULL DEFAULT 0,\n assigned_to TEXT,\n estimated_hours REAL,\n actual_hours REAL,\n due_date TEXT,\n source_ref TEXT,\n tags TEXT NOT NULL DEFAULT '[]',\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS subtasks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,\n title TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'todo'\n CHECK (status IN ('todo', 'in_progress', 'done')),\n sort_order INTEGER NOT NULL DEFAULT 0,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Task dependencies (junction table)\n\nCREATE TABLE IF NOT EXISTS task_dependencies (\n task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,\n depends_on_task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n PRIMARY KEY (task_id, depends_on_task_id)\n);\n\n-- Comments (threaded discussions on tasks)\n\nCREATE TABLE IF NOT EXISTS comments (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,\n author TEXT,\n content TEXT NOT NULL,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Task templates\n\nCREATE TABLE IF NOT EXISTS templates (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n description TEXT,\n template_data TEXT NOT NULL DEFAULT '[]',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Unified notes (replaces summaries + status_updates + context)\n\nCREATE TABLE IF NOT EXISTS notes (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n title TEXT NOT NULL,\n content TEXT NOT NULL,\n note_type TEXT NOT NULL DEFAULT 'general'\n CHECK (note_type IN (\n 'general', 'decision', 'context', 'meeting',\n 'technical', 'blocker', 'progress', 'release'\n )),\n related_entity_type TEXT CHECK (related_entity_type IN ('project', 'epic', 'task') OR related_entity_type IS NULL),\n related_entity_id INTEGER,\n tags TEXT NOT NULL DEFAULT '[]',\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Automatic activity log\n\nCREATE TABLE IF NOT EXISTS activity_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n entity_type TEXT NOT NULL,\n entity_id INTEGER NOT NULL,\n action TEXT NOT NULL,\n field_name TEXT,\n old_value TEXT,\n new_value TEXT,\n summary TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Indexes\n\nCREATE INDEX IF NOT EXISTS idx_epics_project_id ON epics(project_id);\nCREATE INDEX IF NOT EXISTS idx_tasks_epic_id ON tasks(epic_id);\nCREATE INDEX IF NOT EXISTS idx_subtasks_task_id ON subtasks(task_id);\n\nCREATE INDEX IF NOT EXISTS idx_projects_status ON projects(status);\nCREATE INDEX IF NOT EXISTS idx_epics_status ON epics(status);\nCREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);\nCREATE INDEX IF NOT EXISTS idx_subtasks_status ON subtasks(status);\n\nCREATE INDEX IF NOT EXISTS idx_epics_priority ON epics(priority);\nCREATE INDEX IF NOT EXISTS idx_tasks_priority ON tasks(priority);\n\nCREATE INDEX IF NOT EXISTS idx_epics_sort ON epics(project_id, sort_order);\nCREATE INDEX IF NOT EXISTS idx_tasks_sort ON tasks(epic_id, sort_order);\nCREATE INDEX IF NOT EXISTS idx_subtasks_sort ON subtasks(task_id, sort_order);\n\nCREATE INDEX IF NOT EXISTS idx_notes_type ON notes(note_type);\nCREATE INDEX IF NOT EXISTS idx_notes_entity ON notes(related_entity_type, related_entity_id);\nCREATE INDEX IF NOT EXISTS idx_notes_created ON notes(created_at DESC);\n\nCREATE INDEX IF NOT EXISTS idx_activity_entity ON activity_log(entity_type, entity_id);\nCREATE INDEX IF NOT EXISTS idx_activity_created ON activity_log(created_at DESC);\nCREATE INDEX IF NOT EXISTS idx_activity_action ON activity_log(action);\n\nCREATE INDEX IF NOT EXISTS idx_tasks_assigned ON tasks(assigned_to);\nCREATE INDEX IF NOT EXISTS idx_tasks_due ON tasks(due_date);\n\nCREATE INDEX IF NOT EXISTS idx_task_deps_depends ON task_dependencies(depends_on_task_id);\nCREATE INDEX IF NOT EXISTS idx_comments_task ON comments(task_id);\n";
|
package/dist/schema.js
CHANGED
|
@@ -61,6 +61,36 @@ CREATE TABLE IF NOT EXISTS subtasks (
|
|
|
61
61
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
62
62
|
);
|
|
63
63
|
|
|
64
|
+
-- Task dependencies (junction table)
|
|
65
|
+
|
|
66
|
+
CREATE TABLE IF NOT EXISTS task_dependencies (
|
|
67
|
+
task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
68
|
+
depends_on_task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
69
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
70
|
+
PRIMARY KEY (task_id, depends_on_task_id)
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
-- Comments (threaded discussions on tasks)
|
|
74
|
+
|
|
75
|
+
CREATE TABLE IF NOT EXISTS comments (
|
|
76
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
77
|
+
task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
78
|
+
author TEXT,
|
|
79
|
+
content TEXT NOT NULL,
|
|
80
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
-- Task templates
|
|
84
|
+
|
|
85
|
+
CREATE TABLE IF NOT EXISTS templates (
|
|
86
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
87
|
+
name TEXT NOT NULL UNIQUE,
|
|
88
|
+
description TEXT,
|
|
89
|
+
template_data TEXT NOT NULL DEFAULT '[]',
|
|
90
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
91
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
92
|
+
);
|
|
93
|
+
|
|
64
94
|
-- Unified notes (replaces summaries + status_updates + context)
|
|
65
95
|
|
|
66
96
|
CREATE TABLE IF NOT EXISTS notes (
|
|
@@ -122,5 +152,8 @@ CREATE INDEX IF NOT EXISTS idx_activity_action ON activity_log(action);
|
|
|
122
152
|
|
|
123
153
|
CREATE INDEX IF NOT EXISTS idx_tasks_assigned ON tasks(assigned_to);
|
|
124
154
|
CREATE INDEX IF NOT EXISTS idx_tasks_due ON tasks(due_date);
|
|
155
|
+
|
|
156
|
+
CREATE INDEX IF NOT EXISTS idx_task_deps_depends ON task_dependencies(depends_on_task_id);
|
|
157
|
+
CREATE INDEX IF NOT EXISTS idx_comments_task ON comments(task_id);
|
|
125
158
|
`;
|
|
126
159
|
//# sourceMappingURL=schema.js.map
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6JzB,CAAC"}
|
package/dist/tools/activity.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getDb } from '../db.js';
|
|
2
2
|
import { logActivity } from '../helpers/activity-logger.js';
|
|
3
|
+
import { reevaluateDownstream } from './tasks.js';
|
|
3
4
|
export const definitions = [
|
|
4
5
|
{
|
|
5
6
|
name: 'activity_log',
|
|
@@ -183,6 +184,10 @@ function handleTaskBatchUpdate(args) {
|
|
|
183
184
|
}
|
|
184
185
|
}
|
|
185
186
|
}
|
|
187
|
+
// Re-evaluate downstream dependencies when task marked done
|
|
188
|
+
if (status === 'done' && oldRow.status !== 'done') {
|
|
189
|
+
reevaluateDownstream(db, id);
|
|
190
|
+
}
|
|
186
191
|
return newRow;
|
|
187
192
|
});
|
|
188
193
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/tools/activity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/tools/activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { getDb } from '../db.js';
|
|
2
|
+
import { logActivity } from '../helpers/activity-logger.js';
|
|
3
|
+
export const definitions = [
|
|
4
|
+
{
|
|
5
|
+
name: 'comment_add',
|
|
6
|
+
description: 'Add a comment to a task. Comments create a chronological discussion thread — useful for leaving breadcrumbs across sessions.',
|
|
7
|
+
annotations: { title: 'Add Comment', readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
task_id: { type: 'integer', description: 'Task ID to comment on' },
|
|
12
|
+
content: { type: 'string', description: 'Comment text' },
|
|
13
|
+
author: { type: 'string', description: 'Author name (optional)' },
|
|
14
|
+
},
|
|
15
|
+
required: ['task_id', 'content'],
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'comment_list',
|
|
20
|
+
description: 'List all comments on a task in chronological order.',
|
|
21
|
+
annotations: { title: 'List Comments', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
22
|
+
inputSchema: {
|
|
23
|
+
type: 'object',
|
|
24
|
+
properties: {
|
|
25
|
+
task_id: { type: 'integer', description: 'Task ID' },
|
|
26
|
+
},
|
|
27
|
+
required: ['task_id'],
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
function handleCommentAdd(args) {
|
|
32
|
+
const db = getDb();
|
|
33
|
+
const taskId = args.task_id;
|
|
34
|
+
const content = args.content;
|
|
35
|
+
const author = args.author ?? null;
|
|
36
|
+
// Verify task exists
|
|
37
|
+
const task = db.prepare('SELECT id, title FROM tasks WHERE id = ?').get(taskId);
|
|
38
|
+
if (!task)
|
|
39
|
+
throw new Error(`Task ${taskId} not found`);
|
|
40
|
+
const comment = db
|
|
41
|
+
.prepare('INSERT INTO comments (task_id, author, content) VALUES (?, ?, ?) RETURNING *')
|
|
42
|
+
.get(taskId, author, content);
|
|
43
|
+
const row = comment;
|
|
44
|
+
logActivity(db, 'comment', row.id, 'created', null, null, null, `Comment added to task '${task.title}'${author ? ` by ${author}` : ''}`);
|
|
45
|
+
return comment;
|
|
46
|
+
}
|
|
47
|
+
function handleCommentList(args) {
|
|
48
|
+
const db = getDb();
|
|
49
|
+
const taskId = args.task_id;
|
|
50
|
+
return db
|
|
51
|
+
.prepare('SELECT * FROM comments WHERE task_id = ? ORDER BY created_at ASC')
|
|
52
|
+
.all(taskId);
|
|
53
|
+
}
|
|
54
|
+
export const handlers = {
|
|
55
|
+
comment_add: handleCommentAdd,
|
|
56
|
+
comment_list: handleCommentList,
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=comments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAG5D,MAAM,CAAC,MAAM,WAAW,GAAW;IACjC;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,8HAA8H;QAChI,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE;QAC/H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uBAAuB,EAAE;gBAClE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;gBACxD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;aAClE;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;SACjC;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,qDAAqD;QAClE,WAAW,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;QAC/H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;aACrD;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;CACF,CAAC;AAEF,SAAS,gBAAgB,CAAC,IAA6B;IACrD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAiB,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,MAAM,GAAI,IAAI,CAAC,MAAiB,IAAI,IAAI,CAAC;IAE/C,qBAAqB;IACrB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,CAAC,MAAM,CAA8C,CAAC;IAC7H,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,YAAY,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CAAC,8EAA8E,CAAC;SACvF,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAY,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,0BAA0B,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAA6B;IACtD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAiB,CAAC;IAEtC,OAAO,EAAE;SACN,OAAO,CAAC,kEAAkE,CAAC;SAC3E,GAAG,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAgC;IACnD,WAAW,EAAE,gBAAgB;IAC7B,YAAY,EAAE,iBAAiB;CAChC,CAAC"}
|
package/dist/tools/dashboard.js
CHANGED
|
@@ -96,6 +96,15 @@ function handleDashboard(args) {
|
|
|
96
96
|
CASE t.priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 ELSE 3 END
|
|
97
97
|
`)
|
|
98
98
|
.all(projectId);
|
|
99
|
+
// Overdue tasks
|
|
100
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
101
|
+
const overdueTasks = db
|
|
102
|
+
.prepare(`SELECT t.id, t.title, t.due_date, t.priority, e.name as epic_name
|
|
103
|
+
FROM tasks t
|
|
104
|
+
JOIN epics e ON e.id = t.epic_id
|
|
105
|
+
WHERE e.project_id = ? AND t.due_date < ? AND t.status NOT IN ('done')
|
|
106
|
+
ORDER BY t.due_date ASC`)
|
|
107
|
+
.all(projectId, today);
|
|
99
108
|
// Recent activity (last 10)
|
|
100
109
|
const recentActivity = db
|
|
101
110
|
.prepare('SELECT summary, action, entity_type, entity_id, created_at FROM activity_log ORDER BY created_at DESC LIMIT 10')
|
|
@@ -104,11 +113,43 @@ function handleDashboard(args) {
|
|
|
104
113
|
const recentNotes = db
|
|
105
114
|
.prepare('SELECT id, title, note_type, created_at FROM notes ORDER BY created_at DESC LIMIT 5')
|
|
106
115
|
.all();
|
|
116
|
+
// Generate natural language summary
|
|
117
|
+
const s = stats;
|
|
118
|
+
const p = project;
|
|
119
|
+
const epicList = epics;
|
|
120
|
+
const summaryParts = [];
|
|
121
|
+
summaryParts.push(`${p.name}: ${s.total_tasks} tasks across ${s.total_epics} epics. ${s.completion_pct}% complete.`);
|
|
122
|
+
const activeEpics = epicList.filter((e) => e.status === 'in_progress');
|
|
123
|
+
if (activeEpics.length > 0) {
|
|
124
|
+
const activeStr = activeEpics
|
|
125
|
+
.map((e) => `${e.name} (${e.done_count}/${e.task_count} done)`)
|
|
126
|
+
.join(', ');
|
|
127
|
+
summaryParts.push(`Active: ${activeStr}.`);
|
|
128
|
+
}
|
|
129
|
+
const nextEpic = epicList.find((e) => e.status === 'planned');
|
|
130
|
+
if (nextEpic) {
|
|
131
|
+
summaryParts.push(`Next up: ${nextEpic.name} (${nextEpic.task_count} tasks).`);
|
|
132
|
+
}
|
|
133
|
+
if (s.tasks_blocked > 0) {
|
|
134
|
+
summaryParts.push(`${s.tasks_blocked} blocked task(s).`);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
summaryParts.push('No blocked tasks.');
|
|
138
|
+
}
|
|
139
|
+
if (overdueTasks.length > 0) {
|
|
140
|
+
summaryParts.push(`${overdueTasks.length} overdue task(s).`);
|
|
141
|
+
}
|
|
142
|
+
if (s.tasks_in_progress > 0) {
|
|
143
|
+
summaryParts.push(`${s.tasks_in_progress} in progress.`);
|
|
144
|
+
}
|
|
145
|
+
const summary = summaryParts.join(' ');
|
|
107
146
|
return {
|
|
147
|
+
summary,
|
|
108
148
|
project,
|
|
109
149
|
stats,
|
|
110
150
|
epics,
|
|
111
151
|
blocked_tasks: blockedTasks,
|
|
152
|
+
overdue_tasks: overdueTasks,
|
|
112
153
|
recent_activity: recentActivity,
|
|
113
154
|
recent_notes: recentNotes,
|
|
114
155
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { logActivity } from '../helpers/activity-logger.js';
|
|
|
3
3
|
export const definitions = [
|
|
4
4
|
{
|
|
5
5
|
name: 'tracker_export',
|
|
6
|
-
description: 'Export a full project as nested JSON. Includes all epics, tasks, subtasks, and related notes. Useful for backup, migration, or sharing.',
|
|
6
|
+
description: 'Export a full project as nested JSON. Includes all epics, tasks, subtasks, comments, dependencies, and related notes. Useful for backup, migration, or sharing.',
|
|
7
7
|
annotations: { title: 'Export Project', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
8
8
|
inputSchema: {
|
|
9
9
|
type: 'object',
|
|
@@ -49,8 +49,13 @@ function handleExport(args) {
|
|
|
49
49
|
const tasks = db.prepare('SELECT * FROM tasks WHERE epic_id = ? ORDER BY sort_order, created_at')
|
|
50
50
|
.all(epic.id);
|
|
51
51
|
const taskData = tasks.map((task) => {
|
|
52
|
+
const taskId = task.id;
|
|
52
53
|
const subtasks = db.prepare('SELECT * FROM subtasks WHERE task_id = ? ORDER BY sort_order, created_at')
|
|
53
|
-
.all(
|
|
54
|
+
.all(taskId);
|
|
55
|
+
const comments = db.prepare('SELECT * FROM comments WHERE task_id = ? ORDER BY created_at ASC')
|
|
56
|
+
.all(taskId);
|
|
57
|
+
const deps = db.prepare('SELECT depends_on_task_id FROM task_dependencies WHERE task_id = ?')
|
|
58
|
+
.all(taskId);
|
|
54
59
|
return {
|
|
55
60
|
_original_id: task.id,
|
|
56
61
|
title: task.title,
|
|
@@ -65,11 +70,17 @@ function handleExport(args) {
|
|
|
65
70
|
source_ref: task.source_ref,
|
|
66
71
|
tags: task.tags,
|
|
67
72
|
metadata: task.metadata,
|
|
73
|
+
depends_on: deps.map((d) => d.depends_on_task_id),
|
|
68
74
|
subtasks: subtasks.map((s) => ({
|
|
69
75
|
title: s.title,
|
|
70
76
|
status: s.status,
|
|
71
77
|
sort_order: s.sort_order,
|
|
72
78
|
})),
|
|
79
|
+
comments: comments.map((c) => ({
|
|
80
|
+
author: c.author,
|
|
81
|
+
content: c.content,
|
|
82
|
+
created_at: c.created_at,
|
|
83
|
+
})),
|
|
73
84
|
};
|
|
74
85
|
});
|
|
75
86
|
return {
|
|
@@ -114,7 +125,7 @@ function handleExport(args) {
|
|
|
114
125
|
metadata: n.metadata,
|
|
115
126
|
}));
|
|
116
127
|
return {
|
|
117
|
-
format_version: '1.
|
|
128
|
+
format_version: '1.1',
|
|
118
129
|
exported_at: new Date().toISOString(),
|
|
119
130
|
project: {
|
|
120
131
|
name: project.name,
|
|
@@ -130,8 +141,9 @@ function handleExport(args) {
|
|
|
130
141
|
function handleImport(args) {
|
|
131
142
|
const db = getDb();
|
|
132
143
|
const data = args.data;
|
|
133
|
-
|
|
134
|
-
|
|
144
|
+
const version = data.format_version;
|
|
145
|
+
if (version !== '1.0' && version !== '1.1') {
|
|
146
|
+
throw new Error(`Unsupported format version: ${version}. Expected "1.0" or "1.1".`);
|
|
135
147
|
}
|
|
136
148
|
const projectData = data.project;
|
|
137
149
|
if (!projectData || !projectData.name) {
|
|
@@ -149,6 +161,10 @@ function handleImport(args) {
|
|
|
149
161
|
let epicCount = 0;
|
|
150
162
|
let taskCount = 0;
|
|
151
163
|
let subtaskCount = 0;
|
|
164
|
+
let commentCount = 0;
|
|
165
|
+
let depCount = 0;
|
|
166
|
+
// Collect deferred dependencies (need all tasks created first)
|
|
167
|
+
const deferredDeps = [];
|
|
152
168
|
for (const epicData of epics) {
|
|
153
169
|
const epic = db.prepare(`INSERT INTO epics (project_id, name, description, status, priority, sort_order, tags, metadata)
|
|
154
170
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING *`).get(newProjectId, epicData.name, epicData.description ?? null, epicData.status ?? 'planned', epicData.priority ?? 'medium', epicData.sort_order ?? 0, epicData.tags ?? '[]', epicData.metadata ?? '{}');
|
|
@@ -170,6 +186,11 @@ function handleImport(args) {
|
|
|
170
186
|
}
|
|
171
187
|
taskCount++;
|
|
172
188
|
logActivity(db, 'task', newTaskId, 'created', null, null, null, `Task '${taskData.title}' imported`);
|
|
189
|
+
// Defer dependency creation
|
|
190
|
+
const originalDeps = taskData.depends_on ?? [];
|
|
191
|
+
if (originalDeps.length > 0) {
|
|
192
|
+
deferredDeps.push({ newTaskId, originalDeps });
|
|
193
|
+
}
|
|
173
194
|
// 4. Create subtasks
|
|
174
195
|
const subtasks = taskData.subtasks ?? [];
|
|
175
196
|
for (const subtaskData of subtasks) {
|
|
@@ -177,9 +198,26 @@ function handleImport(args) {
|
|
|
177
198
|
subtaskCount++;
|
|
178
199
|
logActivity(db, 'subtask', subtask.id, 'created', null, null, null, `Subtask '${subtaskData.title}' imported`);
|
|
179
200
|
}
|
|
201
|
+
// 5. Create comments
|
|
202
|
+
const comments = taskData.comments ?? [];
|
|
203
|
+
for (const commentData of comments) {
|
|
204
|
+
db.prepare('INSERT INTO comments (task_id, author, content) VALUES (?, ?, ?)').run(newTaskId, commentData.author ?? null, commentData.content);
|
|
205
|
+
commentCount++;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// 6. Create dependencies with ID remapping
|
|
210
|
+
const depInsert = db.prepare('INSERT INTO task_dependencies (task_id, depends_on_task_id) VALUES (?, ?)');
|
|
211
|
+
for (const { newTaskId, originalDeps } of deferredDeps) {
|
|
212
|
+
for (const origDepId of originalDeps) {
|
|
213
|
+
const newDepId = taskIdMap.get(origDepId);
|
|
214
|
+
if (newDepId != null) {
|
|
215
|
+
depInsert.run(newTaskId, newDepId);
|
|
216
|
+
depCount++;
|
|
217
|
+
}
|
|
180
218
|
}
|
|
181
219
|
}
|
|
182
|
-
//
|
|
220
|
+
// 7. Create notes with ID remapping
|
|
183
221
|
const importNotes = data.notes ?? [];
|
|
184
222
|
let noteCount = 0;
|
|
185
223
|
for (const noteData of importNotes) {
|
|
@@ -210,7 +248,7 @@ function handleImport(args) {
|
|
|
210
248
|
message: 'Import complete.',
|
|
211
249
|
project_id: newProjectId,
|
|
212
250
|
project_name: projectData.name,
|
|
213
|
-
counts: { epics: epicCount, tasks: taskCount, subtasks: subtaskCount, notes: noteCount },
|
|
251
|
+
counts: { epics: epicCount, tasks: taskCount, subtasks: subtaskCount, comments: commentCount, dependencies: depCount, notes: noteCount },
|
|
214
252
|
};
|
|
215
253
|
})();
|
|
216
254
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../src/tools/export-import.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../src/tools/export-import.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/tasks.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type Database from 'better-sqlite3';
|
|
2
3
|
import type { ToolHandler } from '../types.js';
|
|
3
4
|
export declare const definitions: Tool[];
|
|
5
|
+
export declare function reevaluateDownstream(db: Database.Database, completedTaskId: number): void;
|
|
4
6
|
export declare const handlers: Record<string, ToolHandler>;
|
package/dist/tools/tasks.js
CHANGED
|
@@ -37,6 +37,7 @@ export const definitions = [
|
|
|
37
37
|
},
|
|
38
38
|
required: ['file'],
|
|
39
39
|
},
|
|
40
|
+
depends_on: { type: 'array', items: { type: 'integer' }, description: 'Task IDs this task depends on' },
|
|
40
41
|
tags: { type: 'array', items: { type: 'string' } },
|
|
41
42
|
},
|
|
42
43
|
required: ['epic_id', 'title'],
|
|
@@ -44,7 +45,7 @@ export const definitions = [
|
|
|
44
45
|
},
|
|
45
46
|
{
|
|
46
47
|
name: 'task_list',
|
|
47
|
-
description: 'List tasks with optional filters. If no epic_id given, lists across ALL epics. Includes subtask counts.',
|
|
48
|
+
description: 'List tasks with optional filters. If no epic_id given, lists across ALL epics. Includes subtask counts and dependency info.',
|
|
48
49
|
annotations: { title: 'List Tasks', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
49
50
|
inputSchema: {
|
|
50
51
|
type: 'object',
|
|
@@ -66,7 +67,7 @@ export const definitions = [
|
|
|
66
67
|
},
|
|
67
68
|
{
|
|
68
69
|
name: 'task_get',
|
|
69
|
-
description: 'Get a single task with full details including all subtasks
|
|
70
|
+
description: 'Get a single task with full details including all subtasks, related notes, comments, and dependencies.',
|
|
70
71
|
annotations: { title: 'Get Task', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
71
72
|
inputSchema: {
|
|
72
73
|
type: 'object',
|
|
@@ -104,6 +105,7 @@ export const definitions = [
|
|
|
104
105
|
},
|
|
105
106
|
required: ['file'],
|
|
106
107
|
},
|
|
108
|
+
depends_on: { type: 'array', items: { type: 'integer' }, description: 'Task IDs this task depends on (replaces existing)' },
|
|
107
109
|
sort_order: { type: 'integer' },
|
|
108
110
|
tags: { type: 'array', items: { type: 'string' } },
|
|
109
111
|
},
|
|
@@ -111,6 +113,45 @@ export const definitions = [
|
|
|
111
113
|
},
|
|
112
114
|
},
|
|
113
115
|
];
|
|
116
|
+
// --- Dependency helpers ---
|
|
117
|
+
function setDependencies(db, taskId, dependsOn) {
|
|
118
|
+
db.prepare('DELETE FROM task_dependencies WHERE task_id = ?').run(taskId);
|
|
119
|
+
const insert = db.prepare('INSERT INTO task_dependencies (task_id, depends_on_task_id) VALUES (?, ?)');
|
|
120
|
+
for (const depId of dependsOn) {
|
|
121
|
+
if (depId === taskId)
|
|
122
|
+
continue; // prevent self-dependency
|
|
123
|
+
insert.run(taskId, depId);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function getUnmetDependencies(db, taskId) {
|
|
127
|
+
return db.prepare(`SELECT t.id, t.title, t.status FROM task_dependencies d
|
|
128
|
+
JOIN tasks t ON t.id = d.depends_on_task_id
|
|
129
|
+
WHERE d.task_id = ? AND t.status != 'done'`).all(taskId);
|
|
130
|
+
}
|
|
131
|
+
function evaluateAndUpdateDependencies(db, taskId) {
|
|
132
|
+
const task = db.prepare('SELECT id, status, title FROM tasks WHERE id = ?').get(taskId);
|
|
133
|
+
if (!task)
|
|
134
|
+
return;
|
|
135
|
+
const deps = db.prepare('SELECT depends_on_task_id FROM task_dependencies WHERE task_id = ?').all(taskId);
|
|
136
|
+
if (deps.length === 0)
|
|
137
|
+
return;
|
|
138
|
+
const unmet = getUnmetDependencies(db, taskId);
|
|
139
|
+
if (unmet.length > 0 && task.status !== 'blocked' && task.status !== 'done') {
|
|
140
|
+
db.prepare("UPDATE tasks SET status = 'blocked', updated_at = datetime('now') WHERE id = ?").run(taskId);
|
|
141
|
+
logActivity(db, 'task', taskId, 'status_changed', 'status', task.status, 'blocked', `Task '${task.title}' auto-blocked: depends on ${unmet.map(u => `#${u.id}`).join(', ')}`);
|
|
142
|
+
}
|
|
143
|
+
else if (unmet.length === 0 && task.status === 'blocked') {
|
|
144
|
+
db.prepare("UPDATE tasks SET status = 'todo', updated_at = datetime('now') WHERE id = ?").run(taskId);
|
|
145
|
+
logActivity(db, 'task', taskId, 'status_changed', 'status', 'blocked', 'todo', `Task '${task.title}' auto-unblocked: all dependencies met`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
export function reevaluateDownstream(db, completedTaskId) {
|
|
149
|
+
const downstream = db.prepare('SELECT task_id FROM task_dependencies WHERE depends_on_task_id = ?').all(completedTaskId);
|
|
150
|
+
for (const row of downstream) {
|
|
151
|
+
evaluateAndUpdateDependencies(db, row.task_id);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// --- Handlers ---
|
|
114
155
|
function handleTaskCreate(args) {
|
|
115
156
|
const db = getDb();
|
|
116
157
|
const epicId = args.epic_id;
|
|
@@ -123,12 +164,20 @@ function handleTaskCreate(args) {
|
|
|
123
164
|
const dueDate = args.due_date ?? null;
|
|
124
165
|
const sourceRef = args.source_ref ? JSON.stringify(args.source_ref) : null;
|
|
125
166
|
const tags = JSON.stringify(args.tags ?? []);
|
|
167
|
+
const dependsOn = args.depends_on ?? [];
|
|
126
168
|
const task = db
|
|
127
169
|
.prepare(`INSERT INTO tasks (epic_id, title, description, status, priority, assigned_to, estimated_hours, due_date, source_ref, tags)
|
|
128
170
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING *`)
|
|
129
171
|
.get(epicId, title, description, status, priority, assignedTo, estimatedHours, dueDate, sourceRef, tags);
|
|
130
172
|
const row = task;
|
|
131
|
-
|
|
173
|
+
const taskId = row.id;
|
|
174
|
+
logActivity(db, 'task', taskId, 'created', null, null, null, `Task '${title}' created`);
|
|
175
|
+
if (dependsOn.length > 0) {
|
|
176
|
+
setDependencies(db, taskId, dependsOn);
|
|
177
|
+
evaluateAndUpdateDependencies(db, taskId);
|
|
178
|
+
// Re-fetch to get potentially updated status
|
|
179
|
+
return db.prepare('SELECT * FROM tasks WHERE id = ?').get(taskId);
|
|
180
|
+
}
|
|
132
181
|
return task;
|
|
133
182
|
}
|
|
134
183
|
const PRIORITY_ORDER = "CASE t.priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END";
|
|
@@ -181,8 +230,11 @@ function handleTaskList(args) {
|
|
|
181
230
|
const sql = `
|
|
182
231
|
SELECT t.*,
|
|
183
232
|
e.name as epic_name,
|
|
184
|
-
COUNT(s.id) as subtask_count,
|
|
185
|
-
SUM(CASE WHEN s.status = 'done' THEN 1 ELSE 0 END) as subtask_done_count
|
|
233
|
+
COUNT(DISTINCT s.id) as subtask_count,
|
|
234
|
+
SUM(CASE WHEN s.status = 'done' THEN 1 ELSE 0 END) as subtask_done_count,
|
|
235
|
+
(SELECT COUNT(*) FROM task_dependencies d
|
|
236
|
+
JOIN tasks dt ON dt.id = d.depends_on_task_id AND dt.status != 'done'
|
|
237
|
+
WHERE d.task_id = t.id) as blocked_by_count
|
|
186
238
|
FROM tasks t
|
|
187
239
|
JOIN epics e ON e.id = t.epic_id
|
|
188
240
|
LEFT JOIN subtasks s ON s.task_id = t.id
|
|
@@ -213,7 +265,22 @@ function handleTaskGet(args) {
|
|
|
213
265
|
WHERE related_entity_type = 'task' AND related_entity_id = ?
|
|
214
266
|
ORDER BY created_at DESC`)
|
|
215
267
|
.all(id);
|
|
216
|
-
|
|
268
|
+
const comments = db
|
|
269
|
+
.prepare('SELECT * FROM comments WHERE task_id = ? ORDER BY created_at ASC')
|
|
270
|
+
.all(id);
|
|
271
|
+
// Dependencies: what this task depends on
|
|
272
|
+
const dependsOn = db
|
|
273
|
+
.prepare(`SELECT t.id, t.title, t.status FROM task_dependencies d
|
|
274
|
+
JOIN tasks t ON t.id = d.depends_on_task_id
|
|
275
|
+
WHERE d.task_id = ?`)
|
|
276
|
+
.all(id);
|
|
277
|
+
// Dependents: what tasks depend on this task
|
|
278
|
+
const dependents = db
|
|
279
|
+
.prepare(`SELECT t.id, t.title, t.status FROM task_dependencies d
|
|
280
|
+
JOIN tasks t ON t.id = d.task_id
|
|
281
|
+
WHERE d.depends_on_task_id = ?`)
|
|
282
|
+
.all(id);
|
|
283
|
+
return { ...task, subtasks, notes, comments, depends_on: dependsOn, dependents };
|
|
217
284
|
}
|
|
218
285
|
function handleTaskUpdate(args) {
|
|
219
286
|
const db = getDb();
|
|
@@ -225,12 +292,29 @@ function handleTaskUpdate(args) {
|
|
|
225
292
|
'title', 'description', 'status', 'priority', 'assigned_to',
|
|
226
293
|
'estimated_hours', 'actual_hours', 'due_date', 'source_ref', 'sort_order', 'tags',
|
|
227
294
|
]);
|
|
228
|
-
|
|
295
|
+
let newRow;
|
|
296
|
+
if (update) {
|
|
297
|
+
newRow = db.prepare(update.sql).get(...update.params);
|
|
298
|
+
logEntityUpdate(db, 'task', id, newRow.title, oldRow, newRow, [
|
|
299
|
+
'status', 'priority', 'assigned_to', 'title',
|
|
300
|
+
]);
|
|
301
|
+
}
|
|
302
|
+
else if (args.depends_on !== undefined) {
|
|
303
|
+
// Only depends_on changed, no column updates
|
|
304
|
+
newRow = oldRow;
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
229
307
|
throw new Error('No fields to update');
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
308
|
+
}
|
|
309
|
+
// Handle dependency updates
|
|
310
|
+
if (args.depends_on !== undefined) {
|
|
311
|
+
const dependsOn = args.depends_on;
|
|
312
|
+
setDependencies(db, id, dependsOn);
|
|
313
|
+
logActivity(db, 'task', id, 'updated', 'depends_on', null, dependsOn.length > 0 ? dependsOn.join(',') : '(none)', `Task '${newRow.title}' dependencies updated: [${dependsOn.join(', ')}]`);
|
|
314
|
+
evaluateAndUpdateDependencies(db, id);
|
|
315
|
+
// Re-fetch in case status changed
|
|
316
|
+
newRow = db.prepare('SELECT * FROM tasks WHERE id = ?').get(id);
|
|
317
|
+
}
|
|
234
318
|
// Auto time tracking: when status changes to done and actual_hours wasn't manually set
|
|
235
319
|
const statusChanged = args.status && oldRow.status !== args.status;
|
|
236
320
|
if (statusChanged && args.status === 'done' && !args.actual_hours && !newRow.actual_hours) {
|
|
@@ -249,6 +333,10 @@ function handleTaskUpdate(args) {
|
|
|
249
333
|
}
|
|
250
334
|
}
|
|
251
335
|
}
|
|
336
|
+
// Re-evaluate downstream tasks when this task is marked done
|
|
337
|
+
if (statusChanged && args.status === 'done') {
|
|
338
|
+
reevaluateDownstream(db, id);
|
|
339
|
+
}
|
|
252
340
|
return newRow;
|
|
253
341
|
}
|
|
254
342
|
export const handlers = {
|
package/dist/tools/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAG7E,MAAM,CAAC,MAAM,WAAW,GAAW;IACjC;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,mEAAmE;QAChF,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE;QAC/H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE;gBAC3D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;gBACpD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;gBAChE,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC;oBAC1D,OAAO,EAAE,MAAM;iBAChB;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC;oBAC3C,OAAO,EAAE,QAAQ;iBAClB;gBACD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;gBAC7D,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;gBACnE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;gBAClE,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;oBAC3C,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE;wBAClD,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE;wBACjE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE;wBAC7D,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;wBAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE;qBACvD;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;gBACD,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,+BAA+B,EAAE;gBACvG,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACnD;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;SAC/B;KACF;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EACT,6HAA6H;QAC/H,WAAW,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;QAC5H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,qCAAqC,EAAE;gBAChF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;gBACtF,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;gBACzE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;gBAClE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;gBACrD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;oBACnD,OAAO,EAAE,UAAU;oBACnB,WAAW,EAAE,qHAAqH;iBACnI;gBACD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE;aACpE;SACF;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,wGAAwG;QACrH,WAAW,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;QAC1H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;aAChD;YACD,QAAQ,EAAE,CAAC,IAAI,CAAC;SACjB;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,6GAA6G;QAC/G,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;QAC9H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;gBAC/C,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;gBACtF,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;gBACzE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACnC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAChC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC5B,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;oBAC3C,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE;wBAClD,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE;wBACjE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE;wBAC7D,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;wBAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE;qBACvD;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;gBACD,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,mDAAmD,EAAE;gBAC3H,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACnD;YACD,QAAQ,EAAE,CAAC,IAAI,CAAC;SACjB;KACF;CACF,CAAC;AAEF,6BAA6B;AAE7B,SAAS,eAAe,CAAC,EAAqB,EAAE,MAAc,EAAE,SAAmB;IACjF,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,2EAA2E,CAAC,CAAC;IACvG,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,KAAK,KAAK,MAAM;YAAE,SAAS,CAAC,0BAA0B;QAC1D,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAqB,EAAE,MAAc;IACjE,OAAO,EAAE,CAAC,OAAO,CACf;;gDAE4C,CAC7C,CAAC,GAAG,CAAC,MAAM,CAAyD,CAAC;AACxE,CAAC;AAED,SAAS,6BAA6B,CAAC,EAAqB,EAAE,MAAc;IAC1E,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,CAAC,MAAM,CAA8D,CAAC;IACrJ,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,oEAAoE,CAAC,CAAC,GAAG,CAAC,MAAM,CAA0C,CAAC;IACnJ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE9B,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5E,EAAE,CAAC,OAAO,CAAC,gFAAgF,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzG,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAChF,SAAS,IAAI,CAAC,KAAK,8BAA8B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9F,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3D,EAAE,CAAC,OAAO,CAAC,6EAA6E,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtG,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAC3E,SAAS,IAAI,CAAC,KAAK,wCAAwC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EAAqB,EAAE,eAAuB;IACjF,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAC3B,oEAAoE,CACrE,CAAC,GAAG,CAAC,eAAe,CAA+B,CAAC;IAErD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,6BAA6B,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,mBAAmB;AAEnB,SAAS,gBAAgB,CAAC,IAA6B;IACrD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAiB,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAC;IACnC,MAAM,WAAW,GAAI,IAAI,CAAC,WAAsB,IAAI,IAAI,CAAC;IACzD,MAAM,MAAM,GAAI,IAAI,CAAC,MAAiB,IAAI,MAAM,CAAC;IACjD,MAAM,QAAQ,GAAI,IAAI,CAAC,QAAmB,IAAI,QAAQ,CAAC;IACvD,MAAM,UAAU,GAAI,IAAI,CAAC,WAAsB,IAAI,IAAI,CAAC;IACxD,MAAM,cAAc,GAAI,IAAI,CAAC,eAA0B,IAAI,IAAI,CAAC;IAChE,MAAM,OAAO,GAAI,IAAI,CAAC,QAAmB,IAAI,IAAI,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAE,IAAI,CAAC,IAAiB,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAI,IAAI,CAAC,UAAuB,IAAI,EAAE,CAAC;IAEtD,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;yDACmD,CACpD;SACA,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAE3G,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,EAAY,CAAC;IAChC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,KAAK,WAAW,CAAC,CAAC;IAExF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACvC,6BAA6B,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC1C,6CAA6C;QAC7C,OAAO,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,cAAc,GAAG,sGAAsG,CAAC;AAC9H,MAAM,YAAY,GAAG,8HAA8H,CAAC;AAEpJ,SAAS,kBAAkB,CAAC,MAAc;IACxC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU;YACb,OAAO,GAAG,cAAc,KAAK,YAAY,8BAA8B,CAAC;QAC1E,KAAK,QAAQ;YACX,OAAO,GAAG,YAAY,KAAK,cAAc,8BAA8B,CAAC;QAC1E,KAAK,UAAU;YACb,OAAO,uCAAuC,cAAc,gBAAgB,CAAC;QAC/E,KAAK,SAAS;YACZ,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,GAAG,cAAc,KAAK,YAAY,8BAA8B,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAA6B;IACnD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAA6B,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4B,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA8B,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAiC,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAyB,CAAC;IAC3C,MAAM,MAAM,GAAI,IAAI,CAAC,OAAkB,IAAI,UAAU,CAAC;IACtD,MAAM,KAAK,GAAI,IAAI,CAAC,KAAgB,IAAI,EAAE,CAAC;IAE3C,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG,EAAE,CAAC;QACR,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,MAAM,GAAG,GAAG;;;;;;;;;;;MAWR,QAAQ;;eAEC,kBAAkB,CAAC,MAAM,CAAC;;GAEtC,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,aAAa,CAAC,IAA6B;IAClD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAY,CAAC;IAE7B,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;;sBAGgB,CACjB;SACA,GAAG,CAAC,EAAE,CAAC,CAAC;IAEX,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CAAC,0EAA0E,CAAC;SACnF,GAAG,CAAC,EAAE,CAAC,CAAC;IAEX,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CACN;;gCAE0B,CAC3B;SACA,GAAG,CAAC,EAAE,CAAC,CAAC;IAEX,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CAAC,kEAAkE,CAAC;SAC3E,GAAG,CAAC,EAAE,CAAC,CAAC;IAEX,0CAA0C;IAC1C,MAAM,SAAS,GAAG,EAAE;SACjB,OAAO,CACN;;2BAEqB,CACtB;SACA,GAAG,CAAC,EAAE,CAAC,CAAC;IAEX,6CAA6C;IAC7C,MAAM,UAAU,GAAG,EAAE;SAClB,OAAO,CACN;;sCAEgC,CACjC;SACA,GAAG,CAAC,EAAE,CAAC,CAAC;IAEX,OAAO,EAAE,GAAI,IAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAC/F,CAAC;AAED,SAAS,gBAAgB,CAAC,IAA6B;IACrD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAY,CAAC;IAE7B,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAwC,CAAC;IAC7G,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;QAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa;QAC3D,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM;KAClF,CAAC,CAAC;IAEH,IAAI,MAA+B,CAAC;IAEpC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAA4B,CAAC;QACjF,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,KAAe,EAAE,MAAM,EAAE,MAAM,EAAE;YACtE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO;SAC7C,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACzC,6CAA6C;QAC7C,MAAM,GAAG,MAAM,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,4BAA4B;IAC5B,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAsB,CAAC;QAC9C,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QACnC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EACvD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EACrD,SAAS,MAAM,CAAC,KAAK,4BAA4B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5E,6BAA6B,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,kCAAkC;QAClC,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,CAAC,EAAE,CAA4B,CAAC;IAC7F,CAAC;IAED,uFAAuF;IACvF,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;IACnE,IAAI,aAAa,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC1F,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAC3B;;;wCAGkC,CACnC,CAAC,GAAG,CAAC,EAAE,CAAuC,CAAC;QAEhD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY;YACjF,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3E,MAAkC,CAAC,YAAY,GAAG,KAAK,CAAC;gBACzD,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EACxE,SAAS,MAAM,CAAC,KAAK,mBAAmB,KAAK,GAAG,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,IAAI,aAAa,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5C,oBAAoB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAgC;IACnD,WAAW,EAAE,gBAAgB;IAC7B,SAAS,EAAE,cAAc;IACzB,QAAQ,EAAE,aAAa;IACvB,WAAW,EAAE,gBAAgB;CAC9B,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { getDb } from '../db.js';
|
|
2
|
+
import { logActivity } from '../helpers/activity-logger.js';
|
|
3
|
+
export const definitions = [
|
|
4
|
+
{
|
|
5
|
+
name: 'template_create',
|
|
6
|
+
description: 'Create a reusable task template. Templates define a set of tasks that can be instantiated into any epic. Use {variable} placeholders for dynamic values.',
|
|
7
|
+
annotations: { title: 'Create Template', readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
name: { type: 'string', description: 'Template name (must be unique)' },
|
|
12
|
+
description: { type: 'string', description: 'Template description' },
|
|
13
|
+
tasks: {
|
|
14
|
+
type: 'array',
|
|
15
|
+
description: 'Task definitions. Use {variable} for placeholders.',
|
|
16
|
+
items: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
properties: {
|
|
19
|
+
title: { type: 'string', description: 'Task title (supports {variable} placeholders)' },
|
|
20
|
+
description: { type: 'string', description: 'Task description (supports {variable} placeholders)' },
|
|
21
|
+
priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'], default: 'medium' },
|
|
22
|
+
estimated_hours: { type: 'number' },
|
|
23
|
+
tags: { type: 'array', items: { type: 'string' } },
|
|
24
|
+
},
|
|
25
|
+
required: ['title'],
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
required: ['name', 'tasks'],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'template_list',
|
|
34
|
+
description: 'List all available task templates.',
|
|
35
|
+
annotations: { title: 'List Templates', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
36
|
+
inputSchema: {
|
|
37
|
+
type: 'object',
|
|
38
|
+
properties: {},
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'template_apply',
|
|
43
|
+
description: 'Apply a template to create tasks in an epic. Replaces {variable} placeholders with provided values.',
|
|
44
|
+
annotations: { title: 'Apply Template', readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
45
|
+
inputSchema: {
|
|
46
|
+
type: 'object',
|
|
47
|
+
properties: {
|
|
48
|
+
template_id: { type: 'integer', description: 'Template ID to apply' },
|
|
49
|
+
epic_id: { type: 'integer', description: 'Epic to create tasks in' },
|
|
50
|
+
variables: {
|
|
51
|
+
type: 'object',
|
|
52
|
+
description: 'Key-value pairs for {variable} substitution (e.g., {"feature": "auth"})',
|
|
53
|
+
additionalProperties: { type: 'string' },
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
required: ['template_id', 'epic_id'],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'template_delete',
|
|
61
|
+
description: 'Delete a task template.',
|
|
62
|
+
annotations: { title: 'Delete Template', readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: false },
|
|
63
|
+
inputSchema: {
|
|
64
|
+
type: 'object',
|
|
65
|
+
properties: {
|
|
66
|
+
id: { type: 'integer', description: 'Template ID' },
|
|
67
|
+
},
|
|
68
|
+
required: ['id'],
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
function substituteVariables(text, variables) {
|
|
73
|
+
return text.replace(/\{(\w+)\}/g, (match, key) => {
|
|
74
|
+
return variables[key] ?? match;
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function handleTemplateCreate(args) {
|
|
78
|
+
const db = getDb();
|
|
79
|
+
const name = args.name;
|
|
80
|
+
const description = args.description ?? null;
|
|
81
|
+
const tasks = args.tasks;
|
|
82
|
+
const templateData = JSON.stringify(tasks);
|
|
83
|
+
const template = db
|
|
84
|
+
.prepare('INSERT INTO templates (name, description, template_data) VALUES (?, ?, ?) RETURNING *')
|
|
85
|
+
.get(name, description, templateData);
|
|
86
|
+
const row = template;
|
|
87
|
+
logActivity(db, 'template', row.id, 'created', null, null, null, `Template '${name}' created with ${tasks.length} task(s)`);
|
|
88
|
+
return { ...row, tasks };
|
|
89
|
+
}
|
|
90
|
+
function handleTemplateList() {
|
|
91
|
+
const db = getDb();
|
|
92
|
+
const templates = db.prepare('SELECT * FROM templates ORDER BY created_at DESC').all();
|
|
93
|
+
return templates.map((t) => ({
|
|
94
|
+
...t,
|
|
95
|
+
task_count: JSON.parse(t.template_data).length,
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
function handleTemplateApply(args) {
|
|
99
|
+
const db = getDb();
|
|
100
|
+
const templateId = args.template_id;
|
|
101
|
+
const epicId = args.epic_id;
|
|
102
|
+
const variables = args.variables ?? {};
|
|
103
|
+
const template = db.prepare('SELECT * FROM templates WHERE id = ?').get(templateId);
|
|
104
|
+
if (!template)
|
|
105
|
+
throw new Error(`Template ${templateId} not found`);
|
|
106
|
+
const epic = db.prepare('SELECT id, name FROM epics WHERE id = ?').get(epicId);
|
|
107
|
+
if (!epic)
|
|
108
|
+
throw new Error(`Epic ${epicId} not found`);
|
|
109
|
+
const taskDefs = JSON.parse(template.template_data);
|
|
110
|
+
const createdTasks = db.transaction(() => {
|
|
111
|
+
return taskDefs.map((taskDef) => {
|
|
112
|
+
const title = substituteVariables(taskDef.title, variables);
|
|
113
|
+
const description = taskDef.description
|
|
114
|
+
? substituteVariables(taskDef.description, variables)
|
|
115
|
+
: null;
|
|
116
|
+
const priority = taskDef.priority ?? 'medium';
|
|
117
|
+
const estimatedHours = taskDef.estimated_hours ?? null;
|
|
118
|
+
const tags = JSON.stringify(taskDef.tags ?? []);
|
|
119
|
+
const task = db.prepare(`INSERT INTO tasks (epic_id, title, description, priority, estimated_hours, tags)
|
|
120
|
+
VALUES (?, ?, ?, ?, ?, ?) RETURNING *`).get(epicId, title, description, priority, estimatedHours, tags);
|
|
121
|
+
const row = task;
|
|
122
|
+
logActivity(db, 'task', row.id, 'created', null, null, null, `Task '${title}' created from template '${template.name}'`);
|
|
123
|
+
return task;
|
|
124
|
+
});
|
|
125
|
+
})();
|
|
126
|
+
return {
|
|
127
|
+
message: `Applied template '${template.name}' to epic '${epic.name}'`,
|
|
128
|
+
template_name: template.name,
|
|
129
|
+
epic_name: epic.name,
|
|
130
|
+
tasks_created: createdTasks.length,
|
|
131
|
+
tasks: createdTasks,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function handleTemplateDelete(args) {
|
|
135
|
+
const db = getDb();
|
|
136
|
+
const id = args.id;
|
|
137
|
+
const template = db.prepare('SELECT * FROM templates WHERE id = ?').get(id);
|
|
138
|
+
if (!template)
|
|
139
|
+
throw new Error(`Template ${id} not found`);
|
|
140
|
+
db.prepare('DELETE FROM templates WHERE id = ?').run(id);
|
|
141
|
+
logActivity(db, 'template', id, 'deleted', null, null, null, `Template '${template.name}' deleted`);
|
|
142
|
+
return { message: `Template '${template.name}' deleted` };
|
|
143
|
+
}
|
|
144
|
+
export const handlers = {
|
|
145
|
+
template_create: handleTemplateCreate,
|
|
146
|
+
template_list: handleTemplateList,
|
|
147
|
+
template_apply: handleTemplateApply,
|
|
148
|
+
template_delete: handleTemplateDelete,
|
|
149
|
+
};
|
|
150
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/tools/templates.ts"],"names":[],"mappings":"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"}
|
package/manifest.json
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"manifest_version": "0.3",
|
|
3
3
|
"name": "saga-mcp",
|
|
4
4
|
"display_name": "Saga — Project Tracker for AI Agents",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.5.0",
|
|
6
6
|
"description": "A Jira-like project tracker MCP server for AI agents. SQLite-backed, per-project scoped, with full hierarchy and activity logging — so LLMs never lose track.",
|
|
7
|
-
"long_description": "Saga gives your AI assistant a structured SQLite database to track projects, epics, tasks, subtasks, notes, and decisions across sessions. No more scattered markdown files — one `tracker_dashboard` call gives full project context to resume work.\n\n**Key features:**\n- Full hierarchy: Projects > Epics > Tasks > Subtasks\n- SQLite: Self-contained `.tracker.db` file per project — zero setup\n- Activity log: Every mutation is automatically tracked\n-
|
|
7
|
+
"long_description": "Saga gives your AI assistant a structured SQLite database to track projects, epics, tasks, subtasks, notes, and decisions across sessions. No more scattered markdown files — one `tracker_dashboard` call gives full project context to resume work.\n\n**Key features:**\n- Full hierarchy: Projects > Epics > Tasks > Subtasks\n- Task dependencies: Express sequencing with auto-block/unblock\n- Comments: Threaded discussions on tasks for decision trails\n- Templates: Reusable task sets with variable substitution\n- Dashboard: One tool call gives full overview with natural language summary\n- SQLite: Self-contained `.tracker.db` file per project — zero setup\n- Activity log: Every mutation is automatically tracked\n- Notes system: Decisions, context, meeting notes, blockers\n- Batch operations: Create multiple subtasks or update multiple tasks in one call\n- 31 focused tools with safety annotations\n- Import/export: Full project backup and migration as JSON",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "spranab",
|
|
10
10
|
"url": "https://github.com/spranab"
|
|
@@ -41,30 +41,36 @@
|
|
|
41
41
|
},
|
|
42
42
|
"tools": [
|
|
43
43
|
{ "name": "tracker_init", "description": "Initialize tracker and create first project" },
|
|
44
|
-
{ "name": "tracker_dashboard", "description": "Full project overview
|
|
44
|
+
{ "name": "tracker_dashboard", "description": "Full project overview with natural language summary" },
|
|
45
45
|
{ "name": "project_create", "description": "Create a new project" },
|
|
46
46
|
{ "name": "project_list", "description": "List projects with completion stats" },
|
|
47
47
|
{ "name": "project_update", "description": "Update project (archive to soft-delete)" },
|
|
48
48
|
{ "name": "epic_create", "description": "Create an epic within a project" },
|
|
49
49
|
{ "name": "epic_list", "description": "List epics with task counts" },
|
|
50
50
|
{ "name": "epic_update", "description": "Update an epic" },
|
|
51
|
-
{ "name": "task_create", "description": "Create a task
|
|
52
|
-
{ "name": "task_list", "description": "List/filter tasks
|
|
53
|
-
{ "name": "task_get", "description": "Get task with subtasks and
|
|
54
|
-
{ "name": "task_update", "description": "Update task (
|
|
51
|
+
{ "name": "task_create", "description": "Create a task with optional dependencies" },
|
|
52
|
+
{ "name": "task_list", "description": "List/filter tasks with dependency info" },
|
|
53
|
+
{ "name": "task_get", "description": "Get task with subtasks, notes, comments, and dependencies" },
|
|
54
|
+
{ "name": "task_update", "description": "Update task (auto-logs, auto-blocks/unblocks)" },
|
|
55
55
|
{ "name": "task_batch_update", "description": "Update multiple tasks at once" },
|
|
56
56
|
{ "name": "subtask_create", "description": "Create subtask(s) — supports batch" },
|
|
57
57
|
{ "name": "subtask_update", "description": "Update subtask title/status" },
|
|
58
58
|
{ "name": "subtask_delete", "description": "Delete subtask(s) — supports batch" },
|
|
59
|
+
{ "name": "comment_add", "description": "Add a comment to a task (threaded discussion)" },
|
|
60
|
+
{ "name": "comment_list", "description": "List all comments on a task" },
|
|
61
|
+
{ "name": "template_create", "description": "Create a reusable task template" },
|
|
62
|
+
{ "name": "template_list", "description": "List available templates" },
|
|
63
|
+
{ "name": "template_apply", "description": "Apply template to create tasks with variable substitution" },
|
|
64
|
+
{ "name": "template_delete", "description": "Delete a template" },
|
|
59
65
|
{ "name": "note_save", "description": "Create or update a note (upsert)" },
|
|
60
66
|
{ "name": "note_list", "description": "List notes with filters" },
|
|
61
67
|
{ "name": "note_search", "description": "Full-text search across notes" },
|
|
62
68
|
{ "name": "note_delete", "description": "Delete a note" },
|
|
63
69
|
{ "name": "tracker_search", "description": "Cross-entity search (projects, epics, tasks, notes)" },
|
|
64
70
|
{ "name": "activity_log", "description": "View change history with filters" },
|
|
65
|
-
{ "name": "tracker_session_diff", "description": "Show what changed since a given timestamp
|
|
66
|
-
{ "name": "tracker_export", "description": "Export full project as nested JSON
|
|
67
|
-
{ "name": "tracker_import", "description": "Import project from JSON
|
|
71
|
+
{ "name": "tracker_session_diff", "description": "Show what changed since a given timestamp" },
|
|
72
|
+
{ "name": "tracker_export", "description": "Export full project as nested JSON" },
|
|
73
|
+
{ "name": "tracker_import", "description": "Import project from JSON" }
|
|
68
74
|
],
|
|
69
75
|
"compatibility": {
|
|
70
76
|
"platforms": ["darwin", "win32", "linux"],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "saga-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "A Jira-like project tracker MCP server for AI agents. SQLite-backed, per-project scoped, with full hierarchy (Projects > Epics > Tasks > Subtasks), activity logging, and a dashboard — so LLMs never lose track.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|