saga-mcp 1.17.0 → 1.17.1
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 +4 -4
- package/dist/web/ui.js +17 -6
- package/dist/web/ui.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -675,7 +675,7 @@ DB_PATH=./test.db npm start
|
|
|
675
675
|
# the web UI against the same database
|
|
676
676
|
node dist/web/index.js ./test.db --open
|
|
677
677
|
|
|
678
|
-
npm test #
|
|
678
|
+
npm test # 359 unit and integration tests, no network
|
|
679
679
|
npm run e2e # release gate: packs a tarball, installs it, drives the real binaries
|
|
680
680
|
```
|
|
681
681
|
|
|
@@ -691,20 +691,20 @@ step, and it is triggered by publishing a GitHub release, not by pushing a tag.
|
|
|
691
691
|
```bash
|
|
692
692
|
# 1. bump the version in package.json, manifest.json and server.json, then merge
|
|
693
693
|
# 2. tag it. Nothing is published yet.
|
|
694
|
-
git tag -a v1.17.
|
|
694
|
+
git tag -a v1.17.1 -m "v1.17.1 — ..." && git push origin v1.17.1
|
|
695
695
|
|
|
696
696
|
# 3. verify the tagged build: this packs the tarball that would be published
|
|
697
697
|
# and drives it end to end, including an upgrade from an older database.
|
|
698
698
|
npm run e2e
|
|
699
699
|
|
|
700
700
|
# 4. publish the release. This fires the publish workflow.
|
|
701
|
-
gh release create v1.17.
|
|
701
|
+
gh release create v1.17.1 --notes-file notes.md
|
|
702
702
|
```
|
|
703
703
|
|
|
704
704
|
The workflow re-runs the suite against the tagged commit, refuses a tag that does not match
|
|
705
705
|
`package.json`, refuses a version already on npm, and sends a GitHub *pre-release* to the `next`
|
|
706
706
|
dist-tag so it never becomes what `npm install saga-mcp` gives people. A failed publish can be
|
|
707
|
-
retried against the same tag with `gh workflow run "Publish to npm" -f tag=v1.17.
|
|
707
|
+
retried against the same tag with `gh workflow run "Publish to npm" -f tag=v1.17.1`.
|
|
708
708
|
|
|
709
709
|
---
|
|
710
710
|
|
package/dist/web/ui.js
CHANGED
|
@@ -199,13 +199,24 @@ pre.body {
|
|
|
199
199
|
* with the content: on a long task, Refresh and Edit end up above the top of
|
|
200
200
|
* the drawer and you have to scroll back for them (#57, reported by @rusak47).
|
|
201
201
|
* Pin it to the drawer's own scrollport, the way the page header and tabs are
|
|
202
|
-
* already pinned to the window.
|
|
203
|
-
*
|
|
202
|
+
* already pinned to the window.
|
|
203
|
+
*
|
|
204
|
+
* The first cut painted the whole row, which turned it into a bar across the
|
|
205
|
+
* panel that swallowed the line scrolling under it — the task title, usually.
|
|
206
|
+
* @rusak47: "no one reads the text behind buttons". So the row positions and
|
|
207
|
+
* nothing else: only the buttons are opaque, and only they take clicks, or a
|
|
208
|
+
* transparent strip would eat clicks on the text it no longer hides.
|
|
204
209
|
*/
|
|
205
210
|
.drawer-actions {
|
|
206
211
|
position: sticky; top: 0; z-index: 1;
|
|
207
|
-
margin: -18px -20px 0; padding:
|
|
208
|
-
|
|
212
|
+
margin: -18px -20px 0; padding: 10px 20px 4px;
|
|
213
|
+
pointer-events: none;
|
|
214
|
+
}
|
|
215
|
+
.drawer-actions .actionpad {
|
|
216
|
+
display: flex; align-items: center; gap: 8px;
|
|
217
|
+
pointer-events: auto;
|
|
218
|
+
margin: -4px -6px; padding: 4px 6px; border-radius: 10px;
|
|
219
|
+
background: var(--panel);
|
|
209
220
|
}
|
|
210
221
|
/* The same thing at the other end: a long form scrolls its own buttons away. */
|
|
211
222
|
.modal-actions {
|
|
@@ -1371,14 +1382,14 @@ function drawTask() {
|
|
|
1371
1382
|
if (savedWidth) d.style.width = savedWidth;
|
|
1372
1383
|
|
|
1373
1384
|
var h = '<div class="drawer-resize" id="drawerResize" title="Drag to resize"></div>' +
|
|
1374
|
-
'<div class="row drawer-actions"><span class="grow"></span>' +
|
|
1385
|
+
'<div class="row drawer-actions"><span class="grow"></span><span class="actionpad">' +
|
|
1375
1386
|
'<button class="btn" id="refreshTask" title="Re-read this task from the database">⟳ Refresh</button>' +
|
|
1376
1387
|
(ed && t.is_deleted ? '<button class="btn" id="restoreTask">Restore</button>' : '') +
|
|
1377
1388
|
(ed && !t.is_deleted && t.status === 'todo'
|
|
1378
1389
|
? '<button class="btn danger" id="deleteTask" title="Remove this task — kept for the audit trail, restorable">Remove</button>'
|
|
1379
1390
|
: '') +
|
|
1380
1391
|
(ed ? '<button class="btn" id="editTask">Edit task</button>' : '') +
|
|
1381
|
-
'<button class="btn" id="closeDrawer">Close ✕</button></div>';
|
|
1392
|
+
'<button class="btn" id="closeDrawer">Close ✕</button></span></div>';
|
|
1382
1393
|
h += '<h2 style="margin:6px 0 8px;font-size:18px">' + esc(t.title) + '</h2>';
|
|
1383
1394
|
var unmetDeps = (t.depends_on || []).filter(function (d) { return d.status !== 'done'; });
|
|
1384
1395
|
if (unmetDeps.length) {
|
package/dist/web/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,IAAI,GAAW
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,IAAI,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAovEpB,CAAC"}
|
package/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": "0.3",
|
|
3
3
|
"name": "saga-mcp",
|
|
4
4
|
"display_name": "Saga — Project Tracker for AI Agents",
|
|
5
|
-
"version": "1.17.
|
|
5
|
+
"version": "1.17.1",
|
|
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
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, with reversible soft-delete\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- 41 focused tools with safety annotations\n- Web UI: `saga-web` serves a local dashboard for browsing and editing the same database\n- Import/export: Full project backup and migration as JSON",
|
|
8
8
|
"author": {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "saga-mcp",
|
|
3
3
|
"mcpName": "io.github.spranab/saga-mcp",
|
|
4
|
-
"version": "1.17.
|
|
4
|
+
"version": "1.17.1",
|
|
5
5
|
"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.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|