@orderful/droid 0.16.0 → 0.17.0
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 +3 -43
- package/AGENTS.md +75 -0
- package/CHANGELOG.md +18 -0
- package/bun.lock +12 -0
- package/dist/bin/droid.js +3064 -54
- package/dist/commands/tui/components/Badge.test.d.ts +2 -0
- package/dist/commands/tui/components/Badge.test.d.ts.map +1 -0
- package/dist/commands/tui/components/TabBar.test.d.ts +2 -0
- package/dist/commands/tui/components/TabBar.test.d.ts.map +1 -0
- package/dist/index.js +952 -6
- package/package.json +7 -2
- package/playwright.config.ts +20 -0
- package/scripts/build.ts +78 -0
- package/scripts/screenshot-tui.ts +126 -0
- package/src/commands/tui/components/Badge.test.tsx +94 -0
- package/src/commands/tui/components/TabBar.test.tsx +39 -0
- package/tests/e2e/tui.spec.ts +128 -0
- package/dist/bin/droid.js.map +0 -1
- package/dist/commands/config.js +0 -67
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/install.js +0 -45
- package/dist/commands/install.js.map +0 -1
- package/dist/commands/setup.js +0 -269
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/skills.js +0 -144
- package/dist/commands/skills.js.map +0 -1
- package/dist/commands/tui/components/Badge.js +0 -29
- package/dist/commands/tui/components/Badge.js.map +0 -1
- package/dist/commands/tui/components/Markdown.js +0 -42
- package/dist/commands/tui/components/Markdown.js.map +0 -1
- package/dist/commands/tui/components/SettingsDetails.js +0 -11
- package/dist/commands/tui/components/SettingsDetails.js.map +0 -1
- package/dist/commands/tui/components/TabBar.js +0 -7
- package/dist/commands/tui/components/TabBar.js.map +0 -1
- package/dist/commands/tui/components/ToolDetails.js +0 -35
- package/dist/commands/tui/components/ToolDetails.js.map +0 -1
- package/dist/commands/tui/components/ToolItem.js +0 -11
- package/dist/commands/tui/components/ToolItem.js.map +0 -1
- package/dist/commands/tui/constants.js +0 -17
- package/dist/commands/tui/constants.js.map +0 -1
- package/dist/commands/tui/hooks/useAppUpdate.js +0 -52
- package/dist/commands/tui/hooks/useAppUpdate.js.map +0 -1
- package/dist/commands/tui/hooks/useToolUpdates.js +0 -77
- package/dist/commands/tui/hooks/useToolUpdates.js.map +0 -1
- package/dist/commands/tui/types.js +0 -2
- package/dist/commands/tui/types.js.map +0 -1
- package/dist/commands/tui/views/ReadmeViewer.js +0 -56
- package/dist/commands/tui/views/ReadmeViewer.js.map +0 -1
- package/dist/commands/tui/views/SetupScreen.js +0 -114
- package/dist/commands/tui/views/SetupScreen.js.map +0 -1
- package/dist/commands/tui/views/SkillConfigScreen.js +0 -148
- package/dist/commands/tui/views/SkillConfigScreen.js.map +0 -1
- package/dist/commands/tui/views/ToolExplorer.js +0 -86
- package/dist/commands/tui/views/ToolExplorer.js.map +0 -1
- package/dist/commands/tui/views/ToolUpdatePrompt.js +0 -38
- package/dist/commands/tui/views/ToolUpdatePrompt.js.map +0 -1
- package/dist/commands/tui/views/WelcomeScreen.js +0 -46
- package/dist/commands/tui/views/WelcomeScreen.js.map +0 -1
- package/dist/commands/tui.js +0 -307
- package/dist/commands/tui.js.map +0 -1
- package/dist/commands/uninstall.js +0 -26
- package/dist/commands/uninstall.js.map +0 -1
- package/dist/commands/update.js +0 -45
- package/dist/commands/update.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/agents.js +0 -248
- package/dist/lib/agents.js.map +0 -1
- package/dist/lib/config.js +0 -196
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/platforms.js +0 -52
- package/dist/lib/platforms.js.map +0 -1
- package/dist/lib/quotes.js +0 -24
- package/dist/lib/quotes.js.map +0 -1
- package/dist/lib/skill-config.js +0 -80
- package/dist/lib/skill-config.js.map +0 -1
- package/dist/lib/skills.js +0 -582
- package/dist/lib/skills.js.map +0 -1
- package/dist/lib/tools.js +0 -145
- package/dist/lib/tools.js.map +0 -1
- package/dist/lib/types.js +0 -50
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/version.js +0 -100
- package/dist/lib/version.js.map +0 -1
package/.claude/CLAUDE.md
CHANGED
|
@@ -1,22 +1,10 @@
|
|
|
1
1
|
# CLAUDE.md
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
@../AGENTS.md
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Claude-Specific Instructions
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
## Build & Test
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
bun run build # Compile TypeScript and copy tools to dist/
|
|
13
|
-
bun run dev # Watch mode
|
|
14
|
-
bun run test # Run tests
|
|
15
|
-
bun run lint # Run ESLint
|
|
16
|
-
bun run start # Run the TUI (bun dist/bin/droid.js)
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Git Rules
|
|
7
|
+
### Git Rules
|
|
20
8
|
|
|
21
9
|
- **NEVER push directly to main**. Always create a branch and PR, even for small changes. The only exception is if the user explicitly says "push to main" in their message.
|
|
22
10
|
- Branch naming: `tf/<ticket-or-description>` (e.g., `tf/tools-architecture`)
|
|
@@ -40,31 +28,3 @@ EOF
|
|
|
40
28
|
- **patch**: Bug fixes, small improvements, internal refactors
|
|
41
29
|
- **minor**: New features, new tools/skills/commands
|
|
42
30
|
- **major**: Breaking changes
|
|
43
|
-
|
|
44
|
-
## Structure
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
src/
|
|
48
|
-
├── bin/ # CLI entry point
|
|
49
|
-
├── commands/ # CLI commands (tui.tsx is the main dashboard)
|
|
50
|
-
├── lib/ # Core logic (tools.ts, skills.ts, agents.ts, config.ts)
|
|
51
|
-
└── tools/ # Bundled tools
|
|
52
|
-
└── {tool}/
|
|
53
|
-
├── TOOL.yaml # Tool manifest (version, includes, config)
|
|
54
|
-
├── skills/{skill}/
|
|
55
|
-
│ ├── SKILL.md # Frontmatter + instructions
|
|
56
|
-
│ └── references/ # Optional context files
|
|
57
|
-
├── commands/
|
|
58
|
-
│ └── {command}.md # Frontmatter + instructions
|
|
59
|
-
└── agents/
|
|
60
|
-
└── {agent}.md # Frontmatter + instructions
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Key Patterns
|
|
64
|
-
|
|
65
|
-
- Tools are the user-facing abstraction over skills, commands, and agents
|
|
66
|
-
- `TOOL.yaml` defines tool-level metadata and lists what's included (just names)
|
|
67
|
-
- Each artifact (.md file) owns its metadata in YAML frontmatter
|
|
68
|
-
- Skills use folders (can have `references/` subdir), commands/agents are flat files
|
|
69
|
-
- Install targets: `~/.claude/skills/`, `~/.claude/commands/`, `~/.claude/agents/`
|
|
70
|
-
- TUI uses Ink (React for CLI)
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
Project instructions for AI coding assistants.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Droid is a TUI dashboard for managing AI tools. Each tool bundles related skills, commands, and agents. Installs to Claude Code (`~/.claude/`) and OpenCode (`~/.config/opencode/`).
|
|
8
|
+
|
|
9
|
+
## Quick Start
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
bun install # Install dependencies
|
|
13
|
+
bun run build # Compile TypeScript and copy tools to dist/
|
|
14
|
+
bun run dev # Watch mode
|
|
15
|
+
bun run test # Run tests
|
|
16
|
+
bun run lint # Run ESLint
|
|
17
|
+
bun run start # Run the TUI (bun dist/bin/droid.js)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Structure
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
src/
|
|
24
|
+
├── bin/ # CLI entry point
|
|
25
|
+
├── commands/ # CLI commands
|
|
26
|
+
│ ├── tui.tsx # Main TUI dashboard (Ink/React)
|
|
27
|
+
│ └── tui/ # TUI components, views, hooks
|
|
28
|
+
├── lib/ # Core logic (tools.ts, skills.ts, agents.ts, config.ts)
|
|
29
|
+
└── tools/ # Bundled tools
|
|
30
|
+
└── {tool}/
|
|
31
|
+
├── TOOL.yaml # Tool manifest (version, includes, config)
|
|
32
|
+
├── skills/{skill}/
|
|
33
|
+
│ ├── SKILL.md # Frontmatter + instructions
|
|
34
|
+
│ └── references/ # Optional context files
|
|
35
|
+
├── commands/
|
|
36
|
+
│ └── {command}.md # Frontmatter + instructions
|
|
37
|
+
└── agents/
|
|
38
|
+
└── {agent}.md # Frontmatter + instructions
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Key Patterns
|
|
42
|
+
|
|
43
|
+
- Tools are the user-facing abstraction over skills, commands, and agents
|
|
44
|
+
- `TOOL.yaml` defines tool-level metadata and lists what's included (just names)
|
|
45
|
+
- Each artifact (.md file) owns its metadata in YAML frontmatter
|
|
46
|
+
- Skills use folders (can have `references/` subdir), commands/agents are flat files
|
|
47
|
+
- Install targets: `~/.claude/skills/`, `~/.claude/commands/`, `~/.claude/agents/`
|
|
48
|
+
|
|
49
|
+
## UI Libraries
|
|
50
|
+
|
|
51
|
+
We use **two** terminal UI libraries for different purposes:
|
|
52
|
+
|
|
53
|
+
| Library | Purpose | Used In |
|
|
54
|
+
|---------|---------|---------|
|
|
55
|
+
| **Ink** | Full React-based TUI dashboard | `tui.tsx`, `tui/components/`, `tui/views/` |
|
|
56
|
+
| **Inquirer** | Simple CLI prompts (select, confirm, input) | `skills.ts`, `setup.ts`, `skill-config.ts` |
|
|
57
|
+
|
|
58
|
+
**Why both?**
|
|
59
|
+
- **Ink** is for the interactive dashboard—stateful, component-based, keyboard navigation
|
|
60
|
+
- **Inquirer** is for quick sequential prompts ("Which tool?", "Configure now? y/n")
|
|
61
|
+
|
|
62
|
+
Don't consolidate them. Using Ink for simple prompts would be overkill.
|
|
63
|
+
|
|
64
|
+
## Do Not Touch
|
|
65
|
+
|
|
66
|
+
- `.env` files and secrets
|
|
67
|
+
- `node_modules/`, `dist/`
|
|
68
|
+
- User config files (`~/.droid/`)
|
|
69
|
+
|
|
70
|
+
## Code Style
|
|
71
|
+
|
|
72
|
+
- TypeScript strict mode
|
|
73
|
+
- Prefer `const` over `let`
|
|
74
|
+
- Use Canadian/British spelling (behaviour, colour, favourite)
|
|
75
|
+
- Use "allow list/deny list" not "whitelist/blacklist"
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @orderful/droid
|
|
2
2
|
|
|
3
|
+
## 0.17.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#86](https://github.com/Orderful/droid/pull/86) [`af57231`](https://github.com/Orderful/droid/commit/af5723101f301dc7d5357558325bd9d6997259f7) Thanks [@frytyler](https://github.com/frytyler)! - Add TUI testing infrastructure with ink-testing-library for component tests and Playwright + ttyd for E2E visual testing
|
|
8
|
+
|
|
9
|
+
## 0.16.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#83](https://github.com/Orderful/droid/pull/83) [`023660a`](https://github.com/Orderful/droid/commit/023660a951ae1674989ae69d16b29e432a198300) Thanks [@frytyler](https://github.com/frytyler)! - Add AGENTS.md standard for cross-AI-tool compatibility
|
|
14
|
+
|
|
15
|
+
Introduces AGENTS.md at repo root with shared project instructions that work across Claude Code, Cursor, Copilot, and other AI coding assistants. CLAUDE.md now imports AGENTS.md and only contains Claude-specific instructions (git rules, changesets).
|
|
16
|
+
|
|
17
|
+
- [#85](https://github.com/Orderful/droid/pull/85) [`d5a1637`](https://github.com/Orderful/droid/commit/d5a1637974805ffb35d93726ec56db4580c556b5) Thanks [@frytyler](https://github.com/frytyler)! - Fix ESM module resolution for npm global installs
|
|
18
|
+
|
|
19
|
+
Switches build from tsc to esbuild bundling. This fixes the ERR_MODULE_NOT_FOUND error when running droid after npm install -g, caused by Node ESM requiring explicit .js extensions that TypeScript doesn't add.
|
|
20
|
+
|
|
3
21
|
## 0.16.0
|
|
4
22
|
|
|
5
23
|
### Minor Changes
|
package/bun.lock
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@changesets/changelog-github": "^0.5.2",
|
|
20
20
|
"@changesets/cli": "^2.29.8",
|
|
21
|
+
"@playwright/test": "^1.57.0",
|
|
21
22
|
"@types/bun": "latest",
|
|
22
23
|
"@types/ink-text-input": "^2.0.5",
|
|
23
24
|
"@types/inquirer": "^9.0.7",
|
|
@@ -27,6 +28,7 @@
|
|
|
27
28
|
"@typescript-eslint/parser": "^8.49.0",
|
|
28
29
|
"esbuild": "^0.27.1",
|
|
29
30
|
"eslint": "^8.57.0",
|
|
31
|
+
"ink-testing-library": "^4.0.0",
|
|
30
32
|
"prettier": "^3.2.5",
|
|
31
33
|
"typescript": "^5.4.2",
|
|
32
34
|
},
|
|
@@ -155,6 +157,8 @@
|
|
|
155
157
|
|
|
156
158
|
"@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
|
|
157
159
|
|
|
160
|
+
"@playwright/test": ["@playwright/test@1.57.0", "", { "dependencies": { "playwright": "1.57.0" }, "bin": { "playwright": "cli.js" } }, "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA=="],
|
|
161
|
+
|
|
158
162
|
"@types/bun": ["@types/bun@1.3.4", "", { "dependencies": { "bun-types": "1.3.4" } }, "sha512-EEPTKXHP+zKGPkhRLv+HI0UEX8/o+65hqARxLy8Ov5rIxMBPNTjeZww00CIihrIQGEQBYg+0roO5qOnS/7boGA=="],
|
|
159
163
|
|
|
160
164
|
"@types/ink": ["@types/ink@0.5.2", "", { "dependencies": { "@types/node": "*", "@types/prop-types": "*" } }, "sha512-yEuhWTRMXJkIWiaM58c5kuRot5HFccv9kjjgy0fBZG0+tYb+sMBaxHNPVqyZXspGGlmwDOQ1d3BsygWpWlW17w=="],
|
|
@@ -341,6 +345,8 @@
|
|
|
341
345
|
|
|
342
346
|
"fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="],
|
|
343
347
|
|
|
348
|
+
"fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="],
|
|
349
|
+
|
|
344
350
|
"get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="],
|
|
345
351
|
|
|
346
352
|
"glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="],
|
|
@@ -379,6 +385,8 @@
|
|
|
379
385
|
|
|
380
386
|
"ink-select-input": ["ink-select-input@6.2.0", "", { "dependencies": { "figures": "^6.1.0", "to-rotated": "^1.0.0" }, "peerDependencies": { "ink": ">=5.0.0", "react": ">=18.0.0" } }, "sha512-304fZXxkpYxJ9si5lxRCaX01GNlmPBgOZumXXRnPYbHW/iI31cgQynqk2tRypGLOF1cMIwPUzL2LSm6q4I5rQQ=="],
|
|
381
387
|
|
|
388
|
+
"ink-testing-library": ["ink-testing-library@4.0.0", "", { "peerDependencies": { "@types/react": ">=18.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-yF92kj3pmBvk7oKbSq5vEALO//o7Z9Ck/OaLNlkzXNeYdwfpxMQkSowGTFUCS5MSu9bWfSZMewGpp7bFc66D7Q=="],
|
|
389
|
+
|
|
382
390
|
"ink-text-input": ["ink-text-input@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "type-fest": "^4.18.2" }, "peerDependencies": { "ink": ">=5", "react": ">=18" } }, "sha512-Fw64n7Yha5deb1rHY137zHTAbSTNelUKuB5Kkk2HACXEtwIHBCf9OH2tP/LQ9fRYTl1F0dZgbW0zPnZk6FA9Lw=="],
|
|
383
391
|
|
|
384
392
|
"inquirer": ["inquirer@9.3.8", "", { "dependencies": { "@inquirer/external-editor": "^1.0.2", "@inquirer/figures": "^1.0.3", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "1.0.0", "ora": "^5.4.1", "run-async": "^3.0.0", "rxjs": "^7.8.1", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w=="],
|
|
@@ -487,6 +495,10 @@
|
|
|
487
495
|
|
|
488
496
|
"pify": ["pify@4.0.1", "", {}, "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="],
|
|
489
497
|
|
|
498
|
+
"playwright": ["playwright@1.57.0", "", { "dependencies": { "playwright-core": "1.57.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw=="],
|
|
499
|
+
|
|
500
|
+
"playwright-core": ["playwright-core@1.57.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ=="],
|
|
501
|
+
|
|
490
502
|
"prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="],
|
|
491
503
|
|
|
492
504
|
"prettier": ["prettier@3.7.4", "", { "bin": "bin/prettier.cjs" }, "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA=="],
|