claude-code-session-manager 0.90.0 → 0.91.0
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/dist/assets/{AgentLibrary-CrmoSn9-.js → AgentLibrary-zkgdnCnG.js} +1 -1
- package/dist/assets/{DataModel-SPLQTR8E.js → DataModel-CNFdqxrR.js} +1 -1
- package/dist/assets/{History-DT6S3abz.js → History-C-qijfXz.js} +1 -1
- package/dist/assets/{Hooks-CC2iv5Oq.js → Hooks-DGxt1nBd.js} +1 -1
- package/dist/assets/{HostBilko-DqY7dA2a.js → HostBilko-sIYTK-m9.js} +1 -1
- package/dist/assets/{Library-CUoOC77T.js → Library-51Jx0oGl.js} +1 -1
- package/dist/assets/{ListDetail-DgrG72f4.js → ListDetail-ByNJU-ie.js} +1 -1
- package/dist/assets/{MarkdownEditor-C8dB3ZWU.js → MarkdownEditor-Wwcpe9O1.js} +1 -1
- package/dist/assets/{McpServers-DupdjvFt.js → McpServers-Bs5xPbTG.js} +1 -1
- package/dist/assets/{Memory-C_4LhC2r.js → Memory-BsHGInmd.js} +1 -1
- package/dist/assets/{Panel-DWmE5Fu9.js → Panel-ilEDcV0m.js} +1 -1
- package/dist/assets/{Permissions-hxiN2IWM.js → Permissions-Djgc3TFk.js} +1 -1
- package/dist/assets/{Plugins-fttEgZqy.js → Plugins-BBojr1mt.js} +2 -2
- package/dist/assets/{ProvenanceBadge-DROCzlbx.js → ProvenanceBadge-Cz1VLnXb.js} +1 -1
- package/dist/assets/{SaveBar-BZs0IQHq.js → SaveBar-Cj0wz84u.js} +1 -1
- package/dist/assets/{Scheduler-Bi4oZ8gg.js → Scheduler-D4Ekm93R.js} +1 -1
- package/dist/assets/{ScopeSwitcher-C0538XU8.js → ScopeSwitcher-DA5MqWli.js} +1 -1
- package/dist/assets/{Settings-CcW6x-wu.js → Settings-B1Kfgjvl.js} +1 -1
- package/dist/assets/{SkillReferenceGraph-BtCcPAYO.js → SkillReferenceGraph-Dew-1uMy.js} +1 -1
- package/dist/assets/{Skills-Daf_1sQR.js → Skills-DzuhnXy9.js} +1 -1
- package/dist/assets/{SystemPrompt-rYIla_wt.js → SystemPrompt-CNcCwEev.js} +1 -1
- package/dist/assets/{TagLibrary-81Mr1RLU.js → TagLibrary-D0plTZgP.js} +1 -1
- package/dist/assets/{TiptapBody-BxuLNg1e.js → TiptapBody-BlmUt7SR.js} +1 -1
- package/dist/assets/{Toggle-CN8EVEai.js → Toggle-yTfx2R-e.js} +1 -1
- package/dist/assets/{index-Dh7BLxdA.css → index-CRPJslSA.css} +1 -1
- package/dist/assets/{index-A9TWmB7_.js → index-ju-h7BFf.js} +314 -314
- package/dist/assets/{settingsSchema-C9I9a0jv.js → settingsSchema-BkcnLBYk.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/src/main/__tests__/bilkoHost-integration.test.cjs +22 -9
- package/src/main/__tests__/projectHomeAdminRoutes.test.cjs +12 -0
- package/src/main/bilkoHost.cjs +6 -7
- package/src/main/build-info.json +4 -4
- package/src/main/index.cjs +1 -1
- package/src/preload/api.d.ts +2 -2
package/dist/index.html
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;0,6..72,700;1,6..72,400&family=Geist:wght@300;400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
10
|
-
<script type="module" crossorigin src="./assets/index-
|
|
10
|
+
<script type="module" crossorigin src="./assets/index-ju-h7BFf.js"></script>
|
|
11
11
|
<link rel="modulepreload" crossorigin href="./assets/monaco-editor-BW5C4Iv1.js">
|
|
12
12
|
<link rel="stylesheet" crossorigin href="./assets/monaco-editor-BTnBOi8r.css">
|
|
13
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
13
|
+
<link rel="stylesheet" crossorigin href="./assets/index-CRPJslSA.css">
|
|
14
14
|
</head>
|
|
15
15
|
<body class="bg-bg text-fg font-sans antialiased">
|
|
16
16
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-code-session-manager",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.91.0",
|
|
4
4
|
"description": "Local cockpit for the Claude Code CLI — multi-tab terminal, full config surface, scheduler, voice dictation, and live observability.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/main/index.cjs",
|
|
@@ -12,15 +12,12 @@ const bilkoHost = require('../bilkoHost.cjs');
|
|
|
12
12
|
function makeProject() {
|
|
13
13
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'bilko-host-'));
|
|
14
14
|
config.addAllowedRoot(root);
|
|
15
|
-
fs.mkdirSync(path.join(root, 'session-manager-operations', 'project-pages'
|
|
15
|
+
fs.mkdirSync(path.join(root, 'session-manager-operations', 'project-pages'), { recursive: true });
|
|
16
16
|
fs.writeFileSync(
|
|
17
17
|
path.join(root, 'session-manager-operations', 'project-pages', 'home.html'),
|
|
18
18
|
'<html><title>Demo</title>Home</html>',
|
|
19
19
|
);
|
|
20
|
-
fs.writeFileSync(
|
|
21
|
-
path.join(root, 'session-manager-operations', 'project-pages', 'output', 'feature.html'),
|
|
22
|
-
'<html><title>Demo</title>Feature</html>',
|
|
23
|
-
);
|
|
20
|
+
fs.writeFileSync(path.join(root, 'feature.html'), '<html><title>Demo</title>Feature</html>');
|
|
24
21
|
fs.writeFileSync(path.join(root, 'package.json'), JSON.stringify({ name: 'demo-app', version: '1.2.3' }));
|
|
25
22
|
return root;
|
|
26
23
|
}
|
|
@@ -42,7 +39,7 @@ test('addDocument then prepareBundle writes a sub-path document at the expected
|
|
|
42
39
|
cwd: root,
|
|
43
40
|
subpath: 'special-doc/01',
|
|
44
41
|
title: 'Feature deep-dive',
|
|
45
|
-
source: { kind: '
|
|
42
|
+
source: { kind: 'file', path: 'feature.html' },
|
|
46
43
|
});
|
|
47
44
|
const result = await bilkoHost.prepareBundle({ cwd: root, slug: 'demo-app' });
|
|
48
45
|
assert.equal(
|
|
@@ -53,6 +50,22 @@ test('addDocument then prepareBundle writes a sub-path document at the expected
|
|
|
53
50
|
fs.rmSync(root, { recursive: true, force: true });
|
|
54
51
|
});
|
|
55
52
|
|
|
53
|
+
test('a non-home project-page-lens document throws the retired-lens error (no output/ fallback)', async () => {
|
|
54
|
+
const root = makeProject();
|
|
55
|
+
await bilkoHost.prepareBundle({ cwd: root, slug: 'demo-app' });
|
|
56
|
+
await bilkoHost.addDocument({
|
|
57
|
+
cwd: root,
|
|
58
|
+
subpath: 'special-doc/01',
|
|
59
|
+
title: 'Feature deep-dive',
|
|
60
|
+
source: { kind: 'project-page-lens', lens: 'feature' },
|
|
61
|
+
});
|
|
62
|
+
await assert.rejects(
|
|
63
|
+
() => bilkoHost.prepareBundle({ cwd: root, slug: 'demo-app' }),
|
|
64
|
+
/retired "feature" Project Page lens; only the single home\.html page is generated now/,
|
|
65
|
+
);
|
|
66
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
67
|
+
});
|
|
68
|
+
|
|
56
69
|
test('removeDocument + prepareBundle wholesale-rebuilds dist/, leaving no trace of the removed file', async () => {
|
|
57
70
|
const root = makeProject();
|
|
58
71
|
await bilkoHost.prepareBundle({ cwd: root, slug: 'demo-app' });
|
|
@@ -60,7 +73,7 @@ test('removeDocument + prepareBundle wholesale-rebuilds dist/, leaving no trace
|
|
|
60
73
|
cwd: root,
|
|
61
74
|
subpath: 'special-doc/01',
|
|
62
75
|
title: 'Feature deep-dive',
|
|
63
|
-
source: { kind: '
|
|
76
|
+
source: { kind: 'file', path: 'feature.html' },
|
|
64
77
|
});
|
|
65
78
|
await bilkoHost.prepareBundle({ cwd: root, slug: 'demo-app' });
|
|
66
79
|
const docId = added.documents.find((d) => d.subpath === 'special-doc/01').id;
|
|
@@ -95,10 +108,10 @@ test('addDocument refuses a duplicate sub-path', async () => {
|
|
|
95
108
|
cwd: root,
|
|
96
109
|
subpath: 'doc',
|
|
97
110
|
title: 'A',
|
|
98
|
-
source: { kind: '
|
|
111
|
+
source: { kind: 'file', path: 'feature.html' },
|
|
99
112
|
});
|
|
100
113
|
await assert.rejects(
|
|
101
|
-
() => bilkoHost.addDocument({ cwd: root, subpath: 'doc', title: 'B', source: { kind: '
|
|
114
|
+
() => bilkoHost.addDocument({ cwd: root, subpath: 'doc', title: 'B', source: { kind: 'file', path: 'feature.html' } }),
|
|
102
115
|
/already uses subpath/,
|
|
103
116
|
);
|
|
104
117
|
fs.rmSync(root, { recursive: true, force: true });
|
|
@@ -163,3 +163,15 @@ test('bad JSON, missing/relative cwd, non-project cwd, and unknown keys are 400s
|
|
|
163
163
|
expect(res.status).toBe(400);
|
|
164
164
|
expect(res.body.error).toContain('not a Session Manager project');
|
|
165
165
|
});
|
|
166
|
+
|
|
167
|
+
test('one-file contract: project-pages holds exactly home.html after one write and after a regenerate', async () => {
|
|
168
|
+
const cwd = await mkProjectCwd();
|
|
169
|
+
const adminHttp = makeFakeAdminHttp();
|
|
170
|
+
registerAdminRoute(adminHttp);
|
|
171
|
+
const pagesDir = path.join(fs.realpathSync(cwd), 'session-manager-operations', 'project-pages');
|
|
172
|
+
await adminHttp.call('POST', '/admin/project-home/write', { body: { cwd, html: '<p>first</p>' } });
|
|
173
|
+
expect(fs.readdirSync(pagesDir)).toEqual(['home.html']);
|
|
174
|
+
await adminHttp.call('POST', '/admin/project-home/write', { body: { cwd, html: '<p>second, different</p>' } });
|
|
175
|
+
expect(fs.readdirSync(pagesDir)).toEqual(['home.html']);
|
|
176
|
+
expect(fs.readFileSync(path.join(pagesDir, 'home.html'), 'utf8')).toBe('<p>second, different</p>');
|
|
177
|
+
});
|
package/src/main/bilkoHost.cjs
CHANGED
|
@@ -220,13 +220,12 @@ async function removeDocument({ cwd, id }) {
|
|
|
220
220
|
|
|
221
221
|
async function resolveDocumentHtml(cwd, doc) {
|
|
222
222
|
if (doc.source.kind === 'project-page-lens') {
|
|
223
|
-
// Only `home` is generated now (one home.html);
|
|
224
|
-
//
|
|
225
|
-
|
|
226
|
-
doc.source.lens
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
);
|
|
223
|
+
// Only `home` is generated now (one home.html); other lens names are
|
|
224
|
+
// retired and have no output anywhere — fail loudly rather than fall back.
|
|
225
|
+
if (doc.source.lens !== 'home') {
|
|
226
|
+
throw new Error(`document "${doc.title}" points at the retired "${doc.source.lens}" Project Page lens; only the single home.html page is generated now`);
|
|
227
|
+
}
|
|
228
|
+
const result = await config.readText(homePagePath(cwd));
|
|
230
229
|
if (!result.exists) {
|
|
231
230
|
throw new Error(`document "${doc.title}" points at the ${doc.source.lens} Project Page, but it hasn't been generated yet`);
|
|
232
231
|
}
|
package/src/main/build-info.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
3
|
-
"gitSha": "
|
|
4
|
-
"gitShortSha": "
|
|
2
|
+
"version": "0.91.0",
|
|
3
|
+
"gitSha": "0029caa246d6296f7f8e83a502f5351c670b269c",
|
|
4
|
+
"gitShortSha": "0029caa",
|
|
5
5
|
"gitBranch": "HEAD",
|
|
6
|
-
"builtAt": "2026-09-20T19:
|
|
6
|
+
"builtAt": "2026-09-20T19:42:50.657Z",
|
|
7
7
|
"dirty": false
|
|
8
8
|
}
|
package/src/main/index.cjs
CHANGED
|
@@ -513,7 +513,7 @@ ipcMain.handle('app:launch-mode', () => ({
|
|
|
513
513
|
// `claude mcp list`. Read-only, single in-flight call — no polling.
|
|
514
514
|
ipcMain.handle('mcp:status', () => probeMcpStatus());
|
|
515
515
|
|
|
516
|
-
//
|
|
516
|
+
// The Dashboard's "Agent tools" section (HomeAgentTools): the same catalog data
|
|
517
517
|
// GET /admin/mcp/catalog serves to external callers, read in-process here so
|
|
518
518
|
// the renderer never makes a direct HTTP call. Static data, no cwd needed.
|
|
519
519
|
ipcMain.handle('mcp:catalog', () => ({ ok: true, tools: MCP_TOOL_CATALOG, recipes: MCP_RECIPES }));
|
package/src/preload/api.d.ts
CHANGED
|
@@ -200,8 +200,8 @@ export interface McpStatusResult {
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
/** One session-manager-scheduler MCP tool's catalog entry (src/main/lib/mcpToolCatalog.cjs) —
|
|
203
|
-
* the same data GET /admin/mcp/catalog serves, read in-process for
|
|
204
|
-
*
|
|
203
|
+
* the same data GET /admin/mcp/catalog serves, read in-process for the Dashboard's
|
|
204
|
+
* HomeAgentTools section. */
|
|
205
205
|
export interface McpToolCatalogEntry {
|
|
206
206
|
name: string;
|
|
207
207
|
group: 'scheduler' | 'chat' | 'feedback' | 'help';
|