@cleocode/cleo 2026.5.66 → 2026.5.67

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
@@ -24279,8 +24279,8 @@ async function loadPlaybookByName(name) {
24279
24279
  return null;
24280
24280
  }
24281
24281
  try {
24282
- const { getProjectRoot: getProjectRoot34 } = await import("@cleocode/core/internal");
24283
- const projectRoot = __playbookRuntimeOverrides.projectRoot ?? getProjectRoot34();
24282
+ const { getProjectRoot: getProjectRoot35 } = await import("@cleocode/core/internal");
24283
+ const projectRoot = __playbookRuntimeOverrides.projectRoot ?? getProjectRoot35();
24284
24284
  const resolved = resolvePlaybook(name, {
24285
24285
  projectRoot,
24286
24286
  globalPlaybooksDir: __playbookRuntimeOverrides.globalPlaybooksDir,
@@ -24324,8 +24324,8 @@ async function acquireDb() {
24324
24324
  async function buildDefaultDispatcher() {
24325
24325
  if (__playbookRuntimeOverrides.dispatcher) return __playbookRuntimeOverrides.dispatcher;
24326
24326
  const { orchestrateSpawnExecute: orchestrateSpawnExecute2 } = await Promise.resolve().then(() => (init_engine(), engine_exports));
24327
- const { getProjectRoot: getProjectRoot34 } = await import("@cleocode/core/internal");
24328
- const projectRoot = getProjectRoot34();
24327
+ const { getProjectRoot: getProjectRoot35 } = await import("@cleocode/core/internal");
24328
+ const projectRoot = getProjectRoot35();
24329
24329
  return {
24330
24330
  async dispatch(input) {
24331
24331
  try {
@@ -24515,8 +24515,8 @@ var init_playbook2 = __esm({
24515
24515
  projectRoot = __playbookRuntimeOverrides.projectRoot;
24516
24516
  } else {
24517
24517
  try {
24518
- const { getProjectRoot: getProjectRoot34 } = await import("@cleocode/core/internal");
24519
- projectRoot = getProjectRoot34();
24518
+ const { getProjectRoot: getProjectRoot35 } = await import("@cleocode/core/internal");
24519
+ projectRoot = getProjectRoot35();
24520
24520
  } catch {
24521
24521
  projectRoot = void 0;
24522
24522
  }
@@ -24580,14 +24580,14 @@ var init_playbook2 = __esm({
24580
24580
  const dispatcher = await buildDefaultDispatcher();
24581
24581
  let result;
24582
24582
  try {
24583
- const { getProjectRoot: getProjectRoot34 } = await import("@cleocode/core/internal");
24583
+ const { getProjectRoot: getProjectRoot35 } = await import("@cleocode/core/internal");
24584
24584
  const opts = {
24585
24585
  db,
24586
24586
  playbook: parsed.definition,
24587
24587
  playbookHash: parsed.sourceHash,
24588
24588
  initialContext,
24589
24589
  dispatcher,
24590
- projectRoot: getProjectRoot34()
24590
+ projectRoot: getProjectRoot35()
24591
24591
  };
24592
24592
  if (__playbookRuntimeOverrides.approvalSecret !== void 0) {
24593
24593
  opts.approvalSecret = __playbookRuntimeOverrides.approvalSecret;
@@ -29496,11 +29496,11 @@ var init_security = __esm({
29496
29496
  });
29497
29497
 
29498
29498
  // packages/cleo/src/dispatch/middleware/sanitizer.ts
29499
- function createSanitizer(getProjectRoot34) {
29499
+ function createSanitizer(getProjectRoot35) {
29500
29500
  return async (req, next) => {
29501
29501
  if (req.params) {
29502
29502
  try {
29503
- const root = getProjectRoot34 ? getProjectRoot34() : void 0;
29503
+ const root = getProjectRoot35 ? getProjectRoot35() : void 0;
29504
29504
  req.params = sanitizeParams(req.params, root, {
29505
29505
  domain: req.domain,
29506
29506
  operation: req.operation
@@ -34722,9 +34722,9 @@ var init_backup = __esm({
34722
34722
  },
34723
34723
  async run({ args }) {
34724
34724
  const scope = args.scope;
34725
- const { packBundle, getProjectRoot: getProjectRoot34 } = await import("@cleocode/core/internal");
34725
+ const { packBundle, getProjectRoot: getProjectRoot35 } = await import("@cleocode/core/internal");
34726
34726
  const includesProject = scope === "project" || scope === "all";
34727
- const projectRoot = includesProject ? getProjectRoot34() : void 0;
34727
+ const projectRoot = includesProject ? getProjectRoot35() : void 0;
34728
34728
  let passphrase;
34729
34729
  if (args.encrypt === true) {
34730
34730
  passphrase = process.env["CLEO_BACKUP_PASSPHRASE"];
@@ -44054,6 +44054,115 @@ var init_list = __esm({
44054
44054
  }
44055
44055
  });
44056
44056
 
44057
+ // packages/cleo/src/cli/commands/llm-cost.ts
44058
+ var llm_cost_exports = {};
44059
+ __export(llm_cost_exports, {
44060
+ costCommand: () => costCommand
44061
+ });
44062
+ import { getProjectRoot as getProjectRoot26 } from "@cleocode/core/internal";
44063
+ import { computeCost } from "@cleocode/core/llm/usage-pricing";
44064
+ function resolveSessionId(raw) {
44065
+ if (raw === "current") {
44066
+ const envId = process.env["CLEO_SESSION_ID"];
44067
+ if (envId) return envId;
44068
+ return "current";
44069
+ }
44070
+ return raw;
44071
+ }
44072
+ async function loadSessionCostBreakdown(projectRoot, sessionId) {
44073
+ const { listTokenUsage: listTokenUsage2 } = await import(
44074
+ /* webpackIgnore: true */
44075
+ "@cleocode/core/internal"
44076
+ );
44077
+ const result = await listTokenUsage2(projectRoot, {
44078
+ sessionId,
44079
+ limit: 1e3
44080
+ // Practical upper bound for a single session.
44081
+ });
44082
+ const entries = result.records.map(
44083
+ (row) => {
44084
+ const usage = {
44085
+ inputTokens: row.inputTokens,
44086
+ outputTokens: row.outputTokens
44087
+ };
44088
+ const model = row.model ?? "unknown";
44089
+ return {
44090
+ id: row.id,
44091
+ provider: row.provider,
44092
+ model: row.model,
44093
+ usage,
44094
+ costUsd: computeCost(usage, model),
44095
+ createdAt: row.createdAt
44096
+ };
44097
+ }
44098
+ );
44099
+ entries.sort((a, b) => a.createdAt.localeCompare(b.createdAt));
44100
+ return entries;
44101
+ }
44102
+ var costCommand;
44103
+ var init_llm_cost = __esm({
44104
+ "packages/cleo/src/cli/commands/llm-cost.ts"() {
44105
+ "use strict";
44106
+ init_dist();
44107
+ init_renderers();
44108
+ costCommand = defineCommand({
44109
+ meta: {
44110
+ name: "cost",
44111
+ description: 'Compute cumulative USD cost for an LLM session from recorded token_usage entries. Use "current" to resolve the active session from CLEO_SESSION_ID. Returns totalUsd=0 when no usage records exist yet (ADR-072 Wave 4b pending).'
44112
+ },
44113
+ args: {
44114
+ sessionId: {
44115
+ type: "positional",
44116
+ description: 'Session id to query, or "current" for the active session',
44117
+ required: true
44118
+ },
44119
+ json: {
44120
+ type: "boolean",
44121
+ description: "Output as JSON"
44122
+ }
44123
+ },
44124
+ async run({ args }) {
44125
+ const a = args;
44126
+ const rawSessionId = String(a["sessionId"] ?? "");
44127
+ if (!rawSessionId) {
44128
+ cliError("session-id is required", 6, {
44129
+ name: "E_VALIDATION",
44130
+ fix: 'Provide a session id or "current": cleo llm cost <session-id>'
44131
+ });
44132
+ process.exit(6);
44133
+ }
44134
+ const sessionId = resolveSessionId(rawSessionId);
44135
+ const projectRoot = getProjectRoot26(process.cwd());
44136
+ let breakdown;
44137
+ try {
44138
+ breakdown = await loadSessionCostBreakdown(projectRoot, sessionId);
44139
+ } catch (err) {
44140
+ const message = err instanceof Error ? err.message : String(err);
44141
+ cliError(`Failed to query token_usage: ${message}`, 1, {
44142
+ name: "E_QUERY_FAILED",
44143
+ fix: "Ensure tasks.db is initialized: cleo session start"
44144
+ });
44145
+ process.exit(1);
44146
+ }
44147
+ const totalUsd = breakdown.reduce((sum, entry) => sum + entry.costUsd, 0);
44148
+ const result = {
44149
+ sessionId,
44150
+ totalUsd,
44151
+ recordCount: breakdown.length,
44152
+ breakdown
44153
+ };
44154
+ if (breakdown.length === 0) {
44155
+ result.note = "No token_usage records found for this session. Live usage wiring is pending ADR-072 Wave 4b (LlmExecutor done event). Records will appear automatically once that wave ships.";
44156
+ }
44157
+ cliOutput(result, {
44158
+ command: "llm-cost",
44159
+ operation: "llm.cost"
44160
+ });
44161
+ }
44162
+ });
44163
+ }
44164
+ });
44165
+
44057
44166
  // packages/cleo/src/cli/commands/llm-login.ts
44058
44167
  import { addCredential } from "@cleocode/core/llm/credentials-store.js";
44059
44168
  import {
@@ -44234,6 +44343,7 @@ var init_llm3 = __esm({
44234
44343
  init_dist();
44235
44344
  init_cli();
44236
44345
  init_renderers();
44346
+ init_llm_cost();
44237
44347
  init_llm_login();
44238
44348
  API_KEY_FLAG_DEPRECATION = "[warning] --api-key exposes the secret to 'ps' listings and shell history. Prefer --api-key-stdin or --api-key-env=NAME for production use.";
44239
44349
  addCommand5 = defineCommand({
@@ -44552,6 +44662,7 @@ var init_llm3 = __esm({
44552
44662
  },
44553
44663
  subCommands: {
44554
44664
  add: addCommand5,
44665
+ cost: costCommand,
44555
44666
  list: listCommand10,
44556
44667
  login: loginCommand,
44557
44668
  remove: removeCommand3,
@@ -45002,7 +45113,7 @@ import {
45002
45113
  getBrainDb as getBrainDb2,
45003
45114
  getBrainNativeDb as getBrainNativeDb3,
45004
45115
  getDreamStatus,
45005
- getProjectRoot as getProjectRoot26,
45116
+ getProjectRoot as getProjectRoot27,
45006
45117
  runConsolidation,
45007
45118
  triggerManualDream
45008
45119
  } from "@cleocode/core/internal";
@@ -45963,7 +46074,7 @@ var init_memory3 = __esm({
45963
46074
  },
45964
46075
  args: {},
45965
46076
  async run() {
45966
- const root = getProjectRoot26();
46077
+ const root = getProjectRoot27();
45967
46078
  try {
45968
46079
  const result = await runConsolidation(root);
45969
46080
  cliOutput(result, { command: "memory-consolidate", operation: "memory.consolidate" });
@@ -45987,7 +46098,7 @@ var init_memory3 = __esm({
45987
46098
  }
45988
46099
  },
45989
46100
  async run({ args }) {
45990
- const root = getProjectRoot26();
46101
+ const root = getProjectRoot27();
45991
46102
  if (args.status) {
45992
46103
  try {
45993
46104
  const status = await getDreamStatus(root);
@@ -46024,7 +46135,7 @@ var init_memory3 = __esm({
46024
46135
  }
46025
46136
  },
46026
46137
  async run({ args }) {
46027
- const root = getProjectRoot26();
46138
+ const root = getProjectRoot27();
46028
46139
  try {
46029
46140
  const { runObserver, runReflector } = await import("@cleocode/core/internal");
46030
46141
  const observerResult = await runObserver(root, args.session, {
@@ -46064,7 +46175,7 @@ var init_memory3 = __esm({
46064
46175
  }
46065
46176
  },
46066
46177
  async run({ args }) {
46067
- const root = getProjectRoot26();
46178
+ const root = getProjectRoot27();
46068
46179
  try {
46069
46180
  const { getBrainDb: getBrainDbInner, getBrainNativeDb: getBrainNativeDbInner } = await import("@cleocode/core/internal");
46070
46181
  await getBrainDbInner(root);
@@ -46162,7 +46273,7 @@ var init_memory3 = __esm({
46162
46273
  async run({ args }) {
46163
46274
  const sourceDir = args.from ?? join19(homedir6(), ".claude", "projects", "-mnt-projects-cleocode", "memory");
46164
46275
  const isDryRun = !!args["dry-run"];
46165
- const projectRoot = getProjectRoot26();
46276
+ const projectRoot = getProjectRoot27();
46166
46277
  const stateFile = join19(projectRoot, CLEO_DIR_NAME, MIGRATE_MEMORY_HASHES_JSON);
46167
46278
  if (!existsSync14(sourceDir)) {
46168
46279
  cliError(`Source directory not found: ${sourceDir}`, "E_NOT_FOUND", { name: "E_NOT_FOUND" });
@@ -46375,7 +46486,7 @@ var init_memory3 = __esm({
46375
46486
  },
46376
46487
  args: {},
46377
46488
  async run() {
46378
- const root = getProjectRoot26();
46489
+ const root = getProjectRoot27();
46379
46490
  try {
46380
46491
  await getBrainDb2(root);
46381
46492
  const nativeDb = getBrainNativeDb3();
@@ -46474,7 +46585,7 @@ var init_memory3 = __esm({
46474
46585
  }
46475
46586
  },
46476
46587
  async run({ args }) {
46477
- const root = getProjectRoot26();
46588
+ const root = getProjectRoot27();
46478
46589
  const targetTier = args.to;
46479
46590
  const reason = args.reason;
46480
46591
  const validTiers = ["medium", "long"];
@@ -46578,7 +46689,7 @@ var init_memory3 = __esm({
46578
46689
  }
46579
46690
  },
46580
46691
  async run({ args }) {
46581
- const root = getProjectRoot26();
46692
+ const root = getProjectRoot27();
46582
46693
  const targetTier = args.to;
46583
46694
  const reason = args.reason;
46584
46695
  const validTiers = ["short", "medium"];
@@ -47092,7 +47203,7 @@ var migrate_claude_mem_exports = {};
47092
47203
  __export(migrate_claude_mem_exports, {
47093
47204
  migrateClaudeMemCommand: () => migrateClaudeMemCommand
47094
47205
  });
47095
- import { getProjectRoot as getProjectRoot27, migrateClaudeMem } from "@cleocode/core/internal";
47206
+ import { getProjectRoot as getProjectRoot28, migrateClaudeMem } from "@cleocode/core/internal";
47096
47207
  import { ingestLooseAgentOutputs, ingestRcasdDirectories } from "@cleocode/core/memory";
47097
47208
  import { getDb as getDb2 } from "@cleocode/core/store/sqlite";
47098
47209
  var storageCommand, claudeMemCommand, manifestIngestCommand, migrateClaudeMemCommand;
@@ -47155,7 +47266,7 @@ var init_migrate_claude_mem = __esm({
47155
47266
  }
47156
47267
  },
47157
47268
  async run({ args }) {
47158
- const root = getProjectRoot27();
47269
+ const root = getProjectRoot28();
47159
47270
  try {
47160
47271
  const result = await migrateClaudeMem(root, {
47161
47272
  sourcePath: args.source,
@@ -47204,7 +47315,7 @@ var init_migrate_claude_mem = __esm({
47204
47315
  }
47205
47316
  },
47206
47317
  async run({ args }) {
47207
- const projectRoot = getProjectRoot27();
47318
+ const projectRoot = getProjectRoot28();
47208
47319
  try {
47209
47320
  const db = await getDb2(projectRoot);
47210
47321
  const rcasdFlag = Boolean(args.rcasd);
@@ -48149,7 +48260,7 @@ var init_nexus4 = __esm({
48149
48260
  const repoPath = args.path ? path4.resolve(args.path) : process.cwd();
48150
48261
  humanInfo(`[nexus] Analyzing: ${repoPath}${isIncremental ? " (incremental)" : ""}`);
48151
48262
  try {
48152
- const [{ getNexusDb, nexusSchema }, { runPipeline }, { getProjectRoot: getProjectRoot34 }, { eq: eq2 }] = await Promise.all([
48263
+ const [{ getNexusDb, nexusSchema }, { runPipeline }, { getProjectRoot: getProjectRoot35 }, { eq: eq2 }] = await Promise.all([
48153
48264
  import("@cleocode/core/store/nexus-sqlite"),
48154
48265
  import("@cleocode/nexus/pipeline"),
48155
48266
  import("@cleocode/core/internal"),
@@ -48229,7 +48340,7 @@ var init_nexus4 = __esm({
48229
48340
  extensions: { duration_ms: durationMs }
48230
48341
  }
48231
48342
  );
48232
- void getProjectRoot34;
48343
+ void getProjectRoot35;
48233
48344
  } catch (err) {
48234
48345
  const msg = err instanceof Error ? err.message : String(err);
48235
48346
  cliError(
@@ -51831,7 +51942,7 @@ var refresh_memory_exports = {};
51831
51942
  __export(refresh_memory_exports, {
51832
51943
  refreshMemoryCommand: () => refreshMemoryCommand
51833
51944
  });
51834
- import { getProjectRoot as getProjectRoot28 } from "@cleocode/core";
51945
+ import { getProjectRoot as getProjectRoot29 } from "@cleocode/core";
51835
51946
  var refreshMemoryCommand;
51836
51947
  var init_refresh_memory = __esm({
51837
51948
  "packages/cleo/src/cli/commands/refresh-memory.ts"() {
@@ -51844,7 +51955,7 @@ var init_refresh_memory = __esm({
51844
51955
  description: "Regenerate .cleo/memory-bridge.md from brain.db"
51845
51956
  },
51846
51957
  async run() {
51847
- const projectDir = getProjectRoot28();
51958
+ const projectDir = getProjectRoot29();
51848
51959
  const { writeMemoryBridge } = await import("@cleocode/core/internal");
51849
51960
  const result = await writeMemoryBridge(projectDir);
51850
51961
  if (result.written) {
@@ -53154,7 +53265,7 @@ __export(restore_exports, {
53154
53265
  import fs3 from "node:fs";
53155
53266
  import path5 from "node:path";
53156
53267
  import { CleoError as CleoError8, getTaskAccessor as getTaskAccessor3 } from "@cleocode/core";
53157
- import { getProjectRoot as getProjectRoot29 } from "@cleocode/core/internal";
53268
+ import { getProjectRoot as getProjectRoot30 } from "@cleocode/core/internal";
53158
53269
  function parseMarkdownValue(raw) {
53159
53270
  const trimmed = raw.trim();
53160
53271
  if (trimmed === "_(not present)_" || trimmed === "") return void 0;
@@ -53274,7 +53385,7 @@ var init_restore = __esm({
53274
53385
  description: "Apply manually-resolved conflicts from .cleo/restore-conflicts.md"
53275
53386
  },
53276
53387
  async run() {
53277
- const projectRoot = getProjectRoot29();
53388
+ const projectRoot = getProjectRoot30();
53278
53389
  const reportPath = path5.join(projectRoot, CLEO_DIR_NAME, RESTORE_CONFLICTS_MD);
53279
53390
  if (!fs3.existsSync(reportPath)) {
53280
53391
  humanLine("No pending restore conflicts. Nothing to finalize.");
@@ -55249,7 +55360,7 @@ var sequence_exports = {};
55249
55360
  __export(sequence_exports, {
55250
55361
  sequenceCommand: () => sequenceCommand
55251
55362
  });
55252
- import { getProjectRoot as getProjectRoot30 } from "@cleocode/core/internal";
55363
+ import { getProjectRoot as getProjectRoot31 } from "@cleocode/core/internal";
55253
55364
  var showCommand12, checkCommand6, repairCommand, sequenceCommand;
55254
55365
  var init_sequence = __esm({
55255
55366
  "packages/cleo/src/cli/commands/sequence.ts"() {
@@ -55285,7 +55396,7 @@ var init_sequence = __esm({
55285
55396
  meta: { name: "repair", description: "Reset counter to max + 1 if behind" },
55286
55397
  async run() {
55287
55398
  const { repairSequence } = await import("@cleocode/core/internal");
55288
- const projectRoot = getProjectRoot30();
55399
+ const projectRoot = getProjectRoot31();
55289
55400
  const repair = await repairSequence(projectRoot);
55290
55401
  const result = {
55291
55402
  repaired: repair.repaired,
@@ -55728,8 +55839,8 @@ var init_session4 = __esm({
55728
55839
  "audit-scope": { type: "string", description: "Audit log scope (global|local)" }
55729
55840
  },
55730
55841
  async run({ args }) {
55731
- const { detectSessionDrift, getProjectRoot: getProjectRoot34 } = await import("@cleocode/core");
55732
- const projectRoot = await getProjectRoot34();
55842
+ const { detectSessionDrift, getProjectRoot: getProjectRoot35 } = await import("@cleocode/core");
55843
+ const projectRoot = await getProjectRoot35();
55733
55844
  const scope = args["audit-scope"] === "local" ? "local" : "global";
55734
55845
  const report = await detectSessionDrift({ projectRoot, auditScope: scope });
55735
55846
  cliOutput(report, { command: "session drift", operation: "session.drift" });
@@ -57237,7 +57348,7 @@ __export(token_exports, {
57237
57348
  tokenCommand: () => tokenCommand
57238
57349
  });
57239
57350
  import { readFileSync as readFileSync15 } from "node:fs";
57240
- import { getProjectRoot as getProjectRoot31, measureTokenExchange, recordTokenExchange as recordTokenExchange2 } from "@cleocode/core/internal";
57351
+ import { getProjectRoot as getProjectRoot32, measureTokenExchange, recordTokenExchange as recordTokenExchange2 } from "@cleocode/core/internal";
57241
57352
  function readPayload(args, textKey, fileKey) {
57242
57353
  const text = args[textKey];
57243
57354
  const file = args[fileKey];
@@ -57401,7 +57512,7 @@ var init_token = __esm({
57401
57512
  domain: args.domain,
57402
57513
  operation: args.operation
57403
57514
  };
57404
- const result = args.record ? await recordTokenExchange2(getProjectRoot31(), input) : await measureTokenExchange(input);
57515
+ const result = args.record ? await recordTokenExchange2(getProjectRoot32(), input) : await measureTokenExchange(input);
57405
57516
  cliOutput(result, {
57406
57517
  command: "token",
57407
57518
  operation: args.record ? "admin.token.record" : "token.estimate"
@@ -57437,7 +57548,7 @@ __export(transcript_exports, {
57437
57548
  });
57438
57549
  import { homedir as homedir8 } from "node:os";
57439
57550
  import { join as join23 } from "node:path";
57440
- import { getProjectRoot as getProjectRoot32 } from "@cleocode/core";
57551
+ import { getProjectRoot as getProjectRoot33 } from "@cleocode/core";
57441
57552
  import {
57442
57553
  parseDurationMs,
57443
57554
  pruneTranscripts,
@@ -57467,7 +57578,7 @@ var init_transcript = __esm({
57467
57578
  async run({ args }) {
57468
57579
  if (args.pending) {
57469
57580
  try {
57470
- const projectRoot = getProjectRoot32();
57581
+ const projectRoot = getProjectRoot33();
57471
57582
  const { scanPendingTranscripts } = await import("@cleocode/core/memory/transcript-scanner.js");
57472
57583
  const pending = await scanPendingTranscripts(projectRoot);
57473
57584
  cliOutput(
@@ -57564,7 +57675,7 @@ var init_transcript = __esm({
57564
57675
  async run({ args }) {
57565
57676
  const tier = args.tier ?? "warm";
57566
57677
  const dryRun = args["dry-run"] ?? false;
57567
- const projectRoot = getProjectRoot32();
57678
+ const projectRoot = getProjectRoot33();
57568
57679
  try {
57569
57680
  const { extractTranscript } = await import("@cleocode/core/memory/transcript-extractor.js");
57570
57681
  const { findSessionTranscriptPath, listAllTranscripts } = await import("@cleocode/core/memory/transcript-scanner.js");
@@ -57676,7 +57787,7 @@ var init_transcript = __esm({
57676
57787
  const dryRun = args["dry-run"] ?? false;
57677
57788
  const olderThanHours = args["older-than-hours"] ? Number.parseInt(args["older-than-hours"], 10) : 24;
57678
57789
  const limit = args.limit ? Number.parseInt(args.limit, 10) : void 0;
57679
- const projectRoot = getProjectRoot32();
57790
+ const projectRoot = getProjectRoot33();
57680
57791
  try {
57681
57792
  const { extractTranscript } = await import("@cleocode/core/memory/transcript-extractor.js");
57682
57793
  const { listAllTranscripts } = await import("@cleocode/core/memory/transcript-scanner.js");
@@ -58278,7 +58389,7 @@ import { resolve as resolve6 } from "node:path";
58278
58389
  import {
58279
58390
  backfillAllPendingVerifiers,
58280
58391
  backfillVerifier,
58281
- getProjectRoot as getProjectRoot33,
58392
+ getProjectRoot as getProjectRoot34,
58282
58393
  resolveVerifierScript as resolveVerifierScript2,
58283
58394
  runVerifier
58284
58395
  } from "@cleocode/core";
@@ -58375,7 +58486,7 @@ var init_verify = __esm({
58375
58486
  }
58376
58487
  },
58377
58488
  async run({ args, cmd }) {
58378
- const projectRoot = getProjectRoot33();
58489
+ const projectRoot = getProjectRoot34();
58379
58490
  const force = !!args.force;
58380
58491
  if (args["all-pending"]) {
58381
58492
  await runBackfillAll(projectRoot, force);
@@ -58445,7 +58556,7 @@ var init_verify = __esm({
58445
58556
  const taskIdArg = remainingArgs.find((a) => !a.startsWith("-"));
58446
58557
  const allPending = remainingArgs.includes("--all-pending");
58447
58558
  const force = remainingArgs.includes("--force");
58448
- const projectRoot = getProjectRoot33();
58559
+ const projectRoot = getProjectRoot34();
58449
58560
  if (allPending) {
58450
58561
  await runBackfillAll(projectRoot, force);
58451
58562
  } else if (taskIdArg) {
@@ -59280,6 +59391,12 @@ var COMMAND_MANIFEST = [
59280
59391
  description: "List tasks with optional filters",
59281
59392
  load: async () => (await Promise.resolve().then(() => (init_list(), list_exports))).listCommand
59282
59393
  },
59394
+ {
59395
+ exportName: "costCommand",
59396
+ name: "cost",
59397
+ description: "Compute cumulative USD cost for an LLM session from recorded token_usage entries. ",
59398
+ load: async () => (await Promise.resolve().then(() => (init_llm_cost(), llm_cost_exports))).costCommand
59399
+ },
59283
59400
  {
59284
59401
  exportName: "llmCommand",
59285
59402
  name: "llm",
@@ -60053,7 +60170,7 @@ async function runStartupMaintenance() {
60053
60170
  detectAndRemoveStrayProjectNexus,
60054
60171
  getGlobalSalt,
60055
60172
  getLogger: getLogger17,
60056
- getProjectRoot: getProjectRoot34,
60173
+ getProjectRoot: getProjectRoot35,
60057
60174
  isCleanupMarkerSet,
60058
60175
  migrateSignaldockToConduit,
60059
60176
  needsSignaldockToConduitMigration,
@@ -60062,7 +60179,7 @@ async function runStartupMaintenance() {
60062
60179
  } = await import("@cleocode/core/internal");
60063
60180
  let projectRootForCleanup = "";
60064
60181
  try {
60065
- projectRootForCleanup = getProjectRoot34();
60182
+ projectRootForCleanup = getProjectRoot35();
60066
60183
  } catch {
60067
60184
  }
60068
60185
  if (!isCleanupMarkerSet(CLI_VERSION, projectRootForCleanup)) {
@@ -60082,7 +60199,7 @@ async function runStartupMaintenance() {
60082
60199
  const isInitInvocation = process.argv.slice(2).some((a) => a === "init");
60083
60200
  if (!isInitInvocation) {
60084
60201
  try {
60085
- const _projectRootForMigration = getProjectRoot34();
60202
+ const _projectRootForMigration = getProjectRoot35();
60086
60203
  if (needsSignaldockToConduitMigration(_projectRootForMigration)) {
60087
60204
  const migrationResult = migrateSignaldockToConduit(_projectRootForMigration);
60088
60205
  if (migrationResult.status === "failed") {