@hasna/todos 0.15.5 → 0.15.7

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 (43) hide show
  1. package/dist/cli/cloud-router.d.ts.map +1 -1
  2. package/dist/cli/commands/task-commands.d.ts.map +1 -1
  3. package/dist/cli/index.js +3086 -1332
  4. package/dist/contracts.js +213 -3
  5. package/dist/db/migrations.d.ts.map +1 -1
  6. package/dist/db/schema.d.ts.map +1 -1
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +1950 -26
  10. package/dist/lib/comment-cursor.d.ts +40 -0
  11. package/dist/lib/comment-cursor.d.ts.map +1 -0
  12. package/dist/mcp/index.js +2096 -391
  13. package/dist/mcp.js +7 -3
  14. package/dist/project-registration/authority.d.ts +45 -0
  15. package/dist/project-registration/authority.d.ts.map +1 -0
  16. package/dist/project-registration/backend.d.ts +83 -0
  17. package/dist/project-registration/backend.d.ts.map +1 -0
  18. package/dist/project-registration/http.d.ts +24 -0
  19. package/dist/project-registration/http.d.ts.map +1 -0
  20. package/dist/project-registration/index.d.ts +8 -0
  21. package/dist/project-registration/index.d.ts.map +1 -0
  22. package/dist/project-registration/postgres.d.ts +30 -0
  23. package/dist/project-registration/postgres.d.ts.map +1 -0
  24. package/dist/project-registration/schema.d.ts +3 -0
  25. package/dist/project-registration/schema.d.ts.map +1 -0
  26. package/dist/project-registration/sqlite.d.ts +17 -0
  27. package/dist/project-registration/sqlite.d.ts.map +1 -0
  28. package/dist/project-registration/types.d.ts +155 -0
  29. package/dist/project-registration/types.d.ts.map +1 -0
  30. package/dist/project-registration.d.ts +2 -0
  31. package/dist/project-registration.d.ts.map +1 -0
  32. package/dist/project-registration.js +17689 -0
  33. package/dist/registry.d.ts +1 -1
  34. package/dist/registry.d.ts.map +1 -1
  35. package/dist/registry.js +220 -3
  36. package/dist/release-provenance.json +5 -5
  37. package/dist/server/cloud.d.ts +3 -0
  38. package/dist/server/cloud.d.ts.map +1 -1
  39. package/dist/server/index.js +4386 -2681
  40. package/dist/server/v1.d.ts +2 -1
  41. package/dist/server/v1.d.ts.map +1 -1
  42. package/dist/storage.js +206 -0
  43. package/package.json +7 -3
@@ -12,7 +12,7 @@ export interface TodosPackageSource {
12
12
  version: string;
13
13
  }
14
14
  export interface TodosPackageExportContract {
15
- subpath: "." | "./sdk" | "./mcp" | "./registry" | "./contracts" | "./storage" | "./testing";
15
+ subpath: "." | "./sdk" | "./mcp" | "./registry" | "./contracts" | "./storage" | "./testing" | "./project-registration";
16
16
  import: string;
17
17
  types: string;
18
18
  description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,GAAG,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC;IAC5F,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,YAAY,EAAE,uBAAuB,CAAC;IACtC,SAAS,EAAE,sBAAsB,CAAC;IAClC,GAAG,EAAE,gBAAgB,CAAC;IACtB,YAAY,EAAE,yBAAyB,CAAC;CACzC;AAED,eAAO,MAAM,qBAAqB,EAAE,0BAA0B,EAkD7D,CAAC;AAUF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,0BAA+B,GAAG,aAAa,CAc3F;AAED,eAAO,MAAM,cAAc,eAEzB,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EACH,GAAG,GACH,OAAO,GACP,OAAO,GACP,YAAY,GACZ,aAAa,GACb,WAAW,GACX,WAAW,GACX,wBAAwB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,YAAY,EAAE,uBAAuB,CAAC;IACtC,SAAS,EAAE,sBAAsB,CAAC;IAClC,GAAG,EAAE,gBAAgB,CAAC;IACtB,YAAY,EAAE,yBAAyB,CAAC;CACzC;AAED,eAAO,MAAM,qBAAqB,EAAE,0BAA0B,EAyD7D,CAAC;AAUF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,0BAA+B,GAAG,aAAa,CAc3F;AAED,eAAO,MAAM,cAAc,eAEzB,CAAC"}
package/dist/registry.js CHANGED
@@ -39,6 +39,206 @@ var __export = (target, all) => {
39
39
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
40
40
  var __require = import.meta.require;
41
41
 
42
+ // src/project-registration/schema.ts
43
+ function sqliteTodosProjectRegistrationSchemaSql() {
44
+ return `
45
+ CREATE TABLE IF NOT EXISTS todos_project_registration_receipts (
46
+ receipt_id TEXT PRIMARY KEY,
47
+ authority TEXT NOT NULL CHECK(authority = 'todos'),
48
+ route TEXT NOT NULL,
49
+ package_version TEXT NOT NULL,
50
+ authority_id TEXT NOT NULL,
51
+ tenant_id TEXT NOT NULL,
52
+ corpus_id TEXT NOT NULL,
53
+ operation_id TEXT NOT NULL,
54
+ step_id TEXT NOT NULL,
55
+ resource_kind TEXT NOT NULL CHECK(resource_kind IN ('project', 'task_list')),
56
+ direction TEXT NOT NULL CHECK(direction IN ('forward', 'inverse')),
57
+ target_selector TEXT NOT NULL,
58
+ idempotency_key TEXT NOT NULL,
59
+ request_digest TEXT NOT NULL,
60
+ precondition_digest TEXT NOT NULL,
61
+ normalized_call_digest TEXT NOT NULL,
62
+ outcome TEXT NOT NULL CHECK(outcome IN (
63
+ 'accepted', 'duplicate_of_accepted', 'terminal_nonacceptance'
64
+ )),
65
+ reason TEXT,
66
+ target_id TEXT,
67
+ result_revision TEXT,
68
+ result_digest TEXT,
69
+ duplicate_of_receipt_id TEXT,
70
+ accepted_receipt_id TEXT,
71
+ created_by_operation INTEGER NOT NULL CHECK(created_by_operation IN (0, 1)),
72
+ created_at TEXT NOT NULL
73
+ );
74
+
75
+ CREATE INDEX IF NOT EXISTS idx_todos_project_registration_receipts_lookup
76
+ ON todos_project_registration_receipts (
77
+ authority_id, tenant_id, corpus_id, operation_id, step_id,
78
+ resource_kind, direction, idempotency_key
79
+ );
80
+ CREATE INDEX IF NOT EXISTS idx_todos_project_registration_receipts_step
81
+ ON todos_project_registration_receipts (
82
+ authority_id, tenant_id, corpus_id, operation_id, step_id,
83
+ resource_kind, direction, outcome
84
+ );
85
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_todos_project_registration_receipts_accepted_step
86
+ ON todos_project_registration_receipts (
87
+ authority_id, tenant_id, corpus_id, operation_id, step_id,
88
+ resource_kind, direction
89
+ )
90
+ WHERE outcome = 'accepted';
91
+ CREATE INDEX IF NOT EXISTS idx_todos_project_registration_receipts_target
92
+ ON todos_project_registration_receipts (
93
+ authority_id, tenant_id, corpus_id, resource_kind, target_id
94
+ );
95
+
96
+ CREATE TABLE IF NOT EXISTS todos_project_registration_bindings (
97
+ authority_id TEXT NOT NULL,
98
+ tenant_id TEXT NOT NULL,
99
+ corpus_id TEXT NOT NULL,
100
+ resource_kind TEXT NOT NULL CHECK(resource_kind IN ('project', 'task_list')),
101
+ target_selector TEXT NOT NULL,
102
+ operation_id TEXT NOT NULL,
103
+ step_id TEXT NOT NULL,
104
+ direction TEXT NOT NULL CHECK(direction = 'forward'),
105
+ idempotency_key TEXT NOT NULL,
106
+ request_digest TEXT NOT NULL,
107
+ precondition_digest TEXT NOT NULL,
108
+ normalized_call_digest TEXT NOT NULL,
109
+ state TEXT NOT NULL CHECK(state IN (
110
+ 'pending', 'accepted', 'terminal_nonacceptance', 'removed'
111
+ )),
112
+ target_id TEXT,
113
+ accepted_receipt_id TEXT,
114
+ result_revision TEXT,
115
+ result_digest TEXT,
116
+ removed_receipt_id TEXT,
117
+ created_at TEXT NOT NULL,
118
+ updated_at TEXT NOT NULL,
119
+ PRIMARY KEY(
120
+ authority_id, tenant_id, corpus_id, resource_kind, target_selector
121
+ ),
122
+ UNIQUE(accepted_receipt_id)
123
+ );
124
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_todos_project_registration_binding_target
125
+ ON todos_project_registration_bindings(
126
+ authority_id, tenant_id, corpus_id, resource_kind, target_id
127
+ )
128
+ WHERE target_id IS NOT NULL;
129
+
130
+ CREATE TRIGGER IF NOT EXISTS todos_project_registration_receipts_immutable_update
131
+ BEFORE UPDATE ON todos_project_registration_receipts
132
+ BEGIN
133
+ SELECT RAISE(ABORT, 'todos project registration receipts are immutable');
134
+ END;
135
+
136
+ CREATE TRIGGER IF NOT EXISTS todos_project_registration_receipts_immutable_delete
137
+ BEFORE DELETE ON todos_project_registration_receipts
138
+ BEGIN
139
+ SELECT RAISE(ABORT, 'todos project registration receipts are immutable');
140
+ END;
141
+ `;
142
+ }
143
+ function postgresTodosProjectRegistrationSchemaSql() {
144
+ return [
145
+ `CREATE TABLE IF NOT EXISTS todos_project_registration_receipts (
146
+ receipt_id text PRIMARY KEY,
147
+ authority text NOT NULL CHECK(authority = 'todos'),
148
+ route text NOT NULL,
149
+ package_version text NOT NULL,
150
+ authority_id text NOT NULL,
151
+ tenant_id text NOT NULL,
152
+ corpus_id text NOT NULL,
153
+ operation_id text NOT NULL,
154
+ step_id text NOT NULL,
155
+ resource_kind text NOT NULL CHECK(resource_kind IN ('project', 'task_list')),
156
+ direction text NOT NULL CHECK(direction IN ('forward', 'inverse')),
157
+ target_selector text NOT NULL,
158
+ idempotency_key text NOT NULL,
159
+ request_digest text NOT NULL,
160
+ precondition_digest text NOT NULL,
161
+ normalized_call_digest text NOT NULL,
162
+ outcome text NOT NULL CHECK(outcome IN (
163
+ 'accepted', 'duplicate_of_accepted', 'terminal_nonacceptance'
164
+ )),
165
+ reason text,
166
+ target_id text,
167
+ result_revision text,
168
+ result_digest text,
169
+ duplicate_of_receipt_id text,
170
+ accepted_receipt_id text,
171
+ created_by_operation boolean NOT NULL,
172
+ created_at timestamptz NOT NULL
173
+ )`,
174
+ `CREATE INDEX IF NOT EXISTS todos_project_registration_receipts_lookup_idx
175
+ ON todos_project_registration_receipts (
176
+ authority_id, tenant_id, corpus_id, operation_id, step_id,
177
+ resource_kind, direction, idempotency_key
178
+ )`,
179
+ `CREATE INDEX IF NOT EXISTS todos_project_registration_receipts_step_idx
180
+ ON todos_project_registration_receipts (
181
+ authority_id, tenant_id, corpus_id, operation_id, step_id,
182
+ resource_kind, direction, outcome
183
+ )`,
184
+ `CREATE UNIQUE INDEX IF NOT EXISTS todos_project_registration_receipts_accepted_step_uidx
185
+ ON todos_project_registration_receipts (
186
+ authority_id, tenant_id, corpus_id, operation_id, step_id,
187
+ resource_kind, direction
188
+ )
189
+ WHERE outcome = 'accepted'`,
190
+ `CREATE INDEX IF NOT EXISTS todos_project_registration_receipts_target_idx
191
+ ON todos_project_registration_receipts (
192
+ authority_id, tenant_id, corpus_id, resource_kind, target_id
193
+ )`,
194
+ `CREATE TABLE IF NOT EXISTS todos_project_registration_bindings (
195
+ authority_id text NOT NULL,
196
+ tenant_id text NOT NULL,
197
+ corpus_id text NOT NULL,
198
+ resource_kind text NOT NULL CHECK(resource_kind IN ('project', 'task_list')),
199
+ target_selector text NOT NULL,
200
+ operation_id text NOT NULL,
201
+ step_id text NOT NULL,
202
+ direction text NOT NULL CHECK(direction = 'forward'),
203
+ idempotency_key text NOT NULL,
204
+ request_digest text NOT NULL,
205
+ precondition_digest text NOT NULL,
206
+ normalized_call_digest text NOT NULL,
207
+ state text NOT NULL CHECK(state IN (
208
+ 'pending', 'accepted', 'terminal_nonacceptance', 'removed'
209
+ )),
210
+ target_id text,
211
+ accepted_receipt_id text UNIQUE,
212
+ result_revision text,
213
+ result_digest text,
214
+ removed_receipt_id text,
215
+ created_at timestamptz NOT NULL,
216
+ updated_at timestamptz NOT NULL,
217
+ PRIMARY KEY(
218
+ authority_id, tenant_id, corpus_id, resource_kind, target_selector
219
+ )
220
+ )`,
221
+ `CREATE UNIQUE INDEX IF NOT EXISTS todos_project_registration_binding_target_uidx
222
+ ON todos_project_registration_bindings(
223
+ authority_id, tenant_id, corpus_id, resource_kind, target_id
224
+ )
225
+ WHERE target_id IS NOT NULL`,
226
+ `CREATE OR REPLACE FUNCTION todos_project_registration_receipts_immutable()
227
+ RETURNS trigger
228
+ LANGUAGE plpgsql
229
+ AS $$
230
+ BEGIN
231
+ RAISE EXCEPTION 'todos project registration receipts are immutable';
232
+ END;
233
+ $$`,
234
+ `DROP TRIGGER IF EXISTS todos_project_registration_receipts_immutable
235
+ ON todos_project_registration_receipts`,
236
+ `CREATE TRIGGER todos_project_registration_receipts_immutable
237
+ BEFORE UPDATE OR DELETE ON todos_project_registration_receipts
238
+ FOR EACH ROW EXECUTE FUNCTION todos_project_registration_receipts_immutable()`
239
+ ];
240
+ }
241
+
42
242
  // src/db/migrations.ts
43
243
  var MIGRATIONS;
44
244
  var init_migrations = __esm(() => {
@@ -1644,6 +1844,11 @@ var init_migrations = __esm(() => {
1644
1844
  INSERT OR IGNORE INTO _migrations (id) VALUES (68);
1645
1845
  COMMIT;
1646
1846
  PRAGMA foreign_keys = ON;
1847
+ `,
1848
+ `BEGIN;
1849
+ ${sqliteTodosProjectRegistrationSchemaSql()}
1850
+ INSERT OR IGNORE INTO _migrations (id) VALUES (69);
1851
+ COMMIT;
1647
1852
  `
1648
1853
  ];
1649
1854
  });
@@ -2846,6 +3051,7 @@ function ensureSchema(db) {
2846
3051
  )`);
2847
3052
  ensureIndex("CREATE INDEX IF NOT EXISTS idx_api_keys_prefix ON api_keys(prefix)");
2848
3053
  ensureIndex("CREATE INDEX IF NOT EXISTS idx_api_keys_active ON api_keys(revoked_at, expires_at)");
3054
+ db.exec(sqliteTodosProjectRegistrationSchemaSql());
2849
3055
  ensureTable("pr_groups", `
2850
3056
  CREATE TABLE pr_groups (
2851
3057
  schema_version INTEGER NOT NULL DEFAULT 1,
@@ -12044,7 +12250,7 @@ var init_tasks = __esm(() => {
12044
12250
  // package.json
12045
12251
  var package_default = {
12046
12252
  name: "@hasna/todos",
12047
- version: "0.15.5",
12253
+ version: "0.15.7",
12048
12254
  description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
12049
12255
  type: "module",
12050
12256
  main: "dist/index.js",
@@ -12082,6 +12288,10 @@ var package_default = {
12082
12288
  "./testing": {
12083
12289
  types: "./dist/testing.d.ts",
12084
12290
  import: "./dist/testing.js"
12291
+ },
12292
+ "./project-registration": {
12293
+ types: "./dist/project-registration.d.ts",
12294
+ import: "./dist/project-registration.js"
12085
12295
  }
12086
12296
  },
12087
12297
  workspaces: [
@@ -12094,8 +12304,8 @@ var package_default = {
12094
12304
  "README.md"
12095
12305
  ],
12096
12306
  scripts: {
12097
- build: "rm -rf dist dashboard/dist && cd dashboard && bun install --frozen-lockfile && bun run build && cd .. && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && tsc --emitDeclarationOnly --outDir dist",
12098
- "build:server": "rm -rf dist && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*'",
12307
+ build: "rm -rf dist dashboard/dist && cd dashboard && bun install --frozen-lockfile && bun run build && cd .. && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts src/project-registration.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && tsc --emitDeclarationOnly --outDir dist",
12308
+ "build:server": "rm -rf dist && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts src/project-registration.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*'",
12099
12309
  migrate: "bun run src/server/index.ts migrate",
12100
12310
  "backfill:comment-redaction": "bun run src/server/index.ts redact-comments",
12101
12311
  "generate:sdk": "bun run scripts/generate-sdk.ts",
@@ -23738,6 +23948,13 @@ var TODOS_PACKAGE_EXPORTS = [
23738
23948
  types: "./dist/testing.d.ts",
23739
23949
  description: "Test-store isolation helpers that keep a consumer's test suite off a shared todos store.",
23740
23950
  stability: "stable"
23951
+ },
23952
+ {
23953
+ subpath: "./project-registration",
23954
+ import: "./dist/project-registration.js",
23955
+ types: "./dist/project-registration.d.ts",
23956
+ description: "Conditional Projects-to-Todos project and task-list registration authority.",
23957
+ stability: "stable"
23741
23958
  }
23742
23959
  ];
23743
23960
  function source8(version) {
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "packageName": "@hasna/todos",
3
- "packageVersion": "0.15.5",
3
+ "packageVersion": "0.15.7",
4
4
  "repository": "https://github.com/hasna/todos.git",
5
- "gitCommit": "f4b7416f32a052da6dc214930464e1844227013c",
6
- "gitTree": "c0b3579fad025c98669a980fc2686ac652348348",
7
- "sourceTreeSha256": "00ccce54628bd319f2cae61ba552bb5543b242b287e48b94000063d516427abe",
8
- "generatedAt": "2026-08-05T16:20:19.000Z"
5
+ "gitCommit": "6ef5eb2227291a359af981c83ef65de91095c0fb",
6
+ "gitTree": "bd69c321f9e9bad133ceb8651951b6249275f0ed",
7
+ "sourceTreeSha256": "66e3e6e675918a3270ba06abecb416fe9c028316f2c53d61e753f29d38855318",
8
+ "generatedAt": "2026-08-07T15:16:11.000Z"
9
9
  }
@@ -12,6 +12,7 @@ import { type ApiKeyVerifier } from "@hasna/contracts/auth";
12
12
  import { ApiKeyStore } from "@hasna/contracts/auth";
13
13
  import type { TodosStorageAdapter } from "../storage/interfaces.js";
14
14
  import { PrGroupLedger } from "../pr-groups/ledger.js";
15
+ import { type TodosProjectRegistrationAuthority } from "../project-registration/index.js";
15
16
  import { type CommentRedactionBackfillOptions, type CommentRedactionBackfillResult } from "../storage/comment-redaction-backfill.js";
16
17
  export declare const TODOS_APP_SLUG = "todos";
17
18
  /** Resolve the remote DATABASE_URL from the supported env vars (in priority order). */
@@ -31,6 +32,8 @@ export declare function isCloudModeEnabled(env?: NodeJS.ProcessEnv): boolean;
31
32
  export declare function getCloudStorageAdapter(): TodosStorageAdapter;
32
33
  /** Transactionally fenced PR-group ledger backed by dedicated Postgres rows. */
33
34
  export declare function getCloudPrGroupLedger(): PrGroupLedger;
35
+ /** Conditional singleton Projects → Todos registration authority on Postgres. */
36
+ export declare function getCloudProjectRegistrationAuthority(): TodosProjectRegistrationAuthority;
34
37
  export declare function getApiKeyStore(): ApiKeyStore;
35
38
  /**
36
39
  * The framework-agnostic API-key verifier for `/v1`. Tokens are stateless,
@@ -1 +1 @@
1
- {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/server/cloud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAwB,MAAM,uBAAuB,CAAC;AAG1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAYvD,OAAO,EAEL,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACpC,MAAM,0CAA0C,CAAC;AAElD,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,uFAAuF;AACvF,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAOhG;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAO7F;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEzF;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEhF;AAqBD,4EAA4E;AAC5E,wBAAgB,sBAAsB,IAAI,mBAAmB,CAK5D;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,IAAI,aAAa,CAIrD;AAuBD,wBAAgB,cAAc,IAAI,WAAW,CAI5C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAejD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAavD;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjE;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAElE;AAED,uFAAuF;AACvF,wBAAsB,kCAAkC,IAAI,OAAO,CAAC,IAAI,CAAC,CAExE;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC,CAS9D;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,8BAA8B,CAAC,CAEzC;AAED,iEAAiE;AACjE,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAIlD;AAED,4BAA4B;AAC5B,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAQhD"}
1
+ {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/server/cloud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAwB,MAAM,uBAAuB,CAAC;AAG1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKvD,OAAO,EAGL,KAAK,iCAAiC,EACvC,MAAM,kCAAkC,CAAC;AAQ1C,OAAO,EAEL,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACpC,MAAM,0CAA0C,CAAC;AAElD,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,uFAAuF;AACvF,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAOhG;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAO7F;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEzF;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEhF;AAsBD,4EAA4E;AAC5E,wBAAgB,sBAAsB,IAAI,mBAAmB,CAK5D;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,IAAI,aAAa,CAIrD;AAED,iFAAiF;AACjF,wBAAgB,oCAAoC,IAAI,iCAAiC,CAYxF;AAuBD,wBAAgB,cAAc,IAAI,WAAW,CAI5C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAejD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBvD;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjE;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAElE;AAED,uFAAuF;AACvF,wBAAsB,kCAAkC,IAAI,OAAO,CAAC,IAAI,CAAC,CAExE;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC,CAS9D;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,8BAA8B,CAAC,CAEzC;AAED,iEAAiE;AACjE,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAIlD;AAED,4BAA4B;AAC5B,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAShD"}