diff --git a/package.json b/package.json index fbf8c1e6..40374494 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "claudeman", - "version": "1.0.0", + "version": "0.1337", "description": "The missing control plane for Claude Code - run 20 autonomous agents with real-time monitoring and session persistence", "type": "module", "main": "dist/index.js", diff --git a/src/web/public/app.js b/src/web/public/app.js index 6a5c100b..8f34d1a9 100644 --- a/src/web/public/app.js +++ b/src/web/public/app.js @@ -1291,6 +1291,15 @@ class ClaudemanApp { } handleInit(data) { + // Update version display + if (data.version) { + const versionEl = this.$('versionDisplay'); + if (versionEl) { + versionEl.textContent = `v${data.version}`; + versionEl.title = `Claudeman v${data.version}`; + } + } + this.sessions.clear(); this.ralphStates.clear(); data.sessions.forEach(s => { diff --git a/src/web/public/index.html b/src/web/public/index.html index 7b6ce045..80d99c82 100644 --- a/src/web/public/index.html +++ b/src/web/public/index.html @@ -215,6 +215,10 @@ +
+ diff --git a/src/web/public/styles.css b/src/web/public/styles.css index c1d1c7bf..77fb4c83 100644 --- a/src/web/public/styles.css +++ b/src/web/public/styles.css @@ -1246,6 +1246,7 @@ body { display: flex; align-items: center; justify-content: space-between; + position: relative; height: var(--toolbar-height); padding: 0 0.5rem; background: var(--bg-card); @@ -1260,6 +1261,23 @@ body { gap: 0.25rem; } +.toolbar-center { + position: absolute; + left: 50%; + transform: translateX(-50%); +} + +.version-display { + font-family: 'SF Mono', Monaco, monospace; + font-size: 0.7rem; + color: var(--text-muted); + padding: 0.2rem 0.5rem; + background: rgba(255, 255, 255, 0.05); + border-radius: 3px; + cursor: default; + user-select: none; +} + .toolbar-group { display: flex; align-items: center; diff --git a/src/web/server.ts b/src/web/server.ts index 3bdad372..d8b2bcbb 100644 --- a/src/web/server.ts +++ b/src/web/server.ts @@ -28,6 +28,11 @@ import { generateClaudeMd } from '../templates/claude-md.js'; import { parseRalphLoopConfig, extractCompletionPhrase } from '../ralph-config.js'; import { writeHooksConfig } from '../hooks-config.js'; import { v4 as uuidv4 } from 'uuid'; +import { createRequire } from 'node:module'; + +// Load version from package.json +const require = createRequire(import.meta.url); +const { version: APP_VERSION } = require('../../package.json'); import { getErrorMessage, ApiErrorCode, @@ -2187,6 +2192,7 @@ export class WebServer extends EventEmitter { } return { + version: APP_VERSION, sessions: this.getSessionsState(), scheduledRuns: Array.from(this.scheduledRuns.values()), respawnStatus,