@cleocode/core 2026.9.16 → 2026.9.18
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/changesets/parser.d.ts.map +1 -1
- package/dist/changesets/parser.js +67 -0
- package/dist/changesets/parser.js.map +1 -1
- package/dist/crypto/credentials.d.ts +128 -26
- package/dist/crypto/credentials.d.ts.map +1 -1
- package/dist/crypto/credentials.js +183 -142
- package/dist/crypto/credentials.js.map +1 -1
- package/dist/docs/export-document.js +14705 -12949
- package/dist/docs/export-document.js.map +3 -3
- package/dist/doctor/index.d.ts +1 -1
- package/dist/doctor/index.d.ts.map +1 -1
- package/dist/doctor/index.js +1 -1
- package/dist/doctor/index.js.map +1 -1
- package/dist/doctor/nexus-schema-residency.d.ts +1 -1
- package/dist/doctor/nexus-schema-residency.d.ts.map +1 -1
- package/dist/doctor/nexus-schema-residency.js +1 -0
- package/dist/doctor/nexus-schema-residency.js.map +1 -1
- package/dist/doctor/project-identity.d.ts +124 -0
- package/dist/doctor/project-identity.d.ts.map +1 -0
- package/dist/doctor/project-identity.js +307 -0
- package/dist/doctor/project-identity.js.map +1 -0
- package/dist/doctor/superseded-store.d.ts +8 -0
- package/dist/doctor/superseded-store.d.ts.map +1 -1
- package/dist/doctor/superseded-store.js +48 -3
- package/dist/doctor/superseded-store.js.map +1 -1
- package/dist/init.d.ts +7 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +17 -2
- package/dist/init.js.map +1 -1
- package/dist/internal.d.ts +6 -3
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +4 -2
- package/dist/internal.js.map +1 -1
- package/dist/llm/credentials-store.d.ts +10 -0
- package/dist/llm/credentials-store.d.ts.map +1 -1
- package/dist/llm/credentials-store.js +7 -1
- package/dist/llm/credentials-store.js.map +1 -1
- package/dist/llm/plugin-facade.js +13368 -1550
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/nexus/analyze-orchestrator.d.ts +20 -3
- package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
- package/dist/nexus/analyze-orchestrator.js +210 -16
- package/dist/nexus/analyze-orchestrator.js.map +1 -1
- package/dist/nexus/assessment-store.d.ts +86 -0
- package/dist/nexus/assessment-store.d.ts.map +1 -0
- package/dist/nexus/assessment-store.js +113 -0
- package/dist/nexus/assessment-store.js.map +1 -0
- package/dist/nexus/freshness.d.ts +131 -0
- package/dist/nexus/freshness.d.ts.map +1 -0
- package/dist/nexus/freshness.js +391 -0
- package/dist/nexus/freshness.js.map +1 -0
- package/dist/nexus/graph-manifest.d.ts +88 -0
- package/dist/nexus/graph-manifest.d.ts.map +1 -0
- package/dist/nexus/graph-manifest.js +114 -0
- package/dist/nexus/graph-manifest.js.map +1 -0
- package/dist/nexus/knowledge.d.ts +21 -1
- package/dist/nexus/knowledge.d.ts.map +1 -1
- package/dist/nexus/knowledge.js +74 -37
- package/dist/nexus/knowledge.js.map +1 -1
- package/dist/nexus/path-map.d.ts +55 -0
- package/dist/nexus/path-map.d.ts.map +1 -0
- package/dist/nexus/path-map.js +87 -0
- package/dist/nexus/path-map.js.map +1 -0
- package/dist/nexus/projects-clean.d.ts +21 -28
- package/dist/nexus/projects-clean.d.ts.map +1 -1
- package/dist/nexus/projects-clean.js +168 -85
- package/dist/nexus/projects-clean.js.map +1 -1
- package/dist/nexus/query.d.ts.map +1 -1
- package/dist/nexus/query.js +3 -2
- package/dist/nexus/query.js.map +1 -1
- package/dist/nexus/registry-hygiene.d.ts +70 -0
- package/dist/nexus/registry-hygiene.d.ts.map +1 -0
- package/dist/nexus/registry-hygiene.js +113 -0
- package/dist/nexus/registry-hygiene.js.map +1 -0
- package/dist/nexus/registry.d.ts +2 -2
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +48 -12
- package/dist/nexus/registry.js.map +1 -1
- package/dist/paths.d.ts +26 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +99 -6
- package/dist/paths.js.map +1 -1
- package/dist/release/index.d.ts +1 -1
- package/dist/release/index.d.ts.map +1 -1
- package/dist/release/index.js.map +1 -1
- package/dist/release/plan.d.ts +84 -2
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +61 -14
- package/dist/release/plan.js.map +1 -1
- package/dist/release/pr-evidence.d.ts +81 -1
- package/dist/release/pr-evidence.d.ts.map +1 -1
- package/dist/release/pr-evidence.js +149 -9
- package/dist/release/pr-evidence.js.map +1 -1
- package/dist/render/nexus/graph/index.d.ts.map +1 -1
- package/dist/render/nexus/graph/index.js +8 -0
- package/dist/render/nexus/graph/index.js.map +1 -1
- package/dist/scaffold/ensure-config.d.ts +12 -3
- package/dist/scaffold/ensure-config.d.ts.map +1 -1
- package/dist/scaffold/ensure-config.js +61 -38
- package/dist/scaffold/ensure-config.js.map +1 -1
- package/dist/scaffold/project-identity.d.ts +136 -0
- package/dist/scaffold/project-identity.d.ts.map +1 -0
- package/dist/scaffold/project-identity.js +225 -0
- package/dist/scaffold/project-identity.js.map +1 -0
- package/dist/selfimprove/fix-gen.js +13319 -1556
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/store/agent-api-key.d.ts +114 -0
- package/dist/store/agent-api-key.d.ts.map +1 -0
- package/dist/store/agent-api-key.js +136 -0
- package/dist/store/agent-api-key.js.map +1 -0
- package/dist/store/agent-registry-accessor.d.ts +4 -2
- package/dist/store/agent-registry-accessor.d.ts.map +1 -1
- package/dist/store/agent-registry-accessor.js +39 -89
- package/dist/store/agent-registry-accessor.js.map +1 -1
- package/dist/store/api-key-kdf.d.ts +7 -0
- package/dist/store/api-key-kdf.d.ts.map +1 -1
- package/dist/store/api-key-kdf.js +7 -0
- package/dist/store/api-key-kdf.js.map +1 -1
- package/dist/store/backup-crypto.d.ts +49 -0
- package/dist/store/backup-crypto.d.ts.map +1 -1
- package/dist/store/backup-crypto.js +154 -0
- package/dist/store/backup-crypto.js.map +1 -1
- package/dist/store/credential-transfer.d.ts +303 -0
- package/dist/store/credential-transfer.d.ts.map +1 -0
- package/dist/store/credential-transfer.js +774 -0
- package/dist/store/credential-transfer.js.map +1 -0
- package/dist/store/exodus/column-transforms.d.ts +79 -4
- package/dist/store/exodus/column-transforms.d.ts.map +1 -1
- package/dist/store/exodus/column-transforms.js +121 -4
- package/dist/store/exodus/column-transforms.js.map +1 -1
- package/dist/store/exodus/index.d.ts +1 -0
- package/dist/store/exodus/index.d.ts.map +1 -1
- package/dist/store/exodus/index.js +1 -0
- package/dist/store/exodus/index.js.map +1 -1
- package/dist/store/exodus/migrate.d.ts +17 -1
- package/dist/store/exodus/migrate.d.ts.map +1 -1
- package/dist/store/exodus/migrate.js +155 -33
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/on-open.d.ts +14 -0
- package/dist/store/exodus/on-open.d.ts.map +1 -1
- package/dist/store/exodus/on-open.js +115 -6
- package/dist/store/exodus/on-open.js.map +1 -1
- package/dist/store/exodus/reconcile.d.ts +103 -0
- package/dist/store/exodus/reconcile.d.ts.map +1 -0
- package/dist/store/exodus/reconcile.js +728 -0
- package/dist/store/exodus/reconcile.js.map +1 -0
- package/dist/store/exodus/recovery.d.ts.map +1 -1
- package/dist/store/exodus/recovery.js +14 -2
- package/dist/store/exodus/recovery.js.map +1 -1
- package/dist/store/exodus/runtime-targets.d.ts +39 -0
- package/dist/store/exodus/runtime-targets.d.ts.map +1 -0
- package/dist/store/exodus/runtime-targets.js +63 -0
- package/dist/store/exodus/runtime-targets.js.map +1 -0
- package/dist/store/exodus/table-name-map.d.ts.map +1 -1
- package/dist/store/exodus/table-name-map.js +5 -0
- package/dist/store/exodus/table-name-map.js.map +1 -1
- package/dist/store/exodus/table-order.d.ts +35 -0
- package/dist/store/exodus/table-order.d.ts.map +1 -0
- package/dist/store/exodus/table-order.js +62 -0
- package/dist/store/exodus/table-order.js.map +1 -0
- package/dist/store/exodus/verify-migration.d.ts +4 -1
- package/dist/store/exodus/verify-migration.d.ts.map +1 -1
- package/dist/store/exodus/verify-migration.js +142 -10
- package/dist/store/exodus/verify-migration.js.map +1 -1
- package/dist/store/global-salt.d.ts +16 -0
- package/dist/store/global-salt.d.ts.map +1 -1
- package/dist/store/global-salt.js +22 -7
- package/dist/store/global-salt.js.map +1 -1
- package/dist/store/legacy-tasks-lineage.d.ts +86 -0
- package/dist/store/legacy-tasks-lineage.d.ts.map +1 -0
- package/dist/store/legacy-tasks-lineage.js +285 -0
- package/dist/store/legacy-tasks-lineage.js.map +1 -0
- package/dist/store/migration-manager.d.ts +27 -0
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +63 -0
- package/dist/store/migration-manager.js.map +1 -1
- package/dist/store/portable-bundle-import.d.ts +117 -0
- package/dist/store/portable-bundle-import.d.ts.map +1 -0
- package/dist/store/portable-bundle-import.js +589 -0
- package/dist/store/portable-bundle-import.js.map +1 -0
- package/dist/store/portable-bundle-relocate.d.ts +66 -0
- package/dist/store/portable-bundle-relocate.d.ts.map +1 -0
- package/dist/store/portable-bundle-relocate.js +304 -0
- package/dist/store/portable-bundle-relocate.js.map +1 -0
- package/dist/store/portable-bundle-scan.d.ts +167 -0
- package/dist/store/portable-bundle-scan.d.ts.map +1 -0
- package/dist/store/portable-bundle-scan.js +569 -0
- package/dist/store/portable-bundle-scan.js.map +1 -0
- package/dist/store/portable-bundle.d.ts +146 -0
- package/dist/store/portable-bundle.d.ts.map +1 -0
- package/dist/store/portable-bundle.js +674 -0
- package/dist/store/portable-bundle.js.map +1 -0
- package/dist/store/regenerators.d.ts +3 -1
- package/dist/store/regenerators.d.ts.map +1 -1
- package/dist/store/regenerators.js +6 -2
- package/dist/store/regenerators.js.map +1 -1
- package/dist/store/schema/cleo-global/nexus.d.ts +98 -0
- package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/nexus.js +19 -0
- package/dist/store/schema/cleo-global/nexus.js.map +1 -1
- package/dist/store/schema/nexus-schema.d.ts +102 -0
- package/dist/store/schema/nexus-schema.d.ts.map +1 -1
- package/dist/store/schema/nexus-schema.js +24 -0
- package/dist/store/schema/nexus-schema.js.map +1 -1
- package/dist/store/split-brain-import.d.ts +176 -0
- package/dist/store/split-brain-import.d.ts.map +1 -0
- package/dist/store/split-brain-import.js +680 -0
- package/dist/store/split-brain-import.js.map +1 -0
- package/dist/store/sqlite.d.ts +29 -0
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +57 -5
- package/dist/store/sqlite.js.map +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +30 -5
- package/dist/system/health.js.map +1 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +5 -27
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/evidence.js +1 -1
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/verification-policy.d.ts +55 -0
- package/dist/tasks/verification-policy.d.ts.map +1 -0
- package/dist/tasks/verification-policy.js +75 -0
- package/dist/tasks/verification-policy.js.map +1 -0
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +60 -0
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/doctor/checks.d.ts +14 -0
- package/dist/validation/doctor/checks.d.ts.map +1 -1
- package/dist/validation/doctor/checks.js +33 -0
- package/dist/validation/doctor/checks.js.map +1 -1
- package/migrations/drizzle-cleo-global/20260924000000_t12354-project-paths/migration.sql +40 -0
- package/migrations/drizzle-nexus/20260924000000_t12315-nexus-parse-cache/migration.sql +21 -0
- package/package.json +13 -13
- package/templates/CLEO-INJECTION.md +3 -3
- package/templates/cleo-gitignore +7 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device-local project path map (`nexus_project_paths`).
|
|
3
|
+
*
|
|
4
|
+
* The registry row is keyed by the immutable `project_id` (ADR-094), so its
|
|
5
|
+
* `project_path` names one checkout — the one encountered most recently. The
|
|
6
|
+
* path map records EVERY checkout of a project on this device, keyed by path,
|
|
7
|
+
* so two checkouts of one project coexist instead of fighting over one row.
|
|
8
|
+
*
|
|
9
|
+
* Every writer that records a checkout in the registry records it here in the
|
|
10
|
+
* same transaction: encounter registration, `nexusRegister`, `nexusReconcile`
|
|
11
|
+
* and `nexusMoveProject`. Rows whose directory is gone are pruned when their
|
|
12
|
+
* project is next recorded, so a move leaves one checkout, not two.
|
|
13
|
+
*
|
|
14
|
+
* @task T12354
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync } from 'node:fs';
|
|
17
|
+
import { and, desc, eq, ne } from 'drizzle-orm';
|
|
18
|
+
import { projectPaths } from '../store/schema/nexus-schema.js';
|
|
19
|
+
/**
|
|
20
|
+
* Record a checkout in the path map and prune this project's vanished paths.
|
|
21
|
+
*
|
|
22
|
+
* A path belongs to exactly one project, so recording it re-points a row that
|
|
23
|
+
* previously named another project. Runs synchronously so it composes with the
|
|
24
|
+
* registry writers' immediate transactions.
|
|
25
|
+
*
|
|
26
|
+
* @param db - Registry handle or transaction.
|
|
27
|
+
* @param record - The checkout encountered.
|
|
28
|
+
* @returns Number of vanished checkouts pruned for this project.
|
|
29
|
+
*/
|
|
30
|
+
export function recordProjectCheckout(db, record) {
|
|
31
|
+
db.insert(projectPaths)
|
|
32
|
+
.values({
|
|
33
|
+
projectPath: record.projectPath,
|
|
34
|
+
projectId: record.projectId,
|
|
35
|
+
projectHash: record.projectHash,
|
|
36
|
+
firstSeen: record.now,
|
|
37
|
+
lastSeen: record.now,
|
|
38
|
+
})
|
|
39
|
+
.onConflictDoUpdate({
|
|
40
|
+
target: projectPaths.projectPath,
|
|
41
|
+
set: { projectId: record.projectId, projectHash: record.projectHash, lastSeen: record.now },
|
|
42
|
+
})
|
|
43
|
+
.run();
|
|
44
|
+
const siblings = db
|
|
45
|
+
.select({ projectPath: projectPaths.projectPath })
|
|
46
|
+
.from(projectPaths)
|
|
47
|
+
.where(and(eq(projectPaths.projectId, record.projectId), ne(projectPaths.projectPath, record.projectPath)))
|
|
48
|
+
.all();
|
|
49
|
+
let pruned = 0;
|
|
50
|
+
for (const sibling of siblings) {
|
|
51
|
+
if (existsSync(sibling.projectPath))
|
|
52
|
+
continue;
|
|
53
|
+
db.delete(projectPaths).where(eq(projectPaths.projectPath, sibling.projectPath)).run();
|
|
54
|
+
pruned++;
|
|
55
|
+
}
|
|
56
|
+
return pruned;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* List every recorded checkout of a project on this device, newest first.
|
|
60
|
+
*
|
|
61
|
+
* @param projectId - Immutable project id.
|
|
62
|
+
* @returns Checkouts with an `exists` flag; a vanished one stays listed until
|
|
63
|
+
* the project is next recorded.
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const checkouts = await listProjectCheckouts(projectId);
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export async function listProjectCheckouts(projectId) {
|
|
70
|
+
const { getNexusRegistryDb } = await import('../store/nexus-sqlite.js');
|
|
71
|
+
const { getCleoHome } = await import('../paths.js');
|
|
72
|
+
const db = await getNexusRegistryDb(getCleoHome());
|
|
73
|
+
return db
|
|
74
|
+
.select()
|
|
75
|
+
.from(projectPaths)
|
|
76
|
+
.where(eq(projectPaths.projectId, projectId))
|
|
77
|
+
.orderBy(desc(projectPaths.lastSeen))
|
|
78
|
+
.all()
|
|
79
|
+
.map((row) => ({
|
|
80
|
+
projectPath: row.projectPath,
|
|
81
|
+
projectHash: row.projectHash,
|
|
82
|
+
firstSeen: row.firstSeen,
|
|
83
|
+
lastSeen: row.lastSeen,
|
|
84
|
+
exists: existsSync(row.projectPath),
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=path-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-map.js","sourceRoot":"","sources":["../../src/nexus/path-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAiB/D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAiB,EAAE,MAA6B;IACpF,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;SACpB,MAAM,CAAC;QACN,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,SAAS,EAAE,MAAM,CAAC,GAAG;QACrB,QAAQ,EAAE,MAAM,CAAC,GAAG;KACrB,CAAC;SACD,kBAAkB,CAAC;QAClB,MAAM,EAAE,YAAY,CAAC,WAAW;QAChC,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE;KAC5F,CAAC;SACD,GAAG,EAAE,CAAC;IAET,MAAM,QAAQ,GAAG,EAAE;SAChB,MAAM,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,WAAW,EAAE,CAAC;SACjD,IAAI,CAAC,YAAY,CAAC;SAClB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,EAC5C,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CACjD,CACF;SACA,GAAG,EAAE,CAAC;IACT,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC;YAAE,SAAS;QAC9C,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACvF,MAAM,EAAE,CAAC;IACX,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,SAAiB;IAC1D,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACxE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,OAAO,EAAE;SACN,MAAM,EAAE;SACR,IAAI,CAAC,YAAY,CAAC;SAClB,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SAC5C,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;SACpC,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACb,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;KACpC,CAAC,CAAC,CAAC;AACR,CAAC"}
|
|
@@ -4,8 +4,15 @@
|
|
|
4
4
|
* Purges project_registry rows matching configurable path/status criteria.
|
|
5
5
|
* Supports dry-run mode and returns a summary result.
|
|
6
6
|
*
|
|
7
|
+
* T12324: every run classifies the whole registry (missing path, temp path,
|
|
8
|
+
* test path), and an applied run removes the matched rows together with their
|
|
9
|
+
* `nexus_project_id_aliases` rows and a `nexus_audit_log` receipt in ONE
|
|
10
|
+
* transaction on the GLOBAL registry store — the store `--vacuum` compacts.
|
|
11
|
+
*
|
|
7
12
|
* @task T1473
|
|
13
|
+
* @task T12324
|
|
8
14
|
*/
|
|
15
|
+
import type { NexusProjectsCleanResult } from '@cleocode/contracts';
|
|
9
16
|
import { type EngineResult } from '../engine-result.js';
|
|
10
17
|
/** Thrown when no filter criteria are provided to cleanProjects. */
|
|
11
18
|
export declare class NoCriteriaError extends Error {
|
|
@@ -25,9 +32,9 @@ export interface CleanProjectsOptions {
|
|
|
25
32
|
dryRun: boolean;
|
|
26
33
|
/** JS regex pattern matched against project_path. */
|
|
27
34
|
pattern?: string;
|
|
28
|
-
/** Match paths containing a .temp/ segment. */
|
|
35
|
+
/** Match paths containing a .temp/ segment or under the OS temp directory (T12324). */
|
|
29
36
|
includeTemp?: boolean;
|
|
30
|
-
/** Match paths containing tmp/test/fixture/scratch/sandbox segments. */
|
|
37
|
+
/** Match paths containing tmp/test(s)/__tests__/fixture(s)/scratch/sandbox segments. */
|
|
31
38
|
includeTests?: boolean;
|
|
32
39
|
/** Match rows where health_status is 'unhealthy'. */
|
|
33
40
|
matchUnhealthy?: boolean;
|
|
@@ -43,7 +50,7 @@ export interface CleanProjectsOptions {
|
|
|
43
50
|
matchPolluted?: boolean;
|
|
44
51
|
/** After DB delete, `rm -rf` each matched path that still exists on disk (T9117). */
|
|
45
52
|
removeFs?: boolean;
|
|
46
|
-
/** After
|
|
53
|
+
/** After delete, VACUUM the GLOBAL registry store to reclaim space (T9117 · T12324). */
|
|
47
54
|
vacuum?: boolean;
|
|
48
55
|
/**
|
|
49
56
|
* When matchPolluted is set and dryRun is false, write an audit JSONL to
|
|
@@ -51,37 +58,23 @@ export interface CleanProjectsOptions {
|
|
|
51
58
|
*/
|
|
52
59
|
auditLog?: boolean;
|
|
53
60
|
}
|
|
54
|
-
/** Result envelope for {@link cleanProjects}. */
|
|
55
|
-
export
|
|
56
|
-
/** Whether this was a dry-run (no deletions performed). */
|
|
57
|
-
dryRun: boolean;
|
|
58
|
-
/** Number of rows matching criteria. */
|
|
59
|
-
matched: number;
|
|
60
|
-
/** Number of rows actually deleted (0 when dryRun is true). */
|
|
61
|
-
purged: number;
|
|
62
|
-
/** Rows remaining after deletion. */
|
|
63
|
-
remaining: number;
|
|
64
|
-
/** Sample of matched project paths (first 10). */
|
|
65
|
-
sample: string[];
|
|
66
|
-
/** Total registry rows scanned. */
|
|
67
|
-
totalCount: number;
|
|
68
|
-
/** Number of on-disk paths successfully removed when `removeFs` is set (T9117). */
|
|
69
|
-
fsRemoved?: number;
|
|
70
|
-
/** Number of on-disk paths that failed to remove when `removeFs` is set (T9117). */
|
|
71
|
-
fsFailed?: number;
|
|
72
|
-
/** Bytes freed by VACUUM when `vacuum` is set (T9117). */
|
|
73
|
-
vacuumBytesFreed?: number;
|
|
74
|
-
}
|
|
61
|
+
/** Result envelope for {@link cleanProjects} (contract: `NexusProjectsCleanResult`). */
|
|
62
|
+
export type CleanProjectsResult = NexusProjectsCleanResult;
|
|
75
63
|
/**
|
|
76
64
|
* Bulk-purge project registry rows matching configurable criteria.
|
|
77
65
|
*
|
|
78
66
|
* At least one of `pattern`, `includeTemp`, `includeTests`, `matchUnhealthy`,
|
|
79
|
-
* or `
|
|
80
|
-
* If `pattern` is set but invalid,
|
|
81
|
-
* When `dryRun` is true, performs only a
|
|
67
|
+
* `matchNeverIndexed`, `matchOrphaned` or `matchPolluted` must be set —
|
|
68
|
+
* otherwise throws {@link NoCriteriaError}. If `pattern` is set but invalid,
|
|
69
|
+
* throws {@link InvalidPatternError}. When `dryRun` is true, performs only a
|
|
70
|
+
* preview scan with no deletions; the classification is reported either way.
|
|
71
|
+
*
|
|
72
|
+
* An applied run opens the GLOBAL registry store directly and, in one
|
|
73
|
+
* transaction, deletes the matched rows, every alias pointing at them, any
|
|
74
|
+
* pre-existing orphan alias, and writes the audit receipt.
|
|
82
75
|
*
|
|
83
76
|
* @param opts - Clean options.
|
|
84
|
-
* @returns Clean result with match count and
|
|
77
|
+
* @returns Clean result with match count, classification, and receipt.
|
|
85
78
|
* @throws {NoCriteriaError} When no filter criteria are provided.
|
|
86
79
|
* @throws {InvalidPatternError} When `opts.pattern` is not a valid regex.
|
|
87
80
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects-clean.d.ts","sourceRoot":"","sources":["../../src/nexus/projects-clean.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"projects-clean.d.ts","sourceRoot":"","sources":["../../src/nexus/projects-clean.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,KAAK,EAIV,wBAAwB,EAEzB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,KAAK,YAAY,EAA8B,MAAM,qBAAqB,CAAC;AAIpF,oEAAoE;AACpE,qBAAa,eAAgB,SAAQ,KAAK;IACxC,gBAAgB;IAChB,SAAkB,IAAI,qBAAqB;;CAQ5C;AAED,qDAAqD;AACrD,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,gBAAgB;IAChB,SAAkB,IAAI,yBAAyB;gBAEnC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAK5C;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,MAAM,EAAE,OAAO,CAAC;IAChB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wFAAwF;IACxF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qDAAqD;IACrD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wFAAwF;IACxF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wFAAwF;AACxF,MAAM,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAuC3D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0S5F;AAGD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAgC7C"}
|
|
@@ -4,12 +4,22 @@
|
|
|
4
4
|
* Purges project_registry rows matching configurable path/status criteria.
|
|
5
5
|
* Supports dry-run mode and returns a summary result.
|
|
6
6
|
*
|
|
7
|
+
* T12324: every run classifies the whole registry (missing path, temp path,
|
|
8
|
+
* test path), and an applied run removes the matched rows together with their
|
|
9
|
+
* `nexus_project_id_aliases` rows and a `nexus_audit_log` receipt in ONE
|
|
10
|
+
* transaction on the GLOBAL registry store — the store `--vacuum` compacts.
|
|
11
|
+
*
|
|
7
12
|
* @task T1473
|
|
13
|
+
* @task T12324
|
|
8
14
|
*/
|
|
15
|
+
import { randomUUID } from 'node:crypto';
|
|
9
16
|
import { existsSync, statSync } from 'node:fs';
|
|
10
17
|
import { rm } from 'node:fs/promises';
|
|
11
18
|
import path from 'node:path';
|
|
19
|
+
import { inArray, sql } from 'drizzle-orm';
|
|
12
20
|
import { engineError, engineSuccess } from '../engine-result.js';
|
|
21
|
+
import { getCleoHome } from '../paths.js';
|
|
22
|
+
import { isEphemeralPath } from './registry-hygiene.js';
|
|
13
23
|
/** Thrown when no filter criteria are provided to cleanProjects. */
|
|
14
24
|
export class NoCriteriaError extends Error {
|
|
15
25
|
/** @override */
|
|
@@ -28,23 +38,43 @@ export class InvalidPatternError extends Error {
|
|
|
28
38
|
}
|
|
29
39
|
}
|
|
30
40
|
const TEMP_RE = /(^|\/)\.temp(\/|$)/;
|
|
31
|
-
|
|
41
|
+
// T12324: `__tests__` and plural `tests`/`fixtures` are fixture homes too.
|
|
42
|
+
const TESTS_RE = /(^|\/)(tmp|tests?|__tests__|fixtures?|scratch|sandbox)(\/|$)/;
|
|
32
43
|
function portablePathForMatch(p) {
|
|
33
44
|
return p.replace(/\\/g, '/');
|
|
34
45
|
}
|
|
35
46
|
function pathSegmentCount(p) {
|
|
36
47
|
return portablePathForMatch(p).split('/').filter(Boolean).length;
|
|
37
48
|
}
|
|
49
|
+
/** Report whether a registry path is temp-like (`.temp/` segment or OS temp root). */
|
|
50
|
+
function isTempPath(projectPath) {
|
|
51
|
+
return TEMP_RE.test(portablePathForMatch(projectPath)) || isEphemeralPath(projectPath);
|
|
52
|
+
}
|
|
53
|
+
/** Report whether a registry path carries a test-fixture segment. */
|
|
54
|
+
function isTestPath(projectPath) {
|
|
55
|
+
return TESTS_RE.test(portablePathForMatch(projectPath));
|
|
56
|
+
}
|
|
57
|
+
/** Total bytes of the store's pages, read before and after VACUUM. */
|
|
58
|
+
function storeBytes(db) {
|
|
59
|
+
const pages = db.get(sql `PRAGMA page_count`).page_count;
|
|
60
|
+
const size = db.get(sql `PRAGMA page_size`).page_size;
|
|
61
|
+
return pages * size;
|
|
62
|
+
}
|
|
38
63
|
/**
|
|
39
64
|
* Bulk-purge project registry rows matching configurable criteria.
|
|
40
65
|
*
|
|
41
66
|
* At least one of `pattern`, `includeTemp`, `includeTests`, `matchUnhealthy`,
|
|
42
|
-
* or `
|
|
43
|
-
* If `pattern` is set but invalid,
|
|
44
|
-
* When `dryRun` is true, performs only a
|
|
67
|
+
* `matchNeverIndexed`, `matchOrphaned` or `matchPolluted` must be set —
|
|
68
|
+
* otherwise throws {@link NoCriteriaError}. If `pattern` is set but invalid,
|
|
69
|
+
* throws {@link InvalidPatternError}. When `dryRun` is true, performs only a
|
|
70
|
+
* preview scan with no deletions; the classification is reported either way.
|
|
71
|
+
*
|
|
72
|
+
* An applied run opens the GLOBAL registry store directly and, in one
|
|
73
|
+
* transaction, deletes the matched rows, every alias pointing at them, any
|
|
74
|
+
* pre-existing orphan alias, and writes the audit receipt.
|
|
45
75
|
*
|
|
46
76
|
* @param opts - Clean options.
|
|
47
|
-
* @returns Clean result with match count and
|
|
77
|
+
* @returns Clean result with match count, classification, and receipt.
|
|
48
78
|
* @throws {NoCriteriaError} When no filter criteria are provided.
|
|
49
79
|
* @throws {InvalidPatternError} When `opts.pattern` is not a valid regex.
|
|
50
80
|
*
|
|
@@ -72,38 +102,23 @@ export async function cleanProjects(opts) {
|
|
|
72
102
|
throw new InvalidPatternError(opts.pattern, err);
|
|
73
103
|
}
|
|
74
104
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (opts.includeTests && TESTS_RE.test(normalizedProjectPath))
|
|
85
|
-
return true;
|
|
86
|
-
if (opts.matchUnhealthy && healthStatus === 'unhealthy')
|
|
87
|
-
return true;
|
|
88
|
-
if (opts.matchNeverIndexed && lastIndexed === null)
|
|
89
|
-
return true;
|
|
90
|
-
if (opts.matchOrphaned && !existsSync(projectPath))
|
|
91
|
-
return true;
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
95
|
-
const { projectRegistry: regTable, nexusAuditLog: auditTable } = await import('../store/schema/nexus-schema.js');
|
|
96
|
-
const { randomUUID } = await import('node:crypto');
|
|
97
|
-
const { inArray, sql } = await import('drizzle-orm');
|
|
98
|
-
const db = await getNexusDb();
|
|
99
|
-
const allRows = (await db
|
|
105
|
+
const { getNexusRegistryDb, getNexusRegistryDbPath } = await import('../store/nexus-sqlite.js');
|
|
106
|
+
const { projectRegistry: regTable, projectIdAliases: aliasTable, projectPaths: pathTable, nexusAuditLog: auditTable, } = await import('../store/schema/nexus-schema.js');
|
|
107
|
+
// T12324: the registry lives in the GLOBAL store. Opening it directly (not
|
|
108
|
+
// through the project handle's ATTACH) makes `VACUUM` compact the store the
|
|
109
|
+
// rows were deleted from.
|
|
110
|
+
const cleoHome = getCleoHome();
|
|
111
|
+
const storePath = getNexusRegistryDbPath(cleoHome);
|
|
112
|
+
const db = await getNexusRegistryDb(cleoHome);
|
|
113
|
+
const allRows = db
|
|
100
114
|
.select({
|
|
101
115
|
projectId: regTable.projectId,
|
|
102
116
|
projectPath: regTable.projectPath,
|
|
103
117
|
healthStatus: regTable.healthStatus,
|
|
104
118
|
lastIndexed: regTable.lastIndexed,
|
|
105
119
|
})
|
|
106
|
-
.from(regTable)
|
|
120
|
+
.from(regTable)
|
|
121
|
+
.all();
|
|
107
122
|
const pollutedIds = new Set();
|
|
108
123
|
if (opts.matchPolluted) {
|
|
109
124
|
// Group rows by canonicalProjectId. The canonical ID uses git-root+realpath
|
|
@@ -141,11 +156,61 @@ export async function cleanProjects(opts) {
|
|
|
141
156
|
}
|
|
142
157
|
}
|
|
143
158
|
}
|
|
144
|
-
const
|
|
145
|
-
|
|
159
|
+
const registryIds = new Set(allRows.map((row) => row.projectId));
|
|
160
|
+
const aliasRows = db
|
|
161
|
+
.select({ legacyId: aliasTable.legacyId, canonicalId: aliasTable.canonicalId })
|
|
162
|
+
.from(aliasTable)
|
|
163
|
+
.all();
|
|
164
|
+
const classification = {
|
|
165
|
+
total: allRows.length,
|
|
166
|
+
missingPath: 0,
|
|
167
|
+
tempPath: 0,
|
|
168
|
+
testPath: 0,
|
|
169
|
+
stale: 0,
|
|
170
|
+
retained: 0,
|
|
171
|
+
aliases: aliasRows.length,
|
|
172
|
+
orphanAliases: aliasRows.filter((alias) => !registryIds.has(alias.canonicalId)).length,
|
|
173
|
+
};
|
|
174
|
+
const matchedByReason = {};
|
|
175
|
+
const removals = [];
|
|
176
|
+
for (const row of allRows) {
|
|
177
|
+
const missing = !existsSync(row.projectPath);
|
|
178
|
+
const temp = isTempPath(row.projectPath);
|
|
179
|
+
const test = isTestPath(row.projectPath);
|
|
180
|
+
if (missing)
|
|
181
|
+
classification.missingPath++;
|
|
182
|
+
if (temp)
|
|
183
|
+
classification.tempPath++;
|
|
184
|
+
if (test)
|
|
185
|
+
classification.testPath++;
|
|
186
|
+
if (missing || temp || test)
|
|
187
|
+
classification.stale++;
|
|
188
|
+
const reasons = [];
|
|
189
|
+
const normalizedProjectPath = portablePathForMatch(row.projectPath);
|
|
190
|
+
if (patternRegex?.test(row.projectPath) || patternRegex?.test(normalizedProjectPath))
|
|
191
|
+
reasons.push('pattern');
|
|
192
|
+
if (opts.includeTemp && temp)
|
|
193
|
+
reasons.push('temp-path');
|
|
194
|
+
if (opts.includeTests && test)
|
|
195
|
+
reasons.push('test-path');
|
|
196
|
+
if (opts.matchUnhealthy && row.healthStatus === 'unhealthy')
|
|
197
|
+
reasons.push('unhealthy');
|
|
198
|
+
if (opts.matchNeverIndexed && row.lastIndexed === null)
|
|
199
|
+
reasons.push('never-indexed');
|
|
200
|
+
if (opts.matchOrphaned && missing)
|
|
201
|
+
reasons.push('missing-path');
|
|
202
|
+
if (pollutedIds.has(row.projectId))
|
|
203
|
+
reasons.push('path-divergent-duplicate');
|
|
204
|
+
if (reasons.length === 0)
|
|
205
|
+
continue;
|
|
206
|
+
for (const reason of reasons)
|
|
207
|
+
matchedByReason[reason] = (matchedByReason[reason] ?? 0) + 1;
|
|
208
|
+
removals.push({ projectId: row.projectId, projectPath: row.projectPath, reasons });
|
|
209
|
+
}
|
|
210
|
+
classification.retained = classification.total - classification.stale;
|
|
146
211
|
const totalCount = allRows.length;
|
|
147
|
-
const matched =
|
|
148
|
-
const sample =
|
|
212
|
+
const matched = removals.length;
|
|
213
|
+
const sample = removals.slice(0, 10).map((r) => path.resolve(r.projectPath));
|
|
149
214
|
if (opts.dryRun || matched === 0) {
|
|
150
215
|
return {
|
|
151
216
|
dryRun: opts.dryRun,
|
|
@@ -154,10 +219,12 @@ export async function cleanProjects(opts) {
|
|
|
154
219
|
remaining: totalCount,
|
|
155
220
|
sample,
|
|
156
221
|
totalCount,
|
|
222
|
+
classification,
|
|
223
|
+
matchedByReason,
|
|
157
224
|
};
|
|
158
225
|
}
|
|
159
226
|
// Write audit JSONL before deletion (T9149 matchPolluted mode)
|
|
160
|
-
if (opts.matchPolluted && opts.auditLog &&
|
|
227
|
+
if (opts.matchPolluted && opts.auditLog && removals.length > 0) {
|
|
161
228
|
try {
|
|
162
229
|
const { appendFile: appendFn, mkdir: mkdirFn } = await import('node:fs/promises');
|
|
163
230
|
const { homedir } = await import('node:os');
|
|
@@ -165,7 +232,7 @@ export async function cleanProjects(opts) {
|
|
|
165
232
|
const auditDir = path.join(homedir(), '.local', 'state', 'cleo');
|
|
166
233
|
await mkdirFn(auditDir, { recursive: true });
|
|
167
234
|
const auditPath = path.join(auditDir, `nexus-cleanup-${ts}.jsonl`);
|
|
168
|
-
const records =
|
|
235
|
+
const records = removals
|
|
169
236
|
.map((r) => JSON.stringify({
|
|
170
237
|
ts: new Date().toISOString(),
|
|
171
238
|
projectId: r.projectId,
|
|
@@ -179,14 +246,50 @@ export async function cleanProjects(opts) {
|
|
|
179
246
|
// audit is best-effort
|
|
180
247
|
}
|
|
181
248
|
}
|
|
182
|
-
//
|
|
183
|
-
//
|
|
184
|
-
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
249
|
+
// Rows, their aliases, pre-existing orphan aliases, and the audit receipt
|
|
250
|
+
// commit together or not at all. Chunked to keep SQL parameter counts safe
|
|
251
|
+
// (default SQLite limit is 999 bound variables per statement).
|
|
252
|
+
const CHUNK = 400;
|
|
253
|
+
const idsToDelete = removals.map((r) => r.projectId);
|
|
254
|
+
const auditId = randomUUID();
|
|
255
|
+
const { aliasesRemoved, orphanAliasesRemoved } = db.transaction((tx) => {
|
|
256
|
+
let purgedAliases = 0;
|
|
257
|
+
for (let i = 0; i < idsToDelete.length; i += CHUNK) {
|
|
258
|
+
const slice = idsToDelete.slice(i, i + CHUNK);
|
|
259
|
+
tx.delete(regTable).where(inArray(regTable.projectId, slice)).run();
|
|
260
|
+
purgedAliases += Number(tx.delete(aliasTable).where(inArray(aliasTable.canonicalId, slice)).run().changes);
|
|
261
|
+
}
|
|
262
|
+
// T12354: path-map rows go with their project, and none may outlive it.
|
|
263
|
+
tx.run(sql `DELETE FROM ${pathTable} WHERE ${pathTable.projectId} NOT IN (SELECT ${regTable.projectId} FROM ${regTable})`);
|
|
264
|
+
const orphans = Number(tx.run(sql `DELETE FROM ${aliasTable} WHERE ${aliasTable.canonicalId} NOT IN (SELECT ${regTable.projectId} FROM ${regTable})`).changes);
|
|
265
|
+
tx.insert(auditTable)
|
|
266
|
+
.values({
|
|
267
|
+
id: auditId,
|
|
268
|
+
action: 'projects.clean',
|
|
269
|
+
domain: 'nexus',
|
|
270
|
+
operation: 'projects.clean',
|
|
271
|
+
success: 1,
|
|
272
|
+
detailsJson: JSON.stringify({
|
|
273
|
+
pattern: opts.pattern ?? null,
|
|
274
|
+
presets: {
|
|
275
|
+
includeTemp: opts.includeTemp,
|
|
276
|
+
includeTests: opts.includeTests,
|
|
277
|
+
matchUnhealthy: opts.matchUnhealthy,
|
|
278
|
+
matchNeverIndexed: opts.matchNeverIndexed,
|
|
279
|
+
matchOrphaned: opts.matchOrphaned,
|
|
280
|
+
removeFs: opts.removeFs,
|
|
281
|
+
vacuum: opts.vacuum,
|
|
282
|
+
},
|
|
283
|
+
count: matched,
|
|
284
|
+
aliasesRemoved: purgedAliases,
|
|
285
|
+
orphanAliasesRemoved: orphans,
|
|
286
|
+
sample,
|
|
287
|
+
removed: removals,
|
|
288
|
+
}),
|
|
289
|
+
})
|
|
290
|
+
.run();
|
|
291
|
+
return { aliasesRemoved: purgedAliases, orphanAliasesRemoved: orphans };
|
|
292
|
+
}, { behavior: 'immediate' });
|
|
190
293
|
const remaining = totalCount - matched;
|
|
191
294
|
// Optional filesystem cleanup — runs only after the row has been purged so a
|
|
192
295
|
// partial failure leaves no DB→disk drift (worst case: dir lingers, can be
|
|
@@ -196,7 +299,7 @@ export async function cleanProjects(opts) {
|
|
|
196
299
|
if (opts.removeFs) {
|
|
197
300
|
fsRemoved = 0;
|
|
198
301
|
fsFailed = 0;
|
|
199
|
-
for (const row of
|
|
302
|
+
for (const row of removals) {
|
|
200
303
|
const p = row.projectPath;
|
|
201
304
|
// Refuse to delete suspiciously short or root-ish paths even if the DB
|
|
202
305
|
// says so. Anything < 8 chars or with fewer than 3 path segments under
|
|
@@ -220,54 +323,31 @@ export async function cleanProjects(opts) {
|
|
|
220
323
|
}
|
|
221
324
|
}
|
|
222
325
|
}
|
|
223
|
-
// Optional VACUUM
|
|
326
|
+
// Optional VACUUM of the GLOBAL registry store after large purges. The WAL
|
|
327
|
+
// is checkpointed so the file on disk actually shrinks.
|
|
328
|
+
let vacuum;
|
|
224
329
|
let vacuumBytesFreed;
|
|
225
330
|
if (opts.vacuum) {
|
|
226
|
-
let beforeBytes = 0;
|
|
227
|
-
let afterBytes = 0;
|
|
228
331
|
try {
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
afterBytes = stat(dbPath).size;
|
|
332
|
+
const beforeBytes = storeBytes(db);
|
|
333
|
+
db.run(sql `VACUUM`);
|
|
334
|
+
db.run(sql `PRAGMA wal_checkpoint(TRUNCATE)`);
|
|
335
|
+
const afterBytes = storeBytes(db);
|
|
336
|
+
vacuum = { beforeBytes, afterBytes };
|
|
235
337
|
vacuumBytesFreed = Math.max(0, beforeBytes - afterBytes);
|
|
236
338
|
}
|
|
237
339
|
catch {
|
|
238
340
|
vacuumBytesFreed = 0;
|
|
239
341
|
}
|
|
240
342
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
detailsJson: JSON.stringify({
|
|
250
|
-
pattern: opts.pattern ?? null,
|
|
251
|
-
presets: {
|
|
252
|
-
includeTemp: opts.includeTemp,
|
|
253
|
-
includeTests: opts.includeTests,
|
|
254
|
-
matchUnhealthy: opts.matchUnhealthy,
|
|
255
|
-
matchNeverIndexed: opts.matchNeverIndexed,
|
|
256
|
-
matchOrphaned: opts.matchOrphaned,
|
|
257
|
-
removeFs: opts.removeFs,
|
|
258
|
-
vacuum: opts.vacuum,
|
|
259
|
-
},
|
|
260
|
-
count: matched,
|
|
261
|
-
fsRemoved,
|
|
262
|
-
fsFailed,
|
|
263
|
-
vacuumBytesFreed,
|
|
264
|
-
sample,
|
|
265
|
-
}),
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
catch {
|
|
269
|
-
// Audit failure is non-fatal
|
|
270
|
-
}
|
|
343
|
+
const receipt = {
|
|
344
|
+
auditId,
|
|
345
|
+
storePath,
|
|
346
|
+
removed: removals,
|
|
347
|
+
aliasesRemoved,
|
|
348
|
+
orphanAliasesRemoved,
|
|
349
|
+
...(vacuum !== undefined ? { vacuum } : {}),
|
|
350
|
+
};
|
|
271
351
|
return {
|
|
272
352
|
dryRun: false,
|
|
273
353
|
matched,
|
|
@@ -275,6 +355,9 @@ export async function cleanProjects(opts) {
|
|
|
275
355
|
remaining,
|
|
276
356
|
sample,
|
|
277
357
|
totalCount,
|
|
358
|
+
classification,
|
|
359
|
+
matchedByReason,
|
|
360
|
+
receipt,
|
|
278
361
|
...(fsRemoved !== undefined ? { fsRemoved } : {}),
|
|
279
362
|
...(fsFailed !== undefined ? { fsFailed } : {}),
|
|
280
363
|
...(vacuumBytesFreed !== undefined ? { vacuumBytesFreed } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects-clean.js","sourceRoot":"","sources":["../../src/nexus/projects-clean.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"projects-clean.js","sourceRoot":"","sources":["../../src/nexus/projects-clean.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/nexus/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAY,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,KAAK,YAAY,EAA8B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/nexus/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAY,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,KAAK,YAAY,EAA8B,MAAM,qBAAqB,CAAC;AAWpF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,4CAA4C;AAC5C,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAU5D;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,gBAAgB,CA6BnF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAqB1C;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B7E;AAgBD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,iBAAiB,GAAG,iBAAiB,EAAE,CAAC,CAAC;AACpD,sEAAsE;AACtE,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,iBAAiB,GAAG,iBAAiB,EAAE,CAAC,CAAC;AA2DpD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlF;AAcD;;;;GAIG;AAEH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAahE;AAED;;;;;;;;GAQG;AAEH,wBAAsB,eAAe,CAAC,MAAM,CAAC,EAAE;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CACT,YAAY,CAAC;IACX,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,CACH,CAmJA"}
|
package/dist/nexus/query.js
CHANGED
|
@@ -20,6 +20,7 @@ import { getTaskAccessor } from '../store/data-accessor.js';
|
|
|
20
20
|
import { getBrainNativeDb } from '../store/memory-sqlite.js';
|
|
21
21
|
import { getNexusNativeDb } from '../store/nexus-sqlite.js';
|
|
22
22
|
import { nexusGetProject, readRegistry } from './registry.js';
|
|
23
|
+
import { registryStorePath } from './registry-hygiene.js';
|
|
23
24
|
// ── Query syntax ─────────────────────────────────────────────────────
|
|
24
25
|
/** Regex for a bare task ID (T followed by 3+ digits). */
|
|
25
26
|
const TASK_ID_RE = /^T\d{3,}$/;
|
|
@@ -118,14 +119,14 @@ export async function resolveProjectPath(projectName) {
|
|
|
118
119
|
* Read tasks from a project's task database.
|
|
119
120
|
*/
|
|
120
121
|
async function readProjectTasks(projectPath) {
|
|
121
|
-
const
|
|
122
|
+
const storePath = registryStorePath(projectPath);
|
|
122
123
|
try {
|
|
123
124
|
const accessor = await getTaskAccessor(projectPath);
|
|
124
125
|
const { tasks } = await accessor.queryTasks({});
|
|
125
126
|
return tasks;
|
|
126
127
|
}
|
|
127
128
|
catch {
|
|
128
|
-
throw new CleoError(ExitCode.NOT_FOUND, `Project task data not found: ${
|
|
129
|
+
throw new CleoError(ExitCode.NOT_FOUND, `Project task data not found: ${storePath}`);
|
|
129
130
|
}
|
|
130
131
|
}
|
|
131
132
|
export async function resolveTask(projectRootOrQuery, paramsOrCurrentProject) {
|