@orderful/droid 0.33.0 → 0.34.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 (85) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +25 -0
  3. package/dist/bin/droid.js +673 -101
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/repos.d.ts +21 -0
  6. package/dist/commands/repos.d.ts.map +1 -0
  7. package/dist/commands/tui/components/SettingsDetails.d.ts +2 -1
  8. package/dist/commands/tui/components/SettingsDetails.d.ts.map +1 -1
  9. package/dist/commands/tui/types.d.ts +1 -1
  10. package/dist/commands/tui/types.d.ts.map +1 -1
  11. package/dist/commands/tui/views/ReposManagementScreen.d.ts +6 -0
  12. package/dist/commands/tui/views/ReposManagementScreen.d.ts.map +1 -0
  13. package/dist/commands/tui/views/ReposViewerScreen.d.ts +5 -0
  14. package/dist/commands/tui/views/ReposViewerScreen.d.ts.map +1 -0
  15. package/dist/commands/tui.d.ts.map +1 -1
  16. package/dist/index.js +149 -26
  17. package/dist/lib/config.d.ts +34 -1
  18. package/dist/lib/config.d.ts.map +1 -1
  19. package/dist/lib/types.d.ts +10 -1
  20. package/dist/lib/types.d.ts.map +1 -1
  21. package/dist/tools/brain/skills/brain/SKILL.md +2 -2
  22. package/dist/tools/brain/skills/brain/references/workflows.md +10 -10
  23. package/dist/tools/coach/skills/coach/SKILL.md +6 -6
  24. package/dist/tools/codex/skills/codex/SKILL.md +5 -5
  25. package/dist/tools/codex/skills/codex/references/creating.md +2 -2
  26. package/dist/tools/codex/skills/codex/references/decisions.md +2 -2
  27. package/dist/tools/codex/skills/codex/references/loading.md +1 -1
  28. package/dist/tools/codex/skills/codex/references/topics.md +2 -2
  29. package/dist/tools/codex/skills/codex/scripts/git-finish-write.d.ts +1 -1
  30. package/dist/tools/codex/skills/codex/scripts/git-finish-write.ts +2 -2
  31. package/dist/tools/codex/skills/codex/scripts/git-preamble.d.ts +1 -1
  32. package/dist/tools/codex/skills/codex/scripts/git-preamble.ts +3 -3
  33. package/dist/tools/codex/skills/codex/scripts/git-start-write.d.ts +1 -1
  34. package/dist/tools/codex/skills/codex/scripts/git-start-write.ts +2 -2
  35. package/dist/tools/comments/skills/comments/SKILL.md +9 -9
  36. package/dist/tools/plan/skills/plan/SKILL.md +2 -2
  37. package/dist/tools/plan/skills/plan/references/workflows.md +2 -2
  38. package/dist/tools/project/skills/project/SKILL.md +1 -1
  39. package/dist/tools/project/skills/project/references/creating.md +2 -2
  40. package/dist/tools/project/skills/project/references/loading.md +1 -1
  41. package/dist/tools/tech-design/skills/tech-design/SKILL.md +2 -2
  42. package/dist/tools/tech-design/skills/tech-design/references/publish.md +3 -3
  43. package/dist/tools/tech-design/skills/tech-design/references/start.md +29 -3
  44. package/dist/tools/tech-design/skills/tech-design/references/think.md +1 -1
  45. package/dist/tools/wrapup/.claude-plugin/plugin.json +1 -1
  46. package/dist/tools/wrapup/TOOL.yaml +1 -1
  47. package/dist/tools/wrapup/skills/wrapup/SKILL.md +4 -2
  48. package/dist/tools/wrapup/skills/wrapup/references/subagent-prompts.md +8 -6
  49. package/package.json +1 -1
  50. package/src/bin/droid.ts +39 -0
  51. package/src/commands/config.ts +14 -1
  52. package/src/commands/repos.ts +185 -0
  53. package/src/commands/tui/components/SettingsDetails.tsx +42 -13
  54. package/src/commands/tui/types.ts +1 -1
  55. package/src/commands/tui/views/ReposManagementScreen.tsx +291 -0
  56. package/src/commands/tui/views/ReposViewerScreen.tsx +49 -0
  57. package/src/commands/tui.tsx +51 -4
  58. package/src/lib/config.test.ts +228 -1
  59. package/src/lib/config.ts +193 -4
  60. package/src/lib/types.ts +13 -1
  61. package/src/tools/brain/skills/brain/SKILL.md +2 -2
  62. package/src/tools/brain/skills/brain/references/workflows.md +10 -10
  63. package/src/tools/coach/skills/coach/SKILL.md +6 -6
  64. package/src/tools/codex/skills/codex/SKILL.md +5 -5
  65. package/src/tools/codex/skills/codex/references/creating.md +2 -2
  66. package/src/tools/codex/skills/codex/references/decisions.md +2 -2
  67. package/src/tools/codex/skills/codex/references/loading.md +1 -1
  68. package/src/tools/codex/skills/codex/references/topics.md +2 -2
  69. package/src/tools/codex/skills/codex/scripts/git-finish-write.ts +2 -2
  70. package/src/tools/codex/skills/codex/scripts/git-preamble.ts +3 -3
  71. package/src/tools/codex/skills/codex/scripts/git-start-write.ts +2 -2
  72. package/src/tools/comments/skills/comments/SKILL.md +9 -9
  73. package/src/tools/plan/skills/plan/SKILL.md +2 -2
  74. package/src/tools/plan/skills/plan/references/workflows.md +2 -2
  75. package/src/tools/project/skills/project/SKILL.md +1 -1
  76. package/src/tools/project/skills/project/references/creating.md +2 -2
  77. package/src/tools/project/skills/project/references/loading.md +1 -1
  78. package/src/tools/tech-design/skills/tech-design/SKILL.md +2 -2
  79. package/src/tools/tech-design/skills/tech-design/references/publish.md +3 -3
  80. package/src/tools/tech-design/skills/tech-design/references/start.md +29 -3
  81. package/src/tools/tech-design/skills/tech-design/references/think.md +1 -1
  82. package/src/tools/wrapup/.claude-plugin/plugin.json +1 -1
  83. package/src/tools/wrapup/TOOL.yaml +1 -1
  84. package/src/tools/wrapup/skills/wrapup/SKILL.md +4 -2
  85. package/src/tools/wrapup/skills/wrapup/references/subagent-prompts.md +8 -6
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAYA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAS1D;AAED,wBAAsB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EzF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAYA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAS1D;AAED,wBAAsB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFzF"}
@@ -0,0 +1,21 @@
1
+ interface ReposListOptions {
2
+ json?: boolean;
3
+ }
4
+ /**
5
+ * List all repos
6
+ */
7
+ export declare function reposListCommand(options?: ReposListOptions): Promise<void>;
8
+ /**
9
+ * Add a repo
10
+ */
11
+ export declare function reposAddCommand(name?: string, path?: string, description?: string): Promise<void>;
12
+ /**
13
+ * Remove a repo
14
+ */
15
+ export declare function reposRemoveCommand(name?: string): Promise<void>;
16
+ /**
17
+ * Get a single repo (for scripts)
18
+ */
19
+ export declare function reposGetCommand(name: string): Promise<void>;
20
+ export {};
21
+ //# sourceMappingURL=repos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repos.d.ts","sourceRoot":"","sources":["../../src/commands/repos.ts"],"names":[],"mappings":"AAWA,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BhF;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CA8Df;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDrE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASjE"}
@@ -2,7 +2,8 @@ import { Platform } from '../../../lib/types';
2
2
  export interface SettingsDetailsProps {
3
3
  isFocused: boolean;
4
4
  detectedPlatforms: Platform[];
5
+ selectedAction: number;
5
6
  onRedetect?: () => void;
6
7
  }
7
- export declare function SettingsDetails({ isFocused, detectedPlatforms, onRedetect: _onRedetect, }: SettingsDetailsProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function SettingsDetails({ isFocused, detectedPlatforms, selectedAction, onRedetect: _onRedetect, }: SettingsDetailsProps): import("react/jsx-runtime").JSX.Element;
8
9
  //# sourceMappingURL=SettingsDetails.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsDetails.d.ts","sourceRoot":"","sources":["../../../../src/commands/tui/components/SettingsDetails.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,QAAQ,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAQD,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,iBAAiB,EACjB,UAAU,EAAE,WAAW,GACxB,EAAE,oBAAoB,2CA4DtB"}
1
+ {"version":3,"file":"SettingsDetails.d.ts","sourceRoot":"","sources":["../../../../src/commands/tui/components/SettingsDetails.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,QAAQ,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAQD,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,UAAU,EAAE,WAAW,GACxB,EAAE,oBAAoB,2CAuFtB"}
@@ -1,5 +1,5 @@
1
1
  export type Tab = 'tools' | 'settings';
2
- export type View = 'welcome' | 'tool-updates' | 'setup' | 'menu' | 'detail' | 'configure' | 'readme' | 'explorer';
2
+ export type View = 'welcome' | 'tool-updates' | 'setup' | 'menu' | 'detail' | 'configure' | 'readme' | 'explorer' | 'repos' | 'view-repos';
3
3
  export type SetupStep = 'user_mention' | 'auto_update' | 'confirm';
4
4
  export type ComponentType = 'skill' | 'command' | 'agent';
5
5
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/tui/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,UAAU,CAAC;AACvC,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAClH,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;AACnE,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/tui/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,UAAU,CAAC;AACvC,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,CAAC;AAC3I,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;AACnE,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface ReposManagementScreenProps {
2
+ onComplete: () => void;
3
+ onCancel: () => void;
4
+ }
5
+ export declare function ReposManagementScreen({ onComplete: _onComplete, onCancel }: ReposManagementScreenProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=ReposManagementScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReposManagementScreen.d.ts","sourceRoot":"","sources":["../../../../src/commands/tui/views/ReposManagementScreen.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAID,wBAAgB,qBAAqB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,0BAA0B,2CAoRtG"}
@@ -0,0 +1,5 @@
1
+ export interface ReposViewerScreenProps {
2
+ onClose: () => void;
3
+ }
4
+ export declare function ReposViewerScreen({ onClose }: ReposViewerScreenProps): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=ReposViewerScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReposViewerScreen.d.ts","sourceRoot":"","sources":["../../../../src/commands/tui/views/ReposViewerScreen.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CAwCpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/commands/tui.tsx"],"names":[],"mappings":"AAgjBA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBhD"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/commands/tui.tsx"],"names":[],"mappings":"AA+lBA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBhD"}
package/dist/index.js CHANGED
@@ -40,7 +40,13 @@ function getPlatformToolsFor(config, platform) {
40
40
  }
41
41
 
42
42
  // src/lib/config.ts
43
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
43
+ import {
44
+ existsSync,
45
+ mkdirSync,
46
+ readFileSync,
47
+ readdirSync,
48
+ writeFileSync
49
+ } from "fs";
44
50
  import { homedir } from "os";
45
51
  import { join } from "path";
46
52
  import YAML from "yaml";
@@ -80,6 +86,47 @@ function migrateConfig(config) {
80
86
  platforms: config.platforms ?? {}
81
87
  };
82
88
  }
89
+ function migrateToolConfigs(config) {
90
+ if (config.migrations?.tools_consolidated) {
91
+ return false;
92
+ }
93
+ const skillsDir = join(CONFIG_DIR, "skills");
94
+ if (!existsSync(skillsDir)) {
95
+ return false;
96
+ }
97
+ let migrated = false;
98
+ try {
99
+ const entries = readdirSync(skillsDir, { withFileTypes: true });
100
+ for (const entry of entries) {
101
+ if (!entry.isDirectory()) continue;
102
+ const skillName = entry.name;
103
+ const overridesPath = join(skillsDir, skillName, "overrides.yaml");
104
+ if (!existsSync(overridesPath)) continue;
105
+ try {
106
+ const content = readFileSync(overridesPath, "utf-8");
107
+ const overrides = YAML.parse(content);
108
+ if (overrides && Object.keys(overrides).length > 0) {
109
+ if (!config.tools) {
110
+ config.tools = {};
111
+ }
112
+ config.tools[skillName] = overrides;
113
+ migrated = true;
114
+ }
115
+ } catch {
116
+ continue;
117
+ }
118
+ }
119
+ if (migrated) {
120
+ if (!config.migrations) {
121
+ config.migrations = {};
122
+ }
123
+ config.migrations.tools_consolidated = true;
124
+ }
125
+ return migrated;
126
+ } catch {
127
+ return false;
128
+ }
129
+ }
83
130
  function ensureConfigDir() {
84
131
  if (!existsSync(CONFIG_DIR)) {
85
132
  mkdirSync(CONFIG_DIR, { recursive: true });
@@ -96,9 +143,10 @@ function loadConfig() {
96
143
  try {
97
144
  const content = readFileSync(CONFIG_FILE, "utf-8");
98
145
  const rawConfig = YAML.parse(content);
99
- const needsMigration = "ai_tool" in rawConfig && !("platform" in rawConfig);
146
+ const needsLegacyMigration = "ai_tool" in rawConfig && !("platform" in rawConfig);
100
147
  const config = migrateConfig(rawConfig);
101
- if (needsMigration) {
148
+ const needsToolMigration = migrateToolConfigs(config);
149
+ if (needsLegacyMigration || needsToolMigration) {
102
150
  saveConfig(config);
103
151
  }
104
152
  return config;
@@ -152,6 +200,11 @@ function getSkillOverridesPath(skillName) {
152
200
  return join(CONFIG_DIR, "skills", normalizedName, "overrides.yaml");
153
201
  }
154
202
  function loadSkillOverrides(skillName) {
203
+ const normalizedName = normalizeSkillNameForConfig(skillName);
204
+ const toolSettings = getToolSettings(normalizedName);
205
+ if (Object.keys(toolSettings).length > 0) {
206
+ return toolSettings;
207
+ }
155
208
  const overridesPath = getSkillOverridesPath(skillName);
156
209
  if (!existsSync(overridesPath)) {
157
210
  return {};
@@ -173,6 +226,23 @@ function saveSkillOverrides(skillName, overrides) {
173
226
  const content = YAML.stringify(overrides, { indent: 2 });
174
227
  writeFileSync(overridesPath, content, "utf-8");
175
228
  }
229
+ function getToolSettings(name) {
230
+ const config = loadConfig();
231
+ return config.tools?.[name] ?? {};
232
+ }
233
+ function setToolSettings(name, settings) {
234
+ const config = loadConfig();
235
+ if (!config.tools) {
236
+ config.tools = {};
237
+ }
238
+ config.tools[name] = settings;
239
+ saveConfig(config);
240
+ }
241
+ function setToolSetting(name, key, value) {
242
+ const settings = getToolSettings(name);
243
+ settings[key] = value;
244
+ setToolSettings(name, settings);
245
+ }
176
246
  function getAutoUpdateConfig() {
177
247
  const config = loadConfig();
178
248
  return {
@@ -189,11 +259,56 @@ function setAutoUpdateConfig(updates) {
189
259
  };
190
260
  saveConfig(config);
191
261
  }
262
+ function expandTilde(path) {
263
+ if (path.startsWith("~/")) {
264
+ return join(homedir(), path.slice(2));
265
+ }
266
+ return path;
267
+ }
268
+ function getRepos() {
269
+ const config = loadConfig();
270
+ return config.repos ?? [];
271
+ }
272
+ function getRepo(name) {
273
+ const repos = getRepos();
274
+ return repos.find((repo) => repo.name === name);
275
+ }
276
+ function getRepoPath(name) {
277
+ const repo = getRepo(name);
278
+ if (!repo) {
279
+ return void 0;
280
+ }
281
+ return expandTilde(repo.path);
282
+ }
283
+ function addRepo(repo) {
284
+ const config = loadConfig();
285
+ const repos = config.repos ?? [];
286
+ const existingIndex = repos.findIndex((r) => r.name === repo.name);
287
+ if (existingIndex >= 0) {
288
+ repos[existingIndex] = repo;
289
+ } else {
290
+ repos.push(repo);
291
+ }
292
+ config.repos = repos;
293
+ saveConfig(config);
294
+ }
295
+ function removeRepo(name) {
296
+ const config = loadConfig();
297
+ const repos = config.repos ?? [];
298
+ const existingIndex = repos.findIndex((r) => r.name === name);
299
+ if (existingIndex >= 0) {
300
+ repos.splice(existingIndex, 1);
301
+ config.repos = repos;
302
+ saveConfig(config);
303
+ return true;
304
+ }
305
+ return false;
306
+ }
192
307
 
193
308
  // src/lib/skills.ts
194
309
  import {
195
310
  existsSync as existsSync6,
196
- readdirSync as readdirSync4,
311
+ readdirSync as readdirSync5,
197
312
  readFileSync as readFileSync6,
198
313
  mkdirSync as mkdirSync4,
199
314
  writeFileSync as writeFileSync4,
@@ -204,7 +319,7 @@ import { fileURLToPath as fileURLToPath4 } from "url";
204
319
  import YAML4 from "yaml";
205
320
 
206
321
  // src/lib/agents.ts
207
- import { existsSync as existsSync4, readdirSync as readdirSync2, readFileSync as readFileSync4, writeFileSync as writeFileSync2, unlinkSync, mkdirSync as mkdirSync2 } from "fs";
322
+ import { existsSync as existsSync4, readdirSync as readdirSync3, readFileSync as readFileSync4, writeFileSync as writeFileSync2, unlinkSync, mkdirSync as mkdirSync2 } from "fs";
208
323
  import { join as join5, dirname as dirname3 } from "path";
209
324
  import { fileURLToPath as fileURLToPath3 } from "url";
210
325
  import YAML3 from "yaml";
@@ -274,7 +389,7 @@ function getActivePlatforms(config) {
274
389
  }
275
390
 
276
391
  // src/lib/tools.ts
277
- import { existsSync as existsSync3, readdirSync, readFileSync as readFileSync3 } from "fs";
392
+ import { existsSync as existsSync3, readdirSync as readdirSync2, readFileSync as readFileSync3 } from "fs";
278
393
  import { join as join4, dirname as dirname2 } from "path";
279
394
  import { fileURLToPath as fileURLToPath2 } from "url";
280
395
  import YAML2 from "yaml";
@@ -387,7 +502,7 @@ function getBundledTools() {
387
502
  if (!existsSync3(BUNDLED_TOOLS_DIR)) {
388
503
  return [];
389
504
  }
390
- const toolDirs = readdirSync(BUNDLED_TOOLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
505
+ const toolDirs = readdirSync2(BUNDLED_TOOLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
391
506
  const tools = [];
392
507
  for (const toolName of toolDirs) {
393
508
  const manifest = loadToolManifest(join4(BUNDLED_TOOLS_DIR, toolName));
@@ -538,7 +653,7 @@ import {
538
653
  mkdirSync as mkdirSync3,
539
654
  renameSync,
540
655
  rmSync,
541
- readdirSync as readdirSync3,
656
+ readdirSync as readdirSync4,
542
657
  readFileSync as readFileSync5,
543
658
  writeFileSync as writeFileSync3
544
659
  } from "fs";
@@ -594,7 +709,7 @@ function createPlatformSyncMigration(version) {
594
709
  if (!existsSync5(skillsPath)) continue;
595
710
  config.platform = platformKey;
596
711
  const trackedTools = getPlatformTools(config);
597
- const installedDirs = readdirSync3(skillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
712
+ const installedDirs = readdirSync4(skillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
598
713
  for (const skillName of installedDirs) {
599
714
  const normalizedName = skillName.replace(/^droid-/, "");
600
715
  const isTracked = trackedTools[skillName] || trackedTools[`droid-${normalizedName}`] || trackedTools[normalizedName];
@@ -682,7 +797,7 @@ function createOpenCodeSkillsPathMigration(version) {
682
797
  }
683
798
  return;
684
799
  }
685
- const skillDirs = readdirSync3(oldSkillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
800
+ const skillDirs = readdirSync4(oldSkillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
686
801
  for (const skillName of skillDirs) {
687
802
  const oldSkillDir = join6(oldSkillsPath, skillName);
688
803
  const newSkillDir = join6(newSkillsPath, skillName);
@@ -697,7 +812,7 @@ function createOpenCodeSkillsPathMigration(version) {
697
812
  }
698
813
  }
699
814
  try {
700
- const remaining = readdirSync3(oldSkillsPath);
815
+ const remaining = readdirSync4(oldSkillsPath);
701
816
  if (remaining.length === 0) {
702
817
  rmSync(oldSkillsPath, { recursive: true });
703
818
  }
@@ -727,7 +842,7 @@ function createClaudeCodeCommandCleanupMigration(version) {
727
842
  }
728
843
  }
729
844
  }
730
- const commandFiles = readdirSync3(commandsPath, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name);
845
+ const commandFiles = readdirSync4(commandsPath, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name);
731
846
  for (const file of commandFiles) {
732
847
  const commandName = file.replace(".md", "");
733
848
  if (!aliasCommands.has(commandName)) {
@@ -805,7 +920,7 @@ function createUnifiedSkillsPathMigration(version) {
805
920
  if (!existsSync5(unifiedSkillsPath)) {
806
921
  mkdirSync3(unifiedSkillsPath, { recursive: true });
807
922
  }
808
- const skillDirs = readdirSync3(oldOpenCodeSkillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
923
+ const skillDirs = readdirSync4(oldOpenCodeSkillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
809
924
  for (const skillName of skillDirs) {
810
925
  const sourcePath = join6(oldOpenCodeSkillsPath, skillName);
811
926
  const destPath = join6(unifiedSkillsPath, skillName);
@@ -825,7 +940,7 @@ function createUnifiedSkillsPathMigration(version) {
825
940
  }
826
941
  function copyDirRecursive(src, dest) {
827
942
  mkdirSync3(dest, { recursive: true });
828
- const entries = readdirSync3(src, { withFileTypes: true });
943
+ const entries = readdirSync4(src, { withFileTypes: true });
829
944
  for (const entry of entries) {
830
945
  const srcPath = join6(src, entry.name);
831
946
  const destPath = join6(dest, entry.name);
@@ -1008,7 +1123,7 @@ function findSkillPath(skillName) {
1008
1123
  if (!existsSync6(BUNDLED_SKILLS_DIR)) {
1009
1124
  return null;
1010
1125
  }
1011
- const toolDirs = readdirSync4(BUNDLED_SKILLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1126
+ const toolDirs = readdirSync5(BUNDLED_SKILLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1012
1127
  for (const toolName of toolDirs) {
1013
1128
  const skillsDir = join7(BUNDLED_SKILLS_DIR, toolName, "skills");
1014
1129
  if (!existsSync6(skillsDir)) continue;
@@ -1026,12 +1141,12 @@ function getBundledSkills() {
1026
1141
  if (!existsSync6(BUNDLED_SKILLS_DIR)) {
1027
1142
  return [];
1028
1143
  }
1029
- const toolDirs = readdirSync4(BUNDLED_SKILLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1144
+ const toolDirs = readdirSync5(BUNDLED_SKILLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1030
1145
  const skills = [];
1031
1146
  for (const toolName of toolDirs) {
1032
1147
  const skillsDir = join7(BUNDLED_SKILLS_DIR, toolName, "skills");
1033
1148
  if (!existsSync6(skillsDir)) continue;
1034
- const skillSubdirs = readdirSync4(skillsDir, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1149
+ const skillSubdirs = readdirSync5(skillsDir, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1035
1150
  for (const skillName of skillSubdirs) {
1036
1151
  const manifest = loadSkillManifest(join7(skillsDir, skillName));
1037
1152
  if (manifest) {
@@ -1209,7 +1324,7 @@ function installSkill(skillName) {
1209
1324
  if (!isAlreadyInstalled) {
1210
1325
  const toolName2 = basename(toolDir);
1211
1326
  if (existsSync6(commandsSource)) {
1212
- const commandFiles = readdirSync4(commandsSource).filter(
1327
+ const commandFiles = readdirSync5(commandsSource).filter(
1213
1328
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
1214
1329
  );
1215
1330
  for (const file of commandFiles) {
@@ -1227,7 +1342,7 @@ function installSkill(skillName) {
1227
1342
  }
1228
1343
  }
1229
1344
  if (existsSync6(agentsSource)) {
1230
- const agentFiles = readdirSync4(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name.replace(".md", ""));
1345
+ const agentFiles = readdirSync5(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name.replace(".md", ""));
1231
1346
  for (const agentName of agentFiles) {
1232
1347
  if (isAgentInstalled(agentName)) {
1233
1348
  return {
@@ -1256,7 +1371,7 @@ function installSkill(skillName) {
1256
1371
  if (!existsSync6(targetReferencesDir)) {
1257
1372
  mkdirSync4(targetReferencesDir, { recursive: true });
1258
1373
  }
1259
- const referenceFiles = readdirSync4(referencesSource).filter(
1374
+ const referenceFiles = readdirSync5(referencesSource).filter(
1260
1375
  (f) => f.endsWith(".md")
1261
1376
  );
1262
1377
  for (const file of referenceFiles) {
@@ -1272,7 +1387,7 @@ function installSkill(skillName) {
1272
1387
  if (!existsSync6(targetScriptsDir)) {
1273
1388
  mkdirSync4(targetScriptsDir, { recursive: true });
1274
1389
  }
1275
- const scriptFiles = readdirSync4(scriptsSource).filter(
1390
+ const scriptFiles = readdirSync5(scriptsSource).filter(
1276
1391
  (f) => f.endsWith(".ts") || f.endsWith(".js") || f.endsWith(".py")
1277
1392
  );
1278
1393
  for (const file of scriptFiles) {
@@ -1285,7 +1400,7 @@ function installSkill(skillName) {
1285
1400
  const activePlatforms = getActivePlatforms(config);
1286
1401
  const targetPlatforms = activePlatforms.length > 0 ? activePlatforms : [config.platform];
1287
1402
  if (existsSync6(commandsSource)) {
1288
- const commandFiles = readdirSync4(commandsSource).filter(
1403
+ const commandFiles = readdirSync5(commandsSource).filter(
1289
1404
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
1290
1405
  );
1291
1406
  for (const platform of targetPlatforms) {
@@ -1311,7 +1426,7 @@ function installSkill(skillName) {
1311
1426
  }
1312
1427
  const installedAgents = [];
1313
1428
  if (existsSync6(agentsSource)) {
1314
- const agentFiles = readdirSync4(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name.replace(".md", ""));
1429
+ const agentFiles = readdirSync5(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name.replace(".md", ""));
1315
1430
  for (const agentName of agentFiles) {
1316
1431
  const agentPath = join7(agentsSource, `${agentName}.md`);
1317
1432
  let anySuccess = false;
@@ -1368,7 +1483,7 @@ function uninstallSkill(skillName) {
1368
1483
  const skillPath = findSkillPath(skillName);
1369
1484
  const commandsSource = skillPath ? join7(skillPath.toolDir, "commands") : null;
1370
1485
  if (commandsSource && existsSync6(commandsSource)) {
1371
- const commandFiles = readdirSync4(commandsSource).filter(
1486
+ const commandFiles = readdirSync5(commandsSource).filter(
1372
1487
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
1373
1488
  );
1374
1489
  for (const platform of targetPlatforms) {
@@ -1390,7 +1505,7 @@ function uninstallSkill(skillName) {
1390
1505
  }
1391
1506
  const agentsSource = skillPath ? join7(skillPath.toolDir, "agents") : null;
1392
1507
  if (agentsSource && existsSync6(agentsSource)) {
1393
- const agentFiles = readdirSync4(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name.replace(".md", ""));
1508
+ const agentFiles = readdirSync5(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name.replace(".md", ""));
1394
1509
  for (const agentName of agentFiles) {
1395
1510
  agentsToRemove.add(agentName);
1396
1511
  }
@@ -1444,7 +1559,7 @@ function installCommand(commandName, skillName) {
1444
1559
  };
1445
1560
  }
1446
1561
  const cmdPart = commandName.startsWith(skillName + " ") ? commandName.slice(skillName.length + 1) : commandName;
1447
- const files = readdirSync4(commandsDir).filter(
1562
+ const files = readdirSync5(commandsDir).filter(
1448
1563
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
1449
1564
  );
1450
1565
  const sourceFile = files.find((f) => {
@@ -1507,6 +1622,7 @@ export {
1507
1622
  ConfigOptionType,
1508
1623
  Platform,
1509
1624
  SkillStatus,
1625
+ addRepo,
1510
1626
  checkForUpdates,
1511
1627
  compareSemver,
1512
1628
  configExists,
@@ -1524,11 +1640,15 @@ export {
1524
1640
  getPlatformConfigPath,
1525
1641
  getPlatformTools,
1526
1642
  getPlatformToolsFor,
1643
+ getRepo,
1644
+ getRepoPath,
1645
+ getRepos,
1527
1646
  getSkillOverridesPath,
1528
1647
  getSkillStatusDisplay,
1529
1648
  getSkillUpdateStatus,
1530
1649
  getSkillsInstallPath,
1531
1650
  getSkillsWithUpdates,
1651
+ getToolSettings,
1532
1652
  getUpdateInfo,
1533
1653
  getVersion,
1534
1654
  installCommand,
@@ -1538,12 +1658,15 @@ export {
1538
1658
  loadConfig,
1539
1659
  loadSkillManifest,
1540
1660
  loadSkillOverrides,
1661
+ removeRepo,
1541
1662
  runUpdate,
1542
1663
  saveConfig,
1543
1664
  saveSkillOverrides,
1544
1665
  setAutoUpdateConfig,
1545
1666
  setConfigValue,
1546
1667
  setPlatformTools,
1668
+ setToolSetting,
1669
+ setToolSettings,
1547
1670
  uninstallCommand,
1548
1671
  uninstallSkill,
1549
1672
  updateAllSkills,
@@ -1,4 +1,4 @@
1
- import { type DroidConfig, type SkillOverrides, type AutoUpdateConfig } from './types';
1
+ import { type DroidConfig, type SkillOverrides, type AutoUpdateConfig, type RepoConfig, type ToolConfig } from './types';
2
2
  /**
3
3
  * Ensure the config directory exists
4
4
  */
@@ -38,12 +38,25 @@ export declare function getConfigDir(): string;
38
38
  export declare function getSkillOverridesPath(skillName: string): string;
39
39
  /**
40
40
  * Load skill-specific overrides
41
+ * Reads from new location first (config.tools.{name}), falls back to old override files
41
42
  */
42
43
  export declare function loadSkillOverrides(skillName: string): SkillOverrides;
43
44
  /**
44
45
  * Save skill-specific overrides
45
46
  */
46
47
  export declare function saveSkillOverrides(skillName: string, overrides: SkillOverrides): void;
48
+ /**
49
+ * Get tool settings from config.tools.{name} (returns empty object if none)
50
+ */
51
+ export declare function getToolSettings(name: string): ToolConfig;
52
+ /**
53
+ * Set all settings for a tool in config.tools.{name}
54
+ */
55
+ export declare function setToolSettings(name: string, settings: ToolConfig): void;
56
+ /**
57
+ * Set a single key in tool settings
58
+ */
59
+ export declare function setToolSetting(name: string, key: string, value: unknown): void;
47
60
  /**
48
61
  * Get auto-update config with defaults applied
49
62
  */
@@ -52,4 +65,24 @@ export declare function getAutoUpdateConfig(): AutoUpdateConfig;
52
65
  * Update auto-update config
53
66
  */
54
67
  export declare function setAutoUpdateConfig(updates: Partial<AutoUpdateConfig>): void;
68
+ /**
69
+ * Get all repos (returns empty array if none)
70
+ */
71
+ export declare function getRepos(): RepoConfig[];
72
+ /**
73
+ * Find repo by name
74
+ */
75
+ export declare function getRepo(name: string): RepoConfig | undefined;
76
+ /**
77
+ * Get repo path with tilde expansion
78
+ */
79
+ export declare function getRepoPath(name: string): string | undefined;
80
+ /**
81
+ * Add or update a repo (updates if name exists)
82
+ */
83
+ export declare function addRepo(repo: RepoConfig): void;
84
+ /**
85
+ * Remove repo by name (returns true if existed)
86
+ */
87
+ export declare function removeRepo(name: string): boolean;
55
88
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,SAAS,CAAC;AAmDjB;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,WAAW,CA4BxC;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,CAiBhE;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,CAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,cAAc,GACxB,IAAI,CAWN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAMtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAQ5E"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,SAAS,CAAC;AA+GjB;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,WAAW,CAgCxC;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,CAiBhE;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;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAsBpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,cAAc,GACxB,IAAI,CAWN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAGxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,IAAI,CAOxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAI9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAMtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAQ5E;AAYD;;GAEG;AACH,wBAAgB,QAAQ,IAAI,UAAU,EAAE,CAGvC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAG5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM5D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAiB9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAchD"}
@@ -33,18 +33,27 @@ export interface AutoUpdateConfig {
33
33
  app: boolean;
34
34
  tools: boolean;
35
35
  }
36
+ export interface RepoConfig {
37
+ name: string;
38
+ path: string;
39
+ description?: string;
40
+ }
41
+ export type ToolConfig = Record<string, unknown>;
36
42
  export interface DroidConfig {
37
43
  platform: Platform;
38
44
  user_mention: string;
39
45
  output_preference: OutputPreference;
40
46
  git_username: string;
41
47
  platforms: Record<string, PlatformConfig>;
48
+ repos?: RepoConfig[];
49
+ tools?: Record<string, ToolConfig>;
42
50
  auto_update?: AutoUpdateConfig;
43
51
  ignored_platforms?: Platform[];
44
52
  migrations?: {
45
53
  package?: string;
46
54
  tools?: Record<string, string>;
47
- [key: string]: string | Record<string, string> | undefined;
55
+ tools_consolidated?: boolean;
56
+ [key: string]: string | Record<string, string> | boolean | undefined;
48
57
  };
49
58
  }
50
59
  export interface LegacyDroidConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ Your **scratchpad** (or **brain**) - a collaborative space for planning, researc
26
26
 
27
27
  ## Configuration
28
28
 
29
- **IMPORTANT:** Run `droid config brain` first and parse the JSON output. If `brain_dir` is not configured, **ask the user** where they want brain docs stored.
29
+ **IMPORTANT:** Run `droid config --get tools.brain` first and parse the JSON output. If `brain_dir` is not configured, **ask the user** where they want brain docs stored.
30
30
 
31
31
  | Setting | Default | Description |
32
32
  | -------------- | ------- | ------------------------------------------ |
@@ -134,7 +134,7 @@ In markdown files, use blockquote `>` prefix for @mention comments. The @mention
134
134
  | `> @droid ...` | User | AI | User asking/telling the AI |
135
135
  | `> @user ...` | AI | User | AI asking/telling the user |
136
136
 
137
- Get `user_mention` from `droid config brain`. If droid's `comments` skill is installed, use `/comments check` for full support.
137
+ Get `user_mention` from `droid config --get user_mention`. If droid's `comments` skill is installed, use `/comments check` for full support.
138
138
 
139
139
  ## Extensions
140
140