@gobing-ai/spur 0.4.24 → 0.4.26

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 (151) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/config.example.yaml +7 -0
  3. package/package.json +1 -1
  4. package/plugins/sp/README.md +52 -0
  5. package/plugins/sp/agents/expert-spur.md +1 -0
  6. package/plugins/sp/agents/super-coder.md +1 -0
  7. package/plugins/sp/agents/super-planner.md +1 -0
  8. package/plugins/sp/agents/super-reviewer.md +1 -0
  9. package/plugins/sp/commands/dev-arch.md +1 -0
  10. package/plugins/sp/commands/dev-brainstorm.md +1 -0
  11. package/plugins/sp/commands/dev-changelog.md +1 -0
  12. package/plugins/sp/commands/dev-daily.md +1 -0
  13. package/plugins/sp/commands/dev-debug.md +1 -0
  14. package/plugins/sp/commands/dev-dogfood.md +1 -0
  15. package/plugins/sp/commands/dev-feature-change.md +1 -0
  16. package/plugins/sp/commands/dev-find-conflict.md +1 -0
  17. package/plugins/sp/commands/dev-find-issue.md +1 -0
  18. package/plugins/sp/commands/dev-find-next.md +1 -0
  19. package/plugins/sp/commands/dev-find-way.md +1 -0
  20. package/plugins/sp/commands/dev-fixall.md +1 -0
  21. package/plugins/sp/commands/dev-fixgha.md +1 -0
  22. package/plugins/sp/commands/dev-gitmsg.md +1 -0
  23. package/plugins/sp/commands/dev-gtd.md +1 -0
  24. package/plugins/sp/commands/dev-handover.md +1 -0
  25. package/plugins/sp/commands/dev-idea.md +1 -0
  26. package/plugins/sp/commands/dev-job-dump.md +1 -0
  27. package/plugins/sp/commands/dev-job-resume.md +1 -0
  28. package/plugins/sp/commands/dev-next.md +1 -0
  29. package/plugins/sp/commands/dev-plan.md +1 -0
  30. package/plugins/sp/commands/dev-pr-review.md +1 -0
  31. package/plugins/sp/commands/dev-refactor.md +1 -0
  32. package/plugins/sp/commands/dev-refine.md +1 -0
  33. package/plugins/sp/commands/dev-refineall.md +1 -0
  34. package/plugins/sp/commands/dev-refresh.md +1 -0
  35. package/plugins/sp/commands/dev-reverse.md +1 -0
  36. package/plugins/sp/commands/dev-review-session.md +1 -0
  37. package/plugins/sp/commands/dev-review.md +1 -0
  38. package/plugins/sp/commands/dev-run.md +1 -0
  39. package/plugins/sp/commands/dev-runall.md +1 -0
  40. package/plugins/sp/commands/dev-simplify.md +1 -0
  41. package/plugins/sp/commands/dev-unit.md +1 -0
  42. package/plugins/sp/commands/dev-verify.md +1 -0
  43. package/plugins/sp/commands/dev-verifyall.md +1 -0
  44. package/plugins/sp/commands/dev-wrap.md +1 -0
  45. package/plugins/sp/commands/dev-wrapall.md +1 -0
  46. package/plugins/sp/commands/rule-add.md +1 -0
  47. package/plugins/sp/commands/rule-refine.md +1 -0
  48. package/plugins/sp/commands/rule-scan.md +1 -0
  49. package/plugins/sp/commands/spur-init.md +1 -0
  50. package/plugins/sp/commands/workflow-add.md +1 -0
  51. package/plugins/sp/commands/workflow-refine.md +1 -0
  52. package/plugins/sp/lib/destructive-policy.ts +521 -0
  53. package/plugins/sp/plugin.json +1 -1
  54. package/plugins/sp/scripts/hooks/careful-guard.ts +5 -0
  55. package/plugins/sp/skills/brainstorm/SKILL.md +1 -0
  56. package/plugins/sp/skills/branch-workflow/SKILL.md +1 -0
  57. package/plugins/sp/skills/code-implementation/SKILL.md +1 -0
  58. package/plugins/sp/skills/code-improvement/SKILL.md +1 -0
  59. package/plugins/sp/skills/code-refactoring/SKILL.md +1 -0
  60. package/plugins/sp/skills/code-review/SKILL.md +1 -0
  61. package/plugins/sp/skills/code-simplification/SKILL.md +1 -0
  62. package/plugins/sp/skills/code-testing/SKILL.md +1 -0
  63. package/plugins/sp/skills/code-verification/SKILL.md +1 -0
  64. package/plugins/sp/skills/conflict-finding/SKILL.md +1 -0
  65. package/plugins/sp/skills/daily-summary/SKILL.md +1 -0
  66. package/plugins/sp/skills/doc-evolve/SKILL.md +1 -0
  67. package/plugins/sp/skills/dogfood-testing/SKILL.md +1 -0
  68. package/plugins/sp/skills/doubt-driven-development/SKILL.md +1 -0
  69. package/plugins/sp/skills/fleet-join/SKILL.md +1 -0
  70. package/plugins/sp/skills/functional-review/SKILL.md +1 -0
  71. package/plugins/sp/skills/history-anatomy/SKILL.md +1 -0
  72. package/plugins/sp/skills/indexed-context/SKILL.md +1 -0
  73. package/plugins/sp/skills/issue-finding/SKILL.md +1 -0
  74. package/plugins/sp/skills/next-feature/SKILL.md +1 -0
  75. package/plugins/sp/skills/next-router/SKILL.md +1 -0
  76. package/plugins/sp/skills/parallel-execution/SKILL.md +1 -0
  77. package/plugins/sp/skills/pr-reviewing/SKILL.md +1 -0
  78. package/plugins/sp/skills/redesign-web-ui/SKILL.md +1 -0
  79. package/plugins/sp/skills/reverse-engineering/SKILL.md +1 -0
  80. package/plugins/sp/skills/session-review/SKILL.md +1 -0
  81. package/plugins/sp/skills/source-driven-development/SKILL.md +1 -0
  82. package/plugins/sp/skills/sp-bot-bootstrap/SKILL.md +75 -0
  83. package/plugins/sp/skills/spec-decomposition/SKILL.md +1 -0
  84. package/plugins/sp/skills/spur-check/SKILL.md +1 -0
  85. package/plugins/sp/skills/spur-cli/SKILL.md +1 -0
  86. package/plugins/sp/skills/spur-composer/SKILL.md +1 -0
  87. package/plugins/sp/skills/spur-dev/SKILL.md +1 -0
  88. package/plugins/sp/skills/spur-doctor/SKILL.md +1 -0
  89. package/plugins/sp/skills/sys-architecture/SKILL.md +1 -0
  90. package/plugins/sp/skills/sys-debugging/SKILL.md +1 -0
  91. package/plugins/sp/skills/taste-refactoring-api/SKILL.md +1 -0
  92. package/plugins/sp/skills/taste-refactoring-architect/SKILL.md +1 -0
  93. package/plugins/sp/skills/taste-refactoring-tests/SKILL.md +1 -0
  94. package/plugins/sp/skills/taste-refactoring-ui/SKILL.md +1 -0
  95. package/plugins/sp/skills/test-driven-development/SKILL.md +1 -0
  96. package/plugins/sp/skills/wayfinder/SKILL.md +1 -0
  97. package/spur.js +2235 -1292
  98. package/web/_astro/BoardApp.BpVPF1yi.js +1 -0
  99. package/web/_astro/{BoardApp.CNBpKuB6.js → BoardApp.H0GHCpML.js} +157 -157
  100. package/web/_astro/TaskDetail.C3fD4iNx.js +1 -0
  101. package/web/_astro/{arc.CLFbvaU4.js → arc.CwmuZ1Pw.js} +1 -1
  102. package/web/_astro/{architectureDiagram-3BPJPVTR.YYrMKtrm.js → architectureDiagram-3BPJPVTR.D2r2pAtD.js} +1 -1
  103. package/web/_astro/{blockDiagram-GPEHLZMM.D-Xzu32A.js → blockDiagram-GPEHLZMM.LRgyDihu.js} +1 -1
  104. package/web/_astro/{c4Diagram-AAUBKEIU.Cv7EV8QD.js → c4Diagram-AAUBKEIU.OscV13G7.js} +1 -1
  105. package/web/_astro/channel.OpZyofHt.js +1 -0
  106. package/web/_astro/{chunk-2J33WTMH.CkAKN-fF.js → chunk-2J33WTMH.BcbENXnC.js} +1 -1
  107. package/web/_astro/{chunk-4BX2VUAB.D-xu2Tgi.js → chunk-4BX2VUAB.CcRidR01.js} +1 -1
  108. package/web/_astro/{chunk-55IACEB6.yNQibVGY.js → chunk-55IACEB6.DxAFaIIp.js} +1 -1
  109. package/web/_astro/{chunk-727SXJPM.DlVIFHHZ.js → chunk-727SXJPM.Cjvuc3en.js} +1 -1
  110. package/web/_astro/{chunk-AQP2D5EJ.C-LGFaeS.js → chunk-AQP2D5EJ.B3GSEPXo.js} +1 -1
  111. package/web/_astro/{chunk-FMBD7UC4.Df2n26zT.js → chunk-FMBD7UC4.DbpwRXpL.js} +1 -1
  112. package/web/_astro/{chunk-ND2GUHAM.CV_k83Gj.js → chunk-ND2GUHAM.CdiLgZ9z.js} +1 -1
  113. package/web/_astro/{chunk-QZHKN3VN.BQQDO3h3.js → chunk-QZHKN3VN.DT_2ovxF.js} +1 -1
  114. package/web/_astro/{classDiagram-4FO5ZUOK.DkSMdA84.js → classDiagram-4FO5ZUOK.B4Y_Byb0.js} +1 -1
  115. package/web/_astro/{classDiagram-v2-Q7XG4LA2.DkSMdA84.js → classDiagram-v2-Q7XG4LA2.B4Y_Byb0.js} +1 -1
  116. package/web/_astro/{cose-bilkent-S5V4N54A.CCN7GwAZ.js → cose-bilkent-S5V4N54A.0UOSbCRW.js} +1 -1
  117. package/web/_astro/{cynefin-OW5HDTMX.CqQCttkM.js → cynefin-OW5HDTMX.iaVw7KUy.js} +1 -1
  118. package/web/_astro/{dagre-BM42HDAG.CCn6iftc.js → dagre-BM42HDAG.DzBLfYbl.js} +1 -1
  119. package/web/_astro/{diagram-2AECGRRQ.DImUVZK-.js → diagram-2AECGRRQ.CtoO_RXO.js} +1 -1
  120. package/web/_astro/{diagram-5GNKFQAL.BYNywZwV.js → diagram-5GNKFQAL.C1ah--0o.js} +1 -1
  121. package/web/_astro/{diagram-KO2AKTUF.LJZ9DjsJ.js → diagram-KO2AKTUF.DAawwAoM.js} +1 -1
  122. package/web/_astro/{diagram-LMA3HP47.CJ3YpVED.js → diagram-LMA3HP47.kC7Zg0ru.js} +1 -1
  123. package/web/_astro/{diagram-OG6HWLK6.CnVtq5_j.js → diagram-OG6HWLK6.B3dSXJ9m.js} +1 -1
  124. package/web/_astro/{erDiagram-TEJ5UH35.SdmuzZwT.js → erDiagram-TEJ5UH35.cVJXYJkv.js} +1 -1
  125. package/web/_astro/{flowDiagram-I6XJVG4X.C9V-B-nO.js → flowDiagram-I6XJVG4X.CwD6KgFD.js} +1 -1
  126. package/web/_astro/{ganttDiagram-6RSMTGT7.DT5v7SL5.js → ganttDiagram-6RSMTGT7.UB88xr_u.js} +1 -1
  127. package/web/_astro/{gitGraphDiagram-PVQCEYII.B3qURYBL.js → gitGraphDiagram-PVQCEYII.C4B3FNOY.js} +1 -1
  128. package/web/_astro/index.CKtaGArK.css +1 -0
  129. package/web/_astro/{infoDiagram-5YYISTIA.CHO0xT8l.js → infoDiagram-5YYISTIA.6QC564C4.js} +1 -1
  130. package/web/_astro/{ishikawaDiagram-YF4QCWOH.buALAOGh.js → ishikawaDiagram-YF4QCWOH.sQBtM0gc.js} +1 -1
  131. package/web/_astro/{journeyDiagram-JHISSGLW.DvKuIdbX.js → journeyDiagram-JHISSGLW.Dslglgu2.js} +1 -1
  132. package/web/_astro/{kanban-definition-UN3LZRKU.Dvoi9jdN.js → kanban-definition-UN3LZRKU.CPKaPyzi.js} +1 -1
  133. package/web/_astro/{linear.EsEfz8Ex.js → linear.DNHY6BCF.js} +1 -1
  134. package/web/_astro/{mermaid.core.Vk3ryVC7.js → mermaid.core.VoW0rvGv.js} +4 -4
  135. package/web/_astro/{mindmap-definition-RKZ34NQL.DG1pkymq.js → mindmap-definition-RKZ34NQL.jYZ-jCh7.js} +1 -1
  136. package/web/_astro/{pieDiagram-4H26LBE5.DAUmIdd6.js → pieDiagram-4H26LBE5.DQ0fapSh.js} +1 -1
  137. package/web/_astro/{quadrantDiagram-W4KKPZXB.Du3QUozl.js → quadrantDiagram-W4KKPZXB.CWF406ut.js} +1 -1
  138. package/web/_astro/{requirementDiagram-4Y6WPE33.neRi5GrQ.js → requirementDiagram-4Y6WPE33.BmUiiY0p.js} +1 -1
  139. package/web/_astro/{sankeyDiagram-5OEKKPKP.CMUtxA70.js → sankeyDiagram-5OEKKPKP.CzUeGGUK.js} +1 -1
  140. package/web/_astro/{sequenceDiagram-3UESZ5HK.CfYFLmYH.js → sequenceDiagram-3UESZ5HK.DKvkUeEk.js} +1 -1
  141. package/web/_astro/{stateDiagram-AJRCARHV.Bn4dmAad.js → stateDiagram-AJRCARHV.ByedXnFB.js} +1 -1
  142. package/web/_astro/{stateDiagram-v2-BHNVJYJU.BMNezvp-.js → stateDiagram-v2-BHNVJYJU.Bx7wyAlv.js} +1 -1
  143. package/web/_astro/{timeline-definition-PNZ67QCA.ByaDwsBX.js → timeline-definition-PNZ67QCA.Chzu_dUX.js} +1 -1
  144. package/web/_astro/{vennDiagram-CIIHVFJN.CUYU1Mc9.js → vennDiagram-CIIHVFJN.PuxG68DI.js} +1 -1
  145. package/web/_astro/{wardleyDiagram-YWT4CUSO.DpZZeJr2.js → wardleyDiagram-YWT4CUSO.C9ZKxfsC.js} +1 -1
  146. package/web/_astro/{xychartDiagram-2RQKCTM6.CWwI33U0.js → xychartDiagram-2RQKCTM6.B7qR-3HU.js} +1 -1
  147. package/web/index.html +2 -2
  148. package/web/_astro/BoardApp.DVWLxHcV.js +0 -1
  149. package/web/_astro/TaskDetail.BY6jO_3P.js +0 -1
  150. package/web/_astro/channel.DzHZuqj0.js +0 -1
  151. package/web/_astro/index.C8LjH5ri.css +0 -1
@@ -0,0 +1 @@
1
+ import{j as e}from"./jsx-runtime.DWOiEOII.js";import{u as ne,a as m,t as R,T as ie,b as le,B as i,c as E,d as T,L as de,M as ce,m as oe,e as xe,S as ue,C as pe,f as me,g as he}from"./BoardApp.H0GHCpML.js";import{r}from"./index.5dn-Zm-2.js";const h=["backlog","todo","wip","testing","done"],fe=new Set(he.filter(t=>!h.includes(t)));function ve({task:t,onTransition:A,onClose:z}){const[f,j]=r.useState(""),[g,o]=r.useState(""),[D,x]=r.useState("preview"),[M,_]=r.useState(!1),[v,I]=r.useState(!1),[l,H]=r.useState({}),[b,U]=r.useState(!1),[w,L]=r.useState(null),[W,u]=r.useState(!1),[d,p]=r.useState(null),[B,Y]=r.useState("claude"),[F,q]=r.useState(!1),{setTasks:G}=ne(),N=t?.wbs;if(r.useEffect(()=>{if(!N){j(""),o(""),x("preview");return}let s=!1;return _(!0),m.task.show({wbs:N}).then(a=>{if(s)return;const{content:c,frontmatter:n}=a.data;j(c),o(c),H(n)}).catch(a=>{if(s)return;const c=a instanceof Error?a.message:"Failed to load task body";typeof window<"u"&&window.dispatchEvent(new CustomEvent("api-error",{detail:{message:c}}))}).finally(()=>{s||_(!1)}),()=>{s=!0}},[N]),!t)return e.jsx("div",{className:"flex items-center justify-center h-full text-spur-text-muted text-sm",children:"Select a task to view details"});const J=()=>{o(f),x("edit")},Q=()=>{o(f),x("preview")},V=async()=>{I(!0);try{await m.task.body({wbs:t.wbs,body:g}),j(g),x("preview");const a=(await m.task.show({wbs:t.wbs})).data.content;j(a),o(a)}catch(s){o(f),x("preview");const a=s instanceof Error?s.message:"Save failed";typeof window<"u"&&window.dispatchEvent(new CustomEvent("api-error",{detail:{message:a}}))}finally{I(!1)}},X=s=>{const a=me[s];if(a!==void 0){if(s==="cancel"&&t){u(!0);return}t&&A(t.wbs,a);return}p(s)},Z=async()=>{if(!(!d||!t)){L(d),p(null);try{await m.task.action({wbs:t.wbs,action:d,channel:B,skipDeps:F});const s=await m.task.list({});G(s.data??[])}catch(s){const a=s instanceof Error?s.message:"Action failed";typeof window<"u"&&window.dispatchEvent(new CustomEvent("api-error",{detail:{message:a}}))}finally{L(null)}}},ee=s=>{const a=h.indexOf(s);return a>=0?a:-1},K=s=>{if(!s)return"";try{const a=new Date(s);return Number.isNaN(a.getTime())?"":a.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}catch{return""}},P=s=>{if(!s)return"";try{const a=new Date(s);if(Number.isNaN(a.getTime()))return"";const c=Date.now()-a.getTime(),n=Math.floor(c/864e5);return n===0?"today":n===1?"yesterday":n<30?`${n}d ago`:n<365?`${Math.floor(n/30)}mo ago`:`${Math.floor(n/365)}y ago`}catch{return""}},y=Array.isArray(l.tags)?l.tags:[],S=K(l.created_at),se=P(l.created_at),C=K(l.updated_at),te=P(l.updated_at),$=ee(t.status),O=l.estimated_hours,k=l.impl_progress,ae=["planning","design","implementation","review","testing"],re=s=>s==="done"?"bg-spur-success":s==="in_progress"?"bg-spur-warning":"bg-spur-border";return e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3 p-3 border-b border-spur-border shrink-0",children:[e.jsxs("div",{className:"flex flex-col gap-1 overflow-hidden",children:[e.jsxs("h3",{className:"text-sm font-semibold text-spur-text truncate",children:[t.wbs," — ",t.name]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1","data-testid":"header-chips",children:[e.jsxs("span",{className:"px-2 py-0.5 rounded-full border border-spur-border text-xs text-spur-text-muted","data-testid":"status-pill",children:[R(t.status)," ",t.status]}),e.jsx(ie,{wbs:t.wbs}),t.priority&&e.jsx("span",{className:"px-2 py-0.5 rounded-full bg-spur-surface-2 border border-spur-border text-xs text-spur-text-muted",children:t.priority}),t.featureId&&e.jsx("span",{className:"px-2 py-0.5 rounded-full bg-spur-surface-2 border border-spur-border text-xs text-spur-text-muted",children:t.featureId}),y.map(s=>e.jsx("span",{className:"px-2 py-0.5 rounded-full border border-spur-border text-xs text-spur-text-muted",children:s},s))]})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-1 shrink-0",children:[(le[t.status]??[]).map(s=>e.jsx(i,{variant:s==="cancel"?"error":"accent",size:"xs",onClick:()=>X(s),disabled:w===s,"aria-label":E[s],children:w===s?"…":E[s]},s)),z&&e.jsx(i,{variant:"ghost",size:"xs",className:"text-spur-text-muted",onClick:z,"aria-label":"Close detail",children:"✕"})]})]}),e.jsxs("div",{className:"border-b border-spur-border shrink-0",children:[e.jsxs("button",{type:"button",onClick:()=>U(s=>!s),className:"flex items-center justify-between w-full p-3 text-xs font-semibold text-spur-text-muted uppercase tracking-wide hover:text-spur-text transition-colors","aria-expanded":b,children:[e.jsx("span",{children:"Metadata"}),e.jsxs("svg",{className:`w-3 h-3 transition-transform ${b?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[e.jsx("title",{children:b?"Collapse metadata":"Expand metadata"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})]})]}),b&&e.jsxs("div",{className:"px-3 pb-3 space-y-3",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-spur-text-muted block mb-1.5",children:"Status"}),e.jsxs("span",{className:"text-sm text-spur-text","data-testid":"metadata-status",children:[R(t.status)," ",t.status]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-spur-text-muted block mb-1.5",children:"Progress"}),k?e.jsx("div",{className:"space-y-1",children:ae.map(s=>{const a=k[s]??"pending";return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-[10px] text-spur-text-muted w-20 shrink-0",children:s}),e.jsx("div",{className:"flex-1 h-1.5 rounded-full bg-spur-border overflow-hidden",children:e.jsx("div",{className:`h-full rounded-full ${re(a)}`,style:{width:a==="done"?"100%":a==="in_progress"?"50%":"0%"}})}),e.jsx("span",{className:"text-[10px] text-spur-text-muted w-16 shrink-0",children:a})]},s)})}):fe.has(t.status)?e.jsx(T,{variant:"warning",size:"xs",children:t.status}):e.jsx("div",{className:"flex items-center gap-1",children:h.map((s,a)=>{const c=a<=$,n=a===$;return e.jsxs("div",{className:"flex items-center gap-1 flex-1 last:flex-none",children:[e.jsx("div",{className:`h-1.5 rounded-full flex-1 ${c?"bg-spur-accent":"bg-spur-border"} ${n?"ring-1 ring-spur-accent/50":""}`,title:s}),a<h.length-1&&e.jsx("span",{className:"text-[10px] text-spur-text-muted w-0"})]},s)})}),!k&&e.jsx("div",{className:"flex justify-between mt-0.5",children:h.map(s=>e.jsx("span",{className:"text-[10px] text-spur-text-muted",children:s},s))})]}),(S||C)&&e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("span",{className:"text-xs text-spur-text-muted block",children:"Dates"}),S&&e.jsxs("div",{className:"flex items-center gap-1.5 text-xs",children:[e.jsx("span",{className:"text-spur-text-muted w-14 shrink-0",children:"Created"}),e.jsx("span",{className:"text-spur-text",children:S}),e.jsxs("span",{className:"text-spur-text-muted",children:["(",se,")"]})]}),C&&e.jsxs("div",{className:"flex items-center gap-1.5 text-xs",children:[e.jsx("span",{className:"text-spur-text-muted w-14 shrink-0",children:"Updated"}),e.jsx("span",{className:"text-spur-text",children:C}),e.jsxs("span",{className:"text-spur-text-muted",children:["(",te,")"]})]})]}),y.length>0&&e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-spur-text-muted block mb-1.5",children:"Tags"}),e.jsx("div",{className:"flex flex-wrap gap-1",children:y.map(s=>e.jsx(T,{variant:"outline",size:"xs",className:"text-spur-text-muted",children:s},s))})]}),e.jsxs("div",{className:"space-y-1.5",children:[t.priority&&e.jsxs("div",{className:"flex items-center gap-1.5 text-xs",children:[e.jsx("span",{className:"text-spur-text-muted w-14 shrink-0",children:"Priority"}),e.jsx(T,{variant:"outline",size:"xs",children:t.priority})]}),O!==void 0&&e.jsxs("div",{className:"flex items-center gap-1.5 text-xs",children:[e.jsx("span",{className:"text-spur-text-muted w-14 shrink-0",children:"Est. Hours"}),e.jsxs("span",{className:"text-spur-text",children:[O,"h"]})]}),t.featureId&&e.jsxs("div",{className:"flex items-center gap-1.5 text-xs",children:[e.jsx("span",{className:"text-spur-text-muted w-14 shrink-0",children:"Feature"}),e.jsx("span",{className:"text-spur-text",children:t.featureId})]}),e.jsxs("div",{className:"flex items-center gap-1.5 text-xs",children:[e.jsx("span",{className:"text-spur-text-muted w-14 shrink-0",children:"File"}),e.jsx("span",{className:"text-spur-text font-mono truncate",children:t.filePath})]})]})]})]}),e.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden p-3","data-testid":"task-body-section",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2 shrink-0",children:[e.jsx("span",{className:"text-xs font-semibold text-spur-text-muted uppercase tracking-wide",children:"Body"}),e.jsx("div",{className:"flex gap-1",children:D==="preview"?e.jsx(i,{variant:"ghost",size:"xs",onClick:J,disabled:M,"aria-label":"Edit body",children:"Edit"}):e.jsxs(e.Fragment,{children:[e.jsx(i,{variant:"primary",size:"xs",onClick:V,disabled:v,"aria-label":"Save body",children:v?"Saving…":"Save"}),e.jsx(i,{variant:"ghost",size:"xs",onClick:Q,disabled:v,"aria-label":"Cancel edit",children:"Cancel"})]})})]}),M?e.jsxs("div",{className:"flex items-center gap-2 text-sm text-spur-text-muted",children:[e.jsx(de,{size:"xs",className:"text-spur-accent"}),"Loading body…"]}):D==="edit"?e.jsx("div",{className:"flex-1 min-h-0","data-testid":"body-editor",children:e.jsx(ce,{value:g,onChange:s=>o(s??""),height:"100%","data-color-mode":"light",previewOptions:oe})}):e.jsx("div",{className:"flex-1 overflow-y-auto","data-testid":"body-preview",children:e.jsx(xe,{source:f})})]}),W&&e.jsx("div",{role:"dialog","aria-modal":"true","aria-label":"Confirm cancel task",tabIndex:-1,className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",onClick:s=>{s.target===s.currentTarget&&u(!1)},onKeyDown:s=>{s.key==="Escape"&&u(!1)},children:e.jsxs("div",{className:"bg-spur-surface border border-spur-border rounded-xl shadow-xl p-4 mx-4 max-w-xs w-full",children:[e.jsxs("p",{className:"text-sm text-spur-text mb-4",children:["Cancel task ",e.jsx("strong",{children:t.wbs}),"? This marks it as cancelled and cannot be undone from the board."]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(i,{variant:"ghost",size:"xs",onClick:()=>u(!1),children:"Keep"}),e.jsx(i,{variant:"error",size:"xs",onClick:()=>{u(!1),A(t.wbs,"cancelled")},children:"Cancel task"})]})]})}),d&&t&&e.jsx("div",{role:"dialog","aria-modal":"true","aria-label":`Configure ${d} action`,tabIndex:-1,className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",onClick:s=>{s.target===s.currentTarget&&p(null)},onKeyDown:s=>{s.key==="Escape"&&p(null)},children:e.jsxs("div",{className:"bg-spur-surface border border-spur-border rounded-xl shadow-xl p-4 mx-4 max-w-sm w-full",children:[e.jsxs("h4",{className:"text-sm font-semibold text-spur-text mb-3",children:[E[d]??d," — Select Channel"]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(ue,{variant:"bordered",size:"sm",className:"w-full bg-spur-bg text-spur-text",value:B,onChange:s=>Y(s.target.value),children:["claude","codex","gemini","pi","opencode","antigravity","openclaw"].map(s=>e.jsx("option",{value:s,children:s},s))}),e.jsxs("label",{htmlFor:"skip-deps",className:"flex items-center gap-2 cursor-pointer",children:[e.jsx(pe,{id:"skip-deps",size:"xs",checked:F,onChange:s=>q(s.target.checked)}),e.jsx("span",{className:"text-xs text-spur-text",children:"Skip dependencies"})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 mt-4",children:[e.jsx(i,{variant:"ghost",size:"xs",onClick:()=>p(null),children:"Cancel"}),e.jsx(i,{variant:"primary",size:"xs",onClick:Z,children:w===d?"Dispatching…":"Dispatch"})]})]})})]})}export{ve as default};
@@ -1 +1 @@
1
- import{a0 as ln,a1 as an,a2 as H,a3 as q,a4 as B,a5 as un,a6 as y,a7 as tn,a8 as L,a9 as _,aa as rn,ab as o,ac as on,ad as sn,ae as fn}from"./mermaid.core.Vk3ryVC7.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(on(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,F=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<an)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(fn((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{a0 as ln,a1 as an,a2 as H,a3 as q,a4 as B,a5 as un,a6 as y,a7 as tn,a8 as L,a9 as _,aa as rn,ab as o,ac as on,ad as sn,ae as fn}from"./mermaid.core.VoW0rvGv.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(on(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,F=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<an)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(fn((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};