tycono 0.1.95-beta.0 → 0.1.95-beta.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/src/api/src/engine/runners/claude-cli.ts +2 -2
- package/src/api/src/routes/execute.ts +6 -2
- package/src/api/src/services/supervisor-heartbeat.ts +25 -7
- package/src/web/dist/assets/{index-C9U34tT1.js → index-A3-TBmWZ.js} +52 -52
- package/src/web/dist/assets/{index-B8yxzPmd.css → index-D1RTvnx7.css} +1 -1
- package/src/web/dist/assets/{index-DuB5baFp.js → index-uwS0YSTU.js} +1 -1
- package/src/web/dist/assets/{preview-app-QWV7zpb0.js → preview-app-CAohaHWp.js} +1 -1
- package/src/web/dist/index.html +2 -2
package/package.json
CHANGED
|
@@ -477,7 +477,7 @@ export class ClaudeCliRunner implements ExecutionRunner {
|
|
|
477
477
|
'--output-format', 'stream-json',
|
|
478
478
|
'--verbose',
|
|
479
479
|
'--dangerously-skip-permissions',
|
|
480
|
-
'--model', config.model ?? 'claude-
|
|
480
|
+
'--model', config.model ?? 'claude-opus-4-6',
|
|
481
481
|
'--max-turns', String(maxTurns),
|
|
482
482
|
'--mcp-config', mcpConfig,
|
|
483
483
|
'--strict-mcp-config',
|
|
@@ -516,7 +516,7 @@ export class ClaudeCliRunner implements ExecutionRunner {
|
|
|
516
516
|
cleanEnv.SUPERVISION_CMD = supervisionScript;
|
|
517
517
|
}
|
|
518
518
|
|
|
519
|
-
const modelName = config.model ?? 'claude-
|
|
519
|
+
const modelName = config.model ?? 'claude-opus-4-6';
|
|
520
520
|
// Use codeRoot as cwd — auto-creates ../{name}-code/ if not configured
|
|
521
521
|
const codeRoot = resolveCodeRoot(companyRoot);
|
|
522
522
|
const cwd = codeRoot;
|
|
@@ -218,6 +218,7 @@ function handleStartJob(body: Record<string, unknown>, res: ServerResponse): voi
|
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
const targetRoles = body.targetRoles as string[] | undefined;
|
|
221
|
+
const continuous = body.continuous === true;
|
|
221
222
|
|
|
222
223
|
// Always use supervisor mode — CEO supervises C-Levels who supervise members
|
|
223
224
|
{
|
|
@@ -225,6 +226,7 @@ function handleStartJob(body: Record<string, unknown>, res: ServerResponse): voi
|
|
|
225
226
|
`wave-${Date.now()}`,
|
|
226
227
|
directive,
|
|
227
228
|
targetRoles && targetRoles.length > 0 ? targetRoles : undefined,
|
|
229
|
+
continuous,
|
|
228
230
|
);
|
|
229
231
|
|
|
230
232
|
if (state.status === 'error') {
|
|
@@ -677,20 +679,22 @@ function handleWave(body: Record<string, unknown>, req: IncomingMessage, res: Se
|
|
|
677
679
|
}
|
|
678
680
|
|
|
679
681
|
const targetRoles = body.targetRoles as string[] | undefined;
|
|
682
|
+
const continuous = body.continuous === true;
|
|
680
683
|
|
|
681
684
|
// Always supervisor mode — CEO supervises C-Levels
|
|
682
|
-
handleWaveSupervisor(directive, targetRoles, req, res);
|
|
685
|
+
handleWaveSupervisor(directive, targetRoles, continuous, req, res);
|
|
683
686
|
}
|
|
684
687
|
|
|
685
688
|
/**
|
|
686
689
|
* Supervisor mode: Start a single CEO Supervisor session that dispatches C-Levels.
|
|
687
690
|
* The supervisor uses dispatch/watch/amend tools — same pattern as any supervisor node.
|
|
688
691
|
*/
|
|
689
|
-
function handleWaveSupervisor(directive: string, targetRoles: string[] | undefined, req: IncomingMessage, res: ServerResponse): void {
|
|
692
|
+
function handleWaveSupervisor(directive: string, targetRoles: string[] | undefined, continuous: boolean, req: IncomingMessage, res: ServerResponse): void {
|
|
690
693
|
const state = supervisorHeartbeat.start(
|
|
691
694
|
`wave-${Date.now()}`,
|
|
692
695
|
directive,
|
|
693
696
|
targetRoles && targetRoles.length > 0 ? targetRoles : undefined,
|
|
697
|
+
continuous,
|
|
694
698
|
);
|
|
695
699
|
|
|
696
700
|
if (state.status === 'error') {
|
|
@@ -24,6 +24,7 @@ interface SupervisorState {
|
|
|
24
24
|
waveId: string;
|
|
25
25
|
directive: string;
|
|
26
26
|
targetRoles?: string[];
|
|
27
|
+
continuous: boolean;
|
|
27
28
|
supervisorSessionId: string | null;
|
|
28
29
|
executionId: string | null;
|
|
29
30
|
status: 'starting' | 'running' | 'restarting' | 'stopped' | 'error';
|
|
@@ -62,7 +63,7 @@ class SupervisorHeartbeat {
|
|
|
62
63
|
* This creates a supervisor session and starts an execution.
|
|
63
64
|
* If the execution dies, it auto-restarts (heartbeat).
|
|
64
65
|
*/
|
|
65
|
-
start(waveId: string, directive: string, targetRoles?: string[]): SupervisorState {
|
|
66
|
+
start(waveId: string, directive: string, targetRoles?: string[], continuous = false): SupervisorState {
|
|
66
67
|
// Check if supervisor already running for this wave
|
|
67
68
|
const existing = this.supervisors.get(waveId);
|
|
68
69
|
if (existing && (existing.status === 'running' || existing.status === 'starting')) {
|
|
@@ -74,6 +75,7 @@ class SupervisorHeartbeat {
|
|
|
74
75
|
waveId,
|
|
75
76
|
directive,
|
|
76
77
|
targetRoles,
|
|
78
|
+
continuous,
|
|
77
79
|
supervisorSessionId: null,
|
|
78
80
|
executionId: null,
|
|
79
81
|
status: 'starting',
|
|
@@ -296,15 +298,18 @@ ${recoveryContext}
|
|
|
296
298
|
|
|
297
299
|
## Quality Gate (CRITICAL — G-09)
|
|
298
300
|
⛔ **"Subordinate said done" ≠ "Work is actually done."**
|
|
299
|
-
⛔ **"Code exists" ≠ "Code works."**
|
|
301
|
+
⛔ **"Code exists" ≠ "Code works."**
|
|
302
|
+
|
|
303
|
+
⛔ **You are a SUPERVISOR. You do NOT run code, servers, npm install, or builds yourself.**
|
|
304
|
+
⛔ **Dispatch QA (Tester) to run and test. Read QA's report to judge quality.**
|
|
300
305
|
|
|
301
306
|
Before declaring yourself done, you MUST:
|
|
302
307
|
|
|
303
308
|
1. **Read the actual output files** — don't trust status reports. Check the code yourself.
|
|
304
|
-
2. **
|
|
305
|
-
-
|
|
306
|
-
-
|
|
307
|
-
-
|
|
309
|
+
2. **Dispatch QA to test it** — QA runs the server, opens browser, clicks buttons, reports bugs.
|
|
310
|
+
- Do NOT run \`npm install\`, \`npm run build\`, \`python3 -m http.server\` yourself.
|
|
311
|
+
- Do NOT run \`agent-browser\` yourself. That is QA's job.
|
|
312
|
+
- Your job: read QA's report, decide if it passes, re-dispatch if not.
|
|
308
313
|
3. **Count against requirements** — if the directive says "15 monsters, 7 maps", count them.
|
|
309
314
|
4. **Check the directive's specific tech requirements** — if it mentions a specific library/engine, verify it's actually used in the code (grep for it).
|
|
310
315
|
5. **If quality is insufficient → re-dispatch** with specific, actionable feedback:
|
|
@@ -319,7 +324,15 @@ Re-dispatch pattern:
|
|
|
319
324
|
- Each iteration should close specific gaps, not redo everything
|
|
320
325
|
- Maximum 5 iterations per C-Level before escalating
|
|
321
326
|
|
|
322
|
-
|
|
327
|
+
${state.continuous ? `## Continuous Improvement Mode (ON)
|
|
328
|
+
⛔ 첫 번째 완성 후 멈추지 마라.
|
|
329
|
+
1. 모든 subordinate done + QA pass 후, 즉시 CBO에게 "사용자 관점에서 부족한 점, 개선할 점"을 물어라.
|
|
330
|
+
2. CTO에게 "기술적으로 개선할 점, 코드 품질, 성능"을 물어라.
|
|
331
|
+
3. CBO/CTO 의견을 종합하여 의미있는 개선이 있으면 re-dispatch.
|
|
332
|
+
4. 이 사이클을 반복하라. 각 iteration마다 게임/산출물이 점점 나아져야 한다.
|
|
333
|
+
5. 사용자가 Stop을 누를 때까지 계속한다. 스스로 done 선언하지 마라.
|
|
334
|
+
|
|
335
|
+
` : ''}## Instructions
|
|
323
336
|
1. Analyze the directive and decide which C-Level roles to dispatch (not necessarily all)
|
|
324
337
|
2. Dispatch them with clear tasks
|
|
325
338
|
3. Enter supervision watch loop
|
|
@@ -409,6 +422,11 @@ Re-dispatch pattern:
|
|
|
409
422
|
console.log(`[Supervisor] Done but ${runningChildren.length} children still running. Restarting.`);
|
|
410
423
|
state.crashCount = 0; // Not a crash, intentional restart
|
|
411
424
|
this.scheduleRestart(state, 5_000); // 5s delay
|
|
425
|
+
} else if (state.continuous) {
|
|
426
|
+
// Continuous Improvement Mode: don't stop — restart supervisor to ask C-Levels for improvements
|
|
427
|
+
console.log(`[Supervisor] Wave ${state.waveId} iteration complete. Continuous mode ON — restarting for next improvement cycle.`);
|
|
428
|
+
state.crashCount = 0;
|
|
429
|
+
this.scheduleRestart(state, 5_000);
|
|
412
430
|
} else {
|
|
413
431
|
console.log(`[Supervisor] Wave ${state.waveId} complete. All subordinates done.`);
|
|
414
432
|
state.status = 'stopped';
|