@hasna/todos 0.15.34 → 0.15.41
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 +53 -19
- package/dist/cli/cloud-router.d.ts.map +1 -1
- package/dist/cli/commands/agent-commands.d.ts.map +1 -1
- package/dist/cli/commands/plan-template-commands.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/commands/task-subtree-transfer-commands.d.ts +3 -0
- package/dist/cli/commands/task-subtree-transfer-commands.d.ts.map +1 -0
- package/dist/cli/index.js +3551 -836
- package/dist/cli/stage-a.d.ts.map +1 -1
- package/dist/contracts.js +147 -57
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/plan-comments.d.ts +14 -0
- package/dist/db/plan-comments.d.ts.map +1 -0
- 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/db/task-crud.d.ts.map +1 -1
- package/dist/db/task-lifecycle.d.ts.map +1 -1
- package/dist/db/task-lists.d.ts.map +1 -1
- package/dist/db/task-relations.d.ts.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1994 -346
- package/dist/json-contracts.d.ts.map +1 -1
- package/dist/lib/comment-cursor.d.ts +19 -0
- package/dist/lib/comment-cursor.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 +2491 -507
- package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
- package/dist/mcp.js +11 -4
- 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 +362 -79
- package/dist/registry.d.ts +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +154 -57
- package/dist/release-provenance.json +5 -5
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/index.d.ts.map +1 -1
- package/dist/sdk/index.js +35 -0
- package/dist/sdk/v1.generated.d.ts +144 -0
- package/dist/sdk/v1.generated.d.ts.map +1 -1
- package/dist/server/cloud.d.ts +12 -2
- package/dist/server/cloud.d.ts.map +1 -1
- package/dist/server/index.js +5247 -8429
- package/dist/server/openapi.d.ts +2104 -1314
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/v1.d.ts +2 -1
- package/dist/server/v1.d.ts.map +1 -1
- package/dist/storage/config.d.ts +12 -30
- package/dist/storage/config.d.ts.map +1 -1
- package/dist/storage/index.d.ts +2 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/interfaces.d.ts +13 -2
- 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/timestamp-backfill.d.ts +62 -0
- package/dist/storage/timestamp-backfill.d.ts.map +1 -0
- package/dist/storage.d.ts +2 -2
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +327 -75
- package/dist/task-subtree-transfer/authority.d.ts +27 -0
- package/dist/task-subtree-transfer/authority.d.ts.map +1 -0
- package/dist/task-subtree-transfer/backend.d.ts +9 -0
- package/dist/task-subtree-transfer/backend.d.ts.map +1 -0
- package/dist/task-subtree-transfer/canonical.d.ts +14 -0
- package/dist/task-subtree-transfer/canonical.d.ts.map +1 -0
- package/dist/task-subtree-transfer/http.d.ts +16 -0
- package/dist/task-subtree-transfer/http.d.ts.map +1 -0
- package/dist/task-subtree-transfer/index.d.ts +6 -0
- package/dist/task-subtree-transfer/index.d.ts.map +1 -0
- package/dist/task-subtree-transfer/planner.d.ts +24 -0
- package/dist/task-subtree-transfer/planner.d.ts.map +1 -0
- package/dist/task-subtree-transfer/postgres.d.ts +19 -0
- package/dist/task-subtree-transfer/postgres.d.ts.map +1 -0
- package/dist/task-subtree-transfer/schema-sql.d.ts +5 -0
- package/dist/task-subtree-transfer/schema-sql.d.ts.map +1 -0
- package/dist/task-subtree-transfer/sqlite.d.ts +16 -0
- package/dist/task-subtree-transfer/sqlite.d.ts.map +1 -0
- package/dist/task-subtree-transfer/types.d.ts +148 -0
- package/dist/task-subtree-transfer/types.d.ts.map +1 -0
- package/dist/task-subtree-transfer.d.ts +2 -0
- package/dist/task-subtree-transfer.d.ts.map +1 -0
- package/dist/task-subtree-transfer.js +1869 -0
- package/dist/testing.d.ts +41 -7
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +44 -1
- package/dist/types/index.d.ts +29 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +11 -4
package/dist/registry.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export interface TodosPackageSource {
|
|
|
12
12
|
version: string;
|
|
13
13
|
}
|
|
14
14
|
export interface TodosPackageExportContract {
|
|
15
|
-
subpath: "." | "./sdk" | "./mcp" | "./registry" | "./contracts" | "./storage" | "./testing" | "./project-registration" | "./task-manifest";
|
|
15
|
+
subpath: "." | "./sdk" | "./mcp" | "./registry" | "./contracts" | "./storage" | "./testing" | "./project-registration" | "./task-manifest" | "./task-subtree-transfer";
|
|
16
16
|
import: string;
|
|
17
17
|
types: string;
|
|
18
18
|
description: string;
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EACH,GAAG,GACH,OAAO,GACP,OAAO,GACP,YAAY,GACZ,aAAa,GACb,WAAW,GACX,WAAW,GACX,wBAAwB,GACxB,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EACH,GAAG,GACH,OAAO,GACP,OAAO,GACP,YAAY,GACZ,aAAa,GACb,WAAW,GACX,WAAW,GACX,wBAAwB,GACxB,iBAAiB,GACjB,yBAAyB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,YAAY,EAAE,uBAAuB,CAAC;IACtC,SAAS,EAAE,sBAAsB,CAAC;IAClC,GAAG,EAAE,gBAAgB,CAAC;IACtB,YAAY,EAAE,yBAAyB,CAAC;CACzC;AAED,eAAO,MAAM,qBAAqB,EAAE,0BAA0B,EAuE7D,CAAC;AAUF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,0BAA+B,GAAG,aAAa,CAc3F;AAED,eAAO,MAAM,cAAc,eAEzB,CAAC"}
|
package/dist/registry.js
CHANGED
|
@@ -1884,6 +1884,10 @@ var init_migrations = __esm(() => {
|
|
|
1884
1884
|
);
|
|
1885
1885
|
INSERT OR IGNORE INTO _migrations (id) VALUES (70);
|
|
1886
1886
|
COMMIT;
|
|
1887
|
+
`,
|
|
1888
|
+
`BEGIN;
|
|
1889
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (71);
|
|
1890
|
+
COMMIT;
|
|
1887
1891
|
`
|
|
1888
1892
|
];
|
|
1889
1893
|
});
|
|
@@ -2557,6 +2561,8 @@ function ensureSchema(db) {
|
|
|
2557
2561
|
ensureColumn("projects", "task_list_id", "TEXT");
|
|
2558
2562
|
ensureColumn("projects", "task_prefix", "TEXT");
|
|
2559
2563
|
ensureColumn("projects", "task_counter", "INTEGER NOT NULL DEFAULT 0");
|
|
2564
|
+
ensureColumn("projects", "parent_id", "TEXT REFERENCES projects(id) ON DELETE SET NULL");
|
|
2565
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_projects_parent_id ON projects(parent_id)");
|
|
2560
2566
|
ensureColumn("tasks", "plan_id", "TEXT REFERENCES plans(id) ON DELETE SET NULL");
|
|
2561
2567
|
ensureColumn("tasks", "task_list_id", "TEXT REFERENCES task_lists(id) ON DELETE SET NULL");
|
|
2562
2568
|
ensureColumn("tasks", "short_id", "TEXT");
|
|
@@ -2670,6 +2676,20 @@ function ensureSchema(db) {
|
|
|
2670
2676
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_webhook_deliveries_event ON webhook_deliveries(event)");
|
|
2671
2677
|
ensureColumn("task_comments", "type", "TEXT DEFAULT 'comment'");
|
|
2672
2678
|
ensureColumn("task_comments", "progress_pct", "INTEGER");
|
|
2679
|
+
ensureTable("plan_comments", `
|
|
2680
|
+
CREATE TABLE plan_comments (
|
|
2681
|
+
id TEXT PRIMARY KEY,
|
|
2682
|
+
plan_id TEXT NOT NULL REFERENCES plans(id) ON DELETE CASCADE,
|
|
2683
|
+
agent_id TEXT,
|
|
2684
|
+
session_id TEXT,
|
|
2685
|
+
content TEXT NOT NULL,
|
|
2686
|
+
type TEXT DEFAULT 'comment' CHECK(type IN ('comment', 'progress', 'note')),
|
|
2687
|
+
progress_pct INTEGER CHECK(progress_pct IS NULL OR (progress_pct >= 0 AND progress_pct <= 100)),
|
|
2688
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
2689
|
+
machine_id TEXT,
|
|
2690
|
+
synced_at TEXT
|
|
2691
|
+
)`);
|
|
2692
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plan_comments_plan ON plan_comments(plan_id)");
|
|
2673
2693
|
ensureColumn("projects", "machine_id", "TEXT");
|
|
2674
2694
|
ensureColumn("projects", "synced_at", "TEXT");
|
|
2675
2695
|
ensureColumn("tasks", "machine_id", "TEXT");
|
|
@@ -3651,6 +3671,7 @@ var init_machines = __esm(() => {
|
|
|
3651
3671
|
"task_lists",
|
|
3652
3672
|
"plans",
|
|
3653
3673
|
"task_comments",
|
|
3674
|
+
"plan_comments",
|
|
3654
3675
|
"sessions",
|
|
3655
3676
|
"task_history",
|
|
3656
3677
|
"webhooks",
|
|
@@ -4154,20 +4175,16 @@ var init_sync_utils = __esm(() => {
|
|
|
4154
4175
|
// src/storage/config.ts
|
|
4155
4176
|
var exports_config = {};
|
|
4156
4177
|
__export(exports_config, {
|
|
4157
|
-
parseStorageMode: () => parseStorageMode,
|
|
4158
4178
|
parseStorageBackend: () => parseStorageBackend,
|
|
4159
4179
|
loadTodosStorageConfig: () => loadTodosStorageConfig,
|
|
4160
4180
|
loadStorageConfig: () => loadStorageConfig,
|
|
4161
4181
|
isTodosShadowEnabled: () => isTodosShadowEnabled,
|
|
4162
|
-
isTodosRemoteStorageEnabled: () => isTodosRemoteStorageEnabled,
|
|
4163
4182
|
isTodosPostgresBackend: () => isTodosPostgresBackend,
|
|
4164
4183
|
getTodosStorageShadowEnvName: () => getTodosStorageShadowEnvName,
|
|
4165
|
-
getTodosStorageMode: () => getTodosStorageMode,
|
|
4166
4184
|
getTodosStorageEnvName: () => getTodosStorageEnvName,
|
|
4167
4185
|
getTodosStorageDatabaseUrl: () => getTodosStorageDatabaseUrl,
|
|
4168
4186
|
getTodosStorageDatabaseEnv: () => getTodosStorageDatabaseEnv,
|
|
4169
4187
|
getTodosStorageBackend: () => getTodosStorageBackend,
|
|
4170
|
-
getStorageMode: () => getStorageMode,
|
|
4171
4188
|
getStorageDatabaseUrl: () => getStorageDatabaseUrl,
|
|
4172
4189
|
getStorageDatabaseEnv: () => getStorageDatabaseEnv,
|
|
4173
4190
|
getCanonicalTodosRdsConfig: () => getCanonicalTodosRdsConfig,
|
|
@@ -4177,7 +4194,6 @@ __export(exports_config, {
|
|
|
4177
4194
|
TODOS_STORAGE_FALLBACK_ENV: () => TODOS_STORAGE_FALLBACK_ENV,
|
|
4178
4195
|
TODOS_STORAGE_ENV: () => TODOS_STORAGE_ENV,
|
|
4179
4196
|
STORAGE_TABLES: () => STORAGE_TABLES,
|
|
4180
|
-
REMOVED_STORAGE_MODE_ENV_KEYS: () => REMOVED_STORAGE_MODE_ENV_KEYS,
|
|
4181
4197
|
CANONICAL_TODOS_RDS_RUNTIME_PATH_ENV: () => CANONICAL_TODOS_RDS_RUNTIME_PATH_ENV,
|
|
4182
4198
|
CANONICAL_TODOS_RDS_DATABASE: () => CANONICAL_TODOS_RDS_DATABASE,
|
|
4183
4199
|
CANONICAL_TODOS_RDS_CLUSTER_ENV: () => CANONICAL_TODOS_RDS_CLUSTER_ENV
|
|
@@ -4232,9 +4248,6 @@ function loadStorageConfig(env = process.env) {
|
|
|
4232
4248
|
function isTodosPostgresBackend(config) {
|
|
4233
4249
|
return config.mode === "postgres";
|
|
4234
4250
|
}
|
|
4235
|
-
function isTodosRemoteStorageEnabled(config) {
|
|
4236
|
-
return isTodosPostgresBackend(config);
|
|
4237
|
-
}
|
|
4238
4251
|
function assertTodosRemoteStorageConfig(config) {
|
|
4239
4252
|
if (!isTodosPostgresBackend(config))
|
|
4240
4253
|
return;
|
|
@@ -4250,32 +4263,15 @@ function parseStorageBackend(value) {
|
|
|
4250
4263
|
return "sqlite";
|
|
4251
4264
|
if (normalized === "postgres" || normalized === "postgresql")
|
|
4252
4265
|
return "postgres";
|
|
4253
|
-
if (["local", "remote", "cloud", "hybrid", "self_hosted"].includes(normalized)) {
|
|
4254
|
-
throw new Error(`${TODOS_STORAGE_ENV.databaseUrl} selects the backend. Deployment modes no longer exist: ` + `delete the storage-mode variable and set ${TODOS_STORAGE_ENV.databaseUrl} to select the ` + `postgresql backend, or leave it unset for sqlite.`);
|
|
4255
|
-
}
|
|
4256
4266
|
throw new Error(`Storage backend must be sqlite or postgres`);
|
|
4257
4267
|
}
|
|
4258
|
-
function parseStorageMode(value) {
|
|
4259
|
-
return parseStorageBackend(value);
|
|
4260
|
-
}
|
|
4261
4268
|
function getTodosStorageBackend(env = process.env) {
|
|
4262
|
-
for (const key of REMOVED_STORAGE_MODE_ENV_KEYS) {
|
|
4263
|
-
if (Object.hasOwn(env, key) && env[key] !== undefined) {
|
|
4264
|
-
throw new Error(`${key} was removed. Deployment modes no longer exist: delete the storage-mode variable. ` + `Set ${TODOS_STORAGE_ENV.databaseUrl} to select the postgresql backend, ` + `or leave it unset for sqlite.`);
|
|
4265
|
-
}
|
|
4266
|
-
}
|
|
4267
4269
|
if (!getTodosStorageDatabaseUrl(env))
|
|
4268
4270
|
return "sqlite";
|
|
4269
4271
|
if (isTodosShadowEnabled(env))
|
|
4270
4272
|
return "sqlite";
|
|
4271
4273
|
return "postgres";
|
|
4272
4274
|
}
|
|
4273
|
-
function getTodosStorageMode(env = process.env) {
|
|
4274
|
-
return getTodosStorageBackend(env);
|
|
4275
|
-
}
|
|
4276
|
-
function getStorageMode(env = process.env) {
|
|
4277
|
-
return getTodosStorageBackend(env);
|
|
4278
|
-
}
|
|
4279
4275
|
function isTodosShadowEnabled(env = process.env) {
|
|
4280
4276
|
return parseBoolean(readStorageEnv(env, "shadow").value, false);
|
|
4281
4277
|
}
|
|
@@ -4342,7 +4338,7 @@ function parsePositiveInteger(value, fallback) {
|
|
|
4342
4338
|
}
|
|
4343
4339
|
return parsed;
|
|
4344
4340
|
}
|
|
4345
|
-
var TODOS_STORAGE_TABLES, STORAGE_TABLES, TODOS_STORAGE_ENV, TODOS_STORAGE_FALLBACK_ENV,
|
|
4341
|
+
var TODOS_STORAGE_TABLES, STORAGE_TABLES, TODOS_STORAGE_ENV, TODOS_STORAGE_FALLBACK_ENV, CANONICAL_TODOS_RDS_CLUSTER_ENV = "HASNA_TODOS_RDS_CLUSTER", CANONICAL_TODOS_RDS_RUNTIME_PATH_ENV = "HASNA_TODOS_RDS_RUNTIME_PATH", CANONICAL_TODOS_RDS_DATABASE = "todos";
|
|
4346
4342
|
var init_config = __esm(() => {
|
|
4347
4343
|
TODOS_STORAGE_TABLES = [
|
|
4348
4344
|
"todos_sync_records",
|
|
@@ -4381,12 +4377,6 @@ var init_config = __esm(() => {
|
|
|
4381
4377
|
syncBatchSize: "TODOS_SYNC_BATCH_SIZE",
|
|
4382
4378
|
syncDryRun: "TODOS_SYNC_DRY_RUN"
|
|
4383
4379
|
};
|
|
4384
|
-
REMOVED_STORAGE_MODE_ENV_KEYS = [
|
|
4385
|
-
"HASNA_TODOS_STORAGE_MODE",
|
|
4386
|
-
"HASNA_TODOS_MODE",
|
|
4387
|
-
"TODOS_STORAGE_MODE",
|
|
4388
|
-
"TODOS_MODE"
|
|
4389
|
-
];
|
|
4390
4380
|
});
|
|
4391
4381
|
|
|
4392
4382
|
// src/storage/shadow-outbox-schema.ts
|
|
@@ -5045,17 +5035,24 @@ function createProject(input, db) {
|
|
|
5045
5035
|
const id = uuid();
|
|
5046
5036
|
const timestamp2 = now();
|
|
5047
5037
|
const derivedSlug = slugify(input.name);
|
|
5048
|
-
const taskListId = input.task_list_id === undefined ?
|
|
5038
|
+
const taskListId = input.task_list_id === undefined ? derivedSlug : slugify(input.task_list_id);
|
|
5049
5039
|
if (!derivedSlug || !taskListId)
|
|
5050
5040
|
throw new Error("Project name and task-list slug must be non-empty");
|
|
5051
5041
|
const slugConflict = d.query("SELECT id FROM projects WHERE task_list_id = ? LIMIT 1").get(taskListId);
|
|
5052
5042
|
if (slugConflict || !claimCanonicalSlug("project", "global", taskListId, id, d)) {
|
|
5053
5043
|
throw new ResourceConflictError("PROJECT_SLUG_CONFLICT", `Project slug "${taskListId}" already exists`);
|
|
5054
5044
|
}
|
|
5045
|
+
const parentId = input.parent_id ?? null;
|
|
5046
|
+
if (parentId !== null) {
|
|
5047
|
+
const parent = getProject(parentId, d);
|
|
5048
|
+
if (!parent)
|
|
5049
|
+
throw new ProjectNotFoundError(parentId);
|
|
5050
|
+
assertNotProjectAncestor(id, parentId, d);
|
|
5051
|
+
}
|
|
5055
5052
|
const taskPrefix = input.task_prefix || generatePrefix(input.name, d);
|
|
5056
5053
|
const machineId = currentStorageMachineId(d);
|
|
5057
|
-
d.run(`INSERT INTO projects (id, name, path, description, task_list_id, task_prefix, task_counter, created_at, updated_at, machine_id)
|
|
5058
|
-
VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?)`, [id, input.name, input.path, input.description || null, taskListId, taskPrefix, timestamp2, timestamp2, machineId]);
|
|
5054
|
+
d.run(`INSERT INTO projects (id, name, path, description, task_list_id, task_prefix, task_counter, parent_id, created_at, updated_at, machine_id)
|
|
5055
|
+
VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?)`, [id, input.name, input.path, input.description || null, taskListId, taskPrefix, parentId, timestamp2, timestamp2, machineId]);
|
|
5059
5056
|
return getProject(id, d);
|
|
5060
5057
|
})();
|
|
5061
5058
|
}
|
|
@@ -5080,6 +5077,60 @@ function listProjects(db) {
|
|
|
5080
5077
|
const d = db || getDatabase();
|
|
5081
5078
|
return d.query("SELECT * FROM projects ORDER BY name").all();
|
|
5082
5079
|
}
|
|
5080
|
+
function orderProjectsParentFirst(projects) {
|
|
5081
|
+
const projectId = (project) => {
|
|
5082
|
+
const id = project.id;
|
|
5083
|
+
return typeof id === "string" && id.length > 0 ? id : null;
|
|
5084
|
+
};
|
|
5085
|
+
const parentId = (project) => {
|
|
5086
|
+
const parent = project.parent_id;
|
|
5087
|
+
return parent == null ? null : String(parent);
|
|
5088
|
+
};
|
|
5089
|
+
const byId = new Set;
|
|
5090
|
+
for (const project of projects) {
|
|
5091
|
+
const id = projectId(project);
|
|
5092
|
+
if (id !== null)
|
|
5093
|
+
byId.add(id);
|
|
5094
|
+
}
|
|
5095
|
+
const ordered = [];
|
|
5096
|
+
const emitted = new Set;
|
|
5097
|
+
let remaining = [...projects];
|
|
5098
|
+
let progress = true;
|
|
5099
|
+
while (progress && remaining.length > 0) {
|
|
5100
|
+
progress = false;
|
|
5101
|
+
const deferred = [];
|
|
5102
|
+
for (const project of remaining) {
|
|
5103
|
+
const parent = parentId(project);
|
|
5104
|
+
if (parent === null || emitted.has(parent) || !byId.has(parent)) {
|
|
5105
|
+
ordered.push(project);
|
|
5106
|
+
const id = projectId(project);
|
|
5107
|
+
if (id !== null)
|
|
5108
|
+
emitted.add(id);
|
|
5109
|
+
progress = true;
|
|
5110
|
+
} else {
|
|
5111
|
+
deferred.push(project);
|
|
5112
|
+
}
|
|
5113
|
+
}
|
|
5114
|
+
remaining = deferred;
|
|
5115
|
+
}
|
|
5116
|
+
ordered.push(...remaining);
|
|
5117
|
+
return ordered;
|
|
5118
|
+
}
|
|
5119
|
+
function assertNotProjectAncestor(projectId, ancestorId, db) {
|
|
5120
|
+
const d = db || getDatabase();
|
|
5121
|
+
let cursor = ancestorId;
|
|
5122
|
+
const seen = new Set;
|
|
5123
|
+
while (cursor !== null) {
|
|
5124
|
+
if (cursor === projectId) {
|
|
5125
|
+
throw new ResourceConflictError("PROJECT_PARENT_CYCLE", `Project "${projectId}" cannot be placed under its own descendant`);
|
|
5126
|
+
}
|
|
5127
|
+
if (seen.has(cursor))
|
|
5128
|
+
break;
|
|
5129
|
+
seen.add(cursor);
|
|
5130
|
+
const row = d.query("SELECT parent_id FROM projects WHERE id = ?").get(cursor);
|
|
5131
|
+
cursor = row?.parent_id ?? null;
|
|
5132
|
+
}
|
|
5133
|
+
}
|
|
5083
5134
|
function updateProject(id, input, db) {
|
|
5084
5135
|
const d = db || getDatabase();
|
|
5085
5136
|
const project = getProject(id, d);
|
|
@@ -5102,6 +5153,16 @@ function updateProject(id, input, db) {
|
|
|
5102
5153
|
sets.push("path = ?");
|
|
5103
5154
|
params.push(input.path);
|
|
5104
5155
|
}
|
|
5156
|
+
if (input.parent_id !== undefined) {
|
|
5157
|
+
if (input.parent_id !== null) {
|
|
5158
|
+
const parent = getProject(input.parent_id, d);
|
|
5159
|
+
if (!parent)
|
|
5160
|
+
throw new ProjectNotFoundError(input.parent_id);
|
|
5161
|
+
assertNotProjectAncestor(id, input.parent_id, d);
|
|
5162
|
+
}
|
|
5163
|
+
sets.push("parent_id = ?");
|
|
5164
|
+
params.push(input.parent_id);
|
|
5165
|
+
}
|
|
5105
5166
|
params.push(id);
|
|
5106
5167
|
d.run(`UPDATE projects SET ${sets.join(", ")} WHERE id = ?`, params);
|
|
5107
5168
|
return getProject(id, d);
|
|
@@ -6780,22 +6841,31 @@ function updateTaskList(id, input, db) {
|
|
|
6780
6841
|
throw new TaskListNotFoundError(id);
|
|
6781
6842
|
const sets = ["updated_at = ?"];
|
|
6782
6843
|
const params = [now()];
|
|
6783
|
-
|
|
6784
|
-
|
|
6785
|
-
|
|
6786
|
-
|
|
6787
|
-
|
|
6844
|
+
const projectId = input.project_id === "" || input.project_id === null ? null : input.project_id === undefined ? existing.project_id : input.project_id;
|
|
6845
|
+
const scopeChanged = projectId !== existing.project_id;
|
|
6846
|
+
const effectiveSlug = input.slug !== undefined ? slugify(input.slug) : existing.slug;
|
|
6847
|
+
if (input.slug !== undefined && !effectiveSlug) {
|
|
6848
|
+
throw new Error("Invalid task-list slug \u2014 must be non-empty kebab-case");
|
|
6849
|
+
}
|
|
6850
|
+
if (scopeChanged || input.slug !== undefined && effectiveSlug !== existing.slug) {
|
|
6851
|
+
const duplicate = projectId ? d.query("SELECT id FROM task_lists WHERE project_id = ? AND slug = ? AND id != ?").get(projectId, effectiveSlug, id) : d.query("SELECT id FROM task_lists WHERE project_id IS NULL AND slug = ? AND id != ?").get(effectiveSlug, id);
|
|
6788
6852
|
if (duplicate) {
|
|
6789
|
-
throw new ResourceConflictError("TASK_LIST_SLUG_CONFLICT", `Task list with slug "${
|
|
6853
|
+
throw new ResourceConflictError("TASK_LIST_SLUG_CONFLICT", `Task list with slug "${effectiveSlug}" already exists in this scope`);
|
|
6790
6854
|
}
|
|
6791
|
-
if (
|
|
6855
|
+
if (scopeChanged || effectiveSlug !== existing.slug) {
|
|
6792
6856
|
releaseCanonicalSlugClaims("task_list", id, d);
|
|
6793
|
-
if (!claimCanonicalSlug("task_list", taskListSlugScopeKey(
|
|
6794
|
-
throw new ResourceConflictError("TASK_LIST_SLUG_CONFLICT", `Task list with slug "${
|
|
6857
|
+
if (!claimCanonicalSlug("task_list", taskListSlugScopeKey(projectId), effectiveSlug, id, d)) {
|
|
6858
|
+
throw new ResourceConflictError("TASK_LIST_SLUG_CONFLICT", `Task list with slug "${effectiveSlug}" already exists in this scope`);
|
|
6795
6859
|
}
|
|
6796
6860
|
}
|
|
6861
|
+
}
|
|
6862
|
+
if (input.slug !== undefined) {
|
|
6797
6863
|
sets.push("slug = ?");
|
|
6798
|
-
params.push(
|
|
6864
|
+
params.push(effectiveSlug);
|
|
6865
|
+
}
|
|
6866
|
+
if (projectId !== existing.project_id) {
|
|
6867
|
+
sets.push("project_id = ?");
|
|
6868
|
+
params.push(projectId);
|
|
6799
6869
|
}
|
|
6800
6870
|
if (input.name !== undefined) {
|
|
6801
6871
|
sets.push("name = ?");
|
|
@@ -9244,8 +9314,8 @@ function failTask(id, agentId, reason, options, db) {
|
|
|
9244
9314
|
const safeMeta = sanitizePreWriteValue(meta, "task.failure.metadata");
|
|
9245
9315
|
const timestamp2 = now();
|
|
9246
9316
|
const failTx = d.transaction(() => {
|
|
9247
|
-
const res = d.run(`UPDATE tasks SET status = 'failed', reason = ?, locked_by = NULL, locked_at = NULL, metadata = ?, version = version + 1, updated_at = ?
|
|
9248
|
-
WHERE id = ? AND version = ?`, [safeReason, JSON.stringify(safeMeta), timestamp2, id, task.version]);
|
|
9317
|
+
const res = d.run(`UPDATE tasks SET status = 'failed', reason = ?, locked_by = NULL, locked_at = NULL, completed_at = COALESCE(completed_at, ?), metadata = ?, version = version + 1, updated_at = ?
|
|
9318
|
+
WHERE id = ? AND version = ?`, [safeReason, timestamp2, JSON.stringify(safeMeta), timestamp2, id, task.version]);
|
|
9249
9319
|
if (res.changes === 0) {
|
|
9250
9320
|
const current = getTask(id, d);
|
|
9251
9321
|
throw new VersionConflictError(id, task.version, current?.version ?? -1);
|
|
@@ -9257,6 +9327,7 @@ function failTask(id, agentId, reason, options, db) {
|
|
|
9257
9327
|
status: "failed",
|
|
9258
9328
|
locked_by: null,
|
|
9259
9329
|
locked_at: null,
|
|
9330
|
+
completed_at: task.completed_at ?? timestamp2,
|
|
9260
9331
|
reason: safeReason,
|
|
9261
9332
|
metadata: safeMeta,
|
|
9262
9333
|
version: task.version + 1,
|
|
@@ -9905,13 +9976,20 @@ function updateTaskStored(id, input, db) {
|
|
|
9905
9976
|
if (isTerminalStatus(input.status)) {
|
|
9906
9977
|
sets.push("locked_by = NULL");
|
|
9907
9978
|
sets.push("locked_at = NULL");
|
|
9908
|
-
|
|
9909
|
-
|
|
9910
|
-
|
|
9911
|
-
|
|
9979
|
+
if (input.status === "completed") {
|
|
9980
|
+
sets.push("completed_at = ?");
|
|
9981
|
+
params.push(completionTimestamp);
|
|
9982
|
+
} else {
|
|
9983
|
+
sets.push("completed_at = COALESCE(completed_at, ?)");
|
|
9984
|
+
params.push(completionTimestamp);
|
|
9985
|
+
}
|
|
9912
9986
|
} else if (task.status === "completed" && input.completed_at === undefined) {
|
|
9913
9987
|
sets.push("completed_at = NULL");
|
|
9914
9988
|
}
|
|
9989
|
+
if (input.status === "in_progress") {
|
|
9990
|
+
sets.push("started_at = COALESCE(started_at, ?)");
|
|
9991
|
+
params.push(timestamp2);
|
|
9992
|
+
}
|
|
9915
9993
|
}
|
|
9916
9994
|
if (input.priority !== undefined) {
|
|
9917
9995
|
sets.push("priority = ?");
|
|
@@ -10049,7 +10127,6 @@ function updateTaskStored(id, input, db) {
|
|
|
10049
10127
|
if (input.approved_by !== undefined)
|
|
10050
10128
|
logTaskChange(id, "approve", "approved_by", null, input.approved_by, agentId, d);
|
|
10051
10129
|
const reopened = input.status !== undefined && input.status !== "completed" && task.status === "completed" && input.completed_at === undefined;
|
|
10052
|
-
const completedNow = input.status === "completed";
|
|
10053
10130
|
const terminalNow = input.status !== undefined && isTerminalStatus(input.status);
|
|
10054
10131
|
const updatedTask = {
|
|
10055
10132
|
...task,
|
|
@@ -10060,7 +10137,8 @@ function updateTaskStored(id, input, db) {
|
|
|
10060
10137
|
updated_at: timestamp2,
|
|
10061
10138
|
locked_by: terminalNow ? null : task.locked_by,
|
|
10062
10139
|
locked_at: terminalNow ? null : task.locked_at,
|
|
10063
|
-
completed_at:
|
|
10140
|
+
completed_at: input.status === "completed" ? completionTimestamp : input.completed_at !== undefined ? input.completed_at : terminalNow ? task.completed_at ?? completionTimestamp : reopened ? null : task.completed_at,
|
|
10141
|
+
started_at: input.status === "in_progress" ? task.started_at ?? timestamp2 : task.started_at,
|
|
10064
10142
|
sla_minutes: input.sla_minutes !== undefined ? input.sla_minutes : task.sla_minutes,
|
|
10065
10143
|
actual_minutes: input.actual_minutes ?? task.actual_minutes,
|
|
10066
10144
|
confidence: input.confidence !== undefined ? input.confidence : task.confidence,
|
|
@@ -10121,6 +10199,9 @@ function deleteTask(id, db) {
|
|
|
10121
10199
|
version: row.version
|
|
10122
10200
|
}, d);
|
|
10123
10201
|
const result = d.run("DELETE FROM tasks WHERE id = ?", [id]);
|
|
10202
|
+
if (result.changes > 0) {
|
|
10203
|
+
d.run("DELETE FROM task_dependencies WHERE task_id = ? OR depends_on = ?", [id, id]);
|
|
10204
|
+
}
|
|
10124
10205
|
return result.changes > 0;
|
|
10125
10206
|
}
|
|
10126
10207
|
var init_task_crud = __esm(() => {
|
|
@@ -12728,7 +12809,7 @@ var init_tasks = __esm(() => {
|
|
|
12728
12809
|
// package.json
|
|
12729
12810
|
var package_default = {
|
|
12730
12811
|
name: "@hasna/todos",
|
|
12731
|
-
version: "0.15.
|
|
12812
|
+
version: "0.15.41",
|
|
12732
12813
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
12733
12814
|
type: "module",
|
|
12734
12815
|
main: "dist/index.js",
|
|
@@ -12774,6 +12855,10 @@ var package_default = {
|
|
|
12774
12855
|
"./task-manifest": {
|
|
12775
12856
|
types: "./dist/task-manifest.d.ts",
|
|
12776
12857
|
import: "./dist/task-manifest.js"
|
|
12858
|
+
},
|
|
12859
|
+
"./task-subtree-transfer": {
|
|
12860
|
+
types: "./dist/task-subtree-transfer.d.ts",
|
|
12861
|
+
import: "./dist/task-subtree-transfer.js"
|
|
12777
12862
|
}
|
|
12778
12863
|
},
|
|
12779
12864
|
workspaces: [
|
|
@@ -12787,8 +12872,8 @@ var package_default = {
|
|
|
12787
12872
|
"README.md"
|
|
12788
12873
|
],
|
|
12789
12874
|
scripts: {
|
|
12790
|
-
build: "rm -rf dist dashboard/dist && cd dashboard && bun install --frozen-lockfile && bun run build && cd .. && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts src/project-registration.ts src/task-manifest.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && tsc --emitDeclarationOnly --outDir dist",
|
|
12791
|
-
"build:server": "rm -rf dist && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts src/project-registration.ts src/task-manifest.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*'",
|
|
12875
|
+
build: "rm -rf dist dashboard/dist && cd dashboard && bun install --frozen-lockfile && bun run build && cd .. && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts src/project-registration.ts src/task-manifest.ts src/task-subtree-transfer.ts --outdir dist --root src --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && tsc --emitDeclarationOnly --outDir dist",
|
|
12876
|
+
"build:server": "rm -rf dist && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts src/project-registration.ts src/task-manifest.ts src/task-subtree-transfer.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*'",
|
|
12792
12877
|
migrate: "bun run src/server/index.ts migrate",
|
|
12793
12878
|
"backfill:comment-redaction": "bun run src/server/index.ts redact-comments",
|
|
12794
12879
|
"generate:sdk": "bun run scripts/generate-sdk.ts",
|
|
@@ -12803,6 +12888,9 @@ var package_default = {
|
|
|
12803
12888
|
"verify:release-review": "bun run scripts/verify-npm-release-agent-review.ts",
|
|
12804
12889
|
"verify:attested-container-candidate": "bun run scripts/attested-container-candidate.ts verify",
|
|
12805
12890
|
"test:attested-container-candidate": "bun test scripts/attested-container-candidate.test.ts",
|
|
12891
|
+
"emit:iapp-deployment-compatibility-vector": "bun run scripts/attested-container-compatibility-vector.ts emit",
|
|
12892
|
+
"verify:iapp-deployment-compatibility-vector": "bun run scripts/attested-container-compatibility-vector.ts verify",
|
|
12893
|
+
"test:attested-container-compatibility-vector": "bun test scripts/attested-container-compatibility-vector.test.ts",
|
|
12806
12894
|
"issue:release-review": "bun run scripts/issue-npm-release-agent-review.ts",
|
|
12807
12895
|
prepublishOnly: "bun run scripts/verify-public-release.ts --mode=publish",
|
|
12808
12896
|
postinstall: "mkdir -p $HOME/.hasna/todos $HOME/.hasna/todos/training 2>/dev/null || true"
|
|
@@ -12839,7 +12927,7 @@ var package_default = {
|
|
|
12839
12927
|
author: "Andrei Hasna <andrei@hasna.com>",
|
|
12840
12928
|
license: "Apache-2.0",
|
|
12841
12929
|
dependencies: {
|
|
12842
|
-
"@hasna/contracts": "0.
|
|
12930
|
+
"@hasna/contracts": "0.13.3",
|
|
12843
12931
|
"@hasna/events": "^0.1.11",
|
|
12844
12932
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
12845
12933
|
chalk: "^5.4.1",
|
|
@@ -13491,6 +13579,7 @@ var TODOS_JSON_CONTRACTS = [
|
|
|
13491
13579
|
task_list_id: nullableIdField,
|
|
13492
13580
|
task_prefix: field(["string", "null"], "Optional task prefix.", true),
|
|
13493
13581
|
task_counter: field("integer", "Monotonic project task counter."),
|
|
13582
|
+
parent_id: field(["string", "null"], "Optional parent project id; null means top-level.", true),
|
|
13494
13583
|
created_at: isoDateField,
|
|
13495
13584
|
updated_at: isoDateField
|
|
13496
13585
|
},
|
|
@@ -16776,6 +16865,7 @@ function createAgentProjectDemoBundle() {
|
|
|
16776
16865
|
task_list_id: ids.list,
|
|
16777
16866
|
task_prefix: "DEMO",
|
|
16778
16867
|
task_counter: 4,
|
|
16868
|
+
parent_id: null,
|
|
16779
16869
|
created_at: createdAt,
|
|
16780
16870
|
updated_at: completedAt
|
|
16781
16871
|
});
|
|
@@ -25023,6 +25113,13 @@ var TODOS_PACKAGE_EXPORTS = [
|
|
|
25023
25113
|
types: "./dist/task-manifest.d.ts",
|
|
25024
25114
|
description: "Transactional package-owned authority for deterministic plan and task graph manifests.",
|
|
25025
25115
|
stability: "stable"
|
|
25116
|
+
},
|
|
25117
|
+
{
|
|
25118
|
+
subpath: "./task-subtree-transfer",
|
|
25119
|
+
import: "./dist/task-subtree-transfer.js",
|
|
25120
|
+
types: "./dist/task-subtree-transfer.d.ts",
|
|
25121
|
+
description: "Atomic package-owned authority for existing task-subtree project transfers and rollback.",
|
|
25122
|
+
stability: "stable"
|
|
25026
25123
|
}
|
|
25027
25124
|
];
|
|
25028
25125
|
function source8(version) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"packageName": "@hasna/todos",
|
|
3
|
-
"packageVersion": "0.15.
|
|
3
|
+
"packageVersion": "0.15.41",
|
|
4
4
|
"repository": "https://github.com/hasna/todos.git",
|
|
5
|
-
"gitCommit": "
|
|
6
|
-
"gitTree": "
|
|
7
|
-
"sourceTreeSha256": "
|
|
8
|
-
"generatedAt": "2026-08-
|
|
5
|
+
"gitCommit": "ac5d8ade147fee9eff8ec4ddd674eb784d9c38d7",
|
|
6
|
+
"gitTree": "304d3040aaa58c79859bfd770805c3b7fdcfcfb2",
|
|
7
|
+
"sourceTreeSha256": "62c6a2e0e541c85250c14c6ce44524291578d8acf977f7a0ab34f26203542aaf",
|
|
8
|
+
"generatedAt": "2026-08-22T13:16:30.000Z"
|
|
9
9
|
}
|
package/dist/sdk/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
export { TodosClient, createClient } from "./client.js";
|
|
11
11
|
export type { TodosClientOptions } from "./client.js";
|
|
12
12
|
export { TodosV1Client, ApiError as TodosV1ApiError } from "./v1.generated.js";
|
|
13
|
-
export type { TodosV1ClientOptions, Task as TodosV1Task, Project as TodosV1Project, TaskManifestBindingLookupRequest as TodosV1TaskManifestBindingLookupRequest, TaskManifestBindingLookupResult as TodosV1TaskManifestBindingLookupResult, TaskManifestBindingLookupResponse as TodosV1TaskManifestBindingLookupResponse, ProjectRegistrationCapability as TodosV1ProjectRegistrationCapability, ProjectRegistrationReceipt as TodosV1ProjectRegistrationReceipt, ProjectRegistrationRequest as TodosV1ProjectRegistrationRequest, ProjectRegistrationLookupRequest as TodosV1ProjectRegistrationLookupRequest, ProjectResource as TodosV1ProjectResource, ProjectResourcePage as TodosV1ProjectResourcePage, TaskComment as TodosV1TaskComment, CreateTaskInput as TodosV1CreateTaskInput, UpdateTaskInput as TodosV1UpdateTaskInput, FailTaskInput as TodosV1FailTaskInput, TaskFailureResult as TodosV1TaskFailureResult, CreateProjectInput as TodosV1CreateProjectInput, ProjectTaskListEnsureApplyInput as TodosV1ProjectTaskListEnsureApplyInput, ProjectTaskListRollbackInput as TodosV1ProjectTaskListRollbackInput, ProjectTaskListEnsureReceipt as TodosV1ProjectTaskListEnsureReceipt, ProjectTaskListEnsureResult as TodosV1ProjectTaskListEnsureResult, ProjectTaskListRollbackResult as TodosV1ProjectTaskListRollbackResult, CreateTaskCommentInput as TodosV1CreateTaskCommentInput, AdmitPrGroupInput as TodosV1AdmitPrGroupInput, RecoverPrGroupInput as TodosV1RecoverPrGroupInput, AppendPrGroupEventInput as TodosV1AppendPrGroupEventInput, PrGroupCiProof as TodosV1PrGroupCiProof, PrGroupCleanupProof as TodosV1PrGroupCleanupProof, PrGroupRecord as TodosV1PrGroupRecord, PrGroupAttemptRecord as TodosV1PrGroupAttemptRecord, PrGroupEventRecord as TodosV1PrGroupEventRecord, PrGroupStateView as TodosV1PrGroupStateView, PrGroupEventPage as TodosV1PrGroupEventPage, PrGroupMutationResult as TodosV1PrGroupMutationResult, } from "./v1.generated.js";
|
|
13
|
+
export type { TodosV1ClientOptions, Task as TodosV1Task, Project as TodosV1Project, TaskManifestBindingLookupRequest as TodosV1TaskManifestBindingLookupRequest, TaskManifestBindingLookupResult as TodosV1TaskManifestBindingLookupResult, TaskManifestBindingLookupResponse as TodosV1TaskManifestBindingLookupResponse, TaskSubtreeTransferExpectedTask as TodosV1TaskSubtreeTransferExpectedTask, TaskSubtreeTransferSharedPlanSplit as TodosV1TaskSubtreeTransferSharedPlanSplit, TaskSubtreeTransferInspectRequest as TodosV1TaskSubtreeTransferInspectRequest, TaskSubtreeTransferInspection as TodosV1TaskSubtreeTransferInspection, TaskSubtreeTransferApplyRequest as TodosV1TaskSubtreeTransferApplyRequest, TaskSubtreeTransferTaskImage as TodosV1TaskSubtreeTransferTaskImage, TaskSubtreeTransferPlanImage as TodosV1TaskSubtreeTransferPlanImage, TaskSubtreeTransferImage as TodosV1TaskSubtreeTransferImage, TaskSubtreeTransferReceipt as TodosV1TaskSubtreeTransferReceipt, TaskSubtreeTransferResult as TodosV1TaskSubtreeTransferResult, TaskSubtreeTransferCapability as TodosV1TaskSubtreeTransferCapability, TaskSubtreeTransferRollbackRequest as TodosV1TaskSubtreeTransferRollbackRequest, TaskSubtreeTransferReadExactRequest as TodosV1TaskSubtreeTransferReadExactRequest, ProjectRegistrationCapability as TodosV1ProjectRegistrationCapability, ProjectRegistrationReceipt as TodosV1ProjectRegistrationReceipt, ProjectRegistrationRequest as TodosV1ProjectRegistrationRequest, ProjectRegistrationLookupRequest as TodosV1ProjectRegistrationLookupRequest, ProjectResource as TodosV1ProjectResource, ProjectResourcePage as TodosV1ProjectResourcePage, TaskComment as TodosV1TaskComment, CreateTaskInput as TodosV1CreateTaskInput, UpdateTaskInput as TodosV1UpdateTaskInput, FailTaskInput as TodosV1FailTaskInput, TaskFailureResult as TodosV1TaskFailureResult, CreateProjectInput as TodosV1CreateProjectInput, ProjectTaskListEnsureApplyInput as TodosV1ProjectTaskListEnsureApplyInput, ProjectTaskListRollbackInput as TodosV1ProjectTaskListRollbackInput, ProjectTaskListEnsureReceipt as TodosV1ProjectTaskListEnsureReceipt, ProjectTaskListEnsureResult as TodosV1ProjectTaskListEnsureResult, ProjectTaskListRollbackResult as TodosV1ProjectTaskListRollbackResult, CreateTaskCommentInput as TodosV1CreateTaskCommentInput, AdmitPrGroupInput as TodosV1AdmitPrGroupInput, RecoverPrGroupInput as TodosV1RecoverPrGroupInput, AppendPrGroupEventInput as TodosV1AppendPrGroupEventInput, PrGroupCiProof as TodosV1PrGroupCiProof, PrGroupCleanupProof as TodosV1PrGroupCleanupProof, PrGroupRecord as TodosV1PrGroupRecord, PrGroupAttemptRecord as TodosV1PrGroupAttemptRecord, PrGroupEventRecord as TodosV1PrGroupEventRecord, PrGroupStateView as TodosV1PrGroupStateView, PrGroupEventPage as TodosV1PrGroupEventPage, PrGroupMutationResult as TodosV1PrGroupMutationResult, } from "./v1.generated.js";
|
|
14
14
|
export type { AdmitPrGroupInput, AppendPrGroupEventInput, PrGroupAdapterViews, PrGroupAttemptRecord, PrGroupCiProof, PrGroupCleanupProof, PrGroupDecisionEnvelopeAdapter, PrGroupEventListOptions, PrGroupEventPage, PrGroupEventRecord, PrGroupEvidenceRefAdapter, PrGroupMutationResult, PrGroupProofBundleAdapter, PrGroupRecord, PrGroupStateView, PrGroupWorkRunAdapter, RecoverPrGroupInput, } from "../pr-groups/types.js";
|
|
15
15
|
export { TodosAPIError, TodosNotFoundError, TodosConflictError, TodosUnauthorizedError, TodosRateLimitError, TodosTimeoutError, } from "./types.js";
|
|
16
16
|
export type { SSEEvent, CursorPage, ListOptions, TaskListResponse, TaskStatusResponse, TaskNextResponse, TaskActiveResponse, TaskStaleResponse, TaskChangedResponse, TaskContextResponse, TaskProgressResponse, TaskAttachmentsResponse, TaskFailResponse, TaskBulkResponse, AgentMeResponse, AgentQueueResponse, OrgNode, PlanWithTasks, ReportResponse, DoctorResponse, DoctorIssue, } from "./types.js";
|
package/dist/sdk/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItD,OAAO,EAAE,aAAa,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/E,YAAY,EACV,oBAAoB,EACpB,IAAI,IAAI,WAAW,EACnB,OAAO,IAAI,cAAc,EACzB,gCAAgC,IAAI,uCAAuC,EAC3E,+BAA+B,IAAI,sCAAsC,EACzE,iCAAiC,IAAI,wCAAwC,EAC7E,6BAA6B,IAAI,oCAAoC,EACrE,0BAA0B,IAAI,iCAAiC,EAC/D,0BAA0B,IAAI,iCAAiC,EAC/D,gCAAgC,IAAI,uCAAuC,EAC3E,eAAe,IAAI,sBAAsB,EACzC,mBAAmB,IAAI,0BAA0B,EACjD,WAAW,IAAI,kBAAkB,EACjC,eAAe,IAAI,sBAAsB,EACzC,eAAe,IAAI,sBAAsB,EACzC,aAAa,IAAI,oBAAoB,EACrC,iBAAiB,IAAI,wBAAwB,EAC7C,kBAAkB,IAAI,yBAAyB,EAC/C,+BAA+B,IAAI,sCAAsC,EACzE,4BAA4B,IAAI,mCAAmC,EACnE,4BAA4B,IAAI,mCAAmC,EACnE,2BAA2B,IAAI,kCAAkC,EACjE,6BAA6B,IAAI,oCAAoC,EACrE,sBAAsB,IAAI,6BAA6B,EACvD,iBAAiB,IAAI,wBAAwB,EAC7C,mBAAmB,IAAI,0BAA0B,EACjD,uBAAuB,IAAI,8BAA8B,EACzD,cAAc,IAAI,qBAAqB,EACvC,mBAAmB,IAAI,0BAA0B,EACjD,aAAa,IAAI,oBAAoB,EACrC,oBAAoB,IAAI,2BAA2B,EACnD,kBAAkB,IAAI,yBAAyB,EAC/C,gBAAgB,IAAI,uBAAuB,EAC3C,gBAAgB,IAAI,uBAAuB,EAC3C,qBAAqB,IAAI,4BAA4B,GACtD,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,8BAA8B,EAC9B,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,QAAQ,EACR,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,cAAc,EACd,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/index.js
CHANGED
|
@@ -1082,6 +1082,41 @@ class TodosV1Client {
|
|
|
1082
1082
|
init
|
|
1083
1083
|
});
|
|
1084
1084
|
}
|
|
1085
|
+
async applyTaskSubtreeTransfer(body, init) {
|
|
1086
|
+
return this.request("POST", `/v1/task-subtree-transfer/apply`, {
|
|
1087
|
+
body,
|
|
1088
|
+
query: undefined,
|
|
1089
|
+
init
|
|
1090
|
+
});
|
|
1091
|
+
}
|
|
1092
|
+
async getTaskSubtreeTransferCapability(init) {
|
|
1093
|
+
return this.request("GET", `/v1/task-subtree-transfer/capability`, {
|
|
1094
|
+
body: undefined,
|
|
1095
|
+
query: undefined,
|
|
1096
|
+
init
|
|
1097
|
+
});
|
|
1098
|
+
}
|
|
1099
|
+
async inspectTaskSubtreeTransfer(body, init) {
|
|
1100
|
+
return this.request("POST", `/v1/task-subtree-transfer/inspect`, {
|
|
1101
|
+
body,
|
|
1102
|
+
query: undefined,
|
|
1103
|
+
init
|
|
1104
|
+
});
|
|
1105
|
+
}
|
|
1106
|
+
async readExactTaskSubtreeTransfer(body, init) {
|
|
1107
|
+
return this.request("POST", `/v1/task-subtree-transfer/read-exact`, {
|
|
1108
|
+
body,
|
|
1109
|
+
query: undefined,
|
|
1110
|
+
init
|
|
1111
|
+
});
|
|
1112
|
+
}
|
|
1113
|
+
async rollbackTaskSubtreeTransfer(body, init) {
|
|
1114
|
+
return this.request("POST", `/v1/task-subtree-transfer/rollback`, {
|
|
1115
|
+
body,
|
|
1116
|
+
query: undefined,
|
|
1117
|
+
init
|
|
1118
|
+
});
|
|
1119
|
+
}
|
|
1085
1120
|
async listTasks(query, init) {
|
|
1086
1121
|
return this.request("GET", `/v1/tasks`, {
|
|
1087
1122
|
body: undefined,
|