@hasna/todos 0.16.0 → 0.17.0

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 (70) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/README.md +59 -22
  3. package/dist/cli/cloud-router.d.ts +63 -21
  4. package/dist/cli/cloud-router.d.ts.map +1 -1
  5. package/dist/cli/commands/config-serve-commands.d.ts.map +1 -1
  6. package/dist/cli/commands/template-commands.d.ts.map +1 -1
  7. package/dist/cli/index.js +2591 -503
  8. package/dist/cli/stage-a.d.ts +2 -12
  9. package/dist/cli/stage-a.d.ts.map +1 -1
  10. package/dist/cli/template-remote.d.ts +90 -0
  11. package/dist/cli/template-remote.d.ts.map +1 -0
  12. package/dist/cli-mcp-parity.d.ts.map +1 -1
  13. package/dist/contracts.js +77 -30
  14. package/dist/db/agents.d.ts +8 -0
  15. package/dist/db/agents.d.ts.map +1 -1
  16. package/dist/db/database.d.ts +6 -0
  17. package/dist/db/database.d.ts.map +1 -1
  18. package/dist/db/identity-mapping.d.ts +25 -0
  19. package/dist/db/identity-mapping.d.ts.map +1 -1
  20. package/dist/db/task-crud.d.ts.map +1 -1
  21. package/dist/index.js +496 -58
  22. package/dist/lib/feature-manifest.d.ts.map +1 -1
  23. package/dist/lib/local-opt-in.d.ts +14 -0
  24. package/dist/lib/local-opt-in.d.ts.map +1 -1
  25. package/dist/lib/paths.d.ts +11 -1
  26. package/dist/lib/paths.d.ts.map +1 -1
  27. package/dist/mcp/index.d.ts +52 -0
  28. package/dist/mcp/index.d.ts.map +1 -1
  29. package/dist/mcp/index.js +15162 -30695
  30. package/dist/mcp/tools/agents.d.ts.map +1 -1
  31. package/dist/mcp/tools/task-adv-tools.d.ts.map +1 -1
  32. package/dist/mcp/tools/task-auto-tools.d.ts.map +1 -1
  33. package/dist/mcp/tools/task-crud.d.ts.map +1 -1
  34. package/dist/mcp/tools/task-meta-tools.d.ts.map +1 -1
  35. package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
  36. package/dist/mcp/tools/task-resources.d.ts.map +1 -1
  37. package/dist/mcp/tools/templates.d.ts.map +1 -1
  38. package/dist/mcp.js +3 -3
  39. package/dist/project-registration.js +466 -35
  40. package/dist/registry.js +77 -30
  41. package/dist/release-provenance.json +5 -5
  42. package/dist/sdk/client.d.ts +3 -1
  43. package/dist/sdk/client.d.ts.map +1 -1
  44. package/dist/sdk/index.js +48 -12
  45. package/dist/sdk/resolve.d.ts +23 -13
  46. package/dist/sdk/resolve.d.ts.map +1 -1
  47. package/dist/sdk/types.d.ts +17 -2
  48. package/dist/sdk/types.d.ts.map +1 -1
  49. package/dist/sdk/v1.generated.d.ts +115 -0
  50. package/dist/sdk/v1.generated.d.ts.map +1 -1
  51. package/dist/server/index.js +3972 -916
  52. package/dist/server/openapi.d.ts +837 -50
  53. package/dist/server/openapi.d.ts.map +1 -1
  54. package/dist/server/rate-limit-config.d.ts +6 -0
  55. package/dist/server/rate-limit-config.d.ts.map +1 -0
  56. package/dist/server/serve.d.ts.map +1 -1
  57. package/dist/server/v1.d.ts.map +1 -1
  58. package/dist/storage/index.d.ts +1 -1
  59. package/dist/storage/index.d.ts.map +1 -1
  60. package/dist/storage/interfaces.d.ts +74 -3
  61. package/dist/storage/interfaces.d.ts.map +1 -1
  62. package/dist/storage/local-sqlite.d.ts.map +1 -1
  63. package/dist/storage/postgres-adapter.d.ts.map +1 -1
  64. package/dist/storage.js +464 -33
  65. package/dist/task-manifest.js +8 -2
  66. package/dist/types/index.d.ts +5 -2
  67. package/dist/types/index.d.ts.map +1 -1
  68. package/package.json +2 -2
  69. package/dist/mcp/tools/code-tools.d.ts +0 -15
  70. package/dist/mcp/tools/code-tools.d.ts.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { Command } from "commander";
2
2
  import { type TodosRemoteCommandCapability } from "./cloud-router.js";
3
+ import { todosLocalModeNotice } from "../lib/local-opt-in.js";
3
4
  type Env = Record<string, string | undefined>;
4
5
  export type TodosCliAuthorityInitialization = {
5
6
  route: "local";
@@ -36,17 +37,7 @@ export type TodosCliCommandOwner = "diagnostic" | "remote-http" | "local-only";
36
37
  * "absent" everywhere, so a blank can never turn "no cloud client" into a hard
37
38
  * error.
38
39
  */
39
- /**
40
- * The one line a local run prints, and the reason it prints at all.
41
- *
42
- * An unhosted CLI that says nothing looks exactly like a hosted one whose store
43
- * happens to be empty — that is the false green the 2026-09-04 ruling
44
- * (hasna/apps#1720) closes, and it is why the notice is unconditional rather
45
- * than behind a verbosity flag. It goes to STDERR so `--json` output stays a
46
- * clean parseable document on stdout, and it names the credential the run did
47
- * NOT find, so the fix is in the message rather than in the docs.
48
- */
49
- export declare function todosLocalModeNotice(reason?: "local-opt-in" | "local-only-command"): string;
40
+ export { todosLocalModeNotice };
50
41
  /**
51
42
  * Print {@link todosLocalModeNotice} once for a run that resolved to the local
52
43
  * store. A no-op for every hosted route, so a hosted run's stderr stays empty.
@@ -114,5 +105,4 @@ export declare function getUnavailableTodosCliRemoteMetadataCommand(route: Todos
114
105
  * client for remote-supported commands.
115
106
  */
116
107
  export declare function initializeTodosCliAuthority(args?: string[], env?: Env): TodosCliAuthorityInitialization;
117
- export {};
118
108
  //# sourceMappingURL=stage-a.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stage-a.d.ts","sourceRoot":"","sources":["../../src/cli/stage-a.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAQ,MAAM,WAAW,CAAC;AAC1C,OAAO,EAKL,KAAK,4BAA4B,EAClC,MAAM,mBAAmB,CAAC;AAE3B,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE9C,MAAM,MAAM,+BAA+B,GACvC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,oBAAoB,CAAA;CAAE,GACzE;IAAE,KAAK,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC1D;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,cAAc,GAAG,oBAAqC,GAAG,MAAM,CAa3G;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,+BAA+B,EAC1C,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkD,GAC1E,OAAO,CAIT;AAED,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,+BAA+B,EAC1C,GAAG,GAAE,GAAwB,GAC5B,IAAI,CAWN;AAyBD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;CA8BgB,CAAC;AAoFvD,wBAAgB,kCAAkC,IAAI,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAE9F;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,+BAA+B,CAAC,OAAO,CAAC,EAC/C,kBAAkB,GAAE,WAAW,CAAC,4BAA4B,CAAa,GACxE,OAAO,CAOT;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,+BAA+B,CAAC,OAAO,CAAC,EAC/C,kBAAkB,GAAE,WAAW,CAAC,4BAA4B,CAAa,GACxE,IAAI,CAUN;AAED;;;;;;;;GAQG;AACH,wBAAgB,2CAA2C,CACzD,KAAK,EAAE,+BAA+B,CAAC,OAAO,CAAC,EAC/C,kBAAkB,GAAE,WAAW,CAAC,4BAA4B,CAAa,EACzE,IAAI,GAAE,SAAS,MAAM,EAAO,GAC3B,MAAM,GAAG,IAAI,CAYf;AA+XD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,GAAE,MAAM,EAA0B,EACtC,GAAG,GAAE,GAAwB,GAC5B,+BAA+B,CA6DjC"}
1
+ {"version":3,"file":"stage-a.d.ts","sourceRoot":"","sources":["../../src/cli/stage-a.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAQ,MAAM,WAAW,CAAC;AAC1C,OAAO,EAKL,KAAK,4BAA4B,EAClC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE9C,MAAM,MAAM,+BAA+B,GACvC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,oBAAoB,CAAA;CAAE,GACzE;IAAE,KAAK,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC1D;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,+BAA+B,EAC1C,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkD,GAC1E,OAAO,CAIT;AAED,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,+BAA+B,EAC1C,GAAG,GAAE,GAAwB,GAC5B,IAAI,CAWN;AAyBD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;CA8BgB,CAAC;AAoFvD,wBAAgB,kCAAkC,IAAI,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAE9F;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,+BAA+B,CAAC,OAAO,CAAC,EAC/C,kBAAkB,GAAE,WAAW,CAAC,4BAA4B,CAAa,GACxE,OAAO,CAOT;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,+BAA+B,CAAC,OAAO,CAAC,EAC/C,kBAAkB,GAAE,WAAW,CAAC,4BAA4B,CAAa,GACxE,IAAI,CAUN;AAED;;;;;;;;GAQG;AACH,wBAAgB,2CAA2C,CACzD,KAAK,EAAE,+BAA+B,CAAC,OAAO,CAAC,EAC/C,kBAAkB,GAAE,WAAW,CAAC,4BAA4B,CAAa,EACzE,IAAI,GAAE,SAAS,MAAM,EAAO,GAC3B,MAAM,GAAG,IAAI,CAYf;AA+XD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,GAAE,MAAM,EAA0B,EACtC,GAAG,GAAE,GAAwB,GAC5B,+BAA+B,CA6DjC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Hosted-only reusable-template operations, shared by the CLI `template*`
3
+ * verbs and the MCP template tools.
4
+ *
5
+ * These were private to `src/cli/commands/template-commands.ts`; the MCP tools
6
+ * had no cloud arm at all and went straight to `db/templates.js` (T1 §4:
7
+ * "Direct CLI<->MCP parity break"). Extracting them keeps ONE remote
8
+ * implementation of the template contract instead of a second copy behind the
9
+ * MCP door — this module never imports commander, chalk or `db/*`, so the MCP
10
+ * bin can use it without pulling the CLI renderer or `bun:sqlite` in.
11
+ */
12
+ import type { TemplatePreview } from "../db/templates.js";
13
+ import type { Task, TemplateWithTasks } from "../types/index.js";
14
+ import type { HasnaStorageClient } from "@hasna/contracts/client/storage";
15
+ export declare function requireTemplateClient(): HasnaStorageClient;
16
+ export declare function resolveRemoteTemplate(client: HasnaStorageClient, ref: string): Promise<TemplateWithTasks | null>;
17
+ export interface TemplateApplyProgress {
18
+ tasks: Task[];
19
+ dependencies: Array<{
20
+ task_id: string;
21
+ depends_on: string;
22
+ }>;
23
+ pending: string | null;
24
+ }
25
+ export declare class TemplateApplyError extends Error {
26
+ readonly progress: TemplateApplyProgress;
27
+ constructor(progress: TemplateApplyProgress);
28
+ }
29
+ export declare function preflightTemplate(client: HasnaStorageClient, template: TemplateWithTasks, variables: Record<string, string>, seen?: Set<string>): Promise<void>;
30
+ export interface RemoteTemplateApplication {
31
+ tasks: Task[];
32
+ }
33
+ export interface RemoteTemplateOverrides {
34
+ title?: string;
35
+ description?: string;
36
+ priority?: TemplateWithTasks["priority"];
37
+ }
38
+ export interface RemoteTemplateApplicationOptions {
39
+ /** Actor recorded by the hosted authority for task creation. */
40
+ actorAgentId?: string;
41
+ /** Assignee that must survive the authoritative create/readback cycle. */
42
+ assignedTo?: string;
43
+ /** Canonical task-list ID applied to every task created from the template. */
44
+ taskListId?: string;
45
+ /** Top-level single-task overrides; not propagated into included templates. */
46
+ overrides?: RemoteTemplateOverrides;
47
+ }
48
+ export declare function normalizeTemplateDescription(value: string | null | undefined): string | null;
49
+ /**
50
+ * Keep cloud preview output byte-for-byte compatible with the canonical local
51
+ * preview contract. Preview intentionally shows only the template's direct
52
+ * checklist steps; execution handles included templates separately.
53
+ */
54
+ export declare function previewRemoteTemplate(template: TemplateWithTasks, variables?: Record<string, string>): TemplatePreview;
55
+ /**
56
+ * /v1/templates/:id returns the complete template, including ordered checklist
57
+ * steps. Strip storage-only fields so cloud exports round-trip through the
58
+ * canonical template-import contract just like local exports.
59
+ */
60
+ export declare function exportRemoteTemplate(template: TemplateWithTasks): {
61
+ name: string;
62
+ title_pattern: string;
63
+ description: string | null;
64
+ priority: "low" | "medium" | "high" | "critical";
65
+ tags: string[];
66
+ variables: import("../index.js").TemplateVariable[];
67
+ project_id: string | null;
68
+ plan_id: string | null;
69
+ metadata: Record<string, unknown>;
70
+ tasks: {
71
+ position: number;
72
+ title_pattern: string;
73
+ description: string | null;
74
+ priority: "low" | "medium" | "high" | "critical";
75
+ tags: string[];
76
+ task_type: string | null;
77
+ condition: string | null;
78
+ include_template_id: string | null;
79
+ depends_on_positions: number[];
80
+ metadata: Record<string, unknown>;
81
+ }[];
82
+ };
83
+ /**
84
+ * Apply the reusable-template contract through the hosted /v1 API without
85
+ * opening local storage. This deliberately shares the variable and condition
86
+ * language with the SQLite implementation while resolving included templates
87
+ * through authenticated cloud reads.
88
+ */
89
+ export declare function createRemoteTemplateTasks(cloud: HasnaStorageClient, template: TemplateWithTasks, projectId: string | undefined, variables: Record<string, string>, options?: RemoteTemplateApplicationOptions, visited?: Set<string>, progress?: TemplateApplyProgress): Promise<RemoteTemplateApplication>;
90
+ //# sourceMappingURL=template-remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-remote.d.ts","sourceRoot":"","sources":["../../src/cli/template-remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAe1E,wBAAgB,qBAAqB,IAAI,kBAAkB,CAQ1D;AACD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,kBAAkB,EAC1B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAYnC;AACD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AACD,qBAAa,kBAAmB,SAAQ,KAAK;IAC/B,QAAQ,CAAC,QAAQ,EAAE,qBAAqB;gBAA/B,QAAQ,EAAE,qBAAqB;CAKrD;AACD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,IAAI,cAAoB,GACvB,OAAO,CAAC,IAAI,CAAC,CAuBf;AACD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,gCAAgC;IAC/C,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,uBAAuB,CAAC;CACrC;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B,MAAM,GAAG,IAAI,CAEf;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,eAAe,CAqDjB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;EAwB/D;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,OAAO,GAAE,gCAAqC,EAC9C,OAAO,cAAoB,EAC3B,QAAQ,GAAE,qBAIT,GACA,OAAO,CAAC,yBAAyB,CAAC,CAmIpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cli-mcp-parity.d.ts","sourceRoot":"","sources":["../src/cli-mcp-parity.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,uBAAuB,GAC/B,OAAO,GACP,YAAY,GACZ,WAAW,GACX,OAAO,GACP,gBAAgB,GAChB,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,QAAQ,GACR,wBAAwB,GACxB,UAAU,GACV,OAAO,GACP,UAAU,GACV,UAAU,GACV,cAAc,GACd,uBAAuB,GACvB,cAAc,GACd,oBAAoB,GACpB,iBAAiB,GACjB,WAAW,GACX,iBAAiB,GACjB,eAAe,GACf,mBAAmB,GACnB,gBAAgB,GAChB,YAAY,GACZ,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,mBAAmB,GACnB,wBAAwB,GACxB,mBAAmB,GACnB,yBAAyB,GACzB,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,UAAU,GACV,eAAe,GACf,eAAe,GACf,UAAU,GACV,MAAM,GACN,UAAU,GACV,QAAQ,GACR,eAAe,GACf,eAAe,GACf,uBAAuB,GACvB,YAAY,GACZ,iBAAiB,GACjB,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAEpE,MAAM,WAAW,iCAAiC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,uBAAuB,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,uBAAuB,CAAC;IAChC,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,8BAA8B,CAAC;IACxC,SAAS,EAAE,IAAI,CAAC;IAChB,iBAAiB,EAAE,IAAI,CAAC;IACxB,MAAM,EAAE,sBAAsB,EAAE,CAAC;CAClC;AAUD,eAAO,MAAM,oBAAoB,EAAE,sBAAsB,EAmsCxD,CAAC;AAYF,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,iCAAsC,GAC9C,yBAAyB,CAW3B;AAED,eAAO,MAAM,6BAA6B,2BAExC,CAAC"}
1
+ {"version":3,"file":"cli-mcp-parity.d.ts","sourceRoot":"","sources":["../src/cli-mcp-parity.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,uBAAuB,GAC/B,OAAO,GACP,YAAY,GACZ,WAAW,GACX,OAAO,GACP,gBAAgB,GAChB,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,QAAQ,GACR,wBAAwB,GACxB,UAAU,GACV,OAAO,GACP,UAAU,GACV,UAAU,GACV,cAAc,GACd,uBAAuB,GACvB,cAAc,GACd,oBAAoB,GACpB,iBAAiB,GACjB,WAAW,GACX,iBAAiB,GACjB,eAAe,GACf,mBAAmB,GACnB,gBAAgB,GAChB,YAAY,GACZ,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,mBAAmB,GACnB,wBAAwB,GACxB,mBAAmB,GACnB,yBAAyB,GACzB,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,UAAU,GACV,eAAe,GACf,eAAe,GACf,UAAU,GACV,MAAM,GACN,UAAU,GACV,QAAQ,GACR,eAAe,GACf,eAAe,GACf,uBAAuB,GACvB,YAAY,GACZ,iBAAiB,GACjB,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAEpE,MAAM,WAAW,iCAAiC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,uBAAuB,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,uBAAuB,CAAC;IAChC,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,8BAA8B,CAAC;IACxC,SAAS,EAAE,IAAI,CAAC;IAChB,iBAAiB,EAAE,IAAI,CAAC;IACxB,MAAM,EAAE,sBAAsB,EAAE,CAAC;CAClC;AAUD,eAAO,MAAM,oBAAoB,EAAE,sBAAsB,EAysCxD,CAAC;AAYF,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,iCAAsC,GAC9C,yBAAyB,CAW3B;AAED,eAAO,MAAM,6BAA6B,2BAExC,CAAC"}
package/dist/contracts.js CHANGED
@@ -4117,20 +4117,17 @@ function ensureAgentIdentitySchema(db) {
4117
4117
  SELECT RAISE(ABORT, 'IDENTITY_SOURCE_LINEAGE_IMMUTABLE');
4118
4118
  END;
4119
4119
 
4120
+ -- Drop first so an older definition is replaced rather than silently
4121
+ -- retained (the upgrade path). AGENT_IDENTITY_HISTORY_TRIGGER_DDL then
4122
+ -- re-creates them with CREATE TRIGGER IF NOT EXISTS. The two statements
4123
+ -- do different jobs and both are kept: the DROP is what refreshes a
4124
+ -- stale definition, and the IF NOT EXISTS is what keeps the CREATE safe
4125
+ -- on its own \u2014 so a caller that reaches it without a preceding DROP, in
4126
+ -- its own connection or transaction, gets a no-op instead of
4127
+ -- "trigger ... already exists".
4120
4128
  DROP TRIGGER IF EXISTS trg_agent_identity_mapping_history_immutable;
4121
- CREATE TRIGGER trg_agent_identity_mapping_history_immutable
4122
- BEFORE UPDATE OF local_agent_id, observed_label, evidence, mapping_basis, status, revision, created_at
4123
- ON agent_identity_source_mappings
4124
- BEGIN
4125
- SELECT RAISE(ABORT, 'IDENTITY_MAPPING_HISTORY_IMMUTABLE');
4126
- END;
4127
-
4128
4129
  DROP TRIGGER IF EXISTS trg_agent_identity_mapping_history_append_only;
4129
- CREATE TRIGGER trg_agent_identity_mapping_history_append_only
4130
- BEFORE DELETE ON agent_identity_source_mappings
4131
- BEGIN
4132
- SELECT RAISE(ABORT, 'IDENTITY_MAPPING_HISTORY_IMMUTABLE');
4133
- END;
4130
+ ${AGENT_IDENTITY_HISTORY_TRIGGER_DDL}
4134
4131
  `);
4135
4132
  db.run("INSERT OR IGNORE INTO _migrations (id) VALUES (?)", [IDENTITY_MIGRATION_ID]);
4136
4133
  });
@@ -4170,7 +4167,20 @@ function storeAgentAlias(agentId, label, aliasKind, status, db) {
4170
4167
  function recordAgentAlias(agentId, label, db) {
4171
4168
  return storeAgentAlias(agentId, label, "historical", "active", db);
4172
4169
  }
4173
- var IDENTITY_PROJECTION_CONTRACT, IDENTITY_MIGRATION_ID = 65;
4170
+ var IDENTITY_PROJECTION_CONTRACT, IDENTITY_MIGRATION_ID = 65, AGENT_IDENTITY_HISTORY_TRIGGER_DDL = `
4171
+ CREATE TRIGGER IF NOT EXISTS trg_agent_identity_mapping_history_immutable
4172
+ BEFORE UPDATE OF local_agent_id, observed_label, evidence, mapping_basis, status, revision, created_at
4173
+ ON agent_identity_source_mappings
4174
+ BEGIN
4175
+ SELECT RAISE(ABORT, 'IDENTITY_MAPPING_HISTORY_IMMUTABLE');
4176
+ END;
4177
+
4178
+ CREATE TRIGGER IF NOT EXISTS trg_agent_identity_mapping_history_append_only
4179
+ BEFORE DELETE ON agent_identity_source_mappings
4180
+ BEGIN
4181
+ SELECT RAISE(ABORT, 'IDENTITY_MAPPING_HISTORY_IMMUTABLE');
4182
+ END;
4183
+ `;
4174
4184
  var init_identity_mapping = __esm(() => {
4175
4185
  init_types();
4176
4186
  init_types();
@@ -4195,7 +4205,7 @@ var init_identity_mapping = __esm(() => {
4195
4205
  // src/lib/paths.ts
4196
4206
  import { existsSync as existsSync2 } from "fs";
4197
4207
  import { homedir } from "os";
4198
- import { join, resolve as resolve2 } from "path";
4208
+ import { isAbsolute, join, resolve as resolve2 } from "path";
4199
4209
  import { homedir as pathsResolverHomedir } from "os";
4200
4210
  import { join as pathsResolverJoin } from "path";
4201
4211
  function pathsResolverAssertApp(app) {
@@ -4252,8 +4262,14 @@ function dataDir(options) {
4252
4262
  function effectiveHome(env2 = process.env) {
4253
4263
  return env2.HOME || env2.USERPROFILE || homedir();
4254
4264
  }
4265
+ function hasnaHomeRoot(env2 = process.env) {
4266
+ const override = env2["HASNA_HOME"]?.trim();
4267
+ if (override && isAbsolute(override))
4268
+ return override;
4269
+ return join(effectiveHome(env2), ".hasna");
4270
+ }
4255
4271
  function legacyHomeDir(env2 = process.env) {
4256
- return join(effectiveHome(env2), ".hasna", "todos");
4272
+ return join(hasnaHomeRoot(env2), "todos");
4257
4273
  }
4258
4274
  function resolverHome(env2 = process.env) {
4259
4275
  return dataDir({ app: "todos", home: effectiveHome(env2), env: env2 });
@@ -4672,15 +4688,18 @@ __export(exports_database, {
4672
4688
  resolvePartialId: () => resolvePartialId,
4673
4689
  resolveAssignedToAliases: () => resolveAssignedToAliases,
4674
4690
  resetDatabase: () => resetDatabase,
4691
+ refuseLocalStore: () => refuseLocalStore,
4675
4692
  now: () => now,
4676
4693
  lowerInClause: () => lowerInClause,
4677
4694
  lockExpiryCutoff: () => lockExpiryCutoff,
4678
4695
  isLockExpired: () => isLockExpired,
4696
+ isLocalStoreRefused: () => isLocalStoreRefused,
4679
4697
  getDatabasePath: () => getDatabasePath,
4680
4698
  getDatabase: () => getDatabase,
4681
4699
  closeDatabase: () => closeDatabase,
4682
4700
  clearExpiredLocks: () => clearExpiredLocks,
4683
4701
  assignedToAliasSet: () => assignedToAliasSet,
4702
+ allowLocalStore: () => allowLocalStore,
4684
4703
  LOCK_EXPIRY_MINUTES: () => LOCK_EXPIRY_MINUTES
4685
4704
  });
4686
4705
  import { Database } from "bun:sqlite";
@@ -4797,7 +4816,18 @@ function maybeInstallShadowCapture(db) {
4797
4816
  console.error(`[todos] shadow capture install failed: ${error instanceof Error ? error.message : String(error)}`);
4798
4817
  }
4799
4818
  }
4819
+ function refuseLocalStore(message) {
4820
+ localStoreRefusal = message;
4821
+ }
4822
+ function allowLocalStore() {
4823
+ localStoreRefusal = null;
4824
+ }
4825
+ function isLocalStoreRefused() {
4826
+ return localStoreRefusal !== null;
4827
+ }
4800
4828
  function getDatabase(dbPath) {
4829
+ if (localStoreRefusal !== null)
4830
+ throw new Error(localStoreRefusal);
4801
4831
  if (dbPath === undefined && !selectsTodosLocalStore()) {
4802
4832
  throw new Error("API_DATABASE_FALLBACK_FORBIDDEN: this operation must use the shared Todos API; implicit SQLite access is unavailable");
4803
4833
  }
@@ -4938,7 +4968,7 @@ function lowerInClause(column, values, params) {
4938
4968
  params.push(...values.map((v) => v.toLowerCase()));
4939
4969
  return `LOWER(${column}) IN (${values.map(() => "?").join(",")})`;
4940
4970
  }
4941
- var LOCK_EXPIRY_MINUTES = 30, _db = null, _dbPath = null, ALLOWED_TABLES;
4971
+ var LOCK_EXPIRY_MINUTES = 30, _db = null, _dbPath = null, localStoreRefusal = null, ALLOWED_TABLES;
4942
4972
  var init_database = __esm(() => {
4943
4973
  init_local_opt_in();
4944
4974
  init_schema();
@@ -10679,7 +10709,9 @@ function listTasks(filter = {}, db) {
10679
10709
  params.push(decoded.p, decoded.p, decoded.c, decoded.p, decoded.c, decoded.i);
10680
10710
  } catch {}
10681
10711
  }
10682
- if (!filter.include_archived) {
10712
+ if (filter.archived_only) {
10713
+ conditions.push("archived_at IS NOT NULL");
10714
+ } else if (!filter.include_archived) {
10683
10715
  conditions.push("archived_at IS NULL");
10684
10716
  }
10685
10717
  const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
@@ -10692,7 +10724,8 @@ function listTasks(filter = {}, db) {
10692
10724
  params.push(filter.offset);
10693
10725
  }
10694
10726
  }
10695
- const rows = d.query(`SELECT * FROM tasks ${where} ORDER BY ${PRIORITY_RANK}, created_at DESC, id ASC${limitClause}`).all(...params);
10727
+ const orderBy = filter.archived_only ? "archived_at DESC, id DESC" : `${PRIORITY_RANK}, created_at DESC, id ASC`;
10728
+ const rows = d.query(`SELECT * FROM tasks ${where} ORDER BY ${orderBy}${limitClause}`).all(...params);
10696
10729
  return rows.map(rowToTask);
10697
10730
  }
10698
10731
  function getTaskByFingerprint(fingerprint, db) {
@@ -10835,7 +10868,9 @@ function countTasks(filter = {}, db) {
10835
10868
  }
10836
10869
  }
10837
10870
  addMetadataConditions(filter.metadata, conditions, params);
10838
- if (!filter.include_archived) {
10871
+ if (filter.archived_only) {
10872
+ conditions.push("archived_at IS NOT NULL");
10873
+ } else if (!filter.include_archived) {
10839
10874
  conditions.push("archived_at IS NULL");
10840
10875
  }
10841
10876
  const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
@@ -10972,6 +11007,10 @@ function updateTaskStored(id, input, db) {
10972
11007
  sets.push("completed_at = ?");
10973
11008
  params.push(input.completed_at);
10974
11009
  }
11010
+ if (input.archived_at !== undefined) {
11011
+ sets.push("archived_at = ?");
11012
+ params.push(input.archived_at);
11013
+ }
10975
11014
  if (input.confidence !== undefined) {
10976
11015
  sets.push("confidence = ?");
10977
11016
  params.push(input.confidence);
@@ -11035,6 +11074,8 @@ function updateTaskStored(id, input, db) {
11035
11074
  logTaskChange(id, "update", "parent_id", task.parent_id, input.parent_id, agentId, d);
11036
11075
  if (input.assigned_to !== undefined && input.assigned_to !== task.assigned_to)
11037
11076
  logTaskChange(id, "update", "assigned_to", task.assigned_to, input.assigned_to, agentId, d);
11077
+ if (input.archived_at !== undefined && input.archived_at !== task.archived_at)
11078
+ logTaskChange(id, "update", "archived_at", task.archived_at, input.archived_at, agentId, d);
11038
11079
  if (input.working_dir !== undefined && input.working_dir !== task.working_dir)
11039
11080
  logTaskChange(id, "update", "working_dir", task.working_dir, input.working_dir, agentId, d);
11040
11081
  if (input.approved_by !== undefined)
@@ -13732,7 +13773,7 @@ var init_tasks = __esm(() => {
13732
13773
  // package.json
13733
13774
  var package_default = {
13734
13775
  name: "@hasna/todos",
13735
- version: "0.16.0",
13776
+ version: "0.17.0",
13736
13777
  description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
13737
13778
  type: "module",
13738
13779
  main: "dist/index.js",
@@ -13845,7 +13886,7 @@ var package_default = {
13845
13886
  url: "https://github.com/hasna/apps.git",
13846
13887
  directory: "apps/todos"
13847
13888
  },
13848
- homepage: "https://github.com/hasna/apps",
13889
+ homepage: "https://github.com/hasna/apps/tree/main/apps/todos#readme",
13849
13890
  bugs: {
13850
13891
  url: "https://github.com/hasna/apps/issues"
13851
13892
  },
@@ -14268,7 +14309,7 @@ var MCP_TOOL_GROUPS = {
14268
14309
  "machines_topology",
14269
14310
  "machines_unarchive"
14270
14311
  ],
14271
- maintenance: ["extract_todos", "get_sla_breaches", "notify_upcoming_deadlines", "run_doctor", "score_task", "watch_source_todos"]
14312
+ maintenance: ["get_sla_breaches", "notify_upcoming_deadlines", "run_doctor", "score_task"]
14272
14313
  };
14273
14314
  var MCP_PROFILE_GROUPS = {
14274
14315
  minimal: ["core", "loops"],
@@ -19693,17 +19734,23 @@ var TODOS_CLI_MCP_PARITY = [
19693
19734
  "todos extract",
19694
19735
  "todos extract-watch"
19695
19736
  ],
19696
- mcpTools: [
19697
- "extract_todos",
19698
- "watch_source_todos"
19699
- ],
19737
+ mcpTools: [],
19700
19738
  jsonContracts: ["source_code_index", "source_todo_comment", "task", "structured_error", "api_error"],
19701
19739
  errorContracts: ["structured_error", "api_error"],
19702
- status: "matched",
19703
- intentionalGaps: [],
19740
+ status: "intentional-gap",
19741
+ intentionalGaps: [
19742
+ {
19743
+ cliCommand: "todos extract",
19744
+ reason: "The source TODO index scans the local checkout the CLI runs in; the former extract_todos MCP tool read the agent host's filesystem behind a task-store tool surface and had no hosted arm, so it was removed (fleet alignment 2026-09-11)."
19745
+ },
19746
+ {
19747
+ cliCommand: "todos extract-watch",
19748
+ reason: "A polling filesystem watcher is a long-running local process, not an MCP tool call; the former watch_source_todos tool was removed with extract_todos \u2014 run `todos extract-watch` from the checkout instead."
19749
+ }
19750
+ ],
19751
+ gapReason: "Source scanning and watching are local-filesystem CLI operations; no MCP tool mapping.",
19704
19752
  example: {
19705
- cli: "todos extract . --dry-run --index --json",
19706
- mcpTool: "extract_todos"
19753
+ cli: "todos extract . --dry-run --index --json"
19707
19754
  }
19708
19755
  },
19709
19756
  {
@@ -43,6 +43,14 @@ export declare function getAgentByName(name: string, db?: Database): Agent | nul
43
43
  export declare function listAgents(opts?: {
44
44
  include_archived?: boolean;
45
45
  } | Database, db?: Database): Agent[];
46
+ export declare function listAgentsPage(options: {
47
+ include_archived?: boolean;
48
+ limit: number;
49
+ offset: number;
50
+ }, db?: Database): {
51
+ agents: Agent[];
52
+ total: number;
53
+ };
46
54
  export declare function updateAgentActivity(id: string, db?: Database): void;
47
55
  export declare function updateAgent(id: string, input: {
48
56
  name?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/db/agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/db/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAyB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAK9G,OAAO,EACL,qBAAqB,EAErB,4BAA4B,EAC5B,iBAAiB,EAElB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,CAAC;AAalF;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAS5D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,EAAE,CAShF;AAoBD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,kBAAkB,CAIlG;AA0HD,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,GAAG,kBAAkB,GAAG,MAAM,IAAI,kBAAkB,CAEhG;AAiBD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAapF;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,IAAI,CAIhE;AAQD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,IAAI,CAGxE;AAED,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,CAcnG;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACtE,EAAE,CAAC,EAAE,QAAQ,GACZ;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAcpC;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAGnE;AAED,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EACtO,EAAE,CAAC,EAAE,QAAQ,GACZ,KAAK,CAkEP;AAED,0GAA0G;AAC1G,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAG9D;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,IAAI,CAIpE;AAED,iCAAiC;AACjC,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,IAAI,CAItE;AAED,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,CAGxE;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,CAepD;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,MAAM,CAUrG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EAAE,EACtB,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7C,EAAE,CAAC,EAAE,QAAQ,GACZ;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAanC"}
@@ -1,6 +1,12 @@
1
1
  import { Database } from "bun:sqlite";
2
2
  export declare const LOCK_EXPIRY_MINUTES = 30;
3
3
  export declare function getDatabasePath(): string;
4
+ /** Refuse every local-store open for the rest of this process. */
5
+ export declare function refuseLocalStore(message: string): void;
6
+ /** Lift a refusal installed by {@link refuseLocalStore}. Test seam. */
7
+ export declare function allowLocalStore(): void;
8
+ /** True while {@link refuseLocalStore} is in force for this process. */
9
+ export declare function isLocalStoreRefused(): boolean;
4
10
  export declare function getDatabase(dbPath?: string): Database;
5
11
  export declare function closeDatabase(): void;
6
12
  export declare function resetDatabase(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAStC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AA4FtC,wBAAgB,eAAe,IAAI,MAAM,CAExC;AA2DD,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAmBrD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAQpC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,SAAa,GAAG,OAAO,CAKlF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAa,GAAG,MAAM,CAG3D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAGpD;AAQD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8E9F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAe5E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAEzE;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAIlG"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAStC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AA4FtC,wBAAgB,eAAe,IAAI,MAAM,CAExC;AA6ED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,uEAAuE;AACvE,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAwBrD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAQpC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,SAAa,GAAG,OAAO,CAKlF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAa,GAAG,MAAM,CAG3D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAGpD;AAQD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8E9F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAe5E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAEzE;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAIlG"}
@@ -21,6 +21,31 @@ export declare const IDENTITY_READ_PREFERENCE_ENV = "TODOS_IDENTITY_READ_PREFERE
21
21
  export declare const DEFAULT_IDENTITY_READ_PREFERENCE: "legacy_first";
22
22
  export declare const CANARY_IDENTITY_READ_PREFERENCE: "canonical_first";
23
23
  export declare const ROLLBACK_IDENTITY_READ_PREFERENCE: "legacy_first";
24
+ /**
25
+ * Guarded DDL for the append-only history triggers on
26
+ * `agent_identity_source_mappings`. Every statement is `CREATE TRIGGER IF NOT
27
+ * EXISTS`, so the block is intrinsically idempotent: executing it against a
28
+ * database that already carries the triggers is a no-op rather than
29
+ * "trigger ... already exists".
30
+ *
31
+ * This is defence in depth, not the removal of a reachable failure — stated
32
+ * plainly because the earlier framing claimed otherwise. The repair block runs
33
+ * inside `install.immediate()` (`BEGIN IMMEDIATE`), so its DROP and CREATE are
34
+ * atomic with respect to every other connection, and the DROP sits on the line
35
+ * directly above the CREATE: re-running the shipped initialiser against a
36
+ * database that already carries the trigger therefore succeeds on the pre-fix
37
+ * source too, and no end-to-end reproduction of "trigger ... already exists"
38
+ * exists from current `main`.
39
+ *
40
+ * What was actually wrong is the shape. Idempotency rested on statement
41
+ * adjacency — the CREATE was only safe because something above it dropped the
42
+ * trigger first — so any future caller that reached the CREATE without the
43
+ * DROP (another call site, a moved guard, a refactor) would reintroduce the
44
+ * error. `CREATE TRIGGER IF NOT EXISTS` makes each statement safe wherever it
45
+ * is reached from, including a caller that runs this exported constant on its
46
+ * own.
47
+ */
48
+ export declare const AGENT_IDENTITY_HISTORY_TRIGGER_DDL = "\n CREATE TRIGGER IF NOT EXISTS trg_agent_identity_mapping_history_immutable\n BEFORE UPDATE OF local_agent_id, observed_label, evidence, mapping_basis, status, revision, created_at\n ON agent_identity_source_mappings\n BEGIN\n SELECT RAISE(ABORT, 'IDENTITY_MAPPING_HISTORY_IMMUTABLE');\n END;\n\n CREATE TRIGGER IF NOT EXISTS trg_agent_identity_mapping_history_append_only\n BEFORE DELETE ON agent_identity_source_mappings\n BEGIN\n SELECT RAISE(ABORT, 'IDENTITY_MAPPING_HISTORY_IMMUTABLE');\n END;\n";
24
49
  /**
25
50
  * Repairs partially-applied migration 65 without rewriting agent rows. The
26
51
  * transaction is bounded to local SQLite DDL and never touches task leases,
@@ -1 +1 @@
1
- {"version":3,"file":"identity-mapping.d.ts","sourceRoot":"","sources":["../../src/db/identity-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAE9B,KAAK,iCAAiC,EACtC,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAI/B,KAAK,sBAAsB,EAE5B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;EAevC,CAAC;AAEH,eAAO,MAAM,4BAA4B,mCAAmC,CAAC;AAC7E,eAAO,MAAM,gCAAgC,EAAG,cAAuB,CAAC;AACxE,eAAO,MAAM,+BAA+B,EAAG,iBAA0B,CAAC;AAC1E,eAAO,MAAM,iCAAiC,EAAG,cAAuB,CAAC;AAqFzE;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAmG5D;AAyKD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,eAAe,CAAC,EACvD,EAAE,EAAE,QAAQ,GACX,0BAA0B,CAE5B;AA0JD,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,yBAAyB,EAAE,EACnC,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAC7B,EAAE,EAAE,QAAQ,GACX,iCAAiC,CA8CnC;AA6ED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,4BAA4B,EACnC,OAAO,EAAE;IAAE,eAAe,CAAC,EAAE,sBAAsB,CAAA;CAAE,YAAK,EAC1D,EAAE,EAAE,QAAQ,GACX,uBAAuB,CAmBzB;AAiDD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,kBAAkB,CAEjG;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,kBAAkB,CAE1G;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CAMpF"}
1
+ {"version":3,"file":"identity-mapping.d.ts","sourceRoot":"","sources":["../../src/db/identity-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAE9B,KAAK,iCAAiC,EACtC,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAI/B,KAAK,sBAAsB,EAE5B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;EAevC,CAAC;AAEH,eAAO,MAAM,4BAA4B,mCAAmC,CAAC;AAC7E,eAAO,MAAM,gCAAgC,EAAG,cAAuB,CAAC;AACxE,eAAO,MAAM,+BAA+B,EAAG,iBAA0B,CAAC;AAC1E,eAAO,MAAM,iCAAiC,EAAG,cAAuB,CAAC;AAqFzE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,kCAAkC,2gBAa9C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAgG5D;AAyKD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,eAAe,CAAC,EACvD,EAAE,EAAE,QAAQ,GACX,0BAA0B,CAE5B;AA0JD,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,yBAAyB,EAAE,EACnC,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAC7B,EAAE,EAAE,QAAQ,GACX,iCAAiC,CA8CnC;AA6ED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,4BAA4B,EACnC,OAAO,EAAE;IAAE,eAAe,CAAC,EAAE,sBAAsB,CAAA;CAAE,YAAK,EAC1D,EAAE,EAAE,QAAQ,GACX,uBAAuB,CAmBzB;AAiDD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,kBAAkB,CAEjG;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,kBAAkB,CAE1G;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CAMpF"}
@@ -1 +1 @@
1
- {"version":3,"file":"task-crud.d.ts","sourceRoot":"","sources":["../../src/db/task-crud.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EACf,IAAI,EACJ,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5F;;;;yBAIyB;AACzB,eAAO,MAAM,mBAAmB,SAAU,CAAC;AAc3C,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAS5C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAMjF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAGlF;AAkJD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAetE;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAK9D;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,MAAM,EACV,EAAE,CAAC,EAAE,QAAQ,GACZ,iBAAiB,GAAG,IAAI,CA4D1B;AAQD,wBAAgB,SAAS,CAAC,MAAM,GAAE,UAAe,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,EAAE,CA6KxE;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,EAAE,CAAC,EAAE,QAAQ,GACZ,IAAI,GAAG,IAAI,CAKb;AAcD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,EACnC,EAAE,CAAC,EAAE,QAAQ,GACZ,6BAA6B,CAmD/B;AAED,wBAAgB,UAAU,CAAC,MAAM,GAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,QAAQ,CAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAqInG;AA0VD,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,eAAe,EACtB,EAAE,CAAC,EAAE,QAAQ,GACZ,IAAI,CAaN;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAmB7D"}
1
+ {"version":3,"file":"task-crud.d.ts","sourceRoot":"","sources":["../../src/db/task-crud.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EACf,IAAI,EACJ,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5F;;;;yBAIyB;AACzB,eAAO,MAAM,mBAAmB,SAAU,CAAC;AAc3C,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAS5C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAMjF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAGlF;AAkJD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAetE;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAK9D;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,MAAM,EACV,EAAE,CAAC,EAAE,QAAQ,GACZ,iBAAiB,GAAG,IAAI,CA4D1B;AAQD,wBAAgB,SAAS,CAAC,MAAM,GAAE,UAAe,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,EAAE,CAmLxE;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,EAAE,CAAC,EAAE,QAAQ,GACZ,IAAI,GAAG,IAAI,CAKb;AAcD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,EACnC,EAAE,CAAC,EAAE,QAAQ,GACZ,6BAA6B,CAmD/B;AAED,wBAAgB,UAAU,CAAC,MAAM,GAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,QAAQ,CAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAuInG;AA+VD,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,eAAe,EACtB,EAAE,CAAC,EAAE,QAAQ,GACZ,IAAI,CAaN;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAmB7D"}