@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.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +3 -3
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/internal/runtime/route.js +1 -1
- package/.next/server/app/api/projects/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/settings/route.js +1 -1
- package/.next/server/app/api/version/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +2 -2
- package/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/page.js +13 -11
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +3 -3
- package/.next/server/chunks/402.js +1 -1
- package/.next/server/chunks/6429.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/app/page-12c31303e01d8139.js +262 -0
- package/.next/static/css/eaefa02f8638a351.css +3 -0
- package/bin/annodex.js +21 -10
- package/lib/app-settings.js +61 -0
- package/package.json +2 -1
- package/.next/static/chunks/app/page-0a08a25f5bab1118.js +0 -260
- package/.next/static/css/45029451a1d7255d.css +0 -3
- /package/.next/static/{0nxdx-sPUMqmQaZm7vO-Z → GTXomrhdfb8RQqsW5gcyW}/_buildManifest.js +0 -0
- /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
|
|
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.
|
|
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",
|