@cleocode/core 2026.9.16 → 2026.9.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/changesets/parser.d.ts.map +1 -1
- package/dist/changesets/parser.js +67 -0
- package/dist/changesets/parser.js.map +1 -1
- package/dist/crypto/credentials.d.ts +128 -26
- package/dist/crypto/credentials.d.ts.map +1 -1
- package/dist/crypto/credentials.js +183 -142
- package/dist/crypto/credentials.js.map +1 -1
- package/dist/docs/export-document.js +14705 -12949
- package/dist/docs/export-document.js.map +3 -3
- package/dist/doctor/index.d.ts +1 -1
- package/dist/doctor/index.d.ts.map +1 -1
- package/dist/doctor/index.js +1 -1
- package/dist/doctor/index.js.map +1 -1
- package/dist/doctor/nexus-schema-residency.d.ts +1 -1
- package/dist/doctor/nexus-schema-residency.d.ts.map +1 -1
- package/dist/doctor/nexus-schema-residency.js +1 -0
- package/dist/doctor/nexus-schema-residency.js.map +1 -1
- package/dist/doctor/project-identity.d.ts +124 -0
- package/dist/doctor/project-identity.d.ts.map +1 -0
- package/dist/doctor/project-identity.js +307 -0
- package/dist/doctor/project-identity.js.map +1 -0
- package/dist/doctor/superseded-store.d.ts +8 -0
- package/dist/doctor/superseded-store.d.ts.map +1 -1
- package/dist/doctor/superseded-store.js +48 -3
- package/dist/doctor/superseded-store.js.map +1 -1
- package/dist/init.d.ts +7 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +17 -2
- package/dist/init.js.map +1 -1
- package/dist/internal.d.ts +5 -2
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +4 -2
- package/dist/internal.js.map +1 -1
- package/dist/llm/credentials-store.d.ts +10 -0
- package/dist/llm/credentials-store.d.ts.map +1 -1
- package/dist/llm/credentials-store.js +7 -1
- package/dist/llm/credentials-store.js.map +1 -1
- package/dist/llm/plugin-facade.js +13368 -1550
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/nexus/analyze-orchestrator.d.ts +20 -3
- package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
- package/dist/nexus/analyze-orchestrator.js +159 -10
- package/dist/nexus/analyze-orchestrator.js.map +1 -1
- package/dist/nexus/assessment-store.d.ts +57 -0
- package/dist/nexus/assessment-store.d.ts.map +1 -0
- package/dist/nexus/assessment-store.js +73 -0
- package/dist/nexus/assessment-store.js.map +1 -0
- package/dist/nexus/freshness.d.ts +131 -0
- package/dist/nexus/freshness.d.ts.map +1 -0
- package/dist/nexus/freshness.js +391 -0
- package/dist/nexus/freshness.js.map +1 -0
- package/dist/nexus/graph-manifest.d.ts +88 -0
- package/dist/nexus/graph-manifest.d.ts.map +1 -0
- package/dist/nexus/graph-manifest.js +114 -0
- package/dist/nexus/graph-manifest.js.map +1 -0
- package/dist/nexus/knowledge.d.ts +21 -1
- package/dist/nexus/knowledge.d.ts.map +1 -1
- package/dist/nexus/knowledge.js +76 -37
- package/dist/nexus/knowledge.js.map +1 -1
- package/dist/nexus/path-map.d.ts +55 -0
- package/dist/nexus/path-map.d.ts.map +1 -0
- package/dist/nexus/path-map.js +87 -0
- package/dist/nexus/path-map.js.map +1 -0
- package/dist/nexus/projects-clean.d.ts +21 -28
- package/dist/nexus/projects-clean.d.ts.map +1 -1
- package/dist/nexus/projects-clean.js +168 -85
- package/dist/nexus/projects-clean.js.map +1 -1
- package/dist/nexus/query.d.ts.map +1 -1
- package/dist/nexus/query.js +3 -2
- package/dist/nexus/query.js.map +1 -1
- package/dist/nexus/registry-hygiene.d.ts +70 -0
- package/dist/nexus/registry-hygiene.d.ts.map +1 -0
- package/dist/nexus/registry-hygiene.js +113 -0
- package/dist/nexus/registry-hygiene.js.map +1 -0
- package/dist/nexus/registry.d.ts +2 -2
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +48 -12
- package/dist/nexus/registry.js.map +1 -1
- package/dist/paths.d.ts +26 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +99 -6
- package/dist/paths.js.map +1 -1
- package/dist/render/nexus/graph/index.d.ts.map +1 -1
- package/dist/render/nexus/graph/index.js +8 -0
- package/dist/render/nexus/graph/index.js.map +1 -1
- package/dist/scaffold/ensure-config.d.ts +12 -3
- package/dist/scaffold/ensure-config.d.ts.map +1 -1
- package/dist/scaffold/ensure-config.js +61 -38
- package/dist/scaffold/ensure-config.js.map +1 -1
- package/dist/scaffold/project-identity.d.ts +136 -0
- package/dist/scaffold/project-identity.d.ts.map +1 -0
- package/dist/scaffold/project-identity.js +225 -0
- package/dist/scaffold/project-identity.js.map +1 -0
- package/dist/selfimprove/fix-gen.js +13319 -1556
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/store/agent-api-key.d.ts +114 -0
- package/dist/store/agent-api-key.d.ts.map +1 -0
- package/dist/store/agent-api-key.js +136 -0
- package/dist/store/agent-api-key.js.map +1 -0
- package/dist/store/agent-registry-accessor.d.ts +4 -2
- package/dist/store/agent-registry-accessor.d.ts.map +1 -1
- package/dist/store/agent-registry-accessor.js +39 -89
- package/dist/store/agent-registry-accessor.js.map +1 -1
- package/dist/store/api-key-kdf.d.ts +7 -0
- package/dist/store/api-key-kdf.d.ts.map +1 -1
- package/dist/store/api-key-kdf.js +7 -0
- package/dist/store/api-key-kdf.js.map +1 -1
- package/dist/store/backup-crypto.d.ts +49 -0
- package/dist/store/backup-crypto.d.ts.map +1 -1
- package/dist/store/backup-crypto.js +154 -0
- package/dist/store/backup-crypto.js.map +1 -1
- package/dist/store/credential-transfer.d.ts +303 -0
- package/dist/store/credential-transfer.d.ts.map +1 -0
- package/dist/store/credential-transfer.js +774 -0
- package/dist/store/credential-transfer.js.map +1 -0
- package/dist/store/exodus/column-transforms.d.ts +79 -4
- package/dist/store/exodus/column-transforms.d.ts.map +1 -1
- package/dist/store/exodus/column-transforms.js +121 -4
- package/dist/store/exodus/column-transforms.js.map +1 -1
- package/dist/store/exodus/index.d.ts +1 -0
- package/dist/store/exodus/index.d.ts.map +1 -1
- package/dist/store/exodus/index.js +1 -0
- package/dist/store/exodus/index.js.map +1 -1
- package/dist/store/exodus/migrate.d.ts +17 -1
- package/dist/store/exodus/migrate.d.ts.map +1 -1
- package/dist/store/exodus/migrate.js +155 -33
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/on-open.d.ts +14 -0
- package/dist/store/exodus/on-open.d.ts.map +1 -1
- package/dist/store/exodus/on-open.js +115 -6
- package/dist/store/exodus/on-open.js.map +1 -1
- package/dist/store/exodus/reconcile.d.ts +103 -0
- package/dist/store/exodus/reconcile.d.ts.map +1 -0
- package/dist/store/exodus/reconcile.js +728 -0
- package/dist/store/exodus/reconcile.js.map +1 -0
- package/dist/store/exodus/recovery.d.ts.map +1 -1
- package/dist/store/exodus/recovery.js +14 -2
- package/dist/store/exodus/recovery.js.map +1 -1
- package/dist/store/exodus/runtime-targets.d.ts +39 -0
- package/dist/store/exodus/runtime-targets.d.ts.map +1 -0
- package/dist/store/exodus/runtime-targets.js +63 -0
- package/dist/store/exodus/runtime-targets.js.map +1 -0
- package/dist/store/exodus/table-name-map.d.ts.map +1 -1
- package/dist/store/exodus/table-name-map.js +5 -0
- package/dist/store/exodus/table-name-map.js.map +1 -1
- package/dist/store/exodus/table-order.d.ts +35 -0
- package/dist/store/exodus/table-order.d.ts.map +1 -0
- package/dist/store/exodus/table-order.js +62 -0
- package/dist/store/exodus/table-order.js.map +1 -0
- package/dist/store/exodus/verify-migration.d.ts +4 -1
- package/dist/store/exodus/verify-migration.d.ts.map +1 -1
- package/dist/store/exodus/verify-migration.js +142 -10
- package/dist/store/exodus/verify-migration.js.map +1 -1
- package/dist/store/global-salt.d.ts +16 -0
- package/dist/store/global-salt.d.ts.map +1 -1
- package/dist/store/global-salt.js +22 -7
- package/dist/store/global-salt.js.map +1 -1
- package/dist/store/legacy-tasks-lineage.d.ts +86 -0
- package/dist/store/legacy-tasks-lineage.d.ts.map +1 -0
- package/dist/store/legacy-tasks-lineage.js +285 -0
- package/dist/store/legacy-tasks-lineage.js.map +1 -0
- package/dist/store/migration-manager.d.ts +27 -0
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +63 -0
- package/dist/store/migration-manager.js.map +1 -1
- package/dist/store/portable-bundle-import.d.ts +117 -0
- package/dist/store/portable-bundle-import.d.ts.map +1 -0
- package/dist/store/portable-bundle-import.js +589 -0
- package/dist/store/portable-bundle-import.js.map +1 -0
- package/dist/store/portable-bundle-relocate.d.ts +66 -0
- package/dist/store/portable-bundle-relocate.d.ts.map +1 -0
- package/dist/store/portable-bundle-relocate.js +304 -0
- package/dist/store/portable-bundle-relocate.js.map +1 -0
- package/dist/store/portable-bundle-scan.d.ts +167 -0
- package/dist/store/portable-bundle-scan.d.ts.map +1 -0
- package/dist/store/portable-bundle-scan.js +569 -0
- package/dist/store/portable-bundle-scan.js.map +1 -0
- package/dist/store/portable-bundle.d.ts +146 -0
- package/dist/store/portable-bundle.d.ts.map +1 -0
- package/dist/store/portable-bundle.js +674 -0
- package/dist/store/portable-bundle.js.map +1 -0
- package/dist/store/regenerators.d.ts +3 -1
- package/dist/store/regenerators.d.ts.map +1 -1
- package/dist/store/regenerators.js +6 -2
- package/dist/store/regenerators.js.map +1 -1
- package/dist/store/schema/cleo-global/nexus.d.ts +98 -0
- package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/nexus.js +19 -0
- package/dist/store/schema/cleo-global/nexus.js.map +1 -1
- package/dist/store/schema/nexus-schema.d.ts +102 -0
- package/dist/store/schema/nexus-schema.d.ts.map +1 -1
- package/dist/store/schema/nexus-schema.js +24 -0
- package/dist/store/schema/nexus-schema.js.map +1 -1
- package/dist/store/split-brain-import.d.ts +176 -0
- package/dist/store/split-brain-import.d.ts.map +1 -0
- package/dist/store/split-brain-import.js +680 -0
- package/dist/store/split-brain-import.js.map +1 -0
- package/dist/store/sqlite.d.ts +29 -0
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +57 -5
- package/dist/store/sqlite.js.map +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +30 -5
- package/dist/system/health.js.map +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +60 -0
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/doctor/checks.d.ts +14 -0
- package/dist/validation/doctor/checks.d.ts.map +1 -1
- package/dist/validation/doctor/checks.js +33 -0
- package/dist/validation/doctor/checks.js.map +1 -1
- package/migrations/drizzle-cleo-global/20260924000000_t12354-project-paths/migration.sql +40 -0
- package/migrations/drizzle-nexus/20260924000000_t12315-nexus-parse-cache/migration.sql +21 -0
- package/package.json +13 -13
- package/templates/CLEO-INJECTION.md +3 -3
- package/templates/cleo-gitignore +7 -0
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* Config-file scaffolding: .gitignore, worktree-include, config.json,
|
|
4
4
|
* project-info.json, and related template/version utilities.
|
|
5
5
|
*/
|
|
6
|
-
import { randomUUID } from 'node:crypto';
|
|
7
6
|
import { existsSync, readFileSync } from 'node:fs';
|
|
8
7
|
import { writeFile } from 'node:fs/promises';
|
|
9
8
|
import { basename, dirname, join, resolve } from 'node:path';
|
|
@@ -11,6 +10,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
11
10
|
import { generateProjectHash } from '../nexus/hash.js';
|
|
12
11
|
import { getConfigPath, resolveCleoDir } from '../paths.js';
|
|
13
12
|
import { saveJson } from '../store/json.js';
|
|
13
|
+
import { decideProjectIdentity, ensurePortableProjectId } from './project-identity.js';
|
|
14
14
|
/**
|
|
15
15
|
* Resolve the `.cleo` directory for scaffold steps.
|
|
16
16
|
*
|
|
@@ -46,6 +46,9 @@ export const CLEO_GITIGNORE_FALLBACK = `# .cleo/.gitignore — Deny-by-default f
|
|
|
46
46
|
# Recovery for all four runtime files (tasks.db, brain.db, config.json,
|
|
47
47
|
# project-info.json) is provided by \`cleo backup add\` snapshots under
|
|
48
48
|
# .cleo/backups/. See .cleo/adrs/ADR-013 for the full recovery story.
|
|
49
|
+
#
|
|
50
|
+
# ADR-094 (amends ADR-013 §9, T12325): project-id IS tracked — the write-once portable
|
|
51
|
+
# project identity. CLEO never rewrites it, so git has nothing to overwrite.
|
|
49
52
|
|
|
50
53
|
# Step 1: Ignore everything
|
|
51
54
|
*
|
|
@@ -53,6 +56,7 @@ export const CLEO_GITIGNORE_FALLBACK = `# .cleo/.gitignore — Deny-by-default f
|
|
|
53
56
|
# Allow list
|
|
54
57
|
!.gitignore
|
|
55
58
|
!project-context.json
|
|
59
|
+
!project-id
|
|
56
60
|
!setup-otel.sh
|
|
57
61
|
!DATA-SAFETY-IMPLEMENTATION-SUMMARY.md
|
|
58
62
|
!adrs/
|
|
@@ -376,59 +380,78 @@ export async function ensureConfig(projectRoot, opts) {
|
|
|
376
380
|
};
|
|
377
381
|
}
|
|
378
382
|
/**
|
|
379
|
-
* Create or refresh project-info.json
|
|
383
|
+
* Create or refresh project-info.json, and adopt its id into the tracked,
|
|
384
|
+
* write-once `.cleo/project-id` (T12325).
|
|
380
385
|
* Idempotent: skips if file exists (unless force).
|
|
381
386
|
*
|
|
387
|
+
* The id is never minted while it can be re-linked: an existing local id is
|
|
388
|
+
* kept, a committed `.cleo/project-id` is used by a fresh clone, and otherwise
|
|
389
|
+
* the global registry is searched before a new id is minted (see
|
|
390
|
+
* {@link decideProjectIdentity}).
|
|
391
|
+
*
|
|
382
392
|
* @param projectRoot - Absolute path to the project root directory
|
|
383
393
|
* @param opts - Optional configuration
|
|
384
394
|
* @param opts.force - When true, regenerate even if the file exists
|
|
385
|
-
* @
|
|
395
|
+
* @param opts.mintNewIdentity - Explicitly mint a new id instead of re-linking
|
|
396
|
+
* @returns Scaffold result indicating the action taken; `details` carries the
|
|
397
|
+
* identity provenance and any conflict to report
|
|
386
398
|
*/
|
|
387
399
|
export async function ensureProjectInfo(projectRoot, opts) {
|
|
388
400
|
const cleoDir = resolveScaffoldCleoDir(projectRoot);
|
|
389
401
|
const projectInfoPath = join(cleoDir, 'project-info.json');
|
|
390
|
-
|
|
402
|
+
let existing;
|
|
403
|
+
if (existsSync(projectInfoPath)) {
|
|
391
404
|
try {
|
|
392
|
-
|
|
393
|
-
let repaired = false;
|
|
394
|
-
if (typeof existing.projectId !== 'string' || existing.projectId.length === 0) {
|
|
395
|
-
existing.projectId = randomUUID();
|
|
396
|
-
existing.lastUpdated = new Date().toISOString();
|
|
397
|
-
repaired = true;
|
|
398
|
-
}
|
|
399
|
-
// Backfill missing name (cheap — always available from basename).
|
|
400
|
-
if (typeof existing.name !== 'string' || existing.name.length === 0) {
|
|
401
|
-
existing.name = basename(resolve(projectRoot));
|
|
402
|
-
existing.lastUpdated = new Date().toISOString();
|
|
403
|
-
repaired = true;
|
|
404
|
-
}
|
|
405
|
-
if (repaired) {
|
|
406
|
-
await writeFile(projectInfoPath, JSON.stringify(existing, null, 2));
|
|
407
|
-
return { action: 'repaired', path: projectInfoPath, details: 'Backfilled missing fields' };
|
|
408
|
-
}
|
|
409
|
-
return { action: 'skipped', path: projectInfoPath, details: 'Already exists' };
|
|
405
|
+
existing = JSON.parse(readFileSync(projectInfoPath, 'utf-8'));
|
|
410
406
|
}
|
|
411
407
|
catch {
|
|
412
408
|
// If parse fails, fall through to regenerate
|
|
413
409
|
}
|
|
414
410
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
411
|
+
const existingProjectId = typeof existing?.['projectId'] === 'string' && existing['projectId'].length > 0
|
|
412
|
+
? existing['projectId']
|
|
413
|
+
: undefined;
|
|
414
|
+
const identity = await decideProjectIdentity(projectRoot, existingProjectId, {
|
|
415
|
+
mintNewIdentity: opts?.mintNewIdentity,
|
|
416
|
+
});
|
|
417
|
+
const describeIdentity = async () => {
|
|
418
|
+
const outcome = await ensurePortableProjectId(projectRoot, identity.projectId);
|
|
419
|
+
return [
|
|
420
|
+
`identity ${identity.projectId} (${identity.source}); .cleo/project-id ${outcome}`,
|
|
421
|
+
...identity.diagnostics,
|
|
422
|
+
].join('; ');
|
|
423
|
+
};
|
|
424
|
+
if (existing && !opts?.force) {
|
|
425
|
+
let repaired = false;
|
|
426
|
+
if (!existingProjectId) {
|
|
427
|
+
existing['projectId'] = identity.projectId;
|
|
428
|
+
existing['lastUpdated'] = new Date().toISOString();
|
|
429
|
+
repaired = true;
|
|
427
430
|
}
|
|
428
|
-
|
|
429
|
-
|
|
431
|
+
// Backfill missing name (cheap — always available from basename).
|
|
432
|
+
if (typeof existing['name'] !== 'string' || existing['name'].length === 0) {
|
|
433
|
+
existing['name'] = basename(resolve(projectRoot));
|
|
434
|
+
existing['lastUpdated'] = new Date().toISOString();
|
|
435
|
+
repaired = true;
|
|
436
|
+
}
|
|
437
|
+
if (repaired) {
|
|
438
|
+
await writeFile(projectInfoPath, JSON.stringify(existing, null, 2));
|
|
439
|
+
return {
|
|
440
|
+
action: 'repaired',
|
|
441
|
+
path: projectInfoPath,
|
|
442
|
+
details: `Backfilled missing fields; ${await describeIdentity()}`,
|
|
443
|
+
};
|
|
430
444
|
}
|
|
445
|
+
return {
|
|
446
|
+
action: 'skipped',
|
|
447
|
+
path: projectInfoPath,
|
|
448
|
+
details: `Already exists; ${await describeIdentity()}`,
|
|
449
|
+
};
|
|
431
450
|
}
|
|
451
|
+
// Preserve immutable identity fields when force-regenerating.
|
|
452
|
+
const existingCreatedAt = typeof existing?.['createdAt'] === 'string' && existing['createdAt'].length > 0
|
|
453
|
+
? existing['createdAt']
|
|
454
|
+
: undefined;
|
|
432
455
|
const projectHash = generateProjectHash(projectRoot);
|
|
433
456
|
const cleoVersion = getCleoVersion();
|
|
434
457
|
const now = new Date().toISOString();
|
|
@@ -448,7 +471,7 @@ export async function ensureProjectInfo(projectRoot, opts) {
|
|
|
448
471
|
const projectInfo = {
|
|
449
472
|
$schema: './schemas/project-info.schema.json',
|
|
450
473
|
schemaVersion: '1.0.0',
|
|
451
|
-
projectId:
|
|
474
|
+
projectId: identity.projectId,
|
|
452
475
|
projectHash,
|
|
453
476
|
name: basename(resolve(projectRoot)),
|
|
454
477
|
...(remoteUrl && { remoteUrl }),
|
|
@@ -463,7 +486,7 @@ export async function ensureProjectInfo(projectRoot, opts) {
|
|
|
463
486
|
};
|
|
464
487
|
await writeFile(projectInfoPath, JSON.stringify(projectInfo, null, 2));
|
|
465
488
|
const action = opts?.force && existsSync(projectInfoPath) ? 'regenerated' : 'created';
|
|
466
|
-
return { action, path: projectInfoPath };
|
|
489
|
+
return { action, path: projectInfoPath, details: await describeIdentity() };
|
|
467
490
|
}
|
|
468
491
|
/**
|
|
469
492
|
* No-op. Kept for API compatibility.
|
|
@@ -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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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write-once portable project identity: decide, re-link, adopt (T12325).
|
|
3
|
+
*
|
|
4
|
+
* The tracked `.cleo/project-id` file (read by `@cleocode/paths`) is the one
|
|
5
|
+
* project identifier that survives a fresh clone, a move, and a new device.
|
|
6
|
+
* This module owns the two write-side rules ADR-094 (amending ADR-013 §9) depends on:
|
|
7
|
+
*
|
|
8
|
+
* 1. **Write once.** The file is created with `O_EXCL` and never rewritten. A
|
|
9
|
+
* conflicting or malformed file is reported, not repaired.
|
|
10
|
+
* 2. **Never silently re-mint.** When no local or tracked id exists, the
|
|
11
|
+
* global registry is searched for the project's previous identity (same
|
|
12
|
+
* path, its canonical-fingerprint alias, or a live checkout of the same remote). A
|
|
13
|
+
* unique candidate is re-linked; several candidates refuse to guess; a new
|
|
14
|
+
* id is minted only when nothing can be re-linked or when the caller asks
|
|
15
|
+
* for one explicitly.
|
|
16
|
+
*
|
|
17
|
+
* Precedence when both files exist and disagree: the local
|
|
18
|
+
* `project-info.json` id wins and the conflict is reported. Local state
|
|
19
|
+
* (registry row, aliases, brain) is keyed by that id, so switching silently
|
|
20
|
+
* would re-key it — the data-loss geometry this whole design avoids. Two ids
|
|
21
|
+
* for one repository means two lineages (typically two devices that each ran
|
|
22
|
+
* `cleo init` before this file existed); reconciling them is an explicit act.
|
|
23
|
+
*
|
|
24
|
+
* @task T12325
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Where the identity a scaffold step settled on came from.
|
|
28
|
+
*
|
|
29
|
+
* - `project-info` — the existing local `project-info.json` id (adopted as-is).
|
|
30
|
+
* - `tracked` — the committed `.cleo/project-id` (fresh clone).
|
|
31
|
+
* - `registry-path` / `registry-alias` / `registry-remote` — re-linked from the
|
|
32
|
+
* global registry because neither file was present.
|
|
33
|
+
* - `minted` — a new random id; only when nothing could be re-linked or the
|
|
34
|
+
* caller explicitly asked for a new identity.
|
|
35
|
+
*/
|
|
36
|
+
export type ProjectIdentitySource = 'project-info' | 'tracked' | 'registry-path' | 'registry-alias' | 'registry-remote' | 'minted';
|
|
37
|
+
/** How a registry row was matched as a re-link candidate. */
|
|
38
|
+
export type RelinkVia = 'registry-path' | 'registry-alias' | 'registry-remote';
|
|
39
|
+
/** One previous identity the global registry offers for a project root. */
|
|
40
|
+
export interface RelinkCandidate {
|
|
41
|
+
/** The registered immutable project id. */
|
|
42
|
+
projectId: string;
|
|
43
|
+
/** The registry's recorded path for that id (may no longer exist). */
|
|
44
|
+
projectPath: string;
|
|
45
|
+
/** Which evidence matched it. */
|
|
46
|
+
via: RelinkVia;
|
|
47
|
+
}
|
|
48
|
+
/** The identity a scaffold step should use, and why. */
|
|
49
|
+
export interface ProjectIdentityDecision {
|
|
50
|
+
/** The id to write into `project-info.json`. */
|
|
51
|
+
projectId: string;
|
|
52
|
+
/** Provenance of {@link ProjectIdentityDecision.projectId}. */
|
|
53
|
+
source: ProjectIdentitySource;
|
|
54
|
+
/** Human-readable facts to surface (conflicts, re-links, coverage gaps). */
|
|
55
|
+
diagnostics: string[];
|
|
56
|
+
}
|
|
57
|
+
/** Outcome of making sure `.cleo/project-id` records the project's id. */
|
|
58
|
+
export type PortableIdFileOutcome =
|
|
59
|
+
/** Already present with the same id. */
|
|
60
|
+
'present'
|
|
61
|
+
/** Created now (first adoption). */
|
|
62
|
+
| 'written'
|
|
63
|
+
/** Present with a DIFFERENT id — reported, not rewritten. */
|
|
64
|
+
| 'conflict'
|
|
65
|
+
/** Present but unreadable/malformed — reported, not rewritten. */
|
|
66
|
+
| 'invalid'
|
|
67
|
+
/** No `<projectRoot>/.cleo/` directory to write into. */
|
|
68
|
+
| 'no-cleo-dir';
|
|
69
|
+
/** Options for {@link decideProjectIdentity}. */
|
|
70
|
+
export interface DecideProjectIdentityOptions {
|
|
71
|
+
/**
|
|
72
|
+
* Explicitly request a new identity instead of re-linking. The only way to
|
|
73
|
+
* mint while the registry offers candidates.
|
|
74
|
+
*/
|
|
75
|
+
mintNewIdentity?: boolean;
|
|
76
|
+
/** Global CLEO home whose registry is searched (defaults to the current one). */
|
|
77
|
+
cleoHome?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Normalise a git remote URL so `git@host:o/r.git` and `https://host/o/r`
|
|
81
|
+
* compare equal. Returns `null` for empty input.
|
|
82
|
+
*
|
|
83
|
+
* @param url - Raw `git remote get-url` output or a stored `remoteUrl`.
|
|
84
|
+
* @returns A `host/owner/repo` style key, or `null`.
|
|
85
|
+
*/
|
|
86
|
+
export declare function normalizeRemoteUrl(url: string | null | undefined): string | null;
|
|
87
|
+
/**
|
|
88
|
+
* Search the global registry for identities this project root previously had.
|
|
89
|
+
*
|
|
90
|
+
* Tiers, strongest first: a row registered at this exact path; an alias row
|
|
91
|
+
* for this path's derived ids; a row whose LIVE checkout declares the same
|
|
92
|
+
* git remote. Stranded rows (path gone) cannot be matched by remote because
|
|
93
|
+
* the registry stores no remote — their checkout is the only record of it.
|
|
94
|
+
*
|
|
95
|
+
* @param projectRoot - Absolute project root.
|
|
96
|
+
* @param cleoHome - Global CLEO home whose registry to read.
|
|
97
|
+
* @returns Candidates plus diagnostics; an unreadable registry yields no
|
|
98
|
+
* candidates and a diagnostic saying coverage is missing.
|
|
99
|
+
*/
|
|
100
|
+
export declare function findRelinkCandidates(projectRoot: string, cleoHome?: string): Promise<{
|
|
101
|
+
candidates: RelinkCandidate[];
|
|
102
|
+
diagnostics: string[];
|
|
103
|
+
}>;
|
|
104
|
+
/**
|
|
105
|
+
* Decide the identity a scaffold step writes into `project-info.json`.
|
|
106
|
+
*
|
|
107
|
+
* @param projectRoot - Absolute project root.
|
|
108
|
+
* @param localInfoId - The id already in `project-info.json`, if any.
|
|
109
|
+
* @param options - Explicit-mint request and registry home.
|
|
110
|
+
* @returns The decision with provenance and diagnostics.
|
|
111
|
+
* @throws {CleoError} `CONFIG_ERROR` when the tracked file is malformed, or
|
|
112
|
+
* when the registry offers several candidates and no explicit mint was asked.
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```ts
|
|
116
|
+
* const { projectId, source } = await decideProjectIdentity(root, undefined);
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export declare function decideProjectIdentity(projectRoot: string, localInfoId: string | undefined, options?: DecideProjectIdentityOptions): Promise<ProjectIdentityDecision>;
|
|
120
|
+
/**
|
|
121
|
+
* Make sure `<projectRoot>/.cleo/project-id` records `projectId` — write-once.
|
|
122
|
+
*
|
|
123
|
+
* Creates the file only when absent (`O_EXCL`); a present file is compared,
|
|
124
|
+
* never rewritten.
|
|
125
|
+
*
|
|
126
|
+
* @param projectRoot - Absolute project root.
|
|
127
|
+
* @param projectId - The identity to adopt.
|
|
128
|
+
* @returns What happened; `conflict`/`invalid` are for the caller to report.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```ts
|
|
132
|
+
* const outcome = await ensurePortableProjectId(root, info.projectId);
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
export declare function ensurePortableProjectId(projectRoot: string, projectId: string): Promise<PortableIdFileOutcome>;
|
|
136
|
+
//# sourceMappingURL=project-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-identity.d.ts","sourceRoot":"","sources":["../../src/scaffold/project-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAkBH;;;;;;;;;GASG;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,0EAA0E;AAC1E,MAAM,MAAM,qBAAqB;AAC/B,wCAAwC;AACtC,SAAS;AACX,oCAAoC;GAClC,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;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAShF;AAcD;;;;;;;;;;;;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,CA0DlC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,qBAAqB,CAAC,CAoBhC"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write-once portable project identity: decide, re-link, adopt (T12325).
|
|
3
|
+
*
|
|
4
|
+
* The tracked `.cleo/project-id` file (read by `@cleocode/paths`) is the one
|
|
5
|
+
* project identifier that survives a fresh clone, a move, and a new device.
|
|
6
|
+
* This module owns the two write-side rules ADR-094 (amending ADR-013 §9) depends on:
|
|
7
|
+
*
|
|
8
|
+
* 1. **Write once.** The file is created with `O_EXCL` and never rewritten. A
|
|
9
|
+
* conflicting or malformed file is reported, not repaired.
|
|
10
|
+
* 2. **Never silently re-mint.** When no local or tracked id exists, the
|
|
11
|
+
* global registry is searched for the project's previous identity (same
|
|
12
|
+
* path, its canonical-fingerprint alias, or a live checkout of the same remote). A
|
|
13
|
+
* unique candidate is re-linked; several candidates refuse to guess; a new
|
|
14
|
+
* id is minted only when nothing can be re-linked or when the caller asks
|
|
15
|
+
* for one explicitly.
|
|
16
|
+
*
|
|
17
|
+
* Precedence when both files exist and disagree: the local
|
|
18
|
+
* `project-info.json` id wins and the conflict is reported. Local state
|
|
19
|
+
* (registry row, aliases, brain) is keyed by that id, so switching silently
|
|
20
|
+
* would re-key it — the data-loss geometry this whole design avoids. Two ids
|
|
21
|
+
* for one repository means two lineages (typically two devices that each ran
|
|
22
|
+
* `cleo init` before this file existed); reconciling them is an explicit act.
|
|
23
|
+
*
|
|
24
|
+
* @task T12325
|
|
25
|
+
*/
|
|
26
|
+
import { randomUUID } from 'node:crypto';
|
|
27
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
28
|
+
import { writeFile } from 'node:fs/promises';
|
|
29
|
+
import { join, resolve } from 'node:path';
|
|
30
|
+
import { ExitCode } from '@cleocode/contracts';
|
|
31
|
+
import { canonicalizePath, computeCanonicalProjectId, formatPortableProjectId, getCleoHome, isValidPortableProjectId, portableProjectIdPath, readPortableProjectId, } from '@cleocode/paths';
|
|
32
|
+
import { CleoError } from '../errors.js';
|
|
33
|
+
/**
|
|
34
|
+
* Normalise a git remote URL so `git@host:o/r.git` and `https://host/o/r`
|
|
35
|
+
* compare equal. Returns `null` for empty input.
|
|
36
|
+
*
|
|
37
|
+
* @param url - Raw `git remote get-url` output or a stored `remoteUrl`.
|
|
38
|
+
* @returns A `host/owner/repo` style key, or `null`.
|
|
39
|
+
*/
|
|
40
|
+
export function normalizeRemoteUrl(url) {
|
|
41
|
+
if (!url)
|
|
42
|
+
return null;
|
|
43
|
+
let key = url.trim();
|
|
44
|
+
if (!key)
|
|
45
|
+
return null;
|
|
46
|
+
key = key.replace(/^[a-z][a-z0-9+.-]*:\/\//i, '');
|
|
47
|
+
key = key.replace(/^[^@/]+@/, '');
|
|
48
|
+
key = key.replace(/^([^/:]+):(?!\d+\/)/, '$1/');
|
|
49
|
+
key = key.replace(/\/+$/, '').replace(/\.git$/i, '');
|
|
50
|
+
return key.toLowerCase() || null;
|
|
51
|
+
}
|
|
52
|
+
/** Read `remoteUrl` from a checkout's `project-info.json`; null when absent or unusable. */
|
|
53
|
+
function readInfoRemote(projectPath) {
|
|
54
|
+
try {
|
|
55
|
+
const data = JSON.parse(readFileSync(join(projectPath, '.cleo', 'project-info.json'), 'utf-8'));
|
|
56
|
+
return typeof data['remoteUrl'] === 'string' ? data['remoteUrl'] : null;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Search the global registry for identities this project root previously had.
|
|
64
|
+
*
|
|
65
|
+
* Tiers, strongest first: a row registered at this exact path; an alias row
|
|
66
|
+
* for this path's derived ids; a row whose LIVE checkout declares the same
|
|
67
|
+
* git remote. Stranded rows (path gone) cannot be matched by remote because
|
|
68
|
+
* the registry stores no remote — their checkout is the only record of it.
|
|
69
|
+
*
|
|
70
|
+
* @param projectRoot - Absolute project root.
|
|
71
|
+
* @param cleoHome - Global CLEO home whose registry to read.
|
|
72
|
+
* @returns Candidates plus diagnostics; an unreadable registry yields no
|
|
73
|
+
* candidates and a diagnostic saying coverage is missing.
|
|
74
|
+
*/
|
|
75
|
+
export async function findRelinkCandidates(projectRoot, cleoHome = getCleoHome()) {
|
|
76
|
+
const diagnostics = [];
|
|
77
|
+
const candidates = [];
|
|
78
|
+
const lexicalRoot = resolve(projectRoot);
|
|
79
|
+
const realRoot = canonicalizePath(projectRoot);
|
|
80
|
+
const rootForms = new Set([lexicalRoot, realRoot]);
|
|
81
|
+
try {
|
|
82
|
+
const { getNexusRegistryDb } = await import('../store/nexus-sqlite.js');
|
|
83
|
+
const { projectIdAliases, projectRegistry } = await import('../store/schema/nexus-schema.js');
|
|
84
|
+
const { inArray } = await import('drizzle-orm');
|
|
85
|
+
const db = await getNexusRegistryDb(cleoHome);
|
|
86
|
+
const rows = db
|
|
87
|
+
.select({ projectId: projectRegistry.projectId, projectPath: projectRegistry.projectPath })
|
|
88
|
+
.from(projectRegistry)
|
|
89
|
+
.all();
|
|
90
|
+
for (const row of rows) {
|
|
91
|
+
if (rootForms.has(row.projectPath))
|
|
92
|
+
candidates.push({ ...row, via: 'registry-path' });
|
|
93
|
+
}
|
|
94
|
+
// Only the full canonical fingerprint is a re-link key. The legacy
|
|
95
|
+
// base64url alias is truncated to 32 chars (24 path bytes), so every
|
|
96
|
+
// checkout under a shared prefix collides on it — measured: two sibling
|
|
97
|
+
// temp dirs re-linked to each other through it.
|
|
98
|
+
const derived = [computeCanonicalProjectId(realRoot)];
|
|
99
|
+
const aliasRows = db
|
|
100
|
+
.select()
|
|
101
|
+
.from(projectIdAliases)
|
|
102
|
+
.where(inArray(projectIdAliases.legacyId, derived))
|
|
103
|
+
.all();
|
|
104
|
+
for (const alias of aliasRows) {
|
|
105
|
+
const owner = rows.find((row) => row.projectId === alias.canonicalId);
|
|
106
|
+
candidates.push({
|
|
107
|
+
projectId: alias.canonicalId,
|
|
108
|
+
projectPath: owner?.projectPath ?? '',
|
|
109
|
+
via: 'registry-alias',
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
const { findGitRemoteUrl } = await import('../nexus/identity.js');
|
|
113
|
+
const remote = normalizeRemoteUrl(await findGitRemoteUrl(realRoot));
|
|
114
|
+
if (remote) {
|
|
115
|
+
for (const row of rows) {
|
|
116
|
+
if (rootForms.has(row.projectPath) || !existsSync(row.projectPath))
|
|
117
|
+
continue;
|
|
118
|
+
if (normalizeRemoteUrl(readInfoRemote(row.projectPath)) === remote)
|
|
119
|
+
candidates.push({ ...row, via: 'registry-remote' });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
diagnostics.push(`registry unavailable, re-link coverage missing: ${error instanceof Error ? error.message : String(error)}`);
|
|
125
|
+
}
|
|
126
|
+
return { candidates, diagnostics };
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Decide the identity a scaffold step writes into `project-info.json`.
|
|
130
|
+
*
|
|
131
|
+
* @param projectRoot - Absolute project root.
|
|
132
|
+
* @param localInfoId - The id already in `project-info.json`, if any.
|
|
133
|
+
* @param options - Explicit-mint request and registry home.
|
|
134
|
+
* @returns The decision with provenance and diagnostics.
|
|
135
|
+
* @throws {CleoError} `CONFIG_ERROR` when the tracked file is malformed, or
|
|
136
|
+
* when the registry offers several candidates and no explicit mint was asked.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts
|
|
140
|
+
* const { projectId, source } = await decideProjectIdentity(root, undefined);
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
export async function decideProjectIdentity(projectRoot, localInfoId, options = {}) {
|
|
144
|
+
const tracked = readPortableProjectId(projectRoot);
|
|
145
|
+
const diagnostics = [];
|
|
146
|
+
if (localInfoId) {
|
|
147
|
+
if (tracked.status === 'valid' && tracked.projectId !== localInfoId) {
|
|
148
|
+
diagnostics.push(`identity conflict: .cleo/project-id is '${tracked.projectId}' but project-info.json is '${localInfoId}'; keeping the local id — reconcile explicitly`);
|
|
149
|
+
}
|
|
150
|
+
return { projectId: localInfoId, source: 'project-info', diagnostics };
|
|
151
|
+
}
|
|
152
|
+
if (tracked.status === 'valid') {
|
|
153
|
+
return { projectId: tracked.projectId, source: 'tracked', diagnostics };
|
|
154
|
+
}
|
|
155
|
+
if (tracked.status === 'invalid') {
|
|
156
|
+
throw new CleoError(ExitCode.CONFIG_ERROR, `Tracked project identity ${portableProjectIdPath(projectRoot)} is unusable (${tracked.reason}); refusing to mint a replacement`, { fix: 'Restore it from version control: `git checkout -- .cleo/project-id`' });
|
|
157
|
+
}
|
|
158
|
+
if (options.mintNewIdentity) {
|
|
159
|
+
diagnostics.push('minted a new identity on explicit request');
|
|
160
|
+
return { projectId: randomUUID(), source: 'minted', diagnostics };
|
|
161
|
+
}
|
|
162
|
+
const found = await findRelinkCandidates(projectRoot, options.cleoHome);
|
|
163
|
+
diagnostics.push(...found.diagnostics);
|
|
164
|
+
for (const via of ['registry-path', 'registry-alias', 'registry-remote']) {
|
|
165
|
+
const tier = found.candidates.filter((candidate) => candidate.via === via);
|
|
166
|
+
const ids = [...new Set(tier.map((candidate) => candidate.projectId))].filter(isValidPortableProjectId);
|
|
167
|
+
if (ids.length === 1) {
|
|
168
|
+
const [projectId] = ids;
|
|
169
|
+
diagnostics.push(`re-linked identity '${projectId}' from ${via} (${tier[0]?.projectPath || 'alias'})`);
|
|
170
|
+
return { projectId, source: via, diagnostics };
|
|
171
|
+
}
|
|
172
|
+
if (ids.length > 1) {
|
|
173
|
+
throw new CleoError(ExitCode.CONFIG_ERROR, `Cannot re-link project identity for ${projectRoot}: ${ids.length} registered identities match by ${via} (${tier
|
|
174
|
+
.map((candidate) => `${candidate.projectId} @ ${candidate.projectPath}`)
|
|
175
|
+
.join(', ')})`, {
|
|
176
|
+
fix: 'Write the intended id to .cleo/project-id, or mint explicitly with `cleo init --new-identity`',
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
diagnostics.push('minted a new identity: no local, tracked or registered identity to re-link');
|
|
181
|
+
return { projectId: randomUUID(), source: 'minted', diagnostics };
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Make sure `<projectRoot>/.cleo/project-id` records `projectId` — write-once.
|
|
185
|
+
*
|
|
186
|
+
* Creates the file only when absent (`O_EXCL`); a present file is compared,
|
|
187
|
+
* never rewritten.
|
|
188
|
+
*
|
|
189
|
+
* @param projectRoot - Absolute project root.
|
|
190
|
+
* @param projectId - The identity to adopt.
|
|
191
|
+
* @returns What happened; `conflict`/`invalid` are for the caller to report.
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```ts
|
|
195
|
+
* const outcome = await ensurePortableProjectId(root, info.projectId);
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
export async function ensurePortableProjectId(projectRoot, projectId) {
|
|
199
|
+
const current = readPortableProjectId(projectRoot);
|
|
200
|
+
if (current.status === 'valid')
|
|
201
|
+
return current.projectId === projectId ? 'present' : 'conflict';
|
|
202
|
+
if (current.status === 'invalid')
|
|
203
|
+
return 'invalid';
|
|
204
|
+
if (!isValidPortableProjectId(projectId))
|
|
205
|
+
return 'invalid';
|
|
206
|
+
if (!existsSync(join(projectRoot, '.cleo')))
|
|
207
|
+
return 'no-cleo-dir';
|
|
208
|
+
try {
|
|
209
|
+
await writeFile(portableProjectIdPath(projectRoot), formatPortableProjectId(projectId), {
|
|
210
|
+
flag: 'wx',
|
|
211
|
+
});
|
|
212
|
+
return 'written';
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
if (error instanceof Error && 'code' in error && error.code === 'EEXIST') {
|
|
216
|
+
// Lost a race with another writer: judge what they wrote, never overwrite it.
|
|
217
|
+
const raced = readPortableProjectId(projectRoot);
|
|
218
|
+
if (raced.status === 'valid')
|
|
219
|
+
return raced.projectId === projectId ? 'present' : 'conflict';
|
|
220
|
+
return 'invalid';
|
|
221
|
+
}
|
|
222
|
+
throw error;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=project-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-identity.js","sourceRoot":"","sources":["../../src/scaffold/project-identity.ts"],"names":[],"mappings":"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"}
|