@graphmemory/server 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/LICENSE +84 -12
  2. package/README.md +7 -1
  3. package/dist/api/index.js +151 -54
  4. package/dist/api/rest/code.js +2 -1
  5. package/dist/api/rest/docs.js +2 -1
  6. package/dist/api/rest/embed.js +8 -1
  7. package/dist/api/rest/index.js +39 -18
  8. package/dist/api/rest/knowledge.js +4 -2
  9. package/dist/api/rest/skills.js +2 -1
  10. package/dist/api/rest/tasks.js +2 -1
  11. package/dist/api/rest/tools.js +8 -1
  12. package/dist/api/rest/validation.js +41 -40
  13. package/dist/api/rest/websocket.js +24 -7
  14. package/dist/api/tools/code/search-code.js +12 -9
  15. package/dist/api/tools/code/search-files.js +1 -1
  16. package/dist/api/tools/docs/cross-references.js +3 -2
  17. package/dist/api/tools/docs/explain-symbol.js +2 -1
  18. package/dist/api/tools/docs/find-examples.js +2 -1
  19. package/dist/api/tools/docs/search-files.js +1 -1
  20. package/dist/api/tools/docs/search-snippets.js +1 -1
  21. package/dist/api/tools/docs/search.js +5 -4
  22. package/dist/api/tools/file-index/search-all-files.js +1 -1
  23. package/dist/api/tools/knowledge/add-attachment.js +15 -3
  24. package/dist/api/tools/knowledge/remove-attachment.js +5 -1
  25. package/dist/api/tools/knowledge/search-notes.js +5 -4
  26. package/dist/api/tools/skills/add-attachment.js +15 -3
  27. package/dist/api/tools/skills/recall-skills.js +1 -1
  28. package/dist/api/tools/skills/remove-attachment.js +5 -1
  29. package/dist/api/tools/skills/search-skills.js +6 -5
  30. package/dist/api/tools/tasks/add-attachment.js +15 -3
  31. package/dist/api/tools/tasks/remove-attachment.js +5 -1
  32. package/dist/api/tools/tasks/search-tasks.js +5 -4
  33. package/dist/cli/index.js +63 -52
  34. package/dist/cli/indexer.js +62 -29
  35. package/dist/graphs/attachment-types.js +5 -0
  36. package/dist/graphs/code.js +99 -10
  37. package/dist/graphs/docs.js +20 -5
  38. package/dist/graphs/file-index.js +22 -6
  39. package/dist/graphs/file-lang.js +1 -1
  40. package/dist/graphs/knowledge.js +31 -7
  41. package/dist/graphs/skill.js +35 -9
  42. package/dist/graphs/task.js +35 -9
  43. package/dist/lib/defaults.js +78 -0
  44. package/dist/lib/embedder.js +11 -12
  45. package/dist/lib/embedding-codec.js +63 -0
  46. package/dist/lib/graph-persistence.js +68 -0
  47. package/dist/lib/jwt.js +4 -4
  48. package/dist/lib/mirror-watcher.js +4 -3
  49. package/dist/lib/multi-config.js +6 -1
  50. package/dist/lib/parsers/code.js +158 -31
  51. package/dist/lib/parsers/codeblock.js +11 -6
  52. package/dist/lib/parsers/docs.js +60 -31
  53. package/dist/lib/parsers/languages/registry.js +2 -2
  54. package/dist/lib/parsers/languages/typescript.js +214 -46
  55. package/dist/lib/project-manager.js +21 -11
  56. package/dist/lib/search/bm25.js +23 -5
  57. package/dist/lib/search/code.js +13 -3
  58. package/dist/lib/search/docs.js +2 -1
  59. package/dist/lib/search/file-index.js +2 -1
  60. package/dist/lib/search/files.js +3 -2
  61. package/dist/lib/search/knowledge.js +2 -1
  62. package/dist/lib/search/skills.js +2 -1
  63. package/dist/lib/search/tasks.js +2 -1
  64. package/dist/ui/assets/NoteForm-aZX9f6-3.js +1 -0
  65. package/dist/ui/assets/SkillForm-KYa3o92l.js +1 -0
  66. package/dist/ui/assets/TaskForm-Bl5nkybO.js +1 -0
  67. package/dist/ui/assets/_articleId_-DjbCByxM.js +1 -0
  68. package/dist/ui/assets/_docId_-hdCDjclV.js +1 -0
  69. package/dist/ui/assets/_filePath_-CpG836v4.js +1 -0
  70. package/dist/ui/assets/_noteId_-C1enaQd1.js +1 -0
  71. package/dist/ui/assets/_skillId_-hPoCet7J.js +1 -0
  72. package/dist/ui/assets/_taskId_-DSB3dLVz.js +1 -0
  73. package/dist/ui/assets/_toolName_-3SmCfxZy.js +2 -0
  74. package/dist/ui/assets/api-BMnBjMMf.js +1 -0
  75. package/dist/ui/assets/api-BlFF6gX-.js +1 -0
  76. package/dist/ui/assets/api-CrGJOcaN.js +1 -0
  77. package/dist/ui/assets/api-DuX-0a_X.js +1 -0
  78. package/dist/ui/assets/attachments-CEQ-2nMo.js +1 -0
  79. package/dist/ui/assets/client-Bq88u7gN.js +1 -0
  80. package/dist/ui/assets/docs-CrXsRcOG.js +1 -0
  81. package/dist/ui/assets/edit-BYiy1FZy.js +1 -0
  82. package/dist/ui/assets/edit-TUIIpUMF.js +1 -0
  83. package/dist/ui/assets/edit-hc-ZWz3y.js +1 -0
  84. package/dist/ui/assets/esm-BWiKNcBW.js +1 -0
  85. package/dist/ui/assets/files-0bPg6NH9.js +1 -0
  86. package/dist/ui/assets/graph-DXGud_wF.js +1 -0
  87. package/dist/ui/assets/help-CEMQqZUR.js +891 -0
  88. package/dist/ui/assets/help-DJ52_fxN.js +1 -0
  89. package/dist/ui/assets/index-BCZDAYZi.js +2 -0
  90. package/dist/ui/assets/index-D6zSNtzo.css +1 -0
  91. package/dist/ui/assets/knowledge-DeygeGGH.js +1 -0
  92. package/dist/ui/assets/new-CpD7hOBA.js +1 -0
  93. package/dist/ui/assets/new-DHTg3Dqq.js +1 -0
  94. package/dist/ui/assets/new-s8c0M75X.js +1 -0
  95. package/dist/ui/assets/prompts-BgOmdxgM.js +295 -0
  96. package/dist/ui/assets/rolldown-runtime-Dw2cE7zH.js +1 -0
  97. package/dist/ui/assets/search-EpJhdP2a.js +1 -0
  98. package/dist/ui/assets/skill-y9pizyqE.js +1 -0
  99. package/dist/ui/assets/skills-Cga9iUZN.js +1 -0
  100. package/dist/ui/assets/tasks-CobouTKV.js +1 -0
  101. package/dist/ui/assets/tools-JxKH5BDF.js +1 -0
  102. package/dist/ui/assets/vendor-graph-BWpSgpMe.js +321 -0
  103. package/dist/ui/assets/vendor-markdown-CT8ZVEPu.js +50 -0
  104. package/dist/ui/assets/vendor-md-editor-DmWafJvr.js +44 -0
  105. package/dist/ui/assets/{index-kKd4mVrh.css → vendor-md-editor-HrwGbQou.css} +1 -1
  106. package/dist/ui/assets/vendor-mui-BPj7d3Sw.js +139 -0
  107. package/dist/ui/assets/vendor-mui-icons-B196sG3f.js +1 -0
  108. package/dist/ui/assets/vendor-react-CHUjhoxh.js +11 -0
  109. package/dist/ui/index.html +11 -3
  110. package/package.json +6 -3
  111. package/dist/ui/assets/index-0hRezICt.js +0 -1702
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));export{s as n,l as r,o as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{D as t,O as n}from"./vendor-markdown-CT8ZVEPu.js";import{c as r,l as i,u as a}from"./vendor-react-CHUjhoxh.js";import{$ as o,A as s,K as c,W as l,Y as u,et as d,m as f,n as p,nt as m,r as h,t as g,ut as _}from"./vendor-mui-BPj7d3Sw.js";import"./vendor-md-editor-DmWafJvr.js";import{ct as v,dt as y,it as b,lt as x,q as S,st as C,ut as w}from"./vendor-mui-icons-B196sG3f.js";import{A as T,F as E,J as D,P as O,T as k,_ as A,j}from"./index-BCZDAYZi.js";import{i as M}from"./api-BlFF6gX-.js";import{r as N}from"./api-BMnBjMMf.js";import{t as P}from"./api-CrGJOcaN.js";import{m as F}from"./skill-y9pizyqE.js";var I=e(n(),1),L=t(),R={knowledge:{label:`Knowledge`,icon:(0,L.jsx)(y,{}),badgeColor:`warning`},tasks:{label:`Tasks`,icon:(0,L.jsx)(w,{}),badgeColor:`primary`},skills:{label:`Skills`,icon:(0,L.jsx)(b,{}),badgeColor:`neutral`},files:{label:`Files`,icon:(0,L.jsx)(x,{}),badgeColor:`success`},docs:{label:`Docs`,icon:(0,L.jsx)(v,{}),badgeColor:`neutral`},code:{label:`Code`,icon:(0,L.jsx)(S,{}),badgeColor:`error`}};function z(e,t){return t.scope===`knowledge`?`/${e}/knowledge/${t.id}`:t.scope===`tasks`?`/${e}/tasks/${t.id}`:t.scope===`skills`?`/${e}/skills/${t.id}`:t.scope===`files`?`/${e}/files/view/${t.id}`:t.scope===`docs`?`/${e}/docs/${encodeURIComponent(t.id)}`:null}var B=[`knowledge`,`tasks`,`skills`,`files`,`docs`,`code`];function V(e){if(!e)return B;let t=e.split(`,`).filter(e=>e in R);return t.length>0?t:B}function H(){let{projectId:e}=i(),t=r(),{palette:n}=_(),[v,y]=a(),[b,x]=(0,I.useState)(v.get(`q`)||``),[S,w]=(0,I.useState)(V(v.get(`scopes`))),[H,U]=(0,I.useState)([]),[W,G]=(0,I.useState)(!1),[K,q]=(0,I.useState)(null),[J,Y]=(0,I.useState)(!1),X=(0,I.useCallback)(async(t,n)=>{if(!e||!t.trim())return;G(!0),q(null),Y(!0);let r=[],i={topK:20,minScore:.1},a=t.trim();try{let t=[];n.includes(`knowledge`)&&t.push(D(e,a,i).then(e=>{for(let t of e)r.push({id:t.id,scope:`knowledge`,title:t.title,subtitle:t.content?.slice(0,120),score:t.score,tags:t.tags})}).catch(()=>{})),n.includes(`tasks`)&&t.push(A(e,a,i).then(e=>{for(let t of e)r.push({id:t.id,scope:`tasks`,title:t.title,subtitle:`${t.status} / ${t.priority}${t.description?` — `+t.description.slice(0,80):``}`,score:t.score,tags:t.tags})}).catch(()=>{})),n.includes(`skills`)&&t.push(F(e,a,i).then(e=>{for(let t of e)r.push({id:t.id,scope:`skills`,title:t.title,subtitle:`${t.source} / ${Math.round(t.confidence*100)}%${t.description?` — `+t.description.slice(0,80):``}`,score:t.score,tags:t.tags})}).catch(()=>{})),n.includes(`files`)&&t.push(N(e,a,i).then(e=>{for(let t of e)r.push({id:t.filePath,scope:`files`,title:t.filePath,subtitle:[t.language,t.size?`${(t.size/1024).toFixed(1)} KB`:``].filter(Boolean).join(` / `),score:t.score})}).catch(()=>{})),n.includes(`docs`)&&t.push(M(e,a,i).then(e=>{for(let t of e)r.push({id:t.id,scope:`docs`,title:t.title||t.id,subtitle:t.content?.slice(0,120),score:t.score})}).catch(()=>{})),n.includes(`code`)&&t.push(P(e,a,i).then(e=>{for(let t of e)r.push({id:t.id,scope:`code`,title:t.name||t.id,subtitle:`${t.kind}${t.content?` — `+t.content.slice(0,80):``}`,score:t.score})}).catch(()=>{})),await Promise.all(t),r.sort((e,t)=>t.score-e.score),U(r)}catch(e){q(e instanceof Error?e.message:String(e))}finally{G(!1)}},[e]);(0,I.useEffect)(()=>{let e=v.get(`q`),t=V(v.get(`scopes`));e?.trim()&&X(e,t)},[]);let Z=()=>{let e=new URLSearchParams;b.trim()&&e.set(`q`,b.trim()),S.length===B.length&&B.every(e=>S.includes(e))||e.set(`scopes`,S.join(`,`)),y(e,{replace:!0}),X(b,S)},Q=n=>{if(!e)return;let r=z(e,n);r&&t(r)};return(0,L.jsxs)(u,{children:[(0,L.jsx)(j,{breadcrumbs:[{label:`Search`}]}),(0,L.jsx)(T,{children:(0,L.jsx)(h,{fullWidth:!0,size:`small`,placeholder:`Search across all graphs...`,value:b,onChange:e=>x(e.target.value),onKeyDown:e=>e.key===`Enter`&&Z(),slotProps:{input:{startAdornment:(0,L.jsx)(s,{position:`start`,children:(0,L.jsx)(C,{})})}}})}),(0,L.jsx)(g,{value:S,onChange:(e,t)=>{t.length>0&&w(t)},size:`small`,sx:{mb:3,flexWrap:`wrap`},children:Object.keys(R).map(e=>(0,L.jsxs)(p,{value:e,sx:{gap:.5,textTransform:`none`},children:[R[e].icon,R[e].label]},e))}),K&&(0,L.jsx)(d,{severity:`error`,sx:{mb:2},children:K}),W?(0,L.jsx)(u,{sx:{display:`flex`,justifyContent:`center`,py:4},children:(0,L.jsx)(m,{})}):H.length===0&&J?(0,L.jsx)(k,{icon:(0,L.jsx)(C,{}),title:`No results found`,description:`Try a different query or broaden your scope filters`}):(0,L.jsx)(f,{spacing:1.5,children:H.map((e,t)=>{let r=R[e.scope],i=e.scope!==`code`;return(0,L.jsx)(c,{variant:`outlined`,onClick:i?()=>Q(e):void 0,sx:i?{cursor:`pointer`,"&:hover":{borderColor:`primary.main`}}:{},children:(0,L.jsxs)(l,{sx:{py:1.5,"&:last-child":{pb:1.5}},children:[(0,L.jsxs)(u,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:.5},children:[(0,L.jsx)(E,{label:r.label,color:r.badgeColor,icon:r.icon}),(0,L.jsx)(o,{variant:`body2`,fontWeight:600,sx:{flex:1},children:e.title}),(0,L.jsx)(E,{label:`${(e.score*100).toFixed(0)}%`,color:`primary`,size:`small`})]}),e.subtitle&&(0,L.jsx)(o,{variant:`caption`,sx:{display:`block`,color:n.custom.textMuted},children:e.subtitle}),e.tags&&e.tags.length>0&&(0,L.jsx)(u,{sx:{mt:.5},children:(0,L.jsx)(O,{tags:e.tags})})]})},`${e.scope}-${e.id}-${t}`)})})]})}export{H as default};
@@ -0,0 +1 @@
1
+ import{D as e}from"./vendor-markdown-CT8ZVEPu.js";import{$ as t,K as n,W as r,Y as i,h as a,tt as o,ut as s}from"./vendor-mui-BPj7d3Sw.js";import{i as c,n as l,r as u}from"./client-Bq88u7gN.js";import{W as d}from"./vendor-mui-icons-B196sG3f.js";import{F as f,P as p}from"./index-BCZDAYZi.js";function m(e,t){return u(`/projects/${e}/skills${l({source:t?.source,tag:t?.tag,limit:t?.limit})}`).then(c)}function h(e,t){return u(`/projects/${e}/skills/${t}`)}function g(e,t){return u(`/projects/${e}/skills`,{method:`POST`,body:JSON.stringify(t)})}function _(e,t,n){return u(`/projects/${e}/skills/${t}`,{method:`PUT`,body:JSON.stringify(n)})}function v(e,t){return u(`/projects/${e}/skills/${t}`,{method:`DELETE`})}function y(e,t,n){return u(`/projects/${e}/skills/search${l({q:t,topK:n?.topK,minScore:n?.minScore})}`).then(c)}function b(e,t){return u(`/projects/${e}/skills/links`,{method:`POST`,body:JSON.stringify(t)})}function x(e,t){return u(`/projects/${e}/skills/links`,{method:`DELETE`,body:JSON.stringify(t)})}function S(e,t){return u(`/projects/${e}/skills/${t}/relations`).then(c)}function C(e,t){return u(`/projects/${e}/skills/${t}/attachments`).then(c)}async function w(e,t,n){let r=new FormData;r.append(`file`,n);let i=await fetch(`/api/projects/${e}/skills/${t}/attachments`,{method:`POST`,credentials:`include`,body:r});if(!i.ok){let e=await i.json().catch(()=>({error:i.statusText}));throw Error(e.error||i.statusText)}return i.json()}function T(e,t,n){return u(`/projects/${e}/skills/${t}/attachments/${encodeURIComponent(n)}`,{method:`DELETE`})}function E(e,t,n){return`/api/projects/${e}/skills/${t}/attachments/${encodeURIComponent(n)}`}var D={user:`primary`,learned:`warning`};function O(e){return e===`learned`?`Learned`:`User`}function k(e){return`${Math.round(e*100)}%`}var A=e();function j({skill:e,score:c,onClick:l,onEdit:u}){let{palette:m}=s();return(0,A.jsx)(n,{variant:`outlined`,sx:{cursor:l?`pointer`:`default`,"&:hover":l?{borderColor:`primary.main`}:{}},onClick:l,children:(0,A.jsx)(r,{sx:{py:1.5,px:2,"&:last-child":{pb:1.5}},children:(0,A.jsxs)(i,{sx:{display:`flex`,alignItems:`flex-start`,gap:1},children:[(0,A.jsxs)(i,{sx:{flex:1,minWidth:0},children:[(0,A.jsxs)(i,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:.25},children:[(0,A.jsx)(t,{variant:`subtitle1`,fontWeight:600,noWrap:!0,sx:{flex:1},children:e.title}),(0,A.jsx)(f,{label:O(e.source),color:D[e.source]??`primary`,size:`small`}),(0,A.jsx)(f,{label:k(e.confidence),color:`neutral`,size:`small`}),c!==void 0&&(0,A.jsx)(f,{label:`${(c*100).toFixed(0)}%`,color:`primary`,size:`small`})]}),e.description&&(0,A.jsx)(t,{variant:`body2`,sx:{color:m.custom.textMuted},noWrap:!0,children:e.description}),(0,A.jsxs)(i,{sx:{display:`flex`,alignItems:`center`,gap:1,mt:.5},children:[e.usageCount>0&&(0,A.jsxs)(t,{variant:`caption`,sx:{color:m.custom.textMuted},children:[`Used `,e.usageCount,` time`,e.usageCount===1?``:`s`]}),e.tags?.length>0&&(0,A.jsx)(p,{tags:e.tags})]})]}),u&&(0,A.jsx)(a,{title:`Edit`,children:(0,A.jsx)(o,{size:`small`,onClick:e=>{e.stopPropagation(),u()},children:(0,A.jsx)(d,{fontSize:`small`})})})]})})})}export{w as _,g as a,T as c,C as d,S as f,_ as g,E as h,O as i,x as l,y as m,D as n,b as o,m as p,k as r,v as s,j as t,h as u};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{D as t,O as n}from"./vendor-markdown-CT8ZVEPu.js";import{c as r,l as i,u as a}from"./vendor-react-CHUjhoxh.js";import{A as o,Y as s,et as c,m as l,nt as u,q as d,r as f,tt as p}from"./vendor-mui-BPj7d3Sw.js";import"./vendor-md-editor-DmWafJvr.js";import{K as m,Q as h,it as g,st as _}from"./vendor-mui-icons-B196sG3f.js";import{A as v,Q as y,T as b,Z as x,j as S}from"./index-BCZDAYZi.js";import{a as C,g as w,m as T,p as E,s as D,t as O}from"./skill-y9pizyqE.js";import"./SkillForm-KYa3o92l.js";var k=e(n(),1);function A(e){let[t,n]=(0,k.useState)([]),[r,i]=(0,k.useState)(!1),[a,o]=(0,k.useState)(null),s=(0,k.useCallback)(async()=>{if(e){i(!0),o(null);try{n(await E(e))}catch(e){o(e instanceof Error?e.message:String(e))}finally{i(!1)}}},[e]);return(0,k.useEffect)(()=>{s()},[s]),{skills:t,loading:r,error:a,refresh:s,create:(0,k.useCallback)(async t=>{if(!e)return;let r=await C(e,t);return n(e=>[...e,r]),r},[e]),update:(0,k.useCallback)(async(t,r)=>{if(!e)return;let i=await w(e,t,r);return n(e=>e.map(e=>e.id===t?i:e)),i},[e]),remove:(0,k.useCallback)(async t=>{e&&(await D(e,t),n(e=>e.filter(e=>e.id!==t)))},[e])}}var j=t();function M(){let{projectId:e}=i(),t=r(),[n,C]=a(),w=x(`skills`),{skills:E,loading:D,error:M,refresh:N}=A(e??null),[P,F]=(0,k.useState)(n.get(`q`)||``),[I,L]=(0,k.useState)(null),[R,z]=(0,k.useState)(!1);y(e??null,(0,k.useCallback)(e=>{e.type.startsWith(`skill:`)&&N()},[N]));let B=(0,k.useCallback)(async t=>{if(!e||!t.trim()){L(null);return}z(!0);try{L(await T(e,t.trim()))}catch{}finally{z(!1)}},[e]);(0,k.useEffect)(()=>{let e=n.get(`q`);e?.trim()&&B(e)},[]);let V=()=>{let e=new URLSearchParams(n);P.trim()?e.set(`q`,P.trim()):e.delete(`q`),C(e,{replace:!0}),B(P)},H=()=>{F(``),L(null);let e=new URLSearchParams(n);e.delete(`q`),C(e,{replace:!0})},U=I??E;return(0,j.jsxs)(s,{children:[(0,j.jsx)(S,{breadcrumbs:[{label:`Skills`}],actions:w?(0,j.jsx)(d,{variant:`contained`,startIcon:(0,j.jsx)(m,{}),onClick:()=>t(`new`),children:`New Skill`}):void 0}),(0,j.jsx)(v,{children:(0,j.jsx)(f,{fullWidth:!0,size:`small`,placeholder:`Semantic search skills...`,value:P,onChange:e=>F(e.target.value),onKeyDown:e=>e.key===`Enter`&&V(),slotProps:{input:{startAdornment:(0,j.jsx)(o,{position:`start`,children:(0,j.jsx)(_,{})}),endAdornment:P&&(0,j.jsx)(o,{position:`end`,children:(0,j.jsx)(p,{size:`small`,onClick:H,children:(0,j.jsx)(h,{})})})}}})}),I&&(0,j.jsxs)(s,{sx:{mb:1,color:`text.secondary`,fontSize:`0.75rem`},children:[I.length,` result`,I.length===1?``:`s`,` found`]}),M&&(0,j.jsx)(c,{severity:`error`,sx:{mb:2},children:M}),D||R?(0,j.jsx)(s,{sx:{display:`flex`,justifyContent:`center`,py:4},children:(0,j.jsx)(u,{})}):U.length===0?(0,j.jsx)(b,{icon:(0,j.jsx)(g,{}),title:I?`No matching skills found`:`No skills yet`,description:I?`Try a different search query`:`Create your first skill to get started`,action:!I&&w?(0,j.jsx)(d,{variant:`contained`,startIcon:(0,j.jsx)(m,{}),onClick:()=>t(`new`),children:`New Skill`}):void 0}):(0,j.jsx)(l,{spacing:2,children:U.map(e=>(0,j.jsx)(O,{skill:e,score:`score`in e?e.score:void 0,onClick:()=>t(e.id),onEdit:w?()=>t(`${e.id}/edit`):void 0},e.id))})]})}export{M as default};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{D as t,O as n}from"./vendor-markdown-CT8ZVEPu.js";import{c as r,l as i}from"./vendor-react-CHUjhoxh.js";import{$ as a,A as o,P as s,S as ee,U as te,X as c,Y as l,b as ne,et as re,ft as u,h as ie,m as ae,nt as oe,ot as d,q as f,r as p,tt as m,ut as se,v as h,y as g}from"./vendor-mui-BPj7d3Sw.js";import"./vendor-md-editor-DmWafJvr.js";import{K as _,M as ce,Q as v,W as le,n as ue,r as de,st as fe,ut as pe}from"./vendor-mui-icons-B196sG3f.js";import{F as me,P as he,Q as ge,Z as _e,c as ve,et as ye,g as be,h as xe,i as y,j as Se,n as Ce,o as we,t as b,w as Te}from"./index-BCZDAYZi.js";var x=e(n(),1),S=`kanban-visible-columns`,C=b.map(e=>e.status);function w(){try{let e=localStorage.getItem(S);if(e){let t=JSON.parse(e).filter(e=>C.includes(e));if(t.length>0)return new Set(t)}}catch{}return new Set(C)}function Ee(){let[e,t]=(0,x.useState)(w);return{visible:e,toggle:(0,x.useCallback)(e=>{t(t=>{let n=new Set(t);if(n.has(e)){if(n.size<=1)return t;n.delete(e)}else n.add(e);return localStorage.setItem(S,JSON.stringify([...n])),n})},[]),visibleColumns:b.filter(t=>e.has(t.status))}}var T=t(),E=[`done`,`cancelled`],D=864e5;function De(e,t){if(!e||E.includes(t))return null;let n=e-Date.now(),r=Math.ceil(n/D);return r<0?{label:`Overdue ${Math.abs(r)}d`,color:`error`}:r<=3?{label:`Due in ${r}d`,color:`warning`}:null}function O(){let{projectId:e}=i(),t=r(),{palette:n}=se(),S=_e(`tasks`),[C,w]=(0,x.useState)([]),[E,D]=(0,x.useState)(!0),[O,Oe]=(0,x.useState)(null),[k,A]=(0,x.useState)(null),[ke,j]=(0,x.useState)(null),[M,Ae]=(0,x.useState)([]),[N,P]=(0,x.useState)(``),{visible:F,toggle:je,visibleColumns:Me}=Ee(),[I,L]=(0,x.useState)(null),[R,z]=(0,x.useState)(``),[B,V]=(0,x.useState)(``),[H,U]=(0,x.useState)(``),[W,G]=(0,x.useState)(null),[K,q]=(0,x.useState)(``),J=(0,x.useRef)(null),[Y,X]=(0,x.useState)(null),[Ne,Z]=(0,x.useState)(!1),Q=(0,x.useCallback)(async()=>{if(e)try{w(await xe(e,{limit:500}))}catch(e){Oe(e instanceof Error?e.message:String(e))}finally{D(!1)}},[e]);(0,x.useEffect)(()=>{Q()},[Q]),(0,x.useEffect)(()=>{e&&ye(e).then(Ae).catch(()=>{})},[e]),ge(e??null,(0,x.useCallback)(e=>{e.type.startsWith(`task:`)&&Q()},[Q])),(0,x.useEffect)(()=>{W&&setTimeout(()=>J.current?.focus(),50)},[W]);let Pe=e=>A(e),$=()=>{A(null),j(null)},Fe=async t=>{if(!k||!e)return;let n=C.find(e=>e.id===k);if(!n||n.status===t){$();return}w(e=>e.map(e=>e.id===k?{...e,status:t}:e)),$();try{await be(e,k,t)}catch{Q()}},Ie=async t=>{let n=K.trim();if(!(!n||!e)){q(``),G(null);try{await we(e,{title:n,status:t}),Q()}catch{}}},Le=async()=>{if(!(!Y||!e)){Z(!0);try{w(e=>e.filter(e=>e.id!==Y.id)),await ve(e,Y.id)}catch{Q()}finally{Z(!1),X(null)}}},Re=(0,x.useMemo)(()=>{let e=new Set;for(let t of C)t.tags?.forEach(t=>e.add(t));return[...e].sort()},[C]),ze=(0,x.useMemo)(()=>{let e=C;if(R){let t=R.toLowerCase();e=e.filter(e=>e.title.toLowerCase().includes(t)||e.description&&e.description.toLowerCase().includes(t))}return B&&(e=e.filter(e=>e.priority===B)),H&&(e=e.filter(e=>e.tags?.includes(H))),N&&(e=e.filter(e=>e.assignee===N)),e},[C,R,B,H,N]),Be=(0,x.useMemo)(()=>{let e=new Map;for(let t of b)e.set(t.status,[]);for(let t of ze){let n=e.get(t.status);n&&n.push(t)}return e},[ze]),Ve=R||B||H||N;return(0,T.jsxs)(l,{children:[(0,T.jsx)(Se,{breadcrumbs:[{label:`Tasks`}],actions:(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(ie,{title:`Column visibility`,children:(0,T.jsx)(m,{onClick:e=>L(e.currentTarget),size:`small`,children:(0,T.jsx)(de,{fontSize:`small`})})}),(0,T.jsx)(ne,{anchorEl:I,open:!!I,onClose:()=>L(null),children:b.map(({status:e,label:t})=>(0,T.jsxs)(g,{onClick:()=>je(e),dense:!0,children:[(0,T.jsx)(te,{checked:F.has(e),disabled:F.has(e)&&F.size===1,size:`small`,sx:{p:0,mr:1}}),(0,T.jsx)(ee,{primary:t})]},e))}),S&&(0,T.jsx)(f,{variant:`contained`,startIcon:(0,T.jsx)(_,{}),onClick:()=>t(`new`),children:`New Task`})]})}),(0,T.jsxs)(l,{sx:{display:`flex`,alignItems:`center`,gap:1.5,px:2,py:1,bgcolor:n.custom.surfaceMuted,borderRadius:1,mb:2},children:[(0,T.jsx)(p,{size:`small`,placeholder:`Search tasks...`,value:R,onChange:e=>z(e.target.value),slotProps:{input:{startAdornment:(0,T.jsx)(o,{position:`start`,children:(0,T.jsx)(fe,{fontSize:`small`,sx:{color:n.custom.textMuted}})}),endAdornment:R?(0,T.jsx)(o,{position:`end`,children:(0,T.jsx)(m,{size:`small`,onClick:()=>z(``),children:(0,T.jsx)(v,{fontSize:`small`})})}):void 0}},sx:{minWidth:200,flex:1,maxWidth:350}}),(0,T.jsx)(s,{size:`small`,sx:{minWidth:120},children:(0,T.jsxs)(h,{value:B,onChange:e=>V(e.target.value),displayEmpty:!0,renderValue:e=>e?y(e):`Priority`,sx:{color:B?void 0:n.custom.textMuted},children:[(0,T.jsx)(g,{value:``,children:`All priorities`}),(0,T.jsx)(g,{value:`critical`,children:`Critical`}),(0,T.jsx)(g,{value:`high`,children:`High`}),(0,T.jsx)(g,{value:`medium`,children:`Medium`}),(0,T.jsx)(g,{value:`low`,children:`Low`})]})}),Re.length>0&&(0,T.jsx)(s,{size:`small`,sx:{minWidth:120},children:(0,T.jsxs)(h,{value:H,onChange:e=>U(e.target.value),displayEmpty:!0,renderValue:e=>e||`Tag`,sx:{color:H?void 0:n.custom.textMuted},children:[(0,T.jsx)(g,{value:``,children:`All tags`}),Re.map(e=>(0,T.jsx)(g,{value:e,children:e},e))]})}),M.length>0&&(0,T.jsx)(s,{size:`small`,sx:{minWidth:120},children:(0,T.jsxs)(h,{value:N,onChange:e=>P(e.target.value),displayEmpty:!0,renderValue:e=>e?M.find(t=>t.id===e)?.name||e:`Assignee`,sx:{color:N?void 0:n.custom.textMuted},children:[(0,T.jsx)(g,{value:``,children:`All`}),M.map(e=>(0,T.jsx)(g,{value:e.id,children:e.name||e.id},e.id))]})}),Ve&&(0,T.jsx)(f,{size:`small`,onClick:()=>{z(``),V(``),U(``),P(``)},children:`Clear`})]}),O&&(0,T.jsx)(re,{severity:`error`,sx:{mb:2},children:O}),E?(0,T.jsx)(l,{sx:{display:`flex`,justifyContent:`center`,py:4},children:(0,T.jsx)(oe,{})}):C.length===0?(0,T.jsxs)(l,{sx:{display:`flex`,flexDirection:`column`,alignItems:`center`,py:6},children:[(0,T.jsx)(pe,{sx:{fontSize:48,color:n.custom.textMuted,mb:2}}),(0,T.jsx)(a,{variant:`h6`,gutterBottom:!0,children:`No tasks yet`}),(0,T.jsx)(a,{variant:`body2`,sx:{color:n.custom.textMuted,mb:2},children:S?`Create your first task to get started`:`No tasks yet`}),S&&(0,T.jsx)(f,{variant:`contained`,startIcon:(0,T.jsx)(_,{}),onClick:()=>t(`new`),children:`New Task`})]}):(0,T.jsx)(l,{sx:{display:`flex`,gap:2,overflowX:`auto`,pb:2,maxHeight:`calc(100vh - 220px)`},children:Me.map(({status:e,label:r,color:i})=>{let o=Be.get(e),s=ke===e&&k!==null;return(0,T.jsxs)(d,{variant:`outlined`,sx:{minWidth:220,flex:1,display:`flex`,flexDirection:`column`,borderTop:`3px solid ${i}`,bgcolor:s?u(i,.06):n.custom.surfaceMuted,borderColor:s?i:void 0,borderStyle:s?`dashed`:void 0,transition:`background-color 0.15s, border-color 0.15s`},onDragOver:t=>{t.preventDefault(),j(e)},onDragEnter:()=>j(e),onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||j(null)},onDrop:()=>Fe(e),children:[(0,T.jsxs)(l,{sx:{display:`flex`,justifyContent:`space-between`,alignItems:`center`,px:1.5,pt:1.5,pb:1},children:[(0,T.jsxs)(l,{sx:{display:`flex`,alignItems:`center`,gap:.75},children:[(0,T.jsx)(a,{variant:`subtitle2`,fontWeight:700,children:r}),(0,T.jsx)(a,{variant:`caption`,sx:{color:n.custom.textMuted},children:o.length})]}),S&&(0,T.jsx)(m,{size:`small`,onClick:()=>{G(e),q(``)},sx:{p:.25,color:n.custom.textMuted},children:(0,T.jsx)(_,{sx:{fontSize:18}})})]}),W===e&&(0,T.jsxs)(l,{sx:{display:`flex`,gap:.5,px:1.5,pb:1},children:[(0,T.jsx)(p,{inputRef:J,size:`small`,placeholder:`Task title...`,value:K,onChange:e=>q(e.target.value),onKeyDown:t=>{t.key===`Enter`&&Ie(e),t.key===`Escape`&&(G(null),q(``))},fullWidth:!0,sx:{"& .MuiInputBase-root":{fontSize:`0.85rem`}}}),(0,T.jsx)(m,{size:`small`,onClick:()=>{G(null),q(``)},children:(0,T.jsx)(v,{fontSize:`small`})})]}),(0,T.jsx)(ae,{spacing:1,sx:{flex:1,overflowY:`auto`,px:1.5,pb:1.5,minHeight:50,"&::-webkit-scrollbar":{width:4},"&::-webkit-scrollbar-thumb":{bgcolor:u(n.text.primary,.15),borderRadius:2}},children:o.map(e=>{let r=De(e.dueDate,e.status);return(0,T.jsxs)(d,{variant:`outlined`,draggable:S,onDragStart:S?()=>Pe(e.id):void 0,onDragEnd:S?$:void 0,onClick:()=>t(e.id),sx:{p:1.5,cursor:`pointer`,position:`relative`,bgcolor:n.custom.surface,"&:hover":{borderColor:`primary.main`},"&:hover .task-actions":{opacity:1},opacity:k===e.id?.5:1},children:[(0,T.jsxs)(l,{className:`task-actions`,sx:{position:`absolute`,top:4,right:4,display:`flex`,gap:.25,opacity:0,transition:`opacity 0.15s`,bgcolor:n.custom.surface,borderRadius:.5},children:[(0,T.jsx)(m,{size:`small`,onClick:n=>{n.stopPropagation(),t(`${e.id}/edit`)},sx:{p:.5},children:(0,T.jsx)(le,{sx:{fontSize:15}})}),S&&(0,T.jsx)(m,{size:`small`,onClick:t=>{t.stopPropagation(),X(e)},sx:{p:.5,color:`error.main`},children:(0,T.jsx)(ce,{sx:{fontSize:15}})})]}),(0,T.jsx)(l,{sx:{display:`flex`,justifyContent:`space-between`,alignItems:`flex-start`,mb:.5,pr:3},children:(0,T.jsx)(a,{variant:`body2`,fontWeight:600,sx:{flex:1},children:e.title})}),e.assignee&&(0,T.jsxs)(a,{variant:`caption`,color:`text.secondary`,sx:{display:`block`,mb:.5},children:[`@`,M.find(t=>t.id===e.assignee)?.name??e.assignee]}),(0,T.jsxs)(l,{sx:{display:`flex`,gap:.5,flexWrap:`wrap`,mb:e.description?.5:0},children:[(0,T.jsx)(me,{label:y(e.priority),color:Ce[e.priority],size:`small`}),e.estimate!=null&&(0,T.jsx)(c,{icon:(0,T.jsx)(ue,{sx:{fontSize:`14px !important`}}),label:`${e.estimate}h`,size:`small`,variant:`outlined`,sx:{height:20,"& .MuiChip-label":{px:.5,fontSize:`0.7rem`},"& .MuiChip-icon":{ml:.5}}}),r&&(0,T.jsx)(c,{label:r.label,size:`small`,color:r.color,sx:{height:20,"& .MuiChip-label":{px:.75,fontSize:`0.7rem`}}})]}),e.description&&(0,T.jsx)(a,{variant:`caption`,sx:{display:`block`,mb:.5,color:n.custom.textMuted},children:e.description.length>80?e.description.slice(0,80)+`...`:e.description}),e.tags?.length>0&&(0,T.jsx)(l,{sx:{mt:.5},children:(0,T.jsx)(he,{tags:e.tags})})]},e.id)})})]},e)})}),(0,T.jsx)(Te,{open:!!Y,title:`Delete Task`,message:`Are you sure you want to delete "${Y?.title}"? This action cannot be undone.`,confirmLabel:`Delete`,confirmColor:`error`,onConfirm:Le,onCancel:()=>X(null),loading:Ne})]})}export{O as default};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{D as t,O as n}from"./vendor-markdown-CT8ZVEPu.js";import{c as r,l as i}from"./vendor-react-CHUjhoxh.js";import{$ as a,A as o,P as s,Y as c,a as l,c as u,d,k as f,l as p,nt as m,r as h,s as g,u as _,ut as v,v as y,y as b}from"./vendor-mui-BPj7d3Sw.js";import"./vendor-md-editor-DmWafJvr.js";import{nt as x,st as S}from"./vendor-mui-icons-B196sG3f.js";import{A as C,F as w,T,j as E}from"./index-BCZDAYZi.js";import{r as D}from"./api-DuX-0a_X.js";var O=e(n(),1),k=t(),A={docs:`primary`,code:`success`,knowledge:`warning`,tasks:`neutral`,skills:`primary`,files:`neutral`,context:`neutral`,"cross-graph":`error`};function j(){let{projectId:e}=i(),t=r(),{palette:n}=v(),[j,M]=(0,O.useState)([]),[N,P]=(0,O.useState)(!0),[F,I]=(0,O.useState)(``),[L,R]=(0,O.useState)(`all`);(0,O.useEffect)(()=>{e&&(P(!0),D(e).then(M).finally(()=>P(!1)))},[e]);let z=(0,O.useMemo)(()=>{let e=new Set(j.map(e=>e.category));return[`all`,...Array.from(e).sort()]},[j]),B=(0,O.useMemo)(()=>j.filter(e=>!(L!==`all`&&e.category!==L||F&&!e.name.toLowerCase().includes(F.toLowerCase())&&!e.description.toLowerCase().includes(F.toLowerCase()))),[j,F,L]),V=e=>{let t=e.inputSchema?.properties;return t?Object.keys(t).length:0};return N?(0,k.jsx)(c,{sx:{display:`flex`,justifyContent:`center`,py:8},children:(0,k.jsx)(m,{})}):(0,k.jsxs)(c,{children:[(0,k.jsx)(E,{breadcrumbs:[{label:`Tools`}]}),(0,k.jsxs)(C,{children:[(0,k.jsx)(h,{size:`small`,placeholder:`Search tools...`,value:F,onChange:e=>I(e.target.value),slotProps:{input:{startAdornment:(0,k.jsx)(o,{position:`start`,children:(0,k.jsx)(S,{fontSize:`small`})})}},sx:{minWidth:240}}),(0,k.jsxs)(s,{size:`small`,sx:{minWidth:140},children:[(0,k.jsx)(f,{children:`Category`}),(0,k.jsx)(y,{value:L,label:`Category`,onChange:e=>R(e.target.value),children:z.map(e=>(0,k.jsx)(b,{value:e,children:e===`all`?`All`:e},e))})]}),(0,k.jsxs)(a,{variant:`body2`,sx:{color:n.custom.textMuted,ml:`auto`},children:[B.length,` tool`,B.length===1?``:`s`]})]}),B.length===0?(0,k.jsx)(T,{icon:(0,k.jsx)(x,{}),title:`No tools found`,description:F||L!==`all`?`Try adjusting your filters`:`No MCP tools available for this project`}):(0,k.jsx)(u,{children:(0,k.jsxs)(d,{size:`small`,children:[(0,k.jsx)(g,{children:(0,k.jsxs)(l,{children:[(0,k.jsx)(p,{children:`Name`}),(0,k.jsx)(p,{children:`Category`}),(0,k.jsx)(p,{children:`Description`}),(0,k.jsx)(p,{align:`center`,children:`Params`})]})}),(0,k.jsx)(_,{children:B.map(r=>(0,k.jsxs)(l,{hover:!0,sx:{cursor:`pointer`},onClick:()=>t(`/${e}/tools/${r.name}`),children:[(0,k.jsx)(p,{children:(0,k.jsx)(a,{variant:`body2`,fontWeight:600,sx:{fontFamily:`monospace`},children:r.name})}),(0,k.jsx)(p,{children:(0,k.jsx)(w,{label:r.category,color:A[r.category]||`neutral`})}),(0,k.jsx)(p,{children:(0,k.jsx)(a,{variant:`body2`,sx:{color:n.custom.textMuted,maxWidth:500,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:r.description})}),(0,k.jsx)(p,{align:`center`,children:(0,k.jsx)(a,{variant:`body2`,children:V(r)})})]},r.name))})]})})]})}export{j as default};