@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.
- package/CHANGELOG.md +109 -0
- package/README.md +59 -22
- package/dist/cli/cloud-router.d.ts +63 -21
- package/dist/cli/cloud-router.d.ts.map +1 -1
- package/dist/cli/commands/config-serve-commands.d.ts.map +1 -1
- package/dist/cli/commands/template-commands.d.ts.map +1 -1
- package/dist/cli/index.js +2591 -503
- package/dist/cli/stage-a.d.ts +2 -12
- package/dist/cli/stage-a.d.ts.map +1 -1
- package/dist/cli/template-remote.d.ts +90 -0
- package/dist/cli/template-remote.d.ts.map +1 -0
- package/dist/cli-mcp-parity.d.ts.map +1 -1
- package/dist/contracts.js +77 -30
- package/dist/db/agents.d.ts +8 -0
- package/dist/db/agents.d.ts.map +1 -1
- package/dist/db/database.d.ts +6 -0
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/identity-mapping.d.ts +25 -0
- package/dist/db/identity-mapping.d.ts.map +1 -1
- package/dist/db/task-crud.d.ts.map +1 -1
- package/dist/index.js +496 -58
- package/dist/lib/feature-manifest.d.ts.map +1 -1
- package/dist/lib/local-opt-in.d.ts +14 -0
- package/dist/lib/local-opt-in.d.ts.map +1 -1
- package/dist/lib/paths.d.ts +11 -1
- package/dist/lib/paths.d.ts.map +1 -1
- package/dist/mcp/index.d.ts +52 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +15162 -30695
- package/dist/mcp/tools/agents.d.ts.map +1 -1
- package/dist/mcp/tools/task-adv-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-auto-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-crud.d.ts.map +1 -1
- package/dist/mcp/tools/task-meta-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-resources.d.ts.map +1 -1
- package/dist/mcp/tools/templates.d.ts.map +1 -1
- package/dist/mcp.js +3 -3
- package/dist/project-registration.js +466 -35
- package/dist/registry.js +77 -30
- package/dist/release-provenance.json +5 -5
- package/dist/sdk/client.d.ts +3 -1
- package/dist/sdk/client.d.ts.map +1 -1
- package/dist/sdk/index.js +48 -12
- package/dist/sdk/resolve.d.ts +23 -13
- package/dist/sdk/resolve.d.ts.map +1 -1
- package/dist/sdk/types.d.ts +17 -2
- package/dist/sdk/types.d.ts.map +1 -1
- package/dist/sdk/v1.generated.d.ts +115 -0
- package/dist/sdk/v1.generated.d.ts.map +1 -1
- package/dist/server/index.js +3972 -916
- package/dist/server/openapi.d.ts +837 -50
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/rate-limit-config.d.ts +6 -0
- package/dist/server/rate-limit-config.d.ts.map +1 -0
- package/dist/server/serve.d.ts.map +1 -1
- package/dist/server/v1.d.ts.map +1 -1
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/interfaces.d.ts +74 -3
- package/dist/storage/interfaces.d.ts.map +1 -1
- package/dist/storage/local-sqlite.d.ts.map +1 -1
- package/dist/storage/postgres-adapter.d.ts.map +1 -1
- package/dist/storage.js +464 -33
- package/dist/task-manifest.js +8 -2
- package/dist/types/index.d.ts +5 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/mcp/tools/code-tools.d.ts +0 -15
- package/dist/mcp/tools/code-tools.d.ts.map +0 -1
package/dist/cli/stage-a.d.ts
CHANGED
|
@@ -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;
|
|
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,
|
|
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
|
-
|
|
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(
|
|
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 (
|
|
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
|
|
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 (
|
|
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.
|
|
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: ["
|
|
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: "
|
|
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
|
{
|
package/dist/db/agents.d.ts
CHANGED
|
@@ -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;
|
package/dist/db/agents.d.ts.map
CHANGED
|
@@ -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":"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"}
|
package/dist/db/database.d.ts
CHANGED
|
@@ -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;
|
|
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,
|
|
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,
|
|
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"}
|