@orderful/droid 0.25.2 → 0.27.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 (159) hide show
  1. package/.claude-plugin/marketplace.json +114 -0
  2. package/.github/workflows/ci.yml +20 -0
  3. package/AGENTS.md +75 -18
  4. package/CHANGELOG.md +73 -0
  5. package/README.md +30 -4
  6. package/dist/bin/droid.js +164 -75
  7. package/dist/index.js +68 -26
  8. package/dist/lib/migrations.d.ts +8 -0
  9. package/dist/lib/migrations.d.ts.map +1 -1
  10. package/dist/lib/skill-config.d.ts.map +1 -1
  11. package/dist/lib/skills.d.ts.map +1 -1
  12. package/dist/lib/tools.d.ts.map +1 -1
  13. package/dist/lib/types.d.ts +10 -2
  14. package/dist/lib/types.d.ts.map +1 -1
  15. package/dist/tools/README.md +1 -1
  16. package/dist/tools/brain/.claude-plugin/plugin.json +16 -0
  17. package/dist/tools/brain/TOOL.yaml +7 -5
  18. package/dist/tools/brain/commands/brain.md +17 -49
  19. package/dist/tools/brain/commands/scratchpad.md +13 -50
  20. package/{src/tools/brain/skills/droid-brain → dist/tools/brain/skills/brain}/SKILL.md +6 -6
  21. package/dist/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/SKILL.md +9 -9
  22. package/dist/tools/coach/.claude-plugin/plugin.json +16 -0
  23. package/dist/tools/coach/TOOL.yaml +4 -3
  24. package/dist/tools/coach/commands/coach.md +14 -54
  25. package/{src/tools/coach/skills/droid-coach → dist/tools/coach/skills/coach}/SKILL.md +5 -4
  26. package/dist/tools/code-review/.claude-plugin/plugin.json +16 -0
  27. package/dist/tools/code-review/TOOL.yaml +4 -3
  28. package/dist/tools/code-review/commands/code-review.md +18 -102
  29. package/dist/tools/code-review/skills/code-review/SKILL.md +154 -0
  30. package/dist/tools/codex/.claude-plugin/plugin.json +16 -0
  31. package/dist/tools/codex/TOOL.yaml +5 -4
  32. package/dist/tools/codex/commands/codex.md +18 -65
  33. package/dist/tools/codex/skills/{droid-codex → codex}/SKILL.md +64 -45
  34. package/{src/tools/codex/skills/droid-codex → dist/tools/codex/skills/codex}/references/loading.md +94 -55
  35. package/dist/tools/codex/skills/codex/scripts/git-finish-write.d.ts.map +1 -0
  36. package/dist/tools/codex/skills/codex/scripts/git-preamble.d.ts.map +1 -0
  37. package/dist/tools/codex/skills/codex/scripts/git-start-write.d.ts.map +1 -0
  38. package/dist/tools/comments/.claude-plugin/plugin.json +16 -0
  39. package/dist/tools/comments/TOOL.yaml +4 -3
  40. package/dist/tools/comments/commands/comments.md +12 -14
  41. package/{src/tools/comments/skills/droid-comments → dist/tools/comments/skills/comments}/SKILL.md +4 -2
  42. package/dist/tools/droid/.claude-plugin/plugin.json +15 -0
  43. package/dist/tools/droid/TOOL.yaml +1 -1
  44. package/dist/tools/droid/skills/droid/SKILL.md +1 -1
  45. package/dist/tools/project/.claude-plugin/plugin.json +16 -0
  46. package/dist/tools/project/TOOL.yaml +4 -3
  47. package/dist/tools/project/commands/project.md +12 -27
  48. package/dist/tools/project/skills/{droid-project → project}/SKILL.md +13 -12
  49. package/dist/tools/tech-design/.claude-plugin/plugin.json +16 -0
  50. package/dist/tools/tech-design/TOOL.yaml +19 -0
  51. package/dist/tools/tech-design/commands/tech-design.md +31 -0
  52. package/dist/tools/tech-design/skills/tech-design/SKILL.md +218 -0
  53. package/dist/tools/tech-design/skills/tech-design/references/draft.md +321 -0
  54. package/dist/tools/tech-design/skills/tech-design/references/gaps.md +328 -0
  55. package/dist/tools/tech-design/skills/tech-design/references/publish.md +409 -0
  56. package/dist/tools/tech-design/skills/tech-design/references/research-doc-template.md +129 -0
  57. package/dist/tools/tech-design/skills/tech-design/references/rollup-template.md +55 -0
  58. package/dist/tools/tech-design/skills/tech-design/references/start.md +353 -0
  59. package/dist/tools/tech-design/skills/tech-design/references/think.md +356 -0
  60. package/dist/tools/tech-design/skills/tech-design/references/thought-doc-template.md +72 -0
  61. package/package.json +3 -2
  62. package/scripts/build-plugins.ts +207 -0
  63. package/src/commands/tui/components/Badge.test.tsx +10 -4
  64. package/src/commands/tui.tsx +4 -4
  65. package/src/lib/migrations.ts +95 -4
  66. package/src/lib/skill-config.ts +95 -57
  67. package/src/lib/skills.test.ts +199 -74
  68. package/src/lib/skills.ts +57 -56
  69. package/src/lib/tools.ts +19 -12
  70. package/src/lib/types.ts +20 -5
  71. package/src/tools/README.md +1 -1
  72. package/src/tools/brain/.claude-plugin/plugin.json +16 -0
  73. package/src/tools/brain/TOOL.yaml +7 -5
  74. package/src/tools/brain/commands/brain.md +17 -49
  75. package/src/tools/brain/commands/scratchpad.md +13 -50
  76. package/{dist/tools/brain/skills/droid-brain → src/tools/brain/skills/brain}/SKILL.md +6 -6
  77. package/src/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/SKILL.md +9 -9
  78. package/src/tools/coach/.claude-plugin/plugin.json +16 -0
  79. package/src/tools/coach/TOOL.yaml +4 -3
  80. package/src/tools/coach/commands/coach.md +14 -54
  81. package/{dist/tools/coach/skills/droid-coach → src/tools/coach/skills/coach}/SKILL.md +5 -4
  82. package/src/tools/code-review/.claude-plugin/plugin.json +16 -0
  83. package/src/tools/code-review/TOOL.yaml +4 -3
  84. package/src/tools/code-review/commands/code-review.md +18 -102
  85. package/src/tools/code-review/skills/code-review/SKILL.md +154 -0
  86. package/src/tools/codex/.claude-plugin/plugin.json +16 -0
  87. package/src/tools/codex/TOOL.yaml +5 -4
  88. package/src/tools/codex/commands/codex.md +18 -65
  89. package/src/tools/codex/skills/{droid-codex → codex}/SKILL.md +64 -45
  90. package/{dist/tools/codex/skills/droid-codex → src/tools/codex/skills/codex}/references/loading.md +94 -55
  91. package/src/tools/comments/.claude-plugin/plugin.json +16 -0
  92. package/src/tools/comments/TOOL.yaml +4 -3
  93. package/src/tools/comments/commands/comments.md +12 -14
  94. package/{dist/tools/comments/skills/droid-comments → src/tools/comments/skills/comments}/SKILL.md +4 -2
  95. package/src/tools/droid/.claude-plugin/plugin.json +15 -0
  96. package/src/tools/droid/TOOL.yaml +1 -1
  97. package/src/tools/droid/skills/droid/SKILL.md +1 -1
  98. package/src/tools/project/.claude-plugin/plugin.json +16 -0
  99. package/src/tools/project/TOOL.yaml +4 -3
  100. package/src/tools/project/commands/project.md +12 -27
  101. package/src/tools/project/skills/{droid-project → project}/SKILL.md +13 -12
  102. package/src/tools/tech-design/.claude-plugin/plugin.json +16 -0
  103. package/src/tools/tech-design/TOOL.yaml +19 -0
  104. package/src/tools/tech-design/commands/tech-design.md +31 -0
  105. package/src/tools/tech-design/skills/tech-design/SKILL.md +218 -0
  106. package/src/tools/tech-design/skills/tech-design/references/draft.md +321 -0
  107. package/src/tools/tech-design/skills/tech-design/references/gaps.md +328 -0
  108. package/src/tools/tech-design/skills/tech-design/references/publish.md +409 -0
  109. package/src/tools/tech-design/skills/tech-design/references/research-doc-template.md +129 -0
  110. package/src/tools/tech-design/skills/tech-design/references/rollup-template.md +55 -0
  111. package/src/tools/tech-design/skills/tech-design/references/start.md +353 -0
  112. package/src/tools/tech-design/skills/tech-design/references/think.md +356 -0
  113. package/src/tools/tech-design/skills/tech-design/references/thought-doc-template.md +72 -0
  114. package/dist/tools/code-review/skills/droid-code-review/SKILL.md +0 -55
  115. package/dist/tools/codex/skills/droid-codex/scripts/git-finish-write.d.ts.map +0 -1
  116. package/dist/tools/codex/skills/droid-codex/scripts/git-preamble.d.ts.map +0 -1
  117. package/dist/tools/codex/skills/droid-codex/scripts/git-start-write.d.ts.map +0 -1
  118. package/src/tools/code-review/skills/droid-code-review/SKILL.md +0 -55
  119. /package/dist/tools/brain/skills/{droid-brain → brain}/references/metadata.md +0 -0
  120. /package/dist/tools/brain/skills/{droid-brain → brain}/references/naming.md +0 -0
  121. /package/dist/tools/brain/skills/{droid-brain → brain}/references/templates.md +0 -0
  122. /package/dist/tools/brain/skills/{droid-brain → brain}/references/workflows.md +0 -0
  123. /package/dist/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/references/templates.md +0 -0
  124. /package/dist/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/references/workflows.md +0 -0
  125. /package/dist/tools/codex/skills/{droid-codex → codex}/references/creating.md +0 -0
  126. /package/dist/tools/codex/skills/{droid-codex → codex}/references/decisions.md +0 -0
  127. /package/dist/tools/codex/skills/{droid-codex → codex}/references/topics.md +0 -0
  128. /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-finish-write.d.ts +0 -0
  129. /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-finish-write.ts +0 -0
  130. /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-preamble.d.ts +0 -0
  131. /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-preamble.ts +0 -0
  132. /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-scripts.test.ts +0 -0
  133. /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-start-write.d.ts +0 -0
  134. /package/dist/tools/codex/skills/{droid-codex → codex}/scripts/git-start-write.ts +0 -0
  135. /package/dist/tools/project/skills/{droid-project → project}/references/changelog.md +0 -0
  136. /package/dist/tools/project/skills/{droid-project → project}/references/creating.md +0 -0
  137. /package/dist/tools/project/skills/{droid-project → project}/references/loading.md +0 -0
  138. /package/dist/tools/project/skills/{droid-project → project}/references/templates.md +0 -0
  139. /package/dist/tools/project/skills/{droid-project → project}/references/updating.md +0 -0
  140. /package/dist/tools/project/skills/{droid-project → project}/references/versioning.md +0 -0
  141. /package/src/tools/brain/skills/{droid-brain → brain}/references/metadata.md +0 -0
  142. /package/src/tools/brain/skills/{droid-brain → brain}/references/naming.md +0 -0
  143. /package/src/tools/brain/skills/{droid-brain → brain}/references/templates.md +0 -0
  144. /package/src/tools/brain/skills/{droid-brain → brain}/references/workflows.md +0 -0
  145. /package/src/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/references/templates.md +0 -0
  146. /package/src/tools/brain/skills/{droid-brain-obsidian → brain-obsidian}/references/workflows.md +0 -0
  147. /package/src/tools/codex/skills/{droid-codex → codex}/references/creating.md +0 -0
  148. /package/src/tools/codex/skills/{droid-codex → codex}/references/decisions.md +0 -0
  149. /package/src/tools/codex/skills/{droid-codex → codex}/references/topics.md +0 -0
  150. /package/src/tools/codex/skills/{droid-codex → codex}/scripts/git-finish-write.ts +0 -0
  151. /package/src/tools/codex/skills/{droid-codex → codex}/scripts/git-preamble.ts +0 -0
  152. /package/src/tools/codex/skills/{droid-codex → codex}/scripts/git-scripts.test.ts +0 -0
  153. /package/src/tools/codex/skills/{droid-codex → codex}/scripts/git-start-write.ts +0 -0
  154. /package/src/tools/project/skills/{droid-project → project}/references/changelog.md +0 -0
  155. /package/src/tools/project/skills/{droid-project → project}/references/creating.md +0 -0
  156. /package/src/tools/project/skills/{droid-project → project}/references/loading.md +0 -0
  157. /package/src/tools/project/skills/{droid-project → project}/references/templates.md +0 -0
  158. /package/src/tools/project/skills/{droid-project → project}/references/updating.md +0 -0
  159. /package/src/tools/project/skills/{droid-project → project}/references/versioning.md +0 -0
package/dist/bin/droid.js CHANGED
@@ -392,7 +392,9 @@ function getToolsWithUpdates() {
392
392
  const toolsWithUpdates = [];
393
393
  for (const tool of bundledTools) {
394
394
  const requiredSkills = tool.includes.skills.filter((s) => s.required).map((s) => s.name);
395
- const isInstalled = requiredSkills.some((skillName) => skillName in installedTools);
395
+ const isInstalled = requiredSkills.some(
396
+ (skillName) => skillName in installedTools
397
+ );
396
398
  if (isInstalled) {
397
399
  const updateStatus = getToolUpdateStatus(tool.name);
398
400
  if (updateStatus.hasUpdate) {
@@ -613,27 +615,38 @@ function createPlatformSyncMigration(version2) {
613
615
  }
614
616
  };
615
617
  }
618
+ var PACKAGE_MIGRATIONS = [createPlatformSyncMigration("0.25.0")];
616
619
  var TOOL_MIGRATIONS = {
617
620
  brain: [createConfigDirMigration("droid-brain", "0.2.3")],
618
621
  comments: [createConfigDirMigration("droid-comments", "0.2.6")],
619
622
  project: [createConfigDirMigration("droid-project", "0.1.5")],
620
- coach: [createConfigDirMigration("droid-coach", "0.1.3")],
621
- // Global migration for the droid meta-tool
622
- droid: [createPlatformSyncMigration("0.25.0")]
623
+ coach: [createConfigDirMigration("droid-coach", "0.1.3")]
623
624
  };
624
625
  function getToolMigrations(toolName) {
625
626
  return TOOL_MIGRATIONS[toolName] ?? [];
626
627
  }
627
628
  function getLastMigratedVersion(toolName) {
628
629
  const config = loadConfig();
629
- return config.migrations?.[toolName] ?? "0.0.0";
630
+ if (config.migrations?.tools?.[toolName]) {
631
+ return config.migrations.tools[toolName];
632
+ }
633
+ if (config.migrations && typeof config.migrations[toolName] === "string") {
634
+ return config.migrations[toolName];
635
+ }
636
+ return "0.0.0";
630
637
  }
631
638
  function setLastMigratedVersion(toolName, version2) {
632
639
  const config = loadConfig();
633
640
  if (!config.migrations) {
634
641
  config.migrations = {};
635
642
  }
636
- config.migrations[toolName] = version2;
643
+ if (!config.migrations.tools) {
644
+ config.migrations.tools = {};
645
+ }
646
+ config.migrations.tools[toolName] = version2;
647
+ if (typeof config.migrations[toolName] === "string") {
648
+ delete config.migrations[toolName];
649
+ }
637
650
  saveConfig(config);
638
651
  }
639
652
  function runMigrations(toolName, fromVersion, toVersion) {
@@ -677,6 +690,48 @@ function runToolMigrations(toolName, installedVersion) {
677
690
  }
678
691
  return runMigrations(toolName, lastMigrated, installedVersion);
679
692
  }
693
+ function runPackageMigrations(packageVersion) {
694
+ const config = loadConfig();
695
+ const lastMigrated = config.migrations?.package ?? "0.0.0";
696
+ if (compareSemver(packageVersion, lastMigrated) <= 0) {
697
+ return { success: true };
698
+ }
699
+ const pendingMigrations = PACKAGE_MIGRATIONS.filter((m) => {
700
+ const afterFrom = compareSemver(m.version, lastMigrated) > 0;
701
+ const beforeOrAtTo = compareSemver(m.version, packageVersion) <= 0;
702
+ return afterFrom && beforeOrAtTo;
703
+ });
704
+ if (pendingMigrations.length === 0) {
705
+ config.migrations = config.migrations || {};
706
+ config.migrations.package = packageVersion;
707
+ saveConfig(config);
708
+ return { success: true };
709
+ }
710
+ const configDir = getConfigDir();
711
+ for (const migration of pendingMigrations) {
712
+ try {
713
+ migration.up(configDir);
714
+ logMigration("package", lastMigrated, migration.version, "OK");
715
+ } catch (error) {
716
+ const errorMessage = error instanceof Error ? error.message : String(error);
717
+ logMigration(
718
+ "package",
719
+ lastMigrated,
720
+ migration.version,
721
+ "FAILED",
722
+ errorMessage
723
+ );
724
+ return {
725
+ success: false,
726
+ error: `Package migration ${migration.version} failed: ${errorMessage}`
727
+ };
728
+ }
729
+ }
730
+ config.migrations = config.migrations || {};
731
+ config.migrations.package = packageVersion;
732
+ saveConfig(config);
733
+ return { success: true };
734
+ }
680
735
 
681
736
  // src/lib/skills.ts
682
737
  var DROID_SKILLS_START = "<!-- droid-skills-start -->";
@@ -861,9 +916,16 @@ function installSkill(skillName) {
861
916
  message: `Invalid skill manifest for '${skillName}'`
862
917
  };
863
918
  }
919
+ const toolManifest = loadToolManifest(toolDir);
920
+ if (!toolManifest) {
921
+ return {
922
+ success: false,
923
+ message: `Invalid tool manifest for tool containing '${skillName}'`
924
+ };
925
+ }
864
926
  if (manifest.dependencies) {
865
927
  for (const dep of manifest.dependencies) {
866
- if (!isSkillInstalled(dep)) {
928
+ if (!isToolInstalled(dep)) {
867
929
  return {
868
930
  success: false,
869
931
  message: `Missing dependency: '${dep}'. Install it first with \`droid install ${dep}\``
@@ -875,31 +937,39 @@ function installSkill(skillName) {
875
937
  const targetSkillDir = join7(skillsPath, skillName);
876
938
  const commandsPath = getCommandsInstallPath(config.platform);
877
939
  const tools = getPlatformTools(config);
878
- if (skillName.startsWith("droid-")) {
879
- const oldSkillName2 = skillName.replace(/^droid-/, "");
880
- const oldSkillDir = join7(skillsPath, oldSkillName2);
881
- if (existsSync5(oldSkillDir)) {
940
+ const renamedSkills = [
941
+ "comments",
942
+ "brain",
943
+ "project",
944
+ "coach",
945
+ "code-review",
946
+ "codex",
947
+ "tech-design",
948
+ "brain-obsidian"
949
+ ];
950
+ if (renamedSkills.includes(skillName)) {
951
+ const droidPrefixedName = `droid-${skillName}`;
952
+ const droidPrefixedDir = join7(skillsPath, droidPrefixedName);
953
+ if (existsSync5(droidPrefixedDir)) {
882
954
  try {
883
- rmSync2(oldSkillDir, { recursive: true });
955
+ rmSync2(droidPrefixedDir, { recursive: true });
884
956
  } catch (error) {
885
957
  console.warn(
886
- `Warning: Could not remove old skill directory ${oldSkillDir}: ${error}`
958
+ `Warning: Could not remove old skill directory ${droidPrefixedDir}: ${error}`
887
959
  );
888
960
  }
889
961
  }
890
- if (tools[oldSkillName2]) {
891
- delete tools[oldSkillName2];
962
+ if (tools[droidPrefixedName]) {
963
+ delete tools[droidPrefixedName];
892
964
  setPlatformTools(config, tools);
893
965
  saveConfig(config);
894
966
  }
895
967
  }
896
968
  const commandsSource = join7(toolDir, "commands");
897
969
  const agentsSource = join7(toolDir, "agents");
898
- const oldSkillName = skillName.startsWith("droid-") ? skillName.replace(/^droid-/, "") : null;
899
- const isAlreadyInstalled = tools[skillName] || oldSkillName && tools[oldSkillName];
970
+ const isAlreadyInstalled = tools[skillName];
900
971
  if (!isAlreadyInstalled) {
901
972
  const toolName2 = basename(toolDir);
902
- const normalizedToolName = toolName2.replace(/^droid-/, "");
903
973
  if (existsSync5(commandsSource)) {
904
974
  const commandFiles = readdirSync4(commandsSource).filter(
905
975
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
@@ -908,7 +978,7 @@ function installSkill(skillName) {
908
978
  const targetCommandPath = join7(commandsPath, file);
909
979
  if (existsSync5(targetCommandPath)) {
910
980
  const commandName = file.replace(".md", "");
911
- if (commandName === toolName2 || commandName === normalizedToolName) {
981
+ if (commandName === toolName2) {
912
982
  continue;
913
983
  }
914
984
  return {
@@ -982,10 +1052,18 @@ function installSkill(skillName) {
982
1052
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
983
1053
  );
984
1054
  for (const file of commandFiles) {
985
- const sourcePath = join7(commandsSource, file);
986
- const targetPath = join7(commandsPath, file);
987
- const content = readFileSync5(sourcePath, "utf-8");
988
- writeFileSync3(targetPath, content);
1055
+ const commandName = file.replace(".md", "");
1056
+ const commandMeta = toolManifest.includes.commands.find(
1057
+ (cmd) => (typeof cmd === "string" ? cmd : cmd.name) === commandName
1058
+ );
1059
+ const isAlias = typeof commandMeta === "object" && commandMeta.is_alias;
1060
+ const shouldInstall = config.platform === "opencode" /* OpenCode */ || isAlias;
1061
+ if (shouldInstall) {
1062
+ const sourcePath = join7(commandsSource, file);
1063
+ const targetPath = join7(commandsPath, file);
1064
+ const content = readFileSync5(sourcePath, "utf-8");
1065
+ writeFileSync3(targetPath, content);
1066
+ }
989
1067
  }
990
1068
  }
991
1069
  const installedAgents = [];
@@ -1356,6 +1434,7 @@ import chalk4 from "chalk";
1356
1434
  import inquirer2 from "inquirer";
1357
1435
  async function promptForSkillConfig(skillName, configSchema, askFirst = true) {
1358
1436
  const globalConfig = loadConfig();
1437
+ let shouldPrompt = true;
1359
1438
  if (askFirst) {
1360
1439
  const { wantsConfigure } = await inquirer2.prompt([
1361
1440
  {
@@ -1365,64 +1444,74 @@ async function promptForSkillConfig(skillName, configSchema, askFirst = true) {
1365
1444
  default: false
1366
1445
  }
1367
1446
  ]);
1368
- if (!wantsConfigure) {
1369
- return;
1370
- }
1447
+ shouldPrompt = wantsConfigure;
1371
1448
  }
1372
- console.log(chalk4.bold(`
1449
+ const existingOverrides = loadSkillOverrides(skillName);
1450
+ let overrides = {};
1451
+ if (shouldPrompt) {
1452
+ console.log(chalk4.bold(`
1373
1453
  \u2699\uFE0F Configure ${skillName}
1374
1454
  `));
1375
- const existingOverrides = loadSkillOverrides(skillName);
1376
- const questions = Object.entries(configSchema).map(([key, option]) => {
1377
- const baseQuestion = {
1378
- name: key,
1379
- message: option.description
1380
- };
1381
- const existingValue = existingOverrides[key];
1382
- switch (option.type) {
1383
- case "boolean" /* Boolean */:
1384
- return {
1385
- ...baseQuestion,
1386
- type: "confirm",
1387
- default: existingValue ?? option.default ?? false
1388
- };
1389
- case "select" /* Select */:
1390
- return {
1391
- ...baseQuestion,
1392
- type: "list",
1393
- choices: option.options || [],
1394
- default: existingValue ?? option.default
1395
- };
1396
- case "string" /* String */:
1397
- default: {
1398
- let defaultValue = existingValue ?? option.default ?? "";
1399
- if (key === "user_mention" && !existingValue && globalConfig.user_mention) {
1400
- defaultValue = globalConfig.user_mention;
1455
+ const questions = Object.entries(configSchema).map(([key, option]) => {
1456
+ const baseQuestion = {
1457
+ name: key,
1458
+ message: option.description
1459
+ };
1460
+ const existingValue = existingOverrides[key];
1461
+ switch (option.type) {
1462
+ case "boolean" /* Boolean */:
1463
+ return {
1464
+ ...baseQuestion,
1465
+ type: "confirm",
1466
+ default: existingValue ?? option.default ?? false
1467
+ };
1468
+ case "select" /* Select */:
1469
+ return {
1470
+ ...baseQuestion,
1471
+ type: "list",
1472
+ choices: option.options || [],
1473
+ default: existingValue ?? option.default
1474
+ };
1475
+ case "string" /* String */:
1476
+ default: {
1477
+ let defaultValue = existingValue ?? option.default ?? "";
1478
+ if (key === "user_mention" && !existingValue && globalConfig.user_mention) {
1479
+ defaultValue = globalConfig.user_mention;
1480
+ }
1481
+ return {
1482
+ ...baseQuestion,
1483
+ type: "input",
1484
+ default: defaultValue
1485
+ };
1401
1486
  }
1402
- return {
1403
- ...baseQuestion,
1404
- type: "input",
1405
- default: defaultValue
1406
- };
1487
+ }
1488
+ });
1489
+ const answers = await inquirer2.prompt(questions);
1490
+ for (const [key, value] of Object.entries(answers)) {
1491
+ if (value !== "" && value !== void 0 && value !== null) {
1492
+ overrides[key] = value;
1407
1493
  }
1408
1494
  }
1409
- });
1410
- const answers = await inquirer2.prompt(questions);
1411
- const overrides = {};
1412
- for (const [key, value] of Object.entries(answers)) {
1413
- const schema = configSchema[key];
1414
- if (value !== schema.default && value !== "" && value !== false) {
1415
- overrides[key] = value;
1416
- }
1417
- }
1418
- if (Object.keys(overrides).length > 0) {
1419
- saveSkillOverrides(skillName, overrides);
1420
- const displayName = skillName.replace(/^droid-/, "");
1421
- console.log(chalk4.green(`
1422
- \u2713 Configuration saved to ~/.droid/skills/${displayName}/overrides.yaml`));
1423
1495
  } else {
1424
- console.log(chalk4.gray("\nNo custom configuration set (using defaults)."));
1496
+ for (const [key, option] of Object.entries(configSchema)) {
1497
+ const existingValue = existingOverrides[key];
1498
+ let defaultValue = existingValue ?? option.default ?? (option.type === "boolean" /* Boolean */ ? false : "");
1499
+ if (key === "user_mention" && !existingValue && globalConfig.user_mention) {
1500
+ defaultValue = globalConfig.user_mention;
1501
+ }
1502
+ if (defaultValue !== "" && defaultValue !== void 0 && defaultValue !== null) {
1503
+ overrides[key] = defaultValue;
1504
+ }
1505
+ }
1425
1506
  }
1507
+ saveSkillOverrides(skillName, overrides);
1508
+ const displayName = skillName.replace(/^droid-/, "");
1509
+ console.log(
1510
+ chalk4.green(
1511
+ `
1512
+ \u2713 Configuration saved to ~/.droid/skills/${displayName}/overrides.yaml`
1513
+ )
1514
+ );
1426
1515
  }
1427
1516
 
1428
1517
  // src/commands/skills.ts
@@ -2974,8 +3063,8 @@ function App() {
2974
3063
  }
2975
3064
  });
2976
3065
  useEffect(() => {
2977
- const droidVersion = getVersion();
2978
- runToolMigrations("droid", droidVersion);
3066
+ const packageVersion = getVersion();
3067
+ runPackageMigrations(packageVersion);
2979
3068
  }, []);
2980
3069
  useEffect(() => {
2981
3070
  const autoUpdateConfig = getAutoUpdateConfig();
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  // src/lib/types.ts
2
- var Platform = /* @__PURE__ */ ((Platform3) => {
3
- Platform3["ClaudeCode"] = "claude-code";
4
- Platform3["OpenCode"] = "opencode";
5
- return Platform3;
2
+ var Platform = /* @__PURE__ */ ((Platform2) => {
3
+ Platform2["ClaudeCode"] = "claude-code";
4
+ Platform2["OpenCode"] = "opencode";
5
+ return Platform2;
6
6
  })(Platform || {});
7
7
  var AIToolValue = Platform;
8
8
  function getAITag() {
@@ -359,6 +359,14 @@ function getBundledTools() {
359
359
  }
360
360
  return tools;
361
361
  }
362
+ function isToolInstalled(toolName) {
363
+ const config = loadConfig();
364
+ const installedTools = getPlatformTools(config);
365
+ const tool = getBundledTools().find((t) => t.name === toolName);
366
+ if (!tool) return false;
367
+ const requiredSkills = tool.includes.skills.filter((s) => s.required).map((s) => s.name);
368
+ return requiredSkills.some((skillName) => skillName in installedTools);
369
+ }
362
370
 
363
371
  // src/lib/agents.ts
364
372
  var __dirname3 = dirname3(fileURLToPath3(import.meta.url));
@@ -570,27 +578,38 @@ function createPlatformSyncMigration(version) {
570
578
  }
571
579
  };
572
580
  }
581
+ var PACKAGE_MIGRATIONS = [createPlatformSyncMigration("0.25.0")];
573
582
  var TOOL_MIGRATIONS = {
574
583
  brain: [createConfigDirMigration("droid-brain", "0.2.3")],
575
584
  comments: [createConfigDirMigration("droid-comments", "0.2.6")],
576
585
  project: [createConfigDirMigration("droid-project", "0.1.5")],
577
- coach: [createConfigDirMigration("droid-coach", "0.1.3")],
578
- // Global migration for the droid meta-tool
579
- droid: [createPlatformSyncMigration("0.25.0")]
586
+ coach: [createConfigDirMigration("droid-coach", "0.1.3")]
580
587
  };
581
588
  function getToolMigrations(toolName) {
582
589
  return TOOL_MIGRATIONS[toolName] ?? [];
583
590
  }
584
591
  function getLastMigratedVersion(toolName) {
585
592
  const config = loadConfig();
586
- return config.migrations?.[toolName] ?? "0.0.0";
593
+ if (config.migrations?.tools?.[toolName]) {
594
+ return config.migrations.tools[toolName];
595
+ }
596
+ if (config.migrations && typeof config.migrations[toolName] === "string") {
597
+ return config.migrations[toolName];
598
+ }
599
+ return "0.0.0";
587
600
  }
588
601
  function setLastMigratedVersion(toolName, version) {
589
602
  const config = loadConfig();
590
603
  if (!config.migrations) {
591
604
  config.migrations = {};
592
605
  }
593
- config.migrations[toolName] = version;
606
+ if (!config.migrations.tools) {
607
+ config.migrations.tools = {};
608
+ }
609
+ config.migrations.tools[toolName] = version;
610
+ if (typeof config.migrations[toolName] === "string") {
611
+ delete config.migrations[toolName];
612
+ }
594
613
  saveConfig(config);
595
614
  }
596
615
  function runMigrations(toolName, fromVersion, toVersion) {
@@ -867,9 +886,16 @@ function installSkill(skillName) {
867
886
  message: `Invalid skill manifest for '${skillName}'`
868
887
  };
869
888
  }
889
+ const toolManifest = loadToolManifest(toolDir);
890
+ if (!toolManifest) {
891
+ return {
892
+ success: false,
893
+ message: `Invalid tool manifest for tool containing '${skillName}'`
894
+ };
895
+ }
870
896
  if (manifest.dependencies) {
871
897
  for (const dep of manifest.dependencies) {
872
- if (!isSkillInstalled(dep)) {
898
+ if (!isToolInstalled(dep)) {
873
899
  return {
874
900
  success: false,
875
901
  message: `Missing dependency: '${dep}'. Install it first with \`droid install ${dep}\``
@@ -881,31 +907,39 @@ function installSkill(skillName) {
881
907
  const targetSkillDir = join7(skillsPath, skillName);
882
908
  const commandsPath = getCommandsInstallPath(config.platform);
883
909
  const tools = getPlatformTools(config);
884
- if (skillName.startsWith("droid-")) {
885
- const oldSkillName2 = skillName.replace(/^droid-/, "");
886
- const oldSkillDir = join7(skillsPath, oldSkillName2);
887
- if (existsSync5(oldSkillDir)) {
910
+ const renamedSkills = [
911
+ "comments",
912
+ "brain",
913
+ "project",
914
+ "coach",
915
+ "code-review",
916
+ "codex",
917
+ "tech-design",
918
+ "brain-obsidian"
919
+ ];
920
+ if (renamedSkills.includes(skillName)) {
921
+ const droidPrefixedName = `droid-${skillName}`;
922
+ const droidPrefixedDir = join7(skillsPath, droidPrefixedName);
923
+ if (existsSync5(droidPrefixedDir)) {
888
924
  try {
889
- rmSync2(oldSkillDir, { recursive: true });
925
+ rmSync2(droidPrefixedDir, { recursive: true });
890
926
  } catch (error) {
891
927
  console.warn(
892
- `Warning: Could not remove old skill directory ${oldSkillDir}: ${error}`
928
+ `Warning: Could not remove old skill directory ${droidPrefixedDir}: ${error}`
893
929
  );
894
930
  }
895
931
  }
896
- if (tools[oldSkillName2]) {
897
- delete tools[oldSkillName2];
932
+ if (tools[droidPrefixedName]) {
933
+ delete tools[droidPrefixedName];
898
934
  setPlatformTools(config, tools);
899
935
  saveConfig(config);
900
936
  }
901
937
  }
902
938
  const commandsSource = join7(toolDir, "commands");
903
939
  const agentsSource = join7(toolDir, "agents");
904
- const oldSkillName = skillName.startsWith("droid-") ? skillName.replace(/^droid-/, "") : null;
905
- const isAlreadyInstalled = tools[skillName] || oldSkillName && tools[oldSkillName];
940
+ const isAlreadyInstalled = tools[skillName];
906
941
  if (!isAlreadyInstalled) {
907
942
  const toolName2 = basename(toolDir);
908
- const normalizedToolName = toolName2.replace(/^droid-/, "");
909
943
  if (existsSync5(commandsSource)) {
910
944
  const commandFiles = readdirSync4(commandsSource).filter(
911
945
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
@@ -914,7 +948,7 @@ function installSkill(skillName) {
914
948
  const targetCommandPath = join7(commandsPath, file);
915
949
  if (existsSync5(targetCommandPath)) {
916
950
  const commandName = file.replace(".md", "");
917
- if (commandName === toolName2 || commandName === normalizedToolName) {
951
+ if (commandName === toolName2) {
918
952
  continue;
919
953
  }
920
954
  return {
@@ -988,10 +1022,18 @@ function installSkill(skillName) {
988
1022
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
989
1023
  );
990
1024
  for (const file of commandFiles) {
991
- const sourcePath = join7(commandsSource, file);
992
- const targetPath = join7(commandsPath, file);
993
- const content = readFileSync5(sourcePath, "utf-8");
994
- writeFileSync3(targetPath, content);
1025
+ const commandName = file.replace(".md", "");
1026
+ const commandMeta = toolManifest.includes.commands.find(
1027
+ (cmd) => (typeof cmd === "string" ? cmd : cmd.name) === commandName
1028
+ );
1029
+ const isAlias = typeof commandMeta === "object" && commandMeta.is_alias;
1030
+ const shouldInstall = config.platform === "opencode" /* OpenCode */ || isAlias;
1031
+ if (shouldInstall) {
1032
+ const sourcePath = join7(commandsSource, file);
1033
+ const targetPath = join7(commandsPath, file);
1034
+ const content = readFileSync5(sourcePath, "utf-8");
1035
+ writeFileSync3(targetPath, content);
1036
+ }
995
1037
  }
996
1038
  }
997
1039
  const installedAgents = [];
@@ -27,4 +27,12 @@ export declare function runToolMigrations(toolName: string, installedVersion: st
27
27
  success: boolean;
28
28
  error?: string;
29
29
  };
30
+ /**
31
+ * Run package-level migrations
32
+ * Call this on TUI startup with package version from package.json
33
+ */
34
+ export declare function runPackageMigrations(packageVersion: string): {
35
+ success: boolean;
36
+ error?: string;
37
+ };
30
38
  //# sourceMappingURL=migrations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/lib/migrations.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,SAAS,EAIf,MAAM,SAAS,CAAC;AAgKjB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAE/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA2CtC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GACvB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAStC"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/lib/migrations.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,SAAS,EAIf,MAAM,SAAS,CAAC;AAsKjB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAE/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAc/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,IAAI,CAmBN;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA2CtC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GACvB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAStC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAqDA"}
@@ -1 +1 @@
1
- {"version":3,"file":"skill-config.d.ts","sourceRoot":"","sources":["../../src/lib/skill-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyC,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnF;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAC1C,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CAkFf"}
1
+ {"version":3,"file":"skill-config.d.ts","sourceRoot":"","sources":["../../src/lib/skill-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAC1C,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CAoHf"}
@@ -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,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
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/lib/tools.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,YAAY,EAIlB,MAAM,SAAS,CAAC;AAMjB;;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,CA2BtD"}
@@ -39,7 +39,11 @@ export interface DroidConfig {
39
39
  git_username: string;
40
40
  platforms: Record<string, PlatformConfig>;
41
41
  auto_update?: AutoUpdateConfig;
42
- migrations?: Record<string, string>;
42
+ migrations?: {
43
+ package?: string;
44
+ tools?: Record<string, string>;
45
+ [key: string]: string | Record<string, string> | undefined;
46
+ };
43
47
  }
44
48
  export interface LegacyDroidConfig {
45
49
  ai_tool: Platform;
@@ -106,9 +110,13 @@ export interface ToolSkillInclude {
106
110
  provides_output?: boolean;
107
111
  examples?: SkillExample[];
108
112
  }
113
+ export interface ToolCommandInclude {
114
+ name: string;
115
+ is_alias: boolean;
116
+ }
109
117
  export interface ToolIncludes {
110
118
  skills: ToolSkillInclude[];
111
- commands: string[];
119
+ commands: ToolCommandInclude[];
112
120
  agents: string[];
113
121
  }
114
122
  export interface ToolManifest {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
@@ -57,7 +57,7 @@ description: "What this skill does"
57
57
  globs:
58
58
  - "**/*.ts" # File patterns this skill applies to
59
59
  alwaysApply: false # Always include in context?
60
- allowed-tools: Read, Grep, Glob # Pre-authorize tools (reduces permission prompts)
60
+ allowed-tools: [Read, Grep, Glob] # Pre-authorize tools (reduces permission prompts)
61
61
  ---
62
62
 
63
63
  # My Skill
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "droid-brain",
3
+ "version": "0.3.0",
4
+ "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.",
5
+ "author": {
6
+ "name": "Orderful",
7
+ "url": "https://github.com/orderful"
8
+ },
9
+ "repository": "https://github.com/orderful/droid",
10
+ "license": "MIT",
11
+ "keywords": [
12
+ "droid",
13
+ "ai",
14
+ "brain"
15
+ ]
16
+ }