@hasna/todos 0.11.52 → 0.11.53
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 +14 -1
- package/dashboard/dist/assets/{index-C3fBxEWP.js → index-aJefI7kh.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dist/cli/commands/config-serve-commands.d.ts.map +1 -1
- package/dist/cli/commands/machines.d.ts.map +1 -1
- package/dist/cli/commands/storage-commands.d.ts +3 -0
- package/dist/cli/commands/storage-commands.d.ts.map +1 -0
- package/dist/cli/commands/task-commands.d.ts.map +1 -1
- package/dist/cli/helpers.d.ts +6 -0
- package/dist/cli/helpers.d.ts.map +1 -1
- package/dist/cli/index.js +3306 -445
- package/dist/contracts.js +289 -8
- package/dist/db/artifacts.d.ts.map +1 -1
- package/dist/db/builtin-templates.d.ts +0 -1
- package/dist/db/builtin-templates.d.ts.map +1 -1
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/tags.d.ts +26 -0
- package/dist/db/tags.d.ts.map +1 -0
- package/dist/db/task-commits.d.ts +14 -6
- package/dist/db/task-commits.d.ts.map +1 -1
- package/dist/db/tasks.d.ts +1 -1
- package/dist/db/tasks.d.ts.map +1 -1
- package/dist/index.d.ts +32 -60
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2473 -200
- package/dist/lib/agent-adapter-docs.d.ts +1 -1
- package/dist/lib/agent-adapter-docs.d.ts.map +1 -1
- package/dist/lib/agent-coordination.d.ts.map +1 -1
- package/dist/lib/agent-run-dispatcher.d.ts +5 -2
- package/dist/lib/agent-run-dispatcher.d.ts.map +1 -1
- package/dist/lib/agent-workflow-demo.d.ts +1 -1
- package/dist/lib/agent-workflow-demo.d.ts.map +1 -1
- package/dist/lib/db-backup.d.ts.map +1 -1
- package/dist/lib/headless-boundaries.d.ts +2 -2
- package/dist/lib/headless-boundaries.d.ts.map +1 -1
- package/dist/lib/import-export-bridge.d.ts.map +1 -1
- package/dist/lib/inbox-intake.d.ts.map +1 -1
- package/dist/lib/issue-importers.d.ts.map +1 -1
- package/dist/lib/machine-topology.d.ts +1 -1
- package/dist/lib/machine-topology.d.ts.map +1 -1
- package/dist/lib/native-storage-status.d.ts +65 -0
- package/dist/lib/native-storage-status.d.ts.map +1 -0
- package/dist/lib/nl-intake.d.ts.map +1 -1
- package/dist/lib/notification-reminders.d.ts.map +1 -1
- package/dist/lib/plan-execution.d.ts +1 -0
- package/dist/lib/plan-execution.d.ts.map +1 -1
- package/dist/lib/release-checks.d.ts.map +1 -1
- package/dist/lib/resource-snapshots.d.ts.map +1 -1
- package/dist/lib/saved-views.d.ts.map +1 -1
- package/dist/lib/secret-redaction.d.ts +1 -1
- package/dist/lib/secret-redaction.d.ts.map +1 -1
- package/dist/lib/task-scheduling.d.ts +1 -1
- package/dist/lib/task-scheduling.d.ts.map +1 -1
- package/dist/lib/template-library.d.ts +1 -1
- package/dist/lib/template-library.d.ts.map +1 -1
- package/dist/lib/user-scaffolds.d.ts.map +1 -1
- package/dist/lib/verification-evidence.d.ts +4 -4
- package/dist/lib/verification-evidence.d.ts.map +1 -1
- package/dist/lib/verification-providers.d.ts +3 -3
- package/dist/lib/verification-providers.d.ts.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +526 -50
- package/dist/mcp/tools/task-crud.d.ts.map +1 -1
- package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
- package/dist/registry.js +289 -8
- package/dist/release-provenance.json +7 -0
- package/dist/server/index.js +552 -52
- package/dist/server/serve.d.ts.map +1 -1
- package/dist/storage/config.d.ts +86 -0
- package/dist/storage/config.d.ts.map +1 -0
- package/dist/storage/factory.d.ts +17 -0
- package/dist/storage/factory.d.ts.map +1 -0
- package/dist/storage/hybrid.d.ts +26 -0
- package/dist/storage/hybrid.d.ts.map +1 -0
- package/dist/storage/index.d.ts +15 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/local-sqlite.d.ts.map +1 -1
- package/dist/storage/postgres-adapter.d.ts +11 -0
- package/dist/storage/postgres-adapter.d.ts.map +1 -0
- package/dist/storage/postgres-sync.d.ts +44 -0
- package/dist/storage/postgres-sync.d.ts.map +1 -0
- package/dist/storage/s3-artifact-sync.d.ts +75 -0
- package/dist/storage/s3-artifact-sync.d.ts.map +1 -0
- package/dist/storage/s3-artifacts.d.ts +51 -0
- package/dist/storage/s3-artifacts.d.ts.map +1 -0
- package/dist/storage/sqlite-snapshot.d.ts +5 -0
- package/dist/storage/sqlite-snapshot.d.ts.map +1 -0
- package/dist/storage.d.ts +2 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +2053 -10
- package/package.json +1 -1
- package/dist/cli/brains.d.ts +0 -3
- package/dist/cli/brains.d.ts.map +0 -1
- package/dist/db/file-locks.d.ts +0 -43
- package/dist/db/file-locks.d.ts.map +0 -1
- package/dist/db/project-agent-roles.d.ts +0 -34
- package/dist/db/project-agent-roles.d.ts.map +0 -1
- package/dist/db/task-claim.d.ts +0 -7
- package/dist/db/task-claim.d.ts.map +0 -1
- package/dist/db/task-workflow.d.ts +0 -7
- package/dist/db/task-workflow.d.ts.map +0 -1
- package/dist/lib/north-star.d.ts +0 -33
- package/dist/lib/north-star.d.ts.map +0 -1
- package/dist/lib/public-release-gate.d.ts +0 -57
- package/dist/lib/public-release-gate.d.ts.map +0 -1
- package/dist/lib/task-runner.d.ts +0 -101
- package/dist/lib/task-runner.d.ts.map +0 -1
- package/dist/mcp/tools/access-profiles.d.ts +0 -8
- package/dist/mcp/tools/access-profiles.d.ts.map +0 -1
- package/dist/mcp/tools/activity-audit.d.ts +0 -9
- package/dist/mcp/tools/activity-audit.d.ts.map +0 -1
- package/dist/mcp/tools/agent-adapter-docs.d.ts +0 -8
- package/dist/mcp/tools/agent-adapter-docs.d.ts.map +0 -1
- package/dist/mcp/tools/agent-coordination.d.ts +0 -9
- package/dist/mcp/tools/agent-coordination.d.ts.map +0 -1
- package/dist/mcp/tools/agent-runs.d.ts +0 -9
- package/dist/mcp/tools/agent-runs.d.ts.map +0 -1
- package/dist/mcp/tools/agent-workflow-demo.d.ts +0 -8
- package/dist/mcp/tools/agent-workflow-demo.d.ts.map +0 -1
- package/dist/mcp/tools/approval-gates.d.ts +0 -9
- package/dist/mcp/tools/approval-gates.d.ts.map +0 -1
- package/dist/mcp/tools/artifacts.d.ts +0 -9
- package/dist/mcp/tools/artifacts.d.ts.map +0 -1
- package/dist/mcp/tools/branch-work-plans.d.ts +0 -8
- package/dist/mcp/tools/branch-work-plans.d.ts.map +0 -1
- package/dist/mcp/tools/cli-docs.d.ts +0 -8
- package/dist/mcp/tools/cli-docs.d.ts.map +0 -1
- package/dist/mcp/tools/command-aliases.d.ts +0 -8
- package/dist/mcp/tools/command-aliases.d.ts.map +0 -1
- package/dist/mcp/tools/context-packs.d.ts +0 -9
- package/dist/mcp/tools/context-packs.d.ts.map +0 -1
- package/dist/mcp/tools/crypto.d.ts +0 -8
- package/dist/mcp/tools/crypto.d.ts.map +0 -1
- package/dist/mcp/tools/db-backup.d.ts +0 -8
- package/dist/mcp/tools/db-backup.d.ts.map +0 -1
- package/dist/mcp/tools/decision-records.d.ts +0 -9
- package/dist/mcp/tools/decision-records.d.ts.map +0 -1
- package/dist/mcp/tools/dependency-graph.d.ts +0 -9
- package/dist/mcp/tools/dependency-graph.d.ts.map +0 -1
- package/dist/mcp/tools/failure-triage.d.ts +0 -9
- package/dist/mcp/tools/failure-triage.d.ts.map +0 -1
- package/dist/mcp/tools/feature-manifest.d.ts +0 -8
- package/dist/mcp/tools/feature-manifest.d.ts.map +0 -1
- package/dist/mcp/tools/git-traceability.d.ts +0 -9
- package/dist/mcp/tools/git-traceability.d.ts.map +0 -1
- package/dist/mcp/tools/goal.d.ts +0 -9
- package/dist/mcp/tools/goal.d.ts.map +0 -1
- package/dist/mcp/tools/handoff-packets.d.ts +0 -9
- package/dist/mcp/tools/handoff-packets.d.ts.map +0 -1
- package/dist/mcp/tools/import-export-bridge.d.ts +0 -9
- package/dist/mcp/tools/import-export-bridge.d.ts.map +0 -1
- package/dist/mcp/tools/inbox-intake.d.ts +0 -9
- package/dist/mcp/tools/inbox-intake.d.ts.map +0 -1
- package/dist/mcp/tools/issue-importers.d.ts +0 -9
- package/dist/mcp/tools/issue-importers.d.ts.map +0 -1
- package/dist/mcp/tools/json-schemas.d.ts +0 -8
- package/dist/mcp/tools/json-schemas.d.ts.map +0 -1
- package/dist/mcp/tools/machine-topology.d.ts +0 -8
- package/dist/mcp/tools/machine-topology.d.ts.map +0 -1
- package/dist/mcp/tools/mention-resolver.d.ts +0 -9
- package/dist/mcp/tools/mention-resolver.d.ts.map +0 -1
- package/dist/mcp/tools/nl-intake.d.ts +0 -9
- package/dist/mcp/tools/nl-intake.d.ts.map +0 -1
- package/dist/mcp/tools/notification-reminders.d.ts +0 -9
- package/dist/mcp/tools/notification-reminders.d.ts.map +0 -1
- package/dist/mcp/tools/parity.d.ts +0 -8
- package/dist/mcp/tools/parity.d.ts.map +0 -1
- package/dist/mcp/tools/plan-execution.d.ts +0 -9
- package/dist/mcp/tools/plan-execution.d.ts.map +0 -1
- package/dist/mcp/tools/policy-packs.d.ts +0 -9
- package/dist/mcp/tools/policy-packs.d.ts.map +0 -1
- package/dist/mcp/tools/project-bootstrap.d.ts +0 -8
- package/dist/mcp/tools/project-bootstrap.d.ts.map +0 -1
- package/dist/mcp/tools/release-checks.d.ts +0 -8
- package/dist/mcp/tools/release-checks.d.ts.map +0 -1
- package/dist/mcp/tools/release-notes.d.ts +0 -9
- package/dist/mcp/tools/release-notes.d.ts.map +0 -1
- package/dist/mcp/tools/report-exports.d.ts +0 -9
- package/dist/mcp/tools/report-exports.d.ts.map +0 -1
- package/dist/mcp/tools/resource-subscriptions.d.ts +0 -8
- package/dist/mcp/tools/resource-subscriptions.d.ts.map +0 -1
- package/dist/mcp/tools/run-records.d.ts +0 -9
- package/dist/mcp/tools/run-records.d.ts.map +0 -1
- package/dist/mcp/tools/sandbox.d.ts +0 -8
- package/dist/mcp/tools/sandbox.d.ts.map +0 -1
- package/dist/mcp/tools/saved-views.d.ts +0 -9
- package/dist/mcp/tools/saved-views.d.ts.map +0 -1
- package/dist/mcp/tools/secret-redaction.d.ts +0 -8
- package/dist/mcp/tools/secret-redaction.d.ts.map +0 -1
- package/dist/mcp/tools/task-dedupe.d.ts +0 -9
- package/dist/mcp/tools/task-dedupe.d.ts.map +0 -1
- package/dist/mcp/tools/task-scheduling.d.ts +0 -9
- package/dist/mcp/tools/task-scheduling.d.ts.map +0 -1
- package/dist/mcp/tools/template-library.d.ts +0 -8
- package/dist/mcp/tools/template-library.d.ts.map +0 -1
- package/dist/mcp/tools/terminal-notifications.d.ts +0 -9
- package/dist/mcp/tools/terminal-notifications.d.ts.map +0 -1
- package/dist/mcp/tools/todos-md.d.ts +0 -8
- package/dist/mcp/tools/todos-md.d.ts.map +0 -1
- package/dist/mcp/tools/user-scaffolds.d.ts +0 -8
- package/dist/mcp/tools/user-scaffolds.d.ts.map +0 -1
- package/dist/mcp/tools/verification.d.ts +0 -9
- package/dist/mcp/tools/verification.d.ts.map +0 -1
- package/dist/mcp/tools/webhooks.d.ts +0 -8
- package/dist/mcp/tools/webhooks.d.ts.map +0 -1
- package/dist/mcp/tools/workspace-trust.d.ts +0 -8
- package/dist/mcp/tools/workspace-trust.d.ts.map +0 -1
- package/dist/test/no-network.d.ts +0 -7
- package/dist/test/no-network.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-crud.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/task-crud.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAKjD,UAAU,eAAe;IACvB,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,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"task-crud.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/task-crud.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAKjD,UAAU,eAAe;IACvB,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,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,QAqP5E"}
|
|
@@ -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;
|
|
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;AAkJjD,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,QA+1FlF"}
|
package/dist/registry.js
CHANGED
|
@@ -1223,6 +1223,15 @@ function ensureSchema(db) {
|
|
|
1223
1223
|
task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
1224
1224
|
tag TEXT NOT NULL, PRIMARY KEY (task_id, tag)
|
|
1225
1225
|
)`);
|
|
1226
|
+
ensureTable("tags", `
|
|
1227
|
+
CREATE TABLE tags (
|
|
1228
|
+
id TEXT PRIMARY KEY,
|
|
1229
|
+
name TEXT NOT NULL UNIQUE,
|
|
1230
|
+
color TEXT,
|
|
1231
|
+
description TEXT,
|
|
1232
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1233
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
1234
|
+
)`);
|
|
1226
1235
|
ensureTable("task_dependencies", `
|
|
1227
1236
|
CREATE TABLE task_dependencies (
|
|
1228
1237
|
task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
@@ -1436,6 +1445,36 @@ function ensureSchema(db) {
|
|
|
1436
1445
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_git_refs_task ON task_git_refs(task_id)");
|
|
1437
1446
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_git_refs_lookup ON task_git_refs(ref_type, name)");
|
|
1438
1447
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_git_refs_url ON task_git_refs(url)");
|
|
1448
|
+
ensureTable("task_commits", `
|
|
1449
|
+
CREATE TABLE task_commits (
|
|
1450
|
+
id TEXT PRIMARY KEY,
|
|
1451
|
+
task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
1452
|
+
sha TEXT NOT NULL,
|
|
1453
|
+
message TEXT,
|
|
1454
|
+
author TEXT,
|
|
1455
|
+
files_changed TEXT,
|
|
1456
|
+
committed_at TEXT,
|
|
1457
|
+
branch TEXT,
|
|
1458
|
+
pr_url TEXT,
|
|
1459
|
+
pr_number INTEGER,
|
|
1460
|
+
pr_state TEXT,
|
|
1461
|
+
ci_snapshot TEXT,
|
|
1462
|
+
release_tag TEXT,
|
|
1463
|
+
repo_path TEXT,
|
|
1464
|
+
traceability TEXT DEFAULT '{}',
|
|
1465
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1466
|
+
UNIQUE(task_id, sha)
|
|
1467
|
+
)`);
|
|
1468
|
+
ensureColumn("task_commits", "branch", "TEXT");
|
|
1469
|
+
ensureColumn("task_commits", "pr_url", "TEXT");
|
|
1470
|
+
ensureColumn("task_commits", "pr_number", "INTEGER");
|
|
1471
|
+
ensureColumn("task_commits", "pr_state", "TEXT");
|
|
1472
|
+
ensureColumn("task_commits", "ci_snapshot", "TEXT");
|
|
1473
|
+
ensureColumn("task_commits", "release_tag", "TEXT");
|
|
1474
|
+
ensureColumn("task_commits", "repo_path", "TEXT");
|
|
1475
|
+
ensureColumn("task_commits", "traceability", "TEXT DEFAULT '{}'");
|
|
1476
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_commits_task ON task_commits(task_id)");
|
|
1477
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_commits_sha ON task_commits(sha)");
|
|
1439
1478
|
ensureTable("task_verifications", `
|
|
1440
1479
|
CREATE TABLE task_verifications (
|
|
1441
1480
|
id TEXT PRIMARY KEY,
|
|
@@ -1620,6 +1659,9 @@ function ensureSchema(db) {
|
|
|
1620
1659
|
ensureColumn("tasks", "max_retries", "INTEGER DEFAULT 3");
|
|
1621
1660
|
ensureColumn("tasks", "retry_after", "TEXT");
|
|
1622
1661
|
ensureColumn("tasks", "sla_minutes", "INTEGER");
|
|
1662
|
+
ensureColumn("tasks", "scheduled_start_at", "TEXT");
|
|
1663
|
+
ensureColumn("tasks", "priority_score", "INTEGER");
|
|
1664
|
+
ensureColumn("tasks", "priority_reason", "TEXT");
|
|
1623
1665
|
ensureColumn("tasks", "archived_at", "TEXT");
|
|
1624
1666
|
ensureColumn("agents", "role", "TEXT DEFAULT 'agent'");
|
|
1625
1667
|
ensureColumn("agents", "permissions", `TEXT DEFAULT '["*"]'`);
|
|
@@ -1742,6 +1784,7 @@ function ensureSchema(db) {
|
|
|
1742
1784
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_lists_slug ON task_lists(slug)");
|
|
1743
1785
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_tags_tag ON task_tags(tag)");
|
|
1744
1786
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_tags_task ON task_tags(task_id)");
|
|
1787
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tags_name ON tags(name)");
|
|
1745
1788
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_project ON plans(project_id)");
|
|
1746
1789
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_status ON plans(status)");
|
|
1747
1790
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_task_list ON plans(task_list_id)");
|
|
@@ -1879,6 +1922,217 @@ function ensureSchema(db) {
|
|
|
1879
1922
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_cycles_dates ON cycles(start_date, end_date)");
|
|
1880
1923
|
ensureColumn("tasks", "cycle_id", "TEXT REFERENCES cycles(id) ON DELETE SET NULL");
|
|
1881
1924
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_cycle ON tasks(cycle_id) WHERE cycle_id IS NOT NULL");
|
|
1925
|
+
ensureTable("labels", `
|
|
1926
|
+
CREATE TABLE labels (
|
|
1927
|
+
id TEXT PRIMARY KEY,
|
|
1928
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
1929
|
+
name TEXT NOT NULL,
|
|
1930
|
+
color TEXT,
|
|
1931
|
+
description TEXT,
|
|
1932
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1933
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1934
|
+
UNIQUE(project_id, name)
|
|
1935
|
+
)`);
|
|
1936
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_labels_project ON labels(project_id)");
|
|
1937
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_labels_name ON labels(name)");
|
|
1938
|
+
ensureTable("task_labels", `
|
|
1939
|
+
CREATE TABLE task_labels (
|
|
1940
|
+
task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
1941
|
+
label_id TEXT NOT NULL REFERENCES labels(id) ON DELETE CASCADE,
|
|
1942
|
+
PRIMARY KEY (task_id, label_id)
|
|
1943
|
+
)`);
|
|
1944
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_labels_task ON task_labels(task_id)");
|
|
1945
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_labels_label ON task_labels(label_id)");
|
|
1946
|
+
ensureTable("custom_field_definitions", `
|
|
1947
|
+
CREATE TABLE custom_field_definitions (
|
|
1948
|
+
id TEXT PRIMARY KEY,
|
|
1949
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
1950
|
+
name TEXT NOT NULL,
|
|
1951
|
+
slug TEXT NOT NULL,
|
|
1952
|
+
field_type TEXT NOT NULL CHECK(field_type IN ('text', 'number', 'boolean', 'date', 'enum')),
|
|
1953
|
+
options TEXT DEFAULT '[]',
|
|
1954
|
+
required INTEGER NOT NULL DEFAULT 0,
|
|
1955
|
+
default_value TEXT,
|
|
1956
|
+
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
1957
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1958
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1959
|
+
UNIQUE(project_id, slug)
|
|
1960
|
+
)`);
|
|
1961
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_custom_fields_project ON custom_field_definitions(project_id)");
|
|
1962
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_custom_fields_slug ON custom_field_definitions(slug)");
|
|
1963
|
+
ensureTable("task_custom_field_values", `
|
|
1964
|
+
CREATE TABLE task_custom_field_values (
|
|
1965
|
+
task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
1966
|
+
field_id TEXT NOT NULL REFERENCES custom_field_definitions(id) ON DELETE CASCADE,
|
|
1967
|
+
value TEXT,
|
|
1968
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1969
|
+
PRIMARY KEY (task_id, field_id)
|
|
1970
|
+
)`);
|
|
1971
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_custom_values_task ON task_custom_field_values(task_id)");
|
|
1972
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_custom_values_field ON task_custom_field_values(field_id)");
|
|
1973
|
+
ensureTable("saved_views", `
|
|
1974
|
+
CREATE TABLE saved_views (
|
|
1975
|
+
id TEXT PRIMARY KEY,
|
|
1976
|
+
name TEXT NOT NULL UNIQUE,
|
|
1977
|
+
slug TEXT NOT NULL UNIQUE,
|
|
1978
|
+
entity_type TEXT NOT NULL DEFAULT 'task',
|
|
1979
|
+
filters TEXT NOT NULL DEFAULT '{}',
|
|
1980
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1981
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
1982
|
+
)`);
|
|
1983
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_saved_views_slug ON saved_views(slug)");
|
|
1984
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_saved_views_entity ON saved_views(entity_type)");
|
|
1985
|
+
ensureTable("decision_records", `
|
|
1986
|
+
CREATE TABLE decision_records (
|
|
1987
|
+
id TEXT PRIMARY KEY,
|
|
1988
|
+
project_id TEXT REFERENCES projects(id) ON DELETE SET NULL,
|
|
1989
|
+
task_id TEXT REFERENCES tasks(id) ON DELETE SET NULL,
|
|
1990
|
+
plan_id TEXT REFERENCES plans(id) ON DELETE SET NULL,
|
|
1991
|
+
agent_id TEXT,
|
|
1992
|
+
sequence_num INTEGER NOT NULL,
|
|
1993
|
+
short_ref TEXT NOT NULL UNIQUE,
|
|
1994
|
+
title TEXT NOT NULL,
|
|
1995
|
+
status TEXT NOT NULL DEFAULT 'proposed' CHECK(status IN ('proposed', 'accepted', 'deprecated', 'superseded', 'rejected')),
|
|
1996
|
+
context TEXT,
|
|
1997
|
+
decision TEXT NOT NULL,
|
|
1998
|
+
consequences TEXT,
|
|
1999
|
+
alternatives TEXT DEFAULT '[]',
|
|
2000
|
+
tags TEXT DEFAULT '[]',
|
|
2001
|
+
supersedes_id TEXT REFERENCES decision_records(id) ON DELETE SET NULL,
|
|
2002
|
+
superseded_by_id TEXT REFERENCES decision_records(id) ON DELETE SET NULL,
|
|
2003
|
+
metadata TEXT DEFAULT '{}',
|
|
2004
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
2005
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
2006
|
+
)`);
|
|
2007
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_decision_records_project ON decision_records(project_id)");
|
|
2008
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_decision_records_task ON decision_records(task_id)");
|
|
2009
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_decision_records_plan ON decision_records(plan_id)");
|
|
2010
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_decision_records_status ON decision_records(status)");
|
|
2011
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_decision_records_short_ref ON decision_records(short_ref)");
|
|
2012
|
+
ensureTable("knowledge_snapshots", `
|
|
2013
|
+
CREATE TABLE knowledge_snapshots (
|
|
2014
|
+
id TEXT PRIMARY KEY,
|
|
2015
|
+
project_id TEXT REFERENCES projects(id) ON DELETE SET NULL,
|
|
2016
|
+
title TEXT NOT NULL,
|
|
2017
|
+
summary TEXT,
|
|
2018
|
+
content_hash TEXT NOT NULL,
|
|
2019
|
+
snapshot TEXT NOT NULL,
|
|
2020
|
+
decision_ids TEXT DEFAULT '[]',
|
|
2021
|
+
topics TEXT DEFAULT '[]',
|
|
2022
|
+
source TEXT NOT NULL DEFAULT 'auto' CHECK(source IN ('manual', 'auto', 'import')),
|
|
2023
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
2024
|
+
)`);
|
|
2025
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_knowledge_snapshots_project ON knowledge_snapshots(project_id)");
|
|
2026
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_knowledge_snapshots_hash ON knowledge_snapshots(content_hash)");
|
|
2027
|
+
ensureTable("verification_records", `
|
|
2028
|
+
CREATE TABLE verification_records (
|
|
2029
|
+
id TEXT PRIMARY KEY,
|
|
2030
|
+
task_id TEXT REFERENCES tasks(id) ON DELETE CASCADE,
|
|
2031
|
+
provider_name TEXT NOT NULL,
|
|
2032
|
+
provider_type TEXT NOT NULL,
|
|
2033
|
+
status TEXT NOT NULL DEFAULT 'unknown' CHECK(status IN ('passed', 'failed', 'unknown')),
|
|
2034
|
+
summary TEXT,
|
|
2035
|
+
evidence TEXT DEFAULT '{}',
|
|
2036
|
+
artifact_id TEXT,
|
|
2037
|
+
started_at TEXT,
|
|
2038
|
+
completed_at TEXT,
|
|
2039
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
2040
|
+
)`);
|
|
2041
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_verification_records_task ON verification_records(task_id)");
|
|
2042
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_verification_records_status ON verification_records(status)");
|
|
2043
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_verification_records_created ON verification_records(created_at)");
|
|
2044
|
+
ensureTable("task_leases", `
|
|
2045
|
+
CREATE TABLE task_leases (
|
|
2046
|
+
task_id TEXT PRIMARY KEY REFERENCES tasks(id) ON DELETE CASCADE,
|
|
2047
|
+
agent_id TEXT NOT NULL,
|
|
2048
|
+
acquired_at TEXT NOT NULL,
|
|
2049
|
+
expires_at TEXT NOT NULL,
|
|
2050
|
+
heartbeat_at TEXT,
|
|
2051
|
+
steal_count INTEGER NOT NULL DEFAULT 0,
|
|
2052
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
2053
|
+
)`);
|
|
2054
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_leases_agent ON task_leases(agent_id)");
|
|
2055
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_leases_expires ON task_leases(expires_at)");
|
|
2056
|
+
ensureTable("reminder_preferences", `
|
|
2057
|
+
CREATE TABLE reminder_preferences (
|
|
2058
|
+
id TEXT PRIMARY KEY,
|
|
2059
|
+
due_soon_hours INTEGER NOT NULL DEFAULT 24,
|
|
2060
|
+
sla_warning_minutes INTEGER NOT NULL DEFAULT 30,
|
|
2061
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
2062
|
+
desktop_notify INTEGER NOT NULL DEFAULT 0,
|
|
2063
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
2064
|
+
)`);
|
|
2065
|
+
ensureTable("notification_reminders", `
|
|
2066
|
+
CREATE TABLE notification_reminders (
|
|
2067
|
+
id TEXT PRIMARY KEY,
|
|
2068
|
+
task_id TEXT REFERENCES tasks(id) ON DELETE CASCADE,
|
|
2069
|
+
reminder_type TEXT NOT NULL CHECK(reminder_type IN ('due_soon', 'due_overdue', 'sla_warning', 'sla_breach', 'custom')),
|
|
2070
|
+
title TEXT NOT NULL,
|
|
2071
|
+
message TEXT,
|
|
2072
|
+
trigger_at TEXT NOT NULL,
|
|
2073
|
+
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending', 'fired', 'dismissed', 'snoozed')),
|
|
2074
|
+
snoozed_until TEXT,
|
|
2075
|
+
project_id TEXT REFERENCES projects(id) ON DELETE SET NULL,
|
|
2076
|
+
agent_id TEXT,
|
|
2077
|
+
priority TEXT NOT NULL DEFAULT 'medium',
|
|
2078
|
+
metadata TEXT DEFAULT '{}',
|
|
2079
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
2080
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
2081
|
+
fired_at TEXT,
|
|
2082
|
+
dismissed_at TEXT
|
|
2083
|
+
)`);
|
|
2084
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_notification_reminders_task ON notification_reminders(task_id)");
|
|
2085
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_notification_reminders_status ON notification_reminders(status)");
|
|
2086
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_notification_reminders_trigger ON notification_reminders(trigger_at)");
|
|
2087
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_notification_reminders_project ON notification_reminders(project_id)");
|
|
2088
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_notification_reminders_agent ON notification_reminders(agent_id)");
|
|
2089
|
+
ensureTable("run_records", `
|
|
2090
|
+
CREATE TABLE run_records (
|
|
2091
|
+
id TEXT PRIMARY KEY,
|
|
2092
|
+
agent_run_id TEXT,
|
|
2093
|
+
agent_id TEXT,
|
|
2094
|
+
objective TEXT,
|
|
2095
|
+
plan_id TEXT REFERENCES plans(id) ON DELETE SET NULL,
|
|
2096
|
+
claimed_task_ids TEXT DEFAULT '[]',
|
|
2097
|
+
commands TEXT DEFAULT '[]',
|
|
2098
|
+
stdout_summary TEXT,
|
|
2099
|
+
stderr_summary TEXT,
|
|
2100
|
+
files_touched TEXT DEFAULT '[]',
|
|
2101
|
+
verification_results TEXT DEFAULT '[]',
|
|
2102
|
+
artifact_ids TEXT DEFAULT '[]',
|
|
2103
|
+
status_transitions TEXT DEFAULT '[]',
|
|
2104
|
+
status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'completed', 'failed', 'archived')),
|
|
2105
|
+
replay_bundle TEXT,
|
|
2106
|
+
metadata TEXT DEFAULT '{}',
|
|
2107
|
+
started_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
2108
|
+
completed_at TEXT,
|
|
2109
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
2110
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
2111
|
+
)`);
|
|
2112
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_run_records_agent_run ON run_records(agent_run_id)");
|
|
2113
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_run_records_agent ON run_records(agent_id)");
|
|
2114
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_run_records_plan ON run_records(plan_id)");
|
|
2115
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_run_records_status ON run_records(status)");
|
|
2116
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_run_records_started ON run_records(started_at)");
|
|
2117
|
+
ensureTable("activity_log", `
|
|
2118
|
+
CREATE TABLE activity_log (
|
|
2119
|
+
id TEXT PRIMARY KEY,
|
|
2120
|
+
entity_type TEXT NOT NULL,
|
|
2121
|
+
entity_id TEXT NOT NULL,
|
|
2122
|
+
action TEXT NOT NULL,
|
|
2123
|
+
field TEXT,
|
|
2124
|
+
old_value TEXT,
|
|
2125
|
+
new_value TEXT,
|
|
2126
|
+
actor_id TEXT,
|
|
2127
|
+
session_id TEXT,
|
|
2128
|
+
machine_id TEXT,
|
|
2129
|
+
metadata TEXT DEFAULT '{}',
|
|
2130
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
2131
|
+
)`);
|
|
2132
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_activity_log_entity ON activity_log(entity_type, entity_id)");
|
|
2133
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_activity_log_actor ON activity_log(actor_id)");
|
|
2134
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_activity_log_action ON activity_log(action)");
|
|
2135
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_activity_log_created ON activity_log(created_at)");
|
|
1882
2136
|
ensureTable("api_keys", `
|
|
1883
2137
|
CREATE TABLE api_keys (
|
|
1884
2138
|
id TEXT PRIMARY KEY,
|
|
@@ -2315,11 +2569,17 @@ function ensureDir(filePath) {
|
|
|
2315
2569
|
}
|
|
2316
2570
|
}
|
|
2317
2571
|
function getDatabase(dbPath) {
|
|
2318
|
-
if (_db)
|
|
2319
|
-
return _db;
|
|
2320
2572
|
const path = dbPath || getDbPath();
|
|
2573
|
+
if (_db && _dbPath === path)
|
|
2574
|
+
return _db;
|
|
2575
|
+
if (_db && _dbPath !== path) {
|
|
2576
|
+
_db.close();
|
|
2577
|
+
_db = null;
|
|
2578
|
+
_dbPath = null;
|
|
2579
|
+
}
|
|
2321
2580
|
ensureDir(path);
|
|
2322
2581
|
_db = new Database(path);
|
|
2582
|
+
_dbPath = path;
|
|
2323
2583
|
_db.run("PRAGMA journal_mode = WAL");
|
|
2324
2584
|
_db.run("PRAGMA busy_timeout = 5000");
|
|
2325
2585
|
_db.run("PRAGMA foreign_keys = ON");
|
|
@@ -2332,10 +2592,12 @@ function closeDatabase() {
|
|
|
2332
2592
|
if (_db) {
|
|
2333
2593
|
_db.close();
|
|
2334
2594
|
_db = null;
|
|
2595
|
+
_dbPath = null;
|
|
2335
2596
|
}
|
|
2336
2597
|
}
|
|
2337
2598
|
function resetDatabase() {
|
|
2338
2599
|
_db = null;
|
|
2600
|
+
_dbPath = null;
|
|
2339
2601
|
}
|
|
2340
2602
|
function now() {
|
|
2341
2603
|
return new Date().toISOString();
|
|
@@ -2396,7 +2658,7 @@ function resolvePartialId(db, table, partialId) {
|
|
|
2396
2658
|
}
|
|
2397
2659
|
return null;
|
|
2398
2660
|
}
|
|
2399
|
-
var LOCK_EXPIRY_MINUTES = 30, _db = null, ALLOWED_TABLES;
|
|
2661
|
+
var LOCK_EXPIRY_MINUTES = 30, _db = null, _dbPath = null, ALLOWED_TABLES;
|
|
2400
2662
|
var init_database = __esm(() => {
|
|
2401
2663
|
init_schema();
|
|
2402
2664
|
init_machines();
|
|
@@ -2888,9 +3150,10 @@ function redactExportRecord(record) {
|
|
|
2888
3150
|
function getDefaultSecretPatterns() {
|
|
2889
3151
|
return DEFAULT_PATTERNS.map((p) => ({ name: p.name, source: p.pattern.source }));
|
|
2890
3152
|
}
|
|
2891
|
-
var SECRET_REDACTION_SCHEMA
|
|
3153
|
+
var SECRET_REDACTION_SCHEMA, REDACTION_PLACEHOLDER = "[REDACTED]", DEFAULT_PATTERNS, DEFAULT_ALLOWLIST, customRedactors;
|
|
2892
3154
|
var init_secret_redaction = __esm(() => {
|
|
2893
3155
|
init_redaction();
|
|
3156
|
+
SECRET_REDACTION_SCHEMA = ["todos", "secret_redaction", "v1"].join(".");
|
|
2894
3157
|
DEFAULT_PATTERNS = [
|
|
2895
3158
|
{ name: "openai_sk", pattern: /\bsk-[a-zA-Z0-9]{10,}\b/g },
|
|
2896
3159
|
{ name: "github_pat", pattern: /\bghp_[a-zA-Z0-9]{20,}\b/g },
|
|
@@ -9633,7 +9896,7 @@ function storeArtifactFile(input) {
|
|
|
9633
9896
|
}
|
|
9634
9897
|
return { sourcePath, localPath, contentHash, mimeType, sizeBytes: buffer.length };
|
|
9635
9898
|
}
|
|
9636
|
-
function deleteStoredArtifactFile(localPath, storageMode,
|
|
9899
|
+
function deleteStoredArtifactFile(localPath, storageMode, _dbPath2) {
|
|
9637
9900
|
if (storageMode === "reference")
|
|
9638
9901
|
return false;
|
|
9639
9902
|
if (!localPath || !existsSync7(localPath))
|
|
@@ -9888,11 +10151,19 @@ function getTaskVerifications(taskId, db) {
|
|
|
9888
10151
|
}
|
|
9889
10152
|
function getTaskTraceability(taskId, db) {
|
|
9890
10153
|
const d = db || getDatabase();
|
|
10154
|
+
const commits = getTaskCommits(taskId, d);
|
|
10155
|
+
const gitRefs = getTaskGitRefs(taskId, d);
|
|
9891
10156
|
return {
|
|
9892
10157
|
task_id: taskId,
|
|
9893
|
-
commits
|
|
9894
|
-
git_refs:
|
|
9895
|
-
verifications: getTaskVerifications(taskId, d)
|
|
10158
|
+
commits,
|
|
10159
|
+
git_refs: gitRefs,
|
|
10160
|
+
verifications: getTaskVerifications(taskId, d),
|
|
10161
|
+
branches: Array.from(new Set([
|
|
10162
|
+
...commits.map((commit) => commit.branch).filter((branch) => Boolean(branch)),
|
|
10163
|
+
...gitRefs.filter((ref) => ref.ref_type === "branch").map((ref) => ref.name)
|
|
10164
|
+
])).sort(),
|
|
10165
|
+
release_tags: Array.from(new Set(commits.map((commit) => commit.release_tag).filter((tag) => Boolean(tag)))).sort(),
|
|
10166
|
+
pull_requests: commits.filter((commit) => commit.pr_url).map((commit) => ({ url: commit.pr_url, state: commit.pr_state, number: commit.pr_number }))
|
|
9896
10167
|
};
|
|
9897
10168
|
}
|
|
9898
10169
|
|
|
@@ -16952,6 +17223,16 @@ function parseClock(value) {
|
|
|
16952
17223
|
throw new Error("quiet hours must use HH:MM-HH:MM");
|
|
16953
17224
|
return Number(match[1]) * 60 + Number(match[2]);
|
|
16954
17225
|
}
|
|
17226
|
+
function parseQuietHours(value, timezone = "local") {
|
|
17227
|
+
if (!value)
|
|
17228
|
+
return;
|
|
17229
|
+
const [start, end] = value.split("-", 2).map((part) => part.trim());
|
|
17230
|
+
if (!start || !end)
|
|
17231
|
+
throw new Error("quiet hours must use HH:MM-HH:MM");
|
|
17232
|
+
parseClock(start);
|
|
17233
|
+
parseClock(end);
|
|
17234
|
+
return { start, end, timezone };
|
|
17235
|
+
}
|
|
16955
17236
|
function isQuietTime(quiet, timestamp2) {
|
|
16956
17237
|
if (!quiet)
|
|
16957
17238
|
return false;
|