claude-code-session-manager 0.71.0 → 0.72.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-B1lh6YEM.js → AgentLibrary-CXw7Z5Iw.js} +1 -1
- package/dist/assets/{History-B1jNdKFk.js → History-D64U_aDf.js} +1 -1
- package/dist/assets/{Hooks-BWHFkF7z.js → Hooks-BFVkM6QH.js} +1 -1
- package/dist/assets/{HostBilko-CYQt0b-t.js → HostBilko-BRERoCra.js} +1 -1
- package/dist/assets/{Library-DZVKlOBQ.js → Library-C6shVsjv.js} +1 -1
- package/dist/assets/{ListDetail-rBF1ZQv8.js → ListDetail-dXWSZuDV.js} +1 -1
- package/dist/assets/{MarkdownEditor-zS0QmHxL.js → MarkdownEditor-D_akyPJ2.js} +1 -1
- package/dist/assets/{McpServers-BA54nZee.js → McpServers-DxROkYGa.js} +1 -1
- package/dist/assets/{Memory-DN97rjG5.js → Memory-OqUyTRrr.js} +1 -1
- package/dist/assets/{Panel-DLn9L0Cv.js → Panel-Biw98xRO.js} +1 -1
- package/dist/assets/{Permissions-BnDRq-EM.js → Permissions-CIdZOzK8.js} +1 -1
- package/dist/assets/{Plugins-aPC4a4Bi.js → Plugins-Dt147wEE.js} +2 -2
- package/dist/assets/{ProvenanceBadge-Bc1gskID.js → ProvenanceBadge-BUikIHf4.js} +1 -1
- package/dist/assets/{SaveBar-CjvWkRaQ.js → SaveBar-BoHRDHlp.js} +1 -1
- package/dist/assets/{Scheduler-86oyi_P2.js → Scheduler-CipmAcy7.js} +1 -1
- package/dist/assets/{ScopeSwitcher-DJvnhSk3.js → ScopeSwitcher-CkCwUYU5.js} +1 -1
- package/dist/assets/{Settings-B7_1p_xA.js → Settings-CmU_7z2e.js} +1 -1
- package/dist/assets/{SkillReferenceGraph-CZjMRk3z.js → SkillReferenceGraph-BuSuA3B7.js} +1 -1
- package/dist/assets/{Skills-EueUDa9X.js → Skills-BM8w5BGV.js} +1 -1
- package/dist/assets/{SystemPrompt-BQQudmyk.js → SystemPrompt-BWOdtfze.js} +1 -1
- package/dist/assets/{TagLibrary-BEAqaJlp.js → TagLibrary-cn3JECC5.js} +1 -1
- package/dist/assets/{TiptapBody-DKmVDGB5.js → TiptapBody-BwoXKY8J.js} +1 -1
- package/dist/assets/{Toggle-B7Qb5e2O.js → Toggle-BlNVxkq-.js} +1 -1
- package/dist/assets/{index-l-hKv9ou.js → index-BpzvONtX.js} +519 -519
- package/dist/assets/{index-CNmekpRK.css → index-DDpA9yBe.css} +1 -1
- package/dist/assets/{settingsSchema-DEW4x9LG.js → settingsSchema-DePBZnaw.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/src/main/__tests__/stop-signal-anchor.test.cjs +75 -0
- package/src/main/index.cjs +6 -6
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stop-signal-anchor.test.cjs — drift guard between chatRunner's
|
|
3
|
+
* STOP_SENTINEL/splitStopSignal and the renderer's duplicated copy.
|
|
4
|
+
*
|
|
5
|
+
* `src/renderer/lib/stopSignal.ts` cannot import this main-process `.cjs`
|
|
6
|
+
* (CommonJS main / ESM renderer split), so it carries its own literal
|
|
7
|
+
* `STOP_SENTINEL` + a re-implementation of `splitStopSignal`. This test
|
|
8
|
+
* requires the REAL exported constant and asserts the renderer's copy is
|
|
9
|
+
* byte-identical, and that both splitters agree on `body` for the same
|
|
10
|
+
* composed sample — so a rework of either constant/function fails here
|
|
11
|
+
* loudly instead of the two forms of a stop-signal reply silently drifting
|
|
12
|
+
* back out of sync (which is exactly what caused the doubled-message bug
|
|
13
|
+
* this module exists to fix).
|
|
14
|
+
*
|
|
15
|
+
* Run: timeout 120 npx vitest run src/main/__tests__/stop-signal-anchor.test.cjs
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
'use strict';
|
|
19
|
+
|
|
20
|
+
const path = require('path');
|
|
21
|
+
|
|
22
|
+
import { test, expect } from 'vitest';
|
|
23
|
+
|
|
24
|
+
const { STOP_SENTINEL, splitStopSignal } = require('../chatRunner.cjs');
|
|
25
|
+
|
|
26
|
+
async function loadRendererCopy() {
|
|
27
|
+
const mod = await import(
|
|
28
|
+
/* @vite-ignore */ path.resolve(__dirname, '..', '..', 'renderer', 'lib', 'stopSignal.ts')
|
|
29
|
+
);
|
|
30
|
+
return mod;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
test('the renderer STOP_SENTINEL literal is byte-identical to chatRunner.cjs', async () => {
|
|
34
|
+
const rendererCopy = await loadRendererCopy();
|
|
35
|
+
expect(rendererCopy.STOP_SENTINEL).toBe(STOP_SENTINEL);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('both splitters agree on body for a composed stop-signal reply', async () => {
|
|
39
|
+
const rendererCopy = await loadRendererCopy();
|
|
40
|
+
const body = 'Here is what I found and what I still need from you.';
|
|
41
|
+
const full = `${body}\n\n${STOP_SENTINEL}\n${JSON.stringify({ questions: ['Deploy to prod now?'] })}`;
|
|
42
|
+
|
|
43
|
+
const mainSplit = splitStopSignal(full);
|
|
44
|
+
const rendererSplit = rendererCopy.splitStopSignal(full);
|
|
45
|
+
|
|
46
|
+
expect(mainSplit).not.toBeNull();
|
|
47
|
+
expect(rendererSplit).not.toBeNull();
|
|
48
|
+
expect(rendererSplit.body).toBe(mainSplit.answerBody);
|
|
49
|
+
expect(rendererSplit.body).toBe(body);
|
|
50
|
+
expect(rendererSplit.questions ?? mainSplit.questions).toBeDefined();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test('both splitters return null for text with no sentinel', async () => {
|
|
54
|
+
const rendererCopy = await loadRendererCopy();
|
|
55
|
+
const plain = 'Just a normal reply, no protocol block.';
|
|
56
|
+
expect(splitStopSignal(plain)).toBeNull();
|
|
57
|
+
expect(rendererCopy.splitStopSignal(plain)).toBeNull();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test('both splitters refuse a quoted sentinel with no valid JSON tail', async () => {
|
|
61
|
+
const rendererCopy = await loadRendererCopy();
|
|
62
|
+
const quoting = `Why does chat use ${STOP_SENTINEL} internally? Not real JSON after it.`;
|
|
63
|
+
expect(splitStopSignal(quoting)).toBeNull();
|
|
64
|
+
expect(rendererCopy.splitStopSignal(quoting)).toBeNull();
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test('both splitters anchor on the LAST sentinel occurrence', async () => {
|
|
68
|
+
const rendererCopy = await loadRendererCopy();
|
|
69
|
+
const body = 'first mention of the sentinel text, then the real one';
|
|
70
|
+
const full = `${STOP_SENTINEL} mentioned earlier in prose.\n\n${body}\n\n${STOP_SENTINEL}\n${JSON.stringify({ questions: ['q'] })}`;
|
|
71
|
+
|
|
72
|
+
const mainSplit = splitStopSignal(full);
|
|
73
|
+
const rendererSplit = rendererCopy.splitStopSignal(full);
|
|
74
|
+
expect(mainSplit.answerBody).toBe(rendererSplit.body);
|
|
75
|
+
});
|
package/src/main/index.cjs
CHANGED
|
@@ -1057,7 +1057,7 @@ app.whenReady().then(async () => {
|
|
|
1057
1057
|
label: 'Session Manager',
|
|
1058
1058
|
submenu: [
|
|
1059
1059
|
{
|
|
1060
|
-
label: '
|
|
1060
|
+
label: 'Open / Start Project…',
|
|
1061
1061
|
accelerator: 'CmdOrCtrl+N',
|
|
1062
1062
|
click: () => {
|
|
1063
1063
|
if (mainWindow && !mainWindow.isDestroyed()) {
|
|
@@ -1066,12 +1066,12 @@ app.whenReady().then(async () => {
|
|
|
1066
1066
|
},
|
|
1067
1067
|
},
|
|
1068
1068
|
{
|
|
1069
|
-
label: 'Restart App',
|
|
1069
|
+
label: 'Restart Session Manager App',
|
|
1070
1070
|
accelerator: 'CmdOrCtrl+Shift+R',
|
|
1071
1071
|
click: rebootApp,
|
|
1072
1072
|
},
|
|
1073
1073
|
{
|
|
1074
|
-
label: '
|
|
1074
|
+
label: 'Restart Terminal in Active Tab',
|
|
1075
1075
|
accelerator: 'CmdOrCtrl+Shift+S',
|
|
1076
1076
|
click: () => {
|
|
1077
1077
|
if (mainWindow && !mainWindow.isDestroyed()) {
|
|
@@ -1080,14 +1080,14 @@ app.whenReady().then(async () => {
|
|
|
1080
1080
|
},
|
|
1081
1081
|
},
|
|
1082
1082
|
{ type: 'separator' },
|
|
1083
|
-
{ label: 'Quit', accelerator: 'CmdOrCtrl+Q', role: 'quit' },
|
|
1083
|
+
{ label: 'Quit Session Manager', accelerator: 'CmdOrCtrl+Q', role: 'quit' },
|
|
1084
1084
|
],
|
|
1085
1085
|
},
|
|
1086
1086
|
{
|
|
1087
1087
|
label: 'Dev',
|
|
1088
1088
|
submenu: [
|
|
1089
|
-
{ label: 'Toggle
|
|
1090
|
-
{ label: 'Reload', accelerator: 'CmdOrCtrl+R', role: 'reload' },
|
|
1089
|
+
{ label: 'Toggle Developer Tools', accelerator: 'F12', role: 'toggleDevTools' },
|
|
1090
|
+
{ label: 'Reload App Window', accelerator: 'CmdOrCtrl+R', role: 'reload' },
|
|
1091
1091
|
// Diagnostic-only; absent unless SM_HEAP_SNAPSHOT=1 (see heapSnapshot.cjs).
|
|
1092
1092
|
...(heapSnapshotMenuItem ? [heapSnapshotMenuItem] : []),
|
|
1093
1093
|
],
|