@hasna/todos 0.13.2 → 0.13.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +78 -14
- package/dist/cli/cloud-router.d.ts +100 -7
- 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/query-commands.d.ts.map +1 -1
- package/dist/cli/doctor-integrity.d.ts +106 -0
- package/dist/cli/doctor-integrity.d.ts.map +1 -0
- package/dist/cli/helpers.d.ts +2 -2
- package/dist/cli/index.js +1509 -786
- package/dist/cli/stage-a.d.ts.map +1 -1
- package/dist/contracts.js +118 -30
- package/dist/db/agent-names.d.ts +2 -1
- package/dist/db/agent-names.d.ts.map +1 -1
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/findings.d.ts +1 -0
- package/dist/db/findings.d.ts.map +1 -1
- package/dist/db/integrity.d.ts +20 -0
- package/dist/db/integrity.d.ts.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +584 -140
- package/dist/lib/agent-name-normalize.d.ts +17 -0
- package/dist/lib/agent-name-normalize.d.ts.map +1 -0
- package/dist/lib/context-packs.d.ts +1 -0
- package/dist/lib/context-packs.d.ts.map +1 -1
- package/dist/lib/dependency-graph.d.ts +1 -1
- package/dist/lib/doctor.d.ts +20 -0
- package/dist/lib/doctor.d.ts.map +1 -1
- package/dist/lib/integrity.d.ts +215 -0
- package/dist/lib/integrity.d.ts.map +1 -0
- package/dist/lib/native-storage-status.d.ts +2 -2
- package/dist/lib/native-storage-status.d.ts.map +1 -1
- package/dist/lib/release-compatibility.d.ts.map +1 -1
- package/dist/lib/task-dedupe.d.ts +15 -0
- package/dist/lib/task-dedupe.d.ts.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +554 -92
- package/dist/mcp.js +7 -3
- package/dist/registry.d.ts +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +125 -30
- package/dist/release-provenance.json +5 -5
- package/dist/sdk/types.d.ts +42 -0
- package/dist/sdk/types.d.ts.map +1 -1
- package/dist/sdk/v1.generated.d.ts +1 -0
- package/dist/sdk/v1.generated.d.ts.map +1 -1
- package/dist/server/cloud.d.ts +8 -1
- package/dist/server/cloud.d.ts.map +1 -1
- package/dist/server/index.js +560 -98
- package/dist/server/openapi.d.ts +12 -0
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/serve.d.ts.map +1 -1
- package/dist/server/v1.d.ts.map +1 -1
- package/dist/storage/config.d.ts +23 -5
- package/dist/storage/config.d.ts.map +1 -1
- package/dist/storage/factory.d.ts +9 -3
- package/dist/storage/factory.d.ts.map +1 -1
- package/dist/storage/hybrid.d.ts +7 -0
- package/dist/storage/hybrid.d.ts.map +1 -1
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/interfaces.d.ts +29 -8
- package/dist/storage/interfaces.d.ts.map +1 -1
- package/dist/storage/local-sqlite.d.ts.map +1 -1
- package/dist/storage/postgres-adapter.d.ts.map +1 -1
- package/dist/storage.d.ts +3 -3
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +623 -258
- package/dist/testing.d.ts +79 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +107 -0
- package/dist/types/index.d.ts +12 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +7 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stage-a.d.ts","sourceRoot":"","sources":["../../src/cli/stage-a.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,WAAW,CAAC;AAO1C,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE9C,MAAM,MAAM,+BAA+B,GACvC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,IAAI,CAAA;CAAE,GACrC;IAAE,KAAK,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC1D;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC;AAyB/E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;CAuBgB,CAAC;AAsBvD,wBAAgB,kCAAkC,IAAI,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAE9F;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,+BAA+B,CAAC,OAAO,CAAC,GAC9C,OAAO,CAKT;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,+BAA+B,CAAC,OAAO,CAAC,GAAG,IAAI,CASnH;
|
|
1
|
+
{"version":3,"file":"stage-a.d.ts","sourceRoot":"","sources":["../../src/cli/stage-a.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,WAAW,CAAC;AAO1C,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE9C,MAAM,MAAM,+BAA+B,GACvC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,IAAI,CAAA;CAAE,GACrC;IAAE,KAAK,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC1D;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC;AAyB/E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;CAuBgB,CAAC;AAsBvD,wBAAgB,kCAAkC,IAAI,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAE9F;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,+BAA+B,CAAC,OAAO,CAAC,GAC9C,OAAO,CAKT;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,+BAA+B,CAAC,OAAO,CAAC,GAAG,IAAI,CASnH;AA4KD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,GAAE,MAAM,EAA0B,EACtC,GAAG,GAAE,GAAwB,GAC5B,+BAA+B,CAgBjC"}
|
package/dist/contracts.js
CHANGED
|
@@ -3427,7 +3427,7 @@ var init_machines = __esm(() => {
|
|
|
3427
3427
|
function isBlockingDependencyStatus(status) {
|
|
3428
3428
|
return status !== "completed" && status !== "cancelled";
|
|
3429
3429
|
}
|
|
3430
|
-
var TASK_STATUSES, TASK_PRIORITIES, PLAN_STATUSES, VersionConflictError, TaskNotFoundError, ProjectNotFoundError, ResourceConflictError, PlanNotFoundError, LockError, AgentNotFoundError, IdentityAliasAmbiguousError, IdentityIdImmutableError, TaskListNotFoundError, DependencyCycleError, CompletionGuardError, DISPATCH_STATUSES, DispatchNotFoundError;
|
|
3430
|
+
var TASK_STATUSES, TASK_PRIORITIES, PLAN_STATUSES, VersionConflictError, TaskNotFoundError, TaskReferenceAmbiguousError, ProjectNotFoundError, ResourceConflictError, PlanNotFoundError, LockError, AgentNotFoundError, IdentityAliasAmbiguousError, IdentityIdImmutableError, TaskListNotFoundError, DependencyCycleError, CompletionGuardError, DISPATCH_STATUSES, DispatchNotFoundError;
|
|
3431
3431
|
var init_types = __esm(() => {
|
|
3432
3432
|
TASK_STATUSES = [
|
|
3433
3433
|
"pending",
|
|
@@ -3467,6 +3467,22 @@ var init_types = __esm(() => {
|
|
|
3467
3467
|
this.name = "TaskNotFoundError";
|
|
3468
3468
|
}
|
|
3469
3469
|
};
|
|
3470
|
+
TaskReferenceAmbiguousError = class TaskReferenceAmbiguousError extends Error {
|
|
3471
|
+
reference;
|
|
3472
|
+
static code = "TASK_REFERENCE_AMBIGUOUS";
|
|
3473
|
+
candidateTaskIds;
|
|
3474
|
+
candidateProjectIds;
|
|
3475
|
+
constructor(reference, candidates) {
|
|
3476
|
+
const candidateTaskIds = [...new Set(candidates.map((candidate) => candidate.task_id))].sort();
|
|
3477
|
+
const candidateProjectIds = [...new Set(candidates.map((candidate) => candidate.project_id).filter((projectId) => typeof projectId === "string" && projectId.length > 0))].sort();
|
|
3478
|
+
const projectList = candidateProjectIds.length > 0 ? candidateProjectIds.join(", ") : "(unscoped)";
|
|
3479
|
+
super(`Task reference is ambiguous: "${reference}". Candidate project IDs: ${projectList}. ` + "Use a full task UUID.");
|
|
3480
|
+
this.reference = reference;
|
|
3481
|
+
this.name = "TaskReferenceAmbiguousError";
|
|
3482
|
+
this.candidateTaskIds = candidateTaskIds;
|
|
3483
|
+
this.candidateProjectIds = candidateProjectIds;
|
|
3484
|
+
}
|
|
3485
|
+
};
|
|
3470
3486
|
ProjectNotFoundError = class ProjectNotFoundError extends Error {
|
|
3471
3487
|
projectId;
|
|
3472
3488
|
static code = "PROJECT_NOT_FOUND";
|
|
@@ -3758,15 +3774,18 @@ var init_identity_mapping = __esm(() => {
|
|
|
3758
3774
|
var exports_config = {};
|
|
3759
3775
|
__export(exports_config, {
|
|
3760
3776
|
parseStorageMode: () => parseStorageMode,
|
|
3777
|
+
parseStorageBackend: () => parseStorageBackend,
|
|
3761
3778
|
loadTodosStorageConfig: () => loadTodosStorageConfig,
|
|
3762
3779
|
loadStorageConfig: () => loadStorageConfig,
|
|
3763
3780
|
isTodosShadowEnabled: () => isTodosShadowEnabled,
|
|
3764
3781
|
isTodosRemoteStorageEnabled: () => isTodosRemoteStorageEnabled,
|
|
3782
|
+
isTodosPostgresBackend: () => isTodosPostgresBackend,
|
|
3765
3783
|
getTodosStorageShadowEnvName: () => getTodosStorageShadowEnvName,
|
|
3766
3784
|
getTodosStorageMode: () => getTodosStorageMode,
|
|
3767
3785
|
getTodosStorageEnvName: () => getTodosStorageEnvName,
|
|
3768
3786
|
getTodosStorageDatabaseUrl: () => getTodosStorageDatabaseUrl,
|
|
3769
3787
|
getTodosStorageDatabaseEnv: () => getTodosStorageDatabaseEnv,
|
|
3788
|
+
getTodosStorageBackend: () => getTodosStorageBackend,
|
|
3770
3789
|
getStorageMode: () => getStorageMode,
|
|
3771
3790
|
getStorageDatabaseUrl: () => getStorageDatabaseUrl,
|
|
3772
3791
|
getStorageDatabaseEnv: () => getStorageDatabaseEnv,
|
|
@@ -3791,7 +3810,7 @@ function getCanonicalTodosRdsConfig(env = process.env) {
|
|
|
3791
3810
|
};
|
|
3792
3811
|
}
|
|
3793
3812
|
function loadTodosStorageConfig(env = process.env) {
|
|
3794
|
-
const mode =
|
|
3813
|
+
const mode = getTodosStorageBackend(env);
|
|
3795
3814
|
const databaseUrl = getTodosStorageDatabaseUrl(env);
|
|
3796
3815
|
const bucket = readStorageEnv(env, "s3Bucket").value;
|
|
3797
3816
|
const prefix = readStorageEnv(env, "s3Prefix").value ?? "todos/";
|
|
@@ -3828,29 +3847,41 @@ function loadTodosStorageConfig(env = process.env) {
|
|
|
3828
3847
|
function loadStorageConfig(env = process.env) {
|
|
3829
3848
|
return loadTodosStorageConfig(env);
|
|
3830
3849
|
}
|
|
3850
|
+
function isTodosPostgresBackend(config) {
|
|
3851
|
+
return config.mode === "postgres";
|
|
3852
|
+
}
|
|
3831
3853
|
function isTodosRemoteStorageEnabled(config) {
|
|
3832
|
-
return config
|
|
3854
|
+
return isTodosPostgresBackend(config);
|
|
3833
3855
|
}
|
|
3834
3856
|
function assertTodosRemoteStorageConfig(config) {
|
|
3835
|
-
if (!
|
|
3857
|
+
if (!isTodosPostgresBackend(config))
|
|
3836
3858
|
return;
|
|
3837
3859
|
if (!config.database?.url) {
|
|
3838
3860
|
throw new Error(`${TODOS_STORAGE_ENV.databaseUrl} is required when ${TODOS_STORAGE_ENV.mode}=${config.mode}`);
|
|
3839
3861
|
}
|
|
3840
3862
|
}
|
|
3841
|
-
function
|
|
3863
|
+
function parseStorageBackend(value) {
|
|
3842
3864
|
const normalized = clean(value)?.toLowerCase();
|
|
3843
3865
|
if (!normalized)
|
|
3844
|
-
return "
|
|
3845
|
-
if (normalized === "
|
|
3866
|
+
return "sqlite";
|
|
3867
|
+
if (normalized === "sqlite" || normalized === "postgres")
|
|
3846
3868
|
return normalized;
|
|
3847
|
-
|
|
3869
|
+
const legacy = LEGACY_BACKEND_TOKENS[normalized];
|
|
3870
|
+
if (legacy)
|
|
3871
|
+
return legacy;
|
|
3872
|
+
throw new Error(`${TODOS_STORAGE_ENV.mode} must be sqlite or postgres (legacy values local and remote are accepted)`);
|
|
3873
|
+
}
|
|
3874
|
+
function parseStorageMode(value) {
|
|
3875
|
+
return parseStorageBackend(value);
|
|
3876
|
+
}
|
|
3877
|
+
function getTodosStorageBackend(env = process.env) {
|
|
3878
|
+
return parseStorageBackend(readStorageEnv(env, "mode").value);
|
|
3848
3879
|
}
|
|
3849
3880
|
function getTodosStorageMode(env = process.env) {
|
|
3850
|
-
return
|
|
3881
|
+
return getTodosStorageBackend(env);
|
|
3851
3882
|
}
|
|
3852
3883
|
function getStorageMode(env = process.env) {
|
|
3853
|
-
return
|
|
3884
|
+
return getTodosStorageBackend(env);
|
|
3854
3885
|
}
|
|
3855
3886
|
function isTodosShadowEnabled(env = process.env) {
|
|
3856
3887
|
return parseBoolean(readStorageEnv(env, "shadow").value, false);
|
|
@@ -3861,8 +3892,8 @@ function getTodosStorageShadowEnvName(env = process.env) {
|
|
|
3861
3892
|
function assertTodosShadowConfig(config, env = process.env) {
|
|
3862
3893
|
if (!isTodosShadowEnabled(env))
|
|
3863
3894
|
return;
|
|
3864
|
-
if (config.mode !== "
|
|
3865
|
-
throw new Error(`${readStorageEnv(env, "shadow").name} shadow mirror requires
|
|
3895
|
+
if (config.mode !== "sqlite") {
|
|
3896
|
+
throw new Error(`${readStorageEnv(env, "shadow").name} shadow mirror requires the sqlite backend (got ${config.mode})`);
|
|
3866
3897
|
}
|
|
3867
3898
|
if (!config.database?.url) {
|
|
3868
3899
|
throw new Error(`${TODOS_STORAGE_ENV.databaseUrl} is required when ${readStorageEnv(env, "shadow").name} is enabled`);
|
|
@@ -3918,7 +3949,7 @@ function parsePositiveInteger(value, fallback) {
|
|
|
3918
3949
|
}
|
|
3919
3950
|
return parsed;
|
|
3920
3951
|
}
|
|
3921
|
-
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";
|
|
3952
|
+
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", LEGACY_BACKEND_TOKENS;
|
|
3922
3953
|
var init_config = __esm(() => {
|
|
3923
3954
|
TODOS_STORAGE_TABLES = [
|
|
3924
3955
|
"todos_sync_records",
|
|
@@ -3959,6 +3990,14 @@ var init_config = __esm(() => {
|
|
|
3959
3990
|
syncBatchSize: "TODOS_SYNC_BATCH_SIZE",
|
|
3960
3991
|
syncDryRun: "TODOS_SYNC_DRY_RUN"
|
|
3961
3992
|
};
|
|
3993
|
+
LEGACY_BACKEND_TOKENS = {
|
|
3994
|
+
local: "sqlite",
|
|
3995
|
+
remote: "postgres",
|
|
3996
|
+
postgresql: "postgres",
|
|
3997
|
+
hybrid: "postgres",
|
|
3998
|
+
self_hosted: "postgres",
|
|
3999
|
+
cloud: "postgres"
|
|
4000
|
+
};
|
|
3962
4001
|
});
|
|
3963
4002
|
|
|
3964
4003
|
// src/storage/shadow-outbox-schema.ts
|
|
@@ -4092,6 +4131,30 @@ function findGitRoot(startDir) {
|
|
|
4092
4131
|
}
|
|
4093
4132
|
return null;
|
|
4094
4133
|
}
|
|
4134
|
+
function getGlobalDbPath() {
|
|
4135
|
+
const home = process.env["HOME"] || process.env["USERPROFILE"] || "~";
|
|
4136
|
+
return join(home, ".hasna", "todos", "todos.db");
|
|
4137
|
+
}
|
|
4138
|
+
function hasExplicitProjectArg(args = process.argv.slice(2)) {
|
|
4139
|
+
return args.some((arg) => arg === "--project" || arg.startsWith("--project="));
|
|
4140
|
+
}
|
|
4141
|
+
function getCliCommand(args = process.argv.slice(2)) {
|
|
4142
|
+
const globalOptionsWithValues = new Set(["--project", "--agent", "--session"]);
|
|
4143
|
+
for (let index = 0;index < args.length; index += 1) {
|
|
4144
|
+
const arg = args[index];
|
|
4145
|
+
if (globalOptionsWithValues.has(arg)) {
|
|
4146
|
+
index += 1;
|
|
4147
|
+
continue;
|
|
4148
|
+
}
|
|
4149
|
+
if (arg.startsWith("-"))
|
|
4150
|
+
continue;
|
|
4151
|
+
return arg;
|
|
4152
|
+
}
|
|
4153
|
+
return null;
|
|
4154
|
+
}
|
|
4155
|
+
function canCreateScopedProjectDb(args = process.argv.slice(2)) {
|
|
4156
|
+
return getCliCommand(args) === "project-bootstrap" && !args.some((arg) => arg === "--dry-run" || arg.startsWith("--dry-run="));
|
|
4157
|
+
}
|
|
4095
4158
|
function getDbPath() {
|
|
4096
4159
|
if (process.env["HASNA_TODOS_DB_PATH"]) {
|
|
4097
4160
|
return process.env["HASNA_TODOS_DB_PATH"];
|
|
@@ -4099,18 +4162,19 @@ function getDbPath() {
|
|
|
4099
4162
|
if (process.env["TODOS_DB_PATH"]) {
|
|
4100
4163
|
return process.env["TODOS_DB_PATH"];
|
|
4101
4164
|
}
|
|
4165
|
+
if (hasExplicitProjectArg())
|
|
4166
|
+
return getGlobalDbPath();
|
|
4102
4167
|
const cwd = process.cwd();
|
|
4103
4168
|
const nearest = findNearestProjectDb(cwd);
|
|
4104
4169
|
if (nearest)
|
|
4105
4170
|
return nearest;
|
|
4106
4171
|
if (process.env["TODOS_DB_SCOPE"] === "project") {
|
|
4107
4172
|
const gitRoot = findGitRoot(cwd);
|
|
4108
|
-
if (gitRoot) {
|
|
4173
|
+
if (gitRoot && canCreateScopedProjectDb()) {
|
|
4109
4174
|
return join(gitRoot, ".hasna", "todos", "todos.db");
|
|
4110
4175
|
}
|
|
4111
4176
|
}
|
|
4112
|
-
|
|
4113
|
-
return join(home, ".hasna", "todos", "todos.db");
|
|
4177
|
+
return getGlobalDbPath();
|
|
4114
4178
|
}
|
|
4115
4179
|
function getDatabasePath() {
|
|
4116
4180
|
return getDbPath();
|
|
@@ -4213,10 +4277,13 @@ function resolvePartialId(db, table, partialId) {
|
|
|
4213
4277
|
return null;
|
|
4214
4278
|
}
|
|
4215
4279
|
if (table === "tasks") {
|
|
4216
|
-
const shortIdRows = db.query("SELECT id FROM tasks WHERE short_id = ?").all(partialId);
|
|
4280
|
+
const shortIdRows = db.query("SELECT id, project_id FROM tasks WHERE LOWER(short_id) = LOWER(?) ORDER BY project_id, id").all(partialId);
|
|
4217
4281
|
if (shortIdRows.length === 1) {
|
|
4218
4282
|
return shortIdRows[0].id;
|
|
4219
4283
|
}
|
|
4284
|
+
if (shortIdRows.length > 1) {
|
|
4285
|
+
throw new TaskReferenceAmbiguousError(partialId, shortIdRows.map((row) => ({ task_id: row.id, project_id: row.project_id })));
|
|
4286
|
+
}
|
|
4220
4287
|
}
|
|
4221
4288
|
if (table === "task_lists") {
|
|
4222
4289
|
const slugRow = db.query("SELECT id FROM task_lists WHERE slug = ?").get(partialId);
|
|
@@ -11833,7 +11900,7 @@ var init_tasks = __esm(() => {
|
|
|
11833
11900
|
// package.json
|
|
11834
11901
|
var package_default = {
|
|
11835
11902
|
name: "@hasna/todos",
|
|
11836
|
-
version: "0.13.
|
|
11903
|
+
version: "0.13.4",
|
|
11837
11904
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
11838
11905
|
type: "module",
|
|
11839
11906
|
main: "dist/index.js",
|
|
@@ -11867,6 +11934,10 @@ var package_default = {
|
|
|
11867
11934
|
"./storage": {
|
|
11868
11935
|
types: "./dist/storage.d.ts",
|
|
11869
11936
|
import: "./dist/storage.js"
|
|
11937
|
+
},
|
|
11938
|
+
"./testing": {
|
|
11939
|
+
types: "./dist/testing.d.ts",
|
|
11940
|
+
import: "./dist/testing.js"
|
|
11870
11941
|
}
|
|
11871
11942
|
},
|
|
11872
11943
|
workspaces: [
|
|
@@ -11879,8 +11950,8 @@ var package_default = {
|
|
|
11879
11950
|
"README.md"
|
|
11880
11951
|
],
|
|
11881
11952
|
scripts: {
|
|
11882
|
-
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 --external '@hasna/contracts' --external '@hasna/contracts/*' && 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 --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && tsc --emitDeclarationOnly --outDir dist",
|
|
11883
|
-
"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 --external '@hasna/contracts' --external '@hasna/contracts/*' && 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 --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*'",
|
|
11953
|
+
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 --external '@hasna/contracts' --external '@hasna/contracts/*' && 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 --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && tsc --emitDeclarationOnly --outDir dist",
|
|
11954
|
+
"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 --external '@hasna/contracts' --external '@hasna/contracts/*' && 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 --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*'",
|
|
11884
11955
|
migrate: "bun run src/server/index.ts migrate",
|
|
11885
11956
|
"backfill:comment-redaction": "bun run src/server/index.ts redact-comments",
|
|
11886
11957
|
"generate:sdk": "bun run scripts/generate-sdk.ts",
|
|
@@ -17627,11 +17698,12 @@ var DEFAULT_LIMITS = {
|
|
|
17627
17698
|
verification_limit: 10,
|
|
17628
17699
|
run_limit: 3,
|
|
17629
17700
|
dependency_limit: 12,
|
|
17630
|
-
plan_task_limit:
|
|
17701
|
+
plan_task_limit: 24,
|
|
17631
17702
|
max_text_chars: 6000,
|
|
17632
17703
|
summary_char_limit: 480,
|
|
17633
17704
|
stale_after_hours: 72
|
|
17634
17705
|
};
|
|
17706
|
+
var MAX_CONTEXT_TASKS = 24;
|
|
17635
17707
|
var ALL_CONTEXT_SECTIONS = [
|
|
17636
17708
|
"project",
|
|
17637
17709
|
"plan",
|
|
@@ -17664,7 +17736,7 @@ function limits(input) {
|
|
|
17664
17736
|
verification_limit: clamp(input.verification_limit, DEFAULT_LIMITS.verification_limit, 100),
|
|
17665
17737
|
run_limit: clamp(input.run_limit, DEFAULT_LIMITS.run_limit, 20),
|
|
17666
17738
|
dependency_limit: clamp(input.dependency_limit, DEFAULT_LIMITS.dependency_limit, 100),
|
|
17667
|
-
plan_task_limit: clamp(input.plan_task_limit, DEFAULT_LIMITS.plan_task_limit,
|
|
17739
|
+
plan_task_limit: clamp(input.plan_task_limit, DEFAULT_LIMITS.plan_task_limit, MAX_CONTEXT_TASKS),
|
|
17668
17740
|
max_text_chars: clamp(input.max_text_chars, DEFAULT_LIMITS.max_text_chars, 50000),
|
|
17669
17741
|
summary_char_limit: clamp(input.summary_char_limit, DEFAULT_LIMITS.summary_char_limit, 4000),
|
|
17670
17742
|
stale_after_hours: clamp(input.stale_after_hours, DEFAULT_LIMITS.stale_after_hours, 24 * 365)
|
|
@@ -17687,6 +17759,13 @@ function taskSummary(task2) {
|
|
|
17687
17759
|
priority: task2.priority
|
|
17688
17760
|
};
|
|
17689
17761
|
}
|
|
17762
|
+
function latestPlanTasks(planId, limit, db) {
|
|
17763
|
+
const rows = db.query(`SELECT * FROM tasks
|
|
17764
|
+
WHERE plan_id = ? AND archived_at IS NULL
|
|
17765
|
+
ORDER BY updated_at DESC, created_at DESC, id ASC
|
|
17766
|
+
LIMIT ?`).all(planId, limit);
|
|
17767
|
+
return rows.map(rowToTask);
|
|
17768
|
+
}
|
|
17690
17769
|
function acceptanceCriteria(task2, maxText) {
|
|
17691
17770
|
const metadata = task2.metadata || {};
|
|
17692
17771
|
const raw = metadata["acceptance_criteria"] ?? metadata["acceptanceCriteria"] ?? metadata["criteria"];
|
|
@@ -17784,7 +17863,7 @@ function summarizeSection(pack, section, maxChars) {
|
|
|
17784
17863
|
return "No plan was attached.";
|
|
17785
17864
|
return summarizeStrings([
|
|
17786
17865
|
`Plan ${pack.plan.name} is ${pack.plan.status}`,
|
|
17787
|
-
`${pack.plan.tasks.length} listed plan
|
|
17866
|
+
`${pack.plan.tasks.length} of ${pack.plan.total_tasks} plan tasks listed; ${pack.plan.omitted_tasks} omitted`,
|
|
17788
17867
|
...pack.plan.tasks.slice(0, 4).map((task2) => `${task2.status} ${task2.short_id || task2.id.slice(0, 8)} ${task2.title}`)
|
|
17789
17868
|
], maxChars);
|
|
17790
17869
|
}
|
|
@@ -17934,7 +18013,8 @@ function createAgentContextPack(input, db) {
|
|
|
17934
18013
|
const limit = limits(input);
|
|
17935
18014
|
const project = task2.project_id ? getProject(task2.project_id, d) : null;
|
|
17936
18015
|
const plan = task2.plan_id ? getPlan(task2.plan_id, d) : null;
|
|
17937
|
-
const planTasks = task2.plan_id ?
|
|
18016
|
+
const planTasks = task2.plan_id ? latestPlanTasks(task2.plan_id, limit.plan_task_limit, d) : [];
|
|
18017
|
+
const totalPlanTasks = task2.plan_id ? countTasks({ plan_id: task2.plan_id }, d) : 0;
|
|
17938
18018
|
const upstream = getTaskDependencies(task2.id, d).map((dep) => taskSummary(getTask(dep.depends_on, d))).filter((item) => Boolean(item));
|
|
17939
18019
|
const downstream = getTaskDependents(task2.id, d).map((dep) => taskSummary(getTask(dep.task_id, d))).filter((item) => Boolean(item));
|
|
17940
18020
|
const comments = listComments(task2.id, d);
|
|
@@ -17977,6 +18057,9 @@ function createAgentContextPack(input, db) {
|
|
|
17977
18057
|
warnings.push(`${runs.length - selectedRuns.length} older runs omitted`);
|
|
17978
18058
|
if (fileMap.size > relevantFiles.length)
|
|
17979
18059
|
warnings.push(`${fileMap.size - relevantFiles.length} relevant files omitted`);
|
|
18060
|
+
if (totalPlanTasks > planTasks.length && plan) {
|
|
18061
|
+
warnings.push(`${totalPlanTasks - planTasks.length} plan tasks omitted (${totalPlanTasks} total); load more on demand with "todos plans --show ${plan.id}" and inspect task details with "todos show <task-id>" or "todos context-pack <task-id>"`);
|
|
18062
|
+
}
|
|
17980
18063
|
const contextTask = {
|
|
17981
18064
|
id: task2.id,
|
|
17982
18065
|
short_id: task2.short_id,
|
|
@@ -18008,8 +18091,9 @@ function createAgentContextPack(input, db) {
|
|
|
18008
18091
|
description: truncate2(plan.description, limit.max_text_chars),
|
|
18009
18092
|
status: plan.status,
|
|
18010
18093
|
agent_id: plan.agent_id,
|
|
18011
|
-
tasks: planTasks.
|
|
18012
|
-
|
|
18094
|
+
tasks: planTasks.map(taskSummary).filter((item) => Boolean(item)),
|
|
18095
|
+
total_tasks: totalPlanTasks,
|
|
18096
|
+
omitted_tasks: Math.max(0, totalPlanTasks - planTasks.length)
|
|
18013
18097
|
} : null,
|
|
18014
18098
|
acceptance_criteria: acceptanceCriteria(task2, limit.max_text_chars),
|
|
18015
18099
|
dependencies: {
|
|
@@ -18119,6 +18203,8 @@ ${pack.task.description}` : null,
|
|
|
18119
18203
|
"## Project And Plan",
|
|
18120
18204
|
pack.project ? `- Project: ${pack.project.name} (${pack.project.path})` : "- Project: none",
|
|
18121
18205
|
pack.plan ? `- Plan: ${pack.plan.name} (${pack.plan.status})` : "- Plan: none",
|
|
18206
|
+
pack.plan ? `- Plan tasks: ${pack.plan.tasks.length} shown of ${pack.plan.total_tasks} total (${pack.plan.omitted_tasks} omitted)` : null,
|
|
18207
|
+
pack.plan && pack.plan.omitted_tasks > 0 ? `- Load more on demand: \`todos plans --show ${pack.plan.id}\`; inspect one task with \`todos show <task-id>\` or \`todos context-pack <task-id>\`.` : null,
|
|
18122
18208
|
pack.plan && pack.plan.tasks.length > 0 ? bullet(pack.plan.tasks.map((task2) => `${task2.status} ${task2.short_id || task2.id.slice(0, 8)} ${task2.title}`)) : null,
|
|
18123
18209
|
"",
|
|
18124
18210
|
"## Acceptance Criteria",
|
|
@@ -19787,7 +19873,7 @@ function createReleaseCompatibilityReport(options = {}) {
|
|
|
19787
19873
|
"todos --help",
|
|
19788
19874
|
"todos-mcp --help",
|
|
19789
19875
|
"todos-serve --help",
|
|
19790
|
-
"todos doctor"
|
|
19876
|
+
"todos doctor --no-fail-on-findings"
|
|
19791
19877
|
],
|
|
19792
19878
|
smoke_tests: [
|
|
19793
19879
|
"command -v todos",
|
|
@@ -19795,7 +19881,7 @@ function createReleaseCompatibilityReport(options = {}) {
|
|
|
19795
19881
|
"command -v todos-serve",
|
|
19796
19882
|
"todos --version",
|
|
19797
19883
|
"todos --help",
|
|
19798
|
-
"todos doctor"
|
|
19884
|
+
"todos doctor --no-fail-on-findings"
|
|
19799
19885
|
],
|
|
19800
19886
|
rollback: [
|
|
19801
19887
|
"npm view @hasna/todos versions --json",
|
|
@@ -20289,12 +20375,11 @@ ${task2.description || ""}`.split(/\r?\n/);
|
|
|
20289
20375
|
function normalizeStackLocation(value) {
|
|
20290
20376
|
return value.replace(/:\d+(?::\d+)?/g, "").replace(/^file:\/\//, "").toLowerCase().trim();
|
|
20291
20377
|
}
|
|
20292
|
-
function
|
|
20378
|
+
function fingerprintContent(task2) {
|
|
20293
20379
|
const body = task2.description || "";
|
|
20294
20380
|
const text = `${task2.title}
|
|
20295
20381
|
${body}`;
|
|
20296
20382
|
return {
|
|
20297
|
-
task: task2,
|
|
20298
20383
|
title: normalizeText(task2.title),
|
|
20299
20384
|
body: normalizeText(body),
|
|
20300
20385
|
text: normalizeText(text),
|
|
@@ -20303,6 +20388,9 @@ ${body}`;
|
|
|
20303
20388
|
stackKeys: stackKeysFor(task2)
|
|
20304
20389
|
};
|
|
20305
20390
|
}
|
|
20391
|
+
function fingerprint(task2) {
|
|
20392
|
+
return { task: task2, ...fingerprintContent(task2) };
|
|
20393
|
+
}
|
|
20306
20394
|
function intersects(left, right) {
|
|
20307
20395
|
for (const value of left)
|
|
20308
20396
|
if (right.has(value))
|
package/dist/db/agent-names.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Database } from "bun:sqlite";
|
|
2
|
+
import { normalizeAgentNameInput } from "../lib/agent-name-normalize.js";
|
|
2
3
|
export declare class InvalidAgentNameError extends Error {
|
|
3
4
|
readonly suggestions: string[];
|
|
4
5
|
constructor(name: string, reason: string, suggestions?: string[]);
|
|
@@ -8,7 +9,7 @@ export declare const GREEK_AGENT_NAMES: readonly ["athena", "apollo", "artemis",
|
|
|
8
9
|
export declare const NICE_AGENT_NAMES: readonly ["atlas", "aurora", "ember", "nova", "orion", "rhea", "selene", "sirius", "vesper", "zephyr"];
|
|
9
10
|
export declare const EXTENDED_AGENT_NAMES: readonly ["agrippa", "antonius", "aurelian", "aurelius", "camillus", "cassius", "celer", "cincinnatus", "corvus", "drusus", "fabius", "faustus", "flaccus", "gallus", "gaius", "horatius", "lucius", "lucullus", "marius", "marcellus", "maximus", "nerva", "pompey", "quintus", "regulus", "romulus", "scipio", "seneca", "sertorius", "sulla", "tacitus", "varro", "vitruvius", "plato", "socrates", "aristotle", "heraclitus", "democritus", "pythagoras", "hipparchus", "euclid", "archimedes", "zeno", "anaximander", "epictetus", "aeschylus", "sophocles", "euripides", "xenophon", "diogenes"];
|
|
10
11
|
export declare const PREFERRED_AGENT_NAMES: readonly ["caesar", "augustus", "marcus", "brutus", "cicero", "cato", "nero", "claudius", "tiberius", "hadrian", "trajan", "vespasian", "domitian", "caligula", "commodus", "livia", "julia", "octavia", "claudia", "agrippina", "cornelia", "valeria", "fulvia", "hortensia", "fabia", "athena", "apollo", "artemis", "hera", "iris", "hector", "achilles", "odysseus", "theseus", "pericles", "solon", "sophia", "thalia", "calliope", "clio", "phoebe", "daphne", "leonidas", "andromeda", "cassander", "atlas", "aurora", "ember", "nova", "orion", "rhea", "selene", "sirius", "vesper", "zephyr", "agrippa", "antonius", "aurelian", "aurelius", "camillus", "cassius", "celer", "cincinnatus", "corvus", "drusus", "fabius", "faustus", "flaccus", "gallus", "gaius", "horatius", "lucius", "lucullus", "marius", "marcellus", "maximus", "nerva", "pompey", "quintus", "regulus", "romulus", "scipio", "seneca", "sertorius", "sulla", "tacitus", "varro", "vitruvius", "plato", "socrates", "aristotle", "heraclitus", "democritus", "pythagoras", "hipparchus", "euclid", "archimedes", "zeno", "anaximander", "epictetus", "aeschylus", "sophocles", "euripides", "xenophon", "diogenes"];
|
|
11
|
-
export
|
|
12
|
+
export { normalizeAgentNameInput };
|
|
12
13
|
export declare function hasGeneratedNumericSuffix(name: string): boolean;
|
|
13
14
|
export declare function isGenericAgentName(name: string): boolean;
|
|
14
15
|
export declare function isBlockedAgentName(name: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-names.d.ts","sourceRoot":"","sources":["../../src/db/agent-names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-names.d.ts","sourceRoot":"","sources":["../../src/db/agent-names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;gBAEnB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,EAAO;CAKrE;AAED,eAAO,MAAM,iBAAiB,yRA0BpB,CAAC;AAEX,eAAO,MAAM,iBAAiB,8NAqBpB,CAAC;AAEX,eAAO,MAAM,gBAAgB,wGAWnB,CAAC;AAEX,eAAO,MAAM,oBAAoB,wkBAmDvB,CAAC;AAEX,eAAO,MAAM,qBAAqB,soCAKxB,CAAC;AAsBX,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CASxD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxD;AAmFD,wBAAgB,iBAAiB,CAAC,aAAa,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,MAAM,EAAE,CAUhF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,MAAM,CAwB5F;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,CAAC,CAAC;IAChB,iBAAiB,EAAE,CAAC,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,QAAQ,GAAG,sBAAsB,EAAE,CA8BnF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC,eAAO,MAAM,mBAAmB,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AA6FtC,wBAAgB,eAAe,IAAI,MAAM,CAExC;AA2DD,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAarD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAQpC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,SAAa,GAAG,OAAO,CAKlF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAa,GAAG,MAAM,CAG3D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAGpD;AAQD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8E9F"}
|
package/dist/db/findings.d.ts
CHANGED
|
@@ -101,6 +101,7 @@ export interface ListTaskFindingsFilter {
|
|
|
101
101
|
source?: string;
|
|
102
102
|
limit?: number;
|
|
103
103
|
}
|
|
104
|
+
export declare function normalizeTaskFindingFingerprint(value: string): string;
|
|
104
105
|
export declare function upsertTaskFinding(input: UpsertTaskFindingInput, db?: Database): UpsertTaskFindingResult;
|
|
105
106
|
export declare function listTaskFindings(filter?: ListTaskFindingsFilter, db?: Database): TaskFinding[];
|
|
106
107
|
export declare function listCompactTaskFindings(filter?: ListTaskFindingsFilter, db?: Database): CompactTaskFinding[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../src/db/findings.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../src/db/findings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite executor for the shared referential-integrity conditions.
|
|
3
|
+
*
|
|
4
|
+
* The condition list, the severity rules and the verdict all live in
|
|
5
|
+
* `src/lib/integrity.ts` — this file only runs the SQLite rendering of each
|
|
6
|
+
* condition and wraps the rows. Keeping the semantics in one place is what stops
|
|
7
|
+
* a condition from being implemented for SQLite while a Postgres-backed
|
|
8
|
+
* deployment silently reports healthy.
|
|
9
|
+
*/
|
|
10
|
+
import type { Database } from "bun:sqlite";
|
|
11
|
+
import { type IntegrityReport } from "../lib/integrity.js";
|
|
12
|
+
/**
|
|
13
|
+
* Count every integrity condition against a local SQLite database.
|
|
14
|
+
*
|
|
15
|
+
* A missing table makes its conditions UNVERIFIED rather than zero: a database
|
|
16
|
+
* that predates `task_lists` has not been shown to be clean, it has only been
|
|
17
|
+
* shown to be unmeasurable.
|
|
18
|
+
*/
|
|
19
|
+
export declare function scanSqliteIntegrity(db?: Database): IntegrityReport;
|
|
20
|
+
//# sourceMappingURL=integrity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../../src/db/integrity.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAOL,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAQ7B;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,GAAE,QAAwB,GAAG,eAAe,CAoBjF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -270,6 +270,9 @@ export type { CreateLocalBackupOptions, LocalBackupBundle, LocalBackupManifest,
|
|
|
270
270
|
export { getLocalActivityTimeline } from "./lib/activity-timeline.js";
|
|
271
271
|
export type { LocalActivityTimelineEntityType, LocalActivityTimelineEntry, LocalActivityTimelineOptions, LocalActivityTimelineOrder, LocalActivityTimelinePage, LocalActivityTimelineSource, } from "./lib/activity-timeline.js";
|
|
272
272
|
export { runTodosDoctor } from "./lib/doctor.js";
|
|
273
|
+
export { INTEGRITY_CONDITIONS, OPEN_TASK_STATUSES, adoptRemoteIntegrityReport, TODOS_INTEGRITY_SCHEMA_VERSION, buildIntegrityReport, buildPostgresIntegritySql, buildSqliteIntegritySql, formatIntegrityMessage, integrityCondition, measureIntegrityRows, measuredCondition, resolveIntegritySeverity, summarizeIntegrity, unverifiedCondition, } from "./lib/integrity.js";
|
|
274
|
+
export type { IntegrityCondition, IntegrityConditionSpec, IntegrityEntity, IntegrityMeasurement, IntegrityReferenceKind, IntegrityReport, IntegrityRowSets, IntegritySeverity, IntegritySource, IntegritySummary, IntegrityTarget, IntegrityTaskListRow, IntegrityTaskRow, } from "./lib/integrity.js";
|
|
275
|
+
export { scanSqliteIntegrity } from "./db/integrity.js";
|
|
273
276
|
export type { DoctorBackup, DoctorCheck, DoctorRepair, DoctorResult, DoctorSeverity, DoctorSummary, RunTodosDoctorOptions, } from "./lib/doctor.js";
|
|
274
277
|
export { checkTaskDoneContract, getTaskContract, getTaskReview, recordTaskReview, requestTaskReview, setTaskContract, } from "./lib/task-contracts.js";
|
|
275
278
|
export type { RecordTaskReviewInput, RecordableTaskReviewState, RequestTaskReviewInput, SetTaskContractInput, TaskContract, TaskDoneContractResult, TaskReview, TaskReviewHistoryEntry, TaskReviewState, TaskRiskLevel, } from "./lib/task-contracts.js";
|
|
@@ -296,6 +299,6 @@ export type { CliCommandEntry, CliManual, CliOptionEntry, CompletionShell, } fro
|
|
|
296
299
|
export { formatDispatchMessage, formatSingleTask } from "./lib/dispatch-formatter.js";
|
|
297
300
|
export type { FormatOpts } from "./lib/dispatch-formatter.js";
|
|
298
301
|
export { parseTmuxTarget, formatTmuxTarget, validateTmuxTarget, sendToTmux, calculateDelay, DELAY_MIN, DELAY_MAX } from "./lib/tmux.js";
|
|
299
|
-
export { STORAGE_TABLES, TODOS_STORAGE_ENV, TODOS_STORAGE_FALLBACK_ENV, TODOS_STORAGE_TABLES, assertTodosRemoteStorageConfig, createLocalSqliteTodosStorageAdapter, createHybridTodosStorageAdapter, createPostgresTodosSyncStore, createPostgresTodosStorageAdapter, createTodosS3ArtifactStore, createTodosStorageAdapter, downloadRunArtifactsFromS3, exportSqliteTodosStorageSnapshot, getStorageDatabaseEnv, getStorageDatabaseUrl, getStorageMode, getTodosStorageDatabaseEnv, getTodosStorageDatabaseUrl, getTodosStorageEnvName, getTodosStorageMode, importSqliteTodosStorageSnapshot, isTodosRemoteStorageEnabled, loadStorageConfig, loadTodosStorageConfig, parseStorageMode, planRunArtifactsS3Sync, postgresTodosSyncSchemaSql, signAwsV4Request, uploadRunArtifactsToS3, buildS3ObjectKey, buildS3ObjectUrl, } from "./storage.js";
|
|
300
|
-
export type { CreatePostgresTodosSyncStoreOptions, CreatePostgresTodosStorageAdapterOptions, CreateTodosStorageAdapterOptions, CreateLocalSqliteTodosStorageAdapterOptions, CreateHybridTodosStorageAdapterOptions, DownloadRunArtifactsFromS3Options, HybridTodosRemoteSync, HybridTodosStorageAdapter, HybridTodosStorageSyncResult, PlanRunArtifactsS3SyncOptions, MaybePromise, PostgresTodosSyncPushResult, PullPostgresTodosSnapshotOptions, PutTodosS3ObjectInput, SignAwsV4RequestInput, SignedAwsV4Request, TodosAwsCredentials, TodosActiveWorkFilter, TodosAgentUpdateInput, TodosAgentStore, TodosAuditStore, TodosPlanStore, TodosProjectStore, TodosStorageAdapter, TodosStorageCapabilities, TodosStorageConfig, TodosStorageContext, TodosStorageEnv, TodosStorageImportResult, TodosStorageKind, TodosStorageMode, TodosStorageTable, TodosStorageSnapshot, TodosPostgresStorageConfig, TodosPostgresQueryClient, TodosPostgresQueryResult, TodosPostgresSyncRecordRow, TodosPostgresSyncRecordType, TodosS3ArtifactStore, TodosS3ArtifactStoreOptions, TodosS3StorageConfig, TodosS3ObjectRef, TodosRunArtifactRemoteRef, TodosRunArtifactSyncFilter, TodosRunArtifactSyncPlan, TodosRunArtifactSyncResult, TodosSyncStore, TodosSyncConfig, TodosTaskClaimFilter, TodosTaskCompletionOptions, TodosTaskFailureOptions, TodosTaskFailureResult, TodosTaskListStore, TodosTaskStore, TodosTemplateStore, UploadRunArtifactsToS3Options, } from "./storage.js";
|
|
302
|
+
export { STORAGE_TABLES, TODOS_STORAGE_ENV, TODOS_STORAGE_FALLBACK_ENV, TODOS_STORAGE_TABLES, assertTodosRemoteStorageConfig, createLocalSqliteTodosStorageAdapter, createHybridTodosStorageAdapter, createPostgresTodosSyncStore, createPostgresTodosStorageAdapter, createTodosS3ArtifactStore, createTodosStorageAdapter, downloadRunArtifactsFromS3, exportSqliteTodosStorageSnapshot, getStorageDatabaseEnv, getStorageDatabaseUrl, getStorageMode, getTodosStorageDatabaseEnv, getTodosStorageDatabaseUrl, getTodosStorageEnvName, getTodosStorageBackend, getTodosStorageMode, importSqliteTodosStorageSnapshot, isTodosPostgresBackend, isTodosRemoteStorageEnabled, loadStorageConfig, loadTodosStorageConfig, parseStorageBackend, parseStorageMode, planRunArtifactsS3Sync, postgresTodosSyncSchemaSql, signAwsV4Request, uploadRunArtifactsToS3, buildS3ObjectKey, buildS3ObjectUrl, } from "./storage.js";
|
|
303
|
+
export type { CreatePostgresTodosSyncStoreOptions, CreatePostgresTodosStorageAdapterOptions, CreateTodosStorageAdapterOptions, CreateLocalSqliteTodosStorageAdapterOptions, CreateHybridTodosStorageAdapterOptions, DownloadRunArtifactsFromS3Options, HybridTodosRemoteSync, HybridTodosStorageAdapter, HybridTodosStorageSyncResult, PlanRunArtifactsS3SyncOptions, MaybePromise, PostgresTodosSyncPushResult, PullPostgresTodosSnapshotOptions, PutTodosS3ObjectInput, SignAwsV4RequestInput, SignedAwsV4Request, TodosAwsCredentials, TodosActiveWorkFilter, TodosAgentUpdateInput, TodosAgentStore, TodosAuditStore, TodosPlanStore, TodosProjectStore, TodosStorageAdapter, TodosStorageCapabilities, TodosStorageConfig, TodosStorageContext, TodosStorageEnv, TodosStorageImportResult, TodosStorageKind, TodosStorageBackend, TodosStorageMode, TodosStorageTable, TodosStorageSnapshot, TodosPostgresStorageConfig, TodosPostgresQueryClient, TodosPostgresQueryResult, TodosPostgresSyncRecordRow, TodosPostgresSyncRecordType, TodosS3ArtifactStore, TodosS3ArtifactStoreOptions, TodosS3StorageConfig, TodosS3ObjectRef, TodosRunArtifactRemoteRef, TodosRunArtifactSyncFilter, TodosRunArtifactSyncPlan, TodosRunArtifactSyncResult, TodosSyncStore, TodosSyncConfig, TodosTaskClaimFilter, TodosTaskCompletionOptions, TodosTaskFailureOptions, TodosTaskFailureResult, TodosTaskListStore, TodosTaskStore, TodosTemplateStore, UploadRunArtifactsToS3Options, } from "./storage.js";
|
|
301
304
|
//# sourceMappingURL=index.d.ts.map
|