@orderful/droid 0.17.2 → 0.19.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.
- package/.github/workflows/claude-code-review.yml +58 -0
- package/.github/workflows/claude.yml +50 -0
- package/CHANGELOG.md +37 -0
- package/dist/bin/droid.js +212 -79
- package/dist/index.js +188 -69
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/migrations.d.ts +30 -0
- package/dist/lib/migrations.d.ts.map +1 -0
- package/dist/lib/skill-config.d.ts.map +1 -1
- package/dist/lib/skills.d.ts.map +1 -1
- package/dist/lib/tools.d.ts.map +1 -1
- package/dist/lib/types.d.ts +10 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/tools/brain/TOOL.yaml +3 -3
- package/{src/tools/brain/skills/brain → dist/tools/brain/skills/droid-brain}/SKILL.md +1 -1
- package/dist/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/SKILL.md +1 -1
- package/dist/tools/coach/TOOL.yaml +2 -2
- package/dist/tools/coach/skills/{coach → droid-coach}/SKILL.md +1 -1
- package/dist/tools/code-review/TOOL.yaml +2 -2
- package/dist/tools/code-review/skills/{code-review → droid-code-review}/SKILL.md +1 -1
- package/dist/tools/comments/TOOL.yaml +2 -2
- package/dist/tools/comments/skills/{comments → droid-comments}/SKILL.md +1 -1
- package/dist/tools/project/TOOL.yaml +2 -2
- package/{src/tools/project/skills/project → dist/tools/project/skills/droid-project}/SKILL.md +1 -1
- package/package.json +1 -1
- package/src/lib/config.ts +13 -2
- package/src/lib/migrations.test.ts +163 -0
- package/src/lib/migrations.ts +182 -0
- package/src/lib/skill-config.ts +3 -1
- package/src/lib/skills.ts +57 -1
- package/src/lib/tools.ts +16 -2
- package/src/lib/types.ts +11 -0
- package/src/tools/brain/TOOL.yaml +3 -3
- package/{dist/tools/brain/skills/brain → src/tools/brain/skills/droid-brain}/SKILL.md +1 -1
- package/src/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/SKILL.md +1 -1
- package/src/tools/coach/TOOL.yaml +2 -2
- package/src/tools/coach/skills/{coach → droid-coach}/SKILL.md +1 -1
- package/src/tools/code-review/TOOL.yaml +2 -2
- package/src/tools/code-review/skills/{code-review → droid-code-review}/SKILL.md +1 -1
- package/src/tools/comments/TOOL.yaml +2 -2
- package/src/tools/comments/skills/{comments → droid-comments}/SKILL.md +1 -1
- package/src/tools/project/TOOL.yaml +2 -2
- package/{dist/tools/project/skills/project → src/tools/project/skills/droid-project}/SKILL.md +1 -1
- /package/dist/tools/brain/skills/{brain → droid-brain}/references/metadata.md +0 -0
- /package/dist/tools/brain/skills/{brain → droid-brain}/references/naming.md +0 -0
- /package/dist/tools/brain/skills/{brain → droid-brain}/references/templates.md +0 -0
- /package/dist/tools/brain/skills/{brain → droid-brain}/references/workflows.md +0 -0
- /package/dist/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/references/templates.md +0 -0
- /package/dist/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/references/workflows.md +0 -0
- /package/dist/tools/project/skills/{project → droid-project}/references/changelog.md +0 -0
- /package/dist/tools/project/skills/{project → droid-project}/references/creating.md +0 -0
- /package/dist/tools/project/skills/{project → droid-project}/references/loading.md +0 -0
- /package/dist/tools/project/skills/{project → droid-project}/references/templates.md +0 -0
- /package/dist/tools/project/skills/{project → droid-project}/references/updating.md +0 -0
- /package/dist/tools/project/skills/{project → droid-project}/references/versioning.md +0 -0
- /package/src/tools/brain/skills/{brain → droid-brain}/references/metadata.md +0 -0
- /package/src/tools/brain/skills/{brain → droid-brain}/references/naming.md +0 -0
- /package/src/tools/brain/skills/{brain → droid-brain}/references/templates.md +0 -0
- /package/src/tools/brain/skills/{brain → droid-brain}/references/workflows.md +0 -0
- /package/src/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/references/templates.md +0 -0
- /package/src/tools/brain/skills/{brain-obsidian → droid-brain-obsidian}/references/workflows.md +0 -0
- /package/src/tools/project/skills/{project → droid-project}/references/changelog.md +0 -0
- /package/src/tools/project/skills/{project → droid-project}/references/creating.md +0 -0
- /package/src/tools/project/skills/{project → droid-project}/references/loading.md +0 -0
- /package/src/tools/project/skills/{project → droid-project}/references/templates.md +0 -0
- /package/src/tools/project/skills/{project → droid-project}/references/updating.md +0 -0
- /package/src/tools/project/skills/{project → droid-project}/references/versioning.md +0 -0
package/dist/index.js
CHANGED
|
@@ -140,8 +140,12 @@ function getConfigPath() {
|
|
|
140
140
|
function getConfigDir() {
|
|
141
141
|
return CONFIG_DIR;
|
|
142
142
|
}
|
|
143
|
+
function normalizeSkillNameForConfig(skillName) {
|
|
144
|
+
return skillName.replace(/^droid-/, "");
|
|
145
|
+
}
|
|
143
146
|
function getSkillOverridesPath(skillName) {
|
|
144
|
-
|
|
147
|
+
const normalizedName = normalizeSkillNameForConfig(skillName);
|
|
148
|
+
return join(CONFIG_DIR, "skills", normalizedName, "overrides.yaml");
|
|
145
149
|
}
|
|
146
150
|
function loadSkillOverrides(skillName) {
|
|
147
151
|
const overridesPath = getSkillOverridesPath(skillName);
|
|
@@ -156,8 +160,9 @@ function loadSkillOverrides(skillName) {
|
|
|
156
160
|
}
|
|
157
161
|
}
|
|
158
162
|
function saveSkillOverrides(skillName, overrides) {
|
|
163
|
+
const normalizedName = normalizeSkillNameForConfig(skillName);
|
|
159
164
|
const overridesPath = getSkillOverridesPath(skillName);
|
|
160
|
-
const skillDir = join(CONFIG_DIR, "skills",
|
|
165
|
+
const skillDir = join(CONFIG_DIR, "skills", normalizedName);
|
|
161
166
|
if (!existsSync(skillDir)) {
|
|
162
167
|
mkdirSync(skillDir, { recursive: true });
|
|
163
168
|
}
|
|
@@ -182,8 +187,8 @@ function setAutoUpdateConfig(updates) {
|
|
|
182
187
|
}
|
|
183
188
|
|
|
184
189
|
// src/lib/skills.ts
|
|
185
|
-
import { existsSync as
|
|
186
|
-
import { join as
|
|
190
|
+
import { existsSync as existsSync5, readdirSync as readdirSync3, readFileSync as readFileSync5, mkdirSync as mkdirSync4, writeFileSync as writeFileSync3, rmSync as rmSync2 } from "fs";
|
|
191
|
+
import { join as join7, dirname as dirname5, basename } from "path";
|
|
187
192
|
import { fileURLToPath as fileURLToPath4 } from "url";
|
|
188
193
|
import YAML4 from "yaml";
|
|
189
194
|
|
|
@@ -457,11 +462,104 @@ function uninstallAgent(agentName) {
|
|
|
457
462
|
}
|
|
458
463
|
}
|
|
459
464
|
|
|
465
|
+
// src/lib/migrations.ts
|
|
466
|
+
import { existsSync as existsSync4, appendFileSync, mkdirSync as mkdirSync3, renameSync, rmSync } from "fs";
|
|
467
|
+
import { join as join6, dirname as dirname4 } from "path";
|
|
468
|
+
var MIGRATIONS_LOG_FILE = ".migrations.log";
|
|
469
|
+
function getMigrationsLogPath() {
|
|
470
|
+
return join6(getConfigDir(), MIGRATIONS_LOG_FILE);
|
|
471
|
+
}
|
|
472
|
+
function logMigration(toolName, fromVersion, toVersion, status, error) {
|
|
473
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
474
|
+
const logEntry = error ? `${timestamp} ${toolName} ${fromVersion} \u2192 ${toVersion} ${status}: ${error}
|
|
475
|
+
` : `${timestamp} ${toolName} ${fromVersion} \u2192 ${toVersion} ${status}
|
|
476
|
+
`;
|
|
477
|
+
const logPath = getMigrationsLogPath();
|
|
478
|
+
const logDir = dirname4(logPath);
|
|
479
|
+
if (!existsSync4(logDir)) {
|
|
480
|
+
mkdirSync3(logDir, { recursive: true });
|
|
481
|
+
}
|
|
482
|
+
appendFileSync(logPath, logEntry);
|
|
483
|
+
}
|
|
484
|
+
function createConfigDirMigration(skillName, version) {
|
|
485
|
+
const unprefixedName = skillName.replace(/^droid-/, "");
|
|
486
|
+
return {
|
|
487
|
+
version,
|
|
488
|
+
description: `Move ${skillName} config to unprefixed location`,
|
|
489
|
+
up: (configDir) => {
|
|
490
|
+
const oldDir = join6(configDir, "skills", skillName);
|
|
491
|
+
const newDir = join6(configDir, "skills", unprefixedName);
|
|
492
|
+
if (existsSync4(oldDir) && !existsSync4(newDir)) {
|
|
493
|
+
const parentDir = dirname4(newDir);
|
|
494
|
+
if (!existsSync4(parentDir)) {
|
|
495
|
+
mkdirSync3(parentDir, { recursive: true });
|
|
496
|
+
}
|
|
497
|
+
renameSync(oldDir, newDir);
|
|
498
|
+
} else if (existsSync4(oldDir) && existsSync4(newDir)) {
|
|
499
|
+
rmSync(oldDir, { recursive: true });
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
var TOOL_MIGRATIONS = {
|
|
505
|
+
brain: [createConfigDirMigration("droid-brain", "0.2.3")],
|
|
506
|
+
comments: [createConfigDirMigration("droid-comments", "0.2.6")],
|
|
507
|
+
project: [createConfigDirMigration("droid-project", "0.1.5")],
|
|
508
|
+
coach: [createConfigDirMigration("droid-coach", "0.1.3")]
|
|
509
|
+
};
|
|
510
|
+
function getToolMigrations(toolName) {
|
|
511
|
+
return TOOL_MIGRATIONS[toolName] ?? [];
|
|
512
|
+
}
|
|
513
|
+
function getLastMigratedVersion(toolName) {
|
|
514
|
+
const config = loadConfig();
|
|
515
|
+
return config.migrations?.[toolName] ?? "0.0.0";
|
|
516
|
+
}
|
|
517
|
+
function setLastMigratedVersion(toolName, version) {
|
|
518
|
+
const config = loadConfig();
|
|
519
|
+
if (!config.migrations) {
|
|
520
|
+
config.migrations = {};
|
|
521
|
+
}
|
|
522
|
+
config.migrations[toolName] = version;
|
|
523
|
+
saveConfig(config);
|
|
524
|
+
}
|
|
525
|
+
function runMigrations(toolName, fromVersion, toVersion) {
|
|
526
|
+
const migrations = getToolMigrations(toolName);
|
|
527
|
+
const pendingMigrations = migrations.filter((m) => {
|
|
528
|
+
const afterFrom = compareSemver(m.version, fromVersion) > 0;
|
|
529
|
+
const beforeOrAtTo = compareSemver(m.version, toVersion) <= 0;
|
|
530
|
+
return afterFrom && beforeOrAtTo;
|
|
531
|
+
});
|
|
532
|
+
if (pendingMigrations.length === 0) {
|
|
533
|
+
setLastMigratedVersion(toolName, toVersion);
|
|
534
|
+
return { success: true };
|
|
535
|
+
}
|
|
536
|
+
const configDir = getConfigDir();
|
|
537
|
+
for (const migration of pendingMigrations) {
|
|
538
|
+
try {
|
|
539
|
+
migration.up(configDir);
|
|
540
|
+
logMigration(toolName, fromVersion, migration.version, "OK");
|
|
541
|
+
} catch (error) {
|
|
542
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
543
|
+
logMigration(toolName, fromVersion, migration.version, "FAILED", errorMessage);
|
|
544
|
+
return { success: false, error: `Migration ${migration.version} failed: ${errorMessage}` };
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
setLastMigratedVersion(toolName, toVersion);
|
|
548
|
+
return { success: true };
|
|
549
|
+
}
|
|
550
|
+
function runToolMigrations(toolName, installedVersion) {
|
|
551
|
+
const lastMigrated = getLastMigratedVersion(toolName);
|
|
552
|
+
if (compareSemver(installedVersion, lastMigrated) <= 0) {
|
|
553
|
+
return { success: true };
|
|
554
|
+
}
|
|
555
|
+
return runMigrations(toolName, lastMigrated, installedVersion);
|
|
556
|
+
}
|
|
557
|
+
|
|
460
558
|
// src/lib/skills.ts
|
|
461
559
|
var DROID_SKILLS_START = "<!-- droid-skills-start -->";
|
|
462
560
|
var DROID_SKILLS_END = "<!-- droid-skills-end -->";
|
|
463
|
-
var __dirname4 =
|
|
464
|
-
var BUNDLED_SKILLS_DIR =
|
|
561
|
+
var __dirname4 = dirname5(fileURLToPath4(import.meta.url));
|
|
562
|
+
var BUNDLED_SKILLS_DIR = join7(__dirname4, "../tools");
|
|
465
563
|
function getBundledSkillsDir() {
|
|
466
564
|
return BUNDLED_SKILLS_DIR;
|
|
467
565
|
}
|
|
@@ -477,7 +575,7 @@ function getPlatformConfigPath(platform) {
|
|
|
477
575
|
function updatePlatformConfigSkills(platform, installedSkills) {
|
|
478
576
|
const configPath = getPlatformConfigPath(platform);
|
|
479
577
|
let content = "";
|
|
480
|
-
if (
|
|
578
|
+
if (existsSync5(configPath)) {
|
|
481
579
|
content = readFileSync5(configPath, "utf-8");
|
|
482
580
|
}
|
|
483
581
|
const skillLines = installedSkills.map((name) => {
|
|
@@ -496,9 +594,9 @@ ${DROID_SKILLS_END}` : "";
|
|
|
496
594
|
} else if (skillsSection) {
|
|
497
595
|
content = content.trim() + "\n\n" + skillsSection + "\n";
|
|
498
596
|
}
|
|
499
|
-
const configDir =
|
|
500
|
-
if (!
|
|
501
|
-
|
|
597
|
+
const configDir = dirname5(configPath);
|
|
598
|
+
if (!existsSync5(configDir)) {
|
|
599
|
+
mkdirSync4(configDir, { recursive: true });
|
|
502
600
|
}
|
|
503
601
|
writeFileSync3(configPath, content, "utf-8");
|
|
504
602
|
}
|
|
@@ -519,8 +617,8 @@ function parseSkillFrontmatter(content) {
|
|
|
519
617
|
}
|
|
520
618
|
}
|
|
521
619
|
function loadSkillManifest(skillDir) {
|
|
522
|
-
const skillMdPath =
|
|
523
|
-
if (!
|
|
620
|
+
const skillMdPath = join7(skillDir, "SKILL.md");
|
|
621
|
+
if (!existsSync5(skillMdPath)) {
|
|
524
622
|
return null;
|
|
525
623
|
}
|
|
526
624
|
const content = readFileSync5(skillMdPath, "utf-8");
|
|
@@ -528,7 +626,7 @@ function loadSkillManifest(skillDir) {
|
|
|
528
626
|
if (!frontmatter || !frontmatter.name) {
|
|
529
627
|
return null;
|
|
530
628
|
}
|
|
531
|
-
const toolDir =
|
|
629
|
+
const toolDir = dirname5(dirname5(skillDir));
|
|
532
630
|
const toolManifest = loadToolManifest(toolDir);
|
|
533
631
|
return {
|
|
534
632
|
name: frontmatter.name,
|
|
@@ -540,17 +638,17 @@ function loadSkillManifest(skillDir) {
|
|
|
540
638
|
};
|
|
541
639
|
}
|
|
542
640
|
function findSkillPath(skillName) {
|
|
543
|
-
if (!
|
|
641
|
+
if (!existsSync5(BUNDLED_SKILLS_DIR)) {
|
|
544
642
|
return null;
|
|
545
643
|
}
|
|
546
644
|
const toolDirs = readdirSync3(BUNDLED_SKILLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
|
|
547
645
|
for (const toolName of toolDirs) {
|
|
548
|
-
const skillsDir =
|
|
549
|
-
if (!
|
|
550
|
-
const skillDir =
|
|
551
|
-
if (
|
|
646
|
+
const skillsDir = join7(BUNDLED_SKILLS_DIR, toolName, "skills");
|
|
647
|
+
if (!existsSync5(skillsDir)) continue;
|
|
648
|
+
const skillDir = join7(skillsDir, skillName);
|
|
649
|
+
if (existsSync5(skillDir) && existsSync5(join7(skillDir, "SKILL.md"))) {
|
|
552
650
|
return {
|
|
553
|
-
toolDir:
|
|
651
|
+
toolDir: join7(BUNDLED_SKILLS_DIR, toolName),
|
|
554
652
|
skillDir
|
|
555
653
|
};
|
|
556
654
|
}
|
|
@@ -558,17 +656,17 @@ function findSkillPath(skillName) {
|
|
|
558
656
|
return null;
|
|
559
657
|
}
|
|
560
658
|
function getBundledSkills() {
|
|
561
|
-
if (!
|
|
659
|
+
if (!existsSync5(BUNDLED_SKILLS_DIR)) {
|
|
562
660
|
return [];
|
|
563
661
|
}
|
|
564
662
|
const toolDirs = readdirSync3(BUNDLED_SKILLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
|
|
565
663
|
const skills = [];
|
|
566
664
|
for (const toolName of toolDirs) {
|
|
567
|
-
const skillsDir =
|
|
568
|
-
if (!
|
|
665
|
+
const skillsDir = join7(BUNDLED_SKILLS_DIR, toolName, "skills");
|
|
666
|
+
if (!existsSync5(skillsDir)) continue;
|
|
569
667
|
const skillSubdirs = readdirSync3(skillsDir, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
|
|
570
668
|
for (const skillName of skillSubdirs) {
|
|
571
|
-
const manifest = loadSkillManifest(
|
|
669
|
+
const manifest = loadSkillManifest(join7(skillsDir, skillName));
|
|
572
670
|
if (manifest) {
|
|
573
671
|
skills.push(manifest);
|
|
574
672
|
}
|
|
@@ -691,17 +789,33 @@ function installSkill(skillName) {
|
|
|
691
789
|
}
|
|
692
790
|
}
|
|
693
791
|
const skillsPath = getSkillsInstallPath(config.platform);
|
|
694
|
-
const targetSkillDir =
|
|
792
|
+
const targetSkillDir = join7(skillsPath, skillName);
|
|
695
793
|
const commandsPath = getCommandsInstallPath(config.platform);
|
|
696
794
|
const tools = getPlatformTools(config);
|
|
697
|
-
|
|
698
|
-
|
|
795
|
+
if (skillName.startsWith("droid-")) {
|
|
796
|
+
const oldSkillName = skillName.replace(/^droid-/, "");
|
|
797
|
+
const oldSkillDir = join7(skillsPath, oldSkillName);
|
|
798
|
+
if (existsSync5(oldSkillDir)) {
|
|
799
|
+
try {
|
|
800
|
+
rmSync2(oldSkillDir, { recursive: true });
|
|
801
|
+
} catch (error) {
|
|
802
|
+
console.warn(`Warning: Could not remove old skill directory ${oldSkillDir}: ${error}`);
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
if (tools[oldSkillName]) {
|
|
806
|
+
delete tools[oldSkillName];
|
|
807
|
+
setPlatformTools(config, tools);
|
|
808
|
+
saveConfig(config);
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
const commandsSource = join7(toolDir, "commands");
|
|
812
|
+
const agentsSource = join7(toolDir, "agents");
|
|
699
813
|
if (!tools[skillName]) {
|
|
700
|
-
if (
|
|
814
|
+
if (existsSync5(commandsSource)) {
|
|
701
815
|
const commandFiles = readdirSync3(commandsSource).filter((f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md");
|
|
702
816
|
for (const file of commandFiles) {
|
|
703
|
-
const targetCommandPath =
|
|
704
|
-
if (
|
|
817
|
+
const targetCommandPath = join7(commandsPath, file);
|
|
818
|
+
if (existsSync5(targetCommandPath)) {
|
|
705
819
|
const commandName = file.replace(".md", "");
|
|
706
820
|
return {
|
|
707
821
|
success: false,
|
|
@@ -710,7 +824,7 @@ function installSkill(skillName) {
|
|
|
710
824
|
}
|
|
711
825
|
}
|
|
712
826
|
}
|
|
713
|
-
if (
|
|
827
|
+
if (existsSync5(agentsSource)) {
|
|
714
828
|
const agentDirs = readdirSync3(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
|
|
715
829
|
for (const agentName of agentDirs) {
|
|
716
830
|
if (isAgentInstalled(agentName)) {
|
|
@@ -722,49 +836,49 @@ function installSkill(skillName) {
|
|
|
722
836
|
}
|
|
723
837
|
}
|
|
724
838
|
}
|
|
725
|
-
if (!
|
|
726
|
-
|
|
839
|
+
if (!existsSync5(skillsPath)) {
|
|
840
|
+
mkdirSync4(skillsPath, { recursive: true });
|
|
727
841
|
}
|
|
728
|
-
const skillMdSource =
|
|
729
|
-
if (
|
|
730
|
-
if (!
|
|
731
|
-
|
|
842
|
+
const skillMdSource = join7(skillDir, "SKILL.md");
|
|
843
|
+
if (existsSync5(skillMdSource)) {
|
|
844
|
+
if (!existsSync5(targetSkillDir)) {
|
|
845
|
+
mkdirSync4(targetSkillDir, { recursive: true });
|
|
732
846
|
}
|
|
733
|
-
const skillMdTarget =
|
|
847
|
+
const skillMdTarget = join7(targetSkillDir, "SKILL.md");
|
|
734
848
|
const content = readFileSync5(skillMdSource, "utf-8");
|
|
735
849
|
writeFileSync3(skillMdTarget, content);
|
|
736
850
|
}
|
|
737
|
-
const referencesSource =
|
|
738
|
-
if (
|
|
739
|
-
const targetReferencesDir =
|
|
740
|
-
if (!
|
|
741
|
-
|
|
851
|
+
const referencesSource = join7(skillDir, "references");
|
|
852
|
+
if (existsSync5(referencesSource)) {
|
|
853
|
+
const targetReferencesDir = join7(targetSkillDir, "references");
|
|
854
|
+
if (!existsSync5(targetReferencesDir)) {
|
|
855
|
+
mkdirSync4(targetReferencesDir, { recursive: true });
|
|
742
856
|
}
|
|
743
857
|
const referenceFiles = readdirSync3(referencesSource).filter((f) => f.endsWith(".md"));
|
|
744
858
|
for (const file of referenceFiles) {
|
|
745
|
-
const sourcePath =
|
|
746
|
-
const targetPath =
|
|
859
|
+
const sourcePath = join7(referencesSource, file);
|
|
860
|
+
const targetPath = join7(targetReferencesDir, file);
|
|
747
861
|
const content = readFileSync5(sourcePath, "utf-8");
|
|
748
862
|
writeFileSync3(targetPath, content);
|
|
749
863
|
}
|
|
750
864
|
}
|
|
751
|
-
if (
|
|
752
|
-
if (!
|
|
753
|
-
|
|
865
|
+
if (existsSync5(commandsSource)) {
|
|
866
|
+
if (!existsSync5(commandsPath)) {
|
|
867
|
+
mkdirSync4(commandsPath, { recursive: true });
|
|
754
868
|
}
|
|
755
869
|
const commandFiles = readdirSync3(commandsSource).filter((f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md");
|
|
756
870
|
for (const file of commandFiles) {
|
|
757
|
-
const sourcePath =
|
|
758
|
-
const targetPath =
|
|
871
|
+
const sourcePath = join7(commandsSource, file);
|
|
872
|
+
const targetPath = join7(commandsPath, file);
|
|
759
873
|
const content = readFileSync5(sourcePath, "utf-8");
|
|
760
874
|
writeFileSync3(targetPath, content);
|
|
761
875
|
}
|
|
762
876
|
}
|
|
763
877
|
const installedAgents = [];
|
|
764
|
-
if (
|
|
878
|
+
if (existsSync5(agentsSource)) {
|
|
765
879
|
const agentDirs = readdirSync3(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
|
|
766
880
|
for (const agentName of agentDirs) {
|
|
767
|
-
const agentDir =
|
|
881
|
+
const agentDir = join7(agentsSource, agentName);
|
|
768
882
|
const result = installAgentFromPath(agentDir, agentName);
|
|
769
883
|
if (result.success) {
|
|
770
884
|
installedAgents.push(agentName);
|
|
@@ -783,6 +897,11 @@ function installSkill(skillName) {
|
|
|
783
897
|
saveConfig(config);
|
|
784
898
|
const installedSkillNames = Object.keys(updatedTools);
|
|
785
899
|
updatePlatformConfigSkills(config.platform, installedSkillNames);
|
|
900
|
+
const toolName = basename(toolDir);
|
|
901
|
+
const migrationResult = runToolMigrations(toolName, manifest.version);
|
|
902
|
+
if (!migrationResult.success) {
|
|
903
|
+
console.warn(`Warning: Migration failed for ${toolName}: ${migrationResult.error}`);
|
|
904
|
+
}
|
|
786
905
|
return { success: true, message: `Installed ${skillName} v${manifest.version}` };
|
|
787
906
|
}
|
|
788
907
|
function uninstallSkill(skillName) {
|
|
@@ -792,19 +911,19 @@ function uninstallSkill(skillName) {
|
|
|
792
911
|
return { success: false, message: `Skill '${skillName}' is not installed` };
|
|
793
912
|
}
|
|
794
913
|
const skillsPath = getSkillsInstallPath(config.platform);
|
|
795
|
-
const skillDir =
|
|
796
|
-
if (
|
|
797
|
-
|
|
914
|
+
const skillDir = join7(skillsPath, skillName);
|
|
915
|
+
if (existsSync5(skillDir)) {
|
|
916
|
+
rmSync2(skillDir, { recursive: true });
|
|
798
917
|
}
|
|
799
918
|
const skillPath = findSkillPath(skillName);
|
|
800
919
|
const commandsPath = getCommandsInstallPath(config.platform);
|
|
801
|
-
const commandsSource = skillPath ?
|
|
802
|
-
if (commandsSource &&
|
|
920
|
+
const commandsSource = skillPath ? join7(skillPath.toolDir, "commands") : null;
|
|
921
|
+
if (commandsSource && existsSync5(commandsSource)) {
|
|
803
922
|
const commandFiles = readdirSync3(commandsSource).filter((f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md");
|
|
804
923
|
for (const file of commandFiles) {
|
|
805
|
-
const commandPath =
|
|
806
|
-
if (
|
|
807
|
-
|
|
924
|
+
const commandPath = join7(commandsPath, file);
|
|
925
|
+
if (existsSync5(commandPath)) {
|
|
926
|
+
rmSync2(commandPath);
|
|
808
927
|
}
|
|
809
928
|
}
|
|
810
929
|
}
|
|
@@ -840,7 +959,7 @@ function isCommandInstalled(commandName, skillName) {
|
|
|
840
959
|
const commandsPath = getCommandsInstallPath(config.platform);
|
|
841
960
|
const cmdPart = commandName.startsWith(skillName + " ") ? commandName.slice(skillName.length + 1) : commandName;
|
|
842
961
|
const filename = cmdPart.replace(/\s+/g, "-") + ".md";
|
|
843
|
-
return
|
|
962
|
+
return existsSync5(join7(commandsPath, filename));
|
|
844
963
|
}
|
|
845
964
|
function installCommand(commandName, skillName) {
|
|
846
965
|
const config = loadConfig();
|
|
@@ -848,8 +967,8 @@ function installCommand(commandName, skillName) {
|
|
|
848
967
|
if (!skillPath) {
|
|
849
968
|
return { success: false, message: `Skill '${skillName}' not found` };
|
|
850
969
|
}
|
|
851
|
-
const commandsDir =
|
|
852
|
-
if (!
|
|
970
|
+
const commandsDir = join7(skillPath.toolDir, "commands");
|
|
971
|
+
if (!existsSync5(commandsDir)) {
|
|
853
972
|
return { success: false, message: `No commands found for skill '${skillName}'` };
|
|
854
973
|
}
|
|
855
974
|
const cmdPart = commandName.startsWith(skillName + " ") ? commandName.slice(skillName.length + 1) : commandName;
|
|
@@ -862,11 +981,11 @@ function installCommand(commandName, skillName) {
|
|
|
862
981
|
return { success: false, message: `Command file not found for: ${commandName}` };
|
|
863
982
|
}
|
|
864
983
|
const commandsPath = getCommandsInstallPath(config.platform);
|
|
865
|
-
if (!
|
|
866
|
-
|
|
984
|
+
if (!existsSync5(commandsPath)) {
|
|
985
|
+
mkdirSync4(commandsPath, { recursive: true });
|
|
867
986
|
}
|
|
868
|
-
const actualSourcePath =
|
|
869
|
-
const targetPath =
|
|
987
|
+
const actualSourcePath = join7(commandsDir, sourceFile);
|
|
988
|
+
const targetPath = join7(commandsPath, sourceFile);
|
|
870
989
|
try {
|
|
871
990
|
const content = readFileSync5(actualSourcePath, "utf-8");
|
|
872
991
|
writeFileSync3(targetPath, content);
|
|
@@ -890,10 +1009,10 @@ function uninstallCommand(commandName, skillName) {
|
|
|
890
1009
|
cmdPart.replace(/\s+/g, "-") + ".md"
|
|
891
1010
|
];
|
|
892
1011
|
for (const filename of possibleFilenames) {
|
|
893
|
-
const commandPath =
|
|
894
|
-
if (
|
|
1012
|
+
const commandPath = join7(commandsPath, filename);
|
|
1013
|
+
if (existsSync5(commandPath)) {
|
|
895
1014
|
try {
|
|
896
|
-
|
|
1015
|
+
rmSync2(commandPath);
|
|
897
1016
|
return { success: true, message: `Uninstalled /${commandName}` };
|
|
898
1017
|
} catch (error) {
|
|
899
1018
|
return { success: false, message: `Failed to uninstall command: ${error}` };
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,WAAW,EAA0B,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAgDxI;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,WAAW,CA2BxC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAKpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAanD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAchE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,WAAW,EAA0B,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAgDxI;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,WAAW,CA2BxC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAKpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAanD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAchE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAWD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAapE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,IAAI,CAWrF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAMtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAQ5E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Migration } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Get migrations for a tool
|
|
4
|
+
*/
|
|
5
|
+
export declare function getToolMigrations(toolName: string): Migration[];
|
|
6
|
+
/**
|
|
7
|
+
* Get the last migrated version for a tool
|
|
8
|
+
*/
|
|
9
|
+
export declare function getLastMigratedVersion(toolName: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Update the last migrated version for a tool
|
|
12
|
+
*/
|
|
13
|
+
export declare function setLastMigratedVersion(toolName: string, version: string): void;
|
|
14
|
+
/**
|
|
15
|
+
* Run migrations for a tool between two versions
|
|
16
|
+
* Returns true if all migrations succeeded, false otherwise
|
|
17
|
+
*/
|
|
18
|
+
export declare function runMigrations(toolName: string, fromVersion: string, toVersion: string): {
|
|
19
|
+
success: boolean;
|
|
20
|
+
error?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Run migrations for a tool after install/update
|
|
24
|
+
* Call this after installSkill() completes
|
|
25
|
+
*/
|
|
26
|
+
export declare function runToolMigrations(toolName: string, installedVersion: string): {
|
|
27
|
+
success: boolean;
|
|
28
|
+
error?: string;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/lib/migrations.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AA4FzC;;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,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAO9E;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,CAiCtC;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 +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,
|
|
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"}
|
package/dist/lib/skills.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAsC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/lib/tools.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,
|
|
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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ 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
43
|
}
|
|
43
44
|
export interface LegacyDroidConfig {
|
|
44
45
|
ai_tool: Platform;
|
|
@@ -84,6 +85,15 @@ export interface ConfigOption {
|
|
|
84
85
|
export interface SkillOverrides {
|
|
85
86
|
[key: string]: string | boolean | number;
|
|
86
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Tool migration function
|
|
90
|
+
* Should be idempotent - safe to run multiple times
|
|
91
|
+
*/
|
|
92
|
+
export interface Migration {
|
|
93
|
+
version: string;
|
|
94
|
+
description: string;
|
|
95
|
+
up: (configDir: string) => Promise<void> | void;
|
|
96
|
+
}
|
|
87
97
|
/**
|
|
88
98
|
* Tool manifest structure (TOOL.yaml)
|
|
89
99
|
*/
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,UAAU,gBAAgB;IAC1B,QAAQ,aAAa;CACtB;AAID,QAAA,MAAM,WAAW,iBAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,CAAC;AACjC,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC;AAE9B;;;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,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
name: brain
|
|
2
2
|
description: "Your scratchpad (or brain) - a collaborative space for planning and research. Create docs with /brain plan, /brain research, or /brain review. Use @mentions for async discussion. Docs persist across sessions."
|
|
3
|
-
version: 0.2.
|
|
3
|
+
version: 0.2.3
|
|
4
4
|
status: beta
|
|
5
5
|
|
|
6
6
|
includes:
|
|
7
7
|
skills:
|
|
8
|
-
- name: brain
|
|
8
|
+
- name: droid-brain
|
|
9
9
|
required: true
|
|
10
|
-
- name: brain-obsidian
|
|
10
|
+
- name: droid-brain-obsidian
|
|
11
11
|
required: false
|
|
12
12
|
description: "Obsidian vault integration with YAML frontmatter and wikilinks"
|
|
13
13
|
commands:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: brain
|
|
2
|
+
name: droid-brain
|
|
3
3
|
description: "Collaborative scratchpad for planning and research. Use when planning a feature, exploring a problem, or capturing thinking that should persist across sessions. User prompts like 'let's think through', 'open a scratchpad', 'plan this out', 'use our brain'."
|
|
4
4
|
globs:
|
|
5
5
|
- "**/brain/**/*.md"
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
name: coach
|
|
2
2
|
description: "Learning-mode AI assistance - AI as coach, not crutch. Use /coach plan for co-authored planning, /coach scaffold for structure with hints, /coach review for Socratic questions."
|
|
3
|
-
version: 0.1.
|
|
3
|
+
version: 0.1.3
|
|
4
4
|
status: beta
|
|
5
5
|
|
|
6
6
|
includes:
|
|
7
7
|
skills:
|
|
8
|
-
- name: coach
|
|
8
|
+
- name: droid-coach
|
|
9
9
|
required: true
|
|
10
10
|
commands:
|
|
11
11
|
- coach
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: coach
|
|
2
|
+
name: droid-coach
|
|
3
3
|
description: "Learning-mode AI assistance - scaffolds don't implement, questions don't fix. Use when learning a new codebase, wanting to understand deeply, or building skills to retain. User prompts like 'coach me on', 'help me think through', 'I want to learn how to', 'don't just give me the answer'."
|
|
4
4
|
alwaysApply: false
|
|
5
5
|
allowed-tools: Read, Grep, Glob
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
name: code-review
|
|
2
2
|
description: "Comprehensive code review using specialized agents. Reviews PRs, staged changes, branches, or specific files with confidence scoring."
|
|
3
|
-
version: 0.1.
|
|
3
|
+
version: 0.1.2
|
|
4
4
|
status: alpha
|
|
5
5
|
|
|
6
6
|
includes:
|
|
7
7
|
skills:
|
|
8
|
-
- name: code-review
|
|
8
|
+
- name: droid-code-review
|
|
9
9
|
required: true
|
|
10
10
|
commands:
|
|
11
11
|
- code-review
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: code-review
|
|
2
|
+
name: droid-code-review
|
|
3
3
|
description: "Comprehensive code review using specialized agents. Use when reviewing PRs, checking staged changes, or analysing code quality. User prompts like 'review this PR', 'check my changes', 'review before I commit'."
|
|
4
4
|
globs:
|
|
5
5
|
- "**/*"
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
name: comments
|
|
2
2
|
description: "Enable inline conversations using @droid/@user markers. Tag @droid to ask the AI, AI responds with @{your-name}. Use /comments check to address markers, /comments cleanup to remove resolved threads. Ideal for code review notes and async collaboration."
|
|
3
|
-
version: 0.2.
|
|
3
|
+
version: 0.2.6
|
|
4
4
|
status: beta
|
|
5
5
|
|
|
6
6
|
includes:
|
|
7
7
|
skills:
|
|
8
|
-
- name: comments
|
|
8
|
+
- name: droid-comments
|
|
9
9
|
required: true
|
|
10
10
|
commands:
|
|
11
11
|
- comments
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: comments
|
|
2
|
+
name: droid-comments
|
|
3
3
|
description: "Inline conversations using @droid/@user markers in any file. Use when leaving async questions in code or having discussion that should stay near the code. User prompts like 'check for comments', 'address the @droid markers', 'clean up resolved comments'."
|
|
4
4
|
globs:
|
|
5
5
|
- "**/*"
|