agentstudio 0.1.8 → 0.1.10
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 +481 -37
- package/README.zh-CN.md +525 -0
- package/{dist → backend/dist}/bin/agentstudio.js +7 -5
- package/backend/dist/bin/agentstudio.js.map +1 -0
- package/backend/dist/index.d.ts +3 -0
- package/backend/dist/index.d.ts.map +1 -0
- package/{dist → backend/dist}/index.js +9 -28
- package/{dist → backend/dist}/index.js.map +1 -1
- package/{dist → backend/dist}/routes/settings.js +1 -1
- package/{dist → backend/dist}/routes/settings.js.map +1 -1
- package/package.json +35 -43
- package/.cc-sessions/ppt-editor/session_1756253549429_uau1hm6lh.json +0 -665
- package/.cc-sessions/ppt-editor/session_1756257240855_v0wa26mde.json +0 -394
- package/.env +0 -15
- package/dist/bin/agentstudio.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/docs/chat-clean-1.svg +0 -1
- package/docs/chat-clean.md +0 -60
- package/docs/chat-comprehensive-1.svg +0 -1
- package/docs/chat-comprehensive.md +0 -166
- package/docs/chat_api_sequence_diagram.md +0 -58
- package/docs/command-detection-logic.md +0 -306
- package/docs/command-detection-sequence.md +0 -186
- package/frontend/dist/assets/AgentsPage-Dqb_aqAA.js +0 -1
- package/frontend/dist/assets/ChatPage-BvQmXfcP.css +0 -1
- package/frontend/dist/assets/ChatPage-L8Paywyc.js +0 -91
- package/frontend/dist/assets/CommandForm-DLl7EIMS.js +0 -7
- package/frontend/dist/assets/CommandsPage-Bzavq0Ec.js +0 -1
- package/frontend/dist/assets/DashboardPage-B3o4AYFT.js +0 -15
- package/frontend/dist/assets/FileBrowser-DL3ayaqb.js +0 -1
- package/frontend/dist/assets/GeneralSettingsPage-CBN_de-V.js +0 -1
- package/frontend/dist/assets/LandingPage-Dl4ioKos.js +0 -1
- package/frontend/dist/assets/LoginPage-4QqRdiSi.js +0 -12
- package/frontend/dist/assets/McpPage-CY3tYiqj.js +0 -39
- package/frontend/dist/assets/MemorySettingsPage-DGxrok5K.js +0 -1
- package/frontend/dist/assets/ProjectSelector-hgmGYVFh.js +0 -1
- package/frontend/dist/assets/ProjectsPage-D399IM0c.js +0 -14
- package/frontend/dist/assets/SettingsLayout-CL_K-lzJ.js +0 -1
- package/frontend/dist/assets/SubagentForm-DXtTTIKg.js +0 -7
- package/frontend/dist/assets/SubagentsPage-Chbhj8p2.js +0 -1
- package/frontend/dist/assets/ToastTestPage-DT4wuN5C.js +0 -1
- package/frontend/dist/assets/UnifiedToolSelector-CsM9qBvs.js +0 -1
- package/frontend/dist/assets/VersionSettingsPage-74Q-LVgA.js +0 -5
- package/frontend/dist/assets/agents-ClAzIJTw.js +0 -1
- package/frontend/dist/assets/agents-DwCY2K8p.css +0 -1
- package/frontend/dist/assets/authFetch-BATQyPG5.js +0 -1
- package/frontend/dist/assets/data-structures-DLJedtzx.js +0 -27
- package/frontend/dist/assets/dateFormat-CXa8VnEC.js +0 -1
- package/frontend/dist/assets/index-B9YHa7XT.css +0 -1
- package/frontend/dist/assets/index-B_CTNvca.js +0 -268
- package/frontend/dist/assets/monaco-editor-C7Z4sOhS.js +0 -19
- package/frontend/dist/assets/syntax-highlighting-YWvMU4Hm.js +0 -24
- package/frontend/dist/assets/tabManager-DV8urRBM.js +0 -30
- package/frontend/dist/assets/table-D6q1rytw.js +0 -1
- package/frontend/dist/assets/tools-C4EPanYi.js +0 -1
- package/frontend/dist/assets/ui-components-Cw21Epuw.js +0 -481
- package/frontend/dist/assets/useAgents-DwnOE1_k.js +0 -2
- package/frontend/dist/assets/useClaudeVersions-CQdGnCqv.js +0 -1
- package/frontend/dist/assets/useCommands-CCVaurbt.js +0 -1
- package/frontend/dist/cc-studio.png +0 -0
- package/frontend/dist/index.html +0 -70
- package/frontend/dist/vite.svg +0 -1
- package/scripts/README.md +0 -76
- package/scripts/fix-project-names.js +0 -113
- package/scripts/migrate-projects.js +0 -159
- package/shared/index.d.ts +0 -6
- package/shared/index.d.ts.map +0 -1
- package/shared/index.js +0 -7
- package/shared/types/agents.d.ts +0 -80
- package/shared/types/agents.d.ts.map +0 -1
- package/shared/types/agents.js +0 -145
- package/shared/types/claude-history.d.ts +0 -61
- package/shared/types/claude-history.d.ts.map +0 -1
- package/shared/types/claude-history.js +0 -2
- package/shared/types/claude-versions.d.ts +0 -40
- package/shared/types/claude-versions.d.ts.map +0 -1
- package/shared/types/claude-versions.js +0 -1
- package/shared/types/commands.d.ts +0 -48
- package/shared/types/commands.d.ts.map +0 -1
- package/shared/types/commands.js +0 -19
- package/shared/types/projects.d.ts +0 -35
- package/shared/types/projects.d.ts.map +0 -1
- package/shared/types/projects.js +0 -2
- package/shared/types/subagents.d.ts +0 -26
- package/shared/types/subagents.d.ts.map +0 -1
- package/shared/types/subagents.js +0 -1
- package/shared/utils/agentStorage.d.ts +0 -27
- package/shared/utils/agentStorage.d.ts.map +0 -1
- package/shared/utils/agentStorage.js +0 -392
- package/shared/utils/claudeVersionStorage.d.ts +0 -16
- package/shared/utils/claudeVersionStorage.d.ts.map +0 -1
- package/shared/utils/claudeVersionStorage.js +0 -230
- package/shared/utils/projectMetadataStorage.d.ts +0 -94
- package/shared/utils/projectMetadataStorage.d.ts.map +0 -1
- package/shared/utils/projectMetadataStorage.js +0 -422
- package/shared/utils/toolMapping.d.ts +0 -56
- package/shared/utils/toolMapping.d.ts.map +0 -1
- package/shared/utils/toolMapping.js +0 -71
- package/src/bin/agentstudio.ts +0 -130
- package/src/index.ts +0 -183
- package/src/middleware/auth.ts +0 -26
- package/src/routes/agents.ts +0 -884
- package/src/routes/auth.ts +0 -73
- package/src/routes/commands.ts +0 -441
- package/src/routes/files.ts +0 -352
- package/src/routes/mcp.ts +0 -751
- package/src/routes/media.ts +0 -140
- package/src/routes/projects.ts +0 -601
- package/src/routes/sessions.ts +0 -809
- package/src/routes/settings.ts +0 -718
- package/src/routes/slides.ts +0 -170
- package/src/routes/subagents.ts +0 -364
- package/src/services/claudeSession.ts +0 -293
- package/src/services/messageQueue.ts +0 -71
- package/src/services/sessionManager.ts +0 -532
- package/src/utils/jwt.ts +0 -36
- package/tsconfig.json +0 -27
- /package/{dist → backend/dist}/bin/agentstudio.d.ts +0 -0
- /package/{dist → backend/dist}/bin/agentstudio.d.ts.map +0 -0
- /package/{dist → backend/dist}/middleware/auth.d.ts +0 -0
- /package/{dist → backend/dist}/middleware/auth.d.ts.map +0 -0
- /package/{dist → backend/dist}/middleware/auth.js +0 -0
- /package/{dist → backend/dist}/middleware/auth.js.map +0 -0
- /package/{dist → backend/dist}/routes/agents.d.ts +0 -0
- /package/{dist → backend/dist}/routes/agents.d.ts.map +0 -0
- /package/{dist → backend/dist}/routes/agents.js +0 -0
- /package/{dist → backend/dist}/routes/agents.js.map +0 -0
- /package/{dist → backend/dist}/routes/auth.d.ts +0 -0
- /package/{dist → backend/dist}/routes/auth.d.ts.map +0 -0
- /package/{dist → backend/dist}/routes/auth.js +0 -0
- /package/{dist → backend/dist}/routes/auth.js.map +0 -0
- /package/{dist → backend/dist}/routes/commands.d.ts +0 -0
- /package/{dist → backend/dist}/routes/commands.d.ts.map +0 -0
- /package/{dist → backend/dist}/routes/commands.js +0 -0
- /package/{dist → backend/dist}/routes/commands.js.map +0 -0
- /package/{dist → backend/dist}/routes/files.d.ts +0 -0
- /package/{dist → backend/dist}/routes/files.d.ts.map +0 -0
- /package/{dist → backend/dist}/routes/files.js +0 -0
- /package/{dist → backend/dist}/routes/files.js.map +0 -0
- /package/{dist → backend/dist}/routes/mcp.d.ts +0 -0
- /package/{dist → backend/dist}/routes/mcp.d.ts.map +0 -0
- /package/{dist → backend/dist}/routes/mcp.js +0 -0
- /package/{dist → backend/dist}/routes/mcp.js.map +0 -0
- /package/{dist → backend/dist}/routes/media.d.ts +0 -0
- /package/{dist → backend/dist}/routes/media.d.ts.map +0 -0
- /package/{dist → backend/dist}/routes/media.js +0 -0
- /package/{dist → backend/dist}/routes/media.js.map +0 -0
- /package/{dist → backend/dist}/routes/projects.d.ts +0 -0
- /package/{dist → backend/dist}/routes/projects.d.ts.map +0 -0
- /package/{dist → backend/dist}/routes/projects.js +0 -0
- /package/{dist → backend/dist}/routes/projects.js.map +0 -0
- /package/{dist → backend/dist}/routes/sessions.d.ts +0 -0
- /package/{dist → backend/dist}/routes/sessions.d.ts.map +0 -0
- /package/{dist → backend/dist}/routes/sessions.js +0 -0
- /package/{dist → backend/dist}/routes/sessions.js.map +0 -0
- /package/{dist → backend/dist}/routes/settings.d.ts +0 -0
- /package/{dist → backend/dist}/routes/settings.d.ts.map +0 -0
- /package/{dist → backend/dist}/routes/slides.d.ts +0 -0
- /package/{dist → backend/dist}/routes/slides.d.ts.map +0 -0
- /package/{dist → backend/dist}/routes/slides.js +0 -0
- /package/{dist → backend/dist}/routes/slides.js.map +0 -0
- /package/{dist → backend/dist}/routes/subagents.d.ts +0 -0
- /package/{dist → backend/dist}/routes/subagents.d.ts.map +0 -0
- /package/{dist → backend/dist}/routes/subagents.js +0 -0
- /package/{dist → backend/dist}/routes/subagents.js.map +0 -0
- /package/{dist → backend/dist}/services/claudeSession.d.ts +0 -0
- /package/{dist → backend/dist}/services/claudeSession.d.ts.map +0 -0
- /package/{dist → backend/dist}/services/claudeSession.js +0 -0
- /package/{dist → backend/dist}/services/claudeSession.js.map +0 -0
- /package/{dist → backend/dist}/services/messageQueue.d.ts +0 -0
- /package/{dist → backend/dist}/services/messageQueue.d.ts.map +0 -0
- /package/{dist → backend/dist}/services/messageQueue.js +0 -0
- /package/{dist → backend/dist}/services/messageQueue.js.map +0 -0
- /package/{dist → backend/dist}/services/sessionManager.d.ts +0 -0
- /package/{dist → backend/dist}/services/sessionManager.d.ts.map +0 -0
- /package/{dist → backend/dist}/services/sessionManager.js +0 -0
- /package/{dist → backend/dist}/services/sessionManager.js.map +0 -0
- /package/{dist → backend/dist}/utils/jwt.d.ts +0 -0
- /package/{dist → backend/dist}/utils/jwt.d.ts.map +0 -0
- /package/{dist → backend/dist}/utils/jwt.js +0 -0
- /package/{dist → backend/dist}/utils/jwt.js.map +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{f as h,h as w,A as o}from"./agents-ClAzIJTw.js";import{a as i}from"./authFetch-BATQyPG5.js";const O=(s,e)=>h({queryKey:["agents",s,e],queryFn:async()=>{const t=new URL(`${o}/agents`),n=await i(t.toString());if(!n.ok)throw new Error("Failed to fetch agents");return n.json()}}),C=s=>h({queryKey:["agent",s],queryFn:async()=>{const e=await i(`${o}/agents/${s}`);if(!e.ok)throw new Error("Failed to fetch agent");return e.json()},enabled:!!s}),P=()=>w({mutationFn:async s=>{const e=await i(`${o}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!e.ok)throw new Error("Failed to create agent");return e.json()}}),R=()=>w({mutationFn:async({agentId:s,data:e})=>{const t=await i(`${o}/agents/${s}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error("Failed to update agent");return t.json()}}),x=()=>w({mutationFn:async s=>{const e=await i(`${o}/agents/${s}`,{method:"DELETE"});if(!e.ok)throw new Error("Failed to delete agent");return e.json()}}),N=(s,e,t)=>h({queryKey:["agent-sessions",s,e,t],queryFn:async()=>{const n=new URL(`${o}/sessions/${s}`);e&&e.trim()&&n.searchParams.append("search",e.trim()),t&&n.searchParams.set("projectPath",t);const r=await i(n.toString());if(!r.ok)throw new Error("Failed to fetch agent sessions");return r.json()},enabled:!!s}),D=(s,e,t)=>(console.log("🎣 useAgentSessionMessages hook called:",{agentId:s,sessionId:e,projectPath:t,enabled:!!s&&!!e}),h({queryKey:["agent-session-messages",s,e,t],queryFn:async()=>{if(console.log("🎣 Fetching session messages for:",{agentId:s,sessionId:e,projectPath:t}),!e)return{messages:[]};const n=new URL(`${o}/sessions/${s}/${e}/messages`);t&&n.searchParams.set("projectPath",t),console.log("🎣 Fetching from URL:",n.toString());const r=await i(n.toString());if(!r.ok)throw console.error("🎣 Fetch failed:",r.status,r.statusText),new Error("Failed to fetch agent session messages");const u=await r.json();console.log("🎣 Raw API response:",{messageCount:u.messages?.length});const p=u.messages.map(y=>({...y,timestamp:new Date(y.timestamp)}));return console.log("🎣 Converted messages:",{messageCount:p.length}),{...u,messages:p}},enabled:!!s&&!!e})),M=()=>({mutateAsync:async({agentId:s,message:e,images:t,context:n,sessionId:r,projectPath:u,mcpTools:p,permissionMode:y,model:m,claudeVersion:S,abortController:f,onMessage:E,onError:F})=>{try{console.log("🚀 Starting SSE request to:",`${o}/agents/chat`);const a=await i(`${o}/agents/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:s,message:e,images:t,context:n,sessionId:r,projectPath:u,mcpTools:p,permissionMode:y,model:m,claudeVersion:S}),signal:f?.signal});if(console.log("🚀 SSE response received:",{status:a.status,statusText:a.statusText,headers:Object.fromEntries(a.headers.entries())}),!a.ok)throw new Error(`Agent chat request failed: ${a.status} ${a.statusText}`);const d=a.body?.getReader(),j=new TextDecoder;if(!d)throw new Error("No response body");for(console.log("🚀 Starting SSE stream reading...");;){if(f?.signal.aborted)throw d.cancel(),new DOMException("Request aborted","AbortError");const{done:$,value:b}=await d.read();if($)break;const A=j.decode(b).split(`
|
|
2
|
-
`);for(const g of A)if(g.startsWith("data: "))try{const c=g.slice(6);console.log("🔄 Raw SSE data:",c.length>200?c.substring(0,200)+"...":c);const l=JSON.parse(c);console.log("🔄 Parsed SSE event:",{type:l.type,subtype:l.subtype,hasMessage:!!l.message,messageContentBlocks:l.message?.content?.length||0}),E?.(l)}catch(c){console.error("❌ Failed to parse SSE data:",g,"Error:",c)}else g.trim()&&console.log("🔄 Non-data SSE line:",g)}}catch(a){throw console.error("Agent SSE error:",a),F?.(a),a}}}),U=()=>w({mutationFn:async({agentId:s,projectName:e,parentDirectory:t})=>{const n=await i(`${o}/agents/projects/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:s,projectName:e,parentDirectory:t})});if(!n.ok){const r=await n.json();throw new Error(r.error||"Failed to create project")}return n.json()}}),v=s=>h({queryKey:["agent-projects",s],queryFn:async()=>{const e=await i(`${o}/projects/agents/${s}`);if(!e.ok)throw new Error("Failed to fetch agent projects");return e.json()},enabled:!!s}),J=()=>w({mutationFn:async s=>{const e=await i(`${o}/agents/sessions/${s}/interrupt`,{method:"POST"});if(!e.ok){const t=await e.json();throw new Error(t.error||"Failed to interrupt session")}return e.json()}});export{R as a,x as b,P as c,J as d,N as e,D as f,M as g,C as h,U as i,v as j,O as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as l,e as i,h as u,A as o}from"./agents-ClAzIJTw.js";import{a}from"./authFetch-BATQyPG5.js";import{u as y}from"./index-B_CTNvca.js";import{r as d}from"./monaco-editor-C7Z4sOhS.js";const w=t=>{const{currentServiceId:r}=y();d.useRef(!1);const e=!1,s=!0,n=l({queryKey:["claude-versions",r],queryFn:async()=>{const c=await a(`${o}/settings/claude-versions`);if(!c.ok)throw new Error("Failed to fetch Claude versions");return c.json()},enabled:s,retry:!1,refetchOnWindowFocus:!1,refetchOnReconnect:!1,staleTime:3e4});return d.useEffect(()=>{},[n.isError,n.isLoading,r,s,e]),n},h=()=>{const t=i();return u({mutationFn:async r=>{const e=await a(`${o}/settings/claude-versions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!e.ok){const s=await e.json();throw new Error(s.message||"Failed to create Claude version")}return e.json()},onSuccess:()=>{t.invalidateQueries({queryKey:["claude-versions"]})}})},C=()=>{const t=i();return u({mutationFn:async({id:r,data:e})=>{const s=await a(`${o}/settings/claude-versions/${r}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!s.ok){const n=await s.json();throw new Error(n.message||"Failed to update Claude version")}return s.json()},onSuccess:()=>{t.invalidateQueries({queryKey:["claude-versions"]})}})},g=()=>{const t=i();return u({mutationFn:async r=>{const e=await a(`${o}/settings/claude-versions/${r}`,{method:"DELETE"});if(!e.ok){const s=await e.json();throw new Error(s.message||"Failed to delete Claude version")}},onSuccess:()=>{t.invalidateQueries({queryKey:["claude-versions"]})}})},E=()=>{const t=i();return u({mutationFn:async r=>{const e=await a(`${o}/settings/claude-versions/${r}/set-default`,{method:"PUT"});if(!e.ok){const s=await e.json();throw new Error(s.message||"Failed to set default Claude version")}},onSuccess:()=>{t.invalidateQueries({queryKey:["claude-versions"]})}})};export{h as a,C as b,g as c,E as d,w as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as h,e as p,h as d,A as r,i as w}from"./agents-ClAzIJTw.js";import{a as s}from"./authFetch-BATQyPG5.js";const y=async(e={})=>{try{const o=new URLSearchParams;e.scope&&e.scope!=="all"&&o.append("scope",e.scope),e.namespace&&o.append("namespace",e.namespace),e.search&&o.append("search",e.search);const t=await s(`${r}/commands?${o}`);if(!t.ok)throw new Error("Failed to fetch commands");return t.json()}catch(o){if(w(o))return[];throw o}},f=async e=>{const o=await s(`${r}/commands`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!o.ok){const t=await o.json();throw new Error(t.error||"Failed to create command")}return o.json()},l=async(e,o)=>{const t=await s(`${r}/commands/${encodeURIComponent(e)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!t.ok){const a=await t.json();throw new Error(a.error||"Failed to update command")}return t.json()},C=async e=>{const o=await s(`${r}/commands/${encodeURIComponent(e)}`,{method:"DELETE"});if(!o.ok){const t=await o.json();throw new Error(t.error||"Failed to delete command")}},D=e=>h({queryKey:["commands",e],queryFn:()=>y(e),staleTime:1e3*60*5,retry:!1}),U=()=>{const e=p();return d({mutationFn:f,onSuccess:()=>{e.invalidateQueries({queryKey:["commands"]})}})},R=()=>{const e=p();return d({mutationFn:({id:o,updates:t})=>l(o,t),onSuccess:o=>{e.invalidateQueries({queryKey:["commands"]}),e.setQueryData(["commands",o.id],o)}})},k=()=>{const e=p();return d({mutationFn:C,onSuccess:(o,t)=>{e.invalidateQueries({queryKey:["commands"]}),e.removeQueries({queryKey:["commands",t]})}})},P=async(e,o={})=>{if(!e)return[];let t;if(e.startsWith("/"))t=e;else{const m=await s(`${r}/projects`);if(!m.ok)throw new Error("Failed to fetch project info");const n=(await m.json()).projects.find(u=>u.id===e);if(!n)throw new Error("Project not found");t=n.path}const a=new URLSearchParams;a.append("scope","project"),a.append("projectPath",t),o.namespace&&a.append("namespace",o.namespace),o.search&&a.append("search",o.search);const c=await s(`${r}/commands?${a}`);if(!c.ok)throw new Error("Failed to fetch project commands");return c.json()},Q=e=>h({queryKey:["commands","project",e.projectId,e.search],queryFn:()=>P(e.projectId,{search:e.search}),staleTime:1e3*60*5}),E=async(e,o)=>{const t=await s(`${r}/agents/projects`);if(!t.ok)throw new Error("Failed to fetch project info");const c=(await t.json()).projects.find(n=>n.id===e);if(!c)throw new Error("Project not found");const m=new URLSearchParams;m.append("projectPath",c.path);const i=await s(`${r}/commands?${m}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!i.ok){const n=await i.json();throw new Error(n.error||"Failed to create command")}return i.json()},F=async(e,o)=>{const t=await s(`${r}/agents/projects`);if(!t.ok)throw new Error("Failed to fetch project info");const c=(await t.json()).projects.find(j=>j.id===e);if(!c)throw new Error("Project not found");const{id:m,updates:i}=o,n=new URLSearchParams;n.append("projectPath",c.path);const u=await s(`${r}/commands/${encodeURIComponent(m)}?${n}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!u.ok){const j=await u.json();throw new Error(j.error||"Failed to update command")}return u.json()},$=async(e,o)=>{const t=await s(`${r}/agents/projects`);if(!t.ok)throw new Error("Failed to fetch project info");const c=(await t.json()).projects.find(n=>n.id===e);if(!c)throw new Error("Project not found");const m=new URLSearchParams;m.append("projectPath",c.path);const i=await s(`${r}/commands/${encodeURIComponent(o)}?${m}`,{method:"DELETE"});if(!i.ok){const n=await i.json();throw new Error(n.error||"Failed to delete command")}},T=e=>{const o=p();return d({mutationFn:t=>E(e,t),onSuccess:()=>{o.invalidateQueries({queryKey:["commands","project",e]})}})},K=e=>{const o=p();return d({mutationFn:t=>F(e,t),onSuccess:t=>{o.invalidateQueries({queryKey:["commands","project",e]}),o.setQueryData(["commands",t.id],t)}})},v=e=>{const o=p();return d({mutationFn:t=>$(e,t),onSuccess:(t,a)=>{o.invalidateQueries({queryKey:["commands","project",e]}),o.removeQueries({queryKey:["commands",a]})}})};export{Q as a,v as b,k as c,T as d,U as e,K as f,R as g,D as u};
|
|
Binary file
|
package/frontend/dist/index.html
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="zh-CN">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<link rel="icon" type="image/png" href="/cc-studio.png" />
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
-
|
|
8
|
-
<!-- Primary Meta Tags -->
|
|
9
|
-
<title>AgentStudio - 智能体工作平台 | Claude Code 驱动的 AI 助手</title>
|
|
10
|
-
<meta name="title" content="AgentStudio - 智能体工作平台 | Claude Code 驱动的 AI 助手" />
|
|
11
|
-
<meta name="description" content="基于 Claude Code SDK 的现代化个人智能体工作平台。通过直观的 Web 界面,轻松访问强大的 AI 能力,支持多种大语言模型,提升工作效率。" />
|
|
12
|
-
<meta name="keywords" content="AI助手,智能体,Agent,Claude Code,大语言模型,LLM,工作平台,效率工具,人工智能,聊天机器人" />
|
|
13
|
-
<meta name="author" content="AgentStudio Team" />
|
|
14
|
-
<meta name="robots" content="index, follow" />
|
|
15
|
-
|
|
16
|
-
<!-- Open Graph / Facebook -->
|
|
17
|
-
<meta property="og:type" content="website" />
|
|
18
|
-
<meta property="og:url" content="https://agentstudio.cc/" />
|
|
19
|
-
<meta property="og:title" content="AgentStudio - 智能体工作平台 | Claude Code 驱动的 AI 助手" />
|
|
20
|
-
<meta property="og:description" content="基于 Claude Code SDK 的现代化个人智能体工作平台。通过直观的 Web 界面,轻松访问强大的 AI 能力,支持多种大语言模型,提升工作效率。" />
|
|
21
|
-
<meta property="og:image" content="https://agentstudio.cc/cc-studio.png" />
|
|
22
|
-
<meta property="og:site_name" content="AgentStudio" />
|
|
23
|
-
<meta property="og:locale" content="zh_CN" />
|
|
24
|
-
|
|
25
|
-
<!-- Twitter -->
|
|
26
|
-
<meta property="twitter:card" content="summary_large_image" />
|
|
27
|
-
<meta property="twitter:url" content="https://agentstudio.cc/" />
|
|
28
|
-
<meta property="twitter:title" content="AgentStudio - 智能体工作平台 | Claude Code 驱动的 AI 助手" />
|
|
29
|
-
<meta property="twitter:description" content="基于 Claude Code SDK 的现代化个人智能体工作平台。通过直观的 Web 界面,轻松访问强大的 AI 能力,支持多种大语言模型,提升工作效率。" />
|
|
30
|
-
<meta property="twitter:image" content="https://agentstudio.cc/cc-studio.png" />
|
|
31
|
-
|
|
32
|
-
<!-- Additional SEO -->
|
|
33
|
-
<link rel="canonical" href="https://agentstudio.cc/" />
|
|
34
|
-
<meta name="theme-color" content="#2563eb" />
|
|
35
|
-
|
|
36
|
-
<!-- Structured Data -->
|
|
37
|
-
<script type="application/ld+json">
|
|
38
|
-
{
|
|
39
|
-
"@context": "https://schema.org",
|
|
40
|
-
"@type": "SoftwareApplication",
|
|
41
|
-
"name": "AgentStudio",
|
|
42
|
-
"description": "基于 Claude Code SDK 的现代化个人智能体工作平台",
|
|
43
|
-
"url": "https://agentstudio.cc/",
|
|
44
|
-
"applicationCategory": "ProductivityApplication",
|
|
45
|
-
"operatingSystem": "Web Browser",
|
|
46
|
-
"offers": {
|
|
47
|
-
"@type": "Offer",
|
|
48
|
-
"price": "0",
|
|
49
|
-
"priceCurrency": "USD"
|
|
50
|
-
},
|
|
51
|
-
"author": {
|
|
52
|
-
"@type": "Organization",
|
|
53
|
-
"name": "AgentStudio Team"
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
</script>
|
|
57
|
-
<script type="module" crossorigin src="/assets/index-B_CTNvca.js"></script>
|
|
58
|
-
<link rel="modulepreload" crossorigin href="/assets/monaco-editor-C7Z4sOhS.js">
|
|
59
|
-
<link rel="modulepreload" crossorigin href="/assets/syntax-highlighting-YWvMU4Hm.js">
|
|
60
|
-
<link rel="modulepreload" crossorigin href="/assets/data-structures-DLJedtzx.js">
|
|
61
|
-
<link rel="modulepreload" crossorigin href="/assets/ui-components-Cw21Epuw.js">
|
|
62
|
-
<link rel="modulepreload" crossorigin href="/assets/tools-C4EPanYi.js">
|
|
63
|
-
<link rel="modulepreload" crossorigin href="/assets/agents-ClAzIJTw.js">
|
|
64
|
-
<link rel="stylesheet" crossorigin href="/assets/agents-DwCY2K8p.css">
|
|
65
|
-
<link rel="stylesheet" crossorigin href="/assets/index-B9YHa7XT.css">
|
|
66
|
-
</head>
|
|
67
|
-
<body>
|
|
68
|
-
<div id="root"></div>
|
|
69
|
-
</body>
|
|
70
|
-
</html>
|
package/frontend/dist/vite.svg
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
package/scripts/README.md
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
# 项目迁移工具
|
|
2
|
-
|
|
3
|
-
## 概述
|
|
4
|
-
|
|
5
|
-
这个目录包含了 AI Editor 的开发和维护工具。
|
|
6
|
-
|
|
7
|
-
## 项目迁移工具 (migrate-projects.js)
|
|
8
|
-
|
|
9
|
-
### 用途
|
|
10
|
-
|
|
11
|
-
这是一个一次性的开发工具,用于扫描用户目录中的现有项目并将它们添加到代理配置中。主要用于:
|
|
12
|
-
|
|
13
|
-
- 首次部署时迁移已有的项目
|
|
14
|
-
- 开发过程中重新关联丢失的项目
|
|
15
|
-
- 故障恢复时重建项目索引
|
|
16
|
-
|
|
17
|
-
### 使用方法
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
# 在 backend 目录下运行
|
|
21
|
-
npm run migrate-projects
|
|
22
|
-
|
|
23
|
-
# 或者直接运行脚本
|
|
24
|
-
node scripts/migrate-projects.js
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### 工作原理
|
|
28
|
-
|
|
29
|
-
1. **扫描项目目录**: 检查 `~/claude-code-projects/` 下的所有子目录
|
|
30
|
-
2. **识别代理会话**: 查找每个项目的 `.cc-sessions/` 目录中的代理子目录
|
|
31
|
-
3. **更新代理配置**: 将项目路径添加到对应代理的 `projects` 数组中
|
|
32
|
-
4. **保存配置**: 更新代理配置文件的时间戳并保存
|
|
33
|
-
|
|
34
|
-
### 安全性
|
|
35
|
-
|
|
36
|
-
- ✅ **只读操作**: 不会修改或删除任何项目文件
|
|
37
|
-
- ✅ **幂等性**: 可以安全地重复运行,不会重复添加项目
|
|
38
|
-
- ✅ **备份保护**: 只修改代理配置,不影响实际项目数据
|
|
39
|
-
|
|
40
|
-
### 输出示例
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
🚀 AI Editor 项目迁移工具
|
|
44
|
-
=====================================
|
|
45
|
-
🔍 开始扫描现有项目...
|
|
46
|
-
📁 找到 4 个项目目录
|
|
47
|
-
|
|
48
|
-
📂 检查项目: my-project
|
|
49
|
-
👤 找到代理会话: code-assistant
|
|
50
|
-
✅ 添加项目到代理 code-assistant: /Users/user/claude-code-projects/my-project
|
|
51
|
-
|
|
52
|
-
💾 保存代理配置...
|
|
53
|
-
✅ 已保存代理: 代码助手 (2 个项目)
|
|
54
|
-
|
|
55
|
-
🎉 迁移完成!总共添加了 1 个项目
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### 注意事项
|
|
59
|
-
|
|
60
|
-
- 这个工具设计为**开发时使用**,不应该集成到用户界面中
|
|
61
|
-
- 如果项目已经在代理配置中,会跳过不重复添加
|
|
62
|
-
- 工具会检查项目目录中是否存在 `.cc-sessions/` 来确认这是一个有效的AI Editor项目
|
|
63
|
-
|
|
64
|
-
### 故障排除
|
|
65
|
-
|
|
66
|
-
**问题**: 项目没有被检测到
|
|
67
|
-
- 检查项目目录是否包含 `.cc-sessions/` 目录
|
|
68
|
-
- 确认 `.cc-sessions/` 中有对应的代理目录
|
|
69
|
-
|
|
70
|
-
**问题**: 代理配置没有更新
|
|
71
|
-
- 检查文件权限,确保有写入 `~/.claude-agent/agents/` 的权限
|
|
72
|
-
- 查看控制台输出中的错误信息
|
|
73
|
-
|
|
74
|
-
**问题**: ES模块错误
|
|
75
|
-
- 确保使用 Node.js 16+ 版本
|
|
76
|
-
- 项目的 package.json 中应该有 `"type": "module"`
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import fs from 'fs';
|
|
4
|
-
import path from 'path';
|
|
5
|
-
import os from 'os';
|
|
6
|
-
|
|
7
|
-
// Function to extract real project path from jsonl session files
|
|
8
|
-
function extractRealProjectPath(dirName) {
|
|
9
|
-
const projectsDir = path.join(os.homedir(), '.claude', 'projects');
|
|
10
|
-
const projectDir = path.join(projectsDir, dirName);
|
|
11
|
-
|
|
12
|
-
try {
|
|
13
|
-
// Find all jsonl files in the project directory
|
|
14
|
-
const files = fs.readdirSync(projectDir).filter(file => file.endsWith('.jsonl'));
|
|
15
|
-
|
|
16
|
-
for (const file of files) {
|
|
17
|
-
try {
|
|
18
|
-
const filePath = path.join(projectDir, file);
|
|
19
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
20
|
-
const firstLine = content.split('\n')[0];
|
|
21
|
-
|
|
22
|
-
if (firstLine) {
|
|
23
|
-
const message = JSON.parse(firstLine);
|
|
24
|
-
if (message.cwd) {
|
|
25
|
-
return {
|
|
26
|
-
realPath: message.cwd,
|
|
27
|
-
projectName: path.basename(message.cwd)
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
} catch (error) {
|
|
32
|
-
// Skip this file and try the next one
|
|
33
|
-
continue;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
} catch (error) {
|
|
37
|
-
// Directory doesn't exist or can't be read
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Function to extract clean project name from directory name and metadata
|
|
44
|
-
function extractCleanProjectName(dirName, metadata) {
|
|
45
|
-
// Try to extract from jsonl session files first
|
|
46
|
-
const realProject = extractRealProjectPath(dirName);
|
|
47
|
-
if (realProject) {
|
|
48
|
-
return realProject.projectName;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// If metadata has migratedFrom, use the original path to extract the real directory name
|
|
52
|
-
if (metadata?.metadata?.migratedFrom) {
|
|
53
|
-
const originalPath = metadata.metadata.migratedFrom;
|
|
54
|
-
return path.basename(originalPath);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Otherwise, try to extract from the dirName (which is the actual directory name in ~/.claude/projects)
|
|
58
|
-
// The dirName is already the real directory name, so we can try to extract meaningful parts
|
|
59
|
-
if (dirName.includes('-')) {
|
|
60
|
-
// This might be an encoded path, try to extract the last meaningful segment
|
|
61
|
-
const segments = dirName.split('-').filter(segment => segment.length > 0);
|
|
62
|
-
if (segments.length > 0) {
|
|
63
|
-
return segments[segments.length - 1];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Fallback to original directory name
|
|
68
|
-
return dirName;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
async function fixProjectNames() {
|
|
72
|
-
const projectsMetaDir = path.join(os.homedir(), '.claude-agent', 'projects');
|
|
73
|
-
|
|
74
|
-
if (!fs.existsSync(projectsMetaDir)) {
|
|
75
|
-
console.log('No projects metadata directory found');
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const files = fs.readdirSync(projectsMetaDir).filter(file => file.endsWith('.json'));
|
|
80
|
-
|
|
81
|
-
console.log(`Found ${files.length} project metadata files to update`);
|
|
82
|
-
|
|
83
|
-
for (const file of files) {
|
|
84
|
-
const filePath = path.join(projectsMetaDir, file);
|
|
85
|
-
|
|
86
|
-
try {
|
|
87
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
88
|
-
const metadata = JSON.parse(content);
|
|
89
|
-
|
|
90
|
-
// Extract directory name from filename (remove .json extension)
|
|
91
|
-
const dirName = path.basename(file, '.json');
|
|
92
|
-
const cleanName = extractCleanProjectName(dirName, metadata);
|
|
93
|
-
|
|
94
|
-
// Update name if it's different from the clean name
|
|
95
|
-
if (metadata.name !== cleanName) {
|
|
96
|
-
console.log(`Updating project name: "${metadata.name}" -> "${cleanName}"`);
|
|
97
|
-
metadata.name = cleanName;
|
|
98
|
-
|
|
99
|
-
// Write back to file
|
|
100
|
-
fs.writeFileSync(filePath, JSON.stringify(metadata, null, 2), 'utf-8');
|
|
101
|
-
console.log(`✓ Updated ${file}`);
|
|
102
|
-
} else {
|
|
103
|
-
console.log(`⇢ Skipping ${file} (name already clean: "${metadata.name}")`);
|
|
104
|
-
}
|
|
105
|
-
} catch (error) {
|
|
106
|
-
console.error(`✗ Failed to update ${file}:`, error.message);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
console.log('Project name fix completed!');
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
fixProjectNames().catch(console.error);
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* 项目迁移工具 - 扫描现有项目并添加到代理配置
|
|
5
|
-
* 这是一个一次性的开发工具,用于迁移历史项目
|
|
6
|
-
*
|
|
7
|
-
* 使用方法:
|
|
8
|
-
* node scripts/migrate-projects.js
|
|
9
|
-
* npm run migrate-projects
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import fs from 'fs';
|
|
13
|
-
import path from 'path';
|
|
14
|
-
import os from 'os';
|
|
15
|
-
import { fileURLToPath } from 'url';
|
|
16
|
-
|
|
17
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
18
|
-
const __dirname = path.dirname(__filename);
|
|
19
|
-
|
|
20
|
-
// 简化的 AgentStorage 类,避免复杂的依赖
|
|
21
|
-
class SimpleAgentStorage {
|
|
22
|
-
constructor() {
|
|
23
|
-
this.agentsDir = path.join(os.homedir(), '.claude-agent', 'agents');
|
|
24
|
-
this.ensureDirectoriesExist();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
ensureDirectoriesExist() {
|
|
28
|
-
if (!fs.existsSync(this.agentsDir)) {
|
|
29
|
-
fs.mkdirSync(this.agentsDir, { recursive: true });
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
getAllAgents() {
|
|
34
|
-
const agentFiles = fs.readdirSync(this.agentsDir)
|
|
35
|
-
.filter(file => file.endsWith('.json'));
|
|
36
|
-
|
|
37
|
-
const agents = [];
|
|
38
|
-
for (const file of agentFiles) {
|
|
39
|
-
try {
|
|
40
|
-
const filePath = path.join(this.agentsDir, file);
|
|
41
|
-
const agentData = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
42
|
-
agents.push(agentData);
|
|
43
|
-
} catch (error) {
|
|
44
|
-
console.error(`Failed to read agent file ${file}:`, error);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return agents;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
saveAgent(agent) {
|
|
52
|
-
try {
|
|
53
|
-
agent.updatedAt = new Date().toISOString();
|
|
54
|
-
const filePath = path.join(this.agentsDir, `${agent.id}.json`);
|
|
55
|
-
fs.writeFileSync(filePath, JSON.stringify(agent, null, 2), 'utf-8');
|
|
56
|
-
} catch (error) {
|
|
57
|
-
console.error(`Failed to save agent ${agent.id}:`, error);
|
|
58
|
-
throw error;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// 扫描现有项目并添加到代理配置
|
|
64
|
-
function migrateExistingProjects() {
|
|
65
|
-
console.log('🔍 开始扫描现有项目...');
|
|
66
|
-
|
|
67
|
-
const agentStorage = new SimpleAgentStorage();
|
|
68
|
-
const agents = agentStorage.getAllAgents();
|
|
69
|
-
const projectsDir = path.join(os.homedir(), 'claude-code-projects');
|
|
70
|
-
|
|
71
|
-
if (!fs.existsSync(projectsDir)) {
|
|
72
|
-
console.log(`📁 项目目录不存在: ${projectsDir}`);
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const projectDirs = fs.readdirSync(projectsDir).filter(item => {
|
|
77
|
-
const itemPath = path.join(projectsDir, item);
|
|
78
|
-
return fs.statSync(itemPath).isDirectory() && !item.startsWith('.');
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
console.log(`📁 找到 ${projectDirs.length} 个项目目录`);
|
|
82
|
-
|
|
83
|
-
let totalAdded = 0;
|
|
84
|
-
|
|
85
|
-
for (const projectDir of projectDirs) {
|
|
86
|
-
const projectPath = path.join(projectsDir, projectDir);
|
|
87
|
-
const sessionsDir = path.join(projectPath, '.cc-sessions');
|
|
88
|
-
|
|
89
|
-
console.log(`\n📂 检查项目: ${projectDir}`);
|
|
90
|
-
|
|
91
|
-
if (!fs.existsSync(sessionsDir)) {
|
|
92
|
-
console.log(` ⚠️ 未找到会话目录,跳过`);
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// 检查哪些代理在此项目中有会话
|
|
97
|
-
const agentDirs = fs.readdirSync(sessionsDir).filter(item => {
|
|
98
|
-
const itemPath = path.join(sessionsDir, item);
|
|
99
|
-
return fs.statSync(itemPath).isDirectory() && !item.startsWith('.');
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
console.log(` 👤 找到代理会话: ${agentDirs.join(', ') || '无'}`);
|
|
103
|
-
|
|
104
|
-
for (const agentId of agentDirs) {
|
|
105
|
-
const agent = agents.find(a => a.id === agentId);
|
|
106
|
-
if (!agent) {
|
|
107
|
-
console.log(` ❌ 代理 ${agentId} 不存在,跳过`);
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// 初始化 projects 数组
|
|
112
|
-
if (!agent.projects) {
|
|
113
|
-
agent.projects = [];
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// 添加项目路径(如果不存在)
|
|
117
|
-
const normalizedPath = path.resolve(projectPath);
|
|
118
|
-
if (!agent.projects.includes(normalizedPath)) {
|
|
119
|
-
agent.projects.push(normalizedPath);
|
|
120
|
-
agent.updatedAt = new Date().toISOString();
|
|
121
|
-
console.log(` ✅ 添加项目到代理 ${agentId}: ${normalizedPath}`);
|
|
122
|
-
totalAdded++;
|
|
123
|
-
} else {
|
|
124
|
-
console.log(` ℹ️ 项目已存在于代理 ${agentId} 中`);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// 保存所有更新的代理
|
|
130
|
-
console.log('\n💾 保存代理配置...');
|
|
131
|
-
for (const agent of agents) {
|
|
132
|
-
if (agent.projects && agent.projects.length > 0) {
|
|
133
|
-
agentStorage.saveAgent(agent);
|
|
134
|
-
console.log(` ✅ 已保存代理: ${agent.name} (${agent.projects.length} 个项目)`);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
console.log(`\n🎉 迁移完成!总共添加了 ${totalAdded} 个项目`);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// 主函数
|
|
142
|
-
function main() {
|
|
143
|
-
console.log('🚀 AI Editor 项目迁移工具');
|
|
144
|
-
console.log('=====================================');
|
|
145
|
-
|
|
146
|
-
try {
|
|
147
|
-
migrateExistingProjects();
|
|
148
|
-
} catch (error) {
|
|
149
|
-
console.error('\n❌ 迁移失败:', error);
|
|
150
|
-
process.exit(1);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// 运行
|
|
155
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
156
|
-
main();
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
export { migrateExistingProjects };
|
package/shared/index.d.ts
DELETED
package/shared/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC"}
|
package/shared/index.js
DELETED
package/shared/types/agents.d.ts
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
export interface AgentTool {
|
|
2
|
-
name: string;
|
|
3
|
-
enabled: boolean;
|
|
4
|
-
permissions?: {
|
|
5
|
-
requireConfirmation?: boolean;
|
|
6
|
-
allowedPaths?: string[];
|
|
7
|
-
blockedPaths?: string[];
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
export interface AgentConfig {
|
|
11
|
-
id: string;
|
|
12
|
-
name: string;
|
|
13
|
-
description: string;
|
|
14
|
-
version: string;
|
|
15
|
-
systemPrompt: string;
|
|
16
|
-
maxTurns: number;
|
|
17
|
-
permissionMode: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan';
|
|
18
|
-
model: string;
|
|
19
|
-
allowedTools: AgentTool[];
|
|
20
|
-
ui: {
|
|
21
|
-
icon: string;
|
|
22
|
-
headerTitle: string;
|
|
23
|
-
headerDescription: string;
|
|
24
|
-
welcomeMessage?: string;
|
|
25
|
-
componentType: 'slides' | 'chat' | 'documents' | 'code' | 'custom';
|
|
26
|
-
customComponent?: string;
|
|
27
|
-
};
|
|
28
|
-
workingDirectory?: string;
|
|
29
|
-
dataDirectory?: string;
|
|
30
|
-
fileTypes?: string[];
|
|
31
|
-
author: string;
|
|
32
|
-
homepage?: string;
|
|
33
|
-
tags: string[];
|
|
34
|
-
createdAt: string;
|
|
35
|
-
updatedAt: string;
|
|
36
|
-
enabled: boolean;
|
|
37
|
-
projects?: string[];
|
|
38
|
-
}
|
|
39
|
-
export interface AgentSession {
|
|
40
|
-
id: string;
|
|
41
|
-
agentId: string;
|
|
42
|
-
title: string;
|
|
43
|
-
createdAt: number;
|
|
44
|
-
lastUpdated: number;
|
|
45
|
-
messages: AgentMessage[];
|
|
46
|
-
claudeVersionId?: string;
|
|
47
|
-
customData?: Record<string, unknown>;
|
|
48
|
-
}
|
|
49
|
-
export interface AgentMessage {
|
|
50
|
-
id: string;
|
|
51
|
-
role: 'user' | 'assistant';
|
|
52
|
-
content: string;
|
|
53
|
-
timestamp: number;
|
|
54
|
-
messageParts?: MessagePart[];
|
|
55
|
-
agentId: string;
|
|
56
|
-
}
|
|
57
|
-
export interface MessagePart {
|
|
58
|
-
id: string;
|
|
59
|
-
type: 'text' | 'tool' | 'command' | 'compactSummary' | 'image';
|
|
60
|
-
content?: string;
|
|
61
|
-
toolData?: {
|
|
62
|
-
id: string;
|
|
63
|
-
toolName: string;
|
|
64
|
-
toolInput: Record<string, unknown>;
|
|
65
|
-
toolResult?: string;
|
|
66
|
-
isExecuting: boolean;
|
|
67
|
-
isError?: boolean;
|
|
68
|
-
claudeId?: string;
|
|
69
|
-
};
|
|
70
|
-
imageData?: {
|
|
71
|
-
id: string;
|
|
72
|
-
data: string;
|
|
73
|
-
mediaType: string;
|
|
74
|
-
filename?: string;
|
|
75
|
-
};
|
|
76
|
-
order: number;
|
|
77
|
-
originalContent?: string;
|
|
78
|
-
}
|
|
79
|
-
export declare const BUILTIN_AGENTS: Partial<AgentConfig>[];
|
|
80
|
-
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/types/agents.ts"],"names":[],"mappings":"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"}
|