acp-kernel 0.0.5 → 0.0.7
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/compress.d.ts.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -107
- package/dist/index.js.map +1 -1
- package/dist/pipeline.d.ts +0 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/search.d.ts +27 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/types.d.ts +0 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/merge.d.ts +0 -9
- package/dist/merge.d.ts.map +0 -1
package/dist/compress.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,kBAAkB,EACnB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAcpB,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAEhB,MAAM,EAEN,WAAW,EAGX,iBAAiB,EAEjB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,KAAK;IACpB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAAC;IACxD,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CAAC;IACvE,YAAY,IAAI,YAAY,EAAE,CAAC;IAC/B,UAAU,CACR,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,gBAAgB,GACtB,gBAAgB,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IACnE,MAAM,CACJ,KAAK,EAAE,gBAAgB,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,YAAY,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,EAAE,CAAC;IACJ,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,wBAAgB,UAAU,CAAC,KAAK,GAAE,KAAU,GAAG,eAAe,CAyM7D;AA0kBD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,wBAAgB,aAAa,CAC3B,iBAAiB,EAAE,MAAM,EACzB,SAAS,GAAE,OAAO,CAAC,MAAM,CAAM,GAC9B,MAAM,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,wBAAgB,aAAa,CAC3B,iBAAiB,EAAE,MAAM,EACzB,SAAS,GAAE,OAAO,CAAC,MAAM,CAAM,GAC9B,MAAM,CAoCR;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BvD"}
|
package/dist/index.d.ts
CHANGED
|
@@ -22,11 +22,11 @@ export { buildStatusReport, buildRecap } from "./report.js";
|
|
|
22
22
|
export type { StatusReportOptions } from "./report.js";
|
|
23
23
|
export { hideConsumedCompressCalls } from "./hide-consumed.js";
|
|
24
24
|
export type { HideConsumedResult } from "./hide-consumed.js";
|
|
25
|
-
export { mergeMarkedBlocks, collectOldGenBlocks } from "./merge.js";
|
|
26
|
-
export type { MergeResult } from "./merge.js";
|
|
27
25
|
export { rebuildCompressionState } from "./rebuild.js";
|
|
28
26
|
export type { RebuildResult, RebuildPorts } from "./rebuild.js";
|
|
29
27
|
export { renderVisibleRefs, renderRefsNode } from "./render-refs.js";
|
|
28
|
+
export { searchBlocks } from "./search.js";
|
|
29
|
+
export type { SearchResult, SearchOptions } from "./search.js";
|
|
30
30
|
export { isMessageProtected, matchToolPattern } from "./protected.js";
|
|
31
31
|
export { runPipeline, makeIO, type PipelineNode, type PipelineContext, type NodeIO, type NodeEffects, } from "./pipeline.js";
|
|
32
32
|
export * from "./filter/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EACV,KAAK,EACL,eAAe,EACf,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3F,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC/H,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EACH,eAAe,EACf,6BAA6B,EAC7B,kBAAkB,EAClB,eAAe,EACf,2BAA2B,GAC9B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EACV,KAAK,EACL,eAAe,EACf,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3F,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC/H,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EACH,eAAe,EACf,6BAA6B,EAC7B,kBAAkB,EAClB,eAAe,EACf,2BAA2B,GAC9B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EACL,WAAW,EACX,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,WAAW,GACjB,MAAM,eAAe,CAAC;AACvB,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -313,7 +313,6 @@ function defaultConfig(modelContextLimit, overrides = {}) {
|
|
|
313
313
|
},
|
|
314
314
|
promotionThreshold: 5,
|
|
315
315
|
truncate: { threshold: 1 },
|
|
316
|
-
merge: { maxSummaryLength: 3e3, minOldGenBlocks: 3 },
|
|
317
316
|
compress: {
|
|
318
317
|
minCompressRange: 5e3,
|
|
319
318
|
maxSummaryLength: 2e4,
|
|
@@ -330,7 +329,6 @@ function defaultConfig(modelContextLimit, overrides = {}) {
|
|
|
330
329
|
tiers: { ...base.tiers, ...overrides.tiers },
|
|
331
330
|
nudge: { ...base.nudge, ...overrides.nudge },
|
|
332
331
|
truncate: { ...base.truncate, ...overrides.truncate },
|
|
333
|
-
merge: { ...base.merge, ...overrides.merge },
|
|
334
332
|
compress: { ...base.compress, ...overrides.compress }
|
|
335
333
|
};
|
|
336
334
|
}
|
|
@@ -350,12 +348,6 @@ function validateConfig(config) {
|
|
|
350
348
|
if (config.truncate.threshold <= 0 || config.truncate.threshold > 1) {
|
|
351
349
|
errors.push("truncate.threshold must be in (0, 1]");
|
|
352
350
|
}
|
|
353
|
-
if (config.merge.maxSummaryLength < 1) {
|
|
354
|
-
errors.push("merge.maxSummaryLength must be >= 1");
|
|
355
|
-
}
|
|
356
|
-
if (config.merge.minOldGenBlocks < 1) {
|
|
357
|
-
errors.push("merge.minOldGenBlocks must be >= 1");
|
|
358
|
-
}
|
|
359
351
|
for (const tier of [config.tiers.tier2Trigger, config.tiers.tier3Trigger]) {
|
|
360
352
|
if (tier < 1) errors.push("tier triggers must be >= 1");
|
|
361
353
|
}
|
|
@@ -554,74 +546,6 @@ function hideConsumedCompressCalls(state, messages) {
|
|
|
554
546
|
return { messages: result, hidden };
|
|
555
547
|
}
|
|
556
548
|
|
|
557
|
-
// src/merge.ts
|
|
558
|
-
function numericPart(blockId) {
|
|
559
|
-
const match = /^b(\d+)$/.exec(blockId);
|
|
560
|
-
return match && match[1] !== void 0 ? Number(match[1]) : 0;
|
|
561
|
-
}
|
|
562
|
-
function truncateMergedSummary(merged, maxLength) {
|
|
563
|
-
if (merged.length <= maxLength) return merged;
|
|
564
|
-
const blocks = merged.split("\n---\n");
|
|
565
|
-
const headers = blocks.map((b) => b.split("\n")[0] ?? "").filter((h) => h.trim().length > 0);
|
|
566
|
-
const marker = "\n...\n[merged and truncated by batch cleanup]";
|
|
567
|
-
const budget = Math.max(0, maxLength - marker.length);
|
|
568
|
-
const headerJoin = headers.join("\n");
|
|
569
|
-
return headerJoin.length <= budget ? headerJoin + marker : headerJoin.slice(0, budget) + marker;
|
|
570
|
-
}
|
|
571
|
-
function mergeMarkedBlocks(state, markedIds, maxMergedLength, countTokens) {
|
|
572
|
-
const sortedIds = [...new Set(markedIds)].sort((a, b) => numericPart(a) - numericPart(b));
|
|
573
|
-
const sourceBlocks = sortedIds.map((id) => state.blocks.find((b) => b.blockId === id && b.active)).filter((b) => b !== void 0);
|
|
574
|
-
if (sourceBlocks.length < 2) {
|
|
575
|
-
return { state, mergedCount: 0, savedTokens: 0 };
|
|
576
|
-
}
|
|
577
|
-
const next = {
|
|
578
|
-
...state,
|
|
579
|
-
blocks: state.blocks.map((b) => ({ ...b }))
|
|
580
|
-
};
|
|
581
|
-
const newBlockId = allocateBlockId(next);
|
|
582
|
-
const newRunId = allocateRunId(next);
|
|
583
|
-
const bodies = sourceBlocks.map((block) => block.summary.trim());
|
|
584
|
-
const mergedSummary = truncateMergedSummary(bodies.join("\n---\n"), maxMergedLength);
|
|
585
|
-
const newSummaryTokens = countTokens(mergedSummary);
|
|
586
|
-
const effectiveMessageIds = /* @__PURE__ */ new Set();
|
|
587
|
-
const directMessageIds = /* @__PURE__ */ new Set();
|
|
588
|
-
for (const block of sourceBlocks) {
|
|
589
|
-
for (const id of block.effectiveMessageIds) effectiveMessageIds.add(id);
|
|
590
|
-
for (const id of block.directMessageIds) directMessageIds.add(id);
|
|
591
|
-
}
|
|
592
|
-
const sourceIds = sourceBlocks.map((b) => b.blockId);
|
|
593
|
-
const mergedBlock = {
|
|
594
|
-
blockId: newBlockId,
|
|
595
|
-
runId: newRunId,
|
|
596
|
-
tier: sourceBlocks.reduce((min, b) => b.tier < min ? b.tier : min, 3),
|
|
597
|
-
topic: "Batch merge cleanup",
|
|
598
|
-
summary: mergedSummary,
|
|
599
|
-
directMessageIds: [...directMessageIds],
|
|
600
|
-
effectiveMessageIds: [...effectiveMessageIds],
|
|
601
|
-
directBlockIds: [...sourceIds],
|
|
602
|
-
compressedTokens: sourceBlocks.reduce((sum, b) => sum + b.compressedTokens, 0),
|
|
603
|
-
createdAt: Date.now(),
|
|
604
|
-
survivedCount: 0,
|
|
605
|
-
generation: "old",
|
|
606
|
-
active: true
|
|
607
|
-
};
|
|
608
|
-
for (const block of next.blocks) {
|
|
609
|
-
if (sourceIds.includes(block.blockId)) block.active = false;
|
|
610
|
-
}
|
|
611
|
-
next.blocks.push(mergedBlock);
|
|
612
|
-
const sourceTokens = sourceBlocks.reduce(
|
|
613
|
-
(sum, block) => sum + countTokens(block.summary),
|
|
614
|
-
0
|
|
615
|
-
);
|
|
616
|
-
const savedTokens = Math.max(0, sourceTokens - newSummaryTokens);
|
|
617
|
-
return { state: next, mergedCount: sourceBlocks.length, savedTokens };
|
|
618
|
-
}
|
|
619
|
-
function collectOldGenBlocks(state, maxOldGenSummaryLength) {
|
|
620
|
-
return state.blocks.filter(
|
|
621
|
-
(b) => b.active && (b.generation === "old" || b.summary.length > maxOldGenSummaryLength)
|
|
622
|
-
).sort((a, b) => numericPart(a.blockId) - numericPart(b.blockId));
|
|
623
|
-
}
|
|
624
|
-
|
|
625
549
|
// src/filter/registry.ts
|
|
626
550
|
var registry = /* @__PURE__ */ new Map();
|
|
627
551
|
function registerMessageFilter(filter) {
|
|
@@ -1148,7 +1072,6 @@ function createCore(ports = {}) {
|
|
|
1148
1072
|
return [
|
|
1149
1073
|
assignRefsNode,
|
|
1150
1074
|
syncBlocksNode,
|
|
1151
|
-
mergeBlocksNode,
|
|
1152
1075
|
pruneNode,
|
|
1153
1076
|
filterNode,
|
|
1154
1077
|
hideCompressCallsNode,
|
|
@@ -1181,29 +1104,6 @@ var syncBlocksNode = {
|
|
|
1181
1104
|
return { ...io, state: synced.state };
|
|
1182
1105
|
}
|
|
1183
1106
|
};
|
|
1184
|
-
var mergeBlocksNode = {
|
|
1185
|
-
name: "merge-blocks",
|
|
1186
|
-
run(io, ctx) {
|
|
1187
|
-
const oldGen = collectOldGenBlocks(
|
|
1188
|
-
io.state,
|
|
1189
|
-
ctx.config.merge.maxSummaryLength
|
|
1190
|
-
);
|
|
1191
|
-
if (oldGen.length < ctx.config.merge.minOldGenBlocks) return io;
|
|
1192
|
-
const ids = oldGen.map((b) => b.blockId);
|
|
1193
|
-
const merged = mergeMarkedBlocks(
|
|
1194
|
-
io.state,
|
|
1195
|
-
ids,
|
|
1196
|
-
ctx.config.merge.maxSummaryLength,
|
|
1197
|
-
ctx.countTokens
|
|
1198
|
-
);
|
|
1199
|
-
if (merged.mergedCount === 0) return io;
|
|
1200
|
-
return {
|
|
1201
|
-
...io,
|
|
1202
|
-
state: merged.state,
|
|
1203
|
-
effects: { ...io.effects, mergedCount: merged.mergedCount }
|
|
1204
|
-
};
|
|
1205
|
-
}
|
|
1206
|
-
};
|
|
1207
1107
|
var pruneNode = {
|
|
1208
1108
|
name: "prune",
|
|
1209
1109
|
run(io) {
|
|
@@ -1984,7 +1884,7 @@ function findBlocksOverlappingMessages(state, messageIds) {
|
|
|
1984
1884
|
matched.push(block);
|
|
1985
1885
|
}
|
|
1986
1886
|
}
|
|
1987
|
-
return matched.sort((a, b) =>
|
|
1887
|
+
return matched.sort((a, b) => numericPart(a.blockId) - numericPart(b.blockId));
|
|
1988
1888
|
}
|
|
1989
1889
|
function findActiveAncestor(state, blockId) {
|
|
1990
1890
|
const start = state.blocks.find((b) => b.blockId === blockId);
|
|
@@ -2060,7 +1960,7 @@ function buildRestoredContentPreview(messages, beforeActiveMessageIds, state) {
|
|
|
2060
1960
|
}
|
|
2061
1961
|
return { preview: lines.join("\n"), restoredCount: restored.length };
|
|
2062
1962
|
}
|
|
2063
|
-
function
|
|
1963
|
+
function numericPart(blockId) {
|
|
2064
1964
|
const match = /^b(\d+)$/.exec(blockId);
|
|
2065
1965
|
return match && match[1] !== void 0 ? Number(match[1]) : 0;
|
|
2066
1966
|
}
|
|
@@ -2074,7 +1974,7 @@ function pct(n, total) {
|
|
|
2074
1974
|
if (n <= 0 || total <= 0) return 0;
|
|
2075
1975
|
return Math.max(1, Math.round(n / total * 100));
|
|
2076
1976
|
}
|
|
2077
|
-
function
|
|
1977
|
+
function numericPart2(blockId) {
|
|
2078
1978
|
const match = /^b(\d+)$/.exec(blockId);
|
|
2079
1979
|
return match && match[1] !== void 0 ? Number(match[1]) : 0;
|
|
2080
1980
|
}
|
|
@@ -2134,7 +2034,7 @@ function buildStatusReport(state, messages, countTokens, options = {}) {
|
|
|
2134
2034
|
const toolFilter = options.tool;
|
|
2135
2035
|
const sort = options.sort ?? "size";
|
|
2136
2036
|
const limit = options.limit ?? 30;
|
|
2137
|
-
const activeBlocks2 = state.blocks.filter((b) => b.active).sort((a, b) =>
|
|
2037
|
+
const activeBlocks2 = state.blocks.filter((b) => b.active).sort((a, b) => numericPart2(a.blockId) - numericPart2(b.blockId));
|
|
2138
2038
|
if (scope === "compressed") {
|
|
2139
2039
|
return renderCompressedDrilldown(activeBlocks2, state, sort, limit, countTokens);
|
|
2140
2040
|
}
|
|
@@ -2268,7 +2168,7 @@ function renderCompressedDrilldown(blocks, state, sort, limit, countTokens) {
|
|
|
2268
2168
|
return lines.join("\n");
|
|
2269
2169
|
}
|
|
2270
2170
|
function buildRecap(state, blockId) {
|
|
2271
|
-
const activeBlocks2 = state.blocks.filter((b) => b.active).sort((a, b) =>
|
|
2171
|
+
const activeBlocks2 = state.blocks.filter((b) => b.active).sort((a, b) => numericPart2(a.blockId) - numericPart2(b.blockId));
|
|
2272
2172
|
if (blockId !== void 0) {
|
|
2273
2173
|
const block = state.blocks.find((b) => b.blockId === blockId);
|
|
2274
2174
|
if (!block) {
|
|
@@ -2352,6 +2252,42 @@ function extractRanges(input, callId) {
|
|
|
2352
2252
|
}
|
|
2353
2253
|
return ranges;
|
|
2354
2254
|
}
|
|
2255
|
+
|
|
2256
|
+
// src/search.ts
|
|
2257
|
+
function searchBlocks(state, query, options = {}) {
|
|
2258
|
+
const limit = options.limit ?? 10;
|
|
2259
|
+
const previewLength = options.previewLength ?? 200;
|
|
2260
|
+
const minScore = options.minScore ?? 1;
|
|
2261
|
+
const terms = query.toLowerCase().trim().split(/\s+/).filter((t) => t.length > 0);
|
|
2262
|
+
if (terms.length === 0) return [];
|
|
2263
|
+
const active = state.blocks.filter((b) => b.active);
|
|
2264
|
+
const scored = [];
|
|
2265
|
+
for (const block of active) {
|
|
2266
|
+
const text = (block.summary || "").toLowerCase();
|
|
2267
|
+
const topic = (block.topic || "").toLowerCase();
|
|
2268
|
+
const haystack = topic + " " + text;
|
|
2269
|
+
let score = 0;
|
|
2270
|
+
for (const term of terms) {
|
|
2271
|
+
score += countOccurrences2(haystack, term);
|
|
2272
|
+
}
|
|
2273
|
+
if (score >= minScore) {
|
|
2274
|
+
scored.push({
|
|
2275
|
+
blockId: block.blockId,
|
|
2276
|
+
tier: block.tier ?? 1,
|
|
2277
|
+
score,
|
|
2278
|
+
topic: block.topic ?? "(no topic)",
|
|
2279
|
+
preview: (block.summary || "").slice(0, previewLength),
|
|
2280
|
+
block
|
|
2281
|
+
});
|
|
2282
|
+
}
|
|
2283
|
+
}
|
|
2284
|
+
scored.sort((a, b) => b.score - a.score);
|
|
2285
|
+
return scored.slice(0, limit);
|
|
2286
|
+
}
|
|
2287
|
+
function countOccurrences2(haystack, needle) {
|
|
2288
|
+
if (needle.length === 0) return 0;
|
|
2289
|
+
return haystack.split(needle).length - 1;
|
|
2290
|
+
}
|
|
2355
2291
|
export {
|
|
2356
2292
|
BLOCKED_REF,
|
|
2357
2293
|
COMPRESS_PHILOSOPHY,
|
|
@@ -2370,7 +2306,6 @@ export {
|
|
|
2370
2306
|
buildRestoredContentPreview,
|
|
2371
2307
|
buildStatusReport,
|
|
2372
2308
|
clearMessageFilters,
|
|
2373
|
-
collectOldGenBlocks,
|
|
2374
2309
|
coveredMessageIds,
|
|
2375
2310
|
createBpeTokenizer,
|
|
2376
2311
|
createCore,
|
|
@@ -2391,7 +2326,6 @@ export {
|
|
|
2391
2326
|
listMessageFilters,
|
|
2392
2327
|
makeIO,
|
|
2393
2328
|
matchToolPattern,
|
|
2394
|
-
mergeMarkedBlocks,
|
|
2395
2329
|
parseBlockIdArg,
|
|
2396
2330
|
parseBoundary,
|
|
2397
2331
|
prune,
|
|
@@ -2406,6 +2340,7 @@ export {
|
|
|
2406
2340
|
resolveBoundaries,
|
|
2407
2341
|
resolveKeepMarkers,
|
|
2408
2342
|
runPipeline,
|
|
2343
|
+
searchBlocks,
|
|
2409
2344
|
syncBlocks,
|
|
2410
2345
|
truncateLargeToolOutputs,
|
|
2411
2346
|
validateConfig
|