@hasna/todos 0.11.58 → 0.11.59

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.
Files changed (41) hide show
  1. package/README.md +38 -0
  2. package/dist/cli/commands/mcp-hooks-commands.d.ts.map +1 -1
  3. package/dist/cli/commands/task-commands.d.ts.map +1 -1
  4. package/dist/cli/index.js +1420 -187
  5. package/dist/contracts.d.ts.map +1 -1
  6. package/dist/contracts.js +502 -4
  7. package/dist/db/findings.d.ts +108 -0
  8. package/dist/db/findings.d.ts.map +1 -0
  9. package/dist/db/migrations.d.ts.map +1 -1
  10. package/dist/db/schema.d.ts.map +1 -1
  11. package/dist/db/task-crud.d.ts +3 -1
  12. package/dist/db/task-crud.d.ts.map +1 -1
  13. package/dist/db/task-runs.d.ts +56 -0
  14. package/dist/db/task-runs.d.ts.map +1 -1
  15. package/dist/db/tasks.d.ts +2 -2
  16. package/dist/db/tasks.d.ts.map +1 -1
  17. package/dist/index.d.ts +5 -3
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +870 -5
  20. package/dist/json-contracts.d.ts.map +1 -1
  21. package/dist/lib/access-profiles.d.ts.map +1 -1
  22. package/dist/lib/event-hooks.d.ts +1 -1
  23. package/dist/lib/event-hooks.d.ts.map +1 -1
  24. package/dist/lib/shared-events.d.ts +1 -1
  25. package/dist/lib/shared-events.d.ts.map +1 -1
  26. package/dist/mcp/index.js +984 -17
  27. package/dist/mcp/token-utils.d.ts.map +1 -1
  28. package/dist/mcp/tools/task-crud.d.ts.map +1 -1
  29. package/dist/mcp/tools/task-resources.d.ts.map +1 -1
  30. package/dist/mcp.js +12 -1
  31. package/dist/registry.js +502 -4
  32. package/dist/release-provenance.json +3 -3
  33. package/dist/server/index.js +984 -17
  34. package/dist/server/routes.d.ts +1 -0
  35. package/dist/server/routes.d.ts.map +1 -1
  36. package/dist/server/serve.d.ts +2 -0
  37. package/dist/server/serve.d.ts.map +1 -1
  38. package/dist/storage.js +375 -1
  39. package/dist/types/index.d.ts +11 -0
  40. package/dist/types/index.d.ts.map +1 -1
  41. package/package.json +1 -1
@@ -32,6 +32,7 @@ export declare function handleHeadlessBoundary(_ctx: RouteContext, json: (data:
32
32
  export declare function handleStats(_ctx: RouteContext, json: (data: unknown, status?: number) => Response): Response;
33
33
  export declare function handleListTasks(_req: Request, url: URL, _ctx: RouteContext, json: (data: unknown, status?: number) => Response, taskToSummary: (task: Task, fields?: string[]) => unknown): Promise<Response>;
34
34
  export declare function handleCreateTask(req: Request, ctx: RouteContext, json: (data: unknown, status?: number) => Response, taskToSummary: (task: Task, fields?: string[]) => unknown): Promise<Response>;
35
+ export declare function handleUpsertTask(req: Request, ctx: RouteContext, json: (data: unknown, status?: number) => Response, taskToSummary: (task: Task, fields?: string[]) => unknown): Promise<Response>;
35
36
  export declare function handleTasksExport(_req: Request, url: URL, _ctx: RouteContext, _json: (data: unknown, status?: number) => Response, taskToSummary: (task: Task, fields?: string[]) => unknown): Response;
36
37
  export declare function handleTasksBulk(req: Request, _ctx: RouteContext, json: (data: unknown, status?: number) => Response): Promise<Response>;
37
38
  export declare function handleTasksStatus(_req: Request, url: URL, _ctx: RouteContext, json: (data: unknown, status?: number) => Response): Response;
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}
@@ -20,8 +20,10 @@ export declare function taskToSummary(task: Task, fields?: string[]): {
20
20
  task_list_id: string | null;
21
21
  agent_id: string | null;
22
22
  assigned_to: string | null;
23
+ working_dir: string | null;
23
24
  locked_by: string | null;
24
25
  tags: string[];
26
+ metadata: Record<string, unknown>;
25
27
  version: number;
26
28
  created_at: string;
27
29
  updated_at: string;
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AA+B9C,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAW7C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMnD,CAAC;AA8CF,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,SAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,QAAQ,CASjF;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAYjE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;EAwB1D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAub3H"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AA+B9C,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAW7C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMnD,CAAC;AA8CF,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,SAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,QAAQ,CASjF;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAYjE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;EA0B1D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4b3H"}
package/dist/storage.js CHANGED
@@ -1269,6 +1269,49 @@ var init_migrations = __esm(() => {
1269
1269
  CREATE INDEX IF NOT EXISTS idx_local_retrospectives_plan ON local_retrospectives(plan_id);
1270
1270
  CREATE INDEX IF NOT EXISTS idx_local_retrospectives_agent ON local_retrospectives(agent_id);
1271
1271
  INSERT OR IGNORE INTO _migrations (id) VALUES (61);
1272
+ `,
1273
+ `
1274
+ CREATE TABLE IF NOT EXISTS task_run_transactions (
1275
+ id TEXT PRIMARY KEY,
1276
+ task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
1277
+ run_id TEXT REFERENCES task_runs(id) ON DELETE SET NULL,
1278
+ key TEXT NOT NULL,
1279
+ loop_id TEXT,
1280
+ loop_run_id TEXT,
1281
+ metadata TEXT DEFAULT '{}',
1282
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
1283
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
1284
+ UNIQUE(task_id, key)
1285
+ );
1286
+ CREATE INDEX IF NOT EXISTS idx_task_run_transactions_task_key ON task_run_transactions(task_id, key);
1287
+ CREATE INDEX IF NOT EXISTS idx_task_run_transactions_key ON task_run_transactions(key);
1288
+ CREATE INDEX IF NOT EXISTS idx_task_run_transactions_run ON task_run_transactions(run_id);
1289
+
1290
+ CREATE TABLE IF NOT EXISTS task_findings (
1291
+ id TEXT PRIMARY KEY,
1292
+ task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
1293
+ run_id TEXT REFERENCES task_runs(id) ON DELETE SET NULL,
1294
+ fingerprint TEXT NOT NULL,
1295
+ title TEXT NOT NULL,
1296
+ severity TEXT NOT NULL DEFAULT 'medium' CHECK(severity IN ('low', 'medium', 'high', 'critical')),
1297
+ status TEXT NOT NULL DEFAULT 'open' CHECK(status IN ('open', 'resolved', 'ignored')),
1298
+ source TEXT,
1299
+ summary TEXT,
1300
+ artifact_path TEXT,
1301
+ metadata TEXT DEFAULT '{}',
1302
+ first_seen_at TEXT NOT NULL DEFAULT (datetime('now')),
1303
+ last_seen_at TEXT NOT NULL DEFAULT (datetime('now')),
1304
+ resolved_at TEXT,
1305
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
1306
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
1307
+ UNIQUE(task_id, fingerprint)
1308
+ );
1309
+ CREATE INDEX IF NOT EXISTS idx_task_findings_task ON task_findings(task_id);
1310
+ CREATE INDEX IF NOT EXISTS idx_task_findings_run ON task_findings(run_id);
1311
+ CREATE INDEX IF NOT EXISTS idx_task_findings_status ON task_findings(status);
1312
+ CREATE INDEX IF NOT EXISTS idx_task_findings_source ON task_findings(source);
1313
+ CREATE INDEX IF NOT EXISTS idx_task_findings_fingerprint ON task_findings(fingerprint);
1314
+ INSERT OR IGNORE INTO _migrations (id) VALUES (62);
1272
1315
  `
1273
1316
  ];
1274
1317
  });
@@ -1706,6 +1749,47 @@ function ensureSchema(db) {
1706
1749
  ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_run_artifacts_run ON task_run_artifacts(run_id)");
1707
1750
  ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_run_artifacts_task ON task_run_artifacts(task_id)");
1708
1751
  ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_run_artifacts_path ON task_run_artifacts(path)");
1752
+ ensureTable("task_run_transactions", `
1753
+ CREATE TABLE task_run_transactions (
1754
+ id TEXT PRIMARY KEY,
1755
+ task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
1756
+ run_id TEXT REFERENCES task_runs(id) ON DELETE SET NULL,
1757
+ key TEXT NOT NULL,
1758
+ loop_id TEXT,
1759
+ loop_run_id TEXT,
1760
+ metadata TEXT DEFAULT '{}',
1761
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
1762
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
1763
+ UNIQUE(task_id, key)
1764
+ )`);
1765
+ ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_run_transactions_task_key ON task_run_transactions(task_id, key)");
1766
+ ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_run_transactions_key ON task_run_transactions(key)");
1767
+ ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_run_transactions_run ON task_run_transactions(run_id)");
1768
+ ensureTable("task_findings", `
1769
+ CREATE TABLE task_findings (
1770
+ id TEXT PRIMARY KEY,
1771
+ task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
1772
+ run_id TEXT REFERENCES task_runs(id) ON DELETE SET NULL,
1773
+ fingerprint TEXT NOT NULL,
1774
+ title TEXT NOT NULL,
1775
+ severity TEXT NOT NULL DEFAULT 'medium' CHECK(severity IN ('low', 'medium', 'high', 'critical')),
1776
+ status TEXT NOT NULL DEFAULT 'open' CHECK(status IN ('open', 'resolved', 'ignored')),
1777
+ source TEXT,
1778
+ summary TEXT,
1779
+ artifact_path TEXT,
1780
+ metadata TEXT DEFAULT '{}',
1781
+ first_seen_at TEXT NOT NULL DEFAULT (datetime('now')),
1782
+ last_seen_at TEXT NOT NULL DEFAULT (datetime('now')),
1783
+ resolved_at TEXT,
1784
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
1785
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
1786
+ UNIQUE(task_id, fingerprint)
1787
+ )`);
1788
+ ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_findings_task ON task_findings(task_id)");
1789
+ ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_findings_run ON task_findings(run_id)");
1790
+ ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_findings_status ON task_findings(status)");
1791
+ ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_findings_source ON task_findings(source)");
1792
+ ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_findings_fingerprint ON task_findings(fingerprint)");
1709
1793
  ensureTable("inbox_items", `
1710
1794
  CREATE TABLE inbox_items (
1711
1795
  id TEXT PRIMARY KEY,
@@ -4180,6 +4264,7 @@ var LOCAL_EVENT_TYPES = [
4180
4264
  "task.blocked",
4181
4265
  "task.started",
4182
4266
  "task.completed",
4267
+ "task.updated",
4183
4268
  "task.due",
4184
4269
  "task.due_soon",
4185
4270
  "task.failed",
@@ -5518,6 +5603,17 @@ function replaceTaskTags(taskId, tags, db) {
5518
5603
  db.run("DELETE FROM task_tags WHERE task_id = ?", [taskId]);
5519
5604
  insertTaskTags(taskId, tags, db);
5520
5605
  }
5606
+ function addMetadataConditions(metadata, conditions, params) {
5607
+ if (!metadata)
5608
+ return;
5609
+ for (const [key, value] of Object.entries(metadata)) {
5610
+ if (!/^[A-Za-z0-9_.-]+$/.test(key)) {
5611
+ throw new Error(`Invalid metadata filter key: ${key}`);
5612
+ }
5613
+ conditions.push(`json_extract(metadata, '$."${key}"') = ?`);
5614
+ params.push(value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean" ? value : JSON.stringify(value));
5615
+ }
5616
+ }
5521
5617
  function createTask(input, db) {
5522
5618
  const d = db || getDatabase();
5523
5619
  const timestamp = now();
@@ -5700,6 +5796,7 @@ function listTasks(filter = {}, db) {
5700
5796
  params.push(filter.task_type);
5701
5797
  }
5702
5798
  }
5799
+ addMetadataConditions(filter.metadata, conditions, params);
5703
5800
  const PRIORITY_RANK = `CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END`;
5704
5801
  if (filter.cursor) {
5705
5802
  try {
@@ -5724,6 +5821,54 @@ function listTasks(filter = {}, db) {
5724
5821
  const rows = d.query(`SELECT * FROM tasks ${where} ORDER BY ${PRIORITY_RANK}, created_at DESC${limitClause}`).all(...params);
5725
5822
  return rows.map(rowToTask);
5726
5823
  }
5824
+ function getTaskByFingerprint(fingerprint, db) {
5825
+ const tasks = listTasks({ metadata: { fingerprint }, limit: 1 }, db);
5826
+ return tasks[0] ?? null;
5827
+ }
5828
+ function mergeTaskMetadata(current, next, fingerprint) {
5829
+ return {
5830
+ ...current,
5831
+ ...next ?? {},
5832
+ fingerprint
5833
+ };
5834
+ }
5835
+ function upsertTaskByFingerprint(input, db) {
5836
+ const d = db || getDatabase();
5837
+ const fingerprint = input.fingerprint.trim();
5838
+ if (!fingerprint)
5839
+ throw new Error("fingerprint is required");
5840
+ const existing = getTaskByFingerprint(fingerprint, d);
5841
+ const metadata = mergeTaskMetadata(existing?.metadata ?? {}, input.metadata, fingerprint);
5842
+ if (!existing) {
5843
+ const task2 = createTask({ ...input, metadata }, d);
5844
+ return { task: task2, created: true };
5845
+ }
5846
+ const task = updateTask(existing.id, {
5847
+ version: existing.version,
5848
+ title: input.title,
5849
+ description: input.description,
5850
+ status: input.status,
5851
+ priority: input.priority,
5852
+ project_id: input.project_id,
5853
+ assigned_to: input.assigned_to,
5854
+ working_dir: input.working_dir,
5855
+ plan_id: input.plan_id,
5856
+ task_list_id: input.task_list_id,
5857
+ tags: input.tags,
5858
+ metadata,
5859
+ due_at: input.due_at,
5860
+ estimated_minutes: input.estimated_minutes,
5861
+ sla_minutes: input.sla_minutes,
5862
+ confidence: input.confidence,
5863
+ retry_count: input.retry_count,
5864
+ max_retries: input.max_retries,
5865
+ retry_after: input.retry_after,
5866
+ requires_approval: input.requires_approval,
5867
+ recurrence_rule: input.recurrence_rule,
5868
+ task_type: input.task_type
5869
+ }, d);
5870
+ return { task, created: false };
5871
+ }
5727
5872
  function countTasks(filter = {}, db) {
5728
5873
  const d = db || getDatabase();
5729
5874
  const conditions = [];
@@ -5787,6 +5932,7 @@ function countTasks(filter = {}, db) {
5787
5932
  conditions.push("task_list_id = ?");
5788
5933
  params.push(filter.task_list_id);
5789
5934
  }
5935
+ addMetadataConditions(filter.metadata, conditions, params);
5790
5936
  if (!filter.include_archived) {
5791
5937
  conditions.push("archived_at IS NULL");
5792
5938
  }
@@ -5837,6 +5983,10 @@ function updateTask(id, input, db) {
5837
5983
  sets.push("assigned_to = ?");
5838
5984
  params.push(input.assigned_to);
5839
5985
  }
5986
+ if (input.working_dir !== undefined) {
5987
+ sets.push("working_dir = ?");
5988
+ params.push(input.working_dir);
5989
+ }
5840
5990
  if (input.tags !== undefined) {
5841
5991
  sets.push("tags = ?");
5842
5992
  params.push(JSON.stringify(input.tags));
@@ -5925,6 +6075,8 @@ function updateTask(id, input, db) {
5925
6075
  logTaskChange(id, "update", "title", task.title, input.title, agentId, d);
5926
6076
  if (input.assigned_to !== undefined && input.assigned_to !== task.assigned_to)
5927
6077
  logTaskChange(id, "update", "assigned_to", task.assigned_to, input.assigned_to, agentId, d);
6078
+ if (input.working_dir !== undefined && input.working_dir !== task.working_dir)
6079
+ logTaskChange(id, "update", "working_dir", task.working_dir, input.working_dir, agentId, d);
5928
6080
  if (input.approved_by !== undefined)
5929
6081
  logTaskChange(id, "approve", "approved_by", null, input.approved_by, agentId, d);
5930
6082
  const updatedTask = {
@@ -5960,6 +6112,10 @@ function updateTask(id, input, db) {
5960
6112
  if (input.approved_by !== undefined) {
5961
6113
  emitLocalEventHooksQuiet({ type: "approval.decided", payload: { id, approved_by: input.approved_by, title: task.title } });
5962
6114
  }
6115
+ const updatePayload = taskEventData(updatedTask);
6116
+ dispatchWebhook2("task.updated", updatePayload, d).catch(() => {});
6117
+ emitLocalEventHooksQuiet({ type: "task.updated", payload: updatePayload });
6118
+ emitSharedTaskEventQuiet({ type: "task.updated", task: updatedTask });
5963
6119
  return updatedTask;
5964
6120
  }
5965
6121
  function deleteTask(id, db) {
@@ -8655,6 +8811,7 @@ function getTaskTraceability(taskId, db) {
8655
8811
 
8656
8812
  // src/db/task-runs.ts
8657
8813
  init_redaction();
8814
+ var LOOP_RUN_TRANSACTION_SCHEMA_VERSION = "todos.loop_run_transaction.v1";
8658
8815
  function parseObject(value) {
8659
8816
  if (!value)
8660
8817
  return {};
@@ -8677,6 +8834,72 @@ function rowToArtifact(row) {
8677
8834
  function getRunRow(runId, db) {
8678
8835
  return db.query("SELECT * FROM task_runs WHERE id = ?").get(runId);
8679
8836
  }
8837
+ function normalizeTransactionKey(input) {
8838
+ const key = (input.key || input.loop_run_id || input.loop_id || "").trim();
8839
+ if (!key)
8840
+ throw new Error("idempotent run transactions require --key, --loop-run-id, or --loop-id");
8841
+ return key.toLowerCase().replace(/[^a-z0-9._:/-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 240);
8842
+ }
8843
+ function loopTransactionMetadata(record) {
8844
+ const value = record.metadata["loop_transaction"];
8845
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
8846
+ }
8847
+ function runKey(record) {
8848
+ const tx = loopTransactionMetadata(record);
8849
+ const key = tx["idempotency_key"] ?? record.metadata["idempotency_key"];
8850
+ return typeof key === "string" ? key : null;
8851
+ }
8852
+ function loopId(record) {
8853
+ const tx = loopTransactionMetadata(record);
8854
+ const value = tx["loop_id"] ?? record.metadata["loop_id"];
8855
+ return typeof value === "string" ? value : null;
8856
+ }
8857
+ function loopRunId(record) {
8858
+ const tx = loopTransactionMetadata(record);
8859
+ const value = tx["loop_run_id"] ?? record.metadata["loop_run_id"];
8860
+ return typeof value === "string" ? value : null;
8861
+ }
8862
+ function getTaskRunTransactionByKey(key, taskId, db) {
8863
+ if (taskId) {
8864
+ return db.query("SELECT * FROM task_run_transactions WHERE task_id = ? AND key = ?").get(taskId, key);
8865
+ }
8866
+ const rows = db.query("SELECT * FROM task_run_transactions WHERE key = ? ORDER BY created_at DESC LIMIT 2").all(key);
8867
+ if (rows.length > 1)
8868
+ throw new Error(`Run transaction key is ambiguous across tasks: ${key}. Pass task_id.`);
8869
+ return rows[0] ?? null;
8870
+ }
8871
+ function summarizeTaskRun(run) {
8872
+ return {
8873
+ id: run.id,
8874
+ task_id: run.task_id,
8875
+ agent_id: run.agent_id,
8876
+ title: run.title,
8877
+ status: run.status,
8878
+ summary: run.summary,
8879
+ idempotency_key: runKey(run),
8880
+ loop_id: loopId(run),
8881
+ loop_run_id: loopRunId(run),
8882
+ metadata_keys: Object.keys(run.metadata).sort(),
8883
+ started_at: run.started_at,
8884
+ completed_at: run.completed_at,
8885
+ updated_at: run.updated_at
8886
+ };
8887
+ }
8888
+ function findTaskRunByTransactionKey(key, taskId, db) {
8889
+ const d = db || getDatabase();
8890
+ const normalized = normalizeTransactionKey({ key });
8891
+ const transaction = getTaskRunTransactionByKey(normalized, taskId, d);
8892
+ if (transaction?.run_id)
8893
+ return getTaskRun(transaction.run_id, d);
8894
+ return null;
8895
+ }
8896
+ function loopRunCommands(run, key) {
8897
+ return [
8898
+ run ? `todos runs show ${run.id.slice(0, 8)}` : "todos runs list",
8899
+ run ? `todos findings list --task ${run.task_id.slice(0, 8)} --json` : "todos findings list --json",
8900
+ `todos runs begin <task-id> --key ${key} --apply --json`
8901
+ ];
8902
+ }
8680
8903
  function resolveTaskRunId(idOrPrefix, db) {
8681
8904
  const d = db || getDatabase();
8682
8905
  const rows = d.query("SELECT id FROM task_runs WHERE id = ? OR id LIKE ? ORDER BY created_at DESC LIMIT 2").all(idOrPrefix, `${idOrPrefix}%`);
@@ -8695,7 +8918,7 @@ function startTaskRun(input, db) {
8695
8918
  const d = db || getDatabase();
8696
8919
  if (!getTask(input.task_id, d))
8697
8920
  throw new TaskNotFoundError(input.task_id);
8698
- const id = uuid();
8921
+ const id = input.id ?? uuid();
8699
8922
  const timestamp = input.started_at || now();
8700
8923
  if (input.claim && input.agent_id) {
8701
8924
  startTask(input.task_id, input.agent_id, d);
@@ -8733,6 +8956,97 @@ function startTaskRun(input, db) {
8733
8956
  emitLocalEventHooksQuiet({ type: "run.started", payload: { id: run.id, task_id: run.task_id, agent_id: run.agent_id, title: run.title } });
8734
8957
  return run;
8735
8958
  }
8959
+ function beginTaskRunTransaction(input, db) {
8960
+ const d = db || getDatabase();
8961
+ if (!getTask(input.task_id, d))
8962
+ throw new TaskNotFoundError(input.task_id);
8963
+ const timestamp = input.started_at || now();
8964
+ const key = normalizeTransactionKey(input);
8965
+ const existing = findTaskRunByTransactionKey(key, input.task_id, d);
8966
+ const dryRun = !input.apply;
8967
+ if (existing) {
8968
+ return {
8969
+ schema_version: LOOP_RUN_TRANSACTION_SCHEMA_VERSION,
8970
+ local_only: true,
8971
+ dry_run: dryRun,
8972
+ processed_at: timestamp,
8973
+ action: "matched",
8974
+ key,
8975
+ run: summarizeTaskRun(existing),
8976
+ warnings: existing.status === "running" ? [] : [`matched ${existing.status} run`],
8977
+ commands: loopRunCommands(existing, key)
8978
+ };
8979
+ }
8980
+ if (dryRun) {
8981
+ return {
8982
+ schema_version: LOOP_RUN_TRANSACTION_SCHEMA_VERSION,
8983
+ local_only: true,
8984
+ dry_run: true,
8985
+ processed_at: timestamp,
8986
+ action: "preview",
8987
+ key,
8988
+ run: null,
8989
+ warnings: [],
8990
+ commands: loopRunCommands(null, key)
8991
+ };
8992
+ }
8993
+ const metadata = redactValue({
8994
+ ...input.metadata || {},
8995
+ loop_transaction: {
8996
+ schema_version: LOOP_RUN_TRANSACTION_SCHEMA_VERSION,
8997
+ idempotency_key: key,
8998
+ loop_id: input.loop_id ?? null,
8999
+ loop_run_id: input.loop_run_id ?? null,
9000
+ first_seen_at: timestamp
9001
+ },
9002
+ idempotency_key: key
9003
+ });
9004
+ const created = d.transaction(() => {
9005
+ d.run(`INSERT OR IGNORE INTO task_run_transactions (
9006
+ id, task_id, run_id, key, loop_id, loop_run_id, metadata, created_at, updated_at
9007
+ ) VALUES (?, ?, NULL, ?, ?, ?, ?, ?, ?)`, [
9008
+ uuid(),
9009
+ input.task_id,
9010
+ key,
9011
+ input.loop_id ?? null,
9012
+ input.loop_run_id ?? null,
9013
+ JSON.stringify(metadata),
9014
+ timestamp,
9015
+ timestamp
9016
+ ]);
9017
+ const transaction = getTaskRunTransactionByKey(key, input.task_id, d);
9018
+ if (!transaction)
9019
+ throw new Error(`Could not create run transaction for key: ${key}`);
9020
+ if (transaction.run_id) {
9021
+ const existingRun = getTaskRun(transaction.run_id, d);
9022
+ if (existingRun)
9023
+ return { run: existingRun, action: "matched" };
9024
+ }
9025
+ const run = startTaskRun({
9026
+ id: uuid(),
9027
+ task_id: input.task_id,
9028
+ agent_id: input.agent_id,
9029
+ title: input.title,
9030
+ summary: input.summary,
9031
+ metadata,
9032
+ claim: input.claim,
9033
+ started_at: timestamp
9034
+ }, d);
9035
+ d.run("UPDATE task_run_transactions SET run_id = ?, loop_id = COALESCE(?, loop_id), loop_run_id = COALESCE(?, loop_run_id), metadata = ?, updated_at = ? WHERE id = ?", [run.id, input.loop_id ?? null, input.loop_run_id ?? null, JSON.stringify(metadata), timestamp, transaction.id]);
9036
+ return { run, action: "created" };
9037
+ })();
9038
+ return {
9039
+ schema_version: LOOP_RUN_TRANSACTION_SCHEMA_VERSION,
9040
+ local_only: true,
9041
+ dry_run: false,
9042
+ processed_at: timestamp,
9043
+ action: created.action,
9044
+ key,
9045
+ run: summarizeTaskRun(created.run),
9046
+ warnings: [],
9047
+ commands: loopRunCommands(created.run, key)
9048
+ };
9049
+ }
8736
9050
  function addTaskRunEvent(input, db) {
8737
9051
  const d = db || getDatabase();
8738
9052
  const runId = resolveTaskRunId(input.run_id, d);
@@ -8912,6 +9226,66 @@ function finishTaskRun(input, db) {
8912
9226
  });
8913
9227
  return updated;
8914
9228
  }
9229
+ function finishTaskRunTransaction(input, db) {
9230
+ const d = db || getDatabase();
9231
+ const timestamp = input.completed_at || now();
9232
+ const status = input.status || "completed";
9233
+ const key = input.key ? normalizeTransactionKey({ key: input.key }) : "";
9234
+ const run = input.run_id ? getTaskRun(resolveTaskRunId(input.run_id, d), d) : key ? findTaskRunByTransactionKey(key, input.task_id, d) : null;
9235
+ if (!run) {
9236
+ throw new Error(input.run_id ? `Run not found: ${input.run_id}` : "runs finish requires a run id or --key");
9237
+ }
9238
+ if (input.task_id && run.task_id !== input.task_id) {
9239
+ throw new Error(`Run ${run.id} belongs to task ${run.task_id}, not ${input.task_id}`);
9240
+ }
9241
+ const resolvedKey = key || runKey(run) || run.id;
9242
+ const dryRun = input.apply === false;
9243
+ if (run.status !== "running") {
9244
+ const conflict = run.status !== status;
9245
+ return {
9246
+ schema_version: LOOP_RUN_TRANSACTION_SCHEMA_VERSION,
9247
+ local_only: true,
9248
+ dry_run: dryRun,
9249
+ processed_at: timestamp,
9250
+ action: conflict ? "conflict" : "matched",
9251
+ key: resolvedKey,
9252
+ run: summarizeTaskRun(run),
9253
+ warnings: conflict ? [`run is already ${run.status}; requested ${status}`] : [],
9254
+ commands: loopRunCommands(run, resolvedKey)
9255
+ };
9256
+ }
9257
+ if (dryRun) {
9258
+ return {
9259
+ schema_version: LOOP_RUN_TRANSACTION_SCHEMA_VERSION,
9260
+ local_only: true,
9261
+ dry_run: true,
9262
+ processed_at: timestamp,
9263
+ action: "preview",
9264
+ key: resolvedKey,
9265
+ run: summarizeTaskRun({ ...run, status, summary: input.summary ?? run.summary, completed_at: timestamp, updated_at: timestamp }),
9266
+ warnings: [],
9267
+ commands: loopRunCommands(run, resolvedKey)
9268
+ };
9269
+ }
9270
+ const finished = finishTaskRun({
9271
+ run_id: run.id,
9272
+ status,
9273
+ summary: input.summary,
9274
+ agent_id: input.agent_id,
9275
+ completed_at: timestamp
9276
+ }, d);
9277
+ return {
9278
+ schema_version: LOOP_RUN_TRANSACTION_SCHEMA_VERSION,
9279
+ local_only: true,
9280
+ dry_run: false,
9281
+ processed_at: timestamp,
9282
+ action: "finished",
9283
+ key: resolvedKey,
9284
+ run: summarizeTaskRun(finished),
9285
+ warnings: [],
9286
+ commands: loopRunCommands(finished, resolvedKey)
9287
+ };
9288
+ }
8915
9289
  function listTaskRuns(taskId, db) {
8916
9290
  const d = db || getDatabase();
8917
9291
  const rows = taskId ? d.query("SELECT * FROM task_runs WHERE task_id = ? ORDER BY started_at DESC, created_at DESC").all(taskId) : d.query("SELECT * FROM task_runs ORDER BY started_at DESC, created_at DESC LIMIT 100").all();
@@ -385,6 +385,14 @@ export interface CreateTaskInput {
385
385
  assigned_from_project?: string;
386
386
  task_type?: string;
387
387
  }
388
+ export interface UpsertTaskByFingerprintInput extends CreateTaskInput {
389
+ /** Stable top-level metadata fingerprint used for deterministic dedupe. */
390
+ fingerprint: string;
391
+ }
392
+ export interface UpsertTaskByFingerprintResult {
393
+ task: Task;
394
+ created: boolean;
395
+ }
388
396
  export interface UpdateTaskInput {
389
397
  title?: string;
390
398
  description?: string;
@@ -392,6 +400,7 @@ export interface UpdateTaskInput {
392
400
  priority?: TaskPriority;
393
401
  project_id?: string | null;
394
402
  assigned_to?: string;
403
+ working_dir?: string | null;
395
404
  plan_id?: string | null;
396
405
  task_list_id?: string;
397
406
  cycle_id?: string | null;
@@ -434,6 +443,8 @@ export interface TaskFilter {
434
443
  cursor?: string;
435
444
  /** When true, include archived tasks. Default: false (archived tasks excluded) */
436
445
  include_archived?: boolean;
446
+ /** Exact top-level metadata filters, e.g. { fingerprint: "loop:key" }. */
447
+ metadata?: Record<string, unknown>;
437
448
  }
438
449
  export interface TaskDependency {
439
450
  task_id: string;