mirror of
https://github.com/siteboon/claudecodeui.git
synced 2025-12-08 15:49:37 +00:00
Compare commits
4 Commits
ed65399dfb
...
2815e206dc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2815e206dc | ||
|
|
71e400c54f | ||
|
|
05b2b59e23 | ||
|
|
ad219c8716 |
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@siteboon/claude-code-ui",
|
"name": "@siteboon/claude-code-ui",
|
||||||
"version": "1.11.0",
|
"version": "1.12.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@siteboon/claude-code-ui",
|
"name": "@siteboon/claude-code-ui",
|
||||||
"version": "1.11.0",
|
"version": "1.12.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@anthropic-ai/claude-agent-sdk": "^0.1.29",
|
"@anthropic-ai/claude-agent-sdk": "^0.1.29",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@siteboon/claude-code-ui",
|
"name": "@siteboon/claude-code-ui",
|
||||||
"version": "1.11.0",
|
"version": "1.12.0",
|
||||||
"description": "A web-based UI for Claude Code CLI",
|
"description": "A web-based UI for Claude Code CLI",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "server/index.js",
|
"main": "server/index.js",
|
||||||
|
|||||||
@@ -331,15 +331,6 @@ router.get('/detect/:projectName', async (req, res) => {
|
|||||||
timestamp: new Date().toISOString()
|
timestamp: new Date().toISOString()
|
||||||
};
|
};
|
||||||
|
|
||||||
// Broadcast TaskMaster project update via WebSocket
|
|
||||||
if (req.app.locals.wss) {
|
|
||||||
broadcastTaskMasterProjectUpdate(
|
|
||||||
req.app.locals.wss,
|
|
||||||
projectName,
|
|
||||||
taskMasterResult
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
res.json(responseData);
|
res.json(responseData);
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import { useState, useEffect } from 'react';
|
|||||||
import { Button } from './ui/button';
|
import { Button } from './ui/button';
|
||||||
import { Input } from './ui/input';
|
import { Input } from './ui/input';
|
||||||
import { Key, Plus, Trash2, Eye, EyeOff, Copy, Check, Github, ExternalLink } from 'lucide-react';
|
import { Key, Plus, Trash2, Eye, EyeOff, Copy, Check, Github, ExternalLink } from 'lucide-react';
|
||||||
|
import { useVersionCheck } from '../hooks/useVersionCheck';
|
||||||
|
import { version } from '../../package.json';
|
||||||
|
|
||||||
function CredentialsSettings() {
|
function CredentialsSettings() {
|
||||||
const [apiKeys, setApiKeys] = useState([]);
|
const [apiKeys, setApiKeys] = useState([]);
|
||||||
@@ -17,6 +19,9 @@ function CredentialsSettings() {
|
|||||||
const [copiedKey, setCopiedKey] = useState(null);
|
const [copiedKey, setCopiedKey] = useState(null);
|
||||||
const [newlyCreatedKey, setNewlyCreatedKey] = useState(null);
|
const [newlyCreatedKey, setNewlyCreatedKey] = useState(null);
|
||||||
|
|
||||||
|
// Version check hook
|
||||||
|
const { updateAvailable, latestVersion, releaseInfo } = useVersionCheck('siteboon', 'claudecodeui');
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchData();
|
fetchData();
|
||||||
}, []);
|
}, []);
|
||||||
@@ -410,6 +415,31 @@ function CredentialsSettings() {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Version Information */}
|
||||||
|
<div className="pt-6 border-t border-border/50">
|
||||||
|
<div className="flex items-center justify-between text-xs italic text-muted-foreground/60">
|
||||||
|
<a
|
||||||
|
href={releaseInfo?.htmlUrl || 'https://github.com/siteboon/claudecodeui/releases'}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className="hover:text-muted-foreground transition-colors"
|
||||||
|
>
|
||||||
|
v{version}
|
||||||
|
</a>
|
||||||
|
{updateAvailable && latestVersion && (
|
||||||
|
<a
|
||||||
|
href={releaseInfo?.htmlUrl || 'https://github.com/siteboon/claudecodeui/releases'}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className="flex items-center gap-1.5 px-2 py-0.5 bg-green-500/10 text-green-600 dark:text-green-400 rounded-full hover:bg-green-500/20 transition-colors not-italic font-medium"
|
||||||
|
>
|
||||||
|
<span className="text-[10px]">Update available: v{latestVersion}</span>
|
||||||
|
<ExternalLink className="h-2.5 w-2.5" />
|
||||||
|
</a>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,36 +133,14 @@ export const TaskMasterProvider = ({ children }) => {
|
|||||||
const setCurrentProject = useCallback(async (project) => {
|
const setCurrentProject = useCallback(async (project) => {
|
||||||
try {
|
try {
|
||||||
setCurrentProjectState(project);
|
setCurrentProjectState(project);
|
||||||
|
|
||||||
// Clear previous project's data immediately when switching projects
|
|
||||||
setTasks([]);
|
setTasks([]);
|
||||||
setNextTask(null);
|
setNextTask(null);
|
||||||
setProjectTaskMaster(null); // Clear previous TaskMaster data
|
|
||||||
|
setProjectTaskMaster(project?.taskmaster || null);
|
||||||
// Try to fetch fresh TaskMaster detection data for the project
|
|
||||||
if (project?.name) {
|
|
||||||
try {
|
|
||||||
const response = await api.get(`/taskmaster/detect/${encodeURIComponent(project.name)}`);
|
|
||||||
if (response.ok) {
|
|
||||||
const detectionData = await response.json();
|
|
||||||
setProjectTaskMaster(detectionData.taskmaster);
|
|
||||||
} else {
|
|
||||||
// If individual detection fails, fall back to project data from /api/projects
|
|
||||||
console.warn('Individual TaskMaster detection failed, using project data:', response.status);
|
|
||||||
setProjectTaskMaster(project.taskmaster || null);
|
|
||||||
}
|
|
||||||
} catch (detectionError) {
|
|
||||||
// If individual detection fails, fall back to project data from /api/projects
|
|
||||||
console.warn('TaskMaster detection error, using project data:', detectionError.message);
|
|
||||||
setProjectTaskMaster(project.taskmaster || null);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
setProjectTaskMaster(null);
|
|
||||||
}
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('Error in setCurrentProject:', err);
|
console.error('Error in setCurrentProject:', err);
|
||||||
handleError(err, 'set current project');
|
handleError(err, 'set current project');
|
||||||
// Fall back to project data if available
|
|
||||||
setProjectTaskMaster(project?.taskmaster || null);
|
setProjectTaskMaster(project?.taskmaster || null);
|
||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|||||||
Reference in New Issue
Block a user