mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-01-24 18:37:30 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e163c8c10 | ||
|
|
b315360f8a | ||
|
|
04821b8ad5 |
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.13.1",
|
"version": "1.13.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@siteboon/claude-code-ui",
|
"name": "@siteboon/claude-code-ui",
|
||||||
"version": "1.13.1",
|
"version": "1.13.2",
|
||||||
"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.13.1",
|
"version": "1.13.2",
|
||||||
"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",
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
import os from 'os';
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath } from 'url';
|
||||||
import { dirname } from 'path';
|
import { dirname } from 'path';
|
||||||
|
|
||||||
@@ -115,7 +116,7 @@ function showStatus() {
|
|||||||
console.log(` CONTEXT_WINDOW: ${c.dim(process.env.CONTEXT_WINDOW || '160000 (default)')}`);
|
console.log(` CONTEXT_WINDOW: ${c.dim(process.env.CONTEXT_WINDOW || '160000 (default)')}`);
|
||||||
|
|
||||||
// Claude projects folder
|
// Claude projects folder
|
||||||
const claudeProjectsPath = path.join(process.env.HOME, '.claude', 'projects');
|
const claudeProjectsPath = path.join(os.homedir(), '.claude', 'projects');
|
||||||
const projectsExists = fs.existsSync(claudeProjectsPath);
|
const projectsExists = fs.existsSync(claudeProjectsPath);
|
||||||
console.log(`\n${c.info('[INFO]')} Claude Projects Folder:`);
|
console.log(`\n${c.info('[INFO]')} Claude Projects Folder:`);
|
||||||
console.log(` ${c.dim(claudeProjectsPath)}`);
|
console.log(` ${c.dim(claudeProjectsPath)}`);
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ const connectedClients = new Set();
|
|||||||
// Setup file system watcher for Claude projects folder using chokidar
|
// Setup file system watcher for Claude projects folder using chokidar
|
||||||
async function setupProjectsWatcher() {
|
async function setupProjectsWatcher() {
|
||||||
const chokidar = (await import('chokidar')).default;
|
const chokidar = (await import('chokidar')).default;
|
||||||
const claudeProjectsPath = path.join(process.env.HOME, '.claude', 'projects');
|
const claudeProjectsPath = path.join(os.homedir(), '.claude', 'projects');
|
||||||
|
|
||||||
if (projectsWatcher) {
|
if (projectsWatcher) {
|
||||||
projectsWatcher.close();
|
projectsWatcher.close();
|
||||||
@@ -1015,7 +1015,7 @@ function handleShellConnection(ws) {
|
|||||||
name: 'xterm-256color',
|
name: 'xterm-256color',
|
||||||
cols: termCols,
|
cols: termCols,
|
||||||
rows: termRows,
|
rows: termRows,
|
||||||
cwd: process.env.HOME || (os.platform() === 'win32' ? process.env.USERPROFILE : '/'),
|
cwd: os.homedir(),
|
||||||
env: {
|
env: {
|
||||||
...process.env,
|
...process.env,
|
||||||
TERM: 'xterm-256color',
|
TERM: 'xterm-256color',
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ function clearProjectDirectoryCache() {
|
|||||||
|
|
||||||
// Load project configuration file
|
// Load project configuration file
|
||||||
async function loadProjectConfig() {
|
async function loadProjectConfig() {
|
||||||
const configPath = path.join(process.env.HOME, '.claude', 'project-config.json');
|
const configPath = path.join(os.homedir(), '.claude', 'project-config.json');
|
||||||
try {
|
try {
|
||||||
const configData = await fs.readFile(configPath, 'utf8');
|
const configData = await fs.readFile(configPath, 'utf8');
|
||||||
return JSON.parse(configData);
|
return JSON.parse(configData);
|
||||||
@@ -216,7 +216,7 @@ async function loadProjectConfig() {
|
|||||||
|
|
||||||
// Save project configuration file
|
// Save project configuration file
|
||||||
async function saveProjectConfig(config) {
|
async function saveProjectConfig(config) {
|
||||||
const claudeDir = path.join(process.env.HOME, '.claude');
|
const claudeDir = path.join(os.homedir(), '.claude');
|
||||||
const configPath = path.join(claudeDir, 'project-config.json');
|
const configPath = path.join(claudeDir, 'project-config.json');
|
||||||
|
|
||||||
// Ensure the .claude directory exists
|
// Ensure the .claude directory exists
|
||||||
@@ -276,7 +276,7 @@ async function extractProjectDirectory(projectName) {
|
|||||||
return originalPath;
|
return originalPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName);
|
const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName);
|
||||||
const cwdCounts = new Map();
|
const cwdCounts = new Map();
|
||||||
let latestTimestamp = 0;
|
let latestTimestamp = 0;
|
||||||
let latestCwd = null;
|
let latestCwd = null;
|
||||||
@@ -380,7 +380,7 @@ async function extractProjectDirectory(projectName) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function getProjects() {
|
async function getProjects() {
|
||||||
const claudeDir = path.join(process.env.HOME, '.claude', 'projects');
|
const claudeDir = path.join(os.homedir(), '.claude', 'projects');
|
||||||
const config = await loadProjectConfig();
|
const config = await loadProjectConfig();
|
||||||
const projects = [];
|
const projects = [];
|
||||||
const existingProjects = new Set();
|
const existingProjects = new Set();
|
||||||
@@ -546,7 +546,7 @@ async function getProjects() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function getSessions(projectName, limit = 5, offset = 0) {
|
async function getSessions(projectName, limit = 5, offset = 0) {
|
||||||
const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName);
|
const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const files = await fs.readdir(projectDir);
|
const files = await fs.readdir(projectDir);
|
||||||
@@ -828,7 +828,7 @@ async function parseJsonlSessions(filePath) {
|
|||||||
|
|
||||||
// Get messages for a specific session with pagination support
|
// Get messages for a specific session with pagination support
|
||||||
async function getSessionMessages(projectName, sessionId, limit = null, offset = 0) {
|
async function getSessionMessages(projectName, sessionId, limit = null, offset = 0) {
|
||||||
const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName);
|
const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const files = await fs.readdir(projectDir);
|
const files = await fs.readdir(projectDir);
|
||||||
@@ -917,7 +917,7 @@ async function renameProject(projectName, newDisplayName) {
|
|||||||
|
|
||||||
// Delete a session from a project
|
// Delete a session from a project
|
||||||
async function deleteSession(projectName, sessionId) {
|
async function deleteSession(projectName, sessionId) {
|
||||||
const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName);
|
const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const files = await fs.readdir(projectDir);
|
const files = await fs.readdir(projectDir);
|
||||||
@@ -980,7 +980,7 @@ async function isProjectEmpty(projectName) {
|
|||||||
|
|
||||||
// Delete an empty project
|
// Delete an empty project
|
||||||
async function deleteProject(projectName) {
|
async function deleteProject(projectName) {
|
||||||
const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName);
|
const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// First check if the project is empty
|
// First check if the project is empty
|
||||||
@@ -1020,7 +1020,7 @@ async function addProjectManually(projectPath, displayName = null) {
|
|||||||
|
|
||||||
// Check if project already exists in config
|
// Check if project already exists in config
|
||||||
const config = await loadProjectConfig();
|
const config = await loadProjectConfig();
|
||||||
const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName);
|
const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName);
|
||||||
|
|
||||||
if (config[projectName]) {
|
if (config[projectName]) {
|
||||||
throw new Error(`Project already configured for path: ${absolutePath}`);
|
throw new Error(`Project already configured for path: ${absolutePath}`);
|
||||||
|
|||||||
Reference in New Issue
Block a user