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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tycono",
3
- "version": "0.1.95-beta.0",
3
+ "version": "0.1.95-beta.2",
4
4
  "description": "Build an AI company. Watch them work.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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-sonnet-4-5',
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-sonnet-4-5';
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."** You MUST run and test the output, not just read files.
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. **RUN it and test it** — this is the most important step:
305
- - For web apps/games: \`cd <code-dir> && python3 -m http.server 9999\` then open in browser
306
- - Actually try the core interactions (click buttons, press keys, navigate)
307
- - If basic interactions fail (can't move, can't click, blank screen) it's NOT done
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
- ## Instructions
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';