Skip to content

Releases

v1.8.2

Choose a tag to compare

@BR-PC BR-PC released this 14 Nov 21:01

1.8.2

  • 定位:优先等目标会话真正上屏(chatSnapshot)再动 DOM;归档会话先 unarchiveSession 再打开,避免“定位成功后弹回新会话页”
  • 定位:会话未真正显示时不再谎报「已定位并高亮」
  • 定位:按距离大跳滚动,远端轮次不再原地打转;loadThrough 复查覆盖范围
  • 定位:上下文注入只匹配 context 行,不再落到同轮的用户气泡
  • 搜索:开启长文时改为内联扫描,避免把大语料克隆进 Worker(5.8s → 亚秒)
  • 索引:INDEX_VERSION=5,旧分片强制重建,分类修复才会真正生效
  • 界面:「清空全部」改为可见按钮;长文单独成行;面板不透明
  • 测试:新增 run-tests.mjs,按退出码判定,任一失败整体非 0

v1.8.1

Choose a tag to compare

@BR-PC BR-PC released this 14 Nov 16:53

1.8.1

修复

  • 历史记录:每次搜索立刻出现新条目(索引还在补时也记行,只是不留快照;点开走真实搜索,不会回放半页)
  • 历史列表改为「左侧关键词 + 右侧筛选胶囊」自适应布局,文字不再越界
  • 新增「清空全部」:同时删除历史行、关联的结果页快照与内存中的结果页

测试

  • 新增 test-history.mjs:建行、同筛选更新同一条、换筛选独立成条、清空连带快照与内存页、重载后仍为空

v1.8.0

Choose a tag to compare

@BR-PC BR-PC released this 14 Nov 16:53

1.8.0

修复:定位

  • 消息节点 key 失效(会话被压缩 / 重新编号)时,改为按命中文本定位:先在本轮已挂载行里找,再在全量已挂载行里找;只落在确实包含该文本的行,不会拿同轮邻居顶替
  • 新增第 24 个定位场景回归测试

新增:日志收集

  • 侧边栏「日志收集」:开关 + 完整日志地址 + 体积 + 复制路径 / 清空
  • diagnostics.log 每行一个 JSON(panel / search / client:jump / error),8 MB 轮转

v1.7.1

Choose a tag to compare

@BR-PC BR-PC released this 14 Nov 16:53

1.7.1

  • 修复重开后不恢复上次结果、以及一直卡在“正在检索”
  • 打开历史记录不再改写侧边栏筛选条件
  • 重建索引 / 自动索引会显示进度
  • 未建索引时也能列出工作区
  • 索引分片改为异步并行解压(320 ms → 226 ms,不阻塞界面)
  • 移除模糊设置项,目标类型改勾选,侧边栏字号加大

v1.7.0

Choose a tag to compare

@BR-PC BR-PC released this 14 Nov 16:53

1.7.0

  • 卡顿根治:删除全屏 backdrop-filter 与动画光斑、启动不建索引、面板关闭即停索引、结果分页渲染
  • 历史按筛选集独立成条并显示真实恢复耗时;换筛选命中缓存(计算后置)
  • 文件名可搜索;文件与文本分成独立候选集
  • 边索引边出结果;仅有筛选条件也能搜索
  • 长文独立索引与长文搜索
  • 工作区筛选

v1.6.1

Choose a tag to compare

@BR-PC BR-PC released this 07 Nov 17:49

• 修复以下问题

报告项 处理 测试兜底
P1 session/event 参数 取 session.id + 非字符串防御 test-events.mjs(旧代码必挂)
P1 用户输入/思考链定位 改为“最小包含 needle 的元素”通用叶子匹配,不再依赖标签名 定位场景 21 → 23(新增 div 气泡、div 思考体)
P2 读失败的会话被永久缓存为空 错误壳带 retryAt 指数退避重试 真实语料测试
P2 jump.turnOnly 缺 key 内联 ZH/EN 补齐 test-i18n.mjs(108 keys 全命中)
P2 test-anchor 常量漂移 引用 __test.MAX_CHUNKS 真实语料 21 会话 / 12 967 docs 全过(之前 4 条失败)
P2 短查询双次小写+indexOf 合并为一次扫描 core/stress
P2 同名文件跨轮去重 改为按 Turn 去重 core
P2 只删会话仍重写全部分片 空 dirty 只写 manifest 代码
P3 Worker 空数组返回 [] 数量校验 worker 测试
P3 turn:null 变 Turn 0 显式 null 判断 代码
P3 每次搜索 await 42KB 写盘 改 saveStateSoon 代码
P3 resolveSaved 丢行、total 不变 dropped 计数修正 代码
无 CI / locale 死文件 / files 里的 logo.png 加 GitHub Actions、删死文件、修 files CI

• 完整更新日志v1.5.0...v1.6.1

v1.6.0

Choose a tag to compare

@BR-PC BR-PC released this 07 Nov 16:35

• 修复了已知问题

Full Changelog: v1.6.0...v1.6.0

v1.5.0

Choose a tag to compare

@BR-PC BR-PC released this 06 Nov 17:00

首个公开版本V1.5.0发布

FlashAnchor / 闪电锚点

A DSH Web GUI plugin that searches the entire stored corpus of every session:
assistant reasoning, answer text, tool calls and results, output files, user
prompts, and input files. Clicking a hit jumps to the block that contains it
(paragraph, code fence, file card, or tool card), expands folded disclosures,
and highlights only that block.

icon

Features

  • Block anchors: every result carries {turn, step, messageId, toolCallId, blockIndex, seatIndex, blockKind, chunk}; the client computes the chat node
    key instead of guessing from text.
  • Sharded Worker pool: the thread slider (1-8) selects the number of
    worker_threads; each worker owns a slice of the corpus. A worker crash or
    OOM (256 MB heap cap) degrades to the single-threaded scan.
  • Materialized views: saved searches persist only result IDs, per-session
    sequence snapshots, and page metadata (no body text). Pages are rebuilt from
    the document index; history and snapshots share one id, so deleting a row
    drops the snapshot and its in-memory page. LRU cap: 50.
  • Near-memory search: an identical query signature returns from memory for
    60 s and aborts an in-flight request.
  • Session scope: search all sessions or one session; the selection can be
    cleared. Query already matches file names, so there is no separate suffix
    filter.
  • Appearance: adjustable frosted-glass blur/density, persisted locally.
image 展示1 展示2

Install

From this directory:

node --check index.js
node test-core.mjs
$env:npm_config_cache = "$PWD/.npm-cache"
npm pack
# install the resulting flash-anchor-*.tgz into your DSH profile's node_modules
# and add flash-anchor to the profile bundle list, then restart DSH Desktop

The Host half needs a DSH restart (the client bundle reloads with the page).

Architecture

File Role
index.js Host plugin: session surface index, search, materialized views, state
search-core.js Shared matching/scoring/snippet + doc address
search-pool.js Worker pool, sharding, OOM/timeout degradation
worker.js One corpus shard, scans on request
client.js Dialog, settings, results deck, scroll router
locale/*.json UI dictionaries

All indexing stays on the local Host. The plugin never sends queries or session
content to a network service, contains no API keys, and writes its index under
$DSH_HOME/flash-anchor/.

Tests

node test-core.mjs
node test-state.mjs
node test-prefs.mjs
node test-order.mjs
node test-worker.mjs
node --expose-gc test-memory.mjs
node test-locate.mjs
node test-anchor.mjs      # skips when no session store is present
node test-stress.mjs

Development

Designed and implemented by DeepSeek-V4.1-Flash-1017, an AI coding agent
running in DeepSeek Harness, for BR-PC. Product direction, review, and
acceptance testing were done by BR-PC. The repository contains only plugin
source and tests.

License

MIT. See LICENSE.

@BR-PC

Full Changelog: https://github.com/BR-PC/dsh-flash-anchor/commits/v1.5.0