@orderful/droid 0.26.0 → 0.27.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-plugin/marketplace.json +7 -7
- package/AGENTS.md +36 -32
- package/CHANGELOG.md +46 -0
- package/dist/bin/droid.js +140 -24
- package/dist/index.js +97 -25
- package/dist/lib/migrations.d.ts +8 -0
- package/dist/lib/migrations.d.ts.map +1 -1
- package/dist/lib/skills.d.ts.map +1 -1
- package/dist/lib/tools.d.ts.map +1 -1
- package/dist/lib/types.d.ts +10 -2
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/tools/brain/.claude-plugin/plugin.json +1 -1
- package/dist/tools/brain/TOOL.yaml +7 -5
- package/dist/tools/brain/commands/brain.md +17 -49
- package/dist/tools/brain/commands/scratchpad.md +13 -50
- package/{src/tools/brain/skills/droid-brain → dist/tools/brain/skills/brain}/SKILL.md +5 -5
- package/dist/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/SKILL.md +8 -8
- package/dist/tools/coach/.claude-plugin/plugin.json +1 -1
- package/dist/tools/coach/TOOL.yaml +4 -3
- package/dist/tools/coach/commands/coach.md +14 -54
- package/{src/tools/coach/skills/droid-coach → dist/tools/coach/skills/coach}/SKILL.md +4 -3
- package/dist/tools/code-review/.claude-plugin/plugin.json +1 -1
- package/dist/tools/code-review/TOOL.yaml +4 -3
- package/dist/tools/code-review/commands/code-review.md +18 -102
- package/dist/tools/code-review/skills/code-review/SKILL.md +154 -0
- package/dist/tools/codex/.claude-plugin/plugin.json +1 -1
- package/dist/tools/codex/TOOL.yaml +4 -3
- package/dist/tools/codex/commands/codex.md +18 -65
- package/dist/tools/codex/skills/{droid-codex → codex}/SKILL.md +64 -45
- package/{src/tools/codex/skills/droid-codex → dist/tools/codex/skills/codex}/references/loading.md +94 -55
- package/dist/tools/codex/skills/codex/scripts/git-finish-write.d.ts.map +1 -0
- package/dist/tools/codex/skills/codex/scripts/git-preamble.d.ts.map +1 -0
- package/dist/tools/codex/skills/codex/scripts/git-start-write.d.ts.map +1 -0
- package/dist/tools/comments/.claude-plugin/plugin.json +1 -1
- package/dist/tools/comments/TOOL.yaml +4 -3
- package/dist/tools/comments/commands/comments.md +12 -14
- package/{src/tools/comments/skills/droid-comments → dist/tools/comments/skills/comments}/SKILL.md +3 -1
- package/dist/tools/project/.claude-plugin/plugin.json +1 -1
- package/dist/tools/project/TOOL.yaml +4 -3
- package/dist/tools/project/commands/project.md +12 -27
- package/dist/tools/project/skills/{droid-project → project}/SKILL.md +12 -11
- package/dist/tools/tech-design/.claude-plugin/plugin.json +1 -1
- package/dist/tools/tech-design/TOOL.yaml +4 -3
- package/dist/tools/tech-design/commands/tech-design.md +18 -80
- package/{src/tools/tech-design/skills/droid-tech-design → dist/tools/tech-design/skills/tech-design}/SKILL.md +1 -1
- package/package.json +1 -1
- package/src/commands/tui/components/Badge.test.tsx +10 -4
- package/src/commands/tui.tsx +4 -4
- package/src/lib/migrations.ts +154 -4
- package/src/lib/skills.test.ts +199 -74
- package/src/lib/skills.ts +55 -54
- package/src/lib/tools.ts +19 -12
- package/src/lib/types.ts +20 -5
- package/src/tools/brain/.claude-plugin/plugin.json +1 -1
- package/src/tools/brain/TOOL.yaml +7 -5
- package/src/tools/brain/commands/brain.md +17 -49
- package/src/tools/brain/commands/scratchpad.md +13 -50
- package/{dist/tools/brain/skills/droid-brain → src/tools/brain/skills/brain}/SKILL.md +5 -5
- package/src/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/SKILL.md +8 -8
- package/src/tools/coach/.claude-plugin/plugin.json +1 -1
- package/src/tools/coach/TOOL.yaml +4 -3
- package/src/tools/coach/commands/coach.md +14 -54
- package/{dist/tools/coach/skills/droid-coach → src/tools/coach/skills/coach}/SKILL.md +4 -3
- package/src/tools/code-review/.claude-plugin/plugin.json +1 -1
- package/src/tools/code-review/TOOL.yaml +4 -3
- package/src/tools/code-review/commands/code-review.md +18 -102
- package/src/tools/code-review/skills/code-review/SKILL.md +154 -0
- package/src/tools/codex/.claude-plugin/plugin.json +1 -1
- package/src/tools/codex/TOOL.yaml +4 -3
- package/src/tools/codex/commands/codex.md +18 -65
- package/src/tools/codex/skills/{droid-codex → codex}/SKILL.md +64 -45
- package/{dist/tools/codex/skills/droid-codex → src/tools/codex/skills/codex}/references/loading.md +94 -55
- package/src/tools/comments/.claude-plugin/plugin.json +1 -1
- package/src/tools/comments/TOOL.yaml +4 -3
- package/src/tools/comments/commands/comments.md +12 -14
- package/{dist/tools/comments/skills/droid-comments → src/tools/comments/skills/comments}/SKILL.md +3 -1
- package/src/tools/project/.claude-plugin/plugin.json +1 -1
- package/src/tools/project/TOOL.yaml +4 -3
- package/src/tools/project/commands/project.md +12 -27
- package/src/tools/project/skills/{droid-project → project}/SKILL.md +12 -11
- package/src/tools/tech-design/.claude-plugin/plugin.json +1 -1
- package/src/tools/tech-design/TOOL.yaml +4 -3
- package/src/tools/tech-design/commands/tech-design.md +18 -80
- package/{dist/tools/tech-design/skills/droid-tech-design → src/tools/tech-design/skills/tech-design}/SKILL.md +1 -1
- package/dist/tools/code-review/skills/droid-code-review/SKILL.md +0 -55
- package/dist/tools/codex/skills/droid-codex/scripts/git-finish-write.d.ts.map +0 -1
- package/dist/tools/codex/skills/droid-codex/scripts/git-preamble.d.ts.map +0 -1
- package/dist/tools/codex/skills/droid-codex/scripts/git-start-write.d.ts.map +0 -1
- package/src/tools/code-review/skills/droid-code-review/SKILL.md +0 -55
- /package/dist/tools/brain/skills/{droid-brain → brain}/references/metadata.md +0 -0
- /package/dist/tools/brain/skills/{droid-brain → brain}/references/naming.md +0 -0
- /package/dist/tools/brain/skills/{droid-brain → brain}/references/templates.md +0 -0
- /package/dist/tools/brain/skills/{droid-brain → brain}/references/workflows.md +0 -0
- /package/dist/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/references/templates.md +0 -0
- /package/dist/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/references/workflows.md +0 -0
- /package/dist/tools/codex/skills/{droid-codex → codex}/references/creating.md +0 -0
- /package/dist/tools/codex/skills/{droid-codex → codex}/references/decisions.md +0 -0
- /package/dist/tools/codex/skills/{droid-codex → codex}/references/topics.md +0 -0
- /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-finish-write.d.ts +0 -0
- /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-finish-write.ts +0 -0
- /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-preamble.d.ts +0 -0
- /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-preamble.ts +0 -0
- /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-scripts.test.ts +0 -0
- /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-start-write.d.ts +0 -0
- /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-start-write.ts +0 -0
- /package/dist/tools/project/skills/{droid-project → project}/references/changelog.md +0 -0
- /package/dist/tools/project/skills/{droid-project → project}/references/creating.md +0 -0
- /package/dist/tools/project/skills/{droid-project → project}/references/loading.md +0 -0
- /package/dist/tools/project/skills/{droid-project → project}/references/templates.md +0 -0
- /package/dist/tools/project/skills/{droid-project → project}/references/updating.md +0 -0
- /package/dist/tools/project/skills/{droid-project → project}/references/versioning.md +0 -0
- /package/dist/tools/tech-design/skills/{droid-tech-design → tech-design}/references/draft.md +0 -0
- /package/dist/tools/tech-design/skills/{droid-tech-design → tech-design}/references/gaps.md +0 -0
- /package/dist/tools/tech-design/skills/{droid-tech-design → tech-design}/references/publish.md +0 -0
- /package/dist/tools/tech-design/skills/{droid-tech-design → tech-design}/references/research-doc-template.md +0 -0
- /package/dist/tools/tech-design/skills/{droid-tech-design → tech-design}/references/rollup-template.md +0 -0
- /package/dist/tools/tech-design/skills/{droid-tech-design → tech-design}/references/start.md +0 -0
- /package/dist/tools/tech-design/skills/{droid-tech-design → tech-design}/references/think.md +0 -0
- /package/dist/tools/tech-design/skills/{droid-tech-design → tech-design}/references/thought-doc-template.md +0 -0
- /package/src/tools/brain/skills/{droid-brain → brain}/references/metadata.md +0 -0
- /package/src/tools/brain/skills/{droid-brain → brain}/references/naming.md +0 -0
- /package/src/tools/brain/skills/{droid-brain → brain}/references/templates.md +0 -0
- /package/src/tools/brain/skills/{droid-brain → brain}/references/workflows.md +0 -0
- /package/src/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/references/templates.md +0 -0
- /package/src/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/references/workflows.md +0 -0
- /package/src/tools/codex/skills/{droid-codex → codex}/references/creating.md +0 -0
- /package/src/tools/codex/skills/{droid-codex → codex}/references/decisions.md +0 -0
- /package/src/tools/codex/skills/{droid-codex → codex}/references/topics.md +0 -0
- /package/src/tools/codex/skills/{droid-codex → codex}/scripts/git-finish-write.ts +0 -0
- /package/src/tools/codex/skills/{droid-codex → codex}/scripts/git-preamble.ts +0 -0
- /package/src/tools/codex/skills/{droid-codex → codex}/scripts/git-scripts.test.ts +0 -0
- /package/src/tools/codex/skills/{droid-codex → codex}/scripts/git-start-write.ts +0 -0
- /package/src/tools/project/skills/{droid-project → project}/references/changelog.md +0 -0
- /package/src/tools/project/skills/{droid-project → project}/references/creating.md +0 -0
- /package/src/tools/project/skills/{droid-project → project}/references/loading.md +0 -0
- /package/src/tools/project/skills/{droid-project → project}/references/templates.md +0 -0
- /package/src/tools/project/skills/{droid-project → project}/references/updating.md +0 -0
- /package/src/tools/project/skills/{droid-project → project}/references/versioning.md +0 -0
- /package/src/tools/tech-design/skills/{droid-tech-design → tech-design}/references/draft.md +0 -0
- /package/src/tools/tech-design/skills/{droid-tech-design → tech-design}/references/gaps.md +0 -0
- /package/src/tools/tech-design/skills/{droid-tech-design → tech-design}/references/publish.md +0 -0
- /package/src/tools/tech-design/skills/{droid-tech-design → tech-design}/references/research-doc-template.md +0 -0
- /package/src/tools/tech-design/skills/{droid-tech-design → tech-design}/references/rollup-template.md +0 -0
- /package/src/tools/tech-design/skills/{droid-tech-design → tech-design}/references/start.md +0 -0
- /package/src/tools/tech-design/skills/{droid-tech-design → tech-design}/references/think.md +0 -0
- /package/src/tools/tech-design/skills/{droid-tech-design → tech-design}/references/thought-doc-template.md +0 -0
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
{
|
|
23
23
|
"name": "droid-brain",
|
|
24
24
|
"description": "Your scratchpad (or brain) - a collaborative space for planning and research. Create docs with /brain plan, /brain research, or /brain review. Use @mentions for async discussion. Docs persist across sessions.",
|
|
25
|
-
"version": "0.
|
|
25
|
+
"version": "0.3.0",
|
|
26
26
|
"source": {
|
|
27
27
|
"source": "github",
|
|
28
28
|
"repo": "orderful/droid",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
{
|
|
36
36
|
"name": "droid-coach",
|
|
37
37
|
"description": "Learning-mode AI assistance - AI as coach, not crutch. Use /coach plan for co-authored planning, /coach scaffold for structure with hints, /coach review for Socratic questions.",
|
|
38
|
-
"version": "0.
|
|
38
|
+
"version": "0.2.0",
|
|
39
39
|
"source": {
|
|
40
40
|
"source": "github",
|
|
41
41
|
"repo": "orderful/droid",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
{
|
|
49
49
|
"name": "droid-code-review",
|
|
50
50
|
"description": "Comprehensive code review using specialized agents. Reviews PRs, staged changes, branches, or specific files with confidence scoring.",
|
|
51
|
-
"version": "0.
|
|
51
|
+
"version": "0.2.0",
|
|
52
52
|
"source": {
|
|
53
53
|
"source": "github",
|
|
54
54
|
"repo": "orderful/droid",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
{
|
|
62
62
|
"name": "droid-codex",
|
|
63
63
|
"description": "Shared organizational knowledge - PRDs, tech designs, domains, proposals, patterns, and explored topics. Use when loading project context, searching codex, capturing decisions, or creating new entries.",
|
|
64
|
-
"version": "0.1.
|
|
64
|
+
"version": "0.1.6",
|
|
65
65
|
"source": {
|
|
66
66
|
"source": "github",
|
|
67
67
|
"repo": "orderful/droid",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
{
|
|
75
75
|
"name": "droid-comments",
|
|
76
76
|
"description": "Enable inline conversations using @droid/@user markers. Tag @droid to ask the AI, AI responds with @{your-name}. Use /comments check to address markers, /comments cleanup to remove resolved threads. Ideal for code review notes and async collaboration.",
|
|
77
|
-
"version": "0.
|
|
77
|
+
"version": "0.3.0",
|
|
78
78
|
"source": {
|
|
79
79
|
"source": "github",
|
|
80
80
|
"repo": "orderful/droid",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
{
|
|
88
88
|
"name": "droid-project",
|
|
89
89
|
"description": "Manage project context files for persistent AI memory across sessions. Load, update, or create project context before working on multi-session features.",
|
|
90
|
-
"version": "0.
|
|
90
|
+
"version": "0.3.0",
|
|
91
91
|
"source": {
|
|
92
92
|
"source": "github",
|
|
93
93
|
"repo": "orderful/droid",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
{
|
|
101
101
|
"name": "droid-tech-design",
|
|
102
102
|
"description": "Technical design authoring tool for engineers. Create structured tech design docs with /tech-design start, iterate in brain, publish to codex. Three-document approach: research doc (codebase discoveries) + thought doc (design workspace) + roll-up (clean summary for review).",
|
|
103
|
-
"version": "0.
|
|
103
|
+
"version": "0.2.0",
|
|
104
104
|
"source": {
|
|
105
105
|
"source": "github",
|
|
106
106
|
"repo": "orderful/droid",
|
package/AGENTS.md
CHANGED
|
@@ -50,12 +50,13 @@ src/
|
|
|
50
50
|
|
|
51
51
|
We use **two** terminal UI libraries for different purposes:
|
|
52
52
|
|
|
53
|
-
| Library
|
|
54
|
-
|
|
55
|
-
| **Ink**
|
|
53
|
+
| Library | Purpose | Used In |
|
|
54
|
+
| ------------ | ------------------------------------------- | ------------------------------------------ |
|
|
55
|
+
| **Ink** | Full React-based TUI dashboard | `tui.tsx`, `tui/components/`, `tui/views/` |
|
|
56
56
|
| **Inquirer** | Simple CLI prompts (select, confirm, input) | `skills.ts`, `setup.ts`, `skill-config.ts` |
|
|
57
57
|
|
|
58
58
|
**Why both?**
|
|
59
|
+
|
|
59
60
|
- **Ink** is for the interactive dashboard—stateful, component-based, keyboard navigation
|
|
60
61
|
- **Inquirer** is for quick sequential prompts ("Which tool?", "Configure now? y/n")
|
|
61
62
|
|
|
@@ -78,13 +79,12 @@ Don't consolidate them. Using Ink for simple prompts would be overkill.
|
|
|
78
79
|
|
|
79
80
|
Things that will bite you if you don't know:
|
|
80
81
|
|
|
81
|
-
| Gotcha
|
|
82
|
-
|
|
83
|
-
| Single-line YAML descriptions
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
| Changeset package name | npm package is scoped | Use `"@orderful/droid"` not `"droid"` in changesets |
|
|
82
|
+
| Gotcha | Why | What to do |
|
|
83
|
+
| -------------------------------------------- | --------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
|
84
|
+
| Single-line YAML descriptions | Claude Code's frontmatter parser doesn't handle multiline YAML (`>-`) | Use single-line quoted strings in frontmatter |
|
|
85
|
+
| Bump tool version when skill content changes | Users won't get updates otherwise | Patch bump the tool's TOOL.yaml version |
|
|
86
|
+
| Config-first in commands | User overrides must take precedence | Always read `~/.droid/skills/{skill}/overrides.yaml` before using defaults |
|
|
87
|
+
| Changeset package name | npm package is scoped | Use `"@orderful/droid"` not `"droid"` in changesets |
|
|
88
88
|
|
|
89
89
|
## Testing
|
|
90
90
|
|
|
@@ -96,6 +96,7 @@ bun run screenshot # On-demand TUI screenshot for visual verification
|
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
**When to run what:**
|
|
99
|
+
|
|
99
100
|
- Changed core logic (`lib/`) → `bun test src/`
|
|
100
101
|
- Changed TUI components → `bun run test:tui`
|
|
101
102
|
- Visual changes you want to verify → `bun run screenshot`
|
|
@@ -107,7 +108,7 @@ bun run screenshot # On-demand TUI screenshot for visual verification
|
|
|
107
108
|
2. Add `SKILL.md` with frontmatter:
|
|
108
109
|
```yaml
|
|
109
110
|
---
|
|
110
|
-
name:
|
|
111
|
+
name: { skill }
|
|
111
112
|
description: "{What it does}. Use when {scenarios}. User prompts like {examples}."
|
|
112
113
|
globs: []
|
|
113
114
|
alwaysApply: false
|
|
@@ -124,16 +125,16 @@ bun run screenshot # On-demand TUI screenshot for visual verification
|
|
|
124
125
|
|
|
125
126
|
Each tool has a specific domain. Know where your feature belongs:
|
|
126
127
|
|
|
127
|
-
| Tool
|
|
128
|
-
|
|
129
|
-
| `brain`
|
|
130
|
-
| `coach`
|
|
131
|
-
| `code-review` | PR and code review
|
|
132
|
-
| `codex`
|
|
133
|
-
| `comments`
|
|
134
|
-
| `droid`
|
|
135
|
-
| `project`
|
|
136
|
-
| `tech-design` | Tech design authoring
|
|
128
|
+
| Tool | Purpose | Add skills here when... |
|
|
129
|
+
| ------------- | --------------------------------------- | ----------------------------------------------- |
|
|
130
|
+
| `brain` | Personal scratchpad, planning docs | Working with brain vault, planning, research |
|
|
131
|
+
| `coach` | Learning-mode assistance | Educational interactions, scaffolding |
|
|
132
|
+
| `code-review` | PR and code review | Review-related features |
|
|
133
|
+
| `codex` | Shared org knowledge (PRDs, designs) | Codex content management, org context |
|
|
134
|
+
| `comments` | Inline @mentions in code | Comment handling, async collaboration |
|
|
135
|
+
| `droid` | **Meta-tool only** - updates, discovery | NEVER add skills here - create new tool instead |
|
|
136
|
+
| `project` | Personal project context | Project file management |
|
|
137
|
+
| `tech-design` | Tech design authoring | Tech design workflows |
|
|
137
138
|
|
|
138
139
|
> **Important:** The `droid` tool is special. It only handles update awareness and tool discovery.
|
|
139
140
|
> If you're building a full-featured capability (like tech-design, codex, brain), create a **new tool**.
|
|
@@ -141,6 +142,7 @@ Each tool has a specific domain. Know where your feature belongs:
|
|
|
141
142
|
## Adding a New Tool
|
|
142
143
|
|
|
143
144
|
Create a new tool when the feature:
|
|
145
|
+
|
|
144
146
|
- Has its own user-facing identity (e.g., `/tech-design`, `/deploy`)
|
|
145
147
|
- Doesn't naturally belong to an existing tool's domain
|
|
146
148
|
- Needs its own versioning/release cycle
|
|
@@ -150,24 +152,26 @@ Create a new tool when the feature:
|
|
|
150
152
|
|
|
151
153
|
1. Create directory: `src/tools/{tool}/`
|
|
152
154
|
2. Add `TOOL.yaml`:
|
|
155
|
+
|
|
153
156
|
```yaml
|
|
154
|
-
name: {tool}
|
|
157
|
+
name: { tool }
|
|
155
158
|
description: "What this tool does"
|
|
156
159
|
version: 0.1.0
|
|
157
160
|
status: beta
|
|
158
161
|
|
|
159
162
|
includes:
|
|
160
163
|
skills:
|
|
161
|
-
- name:
|
|
164
|
+
- name: { tool }
|
|
162
165
|
required: true
|
|
163
166
|
commands:
|
|
164
|
-
- name: {tool}
|
|
167
|
+
- name: { tool }
|
|
165
168
|
required: false
|
|
166
169
|
agents: []
|
|
167
170
|
|
|
168
171
|
dependencies: []
|
|
169
172
|
```
|
|
170
|
-
|
|
173
|
+
|
|
174
|
+
3. Create skill: `src/tools/{tool}/skills/{tool}/SKILL.md`
|
|
171
175
|
4. Create command: `src/tools/{tool}/commands/{tool}.md`
|
|
172
176
|
5. Add changeset: `.changeset/{tool}-initial.md`
|
|
173
177
|
|
|
@@ -177,10 +181,10 @@ Create a new tool when the feature:
|
|
|
177
181
|
|
|
178
182
|
Decisions that affect how you work:
|
|
179
183
|
|
|
180
|
-
| Decision
|
|
181
|
-
|
|
182
|
-
| "Scripts" not "tools" for skill CLIs
|
|
183
|
-
| Parallel skills (`{skill}-next`) for risky refactors | Dogfood new implementation alongside original, swap when confident
|
|
184
|
-
| Each .md owns its metadata
|
|
185
|
-
| Ink + Inquirer (not consolidated)
|
|
186
|
-
| Collision detection over prefixing
|
|
184
|
+
| Decision | Rationale |
|
|
185
|
+
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------- |
|
|
186
|
+
| "Scripts" not "tools" for skill CLIs | Avoids terminology collision—droid "tools" are packages, skill "scripts" are executables |
|
|
187
|
+
| Parallel skills (`{skill}-next`) for risky refactors | Dogfood new implementation alongside original, swap when confident |
|
|
188
|
+
| Each .md owns its metadata | Single source of truth per artifact, contributors can bring existing skills as-is |
|
|
189
|
+
| Ink + Inquirer (not consolidated) | Ink for stateful TUI, Inquirer for simple prompts—right tool for each job |
|
|
190
|
+
| Collision detection over prefixing | Detect conflicts at install time rather than polluting command names with prefixes |
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
# @orderful/droid
|
|
2
2
|
|
|
3
|
+
## 0.27.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#148](https://github.com/Orderful/droid/pull/148) [`7b030da`](https://github.com/Orderful/droid/commit/7b030da044551b66674f06b0fb8e31257b5a1fd4) Thanks [@frytyler](https://github.com/frytyler)! - Fix installation detection after commands-skills merge
|
|
8
|
+
|
|
9
|
+
**Bug fix:**
|
|
10
|
+
- Add package migration (v0.27.0) to update config entries from `droid-*` to unprefixed names
|
|
11
|
+
- Fixes TUI showing tools as not installed after upgrade from v0.26.0
|
|
12
|
+
- Migration handles both Claude Code and OpenCode platforms automatically
|
|
13
|
+
- Runs seamlessly on TUI startup - no user action required
|
|
14
|
+
|
|
15
|
+
**Technical details:**
|
|
16
|
+
- Config entries renamed: `droid-brain` → `brain`, `droid-codex` → `codex`, etc.
|
|
17
|
+
- Special `droid` tool preserved (not renamed)
|
|
18
|
+
- Platform switching continues to work correctly after migration
|
|
19
|
+
|
|
20
|
+
## 0.27.0
|
|
21
|
+
|
|
22
|
+
### Minor Changes
|
|
23
|
+
|
|
24
|
+
- [#145](https://github.com/Orderful/droid/pull/145) [`8bce17d`](https://github.com/Orderful/droid/commit/8bce17d98824e796573db1f8a640a8af786fc2d1) Thanks [@frytyler](https://github.com/frytyler)! - Remove droid- prefix from skills and fix command argument passing
|
|
25
|
+
|
|
26
|
+
**Breaking internal changes:**
|
|
27
|
+
- Skills renamed: `droid-brain` → `brain`, `droid-comments` → `comments`, etc.
|
|
28
|
+
- All skill directories now use unprefixed names
|
|
29
|
+
- Automatic cleanup removes old `droid-*` directories on upgrade
|
|
30
|
+
|
|
31
|
+
**Command improvements:**
|
|
32
|
+
- Commands now use explicit instruction pattern for better argument passing in OpenCode
|
|
33
|
+
- Each command file includes examples and quick reference
|
|
34
|
+
- Alias commands (e.g., `/scratchpad`) properly documented as aliases
|
|
35
|
+
|
|
36
|
+
**Platform compatibility:**
|
|
37
|
+
- OpenCode: Receives all commands (for autocomplete)
|
|
38
|
+
- Claude Code: Receives only alias commands (relies on unified skills/commands)
|
|
39
|
+
- Both platforms get unprefixed skill names
|
|
40
|
+
|
|
41
|
+
Tools updated: brain, coach, code-review, codex, comments, project, tech-design
|
|
42
|
+
|
|
43
|
+
### Patch Changes
|
|
44
|
+
|
|
45
|
+
- [#146](https://github.com/Orderful/droid/pull/146) [`2c87b87`](https://github.com/Orderful/droid/commit/2c87b874a38b0f52d1edf77b2995e565f155f251) Thanks [@frytyler](https://github.com/frytyler)! - fix(codex): make CONTEXT.md generation synchronous by default with optional async
|
|
46
|
+
|
|
47
|
+
Changed auto-generation from async-only (with background agents) to flexible approach where LLM can choose synchronous (works everywhere) or asynchronous (Claude Code only). This fixes the issue where CONTEXT.md files were never being generated because background agents weren't working reliably.
|
|
48
|
+
|
|
3
49
|
## 0.26.0
|
|
4
50
|
|
|
5
51
|
### Minor Changes
|
package/dist/bin/droid.js
CHANGED
|
@@ -392,7 +392,9 @@ function getToolsWithUpdates() {
|
|
|
392
392
|
const toolsWithUpdates = [];
|
|
393
393
|
for (const tool of bundledTools) {
|
|
394
394
|
const requiredSkills = tool.includes.skills.filter((s) => s.required).map((s) => s.name);
|
|
395
|
-
const isInstalled = requiredSkills.some(
|
|
395
|
+
const isInstalled = requiredSkills.some(
|
|
396
|
+
(skillName) => skillName in installedTools
|
|
397
|
+
);
|
|
396
398
|
if (isInstalled) {
|
|
397
399
|
const updateStatus = getToolUpdateStatus(tool.name);
|
|
398
400
|
if (updateStatus.hasUpdate) {
|
|
@@ -613,27 +615,76 @@ function createPlatformSyncMigration(version2) {
|
|
|
613
615
|
}
|
|
614
616
|
};
|
|
615
617
|
}
|
|
618
|
+
function createConfigSkillNameMigration(version2) {
|
|
619
|
+
return {
|
|
620
|
+
version: version2,
|
|
621
|
+
description: "Remove droid- prefix from config skill names",
|
|
622
|
+
up: () => {
|
|
623
|
+
const config = loadConfig();
|
|
624
|
+
let configChanged = false;
|
|
625
|
+
const originalPlatform = config.platform;
|
|
626
|
+
for (const platformKey of ["claude-code" /* ClaudeCode */, "opencode" /* OpenCode */]) {
|
|
627
|
+
if (!config.platforms[platformKey]) continue;
|
|
628
|
+
config.platform = platformKey;
|
|
629
|
+
const trackedTools = getPlatformTools(config);
|
|
630
|
+
const skillNames = Object.keys(trackedTools);
|
|
631
|
+
for (const skillName of skillNames) {
|
|
632
|
+
if (!skillName.startsWith("droid-") || skillName === "droid") {
|
|
633
|
+
continue;
|
|
634
|
+
}
|
|
635
|
+
const unprefixedName = skillName.replace(/^droid-/, "");
|
|
636
|
+
if (!trackedTools[unprefixedName]) {
|
|
637
|
+
trackedTools[unprefixedName] = trackedTools[skillName];
|
|
638
|
+
delete trackedTools[skillName];
|
|
639
|
+
configChanged = true;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
if (configChanged) {
|
|
643
|
+
setPlatformTools(config, trackedTools);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
config.platform = originalPlatform;
|
|
647
|
+
if (configChanged) {
|
|
648
|
+
saveConfig(config);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
var PACKAGE_MIGRATIONS = [
|
|
654
|
+
createPlatformSyncMigration("0.25.0"),
|
|
655
|
+
createConfigSkillNameMigration("0.27.0")
|
|
656
|
+
];
|
|
616
657
|
var TOOL_MIGRATIONS = {
|
|
617
658
|
brain: [createConfigDirMigration("droid-brain", "0.2.3")],
|
|
618
659
|
comments: [createConfigDirMigration("droid-comments", "0.2.6")],
|
|
619
660
|
project: [createConfigDirMigration("droid-project", "0.1.5")],
|
|
620
|
-
coach: [createConfigDirMigration("droid-coach", "0.1.3")]
|
|
621
|
-
// Global migration for the droid meta-tool
|
|
622
|
-
droid: [createPlatformSyncMigration("0.25.0")]
|
|
661
|
+
coach: [createConfigDirMigration("droid-coach", "0.1.3")]
|
|
623
662
|
};
|
|
624
663
|
function getToolMigrations(toolName) {
|
|
625
664
|
return TOOL_MIGRATIONS[toolName] ?? [];
|
|
626
665
|
}
|
|
627
666
|
function getLastMigratedVersion(toolName) {
|
|
628
667
|
const config = loadConfig();
|
|
629
|
-
|
|
668
|
+
if (config.migrations?.tools?.[toolName]) {
|
|
669
|
+
return config.migrations.tools[toolName];
|
|
670
|
+
}
|
|
671
|
+
if (config.migrations && typeof config.migrations[toolName] === "string") {
|
|
672
|
+
return config.migrations[toolName];
|
|
673
|
+
}
|
|
674
|
+
return "0.0.0";
|
|
630
675
|
}
|
|
631
676
|
function setLastMigratedVersion(toolName, version2) {
|
|
632
677
|
const config = loadConfig();
|
|
633
678
|
if (!config.migrations) {
|
|
634
679
|
config.migrations = {};
|
|
635
680
|
}
|
|
636
|
-
config.migrations
|
|
681
|
+
if (!config.migrations.tools) {
|
|
682
|
+
config.migrations.tools = {};
|
|
683
|
+
}
|
|
684
|
+
config.migrations.tools[toolName] = version2;
|
|
685
|
+
if (typeof config.migrations[toolName] === "string") {
|
|
686
|
+
delete config.migrations[toolName];
|
|
687
|
+
}
|
|
637
688
|
saveConfig(config);
|
|
638
689
|
}
|
|
639
690
|
function runMigrations(toolName, fromVersion, toVersion) {
|
|
@@ -677,6 +728,48 @@ function runToolMigrations(toolName, installedVersion) {
|
|
|
677
728
|
}
|
|
678
729
|
return runMigrations(toolName, lastMigrated, installedVersion);
|
|
679
730
|
}
|
|
731
|
+
function runPackageMigrations(packageVersion) {
|
|
732
|
+
const config = loadConfig();
|
|
733
|
+
const lastMigrated = config.migrations?.package ?? "0.0.0";
|
|
734
|
+
if (compareSemver(packageVersion, lastMigrated) <= 0) {
|
|
735
|
+
return { success: true };
|
|
736
|
+
}
|
|
737
|
+
const pendingMigrations = PACKAGE_MIGRATIONS.filter((m) => {
|
|
738
|
+
const afterFrom = compareSemver(m.version, lastMigrated) > 0;
|
|
739
|
+
const beforeOrAtTo = compareSemver(m.version, packageVersion) <= 0;
|
|
740
|
+
return afterFrom && beforeOrAtTo;
|
|
741
|
+
});
|
|
742
|
+
if (pendingMigrations.length === 0) {
|
|
743
|
+
config.migrations = config.migrations || {};
|
|
744
|
+
config.migrations.package = packageVersion;
|
|
745
|
+
saveConfig(config);
|
|
746
|
+
return { success: true };
|
|
747
|
+
}
|
|
748
|
+
const configDir = getConfigDir();
|
|
749
|
+
for (const migration of pendingMigrations) {
|
|
750
|
+
try {
|
|
751
|
+
migration.up(configDir);
|
|
752
|
+
logMigration("package", lastMigrated, migration.version, "OK");
|
|
753
|
+
} catch (error) {
|
|
754
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
755
|
+
logMigration(
|
|
756
|
+
"package",
|
|
757
|
+
lastMigrated,
|
|
758
|
+
migration.version,
|
|
759
|
+
"FAILED",
|
|
760
|
+
errorMessage
|
|
761
|
+
);
|
|
762
|
+
return {
|
|
763
|
+
success: false,
|
|
764
|
+
error: `Package migration ${migration.version} failed: ${errorMessage}`
|
|
765
|
+
};
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
config.migrations = config.migrations || {};
|
|
769
|
+
config.migrations.package = packageVersion;
|
|
770
|
+
saveConfig(config);
|
|
771
|
+
return { success: true };
|
|
772
|
+
}
|
|
680
773
|
|
|
681
774
|
// src/lib/skills.ts
|
|
682
775
|
var DROID_SKILLS_START = "<!-- droid-skills-start -->";
|
|
@@ -861,6 +954,13 @@ function installSkill(skillName) {
|
|
|
861
954
|
message: `Invalid skill manifest for '${skillName}'`
|
|
862
955
|
};
|
|
863
956
|
}
|
|
957
|
+
const toolManifest = loadToolManifest(toolDir);
|
|
958
|
+
if (!toolManifest) {
|
|
959
|
+
return {
|
|
960
|
+
success: false,
|
|
961
|
+
message: `Invalid tool manifest for tool containing '${skillName}'`
|
|
962
|
+
};
|
|
963
|
+
}
|
|
864
964
|
if (manifest.dependencies) {
|
|
865
965
|
for (const dep of manifest.dependencies) {
|
|
866
966
|
if (!isToolInstalled(dep)) {
|
|
@@ -875,31 +975,39 @@ function installSkill(skillName) {
|
|
|
875
975
|
const targetSkillDir = join7(skillsPath, skillName);
|
|
876
976
|
const commandsPath = getCommandsInstallPath(config.platform);
|
|
877
977
|
const tools = getPlatformTools(config);
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
978
|
+
const renamedSkills = [
|
|
979
|
+
"comments",
|
|
980
|
+
"brain",
|
|
981
|
+
"project",
|
|
982
|
+
"coach",
|
|
983
|
+
"code-review",
|
|
984
|
+
"codex",
|
|
985
|
+
"tech-design",
|
|
986
|
+
"brain-obsidian"
|
|
987
|
+
];
|
|
988
|
+
if (renamedSkills.includes(skillName)) {
|
|
989
|
+
const droidPrefixedName = `droid-${skillName}`;
|
|
990
|
+
const droidPrefixedDir = join7(skillsPath, droidPrefixedName);
|
|
991
|
+
if (existsSync5(droidPrefixedDir)) {
|
|
882
992
|
try {
|
|
883
|
-
rmSync2(
|
|
993
|
+
rmSync2(droidPrefixedDir, { recursive: true });
|
|
884
994
|
} catch (error) {
|
|
885
995
|
console.warn(
|
|
886
|
-
`Warning: Could not remove old skill directory ${
|
|
996
|
+
`Warning: Could not remove old skill directory ${droidPrefixedDir}: ${error}`
|
|
887
997
|
);
|
|
888
998
|
}
|
|
889
999
|
}
|
|
890
|
-
if (tools[
|
|
891
|
-
delete tools[
|
|
1000
|
+
if (tools[droidPrefixedName]) {
|
|
1001
|
+
delete tools[droidPrefixedName];
|
|
892
1002
|
setPlatformTools(config, tools);
|
|
893
1003
|
saveConfig(config);
|
|
894
1004
|
}
|
|
895
1005
|
}
|
|
896
1006
|
const commandsSource = join7(toolDir, "commands");
|
|
897
1007
|
const agentsSource = join7(toolDir, "agents");
|
|
898
|
-
const
|
|
899
|
-
const isAlreadyInstalled = tools[skillName] || oldSkillName && tools[oldSkillName];
|
|
1008
|
+
const isAlreadyInstalled = tools[skillName];
|
|
900
1009
|
if (!isAlreadyInstalled) {
|
|
901
1010
|
const toolName2 = basename(toolDir);
|
|
902
|
-
const normalizedToolName = toolName2.replace(/^droid-/, "");
|
|
903
1011
|
if (existsSync5(commandsSource)) {
|
|
904
1012
|
const commandFiles = readdirSync4(commandsSource).filter(
|
|
905
1013
|
(f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
|
|
@@ -908,7 +1016,7 @@ function installSkill(skillName) {
|
|
|
908
1016
|
const targetCommandPath = join7(commandsPath, file);
|
|
909
1017
|
if (existsSync5(targetCommandPath)) {
|
|
910
1018
|
const commandName = file.replace(".md", "");
|
|
911
|
-
if (commandName === toolName2
|
|
1019
|
+
if (commandName === toolName2) {
|
|
912
1020
|
continue;
|
|
913
1021
|
}
|
|
914
1022
|
return {
|
|
@@ -982,10 +1090,18 @@ function installSkill(skillName) {
|
|
|
982
1090
|
(f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
|
|
983
1091
|
);
|
|
984
1092
|
for (const file of commandFiles) {
|
|
985
|
-
const
|
|
986
|
-
const
|
|
987
|
-
|
|
988
|
-
|
|
1093
|
+
const commandName = file.replace(".md", "");
|
|
1094
|
+
const commandMeta = toolManifest.includes.commands.find(
|
|
1095
|
+
(cmd) => (typeof cmd === "string" ? cmd : cmd.name) === commandName
|
|
1096
|
+
);
|
|
1097
|
+
const isAlias = typeof commandMeta === "object" && commandMeta.is_alias;
|
|
1098
|
+
const shouldInstall = config.platform === "opencode" /* OpenCode */ || isAlias;
|
|
1099
|
+
if (shouldInstall) {
|
|
1100
|
+
const sourcePath = join7(commandsSource, file);
|
|
1101
|
+
const targetPath = join7(commandsPath, file);
|
|
1102
|
+
const content = readFileSync5(sourcePath, "utf-8");
|
|
1103
|
+
writeFileSync3(targetPath, content);
|
|
1104
|
+
}
|
|
989
1105
|
}
|
|
990
1106
|
}
|
|
991
1107
|
const installedAgents = [];
|
|
@@ -2985,8 +3101,8 @@ function App() {
|
|
|
2985
3101
|
}
|
|
2986
3102
|
});
|
|
2987
3103
|
useEffect(() => {
|
|
2988
|
-
const
|
|
2989
|
-
|
|
3104
|
+
const packageVersion = getVersion();
|
|
3105
|
+
runPackageMigrations(packageVersion);
|
|
2990
3106
|
}, []);
|
|
2991
3107
|
useEffect(() => {
|
|
2992
3108
|
const autoUpdateConfig = getAutoUpdateConfig();
|