rrce-workflow 0.3.17 → 0.3.18
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/agent-core/prompts/design.md +199 -29
- package/agent-core/prompts/develop.md +48 -4
- package/dist/index.js +53 -55
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: RRCE Design
|
|
3
3
|
description: Research requirements and create execution plan in a single interactive session. Combines clarification and task breakdown.
|
|
4
4
|
argument-hint: TASK_SLUG=<slug> REQUEST="<user prompt>" [TITLE="<task title>"]
|
|
5
|
-
tools: ['rrce_get_context_bundle', 'rrce_search_knowledge', 'rrce_search_code', 'rrce_search_symbols', 'rrce_get_file_summary', 'rrce_search_tasks', 'rrce_find_related_files', 'rrce_get_project_context', 'rrce_validate_phase', 'rrce_list_projects', 'rrce_create_task', 'rrce_update_task']
|
|
5
|
+
tools: ['rrce_get_context_bundle', 'rrce_search_knowledge', 'rrce_search_code', 'rrce_search_symbols', 'rrce_get_file_summary', 'rrce_search_tasks', 'rrce_find_related_files', 'rrce_get_project_context', 'rrce_validate_phase', 'rrce_list_projects', 'rrce_create_task', 'rrce_update_task', 'websearch', 'codesearch', 'write']
|
|
6
6
|
required-args:
|
|
7
7
|
- name: TASK_SLUG
|
|
8
8
|
prompt: "Enter a task slug (kebab-case identifier)"
|
|
@@ -25,17 +25,21 @@ This agent operates in **two phases within the same session**:
|
|
|
25
25
|
```
|
|
26
26
|
┌─────────────────────────────────────────────────────────────────┐
|
|
27
27
|
│ RESEARCH MODE │
|
|
28
|
-
│ - Knowledge discovery
|
|
29
|
-
│ -
|
|
28
|
+
│ - Knowledge discovery (RAG + Web search) │
|
|
29
|
+
│ - Exploration & alternatives (no round limits) │
|
|
30
|
+
│ - Ambiguity detection │
|
|
31
|
+
│ - Confidence assessment │
|
|
30
32
|
│ - Save research brief │
|
|
31
33
|
└─────────────────────────────────────────────────────────────────┘
|
|
32
34
|
│
|
|
33
35
|
▼
|
|
34
|
-
"
|
|
36
|
+
"Confidence: [high/medium/low]. Requirements: [clear/ambiguous]. Ready to plan? (y/n)"
|
|
35
37
|
│
|
|
36
38
|
▼
|
|
37
39
|
┌─────────────────────────────────────────────────────────────────┐
|
|
38
40
|
│ PLANNING MODE │
|
|
41
|
+
│ - Read research brief (alternatives, trade-offs) │
|
|
42
|
+
│ - Ask which approach to plan for │
|
|
39
43
|
│ - Propose task breakdown │
|
|
40
44
|
│ - Refinement (max 2 rounds) │
|
|
41
45
|
│ - Save plan artifact │
|
|
@@ -48,7 +52,7 @@ This agent operates in **two phases within the same session**:
|
|
|
48
52
|
Handoff to @rrce_develop
|
|
49
53
|
```
|
|
50
54
|
|
|
51
|
-
Phase transitions are interactive — always ask, wait for user confirmation.
|
|
55
|
+
Phase transitions are interactive — always ask, wait for user confirmation. Use **confidence-driven progression**, not round limits.
|
|
52
56
|
|
|
53
57
|
---
|
|
54
58
|
|
|
@@ -70,42 +74,197 @@ Optional additions:
|
|
|
70
74
|
- `rrce_search_tasks` - find similar past tasks
|
|
71
75
|
- `rrce_search_symbols` - find specific functions/classes
|
|
72
76
|
|
|
73
|
-
###
|
|
77
|
+
### Strategic Research Guidance
|
|
74
78
|
|
|
75
|
-
**
|
|
79
|
+
Use **different research sources strategically** based on what you're exploring:
|
|
76
80
|
|
|
77
|
-
|
|
81
|
+
| Research Need | Tool | Purpose |
|
|
82
|
+
|----------------|-------|---------|
|
|
83
|
+
| **Project context** | `rrce_get_context_bundle`, `rrce_search_knowledge` | Understand current architecture, patterns, existing implementations |
|
|
84
|
+
| **Existing implementations** | `rrce_search_code`, `rrce_search_symbols` | Find similar code, understand patterns used in project |
|
|
85
|
+
| **Framework/library choices** | `websearch`, `codesearch` | Research latest versions, best practices, community adoption |
|
|
86
|
+
| **Architectural patterns** | `websearch` + `codesearch` | Compare industry standards with code examples |
|
|
87
|
+
| **API usage** | `codesearch` | Find library usage patterns and examples |
|
|
88
|
+
| **Project-specific constraints** | `rrce_search_knowledge`, `rrce_search_code` | Check for existing tech decisions, conventions, blockers |
|
|
89
|
+
|
|
90
|
+
**RAG comparison triggers:**
|
|
91
|
+
When proposing alternatives or after user feedback, query RAG to:
|
|
92
|
+
- Check if similar patterns already exist in codebase
|
|
93
|
+
- Verify proposed approach doesn't conflict with existing architecture
|
|
94
|
+
- Leverage existing utility functions or services if available
|
|
95
|
+
|
|
96
|
+
### 1.2 Exploration & Alternatives (Guidance-Driven, No Round Limits)
|
|
97
|
+
|
|
98
|
+
**Goal**: Guide user to think and enrich their ideas through educational exploration. Propose alternatives, explain trade-offs, and ensure thorough understanding before planning.
|
|
99
|
+
|
|
100
|
+
#### Step 1: Initial Discovery (First Interaction)
|
|
101
|
+
|
|
102
|
+
After knowledge discovery, present your findings and ask **3-4 critical questions**:
|
|
78
103
|
- Core problem being solved?
|
|
79
104
|
- Success criteria (measurable)?
|
|
80
|
-
- Hard constraints?
|
|
105
|
+
- Hard constraints (tech stack, performance, compatibility)?
|
|
106
|
+
|
|
107
|
+
#### Step 2: Propose Alternatives (Educational Approach)
|
|
108
|
+
|
|
109
|
+
Based on research, propose **2-3 implementation approaches** with trade-offs:
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
| Approach | Description | Pros | Cons | Effort |
|
|
113
|
+
|----------|-------------|-------|-------|---------|
|
|
114
|
+
| A | [brief description] | [1-2 bullets] | [1-2 bullets] | S/M/L |
|
|
115
|
+
| B | [brief description] | [1-2 bullets] | [1-2 bullets] | S/M/L |
|
|
116
|
+
| C (optional) | [brief description] | [1-2 bullets] | [1-2 bullets] | S/M/L |
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Ask**: "Which approach resonates? Any concerns? Or should I explore other options?"
|
|
120
|
+
|
|
121
|
+
#### Step 3: Fact-Checking & Best Practices
|
|
122
|
+
|
|
123
|
+
Use `websearch` and `codesearch` to validate approaches and provide best practices:
|
|
124
|
+
- Search for library/framework documentation and community best practices
|
|
125
|
+
- Cite sources when providing recommendations
|
|
126
|
+
- Compare alternatives against industry standards
|
|
127
|
+
|
|
128
|
+
#### Step 4: Explore User's Preference (Interactive Refinement)
|
|
129
|
+
|
|
130
|
+
After user indicates preference or concerns:
|
|
131
|
+
- Ask 1-2 follow-up questions to refine understanding
|
|
132
|
+
- Use `rrce_search_knowledge` and `rrce_search_code` to **check RAG** for existing implementations that might conflict with proposed approach
|
|
133
|
+
- **Compare proposed approach against current project state** (architecture, patterns, conventions)
|
|
134
|
+
- Highlight any incompatibilities or opportunities to reuse existing code
|
|
135
|
+
|
|
136
|
+
**RAG comparison checkpoints:**
|
|
137
|
+
1. Before proposing alternatives: Check if similar features exist
|
|
138
|
+
2. After user feedback: Check if proposed approach conflicts with existing patterns
|
|
139
|
+
3. Before planning: Verify chosen approach aligns with project architecture
|
|
140
|
+
|
|
141
|
+
**Repeat Steps 2-4** as needed. **No fixed round limits**—continue until:
|
|
142
|
+
- User expresses clear preference
|
|
143
|
+
- Alternatives thoroughly explored
|
|
144
|
+
- Best practices considered
|
|
145
|
+
- RAG comparison completed
|
|
146
|
+
|
|
147
|
+
#### Step 5: Document Remaining Ambiguity as Assumptions
|
|
148
|
+
|
|
149
|
+
If questions remain unanswered after thorough exploration, document as assumptions with confidence level:
|
|
150
|
+
- **High**: Documented fact in RAG or widely accepted practice
|
|
151
|
+
- **Medium**: Reasonable inference but not explicitly confirmed
|
|
152
|
+
- **Low**: Guess based on pattern matching—may need clarification
|
|
153
|
+
|
|
154
|
+
### 1.3 Ambiguity Detection
|
|
155
|
+
|
|
156
|
+
Before transitioning to planning, **detect and flag ambiguous language**:
|
|
157
|
+
|
|
158
|
+
**Hedge words to detect (user input):**
|
|
159
|
+
- "maybe", "probably", "possibly", "might", "could be"
|
|
160
|
+
- "I think", "I'm not sure", "not certain"
|
|
161
|
+
- "sort of", "kind of", "a bit"
|
|
162
|
+
- "we'll see", "decide later", "figure it out"
|
|
163
|
+
|
|
164
|
+
**If ambiguity detected:**
|
|
165
|
+
```
|
|
166
|
+
> "I notice some requirements are still unclear (marked with †). Let's explore these before planning:
|
|
167
|
+
>
|
|
168
|
+
> † [specific ambiguous phrase] - [what needs clarification]
|
|
169
|
+
>
|
|
170
|
+
> Let's continue exploring to reach clear requirements. Ready to continue? (y/n)"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**If no ambiguity detected:**
|
|
174
|
+
Proceed to confidence assessment (Section 1.4).
|
|
175
|
+
|
|
176
|
+
### 1.4 Confidence Assessment
|
|
81
177
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
178
|
+
Before asking to proceed to planning, **explicitly assess confidence** using this checklist:
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
**Confidence Checklist:**
|
|
182
|
+
□ Requirements are specific and non-ambiguous
|
|
183
|
+
□ Success criteria are measurable and testable
|
|
184
|
+
□ Alternatives explored (2-3 approaches with trade-offs)
|
|
185
|
+
□ Best practices researched and cited
|
|
186
|
+
□ RAG comparison completed (checked against existing implementations)
|
|
187
|
+
□ User preference expressed and concerns addressed
|
|
188
|
+
□ No blocking questions remain
|
|
189
|
+
|
|
190
|
+
**Confidence Level:**
|
|
191
|
+
```
|
|
85
192
|
|
|
86
|
-
|
|
193
|
+
If all boxes checked → **High Confidence**
|
|
194
|
+
If 4-6 boxes checked → **Medium Confidence** (document gaps)
|
|
195
|
+
If <4 boxes checked → **Low Confidence** (continue exploration)
|
|
87
196
|
|
|
88
|
-
|
|
197
|
+
**State explicitly:**
|
|
198
|
+
```
|
|
199
|
+
> "My confidence in these requirements: [high/medium/low].
|
|
200
|
+
>
|
|
201
|
+
> [If medium/low: Gaps remain: [list specific gaps]. Let's continue exploring...]
|
|
202
|
+
> [If high: Ready to proceed to planning?] (y/n)"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**If user wants to plan but confidence is low/medium:**
|
|
206
|
+
```
|
|
207
|
+
> "I'd like to reach higher confidence before planning. Let me explore [specific gap].
|
|
208
|
+
> [Continue exploration or force planning?] (c/p)"
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### 1.5 Generate Research Brief
|
|
89
212
|
|
|
90
213
|
Save to: `{{RRCE_DATA}}/tasks/{{TASK_SLUG}}/research/{{TASK_SLUG}}-research.md`
|
|
91
214
|
|
|
92
215
|
**Sections:**
|
|
93
|
-
- **Requirements**: What to build
|
|
216
|
+
- **Requirements**: What to build (specific, measurable)
|
|
94
217
|
- **Success Criteria**: Measurable outcomes
|
|
218
|
+
- **Alternatives Explored**: 2-3 approaches with trade-offs
|
|
219
|
+
- **Best Practices**: Industry standards and recommendations (with citations)
|
|
220
|
+
- **RAG Comparison Notes**: Comparison with existing project implementations
|
|
95
221
|
- **Out of Scope**: Explicit boundaries
|
|
96
222
|
- **Assumptions**: With confidence (high/medium/low)
|
|
97
|
-
- **Relevant Context**: Key findings from search
|
|
223
|
+
- **Relevant Context**: Key findings from RAG and web search
|
|
98
224
|
|
|
99
|
-
### 1.
|
|
225
|
+
### 1.6 Phase Transition
|
|
100
226
|
|
|
101
227
|
After saving research brief, ask:
|
|
102
228
|
|
|
103
229
|
> "Research complete. Brief saved to `research/{{TASK_SLUG}}-research.md`.
|
|
104
230
|
>
|
|
105
|
-
>
|
|
231
|
+
> Confidence: [high/medium/low]. Requirements: [clear/ambiguous].
|
|
232
|
+
> **Ready to plan?** (y/n)"
|
|
233
|
+
|
|
234
|
+
**If user says "y" and confidence is high:** Continue to Phase 2
|
|
235
|
+
**If user says "y" but confidence is medium/low:** See Section 1.6 blocking logic
|
|
236
|
+
**If user says "n" or wants to stop:** Update metadata, emit completion signal, end session
|
|
237
|
+
- Check confidence assessment (Section 1.4)
|
|
238
|
+
- If **high confidence**: Continue to Phase 2
|
|
239
|
+
- If **medium/low confidence**:
|
|
240
|
+
```
|
|
241
|
+
> "I notice confidence is [medium/low]. Gaps remain:
|
|
242
|
+
> • [gap 1]
|
|
243
|
+
> • [gap 2]
|
|
244
|
+
> Let's continue exploring to reach higher confidence. Continue? (y/n)"
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**If user says "n" or wants to stop:**
|
|
248
|
+
Update metadata, emit completion signal, end session
|
|
249
|
+
|
|
250
|
+
#### Blocking Early Pushes
|
|
251
|
+
|
|
252
|
+
If user tries to skip to planning prematurely (e.g., "let's plan", "ready for development") **before confidence is high**:
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
> "I need more clarity before planning. Let me address these gaps:
|
|
256
|
+
>
|
|
257
|
+
> † [ambiguity detected from user input]
|
|
258
|
+
>
|
|
259
|
+
> [Specific questions to clarify gaps]
|
|
260
|
+
>
|
|
261
|
+
> Let's explore these first. Ready to continue? (y/n)"
|
|
262
|
+
```
|
|
106
263
|
|
|
107
|
-
|
|
108
|
-
-
|
|
264
|
+
**Only proceed to planning when:**
|
|
265
|
+
- Confidence is **high** (all checklist boxes checked)
|
|
266
|
+
- User explicitly confirms **"Ready to plan"** after seeing full exploration
|
|
267
|
+
- No blocking ambiguities remain
|
|
109
268
|
|
|
110
269
|
---
|
|
111
270
|
|
|
@@ -113,7 +272,12 @@ After saving research brief, ask:
|
|
|
113
272
|
|
|
114
273
|
### 2.1 Load Context
|
|
115
274
|
|
|
116
|
-
Read the research brief you just created.
|
|
275
|
+
Read the research brief you just created. Pay special attention to:
|
|
276
|
+
- **Alternatives Explored section** → Which approach user preferred?
|
|
277
|
+
- **Best Practices** → Incorporate into task breakdown
|
|
278
|
+
- **RAG Comparison Notes** → Ensure tasks align with existing architecture
|
|
279
|
+
|
|
280
|
+
Use `rrce_search_symbols` to understand code structure for implementation planning based on **chosen approach**.
|
|
117
281
|
|
|
118
282
|
### 2.2 Propose Task Breakdown
|
|
119
283
|
|
|
@@ -232,11 +396,15 @@ Then tell user: "Design complete! To develop: `/rrce_develop {{TASK_SLUG}}` or a
|
|
|
232
396
|
|
|
233
397
|
## Completion Checklist
|
|
234
398
|
|
|
235
|
-
- [ ] Knowledge discovery done (first turn)
|
|
236
|
-
- [ ]
|
|
237
|
-
- [ ]
|
|
238
|
-
- [ ]
|
|
239
|
-
- [ ]
|
|
399
|
+
- [ ] Knowledge discovery done (first turn, RAG + web search)
|
|
400
|
+
- [ ] Exploration complete (alternatives proposed, trade-offs explained)
|
|
401
|
+
- [ ] Ambiguity detection performed (flagged if found)
|
|
402
|
+
- [ ] Confidence assessed and stated (high/medium/low)
|
|
403
|
+
- [ ] Best practices researched and cited
|
|
404
|
+
- [ ] RAG comparison completed
|
|
405
|
+
- [ ] Research brief saved (includes Alternatives, Best Practices, RAG Comparison)
|
|
406
|
+
- [ ] User confirmed ready to plan (high confidence) or stopped early
|
|
407
|
+
- [ ] Task breakdown proposed based on chosen approach
|
|
240
408
|
- [ ] Plan saved
|
|
241
409
|
- [ ] `meta.json` updated (both research + planning)
|
|
242
410
|
- [ ] `<rrce_completion>` emitted
|
|
@@ -249,9 +417,11 @@ Then tell user: "Design complete! To develop: `/rrce_develop {{TASK_SLUG}}` or a
|
|
|
249
417
|
1. **Single session for both phases** — don't ask user to run separate commands
|
|
250
418
|
2. **Always confirm before transitions** — explicit "y/n" prompts
|
|
251
419
|
3. **Save artifacts at each phase** — don't lose work if user stops early
|
|
252
|
-
4. **
|
|
253
|
-
5. **
|
|
254
|
-
6. **
|
|
420
|
+
4. **Confidence-driven progression** — No fixed round limits; continue until high confidence reached
|
|
421
|
+
5. **Educational approach** — Propose 2-3 alternatives with trade-offs, explain best practices
|
|
422
|
+
6. **Block early pushes** — If user says "let's plan" but confidence is low/medium, refuse and clarify gaps
|
|
423
|
+
7. **Strategic research** — Use RAG for project context, web search for frameworks/libraries
|
|
424
|
+
8. **Use task tool for development handoff** — triggers confirmation dialog
|
|
255
425
|
|
|
256
426
|
---
|
|
257
427
|
|
|
@@ -36,7 +36,12 @@ Manual verification:
|
|
|
36
36
|
|
|
37
37
|
- Max **3 retrieval calls per turn** (develop legitimately needs more)
|
|
38
38
|
- **Preferred:** `rrce_prefetch_task_context` (gets task + context in one call)
|
|
39
|
-
- Order: `rrce_prefetch_task_context` -> `read` plan/research -> `rrce_search_symbols` -> `glob/grep` (last resort)
|
|
39
|
+
- Order: `rrce_prefetch_task_context` -> `read` plan/research (explicit artifact read) -> `rrce_search_code`/`rrce_search_knowledge` -> `rrce_search_symbols` -> `glob/grep` (last resort)
|
|
40
|
+
|
|
41
|
+
**Semantic Search First:**
|
|
42
|
+
- Use `rrce_search_code` and `rrce_search_knowledge` before direct file reads
|
|
43
|
+
- Semantic search finds relevant code/concepts without exact matches
|
|
44
|
+
- Only use `read` after semantic search has identified specific files to examine
|
|
40
45
|
|
|
41
46
|
## Plan Adherence (STRICT)
|
|
42
47
|
|
|
@@ -57,6 +62,34 @@ Manual verification:
|
|
|
57
62
|
- Knowledge matches
|
|
58
63
|
- Code matches
|
|
59
64
|
|
|
65
|
+
**CRITICAL: Read artifacts explicitly:**
|
|
66
|
+
|
|
67
|
+
After prefetching, you must read the research brief and plan to understand:
|
|
68
|
+
- **Research brief** (`{{RRCE_DATA}}/tasks/{{TASK_SLUG}}/research/{{TASK_SLUG}}-research.md`):
|
|
69
|
+
- Requirements and constraints
|
|
70
|
+
- Alternatives and trade-offs
|
|
71
|
+
- Best practices
|
|
72
|
+
- RAG comparison insights
|
|
73
|
+
|
|
74
|
+
**Focus on research brief sections:**
|
|
75
|
+
- **Alternatives**: What approaches were considered and why they were rejected
|
|
76
|
+
- **Best Practices**: Industry standards and patterns to follow
|
|
77
|
+
- **RAG Comparison**: Semantic search strategies vs. traditional approaches
|
|
78
|
+
- **Technical Constraints**: Performance, security, or architectural limitations
|
|
79
|
+
|
|
80
|
+
- **Plan** (`{{RRCE_DATA}}/tasks/{{TASK_SLUG}}/planning/{{TASK_SLUG}}-plan.md`):
|
|
81
|
+
- Task breakdown
|
|
82
|
+
- Chosen approach (if alternatives were considered)
|
|
83
|
+
- Implementation strategy
|
|
84
|
+
- Validation criteria
|
|
85
|
+
|
|
86
|
+
**If plan mentions multiple approaches:**
|
|
87
|
+
- Read the "Chosen Approach" section carefully
|
|
88
|
+
- If no clear choice is documented, ask user: "The plan lists multiple approaches. Which approach should I implement?"
|
|
89
|
+
- Do not assume - clarity prevents rework
|
|
90
|
+
|
|
91
|
+
Use `read` for these files to ensure you capture all details including alternatives, trade-offs, and technical decisions.
|
|
92
|
+
|
|
60
93
|
### 2. Setup
|
|
61
94
|
|
|
62
95
|
Create: `{{RRCE_DATA}}/tasks/{{TASK_SLUG}}/execution/`
|
|
@@ -74,9 +107,20 @@ For each task:
|
|
|
74
107
|
1. **Announce**: "Task [N]/[Total]: [description]"
|
|
75
108
|
2. **Find code**: Use `rrce_search_symbols` to locate functions/classes to modify
|
|
76
109
|
3. **Understand structure**: Use `rrce_get_file_summary` for quick file overview
|
|
77
|
-
4. **
|
|
78
|
-
|
|
79
|
-
|
|
110
|
+
4. **Use semantic search actively**: Before implementing, use `rrce_search_code` and `rrce_search_knowledge` to:
|
|
111
|
+
- Find existing implementations of similar patterns
|
|
112
|
+
- Locate relevant code examples in the codebase
|
|
113
|
+
- Understand prior decisions and trade-offs
|
|
114
|
+
- Identify best practices already in use
|
|
115
|
+
5. **Implement**: Make code changes per plan
|
|
116
|
+
6. **Verify**: Run validation from plan
|
|
117
|
+
7. **Document**: Note what was done
|
|
118
|
+
|
|
119
|
+
**Active RAG Usage Guidelines:**
|
|
120
|
+
- Search for conceptual terms (e.g., "error handling", "authentication") not just exact function names
|
|
121
|
+
- Use semantic search to understand patterns before reading individual files
|
|
122
|
+
- When unsure about implementation approach, search for similar implementations first
|
|
123
|
+
- Use `rrce_search_code` for code patterns, `rrce_search_knowledge` for documentation/prior decisions
|
|
80
124
|
|
|
81
125
|
### 4. Validation
|
|
82
126
|
|
package/dist/index.js
CHANGED
|
@@ -5883,17 +5883,17 @@ var init_ProjectsView = __esm({
|
|
|
5883
5883
|
}
|
|
5884
5884
|
let statsRow = "";
|
|
5885
5885
|
if (idx?.state === "running") {
|
|
5886
|
-
statsRow = `
|
|
5886
|
+
statsRow = ` \u27F3 Indexing... ${idx.itemsDone}/${idx.itemsTotal ?? "?"}`;
|
|
5887
5887
|
} else if (idx?.state === "failed") {
|
|
5888
|
-
statsRow = "
|
|
5888
|
+
statsRow = " \u2715 Index failed";
|
|
5889
5889
|
} else if (stats.knowledgeCount > 0 || stats.codeCount > 0) {
|
|
5890
5890
|
const parts = [];
|
|
5891
5891
|
if (stats.knowledgeCount > 0) parts.push(`\u{1F4DA} ${stats.knowledgeCount} docs`);
|
|
5892
5892
|
if (stats.codeCount > 0) parts.push(`\u{1F4BB} ${stats.codeCount} files`);
|
|
5893
5893
|
if (stats.lastIndexed) parts.push(`\u{1F550} ${formatRelativeTime(stats.lastIndexed)}`);
|
|
5894
|
-
statsRow = `
|
|
5894
|
+
statsRow = ` \u{1F4CA} ${parts.join(" \u2502 ")}`;
|
|
5895
5895
|
} else if (isExposed) {
|
|
5896
|
-
statsRow = "
|
|
5896
|
+
statsRow = " \u{1F4CA} Not indexed";
|
|
5897
5897
|
}
|
|
5898
5898
|
const fullLabel = statsRow ? `${label}
|
|
5899
5899
|
${statsRow}` : label;
|
|
@@ -5931,20 +5931,20 @@ ${statsRow}` : label;
|
|
|
5931
5931
|
setConfig(newConfig);
|
|
5932
5932
|
onConfigChange?.();
|
|
5933
5933
|
};
|
|
5934
|
-
return /* @__PURE__ */ jsxs3(Box4, { flexDirection: "column",
|
|
5935
|
-
/* @__PURE__ */ jsxs3(Box4, { justifyContent: "space-between", children: [
|
|
5934
|
+
return /* @__PURE__ */ jsxs3(Box4, { flexDirection: "column", borderStyle: "round", borderColor: "white", flexGrow: 1, children: [
|
|
5935
|
+
/* @__PURE__ */ jsxs3(Box4, { paddingX: 1, justifyContent: "space-between", borderBottom: true, children: [
|
|
5936
5936
|
/* @__PURE__ */ jsxs3(Box4, { children: [
|
|
5937
|
-
/* @__PURE__ */ jsx5(Text4, { bold: true, color: "cyan", children: "
|
|
5938
|
-
/* @__PURE__ */ jsx5(Text4, {
|
|
5937
|
+
/* @__PURE__ */ jsx5(Text4, { bold: true, color: "cyan", children: "Projects" }),
|
|
5938
|
+
/* @__PURE__ */ jsx5(Text4, { color: "dim", children: " \u2502 " }),
|
|
5939
5939
|
/* @__PURE__ */ jsxs3(Text4, { color: config.defaults.includeNew ? "green" : "red", children: [
|
|
5940
5940
|
"Auto-expose: ",
|
|
5941
5941
|
config.defaults.includeNew ? "ON" : "OFF"
|
|
5942
5942
|
] })
|
|
5943
5943
|
] }),
|
|
5944
|
-
/* @__PURE__ */ jsx5(
|
|
5944
|
+
/* @__PURE__ */ jsx5(Text4, { color: "dim", children: "v0.3.14" })
|
|
5945
5945
|
] }),
|
|
5946
|
-
/* @__PURE__ */ jsx5(Text4, { color: "dim", children: "
|
|
5947
|
-
/* @__PURE__ */ jsx5(Box4, { marginTop: 1, flexDirection: "column", flexGrow: 1, children: /* @__PURE__ */ jsx5(
|
|
5946
|
+
/* @__PURE__ */ jsx5(Box4, { marginTop: 1, paddingX: 1, children: /* @__PURE__ */ jsx5(Text4, { color: "dim", children: "Manage which projects are exposed to the MCP server." }) }),
|
|
5947
|
+
/* @__PURE__ */ jsx5(Box4, { marginTop: 1, paddingX: 1, flexDirection: "column", flexGrow: 1, children: /* @__PURE__ */ jsx5(
|
|
5948
5948
|
SimpleSelect,
|
|
5949
5949
|
{
|
|
5950
5950
|
message: "",
|
|
@@ -5959,7 +5959,10 @@ ${statsRow}` : label;
|
|
|
5959
5959
|
},
|
|
5960
5960
|
JSON.stringify(initialSelected) + config.defaults.includeNew + JSON.stringify(indexingStats)
|
|
5961
5961
|
) }),
|
|
5962
|
-
/* @__PURE__ */
|
|
5962
|
+
/* @__PURE__ */ jsxs3(Box4, { paddingX: 1, justifyContent: "space-between", borderTop: true, children: [
|
|
5963
|
+
/* @__PURE__ */ jsx5(Text4, { color: "dim", children: "Space:Select Enter:Save a:Toggle Auto u:Refresh Drift" }),
|
|
5964
|
+
/* @__PURE__ */ jsx5(Text4, { color: "dim", children: "Use 'rrce-workflow wizard' for advanced config" })
|
|
5965
|
+
] })
|
|
5963
5966
|
] });
|
|
5964
5967
|
};
|
|
5965
5968
|
}
|
|
@@ -6000,8 +6003,8 @@ var init_TaskRow = __esm({
|
|
|
6000
6003
|
isLastTask = false
|
|
6001
6004
|
}) => {
|
|
6002
6005
|
if (row.kind === "project") {
|
|
6003
|
-
const projectColor =
|
|
6004
|
-
const isBold =
|
|
6006
|
+
const projectColor = isSelected ? "cyan" : isCurrentProject ? "yellow" : "white";
|
|
6007
|
+
const isBold = isSelected || isCurrentProject;
|
|
6005
6008
|
return /* @__PURE__ */ jsxs4(Box5, { children: [
|
|
6006
6009
|
/* @__PURE__ */ jsx6(Text5, { color: isSelected ? "cyan" : "dim", children: isSelected ? "\u25B8 " : " " }),
|
|
6007
6010
|
/* @__PURE__ */ jsxs4(Text5, { bold: isBold, color: projectColor, children: [
|
|
@@ -6009,7 +6012,7 @@ var init_TaskRow = __esm({
|
|
|
6009
6012
|
" ",
|
|
6010
6013
|
formatProjectLabel(row.project)
|
|
6011
6014
|
] }),
|
|
6012
|
-
isCurrentProject && /* @__PURE__ */ jsx6(Text5, { color: "
|
|
6015
|
+
isCurrentProject && /* @__PURE__ */ jsx6(Text5, { color: "yellow", dimColor: true, children: " (current)" }),
|
|
6013
6016
|
hasDrift && /* @__PURE__ */ jsx6(Text5, { color: "magenta", children: " \u26A0" }),
|
|
6014
6017
|
/* @__PURE__ */ jsxs4(Text5, { color: "dim", children: [
|
|
6015
6018
|
" ",
|
|
@@ -6028,7 +6031,7 @@ var init_TaskRow = __esm({
|
|
|
6028
6031
|
if (isPlaceholder) {
|
|
6029
6032
|
return /* @__PURE__ */ jsxs4(Box5, { children: [
|
|
6030
6033
|
/* @__PURE__ */ jsxs4(Text5, { color: "dim", children: [
|
|
6031
|
-
"
|
|
6034
|
+
" ",
|
|
6032
6035
|
branch,
|
|
6033
6036
|
" "
|
|
6034
6037
|
] }),
|
|
@@ -6036,14 +6039,13 @@ var init_TaskRow = __esm({
|
|
|
6036
6039
|
] });
|
|
6037
6040
|
}
|
|
6038
6041
|
return /* @__PURE__ */ jsxs4(Box5, { children: [
|
|
6039
|
-
/* @__PURE__ */ jsx6(Text5, { color: isSelected ? "cyan" : "dim", children: isSelected ? "\u25B8" : "
|
|
6042
|
+
/* @__PURE__ */ jsx6(Text5, { color: isSelected ? "cyan" : "dim", children: isSelected ? "\u25B8 " : " " }),
|
|
6040
6043
|
/* @__PURE__ */ jsxs4(Text5, { color: "dim", children: [
|
|
6041
|
-
" ",
|
|
6042
6044
|
branch,
|
|
6043
6045
|
" "
|
|
6044
6046
|
] }),
|
|
6045
6047
|
/* @__PURE__ */ jsx6(Text5, { color: isSelected ? "cyan" : "white", children: "\u{1F4CB} " }),
|
|
6046
|
-
/* @__PURE__ */ jsx6(Text5, { bold: isSelected, color: isSelected ? "cyan" : "white", children: taskLabel.length > 25 ? taskLabel.substring(0, 22) + "..." : taskLabel }),
|
|
6048
|
+
/* @__PURE__ */ jsx6(Box5, { flexGrow: 1, children: /* @__PURE__ */ jsx6(Text5, { bold: isSelected, color: isSelected ? "cyan" : "white", children: taskLabel.length > 25 ? taskLabel.substring(0, 22) + "..." : taskLabel }) }),
|
|
6047
6049
|
activeAgent && /* @__PURE__ */ jsxs4(Text5, { children: [
|
|
6048
6050
|
/* @__PURE__ */ jsx6(Text5, { color: "dim", children: " " }),
|
|
6049
6051
|
/* @__PURE__ */ jsx6(Text5, { children: getPhaseIcon(activeAgent.agent) }),
|
|
@@ -6061,7 +6063,7 @@ var init_TaskRow = __esm({
|
|
|
6061
6063
|
" ",
|
|
6062
6064
|
relativeTime
|
|
6063
6065
|
] }),
|
|
6064
|
-
!activeAgent && status && /* @__PURE__ */ jsx6(Text5, {
|
|
6066
|
+
!activeAgent && status && /* @__PURE__ */ jsx6(Text5, { color: getStatusColor(status), children: ` ${getStatusIcon(status)} ${status}` })
|
|
6065
6067
|
] });
|
|
6066
6068
|
};
|
|
6067
6069
|
}
|
|
@@ -6087,34 +6089,30 @@ var init_TaskDetails = __esm({
|
|
|
6087
6089
|
}
|
|
6088
6090
|
const progress = getChecklistProgress(task.checklist || []);
|
|
6089
6091
|
return /* @__PURE__ */ jsxs5(Box6, { flexDirection: "column", children: [
|
|
6090
|
-
/* @__PURE__ */ jsxs5(Box6, { marginBottom:
|
|
6092
|
+
/* @__PURE__ */ jsxs5(Box6, { marginBottom: 0, flexDirection: "column", children: [
|
|
6091
6093
|
/* @__PURE__ */ jsx7(Text6, { bold: true, color: "cyan", children: task.title || task.task_slug }),
|
|
6092
|
-
task.summary && /* @__PURE__ */ jsx7(Text6, { color: "white", wrap: "wrap", children: task.summary.length >
|
|
6094
|
+
task.summary && /* @__PURE__ */ jsx7(Box6, { marginTop: 0, children: /* @__PURE__ */ jsx7(Text6, { color: "white", wrap: "wrap", children: task.summary.length > 150 ? task.summary.substring(0, 147) + "..." : task.summary }) })
|
|
6093
6095
|
] }),
|
|
6094
|
-
/* @__PURE__ */ jsx7(Text6, {
|
|
6095
|
-
/* @__PURE__ */ jsxs5(Box6, {
|
|
6096
|
-
/* @__PURE__ */
|
|
6096
|
+
/* @__PURE__ */ jsx7(Box6, { marginY: 0, children: /* @__PURE__ */ jsx7(Text6, { color: "dim", children: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500" }) }),
|
|
6097
|
+
/* @__PURE__ */ jsxs5(Box6, { flexDirection: "column", children: [
|
|
6098
|
+
/* @__PURE__ */ jsxs5(Box6, { justifyContent: "space-between", children: [
|
|
6099
|
+
/* @__PURE__ */ jsx7(Text6, { bold: true, color: "white", children: "\u{1F4CB} STATUS" }),
|
|
6100
|
+
/* @__PURE__ */ jsx7(Text6, { color: getStatusColor(task.status || ""), children: task.status?.toUpperCase() || "UNKNOWN" })
|
|
6101
|
+
] }),
|
|
6097
6102
|
/* @__PURE__ */ jsxs5(Box6, { flexDirection: "column", marginTop: 0, marginLeft: 1, children: [
|
|
6098
|
-
/* @__PURE__ */ jsxs5(Box6, { children: [
|
|
6099
|
-
/* @__PURE__ */ jsx7(Text6, { color: "dim", children: "Status: " }),
|
|
6100
|
-
/* @__PURE__ */ jsx7(Text6, { color: getStatusColor(task.status || ""), children: task.status || "unknown" })
|
|
6101
|
-
] }),
|
|
6102
6103
|
/* @__PURE__ */ jsxs5(Box6, { children: [
|
|
6103
6104
|
/* @__PURE__ */ jsx7(Text6, { color: "dim", children: "Updated: " }),
|
|
6104
6105
|
/* @__PURE__ */ jsx7(Text6, { children: formatRelativeTime(task.updated_at || "") })
|
|
6105
6106
|
] }),
|
|
6106
6107
|
task.tags && task.tags.length > 0 && /* @__PURE__ */ jsxs5(Box6, { children: [
|
|
6107
6108
|
/* @__PURE__ */ jsx7(Text6, { color: "dim", children: "Tags: " }),
|
|
6108
|
-
|
|
6109
|
-
/* @__PURE__ */ jsx7(Text6, { color: "cyan", children: tag }),
|
|
6110
|
-
i < task.tags.length - 1 && /* @__PURE__ */ jsx7(Text6, { color: "dim", children: ", " })
|
|
6111
|
-
] }, tag))
|
|
6109
|
+
/* @__PURE__ */ jsx7(Text6, { color: "cyan", children: task.tags.join(", ") })
|
|
6112
6110
|
] })
|
|
6113
6111
|
] })
|
|
6114
6112
|
] }),
|
|
6115
|
-
/* @__PURE__ */ jsx7(Text6, {
|
|
6116
|
-
/* @__PURE__ */ jsxs5(Box6, {
|
|
6117
|
-
/* @__PURE__ */ jsxs5(Box6, { children: [
|
|
6113
|
+
/* @__PURE__ */ jsx7(Box6, { marginY: 0, children: /* @__PURE__ */ jsx7(Text6, { color: "dim", children: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500" }) }),
|
|
6114
|
+
/* @__PURE__ */ jsxs5(Box6, { flexDirection: "column", children: [
|
|
6115
|
+
/* @__PURE__ */ jsxs5(Box6, { justifyContent: "space-between", children: [
|
|
6118
6116
|
/* @__PURE__ */ jsx7(Text6, { bold: true, color: "white", children: "\u{1F4CB} CHECKLIST " }),
|
|
6119
6117
|
progress.total > 0 && /* @__PURE__ */ jsxs5(Text6, { color: "dim", children: [
|
|
6120
6118
|
getProgressBar(progress.percentage, 8),
|
|
@@ -6125,26 +6123,26 @@ var init_TaskDetails = __esm({
|
|
|
6125
6123
|
] })
|
|
6126
6124
|
] }),
|
|
6127
6125
|
/* @__PURE__ */ jsxs5(Box6, { flexDirection: "column", marginLeft: 1, children: [
|
|
6128
|
-
(task.checklist || []).length === 0 ? /* @__PURE__ */ jsx7(Text6, { color: "dim", children: "No checklist items" }) : (task.checklist || []).slice(0,
|
|
6126
|
+
(task.checklist || []).length === 0 ? /* @__PURE__ */ jsx7(Text6, { color: "dim", children: "No checklist items" }) : (task.checklist || []).slice(0, 10).map((c, i) => {
|
|
6129
6127
|
const isDone = c.status === "done";
|
|
6130
6128
|
return /* @__PURE__ */ jsxs5(Text6, { color: isDone ? "dim" : "white", children: [
|
|
6131
6129
|
/* @__PURE__ */ jsxs5(Text6, { color: isDone ? "green" : "dim", children: [
|
|
6132
6130
|
getCheckbox(c.status || "pending"),
|
|
6133
6131
|
" "
|
|
6134
6132
|
] }),
|
|
6135
|
-
(c.label || c.id || "item").substring(0,
|
|
6133
|
+
(c.label || c.id || "item").substring(0, 40)
|
|
6136
6134
|
] }, c.id || i);
|
|
6137
6135
|
}),
|
|
6138
|
-
(task.checklist || []).length >
|
|
6139
|
-
"...and ",
|
|
6140
|
-
(task.checklist || []).length -
|
|
6136
|
+
(task.checklist || []).length > 10 && /* @__PURE__ */ jsxs5(Text6, { color: "dim", children: [
|
|
6137
|
+
" ...and ",
|
|
6138
|
+
(task.checklist || []).length - 10,
|
|
6141
6139
|
" more"
|
|
6142
6140
|
] })
|
|
6143
6141
|
] })
|
|
6144
6142
|
] }),
|
|
6145
|
-
/* @__PURE__ */ jsx7(Text6, {
|
|
6143
|
+
/* @__PURE__ */ jsx7(Box6, { marginY: 0, children: /* @__PURE__ */ jsx7(Text6, { color: "dim", children: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500" }) }),
|
|
6146
6144
|
agentTodos && agentTodos.items.length > 0 && /* @__PURE__ */ jsxs5(Fragment, { children: [
|
|
6147
|
-
/* @__PURE__ */ jsxs5(Box6, {
|
|
6145
|
+
/* @__PURE__ */ jsxs5(Box6, { flexDirection: "column", children: [
|
|
6148
6146
|
/* @__PURE__ */ jsxs5(Box6, { children: [
|
|
6149
6147
|
/* @__PURE__ */ jsx7(Text6, { bold: true, color: "white", children: "\u{1F3AF} AGENT TODOS " }),
|
|
6150
6148
|
/* @__PURE__ */ jsxs5(Text6, { color: "dim", children: [
|
|
@@ -6161,18 +6159,18 @@ var init_TaskDetails = __esm({
|
|
|
6161
6159
|
getTodoStatusIcon(item.status),
|
|
6162
6160
|
" "
|
|
6163
6161
|
] }),
|
|
6164
|
-
/* @__PURE__ */ jsx7(Text6, { color: item.status === "completed" ? "dim" : "white", children: item.content.substring(0,
|
|
6162
|
+
/* @__PURE__ */ jsx7(Text6, { color: item.status === "completed" ? "dim" : "white", children: item.content.substring(0, 40) })
|
|
6165
6163
|
] }, item.id || i)),
|
|
6166
6164
|
agentTodos.items.length > 5 && /* @__PURE__ */ jsxs5(Text6, { color: "dim", children: [
|
|
6167
|
-
"...and ",
|
|
6165
|
+
" ...and ",
|
|
6168
6166
|
agentTodos.items.length - 5,
|
|
6169
6167
|
" more"
|
|
6170
6168
|
] })
|
|
6171
6169
|
] })
|
|
6172
6170
|
] }),
|
|
6173
|
-
/* @__PURE__ */ jsx7(Text6, {
|
|
6171
|
+
/* @__PURE__ */ jsx7(Box6, { marginY: 0, children: /* @__PURE__ */ jsx7(Text6, { color: "dim", children: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500" }) })
|
|
6174
6172
|
] }),
|
|
6175
|
-
/* @__PURE__ */ jsxs5(Box6, {
|
|
6173
|
+
/* @__PURE__ */ jsxs5(Box6, { flexDirection: "column", children: [
|
|
6176
6174
|
/* @__PURE__ */ jsx7(Text6, { bold: true, color: "white", children: "\u{1F916} AGENTS" }),
|
|
6177
6175
|
/* @__PURE__ */ jsx7(Box6, { flexDirection: "column", marginLeft: 1, children: !task.agents || Object.keys(task.agents).length === 0 ? /* @__PURE__ */ jsx7(Text6, { color: "dim", children: "No agent activity yet" }) : Object.entries(task.agents).map(([agent, info]) => /* @__PURE__ */ jsxs5(Box6, { children: [
|
|
6178
6176
|
/* @__PURE__ */ jsxs5(Text6, { children: [
|
|
@@ -6348,17 +6346,17 @@ var init_TasksView = __esm({
|
|
|
6348
6346
|
" tasks"
|
|
6349
6347
|
] })
|
|
6350
6348
|
] }),
|
|
6351
|
-
/* @__PURE__ */ jsx8(Text7, { color: "dim", children: "
|
|
6349
|
+
/* @__PURE__ */ jsx8(Text7, { color: "dim", children: "v0.3.14" })
|
|
6352
6350
|
] }),
|
|
6353
|
-
errorLine && /* @__PURE__ */ jsx8(Box7, { paddingX: 1, children: /* @__PURE__ */ jsxs6(Text7, { color: "red", children: [
|
|
6351
|
+
errorLine && /* @__PURE__ */ jsx8(Box7, { paddingX: 1, marginTop: 1, children: /* @__PURE__ */ jsxs6(Text7, { color: "red", children: [
|
|
6354
6352
|
"\u26A0 ",
|
|
6355
6353
|
errorLine
|
|
6356
6354
|
] }) }),
|
|
6357
|
-
/* @__PURE__ */ jsxs6(Box7, { flexDirection: "row", flexGrow: 1,
|
|
6358
|
-
/* @__PURE__ */ jsx8(Box7, { flexDirection: "column", width: "
|
|
6355
|
+
/* @__PURE__ */ jsxs6(Box7, { flexDirection: "row", flexGrow: 1, children: [
|
|
6356
|
+
/* @__PURE__ */ jsx8(Box7, { flexDirection: "column", width: "50%", borderStyle: "single", borderColor: "dim", borderRight: true, paddingX: 1, children: flattenedRows.length === 0 ? /* @__PURE__ */ jsxs6(Box7, { flexDirection: "column", alignItems: "center", justifyContent: "center", flexGrow: 1, children: [
|
|
6359
6357
|
/* @__PURE__ */ jsx8(Text7, { color: "dim", children: "No projects detected." }),
|
|
6360
6358
|
/* @__PURE__ */ jsx8(Text7, { color: "dim", children: "Run the wizard to set up projects." })
|
|
6361
|
-
] }) : /* @__PURE__ */ jsx8(Box7, { flexDirection: "column", children: flattenedRows.map((row, idx) => {
|
|
6359
|
+
] }) : /* @__PURE__ */ jsx8(Box7, { flexDirection: "column", marginTop: 1, children: flattenedRows.map((row, idx) => {
|
|
6362
6360
|
const k = projectKey(row.project);
|
|
6363
6361
|
const isCurrentProject = row.kind === "project" ? row.isCurrentProject : false;
|
|
6364
6362
|
const isLastTask = row.kind === "task" ? row.isLastTask : false;
|
|
@@ -6376,11 +6374,11 @@ var init_TasksView = __esm({
|
|
|
6376
6374
|
row.kind === "project" ? `p:${k}` : `t:${k}:${row.task.task_slug}`
|
|
6377
6375
|
);
|
|
6378
6376
|
}) }) }),
|
|
6379
|
-
/* @__PURE__ */ jsx8(Box7, { flexDirection: "column", width: "
|
|
6377
|
+
/* @__PURE__ */ jsx8(Box7, { flexDirection: "column", width: "50%", paddingX: 1, marginTop: 1, children: /* @__PURE__ */ jsx8(TaskDetails, { task: selectedTask }) })
|
|
6380
6378
|
] }),
|
|
6381
6379
|
/* @__PURE__ */ jsxs6(Box7, { paddingX: 1, justifyContent: "space-between", borderTop: true, children: [
|
|
6382
|
-
/* @__PURE__ */ jsx8(Text7, { color: "dim", children: "s:Cycle Status R:Refresh
|
|
6383
|
-
/* @__PURE__ */ jsx8(Text7, { color: "dim", children: "
|
|
6380
|
+
/* @__PURE__ */ jsx8(Text7, { color: "dim", children: "\u2191\u2193:Nav Enter:Expand s:Cycle Status R:Refresh" }),
|
|
6381
|
+
/* @__PURE__ */ jsx8(Text7, { color: "dim", children: "Press 'q' to exit" })
|
|
6384
6382
|
] })
|
|
6385
6383
|
] });
|
|
6386
6384
|
};
|