@sma1lboy/kobe 0.8.0 → 0.8.2

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 (50) hide show
  1. package/dist/cli/index.js +393 -359
  2. package/dist/web-ui/assets/{AppShell-BTOznqKS.js → AppShell-BuFVTjzQ.js} +1 -1
  3. package/dist/web-ui/assets/Board-D9IlaHCd.js +1 -0
  4. package/dist/web-ui/assets/{BoardPeek-CPY4k_RN.js → BoardPeek-C2xEBWVE.js} +2 -2
  5. package/dist/web-ui/assets/ChatTerminal-BrP-ENHg.css +1 -0
  6. package/dist/web-ui/assets/ChatTerminal-X69JLI3Q.js +144 -0
  7. package/dist/web-ui/assets/{ChatTranscript-B_xGXApc.js → ChatTranscript-C8YP8v0k.js} +1 -1
  8. package/dist/web-ui/assets/{ConfirmDialog-5OpgDkmx.js → ConfirmDialog-Bw_DhSYa.js} +1 -1
  9. package/dist/web-ui/assets/{IssueIntakePanel-CF7HL2s9.js → IssueIntakePanel-D48joYeF.js} +1 -1
  10. package/dist/web-ui/assets/IssuePeek-CnuN0m7v.js +1 -0
  11. package/dist/web-ui/assets/IssuesPage-D2n-CM8o.js +1 -0
  12. package/dist/web-ui/assets/{RichEditor-DmGT9P7h.js → RichEditor-DYofF0Co.js} +1 -1
  13. package/dist/web-ui/assets/{SettingsPage-BtJX2Wbd.js → SettingsPage-CEWJd0gX.js} +1 -1
  14. package/dist/web-ui/assets/{SlideOver-BN-NhV9P.js → SlideOver-CWvQg6gX.js} +1 -1
  15. package/dist/web-ui/assets/{ViewToggle-CIZAN_0S.js → ViewToggle-DUvz-P9N.js} +1 -1
  16. package/dist/web-ui/assets/{WorkspaceTabs-BjQlK6xw.js → WorkspaceTabs-AmpKkNKh.js} +3 -3
  17. package/dist/web-ui/assets/arrow-left-CTu620DY.js +1 -0
  18. package/dist/web-ui/assets/board-gsUJ3unG.js +1 -0
  19. package/dist/web-ui/assets/{chips-L2qle6td.js → chips-ER3SiHRg.js} +1 -1
  20. package/dist/web-ui/assets/{createLucideIcon-Dn8f0BBU.js → createLucideIcon-B3ImGkvG.js} +1 -1
  21. package/dist/web-ui/assets/{external-link-CGQEaSmM.js → external-link-D0CjtZaF.js} +1 -1
  22. package/dist/web-ui/assets/{external-store-DUMhHvtl.js → external-store-BMGmoHuF.js} +1 -1
  23. package/dist/web-ui/assets/harness-B3lC6M9X.js +1 -0
  24. package/dist/web-ui/assets/{index-DmtC0Wbe.css → index-DVMmUb6_.css} +1 -1
  25. package/dist/web-ui/assets/{index-CX2Ouner.js → index-L7l828Hv.js} +3 -3
  26. package/dist/web-ui/assets/issues-BBYWc1q0.js +4 -0
  27. package/dist/web-ui/assets/issues-BmvAw4q3.js +1 -0
  28. package/dist/web-ui/assets/lazy-issue-panels-Dg86YAgC.js +6 -0
  29. package/dist/web-ui/assets/{rotate-cw-zLlRat-M.js → rotate-cw-BxAflhQC.js} +1 -1
  30. package/dist/web-ui/assets/routes-Ch_aVEQc.js +1 -0
  31. package/dist/web-ui/assets/{store-CbgoTSs1.js → store-BvkKuplZ.js} +2 -2
  32. package/dist/web-ui/assets/{tabs-B_hac99E.js → tabs-C6drmk5t.js} +1 -1
  33. package/dist/web-ui/assets/task._taskId-BWkc9jhF.js +1 -0
  34. package/dist/web-ui/assets/{toast-D798wIYZ.js → toast-CvhQ8RqX.js} +1 -1
  35. package/dist/web-ui/assets/{worktrees-CZYooVsg.js → worktrees-DhzuyoNd.js} +1 -1
  36. package/dist/web-ui/index.html +7 -7
  37. package/package.json +3 -1
  38. package/dist/web-ui/assets/Board-Bvkyjgq6.js +0 -1
  39. package/dist/web-ui/assets/ChatTerminal-kHJ-D0s7.css +0 -1
  40. package/dist/web-ui/assets/ChatTerminal-yge5k7Tv.js +0 -8
  41. package/dist/web-ui/assets/IssuePeek-BHWJhJku.js +0 -1
  42. package/dist/web-ui/assets/IssuesPage-kkOaSh0x.js +0 -1
  43. package/dist/web-ui/assets/arrow-left-BXrVItPe.js +0 -1
  44. package/dist/web-ui/assets/board-D5jDr-4b.js +0 -1
  45. package/dist/web-ui/assets/harness-BRyFen92.js +0 -1
  46. package/dist/web-ui/assets/issues-BBbxPwjI.js +0 -3
  47. package/dist/web-ui/assets/issues-GeSdN8vm.js +0 -1
  48. package/dist/web-ui/assets/lazy-issue-panels-CE0UA8nx.js +0 -6
  49. package/dist/web-ui/assets/routes-DUr6PI5d.js +0 -1
  50. package/dist/web-ui/assets/task._taskId-D0S-W4kD.js +0 -1
@@ -0,0 +1,4 @@
1
+ import{o as e,r as t}from"./terminal-B6OlmT6e.js";import{c as n,n as r}from"./tabs-C6drmk5t.js";import{t as i}from"./store-BvkKuplZ.js";import{D as a,l as o}from"./index-L7l828Hv.js";import{t as s}from"./text-match-C3BRtNXy.js";var c=[{key:`backlog`,title:`Backlog`,accent:`text-subtle`,alwaysVisible:!0},{key:`in_progress`,title:`In progress`,accent:`text-kobe-orange`,alwaysVisible:!0},{key:`done`,title:`Done`,accent:`text-kobe-green`,alwaysVisible:!0}],l=new Set([`done`]);function u(e){return e.status===`done`?`done`:e.taskId!==void 0&&e.taskId!==``?`in_progress`:`backlog`}function d(e){return e.taskId!==void 0&&e.taskId!==``}function f(e,t){return e.issue.created===t.issue.created?t.issue.id-e.issue.id:e.issue.created<t.issue.created?1:-1}function p(e){let t=new Map,n=(e,n)=>{let r=t.get(e);r?r.push(n):t.set(e,[n])};for(let t of e)n(u(t.issue),t);for(let e of t.values())e.sort(f);let r=(e,t)=>!l.has(e)||t.length<=30?{cards:t,hiddenCount:0}:{cards:t.slice(0,30),hiddenCount:t.length-30};return c.map(e=>({...e,...r(e.key,t.get(e.key)??[])})).filter(e=>e.alwaysVisible||e.cards.length+e.hiddenCount>0)}function m(e){return e.reduce((e,t)=>e+t.cards.length,0)}function h(e){let t=new Map;for(let n of e){let e=n.repo,r=t.get(e);r?r.push(n):t.set(e,[n])}let n=[...t.keys()];return n.map(e=>({repo:e,label:_(e,n),columns:p(t.get(e)??[])})).sort((e,t)=>e.label.localeCompare(t.label))}function g(e){let t=e.replace(/\/+$/,``);return t.split(`/`).pop()||t}function _(e,t){let n=g(e);return t.some(t=>t!==e&&g(t)===n)?e.replace(/\/+$/,``).split(`/`).slice(-2).join(`/`):n}function v(e,t,n){let r=[];for(let i of t){let t=e[i];if(!(!t||!t.exists))for(let e of t.issues){let t=n.get(`${i}:${e.id}`);r.push(t&&!e.taskId?{repo:i,issue:{...e,taskId:t.taskId}}:{repo:i,issue:e})}}return r}function y(e){let t=new Map;for(let{repo:n}of e)t.set(n,(t.get(n)??0)+1);let n=[...t.keys()];return n.map(e=>({repo:e,label:_(e,n),count:t.get(e)??0})).sort((e,t)=>e.label.localeCompare(t.label))}function b(e,t,n){return e.filter(({repo:e,issue:r})=>n&&e!==n?!1:s(`#${r.id} ${r.title} ${r.body}`,t))}function x(e){let t=v(e.issueData,e.issueRepos,e.pendingLinks),n=y(t),r=h(b(t,e.query,e.repoFilter));return e.repoFilter&&r.length===0&&e.issueRepos.includes(e.repoFilter)&&r.push({repo:e.repoFilter,label:_(e.repoFilter,e.issueRepos),columns:p([])}),{allIssues:t,repoChips:n,projectBoards:r,shownCount:r.reduce((e,t)=>e+m(t.columns),0),hasAnyCard:t.length>0}}async function S(){let t=await e.get(`/api/projects`,{label:`load projects`});return Array.isArray(t.projects)?t.projects.filter(e=>typeof e==`string`):[]}async function C(t){return e.get(`/api/issues`,{query:{repoRoot:t},label:`load issues`})}async function w(t,n){return e.post(`/api/issues`,{repoRoot:t,op:n},{label:`update issues`})}async function T(e,t){return w(e,{type:`create`,...t})}async function E(e,t,n){return w(e,{type:`setStatus`,id:t,status:n})}async function D(e,t,n){return w(e,{type:`update`,id:t,...n})}async function O(e,t,n){return w(e,{type:`link`,id:t,taskId:n})}async function k(e,t){return w(e,{type:`delete`,id:t})}async function A(){let t=await e.getOr(`/api/cli-invocation`,{},{label:`load CLI invocation`});return typeof t.api==`string`&&t.api.trim().length>0?t.api:`kobe api`}var j=[`open`,`doing`,`hold`,`done`],M={open:{title:`Backlog`,accent:`text-kobe-blue`},doing:{title:`In session`,accent:`text-kobe-orange`},hold:{title:`Blocked`,accent:`text-kobe-yellow`},done:{title:`Done`,accent:`text-kobe-green`}};function N(e){return e!==`done`}function P(e,t){let n=(t.query??``).trim().toLowerCase(),r=t.statuses&&t.statuses.length>0?t.statuses:null;return e.filter(e=>r&&!r.includes(e.status)?!1:n?`#${e.id} ${e.title} ${e.body}`.toLowerCase().includes(n):!0)}function F(e){let t={open:[],doing:[],hold:[],done:[]};for(let n of e)t[n.status]?.push(n);let n=(e,t)=>e.created===t.created?t.id-e.id:e.created<t.created?1:-1;return t.open.sort(n),t.doing.sort(n),t.hold.sort(n),t.done.sort((e,t)=>t.id-e.id),t}function I(e,t=[]){let n=new Map;for(let e of t)e.trim().length>0&&n.set(e,0);let r=new Set(e.filter(e=>!e.archived&&e.kind===`main`&&e.repo).map(e=>e.repo));for(let e of r)n.set(e,n.get(e)??0);let i=new Set(n.keys());for(let t of e)t.archived||!t.repo||i.size>0&&!i.has(t.repo)||n.set(t.repo,(n.get(t.repo)??0)+1);let a=[...n.keys()];return a.map(e=>({repo:e,label:_(e,a),count:n.get(e)??0})).sort((e,t)=>e.label.localeCompare(t.label))}function L(e,t){return e.length===0?null:t&&e.some(e=>e.repo===t)?t:e[0]?.repo??null}function R(e,t=`kobe api`){let n=[`Work on user story #${e.id}: ${e.title}`,``],r=e.body.trim();return r&&n.push(r,``),n.push(`Treat this as the story's dedicated kobe task session: work only in this task worktree, and preserve any repo init instructions already delivered to the session.`,`Before finishing, verify the acceptance criteria implied by the story and summarize what changed plus any verification still needed.`,`Then merge the task branch back into the current project's main branch after the worktree is clean and checks pass.`,`When the work lands, run: ${t} issue-set-status --repo . --id ${e.id} --status done`),n.join(`
2
+ `)}function z(e,t=`kobe api`){let n=[`Work on user story #${e.id}: ${e.title}`,``],r=e.body.trim();return r&&n.push(r,``),n.push(`You are working directly in the project checkout — no dedicated worktree or branch was created. Keep changes reviewable and do not switch branches unless asked.`,`Before finishing, verify the acceptance criteria implied by the story and summarize what changed plus any verification still needed.`,`When the work lands, run: ${t} issue-set-status --repo . --id ${e.id} --status done`),n.join(`
3
+ `)}function B(e,t=`kobe api`){return[`Finish user story #${e.id}: ${e.title}`,``,`Verify the acceptance criteria implied by the story, then summarize what changed and any verification still needed.`,`Then merge this task branch back into the current project's main branch after the worktree is clean and checks pass. Resolve conflicts if needed.`,`When the work lands, run: ${t} issue-set-status --repo . --id ${e.id} --status done`].join(`
4
+ `)}async function V(e,r,i,o){let s=await H(e,r,i,o);a(s);let c=await A().catch(()=>`kobe api`);return await t(n(s),s,R(r,c)),{taskId:s}}async function H(e,t,n,r){let a=n?.trim()||await o(),{taskId:s}=await i(`task.create`,{repo:e,title:`#${t.id} ${t.title}`,...a?{vendor:a}:{},...r?.trim()?{effort:r.trim()}:{}});return await O(e,t.id,s).catch(()=>{}),s}async function U(e,n,o={}){let s=o.placement??`task`;if(s===`task`){let{taskId:t}=await V(e,n,o.vendor,o.effort);return{taskId:t,workspaceTaskId:t}}let c=await A().catch(()=>`kobe api`),{task:l}=await i(`task.ensureMain`,{repo:e}),u=l.id;if(s===`projectWorktree`){let i=await H(e,n,o.vendor,o.effort);return a(u),await t(r(u,i),i,R(n,c)),{taskId:i,workspaceTaskId:u}}let d=o.vendor?.trim();return d&&await i(`task.setVendor`,{taskId:u,vendor:d}),a(u),await E(e,n.id,`doing`).catch(()=>{}),await t(r(u),u,z(n,c)),{taskId:u,workspaceTaskId:u}}async function W(e,r){let i=await A().catch(()=>`kobe api`);await t(n(e),e,B(r,i))}export{d as _,k as a,P as c,W as d,V as f,x as g,D as h,T as i,F as l,U as m,M as n,C as o,L as p,N as r,S as s,j as t,I as u};
@@ -0,0 +1 @@
1
+ import{IssuesPage as e}from"./IssuesPage-D2n-CM8o.js";var t=e;export{t as component};
@@ -0,0 +1,6 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/IssueIntakePanel-D48joYeF.js","assets/terminal-B6OlmT6e.js","assets/tabs-C6drmk5t.js","assets/createLucideIcon-B3ImGkvG.js","assets/SlideOver-CWvQg6gX.js","assets/index-L7l828Hv.js","assets/toast-CvhQ8RqX.js","assets/external-store-BMGmoHuF.js","assets/store-BvkKuplZ.js","assets/index-DVMmUb6_.css","assets/issues-BBYWc1q0.js","assets/text-match-C3BRtNXy.js","assets/RichEditor-DYofF0Co.js","assets/RichEditor-B4sEOPyN.css","assets/IssuePeek-CnuN0m7v.js","assets/external-link-D0CjtZaF.js"])))=>i.map(i=>d[i]);
2
+ import{l as e}from"./terminal-B6OlmT6e.js";import{y as t}from"./tabs-C6drmk5t.js";import{d as n,t as r}from"./createLucideIcon-B3ImGkvG.js";import{i,n as a,r as o}from"./store-BvkKuplZ.js";import{i as s}from"./chips-ER3SiHRg.js";import{o as c}from"./issues-BBYWc1q0.js";var l=r(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),u=r(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),d=e(t(),1);function f(e){let{issueSnapshots:t}=a(),[n,r]=(0,d.useState)({}),[i,s]=(0,d.useState)({}),[l,u]=(0,d.useState)(!1),f=(0,d.useRef)(new Map),p=(0,d.useRef)(new Map),m=(0,d.useRef)(new Map),h=(0,d.useRef)(new Map),g=(0,d.useCallback)(e=>{let t=(f.current.get(e)??0)+1;return f.current.set(e,t),t},[]),_=(0,d.useCallback)((e,t,n=e.repoRoot)=>{t<(p.current.get(n)??0)||(p.current.set(n,t),e.repoRoot&&e.repoRoot!==n&&h.current.set(n,e.repoRoot),r(t=>({...t,[n]:{...e,repoRoot:n}})),s(e=>{if(!(n in e))return e;let{[n]:t,...r}=e;return r}))},[]),v=(0,d.useCallback)(e=>{e.length!==0&&(u(!0),Promise.all(e.map(async e=>{let t=g(e);try{_(await c(e),t,e)}catch(t){s(n=>({...n,[e]:t instanceof Error?t.message:String(t)}))}})).finally(()=>u(!1)))},[g,_]),y=(0,d.useMemo)(()=>[...e].join(`
3
+ `),[e]);return(0,d.useEffect)(()=>{v(y?y.split(`
4
+ `):[])},[y]),(0,d.useEffect)(()=>{let e=new Map(Object.values(t).map(e=>[o(e.repoRoot),e]));for(let t of y?y.split(`
5
+ `):[]){let n=h.current.get(t),r=e.get(o(t))??(n?e.get(o(n)):void 0);if(!r||m.current.get(t)===r)continue;m.current.set(t,r);let i=g(t);_(r,i,t)}},[t,y,g,_]),{data:n,failed:i,loading:l,pending:(0,d.useMemo)(()=>(y?y.split(`
6
+ `):[]).some(e=>!(e in n)&&!(e in i)),[y,n,i]),refresh:v}}var p=n();function m({issue:e,selected:t=!1,onOpen:n,onDelete:r}){return(0,p.jsxs)(`div`,{className:`group/card relative`,"data-issue-card":e.id,children:[(0,p.jsxs)(`button`,{type:`button`,onClick:n,className:`flex w-full cursor-pointer flex-col gap-1.5 border p-3 text-left transition-colors ${t?`border-primary bg-inset`:`border-line bg-surface hover:border-primary hover:bg-inset`}`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,p.jsxs)(`span`,{className:`shrink-0 font-mono text-[10px] text-subtle`,children:[`#`,e.id]}),(0,p.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[13px] text-fg`,children:e.title})]}),(0,p.jsx)(`div`,{className:`flex items-center gap-2 text-[11px] text-subtle`,children:(0,p.jsx)(`span`,{className:`font-mono`,children:e.created})})]}),(0,p.jsxs)(`div`,{className:`absolute right-2 top-2 flex gap-1 opacity-0 transition-opacity focus-within:opacity-100 group-hover/card:opacity-100`,children:[(0,p.jsx)(`button`,{type:`button`,onClick:n,"aria-label":`Open issue #${e.id}`,"data-tip":`Open issue detail`,className:`relative flex h-5 w-5 items-center justify-center border border-line bg-surface text-subtle hover:border-primary hover:text-fg ${s}`,children:(0,p.jsx)(l,{size:11,strokeWidth:1.8})}),(0,p.jsx)(`button`,{type:`button`,onClick:r,"aria-label":`Delete issue #${e.id}`,"data-tip":`Delete issue`,className:`relative flex h-5 w-5 items-center justify-center border border-line bg-surface text-subtle hover:border-kobe-red/50 hover:text-kobe-red ${s}`,children:(0,p.jsx)(u,{size:11,strokeWidth:1.8})})]})]})}var h=(0,d.lazy)(()=>i(()=>import(`./IssueIntakePanel-D48joYeF.js`).then(e=>({default:e.IssueIntakePanel})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]))),g=(0,d.lazy)(()=>i(()=>import(`./IssuePeek-CnuN0m7v.js`).then(e=>({default:e.IssuePeek})),__vite__mapDeps([14,1,2,3,15,4,5,6,7,8,9,10,11,12,13])));function _({children:e}){return(0,p.jsx)(d.Suspense,{fallback:(0,p.jsx)(`div`,{className:`fixed inset-0 z-40 flex justify-end`,children:(0,p.jsx)(`div`,{className:`relative flex h-full w-[640px] max-w-[92vw] items-center justify-center border-l border-line bg-bg text-[12px] text-subtle shadow-2xl`,children:`Loading…`})}),children:e})}export{f as a,m as i,h as n,g as r,_ as t};
@@ -1 +1 @@
1
- import{t as e}from"./createLucideIcon-Dn8f0BBU.js";var t=e(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]);export{t};
1
+ import{t as e}from"./createLucideIcon-B3ImGkvG.js";var t=e(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{AppShell as e}from"./AppShell-BuFVTjzQ.js";var t=e;export{t as component};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/tabs-B_hac99E.js","assets/terminal-B6OlmT6e.js"])))=>i.map(i=>d[i]);
2
- import{l as e,o as t}from"./terminal-B6OlmT6e.js";import{u as n,y as r}from"./tabs-B_hac99E.js";import{n as i,s as a}from"./createLucideIcon-Dn8f0BBU.js";var o=e(r(),1),s=`modulepreload`,c=function(e){return`/`+e},l={},u=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function u(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,new URL(`../../../src/node/plugins/importAnalysisBuild.ts`,import.meta.url)).href}r=o(t.map(t=>{if(t=c(t,n),t=u(t),t in l)return;l[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:s,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},d=`kobe.dispatch.deliveredAt.`;function f(e){try{let t=localStorage.getItem(d+e),n=t?Number.parseInt(t,10):0;return Number.isFinite(n)?n:0}catch{return 0}}function p(e,t){try{localStorage.setItem(d+e,String(t))}catch{}}function m(e,t){return e.at>t}async function h(e,t){if(!m(e,f(e.taskId)))return!1;p(e.taskId,e.at);let n=t?.ensureTab,r=t?.send;if(!n||!r){let e=await u(()=>import(`./tabs-B_hac99E.js`).then(e=>e.g),__vite__mapDeps([0,1])),t=await u(()=>import(`./terminal-B6OlmT6e.js`).then(e=>e.i),[]);n??=e.ensureEngineTab,r??=t.sendPtyText}try{let t=n(e.taskId);return await r(t,e.taskId,e.text),!0}catch(t){return p(e.taskId,e.at-1),console.warn(`[dispatch-delivery] failed to deliver into session`,e.taskId,t),!1}}function g(e){return e.length>1?e.replace(/\/+$/,``):e}function _(e,t){let n=g(t),r=new Set([t]);for(let t of e){let e=g(t.repo),i=g(t.worktreePath);(e===n||i===n)&&(t.repo&&r.add(t.repo),t.worktreePath&&r.add(t.worktreePath))}return[...r]}function v(e,t){let n=new Set;for(let e of t)e.repo&&n.add(g(e.repo)),e.worktreePath&&n.add(g(e.worktreePath));let r=Object.entries(e).filter(([e])=>n.has(g(e)));return r.length===Object.keys(e).length?e:Object.fromEntries(r)}function y(e={}){let n=e.path??`/api/rpc`,r=e.post??t.post.bind(t);return{async request(e,t){return(await r(n,{name:e,payload:t},{label:`rpc ${e}`})).result}}}var b=y(),x={tasks:[],activeTaskId:null,engineStates:{},update:null,jobs:{},worktreeChanges:{},issueSnapshots:{},deliver:null,uiPrefs:null,hydrated:!1,daemonConnected:!1,streamConnected:!1},S=new Set;function C(e){x={...x,...e};for(let e of S)e()}function w(e,t){let n=Object.entries(e).filter(([e])=>t.has(e));return n.length===Object.keys(e).length?e:Object.fromEntries(n)}function T(e,t){return!e&&t===`idle`}function E(e,t){if(t.phase===`running`)return{...e,[t.taskId]:t};let{[t.taskId]:n,...r}=e;return r}function D(e,t,n){let r={...e};for(let e of _(t,n.repoRoot))r[e]={...n,repoRoot:e};return r}function O(e){let t=new Set(e.map(e=>e.id));C({tasks:e,engineStates:w(x.engineStates,t),jobs:w(x.jobs,t),issueSnapshots:v(x.issueSnapshots,e)}),n(t)}function k(e){switch(e.channel){case`task.snapshot`:O(e.payload.tasks);break;case`active-task`:C({activeTaskId:e.payload.taskId});break;case`engine-state`:{let t=x.engineStates[e.payload.taskId]?.state,n=x.tasks.find(t=>t.id===e.payload.taskId);if(T(n,e.payload.state))break;a(e.payload.taskId,n?.title||n?.branch||e.payload.taskId,t,e.payload.state),C({engineStates:{...x.engineStates,[e.payload.taskId]:e.payload}});break}case`update`:C({update:e.payload.info});break;case`task.jobs`:C({jobs:E(x.jobs,e.payload)});break;case`worktree.changes`:C({worktreeChanges:e.payload.changes});break;case`issue.snapshot`:C({issueSnapshots:D(x.issueSnapshots,x.tasks,e.payload)});break;case`session.deliver`:C({deliver:e.payload}),h(e.payload);break;case`ui-prefs`:C({uiPrefs:e.payload}),i(e.payload.theme);break}}function A(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function j(e){if(!A(e)||!Array.isArray(e.tasks)||typeof e.activeTaskId!=`string`&&e.activeTaskId!==null||!A(e.engineStates)||typeof e.connected!=`boolean`)return null;for(let t of[`jobs`,`worktreeChanges`,`issueSnapshots`])if(e[t]!==void 0&&!A(e[t]))return null;return e.uiPrefs!==void 0&&e.uiPrefs!==null&&!A(e.uiPrefs)?null:e}function M(e){return Math.min(1e4,500*2**Math.max(0,e))}var N=null,P=0,F=null;function I(e){return e!==null&&e.readyState!==EventSource.CLOSED}function L(e){P=0,C({tasks:e.tasks,activeTaskId:e.activeTaskId,engineStates:e.engineStates,update:e.update,jobs:e.jobs??{},worktreeChanges:e.worktreeChanges??{},issueSnapshots:e.issueSnapshots??{},deliver:e.deliver??null,uiPrefs:e.uiPrefs??null,hydrated:!0,daemonConnected:e.connected,streamConnected:!0}),e.uiPrefs&&i(e.uiPrefs.theme),e.connected&&e.deliver&&h(e.deliver),e.connected&&n(new Set(e.tasks.map(e=>e.id)))}function R(){if(F!==null)return;let e=M(P);P+=1,F=setTimeout(()=>{F=null,S.size>0&&z()},e)}function z(){I(N)||(N=new EventSource(`/events`),N.addEventListener(`open`,()=>{P=0,C({streamConnected:!0})}),N.addEventListener(`snapshot`,e=>{let t;try{t=JSON.parse(e.data)}catch{console.warn(`[store] dropped unparseable snapshot frame`);return}let n=j(t);if(!n){console.warn(`[store] dropped malformed snapshot frame`);return}L(n)}),N.addEventListener(`channel`,e=>{let t;try{t=JSON.parse(e.data)}catch{console.warn(`[store] dropped unparseable channel frame`);return}if(!A(t)||typeof t.channel!=`string`){console.warn(`[store] dropped malformed channel frame`);return}k(t),x.daemonConnected||C({daemonConnected:!0})}),N.addEventListener(`error`,()=>{C({streamConnected:!1}),N&&N.readyState===EventSource.CLOSED&&(N.close(),N=null,R())}))}function B(e){return z(),S.add(e),()=>{S.delete(e)}}function V(){return x}function H(){return(0,o.useSyncExternalStore)(B,V,V)}async function U(e,t){return b.request(e,t)}export{u as i,H as n,g as r,U as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/tabs-C6drmk5t.js","assets/terminal-B6OlmT6e.js"])))=>i.map(i=>d[i]);
2
+ import{l as e,o as t}from"./terminal-B6OlmT6e.js";import{u as n,y as r}from"./tabs-C6drmk5t.js";import{n as i,s as a}from"./createLucideIcon-B3ImGkvG.js";var o=e(r(),1),s=`modulepreload`,c=function(e){return`/`+e},l={},u=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function u(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,new URL(`../../../src/node/plugins/importAnalysisBuild.ts`,import.meta.url)).href}r=o(t.map(t=>{if(t=c(t,n),t=u(t),t in l)return;l[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:s,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},d=`kobe.dispatch.deliveredAt.`;function f(e){try{let t=localStorage.getItem(d+e),n=t?Number.parseInt(t,10):0;return Number.isFinite(n)?n:0}catch{return 0}}function p(e,t){try{localStorage.setItem(d+e,String(t))}catch{}}function m(e,t){return e.at>t}async function h(e,t){if(!m(e,f(e.taskId)))return!1;p(e.taskId,e.at);let n=t?.ensureTab,r=t?.send;if(!n||!r){let e=await u(()=>import(`./tabs-C6drmk5t.js`).then(e=>e.g),__vite__mapDeps([0,1])),t=await u(()=>import(`./terminal-B6OlmT6e.js`).then(e=>e.i),[]);n??=e.ensureEngineTab,r??=t.sendPtyText}try{let t=n(e.taskId);return await r(t,e.taskId,e.text),!0}catch(t){return p(e.taskId,e.at-1),console.warn(`[dispatch-delivery] failed to deliver into session`,e.taskId,t),!1}}function g(e){return e.length>1?e.replace(/\/+$/,``):e}function _(e,t){let n=g(t),r=new Set([t]);for(let t of e){let e=g(t.repo),i=g(t.worktreePath);(e===n||i===n)&&(t.repo&&r.add(t.repo),t.worktreePath&&r.add(t.worktreePath))}return[...r]}function v(e,t){let n=new Set;for(let e of t)e.repo&&n.add(g(e.repo)),e.worktreePath&&n.add(g(e.worktreePath));let r=Object.entries(e).filter(([e])=>n.has(g(e)));return r.length===Object.keys(e).length?e:Object.fromEntries(r)}function y(e={}){let n=e.path??`/api/rpc`,r=e.post??t.post.bind(t);return{async request(e,t){return(await r(n,{name:e,payload:t},{label:`rpc ${e}`})).result}}}var b=y(),x={tasks:[],activeTaskId:null,engineStates:{},update:null,jobs:{},worktreeChanges:{},issueSnapshots:{},deliver:null,uiPrefs:null,hydrated:!1,daemonConnected:!1,streamConnected:!1},S=new Set;function C(e){x={...x,...e};for(let e of S)e()}function w(e,t){let n=Object.entries(e).filter(([e])=>t.has(e));return n.length===Object.keys(e).length?e:Object.fromEntries(n)}function T(e,t){return!e&&t===`idle`}function E(e,t){if(t.phase===`running`)return{...e,[t.taskId]:t};let{[t.taskId]:n,...r}=e;return r}function D(e,t,n){let r={...e};for(let e of _(t,n.repoRoot))r[e]={...n,repoRoot:e};return r}function O(e){let t=new Set(e.map(e=>e.id));C({tasks:e,engineStates:w(x.engineStates,t),jobs:w(x.jobs,t),issueSnapshots:v(x.issueSnapshots,e)}),n(t)}function k(e){switch(e.channel){case`task.snapshot`:O(e.payload.tasks);break;case`active-task`:C({activeTaskId:e.payload.taskId});break;case`engine-state`:{let t=x.engineStates[e.payload.taskId]?.state,n=x.tasks.find(t=>t.id===e.payload.taskId);if(T(n,e.payload.state))break;a(e.payload.taskId,n?.title||n?.branch||e.payload.taskId,t,e.payload.state),C({engineStates:{...x.engineStates,[e.payload.taskId]:e.payload}});break}case`update`:C({update:e.payload.info});break;case`task.jobs`:C({jobs:E(x.jobs,e.payload)});break;case`worktree.changes`:C({worktreeChanges:e.payload.changes});break;case`issue.snapshot`:C({issueSnapshots:D(x.issueSnapshots,x.tasks,e.payload)});break;case`session.deliver`:C({deliver:e.payload}),h(e.payload);break;case`ui-prefs`:C({uiPrefs:e.payload}),i(e.payload.theme);break}}function A(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function j(e){if(!A(e)||!Array.isArray(e.tasks)||typeof e.activeTaskId!=`string`&&e.activeTaskId!==null||!A(e.engineStates)||typeof e.connected!=`boolean`)return null;for(let t of[`jobs`,`worktreeChanges`,`issueSnapshots`])if(e[t]!==void 0&&!A(e[t]))return null;return e.uiPrefs!==void 0&&e.uiPrefs!==null&&!A(e.uiPrefs)?null:e}function M(e){return Math.min(1e4,500*2**Math.max(0,e))}var N=null,P=0,F=null;function I(e){return e!==null&&e.readyState!==EventSource.CLOSED}function L(e){P=0,C({tasks:e.tasks,activeTaskId:e.activeTaskId,engineStates:e.engineStates,update:e.update,jobs:e.jobs??{},worktreeChanges:e.worktreeChanges??{},issueSnapshots:e.issueSnapshots??{},deliver:e.deliver??null,uiPrefs:e.uiPrefs??null,hydrated:!0,daemonConnected:e.connected,streamConnected:!0}),e.uiPrefs&&i(e.uiPrefs.theme),e.connected&&e.deliver&&h(e.deliver),e.connected&&n(new Set(e.tasks.map(e=>e.id)))}function R(){if(F!==null)return;let e=M(P);P+=1,F=setTimeout(()=>{F=null,S.size>0&&z()},e)}function z(){I(N)||(N=new EventSource(`/events`),N.addEventListener(`open`,()=>{P=0,C({streamConnected:!0})}),N.addEventListener(`snapshot`,e=>{let t;try{t=JSON.parse(e.data)}catch{console.warn(`[store] dropped unparseable snapshot frame`);return}let n=j(t);if(!n){console.warn(`[store] dropped malformed snapshot frame`);return}L(n)}),N.addEventListener(`channel`,e=>{let t;try{t=JSON.parse(e.data)}catch{console.warn(`[store] dropped unparseable channel frame`);return}if(!A(t)||typeof t.channel!=`string`){console.warn(`[store] dropped malformed channel frame`);return}k(t),x.daemonConnected||C({daemonConnected:!0})}),N.addEventListener(`error`,()=>{C({streamConnected:!1}),N&&N.readyState===EventSource.CLOSED&&(N.close(),N=null,R())}))}function B(e){return z(),S.add(e),()=>{S.delete(e)}}function V(){return x}function H(){return(0,o.useSyncExternalStore)(B,V,V)}async function U(e,t){return b.request(e,t)}export{u as i,H as n,g as r,U as t};
@@ -1 +1 @@
1
- import{c as e,l as t,s as n,t as r}from"./terminal-B6OlmT6e.js";var i=n((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u<e.length;u++)a=e[u],s=l+j(a,u),c+=N(a,r,i,s,o);else if(u=m(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+j(a,u++),c+=N(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return N(M(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function P(e,t,n){if(e==null)return e;var r=[],i=0;return N(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function F(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var I=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)},L={map:P,forEach:function(e,t,n){P(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return P(e,function(){t++}),t},toArray:function(e){return P(e,function(e){return e})||[]},only:function(e){if(!O(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=L,e.Component=v,e.Fragment=r,e.Profiler=a,e.PureComponent=b,e.StrictMode=i,e.Suspense=l,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return w.H.useMemoCache(e)}},e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=g({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!T.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return E(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)T.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return E(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=O,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:F}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=function(e){var t=w.T,n={};w.T=n;try{var r=e(),i=w.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(C,I)}catch(e){I(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),w.T=t}},e.unstable_useCacheRefresh=function(){return w.H.useCacheRefresh()},e.use=function(e){return w.H.use(e)},e.useActionState=function(e,t,n){return w.H.useActionState(e,t,n)},e.useCallback=function(e,t){return w.H.useCallback(e,t)},e.useContext=function(e){return w.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return w.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return w.H.useEffect(e,t)},e.useEffectEvent=function(e){return w.H.useEffectEvent(e)},e.useId=function(){return w.H.useId()},e.useImperativeHandle=function(e,t,n){return w.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return w.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return w.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return w.H.useMemo(e,t)},e.useOptimistic=function(e,t){return w.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return w.H.useReducer(e,t,n)},e.useRef=function(e){return w.H.useRef(e)},e.useState=function(e){return w.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return w.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return w.H.useTransition()},e.version=`19.2.7`})),a=n(((e,t)=>{t.exports=i()})),o=t(a(),1),s={empty:{hasPty:!1,titleMode:`static`,label:`New tab`},vendor:{hasPty:!0,titleMode:`count`,label:`Vendor`},terminal:{hasPty:!0,titleMode:`count`,label:`Terminal`},transcript:{hasPty:!1,titleMode:`static`,label:`Chat`},file:{hasPty:!1,titleMode:`static`,label:`File`}};function c(e){return s[e].hasPty}function l(e,t){let n=s[e];if(n.titleMode===`count`){let r=t.filter(t=>t.kind===e).length+1;return`${n.label} ${r}`}return n.label}var u=e({addEmptyTab:()=>j,addTab:()=>k,clearSelectedTask:()=>O,clearSplitTab:()=>L,closeTab:()=>P,configureTab:()=>M,consumePendingPrompt:()=>T,ensureEngineTab:()=>A,migrateStoredTab:()=>h,openFilePreviewTab:()=>N,pruneMissingTasks:()=>D,resetLayout:()=>E,selectTask:()=>S,setActiveTab:()=>F,setPendingPrompt:()=>w,setSplitTab:()=>I,useTabsState:()=>R,withTaskTab:()=>m}),d=`kobe-web.tabs`,f={selectedTaskId:null,tabsByTask:{},activeByTask:{},splitByTask:{}};function p(){return{id:x(),kind:`empty`,title:l(`empty`,[])}}function m(e,t){let n=e.tabsByTask[t]??[],r=e.activeByTask[t],i=e.splitByTask[t],a=e;if(i&&(!n.some(e=>e.id===i)||i===r)){let{[t]:n,...r}=e.splitByTask;a={...e,splitByTask:r}}if(n.length>0)return r&&n.some(e=>e.id===r)?a:{...a,activeByTask:{...e.activeByTask,[t]:n[0].id}};let o=p();return{...a,tabsByTask:{...e.tabsByTask,[t]:[o]},activeByTask:{...e.activeByTask,[t]:o.id}}}function h(e){let t=e,n=typeof e?.kind==`string`?e.kind:void 0;if(n===`notes`)return p();let r=n===`chat`?`vendor`:n??`vendor`,i=r in s?r:`vendor`;return i===`file`&&typeof t.path!=`string`?p():{...t,kind:i}}function g(){try{let e=localStorage.getItem(d);if(e){let t=JSON.parse(e),n=Object.fromEntries(Object.entries(t.tabsByTask??{}).map(([e,t])=>[e,t.map(h)])),r={selectedTaskId:t.selectedTaskId??null,tabsByTask:n,activeByTask:t.activeByTask??{},splitByTask:t.splitByTask??{}};return r.selectedTaskId?m(r,r.selectedTaskId):r}}catch{}return f}var _=typeof localStorage>`u`?f:g(),v=new Set;function y(e){_=e;try{localStorage.setItem(d,JSON.stringify(_))}catch{}for(let e of v)e()}var b=0;function x(){try{return crypto.randomUUID()}catch{return b+=1,`tab-${Date.now().toString(36)}-${b}`}}function S(e){y(m({..._,selectedTaskId:e},e))}var C=new Map;function w(e,t){C.set(e,t)}function T(e){let t=C.get(e);return t===void 0?null:(C.delete(e),t)}function E(){for(let e of Object.values(_.tabsByTask))for(let t of e)c(t.kind)&&r(t.id);y({...f})}function D(e){let t=Object.keys(_.tabsByTask).filter(t=>!e.has(t)),n=_.selectedTaskId!==null&&!e.has(_.selectedTaskId);if(t.length===0&&!n)return;for(let e of t)for(let t of _.tabsByTask[e]??[])c(t.kind)&&r(t.id);let i={..._.tabsByTask},a={..._.activeByTask},o={..._.splitByTask};for(let e of t)delete i[e],delete a[e],delete o[e];y({selectedTaskId:n?null:_.selectedTaskId,tabsByTask:i,activeByTask:a,splitByTask:o})}function O(){y({..._,selectedTaskId:null})}function k(e){let t=_.tabsByTask[e]??[],n=x(),r={id:n,kind:`vendor`,title:l(`vendor`,t)};return y({..._,tabsByTask:{..._.tabsByTask,[e]:[...t,r]},activeByTask:{..._.activeByTask,[e]:n},splitByTask:_.splitByTask}),n}function A(e){let t=_.tabsByTask[e]??[],n=t.find(e=>e.kind===`vendor`);if(n)return n.id;let r=x(),i={id:r,kind:`vendor`,title:l(`vendor`,t)};return y({..._,tabsByTask:{..._.tabsByTask,[e]:[...t,i]}}),r}function j(e){let t=_.tabsByTask[e]??[],n=p();return y({..._,tabsByTask:{..._.tabsByTask,[e]:[...t,n]},activeByTask:{..._.activeByTask,[e]:n.id},splitByTask:_.splitByTask}),n.id}function M(e,t,n){let r=_.tabsByTask[e]??[],i=r.map(e=>e.id===t?n===`vendor`?{id:t,kind:n,title:l(`vendor`,r)}:n===`transcript`?{id:t,kind:n,title:l(`transcript`,r)}:{id:t,kind:n,title:l(`terminal`,r)}:e);y({..._,tabsByTask:{..._.tabsByTask,[e]:i},activeByTask:{..._.activeByTask,[e]:t},splitByTask:_.splitByTask})}function N(e,t){let n=_.tabsByTask[e]??[],r=n.find(e=>e.kind===`file`&&e.path===t);if(r)return F(e,r.id),r.id;let i=x(),a={id:i,kind:`file`,title:t.split(`/`).at(-1)??t,path:t};return y({..._,tabsByTask:{..._.tabsByTask,[e]:[...n,a]},activeByTask:{..._.activeByTask,[e]:i},splitByTask:_.splitByTask}),i}function P(e,t){let n=_.tabsByTask[e]??[],r=n.findIndex(e=>e.id===t),i=n.filter(e=>e.id!==t);i.length===0&&(i=[p()]);let a=_.activeByTask[e]===t,o={..._.activeByTask},s={..._.splitByTask};if(a){let t=Math.max(0,Math.min(r,i.length-1));o[e]=i[t].id}(s[e]===t||s[e]===o[e])&&delete s[e],y({..._,tabsByTask:{..._.tabsByTask,[e]:i},activeByTask:o,splitByTask:s})}function F(e,t){let n={..._.splitByTask},r={..._.activeByTask},i=r[e];n[e]===t&&i&&i!==t?n[e]=i:n[e]===t&&delete n[e],r[e]=t,y({..._,activeByTask:r,splitByTask:n})}function I(e,t){let n=_.tabsByTask[e]??[];if(!n.some(e=>e.id===t))return;let r=_.activeByTask[e],i={..._.activeByTask};if(r===t){let r=n.find(e=>e.id!==t);if(!r)return;i[e]=r.id}y({..._,activeByTask:i,splitByTask:{..._.splitByTask,[e]:t}})}function L(e){let{[e]:t,...n}=_.splitByTask;y({..._,splitByTask:n})}function R(){return(0,o.useSyncExternalStore)(e=>(v.add(e),()=>v.delete(e)),()=>_,()=>_)}export{R as _,P as a,A as c,E as d,S as f,u as g,I as h,L as i,N as l,w as m,k as n,M as o,F as p,O as r,T as s,j as t,D as u,c as v,a as y};
1
+ import{c as e,l as t,s as n,t as r}from"./terminal-B6OlmT6e.js";var i=n((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u<e.length;u++)a=e[u],s=l+j(a,u),c+=N(a,r,i,s,o);else if(u=m(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+j(a,u++),c+=N(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return N(M(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function P(e,t,n){if(e==null)return e;var r=[],i=0;return N(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function F(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var I=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)},L={map:P,forEach:function(e,t,n){P(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return P(e,function(){t++}),t},toArray:function(e){return P(e,function(e){return e})||[]},only:function(e){if(!O(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=L,e.Component=v,e.Fragment=r,e.Profiler=a,e.PureComponent=b,e.StrictMode=i,e.Suspense=l,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return w.H.useMemoCache(e)}},e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=g({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!T.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return E(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)T.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return E(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=O,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:F}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=function(e){var t=w.T,n={};w.T=n;try{var r=e(),i=w.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(C,I)}catch(e){I(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),w.T=t}},e.unstable_useCacheRefresh=function(){return w.H.useCacheRefresh()},e.use=function(e){return w.H.use(e)},e.useActionState=function(e,t,n){return w.H.useActionState(e,t,n)},e.useCallback=function(e,t){return w.H.useCallback(e,t)},e.useContext=function(e){return w.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return w.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return w.H.useEffect(e,t)},e.useEffectEvent=function(e){return w.H.useEffectEvent(e)},e.useId=function(){return w.H.useId()},e.useImperativeHandle=function(e,t,n){return w.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return w.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return w.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return w.H.useMemo(e,t)},e.useOptimistic=function(e,t){return w.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return w.H.useReducer(e,t,n)},e.useRef=function(e){return w.H.useRef(e)},e.useState=function(e){return w.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return w.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return w.H.useTransition()},e.version=`19.2.7`})),a=n(((e,t)=>{t.exports=i()})),o=t(a(),1),s={empty:{hasPty:!1,titleMode:`static`,label:`New tab`},vendor:{hasPty:!0,titleMode:`count`,label:`Vendor`},terminal:{hasPty:!0,titleMode:`count`,label:`Terminal`},transcript:{hasPty:!1,titleMode:`static`,label:`Chat`},file:{hasPty:!1,titleMode:`static`,label:`File`}};function c(e){return s[e].hasPty}function l(e,t){let n=s[e];if(n.titleMode===`count`){let r=t.filter(t=>t.kind===e).length+1;return`${n.label} ${r}`}return n.label}var u=e({addEmptyTab:()=>j,addTab:()=>k,clearSelectedTask:()=>O,clearSplitTab:()=>L,closeTab:()=>P,configureTab:()=>M,consumePendingPrompt:()=>T,ensureEngineTab:()=>A,migrateStoredTab:()=>h,openFilePreviewTab:()=>N,pruneMissingTasks:()=>D,resetLayout:()=>E,selectTask:()=>S,setActiveTab:()=>F,setPendingPrompt:()=>w,setSplitTab:()=>I,useTabsState:()=>R,withTaskTab:()=>m}),d=`kobe-web.tabs`,f={selectedTaskId:null,tabsByTask:{},activeByTask:{},splitByTask:{}};function p(){return{id:x(),kind:`empty`,title:l(`empty`,[])}}function m(e,t){let n=e.tabsByTask[t]??[],r=e.activeByTask[t],i=e.splitByTask[t],a=e;if(i&&(!n.some(e=>e.id===i)||i===r)){let{[t]:n,...r}=e.splitByTask;a={...e,splitByTask:r}}if(n.length>0)return r&&n.some(e=>e.id===r)?a:{...a,activeByTask:{...e.activeByTask,[t]:n[0].id}};let o=p();return{...a,tabsByTask:{...e.tabsByTask,[t]:[o]},activeByTask:{...e.activeByTask,[t]:o.id}}}function h(e){let t=e,n=typeof e?.kind==`string`?e.kind:void 0;if(n===`notes`)return p();let r=n===`chat`?`vendor`:n??`vendor`,i=r in s?r:`vendor`;return i===`file`&&typeof t.path!=`string`?p():{...t,kind:i}}function g(){try{let e=localStorage.getItem(d);if(e){let t=JSON.parse(e),n=Object.fromEntries(Object.entries(t.tabsByTask??{}).map(([e,t])=>[e,t.map(h)])),r={selectedTaskId:t.selectedTaskId??null,tabsByTask:n,activeByTask:t.activeByTask??{},splitByTask:t.splitByTask??{}};return r.selectedTaskId?m(r,r.selectedTaskId):r}}catch{}return f}var _=typeof localStorage>`u`?f:g(),v=new Set;function y(e){_=e;try{localStorage.setItem(d,JSON.stringify(_))}catch{}for(let e of v)e()}var b=0;function x(){try{return crypto.randomUUID()}catch{return b+=1,`tab-${Date.now().toString(36)}-${b}`}}function S(e){y(m({..._,selectedTaskId:e},e))}var C=new Map;function w(e,t){C.set(e,t)}function T(e){let t=C.get(e);return t===void 0?null:(C.delete(e),t)}function E(){for(let e of Object.values(_.tabsByTask))for(let t of e)c(t.kind)&&r(t.id);y({...f})}function D(e){let t=t=>t.kind===`vendor`&&!!t.taskId&&!e.has(t.taskId),n=Object.keys(_.tabsByTask).filter(t=>!e.has(t)),i=Object.entries(_.tabsByTask).filter(([n,r])=>e.has(n)&&r.some(t)),a=_.selectedTaskId!==null&&!e.has(_.selectedTaskId);if(n.length===0&&i.length===0&&!a)return;for(let e of n)for(let t of _.tabsByTask[e]??[])c(t.kind)&&r(t.id);let o={..._.tabsByTask},s={..._.activeByTask},l={..._.splitByTask};for(let e of n)delete o[e],delete s[e],delete l[e];for(let[e,n]of i){for(let e of n)t(e)&&r(e.id);o[e]=n.filter(e=>!t(e))}let u={selectedTaskId:a?null:_.selectedTaskId,tabsByTask:o,activeByTask:s,splitByTask:l};for(let[e]of i)u=m(u,e);y(u)}function O(){y({..._,selectedTaskId:null})}function k(e,t){let n=_.tabsByTask[e]??[],r=x(),i={id:r,kind:`vendor`,title:l(`vendor`,n),...t&&t!==e?{taskId:t}:{}};return y({..._,tabsByTask:{..._.tabsByTask,[e]:[...n,i]},activeByTask:{..._.activeByTask,[e]:r},splitByTask:_.splitByTask}),r}function A(e){let t=_.tabsByTask[e]??[],n=t.find(e=>e.kind===`vendor`&&!e.taskId);if(n)return n.id;let r=x(),i={id:r,kind:`vendor`,title:l(`vendor`,t)};return y({..._,tabsByTask:{..._.tabsByTask,[e]:[...t,i]}}),r}function j(e){let t=_.tabsByTask[e]??[],n=p();return y({..._,tabsByTask:{..._.tabsByTask,[e]:[...t,n]},activeByTask:{..._.activeByTask,[e]:n.id},splitByTask:_.splitByTask}),n.id}function M(e,t,n){let r=_.tabsByTask[e]??[],i=r.map(e=>e.id===t?n===`vendor`?{id:t,kind:n,title:l(`vendor`,r)}:n===`transcript`?{id:t,kind:n,title:l(`transcript`,r)}:{id:t,kind:n,title:l(`terminal`,r)}:e);y({..._,tabsByTask:{..._.tabsByTask,[e]:i},activeByTask:{..._.activeByTask,[e]:t},splitByTask:_.splitByTask})}function N(e,t){let n=_.tabsByTask[e]??[],r=n.find(e=>e.kind===`file`&&e.path===t);if(r)return F(e,r.id),r.id;let i=x(),a={id:i,kind:`file`,title:t.split(`/`).at(-1)??t,path:t};return y({..._,tabsByTask:{..._.tabsByTask,[e]:[...n,a]},activeByTask:{..._.activeByTask,[e]:i},splitByTask:_.splitByTask}),i}function P(e,t){let n=_.tabsByTask[e]??[],r=n.findIndex(e=>e.id===t),i=n.filter(e=>e.id!==t);i.length===0&&(i=[p()]);let a=_.activeByTask[e]===t,o={..._.activeByTask},s={..._.splitByTask};if(a){let t=Math.max(0,Math.min(r,i.length-1));o[e]=i[t].id}(s[e]===t||s[e]===o[e])&&delete s[e],y({..._,tabsByTask:{..._.tabsByTask,[e]:i},activeByTask:o,splitByTask:s})}function F(e,t){let n={..._.splitByTask},r={..._.activeByTask},i=r[e];n[e]===t&&i&&i!==t?n[e]=i:n[e]===t&&delete n[e],r[e]=t,y({..._,activeByTask:r,splitByTask:n})}function I(e,t){let n=_.tabsByTask[e]??[];if(!n.some(e=>e.id===t))return;let r=_.activeByTask[e],i={..._.activeByTask};if(r===t){let r=n.find(e=>e.id!==t);if(!r)return;i[e]=r.id}y({..._,activeByTask:i,splitByTask:{..._.splitByTask,[e]:t}})}function L(e){let{[e]:t,...n}=_.splitByTask;y({..._,splitByTask:n})}function R(){return(0,o.useSyncExternalStore)(e=>(v.add(e),()=>v.delete(e)),()=>_,()=>_)}export{R as _,P as a,A as c,E as d,S as f,u as g,I as h,L as i,N as l,w as m,k as n,M as o,F as p,O as r,T as s,j as t,D as u,c as v,a as y};
@@ -0,0 +1 @@
1
+ import{l as e}from"./terminal-B6OlmT6e.js";import{_ as t,f as n,y as r}from"./tabs-C6drmk5t.js";import{d as i}from"./createLucideIcon-B3ImGkvG.js";import{D as a,t as o}from"./index-L7l828Hv.js";import{AppShell as s}from"./AppShell-BuFVTjzQ.js";var c=e(r()),l=i();function u(){let{taskId:e}=o.useParams(),{selectedTaskId:r}=t();return(0,c.useEffect)(()=>{!e||e===r||(n(e),a(e))},[e,r]),(0,l.jsx)(s,{})}export{u as component};
@@ -1 +1 @@
1
- import{l as e}from"./terminal-B6OlmT6e.js";import{y as t}from"./tabs-B_hac99E.js";import{t as n}from"./external-store-DUMhHvtl.js";var r=e(t(),1),i=r.use,a=typeof window<`u`?r.useLayoutEffect:r.useEffect;function o(e){let t=r.useRef({value:e,prev:null}),n=t.current.value;return e!==n&&(t.current={value:e,prev:n}),t.current.prev}function s(e,t,n={},i={}){r.useEffect(()=>{if(!e.current||i.disabled||typeof IntersectionObserver!=`function`)return;let r=new IntersectionObserver(([e])=>{t(e)},n);return r.observe(e.current),()=>{r.disconnect()}},[t,n,i.disabled,e])}function c(e){let t=r.useRef(null);return r.useImperativeHandle(e,()=>t.current,[]),t}var l=r.createContext(null);function u(e){return r.useContext(l)}function d(e){let t=u();return r.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}var f=5e3,p=n([]),m=0;function h(e,t){m+=1;let n={id:m,kind:e,message:t};p.update(e=>[...e.slice(-3),n]),window.setTimeout(()=>g(n.id),f)}function g(e){let t=p.getSnapshot();t.some(t=>t.id===e)&&p.replace(t.filter(t=>t.id!==e))}function _(e,t){return`${e}: ${t instanceof Error?t.message:String(t)}`}function v(e,t){h(`error`,_(e,t))}function y(){return p.useSnapshot()}export{d as a,i as c,a as d,o as f,y as i,c as l,h as n,u as o,v as r,l as s,g as t,s as u};
1
+ import{l as e}from"./terminal-B6OlmT6e.js";import{y as t}from"./tabs-C6drmk5t.js";import{t as n}from"./external-store-BMGmoHuF.js";var r=e(t(),1),i=r.use,a=typeof window<`u`?r.useLayoutEffect:r.useEffect;function o(e){let t=r.useRef({value:e,prev:null}),n=t.current.value;return e!==n&&(t.current={value:e,prev:n}),t.current.prev}function s(e,t,n={},i={}){r.useEffect(()=>{if(!e.current||i.disabled||typeof IntersectionObserver!=`function`)return;let r=new IntersectionObserver(([e])=>{t(e)},n);return r.observe(e.current),()=>{r.disconnect()}},[t,n,i.disabled,e])}function c(e){let t=r.useRef(null);return r.useImperativeHandle(e,()=>t.current,[]),t}var l=r.createContext(null);function u(e){return r.useContext(l)}function d(e){let t=u();return r.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}var f=5e3,p=n([]),m=0;function h(e,t){m+=1;let n={id:m,kind:e,message:t};p.update(e=>[...e.slice(-3),n]),window.setTimeout(()=>g(n.id),f)}function g(e){let t=p.getSnapshot();t.some(t=>t.id===e)&&p.replace(t.filter(t=>t.id!==e))}function _(e,t){return`${e}: ${t instanceof Error?t.message:String(t)}`}function v(e,t){h(`error`,_(e,t))}function y(){return p.useSnapshot()}export{d as a,i as c,a as d,o as f,y as i,c as l,h as n,u as o,v as r,l as s,g as t,s as u};
@@ -1 +1 @@
1
- import{a as e,l as t,o as n}from"./terminal-B6OlmT6e.js";import{y as r}from"./tabs-B_hac99E.js";import{a as i,r as a}from"./toast-D798wIYZ.js";import{d as o,t as s}from"./createLucideIcon-Dn8f0BBU.js";import{n as c}from"./store-CbgoTSs1.js";import{t as l}from"./arrow-left-BXrVItPe.js";import{n as u}from"./time-kviT26Tm.js";import{n as d,t as f}from"./ConfirmDialog-5OpgDkmx.js";var p=s(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),m=t(r(),1),h=class extends Error{};async function g(){let e=await n.get(`/api/worktrees`,{label:`load worktrees`});return Array.isArray(e.projects)?e.projects:[]}async function _(t,r){try{await n.delete(`/api/worktrees`,{path:t,force:r},{label:`delete worktree`})}catch(t){throw t instanceof e&&/refusing to remove dirty worktree/.test(t.detail)?new h(t.detail):t}}var v=o();function y(e){return e===!0?(0,v.jsx)(`span`,{className:`shrink-0 text-[10px] text-kobe-green`,children:`on remote`}):e===!1?(0,v.jsx)(`span`,{className:`shrink-0 text-[10px] text-kobe-yellow`,children:`not pushed`}):(0,v.jsx)(`span`,{className:`shrink-0 text-[10px] text-subtle`,children:`remote unknown`})}function b({row:e,linkedTaskTitle:t,onDelete:n}){return(0,v.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-line-subtle px-3 py-2 last:border-b-0`,children:[(0,v.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`truncate font-mono text-[12px] text-fg`,children:e.branch||`(detached)`}),e.kobeManaged&&(0,v.jsx)(`span`,{className:`shrink-0 text-[10px] text-subtle`,children:`kobe`}),e.dirty&&(0,v.jsx)(`span`,{className:`shrink-0 text-[10px] text-kobe-yellow`,children:`dirty`}),y(e.branchOnRemote),t&&(0,v.jsxs)(`span`,{className:`shrink-0 truncate text-[10px] text-subtle`,children:[`task: `,t]})]}),(0,v.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-[10px] text-subtle`,children:[(0,v.jsx)(`span`,{className:`truncate font-mono`,children:e.path}),e.createdAtMs>0&&(0,v.jsxs)(`span`,{className:`ml-auto shrink-0`,children:[`created `,u(e.createdAtMs)]})]})]}),(0,v.jsx)(`button`,{type:`button`,onClick:n,className:`shrink-0 border border-line bg-bg px-2 py-1 text-[11px] text-muted transition-colors hover:border-kobe-red hover:text-kobe-red`,children:`Delete`})]})}function x(){let e=i(),{tasks:t}=c(),[n,r]=(0,m.useState)(null),[o,s]=(0,m.useState)(!1),[u,y]=(0,m.useState)(null),[x,S]=(0,m.useState)(null),[C,w]=(0,m.useState)(!1),T=(0,m.useMemo)(()=>{let e=new Map;for(let n of t)n.worktreePath&&e.set(n.worktreePath,n.title||n.branch);return e},[t]),E=()=>{s(!0),g().then(r).catch(e=>a(`load worktrees`,e)).finally(()=>s(!1))};(0,m.useEffect)(E,[]);let D=e=>{r(t=>t?.map(t=>({...t,worktrees:t.worktrees.filter(t=>t.path!==e)}))??t)};return(0,v.jsxs)(`div`,{className:`flex h-screen flex-col overflow-hidden bg-bg text-fg`,children:[(0,v.jsxs)(`header`,{"data-kobe-topbar":!0,className:`flex h-10 shrink-0 items-center gap-3 border-b border-line bg-surface px-3`,children:[(0,v.jsx)(d,{}),(0,v.jsxs)(`button`,{type:`button`,onClick:()=>e({to:`/`}),className:`flex items-center gap-1.5 text-muted transition-colors hover:text-fg`,title:`Back to workspace`,children:[(0,v.jsx)(l,{size:15,strokeWidth:1.8}),(0,v.jsx)(`span`,{className:`text-[12px]`,children:`Workspace`})]}),(0,v.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-fg`,children:`Worktrees`}),(0,v.jsx)(`button`,{type:`button`,onClick:E,disabled:o,className:`ml-auto flex items-center gap-1.5 text-muted transition-colors hover:text-fg disabled:opacity-40`,title:`Refresh`,children:(0,v.jsx)(p,{size:13,strokeWidth:1.8,className:o?`animate-spin`:``})})]}),(0,v.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:n===null?(0,v.jsx)(`p`,{className:`px-3 py-6 text-center text-[12px] text-subtle`,children:`Loading worktrees…`}):n.length===0?(0,v.jsx)(`p`,{className:`px-3 py-6 text-center text-[12px] text-subtle`,children:`No local projects known to kobe yet.`}):n.map(e=>(0,v.jsxs)(`div`,{className:`border-b border-line`,children:[(0,v.jsx)(`div`,{className:`border-b border-line-subtle bg-surface px-3 py-1.5 font-mono text-[11px] text-subtle`,children:e.repo}),e.worktrees.length===0?(0,v.jsx)(`p`,{className:`px-3 py-3 text-[12px] text-subtle`,children:`No worktrees.`}):e.worktrees.map(e=>(0,v.jsx)(b,{row:e,linkedTaskTitle:T.get(e.path)??null,onDelete:()=>y(e)},e.path))]},e.repo))}),u&&(0,v.jsx)(f,{title:`Delete worktree`,body:`Delete the worktree for "${u.branch||u.path}"? This removes the working directory; the branch itself is kept.`,confirmLabel:`Delete`,danger:!0,busy:C,onConfirm:()=>{if(!u)return;let e=u;w(!0),_(e.path,!1).then(()=>{D(e.path),y(null)}).catch(t=>{y(null),t instanceof h?S(e):a(`delete worktree`,t)}).finally(()=>w(!1))},onCancel:()=>y(null)}),x&&(0,v.jsx)(f,{title:`Force delete worktree`,body:`"${x.branch||x.path}" has uncommitted or untracked changes that will be PERMANENTLY LOST. Force delete anyway?`,confirmLabel:`Force delete`,danger:!0,busy:C,onConfirm:()=>{if(!x)return;let e=x;w(!0),_(e.path,!0).then(()=>{D(e.path),S(null)}).catch(e=>a(`force delete worktree`,e)).finally(()=>w(!1))},onCancel:()=>S(null)})]})}var S=x;export{S as component};
1
+ import{a as e,l as t,o as n}from"./terminal-B6OlmT6e.js";import{y as r}from"./tabs-C6drmk5t.js";import{a as i,r as a}from"./toast-CvhQ8RqX.js";import{d as o,t as s}from"./createLucideIcon-B3ImGkvG.js";import{n as c}from"./store-BvkKuplZ.js";import{t as l}from"./arrow-left-CTu620DY.js";import{n as u}from"./time-kviT26Tm.js";import{n as d,t as f}from"./ConfirmDialog-Bw_DhSYa.js";var p=s(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),m=t(r(),1),h=class extends Error{};async function g(){let e=await n.get(`/api/worktrees`,{label:`load worktrees`});return Array.isArray(e.projects)?e.projects:[]}async function _(t,r){try{await n.delete(`/api/worktrees`,{path:t,force:r},{label:`delete worktree`})}catch(t){throw t instanceof e&&/refusing to remove dirty worktree/.test(t.detail)?new h(t.detail):t}}var v=o();function y(e){return e===!0?(0,v.jsx)(`span`,{className:`shrink-0 text-[10px] text-kobe-green`,children:`on remote`}):e===!1?(0,v.jsx)(`span`,{className:`shrink-0 text-[10px] text-kobe-yellow`,children:`not pushed`}):(0,v.jsx)(`span`,{className:`shrink-0 text-[10px] text-subtle`,children:`remote unknown`})}function b({row:e,linkedTaskTitle:t,onDelete:n}){return(0,v.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-line-subtle px-3 py-2 last:border-b-0`,children:[(0,v.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`truncate font-mono text-[12px] text-fg`,children:e.branch||`(detached)`}),e.kobeManaged&&(0,v.jsx)(`span`,{className:`shrink-0 text-[10px] text-subtle`,children:`kobe`}),e.dirty&&(0,v.jsx)(`span`,{className:`shrink-0 text-[10px] text-kobe-yellow`,children:`dirty`}),y(e.branchOnRemote),t&&(0,v.jsxs)(`span`,{className:`shrink-0 truncate text-[10px] text-subtle`,children:[`task: `,t]})]}),(0,v.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-[10px] text-subtle`,children:[(0,v.jsx)(`span`,{className:`truncate font-mono`,children:e.path}),e.createdAtMs>0&&(0,v.jsxs)(`span`,{className:`ml-auto shrink-0`,children:[`created `,u(e.createdAtMs)]})]})]}),(0,v.jsx)(`button`,{type:`button`,onClick:n,className:`shrink-0 border border-line bg-bg px-2 py-1 text-[11px] text-muted transition-colors hover:border-kobe-red hover:text-kobe-red`,children:`Delete`})]})}function x(){let e=i(),{tasks:t}=c(),[n,r]=(0,m.useState)(null),[o,s]=(0,m.useState)(!1),[u,y]=(0,m.useState)(null),[x,S]=(0,m.useState)(null),[C,w]=(0,m.useState)(!1),T=(0,m.useMemo)(()=>{let e=new Map;for(let n of t)n.worktreePath&&e.set(n.worktreePath,n.title||n.branch);return e},[t]),E=()=>{s(!0),g().then(r).catch(e=>a(`load worktrees`,e)).finally(()=>s(!1))};(0,m.useEffect)(E,[]);let D=e=>{r(t=>t?.map(t=>({...t,worktrees:t.worktrees.filter(t=>t.path!==e)}))??t)};return(0,v.jsxs)(`div`,{className:`flex h-screen flex-col overflow-hidden bg-bg text-fg`,children:[(0,v.jsxs)(`header`,{"data-kobe-topbar":!0,className:`flex h-10 shrink-0 items-center gap-3 border-b border-line bg-surface px-3`,children:[(0,v.jsx)(d,{}),(0,v.jsxs)(`button`,{type:`button`,onClick:()=>e({to:`/`}),className:`flex items-center gap-1.5 text-muted transition-colors hover:text-fg`,title:`Back to workspace`,children:[(0,v.jsx)(l,{size:15,strokeWidth:1.8}),(0,v.jsx)(`span`,{className:`text-[12px]`,children:`Workspace`})]}),(0,v.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-fg`,children:`Worktrees`}),(0,v.jsx)(`button`,{type:`button`,onClick:E,disabled:o,className:`ml-auto flex items-center gap-1.5 text-muted transition-colors hover:text-fg disabled:opacity-40`,title:`Refresh`,children:(0,v.jsx)(p,{size:13,strokeWidth:1.8,className:o?`animate-spin`:``})})]}),(0,v.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:n===null?(0,v.jsx)(`p`,{className:`px-3 py-6 text-center text-[12px] text-subtle`,children:`Loading worktrees…`}):n.length===0?(0,v.jsx)(`p`,{className:`px-3 py-6 text-center text-[12px] text-subtle`,children:`No local projects known to kobe yet.`}):n.map(e=>(0,v.jsxs)(`div`,{className:`border-b border-line`,children:[(0,v.jsx)(`div`,{className:`border-b border-line-subtle bg-surface px-3 py-1.5 font-mono text-[11px] text-subtle`,children:e.repo}),e.worktrees.length===0?(0,v.jsx)(`p`,{className:`px-3 py-3 text-[12px] text-subtle`,children:`No worktrees.`}):e.worktrees.map(e=>(0,v.jsx)(b,{row:e,linkedTaskTitle:T.get(e.path)??null,onDelete:()=>y(e)},e.path))]},e.repo))}),u&&(0,v.jsx)(f,{title:`Delete worktree`,body:`Delete the worktree for "${u.branch||u.path}"? This removes the working directory; the branch itself is kept.`,confirmLabel:`Delete`,danger:!0,busy:C,onConfirm:()=>{if(!u)return;let e=u;w(!0),_(e.path,!1).then(()=>{D(e.path),y(null)}).catch(t=>{y(null),t instanceof h?S(e):a(`delete worktree`,t)}).finally(()=>w(!1))},onCancel:()=>y(null)}),x&&(0,v.jsx)(f,{title:`Force delete worktree`,body:`"${x.branch||x.path}" has uncommitted or untracked changes that will be PERMANENTLY LOST. Force delete anyway?`,confirmLabel:`Force delete`,danger:!0,busy:C,onConfirm:()=>{if(!x)return;let e=x;w(!0),_(e.path,!0).then(()=>{D(e.path),S(null)}).catch(e=>a(`force delete worktree`,e)).finally(()=>w(!1))},onCancel:()=>S(null)})]})}var S=x;export{S as component};
@@ -5,14 +5,14 @@
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>kobe-web</title>
8
- <script type="module" crossorigin src="/assets/index-CX2Ouner.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-L7l828Hv.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/terminal-B6OlmT6e.js">
10
- <link rel="modulepreload" crossorigin href="/assets/tabs-B_hac99E.js">
11
- <link rel="modulepreload" crossorigin href="/assets/external-store-DUMhHvtl.js">
12
- <link rel="modulepreload" crossorigin href="/assets/toast-D798wIYZ.js">
13
- <link rel="modulepreload" crossorigin href="/assets/createLucideIcon-Dn8f0BBU.js">
14
- <link rel="modulepreload" crossorigin href="/assets/store-CbgoTSs1.js">
15
- <link rel="stylesheet" crossorigin href="/assets/index-DmtC0Wbe.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/tabs-C6drmk5t.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/external-store-BMGmoHuF.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/toast-CvhQ8RqX.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/createLucideIcon-B3ImGkvG.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/store-BvkKuplZ.js">
15
+ <link rel="stylesheet" crossorigin href="/assets/index-DVMmUb6_.css">
16
16
  </head>
17
17
  <body>
18
18
  <div id="app"></div>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@sma1lboy/kobe",
4
- "version": "0.8.0",
4
+ "version": "0.8.2",
5
5
  "description": "TUI orchestrator for Claude Code (codename)",
6
6
  "type": "module",
7
7
  "packageManager": "bun@1.3.13",
@@ -58,6 +58,8 @@
58
58
  "@ansi-tools/parser": "^1.0.15",
59
59
  "@opentui/core": "0.4.3",
60
60
  "@opentui/react": "0.4.3",
61
+ "@xterm/addon-serialize": "^0.14.0",
62
+ "@xterm/addon-unicode11": "^0.9.0",
61
63
  "@xterm/headless": "^6.0.0",
62
64
  "node-pty": "^1.1.0",
63
65
  "react": "^19.2.0",
@@ -1 +0,0 @@
1
- import{l as e}from"./terminal-B6OlmT6e.js";import{f as t,y as n}from"./tabs-B_hac99E.js";import{a as r,n as i,r as a}from"./toast-D798wIYZ.js";import{d as o}from"./createLucideIcon-Dn8f0BBU.js";import{n as s,t as c}from"./ViewToggle-CIZAN_0S.js";import{n as l}from"./store-CbgoTSs1.js";import{t as u}from"./external-store-DUMhHvtl.js";import{t as d}from"./external-link-CGQEaSmM.js";import{a as f,i as p,n as m,r as h,t as g}from"./lazy-issue-panels-CE0UA8nx.js";import{D as _,g as v,v as ee,y}from"./index-CX2Ouner.js";import{n as b,t as x}from"./ConfirmDialog-5OpgDkmx.js";import{a as S,d as C,f as w,g as T,h as E,m as D,p as te,s as ne,u as re}from"./issues-BBbxPwjI.js";var O=e(n(),1),k={query:``,repo:null};function A(e){j.update(t=>({...t,...e}))}var j=u(k);function M(){return j.useSnapshot()}function N(e){e!==j.getSnapshot().query&&A({query:e})}function P(e){e!==j.getSnapshot().repo&&A({repo:e})}function F(e){let{issueRepos:t,issueData:n,refreshIssues:r}=e,[i,o]=(0,O.useState)(!1),[s,c]=(0,O.useState)(null),[l,u]=(0,O.useState)(new Map);return(0,O.useEffect)(()=>{u(e=>{if(e.size===0)return e;let r=new Map(e),i=!1;for(let e of t){let t=n[e];if(!(!t||!t.exists))for(let n of t.issues)n.taskId&&r.delete(`${e}:${n.id}`)&&(i=!0)}return i?r:e})},[t,n]),{issueBusy:i,quickStartingId:s,pendingLinks:l,saveIssue:async(e,t,n)=>{o(!0);try{return await D(e,t,n),r([e]),!0}catch(e){return a(`update issue`,e),!1}finally{o(!1)}},deleteIssueConfirmed:async(e,t)=>{o(!0);try{return await S(e,t.id),r([e]),!0}catch(e){return a(`delete issue`,e),!1}finally{o(!1)}},quickStart:async(e,t,n,r)=>{if(s===null){c(t.id);try{let{taskId:i}=await w(e,t,n,r);return u(n=>{let r=new Map(n);return r.set(`${e}:${t.id}`,{repo:e,issueId:t.id,taskId:i}),r}),i}catch(e){a(`quick start issue`,e);return}finally{c(null)}}}}}var I=o();function L({repo:e,column:t,onNewIssue:n,onPeekIssue:r,onOpenTask:i,onDeleteIssue:a}){return(0,I.jsxs)(`section`,{"data-column":`${e}:${t.key}`,className:`flex h-full shrink-0 flex-col border border-transparent ${t.key===`backlog`?`w-96`:`w-72`}`,children:[(0,I.jsxs)(`div`,{className:`mb-2 flex items-baseline gap-2`,children:[(0,I.jsx)(`h2`,{className:`text-[11px] font-bold uppercase tracking-[0.12em] ${t.accent}`,children:t.title}),(0,I.jsx)(`span`,{className:`font-mono text-[10px] text-subtle`,children:t.cards.length+t.hiddenCount}),n&&(0,I.jsxs)(`button`,{type:`button`,onClick:n,className:`ml-auto flex items-center gap-0.5 text-[10px] text-subtle transition-colors hover:text-fg`,title:`New story in this project`,children:[(0,I.jsx)(y,{size:11,strokeWidth:2}),(0,I.jsx)(`span`,{children:`New story`})]})]}),(0,I.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto pb-2`,children:[t.cards.length===0?(0,I.jsx)(`div`,{className:`border border-dashed border-line-subtle p-3 text-center text-[11px] text-subtle`,children:`none`}):t.cards.map(e=>{let{issue:t}=e,n=T(t)?t.taskId:void 0;return(0,I.jsxs)(`div`,{className:`group/wrap relative`,children:[(0,I.jsx)(p,{issue:t,onOpen:()=>r(t),onDelete:()=>a(t)}),n&&(0,I.jsxs)(`button`,{type:`button`,onClick:()=>i(n),"aria-label":`Open task for issue #${t.id}`,title:`Started — open task`,className:`absolute bottom-2 right-2 flex items-center gap-1 border border-line bg-surface px-1.5 py-0.5 text-[10px] text-subtle opacity-0 transition-opacity hover:border-primary hover:text-fg focus-visible:opacity-100 group-hover/wrap:opacity-100`,children:[(0,I.jsx)(d,{size:10,strokeWidth:1.8}),(0,I.jsx)(`span`,{children:`open task`})]})]},`issue:${t.id}`)}),t.hiddenCount>0&&(0,I.jsxs)(`div`,{className:`p-2 text-center text-[10px] text-subtle`,children:[`+`,t.hiddenCount,` more — finish stories to thin this column`]})]})]})}function R({board:e,onNewIssue:t,onPeekIssue:n,onOpenTask:r,onDeleteIssue:i}){return(0,I.jsx)(`div`,{className:`flex h-full min-w-max gap-4`,children:e.columns.map(a=>(0,I.jsx)(L,{repo:e.repo,column:a,onNewIssue:a.key===`backlog`?()=>t(e.repo):void 0,onPeekIssue:n,onOpenTask:r,onDeleteIssue:t=>i(e.repo,t)},a.key))})}function z(){let{tasks:e,hydrated:n,daemonConnected:o}=l(),{query:u,repo:d}=M(),p=r(),S=(0,O.useRef)(null),[w,T]=(0,O.useState)(null),[D,k]=(0,O.useState)(null),[A,j]=(0,O.useState)(null),[L,z]=(0,O.useState)([]);(0,O.useEffect)(()=>{let e=!1;return ne().then(t=>{e||z(t)}).catch(e=>a(`load projects`,e)),()=>{e=!0}},[]);let B=(0,O.useMemo)(()=>re(e,L),[e,L]),V=(0,O.useMemo)(()=>B.map(e=>e.repo),[B]),H=(0,O.useMemo)(()=>te(B,d),[B,d]),{data:U,pending:W,refresh:G}=f(V),{issueBusy:K,quickStartingId:q,pendingLinks:J,saveIssue:ie,deleteIssueConfirmed:ae,quickStart:oe}=F({issueRepos:V,issueData:U,refreshIssues:G}),{allIssues:Y,repoChips:se,projectBoards:X,shownCount:Z,hasAnyCard:Q}=(0,O.useMemo)(()=>E({issueData:U,issueRepos:V,pendingLinks:J,query:u,repoFilter:H}),[U,V,J,u,H]);(0,O.useEffect)(()=>{w&&(Y.some(e=>e.repo===w.repo&&e.issue.id===w.id)||T(null))},[Y,w]),(0,O.useEffect)(()=>{let e=e=>{if(w||D||A||e.metaKey||e.ctrlKey||e.altKey)return;let t=e.target,n=!!t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.tagName===`SELECT`||t.isContentEditable);e.key===`/`&&!n?(e.preventDefault(),S.current?.focus()):e.key===`Escape`&&t===S.current&&u&&(e.preventDefault(),N(``))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[u,w,D,A]),(0,O.useEffect)(()=>{d!==H&&P(H)},[H,d]);let ce=!!u,$=e=>{t(e),_(e),p({to:`/task/$taskId`,params:{taskId:e}})};return(0,I.jsxs)(`div`,{className:`flex h-screen flex-col overflow-hidden bg-bg text-fg`,children:[(0,I.jsxs)(`header`,{"data-kobe-topbar":!0,className:`flex h-10 shrink-0 items-center gap-3 border-b border-line bg-surface px-3`,children:[(0,I.jsx)(b,{}),(0,I.jsx)(`span`,{className:`font-mono text-[13px] font-bold text-primary`,children:`[kobe]`}),(0,I.jsx)(c,{}),(0,I.jsxs)(`label`,{className:`flex h-7 items-center gap-1.5 border border-line bg-bg px-2 text-muted focus-within:border-line-active`,children:[(0,I.jsx)(ee,{size:13,strokeWidth:1.8,className:`shrink-0 text-subtle`}),(0,I.jsx)(`input`,{ref:S,value:u,onChange:e=>N(e.target.value),placeholder:`Filter stories ( / )`,className:`w-44 bg-transparent text-[12px] text-fg placeholder:text-subtle focus:outline-none`}),u&&(0,I.jsx)(`button`,{type:`button`,onClick:()=>N(``),className:`shrink-0 text-subtle hover:text-fg`,"aria-label":`clear filter`,title:`Clear filter`,children:(0,I.jsx)(v,{size:13,strokeWidth:2})})]}),B.length>0&&(0,I.jsxs)(`label`,{className:`flex h-7 min-w-0 max-w-[24rem] items-center gap-1.5 border border-line bg-bg px-2 text-muted focus-within:border-line-active`,children:[(0,I.jsx)(`span`,{className:`shrink-0 text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Project`}),(0,I.jsx)(`select`,{value:H??``,onChange:e=>P(e.target.value),title:H??`Select project`,className:`min-w-0 flex-1 bg-transparent font-mono text-[11px] text-fg focus:outline-none`,children:B.map(e=>{let t=se.find(t=>t.repo===e.repo)?.count??0;return(0,I.jsxs)(`option`,{value:e.repo,title:e.repo,className:`bg-surface text-fg`,children:[e.label,` · `,t,` · `,e.repo]},e.repo)})})]}),(0,I.jsx)(`div`,{className:`ml-auto flex items-center gap-3 font-mono text-[11px] text-subtle`,children:(0,I.jsxs)(`span`,{children:[Z,` stor`,Z===1?`y`:`ies`]})})]}),(0,I.jsx)(s,{}),(0,I.jsx)(`div`,{className:`min-h-0 flex-1 overflow-x-auto overflow-y-hidden p-4`,children:!n||W&&!Q?(0,I.jsx)(`p`,{className:`text-[12px] text-subtle`,children:`Loading…`}):Z===0&&ce&&Q?(0,I.jsxs)(`div`,{className:`text-[12px] leading-relaxed text-subtle`,children:[(0,I.jsx)(`p`,{children:`No stories match.`}),(0,I.jsx)(`button`,{type:`button`,onClick:()=>{N(``)},className:`mt-3 border border-line bg-surface px-2 py-1 text-[11px] text-muted hover:border-primary hover:text-fg`,children:`Clear filters`})]}):Z===0&&!o?(0,I.jsx)(`p`,{className:`text-[12px] text-subtle`,children:`Can't reach the daemon — issue list may be incomplete.`}):X[0]?(0,I.jsx)(R,{board:X[0],onNewIssue:k,onPeekIssue:e=>T({repo:X[0].repo,id:e.id}),onOpenTask:$,onDeleteIssue:(e,t)=>j({repo:e,issue:t})}):(0,I.jsxs)(`div`,{className:`text-[12px] leading-relaxed text-subtle`,children:[(0,I.jsx)(`p`,{children:`No projects yet. Create a task from the workspace to track stories against its repo.`}),(0,I.jsx)(`div`,{className:`mt-3 flex items-center gap-2`,children:(0,I.jsx)(`button`,{type:`button`,onClick:()=>p({to:`/`}),className:`border border-line bg-surface px-2 py-1 text-[11px] text-muted hover:border-primary hover:text-fg`,children:`Back to workspace`})})]})}),(()=>{let e=H??X[0]?.repo??V[0];return e?(0,I.jsx)(`button`,{type:`button`,onClick:()=>k(e),title:`New story`,"aria-label":`New story`,className:`fixed bottom-6 right-6 z-20 flex h-12 w-12 items-center justify-center rounded-full border border-primary bg-primary text-bg shadow-lg transition-transform hover:scale-105`,children:(0,I.jsx)(y,{size:22,strokeWidth:2.2})}):null})(),D&&(0,I.jsx)(g,{children:(0,I.jsx)(m,{repoRoot:D,open:!0,onClose:()=>k(null),onCreated:(e,t)=>{D&&G([D]),i(`success`,t?`Story #${e.id} created — starting its session`:`Story #${e.id} created`)}})}),(()=>{if(!w)return null;let e=Y.find(e=>e.repo===w.repo&&e.issue.id===w.id);return e?(0,I.jsx)(g,{children:(0,I.jsx)(h,{issue:e.issue,repoRoot:e.repo,busy:K,starting:q===e.issue.id,onClose:()=>T(null),onSave:t=>ie(e.repo,e.issue.id,t),onStart:async({vendor:t,effort:n,watch:r})=>{let i=await oe(e.repo,e.issue,t,n);r&&i?(T(null),$(i)):T(null)},onOpenSession:e.issue.taskId?()=>{let t=e.issue.taskId;T(null),t&&$(t)}:void 0,onPromptMerge:e.issue.taskId?()=>{let t=e.issue.taskId;t&&C(t,e.issue).then(()=>i(`success`,`Prompt inserted for story #${e.issue.id}`)).catch(e=>a(`prompt issue merge`,e))}:void 0},`${e.repo}:${e.issue.id}`)}):null})(),A&&(0,I.jsx)(x,{title:`Delete issue`,body:`Delete issue #${A.issue.id}: "${A.issue.title}"? This removes it from the daemon issue tracker only; it does not delete any task, branch, worktree, or engine session.`,confirmLabel:`Delete`,danger:!0,busy:K,onConfirm:()=>void ae(A.repo,A.issue).then(e=>{e&&(j(null),w?.repo===A.repo&&w.id===A.issue.id&&T(null))}),onCancel:()=>j(null)})]})}export{z as Board};
@@ -1 +0,0 @@
1
- .xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}