@teammy/server 0.0.6 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -3
- package/dist/main.js +1927 -1060
- package/dist/runtime/README.md +15 -0
- package/dist/runtime/shared/system.md +7 -0
- package/dist/runtime/shared/tools.json +14 -0
- package/dist/runtime/workflows/directory-analysis/config.json +10 -0
- package/dist/runtime/workflows/directory-analysis/prompt.md +3 -0
- package/dist/runtime/workflows/file-summary/config.json +10 -0
- package/dist/runtime/workflows/file-summary/prompt.md +3 -0
- package/dist/runtime/workflows/task-bootstrap/config.json +11 -0
- package/dist/runtime/workflows/task-bootstrap/prompt.md +13 -0
- package/dist/web/assets/Dashboard-B9jlngBF.css +1 -0
- package/dist/web/assets/Dashboard-CsQ-GV-q.js +1 -0
- package/dist/web/assets/Files-cG0tkAfP.js +1 -0
- package/dist/web/assets/Markdown-Bt-6EDRz.js +29 -0
- package/dist/web/assets/Sessions-B7ABJvRH.js +1 -0
- package/dist/web/assets/index-f4fiI3WA.js +66 -0
- package/dist/web/assets/index-hjEc8Pme.css +1 -0
- package/dist/web/assets/teammy-calm-DVuoOK0F.png +0 -0
- package/dist/web/assets/teammy-mark-CxBtF1-X.png +0 -0
- package/dist/web/assets/teammy-wave-CVTgecuC.png +0 -0
- package/dist/web/assets/teammy-wordmark-ZFwxG0yl.png +0 -0
- package/dist/web/index.html +4 -4
- package/package.json +1 -1
- package/dist/web/assets/Dashboard-B_Sm86Eu.js +0 -1
- package/dist/web/assets/Files-DO76AdRz.js +0 -1
- package/dist/web/assets/Markdown-BtKARCJq.js +0 -29
- package/dist/web/assets/Sessions-D0AuOQYE.js +0 -1
- package/dist/web/assets/index-BdkEmA80.css +0 -1
- package/dist/web/assets/index-ae0dgkXe.js +0 -64
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{B as e,C as t,E as n,F as r,H as i,L as a,M as o,N as s,P as c,R as l,S as u,T as d,V as f,_ as p,f as m,g as h,i as g,j as _,k as v,m as y,r as b,y as x,z as S}from"./index-f4fiI3WA.js";import{i as C,t as w}from"./Markdown-Bt-6EDRz.js";var T=i(),E=c([`claude-code`,`codex`,`cursor`,`pi`,`dsh`]),D=S({formatVersion:a(1),adapterVersion:a(1),agent:E,nativeId:e().min(1).max(512),cwd:e().min(1).max(4096),messages:r(S({id:e().min(1).max(1024),role:c([`user`,`assistant`]),text:e().min(1).max(2097152),source:e().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.`);S({operationId:f(),sessionKey:_,parentRevision:o,blob:v}).strict();var O=S({owner:s,sessionKey:_,agent:E,nativeId:e(),cwd:e(),title:e(),revision:o,updatedAt:e(),messageCount:l().int().nonnegative(),blob:v}),k=S({sessions:r(O),nextCursor:o.nullable()}),A=S({totalSessions:l().int().nonnegative(),totalMessages:l().int().nonnegative(),memberCount:l().int().nonnegative(),updatedAt:e().nullable()});S({owner:s.optional(),sessionKey:_.optional()}).strict().refine(e=>!e.sessionKey||!!e.owner,`A session scope requires an owner.`);var j=S({matches:r(S({owner:s,sessionKey:_,revision:o,messageId:e(),role:c([`user`,`assistant`]),snippet:e(),title:e()})),nextCursor:o.nullable()}),M=t();function N({members:e,refresh:t,selected:n,onOwner:r,onSession:i}){let[a,o]=(0,T.useState)(new Set),[s,c]=(0,T.useState)(e[0]?.id??``);return(0,M.jsx)(`div`,{role:`tree`,"aria-label":`成员会话`,"data-testid":`session-tree`,onKeyDown:C,children:e.map(e=>(0,M.jsxs)(`div`,{role:`none`,children:[(0,M.jsxs)(m,{type:`button`,role:`treeitem`,"aria-level":1,"aria-expanded":a.has(e.id),"aria-selected":n?.owner===e.id&&!n.key,className:`tree-item tree-folder`,style:{"--tree-level":1},tabIndex:s===e.id?0:-1,"data-testid":`session-owner`,"data-owner-id":e.id,onFocus:()=>c(e.id),onClick:()=>{o(t=>{let n=new Set(t);return n.has(e.id)?n.delete(e.id):n.add(e.id),n}),r(e.id)},leading:(0,M.jsx)(`span`,{className:`tree-chevron ${a.has(e.id)?`expanded`:``}`,children:(0,M.jsx)(h,{name:`chevron`,size:`small`})}),children:[(0,M.jsx)(h,{name:`files`}),(0,M.jsx)(`span`,{className:`tree-name`,title:e.id,children:e.displayName})]}),a.has(e.id)&&(0,M.jsx)(P,{owner:e.id,selected:n,onSession:i,focused:s,onFocus:c},`${e.id}/${t}`)]},e.id))})}function P({owner:e,selected:t,onSession:r,focused:i,onFocus:a}){let{request:o}=g(),s=(0,T.useCallback)(t=>o(`sessions?${new URLSearchParams({owner:e,limit:`50`})}`,k,{signal:t}),[e,o]),c=d(s),[l,u]=(0,T.useState)(),[f,p]=(0,T.useState)(!1),[_,v]=(0,T.useState)(``),y=(0,T.useRef)(null);(0,T.useEffect)(()=>()=>y.current?.abort(),[]);let b=l?l.nextCursor:c.data?.nextCursor;return(0,M.jsxs)(`div`,{role:`group`,"aria-busy":c.loading||f,children:[(0,M.jsx)(x,{error:!0,children:c.error||_}),c.error&&(0,M.jsx)(`button`,{onClick:()=>void c.reload(),children:`重试`}),c.loading&&(0,M.jsx)(`span`,{className:`tree-status`,role:`status`,children:`正在加载…`}),[...c.data?.sessions??[],...l?.sessions??[]].map(n=>(0,M.jsxs)(m,{type:`button`,role:`treeitem`,"aria-level":2,"aria-selected":t?.owner===e&&t.key===n.sessionKey,className:`tree-item`,style:{"--tree-level":2},tabIndex:i===`${e}/${n.sessionKey}`?0:-1,"data-testid":`session-row`,"data-owner-id":e,"data-session-key":n.sessionKey,title:n.title||n.nativeId,onFocus:()=>a(`${e}/${n.sessionKey}`),onClick:()=>r({owner:e,key:n.sessionKey,revision:n.revision,title:n.title||n.nativeId}),leading:(0,M.jsx)(`span`,{className:`tree-chevron`}),children:[(0,M.jsx)(h,{name:`sessions`}),(0,M.jsx)(`span`,{className:`tree-name`,children:n.title||n.nativeId})]},n.sessionKey)),b!=null&&(0,M.jsx)(`button`,{className:`tree-action`,"data-testid":`session-tree-more`,disabled:f,onClick:async()=>{p(!0),v(``);let t=new AbortController;y.current=t;try{let n=await o(`sessions?${new URLSearchParams({owner:e,after:String(b),limit:`50`})}`,k,{signal:t.signal});u(e=>({sessions:[...e?.sessions??[],...n.sessions],nextCursor:n.nextCursor}))}catch(e){t.signal.aborted||v(n(e))}finally{t.signal.aborted||p(!1)}},children:`加载更多`})]})}function F({members:e}){let{request:t}=g(),n=(0,T.useCallback)(e=>t(`sessions/stats`,A,{signal:e}),[t]),r=d(n,!0),[i,a]=(0,T.useState)(``),[o,s]=(0,T.useState)(``),[c,l]=(0,T.useState)(0),[u,f]=(0,T.useState)(),[m,h]=(0,T.useState)(),_=(0,T.useRef)(null),v=u?.key?`搜索会话:${u.title}`:u?`搜索:${e.find(e=>e.id===u.owner)?.displayName??u.owner} 的会话内容`:``,S=()=>{f(void 0),_.current?.focus()},C=e=>{h(e),f(e),s(``)};return(0,M.jsxs)(`div`,{className:`split-layout file-explorer session-explorer`,children:[(0,M.jsxs)(`section`,{className:`file-tree-pane`,"aria-label":`会话目录`,children:[(0,M.jsx)(b,{title:`会话记录`,icon:`sessions`,count:(0,M.jsx)(`span`,{"data-testid":`session-total`,children:r.data?.totalSessions??`—`}),children:(0,M.jsx)(p,{icon:`refresh`,label:`刷新会话`,"data-testid":`sessions-refresh`,disabled:r.loading,onClick:()=>{r.reload(),l(e=>e+1)}})}),(0,M.jsx)(x,{error:!0,children:r.error}),(0,M.jsx)(N,{members:e,refresh:c,selected:u,onOwner:e=>{f({owner:e}),h(void 0),s(``)},onSession:C})]}),(0,M.jsxs)(`section`,{className:`session-reader`,"aria-label":`会话内容与搜索`,children:[(0,M.jsx)(`div`,{className:`session-reader-content`,children:o?(0,M.jsx)(I,{query:o,refresh:c,scope:{...u?{owner:u.owner}:{},...u?.key?{sessionKey:u.key}:{}},onSelect:C},`${o}/${u?.owner??``}/${u?.key??``}`):m?(0,M.jsx)(L,{selection:m},`${m.owner}/${m.key}/${m.revision}/${m.messageId??``}/${c}`):(0,M.jsx)(y,{mascot:!0,title:`选择会话开始阅读`,description:`也可以在下方搜索会话内容。`})}),(0,M.jsxs)(`form`,{className:`session-search-dock`,"data-testid":`session-search-form`,onSubmit:e=>{e.preventDefault(),s(i.trim()),l(e=>e+1)},children:[u&&(0,M.jsxs)(`button`,{type:`button`,className:`search-scope-chip`,"data-testid":`session-search-scope`,title:`清除搜索范围`,"aria-label":`清除范围:${v}`,onClick:S,children:[(0,M.jsx)(`span`,{className:`scope-label`,children:v}),(0,M.jsx)(`span`,{"aria-hidden":`true`,children:`×`})]}),(0,M.jsxs)(`div`,{className:`session-search-input-row`,children:[(0,M.jsx)(`input`,{ref:_,"aria-label":`搜索会话`,"data-testid":`session-query`,value:i,maxLength:500,placeholder:`搜索会话内容`,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Backspace`&&!i&&u&&(e.preventDefault(),S())}}),(o||i)&&(0,M.jsx)(p,{icon:`close`,label:`清空搜索`,"data-testid":`session-search-clear`,onClick:()=>{a(``),s(``),_.current?.focus()}}),(0,M.jsx)(p,{icon:`search`,type:`submit`,label:`搜索`,"data-testid":`session-search`,disabled:!i.trim()})]})]})]})]})}function I({query:e,refresh:t,scope:n,onSelect:r}){let{request:i}=g(),[a,o]=(0,T.useState)(0),s=(0,T.useCallback)(t=>i(`sessions/search?${new URLSearchParams({q:e,after:String(a),limit:`30`,...n.owner?{owner:n.owner}:{},...n.sessionKey?{sessionKey:n.sessionKey}:{}})}`,j,{signal:t}),[i,e,a,t,n.owner,n.sessionKey]),c=d(s);return(0,M.jsxs)(`section`,{className:`session-results stack`,"aria-label":`搜索结果`,"aria-busy":c.loading,children:[(0,M.jsx)(x,{error:!0,children:c.error}),c.error&&(0,M.jsx)(`button`,{onClick:()=>void c.reload(),children:`重试`}),c.loading&&(0,M.jsx)(`p`,{role:`status`,children:`正在搜索…`}),!c.loading&&c.data?.matches.map(e=>(0,M.jsxs)(`button`,{className:`session-item`,"data-testid":`session-match`,"data-message-id":e.messageId,onClick:()=>r({owner:e.owner,key:e.sessionKey,revision:e.revision,messageId:e.messageId,title:e.title}),children:[(0,M.jsx)(`strong`,{children:e.title}),(0,M.jsxs)(`small`,{children:[e.owner,` · `,e.role===`user`?`用户`:`助手`]}),(0,M.jsx)(`span`,{children:e.snippet})]},`${e.owner}:${e.sessionKey}:${e.messageId}`)),!c.loading&&c.data?.matches.length===0&&(0,M.jsx)(`p`,{className:`empty`,children:`没有找到匹配的会话`}),c.data?.nextCursor!=null&&(0,M.jsx)(`button`,{"data-testid":`sessions-next`,disabled:c.loading,onClick:()=>o(c.data.nextCursor),children:`下一页`}),a>0&&(0,M.jsx)(`button`,{disabled:c.loading,onClick:()=>o(0),children:`返回第一页`})]})}function L({selection:e}){let{request:t}=g(),n=(0,T.useCallback)(n=>t(`sessions/${encodeURIComponent(e.owner)}/${e.key}?revision=${e.revision}`,O,{signal:n}),[e.owner,e.key,e.revision]),r=d(n);return(0,M.jsxs)(`section`,{className:`session-conversation stack`,"data-testid":`session-detail`,children:[(0,M.jsx)(x,{error:!0,children:r.error}),r.error&&(0,M.jsx)(`button`,{onClick:()=>void r.reload(),children:`重试`}),r.loading&&(0,M.jsx)(`p`,{role:`status`,children:`正在读取会话…`}),r.data&&(0,M.jsx)(R,{info:r.data,messageId:e.messageId},r.data.blob.sha256)]})}function R({info:e,messageId:t}){let{readTextBlob:n}=g(),r=(0,T.useCallback)(async t=>D.parse(JSON.parse(await n(e.blob,t))),[e.blob.sha256,e.blob.size]),i=d(r),[a,o]=(0,T.useState)(0);return(0,T.useEffect)(()=>{if(i.data&&t){let e=i.data.messages.findIndex(e=>e.id===t);e>=0&&o(Math.floor(e/50)*50)}},[i.data,t]),(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`header`,{className:`conversation-header`,children:[(0,M.jsx)(`h2`,{className:`session-title`,children:e.title||e.nativeId}),(0,M.jsxs)(`p`,{children:[e.owner,` · `,e.agent,` · `,e.messageCount,` 条消息`]}),(0,M.jsx)(`small`,{children:(0,M.jsx)(u,{value:e.updatedAt})})]}),(0,M.jsx)(x,{error:!0,children:i.error}),i.error&&(0,M.jsx)(`button`,{onClick:()=>void i.reload(),children:`重新读取`}),i.loading&&(0,M.jsx)(`p`,{role:`status`,children:`正在读取会话…`}),i.data&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`session-messages`,children:i.data.messages.slice(a,a+50).map(e=>(0,M.jsxs)(`article`,{className:`session-message ${e.role} ${e.id===t?`matched`:``}`,"data-testid":`session-message`,"data-message-id":e.id,children:[(0,M.jsxs)(`div`,{className:`message-role`,children:[e.role===`user`?`用户`:`助手`,e.id===t?` · 搜索命中`:``]}),(0,M.jsx)(`div`,{className:`markdown`,children:(0,M.jsx)(w,{children:e.text})})]},e.id))}),(0,M.jsxs)(`div`,{className:`row wrap`,children:[(0,M.jsx)(`button`,{"data-testid":`messages-prev`,disabled:a===0,onClick:()=>o(Math.max(0,a-50)),children:`上一段`}),(0,M.jsxs)(`small`,{children:[i.data.messages.length?a+1:0,`–`,Math.min(a+50,i.data.messages.length),` /`,` `,i.data.messages.length]}),(0,M.jsx)(`button`,{"data-testid":`messages-next`,disabled:a+50>=i.data.messages.length,onClick:()=>o(a+50),children:`下一段`})]})]})]})}export{F as Sessions};
|