acp-kernel 0.0.28 → 0.0.30

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.
@@ -32,6 +32,7 @@ export interface ResolvedRange {
32
32
  nestedBlockIds: string[];
33
33
  boundaryKind: BoundaryKind;
34
34
  protectedGaps: number[];
35
+ snappedBoundaries: string[];
35
36
  }
36
37
  export declare function resolveBoundaries(input: ResolveBoundariesInput): ResolvedRange;
37
38
  export declare function earliestIndexOfIds(ids: string[], indexByRawId: Map<string, number>): number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"boundaries.d.ts","sourceRoot":"","sources":["../src/boundaries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAKD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAehE;AAED;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,wBAAwB;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC;gBAGjC,IAAI,EAAE,SAAS,GAAG,UAAU,EAC5B,QAAQ,EAAE,OAAO,GAAG,KAAK,EACzB,OAAO,EAAE,MAAM;CAQlB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,GAC5B,aAAa,CAoDf;AA6DD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EAAE,EACb,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,GAAG,IAAI,CASf;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,CAMzE"}
1
+ {"version":3,"file":"boundaries.d.ts","sourceRoot":"","sources":["../src/boundaries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAKD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAehE;AAED;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,wBAAwB;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC;gBAGjC,IAAI,EAAE,SAAS,GAAG,UAAU,EAC5B,QAAQ,EAAE,OAAO,GAAG,KAAK,EACzB,OAAO,EAAE,MAAM;CAQlB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,GAC5B,aAAa,CA0Df;AA2GD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EAAE,EACb,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,GAAG,IAAI,CASf;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,CAMzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAapB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASvD,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;IACnB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;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;AAsBD,wBAAgB,UAAU,CAAC,KAAK,GAAE,KAAU,GAAG,eAAe,CAwQ7D;AAqxBD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAapB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASvD,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;IACnB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;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;AA2BD,wBAAgB,UAAU,CAAC,KAAK,GAAE,KAAU,GAAG,eAAe,CAyR7D;AAqxBD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -29,6 +29,7 @@ export type { RenderStrategy } from "./render-refs.js";
29
29
  export { resolveTransformChannel } from "./transform-channel.js";
30
30
  export type { TransformChannel } from "./transform-channel.js";
31
31
  export { searchBlocks, searchBlocksAsync, blockDocs, messageDocs } from "./search.js";
32
+ export { clearDocFeatures, docCacheInfo, docFeatures, setDocCacheCap } from "./search.js";
32
33
  export type { SearchResult, SearchOptions, SearchAlgorithm, AsyncSearchAlgorithm, AnySearchAlgorithm, SearchDoc, SearchDocKind, ScoredBlock, MessageRole, RoleWeights, MessageInput } from "./search.js";
33
34
  export { DEFAULT_ALGORITHM, DEFAULT_ROLE_WEIGHTS, registerSearchAlgorithm, getSearchAlgorithm, listSearchAlgorithms } from "./search.js";
34
35
  export { isMessageProtected, matchToolPattern } from "./protected.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -442,8 +442,13 @@ function resolveBoundaries(input) {
442
442
  input.messages.forEach(
443
443
  (message, index) => indexByRawId.set(message.id, index)
444
444
  );
445
- let startIndex = resolveAnchorIndex(start, input.state, indexByRawId, "start");
446
- let endIndex = resolveAnchorIndex(end, input.state, indexByRawId, "end");
445
+ let snappedBoundaries = [];
446
+ const startAnchor = resolveAnchorIndex(start, input.state, indexByRawId, "start");
447
+ if (startAnchor.snapped) snappedBoundaries.push(startAnchor.snapped);
448
+ const endAnchor = resolveAnchorIndex(end, input.state, indexByRawId, "end");
449
+ if (endAnchor.snapped) snappedBoundaries.push(endAnchor.snapped);
450
+ let startIndex = startAnchor.index;
451
+ let endIndex = endAnchor.index;
447
452
  if (startIndex > endIndex) {
448
453
  [startIndex, endIndex] = [endIndex, startIndex];
449
454
  }
@@ -471,7 +476,8 @@ function resolveBoundaries(input) {
471
476
  messageIds,
472
477
  nestedBlockIds,
473
478
  boundaryKind,
474
- protectedGaps
479
+ protectedGaps,
480
+ snappedBoundaries
475
481
  };
476
482
  }
477
483
  function resolveAnchorIndex(boundary, state, indexByRawId, endpoint) {
@@ -486,14 +492,21 @@ function resolveAnchorIndex(boundary, state, indexByRawId, endpoint) {
486
492
  );
487
493
  }
488
494
  const index = indexByRawId.get(rawId);
489
- if (index === void 0) {
490
- throw new BoundaryNotFoundError(
491
- "consumed",
492
- endpoint,
493
- `${label}="${boundary.raw}" not found in visible context (likely consumed by an existing block).`
494
- );
495
+ if (index !== void 0) {
496
+ return { index, snapped: null };
497
+ }
498
+ const owner2 = activeOwnerAnchor(state, [rawId], indexByRawId);
499
+ if (owner2 !== null) {
500
+ return {
501
+ index: owner2,
502
+ snapped: `${label}="${boundary.raw}" refers to a message already compressed into an active block \u2014 anchored to that block's summary instead.`
503
+ };
495
504
  }
496
- return index;
505
+ throw new BoundaryNotFoundError(
506
+ "consumed",
507
+ endpoint,
508
+ `${label}="${boundary.raw}" not found in visible context (likely consumed by an existing block).`
509
+ );
497
510
  }
498
511
  const block = blockById(state, `b${boundary.numericId}`);
499
512
  if (!block) {
@@ -503,6 +516,19 @@ function resolveAnchorIndex(boundary, state, indexByRawId, endpoint) {
503
516
  `${label}="b${boundary.numericId}" does not exist in this session (typo or wrong session) \u2014 run acp_status for current refs.`
504
517
  );
505
518
  }
519
+ if (block.active) {
520
+ const anchor = earliestIndexOfIds(block.effectiveMessageIds, indexByRawId);
521
+ if (anchor !== null) {
522
+ return { index: anchor, snapped: null };
523
+ }
524
+ }
525
+ const owner = activeOwnerAnchor(state, block.effectiveMessageIds, indexByRawId);
526
+ if (owner !== null) {
527
+ return {
528
+ index: owner,
529
+ snapped: `${label}="b${boundary.numericId}" was consumed by a higher-tier block \u2014 anchored to the active block covering its content instead.`
530
+ };
531
+ }
506
532
  if (!block.active) {
507
533
  throw new BoundaryNotFoundError(
508
534
  "consumed",
@@ -510,15 +536,26 @@ function resolveAnchorIndex(boundary, state, indexByRawId, endpoint) {
510
536
  `${label}="b${boundary.numericId}" not found in visible context (block distilled/consumed by a higher-tier block).`
511
537
  );
512
538
  }
513
- const anchor = earliestIndexOfIds(block.effectiveMessageIds, indexByRawId);
514
- if (anchor === null) {
515
- throw new BoundaryNotFoundError(
516
- "consumed",
517
- endpoint,
518
- `${label}="b${boundary.numericId}" not found in visible context (block messages consumed by a higher-tier block).`
519
- );
539
+ throw new BoundaryNotFoundError(
540
+ "consumed",
541
+ endpoint,
542
+ `${label}="b${boundary.numericId}" not found in visible context (block messages consumed by a higher-tier block).`
543
+ );
544
+ }
545
+ function activeOwnerAnchor(state, ownedIds, indexByRawId) {
546
+ if (ownedIds.length === 0) return null;
547
+ const owned = new Set(ownedIds);
548
+ let best = null;
549
+ for (const block of state.blocks) {
550
+ if (!block.active) continue;
551
+ const anchor = earliestIndexOfIds(block.effectiveMessageIds, indexByRawId);
552
+ if (anchor === null) continue;
553
+ const ownsContent = block.effectiveMessageIds.some((id) => owned.has(id));
554
+ if (ownsContent && (best === null || anchor < best)) {
555
+ best = anchor;
556
+ }
520
557
  }
521
- return anchor;
558
+ return best;
522
559
  }
523
560
  function formatPaddedRef(index) {
524
561
  return `m${String(index).padStart(5, "0")}`;
@@ -1185,6 +1222,10 @@ function runPipeline(nodes, initial, ctx) {
1185
1222
  function rangeError(spec, message) {
1186
1223
  return `range ${spec.startRef}..${spec.endRef}: ${message}`;
1187
1224
  }
1225
+ function numericBlockId(id) {
1226
+ const parsed = /^b(\d+)$/.exec(id);
1227
+ return parsed ? Number(parsed[1]) : 0;
1228
+ }
1188
1229
  function createCore(ports = {}) {
1189
1230
  const countTokens = ports.countTokens ?? defaultCountTokens;
1190
1231
  function applyCompression(input) {
@@ -1230,6 +1271,12 @@ function createCore(ports = {}) {
1230
1271
  }
1231
1272
  }
1232
1273
  }
1274
+ let resolvableCount = 0;
1275
+ let unknownCount = 0;
1276
+ for (const resolution of classifications.values()) {
1277
+ if (resolution.status === "ok") resolvableCount++;
1278
+ else if (resolution.status === "unknown") unknownCount++;
1279
+ }
1233
1280
  const rangeIndexSets = [];
1234
1281
  for (const [spec, resolution] of classifications) {
1235
1282
  if (resolution.status !== "ok") continue;
@@ -1274,7 +1321,9 @@ function createCore(ports = {}) {
1274
1321
  }
1275
1322
  }
1276
1323
  if (!hasBlockBoundaryRange && totalRangeChars < input.config.compress.minCompressRange) {
1277
- const gateMessage = consumedRanges.length > 0 ? `Requested range(s) already compressed (e.g. ${consumedRanges[0].startRef}..${consumedRanges[0].endRef}); remaining compressible content ${totalRangeChars} chars < min ${input.config.compress.minCompressRange}. Nothing to do \u2014 run acp_status to see current compressible ranges.` : `Total compressible content too small (${totalRangeChars} chars across ${countedRanges} range(s), min ${input.config.compress.minCompressRange}). Combine more messages into your range(s) to meet the threshold.`;
1324
+ const live = activeBlocks(state).map((b) => b.blockId).sort((x, y) => numericBlockId(x) - numericBlockId(y));
1325
+ const liveHint = live.length > 0 ? ` Current active blocks span ${live[0]}..${live[live.length - 1]} \u2014 retry with startId/endId set to active block IDs in that span.` : "";
1326
+ const gateMessage = resolvableCount === 0 && consumedRanges.length === 0 && unknownCount > 0 ? `None of the ${input.ranges.length} requested range(s) resolved \u2014 every ref failed with "does not exist in this session". Refs recorded before an earlier compress are stale: each successful compress renumbers the remaining refs. Run acp_status, then re-issue the compress in the same turn using only the refs it reports.` : consumedRanges.length > 0 ? `Requested range(s) already compressed (e.g. ${consumedRanges[0].startRef}..${consumedRanges[0].endRef}); remaining compressible content ${totalRangeChars} chars < min ${input.config.compress.minCompressRange}. Nothing to do.${liveHint}` : `Total compressible content too small (${totalRangeChars} chars across ${countedRanges} range(s), min ${input.config.compress.minCompressRange}). Combine more messages into your range(s) to meet the threshold.`;
1278
1327
  return {
1279
1328
  state: input.state,
1280
1329
  result: {
@@ -1300,6 +1349,7 @@ function createCore(ports = {}) {
1300
1349
  errors.push(rangeError(spec, resolution.error.message));
1301
1350
  continue;
1302
1351
  }
1352
+ warnings.push(...resolution.resolved.snappedBoundaries);
1303
1353
  try {
1304
1354
  const outcome = applySingleRange({
1305
1355
  spec,
@@ -2705,26 +2755,6 @@ function resolveTransformChannel(explicit, wireViable) {
2705
2755
  return explicit ?? (wireViable ? "wire" : "message");
2706
2756
  }
2707
2757
 
2708
- // src/search/algorithms/substring.ts
2709
- var substringAlgorithm = {
2710
- name: "substring",
2711
- description: "Exact substring counting (original baseline). Predictable, no normalization.",
2712
- score(docs, query) {
2713
- const terms = query.toLowerCase().trim().split(/\s+/).filter((t) => t.length > 0);
2714
- if (terms.length === 0) return docs.map((d) => ({ ref: d.ref, score: 0 }));
2715
- return docs.map((d) => {
2716
- const haystack = d.text.toLowerCase();
2717
- let score = 0;
2718
- for (const term of terms) score += countOccurrences2(haystack, term);
2719
- return { ref: d.ref, score };
2720
- });
2721
- }
2722
- };
2723
- function countOccurrences2(haystack, needle) {
2724
- if (!needle) return 0;
2725
- return haystack.split(needle).length - 1;
2726
- }
2727
-
2728
2758
  // src/search/stemmer.ts
2729
2759
  function stem(word) {
2730
2760
  let w = word;
@@ -2746,8 +2776,17 @@ function stem(word) {
2746
2776
 
2747
2777
  // src/search/tokenizer.ts
2748
2778
  var CJK = /[\u3400-\u9fff\uf900-\ufaff\u3040-\u30ff\uac00-\ud7af]/;
2749
- var CJK_RUN = new RegExp(`${CJK.source}+`, "g");
2750
2779
  var LATIN_WORD = /[a-z][a-z0-9_]*[a-z0-9]|[a-z0-9]/g;
2780
+ var cjkSegmenter = new Intl.Segmenter("zh", { granularity: "word" });
2781
+ function cjkRunTokens(segs) {
2782
+ const words = segs.filter((w) => w.length >= 2);
2783
+ if (words.length > 0) return words;
2784
+ const run = segs.join("");
2785
+ const out = [];
2786
+ for (let i = 0; i < run.length - 1; i++) out.push(run.slice(i, i + 2));
2787
+ for (const ch of run) out.push(ch);
2788
+ return out;
2789
+ }
2751
2790
  function tokenize(text, opts = {}) {
2752
2791
  const lower = text.toLowerCase();
2753
2792
  const tokens = [];
@@ -2758,15 +2797,23 @@ function tokenize(text, opts = {}) {
2758
2797
  tokens.push(w);
2759
2798
  }
2760
2799
  }
2761
- const cjkRuns = lower.match(CJK_RUN) ?? [];
2762
- for (const run of cjkRuns) {
2763
- if (run.length === 1) {
2764
- tokens.push(run);
2765
- } else {
2766
- for (let i = 0; i < run.length - 1; i++) tokens.push(run.slice(i, i + 2));
2767
- for (const ch of run) tokens.push(ch);
2800
+ if (!CJK.test(lower)) return tokens;
2801
+ const runSegs = [];
2802
+ let cur = null;
2803
+ for (const s of cjkSegmenter.segment(lower)) {
2804
+ const t = s.segment;
2805
+ if (t.length === 0) continue;
2806
+ if (CJK.test(t)) {
2807
+ (cur ??= []).push(t);
2808
+ } else if (cur) {
2809
+ runSegs.push(cur);
2810
+ cur = null;
2768
2811
  }
2769
2812
  }
2813
+ if (cur) runSegs.push(cur);
2814
+ for (const segs of runSegs) {
2815
+ tokens.push(...cjkRunTokens(segs));
2816
+ }
2770
2817
  return tokens;
2771
2818
  }
2772
2819
  function charBigrams(text) {
@@ -2783,6 +2830,69 @@ function tfMap(text, stem2) {
2783
2830
  return m;
2784
2831
  }
2785
2832
 
2833
+ // src/search/doc-cache.ts
2834
+ var DEFAULT_CAP_CHARS = 8 * 1024 * 1024;
2835
+ var capChars = DEFAULT_CAP_CHARS;
2836
+ var cache = /* @__PURE__ */ new Map();
2837
+ var cachedChars = 0;
2838
+ function build(text) {
2839
+ const tf = tfMap(text, true);
2840
+ let len = 0;
2841
+ for (const v of tf.values()) len += v;
2842
+ const lower = text.toLowerCase();
2843
+ return { tf, len, lower, grams: new Set(charBigrams(lower)) };
2844
+ }
2845
+ function docFeatures(text) {
2846
+ const hit = cache.get(text);
2847
+ if (hit) return hit;
2848
+ const f = build(text);
2849
+ if (text.length > 0 && text.length <= capChars) {
2850
+ while (cachedChars + text.length > capChars && cache.size > 0) {
2851
+ const k = cache.keys().next().value;
2852
+ cachedChars -= k.length;
2853
+ cache.delete(k);
2854
+ }
2855
+ cache.set(text, f);
2856
+ cachedChars += text.length;
2857
+ }
2858
+ return f;
2859
+ }
2860
+ function clearDocFeatures() {
2861
+ cache.clear();
2862
+ cachedChars = 0;
2863
+ }
2864
+ function setDocCacheCap(chars) {
2865
+ capChars = Math.max(1, chars);
2866
+ while (cachedChars > capChars && cache.size > 0) {
2867
+ const k = cache.keys().next().value;
2868
+ cachedChars -= k.length;
2869
+ cache.delete(k);
2870
+ }
2871
+ }
2872
+ function docCacheInfo() {
2873
+ return { entries: cache.size, chars: cachedChars };
2874
+ }
2875
+
2876
+ // src/search/algorithms/substring.ts
2877
+ var substringAlgorithm = {
2878
+ name: "substring",
2879
+ description: "Exact substring counting (original baseline). Predictable, no normalization.",
2880
+ score(docs, query) {
2881
+ const terms = query.toLowerCase().trim().split(/\s+/).filter((t) => t.length > 0);
2882
+ if (terms.length === 0) return docs.map((d) => ({ ref: d.ref, score: 0 }));
2883
+ return docs.map((d) => {
2884
+ const haystack = docFeatures(d.text).lower;
2885
+ let score = 0;
2886
+ for (const term of terms) score += countOccurrences2(haystack, term);
2887
+ return { ref: d.ref, score };
2888
+ });
2889
+ }
2890
+ };
2891
+ function countOccurrences2(haystack, needle) {
2892
+ if (!needle) return 0;
2893
+ return haystack.split(needle).length - 1;
2894
+ }
2895
+
2786
2896
  // src/search/algorithms/bm25.ts
2787
2897
  var bm25Algorithm = {
2788
2898
  name: "bm25",
@@ -2792,11 +2902,8 @@ var bm25Algorithm = {
2792
2902
  const k1 = 1.2;
2793
2903
  const b = 0.75;
2794
2904
  const parsed = docs.map((d) => {
2795
- const text = d.text;
2796
- const tf = tfMap(text, true);
2797
- let len = 0;
2798
- for (const v of tf.values()) len += v;
2799
- return { id: d.ref, tf, len };
2905
+ const f = docFeatures(d.text);
2906
+ return { id: d.ref, tf: f.tf, len: f.len };
2800
2907
  });
2801
2908
  const avgdl = parsed.reduce((s, d) => s + d.len, 0) / (N || 1);
2802
2909
  const qTerms = tokenize(query, { stem: true });
@@ -2825,14 +2932,13 @@ var fuzzyAlgorithm = {
2825
2932
  name: "fuzzy",
2826
2933
  description: "Character bigram overlap. Typo-tolerant, script-agnostic, high recall.",
2827
2934
  score(docs, query) {
2828
- const qTokens = query.toLowerCase().split(/[\s,]+/).filter((t) => t.length >= 4);
2935
+ const qTokens = query.toLowerCase().split(/[\s,]+/).filter((t) => t.length >= 4 || t.length >= 2 && CJK.test(t));
2829
2936
  if (qTokens.length === 0) return docs.map((d) => ({ ref: d.ref, score: 0 }));
2830
2937
  const qGrams = /* @__PURE__ */ new Set();
2831
2938
  for (const t of qTokens) for (const g of charBigrams(t)) qGrams.add(g);
2832
2939
  if (qGrams.size === 0) return docs.map((d) => ({ ref: d.ref, score: 0 }));
2833
2940
  return docs.map((d) => {
2834
- const haystack = d.text.toLowerCase();
2835
- const docGrams = new Set(charBigrams(haystack));
2941
+ const docGrams = docFeatures(d.text).grams;
2836
2942
  let hits = 0;
2837
2943
  for (const g of qGrams) if (docGrams.has(g)) hits++;
2838
2944
  return { ref: d.ref, score: hits / qGrams.size };
@@ -3006,6 +3112,7 @@ export {
3006
3112
  buildRecap,
3007
3113
  buildRestoredContentPreview,
3008
3114
  buildStatusReport,
3115
+ clearDocFeatures,
3009
3116
  clearMessageFilters,
3010
3117
  collectBlockContent,
3011
3118
  coveredMessageIds,
@@ -3017,6 +3124,8 @@ export {
3017
3124
  defaultConfig,
3018
3125
  defaultCountTokens,
3019
3126
  defaultPrompts,
3127
+ docCacheInfo,
3128
+ docFeatures,
3020
3129
  emptyRefMap,
3021
3130
  estimateTokensFast,
3022
3131
  findActiveAncestor,
@@ -3052,6 +3161,7 @@ export {
3052
3161
  runPipeline,
3053
3162
  searchBlocks,
3054
3163
  searchBlocksAsync,
3164
+ setDocCacheCap,
3055
3165
  syncBlocks,
3056
3166
  truncateLargeToolOutputs,
3057
3167
  validateConfig