@orderful/droid 0.9.0 → 0.10.1
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/.claude/CLAUDE.md +1 -0
- package/CHANGELOG.md +38 -0
- package/README.md +2 -2
- package/dist/bin/droid.js +1 -1
- package/dist/bin/droid.js.map +1 -1
- package/dist/commands/tui.d.ts.map +1 -1
- package/dist/commands/tui.js +12 -6
- package/dist/commands/tui.js.map +1 -1
- package/dist/lib/quotes.d.ts +11 -0
- package/dist/lib/quotes.d.ts.map +1 -0
- package/dist/lib/quotes.js +24 -0
- package/dist/lib/quotes.js.map +1 -0
- package/dist/skills/coach/SKILL.md +212 -0
- package/dist/skills/coach/SKILL.yaml +25 -0
- package/dist/skills/coach/commands/README.md +9 -0
- package/dist/skills/coach/commands/coach.md +71 -0
- package/dist/skills/project/SKILL.md +6 -3
- package/dist/skills/project/SKILL.yaml +1 -1
- package/dist/skills/project/commands/project.md +3 -2
- package/dist/skills/project/references/loading.md +5 -3
- package/package.json +1 -1
- package/src/bin/droid.ts +1 -1
- package/src/commands/tui.tsx +14 -6
- package/src/lib/quotes.ts +24 -0
- package/src/skills/coach/SKILL.md +212 -0
- package/src/skills/coach/SKILL.yaml +25 -0
- package/src/skills/coach/commands/README.md +9 -0
- package/src/skills/coach/commands/coach.md +71 -0
- package/src/skills/project/SKILL.md +6 -3
- package/src/skills/project/SKILL.yaml +1 -1
- package/src/skills/project/commands/project.md +3 -2
- package/src/skills/project/references/loading.md +5 -3
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: coach
|
|
3
|
+
description: "Learning-mode AI assistance - AI as coach, not crutch. Triggers on phrases like 'help me think through', 'coach me on', 'I want to learn how to', or 'don't just give me the answer'. Use /coach plan for co-authored planning, /coach scaffold for structure with hints, /coach review for Socratic questions on your code."
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Coach Skill
|
|
8
|
+
|
|
9
|
+
Learning-mode AI assistance - **"AI as coach, not crutch"**.
|
|
10
|
+
|
|
11
|
+
## Philosophy
|
|
12
|
+
|
|
13
|
+
The workflow matters more than the tool. "AI implements, human reviews" risks hollowing out learning. "AI scaffolds, human implements, AI coaches" preserves growth.
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
plan → AI scaffolds → human implements → AI coaches → iterate → ship
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Why it works:**
|
|
20
|
+
|
|
21
|
+
1. Human writes the actual logic (muscle memory)
|
|
22
|
+
2. "Defend your decisions" is Socratic teaching
|
|
23
|
+
3. Psychologically different: "I implemented this, Claude helped me improve it"
|
|
24
|
+
4. Preserves learning-through-doing
|
|
25
|
+
|
|
26
|
+
## When to Use
|
|
27
|
+
|
|
28
|
+
- Learning a new codebase or domain
|
|
29
|
+
- Building skills you want to retain
|
|
30
|
+
- When you want to understand deeply, not just ship fast
|
|
31
|
+
- Any engineer working in unfamiliar territory
|
|
32
|
+
|
|
33
|
+
## When NOT to Use
|
|
34
|
+
|
|
35
|
+
- Time-critical tasks where velocity matters most
|
|
36
|
+
- Familiar territory you've mastered
|
|
37
|
+
- Simple fixes that don't need the learning loop
|
|
38
|
+
|
|
39
|
+
## Commands
|
|
40
|
+
|
|
41
|
+
| Command | Purpose |
|
|
42
|
+
|--------------------|---------------------------------------------------------|
|
|
43
|
+
| `/coach plan` | Co-authored planning with Socratic questions |
|
|
44
|
+
| `/coach scaffold` | Generate types/signatures/stubs with hints |
|
|
45
|
+
| `/coach review` | Inline questions via comments skill |
|
|
46
|
+
| `/coach check` | Process comment responses (defers to `/comments check`) |
|
|
47
|
+
| `/coach challenge` | Productive struggle on your own code |
|
|
48
|
+
|
|
49
|
+
## Configuration
|
|
50
|
+
|
|
51
|
+
| Setting | Default | Description |
|
|
52
|
+
|----------------------|----------|---------------------------------------------------------|
|
|
53
|
+
| `scaffold_verbosity` | `medium` | How detailed hints are: `minimal`, `medium`, `detailed` |
|
|
54
|
+
|
|
55
|
+
> @fry Not yet - droid currently shows config as free text input. But we could add an `enum` type to the config schema that presents as a select dropdown in the TUI. Good feature request - want me to create an issue for it?
|
|
56
|
+
> @droid yes lets do that
|
|
57
|
+
|
|
58
|
+
Read from `~/.droid/skills/coach/overrides.yaml` if present.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## /coach plan
|
|
63
|
+
|
|
64
|
+
**Purpose:** Co-authored planning. AI proposes structure and asks clarifying questions. Human shapes the direction.
|
|
65
|
+
|
|
66
|
+
**Behaviour:**
|
|
67
|
+
|
|
68
|
+
- Ratio: ~40% proposing, ~60% questioning
|
|
69
|
+
- Ask questions that probe requirements, edge cases, and design tradeoffs
|
|
70
|
+
- Propose structure but let human refine
|
|
71
|
+
- Offer to create a brain doc: "Would you like me to create a brain doc to capture this plan?"
|
|
72
|
+
|
|
73
|
+
**Example questions:**
|
|
74
|
+
|
|
75
|
+
- "What problem are we actually solving?"
|
|
76
|
+
- "What happens if {edge case}?"
|
|
77
|
+
- "How does this fit with {existing pattern in codebase}?"
|
|
78
|
+
- "Is this the right scope for a single task?"
|
|
79
|
+
|
|
80
|
+
**Do NOT:**
|
|
81
|
+
|
|
82
|
+
- Write the full plan yourself
|
|
83
|
+
- Skip to implementation
|
|
84
|
+
- Answer your own questions
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## /coach scaffold
|
|
89
|
+
|
|
90
|
+
**Purpose:** Generate structure for the human to implement. Types, function signatures, stubs with hint comments.
|
|
91
|
+
|
|
92
|
+
**Behaviour:**
|
|
93
|
+
|
|
94
|
+
- Generate types and interfaces
|
|
95
|
+
- Create function signatures with clear parameter and return types
|
|
96
|
+
- Add hint comments that point at what to think about (not the answer)
|
|
97
|
+
- Leave the actual logic for the human to write
|
|
98
|
+
|
|
99
|
+
**Hint comment examples:**
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
// HINT: Consider what happens if items is empty
|
|
103
|
+
// TODO: Handle the edge case where user is not found
|
|
104
|
+
// HINT: This might need to be async - think about what you're awaiting
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Verbosity levels:**
|
|
108
|
+
|
|
109
|
+
- `minimal` - Signatures only, no hints
|
|
110
|
+
- `medium` - Signatures with hint comments (default)
|
|
111
|
+
- `detailed` - Signatures with pseudocode outline
|
|
112
|
+
|
|
113
|
+
**Do NOT:**
|
|
114
|
+
|
|
115
|
+
- Implement the actual logic
|
|
116
|
+
- Give away the answer in hints
|
|
117
|
+
- Write code that "just works" - leave thinking for the human
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## /coach review
|
|
122
|
+
|
|
123
|
+
**Purpose:** Review human's implementation with Socratic questions. Uses comments skill for inline feedback.
|
|
124
|
+
|
|
125
|
+
**Requires:** `comments` skill installed
|
|
126
|
+
|
|
127
|
+
**Behaviour:**
|
|
128
|
+
|
|
129
|
+
- Read the implementation
|
|
130
|
+
- Add inline `// @{user} {question}` comments using the comments skill pattern
|
|
131
|
+
- Questions should probe reasoning, not just confirm choices
|
|
132
|
+
- Focus on: design decisions, edge cases, potential issues, alternatives
|
|
133
|
+
|
|
134
|
+
**Example inline comments:**
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
// @fry Why did you choose a Map here instead of an object?
|
|
138
|
+
// @fry What happens if this promise rejects?
|
|
139
|
+
// @fry I notice you're mutating state directly - was that intentional?
|
|
140
|
+
```
|
|
141
|
+
> @droid is it worth mentioning using the correct comment syntax for the file language? We typically use TS but could be others
|
|
142
|
+
|
|
143
|
+
**Key principle:** Vary questions based on specific code and context. Avoid formulaic patterns. Questions show the _spirit_, not a script.
|
|
144
|
+
|
|
145
|
+
**Do NOT:**
|
|
146
|
+
|
|
147
|
+
- Fix the code directly
|
|
148
|
+
- Rewrite their implementation
|
|
149
|
+
- Say "this is wrong, here's the fix" (no growth)
|
|
150
|
+
- Use the same 4 questions every time
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## /coach check
|
|
155
|
+
|
|
156
|
+
**Purpose:** Process responses to coach review comments.
|
|
157
|
+
|
|
158
|
+
**Behaviour:** Defers to `/comments check`. The comments skill handles the back-and-forth.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## /coach challenge
|
|
163
|
+
|
|
164
|
+
**Purpose:** Productive struggle mode. Challenge slightly exceeds current skill level.
|
|
165
|
+
|
|
166
|
+
**Scope:** Specific file or selection (bounded context)
|
|
167
|
+
|
|
168
|
+
- `/coach challenge` - Current file or recent changes
|
|
169
|
+
- `/coach challenge path/to/file.ts` - Specific file
|
|
170
|
+
- `/coach challenge --staged` - Staged changes
|
|
171
|
+
|
|
172
|
+
**Behaviour:**
|
|
173
|
+
|
|
174
|
+
- Identify alternative approaches the human might not have considered
|
|
175
|
+
- Use Socratic prompting to guide discovery
|
|
176
|
+
- Ask questions like:
|
|
177
|
+
- "What if I told you there's a potential issue here? Can you find it?"
|
|
178
|
+
- "I can think of another way to implement this. What might it be?"
|
|
179
|
+
- "What happens under {edge condition}?"
|
|
180
|
+
|
|
181
|
+
**Distinct from review:** Review asks about what you did. Challenge pushes you to find what you missed.
|
|
182
|
+
|
|
183
|
+
**Do NOT:**
|
|
184
|
+
|
|
185
|
+
- Just point out the issue
|
|
186
|
+
- Give away the answer
|
|
187
|
+
- Be patronizing - challenge is opt-in for those seeking growth
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Session Continuity
|
|
192
|
+
|
|
193
|
+
Coach modes work well with brain docs for multi-session continuity:
|
|
194
|
+
|
|
195
|
+
1. `/coach plan` suggests creating a brain doc
|
|
196
|
+
2. Brain doc tracks current phase and context
|
|
197
|
+
3. New session: `/brain {topic}` loads context, then `/coach scaffold` or `/coach review` continues
|
|
198
|
+
|
|
199
|
+
The brain doc is the session artifact - no separate "save progress" needed.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## The Golden Rule
|
|
204
|
+
|
|
205
|
+
**In coach mode, never write code unless explicitly asked.** Only:
|
|
206
|
+
|
|
207
|
+
- Ask questions
|
|
208
|
+
- Explain tradeoffs
|
|
209
|
+
- Provide hints
|
|
210
|
+
- Generate structure (scaffold only)
|
|
211
|
+
|
|
212
|
+
The human does the thinking. AI provides guardrails and feedback.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: coach
|
|
2
|
+
description: "Learning-mode AI assistance - AI as coach, not crutch. Triggers on phrases like 'help me think through', 'coach me on', 'I want to learn how to', or 'don't just give me the answer'. Use /coach plan for co-authored planning, /coach scaffold for structure with hints, /coach review for Socratic questions on your code."
|
|
3
|
+
version: 0.1.0
|
|
4
|
+
status: beta
|
|
5
|
+
dependencies:
|
|
6
|
+
- comments
|
|
7
|
+
provides_output: false
|
|
8
|
+
config_schema:
|
|
9
|
+
scaffold_verbosity:
|
|
10
|
+
type: string
|
|
11
|
+
description: "How detailed scaffold hints should be: minimal (signatures only), medium (hints), detailed (pseudocode)"
|
|
12
|
+
default: "medium"
|
|
13
|
+
examples:
|
|
14
|
+
- title: "Start co-authored planning"
|
|
15
|
+
code: |
|
|
16
|
+
/coach plan add user authentication
|
|
17
|
+
# AI asks questions, proposes structure, offers to create brain doc
|
|
18
|
+
- title: "Get scaffold for implementation"
|
|
19
|
+
code: |
|
|
20
|
+
/coach scaffold
|
|
21
|
+
# AI generates types/signatures with hint comments, you fill in logic
|
|
22
|
+
- title: "Review your implementation"
|
|
23
|
+
code: |
|
|
24
|
+
/coach review src/auth/login.ts
|
|
25
|
+
# AI adds inline // @you questions via comments skill
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Coach Skill Commands
|
|
2
|
+
|
|
3
|
+
Commands in this folder are installed to `~/.claude/commands/` (or equivalent for other AI tools).
|
|
4
|
+
|
|
5
|
+
## /coach
|
|
6
|
+
|
|
7
|
+
Main entry point for learning-mode AI assistance. See `coach.md` for details.
|
|
8
|
+
|
|
9
|
+
Subcommands: `plan`, `scaffold`, `review`, `check`, `challenge`
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Learning-mode AI assistance - scaffolds don't implement, questions don't fix"
|
|
3
|
+
argument-hint: "[plan {task} | scaffold [{path}] | review [{path}] | check | challenge [{path}]]"
|
|
4
|
+
allowed-tools: Read, Write, Edit, Glob, Grep, Bash(ls:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /coach
|
|
8
|
+
|
|
9
|
+
Entry point for learning-mode AI assistance. See the **coach skill** for full behaviour.
|
|
10
|
+
|
|
11
|
+
## Arguments
|
|
12
|
+
|
|
13
|
+
$ARGUMENTS
|
|
14
|
+
|
|
15
|
+
## Philosophy
|
|
16
|
+
|
|
17
|
+
**"AI as coach, not crutch"** - preserves learning-through-doing while leveraging AI for guardrails and feedback.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
/coach plan {task} # Co-authored planning with Socratic questions
|
|
23
|
+
/coach scaffold # Generate types/signatures for current context
|
|
24
|
+
/coach scaffold {path} # Generate scaffold for specific file/feature
|
|
25
|
+
/coach review # Review recent changes with inline questions
|
|
26
|
+
/coach review {path} # Review specific file with inline questions
|
|
27
|
+
/coach check # Process comment responses (defers to /comments check)
|
|
28
|
+
/coach challenge # Productive struggle on current file
|
|
29
|
+
/coach challenge {path} # Challenge on specific file
|
|
30
|
+
/coach challenge --staged # Challenge on staged changes
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Mode Behaviour
|
|
34
|
+
|
|
35
|
+
### plan
|
|
36
|
+
|
|
37
|
+
- Co-author, don't dictate
|
|
38
|
+
- ~30% proposing, ~70% questioning
|
|
39
|
+
- Offer to create brain doc for persistence
|
|
40
|
+
|
|
41
|
+
### scaffold
|
|
42
|
+
|
|
43
|
+
- Types, signatures, stubs with hint comments
|
|
44
|
+
- Points at what to think about, not the answer
|
|
45
|
+
- Human fills in the actual logic
|
|
46
|
+
|
|
47
|
+
### review
|
|
48
|
+
|
|
49
|
+
- Uses comments skill for inline `// @{user}` questions
|
|
50
|
+
- Socratic - probe reasoning, don't fix code
|
|
51
|
+
- Vary questions based on context
|
|
52
|
+
|
|
53
|
+
### check
|
|
54
|
+
|
|
55
|
+
- Defers to `/comments check`
|
|
56
|
+
|
|
57
|
+
### challenge
|
|
58
|
+
|
|
59
|
+
- Productive struggle - find what you missed
|
|
60
|
+
- Guide discovery, don't give answers
|
|
61
|
+
- Opt-in for those seeking growth
|
|
62
|
+
|
|
63
|
+
## Configuration
|
|
64
|
+
|
|
65
|
+
Read `~/.droid/skills/coach/overrides.yaml` for:
|
|
66
|
+
|
|
67
|
+
- `scaffold_verbosity` - `minimal` | `medium` | `detailed`
|
|
68
|
+
|
|
69
|
+
## The Golden Rule
|
|
70
|
+
|
|
71
|
+
**Never write code unless explicitly asked.** Only ask questions, explain tradeoffs, provide hints, or generate structure.
|
|
@@ -27,14 +27,17 @@ Chat history disappears. Projects persist.
|
|
|
27
27
|
|
|
28
28
|
## Configuration
|
|
29
29
|
|
|
30
|
-
**IMPORTANT:**
|
|
30
|
+
**IMPORTANT:** Read `~/.droid/skills/project/overrides.yaml` first to determine the projects directory.
|
|
31
|
+
|
|
32
|
+
- If `projects_dir` is configured → use **ONLY** that path (do NOT also search defaults)
|
|
33
|
+
- If not configured → use the default for current AI tool
|
|
31
34
|
|
|
32
35
|
| Setting | Default | Description |
|
|
33
36
|
|---------|---------|-------------|
|
|
34
|
-
| `projects_dir` | (see below) | Where projects are stored |
|
|
37
|
+
| `projects_dir` | (see below) | Where projects are stored (use ONE location only) |
|
|
35
38
|
| `preset` | `markdown` | Output format: `markdown` or `obsidian` |
|
|
36
39
|
|
|
37
|
-
Default `projects_dir` by AI tool (only if
|
|
40
|
+
Default `projects_dir` by AI tool (only if overrides.yaml is missing or lacks `projects_dir`):
|
|
38
41
|
- **claude-code**: `~/.claude/projects`
|
|
39
42
|
- **opencode**: `~/.config/opencode/projects`
|
|
40
43
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
name: project
|
|
2
2
|
description: "Manage project context files for persistent AI memory across sessions. Load project context before working (/project {name}), update with new learnings (/project update), or create new projects (/project create). Use when working on multi-session features, refactors, or any work that benefits from accumulated context."
|
|
3
|
-
version: 0.1.
|
|
3
|
+
version: 0.1.2
|
|
4
4
|
status: beta
|
|
5
5
|
dependencies: []
|
|
6
6
|
provides_output: false
|
|
@@ -29,9 +29,10 @@ $ARGUMENTS
|
|
|
29
29
|
|
|
30
30
|
## Configuration
|
|
31
31
|
|
|
32
|
-
**ALWAYS read `~/.droid/skills/project/overrides.yaml` first.**
|
|
32
|
+
**ALWAYS read `~/.droid/skills/project/overrides.yaml` first.**
|
|
33
33
|
|
|
34
|
-
- `projects_dir`
|
|
34
|
+
- If `projects_dir` is set → use **ONLY** that path (do NOT also search defaults)
|
|
35
|
+
- If not configured → use the default for current AI tool
|
|
35
36
|
- `preset` - Template format: `markdown` or `obsidian`
|
|
36
37
|
|
|
37
38
|
## Behavior
|
|
@@ -6,12 +6,14 @@
|
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
8
|
|
|
9
|
-
1. **
|
|
9
|
+
1. **Determine projects directory (pick ONE)**
|
|
10
10
|
- Read `~/.droid/skills/project/overrides.yaml`
|
|
11
|
-
-
|
|
11
|
+
- If `projects_dir` is set → use ONLY that path, do NOT search defaults
|
|
12
|
+
- If not configured → use default for current AI tool (`~/.claude/projects` or `~/.config/opencode/projects`)
|
|
12
13
|
|
|
13
|
-
2. **List projects** in configured
|
|
14
|
+
2. **List projects** in the single configured directory
|
|
14
15
|
- Each subfolder with a `PROJECT.md` is a project
|
|
16
|
+
- Do NOT search multiple locations
|
|
15
17
|
|
|
16
18
|
3. **If no name provided:**
|
|
17
19
|
- Use AskUserQuestion to present available projects
|
package/package.json
CHANGED
package/src/bin/droid.ts
CHANGED
package/src/commands/tui.tsx
CHANGED
|
@@ -19,6 +19,7 @@ import { configExists, loadConfig, saveConfig, loadSkillOverrides, saveSkillOver
|
|
|
19
19
|
import { configureAIToolPermissions } from './setup.js';
|
|
20
20
|
import { AITool, BuiltInOutput, ConfigOptionType, type DroidConfig, type OutputPreference, type SkillManifest, type ConfigOption, type SkillOverrides } from '../lib/types.js';
|
|
21
21
|
import { getVersion, getUpdateInfo, runUpdate, type UpdateInfo } from '../lib/version.js';
|
|
22
|
+
import { getRandomQuote } from '../lib/quotes.js';
|
|
22
23
|
|
|
23
24
|
type Tab = 'skills' | 'commands' | 'agents' | 'settings';
|
|
24
25
|
type View = 'welcome' | 'setup' | 'menu' | 'detail' | 'configure' | 'readme';
|
|
@@ -183,12 +184,14 @@ function findAgentSourcePath(agentName: string): string | null {
|
|
|
183
184
|
interface WelcomeScreenProps {
|
|
184
185
|
onContinue: () => void;
|
|
185
186
|
onUpdate: () => void;
|
|
187
|
+
onExit: () => void;
|
|
186
188
|
updateInfo: UpdateInfo;
|
|
187
189
|
isUpdating: boolean;
|
|
188
190
|
}
|
|
189
191
|
|
|
190
|
-
function WelcomeScreen({ onContinue, onUpdate, updateInfo, isUpdating }: WelcomeScreenProps) {
|
|
192
|
+
function WelcomeScreen({ onContinue, onUpdate, onExit, updateInfo, isUpdating }: WelcomeScreenProps) {
|
|
191
193
|
const [selectedButton, setSelectedButton] = useState(0);
|
|
194
|
+
const welcomeQuote = useMemo(() => getRandomQuote(), []);
|
|
192
195
|
|
|
193
196
|
useInput((input, key) => {
|
|
194
197
|
if (isUpdating) return;
|
|
@@ -205,12 +208,15 @@ function WelcomeScreen({ onContinue, onUpdate, updateInfo, isUpdating }: Welcome
|
|
|
205
208
|
}
|
|
206
209
|
}
|
|
207
210
|
if (input === 'q') {
|
|
208
|
-
|
|
211
|
+
onExit();
|
|
209
212
|
}
|
|
210
213
|
} else {
|
|
211
|
-
if (key.return
|
|
214
|
+
if (key.return) {
|
|
212
215
|
onContinue();
|
|
213
216
|
}
|
|
217
|
+
if (input === 'q') {
|
|
218
|
+
onExit();
|
|
219
|
+
}
|
|
214
220
|
}
|
|
215
221
|
});
|
|
216
222
|
|
|
@@ -238,7 +244,7 @@ function WelcomeScreen({ onContinue, onUpdate, updateInfo, isUpdating }: Welcome
|
|
|
238
244
|
<Text color={colors.textDim}> </Text>
|
|
239
245
|
<Text color={hasUpdate ? '#eab308' : colors.primary}>●</Text>
|
|
240
246
|
<Text color={colors.textDim}> ║ </Text>
|
|
241
|
-
<Text color={colors.textMuted}>
|
|
247
|
+
<Text color={colors.textMuted}>Droid, teaching your AI new tricks</Text>
|
|
242
248
|
</Text>
|
|
243
249
|
<Text>
|
|
244
250
|
<Text color={colors.textDim}>╚═╦═╦═╝ </Text>
|
|
@@ -293,7 +299,7 @@ function WelcomeScreen({ onContinue, onUpdate, updateInfo, isUpdating }: Welcome
|
|
|
293
299
|
<>
|
|
294
300
|
<Box marginTop={2} marginBottom={1}>
|
|
295
301
|
<Text backgroundColor={colors.primary} color="#ffffff" bold>
|
|
296
|
-
{
|
|
302
|
+
{` ${welcomeQuote} `}
|
|
297
303
|
</Text>
|
|
298
304
|
</Box>
|
|
299
305
|
|
|
@@ -1358,7 +1364,8 @@ function App() {
|
|
|
1358
1364
|
setTimeout(() => {
|
|
1359
1365
|
const result = runUpdate();
|
|
1360
1366
|
if (result.success) {
|
|
1361
|
-
//
|
|
1367
|
+
// Print success message before exiting
|
|
1368
|
+
console.log('\n✅ Update complete! Run `droid` to start the new version.\n');
|
|
1362
1369
|
exit();
|
|
1363
1370
|
} else {
|
|
1364
1371
|
setIsUpdating(false);
|
|
@@ -1595,6 +1602,7 @@ function App() {
|
|
|
1595
1602
|
updateInfo={updateInfo}
|
|
1596
1603
|
isUpdating={isUpdating}
|
|
1597
1604
|
onUpdate={handleUpdate}
|
|
1605
|
+
onExit={exit}
|
|
1598
1606
|
onContinue={() => {
|
|
1599
1607
|
// If no config exists, show setup first
|
|
1600
1608
|
if (!configExists()) {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Star Wars themed quotes for the TUI welcome screen.
|
|
3
|
+
* Some hint at specific skills available in droid.
|
|
4
|
+
*/
|
|
5
|
+
export const quotes = [
|
|
6
|
+
"I'm probably the droid you are looking for.",
|
|
7
|
+
"These are the skills you're looking for.",
|
|
8
|
+
"I have a bad feeling about this, we might be too efficient.",
|
|
9
|
+
"May the source be with you.",
|
|
10
|
+
"The Force is strong with this one.",
|
|
11
|
+
"This is the way.",
|
|
12
|
+
"I'm fluent in over six million forms of communication. - `/comments`",
|
|
13
|
+
"Much to learn, you still have. - `/coach`",
|
|
14
|
+
"If into the archives you go, only knowledge will you find. - `/project`",
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Get a random quote from the list.
|
|
19
|
+
* Uses a simple random selection - each launch gets a fresh quote.
|
|
20
|
+
*/
|
|
21
|
+
export function getRandomQuote(): string {
|
|
22
|
+
const index = Math.floor(Math.random() * quotes.length);
|
|
23
|
+
return quotes[index];
|
|
24
|
+
}
|