@orderful/droid 0.10.5 → 0.11.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 (167) hide show
  1. package/.claude/CLAUDE.md +13 -6
  2. package/CHANGELOG.md +13 -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/tools/project/TOOL.yaml +26 -0
  57. package/package.json +2 -2
  58. package/src/bin/droid.ts +9 -9
  59. package/src/commands/install.ts +24 -23
  60. package/src/commands/setup.test.ts +2 -2
  61. package/src/commands/setup.ts +33 -29
  62. package/src/commands/skills.ts +63 -64
  63. package/src/commands/tui.tsx +432 -578
  64. package/src/commands/uninstall.ts +17 -6
  65. package/src/commands/update.ts +10 -10
  66. package/src/lib/agents.ts +58 -58
  67. package/src/lib/config.test.ts +0 -10
  68. package/src/lib/config.ts +47 -5
  69. package/src/lib/platforms.ts +59 -0
  70. package/src/lib/skills.test.ts +53 -28
  71. package/src/lib/skills.ts +134 -101
  72. package/src/lib/tools.ts +140 -0
  73. package/src/lib/types.test.ts +15 -7
  74. package/src/lib/types.ts +63 -2
  75. package/src/tools/brain/TOOL.yaml +27 -0
  76. package/src/tools/coach/TOOL.yaml +21 -0
  77. package/src/tools/code-review/TOOL.yaml +18 -0
  78. package/src/tools/comments/TOOL.yaml +27 -0
  79. package/src/tools/project/TOOL.yaml +26 -0
  80. package/dist/agents/README.md +0 -137
  81. package/src/agents/README.md +0 -137
  82. /package/dist/{skills → tools}/README.md +0 -0
  83. /package/dist/{skills → tools}/brain/commands/README.md +0 -0
  84. /package/dist/{skills → tools}/brain/commands/brain.md +0 -0
  85. /package/dist/{skills → tools}/brain/commands/scratchpad.md +0 -0
  86. /package/dist/{skills → tools/brain/skills}/brain/SKILL.md +0 -0
  87. /package/dist/{skills → tools/brain/skills}/brain/SKILL.yaml +0 -0
  88. /package/dist/{skills → tools/brain/skills}/brain/references/metadata.md +0 -0
  89. /package/dist/{skills → tools/brain/skills}/brain/references/naming.md +0 -0
  90. /package/dist/{skills → tools/brain/skills}/brain/references/templates.md +0 -0
  91. /package/dist/{skills → tools/brain/skills}/brain/references/workflows.md +0 -0
  92. /package/dist/{skills → tools/brain/skills}/brain-obsidian/SKILL.md +0 -0
  93. /package/dist/{skills → tools/brain/skills}/brain-obsidian/SKILL.yaml +0 -0
  94. /package/dist/{skills → tools/brain/skills}/brain-obsidian/references/templates.md +0 -0
  95. /package/dist/{skills → tools/brain/skills}/brain-obsidian/references/workflows.md +0 -0
  96. /package/dist/{skills → tools}/coach/commands/README.md +0 -0
  97. /package/dist/{skills → tools}/coach/commands/coach.md +0 -0
  98. /package/dist/{skills → tools/coach/skills}/coach/SKILL.md +0 -0
  99. /package/dist/{skills → tools/coach/skills}/coach/SKILL.yaml +0 -0
  100. /package/dist/{skills → tools}/code-review/agents/edi-standards-reviewer/AGENT.md +0 -0
  101. /package/dist/{skills → tools}/code-review/agents/edi-standards-reviewer/AGENT.yaml +0 -0
  102. /package/dist/{skills → tools}/code-review/agents/error-handling-reviewer/AGENT.md +0 -0
  103. /package/dist/{skills → tools}/code-review/agents/error-handling-reviewer/AGENT.yaml +0 -0
  104. /package/dist/{skills → tools}/code-review/agents/test-coverage-analyzer/AGENT.md +0 -0
  105. /package/dist/{skills → tools}/code-review/agents/test-coverage-analyzer/AGENT.yaml +0 -0
  106. /package/dist/{skills → tools}/code-review/agents/type-reviewer/AGENT.md +0 -0
  107. /package/dist/{skills → tools}/code-review/agents/type-reviewer/AGENT.yaml +0 -0
  108. /package/dist/{skills → tools}/code-review/commands/code-review.md +0 -0
  109. /package/dist/{skills → tools/code-review/skills}/code-review/SKILL.md +0 -0
  110. /package/dist/{skills → tools/code-review/skills}/code-review/SKILL.yaml +0 -0
  111. /package/dist/{skills → tools}/comments/commands/README.md +0 -0
  112. /package/dist/{skills → tools}/comments/commands/comments.md +0 -0
  113. /package/dist/{skills → tools/comments/skills}/comments/SKILL.md +0 -0
  114. /package/dist/{skills → tools/comments/skills}/comments/SKILL.yaml +0 -0
  115. /package/dist/{skills → tools}/project/commands/README.md +0 -0
  116. /package/dist/{skills → tools}/project/commands/project.md +0 -0
  117. /package/dist/{skills → tools/project/skills}/project/SKILL.md +0 -0
  118. /package/dist/{skills → tools/project/skills}/project/SKILL.yaml +0 -0
  119. /package/dist/{skills → tools/project/skills}/project/references/changelog.md +0 -0
  120. /package/dist/{skills → tools/project/skills}/project/references/creating.md +0 -0
  121. /package/dist/{skills → tools/project/skills}/project/references/loading.md +0 -0
  122. /package/dist/{skills → tools/project/skills}/project/references/templates.md +0 -0
  123. /package/dist/{skills → tools/project/skills}/project/references/updating.md +0 -0
  124. /package/dist/{skills → tools/project/skills}/project/references/versioning.md +0 -0
  125. /package/src/{skills → tools}/README.md +0 -0
  126. /package/src/{skills → tools}/brain/commands/README.md +0 -0
  127. /package/src/{skills → tools}/brain/commands/brain.md +0 -0
  128. /package/src/{skills → tools}/brain/commands/scratchpad.md +0 -0
  129. /package/src/{skills → tools/brain/skills}/brain/SKILL.md +0 -0
  130. /package/src/{skills → tools/brain/skills}/brain/SKILL.yaml +0 -0
  131. /package/src/{skills → tools/brain/skills}/brain/references/metadata.md +0 -0
  132. /package/src/{skills → tools/brain/skills}/brain/references/naming.md +0 -0
  133. /package/src/{skills → tools/brain/skills}/brain/references/templates.md +0 -0
  134. /package/src/{skills → tools/brain/skills}/brain/references/workflows.md +0 -0
  135. /package/src/{skills → tools/brain/skills}/brain-obsidian/SKILL.md +0 -0
  136. /package/src/{skills → tools/brain/skills}/brain-obsidian/SKILL.yaml +0 -0
  137. /package/src/{skills → tools/brain/skills}/brain-obsidian/references/templates.md +0 -0
  138. /package/src/{skills → tools/brain/skills}/brain-obsidian/references/workflows.md +0 -0
  139. /package/src/{skills → tools}/coach/commands/README.md +0 -0
  140. /package/src/{skills → tools}/coach/commands/coach.md +0 -0
  141. /package/src/{skills → tools/coach/skills}/coach/SKILL.md +0 -0
  142. /package/src/{skills → tools/coach/skills}/coach/SKILL.yaml +0 -0
  143. /package/src/{skills → tools}/code-review/agents/edi-standards-reviewer/AGENT.md +0 -0
  144. /package/src/{skills → tools}/code-review/agents/edi-standards-reviewer/AGENT.yaml +0 -0
  145. /package/src/{skills → tools}/code-review/agents/error-handling-reviewer/AGENT.md +0 -0
  146. /package/src/{skills → tools}/code-review/agents/error-handling-reviewer/AGENT.yaml +0 -0
  147. /package/src/{skills → tools}/code-review/agents/test-coverage-analyzer/AGENT.md +0 -0
  148. /package/src/{skills → tools}/code-review/agents/test-coverage-analyzer/AGENT.yaml +0 -0
  149. /package/src/{skills → tools}/code-review/agents/type-reviewer/AGENT.md +0 -0
  150. /package/src/{skills → tools}/code-review/agents/type-reviewer/AGENT.yaml +0 -0
  151. /package/src/{skills → tools}/code-review/commands/code-review.md +0 -0
  152. /package/src/{skills → tools/code-review/skills}/code-review/SKILL.md +0 -0
  153. /package/src/{skills → tools/code-review/skills}/code-review/SKILL.yaml +0 -0
  154. /package/src/{skills → tools}/comments/commands/README.md +0 -0
  155. /package/src/{skills → tools}/comments/commands/comments.md +0 -0
  156. /package/src/{skills → tools/comments/skills}/comments/SKILL.md +0 -0
  157. /package/src/{skills → tools/comments/skills}/comments/SKILL.yaml +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
@@ -1,59 +1,49 @@
1
1
  import inquirer from 'inquirer';
2
2
  import chalk from 'chalk';
3
- import { join } from 'path';
4
- import {
5
- getBundledSkills,
6
- getBundledSkillsDir,
7
- isSkillInstalled,
8
- getInstalledSkill,
9
- getSkillStatusDisplay,
10
- installSkill,
11
- uninstallSkill,
12
- loadSkillManifest,
13
- } from '../lib/skills.js';
3
+ import { installSkill, uninstallSkill } from '../lib/skills.js';
4
+ import { getBundledTools, isToolInstalled, getInstalledToolVersion } from '../lib/tools.js';
14
5
  import { promptForSkillConfig } from '../lib/skill-config.js';
15
- import { SkillStatus, type SkillManifest } from '../lib/types.js';
6
+ import { SkillStatus, type ToolManifest } from '../lib/types.js';
16
7
 
17
- function formatSkillChoice(skill: SkillManifest): string {
18
- const installed = isSkillInstalled(skill.name);
19
- const installedInfo = getInstalledSkill(skill.name);
20
- const statusDisplay = getSkillStatusDisplay(skill.status);
8
+ function formatToolChoice(tool: ToolManifest): string {
9
+ const installed = isToolInstalled(tool.name);
10
+ const installedVersion = getInstalledToolVersion(tool.name);
21
11
 
22
- let line = `${skill.name}`;
12
+ let line = `${tool.name}`;
23
13
 
24
- if (installed && installedInfo) {
25
- line += chalk.green(` [installed] v${installedInfo.version}`);
14
+ if (installed && installedVersion) {
15
+ line += chalk.green(` [installed] v${installedVersion}`);
26
16
  } else {
27
- line += chalk.gray(` v${skill.version}`);
17
+ line += chalk.gray(` v${tool.version}`);
28
18
  }
29
19
 
30
- if (statusDisplay) {
31
- const color =
32
- skill.status === SkillStatus.Alpha
20
+ if (tool.status) {
21
+ const statusColor =
22
+ tool.status === SkillStatus.Alpha
33
23
  ? chalk.red
34
- : skill.status === SkillStatus.Beta
24
+ : tool.status === SkillStatus.Beta
35
25
  ? chalk.yellow
36
26
  : chalk.white;
37
- line += ` ${color(statusDisplay)}`;
27
+ line += statusColor(` [${tool.status}]`);
38
28
  }
39
29
 
40
30
  return line;
41
31
  }
42
32
 
43
33
  export async function skillsCommand(): Promise<void> {
44
- const skills = getBundledSkills();
34
+ const tools = getBundledTools();
45
35
 
46
- if (skills.length === 0) {
47
- console.log(chalk.yellow('\nNo skills available yet.'));
36
+ if (tools.length === 0) {
37
+ console.log(chalk.yellow('\nNo tools available yet.'));
48
38
  return;
49
39
  }
50
40
 
51
- console.log(chalk.bold('\n🤖 Available Skills\n'));
41
+ console.log(chalk.bold('\n🤖 Available Tools\n'));
52
42
 
53
- const skillChoices = skills.map((skill) => ({
54
- name: formatSkillChoice(skill),
55
- value: skill.name,
56
- short: skill.name,
43
+ const toolChoices = tools.map((tool) => ({
44
+ name: formatToolChoice(tool),
45
+ value: tool.name,
46
+ short: tool.name,
57
47
  }));
58
48
 
59
49
  const choices = [
@@ -62,42 +52,54 @@ export async function skillsCommand(): Promise<void> {
62
52
  value: '__exit__',
63
53
  short: 'Exit',
64
54
  },
65
- ...skillChoices,
55
+ ...toolChoices,
66
56
  ];
67
57
 
68
- const { selectedSkill } = await inquirer.prompt<{ selectedSkill: string }>([
58
+ const { selectedTool } = await inquirer.prompt<{ selectedTool: string }>([
69
59
  {
70
60
  type: 'list',
71
- name: 'selectedSkill',
72
- message: 'Select a skill to view details or install:',
61
+ name: 'selectedTool',
62
+ message: 'Select a tool to view details or install:',
73
63
  choices,
74
64
  pageSize: 15,
75
65
  },
76
66
  ]);
77
67
 
78
- if (selectedSkill === '__exit__') {
68
+ if (selectedTool === '__exit__') {
79
69
  return;
80
70
  }
81
71
 
82
- const skill = skills.find((s) => s.name === selectedSkill);
83
- if (!skill) {
84
- console.error(chalk.red('Skill not found'));
72
+ const tool = tools.find((t) => t.name === selectedTool);
73
+ if (!tool) {
74
+ console.error(chalk.red('Tool not found'));
85
75
  return;
86
76
  }
87
77
 
88
- // Show skill details
89
- console.log(chalk.bold(`\n📦 ${skill.name}`));
90
- console.log(chalk.gray(`Version: ${skill.version}`));
91
- if (skill.status) {
92
- console.log(chalk.gray(`Status: ${skill.status}`));
78
+ // Show tool details
79
+ console.log(chalk.bold(`\n📦 ${tool.name}`));
80
+ console.log(chalk.gray(`Version: ${tool.version}`));
81
+ if (tool.status) {
82
+ console.log(chalk.gray(`Status: ${tool.status}`));
93
83
  }
94
- console.log(`\n${skill.description}`);
84
+ console.log(`\n${tool.description}`);
95
85
 
96
- if (skill.dependencies && skill.dependencies.length > 0) {
97
- console.log(chalk.gray(`\nDependencies: ${skill.dependencies.join(', ')}`));
86
+ // Show what the tool includes
87
+ const skillNames = tool.includes.skills.map(s => s.name);
88
+ const commandNames = tool.includes.commands.map(c => `/${c}`);
89
+ const agentNames = tool.includes.agents;
90
+
91
+ if (skillNames.length > 0) {
92
+ console.log(chalk.gray(`\nSkills: ${skillNames.join(', ')}`));
93
+ }
94
+ if (commandNames.length > 0) {
95
+ console.log(chalk.gray(`Commands: ${commandNames.join(', ')}`));
96
+ }
97
+ if (agentNames.length > 0) {
98
+ console.log(chalk.gray(`Agents: ${agentNames.join(', ')}`));
98
99
  }
99
100
 
100
- const installed = isSkillInstalled(skill.name);
101
+ const installed = isToolInstalled(tool.name);
102
+ const primarySkill = tool.includes.skills.find(s => s.required)?.name || tool.name;
101
103
 
102
104
  const actions = installed
103
105
  ? [
@@ -121,17 +123,15 @@ export async function skillsCommand(): Promise<void> {
121
123
 
122
124
  switch (action) {
123
125
  case 'install': {
124
- const result = installSkill(skill.name);
126
+ const result = installSkill(primarySkill);
125
127
  if (result.success) {
126
- console.log(chalk.green(`\n✓ ${result.message}`));
127
- // Prompt for config if skill has options
128
- const manifest = loadSkillManifest(join(getBundledSkillsDir(), skill.name));
129
- if (manifest?.config_schema && Object.keys(manifest.config_schema).length > 0) {
130
- // If any config option lacks a default, go straight to config (it's required)
131
- const hasRequiredConfig = Object.values(manifest.config_schema).some(
128
+ console.log(chalk.green(`\n✓ Installed ${tool.name}`));
129
+ // Prompt for config if tool has options
130
+ if (tool.config_schema && Object.keys(tool.config_schema).length > 0) {
131
+ const hasRequiredConfig = Object.values(tool.config_schema).some(
132
132
  (option) => option.default === undefined
133
133
  );
134
- await promptForSkillConfig(skill.name, manifest.config_schema, !hasRequiredConfig);
134
+ await promptForSkillConfig(primarySkill, tool.config_schema, !hasRequiredConfig);
135
135
  }
136
136
  } else {
137
137
  console.log(chalk.red(`\n✗ ${result.message}`));
@@ -139,18 +139,17 @@ export async function skillsCommand(): Promise<void> {
139
139
  break;
140
140
  }
141
141
  case 'configure': {
142
- const manifest = loadSkillManifest(join(getBundledSkillsDir(), skill.name));
143
- if (manifest?.config_schema && Object.keys(manifest.config_schema).length > 0) {
144
- await promptForSkillConfig(skill.name, manifest.config_schema, false);
142
+ if (tool.config_schema && Object.keys(tool.config_schema).length > 0) {
143
+ await promptForSkillConfig(primarySkill, tool.config_schema, false);
145
144
  } else {
146
- console.log(chalk.gray('\nThis skill has no configuration options.'));
145
+ console.log(chalk.gray('\nThis tool has no configuration options.'));
147
146
  }
148
147
  break;
149
148
  }
150
149
  case 'uninstall': {
151
- const result = uninstallSkill(skill.name);
150
+ const result = uninstallSkill(primarySkill);
152
151
  if (result.success) {
153
- console.log(chalk.green(`\n✓ ${result.message}`));
152
+ console.log(chalk.green(`\n✓ Uninstalled ${tool.name}`));
154
153
  } else {
155
154
  console.log(chalk.red(`\n✗ ${result.message}`));
156
155
  }