@orderful/droid 0.33.1 → 0.34.1

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 (79) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/bin/droid.js +689 -102
  3. package/dist/commands/config.d.ts.map +1 -1
  4. package/dist/commands/repos.d.ts +21 -0
  5. package/dist/commands/repos.d.ts.map +1 -0
  6. package/dist/commands/tui/components/SettingsDetails.d.ts +2 -1
  7. package/dist/commands/tui/components/SettingsDetails.d.ts.map +1 -1
  8. package/dist/commands/tui/types.d.ts +1 -1
  9. package/dist/commands/tui/types.d.ts.map +1 -1
  10. package/dist/commands/tui/views/ReposManagementScreen.d.ts +6 -0
  11. package/dist/commands/tui/views/ReposManagementScreen.d.ts.map +1 -0
  12. package/dist/commands/tui/views/ReposViewerScreen.d.ts +5 -0
  13. package/dist/commands/tui/views/ReposViewerScreen.d.ts.map +1 -0
  14. package/dist/commands/tui.d.ts.map +1 -1
  15. package/dist/index.js +156 -26
  16. package/dist/lib/config.d.ts +34 -1
  17. package/dist/lib/config.d.ts.map +1 -1
  18. package/dist/lib/types.d.ts +10 -1
  19. package/dist/lib/types.d.ts.map +1 -1
  20. package/dist/tools/brain/skills/brain/SKILL.md +2 -2
  21. package/dist/tools/brain/skills/brain/references/workflows.md +10 -10
  22. package/dist/tools/coach/skills/coach/SKILL.md +6 -6
  23. package/dist/tools/codex/skills/codex/SKILL.md +5 -5
  24. package/dist/tools/codex/skills/codex/references/creating.md +2 -2
  25. package/dist/tools/codex/skills/codex/references/decisions.md +2 -2
  26. package/dist/tools/codex/skills/codex/references/loading.md +1 -1
  27. package/dist/tools/codex/skills/codex/references/topics.md +2 -2
  28. package/dist/tools/codex/skills/codex/scripts/git-finish-write.d.ts +1 -1
  29. package/dist/tools/codex/skills/codex/scripts/git-finish-write.ts +2 -2
  30. package/dist/tools/codex/skills/codex/scripts/git-preamble.d.ts +1 -1
  31. package/dist/tools/codex/skills/codex/scripts/git-preamble.ts +3 -3
  32. package/dist/tools/codex/skills/codex/scripts/git-start-write.d.ts +1 -1
  33. package/dist/tools/codex/skills/codex/scripts/git-start-write.ts +2 -2
  34. package/dist/tools/comments/skills/comments/SKILL.md +9 -9
  35. package/dist/tools/plan/skills/plan/SKILL.md +2 -2
  36. package/dist/tools/plan/skills/plan/references/workflows.md +2 -2
  37. package/dist/tools/project/skills/project/SKILL.md +1 -1
  38. package/dist/tools/project/skills/project/references/creating.md +2 -2
  39. package/dist/tools/project/skills/project/references/loading.md +1 -1
  40. package/dist/tools/tech-design/skills/tech-design/SKILL.md +2 -2
  41. package/dist/tools/tech-design/skills/tech-design/references/publish.md +3 -3
  42. package/dist/tools/tech-design/skills/tech-design/references/start.md +29 -3
  43. package/dist/tools/tech-design/skills/tech-design/references/think.md +1 -1
  44. package/dist/tools/wrapup/skills/wrapup/references/subagent-prompts.md +3 -3
  45. package/package.json +1 -1
  46. package/src/bin/droid.ts +39 -0
  47. package/src/commands/config.ts +14 -1
  48. package/src/commands/repos.ts +185 -0
  49. package/src/commands/tui/components/SettingsDetails.tsx +42 -13
  50. package/src/commands/tui/types.ts +1 -1
  51. package/src/commands/tui/views/ReposManagementScreen.tsx +291 -0
  52. package/src/commands/tui/views/ReposViewerScreen.tsx +49 -0
  53. package/src/commands/tui/views/SkillConfigScreen.tsx +2 -2
  54. package/src/commands/tui.tsx +51 -4
  55. package/src/lib/config.test.ts +228 -1
  56. package/src/lib/config.ts +205 -4
  57. package/src/lib/types.ts +13 -1
  58. package/src/tools/brain/skills/brain/SKILL.md +2 -2
  59. package/src/tools/brain/skills/brain/references/workflows.md +10 -10
  60. package/src/tools/coach/skills/coach/SKILL.md +6 -6
  61. package/src/tools/codex/skills/codex/SKILL.md +5 -5
  62. package/src/tools/codex/skills/codex/references/creating.md +2 -2
  63. package/src/tools/codex/skills/codex/references/decisions.md +2 -2
  64. package/src/tools/codex/skills/codex/references/loading.md +1 -1
  65. package/src/tools/codex/skills/codex/references/topics.md +2 -2
  66. package/src/tools/codex/skills/codex/scripts/git-finish-write.ts +2 -2
  67. package/src/tools/codex/skills/codex/scripts/git-preamble.ts +3 -3
  68. package/src/tools/codex/skills/codex/scripts/git-start-write.ts +2 -2
  69. package/src/tools/comments/skills/comments/SKILL.md +9 -9
  70. package/src/tools/plan/skills/plan/SKILL.md +2 -2
  71. package/src/tools/plan/skills/plan/references/workflows.md +2 -2
  72. package/src/tools/project/skills/project/SKILL.md +1 -1
  73. package/src/tools/project/skills/project/references/creating.md +2 -2
  74. package/src/tools/project/skills/project/references/loading.md +1 -1
  75. package/src/tools/tech-design/skills/tech-design/SKILL.md +2 -2
  76. package/src/tools/tech-design/skills/tech-design/references/publish.md +3 -3
  77. package/src/tools/tech-design/skills/tech-design/references/start.md +29 -3
  78. package/src/tools/tech-design/skills/tech-design/references/think.md +1 -1
  79. package/src/tools/wrapup/skills/wrapup/references/subagent-prompts.md +3 -3
@@ -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,54 @@ function migrateConfig(config) {
80
86
  platforms: config.platforms ?? {}
81
87
  };
82
88
  }
89
+ function migrateToolConfigs(config) {
90
+ const skillsDir = join(CONFIG_DIR, "skills");
91
+ if (!existsSync(skillsDir)) {
92
+ if (!config.migrations) {
93
+ config.migrations = {};
94
+ }
95
+ if (!config.migrations.tools_consolidated) {
96
+ config.migrations.tools_consolidated = true;
97
+ return true;
98
+ }
99
+ return false;
100
+ }
101
+ let migrated = false;
102
+ try {
103
+ const entries = readdirSync(skillsDir, { withFileTypes: true });
104
+ for (const entry of entries) {
105
+ if (!entry.isDirectory()) continue;
106
+ const skillName = entry.name;
107
+ const overridesPath = join(skillsDir, skillName, "overrides.yaml");
108
+ if (!existsSync(overridesPath)) continue;
109
+ try {
110
+ const content = readFileSync(overridesPath, "utf-8");
111
+ const overrides = YAML.parse(content);
112
+ if (overrides && Object.keys(overrides).length > 0) {
113
+ if (!config.tools) {
114
+ config.tools = {};
115
+ }
116
+ if (!config.tools[skillName]) {
117
+ config.tools[skillName] = overrides;
118
+ migrated = true;
119
+ }
120
+ }
121
+ } catch {
122
+ continue;
123
+ }
124
+ }
125
+ if (!config.migrations) {
126
+ config.migrations = {};
127
+ }
128
+ if (!config.migrations.tools_consolidated) {
129
+ config.migrations.tools_consolidated = true;
130
+ migrated = true;
131
+ }
132
+ return migrated;
133
+ } catch {
134
+ return false;
135
+ }
136
+ }
83
137
  function ensureConfigDir() {
84
138
  if (!existsSync(CONFIG_DIR)) {
85
139
  mkdirSync(CONFIG_DIR, { recursive: true });
@@ -96,9 +150,10 @@ function loadConfig() {
96
150
  try {
97
151
  const content = readFileSync(CONFIG_FILE, "utf-8");
98
152
  const rawConfig = YAML.parse(content);
99
- const needsMigration = "ai_tool" in rawConfig && !("platform" in rawConfig);
153
+ const needsLegacyMigration = "ai_tool" in rawConfig && !("platform" in rawConfig);
100
154
  const config = migrateConfig(rawConfig);
101
- if (needsMigration) {
155
+ const needsToolMigration = migrateToolConfigs(config);
156
+ if (needsLegacyMigration || needsToolMigration) {
102
157
  saveConfig(config);
103
158
  }
104
159
  return config;
@@ -152,6 +207,11 @@ function getSkillOverridesPath(skillName) {
152
207
  return join(CONFIG_DIR, "skills", normalizedName, "overrides.yaml");
153
208
  }
154
209
  function loadSkillOverrides(skillName) {
210
+ const normalizedName = normalizeSkillNameForConfig(skillName);
211
+ const toolSettings = getToolSettings(normalizedName);
212
+ if (Object.keys(toolSettings).length > 0) {
213
+ return toolSettings;
214
+ }
155
215
  const overridesPath = getSkillOverridesPath(skillName);
156
216
  if (!existsSync(overridesPath)) {
157
217
  return {};
@@ -173,6 +233,23 @@ function saveSkillOverrides(skillName, overrides) {
173
233
  const content = YAML.stringify(overrides, { indent: 2 });
174
234
  writeFileSync(overridesPath, content, "utf-8");
175
235
  }
236
+ function getToolSettings(name) {
237
+ const config = loadConfig();
238
+ return config.tools?.[name] ?? {};
239
+ }
240
+ function setToolSettings(name, settings) {
241
+ const config = loadConfig();
242
+ if (!config.tools) {
243
+ config.tools = {};
244
+ }
245
+ config.tools[name] = settings;
246
+ saveConfig(config);
247
+ }
248
+ function setToolSetting(name, key, value) {
249
+ const settings = getToolSettings(name);
250
+ settings[key] = value;
251
+ setToolSettings(name, settings);
252
+ }
176
253
  function getAutoUpdateConfig() {
177
254
  const config = loadConfig();
178
255
  return {
@@ -189,11 +266,56 @@ function setAutoUpdateConfig(updates) {
189
266
  };
190
267
  saveConfig(config);
191
268
  }
269
+ function expandTilde(path) {
270
+ if (path.startsWith("~/")) {
271
+ return join(homedir(), path.slice(2));
272
+ }
273
+ return path;
274
+ }
275
+ function getRepos() {
276
+ const config = loadConfig();
277
+ return config.repos ?? [];
278
+ }
279
+ function getRepo(name) {
280
+ const repos = getRepos();
281
+ return repos.find((repo) => repo.name === name);
282
+ }
283
+ function getRepoPath(name) {
284
+ const repo = getRepo(name);
285
+ if (!repo) {
286
+ return void 0;
287
+ }
288
+ return expandTilde(repo.path);
289
+ }
290
+ function addRepo(repo) {
291
+ const config = loadConfig();
292
+ const repos = config.repos ?? [];
293
+ const existingIndex = repos.findIndex((r) => r.name === repo.name);
294
+ if (existingIndex >= 0) {
295
+ repos[existingIndex] = repo;
296
+ } else {
297
+ repos.push(repo);
298
+ }
299
+ config.repos = repos;
300
+ saveConfig(config);
301
+ }
302
+ function removeRepo(name) {
303
+ const config = loadConfig();
304
+ const repos = config.repos ?? [];
305
+ const existingIndex = repos.findIndex((r) => r.name === name);
306
+ if (existingIndex >= 0) {
307
+ repos.splice(existingIndex, 1);
308
+ config.repos = repos;
309
+ saveConfig(config);
310
+ return true;
311
+ }
312
+ return false;
313
+ }
192
314
 
193
315
  // src/lib/skills.ts
194
316
  import {
195
317
  existsSync as existsSync6,
196
- readdirSync as readdirSync4,
318
+ readdirSync as readdirSync5,
197
319
  readFileSync as readFileSync6,
198
320
  mkdirSync as mkdirSync4,
199
321
  writeFileSync as writeFileSync4,
@@ -204,7 +326,7 @@ import { fileURLToPath as fileURLToPath4 } from "url";
204
326
  import YAML4 from "yaml";
205
327
 
206
328
  // src/lib/agents.ts
207
- import { existsSync as existsSync4, readdirSync as readdirSync2, readFileSync as readFileSync4, writeFileSync as writeFileSync2, unlinkSync, mkdirSync as mkdirSync2 } from "fs";
329
+ import { existsSync as existsSync4, readdirSync as readdirSync3, readFileSync as readFileSync4, writeFileSync as writeFileSync2, unlinkSync, mkdirSync as mkdirSync2 } from "fs";
208
330
  import { join as join5, dirname as dirname3 } from "path";
209
331
  import { fileURLToPath as fileURLToPath3 } from "url";
210
332
  import YAML3 from "yaml";
@@ -274,7 +396,7 @@ function getActivePlatforms(config) {
274
396
  }
275
397
 
276
398
  // src/lib/tools.ts
277
- import { existsSync as existsSync3, readdirSync, readFileSync as readFileSync3 } from "fs";
399
+ import { existsSync as existsSync3, readdirSync as readdirSync2, readFileSync as readFileSync3 } from "fs";
278
400
  import { join as join4, dirname as dirname2 } from "path";
279
401
  import { fileURLToPath as fileURLToPath2 } from "url";
280
402
  import YAML2 from "yaml";
@@ -387,7 +509,7 @@ function getBundledTools() {
387
509
  if (!existsSync3(BUNDLED_TOOLS_DIR)) {
388
510
  return [];
389
511
  }
390
- const toolDirs = readdirSync(BUNDLED_TOOLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
512
+ const toolDirs = readdirSync2(BUNDLED_TOOLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
391
513
  const tools = [];
392
514
  for (const toolName of toolDirs) {
393
515
  const manifest = loadToolManifest(join4(BUNDLED_TOOLS_DIR, toolName));
@@ -538,7 +660,7 @@ import {
538
660
  mkdirSync as mkdirSync3,
539
661
  renameSync,
540
662
  rmSync,
541
- readdirSync as readdirSync3,
663
+ readdirSync as readdirSync4,
542
664
  readFileSync as readFileSync5,
543
665
  writeFileSync as writeFileSync3
544
666
  } from "fs";
@@ -594,7 +716,7 @@ function createPlatformSyncMigration(version) {
594
716
  if (!existsSync5(skillsPath)) continue;
595
717
  config.platform = platformKey;
596
718
  const trackedTools = getPlatformTools(config);
597
- const installedDirs = readdirSync3(skillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
719
+ const installedDirs = readdirSync4(skillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
598
720
  for (const skillName of installedDirs) {
599
721
  const normalizedName = skillName.replace(/^droid-/, "");
600
722
  const isTracked = trackedTools[skillName] || trackedTools[`droid-${normalizedName}`] || trackedTools[normalizedName];
@@ -682,7 +804,7 @@ function createOpenCodeSkillsPathMigration(version) {
682
804
  }
683
805
  return;
684
806
  }
685
- const skillDirs = readdirSync3(oldSkillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
807
+ const skillDirs = readdirSync4(oldSkillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
686
808
  for (const skillName of skillDirs) {
687
809
  const oldSkillDir = join6(oldSkillsPath, skillName);
688
810
  const newSkillDir = join6(newSkillsPath, skillName);
@@ -697,7 +819,7 @@ function createOpenCodeSkillsPathMigration(version) {
697
819
  }
698
820
  }
699
821
  try {
700
- const remaining = readdirSync3(oldSkillsPath);
822
+ const remaining = readdirSync4(oldSkillsPath);
701
823
  if (remaining.length === 0) {
702
824
  rmSync(oldSkillsPath, { recursive: true });
703
825
  }
@@ -727,7 +849,7 @@ function createClaudeCodeCommandCleanupMigration(version) {
727
849
  }
728
850
  }
729
851
  }
730
- const commandFiles = readdirSync3(commandsPath, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name);
852
+ const commandFiles = readdirSync4(commandsPath, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name);
731
853
  for (const file of commandFiles) {
732
854
  const commandName = file.replace(".md", "");
733
855
  if (!aliasCommands.has(commandName)) {
@@ -805,7 +927,7 @@ function createUnifiedSkillsPathMigration(version) {
805
927
  if (!existsSync5(unifiedSkillsPath)) {
806
928
  mkdirSync3(unifiedSkillsPath, { recursive: true });
807
929
  }
808
- const skillDirs = readdirSync3(oldOpenCodeSkillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
930
+ const skillDirs = readdirSync4(oldOpenCodeSkillsPath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
809
931
  for (const skillName of skillDirs) {
810
932
  const sourcePath = join6(oldOpenCodeSkillsPath, skillName);
811
933
  const destPath = join6(unifiedSkillsPath, skillName);
@@ -825,7 +947,7 @@ function createUnifiedSkillsPathMigration(version) {
825
947
  }
826
948
  function copyDirRecursive(src, dest) {
827
949
  mkdirSync3(dest, { recursive: true });
828
- const entries = readdirSync3(src, { withFileTypes: true });
950
+ const entries = readdirSync4(src, { withFileTypes: true });
829
951
  for (const entry of entries) {
830
952
  const srcPath = join6(src, entry.name);
831
953
  const destPath = join6(dest, entry.name);
@@ -1008,7 +1130,7 @@ function findSkillPath(skillName) {
1008
1130
  if (!existsSync6(BUNDLED_SKILLS_DIR)) {
1009
1131
  return null;
1010
1132
  }
1011
- const toolDirs = readdirSync4(BUNDLED_SKILLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1133
+ const toolDirs = readdirSync5(BUNDLED_SKILLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1012
1134
  for (const toolName of toolDirs) {
1013
1135
  const skillsDir = join7(BUNDLED_SKILLS_DIR, toolName, "skills");
1014
1136
  if (!existsSync6(skillsDir)) continue;
@@ -1026,12 +1148,12 @@ function getBundledSkills() {
1026
1148
  if (!existsSync6(BUNDLED_SKILLS_DIR)) {
1027
1149
  return [];
1028
1150
  }
1029
- const toolDirs = readdirSync4(BUNDLED_SKILLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1151
+ const toolDirs = readdirSync5(BUNDLED_SKILLS_DIR, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1030
1152
  const skills = [];
1031
1153
  for (const toolName of toolDirs) {
1032
1154
  const skillsDir = join7(BUNDLED_SKILLS_DIR, toolName, "skills");
1033
1155
  if (!existsSync6(skillsDir)) continue;
1034
- const skillSubdirs = readdirSync4(skillsDir, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1156
+ const skillSubdirs = readdirSync5(skillsDir, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
1035
1157
  for (const skillName of skillSubdirs) {
1036
1158
  const manifest = loadSkillManifest(join7(skillsDir, skillName));
1037
1159
  if (manifest) {
@@ -1209,7 +1331,7 @@ function installSkill(skillName) {
1209
1331
  if (!isAlreadyInstalled) {
1210
1332
  const toolName2 = basename(toolDir);
1211
1333
  if (existsSync6(commandsSource)) {
1212
- const commandFiles = readdirSync4(commandsSource).filter(
1334
+ const commandFiles = readdirSync5(commandsSource).filter(
1213
1335
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
1214
1336
  );
1215
1337
  for (const file of commandFiles) {
@@ -1227,7 +1349,7 @@ function installSkill(skillName) {
1227
1349
  }
1228
1350
  }
1229
1351
  if (existsSync6(agentsSource)) {
1230
- const agentFiles = readdirSync4(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name.replace(".md", ""));
1352
+ const agentFiles = readdirSync5(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name.replace(".md", ""));
1231
1353
  for (const agentName of agentFiles) {
1232
1354
  if (isAgentInstalled(agentName)) {
1233
1355
  return {
@@ -1256,7 +1378,7 @@ function installSkill(skillName) {
1256
1378
  if (!existsSync6(targetReferencesDir)) {
1257
1379
  mkdirSync4(targetReferencesDir, { recursive: true });
1258
1380
  }
1259
- const referenceFiles = readdirSync4(referencesSource).filter(
1381
+ const referenceFiles = readdirSync5(referencesSource).filter(
1260
1382
  (f) => f.endsWith(".md")
1261
1383
  );
1262
1384
  for (const file of referenceFiles) {
@@ -1272,7 +1394,7 @@ function installSkill(skillName) {
1272
1394
  if (!existsSync6(targetScriptsDir)) {
1273
1395
  mkdirSync4(targetScriptsDir, { recursive: true });
1274
1396
  }
1275
- const scriptFiles = readdirSync4(scriptsSource).filter(
1397
+ const scriptFiles = readdirSync5(scriptsSource).filter(
1276
1398
  (f) => f.endsWith(".ts") || f.endsWith(".js") || f.endsWith(".py")
1277
1399
  );
1278
1400
  for (const file of scriptFiles) {
@@ -1285,7 +1407,7 @@ function installSkill(skillName) {
1285
1407
  const activePlatforms = getActivePlatforms(config);
1286
1408
  const targetPlatforms = activePlatforms.length > 0 ? activePlatforms : [config.platform];
1287
1409
  if (existsSync6(commandsSource)) {
1288
- const commandFiles = readdirSync4(commandsSource).filter(
1410
+ const commandFiles = readdirSync5(commandsSource).filter(
1289
1411
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
1290
1412
  );
1291
1413
  for (const platform of targetPlatforms) {
@@ -1311,7 +1433,7 @@ function installSkill(skillName) {
1311
1433
  }
1312
1434
  const installedAgents = [];
1313
1435
  if (existsSync6(agentsSource)) {
1314
- const agentFiles = readdirSync4(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name.replace(".md", ""));
1436
+ const agentFiles = readdirSync5(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name.replace(".md", ""));
1315
1437
  for (const agentName of agentFiles) {
1316
1438
  const agentPath = join7(agentsSource, `${agentName}.md`);
1317
1439
  let anySuccess = false;
@@ -1368,7 +1490,7 @@ function uninstallSkill(skillName) {
1368
1490
  const skillPath = findSkillPath(skillName);
1369
1491
  const commandsSource = skillPath ? join7(skillPath.toolDir, "commands") : null;
1370
1492
  if (commandsSource && existsSync6(commandsSource)) {
1371
- const commandFiles = readdirSync4(commandsSource).filter(
1493
+ const commandFiles = readdirSync5(commandsSource).filter(
1372
1494
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
1373
1495
  );
1374
1496
  for (const platform of targetPlatforms) {
@@ -1390,7 +1512,7 @@ function uninstallSkill(skillName) {
1390
1512
  }
1391
1513
  const agentsSource = skillPath ? join7(skillPath.toolDir, "agents") : null;
1392
1514
  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", ""));
1515
+ const agentFiles = readdirSync5(agentsSource, { withFileTypes: true }).filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md")).map((dirent) => dirent.name.replace(".md", ""));
1394
1516
  for (const agentName of agentFiles) {
1395
1517
  agentsToRemove.add(agentName);
1396
1518
  }
@@ -1444,7 +1566,7 @@ function installCommand(commandName, skillName) {
1444
1566
  };
1445
1567
  }
1446
1568
  const cmdPart = commandName.startsWith(skillName + " ") ? commandName.slice(skillName.length + 1) : commandName;
1447
- const files = readdirSync4(commandsDir).filter(
1569
+ const files = readdirSync5(commandsDir).filter(
1448
1570
  (f) => f.endsWith(".md") && f.toLowerCase() !== "readme.md"
1449
1571
  );
1450
1572
  const sourceFile = files.find((f) => {
@@ -1507,6 +1629,7 @@ export {
1507
1629
  ConfigOptionType,
1508
1630
  Platform,
1509
1631
  SkillStatus,
1632
+ addRepo,
1510
1633
  checkForUpdates,
1511
1634
  compareSemver,
1512
1635
  configExists,
@@ -1524,11 +1647,15 @@ export {
1524
1647
  getPlatformConfigPath,
1525
1648
  getPlatformTools,
1526
1649
  getPlatformToolsFor,
1650
+ getRepo,
1651
+ getRepoPath,
1652
+ getRepos,
1527
1653
  getSkillOverridesPath,
1528
1654
  getSkillStatusDisplay,
1529
1655
  getSkillUpdateStatus,
1530
1656
  getSkillsInstallPath,
1531
1657
  getSkillsWithUpdates,
1658
+ getToolSettings,
1532
1659
  getUpdateInfo,
1533
1660
  getVersion,
1534
1661
  installCommand,
@@ -1538,12 +1665,15 @@ export {
1538
1665
  loadConfig,
1539
1666
  loadSkillManifest,
1540
1667
  loadSkillOverrides,
1668
+ removeRepo,
1541
1669
  runUpdate,
1542
1670
  saveConfig,
1543
1671
  saveSkillOverrides,
1544
1672
  setAutoUpdateConfig,
1545
1673
  setConfigValue,
1546
1674
  setPlatformTools,
1675
+ setToolSetting,
1676
+ setToolSettings,
1547
1677
  uninstallCommand,
1548
1678
  uninstallSkill,
1549
1679
  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;AA2HjB;;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