@cleocode/core 2026.4.52 → 2026.4.54

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/index.js CHANGED
@@ -11117,44 +11117,6 @@ var init_platform_paths = __esm({
11117
11117
  });
11118
11118
 
11119
11119
  // packages/core/src/paths.ts
11120
- var paths_exports = {};
11121
- __export(paths_exports, {
11122
- getAgentOutputsAbsolute: () => getAgentOutputsAbsolute,
11123
- getAgentOutputsDir: () => getAgentOutputsDir,
11124
- getAgentsHome: () => getAgentsHome,
11125
- getArchivePath: () => getArchivePath,
11126
- getBackupDir: () => getBackupDir,
11127
- getClaudeAgentsDir: () => getClaudeAgentsDir,
11128
- getClaudeMemDbPath: () => getClaudeMemDbPath,
11129
- getCleoCacheDir: () => getCleoCacheDir,
11130
- getCleoCantWorkflowsDir: () => getCleoCantWorkflowsDir,
11131
- getCleoConfigDir: () => getCleoConfigDir,
11132
- getCleoDir: () => getCleoDir,
11133
- getCleoDirAbsolute: () => getCleoDirAbsolute,
11134
- getCleoDocsDir: () => getCleoDocsDir,
11135
- getCleoGlobalAgentsDir: () => getCleoGlobalAgentsDir,
11136
- getCleoGlobalJustfilePath: () => getCleoGlobalJustfilePath,
11137
- getCleoGlobalRecipesDir: () => getCleoGlobalRecipesDir,
11138
- getCleoHome: () => getCleoHome,
11139
- getCleoLogDir: () => getCleoLogDir,
11140
- getCleoPiExtensionsDir: () => getCleoPiExtensionsDir,
11141
- getCleoSchemasDir: () => getCleoSchemasDir,
11142
- getCleoTempDir: () => getCleoTempDir,
11143
- getCleoTemplatesDir: () => getCleoTemplatesDir,
11144
- getCleoTemplatesTildePath: () => getCleoTemplatesTildePath,
11145
- getConfigPath: () => getConfigPath,
11146
- getGlobalConfigPath: () => getGlobalConfigPath,
11147
- getLogPath: () => getLogPath,
11148
- getManifestArchivePath: () => getManifestArchivePath,
11149
- getManifestPath: () => getManifestPath,
11150
- getProjectRoot: () => getProjectRoot,
11151
- getSessionsPath: () => getSessionsPath,
11152
- getTaskPath: () => getTaskPath,
11153
- isAbsolutePath: () => isAbsolutePath,
11154
- isProjectInitialized: () => isProjectInitialized,
11155
- resolveProjectPath: () => resolveProjectPath,
11156
- worktreeScope: () => worktreeScope
11157
- });
11158
11120
  import { AsyncLocalStorage } from "node:async_hooks";
11159
11121
  import { existsSync as existsSync3, readFileSync as readFileSync2 } from "node:fs";
11160
11122
  import { homedir } from "node:os";
@@ -11173,9 +11135,6 @@ function getCleoTemplatesDir() {
11173
11135
  function getCleoSchemasDir() {
11174
11136
  return join4(getCleoHome(), "schemas");
11175
11137
  }
11176
- function getCleoDocsDir() {
11177
- return join4(getCleoHome(), "docs");
11178
- }
11179
11138
  function getCleoDir(cwd) {
11180
11139
  if (cwd) {
11181
11140
  return getCleoDirAbsolute(cwd);
@@ -11247,15 +11206,6 @@ function getTaskPath(cwd) {
11247
11206
  function getConfigPath(cwd) {
11248
11207
  return join4(getCleoDirAbsolute(cwd), "config.json");
11249
11208
  }
11250
- function getSessionsPath(cwd) {
11251
- return join4(getCleoDirAbsolute(cwd), "sessions.json");
11252
- }
11253
- function getArchivePath(cwd) {
11254
- return join4(getCleoDirAbsolute(cwd), "tasks-archive.json");
11255
- }
11256
- function getLogPath(cwd) {
11257
- return join4(getCleoDirAbsolute(cwd), "logs", "cleo.log");
11258
- }
11259
11209
  function getBackupDir(cwd) {
11260
11210
  return join4(getCleoDirAbsolute(cwd), "backups", "operational");
11261
11211
  }
@@ -11363,9 +11313,6 @@ function getClaudeAgentsDir() {
11363
11313
  const claudeDir = process.env["CLAUDE_HOME"] ?? join4(homedir(), ".claude");
11364
11314
  return join4(claudeDir, "agents");
11365
11315
  }
11366
- function getClaudeMemDbPath() {
11367
- return process.env["CLAUDE_MEM_DB"] ?? join4(homedir(), ".claude-mem", "claude-mem.db");
11368
- }
11369
11316
  var worktreeScope, DEFAULT_AGENT_OUTPUTS_DIR;
11370
11317
  var init_paths = __esm({
11371
11318
  "packages/core/src/paths.ts"() {
@@ -11459,6 +11406,54 @@ function insertJournalEntry(nativeDb, hash2, createdAt, name2) {
11459
11406
  `INSERT OR IGNORE INTO "__drizzle_migrations" ("hash", "created_at", "name") VALUES ('${hash2}', ${createdAt}, '${name2}')`
11460
11407
  );
11461
11408
  }
11409
+ function probeAndMarkApplied(nativeDb, migration, logSubsystem) {
11410
+ const sqlStatements = Array.isArray(migration.sql) ? migration.sql : [migration.sql ?? ""];
11411
+ const fullSql = sqlStatements.join("\n");
11412
+ const alterColumnRegex = /ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+COLUMN\s+[`"]?(\w+)[`"]?/gi;
11413
+ const createTableRegex = /CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?[`"]?(\w+)[`"]?/gi;
11414
+ const createIndexRegex = /CREATE\s+(?:UNIQUE\s+)?INDEX\s+(?:IF\s+NOT\s+EXISTS\s+)?[`"]?(\w+)[`"]?/gi;
11415
+ const alterTargets = [];
11416
+ for (const m of fullSql.matchAll(alterColumnRegex)) {
11417
+ alterTargets.push({ table: m[1], column: m[2] });
11418
+ }
11419
+ const tableTargets = [];
11420
+ for (const m of fullSql.matchAll(createTableRegex)) {
11421
+ tableTargets.push(m[1]);
11422
+ }
11423
+ const indexTargets = [];
11424
+ for (const m of fullSql.matchAll(createIndexRegex)) {
11425
+ indexTargets.push(m[1]);
11426
+ }
11427
+ const totalTargets = alterTargets.length + tableTargets.length + indexTargets.length;
11428
+ if (totalTargets === 0) {
11429
+ return false;
11430
+ }
11431
+ const allAltersPresent = alterTargets.every(({ table, column }) => {
11432
+ if (!tableExists(nativeDb, table)) return false;
11433
+ const cols = nativeDb.prepare(`PRAGMA table_info(${table})`).all();
11434
+ return cols.some((c) => c.name === column);
11435
+ });
11436
+ const allTablesPresent = tableTargets.every((t) => tableExists(nativeDb, t));
11437
+ const allIndexesPresent = indexTargets.every((idx) => {
11438
+ const rows = nativeDb.prepare(`SELECT name FROM sqlite_master WHERE type='index' AND name=?`).all(idx);
11439
+ return rows.length > 0;
11440
+ });
11441
+ if (allAltersPresent && allTablesPresent && allIndexesPresent) {
11442
+ insertJournalEntry(nativeDb, migration.hash, migration.folderMillis, migration.name ?? "");
11443
+ const log11 = getLogger(logSubsystem);
11444
+ log11.debug(
11445
+ {
11446
+ migration: migration.name,
11447
+ alters: alterTargets.length,
11448
+ tables: tableTargets.length,
11449
+ indexes: indexTargets.length
11450
+ },
11451
+ `Migration ${migration.name} DDL already present in schema \u2014 marked applied.`
11452
+ );
11453
+ return true;
11454
+ }
11455
+ return false;
11456
+ }
11462
11457
  function reconcileJournal(nativeDb, migrationsFolder, existenceTable, logSubsystem) {
11463
11458
  if (tableExists(nativeDb, existenceTable) && !tableExists(nativeDb, "__drizzle_migrations")) {
11464
11459
  const migrations = readMigrationFiles({ migrationsFolder });
@@ -11495,11 +11490,11 @@ function reconcileJournal(nativeDb, migrationsFolder, existenceTable, logSubsyst
11495
11490
  const log11 = getLogger(logSubsystem);
11496
11491
  log11.warn(
11497
11492
  { orphaned: orphanedEntries.length },
11498
- `Detected stale migration journal entries from a previous CLEO version. Reconciling.`
11493
+ `Detected stale migration journal entries from a previous CLEO version. Reconciling via DDL probe.`
11499
11494
  );
11500
11495
  nativeDb.exec('DELETE FROM "__drizzle_migrations"');
11501
11496
  for (const m of localMigrations) {
11502
- insertJournalEntry(nativeDb, m.hash, m.folderMillis, m.name ?? "");
11497
+ probeAndMarkApplied(nativeDb, m, logSubsystem);
11503
11498
  }
11504
11499
  }
11505
11500
  }
@@ -14481,7 +14476,6 @@ function runBrainMigrations(nativeDb, db) {
14481
14476
  "brain"
14482
14477
  );
14483
14478
  }
14484
- ensureColumns(nativeDb, "brain_observations", [{ name: "agent", ddl: "text" }], "brain");
14485
14479
  if (tableExists(nativeDb, "brain_page_edges")) {
14486
14480
  nativeDb.prepare(
14487
14481
  `UPDATE brain_page_edges
@@ -49750,6 +49744,7 @@ __export(scaffold_exports, {
49750
49744
  checkConfig: () => checkConfig,
49751
49745
  checkGitignore: () => checkGitignore,
49752
49746
  checkGlobalHome: () => checkGlobalHome,
49747
+ checkGlobalIdentity: () => checkGlobalIdentity,
49753
49748
  checkGlobalTemplates: () => checkGlobalTemplates,
49754
49749
  checkLogDir: () => checkLogDir,
49755
49750
  checkMemoryBridge: () => checkMemoryBridge,
@@ -49766,6 +49761,7 @@ __export(scaffold_exports, {
49766
49761
  ensureContributorMcp: () => ensureContributorMcp,
49767
49762
  ensureGitignore: () => ensureGitignore,
49768
49763
  ensureGlobalHome: () => ensureGlobalHome,
49764
+ ensureGlobalIdentity: () => ensureGlobalIdentity,
49769
49765
  ensureGlobalScaffold: () => ensureGlobalScaffold,
49770
49766
  ensureGlobalTemplates: () => ensureGlobalTemplates,
49771
49767
  ensureProjectContext: () => ensureProjectContext,
@@ -49783,6 +49779,7 @@ import { execFile as execFile3 } from "node:child_process";
49783
49779
  import { randomUUID as randomUUID2 } from "node:crypto";
49784
49780
  import { existsSync as existsSync38, constants as fsConstants3, readFileSync as readFileSync23, statSync as statSync8 } from "node:fs";
49785
49781
  import { access as access3, copyFile as copyFile2, mkdir as mkdir6, readdir as readdir2, readFile as readFile7, rm as rm2, writeFile as writeFile6 } from "node:fs/promises";
49782
+ import { createRequire as createRequire6 } from "node:module";
49786
49783
  import { homedir as getHomedir } from "node:os";
49787
49784
  import { dirname as dirname10, join as join40, resolve as resolve5 } from "node:path";
49788
49785
  import { fileURLToPath as fileURLToPath4 } from "node:url";
@@ -50638,6 +50635,102 @@ async function ensureCleoOsHub() {
50638
50635
  details: `pi-extensions: ${piResult.copied} created/${piResult.kept} kept, global-recipes: ${recipesResult.copied} created/${recipesResult.kept} kept`
50639
50636
  };
50640
50637
  }
50638
+ function resolveIdentitySourcePath() {
50639
+ const monorepoPath = join40(
50640
+ process.cwd(),
50641
+ "packages",
50642
+ "cleo-os",
50643
+ "starter-bundle",
50644
+ "CLEOOS-IDENTITY.md"
50645
+ );
50646
+ if (existsSync38(monorepoPath)) return monorepoPath;
50647
+ try {
50648
+ const require2 = createRequire6(import.meta.url);
50649
+ const pkgJson = require2.resolve("@cleocode/cleo-os/package.json");
50650
+ const pkgDir = pkgJson.replace(/\/package\.json$/, "");
50651
+ const installedPath = join40(pkgDir, "starter-bundle", "CLEOOS-IDENTITY.md");
50652
+ if (existsSync38(installedPath)) return installedPath;
50653
+ } catch {
50654
+ }
50655
+ return null;
50656
+ }
50657
+ async function ensureGlobalIdentity(forceRefresh = false) {
50658
+ const sourcePath = resolveIdentitySourcePath();
50659
+ if (!sourcePath) {
50660
+ return {
50661
+ action: "skipped",
50662
+ path: "",
50663
+ details: "CLEOOS-IDENTITY.md source not found in monorepo or installed package"
50664
+ };
50665
+ }
50666
+ const cleoHome = getCleoHome();
50667
+ const dst = join40(cleoHome, "CLEOOS-IDENTITY.md");
50668
+ try {
50669
+ await mkdir6(cleoHome, { recursive: true });
50670
+ } catch (err) {
50671
+ return {
50672
+ action: "skipped",
50673
+ path: dst,
50674
+ details: `Failed to create global cleo home: ${err instanceof Error ? err.message : String(err)}`
50675
+ };
50676
+ }
50677
+ if (existsSync38(dst) && !forceRefresh) {
50678
+ return { action: "skipped", path: dst, details: "identity already present" };
50679
+ }
50680
+ const existedBefore = existsSync38(dst);
50681
+ try {
50682
+ const content = readFileSync23(sourcePath, "utf-8");
50683
+ await writeFile6(dst, content);
50684
+ return {
50685
+ action: existedBefore ? "repaired" : "created",
50686
+ path: dst,
50687
+ details: `from ${sourcePath}`
50688
+ };
50689
+ } catch (err) {
50690
+ return {
50691
+ action: "skipped",
50692
+ path: dst,
50693
+ details: `Failed to write identity: ${err instanceof Error ? err.message : String(err)}`
50694
+ };
50695
+ }
50696
+ }
50697
+ function checkGlobalIdentity() {
50698
+ const cleoHome = getCleoHome();
50699
+ const identityPath = join40(cleoHome, "CLEOOS-IDENTITY.md");
50700
+ if (!existsSync38(identityPath)) {
50701
+ return {
50702
+ id: "global_identity",
50703
+ category: "global",
50704
+ status: "failed",
50705
+ message: "Global CLEOOS-IDENTITY.md not found \u2014 orchestrator persona missing",
50706
+ details: { path: identityPath, exists: false },
50707
+ fix: "cleo upgrade (auto-deploys identity)"
50708
+ };
50709
+ }
50710
+ let size = 0;
50711
+ try {
50712
+ size = statSync8(identityPath).size;
50713
+ } catch {
50714
+ }
50715
+ if (size === 0) {
50716
+ return {
50717
+ id: "global_identity",
50718
+ category: "global",
50719
+ status: "failed",
50720
+ message: "Global CLEOOS-IDENTITY.md exists but is empty",
50721
+ details: { path: identityPath, exists: true, size: 0 },
50722
+ fix: "cleo upgrade --refresh-identity"
50723
+ };
50724
+ }
50725
+ return {
50726
+ id: "global_identity",
50727
+ category: "global",
50728
+ status: "passed",
50729
+ message: "Global CLEOOS-IDENTITY.md present",
50730
+ details: { path: identityPath, exists: true, size },
50731
+ fix: ""
50732
+ };
50733
+ }
50641
50734
  function checkGlobalHome() {
50642
50735
  const cleoHome = getCleoHome();
50643
50736
  if (!existsSync38(cleoHome)) {
@@ -54045,7 +54138,7 @@ __export(parser_exports, {
54045
54138
  parseFile: () => parseFile2
54046
54139
  });
54047
54140
  import { readFileSync as readFileSync64 } from "node:fs";
54048
- import { createRequire as createRequire7 } from "node:module";
54141
+ import { createRequire as createRequire8 } from "node:module";
54049
54142
  import { relative as relative7 } from "node:path";
54050
54143
  function tryRequire(id) {
54051
54144
  try {
@@ -54246,7 +54339,7 @@ var init_parser3 = __esm({
54246
54339
  "packages/core/src/code/parser.ts"() {
54247
54340
  "use strict";
54248
54341
  init_tree_sitter_languages();
54249
- _require7 = createRequire7(import.meta.url);
54342
+ _require7 = createRequire8(import.meta.url);
54250
54343
  _ParserClass = null;
54251
54344
  _QueryClass = null;
54252
54345
  _parserInstance = null;
@@ -54346,7 +54439,7 @@ var init_parser3 = __esm({
54346
54439
 
54347
54440
  // packages/core/src/system/dependencies.ts
54348
54441
  import { execFileSync as execFileSync10 } from "node:child_process";
54349
- import { createRequire as createRequire8 } from "node:module";
54442
+ import { createRequire as createRequire9 } from "node:module";
54350
54443
  import { dirname as dirname19 } from "node:path";
54351
54444
  import { fileURLToPath as fileURLToPath5 } from "node:url";
54352
54445
  function tryExec(cmd, args, timeoutMs = 3e3) {
@@ -54616,7 +54709,7 @@ var init_dependencies = __esm({
54616
54709
  "packages/core/src/system/dependencies.ts"() {
54617
54710
  "use strict";
54618
54711
  init_platform();
54619
- _require8 = createRequire8(import.meta.url);
54712
+ _require8 = createRequire9(import.meta.url);
54620
54713
  _dirname = dirname19(fileURLToPath5(import.meta.url));
54621
54714
  DEPENDENCY_SPECS = [
54622
54715
  // ── Required ────────────────────────────────────────────────────────────
@@ -54818,8 +54911,8 @@ import { platform as platform4 } from "node:os";
54818
54911
  import { basename as basename17, dirname as dirname23, join as join106 } from "node:path";
54819
54912
  async function resolveSeedAgentsDir() {
54820
54913
  try {
54821
- const { createRequire: createRequire10 } = await import("node:module");
54822
- const req = createRequire10(import.meta.url);
54914
+ const { createRequire: createRequire11 } = await import("node:module");
54915
+ const req = createRequire11(import.meta.url);
54823
54916
  const agentsPkgMain = req.resolve("@cleocode/agents/package.json");
54824
54917
  const agentsPkgRoot = dirname23(agentsPkgMain);
54825
54918
  const candidate = join106(agentsPkgRoot, "seed-agents");
@@ -54846,8 +54939,8 @@ async function resolveSeedAgentsDir() {
54846
54939
  async function initAgentDefinition(created, warnings) {
54847
54940
  let agentSourceDir = null;
54848
54941
  try {
54849
- const { createRequire: createRequire10 } = await import("node:module");
54850
- const req = createRequire10(import.meta.url);
54942
+ const { createRequire: createRequire11 } = await import("node:module");
54943
+ const req = createRequire11(import.meta.url);
54851
54944
  const agentsPkgMain = req.resolve("@cleocode/agents/package.json");
54852
54945
  const agentsPkgRoot = dirname23(agentsPkgMain);
54853
54946
  const candidate = join106(agentsPkgRoot, "cleo-subagent");
@@ -54913,8 +55006,8 @@ async function initCoreSkills(created, warnings) {
54913
55006
  const packageRoot = getPackageRoot();
54914
55007
  let ctSkillsRoot = null;
54915
55008
  try {
54916
- const { createRequire: createRequire10 } = await import("node:module");
54917
- const req = createRequire10(import.meta.url);
55009
+ const { createRequire: createRequire11 } = await import("node:module");
55010
+ const req = createRequire11(import.meta.url);
54918
55011
  const skillsPkgMain = req.resolve("@cleocode/skills/package.json");
54919
55012
  const skillsPkgRoot = dirname23(skillsPkgMain);
54920
55013
  if (existsSync106(join106(skillsPkgRoot, "skills.json"))) {
@@ -55422,8 +55515,8 @@ async function deployStarterBundle(cleoDir, created, warnings) {
55422
55515
  if (hasCantFiles) return;
55423
55516
  let starterBundleSrc = null;
55424
55517
  try {
55425
- const { createRequire: createRequire10 } = await import("node:module");
55426
- const req = createRequire10(import.meta.url);
55518
+ const { createRequire: createRequire11 } = await import("node:module");
55519
+ const req = createRequire11(import.meta.url);
55427
55520
  const cleoOsPkgMain = req.resolve("@cleocode/cleo-os/package.json");
55428
55521
  const cleoOsPkgRoot = dirname23(cleoOsPkgMain);
55429
55522
  const candidate = join106(cleoOsPkgRoot, "starter-bundle");
@@ -55463,20 +55556,20 @@ async function deployStarterBundle(cleoDir, created, warnings) {
55463
55556
  }
55464
55557
  }
55465
55558
  }
55466
- const identitySrc = join106(starterBundleSrc, "CLEOOS-IDENTITY.md");
55467
- const identityDst = join106(cleoDir, "CLEOOS-IDENTITY.md");
55468
- if (existsSync106(identitySrc) && !existsSync106(identityDst)) {
55469
- await copyFile4(identitySrc, identityDst);
55470
- }
55471
55559
  try {
55472
- const { getCleoHome: getCleoHome2 } = await Promise.resolve().then(() => (init_paths(), paths_exports));
55473
- const globalIdentityDst = join106(getCleoHome2(), "CLEOOS-IDENTITY.md");
55474
- if (existsSync106(identitySrc) && !existsSync106(globalIdentityDst)) {
55475
- await copyFile4(identitySrc, globalIdentityDst);
55560
+ const { ensureGlobalIdentity: ensureGlobalIdentity2 } = await Promise.resolve().then(() => (init_scaffold(), scaffold_exports));
55561
+ const identityResult = await ensureGlobalIdentity2();
55562
+ if (identityResult.action === "created") {
55563
+ created.push(`identity: ${identityResult.path}`);
55564
+ } else if (identityResult.action === "skipped" && identityResult.details) {
55565
+ warnings.push(`identity skipped: ${identityResult.details}`);
55476
55566
  }
55477
- } catch {
55567
+ } catch (err) {
55568
+ warnings.push(`identity deploy failed: ${err instanceof Error ? err.message : String(err)}`);
55478
55569
  }
55479
- created.push("starter-bundle: team + agent .cant files + identity deployed to .cleo/");
55570
+ created.push(
55571
+ "starter-bundle: team + agent .cant files deployed to .cleo/ (identity at global XDG)"
55572
+ );
55480
55573
  }
55481
55574
  var DIR_SYMLINK_TYPE2;
55482
55575
  var init_init = __esm({
@@ -64390,8 +64483,8 @@ init_agent_outputs();
64390
64483
  // packages/core/src/migration/checksum.ts
64391
64484
  import { createHash as createHash7 } from "node:crypto";
64392
64485
  import { readFileSync as readFileSync34 } from "node:fs";
64393
- import { createRequire as createRequire6 } from "node:module";
64394
- var _require6 = createRequire6(import.meta.url);
64486
+ import { createRequire as createRequire7 } from "node:module";
64487
+ var _require6 = createRequire7(import.meta.url);
64395
64488
  var { DatabaseSync: DatabaseSync4 } = _require6("node:sqlite");
64396
64489
  async function computeChecksum(filePath) {
64397
64490
  const content = readFileSync34(filePath);
@@ -77277,7 +77370,7 @@ init_schema_management();
77277
77370
  init_data_accessor();
77278
77371
  import { execFileSync as execFileSync11 } from "node:child_process";
77279
77372
  import { existsSync as existsSync90, readFileSync as readFileSync65, statSync as statSync19 } from "node:fs";
77280
- import { createRequire as createRequire9 } from "node:module";
77373
+ import { createRequire as createRequire10 } from "node:module";
77281
77374
  import { join as join92 } from "node:path";
77282
77375
 
77283
77376
  // packages/core/src/validation/doctor/checks.ts
@@ -78091,7 +78184,7 @@ function calculateHealthStatus(checks) {
78091
78184
 
78092
78185
  // packages/core/src/system/health.ts
78093
78186
  init_dependencies();
78094
- var _require9 = createRequire9(import.meta.url);
78187
+ var _require9 = createRequire10(import.meta.url);
78095
78188
  var databaseSyncCtor = (() => {
78096
78189
  try {
78097
78190
  return _require9("node:sqlite").DatabaseSync;
@@ -78639,6 +78732,7 @@ async function coreDoctorReport(projectRoot) {
78639
78732
  });
78640
78733
  checks.push(mapCheckResult(checkGlobalHome()));
78641
78734
  checks.push(mapCheckResult(checkGlobalTemplates()));
78735
+ checks.push(mapCheckResult(checkGlobalIdentity()));
78642
78736
  checks.push(mapSchemaCheckResult(checkGlobalSchemas()));
78643
78737
  checks.push(mapCheckResult(checkLogDir(projectRoot)));
78644
78738
  const hookResults = await checkGitHooks(projectRoot);