mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-09 08:59:40 +02:00
chore: bump version to 0.1594
This commit is contained in:
@@ -35,7 +35,7 @@ When user says "COM":
|
|||||||
1. Increment version in BOTH `package.json` AND `CLAUDE.md` (verify they match with `grep version package.json && grep Version CLAUDE.md`)
|
1. Increment version in BOTH `package.json` AND `CLAUDE.md` (verify they match with `grep version package.json && grep Version CLAUDE.md`)
|
||||||
2. Run: `git add -A && git commit -m "chore: bump version to X.XXXX" && git push && npm run build && systemctl --user restart claudeman-web`
|
2. Run: `git add -A && git commit -m "chore: bump version to X.XXXX" && git push && npm run build && systemctl --user restart claudeman-web`
|
||||||
|
|
||||||
**Version**: 0.1593 (must match `package.json` for npm publish)
|
**Version**: 0.1594 (must match `package.json` for npm publish)
|
||||||
|
|
||||||
## Project Overview
|
## Project Overview
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "claudeman",
|
"name": "claudeman",
|
||||||
"version": "0.1593",
|
"version": "0.1594",
|
||||||
"description": "The missing control plane for Claude Code - run 20 autonomous agents with real-time monitoring and session persistence",
|
"description": "The missing control plane for Claude Code - run 20 autonomous agents with real-time monitoring and session persistence",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
|
|||||||
+58
-7
@@ -955,7 +955,33 @@ class LocalEchoOverlay {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Auto-detect text already on the prompt line in the terminal buffer.
|
||||||
|
// Called on first keystroke when overlay is empty (pendingText='' and
|
||||||
|
// flushedOffset=0). Handles Tab completion, arrow-key edits, and any
|
||||||
|
// other case where the PTY has prompt text the overlay doesn't know about.
|
||||||
|
// Without this, the overlay's opaque background covers the canvas text.
|
||||||
|
_detectBufferText() {
|
||||||
|
try {
|
||||||
|
const prompt = this._findPrompt();
|
||||||
|
if (!prompt) return;
|
||||||
|
const buf = this.terminal.buffer.active;
|
||||||
|
const absRow = buf.viewportY + prompt.row;
|
||||||
|
const line = buf.getLine(absRow);
|
||||||
|
if (!line) return;
|
||||||
|
const lineText = line.translateToString(true);
|
||||||
|
const textStart = prompt.col + 2; // after "❯ "
|
||||||
|
const afterPrompt = lineText.slice(textStart).trimEnd();
|
||||||
|
if (afterPrompt.length > 0) {
|
||||||
|
this._flushedOffset = afterPrompt.length;
|
||||||
|
this._flushedText = afterPrompt;
|
||||||
|
this._lastPromptPos = prompt;
|
||||||
|
}
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
addChar(char) {
|
addChar(char) {
|
||||||
|
// On first keystroke after overlay was empty, detect existing buffer text
|
||||||
|
if (!this.pendingText && !this._flushedOffset) this._detectBufferText();
|
||||||
this.pendingText += char;
|
this.pendingText += char;
|
||||||
this._persist();
|
this._persist();
|
||||||
this._render();
|
this._render();
|
||||||
@@ -981,6 +1007,7 @@ class LocalEchoOverlay {
|
|||||||
|
|
||||||
appendText(text) {
|
appendText(text) {
|
||||||
if (!text) return;
|
if (!text) return;
|
||||||
|
if (!this.pendingText && !this._flushedOffset) this._detectBufferText();
|
||||||
this.pendingText += text;
|
this.pendingText += text;
|
||||||
this._persist();
|
this._persist();
|
||||||
this._render();
|
this._render();
|
||||||
@@ -2227,8 +2254,29 @@ class ClaudemanApp {
|
|||||||
}
|
}
|
||||||
this._pendingInput += data;
|
this._pendingInput += data;
|
||||||
flushInput();
|
flushInput();
|
||||||
|
} else if (this._localEchoOverlay) {
|
||||||
|
// No pending or flushed text — try detecting buffer text first
|
||||||
|
// (handles Tab completion, arrow edits, etc.)
|
||||||
|
this._localEchoOverlay._detectBufferText();
|
||||||
|
if (this._localEchoOverlay._flushedOffset > 0) {
|
||||||
|
// Found buffer text — delete last char
|
||||||
|
this._localEchoOverlay._flushedOffset--;
|
||||||
|
if (this._localEchoOverlay._flushedText) {
|
||||||
|
this._localEchoOverlay._flushedText = this._localEchoOverlay._flushedText.slice(0, -1);
|
||||||
|
}
|
||||||
|
this._localEchoOverlay._lastRenderKey = '';
|
||||||
|
if (this._localEchoOverlay._flushedOffset > 0) {
|
||||||
|
this._localEchoOverlay._render();
|
||||||
|
} else {
|
||||||
|
this._localEchoOverlay._lastPromptPos = null;
|
||||||
|
this._localEchoOverlay.overlay.innerHTML = '';
|
||||||
|
this._localEchoOverlay.overlay.style.display = 'none';
|
||||||
|
}
|
||||||
|
this._pendingInput += data;
|
||||||
|
flushInput();
|
||||||
|
}
|
||||||
|
// else: truly nothing to delete — swallow the backspace
|
||||||
}
|
}
|
||||||
// else: nothing to delete — swallow the backspace
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (/^[\r\n]+$/.test(data)) {
|
if (/^[\r\n]+$/.test(data)) {
|
||||||
@@ -4789,16 +4837,19 @@ class ClaudemanApp {
|
|||||||
// the PTY echo arrives in the terminal buffer.
|
// the PTY echo arrives in the terminal buffer.
|
||||||
if (this.activeSessionId) {
|
if (this.activeSessionId) {
|
||||||
const echoText = this._localEchoOverlay?.pendingText || '';
|
const echoText = this._localEchoOverlay?.pendingText || '';
|
||||||
|
// Include buffer-detected flushed text (from Tab completion, etc.)
|
||||||
|
// so it's preserved across tab switches.
|
||||||
|
const existingFlushed = this._localEchoOverlay?._flushedOffset || 0;
|
||||||
|
const existingFlushedText = this._localEchoOverlay?._flushedText || '';
|
||||||
if (echoText) {
|
if (echoText) {
|
||||||
this._sendInputAsync(this.activeSessionId, echoText);
|
this._sendInputAsync(this.activeSessionId, echoText);
|
||||||
// Store flushed length AND text PER SESSION so it's available when switching back.
|
}
|
||||||
// The text is needed because the terminal buffer may be stale after async reload.
|
const totalOffset = existingFlushed + echoText.length;
|
||||||
|
if (totalOffset > 0) {
|
||||||
if (!this._flushedOffsets) this._flushedOffsets = new Map();
|
if (!this._flushedOffsets) this._flushedOffsets = new Map();
|
||||||
if (!this._flushedTexts) this._flushedTexts = new Map();
|
if (!this._flushedTexts) this._flushedTexts = new Map();
|
||||||
const prev = this._flushedOffsets.get(this.activeSessionId) || 0;
|
this._flushedOffsets.set(this.activeSessionId, totalOffset);
|
||||||
const prevText = this._flushedTexts.get(this.activeSessionId) || '';
|
this._flushedTexts.set(this.activeSessionId, existingFlushedText + echoText);
|
||||||
this._flushedOffsets.set(this.activeSessionId, prev + echoText.length);
|
|
||||||
this._flushedTexts.set(this.activeSessionId, prevText + echoText);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this._localEchoOverlay?.clear();
|
this._localEchoOverlay?.clear();
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
<meta name="google" content="notranslate">
|
<meta name="google" content="notranslate">
|
||||||
<title>Claudeman</title>
|
<title>Claudeman</title>
|
||||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0%25' y1='0%25' x2='100%25' y2='100%25'%3E%3Cstop offset='0%25' stop-color='%2360a5fa'/%3E%3Cstop offset='100%25' stop-color='%233b82f6'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='32' height='32' rx='6' fill='%230a0a0a'/%3E%3Cpath d='M18 4L8 18h6l-2 10 10-14h-6z' fill='url(%23g)'/%3E%3C/svg%3E">
|
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0%25' y1='0%25' x2='100%25' y2='100%25'%3E%3Cstop offset='0%25' stop-color='%2360a5fa'/%3E%3Cstop offset='100%25' stop-color='%233b82f6'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='32' height='32' rx='6' fill='%230a0a0a'/%3E%3Cpath d='M18 4L8 18h6l-2 10 10-14h-6z' fill='url(%23g)'/%3E%3C/svg%3E">
|
||||||
<link rel="stylesheet" href="styles.css?v=0.1593">
|
<link rel="stylesheet" href="styles.css?v=0.1594">
|
||||||
<link rel="stylesheet" href="mobile.css?v=0.1593" media="(max-width: 1023px)">
|
<link rel="stylesheet" href="mobile.css?v=0.1594" media="(max-width: 1023px)">
|
||||||
<!-- xterm.css loaded async — terminal won't display until xterm.js runs anyway -->
|
<!-- xterm.css loaded async — terminal won't display until xterm.js runs anyway -->
|
||||||
<link rel="preload" href="vendor/xterm.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
<link rel="preload" href="vendor/xterm.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||||
<noscript><link rel="stylesheet" href="vendor/xterm.css"></noscript>
|
<noscript><link rel="stylesheet" href="vendor/xterm.css"></noscript>
|
||||||
@@ -1559,6 +1559,6 @@
|
|||||||
<!-- Lines drawn dynamically -->
|
<!-- Lines drawn dynamically -->
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
<script defer src="app.js?v=0.1593"></script>
|
<script defer src="app.js?v=0.1594"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user