tycono 0.1.96 → 0.1.98
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/README.md +127 -166
- package/package.json +1 -1
- package/src/api/src/services/supervisor-heartbeat.ts +11 -10
- package/src/tui/components/PanelMode.tsx +11 -13
package/README.md
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<img src=".github/assets/wave-org-propagation.png" alt="Tycono — CEO dispatches through org hierarchy in real time" width="720" />
|
|
3
|
-
</p>
|
|
4
|
-
|
|
5
|
-
<h1 align="center">tycono</h1>
|
|
6
|
-
|
|
7
1
|
<p align="center">
|
|
8
2
|
<strong>Cursor gives you one AI developer. Tycono gives you an AI team.</strong><br>
|
|
9
3
|
<sub>Give one order. Watch your AI team plan, build, and learn together.</sub>
|
|
10
4
|
</p>
|
|
11
5
|
|
|
6
|
+
<h1 align="center">tycono</h1>
|
|
7
|
+
|
|
12
8
|
<p align="center">
|
|
13
9
|
<a href="https://www.npmjs.com/package/tycono"><img src="https://img.shields.io/npm/v/tycono.svg" alt="npm version" /></a>
|
|
14
10
|
<a href="https://github.com/seongsu-kang/tycono/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/tycono.svg" alt="license" /></a>
|
|
@@ -29,51 +25,75 @@ Cursor, Lovable, Bolt — they all give you **one AI agent**. It helps, but you
|
|
|
29
25
|
|
|
30
26
|
**tycono** gives you an **AI team**. A CTO reviews architecture. Engineers write code. A PM breaks down tasks. QA catches bugs. You just give the order and watch them work.
|
|
31
27
|
|
|
32
|
-
One command. Your AI team is running.
|
|
33
|
-
|
|
34
28
|
```bash
|
|
35
29
|
npx tycono
|
|
36
30
|
```
|
|
37
31
|
|
|
32
|
+
```
|
|
33
|
+
> Make a landing page for our product
|
|
34
|
+
|
|
35
|
+
▶ Supervisor started
|
|
36
|
+
💭 Analyzing the directive. I'll dispatch CTO for implementation and CBO for copy...
|
|
37
|
+
→ cto 배정: Landing page structure + implementation
|
|
38
|
+
→ cbo 배정: Product messaging + copywriting
|
|
39
|
+
→ Read architecture/deployment.md
|
|
40
|
+
→ dispatch fe-engineer: Build responsive landing page
|
|
41
|
+
cto ▶ Reviewing architecture for landing page...
|
|
42
|
+
fe-engineer → Write src/landing/index.html
|
|
43
|
+
📄 Write src/landing/styles.css
|
|
44
|
+
cbo ✓ done (5 turns)
|
|
45
|
+
fe-engineer ✓ done (12 turns)
|
|
46
|
+
✓ Supervisor done (8 turns)
|
|
47
|
+
>
|
|
48
|
+
```
|
|
49
|
+
|
|
38
50
|
## Core Pillars
|
|
39
51
|
|
|
40
52
|
### 1. CEO Supervisor — Org-chart orchestration
|
|
41
53
|
|
|
42
54
|
You give one order. The system dispatches through a real hierarchy.
|
|
43
55
|
|
|
44
|
-
|
|
45
|
-
dispatch → watch → relay → quality gate → re-dispatch (if needed)
|
|
46
|
-
```
|
|
56
|
+
CEO delegates to C-levels, C-levels dispatch to their teams. Authority is enforced — engineers can't make CEO decisions, PMs can't merge code.
|
|
47
57
|
|
|
48
|
-
|
|
58
|
+
**Dual Mode**: Simple questions get answered directly (no team dispatch). Work tasks activate the full team. The system judges automatically.
|
|
49
59
|
|
|
50
|
-
|
|
51
|
-
<img src=".github/assets/wave-org-propagation.png" alt="Wave Center — org propagation with real-time status" width="640" />
|
|
52
|
-
</p>
|
|
60
|
+
### 2. Multi-Wave — Parallel workspaces
|
|
53
61
|
|
|
54
|
-
|
|
62
|
+
Multiple persistent conversations, each with its own team context.
|
|
55
63
|
|
|
56
|
-
|
|
64
|
+
```
|
|
65
|
+
/new Build the API → Wave 1 (CTO + Engineers working)
|
|
66
|
+
/new Write documentation → Wave 2 (CBO + Writer working)
|
|
67
|
+
/focus 1 → Switch to Wave 1
|
|
68
|
+
```
|
|
57
69
|
|
|
58
|
-
|
|
59
|
-
- **Activity Stream** — Every event logged (dispatches, tool calls, decisions)
|
|
60
|
-
- **CEO Directive** — Change direction while agents are running
|
|
61
|
-
- **Cost Tracking** — Per-role, per-model token breakdown
|
|
70
|
+
Tab → Panel Mode: wave-scoped org tree, real-time stream, docs browser.
|
|
62
71
|
|
|
63
|
-
### 3.
|
|
72
|
+
### 3. Observability — See everything
|
|
64
73
|
|
|
65
|
-
|
|
74
|
+
```
|
|
75
|
+
Tab → Panel Mode
|
|
76
|
+
|
|
77
|
+
┌── W1 Build the API ──────┬── Stream Docs Info ──────────────┐
|
|
78
|
+
│ 3 sessions │ cto → dispatch engineer │
|
|
79
|
+
│ ── Org Tree ── │ engineer → Write src/api/routes.ts│
|
|
80
|
+
│ ● CEO │ engineer 📄 Write src/api/types.ts │
|
|
81
|
+
│ ├─ ● CTO │ qa ▶ Running test suite... │
|
|
82
|
+
│ │ ├─ ● engineer │ │
|
|
83
|
+
│ │ └─ ● qa │ │
|
|
84
|
+
│ └─ ○ CBO │ │
|
|
85
|
+
│ [1] [2*] │ │
|
|
86
|
+
└───────────────────────────┴─────────────────────────────────────┘
|
|
87
|
+
```
|
|
66
88
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
| **Browser** | Separate daemon per session | ✅ Live |
|
|
72
|
-
| **Knowledge** | Shared reads, scoped writes | ✅ Live |
|
|
89
|
+
- **Wave-scoped** — org tree shows only this wave's active agents
|
|
90
|
+
- **Docs tab** — browse all .md files, ★ marks wave artifacts, Enter → vim
|
|
91
|
+
- **Info tab** — wave metadata, sessions, ports
|
|
92
|
+
- **Commands** — `/agents` `/sessions` `/kill` `/docs` `/read`
|
|
73
93
|
|
|
74
|
-
### 4. AKB
|
|
94
|
+
### 4. AKB — Knowledge that compounds
|
|
75
95
|
|
|
76
|
-
Every AI tool
|
|
96
|
+
Every AI tool: `Plan → Execute → Done`. Knowledge resets. Tycono adds:
|
|
77
97
|
|
|
78
98
|
```
|
|
79
99
|
Pre-K: Read existing knowledge → Plan grounded in what the company knows
|
|
@@ -81,35 +101,7 @@ Execute: Do the work
|
|
|
81
101
|
Post-K: Extract insights → Cross-link → Register in knowledge graph
|
|
82
102
|
```
|
|
83
103
|
|
|
84
|
-
Session 50 is dramatically smarter than session 1.
|
|
85
|
-
|
|
86
|
-
## Why Tycono?
|
|
87
|
-
|
|
88
|
-
Same goal as Cursor, Lovable, Bolt — **get AI to do your work**. Different method.
|
|
89
|
-
|
|
90
|
-
| | Cursor / Lovable / Bolt | Tycono |
|
|
91
|
-
|---|---|---|
|
|
92
|
-
| **Agents** | 1 AI helps you | **AI team works for you** |
|
|
93
|
-
| **Your role** | Keep directing | **Give one order, watch** |
|
|
94
|
-
| **Knowledge** | Resets every session | **Compounds forever** |
|
|
95
|
-
| **Quality** | You review everything | **QA agent catches bugs** |
|
|
96
|
-
| **Scale** | 1 task at a time | **Parallel across roles** |
|
|
97
|
-
| **Visibility** | Editor / chat | **Real-time org tree** |
|
|
98
|
-
|
|
99
|
-
## Company-as-Code
|
|
100
|
-
|
|
101
|
-
Just as Terraform turns `.tf` files into running infrastructure, Tycono turns YAML and Markdown into a running company.
|
|
102
|
-
|
|
103
|
-
```
|
|
104
|
-
IaC CaC (Company-as-Code)
|
|
105
|
-
───────────────────── ─────────────────────
|
|
106
|
-
.tf → servers role.yaml → org structure
|
|
107
|
-
playbook → config CLAUDE.md → operating rules
|
|
108
|
-
Dockerfile → containers skills/ → capabilities
|
|
109
|
-
state file → infra state knowledge/ → org memory
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
Your company is **versionable**, **reproducible**, and **forkable** — just like code.
|
|
104
|
+
Session 50 is dramatically smarter than session 1.
|
|
113
105
|
|
|
114
106
|
## Quick Start
|
|
115
107
|
|
|
@@ -120,99 +112,64 @@ npx tycono
|
|
|
120
112
|
|
|
121
113
|
A setup wizard guides you through:
|
|
122
114
|
|
|
123
|
-
1. **
|
|
124
|
-
2. **
|
|
125
|
-
3. **
|
|
126
|
-
4. **Watch them work** — your browser opens to a live dashboard
|
|
115
|
+
1. **Name your company** — set mission and domain
|
|
116
|
+
2. **Choose a team template** — Startup, Research, Agency, or Custom
|
|
117
|
+
3. **Start working** — type naturally, your AI team responds
|
|
127
118
|
|
|
128
119
|
### Requirements
|
|
129
120
|
|
|
130
121
|
- Node.js >= 18
|
|
131
|
-
- [
|
|
132
|
-
|
|
133
|
-
## Interfaces
|
|
134
|
-
|
|
135
|
-
### Web Dashboard — Visual management
|
|
136
|
-
|
|
137
|
-
A browser-based dashboard for visual management. Org tree, Wave dispatch, Knowledge graph, Activity stream.
|
|
138
|
-
|
|
139
|
-
<p align="center">
|
|
140
|
-
<img src=".github/assets/hero-office.png" alt="Web Dashboard" width="640" />
|
|
141
|
-
</p>
|
|
142
|
-
|
|
143
|
-
- **Wave Center** — selective org-tree dispatch with target checkboxes
|
|
144
|
-
- **Chats** — 1:1 conversations with any role, persistent sessions
|
|
145
|
-
- **Knowledge Base** — graph/tree/list views, cross-linked documents
|
|
146
|
-
- **Decisions** — CEO strategic decision log with full context
|
|
147
|
-
|
|
148
|
-
### TUI — Terminal-native operations *(coming soon)*
|
|
122
|
+
- [Claude Code CLI](https://claude.ai/download) (recommended) or Anthropic API key
|
|
149
123
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
```
|
|
153
|
-
┌──────────────────────────────────────────────────┐
|
|
154
|
-
│ TYCONO v0.2 │ Wave #37 running │ 3 active │$2.1│
|
|
155
|
-
├──────────────┬───────────────────────────────────┤
|
|
156
|
-
│ [Org Tree] │ [Real-time Stream] │
|
|
157
|
-
│ CEO │ CTO: "Reviewing architecture..." │
|
|
158
|
-
│ ├ CTO ● │ → dispatch → Engineer │
|
|
159
|
-
│ │ ├ ENG ○ │ CBO: "Market analysis done" ✓ │
|
|
160
|
-
│ │ └ QA ○ │ │
|
|
161
|
-
│ └ CBO ● │ │
|
|
162
|
-
├──────────────┴───────────────────────────────────┤
|
|
163
|
-
│ > wave "Write the Q1 strategy report" │
|
|
164
|
-
└──────────────────────────────────────────────────┘
|
|
165
|
-
```
|
|
124
|
+
## CLI
|
|
166
125
|
|
|
167
126
|
```bash
|
|
168
|
-
npx tycono
|
|
169
|
-
npx tycono
|
|
127
|
+
npx tycono # Start TUI (default)
|
|
128
|
+
npx tycono ./my-company # Start with specific directory
|
|
129
|
+
npx tycono --classic # Pixel office web UI
|
|
130
|
+
npx tycono --attach # Connect to running API server
|
|
131
|
+
npx tycono --help # Show help
|
|
170
132
|
```
|
|
171
133
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
## Key Features
|
|
175
|
-
|
|
176
|
-
### CEO Wave — One order moves the company
|
|
177
|
-
|
|
178
|
-
Write a directive. Select target roles on the org tree. Hit dispatch. Every selected agent receives their piece of the work, filtered through the hierarchy.
|
|
179
|
-
|
|
180
|
-
<p align="center">
|
|
181
|
-
<img src=".github/assets/wave-center.png" alt="Wave Center — selective org-tree dispatch" width="640" />
|
|
182
|
-
</p>
|
|
183
|
-
|
|
184
|
-
### Living Knowledge (AKB)
|
|
185
|
-
|
|
186
|
-
Every task produces knowledge. Cross-linked Markdown documents that grow with every session. Search, navigate, never lose context. Session 50 is dramatically smarter than session 1.
|
|
187
|
-
|
|
188
|
-
<p align="center">
|
|
189
|
-
<img src=".github/assets/knowledge-graph.png" alt="Knowledge Base — graph view with 194+ cross-linked documents" width="640" />
|
|
190
|
-
</p>
|
|
134
|
+
## TUI Commands
|
|
191
135
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
136
|
+
```
|
|
137
|
+
Type naturally to talk to your AI team.
|
|
138
|
+
|
|
139
|
+
/new [text] Create new wave
|
|
140
|
+
/waves List all waves
|
|
141
|
+
/focus <n> Switch to wave n
|
|
142
|
+
/agents Wave → Role → Session tree
|
|
143
|
+
/sessions Sessions + ports
|
|
144
|
+
/kill <id> Kill a session
|
|
145
|
+
/cleanup Remove dead sessions
|
|
146
|
+
/docs Files created in this wave
|
|
147
|
+
/read <path> Preview file content
|
|
148
|
+
/open <path> Open in $EDITOR (vim)
|
|
149
|
+
/help Show help
|
|
150
|
+
/quit Exit
|
|
151
|
+
|
|
152
|
+
Tab Panel Mode (org tree + stream + docs)
|
|
153
|
+
1-9 Switch wave (in Panel Mode)
|
|
154
|
+
h/l Switch tab (Stream/Docs/Info)
|
|
155
|
+
j/k Navigate
|
|
156
|
+
Ctrl+C Quit
|
|
157
|
+
```
|
|
197
158
|
|
|
198
|
-
|
|
159
|
+
## Company-as-Code
|
|
199
160
|
|
|
200
|
-
|
|
161
|
+
Just as Terraform turns `.tf` files into running infrastructure, Tycono turns YAML and Markdown into a running company.
|
|
201
162
|
|
|
202
163
|
```
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
164
|
+
IaC CaC (Company-as-Code)
|
|
165
|
+
───────────────────── ─────────────────────
|
|
166
|
+
.tf → servers role.yaml → org structure
|
|
167
|
+
playbook → config CLAUDE.md → operating rules
|
|
168
|
+
Dockerfile → containers skills/ → capabilities
|
|
169
|
+
state file → infra state knowledge/ → org memory
|
|
209
170
|
```
|
|
210
171
|
|
|
211
|
-
|
|
212
|
-
- `role.yaml` — Identity, authority, knowledge scope, reporting structure
|
|
213
|
-
- `SKILL.md` — Tools, commands, and capability guides
|
|
214
|
-
- `profile.md` — Public-facing description and persona
|
|
215
|
-
- `journal/` — Work history and learnings
|
|
172
|
+
Your company is **versionable**, **reproducible**, and **forkable** — just like code.
|
|
216
173
|
|
|
217
174
|
## Your Company Structure
|
|
218
175
|
|
|
@@ -232,19 +189,37 @@ your-company/
|
|
|
232
189
|
|
|
233
190
|
| Template | Roles | Best For |
|
|
234
191
|
|----------|-------|----------|
|
|
235
|
-
| **Startup** | CTO + PM + Engineer + Designer | Product development |
|
|
192
|
+
| **Startup** | CTO + PM + Engineer + Designer + QA | Product development |
|
|
236
193
|
| **Research** | Lead Researcher + Analyst + Writer | Analysis & reports |
|
|
237
194
|
| **Agency** | Creative Director + Designer + Developer | Client projects |
|
|
238
195
|
| **Custom** | Start empty, hire as you go | Full control |
|
|
239
196
|
|
|
240
|
-
##
|
|
197
|
+
## Why Tycono?
|
|
241
198
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
199
|
+
| | Cursor / Lovable / Bolt | Tycono |
|
|
200
|
+
|---|---|---|
|
|
201
|
+
| **Agents** | 1 AI helps you | **AI team works for you** |
|
|
202
|
+
| **Your role** | Keep directing | **Give one order, watch** |
|
|
203
|
+
| **Knowledge** | Resets every session | **Compounds forever** |
|
|
204
|
+
| **Quality** | You review everything | **QA agent catches bugs** |
|
|
205
|
+
| **Scale** | 1 task at a time | **Parallel across roles** |
|
|
206
|
+
| **Interface** | Editor / chat | **Terminal-native TUI** |
|
|
207
|
+
|
|
208
|
+
## Origin Story
|
|
209
|
+
|
|
210
|
+
Tycono started as an AI office tycoon game — pixel characters walking around, sitting at desks, chatting in Slack-like channels. It was fun to watch.
|
|
211
|
+
|
|
212
|
+
But the agents underneath were actually useful. They wrote real code, real documents, made real decisions. The game UI was cute; the real value was the AI team.
|
|
213
|
+
|
|
214
|
+
So we stripped the pixels and built a terminal tool. Same AI team, no game — just work.
|
|
215
|
+
|
|
216
|
+
The pixel office lives on as `npx tycono --classic` — a reminder of where it started.
|
|
217
|
+
|
|
218
|
+
<p align="center">
|
|
219
|
+
<img src=".github/assets/hero-office.png" alt="Where it started — pixel office" width="480" />
|
|
220
|
+
<br>
|
|
221
|
+
<sub>Where it started: an AI office tycoon game</sub>
|
|
222
|
+
</p>
|
|
248
223
|
|
|
249
224
|
## Environment Variables
|
|
250
225
|
|
|
@@ -253,23 +228,21 @@ npx tycono --version # Show version
|
|
|
253
228
|
| `ANTHROPIC_API_KEY` | Your Anthropic API key | — |
|
|
254
229
|
| `PORT` | Server port | auto-detect |
|
|
255
230
|
| `COMPANY_ROOT` | Company directory | current directory |
|
|
231
|
+
| `EDITOR` | Editor for /open command | vim |
|
|
256
232
|
|
|
257
233
|
## Roadmap
|
|
258
234
|
|
|
259
|
-
- [x]
|
|
235
|
+
- [x] TUI — terminal-native interface (default)
|
|
236
|
+
- [x] Multi-Wave — parallel persistent workspaces
|
|
237
|
+
- [x] Dual Mode — direct answer vs team dispatch
|
|
260
238
|
- [x] CEO Wave dispatch with org-tree targeting
|
|
261
239
|
- [x] AKB — Pre-K / Post-K knowledge loop
|
|
262
240
|
- [x] Port Registry for multi-agent isolation
|
|
263
|
-
- [
|
|
241
|
+
- [x] Session lifecycle persistence
|
|
264
242
|
- [ ] Git worktree isolation per agent session
|
|
265
|
-
- [ ] **Desktop app** (.dmg / .exe) — background execution, notifications
|
|
243
|
+
- [ ] **Desktop app** (.dmg / .exe) — background execution, notifications
|
|
266
244
|
- [ ] Multi-LLM support (OpenAI, local models)
|
|
267
|
-
|
|
268
|
-
## Built with Tycono
|
|
269
|
-
|
|
270
|
-
This isn't a demo. Tycono's own landing page, documentation, and knowledge base were built by AI agents running inside Tycono. The PM wrote the PRD. The CTO reviewed architecture. The Designer created UX specs. The Engineer implemented every section.
|
|
271
|
-
|
|
272
|
-
194 knowledge documents. 12 CEO decisions. 8 active roles. All managed through the same system you're about to use.
|
|
245
|
+
- [ ] Company Preset Marketplace
|
|
273
246
|
|
|
274
247
|
## Development
|
|
275
248
|
|
|
@@ -282,20 +255,8 @@ cd src/web && npm install && cd ../..
|
|
|
282
255
|
|
|
283
256
|
# Dev mode (hot reload)
|
|
284
257
|
npm run dev
|
|
285
|
-
|
|
286
|
-
# Type check
|
|
287
|
-
npm run typecheck
|
|
288
258
|
```
|
|
289
259
|
|
|
290
|
-
## Contributing
|
|
291
|
-
|
|
292
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
293
|
-
|
|
294
|
-
## Get Help
|
|
295
|
-
|
|
296
|
-
- [GitHub Issues](https://github.com/seongsu-kang/tycono/issues) — Bug reports and feature requests
|
|
297
|
-
- [GitHub Discussions](https://github.com/seongsu-kang/tycono/discussions) — Questions and ideas
|
|
298
|
-
|
|
299
260
|
## License
|
|
300
261
|
|
|
301
262
|
[MIT](LICENSE)
|
package/package.json
CHANGED
|
@@ -257,20 +257,22 @@ class SupervisorHeartbeat {
|
|
|
257
257
|
// Short messages with question marks → conversation
|
|
258
258
|
if (t.includes('?') && t.length < 100) return true;
|
|
259
259
|
|
|
260
|
+
// Task patterns FIRST — action verbs override question patterns
|
|
261
|
+
const taskPatterns = [
|
|
262
|
+
/만들어/, /구현해/, /개발해/, /수정해/, /변경해/, /리팩토링/,
|
|
263
|
+
/설계해/, /작성해/, /배포해/, /테스트해/, /고쳐/, /해줘/, /해봐/,
|
|
264
|
+
/진행시켜/, /진행해/, /시작해/, /실행해/, /돌려/,
|
|
265
|
+
/build/i, /create/i, /implement/i, /develop/i, /fix/i, /deploy/i, /refactor/i,
|
|
266
|
+
/proceed/i, /start/i, /execute/i, /run/i, /do it/i, /go ahead/i,
|
|
267
|
+
];
|
|
268
|
+
if (taskPatterns.some(p => p.test(t))) return false;
|
|
269
|
+
|
|
260
270
|
// Korean question patterns
|
|
261
271
|
const questionPatterns = [
|
|
262
272
|
/확인해/, /알려줘/, /보여줘/, /어때/, /뭐야/, /뭐지/, /뭘까/,
|
|
263
|
-
/상태/, /상황/,
|
|
273
|
+
/상태/, /상황/, /현재/, /어디/, /얼마/,
|
|
264
274
|
/what/i, /how.*going/i, /status/i, /check/i, /show/i, /tell/i,
|
|
265
275
|
];
|
|
266
|
-
if (questionPatterns.some(p => p.test(t))) return true;
|
|
267
|
-
|
|
268
|
-
// Long directives with action verbs → dispatch
|
|
269
|
-
const taskPatterns = [
|
|
270
|
-
/만들어/, /구현해/, /개발해/, /수정해/, /변경해/, /리팩토링/,
|
|
271
|
-
/설계해/, /작성해/, /배포해/, /테스트해/, /고쳐/,
|
|
272
|
-
/build/i, /create/i, /implement/i, /develop/i, /fix/i, /deploy/i, /refactor/i,
|
|
273
|
-
];
|
|
274
276
|
if (taskPatterns.some(p => p.test(t))) return false;
|
|
275
277
|
|
|
276
278
|
// Default: short → conversation, long → dispatch
|
|
@@ -341,7 +343,6 @@ Do NOT dispatch anyone. Do NOT create new files. Just answer concisely.`;
|
|
|
341
343
|
roleId: 'ceo',
|
|
342
344
|
task,
|
|
343
345
|
sourceRole: 'ceo',
|
|
344
|
-
readOnly: true, // readOnly = no code changes, conversation only
|
|
345
346
|
sessionId,
|
|
346
347
|
});
|
|
347
348
|
|
|
@@ -462,28 +462,26 @@ export const PanelMode: React.FC<PanelModeProps> = ({
|
|
|
462
462
|
</Box>
|
|
463
463
|
) : (
|
|
464
464
|
<Box flexGrow={1} flexDirection="column">
|
|
465
|
-
{
|
|
466
|
-
|
|
465
|
+
{docsScroll === 0 ? (
|
|
466
|
+
/* File list — only render visible window (prevent Yoga OOM on 600+ files) */
|
|
467
467
|
<Box flexDirection="column" marginTop={0}>
|
|
468
|
-
{docsList.
|
|
468
|
+
<Text color="gray" dimColor>{docsList.length} files{docsIndex > 0 ? ` (${docsIndex + 1}/${docsList.length})` : ''}</Text>
|
|
469
|
+
{docsList.slice(docsIndex, docsIndex + termHeight - 10).map((doc, i) => (
|
|
469
470
|
<Box key={doc.path}>
|
|
470
471
|
<Text
|
|
471
|
-
color={i ===
|
|
472
|
-
bold={i ===
|
|
473
|
-
inverse={i ===
|
|
472
|
+
color={i === 0 ? 'cyan' : doc.isWave ? 'green' : 'white'}
|
|
473
|
+
bold={i === 0}
|
|
474
|
+
inverse={i === 0}
|
|
474
475
|
>
|
|
475
|
-
{doc.isWave ? '\u2605' : ' '} {doc.title.slice(0,
|
|
476
|
+
{doc.isWave ? '\u2605' : ' '} {doc.title.slice(0, 55)}
|
|
476
477
|
</Text>
|
|
477
478
|
</Box>
|
|
478
479
|
))}
|
|
479
|
-
{docsList.length > termHeight - 8 && (
|
|
480
|
-
<Text color="gray"> ... +{docsList.length - (termHeight - 8)} more (Tab to cycle)</Text>
|
|
481
|
-
)}
|
|
482
480
|
</Box>
|
|
483
481
|
) : (
|
|
484
|
-
/* File preview
|
|
482
|
+
/* File preview */
|
|
485
483
|
<Box flexDirection="column">
|
|
486
|
-
<Text color="cyan" bold>{selectedDoc
|
|
484
|
+
<Text color="cyan" bold>{selectedDoc?.isWave ? '\u2605 ' : ''}{selectedDoc?.path.split('/').slice(-2).join('/')}</Text>
|
|
487
485
|
<Text color="gray">{'\u2500'.repeat(50)}</Text>
|
|
488
486
|
{filePreview.slice(docsScroll - 1, docsScroll - 1 + termHeight - 10).map((line, i) => (
|
|
489
487
|
<Text key={i} color="white" wrap="wrap">{line}</Text>
|
|
@@ -493,7 +491,7 @@ export const PanelMode: React.FC<PanelModeProps> = ({
|
|
|
493
491
|
|
|
494
492
|
<Box marginTop={0}>
|
|
495
493
|
<Text color="gray" dimColor>
|
|
496
|
-
[Enter] {process.env.EDITOR || 'vim'} | [
|
|
494
|
+
[Enter] {process.env.EDITOR || 'vim'} | [j/k] {docsScroll > 0 ? 'scroll' : 'select'}
|
|
497
495
|
</Text>
|
|
498
496
|
</Box>
|
|
499
497
|
</Box>
|