@orderful/droid 0.7.0 → 0.9.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.
Files changed (78) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +80 -89
  3. package/assets/droid+claude.png +0 -0
  4. package/dist/commands/setup.d.ts +1 -0
  5. package/dist/commands/setup.d.ts.map +1 -1
  6. package/dist/commands/setup.js +77 -9
  7. package/dist/commands/setup.js.map +1 -1
  8. package/dist/commands/tui.d.ts.map +1 -1
  9. package/dist/commands/tui.js +111 -70
  10. package/dist/commands/tui.js.map +1 -1
  11. package/dist/lib/agents.d.ts +19 -4
  12. package/dist/lib/agents.d.ts.map +1 -1
  13. package/dist/lib/agents.js +121 -42
  14. package/dist/lib/agents.js.map +1 -1
  15. package/dist/lib/skills.d.ts.map +1 -1
  16. package/dist/lib/skills.js +56 -1
  17. package/dist/lib/skills.js.map +1 -1
  18. package/dist/lib/types.d.ts +2 -0
  19. package/dist/lib/types.d.ts.map +1 -1
  20. package/dist/skills/brain/SKILL.md +16 -16
  21. package/dist/skills/brain/SKILL.yaml +4 -6
  22. package/dist/skills/brain/commands/brain.md +12 -5
  23. package/dist/skills/brain/commands/scratchpad.md +52 -0
  24. package/dist/skills/brain/references/workflows.md +14 -4
  25. package/dist/skills/brain-obsidian/SKILL.md +1 -4
  26. package/dist/skills/brain-obsidian/SKILL.yaml +1 -4
  27. package/dist/skills/code-review/SKILL.md +54 -0
  28. package/dist/skills/code-review/SKILL.yaml +19 -0
  29. package/dist/skills/code-review/agents/edi-standards-reviewer/AGENT.md +39 -0
  30. package/dist/skills/code-review/agents/edi-standards-reviewer/AGENT.yaml +14 -0
  31. package/dist/skills/code-review/agents/error-handling-reviewer/AGENT.md +51 -0
  32. package/dist/skills/code-review/agents/error-handling-reviewer/AGENT.yaml +14 -0
  33. package/dist/skills/code-review/agents/test-coverage-analyzer/AGENT.md +53 -0
  34. package/dist/skills/code-review/agents/test-coverage-analyzer/AGENT.yaml +14 -0
  35. package/dist/skills/code-review/agents/type-reviewer/AGENT.md +50 -0
  36. package/dist/skills/code-review/agents/type-reviewer/AGENT.yaml +13 -0
  37. package/dist/skills/code-review/commands/code-review.md +91 -0
  38. package/dist/skills/comments/SKILL.md +21 -9
  39. package/dist/skills/comments/SKILL.yaml +2 -5
  40. package/dist/skills/comments/commands/comments.md +1 -1
  41. package/dist/skills/project/SKILL.md +10 -13
  42. package/dist/skills/project/SKILL.yaml +2 -7
  43. package/dist/skills/project/commands/project.md +9 -4
  44. package/dist/skills/project/references/creating.md +9 -4
  45. package/dist/skills/project/references/loading.md +11 -5
  46. package/package.json +1 -1
  47. package/src/commands/setup.test.ts +276 -0
  48. package/src/commands/setup.ts +80 -10
  49. package/src/commands/tui.tsx +149 -82
  50. package/src/lib/agents.ts +134 -44
  51. package/src/lib/skills.ts +61 -1
  52. package/src/lib/types.ts +4 -0
  53. package/src/skills/brain/SKILL.md +16 -16
  54. package/src/skills/brain/SKILL.yaml +4 -6
  55. package/src/skills/brain/commands/brain.md +12 -5
  56. package/src/skills/brain/commands/scratchpad.md +52 -0
  57. package/src/skills/brain/references/workflows.md +14 -4
  58. package/src/skills/brain-obsidian/SKILL.md +1 -4
  59. package/src/skills/brain-obsidian/SKILL.yaml +1 -4
  60. package/src/skills/code-review/SKILL.md +54 -0
  61. package/src/skills/code-review/SKILL.yaml +19 -0
  62. package/src/skills/code-review/agents/edi-standards-reviewer/AGENT.md +39 -0
  63. package/src/skills/code-review/agents/edi-standards-reviewer/AGENT.yaml +14 -0
  64. package/src/skills/code-review/agents/error-handling-reviewer/AGENT.md +51 -0
  65. package/src/skills/code-review/agents/error-handling-reviewer/AGENT.yaml +14 -0
  66. package/src/skills/code-review/agents/test-coverage-analyzer/AGENT.md +53 -0
  67. package/src/skills/code-review/agents/test-coverage-analyzer/AGENT.yaml +14 -0
  68. package/src/skills/code-review/agents/type-reviewer/AGENT.md +50 -0
  69. package/src/skills/code-review/agents/type-reviewer/AGENT.yaml +13 -0
  70. package/src/skills/code-review/commands/code-review.md +91 -0
  71. package/src/skills/comments/SKILL.md +21 -9
  72. package/src/skills/comments/SKILL.yaml +2 -5
  73. package/src/skills/comments/commands/comments.md +1 -1
  74. package/src/skills/project/SKILL.md +10 -13
  75. package/src/skills/project/SKILL.yaml +2 -7
  76. package/src/skills/project/commands/project.md +9 -4
  77. package/src/skills/project/references/creating.md +9 -4
  78. package/src/skills/project/references/loading.md +11 -5
@@ -0,0 +1,50 @@
1
+ You are a TypeScript expert focused on type safety and design.
2
+
3
+ ## Review Focus
4
+
5
+ 1. **No sneaky `any`**: Explicit types for function params/returns
6
+ 2. **Domain types**: Use branded types for IDs (PartnerId, TransactionId)
7
+ 3. **Null safety**: Proper handling of optional values
8
+ 4. **Interface contracts**: APIs have explicit input/output types
9
+ 5. **Enums and unions**: Use discriminated unions for state machines
10
+
11
+ ## Specific Patterns at Orderful
12
+
13
+ - BillingEvent types should be exhaustive
14
+ - Partnership configs need strict typing
15
+ - Transaction Templates have well-defined shapes
16
+ - API responses should use Zod schemas
17
+
18
+ ## Anti-Patterns to Flag
19
+
20
+ - `as any` type assertions
21
+ - Implicit `any` from untyped dependencies
22
+ - `// @ts-ignore` without explanation
23
+ - Overly permissive union types
24
+ - Missing return types on exported functions
25
+
26
+ ## Output Format
27
+
28
+ Return JSON:
29
+
30
+ ```json
31
+ {
32
+ "issues": [
33
+ {
34
+ "file": "src/api/handlers.ts",
35
+ "line": 45,
36
+ "severity": "important",
37
+ "confidence": 88,
38
+ "issue": "Function `processTransaction` has implicit `any` return type",
39
+ "suggestion": "Add explicit return type `Promise<TransactionResult>`"
40
+ }
41
+ ],
42
+ "summary": "One-line summary of type safety concerns"
43
+ }
44
+ ```
45
+
46
+ ## Severity Guidelines
47
+
48
+ - **critical**: `any` in billing/transaction code, missing API contract types
49
+ - **important**: Implicit `any`, missing return types on public APIs
50
+ - **suggestion**: Could use stricter types, minor improvements
@@ -0,0 +1,13 @@
1
+ name: type-reviewer
2
+ description: >-
3
+ Review TypeScript type design and interface contracts. Check for proper
4
+ typing, avoid `any`, ensure domain types are used correctly.
5
+ version: 0.1.0
6
+ status: alpha
7
+ mode: subagent
8
+ model: sonnet
9
+ color: purple
10
+ tools:
11
+ - Read
12
+ - Grep
13
+ - Glob
@@ -0,0 +1,91 @@
1
+ ---
2
+ description: Run comprehensive code review using specialized agents. Accepts PR number, 'staged', 'branch', or file path.
3
+ argument-hint: "[#123 | staged | branch | path/to/file.ts]"
4
+ allowed-tools: Task, Bash(git:*), Bash(gh:*), Read, Glob
5
+ ---
6
+
7
+ # /code-review - Run comprehensive code review using specialized agents
8
+
9
+ Review target: $ARGUMENTS
10
+
11
+ ## Usage
12
+
13
+ ```
14
+ /code-review #123 # Review PR #123
15
+ /code-review staged # Review staged changes
16
+ /code-review branch # Review current branch vs main
17
+ /code-review path/to/file # Review specific file
18
+ ```
19
+
20
+ ### Step 1: Determine Review Scope
21
+
22
+ Parse the argument to determine what to review:
23
+
24
+ **If argument starts with `#` or is a number (e.g., `#123` or `123`):**
25
+ - This is a PR number
26
+ - Fetch PR details: `gh pr view $PR_NUMBER --json title,body,baseRefName,headRefName,files`
27
+ - Get the diff: `gh pr diff $PR_NUMBER`
28
+ - Note the PR author and description for context
29
+
30
+ **If argument is `staged` or empty:**
31
+ - Review staged changes: `git diff --cached`
32
+
33
+ **If argument is `branch`:**
34
+ - Review current branch vs main: `git diff origin/main...HEAD`
35
+
36
+ **If argument is a file path:**
37
+ - Review specific file: `git diff HEAD -- $FILE_PATH`
38
+ - If no changes, review the entire file for issues
39
+
40
+ ### Step 2: Gather Context
41
+
42
+ For PR reviews, also fetch:
43
+ - PR description (may contain context about the change)
44
+ - Linked issues: `gh pr view $PR_NUMBER --json body` and parse for #issue refs
45
+ - Changed files list for targeted agent assignment
46
+
47
+ ### Step 3: Parallel Agent Reviews
48
+
49
+ Launch these agents in parallel using the Task tool with `run_in_background: true`:
50
+
51
+ 1. **edi-standards-reviewer**: EDI patterns, partnership handling, billing concerns
52
+ 2. **test-coverage-analyzer**: Test completeness and edge cases
53
+ 3. **error-handling-reviewer**: Silent failures, missing error handling
54
+ 4. **type-reviewer**: Type design, interface contracts
55
+
56
+ Pass each agent:
57
+ 1. The diff content
58
+ 2. The full file content for changed files (for context)
59
+ 3. PR description if available
60
+
61
+ Use TaskOutput to collect results from all agents.
62
+
63
+ ### Step 4: Confidence Filtering
64
+
65
+ Each agent returns issues with confidence scores (0-100).
66
+ Filter out issues with confidence < 80.
67
+
68
+ ### Step 5: Synthesize Report
69
+
70
+ Compile findings into a prioritized report:
71
+
72
+ **PR #123: "Add partnership billing events"** (if reviewing a PR)
73
+ *Author: @username*
74
+
75
+ **Critical** (security, data loss, billing errors)
76
+ - `file.ts:42` - Issue description
77
+
78
+ **Important** (bugs, missing tests, type issues)
79
+ - `file.ts:67` - Issue description
80
+
81
+ **Suggestions** (style, readability)
82
+ - `file.ts:89` - Issue description
83
+
84
+ **Summary**: X critical, Y important, Z suggestions across N files.
85
+
86
+ ### Step 6: Offer Actions (for PRs)
87
+
88
+ After presenting the report, offer:
89
+ - "Would you like me to post this as a PR comment?"
90
+ - "Should I suggest fixes for any of these issues?"
91
+ - "Want me to check out this branch and fix the critical issues?"
@@ -1,9 +1,6 @@
1
1
  ---
2
2
  name: comments
3
- description: >-
4
- Enable inline conversations using @droid/@user markers. Tag @droid to ask the AI,
5
- AI responds with @{your-name}. Use /comments check to address markers, /comments cleanup
6
- to remove resolved threads. Ideal for code review notes and async collaboration.
3
+ 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."
7
4
  globs:
8
5
  - "**/*"
9
6
  alwaysApply: false
@@ -31,12 +28,27 @@ The AI will respond with `> @{user_mention}` (configured in droid setup, e.g., `
31
28
 
32
29
  ## Tag Convention
33
30
 
34
- | Tag | Who's Speaking | Purpose |
35
- |-----|----------------|---------|
36
- | `@droid` | User | User leaving notes/questions for AI |
37
- | `@{user}` (e.g., `@fry`) | AI | AI leaving responses/questions for user |
31
+ **CRITICAL: The `@mention` is who you're talking TO, not who is speaking.**
38
32
 
39
- **The pattern:** The tag indicates who you're addressing, not who's writing. When you write `> @droid`, you're talking TO the AI. When the AI writes `> @fry`, it's talking TO you.
33
+ Think of it like addressing someone in conversation:
34
+ - "Hey @droid, what do you think?" → User talking TO the AI
35
+ - "Good point @fry, here's my take..." → AI talking TO the user
36
+
37
+ | When you see... | Who wrote it | Who it's addressed to |
38
+ |-----------------|--------------|----------------------|
39
+ | `> @droid ...` | User | AI (droid) |
40
+ | `> @fry ...` | AI | User (fry) |
41
+
42
+ **Examples:**
43
+ ```markdown
44
+ > @droid Can you explain this function? ← User asking AI
45
+ > @fry This function calculates the hash... ← AI responding to user
46
+
47
+ > @droid Should we refactor this? ← User asking AI
48
+ > @fry Yes, I'd suggest extracting... ← AI responding to user
49
+ ```
50
+
51
+ **Never flip this.** When responding to a `@droid` comment, always use `@{user}` (e.g., `@fry`) because you're addressing the user, not yourself.
40
52
 
41
53
  ## When NOT to Use
42
54
 
@@ -1,9 +1,6 @@
1
1
  name: comments
2
- description: >-
3
- Enable inline conversations using @droid/@user markers. Tag @droid to ask the AI,
4
- AI responds with @{your-name}. Use /comments check to address markers, /comments cleanup
5
- to remove resolved threads. Ideal for code review notes and async collaboration.
6
- version: 0.2.1
2
+ 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."
3
+ version: 0.2.2
7
4
  status: beta
8
5
  dependencies: []
9
6
  provides_output: false
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Check and respond to inline @droid comments in code and docs
3
- argument-hint: [check|cleanup] [path]
3
+ argument-hint: "[check [{path}] | cleanup]"
4
4
  allowed-tools: Read, Edit, Grep, Glob, Bash(git diff:*), Bash(git status:*)
5
5
  ---
6
6
 
@@ -1,11 +1,6 @@
1
1
  ---
2
2
  name: project
3
- description: >-
4
- Manage project context files for persistent AI memory across sessions.
5
- Load project context before working (/project {name}), update with
6
- new learnings (/project update), or create new projects (/project create).
7
- Use when working on multi-session features, refactors, or any work that
8
- benefits from accumulated context.
3
+ 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."
9
4
  globs:
10
5
  - "**/PROJECT.md"
11
6
  alwaysApply: false
@@ -32,31 +27,33 @@ Chat history disappears. Projects persist.
32
27
 
33
28
  ## Configuration
34
29
 
35
- Check `~/.droid/skills/project/overrides.yaml` for user settings:
30
+ **IMPORTANT:** Before using any default paths, ALWAYS read `~/.droid/skills/project/overrides.yaml` first. If `projects_dir` is configured there, use that path. Only fall back to defaults if the file doesn't exist or lacks a `projects_dir` setting.
36
31
 
37
32
  | Setting | Default | Description |
38
33
  |---------|---------|-------------|
39
- | `projects_dir` | `~/{ai_tool}/projects` | Where projects are stored (varies by AI tool) |
34
+ | `projects_dir` | (see below) | Where projects are stored |
40
35
  | `preset` | `markdown` | Output format: `markdown` or `obsidian` |
41
36
 
42
- Default `projects_dir` by AI tool:
37
+ Default `projects_dir` by AI tool (only if not configured):
43
38
  - **claude-code**: `~/.claude/projects`
44
- - **opencode**: `~/.opencode/projects`
39
+ - **opencode**: `~/.config/opencode/projects`
45
40
 
46
41
  ## Commands
47
42
 
48
43
  | Command | Action |
49
44
  |---------|--------|
50
45
  | `/project` | List and select a project |
51
- | `/project {keywords}` | Fuzzy-match and load |
52
- | `/project create {name}` | Create new project |
46
+ | `/project {keywords}` | **Search** for existing project (fuzzy-match and load) |
47
+ | `/project create {name}` | Create new project (requires `create` keyword) |
53
48
  | `/project update` | Update from conversation context |
54
49
 
50
+ **IMPORTANT:** The default action for `/project {keywords}` is to **SEARCH** for existing projects, NOT create. Only use `/project create {name}` when the user explicitly wants to create a new project.
51
+
55
52
  ## Loading a Project
56
53
 
57
54
  **Trigger:** `/project {keywords}` or user asks to load/open a project
58
55
 
59
- **TLDR:** Fuzzy-match keywords against project folders, read PROJECT.md, summarize context.
56
+ **TLDR:** Search for and load an existing project. Fuzzy-match keywords against project folders, read PROJECT.md, summarize context.
60
57
 
61
58
  Full procedure: `references/loading.md`
62
59
 
@@ -1,11 +1,6 @@
1
1
  name: project
2
- description: >-
3
- Manage project context files for persistent AI memory across sessions.
4
- Load project context before working (/project {name}), update with
5
- new learnings (/project update), or create new projects (/project create).
6
- Use when working on multi-session features, refactors, or any work that
7
- benefits from accumulated context.
8
- version: 0.1.0
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.1
9
4
  status: beta
10
5
  dependencies: []
11
6
  provides_output: false
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Manage project context files for persistent AI memory across sessions
3
- argument-hint: [name | update [name] | create [name]]
3
+ argument-hint: "[{keywords} | update | create {name}]"
4
4
  allowed-tools: Read, Write, Edit, Glob, Bash(mkdir:*), Bash(ls:*)
5
5
  ---
6
6
 
@@ -12,20 +12,25 @@ Entry point for project context management. See the **project skill** for full b
12
12
 
13
13
  $ARGUMENTS
14
14
 
15
+ ## Default Behavior
16
+
17
+ **IMPORTANT:** When given keywords (e.g., `/project audit-log`), the default action is to **SEARCH** for existing projects, NOT create. Only create a project when the `create` keyword is explicitly used.
18
+
15
19
  ## Usage
16
20
 
17
21
  ```
18
22
  /project # List and select a project
19
- /project {keywords} # Fuzzy-match and load
23
+ /project {keywords} # SEARCH: Fuzzy-match and load existing project
20
24
  /project update # Update from conversation context
21
25
  /project update {name} # Update specific project
22
26
  /project create # Create new project interactively
23
- /project create {name} # Create with name
27
+ /project create {name} # Create with name (requires "create" keyword)
24
28
  ```
25
29
 
26
30
  ## Configuration
27
31
 
28
- From `~/.droid/skills/project/overrides.yaml`:
32
+ **ALWAYS read `~/.droid/skills/project/overrides.yaml` first.** Use configured values if present, only fall back to defaults if missing.
33
+
29
34
  - `projects_dir` - Where projects live (default varies by AI tool)
30
35
  - `preset` - Template format: `markdown` or `obsidian`
31
36
 
@@ -4,21 +4,26 @@
4
4
 
5
5
  ## Procedure
6
6
 
7
- 1. **Get project name**
7
+ 1. **Read config first**
8
+ - Read `~/.droid/skills/project/overrides.yaml`
9
+ - Use `projects_dir` if configured, otherwise use default for current AI tool
10
+ - Use `preset` if configured (markdown or obsidian)
11
+
12
+ 2. **Get project name**
8
13
  - Use provided name, or ask if not provided
9
14
  - Convert to kebab-case for folder name
10
15
  - Convert to Title Case for display name
11
16
 
12
- 2. **Create project folder**
17
+ 3. **Create project folder**
13
18
  - Path: `{projects_dir}/{kebab-case-name}/`
14
19
  - Verify folder doesn't already exist
15
20
 
16
- 3. **Create files from templates** (see `templates.md`)
21
+ 4. **Create files from templates** (see `templates.md`)
17
22
  - `PROJECT.md` - Main context file
18
23
  - `CHANGELOG.md` - Version history
19
24
  - Format varies by `preset` config (markdown vs obsidian)
20
25
 
21
- 4. **Confirm creation**
26
+ 5. **Confirm creation**
22
27
  - Show created folder path
23
28
  - Offer to help fill in sections (Overview, Goals, Technical Details)
24
29
 
@@ -2,25 +2,31 @@
2
2
 
3
3
  **Trigger:** `/project {keywords}` or user asks to load/open a project
4
4
 
5
+ **IMPORTANT:** This is a SEARCH operation. When keywords are provided, search for existing projects - do NOT create a new project. Creating requires the explicit `/project create {name}` command.
6
+
5
7
  ## Procedure
6
8
 
7
- 1. **List projects** in configured `projects_dir`
9
+ 1. **Read config first**
10
+ - Read `~/.droid/skills/project/overrides.yaml`
11
+ - Use `projects_dir` if configured, otherwise use default for current AI tool
12
+
13
+ 2. **List projects** in configured `projects_dir`
8
14
  - Each subfolder with a `PROJECT.md` is a project
9
15
 
10
- 2. **If no name provided:**
16
+ 3. **If no name provided:**
11
17
  - Use AskUserQuestion to present available projects
12
18
  - Let user select which to load
13
19
 
14
- 3. **If name/keywords provided:**
20
+ 4. **If name/keywords provided:**
15
21
  - Parse as space-separated keywords (e.g., "transaction templates" → `["transaction", "templates"]`)
16
22
  - Find folders where name contains ALL keywords (case-insensitive, hyphens as word separators)
17
23
 
18
- 4. **Based on matches:**
24
+ 5. **Based on matches:**
19
25
  - **No matches**: List available projects, ask user to select
20
26
  - **One match**: Read `{folder}/PROJECT.md`
21
27
  - **Multiple matches**: Use AskUserQuestion to select from matches
22
28
 
23
- 5. **After loading:**
29
+ 6. **After loading:**
24
30
  - Confirm which project was loaded
25
31
  - Summarize key context (2-3 sentences)
26
32
  - Use project contents for all subsequent work in the session