@seqyuan/annodex 0.1.24 → 0.1.25

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 (64) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +3 -3
  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/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/_not-found.html +1 -1
  18. package/.next/server/app/_not-found.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  22. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  25. package/.next/server/app/api/agent/new/route.js +1 -1
  26. package/.next/server/app/api/internal/runtime/route.js +1 -1
  27. package/.next/server/app/api/projects/route.js +1 -1
  28. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  29. package/.next/server/app/api/settings/route.js +1 -1
  30. package/.next/server/app/api/version/route.js +1 -1
  31. package/.next/server/app/index.html +1 -1
  32. package/.next/server/app/index.rsc +3 -3
  33. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  34. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  35. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  36. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  37. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  38. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/login.html +1 -1
  40. package/.next/server/app/login.rsc +2 -2
  41. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  42. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  43. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  46. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  47. package/.next/server/app/page.js +13 -11
  48. package/.next/server/app/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app-paths-manifest.json +3 -3
  50. package/.next/server/chunks/402.js +1 -1
  51. package/.next/server/chunks/6429.js +3 -3
  52. package/.next/server/middleware-build-manifest.js +1 -1
  53. package/.next/server/pages/404.html +1 -1
  54. package/.next/server/pages/500.html +1 -1
  55. package/.next/server/server-reference-manifest.json +1 -1
  56. package/.next/static/chunks/app/page-12c31303e01d8139.js +262 -0
  57. package/.next/static/css/eaefa02f8638a351.css +3 -0
  58. package/bin/annodex.js +21 -10
  59. package/lib/app-settings.js +61 -0
  60. package/package.json +2 -1
  61. package/.next/static/chunks/app/page-0a08a25f5bab1118.js +0 -260
  62. package/.next/static/css/45029451a1d7255d.css +0 -3
  63. /package/.next/static/{0nxdx-sPUMqmQaZm7vO-Z → GTXomrhdfb8RQqsW5gcyW}/_buildManifest.js +0 -0
  64. /package/.next/static/{0nxdx-sPUMqmQaZm7vO-Z → GTXomrhdfb8RQqsW5gcyW}/_ssgManifest.js +0 -0
@@ -0,0 +1,3 @@
1
+ @font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/1cdd02902f937a18-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/7deddc85b7ffd1dc-s.p.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/1a3dce5cfb5f7760-s.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/15605e25b523335c-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/641a7b8a5800ee0e-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/4c4b3b30b6bcb2be-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/ec14413c594b3356-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Noto Sans Mono Fallback;src:local("Arial");ascent-override:79.43%;descent-override:21.77%;line-gap-override:0.00%;size-adjust:134.59%}.__className_66b8ca{font-family:Noto Sans Mono,Noto Sans Mono Fallback;font-style:normal}.__variable_66b8ca{--font-noto-mono:"Noto Sans Mono","Noto Sans Mono Fallback"}
2
+
3
+ /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--spacing:.25rem;--leading-relaxed:1.625;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-text-muted:var(--text-muted)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.my-3{margin-block:calc(var(--spacing) * 3)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-\[720px\]{height:720px}.h-full{height:100%}.w-\[720px\]{width:720px}.w-full{width:100%}.max-w-\[820px\]{max-width:820px}.flex-1{flex:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[drop-ripple_2\.4s_ease-out_infinite_backwards\]{animation:drop-ripple 2.4s ease-out infinite backwards}.animate-\[drop-zone-in_0\.15s_ease_both\]{animation:drop-zone-in .15s both}.animate-\[pulse_1\.5s_infinite\]{animation:pulse 1.5s infinite}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\[7px\]{border-radius:7px}.rounded-full{border-radius:3.40282e+38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[rgba\(37\,99\,235\,0\.5\)\]{border-color:#2563eb80}.border-\[rgba\(248\,113\,113\,0\.35\)\]{border-color:#f8717159}.bg-\[rgba\(37\,99\,235\,0\.06\)\]{background-color:#2563eb0f}.bg-\[rgba\(248\,113\,113\,0\.07\)\]{background-color:#f8717112}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-4{padding-top:calc(var(--spacing) * 4)}.font-mono{font-family:var(--font-mono)}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.break-all{word-break:break-all}.text-red-400{color:var(--color-red-400)}.text-text-muted{color:var(--color-text-muted)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.drop-shadow-\[0_6px_18px_rgba\(37\,99\,235\,0\.18\)\]{--tw-drop-shadow-size:drop-shadow(0 6px 18px var(--tw-drop-shadow-color,#2563eb2e));--tw-drop-shadow:var(--tw-drop-shadow-size)}.drop-shadow-\[0_6px_18px_rgba\(37\,99\,235\,0\.18\)\],.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[scrollbar-width\:none\]{scrollbar-width:none}}:root{--bg:#fff;--bg-panel:#f5f5f5;--bg-hover:#eee;--bg-selected:#e8e8e8;--border:#e0e0e0;--text:#1a1a1a;--text-muted:#6b7280;--text-dim:#9ca3af;--accent:#2563eb;--accent-hover:#1d4ed8;--user-bg:#eff6ff;--assistant-bg:#fff;--tool-bg:#f9fafb;--bg-subtle:#00000008}html.dark{--bg:#1a1a1a;--bg-panel:#242424;--bg-hover:#2e2e2e;--bg-selected:#383838;--border:#3a3a3a;--text:#e8e8e8;--text-muted:#9ca3af;--text-dim:#6b7280;--accent:#60a5fa;--accent-hover:#93c5fd;--user-bg:#1e293b;--assistant-bg:#1a1a1a;--tool-bg:#1f2937;--bg-subtle:#ffffff0a}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}*{box-sizing:border-box}body,html{background:var(--bg);height:100%;color:var(--text);overscroll-behavior:none;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px}body{height:100dvh}.resize-handle{background:0 0}.resize-handle:before{content:"";position:absolute;inset:0}.resize-handle-line{background:0 0;width:1px;height:100%;transition:background-color .15s}.resize-handle.resize-handle-dragging .resize-handle-line,.resize-handle:hover .resize-handle-line{background:var(--accent)}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}:root{--font-mono:var(--font-noto-mono),"JetBrains Mono","Fira Code","Consolas",ui-monospace,"PingFang SC","Microsoft YaHei",monospace}code,pre{font-family:var(--font-mono)}.markdown-body{color:var(--text);word-break:break-word;font-size:14px;line-height:1.7}.markdown-body p{margin:0 0 8px}.markdown-body p:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{color:var(--text);margin:10px 0 4px;font-weight:600}.markdown-body h1{font-size:1.15em}.markdown-body h2{font-size:1.05em}.markdown-body h3{font-size:.95em}.markdown-body ol,.markdown-body ul{margin:4px 0 8px;padding-left:20px}.markdown-body li{margin:2px 0}.markdown-body a{color:var(--accent);text-decoration:underline}.markdown-body blockquote{border-left:3px solid var(--border);color:var(--text-muted);margin:4px 0;padding:2px 10px}.markdown-body table{border-collapse:collapse;width:100%;margin:8px 0;font-size:13px}.markdown-body td,.markdown-body th{border:1px solid var(--border);text-align:left;padding:5px 10px}.markdown-body th{background:var(--bg-panel);font-weight:600}.markdown-body hr{border:none;border-top:1px solid var(--border);margin:10px 0}.mermaid-diagram{border:1px solid var(--border);background:var(--bg-panel);border-radius:6px;margin:12px 0;padding:12px;overflow-x:auto}.mermaid-diagram-canvas{min-width:min-content}.mermaid-diagram svg{max-width:100%;height:auto;margin:0 auto}.mermaid-diagram-error-title,.mermaid-diagram-loading{color:var(--text-muted);font-size:12px}.mermaid-diagram-error{border-color:#f8717173}.mermaid-diagram-error-message{color:#f87171;margin-top:4px;font-size:12px}.mermaid-diagram-error pre{background:var(--bg);color:var(--text-muted);border-radius:4px;margin:8px 0 0;padding:8px;overflow-x:auto}.widget-shimmer{background:linear-gradient(90deg,#0000,#8080801f 50%,#0000) 0 0/200% 100%;animation:widget-shimmer 1.5s ease-in-out infinite}@keyframes widget-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.markdown-file-preview{min-height:100%}.markdown-file-preview h1,.markdown-file-preview h2,.markdown-file-preview h3,.markdown-file-preview h4,.markdown-file-preview h5,.markdown-file-preview h6{letter-spacing:0;line-height:1.25}.markdown-file-preview h1{border-bottom:1px solid var(--border);margin:0 0 18px;padding-bottom:10px;font-size:1.85em}.markdown-file-preview h2{border-bottom:1px solid var(--border);margin:28px 0 12px;padding-bottom:6px;font-size:1.42em}@supports (color:color-mix(in lab,red,red)){.markdown-file-preview h2{border-bottom:1px solid color-mix(in srgb,var(--border) 72%,transparent)}}.markdown-file-preview h3{margin:22px 0 10px;font-size:1.18em}.markdown-file-preview h4,.markdown-file-preview h5,.markdown-file-preview h6{margin:18px 0 8px}.markdown-file-preview p{margin:0 0 13px}.markdown-file-preview ol,.markdown-file-preview ul{margin:6px 0 14px}.markdown-file-preview li{margin:4px 0}.markdown-file-preview blockquote{background:var(--bg-panel);border-left-color:var(--accent);border-radius:0 6px 6px 0;margin:12px 0 16px;padding:8px 14px}.markdown-file-preview table{border-spacing:0;width:max-content;max-width:100%;display:block;overflow-x:auto}.markdown-file-preview td,.markdown-file-preview th{vertical-align:top;padding:7px 11px}.markdown-file-preview img{max-width:100%;height:auto;margin:14px auto;display:block}.markdown-file-preview img,.markdown-file-preview pre{border:1px solid var(--border);background:var(--bg-panel);border-radius:6px}.markdown-file-preview pre{font-family:var(--font-mono);margin:12px 0;padding:12px 16px;font-size:13px;overflow-x:auto}.markdown-file-preview code{font-family:var(--font-mono);background:var(--bg-panel);border-radius:3px;padding:1px 5px;font-size:.9em}.markdown-file-preview pre code{background:0 0;padding:0}.markdown-file-preview .mermaid-diagram{margin:16px 0}.markdown-body span.linenumber,span.linenumber{color:var(--text-dim)!important;font-style:normal!important}@keyframes drop-zone-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes drop-icon-float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes drop-ring-pulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes drop-ripple{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(1)}}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@keyframes saved-pop{0%{transform:scale(1);box-shadow:0 0 #4ade808c}40%{transform:scale(1.08);box-shadow:0 0 0 6px #4ade8040}to{transform:scale(1);box-shadow:0 0 #4ade8000}}@keyframes saved-check-draw{0%{stroke-dashoffset:18px;opacity:0}to{stroke-dashoffset:0;opacity:1}}.settings-dialog-backdrop{z-index:1000;background:#00000061;justify-content:center;align-items:center;padding:22px;display:flex;position:fixed;inset:0}.settings-dialog-shell{background:var(--bg);border:1px solid var(--border);border-radius:10px;flex-direction:column;width:min(1120px,100%);height:min(82vh,860px);min-height:560px;display:flex;overflow:hidden;box-shadow:0 8px 32px #00000038}.settings-dialog-header{border-bottom:1px solid var(--border);background:var(--bg);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;height:50px;padding:0 14px 0 16px;display:flex}.settings-dialog-body{flex:1;min-height:0;display:flex;overflow:hidden}.settings-dialog-tabs{border-right:1px solid var(--border);background:var(--bg-panel);flex-shrink:0;width:190px;padding:8px;overflow-y:auto}.settings-dialog-tab{text-align:left;border:none;border-radius:7px;align-items:center;gap:9px;width:100%;margin:0 0 4px;padding:9px 10px;transition:background .12s,color .12s;display:flex}.settings-dialog-panel{background:var(--bg);flex:1;min-width:0;min-height:0;overflow:hidden}@media (min-width:641px){.sidebar-overlay-backdrop{display:none!important}.sidebar-container{transition:width .2s,min-width .2s;position:relative;overflow:hidden}.sidebar-container.sidebar-closed{border-right:none!important;width:0!important;min-width:0!important}.sidebar-container>*{width:100%;min-width:260px}.right-panel-container{flex-shrink:0;transition:width .2s,min-width .2s;overflow:hidden}.right-panel-back-button{display:none!important}.right-panel-container.right-panel-closed{border-left:none!important;width:0!important;min-width:0!important;display:none!important}}@media (max-width:640px){.app-topbar{flex-wrap:wrap;align-content:center;min-height:76px;align-items:center!important;gap:6px!important;height:auto!important;padding:6px 8px!important}.topbar-sidebar-toggle{order:1}.topbar-title-area{order:2;min-width:0;flex:1 1 0!important}.topbar-session-title{max-width:none!important}.topbar-project-crumb,.topbar-rename-button{display:none!important}.topbar-icon-button{order:3;width:30px!important;height:28px!important}.topbar-right-panel-toggle{display:flex!important}.topbar-chat-tools{scrollbar-width:none;-webkit-overflow-scrolling:touch;order:4;min-width:0;overflow:auto hidden;flex:0 auto!important}.topbar-chat-tools::-webkit-scrollbar{display:none}.topbar-system-button{flex:none}.topbar-session-stats{scrollbar-width:none;-webkit-overflow-scrolling:touch;flex:1 1 0;order:4;min-width:0;max-width:none;overflow-x:auto}.topbar-update-status{order:4;min-width:0;max-width:none;overflow:hidden;flex:1 1 0!important}.topbar-update-status span{text-overflow:ellipsis;min-width:0;overflow:hidden}.topbar-system-button{justify-content:center;width:30px;gap:0!important;padding:0!important}.topbar-system-label{display:none!important}.topbar-session-stats::-webkit-scrollbar{display:none}.chat-input-toolbar{flex-wrap:wrap;align-items:stretch!important;gap:4px 6px!important}.chat-input-toolbar-left,.chat-input-toolbar-right{scrollbar-width:none;-webkit-overflow-scrolling:touch;min-width:0;overflow:auto hidden}.chat-input-toolbar-left{flex:100%!important}.chat-input-toolbar-right{flex:100%!important;margin-left:0!important}.chat-input-toolbar-left::-webkit-scrollbar,.chat-input-toolbar-right::-webkit-scrollbar{display:none}.chat-input-toolbar-left>*,.chat-input-toolbar-right>*{flex-shrink:0}.chat-input-toolbar-spacer{display:none!important}.settings-dialog-backdrop{justify-content:stretch;align-items:stretch;padding:0}.settings-dialog-shell{border:none;border-radius:0;width:100%;height:100dvh;min-height:0}.settings-dialog-body{flex-direction:column}.settings-dialog-tabs{border-right:none;border-bottom:1px solid var(--border);gap:6px;width:100%;padding:7px;display:flex;overflow:auto hidden}.settings-dialog-tab{flex:0 0 132px;width:132px;margin:0;padding:8px}.settings-dialog-panel{flex:1}.chat-stats-center,.resize-handle{display:none!important}.sidebar-container{max-width:85vw;transition:transform .25s,box-shadow .25s;top:0;bottom:0;left:0;width:min(280px,85vw)!important;min-width:0!important;position:fixed!important}.sidebar-container.sidebar-open{transform:translate(0);box-shadow:4px 0 20px #00000026}.sidebar-container.sidebar-closed{box-shadow:none;pointer-events:none;transform:translate(-100%)}.right-panel-container{flex-shrink:0;transition:width .2s,min-width .2s;overflow:hidden}.right-panel-back-button{display:flex!important}.right-panel-container.right-panel-open{width:100%!important;min-width:0!important}.right-panel-container.right-panel-closed{border-left:none!important;width:0!important;min-width:0!important;display:none!important}}.docx-preview-container .docx-preview{color:#333;padding:40px 48px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.6}.docx-preview-container .docx-preview h1,.docx-preview-container .docx-preview h2,.docx-preview-container .docx-preview h3{color:#1a1a1a;margin-top:1em;margin-bottom:.5em}.docx-preview-container .docx-preview p{margin-bottom:.5em}.docx-preview-container .docx-preview table{border-collapse:collapse;width:100%;margin:8px 0}.docx-preview-container .docx-preview td,.docx-preview-container .docx-preview th{text-align:left;border:1px solid #ddd;padding:6px 10px}.docx-preview-container .docx-preview img{max-width:100%;height:auto}.xlsx-preview table{border-collapse:collapse;font-size:12px;font-family:var(--font-mono);background:#fff}.xlsx-preview td,.xlsx-preview th{border:1px solid var(--border);white-space:nowrap;text-overflow:ellipsis;max-width:300px;padding:4px 8px;overflow:hidden}.xlsx-preview th{background:var(--bg-panel);color:var(--text);font-weight:600;position:sticky;top:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
package/bin/annodex.js CHANGED
@@ -25,6 +25,8 @@ const bcrypt = require("bcryptjs");
25
25
  const https = require("https");
26
26
  // eslint-disable-next-line @typescript-eslint/no-require-imports
27
27
  const { randomBytes } = require("crypto");
28
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
29
+ const { readAppSettings, ensureAppSettings } = require("../lib/app-settings.js");
28
30
 
29
31
  const pkgDir = path.join(__dirname, "..");
30
32
  const nextDir = path.join(pkgDir, ".next");
@@ -55,7 +57,6 @@ const STOP_TERM_TIMEOUT_MS = 6000;
55
57
  const STOP_KILL_TIMEOUT_MS = 2000;
56
58
  const PROCESS_TITLE = "annodex";
57
59
  const NEXT_PROCESS_TITLE = "annodex-next";
58
- const AUTO_RESTART_ENABLED = !/^(0|false|no)$/i.test(envFirst("ANNODEX_AUTO_RESTART", "ANNOVIBE_AUTO_RESTART") ?? "1");
59
60
  const AUTO_RESTART_POLL_MS = parsePositiveInt(envFirst("ANNODEX_AUTO_RESTART_POLL_MS", "ANNOVIBE_AUTO_RESTART_POLL_MS"), 60_000);
60
61
  const AUTO_RESTART_IDLE_GRACE_MS = parsePositiveInt(envFirst("ANNODEX_AUTO_RESTART_IDLE_GRACE_MS", "ANNOVIBE_AUTO_RESTART_IDLE_GRACE_MS"), 10_000);
61
62
  const AUTO_RESTART_MAX_WAIT_MS = parsePositiveInt(envFirst("ANNODEX_AUTO_RESTART_MAX_WAIT_MS", "ANNOVIBE_AUTO_RESTART_MAX_WAIT_MS"), 30 * 60_000);
@@ -272,6 +273,14 @@ function writeState(state) {
272
273
  fs.writeFileSync(stateFile, JSON.stringify({ ...state, updatedAt: nowIso() }, null, 2));
273
274
  }
274
275
 
276
+ function autoRestartEnabled() {
277
+ const envValue = envFirst("ANNODEX_AUTO_RESTART", "ANNOVIBE_AUTO_RESTART");
278
+ if (envValue !== undefined) return !/^(0|false|no)$/i.test(envValue);
279
+ const settings = readAppSettings();
280
+ if (typeof settings.autoRestart === "boolean") return settings.autoRestart;
281
+ return true;
282
+ }
283
+
275
284
  function findListeningPids(listenPort) {
276
285
  if (process.platform === "win32") return [];
277
286
  const pids = new Set();
@@ -572,6 +581,7 @@ async function startManagedServerWithPort(overridePort, overrideHost) {
572
581
 
573
582
  async function startManagedServer({ quiet = false, effectivePort: optPort, effectiveHost: optHost } = {}) {
574
583
  seedDefaults();
584
+ ensureAppSettings({ autoRestart: true });
575
585
  await maybeSetupAuth();
576
586
  if (!fs.existsSync(nextDir)) {
577
587
  console.error("Build artifacts not found. Please report this issue.");
@@ -668,18 +678,12 @@ Usage:
668
678
  annodex update Update to the latest version
669
679
 
670
680
  Options:
671
- -p, --port <port> Port to listen on (default: 30121, env: PORT)
681
+ -p, --port <port> Port to listen on (default: 30121)
672
682
  -H, --hostname <host> Hostname to bind to (default: localhost)
673
683
  --json Print machine-readable status JSON
674
684
  -f, --follow Follow logs
675
685
  -v, --version Print version
676
686
  -h, --help Show this help
677
-
678
- Environment:
679
- PORT Server port
680
- ANNODEX_PASSWORD Set password on first start
681
- ANNODEX_AUTO_RESTART Set 0/false/no to disable idle auto-restart after update
682
- PI_CODING_AGENT_DIR Custom pi agent data directory
683
687
  `);
684
688
  process.exit(0);
685
689
  }
@@ -903,8 +907,6 @@ function openBrowser(url) {
903
907
  }
904
908
 
905
909
  function startAutoRestartWatcher({ child, internalToken, writeCurrentState, markRestarting }) {
906
- if (!AUTO_RESTART_ENABLED) return () => {};
907
-
908
910
  let pending = null;
909
911
  let idleSince = null;
910
912
  let restarting = false;
@@ -912,6 +914,14 @@ function startAutoRestartWatcher({ child, internalToken, writeCurrentState, mark
912
914
 
913
915
  const poll = async () => {
914
916
  if (restarting) return;
917
+ if (!autoRestartEnabled()) {
918
+ if (pending) {
919
+ pending = null;
920
+ idleSince = null;
921
+ writeCurrentState({ restartPending: false, installedVersion: null, restartDetectedAt: null, restartStartedAt: null });
922
+ }
923
+ return;
924
+ }
915
925
  const installedVersion = readInstalledVersion();
916
926
  if (!installedVersion || installedVersion === VERSION) {
917
927
  if (pending) {
@@ -1015,6 +1025,7 @@ function startAutoRestartWatcher({ child, internalToken, writeCurrentState, mark
1015
1025
 
1016
1026
  async function runServerProcess() {
1017
1027
  setStableProcessTitle(PROCESS_TITLE);
1028
+ ensureAppSettings({ autoRestart: true });
1018
1029
  await maybeSetupAuth();
1019
1030
  if (!fs.existsSync(nextDir)) {
1020
1031
  console.error("Build artifacts not found. Please report this issue.");
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-require-imports */
3
+
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+ const os = require("os");
7
+
8
+ function getConfigDir() {
9
+ return process.env.ANNODEX_CONFIG_DIR
10
+ ?? process.env.ANNOVIBE_CONFIG_DIR
11
+ ?? path.join(os.homedir(), ".config", "annodex");
12
+ }
13
+
14
+ function getSettingsPath() {
15
+ return path.join(getConfigDir(), "settings.json");
16
+ }
17
+
18
+ function isRecord(value) {
19
+ return typeof value === "object" && value !== null && !Array.isArray(value);
20
+ }
21
+
22
+ function readRawSettings() {
23
+ const file = getSettingsPath();
24
+ if (!fs.existsSync(file)) return {};
25
+ try {
26
+ const parsed = JSON.parse(fs.readFileSync(file, "utf8"));
27
+ return isRecord(parsed) ? parsed : {};
28
+ } catch {
29
+ return {};
30
+ }
31
+ }
32
+
33
+ function readAppSettings() {
34
+ const raw = readRawSettings();
35
+ return {
36
+ autoRestart: typeof raw.autoRestart === "boolean" ? raw.autoRestart : undefined,
37
+ };
38
+ }
39
+
40
+ function writeAppSettings(patch) {
41
+ const dir = getConfigDir();
42
+ if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
43
+ const next = {
44
+ ...readRawSettings(),
45
+ ...(typeof patch?.autoRestart === "boolean" ? { autoRestart: patch.autoRestart } : {}),
46
+ };
47
+ fs.writeFileSync(getSettingsPath(), JSON.stringify(next, null, 2), "utf8");
48
+ return readAppSettings();
49
+ }
50
+
51
+ function ensureAppSettings(defaults = { autoRestart: true }) {
52
+ const current = readRawSettings();
53
+ if (typeof current.autoRestart === "boolean") return readAppSettings();
54
+ return writeAppSettings(defaults);
55
+ }
56
+
57
+ module.exports = {
58
+ readAppSettings,
59
+ writeAppSettings,
60
+ ensureAppSettings,
61
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seqyuan/annodex",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "description": "AI-native bioinformatics workspace by Annoroad",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -15,6 +15,7 @@
15
15
  "!.next/**/*.js.map",
16
16
  "!.next/trace",
17
17
  "!.next/trace-build",
18
+ "lib/app-settings.js",
18
19
  "lib/default-SOUL.md",
19
20
  "lib/default-HARNESS.md",
20
21
  "public",