@orderful/droid 0.10.5 → 0.11.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.
Files changed (167) hide show
  1. package/.claude/CLAUDE.md +13 -6
  2. package/CHANGELOG.md +19 -0
  3. package/README.md +23 -24
  4. package/dist/bin/droid.js +9 -9
  5. package/dist/bin/droid.js.map +1 -1
  6. package/dist/commands/install.d.ts +1 -1
  7. package/dist/commands/install.d.ts.map +1 -1
  8. package/dist/commands/install.js +24 -23
  9. package/dist/commands/install.js.map +1 -1
  10. package/dist/commands/setup.d.ts +3 -3
  11. package/dist/commands/setup.d.ts.map +1 -1
  12. package/dist/commands/setup.js +32 -28
  13. package/dist/commands/setup.js.map +1 -1
  14. package/dist/commands/skills.d.ts.map +1 -1
  15. package/dist/commands/skills.js +60 -53
  16. package/dist/commands/skills.js.map +1 -1
  17. package/dist/commands/tui.d.ts.map +1 -1
  18. package/dist/commands/tui.js +213 -319
  19. package/dist/commands/tui.js.map +1 -1
  20. package/dist/commands/uninstall.d.ts +1 -1
  21. package/dist/commands/uninstall.d.ts.map +1 -1
  22. package/dist/commands/uninstall.js +15 -6
  23. package/dist/commands/uninstall.js.map +1 -1
  24. package/dist/commands/update.d.ts +2 -2
  25. package/dist/commands/update.d.ts.map +1 -1
  26. package/dist/commands/update.js +9 -9
  27. package/dist/commands/update.js.map +1 -1
  28. package/dist/lib/agents.d.ts +11 -10
  29. package/dist/lib/agents.d.ts.map +1 -1
  30. package/dist/lib/agents.js +52 -54
  31. package/dist/lib/agents.js.map +1 -1
  32. package/dist/lib/config.d.ts +1 -0
  33. package/dist/lib/config.d.ts.map +1 -1
  34. package/dist/lib/config.js +42 -5
  35. package/dist/lib/config.js.map +1 -1
  36. package/dist/lib/platforms.d.ts +41 -0
  37. package/dist/lib/platforms.d.ts.map +1 -0
  38. package/dist/lib/platforms.js +52 -0
  39. package/dist/lib/platforms.js.map +1 -0
  40. package/dist/lib/skills.d.ts +19 -11
  41. package/dist/lib/skills.d.ts.map +1 -1
  42. package/dist/lib/skills.js +125 -99
  43. package/dist/lib/skills.js.map +1 -1
  44. package/dist/lib/tools.d.ts +30 -0
  45. package/dist/lib/tools.d.ts.map +1 -0
  46. package/dist/lib/tools.js +116 -0
  47. package/dist/lib/tools.js.map +1 -0
  48. package/dist/lib/types.d.ts +45 -2
  49. package/dist/lib/types.d.ts.map +1 -1
  50. package/dist/lib/types.js +24 -5
  51. package/dist/lib/types.js.map +1 -1
  52. package/dist/tools/brain/TOOL.yaml +27 -0
  53. package/dist/tools/coach/TOOL.yaml +21 -0
  54. package/dist/tools/code-review/TOOL.yaml +18 -0
  55. package/dist/tools/comments/TOOL.yaml +27 -0
  56. package/dist/{skills → tools/comments/skills}/comments/SKILL.md +12 -3
  57. package/dist/{skills → tools/comments/skills}/comments/SKILL.yaml +1 -1
  58. package/dist/tools/project/TOOL.yaml +26 -0
  59. package/package.json +2 -2
  60. package/src/bin/droid.ts +9 -9
  61. package/src/commands/install.ts +24 -23
  62. package/src/commands/setup.test.ts +2 -2
  63. package/src/commands/setup.ts +33 -29
  64. package/src/commands/skills.ts +63 -64
  65. package/src/commands/tui.tsx +432 -578
  66. package/src/commands/uninstall.ts +17 -6
  67. package/src/commands/update.ts +10 -10
  68. package/src/lib/agents.ts +58 -58
  69. package/src/lib/config.test.ts +0 -10
  70. package/src/lib/config.ts +47 -5
  71. package/src/lib/platforms.ts +59 -0
  72. package/src/lib/skills.test.ts +53 -28
  73. package/src/lib/skills.ts +134 -101
  74. package/src/lib/tools.ts +140 -0
  75. package/src/lib/types.test.ts +15 -7
  76. package/src/lib/types.ts +63 -2
  77. package/src/tools/brain/TOOL.yaml +27 -0
  78. package/src/tools/coach/TOOL.yaml +21 -0
  79. package/src/tools/code-review/TOOL.yaml +18 -0
  80. package/src/tools/comments/TOOL.yaml +27 -0
  81. package/src/{skills → tools/comments/skills}/comments/SKILL.md +12 -3
  82. package/src/{skills → tools/comments/skills}/comments/SKILL.yaml +1 -1
  83. package/src/tools/project/TOOL.yaml +26 -0
  84. package/dist/agents/README.md +0 -137
  85. package/src/agents/README.md +0 -137
  86. /package/dist/{skills → tools}/README.md +0 -0
  87. /package/dist/{skills → tools}/brain/commands/README.md +0 -0
  88. /package/dist/{skills → tools}/brain/commands/brain.md +0 -0
  89. /package/dist/{skills → tools}/brain/commands/scratchpad.md +0 -0
  90. /package/dist/{skills → tools/brain/skills}/brain/SKILL.md +0 -0
  91. /package/dist/{skills → tools/brain/skills}/brain/SKILL.yaml +0 -0
  92. /package/dist/{skills → tools/brain/skills}/brain/references/metadata.md +0 -0
  93. /package/dist/{skills → tools/brain/skills}/brain/references/naming.md +0 -0
  94. /package/dist/{skills → tools/brain/skills}/brain/references/templates.md +0 -0
  95. /package/dist/{skills → tools/brain/skills}/brain/references/workflows.md +0 -0
  96. /package/dist/{skills → tools/brain/skills}/brain-obsidian/SKILL.md +0 -0
  97. /package/dist/{skills → tools/brain/skills}/brain-obsidian/SKILL.yaml +0 -0
  98. /package/dist/{skills → tools/brain/skills}/brain-obsidian/references/templates.md +0 -0
  99. /package/dist/{skills → tools/brain/skills}/brain-obsidian/references/workflows.md +0 -0
  100. /package/dist/{skills → tools}/coach/commands/README.md +0 -0
  101. /package/dist/{skills → tools}/coach/commands/coach.md +0 -0
  102. /package/dist/{skills → tools/coach/skills}/coach/SKILL.md +0 -0
  103. /package/dist/{skills → tools/coach/skills}/coach/SKILL.yaml +0 -0
  104. /package/dist/{skills → tools}/code-review/agents/edi-standards-reviewer/AGENT.md +0 -0
  105. /package/dist/{skills → tools}/code-review/agents/edi-standards-reviewer/AGENT.yaml +0 -0
  106. /package/dist/{skills → tools}/code-review/agents/error-handling-reviewer/AGENT.md +0 -0
  107. /package/dist/{skills → tools}/code-review/agents/error-handling-reviewer/AGENT.yaml +0 -0
  108. /package/dist/{skills → tools}/code-review/agents/test-coverage-analyzer/AGENT.md +0 -0
  109. /package/dist/{skills → tools}/code-review/agents/test-coverage-analyzer/AGENT.yaml +0 -0
  110. /package/dist/{skills → tools}/code-review/agents/type-reviewer/AGENT.md +0 -0
  111. /package/dist/{skills → tools}/code-review/agents/type-reviewer/AGENT.yaml +0 -0
  112. /package/dist/{skills → tools}/code-review/commands/code-review.md +0 -0
  113. /package/dist/{skills → tools/code-review/skills}/code-review/SKILL.md +0 -0
  114. /package/dist/{skills → tools/code-review/skills}/code-review/SKILL.yaml +0 -0
  115. /package/dist/{skills → tools}/comments/commands/README.md +0 -0
  116. /package/dist/{skills → tools}/comments/commands/comments.md +0 -0
  117. /package/dist/{skills → tools}/project/commands/README.md +0 -0
  118. /package/dist/{skills → tools}/project/commands/project.md +0 -0
  119. /package/dist/{skills → tools/project/skills}/project/SKILL.md +0 -0
  120. /package/dist/{skills → tools/project/skills}/project/SKILL.yaml +0 -0
  121. /package/dist/{skills → tools/project/skills}/project/references/changelog.md +0 -0
  122. /package/dist/{skills → tools/project/skills}/project/references/creating.md +0 -0
  123. /package/dist/{skills → tools/project/skills}/project/references/loading.md +0 -0
  124. /package/dist/{skills → tools/project/skills}/project/references/templates.md +0 -0
  125. /package/dist/{skills → tools/project/skills}/project/references/updating.md +0 -0
  126. /package/dist/{skills → tools/project/skills}/project/references/versioning.md +0 -0
  127. /package/src/{skills → tools}/README.md +0 -0
  128. /package/src/{skills → tools}/brain/commands/README.md +0 -0
  129. /package/src/{skills → tools}/brain/commands/brain.md +0 -0
  130. /package/src/{skills → tools}/brain/commands/scratchpad.md +0 -0
  131. /package/src/{skills → tools/brain/skills}/brain/SKILL.md +0 -0
  132. /package/src/{skills → tools/brain/skills}/brain/SKILL.yaml +0 -0
  133. /package/src/{skills → tools/brain/skills}/brain/references/metadata.md +0 -0
  134. /package/src/{skills → tools/brain/skills}/brain/references/naming.md +0 -0
  135. /package/src/{skills → tools/brain/skills}/brain/references/templates.md +0 -0
  136. /package/src/{skills → tools/brain/skills}/brain/references/workflows.md +0 -0
  137. /package/src/{skills → tools/brain/skills}/brain-obsidian/SKILL.md +0 -0
  138. /package/src/{skills → tools/brain/skills}/brain-obsidian/SKILL.yaml +0 -0
  139. /package/src/{skills → tools/brain/skills}/brain-obsidian/references/templates.md +0 -0
  140. /package/src/{skills → tools/brain/skills}/brain-obsidian/references/workflows.md +0 -0
  141. /package/src/{skills → tools}/coach/commands/README.md +0 -0
  142. /package/src/{skills → tools}/coach/commands/coach.md +0 -0
  143. /package/src/{skills → tools/coach/skills}/coach/SKILL.md +0 -0
  144. /package/src/{skills → tools/coach/skills}/coach/SKILL.yaml +0 -0
  145. /package/src/{skills → tools}/code-review/agents/edi-standards-reviewer/AGENT.md +0 -0
  146. /package/src/{skills → tools}/code-review/agents/edi-standards-reviewer/AGENT.yaml +0 -0
  147. /package/src/{skills → tools}/code-review/agents/error-handling-reviewer/AGENT.md +0 -0
  148. /package/src/{skills → tools}/code-review/agents/error-handling-reviewer/AGENT.yaml +0 -0
  149. /package/src/{skills → tools}/code-review/agents/test-coverage-analyzer/AGENT.md +0 -0
  150. /package/src/{skills → tools}/code-review/agents/test-coverage-analyzer/AGENT.yaml +0 -0
  151. /package/src/{skills → tools}/code-review/agents/type-reviewer/AGENT.md +0 -0
  152. /package/src/{skills → tools}/code-review/agents/type-reviewer/AGENT.yaml +0 -0
  153. /package/src/{skills → tools}/code-review/commands/code-review.md +0 -0
  154. /package/src/{skills → tools/code-review/skills}/code-review/SKILL.md +0 -0
  155. /package/src/{skills → tools/code-review/skills}/code-review/SKILL.yaml +0 -0
  156. /package/src/{skills → tools}/comments/commands/README.md +0 -0
  157. /package/src/{skills → tools}/comments/commands/comments.md +0 -0
  158. /package/src/{skills → tools}/project/commands/README.md +0 -0
  159. /package/src/{skills → tools}/project/commands/project.md +0 -0
  160. /package/src/{skills → tools/project/skills}/project/SKILL.md +0 -0
  161. /package/src/{skills → tools/project/skills}/project/SKILL.yaml +0 -0
  162. /package/src/{skills → tools/project/skills}/project/references/changelog.md +0 -0
  163. /package/src/{skills → tools/project/skills}/project/references/creating.md +0 -0
  164. /package/src/{skills → tools/project/skills}/project/references/loading.md +0 -0
  165. /package/src/{skills → tools/project/skills}/project/references/templates.md +0 -0
  166. /package/src/{skills → tools/project/skills}/project/references/updating.md +0 -0
  167. /package/src/{skills → tools/project/skills}/project/references/versioning.md +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/lib/tools.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
- export declare enum AITool {
1
+ export declare enum Platform {
2
2
  ClaudeCode = "claude-code",
3
3
  OpenCode = "opencode"
4
4
  }
5
+ declare const AIToolValue: typeof Platform;
6
+ export { AIToolValue as AITool };
7
+ export type AITool = Platform;
5
8
  /**
6
9
  * Get the AI's mention tag
7
10
  * Always @droid - consistent branding regardless of underlying AI tool
@@ -22,13 +25,31 @@ export declare enum ConfigOptionType {
22
25
  Boolean = "boolean",
23
26
  Select = "select"
24
27
  }
28
+ export interface PlatformConfig {
29
+ tools: Record<string, InstalledSkill>;
30
+ }
25
31
  export interface DroidConfig {
26
- ai_tool: AITool;
32
+ platform: Platform;
33
+ user_mention: string;
34
+ output_preference: OutputPreference;
35
+ git_username: string;
36
+ platforms: Record<string, PlatformConfig>;
37
+ }
38
+ export interface LegacyDroidConfig {
39
+ ai_tool: Platform;
27
40
  user_mention: string;
28
41
  output_preference: OutputPreference;
29
42
  git_username: string;
30
43
  skills: Record<string, InstalledSkill>;
31
44
  }
45
+ /**
46
+ * Get installed tools for the current platform
47
+ */
48
+ export declare function getPlatformTools(config: DroidConfig): Record<string, InstalledSkill>;
49
+ /**
50
+ * Set installed tools for the current platform
51
+ */
52
+ export declare function setPlatformTools(config: DroidConfig, tools: Record<string, InstalledSkill>): void;
32
53
  export interface InstalledSkill {
33
54
  version: string;
34
55
  installed_at: string;
@@ -58,4 +79,26 @@ export interface ConfigOption {
58
79
  export interface SkillOverrides {
59
80
  [key: string]: string | boolean | number;
60
81
  }
82
+ /**
83
+ * Tool manifest structure (TOOL.yaml)
84
+ */
85
+ export interface ToolSkillInclude {
86
+ name: string;
87
+ required: boolean;
88
+ description?: string;
89
+ }
90
+ export interface ToolIncludes {
91
+ skills: ToolSkillInclude[];
92
+ commands: string[];
93
+ agents: string[];
94
+ }
95
+ export interface ToolManifest {
96
+ name: string;
97
+ description: string;
98
+ version: string;
99
+ status?: SkillStatus;
100
+ includes: ToolIncludes;
101
+ dependencies?: string[];
102
+ config_schema?: Record<string, ConfigOption>;
103
+ }
61
104
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,oBAAY,MAAM;IAChB,UAAU,gBAAgB;IAC1B,QAAQ,aAAa;CACtB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAGD,oBAAY,aAAa;IACvB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAGD,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,MAAM,CAAC;AAEtD,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAG1B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CAC1C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
package/dist/lib/types.js CHANGED
@@ -1,8 +1,12 @@
1
- export var AITool;
2
- (function (AITool) {
3
- AITool["ClaudeCode"] = "claude-code";
4
- AITool["OpenCode"] = "opencode";
5
- })(AITool || (AITool = {}));
1
+ export var Platform;
2
+ (function (Platform) {
3
+ Platform["ClaudeCode"] = "claude-code";
4
+ Platform["OpenCode"] = "opencode";
5
+ })(Platform || (Platform = {}));
6
+ // Backwards compatibility alias - using different names to avoid redeclare error
7
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
8
+ const AIToolValue = Platform;
9
+ export { AIToolValue as AITool };
6
10
  /**
7
11
  * Get the AI's mention tag
8
12
  * Always @droid - consistent branding regardless of underlying AI tool
@@ -28,4 +32,19 @@ export var ConfigOptionType;
28
32
  ConfigOptionType["Boolean"] = "boolean";
29
33
  ConfigOptionType["Select"] = "select";
30
34
  })(ConfigOptionType || (ConfigOptionType = {}));
35
+ /**
36
+ * Get installed tools for the current platform
37
+ */
38
+ export function getPlatformTools(config) {
39
+ return config.platforms[config.platform]?.tools ?? {};
40
+ }
41
+ /**
42
+ * Set installed tools for the current platform
43
+ */
44
+ export function setPlatformTools(config, tools) {
45
+ if (!config.platforms[config.platform]) {
46
+ config.platforms[config.platform] = { tools: {} };
47
+ }
48
+ config.platforms[config.platform].tools = tools;
49
+ }
31
50
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,MAGX;AAHD,WAAY,MAAM;IAChB,oCAA0B,CAAA;IAC1B,+BAAqB,CAAA;AACvB,CAAC,EAHW,MAAM,KAAN,MAAM,QAGjB;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,kCAAiB,CAAA;AACnB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAKD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,8BAAe,CAAA;AACjB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAED,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;IACnB,qCAAiB,CAAA;AACnB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,sCAA0B,CAAA;IAC1B,iCAAqB,CAAA;AACvB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED,iFAAiF;AACjF,6DAA6D;AAC7D,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,CAAC;AAGjC;;;GAGG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,kCAAiB,CAAA;AACnB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAKD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,8BAAe,CAAA;AACjB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAED,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;IACnB,qCAAiB,CAAA;AACnB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAuBD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB,EAAE,KAAqC;IACzF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;AAClD,CAAC"}
@@ -0,0 +1,27 @@
1
+ name: brain
2
+ description: "Collaborative scratchpad 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.0
4
+ status: beta
5
+
6
+ includes:
7
+ skills:
8
+ - name: brain
9
+ required: true
10
+ - name: brain-obsidian
11
+ required: false
12
+ description: "Obsidian vault integration with YAML frontmatter and wikilinks"
13
+ commands:
14
+ - brain
15
+ - scratchpad
16
+ agents: []
17
+
18
+ dependencies: []
19
+
20
+ config_schema:
21
+ brain_dir:
22
+ type: string
23
+ description: Directory for brain docs (default varies by platform)
24
+ inbox_folder:
25
+ type: string
26
+ description: Subfolder for new docs (empty = flat structure)
27
+ default: ""
@@ -0,0 +1,21 @@
1
+ name: coach
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.0
4
+ status: beta
5
+
6
+ includes:
7
+ skills:
8
+ - name: coach
9
+ required: true
10
+ commands:
11
+ - coach
12
+ agents: []
13
+
14
+ dependencies:
15
+ - comments
16
+
17
+ config_schema:
18
+ scaffold_verbosity:
19
+ type: string
20
+ description: "How detailed scaffold hints should be: minimal, medium, detailed"
21
+ default: "medium"
@@ -0,0 +1,18 @@
1
+ name: code-review
2
+ description: "Comprehensive code review using specialized agents. Reviews PRs, staged changes, branches, or specific files with confidence scoring."
3
+ version: 0.1.0
4
+ status: alpha
5
+
6
+ includes:
7
+ skills:
8
+ - name: code-review
9
+ required: true
10
+ commands:
11
+ - code-review
12
+ agents:
13
+ - edi-standards-reviewer
14
+ - error-handling-reviewer
15
+ - test-coverage-analyzer
16
+ - type-reviewer
17
+
18
+ dependencies: []
@@ -0,0 +1,27 @@
1
+ name: comments
2
+ description: "Enable inline conversations using @droid/@user markers. Tag @droid to ask the AI, AI responds with @{your-name}. Ideal for code review notes and async collaboration."
3
+ version: 0.2.3
4
+ status: beta
5
+
6
+ includes:
7
+ skills:
8
+ - name: comments
9
+ required: true
10
+ commands:
11
+ - comments
12
+ agents: []
13
+
14
+ dependencies: []
15
+
16
+ config_schema:
17
+ user_mention:
18
+ type: string
19
+ description: Override the global user mention for this skill
20
+ ai_mentions:
21
+ type: string
22
+ description: Additional AI mentions to recognize (comma-separated)
23
+ default: ""
24
+ preserve_comments:
25
+ type: boolean
26
+ description: Keep original comments after addressing (vs removing them)
27
+ default: true
@@ -79,13 +79,22 @@ When you find a `@droid` marker:
79
79
 
80
80
  ### On `/comments check`:
81
81
 
82
+ **Use a two-pass approach for coherent responses:**
83
+
84
+ #### Pass 1: Read & Analyse
82
85
  1. **Read config first:** Check `~/.droid/skills/comments/overrides.yaml` for `preserve_comments` setting (default: `true`)
83
- 2. Search for `> @droid` (and any configured `ai_mentions`) in the specified scope
86
+ 2. Search for ALL `> @droid` comments (and any configured `ai_mentions`) in the specified scope
84
87
  3. If there's a `git diff`, check those files first for relevant context
85
- 4. For each comment, determine intent:
88
+ 4. **Read all comments before responding** - understand the full picture
89
+ 5. Look for connections between comments (one may inform another)
90
+ 6. Note any contradictions or tensions to address
91
+
92
+ #### Pass 2: Respond & Write
93
+ 1. For each comment, determine intent:
86
94
  - **Action request** ("do X", "add Y", "fix Z") → Execute the action
87
95
  - **Question** ("what do you think", "should we") → Respond with `> @{user_mention}`
88
- 5. **Handle original comment based on `preserve_comments`:**
96
+ 2. Ensure responses are coherent across all comments (don't contradict yourself)
97
+ 3. **Handle original comment based on `preserve_comments`:**
89
98
  - If `preserve_comments: true` → Keep the original `@droid` comment (add response below it)
90
99
  - If `preserve_comments: false` → Remove the original comment after addressing
91
100
 
@@ -1,6 +1,6 @@
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.2
3
+ version: 0.2.3
4
4
  status: beta
5
5
  dependencies: []
6
6
  provides_output: false
@@ -0,0 +1,26 @@
1
+ name: project
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.2
4
+ status: beta
5
+
6
+ includes:
7
+ skills:
8
+ - name: project
9
+ required: true
10
+ commands:
11
+ - project
12
+ agents: []
13
+
14
+ dependencies: []
15
+
16
+ config_schema:
17
+ projects_dir:
18
+ type: string
19
+ description: Path to projects directory (default varies by platform)
20
+ preset:
21
+ type: select
22
+ description: Output format for templates
23
+ default: "markdown"
24
+ options:
25
+ - markdown
26
+ - obsidian
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderful/droid",
3
- "version": "0.10.5",
3
+ "version": "0.11.1",
4
4
  "description": "AI workflow toolkit for sharing skills, commands, and agents across the team",
5
5
  "type": "module",
6
6
  "bin": {
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "main": "dist/index.js",
10
10
  "scripts": {
11
- "build": "tsc && cp -r src/skills dist/ && cp -r src/agents dist/",
11
+ "build": "tsc && cp -r src/tools dist/",
12
12
  "dev": "tsc --watch",
13
13
  "start": "bun dist/bin/droid.js",
14
14
  "test": "bun test src/",
package/src/bin/droid.ts CHANGED
@@ -31,26 +31,26 @@ program
31
31
  .action(configCommand);
32
32
 
33
33
  program
34
- .command('skills')
35
- .description('Browse and manage available skills')
34
+ .command('tools')
35
+ .description('Browse and manage available tools')
36
36
  .action(skillsCommand);
37
37
 
38
38
  program
39
- .command('install <skill>')
40
- .description('Install a skill and run its setup wizard')
39
+ .command('install <tool>')
40
+ .description('Install a tool and run its setup wizard')
41
41
  .action(installCommand);
42
42
 
43
43
  program
44
- .command('uninstall <skill>')
45
- .description('Uninstall a skill')
44
+ .command('uninstall <tool>')
45
+ .description('Uninstall a tool')
46
46
  .action(uninstallCommand);
47
47
 
48
48
  program
49
49
  .command('update')
50
- .description('Update droid and installed skills')
51
- .option('--skills', 'Only update skills')
50
+ .description('Update droid and installed tools')
51
+ .option('--tools', 'Only update tools')
52
52
  .option('--cli', 'Only update the CLI')
53
- .argument('[skill]', 'Update a specific skill')
53
+ .argument('[tool]', 'Update a specific tool')
54
54
  .action(updateCommand);
55
55
 
56
56
  program
@@ -1,50 +1,51 @@
1
1
  import chalk from 'chalk';
2
- import { join } from 'path';
3
- import { installSkill, isSkillInstalled, getBundledSkills, loadSkillManifest, getBundledSkillsDir } from '../lib/skills.js';
2
+ import { installSkill } from '../lib/skills.js';
3
+ import { getBundledTools, isToolInstalled } from '../lib/tools.js';
4
4
  import { promptForSkillConfig } from '../lib/skill-config.js';
5
5
 
6
- export async function installCommand(skillName: string): Promise<void> {
7
- // Check if skill exists
8
- const skills = getBundledSkills();
9
- const skill = skills.find((s) => s.name === skillName);
6
+ export async function installCommand(toolName: string): Promise<void> {
7
+ // Check if tool exists
8
+ const tools = getBundledTools();
9
+ const tool = tools.find((t) => t.name === toolName);
10
10
 
11
- if (!skill) {
12
- console.error(chalk.red(`\n✗ Skill '${skillName}' not found`));
13
- console.log(chalk.gray('\nAvailable skills:'));
14
- for (const s of skills) {
15
- console.log(chalk.gray(` - ${s.name}`));
11
+ if (!tool) {
12
+ console.error(chalk.red(`\n✗ Tool '${toolName}' not found`));
13
+ console.log(chalk.gray('\nAvailable tools:'));
14
+ for (const t of tools) {
15
+ console.log(chalk.gray(` - ${t.name}`));
16
16
  }
17
17
  process.exit(1);
18
18
  }
19
19
 
20
20
  // Check if already installed
21
- if (isSkillInstalled(skillName)) {
22
- console.log(chalk.yellow(`\n⚠ Skill '${skillName}' is already installed`));
21
+ if (isToolInstalled(toolName)) {
22
+ console.log(chalk.yellow(`\n⚠ Tool '${toolName}' is already installed`));
23
23
  console.log(chalk.gray('Use `droid update` to update it, or uninstall first.'));
24
24
  return;
25
25
  }
26
26
 
27
- console.log(chalk.bold(`\n🤖 Installing ${skillName}...\n`));
27
+ console.log(chalk.bold(`\n🤖 Installing ${toolName}...\n`));
28
28
 
29
- const result = installSkill(skillName);
29
+ // Install via primary skill
30
+ const primarySkill = tool.includes.skills.find(s => s.required)?.name || toolName;
31
+ const result = installSkill(primarySkill);
30
32
 
31
33
  if (result.success) {
32
- console.log(chalk.green(`✓ ${result.message}`));
34
+ console.log(chalk.green(`✓ Installed ${toolName}`));
33
35
 
34
- // Check if skill has configurable options
35
- const manifest = loadSkillManifest(join(getBundledSkillsDir(), skillName));
36
- if (manifest?.config_schema && Object.keys(manifest.config_schema).length > 0) {
36
+ // Check if tool has configurable options
37
+ if (tool.config_schema && Object.keys(tool.config_schema).length > 0) {
37
38
  // If any config option lacks a default, go straight to config (it's required)
38
- const hasRequiredConfig = Object.values(manifest.config_schema).some(
39
+ const hasRequiredConfig = Object.values(tool.config_schema).some(
39
40
  (option) => option.default === undefined
40
41
  );
41
- await promptForSkillConfig(skillName, manifest.config_schema, !hasRequiredConfig);
42
+ await promptForSkillConfig(primarySkill, tool.config_schema, !hasRequiredConfig);
42
43
  }
43
44
 
44
45
  // Show next steps
45
46
  console.log(chalk.gray('\nNext steps:'));
46
- console.log(chalk.gray(' - Run your AI tool to start using the skill'));
47
- console.log(chalk.gray(` - Reconfigure anytime with \`droid skills\` → Configure`));
47
+ console.log(chalk.gray(' - Run your AI tool to start using it'));
48
+ console.log(chalk.gray(` - Reconfigure anytime with \`droid\` → Configure`));
48
49
  } else {
49
50
  console.error(chalk.red(`✗ ${result.message}`));
50
51
  process.exit(1);
@@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, mock, spyOn } from 'bun:te
2
2
  import { existsSync, mkdirSync, rmSync, readFileSync, writeFileSync } from 'fs';
3
3
  import { join } from 'path';
4
4
  import { tmpdir } from 'os';
5
- import { AITool } from '../lib/types.js';
5
+ import { Platform } from '../lib/types.js';
6
6
 
7
7
  // We need to mock homedir() before importing the module
8
8
  // Create a test directory that will act as our fake home
@@ -11,7 +11,7 @@ let testHomeDir: string;
11
11
  // Mock the os module's homedir function
12
12
  const originalHomedir = await import('os').then(m => m.homedir);
13
13
 
14
- describe('configureAIToolPermissions', () => {
14
+ describe('configurePlatformPermissions', () => {
15
15
  beforeEach(() => {
16
16
  testHomeDir = join(tmpdir(), `droid-setup-test-${Date.now()}`);
17
17
  mkdirSync(testHomeDir, { recursive: true });
@@ -6,7 +6,7 @@ import { join } from 'path';
6
6
  import { homedir } from 'os';
7
7
  import { loadConfig, saveConfig, configExists } from '../lib/config.js';
8
8
  import { getBundledSkills } from '../lib/skills.js';
9
- import { AITool, BuiltInOutput, type DroidConfig, type OutputPreference } from '../lib/types.js';
9
+ import { Platform, BuiltInOutput, type DroidConfig, type OutputPreference } from '../lib/types.js';
10
10
 
11
11
  /**
12
12
  * Permissions droid needs to operate without constant prompts
@@ -20,19 +20,19 @@ const DROID_PERMISSIONS = [
20
20
  ];
21
21
 
22
22
  /**
23
- * Detect which AI tool is installed
23
+ * Detect which platform is installed
24
24
  */
25
- function detectAITool(): AITool | null {
25
+ function detectPlatform(): Platform | null {
26
26
  try {
27
27
  execSync('claude --version', { stdio: 'ignore' });
28
- return AITool.ClaudeCode;
28
+ return Platform.ClaudeCode;
29
29
  } catch {
30
30
  // Claude Code not found
31
31
  }
32
32
 
33
33
  try {
34
34
  execSync('opencode --version', { stdio: 'ignore' });
35
- return AITool.OpenCode;
35
+ return Platform.OpenCode;
36
36
  } catch {
37
37
  // OpenCode not found
38
38
  }
@@ -59,12 +59,12 @@ function detectGitUsername(): string {
59
59
  const OPENCODE_SKILLS_PLUGIN = 'opencode-skills';
60
60
 
61
61
  /**
62
- * Configure AI tool permissions for droid
62
+ * Configure platform permissions for droid
63
63
  */
64
- export function configureAIToolPermissions(aiTool: AITool): { added: string[]; alreadyPresent: boolean; error?: string } {
64
+ export function configurePlatformPermissions(platform: Platform): { added: string[]; alreadyPresent: boolean; error?: string } {
65
65
  const added: string[] = [];
66
66
 
67
- if (aiTool === AITool.ClaudeCode) {
67
+ if (platform === Platform.ClaudeCode) {
68
68
  const settingsPath = join(homedir(), '.claude', 'settings.json');
69
69
 
70
70
  // Ensure .claude directory exists
@@ -113,7 +113,7 @@ export function configureAIToolPermissions(aiTool: AITool): { added: string[]; a
113
113
  return { added, alreadyPresent: added.length === 0 };
114
114
  }
115
115
 
116
- if (aiTool === AITool.OpenCode) {
116
+ if (platform === Platform.OpenCode) {
117
117
  // OpenCode uses opencode.json for config
118
118
  // Check global config location: ~/.config/opencode/opencode.json
119
119
  const globalConfigDir = join(homedir(), '.config', 'opencode');
@@ -188,8 +188,8 @@ function getOutputOptions(): Array<{ name: string; value: OutputPreference }> {
188
188
  export async function setupCommand(): Promise<void> {
189
189
  console.log(chalk.bold('\n🤖 Droid Setup\n'));
190
190
 
191
- const existingConfig = configExists();
192
- if (existingConfig) {
191
+ const hasExistingConfig = configExists();
192
+ if (hasExistingConfig) {
193
193
  const { overwrite } = await inquirer.prompt<{ overwrite: boolean }>([
194
194
  {
195
195
  type: 'confirm',
@@ -205,12 +205,12 @@ export async function setupCommand(): Promise<void> {
205
205
  }
206
206
  }
207
207
 
208
- // Detect AI tool
209
- const detectedTool = detectAITool();
210
- if (detectedTool) {
211
- console.log(chalk.green(`✓ Detected ${detectedTool}\n`));
208
+ // Detect platform
209
+ const detectedPlatform = detectPlatform();
210
+ if (detectedPlatform) {
211
+ console.log(chalk.green(`✓ Detected ${detectedPlatform}\n`));
212
212
  } else {
213
- console.log(chalk.yellow('⚠ No AI tool detected (Claude Code or OpenCode)\n'));
213
+ console.log(chalk.yellow('⚠ No platform detected (Claude Code or OpenCode)\n'));
214
214
  }
215
215
 
216
216
  // Detect git username
@@ -220,20 +220,20 @@ export async function setupCommand(): Promise<void> {
220
220
  const outputOptions = getOutputOptions();
221
221
 
222
222
  const answers = await inquirer.prompt<{
223
- ai_tool: AITool;
223
+ platform: Platform;
224
224
  user_mention: string;
225
225
  output_preference: OutputPreference;
226
226
  git_username: string;
227
227
  }>([
228
228
  {
229
229
  type: 'list',
230
- name: 'ai_tool',
231
- message: 'Which AI tool are you using?',
230
+ name: 'platform',
231
+ message: 'Which platform are you using?',
232
232
  choices: [
233
- { name: 'Claude Code', value: AITool.ClaudeCode },
234
- { name: 'OpenCode', value: AITool.OpenCode },
233
+ { name: 'Claude Code', value: Platform.ClaudeCode },
234
+ { name: 'OpenCode', value: Platform.OpenCode },
235
235
  ],
236
- default: detectedTool || AITool.ClaudeCode,
236
+ default: detectedPlatform || Platform.ClaudeCode,
237
237
  },
238
238
  {
239
239
  type: 'input',
@@ -260,27 +260,31 @@ export async function setupCommand(): Promise<void> {
260
260
  },
261
261
  ]);
262
262
 
263
+ const existingConfig = loadConfig();
263
264
  const config: DroidConfig = {
264
- ...loadConfig(),
265
- ...answers,
265
+ ...existingConfig,
266
+ platform: answers.platform,
267
+ user_mention: answers.user_mention,
268
+ output_preference: answers.output_preference,
269
+ git_username: answers.git_username,
266
270
  };
267
271
 
268
272
  saveConfig(config);
269
273
 
270
274
  console.log(chalk.green('\n✓ Config saved to ~/.droid/config.yaml'));
271
275
 
272
- // Configure AI tool permissions/plugins
273
- const { added, alreadyPresent, error } = configureAIToolPermissions(answers.ai_tool);
276
+ // Configure platform permissions/plugins
277
+ const { added, alreadyPresent, error } = configurePlatformPermissions(answers.platform);
274
278
  if (error) {
275
279
  console.log(chalk.red(`✗ ${error}`));
276
- console.log(chalk.yellow(' You may need to manually configure your AI tool'));
277
- } else if (answers.ai_tool === AITool.ClaudeCode) {
280
+ console.log(chalk.yellow(' You may need to manually configure your platform'));
281
+ } else if (answers.platform === Platform.ClaudeCode) {
278
282
  if (added.length > 0) {
279
283
  console.log(chalk.green(`✓ Added droid permissions to Claude Code settings`));
280
284
  } else if (alreadyPresent) {
281
285
  console.log(chalk.gray(` Droid permissions already configured in Claude Code`));
282
286
  }
283
- } else if (answers.ai_tool === AITool.OpenCode) {
287
+ } else if (answers.platform === Platform.OpenCode) {
284
288
  if (added.length > 0) {
285
289
  console.log(chalk.green(`✓ Added opencode-skills plugin to OpenCode config`));
286
290
  console.log(chalk.gray(` This enables Claude Code-style skills in OpenCode`));