@orderful/droid 0.2.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/.changeset/README.md +30 -0
- package/.changeset/config.json +14 -0
- package/.eslintrc.json +20 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +9 -0
- package/.github/workflows/ci.yml +47 -0
- package/.github/workflows/release.yml +45 -0
- package/CHANGELOG.md +11 -0
- package/README.md +153 -0
- package/bun.lock +571 -0
- package/dist/bin/droid.d.ts +3 -0
- package/dist/bin/droid.d.ts.map +1 -0
- package/dist/bin/droid.js +48 -0
- package/dist/bin/droid.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +67 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/install.d.ts +2 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +42 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/setup.d.ts +2 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +132 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skills.d.ts +2 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +135 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +17 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +45 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +46 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +133 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/skill-config.d.ts +6 -0
- package/dist/lib/skill-config.d.ts.map +1 -0
- package/dist/lib/skill-config.js +80 -0
- package/dist/lib/skill-config.js.map +1 -0
- package/dist/lib/skills.d.ts +56 -0
- package/dist/lib/skills.d.ts.map +1 -0
- package/dist/lib/skills.js +245 -0
- package/dist/lib/skills.js.map +1 -0
- package/dist/lib/types.d.ts +54 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +31 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/version.d.ts +10 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +41 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/skills/comments/SKILL.md +65 -0
- package/dist/skills/comments/SKILL.yaml +18 -0
- package/dist/skills/comments/commands/comments.md +48 -0
- package/package.json +58 -0
- package/src/bin/droid.ts +58 -0
- package/src/commands/config.ts +86 -0
- package/src/commands/install.ts +48 -0
- package/src/commands/setup.ts +149 -0
- package/src/commands/skills.ts +159 -0
- package/src/commands/uninstall.ts +18 -0
- package/src/commands/update.ts +58 -0
- package/src/index.ts +5 -0
- package/src/lib/config.test.ts +99 -0
- package/src/lib/config.ts +154 -0
- package/src/lib/skill-config.ts +93 -0
- package/src/lib/skills.test.ts +138 -0
- package/src/lib/skills.ts +285 -0
- package/src/lib/types.test.ts +65 -0
- package/src/lib/types.ts +68 -0
- package/src/lib/version.test.ts +23 -0
- package/src/lib/version.ts +47 -0
- package/src/skills/comments/SKILL.md +65 -0
- package/src/skills/comments/SKILL.yaml +18 -0
- package/src/skills/comments/commands/comments.md +48 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type DroidConfig, type SkillOverrides } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Ensure the config directory exists
|
|
4
|
+
*/
|
|
5
|
+
export declare function ensureConfigDir(): void;
|
|
6
|
+
/**
|
|
7
|
+
* Check if config file exists
|
|
8
|
+
*/
|
|
9
|
+
export declare function configExists(): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Load the global config, or return defaults if none exists
|
|
12
|
+
*/
|
|
13
|
+
export declare function loadConfig(): DroidConfig;
|
|
14
|
+
/**
|
|
15
|
+
* Save the global config
|
|
16
|
+
*/
|
|
17
|
+
export declare function saveConfig(config: DroidConfig): void;
|
|
18
|
+
/**
|
|
19
|
+
* Get a specific config value using dot notation
|
|
20
|
+
*/
|
|
21
|
+
export declare function getConfigValue(key: string): unknown;
|
|
22
|
+
/**
|
|
23
|
+
* Set a specific config value using dot notation
|
|
24
|
+
*/
|
|
25
|
+
export declare function setConfigValue(key: string, value: unknown): void;
|
|
26
|
+
/**
|
|
27
|
+
* Get the path to the config file
|
|
28
|
+
*/
|
|
29
|
+
export declare function getConfigPath(): string;
|
|
30
|
+
/**
|
|
31
|
+
* Get the path to the config directory
|
|
32
|
+
*/
|
|
33
|
+
export declare function getConfigDir(): string;
|
|
34
|
+
/**
|
|
35
|
+
* Get skill-specific overrides path
|
|
36
|
+
*/
|
|
37
|
+
export declare function getSkillOverridesPath(skillName: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Load skill-specific overrides
|
|
40
|
+
*/
|
|
41
|
+
export declare function loadSkillOverrides(skillName: string): SkillOverrides;
|
|
42
|
+
/**
|
|
43
|
+
* Save skill-specific overrides
|
|
44
|
+
*/
|
|
45
|
+
export declare function saveSkillOverrides(skillName: string, overrides: SkillOverrides): void;
|
|
46
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAyB,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAa1F;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,WAAW,CAgBxC;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;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/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,CAUrF"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import YAML from 'yaml';
|
|
5
|
+
import { AITool, BuiltInOutput } from './types.js';
|
|
6
|
+
const CONFIG_DIR = join(homedir(), '.droid');
|
|
7
|
+
const CONFIG_FILE = join(CONFIG_DIR, 'config.yaml');
|
|
8
|
+
const DEFAULT_CONFIG = {
|
|
9
|
+
ai_tool: AITool.ClaudeCode,
|
|
10
|
+
user_mention: '@user',
|
|
11
|
+
output_preference: BuiltInOutput.Terminal,
|
|
12
|
+
git_username: '',
|
|
13
|
+
skills: {},
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Ensure the config directory exists
|
|
17
|
+
*/
|
|
18
|
+
export function ensureConfigDir() {
|
|
19
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
20
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if config file exists
|
|
25
|
+
*/
|
|
26
|
+
export function configExists() {
|
|
27
|
+
return existsSync(CONFIG_FILE);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Load the global config, or return defaults if none exists
|
|
31
|
+
*/
|
|
32
|
+
export function loadConfig() {
|
|
33
|
+
ensureConfigDir();
|
|
34
|
+
if (!existsSync(CONFIG_FILE)) {
|
|
35
|
+
return { ...DEFAULT_CONFIG };
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const content = readFileSync(CONFIG_FILE, 'utf-8');
|
|
39
|
+
const config = YAML.parse(content);
|
|
40
|
+
return { ...DEFAULT_CONFIG, ...config };
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
44
|
+
console.error(`Error reading config: ${message}`);
|
|
45
|
+
return { ...DEFAULT_CONFIG };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Save the global config
|
|
50
|
+
*/
|
|
51
|
+
export function saveConfig(config) {
|
|
52
|
+
ensureConfigDir();
|
|
53
|
+
const content = YAML.stringify(config, { indent: 2 });
|
|
54
|
+
writeFileSync(CONFIG_FILE, content, 'utf-8');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get a specific config value using dot notation
|
|
58
|
+
*/
|
|
59
|
+
export function getConfigValue(key) {
|
|
60
|
+
const config = loadConfig();
|
|
61
|
+
const keys = key.split('.');
|
|
62
|
+
let value = config;
|
|
63
|
+
for (const k of keys) {
|
|
64
|
+
if (value === undefined || value === null || typeof value !== 'object') {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
value = value[k];
|
|
68
|
+
}
|
|
69
|
+
return value;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Set a specific config value using dot notation
|
|
73
|
+
*/
|
|
74
|
+
export function setConfigValue(key, value) {
|
|
75
|
+
const config = loadConfig();
|
|
76
|
+
const keys = key.split('.');
|
|
77
|
+
let current = config;
|
|
78
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
79
|
+
if (current[keys[i]] === undefined) {
|
|
80
|
+
current[keys[i]] = {};
|
|
81
|
+
}
|
|
82
|
+
current = current[keys[i]];
|
|
83
|
+
}
|
|
84
|
+
current[keys[keys.length - 1]] = value;
|
|
85
|
+
saveConfig(config);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get the path to the config file
|
|
89
|
+
*/
|
|
90
|
+
export function getConfigPath() {
|
|
91
|
+
return CONFIG_FILE;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get the path to the config directory
|
|
95
|
+
*/
|
|
96
|
+
export function getConfigDir() {
|
|
97
|
+
return CONFIG_DIR;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get skill-specific overrides path
|
|
101
|
+
*/
|
|
102
|
+
export function getSkillOverridesPath(skillName) {
|
|
103
|
+
return join(CONFIG_DIR, 'skills', skillName, 'overrides.yaml');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Load skill-specific overrides
|
|
107
|
+
*/
|
|
108
|
+
export function loadSkillOverrides(skillName) {
|
|
109
|
+
const overridesPath = getSkillOverridesPath(skillName);
|
|
110
|
+
if (!existsSync(overridesPath)) {
|
|
111
|
+
return {};
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const content = readFileSync(overridesPath, 'utf-8');
|
|
115
|
+
return YAML.parse(content) || {};
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return {};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Save skill-specific overrides
|
|
123
|
+
*/
|
|
124
|
+
export function saveSkillOverrides(skillName, overrides) {
|
|
125
|
+
const overridesPath = getSkillOverridesPath(skillName);
|
|
126
|
+
const skillDir = join(CONFIG_DIR, 'skills', skillName);
|
|
127
|
+
if (!existsSync(skillDir)) {
|
|
128
|
+
mkdirSync(skillDir, { recursive: true });
|
|
129
|
+
}
|
|
130
|
+
const content = YAML.stringify(overrides, { indent: 2 });
|
|
131
|
+
writeFileSync(overridesPath, content, 'utf-8');
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ConfigOption } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Prompt user to configure a skill after install
|
|
4
|
+
*/
|
|
5
|
+
export declare function promptForSkillConfig(skillName: string, configSchema: Record<string, ConfigOption>, askFirst?: boolean): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=skill-config.d.ts.map
|
|
@@ -0,0 +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,YAAY,CAAC;AAEtF;;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,CAgFf"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { saveSkillOverrides, loadConfig, loadSkillOverrides } from './config.js';
|
|
4
|
+
import { ConfigOptionType } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Prompt user to configure a skill after install
|
|
7
|
+
*/
|
|
8
|
+
export async function promptForSkillConfig(skillName, configSchema, askFirst = true) {
|
|
9
|
+
const globalConfig = loadConfig();
|
|
10
|
+
if (askFirst) {
|
|
11
|
+
const { wantsConfigure } = await inquirer.prompt([
|
|
12
|
+
{
|
|
13
|
+
type: 'confirm',
|
|
14
|
+
name: 'wantsConfigure',
|
|
15
|
+
message: 'Would you like to configure this skill now?',
|
|
16
|
+
default: false,
|
|
17
|
+
},
|
|
18
|
+
]);
|
|
19
|
+
if (!wantsConfigure) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
console.log(chalk.bold(`\n⚙️ Configure ${skillName}\n`));
|
|
24
|
+
// Load existing overrides to use as defaults
|
|
25
|
+
const existingOverrides = loadSkillOverrides(skillName);
|
|
26
|
+
const questions = Object.entries(configSchema).map(([key, option]) => {
|
|
27
|
+
const baseQuestion = {
|
|
28
|
+
name: key,
|
|
29
|
+
message: option.description,
|
|
30
|
+
};
|
|
31
|
+
// Use existing override as default if present
|
|
32
|
+
const existingValue = existingOverrides[key];
|
|
33
|
+
switch (option.type) {
|
|
34
|
+
case ConfigOptionType.Boolean:
|
|
35
|
+
return {
|
|
36
|
+
...baseQuestion,
|
|
37
|
+
type: 'confirm',
|
|
38
|
+
default: existingValue ?? option.default ?? false,
|
|
39
|
+
};
|
|
40
|
+
case ConfigOptionType.Select:
|
|
41
|
+
return {
|
|
42
|
+
...baseQuestion,
|
|
43
|
+
type: 'list',
|
|
44
|
+
choices: option.options || [],
|
|
45
|
+
default: existingValue ?? option.default,
|
|
46
|
+
};
|
|
47
|
+
case ConfigOptionType.String:
|
|
48
|
+
default: {
|
|
49
|
+
// For user_mention, default to global config value if no existing override
|
|
50
|
+
let defaultValue = existingValue ?? option.default ?? '';
|
|
51
|
+
if (key === 'user_mention' && !existingValue && globalConfig.user_mention) {
|
|
52
|
+
defaultValue = globalConfig.user_mention;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
...baseQuestion,
|
|
56
|
+
type: 'input',
|
|
57
|
+
default: defaultValue,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const answers = await inquirer.prompt(questions);
|
|
63
|
+
// Filter out empty/default values to keep overrides minimal
|
|
64
|
+
const overrides = {};
|
|
65
|
+
for (const [key, value] of Object.entries(answers)) {
|
|
66
|
+
const schema = configSchema[key];
|
|
67
|
+
// Only save if different from default
|
|
68
|
+
if (value !== schema.default && value !== '' && value !== false) {
|
|
69
|
+
overrides[key] = value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (Object.keys(overrides).length > 0) {
|
|
73
|
+
saveSkillOverrides(skillName, overrides);
|
|
74
|
+
console.log(chalk.green(`\n✓ Configuration saved to ~/.droid/skills/${skillName}/overrides.yaml`));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log(chalk.gray('\nNo custom configuration set (using defaults).'));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=skill-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-config.js","sourceRoot":"","sources":["../../src/lib/skill-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { AITool, SkillStatus, type SkillManifest, type InstalledSkill } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get the path to bundled skills directory
|
|
4
|
+
*/
|
|
5
|
+
export declare function getBundledSkillsDir(): string;
|
|
6
|
+
/**
|
|
7
|
+
* Get the installation path for skills based on AI tool
|
|
8
|
+
*/
|
|
9
|
+
export declare function getSkillsInstallPath(aiTool: AITool): string;
|
|
10
|
+
/**
|
|
11
|
+
* Get the commands installation path based on AI tool
|
|
12
|
+
*/
|
|
13
|
+
export declare function getCommandsInstallPath(aiTool: AITool): string;
|
|
14
|
+
/**
|
|
15
|
+
* Get the path to the AI tool's main config markdown file
|
|
16
|
+
*/
|
|
17
|
+
export declare function getAIConfigPath(aiTool: AITool): string;
|
|
18
|
+
/**
|
|
19
|
+
* Update the AI tool's config file with skill registrations
|
|
20
|
+
*/
|
|
21
|
+
export declare function updateAIConfigSkills(aiTool: AITool, installedSkills: string[]): void;
|
|
22
|
+
/**
|
|
23
|
+
* Load a skill manifest from a skill directory
|
|
24
|
+
*/
|
|
25
|
+
export declare function loadSkillManifest(skillDir: string): SkillManifest | null;
|
|
26
|
+
/**
|
|
27
|
+
* Get all bundled skills
|
|
28
|
+
*/
|
|
29
|
+
export declare function getBundledSkills(): SkillManifest[];
|
|
30
|
+
/**
|
|
31
|
+
* Check if a skill is installed
|
|
32
|
+
*/
|
|
33
|
+
export declare function isSkillInstalled(skillName: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Get installed skill info
|
|
36
|
+
*/
|
|
37
|
+
export declare function getInstalledSkill(skillName: string): InstalledSkill | null;
|
|
38
|
+
/**
|
|
39
|
+
* Install a skill
|
|
40
|
+
*/
|
|
41
|
+
export declare function installSkill(skillName: string): {
|
|
42
|
+
success: boolean;
|
|
43
|
+
message: string;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Uninstall a skill
|
|
47
|
+
*/
|
|
48
|
+
export declare function uninstallSkill(skillName: string): {
|
|
49
|
+
success: boolean;
|
|
50
|
+
message: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Get skill status display string
|
|
54
|
+
*/
|
|
55
|
+
export declare function getSkillStatusDisplay(status?: SkillStatus): string;
|
|
56
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAS1F;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAO7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAqCpF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAaxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,EAAE,CAmBlD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAG3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAG1E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAkErF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAqCvF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAUlE"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync, cpSync, rmSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import YAML from 'yaml';
|
|
6
|
+
import { loadConfig, saveConfig } from './config.js';
|
|
7
|
+
import { AITool, SkillStatus } from './types.js';
|
|
8
|
+
// Marker comments for CLAUDE.md skill registration
|
|
9
|
+
const DROID_SKILLS_START = '<!-- droid-skills-start -->';
|
|
10
|
+
const DROID_SKILLS_END = '<!-- droid-skills-end -->';
|
|
11
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const BUNDLED_SKILLS_DIR = join(__dirname, '../skills');
|
|
13
|
+
/**
|
|
14
|
+
* Get the path to bundled skills directory
|
|
15
|
+
*/
|
|
16
|
+
export function getBundledSkillsDir() {
|
|
17
|
+
return BUNDLED_SKILLS_DIR;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get the installation path for skills based on AI tool
|
|
21
|
+
*/
|
|
22
|
+
export function getSkillsInstallPath(aiTool) {
|
|
23
|
+
switch (aiTool) {
|
|
24
|
+
case AITool.ClaudeCode:
|
|
25
|
+
return join(homedir(), '.claude', 'skills');
|
|
26
|
+
case AITool.OpenCode:
|
|
27
|
+
return join(homedir(), '.config', 'opencode', 'skills');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get the commands installation path based on AI tool
|
|
32
|
+
*/
|
|
33
|
+
export function getCommandsInstallPath(aiTool) {
|
|
34
|
+
switch (aiTool) {
|
|
35
|
+
case AITool.ClaudeCode:
|
|
36
|
+
return join(homedir(), '.claude', 'commands');
|
|
37
|
+
case AITool.OpenCode:
|
|
38
|
+
return join(homedir(), '.config', 'opencode', 'command');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get the path to the AI tool's main config markdown file
|
|
43
|
+
*/
|
|
44
|
+
export function getAIConfigPath(aiTool) {
|
|
45
|
+
switch (aiTool) {
|
|
46
|
+
case AITool.ClaudeCode:
|
|
47
|
+
return join(homedir(), '.claude', 'CLAUDE.md');
|
|
48
|
+
case AITool.OpenCode:
|
|
49
|
+
return join(homedir(), '.config', 'opencode', 'AGENTS.md');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Update the AI tool's config file with skill registrations
|
|
54
|
+
*/
|
|
55
|
+
export function updateAIConfigSkills(aiTool, installedSkills) {
|
|
56
|
+
const configPath = getAIConfigPath(aiTool);
|
|
57
|
+
let content = '';
|
|
58
|
+
if (existsSync(configPath)) {
|
|
59
|
+
content = readFileSync(configPath, 'utf-8');
|
|
60
|
+
}
|
|
61
|
+
// Generate skills section
|
|
62
|
+
const skillLines = installedSkills.map(name => {
|
|
63
|
+
const relativePath = `skills/${name}/SKILL.md`;
|
|
64
|
+
return `- [${name}](${relativePath})`;
|
|
65
|
+
});
|
|
66
|
+
const skillsSection = installedSkills.length > 0
|
|
67
|
+
? `${DROID_SKILLS_START}\n## Droid Skills\n\n${skillLines.join('\n')}\n${DROID_SKILLS_END}`
|
|
68
|
+
: '';
|
|
69
|
+
// Check if section already exists
|
|
70
|
+
const startIdx = content.indexOf(DROID_SKILLS_START);
|
|
71
|
+
const endIdx = content.indexOf(DROID_SKILLS_END);
|
|
72
|
+
if (startIdx !== -1 && endIdx !== -1) {
|
|
73
|
+
// Replace existing section
|
|
74
|
+
content = content.slice(0, startIdx) + skillsSection + content.slice(endIdx + DROID_SKILLS_END.length);
|
|
75
|
+
}
|
|
76
|
+
else if (skillsSection) {
|
|
77
|
+
// Append new section
|
|
78
|
+
content = content.trim() + '\n\n' + skillsSection + '\n';
|
|
79
|
+
}
|
|
80
|
+
// Ensure parent directory exists
|
|
81
|
+
const configDir = dirname(configPath);
|
|
82
|
+
if (!existsSync(configDir)) {
|
|
83
|
+
mkdirSync(configDir, { recursive: true });
|
|
84
|
+
}
|
|
85
|
+
writeFileSync(configPath, content, 'utf-8');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Load a skill manifest from a skill directory
|
|
89
|
+
*/
|
|
90
|
+
export function loadSkillManifest(skillDir) {
|
|
91
|
+
const manifestPath = join(skillDir, 'SKILL.yaml');
|
|
92
|
+
if (!existsSync(manifestPath)) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const content = readFileSync(manifestPath, 'utf-8');
|
|
97
|
+
return YAML.parse(content);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get all bundled skills
|
|
105
|
+
*/
|
|
106
|
+
export function getBundledSkills() {
|
|
107
|
+
if (!existsSync(BUNDLED_SKILLS_DIR)) {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
const skillDirs = readdirSync(BUNDLED_SKILLS_DIR, { withFileTypes: true })
|
|
111
|
+
.filter((dirent) => dirent.isDirectory())
|
|
112
|
+
.map((dirent) => dirent.name);
|
|
113
|
+
const skills = [];
|
|
114
|
+
for (const skillDir of skillDirs) {
|
|
115
|
+
const manifest = loadSkillManifest(join(BUNDLED_SKILLS_DIR, skillDir));
|
|
116
|
+
if (manifest) {
|
|
117
|
+
skills.push(manifest);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return skills;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Check if a skill is installed
|
|
124
|
+
*/
|
|
125
|
+
export function isSkillInstalled(skillName) {
|
|
126
|
+
const config = loadConfig();
|
|
127
|
+
return skillName in config.skills;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get installed skill info
|
|
131
|
+
*/
|
|
132
|
+
export function getInstalledSkill(skillName) {
|
|
133
|
+
const config = loadConfig();
|
|
134
|
+
return config.skills[skillName] || null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Install a skill
|
|
138
|
+
*/
|
|
139
|
+
export function installSkill(skillName) {
|
|
140
|
+
const config = loadConfig();
|
|
141
|
+
const bundledSkillDir = join(BUNDLED_SKILLS_DIR, skillName);
|
|
142
|
+
if (!existsSync(bundledSkillDir)) {
|
|
143
|
+
return { success: false, message: `Skill '${skillName}' not found` };
|
|
144
|
+
}
|
|
145
|
+
const manifest = loadSkillManifest(bundledSkillDir);
|
|
146
|
+
if (!manifest) {
|
|
147
|
+
return { success: false, message: `Invalid skill manifest for '${skillName}'` };
|
|
148
|
+
}
|
|
149
|
+
// Check dependencies
|
|
150
|
+
if (manifest.dependencies) {
|
|
151
|
+
for (const dep of manifest.dependencies) {
|
|
152
|
+
if (!isSkillInstalled(dep)) {
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
message: `Missing dependency: '${dep}'. Install it first with \`droid install ${dep}\``,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const skillsPath = getSkillsInstallPath(config.ai_tool);
|
|
161
|
+
const targetSkillDir = join(skillsPath, skillName);
|
|
162
|
+
// Ensure skills directory exists
|
|
163
|
+
if (!existsSync(skillsPath)) {
|
|
164
|
+
mkdirSync(skillsPath, { recursive: true });
|
|
165
|
+
}
|
|
166
|
+
// Copy SKILL.md (the actual skill file for Claude Code / OpenCode)
|
|
167
|
+
const skillMdSource = join(bundledSkillDir, 'SKILL.md');
|
|
168
|
+
if (existsSync(skillMdSource)) {
|
|
169
|
+
if (!existsSync(targetSkillDir)) {
|
|
170
|
+
mkdirSync(targetSkillDir, { recursive: true });
|
|
171
|
+
}
|
|
172
|
+
const skillMdTarget = join(targetSkillDir, 'SKILL.md');
|
|
173
|
+
const content = readFileSync(skillMdSource, 'utf-8');
|
|
174
|
+
writeFileSync(skillMdTarget, content);
|
|
175
|
+
}
|
|
176
|
+
// Copy commands if present
|
|
177
|
+
const commandsSource = join(bundledSkillDir, 'commands');
|
|
178
|
+
if (existsSync(commandsSource)) {
|
|
179
|
+
const commandsPath = getCommandsInstallPath(config.ai_tool);
|
|
180
|
+
if (!existsSync(commandsPath)) {
|
|
181
|
+
mkdirSync(commandsPath, { recursive: true });
|
|
182
|
+
}
|
|
183
|
+
cpSync(commandsSource, commandsPath, { recursive: true });
|
|
184
|
+
}
|
|
185
|
+
// Update config
|
|
186
|
+
config.skills[skillName] = {
|
|
187
|
+
version: manifest.version,
|
|
188
|
+
installed_at: new Date().toISOString(),
|
|
189
|
+
};
|
|
190
|
+
saveConfig(config);
|
|
191
|
+
// Update AI tool's config file with skill reference
|
|
192
|
+
const installedSkillNames = Object.keys(config.skills);
|
|
193
|
+
updateAIConfigSkills(config.ai_tool, installedSkillNames);
|
|
194
|
+
return { success: true, message: `Installed ${skillName} v${manifest.version}` };
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Uninstall a skill
|
|
198
|
+
*/
|
|
199
|
+
export function uninstallSkill(skillName) {
|
|
200
|
+
const config = loadConfig();
|
|
201
|
+
if (!isSkillInstalled(skillName)) {
|
|
202
|
+
return { success: false, message: `Skill '${skillName}' is not installed` };
|
|
203
|
+
}
|
|
204
|
+
// Remove skill files from AI tool location
|
|
205
|
+
const skillsPath = getSkillsInstallPath(config.ai_tool);
|
|
206
|
+
const skillDir = join(skillsPath, skillName);
|
|
207
|
+
if (existsSync(skillDir)) {
|
|
208
|
+
rmSync(skillDir, { recursive: true });
|
|
209
|
+
}
|
|
210
|
+
// Remove command files if they exist
|
|
211
|
+
const bundledSkillDir = join(BUNDLED_SKILLS_DIR, skillName);
|
|
212
|
+
const commandsSource = join(bundledSkillDir, 'commands');
|
|
213
|
+
if (existsSync(commandsSource)) {
|
|
214
|
+
const commandsPath = getCommandsInstallPath(config.ai_tool);
|
|
215
|
+
const commandFiles = readdirSync(commandsSource);
|
|
216
|
+
for (const file of commandFiles) {
|
|
217
|
+
const commandPath = join(commandsPath, file);
|
|
218
|
+
if (existsSync(commandPath)) {
|
|
219
|
+
rmSync(commandPath);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Remove from config
|
|
224
|
+
delete config.skills[skillName];
|
|
225
|
+
saveConfig(config);
|
|
226
|
+
// Update AI tool's config file to remove skill reference
|
|
227
|
+
const installedSkillNames = Object.keys(config.skills);
|
|
228
|
+
updateAIConfigSkills(config.ai_tool, installedSkillNames);
|
|
229
|
+
return { success: true, message: `Uninstalled ${skillName}` };
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get skill status display string
|
|
233
|
+
*/
|
|
234
|
+
export function getSkillStatusDisplay(status) {
|
|
235
|
+
switch (status) {
|
|
236
|
+
case SkillStatus.Alpha:
|
|
237
|
+
return '[alpha]';
|
|
238
|
+
case SkillStatus.Beta:
|
|
239
|
+
return '[beta]';
|
|
240
|
+
case SkillStatus.Stable:
|
|
241
|
+
default:
|
|
242
|
+
return '';
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export declare enum AITool {
|
|
2
|
+
ClaudeCode = "claude-code",
|
|
3
|
+
OpenCode = "opencode"
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Get the AI's mention tag
|
|
7
|
+
* Always @droid - consistent branding regardless of underlying AI tool
|
|
8
|
+
*/
|
|
9
|
+
export declare function getAITag(): string;
|
|
10
|
+
export declare enum BuiltInOutput {
|
|
11
|
+
Terminal = "terminal",
|
|
12
|
+
Editor = "editor"
|
|
13
|
+
}
|
|
14
|
+
export type OutputPreference = BuiltInOutput | string;
|
|
15
|
+
export declare enum SkillStatus {
|
|
16
|
+
Stable = "stable",
|
|
17
|
+
Beta = "beta",
|
|
18
|
+
Alpha = "alpha"
|
|
19
|
+
}
|
|
20
|
+
export declare enum ConfigOptionType {
|
|
21
|
+
String = "string",
|
|
22
|
+
Boolean = "boolean",
|
|
23
|
+
Select = "select"
|
|
24
|
+
}
|
|
25
|
+
export interface DroidConfig {
|
|
26
|
+
ai_tool: AITool;
|
|
27
|
+
user_mention: string;
|
|
28
|
+
output_preference: OutputPreference;
|
|
29
|
+
git_username: string;
|
|
30
|
+
skills: Record<string, InstalledSkill>;
|
|
31
|
+
}
|
|
32
|
+
export interface InstalledSkill {
|
|
33
|
+
version: string;
|
|
34
|
+
installed_at: string;
|
|
35
|
+
}
|
|
36
|
+
export interface SkillManifest {
|
|
37
|
+
name: string;
|
|
38
|
+
description: string;
|
|
39
|
+
version: string;
|
|
40
|
+
status?: SkillStatus;
|
|
41
|
+
dependencies?: string[];
|
|
42
|
+
config_schema?: Record<string, ConfigOption>;
|
|
43
|
+
provides_output?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface ConfigOption {
|
|
46
|
+
type: ConfigOptionType;
|
|
47
|
+
description: string;
|
|
48
|
+
default?: string | boolean;
|
|
49
|
+
options?: string[];
|
|
50
|
+
}
|
|
51
|
+
export interface SkillOverrides {
|
|
52
|
+
[key: string]: string | boolean | number;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,oBAAY,MAAM;IAChB,UAAU,gBAAgB;IAC1B,QAAQ,aAAa;CACtB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAGD,oBAAY,aAAa;IACvB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAGD,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,MAAM,CAAC;AAEtD,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE7C,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CAC1C"}
|