mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-08 00:19:42 +02:00
chore: bump version to 0.1641
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.1640 (must match `package.json`)
|
**Version**: 0.1641 (must match `package.json`)
|
||||||
|
|
||||||
## Project Overview
|
## Project Overview
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "claudeman",
|
"name": "claudeman",
|
||||||
"version": "0.1640",
|
"version": "0.1641",
|
||||||
"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",
|
||||||
|
|||||||
+37
-14
@@ -960,6 +960,7 @@ const VoiceInput = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onWebSpeechResult(event) {
|
_onWebSpeechResult(event) {
|
||||||
|
if (!this.isRecording) return;
|
||||||
this._resetSilenceTimeout();
|
this._resetSilenceTimeout();
|
||||||
let interim = '';
|
let interim = '';
|
||||||
let finalText = '';
|
let finalText = '';
|
||||||
@@ -1023,13 +1024,18 @@ const VoiceInput = {
|
|||||||
_insertText(text) {
|
_insertText(text) {
|
||||||
if (!app.activeSessionId || !text.trim()) return;
|
if (!app.activeSessionId || !text.trim()) return;
|
||||||
const trimmed = text.trim();
|
const trimmed = text.trim();
|
||||||
if (app._localEchoEnabled && app._localEchoOverlay) {
|
const mode = this._getDeepgramConfig().insertMode || 'direct';
|
||||||
// Local echo on: inject into overlay so backspace/editing works (same as paste).
|
|
||||||
app._localEchoOverlay.appendText(trimmed);
|
if (mode === 'compose') {
|
||||||
setTimeout(() => { if (app.terminal) app.terminal.focus(); }, 150);
|
|
||||||
} else {
|
|
||||||
// Local echo off: show editable compose overlay before sending to PTY.
|
|
||||||
this._showComposeOverlay(trimmed);
|
this._showComposeOverlay(trimmed);
|
||||||
|
} else {
|
||||||
|
// Direct mode: inject into local echo overlay if available, else send to PTY
|
||||||
|
if (app._localEchoEnabled && app._localEchoOverlay) {
|
||||||
|
app._localEchoOverlay.appendText(trimmed);
|
||||||
|
} else {
|
||||||
|
app.sendInput(trimmed).catch(() => {});
|
||||||
|
}
|
||||||
|
setTimeout(() => { if (app.terminal) app.terminal.focus(); }, 150);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -2585,14 +2591,29 @@ class ClaudemanApp {
|
|||||||
const settingsPromise = fetch('/api/settings').then(r => r.ok ? r.json() : null).catch(() => null);
|
const settingsPromise = fetch('/api/settings').then(r => r.ok ? r.json() : null).catch(() => null);
|
||||||
this.loadQuickStartCases(null, settingsPromise);
|
this.loadQuickStartCases(null, settingsPromise);
|
||||||
this.setupEventListeners();
|
this.setupEventListeners();
|
||||||
// Mobile settings gear: non-passive touchstart to prevent keyboard dismiss
|
// Mobile: ensure button taps register even when keyboard is visible.
|
||||||
const settingsBtn = document.querySelector('.btn-settings-mobile');
|
// On mobile, tapping a button while the soft keyboard is up causes the
|
||||||
if (settingsBtn) {
|
// browser to dismiss the keyboard first (blur event), swallowing the tap.
|
||||||
settingsBtn.addEventListener('touchstart', (e) => {
|
// The button only receives the click on a second tap. Fix: intercept
|
||||||
e.preventDefault();
|
// touchstart on buttons while keyboard is visible, preventDefault to stop
|
||||||
e.stopPropagation();
|
// the dismiss-swallows-tap behavior, and trigger the click programmatically.
|
||||||
app.openAppSettings();
|
if (MobileDetection.isTouchDevice()) {
|
||||||
}, { passive: false });
|
const addKeyboardTapFix = (container) => {
|
||||||
|
if (!container) return;
|
||||||
|
container.addEventListener('touchstart', (e) => {
|
||||||
|
if (!KeyboardHandler.keyboardVisible) return;
|
||||||
|
const btn = e.target.closest('button');
|
||||||
|
if (!btn) return;
|
||||||
|
e.preventDefault();
|
||||||
|
btn.click();
|
||||||
|
// Refocus terminal so keyboard stays open (e.g. voice input button)
|
||||||
|
if (typeof app !== 'undefined' && app.terminal) {
|
||||||
|
app.terminal.focus();
|
||||||
|
}
|
||||||
|
}, { passive: false });
|
||||||
|
};
|
||||||
|
addKeyboardTapFix(document.querySelector('.toolbar'));
|
||||||
|
addKeyboardTapFix(document.querySelector('.welcome-overlay'));
|
||||||
}
|
}
|
||||||
// System stats polling deferred until sessions exist (started in handleInit/session:created)
|
// System stats polling deferred until sessions exist (started in handleInit/session:created)
|
||||||
// Setup online/offline detection
|
// Setup online/offline detection
|
||||||
@@ -10995,6 +11016,7 @@ class ClaudemanApp {
|
|||||||
document.getElementById('voiceDeepgramKey').value = voiceCfg.apiKey || '';
|
document.getElementById('voiceDeepgramKey').value = voiceCfg.apiKey || '';
|
||||||
document.getElementById('voiceLanguage').value = voiceCfg.language || 'en-US';
|
document.getElementById('voiceLanguage').value = voiceCfg.language || 'en-US';
|
||||||
document.getElementById('voiceKeyterms').value = voiceCfg.keyterms || 'claudeman, tmux, respawn, subagent, ralph, fastify, xterm, pty';
|
document.getElementById('voiceKeyterms').value = voiceCfg.keyterms || 'claudeman, tmux, respawn, subagent, ralph, fastify, xterm, pty';
|
||||||
|
document.getElementById('voiceInsertMode').value = voiceCfg.insertMode || 'direct';
|
||||||
// Reset key visibility to hidden
|
// Reset key visibility to hidden
|
||||||
const keyInput = document.getElementById('voiceDeepgramKey');
|
const keyInput = document.getElementById('voiceDeepgramKey');
|
||||||
keyInput.type = 'password';
|
keyInput.type = 'password';
|
||||||
@@ -11190,6 +11212,7 @@ class ClaudemanApp {
|
|||||||
apiKey: document.getElementById('voiceDeepgramKey').value.trim(),
|
apiKey: document.getElementById('voiceDeepgramKey').value.trim(),
|
||||||
language: document.getElementById('voiceLanguage').value,
|
language: document.getElementById('voiceLanguage').value,
|
||||||
keyterms: document.getElementById('voiceKeyterms').value.trim(),
|
keyterms: document.getElementById('voiceKeyterms').value.trim(),
|
||||||
|
insertMode: document.getElementById('voiceInsertMode').value,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Save notification preferences separately
|
// Save notification preferences separately
|
||||||
|
|||||||
@@ -1175,6 +1175,15 @@
|
|||||||
<span class="voice-provider-status" id="voiceProviderStatus">—</span>
|
<span class="voice-provider-status" id="voiceProviderStatus">—</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="settings-section-header">Behavior</div>
|
||||||
|
<div class="settings-item" style="grid-column: 1 / -1;">
|
||||||
|
<span class="settings-item-label">Insert mode</span>
|
||||||
|
<select id="voiceInsertMode" class="form-select" style="width: auto;">
|
||||||
|
<option value="direct">Direct to input</option>
|
||||||
|
<option value="compose">Compose dialog</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="settings-section-header">Deepgram Nova-3</div>
|
<div class="settings-section-header">Deepgram Nova-3</div>
|
||||||
<div class="form-row" style="grid-column: 1 / -1;">
|
<div class="form-row" style="grid-column: 1 / -1;">
|
||||||
<label for="voiceDeepgramKey">API Key</label>
|
<label for="voiceDeepgramKey">API Key</label>
|
||||||
|
|||||||
Reference in New Issue
Block a user