@hasna/todos 0.15.20 → 0.15.24
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/dist/ai-tools.d.ts +80 -0
- package/dist/ai-tools.d.ts.map +1 -0
- package/dist/ai.d.ts +313 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/cli/cloud-router.d.ts +10 -1
- package/dist/cli/cloud-router.d.ts.map +1 -1
- package/dist/cli/commands/ai-commands.d.ts +3 -0
- package/dist/cli/commands/ai-commands.d.ts.map +1 -0
- package/dist/cli/commands/help-commands.d.ts +2 -1
- package/dist/cli/commands/help-commands.d.ts.map +1 -1
- package/dist/cli/commands/task-commands.d.ts.map +1 -1
- package/dist/cli/index.js +2856 -547
- package/dist/cli/stage-a.d.ts +27 -16
- package/dist/cli/stage-a.d.ts.map +1 -1
- package/dist/contracts.d.ts +1 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +638 -18
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3142 -1089
- package/dist/lib/cli-help.d.ts +2 -2
- package/dist/lib/config.d.ts +4 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/saved-search-views.d.ts.map +1 -1
- package/dist/lib/stale-lock-handoff.d.ts.map +1 -1
- package/dist/mcp/index.js +127 -72
- package/dist/mcp.js +1 -1
- package/dist/project-registration.js +67 -29
- package/dist/registry.js +603 -18
- package/dist/release-provenance.json +5 -5
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/v1.generated.d.ts +2 -0
- package/dist/sdk/v1.generated.d.ts.map +1 -1
- package/dist/server/index.js +133 -78
- package/dist/server/openapi.d.ts +7 -0
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/storage/postgres-adapter.d.ts.map +1 -1
- package/dist/storage.js +60 -20
- package/dist/task-manifest.js +19 -3
- package/package.json +1 -1
package/dist/server/index.js
CHANGED
|
@@ -70,7 +70,7 @@ var package_default;
|
|
|
70
70
|
var init_package = __esm(() => {
|
|
71
71
|
package_default = {
|
|
72
72
|
name: "@hasna/todos",
|
|
73
|
-
version: "0.15.
|
|
73
|
+
version: "0.15.24",
|
|
74
74
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
75
75
|
type: "module",
|
|
76
76
|
main: "dist/index.js",
|
|
@@ -1209,7 +1209,7 @@ var init_plan_project_link_contract = __esm(() => {
|
|
|
1209
1209
|
});
|
|
1210
1210
|
|
|
1211
1211
|
// src/lib/config.ts
|
|
1212
|
-
import { existsSync as existsSync3 } from "fs";
|
|
1212
|
+
import { existsSync as existsSync3, readFileSync as readFileSync2 } from "fs";
|
|
1213
1213
|
import { dirname, join as join3 } from "path";
|
|
1214
1214
|
function getConfigPath() {
|
|
1215
1215
|
return join3(getTodosGlobalDir(), "config.json");
|
|
@@ -1586,7 +1586,7 @@ function requireCanonicalLockVersion(value) {
|
|
|
1586
1586
|
throw new StaleLockHandoffError("STALE_LOCK_HANDOFF_INVALID_INPUT", "expected_lock_version must be the exact canonical locked_at timestamp (YYYY-MM-DDTHH:mm:ss.sssZ)", { field: "expected_lock_version" });
|
|
1587
1587
|
}
|
|
1588
1588
|
const parsed = Date.parse(value);
|
|
1589
|
-
if (Number.isNaN(parsed) || new Date(parsed).toISOString() !== value) {
|
|
1589
|
+
if (value.startsWith("0000-") || Number.isNaN(parsed) || new Date(parsed).toISOString() !== value) {
|
|
1590
1590
|
throw new StaleLockHandoffError("STALE_LOCK_HANDOFF_INVALID_INPUT", "expected_lock_version must name a real canonical UTC instant", { field: "expected_lock_version" });
|
|
1591
1591
|
}
|
|
1592
1592
|
return value;
|
|
@@ -1611,9 +1611,6 @@ function prepareStaleLockHandoff(input, options = {}) {
|
|
|
1611
1611
|
if (canonicalAgentRef(actor) !== canonicalAgentRef(newHolder)) {
|
|
1612
1612
|
throw new StaleLockHandoffError("STALE_LOCK_HANDOFF_ACTOR_MISMATCH", "new_holder must match the authenticated actor", { actor, new_holder: newHolder });
|
|
1613
1613
|
}
|
|
1614
|
-
if (canonicalAgentRef(expectedHolder) === canonicalAgentRef(newHolder)) {
|
|
1615
|
-
throw new StaleLockHandoffError("STALE_LOCK_HANDOFF_INVALID_INPUT", "new_holder must differ from expected_holder", { field: "new_holder" });
|
|
1616
|
-
}
|
|
1617
1614
|
const operationTimestamp = options.now ?? new Date().toISOString();
|
|
1618
1615
|
if (!CANONICAL_LOCK_VERSION_RE.test(operationTimestamp) || new Date(Date.parse(operationTimestamp)).toISOString() !== operationTimestamp) {
|
|
1619
1616
|
throw new StaleLockHandoffError("STALE_LOCK_HANDOFF_INVALID_INPUT", "operation timestamp must be a canonical UTC instant");
|
|
@@ -2421,6 +2418,31 @@ var init_audit_history_import = __esm(() => {
|
|
|
2421
2418
|
];
|
|
2422
2419
|
});
|
|
2423
2420
|
|
|
2421
|
+
// src/task-manifest/canonical.ts
|
|
2422
|
+
import { createHash as createHash3 } from "crypto";
|
|
2423
|
+
function canonicalize(value) {
|
|
2424
|
+
if (Array.isArray(value))
|
|
2425
|
+
return value.map(canonicalize);
|
|
2426
|
+
if (value !== null && typeof value === "object") {
|
|
2427
|
+
return Object.fromEntries(Object.entries(value).filter(([, entry2]) => entry2 !== undefined).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry2]) => [key, canonicalize(entry2)]));
|
|
2428
|
+
}
|
|
2429
|
+
return value;
|
|
2430
|
+
}
|
|
2431
|
+
function canonicalJson(value) {
|
|
2432
|
+
return JSON.stringify(canonicalize(value));
|
|
2433
|
+
}
|
|
2434
|
+
function canonicalDigest(value) {
|
|
2435
|
+
return createHash3("sha256").update(canonicalJson(value)).digest("hex");
|
|
2436
|
+
}
|
|
2437
|
+
function deterministicUuid(namespace, ...parts) {
|
|
2438
|
+
const bytes = createHash3("sha256").update([namespace, ...parts].join("\x1F")).digest().subarray(0, 16);
|
|
2439
|
+
bytes[6] = bytes[6] & 15 | 80;
|
|
2440
|
+
bytes[8] = bytes[8] & 63 | 128;
|
|
2441
|
+
const hex = bytes.toString("hex");
|
|
2442
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
2443
|
+
}
|
|
2444
|
+
var init_canonical = () => {};
|
|
2445
|
+
|
|
2424
2446
|
// src/storage/postgres-adapter.ts
|
|
2425
2447
|
import { randomUUID } from "crypto";
|
|
2426
2448
|
function createPostgresTodosStorageAdapter(options) {
|
|
@@ -2646,7 +2668,7 @@ class PostgresJsonRecordStore {
|
|
|
2646
2668
|
AND task_record.deleted_at IS NULL
|
|
2647
2669
|
AND target.payload->>'locked_by' = $3
|
|
2648
2670
|
AND target.payload->>'locked_at' = $4
|
|
2649
|
-
AND
|
|
2671
|
+
AND $4::timestamptz < $5::timestamptz
|
|
2650
2672
|
AND COALESCE(target.payload->>'status', '') NOT IN ('completed', 'failed', 'cancelled')
|
|
2651
2673
|
RETURNING task_record.payload
|
|
2652
2674
|
),
|
|
@@ -4088,16 +4110,17 @@ async function findCommit(sha, store) {
|
|
|
4088
4110
|
async function addGitRef(input, store, context) {
|
|
4089
4111
|
if (!await store.get("tasks", input.task_id))
|
|
4090
4112
|
throw new Error(`Task not found: ${input.task_id}`);
|
|
4113
|
+
const existing = (await store.list("refs")).filter((ref) => ref.task_id === input.task_id && ref.ref_type === input.ref_type && ref.name === input.name).sort((left, right) => left.created_at.localeCompare(right.created_at) || left.id.localeCompare(right.id))[0];
|
|
4091
4114
|
const timestamp = new Date().toISOString();
|
|
4092
4115
|
const gitRef = {
|
|
4093
|
-
id:
|
|
4116
|
+
id: existing?.id ?? deterministicUuid("todos:git-ref:v1", input.task_id, input.ref_type, input.name),
|
|
4094
4117
|
task_id: input.task_id,
|
|
4095
4118
|
ref_type: input.ref_type,
|
|
4096
4119
|
name: input.name,
|
|
4097
|
-
url: input.url ?? null,
|
|
4098
|
-
provider: input.provider ?? null,
|
|
4120
|
+
url: input.url ?? existing?.url ?? null,
|
|
4121
|
+
provider: input.provider ?? existing?.provider ?? null,
|
|
4099
4122
|
metadata: input.metadata ?? {},
|
|
4100
|
-
created_at: timestamp,
|
|
4123
|
+
created_at: existing?.created_at ?? timestamp,
|
|
4101
4124
|
updated_at: timestamp
|
|
4102
4125
|
};
|
|
4103
4126
|
await store.upsert("refs", gitRef, context);
|
|
@@ -4659,6 +4682,7 @@ var init_postgres_adapter = __esm(() => {
|
|
|
4659
4682
|
init_integrity();
|
|
4660
4683
|
init_redaction();
|
|
4661
4684
|
init_audit_history_import();
|
|
4685
|
+
init_canonical();
|
|
4662
4686
|
TASK_ORDER_BY = `ORDER BY ${TASK_ORDER_TIEBREAK}`;
|
|
4663
4687
|
});
|
|
4664
4688
|
|
|
@@ -4678,9 +4702,9 @@ var init_types2 = __esm(() => {
|
|
|
4678
4702
|
});
|
|
4679
4703
|
|
|
4680
4704
|
// src/pr-groups/ledger.ts
|
|
4681
|
-
import { createHash as
|
|
4705
|
+
import { createHash as createHash4 } from "crypto";
|
|
4682
4706
|
function sha256(value) {
|
|
4683
|
-
return
|
|
4707
|
+
return createHash4("sha256").update(value).digest("hex");
|
|
4684
4708
|
}
|
|
4685
4709
|
function stableValue(value) {
|
|
4686
4710
|
if (Array.isArray(value))
|
|
@@ -12117,7 +12141,7 @@ var init_runner_sandbox = __esm(() => {
|
|
|
12117
12141
|
});
|
|
12118
12142
|
|
|
12119
12143
|
// src/lib/event-hooks.ts
|
|
12120
|
-
import { createHash as
|
|
12144
|
+
import { createHash as createHash5, randomUUID as randomUUID2 } from "crypto";
|
|
12121
12145
|
import { appendFileSync, mkdirSync as mkdirSync3 } from "fs";
|
|
12122
12146
|
import { dirname as dirname3, resolve as resolve6 } from "path";
|
|
12123
12147
|
import { createConnection } from "net";
|
|
@@ -12184,7 +12208,7 @@ function buildEnvelope(type, payload, timestamp2 = new Date().toISOString()) {
|
|
|
12184
12208
|
payload: redactValue(payload ?? {}),
|
|
12185
12209
|
source: { package: "@hasna/todos", local_only: true }
|
|
12186
12210
|
};
|
|
12187
|
-
const digest =
|
|
12211
|
+
const digest = createHash5("sha256").update(canonicalEvent(base)).digest("hex");
|
|
12188
12212
|
return { ...base, integrity: { algorithm: "sha256", digest } };
|
|
12189
12213
|
}
|
|
12190
12214
|
function summarize(value) {
|
|
@@ -17194,8 +17218,8 @@ var init_boards = __esm(() => {
|
|
|
17194
17218
|
});
|
|
17195
17219
|
|
|
17196
17220
|
// src/lib/artifact-store.ts
|
|
17197
|
-
import { createHash as
|
|
17198
|
-
import { existsSync as existsSync7, mkdirSync as mkdirSync4, readFileSync as
|
|
17221
|
+
import { createHash as createHash6 } from "crypto";
|
|
17222
|
+
import { existsSync as existsSync7, mkdirSync as mkdirSync4, readFileSync as readFileSync3, rmSync as rmSync2, statSync as statSync2, writeFileSync as writeFileSync2 } from "fs";
|
|
17199
17223
|
import { basename, dirname as dirname4, join as join6, resolve as resolve7 } from "path";
|
|
17200
17224
|
import { tmpdir as tmpdir2 } from "os";
|
|
17201
17225
|
function isInMemoryDb2(path) {
|
|
@@ -17219,7 +17243,7 @@ function artifactStorePath(relativePath) {
|
|
|
17219
17243
|
return join6(artifactStoreRoot(), normalized);
|
|
17220
17244
|
}
|
|
17221
17245
|
function sha2562(buffer) {
|
|
17222
|
-
return
|
|
17246
|
+
return createHash6("sha256").update(buffer).digest("hex");
|
|
17223
17247
|
}
|
|
17224
17248
|
function isTextLike(buffer, path) {
|
|
17225
17249
|
if (buffer.includes(0))
|
|
@@ -17262,7 +17286,7 @@ function storeArtifactContent(input) {
|
|
|
17262
17286
|
const sourceStat = statSync2(sourcePath);
|
|
17263
17287
|
if (!sourceStat.isFile())
|
|
17264
17288
|
throw new Error(`Artifact path is not a file: ${sanitizePreWriteText(input.path, "artifact.path")}`);
|
|
17265
|
-
const sourceBuffer =
|
|
17289
|
+
const sourceBuffer = readFileSync3(sourcePath);
|
|
17266
17290
|
const sourceSha = sha2562(sourceBuffer);
|
|
17267
17291
|
const textLike = isTextLike(sourceBuffer, input.path);
|
|
17268
17292
|
let storedBuffer = sourceBuffer;
|
|
@@ -17349,7 +17373,7 @@ function verifyStoredArtifact(input) {
|
|
|
17349
17373
|
message: "stored artifact content is missing"
|
|
17350
17374
|
};
|
|
17351
17375
|
}
|
|
17352
|
-
const buffer =
|
|
17376
|
+
const buffer = readFileSync3(storedPath);
|
|
17353
17377
|
const actualSha = sha2562(buffer);
|
|
17354
17378
|
const actualSize = buffer.length;
|
|
17355
17379
|
const ok = actualSha === store.sha256 && actualSize === store.size_bytes;
|
|
@@ -17369,7 +17393,7 @@ function exportStoredArtifactContent(input) {
|
|
|
17369
17393
|
const report = verifyStoredArtifact(input);
|
|
17370
17394
|
if (report.status !== "ok" || !report.relative_path || !report.actual_sha256 || report.actual_size_bytes === null)
|
|
17371
17395
|
return null;
|
|
17372
|
-
const content =
|
|
17396
|
+
const content = readFileSync3(artifactStorePath(report.relative_path));
|
|
17373
17397
|
return {
|
|
17374
17398
|
artifact_id: input.id,
|
|
17375
17399
|
sha256: report.actual_sha256,
|
|
@@ -20952,25 +20976,25 @@ var init_sqlite = __esm(() => {
|
|
|
20952
20976
|
});
|
|
20953
20977
|
|
|
20954
20978
|
// src/project-registration/authority.ts
|
|
20955
|
-
import { createHash as
|
|
20979
|
+
import { createHash as createHash7 } from "crypto";
|
|
20956
20980
|
function canonicalProjectRegistrationJson(value) {
|
|
20957
|
-
return JSON.stringify(
|
|
20981
|
+
return JSON.stringify(canonicalize2(value));
|
|
20958
20982
|
}
|
|
20959
|
-
function
|
|
20983
|
+
function canonicalize2(value) {
|
|
20960
20984
|
if (Array.isArray(value))
|
|
20961
|
-
return value.map(
|
|
20985
|
+
return value.map(canonicalize2);
|
|
20962
20986
|
if (!value || typeof value !== "object")
|
|
20963
20987
|
return value;
|
|
20964
20988
|
const out = {};
|
|
20965
20989
|
for (const key of Object.keys(value).sort()) {
|
|
20966
20990
|
const entry2 = value[key];
|
|
20967
20991
|
if (entry2 !== undefined)
|
|
20968
|
-
out[key] =
|
|
20992
|
+
out[key] = canonicalize2(entry2);
|
|
20969
20993
|
}
|
|
20970
20994
|
return out;
|
|
20971
20995
|
}
|
|
20972
20996
|
function digestProjectRegistrationValue(value) {
|
|
20973
|
-
return
|
|
20997
|
+
return createHash7("sha256").update(canonicalProjectRegistrationJson(value)).digest("hex");
|
|
20974
20998
|
}
|
|
20975
20999
|
function deriveTodosProjectRegistrationIdempotencyKey(input) {
|
|
20976
21000
|
return `prk_${digestProjectRegistrationValue({
|
|
@@ -21965,31 +21989,6 @@ var init_project_registration = __esm(() => {
|
|
|
21965
21989
|
init_types3();
|
|
21966
21990
|
});
|
|
21967
21991
|
|
|
21968
|
-
// src/task-manifest/canonical.ts
|
|
21969
|
-
import { createHash as createHash7 } from "crypto";
|
|
21970
|
-
function canonicalize2(value) {
|
|
21971
|
-
if (Array.isArray(value))
|
|
21972
|
-
return value.map(canonicalize2);
|
|
21973
|
-
if (value !== null && typeof value === "object") {
|
|
21974
|
-
return Object.fromEntries(Object.entries(value).filter(([, entry2]) => entry2 !== undefined).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry2]) => [key, canonicalize2(entry2)]));
|
|
21975
|
-
}
|
|
21976
|
-
return value;
|
|
21977
|
-
}
|
|
21978
|
-
function canonicalJson(value) {
|
|
21979
|
-
return JSON.stringify(canonicalize2(value));
|
|
21980
|
-
}
|
|
21981
|
-
function canonicalDigest(value) {
|
|
21982
|
-
return createHash7("sha256").update(canonicalJson(value)).digest("hex");
|
|
21983
|
-
}
|
|
21984
|
-
function deterministicUuid(namespace, ...parts) {
|
|
21985
|
-
const bytes = createHash7("sha256").update([namespace, ...parts].join("\x1F")).digest().subarray(0, 16);
|
|
21986
|
-
bytes[6] = bytes[6] & 15 | 80;
|
|
21987
|
-
bytes[8] = bytes[8] & 63 | 128;
|
|
21988
|
-
const hex = bytes.toString("hex");
|
|
21989
|
-
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
21990
|
-
}
|
|
21991
|
-
var init_canonical = () => {};
|
|
21992
|
-
|
|
21993
21992
|
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/util.js
|
|
21994
21993
|
var util, objectUtil, ZodParsedType, getParsedType = (data) => {
|
|
21995
21994
|
const t = typeof data;
|
|
@@ -29638,6 +29637,7 @@ function buildV1OpenApiDocument(version = getPackageVersion()) {
|
|
|
29638
29637
|
plan_id: { type: "string" },
|
|
29639
29638
|
assigned_to: { type: "string" },
|
|
29640
29639
|
agent_id: { type: "string" },
|
|
29640
|
+
created_by: { type: "string" },
|
|
29641
29641
|
tags: { type: "array", items: { type: "string" } }
|
|
29642
29642
|
}
|
|
29643
29643
|
},
|
|
@@ -31480,6 +31480,7 @@ var init_openapi = __esm(() => {
|
|
|
31480
31480
|
parent_id: { type: "string", nullable: true },
|
|
31481
31481
|
assigned_to: { type: "string", nullable: true },
|
|
31482
31482
|
agent_id: { type: "string", nullable: true },
|
|
31483
|
+
created_by: { type: "string", nullable: true },
|
|
31483
31484
|
reason: { type: "string", nullable: true },
|
|
31484
31485
|
tags: { type: "array", items: { type: "string" } },
|
|
31485
31486
|
version: { type: "number" },
|
|
@@ -51389,7 +51390,7 @@ var init_token_utils = __esm(() => {
|
|
|
51389
51390
|
});
|
|
51390
51391
|
|
|
51391
51392
|
// src/lib/assignee-validation.ts
|
|
51392
|
-
import { readFileSync as
|
|
51393
|
+
import { readFileSync as readFileSync4 } from "fs";
|
|
51393
51394
|
import { homedir as homedir3 } from "os";
|
|
51394
51395
|
import { join as join9 } from "path";
|
|
51395
51396
|
function defaultSeatRosterPath() {
|
|
@@ -51397,7 +51398,7 @@ function defaultSeatRosterPath() {
|
|
|
51397
51398
|
}
|
|
51398
51399
|
function loadSeatSlugs(path = defaultSeatRosterPath()) {
|
|
51399
51400
|
try {
|
|
51400
|
-
const parsed = JSON.parse(
|
|
51401
|
+
const parsed = JSON.parse(readFileSync4(path, "utf8"));
|
|
51401
51402
|
const slugs = new Set;
|
|
51402
51403
|
for (const agent of parsed.agents ?? []) {
|
|
51403
51404
|
if (typeof agent?.slug === "string" && agent.slug.trim()) {
|
|
@@ -65030,8 +65031,12 @@ async function cloudGetTask(client, id) {
|
|
|
65030
65031
|
const raw = await client.get("tasks", id);
|
|
65031
65032
|
return raw == null ? null : unwrapTask(raw);
|
|
65032
65033
|
}
|
|
65033
|
-
async function cloudCreateTask(client, input) {
|
|
65034
|
+
async function cloudCreateTask(client, input, verification2 = {}) {
|
|
65034
65035
|
const expectedParentId = typeof input["parent_id"] === "string" ? input["parent_id"] : null;
|
|
65036
|
+
const expectedCreatedBy = typeof verification2.expectedCreatedBy === "string" && verification2.expectedCreatedBy.trim() ? verification2.expectedCreatedBy : null;
|
|
65037
|
+
if (expectedCreatedBy !== null) {
|
|
65038
|
+
await requireTaskCreatorCapability(client);
|
|
65039
|
+
}
|
|
65035
65040
|
const created = unwrapTask(await requiredRemoteRoute(client, "/v1/tasks", () => client.transport.post("/tasks", input, {
|
|
65036
65041
|
idempotencyKey: randomUUID4(),
|
|
65037
65042
|
retry: false
|
|
@@ -65040,8 +65045,9 @@ async function cloudCreateTask(client, input) {
|
|
|
65040
65045
|
throw new Error(`REMOTE_API_INCOMPATIBLE: configured Todos authority ${remoteAuthorityBase(client)} returned a task create ` + "response without a stored task id; no success row or local SQLite fallback is permitted");
|
|
65041
65046
|
}
|
|
65042
65047
|
const persisted = await cloudGetTask(client, created.id);
|
|
65043
|
-
if (!persisted || persisted.id !== created.id || (persisted.parent_id ?? null) !== expectedParentId) {
|
|
65044
|
-
|
|
65048
|
+
if (!persisted || persisted.id !== created.id || (persisted.parent_id ?? null) !== expectedParentId || expectedCreatedBy !== null && persisted.created_by !== expectedCreatedBy) {
|
|
65049
|
+
const creatorDetail = expectedCreatedBy === null ? "" : ` and explicit created_by=${JSON.stringify(expectedCreatedBy)} ` + `(readback ${JSON.stringify(persisted?.created_by ?? null)})`;
|
|
65050
|
+
throw new Error(`TASK_CREATE_PERSISTENCE_UNVERIFIED: configured Todos authority ${remoteAuthorityBase(client)} accepted ` + `POST /v1/tasks but authoritative GET /v1/tasks/${encodeURIComponent(created.id)} did not return the same ` + `stored task id and parent_id${creatorDetail}; no success row or local SQLite fallback is permitted`);
|
|
65045
65051
|
}
|
|
65046
65052
|
return persisted;
|
|
65047
65053
|
}
|
|
@@ -65062,6 +65068,51 @@ async function cloudTaskAction(client, id, action, body2 = {}) {
|
|
|
65062
65068
|
const raw = await client.transport.post(`/tasks/${encodeURIComponent(id)}/${action}`, body2);
|
|
65063
65069
|
return unwrapTask(raw);
|
|
65064
65070
|
}
|
|
65071
|
+
function resolveOpenApiSchema(document, schema2) {
|
|
65072
|
+
if (!schema2 || typeof schema2 !== "object" || Array.isArray(schema2))
|
|
65073
|
+
return null;
|
|
65074
|
+
const value = schema2;
|
|
65075
|
+
if (typeof value["$ref"] !== "string")
|
|
65076
|
+
return value;
|
|
65077
|
+
const reference = value["$ref"];
|
|
65078
|
+
if (!reference.startsWith("#/"))
|
|
65079
|
+
return null;
|
|
65080
|
+
let current = document;
|
|
65081
|
+
for (const segment of reference.slice(2).split("/")) {
|
|
65082
|
+
const key2 = segment.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
65083
|
+
if (!current || typeof current !== "object" || Array.isArray(current))
|
|
65084
|
+
return null;
|
|
65085
|
+
current = current[key2];
|
|
65086
|
+
}
|
|
65087
|
+
return current && typeof current === "object" && !Array.isArray(current) ? current : null;
|
|
65088
|
+
}
|
|
65089
|
+
function openApiSchemaProperty(document, schemaName, propertyName) {
|
|
65090
|
+
const schema2 = resolveOpenApiSchema(document, {
|
|
65091
|
+
$ref: `#/components/schemas/${schemaName}`
|
|
65092
|
+
});
|
|
65093
|
+
const properties = schema2?.["properties"];
|
|
65094
|
+
if (!properties || typeof properties !== "object" || Array.isArray(properties))
|
|
65095
|
+
return null;
|
|
65096
|
+
const property = properties[propertyName];
|
|
65097
|
+
return property && typeof property === "object" && !Array.isArray(property) ? property : null;
|
|
65098
|
+
}
|
|
65099
|
+
async function fetchTaskCreatorCapability(client) {
|
|
65100
|
+
const document = await requiredRemoteRoute(client, "/v1/openapi.json", () => client.transport.get("/openapi.json"));
|
|
65101
|
+
const inputProperty = openApiSchemaProperty(document, "CreateTaskInput", "created_by");
|
|
65102
|
+
const outputProperty = openApiSchemaProperty(document, "Task", "created_by");
|
|
65103
|
+
return inputProperty?.["type"] === "string" && outputProperty?.["type"] === "string" && outputProperty?.["nullable"] === true;
|
|
65104
|
+
}
|
|
65105
|
+
async function requireTaskCreatorCapability(client) {
|
|
65106
|
+
const authority = remoteAuthorityBase(client);
|
|
65107
|
+
let capability = taskCreatorCapabilityCache.get(authority);
|
|
65108
|
+
if (!capability) {
|
|
65109
|
+
capability = fetchTaskCreatorCapability(client);
|
|
65110
|
+
taskCreatorCapabilityCache.set(authority, capability);
|
|
65111
|
+
}
|
|
65112
|
+
if (!await capability) {
|
|
65113
|
+
throw new Error(`REMOTE_CREATED_BY_UNSUPPORTED: configured Todos authority ${authority} does not advertise created_by ` + "on both CreateTaskInput and Task in /v1/openapi.json; no task mutation was sent; deploy a compatible " + "@hasna/todos /v1 server before retrying; local SQLite fallback is disabled");
|
|
65114
|
+
}
|
|
65115
|
+
}
|
|
65065
65116
|
async function cloudGetStats(client) {
|
|
65066
65117
|
const raw = await requiredRemoteRoute(client, "/v1/stats", () => client.transport.get("/stats"));
|
|
65067
65118
|
return raw ?? {};
|
|
@@ -65257,7 +65308,7 @@ async function cloudResolveTaskListRef(client, ref, projectId) {
|
|
|
65257
65308
|
return input.toLowerCase();
|
|
65258
65309
|
return (await cloudResolveTaskList(client, ref, projectId)).id;
|
|
65259
65310
|
}
|
|
65260
|
-
var UUID_RE, TRANSPORT_TOKENS, completionCapabilityCache, retryCapabilityCache, gitRefCapabilityCache, SERVER_MODE_CANDIDATES, cachedServerMode = null, PRIORITY_RANK, listTagsCapabilityCache;
|
|
65311
|
+
var UUID_RE, TRANSPORT_TOKENS, completionCapabilityCache, retryCapabilityCache, taskCreatorCapabilityCache, gitRefCapabilityCache, remoteCommandCapabilityCache, SERVER_MODE_CANDIDATES, cachedServerMode = null, PRIORITY_RANK, listTagsCapabilityCache;
|
|
65261
65312
|
var init_cloud_router = __esm(() => {
|
|
65262
65313
|
init_storage();
|
|
65263
65314
|
init_mode();
|
|
@@ -65277,7 +65328,9 @@ var init_cloud_router = __esm(() => {
|
|
|
65277
65328
|
};
|
|
65278
65329
|
completionCapabilityCache = new Map;
|
|
65279
65330
|
retryCapabilityCache = new Map;
|
|
65331
|
+
taskCreatorCapabilityCache = new Map;
|
|
65280
65332
|
gitRefCapabilityCache = new Map;
|
|
65333
|
+
remoteCommandCapabilityCache = new Map;
|
|
65281
65334
|
SERVER_MODE_CANDIDATES = ["postgres", "cloud", "self_hosted"];
|
|
65282
65335
|
PRIORITY_RANK = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
65283
65336
|
listTagsCapabilityCache = new Map;
|
|
@@ -65673,7 +65726,7 @@ var init_task_crud2 = __esm(() => {
|
|
|
65673
65726
|
});
|
|
65674
65727
|
|
|
65675
65728
|
// src/lib/project-bootstrap.ts
|
|
65676
|
-
import { existsSync as existsSync9, readFileSync as
|
|
65729
|
+
import { existsSync as existsSync9, readFileSync as readFileSync5, statSync as statSync4 } from "fs";
|
|
65677
65730
|
import { basename as basename3, dirname as dirname6, resolve as resolve9 } from "path";
|
|
65678
65731
|
function safeStat(path) {
|
|
65679
65732
|
try {
|
|
@@ -65707,7 +65760,7 @@ function readPackageJson(path) {
|
|
|
65707
65760
|
if (!existsSync9(file))
|
|
65708
65761
|
return null;
|
|
65709
65762
|
try {
|
|
65710
|
-
const parsed = JSON.parse(
|
|
65763
|
+
const parsed = JSON.parse(readFileSync5(file, "utf-8"));
|
|
65711
65764
|
return parsed && typeof parsed === "object" ? parsed : null;
|
|
65712
65765
|
} catch {
|
|
65713
65766
|
return null;
|
|
@@ -66269,7 +66322,7 @@ var init_retention_cleanup = __esm(() => {
|
|
|
66269
66322
|
});
|
|
66270
66323
|
|
|
66271
66324
|
// src/lib/mention-resolver.ts
|
|
66272
|
-
import { existsSync as existsSync11, readdirSync as readdirSync2, readFileSync as
|
|
66325
|
+
import { existsSync as existsSync11, readdirSync as readdirSync2, readFileSync as readFileSync6, statSync as statSync5 } from "fs";
|
|
66273
66326
|
import { basename as basename4, isAbsolute, join as join10, relative as relative3, resolve as resolve10, sep as sep3 } from "path";
|
|
66274
66327
|
function blankResolution(parsed) {
|
|
66275
66328
|
return {
|
|
@@ -66378,7 +66431,7 @@ function resolveFile(parsed, workspace) {
|
|
|
66378
66431
|
return resolution;
|
|
66379
66432
|
}
|
|
66380
66433
|
if (parsed.line !== undefined) {
|
|
66381
|
-
const lineCount =
|
|
66434
|
+
const lineCount = readFileSync6(absolutePath, "utf-8").split(/\r?\n/).length;
|
|
66382
66435
|
if (parsed.line < 1 || parsed.line > lineCount) {
|
|
66383
66436
|
resolution.warnings.push(`line ${parsed.line} is outside the file range 1-${lineCount}`);
|
|
66384
66437
|
return resolution;
|
|
@@ -66431,7 +66484,7 @@ function resolveSymbol(parsed, workspace, maxMatches) {
|
|
|
66431
66484
|
const pattern = symbolPattern(name);
|
|
66432
66485
|
const matches = [];
|
|
66433
66486
|
for (const file of walkSourceFiles(workspace)) {
|
|
66434
|
-
const lines =
|
|
66487
|
+
const lines = readFileSync6(file, "utf-8").split(/\r?\n/);
|
|
66435
66488
|
for (let index = 0;index < lines.length; index += 1) {
|
|
66436
66489
|
const line = lines[index];
|
|
66437
66490
|
const found = pattern.exec(line);
|
|
@@ -70098,7 +70151,7 @@ var init_audit_ledger = __esm(() => {
|
|
|
70098
70151
|
});
|
|
70099
70152
|
|
|
70100
70153
|
// src/lib/release-compatibility.ts
|
|
70101
|
-
import { readFileSync as
|
|
70154
|
+
import { readFileSync as readFileSync7 } from "fs";
|
|
70102
70155
|
import { join as join11, resolve as resolve12 } from "path";
|
|
70103
70156
|
import { Database as Database2 } from "bun:sqlite";
|
|
70104
70157
|
function pass(id, message, details) {
|
|
@@ -70111,7 +70164,7 @@ function warn(id, message, details) {
|
|
|
70111
70164
|
return { id, status: "warning", message, details };
|
|
70112
70165
|
}
|
|
70113
70166
|
function readPackageJson2(root) {
|
|
70114
|
-
return JSON.parse(
|
|
70167
|
+
return JSON.parse(readFileSync7(join11(root, "package.json"), "utf8"));
|
|
70115
70168
|
}
|
|
70116
70169
|
function sortedKeys(value) {
|
|
70117
70170
|
return Object.keys(value ?? {}).sort((left, right) => left.localeCompare(right));
|
|
@@ -70492,6 +70545,8 @@ function searchTaskEntities(filters, db) {
|
|
|
70492
70545
|
return tasks.filter((task2) => taskMatchesSavedFilters(task2, filters, db)).slice(0, normalizeLimit(filters.limit));
|
|
70493
70546
|
}
|
|
70494
70547
|
function searchProjects(filters, db) {
|
|
70548
|
+
if (filters.agent_id)
|
|
70549
|
+
return [];
|
|
70495
70550
|
const params = [];
|
|
70496
70551
|
let sql = "SELECT * FROM projects WHERE 1=1";
|
|
70497
70552
|
if (filters.project_id) {
|
|
@@ -100034,7 +100089,7 @@ var init_agent_run_dispatcher = __esm(() => {
|
|
|
100034
100089
|
});
|
|
100035
100090
|
|
|
100036
100091
|
// src/lib/verification-providers.ts
|
|
100037
|
-
import { existsSync as existsSync12, readFileSync as
|
|
100092
|
+
import { existsSync as existsSync12, readFileSync as readFileSync8 } from "fs";
|
|
100038
100093
|
function normalizeName5(name) {
|
|
100039
100094
|
const normalized = name.trim().toLowerCase();
|
|
100040
100095
|
if (!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(normalized)) {
|
|
@@ -100186,7 +100241,7 @@ Timed out after ${provider.timeout_ms}ms`);
|
|
|
100186
100241
|
};
|
|
100187
100242
|
}
|
|
100188
100243
|
function runCiLogProvider(input) {
|
|
100189
|
-
const text = input.log_text ?? (input.log_path && existsSync12(input.log_path) ?
|
|
100244
|
+
const text = input.log_text ?? (input.log_path && existsSync12(input.log_path) ? readFileSync8(input.log_path, "utf-8") : "");
|
|
100190
100245
|
return {
|
|
100191
100246
|
status: classifyLog(text),
|
|
100192
100247
|
attempts: 1,
|
|
@@ -102927,7 +102982,7 @@ var init_local_bridge = __esm(() => {
|
|
|
102927
102982
|
|
|
102928
102983
|
// src/lib/local-backups.ts
|
|
102929
102984
|
import { createHash as createHash12 } from "crypto";
|
|
102930
|
-
import { readFileSync as
|
|
102985
|
+
import { readFileSync as readFileSync9, writeFileSync as writeFileSync3 } from "fs";
|
|
102931
102986
|
import { dirname as dirname7, resolve as resolve13 } from "path";
|
|
102932
102987
|
import { mkdirSync as mkdirSync6 } from "fs";
|
|
102933
102988
|
function stableJson2(value) {
|
|
@@ -103037,7 +103092,7 @@ function writeLocalBackupFile(backup, outputPath) {
|
|
|
103037
103092
|
return path;
|
|
103038
103093
|
}
|
|
103039
103094
|
function readLocalBackupFile(path) {
|
|
103040
|
-
return JSON.parse(
|
|
103095
|
+
return JSON.parse(readFileSync9(resolve13(path), "utf-8"));
|
|
103041
103096
|
}
|
|
103042
103097
|
function verifyLocalBackup(value, options = {}, db) {
|
|
103043
103098
|
const verifiedAt = options.verified_at ?? now();
|
|
@@ -104488,7 +104543,7 @@ __export(exports_local_extensions, {
|
|
|
104488
104543
|
discoverLocalExtensions: () => discoverLocalExtensions
|
|
104489
104544
|
});
|
|
104490
104545
|
import { createHash as createHash15, createVerify } from "crypto";
|
|
104491
|
-
import { existsSync as existsSync13, readdirSync as readdirSync3, readFileSync as
|
|
104546
|
+
import { existsSync as existsSync13, readdirSync as readdirSync3, readFileSync as readFileSync10, statSync as statSync6 } from "fs";
|
|
104492
104547
|
import { basename as basename5, join as join12, resolve as resolve14 } from "path";
|
|
104493
104548
|
function isObject3(value) {
|
|
104494
104549
|
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
@@ -104570,7 +104625,7 @@ function normalizeManifest(input) {
|
|
|
104570
104625
|
};
|
|
104571
104626
|
}
|
|
104572
104627
|
function parseJson2(path) {
|
|
104573
|
-
return JSON.parse(
|
|
104628
|
+
return JSON.parse(readFileSync10(path, "utf8"));
|
|
104574
104629
|
}
|
|
104575
104630
|
function sha2566(bytes) {
|
|
104576
104631
|
return `sha256:${createHash15("sha256").update(bytes).digest("hex")}`;
|
|
@@ -104754,7 +104809,7 @@ function inspectExtensionSource(source3) {
|
|
|
104754
104809
|
const manifestPath = stat.isDirectory() ? [join12(resolved, "todos.extension.json"), join12(resolved, "extension.json")].find(existsSync13) : resolved;
|
|
104755
104810
|
if (!manifestPath)
|
|
104756
104811
|
throw new Error(`extension directory ${source3} is missing todos.extension.json`);
|
|
104757
|
-
const raw =
|
|
104812
|
+
const raw = readFileSync10(manifestPath);
|
|
104758
104813
|
const parsed = parseJson2(manifestPath);
|
|
104759
104814
|
const bundle = isObject3(parsed) && isObject3(parsed["manifest"]);
|
|
104760
104815
|
const manifest = normalizeManifest(bundle ? parsed["manifest"] : parsed);
|
|
@@ -109267,7 +109322,7 @@ __export(exports_extract, {
|
|
|
109267
109322
|
buildCodebaseIndex: () => buildCodebaseIndex,
|
|
109268
109323
|
EXTRACT_TAGS: () => EXTRACT_TAGS
|
|
109269
109324
|
});
|
|
109270
|
-
import { existsSync as existsSync14, readFileSync as
|
|
109325
|
+
import { existsSync as existsSync14, readFileSync as readFileSync11, statSync as statSync7 } from "fs";
|
|
109271
109326
|
import { createHash as createHash17 } from "crypto";
|
|
109272
109327
|
import { relative as relative5, resolve as resolve15, join as join13 } from "path";
|
|
109273
109328
|
function stableHash(value) {
|
|
@@ -109282,7 +109337,7 @@ function readGitignorePatterns(basePath) {
|
|
|
109282
109337
|
if (!existsSync14(gitignorePath))
|
|
109283
109338
|
return [];
|
|
109284
109339
|
try {
|
|
109285
|
-
return
|
|
109340
|
+
return readFileSync11(gitignorePath, "utf-8").split(`
|
|
109286
109341
|
`).map((line) => line.trim()).filter((line) => line && !line.startsWith("#") && !line.startsWith("!"));
|
|
109287
109342
|
} catch {
|
|
109288
109343
|
return [];
|
|
@@ -109423,7 +109478,7 @@ function buildCodebaseIndex(options) {
|
|
|
109423
109478
|
for (const file of files) {
|
|
109424
109479
|
const fullPath = statSync7(basePath).isFile() ? basePath : join13(basePath, file);
|
|
109425
109480
|
try {
|
|
109426
|
-
const source3 =
|
|
109481
|
+
const source3 = readFileSync11(fullPath, "utf-8");
|
|
109427
109482
|
const relPath = statSync7(basePath).isFile() ? relative5(resolve15(basePath, ".."), fullPath) : file;
|
|
109428
109483
|
indexed.push({
|
|
109429
109484
|
file: relPath,
|
|
@@ -109454,7 +109509,7 @@ function extractTodos(options, db) {
|
|
|
109454
109509
|
for (const file of files) {
|
|
109455
109510
|
const fullPath = statSync7(basePath).isFile() ? basePath : join13(basePath, file);
|
|
109456
109511
|
try {
|
|
109457
|
-
const source3 =
|
|
109512
|
+
const source3 = readFileSync11(fullPath, "utf-8");
|
|
109458
109513
|
const relPath = statSync7(basePath).isFile() ? relative5(resolve15(basePath, ".."), fullPath) : file;
|
|
109459
109514
|
const comments = extractFromSource(source3, relPath, tags);
|
|
109460
109515
|
allComments.push(...comments);
|
|
@@ -110996,7 +111051,7 @@ __export(exports_environment_snapshots, {
|
|
|
110996
111051
|
captureEnvironmentSnapshot: () => captureEnvironmentSnapshot
|
|
110997
111052
|
});
|
|
110998
111053
|
import { createHash as createHash18 } from "crypto";
|
|
110999
|
-
import { existsSync as existsSync15, readFileSync as
|
|
111054
|
+
import { existsSync as existsSync15, readFileSync as readFileSync12, statSync as statSync8 } from "fs";
|
|
111000
111055
|
import { hostname as hostname3, platform, arch } from "os";
|
|
111001
111056
|
import { dirname as dirname8, join as join15, resolve as resolve16 } from "path";
|
|
111002
111057
|
import { tmpdir as tmpdir3 } from "os";
|
|
@@ -111010,7 +111065,7 @@ function fileRecord(root, relativePath) {
|
|
|
111010
111065
|
const stat = statSync8(path);
|
|
111011
111066
|
if (!stat.isFile())
|
|
111012
111067
|
return null;
|
|
111013
|
-
const content =
|
|
111068
|
+
const content = readFileSync12(path);
|
|
111014
111069
|
return { path: relativePath, sha256: sha2567(content), size_bytes: content.length };
|
|
111015
111070
|
}
|
|
111016
111071
|
function manifestRecord(root, relativePath) {
|
package/dist/server/openapi.d.ts
CHANGED
|
@@ -53,6 +53,10 @@ export declare function buildV1OpenApiDocument(version?: string): {
|
|
|
53
53
|
readonly type: "string";
|
|
54
54
|
readonly nullable: true;
|
|
55
55
|
};
|
|
56
|
+
readonly created_by: {
|
|
57
|
+
readonly type: "string";
|
|
58
|
+
readonly nullable: true;
|
|
59
|
+
};
|
|
56
60
|
readonly reason: {
|
|
57
61
|
readonly type: "string";
|
|
58
62
|
readonly nullable: true;
|
|
@@ -913,6 +917,9 @@ export declare function buildV1OpenApiDocument(version?: string): {
|
|
|
913
917
|
agent_id: {
|
|
914
918
|
type: string;
|
|
915
919
|
};
|
|
920
|
+
created_by: {
|
|
921
|
+
type: string;
|
|
922
|
+
};
|
|
916
923
|
tags: {
|
|
917
924
|
type: string;
|
|
918
925
|
items: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/server/openapi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/server/openapi.ts"],"names":[],"mappings":"AAobA,wBAAgB,sBAAsB,CAAC,OAAO,SAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAooDnE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-adapter.d.ts","sourceRoot":"","sources":["../../src/storage/postgres-adapter.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAcV,mBAAmB,EAYpB,MAAM,iBAAiB,CAAC;AAczB,OAAO,EAIL,KAAK,wBAAwB,EAE9B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres-adapter.d.ts","sourceRoot":"","sources":["../../src/storage/postgres-adapter.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAcV,mBAAmB,EAYpB,MAAM,iBAAiB,CAAC;AAczB,OAAO,EAIL,KAAK,wBAAwB,EAE9B,MAAM,oBAAoB,CAAC;AA2B5B,MAAM,WAAW,wCAAwC;IACvD,MAAM,EAAE,wBAAwB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAuBD,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,wCAAwC,GAChD,mBAAmB,CA4JrB"}
|