@cleocode/cleo 2026.3.19 → 2026.3.20
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/cli/index.js +38 -48
- package/dist/cli/index.js.map +3 -3
- package/dist/mcp/index.js +2 -2
- package/dist/mcp/index.js.map +1 -1
- package/package.json +1 -1
- package/drizzle-brain/20260301230215_workable_spitfire/migration.sql +0 -68
- package/drizzle-brain/20260301230215_workable_spitfire/snapshot.json +0 -651
- package/drizzle-brain/20260302050325_unknown_justin_hammer/migration.sql +0 -23
- package/drizzle-brain/20260302050325_unknown_justin_hammer/snapshot.json +0 -884
- package/drizzle-brain/20260302061755_unusual_jamie_braddock/migration.sql +0 -2
- package/drizzle-brain/20260302061755_unusual_jamie_braddock/snapshot.json +0 -908
- package/drizzle-brain/20260302193548_luxuriant_glorian/migration.sql +0 -20
- package/drizzle-brain/20260302193548_luxuriant_glorian/snapshot.json +0 -1078
- package/drizzle-brain/20260304045002_white_thunderbolt_ross/migration.sql +0 -16
- package/drizzle-brain/20260304045002_white_thunderbolt_ross/snapshot.json +0 -1233
package/dist/cli/index.js
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env -S node --disable-warning=ExperimentalWarning
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
5
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
6
|
-
}) : x)(function(x) {
|
|
7
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
8
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
9
|
-
});
|
|
10
4
|
var __esm = (fn, res) => function __init() {
|
|
11
5
|
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
12
6
|
};
|
|
@@ -20569,10 +20563,10 @@ async function readProjectMeta(projectPath) {
|
|
|
20569
20563
|
}
|
|
20570
20564
|
async function readProjectId(projectPath) {
|
|
20571
20565
|
try {
|
|
20572
|
-
const { readFileSync:
|
|
20566
|
+
const { readFileSync: readFileSync55, existsSync: existsSync73 } = await import("node:fs");
|
|
20573
20567
|
const infoPath = join33(projectPath, ".cleo", "project-info.json");
|
|
20574
20568
|
if (!existsSync73(infoPath)) return "";
|
|
20575
|
-
const data = JSON.parse(
|
|
20569
|
+
const data = JSON.parse(readFileSync55(infoPath, "utf-8"));
|
|
20576
20570
|
return typeof data.projectId === "string" ? data.projectId : "";
|
|
20577
20571
|
} catch {
|
|
20578
20572
|
return "";
|
|
@@ -36757,7 +36751,7 @@ var init_build_config = __esm({
|
|
|
36757
36751
|
"use strict";
|
|
36758
36752
|
BUILD_CONFIG = {
|
|
36759
36753
|
"name": "@cleocode/cleo",
|
|
36760
|
-
"version": "2026.3.
|
|
36754
|
+
"version": "2026.3.20",
|
|
36761
36755
|
"description": "CLEO V2 - TypeScript task management CLI for AI coding agents",
|
|
36762
36756
|
"repository": {
|
|
36763
36757
|
"owner": "kryptobaseddev",
|
|
@@ -36766,7 +36760,7 @@ var init_build_config = __esm({
|
|
|
36766
36760
|
"url": "https://github.com/kryptobaseddev/cleo.git",
|
|
36767
36761
|
"issuesUrl": "https://github.com/kryptobaseddev/cleo/issues"
|
|
36768
36762
|
},
|
|
36769
|
-
"buildDate": "2026-03-
|
|
36763
|
+
"buildDate": "2026-03-08T01:14:55.746Z",
|
|
36770
36764
|
"templates": {
|
|
36771
36765
|
"issueTemplatesDir": "templates/issue-templates"
|
|
36772
36766
|
}
|
|
@@ -41676,19 +41670,17 @@ __export(logger_exports, {
|
|
|
41676
41670
|
logFileExists: () => logFileExists,
|
|
41677
41671
|
readMigrationLog: () => readMigrationLog
|
|
41678
41672
|
});
|
|
41679
|
-
import { existsSync as existsSync66, mkdirSync as mkdirSync16, statSync as statSync9, appendFileSync as appendFileSync4 } from "node:fs";
|
|
41673
|
+
import { existsSync as existsSync66, mkdirSync as mkdirSync16, statSync as statSync9, appendFileSync as appendFileSync4, readdirSync as readdirSync19, unlinkSync as unlinkSync5, readFileSync as readFileSync49, accessSync as accessSync2, constants as constants2 } from "node:fs";
|
|
41680
41674
|
import { join as join69, dirname as dirname16, relative as relative6 } from "node:path";
|
|
41681
41675
|
function createMigrationLogger(cleoDir, config) {
|
|
41682
41676
|
return new MigrationLogger(cleoDir, config);
|
|
41683
41677
|
}
|
|
41684
41678
|
function readMigrationLog(logPath) {
|
|
41685
|
-
const
|
|
41686
|
-
const content = readFileSync54(logPath, "utf-8");
|
|
41679
|
+
const content = readFileSync49(logPath, "utf-8");
|
|
41687
41680
|
return content.split("\n").filter((line) => line.trim()).map((line) => JSON.parse(line));
|
|
41688
41681
|
}
|
|
41689
41682
|
function logFileExists(logPath) {
|
|
41690
41683
|
try {
|
|
41691
|
-
const { accessSync: accessSync2, constants: constants2 } = __require("node:fs");
|
|
41692
41684
|
accessSync2(logPath, constants2.R_OK);
|
|
41693
41685
|
return true;
|
|
41694
41686
|
} catch {
|
|
@@ -41697,15 +41689,14 @@ function logFileExists(logPath) {
|
|
|
41697
41689
|
}
|
|
41698
41690
|
function getLatestMigrationLog(cleoDir) {
|
|
41699
41691
|
try {
|
|
41700
|
-
const { readdirSync: readdirSync21, statSync: statSync10 } = __require("node:fs");
|
|
41701
41692
|
const logsDir = join69(cleoDir, "logs");
|
|
41702
41693
|
if (!existsSync66(logsDir)) {
|
|
41703
41694
|
return null;
|
|
41704
41695
|
}
|
|
41705
|
-
const files =
|
|
41696
|
+
const files = readdirSync19(logsDir).filter((f) => f.startsWith("migration-") && f.endsWith(".jsonl")).map((f) => ({
|
|
41706
41697
|
name: f,
|
|
41707
41698
|
path: join69(logsDir, f),
|
|
41708
|
-
mtime:
|
|
41699
|
+
mtime: statSync9(join69(logsDir, f)).mtime.getTime()
|
|
41709
41700
|
})).sort((a, b) => b.mtime - a.mtime);
|
|
41710
41701
|
return files.length > 0 ? files[0].path : null;
|
|
41711
41702
|
} catch {
|
|
@@ -41909,8 +41900,7 @@ var init_logger2 = __esm({
|
|
|
41909
41900
|
if (!existsSync66(logsDir)) {
|
|
41910
41901
|
return;
|
|
41911
41902
|
}
|
|
41912
|
-
const
|
|
41913
|
-
const files = readdirSync21(logsDir).filter((f) => f.startsWith("migration-") && f.endsWith(".jsonl")).map((f) => ({
|
|
41903
|
+
const files = readdirSync19(logsDir).filter((f) => f.startsWith("migration-") && f.endsWith(".jsonl")).map((f) => ({
|
|
41914
41904
|
name: f,
|
|
41915
41905
|
path: join69(logsDir, f),
|
|
41916
41906
|
mtime: statSync9(join69(logsDir, f)).mtime.getTime()
|
|
@@ -42269,7 +42259,7 @@ __export(migration_sqlite_exports, {
|
|
|
42269
42259
|
migrateJsonToSqlite: () => migrateJsonToSqlite2,
|
|
42270
42260
|
migrateJsonToSqliteAtomic: () => migrateJsonToSqliteAtomic
|
|
42271
42261
|
});
|
|
42272
|
-
import { existsSync as existsSync68, readFileSync as
|
|
42262
|
+
import { existsSync as existsSync68, readFileSync as readFileSync50 } from "node:fs";
|
|
42273
42263
|
import { join as join71, dirname as dirname17 } from "node:path";
|
|
42274
42264
|
import { mkdirSync as mkdirSync17 } from "node:fs";
|
|
42275
42265
|
import { drizzle as drizzle4 } from "drizzle-orm/sqlite-proxy";
|
|
@@ -42311,7 +42301,7 @@ function countJsonRecords(cleoDir) {
|
|
|
42311
42301
|
const todoPath = join71(cleoDir, "todo.json");
|
|
42312
42302
|
if (existsSync68(todoPath)) {
|
|
42313
42303
|
try {
|
|
42314
|
-
const data = JSON.parse(
|
|
42304
|
+
const data = JSON.parse(readFileSync50(todoPath, "utf-8"));
|
|
42315
42305
|
tasks2 = (data.tasks ?? []).length;
|
|
42316
42306
|
} catch {
|
|
42317
42307
|
}
|
|
@@ -42319,7 +42309,7 @@ function countJsonRecords(cleoDir) {
|
|
|
42319
42309
|
const archivePath = join71(cleoDir, "todo-archive.json");
|
|
42320
42310
|
if (existsSync68(archivePath)) {
|
|
42321
42311
|
try {
|
|
42322
|
-
const data = JSON.parse(
|
|
42312
|
+
const data = JSON.parse(readFileSync50(archivePath, "utf-8"));
|
|
42323
42313
|
archived = (data.tasks ?? data.archivedTasks ?? []).length;
|
|
42324
42314
|
} catch {
|
|
42325
42315
|
}
|
|
@@ -42327,7 +42317,7 @@ function countJsonRecords(cleoDir) {
|
|
|
42327
42317
|
const sessionsPath = join71(cleoDir, "sessions.json");
|
|
42328
42318
|
if (existsSync68(sessionsPath)) {
|
|
42329
42319
|
try {
|
|
42330
|
-
const data = JSON.parse(
|
|
42320
|
+
const data = JSON.parse(readFileSync50(sessionsPath, "utf-8"));
|
|
42331
42321
|
sessions2 = (data.sessions ?? []).length;
|
|
42332
42322
|
} catch {
|
|
42333
42323
|
}
|
|
@@ -42410,7 +42400,7 @@ async function runMigrationDataImport(db, cleoDir, result, logger) {
|
|
|
42410
42400
|
logger?.info("import", "read-todo", "Reading todo.json", {
|
|
42411
42401
|
path: todoPath.replace(cleoDir, ".")
|
|
42412
42402
|
});
|
|
42413
|
-
const todoData = JSON.parse(
|
|
42403
|
+
const todoData = JSON.parse(readFileSync50(todoPath, "utf-8"));
|
|
42414
42404
|
const tasks2 = topoSortTasks(todoData.tasks ?? []);
|
|
42415
42405
|
const totalTasks = tasks2.length;
|
|
42416
42406
|
logger?.info("import", "tasks-start", `Starting import of ${totalTasks} tasks`, {
|
|
@@ -42485,7 +42475,7 @@ async function runMigrationDataImport(db, cleoDir, result, logger) {
|
|
|
42485
42475
|
logger?.info("import", "read-archive", "Reading todo-archive.json", {
|
|
42486
42476
|
path: archivePath.replace(cleoDir, ".")
|
|
42487
42477
|
});
|
|
42488
|
-
const archiveData = JSON.parse(
|
|
42478
|
+
const archiveData = JSON.parse(readFileSync50(archivePath, "utf-8"));
|
|
42489
42479
|
const archivedTasks = topoSortTasks(archiveData.tasks ?? archiveData.archivedTasks ?? []);
|
|
42490
42480
|
const totalArchived = archivedTasks.length;
|
|
42491
42481
|
logger?.info("import", "archive-start", `Starting import of ${totalArchived} archived tasks`, {
|
|
@@ -42544,7 +42534,7 @@ async function runMigrationDataImport(db, cleoDir, result, logger) {
|
|
|
42544
42534
|
logger?.info("import", "read-sessions", "Reading sessions.json", {
|
|
42545
42535
|
path: sessionsPath.replace(cleoDir, ".")
|
|
42546
42536
|
});
|
|
42547
|
-
const sessionsData = JSON.parse(
|
|
42537
|
+
const sessionsData = JSON.parse(readFileSync50(sessionsPath, "utf-8"));
|
|
42548
42538
|
const sessions2 = sessionsData.sessions ?? [];
|
|
42549
42539
|
const totalSessions = sessions2.length;
|
|
42550
42540
|
logger?.info("import", "sessions-start", `Starting import of ${totalSessions} sessions`, {
|
|
@@ -42679,7 +42669,7 @@ async function migrateJsonToSqlite2(cwd, options) {
|
|
|
42679
42669
|
const todoPath = join71(cleoDir, "todo.json");
|
|
42680
42670
|
if (existsSync68(todoPath)) {
|
|
42681
42671
|
try {
|
|
42682
|
-
const todoData = JSON.parse(
|
|
42672
|
+
const todoData = JSON.parse(readFileSync50(todoPath, "utf-8"));
|
|
42683
42673
|
const tasks2 = topoSortTasks(todoData.tasks ?? []);
|
|
42684
42674
|
for (const task of tasks2) {
|
|
42685
42675
|
try {
|
|
@@ -42731,7 +42721,7 @@ async function migrateJsonToSqlite2(cwd, options) {
|
|
|
42731
42721
|
const archivePath = join71(cleoDir, "todo-archive.json");
|
|
42732
42722
|
if (existsSync68(archivePath)) {
|
|
42733
42723
|
try {
|
|
42734
|
-
const archiveData = JSON.parse(
|
|
42724
|
+
const archiveData = JSON.parse(readFileSync50(archivePath, "utf-8"));
|
|
42735
42725
|
const archivedTasks = topoSortTasks(archiveData.tasks ?? archiveData.archivedTasks ?? []);
|
|
42736
42726
|
for (const task of archivedTasks) {
|
|
42737
42727
|
try {
|
|
@@ -42772,7 +42762,7 @@ async function migrateJsonToSqlite2(cwd, options) {
|
|
|
42772
42762
|
if (existsSync68(sessionsPath)) {
|
|
42773
42763
|
try {
|
|
42774
42764
|
const sessionsData = JSON.parse(
|
|
42775
|
-
|
|
42765
|
+
readFileSync50(sessionsPath, "utf-8")
|
|
42776
42766
|
);
|
|
42777
42767
|
const sessions2 = sessionsData.sessions ?? [];
|
|
42778
42768
|
for (const session of sessions2) {
|
|
@@ -42840,7 +42830,7 @@ var init_migration_sqlite = __esm({
|
|
|
42840
42830
|
|
|
42841
42831
|
// src/cli/index.ts
|
|
42842
42832
|
import { Command, Help } from "commander";
|
|
42843
|
-
import { readFileSync as
|
|
42833
|
+
import { readFileSync as readFileSync54 } from "node:fs";
|
|
42844
42834
|
import { join as join77 } from "node:path";
|
|
42845
42835
|
|
|
42846
42836
|
// src/cli/commands/add.ts
|
|
@@ -45851,7 +45841,7 @@ init_storage_preflight();
|
|
|
45851
45841
|
init_paths();
|
|
45852
45842
|
init_storage_preflight();
|
|
45853
45843
|
init_agent_outputs();
|
|
45854
|
-
import { existsSync as existsSync69, readFileSync as
|
|
45844
|
+
import { existsSync as existsSync69, readFileSync as readFileSync51, writeFileSync as writeFileSync13, mkdirSync as mkdirSync18, readdirSync as readdirSync20, copyFileSync as copyFileSync5 } from "node:fs";
|
|
45855
45845
|
import { join as join72 } from "node:path";
|
|
45856
45846
|
|
|
45857
45847
|
// src/store/index.ts
|
|
@@ -45945,8 +45935,8 @@ async function runUpgrade(options = {}) {
|
|
|
45945
45935
|
}
|
|
45946
45936
|
copyFileSync5(dbPath2, dbBackupPath);
|
|
45947
45937
|
const { createHash: createHash9 } = await import("node:crypto");
|
|
45948
|
-
const origChecksum = createHash9("sha256").update(
|
|
45949
|
-
const backupChecksum = createHash9("sha256").update(
|
|
45938
|
+
const origChecksum = createHash9("sha256").update(readFileSync51(dbPath2)).digest("hex");
|
|
45939
|
+
const backupChecksum = createHash9("sha256").update(readFileSync51(dbBackupPath)).digest("hex");
|
|
45950
45940
|
if (origChecksum !== backupChecksum) {
|
|
45951
45941
|
throw new Error(
|
|
45952
45942
|
`Backup verification failed: checksum mismatch. Aborting migration to prevent data loss.`
|
|
@@ -45962,13 +45952,13 @@ async function runUpgrade(options = {}) {
|
|
|
45962
45952
|
logger.info("backup", "verified", "Backup integrity verified", { checksum: origChecksum });
|
|
45963
45953
|
}
|
|
45964
45954
|
if (existsSync69(dbTempPath)) {
|
|
45965
|
-
const { unlinkSync:
|
|
45966
|
-
|
|
45955
|
+
const { unlinkSync: unlinkSync6 } = await import("node:fs");
|
|
45956
|
+
unlinkSync6(dbTempPath);
|
|
45967
45957
|
}
|
|
45968
45958
|
const configPath = join72(cleoDir2, "config.json");
|
|
45969
45959
|
let configBackup = null;
|
|
45970
45960
|
if (existsSync69(configPath)) {
|
|
45971
|
-
configBackup =
|
|
45961
|
+
configBackup = readFileSync51(configPath, "utf-8");
|
|
45972
45962
|
}
|
|
45973
45963
|
const { resetDbState: resetDbState2 } = await Promise.resolve().then(() => (init_sqlite(), sqlite_exports));
|
|
45974
45964
|
resetDbState2();
|
|
@@ -46010,7 +46000,7 @@ async function runUpgrade(options = {}) {
|
|
|
46010
46000
|
let config = {};
|
|
46011
46001
|
if (existsSync69(configPath)) {
|
|
46012
46002
|
try {
|
|
46013
|
-
config = JSON.parse(
|
|
46003
|
+
config = JSON.parse(readFileSync51(configPath, "utf-8"));
|
|
46014
46004
|
} catch {
|
|
46015
46005
|
}
|
|
46016
46006
|
}
|
|
@@ -46062,7 +46052,7 @@ async function runUpgrade(options = {}) {
|
|
|
46062
46052
|
const dbPath2 = join72(cleoDir2, "tasks.db");
|
|
46063
46053
|
const safetyDir = join72(cleoDir2, "backups", "safety");
|
|
46064
46054
|
if (existsSync69(safetyDir)) {
|
|
46065
|
-
const backups =
|
|
46055
|
+
const backups = readdirSync20(safetyDir).filter((f) => f.startsWith("tasks.db.pre-migration.")).sort().reverse();
|
|
46066
46056
|
if (backups.length > 0 && !existsSync69(dbPath2)) {
|
|
46067
46057
|
copyFileSync5(join72(safetyDir, backups[0]), dbPath2);
|
|
46068
46058
|
}
|
|
@@ -46155,9 +46145,9 @@ async function runUpgrade(options = {}) {
|
|
|
46155
46145
|
const src = join72(cleoDir, f);
|
|
46156
46146
|
copyFileSync5(src, join72(backupDir, f));
|
|
46157
46147
|
}
|
|
46158
|
-
const { unlinkSync:
|
|
46148
|
+
const { unlinkSync: unlinkSync6 } = await import("node:fs");
|
|
46159
46149
|
for (const f of foundStale) {
|
|
46160
|
-
|
|
46150
|
+
unlinkSync6(join72(cleoDir, f));
|
|
46161
46151
|
}
|
|
46162
46152
|
actions.push({
|
|
46163
46153
|
action: "stale_json_cleanup",
|
|
@@ -46247,7 +46237,7 @@ async function runUpgrade(options = {}) {
|
|
|
46247
46237
|
actions.push({ action: "project_context_detection", status: "preview", details: "Would detect and create project-context.json" });
|
|
46248
46238
|
} else {
|
|
46249
46239
|
try {
|
|
46250
|
-
const context = JSON.parse(
|
|
46240
|
+
const context = JSON.parse(readFileSync51(contextPath, "utf-8"));
|
|
46251
46241
|
if (context.detectedAt) {
|
|
46252
46242
|
const daysSince = (Date.now() - new Date(context.detectedAt).getTime()) / (1e3 * 60 * 60 * 24);
|
|
46253
46243
|
if (daysSince > 30) {
|
|
@@ -46823,7 +46813,7 @@ function registerVerifyCommand(program2) {
|
|
|
46823
46813
|
|
|
46824
46814
|
// src/cli/commands/detect-drift.ts
|
|
46825
46815
|
init_renderers();
|
|
46826
|
-
import { readFileSync as
|
|
46816
|
+
import { readFileSync as readFileSync52, existsSync as existsSync70, readdirSync as readdirSync21 } from "node:fs";
|
|
46827
46817
|
import { join as join74, dirname as dirname18 } from "node:path";
|
|
46828
46818
|
import { fileURLToPath as fileURLToPath5 } from "node:url";
|
|
46829
46819
|
function findProjectRoot() {
|
|
@@ -46868,7 +46858,7 @@ function registerDetectDriftCommand(program2) {
|
|
|
46868
46858
|
};
|
|
46869
46859
|
const safeRead = (path) => {
|
|
46870
46860
|
try {
|
|
46871
|
-
return
|
|
46861
|
+
return readFileSync52(path, "utf-8");
|
|
46872
46862
|
} catch {
|
|
46873
46863
|
return "";
|
|
46874
46864
|
}
|
|
@@ -46956,7 +46946,7 @@ function registerDetectDriftCommand(program2) {
|
|
|
46956
46946
|
recommendation: "Verify TypeScript source structure is intact"
|
|
46957
46947
|
}]);
|
|
46958
46948
|
} else {
|
|
46959
|
-
const files =
|
|
46949
|
+
const files = readdirSync21(cliDir).filter((f) => f.endsWith(".ts") && !f.includes(".test."));
|
|
46960
46950
|
addCheck("CLI-to-core sync", "pass", `Found ${files.length} CLI command implementations`);
|
|
46961
46951
|
}
|
|
46962
46952
|
} catch (e) {
|
|
@@ -46972,7 +46962,7 @@ function registerDetectDriftCommand(program2) {
|
|
|
46972
46962
|
recommendation: "Verify MCP domain handlers are in place"
|
|
46973
46963
|
}]);
|
|
46974
46964
|
} else {
|
|
46975
|
-
const files =
|
|
46965
|
+
const files = readdirSync21(domainsDir).filter((f) => f.endsWith(".ts"));
|
|
46976
46966
|
addCheck("Domain handler coverage", "pass", `Found ${files.length} domain handlers`);
|
|
46977
46967
|
}
|
|
46978
46968
|
} catch (e) {
|
|
@@ -47335,7 +47325,7 @@ function registerRemoteCommand(program2) {
|
|
|
47335
47325
|
init_renderers();
|
|
47336
47326
|
init_paths();
|
|
47337
47327
|
import { mkdir as mkdir13, writeFile as writeFile14, readFile as readFile21 } from "node:fs/promises";
|
|
47338
|
-
import { existsSync as existsSync71, readFileSync as
|
|
47328
|
+
import { existsSync as existsSync71, readFileSync as readFileSync53 } from "node:fs";
|
|
47339
47329
|
import { join as join75, resolve as resolve10, dirname as dirname19 } from "node:path";
|
|
47340
47330
|
import { homedir as homedir4 } from "node:os";
|
|
47341
47331
|
import { fileURLToPath as fileURLToPath6 } from "node:url";
|
|
@@ -47355,7 +47345,7 @@ function registerInstallGlobalCommand(program2) {
|
|
|
47355
47345
|
const packageRoot = resolve10(dirname19(thisFile), "..", "..", "..");
|
|
47356
47346
|
const templatePath = join75(packageRoot, "templates", "CLEO-INJECTION.md");
|
|
47357
47347
|
if (existsSync71(templatePath)) {
|
|
47358
|
-
const content =
|
|
47348
|
+
const content = readFileSync53(templatePath, "utf-8");
|
|
47359
47349
|
const globalPath = join75(globalTemplatesDir, "CLEO-INJECTION.md");
|
|
47360
47350
|
if (!isDryRun) {
|
|
47361
47351
|
await writeFile14(globalPath, content);
|
|
@@ -48295,7 +48285,7 @@ Upgrade options:
|
|
|
48295
48285
|
function getPackageVersion() {
|
|
48296
48286
|
try {
|
|
48297
48287
|
const moduleRoot = join77(import.meta.dirname ?? "", "..", "..");
|
|
48298
|
-
const pkg = JSON.parse(
|
|
48288
|
+
const pkg = JSON.parse(readFileSync54(join77(moduleRoot, "package.json"), "utf-8"));
|
|
48299
48289
|
return pkg.version ?? "0.0.0";
|
|
48300
48290
|
} catch {
|
|
48301
48291
|
return "0.0.0";
|