mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-08 00:19:42 +02:00
chore: bump version to 0.1526
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.1525 (must match `package.json` for npm publish)
|
**Version**: 0.1526 (must match `package.json` for npm publish)
|
||||||
|
|
||||||
## Project Overview
|
## Project Overview
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "claudeman",
|
"name": "claudeman",
|
||||||
"version": "0.1525",
|
"version": "0.1526",
|
||||||
"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",
|
||||||
|
|||||||
+29
-5
@@ -14575,6 +14575,17 @@ class ClaudemanApp {
|
|||||||
modal.querySelectorAll('.modal-tabs .modal-tab-btn').forEach(btn => {
|
modal.querySelectorAll('.modal-tabs .modal-tab-btn').forEach(btn => {
|
||||||
btn.onclick = () => this.switchCaseModalTab(btn.dataset.tab);
|
btn.onclick = () => this.switchCaseModalTab(btn.dataset.tab);
|
||||||
});
|
});
|
||||||
|
// Scroll-into-view on focus for mobile keyboard visibility
|
||||||
|
modal.querySelectorAll('input[type="text"]').forEach(input => {
|
||||||
|
if (!input._mobileScrollWired) {
|
||||||
|
input._mobileScrollWired = true;
|
||||||
|
input.addEventListener('focus', () => {
|
||||||
|
if (window.innerWidth <= 430) {
|
||||||
|
setTimeout(() => input.scrollIntoView({ behavior: 'smooth', block: 'center' }), 300);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
modal.classList.add('active');
|
modal.classList.add('active');
|
||||||
document.getElementById('newCaseName').focus();
|
document.getElementById('newCaseName').focus();
|
||||||
}
|
}
|
||||||
@@ -14606,10 +14617,19 @@ class ClaudemanApp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async submitCaseModal() {
|
async submitCaseModal() {
|
||||||
if (this.caseModalTab === 'case-create') {
|
const btn = document.getElementById('caseModalSubmit');
|
||||||
await this.createCase();
|
const originalText = btn.textContent;
|
||||||
} else {
|
btn.classList.add('loading');
|
||||||
await this.linkCase();
|
btn.textContent = this.caseModalTab === 'case-create' ? 'Creating...' : 'Linking...';
|
||||||
|
try {
|
||||||
|
if (this.caseModalTab === 'case-create') {
|
||||||
|
await this.createCase();
|
||||||
|
} else {
|
||||||
|
await this.linkCase();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
btn.classList.remove('loading');
|
||||||
|
btn.textContent = originalText;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -14771,8 +14791,12 @@ class ClaudemanApp {
|
|||||||
showCreateCaseFromMobile() {
|
showCreateCaseFromMobile() {
|
||||||
// Close mobile picker first
|
// Close mobile picker first
|
||||||
this.closeMobileCasePicker();
|
this.closeMobileCasePicker();
|
||||||
// Open the create case modal
|
// Open the create case modal with slide-up animation
|
||||||
this.showCreateCaseModal();
|
this.showCreateCaseModal();
|
||||||
|
const modal = document.getElementById('createCaseModal');
|
||||||
|
modal.classList.add('from-mobile');
|
||||||
|
// Remove animation class after it plays
|
||||||
|
setTimeout(() => modal.classList.remove('from-mobile'), 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderScreenSessions() {
|
renderScreenSessions() {
|
||||||
|
|||||||
@@ -1110,25 +1110,25 @@
|
|||||||
<div class="modal-tab-content" id="case-create">
|
<div class="modal-tab-content" id="case-create">
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label>Case Name</label>
|
<label>Case Name</label>
|
||||||
<input type="text" id="newCaseName" placeholder="my-project" pattern="[a-zA-Z0-9_-]+">
|
<input type="text" id="newCaseName" placeholder="my-project" pattern="[a-zA-Z0-9_-]+" autocomplete="off" autocapitalize="off" spellcheck="false">
|
||||||
<span class="form-hint">Letters, numbers, hyphens, underscores only. Created in ~/claudeman-cases/</span>
|
<span class="form-hint">Letters, numbers, hyphens, underscores only. Created in ~/claudeman-cases/</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label>Description (optional)</label>
|
<label>Description (optional)</label>
|
||||||
<input type="text" id="newCaseDescription" placeholder="A brief description...">
|
<input type="text" id="newCaseDescription" placeholder="A brief description..." autocomplete="off">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Link Existing Tab -->
|
<!-- Link Existing Tab -->
|
||||||
<div class="modal-tab-content hidden" id="case-link">
|
<div class="modal-tab-content hidden" id="case-link">
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label>Case Name</label>
|
<label>Case Name</label>
|
||||||
<input type="text" id="linkCaseName" placeholder="my-project" pattern="[a-zA-Z0-9_-]+">
|
<input type="text" id="linkCaseName" placeholder="my-project" pattern="[a-zA-Z0-9_-]+" autocomplete="off" autocapitalize="off" spellcheck="false">
|
||||||
<span class="form-hint">Name to identify this case in Claudeman</span>
|
<span class="form-hint">Name to identify this case in Claudeman</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label>Folder Path</label>
|
<label>Folder Path</label>
|
||||||
<input type="text" id="linkCasePath" placeholder="/home/user/projects/my-project">
|
<input type="text" id="linkCasePath" placeholder="/home/user/projects/my-project" autocomplete="off" autocapitalize="off" autocorrect="off" spellcheck="false">
|
||||||
<span class="form-hint">Absolute path to an existing project folder</span>
|
<span class="form-hint">Absolute path to an existing project folder, e.g. /home/you/my-project</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1075,6 +1075,11 @@ html.mobile-init .file-browser-panel {
|
|||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* When keyboard opens in case modal, let body grow taller */
|
||||||
|
.keyboard-visible #createCaseModal .modal-body {
|
||||||
|
max-height: 60vh;
|
||||||
|
}
|
||||||
|
|
||||||
/* Mobile Case Picker - Mobile-specific overrides */
|
/* Mobile Case Picker - Mobile-specific overrides */
|
||||||
.mobile-case-picker .modal-backdrop {
|
.mobile-case-picker .modal-backdrop {
|
||||||
background: rgba(0, 0, 0, 0.5);
|
background: rgba(0, 0, 0, 0.5);
|
||||||
@@ -1128,6 +1133,98 @@ html.mobile-init .file-browser-panel {
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ---- Case Modal: Mobile Touch Optimizations ---- */
|
||||||
|
|
||||||
|
/* Larger tab buttons for case modal - easy to tap */
|
||||||
|
#createCaseModal .modal-tabs {
|
||||||
|
gap: 0.5rem;
|
||||||
|
padding: 0.5rem 1rem 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#createCaseModal .modal-tab-btn {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 44px;
|
||||||
|
padding: 0.6rem 1rem;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
font-weight: 500;
|
||||||
|
border-radius: 8px;
|
||||||
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Touch-friendly form inputs in case modal */
|
||||||
|
#createCaseModal .form-row {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#createCaseModal .form-row label {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
margin-bottom: 0.4rem;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #e5e7eb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#createCaseModal .form-row input[type="text"] {
|
||||||
|
min-height: 44px;
|
||||||
|
font-size: 16px; /* Prevents iOS zoom on focus */
|
||||||
|
padding: 0.5rem 0.75rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#createCaseModal .form-row .form-hint {
|
||||||
|
font-size: 0.65rem;
|
||||||
|
margin-top: 0.35rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Touch-friendly action buttons in case modal */
|
||||||
|
#createCaseModal .form-actions {
|
||||||
|
padding: 0.75rem 1rem;
|
||||||
|
padding-bottom: calc(0.75rem + var(--safe-area-bottom));
|
||||||
|
gap: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#createCaseModal .form-actions .btn-toolbar {
|
||||||
|
min-height: 44px !important;
|
||||||
|
max-height: 44px !important;
|
||||||
|
height: 44px !important;
|
||||||
|
font-size: 0.85rem !important;
|
||||||
|
font-weight: 500;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Loading state for submit button */
|
||||||
|
#caseModalSubmit.loading {
|
||||||
|
opacity: 0.6;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Smooth open animation for case modal from mobile picker */
|
||||||
|
#createCaseModal.from-mobile .modal-content {
|
||||||
|
animation: caseModalSlideUp 0.25s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes caseModalSlideUp {
|
||||||
|
from {
|
||||||
|
transform: translateY(30px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: translateY(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mobile case picker - larger create button (override btn-toolbar !important) */
|
||||||
|
.btn-case-create-mobile {
|
||||||
|
min-height: 48px !important;
|
||||||
|
max-height: 48px !important;
|
||||||
|
height: 48px !important;
|
||||||
|
font-size: 0.85rem !important;
|
||||||
|
font-weight: 500;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Settings grid - single column on phones */
|
/* Settings grid - single column on phones */
|
||||||
.settings-grid {
|
.settings-grid {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
|
|||||||
Reference in New Issue
Block a user