@cleocode/core 2026.9.23 → 2026.9.24
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/admin/import-tasks.d.ts.map +1 -1
- package/dist/admin/import-tasks.js +35 -6
- package/dist/admin/import-tasks.js.map +1 -1
- package/dist/admin/import.d.ts.map +1 -1
- package/dist/admin/import.js +25 -6
- package/dist/admin/import.js.map +1 -1
- package/dist/build-provenance.json +2 -2
- package/dist/cloud/http.d.ts +8 -0
- package/dist/cloud/http.d.ts.map +1 -1
- package/dist/cloud/http.js +8 -1
- package/dist/cloud/http.js.map +1 -1
- package/dist/cloud/index.d.ts +6 -1
- package/dist/cloud/index.d.ts.map +1 -1
- package/dist/cloud/index.js +6 -1
- package/dist/cloud/index.js.map +1 -1
- package/dist/cloud/nexus-auth.d.ts +169 -0
- package/dist/cloud/nexus-auth.d.ts.map +1 -0
- package/dist/cloud/nexus-auth.js +372 -0
- package/dist/cloud/nexus-auth.js.map +1 -0
- package/dist/cloud/nexus-credentials.d.ts +188 -0
- package/dist/cloud/nexus-credentials.d.ts.map +1 -0
- package/dist/cloud/nexus-credentials.js +323 -0
- package/dist/cloud/nexus-credentials.js.map +1 -0
- package/dist/cloud/nexus-link.d.ts +85 -0
- package/dist/cloud/nexus-link.d.ts.map +1 -0
- package/dist/cloud/nexus-link.js +226 -0
- package/dist/cloud/nexus-link.js.map +1 -0
- package/dist/cloud/presence.d.ts +88 -0
- package/dist/cloud/presence.d.ts.map +1 -0
- package/dist/cloud/presence.js +137 -0
- package/dist/cloud/presence.js.map +1 -0
- package/dist/cloud/projects.d.ts +3 -1
- package/dist/cloud/projects.d.ts.map +1 -1
- package/dist/cloud/projects.js +4 -2
- package/dist/cloud/projects.js.map +1 -1
- package/dist/crypto/credentials.d.ts +14 -4
- package/dist/crypto/credentials.d.ts.map +1 -1
- package/dist/crypto/credentials.js +15 -1
- package/dist/crypto/credentials.js.map +1 -1
- package/dist/decide/bench/dataset.d.ts +125 -0
- package/dist/decide/bench/dataset.d.ts.map +1 -0
- package/dist/decide/bench/dataset.js +457 -0
- package/dist/decide/bench/dataset.js.map +1 -0
- package/dist/decide/bench/index.d.ts +23 -0
- package/dist/decide/bench/index.d.ts.map +1 -0
- package/dist/decide/bench/index.js +23 -0
- package/dist/decide/bench/index.js.map +1 -0
- package/dist/decide/bench/metrics.d.ts +55 -0
- package/dist/decide/bench/metrics.d.ts.map +1 -0
- package/dist/decide/bench/metrics.js +100 -0
- package/dist/decide/bench/metrics.js.map +1 -0
- package/dist/decide/bench/operation.d.ts +119 -0
- package/dist/decide/bench/operation.d.ts.map +1 -0
- package/dist/decide/bench/operation.js +171 -0
- package/dist/decide/bench/operation.js.map +1 -0
- package/dist/decide/bench/profiles.d.ts +74 -0
- package/dist/decide/bench/profiles.d.ts.map +1 -0
- package/dist/decide/bench/profiles.js +131 -0
- package/dist/decide/bench/profiles.js.map +1 -0
- package/dist/decide/bench/questions.d.ts +40 -0
- package/dist/decide/bench/questions.d.ts.map +1 -0
- package/dist/decide/bench/questions.js +107 -0
- package/dist/decide/bench/questions.js.map +1 -0
- package/dist/decide/bench/report.d.ts +21 -0
- package/dist/decide/bench/report.d.ts.map +1 -0
- package/dist/decide/bench/report.js +120 -0
- package/dist/decide/bench/report.js.map +1 -0
- package/dist/decide/bench/runner.d.ts +203 -0
- package/dist/decide/bench/runner.d.ts.map +1 -0
- package/dist/decide/bench/runner.js +335 -0
- package/dist/decide/bench/runner.js.map +1 -0
- package/dist/decide/bench/source.d.ts +21 -0
- package/dist/decide/bench/source.d.ts.map +1 -0
- package/dist/decide/bench/source.js +67 -0
- package/dist/decide/bench/source.js.map +1 -0
- package/dist/decide/bench/spot-check.d.ts +117 -0
- package/dist/decide/bench/spot-check.d.ts.map +1 -0
- package/dist/decide/bench/spot-check.js +221 -0
- package/dist/decide/bench/spot-check.js.map +1 -0
- package/dist/decide/bench/stats.d.ts +57 -0
- package/dist/decide/bench/stats.d.ts.map +1 -0
- package/dist/decide/bench/stats.js +82 -0
- package/dist/decide/bench/stats.js.map +1 -0
- package/dist/decide/bench/types.d.ts +216 -0
- package/dist/decide/bench/types.d.ts.map +1 -0
- package/dist/decide/bench/types.js +104 -0
- package/dist/decide/bench/types.js.map +1 -0
- package/dist/decide/client.d.ts +35 -1
- package/dist/decide/client.d.ts.map +1 -1
- package/dist/decide/client.js +124 -30
- package/dist/decide/client.js.map +1 -1
- package/dist/decide/credentials.d.ts +177 -17
- package/dist/decide/credentials.d.ts.map +1 -1
- package/dist/decide/credentials.js +505 -41
- package/dist/decide/credentials.js.map +1 -1
- package/dist/decide/index.d.ts +8 -8
- package/dist/decide/index.d.ts.map +1 -1
- package/dist/decide/index.js +8 -8
- package/dist/decide/index.js.map +1 -1
- package/dist/decide/jev-wire.d.ts +25 -19
- package/dist/decide/jev-wire.d.ts.map +1 -1
- package/dist/decide/jev-wire.js +56 -31
- package/dist/decide/jev-wire.js.map +1 -1
- package/dist/decide/operations.d.ts +63 -12
- package/dist/decide/operations.d.ts.map +1 -1
- package/dist/decide/operations.js +116 -58
- package/dist/decide/operations.js.map +1 -1
- package/dist/decide/provider-state.d.ts +85 -12
- package/dist/decide/provider-state.d.ts.map +1 -1
- package/dist/decide/provider-state.js +154 -21
- package/dist/decide/provider-state.js.map +1 -1
- package/dist/decide/provider.d.ts +5 -0
- package/dist/decide/provider.d.ts.map +1 -1
- package/dist/decide/provider.js.map +1 -1
- package/dist/decide/providers.d.ts +15 -2
- package/dist/decide/providers.d.ts.map +1 -1
- package/dist/decide/providers.js +22 -6
- package/dist/decide/providers.js.map +1 -1
- package/dist/decide/sites/registry.d.ts +22 -0
- package/dist/decide/sites/registry.d.ts.map +1 -1
- package/dist/decide/sites/registry.js +23 -0
- package/dist/decide/sites/registry.js.map +1 -1
- package/dist/decide/wizard.d.ts +12 -4
- package/dist/decide/wizard.d.ts.map +1 -1
- package/dist/decide/wizard.js +79 -26
- package/dist/decide/wizard.js.map +1 -1
- package/dist/dispatch/mvi-projection.d.ts +15 -2
- package/dist/dispatch/mvi-projection.d.ts.map +1 -1
- package/dist/dispatch/mvi-projection.js +73 -12
- package/dist/dispatch/mvi-projection.js.map +1 -1
- package/dist/docs/adr-allocator.d.ts +2 -2
- package/dist/docs/adr-allocator.d.ts.map +1 -1
- package/dist/docs/adr-allocator.js +17 -4
- package/dist/docs/adr-allocator.js.map +1 -1
- package/dist/docs/blob-consolidation.js +1 -1
- package/dist/docs/blob-consolidation.js.map +1 -1
- package/dist/docs/display-alias.d.ts +1 -1
- package/dist/docs/display-alias.d.ts.map +1 -1
- package/dist/docs/display-alias.js +7 -4
- package/dist/docs/display-alias.js.map +1 -1
- package/dist/docs/docs-inconsistency-detector.js +1 -1
- package/dist/docs/docs-inconsistency-detector.js.map +1 -1
- package/dist/docs/docs-update.d.ts.map +1 -1
- package/dist/docs/docs-update.js +6 -1
- package/dist/docs/docs-update.js.map +1 -1
- package/dist/docs/export-document.js +2928 -1053
- package/dist/docs/export-document.js.map +3 -3
- package/dist/docs/numbering.js +1 -1
- package/dist/docs/numbering.js.map +1 -1
- package/dist/docs/supersede.d.ts.map +1 -1
- package/dist/docs/supersede.js +6 -3
- package/dist/docs/supersede.js.map +1 -1
- package/dist/docs/version-ssot.js +1 -1
- package/dist/docs/version-ssot.js.map +1 -1
- package/dist/doctor/db-substrate.d.ts.map +1 -1
- package/dist/doctor/db-substrate.js +39 -24
- package/dist/doctor/db-substrate.js.map +1 -1
- package/dist/doctor/knowledge-summary.d.ts +10 -3
- package/dist/doctor/knowledge-summary.d.ts.map +1 -1
- package/dist/doctor/knowledge-summary.js +10 -3
- package/dist/doctor/knowledge-summary.js.map +1 -1
- package/dist/doctor/project-identity.d.ts +128 -37
- package/dist/doctor/project-identity.d.ts.map +1 -1
- package/dist/doctor/project-identity.js +476 -63
- package/dist/doctor/project-identity.js.map +1 -1
- package/dist/doctor/twin-collapse.d.ts +52 -2
- package/dist/doctor/twin-collapse.d.ts.map +1 -1
- package/dist/doctor/twin-collapse.js +108 -4
- package/dist/doctor/twin-collapse.js.map +1 -1
- package/dist/error-catalog.js +2 -2
- package/dist/error-catalog.js.map +1 -1
- package/dist/error-registry.js +1 -1
- package/dist/error-registry.js.map +1 -1
- package/dist/gateway-client/generated/types.gen.d.ts +22 -2
- package/dist/gateway-client/generated/types.gen.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +20 -11
- package/dist/init.js.map +1 -1
- package/dist/inject/index.d.ts.map +1 -1
- package/dist/inject/index.js +2 -3
- package/dist/inject/index.js.map +1 -1
- package/dist/internal.d.ts +5 -4
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +6 -4
- package/dist/internal.js.map +1 -1
- package/dist/llm/credential-remove-entry.d.ts +59 -0
- package/dist/llm/credential-remove-entry.d.ts.map +1 -0
- package/dist/llm/credential-remove-entry.js +101 -0
- package/dist/llm/credential-remove-entry.js.map +1 -0
- package/dist/llm/oauth/device-code.d.ts +26 -6
- package/dist/llm/oauth/device-code.d.ts.map +1 -1
- package/dist/llm/oauth/device-code.js +44 -12
- package/dist/llm/oauth/device-code.js.map +1 -1
- package/dist/llm/plugin-facade.js +3017 -1142
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/memory/attention.d.ts.map +1 -1
- package/dist/memory/attention.js +5 -3
- package/dist/memory/attention.js.map +1 -1
- package/dist/memory/decisions.d.ts +48 -3
- package/dist/memory/decisions.d.ts.map +1 -1
- package/dist/memory/decisions.js +98 -14
- package/dist/memory/decisions.js.map +1 -1
- package/dist/memory/learnings.d.ts +6 -6
- package/dist/memory/patterns.d.ts +4 -4
- package/dist/migration/manual/T10165-backfill-adr-index.d.ts.map +1 -1
- package/dist/migration/manual/T10165-backfill-adr-index.js +5 -1
- package/dist/migration/manual/T10165-backfill-adr-index.js.map +1 -1
- package/dist/nexus/fleet-status.d.ts +83 -0
- package/dist/nexus/fleet-status.d.ts.map +1 -0
- package/dist/nexus/fleet-status.js +414 -0
- package/dist/nexus/fleet-status.js.map +1 -0
- package/dist/nexus/git-state.d.ts +15 -0
- package/dist/nexus/git-state.d.ts.map +1 -1
- package/dist/nexus/git-state.js +67 -2
- package/dist/nexus/git-state.js.map +1 -1
- package/dist/nexus/identity.d.ts.map +1 -1
- package/dist/nexus/identity.js +4 -0
- package/dist/nexus/identity.js.map +1 -1
- package/dist/nexus/index.d.ts +4 -1
- package/dist/nexus/index.d.ts.map +1 -1
- package/dist/nexus/index.js +7 -1
- package/dist/nexus/index.js.map +1 -1
- package/dist/nexus/migrate-json-to-sqlite.d.ts +3 -2
- package/dist/nexus/migrate-json-to-sqlite.d.ts.map +1 -1
- package/dist/nexus/migrate-json-to-sqlite.js +9 -17
- package/dist/nexus/migrate-json-to-sqlite.js.map +1 -1
- package/dist/nexus/ops.d.ts +1 -0
- package/dist/nexus/ops.d.ts.map +1 -1
- package/dist/nexus/project-activity.d.ts +104 -0
- package/dist/nexus/project-activity.d.ts.map +1 -0
- package/dist/nexus/project-activity.js +150 -0
- package/dist/nexus/project-activity.js.map +1 -0
- package/dist/nexus/query.d.ts +2 -2
- package/dist/nexus/query.d.ts.map +1 -1
- package/dist/nexus/query.js +4 -19
- package/dist/nexus/query.js.map +1 -1
- package/dist/nexus/registry-errors.d.ts +61 -0
- package/dist/nexus/registry-errors.d.ts.map +1 -0
- package/dist/nexus/registry-errors.js +85 -0
- package/dist/nexus/registry-errors.js.map +1 -0
- package/dist/nexus/registry.d.ts +30 -5
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +115 -70
- package/dist/nexus/registry.js.map +1 -1
- package/dist/orchestrate/pivot.d.ts +4 -0
- package/dist/orchestrate/pivot.d.ts.map +1 -1
- package/dist/orchestrate/pivot.js +75 -12
- package/dist/orchestrate/pivot.js.map +1 -1
- package/dist/orchestrate/query-ops.d.ts.map +1 -1
- package/dist/orchestrate/query-ops.js +29 -27
- package/dist/orchestrate/query-ops.js.map +1 -1
- package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
- package/dist/orchestrate/spawn-ops.js +29 -3
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestration/bootstrap.d.ts.map +1 -1
- package/dist/orchestration/bootstrap.js +20 -14
- package/dist/orchestration/bootstrap.js.map +1 -1
- package/dist/orchestration/index.d.ts +15 -1
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/orchestration/index.js +25 -6
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/lead-rollup.d.ts +7 -1
- package/dist/orchestration/lead-rollup.d.ts.map +1 -1
- package/dist/orchestration/lead-rollup.js +6 -3
- package/dist/orchestration/lead-rollup.js.map +1 -1
- package/dist/orchestration/spawn-prompt.js +1 -1
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/orchestration/waves.d.ts +21 -10
- package/dist/orchestration/waves.d.ts.map +1 -1
- package/dist/orchestration/waves.js +38 -35
- package/dist/orchestration/waves.js.map +1 -1
- package/dist/paths.d.ts +9 -2
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +30 -13
- package/dist/paths.js.map +1 -1
- package/dist/phases/index.d.ts +1 -1
- package/dist/phases/index.d.ts.map +1 -1
- package/dist/phases/index.js +3 -4
- package/dist/phases/index.js.map +1 -1
- package/dist/project-info.d.ts +40 -3
- package/dist/project-info.d.ts.map +1 -1
- package/dist/project-info.js +74 -6
- package/dist/project-info.js.map +1 -1
- package/dist/project-lifecycle.d.ts +28 -7
- package/dist/project-lifecycle.d.ts.map +1 -1
- package/dist/project-lifecycle.js +114 -47
- package/dist/project-lifecycle.js.map +1 -1
- package/dist/project-scope.d.ts +70 -3
- package/dist/project-scope.d.ts.map +1 -1
- package/dist/project-scope.js +154 -15
- package/dist/project-scope.js.map +1 -1
- package/dist/release/open.d.ts +12 -2
- package/dist/release/open.d.ts.map +1 -1
- package/dist/release/open.js +32 -3
- package/dist/release/open.js.map +1 -1
- package/dist/release/preflight-skip.d.ts +73 -0
- package/dist/release/preflight-skip.d.ts.map +1 -0
- package/dist/release/preflight-skip.js +254 -0
- package/dist/release/preflight-skip.js.map +1 -0
- package/dist/render/decide/index.d.ts +51 -0
- package/dist/render/decide/index.d.ts.map +1 -0
- package/dist/render/decide/index.js +289 -0
- package/dist/render/decide/index.js.map +1 -0
- package/dist/render/index.d.ts +1 -0
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +1 -0
- package/dist/render/index.js.map +1 -1
- package/dist/render/nexus/graph/index.d.ts +5 -0
- package/dist/render/nexus/graph/index.d.ts.map +1 -1
- package/dist/render/nexus/graph/index.js +53 -0
- package/dist/render/nexus/graph/index.js.map +1 -1
- package/dist/scaffold/ensure-config.d.ts +14 -6
- package/dist/scaffold/ensure-config.d.ts.map +1 -1
- package/dist/scaffold/ensure-config.js +39 -17
- package/dist/scaffold/ensure-config.js.map +1 -1
- package/dist/scaffold/project-identity.d.ts +115 -23
- package/dist/scaffold/project-identity.d.ts.map +1 -1
- package/dist/scaffold/project-identity.js +196 -44
- package/dist/scaffold/project-identity.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +3027 -1152
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sentient/cross-project-hygiene.d.ts +12 -6
- package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
- package/dist/sentient/cross-project-hygiene.js +15 -10
- package/dist/sentient/cross-project-hygiene.js.map +1 -1
- package/dist/session/engine-ops.d.ts +13 -4
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +38 -45
- package/dist/session/engine-ops.js.map +1 -1
- package/dist/sessions/briefing.d.ts +7 -3
- package/dist/sessions/briefing.d.ts.map +1 -1
- package/dist/sessions/briefing.js +10 -10
- package/dist/sessions/briefing.js.map +1 -1
- package/dist/sessions/drift-watchdog.d.ts.map +1 -1
- package/dist/sessions/drift-watchdog.js +11 -19
- package/dist/sessions/drift-watchdog.js.map +1 -1
- package/dist/sessions/focus-state-store.d.ts +103 -26
- package/dist/sessions/focus-state-store.d.ts.map +1 -1
- package/dist/sessions/focus-state-store.js +166 -37
- package/dist/sessions/focus-state-store.js.map +1 -1
- package/dist/sessions/handoff.d.ts.map +1 -1
- package/dist/sessions/handoff.js +9 -18
- package/dist/sessions/handoff.js.map +1 -1
- package/dist/sessions/index.d.ts +4 -2
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +35 -6
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/session-drift.d.ts.map +1 -1
- package/dist/sessions/session-drift.js +4 -2
- package/dist/sessions/session-drift.js.map +1 -1
- package/dist/sessions/session-view.d.ts +8 -1
- package/dist/sessions/session-view.d.ts.map +1 -1
- package/dist/sessions/session-view.js +9 -2
- package/dist/sessions/session-view.js.map +1 -1
- package/dist/setup/config-json-merge.d.ts.map +1 -1
- package/dist/setup/config-json-merge.js +1 -0
- package/dist/setup/config-json-merge.js.map +1 -1
- package/dist/setup/index.d.ts +4 -2
- package/dist/setup/index.d.ts.map +1 -1
- package/dist/setup/index.js +6 -2
- package/dist/setup/index.js.map +1 -1
- package/dist/setup/sections/nexus-account.d.ts +32 -0
- package/dist/setup/sections/nexus-account.d.ts.map +1 -0
- package/dist/setup/sections/nexus-account.js +64 -0
- package/dist/setup/sections/nexus-account.js.map +1 -0
- package/dist/setup/wizard.d.ts +1 -1
- package/dist/setup/wizard.d.ts.map +1 -1
- package/dist/setup/wizard.js.map +1 -1
- package/dist/skills/orchestrator/startup.d.ts.map +1 -1
- package/dist/skills/orchestrator/startup.js +18 -31
- package/dist/skills/orchestrator/startup.js.map +1 -1
- package/dist/snapshot/index.d.ts.map +1 -1
- package/dist/snapshot/index.js +60 -53
- package/dist/snapshot/index.js.map +1 -1
- package/dist/spawn/agent-identity.d.ts +33 -1
- package/dist/spawn/agent-identity.d.ts.map +1 -1
- package/dist/spawn/agent-identity.js +53 -1
- package/dist/spawn/agent-identity.js.map +1 -1
- package/dist/spawn/index.d.ts +1 -1
- package/dist/spawn/index.d.ts.map +1 -1
- package/dist/spawn/index.js +1 -1
- package/dist/spawn/index.js.map +1 -1
- package/dist/stats/index.d.ts.map +1 -1
- package/dist/stats/index.js +3 -4
- package/dist/stats/index.js.map +1 -1
- package/dist/status/index.d.ts +12 -3
- package/dist/status/index.d.ts.map +1 -1
- package/dist/status/index.js +47 -5
- package/dist/status/index.js.map +1 -1
- package/dist/store/attachment-repair.d.ts.map +1 -1
- package/dist/store/attachment-repair.js +42 -3
- package/dist/store/attachment-repair.js.map +1 -1
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +30 -46
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/backup-recover-brain.d.ts +4 -0
- package/dist/store/backup-recover-brain.d.ts.map +1 -1
- package/dist/store/backup-recover-brain.js +2 -0
- package/dist/store/backup-recover-brain.js.map +1 -1
- package/dist/store/backup-recover.d.ts +9 -0
- package/dist/store/backup-recover.d.ts.map +1 -1
- package/dist/store/backup-recover.js +28 -1
- package/dist/store/backup-recover.js.map +1 -1
- package/dist/store/backup-sidecar.d.ts +30 -0
- package/dist/store/backup-sidecar.d.ts.map +1 -1
- package/dist/store/backup-sidecar.js +90 -2
- package/dist/store/backup-sidecar.js.map +1 -1
- package/dist/store/blob-keep.d.ts +135 -0
- package/dist/store/blob-keep.d.ts.map +1 -0
- package/dist/store/blob-keep.js +283 -0
- package/dist/store/blob-keep.js.map +1 -0
- package/dist/store/converters.d.ts.map +1 -1
- package/dist/store/converters.js +11 -0
- package/dist/store/converters.js.map +1 -1
- package/dist/store/credential-transfer.d.ts +37 -5
- package/dist/store/credential-transfer.d.ts.map +1 -1
- package/dist/store/credential-transfer.js +73 -18
- package/dist/store/credential-transfer.js.map +1 -1
- package/dist/store/data-accessor.d.ts +1 -1
- package/dist/store/data-accessor.d.ts.map +1 -1
- package/dist/store/data-accessor.js.map +1 -1
- package/dist/store/db-helpers.d.ts +18 -0
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +46 -0
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/exodus/on-open.d.ts.map +1 -1
- package/dist/store/exodus/on-open.js +35 -0
- package/dist/store/exodus/on-open.js.map +1 -1
- package/dist/store/exodus/runtime-targets.d.ts +3 -3
- package/dist/store/exodus/runtime-targets.js +3 -3
- package/dist/store/import-remap.d.ts +12 -1
- package/dist/store/import-remap.d.ts.map +1 -1
- package/dist/store/import-remap.js +14 -0
- package/dist/store/import-remap.js.map +1 -1
- package/dist/store/legacy-tasks-lineage.d.ts +3 -1
- package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
- package/dist/store/legacy-tasks-lineage.js +3 -1
- package/dist/store/legacy-tasks-lineage.js.map +1 -1
- package/dist/store/memory-accessor.js +1 -1
- package/dist/store/memory-accessor.js.map +1 -1
- package/dist/store/migration-manager.d.ts +61 -0
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +102 -4
- package/dist/store/migration-manager.js.map +1 -1
- package/dist/store/nexus-validation-schemas.d.ts +64 -0
- package/dist/store/nexus-validation-schemas.d.ts.map +1 -1
- package/dist/store/portable-bundle-import.d.ts +8 -0
- package/dist/store/portable-bundle-import.d.ts.map +1 -1
- package/dist/store/portable-bundle-import.js +10 -0
- package/dist/store/portable-bundle-import.js.map +1 -1
- package/dist/store/portable-bundle-scan.d.ts.map +1 -1
- package/dist/store/portable-bundle-scan.js +1 -0
- package/dist/store/portable-bundle-scan.js.map +1 -1
- package/dist/store/portable-bundle.d.ts.map +1 -1
- package/dist/store/portable-bundle.js +15 -14
- package/dist/store/portable-bundle.js.map +1 -1
- package/dist/store/pre-repair-snapshot.d.ts +4 -1
- package/dist/store/pre-repair-snapshot.d.ts.map +1 -1
- package/dist/store/pre-repair-snapshot.js +5 -1
- package/dist/store/pre-repair-snapshot.js.map +1 -1
- package/dist/store/regenerators.d.ts +4 -2
- package/dist/store/regenerators.d.ts.map +1 -1
- package/dist/store/regenerators.js +7 -3
- package/dist/store/regenerators.js.map +1 -1
- package/dist/store/repair-malformed-dbs.d.ts +4 -0
- package/dist/store/repair-malformed-dbs.d.ts.map +1 -1
- package/dist/store/repair-malformed-dbs.js +3 -0
- package/dist/store/repair-malformed-dbs.js.map +1 -1
- package/dist/store/safety-data-accessor.d.ts +8 -3
- package/dist/store/safety-data-accessor.d.ts.map +1 -1
- package/dist/store/safety-data-accessor.js +11 -4
- package/dist/store/safety-data-accessor.js.map +1 -1
- package/dist/store/schema/cleo-global/nexus.d.ts +48 -0
- package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/nexus.js +17 -0
- package/dist/store/schema/cleo-global/nexus.js.map +1 -1
- package/dist/store/schema/cleo-project/docs.d.ts +16 -0
- package/dist/store/schema/cleo-project/docs.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/docs.js +10 -0
- package/dist/store/schema/cleo-project/docs.js.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core.d.ts +80 -0
- package/dist/store/schema/cleo-project/tasks-core.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core.js +25 -1
- package/dist/store/schema/cleo-project/tasks-core.js.map +1 -1
- package/dist/store/schema/cleo-shared/brain.d.ts +1 -1
- package/dist/store/schema/memory-schema.d.ts +1 -1
- package/dist/store/schema/nexus-schema.d.ts +48 -0
- package/dist/store/schema/nexus-schema.d.ts.map +1 -1
- package/dist/store/schema/nexus-schema.js +28 -7
- package/dist/store/schema/nexus-schema.js.map +1 -1
- package/dist/store/session-store.d.ts +65 -0
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +108 -7
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +245 -47
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite.d.ts +15 -3
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +52 -20
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/store-write-guard.d.ts +9 -3
- package/dist/store/store-write-guard.d.ts.map +1 -1
- package/dist/store/store-write-guard.js +25 -4
- package/dist/store/store-write-guard.js.map +1 -1
- package/dist/store/table-classification.d.ts +1 -1
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +34 -8
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/task-claim.d.ts +144 -0
- package/dist/store/task-claim.d.ts.map +1 -0
- package/dist/store/task-claim.js +195 -0
- package/dist/store/task-claim.js.map +1 -0
- package/dist/store/task-version.d.ts +43 -5
- package/dist/store/task-version.d.ts.map +1 -1
- package/dist/store/task-version.js +113 -17
- package/dist/store/task-version.js.map +1 -1
- package/dist/store/tasks-schema.d.ts +2 -0
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +1 -0
- package/dist/store/tasks-schema.js.map +1 -1
- package/dist/store/tasks-sqlite.js +1 -1
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/store/twin-collapse.d.ts +339 -22
- package/dist/store/twin-collapse.d.ts.map +1 -1
- package/dist/store/twin-collapse.js +1323 -48
- package/dist/store/twin-collapse.js.map +1 -1
- package/dist/store/umbrella-data-accessor.d.ts +8 -3
- package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
- package/dist/store/umbrella-data-accessor.js +10 -4
- package/dist/store/umbrella-data-accessor.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +161 -1
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/store/with-retry.d.ts +36 -0
- package/dist/store/with-retry.d.ts.map +1 -1
- package/dist/store/with-retry.js +51 -0
- package/dist/store/with-retry.js.map +1 -1
- package/dist/store/worktree-build-guard.d.ts +13 -4
- package/dist/store/worktree-build-guard.d.ts.map +1 -1
- package/dist/store/worktree-build-guard.js +21 -10
- package/dist/store/worktree-build-guard.js.map +1 -1
- package/dist/store/worktree-isolation-guard.d.ts +121 -10
- package/dist/store/worktree-isolation-guard.d.ts.map +1 -1
- package/dist/store/worktree-isolation-guard.js +155 -34
- package/dist/store/worktree-isolation-guard.js.map +1 -1
- package/dist/system/backup.d.ts +7 -0
- package/dist/system/backup.d.ts.map +1 -1
- package/dist/system/backup.js +5 -0
- package/dist/system/backup.js.map +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +3 -1
- package/dist/system/health.js.map +1 -1
- package/dist/system/inject-generate.d.ts.map +1 -1
- package/dist/system/inject-generate.js +23 -10
- package/dist/system/inject-generate.js.map +1 -1
- package/dist/system/project-health.d.ts +8 -0
- package/dist/system/project-health.d.ts.map +1 -1
- package/dist/system/project-health.js +13 -5
- package/dist/system/project-health.js.map +1 -1
- package/dist/task-tools/index.d.ts +1 -1
- package/dist/task-tools/index.d.ts.map +1 -1
- package/dist/task-tools/index.js +1 -1
- package/dist/task-tools/index.js.map +1 -1
- package/dist/task-tools/score-task-priority.d.ts +38 -0
- package/dist/task-tools/score-task-priority.d.ts.map +1 -1
- package/dist/task-tools/score-task-priority.js +51 -0
- package/dist/task-tools/score-task-priority.js.map +1 -1
- package/dist/task-work/claims.d.ts +215 -0
- package/dist/task-work/claims.d.ts.map +1 -0
- package/dist/task-work/claims.js +272 -0
- package/dist/task-work/claims.js.map +1 -0
- package/dist/task-work/index.d.ts +47 -3
- package/dist/task-work/index.d.ts.map +1 -1
- package/dist/task-work/index.js +74 -41
- package/dist/task-work/index.js.map +1 -1
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +3 -2
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/analyze.d.ts.map +1 -1
- package/dist/tasks/analyze.js +3 -4
- package/dist/tasks/analyze.js.map +1 -1
- package/dist/tasks/change-set.d.ts +5 -0
- package/dist/tasks/change-set.d.ts.map +1 -1
- package/dist/tasks/change-set.js +59 -3
- package/dist/tasks/change-set.js.map +1 -1
- package/dist/tasks/complete.d.ts +16 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +27 -7
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/component-pr.d.ts +162 -1
- package/dist/tasks/component-pr.d.ts.map +1 -1
- package/dist/tasks/component-pr.js +560 -59
- package/dist/tasks/component-pr.js.map +1 -1
- package/dist/tasks/done-record.d.ts +14 -1
- package/dist/tasks/done-record.d.ts.map +1 -1
- package/dist/tasks/done-record.js +37 -0
- package/dist/tasks/done-record.js.map +1 -1
- package/dist/tasks/duplicate-detector.d.ts +20 -1
- package/dist/tasks/duplicate-detector.d.ts.map +1 -1
- package/dist/tasks/duplicate-detector.js +10 -2
- package/dist/tasks/duplicate-detector.js.map +1 -1
- package/dist/tasks/engine-wrap-ops.d.ts +19 -10
- package/dist/tasks/engine-wrap-ops.d.ts.map +1 -1
- package/dist/tasks/engine-wrap-ops.js +38 -10
- package/dist/tasks/engine-wrap-ops.js.map +1 -1
- package/dist/tasks/graph-ops.d.ts +9 -2
- package/dist/tasks/graph-ops.d.ts.map +1 -1
- package/dist/tasks/graph-ops.js +24 -32
- package/dist/tasks/graph-ops.js.map +1 -1
- package/dist/tasks/plan.d.ts.map +1 -1
- package/dist/tasks/plan.js +16 -60
- package/dist/tasks/plan.js.map +1 -1
- package/dist/tasks/task-context.d.ts.map +1 -1
- package/dist/tasks/task-context.js +13 -0
- package/dist/tasks/task-context.js.map +1 -1
- package/dist/tasks/task-import.d.ts.map +1 -1
- package/dist/tasks/task-import.js +21 -12
- package/dist/tasks/task-import.js.map +1 -1
- package/dist/tasks/task-next.d.ts +25 -2
- package/dist/tasks/task-next.d.ts.map +1 -1
- package/dist/tasks/task-next.js +32 -13
- package/dist/tasks/task-next.js.map +1 -1
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +7 -5
- package/dist/tasks/update.js.map +1 -1
- package/dist/upgrade.d.ts +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +48 -9
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/doctor/checks.d.ts +20 -6
- package/dist/validation/doctor/checks.d.ts.map +1 -1
- package/dist/validation/doctor/checks.js +51 -8
- package/dist/validation/doctor/checks.js.map +1 -1
- package/dist/validation/validate-ops.d.ts.map +1 -1
- package/dist/validation/validate-ops.js +2 -3
- package/dist/validation/validate-ops.js.map +1 -1
- package/migrations/drizzle-cleo-global/20260929010000_t12512-registry-probed-opened/migration.sql +35 -0
- package/migrations/drizzle-cleo-global/20260929020000_t12721-git-state-head-committed-at/migration.sql +25 -0
- package/migrations/drizzle-cleo-project/20260929000000_t12535-docs-attachments-union-shape/migration.sql +21 -0
- package/migrations/drizzle-cleo-project/20260929120000_t12502-task-claim-leases/migration.sql +77 -0
- package/migrations/drizzle-cleo-project/20260929130000_t12736-claim-lease-iso-repair/migration.sql +37 -0
- package/package.json +23 -13
- package/schemas/project-info.schema.json +10 -4
- package/templates/CLEO-INJECTION.md +1 -1
- package/templates/CLEO-REFERENCE.md +3 -3
- package/templates/cleo-gitignore +11 -0
- package/templates/workflows/release-prepare.yml.tmpl +156 -10
|
@@ -1,33 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Write-once portable project identity: decide, re-link, adopt (T12325).
|
|
2
|
+
* Write-once portable project identity: decide, re-link, adopt (T12325 · T12716).
|
|
3
3
|
*
|
|
4
|
-
* The tracked `.cleo/project
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* The tracked identity — `.cleo/project.json` `{schemaVersion, id, name}`,
|
|
5
|
+
* with the ADR-094 `.cleo/project-id` kept as a legacy mirror (both read by
|
|
6
|
+
* `@cleocode/paths` `readPortableProjectId`) — is the one project identifier
|
|
7
|
+
* that survives a fresh clone, a move, and a new device. This module owns the
|
|
8
|
+
* write-side rules:
|
|
7
9
|
*
|
|
8
|
-
* 1. **Write once.** The
|
|
9
|
-
* conflicting or malformed file is reported, not repaired.
|
|
10
|
-
*
|
|
10
|
+
* 1. **Write once.** The id is created with `O_EXCL` and never rewritten. A
|
|
11
|
+
* conflicting or malformed file is reported, not repaired. Only the
|
|
12
|
+
* manifest's `name` may change, through {@link renameProjectManifest}.
|
|
13
|
+
* 2. **Never silently re-mint.** When no tracked or local id exists, the
|
|
11
14
|
* global registry is searched for the project's previous identity (same
|
|
12
15
|
* path, its canonical-fingerprint alias, or a live checkout of the same remote). A
|
|
13
16
|
* unique candidate is re-linked; several candidates refuse to guess; a new
|
|
14
17
|
* id is minted only when nothing can be re-linked or when the caller asks
|
|
15
18
|
* for one explicitly.
|
|
19
|
+
* 3. **Never migrate on open.** Tracked files are created here only for a
|
|
20
|
+
* project that has NONE yet. Turning a legacy `project-id` into
|
|
21
|
+
* `project.json` is `cleo doctor project-identity --resolve` alone.
|
|
16
22
|
*
|
|
17
|
-
* Precedence when
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
+
* Precedence when the tracked id and the `project-info.json` cache disagree
|
|
24
|
+
* (T12716, reversing the T12325 rule): the TRACKED id wins, as it already did
|
|
25
|
+
* for every reader. The disagreement is reported. The cache is not rewritten
|
|
26
|
+
* here: local state (registry row, aliases) keyed by the old id is re-keyed,
|
|
27
|
+
* with the old id kept as an alias, only by `cleo doctor project-identity
|
|
28
|
+
* --resolve`. Two ids for one repository means two lineages (typically two
|
|
29
|
+
* devices that each ran `cleo init` before the id was tracked).
|
|
23
30
|
*
|
|
24
31
|
* @task T12325
|
|
32
|
+
* @task T12716
|
|
33
|
+
* @see ADR-096 — one committed `.cleo/project.json` (amends ADR-094)
|
|
25
34
|
*/
|
|
26
35
|
/**
|
|
27
36
|
* Where the identity a scaffold step settled on came from.
|
|
28
37
|
*
|
|
29
|
-
* - `
|
|
30
|
-
*
|
|
38
|
+
* - `tracked` — the committed `.cleo/project.json` (or legacy `.cleo/project-id`);
|
|
39
|
+
* it wins over the `project-info.json` cache (T12716).
|
|
40
|
+
* - `project-info` — the `project-info.json` cache, used only when no tracked
|
|
41
|
+
* file exists yet (a project from before ADR-094).
|
|
31
42
|
* - `registry-path` / `registry-alias` / `registry-remote` — re-linked from the
|
|
32
43
|
* global registry because neither file was present.
|
|
33
44
|
* - `minted` — a new random id; only when nothing could be re-linked or the
|
|
@@ -54,11 +65,16 @@ export interface ProjectIdentityDecision {
|
|
|
54
65
|
/** Human-readable facts to surface (conflicts, re-links, coverage gaps). */
|
|
55
66
|
diagnostics: string[];
|
|
56
67
|
}
|
|
57
|
-
/** Outcome of making sure
|
|
68
|
+
/** Outcome of making sure the tracked files record the project's id. */
|
|
58
69
|
export type PortableIdFileOutcome =
|
|
59
|
-
/**
|
|
70
|
+
/** `project.json` already records the same id. */
|
|
60
71
|
'present'
|
|
61
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Only the legacy `project-id` records the same id. Reported, not migrated:
|
|
74
|
+
* `cleo doctor project-identity --resolve` writes `project.json` (T12716).
|
|
75
|
+
*/
|
|
76
|
+
| 'legacy'
|
|
77
|
+
/** Created now (first adoption): `project.json` plus the `project-id` mirror. */
|
|
62
78
|
| 'written'
|
|
63
79
|
/** Present with a DIFFERENT id — reported, not rewritten. */
|
|
64
80
|
| 'conflict'
|
|
@@ -112,19 +128,95 @@ export declare function findRelinkCandidates(projectRoot: string, cleoHome?: str
|
|
|
112
128
|
*/
|
|
113
129
|
export declare function decideProjectIdentity(projectRoot: string, localInfoId: string | undefined, options?: DecideProjectIdentityOptions): Promise<ProjectIdentityDecision>;
|
|
114
130
|
/**
|
|
115
|
-
*
|
|
131
|
+
* Default display name for a project root: its directory basename, made a
|
|
132
|
+
* valid name (control characters and separators replaced, a leading `~`
|
|
133
|
+
* dropped, capped at {@link PROJECT_DISPLAY_NAME_MAX}). `project` when nothing
|
|
134
|
+
* usable is left.
|
|
135
|
+
*
|
|
136
|
+
* @param projectRoot - Project root.
|
|
137
|
+
* @returns A name that passes `isValidProjectDisplayName`.
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```ts
|
|
141
|
+
* defaultProjectDisplayName('/work/cleocode'); // 'cleocode'
|
|
142
|
+
* ```
|
|
143
|
+
* @task T12716
|
|
144
|
+
*/
|
|
145
|
+
export declare function defaultProjectDisplayName(projectRoot: string): string;
|
|
146
|
+
/**
|
|
147
|
+
* Create `.cleo/project.json` for `projectId` — create-only (`O_EXCL`).
|
|
116
148
|
*
|
|
117
|
-
*
|
|
118
|
-
* never
|
|
149
|
+
* @param projectRoot - Absolute project root.
|
|
150
|
+
* @param projectId - The identity to record; never changed afterwards.
|
|
151
|
+
* @param name - Display name; must pass `isValidProjectDisplayName`.
|
|
152
|
+
* @returns `written`, or — for a file that already exists — `present` (same
|
|
153
|
+
* id), `conflict` (different id) or `invalid` (unparseable). Never rewrites.
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```ts
|
|
157
|
+
* await createProjectManifest(root, 'c78d09c3a8ee', 'cleocode'); // 'written'
|
|
158
|
+
* ```
|
|
159
|
+
* @task T12716
|
|
160
|
+
*/
|
|
161
|
+
export declare function createProjectManifest(projectRoot: string, projectId: string, name: string): Promise<'written' | 'present' | 'conflict' | 'invalid' | 'no-cleo-dir'>;
|
|
162
|
+
/**
|
|
163
|
+
* Create the legacy `.cleo/project-id` mirror for `projectId` — create-only.
|
|
164
|
+
* Older builds read only this file, so it is kept beside `project.json`
|
|
165
|
+
* until a later removal (T12716).
|
|
166
|
+
*
|
|
167
|
+
* @param projectRoot - Absolute project root.
|
|
168
|
+
* @param projectId - The identity to mirror.
|
|
169
|
+
* @returns `written`, or for an existing file `present` / `conflict` / `invalid`.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```ts
|
|
173
|
+
* await createProjectIdMirror(root, 'c78d09c3a8ee');
|
|
174
|
+
* ```
|
|
175
|
+
* @task T12716
|
|
176
|
+
*/
|
|
177
|
+
export declare function createProjectIdMirror(projectRoot: string, projectId: string): Promise<'written' | 'present' | 'conflict' | 'invalid' | 'no-cleo-dir'>;
|
|
178
|
+
/**
|
|
179
|
+
* Make sure the tracked files record `projectId` — write-once.
|
|
180
|
+
*
|
|
181
|
+
* Only a project with NO tracked identity gets files: `project.json` and the
|
|
182
|
+
* legacy `project-id` mirror, both created with `O_EXCL`. A present file is
|
|
183
|
+
* compared, never rewritten, and a legacy-only project is reported as
|
|
184
|
+
* `legacy` rather than migrated (migration is `cleo doctor project-identity
|
|
185
|
+
* --resolve`, T12716).
|
|
119
186
|
*
|
|
120
187
|
* @param projectRoot - Absolute project root.
|
|
121
188
|
* @param projectId - The identity to adopt.
|
|
122
|
-
* @
|
|
189
|
+
* @param name - Display name for a new `project.json`; defaults to
|
|
190
|
+
* {@link defaultProjectDisplayName}. Ignored when a file already exists.
|
|
191
|
+
* @returns What happened; `legacy`/`conflict`/`invalid` are for the caller to report.
|
|
123
192
|
*
|
|
124
193
|
* @example
|
|
125
194
|
* ```ts
|
|
126
195
|
* const outcome = await ensurePortableProjectId(root, info.projectId);
|
|
127
196
|
* ```
|
|
128
197
|
*/
|
|
129
|
-
export declare function ensurePortableProjectId(projectRoot: string, projectId: string): Promise<PortableIdFileOutcome>;
|
|
198
|
+
export declare function ensurePortableProjectId(projectRoot: string, projectId: string, name?: string): Promise<PortableIdFileOutcome>;
|
|
199
|
+
/**
|
|
200
|
+
* Rename a project in its committed `.cleo/project.json`: only `name` changes;
|
|
201
|
+
* the id is carried over byte-identical and keys this build does not know are
|
|
202
|
+
* kept (`writeProjectManifestName`: a tmp file unique to the call, renamed
|
|
203
|
+
* into place, so a crash never leaves a half-written identity file).
|
|
204
|
+
*
|
|
205
|
+
* @param projectRoot - Absolute project root.
|
|
206
|
+
* @param name - New display name (trimmed; must pass `isValidProjectDisplayName`).
|
|
207
|
+
* @returns The previous and new manifest names.
|
|
208
|
+
* @throws {CleoError} `VALIDATION_ERROR` for an invalid name; `CONFIG_ERROR`
|
|
209
|
+
* when `project.json` is absent (migrate first) or unusable.
|
|
210
|
+
*
|
|
211
|
+
* @example
|
|
212
|
+
* ```ts
|
|
213
|
+
* await renameProjectManifest(root, 'cleo-platform');
|
|
214
|
+
* ```
|
|
215
|
+
* @task T12716
|
|
216
|
+
*/
|
|
217
|
+
export declare function renameProjectManifest(projectRoot: string, name: string): Promise<{
|
|
218
|
+
oldName: string;
|
|
219
|
+
newName: string;
|
|
220
|
+
projectId: string;
|
|
221
|
+
}>;
|
|
130
222
|
//# sourceMappingURL=project-identity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-identity.d.ts","sourceRoot":"","sources":["../../src/scaffold/project-identity.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"project-identity.d.ts","sourceRoot":"","sources":["../../src/scaffold/project-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AA4BH;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,qBAAqB,GAC7B,cAAc,GACd,SAAS,GACT,eAAe,GACf,gBAAgB,GAChB,iBAAiB,GACjB,QAAQ,CAAC;AAEb,6DAA6D;AAC7D,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAE/E,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,GAAG,EAAE,SAAS,CAAC;CAChB;AAED,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,MAAM,EAAE,qBAAqB,CAAC;IAC9B,4EAA4E;IAC5E,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wEAAwE;AACxE,MAAM,MAAM,qBAAqB;AAC/B,kDAAkD;AAChD,SAAS;AACX;;;GAGG;GACD,QAAQ;AACV,iFAAiF;GAC/E,SAAS;AACX,6DAA6D;GAC3D,UAAU;AACZ,kEAAkE;GAChE,SAAS;AACX,yDAAyD;GACvD,aAAa,CAAC;AAElB,iDAAiD;AACjD,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,6EAA6E;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAc1D;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC;IAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsDnE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,uBAAuB,CAAC,CAoElC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAOrE;AAaD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC,CAazE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC,CAQzE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC,CAkBhC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BlE"}
|
|
@@ -1,34 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Write-once portable project identity: decide, re-link, adopt (T12325).
|
|
2
|
+
* Write-once portable project identity: decide, re-link, adopt (T12325 · T12716).
|
|
3
3
|
*
|
|
4
|
-
* The tracked `.cleo/project
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* The tracked identity — `.cleo/project.json` `{schemaVersion, id, name}`,
|
|
5
|
+
* with the ADR-094 `.cleo/project-id` kept as a legacy mirror (both read by
|
|
6
|
+
* `@cleocode/paths` `readPortableProjectId`) — is the one project identifier
|
|
7
|
+
* that survives a fresh clone, a move, and a new device. This module owns the
|
|
8
|
+
* write-side rules:
|
|
7
9
|
*
|
|
8
|
-
* 1. **Write once.** The
|
|
9
|
-
* conflicting or malformed file is reported, not repaired.
|
|
10
|
-
*
|
|
10
|
+
* 1. **Write once.** The id is created with `O_EXCL` and never rewritten. A
|
|
11
|
+
* conflicting or malformed file is reported, not repaired. Only the
|
|
12
|
+
* manifest's `name` may change, through {@link renameProjectManifest}.
|
|
13
|
+
* 2. **Never silently re-mint.** When no tracked or local id exists, the
|
|
11
14
|
* global registry is searched for the project's previous identity (same
|
|
12
15
|
* path, its canonical-fingerprint alias, or a live checkout of the same remote). A
|
|
13
16
|
* unique candidate is re-linked; several candidates refuse to guess; a new
|
|
14
17
|
* id is minted only when nothing can be re-linked or when the caller asks
|
|
15
18
|
* for one explicitly.
|
|
19
|
+
* 3. **Never migrate on open.** Tracked files are created here only for a
|
|
20
|
+
* project that has NONE yet. Turning a legacy `project-id` into
|
|
21
|
+
* `project.json` is `cleo doctor project-identity --resolve` alone.
|
|
16
22
|
*
|
|
17
|
-
* Precedence when
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
+
* Precedence when the tracked id and the `project-info.json` cache disagree
|
|
24
|
+
* (T12716, reversing the T12325 rule): the TRACKED id wins, as it already did
|
|
25
|
+
* for every reader. The disagreement is reported. The cache is not rewritten
|
|
26
|
+
* here: local state (registry row, aliases) keyed by the old id is re-keyed,
|
|
27
|
+
* with the old id kept as an alias, only by `cleo doctor project-identity
|
|
28
|
+
* --resolve`. Two ids for one repository means two lineages (typically two
|
|
29
|
+
* devices that each ran `cleo init` before the id was tracked).
|
|
23
30
|
*
|
|
24
31
|
* @task T12325
|
|
32
|
+
* @task T12716
|
|
33
|
+
* @see ADR-096 — one committed `.cleo/project.json` (amends ADR-094)
|
|
25
34
|
*/
|
|
26
35
|
import { randomUUID } from 'node:crypto';
|
|
27
36
|
import { existsSync, readFileSync } from 'node:fs';
|
|
28
37
|
import { writeFile } from 'node:fs/promises';
|
|
29
|
-
import { join, resolve } from 'node:path';
|
|
38
|
+
import { basename, join, resolve } from 'node:path';
|
|
30
39
|
import { ExitCode } from '@cleocode/contracts';
|
|
31
|
-
import { canonicalizePath, computePathFingerprintId, formatPortableProjectId, getCleoHome, isValidPortableProjectId, portableProjectIdPath, readPortableProjectId, } from '@cleocode/paths';
|
|
40
|
+
import { canonicalizePath, computePathFingerprintId, formatPortableProjectId, formatProjectManifest, getCleoHome, isValidPortableProjectId, isValidProjectDisplayName, PORTABLE_PROJECT_ID_FILE, PROJECT_DISPLAY_NAME_MAX, PROJECT_MANIFEST_FILE, PROJECT_MANIFEST_SCHEMA_VERSION, portableProjectIdPath, projectManifestPath, readPortableProjectId, readProjectIdFile, readProjectManifest, } from '@cleocode/paths';
|
|
32
41
|
import { CleoError } from '../errors.js';
|
|
33
42
|
import { normalizeRemoteUrl } from '../nexus/identity.js';
|
|
34
43
|
/** Re-exported from its home in `nexus/identity` (moved there by T12470). */
|
|
@@ -127,17 +136,26 @@ export async function findRelinkCandidates(projectRoot, cleoHome = getCleoHome()
|
|
|
127
136
|
export async function decideProjectIdentity(projectRoot, localInfoId, options = {}) {
|
|
128
137
|
const tracked = readPortableProjectId(projectRoot);
|
|
129
138
|
const diagnostics = [];
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
return { projectId: localInfoId, source: 'project-info', diagnostics };
|
|
135
|
-
}
|
|
139
|
+
const trackedFile = `.cleo/${tracked.status !== 'absent' ? (tracked.file ?? PORTABLE_PROJECT_ID_FILE) : PROJECT_MANIFEST_FILE}`;
|
|
140
|
+
// T12716: the tracked id wins — the ONE place this rule lives. Readers
|
|
141
|
+
// (`readDeclaredProjectIdentity`, `decodeProjectInfo`) apply the same order.
|
|
136
142
|
if (tracked.status === 'valid') {
|
|
143
|
+
if (localInfoId && localInfoId !== tracked.projectId) {
|
|
144
|
+
diagnostics.push(`identity conflict: ${trackedFile} is '${tracked.projectId}' but the project-info.json cache is '${localInfoId}'; the tracked id wins. Re-key local state with \`cleo doctor project-identity --resolve\` (the old id stays resolvable as an alias)`);
|
|
145
|
+
}
|
|
137
146
|
return { projectId: tracked.projectId, source: 'tracked', diagnostics };
|
|
138
147
|
}
|
|
139
148
|
if (tracked.status === 'invalid') {
|
|
140
|
-
|
|
149
|
+
if (localInfoId) {
|
|
150
|
+
// Never block a working checkout on a damaged tracked file, and never
|
|
151
|
+
// regenerate it: keep the cached id and report the file.
|
|
152
|
+
diagnostics.push(`${trackedFile} is unusable (${tracked.reason}); keeping the project-info.json id '${localInfoId}'. Restore it: \`git checkout -- ${trackedFile}\``);
|
|
153
|
+
return { projectId: localInfoId, source: 'project-info', diagnostics };
|
|
154
|
+
}
|
|
155
|
+
throw new CleoError(ExitCode.CONFIG_ERROR, `Tracked project identity ${join(projectRoot, trackedFile)} is unusable (${tracked.reason}); refusing to mint a replacement`, { fix: `Restore it from version control: \`git checkout -- ${trackedFile}\`` });
|
|
156
|
+
}
|
|
157
|
+
if (localInfoId) {
|
|
158
|
+
return { projectId: localInfoId, source: 'project-info', diagnostics };
|
|
141
159
|
}
|
|
142
160
|
if (options.mintNewIdentity) {
|
|
143
161
|
diagnostics.push('minted a new identity on explicit request');
|
|
@@ -157,7 +175,7 @@ export async function decideProjectIdentity(projectRoot, localInfoId, options =
|
|
|
157
175
|
throw new CleoError(ExitCode.CONFIG_ERROR, `Cannot re-link project identity for ${projectRoot}: ${ids.length} registered identities match by ${via} (${tier
|
|
158
176
|
.map((candidate) => `${candidate.projectId} @ ${candidate.projectPath}`)
|
|
159
177
|
.join(', ')})`, {
|
|
160
|
-
fix: '
|
|
178
|
+
fix: 'Restore .cleo/project.json (or the legacy .cleo/project-id) with the intended id from version control, or mint explicitly with `cleo init --new-identity`',
|
|
161
179
|
});
|
|
162
180
|
}
|
|
163
181
|
}
|
|
@@ -165,45 +183,179 @@ export async function decideProjectIdentity(projectRoot, localInfoId, options =
|
|
|
165
183
|
return { projectId: randomUUID(), source: 'minted', diagnostics };
|
|
166
184
|
}
|
|
167
185
|
/**
|
|
168
|
-
*
|
|
186
|
+
* Default display name for a project root: its directory basename, made a
|
|
187
|
+
* valid name (control characters and separators replaced, a leading `~`
|
|
188
|
+
* dropped, capped at {@link PROJECT_DISPLAY_NAME_MAX}). `project` when nothing
|
|
189
|
+
* usable is left.
|
|
169
190
|
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
191
|
+
* @param projectRoot - Project root.
|
|
192
|
+
* @returns A name that passes `isValidProjectDisplayName`.
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```ts
|
|
196
|
+
* defaultProjectDisplayName('/work/cleocode'); // 'cleocode'
|
|
197
|
+
* ```
|
|
198
|
+
* @task T12716
|
|
199
|
+
*/
|
|
200
|
+
export function defaultProjectDisplayName(projectRoot) {
|
|
201
|
+
const cleaned = basename(resolve(projectRoot))
|
|
202
|
+
.replace(/[/\\\u0000-\u001f\u007f]/g, '-')
|
|
203
|
+
.replace(/^~+/, '')
|
|
204
|
+
.slice(0, PROJECT_DISPLAY_NAME_MAX)
|
|
205
|
+
.trim();
|
|
206
|
+
return isValidProjectDisplayName(cleaned) ? cleaned : 'project';
|
|
207
|
+
}
|
|
208
|
+
/** Create a file with `O_EXCL`; `false` when it already exists. */
|
|
209
|
+
async function writeExclusive(path, content) {
|
|
210
|
+
try {
|
|
211
|
+
await writeFile(path, content, { flag: 'wx' });
|
|
212
|
+
return true;
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
if (error instanceof Error && 'code' in error && error.code === 'EEXIST')
|
|
216
|
+
return false;
|
|
217
|
+
throw error;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Create `.cleo/project.json` for `projectId` — create-only (`O_EXCL`).
|
|
222
|
+
*
|
|
223
|
+
* @param projectRoot - Absolute project root.
|
|
224
|
+
* @param projectId - The identity to record; never changed afterwards.
|
|
225
|
+
* @param name - Display name; must pass `isValidProjectDisplayName`.
|
|
226
|
+
* @returns `written`, or — for a file that already exists — `present` (same
|
|
227
|
+
* id), `conflict` (different id) or `invalid` (unparseable). Never rewrites.
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* ```ts
|
|
231
|
+
* await createProjectManifest(root, 'c78d09c3a8ee', 'cleocode'); // 'written'
|
|
232
|
+
* ```
|
|
233
|
+
* @task T12716
|
|
234
|
+
*/
|
|
235
|
+
export async function createProjectManifest(projectRoot, projectId, name) {
|
|
236
|
+
if (!isValidPortableProjectId(projectId) || !isValidProjectDisplayName(name))
|
|
237
|
+
return 'invalid';
|
|
238
|
+
if (!existsSync(join(projectRoot, '.cleo')))
|
|
239
|
+
return 'no-cleo-dir';
|
|
240
|
+
const body = formatProjectManifest({
|
|
241
|
+
schemaVersion: PROJECT_MANIFEST_SCHEMA_VERSION,
|
|
242
|
+
id: projectId,
|
|
243
|
+
name,
|
|
244
|
+
});
|
|
245
|
+
if (await writeExclusive(projectManifestPath(projectRoot), body))
|
|
246
|
+
return 'written';
|
|
247
|
+
// Present (or lost a race): judge what is there, never overwrite it.
|
|
248
|
+
const current = readProjectManifest(projectRoot);
|
|
249
|
+
if (current.status !== 'valid')
|
|
250
|
+
return 'invalid';
|
|
251
|
+
return current.manifest.id === projectId ? 'present' : 'conflict';
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Create the legacy `.cleo/project-id` mirror for `projectId` — create-only.
|
|
255
|
+
* Older builds read only this file, so it is kept beside `project.json`
|
|
256
|
+
* until a later removal (T12716).
|
|
257
|
+
*
|
|
258
|
+
* @param projectRoot - Absolute project root.
|
|
259
|
+
* @param projectId - The identity to mirror.
|
|
260
|
+
* @returns `written`, or for an existing file `present` / `conflict` / `invalid`.
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* ```ts
|
|
264
|
+
* await createProjectIdMirror(root, 'c78d09c3a8ee');
|
|
265
|
+
* ```
|
|
266
|
+
* @task T12716
|
|
267
|
+
*/
|
|
268
|
+
export async function createProjectIdMirror(projectRoot, projectId) {
|
|
269
|
+
if (!isValidPortableProjectId(projectId))
|
|
270
|
+
return 'invalid';
|
|
271
|
+
if (!existsSync(join(projectRoot, '.cleo')))
|
|
272
|
+
return 'no-cleo-dir';
|
|
273
|
+
if (await writeExclusive(portableProjectIdPath(projectRoot), formatPortableProjectId(projectId)))
|
|
274
|
+
return 'written';
|
|
275
|
+
const current = readProjectIdFile(projectRoot);
|
|
276
|
+
if (current.status !== 'valid')
|
|
277
|
+
return 'invalid';
|
|
278
|
+
return current.projectId === projectId ? 'present' : 'conflict';
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Make sure the tracked files record `projectId` — write-once.
|
|
282
|
+
*
|
|
283
|
+
* Only a project with NO tracked identity gets files: `project.json` and the
|
|
284
|
+
* legacy `project-id` mirror, both created with `O_EXCL`. A present file is
|
|
285
|
+
* compared, never rewritten, and a legacy-only project is reported as
|
|
286
|
+
* `legacy` rather than migrated (migration is `cleo doctor project-identity
|
|
287
|
+
* --resolve`, T12716).
|
|
172
288
|
*
|
|
173
289
|
* @param projectRoot - Absolute project root.
|
|
174
290
|
* @param projectId - The identity to adopt.
|
|
175
|
-
* @
|
|
291
|
+
* @param name - Display name for a new `project.json`; defaults to
|
|
292
|
+
* {@link defaultProjectDisplayName}. Ignored when a file already exists.
|
|
293
|
+
* @returns What happened; `legacy`/`conflict`/`invalid` are for the caller to report.
|
|
176
294
|
*
|
|
177
295
|
* @example
|
|
178
296
|
* ```ts
|
|
179
297
|
* const outcome = await ensurePortableProjectId(root, info.projectId);
|
|
180
298
|
* ```
|
|
181
299
|
*/
|
|
182
|
-
export async function ensurePortableProjectId(projectRoot, projectId) {
|
|
300
|
+
export async function ensurePortableProjectId(projectRoot, projectId, name) {
|
|
183
301
|
const current = readPortableProjectId(projectRoot);
|
|
184
|
-
if (current.status === 'valid')
|
|
185
|
-
|
|
302
|
+
if (current.status === 'valid') {
|
|
303
|
+
if (current.projectId !== projectId)
|
|
304
|
+
return 'conflict';
|
|
305
|
+
return current.file === PORTABLE_PROJECT_ID_FILE ? 'legacy' : 'present';
|
|
306
|
+
}
|
|
186
307
|
if (current.status === 'invalid')
|
|
187
308
|
return 'invalid';
|
|
188
309
|
if (!isValidPortableProjectId(projectId))
|
|
189
310
|
return 'invalid';
|
|
190
311
|
if (!existsSync(join(projectRoot, '.cleo')))
|
|
191
312
|
return 'no-cleo-dir';
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
313
|
+
const displayName = name !== undefined && isValidProjectDisplayName(name)
|
|
314
|
+
? name
|
|
315
|
+
: defaultProjectDisplayName(projectRoot);
|
|
316
|
+
const manifest = await createProjectManifest(projectRoot, projectId, displayName);
|
|
317
|
+
if (manifest !== 'written' && manifest !== 'present')
|
|
318
|
+
return manifest;
|
|
319
|
+
const mirror = await createProjectIdMirror(projectRoot, projectId);
|
|
320
|
+
if (mirror === 'conflict' || mirror === 'invalid')
|
|
321
|
+
return mirror;
|
|
322
|
+
return manifest;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Rename a project in its committed `.cleo/project.json`: only `name` changes;
|
|
326
|
+
* the id is carried over byte-identical and keys this build does not know are
|
|
327
|
+
* kept (`writeProjectManifestName`: a tmp file unique to the call, renamed
|
|
328
|
+
* into place, so a crash never leaves a half-written identity file).
|
|
329
|
+
*
|
|
330
|
+
* @param projectRoot - Absolute project root.
|
|
331
|
+
* @param name - New display name (trimmed; must pass `isValidProjectDisplayName`).
|
|
332
|
+
* @returns The previous and new manifest names.
|
|
333
|
+
* @throws {CleoError} `VALIDATION_ERROR` for an invalid name; `CONFIG_ERROR`
|
|
334
|
+
* when `project.json` is absent (migrate first) or unusable.
|
|
335
|
+
*
|
|
336
|
+
* @example
|
|
337
|
+
* ```ts
|
|
338
|
+
* await renameProjectManifest(root, 'cleo-platform');
|
|
339
|
+
* ```
|
|
340
|
+
* @task T12716
|
|
341
|
+
*/
|
|
342
|
+
export async function renameProjectManifest(projectRoot, name) {
|
|
343
|
+
const newName = name.trim();
|
|
344
|
+
if (!isValidProjectDisplayName(newName)) {
|
|
345
|
+
throw new CleoError(ExitCode.VALIDATION_ERROR, `Invalid project name '${newName}': use 1-${PROJECT_DISPLAY_NAME_MAX} characters with no "/", "\\", control characters or leading "~"`);
|
|
197
346
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
347
|
+
const current = readProjectManifest(projectRoot);
|
|
348
|
+
if (current.status !== 'valid') {
|
|
349
|
+
throw new CleoError(ExitCode.CONFIG_ERROR, current.status === 'absent'
|
|
350
|
+
? `${projectManifestPath(projectRoot)} does not exist yet`
|
|
351
|
+
: `${projectManifestPath(projectRoot)} is unusable (${current.reason})`, {
|
|
352
|
+
fix: current.status === 'absent'
|
|
353
|
+
? 'Run `cleo doctor project-identity --resolve` to record the identity in .cleo/project.json'
|
|
354
|
+
: `Restore it from version control: \`git checkout -- .cleo/${PROJECT_MANIFEST_FILE}\``,
|
|
355
|
+
});
|
|
207
356
|
}
|
|
357
|
+
// Only `name` changes; unknown keys survive; a per-call tmp file (T12716).
|
|
358
|
+
const { writeProjectManifestName } = await import('../project-info.js');
|
|
359
|
+
return writeProjectManifestName(projectRoot, newName);
|
|
208
360
|
}
|
|
209
361
|
//# sourceMappingURL=project-identity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-identity.js","sourceRoot":"","sources":["../../src/scaffold/project-identity.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"project-identity.js","sourceRoot":"","sources":["../../src/scaffold/project-identity.ts"],"names":[],"mappings":"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"}
|