@seqyuan/annodex 0.1.70 → 0.1.71

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 (68) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +6 -6
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_global-error.html +1 -1
  8. package/.next/server/app/_global-error.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/.next/server/app/api/internal/runtime/route.js +1 -1
  24. package/.next/server/app/api/version/route.js +1 -1
  25. package/.next/server/app/docs/changelog.html +2 -2
  26. package/.next/server/app/docs/changelog.rsc +1 -1
  27. package/.next/server/app/docs/changelog.segments/_full.segment.rsc +1 -1
  28. package/.next/server/app/docs/changelog.segments/_head.segment.rsc +1 -1
  29. package/.next/server/app/docs/changelog.segments/_index.segment.rsc +1 -1
  30. package/.next/server/app/docs/changelog.segments/_tree.segment.rsc +1 -1
  31. package/.next/server/app/docs/changelog.segments/docs/changelog/__PAGE__.segment.rsc +1 -1
  32. package/.next/server/app/docs/changelog.segments/docs/changelog.segment.rsc +1 -1
  33. package/.next/server/app/docs/changelog.segments/docs.segment.rsc +1 -1
  34. package/.next/server/app/index.html +1 -1
  35. package/.next/server/app/index.rsc +1 -1
  36. package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  37. package/.next/server/app/index.segments/_full.segment.rsc +1 -1
  38. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  39. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  40. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  41. package/.next/server/app/login.html +1 -1
  42. package/.next/server/app/login.rsc +1 -1
  43. package/.next/server/app/login.segments/_full.segment.rsc +1 -1
  44. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  45. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  46. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  47. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  48. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  49. package/.next/server/app/workspace/page.js +2 -2
  50. package/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/workspace.html +1 -1
  52. package/.next/server/app/workspace.rsc +2 -2
  53. package/.next/server/app/workspace.segments/_full.segment.rsc +2 -2
  54. package/.next/server/app/workspace.segments/_head.segment.rsc +1 -1
  55. package/.next/server/app/workspace.segments/_index.segment.rsc +1 -1
  56. package/.next/server/app/workspace.segments/_tree.segment.rsc +1 -1
  57. package/.next/server/app/workspace.segments/workspace/__PAGE__.segment.rsc +2 -2
  58. package/.next/server/app/workspace.segments/workspace.segment.rsc +1 -1
  59. package/.next/server/app-paths-manifest.json +6 -6
  60. package/.next/server/chunks/6983.js +1 -1
  61. package/.next/server/middleware-build-manifest.js +1 -1
  62. package/.next/server/pages/404.html +1 -1
  63. package/.next/server/pages/500.html +1 -1
  64. package/.next/server/server-reference-manifest.json +1 -1
  65. package/.next/static/chunks/app/workspace/{page-dbd3955c7fbdf9c9.js → page-0ebf3efe1771aa56.js} +2 -2
  66. package/package.json +1 -1
  67. /package/.next/static/{X9itNj1gUkUjsFyMXUoOY → EBrS1obb2hYNLHfD1WLgU}/_buildManifest.js +0 -0
  68. /package/.next/static/{X9itNj1gUkUjsFyMXUoOY → EBrS1obb2hYNLHfD1WLgU}/_ssgManifest.js +0 -0
@@ -8,7 +8,7 @@ b:I[27123,[],"default",1]
8
8
  :HL["/_next/static/media/ec14413c594b3356-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
9
9
  :HL["/_next/static/css/fddca953485158e4.css","style"]
10
10
  :HL["/_next/static/css/467c4b6fee759c2e.css","style"]
11
- 6:Tfa0b,<p class="cl-p"><h2 class="cl-h2">0.1.70</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li><strong>File download</strong>: Download button in FileViewer toolbars (text, image, audio, PDF,</li><br/></ul> DOCX, XLSX, PPTX). <code class="cl-code">GET /api/files/{path}?type=download</code> streams the original file<br/> with <code class="cl-code">Content-Disposition: attachment</code> (500MB cap).<br/><ul class="cl-ul"><li><strong>Extensions settings</strong>: simpler default panel (name, description, project/chat toggles)</li><br/></ul> with <strong>Advanced</strong> collapse for ID, transport, scope, and MCP install details.<br/><ul class="cl-ul"><li><strong>WeCom IM settings</strong>: prominent enable switch; config fields only when enabled;</li><br/></ul> updated gateway hint; <strong>Save IM settings</strong> as primary action button.<br/><ul class="cl-ul"><li><strong>Model Discover</strong>: infer reasoning/image flags from model metadata on Discover;</li><br/></ul> manual model add keeps thinking/image unchecked by default.</p><p class="cl-p"><h2 class="cl-h2">0.1.69</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li><strong>WeCom IM streaming replies</strong>: <code class="cl-code">POST /api/im/turn</code> with <code class="cl-code">Accept: text/event-stream</code></li><br/></ul> (or <code class="cl-code">?stream=1</code>) streams <code class="cl-code">status</code>, <code class="cl-code">delta</code>, and <code class="cl-code">done</code> events while the agent runs.<br/><ul class="cl-ul"><li><code class="cl-code">annodex-im-gateway</code> consumes the SSE turn stream and pushes partial text to WeCom</li><br/></ul> with a fixed <code class="cl-code">streamId</code> (<code class="cl-code">finish: false</code> during stream, <code class="cl-code">finish: true</code> on completion).<br/><ul class="cl-ul"><li>Tool-running phases still show <code class="cl-code">(working Ns)</code>; assistant text streams with 300ms throttle.</li><br/><li>Sync JSON <code class="cl-code">/api/im/turn</code> kept for tests and curl.</li><br/><li>New <code class="cl-code">annodex im-gateway</code> CLI subcommand (same user's <code class="cl-code">~/.config/annodex</code>).</li><br/><li>Web-auth: localhost requests to <code class="cl-code">/api/im/*</code> and <code class="cl-code">/api/memory/*</code> bypass login so the</li><br/></ul> IM gateway and memory MCP sidecars work when password auth is enabled.</p><p class="cl-p"><h2 class="cl-h2">0.1.68</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li><strong>Multi-user IM gateway</strong>: bot secrets are served over <code class="cl-code">GET /api/im/projects</code> from</li><br/></ul> the annodex server; gateway no longer reads local <code class="cl-code">im-secrets/</code> files.<br/><ul class="cl-ul"><li>New <code class="cl-code">GET /api/im/gateway-token</code> (localhost only): sync gateway token and warn when</li><br/></ul> <code class="cl-code">ANNODEX_CONFIG_DIR</code> differs from the annodex server.<br/><ul class="cl-ul"><li><code class="cl-code">annodex-im-gateway</code>: clearer 401/403 errors; startup token sync; tolerate</li><br/></ul> unwritable <code class="cl-code">im-gateway.json</code> with a helpful message.<br/><ul class="cl-ul"><li>Docs (en/zh) and <strong>Settings → Project → WeCom IM</strong>: multi-account /</li><br/></ul> <code class="cl-code">ANNODEX_CONFIG_DIR</code> guidance.</p><p class="cl-p"><h2 class="cl-h2">0.1.67</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li><code class="cl-code">annodex stop</code>: scan and terminate orphaned <strong>codex app-server</strong> processes left</li><br/></ul> after the Next.js server exits (Linux process-group kill when available).<br/><ul class="cl-ul"><li><code class="cl-code">annodex stop</code> does <strong>not</strong> stop <code class="cl-code">annodex-im-gateway</code>; IM sidecar can stay running</li><br/></ul> while annodex is restarted separately.<br/><ul class="cl-ul"><li><code class="cl-code">annodex doctor</code>: recommend cleaning orphaned codex app-server processes; note</li><br/></ul> when IM gateway is up but annodex is stopped.<br/><ul class="cl-ul"><li><code class="cl-code">annodex-im-gateway</code>: log clearer errors when <code class="cl-code">/api/im/turn</code> fails.</li><br/></ul><br/><h2 class="cl-h2">0.1.66</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>README and docs site (en/zh): align project switcher, IM settings path, and mobile</li><br/></ul> Extensions wording with the v0.1.65 workspace UI.<br/><ul class="cl-ul"><li>Homepage feature copy (<code class="cl-code">home-i18n</code>) updated for pinned sidebar folders and</li><br/></ul> <strong>Settings → Project → WeCom IM</strong>.</p><p class="cl-p"><h2 class="cl-h2">0.1.65</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Sidebar project layout: pinned projects appear as expandable folders with chat</li><br/></ul> history; unpinned projects list in the switcher dropdown; the active unpinned<br/> project shows as a temporary sidebar folder while selected.<br/><ul class="cl-ul"><li>Project IM (WeCom): moved from Tools to <strong>Settings → Project</strong> with a per-project</li><br/></ul> <strong>WeCom IM</strong> expand control.<br/><ul class="cl-ul"><li>Chat UI: remove the per-session “Enabled extensions for this session” banner;</li><br/></ul> extension toggles remain in the input bar.<br/><ul class="cl-ul"><li>Mobile chat input: Extensions control shows icon only (count in tooltip).</li><br/></ul><br/><h2 class="cl-h2">0.1.64</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Docs site i18n: English and Chinese (<code class="cl-code">/docs</code> and <code class="cl-code">/zh/docs</code>) with Fumadocs</li><br/></ul> language switcher and locale-aware navigation.<br/><ul class="cl-ul"><li>New documentation pages: [Project Memory](/docs/memory) and</li><br/></ul> [Project IM (WeCom)](/docs/im) in both languages.<br/><ul class="cl-ul"><li>Homepage, usage, and configuration docs updated for memory, IM, project</li><br/></ul> switcher, and writable <code class="cl-code">$HOME</code> / <code class="cl-code">ANNODEX_CONFIG_DIR</code> guidance.</p><p class="cl-p"><h2 class="cl-h2">0.1.63</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Per-project WeCom IM gateway (v1): optional one bot per project cwd via</li><br/></ul> <code class="cl-code">annodex-im-gateway</code> sidecar and <code class="cl-code">{cwd}/.annodex/im.json</code> config.<br/><ul class="cl-ul"><li>IM APIs: <code class="cl-code">GET/PUT /api/im/project</code>, <code class="cl-code">GET /api/im/projects</code>, <code class="cl-code">POST /api/im/turn</code></li><br/></ul> for gateway integration and synchronous IM replies.<br/><ul class="cl-ul"><li>Tools panel <strong>Project IM</strong> section: enable bot, bot credentials, pairing code,</li><br/></ul> allowlist, and group-chat options (UI-only config, no CLI).<br/><ul class="cl-ul"><li>WeCom pairing: users send project pairing code in IM to join <code class="cl-code">allowedUsers</code>;</li><br/></ul> multi-user allowlist supported with one shared IM Codex thread per project.<br/><ul class="cl-ul"><li>IM unit tests cover config, auth, WeCom message parsing, and simulated IM</li><br/></ul> agent sessions with mocked Codex wrapper.</p><p class="cl-p"><h2 class="cl-h2">0.1.62</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Phase 1 project memory: JSONL working store at</li><br/></ul> <code class="cl-code">~/.config/annodex/memory/<sha1(cwd)>/entries.jsonl</code> with retain, recall, and<br/> reflect via the <code class="cl-code">annodex-memory-mcp</code> stdio MCP server.<br/><ul class="cl-ul"><li>Promote working-memory candidates to project <code class="cl-code">MEMORY.md</code> or <code class="cl-code">CONTEXT.md</code> from</li><br/></ul> the Tools panel or <code class="cl-code">POST /api/memory/promote</code>.<br/><ul class="cl-ul"><li>System prompt injects <code class="cl-code">CONTEXT.md</code> alongside <code class="cl-code">MEMORY.md</code>; <code class="cl-code">buildSystemPrompt()</code></li><br/></ul> uses shared context-file wrappers.<br/><ul class="cl-ul"><li>Tools panel shows memory stats, promotion candidates, and recent entries for</li><br/></ul> the active project.<br/><ul class="cl-ul"><li><code class="cl-code">annodex-memory</code> extension preset in Settings → Extensions; auto-registered in</li><br/></ul> <code class="cl-code">extensions.json</code> on first session start.<br/><ul class="cl-ul"><li>README and docs site: writable <code class="cl-code">$HOME</code> / <code class="cl-code">ANNODEX_CONFIG_DIR</code>, project</li><br/></ul> switcher, extensions, and storage layout.</p><p class="cl-p"><h2 class="cl-h2">0.1.61</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Settings Extensions tab: clip long extension names, IDs, and transport commands</li><br/></ul> in the sidebar list so text no longer overflows into the details panel; form<br/> controls and discovery cards use consistent width constraints and ellipsis.</p><p class="cl-p"><h2 class="cl-h2">0.1.60</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Sidebar project switcher: replace the multi-project PROJECTS channel with a</li><br/></ul> compact dropdown (pi-web style); session list shows the current project only.<br/><ul class="cl-ul"><li>Pin visibility: switcher lists pinned projects plus the active cwd; unpinned</li><br/></ul> projects disappear when you switch away unless explicitly pinned.<br/><ul class="cl-ul"><li>Add project from the switcher dropdown via the existing folder browse dialog</li><br/></ul> (sidebar Add button removed).<br/><ul class="cl-ul"><li>Drag reorder pinned projects in the switcher dropdown; order persists in the</li><br/></ul> project registry.</p><p class="cl-p"><h2 class="cl-h2">0.1.59</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Chat image uploads: pasted images save to <code class="cl-code">{cwd}/.annodex-uploads/</code> via</li><br/></ul> <code class="cl-code">POST /api/images/upload</code>; prompts send <code class="cl-code">localImage</code> paths plus vision data<br/> URLs instead of large inline base64 bodies.<br/><ul class="cl-ul"><li>User messages show path appendix (<code class="cl-code">[User attached image N: /path (name)]</code>) and</li><br/></ul> thumbnails load from disk through <code class="cl-code">/api/files/...?type=read</code>.<br/><ul class="cl-ul"><li>Session history restores images from Codex <code class="cl-code">localImage</code> inputs after reload.</li><br/></ul><br/><h2 class="cl-h2">0.1.58</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Codex native <code class="cl-code">/goal</code>: slash command calls <code class="cl-code">thread/goal/set|get|clear</code> instead of</li><br/></ul> inserting a prompt template; <code class="cl-code">ThreadGoalPanel</code> shows objective, status, token/time<br/> progress; goal state loads on session open and updates via SSE.<br/><ul class="cl-ul"><li>Subagent UI: top-right button shows only while subagent runs are active; panel</li><br/></ul> auto-closes when all runs finish.</p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Subagent status merge prefers terminal states (failed/completed) over stale</li><br/></ul> <code class="cl-code">running</code>; dedupe by <code class="cl-code">threadId</code>; unknown Codex statuses default to <code class="cl-code">paused</code>.<br/><ul class="cl-ul"><li>Idle session load finalizes in-flight subagent runs so historical sessions no</li><br/></ul> longer show a stuck active badge after failures.<br/><ul class="cl-ul"><li>Clear subagent state immediately when switching sessions.</li><br/></ul><br/><h2 class="cl-h2">0.1.57</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Stream session manager (<code class="cl-code">lib/stream-session-manager.ts</code>): client-side snapshot</li><br/></ul> accumulator survives React remounts and SSE reconnects; thinking phases, tool<br/> calls, and text merge in one place instead of local reducers.<br/><ul class="cl-ul"><li>Session reader: merge reasoning, tool calls, and text within a Codex turn into</li><br/></ul> one assistant message (with paired toolResult rows) for cleaner history after<br/> reload.<br/><ul class="cl-ul"><li>Waiting UX: <code class="cl-code">StreamingStatusBar</code> shows live elapsed seconds and real runtime</li><br/></ul> phase; time-phased labels during the pre-first-token gap; ProcessPanel<br/> waiting shell appears immediately on send.<br/><ul class="cl-ul"><li>Send flow: optimistic running state and stream shell start before SSE connect;</li><br/></ul> running reconcile no longer replaces messages mid-turn.</p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Remove <code class="cl-code">message_end</code> mid-turn append; canonical state comes from <code class="cl-code">agent_end</code></li><br/></ul> reconcile only, reducing duplicate assistant replies.<br/><ul class="cl-ul"><li>Optimistic user message dedup via <code class="cl-code">pendingOptimisticUserRef</code> and merge on</li><br/></ul> reload, fixing duplicate user bubbles after send.<br/><ul class="cl-ul"><li>Streaming UI: thinking/tools render only in ProcessPanel during live turns,</li><br/></ul> not inline twice.</p><p class="cl-p"><h2 class="cl-h2">0.1.56</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>macos-codex-security.js: needsRepairBeforeSpawn now also checks</li><br/></ul> spctl --assess (5s timeout) after codesign --verify passes.<br/> codesign may report 'valid on disk' even when spctl detects<br/> CSSMERR_TP_CERT_REVOKED — only spctl checks Apple's revocation DB.<br/> This makes auto-repair work on first spawn after npm update,<br/> eliminating the need for manual <code class="cl-code">annodex doctor --repair</code>.<br/><ul class="cl-ul"><li>macos-codex-security.js: spctl timeout now treated as needing repair.</li><br/></ul> A valid cert should return quickly; a slow response usually means the<br/> revocation check is happening against a revoked cert. Worst case:<br/> unnecessary ad-hoc re-sign, which is harmless.</p><p class="cl-p"><h2 class="cl-h2">0.1.55</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>codex-server.ts: resolveCodexNativeBinary now searches annodex's own</li><br/></ul> node_modules (join(__dirname, '..', 'node_modules')), fixing the path<br/> mismatch where the doctor repaired the native binary but spawn used a<br/> JS shim (node_modules/.bin/codex). The shim→native grandchild exec<br/> triggered macOS Gatekeeper SIGKILL even after repair.<br/><ul class="cl-ul"><li>macos-codex-security.js: prepareMacOSCodexForSpawn now resolves the</li><br/></ul> underlying native binary when given a JS shim path, and repairs that<br/> binary directly. Added resolveNativeBinaryFromShim() helper.</p><p class="cl-p"><h2 class="cl-h2">0.1.54</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>macOS: ad-hoc codesign repair for revoked codex Developer ID certificate</li><br/></ul> (CSSMERR_TP_CERT_REVOKED). New <code class="cl-code">lib/macos-codex-security.js</code> strips revoked<br/> signatures and applies <code class="cl-code">codesign --force --sign -</code> before spawn, following<br/> the hermes-agent recovery pattern.<br/><ul class="cl-ul"><li>doctor: add <code class="cl-code">--repair</code> mode for deep quarantine clear and ad-hoc signing.</li><br/></ul> Add <code class="cl-code">codesign verify</code> output alongside <code class="cl-code">spctl</code> for dual diagnostic view.<br/> Warn when repo/runtime is inside macOS protected folders (Desktop, Documents,<br/> Downloads, iCloud Drive).<br/><ul class="cl-ul"><li>next.config.ts: allow <code class="cl-code">127.0.0.1</code> and <code class="cl-code">localhost</code> in <code class="cl-code">allowedDevOrigins</code> for</li><br/></ul> Next.js 16 HMR compatibility.</p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>codex-server.ts: removed inline <code class="cl-code">clearMacOSQuarantine()</code> which performed</li><br/></ul> slow recursive xattr on every spawn. Replaced with fast <code class="cl-code">prepareMacOSCodexForSpawn</code><br/> that only validates the codex binary signature (3s timeout, no spctl).<br/><ul class="cl-ul"><li>Hot path no longer calls <code class="cl-code">spctl --assess</code> or recursive xattr, eliminating</li><br/></ul> 20-80s stalls on macOS with large Documents folders.</p><p class="cl-p"><h2 class="cl-h2">0.1.53</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>macOS: default transport switched from WebSocket to stdio (matching</li><br/></ul> Windows), removing the network-server code path that triggered hardened<br/> runtime entitlement checks and Gatekeeper reinforcement on Apple Silicon.<br/><ul class="cl-ul"><li>macOS: child process no longer spawned with <code class="cl-code">detached: true</code>, matching</li><br/></ul> hello-halo's proven spawning strategy. Combined with the stdio transport<br/> change, this avoids the session-leader security path that Gatekeeper may<br/> flag.<br/><ul class="cl-ul"><li>macOS: <code class="cl-code">clearMacOSQuarantine()</code> now also runs <code class="cl-code">spctl --assess</code> on the</li><br/></ul> resolved native binary and attempts <code class="cl-code">spctl --add</code> if the assessment is<br/> not accepted, providing an additional approval layer beyond <code class="cl-code">xattr -cr</code>.<br/><ul class="cl-ul"><li>Direct native binary spawn: <code class="cl-code">resolveCodexNativeBinary()</code> resolves the</li><br/></ul> vendored codex binary (bypassing the JS shim) to avoid the grandchild<br/> process hop that Gatekeeper intercepts even when quarantine is cleared.<br/><ul class="cl-ul"><li>Added <code class="cl-code">/docs/changelog</code> page that renders CHANGELOG.md in the annodex UI.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>macOS: corrected kill-on-close logic to use process-group kill only on</li><br/></ul> Linux (where detached is still true), preventing accidental signal<br/> propagation to annodex's own process group on macOS.<br/><ul class="cl-ul"><li>macOS: improved Gatekeeper diagnostic message with <code class="cl-code">spctl --add</code> and</li><br/></ul> manual Terminal-approval workaround instructions.</p><p class="cl-p"><h1 class="cl-h1">Changelog</h1></p><p class="cl-p"><h2 class="cl-h2">0.1.52</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>macOS: <code class="cl-code">clearMacOSQuarantine()</code> now targets the entire <code class="cl-code">@openai/codex</code> package</li><br/></ul> tree and the npm bin shim with <code class="cl-code">xattr -cr</code> (recursive clear-all), not just<br/> the vendored native binary. This resolves cases where macOS Gatekeeper/XProtect<br/> killed the process even after <code class="cl-code">com.apple.quarantine</code> was removed from the<br/> vendored binary alone.<br/><ul class="cl-ul"><li>macOS: improved the Gatekeeper kill diagnostic message with a one-liner</li><br/></ul> <code class="cl-code">xattr -cr</code> fix command.</p><p class="cl-p"><h2 class="cl-h2">0.1.51</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>macOS: <code class="cl-code">lib/codex-server.ts</code> now automatically clears the <code class="cl-code">com.apple.quarantine</code></li><br/></ul> extended attribute from vendored codex native binaries before spawning the<br/> app-server, preventing silent Gatekeeper/XProtect kills that caused "No agent<br/> runtime is active" on macOS.<br/><ul class="cl-ul"><li>macOS: improved <code class="cl-code">proc.on("exit")</code> diagnostics — when the codex process is</li><br/></ul> killed by a signal, the server log now includes a macOS Gatekeeper hint with<br/> manual fix instructions.</p><p class="cl-p"><h2 class="cl-h2">0.1.50</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Ignored local <code class="cl-code">tmp/</code> protocol scratch files and the uncurated site image <code class="cl-code">site/public/images/搜索框传播样式-白色版.png</code> so they no longer pollute the release worktree or get staged by accident.</li><br/></ul><br/><h2 class="cl-h2">0.1.49</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Finalized in-flight subagent runs when a turn ends or the user aborts, so the Subagent panel no longer leaves stale <code class="cl-code">running</code> / <code class="cl-code">pending</code> entries hanging after cancellation or failure.</li><br/></ul><br/><h2 class="cl-h2">0.1.48</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Added first-pass Extensions management in Settings and chat, including per-session extension visibility and toggles for enabled vs available extensions.</li><br/><li>Added a browser-use extension testing checklist at <code class="cl-code">docs/browser-use-extension-test-plan.md</code> to document the minimum end-to-end validation flow.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Synced saved enabled MCP extensions into the Codex MCP registry on save so newly configured servers can be discovered by runtime sessions without extra manual registration.</li><br/></ul><br/><h2 class="cl-h2">0.1.47</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Added a WeChat follow card on the website homepage pointing users to the <code class="cl-code">seqyuan</code>公众号 for updated annodex tutorials and Windows setup guidance.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Sidebar: increased project/chat loading timeout from 15s to 30s and converted abort/timeout failures into friendly retry messages, reducing macOS <code class="cl-code">AbortError: signal is aborted without reason</code> reports during slow Codex startup.</li><br/><li>Skills: made skill path validation cross-platform by replacing hard-coded POSIX <code class="cl-code">/.codex/skills/</code> checks with normalized path resolution, fixing Windows skill search/install follow-up operations against user and project <code class="cl-code">.codex/skills</code> directories.</li><br/></ul><br/><h2 class="cl-h2">0.1.46</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Expanded the website quick start with detailed Windows Miniforge installation, Codex initialization, Annodex launch, and DeepSeek model setup steps.</li><br/><li>Added a screenshot-based Usage Guide covering model configuration, skills, file preview, runtime monitoring, and mobile browser usage.</li><br/><li>Added product screenshots to the homepage and documentation overview.</li><br/><li>Documented platform app-server transport defaults and added startup logging for the selected Codex app-server transport.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Ensured website documentation references tracked screenshot assets so published docs render images correctly.</li><br/></ul><br/><h2 class="cl-h2">0.1.45</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Added a wildcard Codex app-server notification hook so annodex can normalize all incoming app-server events consistently across WebSocket and stdio transports.</li><br/><li>Added optional Codex event diagnostics with ANNODEX_CODEX_EVENT_LOG=1.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Improved streaming output by lazily starting assistant rendering when text deltas arrive before turn or item lifecycle events.</li><br/><li>Added streaming support for Codex reasoning text and reasoning summary deltas.</li><br/><li>Avoided treating completed agent messages as new streamed content when deltas were already received, while preserving completed-message fallback when no deltas arrive.</li><br/></ul><br/><h2 class="cl-h2">0.1.44</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Added dual Codex app-server transports: existing WebSocket mode and a new stdio JSON-RPC mode.</li><br/><li>Windows now defaults to stdio transport, while macOS/Linux keep the existing WebSocket transport.</li><br/><li>Added ANNODEX_CODEX_TRANSPORT=ws|stdio|auto override for transport selection.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Improved Windows compatibility by avoiding local port/listener readiness issues that can leave chats stuck loading or turns stalled.</li><br/><li>Codex server registry keys now include transport mode so WebSocket and stdio app-server instances are not accidentally reused across modes.</li><br/></ul><br/><h2 class="cl-h2">0.1.43</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Windows: completed the Codex app-server JSON-RPC handshake by sending the required <code class="cl-code">initialized</code> notification immediately after <code class="cl-code">initialize</code>, matching CodePilot/hello-halo and fixing cases where sidebar chat loading, thread start/resume, and agent replies could stall.</li><br/><li>Sessions: added a 12-second timeout fallback for workspace <code class="cl-code">thread/list</code> loading so the sidebar no longer stays on "Loading chats..." indefinitely when the workspace app-server is stuck; it falls back to local session summaries instead.</li><br/></ul><br/><h2 class="cl-h2">0.1.42</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Sidebar: renamed project section label from "Threads" to "Projects".</li><br/><li>Sidebar: removed the "drag to sort, pin to top" hint next to the project label.</li><br/></ul><br/><h2 class="cl-h2">0.1.41</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Simplified <code class="cl-code">annodex passwd</code>: terminal access now grants password-reset permission. No old password prompt, single new-password entry. Empty input disables auth. <code class="cl-code">--reset</code> still works as a silent alias for backward compatibility.</li><br/><li>Simplified <code class="cl-code">promptPassword()</code> (first-run setup) to match the single-entry flow.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Windows: <code class="cl-code">.cmd</code>/<code class="cl-code">.bat</code> shim binaries (e.g. <code class="cl-code">codex.cmd</code>) now launch through <code class="cl-code">cmd.exe /d /s /c</code> with <code class="cl-code">windowsVerbatimArguments</code>, matching CodePilot's <code class="cl-code">buildCodexLaunch()</code> pattern. Fixes spawn failures when the codex binary is an npm-installed shim in a path with spaces.</li><br/><li>Windows: <code class="cl-code">findListeningPids()</code> now uses <code class="cl-code">Get-NetTCPConnection</code> (PowerShell) primary and <code class="cl-code">netstat</code> fallback for port detection, replacing the previous blank <code class="cl-code">return []</code> on win32.</li><br/><li>Windows: <code class="cl-code">readProcessCmdline()</code> now supports win32 via <code class="cl-code">Get-CimInstance</code> / <code class="cl-code">wmic</code> fallback.</li><br/></ul></p><p class="cl-p"><h2 class="cl-h2">0.1.40</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed <code class="cl-code">codex</code> CLI not found (<code class="cl-code">ENOENT</code>) on Windows: <code class="cl-code">getCodexExecutablePath()</code> now searches for <code class="cl-code">codex.cmd</code> and <code class="cl-code">codex.exe</code> in addition to <code class="cl-code">codex</code>, scans the global npm <code class="cl-code">node_modules/.bin</code> directory, and uses <code class="cl-code">__dirname</code>-relative lookup for globally-installed annodex. Connection failure errors now include a clear hint about the missing binary path.</li><br/></ul><br/><h2 class="cl-h2">0.1.39</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li><code class="cl-code">handleSend</code> no longer removes the user's message on failure — the message stays visible and a descriptive "Send failed: …" error is shown, making it obvious when an agent request fails instead of silently flashing the message away.</li><br/></ul><br/><h2 class="cl-h2">0.1.38</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Preset providers (DeepSeek, Moonshot AI, Zhipu, MiniMax) now auto-discover models from the provider's API (<code class="cl-code">/v1/models</code>) after entering an API key, instead of using a static preset model list. Falls back to preset models if the API is unreachable.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Added 15-second fetch timeout to <code class="cl-code">loadSessionsForCwd</code> and <code class="cl-code">loadProjects</code> in the sidebar, preventing permanent "Loading chats…" hang on slow or blocked network connections.</li><br/></ul><br/><h2 class="cl-h2">0.1.37</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed constant screen flickering on Windows caused by <code class="cl-code">router.replace("/")</code> navigating away from <code class="cl-code">/workspace</code> and triggering a <code class="cl-code">redirect</code> → remount loop in <code class="cl-code">AppShell</code>. Three <code class="cl-code">handleCwdChange</code> / <code class="cl-code">handleNewSession</code> / <code class="cl-code">handleSessionDeleted</code> paths now use <code class="cl-code">/workspace</code> instead of <code class="cl-code">/</code>.</li><br/></ul><br/><h2 class="cl-h2">0.1.36</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Removed the tracked <code class="cl-code">presentation/</code> publishing assets and root <code class="cl-code">.source/</code> generated files from the Git repository so release secret scanning no longer flags embedded cookies or tokens.</li><br/><li>Removed the obsolete root Fumadocs MDX build hook from the main app, fixing release <code class="cl-code">npm-publish</code> builds that failed on <code class="cl-code">source.config.ts</code> externalization.</li><br/></ul><br/><h2 class="cl-h2">0.1.35</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Refined the mobile chat input sheet interactions so phone users can reach composer actions more reliably without dialog overlays blocking taps near the bottom edge.</li><br/><li>Added built-in provider presets for DeepSeek, Moonshot AI, Zhipu AI, MiniMax, and OpenRouter to speed up API-key-based model setup.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Changed provider preset insertion in the Models dialog to update only the local draft until Save, preventing unsaved provider edits from being clobbered.</li><br/><li>Allowed writable annodex provider entries to override same-id read-only Codex providers from merged config.</li><br/><li>Switched the OpenRouter preset default protocol to OpenAI Responses for correct out-of-box behavior.</li><br/></ul><br/><h2 class="cl-h2">0.1.34</h2></p><p class="cl-p"><h3 class="cl-h3">New</h3><br/><ul class="cl-ul"><li>Added presentation assets for annodex product introduction: HyperFrames HTML composition with 6-scene Chinese narration, TTS audio, and CSS-rendered virtual UI showcasing the browser-based AI workspace experience.</li><br/><li>Added WeChat official account promotional article (<code class="cl-code">presentation/wechat_article.md</code>) targeting bioinformatics researchers.</li><br/><li>Added automated Xiaohongshu (RED) publishing scripts using Selenium/Playwright for one-click note posting with Firefox login session reuse.</li><br/></ul><br/><h3 class="cl-h3">Documentation</h3><br/><ul class="cl-ul"><li>Updated product messaging across presentation and promotion materials: unified URL to <code class="cl-code">annodex.seqyuan.cn</code>, refined value proposition around eliminating ChatGPT/VPN barriers, DeepSeek API format bridging, and bioinformatics-specific generative UI.</li><br/></ul><br/><h2 class="cl-h2">0.1.33</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Simplified the root app back to the local workspace role: <code class="cl-code">/</code> now redirects to <code class="cl-code">/workspace</code>, while the standalone <code class="cl-code">site/</code> subproject remains the only public-facing docs/marketing surface.</li><br/></ul><br/><h3 class="cl-h3">Maintenance</h3><br/><ul class="cl-ul"><li>Removed the duplicated root-app docs route, root MDX loader chain, and mirrored <code class="cl-code">content/docs</code> sources that were superseded by <code class="cl-code">site/</code>.</li><br/><li>Updated lint ignores so <code class="cl-code">site/.next</code> and <code class="cl-code">site/.source</code> generated files do not pollute root-repo lint results.</li><br/></ul><br/><h2 class="cl-h2">0.1.32</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added a standalone <code class="cl-code">site/</code> public documentation subproject so Vercel can deploy the explanation site without exposing the main local workspace app, APIs, or <code class="cl-code">/workspace</code> route.</li><br/><li>Reframed the public-site copy and docs to make the local/LAN product boundary explicit: the hosted site is documentation only, while annodex itself remains a local-first browser workspace.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Restored historical message timestamps by hydrating chat history from local Codex session JSONL records instead of assigning the entire loaded thread the same <code class="cl-code">updatedAt</code> time.</li><br/></ul><br/><h2 class="cl-h2">0.1.31</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added presentation copy and helper scripts for rendering or manually publishing the annodex promo deck and Xiaohongshu post assets.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Normalized assistant messages that arrive as plain strings so the session UI still renders them as text blocks instead of dropping their content.</li><br/><li>Removed outdated public/open-source wording from the presentation deck so the promo materials match the current annodex positioning and repository visibility.</li><br/></ul><br/><h2 class="cl-h2">0.1.30</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added a public-facing landing page and documentation section so annodex now has a clearer project website instead of dropping users directly into the workspace UI.</li><br/><li>Added a dedicated <code class="cl-code">/workspace</code> route for the actual working interface, keeping the browser workspace accessible while allowing <code class="cl-code">/</code> and <code class="cl-code">/docs</code> to serve as product-facing entry points.</li><br/><li>Expanded the documentation set with quick start, installation, configuration, architecture, runtime, and workspace guides aligned to the current annodex product surface.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Corrected project-site and docs copy to reflect the current product structure, including the workspace entry path and the removal of the old Report tab terminology.</li><br/><li>Excluded generated Fumadocs <code class="cl-code">.source/</code> files from linting and git noise, while keeping the authored docs content tracked in the repository.</li><br/></ul><br/><h2 class="cl-h2">0.1.29</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Switched the mobile composer overflow menu outside-click handling to <code class="cl-code">pointerdown</code> with <code class="cl-code">mousedown</code> fallback, so tapping the three-dot button on phones reliably opens the More menu.</li><br/></ul><br/><h2 class="cl-h2">0.1.28</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Cleared the server-side prompt busy state as soon as an <code class="cl-code">agent_end</code> event arrives, so completed assistant replies no longer leave the composer stuck showing the red Stop button.</li><br/></ul><br/><h2 class="cl-h2">0.1.27</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Expanded project/session loading to prefer complete Codex thread metadata, so project chat counts and expanded project histories can reflect the full set of chats instead of only local cache fragments.</li><br/><li>Added per-project chat count display in the left sidebar and a recent-project chat count fallback, making project activity easier to scan without opening every thread.</li><br/><li>Improved chat runtime visibility with a live Working panel, elapsed-seconds label, periodic reconcile while sessions are running, and default full-access sandbox mode for new or resumed chats when configured.</li><br/><li>Tightened mobile chat UX: the minimap and subagent overlays stay out of the way on phones, the composer is more compact and sticky, and the final messages now keep enough bottom space above the mobile input bar.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Restored assistant timestamp rendering after replies finish so completed AI messages keep their visible time markers.</li><br/><li>Hardened client refresh behavior with more reliable streaming/reconcile updates, reducing cases where users had to manually refresh the page to see the assistant reply.</li><br/></ul><br/><h2 class="cl-h2">0.1.25</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Reworked the chat message surface with a live process panel that keeps tool calls, thinking blocks, and runtime status visible while a Codex session is running.</li><br/><li>Added floating preview windows for images and PDFs, including gallery navigation for generated image groups, so visual files no longer need to occupy right-panel tabs.</li><br/><li>Expanded the chat input toolbar with a slash-command menu and practical prompt shortcuts for <code class="cl-code">/memory</code>, <code class="cl-code">/init</code>, and <code class="cl-code">/goal</code>, while keeping <code class="cl-code">/compact</code> as the only true native command.</li><br/><li>Added persistent app settings for default sandbox mode and auto-restart, and wired the default sandbox choice into new sessions and restored threads.</li><br/><li>Upgraded the project sidebar to support stable project ordering with pinning and manual reorder metadata, while keeping project history lazy-loaded.</li><br/></ul><br/><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Simplified the CLI help output by removing app-specific environment variable details from the default help screen.</li><br/></ul><br/><h2 class="cl-h2">0.1.24</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Reduced global install weight by moving build-only frontend packages out of runtime dependencies while keeping the production <code class="cl-code">.next</code> package layout.</li><br/><li>Kept the npm package source-minimized: published files still contain production build artifacts, CLI files, defaults, and public assets rather than app/component source trees.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Added a package check that prevents build-only frontend libraries from accidentally returning to runtime dependencies.</li><br/></ul><br/><h2 class="cl-h2">0.1.23</h2></p><p class="cl-p"><h3 class="cl-h3">Maintenance</h3><br/><ul class="cl-ul"><li>Released the verified 0.1.22 project sidebar, lazy session loading, and new-chat rollout handling changes as the current patch version.</li><br/><li>Confirmed the local development server can run on an alternate Next.js dev port when the default port is already occupied.</li><br/></ul><br/><h2 class="cl-h2">0.1.22</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Reworked the left sidebar project list to a CodePilot-style Threads view with compact expandable project rows and hover actions for starting a chat in a project.</li><br/><li>Updated the add-project dialog so users can either browse server folders or manually enter a project path and use it directly.</li><br/><li>Kept project session history lazy-loaded per project so opening the sidebar does not eagerly read every Codex thread.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed session restore paths to use lightweight thread metadata lookup before loading full history, preventing old sessions from being blocked by unrelated project/session scans.</li><br/><li>Treated missing Codex rollouts and not-found thread reads as absent sessions instead of hard failures.</li><br/><li>Skipped <code class="cl-code">thread/resume</code> before the first prompt for newly created chats, avoiding <code class="cl-code">no rollout found</code> errors on new thread startup.</li><br/></ul><br/><h2 class="cl-h2">0.1.21</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Reworked the left sidebar project channel to match the AnnoVibe grouped project view: all chat projects are shown, project chat history is collapsible, and only the current or most recently active project expands by default.</li><br/><li>Added a right-panel Tools tab that shows live Codex chat runtime status, including phase, model, active tools, wait time, last event, and abort control.</li><br/><li>Added a lightweight Starfleet-inspired favicon.</li><br/><li>Opened the right panel on Files by default after removing the Report tab.</li><br/></ul><br/><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Removed the Analysis Report tab, report update parsing, report prompt injection, report storage, and report API surface.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Exposed <code class="cl-code">/api/agent/runtime</code> for UI runtime polling and expanded runtime state tracking for running sessions.</li><br/></ul><br/><h2 class="cl-h2">0.1.20</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Wait for the <code class="cl-code">connected</code> SSE event before sending the first prompt in new and resumed chats, so the event subscription is live before Codex emits turn events.</li><br/><li>Treat agent event stream connection timeouts as send failures instead of entering "Waiting for model...", and clean up unconfirmed EventSource connections.</li><br/><li>Prevent duplicate sends while a chat is still creating its session or waiting for SSE setup.</li><br/><li>Send the SSE <code class="cl-code">connected</code> event only after the server has registered the session event listener.</li><br/></ul><br/><h2 class="cl-h2">0.1.19</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed new chats getting stuck on "Waiting for model..." after the temporary new-session view switches to the real Codex thread id.</li><br/><li>Scoped EventSource cleanup to the session id it owns so session creation, model-switch forks, and reconnects do not accidentally close the active SSE stream.</li><br/></ul><br/><h2 class="cl-h2">0.1.18</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Moved the file explorer out of the left sidebar into a persistent right-panel Files tab.</li><br/><li>Restored the left sidebar project list as an expanded project tree, with only the most recently active or current project's chats expanded by default.</li><br/><li>Open PDF and image files in draggable preview windows instead of occupying right-panel file tabs.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Kept project chat loading scoped per project so expanding one project's history does not force all project histories to load at once.</li><br/></ul><br/><h2 class="cl-h2">0.1.17</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added the Annodex Router provider so Codex app-server now sees one stable <code class="cl-code">annodex-router</code> provider per workspace while Annodex routes real provider/model requests by wire model key.</li><br/><li>Centralized Responses and Chat Completions routing in the local router, reusing the compat proxy translation path for Chat-only providers.</li><br/><li>Kept legacy multi-provider workspace env generation available as a rollback/test path.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Resumed chats now bind the current wire model before each prompt, allowing historical chats to continue and switch models without losing the thread.</li><br/><li>Prevented <code class="cl-code">annodex-router</code> provider ids and hashed wire model keys from leaking into UI session runtime, history rendering, and context usage recovery.</li><br/><li>Preserved protocol correctness by keeping <code class="cl-code">turn/start</code> provider-stable and sending only the wire model id for each turn.</li><br/></ul><br/><h2 class="cl-h2">0.1.11</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Router/relay providers (DeepRouter, OpenRouter, etc.) now default to Responses API without the compat proxy, matching codex CLI behavior and eliminating ~6s of SSE translation latency.</li><br/><li>New chats auto-select a default model from annodex providers.json when no codex config.toml default is set.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Cross-provider model switching no longer forces a full ChatWindow remount, preserving the selected model across the fork so the UI does not appear blank after switching.</li><br/><li>Session-change effect uses <code class="cl-code">[session?.id]</code> dependency instead of mount-only, with a ref guard to avoid reconnecting the already-live EventSource after the first message creates a session.</li><br/></ul><br/><h2 class="cl-h2">0.1.10</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added collapsible "Chats" section in the sidebar, matching the existing Project and Explorer toggle behavior, with session count display.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed cross-provider session context loading (e.g. DeepRouter threads queried through DeepSeek server) by looking up the session's stored provider runtime before choosing a codex app-server instance.</li><br/><li>Moved <code class="cl-code">codexServerEnvForModel</code> to a shared location to avoid circular imports between <code class="cl-code">rpc-manager</code> and <code class="cl-code">session-reader</code>.</li><br/></ul><br/><h2 class="cl-h2">0.1.9</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed cross-provider model switching (e.g. DeepSeek → DeepRouter) silently creating a fresh thread instead of leaking a "thread not found" error, since each codex app-server instance only knows its own threads.</li><br/></ul><br/><h2 class="cl-h2">0.1.8</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added per-provider <code class="cl-code">reasoningConfig</code> to <code class="cl-code">providers.json</code>, allowing explicit control over thinking/reasoning parameter mapping (thinkingParam, effortParam, effortValueMode) when the compat proxy translates OpenAI Resposnes to Chat Completions. Falls back to hardcoded provider defaults when not configured.</li><br/><li>Vulcan salute (LLAP 🖖) favicon replacing the generic hand icon.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>GPT-pattern models (e.g. <code class="cl-code">gpt-5.5</code>) on Chat Completions providers like DeepRouter no longer force <code class="cl-code">openai-responses</code>; they now inherit the provider's API setting, ensuring the compat proxy starts and translates correctly.</li><br/><li>Included <code class="cl-code">reasoningConfig</code> fingerprint in the codex app-server instance key so switching models with different thinking parameter mappings creates a fresh compat proxy instead of reusing a stale one.</li><br/></ul><br/><h2 class="cl-h2">0.1.7</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Moved <code class="cl-code">-c</code> global config overrides before the <code class="cl-code">app-server</code> subcommand so Codex app-server correctly loads dynamic provider settings (DeepSeek, DeepRouter, etc.), fixing sessions that were stuck on "Waiting for model...".</li><br/><li>Fixed DeepRouter/OpenRouter API detection — now correctly identified as Chat Completions providers instead of defaulting to OpenAI Responses, ensuring the compat proxy translates requests properly.</li><br/><li>Added <code class="cl-code">crazyrouter</code>, <code class="cl-code">therouter</code> to Chat Completions provider patterns and compat proxy detection for consistent routing.</li><br/></ul><br/><h2 class="cl-h2">0.1.6</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Kept UI-managed providers and Codex home providers distinct when their ids or model names collide, so duplicate models such as <code class="cl-code">gpt-5.5</code> resolve to the selected source.</li><br/><li>Marked Codex-loaded providers as read-only in the Models settings UI and prevented them from being written back to annodex provider config.</li><br/><li>Replaced the old pi favicon with an LLAP hand favicon.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Resolved provider normalization and app-server switching issues that could send a UI-configured deeprouter GPT model through a stale DeepSeek-compatible connection.</li><br/><li>Added session alias handling when Codex cannot resume an old thread and creates a replacement thread, fixing restored-session <code class="cl-code">thread not found</code> failures.</li><br/><li>Removed the misleading Steer and Follow-up input controls because Codex app-server does not support native steer or queued follow-up operations.</li><br/></ul><br/><h2 class="cl-h2">0.1.5</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added collapsible Project controls in the left sidebar, matching the Explorer section behavior.</li><br/><li>Made the Project header refresh projects and current project sessions when toggled, while keeping the dedicated refresh button for refresh-only updates.</li><br/><li>Improved deeprouter and mixed-provider model handling so GPT-style models can use OpenAI Responses while DeepSeek/Kimi/Qwen-style models use Chat Completions through the compat proxy.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Switched Codex app-server connections when the UI model/provider changes, preventing a selected deeprouter GPT model from being sent through a stale DeepSeek provider connection.</li><br/><li>Preserved <code class="cl-code">custom</code> providers in session runtime so restored sessions keep the correct provider context.</li><br/><li>Merged Codex <code class="cl-code">~/.codex/config.toml</code> and <code class="cl-code">auth.json</code> defaults with annodex-managed provider models, including API key discovery from Codex auth state.</li><br/></ul><br/><h2 class="cl-h2">0.1.4</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Restored Codex token statistics in the top bar by reading <code class="cl-code">token_count</code> events from local Codex session JSONL history.</li><br/><li>Added context usage recovery for Codex app-server sessions, including context window fallback from known model defaults and configured models.</li><br/><li>Attached per-turn token usage to assistant messages when Codex history includes usage snapshots.</li><br/><li>Display context usage as used tokens over context window, with percentage detail in the tooltip.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Avoided double-counting duplicate Codex token snapshots emitted during the same turn.</li><br/><li>Kept live agent state aligned with recovered context usage after refresh or idle resume.</li><br/></ul><br/><h2 class="cl-h2">0.1.3</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Aligned model settings with annodex's Codex Web target by supporting only the two backend protocols that actually run: OpenAI Responses and Chat Completions through the compat proxy.</li><br/><li>Added provider protocol inference so DeepSeek/Kimi/Qwen/Zhipu-style endpoints default to Chat Completions while OpenAI and deeprouter-style endpoints default to Responses.</li><br/><li>Made model testing perform a real lightweight provider request instead of returning a placeholder success.</li><br/><li>Preserved model-level protocol overrides, reasoning flags, thinking-level maps, and compatibility metadata across save/load.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Reused Codex app-server processes only when provider protocol, base URL, API key source, and context window match, preventing stale credentials after model settings changes.</li><br/><li>Passed thinking-level defaults into the Chat Completions compat proxy for reasoning-capable providers.</li><br/><li>Kept model, skills, projects, and session APIs aligned with <code class="cl-code">CODEX_HOME</code> and active Codex runtime state.</li><br/></ul><br/><h2 class="cl-h2">0.1.2</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Load projects, sessions, skills, and model settings from local Codex/annodex state without blocking on a cold <code class="cl-code">codex app-server</code> startup.</li><br/><li>Read Codex-native skills from project, user, and system skill directories, and install skills with the Codex agent target.</li><br/><li>Make model configuration work with just <code class="cl-code">baseUrl</code>, <code class="cl-code">apiKey</code>, and a manually entered model id; model discovery is now optional.</li><br/><li>Surface managed-server update and idle-restart state in the Web UI top bar.</li><br/><li>Improve Analysis Report prompting and fallback generation with representative figure links and richer output file notes.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed settings panels that could remain stuck on loading for projects, skills, and models.</li><br/><li>Preserved Codex defaults from <code class="cl-code">~/.codex/config.toml</code> unless the user explicitly changes annodex-managed defaults.</li><br/><li>Scoped session listing to the active project and skipped injected context in previews.</li><br/></ul><br/><h2 class="cl-h2">0.8.17</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added streaming progress updates and cancel support for skill installs.</li><br/><li>Made <code class="cl-code">npx skills</code> invocation non-interactive and increased the install timeout for slow GitHub clones.</li><br/><li>Improved skill install error cleanup so spinner control codes and npm first-run warnings do not obscure the real failure.</li><br/><li>Fixed the npm publish workflow package name after the AnnoVibe rename.</li><br/></ul><br/><h2 class="cl-h2">0.8.16</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Auto-detect image-capable models during Models discovery and import them with <code class="cl-code">input: ["text", "image"]</code>.</li><br/><li>Show an <code class="cl-code">image</code> capability marker in the Models discovery list for imported vision models.</li><br/></ul><br/><h2 class="cl-h2">0.8.15</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed Plot tool preset activation so new sessions actually allow <code class="cl-code">kernel_plot_*</code> tools.</li><br/><li>Kept Plot mode synced on existing sessions after idle wrapper recreation or later prompts.</li><br/><li>Prevented Plot mode from being implicitly enabled when restoring ordinary sessions.</li><br/></ul><br/><h2 class="cl-h2">0.8.14</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added idle-aware auto-restart for managed AnnoVibe servers after package updates.</li><br/><li>Improved bioinformatics analysis reporting so completed analysis runs create topic-scoped Report updates, including large PDF/result directories.</li><br/><li>Prefer generated UI widgets over Mermaid for diagrams unless raw Mermaid/source output is explicitly requested.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed PDF.js compatibility in browsers missing <code class="cl-code">Uint8Array.prototype.toHex</code>.</li><br/><li>Prevented Mermaid syntax errors from flooding or crashing the chat UI.</li><br/><li>Added clearer sidebar API error messages and ignored local <code class="cl-code">.pi/</code> workspace data.</li><br/></ul><br/><h2 class="cl-h2">0.8.12</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Renamed the product surface from Pidex to AnnoVibe / annovibe.</li><br/><li>Added AnnoVibe version checking with npm update command hints.</li><br/><li>Added plot kernel status APIs, memory display, release action, and idle timeout settings.</li><br/><li>Kept legacy pidex settings, auth cookies, and CLI state files compatible during migration.</li><br/></ul><br/><h2 class="cl-h2">0.7.9</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li><strong>Global file editor in right panel</strong> — soul.md and harness.md now open in right panel with CodeMirror, instead of inline sidebar textarea.</li><br/></ul><br/><h2 class="cl-h2">0.7.8</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li><strong>stderr null reference</strong> on daemon detach.</li><br/></ul><br/><h2 class="cl-h2">0.7.7</h2></p><p class="cl-p"><ul class="cl-ul"><li>Updated README with all features and CLI commands.</li><br/></ul><br/><h2 class="cl-h2">0.7.6</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li><strong>Login redirect</strong> — auth env was exposed to <code class="cl-code">next.config.ts</code> so Edge Runtime middleware can read it.</li><br/><li><strong>Password management</strong> — <code class="cl-code">annovibe passwd</code> (change), <code class="cl-code">annovibe passwd --reset</code> (remove). Password stored at <code class="cl-code">~/.pi/agent/web-auth.json</code>.</li><br/></ul><br/><h2 class="cl-h2">0.7.5</h2></p><p class="cl-p"><h3 class="cl-h3">New Features</h3><br/><ul class="cl-ul"><li><strong>CLI commands</strong> — <code class="cl-code">annovibe --version</code>, <code class="cl-code">annovibe --help</code>, <code class="cl-code">annovibe update</code> (self-update from npm).</li><br/><li><strong>Version check</strong> — auto-checks npm for newer version on startup.</li><br/></ul><br/><h2 class="cl-h2">0.7.4</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li><strong>Removed @lobehub/icons</strong> — replaced 25 provider icons with inline SVGs. Eliminates @lobehub/ui → antd → @emoji-mart heavy dependency chain. No more peer dependency warnings on install.</li><br/></ul><br/><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li><strong>Daemon mode</strong> — annovibe auto-detaches after startup, returns terminal prompt while server runs in background.</li><br/></ul><br/><h2 class="cl-h2">0.7.2</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li><strong>Login redirect broken</strong> — <code class="cl-code">router.push()</code> not sending <code class="cl-code">SameSite=Lax</code> cookie, causing endless login loop. Fixed with <code class="cl-code">window.location.href</code> hard navigation.</li><br/><li><strong>npm-publish workflow</strong> — explicit <code class="cl-code">.npmrc</code> auth token, handle already-published packages, fix <code class="cl-code">useSearchParams</code> Suspense wrapper, split <code class="cl-code">auth-token.ts</code> from bcryptjs for Edge Runtime compat.</li><br/></ul><br/><h2 class="cl-h2">0.7.1</h2></p><p class="cl-p"><h3 class="cl-h3">New Features</h3><br/><ul class="cl-ul"><li><strong>Streaming widgets</strong> — <code class="cl-code">show-widget</code> fence support. LLM outputs charts/plots/SVG inline during streaming, rendered in sandboxed iframe with postMessage protocol.</li><br/><li><strong>Visualization harness</strong> — global <code class="cl-code">harness.md</code> behavioral constraints. Default template covers when to visualize, chart type guidelines, and matplotlib/R script→base64 PNG embedding.</li><br/><li><strong>Global harness editor</strong> — inline editing in sidebar Context panel (same UX as soul.md).</li><br/></ul><br/><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>harness.md moved from per-project (<code class="cl-code">{cwd}/</code>) to global (<code class="cl-code">~/.pi/agent/</code>) alongside soul.md</li><br/><li>SoulEditor renamed to GlobalEditor (shared by soul.md + harness.md)</li><br/></ul><br/><h2 class="cl-h2">0.7.0</h2></p><p class="cl-p"><h3 class="cl-h3">New Features</h3><br/><ul class="cl-ul"><li><strong>Password authentication</strong> — optional password protection (like Jupyter). Set on first start via CLI prompt or <code class="cl-code">ANNOVIBE_PASSWORD</code> env var. bcrypt-hashed, HMAC-signed session cookies.</li><br/><li><strong>Subagent panel</strong> — track subagent runs (active/completed/failed) in a slide-out panel in the chat area.</li><br/><li><strong>Resizable panels</strong> — drag sidebar and right panel dividers to resize. Widths persist via localStorage.</li><br/><li><strong>Document viewers</strong> — PDF, DOCX, XLSX, PPTX preview in sidebar file explorer and drag-drop attachments in chat.</li><br/><li><strong>Text file editing</strong> — CodeMirror 6 editor with syntax highlighting for 10+ languages. Ctrl+S to save.</li><br/><li><strong>Project Context</strong> — sidebar section for soul.md (global, Spock personality), memory.md (project-level, self-updating), and AGENTS.md.</li><br/></ul><br/><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Renamed from <code class="cl-code">@agegr/pi-web</code> to <code class="cl-code">@seqyuan/annovibe</code></li><br/><li>SSE reconnection now works during tool execution (not just text streaming)</li><br/><li>File explorer auto-refreshes on custom path changes</li><br/><li>Custom messages (<code class="cl-code">subagent-notify</code>) now rendered in chat</li><br/><li>soul.md / memory.md auto-injected into system prompt at session creation</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li><code class="cl-code">xdg-open</code> crash on systems without xdg-utils installed</li><br/><li>Session switching no longer loses in-progress agent responses</li><br/></ul></p>0:{"P":null,"c":["","docs","changelog"],"q":"","i":false,"f":[[["",{"children":["docs",{"children":["changelog",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fddca953485158e4.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/467c4b6fee759c2e.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"__variable_66b8ca","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem(\"annodex-theme\");if(t===\"dark\")document.documentElement.classList.add(\"dark\")}catch(e){}})();"}}]}],["$","body",null,{"style":{"minHeight":"100dvh","display":"flex","flexDirection":"column"},"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"style":{"maxWidth":800,"margin":"0 auto","padding":"40px 24px 80px"},"children":[["$","$L5",null,{"href":"/workspace","style":{"display":"inline-flex","alignItems":"center","gap":6,"color":"var(--color-accent, #3b82f6)","textDecoration":"none","fontSize":14,"marginBottom":24},"children":["←"," Back to ","annodex"]}],["$","div",null,{"className":"changelog-content","dangerouslySetInnerHTML":{"__html":"$6"}}],"$L7"]}],null,"$L8"]}],{},null,false,null]},null,false,"$@9"]},null,false,"$@9"]},null,false,null],"$La",false]],"m":"$undefined","G":["$b",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"X9itNj1gUkUjsFyMXUoOY"}
11
+ 6:Tfc1a,<p class="cl-p"><h2 class="cl-h2">0.1.71</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li><strong>Docs — Project IM</strong>: site docs (en/zh) updated for Settings → WeCom IM setup,</li><br/></ul> pairing-first onboarding (send pairing code before agent runs), <code class="cl-code">annodex im-gateway</code><br/> in the same Linux account, streaming replies, and current storage/API paths.<br/><ul class="cl-ul"><li>Related updates in configuration, usage, and homepage feature copy.</li><br/></ul><br/><h2 class="cl-h2">0.1.70</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li><strong>File download</strong>: Download button in FileViewer toolbars (text, image, audio, PDF,</li><br/></ul> DOCX, XLSX, PPTX). <code class="cl-code">GET /api/files/{path}?type=download</code> streams the original file<br/> with <code class="cl-code">Content-Disposition: attachment</code> (500MB cap).<br/><ul class="cl-ul"><li><strong>Extensions settings</strong>: simpler default panel (name, description, project/chat toggles)</li><br/></ul> with <strong>Advanced</strong> collapse for ID, transport, scope, and MCP install details.<br/><ul class="cl-ul"><li><strong>WeCom IM settings</strong>: prominent enable switch; config fields only when enabled;</li><br/></ul> updated gateway hint; <strong>Save IM settings</strong> as primary action button.<br/><ul class="cl-ul"><li><strong>Model Discover</strong>: infer reasoning/image flags from model metadata on Discover;</li><br/></ul> manual model add keeps thinking/image unchecked by default.</p><p class="cl-p"><h2 class="cl-h2">0.1.69</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li><strong>WeCom IM streaming replies</strong>: <code class="cl-code">POST /api/im/turn</code> with <code class="cl-code">Accept: text/event-stream</code></li><br/></ul> (or <code class="cl-code">?stream=1</code>) streams <code class="cl-code">status</code>, <code class="cl-code">delta</code>, and <code class="cl-code">done</code> events while the agent runs.<br/><ul class="cl-ul"><li><code class="cl-code">annodex-im-gateway</code> consumes the SSE turn stream and pushes partial text to WeCom</li><br/></ul> with a fixed <code class="cl-code">streamId</code> (<code class="cl-code">finish: false</code> during stream, <code class="cl-code">finish: true</code> on completion).<br/><ul class="cl-ul"><li>Tool-running phases still show <code class="cl-code">(working Ns)</code>; assistant text streams with 300ms throttle.</li><br/><li>Sync JSON <code class="cl-code">/api/im/turn</code> kept for tests and curl.</li><br/><li>New <code class="cl-code">annodex im-gateway</code> CLI subcommand (same user's <code class="cl-code">~/.config/annodex</code>).</li><br/><li>Web-auth: localhost requests to <code class="cl-code">/api/im/*</code> and <code class="cl-code">/api/memory/*</code> bypass login so the</li><br/></ul> IM gateway and memory MCP sidecars work when password auth is enabled.</p><p class="cl-p"><h2 class="cl-h2">0.1.68</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li><strong>Multi-user IM gateway</strong>: bot secrets are served over <code class="cl-code">GET /api/im/projects</code> from</li><br/></ul> the annodex server; gateway no longer reads local <code class="cl-code">im-secrets/</code> files.<br/><ul class="cl-ul"><li>New <code class="cl-code">GET /api/im/gateway-token</code> (localhost only): sync gateway token and warn when</li><br/></ul> <code class="cl-code">ANNODEX_CONFIG_DIR</code> differs from the annodex server.<br/><ul class="cl-ul"><li><code class="cl-code">annodex-im-gateway</code>: clearer 401/403 errors; startup token sync; tolerate</li><br/></ul> unwritable <code class="cl-code">im-gateway.json</code> with a helpful message.<br/><ul class="cl-ul"><li>Docs (en/zh) and <strong>Settings → Project → WeCom IM</strong>: multi-account /</li><br/></ul> <code class="cl-code">ANNODEX_CONFIG_DIR</code> guidance.</p><p class="cl-p"><h2 class="cl-h2">0.1.67</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li><code class="cl-code">annodex stop</code>: scan and terminate orphaned <strong>codex app-server</strong> processes left</li><br/></ul> after the Next.js server exits (Linux process-group kill when available).<br/><ul class="cl-ul"><li><code class="cl-code">annodex stop</code> does <strong>not</strong> stop <code class="cl-code">annodex-im-gateway</code>; IM sidecar can stay running</li><br/></ul> while annodex is restarted separately.<br/><ul class="cl-ul"><li><code class="cl-code">annodex doctor</code>: recommend cleaning orphaned codex app-server processes; note</li><br/></ul> when IM gateway is up but annodex is stopped.<br/><ul class="cl-ul"><li><code class="cl-code">annodex-im-gateway</code>: log clearer errors when <code class="cl-code">/api/im/turn</code> fails.</li><br/></ul><br/><h2 class="cl-h2">0.1.66</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>README and docs site (en/zh): align project switcher, IM settings path, and mobile</li><br/></ul> Extensions wording with the v0.1.65 workspace UI.<br/><ul class="cl-ul"><li>Homepage feature copy (<code class="cl-code">home-i18n</code>) updated for pinned sidebar folders and</li><br/></ul> <strong>Settings → Project → WeCom IM</strong>.</p><p class="cl-p"><h2 class="cl-h2">0.1.65</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Sidebar project layout: pinned projects appear as expandable folders with chat</li><br/></ul> history; unpinned projects list in the switcher dropdown; the active unpinned<br/> project shows as a temporary sidebar folder while selected.<br/><ul class="cl-ul"><li>Project IM (WeCom): moved from Tools to <strong>Settings → Project</strong> with a per-project</li><br/></ul> <strong>WeCom IM</strong> expand control.<br/><ul class="cl-ul"><li>Chat UI: remove the per-session “Enabled extensions for this session” banner;</li><br/></ul> extension toggles remain in the input bar.<br/><ul class="cl-ul"><li>Mobile chat input: Extensions control shows icon only (count in tooltip).</li><br/></ul><br/><h2 class="cl-h2">0.1.64</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Docs site i18n: English and Chinese (<code class="cl-code">/docs</code> and <code class="cl-code">/zh/docs</code>) with Fumadocs</li><br/></ul> language switcher and locale-aware navigation.<br/><ul class="cl-ul"><li>New documentation pages: [Project Memory](/docs/memory) and</li><br/></ul> [Project IM (WeCom)](/docs/im) in both languages.<br/><ul class="cl-ul"><li>Homepage, usage, and configuration docs updated for memory, IM, project</li><br/></ul> switcher, and writable <code class="cl-code">$HOME</code> / <code class="cl-code">ANNODEX_CONFIG_DIR</code> guidance.</p><p class="cl-p"><h2 class="cl-h2">0.1.63</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Per-project WeCom IM gateway (v1): optional one bot per project cwd via</li><br/></ul> <code class="cl-code">annodex-im-gateway</code> sidecar and <code class="cl-code">{cwd}/.annodex/im.json</code> config.<br/><ul class="cl-ul"><li>IM APIs: <code class="cl-code">GET/PUT /api/im/project</code>, <code class="cl-code">GET /api/im/projects</code>, <code class="cl-code">POST /api/im/turn</code></li><br/></ul> for gateway integration and synchronous IM replies.<br/><ul class="cl-ul"><li>Tools panel <strong>Project IM</strong> section: enable bot, bot credentials, pairing code,</li><br/></ul> allowlist, and group-chat options (UI-only config, no CLI).<br/><ul class="cl-ul"><li>WeCom pairing: users send project pairing code in IM to join <code class="cl-code">allowedUsers</code>;</li><br/></ul> multi-user allowlist supported with one shared IM Codex thread per project.<br/><ul class="cl-ul"><li>IM unit tests cover config, auth, WeCom message parsing, and simulated IM</li><br/></ul> agent sessions with mocked Codex wrapper.</p><p class="cl-p"><h2 class="cl-h2">0.1.62</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Phase 1 project memory: JSONL working store at</li><br/></ul> <code class="cl-code">~/.config/annodex/memory/<sha1(cwd)>/entries.jsonl</code> with retain, recall, and<br/> reflect via the <code class="cl-code">annodex-memory-mcp</code> stdio MCP server.<br/><ul class="cl-ul"><li>Promote working-memory candidates to project <code class="cl-code">MEMORY.md</code> or <code class="cl-code">CONTEXT.md</code> from</li><br/></ul> the Tools panel or <code class="cl-code">POST /api/memory/promote</code>.<br/><ul class="cl-ul"><li>System prompt injects <code class="cl-code">CONTEXT.md</code> alongside <code class="cl-code">MEMORY.md</code>; <code class="cl-code">buildSystemPrompt()</code></li><br/></ul> uses shared context-file wrappers.<br/><ul class="cl-ul"><li>Tools panel shows memory stats, promotion candidates, and recent entries for</li><br/></ul> the active project.<br/><ul class="cl-ul"><li><code class="cl-code">annodex-memory</code> extension preset in Settings → Extensions; auto-registered in</li><br/></ul> <code class="cl-code">extensions.json</code> on first session start.<br/><ul class="cl-ul"><li>README and docs site: writable <code class="cl-code">$HOME</code> / <code class="cl-code">ANNODEX_CONFIG_DIR</code>, project</li><br/></ul> switcher, extensions, and storage layout.</p><p class="cl-p"><h2 class="cl-h2">0.1.61</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Settings Extensions tab: clip long extension names, IDs, and transport commands</li><br/></ul> in the sidebar list so text no longer overflows into the details panel; form<br/> controls and discovery cards use consistent width constraints and ellipsis.</p><p class="cl-p"><h2 class="cl-h2">0.1.60</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Sidebar project switcher: replace the multi-project PROJECTS channel with a</li><br/></ul> compact dropdown (pi-web style); session list shows the current project only.<br/><ul class="cl-ul"><li>Pin visibility: switcher lists pinned projects plus the active cwd; unpinned</li><br/></ul> projects disappear when you switch away unless explicitly pinned.<br/><ul class="cl-ul"><li>Add project from the switcher dropdown via the existing folder browse dialog</li><br/></ul> (sidebar Add button removed).<br/><ul class="cl-ul"><li>Drag reorder pinned projects in the switcher dropdown; order persists in the</li><br/></ul> project registry.</p><p class="cl-p"><h2 class="cl-h2">0.1.59</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Chat image uploads: pasted images save to <code class="cl-code">{cwd}/.annodex-uploads/</code> via</li><br/></ul> <code class="cl-code">POST /api/images/upload</code>; prompts send <code class="cl-code">localImage</code> paths plus vision data<br/> URLs instead of large inline base64 bodies.<br/><ul class="cl-ul"><li>User messages show path appendix (<code class="cl-code">[User attached image N: /path (name)]</code>) and</li><br/></ul> thumbnails load from disk through <code class="cl-code">/api/files/...?type=read</code>.<br/><ul class="cl-ul"><li>Session history restores images from Codex <code class="cl-code">localImage</code> inputs after reload.</li><br/></ul><br/><h2 class="cl-h2">0.1.58</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Codex native <code class="cl-code">/goal</code>: slash command calls <code class="cl-code">thread/goal/set|get|clear</code> instead of</li><br/></ul> inserting a prompt template; <code class="cl-code">ThreadGoalPanel</code> shows objective, status, token/time<br/> progress; goal state loads on session open and updates via SSE.<br/><ul class="cl-ul"><li>Subagent UI: top-right button shows only while subagent runs are active; panel</li><br/></ul> auto-closes when all runs finish.</p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Subagent status merge prefers terminal states (failed/completed) over stale</li><br/></ul> <code class="cl-code">running</code>; dedupe by <code class="cl-code">threadId</code>; unknown Codex statuses default to <code class="cl-code">paused</code>.<br/><ul class="cl-ul"><li>Idle session load finalizes in-flight subagent runs so historical sessions no</li><br/></ul> longer show a stuck active badge after failures.<br/><ul class="cl-ul"><li>Clear subagent state immediately when switching sessions.</li><br/></ul><br/><h2 class="cl-h2">0.1.57</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Stream session manager (<code class="cl-code">lib/stream-session-manager.ts</code>): client-side snapshot</li><br/></ul> accumulator survives React remounts and SSE reconnects; thinking phases, tool<br/> calls, and text merge in one place instead of local reducers.<br/><ul class="cl-ul"><li>Session reader: merge reasoning, tool calls, and text within a Codex turn into</li><br/></ul> one assistant message (with paired toolResult rows) for cleaner history after<br/> reload.<br/><ul class="cl-ul"><li>Waiting UX: <code class="cl-code">StreamingStatusBar</code> shows live elapsed seconds and real runtime</li><br/></ul> phase; time-phased labels during the pre-first-token gap; ProcessPanel<br/> waiting shell appears immediately on send.<br/><ul class="cl-ul"><li>Send flow: optimistic running state and stream shell start before SSE connect;</li><br/></ul> running reconcile no longer replaces messages mid-turn.</p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Remove <code class="cl-code">message_end</code> mid-turn append; canonical state comes from <code class="cl-code">agent_end</code></li><br/></ul> reconcile only, reducing duplicate assistant replies.<br/><ul class="cl-ul"><li>Optimistic user message dedup via <code class="cl-code">pendingOptimisticUserRef</code> and merge on</li><br/></ul> reload, fixing duplicate user bubbles after send.<br/><ul class="cl-ul"><li>Streaming UI: thinking/tools render only in ProcessPanel during live turns,</li><br/></ul> not inline twice.</p><p class="cl-p"><h2 class="cl-h2">0.1.56</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>macos-codex-security.js: needsRepairBeforeSpawn now also checks</li><br/></ul> spctl --assess (5s timeout) after codesign --verify passes.<br/> codesign may report 'valid on disk' even when spctl detects<br/> CSSMERR_TP_CERT_REVOKED — only spctl checks Apple's revocation DB.<br/> This makes auto-repair work on first spawn after npm update,<br/> eliminating the need for manual <code class="cl-code">annodex doctor --repair</code>.<br/><ul class="cl-ul"><li>macos-codex-security.js: spctl timeout now treated as needing repair.</li><br/></ul> A valid cert should return quickly; a slow response usually means the<br/> revocation check is happening against a revoked cert. Worst case:<br/> unnecessary ad-hoc re-sign, which is harmless.</p><p class="cl-p"><h2 class="cl-h2">0.1.55</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>codex-server.ts: resolveCodexNativeBinary now searches annodex's own</li><br/></ul> node_modules (join(__dirname, '..', 'node_modules')), fixing the path<br/> mismatch where the doctor repaired the native binary but spawn used a<br/> JS shim (node_modules/.bin/codex). The shim→native grandchild exec<br/> triggered macOS Gatekeeper SIGKILL even after repair.<br/><ul class="cl-ul"><li>macos-codex-security.js: prepareMacOSCodexForSpawn now resolves the</li><br/></ul> underlying native binary when given a JS shim path, and repairs that<br/> binary directly. Added resolveNativeBinaryFromShim() helper.</p><p class="cl-p"><h2 class="cl-h2">0.1.54</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>macOS: ad-hoc codesign repair for revoked codex Developer ID certificate</li><br/></ul> (CSSMERR_TP_CERT_REVOKED). New <code class="cl-code">lib/macos-codex-security.js</code> strips revoked<br/> signatures and applies <code class="cl-code">codesign --force --sign -</code> before spawn, following<br/> the hermes-agent recovery pattern.<br/><ul class="cl-ul"><li>doctor: add <code class="cl-code">--repair</code> mode for deep quarantine clear and ad-hoc signing.</li><br/></ul> Add <code class="cl-code">codesign verify</code> output alongside <code class="cl-code">spctl</code> for dual diagnostic view.<br/> Warn when repo/runtime is inside macOS protected folders (Desktop, Documents,<br/> Downloads, iCloud Drive).<br/><ul class="cl-ul"><li>next.config.ts: allow <code class="cl-code">127.0.0.1</code> and <code class="cl-code">localhost</code> in <code class="cl-code">allowedDevOrigins</code> for</li><br/></ul> Next.js 16 HMR compatibility.</p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>codex-server.ts: removed inline <code class="cl-code">clearMacOSQuarantine()</code> which performed</li><br/></ul> slow recursive xattr on every spawn. Replaced with fast <code class="cl-code">prepareMacOSCodexForSpawn</code><br/> that only validates the codex binary signature (3s timeout, no spctl).<br/><ul class="cl-ul"><li>Hot path no longer calls <code class="cl-code">spctl --assess</code> or recursive xattr, eliminating</li><br/></ul> 20-80s stalls on macOS with large Documents folders.</p><p class="cl-p"><h2 class="cl-h2">0.1.53</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>macOS: default transport switched from WebSocket to stdio (matching</li><br/></ul> Windows), removing the network-server code path that triggered hardened<br/> runtime entitlement checks and Gatekeeper reinforcement on Apple Silicon.<br/><ul class="cl-ul"><li>macOS: child process no longer spawned with <code class="cl-code">detached: true</code>, matching</li><br/></ul> hello-halo's proven spawning strategy. Combined with the stdio transport<br/> change, this avoids the session-leader security path that Gatekeeper may<br/> flag.<br/><ul class="cl-ul"><li>macOS: <code class="cl-code">clearMacOSQuarantine()</code> now also runs <code class="cl-code">spctl --assess</code> on the</li><br/></ul> resolved native binary and attempts <code class="cl-code">spctl --add</code> if the assessment is<br/> not accepted, providing an additional approval layer beyond <code class="cl-code">xattr -cr</code>.<br/><ul class="cl-ul"><li>Direct native binary spawn: <code class="cl-code">resolveCodexNativeBinary()</code> resolves the</li><br/></ul> vendored codex binary (bypassing the JS shim) to avoid the grandchild<br/> process hop that Gatekeeper intercepts even when quarantine is cleared.<br/><ul class="cl-ul"><li>Added <code class="cl-code">/docs/changelog</code> page that renders CHANGELOG.md in the annodex UI.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>macOS: corrected kill-on-close logic to use process-group kill only on</li><br/></ul> Linux (where detached is still true), preventing accidental signal<br/> propagation to annodex's own process group on macOS.<br/><ul class="cl-ul"><li>macOS: improved Gatekeeper diagnostic message with <code class="cl-code">spctl --add</code> and</li><br/></ul> manual Terminal-approval workaround instructions.</p><p class="cl-p"><h1 class="cl-h1">Changelog</h1></p><p class="cl-p"><h2 class="cl-h2">0.1.52</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>macOS: <code class="cl-code">clearMacOSQuarantine()</code> now targets the entire <code class="cl-code">@openai/codex</code> package</li><br/></ul> tree and the npm bin shim with <code class="cl-code">xattr -cr</code> (recursive clear-all), not just<br/> the vendored native binary. This resolves cases where macOS Gatekeeper/XProtect<br/> killed the process even after <code class="cl-code">com.apple.quarantine</code> was removed from the<br/> vendored binary alone.<br/><ul class="cl-ul"><li>macOS: improved the Gatekeeper kill diagnostic message with a one-liner</li><br/></ul> <code class="cl-code">xattr -cr</code> fix command.</p><p class="cl-p"><h2 class="cl-h2">0.1.51</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>macOS: <code class="cl-code">lib/codex-server.ts</code> now automatically clears the <code class="cl-code">com.apple.quarantine</code></li><br/></ul> extended attribute from vendored codex native binaries before spawning the<br/> app-server, preventing silent Gatekeeper/XProtect kills that caused "No agent<br/> runtime is active" on macOS.<br/><ul class="cl-ul"><li>macOS: improved <code class="cl-code">proc.on("exit")</code> diagnostics — when the codex process is</li><br/></ul> killed by a signal, the server log now includes a macOS Gatekeeper hint with<br/> manual fix instructions.</p><p class="cl-p"><h2 class="cl-h2">0.1.50</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Ignored local <code class="cl-code">tmp/</code> protocol scratch files and the uncurated site image <code class="cl-code">site/public/images/搜索框传播样式-白色版.png</code> so they no longer pollute the release worktree or get staged by accident.</li><br/></ul><br/><h2 class="cl-h2">0.1.49</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Finalized in-flight subagent runs when a turn ends or the user aborts, so the Subagent panel no longer leaves stale <code class="cl-code">running</code> / <code class="cl-code">pending</code> entries hanging after cancellation or failure.</li><br/></ul><br/><h2 class="cl-h2">0.1.48</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Added first-pass Extensions management in Settings and chat, including per-session extension visibility and toggles for enabled vs available extensions.</li><br/><li>Added a browser-use extension testing checklist at <code class="cl-code">docs/browser-use-extension-test-plan.md</code> to document the minimum end-to-end validation flow.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Synced saved enabled MCP extensions into the Codex MCP registry on save so newly configured servers can be discovered by runtime sessions without extra manual registration.</li><br/></ul><br/><h2 class="cl-h2">0.1.47</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Added a WeChat follow card on the website homepage pointing users to the <code class="cl-code">seqyuan</code>公众号 for updated annodex tutorials and Windows setup guidance.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Sidebar: increased project/chat loading timeout from 15s to 30s and converted abort/timeout failures into friendly retry messages, reducing macOS <code class="cl-code">AbortError: signal is aborted without reason</code> reports during slow Codex startup.</li><br/><li>Skills: made skill path validation cross-platform by replacing hard-coded POSIX <code class="cl-code">/.codex/skills/</code> checks with normalized path resolution, fixing Windows skill search/install follow-up operations against user and project <code class="cl-code">.codex/skills</code> directories.</li><br/></ul><br/><h2 class="cl-h2">0.1.46</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Expanded the website quick start with detailed Windows Miniforge installation, Codex initialization, Annodex launch, and DeepSeek model setup steps.</li><br/><li>Added a screenshot-based Usage Guide covering model configuration, skills, file preview, runtime monitoring, and mobile browser usage.</li><br/><li>Added product screenshots to the homepage and documentation overview.</li><br/><li>Documented platform app-server transport defaults and added startup logging for the selected Codex app-server transport.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Ensured website documentation references tracked screenshot assets so published docs render images correctly.</li><br/></ul><br/><h2 class="cl-h2">0.1.45</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Added a wildcard Codex app-server notification hook so annodex can normalize all incoming app-server events consistently across WebSocket and stdio transports.</li><br/><li>Added optional Codex event diagnostics with ANNODEX_CODEX_EVENT_LOG=1.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Improved streaming output by lazily starting assistant rendering when text deltas arrive before turn or item lifecycle events.</li><br/><li>Added streaming support for Codex reasoning text and reasoning summary deltas.</li><br/><li>Avoided treating completed agent messages as new streamed content when deltas were already received, while preserving completed-message fallback when no deltas arrive.</li><br/></ul><br/><h2 class="cl-h2">0.1.44</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Added dual Codex app-server transports: existing WebSocket mode and a new stdio JSON-RPC mode.</li><br/><li>Windows now defaults to stdio transport, while macOS/Linux keep the existing WebSocket transport.</li><br/><li>Added ANNODEX_CODEX_TRANSPORT=ws|stdio|auto override for transport selection.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Improved Windows compatibility by avoiding local port/listener readiness issues that can leave chats stuck loading or turns stalled.</li><br/><li>Codex server registry keys now include transport mode so WebSocket and stdio app-server instances are not accidentally reused across modes.</li><br/></ul><br/><h2 class="cl-h2">0.1.43</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Windows: completed the Codex app-server JSON-RPC handshake by sending the required <code class="cl-code">initialized</code> notification immediately after <code class="cl-code">initialize</code>, matching CodePilot/hello-halo and fixing cases where sidebar chat loading, thread start/resume, and agent replies could stall.</li><br/><li>Sessions: added a 12-second timeout fallback for workspace <code class="cl-code">thread/list</code> loading so the sidebar no longer stays on "Loading chats..." indefinitely when the workspace app-server is stuck; it falls back to local session summaries instead.</li><br/></ul><br/><h2 class="cl-h2">0.1.42</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Sidebar: renamed project section label from "Threads" to "Projects".</li><br/><li>Sidebar: removed the "drag to sort, pin to top" hint next to the project label.</li><br/></ul><br/><h2 class="cl-h2">0.1.41</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Simplified <code class="cl-code">annodex passwd</code>: terminal access now grants password-reset permission. No old password prompt, single new-password entry. Empty input disables auth. <code class="cl-code">--reset</code> still works as a silent alias for backward compatibility.</li><br/><li>Simplified <code class="cl-code">promptPassword()</code> (first-run setup) to match the single-entry flow.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Windows: <code class="cl-code">.cmd</code>/<code class="cl-code">.bat</code> shim binaries (e.g. <code class="cl-code">codex.cmd</code>) now launch through <code class="cl-code">cmd.exe /d /s /c</code> with <code class="cl-code">windowsVerbatimArguments</code>, matching CodePilot's <code class="cl-code">buildCodexLaunch()</code> pattern. Fixes spawn failures when the codex binary is an npm-installed shim in a path with spaces.</li><br/><li>Windows: <code class="cl-code">findListeningPids()</code> now uses <code class="cl-code">Get-NetTCPConnection</code> (PowerShell) primary and <code class="cl-code">netstat</code> fallback for port detection, replacing the previous blank <code class="cl-code">return []</code> on win32.</li><br/><li>Windows: <code class="cl-code">readProcessCmdline()</code> now supports win32 via <code class="cl-code">Get-CimInstance</code> / <code class="cl-code">wmic</code> fallback.</li><br/></ul></p><p class="cl-p"><h2 class="cl-h2">0.1.40</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed <code class="cl-code">codex</code> CLI not found (<code class="cl-code">ENOENT</code>) on Windows: <code class="cl-code">getCodexExecutablePath()</code> now searches for <code class="cl-code">codex.cmd</code> and <code class="cl-code">codex.exe</code> in addition to <code class="cl-code">codex</code>, scans the global npm <code class="cl-code">node_modules/.bin</code> directory, and uses <code class="cl-code">__dirname</code>-relative lookup for globally-installed annodex. Connection failure errors now include a clear hint about the missing binary path.</li><br/></ul><br/><h2 class="cl-h2">0.1.39</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li><code class="cl-code">handleSend</code> no longer removes the user's message on failure — the message stays visible and a descriptive "Send failed: …" error is shown, making it obvious when an agent request fails instead of silently flashing the message away.</li><br/></ul><br/><h2 class="cl-h2">0.1.38</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Preset providers (DeepSeek, Moonshot AI, Zhipu, MiniMax) now auto-discover models from the provider's API (<code class="cl-code">/v1/models</code>) after entering an API key, instead of using a static preset model list. Falls back to preset models if the API is unreachable.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Added 15-second fetch timeout to <code class="cl-code">loadSessionsForCwd</code> and <code class="cl-code">loadProjects</code> in the sidebar, preventing permanent "Loading chats…" hang on slow or blocked network connections.</li><br/></ul><br/><h2 class="cl-h2">0.1.37</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed constant screen flickering on Windows caused by <code class="cl-code">router.replace("/")</code> navigating away from <code class="cl-code">/workspace</code> and triggering a <code class="cl-code">redirect</code> → remount loop in <code class="cl-code">AppShell</code>. Three <code class="cl-code">handleCwdChange</code> / <code class="cl-code">handleNewSession</code> / <code class="cl-code">handleSessionDeleted</code> paths now use <code class="cl-code">/workspace</code> instead of <code class="cl-code">/</code>.</li><br/></ul><br/><h2 class="cl-h2">0.1.36</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Removed the tracked <code class="cl-code">presentation/</code> publishing assets and root <code class="cl-code">.source/</code> generated files from the Git repository so release secret scanning no longer flags embedded cookies or tokens.</li><br/><li>Removed the obsolete root Fumadocs MDX build hook from the main app, fixing release <code class="cl-code">npm-publish</code> builds that failed on <code class="cl-code">source.config.ts</code> externalization.</li><br/></ul><br/><h2 class="cl-h2">0.1.35</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Refined the mobile chat input sheet interactions so phone users can reach composer actions more reliably without dialog overlays blocking taps near the bottom edge.</li><br/><li>Added built-in provider presets for DeepSeek, Moonshot AI, Zhipu AI, MiniMax, and OpenRouter to speed up API-key-based model setup.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Changed provider preset insertion in the Models dialog to update only the local draft until Save, preventing unsaved provider edits from being clobbered.</li><br/><li>Allowed writable annodex provider entries to override same-id read-only Codex providers from merged config.</li><br/><li>Switched the OpenRouter preset default protocol to OpenAI Responses for correct out-of-box behavior.</li><br/></ul><br/><h2 class="cl-h2">0.1.34</h2></p><p class="cl-p"><h3 class="cl-h3">New</h3><br/><ul class="cl-ul"><li>Added presentation assets for annodex product introduction: HyperFrames HTML composition with 6-scene Chinese narration, TTS audio, and CSS-rendered virtual UI showcasing the browser-based AI workspace experience.</li><br/><li>Added WeChat official account promotional article (<code class="cl-code">presentation/wechat_article.md</code>) targeting bioinformatics researchers.</li><br/><li>Added automated Xiaohongshu (RED) publishing scripts using Selenium/Playwright for one-click note posting with Firefox login session reuse.</li><br/></ul><br/><h3 class="cl-h3">Documentation</h3><br/><ul class="cl-ul"><li>Updated product messaging across presentation and promotion materials: unified URL to <code class="cl-code">annodex.seqyuan.cn</code>, refined value proposition around eliminating ChatGPT/VPN barriers, DeepSeek API format bridging, and bioinformatics-specific generative UI.</li><br/></ul><br/><h2 class="cl-h2">0.1.33</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Simplified the root app back to the local workspace role: <code class="cl-code">/</code> now redirects to <code class="cl-code">/workspace</code>, while the standalone <code class="cl-code">site/</code> subproject remains the only public-facing docs/marketing surface.</li><br/></ul><br/><h3 class="cl-h3">Maintenance</h3><br/><ul class="cl-ul"><li>Removed the duplicated root-app docs route, root MDX loader chain, and mirrored <code class="cl-code">content/docs</code> sources that were superseded by <code class="cl-code">site/</code>.</li><br/><li>Updated lint ignores so <code class="cl-code">site/.next</code> and <code class="cl-code">site/.source</code> generated files do not pollute root-repo lint results.</li><br/></ul><br/><h2 class="cl-h2">0.1.32</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added a standalone <code class="cl-code">site/</code> public documentation subproject so Vercel can deploy the explanation site without exposing the main local workspace app, APIs, or <code class="cl-code">/workspace</code> route.</li><br/><li>Reframed the public-site copy and docs to make the local/LAN product boundary explicit: the hosted site is documentation only, while annodex itself remains a local-first browser workspace.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Restored historical message timestamps by hydrating chat history from local Codex session JSONL records instead of assigning the entire loaded thread the same <code class="cl-code">updatedAt</code> time.</li><br/></ul><br/><h2 class="cl-h2">0.1.31</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added presentation copy and helper scripts for rendering or manually publishing the annodex promo deck and Xiaohongshu post assets.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Normalized assistant messages that arrive as plain strings so the session UI still renders them as text blocks instead of dropping their content.</li><br/><li>Removed outdated public/open-source wording from the presentation deck so the promo materials match the current annodex positioning and repository visibility.</li><br/></ul><br/><h2 class="cl-h2">0.1.30</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added a public-facing landing page and documentation section so annodex now has a clearer project website instead of dropping users directly into the workspace UI.</li><br/><li>Added a dedicated <code class="cl-code">/workspace</code> route for the actual working interface, keeping the browser workspace accessible while allowing <code class="cl-code">/</code> and <code class="cl-code">/docs</code> to serve as product-facing entry points.</li><br/><li>Expanded the documentation set with quick start, installation, configuration, architecture, runtime, and workspace guides aligned to the current annodex product surface.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Corrected project-site and docs copy to reflect the current product structure, including the workspace entry path and the removal of the old Report tab terminology.</li><br/><li>Excluded generated Fumadocs <code class="cl-code">.source/</code> files from linting and git noise, while keeping the authored docs content tracked in the repository.</li><br/></ul><br/><h2 class="cl-h2">0.1.29</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Switched the mobile composer overflow menu outside-click handling to <code class="cl-code">pointerdown</code> with <code class="cl-code">mousedown</code> fallback, so tapping the three-dot button on phones reliably opens the More menu.</li><br/></ul><br/><h2 class="cl-h2">0.1.28</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Cleared the server-side prompt busy state as soon as an <code class="cl-code">agent_end</code> event arrives, so completed assistant replies no longer leave the composer stuck showing the red Stop button.</li><br/></ul><br/><h2 class="cl-h2">0.1.27</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Expanded project/session loading to prefer complete Codex thread metadata, so project chat counts and expanded project histories can reflect the full set of chats instead of only local cache fragments.</li><br/><li>Added per-project chat count display in the left sidebar and a recent-project chat count fallback, making project activity easier to scan without opening every thread.</li><br/><li>Improved chat runtime visibility with a live Working panel, elapsed-seconds label, periodic reconcile while sessions are running, and default full-access sandbox mode for new or resumed chats when configured.</li><br/><li>Tightened mobile chat UX: the minimap and subagent overlays stay out of the way on phones, the composer is more compact and sticky, and the final messages now keep enough bottom space above the mobile input bar.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Restored assistant timestamp rendering after replies finish so completed AI messages keep their visible time markers.</li><br/><li>Hardened client refresh behavior with more reliable streaming/reconcile updates, reducing cases where users had to manually refresh the page to see the assistant reply.</li><br/></ul><br/><h2 class="cl-h2">0.1.25</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Reworked the chat message surface with a live process panel that keeps tool calls, thinking blocks, and runtime status visible while a Codex session is running.</li><br/><li>Added floating preview windows for images and PDFs, including gallery navigation for generated image groups, so visual files no longer need to occupy right-panel tabs.</li><br/><li>Expanded the chat input toolbar with a slash-command menu and practical prompt shortcuts for <code class="cl-code">/memory</code>, <code class="cl-code">/init</code>, and <code class="cl-code">/goal</code>, while keeping <code class="cl-code">/compact</code> as the only true native command.</li><br/><li>Added persistent app settings for default sandbox mode and auto-restart, and wired the default sandbox choice into new sessions and restored threads.</li><br/><li>Upgraded the project sidebar to support stable project ordering with pinning and manual reorder metadata, while keeping project history lazy-loaded.</li><br/></ul><br/><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Simplified the CLI help output by removing app-specific environment variable details from the default help screen.</li><br/></ul><br/><h2 class="cl-h2">0.1.24</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Reduced global install weight by moving build-only frontend packages out of runtime dependencies while keeping the production <code class="cl-code">.next</code> package layout.</li><br/><li>Kept the npm package source-minimized: published files still contain production build artifacts, CLI files, defaults, and public assets rather than app/component source trees.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Added a package check that prevents build-only frontend libraries from accidentally returning to runtime dependencies.</li><br/></ul><br/><h2 class="cl-h2">0.1.23</h2></p><p class="cl-p"><h3 class="cl-h3">Maintenance</h3><br/><ul class="cl-ul"><li>Released the verified 0.1.22 project sidebar, lazy session loading, and new-chat rollout handling changes as the current patch version.</li><br/><li>Confirmed the local development server can run on an alternate Next.js dev port when the default port is already occupied.</li><br/></ul><br/><h2 class="cl-h2">0.1.22</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Reworked the left sidebar project list to a CodePilot-style Threads view with compact expandable project rows and hover actions for starting a chat in a project.</li><br/><li>Updated the add-project dialog so users can either browse server folders or manually enter a project path and use it directly.</li><br/><li>Kept project session history lazy-loaded per project so opening the sidebar does not eagerly read every Codex thread.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed session restore paths to use lightweight thread metadata lookup before loading full history, preventing old sessions from being blocked by unrelated project/session scans.</li><br/><li>Treated missing Codex rollouts and not-found thread reads as absent sessions instead of hard failures.</li><br/><li>Skipped <code class="cl-code">thread/resume</code> before the first prompt for newly created chats, avoiding <code class="cl-code">no rollout found</code> errors on new thread startup.</li><br/></ul><br/><h2 class="cl-h2">0.1.21</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Reworked the left sidebar project channel to match the AnnoVibe grouped project view: all chat projects are shown, project chat history is collapsible, and only the current or most recently active project expands by default.</li><br/><li>Added a right-panel Tools tab that shows live Codex chat runtime status, including phase, model, active tools, wait time, last event, and abort control.</li><br/><li>Added a lightweight Starfleet-inspired favicon.</li><br/><li>Opened the right panel on Files by default after removing the Report tab.</li><br/></ul><br/><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Removed the Analysis Report tab, report update parsing, report prompt injection, report storage, and report API surface.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Exposed <code class="cl-code">/api/agent/runtime</code> for UI runtime polling and expanded runtime state tracking for running sessions.</li><br/></ul><br/><h2 class="cl-h2">0.1.20</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Wait for the <code class="cl-code">connected</code> SSE event before sending the first prompt in new and resumed chats, so the event subscription is live before Codex emits turn events.</li><br/><li>Treat agent event stream connection timeouts as send failures instead of entering "Waiting for model...", and clean up unconfirmed EventSource connections.</li><br/><li>Prevent duplicate sends while a chat is still creating its session or waiting for SSE setup.</li><br/><li>Send the SSE <code class="cl-code">connected</code> event only after the server has registered the session event listener.</li><br/></ul><br/><h2 class="cl-h2">0.1.19</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed new chats getting stuck on "Waiting for model..." after the temporary new-session view switches to the real Codex thread id.</li><br/><li>Scoped EventSource cleanup to the session id it owns so session creation, model-switch forks, and reconnects do not accidentally close the active SSE stream.</li><br/></ul><br/><h2 class="cl-h2">0.1.18</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Moved the file explorer out of the left sidebar into a persistent right-panel Files tab.</li><br/><li>Restored the left sidebar project list as an expanded project tree, with only the most recently active or current project's chats expanded by default.</li><br/><li>Open PDF and image files in draggable preview windows instead of occupying right-panel file tabs.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Kept project chat loading scoped per project so expanding one project's history does not force all project histories to load at once.</li><br/></ul><br/><h2 class="cl-h2">0.1.17</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added the Annodex Router provider so Codex app-server now sees one stable <code class="cl-code">annodex-router</code> provider per workspace while Annodex routes real provider/model requests by wire model key.</li><br/><li>Centralized Responses and Chat Completions routing in the local router, reusing the compat proxy translation path for Chat-only providers.</li><br/><li>Kept legacy multi-provider workspace env generation available as a rollback/test path.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Resumed chats now bind the current wire model before each prompt, allowing historical chats to continue and switch models without losing the thread.</li><br/><li>Prevented <code class="cl-code">annodex-router</code> provider ids and hashed wire model keys from leaking into UI session runtime, history rendering, and context usage recovery.</li><br/><li>Preserved protocol correctness by keeping <code class="cl-code">turn/start</code> provider-stable and sending only the wire model id for each turn.</li><br/></ul><br/><h2 class="cl-h2">0.1.11</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Router/relay providers (DeepRouter, OpenRouter, etc.) now default to Responses API without the compat proxy, matching codex CLI behavior and eliminating ~6s of SSE translation latency.</li><br/><li>New chats auto-select a default model from annodex providers.json when no codex config.toml default is set.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Cross-provider model switching no longer forces a full ChatWindow remount, preserving the selected model across the fork so the UI does not appear blank after switching.</li><br/><li>Session-change effect uses <code class="cl-code">[session?.id]</code> dependency instead of mount-only, with a ref guard to avoid reconnecting the already-live EventSource after the first message creates a session.</li><br/></ul><br/><h2 class="cl-h2">0.1.10</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added collapsible "Chats" section in the sidebar, matching the existing Project and Explorer toggle behavior, with session count display.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed cross-provider session context loading (e.g. DeepRouter threads queried through DeepSeek server) by looking up the session's stored provider runtime before choosing a codex app-server instance.</li><br/><li>Moved <code class="cl-code">codexServerEnvForModel</code> to a shared location to avoid circular imports between <code class="cl-code">rpc-manager</code> and <code class="cl-code">session-reader</code>.</li><br/></ul><br/><h2 class="cl-h2">0.1.9</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed cross-provider model switching (e.g. DeepSeek → DeepRouter) silently creating a fresh thread instead of leaking a "thread not found" error, since each codex app-server instance only knows its own threads.</li><br/></ul><br/><h2 class="cl-h2">0.1.8</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added per-provider <code class="cl-code">reasoningConfig</code> to <code class="cl-code">providers.json</code>, allowing explicit control over thinking/reasoning parameter mapping (thinkingParam, effortParam, effortValueMode) when the compat proxy translates OpenAI Resposnes to Chat Completions. Falls back to hardcoded provider defaults when not configured.</li><br/><li>Vulcan salute (LLAP 🖖) favicon replacing the generic hand icon.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>GPT-pattern models (e.g. <code class="cl-code">gpt-5.5</code>) on Chat Completions providers like DeepRouter no longer force <code class="cl-code">openai-responses</code>; they now inherit the provider's API setting, ensuring the compat proxy starts and translates correctly.</li><br/><li>Included <code class="cl-code">reasoningConfig</code> fingerprint in the codex app-server instance key so switching models with different thinking parameter mappings creates a fresh compat proxy instead of reusing a stale one.</li><br/></ul><br/><h2 class="cl-h2">0.1.7</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Moved <code class="cl-code">-c</code> global config overrides before the <code class="cl-code">app-server</code> subcommand so Codex app-server correctly loads dynamic provider settings (DeepSeek, DeepRouter, etc.), fixing sessions that were stuck on "Waiting for model...".</li><br/><li>Fixed DeepRouter/OpenRouter API detection — now correctly identified as Chat Completions providers instead of defaulting to OpenAI Responses, ensuring the compat proxy translates requests properly.</li><br/><li>Added <code class="cl-code">crazyrouter</code>, <code class="cl-code">therouter</code> to Chat Completions provider patterns and compat proxy detection for consistent routing.</li><br/></ul><br/><h2 class="cl-h2">0.1.6</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Kept UI-managed providers and Codex home providers distinct when their ids or model names collide, so duplicate models such as <code class="cl-code">gpt-5.5</code> resolve to the selected source.</li><br/><li>Marked Codex-loaded providers as read-only in the Models settings UI and prevented them from being written back to annodex provider config.</li><br/><li>Replaced the old pi favicon with an LLAP hand favicon.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Resolved provider normalization and app-server switching issues that could send a UI-configured deeprouter GPT model through a stale DeepSeek-compatible connection.</li><br/><li>Added session alias handling when Codex cannot resume an old thread and creates a replacement thread, fixing restored-session <code class="cl-code">thread not found</code> failures.</li><br/><li>Removed the misleading Steer and Follow-up input controls because Codex app-server does not support native steer or queued follow-up operations.</li><br/></ul><br/><h2 class="cl-h2">0.1.5</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added collapsible Project controls in the left sidebar, matching the Explorer section behavior.</li><br/><li>Made the Project header refresh projects and current project sessions when toggled, while keeping the dedicated refresh button for refresh-only updates.</li><br/><li>Improved deeprouter and mixed-provider model handling so GPT-style models can use OpenAI Responses while DeepSeek/Kimi/Qwen-style models use Chat Completions through the compat proxy.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Switched Codex app-server connections when the UI model/provider changes, preventing a selected deeprouter GPT model from being sent through a stale DeepSeek provider connection.</li><br/><li>Preserved <code class="cl-code">custom</code> providers in session runtime so restored sessions keep the correct provider context.</li><br/><li>Merged Codex <code class="cl-code">~/.codex/config.toml</code> and <code class="cl-code">auth.json</code> defaults with annodex-managed provider models, including API key discovery from Codex auth state.</li><br/></ul><br/><h2 class="cl-h2">0.1.4</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Restored Codex token statistics in the top bar by reading <code class="cl-code">token_count</code> events from local Codex session JSONL history.</li><br/><li>Added context usage recovery for Codex app-server sessions, including context window fallback from known model defaults and configured models.</li><br/><li>Attached per-turn token usage to assistant messages when Codex history includes usage snapshots.</li><br/><li>Display context usage as used tokens over context window, with percentage detail in the tooltip.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Avoided double-counting duplicate Codex token snapshots emitted during the same turn.</li><br/><li>Kept live agent state aligned with recovered context usage after refresh or idle resume.</li><br/></ul><br/><h2 class="cl-h2">0.1.3</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Aligned model settings with annodex's Codex Web target by supporting only the two backend protocols that actually run: OpenAI Responses and Chat Completions through the compat proxy.</li><br/><li>Added provider protocol inference so DeepSeek/Kimi/Qwen/Zhipu-style endpoints default to Chat Completions while OpenAI and deeprouter-style endpoints default to Responses.</li><br/><li>Made model testing perform a real lightweight provider request instead of returning a placeholder success.</li><br/><li>Preserved model-level protocol overrides, reasoning flags, thinking-level maps, and compatibility metadata across save/load.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Reused Codex app-server processes only when provider protocol, base URL, API key source, and context window match, preventing stale credentials after model settings changes.</li><br/><li>Passed thinking-level defaults into the Chat Completions compat proxy for reasoning-capable providers.</li><br/><li>Kept model, skills, projects, and session APIs aligned with <code class="cl-code">CODEX_HOME</code> and active Codex runtime state.</li><br/></ul><br/><h2 class="cl-h2">0.1.2</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Load projects, sessions, skills, and model settings from local Codex/annodex state without blocking on a cold <code class="cl-code">codex app-server</code> startup.</li><br/><li>Read Codex-native skills from project, user, and system skill directories, and install skills with the Codex agent target.</li><br/><li>Make model configuration work with just <code class="cl-code">baseUrl</code>, <code class="cl-code">apiKey</code>, and a manually entered model id; model discovery is now optional.</li><br/><li>Surface managed-server update and idle-restart state in the Web UI top bar.</li><br/><li>Improve Analysis Report prompting and fallback generation with representative figure links and richer output file notes.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed settings panels that could remain stuck on loading for projects, skills, and models.</li><br/><li>Preserved Codex defaults from <code class="cl-code">~/.codex/config.toml</code> unless the user explicitly changes annodex-managed defaults.</li><br/><li>Scoped session listing to the active project and skipped injected context in previews.</li><br/></ul><br/><h2 class="cl-h2">0.8.17</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added streaming progress updates and cancel support for skill installs.</li><br/><li>Made <code class="cl-code">npx skills</code> invocation non-interactive and increased the install timeout for slow GitHub clones.</li><br/><li>Improved skill install error cleanup so spinner control codes and npm first-run warnings do not obscure the real failure.</li><br/><li>Fixed the npm publish workflow package name after the AnnoVibe rename.</li><br/></ul><br/><h2 class="cl-h2">0.8.16</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Auto-detect image-capable models during Models discovery and import them with <code class="cl-code">input: ["text", "image"]</code>.</li><br/><li>Show an <code class="cl-code">image</code> capability marker in the Models discovery list for imported vision models.</li><br/></ul><br/><h2 class="cl-h2">0.8.15</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed Plot tool preset activation so new sessions actually allow <code class="cl-code">kernel_plot_*</code> tools.</li><br/><li>Kept Plot mode synced on existing sessions after idle wrapper recreation or later prompts.</li><br/><li>Prevented Plot mode from being implicitly enabled when restoring ordinary sessions.</li><br/></ul><br/><h2 class="cl-h2">0.8.14</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Added idle-aware auto-restart for managed AnnoVibe servers after package updates.</li><br/><li>Improved bioinformatics analysis reporting so completed analysis runs create topic-scoped Report updates, including large PDF/result directories.</li><br/><li>Prefer generated UI widgets over Mermaid for diagrams unless raw Mermaid/source output is explicitly requested.</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li>Fixed PDF.js compatibility in browsers missing <code class="cl-code">Uint8Array.prototype.toHex</code>.</li><br/><li>Prevented Mermaid syntax errors from flooding or crashing the chat UI.</li><br/><li>Added clearer sidebar API error messages and ignored local <code class="cl-code">.pi/</code> workspace data.</li><br/></ul><br/><h2 class="cl-h2">0.8.12</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>Renamed the product surface from Pidex to AnnoVibe / annovibe.</li><br/><li>Added AnnoVibe version checking with npm update command hints.</li><br/><li>Added plot kernel status APIs, memory display, release action, and idle timeout settings.</li><br/><li>Kept legacy pidex settings, auth cookies, and CLI state files compatible during migration.</li><br/></ul><br/><h2 class="cl-h2">0.7.9</h2></p><p class="cl-p"><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li><strong>Global file editor in right panel</strong> — soul.md and harness.md now open in right panel with CodeMirror, instead of inline sidebar textarea.</li><br/></ul><br/><h2 class="cl-h2">0.7.8</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li><strong>stderr null reference</strong> on daemon detach.</li><br/></ul><br/><h2 class="cl-h2">0.7.7</h2></p><p class="cl-p"><ul class="cl-ul"><li>Updated README with all features and CLI commands.</li><br/></ul><br/><h2 class="cl-h2">0.7.6</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li><strong>Login redirect</strong> — auth env was exposed to <code class="cl-code">next.config.ts</code> so Edge Runtime middleware can read it.</li><br/><li><strong>Password management</strong> — <code class="cl-code">annovibe passwd</code> (change), <code class="cl-code">annovibe passwd --reset</code> (remove). Password stored at <code class="cl-code">~/.pi/agent/web-auth.json</code>.</li><br/></ul><br/><h2 class="cl-h2">0.7.5</h2></p><p class="cl-p"><h3 class="cl-h3">New Features</h3><br/><ul class="cl-ul"><li><strong>CLI commands</strong> — <code class="cl-code">annovibe --version</code>, <code class="cl-code">annovibe --help</code>, <code class="cl-code">annovibe update</code> (self-update from npm).</li><br/><li><strong>Version check</strong> — auto-checks npm for newer version on startup.</li><br/></ul><br/><h2 class="cl-h2">0.7.4</h2></p><p class="cl-p"><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li><strong>Removed @lobehub/icons</strong> — replaced 25 provider icons with inline SVGs. Eliminates @lobehub/ui → antd → @emoji-mart heavy dependency chain. No more peer dependency warnings on install.</li><br/></ul><br/><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li><strong>Daemon mode</strong> — annovibe auto-detaches after startup, returns terminal prompt while server runs in background.</li><br/></ul><br/><h2 class="cl-h2">0.7.2</h2></p><p class="cl-p"><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li><strong>Login redirect broken</strong> — <code class="cl-code">router.push()</code> not sending <code class="cl-code">SameSite=Lax</code> cookie, causing endless login loop. Fixed with <code class="cl-code">window.location.href</code> hard navigation.</li><br/><li><strong>npm-publish workflow</strong> — explicit <code class="cl-code">.npmrc</code> auth token, handle already-published packages, fix <code class="cl-code">useSearchParams</code> Suspense wrapper, split <code class="cl-code">auth-token.ts</code> from bcryptjs for Edge Runtime compat.</li><br/></ul><br/><h2 class="cl-h2">0.7.1</h2></p><p class="cl-p"><h3 class="cl-h3">New Features</h3><br/><ul class="cl-ul"><li><strong>Streaming widgets</strong> — <code class="cl-code">show-widget</code> fence support. LLM outputs charts/plots/SVG inline during streaming, rendered in sandboxed iframe with postMessage protocol.</li><br/><li><strong>Visualization harness</strong> — global <code class="cl-code">harness.md</code> behavioral constraints. Default template covers when to visualize, chart type guidelines, and matplotlib/R script→base64 PNG embedding.</li><br/><li><strong>Global harness editor</strong> — inline editing in sidebar Context panel (same UX as soul.md).</li><br/></ul><br/><h3 class="cl-h3">Changes</h3><br/><ul class="cl-ul"><li>harness.md moved from per-project (<code class="cl-code">{cwd}/</code>) to global (<code class="cl-code">~/.pi/agent/</code>) alongside soul.md</li><br/><li>SoulEditor renamed to GlobalEditor (shared by soul.md + harness.md)</li><br/></ul><br/><h2 class="cl-h2">0.7.0</h2></p><p class="cl-p"><h3 class="cl-h3">New Features</h3><br/><ul class="cl-ul"><li><strong>Password authentication</strong> — optional password protection (like Jupyter). Set on first start via CLI prompt or <code class="cl-code">ANNOVIBE_PASSWORD</code> env var. bcrypt-hashed, HMAC-signed session cookies.</li><br/><li><strong>Subagent panel</strong> — track subagent runs (active/completed/failed) in a slide-out panel in the chat area.</li><br/><li><strong>Resizable panels</strong> — drag sidebar and right panel dividers to resize. Widths persist via localStorage.</li><br/><li><strong>Document viewers</strong> — PDF, DOCX, XLSX, PPTX preview in sidebar file explorer and drag-drop attachments in chat.</li><br/><li><strong>Text file editing</strong> — CodeMirror 6 editor with syntax highlighting for 10+ languages. Ctrl+S to save.</li><br/><li><strong>Project Context</strong> — sidebar section for soul.md (global, Spock personality), memory.md (project-level, self-updating), and AGENTS.md.</li><br/></ul><br/><h3 class="cl-h3">Improvements</h3><br/><ul class="cl-ul"><li>Renamed from <code class="cl-code">@agegr/pi-web</code> to <code class="cl-code">@seqyuan/annovibe</code></li><br/><li>SSE reconnection now works during tool execution (not just text streaming)</li><br/><li>File explorer auto-refreshes on custom path changes</li><br/><li>Custom messages (<code class="cl-code">subagent-notify</code>) now rendered in chat</li><br/><li>soul.md / memory.md auto-injected into system prompt at session creation</li><br/></ul><br/><h3 class="cl-h3">Fixes</h3><br/><ul class="cl-ul"><li><code class="cl-code">xdg-open</code> crash on systems without xdg-utils installed</li><br/><li>Session switching no longer loses in-progress agent responses</li><br/></ul></p>0:{"P":null,"c":["","docs","changelog"],"q":"","i":false,"f":[[["",{"children":["docs",{"children":["changelog",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fddca953485158e4.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/467c4b6fee759c2e.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"__variable_66b8ca","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem(\"annodex-theme\");if(t===\"dark\")document.documentElement.classList.add(\"dark\")}catch(e){}})();"}}]}],["$","body",null,{"style":{"minHeight":"100dvh","display":"flex","flexDirection":"column"},"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"style":{"maxWidth":800,"margin":"0 auto","padding":"40px 24px 80px"},"children":[["$","$L5",null,{"href":"/workspace","style":{"display":"inline-flex","alignItems":"center","gap":6,"color":"var(--color-accent, #3b82f6)","textDecoration":"none","fontSize":14,"marginBottom":24},"children":["←"," Back to ","annodex"]}],["$","div",null,{"className":"changelog-content","dangerouslySetInnerHTML":{"__html":"$6"}}],"$L7"]}],null,"$L8"]}],{},null,false,null]},null,false,"$@9"]},null,false,"$@9"]},null,false,null],"$La",false]],"m":"$undefined","G":["$b",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"EBrS1obb2hYNLHfD1WLgU"}
12
12
  c:I[90484,[],"OutletBoundary"]
13
13
  d:"$Sreact.suspense"
14
14
  10:I[90484,[],"ViewportBoundary"]