@hasna/todos 0.11.41 → 0.11.43
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 +37 -9
- package/dist/cli/commands/plan-template-commands.d.ts.map +1 -1
- package/dist/cli/commands/project-commands.d.ts.map +1 -1
- package/dist/cli/index.js +1331 -264
- package/dist/cli-mcp-parity.d.ts +1 -1
- package/dist/cli-mcp-parity.d.ts.map +1 -1
- package/dist/contracts.js +73 -6
- package/dist/db/builtin-templates.d.ts +17 -0
- package/dist/db/builtin-templates.d.ts.map +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +785 -168
- package/dist/json-contracts.d.ts.map +1 -1
- package/dist/lib/local-bridge.d.ts +2 -0
- package/dist/lib/local-bridge.d.ts.map +1 -1
- package/dist/lib/saved-search-views.d.ts +60 -0
- package/dist/lib/saved-search-views.d.ts.map +1 -0
- package/dist/lib/todos-md.d.ts.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1485 -99
- package/dist/mcp/token-utils.d.ts.map +1 -1
- package/dist/mcp/tools/task-meta-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
- package/dist/mcp/tools/templates.d.ts.map +1 -1
- package/dist/mcp.js +7 -1
- package/dist/registry.js +122 -8
- package/dist/release-provenance.json +3 -3
- package/dist/server/index.js +24 -0
- package/dist/storage.js +24 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-utils.d.ts","sourceRoot":"","sources":["../../src/mcp/token-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3C,eAAO,MAAM,cAAc,aAoBzB,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"token-utils.d.ts","sourceRoot":"","sources":["../../src/mcp/token-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3C,eAAO,MAAM,cAAc,aAoBzB,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAqP7D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAMhE,CAAC;AAgBF,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,YAAY,qBAA+B,EAC3C,UAAU,qBAAmC,GAC5C,OAAO,CAqCT;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,SAAM,GAAG,MAAM,GAAG,IAAI,CAK5F;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,SAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgB1F;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqCtF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAexD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAElD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAMD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,UAA4B,GAAG,OAAO,CA0BvH;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAY5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-meta-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/task-meta-tools.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,UAAU,eAAe;IACvB,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACzC;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"task-meta-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/task-meta-tools.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,UAAU,eAAe;IACvB,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACzC;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,QA2K5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-project-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/task-project-tools.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAsEjD,UAAU,kBAAkB;IAC1B,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACzD,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACxC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACnC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACvE,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAC3F;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"task-project-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/task-project-tools.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAsEjD,UAAU,kBAAkB;IAC1B,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACzD,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACxC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACnC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACvE,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAC3F;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,kBAAkB,QAg4DlF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,KAAK,OAAO,GAAG;IACb,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;CACrC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,KAAK,OAAO,GAAG;IACb,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;CACrC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,OAAO,GAAG,IAAI,CAsRtH"}
|
package/dist/mcp.js
CHANGED
|
@@ -118,6 +118,10 @@ var MCP_TOOL_GROUPS = {
|
|
|
118
118
|
"request_task_review",
|
|
119
119
|
"reschedule_task",
|
|
120
120
|
"search_tasks",
|
|
121
|
+
"save_search_view",
|
|
122
|
+
"list_search_views",
|
|
123
|
+
"run_search_view",
|
|
124
|
+
"delete_search_view",
|
|
121
125
|
"standup",
|
|
122
126
|
"set_task_contract",
|
|
123
127
|
"task_context",
|
|
@@ -307,10 +311,12 @@ var MCP_TOOL_GROUPS = {
|
|
|
307
311
|
"export_template",
|
|
308
312
|
"import_template",
|
|
309
313
|
"init_templates",
|
|
314
|
+
"list_template_library",
|
|
310
315
|
"list_templates",
|
|
311
316
|
"preview_template",
|
|
312
317
|
"template_history",
|
|
313
|
-
"update_template"
|
|
318
|
+
"update_template",
|
|
319
|
+
"write_template_library"
|
|
314
320
|
],
|
|
315
321
|
webhooks: ["create_webhook", "delete_webhook", "list_webhooks"],
|
|
316
322
|
machines: [
|
package/dist/registry.js
CHANGED
|
@@ -979,6 +979,19 @@ var init_migrations = __esm(() => {
|
|
|
979
979
|
);
|
|
980
980
|
CREATE INDEX IF NOT EXISTS idx_handoff_acks_agent ON handoff_acknowledgements(agent_id, acknowledged_at);
|
|
981
981
|
INSERT OR IGNORE INTO _migrations (id) VALUES (54);
|
|
982
|
+
`,
|
|
983
|
+
`
|
|
984
|
+
CREATE TABLE IF NOT EXISTS saved_search_views (
|
|
985
|
+
id TEXT PRIMARY KEY,
|
|
986
|
+
name TEXT NOT NULL UNIQUE,
|
|
987
|
+
description TEXT,
|
|
988
|
+
scope TEXT NOT NULL DEFAULT 'tasks' CHECK(scope IN ('all', 'tasks', 'projects', 'plans', 'runs', 'comments')),
|
|
989
|
+
filters TEXT NOT NULL DEFAULT '{}',
|
|
990
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
991
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
992
|
+
);
|
|
993
|
+
CREATE INDEX IF NOT EXISTS idx_saved_search_views_scope ON saved_search_views(scope);
|
|
994
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (55);
|
|
982
995
|
`
|
|
983
996
|
];
|
|
984
997
|
});
|
|
@@ -1155,6 +1168,17 @@ function ensureSchema(db) {
|
|
|
1155
1168
|
PRIMARY KEY (handoff_id, agent_id)
|
|
1156
1169
|
)`);
|
|
1157
1170
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_handoff_acks_agent ON handoff_acknowledgements(agent_id, acknowledged_at)");
|
|
1171
|
+
ensureTable("saved_search_views", `
|
|
1172
|
+
CREATE TABLE saved_search_views (
|
|
1173
|
+
id TEXT PRIMARY KEY,
|
|
1174
|
+
name TEXT NOT NULL UNIQUE,
|
|
1175
|
+
description TEXT,
|
|
1176
|
+
scope TEXT NOT NULL DEFAULT 'tasks' CHECK(scope IN ('all', 'tasks', 'projects', 'plans', 'runs', 'comments')),
|
|
1177
|
+
filters TEXT NOT NULL DEFAULT '{}',
|
|
1178
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1179
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
1180
|
+
)`);
|
|
1181
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_saved_search_views_scope ON saved_search_views(scope)");
|
|
1158
1182
|
ensureTable("task_relationships", `
|
|
1159
1183
|
CREATE TABLE task_relationships (
|
|
1160
1184
|
id TEXT PRIMARY KEY,
|
|
@@ -2608,6 +2632,39 @@ var TODOS_JSON_CONTRACTS = [
|
|
|
2608
2632
|
created: field("object", "Flags and source types created by this bootstrap run.")
|
|
2609
2633
|
},
|
|
2610
2634
|
optional: {}
|
|
2635
|
+
}),
|
|
2636
|
+
contract({
|
|
2637
|
+
id: "saved_search_view",
|
|
2638
|
+
name: "Saved Search View",
|
|
2639
|
+
description: "Local saved search view for repeatable task, project, plan, run, comment, or cross-entity searches.",
|
|
2640
|
+
surfaces: ["cli", "mcp", "sdk"],
|
|
2641
|
+
stability: "stable",
|
|
2642
|
+
required: {
|
|
2643
|
+
id: idField,
|
|
2644
|
+
name: field("string", "Human-readable unique view name."),
|
|
2645
|
+
description: field(["string", "null"], "Optional view description.", true),
|
|
2646
|
+
scope: field("string", "Search scope: all, tasks, projects, plans, runs, or comments."),
|
|
2647
|
+
filters: field("object", "Saved local filter object."),
|
|
2648
|
+
created_at: isoDateField,
|
|
2649
|
+
updated_at: isoDateField
|
|
2650
|
+
},
|
|
2651
|
+
optional: {}
|
|
2652
|
+
}),
|
|
2653
|
+
contract({
|
|
2654
|
+
id: "saved_search_run_result",
|
|
2655
|
+
name: "Saved Search Run Result",
|
|
2656
|
+
description: "Stable JSON envelope returned when running a saved search view or cross-entity search.",
|
|
2657
|
+
surfaces: ["cli", "mcp", "sdk"],
|
|
2658
|
+
stability: "stable",
|
|
2659
|
+
required: {
|
|
2660
|
+
scope: field("string", "Search scope used for the run."),
|
|
2661
|
+
filters: field("object", "Applied local filters."),
|
|
2662
|
+
count: field("integer", "Number of returned result records."),
|
|
2663
|
+
results: field("array", "Result records with entity_type and entity.")
|
|
2664
|
+
},
|
|
2665
|
+
optional: {
|
|
2666
|
+
view: field("object", "Saved view metadata when the run came from a named view.")
|
|
2667
|
+
}
|
|
2611
2668
|
})
|
|
2612
2669
|
];
|
|
2613
2670
|
function expectedTypes(contract2) {
|
|
@@ -6142,7 +6199,8 @@ var dataKeys = [
|
|
|
6142
6199
|
"task_files",
|
|
6143
6200
|
"task_commits",
|
|
6144
6201
|
"task_git_refs",
|
|
6145
|
-
"task_verifications"
|
|
6202
|
+
"task_verifications",
|
|
6203
|
+
"saved_views"
|
|
6146
6204
|
];
|
|
6147
6205
|
var insertColumns = {
|
|
6148
6206
|
projects: ["id", "name", "path", "description", "task_list_id", "task_prefix", "task_counter", "created_at", "updated_at", "machine_id", "synced_at"],
|
|
@@ -6214,7 +6272,8 @@ var insertColumns = {
|
|
|
6214
6272
|
task_files: ["id", "task_id", "path", "status", "agent_id", "note", "created_at", "updated_at", "machine_id"],
|
|
6215
6273
|
task_commits: ["id", "task_id", "sha", "message", "author", "files_changed", "committed_at", "created_at"],
|
|
6216
6274
|
task_git_refs: ["id", "task_id", "ref_type", "name", "url", "provider", "metadata", "created_at", "updated_at"],
|
|
6217
|
-
task_verifications: ["id", "task_id", "command", "status", "output_summary", "artifact_path", "agent_id", "run_at", "created_at"]
|
|
6275
|
+
task_verifications: ["id", "task_id", "command", "status", "output_summary", "artifact_path", "agent_id", "run_at", "created_at"],
|
|
6276
|
+
saved_views: ["id", "name", "description", "scope", "filters", "created_at", "updated_at"]
|
|
6218
6277
|
};
|
|
6219
6278
|
var tableByKey = {
|
|
6220
6279
|
projects: "projects",
|
|
@@ -6230,9 +6289,10 @@ var tableByKey = {
|
|
|
6230
6289
|
task_files: "task_files",
|
|
6231
6290
|
task_commits: "task_commits",
|
|
6232
6291
|
task_git_refs: "task_git_refs",
|
|
6233
|
-
task_verifications: "task_verifications"
|
|
6292
|
+
task_verifications: "task_verifications",
|
|
6293
|
+
saved_views: "saved_search_views"
|
|
6234
6294
|
};
|
|
6235
|
-
var jsonColumns = new Set(["metadata", "tags", "data", "files_changed"]);
|
|
6295
|
+
var jsonColumns = new Set(["metadata", "tags", "data", "files_changed", "filters"]);
|
|
6236
6296
|
function packageSource(version) {
|
|
6237
6297
|
return {
|
|
6238
6298
|
packageName: "@hasna/todos",
|
|
@@ -6305,6 +6365,9 @@ function rowToRunEvent(row) {
|
|
|
6305
6365
|
function rowToCommit(row) {
|
|
6306
6366
|
return { ...row, files_changed: row.files_changed ? parseJsonArray(row.files_changed) : null };
|
|
6307
6367
|
}
|
|
6368
|
+
function rowToSavedView(row) {
|
|
6369
|
+
return { ...row, filters: parseJsonObject(row.filters) };
|
|
6370
|
+
}
|
|
6308
6371
|
function bridgeStats(data) {
|
|
6309
6372
|
return Object.fromEntries(dataKeys.map((key) => [key, data[key].length]));
|
|
6310
6373
|
}
|
|
@@ -6328,7 +6391,8 @@ function createLocalBridgeBundle(options = {}, db) {
|
|
|
6328
6391
|
task_files: queryByTaskIds(d, "SELECT * FROM task_files WHERE task_id IN (__TASK_IDS__) ORDER BY path, id", taskIds),
|
|
6329
6392
|
task_commits: queryByTaskIds(d, "SELECT * FROM task_commits WHERE task_id IN (__TASK_IDS__) ORDER BY created_at, id", taskIds).map(rowToCommit),
|
|
6330
6393
|
task_git_refs: queryByTaskIds(d, "SELECT * FROM task_git_refs WHERE task_id IN (__TASK_IDS__) ORDER BY created_at, id", taskIds).map(rowWithMetadata),
|
|
6331
|
-
task_verifications: queryByTaskIds(d, "SELECT * FROM task_verifications WHERE task_id IN (__TASK_IDS__) ORDER BY run_at, id", taskIds)
|
|
6394
|
+
task_verifications: queryByTaskIds(d, "SELECT * FROM task_verifications WHERE task_id IN (__TASK_IDS__) ORDER BY run_at, id", taskIds),
|
|
6395
|
+
saved_views: (options.project_id ? d.query("SELECT * FROM saved_search_views WHERE json_extract(filters, '$.project_id') = ? ORDER BY name").all(options.project_id) : d.query("SELECT * FROM saved_search_views ORDER BY name").all()).map(rowToSavedView)
|
|
6332
6396
|
};
|
|
6333
6397
|
const artifactContents = data.run_artifacts.map((artifact) => exportStoredArtifactContent({
|
|
6334
6398
|
id: artifact.id,
|
|
@@ -6367,6 +6431,8 @@ function validateLocalBridgeBundle(value) {
|
|
|
6367
6431
|
issues.push("data must be an object");
|
|
6368
6432
|
} else {
|
|
6369
6433
|
for (const key of dataKeys) {
|
|
6434
|
+
if (key === "saved_views" && data[key] === undefined)
|
|
6435
|
+
continue;
|
|
6370
6436
|
if (!Array.isArray(data[key]))
|
|
6371
6437
|
issues.push(`data.${key} must be an array`);
|
|
6372
6438
|
}
|
|
@@ -6539,7 +6605,8 @@ function importLocalBridgeBundle(bundle, options = {}, db) {
|
|
|
6539
6605
|
const conflictStrategy = options.conflictStrategy ?? "skip";
|
|
6540
6606
|
const data = {
|
|
6541
6607
|
...bundle.data,
|
|
6542
|
-
tasks: sortedTasks(bundle.data.tasks)
|
|
6608
|
+
tasks: sortedTasks(bundle.data.tasks),
|
|
6609
|
+
saved_views: bundle.data.saved_views ?? []
|
|
6543
6610
|
};
|
|
6544
6611
|
for (const key of dataKeys) {
|
|
6545
6612
|
for (const row of data[key]) {
|
|
@@ -7150,6 +7217,10 @@ var MCP_TOOL_GROUPS = {
|
|
|
7150
7217
|
"request_task_review",
|
|
7151
7218
|
"reschedule_task",
|
|
7152
7219
|
"search_tasks",
|
|
7220
|
+
"save_search_view",
|
|
7221
|
+
"list_search_views",
|
|
7222
|
+
"run_search_view",
|
|
7223
|
+
"delete_search_view",
|
|
7153
7224
|
"standup",
|
|
7154
7225
|
"set_task_contract",
|
|
7155
7226
|
"task_context",
|
|
@@ -7339,10 +7410,12 @@ var MCP_TOOL_GROUPS = {
|
|
|
7339
7410
|
"export_template",
|
|
7340
7411
|
"import_template",
|
|
7341
7412
|
"init_templates",
|
|
7413
|
+
"list_template_library",
|
|
7342
7414
|
"list_templates",
|
|
7343
7415
|
"preview_template",
|
|
7344
7416
|
"template_history",
|
|
7345
|
-
"update_template"
|
|
7417
|
+
"update_template",
|
|
7418
|
+
"write_template_library"
|
|
7346
7419
|
],
|
|
7347
7420
|
webhooks: ["create_webhook", "delete_webhook", "list_webhooks"],
|
|
7348
7421
|
machines: [
|
|
@@ -7857,6 +7930,39 @@ var TODOS_CLI_MCP_PARITY = [
|
|
|
7857
7930
|
mcpTool: "create_plan"
|
|
7858
7931
|
}
|
|
7859
7932
|
},
|
|
7933
|
+
{
|
|
7934
|
+
domain: "templates",
|
|
7935
|
+
cliCommands: [
|
|
7936
|
+
"todos template-library",
|
|
7937
|
+
"todos template-init",
|
|
7938
|
+
"todos template-preview",
|
|
7939
|
+
"todos templates --use",
|
|
7940
|
+
"todos template-export",
|
|
7941
|
+
"todos template-import",
|
|
7942
|
+
"todos template-history"
|
|
7943
|
+
],
|
|
7944
|
+
mcpTools: [
|
|
7945
|
+
"list_template_library",
|
|
7946
|
+
"write_template_library",
|
|
7947
|
+
"init_templates",
|
|
7948
|
+
"preview_template",
|
|
7949
|
+
"create_task_from_template",
|
|
7950
|
+
"create_template",
|
|
7951
|
+
"list_templates",
|
|
7952
|
+
"update_template",
|
|
7953
|
+
"delete_template",
|
|
7954
|
+
"export_template",
|
|
7955
|
+
"import_template",
|
|
7956
|
+
"template_history"
|
|
7957
|
+
],
|
|
7958
|
+
jsonContracts: ["template", "task", "structured_error", "api_error"],
|
|
7959
|
+
errorContracts: ["structured_error", "api_error"],
|
|
7960
|
+
status: "matched",
|
|
7961
|
+
example: {
|
|
7962
|
+
cli: "todos template-library --json",
|
|
7963
|
+
mcpTool: "list_template_library"
|
|
7964
|
+
}
|
|
7965
|
+
},
|
|
7860
7966
|
{
|
|
7861
7967
|
domain: "workspace-trust",
|
|
7862
7968
|
cliCommands: [
|
|
@@ -8109,6 +8215,10 @@ var TODOS_CLI_MCP_PARITY = [
|
|
|
8109
8215
|
domain: "search",
|
|
8110
8216
|
cliCommands: [
|
|
8111
8217
|
"todos search",
|
|
8218
|
+
"todos views save",
|
|
8219
|
+
"todos views list",
|
|
8220
|
+
"todos views run",
|
|
8221
|
+
"todos views delete",
|
|
8112
8222
|
"todos status",
|
|
8113
8223
|
"todos recap",
|
|
8114
8224
|
"todos standup",
|
|
@@ -8120,6 +8230,10 @@ var TODOS_CLI_MCP_PARITY = [
|
|
|
8120
8230
|
],
|
|
8121
8231
|
mcpTools: [
|
|
8122
8232
|
"search_tasks",
|
|
8233
|
+
"save_search_view",
|
|
8234
|
+
"list_search_views",
|
|
8235
|
+
"run_search_view",
|
|
8236
|
+
"delete_search_view",
|
|
8123
8237
|
"get_status",
|
|
8124
8238
|
"standup",
|
|
8125
8239
|
"get_task_stats",
|
|
@@ -8128,7 +8242,7 @@ var TODOS_CLI_MCP_PARITY = [
|
|
|
8128
8242
|
"get_task_graph",
|
|
8129
8243
|
"get_recent_activity"
|
|
8130
8244
|
],
|
|
8131
|
-
jsonContracts: ["task", "status_summary", "audit_history", "structured_error", "api_error"],
|
|
8245
|
+
jsonContracts: ["task", "saved_search_view", "saved_search_run_result", "status_summary", "audit_history", "structured_error", "api_error"],
|
|
8132
8246
|
errorContracts: ["structured_error", "api_error"],
|
|
8133
8247
|
status: "matched",
|
|
8134
8248
|
example: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"packageName": "@hasna/todos",
|
|
3
|
-
"packageVersion": "0.11.
|
|
3
|
+
"packageVersion": "0.11.43",
|
|
4
4
|
"repository": "https://github.com/hasna/todos.git",
|
|
5
|
-
"gitCommit": "
|
|
6
|
-
"generatedAt": "2026-05-
|
|
5
|
+
"gitCommit": "3489eb9408277001cd3be9bb5c2996bb301e431d",
|
|
6
|
+
"generatedAt": "2026-05-21T17:17:52.886Z"
|
|
7
7
|
}
|
package/dist/server/index.js
CHANGED
|
@@ -981,6 +981,19 @@ var init_migrations = __esm(() => {
|
|
|
981
981
|
);
|
|
982
982
|
CREATE INDEX IF NOT EXISTS idx_handoff_acks_agent ON handoff_acknowledgements(agent_id, acknowledged_at);
|
|
983
983
|
INSERT OR IGNORE INTO _migrations (id) VALUES (54);
|
|
984
|
+
`,
|
|
985
|
+
`
|
|
986
|
+
CREATE TABLE IF NOT EXISTS saved_search_views (
|
|
987
|
+
id TEXT PRIMARY KEY,
|
|
988
|
+
name TEXT NOT NULL UNIQUE,
|
|
989
|
+
description TEXT,
|
|
990
|
+
scope TEXT NOT NULL DEFAULT 'tasks' CHECK(scope IN ('all', 'tasks', 'projects', 'plans', 'runs', 'comments')),
|
|
991
|
+
filters TEXT NOT NULL DEFAULT '{}',
|
|
992
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
993
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
994
|
+
);
|
|
995
|
+
CREATE INDEX IF NOT EXISTS idx_saved_search_views_scope ON saved_search_views(scope);
|
|
996
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (55);
|
|
984
997
|
`
|
|
985
998
|
];
|
|
986
999
|
});
|
|
@@ -1157,6 +1170,17 @@ function ensureSchema(db) {
|
|
|
1157
1170
|
PRIMARY KEY (handoff_id, agent_id)
|
|
1158
1171
|
)`);
|
|
1159
1172
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_handoff_acks_agent ON handoff_acknowledgements(agent_id, acknowledged_at)");
|
|
1173
|
+
ensureTable("saved_search_views", `
|
|
1174
|
+
CREATE TABLE saved_search_views (
|
|
1175
|
+
id TEXT PRIMARY KEY,
|
|
1176
|
+
name TEXT NOT NULL UNIQUE,
|
|
1177
|
+
description TEXT,
|
|
1178
|
+
scope TEXT NOT NULL DEFAULT 'tasks' CHECK(scope IN ('all', 'tasks', 'projects', 'plans', 'runs', 'comments')),
|
|
1179
|
+
filters TEXT NOT NULL DEFAULT '{}',
|
|
1180
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1181
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
1182
|
+
)`);
|
|
1183
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_saved_search_views_scope ON saved_search_views(scope)");
|
|
1160
1184
|
ensureTable("task_relationships", `
|
|
1161
1185
|
CREATE TABLE task_relationships (
|
|
1162
1186
|
id TEXT PRIMARY KEY,
|
package/dist/storage.js
CHANGED
|
@@ -1109,6 +1109,19 @@ var init_migrations = __esm(() => {
|
|
|
1109
1109
|
);
|
|
1110
1110
|
CREATE INDEX IF NOT EXISTS idx_handoff_acks_agent ON handoff_acknowledgements(agent_id, acknowledged_at);
|
|
1111
1111
|
INSERT OR IGNORE INTO _migrations (id) VALUES (54);
|
|
1112
|
+
`,
|
|
1113
|
+
`
|
|
1114
|
+
CREATE TABLE IF NOT EXISTS saved_search_views (
|
|
1115
|
+
id TEXT PRIMARY KEY,
|
|
1116
|
+
name TEXT NOT NULL UNIQUE,
|
|
1117
|
+
description TEXT,
|
|
1118
|
+
scope TEXT NOT NULL DEFAULT 'tasks' CHECK(scope IN ('all', 'tasks', 'projects', 'plans', 'runs', 'comments')),
|
|
1119
|
+
filters TEXT NOT NULL DEFAULT '{}',
|
|
1120
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1121
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
1122
|
+
);
|
|
1123
|
+
CREATE INDEX IF NOT EXISTS idx_saved_search_views_scope ON saved_search_views(scope);
|
|
1124
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (55);
|
|
1112
1125
|
`
|
|
1113
1126
|
];
|
|
1114
1127
|
});
|
|
@@ -1285,6 +1298,17 @@ function ensureSchema(db) {
|
|
|
1285
1298
|
PRIMARY KEY (handoff_id, agent_id)
|
|
1286
1299
|
)`);
|
|
1287
1300
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_handoff_acks_agent ON handoff_acknowledgements(agent_id, acknowledged_at)");
|
|
1301
|
+
ensureTable("saved_search_views", `
|
|
1302
|
+
CREATE TABLE saved_search_views (
|
|
1303
|
+
id TEXT PRIMARY KEY,
|
|
1304
|
+
name TEXT NOT NULL UNIQUE,
|
|
1305
|
+
description TEXT,
|
|
1306
|
+
scope TEXT NOT NULL DEFAULT 'tasks' CHECK(scope IN ('all', 'tasks', 'projects', 'plans', 'runs', 'comments')),
|
|
1307
|
+
filters TEXT NOT NULL DEFAULT '{}',
|
|
1308
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1309
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
1310
|
+
)`);
|
|
1311
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_saved_search_views_scope ON saved_search_views(scope)");
|
|
1288
1312
|
ensureTable("task_relationships", `
|
|
1289
1313
|
CREATE TABLE task_relationships (
|
|
1290
1314
|
id TEXT PRIMARY KEY,
|