mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-03 22:19:42 +02:00
chore: bump version to 0.1516
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`)
|
||||
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
@@ -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",
|
||||
|
||||
@@ -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 ==========
|
||||
|
||||
@@ -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">⚙</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) -->
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user