@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +25 -0
- package/dist/bin/droid.js +673 -101
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/repos.d.ts +21 -0
- package/dist/commands/repos.d.ts.map +1 -0
- package/dist/commands/tui/components/SettingsDetails.d.ts +2 -1
- package/dist/commands/tui/components/SettingsDetails.d.ts.map +1 -1
- package/dist/commands/tui/types.d.ts +1 -1
- package/dist/commands/tui/types.d.ts.map +1 -1
- package/dist/commands/tui/views/ReposManagementScreen.d.ts +6 -0
- package/dist/commands/tui/views/ReposManagementScreen.d.ts.map +1 -0
- package/dist/commands/tui/views/ReposViewerScreen.d.ts +5 -0
- package/dist/commands/tui/views/ReposViewerScreen.d.ts.map +1 -0
- package/dist/commands/tui.d.ts.map +1 -1
- package/dist/index.js +149 -26
- package/dist/lib/config.d.ts +34 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/types.d.ts +10 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/tools/brain/skills/brain/SKILL.md +2 -2
- package/dist/tools/brain/skills/brain/references/workflows.md +10 -10
- package/dist/tools/coach/skills/coach/SKILL.md +6 -6
- package/dist/tools/codex/skills/codex/SKILL.md +5 -5
- package/dist/tools/codex/skills/codex/references/creating.md +2 -2
- package/dist/tools/codex/skills/codex/references/decisions.md +2 -2
- package/dist/tools/codex/skills/codex/references/loading.md +1 -1
- package/dist/tools/codex/skills/codex/references/topics.md +2 -2
- package/dist/tools/codex/skills/codex/scripts/git-finish-write.d.ts +1 -1
- package/dist/tools/codex/skills/codex/scripts/git-finish-write.ts +2 -2
- package/dist/tools/codex/skills/codex/scripts/git-preamble.d.ts +1 -1
- package/dist/tools/codex/skills/codex/scripts/git-preamble.ts +3 -3
- package/dist/tools/codex/skills/codex/scripts/git-start-write.d.ts +1 -1
- package/dist/tools/codex/skills/codex/scripts/git-start-write.ts +2 -2
- package/dist/tools/comments/skills/comments/SKILL.md +9 -9
- package/dist/tools/plan/skills/plan/SKILL.md +2 -2
- package/dist/tools/plan/skills/plan/references/workflows.md +2 -2
- package/dist/tools/project/skills/project/SKILL.md +1 -1
- package/dist/tools/project/skills/project/references/creating.md +2 -2
- package/dist/tools/project/skills/project/references/loading.md +1 -1
- package/dist/tools/tech-design/skills/tech-design/SKILL.md +2 -2
- package/dist/tools/tech-design/skills/tech-design/references/publish.md +3 -3
- package/dist/tools/tech-design/skills/tech-design/references/start.md +29 -3
- package/dist/tools/tech-design/skills/tech-design/references/think.md +1 -1
- package/dist/tools/wrapup/.claude-plugin/plugin.json +1 -1
- package/dist/tools/wrapup/TOOL.yaml +1 -1
- package/dist/tools/wrapup/skills/wrapup/SKILL.md +4 -2
- package/dist/tools/wrapup/skills/wrapup/references/subagent-prompts.md +8 -6
- package/package.json +1 -1
- package/src/bin/droid.ts +39 -0
- package/src/commands/config.ts +14 -1
- package/src/commands/repos.ts +185 -0
- package/src/commands/tui/components/SettingsDetails.tsx +42 -13
- package/src/commands/tui/types.ts +1 -1
- package/src/commands/tui/views/ReposManagementScreen.tsx +291 -0
- package/src/commands/tui/views/ReposViewerScreen.tsx +49 -0
- package/src/commands/tui.tsx +51 -4
- package/src/lib/config.test.ts +228 -1
- package/src/lib/config.ts +193 -4
- package/src/lib/types.ts +13 -1
- package/src/tools/brain/skills/brain/SKILL.md +2 -2
- package/src/tools/brain/skills/brain/references/workflows.md +10 -10
- package/src/tools/coach/skills/coach/SKILL.md +6 -6
- package/src/tools/codex/skills/codex/SKILL.md +5 -5
- package/src/tools/codex/skills/codex/references/creating.md +2 -2
- package/src/tools/codex/skills/codex/references/decisions.md +2 -2
- package/src/tools/codex/skills/codex/references/loading.md +1 -1
- package/src/tools/codex/skills/codex/references/topics.md +2 -2
- package/src/tools/codex/skills/codex/scripts/git-finish-write.ts +2 -2
- package/src/tools/codex/skills/codex/scripts/git-preamble.ts +3 -3
- package/src/tools/codex/skills/codex/scripts/git-start-write.ts +2 -2
- package/src/tools/comments/skills/comments/SKILL.md +9 -9
- package/src/tools/plan/skills/plan/SKILL.md +2 -2
- package/src/tools/plan/skills/plan/references/workflows.md +2 -2
- package/src/tools/project/skills/project/SKILL.md +1 -1
- package/src/tools/project/skills/project/references/creating.md +2 -2
- package/src/tools/project/skills/project/references/loading.md +1 -1
- package/src/tools/tech-design/skills/tech-design/SKILL.md +2 -2
- package/src/tools/tech-design/skills/tech-design/references/publish.md +3 -3
- package/src/tools/tech-design/skills/tech-design/references/start.md +29 -3
- package/src/tools/tech-design/skills/tech-design/references/think.md +1 -1
- package/src/tools/wrapup/.claude-plugin/plugin.json +1 -1
- package/src/tools/wrapup/TOOL.yaml +1 -1
- package/src/tools/wrapup/skills/wrapup/SKILL.md +4 -2
- 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,
|
|
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,
|
|
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;
|
|
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 @@
|
|
|
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":"
|
|
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 {
|
|
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
|
|
146
|
+
const needsLegacyMigration = "ai_tool" in rawConfig && !("platform" in rawConfig);
|
|
100
147
|
const config = migrateConfig(rawConfig);
|
|
101
|
-
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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,
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -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
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -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
|
-
|
|
55
|
+
tools_consolidated?: boolean;
|
|
56
|
+
[key: string]: string | Record<string, string> | boolean | undefined;
|
|
48
57
|
};
|
|
49
58
|
}
|
|
50
59
|
export interface LegacyDroidConfig {
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,UAAU,gBAAgB;IAC1B,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAID,QAAA,MAAM,WAAW,iBAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,CAAC;AACjC,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC;AAE9B;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAGD,oBAAY,aAAa;IACvB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAGD,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,MAAM,CAAC;AAEtD,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
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
|
|
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
|
|