@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 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: readFileSync54, existsSync: existsSync73 } = await import("node:fs");
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(readFileSync54(infoPath, "utf-8"));
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.19",
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-07T20:22:23.104Z",
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 { readFileSync: readFileSync54 } = __require("node:fs");
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 = readdirSync21(logsDir).filter((f) => f.startsWith("migration-") && f.endsWith(".jsonl")).map((f) => ({
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: statSync10(join69(logsDir, f)).mtime.getTime()
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 { readdirSync: readdirSync21, unlinkSync: unlinkSync5 } = __require("node:fs");
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 readFileSync49 } from "node:fs";
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(readFileSync49(todoPath, "utf-8"));
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(readFileSync49(archivePath, "utf-8"));
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(readFileSync49(sessionsPath, "utf-8"));
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(readFileSync49(todoPath, "utf-8"));
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(readFileSync49(archivePath, "utf-8"));
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(readFileSync49(sessionsPath, "utf-8"));
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(readFileSync49(todoPath, "utf-8"));
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(readFileSync49(archivePath, "utf-8"));
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
- readFileSync49(sessionsPath, "utf-8")
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 readFileSync53 } from "node:fs";
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 readFileSync50, writeFileSync as writeFileSync13, mkdirSync as mkdirSync18, readdirSync as readdirSync19, copyFileSync as copyFileSync5 } from "node:fs";
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(readFileSync50(dbPath2)).digest("hex");
45949
- const backupChecksum = createHash9("sha256").update(readFileSync50(dbBackupPath)).digest("hex");
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: unlinkSync5 } = await import("node:fs");
45966
- unlinkSync5(dbTempPath);
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 = readFileSync50(configPath, "utf-8");
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(readFileSync50(configPath, "utf-8"));
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 = readdirSync19(safetyDir).filter((f) => f.startsWith("tasks.db.pre-migration.")).sort().reverse();
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: unlinkSync5 } = await import("node:fs");
46148
+ const { unlinkSync: unlinkSync6 } = await import("node:fs");
46159
46149
  for (const f of foundStale) {
46160
- unlinkSync5(join72(cleoDir, f));
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(readFileSync50(contextPath, "utf-8"));
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 readFileSync51, existsSync as existsSync70, readdirSync as readdirSync20 } from "node:fs";
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 readFileSync51(path, "utf-8");
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 = readdirSync20(cliDir).filter((f) => f.endsWith(".ts") && !f.includes(".test."));
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 = readdirSync20(domainsDir).filter((f) => f.endsWith(".ts"));
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 readFileSync52 } from "node:fs";
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 = readFileSync52(templatePath, "utf-8");
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(readFileSync53(join77(moduleRoot, "package.json"), "utf-8"));
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";