@cleocode/core 2026.4.51 → 2026.4.52
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 +66 -32
- package/dist/index.js.map +3 -3
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +221 -36
- package/dist/internal.js.map +4 -4
- package/dist/memory/brain-export.d.ts +70 -0
- package/dist/memory/brain-export.d.ts.map +1 -0
- package/dist/memory/brain-retrieval.d.ts.map +1 -1
- package/dist/store/brain-schema.d.ts +16 -0
- package/dist/store/brain-schema.d.ts.map +1 -1
- package/dist/validation/verification.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/internal.ts +7 -0
- package/src/memory/brain-embedding.ts +1 -1
- package/src/memory/brain-export.ts +286 -0
- package/src/memory/brain-retrieval.ts +80 -14
- package/src/memory/brain-similarity.ts +1 -1
- package/src/memory/claude-mem-migration.ts +1 -1
- package/src/sessions/briefing.ts +1 -1
- package/src/skills/dispatch.ts +1 -1
- package/src/skills/injection/subagent.ts +1 -1
- package/src/skills/orchestrator/spawn.ts +1 -1
- package/src/store/brain-schema.ts +4 -0
- package/src/store/json.ts +2 -2
- package/src/system/archive-analytics.ts +1 -1
- package/src/tasks/task-ops.ts +2 -2
- package/src/validation/verification.ts +2 -6
package/dist/index.js
CHANGED
|
@@ -9575,11 +9575,14 @@ var init_brain_schema = __esm({
|
|
|
9575
9575
|
source: text("source").notNull(),
|
|
9576
9576
|
/** Estimated tokens consumed by this retrieval. */
|
|
9577
9577
|
tokensUsed: integer("tokens_used"),
|
|
9578
|
+
/** Session ID (soft FK to tasks.db sessions). Enables grouping retrievals by session for STDP analysis. */
|
|
9579
|
+
sessionId: text("session_id"),
|
|
9578
9580
|
createdAt: text("created_at").notNull().default(sql2`(datetime('now'))`)
|
|
9579
9581
|
},
|
|
9580
9582
|
(table) => [
|
|
9581
9583
|
index("idx_retrieval_log_created").on(table.createdAt),
|
|
9582
|
-
index("idx_retrieval_log_source").on(table.source)
|
|
9584
|
+
index("idx_retrieval_log_source").on(table.source),
|
|
9585
|
+
index("idx_retrieval_log_session").on(table.sessionId)
|
|
9583
9586
|
]
|
|
9584
9587
|
);
|
|
9585
9588
|
brainPlasticityEvents = sqliteTable(
|
|
@@ -14382,7 +14385,7 @@ function clearEmbeddingProvider() {
|
|
|
14382
14385
|
currentProvider = null;
|
|
14383
14386
|
}
|
|
14384
14387
|
async function embedText(text3) {
|
|
14385
|
-
if (!currentProvider
|
|
14388
|
+
if (!currentProvider?.isAvailable()) return null;
|
|
14386
14389
|
return currentProvider.embed(text3);
|
|
14387
14390
|
}
|
|
14388
14391
|
function isEmbeddingAvailable() {
|
|
@@ -19364,7 +19367,7 @@ function parseIdPrefix(id) {
|
|
|
19364
19367
|
return null;
|
|
19365
19368
|
}
|
|
19366
19369
|
async function searchSimilar(query, projectRoot, limit) {
|
|
19367
|
-
if (!query
|
|
19370
|
+
if (!query?.trim()) return [];
|
|
19368
19371
|
if (!isEmbeddingAvailable()) return [];
|
|
19369
19372
|
const maxResults = limit ?? 10;
|
|
19370
19373
|
const queryVector = await embedText(query);
|
|
@@ -46911,7 +46914,7 @@ async function computeLastSession(projectRoot, scopeFilter) {
|
|
|
46911
46914
|
const accessor = await getAccessor(projectRoot);
|
|
46912
46915
|
const allSessions = await accessor.loadSessions();
|
|
46913
46916
|
const session = allSessions.find((s) => s.id === sessionId);
|
|
46914
|
-
if (!session
|
|
46917
|
+
if (!session?.endedAt) return null;
|
|
46915
46918
|
let duration3 = 0;
|
|
46916
46919
|
if (session.startedAt) {
|
|
46917
46920
|
duration3 = Math.round(
|
|
@@ -48098,10 +48101,17 @@ async function searchBrainCompact(projectRoot, params) {
|
|
|
48098
48101
|
setImmediate(() => {
|
|
48099
48102
|
incrementCitationCounts(projectRoot, returnedIds).catch(() => {
|
|
48100
48103
|
});
|
|
48101
|
-
|
|
48102
|
-
(
|
|
48103
|
-
|
|
48104
|
-
|
|
48104
|
+
getCurrentSessionId(projectRoot).then((sessionId) => {
|
|
48105
|
+
return logRetrieval(
|
|
48106
|
+
projectRoot,
|
|
48107
|
+
query,
|
|
48108
|
+
returnedIds,
|
|
48109
|
+
"find-rrf",
|
|
48110
|
+
results2.length * 50,
|
|
48111
|
+
sessionId
|
|
48112
|
+
);
|
|
48113
|
+
}).catch(() => {
|
|
48114
|
+
});
|
|
48105
48115
|
});
|
|
48106
48116
|
}
|
|
48107
48117
|
return { results: results2, total: results2.length, tokensEstimated: results2.length * 50 };
|
|
@@ -48164,7 +48174,16 @@ async function searchBrainCompact(projectRoot, params) {
|
|
|
48164
48174
|
setImmediate(() => {
|
|
48165
48175
|
incrementCitationCounts(projectRoot, returnedIds).catch(() => {
|
|
48166
48176
|
});
|
|
48167
|
-
|
|
48177
|
+
getCurrentSessionId(projectRoot).then((sessionId) => {
|
|
48178
|
+
return logRetrieval(
|
|
48179
|
+
projectRoot,
|
|
48180
|
+
query,
|
|
48181
|
+
returnedIds,
|
|
48182
|
+
"find",
|
|
48183
|
+
results.length * 50,
|
|
48184
|
+
sessionId
|
|
48185
|
+
);
|
|
48186
|
+
}).catch(() => {
|
|
48168
48187
|
});
|
|
48169
48188
|
});
|
|
48170
48189
|
}
|
|
@@ -48352,13 +48371,16 @@ async function fetchBrainEntries(projectRoot, params) {
|
|
|
48352
48371
|
setImmediate(() => {
|
|
48353
48372
|
incrementCitationCounts(projectRoot, fetchedIds).catch(() => {
|
|
48354
48373
|
});
|
|
48355
|
-
|
|
48356
|
-
|
|
48357
|
-
|
|
48358
|
-
|
|
48359
|
-
|
|
48360
|
-
|
|
48361
|
-
|
|
48374
|
+
getCurrentSessionId(projectRoot).then((sessionId) => {
|
|
48375
|
+
return logRetrieval(
|
|
48376
|
+
projectRoot,
|
|
48377
|
+
fetchedIds.join(","),
|
|
48378
|
+
fetchedIds,
|
|
48379
|
+
"fetch",
|
|
48380
|
+
results.length * 500,
|
|
48381
|
+
sessionId
|
|
48382
|
+
);
|
|
48383
|
+
}).catch(() => {
|
|
48362
48384
|
});
|
|
48363
48385
|
});
|
|
48364
48386
|
}
|
|
@@ -48776,6 +48798,15 @@ async function retrieveWithBudget(projectRoot, query, tokenBudget = 500, options
|
|
|
48776
48798
|
excluded
|
|
48777
48799
|
};
|
|
48778
48800
|
}
|
|
48801
|
+
async function getCurrentSessionId(projectRoot) {
|
|
48802
|
+
try {
|
|
48803
|
+
const { sessionStatus: sessionStatus2 } = await Promise.resolve().then(() => (init_sessions2(), sessions_exports2));
|
|
48804
|
+
const session = await sessionStatus2(projectRoot);
|
|
48805
|
+
return session?.id;
|
|
48806
|
+
} catch {
|
|
48807
|
+
return void 0;
|
|
48808
|
+
}
|
|
48809
|
+
}
|
|
48779
48810
|
async function incrementCitationCounts(projectRoot, ids) {
|
|
48780
48811
|
if (ids.length === 0) return;
|
|
48781
48812
|
const { getBrainDb: getBrainDb2, getBrainNativeDb: getBrainNativeDb2 } = await Promise.resolve().then(() => (init_brain_sqlite(), brain_sqlite_exports));
|
|
@@ -48802,13 +48833,13 @@ async function incrementCitationCounts(projectRoot, ids) {
|
|
|
48802
48833
|
}
|
|
48803
48834
|
}
|
|
48804
48835
|
}
|
|
48805
|
-
async function logRetrieval(projectRoot, query, entryIds, source, tokensUsed) {
|
|
48836
|
+
async function logRetrieval(projectRoot, query, entryIds, source, tokensUsed, sessionId) {
|
|
48806
48837
|
if (entryIds.length === 0) return;
|
|
48807
48838
|
const { getBrainDb: getBrainDb2, getBrainNativeDb: getBrainNativeDb2 } = await Promise.resolve().then(() => (init_brain_sqlite(), brain_sqlite_exports));
|
|
48808
48839
|
await getBrainDb2(projectRoot);
|
|
48809
48840
|
const nativeDb = getBrainNativeDb2();
|
|
48810
48841
|
if (!nativeDb) return;
|
|
48811
|
-
const createSql = "CREATE TABLE IF NOT EXISTS brain_retrieval_log (id INTEGER PRIMARY KEY AUTOINCREMENT,query TEXT NOT NULL,entry_ids TEXT NOT NULL,entry_count INTEGER NOT NULL,source TEXT NOT NULL,tokens_used INTEGER,created_at TEXT NOT NULL DEFAULT (datetime('now')))";
|
|
48842
|
+
const createSql = "CREATE TABLE IF NOT EXISTS brain_retrieval_log (id INTEGER PRIMARY KEY AUTOINCREMENT,query TEXT NOT NULL,entry_ids TEXT NOT NULL,entry_count INTEGER NOT NULL,source TEXT NOT NULL,tokens_used INTEGER,session_id TEXT,created_at TEXT NOT NULL DEFAULT (datetime('now')))";
|
|
48812
48843
|
try {
|
|
48813
48844
|
nativeDb.prepare(createSql).run();
|
|
48814
48845
|
} catch {
|
|
@@ -48816,8 +48847,15 @@ async function logRetrieval(projectRoot, query, entryIds, source, tokensUsed) {
|
|
|
48816
48847
|
}
|
|
48817
48848
|
try {
|
|
48818
48849
|
nativeDb.prepare(
|
|
48819
|
-
"INSERT INTO brain_retrieval_log (query, entry_ids, entry_count, source, tokens_used) VALUES (?, ?, ?, ?, ?)"
|
|
48820
|
-
).run(
|
|
48850
|
+
"INSERT INTO brain_retrieval_log (query, entry_ids, entry_count, source, tokens_used, session_id) VALUES (?, ?, ?, ?, ?, ?)"
|
|
48851
|
+
).run(
|
|
48852
|
+
query,
|
|
48853
|
+
entryIds.join(","),
|
|
48854
|
+
entryIds.length,
|
|
48855
|
+
source,
|
|
48856
|
+
tokensUsed ?? null,
|
|
48857
|
+
sessionId ?? null
|
|
48858
|
+
);
|
|
48821
48859
|
} catch {
|
|
48822
48860
|
}
|
|
48823
48861
|
}
|
|
@@ -61391,7 +61429,7 @@ function prepareSpawnMulti(skillNames, tokenValues, cwd) {
|
|
|
61391
61429
|
const skillName = skillNames[i];
|
|
61392
61430
|
const isPrimary = i === 0;
|
|
61393
61431
|
const skill = findSkill(skillName, cwd);
|
|
61394
|
-
if (!skill
|
|
61432
|
+
if (!skill?.content) {
|
|
61395
61433
|
continue;
|
|
61396
61434
|
}
|
|
61397
61435
|
let content = isPrimary ? skill.content : loadProgressive(skill.content);
|
|
@@ -73560,7 +73598,7 @@ async function injectProtocol(skillContent, taskId, tokenValues, cwd, tier) {
|
|
|
73560
73598
|
}
|
|
73561
73599
|
async function orchestratorSpawnSkill(taskId, skillName, tokenValues, cwd, tier) {
|
|
73562
73600
|
const skill = findSkill(skillName, cwd);
|
|
73563
|
-
if (!skill
|
|
73601
|
+
if (!skill?.content) {
|
|
73564
73602
|
throw new CleoError(4 /* NOT_FOUND */, `Skill not found: ${skillName}`, {
|
|
73565
73603
|
fix: `Check skills directory for ${skillName}/SKILL.md`
|
|
73566
73604
|
});
|
|
@@ -74096,7 +74134,7 @@ async function buildPrompt(taskId, templateName = "TASK-EXECUTOR", cwd, tier) {
|
|
|
74096
74134
|
throw new CleoError(4 /* NOT_FOUND */, `Task ${taskId} not found`);
|
|
74097
74135
|
}
|
|
74098
74136
|
const skill = findSkill(templateName, cwd);
|
|
74099
|
-
if (!skill
|
|
74137
|
+
if (!skill?.content) {
|
|
74100
74138
|
const { canonical } = mapSkillName(templateName);
|
|
74101
74139
|
throw new CleoError(4 /* NOT_FOUND */, `Skill template ${templateName} not found`, {
|
|
74102
74140
|
fix: `Expected at skills/${canonical}/SKILL.md`
|
|
@@ -76654,7 +76692,7 @@ async function analyzeArchive(opts, accessor) {
|
|
|
76654
76692
|
const acc = accessor ?? await getAccessor(opts.cwd);
|
|
76655
76693
|
const data = await acc.loadArchive();
|
|
76656
76694
|
const reportType = opts.report ?? "summary";
|
|
76657
|
-
if (!data
|
|
76695
|
+
if (!data?.archivedTasks?.length) {
|
|
76658
76696
|
return {
|
|
76659
76697
|
report: reportType,
|
|
76660
76698
|
filters: null,
|
|
@@ -83194,16 +83232,12 @@ function allEpicChildrenVerified(epicId, tasks2) {
|
|
|
83194
83232
|
if (children.length === 0) return false;
|
|
83195
83233
|
const incomplete = children.filter((t) => t.status !== "done");
|
|
83196
83234
|
if (incomplete.length > 0) return false;
|
|
83197
|
-
const unverified = children.filter(
|
|
83198
|
-
(t) => t.status === "done" && (!t.verification || !t.verification.passed)
|
|
83199
|
-
);
|
|
83235
|
+
const unverified = children.filter((t) => t.status === "done" && !t.verification?.passed);
|
|
83200
83236
|
return unverified.length === 0;
|
|
83201
83237
|
}
|
|
83202
83238
|
function allSiblingsVerified(parentId, tasks2) {
|
|
83203
83239
|
const siblings = tasks2.filter((t) => t.parentId === parentId);
|
|
83204
|
-
const unverifiedDone = siblings.filter(
|
|
83205
|
-
(t) => t.status === "done" && (!t.verification || !t.verification.passed)
|
|
83206
|
-
);
|
|
83240
|
+
const unverifiedDone = siblings.filter((t) => t.status === "done" && !t.verification?.passed);
|
|
83207
83241
|
const incomplete = siblings.filter(
|
|
83208
83242
|
(t) => t.status === "pending" || t.status === "active" || t.status === "blocked"
|
|
83209
83243
|
);
|
|
@@ -83580,7 +83614,7 @@ import { randomUUID as randomUUID8 } from "node:crypto";
|
|
|
83580
83614
|
init_paths();
|
|
83581
83615
|
import { existsSync as existsSync107, readFileSync as readFileSync77, writeFileSync as writeFileSync20 } from "node:fs";
|
|
83582
83616
|
import { join as join107 } from "node:path";
|
|
83583
|
-
function
|
|
83617
|
+
function getCurrentSessionId2(cwd) {
|
|
83584
83618
|
if (process.env.CLEO_SESSION) return process.env.CLEO_SESSION;
|
|
83585
83619
|
const sessionFile = join107(getCleoDir(cwd), ".current-session");
|
|
83586
83620
|
if (existsSync107(sessionFile)) {
|
|
@@ -83608,7 +83642,7 @@ function createCliMeta(operation, duration_ms = 0) {
|
|
|
83608
83642
|
duration_ms,
|
|
83609
83643
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
83610
83644
|
};
|
|
83611
|
-
const sessionId =
|
|
83645
|
+
const sessionId = getCurrentSessionId2();
|
|
83612
83646
|
if (sessionId) {
|
|
83613
83647
|
meta3["sessionId"] = sessionId;
|
|
83614
83648
|
}
|