@orderful/droid 0.16.0 → 0.17.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 (83) hide show
  1. package/.claude/CLAUDE.md +3 -43
  2. package/AGENTS.md +75 -0
  3. package/CHANGELOG.md +18 -0
  4. package/bun.lock +12 -0
  5. package/dist/bin/droid.js +3064 -54
  6. package/dist/commands/tui/components/Badge.test.d.ts +2 -0
  7. package/dist/commands/tui/components/Badge.test.d.ts.map +1 -0
  8. package/dist/commands/tui/components/TabBar.test.d.ts +2 -0
  9. package/dist/commands/tui/components/TabBar.test.d.ts.map +1 -0
  10. package/dist/index.js +952 -6
  11. package/package.json +7 -2
  12. package/playwright.config.ts +20 -0
  13. package/scripts/build.ts +78 -0
  14. package/scripts/screenshot-tui.ts +126 -0
  15. package/src/commands/tui/components/Badge.test.tsx +94 -0
  16. package/src/commands/tui/components/TabBar.test.tsx +39 -0
  17. package/tests/e2e/tui.spec.ts +128 -0
  18. package/dist/bin/droid.js.map +0 -1
  19. package/dist/commands/config.js +0 -67
  20. package/dist/commands/config.js.map +0 -1
  21. package/dist/commands/install.js +0 -45
  22. package/dist/commands/install.js.map +0 -1
  23. package/dist/commands/setup.js +0 -269
  24. package/dist/commands/setup.js.map +0 -1
  25. package/dist/commands/skills.js +0 -144
  26. package/dist/commands/skills.js.map +0 -1
  27. package/dist/commands/tui/components/Badge.js +0 -29
  28. package/dist/commands/tui/components/Badge.js.map +0 -1
  29. package/dist/commands/tui/components/Markdown.js +0 -42
  30. package/dist/commands/tui/components/Markdown.js.map +0 -1
  31. package/dist/commands/tui/components/SettingsDetails.js +0 -11
  32. package/dist/commands/tui/components/SettingsDetails.js.map +0 -1
  33. package/dist/commands/tui/components/TabBar.js +0 -7
  34. package/dist/commands/tui/components/TabBar.js.map +0 -1
  35. package/dist/commands/tui/components/ToolDetails.js +0 -35
  36. package/dist/commands/tui/components/ToolDetails.js.map +0 -1
  37. package/dist/commands/tui/components/ToolItem.js +0 -11
  38. package/dist/commands/tui/components/ToolItem.js.map +0 -1
  39. package/dist/commands/tui/constants.js +0 -17
  40. package/dist/commands/tui/constants.js.map +0 -1
  41. package/dist/commands/tui/hooks/useAppUpdate.js +0 -52
  42. package/dist/commands/tui/hooks/useAppUpdate.js.map +0 -1
  43. package/dist/commands/tui/hooks/useToolUpdates.js +0 -77
  44. package/dist/commands/tui/hooks/useToolUpdates.js.map +0 -1
  45. package/dist/commands/tui/types.js +0 -2
  46. package/dist/commands/tui/types.js.map +0 -1
  47. package/dist/commands/tui/views/ReadmeViewer.js +0 -56
  48. package/dist/commands/tui/views/ReadmeViewer.js.map +0 -1
  49. package/dist/commands/tui/views/SetupScreen.js +0 -114
  50. package/dist/commands/tui/views/SetupScreen.js.map +0 -1
  51. package/dist/commands/tui/views/SkillConfigScreen.js +0 -148
  52. package/dist/commands/tui/views/SkillConfigScreen.js.map +0 -1
  53. package/dist/commands/tui/views/ToolExplorer.js +0 -86
  54. package/dist/commands/tui/views/ToolExplorer.js.map +0 -1
  55. package/dist/commands/tui/views/ToolUpdatePrompt.js +0 -38
  56. package/dist/commands/tui/views/ToolUpdatePrompt.js.map +0 -1
  57. package/dist/commands/tui/views/WelcomeScreen.js +0 -46
  58. package/dist/commands/tui/views/WelcomeScreen.js.map +0 -1
  59. package/dist/commands/tui.js +0 -307
  60. package/dist/commands/tui.js.map +0 -1
  61. package/dist/commands/uninstall.js +0 -26
  62. package/dist/commands/uninstall.js.map +0 -1
  63. package/dist/commands/update.js +0 -45
  64. package/dist/commands/update.js.map +0 -1
  65. package/dist/index.js.map +0 -1
  66. package/dist/lib/agents.js +0 -248
  67. package/dist/lib/agents.js.map +0 -1
  68. package/dist/lib/config.js +0 -196
  69. package/dist/lib/config.js.map +0 -1
  70. package/dist/lib/platforms.js +0 -52
  71. package/dist/lib/platforms.js.map +0 -1
  72. package/dist/lib/quotes.js +0 -24
  73. package/dist/lib/quotes.js.map +0 -1
  74. package/dist/lib/skill-config.js +0 -80
  75. package/dist/lib/skill-config.js.map +0 -1
  76. package/dist/lib/skills.js +0 -582
  77. package/dist/lib/skills.js.map +0 -1
  78. package/dist/lib/tools.js +0 -145
  79. package/dist/lib/tools.js.map +0 -1
  80. package/dist/lib/types.js +0 -50
  81. package/dist/lib/types.js.map +0 -1
  82. package/dist/lib/version.js +0 -100
  83. package/dist/lib/version.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAO5C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAa,EAAE,OAAuB;IACxE,oDAAoD;IACpD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC,CAAC;QAC9F,OAAO;IACT,CAAC;IAED,qCAAqC;IACrC,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC,CAAC;QAC9F,OAAO;IACT,CAAC;IAED,0CAA0C;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEpD,MAAM,cAAc,GAAG,UAAU,EAAE,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,cAAc,EAAE,CAAC,CAAC,CAAC;IAE9D,IAAI,CAAC;QACH,2BAA2B;QAC3B,MAAM,aAAa,GAAG,QAAQ,CAAC,8CAA8C,EAAE;YAC7E,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,IAAI,aAAa,KAAK,cAAc,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QAEzC,QAAQ,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAExE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -1,248 +0,0 @@
1
- import { existsSync, readdirSync, readFileSync, writeFileSync, unlinkSync, mkdirSync } from 'fs';
2
- import { join, dirname } from 'path';
3
- import { fileURLToPath } from 'url';
4
- import YAML from 'yaml';
5
- import { loadConfig } from './config';
6
- import { Platform } from './types';
7
- import { getAgentsPath } from './platforms';
8
- import { loadToolManifest } from './tools';
9
- const __dirname = dirname(fileURLToPath(import.meta.url));
10
- const BUNDLED_TOOLS_DIR = join(__dirname, '../tools');
11
- /**
12
- * Get the installation path for agents based on platform
13
- */
14
- export function getAgentsInstallPath(platform) {
15
- return getAgentsPath(platform);
16
- }
17
- /**
18
- * Parse YAML frontmatter from agent file content
19
- */
20
- function parseAgentFrontmatter(content) {
21
- const trimmed = content.trimStart();
22
- if (!trimmed.startsWith('---')) {
23
- return null;
24
- }
25
- const endMatch = trimmed.slice(3).indexOf('---');
26
- if (endMatch === -1) {
27
- return null;
28
- }
29
- const frontmatterContent = trimmed.slice(3, 3 + endMatch);
30
- try {
31
- return YAML.parse(frontmatterContent);
32
- }
33
- catch {
34
- return null;
35
- }
36
- }
37
- /**
38
- * Load an agent manifest from an agent file (agents/{name}.md)
39
- * Reads frontmatter from the .md file, version from TOOL.yaml
40
- */
41
- export function loadAgentManifest(agentPath) {
42
- if (!existsSync(agentPath)) {
43
- return null;
44
- }
45
- const content = readFileSync(agentPath, 'utf-8');
46
- const frontmatter = parseAgentFrontmatter(content);
47
- if (!frontmatter || !frontmatter.name) {
48
- return null;
49
- }
50
- // Get version from TOOL.yaml
51
- // agentPath is tools/{tool}/agents/{name}.md, toolDir is tools/{tool}
52
- const toolDir = dirname(dirname(agentPath));
53
- const toolManifest = loadToolManifest(toolDir);
54
- return {
55
- name: frontmatter.name,
56
- description: frontmatter.description || '',
57
- version: toolManifest?.version || '0.0.0',
58
- status: toolManifest?.status,
59
- mode: frontmatter.mode,
60
- model: frontmatter.model,
61
- color: frontmatter.color,
62
- tools: frontmatter.tools,
63
- };
64
- }
65
- /**
66
- * Get all bundled agents from tools
67
- */
68
- export function getBundledAgents() {
69
- const agents = [];
70
- const seenNames = new Set();
71
- if (!existsSync(BUNDLED_TOOLS_DIR)) {
72
- return agents;
73
- }
74
- // Get agents from tools/*/agents/*.md
75
- const toolDirs = readdirSync(BUNDLED_TOOLS_DIR, { withFileTypes: true })
76
- .filter((dirent) => dirent.isDirectory())
77
- .map((dirent) => dirent.name);
78
- for (const toolName of toolDirs) {
79
- const toolAgentsDir = join(BUNDLED_TOOLS_DIR, toolName, 'agents');
80
- if (!existsSync(toolAgentsDir))
81
- continue;
82
- const agentFiles = readdirSync(toolAgentsDir, { withFileTypes: true })
83
- .filter((dirent) => dirent.isFile() && dirent.name.endsWith('.md'))
84
- .map((dirent) => dirent.name);
85
- for (const agentFile of agentFiles) {
86
- const manifest = loadAgentManifest(join(toolAgentsDir, agentFile));
87
- if (manifest && !seenNames.has(manifest.name)) {
88
- agents.push(manifest);
89
- seenNames.add(manifest.name);
90
- }
91
- }
92
- }
93
- return agents;
94
- }
95
- /**
96
- * Get agent status display string
97
- * Note: Not currently used, kept for future TUI agent status display
98
- */
99
- export function getAgentStatusDisplay(status) {
100
- switch (status) {
101
- case 'alpha':
102
- return '[alpha]';
103
- case 'beta':
104
- return '[beta]';
105
- case 'stable':
106
- default:
107
- return '';
108
- }
109
- }
110
- /**
111
- * Get installed agents directory for the configured platform
112
- */
113
- export function getInstalledAgentsDir() {
114
- const config = loadConfig();
115
- return getAgentsInstallPath(config.platform);
116
- }
117
- /**
118
- * Check if an agent is installed
119
- */
120
- export function isAgentInstalled(agentName) {
121
- const config = loadConfig();
122
- const agentsDir = getAgentsInstallPath(config.platform);
123
- const agentPath = join(agentsDir, `${agentName}.md`);
124
- return existsSync(agentPath);
125
- }
126
- /**
127
- * Generate Claude Code agent frontmatter
128
- */
129
- function generateClaudeCodeAgent(manifest, agentContent) {
130
- const lines = [
131
- '---',
132
- `name: ${manifest.name}`,
133
- `description: ${manifest.description}`,
134
- ];
135
- if (manifest.tools && manifest.tools.length > 0) {
136
- lines.push(`tools: ${manifest.tools.join(', ')}`);
137
- }
138
- if (manifest.color) {
139
- lines.push(`color: ${manifest.color}`);
140
- }
141
- lines.push('---', '', agentContent.trim(), '');
142
- return lines.join('\n');
143
- }
144
- /**
145
- * Generate OpenCode agent frontmatter
146
- * OpenCode uses a different format with explicit tool permissions
147
- */
148
- function generateOpenCodeAgent(manifest, agentContent) {
149
- const lines = [
150
- '---',
151
- `description: ${manifest.description}`,
152
- `mode: ${manifest.mode || 'subagent'}`,
153
- ];
154
- // OpenCode uses explicit tool permissions
155
- if (manifest.tools && manifest.tools.length > 0) {
156
- lines.push('tools:');
157
- for (const tool of manifest.tools) {
158
- const toolName = tool.toLowerCase();
159
- lines.push(` ${toolName}: true`);
160
- }
161
- }
162
- lines.push('---', '', agentContent.trim(), '');
163
- return lines.join('\n');
164
- }
165
- /**
166
- * Install an agent from a specific path (agents/{name}.md)
167
- * Generates the appropriate format based on the configured AI tool
168
- */
169
- export function installAgentFromPath(agentPath, agentName) {
170
- const config = loadConfig();
171
- // Load manifest from agent file frontmatter
172
- const manifest = loadAgentManifest(agentPath);
173
- if (!manifest) {
174
- return { success: false, message: `Agent manifest not found: ${agentName}` };
175
- }
176
- try {
177
- // Load content (strip frontmatter)
178
- const rawContent = readFileSync(agentPath, 'utf-8');
179
- const frontmatterMatch = rawContent.match(/^---\n[\s\S]*?\n---\n?/);
180
- const agentContent = frontmatterMatch ? rawContent.slice(frontmatterMatch[0].length) : rawContent;
181
- // Generate format based on platform
182
- const installedContent = config.platform === Platform.ClaudeCode
183
- ? generateClaudeCodeAgent(manifest, agentContent)
184
- : generateOpenCodeAgent(manifest, agentContent);
185
- // Ensure agents directory exists
186
- const agentsDir = getAgentsInstallPath(config.platform);
187
- if (!existsSync(agentsDir)) {
188
- mkdirSync(agentsDir, { recursive: true });
189
- }
190
- // Write the agent file
191
- const outputPath = join(agentsDir, `${agentName}.md`);
192
- writeFileSync(outputPath, installedContent);
193
- const targetDir = config.platform === Platform.ClaudeCode
194
- ? '~/.claude/agents/'
195
- : '~/.config/opencode/agent/';
196
- return { success: true, message: `Installed ${agentName} to ${targetDir}` };
197
- }
198
- catch (error) {
199
- return { success: false, message: `Failed to install agent: ${error}` };
200
- }
201
- }
202
- /**
203
- * Find the path to an agent file within the tools directory structure
204
- */
205
- export function findAgentPath(agentName) {
206
- if (!existsSync(BUNDLED_TOOLS_DIR)) {
207
- return null;
208
- }
209
- const toolDirs = readdirSync(BUNDLED_TOOLS_DIR, { withFileTypes: true })
210
- .filter((dirent) => dirent.isDirectory())
211
- .map((dirent) => dirent.name);
212
- for (const toolName of toolDirs) {
213
- const agentPath = join(BUNDLED_TOOLS_DIR, toolName, 'agents', `${agentName}.md`);
214
- if (existsSync(agentPath)) {
215
- return agentPath;
216
- }
217
- }
218
- return null;
219
- }
220
- /**
221
- * Install an agent from the tools directory
222
- */
223
- export function installAgent(agentName) {
224
- const agentPath = findAgentPath(agentName);
225
- if (!agentPath) {
226
- return { success: false, message: `Agent '${agentName}' not found` };
227
- }
228
- return installAgentFromPath(agentPath, agentName);
229
- }
230
- /**
231
- * Uninstall an agent from the agents directory
232
- */
233
- export function uninstallAgent(agentName) {
234
- const config = loadConfig();
235
- const agentsDir = getAgentsInstallPath(config.platform);
236
- const agentPath = join(agentsDir, `${agentName}.md`);
237
- if (!existsSync(agentPath)) {
238
- return { success: false, message: `Agent not installed: ${agentName}` };
239
- }
240
- try {
241
- unlinkSync(agentPath);
242
- return { success: true, message: `Uninstalled ${agentName}` };
243
- }
244
- catch (error) {
245
- return { success: false, message: `Failed to uninstall agent: ${error}` };
246
- }
247
- }
248
- //# sourceMappingURL=agents.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/lib/agents.ts"],"names":[],"mappings":"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"}
@@ -1,196 +0,0 @@
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 { Platform, BuiltInOutput } from './types';
6
- const CONFIG_DIR = join(homedir(), '.droid');
7
- const CONFIG_FILE = join(CONFIG_DIR, 'config.yaml');
8
- const DEFAULT_AUTO_UPDATE = {
9
- app: false, // Opt-in: user must enable
10
- tools: true, // Opt-out: enabled by default (tools only update when app updates)
11
- };
12
- const DEFAULT_CONFIG = {
13
- platform: Platform.ClaudeCode,
14
- user_mention: '@user',
15
- output_preference: BuiltInOutput.Terminal,
16
- git_username: '',
17
- platforms: {},
18
- };
19
- /**
20
- * Migrate legacy config (v1) to new config format (v2)
21
- * v1: ai_tool + skills flat
22
- * v2: platform + platforms map with per-platform tools
23
- */
24
- function migrateConfig(config) {
25
- // Check if this is a legacy config (has ai_tool, no platform)
26
- if ('ai_tool' in config && !('platform' in config)) {
27
- const legacyConfig = config;
28
- return {
29
- platform: legacyConfig.ai_tool,
30
- user_mention: legacyConfig.user_mention ?? DEFAULT_CONFIG.user_mention,
31
- output_preference: legacyConfig.output_preference ?? DEFAULT_CONFIG.output_preference,
32
- git_username: legacyConfig.git_username ?? DEFAULT_CONFIG.git_username,
33
- platforms: {
34
- [legacyConfig.ai_tool]: {
35
- tools: legacyConfig.skills ?? {},
36
- },
37
- },
38
- };
39
- }
40
- // Already new format, just ensure defaults
41
- return {
42
- ...DEFAULT_CONFIG,
43
- ...config,
44
- platforms: config.platforms ?? {},
45
- };
46
- }
47
- /**
48
- * Ensure the config directory exists
49
- */
50
- export function ensureConfigDir() {
51
- if (!existsSync(CONFIG_DIR)) {
52
- mkdirSync(CONFIG_DIR, { recursive: true });
53
- }
54
- }
55
- /**
56
- * Check if config file exists
57
- */
58
- export function configExists() {
59
- return existsSync(CONFIG_FILE);
60
- }
61
- /**
62
- * Load the global config, or return defaults if none exists
63
- * Automatically migrates legacy config format to new format
64
- */
65
- export function loadConfig() {
66
- ensureConfigDir();
67
- if (!existsSync(CONFIG_FILE)) {
68
- return { ...DEFAULT_CONFIG };
69
- }
70
- try {
71
- const content = readFileSync(CONFIG_FILE, 'utf-8');
72
- const rawConfig = YAML.parse(content);
73
- // Check if migration is needed
74
- // TODO: Remove after v0.14.0 (target: late Jan 2025)
75
- const needsMigration = 'ai_tool' in rawConfig && !('platform' in rawConfig);
76
- const config = migrateConfig(rawConfig);
77
- // Save migrated config if it was migrated
78
- if (needsMigration) {
79
- saveConfig(config);
80
- }
81
- return config;
82
- }
83
- catch (error) {
84
- const message = error instanceof Error ? error.message : 'Unknown error';
85
- console.error(`Error reading config: ${message}`);
86
- return { ...DEFAULT_CONFIG };
87
- }
88
- }
89
- /**
90
- * Save the global config
91
- */
92
- export function saveConfig(config) {
93
- ensureConfigDir();
94
- const content = YAML.stringify(config, { indent: 2 });
95
- writeFileSync(CONFIG_FILE, content, 'utf-8');
96
- }
97
- /**
98
- * Get a specific config value using dot notation
99
- */
100
- export function getConfigValue(key) {
101
- const config = loadConfig();
102
- const keys = key.split('.');
103
- let value = config;
104
- for (const k of keys) {
105
- if (value === undefined || value === null || typeof value !== 'object') {
106
- return undefined;
107
- }
108
- value = value[k];
109
- }
110
- return value;
111
- }
112
- /**
113
- * Set a specific config value using dot notation
114
- */
115
- export function setConfigValue(key, value) {
116
- const config = loadConfig();
117
- const keys = key.split('.');
118
- let current = config;
119
- for (let i = 0; i < keys.length - 1; i++) {
120
- if (current[keys[i]] === undefined) {
121
- current[keys[i]] = {};
122
- }
123
- current = current[keys[i]];
124
- }
125
- current[keys[keys.length - 1]] = value;
126
- saveConfig(config);
127
- }
128
- /**
129
- * Get the path to the config file
130
- */
131
- export function getConfigPath() {
132
- return CONFIG_FILE;
133
- }
134
- /**
135
- * Get the path to the config directory
136
- */
137
- export function getConfigDir() {
138
- return CONFIG_DIR;
139
- }
140
- /**
141
- * Get skill-specific overrides path
142
- */
143
- export function getSkillOverridesPath(skillName) {
144
- return join(CONFIG_DIR, 'skills', skillName, 'overrides.yaml');
145
- }
146
- /**
147
- * Load skill-specific overrides
148
- */
149
- export function loadSkillOverrides(skillName) {
150
- const overridesPath = getSkillOverridesPath(skillName);
151
- if (!existsSync(overridesPath)) {
152
- return {};
153
- }
154
- try {
155
- const content = readFileSync(overridesPath, 'utf-8');
156
- return YAML.parse(content) || {};
157
- }
158
- catch {
159
- return {};
160
- }
161
- }
162
- /**
163
- * Save skill-specific overrides
164
- */
165
- export function saveSkillOverrides(skillName, overrides) {
166
- const overridesPath = getSkillOverridesPath(skillName);
167
- const skillDir = join(CONFIG_DIR, 'skills', skillName);
168
- if (!existsSync(skillDir)) {
169
- mkdirSync(skillDir, { recursive: true });
170
- }
171
- const content = YAML.stringify(overrides, { indent: 2 });
172
- writeFileSync(overridesPath, content, 'utf-8');
173
- }
174
- /**
175
- * Get auto-update config with defaults applied
176
- */
177
- export function getAutoUpdateConfig() {
178
- const config = loadConfig();
179
- return {
180
- ...DEFAULT_AUTO_UPDATE,
181
- ...config.auto_update,
182
- };
183
- }
184
- /**
185
- * Update auto-update config
186
- */
187
- export function setAutoUpdateConfig(updates) {
188
- const config = loadConfig();
189
- config.auto_update = {
190
- ...DEFAULT_AUTO_UPDATE,
191
- ...config.auto_update,
192
- ...updates,
193
- };
194
- saveConfig(config);
195
- }
196
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -1,52 +0,0 @@
1
- import { join } from 'path';
2
- import { homedir } from 'os';
3
- import { Platform } from './types';
4
- /**
5
- * Platform-specific paths configuration
6
- * Single source of truth for all platform-specific directories
7
- */
8
- export const PLATFORM_PATHS = {
9
- [Platform.ClaudeCode]: {
10
- skills: join(homedir(), '.claude', 'skills'),
11
- commands: join(homedir(), '.claude', 'commands'),
12
- agents: join(homedir(), '.claude', 'agents'),
13
- config: join(homedir(), '.claude', 'CLAUDE.md'),
14
- },
15
- [Platform.OpenCode]: {
16
- skills: join(homedir(), '.config', 'opencode', 'skills'),
17
- commands: join(homedir(), '.config', 'opencode', 'command'),
18
- agents: join(homedir(), '.config', 'opencode', 'agent'),
19
- config: join(homedir(), '.config', 'opencode', 'AGENTS.md'),
20
- },
21
- };
22
- /**
23
- * Get all paths for a platform
24
- */
25
- export function getPlatformPaths(platform) {
26
- return PLATFORM_PATHS[platform];
27
- }
28
- /**
29
- * Get skills install path for a platform
30
- */
31
- export function getSkillsPath(platform) {
32
- return PLATFORM_PATHS[platform].skills;
33
- }
34
- /**
35
- * Get commands install path for a platform
36
- */
37
- export function getCommandsPath(platform) {
38
- return PLATFORM_PATHS[platform].commands;
39
- }
40
- /**
41
- * Get agents install path for a platform
42
- */
43
- export function getAgentsPath(platform) {
44
- return PLATFORM_PATHS[platform].agents;
45
- }
46
- /**
47
- * Get platform config file path (CLAUDE.md or AGENTS.md)
48
- */
49
- export function getConfigPath(platform) {
50
- return PLATFORM_PATHS[platform].config;
51
- }
52
- //# sourceMappingURL=platforms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../src/lib/platforms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QACrB,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC;QAC5C,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC;QAChD,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC;QAC5C,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC;KAChD;IACD,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACnB,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;QACxD,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC;QAC3D,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC;QACvD,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC;KAC5D;CACO,CAAC;AAIX;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAkB;IACjD,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB;IAChD,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AACzC,CAAC"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Star Wars themed quotes for the TUI welcome screen.
3
- * Some hint at specific skills available in droid.
4
- */
5
- export const quotes = [
6
- "I'm probably the droid you are looking for.",
7
- "These are the skills you're looking for.",
8
- "I have a bad feeling about this, we might be too efficient.",
9
- "May the source be with you.",
10
- "The Force is strong with this one.",
11
- "This is the way.",
12
- "I'm fluent in over six million forms of communication. - `/comments`",
13
- "Much to learn, you still have. - `/coach`",
14
- "If into the archives you go, only knowledge will you find. - `/project`",
15
- ];
16
- /**
17
- * Get a random quote from the list.
18
- * Uses a simple random selection - each launch gets a fresh quote.
19
- */
20
- export function getRandomQuote() {
21
- const index = Math.floor(Math.random() * quotes.length);
22
- return quotes[index];
23
- }
24
- //# sourceMappingURL=quotes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quotes.js","sourceRoot":"","sources":["../../src/lib/quotes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,6CAA6C;IAC7C,0CAA0C;IAC1C,6DAA6D;IAC7D,6BAA6B;IAC7B,oCAAoC;IACpC,kBAAkB;IAClB,sEAAsE;IACtE,2CAA2C;IAC3C,yEAAyE;CAC1E,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
@@ -1,80 +0,0 @@
1
- import chalk from 'chalk';
2
- import inquirer from 'inquirer';
3
- import { saveSkillOverrides, loadConfig, loadSkillOverrides } from './config';
4
- import { ConfigOptionType } from './types';
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-config.js","sourceRoot":"","sources":["../../src/lib/skill-config.ts"],"names":[],"mappings":"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"}