@bakapiano/ccsm 0.10.0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/public/css/tokens.css +3 -3
- package/public/js/main.js +14 -6
- package/public/manifest.webmanifest +1 -0
- package/scripts/install.js +7 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bakapiano/ccsm",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"description": "Claude Code Session Manager — Windows web UI to manage many concurrent claude sessions: live list, snapshot/restore, focus existing window, new session in an isolated workspace with repo clones",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "server.js",
|
package/public/css/tokens.css
CHANGED
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
--ink-muted: #8a8475;
|
|
29
29
|
--ink-faint: #b5af9d;
|
|
30
30
|
|
|
31
|
-
/* Accent —
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
/* Accent — Ocean blue. Calm and content-first. Users can override via
|
|
32
|
+
the Theme accent picker in Settings; that flow rewrites these vars
|
|
33
|
+
at runtime (state.js · applyAccentCssVars). */
|
|
34
34
|
--accent: #2f6fa3;
|
|
35
35
|
--accent-deep: #25577f;
|
|
36
36
|
--accent-soft: rgba(47, 111, 163, 0.10);
|
package/public/js/main.js
CHANGED
|
@@ -3,24 +3,32 @@
|
|
|
3
3
|
// the mount root.
|
|
4
4
|
|
|
5
5
|
import { render } from 'preact';
|
|
6
|
+
import { effect } from '@preact/signals';
|
|
6
7
|
import { html } from './html.js';
|
|
7
|
-
import { loadPersisted, clockTick, lastRefreshAt, installPrompt, isInstalledPwa, sidebarForcedCollapsed } from './state.js';
|
|
8
|
+
import { loadPersisted, clockTick, lastRefreshAt, installPrompt, isInstalledPwa, sidebarForcedCollapsed, serverHealth } from './state.js';
|
|
8
9
|
import { httpBase } from './backend.js';
|
|
9
10
|
import { loadConfig, refreshAll, loadSessions, loadFolders, loadWorkspaces, pollHealth } from './api.js';
|
|
10
11
|
import { setToast } from './toast.js';
|
|
11
12
|
import { App } from './components/App.js';
|
|
12
13
|
|
|
13
14
|
loadPersisted();
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
|
|
15
|
+
// Window/tab title tracks the live backend version — "CCSM v0.10.1" once
|
|
16
|
+
// /api/health responds, "CCSM" before then. A MutationObserver guards
|
|
17
|
+
// against Chromium standalone builds that occasionally try to inject the
|
|
18
|
+
// URL into the title bar; it accepts any "CCSM..." string we set and
|
|
19
|
+
// resets anything else.
|
|
20
|
+
function desiredTitle() {
|
|
21
|
+
const v = serverHealth.value.version;
|
|
22
|
+
return v ? `CCSM v${v}` : 'CCSM';
|
|
23
|
+
}
|
|
24
|
+
let expected = desiredTitle();
|
|
25
|
+
function lockTitle() { if (document.title !== expected) document.title = expected; }
|
|
19
26
|
lockTitle();
|
|
20
27
|
new MutationObserver(lockTitle).observe(
|
|
21
28
|
document.querySelector('title') || document.head,
|
|
22
29
|
{ childList: true, subtree: true, characterData: true }
|
|
23
30
|
);
|
|
31
|
+
effect(() => { expected = desiredTitle(); lockTitle(); });
|
|
24
32
|
render(html`<${App} />`, document.getElementById('app'));
|
|
25
33
|
|
|
26
34
|
// PWA install affordance — Chromium fires `beforeinstallprompt` when the
|
package/scripts/install.js
CHANGED
|
@@ -116,11 +116,16 @@ try {
|
|
|
116
116
|
if (process.env.CCSM_NO_AUTOLAUNCH !== '1') {
|
|
117
117
|
try {
|
|
118
118
|
const { spawn } = require('node:child_process');
|
|
119
|
-
|
|
119
|
+
// Spawn `node bin/ccsm.js` directly — NOT ccsm.cmd. On Windows,
|
|
120
|
+
// child_process.spawn() with shell:false refuses .cmd files (throws
|
|
121
|
+
// EINVAL); using shell:true would flash a console window. Going
|
|
122
|
+
// through node + the JS entrypoint sidesteps both problems and
|
|
123
|
+
// matches exactly what the .cmd shim would have invoked.
|
|
124
|
+
const launcherJs = path.join(__dirname, '..', 'bin', 'ccsm.js');
|
|
125
|
+
const child = spawn(process.execPath, [launcherJs], {
|
|
120
126
|
detached: true,
|
|
121
127
|
stdio: 'ignore',
|
|
122
128
|
windowsHide: true,
|
|
123
|
-
shell: false,
|
|
124
129
|
});
|
|
125
130
|
child.unref();
|
|
126
131
|
log('launching ccsm now · check for the chromeless window');
|