@nextclaw/ui 0.24.0-beta.0 → 0.24.0

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 (80) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/assets/api-BqVIq0lF.js +13 -0
  3. package/dist/assets/{appearance-settings-page-CPoFZLw8.js → appearance-settings-page-CTWn1eAT.js} +1 -1
  4. package/dist/assets/{book-open-jcUt0rr9.js → book-open-o2x7OLiO.js} +1 -1
  5. package/dist/assets/{channels-list-page-anMJAkfK.js → channels-list-page-Bzn-pzyJ.js} +1 -1
  6. package/dist/assets/{config-split-page-AcuFnbIC.js → config-split-page-CnRbXXlh.js} +1 -1
  7. package/dist/assets/{confirm-dialog-B-atCfC5.js → confirm-dialog-B_Hbcra2.js} +1 -1
  8. package/dist/assets/{createLucideIcon-Blz0FzrV.js → createLucideIcon-rwwpqyks.js} +1 -1
  9. package/dist/assets/{desktop-capabilities-page-8lKF_Ob-.js → desktop-capabilities-page-C2ayYQTr.js} +1 -1
  10. package/dist/assets/{desktop-update-config-DABXDpbj.js → desktop-update-config-C13czpyL.js} +1 -1
  11. package/dist/assets/{dist-eH-_j8yU.js → dist-BsF3hfOi.js} +1 -1
  12. package/dist/assets/{dist-D8kcEpTf.js → dist-aNN3iQxV.js} +1 -1
  13. package/dist/assets/{doc-browser-DzXRehlW.js → doc-browser-D8dIOo9E.js} +1 -1
  14. package/dist/assets/doc-browser-DcuOOtpP.js +1 -0
  15. package/dist/assets/{doc-browser-context-BlbUcg2J.js → doc-browser-context-Dhsit2Ma.js} +1 -1
  16. package/dist/assets/{extensions-mquwAJ2Z.js → extensions-CD6xvKF_.js} +1 -1
  17. package/dist/assets/{form-actions-CaZDGEmB.js → form-actions-CC4Wz_lL.js} +1 -1
  18. package/dist/assets/index-BTsbdtv6.js +109 -0
  19. package/dist/assets/index-Bcfy2kTh.css +1 -0
  20. package/dist/assets/loader-circle-B6aFbB-8.js +1 -0
  21. package/dist/assets/mcp-marketplace-page-BtUAypA7.js +1 -0
  22. package/dist/assets/{mcp-marketplace-page-gFtgyueL.js → mcp-marketplace-page-r2MmD9xO.js} +1 -1
  23. package/dist/assets/{model-config-page-hFBpeRAO.js → model-config-page-DboxoT-I.js} +1 -1
  24. package/dist/assets/{navigation-link-Hb5Z0UxZ.js → navigation-link-C_6oj3zz.js} +1 -1
  25. package/dist/assets/plus-DRsq9Kvs.js +1 -0
  26. package/dist/assets/{privacy-settings-page-C18zo3ox.js → privacy-settings-page-C2sDBqhb.js} +1 -1
  27. package/dist/assets/projects-BcPcx-uD.js +1 -0
  28. package/dist/assets/{providers-config-page-YU0-AOXJ.js → providers-config-page-CmUFl9RF.js} +1 -1
  29. package/dist/assets/react-BjO9I4WZ.js +8 -0
  30. package/dist/assets/{refresh-cw-ZHKfE3yx.js → refresh-cw-DsT2kvXi.js} +1 -1
  31. package/dist/assets/remote-Ci6x91ES.js +1 -0
  32. package/dist/assets/{rotate-cw-CLhOXGwE.js → rotate-cw-BCAs6c3R.js} +1 -1
  33. package/dist/assets/{runtime-config-page-Dmy1A_0Y.js → runtime-config-page-cQKNeAjL.js} +1 -1
  34. package/dist/assets/{save-CWuuZs77.js → save-CadRMTMQ.js} +1 -1
  35. package/dist/assets/{search-DcmsKAn2.js → search-B6tB4fzB.js} +1 -1
  36. package/dist/assets/{search-config-page-CxBacx6W.js → search-config-page-C8lOIkxn.js} +1 -1
  37. package/dist/assets/{secrets-config-page-B4py8-KR.js → secrets-config-page-8clzAag2.js} +1 -1
  38. package/dist/assets/security-config-DPbM6IVT.js +1 -0
  39. package/dist/assets/{select-BEr0Iy_f.js → select-CO9S_C2C.js} +1 -1
  40. package/dist/assets/skeleton-IHILNhIW.js +1 -0
  41. package/dist/assets/{tag-chip-ByqDkn6g.js → tag-chip-BZKk0UkK.js} +1 -1
  42. package/dist/assets/x-BuvHIb1d.js +1 -0
  43. package/dist/index.html +21 -21
  44. package/package.json +6 -6
  45. package/src/features/apps/components/__tests__/app-packages-panel.test.tsx +362 -241
  46. package/src/features/apps/components/app-document-access-section.tsx +187 -0
  47. package/src/features/apps/components/app-package-card.tsx +150 -275
  48. package/src/features/apps/hooks/use-app-packages.ts +91 -35
  49. package/src/features/chat/index.ts +5 -1
  50. package/src/features/projects/AGENTS.md +3 -2
  51. package/src/features/projects/components/project-overview.tsx +70 -139
  52. package/src/features/projects/components/work/project-work-item-drawer.test.tsx +65 -0
  53. package/src/features/projects/components/work/project-work-item-drawer.tsx +367 -0
  54. package/src/features/projects/components/work/project-work-items.test.tsx +98 -0
  55. package/src/features/projects/components/work/project-work-items.tsx +199 -0
  56. package/src/features/projects/components/work/project-work-state-settings.tsx +285 -0
  57. package/src/features/projects/hooks/use-project-observation.ts +56 -26
  58. package/src/features/projects/hooks/use-project-work.test.tsx +58 -0
  59. package/src/features/projects/hooks/use-project-work.ts +215 -0
  60. package/src/features/projects/pages/project-home-page.tsx +119 -138
  61. package/src/features/projects/pages/projects-page.test.tsx +79 -308
  62. package/src/shared/lib/i18n/locales/en-US/doc-browser.json +16 -1
  63. package/src/shared/lib/i18n/locales/en-US/projects.json +60 -1
  64. package/src/shared/lib/i18n/locales/zh-CN/doc-browser.json +16 -1
  65. package/src/shared/lib/i18n/locales/zh-CN/projects.json +60 -1
  66. package/dist/assets/api-CoqPRKmF.js +0 -13
  67. package/dist/assets/doc-browser-DJEMr7Zk.js +0 -1
  68. package/dist/assets/index-DyR5iR0O.css +0 -1
  69. package/dist/assets/index-XxXj8WDS.js +0 -109
  70. package/dist/assets/loader-circle-0qPOOYQ5.js +0 -1
  71. package/dist/assets/mcp-marketplace-page-uanamJ6L.js +0 -1
  72. package/dist/assets/plus-CYOvNvcV.js +0 -1
  73. package/dist/assets/projects-C8Gm9RS8.js +0 -1
  74. package/dist/assets/react-DF-kP7iN.js +0 -8
  75. package/dist/assets/remote-B_utkBra.js +0 -1
  76. package/dist/assets/security-config-CTP4IQWw.js +0 -1
  77. package/dist/assets/skeleton-B2NHluWf.js +0 -1
  78. package/dist/assets/x-CENkFyK5.js +0 -1
  79. package/src/features/projects/components/project-work-items.test.tsx +0 -78
  80. package/src/features/projects/components/project-work-items.tsx +0 -272
@@ -1 +0,0 @@
1
- import{t as e}from"./createLucideIcon-Blz0FzrV.js";var t=e(`LoaderCircle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]);export{t};
@@ -1 +0,0 @@
1
- import{t as e}from"./mcp-marketplace-page-gFtgyueL.js";export{e as McpMarketplacePage};
@@ -1 +0,0 @@
1
- import{t as e}from"./createLucideIcon-Blz0FzrV.js";var t=e(`Plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]);export{t};
@@ -1 +0,0 @@
1
- import{i as e}from"./chunk-DseTPa7n.js";import{B as t,F as n,H as r,a as i,i as a,n as o,r as s}from"./react-DF-kP7iN.js";import{d as c,f as l,i as u}from"./navigation-link-Hb5Z0UxZ.js";import{An as d,It as f,_n as p,fn as m,pn as h,vn as g,yn as _}from"./api-CoqPRKmF.js";import{a as v,i as y,n as b,r as x,t as S}from"./select-BEr0Iy_f.js";import{G as C,J as w,K as T,Q as E,W as D,Y as O,at as k,nt as ee,ot as te,p as ne,q as A,rt as j}from"./index-XxXj8WDS.js";var M=e(r(),1),N=t();function P({title:e,children:t,className:n=``}){return(0,N.jsxs)(ee,{hover:!1,surface:`flat`,className:n,children:[(0,N.jsx)(k,{className:`p-4 pb-3`,children:(0,N.jsx)(te,{children:e})}),(0,N.jsx)(j,{className:`p-4 pt-0`,children:t})]})}function F({children:e}){return(0,N.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:e})}function I({available:e,children:t,className:n,label:r,onOpen:i,path:a}){return e?(0,N.jsx)(`button`,{type:`button`,className:n,title:a,onClick:()=>i(a,r),children:t}):(0,N.jsx)(`div`,{className:n,children:t})}function L({snapshot:e,onOpenFile:t}){return(0,N.jsxs)(`div`,{className:`grid min-w-0 gap-4 lg:grid-cols-2`,children:[(0,N.jsxs)(P,{title:i(`projectsVisionAndContext`),children:[e.project.summary?(0,N.jsx)(`p`,{className:`mb-4 text-sm`,children:e.project.summary}):null,e.project.context.length?(0,N.jsx)(`div`,{className:`divide-y divide-border/60`,children:e.project.context.map(e=>(0,N.jsx)(re,{context:e,onOpenFile:t},e.id))}):(0,N.jsx)(F,{children:i(`projectsNoContext`)})]}),(0,N.jsxs)(P,{title:i(`projectsSourceHealth`),children:[(0,N.jsx)(`div`,{className:`space-y-2`,children:e.sources.map(e=>(0,N.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-xl bg-muted/45 p-3 text-sm`,children:[(0,N.jsx)(`span`,{children:e.label}),(0,N.jsxs)(`span`,{className:`text-muted-foreground`,children:[i(`projectsSource_${e.status}`),` · `,e.itemCount]})]},e.id))}),e.diagnostics.length?(0,N.jsx)(`div`,{className:`mt-4 space-y-2 border-t border-border/60 pt-4`,children:e.diagnostics.map(e=>(0,N.jsxs)(`div`,{className:`rounded-xl bg-muted/35 p-3 text-sm`,children:[(0,N.jsx)(`p`,{className:`font-medium`,children:e.code}),(0,N.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:e.message})]},e.id))}):null]})]})}function re({context:e,onOpenFile:t}){let{accessible:n,role:r,source:a}=e;return(0,N.jsxs)(I,{available:n,path:a,label:r,onOpen:t,className:`block w-full py-3 text-left first:pt-0 enabled:hover:text-foreground enabled:focus-visible:outline-none enabled:focus-visible:ring-1 enabled:focus-visible:ring-border`,children:[(0,N.jsx)(`span`,{className:`block text-sm font-medium`,children:r}),(0,N.jsxs)(`span`,{className:`mt-1 block truncate text-xs text-muted-foreground`,children:[a,n?``:` · ${i(`projectsUnavailable`)}`]})]})}var R=`updated-desc`;function z(e){if(!e)return-1/0;let t=new Date(e).getTime();return Number.isNaN(t)?-1/0:t}function B(e,t){return e.path.localeCompare(t.path)}function V(e,t=R){return[...e].sort((e,n)=>{if(t===`name`)return B(e,n);let r=z(t===`created-desc`?e.fileCreatedAt??e.fileUpdatedAt:e.fileUpdatedAt??e.fileCreatedAt),i=z(t===`created-desc`?n.fileCreatedAt??n.fileUpdatedAt:n.fileUpdatedAt??n.fileCreatedAt);return(t===`updated-asc`?r-i:i-r)||B(e,n)})}function H(e,t=new Date){if(!e)return`-`;let n=new Date(e),r=t.getTime()-n.getTime();if(Number.isNaN(n.getTime()))return e;if(r<6e4)return i(`projectsTimeJustNow`);let a=Math.floor(r/6e4);if(a<60)return i(`projectsTimeMinutesAgo`).replace(`{count}`,String(a));let s=Math.floor(a/60);if(s<24)return i(`projectsTimeHoursAgo`).replace(`{count}`,String(s));let c=Math.floor(s/24);return c===1?i(`projectsTimeYesterday`):c<7?i(`projectsTimeDaysAgo`).replace(`{count}`,String(c)):o(e)}var U=10;function W(e,t,n){let r=t.trim().toLocaleLowerCase(),i=V(r?e.artifacts.filter(e=>e.path.toLocaleLowerCase().includes(r)):e.artifacts,n),a=new Map;for(let e of i){let t=a.get(e.categoryId)??[];t.push(e),a.set(e.categoryId,t)}let o=e.artifactCategories??[],s=new Set(o.map(e=>e.id)),c=o.flatMap(e=>{let t=a.get(e.id)??[];return t.length?[{...e,artifacts:t}]:[]}),l=[...a.entries()].filter(([e])=>!s.has(e)).map(([e,t])=>({id:e,label:t[0]?.categoryLabel??e,artifacts:t})).sort((e,t)=>e.label.localeCompare(t.label));return[...c,...l]}function G({snapshot:e,onOpenFile:t}){let[n,r]=(0,M.useState)(``),[o,c]=(0,M.useState)(R),[l,u]=(0,M.useState)(()=>new Set),[d,f]=(0,M.useState)({}),p=(0,M.useMemo)(()=>W(e,n,o),[n,e,o]),m=e.artifacts.some(e=>e.fileCreatedAt);return e.artifacts.length?(0,N.jsxs)(`section`,{className:`min-w-0`,"aria-label":i(`projectsArtifacts`),children:[(0,N.jsxs)(`div`,{className:`mb-4 flex flex-wrap items-center justify-between gap-3`,children:[(0,N.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[a(e.artifacts.length),` `,i(`projectsArtifactsCountSuffix`)]}),(0,N.jsxs)(`div`,{className:`flex w-full flex-wrap items-center gap-2 sm:w-auto`,children:[(0,N.jsxs)(S,{value:o,onValueChange:e=>c(e),children:[(0,N.jsx)(y,{"aria-label":i(`projectsArtifactsSort`),className:`h-8 w-32 rounded-lg`,children:(0,N.jsx)(v,{})}),(0,N.jsxs)(b,{children:[(0,N.jsx)(x,{value:`updated-desc`,children:i(`projectsArtifactsSortUpdatedDesc`)}),(0,N.jsx)(x,{value:`updated-asc`,children:i(`projectsArtifactsSortUpdatedAsc`)}),m?(0,N.jsx)(x,{value:`created-desc`,children:i(`projectsArtifactsSortCreatedDesc`)}):null,(0,N.jsx)(x,{value:`name`,children:i(`projectsArtifactsSortName`)})]})]}),(0,N.jsx)(`input`,{type:`search`,value:n,className:`h-8 min-w-0 flex-1 rounded-lg border border-border/60 bg-transparent px-3 text-sm outline-none placeholder:text-muted-foreground focus-visible:ring-1 focus-visible:ring-border sm:w-60`,placeholder:i(`projectsArtifactsSearchPlaceholder`),onChange:e=>{r(e.target.value),f({})}})]})]}),p.length?(0,N.jsx)(`div`,{className:`space-y-2`,children:p.map(e=>{let n=l.has(e.id),r=d[e.id]??U,o=e.artifacts.slice(0,r);return(0,N.jsxs)(`section`,{className:`overflow-hidden rounded-xl border border-border/60`,children:[(0,N.jsxs)(`button`,{type:`button`,className:`flex w-full items-center justify-between gap-3 bg-muted/30 px-3 py-2.5 text-left text-sm transition-colors hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,"aria-label":`${e.label} ${a(e.artifacts.length)}`,"aria-expanded":!n,onClick:()=>u(t=>{let n=new Set(t);return n.has(e.id)?n.delete(e.id):n.add(e.id),n}),children:[(0,N.jsx)(`span`,{className:`min-w-0 truncate font-medium`,children:e.label}),(0,N.jsxs)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:[a(e.artifacts.length),` `,n?`▸`:`▾`]})]}),n?null:(0,N.jsxs)(`div`,{className:`divide-y divide-border/60`,children:[o.map(e=>(0,N.jsxs)(I,{available:e.exists,path:e.path,label:e.path,onOpen:t,className:`flex w-full min-w-0 items-center gap-3 px-3 py-2.5 text-left text-sm transition-colors enabled:hover:bg-[var(--interaction-hover)] enabled:focus-visible:outline-none enabled:focus-visible:ring-1 enabled:focus-visible:ring-border`,children:[(0,N.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.path}),e.fileUpdatedAt?(0,N.jsx)(`time`,{className:`shrink-0 text-xs text-muted-foreground`,dateTime:e.fileUpdatedAt,title:s(e.fileUpdatedAt),children:H(e.fileUpdatedAt)}):null,e.exists?null:(0,N.jsx)(`span`,{className:`shrink-0 text-xs text-destructive`,children:i(`projectsUnavailable`)})]},e.id)),e.artifacts.length>o.length?(0,N.jsxs)(`button`,{type:`button`,className:`w-full px-3 py-2.5 text-left text-sm text-muted-foreground transition-colors hover:bg-[var(--interaction-hover)] hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:()=>f(t=>({...t,[e.id]:r+U})),children:[i(`projectsArtifactsShowMore`),` (`,a(Math.min(U,e.artifacts.length-o.length)),`)`]}):null]})]},e.id)})}):(0,N.jsx)(F,{children:i(`projectsArtifactsNoMatches`)})]}):(0,N.jsx)(F,{children:i(`projectsNoArtifacts`)})}function K({limit:e,snapshot:t}){let n=t.runs??[],r=e===void 0?n:n.slice(0,e);return r.length?(0,N.jsx)(`div`,{className:`space-y-2`,children:r.map(e=>{let n=e.workItemId?t.workItems.find(t=>t.id===e.workItemId):void 0,r=n?.workflowId?t.workflows.find(e=>e.id===n.workflowId):void 0,a=n?.stageId?r?.stages.find(e=>e.id===n.stageId):void 0,o=[e.agentId,e.model].filter(Boolean).join(` · `);return(0,N.jsxs)(u,{className:`block rounded-xl bg-muted/45 p-3 text-sm transition-colors hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,to:`/chat/${encodeURIComponent(e.sessionId)}`,children:[(0,N.jsxs)(`span`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,N.jsx)(`span`,{className:`truncate font-medium`,children:e.label??n?.name??i(`projectsAiRun`)}),(0,N.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:i(`projectsRunState_${e.state}`)})]}),(0,N.jsx)(`span`,{className:`mt-1 block truncate text-xs text-muted-foreground`,children:n?`${n.name}${a?` · ${a.label}`:``}`:i(`projectsRunUnreported`)}),(0,N.jsxs)(`span`,{className:`mt-1 block truncate text-xs text-muted-foreground`,children:[o?`${o} · `:``,(0,N.jsx)(`time`,{dateTime:e.updatedAt,title:s(e.updatedAt),children:H(e.updatedAt)})]})]},e.sessionId)})}):null}function q({hasProjectSessions:e,snapshot:t,onStartObservationSetup:n,onStartProjectWork:r,onOpenFile:a,shouldOfferObservationSetup:o}){let c=t.signals.filter(e=>e.status===`open`),l=V(t.artifacts,R).slice(0,5),d=[...t.activity].sort((e,t)=>t.at.localeCompare(e.at)).slice(0,6);return(0,N.jsxs)(`div`,{className:`grid min-w-0 gap-4 lg:grid-cols-2`,children:[o?(0,N.jsxs)(P,{title:i(`projectsObservationSetupTitle`),className:`lg:col-span-2`,children:[(0,N.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:i(`projectsObservationSetupDescription`)}),(0,N.jsx)(`button`,{type:`button`,className:`mt-3 rounded-lg bg-primary px-3 py-2 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90`,onClick:n,children:i(`projectsObservationSetupAction`)})]}):null,(t.runs?.length??0)>0?(0,N.jsx)(P,{title:i(`projectsAiActivity`),className:`lg:col-span-2`,children:(0,N.jsx)(K,{limit:5,snapshot:t})}):null,(0,N.jsx)(P,{title:i(`projectsAttention`),children:c.length?(0,N.jsx)(`div`,{className:`space-y-2`,children:c.map(e=>(0,N.jsxs)(`div`,{className:`rounded-xl bg-muted/45 p-3 text-sm`,children:[(0,N.jsx)(`p`,{className:`font-medium`,children:e.message}),(0,N.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[e.reference.label,` · `,e.level]})]},e.id))}):(0,N.jsx)(F,{children:i(`projectsNoAttention`)})}),(0,N.jsx)(P,{title:i(`projectsWork`),children:t.workItems.length?(0,N.jsx)(`div`,{className:`space-y-2`,children:t.workItems.slice(0,5).map(e=>(0,N.jsxs)(`div`,{className:`rounded-xl bg-muted/45 p-3 text-sm`,children:[(0,N.jsx)(`p`,{className:`font-medium`,children:e.name}),(0,N.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[e.reference.label,` · `,i(`projectsStatus_${e.status}`)]})]},e.id))}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(F,{children:i(o?`projectsWorkNeedsSetup`:e?`projectsWorkNoReports`:`projectsWorkNoSessions`)}),o?null:(0,N.jsx)(m,{size:`sm`,variant:`outline`,onClick:r,children:i(`projectsStartProjectWork`)})]})}),(0,N.jsx)(P,{title:i(`projectsArtifacts`),children:l.length?(0,N.jsx)(`div`,{className:`space-y-2`,children:l.map(e=>(0,N.jsxs)(I,{available:e.exists,path:e.path,label:e.path,onOpen:a,className:`block w-full rounded-xl bg-muted/45 p-3 text-left text-sm transition-colors enabled:hover:bg-[var(--interaction-hover)] enabled:focus-visible:outline-none enabled:focus-visible:ring-1 enabled:focus-visible:ring-border`,children:[(0,N.jsx)(`span`,{className:`block truncate font-medium`,children:e.path}),(0,N.jsxs)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:[e.categoryLabel,e.fileUpdatedAt?(0,N.jsx)(`time`,{dateTime:e.fileUpdatedAt,title:s(e.fileUpdatedAt),children:` · ${H(e.fileUpdatedAt)}`}):null,e.exists?``:` · ${i(`projectsUnavailable`)}`]})]},e.id))}):(0,N.jsx)(F,{children:i(`projectsNoArtifacts`)})}),(0,N.jsx)(P,{title:i(`projectsActivity`),children:d.length?(0,N.jsx)(`div`,{className:`space-y-3`,children:d.map(e=>(0,N.jsxs)(`div`,{className:`text-sm`,children:[(0,N.jsx)(`p`,{children:e.message}),(0,N.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[e.reference.sessionId?(0,N.jsx)(u,{className:`underline underline-offset-2`,to:`/chat/${encodeURIComponent(e.reference.sessionId)}`,children:e.reference.label}):e.reference.label,` · `,(0,N.jsx)(`time`,{dateTime:e.at,title:s(e.at),children:H(e.at)})]})]},e.id))}):(0,N.jsx)(F,{children:i(`projectsNoActivity`)})})]})}function J(e){return e===`overview`||e===`work`||e===`artifacts`||e===`skills`||e===`agreement`}function Y(e,t){return e.flatMap(e=>e.stages.map(n=>({id:`${e.id}:${n.id}`,label:n.label,items:t.filter(t=>t.workflowId===e.id&&t.stageId===n.id)})))}function ie(e){return e.filter(e=>!e.workflowId||!e.stageId)}function ae(e){return e.filter(e=>e.schedule?.start||e.schedule?.end)}function oe(e){return e.status===`open`&&e.response===`confirm-reject`&&!!e.reference.sessionId&&!e.reply}function se(e){return e.requests.filter(e=>e.status===`open`)}function ce({requests:e,pendingRequestId:t,onReply:n}){return e.length===0?null:(0,N.jsx)(P,{title:i(`projectsRequests`),children:(0,N.jsx)(`div`,{className:`space-y-2`,children:e.map(e=>{let{id:r,prompt:a,reference:{label:o,sessionId:s},reply:c}=e,l=t===r;return(0,N.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 rounded-xl bg-muted/45 p-3`,children:[(0,N.jsxs)(`div`,{className:`min-w-48 flex-1`,children:[(0,N.jsx)(`p`,{className:`text-sm font-medium`,children:a}),(0,N.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:c?i(`projectsResponseWaiting`):o})]}),oe(e)?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(m,{size:`sm`,disabled:l,onClick:()=>n(e,`confirmed`),children:i(`projectsConfirm`)}),(0,N.jsx)(m,{size:`sm`,variant:`outline`,disabled:l,onClick:()=>n(e,`rejected`),children:i(`projectsReject`)})]}):null,s?(0,N.jsx)(u,{className:h({size:`sm`,variant:`ghost`}),to:`/chat/${encodeURIComponent(s)}`,children:i(`projectsOpenSession`)}):null]},r)})})})}function le({snapshot:e,onOpen:t}){return(0,N.jsxs)(`section`,{className:`min-w-0`,"aria-label":i(`projectsSkills`),children:[(0,N.jsxs)(`p`,{className:`mb-3 text-sm text-muted-foreground`,children:[a(e.skills.length),` `,i(`projectsSkillsCountSuffix`)]}),e.skills.length?(0,N.jsx)(`div`,{className:`grid min-w-0 gap-3 md:grid-cols-2`,children:e.skills.map(e=>(0,N.jsxs)(`button`,{type:`button`,className:`min-w-0 rounded-xl border border-border/60 p-3 text-left transition-colors enabled:hover:border-border enabled:hover:bg-muted/30 disabled:cursor-not-allowed`,disabled:!e.readable,onClick:()=>t(e),children:[(0,N.jsx)(`h3`,{className:`text-sm font-medium`,children:e.name}),(0,N.jsx)(`p`,{className:`mt-1 truncate text-xs text-muted-foreground`,title:e.path,children:e.path}),(0,N.jsx)(`p`,{className:`mt-2 line-clamp-2 text-xs text-muted-foreground`,title:e.description??e.ref,children:e.description??e.ref}),e.readable?null:(0,N.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:i(`projectsUnavailable`)})]},e.ref))}):(0,N.jsx)(F,{children:i(`projectsNoSkills`)})]})}function X({item:e,onSelect:t}){return(0,N.jsxs)(`button`,{type:`button`,className:`w-full rounded-xl bg-card p-3 text-left text-sm shadow-sm hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:t,children:[(0,N.jsx)(`span`,{className:`block font-medium`,children:e.name}),(0,N.jsxs)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:[e.reference.label,` · `,i(`projectsStatus_${e.status}`)]})]})}function ue({hasProjectSessions:e,onStartObservationSetup:t,onStartProjectWork:n,shouldOfferObservationSetup:r}){return(0,N.jsxs)(`div`,{className:`min-w-0`,children:[(0,N.jsx)(F,{children:i(r?`projectsWorkNeedsSetup`:e?`projectsWorkNoReports`:`projectsWorkNoSessions`)}),(0,N.jsx)(m,{size:`sm`,variant:`outline`,onClick:r?t:n,children:i(r?`projectsObservationSetupAction`:`projectsStartProjectWork`)})]})}function de({hasProjectSessions:e,onStartObservationSetup:t,onStartProjectWork:n,snapshot:r,shouldOfferObservationSetup:a}){let[o,s]=(0,M.useState)(`list`),[c,l]=(0,M.useState)(null),u=r.workItems.find(e=>e.id===c)??null,d=Y(r.workflows,r.workItems),f=ie(r.workItems),p=ae(r.workItems);return(0,N.jsxs)(`section`,{className:`min-w-0`,"aria-label":i(`projectsWork`),children:[(r.runs?.length??0)>0?(0,N.jsxs)(`div`,{className:`mb-5`,children:[(0,N.jsx)(`h2`,{className:`mb-2 text-sm font-semibold`,children:i(`projectsAiActivity`)}),(0,N.jsx)(K,{snapshot:r})]}):null,r.workItems.length===0?(0,N.jsx)(ue,{hasProjectSessions:e,onStartObservationSetup:t,onStartProjectWork:n,shouldOfferObservationSetup:a}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`div`,{className:`mb-4 flex flex-wrap gap-1`,role:`group`,"aria-label":i(`projectsWorkViews`),children:[`list`,`board`,`gantt`].map(e=>(0,N.jsx)(m,{size:`sm`,variant:o===e?`secondary`:`ghost`,"aria-pressed":o===e,onClick:()=>s(e),children:i(`projectsWork${e[0].toUpperCase()}${e.slice(1)}`)},e))}),o===`list`?(0,N.jsx)(`div`,{className:`space-y-2`,children:r.workItems.map(e=>(0,N.jsx)(X,{item:e,onSelect:()=>l(e.id)},e.id))}):null,o===`board`?d.length?(0,N.jsxs)(`div`,{className:`grid min-w-0 gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[d.map(e=>(0,N.jsxs)(`section`,{className:`min-w-0 rounded-xl bg-muted/35 p-3`,children:[(0,N.jsx)(`h3`,{className:`mb-3 text-xs font-semibold`,children:e.label}),(0,N.jsxs)(`div`,{className:`space-y-2`,children:[e.items.map(e=>(0,N.jsx)(X,{item:e,onSelect:()=>l(e.id)},e.id)),e.items.length?null:(0,N.jsx)(`p`,{className:`py-3 text-xs text-muted-foreground`,children:i(`projectsNoData`)})]})]},e.id)),f.length?(0,N.jsxs)(`section`,{className:`min-w-0 rounded-xl bg-muted/35 p-3`,children:[(0,N.jsx)(`h3`,{className:`mb-3 text-xs font-semibold`,children:i(`projectsUnstaged`)}),(0,N.jsx)(`div`,{className:`space-y-2`,children:f.map(e=>(0,N.jsx)(X,{item:e,onSelect:()=>l(e.id)},e.id))})]}):null]}):(0,N.jsx)(F,{children:i(`projectsBoardNeedsWorkflow`)}):null,o===`gantt`?p.length?(0,N.jsx)(`div`,{className:`overflow-x-auto rounded-xl border border-border/60`,children:(0,N.jsx)(`div`,{className:`min-w-[42rem] divide-y divide-border/60`,children:p.map(e=>(0,N.jsxs)(`button`,{type:`button`,className:`grid w-full grid-cols-[minmax(12rem,1fr)_9rem_9rem] gap-3 px-4 py-3 text-left text-sm hover:bg-[var(--interaction-hover)]`,onClick:()=>l(e.id),children:[(0,N.jsx)(`span`,{className:`truncate font-medium`,children:e.name}),(0,N.jsx)(`span`,{children:e.schedule?.start??`—`}),(0,N.jsx)(`span`,{children:e.schedule?.end??`—`})]},e.id))})}):(0,N.jsx)(F,{children:i(`projectsGanttNeedsSchedule`)}):null,u?(0,N.jsxs)(`aside`,{className:`mt-4 rounded-xl border border-border/60 bg-muted/25 p-4`,"aria-label":i(`projectsWorkDetails`),children:[(0,N.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,N.jsxs)(`div`,{children:[(0,N.jsx)(`h3`,{className:`font-semibold`,children:u.name}),(0,N.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[u.id,` · `,u.reference.label]})]}),(0,N.jsx)(m,{size:`sm`,variant:`ghost`,onClick:()=>l(null),children:i(`projectsCloseDetails`)})]}),(0,N.jsxs)(`dl`,{className:`mt-3 grid gap-2 text-sm sm:grid-cols-2`,children:[(0,N.jsxs)(`div`,{children:[(0,N.jsx)(`dt`,{className:`text-xs text-muted-foreground`,children:i(`projectsStatus`)}),(0,N.jsx)(`dd`,{children:i(`projectsStatus_${u.status}`)})]}),(0,N.jsxs)(`div`,{children:[(0,N.jsx)(`dt`,{className:`text-xs text-muted-foreground`,children:i(`projectsStage`)}),(0,N.jsx)(`dd`,{children:u.stageId??i(`projectsNoData`)})]}),(0,N.jsxs)(`div`,{children:[(0,N.jsx)(`dt`,{className:`text-xs text-muted-foreground`,children:i(`projectsUpdated`)}),(0,N.jsx)(`dd`,{children:u.updatedAt})]}),(0,N.jsxs)(`div`,{children:[(0,N.jsx)(`dt`,{className:`text-xs text-muted-foreground`,children:i(`projectsSchedule`)}),(0,N.jsx)(`dd`,{children:u.schedule?`${u.schedule.start??`—`} → ${u.schedule.end??`—`}`:i(`projectsNoData`)})]})]})]}):null]})]})}var Z=e=>[`project-observation`,e],fe=new Set([w.MessageTextEnd,w.MessageTextDelta,w.MessageCompleted,w.MessageFailed,w.MessageAbort,w.RunStarted,w.RunFinished,w.RunError]),pe=e=>{if(!(`payload`in e)||!e.payload||typeof e.payload!=`object`||!(`sessionId`in e.payload))return null;let{sessionId:t}=e.payload;return typeof t==`string`&&t.trim()?t.trim():null},me=e=>{let t=e?.project_root??e?.projectRoot;return typeof t==`string`&&t.trim()?t.trim():null};function he(e,t){let r=d();return(0,M.useEffect)(()=>{if(!e||!t)return;let i=Z(e),a=null,o=()=>{a||=setTimeout(()=>{a=null,r.invalidateQueries({queryKey:i,exact:!0})},100)},s=e=>{let t=r.getQueryData(i);return!!(t?.runs?.some(t=>t.sessionId===e)||t?.workItems.some(t=>t.reference.sessionId===e)||t?.activity.some(t=>t.reference.sessionId===e))},c=[f.eventBus.on(n.ncpEvent,e=>{if(!fe.has(e.type))return;let t=pe(e);t&&s(t)&&o()}),f.eventBus.on(n.sessionRunStatus,({sessionKey:e})=>{s(e)&&o()}),f.eventBus.on(n.sessionSummaryUpsert,({summary:e})=>{me(e.metadata)===t&&o()}),f.eventBus.on(n.sessionSummaryDelete,({sessionKey:e})=>{s(e)&&o()})];return()=>{a&&clearTimeout(a);for(let e of c)e()}},[e,t,r]),_({queryKey:Z(e??``),enabled:!!e,staleTime:5e3,queryFn:async()=>await f.projects.getObservation(e)})}async function ge(e){let t=`project-response-${e.requestId}-${e.decision}`;return await f.agentRuns.send({sessionId:e.sessionId,idempotencyKey:t,delivery:`prefer-steer`,message:{id:t,sessionId:e.sessionId,role:`user`,status:`final`,timestamp:new Date().toISOString(),parts:[{type:`text`,text:`${e.decision===`confirmed`?`确认`:`拒绝`}:${e.prompt}`}],metadata:{project_observation_response:{protocol:`nextclaw.project/v1`,requestId:e.requestId,decision:e.decision}}}})}var _e=[`overview`,`work`,`artifacts`,`skills`,`agreement`];function Q(e){let t=e.find(e=>e.id===`config`);return!t||t.status!==`available`}function $(e){return(e.find(e=>e.id===`sessions`)?.itemCount??0)>0}function ve(){let{projectId:e,tab:t}=l(),n=c(),[r,a]=(0,M.useState)(null),o=d(),s=E(),u=O(),f=u.data?.projects??[],m=f.find(t=>t.id===e)??null,h=J(t)?t:null,_=he(m?.id??null,m?.rootPath??null),v=g({mutationFn:ge,onMutate:e=>a(e.requestId),onSuccess:async()=>{m&&await o.invalidateQueries({queryKey:Z(m.id)}),p.success(i(`projectsResponseSent`))},onError:e=>p.error(`${i(`projectsResponseFailed`)}: ${e instanceof Error?e.message:String(e)}`),onSettled:()=>a(null)}),y=(e,t)=>{e.reference.sessionId&&v.mutate({requestId:e.id,sessionId:e.reference.sessionId,decision:t,prompt:e.prompt})};if(u.isLoading)return(0,N.jsx)(`main`,{className:`flex h-full items-center justify-center p-6 text-sm text-muted-foreground`,children:i(`projectsLoading`)});if(u.isError)return(0,N.jsxs)(`main`,{className:`p-6 text-sm text-destructive`,children:[i(`projectsLoadFailed`),`: `,u.error.message]});if(f.length===0)return(0,N.jsx)(`main`,{className:`p-6 text-sm text-muted-foreground`,children:i(`projectsEmpty`)});if(!m||!h)return(0,N.jsx)(`main`,{className:`p-6 text-sm text-muted-foreground`,children:i(`projectsChoose`)});let b=_.data,x=()=>s.chatSessionListManager.createSession({projectRoot:m.rootPath,prompt:i(`projectsObservationSetupPrompt`)}),S=()=>s.chatSessionListManager.createSession({projectRoot:m.rootPath,prompt:i(`projectsStartProjectWorkPrompt`)}),w=(e,t)=>s.chatThreadManager.openFilePreview({path:e,label:t,viewMode:`preview`,previewViewer:`rendered`});return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`main`,{className:`h-full min-w-0 flex-1 overflow-y-auto p-4 md:p-6`,children:(0,N.jsxs)(`div`,{className:`mx-auto max-w-6xl space-y-4`,children:[(0,N.jsx)(`header`,{className:`flex flex-wrap items-center gap-3`,children:(0,N.jsx)(`h1`,{className:`text-xl font-semibold`,children:i(`projectsTitle`)})}),_.isLoading?(0,N.jsx)(`div`,{className:`rounded-xl border border-border/60 p-5 text-sm text-muted-foreground`,children:i(`projectsLoading`)}):null,_.isError?(0,N.jsxs)(`div`,{className:`rounded-xl border border-destructive/40 bg-destructive/5 p-5 text-sm text-destructive`,children:[i(`projectsLoadFailed`),`: `,_.error.message]}):null,b?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`section`,{className:`rounded-2xl border border-border/60 bg-card p-4`,children:[(0,N.jsx)(`h2`,{className:`text-lg font-semibold`,children:b.project.name}),b.project.summary?(0,N.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:b.project.summary}):null,(0,N.jsx)(`p`,{className:`mt-2 break-all text-xs text-muted-foreground`,children:b.project.rootPath})]}),(0,N.jsx)(ce,{requests:se(b),pendingRequestId:r,onReply:y}),(0,N.jsxs)(D,{value:h,onValueChange:e=>n(`/projects/${encodeURIComponent(m.id)}/${e}`),children:[(0,N.jsx)(`div`,{className:`min-w-0 overflow-x-auto pb-1`,children:(0,N.jsx)(T,{className:`w-max`,children:_e.map(e=>(0,N.jsx)(A,{value:e,children:i(`projects${e[0].toUpperCase()}${e.slice(1)}`)},e))})}),(0,N.jsx)(C,{value:`overview`,className:`mt-4`,children:(0,N.jsx)(q,{hasProjectSessions:$(b.sources),snapshot:b,shouldOfferObservationSetup:Q(b.sources),onOpenFile:w,onStartObservationSetup:x,onStartProjectWork:S})}),(0,N.jsx)(C,{value:`work`,className:`mt-4`,children:(0,N.jsx)(de,{hasProjectSessions:$(b.sources),snapshot:b,shouldOfferObservationSetup:Q(b.sources),onStartObservationSetup:x,onStartProjectWork:S})}),(0,N.jsx)(C,{value:`artifacts`,className:`mt-4`,children:(0,N.jsx)(G,{snapshot:b,onOpenFile:w})}),(0,N.jsx)(C,{value:`skills`,className:`mt-4`,children:(0,N.jsx)(le,{snapshot:b,onOpen:e=>s.chatThreadManager.openFilePreview({path:e.path,label:e.name,viewMode:`preview`,previewViewer:`rendered`})})}),(0,N.jsx)(C,{value:`agreement`,className:`mt-4`,children:(0,N.jsx)(L,{snapshot:b,onOpenFile:w})})]})]}):null]})}),(0,N.jsx)(ne,{layoutMode:`desktop`,sessionKey:null,projectRoot:m.rootPath})]})}export{ve as ProjectsPage};