memory-eternal 0.10.52 → 0.10.53

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memory-eternal",
3
- "version": "0.10.52",
3
+ "version": "0.10.53",
4
4
  "description": "记忆核心(Memory Eternal):自研的 DeepSeek Harness 记忆插件,不移植任何既有记忆框架——对话结束后自动沉淀知识卡到本地 Markdown Vault(自研去重、自研 CJK 检索、可 git 管理),设置页提供图形化知识库(统计 / 搜索 / 知识图谱 + 侧边栏一键弹窗),Agent 通过 memory_recall 工具按需召回历史上下文。零人工干预。",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -65,7 +65,7 @@
65
65
  "release": "node scripts/release.mjs",
66
66
  "release:dry": "node scripts/release.mjs --dry-run",
67
67
  "panel-check": "node scripts/panel-check.mjs",
68
- "test": "node build.mjs && node tests/vault.test.mjs && node tests/capture.test.mjs && node tests/capture-route.test.mjs && node tests/stall.test.mjs && node tests/vault-path.test.mjs && node tests/vault-resolve.test.mjs && node tests/minhash.test.mjs && node tests/settings-save.test.mjs && node tests/config-coverage.test.mjs && node tests/config-sync.test.mjs && node tests/config-merge.test.mjs && node tests/sse.test.mjs && node tests/api.test.mjs && node tests/import-roundtrip.test.mjs && node tests/graph-perf.test.mjs && node tests/settings-compat.test.mjs && node tests/node-bin.test.mjs && node tests/watchdog-lock.test.mjs && node tests/markdown.test.mjs && node tests/feedback.test.mjs && node tests/graph-lod.test.mjs && node tests/ssr.test.mjs && node tests/web-assets.test.mjs && node tests/manifests.test.mjs && node tests/two-store.test.mjs && node tests/noise-gate.test.mjs && node tests/e2e-recall.test.mjs && node tests/issue-fixes.test.mjs && node tests/issue-fixes-2.test.mjs && node tests/issue-fixes-3.test.mjs && node tests/watchdog-orphans.test.mjs && node tests/watchdog-restart.test.mjs && node tests/readme-i18n.test.mjs && node tests/issue-fixes-4.test.mjs && node tests/host-drain.test.mjs && node tests/e2e-host-drain.mjs && node tests/issue-fixes-5.test.mjs && node tests/issue-fixes-6.test.mjs && node tests/capture-json-repair.test.mjs && node tests/csrf-origin.test.mjs && node tests/watchdog-orphan-web.test.mjs && node tests/config-validate.test.mjs && node tests/issue-fixes-8.test.mjs && node tests/issue-fixes-9.test.mjs && node tests/release-verify.test.mjs && node tests/refine.test.mjs && node tests/db-restore.test.mjs && node tests/align.test.mjs && node tests/tags-normalize.test.mjs && node tests/resident-state.test.mjs && node tests/llm-route.test.mjs && node tests/host-managed.test.mjs && node tests/replace-claim.test.mjs && node tests/version-check-self.test.mjs && node tests/setup-codex.test.mjs && node tests/listener-netstat.test.mjs && node tests/issue-46-overlay.test.mjs && node tests/graph-initial-zoom.test.mjs && node tests/card-head-actions.test.mjs && node tests/card-reader-ux.test.mjs && node tests/tag-filter.test.mjs && node tests/ui-overflow.test.mjs && node tests/version-card-state.test.mjs && node tests/llm-routes-proxy.test.mjs && node tests/model-strikes.test.mjs && node tests/support-bundle.test.mjs"
68
+ "test": "node build.mjs && node tests/vault.test.mjs && node tests/capture.test.mjs && node tests/capture-route.test.mjs && node tests/stall.test.mjs && node tests/vault-path.test.mjs && node tests/vault-resolve.test.mjs && node tests/minhash.test.mjs && node tests/settings-save.test.mjs && node tests/config-coverage.test.mjs && node tests/config-sync.test.mjs && node tests/config-merge.test.mjs && node tests/sse.test.mjs && node tests/api.test.mjs && node tests/import-roundtrip.test.mjs && node tests/graph-perf.test.mjs && node tests/settings-compat.test.mjs && node tests/node-bin.test.mjs && node tests/watchdog-lock.test.mjs && node tests/markdown.test.mjs && node tests/feedback.test.mjs && node tests/graph-lod.test.mjs && node tests/ssr.test.mjs && node tests/web-assets.test.mjs && node tests/manifests.test.mjs && node tests/two-store.test.mjs && node tests/noise-gate.test.mjs && node tests/e2e-recall.test.mjs && node tests/issue-fixes.test.mjs && node tests/issue-fixes-2.test.mjs && node tests/issue-fixes-3.test.mjs && node tests/watchdog-orphans.test.mjs && node tests/watchdog-restart.test.mjs && node tests/readme-i18n.test.mjs && node tests/issue-fixes-4.test.mjs && node tests/host-drain.test.mjs && node tests/e2e-host-drain.mjs && node tests/issue-fixes-5.test.mjs && node tests/issue-fixes-6.test.mjs && node tests/capture-json-repair.test.mjs && node tests/csrf-origin.test.mjs && node tests/watchdog-orphan-web.test.mjs && node tests/config-validate.test.mjs && node tests/issue-fixes-8.test.mjs && node tests/issue-fixes-9.test.mjs && node tests/release-verify.test.mjs && node tests/refine.test.mjs && node tests/db-restore.test.mjs && node tests/align.test.mjs && node tests/tags-normalize.test.mjs && node tests/resident-state.test.mjs && node tests/llm-route.test.mjs && node tests/host-managed.test.mjs && node tests/replace-claim.test.mjs && node tests/version-check-self.test.mjs && node tests/setup-codex.test.mjs && node tests/listener-netstat.test.mjs && node tests/issue-46-overlay.test.mjs && node tests/graph-initial-zoom.test.mjs && node tests/card-head-actions.test.mjs && node tests/card-reader-ux.test.mjs && node tests/tag-filter.test.mjs && node tests/ui-overflow.test.mjs && node tests/version-card-state.test.mjs && node tests/llm-routes-proxy.test.mjs && node tests/model-strikes.test.mjs && node tests/support-bundle.test.mjs && node tests/health-panel.test.mjs"
69
69
  },
70
70
  "dependencies": {
71
71
  "@deepseek-ai/schemastery": "^3.18.1"
@@ -83,6 +83,13 @@ class Cdp {
83
83
  }
84
84
 
85
85
  // 每步都跑的断言:任何「可滚动容器的 scrollWidth > clientWidth」都算横向溢出(滚动条异常)
86
+ // 页面健康:白屏 / JS 异常 = 比溢出更严重的失败(真实事故:一个 t 之外的 helper 让整页白屏,
87
+ // 而「空白页没有横向溢出」会让检查**通过** —— 所以必须先断言页面还活着)。
88
+ const PAGE_ALIVE_PROBE = `(() => {
89
+ const txt = (document.body && document.body.innerText || '').trim()
90
+ return { textLen: txt.length, hasRoot: Boolean(document.querySelector('.me-overlay, .mc-card, .mc-grid, .mc-rail')) }
91
+ })()`
92
+
86
93
  const OVERFLOW_PROBE = `(() => {
87
94
  const out = []
88
95
  const root = document.documentElement
@@ -128,17 +135,34 @@ const main = async () => {
128
135
  cdp = await Cdp.connect(target.webSocketDebuggerUrl)
129
136
  await cdp.send('Page.enable')
130
137
  await cdp.send('Runtime.enable')
138
+ // 页面抛异常 = 发布阻断项(白屏的根因就在这类异常里)
139
+ cdp.ws.addEventListener('message', (ev) => {
140
+ try {
141
+ const m = JSON.parse(ev.data)
142
+ if (m.method === 'Runtime.exceptionThrown') {
143
+ const d = (m.params && m.params.exceptionDetails) || {}
144
+ const desc = (d.exception && d.exception.description) || d.text || 'unknown'
145
+ ;(globalThis.__panelErrors ||= []).push(String(desc).split('\n')[0])
146
+ }
147
+ } catch { /* 非 JSON 消息忽略 */ }
148
+ })
131
149
  await cdp.send('Page.navigate', { url: URL_TARGET })
132
150
  await sleep(2500)
133
151
 
134
152
  const report = []
135
153
  let bad = 0
154
+ const jsErrors = []
136
155
  const step = async (label) => {
156
+ const alive = await cdp.eval(PAGE_ALIVE_PROBE)
137
157
  const over = await cdp.eval(OVERFLOW_PROBE)
138
158
  const file = path.join(OUT_DIR, label + '.png')
139
159
  await cdp.shot(file)
140
- report.push({ label, over, png: file })
141
- if (over.length) bad++
160
+ const blank = !alive || alive.textLen < 20
161
+ const entry = { label, over, png: file }
162
+ if (blank) entry.blank = true
163
+ if (alive) entry.textLen = alive.textLen
164
+ report.push(entry)
165
+ if (over.length || blank) bad++
142
166
  }
143
167
 
144
168
  await step('01-list')
@@ -147,9 +171,13 @@ const main = async () => {
147
171
  await step(String(i + 2).padStart(2, '0') + '-' + (CLICKS[i].replace(/^text=/, '').replace(/[^\w\u4e00-\u9fa5-]/g, '_') || 'step'))
148
172
  }
149
173
 
150
- console.log(JSON.stringify({ url: URL_TARGET, out: OUT_DIR, steps: report, overflowSteps: bad }, null, 2))
151
- if (bad) { console.error('✗ 有 ' + bad + ' 个步骤存在横向溢出(见上方 over 列表)'); process.exitCode = 1 }
152
- else console.log('✓ 全部步骤无横向溢出')
174
+ const pageErrors = globalThis.__panelErrors || []
175
+ console.log(JSON.stringify({ url: URL_TARGET, out: OUT_DIR, steps: report, badSteps: bad, pageErrors }, null, 2))
176
+ if (bad || pageErrors.length) {
177
+ if (bad) console.error('✗ ' + bad + ' 个步骤不合格:横向溢出或白屏(见 steps 里的 over / blank)')
178
+ if (pageErrors.length) console.error('✗ 页面抛出 ' + pageErrors.length + ' 个异常:' + pageErrors.slice(0, 3).join(' | '))
179
+ process.exitCode = 1
180
+ } else console.log('✓ 全部步骤:页面存活、无横向溢出、无 JS 异常')
153
181
  } finally {
154
182
  try { cdp && cdp.ws.close() } catch { /* 无所谓 */ }
155
183
  try { child.kill() } catch { /* 已经退出 */ }