@memorax/memorax-code 0.1.6 → 0.1.8

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.
Files changed (70) hide show
  1. package/README.md +36 -5
  2. package/bin/memorax-code-setup.mjs +0 -3
  3. package/docs/configuration.md +1 -3
  4. package/docs/troubleshooting.md +27 -8
  5. package/lib/memorax-code-backend/dist/app/backend-server.js +2 -29
  6. package/lib/memorax-code-backend/dist/app/memory-observability.js +1 -4
  7. package/lib/memorax-code-backend/dist/app/state.js +1 -12
  8. package/lib/memorax-code-backend/dist/clients/claude/transcript-turn.js +0 -182
  9. package/lib/memorax-code-backend/dist/clients/opencode/message-turn.js +68 -2
  10. package/lib/memorax-code-backend/dist/lifecycle/backend/service.js +1 -5
  11. package/lib/memorax-code-backend/dist/lifecycle/orchestrator.js +1 -14
  12. package/lib/memorax-code-backend/dist/memory/automatic-writeback.js +8 -5
  13. package/lib/memorax-code-backend/dist/memory/project.js +4 -26
  14. package/lib/memorax-code-backend/dist/memory/quota-notice.js +79 -19
  15. package/lib/memorax-code-backend/dist/provider/memorax/adapter.js +1 -4
  16. package/lib/memorax-code-backend/dist/provider/memorax/http.js +0 -28
  17. package/lib/memorax-code-backend/dist/transport/http/request.js +1 -39
  18. package/lib/memorax-code-backend/package.json +2 -3
  19. package/lib/memorax-code-claude-adapter/.claude-plugin/plugin.json +1 -1
  20. package/lib/memorax-code-claude-adapter/hooks/runtime-shell.json +1 -1
  21. package/lib/memorax-code-claude-adapter/package.json +1 -1
  22. package/lib/memorax-code-claude-adapter/skills/memorax-code/SKILL.md +0 -6
  23. package/lib/memorax-code-claude-adapter/skills/memorax-code/references/memorax-add.md +1 -1
  24. package/lib/memorax-code-claude-adapter/skills/memorax-code/references/memorax-search.md +1 -1
  25. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/.claude-plugin/plugin.json +1 -1
  26. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/runtime-shell.json +1 -1
  27. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/package.json +1 -1
  28. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/SKILL.md +0 -6
  29. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/memorax-add.md +1 -1
  30. package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/memorax-search.md +1 -1
  31. package/lib/memorax-code-codex-adapter/.codex-plugin/plugin.json +1 -1
  32. package/lib/memorax-code-codex-adapter/hooks/runtime-shell.json +1 -1
  33. package/lib/memorax-code-codex-adapter/package.json +1 -1
  34. package/lib/memorax-code-codex-adapter/skills/memorax-code/SKILL.md +0 -6
  35. package/lib/memorax-code-codex-adapter/skills/memorax-code/references/memorax-add.md +1 -1
  36. package/lib/memorax-code-codex-adapter/skills/memorax-code/references/memorax-search.md +1 -1
  37. package/lib/memorax-code-dsh-adapter/package.json +1 -1
  38. package/lib/memorax-code-dsh-adapter/skills/memorax-code/SKILL.md +0 -6
  39. package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/memorax-add.md +1 -1
  40. package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/memorax-search.md +1 -1
  41. package/lib/memorax-code-opencode-adapter/package.json +1 -1
  42. package/lib/memorax-code-opencode-adapter/skills/memorax-code/SKILL.md +0 -6
  43. package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/memorax-add.md +1 -1
  44. package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/memorax-search.md +1 -1
  45. package/lib/memorax-code-opencode-adapter/src/plugin.mjs +121 -16
  46. package/lib/memorax-code-opencode-adapter/src/repo-memory-server-runner.mjs +2 -0
  47. package/lib/package-transition.mjs +4 -3
  48. package/package.json +1 -1
  49. package/lib/memorax-code-backend/dist/clients/codex/effective-prompt.js +0 -54
  50. package/lib/memorax-code-backend/dist/memory/writeback-reconciler.js +0 -244
  51. package/lib/memorax-code-backend/dist/memory/writeback-task-projection.js +0 -377
  52. package/lib/memorax-code-backend/dist/repository/readiness.js +0 -188
  53. package/lib/memorax-code-backend/dist/shared/incremental-jsonl-projection.js +0 -271
  54. package/lib/memorax-code-backend/dist/viewer/history/claude-transcript.js +0 -648
  55. package/lib/memorax-code-backend/dist/viewer/history/session-title.js +0 -93
  56. package/lib/memorax-code-backend/dist/viewer/http/public-routes.js +0 -146
  57. package/lib/memorax-code-backend/dist/viewer/model.js +0 -1
  58. package/lib/memorax-code-backend/dist/viewer/projection/activity.js +0 -113
  59. package/lib/memorax-code-backend/dist/viewer/projection/cache.js +0 -69
  60. package/lib/memorax-code-backend/dist/viewer/projection/event-identity.js +0 -3
  61. package/lib/memorax-code-backend/dist/viewer/projection/history.js +0 -79
  62. package/lib/memorax-code-backend/dist/viewer/projection/observability.js +0 -8
  63. package/lib/memorax-code-backend/dist/viewer/projection/redaction.js +0 -52
  64. package/lib/memorax-code-backend/dist/viewer/projection/turn-reference.js +0 -12
  65. package/lib/memorax-code-backend/dist/viewer/projection/user.js +0 -168
  66. package/lib/memorax-code-backend/dist/viewer/projection/writeback-status.js +0 -97
  67. package/lib/memorax-code-backend/dist/viewer/store.js +0 -991
  68. package/lib/memorax-code-backend/dist/viewer/ui/icon.js +0 -1
  69. package/lib/memorax-code-backend/dist/viewer/ui/logo.js +0 -1
  70. package/lib/memorax-code-backend/dist/viewer/ui/user-html.js +0 -117
@@ -1 +0,0 @@
1
- export const MEMORAX_ICON_DATA_URL = "data:image/png;base64,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";
@@ -1 +0,0 @@
1
- export const MEMORAX_LOGO_DATA_URL = "data:image/png;base64,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";
@@ -1,117 +0,0 @@
1
- export function memoryViewerUserHtml() {
2
- return `<!doctype html>
3
- <html lang="en" data-theme="light">
4
- <head>
5
- <meta charset="utf-8">
6
- <meta name="viewport" content="width=device-width,initial-scale=1">
7
- <meta name="theme-color" content="#f7f8fc">
8
- <link rel="icon" type="image/png" sizes="64x64" href="/memory-viewer/favicon.png">
9
- <title>MemoraX Code Memory Viewer</title>
10
- <script>
11
- const THEME_STORAGE_KEY='memorax-code-memory-viewer-theme',LANGUAGE_STORAGE_KEY='memorax-code-memory-viewer-language';
12
- function readPreference(key,allowed,fallback){try{const value=localStorage.getItem(key);return allowed.includes(value)?value:fallback}catch{return fallback}}
13
- function writePreference(key,value){try{localStorage.setItem(key,value)}catch{}}
14
- let theme=readPreference(THEME_STORAGE_KEY,['light','dark'],'light'),language=readPreference(LANGUAGE_STORAGE_KEY,['zh','en'],'en');
15
- document.documentElement.dataset.theme=theme;
16
- document.documentElement.lang=language==='en'?'en':'zh-CN';
17
- document.querySelector('meta[name="theme-color"]').content=theme==='dark'?'#10121a':'#f7f8fc';
18
- window.addEventListener('DOMContentLoaded',()=>{
19
- const E=id=>document.getElementById(id),project=E('project'),clientSelect=E('client-select'),bootstrapUrl=new URL(location.href),params=bootstrapUrl.searchParams;
20
- if(params.has('token')){bootstrapUrl.searchParams.delete('token');history.replaceState(null,'',bootstrapUrl)}
21
- const requestedClient=(params.get('client')||'').toLowerCase();
22
- let selected=params.get('projectId')||'',client=['claude','claude-code','cc'].includes(requestedClient)?'claude-code':['dsh','opencode'].includes(requestedClient)?requestedClient:'codex',controller,lastBody=null,connectionState=null;
23
- const esc=value=>String(value??'').replace(/[&<>"']/g,char=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[char]));
24
- const COPY={
25
- zh:{
26
- pageTitle:'MemoraX Code 记忆概览',productName:'Memory Viewer',clientGroup:'选择客户端',refresh:'刷新记忆活动',languageSwitch:'Switch to English',themeDark:'切换为深色模式',themeLight:'切换为浅色模式',
27
- connecting:'正在连接',connected:'已连接',disconnected:'连接中断',updated:'· 刚刚更新',
28
- eyebrow:'记忆概览',heading:'记忆使用情况',intro:'快速了解客户端会话如何使用项目记忆,以及仓库知识是否已经准备就绪。',scopeLabel:'查看范围',projectAria:'选择仓库',allProjects:'全部仓库',summaryAria:'记忆摘要',
29
- cardTurns:'会话',cardSearch:'搜索',cardAdd:'写入',cardRepo:'仓库记忆',loading:'正在加载',checking:'正在检查',repoLoading:'仓库知识状态',recentActivity:'最近活动',
30
- empty:'当前范围还没有会话、搜索或写入活动',error:'暂时无法加载记忆活动,请稍后重试。',selectProject:'选择仓库',selectProjectForStatus:'选择仓库后查看状态',noProjects:'暂无可识别仓库',unassignedProject:'未归属仓库',systemActivity:'系统活动',
31
- turnNote:'轮客户端会话',searchUnit:'次搜索',addUnit:'次写入',processingUnit:'个处理中',unknownUnit:'个数量未知',activityUnit:'条',
32
- repoStates:{ready:'可用',preparing:'生成中',not_ready:'未就绪',unknown:'未知'},
33
- reasons:{usable:'仓库知识可以使用',active_job:'正在生成或更新',bundle_missing:'正在生成仓库知识',bundle_missing_idle:'仓库知识尚未初始化',bundle_invalid:'仓库知识需要重新生成',project_unresolved:'无法定位仓库',validator_unavailable:'暂时无法检查'},
34
- statuses:{completed:'完成',saved:'已保存',skipped:'未写入',processing:'进行中',interrupted:'已中断',failed:'失败',unknown:'数量未知'},
35
- sources:{client:'客户端会话',assistant:'助手主动',automatic:'系统自动'}
36
- },
37
- en:{
38
- pageTitle:'MemoraX Code Memory Viewer',productName:'Memory Viewer',clientGroup:'Select client',refresh:'Refresh memory activity',languageSwitch:'切换到中文',themeDark:'Switch to dark mode',themeLight:'Switch to light mode',
39
- connecting:'Connecting',connected:'Connected',disconnected:'Disconnected',updated:'· Updated just now',
40
- eyebrow:'Memory at a glance',heading:'Memory usage',intro:'See how client sessions use project memory and whether repository knowledge is ready.',scopeLabel:'View scope',projectAria:'Select repository',allProjects:'All repositories',summaryAria:'Memory summary',
41
- cardTurns:'Turns',cardSearch:'Search',cardAdd:'Add',cardRepo:'Repo Memory',loading:'Loading',checking:'Checking',repoLoading:'Repository knowledge status',recentActivity:'Recent activity',
42
- empty:'No turn, Search, or Add activity in the current scope',error:'Memory activity is temporarily unavailable. Please try again later.',selectProject:'Select a repository',selectProjectForStatus:'Select a repository to view its status',noProjects:'No repositories found',unassignedProject:'Unassigned repository',systemActivity:'System activity',
43
- turnNote:'client turns',searchUnit:'searches',addUnit:'adds',processingUnit:'processing',unknownUnit:'with unknown counts',activityUnit:'items',
44
- repoStates:{ready:'Ready',preparing:'Generating',not_ready:'Not Ready',unknown:'Unknown'},
45
- reasons:{usable:'Repository knowledge is ready',active_job:'Generating or updating repository knowledge',bundle_missing:'Generating repository knowledge',bundle_missing_idle:'Repository knowledge has not been initialized',bundle_invalid:'Repository knowledge needs to be regenerated',project_unresolved:'Repository could not be resolved',validator_unavailable:'Status is temporarily unavailable'},
46
- statuses:{completed:'Completed',saved:'Saved',skipped:'No Add',processing:'Processing',interrupted:'Interrupted',failed:'Failed',unknown:'Count unknown'},
47
- sources:{client:'Client session',assistant:'Assistant initiated',automatic:'Automatic'}
48
- }
49
- };
50
- const icons={turn:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9"><path d="M5 6h14v10H9l-4 3z" stroke-linejoin="round"/></svg>',search:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9"><circle cx="10.5" cy="10.5" r="5.5"/><path d="m15 15 4 4" stroke-linecap="round"/></svg>',add:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9"><path d="M12 7v10M7 12h10" stroke-linecap="round"/></svg>'};
51
- const copy=()=>COPY[language],locale=()=>language==='en'?'en-US':'zh-CN',number=value=>Number(value||0).toLocaleString(locale()),date=value=>new Intl.DateTimeFormat(locale(),{month:'short',day:'numeric',hour:'2-digit',minute:'2-digit'}).format(new Date(value));
52
- function endpoint(){const next=new URL('/memory-viewer/api/summary',location.href);next.searchParams.set('client',client);if(selected)next.searchParams.set('projectId',selected);return next.pathname+next.search}
53
- function syncClient(){clientSelect.value=client}
54
- function syncStaticCopy(){const current=copy();document.title=current.pageTitle;document.documentElement.lang=language==='en'?'en':'zh-CN';document.querySelectorAll('[data-i18n]').forEach(node=>{const value=current[node.dataset.i18n];if(typeof value==='string')node.textContent=value});document.querySelectorAll('[data-i18n-aria]').forEach(node=>{const value=current[node.dataset.i18nAria];if(typeof value==='string')node.setAttribute('aria-label',value)});document.querySelectorAll('[data-i18n-title]').forEach(node=>{const value=current[node.dataset.i18nTitle];if(typeof value==='string')node.setAttribute('title',value)});E('language-toggle').textContent=language==='zh'?'EN':'中';E('language-toggle').setAttribute('aria-label',current.languageSwitch);E('language-toggle').title=current.languageSwitch;syncThemeButton()}
55
- function syncThemeButton(){const label=theme==='dark'?copy().themeLight:copy().themeDark;E('theme-toggle').setAttribute('aria-label',label);E('theme-toggle').title=label}
56
- function setTheme(next,persist=true){theme=next;document.documentElement.dataset.theme=theme;document.querySelector('meta[name="theme-color"]').content=theme==='dark'?'#10121a':'#f7f8fc';if(persist)writePreference(THEME_STORAGE_KEY,theme);syncThemeButton()}
57
- function setLanguage(next,persist=true){language=next;if(persist)writePreference(LANGUAGE_STORAGE_KEY,language);syncStaticCopy();if(lastBody)render(lastBody);if(connectionState!==null)connection(connectionState)}
58
- function syncProjects(items){const current=selected;project.innerHTML='<option value="">'+esc(copy().allProjects)+'</option>'+items.map(item=>'<option value="'+esc(item.projectId)+'">'+esc(item.projectLabel)+'</option>').join('');project.value=items.some(item=>item.projectId===current)?current:'';selected=project.value}
59
- function repoState(items){const current=copy(),target=selected?items.find(item=>item.projectId===selected):items.length===1?items[0]:null,state=target?.repoMemory||{status:'unknown',reason:'project_unresolved'},idleOpenCodeBundle=client==='opencode'&&state.reason==='bundle_missing',displayStatus=state.reason==='bundle_missing'&&!idleOpenCodeBundle?'preparing':state.status,reason=idleOpenCodeBundle?'bundle_missing_idle':state.reason;E('repo-state').className='repo-state';E('repo-dot').className='state-dot '+displayStatus;E('repo-label').textContent=target?(current.repoStates[displayStatus]||current.repoStates.unknown):current.selectProject;E('repo-note').classList.remove('skeleton','loading-copy');E('repo-note').textContent=target?(target.projectLabel+' · '+(current.reasons[reason]||current.reasons.validator_unavailable)):items.length?current.selectProjectForStatus:current.noProjects}
60
- function memoryCount(value){if(language==='zh')return value+' 条记忆';return value+' '+(value===1?'memory':'memories')}
61
- function activityTitle(item){if(language==='zh'){if(item.kind==='turn')return item.status==='processing'?'会话进行中':item.status==='interrupted'?'会话已中断':'完成一轮会话';if(item.kind==='search')return item.status==='failed'?'搜索失败':'搜索 · '+memoryCount(item.count??0);if(item.status==='saved')return item.count===null?'写入 · 数量未知':'写入 · '+memoryCount(item.count);if(item.status==='skipped')return '写入 · 没有新记忆';if(item.status==='processing')return '写入处理中';if(item.status==='failed')return '写入失败';return '写入完成 · 数量未知'}if(item.kind==='turn')return item.status==='processing'?'Session in progress':item.status==='interrupted'?'Session interrupted':'Session turn completed';if(item.kind==='search')return item.status==='failed'?'Search failed':'Search · '+memoryCount(item.count??0);if(item.status==='saved')return item.count===null?'Add · Count unknown':'Add · '+memoryCount(item.count);if(item.status==='skipped')return 'Add · No new memory';if(item.status==='processing')return 'Add in progress';if(item.status==='failed')return 'Add failed';return 'Add completed · Count unknown'}
62
- function metaItem(value){return '<span class="meta-item">'+esc(value)+'</span>'}
63
- function render(body){lastBody=body;const current=copy(),summary=body.summary||{};E('turns').classList.remove('skeleton');E('turns').textContent=number(summary.turnCount);E('turn-note').classList.remove('skeleton','loading-copy');E('turn-note').textContent=language==='en'&&summary.turnCount===1?'client turn':current.turnNote;E('searched').classList.remove('skeleton');E('searched').textContent=number(summary.searchedMemoryCount);E('search-note').classList.remove('skeleton','loading-copy');E('search-note').textContent=number(summary.searchOperationCount)+' '+(language==='en'&&summary.searchOperationCount===1?'search':current.searchUnit);E('added').classList.remove('skeleton');E('added').textContent=number(summary.addedMemoryCount);E('add-note').classList.remove('skeleton','loading-copy');const addParts=[number(summary.addOperationCount)+' '+(language==='en'&&summary.addOperationCount===1?'add':current.addUnit)];if(summary.processingCount)addParts.push(number(summary.processingCount)+' '+current.processingUnit);if(summary.unknownCount)addParts.push(number(summary.unknownCount)+' '+current.unknownUnit);E('add-note').textContent=addParts.join(' · ');syncProjects(body.projects||[]);repoState(body.projects||[]);const activities=body.activities||[];E('activity-note').textContent=number(activities.length)+' '+(language==='en'&&activities.length===1?'item':current.activityUnit);E('activity').innerHTML=activities.map(item=>'<article class="row"><span class="timeline"><span class="event-icon '+esc(item.kind)+'">'+icons[item.kind]+'</span></span><div class="row-main"><div class="row-title">'+esc(activityTitle(item))+'</div><div class="row-meta">'+metaItem(item.projectLabel||current.unassignedProject)+'<span class="meta-separator"></span>'+metaItem(current.sources[item.source]||current.systemActivity)+'<span class="meta-separator"></span>'+metaItem(date(item.occurredAt))+'</div></div><span class="status '+esc(item.status)+'">'+esc(current.statuses[item.status]||item.status)+'</span></article>').join('');E('empty').hidden=activities.length>0;E('error').hidden=true}
64
- function connection(ok){connectionState=ok;const current=copy(),pill=E('connection-pill');pill.classList.toggle('offline',!ok);E('connection').textContent=ok?current.connected:current.disconnected;E('connection-time').textContent=ok?current.updated:''}
65
- async function refresh(){if(controller)controller.abort();const request=new AbortController();controller=request;E('refresh').classList.add('loading');E('refresh').disabled=true;try{const response=await fetch(endpoint(),{signal:request.signal,credentials:'same-origin'});if(!response.ok)throw new Error('HTTP '+response.status);render(await response.json());connection(true)}catch(error){if(error.name==='AbortError')return;connection(false);E('error').hidden=false}finally{if(controller===request){E('refresh').classList.remove('loading');E('refresh').disabled=false}}}
66
- async function poll(){if(document.visibilityState==='visible')await refresh();setTimeout(poll,10000)}
67
- clientSelect.onchange=()=>{if(clientSelect.value===client)return;client=clientSelect.value;selected='';syncClient();const next=new URL(location.href);next.searchParams.set('client',client);next.searchParams.delete('projectId');history.replaceState(null,'',next);refresh()};
68
- project.onchange=()=>{selected=project.value;const next=new URL(location.href);next.searchParams.set('client',client);if(selected)next.searchParams.set('projectId',selected);else next.searchParams.delete('projectId');history.replaceState(null,'',next);refresh()};
69
- E('language-toggle').onclick=()=>setLanguage(language==='zh'?'en':'zh');
70
- E('theme-toggle').onclick=()=>setTheme(theme==='light'?'dark':'light');
71
- E('refresh').onclick=refresh;
72
- syncClient();
73
- syncStaticCopy();
74
- poll();
75
- });
76
- </script>
77
- <style>
78
- :root{color-scheme:light;--canvas:#f7f8fc;--surface:#fff;--surface-soft:#fafbfe;--ink:#171b27;--muted:#687084;--quiet:#9299aa;--line:#e7e9f1;--line-strong:#d9dce8;--violet:#7156d9;--violet-soft:#f0edff;--cyan:#167c9d;--cyan-soft:#e8f7fb;--green:#168452;--green-soft:#e9f8f0;--amber:#a56818;--amber-soft:#fff4df;--red:#c23b50;--red-soft:#fff0f2;--shadow:0 18px 50px rgba(40,43,65,.07),0 2px 8px rgba(40,43,65,.04);--header-border:rgba(225,227,236,.82);--header-bg:rgba(247,248,252,.82);--control-bg:rgba(255,255,255,.7);--control-bg-strong:#fff;--select-bg:rgba(255,255,255,.88);--card-bg:rgba(255,255,255,.9);--panel-bg:rgba(255,255,255,.83);--product-ink:#464d60;--card-label:#555d70;--section-icon:#6f768a;--row-line:#edeef4;--timeline-line:#e5e7ef;--chip-bg:#f1f2f7;--chip-ink:#747b8d;--empty-icon-bg:#f1f2f6;--empty-icon-ink:#81889a;--skeleton-a:#eef0f5;--skeleton-b:#f7f8fb;--glow-violet:rgba(113,86,217,.07);--glow-cyan:rgba(22,124,157,.055);--active-shadow:0 1px 5px rgba(40,43,65,.11);--hover-shadow:0 22px 58px rgba(40,43,65,.1),0 3px 10px rgba(40,43,65,.05);font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif}
79
- [data-theme="dark"]{color-scheme:dark;--canvas:#10121a;--surface:#181b25;--surface-soft:#1e222e;--ink:#f2f3f7;--muted:#adb4c4;--quiet:#858da1;--line:#292e3c;--line-strong:#3a4051;--violet:#a995ff;--violet-soft:rgba(132,108,238,.18);--cyan:#68cbe6;--cyan-soft:rgba(42,153,184,.16);--green:#55cf91;--green-soft:rgba(38,167,101,.16);--amber:#e8b45f;--amber-soft:rgba(195,129,33,.17);--red:#f17a8d;--red-soft:rgba(205,65,87,.16);--shadow:0 18px 50px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.14);--header-border:rgba(48,53,69,.88);--header-bg:rgba(16,18,26,.84);--control-bg:rgba(28,32,43,.82);--control-bg-strong:#242936;--select-bg:rgba(27,31,42,.94);--card-bg:rgba(25,28,39,.94);--panel-bg:rgba(24,27,37,.9);--product-ink:#c9ceda;--card-label:#c4cad7;--section-icon:#a6adbd;--row-line:#292e3c;--timeline-line:#303646;--chip-bg:#252a38;--chip-ink:#aeb5c5;--empty-icon-bg:#252a38;--empty-icon-ink:#a6adbd;--skeleton-a:#242936;--skeleton-b:#303646;--glow-violet:rgba(132,108,238,.12);--glow-cyan:rgba(42,153,184,.08);--active-shadow:0 1px 6px rgba(0,0,0,.3);--hover-shadow:0 22px 58px rgba(0,0,0,.26),0 3px 10px rgba(0,0,0,.18)}
80
- *{box-sizing:border-box}html{background:var(--canvas)}body{margin:0;min-height:100vh;background:radial-gradient(circle at 7% 2%,var(--glow-violet),transparent 25rem),radial-gradient(circle at 96% 28%,var(--glow-cyan),transparent 24rem),var(--canvas);color:var(--ink);-webkit-font-smoothing:antialiased}button,select{font:inherit}button{color:inherit}
81
- .shell{width:min(1080px,calc(100% - 48px));margin:0 auto}
82
- header{position:sticky;top:0;z-index:5;border-bottom:1px solid var(--header-border);background:var(--header-bg);backdrop-filter:blur(18px) saturate(150%)}
83
- .header-inner{height:72px;display:flex;align-items:center}.brand{display:flex;align-items:center;gap:14px;min-width:0}.logo{display:block;height:27px;max-width:168px;transition:filter .18s}.brand-divider{width:1px;height:22px;background:var(--line-strong)}.product-name{font-size:13px;font-weight:650;letter-spacing:.01em;color:var(--product-ink);white-space:nowrap}[data-theme="dark"] .logo{filter:brightness(0) invert(1)}
84
- .header-actions{margin-left:auto;display:flex;align-items:center;gap:10px}.client-switch{display:flex;padding:3px;border:1px solid var(--line);border-radius:10px;background:var(--control-bg)}.client-select{height:28px;min-width:134px;padding:0 8px;border:0;border-radius:7px;outline:0;background:var(--control-bg-strong);color:var(--ink);font-size:11px;font-weight:680;cursor:pointer}.connection{display:flex;align-items:center;gap:8px;min-height:34px;padding:0 12px;border:1px solid var(--line);border-radius:999px;background:var(--control-bg);color:var(--muted);font-size:11px;font-weight:600}.connection-dot{position:relative;width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 0 4px rgba(22,132,82,.1)}.connection.offline{color:var(--red);border-color:color-mix(in srgb,var(--red) 35%,var(--line));background:var(--red-soft)}.connection.offline .connection-dot{background:var(--red);box-shadow:0 0 0 4px rgba(194,59,80,.1)}
85
- .preference-actions{display:flex;align-items:center;gap:6px}.icon-button{display:grid;width:34px;height:34px;padding:0;place-items:center;border:1px solid var(--line);border-radius:10px;background:var(--control-bg);cursor:pointer;transition:border-color .18s,background-color .18s,transform .18s}.icon-button:hover{border-color:var(--line-strong);background:var(--control-bg-strong);transform:translateY(-1px)}.icon-button:active{transform:translateY(0)}.icon-button svg{width:15px;height:15px}.icon-button.loading svg{animation:spin .8s linear infinite}.language-button{font-size:10px;font-weight:760;letter-spacing:.02em}.theme-sun{display:none}[data-theme="dark"] .theme-sun{display:block}[data-theme="dark"] .theme-moon{display:none}
86
- main{padding:56px 0 80px}.hero{display:grid;grid-template-columns:minmax(0,1fr) 280px;align-items:end;gap:40px;margin-bottom:28px}.eyebrow{display:flex;align-items:center;gap:8px;margin-bottom:11px;color:var(--violet);font-size:11px;font-weight:760;letter-spacing:.11em;text-transform:uppercase}.eyebrow:before{content:"";width:19px;height:2px;border-radius:2px;background:currentColor}.hero h1{margin:0;font-size:clamp(30px,4vw,42px);font-weight:730;line-height:1.12;letter-spacing:-.04em}.hero p{max-width:620px;margin:13px 0 0;color:var(--muted);font-size:14px;line-height:1.7}
87
- .scope label{display:block;margin:0 0 8px;color:var(--muted);font-size:11px;font-weight:650}.select-wrap{position:relative}.select-wrap svg{position:absolute;right:13px;top:50%;width:14px;height:14px;pointer-events:none;transform:translateY(-50%);color:var(--quiet)}.scope select{width:100%;height:44px;padding:0 40px 0 13px;appearance:none;border:1px solid var(--line-strong);border-radius:12px;outline:none;background:var(--select-bg);color:var(--ink);font-size:13px;font-weight:570;box-shadow:0 1px 2px rgba(25,27,39,.025);transition:border-color .18s,box-shadow .18s}.scope select:hover{border-color:color-mix(in srgb,var(--violet) 28%,var(--line-strong))}.scope select:focus{border-color:color-mix(in srgb,var(--violet) 60%,transparent);box-shadow:0 0 0 4px color-mix(in srgb,var(--violet) 12%,transparent)}
88
- .cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.card{position:relative;min-height:178px;padding:20px 21px 19px;overflow:hidden;border:1px solid var(--line);border-radius:18px;background:var(--card-bg);box-shadow:var(--shadow);transition:transform .2s,box-shadow .2s}.card:after{content:"";position:absolute;right:-34px;bottom:-48px;width:130px;height:130px;border-radius:50%;opacity:.55}.card:hover{transform:translateY(-2px);box-shadow:var(--hover-shadow)}.card.turn:after{background:radial-gradient(circle,rgba(165,104,24,.12),transparent 68%)}.card.search:after{background:radial-gradient(circle,rgba(113,86,217,.14),transparent 68%)}.card.add:after{background:radial-gradient(circle,rgba(22,124,157,.13),transparent 68%)}.card.repo:after{background:radial-gradient(circle,rgba(22,132,82,.12),transparent 68%)}
89
- .card-head{position:relative;z-index:1;display:flex;align-items:center;gap:10px}.card-icon{display:grid;width:31px;height:31px;place-items:center;border-radius:10px}.card-icon svg{width:15px;height:15px}.turn .card-icon{background:var(--amber-soft);color:var(--amber)}.search .card-icon{background:var(--violet-soft);color:var(--violet)}.add .card-icon{background:var(--cyan-soft);color:var(--cyan)}.repo .card-icon{background:var(--green-soft);color:var(--green)}.card-label{color:var(--card-label);font-size:12px;font-weight:680}.metric{position:relative;z-index:1;margin:19px 0 4px;font-size:40px;font-weight:730;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-.045em}.metric-note{position:relative;z-index:1;color:var(--muted);font-size:11px;line-height:1.45}.repo-state{position:relative;z-index:1;display:flex;align-items:center;gap:9px;margin:22px 0 6px;font-size:21px;font-weight:700;letter-spacing:-.025em}.state-dot{width:9px;height:9px;border-radius:50%;background:var(--quiet);box-shadow:0 0 0 4px rgba(146,153,170,.11)}.state-dot.ready{background:var(--green);box-shadow:0 0 0 4px rgba(22,132,82,.1)}.state-dot.preparing{background:var(--amber);box-shadow:0 0 0 4px rgba(165,104,24,.1)}.state-dot.not_ready{background:var(--red);box-shadow:0 0 0 4px rgba(194,59,80,.1)}
90
- .activity-section{margin-top:32px;border:1px solid var(--line);border-radius:20px;background:var(--panel-bg);box-shadow:0 14px 44px rgba(40,43,65,.045);overflow:hidden}.section-head{display:flex;align-items:center;gap:12px;padding:20px 22px;border-bottom:1px solid var(--line)}.section-title{display:flex;align-items:center;gap:10px}.section-title svg{width:17px;height:17px;color:var(--section-icon)}.section-head h2{margin:0;font-size:15px;font-weight:700;letter-spacing:-.01em}.section-note{margin-left:auto;padding:4px 8px;border-radius:999px;background:var(--chip-bg);color:var(--muted);font-size:10px;font-weight:650;font-variant-numeric:tabular-nums}.activity{padding:4px 22px}.row{position:relative;display:grid;grid-template-columns:34px minmax(0,1fr) auto;align-items:center;gap:13px;min-height:82px;padding:14px 0;border-bottom:1px solid var(--row-line)}.row:last-child{border-bottom:0}.timeline{position:relative;align-self:stretch;display:grid;place-items:center}.timeline:after{content:"";position:absolute;left:50%;top:calc(50% + 17px);bottom:-31px;width:1px;background:var(--timeline-line)}.row:last-child .timeline:after{display:none}.event-icon{position:relative;z-index:1;display:grid;width:30px;height:30px;place-items:center;border:4px solid var(--surface);border-radius:50%;box-shadow:0 0 0 1px var(--line)}.event-icon svg{width:12px;height:12px}.event-icon.turn{background:var(--amber-soft);color:var(--amber)}.event-icon.search{background:var(--violet-soft);color:var(--violet)}.event-icon.add{background:var(--cyan-soft);color:var(--cyan)}.row-main{min-width:0}.row-title{font-size:13px;font-weight:670;line-height:1.4}.row-meta{display:flex;align-items:center;gap:7px;margin-top:6px;color:var(--quiet);font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.meta-separator{width:2px;height:2px;flex:0 0 auto;border-radius:50%;background:var(--quiet)}.status{padding:5px 9px;border-radius:999px;background:var(--chip-bg);color:var(--muted);font-size:10px;font-weight:680;white-space:nowrap}.status.failed,.status.interrupted{background:var(--red-soft);color:var(--red)}.status.processing{background:var(--amber-soft);color:var(--amber)}.status.saved{background:var(--green-soft);color:var(--green)}.status.completed{background:var(--violet-soft);color:var(--violet)}.status.skipped{background:var(--chip-bg);color:var(--chip-ink)}
91
- .empty,.error{margin:22px;padding:36px 20px;border:1px dashed var(--line-strong);border-radius:14px;color:var(--muted);font-size:12px;text-align:center}.empty-icon{display:grid;width:38px;height:38px;margin:0 auto 10px;place-items:center;border-radius:12px;background:var(--empty-icon-bg);color:var(--empty-icon-ink)}.empty-icon svg{width:17px;height:17px}.error{border-color:color-mix(in srgb,var(--red) 35%,var(--line));background:var(--red-soft);color:var(--red)}[hidden]{display:none!important}
92
- .skeleton{overflow:hidden;color:transparent!important;border-radius:6px;background:linear-gradient(90deg,var(--skeleton-a) 25%,var(--skeleton-b) 50%,var(--skeleton-a) 75%);background-size:200% 100%;animation:shimmer 1.2s infinite}.metric.skeleton{width:70px;height:40px}.repo-state.skeleton{width:110px;height:25px}.loading-copy{width:90px;height:13px;margin-top:7px}
93
- :focus-visible{outline:2px solid var(--violet);outline-offset:3px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes shimmer{to{background-position:-200% 0}}
94
- @media(max-width:780px){.shell{width:min(100% - 28px,1080px)}main{padding:38px 0 60px}.hero{grid-template-columns:1fr;gap:24px}.scope{max-width:none}.cards{grid-template-columns:1fr}.card{min-height:150px}.metric{margin-top:15px}.repo-state{margin-top:18px}.activity{padding:3px 16px}.section-head{padding:18px}.row{grid-template-columns:32px minmax(0,1fr);gap:11px}.status{grid-column:2;justify-self:start;margin-top:-7px}.brand-divider,.product-name{display:none}}
95
- @media(max-width:720px){.header-inner{height:auto;min-height:108px;display:grid;grid-template-columns:minmax(0,1fr) auto;align-content:center;gap:10px 12px;padding:10px 0}.header-actions{display:contents}.client-switch{grid-column:1/-1;grid-row:2}.client-select{width:100%}.connection{display:none}.preference-actions{grid-column:2;grid-row:1;justify-self:end}}
96
- @media(max-width:440px){.shell{width:calc(100% - 22px)}.logo{height:24px;max-width:145px}.hero h1{font-size:29px}.hero p{font-size:13px}.card{border-radius:16px}.activity-section{border-radius:16px}.row-meta{display:block;white-space:normal;line-height:1.55}.meta-separator{display:none}.meta-item{margin-right:6px}}
97
- @media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
98
- </style>
99
- </head>
100
- <body>
101
- <header><div class="header-inner shell"><div class="brand"><img class="logo" src="/memory-viewer/logo" alt="MemoraX AI"><span class="brand-divider" aria-hidden="true"></span><span class="product-name" data-i18n="productName">Memory Viewer</span></div><div class="header-actions"><div class="client-switch"><select id="client-select" class="client-select" aria-label="Select client" data-i18n-aria="clientGroup"><option value="codex">Codex</option><option value="claude-code">Claude Code</option><option value="dsh">DeepSeek</option><option value="opencode">OpenCode</option></select></div><div id="connection-pill" class="connection" role="status"><span class="connection-dot"></span><span id="connection" data-i18n="connecting">Connecting</span><span id="connection-time" class="connection-time"></span></div><div class="preference-actions"><button id="language-toggle" class="icon-button language-button" type="button" aria-label="切换到中文" title="切换到中文">中</button><button id="theme-toggle" class="icon-button" type="button" aria-label="Switch to dark mode" title="Switch to dark mode"><svg class="theme-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M20 15.1A8.5 8.5 0 0 1 8.9 4a8.5 8.5 0 1 0 11.1 11.1Z" stroke-linecap="round" stroke-linejoin="round"/></svg><svg class="theme-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="3.5"/><path d="M12 2v2M12 20v2M4.93 4.93l1.42 1.42M17.65 17.65l1.42 1.42M2 12h2M20 12h2M4.93 19.07l1.42-1.42M17.65 6.35l1.42-1.42" stroke-linecap="round"/></svg></button><button id="refresh" class="icon-button" type="button" aria-label="Refresh memory activity" title="Refresh memory activity" data-i18n-aria="refresh" data-i18n-title="refresh"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M20 11a8 8 0 1 0-2.34 5.66M20 4v7h-7" stroke-linecap="round" stroke-linejoin="round"/></svg></button></div></div></div></header>
102
- <main class="shell">
103
- <section class="hero">
104
- <div class="hero-copy"><div class="eyebrow" data-i18n="eyebrow">Memory at a glance</div><h1 data-i18n="heading">Memory usage</h1><p data-i18n="intro">See how client sessions use project memory and whether repository knowledge is ready.</p></div>
105
- <div class="scope"><label for="project" data-i18n="scopeLabel">View scope</label><div class="select-wrap"><select id="project" aria-label="Select repository" data-i18n-aria="projectAria"><option value="" data-i18n="allProjects">All repositories</option></select><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="m7 9 5 5 5-5" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div>
106
- </section>
107
- <section class="cards" aria-label="Memory summary" data-i18n-aria="summaryAria">
108
- <article class="card turn"><div class="card-head"><span class="card-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M5 6h14v10H9l-4 3z" stroke-linejoin="round"/></svg></span><span class="card-label" data-i18n="cardTurns">Turns</span></div><div id="turns" class="metric skeleton" aria-live="polite">—</div><div id="turn-note" class="metric-note skeleton loading-copy" data-i18n="loading">Loading</div></article>
109
- <article class="card search"><div class="card-head"><span class="card-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="10.5" cy="10.5" r="5.5"/><path d="m15 15 4 4" stroke-linecap="round"/></svg></span><span class="card-label" data-i18n="cardSearch">Search</span></div><div id="searched" class="metric skeleton" aria-live="polite">—</div><div id="search-note" class="metric-note skeleton loading-copy" data-i18n="loading">Loading</div></article>
110
- <article class="card add"><div class="card-head"><span class="card-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M12 5v14M5 12h14" stroke-linecap="round"/><circle cx="12" cy="12" r="9"/></svg></span><span class="card-label" data-i18n="cardAdd">Add</span></div><div id="added" class="metric skeleton" aria-live="polite">—</div><div id="add-note" class="metric-note skeleton loading-copy" data-i18n="loading">Loading</div></article>
111
- <article class="card repo"><div class="card-head"><span class="card-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M4 7.5 12 3l8 4.5v9L12 21l-8-4.5z" stroke-linejoin="round"/><path d="m4 7.5 8 4.5 8-4.5M12 12v9"/></svg></span><span class="card-label" data-i18n="cardRepo">Repo Memory</span></div><div id="repo-state" class="repo-state skeleton"><span id="repo-dot" class="state-dot unknown"></span><span id="repo-label" data-i18n="checking">Checking</span></div><div id="repo-note" class="metric-note skeleton loading-copy" data-i18n="repoLoading">Repository knowledge status</div></article>
112
- </section>
113
- <section class="activity-section"><div class="section-head"><div class="section-title"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M4 6h16M4 12h16M4 18h10" stroke-linecap="round"/></svg><h2 data-i18n="recentActivity">Recent activity</h2></div><span id="activity-note" class="section-note" data-i18n="loading">Loading</span></div><div id="activity" class="activity" aria-live="polite"></div><div id="empty" class="empty" hidden><span class="empty-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M5 5h14v14H5zM8 9h8M8 13h5" stroke-linecap="round"/></svg></span><span data-i18n="empty">No turn, Search, or Add activity in the current scope</span></div><div id="error" class="error" hidden data-i18n="error">Memory activity is temporarily unavailable. Please try again later.</div></section>
114
- </main>
115
- </body>
116
- </html>`;
117
- }