@cleocode/core 2026.10.5 → 2026.10.6
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/bootstrap.d.ts +13 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +21 -32
- package/dist/bootstrap.js.map +1 -1
- package/dist/build-provenance.json +2 -2
- package/dist/cloud/nexus-cloud-status.d.ts.map +1 -1
- package/dist/cloud/nexus-cloud-status.js +3 -1
- package/dist/cloud/nexus-cloud-status.js.map +1 -1
- package/dist/cloud/nexus-device.d.ts +1 -1
- package/dist/cloud/nexus-presence-refresh.d.ts.map +1 -1
- package/dist/cloud/nexus-presence-refresh.js +20 -13
- package/dist/cloud/nexus-presence-refresh.js.map +1 -1
- package/dist/cloud/nexus-vault.d.ts.map +1 -1
- package/dist/cloud/nexus-vault.js +4 -1
- package/dist/cloud/nexus-vault.js.map +1 -1
- package/dist/docs/derive-links.d.ts +69 -0
- package/dist/docs/derive-links.d.ts.map +1 -0
- package/dist/docs/derive-links.js +85 -0
- package/dist/docs/derive-links.js.map +1 -0
- package/dist/docs/docs-generator.d.ts.map +1 -1
- package/dist/docs/docs-generator.js +2 -0
- package/dist/docs/docs-generator.js.map +1 -1
- package/dist/docs/docs-update.d.ts.map +1 -1
- package/dist/docs/docs-update.js +24 -4
- package/dist/docs/docs-update.js.map +1 -1
- package/dist/docs/fetch-result.d.ts +77 -0
- package/dist/docs/fetch-result.d.ts.map +1 -0
- package/dist/docs/fetch-result.js +132 -0
- package/dist/docs/fetch-result.js.map +1 -0
- package/dist/docs/supersede.d.ts.map +1 -1
- package/dist/docs/supersede.js +9 -0
- package/dist/docs/supersede.js.map +1 -1
- package/dist/doctor/db-substrate.d.ts.map +1 -1
- package/dist/doctor/db-substrate.js +64 -29
- package/dist/doctor/db-substrate.js.map +1 -1
- package/dist/doctor/row-identity-refill.d.ts.map +1 -1
- package/dist/doctor/row-identity-refill.js +25 -10
- package/dist/doctor/row-identity-refill.js.map +1 -1
- package/dist/doctor/row-identity.d.ts.map +1 -1
- package/dist/doctor/row-identity.js +8 -2
- package/dist/doctor/row-identity.js.map +1 -1
- package/dist/doctor/sync-repair.d.ts +5 -0
- package/dist/doctor/sync-repair.d.ts.map +1 -1
- package/dist/doctor/sync-repair.js +11 -0
- package/dist/doctor/sync-repair.js.map +1 -1
- package/dist/doctor/sync-triggers.d.ts.map +1 -1
- package/dist/doctor/sync-triggers.js +3 -17
- package/dist/doctor/sync-triggers.js.map +1 -1
- package/dist/hygiene/validate-spawn-readiness.d.ts +6 -1
- package/dist/hygiene/validate-spawn-readiness.d.ts.map +1 -1
- package/dist/hygiene/validate-spawn-readiness.js +11 -6
- package/dist/hygiene/validate-spawn-readiness.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +10 -1
- package/dist/init.js.map +1 -1
- package/dist/injection.d.ts +37 -12
- package/dist/injection.d.ts.map +1 -1
- package/dist/injection.js +152 -35
- package/dist/injection.js.map +1 -1
- package/dist/memory/brain-search.d.ts.map +1 -1
- package/dist/memory/brain-search.js +7 -32
- package/dist/memory/brain-search.js.map +1 -1
- package/dist/memory/pipeline-manifest-sqlite.d.ts +2 -0
- package/dist/memory/pipeline-manifest-sqlite.d.ts.map +1 -1
- package/dist/memory/pipeline-manifest-sqlite.js +51 -9
- package/dist/memory/pipeline-manifest-sqlite.js.map +1 -1
- package/dist/nexus/assessment-projection.d.ts +96 -1
- package/dist/nexus/assessment-projection.d.ts.map +1 -1
- package/dist/nexus/assessment-projection.js +135 -0
- package/dist/nexus/assessment-projection.js.map +1 -1
- package/dist/nexus/assessment-store.d.ts +54 -0
- package/dist/nexus/assessment-store.d.ts.map +1 -1
- package/dist/nexus/assessment-store.js +161 -2
- package/dist/nexus/assessment-store.js.map +1 -1
- package/dist/nexus/knowledge.d.ts +19 -0
- package/dist/nexus/knowledge.d.ts.map +1 -1
- package/dist/nexus/knowledge.js +56 -2
- package/dist/nexus/knowledge.js.map +1 -1
- package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
- package/dist/orchestrate/spawn-ops.js +12 -1
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/release/commit-presence.d.ts +24 -0
- package/dist/release/commit-presence.d.ts.map +1 -1
- package/dist/release/commit-presence.js +31 -0
- package/dist/release/commit-presence.js.map +1 -1
- package/dist/release/plan.d.ts +8 -6
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +11 -6
- package/dist/release/plan.js.map +1 -1
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +10 -8
- package/dist/release/reconcile.js.map +1 -1
- package/dist/release/verify-provenance.d.ts.map +1 -1
- package/dist/release/verify-provenance.js +6 -8
- package/dist/release/verify-provenance.js.map +1 -1
- package/dist/resources/admission-ledger.d.ts +66 -0
- package/dist/resources/admission-ledger.d.ts.map +1 -1
- package/dist/resources/admission-ledger.js +145 -6
- package/dist/resources/admission-ledger.js.map +1 -1
- package/dist/resources/run-class.d.ts +71 -0
- package/dist/resources/run-class.d.ts.map +1 -1
- package/dist/resources/run-class.js +203 -0
- package/dist/resources/run-class.js.map +1 -1
- package/dist/resources/run-governed.d.ts +2 -0
- package/dist/resources/run-governed.d.ts.map +1 -1
- package/dist/resources/run-governed.js +1 -0
- package/dist/resources/run-governed.js.map +1 -1
- package/dist/scaffold/ensure-config.d.ts +20 -9
- package/dist/scaffold/ensure-config.d.ts.map +1 -1
- package/dist/scaffold/ensure-config.js +56 -23
- package/dist/scaffold/ensure-config.js.map +1 -1
- package/dist/scaffold/ensure-skills.d.ts +10 -0
- package/dist/scaffold/ensure-skills.d.ts.map +1 -1
- package/dist/scaffold/ensure-skills.js +47 -3
- package/dist/scaffold/ensure-skills.js.map +1 -1
- package/dist/scaffold/upgrade-file-journal.d.ts +79 -0
- package/dist/scaffold/upgrade-file-journal.d.ts.map +1 -0
- package/dist/scaffold/upgrade-file-journal.js +111 -0
- package/dist/scaffold/upgrade-file-journal.js.map +1 -0
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +10 -2
- package/dist/session/engine-ops.js.map +1 -1
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +3 -0
- package/dist/sessions/index.js.map +1 -1
- package/dist/spawn/worktree-lock-holder.d.ts +59 -1
- package/dist/spawn/worktree-lock-holder.d.ts.map +1 -1
- package/dist/spawn/worktree-lock-holder.js +114 -0
- package/dist/spawn/worktree-lock-holder.js.map +1 -1
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +38 -0
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/backup-recover.d.ts +4 -4
- package/dist/store/backup-recover.d.ts.map +1 -1
- package/dist/store/backup-recover.js +11 -4
- package/dist/store/backup-recover.js.map +1 -1
- package/dist/store/backup-sidecar.d.ts +19 -1
- package/dist/store/backup-sidecar.d.ts.map +1 -1
- package/dist/store/backup-sidecar.js +57 -6
- package/dist/store/backup-sidecar.js.map +1 -1
- package/dist/store/db-helpers.js +1 -1
- package/dist/store/display-id-alias.js +1 -1
- package/dist/store/display-id-alias.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts +2 -0
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +28 -16
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/archive.d.ts +42 -2
- package/dist/store/exodus/archive.d.ts.map +1 -1
- package/dist/store/exodus/archive.js +81 -4
- package/dist/store/exodus/archive.js.map +1 -1
- package/dist/store/exodus/bare-family.d.ts +104 -0
- package/dist/store/exodus/bare-family.d.ts.map +1 -0
- package/dist/store/exodus/bare-family.js +470 -0
- package/dist/store/exodus/bare-family.js.map +1 -0
- package/dist/store/exodus/column-transforms.d.ts.map +1 -1
- package/dist/store/exodus/column-transforms.js +15 -8
- package/dist/store/exodus/column-transforms.js.map +1 -1
- package/dist/store/exodus/health.d.ts +2 -0
- package/dist/store/exodus/health.d.ts.map +1 -1
- package/dist/store/exodus/health.js +7 -1
- package/dist/store/exodus/health.js.map +1 -1
- package/dist/store/exodus/index.d.ts +2 -2
- package/dist/store/exodus/index.d.ts.map +1 -1
- package/dist/store/exodus/index.js +2 -2
- package/dist/store/exodus/index.js.map +1 -1
- package/dist/store/exodus/migrate.d.ts.map +1 -1
- package/dist/store/exodus/migrate.js +30 -1
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/on-open.d.ts +11 -0
- package/dist/store/exodus/on-open.d.ts.map +1 -1
- package/dist/store/exodus/on-open.js +26 -1
- package/dist/store/exodus/on-open.js.map +1 -1
- package/dist/store/exodus/prior-recoveries.d.ts +3 -2
- package/dist/store/exodus/prior-recoveries.d.ts.map +1 -1
- package/dist/store/exodus/prior-recoveries.js +7 -3
- package/dist/store/exodus/prior-recoveries.js.map +1 -1
- package/dist/store/exodus/reconcile.d.ts +44 -6
- package/dist/store/exodus/reconcile.d.ts.map +1 -1
- package/dist/store/exodus/reconcile.js +246 -173
- package/dist/store/exodus/reconcile.js.map +1 -1
- package/dist/store/exodus/recovery.d.ts +48 -0
- package/dist/store/exodus/recovery.d.ts.map +1 -1
- package/dist/store/exodus/recovery.js +104 -6
- package/dist/store/exodus/recovery.js.map +1 -1
- package/dist/store/exodus/seal.d.ts.map +1 -1
- package/dist/store/exodus/seal.js +4 -2
- package/dist/store/exodus/seal.js.map +1 -1
- package/dist/store/exodus/table-order.d.ts +6 -0
- package/dist/store/exodus/table-order.d.ts.map +1 -1
- package/dist/store/exodus/table-order.js +15 -0
- package/dist/store/exodus/table-order.js.map +1 -1
- package/dist/store/exodus/types.d.ts +4 -0
- package/dist/store/exodus/types.d.ts.map +1 -1
- package/dist/store/exodus/types.js +4 -0
- package/dist/store/exodus/types.js.map +1 -1
- package/dist/store/exodus/verify-migration.d.ts.map +1 -1
- package/dist/store/exodus/verify-migration.js +22 -17
- package/dist/store/exodus/verify-migration.js.map +1 -1
- package/dist/store/identity-share.d.ts +14 -0
- package/dist/store/identity-share.d.ts.map +1 -1
- package/dist/store/identity-share.js +33 -0
- package/dist/store/identity-share.js.map +1 -1
- package/dist/store/lock.d.ts +33 -0
- package/dist/store/lock.d.ts.map +1 -1
- package/dist/store/lock.js +60 -0
- package/dist/store/lock.js.map +1 -1
- package/dist/store/portable-bundle-import.d.ts.map +1 -1
- package/dist/store/portable-bundle-import.js +7 -0
- package/dist/store/portable-bundle-import.js.map +1 -1
- package/dist/store/portable-bundle-scan.d.ts +3 -2
- package/dist/store/portable-bundle-scan.d.ts.map +1 -1
- package/dist/store/portable-bundle-scan.js +7 -5
- package/dist/store/portable-bundle-scan.js.map +1 -1
- package/dist/store/portable-bundle.d.ts +1 -1
- package/dist/store/portable-bundle.d.ts.map +1 -1
- package/dist/store/portable-bundle.js +9 -1
- package/dist/store/portable-bundle.js.map +1 -1
- package/dist/store/repair-malformed-dbs.d.ts.map +1 -1
- package/dist/store/repair-malformed-dbs.js +36 -6
- package/dist/store/repair-malformed-dbs.js.map +1 -1
- package/dist/store/restore-marker.d.ts +20 -2
- package/dist/store/restore-marker.d.ts.map +1 -1
- package/dist/store/restore-marker.js +41 -1
- package/dist/store/restore-marker.js.map +1 -1
- package/dist/store/row-identity-flag.d.ts +9 -6
- package/dist/store/row-identity-flag.d.ts.map +1 -1
- package/dist/store/row-identity-flag.js +10 -7
- package/dist/store/row-identity-flag.js.map +1 -1
- package/dist/store/row-identity-registry.d.ts +4 -3
- package/dist/store/row-identity-registry.d.ts.map +1 -1
- package/dist/store/row-identity-registry.js +132 -31
- package/dist/store/row-identity-registry.js.map +1 -1
- package/dist/store/row-identity.d.ts +81 -14
- package/dist/store/row-identity.d.ts.map +1 -1
- package/dist/store/row-identity.js +238 -32
- package/dist/store/row-identity.js.map +1 -1
- package/dist/store/schema/cleo-shared/brain.d.ts +368 -0
- package/dist/store/schema/cleo-shared/brain.d.ts.map +1 -1
- package/dist/store/schema/cleo-shared/brain.js +104 -2
- package/dist/store/schema/cleo-shared/brain.js.map +1 -1
- package/dist/store/sync/apply/applier.d.ts +5 -0
- package/dist/store/sync/apply/applier.d.ts.map +1 -1
- package/dist/store/sync/apply/applier.js +5 -1
- package/dist/store/sync/apply/applier.js.map +1 -1
- package/dist/store/sync/apply/parent-delete.d.ts.map +1 -1
- package/dist/store/sync/apply/parent-delete.js +4 -0
- package/dist/store/sync/apply/parent-delete.js.map +1 -1
- package/dist/store/sync/capture.d.ts +13 -1
- package/dist/store/sync/capture.d.ts.map +1 -1
- package/dist/store/sync/capture.js +31 -3
- package/dist/store/sync/capture.js.map +1 -1
- package/dist/store/sync/flags.d.ts +14 -5
- package/dist/store/sync/flags.d.ts.map +1 -1
- package/dist/store/sync/flags.js +20 -8
- package/dist/store/sync/flags.js.map +1 -1
- package/dist/store/sync/genesis.d.ts +130 -0
- package/dist/store/sync/genesis.d.ts.map +1 -0
- package/dist/store/sync/genesis.js +337 -0
- package/dist/store/sync/genesis.js.map +1 -0
- package/dist/store/sync/repair.d.ts +2 -2
- package/dist/store/sync/repair.d.ts.map +1 -1
- package/dist/store/sync/repair.js +55 -15
- package/dist/store/sync/repair.js.map +1 -1
- package/dist/store/sync/sealer.d.ts +14 -0
- package/dist/store/sync/sealer.d.ts.map +1 -1
- package/dist/store/sync/sealer.js +27 -6
- package/dist/store/sync/sealer.js.map +1 -1
- package/dist/store/sync/segments.d.ts +124 -0
- package/dist/store/sync/segments.d.ts.map +1 -0
- package/dist/store/sync/segments.js +267 -0
- package/dist/store/sync/segments.js.map +1 -0
- package/dist/store/sync/sequencing.d.ts +44 -1
- package/dist/store/sync/sequencing.d.ts.map +1 -1
- package/dist/store/sync/sequencing.js +59 -2
- package/dist/store/sync/sequencing.js.map +1 -1
- package/dist/store/sync/timestamp-canon.d.ts +6 -3
- package/dist/store/sync/timestamp-canon.d.ts.map +1 -1
- package/dist/store/sync/timestamp-canon.js +55 -4
- package/dist/store/sync/timestamp-canon.js.map +1 -1
- package/dist/store/sync/txn-signing.d.ts +69 -0
- package/dist/store/sync/txn-signing.d.ts.map +1 -0
- package/dist/store/sync/txn-signing.js +81 -0
- package/dist/store/sync/txn-signing.js.map +1 -0
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +30 -0
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/twin-collapse.d.ts.map +1 -1
- package/dist/store/twin-collapse.js +65 -2
- package/dist/store/twin-collapse.js.map +1 -1
- package/dist/system/backup.d.ts +3 -2
- package/dist/system/backup.d.ts.map +1 -1
- package/dist/system/backup.js +43 -17
- package/dist/system/backup.js.map +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +2 -1
- package/dist/system/health.js.map +1 -1
- package/dist/tasks/affected-packages.d.ts +26 -0
- package/dist/tasks/affected-packages.d.ts.map +1 -1
- package/dist/tasks/affected-packages.js +95 -28
- package/dist/tasks/affected-packages.js.map +1 -1
- package/dist/tasks/change-set.d.ts.map +1 -1
- package/dist/tasks/change-set.js +14 -4
- package/dist/tasks/change-set.js.map +1 -1
- package/dist/tasks/done-plan.d.ts.map +1 -1
- package/dist/tasks/done-plan.js +50 -4
- package/dist/tasks/done-plan.js.map +1 -1
- package/dist/tasks/test-run-binding.d.ts +14 -0
- package/dist/tasks/test-run-binding.d.ts.map +1 -1
- package/dist/tasks/test-run-binding.js +35 -4
- package/dist/tasks/test-run-binding.js.map +1 -1
- package/dist/upgrade.d.ts +6 -0
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +58 -11
- package/dist/upgrade.js.map +1 -1
- package/migrations/drizzle-cleo-global/20261010120000_t12894-brain-row-uids/migration.sql +88 -0
- package/migrations/drizzle-cleo-project/20261010120000_t12894-brain-row-uids/migration.sql +92 -0
- package/migrations/sync-journal/20261007120000_t12343-segment-outbox/migration.sql +38 -0
- package/package.json +13 -13
- package/templates/CLEO-INJECTION.md +1 -1
- package/templates/CLEO-REFERENCE.md +2 -2
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* project-info.json, and related template/version utilities.
|
|
4
4
|
*/
|
|
5
5
|
import type { ScaffoldResult } from '@cleocode/contracts/scaffold-diagnostics';
|
|
6
|
+
import type { UpgradeFileJournal } from './upgrade-file-journal.js';
|
|
6
7
|
/**
|
|
7
8
|
* Resolve the `.cleo` directory for scaffold steps.
|
|
8
9
|
*
|
|
@@ -73,33 +74,43 @@ export declare function getCleoVersion(): string;
|
|
|
73
74
|
*/
|
|
74
75
|
export declare function createDefaultConfig(): Record<string, unknown>;
|
|
75
76
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
77
|
+
* Options for the repair of user-owned rule files
|
|
78
|
+
* ({@link ensureGitignore}, {@link ensureWorktreeInclude}).
|
|
79
|
+
*/
|
|
80
|
+
export interface RuleFileRepairOptions {
|
|
81
|
+
/** Journal that backs up the file before it changes and lists it (upgrade, T13409). */
|
|
82
|
+
journal?: UpgradeFileJournal;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Create .cleo/.gitignore from the template, or append the template rules an
|
|
86
|
+
* existing file lacks. Idempotent; never drops or reorders the user's lines (T13409).
|
|
78
87
|
*
|
|
79
88
|
* @param projectRoot - Absolute path to the project root directory
|
|
89
|
+
* @param opts - Backup journal (upgrade)
|
|
80
90
|
* @returns Scaffold result indicating whether the gitignore was created, repaired, or skipped
|
|
81
91
|
*/
|
|
82
|
-
export declare function ensureGitignore(projectRoot: string): Promise<ScaffoldResult>;
|
|
92
|
+
export declare function ensureGitignore(projectRoot: string, opts?: RuleFileRepairOptions): Promise<ScaffoldResult>;
|
|
83
93
|
/**
|
|
84
|
-
* Create
|
|
85
|
-
*
|
|
86
|
-
*
|
|
94
|
+
* Create `.worktreeinclude` (canonical, at project root) from the shipped
|
|
95
|
+
* template, or append the template entries an existing file lacks.
|
|
96
|
+
* Idempotent; never drops or reorders the user's lines (T13409).
|
|
87
97
|
*
|
|
88
98
|
* Resolution rules (T9983):
|
|
89
|
-
* - If `<projectRoot>/.worktreeinclude` already exists → keep
|
|
90
|
-
* the template
|
|
99
|
+
* - If `<projectRoot>/.worktreeinclude` already exists → keep it and append
|
|
100
|
+
* only the missing template entries.
|
|
91
101
|
* - Else if legacy `<projectRoot>/.cleo/worktree-include` exists → SKIP
|
|
92
102
|
* (do not overwrite the legacy file in place; `cleo doctor
|
|
93
103
|
* --migrate-worktree-include` is the explicit migration path).
|
|
94
104
|
* - Else → write the canonical template.
|
|
95
105
|
*
|
|
96
106
|
* @param projectRoot - Absolute path to the project root directory
|
|
107
|
+
* @param opts - Backup journal (upgrade)
|
|
97
108
|
* @returns Scaffold result indicating whether `.worktreeinclude` was
|
|
98
109
|
* created, repaired, or skipped.
|
|
99
110
|
*
|
|
100
111
|
* @task T9983
|
|
101
112
|
*/
|
|
102
|
-
export declare function ensureWorktreeInclude(projectRoot: string): Promise<ScaffoldResult>;
|
|
113
|
+
export declare function ensureWorktreeInclude(projectRoot: string, opts?: RuleFileRepairOptions): Promise<ScaffoldResult>;
|
|
103
114
|
/**
|
|
104
115
|
* Create default config.json if missing.
|
|
105
116
|
* Idempotent: skips if file already exists.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-config.d.ts","sourceRoot":"","sources":["../../src/scaffold/ensure-config.ts"],"names":[],"mappings":"AACA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"ensure-config.d.ts","sourceRoot":"","sources":["../../src/scaffold/ensure-config.ts"],"names":[],"mappings":"AACA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAK/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAWlE;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,ihDAwDnC,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,oaAarC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAW5C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAelD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAQvC;AAgBD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoD7D;AAKD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,uFAAuF;IACvF,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAiCD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,qBAAqB,GAC3B,OAAO,CAAC,cAAc,CAAC,CAWzB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,qBAAqB,GAC3B,OAAO,CAAC,cAAc,CAAC,CAuBzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACzB,OAAO,CAAC,cAAc,CAAC,CAsCzB;AAaD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GACpD,OAAO,CAAC,cAAc,CAAC,CAoJzB;AAWD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAMvF"}
|
|
@@ -267,60 +267,78 @@ export function createDefaultConfig() {
|
|
|
267
267
|
},
|
|
268
268
|
};
|
|
269
269
|
}
|
|
270
|
+
/** Comment written above rules a repair appends to a user-owned ignore/include file. */
|
|
271
|
+
const APPENDED_RULES_HEADER = '# Added by cleo: CLEO-required entries missing from this file';
|
|
270
272
|
/**
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
+
* Append the template entries an existing rule file lacks, never dropping or
|
|
274
|
+
* reordering the user's lines (T13409).
|
|
275
|
+
*
|
|
276
|
+
* A bare `*` is never appended: in a file without it, the user chose not to
|
|
277
|
+
* deny everything, and a trailing `*` would override every allow rule they wrote.
|
|
278
|
+
*/
|
|
279
|
+
async function repairRuleFile(path, templateContent, opts) {
|
|
280
|
+
// Loaded lazily: this module is on the startup path of read commands (gate 39).
|
|
281
|
+
const { appendMissingLines, writeIfChanged } = await import('./upgrade-file-journal.js');
|
|
282
|
+
const existing = readFileSync(path, 'utf-8');
|
|
283
|
+
const template = templateContent
|
|
284
|
+
.split(/\r?\n/)
|
|
285
|
+
.filter((line) => line.trim() !== '*')
|
|
286
|
+
.join('\n');
|
|
287
|
+
const { content, added } = appendMissingLines(existing, template, APPENDED_RULES_HEADER);
|
|
288
|
+
if (added.length === 0) {
|
|
289
|
+
return { action: 'skipped', path, details: 'All CLEO-required entries present' };
|
|
290
|
+
}
|
|
291
|
+
await writeIfChanged(path, content, opts?.journal);
|
|
292
|
+
return {
|
|
293
|
+
action: 'repaired',
|
|
294
|
+
path,
|
|
295
|
+
details: `Appended ${added.length} missing CLEO-required entr${added.length === 1 ? 'y' : 'ies'}: ${added.join(', ')}`,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Create .cleo/.gitignore from the template, or append the template rules an
|
|
300
|
+
* existing file lacks. Idempotent; never drops or reorders the user's lines (T13409).
|
|
273
301
|
*
|
|
274
302
|
* @param projectRoot - Absolute path to the project root directory
|
|
303
|
+
* @param opts - Backup journal (upgrade)
|
|
275
304
|
* @returns Scaffold result indicating whether the gitignore was created, repaired, or skipped
|
|
276
305
|
*/
|
|
277
|
-
export async function ensureGitignore(projectRoot) {
|
|
306
|
+
export async function ensureGitignore(projectRoot, opts) {
|
|
278
307
|
const cleoDir = resolveScaffoldCleoDir(projectRoot);
|
|
279
308
|
const gitignorePath = join(cleoDir, '.gitignore');
|
|
280
309
|
const templateContent = getGitignoreContent();
|
|
281
310
|
if (existsSync(gitignorePath)) {
|
|
282
|
-
|
|
283
|
-
const normalize = (s) => s.trim().replace(/\r\n/g, '\n');
|
|
284
|
-
if (normalize(existing) === normalize(templateContent)) {
|
|
285
|
-
return { action: 'skipped', path: gitignorePath, details: 'Already matches template' };
|
|
286
|
-
}
|
|
287
|
-
await writeFile(gitignorePath, templateContent);
|
|
288
|
-
return { action: 'repaired', path: gitignorePath, details: 'Updated to match template' };
|
|
311
|
+
return repairRuleFile(gitignorePath, templateContent, opts);
|
|
289
312
|
}
|
|
290
313
|
await writeFile(gitignorePath, templateContent);
|
|
291
314
|
return { action: 'created', path: gitignorePath };
|
|
292
315
|
}
|
|
293
316
|
/**
|
|
294
|
-
* Create
|
|
295
|
-
*
|
|
296
|
-
*
|
|
317
|
+
* Create `.worktreeinclude` (canonical, at project root) from the shipped
|
|
318
|
+
* template, or append the template entries an existing file lacks.
|
|
319
|
+
* Idempotent; never drops or reorders the user's lines (T13409).
|
|
297
320
|
*
|
|
298
321
|
* Resolution rules (T9983):
|
|
299
|
-
* - If `<projectRoot>/.worktreeinclude` already exists → keep
|
|
300
|
-
* the template
|
|
322
|
+
* - If `<projectRoot>/.worktreeinclude` already exists → keep it and append
|
|
323
|
+
* only the missing template entries.
|
|
301
324
|
* - Else if legacy `<projectRoot>/.cleo/worktree-include` exists → SKIP
|
|
302
325
|
* (do not overwrite the legacy file in place; `cleo doctor
|
|
303
326
|
* --migrate-worktree-include` is the explicit migration path).
|
|
304
327
|
* - Else → write the canonical template.
|
|
305
328
|
*
|
|
306
329
|
* @param projectRoot - Absolute path to the project root directory
|
|
330
|
+
* @param opts - Backup journal (upgrade)
|
|
307
331
|
* @returns Scaffold result indicating whether `.worktreeinclude` was
|
|
308
332
|
* created, repaired, or skipped.
|
|
309
333
|
*
|
|
310
334
|
* @task T9983
|
|
311
335
|
*/
|
|
312
|
-
export async function ensureWorktreeInclude(projectRoot) {
|
|
336
|
+
export async function ensureWorktreeInclude(projectRoot, opts) {
|
|
313
337
|
const canonicalPath = join(projectRoot, '.worktreeinclude');
|
|
314
338
|
const legacyPath = join(resolveScaffoldCleoDir(projectRoot), 'worktree-include');
|
|
315
339
|
const templateContent = getWorktreeIncludeContent();
|
|
316
340
|
if (existsSync(canonicalPath)) {
|
|
317
|
-
|
|
318
|
-
const normalize = (s) => s.trim().replace(/\r\n/g, '\n');
|
|
319
|
-
if (normalize(existing) === normalize(templateContent)) {
|
|
320
|
-
return { action: 'skipped', path: canonicalPath, details: 'Already matches template' };
|
|
321
|
-
}
|
|
322
|
-
await writeFile(canonicalPath, templateContent);
|
|
323
|
-
return { action: 'repaired', path: canonicalPath, details: 'Updated to match template' };
|
|
341
|
+
return repairRuleFile(canonicalPath, templateContent, opts);
|
|
324
342
|
}
|
|
325
343
|
// T9983: when only the legacy file exists, leave it in place. The reader
|
|
326
344
|
// honours it under a one-cycle deprecation warning. Users opt-in to the
|
|
@@ -536,10 +554,25 @@ export async function ensureProjectInfo(projectRoot, opts) {
|
|
|
536
554
|
projectContext: projectContextSchemaVersion,
|
|
537
555
|
},
|
|
538
556
|
};
|
|
557
|
+
// T13409: a regenerate that changes nothing but the timestamp writes nothing,
|
|
558
|
+
// so a second `cleo upgrade` reports no applied action.
|
|
559
|
+
if (existing) {
|
|
560
|
+
const { lastUpdated: _next, ...nextFields } = projectInfo;
|
|
561
|
+
const { lastUpdated: _prev, ...prevFields } = existing;
|
|
562
|
+
if (stableStringify(nextFields) === stableStringify(prevFields)) {
|
|
563
|
+
return { action: 'skipped', path: projectInfoPath, details: 'project-info.json current' };
|
|
564
|
+
}
|
|
565
|
+
}
|
|
539
566
|
await writeFile(projectInfoPath, JSON.stringify(projectInfo, null, 2));
|
|
540
567
|
const action = opts?.force && existsSync(projectInfoPath) ? 'regenerated' : 'created';
|
|
541
568
|
return { action, path: projectInfoPath, details: await describeIdentity() };
|
|
542
569
|
}
|
|
570
|
+
/** JSON with object keys sorted at every level, so key order never counts as a change. */
|
|
571
|
+
function stableStringify(value) {
|
|
572
|
+
return JSON.stringify(value, (_key, v) => v !== null && typeof v === 'object' && !Array.isArray(v)
|
|
573
|
+
? Object.fromEntries(Object.entries(v).sort(([a], [b]) => a.localeCompare(b)))
|
|
574
|
+
: v);
|
|
575
|
+
}
|
|
543
576
|
/**
|
|
544
577
|
* No-op. Kept for API compatibility.
|
|
545
578
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-config.js","sourceRoot":"","sources":["../../src/scaffold/ensure-config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ensure-config.js","sourceRoot":"","sources":["../../src/scaffold/ensure-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* project-context.json.
|
|
4
4
|
*/
|
|
5
5
|
import type { ScaffoldResult } from '@cleocode/contracts/scaffold-diagnostics';
|
|
6
|
+
import type { UpgradeFileJournal } from './upgrade-file-journal.js';
|
|
6
7
|
/**
|
|
7
8
|
* Detect and write project-context.json.
|
|
8
9
|
* Idempotent: skips if file exists and is less than staleDays old (default: 30).
|
|
@@ -11,10 +12,19 @@ import type { ScaffoldResult } from '@cleocode/contracts/scaffold-diagnostics';
|
|
|
11
12
|
* @param opts - Optional configuration
|
|
12
13
|
* @param opts.force - When true, regenerate even if the file is fresh
|
|
13
14
|
* @param opts.staleDays - Age threshold in days before regeneration (default: 30)
|
|
15
|
+
* @param opts.journal - Backs the file up before it changes and lists it (upgrade, T13409)
|
|
14
16
|
* @returns Scaffold result indicating the action taken
|
|
17
|
+
*
|
|
18
|
+
* @remarks
|
|
19
|
+
* Regenerating an existing file keeps every key it has, in its order: detected
|
|
20
|
+
* values are updated in place, keys detection does not produce are kept, and
|
|
21
|
+
* new keys are appended (T13409: a refresh once dropped `build.outputDir` and
|
|
22
|
+
* reordered the tracked file). When nothing but `detectedAt` would change, the
|
|
23
|
+
* file is left byte-identical.
|
|
15
24
|
*/
|
|
16
25
|
export declare function ensureProjectContext(projectRoot: string, opts?: {
|
|
17
26
|
force?: boolean;
|
|
18
27
|
staleDays?: number;
|
|
28
|
+
journal?: UpgradeFileJournal;
|
|
19
29
|
}): Promise<ScaffoldResult>;
|
|
20
30
|
//# sourceMappingURL=ensure-skills.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-skills.d.ts","sourceRoot":"","sources":["../../src/scaffold/ensure-skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"ensure-skills.d.ts","sourceRoot":"","sources":["../../src/scaffold/ensure-skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAG/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAC3E,OAAO,CAAC,cAAc,CAAC,CAiHzB"}
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* project-context.json.
|
|
4
4
|
*/
|
|
5
5
|
import { existsSync, readFileSync } from 'node:fs';
|
|
6
|
-
import { writeFile } from 'node:fs/promises';
|
|
7
6
|
import { dirname, join } from 'node:path';
|
|
8
7
|
import { fileURLToPath } from 'node:url';
|
|
9
8
|
import { pushWarning } from '../output.js';
|
|
@@ -16,7 +15,15 @@ import { resolveScaffoldCleoDir } from './ensure-config.js';
|
|
|
16
15
|
* @param opts - Optional configuration
|
|
17
16
|
* @param opts.force - When true, regenerate even if the file is fresh
|
|
18
17
|
* @param opts.staleDays - Age threshold in days before regeneration (default: 30)
|
|
18
|
+
* @param opts.journal - Backs the file up before it changes and lists it (upgrade, T13409)
|
|
19
19
|
* @returns Scaffold result indicating the action taken
|
|
20
|
+
*
|
|
21
|
+
* @remarks
|
|
22
|
+
* Regenerating an existing file keeps every key it has, in its order: detected
|
|
23
|
+
* values are updated in place, keys detection does not produce are kept, and
|
|
24
|
+
* new keys are appended (T13409: a refresh once dropped `build.outputDir` and
|
|
25
|
+
* reordered the tracked file). When nothing but `detectedAt` would change, the
|
|
26
|
+
* file is left byte-identical.
|
|
20
27
|
*/
|
|
21
28
|
export async function ensureProjectContext(projectRoot, opts) {
|
|
22
29
|
const cleoDir = resolveScaffoldCleoDir(projectRoot);
|
|
@@ -46,6 +53,7 @@ export async function ensureProjectContext(projectRoot, opts) {
|
|
|
46
53
|
const context = detectProjectType(projectRoot);
|
|
47
54
|
// Blocks only the user writes (`release`, `evidence`), carried over verbatim.
|
|
48
55
|
let declared = {};
|
|
56
|
+
let previous = null;
|
|
49
57
|
// Preserve user-supplied command overrides from existing file so
|
|
50
58
|
// regeneration does not silently clobber them (T12027 / #1122 / #1129).
|
|
51
59
|
if (existsSync(contextPath)) {
|
|
@@ -53,12 +61,23 @@ export async function ensureProjectContext(projectRoot, opts) {
|
|
|
53
61
|
const existing = JSON.parse(readFileSync(contextPath, 'utf-8'));
|
|
54
62
|
preserveUserOverrides(existing, context);
|
|
55
63
|
declared = declaredBlocks(existing);
|
|
64
|
+
previous = asRecord(existing);
|
|
56
65
|
}
|
|
57
66
|
catch {
|
|
58
67
|
// If we can't parse existing, proceed with freshly-detected context
|
|
59
68
|
}
|
|
60
69
|
}
|
|
61
|
-
const
|
|
70
|
+
const detected = { ...context, ...declared };
|
|
71
|
+
const output = previous ? mergeKeepingExisting(previous, detected) : detected;
|
|
72
|
+
if (previous && sameIgnoringDetectedAt(previous, output)) {
|
|
73
|
+
return {
|
|
74
|
+
action: 'skipped',
|
|
75
|
+
path: contextPath,
|
|
76
|
+
details: 'Re-detection found nothing new; project-context.json left unchanged',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (previous && 'detectedAt' in previous)
|
|
80
|
+
output.detectedAt = detected.detectedAt;
|
|
62
81
|
try {
|
|
63
82
|
const schemaPath = join(dirname(fileURLToPath(import.meta.url)), '../../schemas/project-context.schema.json');
|
|
64
83
|
if (existsSync(schemaPath)) {
|
|
@@ -83,7 +102,8 @@ export async function ensureProjectContext(projectRoot, opts) {
|
|
|
83
102
|
catch {
|
|
84
103
|
// Schema validation is best-effort — never block the write
|
|
85
104
|
}
|
|
86
|
-
await
|
|
105
|
+
const { writeIfChanged } = await import('./upgrade-file-journal.js');
|
|
106
|
+
await writeIfChanged(contextPath, JSON.stringify(output, null, 2), opts?.journal);
|
|
87
107
|
// T13125: propose, never persist, the affected-scope command. A written
|
|
88
108
|
// template would read as declared, outlive an edit to testing.command and
|
|
89
109
|
// run a different script than the user's (review of #1818); tool:test
|
|
@@ -156,6 +176,30 @@ function preserveUserOverrides(existing, context) {
|
|
|
156
176
|
context['security-scan'] = { command: secscanCmd };
|
|
157
177
|
}
|
|
158
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* Merge freshly detected context into an existing file's object (T13409):
|
|
181
|
+
* every existing key keeps its position, a detected value replaces the old one,
|
|
182
|
+
* a key detection does not produce (such as `build.outputDir`) is kept as is,
|
|
183
|
+
* and keys new to the file are appended.
|
|
184
|
+
*/
|
|
185
|
+
function mergeKeepingExisting(existing, detected) {
|
|
186
|
+
const merged = {};
|
|
187
|
+
for (const [key, value] of Object.entries(existing)) {
|
|
188
|
+
const ours = asRecord(value);
|
|
189
|
+
const theirs = asRecord(detected[key]);
|
|
190
|
+
merged[key] = ours && theirs ? mergeKeepingExisting(ours, theirs) : (detected[key] ?? value);
|
|
191
|
+
}
|
|
192
|
+
for (const [key, value] of Object.entries(detected)) {
|
|
193
|
+
if (!(key in merged) && value !== undefined)
|
|
194
|
+
merged[key] = value;
|
|
195
|
+
}
|
|
196
|
+
return merged;
|
|
197
|
+
}
|
|
198
|
+
/** Whether two context objects serialize identically once `detectedAt` is ignored. */
|
|
199
|
+
function sameIgnoringDetectedAt(a, b) {
|
|
200
|
+
const strip = ({ detectedAt: _ignored, ...rest }) => rest;
|
|
201
|
+
return JSON.stringify(strip(a)) === JSON.stringify(strip(b));
|
|
202
|
+
}
|
|
159
203
|
/** A parsed JSON value as an object, or `null` when it is not a plain object. */
|
|
160
204
|
function asRecord(value) {
|
|
161
205
|
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-skills.js","sourceRoot":"","sources":["../../src/scaffold/ensure-skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ensure-skills.js","sourceRoot":"","sources":["../../src/scaffold/ensure-skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backed-up, change-only file writes for `cleo upgrade` (T13409).
|
|
3
|
+
*
|
|
4
|
+
* Upgrade edits files the project owns (AGENTS.md, CLAUDE.md, `.cleo/.gitignore`,
|
|
5
|
+
* `.worktreeinclude`, `project-context.json`). Every edit goes through a journal:
|
|
6
|
+
* an unchanged file is never rewritten, and a changed file's previous bytes are
|
|
7
|
+
* copied under `.cleo/backups/upgrade/<stamp>/` before the new bytes land. The
|
|
8
|
+
* journal's entries are listed in the upgrade result so the owner sees every
|
|
9
|
+
* path that changed and where its backup is.
|
|
10
|
+
*
|
|
11
|
+
* Also holds the line-merge used for `.gitignore`-style files: upgrade only ever
|
|
12
|
+
* appends the template lines a file is missing, never drops or reorders the
|
|
13
|
+
* user's lines.
|
|
14
|
+
*
|
|
15
|
+
* @task T13409
|
|
16
|
+
*/
|
|
17
|
+
/** One file an upgrade changed. */
|
|
18
|
+
export interface UpgradeFileChange {
|
|
19
|
+
/** Absolute path of the changed file. */
|
|
20
|
+
path: string;
|
|
21
|
+
/** Absolute path of the copy holding its previous bytes; `null` when the file was created. */
|
|
22
|
+
backupPath: string | null;
|
|
23
|
+
}
|
|
24
|
+
/** Records the files one upgrade run changed and where their backups are. */
|
|
25
|
+
export interface UpgradeFileJournal {
|
|
26
|
+
/** Project root; backups keep each file's path relative to it. */
|
|
27
|
+
readonly projectRoot: string;
|
|
28
|
+
/** Directory receiving this run's backups. */
|
|
29
|
+
readonly backupDir: string;
|
|
30
|
+
/** Files changed so far, in write order. */
|
|
31
|
+
readonly changes: UpgradeFileChange[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create the journal for one upgrade run.
|
|
35
|
+
*
|
|
36
|
+
* @param projectRoot - Absolute project root.
|
|
37
|
+
* @param cleoDir - The project's `.cleo` directory.
|
|
38
|
+
* @returns An empty journal whose backups land in `<cleoDir>/backups/upgrade/<stamp>/`.
|
|
39
|
+
*/
|
|
40
|
+
export declare function createUpgradeFileJournal(projectRoot: string, cleoDir: string): UpgradeFileJournal;
|
|
41
|
+
/**
|
|
42
|
+
* Copy `path`'s current bytes into the journal's backup directory and record the change.
|
|
43
|
+
*
|
|
44
|
+
* Call before replacing a file whose new content differs. A missing file is
|
|
45
|
+
* recorded as created, with no backup.
|
|
46
|
+
*
|
|
47
|
+
* @param journal - The run's journal.
|
|
48
|
+
* @param path - Absolute path about to change.
|
|
49
|
+
* @returns The recorded change.
|
|
50
|
+
*/
|
|
51
|
+
export declare function backupBeforeChange(journal: UpgradeFileJournal, path: string): Promise<UpgradeFileChange>;
|
|
52
|
+
/**
|
|
53
|
+
* Write `content` to `path` only when it differs from what is there, backing
|
|
54
|
+
* the old bytes up first when a journal is given.
|
|
55
|
+
*
|
|
56
|
+
* @param path - Absolute file path.
|
|
57
|
+
* @param content - New file content.
|
|
58
|
+
* @param journal - The run's journal; omitted outside upgrade (init writes fresh files).
|
|
59
|
+
* @returns `true` when the file was written, `false` when it already held `content`.
|
|
60
|
+
*/
|
|
61
|
+
export declare function writeIfChanged(path: string, content: string, journal?: UpgradeFileJournal): Promise<boolean>;
|
|
62
|
+
/**
|
|
63
|
+
* Append the template's rule lines that `existing` lacks, keeping every user
|
|
64
|
+
* line, comment and their order byte-for-byte.
|
|
65
|
+
*
|
|
66
|
+
* Only non-blank, non-comment lines count; comparison trims whitespace. The
|
|
67
|
+
* appended lines keep the template's relative order, so an allow rule still
|
|
68
|
+
* follows the deny rule it depends on.
|
|
69
|
+
*
|
|
70
|
+
* @param existing - Current file content.
|
|
71
|
+
* @param template - Shipped template content.
|
|
72
|
+
* @param header - Comment line written above the appended lines.
|
|
73
|
+
* @returns The merged content, and the lines that were appended.
|
|
74
|
+
*/
|
|
75
|
+
export declare function appendMissingLines(existing: string, template: string, header: string): {
|
|
76
|
+
content: string;
|
|
77
|
+
added: string[];
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=upgrade-file-journal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-file-journal.d.ts","sourceRoot":"","sources":["../../src/scaffold/upgrade-file-journal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,mCAAmC;AACnC,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC;CACvC;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAOjG;AASD;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,CAAC,CAU5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAoBtC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backed-up, change-only file writes for `cleo upgrade` (T13409).
|
|
3
|
+
*
|
|
4
|
+
* Upgrade edits files the project owns (AGENTS.md, CLAUDE.md, `.cleo/.gitignore`,
|
|
5
|
+
* `.worktreeinclude`, `project-context.json`). Every edit goes through a journal:
|
|
6
|
+
* an unchanged file is never rewritten, and a changed file's previous bytes are
|
|
7
|
+
* copied under `.cleo/backups/upgrade/<stamp>/` before the new bytes land. The
|
|
8
|
+
* journal's entries are listed in the upgrade result so the owner sees every
|
|
9
|
+
* path that changed and where its backup is.
|
|
10
|
+
*
|
|
11
|
+
* Also holds the line-merge used for `.gitignore`-style files: upgrade only ever
|
|
12
|
+
* appends the template lines a file is missing, never drops or reorders the
|
|
13
|
+
* user's lines.
|
|
14
|
+
*
|
|
15
|
+
* @task T13409
|
|
16
|
+
*/
|
|
17
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
18
|
+
import { copyFile, mkdir } from 'node:fs/promises';
|
|
19
|
+
import { dirname, isAbsolute, join, relative } from 'node:path';
|
|
20
|
+
import { writeFileAtomic } from '../tools/fs.js';
|
|
21
|
+
/**
|
|
22
|
+
* Create the journal for one upgrade run.
|
|
23
|
+
*
|
|
24
|
+
* @param projectRoot - Absolute project root.
|
|
25
|
+
* @param cleoDir - The project's `.cleo` directory.
|
|
26
|
+
* @returns An empty journal whose backups land in `<cleoDir>/backups/upgrade/<stamp>/`.
|
|
27
|
+
*/
|
|
28
|
+
export function createUpgradeFileJournal(projectRoot, cleoDir) {
|
|
29
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
30
|
+
return {
|
|
31
|
+
projectRoot,
|
|
32
|
+
backupDir: join(cleoDir, 'backups', 'upgrade', stamp),
|
|
33
|
+
changes: [],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** Backup location for `path`: its project-relative path, or its absolute path re-rooted. */
|
|
37
|
+
function backupPathFor(journal, path) {
|
|
38
|
+
const rel = relative(journal.projectRoot, path);
|
|
39
|
+
const inside = rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);
|
|
40
|
+
return join(journal.backupDir, inside ? rel : join('_external', path.replace(/^[/\\]+/, '')));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Copy `path`'s current bytes into the journal's backup directory and record the change.
|
|
44
|
+
*
|
|
45
|
+
* Call before replacing a file whose new content differs. A missing file is
|
|
46
|
+
* recorded as created, with no backup.
|
|
47
|
+
*
|
|
48
|
+
* @param journal - The run's journal.
|
|
49
|
+
* @param path - Absolute path about to change.
|
|
50
|
+
* @returns The recorded change.
|
|
51
|
+
*/
|
|
52
|
+
export async function backupBeforeChange(journal, path) {
|
|
53
|
+
let backupPath = null;
|
|
54
|
+
if (existsSync(path)) {
|
|
55
|
+
backupPath = backupPathFor(journal, path);
|
|
56
|
+
await mkdir(dirname(backupPath), { recursive: true });
|
|
57
|
+
await copyFile(path, backupPath);
|
|
58
|
+
}
|
|
59
|
+
const change = { path, backupPath };
|
|
60
|
+
journal.changes.push(change);
|
|
61
|
+
return change;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Write `content` to `path` only when it differs from what is there, backing
|
|
65
|
+
* the old bytes up first when a journal is given.
|
|
66
|
+
*
|
|
67
|
+
* @param path - Absolute file path.
|
|
68
|
+
* @param content - New file content.
|
|
69
|
+
* @param journal - The run's journal; omitted outside upgrade (init writes fresh files).
|
|
70
|
+
* @returns `true` when the file was written, `false` when it already held `content`.
|
|
71
|
+
*/
|
|
72
|
+
export async function writeIfChanged(path, content, journal) {
|
|
73
|
+
if (existsSync(path) && readFileSync(path, 'utf-8') === content)
|
|
74
|
+
return false;
|
|
75
|
+
if (journal)
|
|
76
|
+
await backupBeforeChange(journal, path);
|
|
77
|
+
await writeFileAtomic({ path, content });
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Append the template's rule lines that `existing` lacks, keeping every user
|
|
82
|
+
* line, comment and their order byte-for-byte.
|
|
83
|
+
*
|
|
84
|
+
* Only non-blank, non-comment lines count; comparison trims whitespace. The
|
|
85
|
+
* appended lines keep the template's relative order, so an allow rule still
|
|
86
|
+
* follows the deny rule it depends on.
|
|
87
|
+
*
|
|
88
|
+
* @param existing - Current file content.
|
|
89
|
+
* @param template - Shipped template content.
|
|
90
|
+
* @param header - Comment line written above the appended lines.
|
|
91
|
+
* @returns The merged content, and the lines that were appended.
|
|
92
|
+
*/
|
|
93
|
+
export function appendMissingLines(existing, template, header) {
|
|
94
|
+
const isRule = (line) => line.trim() !== '' && !line.trim().startsWith('#');
|
|
95
|
+
const present = new Set(existing
|
|
96
|
+
.split(/\r?\n/)
|
|
97
|
+
.filter(isRule)
|
|
98
|
+
.map((line) => line.trim()));
|
|
99
|
+
const added = [
|
|
100
|
+
...new Set(template
|
|
101
|
+
.split(/\r?\n/)
|
|
102
|
+
.filter(isRule)
|
|
103
|
+
.map((line) => line.trim())
|
|
104
|
+
.filter((line) => !present.has(line))),
|
|
105
|
+
];
|
|
106
|
+
if (added.length === 0)
|
|
107
|
+
return { content: existing, added };
|
|
108
|
+
const base = existing === '' || existing.endsWith('\n') ? existing : `${existing}\n`;
|
|
109
|
+
return { content: `${base}\n${header}\n${added.join('\n')}\n`, added };
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=upgrade-file-journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-file-journal.js","sourceRoot":"","sources":["../../src/scaffold/upgrade-file-journal.ts"],"names":[],"mappings":"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"}
|