@hasna/todos 0.11.74 → 0.11.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/cli/cloud-router.d.ts +71 -0
- package/dist/cli/cloud-router.d.ts.map +1 -0
- package/dist/cli/commands/project-commands.d.ts.map +1 -1
- package/dist/cli/commands/query-commands.d.ts.map +1 -1
- package/dist/cli/commands/storage-commands.d.ts.map +1 -1
- package/dist/cli/commands/task-commands.d.ts.map +1 -1
- package/dist/cli/helpers.d.ts +22 -0
- package/dist/cli/helpers.d.ts.map +1 -1
- package/dist/cli/index.js +72388 -61727
- package/dist/contracts.js +314 -14
- package/dist/db/database.d.ts.map +1 -1
- package/dist/index.js +1158 -236
- package/dist/lib/routing-doctor.d.ts +144 -0
- package/dist/lib/routing-doctor.d.ts.map +1 -0
- package/dist/lib/shadow-status.d.ts +38 -0
- package/dist/lib/shadow-status.d.ts.map +1 -0
- package/dist/mcp/index.js +10249 -340
- package/dist/mcp/tools/task-adv-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-crud.d.ts.map +1 -1
- package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-workflow-tools.d.ts.map +1 -1
- package/dist/registry.js +314 -14
- package/dist/release-provenance.json +3 -3
- package/dist/sdk/index.d.ts +2 -0
- package/dist/sdk/index.d.ts.map +1 -1
- package/dist/sdk/index.js +135 -0
- package/dist/sdk/v1.generated.d.ts +124 -0
- package/dist/sdk/v1.generated.d.ts.map +1 -0
- package/dist/server/cloud.d.ts +50 -0
- package/dist/server/cloud.d.ts.map +1 -0
- package/dist/server/index.js +11944 -2012
- package/dist/server/openapi.d.ts +628 -0
- package/dist/server/openapi.d.ts.map +1 -0
- package/dist/server/serve.d.ts.map +1 -1
- package/dist/server/v1.d.ts +19 -0
- package/dist/server/v1.d.ts.map +1 -0
- package/dist/storage/cloud-client.d.ts +30 -0
- package/dist/storage/cloud-client.d.ts.map +1 -0
- package/dist/storage/config.d.ts +12 -0
- package/dist/storage/config.d.ts.map +1 -1
- package/dist/storage/factory.d.ts +2 -0
- package/dist/storage/factory.d.ts.map +1 -1
- package/dist/storage/index.d.ts +8 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/postgres-adapter.d.ts.map +1 -1
- package/dist/storage/postgres-sync.d.ts.map +1 -1
- package/dist/storage/shadow-outbox-schema.d.ts +21 -0
- package/dist/storage/shadow-outbox-schema.d.ts.map +1 -0
- package/dist/storage/shadow-outbox.d.ts +125 -0
- package/dist/storage/shadow-outbox.d.ts.map +1 -0
- package/dist/storage/shadow-runtime.d.ts +29 -0
- package/dist/storage/shadow-runtime.d.ts.map +1 -0
- package/dist/storage/shadow.d.ts +118 -0
- package/dist/storage/shadow.d.ts.map +1 -0
- package/dist/storage.d.ts +2 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +1157 -220
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +6 -2
- package/vendor/hasna-contracts-0.5.1.tgz +0 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import type { Database } from "bun:sqlite";
|
|
2
|
+
import type { Project, Task, TaskStatus } from "../types/index.js";
|
|
3
|
+
export declare const TODOS_ROUTING_DOCTOR_SCHEMA_VERSION = "todos.routing_doctor.v1";
|
|
4
|
+
/** Deterministic finding categories the routing doctor can emit. */
|
|
5
|
+
export type RoutingFindingCategory = "null_working_dir" | "wrong_working_dir" | "null_task_list_id" | "unresolvable_task_list" | "invalid_project_path" | "missing_project" | "no_auto_conflict" | "cross_repo_intent" | "route_not_enabled";
|
|
6
|
+
/**
|
|
7
|
+
* Repairability classification consumed by OpenLoops. Only `safe_auto` findings
|
|
8
|
+
* are ever mutated by `--apply`; every other class is reported for a human or a
|
|
9
|
+
* different owning repo and is never guessed at.
|
|
10
|
+
*/
|
|
11
|
+
export type RoutingRepairClass = "safe_auto" | "blocker_human" | "blocker_cross_repo" | "blocker_invalid_path" | "unsupported";
|
|
12
|
+
export type RoutingFindingSeverity = "error" | "warn";
|
|
13
|
+
export type RoutingRepairField = "working_dir" | "task_list_id";
|
|
14
|
+
export interface RoutingSuggestedRepair {
|
|
15
|
+
field: RoutingRepairField;
|
|
16
|
+
from: string | null;
|
|
17
|
+
to: string;
|
|
18
|
+
/** Supported CLI invocation that performs this exact repair. */
|
|
19
|
+
command: string;
|
|
20
|
+
}
|
|
21
|
+
export interface RoutingFinding {
|
|
22
|
+
category: RoutingFindingCategory;
|
|
23
|
+
severity: RoutingFindingSeverity;
|
|
24
|
+
repair_class: RoutingRepairClass;
|
|
25
|
+
task_id: string;
|
|
26
|
+
task_short_id: string | null;
|
|
27
|
+
title: string;
|
|
28
|
+
status: TaskStatus;
|
|
29
|
+
project_id: string | null;
|
|
30
|
+
project_name: string | null;
|
|
31
|
+
/** Resolved owning-repo path (machine-local override honoured). */
|
|
32
|
+
project_path: string | null;
|
|
33
|
+
working_dir: string | null;
|
|
34
|
+
expected_working_dir: string | null;
|
|
35
|
+
task_list_id: string | null;
|
|
36
|
+
task_list_state: "ok" | "null" | "unresolvable";
|
|
37
|
+
route_eligible: boolean;
|
|
38
|
+
route_class: string;
|
|
39
|
+
route_reasons: string[];
|
|
40
|
+
detail: string;
|
|
41
|
+
suggested_repair: RoutingSuggestedRepair | null;
|
|
42
|
+
}
|
|
43
|
+
export interface RoutingRepairRecord {
|
|
44
|
+
task_id: string;
|
|
45
|
+
task_short_id: string | null;
|
|
46
|
+
category: RoutingFindingCategory;
|
|
47
|
+
field: RoutingRepairField;
|
|
48
|
+
from: string | null;
|
|
49
|
+
to: string;
|
|
50
|
+
command: string;
|
|
51
|
+
applied: boolean;
|
|
52
|
+
error?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface RoutingDoctorSummary {
|
|
55
|
+
inspected: number;
|
|
56
|
+
eligible: number;
|
|
57
|
+
findings_total: number;
|
|
58
|
+
by_category: Record<string, number>;
|
|
59
|
+
by_repair_class: Record<string, number>;
|
|
60
|
+
safe_auto: number;
|
|
61
|
+
blockers: number;
|
|
62
|
+
unsupported: number;
|
|
63
|
+
repaired: number;
|
|
64
|
+
repair_failed: number;
|
|
65
|
+
}
|
|
66
|
+
export interface RoutingDoctorScope {
|
|
67
|
+
statuses: TaskStatus[];
|
|
68
|
+
project_id: string | null;
|
|
69
|
+
tag: string | null;
|
|
70
|
+
shard: {
|
|
71
|
+
index: number;
|
|
72
|
+
total: number;
|
|
73
|
+
} | null;
|
|
74
|
+
include_archived: boolean;
|
|
75
|
+
verify_project_root: boolean;
|
|
76
|
+
limit: number | null;
|
|
77
|
+
}
|
|
78
|
+
export interface RoutingDoctorBackup {
|
|
79
|
+
path: string;
|
|
80
|
+
files: string[];
|
|
81
|
+
}
|
|
82
|
+
export interface RoutingDoctorResult {
|
|
83
|
+
schema_version: typeof TODOS_ROUTING_DOCTOR_SCHEMA_VERSION;
|
|
84
|
+
generated_at: string;
|
|
85
|
+
/** True when no findings remain (post-repair when `apply` is set). */
|
|
86
|
+
ok: boolean;
|
|
87
|
+
dry_run: boolean;
|
|
88
|
+
database_path: string;
|
|
89
|
+
scope: RoutingDoctorScope;
|
|
90
|
+
summary: RoutingDoctorSummary;
|
|
91
|
+
findings: RoutingFinding[];
|
|
92
|
+
repairs: RoutingRepairRecord[];
|
|
93
|
+
backup?: RoutingDoctorBackup;
|
|
94
|
+
undo_record_path?: string;
|
|
95
|
+
}
|
|
96
|
+
export interface RunRoutingDoctorOptions {
|
|
97
|
+
db?: Database;
|
|
98
|
+
dbPath?: string;
|
|
99
|
+
statuses?: TaskStatus[];
|
|
100
|
+
projectId?: string;
|
|
101
|
+
tag?: string;
|
|
102
|
+
shardIndex?: number;
|
|
103
|
+
shardTotal?: number;
|
|
104
|
+
includeArchived?: boolean;
|
|
105
|
+
verifyProjectRoot?: boolean;
|
|
106
|
+
apply?: boolean;
|
|
107
|
+
actor?: string;
|
|
108
|
+
undoRecordPath?: string;
|
|
109
|
+
limit?: number;
|
|
110
|
+
now?: () => string;
|
|
111
|
+
}
|
|
112
|
+
/** Assign a stable shard. A task's shard key is its project (so a project never splits) else its id. */
|
|
113
|
+
export declare function routingShardOf(task: Pick<Task, "id" | "project_id">, total: number): number;
|
|
114
|
+
/**
|
|
115
|
+
* Conservative, heuristic cross-repo intent detector. Returns the foreign repo
|
|
116
|
+
* slug only when the title explicitly names a *different, known* `open-*` repo
|
|
117
|
+
* and does NOT also name its own repo. Never triggers an automatic repair —
|
|
118
|
+
* cross-repo findings are always reported for a human.
|
|
119
|
+
*/
|
|
120
|
+
export declare function detectCrossRepoIntent(task: Pick<Task, "title" | "tags">, project: Project | null, knownRepoSlugs: Set<string>): string | null;
|
|
121
|
+
interface ClassifyContext {
|
|
122
|
+
task: Task;
|
|
123
|
+
project: Project | null;
|
|
124
|
+
db: Database;
|
|
125
|
+
knownRepoSlugs: Set<string>;
|
|
126
|
+
verifyProjectRoot: boolean;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Pure-ish classification for one task. Emits zero or more findings. Depends on
|
|
130
|
+
* `getTaskRouteState` for the authoritative eligibility/route context so the
|
|
131
|
+
* doctor and the OpenLoops drain agree on route enablement.
|
|
132
|
+
*/
|
|
133
|
+
export declare function classifyTaskRouting(ctx: ClassifyContext): RoutingFinding[];
|
|
134
|
+
/**
|
|
135
|
+
* Supported CLI command that restores a repair's prior value. Null-origin
|
|
136
|
+
* repairs (the field was null before we set it) restore via the explicit
|
|
137
|
+
* `--clear-working-dir` / `--clear-list` reset flags — a bare `--working-dir ''`
|
|
138
|
+
* or `--list ''` is falsy in the CLI wiring and would be a silent no-op, which
|
|
139
|
+
* is exactly the fake-undo the record must never contain.
|
|
140
|
+
*/
|
|
141
|
+
export declare function routingRepairUndoCommand(repair: Pick<RoutingRepairRecord, "task_id" | "field" | "from">): string;
|
|
142
|
+
export declare function runRoutingDoctor(options?: RunRoutingDoctorOptions): RoutingDoctorResult;
|
|
143
|
+
export {};
|
|
144
|
+
//# sourceMappingURL=routing-doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-doctor.d.ts","sourceRoot":"","sources":["../../src/lib/routing-doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { TodosPostgresQueryClient } from "../storage/postgres-sync.js";
|
|
2
|
+
import type { TodosStorageAdapter } from "../storage/interfaces.js";
|
|
3
|
+
/**
|
|
4
|
+
* Divergence report for the dual-write shadow: how many live rows exist locally
|
|
5
|
+
* versus in the remote Postgres sync tables, and how stale the last mirror is.
|
|
6
|
+
* This is the ONLY place that reads from the remote store, and it is a
|
|
7
|
+
* read-only diagnostic — never a runtime read path.
|
|
8
|
+
*/
|
|
9
|
+
export interface ShadowStatusObjectCount {
|
|
10
|
+
object_type: string;
|
|
11
|
+
local: number;
|
|
12
|
+
cloud: number;
|
|
13
|
+
cloud_tombstones: number;
|
|
14
|
+
diff: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ShadowStatusReport {
|
|
17
|
+
service: string;
|
|
18
|
+
cloud_reachable: boolean;
|
|
19
|
+
in_sync: boolean;
|
|
20
|
+
objects: ShadowStatusObjectCount[];
|
|
21
|
+
totals: {
|
|
22
|
+
local: number;
|
|
23
|
+
cloud: number;
|
|
24
|
+
diff: number;
|
|
25
|
+
cloud_tombstones: number;
|
|
26
|
+
};
|
|
27
|
+
last_mirror_at: string | null;
|
|
28
|
+
last_mirror_lag_ms: number | null;
|
|
29
|
+
error: string | null;
|
|
30
|
+
}
|
|
31
|
+
export interface GetTodosShadowStatusOptions {
|
|
32
|
+
local: TodosStorageAdapter;
|
|
33
|
+
cloud: TodosPostgresQueryClient;
|
|
34
|
+
service?: string;
|
|
35
|
+
now?: number;
|
|
36
|
+
}
|
|
37
|
+
export declare function getTodosShadowStatus(options: GetTodosShadowStatusOptions): Promise<ShadowStatusReport>;
|
|
38
|
+
//# sourceMappingURL=shadow-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shadow-status.d.ts","sourceRoot":"","sources":["../../src/lib/shadow-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;IACjF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AA2CD,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,mBAAmB,CAAC;IAC3B,KAAK,EAAE,wBAAwB,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,kBAAkB,CAAC,CAsE7B"}
|