tycono 0.1.94-beta.7 → 0.1.94-beta.8
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
CHANGED
|
@@ -263,6 +263,11 @@ export function deleteSession(id: string, force = false): boolean {
|
|
|
263
263
|
console.warn(`[SessionStore] BLOCKED deletion of wave session ${id} (waveId=${session.waveId}, roleId=${session.roleId}). Use force=true to override.`);
|
|
264
264
|
return false;
|
|
265
265
|
}
|
|
266
|
+
// BUG-008 hard guard: CEO supervisor session is NEVER deletable during wave
|
|
267
|
+
if (session.roleId === 'ceo' && session.waveId && session.source === 'wave') {
|
|
268
|
+
console.error(`[SessionStore] HARD BLOCK: CEO supervisor session ${id} cannot be deleted (waveId=${session.waveId}). This is a 1:1:1 invariant.`);
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
266
271
|
|
|
267
272
|
console.log(`[SessionStore] Deleting session ${id} (roleId=${session.roleId}, waveId=${session.waveId ?? 'none'}, messages=${session.messages.length})`);
|
|
268
273
|
cache.delete(id);
|
|
@@ -328,27 +328,33 @@ Re-dispatch pattern:
|
|
|
328
328
|
6. If gaps exist → re-dispatch with specific feedback. Repeat 3-5.
|
|
329
329
|
7. Only when ALL requirements are met → compile results and report`;
|
|
330
330
|
|
|
331
|
-
//
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
|
|
331
|
+
// BUG-008 fix: Wave:Supervisor:Session = 1:1:1 invariant.
|
|
332
|
+
// Reuse existing session on restart instead of creating a new one.
|
|
333
|
+
let sessionId = state.supervisorSessionId;
|
|
334
|
+
if (sessionId && getSession(sessionId)) {
|
|
335
|
+
console.log(`[Supervisor] Reusing existing session ${sessionId} for wave ${state.waveId}`);
|
|
336
|
+
} else {
|
|
337
|
+
const session = createSession('ceo', {
|
|
338
|
+
mode: 'do',
|
|
339
|
+
source: 'wave',
|
|
340
|
+
waveId: state.waveId,
|
|
341
|
+
});
|
|
342
|
+
sessionId = session.id;
|
|
343
|
+
state.supervisorSessionId = sessionId;
|
|
344
|
+
|
|
345
|
+
// Add the directive as CEO message so the session isn't empty (prevents deleteEmpty cleanup)
|
|
346
|
+
const ceoMsg: Message = {
|
|
347
|
+
id: `msg-${Date.now()}-ceo-supervisor`,
|
|
348
|
+
from: 'ceo',
|
|
349
|
+
content: state.directive,
|
|
350
|
+
type: 'directive',
|
|
351
|
+
status: 'done',
|
|
352
|
+
timestamp: new Date().toISOString(),
|
|
353
|
+
};
|
|
354
|
+
addMessage(sessionId, ceoMsg);
|
|
355
|
+
}
|
|
339
356
|
state.status = 'running';
|
|
340
357
|
|
|
341
|
-
// Add the directive as CEO message so the session isn't empty (prevents deleteEmpty cleanup)
|
|
342
|
-
const ceoMsg: Message = {
|
|
343
|
-
id: `msg-${Date.now()}-ceo-supervisor`,
|
|
344
|
-
from: 'ceo',
|
|
345
|
-
content: state.directive,
|
|
346
|
-
type: 'directive',
|
|
347
|
-
status: 'done',
|
|
348
|
-
timestamp: new Date().toISOString(),
|
|
349
|
-
};
|
|
350
|
-
addMessage(session.id, ceoMsg);
|
|
351
|
-
|
|
352
358
|
try {
|
|
353
359
|
const exec = executionManager.startExecution({
|
|
354
360
|
type: 'wave',
|
|
@@ -356,14 +362,14 @@ Re-dispatch pattern:
|
|
|
356
362
|
task: supervisorTask,
|
|
357
363
|
sourceRole: 'ceo',
|
|
358
364
|
targetRoles: state.targetRoles,
|
|
359
|
-
sessionId
|
|
365
|
+
sessionId,
|
|
360
366
|
});
|
|
361
367
|
|
|
362
368
|
state.executionId = exec.id;
|
|
363
369
|
|
|
364
370
|
this.watchExecution(state, exec);
|
|
365
371
|
|
|
366
|
-
console.log(`[Supervisor] Started for wave ${state.waveId} | session=${
|
|
372
|
+
console.log(`[Supervisor] Started for wave ${state.waveId} | session=${sessionId} | exec=${exec.id}`);
|
|
367
373
|
} catch (err) {
|
|
368
374
|
console.error(`[Supervisor] Failed to start for wave ${state.waveId}:`, err);
|
|
369
375
|
state.status = 'error';
|