@hasna/todos 0.13.2 → 0.13.3
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 +78 -14
- package/dist/cli/cloud-router.d.ts +57 -7
- package/dist/cli/cloud-router.d.ts.map +1 -1
- package/dist/cli/commands/query-commands.d.ts.map +1 -1
- package/dist/cli/doctor-integrity.d.ts +106 -0
- package/dist/cli/doctor-integrity.d.ts.map +1 -0
- package/dist/cli/helpers.d.ts +2 -2
- package/dist/cli/index.js +1461 -778
- package/dist/cli/stage-a.d.ts.map +1 -1
- package/dist/contracts.js +118 -30
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/findings.d.ts +1 -0
- package/dist/db/findings.d.ts.map +1 -1
- package/dist/db/integrity.d.ts +20 -0
- package/dist/db/integrity.d.ts.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +562 -132
- package/dist/lib/context-packs.d.ts +1 -0
- package/dist/lib/context-packs.d.ts.map +1 -1
- package/dist/lib/dependency-graph.d.ts +1 -1
- package/dist/lib/doctor.d.ts +20 -0
- package/dist/lib/doctor.d.ts.map +1 -1
- package/dist/lib/integrity.d.ts +215 -0
- package/dist/lib/integrity.d.ts.map +1 -0
- package/dist/lib/native-storage-status.d.ts +2 -2
- package/dist/lib/native-storage-status.d.ts.map +1 -1
- package/dist/lib/release-compatibility.d.ts.map +1 -1
- package/dist/lib/task-dedupe.d.ts +15 -0
- package/dist/lib/task-dedupe.d.ts.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +517 -85
- package/dist/mcp.js +7 -3
- package/dist/registry.d.ts +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +125 -30
- package/dist/release-provenance.json +5 -5
- package/dist/sdk/types.d.ts +42 -0
- package/dist/sdk/types.d.ts.map +1 -1
- package/dist/sdk/v1.generated.d.ts +1 -0
- package/dist/sdk/v1.generated.d.ts.map +1 -1
- package/dist/server/cloud.d.ts +8 -1
- package/dist/server/cloud.d.ts.map +1 -1
- package/dist/server/index.js +521 -89
- package/dist/server/openapi.d.ts +12 -0
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/serve.d.ts.map +1 -1
- package/dist/server/v1.d.ts.map +1 -1
- package/dist/storage/config.d.ts +23 -5
- package/dist/storage/config.d.ts.map +1 -1
- package/dist/storage/factory.d.ts +9 -3
- package/dist/storage/factory.d.ts.map +1 -1
- package/dist/storage/hybrid.d.ts +7 -0
- package/dist/storage/hybrid.d.ts.map +1 -1
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/interfaces.d.ts +29 -8
- 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.d.ts +3 -3
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +601 -250
- package/dist/testing.d.ts +79 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +107 -0
- package/dist/types/index.d.ts +12 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +7 -3
|
@@ -58,6 +58,7 @@ export interface AgentContextPack {
|
|
|
58
58
|
project: Pick<Project, "id" | "name" | "path" | "description"> | null;
|
|
59
59
|
plan: (Pick<Plan, "id" | "name" | "description" | "status" | "agent_id"> & {
|
|
60
60
|
tasks: AgentContextPackRelatedTask[];
|
|
61
|
+
total_tasks: number;
|
|
61
62
|
omitted_tasks: number;
|
|
62
63
|
}) | null;
|
|
63
64
|
acceptance_criteria: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-packs.d.ts","sourceRoot":"","sources":["../../src/lib/context-packs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAInE,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAQ,WAAW,
|
|
1
|
+
{"version":3,"file":"context-packs.d.ts","sourceRoot":"","sources":["../../src/lib/context-packs.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@ export interface TaskDependencyEdges {
|
|
|
51
51
|
task_id: string;
|
|
52
52
|
/**
|
|
53
53
|
* The root task's short id when the caller already holds the row (local
|
|
54
|
-
* store); `null` from a
|
|
54
|
+
* store); `null` from a hosted /v1 authority, where surfacing it would cost
|
|
55
55
|
* an extra round trip and consumers key on `task_id` anyway.
|
|
56
56
|
*/
|
|
57
57
|
short_id: string | null;
|
package/dist/lib/doctor.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Database } from "bun:sqlite";
|
|
2
|
+
import type { IntegrityReport } from "./integrity.js";
|
|
2
3
|
export type DoctorSeverity = "info" | "warn" | "error";
|
|
3
4
|
export interface DoctorCheck {
|
|
4
5
|
severity: DoctorSeverity;
|
|
@@ -6,6 +7,12 @@ export interface DoctorCheck {
|
|
|
6
7
|
message: string;
|
|
7
8
|
count?: number;
|
|
8
9
|
repairable?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* True for checks projected from the referential-integrity report, so a renderer
|
|
12
|
+
* can show them in the per-condition breakdown instead of the generic list. Never
|
|
13
|
+
* repairable — doctor reports orphans, it does not decide their fate.
|
|
14
|
+
*/
|
|
15
|
+
integrity?: boolean;
|
|
9
16
|
}
|
|
10
17
|
export interface DoctorRepair {
|
|
11
18
|
type: string;
|
|
@@ -23,8 +30,19 @@ export interface DoctorSummary {
|
|
|
23
30
|
infos: number;
|
|
24
31
|
repairable: number;
|
|
25
32
|
applied: number;
|
|
33
|
+
/** Referential conditions measured with matching rows. Report-only, never repaired. */
|
|
34
|
+
integrity_findings: number;
|
|
35
|
+
/** Rows affected across all integrity findings. */
|
|
36
|
+
integrity_rows: number;
|
|
37
|
+
/** Conditions doctor could not measure — never folded into "all clear". */
|
|
38
|
+
integrity_unverified: number;
|
|
26
39
|
}
|
|
27
40
|
export interface DoctorResult {
|
|
41
|
+
/**
|
|
42
|
+
* True only when there is no error-severity check AND the referential-integrity
|
|
43
|
+
* report is both complete and empty. `ok` is derived from the same checks and
|
|
44
|
+
* counts that get printed — never asserted independently of them.
|
|
45
|
+
*/
|
|
28
46
|
ok: boolean;
|
|
29
47
|
dry_run: boolean;
|
|
30
48
|
database_path: string;
|
|
@@ -35,6 +53,8 @@ export interface DoctorResult {
|
|
|
35
53
|
backup?: DoctorBackup;
|
|
36
54
|
checks: DoctorCheck[];
|
|
37
55
|
repairs: DoctorRepair[];
|
|
56
|
+
/** Per-condition referential-integrity breakdown (orphans, dangling references). */
|
|
57
|
+
integrity: IntegrityReport;
|
|
38
58
|
summary: DoctorSummary;
|
|
39
59
|
}
|
|
40
60
|
export interface RunTodosDoctorOptions {
|
package/dist/lib/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/lib/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/lib/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,oFAAoF;IACpF,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAkQD,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,YAAY,CAmNhF"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Referential-integrity conditions for the Todos dataset, and the honest verdict
|
|
3
|
+
* computed from them.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS MODULE EXISTS: `todos doctor` used to hardcode `ok: true` on the remote
|
|
6
|
+
* path and never set a non-zero exit code on either path, so a dataset carrying
|
|
7
|
+
* five figures of orphaned rows reported three green check marks and exited 0. The
|
|
8
|
+
* conditions below are the ones that silently hide work from operators:
|
|
9
|
+
*
|
|
10
|
+
* - a task with no `project_id` is invisible to every project-scoped read;
|
|
11
|
+
* - a task with no `task_list_id` is invisible to every list-scoped read (an
|
|
12
|
+
* operator reading the list concludes there is no work);
|
|
13
|
+
* - a task list with no `project_id` is unreachable through its project;
|
|
14
|
+
* - a reference to an id that no longer exists (a DANGLING reference) is worse
|
|
15
|
+
* than a null: nothing can ever resolve it, and no UI shows it as missing.
|
|
16
|
+
*
|
|
17
|
+
* DESIGN CONSTRAINTS baked into this file:
|
|
18
|
+
*
|
|
19
|
+
* 1. ONE condition list, THREE evaluators. SQLite is relational (`tasks`,
|
|
20
|
+
* `task_lists`, `projects` with real foreign keys); Postgres is a single JSONB
|
|
21
|
+
* record table (`todos_sync_records`) with NO foreign keys at all, so orphan
|
|
22
|
+
* classes SQLite forbids structurally are possible in a self-hosted deployment.
|
|
23
|
+
* A condition added to {@link INTEGRITY_CONDITIONS} is therefore rendered for
|
|
24
|
+
* both engines (and for a client-side row scan) from the SAME declaration —
|
|
25
|
+
* a check implemented for one engine only would report healthy on the other.
|
|
26
|
+
* 2. THE VERDICT IS DERIVED FROM THE REPORTED COUNTS. {@link summarizeIntegrity}
|
|
27
|
+
* is a pure function of the very condition rows that get printed. A verdict
|
|
28
|
+
* computed from a different dataset than the displayed counts is the original
|
|
29
|
+
* bug wearing a different hat.
|
|
30
|
+
* 3. AN UNVERIFIED CONDITION IS NEVER A CLEAN CONDITION. When a count cannot be
|
|
31
|
+
* obtained (an authority that predates the aggregate route, a scan that could
|
|
32
|
+
* not complete), the condition carries `count: null` and the report is
|
|
33
|
+
* incomplete — it is never silently folded into "all clear".
|
|
34
|
+
* 4. REPORT ONLY. Nothing here repairs data. Deciding what to do with existing
|
|
35
|
+
* orphans is an owner decision, not a diagnostic's.
|
|
36
|
+
*/
|
|
37
|
+
import { type TaskStatus } from "../types/index.js";
|
|
38
|
+
/** Machine-readable contract id for the integrity report block. */
|
|
39
|
+
export declare const TODOS_INTEGRITY_SCHEMA_VERSION = "todos.integrity.v1";
|
|
40
|
+
export declare const OPEN_TASK_STATUSES: readonly TaskStatus[];
|
|
41
|
+
/** Entity a condition scans. */
|
|
42
|
+
export type IntegrityEntity = "task" | "task_list";
|
|
43
|
+
/** Entity a condition's field points at. */
|
|
44
|
+
export type IntegrityTarget = "project" | "task_list";
|
|
45
|
+
/**
|
|
46
|
+
* `missing` — the reference is NULL or empty, so the row is unrouted.
|
|
47
|
+
* `dangling` — the reference is set but names a row that does not exist.
|
|
48
|
+
*/
|
|
49
|
+
export type IntegrityReferenceKind = "missing" | "dangling";
|
|
50
|
+
export type IntegritySeverity = "warn" | "error";
|
|
51
|
+
/** Where a condition's count came from. `unverified` means it was not measured. */
|
|
52
|
+
export type IntegritySource = "sqlite" | "postgres" | "remote-authority" | "remote-scan" | "remote-rows"
|
|
53
|
+
/** More than one measured source in a single report (the remote derivation path). */
|
|
54
|
+
| "remote-derived" | "unverified";
|
|
55
|
+
export interface IntegrityConditionSpec {
|
|
56
|
+
/** Stable machine id — the key automated consumers key off. */
|
|
57
|
+
readonly id: string;
|
|
58
|
+
readonly entity: IntegrityEntity;
|
|
59
|
+
readonly field: "project_id" | "task_list_id";
|
|
60
|
+
readonly target: IntegrityTarget;
|
|
61
|
+
readonly kind: IntegrityReferenceKind;
|
|
62
|
+
/**
|
|
63
|
+
* Severity when the condition is non-empty. A `dangling` reference is always an
|
|
64
|
+
* error (nothing can resolve it); a `missing` reference escalates from warn to
|
|
65
|
+
* error once it hides OPEN work, which is the operator-visible harm.
|
|
66
|
+
*/
|
|
67
|
+
readonly base_severity: IntegritySeverity;
|
|
68
|
+
readonly escalate_when_open: boolean;
|
|
69
|
+
/** One-line operator explanation of what the rows do to reads. */
|
|
70
|
+
readonly impact: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Every referential condition doctor knows how to count. Order is the display
|
|
74
|
+
* order: task-level rows first (they hide work), then list-level rows.
|
|
75
|
+
*/
|
|
76
|
+
export declare const INTEGRITY_CONDITIONS: readonly IntegrityConditionSpec[];
|
|
77
|
+
/** Look a condition spec up by id (throws on an unknown id — ids are a contract). */
|
|
78
|
+
export declare function integrityCondition(id: string): IntegrityConditionSpec;
|
|
79
|
+
/** A measured (or explicitly unmeasured) condition. */
|
|
80
|
+
export interface IntegrityCondition {
|
|
81
|
+
id: string;
|
|
82
|
+
entity: IntegrityEntity;
|
|
83
|
+
field: string;
|
|
84
|
+
kind: IntegrityReferenceKind;
|
|
85
|
+
/** Matching rows, or `null` when the condition could not be measured. */
|
|
86
|
+
count: number | null;
|
|
87
|
+
/** Matching rows that are still open, `null` for entities without a status. */
|
|
88
|
+
open_count: number | null;
|
|
89
|
+
/** Effective severity for a non-empty condition; `null` when empty/unverified. */
|
|
90
|
+
severity: IntegritySeverity | null;
|
|
91
|
+
verified: boolean;
|
|
92
|
+
source: IntegritySource;
|
|
93
|
+
/** Why the count is missing (only set when `verified` is false). */
|
|
94
|
+
unverified_reason?: string;
|
|
95
|
+
message: string;
|
|
96
|
+
impact: string;
|
|
97
|
+
}
|
|
98
|
+
export interface IntegritySummary {
|
|
99
|
+
/** True only when every condition was measured and every count is zero. */
|
|
100
|
+
ok: boolean;
|
|
101
|
+
/** Conditions measured with count > 0. */
|
|
102
|
+
findings: number;
|
|
103
|
+
/** Rows affected across all findings. */
|
|
104
|
+
rows: number;
|
|
105
|
+
errors: number;
|
|
106
|
+
warnings: number;
|
|
107
|
+
/** Conditions that could not be measured — never counted as clean. */
|
|
108
|
+
unverified: number;
|
|
109
|
+
/** True when every condition was measured. */
|
|
110
|
+
complete: boolean;
|
|
111
|
+
}
|
|
112
|
+
export interface IntegrityReport {
|
|
113
|
+
schema_version: string;
|
|
114
|
+
generated_at: string;
|
|
115
|
+
/** Dominant source of the counts, for the operator reading the report. */
|
|
116
|
+
source: IntegritySource;
|
|
117
|
+
conditions: IntegrityCondition[];
|
|
118
|
+
summary: IntegritySummary;
|
|
119
|
+
}
|
|
120
|
+
/** Raw measurement for one condition. */
|
|
121
|
+
export interface IntegrityMeasurement {
|
|
122
|
+
count: number;
|
|
123
|
+
open_count: number | null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Severity of a NON-EMPTY condition. Kept as a pure function of the measurement so
|
|
127
|
+
* the printed number and the verdict cannot diverge.
|
|
128
|
+
*/
|
|
129
|
+
export declare function resolveIntegritySeverity(spec: IntegrityConditionSpec, measurement: IntegrityMeasurement): IntegritySeverity;
|
|
130
|
+
/** Human line for a condition, always carrying the number it is derived from. */
|
|
131
|
+
export declare function formatIntegrityMessage(spec: IntegrityConditionSpec, measurement: IntegrityMeasurement): string;
|
|
132
|
+
/** Wrap a measurement as a reportable condition. */
|
|
133
|
+
export declare function measuredCondition(spec: IntegrityConditionSpec, measurement: IntegrityMeasurement, source: IntegritySource): IntegrityCondition;
|
|
134
|
+
/**
|
|
135
|
+
* A condition doctor could NOT measure. It is deliberately not a zero: an
|
|
136
|
+
* unmeasured condition keeps the report incomplete so the verdict can never claim
|
|
137
|
+
* health it did not establish.
|
|
138
|
+
*/
|
|
139
|
+
export declare function unverifiedCondition(spec: IntegrityConditionSpec, reason: string): IntegrityCondition;
|
|
140
|
+
/**
|
|
141
|
+
* The verdict. Pure function of the condition rows that get displayed:
|
|
142
|
+
* - any measured count > 0 is a finding;
|
|
143
|
+
* - any unmeasured condition makes the report incomplete;
|
|
144
|
+
* - `ok` requires BOTH completeness and zero findings.
|
|
145
|
+
*/
|
|
146
|
+
export declare function summarizeIntegrity(conditions: readonly IntegrityCondition[]): IntegritySummary;
|
|
147
|
+
/** Assemble a full report (summary always derived from `conditions`). */
|
|
148
|
+
export declare function buildIntegrityReport(conditions: IntegrityCondition[], generatedAt: string): IntegrityReport;
|
|
149
|
+
/**
|
|
150
|
+
* Normalize a report that came from ANOTHER process (an authority's
|
|
151
|
+
* `GET /v1/integrity`) against this build's condition list, and RECOMPUTE the
|
|
152
|
+
* summary from the returned counts.
|
|
153
|
+
*
|
|
154
|
+
* Two ways a remote report could otherwise reintroduce the original bug:
|
|
155
|
+
* - the authority sends `summary.ok: true` next to non-zero counts, and the
|
|
156
|
+
* client believes the flag instead of the rows;
|
|
157
|
+
* - the authority is older/newer and simply omits a condition, which would
|
|
158
|
+
* silently shrink the checked set to whatever it happened to send.
|
|
159
|
+
* Both are closed here: unknown conditions are dropped, missing ones become
|
|
160
|
+
* UNVERIFIED, and the verdict is recomputed locally.
|
|
161
|
+
*/
|
|
162
|
+
export declare function adoptRemoteIntegrityReport(raw: {
|
|
163
|
+
generated_at?: unknown;
|
|
164
|
+
source?: unknown;
|
|
165
|
+
conditions?: unknown;
|
|
166
|
+
}, fallbackGeneratedAt: string): IntegrityReport;
|
|
167
|
+
/**
|
|
168
|
+
* One statement per condition returning BOTH the total and the open subtotal, so
|
|
169
|
+
* the severity escalation and the displayed number come from a single read of the
|
|
170
|
+
* table (no second query that could see a different dataset).
|
|
171
|
+
*/
|
|
172
|
+
export declare function buildSqliteIntegritySql(spec: IntegrityConditionSpec): string;
|
|
173
|
+
export interface PostgresIntegrityQuery {
|
|
174
|
+
sql: string;
|
|
175
|
+
params: unknown[];
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Postgres equivalent of {@link buildSqliteIntegritySql} against the JSONB record
|
|
179
|
+
* table. Tombstones (`deleted_at IS NOT NULL`) are excluded on BOTH sides of the
|
|
180
|
+
* existence check, otherwise a deleted project would make every task that points
|
|
181
|
+
* at it look dangling (and a deleted task would be reported as a live orphan).
|
|
182
|
+
* `$N` scalar params only — the production driver is Bun.SQL, which cannot bind a
|
|
183
|
+
* JS array.
|
|
184
|
+
*/
|
|
185
|
+
export declare function buildPostgresIntegritySql(spec: IntegrityConditionSpec, options: {
|
|
186
|
+
table: string;
|
|
187
|
+
service: string;
|
|
188
|
+
}): PostgresIntegrityQuery;
|
|
189
|
+
/** The only task fields a condition needs; anything else is ignored. */
|
|
190
|
+
export interface IntegrityTaskRow {
|
|
191
|
+
project_id?: string | null;
|
|
192
|
+
task_list_id?: string | null;
|
|
193
|
+
status?: string | null;
|
|
194
|
+
}
|
|
195
|
+
/** The only task-list fields a condition needs. */
|
|
196
|
+
export interface IntegrityTaskListRow {
|
|
197
|
+
project_id?: string | null;
|
|
198
|
+
}
|
|
199
|
+
export interface IntegrityRowSets {
|
|
200
|
+
tasks?: Iterable<IntegrityTaskRow>;
|
|
201
|
+
taskLists?: Iterable<IntegrityTaskListRow>;
|
|
202
|
+
/** Ids of REGISTERED projects — the dangling-reference denominator. */
|
|
203
|
+
projectIds?: ReadonlySet<string>;
|
|
204
|
+
/** Ids of REGISTERED task lists. */
|
|
205
|
+
taskListIds?: ReadonlySet<string>;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Evaluate one condition over already-materialized rows, using the SAME semantics
|
|
209
|
+
* as the two SQL renderers: `missing` is null-or-empty, `dangling` is "set, but no
|
|
210
|
+
* row with exactly that id exists". Returns `null` when the caller did not supply
|
|
211
|
+
* the rows (or the registered-id set) the condition needs — an unmeasurable
|
|
212
|
+
* condition must not come back as a zero.
|
|
213
|
+
*/
|
|
214
|
+
export declare function measureIntegrityRows(spec: IntegrityConditionSpec, sets: IntegrityRowSets): IntegrityMeasurement | null;
|
|
215
|
+
//# sourceMappingURL=integrity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../../src/lib/integrity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TODOS_STORAGE_ENV } from "../storage/index.js";
|
|
2
|
-
import type { CanonicalTodosRdsConfig,
|
|
2
|
+
import type { CanonicalTodosRdsConfig, TodosStorageBackend, TodosStorageEnv } from "../storage/index.js";
|
|
3
3
|
export interface NativeStorageEnvStatus {
|
|
4
4
|
name: string;
|
|
5
5
|
active_name: string;
|
|
@@ -8,7 +8,7 @@ export interface NativeStorageEnvStatus {
|
|
|
8
8
|
export interface NativeStorageStatus {
|
|
9
9
|
ok: boolean;
|
|
10
10
|
service: "todos";
|
|
11
|
-
mode:
|
|
11
|
+
mode: TodosStorageBackend;
|
|
12
12
|
local_default: boolean;
|
|
13
13
|
remote_enabled: boolean;
|
|
14
14
|
database: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-storage-status.d.ts","sourceRoot":"","sources":["../../src/lib/native-storage-status.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,
|
|
1
|
+
{"version":3,"file":"native-storage-status.d.ts","sourceRoot":"","sources":["../../src/lib/native-storage-status.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAQlB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAsB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE7H,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE;QACR,UAAU,EAAE,OAAO,CAAC;QACpB,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;QAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;QACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;IACF,cAAc,EAAE;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;QACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,mBAAmB,EAAE,OAAO,CAAC;QAC7B,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,GAAG,EAAE,MAAM,CAAC,MAAM,OAAO,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;IACpE,SAAS,EAAE,uBAAuB,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,IAAI,CAAC;IACd,UAAU,EAAE,IAAI,CAAC;IACjB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE;QACR,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,cAAc,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,eAA6B,GAAG,mBAAmB,CA2D9F;AAED,wBAAgB,wBAAwB,CACtC,GAAG,GAAE,eAA6B,EAClC,OAAO,GAAE,4BAAiC,GACzC,qBAAqB,CA4BvB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAU1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-compatibility.d.ts","sourceRoot":"","sources":["../../src/lib/release-compatibility.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,0CAA0C,IAAI,CAAC;AAE5D,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,0BAA0B,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,CAAC,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KAC3C,CAAC;IACF,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,YAAY,EAAE;QACZ,OAAO,EAAE,cAAc,CAAC;QACxB,OAAO,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,WAAW,uCAAuC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAiMD,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,uCAA4C,GACpD,0BAA0B,
|
|
1
|
+
{"version":3,"file":"release-compatibility.d.ts","sourceRoot":"","sources":["../../src/lib/release-compatibility.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,0CAA0C,IAAI,CAAC;AAE5D,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,0BAA0B,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,CAAC,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KAC3C,CAAC;IACF,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,YAAY,EAAE;QACZ,OAAO,EAAE,cAAc,CAAC;QACxB,OAAO,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,WAAW,uCAAuC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAiMD,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,uCAA4C,GACpD,0BAA0B,CAwF5B;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,0BAA0B,GAAG,MAAM,CAwB7F"}
|
|
@@ -5,6 +5,16 @@ export interface FindDuplicateTasksOptions {
|
|
|
5
5
|
limit?: number;
|
|
6
6
|
include_archived?: boolean;
|
|
7
7
|
}
|
|
8
|
+
export interface TaskDuplicateProbe {
|
|
9
|
+
title: string;
|
|
10
|
+
description?: string | null;
|
|
11
|
+
metadata?: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
export interface TaskDuplicateMatch {
|
|
14
|
+
task: Task;
|
|
15
|
+
score: number;
|
|
16
|
+
reasons: string[];
|
|
17
|
+
}
|
|
8
18
|
export interface DuplicateTaskCandidate {
|
|
9
19
|
primary_task: Task;
|
|
10
20
|
duplicate_task: Task;
|
|
@@ -41,6 +51,11 @@ export interface TaskMergeResult {
|
|
|
41
51
|
moved: TaskMergeMovedCounts;
|
|
42
52
|
}
|
|
43
53
|
export declare function findDuplicateTasks(options?: FindDuplicateTasksOptions, db?: Database): DuplicateTaskCandidate[];
|
|
54
|
+
/**
|
|
55
|
+
* Score a prospective task against local tasks without inserting a temporary
|
|
56
|
+
* row. Producer previews use this to report likely duplicates before apply.
|
|
57
|
+
*/
|
|
58
|
+
export declare function findDuplicateTasksForInput(input: TaskDuplicateProbe, options?: FindDuplicateTasksOptions, db?: Database): TaskDuplicateMatch[];
|
|
44
59
|
export declare function mergeDuplicateTask(input: MergeDuplicateTaskInput, db?: Database): TaskMergeResult;
|
|
45
60
|
export declare const findDuplicateCandidates: typeof findDuplicateTasks;
|
|
46
61
|
//# sourceMappingURL=task-dedupe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-dedupe.d.ts","sourceRoot":"","sources":["../../src/lib/task-dedupe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAM9C,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,IAAI,CAAC;IACnB,cAAc,EAAE,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,IAAI,CAAC;IACnB,kBAAkB,EAAE,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,oBAAoB,CAAC;CAC7B;
|
|
1
|
+
{"version":3,"file":"task-dedupe.d.ts","sourceRoot":"","sources":["../../src/lib/task-dedupe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAM9C,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,IAAI,CAAC;IACnB,cAAc,EAAE,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,IAAI,CAAC;IACnB,kBAAkB,EAAE,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AA2ND,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,sBAAsB,EAAE,CAqBnH;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,yBAA8B,EACvC,EAAE,CAAC,EAAE,QAAQ,GACZ,kBAAkB,EAAE,CActB;AAqJD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,eAAe,CAiGjG;AAGD,eAAO,MAAM,uBAAuB,2BAAqB,CAAC"}
|
package/dist/mcp/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6GpE,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAO9E;AAmID,wBAAgB,WAAW,cAsD1B"}
|