@orderful/droid 0.17.1 → 0.18.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 (58) hide show
  1. package/.github/workflows/claude-code-review.yml +58 -0
  2. package/.github/workflows/claude.yml +50 -0
  3. package/CHANGELOG.md +28 -0
  4. package/dist/bin/droid.js +33 -1
  5. package/dist/commands/tui.d.ts.map +1 -1
  6. package/dist/index.js +16 -0
  7. package/dist/lib/skills.d.ts.map +1 -1
  8. package/dist/lib/tools.d.ts.map +1 -1
  9. package/dist/tools/brain/TOOL.yaml +3 -3
  10. package/{src/tools/brain/skills/brain → dist/tools/brain/skills/droid-brain}/SKILL.md +1 -1
  11. package/dist/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/SKILL.md +1 -1
  12. package/dist/tools/coach/TOOL.yaml +2 -2
  13. package/dist/tools/coach/skills/{coach → droid-coach}/SKILL.md +1 -1
  14. package/dist/tools/code-review/TOOL.yaml +2 -2
  15. package/dist/tools/code-review/skills/{code-review → droid-code-review}/SKILL.md +1 -1
  16. package/dist/tools/comments/TOOL.yaml +2 -2
  17. package/dist/tools/comments/skills/{comments → droid-comments}/SKILL.md +1 -1
  18. package/dist/tools/project/TOOL.yaml +2 -2
  19. package/{src/tools/project/skills/project → dist/tools/project/skills/droid-project}/SKILL.md +1 -1
  20. package/package.json +1 -1
  21. package/src/commands/tui.tsx +10 -2
  22. package/src/lib/skills.ts +47 -0
  23. package/src/lib/tools.ts +16 -2
  24. package/src/tools/brain/TOOL.yaml +3 -3
  25. package/{dist/tools/brain/skills/brain → src/tools/brain/skills/droid-brain}/SKILL.md +1 -1
  26. package/src/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/SKILL.md +1 -1
  27. package/src/tools/coach/TOOL.yaml +2 -2
  28. package/src/tools/coach/skills/{coach → droid-coach}/SKILL.md +1 -1
  29. package/src/tools/code-review/TOOL.yaml +2 -2
  30. package/src/tools/code-review/skills/{code-review → droid-code-review}/SKILL.md +1 -1
  31. package/src/tools/comments/TOOL.yaml +2 -2
  32. package/src/tools/comments/skills/{comments → droid-comments}/SKILL.md +1 -1
  33. package/src/tools/project/TOOL.yaml +2 -2
  34. package/{dist/tools/project/skills/project → src/tools/project/skills/droid-project}/SKILL.md +1 -1
  35. /package/dist/tools/brain/skills/{brain → droid-brain}/references/metadata.md +0 -0
  36. /package/dist/tools/brain/skills/{brain → droid-brain}/references/naming.md +0 -0
  37. /package/dist/tools/brain/skills/{brain → droid-brain}/references/templates.md +0 -0
  38. /package/dist/tools/brain/skills/{brain → droid-brain}/references/workflows.md +0 -0
  39. /package/dist/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/references/templates.md +0 -0
  40. /package/dist/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/references/workflows.md +0 -0
  41. /package/dist/tools/project/skills/{project → droid-project}/references/changelog.md +0 -0
  42. /package/dist/tools/project/skills/{project → droid-project}/references/creating.md +0 -0
  43. /package/dist/tools/project/skills/{project → droid-project}/references/loading.md +0 -0
  44. /package/dist/tools/project/skills/{project → droid-project}/references/templates.md +0 -0
  45. /package/dist/tools/project/skills/{project → droid-project}/references/updating.md +0 -0
  46. /package/dist/tools/project/skills/{project → droid-project}/references/versioning.md +0 -0
  47. /package/src/tools/brain/skills/{brain → droid-brain}/references/metadata.md +0 -0
  48. /package/src/tools/brain/skills/{brain → droid-brain}/references/naming.md +0 -0
  49. /package/src/tools/brain/skills/{brain → droid-brain}/references/templates.md +0 -0
  50. /package/src/tools/brain/skills/{brain → droid-brain}/references/workflows.md +0 -0
  51. /package/src/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/references/templates.md +0 -0
  52. /package/src/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/references/workflows.md +0 -0
  53. /package/src/tools/project/skills/{project → droid-project}/references/changelog.md +0 -0
  54. /package/src/tools/project/skills/{project → droid-project}/references/creating.md +0 -0
  55. /package/src/tools/project/skills/{project → droid-project}/references/loading.md +0 -0
  56. /package/src/tools/project/skills/{project → droid-project}/references/templates.md +0 -0
  57. /package/src/tools/project/skills/{project → droid-project}/references/updating.md +0 -0
  58. /package/src/tools/project/skills/{project → droid-project}/references/versioning.md +0 -0
@@ -0,0 +1,58 @@
1
+ name: Claude Code Review
2
+
3
+ on:
4
+ pull_request:
5
+ # Run only when PR is opened or converted from draft to ready
6
+ types: [opened, ready_for_review]
7
+ # Optional: Only run on specific file changes
8
+ # paths:
9
+ # - "src/**/*.ts"
10
+ # - "src/**/*.tsx"
11
+ # - "src/**/*.js"
12
+ # - "src/**/*.jsx"
13
+
14
+ jobs:
15
+ claude-review:
16
+ # Optional: Filter by PR author
17
+ # if: |
18
+ # github.event.pull_request.user.login == 'external-contributor' ||
19
+ # github.event.pull_request.user.login == 'new-developer' ||
20
+ # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
21
+
22
+ runs-on: ubuntu-latest
23
+ permissions:
24
+ contents: read
25
+ pull-requests: read
26
+ issues: read
27
+ id-token: write
28
+
29
+ steps:
30
+ - name: Checkout repository
31
+ uses: actions/checkout@v4
32
+ with:
33
+ fetch-depth: 1
34
+
35
+ - name: Run Claude Code Review
36
+ id: claude-review
37
+ uses: anthropics/claude-code-action@v1
38
+ with:
39
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
40
+ prompt: |
41
+ REPO: ${{ github.repository }}
42
+ PR NUMBER: ${{ github.event.pull_request.number }}
43
+
44
+ Please review this pull request and provide feedback on:
45
+ - Code quality and best practices
46
+ - Potential bugs or issues
47
+ - Performance considerations
48
+ - Security concerns
49
+ - Test coverage
50
+
51
+ Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.
52
+
53
+ Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
54
+
55
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
56
+ # or https://code.claude.com/docs/en/cli-reference for available options
57
+ claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'
58
+
@@ -0,0 +1,50 @@
1
+ name: Claude Code
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_review_comment:
7
+ types: [created]
8
+ issues:
9
+ types: [opened, assigned]
10
+ pull_request_review:
11
+ types: [submitted]
12
+
13
+ jobs:
14
+ claude:
15
+ if: |
16
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20
+ runs-on: ubuntu-latest
21
+ permissions:
22
+ contents: read
23
+ pull-requests: read
24
+ issues: read
25
+ id-token: write
26
+ actions: read # Required for Claude to read CI results on PRs
27
+ steps:
28
+ - name: Checkout repository
29
+ uses: actions/checkout@v4
30
+ with:
31
+ fetch-depth: 1
32
+
33
+ - name: Run Claude Code
34
+ id: claude
35
+ uses: anthropics/claude-code-action@v1
36
+ with:
37
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
38
+
39
+ # This is an optional setting that allows Claude to read CI results on PRs
40
+ additional_permissions: |
41
+ actions: read
42
+
43
+ # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
44
+ # prompt: 'Update the pull request description to include a summary of changes.'
45
+
46
+ # Optional: Add claude_args to customize behavior and configuration
47
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
48
+ # or https://code.claude.com/docs/en/cli-reference for available options
49
+ # claude_args: '--allowed-tools Bash(gh pr:*)'
50
+
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @orderful/droid
2
2
 
3
+ ## 0.18.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#102](https://github.com/Orderful/droid/pull/102) [`e45e61d`](https://github.com/Orderful/droid/commit/e45e61d812fe9d58288d7976650dda474f568516) Thanks [@frytyler](https://github.com/frytyler)! - **BREAKING:** Rename skill directories to `droid-*` prefix as workaround for Claude Code bug
8
+
9
+ > **Versioning Note:** This changeset uses `minor` for the droid package (0.17.2 → 0.18.0) per pre-1.0 semver convention where breaking changes are allowed in minor bumps. Individual tool versions receive `patch` bumps (0.2.4 → 0.2.5, etc.) since the tool interface remains unchanged - only internal skill directories are renamed.
10
+
11
+ Claude Code v2.0.75+ blocks direct user invocation of slash commands when a skill directory has the same name as the command. Renamed all skill directories from `{name}/` to `droid-{name}/` to avoid collision:
12
+ - `comments/` → `droid-comments/`
13
+ - `code-review/` → `droid-code-review/`
14
+ - `coach/` → `droid-coach/`
15
+ - `project/` → `droid-project/`
16
+ - `brain/` → `droid-brain/`
17
+ - `brain-obsidian/` → `droid-brain-obsidian/`
18
+
19
+ Command names remain unchanged (`/brain`, `/comments`, etc.). Tool names also remain unchanged - only internal skill directories are renamed.
20
+
21
+ **Migration:** After updating, affected tools will show as "update available" in the TUI. Click "Update" to automatically migrate to new skill directories. Old directories and config entries are automatically cleaned up during update - no manual intervention needed.
22
+
23
+ Bug report: https://github.com/anthropics/claude-code/issues/14945
24
+
25
+ ## 0.17.2
26
+
27
+ ### Patch Changes
28
+
29
+ - [#92](https://github.com/Orderful/droid/pull/92) [`865ab78`](https://github.com/Orderful/droid/commit/865ab7894c49e168ea677d9906486ac1de29fcee) Thanks [@frytyler](https://github.com/frytyler)! - Fix auto-update for app not triggering when enabled
30
+
3
31
  ## 0.17.1
4
32
 
5
33
  ### Patch Changes
package/dist/bin/droid.js CHANGED
@@ -334,6 +334,16 @@ function getInstalledToolVersion(toolName) {
334
334
  if (installedTools[skillName]) {
335
335
  return installedTools[skillName].version;
336
336
  }
337
+ if (skillName.startsWith("droid-")) {
338
+ const oldSkillName = skillName.replace(/^droid-/, "");
339
+ if (installedTools[oldSkillName]) {
340
+ const version2 = installedTools[oldSkillName].version;
341
+ delete installedTools[oldSkillName];
342
+ setPlatformTools(config, installedTools);
343
+ saveConfig(config);
344
+ return version2;
345
+ }
346
+ }
337
347
  }
338
348
  return null;
339
349
  }
@@ -686,6 +696,22 @@ function installSkill(skillName) {
686
696
  const targetSkillDir = join6(skillsPath, skillName);
687
697
  const commandsPath = getCommandsInstallPath(config.platform);
688
698
  const tools = getPlatformTools(config);
699
+ if (skillName.startsWith("droid-")) {
700
+ const oldSkillName = skillName.replace(/^droid-/, "");
701
+ const oldSkillDir = join6(skillsPath, oldSkillName);
702
+ if (existsSync4(oldSkillDir)) {
703
+ try {
704
+ rmSync(oldSkillDir, { recursive: true });
705
+ } catch (error) {
706
+ console.warn(`Warning: Could not remove old skill directory ${oldSkillDir}: ${error}`);
707
+ }
708
+ }
709
+ if (tools[oldSkillName]) {
710
+ delete tools[oldSkillName];
711
+ setPlatformTools(config, tools);
712
+ saveConfig(config);
713
+ }
714
+ }
689
715
  const commandsSource = join6(toolDir, "commands");
690
716
  const agentsSource = join6(toolDir, "agents");
691
717
  if (!tools[skillName]) {
@@ -1407,7 +1433,7 @@ async function updateCommand(tool, options) {
1407
1433
 
1408
1434
  // src/commands/tui.tsx
1409
1435
  import { render, Box as Box12, Text as Text13, useInput as useInput7, useApp as useApp2 } from "ink";
1410
- import { useState as useState9 } from "react";
1436
+ import { useState as useState9, useEffect } from "react";
1411
1437
 
1412
1438
  // src/commands/tui/constants.ts
1413
1439
  var colors = {
@@ -2709,6 +2735,12 @@ function App() {
2709
2735
  }
2710
2736
  }
2711
2737
  });
2738
+ useEffect(() => {
2739
+ const autoUpdateConfig = getAutoUpdateConfig();
2740
+ if (autoUpdateConfig.app && updateInfo.hasUpdate && view === "welcome" && !isUpdating) {
2741
+ handleUpdate();
2742
+ }
2743
+ }, [updateInfo.hasUpdate, view, isUpdating, handleUpdate]);
2712
2744
  const proceedToNextView = () => {
2713
2745
  if (!configExists()) {
2714
2746
  setView("setup");
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/commands/tui.tsx"],"names":[],"mappings":"AA2cA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBhD"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/commands/tui.tsx"],"names":[],"mappings":"AAmdA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBhD"}
package/dist/index.js CHANGED
@@ -694,6 +694,22 @@ function installSkill(skillName) {
694
694
  const targetSkillDir = join6(skillsPath, skillName);
695
695
  const commandsPath = getCommandsInstallPath(config.platform);
696
696
  const tools = getPlatformTools(config);
697
+ if (skillName.startsWith("droid-")) {
698
+ const oldSkillName = skillName.replace(/^droid-/, "");
699
+ const oldSkillDir = join6(skillsPath, oldSkillName);
700
+ if (existsSync4(oldSkillDir)) {
701
+ try {
702
+ rmSync(oldSkillDir, { recursive: true });
703
+ } catch (error) {
704
+ console.warn(`Warning: Could not remove old skill directory ${oldSkillDir}: ${error}`);
705
+ }
706
+ }
707
+ if (tools[oldSkillName]) {
708
+ delete tools[oldSkillName];
709
+ setPlatformTools(config, tools);
710
+ saveConfig(config);
711
+ }
712
+ }
697
713
  const commandsSource = join6(toolDir, "commands");
698
714
  const agentsSource = join6(toolDir, "agents");
699
715
  if (!tools[skillName]) {
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/lib/tools.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAuC,MAAM,SAAS,CAAC;AAMjF;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAyBrE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,EAAE,CAmBhD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAczD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBvE;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAuBpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,EAAE,CAyBtD"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/lib/tools.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAyD,MAAM,SAAS,CAAC;AAMnG;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAyBrE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,EAAE,CAmBhD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAczD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiCvE;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAuBpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,EAAE,CAyBtD"}
@@ -1,13 +1,13 @@
1
1
  name: brain
2
2
  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."
3
- version: 0.2.1
3
+ version: 0.2.2
4
4
  status: beta
5
5
 
6
6
  includes:
7
7
  skills:
8
- - name: brain
8
+ - name: droid-brain
9
9
  required: true
10
- - name: brain-obsidian
10
+ - name: droid-brain-obsidian
11
11
  required: false
12
12
  description: "Obsidian vault integration with YAML frontmatter and wikilinks"
13
13
  commands:
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: brain
2
+ name: droid-brain
3
3
  description: "Collaborative scratchpad for planning and research. Use when planning a feature, exploring a problem, or capturing thinking that should persist across sessions. User prompts like 'let's think through', 'open a scratchpad', 'plan this out', 'use our brain'."
4
4
  globs:
5
5
  - "**/brain/**/*.md"
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: brain-obsidian
2
+ name: droid-brain-obsidian
3
3
  description: "Obsidian extension for brain skill with YAML frontmatter, wikilinks, and PARA folder organization. Use when your brain docs live in an Obsidian vault."
4
4
  globs:
5
5
  - "**/brain/**/*.md"
@@ -1,11 +1,11 @@
1
1
  name: coach
2
2
  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."
3
- version: 0.1.1
3
+ version: 0.1.2
4
4
  status: beta
5
5
 
6
6
  includes:
7
7
  skills:
8
- - name: coach
8
+ - name: droid-coach
9
9
  required: true
10
10
  commands:
11
11
  - coach
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: coach
2
+ name: droid-coach
3
3
  description: "Learning-mode AI assistance - scaffolds don't implement, questions don't fix. Use when learning a new codebase, wanting to understand deeply, or building skills to retain. User prompts like 'coach me on', 'help me think through', 'I want to learn how to', 'don't just give me the answer'."
4
4
  alwaysApply: false
5
5
  allowed-tools: Read, Grep, Glob
@@ -1,11 +1,11 @@
1
1
  name: code-review
2
2
  description: "Comprehensive code review using specialized agents. Reviews PRs, staged changes, branches, or specific files with confidence scoring."
3
- version: 0.1.1
3
+ version: 0.1.2
4
4
  status: alpha
5
5
 
6
6
  includes:
7
7
  skills:
8
- - name: code-review
8
+ - name: droid-code-review
9
9
  required: true
10
10
  commands:
11
11
  - code-review
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: code-review
2
+ name: droid-code-review
3
3
  description: "Comprehensive code review using specialized agents. Use when reviewing PRs, checking staged changes, or analysing code quality. User prompts like 'review this PR', 'check my changes', 'review before I commit'."
4
4
  globs:
5
5
  - "**/*"
@@ -1,11 +1,11 @@
1
1
  name: comments
2
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.4
3
+ version: 0.2.5
4
4
  status: beta
5
5
 
6
6
  includes:
7
7
  skills:
8
- - name: comments
8
+ - name: droid-comments
9
9
  required: true
10
10
  commands:
11
11
  - comments
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: comments
2
+ name: droid-comments
3
3
  description: "Inline conversations using @droid/@user markers in any file. Use when leaving async questions in code or having discussion that should stay near the code. User prompts like 'check for comments', 'address the @droid markers', 'clean up resolved comments'."
4
4
  globs:
5
5
  - "**/*"
@@ -1,11 +1,11 @@
1
1
  name: project
2
2
  description: "Manage project context files for persistent AI memory across sessions. Load, update, or create project context before working on multi-session features."
3
- version: 0.1.3
3
+ version: 0.1.4
4
4
  status: beta
5
5
 
6
6
  includes:
7
7
  skills:
8
- - name: project
8
+ - name: droid-project
9
9
  required: true
10
10
  commands:
11
11
  - project
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: project
2
+ name: droid-project
3
3
  description: "Persistent project context for AI memory across sessions. Use when working on multi-session features, refactors, or any work that benefits from accumulated context. User prompts like 'load the project', 'update project context', 'what's the current project?'."
4
4
  globs:
5
5
  - "**/PROJECT.md"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderful/droid",
3
- "version": "0.17.1",
3
+ "version": "0.18.0",
4
4
  "description": "AI workflow toolkit for sharing skills, commands, and agents across the team",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,5 +1,5 @@
1
1
  import { render, Box, Text, useInput, useApp } from 'ink';
2
- import { useState } from 'react';
2
+ import { useState, useEffect } from 'react';
3
3
  import {
4
4
  getBundledSkills,
5
5
  installSkill,
@@ -7,7 +7,7 @@ import {
7
7
  updateSkill,
8
8
  } from '../lib/skills';
9
9
  import { getBundledTools, isToolInstalled, getToolUpdateStatus } from '../lib/tools';
10
- import { configExists, loadConfig } from '../lib/config';
10
+ import { configExists, loadConfig, getAutoUpdateConfig } from '../lib/config';
11
11
  import { Platform, type ConfigOption, type ToolManifest } from '../lib/types';
12
12
  import { getVersion } from '../lib/version';
13
13
  import { type Tab, type View } from './tui/types';
@@ -60,6 +60,14 @@ function App() {
60
60
  },
61
61
  });
62
62
 
63
+ // Auto-update app if enabled and update available
64
+ useEffect(() => {
65
+ const autoUpdateConfig = getAutoUpdateConfig();
66
+ if (autoUpdateConfig.app && updateInfo.hasUpdate && view === 'welcome' && !isUpdating) {
67
+ handleUpdate();
68
+ }
69
+ }, [updateInfo.hasUpdate, view, isUpdating, handleUpdate]);
70
+
63
71
  const proceedToNextView = () => {
64
72
  if (!configExists()) {
65
73
  setView('setup');
package/src/lib/skills.ts CHANGED
@@ -378,6 +378,53 @@ export function installSkill(skillName: string): { success: boolean; message: st
378
378
  const commandsPath = getCommandsInstallPath(config.platform);
379
379
  const tools = getPlatformTools(config);
380
380
 
381
+ // Clean up old skill directory if this is a renamed skill (v0.18.0 workaround for Claude Code bug)
382
+ // Renamed skills have 'droid-' prefix, so check for old directory without prefix
383
+ // Bug: https://github.com/anthropics/claude-code/issues/14945
384
+ //
385
+ // TO REVERSE WHEN BUG IS FIXED:
386
+ // 1. Rename directories: droid-comments/ → comments/, droid-brain/ → brain/, etc.
387
+ // 2. Update TOOL.yaml manifests back to original skill names
388
+ // 3. Update SKILL.md frontmatter back to original names
389
+ // 4. Replace this cleanup logic with inverse:
390
+ // const renamedSkills = ['comments', 'brain', 'project', 'coach', 'code-review', 'brain-obsidian'];
391
+ // if (renamedSkills.includes(skillName)) {
392
+ // const droidPrefixedName = `droid-${skillName}`;
393
+ // const droidPrefixedDir = join(skillsPath, droidPrefixedName);
394
+ // if (existsSync(droidPrefixedDir)) {
395
+ // rmSync(droidPrefixedDir, { recursive: true });
396
+ // }
397
+ // if (tools[droidPrefixedName]) {
398
+ // delete tools[droidPrefixedName];
399
+ // }
400
+ // }
401
+ // 5. Bump tool versions and create changeset
402
+ // Migration logic: Handle skills renamed from {name} to droid-{name} (v0.18.0 workaround)
403
+ // This handles both fresh installs and updates where old directory/config entries exist
404
+ if (skillName.startsWith('droid-')) {
405
+ const oldSkillName = skillName.replace(/^droid-/, '');
406
+ const oldSkillDir = join(skillsPath, oldSkillName);
407
+
408
+ // Remove or migrate old skill directory
409
+ if (existsSync(oldSkillDir)) {
410
+ try {
411
+ rmSync(oldSkillDir, { recursive: true });
412
+ } catch (error) {
413
+ // Non-fatal: Log warning but continue installation
414
+ console.warn(`Warning: Could not remove old skill directory ${oldSkillDir}: ${error}`);
415
+ }
416
+ }
417
+
418
+ // Migrate old config entry if it exists
419
+ // This allows tools to show as "update available" rather than "not installed"
420
+ if (tools[oldSkillName]) {
421
+ delete tools[oldSkillName];
422
+ // Save immediately to ensure cleanup is persisted (matches pattern in tools.ts)
423
+ setPlatformTools(config, tools);
424
+ saveConfig(config);
425
+ }
426
+ }
427
+
381
428
  // Commands and agents are at the tool level, not skill level
382
429
  const commandsSource = join(toolDir, 'commands');
383
430
  const agentsSource = join(toolDir, 'agents');
package/src/lib/tools.ts CHANGED
@@ -2,8 +2,8 @@ import { existsSync, readdirSync, readFileSync } from 'fs';
2
2
  import { join, dirname } from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
  import YAML from 'yaml';
5
- import { loadConfig } from './config';
6
- import { type ToolManifest, type ToolIncludes, getPlatformTools } from './types';
5
+ import { loadConfig, saveConfig } from './config';
6
+ import { type ToolManifest, type ToolIncludes, getPlatformTools, setPlatformTools } from './types';
7
7
  import { compareSemver } from './version';
8
8
 
9
9
  const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -108,6 +108,20 @@ export function getInstalledToolVersion(toolName: string): string | null {
108
108
  if (installedTools[skillName]) {
109
109
  return installedTools[skillName].version;
110
110
  }
111
+
112
+ // Migration fallback (v0.18.0): Check for old skill name without droid- prefix
113
+ // This allows tools to show as "update available" rather than "not installed"
114
+ if (skillName.startsWith('droid-')) {
115
+ const oldSkillName = skillName.replace(/^droid-/, '');
116
+ if (installedTools[oldSkillName]) {
117
+ const version = installedTools[oldSkillName].version;
118
+ // Clean up stale config entry now that we've detected it
119
+ delete installedTools[oldSkillName];
120
+ setPlatformTools(config, installedTools);
121
+ saveConfig(config);
122
+ return version;
123
+ }
124
+ }
111
125
  }
112
126
 
113
127
  return null;
@@ -1,13 +1,13 @@
1
1
  name: brain
2
2
  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."
3
- version: 0.2.1
3
+ version: 0.2.2
4
4
  status: beta
5
5
 
6
6
  includes:
7
7
  skills:
8
- - name: brain
8
+ - name: droid-brain
9
9
  required: true
10
- - name: brain-obsidian
10
+ - name: droid-brain-obsidian
11
11
  required: false
12
12
  description: "Obsidian vault integration with YAML frontmatter and wikilinks"
13
13
  commands:
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: brain
2
+ name: droid-brain
3
3
  description: "Collaborative scratchpad for planning and research. Use when planning a feature, exploring a problem, or capturing thinking that should persist across sessions. User prompts like 'let's think through', 'open a scratchpad', 'plan this out', 'use our brain'."
4
4
  globs:
5
5
  - "**/brain/**/*.md"
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: brain-obsidian
2
+ name: droid-brain-obsidian
3
3
  description: "Obsidian extension for brain skill with YAML frontmatter, wikilinks, and PARA folder organization. Use when your brain docs live in an Obsidian vault."
4
4
  globs:
5
5
  - "**/brain/**/*.md"
@@ -1,11 +1,11 @@
1
1
  name: coach
2
2
  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."
3
- version: 0.1.1
3
+ version: 0.1.2
4
4
  status: beta
5
5
 
6
6
  includes:
7
7
  skills:
8
- - name: coach
8
+ - name: droid-coach
9
9
  required: true
10
10
  commands:
11
11
  - coach
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: coach
2
+ name: droid-coach
3
3
  description: "Learning-mode AI assistance - scaffolds don't implement, questions don't fix. Use when learning a new codebase, wanting to understand deeply, or building skills to retain. User prompts like 'coach me on', 'help me think through', 'I want to learn how to', 'don't just give me the answer'."
4
4
  alwaysApply: false
5
5
  allowed-tools: Read, Grep, Glob
@@ -1,11 +1,11 @@
1
1
  name: code-review
2
2
  description: "Comprehensive code review using specialized agents. Reviews PRs, staged changes, branches, or specific files with confidence scoring."
3
- version: 0.1.1
3
+ version: 0.1.2
4
4
  status: alpha
5
5
 
6
6
  includes:
7
7
  skills:
8
- - name: code-review
8
+ - name: droid-code-review
9
9
  required: true
10
10
  commands:
11
11
  - code-review
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: code-review
2
+ name: droid-code-review
3
3
  description: "Comprehensive code review using specialized agents. Use when reviewing PRs, checking staged changes, or analysing code quality. User prompts like 'review this PR', 'check my changes', 'review before I commit'."
4
4
  globs:
5
5
  - "**/*"
@@ -1,11 +1,11 @@
1
1
  name: comments
2
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.4
3
+ version: 0.2.5
4
4
  status: beta
5
5
 
6
6
  includes:
7
7
  skills:
8
- - name: comments
8
+ - name: droid-comments
9
9
  required: true
10
10
  commands:
11
11
  - comments
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: comments
2
+ name: droid-comments
3
3
  description: "Inline conversations using @droid/@user markers in any file. Use when leaving async questions in code or having discussion that should stay near the code. User prompts like 'check for comments', 'address the @droid markers', 'clean up resolved comments'."
4
4
  globs:
5
5
  - "**/*"
@@ -1,11 +1,11 @@
1
1
  name: project
2
2
  description: "Manage project context files for persistent AI memory across sessions. Load, update, or create project context before working on multi-session features."
3
- version: 0.1.3
3
+ version: 0.1.4
4
4
  status: beta
5
5
 
6
6
  includes:
7
7
  skills:
8
- - name: project
8
+ - name: droid-project
9
9
  required: true
10
10
  commands:
11
11
  - project
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: project
2
+ name: droid-project
3
3
  description: "Persistent project context for AI memory across sessions. Use when working on multi-session features, refactors, or any work that benefits from accumulated context. User prompts like 'load the project', 'update project context', 'what's the current project?'."
4
4
  globs:
5
5
  - "**/PROJECT.md"