@tom2012/cc-web 1.5.70 → 1.5.72
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 +1 -1
- package/backend/dist/routes/claude.d.ts.map +1 -1
- package/backend/dist/routes/claude.js +46 -0
- package/backend/dist/routes/claude.js.map +1 -1
- package/frontend/dist/assets/{GraphPreview-Bw3Dfm8E.js → GraphPreview-QqDpOEoI.js} +1 -1
- package/frontend/dist/assets/{OfficePreview-Doqf6kiL.js → OfficePreview-BC2woErg.js} +3 -3
- package/frontend/dist/assets/{ProjectPage-CeHXpRBP.js → ProjectPage-B8Tdoz_M.js} +35 -35
- package/frontend/dist/assets/{SettingsPage-beAswfts.js → SettingsPage-C8572fFD.js} +1 -1
- package/frontend/dist/assets/{ShareViewPage-C_SAUX_-.js → ShareViewPage-PTSFe5df.js} +1 -1
- package/frontend/dist/assets/{SkillHubPage-BKMSJ6FQ.js → SkillHubPage-BHgZp94q.js} +2 -2
- package/frontend/dist/assets/{bot-DEz0YI_q.js → bot-CP4ljg4K.js} +1 -1
- package/frontend/dist/assets/{chevron-down-BvnHgiSX.js → chevron-down-BPKbPuX9.js} +1 -1
- package/frontend/dist/assets/{download-DWlC6Rzj.js → download-DJNy8XSX.js} +1 -1
- package/frontend/dist/assets/{index-dpSItQs8.js → index-BPzNyZy4.js} +31 -31
- package/frontend/dist/assets/{index-CrvtQ37j.js → index-CENzb-E2.js} +24 -24
- package/frontend/dist/assets/index-PNcejD9U.css +1 -0
- package/frontend/dist/assets/{jszip.min-CK_j6lPr.js → jszip.min-CPp1Je4B.js} +1 -1
- package/frontend/dist/assets/{save-rY9Wdsw_.js → save-dexIyJWW.js} +1 -1
- package/frontend/dist/assets/{user-BWHKMNkj.js → user-BGUBSa7q.js} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-CeYoiJuE.css +0 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A self-hosted web application (distributed as npm package) that provides a browser-based interface for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI sessions. Create projects, each with a persistent terminal running Claude Code, and interact with them through a real-time terminal UI.
|
|
4
4
|
|
|
5
|
-
**Current version**: v1.5.
|
|
5
|
+
**Current version**: v1.5.72 | [GitHub](https://github.com/zbc0315/cc-web) | MIT License
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/routes/claude.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,MAAM,4CAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/routes/claude.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA8DxB,eAAe,MAAM,CAAC"}
|
|
@@ -16,5 +16,51 @@ router.get('/model', (_req, res) => {
|
|
|
16
16
|
res.json({ model: 'sonnet' });
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
|
+
router.get('/skills', (_req, res) => {
|
|
20
|
+
const builtin = [
|
|
21
|
+
{ command: '/help', description: 'Show available commands and usage' },
|
|
22
|
+
{ command: '/clear', description: 'Clear conversation history and free context' },
|
|
23
|
+
{ command: '/memory', description: 'Edit CLAUDE.md memory files' },
|
|
24
|
+
{ command: '/model', description: 'Switch AI model (sonnet/opus/haiku)' },
|
|
25
|
+
{ command: '/cost', description: 'Show token usage and cost for this session' },
|
|
26
|
+
{ command: '/status', description: 'Show account and system status' },
|
|
27
|
+
{ command: '/doctor', description: 'Check Claude Code installation health' },
|
|
28
|
+
{ command: '/review', description: 'Request code review' },
|
|
29
|
+
{ command: '/terminal', description: 'Run a bash command in the terminal' },
|
|
30
|
+
{ command: '/vim', description: 'Open file in vim-like editor mode' },
|
|
31
|
+
{ command: '/init', description: 'Initialize project CLAUDE.md' },
|
|
32
|
+
{ command: '/bug', description: 'Report a bug to Anthropic' },
|
|
33
|
+
{ command: '/release-notes', description: 'View recent release notes' },
|
|
34
|
+
{ command: '/pr_comments', description: 'View PR review comments' },
|
|
35
|
+
{ command: '/logout', description: 'Sign out of Claude account' },
|
|
36
|
+
{ command: '/login', description: 'Sign in to Claude account' },
|
|
37
|
+
];
|
|
38
|
+
const custom = [];
|
|
39
|
+
const mcp = [];
|
|
40
|
+
try {
|
|
41
|
+
const commandsDir = (0, path_1.join)((0, os_1.homedir)(), '.claude', 'commands');
|
|
42
|
+
const files = (0, fs_1.readdirSync)(commandsDir);
|
|
43
|
+
for (const file of files) {
|
|
44
|
+
if (file.endsWith('.md')) {
|
|
45
|
+
const name = file.replace(/\.md$/, '');
|
|
46
|
+
const content = (0, fs_1.readFileSync)((0, path_1.join)(commandsDir, file), 'utf-8');
|
|
47
|
+
const firstLine = content.split('\n').find((l) => l.trim())?.replace(/^#+\s*/, '').trim() || name;
|
|
48
|
+
custom.push({ command: `/${name}`, description: firstLine });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch { /* no commands dir */ }
|
|
53
|
+
try {
|
|
54
|
+
const settingsPath = (0, path_1.join)((0, os_1.homedir)(), '.claude', 'settings.json');
|
|
55
|
+
const settings = JSON.parse((0, fs_1.readFileSync)(settingsPath, 'utf-8'));
|
|
56
|
+
if (settings.mcpServers && typeof settings.mcpServers === 'object') {
|
|
57
|
+
for (const name of Object.keys(settings.mcpServers)) {
|
|
58
|
+
mcp.push({ command: name, description: 'MCP Server' });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch { /* no settings */ }
|
|
63
|
+
res.json({ builtin, custom, mcp });
|
|
64
|
+
});
|
|
19
65
|
exports.default = router;
|
|
20
66
|
//# sourceMappingURL=claude.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/routes/claude.ts"],"names":[],"mappings":";;AAAA,qCAAiC;AACjC,
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/routes/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as je,r as C,d as De,j as y,B as q,m as he}from"./index-
|
|
1
|
+
import{c as je,r as C,d as De,j as y,B as q,m as he}from"./index-BPzNyZy4.js";import{L as Ye,Z as Pe,a as Be}from"./ProjectPage-B8Tdoz_M.js";import"./save-dexIyJWW.js";import"./download-DJNy8XSX.js";import"./chevron-down-BPKbPuX9.js";import"./bot-CP4ljg4K.js";import"./user-BGUBSa7q.js";/**
|
|
2
2
|
* @license lucide-react v0.309.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-
|
|
2
|
-
import{j as e,r as c,_ as m,b as y,h as S}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CENzb-E2.js","assets/index-BPzNyZy4.js","assets/index-PNcejD9U.css","assets/jszip.min-CPp1Je4B.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{j as e,r as c,_ as m,b as y,h as S}from"./index-BPzNyZy4.js";async function h(a){let l=S(a);const s=y();s&&(l+=`${l.includes("?")?"&":"?"}token=${encodeURIComponent(s)}`);const d=await fetch(l);if(!d.ok)throw new Error(`Failed to fetch file: ${d.status}`);return d.arrayBuffer()}function j({filePath:a,zoom:l}){const[s,d]=c.useState(""),[x,n]=c.useState(null),[u,i]=c.useState(!0);return c.useEffect(()=>{let t=!1;return i(!0),n(null),(async()=>{try{const r=await m(()=>import("./index-CENzb-E2.js").then(f=>f.i),__vite__mapDeps([0,1,2,3])),o=await h(a),p=await r.convertToHtml({arrayBuffer:o});t||d(p.value)}catch(r){t||n(r instanceof Error?r.message:"Failed to render docx")}finally{t||i(!1)}})(),()=>{t=!0}},[a]),u?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 Word 文档中..."}):x?e.jsx("p",{className:"text-sm text-destructive p-4",children:x}):e.jsx("div",{className:"p-6 prose dark:prose-invert max-w-none",style:{fontSize:`${12*l/100}px`},dangerouslySetInnerHTML:{__html:s}})}function _({filePath:a,zoom:l}){var o;const[s,d]=c.useState([]),[x,n]=c.useState(0),[u,i]=c.useState(null),[t,r]=c.useState(!0);return c.useEffect(()=>{let p=!1;return r(!0),i(null),(async()=>{try{const f=await m(()=>import("./xlsx-D_0l8YDs.js"),[]),v=await h(a),g=f.read(v,{type:"array"}),b=g.SheetNames.map(w=>({name:w,html:f.utils.sheet_to_html(g.Sheets[w],{editable:!1})}));p||(d(b),n(0))}catch(f){p||i(f instanceof Error?f.message:"Failed to render xlsx")}finally{p||r(!1)}})(),()=>{p=!0}},[a]),t?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 Excel 文件中..."}):u?e.jsx("p",{className:"text-sm text-destructive p-4",children:u}):s.length===0?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"空文件"}):e.jsxs("div",{className:"flex flex-col h-full",children:[s.length>1&&e.jsx("div",{className:"flex gap-0.5 px-3 py-1.5 border-b border-border bg-muted/30 flex-shrink-0 overflow-x-auto",children:s.map((p,f)=>e.jsx("button",{onClick:()=>n(f),className:`px-3 py-1 text-xs rounded-t transition-colors whitespace-nowrap ${f===x?"bg-background text-foreground border border-b-0 border-border":"text-muted-foreground hover:text-foreground"}`,children:p.name},f))}),e.jsx("div",{className:"flex-1 overflow-auto p-2 xlsx-preview",style:{fontSize:`${12*l/100}px`},dangerouslySetInnerHTML:{__html:((o=s[x])==null?void 0:o.html)??""}}),e.jsx("style",{children:`
|
|
3
3
|
.xlsx-preview table { border-collapse: collapse; width: auto; min-width: 100%; }
|
|
4
4
|
.xlsx-preview td, .xlsx-preview th {
|
|
5
5
|
border: 1px solid hsl(var(--border));
|
|
@@ -10,4 +10,4 @@ import{j as e,r as c,_ as m,b as y,h as S}from"./index-dpSItQs8.js";async functi
|
|
|
10
10
|
}
|
|
11
11
|
.xlsx-preview th { background: hsl(var(--muted)); font-weight: 600; }
|
|
12
12
|
.xlsx-preview tr:hover td { background: hsl(var(--accent) / 0.3); }
|
|
13
|
-
`})]})}async function E(a){const{default:l}=await m(async()=>{const{default:n}=await import("./jszip.min-
|
|
13
|
+
`})]})}async function E(a){const{default:l}=await m(async()=>{const{default:n}=await import("./jszip.min-CPp1Je4B.js").then(u=>u.j);return{default:n}},__vite__mapDeps([3,1,2])),s=await l.loadAsync(a),d=[],x=Object.keys(s.files).filter(n=>/^ppt\/slides\/slide\d+\.xml$/i.test(n)).sort((n,u)=>{var r,o;const i=parseInt(((r=n.match(/slide(\d+)/))==null?void 0:r[1])??"0"),t=parseInt(((o=u.match(/slide(\d+)/))==null?void 0:o[1])??"0");return i-t});for(let n=0;n<x.length;n++){const u=await s.file(x[n]).async("text"),i=[],t=/<a:t[^>]*>([\s\S]*?)<\/a:t>/g;let r;for(;(r=t.exec(u))!==null;){const o=r[1].replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').trim();o&&i.push(o)}d.push({index:n+1,texts:i})}return d}function N({filePath:a,zoom:l}){const[s,d]=c.useState([]),[x,n]=c.useState(null),[u,i]=c.useState(!0);return c.useEffect(()=>{let t=!1;return i(!0),n(null),(async()=>{try{const r=await h(a),o=await E(r);t||d(o)}catch(r){t||n(r instanceof Error?r.message:"Failed to render pptx")}finally{t||i(!1)}})(),()=>{t=!0}},[a]),u?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 PPT 文件中..."}):x?e.jsx("p",{className:"text-sm text-destructive p-4",children:x}):s.length===0?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"空文件"}):e.jsx("div",{className:"p-4 space-y-4",style:{fontSize:`${12*l/100}px`},children:s.map(t=>e.jsxs("div",{className:"border border-border rounded-lg p-5 bg-muted/20",children:[e.jsxs("div",{className:"text-xs text-muted-foreground mb-2 font-medium",children:["Slide ",t.index]}),t.texts.length>0?e.jsx("div",{className:"space-y-1.5",children:t.texts.map((r,o)=>e.jsx("p",{className:"text-foreground leading-relaxed",style:{fontSize:"inherit"},children:r},o))}):e.jsx("p",{className:"text-muted-foreground text-sm italic",children:"(无文本内容)"})]},t.index))})}const I=new Set(["docx","xlsx","xls","pptx"]);function L({filePath:a,ext:l,zoom:s}){return l==="docx"?e.jsx(j,{filePath:a,zoom:s}):l==="xlsx"||l==="xls"?e.jsx(_,{filePath:a,zoom:s}):l==="pptx"?e.jsx(N,{filePath:a,zoom:s}):null}export{I as OFFICE_EXTS,L as OfficePreview};
|