Spaces:
Sleeping
Sleeping
feat: complete Ever-Brain engine, MCP server, CLI evb mcp command, Dockerfile and release workflow
61b1da1 Download packages/cli/src/commands/status.ts from projectsorg/ever-brain: direct link, hf CLI and curl.
- Browser
- Download file 3.6 kB
-
https://huggingface.co/spaces/projectsorg/ever-brain/resolve/main/packages/cli/src/commands/status.ts
- Command line
-
hf download hf://spaces/projectsorg/ever-brain/packages/cli/src/commands/status.ts
-
curl -L -o status.ts https://huggingface.co/spaces/projectsorg/ever-brain/resolve/main/packages/cli/src/commands/status.ts
3.6 kB
| import pc from 'picocolors'; | |
| import { projectConfigManager } from '../config/project-config.js'; | |
| import { cacheService } from '../services/cache-service.js'; | |
| import { authService } from '../services/auth-service.js'; | |
| import { parseRepoUrl } from '../services/sync-service.js'; | |
| import { outputResult, outputError, OutputOptions } from '../utils/output.js'; | |
| export async function handleStatus(options: OutputOptions = {}): Promise<void> { | |
| const workspaceRoot = projectConfigManager.findEvbRoot(); | |
| if (!workspaceRoot) { | |
| return outputError( | |
| 'Not inside an Ever-Brain project. Run `evb init <repo>` first.', | |
| 'NOT_IN_WORKSPACE', | |
| options | |
| ); | |
| } | |
| try { | |
| const config = projectConfigManager.readConfig(workspaceRoot); | |
| const state = projectConfigManager.readState(workspaceRoot); | |
| const dirty = cacheService.computeDirtyState(workspaceRoot); | |
| const cachedFiles = cacheService.listCachedFiles(workspaceRoot); | |
| const { owner, repo } = parseRepoUrl(config.source.repository); | |
| // Auth info | |
| const token = authService.resolveToken(undefined, workspaceRoot); | |
| let username: string | undefined; | |
| let permission: string = 'none'; | |
| if (token) { | |
| try { | |
| const user = await authService.validateToken(token); | |
| username = user.username; | |
| permission = await authService.getRepoPermission(owner, repo, username, token); | |
| } catch {} | |
| } | |
| const knowledgeCount = cachedFiles.filter((f) => f.startsWith('knowledge/')).length; | |
| const skillsCount = cachedFiles.filter((f) => f.startsWith('skills/') && f.endsWith('.md')).length; | |
| const data = { | |
| workspace: workspaceRoot, | |
| repository: config.source.repository, | |
| branch: config.source.branch, | |
| apiUrl: projectConfigManager.getApiUrl(workspaceRoot), | |
| lastSync: state?.last_sync || null, | |
| cachedFilesCount: cachedFiles.length, | |
| knowledgeCount, | |
| skillsCount, | |
| authenticatedAs: username || null, | |
| permission, | |
| isDirty: dirty.isDirty, | |
| modifications: { | |
| modified: dirty.modified, | |
| added: dirty.added, | |
| deleted: dirty.deleted, | |
| }, | |
| }; | |
| outputResult(data, options, () => { | |
| console.log(pc.bold(pc.cyan('Ever-Brain Workspace Status'))); | |
| console.log(` Source: ${pc.white(config.source.repository)} (branch: ${pc.green(config.source.branch)})`); | |
| console.log(` API Target: ${pc.dim(projectConfigManager.getApiUrl(workspaceRoot))}`); | |
| console.log(` Last Sync: ${state?.last_sync ? pc.white(state.last_sync) : pc.yellow('never')}`); | |
| console.log(` Cached: ${cachedFiles.length} files (${knowledgeCount} knowledge, ${skillsCount} skills)`); | |
| if (username) { | |
| console.log(` Auth: @${username} (Permission: ${permission})`); | |
| } else { | |
| console.log(` Auth: ${pc.dim('Anonymous (read-only)')}`); | |
| } | |
| console.log(''); | |
| if (!dirty.isDirty) { | |
| console.log(pc.green(' Working tree clean (no unpushed modifications)')); | |
| } else { | |
| console.log(pc.yellow(' Local Modifications (Unpushed):')); | |
| for (const m of dirty.modified) { | |
| console.log(` ${pc.yellow('M')} ${m}`); | |
| } | |
| for (const a of dirty.added) { | |
| console.log(` ${pc.green('A')} ${a}`); | |
| } | |
| for (const d of dirty.deleted) { | |
| console.log(` ${pc.red('D')} ${d}`); | |
| } | |
| } | |
| }); | |
| } catch (err: unknown) { | |
| const message = err instanceof Error ? err.message : String(err); | |
| outputError(message, 'STATUS_ERROR', options); | |
| } | |
| } | |