@teammy/server 0.0.4 → 0.0.5
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/README.md +3 -3
- package/dist/main.js +28 -1
- package/dist/web/assets/Dashboard--f1vaGx8.js +1 -0
- package/dist/web/assets/Files-Bc00wOfT.js +1 -0
- package/dist/web/assets/{Markdown-CcCzS4DP.js → Markdown-BrmcIotb.js} +4 -4
- package/dist/web/assets/Sessions-Bmlb8Xay.js +1 -0
- package/dist/web/assets/index-CgsCXCcm.js +64 -0
- package/dist/web/assets/index-uXzN7fKr.css +1 -0
- package/dist/web/index.html +3 -3
- package/package.json +1 -1
- package/dist/web/assets/Dashboard-CfMDmukc.js +0 -1
- package/dist/web/assets/Files-DvK_N3lO.js +0 -1
- package/dist/web/assets/Sessions-DTLr1cTK.js +0 -1
- package/dist/web/assets/file-links-BAMah1K6.js +0 -1
- package/dist/web/assets/index-CeGPJ_an.css +0 -1
- package/dist/web/assets/index-l1r3Ekhs.js +0 -64
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{color:#242424;font-synthesis:none;--line:#e2e2e3;--muted:#737373;--sidebar:#f5f5f5;--blue:#e5f2fe;--sidebar-width:240px;background:#fff;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.6}*{box-sizing:border-box}[hidden]{display:none!important}body{margin:0}button,input,textarea,select{font:inherit;color:inherit}button,.button{border:1px solid var(--line);cursor:pointer;white-space:normal;background:#fff;border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;gap:8px;min-height:40px;padding:8px 14px;font-size:13px;line-height:20px;text-decoration:none;display:inline-flex}button:hover,.button:hover{background:#f5f5f5}button:disabled{opacity:.48;cursor:default}button.primary{color:#fff;background:#252525;border-color:#252525}button.primary:hover{background:#414141}button.danger{color:#fff;background:#b93434;border-color:#b93434}:focus-visible{outline-offset:3px;outline:2px solid #242424}button.primary:focus-visible,button.danger:focus-visible{outline-offset:-4px;outline-color:#fff}input,select,textarea{background:#fff;border:1px solid #d9d9da;border-radius:9px;width:100%;min-height:42px;padding:9px 11px}textarea{resize:vertical}input:disabled,textarea:disabled{color:#666;background:#f8f8f8}h1,h2,h3,p{margin:0}h1{letter-spacing:-.6px;font-size:26px;font-weight:600;line-height:1.35}h2{font-size:16px;font-weight:600;line-height:1.5}h3{font-size:14px;font-weight:600}p{color:#666;line-height:1.8}small,.muted{color:var(--muted);font-size:12px}a{color:#355e80}code,pre{font-family:SFMono-Regular,Consolas,monospace}fieldset{border:0;min-width:0;margin:0;padding:0}details>summary{cursor:pointer;padding:10px 0;font-size:13px}details p{margin:8px 0}dt{color:#777}dd{overflow-wrap:anywhere;margin:0}.summary{grid-template-columns:auto 1fr;gap:8px 18px;margin:12px 0;font-size:13px;display:grid}.brand{letter-spacing:-1.1px;align-items:center;gap:9px;font-size:27px;font-weight:450;line-height:1;display:flex}.brand-icon{background:#242424;border-radius:9px;place-items:center;width:34px;height:34px;display:grid}.brand-icon svg{fill:none;stroke:#fff;stroke-width:2px;stroke-linecap:round;width:24px}.icon{fill:none;stroke:currentColor;stroke-width:2px;stroke-linejoin:round;stroke-linecap:round;width:18px;height:18px}.stack{flex-direction:column;gap:22px;min-width:0;display:flex}.field{flex-direction:column;gap:7px;min-width:0;font-size:13px;display:flex}.field small{line-height:1.7}.row{align-items:center;gap:10px;display:flex}.wrap{flex-wrap:wrap}.actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;display:flex}.form-grid{grid-template-columns:1fr 1fr;gap:18px;display:grid}.notice{overflow-wrap:anywhere;background:#f2f7fa;border:1px solid #d5e2e9;border-radius:10px;padding:12px 14px;font-size:13px}.notice:empty{display:none}.notice.error{color:#9d4733;background:#fff6f3;border-color:#eedbd4}.error-text{color:#a33f32;overflow-wrap:anywhere}.badge{color:#686868;vertical-align:middle;background:#f8f8f8;border:1px solid #e4e4e4;border-radius:6px;align-items:center;padding:2px 7px;font-size:11px;font-weight:400;line-height:20px;display:inline-flex}.badge.warn{color:#9c5b31;background:#fff4eb;border-color:#f0e0d0}.panel{border:1px solid var(--line);border-radius:12px;min-width:0;padding:24px}.panel>h2,.panel>h3{margin-bottom:16px}.section-heading{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:24px;display:flex}.stack>.section-heading{margin-bottom:0}.empty{text-align:center;color:#9b9b9b;padding:48px 24px}.empty h3{color:#555;margin-bottom:6px}.empty p{font-size:13px}.boot{gap:24px;max-width:520px;margin:100px auto;padding:24px;display:grid}.access{grid-template-columns:minmax(280px,40%) 1fr;min-height:100dvh;display:grid}.access-aside{background:#f5f5f5;flex-direction:column;padding:32px;display:flex;position:relative;overflow:hidden}.access-art{opacity:.65;pointer-events:none;grid-template-columns:repeat(3,1fr);gap:14px;display:grid;position:absolute;inset:28% 12%;transform:rotate(-10deg)}.access-art i{background:linear-gradient(160deg,#eee,#0000);border:1px solid #d4d4d4;border-radius:14px;box-shadow:0 12px 20px #00000003}.access-art i:nth-child(2),.access-art i:nth-child(6){transform:translateY(-20px)}.access-main{justify-content:center;align-items:center;padding:56px 48px;display:flex}.access-form{flex-direction:column;gap:22px;width:100%;max-width:380px;display:flex}.access-form>p{margin-top:-10px;font-size:14px}.wide{width:100%}.mobile-brand{display:none}.setup-form{max-width:560px}.steps{gap:16px;margin:5px 0 16px;padding:0;list-style:none;display:flex}.steps li{color:#aaa;align-items:center;gap:6px;font-size:12px;display:flex}.steps li span{border:1px solid #ddd;border-radius:50%;place-items:center;width:23px;height:23px;font-size:11px;display:grid}.steps li[aria-current]{color:#242424}.steps li[aria-current] span{color:#fff;background:#242424;border-color:#242424}.workspace{min-height:100dvh;display:flex}.sidebar{width:var(--sidebar-width);background:var(--sidebar);z-index:20;border-right:1px solid #ededed;flex-direction:column;flex-shrink:0;padding:22px 12px 12px;display:flex;position:fixed;inset:0 auto 0 0}.sidebar .brand{padding:0 6px}.project-label{flex-direction:column;gap:6px;padding:32px 14px 20px;display:flex}.project-label small{letter-spacing:1px;font-size:10px}.project-label strong{overflow-wrap:anywhere;font-size:14px;font-weight:600}.sidebar nav{flex-direction:column;gap:6px;display:flex}.sidebar nav a{color:#555;border-radius:9px;align-items:center;gap:12px;padding:12px 14px;font-size:14px;font-weight:600;text-decoration:none;display:flex}.sidebar nav a:hover{background:#ececec}.sidebar nav a.active{color:#252525;background:#eaeaea}.sidebar-account{color:inherit;border-radius:10px;align-items:center;gap:12px;margin-top:auto;padding:12px;text-decoration:none;display:flex}.sidebar-account:hover,.sidebar-account.active{background:#eaeaea}.sidebar-account strong{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:14px;font-weight:600;overflow:hidden}.sidebar-account>.icon{width:15px;color:var(--muted)}.avatar{background:#f6f6f6;border:1px solid #ddd;border-radius:12px;flex-shrink:0;place-items:center;width:40px;height:40px;font-size:16px;display:grid}.avatar.small{background:#fff;border-radius:9px;width:32px;height:32px;font-size:13px}.main-shell{margin-left:var(--sidebar-width);width:calc(100% - var(--sidebar-width));min-width:0}.mobile-toolbar{display:none}main#main{outline:0;max-width:1720px;margin:0 auto;padding:36px 40px 48px}.page-header{justify-content:space-between;align-items:center;gap:24px;margin-bottom:24px;display:flex}.page-header p{margin-top:8px;font-size:13px}.page-header h1{font-size:24px}.preview-empty{margin:auto}.preview-empty>span{color:#c8c8c8;margin-bottom:14px;font-size:38px;display:block}.preview-body{min-width:0;padding:28px}.raw{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:12px;line-height:1.8}.markdown{overflow-wrap:anywhere;font-size:14px;line-height:1.85}.markdown h1{font-size:25px}.markdown h2{font-size:20px}.markdown h3{font-size:16px}.markdown h1,.markdown h2,.markdown h3{margin:24px 0 12px}.markdown>:first-child{margin-top:0}.markdown p,.markdown ul,.markdown ol{color:#444;margin:12px 0}.markdown pre{background:#f7f7f7;border-radius:8px;padding:16px;font-size:12px;overflow:auto}.markdown code{background:#f5f5f5;border-radius:3px;padding:2px 4px}.markdown pre code{padding:0}.markdown blockquote{border-left:3px solid #ddd;margin:18px 0;padding:0 18px}.markdown table{border-collapse:collapse;max-width:100%;display:block;overflow:auto}.markdown td,.markdown th{border:1px solid #ddd;padding:8px 12px}.markdown input[type=checkbox]{width:14px;min-height:0}.management-page{max-width:1120px;margin:0 auto}.member-list{border-top:1px solid var(--line)}.member-card{border-bottom:1px solid var(--line);grid-template-columns:minmax(160px,1fr) 80px 125px auto;align-items:center;gap:24px;min-width:0;padding:22px 4px;display:grid}.member-heading{align-items:center;gap:14px;min-width:0;display:flex}.member-heading>div{min-width:0}.member-heading h2{overflow-wrap:anywhere;font-size:14px}.member-heading small{overflow-wrap:anywhere}.member-role,.member-state{color:var(--muted);font-size:12px}.member-state{align-items:center;gap:7px;display:flex}.status-dot{background:#ccc;border-radius:50%;width:6px;height:6px}.status-dot.bound{background:#666}.disabled-state{color:#a25b44}.member-actions{gap:4px;display:flex}.device-status{flex-direction:column;gap:10px;min-width:0;font-size:12px;display:flex}.device-status details{border-top:1px solid #eee}.settings-page,.account-page{max-width:860px}.settings-tabs{border-bottom:1px solid var(--line);gap:24px;display:flex}.settings-tabs [role=tab]{color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;padding:12px 0 16px;font-weight:600}.settings-tabs [aria-selected=true]{color:#242424;border-bottom-color:#242424}.settings-section{padding:28px 0}.settings-section>h2{margin-bottom:20px}.form-section-title{border-top:1px solid var(--line);margin-top:16px;padding-top:28px}.settings-disclosure{border-top:1px solid var(--line);padding:8px 0}.settings-disclosure>summary{font-weight:600}.settings-disclosure>p{font-size:12px}.settings-footer{color:var(--muted);padding-top:32px;font-size:12px}.account-identity{align-items:center;gap:16px;min-width:0;display:flex}.account-identity>div{overflow-wrap:anywhere;min-width:0}.account-identity>.icon-button{margin-left:auto}.avatar.large{border-radius:16px;width:56px;height:56px;font-size:22px}.account-facts{gap:16px;margin:28px 0 0;font-size:13px;display:grid}.account-facts>div{grid-template-columns:120px 1fr;gap:16px;display:grid}.account-page .settings-section+.settings-section{border-top:1px solid var(--line)}.account-page .device-status{margin-bottom:16px}.account-exit{border-top:1px solid var(--line);padding-top:24px}.quiet-danger{color:#ad3636;background:0 0}.application-row{border-bottom:1px solid #eee;grid-template-columns:90px 1fr;gap:18px;padding:20px 0;display:grid}.application-row:last-child{border-bottom:0;padding-bottom:0}.application-row strong{overflow-wrap:anywhere;font-size:13px;font-weight:600}.ai-model-row{grid-template-columns:minmax(0,1fr) auto;align-items:center;padding-top:0}.ai-model-row>div{min-width:0}.ai-model-row small{overflow-wrap:anywhere;display:block}.connect-panel{flex-direction:column;gap:18px;display:flex}.connect-panel>h2{margin:0}.connect-panel p{font-size:13px}.command{background:#fafafa;border:1px solid #e5e5e5;border-radius:10px;align-items:flex-start;gap:10px;padding:12px;display:flex}.command code{overflow-wrap:anywhere;white-space:pre-wrap;flex:1;min-width:0;padding:5px 0;font-size:12px}.command button{min-height:32px;padding:5px 9px;font-size:11px}.scope-path{overflow-wrap:anywhere;color:#777;border-top:1px solid #eee;margin-top:20px;padding-top:16px;font-size:12px}dialog{border:1px solid #ddd;border-radius:14px;width:calc(100% - 32px);max-width:500px;max-height:85dvh;padding:0;overflow:auto;box-shadow:0 20px 70px #0002}dialog::backdrop{background:#0005}.dialog-content{padding:24px}.dialog-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:24px;display:flex}.dialog-header h2{font-size:20px}.dialog-header>button{background:0 0;border:0;width:36px;min-height:36px;padding:0;font-size:23px}.nav-backdrop{display:none}.skip-link{z-index:100;background:#fff;padding:12px;position:fixed;top:-100px;left:10px}.skip-link:focus{top:10px}@media (width<=1100px){:root{--sidebar-width:210px}main#main{padding:30px 24px}.member-card{grid-template-columns:minmax(150px,1fr) 65px 110px auto;gap:12px}.access-main{padding:40px 32px}.steps{gap:8px}}@media (width<=760px){.sidebar{width:244px;transition:transform .16s;transform:translate(-100%)}.sidebar.open{transform:translate(0)}.main-shell{width:100%;margin:0}.mobile-toolbar{border-bottom:1px solid var(--line);align-items:center;gap:12px;height:56px;padding:0 16px;display:flex}.mobile-toolbar span{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.nav-backdrop{z-index:19;background:#0004;border:0;border-radius:0;width:100%;height:100%;display:block;position:fixed;inset:0}.nav-backdrop:hover{background:#0004}main#main{padding:28px 18px 40px}.page-header{flex-wrap:wrap;align-items:flex-start;gap:16px;margin-bottom:24px}.page-header h1{font-size:23px}.page-header p{font-size:12px}.preview-body,.panel{padding:20px}.form-grid{grid-template-columns:1fr}.application-row{grid-template-columns:1fr;gap:12px}.access{display:block}.access-aside{display:none}.access-main{min-height:100dvh;padding:100px 24px 40px}.mobile-brand{display:block;position:absolute;top:24px;left:24px}.access-form{max-width:460px}.steps{gap:10px}.steps li{gap:4px;font-size:10px}.steps li span{width:20px;height:20px}.actions{gap:8px}.summary{grid-template-columns:1fr;gap:4px}.summary dd{margin-bottom:8px}.member-card{grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;padding:20px 0}.member-heading{grid-column:1/-1}.member-role,.member-state{grid-column:1}.member-actions{grid-area:2/2/4;align-self:center}.settings-tabs{gap:20px}.settings-tabs [role=tab]{gap:6px;font-size:12px}.settings-tabs .icon{width:16px;height:16px}.command{flex-wrap:wrap}.command code{flex-basis:75%}.dialog-content{padding:20px}}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@media (width<=760px){.sidebar{visibility:hidden}.sidebar.open{visibility:visible}}.ai-grid{grid-template-columns:minmax(280px,.9fr) minmax(0,1.1fr);align-items:start;gap:24px;display:grid}.ai-grid>*,.ai-grid .panel,.ai-break{overflow-wrap:anywhere;min-width:0}.ai-job-row{text-align:left;overflow-wrap:anywhere;flex-direction:column;gap:6px;display:flex}.ai-job-row.selected{background:var(--blue)}.ai-citation{text-align:left;overflow-wrap:anywhere}.ai-events{max-height:280px;padding-left:24px;overflow:auto}.ai-result p,.ai-result li{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.7}.ai-result pre{max-height:400px;overflow:auto}@media (width<=1100px){.ai-grid{grid-template-columns:minmax(0,1fr)}}.sidebar nav a:nth-child(4){margin-top:24px}.ai-grid-idle{grid-template-columns:minmax(0,1fr)}.icon-button{color:#444;background:0 0;border:0;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;min-height:36px;padding:8px;display:inline-flex}.icon-button:hover{color:#242424;background:#eee}.icon-button .icon{width:19px;height:19px}main#main[data-page=files]{max-width:none;padding:0}.file-explorer{grid-template-columns:minmax(220px,25%) minmax(0,1fr);height:100dvh;min-height:420px;display:grid}.file-tree-pane{border-right:1px solid var(--line);background:#fafafa;flex-direction:column;min-width:0;display:flex}.explorer-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;min-height:49px;padding:8px 12px 8px 18px;display:flex}.explorer-heading h1{letter-spacing:0;font-size:13px;font-weight:600}[role=tree]{scrollbar-width:thin;min-height:0;padding:8px 0;overflow:auto}.tree-item{width:100%;min-height:30px;padding:4px 12px 4px calc(10px + (var(--tree-level) - 1) * 16px);text-align:left;background:0 0;border:0;border-radius:0;justify-content:flex-start;align-items:center;gap:6px;font-size:13px;display:flex}.tree-item:hover{background:#efefef}.tree-item[aria-selected=true]{background:var(--blue)}.tree-item:focus-visible{outline-offset:-2px}.tree-item>.icon{color:#666;flex-shrink:0;width:16px;height:16px}.tree-chevron{flex-shrink:0;align-items:center;width:12px;height:16px;display:inline-flex}.tree-chevron .icon{width:12px;height:12px}.tree-chevron.expanded{transform:rotate(90deg)}.tree-name{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.tree-status{color:var(--muted);padding:5px 24px;font-size:12px}.tree-action{background:0 0;min-height:28px;margin:4px 20px;padding:3px 12px;font-size:12px}.file-detail{flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}.file-detail-header{border-bottom:1px solid var(--line);flex-shrink:0;justify-content:space-between;align-items:center;gap:16px;min-height:49px;padding:8px 16px;display:flex}.file-detail-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;overflow:hidden}.file-detail-path>span{color:var(--muted)}.file-detail-header .row{gap:4px}.file-detail>.preview-body{flex:1;min-height:0;overflow:auto}.file-detail>.notice{margin:12px}.file-entry-retry{align-self:flex-start;margin:12px}.preview-empty .icon{color:#bbb;width:32px;height:32px;margin-bottom:12px}.progress-lanes{grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;display:grid}.progress-lane{border:1px solid var(--line);background:#fafafa;border-radius:12px;min-width:0;min-height:320px}.progress-lane h2{border-bottom:1px solid #eee;align-items:center;gap:8px;padding:18px 20px;font-size:14px;display:flex}.lane-dot{background:#b5b5b7;border-radius:50%;width:7px;height:7px}.lane-empty{color:#999;text-align:center;padding:80px 20px;font-size:12px}.analysis-tools{border-top:1px solid var(--line);margin-top:32px}.analysis-tools>summary{padding:18px 0;font-size:14px}.analysis-tools .board-analysis{margin-top:8px}.session-stats{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:baseline;gap:24px 40px;margin:0 0 28px;padding-bottom:24px;display:flex}.session-stats dt{font-size:12px}.session-stats dd{margin-top:4px;font-size:24px;font-weight:600}.session-last-updated{margin-left:auto}.session-last-updated dd{font-size:13px;font-weight:400}.session-search{align-items:flex-end;gap:12px;margin-bottom:28px;display:flex}.session-search .field{flex:1;max-width:680px}.session-search-empty{color:var(--muted);padding:48px 0;font-size:13px}.session-browser{grid-template-columns:minmax(240px,30%) minmax(0,1fr);align-items:start;gap:24px;display:grid}.session-browser.search-only{grid-template-columns:minmax(0,1fr);max-width:800px}.session-list{gap:8px;min-width:0;max-height:calc(100dvh - 320px);overflow:auto}.session-item{text-align:left;border:0;border-bottom:1px solid var(--line);border-radius:0;flex-direction:column;align-items:flex-start;gap:8px;padding:14px;display:flex}.session-item>*{overflow-wrap:anywhere;min-width:0;max-width:100%}.session-item[aria-pressed=true]{background:var(--blue);border-radius:8px}.session-conversation{border-left:1px solid var(--line);min-width:0;max-height:calc(100dvh - 300px);padding-left:24px;overflow:auto}.conversation-header{border-bottom:1px solid var(--line);padding-bottom:18px}.conversation-header p{margin-top:6px;font-size:12px}.session-title{overflow-wrap:anywhere;font-size:16px}.session-messages{flex-direction:column;gap:28px;display:flex}.session-message{min-width:0;padding:12px 4px}.session-message.user{background:#f5f5f5;border-radius:14px 14px 4px;align-self:flex-end;max-width:90%;padding:16px 20px}.session-message.matched{padding-left:16px;box-shadow:inset 3px 0 #7bbffb}.message-role{color:var(--muted);margin-bottom:10px;font-size:11px}@media (width<=760px){.file-explorer{grid-template-columns:minmax(0,1fr);height:auto}.file-tree-pane{border-right:0;border-bottom:1px solid var(--line);max-height:280px}.file-detail{min-height:55dvh}.file-detail>.preview-body{max-height:70dvh}.file-detail-header{gap:8px;padding:8px 12px}.progress-lanes{grid-template-columns:minmax(0,1fr);gap:16px}.progress-lane{min-height:150px}.lane-empty{padding:32px 16px}.session-stats{gap:16px 24px}.session-last-updated{flex-basis:100%;margin-left:0}.session-browser{grid-template-columns:minmax(0,1fr)}.session-list{max-height:260px}.session-conversation{border-left:0;border-top:1px solid var(--line);max-height:none;padding:20px 0 0}}
|
package/dist/web/index.html
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<meta name="theme-color" content="#f5f5f5" />
|
|
7
7
|
<title>Teammy · 团队工作台</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-CgsCXCcm.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-uXzN7fKr.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
|
-
<div id="root" data-teammy-ui-version="
|
|
12
|
+
<div id="root" data-teammy-ui-version="3"></div>
|
|
13
13
|
</body>
|
|
14
14
|
</html>
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,D as t,N as n,_ as r,a as i,c as a,d as o,f as s,g as c,h as l,i as u,j as d,k as f,l as p,m,n as h,o as g,p as _,r as v,s as y,t as b,u as x,v as S}from"./index-l1r3Ekhs.js";import{t as C}from"./Markdown-CcCzS4DP.js";import{t as w}from"./file-links-BAMah1K6.js";var T=n(),E=x();function D({owner:e,revision:t,onFiles:n}){let[i,a]=(0,T.useState)(``),o=(0,T.useCallback)(async n=>{try{let i=await m.file(e,`README.md`,t,n);return i.file.size>524288?{kind:`large`}:{kind:`text`,text:await r(i.file,n)}}catch(e){if(e instanceof _&&e.code===`FILE_NOT_FOUND`)return{kind:`missing`};throw e}},[e,t]),c=s(o);return(0,E.jsxs)(`section`,{className:`panel workspace-index`,"data-testid":`workspace-index`,"data-owner-id":e,children:[(0,E.jsxs)(`div`,{className:`section-heading`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsxs)(`h2`,{children:[`工作索引 · `,e]}),(0,E.jsxs)(`small`,{children:[`README.md · v`,t,` · 成员原文`]})]}),(0,E.jsx)(`button`,{onClick:()=>n({owner:e,file:`README.md`,revision:t}),children:`进入文件浏览 →`})]}),(0,E.jsx)(y,{error:!0,children:c.error||i}),c.error&&(0,E.jsx)(`button`,{onClick:()=>void c.reload(),children:`重试读取`}),c.loading&&(0,E.jsx)(`p`,{role:`status`,children:`正在读取索引…`}),c.data?.kind===`text`?(0,E.jsx)(`div`,{className:`markdown`,children:(0,E.jsx)(C,{onLink:r=>{let i=w(`README.md`,r);return i?(a(``),!i.path||r.startsWith(`#`)||n({owner:e,revision:t,...i.directory?{path:i.path}:{path:i.path.split(`/`).slice(0,-1).join(`/`),file:i.path}}),!0):!/^[a-z][a-z0-9+.-]*:/i.test(r)&&!r.startsWith(`//`)&&(a(`该链接指向成员目录之外,请在原仓库查看。`),!0)},children:c.data.text})}):c.data&&(0,E.jsx)(`p`,{children:c.data.kind===`large`?`索引较大,请在文件浏览中下载查看。`:`该成员尚未提供 README.md 索引,可以直接浏览工作目录。`})]})}function O({members:e,me:t,seed:n,initialProfile:r,initialQuestion:a,onCreated:d}){let f=s(b.profiles),p=o(),[m,h]=(0,T.useState)(n??{owner:t,kind:`directory`,path:``}),[_,v]=(0,T.useState)(r??``),[x,C]=(0,T.useState)(a??``),[w,D]=(0,T.useState)(!1),[O,k]=(0,T.useState)(``),A=(0,T.useRef)({fingerprint:``,id:c()}),j=f.data?.profiles.filter(e=>e.enabled)??[],M=_||j[0]?.id||``;async function N(){if(!w){D(!0),k(``);try{let e={profileId:M,workflow:m.kind===`file`?`file-summary`:`directory-analysis`,selection:m,question:x},t=JSON.stringify(e);A.current.fingerprint!==t&&(A.current={fingerprint:t,id:c()});let n=await S(`ai/jobs`,i,{method:`POST`,body:u.parse({...e,operationId:A.current.id}),signal:p});A.current={fingerprint:``,id:c()},d(n.job)}catch(e){p.aborted||k(l(e))}finally{D(!1)}}}return(0,E.jsxs)(`form`,{className:`panel stack`,"data-testid":`ai-job-form`,onSubmit:e=>{e.preventDefault(),N()},children:[(0,E.jsx)(`h2`,{children:`新建分析`}),(0,E.jsxs)(`fieldset`,{className:`stack`,disabled:w,children:[(0,E.jsxs)(`div`,{className:`form-grid`,children:[(0,E.jsx)(g,{id:`ai-job-profile`,label:`使用模型`,children:(0,E.jsxs)(`select`,{required:!0,value:M,onChange:e=>v(e.target.value),children:[(0,E.jsx)(`option`,{value:``,disabled:!0,children:`请选择模型`}),j.map(e=>(0,E.jsx)(`option`,{value:e.id,children:e.name},e.id))]})}),(0,E.jsx)(g,{id:`ai-job-owner`,label:`资料所属成员`,children:(0,E.jsx)(`select`,{value:m.owner,onChange:e=>h({owner:e.target.value,kind:m.kind,path:``}),children:e.map(e=>(0,E.jsxs)(`option`,{value:e.id,children:[e.displayName,` · `,e.id]},e.id))})}),(0,E.jsx)(g,{id:`ai-job-kind`,label:`分析范围`,children:(0,E.jsxs)(`select`,{value:m.kind,onChange:e=>h({...m,kind:e.target.value,path:``}),children:[(0,E.jsx)(`option`,{value:`directory`,children:`目录分析`}),(0,E.jsx)(`option`,{value:`file`,children:`单文件摘要`})]})}),(0,E.jsx)(g,{id:`ai-job-path`,label:`成员目录内的路径`,hint:m.kind===`directory`?`留空表示该成员的整个目录。`:`例如 review/notes.md`,children:(0,E.jsx)(`input`,{required:m.kind===`file`,maxLength:1024,value:m.path,onChange:e=>h({...m,path:e.target.value})})})]}),(0,E.jsx)(g,{id:`ai-job-question`,label:`关注的问题(可选)`,children:(0,E.jsx)(`textarea`,{rows:2,maxLength:2e3,value:x,onChange:e=>C(e.target.value)})}),m.revision!==void 0&&(0,E.jsxs)(y,{children:[`已选择目录版本 v`,m.revision,`。`,` `,(0,E.jsx)(`button`,{type:`button`,"data-testid":`ai-use-latest`,onClick:()=>{let{revision:e,...t}=m;h(t)},children:`改用最新版本`})]})]}),(0,E.jsx)(`p`,{className:`muted`,children:`提交后固定资料版本,结果在项目内共享。分析过程只读取已同步内容。`}),!f.loading&&!j.length&&(0,E.jsx)(y,{children:`请管理员先在“设置与接入”中添加并启用模型。`}),(0,E.jsx)(y,{error:!0,children:f.error||O}),(0,E.jsx)(`button`,{className:`primary`,"data-testid":`ai-job-submit`,disabled:w||!M,children:w?`正在提交…`:`开始分析`})]})}var k=e({path:d(),startLine:f(),endLine:f(),totalLines:f(),content:d(),hasMore:t()});function A({id:e,session:t,onChanged:n,onUpdated:r,onLatest:a}){let u=(0,T.useRef)(0),d=o(),[f,m]=(0,T.useState)([]),g=(0,T.useCallback)(async t=>{let[n,r]=await Promise.all([b.detail(e,t),b.events(e,u.current,t)]);return t.aborted||(u.current=r.nextCursor,m(e=>[...e,...r.events].slice(-200))),n},[e]),[_,x]=(0,T.useState)(3e3),C=s(g,_),w=C.data?.job;(0,T.useEffect)(()=>{w&&r(w)},[w,r]),(0,T.useEffect)(()=>{w&&x([`queued`,`running`].includes(w.status)?3e3:3e4)},[w?.status]);let[D,O]=(0,T.useState)(!1),[k,A]=(0,T.useState)(``),[M,N]=(0,T.useState)(),P=(0,T.useRef)(c()),F=w&&(t.role===`admin`||w.requester===t.memberId);async function I(t){if(!D){O(!0),A(``);try{await S(`ai/jobs/${e}/${t}`,i,{method:`POST`,...t===`retry`?{body:{operationId:P.current}}:{},signal:d}),P.current=c(),await C.reload(),n()}catch(e){d.aborted||A(l(e))}finally{O(!1)}}}return(0,E.jsxs)(`section`,{className:`panel stack`,"data-testid":`ai-job-detail`,"data-job-id":e,"data-status":w?.status,children:[(0,E.jsxs)(`div`,{className:`section-heading`,children:[(0,E.jsx)(`h2`,{children:`分析详情`}),(0,E.jsx)(`button`,{"data-testid":`ai-detail-refresh`,disabled:C.loading,onClick:()=>void C.reload(),children:`刷新进度`})]}),(0,E.jsx)(y,{error:!0,children:C.error||k}),w&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`span`,{className:`badge`,children:h[w.status]}),` `,(0,E.jsx)(`strong`,{children:v[w.workflow]})]}),(0,E.jsxs)(`p`,{className:`ai-break`,children:[w.input.owner,`/`,w.input.path||`(全部文件)`,` · v`,w.input.revision,` ·`,` `,w.input.fileCount,` 个文件`,(0,E.jsx)(`br`,{}),w.model,` · 由 `,w.requester,` 发起 · `,(0,E.jsx)(p,{value:w.createdAt})]}),w.question&&(0,E.jsx)(`p`,{children:w.question}),w.status===`queued`&&(0,E.jsx)(`small`,{children:`等待独立 AI Worker 领取任务;若长时间未开始,请管理员检查 Worker 是否运行。`}),w.error&&(0,E.jsxs)(y,{error:!0,children:[`本次分析未完成:`,w.error]}),w.sourceChanged&&(0,E.jsx)(y,{children:`来源已有新版本,本结果仍对应提交时的资料。`}),(0,E.jsxs)(`div`,{className:`row wrap`,children:[F&&[`queued`,`running`].includes(w.status)&&(0,E.jsx)(`button`,{"data-testid":`ai-job-cancel`,disabled:D,onClick:()=>void I(`cancel`),children:`取消任务`}),F&&[`failed`,`cancelled`].includes(w.status)&&(0,E.jsx)(`button`,{"data-testid":`ai-job-retry`,disabled:D,onClick:()=>void I(`retry`),children:`重试原版本`}),(0,E.jsx)(`button`,{"data-testid":`ai-job-latest`,disabled:D,onClick:()=>a(w),children:`分析最新版本…`})]}),w.result&&(0,E.jsxs)(`article`,{className:`stack ai-result`,"data-testid":`ai-result`,children:[(0,E.jsx)(`h3`,{children:`摘要`}),(0,E.jsx)(`p`,{children:w.result.summary}),w.result.findings.length>0&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`h3`,{children:`主要发现`}),(0,E.jsx)(`ul`,{children:w.result.findings.map((e,t)=>(0,E.jsx)(`li`,{children:e},t))})]}),w.result.uncertainties.length>0&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`h3`,{children:`待确认事项`}),(0,E.jsx)(`ul`,{children:w.result.uncertainties.map((e,t)=>(0,E.jsx)(`li`,{children:e},t))})]}),(0,E.jsxs)(y,{children:[`已读 `,w.result.coverage.readFiles.length,` / `,w.result.coverage.totalFiles,` `,`个文件 · `,w.result.coverage.partial?`未完整覆盖全部内容`:`已完整读取所选内容`]}),w.result.coverage.limitations.map((e,t)=>(0,E.jsx)(`p`,{children:e},t)),(0,E.jsx)(`h3`,{children:`引用来源`}),(0,E.jsx)(`div`,{className:`stack`,children:w.result.citations.map((e,t)=>(0,E.jsxs)(`button`,{className:`ai-citation`,"data-testid":`ai-citation`,onClick:()=>N(e),children:[e.path,`:`,e.startLine,`–`,e.endLine]},t))}),M&&(0,E.jsx)(j,{id:e,citation:M},`${M.path}:${M.startLine}`)]}),(0,E.jsxs)(`details`,{open:w.status===`running`,children:[(0,E.jsx)(`summary`,{children:`执行进度(最近 200 条)`}),(0,E.jsx)(`ol`,{className:`ai-events`,"data-testid":`ai-events`,children:f.map(e=>(0,E.jsxs)(`li`,{children:[`第 `,e.attempt,` 次 · `,e.message]},e.seq))})]}),(0,E.jsxs)(`details`,{children:[(0,E.jsxs)(`summary`,{children:[`执行记录 · `,C.data.attempts.length,` 次`]}),C.data.attempts.map(e=>(0,E.jsxs)(`p`,{children:[`第 `,e.number,` 次 · `,e.status,` · `,(0,E.jsx)(p,{value:e.startedAt}),e.error&&` · ${e.error}`,e.usage&&` · 输入 ${e.usage.inputTokens} / 输出 ${e.usage.outputTokens} token`]},e.number))]})]})]})}function j({id:e,citation:t}){let n=(0,T.useCallback)(n=>S(`ai/jobs/${e}/source?${new URLSearchParams({path:t.path,startLine:String(t.startLine)})}`,k,{signal:n}),[e,t.path,t.startLine]),r=s(n);return(0,E.jsxs)(`div`,{"data-testid":`ai-source`,children:[(0,E.jsx)(`small`,{children:`提交时的原文 · 最多 100 行`}),(0,E.jsx)(y,{error:!0,children:r.error}),r.data&&(0,E.jsx)(`pre`,{className:`raw`,children:r.data.content})]})}function M({session:e,members:t,seed:n}){let[r,i]=(0,T.useState)(!!n),[a,o]=(0,T.useState)(``),c=(0,T.useCallback)(e=>b.jobs(a,e),[a]),l=s(c,!0),[u,d]=(0,T.useState)(``),[f,p]=(0,T.useState)(),[m,g]=(0,T.useState)(),[_,x]=(0,T.useState)(),[S,C]=(0,T.useState)(n),[w,D]=(0,T.useState)(0),k=()=>{o(``),l.reload()};return(0,E.jsxs)(`section`,{className:`board-analysis`,"data-testid":`board-analysis`,children:[(0,E.jsxs)(`div`,{className:`section-heading`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`h2`,{children:`AI 补充`}),(0,E.jsx)(`p`,{children:`基于已发布资料补充说明,保留来源与版本。`})]}),(0,E.jsx)(`button`,{"data-testid":`board-analyze`,onClick:()=>i(e=>!e),children:r?`收起分析表单`:`补充分析`})]}),(0,E.jsxs)(`div`,{className:`ai-grid`,children:[(0,E.jsxs)(`div`,{className:`stack`,children:[r&&(0,E.jsx)(O,{members:t,me:e.memberId,seed:S,initialProfile:m,initialQuestion:_,onCreated:e=>{d(e.id),k()}},w),(0,E.jsxs)(`section`,{className:`panel stack`,children:[(0,E.jsxs)(`div`,{className:`section-heading`,children:[(0,E.jsx)(`h2`,{children:`分析记录`}),(0,E.jsx)(`button`,{"data-testid":`ai-list-refresh`,onClick:k,children:`更新列表`})]}),(0,E.jsx)(y,{error:!0,children:l.error}),l.data?.jobs.length===0&&(0,E.jsx)(`p`,{children:`暂无任务。`}),l.data?.jobs.map(e=>{let t=f?.id===e.id?f:e;return(0,E.jsxs)(`button`,{className:`ai-job-row ${u===t.id?`selected`:``}`,"data-testid":`ai-job-row`,"data-job-id":t.id,"data-status":t.status,"aria-pressed":u===t.id,onClick:()=>d(t.id),children:[(0,E.jsxs)(`strong`,{children:[t.input.owner,`/`,t.input.path||`全部文件`]}),(0,E.jsxs)(`small`,{children:[v[t.workflow],` · `,h[t.status],` · v`,t.input.revision]})]},t.id)}),l.data?.nextCursor&&(0,E.jsx)(`button`,{"data-testid":`ai-jobs-next`,onClick:()=>o(l.data.nextCursor),children:`下一页`})]})]}),u?(0,E.jsx)(A,{id:u,session:e,onChanged:k,onUpdated:p,onLatest:e=>{i(!0),g(e.profileId),x(e.question),C({owner:e.input.owner,kind:e.input.kind,path:e.input.path}),D(e=>e+1),document.querySelector(`[data-testid="ai-job-form"]`)?.scrollIntoView({behavior:`smooth`})}},u):(0,E.jsxs)(`section`,{className:`panel empty`,children:[(0,E.jsx)(`h2`,{children:`资料解读与来源`}),(0,E.jsx)(`p`,{children:`选择已有分析记录,或针对某份文件、某个目录补充分析。`})]})]})]})}function N({session:e,members:t,seed:n,onFiles:r,onSessions:i}){let[o,s]=(0,T.useState)(e.memberId),c=t.find(e=>e.id===o),l=t.filter(e=>e.fileRevision>0);return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(a,{title:`任务进展看板`,description:`从成员工作资料了解进展,结合有来源的 AI 解读继续协作。`,children:(0,E.jsx)(`button`,{onClick:i,children:`浏览团队会话 →`})}),(0,E.jsxs)(`div`,{className:`board-overview`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`small`,{children:`团队成员`}),(0,E.jsx)(`strong`,{children:t.filter(e=>e.enabled).length})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`small`,{children:`已发布工作资料`}),(0,E.jsxs)(`strong`,{children:[l.length,(0,E.jsx)(`span`,{children:` 位成员`})]})]}),(0,E.jsx)(`p`,{children:`工作内容保留在各成员自己的目录中。打开索引和专题记录,查看原文中的进展与结论。`})]}),(0,E.jsxs)(`section`,{"aria-label":`成员工作区`,className:`board-workspaces`,children:[(0,E.jsxs)(`div`,{className:`section-heading`,children:[(0,E.jsx)(`h2`,{children:`成员工作区`}),(0,E.jsx)(`span`,{className:`muted`,children:`资料入口 · 最近发布`})]}),(0,E.jsx)(`div`,{className:`workspace-cards`,children:t.map(e=>(0,E.jsxs)(`article`,{className:`workspace-card`,"data-testid":`board-member`,"data-member-id":e.id,children:[(0,E.jsxs)(`div`,{className:`row`,children:[(0,E.jsx)(`div`,{className:`avatar small`,children:e.displayName.slice(0,1).toUpperCase()}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`h3`,{children:e.displayName}),(0,E.jsxs)(`small`,{children:[e.id,e.enabled?``:` · 已停用`]})]})]}),(0,E.jsx)(`p`,{children:e.fileRevision?(0,E.jsxs)(E.Fragment,{children:[`资料版本 v`,e.fileRevision,(0,E.jsx)(`br`,{}),(0,E.jsx)(p,{value:e.lastPublishedAt})]}):`尚未发布工作资料`}),(0,E.jsxs)(`div`,{className:`row wrap`,children:[(0,E.jsx)(`button`,{"data-testid":`board-open-index`,disabled:!e.fileRevision,onClick:()=>s(e.id),children:`查看索引`}),(0,E.jsx)(`button`,{"data-testid":`board-open-files`,onClick:()=>r({owner:e.id}),children:`浏览工作区 →`})]})]},e.id))})]}),c&&(0,E.jsx)(D,{owner:o,revision:c.fileRevision,onFiles:r},`${o}:${c.fileRevision}`),(0,E.jsx)(M,{session:e,members:t,seed:n})]})}export{N as Dashboard};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{N as e,_ as t,c as n,f as r,h as i,m as a,o,s,u as c,y as l}from"./index-l1r3Ekhs.js";import{t as u}from"./Markdown-CcCzS4DP.js";import{t as d}from"./file-links-BAMah1K6.js";var f=e(),p=c();function m({members:e,me:t,onAnalyze:r,initial:i}){let[a,s]=(0,f.useState)(i?.owner??t),[c,u]=(0,f.useState)(i?.revision),[d,m]=(0,f.useState)(i?.revision===void 0?``:String(i.revision)),[g,_]=(0,f.useState)(0);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(n,{title:l.files,description:`浏览成员工作区的目录和文本,保留各自的组织方式。`,children:(0,p.jsx)(`span`,{className:`badge`,children:`只读`})}),(0,p.jsxs)(`div`,{className:`file-toolbar`,children:[(0,p.jsx)(o,{id:`file-owner`,name:`owner`,label:l.owner,children:(0,p.jsx)(`select`,{value:a,onChange:e=>{s(e.target.value),u(void 0),m(``)},children:e.map(e=>(0,p.jsxs)(`option`,{value:e.id,children:[e.displayName,` · `,e.id,e.enabled?``:` (${l.disabled})`]},e.id))})}),(0,p.jsxs)(`form`,{className:`row`,"data-testid":`file-revision-form`,"aria-label":l.versionPicker,onSubmit:e=>{e.preventDefault(),u(d===``?void 0:Number(d)),_(e=>e+1)},children:[(0,p.jsx)(o,{id:`file-revision`,label:l.directoryVersion,children:(0,p.jsx)(`input`,{type:`number`,min:0,max:2**53-1,value:d,placeholder:l.latest,onChange:e=>m(e.target.value)})}),(0,p.jsx)(`button`,{"data-testid":`file-view-version`,children:l.viewVersion})]}),(0,p.jsx)(`button`,{"data-testid":`files-refresh`,onClick:()=>{u(void 0),m(``),_(e=>e+1)},children:l.refreshFiles})]}),(0,p.jsx)(h,{owner:a,version:c,refresh:g,initial:a===i?.owner?i:void 0,onAnalyze:r},`${a}:${c}`)]})}function h({owner:e,version:t,refresh:n,initial:o,onAnalyze:c}){let[u,m]=(0,f.useState)(o?.path??``),h=(0,f.useRef)(o?.file),v=(0,f.useRef)(t),[y,b]=(0,f.useState)(),[x,S]=(0,f.useState)(),[C,w]=(0,f.useState)(``),[T,E]=(0,f.useState)(!1),D=(0,f.useRef)(null),O=(0,f.useRef)(n),k=(0,f.useCallback)(async r=>{w(``),O.current!==n&&(v.current=t,O.current=n);let o=await a.tree(e,u,v.current,``,r),s;if(h.current)try{s=(await a.file(e,h.current,o.revision,r)).file}catch(e){r.aborted||w(i(e))}return r.aborted||(v.current=o.revision),{...o,linked:s}},[e,u,t,n]),A=r(k);(0,f.useEffect)(()=>{A.data?.path===u&&(D.current?.abort(),E(!1),b(A.data),O.current=n,S(e=>A.data.linked??A.data.entries.find(t=>t.kind===`file`&&t.path===(h.current??e?.path))))},[A.data,u]),(0,f.useEffect)(()=>()=>D.current?.abort(),[]);function j(t,n){if(D.current?.abort(),E(!1),w(``),h.current=n,t===u){let t=y?.entries.find(e=>e.kind===`file`&&e.path===n);if(S(t),n&&!t){let t=new AbortController;D.current=t,a.file(e,n,v.current,t.signal).then(e=>{t.signal.aborted||S(e.file)}).catch(e=>{t.signal.aborted||w(i(e))})}}else b(void 0),S(void 0),m(t)}async function M(){if(!y?.nextCursor||T)return;E(!0),w(``);let t=new AbortController;D.current=t;try{let n=await a.tree(e,u,y.revision,y.nextCursor,t.signal);if(!t.signal.aborted){b({...n,entries:[...y.entries,...n.entries]});let e=n.entries.find(e=>e.kind===`file`&&e.path===h.current);e&&S(e)}}catch(e){t.signal.aborted||w(i(e))}finally{t.signal.aborted||E(!1)}}function N(e){if(!x)return!1;let t=d(x.path,e);return t?(w(``),t.directory?(j(t.path),!0):t.path===x.path?(t.anchor&&[...document.querySelectorAll(`.markdown h1,.markdown h2,.markdown h3,.markdown h4`)].find(e=>e.textContent?.trim().toLowerCase().replace(/\s+/g,`-`)===t.anchor.toLowerCase())?.scrollIntoView({block:`center`}),!0):(j(t.path.split(`/`).slice(0,-1).join(`/`),t.path),!0)):!/^[a-z][a-z0-9+.-]*:/i.test(e)&&!e.startsWith(`//`)&&(w(`该链接超出成员工作区或路径不可用,请在原仓库查看。`),!0)}let P=y?.entries??[],F=y?.path===u?y:void 0;return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(s,{error:!0,children:A.error||C}),A.error&&(0,p.jsx)(`button`,{"data-testid":`files-retry`,onClick:()=>void A.reload(),children:l.retry}),(0,p.jsxs)(`div`,{className:`file-pathbar`,children:[(0,p.jsxs)(`nav`,{"aria-label":`文件路径`,"data-testid":`file-breadcrumbs`,children:[(0,p.jsx)(`button`,{onClick:()=>j(``),children:e}),u.split(`/`).filter(Boolean).map((e,t,n)=>(0,p.jsxs)(`span`,{children:[(0,p.jsx)(`span`,{"aria-hidden":`true`,children:` / `}),(0,p.jsx)(`button`,{onClick:()=>j(n.slice(0,t+1).join(`/`)),children:e})]},t))]}),(0,p.jsxs)(`div`,{className:`row wrap`,children:[(0,p.jsx)(`button`,{"data-testid":`ai-analyze-directory`,disabled:!F?.entries.length||A.loading,onClick:()=>c({owner:e,kind:`directory`,path:u,revision:F.revision}),children:`补充目录分析`}),x&&(0,p.jsx)(`button`,{"data-testid":`ai-analyze-file`,disabled:A.loading,onClick:()=>c({owner:e,kind:`file`,path:x.path,revision:y.revision}),children:`生成文件摘要`})]})]}),(0,p.jsxs)(`div`,{className:`file-browser`,"data-testid":`file-browser`,"data-owner-id":e,"data-directory-path":u,"data-revision":F?.revision,children:[(0,p.jsxs)(`section`,{className:`file-list`,"data-testid":`file-list`,"aria-label":`目录内容`,"aria-busy":A.loading||T,children:[(0,p.jsxs)(`div`,{className:`list-caption`,children:[(0,p.jsx)(`span`,{children:`目录与文件`}),(0,p.jsx)(`span`,{children:F?`v${F.revision}`:l.loading})]}),u&&(0,p.jsx)(`button`,{className:`file-item`,"data-testid":`directory-up`,onClick:()=>j(u.split(`/`).slice(0,-1).join(`/`)),children:`← 返回上级`}),F&&P.map(e=>e.kind===`directory`?(0,p.jsxs)(`button`,{className:`file-item directory-item`,"data-testid":`directory-row`,"data-directory-path":e.path,"aria-label":`打开目录 ${e.path}`,onClick:()=>j(e.path),children:[(0,p.jsx)(`span`,{className:`file-glyph`,"aria-hidden":`true`,children:`▱`}),(0,p.jsxs)(`span`,{className:`file-path`,children:[e.path.split(`/`).at(-1),(0,p.jsxs)(`small`,{children:[e.fileCount,` 个文件`]})]}),(0,p.jsx)(`span`,{"aria-hidden":`true`,children:`›`})]},e.path):(0,p.jsxs)(`button`,{className:`file-item ${x?.path===e.path?`selected`:``}`,"data-testid":`file-row`,"data-file-path":e.path,"data-file-revision":e.revision,"aria-label":e.path,"aria-pressed":x?.path===e.path,onClick:()=>{h.current=void 0,S(e)},children:[(0,p.jsx)(`span`,{className:`file-glyph`,"aria-hidden":`true`,children:`▤`}),(0,p.jsxs)(`span`,{className:`file-path`,children:[e.path.split(`/`).at(-1),(0,p.jsxs)(`small`,{children:[_(e.size),` · v`,e.revision]})]})]},e.path)),F?.entries.length===0&&(0,p.jsxs)(`div`,{className:`empty`,children:[(0,p.jsx)(`h3`,{children:l.noFiles}),(0,p.jsx)(`p`,{children:l.noFilesHint})]}),F?.nextCursor&&(0,p.jsx)(`button`,{className:`load-more`,"data-testid":`files-load-more`,disabled:T,onClick:()=>void M(),children:T?l.loading:l.more}),h.current&&F&&!x&&(0,p.jsx)(`p`,{className:`directory-hint`,children:y?.nextCursor?`目标文件可能在后续页,请加载更多。`:`该版本中未找到链接指向的文件。`})]}),(0,p.jsx)(`section`,{className:`file-preview`,"data-testid":`file-preview`,"data-file-path":x?.path,"aria-label":l.filePreview,children:x?(0,p.jsx)(g,{file:x,onLink:N},x.sha256+x.path):(0,p.jsxs)(`div`,{className:`empty preview-empty`,children:[(0,p.jsx)(`span`,{"aria-hidden":`true`,children:`▤`}),(0,p.jsx)(`h3`,{children:l.pickFile}),(0,p.jsx)(`p`,{children:`打开目录或选择文本文件进行只读浏览。`})]})})]})]})}function g({file:e,onLink:n}){let[r,a]=(0,f.useState)(),[o,c]=(0,f.useState)(``),[d,m]=(0,f.useState)(!1),[h,g]=(0,f.useState)(0),v=e.size>524288,y=/\.(md|markdown)$/i.test(e.path);return(0,f.useEffect)(()=>{if(v)return;let n=new AbortController;return c(``),a(void 0),(async()=>{try{let r=await t(e,n.signal);n.signal.aborted||a(r)}catch(e){n.signal.aborted||c(i(e))}})(),()=>n.abort()},[e.sha256,e.size,v,h]),(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(`div`,{className:`preview-header`,children:[(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`h2`,{children:e.path}),(0,p.jsxs)(`small`,{children:[l.readOnly,` · `,_(e.size),` · v`,e.revision]})]}),(0,p.jsxs)(`div`,{className:`row wrap`,children:[y&&(0,p.jsx)(`button`,{"data-testid":`file-toggle-raw`,"aria-pressed":d,onClick:()=>m(!d),children:d?l.rendered:l.raw}),(0,p.jsx)(`a`,{className:`button`,"data-testid":`file-download`,href:`/api/v1/blobs/${e.sha256}`,download:e.path.split(`/`).at(-1),children:l.download})]})]}),v?(0,p.jsx)(`div`,{className:`empty`,children:(0,p.jsx)(`p`,{children:v?l.previewLarge:l.previewUnavailable})}):o?(0,p.jsxs)(`div`,{className:`preview-body`,children:[(0,p.jsx)(s,{error:!0,children:o}),(0,p.jsx)(`button`,{"data-testid":`file-preview-retry`,onClick:()=>g(e=>e+1),children:l.retry})]}):r===void 0?(0,p.jsx)(`p`,{className:`preview-body`,role:`status`,children:l.loading}):(0,p.jsx)(`div`,{className:`preview-body`,children:y&&!d?(0,p.jsx)(`article`,{className:`markdown`,"data-testid":`file-content`,"data-format":`markdown`,children:(0,p.jsx)(u,{onLink:n,children:r})}):(0,p.jsx)(`pre`,{className:`raw`,"data-testid":`file-content`,"data-format":`text`,children:r})})]})}function _(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KiB`:`${(e/1048576).toFixed(1)} MiB`}export{m as Files};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,C as t,E as n,M as r,N as i,O as a,S as o,T as s,_ as c,b as l,c as u,f as d,j as f,k as p,l as m,o as h,s as g,u as _,v,w as y}from"./index-l1r3Ekhs.js";import{t as b}from"./Markdown-CcCzS4DP.js";var x=i(),S=s([`claude-code`,`codex`,`cursor`,`pi`,`dsh`]),C=e({formatVersion:a(1),adapterVersion:a(1),agent:S,nativeId:f().min(1).max(512),cwd:f().min(1).max(4096),messages:n(e({id:f().min(1).max(1024),role:s([`user`,`assistant`]),text:f().min(1).max(2097152),source:f().min(1).max(1024)}).strict()).max(5e4)}).strict().refine(e=>new Set(e.messages.map(e=>e.id)).size===e.messages.length,`Duplicate message IDs.`);e({operationId:r(),sessionKey:o,parentRevision:t,blob:l}).strict();var w=e({owner:y,sessionKey:o,agent:S,nativeId:f(),cwd:f(),title:f(),revision:t,updatedAt:f(),messageCount:p().int().nonnegative(),blob:l}),T=e({sessions:n(w),nextCursor:t.nullable()}),E=e({matches:n(e({owner:y,sessionKey:o,revision:t,messageId:f(),role:s([`user`,`assistant`]),snippet:f()})),nextCursor:t.nullable()}),D=_();function O(){let[e,t]=(0,x.useState)(``),[n,r]=(0,x.useState)(``),[i,a]=(0,x.useState)(0),[o,s]=(0,x.useState)(),c=(0,x.useCallback)(async e=>n?{kind:`search`,...await v(`sessions/search?${new URLSearchParams({q:n,after:String(i),limit:`30`})}`,E,{signal:e})}:{kind:`list`,...await v(`sessions?after=${i}&limit=30`,T,{signal:e})},[n,i]),l=d(c),f=l.data;return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(u,{title:`会话浏览`,description:`查阅团队已共享的会话,搜索用户问题与助手回答。`,children:(0,D.jsx)(`span`,{className:`badge`,children:`只读`})}),(0,D.jsxs)(`form`,{className:`session-search`,"data-testid":`session-search-form`,onSubmit:t=>{t.preventDefault(),r(e.trim()),a(0),s(void 0)},children:[(0,D.jsx)(h,{id:`session-query`,label:`搜索会话正文`,children:(0,D.jsx)(`input`,{value:e,maxLength:500,placeholder:`输入关键词或代码标识符`,onChange:e=>t(e.target.value)})}),(0,D.jsx)(`button`,{className:`primary`,"data-testid":`session-search`,children:`搜索`}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>{t(``),r(``),a(0),s(void 0),l.reload()},children:`全部会话`})]}),(0,D.jsx)(g,{error:!0,children:l.error}),(0,D.jsxs)(`div`,{className:`session-browser`,children:[(0,D.jsxs)(`section`,{className:`session-list panel stack`,"aria-label":`会话列表`,"aria-busy":l.loading,children:[(0,D.jsxs)(`div`,{className:`section-heading`,children:[(0,D.jsx)(`h2`,{children:n?`搜索结果`:`已共享会话`}),(0,D.jsx)(`button`,{"data-testid":`sessions-refresh`,disabled:l.loading,onClick:()=>void l.reload(),children:`刷新`})]}),f?.kind===`list`&&f.sessions.map(e=>(0,D.jsxs)(`button`,{className:`session-item`,"data-testid":`session-row`,"data-owner-id":e.owner,"data-session-key":e.sessionKey,"aria-pressed":o?.key===e.sessionKey&&o.owner===e.owner,onClick:()=>s({owner:e.owner,key:e.sessionKey,revision:e.revision}),children:[(0,D.jsx)(`strong`,{children:e.title||e.nativeId}),(0,D.jsxs)(`small`,{children:[e.owner,` · `,e.agent,` · `,e.messageCount,` 条消息`]}),(0,D.jsx)(`small`,{children:(0,D.jsx)(m,{value:e.updatedAt})})]},`${e.owner}:${e.sessionKey}`)),f?.kind===`search`&&f.matches.map(e=>(0,D.jsxs)(`button`,{className:`session-item`,"data-testid":`session-match`,"data-message-id":e.messageId,onClick:()=>s({owner:e.owner,key:e.sessionKey,revision:e.revision,messageId:e.messageId}),children:[(0,D.jsxs)(`small`,{children:[e.owner,` · `,e.role===`user`?`用户`:`助手`,` · v`,e.revision]}),(0,D.jsx)(`span`,{children:e.snippet})]},`${e.owner}:${e.sessionKey}:${e.messageId}`)),f&&(f.kind===`list`?f.sessions.length===0:f.matches.length===0)&&(0,D.jsxs)(`div`,{className:`empty`,children:[(0,D.jsx)(`h3`,{children:n?`没有匹配的正文`:`暂无共享会话`}),(0,D.jsx)(`p`,{children:n?`可以更换关键词继续搜索。`:`客户端登记并同步会话后,会在这里展示。`})]}),f?.nextCursor!=null&&(0,D.jsx)(`button`,{"data-testid":`sessions-next`,onClick:()=>a(f.nextCursor),children:`下一页`}),i>0&&(0,D.jsx)(`button`,{onClick:()=>a(0),children:`返回第一页`})]}),o?(0,D.jsx)(k,{selection:o},`${o.owner}:${o.key}:${o.revision}:${o.messageId}`):(0,D.jsxs)(`section`,{className:`panel empty`,children:[(0,D.jsx)(`h2`,{children:`选择会话查看内容`}),(0,D.jsx)(`p`,{children:`按版本保留已共享的对话正文。`})]})]})]})}function k({selection:e}){let t=(0,x.useCallback)(t=>v(`sessions/${encodeURIComponent(e.owner)}/${e.key}?revision=${e.revision}`,w,{signal:t}),[e.owner,e.key,e.revision]),n=d(t);return(0,D.jsxs)(`section`,{className:`panel stack`,"data-testid":`session-detail`,children:[(0,D.jsx)(g,{error:!0,children:n.error}),n.data&&(0,D.jsx)(A,{info:n.data,messageId:e.messageId},n.data.blob.sha256)]})}function A({info:e,messageId:t}){let n=(0,x.useCallback)(async t=>C.parse(JSON.parse(await c(e.blob,t))),[e.blob.sha256,e.blob.size]),r=d(n),[i,a]=(0,x.useState)(0);return(0,x.useEffect)(()=>{if(r.data&&t){let e=r.data.messages.findIndex(e=>e.id===t);e>=0&&a(Math.floor(e/50)*50)}},[r.data,t]),(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h2`,{className:`session-title`,children:e.title||e.nativeId}),(0,D.jsxs)(`p`,{children:[e.owner,` · `,e.agent,` · v`,e.revision,` · `,e.messageCount,` 条消息`]}),(0,D.jsx)(`small`,{children:(0,D.jsx)(m,{value:e.updatedAt})})]}),(0,D.jsx)(g,{error:!0,children:r.error}),r.error&&(0,D.jsx)(`button`,{onClick:()=>void r.reload(),children:`重新读取`}),r.loading&&(0,D.jsx)(`p`,{role:`status`,children:`正在读取会话…`}),r.data&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`div`,{className:`session-messages`,children:r.data.messages.slice(i,i+50).map(e=>(0,D.jsxs)(`article`,{className:`session-message ${e.role} ${e.id===t?`matched`:``}`,"data-testid":`session-message`,"data-message-id":e.id,children:[(0,D.jsxs)(`div`,{className:`message-role`,children:[e.role===`user`?`用户`:`助手`,e.id===t?` · 搜索命中`:``]}),(0,D.jsx)(`div`,{className:`markdown`,children:(0,D.jsx)(b,{children:e.text})})]},e.id))}),(0,D.jsxs)(`div`,{className:`row wrap`,children:[(0,D.jsx)(`button`,{"data-testid":`messages-prev`,disabled:i===0,onClick:()=>a(Math.max(0,i-50)),children:`上一段`}),(0,D.jsxs)(`small`,{children:[r.data.messages.length?i+1:0,`–`,Math.min(i+50,r.data.messages.length),` /`,` `,r.data.messages.length]}),(0,D.jsx)(`button`,{"data-testid":`messages-next`,disabled:i+50>=r.data.messages.length,onClick:()=>a(i+50),children:`下一段`})]})]})]})}export{O as Sessions};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{x as e}from"./index-l1r3Ekhs.js";function t(t,n){if(!n||/^(?:[a-z][a-z0-9+.-]*:|\/)/i.test(n))return null;try{let r=n.split(/[?#]/,1)[0],i=r?t.split(`/`).slice(0,-1):t.split(`/`);for(let e of r.split(`/`)){let t=decodeURIComponent(e);if(t&&t!==`.`){if(t===`..`){if(!i.length)return null;i.pop()}else{if(t.includes(`/`)||t.includes(`\\`))return null;i.push(t)}}}return{path:i.length?e.parse(i.join(`/`)):``,directory:r.endsWith(`/`),anchor:n.includes(`#`)?decodeURIComponent(n.slice(n.indexOf(`#`)+1)):``}}catch{return null}}export{t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{color:#242424;font-synthesis:none;--line:#e2e2e3;--muted:#737373;--sidebar:#f5f5f5;--blue:#edf3f8;background:#fff;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.6}*{box-sizing:border-box}body{margin:0}button,input,textarea,select{font:inherit;color:inherit}button,.button{border:1px solid var(--line);cursor:pointer;white-space:normal;background:#fff;border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;gap:8px;min-height:40px;padding:8px 14px;font-size:13px;line-height:20px;text-decoration:none;display:inline-flex}button:hover,.button:hover{background:#f5f5f5}button:disabled{opacity:.48;cursor:default}button.primary{color:#fff;background:#252525;border-color:#252525}button.primary:hover{background:#414141}button.danger{color:#fff;background:#b93434;border-color:#b93434}:focus-visible{outline-offset:3px;outline:2px solid #4b7eab}button.primary:focus-visible,button.danger:focus-visible{outline-offset:-4px;outline-color:#fff}input,select,textarea{background:#fff;border:1px solid #d9d9da;border-radius:9px;width:100%;min-height:42px;padding:9px 11px}textarea{resize:vertical}input:disabled,textarea:disabled{color:#666;background:#f8f8f8}h1,h2,h3,p{margin:0}h1{letter-spacing:-.6px;font-size:26px;font-weight:600;line-height:1.35}h2{font-size:17px;font-weight:550;line-height:1.5}h3{font-size:14px;font-weight:600}p{color:#666;line-height:1.8}small,.muted{color:var(--muted);font-size:12px}a{color:#355e80}code,pre{font-family:SFMono-Regular,Consolas,monospace}fieldset{border:0;min-width:0;margin:0;padding:0}details>summary{cursor:pointer;padding:10px 0;font-size:13px}details p{margin:8px 0}dt{color:#777}dd{overflow-wrap:anywhere;margin:0}.summary{grid-template-columns:auto 1fr;gap:8px 18px;margin:12px 0;font-size:13px;display:grid}.brand{letter-spacing:-1.1px;align-items:center;gap:9px;font-size:27px;font-weight:450;line-height:1;display:flex}.brand-icon{background:#242424;border-radius:9px;place-items:center;width:34px;height:34px;display:grid}.brand-icon svg{fill:none;stroke:#fff;stroke-width:1.7px;stroke-linecap:round;width:24px}.icon{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linejoin:round;stroke-linecap:round;width:18px;height:18px}.stack{flex-direction:column;gap:22px;min-width:0;display:flex}.field{flex-direction:column;gap:7px;min-width:0;font-size:13px;display:flex}.field small{line-height:1.7}.row{align-items:center;gap:10px;display:flex}.wrap{flex-wrap:wrap}.actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;display:flex}.form-grid{grid-template-columns:1fr 1fr;gap:18px;display:grid}.notice{overflow-wrap:anywhere;background:#f2f7fa;border:1px solid #d5e2e9;border-radius:10px;padding:12px 14px;font-size:13px}.notice:empty{display:none}.notice.error{color:#9d4733;background:#fff6f3;border-color:#eedbd4}.error-text{color:#a33f32;overflow-wrap:anywhere}.badge{color:#686868;vertical-align:middle;background:#f8f8f8;border:1px solid #e4e4e4;border-radius:6px;align-items:center;padding:2px 7px;font-size:11px;font-weight:400;line-height:20px;display:inline-flex}.badge.warn{color:#9c5b31;background:#fff4eb;border-color:#f0e0d0}.panel{border:1px solid var(--line);border-radius:12px;min-width:0;padding:24px}.panel>h2,.panel>h3{margin-bottom:16px}.section-heading{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:24px;display:flex}.empty{text-align:center;color:#9b9b9b;padding:48px 24px}.empty h3{color:#555;margin-bottom:6px}.empty p{font-size:13px}.boot{gap:24px;max-width:520px;margin:100px auto;padding:24px;display:grid}.access{grid-template-columns:minmax(280px,40%) 1fr;min-height:100dvh;display:grid}.access-aside{background:#f5f5f5;flex-direction:column;padding:32px;display:flex;position:relative;overflow:hidden}.access-aside>p{margin-top:auto;font-size:13px}.access-art{opacity:.65;pointer-events:none;grid-template-columns:repeat(3,1fr);gap:14px;display:grid;position:absolute;inset:28% 12%;transform:rotate(-10deg)}.access-art i{background:linear-gradient(160deg,#eee,#0000);border:1px solid #d4d4d4;border-radius:14px;box-shadow:0 12px 20px #00000003}.access-art i:nth-child(2),.access-art i:nth-child(6){transform:translateY(-20px)}.access-main{justify-content:center;align-items:center;padding:56px 48px;display:flex}.access-form{flex-direction:column;gap:22px;width:100%;max-width:380px;display:flex}.access-form>p{margin-top:-10px;font-size:14px}.eyebrow{letter-spacing:2.4px;color:#929292;font-size:10px}.wide{width:100%}.mobile-brand{display:none}.setup-form{max-width:560px}.steps{gap:16px;margin:5px 0 16px;padding:0;list-style:none;display:flex}.steps li{color:#aaa;align-items:center;gap:6px;font-size:12px;display:flex}.steps li span{border:1px solid #ddd;border-radius:50%;place-items:center;width:23px;height:23px;font-size:11px;display:grid}.steps li[aria-current]{color:#242424}.steps li[aria-current] span{color:#fff;background:#242424;border-color:#242424}.workspace{min-height:100dvh;display:flex}.sidebar{background:var(--sidebar);z-index:20;border-right:1px solid #ededed;flex-direction:column;flex-shrink:0;width:244px;padding:24px 18px;display:flex;position:fixed;inset:0 auto 0 0}.sidebar .brand{padding:0 6px}.project-label{flex-direction:column;gap:6px;padding:36px 12px 24px;display:flex}.project-label small{letter-spacing:1px;font-size:10px}.project-label strong{overflow-wrap:anywhere;font-size:14px;font-weight:550}.sidebar nav{flex-direction:column;gap:6px;display:flex}.sidebar nav a{color:#777;border-radius:9px;align-items:center;gap:12px;padding:12px 14px;font-size:13px;text-decoration:none;display:flex}.sidebar nav a:hover{background:#ececec}.sidebar nav a.active{color:#252525;background:#e7edf2}.sidebar-account{border-top:1px solid var(--line);margin-top:auto;padding:22px 8px 0}.avatar{background:#f6f6f6;border:1px solid #ddd;border-radius:12px;flex-shrink:0;place-items:center;width:40px;height:40px;font-size:16px;display:grid}.avatar.small{background:#fff;border-radius:9px;width:32px;height:32px;font-size:13px}.sidebar-account strong{font-size:13px;font-weight:500}.sidebar-account small{font-size:11px;display:block}.logout{color:#777;background:0 0;width:100%;margin-top:16px;font-size:12px}.main-shell{width:calc(100% - 244px);min-width:0;margin-left:244px}.topbar{color:#777;border-bottom:1px solid #eee;justify-content:space-between;align-items:center;gap:14px;height:76px;padding:0 40px;font-size:12px;display:flex}.separator{color:#c2c2c2;padding:0 14px;display:inline-block}.topbar>span{overflow-wrap:anywhere;min-width:0}.topbar>button:last-child{min-height:32px;padding:5px 12px;font-size:12px}main#main{outline:0;max-width:1720px;margin:0 auto;padding:38px 40px 60px}.page-header{justify-content:space-between;align-items:center;gap:24px;margin-bottom:30px;display:flex}.page-header p{margin-top:10px;font-size:13px}.page-header h1{font-size:24px}.file-toolbar{flex-wrap:wrap;align-items:flex-end;gap:16px;margin-bottom:24px;display:flex}.file-toolbar>.field{min-width:220px}.file-toolbar form{align-items:flex-end}.file-toolbar input{max-width:150px}.file-toolbar>button:last-child{margin-left:auto}.file-browser{border:1px solid var(--line);border-radius:12px;grid-template-columns:minmax(230px,32%) 1fr;min-height:570px;display:grid;overflow:hidden}.file-list{border-right:1px solid var(--line);min-height:400px;max-height:calc(100dvh - 280px);overflow:auto}.list-caption{color:#888;z-index:1;background:#fafafa;border-bottom:1px solid #eee;justify-content:space-between;padding:15px 18px;font-size:11px;display:flex;position:sticky;top:0}.file-item{text-align:left;background:#fff;border:0;border-bottom:1px solid #f1f1f1;border-radius:0;justify-content:flex-start;align-items:flex-start;gap:12px;width:100%;padding:16px 18px;display:flex}.file-item.selected{background:#eef4f8}.file-glyph{color:#999;font-size:19px;line-height:22px}.file-path{overflow-wrap:anywhere;min-width:0;font-size:13px}.file-path small{color:#999;margin-top:5px;font-size:11px;display:block}.load-more{max-width:calc(100% - 32px);margin:16px}.file-preview{flex-direction:column;min-width:0;min-height:400px;max-height:calc(100dvh - 280px);display:flex;overflow:auto}.preview-empty{margin:auto}.preview-empty>span{color:#c8c8c8;margin-bottom:14px;font-size:38px;display:block}.preview-header{border-bottom:1px solid #eee;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:19px 24px;display:flex}.preview-header>div{min-width:0}.preview-header h2{overflow-wrap:anywhere;margin-bottom:3px;font-size:14px}.preview-body{min-width:0;padding:28px}.raw{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:12px;line-height:1.8}.markdown{overflow-wrap:anywhere;font-size:14px;line-height:1.85}.markdown h1{font-size:25px}.markdown h2{font-size:20px}.markdown h3{font-size:16px}.markdown h1,.markdown h2,.markdown h3{margin:24px 0 12px}.markdown>:first-child{margin-top:0}.markdown p,.markdown ul,.markdown ol{color:#444;margin:12px 0}.markdown pre{background:#f7f7f7;border-radius:8px;padding:16px;font-size:12px;overflow:auto}.markdown code{background:#f5f5f5;border-radius:3px;padding:2px 4px}.markdown pre code{padding:0}.markdown blockquote{border-left:3px solid #ddd;margin:18px 0;padding:0 18px}.markdown table{border-collapse:collapse;max-width:100%;display:block;overflow:auto}.markdown td,.markdown th{border:1px solid #ddd;padding:8px 12px}.markdown input[type=checkbox]{width:14px;min-height:0}.member-list{grid-template-columns:repeat(auto-fit,minmax(310px,1fr));align-items:start;gap:20px;margin-top:24px;display:grid}.member-card{border:1px solid var(--line);border-radius:12px;flex-direction:column;gap:20px;min-width:0;padding:24px;display:flex}.member-heading{align-items:flex-start;gap:14px;display:flex}.member-heading>div{min-width:0}.member-heading h2{overflow-wrap:anywhere;font-size:16px}.member-heading h2 .badge{margin-left:8px}.member-heading p{margin-top:4px}.member-actions{border-top:1px solid #eee;flex-wrap:wrap;gap:8px;padding-top:18px;display:flex}.member-actions button{padding:7px 10px;font-size:12px}.device-status{flex-direction:column;gap:10px;min-width:0;font-size:12px;display:flex}.device-status details{border-top:1px solid #eee}.settings-grid{grid-template-columns:minmax(0,1.4fr) minmax(290px,1fr);align-items:start;gap:24px;display:grid}.application-row{border-bottom:1px solid #eee;grid-template-columns:90px 1fr;gap:18px;padding:20px 0;display:grid}.application-row:last-child{border-bottom:0;padding-bottom:0}.application-row strong{overflow-wrap:anywhere;font-size:13px;font-weight:500}.connect-panel{flex-direction:column;gap:18px;display:flex}.connect-panel>h2{margin:0}.connect-panel p{font-size:13px}.command{background:#fafafa;border:1px solid #e5e5e5;border-radius:10px;align-items:flex-start;gap:10px;padding:12px;display:flex}.command code{overflow-wrap:anywhere;white-space:pre-wrap;flex:1;min-width:0;padding:5px 0;font-size:12px}.command button{min-height:32px;padding:5px 9px;font-size:11px}.scope-path{overflow-wrap:anywhere;color:#777;border-top:1px solid #eee;margin-top:20px;padding-top:16px;font-size:12px}dialog{border:1px solid #ddd;border-radius:14px;width:calc(100% - 32px);max-width:500px;max-height:85dvh;padding:0;overflow:auto;box-shadow:0 20px 70px #0002}dialog::backdrop{background:#0005}.dialog-content{padding:24px}.dialog-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:24px;display:flex}.dialog-header h2{font-size:20px}.dialog-header>button{background:0 0;border:0;width:36px;min-height:36px;padding:0;font-size:23px}.menu-toggle,.nav-backdrop{display:none}.skip-link{z-index:100;background:#fff;padding:12px;position:fixed;top:-100px;left:10px}.skip-link:focus{top:10px}@media (width>=1600px){.file-browser{min-height:650px}.sidebar{width:260px}.main-shell{width:calc(100% - 260px);margin-left:260px}}@media (width<=1100px){.sidebar{width:210px}.main-shell{width:calc(100% - 210px);margin-left:210px}main#main{padding:30px 24px}.topbar{padding:0 24px}.settings-grid{grid-template-columns:1fr}.settings-grid>aside{grid-row:1}.member-list{grid-template-columns:1fr}.file-browser{grid-template-columns:250px 1fr}.access-main{padding:40px 32px}.steps{gap:8px}}@media (width<=760px){.sidebar{width:244px;transition:transform .16s;transform:translate(-100%)}.sidebar.open{transform:translate(0)}.main-shell{width:100%;margin:0}.menu-toggle{min-height:34px;padding:4px 10px;display:flex}.topbar{height:64px;padding:0 16px}.topbar>span{flex:1;font-size:11px}.separator{padding:0 7px}.nav-backdrop{z-index:19;background:#0004;border:0;border-radius:0;width:100%;height:100%;display:block;position:fixed;inset:0}.nav-backdrop:hover{background:#0004}main#main{padding:28px 18px 40px}.page-header{flex-wrap:wrap;align-items:flex-start;gap:16px;margin-bottom:24px}.page-header h1{font-size:23px}.page-header p{font-size:12px}.file-toolbar{gap:14px}.file-toolbar>.field{width:100%}.file-toolbar>button:last-child{margin-left:0}.file-browser{flex-direction:column;min-height:500px;display:flex}.file-list{border-right:0;border-bottom:1px solid var(--line);min-height:160px;max-height:300px}.file-preview{min-height:360px;max-height:none}.preview-header{padding:18px}.preview-body{padding:20px}.preview-header h2{font-size:13px}.panel,.member-card{padding:20px}.form-grid{grid-template-columns:1fr}.application-row{grid-template-columns:1fr;gap:12px}.access{display:block}.access-aside{display:none}.access-main{min-height:100dvh;padding:100px 24px 40px}.mobile-brand{display:block;position:absolute;top:24px;left:24px}.access-form{max-width:460px}.steps{gap:10px}.steps li{gap:4px;font-size:10px}.steps li span{width:20px;height:20px}.settings-grid{gap:20px}.actions{gap:8px}.summary{grid-template-columns:1fr;gap:4px}.summary dd{margin-bottom:8px}.member-actions{gap:6px}.member-actions button{font-size:11px}.command{flex-wrap:wrap}.command code{flex-basis:75%}.dialog-content{padding:20px}}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@media (width<=760px){.sidebar{visibility:hidden}.sidebar.open{visibility:visible}}.ai-grid{grid-template-columns:minmax(280px,.9fr) minmax(0,1.1fr);align-items:start;gap:24px;display:grid}.ai-grid>*,.ai-grid .panel,.ai-break{overflow-wrap:anywhere;min-width:0}.ai-job-row{text-align:left;overflow-wrap:anywhere;flex-direction:column;gap:6px;display:flex}.ai-job-row.selected{background:var(--accent-soft,#eef2ff)}.ai-citation{text-align:left;overflow-wrap:anywhere}.ai-events{max-height:280px;padding-left:24px;overflow:auto}.ai-result p,.ai-result li{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.7}.ai-result pre{max-height:400px;overflow:auto}.ai-file-actions{margin-bottom:16px}@media (width<=1100px){.ai-grid{grid-template-columns:minmax(0,1fr)}}.sidebar nav a:nth-child(4){margin-top:24px}.board-overview{border:1px solid var(--line);background:#fafafa;border-radius:12px;grid-template-columns:auto auto 1fr;align-items:center;gap:32px;margin-bottom:32px;padding:24px;display:grid}.board-overview strong{margin-top:6px;font-size:28px;font-weight:550;display:block}.board-overview strong span{color:var(--muted);font-size:12px;font-weight:400}.board-overview p{max-width:600px;font-size:13px}.board-workspaces{margin-bottom:40px}.workspace-cards{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px;display:grid}.workspace-card{border:1px solid var(--line);border-radius:12px;flex-direction:column;align-items:flex-start;gap:18px;min-width:0;padding:22px;display:flex}.workspace-card .row>div{overflow-wrap:anywhere;min-width:0}.workspace-card p{font-size:12px}.workspace-card button{margin-top:auto}.file-pathbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.file-pathbar nav{overflow-wrap:anywhere;min-width:0}.file-pathbar nav button{text-align:left;background:0 0;border:0;min-height:30px;padding:5px}.directory-item>span:last-child{color:#999;margin-left:auto}.directory-hint{padding:16px;font-size:12px}.session-search{align-items:flex-end;gap:12px;margin-bottom:24px;display:flex}.session-search .field{flex:1;max-width:600px}.session-browser{grid-template-columns:minmax(260px,32%) minmax(0,1fr);align-items:start;gap:24px;display:grid}.session-item{text-align:left;flex-direction:column;align-items:flex-start;gap:8px;padding:14px;display:flex}.session-item>*{overflow-wrap:anywhere;min-width:0;max-width:100%}.session-item[aria-pressed=true]{background:#eef4f8}.session-title{overflow-wrap:anywhere}.session-messages{flex-direction:column;gap:20px;display:flex}.session-message{border:1px solid var(--line);border-radius:10px;min-width:0;padding:18px}.session-message.user{background:#f6f8fa}.session-message.matched{border-color:#7a9ebc}.message-role{color:var(--muted);margin-bottom:12px;font-size:11px}@media (width<=760px){.board-overview{grid-template-columns:1fr 1fr;gap:18px;padding:20px}.board-overview p{grid-column:1/-1}.workspace-cards,.session-browser{grid-template-columns:minmax(0,1fr)}.session-search{flex-wrap:wrap}.session-search .field{flex-basis:100%}}.workspace-index{margin-bottom:40px}.workspace-index>.markdown{max-height:440px;overflow:auto}
|