chore: bump version to 0.1516

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
arkon
2026-02-16 16:45:47 +01:00
co-authored by Claude Opus 4.6
parent ffffb02325
commit 5832230091
6 changed files with 211 additions and 9 deletions
+1 -1
View File
@@ -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`)
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.1515 (must match `package.json` for npm publish)
**Version**: 0.1516 (must match `package.json` for npm publish)
## Project Overview
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "claudeman",
"version": "0.1515",
"version": "0.1516",
"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",
+42
View File
@@ -1472,6 +1472,15 @@ class ClaudemanApp {
this.loadState();
this.loadQuickStartCases();
this.setupEventListeners();
// Mobile settings gear: non-passive touchstart to prevent keyboard dismiss
const settingsBtn = document.querySelector('.btn-settings-mobile');
if (settingsBtn) {
settingsBtn.addEventListener('touchstart', (e) => {
e.preventDefault();
e.stopPropagation();
app.openAppSettings();
}, { passive: false });
}
// Start system stats polling
this.startSystemStatsPolling();
// Setup online/offline detection
@@ -14351,6 +14360,39 @@ class ClaudemanApp {
const settings = this.getCaseSettings(caseName);
settings.agentTeams = document.getElementById('caseAgentTeams').checked;
this.saveCaseSettings(caseName, settings);
// Sync mobile checkbox
const mobileCheckbox = document.getElementById('caseAgentTeamsMobile');
if (mobileCheckbox) mobileCheckbox.checked = settings.agentTeams;
}
toggleCaseSettingsMobile() {
const popover = document.getElementById('caseSettingsPopoverMobile');
if (popover.classList.contains('hidden')) {
const caseName = document.getElementById('quickStartCase').value || 'testcase';
const settings = this.getCaseSettings(caseName);
document.getElementById('caseAgentTeamsMobile').checked = settings.agentTeams;
popover.classList.remove('hidden');
const closeHandler = (e) => {
if (!popover.contains(e.target) && !e.target.classList.contains('btn-case-settings-mobile')) {
popover.classList.add('hidden');
document.removeEventListener('click', closeHandler);
}
};
setTimeout(() => document.addEventListener('click', closeHandler), 0);
} else {
popover.classList.add('hidden');
}
}
onCaseSettingChangedMobile() {
const caseName = document.getElementById('quickStartCase').value || 'testcase';
const settings = this.getCaseSettings(caseName);
settings.agentTeams = document.getElementById('caseAgentTeamsMobile').checked;
this.saveCaseSettings(caseName, settings);
// Sync desktop checkbox
const desktopCheckbox = document.getElementById('caseAgentTeams');
if (desktopCheckbox) desktopCheckbox.checked = settings.agentTeams;
}
// ========== Create Case Modal ==========
+10 -1
View File
@@ -303,11 +303,20 @@
<span class="form-hint">Enable experimental Agent Teams for new sessions in this case</span>
</div>
</div>
<!-- Mobile-only case button -->
<!-- Mobile-only case button + gear -->
<button class="btn-settings-mobile" onclick="app.openAppSettings()" title="App Settings"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg></button>
<button class="btn-toolbar btn-case-mobile" onclick="app.showMobileCasePicker()" title="Select case">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg>
<span id="mobileCaseName">Case</span>
</button>
<button class="btn-case-settings-mobile" id="btnCaseSettingsMobile" onclick="app.toggleCaseSettingsMobile()" title="Case settings">&#x2699;</button>
<div class="case-settings-popover-mobile hidden" id="caseSettingsPopoverMobile">
<label class="checkbox-inline">
<input type="checkbox" id="caseAgentTeamsMobile" onchange="app.onCaseSettingChangedMobile()">
<span>Agent Teams</span>
</label>
<span class="form-hint">Enable Agent Teams for new sessions</span>
</div>
</div>
<!-- Directory (hidden) -->
+83 -6
View File
@@ -221,15 +221,35 @@
height: 12px;
}
/* Larger settings gear icon for visibility */
/* Hide header settings gear on mobile - moved to toolbar */
.btn-icon-header.btn-settings {
width: 32px;
height: 32px;
display: none !important;
}
.btn-icon-header.btn-settings svg {
width: 16px;
height: 16px;
/* Mobile app settings gear in toolbar - next to Run Claude */
.btn-settings-mobile {
display: inline-flex !important;
align-items: center;
justify-content: center;
width: 26px;
height: 26px;
background: transparent;
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 4px;
color: #9ca3af;
cursor: pointer;
flex-shrink: 0;
order: 1; /* Right after Run Claude */
}
.btn-settings-mobile svg {
width: 13px;
height: 13px;
}
.btn-settings-mobile:active {
background: rgba(255, 255, 255, 0.1);
color: #fff;
}
/* App container - prevent scrolling, strict layout */
@@ -469,6 +489,63 @@
max-width: 50px;
}
/* Mobile case settings gear button */
.btn-case-settings-mobile {
display: inline-flex !important;
align-items: center;
justify-content: center;
width: 26px;
height: 26px;
background: transparent;
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 4px;
color: #9ca3af;
font-size: 0.85rem;
cursor: pointer;
order: 3;
flex-shrink: 0;
position: relative;
}
.btn-case-settings-mobile:active {
background: rgba(255, 255, 255, 0.1);
color: #fff;
}
/* Mobile case settings popover */
.case-settings-popover-mobile {
position: fixed;
bottom: calc(var(--safe-area-bottom) + 46px);
left: 8px;
right: 8px;
background: #1e1e1e;
border: 1px solid rgba(255, 255, 255, 0.15);
border-radius: 8px;
padding: 0.6rem 0.75rem;
z-index: 1000;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
display: block;
}
.case-settings-popover-mobile.hidden {
display: none !important;
}
.case-settings-popover-mobile .checkbox-inline {
display: flex;
align-items: center;
gap: 6px;
font-size: 0.75rem;
color: #e5e7eb;
}
.case-settings-popover-mobile .form-hint {
display: block;
margin-top: 0.2rem;
font-size: 0.6rem;
color: #6b7280;
}
/* Keyboard Accessory Bar - quick actions above keyboard */
.keyboard-accessory-bar {
display: none;
+74
View File
@@ -1932,6 +1932,11 @@ body {
color: #a8d8a8;
}
/* Mobile app settings gear - hidden on desktop, shown on mobile */
.btn-settings-mobile {
display: none;
}
/* Mobile case button - hidden on desktop, shown on mobile */
.btn-toolbar.btn-case-mobile {
display: none;
@@ -1957,6 +1962,19 @@ body {
white-space: nowrap;
}
/* Mobile case settings gear - hidden on desktop */
.btn-case-settings-mobile {
display: none;
}
.case-settings-popover-mobile {
display: none;
}
.case-settings-popover-mobile.hidden {
display: none;
}
/* Button icon styling */
.btn-toolbar .btn-icon {
display: inline-flex;
@@ -8555,6 +8573,62 @@ kbd {
max-width: 50px;
}
/* Mobile case settings gear button */
.btn-case-settings-mobile {
display: inline-flex !important;
align-items: center;
justify-content: center;
width: 26px;
height: 26px;
background: transparent;
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 4px;
color: #9ca3af;
font-size: 0.85rem;
cursor: pointer;
order: 3;
flex-shrink: 0;
position: relative;
}
.btn-case-settings-mobile:active {
background: rgba(255, 255, 255, 0.1);
color: #fff;
}
.case-settings-popover-mobile {
position: fixed;
bottom: calc(var(--safe-area-bottom) + 46px);
left: 8px;
right: 8px;
background: #1e1e1e;
border: 1px solid rgba(255, 255, 255, 0.15);
border-radius: 8px;
padding: 0.6rem 0.75rem;
z-index: 1000;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
display: block;
}
.case-settings-popover-mobile.hidden {
display: none !important;
}
.case-settings-popover-mobile .checkbox-inline {
display: flex;
align-items: center;
gap: 6px;
font-size: 0.75rem;
color: #e5e7eb;
}
.case-settings-popover-mobile .form-hint {
display: block;
margin-top: 0.2rem;
font-size: 0.6rem;
color: #6b7280;
}
/* Keyboard Accessory Bar - quick actions above keyboard */
.keyboard-accessory-bar {
display: none;