@hasna/todos 0.15.34 → 0.15.35
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/cli/cloud-router.d.ts +1 -1
- package/dist/cli/cloud-router.d.ts.map +1 -1
- package/dist/cli/commands/project-commands.d.ts.map +1 -1
- package/dist/cli/commands/task-commands.d.ts.map +1 -1
- package/dist/cli/index.js +255 -43
- package/dist/contracts.js +86 -4
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/projects.d.ts +23 -0
- package/dist/db/projects.d.ts.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/index.js +209 -39
- package/dist/json-contracts.d.ts.map +1 -1
- package/dist/lib/import-export-bridge.d.ts.map +1 -1
- package/dist/lib/onboarding-fixtures.d.ts.map +1 -1
- package/dist/mcp/index.js +221 -39
- package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
- package/dist/mcp.js +4 -1
- package/dist/project-registration/authority.d.ts.map +1 -1
- package/dist/project-registration/sqlite.d.ts.map +1 -1
- package/dist/project-registration.js +156 -17
- package/dist/registry.js +86 -4
- package/dist/release-provenance.json +5 -5
- package/dist/sdk/v1.generated.d.ts +3 -0
- package/dist/sdk/v1.generated.d.ts.map +1 -1
- package/dist/server/index.js +221 -39
- package/dist/server/openapi.d.ts +13 -0
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/v1.d.ts.map +1 -1
- package/dist/storage.js +128 -12
- package/dist/types/index.d.ts +5 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +4 -1
package/dist/mcp/index.js
CHANGED
|
@@ -2096,6 +2096,10 @@ var init_migrations = __esm(() => {
|
|
|
2096
2096
|
);
|
|
2097
2097
|
INSERT OR IGNORE INTO _migrations (id) VALUES (70);
|
|
2098
2098
|
COMMIT;
|
|
2099
|
+
`,
|
|
2100
|
+
`BEGIN;
|
|
2101
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (71);
|
|
2102
|
+
COMMIT;
|
|
2099
2103
|
`
|
|
2100
2104
|
];
|
|
2101
2105
|
});
|
|
@@ -2769,6 +2773,8 @@ function ensureSchema(db) {
|
|
|
2769
2773
|
ensureColumn("projects", "task_list_id", "TEXT");
|
|
2770
2774
|
ensureColumn("projects", "task_prefix", "TEXT");
|
|
2771
2775
|
ensureColumn("projects", "task_counter", "INTEGER NOT NULL DEFAULT 0");
|
|
2776
|
+
ensureColumn("projects", "parent_id", "TEXT REFERENCES projects(id) ON DELETE SET NULL");
|
|
2777
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_projects_parent_id ON projects(parent_id)");
|
|
2772
2778
|
ensureColumn("tasks", "plan_id", "TEXT REFERENCES plans(id) ON DELETE SET NULL");
|
|
2773
2779
|
ensureColumn("tasks", "task_list_id", "TEXT REFERENCES task_lists(id) ON DELETE SET NULL");
|
|
2774
2780
|
ensureColumn("tasks", "short_id", "TEXT");
|
|
@@ -10005,10 +10011,12 @@ __export(exports_projects, {
|
|
|
10005
10011
|
renameProject: () => renameProject,
|
|
10006
10012
|
removeProjectSource: () => removeProjectSource,
|
|
10007
10013
|
removeMachineLocalPath: () => removeMachineLocalPath,
|
|
10014
|
+
orderProjectsParentFirst: () => orderProjectsParentFirst,
|
|
10008
10015
|
nextTaskShortId: () => nextTaskShortId,
|
|
10009
10016
|
listProjects: () => listProjects,
|
|
10010
10017
|
listProjectSources: () => listProjectSources,
|
|
10011
10018
|
listMachineLocalPaths: () => listMachineLocalPaths,
|
|
10019
|
+
listChildProjects: () => listChildProjects,
|
|
10012
10020
|
getProjectWithSources: () => getProjectWithSources,
|
|
10013
10021
|
getProjectByPath: () => getProjectByPath,
|
|
10014
10022
|
getProject: () => getProject,
|
|
@@ -10016,6 +10024,7 @@ __export(exports_projects, {
|
|
|
10016
10024
|
ensureProject: () => ensureProject,
|
|
10017
10025
|
deleteProject: () => deleteProject,
|
|
10018
10026
|
createProject: () => createProject,
|
|
10027
|
+
assertNotProjectAncestor: () => assertNotProjectAncestor,
|
|
10019
10028
|
addProjectSource: () => addProjectSource
|
|
10020
10029
|
});
|
|
10021
10030
|
function slugify(name) {
|
|
@@ -10047,17 +10056,24 @@ function createProject(input, db) {
|
|
|
10047
10056
|
const id = uuid();
|
|
10048
10057
|
const timestamp2 = now();
|
|
10049
10058
|
const derivedSlug = slugify(input.name);
|
|
10050
|
-
const taskListId = input.task_list_id === undefined ?
|
|
10059
|
+
const taskListId = input.task_list_id === undefined ? derivedSlug : slugify(input.task_list_id);
|
|
10051
10060
|
if (!derivedSlug || !taskListId)
|
|
10052
10061
|
throw new Error("Project name and task-list slug must be non-empty");
|
|
10053
10062
|
const slugConflict = d.query("SELECT id FROM projects WHERE task_list_id = ? LIMIT 1").get(taskListId);
|
|
10054
10063
|
if (slugConflict || !claimCanonicalSlug("project", "global", taskListId, id, d)) {
|
|
10055
10064
|
throw new ResourceConflictError("PROJECT_SLUG_CONFLICT", `Project slug "${taskListId}" already exists`);
|
|
10056
10065
|
}
|
|
10066
|
+
const parentId = input.parent_id ?? null;
|
|
10067
|
+
if (parentId !== null) {
|
|
10068
|
+
const parent = getProject(parentId, d);
|
|
10069
|
+
if (!parent)
|
|
10070
|
+
throw new ProjectNotFoundError(parentId);
|
|
10071
|
+
assertNotProjectAncestor(id, parentId, d);
|
|
10072
|
+
}
|
|
10057
10073
|
const taskPrefix = input.task_prefix || generatePrefix(input.name, d);
|
|
10058
10074
|
const machineId = currentStorageMachineId(d);
|
|
10059
|
-
d.run(`INSERT INTO projects (id, name, path, description, task_list_id, task_prefix, task_counter, created_at, updated_at, machine_id)
|
|
10060
|
-
VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?)`, [id, input.name, input.path, input.description || null, taskListId, taskPrefix, timestamp2, timestamp2, machineId]);
|
|
10075
|
+
d.run(`INSERT INTO projects (id, name, path, description, task_list_id, task_prefix, task_counter, parent_id, created_at, updated_at, machine_id)
|
|
10076
|
+
VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?)`, [id, input.name, input.path, input.description || null, taskListId, taskPrefix, parentId, timestamp2, timestamp2, machineId]);
|
|
10061
10077
|
return getProject(id, d);
|
|
10062
10078
|
})();
|
|
10063
10079
|
}
|
|
@@ -10082,6 +10098,64 @@ function listProjects(db) {
|
|
|
10082
10098
|
const d = db || getDatabase();
|
|
10083
10099
|
return d.query("SELECT * FROM projects ORDER BY name").all();
|
|
10084
10100
|
}
|
|
10101
|
+
function listChildProjects(parentId, db) {
|
|
10102
|
+
const d = db || getDatabase();
|
|
10103
|
+
return d.query("SELECT * FROM projects WHERE parent_id = ? ORDER BY name").all(parentId);
|
|
10104
|
+
}
|
|
10105
|
+
function orderProjectsParentFirst(projects) {
|
|
10106
|
+
const projectId = (project) => {
|
|
10107
|
+
const id = project.id;
|
|
10108
|
+
return typeof id === "string" && id.length > 0 ? id : null;
|
|
10109
|
+
};
|
|
10110
|
+
const parentId = (project) => {
|
|
10111
|
+
const parent = project.parent_id;
|
|
10112
|
+
return parent == null ? null : String(parent);
|
|
10113
|
+
};
|
|
10114
|
+
const byId = new Set;
|
|
10115
|
+
for (const project of projects) {
|
|
10116
|
+
const id = projectId(project);
|
|
10117
|
+
if (id !== null)
|
|
10118
|
+
byId.add(id);
|
|
10119
|
+
}
|
|
10120
|
+
const ordered = [];
|
|
10121
|
+
const emitted = new Set;
|
|
10122
|
+
let remaining = [...projects];
|
|
10123
|
+
let progress = true;
|
|
10124
|
+
while (progress && remaining.length > 0) {
|
|
10125
|
+
progress = false;
|
|
10126
|
+
const deferred = [];
|
|
10127
|
+
for (const project of remaining) {
|
|
10128
|
+
const parent = parentId(project);
|
|
10129
|
+
if (parent === null || emitted.has(parent) || !byId.has(parent)) {
|
|
10130
|
+
ordered.push(project);
|
|
10131
|
+
const id = projectId(project);
|
|
10132
|
+
if (id !== null)
|
|
10133
|
+
emitted.add(id);
|
|
10134
|
+
progress = true;
|
|
10135
|
+
} else {
|
|
10136
|
+
deferred.push(project);
|
|
10137
|
+
}
|
|
10138
|
+
}
|
|
10139
|
+
remaining = deferred;
|
|
10140
|
+
}
|
|
10141
|
+
ordered.push(...remaining);
|
|
10142
|
+
return ordered;
|
|
10143
|
+
}
|
|
10144
|
+
function assertNotProjectAncestor(projectId, ancestorId, db) {
|
|
10145
|
+
const d = db || getDatabase();
|
|
10146
|
+
let cursor = ancestorId;
|
|
10147
|
+
const seen = new Set;
|
|
10148
|
+
while (cursor !== null) {
|
|
10149
|
+
if (cursor === projectId) {
|
|
10150
|
+
throw new ResourceConflictError("PROJECT_PARENT_CYCLE", `Project "${projectId}" cannot be placed under its own descendant`);
|
|
10151
|
+
}
|
|
10152
|
+
if (seen.has(cursor))
|
|
10153
|
+
break;
|
|
10154
|
+
seen.add(cursor);
|
|
10155
|
+
const row = d.query("SELECT parent_id FROM projects WHERE id = ?").get(cursor);
|
|
10156
|
+
cursor = row?.parent_id ?? null;
|
|
10157
|
+
}
|
|
10158
|
+
}
|
|
10085
10159
|
function updateProject(id, input, db) {
|
|
10086
10160
|
const d = db || getDatabase();
|
|
10087
10161
|
const project = getProject(id, d);
|
|
@@ -10104,6 +10178,16 @@ function updateProject(id, input, db) {
|
|
|
10104
10178
|
sets.push("path = ?");
|
|
10105
10179
|
params.push(input.path);
|
|
10106
10180
|
}
|
|
10181
|
+
if (input.parent_id !== undefined) {
|
|
10182
|
+
if (input.parent_id !== null) {
|
|
10183
|
+
const parent = getProject(input.parent_id, d);
|
|
10184
|
+
if (!parent)
|
|
10185
|
+
throw new ProjectNotFoundError(input.parent_id);
|
|
10186
|
+
assertNotProjectAncestor(id, input.parent_id, d);
|
|
10187
|
+
}
|
|
10188
|
+
sets.push("parent_id = ?");
|
|
10189
|
+
params.push(input.parent_id);
|
|
10190
|
+
}
|
|
10107
10191
|
params.push(id);
|
|
10108
10192
|
d.run(`UPDATE projects SET ${sets.join(", ")} WHERE id = ?`, params);
|
|
10109
10193
|
return getProject(id, d);
|
|
@@ -21265,7 +21349,31 @@ function classifyRemoteRequestError(baseUrl, route, error) {
|
|
|
21265
21349
|
}
|
|
21266
21350
|
throw error;
|
|
21267
21351
|
}
|
|
21268
|
-
function
|
|
21352
|
+
function withBoundedRemoteRequest(options, requestTimeoutMs, run) {
|
|
21353
|
+
const controller = new AbortController;
|
|
21354
|
+
const onBaseAbort = () => controller.abort();
|
|
21355
|
+
if (options?.signal) {
|
|
21356
|
+
if (options.signal.aborted)
|
|
21357
|
+
controller.abort();
|
|
21358
|
+
else
|
|
21359
|
+
options.signal.addEventListener("abort", onBaseAbort, { once: true });
|
|
21360
|
+
}
|
|
21361
|
+
let timer;
|
|
21362
|
+
const deadline = new Promise((_, reject) => {
|
|
21363
|
+
timer = setTimeout(() => {
|
|
21364
|
+
controller.abort();
|
|
21365
|
+
reject(new DOMException(`Todos remote request exceeded the ${requestTimeoutMs}ms bounded request timeout`, "AbortError"));
|
|
21366
|
+
}, requestTimeoutMs);
|
|
21367
|
+
});
|
|
21368
|
+
const attempt = run({ ...options, signal: controller.signal });
|
|
21369
|
+
attempt.catch(() => {});
|
|
21370
|
+
return Promise.race([attempt, deadline]).finally(() => {
|
|
21371
|
+
if (timer)
|
|
21372
|
+
clearTimeout(timer);
|
|
21373
|
+
options?.signal?.removeEventListener("abort", onBaseAbort);
|
|
21374
|
+
});
|
|
21375
|
+
}
|
|
21376
|
+
function protectRemoteClient(client, requestTimeoutMs) {
|
|
21269
21377
|
const baseUrl = remoteAuthorityBase(client);
|
|
21270
21378
|
const protect = async (route, request) => {
|
|
21271
21379
|
try {
|
|
@@ -21274,25 +21382,26 @@ function protectRemoteClient(client) {
|
|
|
21274
21382
|
return classifyRemoteRequestError(baseUrl, route, error);
|
|
21275
21383
|
}
|
|
21276
21384
|
};
|
|
21385
|
+
const bounded = (options, run) => withBoundedRemoteRequest(options, requestTimeoutMs, run);
|
|
21277
21386
|
const transport = client.transport;
|
|
21278
21387
|
const protectedTransport = {
|
|
21279
21388
|
baseUrl: transport.baseUrl,
|
|
21280
|
-
request: (method, path, body, options) => protect(path, () => transport.request(method, path, body,
|
|
21281
|
-
get: (path, options) => protect(path, () => transport.get(path,
|
|
21282
|
-
post: (path, body, options) => protect(path, () => transport.post(path, body,
|
|
21283
|
-
put: (path, body, options) => protect(path, () => transport.put(path, body,
|
|
21284
|
-
patch: (path, body, options) => protect(path, () => transport.patch(path, body,
|
|
21285
|
-
del: (path, body, options) => protect(path, () => transport.del(path, body,
|
|
21389
|
+
request: (method, path, body, options) => protect(path, () => bounded(options, (opts) => transport.request(method, path, body, opts))),
|
|
21390
|
+
get: (path, options) => protect(path, () => bounded(options, (opts) => transport.get(path, opts))),
|
|
21391
|
+
post: (path, body, options) => protect(path, () => bounded(options, (opts) => transport.post(path, body, opts))),
|
|
21392
|
+
put: (path, body, options) => protect(path, () => bounded(options, (opts) => transport.put(path, body, opts))),
|
|
21393
|
+
patch: (path, body, options) => protect(path, () => bounded(options, (opts) => transport.patch(path, body, opts))),
|
|
21394
|
+
del: (path, body, options) => protect(path, () => bounded(options, (opts) => transport.del(path, body, opts)))
|
|
21286
21395
|
};
|
|
21287
21396
|
return {
|
|
21288
21397
|
name: client.name,
|
|
21289
21398
|
baseUrl: client.baseUrl,
|
|
21290
21399
|
transport: protectedTransport,
|
|
21291
|
-
list: (resource, options) => protect(`/${resource}`, () => client.list(resource,
|
|
21292
|
-
get: (resource, id, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => client.get(resource, id,
|
|
21293
|
-
create: (resource, body, options) => protect(`/${resource}`, () => client.create(resource, body,
|
|
21294
|
-
update: (resource, id, patch, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => client.update(resource, id, patch,
|
|
21295
|
-
delete: (resource, id, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => client.delete(resource, id,
|
|
21400
|
+
list: (resource, options) => protect(`/${resource}`, () => bounded(options, (opts) => client.list(resource, opts))),
|
|
21401
|
+
get: (resource, id, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => bounded(options, (opts) => client.get(resource, id, opts))),
|
|
21402
|
+
create: (resource, body, options) => protect(`/${resource}`, () => bounded(options, (opts) => client.create(resource, body, opts))),
|
|
21403
|
+
update: (resource, id, patch, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => bounded(options, (opts) => client.update(resource, id, patch, opts))),
|
|
21404
|
+
delete: (resource, id, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => bounded(options, (opts) => client.delete(resource, id, opts)))
|
|
21296
21405
|
};
|
|
21297
21406
|
}
|
|
21298
21407
|
function remoteAuthorityBase(client) {
|
|
@@ -21313,17 +21422,18 @@ async function requiredRemoteRoute(client, route, request, recognized404Codes =
|
|
|
21313
21422
|
throw error;
|
|
21314
21423
|
}
|
|
21315
21424
|
}
|
|
21316
|
-
function getTodosCloudClient(env = process.env) {
|
|
21425
|
+
function getTodosCloudClient(env = process.env, requestTimeoutMs = REMOTE_REQUEST_TIMEOUT_MS) {
|
|
21317
21426
|
if (requestedTransport(env) !== "http")
|
|
21318
21427
|
return null;
|
|
21319
21428
|
const resolved = resolveStorageClient("todos", requireTodosRemoteAuthorityEnv(env), {
|
|
21320
|
-
fetchImpl: (input, init) => globalThis.fetch(input, { ...init, redirect: "manual" })
|
|
21429
|
+
fetchImpl: (input, init) => globalThis.fetch(input, { ...init, redirect: "manual" }),
|
|
21430
|
+
timeoutMs: requestTimeoutMs
|
|
21321
21431
|
});
|
|
21322
21432
|
if (resolved.transport === "cloud-http")
|
|
21323
|
-
return protectRemoteClient(resolved.client);
|
|
21433
|
+
return protectRemoteClient(resolved.client, requestTimeoutMs);
|
|
21324
21434
|
const transportName = resolved.transport;
|
|
21325
21435
|
if (transportName === "http")
|
|
21326
|
-
return protectRemoteClient(resolved.client);
|
|
21436
|
+
return protectRemoteClient(resolved.client, requestTimeoutMs);
|
|
21327
21437
|
return null;
|
|
21328
21438
|
}
|
|
21329
21439
|
function unwrapTask(raw) {
|
|
@@ -21795,7 +21905,7 @@ async function cloudResolveTaskListRef(client, ref, projectId) {
|
|
|
21795
21905
|
return input.toLowerCase();
|
|
21796
21906
|
return (await cloudResolveTaskList(client, ref, projectId)).id;
|
|
21797
21907
|
}
|
|
21798
|
-
var UUID_RE, completionCapabilityCache, retryCapabilityCache, taskCreatorCapabilityCache, gitRefCapabilityCache, remoteCommandCapabilityCache, LEGACY_STORAGE_MODE_KEYS, PRIORITY_RANK, listTagsCapabilityCache;
|
|
21908
|
+
var UUID_RE, completionCapabilityCache, retryCapabilityCache, taskCreatorCapabilityCache, gitRefCapabilityCache, remoteCommandCapabilityCache, LEGACY_STORAGE_MODE_KEYS, REMOTE_REQUEST_TIMEOUT_MS = 1e4, PRIORITY_RANK, listTagsCapabilityCache;
|
|
21799
21909
|
var init_cloud_router = __esm(() => {
|
|
21800
21910
|
init_types();
|
|
21801
21911
|
init_redaction();
|
|
@@ -22322,7 +22432,7 @@ function addSourceOnce(projectId, type, name, uri, metadata, db) {
|
|
|
22322
22432
|
function bootstrapProject(options = {}, db) {
|
|
22323
22433
|
const d = db || getDatabase();
|
|
22324
22434
|
const discovery = discoverProjectWorkspace(options.path);
|
|
22325
|
-
const taskListSlug = options.taskListSlug ||
|
|
22435
|
+
const taskListSlug = options.taskListSlug || slugify(options.name || discovery.projectName);
|
|
22326
22436
|
if (options.dryRun) {
|
|
22327
22437
|
return {
|
|
22328
22438
|
dryRun: true,
|
|
@@ -28449,6 +28559,7 @@ function registerTaskProjectTools(server, ctx) {
|
|
|
28449
28559
|
name: exports_external.string().describe("Project name"),
|
|
28450
28560
|
path: exports_external.string().describe("Unique filesystem path for the project"),
|
|
28451
28561
|
description: exports_external.string().optional(),
|
|
28562
|
+
parent_id: exports_external.string().optional().describe("Optional parent project id to create this as a sub-project"),
|
|
28452
28563
|
status: exports_external.enum(["active", "completed", "on_hold", "archived"]).optional(),
|
|
28453
28564
|
short_id: exports_external.string().nullable().optional().describe("Short ID (auto-generated if omitted)"),
|
|
28454
28565
|
metadata: exports_external.record(exports_external.unknown()).optional()
|
|
@@ -35931,7 +36042,7 @@ var package_default;
|
|
|
35931
36042
|
var init_package = __esm(() => {
|
|
35932
36043
|
package_default = {
|
|
35933
36044
|
name: "@hasna/todos",
|
|
35934
|
-
version: "0.15.
|
|
36045
|
+
version: "0.15.35",
|
|
35935
36046
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
35936
36047
|
type: "module",
|
|
35937
36048
|
main: "dist/index.js",
|
|
@@ -36006,6 +36117,9 @@ var init_package = __esm(() => {
|
|
|
36006
36117
|
"verify:release-review": "bun run scripts/verify-npm-release-agent-review.ts",
|
|
36007
36118
|
"verify:attested-container-candidate": "bun run scripts/attested-container-candidate.ts verify",
|
|
36008
36119
|
"test:attested-container-candidate": "bun test scripts/attested-container-candidate.test.ts",
|
|
36120
|
+
"emit:iapp-deployment-compatibility-vector": "bun run scripts/attested-container-compatibility-vector.ts emit",
|
|
36121
|
+
"verify:iapp-deployment-compatibility-vector": "bun run scripts/attested-container-compatibility-vector.ts verify",
|
|
36122
|
+
"test:attested-container-compatibility-vector": "bun test scripts/attested-container-compatibility-vector.test.ts",
|
|
36009
36123
|
"issue:release-review": "bun run scripts/issue-npm-release-agent-review.ts",
|
|
36010
36124
|
prepublishOnly: "bun run scripts/verify-public-release.ts --mode=publish",
|
|
36011
36125
|
postinstall: "mkdir -p $HOME/.hasna/todos $HOME/.hasna/todos/training 2>/dev/null || true"
|
|
@@ -37045,6 +37159,7 @@ function createAgentProjectDemoBundle() {
|
|
|
37045
37159
|
task_list_id: ids.list,
|
|
37046
37160
|
task_prefix: "DEMO",
|
|
37047
37161
|
task_counter: 4,
|
|
37162
|
+
parent_id: null,
|
|
37048
37163
|
created_at: createdAt,
|
|
37049
37164
|
updated_at: completedAt
|
|
37050
37165
|
});
|
|
@@ -45611,7 +45726,7 @@ function importSqliteTodosStorageSnapshot(snapshot, db) {
|
|
|
45611
45726
|
}
|
|
45612
45727
|
}
|
|
45613
45728
|
};
|
|
45614
|
-
applyRows("projects", "projects", PROJECT_COLUMNS, snapshot.projects, "updated_at");
|
|
45729
|
+
applyRows("projects", "projects", PROJECT_COLUMNS, orderProjectsParentFirst(snapshot.projects), "updated_at");
|
|
45615
45730
|
applyRows("project_machine_paths", "project_machine_paths", PROJECT_MACHINE_PATH_COLUMNS, snapshot.projectMachinePaths ?? [], "updated_at");
|
|
45616
45731
|
applyRows("agents", "agents", AGENT_COLUMNS, snapshot.agents, "last_seen_at");
|
|
45617
45732
|
applyRows("task_lists", "task_lists", TASK_LIST_COLUMNS, snapshot.taskLists, "updated_at");
|
|
@@ -45842,6 +45957,7 @@ var init_sqlite_snapshot = __esm(() => {
|
|
|
45842
45957
|
"task_list_id",
|
|
45843
45958
|
"task_prefix",
|
|
45844
45959
|
"task_counter",
|
|
45960
|
+
"parent_id",
|
|
45845
45961
|
"created_at",
|
|
45846
45962
|
"updated_at",
|
|
45847
45963
|
"machine_id",
|
|
@@ -47659,8 +47775,12 @@ class PostgresJsonRecordStore {
|
|
|
47659
47775
|
OR ($11::text <> $2
|
|
47660
47776
|
AND NOT EXISTS (SELECT 1 FROM parent_chain WHERE object_id = $2)
|
|
47661
47777
|
AND NOT EXISTS (SELECT 1 FROM parent_chain WHERE cycle))) AS parent_acyclic,
|
|
47662
|
-
(SELECT
|
|
47663
|
-
|
|
47778
|
+
(COALESCE((SELECT payload->>'plan_id' FROM locked_task), '')
|
|
47779
|
+
IS DISTINCT FROM COALESCE($3::jsonb->>'plan_id', '')) AS membership_changed,
|
|
47780
|
+
(NOT (COALESCE((SELECT payload->>'plan_id' FROM locked_task), '')
|
|
47781
|
+
IS DISTINCT FROM COALESCE($3::jsonb->>'plan_id', ''))
|
|
47782
|
+
OR $8::text IS NULL
|
|
47783
|
+
OR EXISTS (SELECT 1 FROM locked_plans WHERE object_id = $8)) AS target_plan_found,
|
|
47664
47784
|
(SELECT payload->>'project_id' FROM locked_plans WHERE object_id = $8) AS target_project_id
|
|
47665
47785
|
), guarded AS (
|
|
47666
47786
|
SELECT
|
|
@@ -47683,7 +47803,6 @@ class PostgresJsonRecordStore {
|
|
|
47683
47803
|
AND guarded.version_matches
|
|
47684
47804
|
AND guarded.parent_found
|
|
47685
47805
|
AND guarded.parent_acyclic
|
|
47686
|
-
AND guarded.all_plans_found
|
|
47687
47806
|
AND guarded.target_plan_found
|
|
47688
47807
|
AND NOT guarded.project_conflict
|
|
47689
47808
|
ON CONFLICT (service, object_type, object_id) DO UPDATE SET
|
|
@@ -47699,7 +47818,7 @@ class PostgresJsonRecordStore {
|
|
|
47699
47818
|
RETURNING payload
|
|
47700
47819
|
)
|
|
47701
47820
|
SELECT guarded.task_found, guarded.version_matches, guarded.parent_found, guarded.parent_acyclic,
|
|
47702
|
-
guarded.
|
|
47821
|
+
guarded.membership_changed, guarded.target_plan_found, guarded.project_conflict,
|
|
47703
47822
|
(SELECT payload FROM stored) AS payload,
|
|
47704
47823
|
(SELECT payload FROM locked_task) AS current_payload
|
|
47705
47824
|
FROM guarded`, [
|
|
@@ -47731,7 +47850,7 @@ class PostgresJsonRecordStore {
|
|
|
47731
47850
|
if (parentGuard && !row?.parent_acyclic && parentGuard.parentId) {
|
|
47732
47851
|
throw new ResourceConflictError("TASK_PARENT_CYCLE", `TASK_PARENT_CYCLE: assigning parent ${parentGuard.parentId} to task ${value.id} would create or retain a parent cycle`);
|
|
47733
47852
|
}
|
|
47734
|
-
if (!row?.
|
|
47853
|
+
if (!row?.target_plan_found) {
|
|
47735
47854
|
throw new PlanProjectLinkError("PLAN_PROJECT_LINK_PLAN_NOT_FOUND", `Plan membership changed through a missing plan: ${targetPlanId ?? planIds.join(", ")}`, { plan_ids: planIds, target_plan_id: targetPlanId });
|
|
47736
47855
|
}
|
|
47737
47856
|
if (row.project_conflict) {
|
|
@@ -48940,17 +49059,26 @@ async function getChangedSince(since, filters, store) {
|
|
|
48940
49059
|
async function createProject2(input, store, context) {
|
|
48941
49060
|
const timestamp4 = new Date().toISOString();
|
|
48942
49061
|
const derivedSlug = slugifyRaw(input.name);
|
|
48943
|
-
const taskListId = input.task_list_id === undefined ?
|
|
49062
|
+
const taskListId = input.task_list_id === undefined ? derivedSlug : slugifyRaw(input.task_list_id);
|
|
48944
49063
|
if (!derivedSlug || !taskListId)
|
|
48945
49064
|
throw new Error("Project name and task-list slug must be non-empty");
|
|
49065
|
+
const parentId = input.parent_id ?? null;
|
|
49066
|
+
const id = randomUUID4();
|
|
49067
|
+
if (parentId !== null) {
|
|
49068
|
+
const parent = await store.get("projects", parentId);
|
|
49069
|
+
if (!parent)
|
|
49070
|
+
throw new ProjectNotFoundError(parentId);
|
|
49071
|
+
await assertNotProjectAncestorPostgres(id, parentId, store);
|
|
49072
|
+
}
|
|
48946
49073
|
const project = {
|
|
48947
|
-
id
|
|
49074
|
+
id,
|
|
48948
49075
|
name: input.name,
|
|
48949
49076
|
path: input.path,
|
|
48950
49077
|
description: input.description ?? null,
|
|
48951
49078
|
task_list_id: taskListId,
|
|
48952
49079
|
task_prefix: input.task_prefix ?? await generateProjectPrefix(input.name, store),
|
|
48953
49080
|
task_counter: 0,
|
|
49081
|
+
parent_id: parentId,
|
|
48954
49082
|
created_at: timestamp4,
|
|
48955
49083
|
updated_at: timestamp4,
|
|
48956
49084
|
machine_id: store.machineId(context),
|
|
@@ -48958,12 +49086,38 @@ async function createProject2(input, store, context) {
|
|
|
48958
49086
|
};
|
|
48959
49087
|
return store.upsert("projects", project, context);
|
|
48960
49088
|
}
|
|
49089
|
+
async function assertNotProjectAncestorPostgres(projectId, candidateParentId, store) {
|
|
49090
|
+
const all = await store.list("projects");
|
|
49091
|
+
const byId = new Map(all.map((project) => [project.id, project.parent_id ?? null]));
|
|
49092
|
+
let cursor = candidateParentId;
|
|
49093
|
+
const seen = new Set;
|
|
49094
|
+
while (cursor !== null) {
|
|
49095
|
+
if (cursor === projectId) {
|
|
49096
|
+
throw new ResourceConflictError("PROJECT_PARENT_CYCLE", `Project "${projectId}" cannot be placed under its own descendant`);
|
|
49097
|
+
}
|
|
49098
|
+
if (seen.has(cursor))
|
|
49099
|
+
break;
|
|
49100
|
+
seen.add(cursor);
|
|
49101
|
+
cursor = byId.get(cursor) ?? null;
|
|
49102
|
+
}
|
|
49103
|
+
}
|
|
48961
49104
|
async function updateProject2(id, input, store) {
|
|
48962
49105
|
if ("task_list_id" in input) {
|
|
48963
49106
|
throw new Error("task_list_id cannot be changed by updateProject; use renameProject for an atomic canonical rename");
|
|
48964
49107
|
}
|
|
48965
49108
|
const project = await requireRecord("projects", id, store);
|
|
48966
|
-
|
|
49109
|
+
if (input.parent_id !== undefined && input.parent_id !== null) {
|
|
49110
|
+
const parent = await store.get("projects", input.parent_id);
|
|
49111
|
+
if (!parent)
|
|
49112
|
+
throw new ProjectNotFoundError(input.parent_id);
|
|
49113
|
+
await assertNotProjectAncestorPostgres(id, input.parent_id, store);
|
|
49114
|
+
}
|
|
49115
|
+
const updated = {
|
|
49116
|
+
...project,
|
|
49117
|
+
...definedPatch(input),
|
|
49118
|
+
...input.parent_id !== undefined ? { parent_id: input.parent_id } : {},
|
|
49119
|
+
updated_at: new Date().toISOString()
|
|
49120
|
+
};
|
|
48967
49121
|
return store.upsert("projects", updated);
|
|
48968
49122
|
}
|
|
48969
49123
|
async function createPlan2(input, store, context) {
|
|
@@ -50834,7 +50988,7 @@ class StagedSqliteTodosProjectRegistrationTransaction {
|
|
|
50834
50988
|
}
|
|
50835
50989
|
async createProject(input) {
|
|
50836
50990
|
const derivedSlug = normalizeSlug(input.name);
|
|
50837
|
-
const taskListId = input.task_list_id === undefined ?
|
|
50991
|
+
const taskListId = input.task_list_id === undefined ? derivedSlug : normalizeSlug(input.task_list_id);
|
|
50838
50992
|
if (!derivedSlug || !taskListId) {
|
|
50839
50993
|
throw new Error("Project name and task-list slug must be non-empty");
|
|
50840
50994
|
}
|
|
@@ -50846,6 +51000,7 @@ class StagedSqliteTodosProjectRegistrationTransaction {
|
|
|
50846
51000
|
task_list_id: taskListId,
|
|
50847
51001
|
task_prefix: input.task_prefix ?? this.availableProjectPrefix(input.name),
|
|
50848
51002
|
task_counter: 0,
|
|
51003
|
+
parent_id: input.parent_id ?? null,
|
|
50849
51004
|
created_at: now(),
|
|
50850
51005
|
updated_at: now(),
|
|
50851
51006
|
machine_id: currentStorageMachineId(this.db)
|
|
@@ -50856,14 +51011,15 @@ class StagedSqliteTodosProjectRegistrationTransaction {
|
|
|
50856
51011
|
try {
|
|
50857
51012
|
const result = this.db.run(`INSERT INTO projects (
|
|
50858
51013
|
id, name, path, description, task_list_id, task_prefix,
|
|
50859
|
-
task_counter, created_at, updated_at, machine_id
|
|
50860
|
-
) VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?)`, [
|
|
51014
|
+
task_counter, parent_id, created_at, updated_at, machine_id
|
|
51015
|
+
) VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?)`, [
|
|
50861
51016
|
project.id,
|
|
50862
51017
|
project.name,
|
|
50863
51018
|
project.path,
|
|
50864
51019
|
project.description,
|
|
50865
51020
|
project.task_list_id,
|
|
50866
51021
|
project.task_prefix,
|
|
51022
|
+
project.parent_id,
|
|
50867
51023
|
project.created_at,
|
|
50868
51024
|
project.updated_at,
|
|
50869
51025
|
project.machine_id ?? null
|
|
@@ -51147,7 +51303,10 @@ function taskListSlug(projectSlug) {
|
|
|
51147
51303
|
if (!slug || slug !== projectSlug) {
|
|
51148
51304
|
throw new TodosProjectRegistrationError("TODOS_PROJECT_REGISTRATION_INVALID_INPUT", "project_slug must be canonical kebab-case");
|
|
51149
51305
|
}
|
|
51150
|
-
return
|
|
51306
|
+
return slug;
|
|
51307
|
+
}
|
|
51308
|
+
function legacyTaskListSlug(projectSlug) {
|
|
51309
|
+
return `todos-${normalizeSlug(projectSlug)}`;
|
|
51151
51310
|
}
|
|
51152
51311
|
function deterministicTaskPrefix(projectSlug) {
|
|
51153
51312
|
const letters = projectSlug.replace(/[^a-z0-9]/gi, "").toUpperCase();
|
|
@@ -51666,6 +51825,12 @@ class PackageOwnedTodosProjectRegistrationAuthority {
|
|
|
51666
51825
|
created_by_operation: false
|
|
51667
51826
|
};
|
|
51668
51827
|
}
|
|
51828
|
+
if (request.bind_existing === true && conflict2.path === path && conflict2.task_list_id === legacyTaskListSlug(request.project_slug)) {
|
|
51829
|
+
return {
|
|
51830
|
+
record: boundExistingProjectRecord(conflict2),
|
|
51831
|
+
created_by_operation: false
|
|
51832
|
+
};
|
|
51833
|
+
}
|
|
51669
51834
|
return this.terminalFor(transaction, request, normalizedCallDigest(request), "target_already_exists", { targetId: conflict2.id });
|
|
51670
51835
|
}
|
|
51671
51836
|
await this.fault("before_object_write", request);
|
|
@@ -51702,6 +51867,15 @@ class PackageOwnedTodosProjectRegistrationAuthority {
|
|
|
51702
51867
|
}
|
|
51703
51868
|
return this.terminalFor(transaction, request, normalizedCallDigest(request), "target_already_exists", { targetId: conflict.id });
|
|
51704
51869
|
}
|
|
51870
|
+
if (request.bind_existing === true) {
|
|
51871
|
+
const legacy = await transaction.findTaskListConflict(todosProjectId, legacyTaskListSlug(request.project_slug));
|
|
51872
|
+
if (legacy && legacy.project_id === todosProjectId) {
|
|
51873
|
+
return {
|
|
51874
|
+
record: boundExistingTaskListRecord(legacy),
|
|
51875
|
+
created_by_operation: false
|
|
51876
|
+
};
|
|
51877
|
+
}
|
|
51878
|
+
}
|
|
51705
51879
|
await this.fault("before_object_write", request);
|
|
51706
51880
|
const taskList = await transaction.createTaskList({
|
|
51707
51881
|
name: request.project_name,
|
|
@@ -55631,7 +55805,8 @@ function buildV1OpenApiDocument(version = getPackageVersion()) {
|
|
|
55631
55805
|
path: { type: "string", minLength: 1 },
|
|
55632
55806
|
description: { type: "string" },
|
|
55633
55807
|
task_list_id: { type: "string", minLength: 1, pattern: "^[a-z0-9]+(?:-[a-z0-9]+)*$" },
|
|
55634
|
-
task_prefix: { type: "string", minLength: 1 }
|
|
55808
|
+
task_prefix: { type: "string", minLength: 1 },
|
|
55809
|
+
parent_id: { type: "string", minLength: 1 }
|
|
55635
55810
|
}
|
|
55636
55811
|
},
|
|
55637
55812
|
UpdateProjectInput: {
|
|
@@ -55641,7 +55816,8 @@ function buildV1OpenApiDocument(version = getPackageVersion()) {
|
|
|
55641
55816
|
properties: {
|
|
55642
55817
|
name: { type: "string", minLength: 1 },
|
|
55643
55818
|
path: { type: "string", minLength: 1 },
|
|
55644
|
-
description: { type: "string", nullable: true }
|
|
55819
|
+
description: { type: "string", nullable: true },
|
|
55820
|
+
parent_id: { type: "string", minLength: 1, nullable: true }
|
|
55645
55821
|
}
|
|
55646
55822
|
},
|
|
55647
55823
|
RenameProjectInput: {
|
|
@@ -57940,6 +58116,7 @@ var init_openapi = __esm(() => {
|
|
|
57940
58116
|
task_list_id: { type: "string", nullable: true },
|
|
57941
58117
|
task_prefix: { type: "string", nullable: true },
|
|
57942
58118
|
task_counter: { type: "number" },
|
|
58119
|
+
parent_id: { type: "string", nullable: true },
|
|
57943
58120
|
created_at: { type: "string" },
|
|
57944
58121
|
updated_at: { type: "string" }
|
|
57945
58122
|
}
|
|
@@ -59357,7 +59534,7 @@ function validateProjectPatch(value) {
|
|
|
59357
59534
|
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
59358
59535
|
return { ok: false, message: "project patch must be an object" };
|
|
59359
59536
|
const body2 = value;
|
|
59360
|
-
const allowed = new Set(["name", "path", "description"]);
|
|
59537
|
+
const allowed = new Set(["name", "path", "description", "parent_id"]);
|
|
59361
59538
|
const unknown = Object.keys(body2).find((key2) => !allowed.has(key2));
|
|
59362
59539
|
if (unknown)
|
|
59363
59540
|
return { ok: false, message: `unknown project field: ${unknown}` };
|
|
@@ -59369,13 +59546,15 @@ function validateProjectPatch(value) {
|
|
|
59369
59546
|
return { ok: false, message: "path must be a non-empty string" };
|
|
59370
59547
|
if (body2["description"] !== undefined && body2["description"] !== null && typeof body2["description"] !== "string")
|
|
59371
59548
|
return { ok: false, message: "description must be a string or null" };
|
|
59549
|
+
if (body2["parent_id"] !== undefined && body2["parent_id"] !== null && (typeof body2["parent_id"] !== "string" || !body2["parent_id"].trim()))
|
|
59550
|
+
return { ok: false, message: "parent_id must be a string or null" };
|
|
59372
59551
|
return { ok: true, patch: body2 };
|
|
59373
59552
|
}
|
|
59374
59553
|
function validateProjectCreate(value) {
|
|
59375
59554
|
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
59376
59555
|
return { ok: false, message: "project body must be an object" };
|
|
59377
59556
|
const body2 = value;
|
|
59378
|
-
const allowed = new Set(["name", "path", "description", "task_list_id", "task_prefix"]);
|
|
59557
|
+
const allowed = new Set(["name", "path", "description", "task_list_id", "task_prefix", "parent_id"]);
|
|
59379
59558
|
const unknown = Object.keys(body2).find((key2) => !allowed.has(key2));
|
|
59380
59559
|
if (unknown)
|
|
59381
59560
|
return { ok: false, message: `unknown project field: ${unknown}` };
|
|
@@ -59393,6 +59572,9 @@ function validateProjectCreate(value) {
|
|
|
59393
59572
|
if (body2["task_prefix"] !== undefined && (typeof body2["task_prefix"] !== "string" || !body2["task_prefix"].trim())) {
|
|
59394
59573
|
return { ok: false, message: "task_prefix must be a non-empty string" };
|
|
59395
59574
|
}
|
|
59575
|
+
if (body2["parent_id"] !== undefined && (typeof body2["parent_id"] !== "string" || !body2["parent_id"].trim())) {
|
|
59576
|
+
return { ok: false, message: "parent_id must be a non-empty string" };
|
|
59577
|
+
}
|
|
59396
59578
|
return { ok: true, input: body2 };
|
|
59397
59579
|
}
|
|
59398
59580
|
function validatePlanCreate(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-project-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/task-project-tools.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AA2JjD,UAAU,kBAAkB;IAC1B,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACzD,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACxC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACnC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACvE,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAC3F;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"task-project-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/task-project-tools.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AA2JjD,UAAU,kBAAkB;IAC1B,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACzD,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACxC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACnC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACvE,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAC3F;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,kBAAkB,QA07FlF"}
|
package/dist/mcp.js
CHANGED
|
@@ -41,7 +41,7 @@ var __require = import.meta.require;
|
|
|
41
41
|
// package.json
|
|
42
42
|
var package_default = {
|
|
43
43
|
name: "@hasna/todos",
|
|
44
|
-
version: "0.15.
|
|
44
|
+
version: "0.15.35",
|
|
45
45
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
46
46
|
type: "module",
|
|
47
47
|
main: "dist/index.js",
|
|
@@ -116,6 +116,9 @@ var package_default = {
|
|
|
116
116
|
"verify:release-review": "bun run scripts/verify-npm-release-agent-review.ts",
|
|
117
117
|
"verify:attested-container-candidate": "bun run scripts/attested-container-candidate.ts verify",
|
|
118
118
|
"test:attested-container-candidate": "bun test scripts/attested-container-candidate.test.ts",
|
|
119
|
+
"emit:iapp-deployment-compatibility-vector": "bun run scripts/attested-container-compatibility-vector.ts emit",
|
|
120
|
+
"verify:iapp-deployment-compatibility-vector": "bun run scripts/attested-container-compatibility-vector.ts verify",
|
|
121
|
+
"test:attested-container-compatibility-vector": "bun test scripts/attested-container-compatibility-vector.test.ts",
|
|
119
122
|
"issue:release-review": "bun run scripts/issue-npm-release-agent-review.ts",
|
|
120
123
|
prepublishOnly: "bun run scripts/verify-public-release.ts --mode=publish",
|
|
121
124
|
postinstall: "mkdir -p $HOME/.hasna/todos $HOME/.hasna/todos/training 2>/dev/null || true"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../../src/project-registration/authority.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,KAAK,EAEV,+BAA+B,EAMhC,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,8CAA8C,EACnD,KAAK,sCAAsC,EAC5C,MAAM,eAAe,CAAC;AAEvB,OAAO,EAIL,KAAK,iCAAiC,EACtC,KAAK,wCAAwC,EAE7C,KAAK,kCAAkC,EACvC,KAAK,iCAAiC,EAEtC,KAAK,2CAA2C,EAChD,KAAK,qCAAqC,EAC1C,KAAK,oCAAoC,EACzC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,oCAAoC,EACzC,KAAK,2CAA2C,EAChD,KAAK,wCAAwC,EAE7C,KAAK,wBAAwB,EAC7B,KAAK,+BAA+B,EACrC,MAAM,YAAY,CAAC;AAuBpB,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEvE;AAaD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIrE;AAED,wBAAgB,4CAA4C,CAAC,KAAK,EAAE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,iCAAiC,CAAC;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,MAAM,CAKT;
|
|
1
|
+
{"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../../src/project-registration/authority.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,KAAK,EAEV,+BAA+B,EAMhC,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,8CAA8C,EACnD,KAAK,sCAAsC,EAC5C,MAAM,eAAe,CAAC;AAEvB,OAAO,EAIL,KAAK,iCAAiC,EACtC,KAAK,wCAAwC,EAE7C,KAAK,kCAAkC,EACvC,KAAK,iCAAiC,EAEtC,KAAK,2CAA2C,EAChD,KAAK,qCAAqC,EAC1C,KAAK,oCAAoC,EACzC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,oCAAoC,EACzC,KAAK,2CAA2C,EAChD,KAAK,wCAAwC,EAE7C,KAAK,wBAAwB,EAC7B,KAAK,+BAA+B,EACrC,MAAM,YAAY,CAAC;AAuBpB,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEvE;AAaD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIrE;AAED,wBAAgB,4CAA4C,CAAC,KAAK,EAAE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,iCAAiC,CAAC;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,MAAM,CAKT;AAk0BD,qBAAa,6CACb,YAAW,iCAAiC;IAOxC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,QAAQ,CAAC,SAAS,EAAG,OAAO,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA4D;gBAGxE,OAAO,EAAE,+BAA+B,EACzD,OAAO,GAAE,wCAA6C;IAyBlD,UAAU,IAAI,OAAO,CAAC,kCAAkC,CAAC;YAOjD,KAAK;YAiBL,WAAW;YASX,YAAY;YAgBZ,WAAW;YAuBX,yBAAyB;YA2DzB,YAAY;IAiJpB,MAAM,CACV,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,+BAA+B,CAAC;YAsG7B,kBAAkB;IAiE1B,SAAS,CAAC,OAAO,EAAE;QACvB,aAAa,EAAE,oCAAoC,CAAC;QACpD,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,8BAA8B,CAAC;IA0BrC,aAAa,CACjB,OAAO,EAAE,qCAAqC,GAC7C,OAAO,CAAC,oCAAoC,CAAC;IAkF1C,oBAAoB,CACxB,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,wBAAwB,CAAC;IA2I9B,iCAAiC,CACrC,aAAa,EAAE,+BAA+B,EAC9C,aAAa,EAAE,+BAA+B,EAC9C,aAAa,EAAE,2CAA2C,GACzD,OAAO,CAAC,wCAAwC,CAAC;YAwMtC,qBAAqB;IAgC7B,UAAU,CACd,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,+BAA+B,CAAC;IAqLrC,aAAa,CACjB,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,2CAA2C,CAAC;CAuDxD;AAED,wBAAgB,4CAA4C,CAC1D,EAAE,EAAE,QAAQ,EACZ,OAAO,GAAE,wCAA6C,GACrD,iCAAiC,CAKnC;AAED,wBAAgB,+CAA+C,CAC7D,MAAM,EAAE,sCAAsC,EAC9C,OAAO,GAAE,wCAAwC,GAC7C,8CAAmD,GACtD,iCAAiC,CAenC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/project-registration/sqlite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3C,OAAO,KAAK,EAGV,OAAO,EACP,QAAQ,EAET,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,+BAA+B,EAC/B,0CAA0C,EAC1C,sCAAsC,EACtC,kCAAkC,EAClC,oCAAoC,EACpC,kCAAkC,EAElC,6BAA6B,EAC7B,0BAA0B,EAC3B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/project-registration/sqlite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3C,OAAO,KAAK,EAGV,OAAO,EACP,QAAQ,EAET,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,+BAA+B,EAC/B,0CAA0C,EAC1C,sCAAsC,EACtC,kCAAkC,EAClC,oCAAoC,EACpC,kCAAkC,EAElC,6BAA6B,EAC7B,0BAA0B,EAC3B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAmgCvE,qBAAa,qCACb,YAAW,+BAA+B;IAI5B,OAAO,CAAC,QAAQ,CAAC,EAAE;IAH/B,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;gBAEtC,EAAE,EAAE,QAAQ;IAKnC,WAAW,CAAC,CAAC,EACjB,EAAE,EAAE,CAAC,WAAW,EAAE,0CAA0C,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1E,OAAO,CAAC,CAAC,CAAC;IAmCb,mBAAmB,CACjB,QAAQ,EAAE,oCAAoC,GAC7C,OAAO,CAAC,kCAAkC,GAAG,IAAI,CAAC;IAIrD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kCAAkC,GAAG,IAAI,CAAC;IAIrF,UAAU,CACR,KAAK,EAAE,sCAAsC,EAC7C,YAAY,EAAE,oCAAoC,EAClD,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,kCAAkC,GAAG,IAAI,CAAC;IAIrD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAI/C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAI3C,oCAAoC,CAAC,KAAK,EAAE;QAChD,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,OAAO,CAAC;KAC1B,GAAG,OAAO,CAAC,MAAM,CAAC;IAsCb,6BAA6B,CAAC,KAAK,EAAE;QACzC,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,OAAO,CAAC;QACzB,KAAK,EAAE,0BAA0B,GAAG,IAAI,CAAC;QACzC,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,6BAA6B,EAAE,CAAC;CAwC7C"}
|