viewcc 1.0.0 β 1.0.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.
- package/README.md +15 -5
- package/dist/assets/{index-BQSevtzO.js β index-DpR-d7WJ.js} +2 -2
- package/dist/index.html +1 -1
- package/lib/cli.d.ts.map +1 -1
- package/lib/cli.js +16 -0
- package/lib/cli.js.map +1 -1
- package/lib/server.d.ts.map +1 -1
- package/lib/server.js +74 -0
- package/lib/server.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -18,8 +18,18 @@
|
|
|
18
18
|
|
|
19
19
|
### Prerequisites
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
- Node.js 18
|
|
21
|
+
**Required:**
|
|
22
|
+
- **Node.js 18+** - The visualizer runs on Node.js. [Download here](https://nodejs.org/)
|
|
23
|
+
- Includes `npx` (required to run the command)
|
|
24
|
+
- Check your version: `node --version`
|
|
25
|
+
|
|
26
|
+
**Project Requirements:**
|
|
27
|
+
- A **Claude Code project** with a `.claude/` directory
|
|
28
|
+
- If you don't have one, run `claude init` in your project folder
|
|
29
|
+
- Or use this tool to explore any existing Claude Code project
|
|
30
|
+
|
|
31
|
+
**Optional:**
|
|
32
|
+
- [Claude Code CLI](https://github.com/anthropics/claude-code) - For executing agents/skills from the UI
|
|
23
33
|
|
|
24
34
|
### Installation
|
|
25
35
|
|
|
@@ -59,7 +69,7 @@ If you want to modify or contribute:
|
|
|
59
69
|
|
|
60
70
|
```bash
|
|
61
71
|
# Clone the repository
|
|
62
|
-
git clone https://github.com/
|
|
72
|
+
git clone https://github.com/kubony/claude-code-visualizer
|
|
63
73
|
cd claude-code-visualizer
|
|
64
74
|
|
|
65
75
|
# Install dependencies
|
|
@@ -152,8 +162,8 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
152
162
|
|
|
153
163
|
## π§ Contact
|
|
154
164
|
|
|
155
|
-
- GitHub: [@
|
|
156
|
-
- Issues: [GitHub Issues](https://github.com/
|
|
165
|
+
- GitHub: [@kubony](https://github.com/kubony)
|
|
166
|
+
- Issues: [GitHub Issues](https://github.com/kubony/claude-code-visualizer/issues)
|
|
157
167
|
|
|
158
168
|
---
|
|
159
169
|
|
|
@@ -101,10 +101,10 @@ Error generating stack: `+i.message+`
|
|
|
101
101
|
margin-top: 12px;
|
|
102
102
|
font-size: 12px;
|
|
103
103
|
}
|
|
104
|
-
`})]})}const sp="
|
|
104
|
+
`})]})}const sp="";function ap({nodes:e,selectedNode:t}){const[n,r]=L.useState(""),[l,i]=L.useState(""),[o,u]=L.useState(!1),[s,f]=L.useState(""),[h,g]=L.useState(!1),m=e.filter(P=>P.type==="agent");e.filter(P=>P.type==="skill"),L.useEffect(()=>{t&&(tt(t)?(r(`(${t.name} μμ΄μ νΈλ₯Ό μ¬μ©ν΄μ μ²λ¦¬)`),i(t.name)):ml(t)&&r(`${t.name} μ€ν¬μ μ€νν΄μ€`))},[t]);const w=async()=>{if(!n.trim()){f("β οΈ μ§μμ¬νμ μ
λ ₯νμΈμ.");return}u(!0),f("");try{const P=await fetch(`${sp}/api/execute`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({instruction:n.trim(),skipPermissions:h})}),d=await P.json();P.ok?(f(`β
${d.message}`),r(""),setTimeout(()=>f(""),5e3)):f(`β μ€ν μ€ν¨: ${d.error}`)}catch(P){f(`β μλ² μ°κ²° μ€ν¨: ${P instanceof Error?P.message:String(P)}`)}finally{u(!1)}},x=()=>{l&&r(P=>`${P}
|
|
105
105
|
(${l} μμ΄μ νΈλ₯Ό μ¬μ©ν΄μ μ²λ¦¬)`.trim())},k=[{label:"λ³ΌνΈ μ 리",cmd:"λ³ΌνΈ μ 리ν΄μ€"},{label:"YAML ν€λ μΆκ°",cmd:"YAML ν€λκ° λλ½λ νμΌλ€μ ν€λ μΆκ°ν΄μ€"},{label:"μΈλ¬Όμ¬μ μ
λ°μ΄νΈ",cmd:"μ΅κ·Ό μΆκ°λ μΈλ¬Ό νμΌλ€λ‘ μΈλ¬Όμ¬μ μ
λ°μ΄νΈν΄μ€"}];return c.jsxs("div",{className:"command-builder",children:[c.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[c.jsxs("select",{value:l,onChange:P=>i(P.target.value),className:"flex-1 px-3 py-2 bg-gray-800 border border-gray-700 rounded text-sm text-gray-300",children:[c.jsx("option",{value:"",children:"μμ΄μ νΈ μ ν..."}),m.map(P=>c.jsx("option",{value:P.name,children:P.name},P.id))]}),c.jsx("button",{onClick:x,disabled:!l,className:"px-4 py-2 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-700 disabled:text-gray-500 text-white text-sm rounded transition-colors",children:"μ½μ
"})]}),c.jsx("div",{className:"flex gap-2 mb-3 flex-wrap",children:k.map((P,d)=>c.jsx("button",{onClick:()=>r(P.cmd),className:"px-3 py-1 bg-gray-800 hover:bg-gray-700 text-gray-300 text-xs rounded transition-colors",children:P.label},d))}),c.jsx("textarea",{value:n,onChange:P=>r(P.target.value),placeholder:`Claude Codeμ λ³΄λΌ μ§μμ¬νμ μ
λ ₯νμΈμ...
|
|
106
106
|
|
|
107
107
|
μμ:
|
|
108
108
|
- λ³ΌνΈ μ 리ν΄μ€
|
|
109
109
|
- YAML ν€λκ° λλ½λ νμΌλ€ μ°Ύμμ μΆκ°ν΄μ€
|
|
110
|
-
- vault-organizer μμ΄μ νΈλ‘ μ 체 μ 리 μ€ν`,className:"w-full px-3 py-2 bg-gray-800 border border-gray-700 rounded text-gray-200 placeholder-gray-500 focus:border-blue-500 focus:outline-none resize-none",rows:4,disabled:o}),c.jsx("div",{className:"mt-3",children:c.jsxs("label",{className:"flex items-center gap-2 text-sm text-gray-400 hover:text-gray-300 cursor-pointer",children:[c.jsx("input",{type:"checkbox",checked:h,onChange:P=>g(P.target.checked),className:"w-4 h-4 rounded border-gray-600 bg-gray-800 text-blue-600 focus:ring-blue-500 focus:ring-offset-gray-900"}),c.jsx("span",{children:"κΆν νμΈ κ±΄λλ°κΈ° (--dangerously-skip-permissions)"}),c.jsx("span",{className:"text-xs text-yellow-500",children:"β οΈ μ λ’°ν μ μλ νλ‘μ νΈμμλ§ μ¬μ©"})]})}),c.jsxs("div",{className:"flex items-center gap-3 mt-3",children:[c.jsx("button",{onClick:w,disabled:o||!n.trim(),className:"px-6 py-2 bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700 disabled:from-gray-700 disabled:to-gray-700 text-white font-medium rounded-lg transition-all transform hover:scale-105 disabled:scale-100 disabled:cursor-not-allowed flex items-center gap-2",children:o?c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"animate-spin",children:"β³"}),"μ€ν μ€..."]}):c.jsxs(c.Fragment,{children:[c.jsx("span",{children:"βΆοΈ"}),"μ€ν"]})}),s&&c.jsx("div",{className:`flex-1 px-4 py-2 rounded text-sm ${s.startsWith("β
")?"bg-green-900/30 text-green-400 border border-green-700":"bg-red-900/30 text-red-400 border border-red-700"}`,children:s})]}),c.jsx("p",{className:"mt-3 text-xs text-gray-500",children:"π‘ μ€ννλ©΄ μλ‘μ΄ Claude Code μΈμ
μ΄ μμλλ©°, μ€μκ° μ§νμν©μ μλ κ·Έλνμ Activity Streamμμ νμΈν μ μμ΅λλ€."})]})}function cp(e="/api/graph-data"){const[t,n]=L.useState(null),[r,l]=L.useState(!0),[i,o]=L.useState(null),u=async()=>{l(!0),o(null);try{const s=await fetch(e);if(!s.ok)throw new Error(`Failed to load data: ${s.status} ${s.statusText}`);const f=await s.json();if(!f.nodes||!f.edges||!f.metadata)throw new Error("Invalid graph data structure");n(f)}catch(s){const f=s instanceof Error?s.message:"Unknown error occurred";o(f),console.error("Error loading graph data:",s)}finally{l(!1)}};return L.useEffect(()=>{u()},[e]),{data:t,loading:r,error:i,reload:u}}const fp="http://localhost:3001/events";function dp(e=!0){const[t,n]=L.useState(new Set),[r,l]=L.useState([]),[i,o]=L.useState(!1),[u,s]=L.useState(null),f=L.useCallback(m=>{const w=`${m.type}:${m.name}`;n(x=>{const k=new Set(x);return m.event==="start"?k.add(w):m.event==="end"&&k.delete(w),k}),l(x=>[...x.slice(-99),m])},[]);L.useEffect(()=>{if(!e){o(!1);return}let m=null,w=null;const x=()=>{try{m=new EventSource(fp),m.addEventListener("connected",()=>{o(!0),s(null),console.log("π Activity stream connected")}),m.addEventListener("activity",k=>{try{const P=JSON.parse(k.data);f(P)}catch(P){console.error("Failed to parse activity event:",P)}}),m.onerror=()=>{o(!1),s("Connection lost. Retrying..."),m==null||m.close(),w=setTimeout(x,3e3)}}catch{s("Failed to connect to activity stream"),o(!1)}};return x(),()=>{m==null||m.close(),w&&clearTimeout(w)}},[e,f]);const h=L.useCallback(()=>{l([])},[]),g=L.useCallback(()=>{n(new Set)},[]);return{activeNodes:t,events:r,isConnected:i,error:u,clearEvents:h,clearActiveNodes:g}}const oi=240,os=140,us=200,ss=80;function pp(){const{data:e,loading:t,error:n,reload:r}=cp(),[l,i]=L.useState(null),[o,u]=L.useState(""),[s,f]=L.useState({}),[h,g]=L.useState({scale:1,x:0,y:0}),[m,w]=L.useState(0),[x,k]=L.useState(!0),[P,d]=L.useState(!0),[a,p]=L.useState(!1),[v,S]=L.useState(!1),{activeNodes:j,events:_,isConnected:z,error:K}=dp(x),R=L.useRef(null),q=L.useRef(null),Fe=L.useRef(null),Ze=L.useCallback((C,F)=>{const D={};C.forEach(I=>D[I.id]=0),F.forEach(I=>{D[I.source]=(D[I.source]||0)+1,D[I.target]=(D[I.target]||0)+1});const B=new Set,le=new Set;F.forEach(I=>{I.type==="calls"&&(le.add(I.source),B.add(I.target))});const M={},Le=C.filter(tt);Le.forEach(I=>{B.has(I.id)||F.some(me=>me.type==="calls"&&me.source===I.id)&&(M[I.id]=0)});const st=Le.filter(I=>M[I.id]===0).map(I=>I.id);for(;st.length>0;){const I=st.shift(),b=M[I];F.forEach(me=>{if(me.type==="calls"&&me.source===I){const ct=me.target;(M[ct]===void 0||M[ct]<b+1)&&(M[ct]=b+1,st.push(ct))}})}const at=Object.values(M).length>0?Math.max(...Object.values(M),0):0;Le.forEach(I=>{M[I.id]===void 0&&(M[I.id]=at+1)});const Cc=Math.max(...Object.values(M),0),Tt={};Le.forEach(I=>{const b=M[I.id];Tt[b]||(Tt[b]=[]),Tt[b].push(I)}),Object.keys(Tt).forEach(I=>{Tt[Number(I)].sort((b,me)=>D[me.id]-D[b.id])});const En={},Xo=100,Go=80;Object.keys(Tt).forEach(I=>{const b=Number(I);Tt[b].forEach((ct,_c)=>{En[ct.id]={x:Xo+b*(oi+us),y:Go+_c*(os+ss)}})});const Ml=C.filter(I=>!tt(I)),Rl={};Ml.forEach(I=>{const b=[];F.forEach(me=>{me.target===I.id&&En[me.source]&&b.push(En[me.source].y)}),Rl[I.id]=b.length>0?b.reduce((me,ct)=>me+ct,0)/b.length:1/0}),Ml.sort((I,b)=>Rl[I.id]-Rl[b.id]);const jc=Xo+(Cc+1)*(oi+us);return Ml.forEach((I,b)=>{En[I.id]={x:jc,y:Go+b*(os+ss)}}),En},[]);L.useEffect(()=>{e!=null&&e.nodes&&(e!=null&&e.edges)&&Object.keys(s).length===0&&f(Ze(e.nodes,e.edges))},[e,s,Ze]),L.useEffect(()=>{if(Object.keys(s).length>0){const C=requestAnimationFrame(()=>{w(F=>F+1)});return()=>cancelAnimationFrame(C)}},[s]),L.useCallback(C=>{const F=document.getElementById(C);if(!F||!R.current)return null;const D=F.getBoundingClientRect(),B=R.current.getBoundingClientRect(),le=D.left+D.width/2-B.left,M=D.top+D.height/2-B.top,Le=(le-h.x)/h.scale,st=(M-h.y)/h.scale;return{x:Le,y:st}},[h]);const mr=L.useCallback(C=>{const F=s[C.source],D=s[C.target];return!F||!D?null:{start:{x:F.x+oi,y:F.y+50},end:{x:D.x,y:D.y+50}}},[s]),Tl=L.useCallback((C,F)=>{if(C.button!==0)return;const D=s[F];D&&(q.current={nodeId:F,startPos:{...D},startMouse:{x:C.clientX,y:C.clientY}},C.preventDefault())},[s]),Sn=L.useCallback(C=>{C.button===0&&(q.current||(Fe.current={startX:C.clientX-h.x,startY:C.clientY-h.y},C.preventDefault()))},[h]),Nn=L.useCallback(C=>{if(q.current){const F=(C.clientX-q.current.startMouse.x)/h.scale,D=(C.clientY-q.current.startMouse.y)/h.scale;f(B=>({...B,[q.current.nodeId]:{x:q.current.startPos.x+F,y:q.current.startPos.y+D}}))}else Fe.current&&g(F=>({...F,x:C.clientX-Fe.current.startX,y:C.clientY-Fe.current.startY}))},[h.scale]),N=L.useCallback(()=>{q.current=null,Fe.current=null},[]),T=L.useCallback(C=>{var st;C.preventDefault();const F=C.deltaY>0?.9:1.1,D=Math.min(Math.max(h.scale*F,.3),2),B=(st=R.current)==null?void 0:st.getBoundingClientRect();if(!B)return;const le=C.clientX-B.left,M=C.clientY-B.top,Le=D-h.scale;g(at=>({scale:D,x:at.x-(le-at.x)*(Le/at.scale),y:at.y-(M-at.y)*(Le/at.scale)}))},[h]),{visibleNodes:O,highlightedEdges:Q}=L.useMemo(()=>{if(!e)return{visibleNodes:[],highlightedEdges:new Set};const C=M=>{if(!o)return!0;const Le=o.toLowerCase();return M.name.toLowerCase().includes(Le)||M.description.toLowerCase().includes(Le)},F=M=>M.type==="skill"&&(M.name.endsWith("-creator")||M.name==="agent-skill-visualizer"),D=M=>!a&&F(M)?!1:C(M),B=new Set;l&&(B.add(l.id),e.edges.forEach(M=>{M.source===l.id&&B.add(M.target),M.target===l.id&&B.add(M.source)}));const le=new Set;return l&&e.edges.forEach(M=>{(M.source===l.id||M.target===l.id)&&le.add(`${M.source}-${M.target}`)}),{visibleNodes:e.nodes.filter(D),highlightedEdges:le}},[e,o,l,a]);return t?c.jsx("div",{className:"min-h-screen bg-gray-900 flex items-center justify-center",children:c.jsxs("div",{className:"text-center",children:[c.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 mx-auto mb-4"}),c.jsx("p",{className:"text-gray-400",children:"κ·Έλν λ°μ΄ν° λ‘λ© μ€..."})]})}):n||!e?c.jsx("div",{className:"min-h-screen bg-gray-900 flex items-center justify-center",children:c.jsxs("div",{className:"text-center max-w-md px-4",children:[c.jsx("div",{className:"text-red-500 text-5xl mb-4",children:"β οΈ"}),c.jsx("h1",{className:"text-xl font-bold text-white mb-2",children:"λ°μ΄ν° λ‘λ μ€ν¨"}),c.jsx("p",{className:"text-gray-400 mb-4",children:n}),c.jsx("button",{onClick:r,className:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",children:"λ€μ μλ"})]})}):c.jsxs("div",{className:"h-screen w-screen bg-gray-900 flex overflow-hidden",children:[c.jsxs("div",{className:"flex-1 relative",children:[c.jsxs("div",{className:"absolute top-4 left-4 right-4 z-20 flex items-center gap-4",children:[c.jsx("div",{className:"flex-1 max-w-md",children:c.jsx(op,{value:o,onChange:u})}),c.jsx("button",{onClick:()=>{f(Ze(e.nodes,e.edges)),g({scale:1,x:0,y:0})},className:"p-2 bg-gray-800 rounded-lg text-gray-400 hover:text-white hover:bg-gray-700 transition-colors",title:"λ μ΄μμ μ΄κΈ°ν",children:c.jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:c.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"})})})]}),c.jsx("div",{className:"absolute bottom-4 left-4 z-20",children:c.jsx(ip,{metadata:e.metadata})}),c.jsxs("div",{className:"absolute top-4 right-4 z-20 flex items-center gap-2",children:[c.jsxs("button",{onClick:()=>p(!a),className:`px-3 py-2 rounded-lg transition-colors flex items-center gap-2 ${a?"bg-purple-600 text-white":"bg-gray-800 text-gray-400"}`,title:"Creator μ€ν¬ νμ/μ¨κΈ°κΈ°",children:[c.jsx("span",{className:"text-sm",children:"π οΈ"}),"Creator"]}),c.jsxs("button",{onClick:()=>d(!P),className:`px-3 py-2 rounded-lg transition-colors flex items-center gap-2 ${P?"bg-blue-600 text-white":"bg-gray-800 text-gray-400"}`,title:"Activity Stream ν¨λ",children:[c.jsx("span",{className:`w-2 h-2 rounded-full ${z?"bg-green-400 animate-pulse":"bg-red-400"}`}),"Activity"]}),c.jsx("button",{onClick:()=>k(!x),className:`p-2 rounded-lg transition-colors ${x?"bg-green-600 text-white":"bg-gray-800 text-gray-400"}`,title:x?"Live λͺ¨λ λκΈ°":"Live λͺ¨λ μΌκΈ°",children:x?"π΄":"βΈοΈ"})]}),P&&c.jsx("div",{className:"absolute top-16 right-4 z-20 w-72",children:c.jsx(up,{activeNodes:j,events:_,isConnected:z,error:K})}),c.jsx("div",{ref:R,className:"absolute inset-0 overflow-hidden cursor-grab active:cursor-grabbing",onMouseDown:Sn,onMouseMove:Nn,onMouseUp:N,onMouseLeave:N,onWheel:T,onClick:()=>i(null),children:c.jsxs("div",{style:{transform:`translate(${h.x}px, ${h.y}px) scale(${h.scale})`,transformOrigin:"0 0",width:"6000px",height:"4000px",position:"relative"},children:[c.jsx("svg",{className:"absolute inset-0 pointer-events-none z-10",style:{width:"6000px",height:"4000px"},children:e.edges.map(C=>{const F=mr(C);if(!F)return null;const D=`${C.source}-${C.target}`,B=Q.has(D),le=l&&!Q.has(D);return c.jsx(Ec,{start:F.start,end:F.end,type:C.type,isHighlighted:B,isDimmed:!!le},D)})}),O.map(C=>{const F=s[C.id];if(!F)return null;const D=l&&l.id!==C.id&&!e.edges.some(B=>B.source===l.id&&B.target===C.id||B.target===l.id&&B.source===C.id);return c.jsx("div",{style:{opacity:D?.3:1,transition:"opacity 0.2s"},children:c.jsx(Nc,{node:C,position:F,isSelected:(l==null?void 0:l.id)===C.id,isActive:j.has(C.id),onMouseDown:Tl,onClick:i})},C.id)})]})})]}),c.jsx("div",{className:`w-96 bg-gray-800 border-l border-gray-700 transition-transform duration-300 ${l?"translate-x-0":"translate-x-full"}`,style:{position:"absolute",right:0,top:0,bottom:0},children:c.jsx(lp,{node:l,data:e,onClose:()=>i(null),onOpenCommandModal:()=>S(!0)})}),v&&c.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 backdrop-blur-sm",children:c.jsxs("div",{className:"bg-gray-900 border border-gray-700 rounded-lg shadow-2xl max-w-3xl w-full mx-4 max-h-[80vh] overflow-y-auto",children:[c.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-gray-700",children:[c.jsxs("h2",{className:"text-xl font-bold text-white flex items-center gap-2",children:[c.jsx("span",{children:"β‘"}),"Claude Code μ€ν"]}),c.jsx("button",{onClick:()=>S(!1),className:"text-gray-400 hover:text-white transition-colors","aria-label":"Close modal",children:c.jsx("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:c.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),c.jsx("div",{className:"p-4",children:c.jsx(ap,{nodes:e.nodes,selectedNode:l})})]})})]})}Sc(document.getElementById("root")).render(c.jsx(L.StrictMode,{children:c.jsx(pp,{})}));
|
|
110
|
+
- vault-organizer μμ΄μ νΈλ‘ μ 체 μ 리 μ€ν`,className:"w-full px-3 py-2 bg-gray-800 border border-gray-700 rounded text-gray-200 placeholder-gray-500 focus:border-blue-500 focus:outline-none resize-none",rows:4,disabled:o}),c.jsx("div",{className:"mt-3",children:c.jsxs("label",{className:"flex items-center gap-2 text-sm text-gray-400 hover:text-gray-300 cursor-pointer",children:[c.jsx("input",{type:"checkbox",checked:h,onChange:P=>g(P.target.checked),className:"w-4 h-4 rounded border-gray-600 bg-gray-800 text-blue-600 focus:ring-blue-500 focus:ring-offset-gray-900"}),c.jsx("span",{children:"κΆν νμΈ κ±΄λλ°κΈ° (--dangerously-skip-permissions)"}),c.jsx("span",{className:"text-xs text-yellow-500",children:"β οΈ μ λ’°ν μ μλ νλ‘μ νΈμμλ§ μ¬μ©"})]})}),c.jsxs("div",{className:"flex items-center gap-3 mt-3",children:[c.jsx("button",{onClick:w,disabled:o||!n.trim(),className:"px-6 py-2 bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700 disabled:from-gray-700 disabled:to-gray-700 text-white font-medium rounded-lg transition-all transform hover:scale-105 disabled:scale-100 disabled:cursor-not-allowed flex items-center gap-2",children:o?c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"animate-spin",children:"β³"}),"μ€ν μ€..."]}):c.jsxs(c.Fragment,{children:[c.jsx("span",{children:"βΆοΈ"}),"μ€ν"]})}),s&&c.jsx("div",{className:`flex-1 px-4 py-2 rounded text-sm ${s.startsWith("β
")?"bg-green-900/30 text-green-400 border border-green-700":"bg-red-900/30 text-red-400 border border-red-700"}`,children:s})]}),c.jsx("p",{className:"mt-3 text-xs text-gray-500",children:"π‘ μ€ννλ©΄ μλ‘μ΄ Claude Code μΈμ
μ΄ μμλλ©°, μ€μκ° μ§νμν©μ μλ κ·Έλνμ Activity Streamμμ νμΈν μ μμ΅λλ€."})]})}function cp(e="/api/graph-data"){const[t,n]=L.useState(null),[r,l]=L.useState(!0),[i,o]=L.useState(null),u=async()=>{l(!0),o(null);try{const s=await fetch(e);if(!s.ok)throw new Error(`Failed to load data: ${s.status} ${s.statusText}`);const f=await s.json();if(!f.nodes||!f.edges||!f.metadata)throw new Error("Invalid graph data structure");n(f)}catch(s){const f=s instanceof Error?s.message:"Unknown error occurred";o(f),console.error("Error loading graph data:",s)}finally{l(!1)}};return L.useEffect(()=>{u()},[e]),{data:t,loading:r,error:i,reload:u}}const fp="/api/events";function dp(e=!0){const[t,n]=L.useState(new Set),[r,l]=L.useState([]),[i,o]=L.useState(!1),[u,s]=L.useState(null),f=L.useCallback(m=>{const w=`${m.type}:${m.name}`;n(x=>{const k=new Set(x);return m.event==="start"?k.add(w):m.event==="end"&&k.delete(w),k}),l(x=>[...x.slice(-99),m])},[]);L.useEffect(()=>{if(!e){o(!1);return}let m=null,w=null;const x=()=>{try{m=new EventSource(fp),m.addEventListener("connected",()=>{o(!0),s(null),console.log("π Activity stream connected")}),m.addEventListener("activity",k=>{try{const P=JSON.parse(k.data);f(P)}catch(P){console.error("Failed to parse activity event:",P)}}),m.onerror=()=>{o(!1),s("Connection lost. Retrying..."),m==null||m.close(),w=setTimeout(x,3e3)}}catch{s("Failed to connect to activity stream"),o(!1)}};return x(),()=>{m==null||m.close(),w&&clearTimeout(w)}},[e,f]);const h=L.useCallback(()=>{l([])},[]),g=L.useCallback(()=>{n(new Set)},[]);return{activeNodes:t,events:r,isConnected:i,error:u,clearEvents:h,clearActiveNodes:g}}const oi=240,os=140,us=200,ss=80;function pp(){const{data:e,loading:t,error:n,reload:r}=cp(),[l,i]=L.useState(null),[o,u]=L.useState(""),[s,f]=L.useState({}),[h,g]=L.useState({scale:1,x:0,y:0}),[m,w]=L.useState(0),[x,k]=L.useState(!0),[P,d]=L.useState(!0),[a,p]=L.useState(!1),[v,S]=L.useState(!1),{activeNodes:j,events:_,isConnected:z,error:K}=dp(x),R=L.useRef(null),q=L.useRef(null),Fe=L.useRef(null),Ze=L.useCallback((C,F)=>{const D={};C.forEach(I=>D[I.id]=0),F.forEach(I=>{D[I.source]=(D[I.source]||0)+1,D[I.target]=(D[I.target]||0)+1});const B=new Set,le=new Set;F.forEach(I=>{I.type==="calls"&&(le.add(I.source),B.add(I.target))});const M={},Le=C.filter(tt);Le.forEach(I=>{B.has(I.id)||F.some(me=>me.type==="calls"&&me.source===I.id)&&(M[I.id]=0)});const st=Le.filter(I=>M[I.id]===0).map(I=>I.id);for(;st.length>0;){const I=st.shift(),b=M[I];F.forEach(me=>{if(me.type==="calls"&&me.source===I){const ct=me.target;(M[ct]===void 0||M[ct]<b+1)&&(M[ct]=b+1,st.push(ct))}})}const at=Object.values(M).length>0?Math.max(...Object.values(M),0):0;Le.forEach(I=>{M[I.id]===void 0&&(M[I.id]=at+1)});const Cc=Math.max(...Object.values(M),0),Tt={};Le.forEach(I=>{const b=M[I.id];Tt[b]||(Tt[b]=[]),Tt[b].push(I)}),Object.keys(Tt).forEach(I=>{Tt[Number(I)].sort((b,me)=>D[me.id]-D[b.id])});const En={},Xo=100,Go=80;Object.keys(Tt).forEach(I=>{const b=Number(I);Tt[b].forEach((ct,_c)=>{En[ct.id]={x:Xo+b*(oi+us),y:Go+_c*(os+ss)}})});const Ml=C.filter(I=>!tt(I)),Rl={};Ml.forEach(I=>{const b=[];F.forEach(me=>{me.target===I.id&&En[me.source]&&b.push(En[me.source].y)}),Rl[I.id]=b.length>0?b.reduce((me,ct)=>me+ct,0)/b.length:1/0}),Ml.sort((I,b)=>Rl[I.id]-Rl[b.id]);const jc=Xo+(Cc+1)*(oi+us);return Ml.forEach((I,b)=>{En[I.id]={x:jc,y:Go+b*(os+ss)}}),En},[]);L.useEffect(()=>{e!=null&&e.nodes&&(e!=null&&e.edges)&&Object.keys(s).length===0&&f(Ze(e.nodes,e.edges))},[e,s,Ze]),L.useEffect(()=>{if(Object.keys(s).length>0){const C=requestAnimationFrame(()=>{w(F=>F+1)});return()=>cancelAnimationFrame(C)}},[s]),L.useCallback(C=>{const F=document.getElementById(C);if(!F||!R.current)return null;const D=F.getBoundingClientRect(),B=R.current.getBoundingClientRect(),le=D.left+D.width/2-B.left,M=D.top+D.height/2-B.top,Le=(le-h.x)/h.scale,st=(M-h.y)/h.scale;return{x:Le,y:st}},[h]);const mr=L.useCallback(C=>{const F=s[C.source],D=s[C.target];return!F||!D?null:{start:{x:F.x+oi,y:F.y+50},end:{x:D.x,y:D.y+50}}},[s]),Tl=L.useCallback((C,F)=>{if(C.button!==0)return;const D=s[F];D&&(q.current={nodeId:F,startPos:{...D},startMouse:{x:C.clientX,y:C.clientY}},C.preventDefault())},[s]),Sn=L.useCallback(C=>{C.button===0&&(q.current||(Fe.current={startX:C.clientX-h.x,startY:C.clientY-h.y},C.preventDefault()))},[h]),Nn=L.useCallback(C=>{if(q.current){const F=(C.clientX-q.current.startMouse.x)/h.scale,D=(C.clientY-q.current.startMouse.y)/h.scale;f(B=>({...B,[q.current.nodeId]:{x:q.current.startPos.x+F,y:q.current.startPos.y+D}}))}else Fe.current&&g(F=>({...F,x:C.clientX-Fe.current.startX,y:C.clientY-Fe.current.startY}))},[h.scale]),N=L.useCallback(()=>{q.current=null,Fe.current=null},[]),T=L.useCallback(C=>{var st;C.preventDefault();const F=C.deltaY>0?.9:1.1,D=Math.min(Math.max(h.scale*F,.3),2),B=(st=R.current)==null?void 0:st.getBoundingClientRect();if(!B)return;const le=C.clientX-B.left,M=C.clientY-B.top,Le=D-h.scale;g(at=>({scale:D,x:at.x-(le-at.x)*(Le/at.scale),y:at.y-(M-at.y)*(Le/at.scale)}))},[h]),{visibleNodes:O,highlightedEdges:Q}=L.useMemo(()=>{if(!e)return{visibleNodes:[],highlightedEdges:new Set};const C=M=>{if(!o)return!0;const Le=o.toLowerCase();return M.name.toLowerCase().includes(Le)||M.description.toLowerCase().includes(Le)},F=M=>M.type==="skill"&&(M.name.endsWith("-creator")||M.name==="agent-skill-visualizer"),D=M=>!a&&F(M)?!1:C(M),B=new Set;l&&(B.add(l.id),e.edges.forEach(M=>{M.source===l.id&&B.add(M.target),M.target===l.id&&B.add(M.source)}));const le=new Set;return l&&e.edges.forEach(M=>{(M.source===l.id||M.target===l.id)&&le.add(`${M.source}-${M.target}`)}),{visibleNodes:e.nodes.filter(D),highlightedEdges:le}},[e,o,l,a]);return t?c.jsx("div",{className:"min-h-screen bg-gray-900 flex items-center justify-center",children:c.jsxs("div",{className:"text-center",children:[c.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 mx-auto mb-4"}),c.jsx("p",{className:"text-gray-400",children:"κ·Έλν λ°μ΄ν° λ‘λ© μ€..."})]})}):n||!e?c.jsx("div",{className:"min-h-screen bg-gray-900 flex items-center justify-center",children:c.jsxs("div",{className:"text-center max-w-md px-4",children:[c.jsx("div",{className:"text-red-500 text-5xl mb-4",children:"β οΈ"}),c.jsx("h1",{className:"text-xl font-bold text-white mb-2",children:"λ°μ΄ν° λ‘λ μ€ν¨"}),c.jsx("p",{className:"text-gray-400 mb-4",children:n}),c.jsx("button",{onClick:r,className:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",children:"λ€μ μλ"})]})}):c.jsxs("div",{className:"h-screen w-screen bg-gray-900 flex overflow-hidden",children:[c.jsxs("div",{className:"flex-1 relative",children:[c.jsxs("div",{className:"absolute top-4 left-4 right-4 z-20 flex items-center gap-4",children:[c.jsx("div",{className:"flex-1 max-w-md",children:c.jsx(op,{value:o,onChange:u})}),c.jsx("button",{onClick:()=>{f(Ze(e.nodes,e.edges)),g({scale:1,x:0,y:0})},className:"p-2 bg-gray-800 rounded-lg text-gray-400 hover:text-white hover:bg-gray-700 transition-colors",title:"λ μ΄μμ μ΄κΈ°ν",children:c.jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:c.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"})})})]}),c.jsx("div",{className:"absolute bottom-4 left-4 z-20",children:c.jsx(ip,{metadata:e.metadata})}),c.jsxs("div",{className:"absolute top-4 right-4 z-20 flex items-center gap-2",children:[c.jsxs("button",{onClick:()=>p(!a),className:`px-3 py-2 rounded-lg transition-colors flex items-center gap-2 ${a?"bg-purple-600 text-white":"bg-gray-800 text-gray-400"}`,title:"Creator μ€ν¬ νμ/μ¨κΈ°κΈ°",children:[c.jsx("span",{className:"text-sm",children:"π οΈ"}),"Creator"]}),c.jsxs("button",{onClick:()=>d(!P),className:`px-3 py-2 rounded-lg transition-colors flex items-center gap-2 ${P?"bg-blue-600 text-white":"bg-gray-800 text-gray-400"}`,title:"Activity Stream ν¨λ",children:[c.jsx("span",{className:`w-2 h-2 rounded-full ${z?"bg-green-400 animate-pulse":"bg-red-400"}`}),"Activity"]}),c.jsx("button",{onClick:()=>k(!x),className:`p-2 rounded-lg transition-colors ${x?"bg-green-600 text-white":"bg-gray-800 text-gray-400"}`,title:x?"Live λͺ¨λ λκΈ°":"Live λͺ¨λ μΌκΈ°",children:x?"π΄":"βΈοΈ"})]}),P&&c.jsx("div",{className:"absolute top-16 right-4 z-20 w-72",children:c.jsx(up,{activeNodes:j,events:_,isConnected:z,error:K})}),c.jsx("div",{ref:R,className:"absolute inset-0 overflow-hidden cursor-grab active:cursor-grabbing",onMouseDown:Sn,onMouseMove:Nn,onMouseUp:N,onMouseLeave:N,onWheel:T,onClick:()=>i(null),children:c.jsxs("div",{style:{transform:`translate(${h.x}px, ${h.y}px) scale(${h.scale})`,transformOrigin:"0 0",width:"6000px",height:"4000px",position:"relative"},children:[c.jsx("svg",{className:"absolute inset-0 pointer-events-none z-10",style:{width:"6000px",height:"4000px"},children:e.edges.map(C=>{const F=mr(C);if(!F)return null;const D=`${C.source}-${C.target}`,B=Q.has(D),le=l&&!Q.has(D);return c.jsx(Ec,{start:F.start,end:F.end,type:C.type,isHighlighted:B,isDimmed:!!le},D)})}),O.map(C=>{const F=s[C.id];if(!F)return null;const D=l&&l.id!==C.id&&!e.edges.some(B=>B.source===l.id&&B.target===C.id||B.target===l.id&&B.source===C.id);return c.jsx("div",{style:{opacity:D?.3:1,transition:"opacity 0.2s"},children:c.jsx(Nc,{node:C,position:F,isSelected:(l==null?void 0:l.id)===C.id,isActive:j.has(C.id),onMouseDown:Tl,onClick:i})},C.id)})]})})]}),c.jsx("div",{className:`w-96 bg-gray-800 border-l border-gray-700 transition-transform duration-300 ${l?"translate-x-0":"translate-x-full"}`,style:{position:"absolute",right:0,top:0,bottom:0},children:c.jsx(lp,{node:l,data:e,onClose:()=>i(null),onOpenCommandModal:()=>S(!0)})}),v&&c.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 backdrop-blur-sm",children:c.jsxs("div",{className:"bg-gray-900 border border-gray-700 rounded-lg shadow-2xl max-w-3xl w-full mx-4 max-h-[80vh] overflow-y-auto",children:[c.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-gray-700",children:[c.jsxs("h2",{className:"text-xl font-bold text-white flex items-center gap-2",children:[c.jsx("span",{children:"β‘"}),"Claude Code μ€ν"]}),c.jsx("button",{onClick:()=>S(!1),className:"text-gray-400 hover:text-white transition-colors","aria-label":"Close modal",children:c.jsx("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:c.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),c.jsx("div",{className:"p-4",children:c.jsx(ap,{nodes:e.nodes,selectedNode:l})})]})})]})}Sc(document.getElementById("root")).render(c.jsx(L.StrictMode,{children:c.jsx(pp,{})}));
|
package/dist/index.html
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
overflow: hidden;
|
|
15
15
|
}
|
|
16
16
|
</style>
|
|
17
|
-
<script type="module" crossorigin src="./assets/index-
|
|
17
|
+
<script type="module" crossorigin src="./assets/index-DpR-d7WJ.js"></script>
|
|
18
18
|
<link rel="stylesheet" crossorigin href="./assets/index-lL8g_3Ei.css">
|
|
19
19
|
</head>
|
|
20
20
|
<body>
|
package/lib/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAuBA,wBAAsB,GAAG,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAuBA,wBAAsB,GAAG,kBAgJxB"}
|
package/lib/cli.js
CHANGED
|
@@ -27,6 +27,22 @@ export async function run() {
|
|
|
27
27
|
const options = program.opts();
|
|
28
28
|
const cwd = process.cwd();
|
|
29
29
|
try {
|
|
30
|
+
// 0. Check Node.js version
|
|
31
|
+
const nodeVersion = process.version;
|
|
32
|
+
const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0]);
|
|
33
|
+
const REQUIRED_NODE_VERSION = 18;
|
|
34
|
+
if (majorVersion < REQUIRED_NODE_VERSION) {
|
|
35
|
+
console.error(chalk.red('β Node.js version too old'));
|
|
36
|
+
console.error(chalk.yellow(` Current: ${nodeVersion}`));
|
|
37
|
+
console.error(chalk.yellow(` Required: Node.js ${REQUIRED_NODE_VERSION}+`));
|
|
38
|
+
console.error('');
|
|
39
|
+
console.error(chalk.dim(' Download the latest version:'));
|
|
40
|
+
console.error(chalk.dim(' https://nodejs.org/'));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
if (options.verbose) {
|
|
44
|
+
console.log(chalk.dim(`Node.js ${nodeVersion} β`));
|
|
45
|
+
}
|
|
30
46
|
// 1. Validate Claude Code project
|
|
31
47
|
if (options.verbose) {
|
|
32
48
|
console.log(chalk.dim('Checking for .claude directory...'));
|
package/lib/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/lib/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAsKzE"}
|
package/lib/server.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import * as fs from 'fs/promises';
|
|
3
3
|
import * as path from 'path';
|
|
4
|
+
import { exec, execFile } from 'child_process';
|
|
4
5
|
/**
|
|
5
6
|
* Start the Express server for serving the visualizer webapp
|
|
6
7
|
*/
|
|
7
8
|
export async function startServer(options) {
|
|
8
9
|
const app = express();
|
|
10
|
+
// Parse JSON request bodies
|
|
11
|
+
app.use(express.json());
|
|
9
12
|
// CORS headers for development
|
|
10
13
|
app.use((req, res, next) => {
|
|
11
14
|
res.header('Access-Control-Allow-Origin', '*');
|
|
@@ -13,6 +16,77 @@ export async function startServer(options) {
|
|
|
13
16
|
res.header('Access-Control-Allow-Headers', 'Content-Type');
|
|
14
17
|
next();
|
|
15
18
|
});
|
|
19
|
+
// API: Execute Claude Code commands
|
|
20
|
+
app.post('/api/execute', (req, res) => {
|
|
21
|
+
const { instruction, skipPermissions } = req.body;
|
|
22
|
+
// Validate instruction
|
|
23
|
+
if (!instruction || typeof instruction !== 'string' || !instruction.trim()) {
|
|
24
|
+
return res.status(400).json({ error: 'instruction is required and must be a non-empty string' });
|
|
25
|
+
}
|
|
26
|
+
const platform = process.platform;
|
|
27
|
+
if (platform === 'darwin') {
|
|
28
|
+
// macOS - AppleScript using execFile to avoid shell escaping issues
|
|
29
|
+
const flag = skipPermissions ? '--dangerously-skip-permissions ' : '';
|
|
30
|
+
// Build the shell command that will run in Terminal
|
|
31
|
+
// Use JSON.stringify to properly escape for the shell
|
|
32
|
+
const shellCommand = `cd ${JSON.stringify(options.projectRoot)} && claude ${flag}${JSON.stringify(instruction)}`;
|
|
33
|
+
// Build AppleScript - use JSON.stringify again for AppleScript string escaping
|
|
34
|
+
const applescript = `tell application "Terminal"\nactivate\ndo script ${JSON.stringify(shellCommand)}\nend tell`;
|
|
35
|
+
// Use execFile with arguments array to avoid shell escaping
|
|
36
|
+
execFile('osascript', ['-e', applescript], (error) => {
|
|
37
|
+
if (error) {
|
|
38
|
+
console.error('Execute error:', error);
|
|
39
|
+
return res.status(500).json({
|
|
40
|
+
error: error.message,
|
|
41
|
+
message: 'Failed to open terminal. Make sure Terminal.app is available.'
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
res.json({
|
|
45
|
+
status: 'started',
|
|
46
|
+
instruction,
|
|
47
|
+
message: 'Terminal started with Claude Code command'
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else if (platform === 'win32') {
|
|
52
|
+
// Windows
|
|
53
|
+
const flag = skipPermissions ? '--dangerously-skip-permissions ' : '';
|
|
54
|
+
const terminalCmd = `start cmd /K "cd /d "${options.projectRoot}" && claude ${flag}"${instruction}""`;
|
|
55
|
+
exec(terminalCmd, (error) => {
|
|
56
|
+
if (error) {
|
|
57
|
+
console.error('Execute error:', error);
|
|
58
|
+
return res.status(500).json({
|
|
59
|
+
error: error.message,
|
|
60
|
+
message: 'Failed to open terminal.'
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
res.json({
|
|
64
|
+
status: 'started',
|
|
65
|
+
instruction,
|
|
66
|
+
message: 'Terminal started with Claude Code command'
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Linux
|
|
72
|
+
const flag = skipPermissions ? '--dangerously-skip-permissions ' : '';
|
|
73
|
+
const terminalCmd = `gnome-terminal -- bash -c "cd '${options.projectRoot}' && claude ${flag}'${instruction.replace(/'/g, "'\\''")}'; exec bash"`;
|
|
74
|
+
exec(terminalCmd, (error) => {
|
|
75
|
+
if (error) {
|
|
76
|
+
console.error('Execute error:', error);
|
|
77
|
+
return res.status(500).json({
|
|
78
|
+
error: error.message,
|
|
79
|
+
message: 'Failed to open terminal. Make sure gnome-terminal is available.'
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
res.json({
|
|
83
|
+
status: 'started',
|
|
84
|
+
instruction,
|
|
85
|
+
message: 'Terminal started with Claude Code command'
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
});
|
|
16
90
|
// API: Serve graph data from user's project
|
|
17
91
|
app.get('/api/graph-data', async (req, res) => {
|
|
18
92
|
try {
|
package/lib/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAA8B,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "viewcc",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Interactive visualization for Claude Code projects - run with npx",
|
|
5
5
|
"main": "./lib/cli.js",
|
|
6
6
|
"bin": {
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
},
|
|
51
51
|
"repository": {
|
|
52
52
|
"type": "git",
|
|
53
|
-
"url": "https://github.com/
|
|
53
|
+
"url": "https://github.com/kubony/claude-code-visualizer.git"
|
|
54
54
|
},
|
|
55
55
|
"bugs": {
|
|
56
|
-
"url": "https://github.com/
|
|
56
|
+
"url": "https://github.com/kubony/claude-code-visualizer/issues"
|
|
57
57
|
},
|
|
58
|
-
"homepage": "https://github.com/
|
|
58
|
+
"homepage": "https://github.com/kubony/claude-code-visualizer#readme"
|
|
59
59
|
}
|