@jayjiang/byoao 0.2.2 → 0.3.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/dist/__tests__/plugin-config.test.js +130 -0
- package/dist/__tests__/plugin-config.test.js.map +1 -0
- package/dist/cli/cli-program.js +63 -13
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/installer.js +46 -31
- package/dist/cli/installer.js.map +1 -1
- package/dist/cli/ui.js +23 -0
- package/dist/cli/ui.js.map +1 -1
- package/dist/hooks/__tests__/idle-suggestions.test.js +15 -0
- package/dist/hooks/__tests__/idle-suggestions.test.js.map +1 -0
- package/dist/plugin-config.js +9 -0
- package/dist/plugin-config.js.map +1 -1
- package/dist/tools/init-vault.js +38 -0
- package/dist/tools/init-vault.js.map +1 -1
- package/dist/vault/__tests__/create.test.js +125 -0
- package/dist/vault/__tests__/create.test.js.map +1 -0
- package/dist/vault/__tests__/doctor.test.js +88 -0
- package/dist/vault/__tests__/doctor.test.js.map +1 -0
- package/dist/vault/__tests__/glossary.test.js +57 -0
- package/dist/vault/__tests__/glossary.test.js.map +1 -0
- package/dist/vault/__tests__/mcp.test.js +88 -0
- package/dist/vault/__tests__/mcp.test.js.map +1 -0
- package/dist/vault/__tests__/member.test.js +87 -0
- package/dist/vault/__tests__/member.test.js.map +1 -0
- package/dist/vault/__tests__/obsidian-plugins.test.js +366 -0
- package/dist/vault/__tests__/obsidian-plugins.test.js.map +1 -0
- package/dist/vault/__tests__/status.test.js +134 -0
- package/dist/vault/__tests__/status.test.js.map +1 -0
- package/dist/vault/__tests__/template.test.js +33 -0
- package/dist/vault/__tests__/template.test.js.map +1 -0
- package/dist/vault/create.js +121 -18
- package/dist/vault/create.js.map +1 -1
- package/dist/vault/mcp.js +54 -0
- package/dist/vault/mcp.js.map +1 -0
- package/dist/vault/obsidian-plugins.js +209 -0
- package/dist/vault/obsidian-plugins.js.map +1 -0
- package/package.json +7 -2
- package/src/assets/presets/pm-tpm/preset.json +25 -1
package/dist/vault/create.js
CHANGED
|
@@ -2,6 +2,15 @@ import fs from "fs-extra";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { renderTemplate, today } from "./template.js";
|
|
4
4
|
import { loadPreset, getCommonDir } from "./preset.js";
|
|
5
|
+
import { configureMcp } from "./mcp.js";
|
|
6
|
+
import { configureObsidianPlugins } from "./obsidian-plugins.js";
|
|
7
|
+
function countWikilinks(content) {
|
|
8
|
+
const stripped = content
|
|
9
|
+
.replace(/```[\s\S]*?```/g, "")
|
|
10
|
+
.replace(/`[^`]+`/g, "");
|
|
11
|
+
const matches = stripped.match(/\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g);
|
|
12
|
+
return matches ? matches.length : 0;
|
|
13
|
+
}
|
|
5
14
|
// Common directories shared by all presets
|
|
6
15
|
const COMMON_DIRECTORIES = [
|
|
7
16
|
"Inbox",
|
|
@@ -20,7 +29,6 @@ export async function createVault(config) {
|
|
|
20
29
|
const commonDir = getCommonDir();
|
|
21
30
|
const presetDir = path.join(presetsDir, presetName);
|
|
22
31
|
let filesCreated = 0;
|
|
23
|
-
let wikilinksCreated = 0;
|
|
24
32
|
// Merge directories: common + preset-specific
|
|
25
33
|
const allDirectories = [...COMMON_DIRECTORIES, ...presetConfig.directories];
|
|
26
34
|
// 1. Create directories
|
|
@@ -70,13 +78,19 @@ export async function createVault(config) {
|
|
|
70
78
|
date: today(),
|
|
71
79
|
GLOSSARY_ENTRIES: glossaryRows,
|
|
72
80
|
});
|
|
73
|
-
|
|
74
|
-
|
|
81
|
+
const glossaryPath = path.join(vaultPath, "Knowledge/Glossary.md");
|
|
82
|
+
if (!(await fs.pathExists(glossaryPath))) {
|
|
83
|
+
await fs.writeFile(glossaryPath, glossaryContent);
|
|
84
|
+
filesCreated++;
|
|
85
|
+
}
|
|
75
86
|
// 5. Generate Start Here.md
|
|
76
87
|
const startHereTemplate = await fs.readFile(path.join(commonDir, "Start Here.md.hbs"), "utf-8");
|
|
77
88
|
const startHereContent = renderTemplate(startHereTemplate, { TEAM_NAME: teamName });
|
|
78
|
-
|
|
79
|
-
|
|
89
|
+
const startHerePath = path.join(vaultPath, "Start Here.md");
|
|
90
|
+
if (!(await fs.pathExists(startHerePath))) {
|
|
91
|
+
await fs.writeFile(startHerePath, startHereContent);
|
|
92
|
+
filesCreated++;
|
|
93
|
+
}
|
|
80
94
|
// 6. Generate AGENT.md (two-layer: common skeleton + preset section)
|
|
81
95
|
const agentSkeletonTemplate = await fs.readFile(path.join(commonDir, "AGENT.md.hbs"), "utf-8");
|
|
82
96
|
// Render preset agent-section
|
|
@@ -89,7 +103,6 @@ export async function createVault(config) {
|
|
|
89
103
|
projectsList = projects
|
|
90
104
|
.map((p) => `- [[${p.name}]] — ${p.description}`)
|
|
91
105
|
.join("\n");
|
|
92
|
-
wikilinksCreated += projects.length;
|
|
93
106
|
}
|
|
94
107
|
else {
|
|
95
108
|
projectsList = "(No projects added yet — create notes in Projects/)";
|
|
@@ -106,7 +119,6 @@ export async function createVault(config) {
|
|
|
106
119
|
if (members.length > 0) {
|
|
107
120
|
const rows = members.map((m) => `| [[${m.name}]] | ${m.role} |`).join("\n");
|
|
108
121
|
teamTable = `| Name | Role |\n|------|------|\n${rows}`;
|
|
109
|
-
wikilinksCreated += members.length;
|
|
110
122
|
}
|
|
111
123
|
else {
|
|
112
124
|
teamTable = "(No members added yet — create notes in People/)";
|
|
@@ -120,9 +132,16 @@ export async function createVault(config) {
|
|
|
120
132
|
TEAM_TABLE: teamTable,
|
|
121
133
|
TEMPLATE_LIST: templateList,
|
|
122
134
|
});
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
135
|
+
const agentMdPath = path.join(vaultPath, "AGENT.md");
|
|
136
|
+
const claudeMdPath = path.join(vaultPath, "CLAUDE.md");
|
|
137
|
+
if (!(await fs.pathExists(agentMdPath))) {
|
|
138
|
+
await fs.writeFile(agentMdPath, agentContent);
|
|
139
|
+
filesCreated++;
|
|
140
|
+
}
|
|
141
|
+
if (!(await fs.pathExists(claudeMdPath))) {
|
|
142
|
+
await fs.writeFile(claudeMdPath, agentContent);
|
|
143
|
+
filesCreated++;
|
|
144
|
+
}
|
|
126
145
|
// 7. Create people notes
|
|
127
146
|
for (const member of members) {
|
|
128
147
|
const content = `---
|
|
@@ -139,8 +158,11 @@ tags: [person]
|
|
|
139
158
|
**Role**: ${member.role}
|
|
140
159
|
**Team**: ${teamName}
|
|
141
160
|
`;
|
|
142
|
-
|
|
143
|
-
|
|
161
|
+
const memberPath = path.join(vaultPath, `People/${member.name}.md`);
|
|
162
|
+
if (!(await fs.pathExists(memberPath))) {
|
|
163
|
+
await fs.writeFile(memberPath, content);
|
|
164
|
+
filesCreated++;
|
|
165
|
+
}
|
|
144
166
|
}
|
|
145
167
|
// 8. Create project notes
|
|
146
168
|
for (const project of projects) {
|
|
@@ -160,8 +182,11 @@ tags: [project]
|
|
|
160
182
|
|
|
161
183
|
${project.description}
|
|
162
184
|
`;
|
|
163
|
-
|
|
164
|
-
|
|
185
|
+
const projectPath = path.join(vaultPath, `Projects/${project.name}.md`);
|
|
186
|
+
if (!(await fs.pathExists(projectPath))) {
|
|
187
|
+
await fs.writeFile(projectPath, content);
|
|
188
|
+
filesCreated++;
|
|
189
|
+
}
|
|
165
190
|
}
|
|
166
191
|
// 9. Create team index (always, since Start Here.md links to it)
|
|
167
192
|
{
|
|
@@ -180,7 +205,6 @@ tags: [team]
|
|
|
180
205
|
if (members.length > 0) {
|
|
181
206
|
teamIndexContent += "| Name | Role |\n|------|------|\n";
|
|
182
207
|
teamIndexContent += members.map((m) => `| [[${m.name}]] | ${m.role} |`).join("\n");
|
|
183
|
-
wikilinksCreated += members.length;
|
|
184
208
|
}
|
|
185
209
|
else {
|
|
186
210
|
teamIndexContent += "(No members added yet)";
|
|
@@ -190,14 +214,16 @@ tags: [team]
|
|
|
190
214
|
teamIndexContent += projects
|
|
191
215
|
.map((p) => `- [[${p.name}]] — ${p.description}`)
|
|
192
216
|
.join("\n");
|
|
193
|
-
wikilinksCreated += projects.length;
|
|
194
217
|
}
|
|
195
218
|
else {
|
|
196
219
|
teamIndexContent += "(No projects added yet)";
|
|
197
220
|
}
|
|
198
221
|
teamIndexContent += "\n";
|
|
199
|
-
|
|
200
|
-
|
|
222
|
+
const teamIndexPath = path.join(vaultPath, `People/${teamName} Team.md`);
|
|
223
|
+
if (!(await fs.pathExists(teamIndexPath))) {
|
|
224
|
+
await fs.writeFile(teamIndexPath, teamIndexContent);
|
|
225
|
+
filesCreated++;
|
|
226
|
+
}
|
|
201
227
|
}
|
|
202
228
|
// 10. Create .gitkeep in empty directories
|
|
203
229
|
const dirsNeedingGitkeep = [
|
|
@@ -220,11 +246,88 @@ tags: [team]
|
|
|
220
246
|
}
|
|
221
247
|
}
|
|
222
248
|
}
|
|
249
|
+
// 11. Configure vault as OpenCode project (plugin + skills + commands)
|
|
250
|
+
await configureOpenCodeProject(vaultPath);
|
|
251
|
+
// 12. Configure MCP servers in global OpenCode config
|
|
252
|
+
const mcpResult = await configureMcp(presetConfig);
|
|
253
|
+
// 12. Install Obsidian community plugins from preset
|
|
254
|
+
const pluginsResult = await configureObsidianPlugins(vaultPath, presetConfig);
|
|
255
|
+
// 13. Count wikilinks from all generated markdown files
|
|
256
|
+
let wikilinksCreated = 0;
|
|
257
|
+
const entries = await fs.readdir(vaultPath, { recursive: true });
|
|
258
|
+
for (const entry of entries) {
|
|
259
|
+
const entryStr = String(entry);
|
|
260
|
+
if (entryStr.endsWith(".md") && !entryStr.startsWith(".obsidian")) {
|
|
261
|
+
const content = await fs.readFile(path.join(vaultPath, entryStr), "utf-8");
|
|
262
|
+
wikilinksCreated += countWikilinks(content);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
223
265
|
return {
|
|
224
266
|
vaultPath,
|
|
225
267
|
filesCreated,
|
|
226
268
|
wikilinksCreated,
|
|
227
269
|
directories: allDirectories,
|
|
270
|
+
mcpResult,
|
|
271
|
+
pluginsResult,
|
|
228
272
|
};
|
|
229
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
* Configure the vault directory as an OpenCode project.
|
|
276
|
+
* Creates .opencode.json with BYOAO plugin registered,
|
|
277
|
+
* and copies skills + commands so BYOAO tools work when
|
|
278
|
+
* OpenCode is launched from the vault (including via Agent Client).
|
|
279
|
+
*/
|
|
280
|
+
async function configureOpenCodeProject(vaultPath) {
|
|
281
|
+
// 1. Write .opencode.json with BYOAO plugin
|
|
282
|
+
const configPath = path.join(vaultPath, ".opencode.json");
|
|
283
|
+
let config = {};
|
|
284
|
+
if (await fs.pathExists(configPath)) {
|
|
285
|
+
try {
|
|
286
|
+
config = await fs.readJson(configPath);
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
// Invalid JSON — start fresh
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
const plugins = config.plugin || [];
|
|
293
|
+
if (!plugins.includes("byoao")) {
|
|
294
|
+
plugins.push("byoao");
|
|
295
|
+
config.plugin = plugins;
|
|
296
|
+
}
|
|
297
|
+
await fs.writeJson(configPath, config, { spaces: 2 });
|
|
298
|
+
// 2. Copy Obsidian Skills
|
|
299
|
+
const assetsDir = resolveAssetsDir();
|
|
300
|
+
const obsidianSkillsSrc = path.join(assetsDir, "obsidian-skills");
|
|
301
|
+
const skillsDest = path.join(vaultPath, ".opencode", "skills");
|
|
302
|
+
if (await fs.pathExists(obsidianSkillsSrc)) {
|
|
303
|
+
await fs.ensureDir(skillsDest);
|
|
304
|
+
const files = await fs.readdir(obsidianSkillsSrc);
|
|
305
|
+
for (const file of files) {
|
|
306
|
+
if (file.endsWith(".md")) {
|
|
307
|
+
await fs.copy(path.join(obsidianSkillsSrc, file), path.join(skillsDest, file), { overwrite: true });
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// 3. Copy BYOAO commands
|
|
312
|
+
const byoaoSkillsSrc = path.join(assetsDir, "..", "skills");
|
|
313
|
+
const commandsDest = path.join(vaultPath, ".opencode", "commands");
|
|
314
|
+
if (await fs.pathExists(byoaoSkillsSrc)) {
|
|
315
|
+
await fs.ensureDir(commandsDest);
|
|
316
|
+
const files = await fs.readdir(byoaoSkillsSrc);
|
|
317
|
+
for (const file of files) {
|
|
318
|
+
if (file.endsWith(".md")) {
|
|
319
|
+
await fs.copy(path.join(byoaoSkillsSrc, file), path.join(commandsDest, file), { overwrite: true });
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
function resolveAssetsDir() {
|
|
325
|
+
const srcAssets = path.resolve(import.meta.dirname, "..", "assets");
|
|
326
|
+
const distAssets = path.resolve(import.meta.dirname, "..", "..", "src", "assets");
|
|
327
|
+
if (fs.existsSync(srcAssets))
|
|
328
|
+
return srcAssets;
|
|
329
|
+
if (fs.existsSync(distAssets))
|
|
330
|
+
return distAssets;
|
|
331
|
+
return srcAssets;
|
|
332
|
+
}
|
|
230
333
|
//# sourceMappingURL=create.js.map
|
package/dist/vault/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/vault/create.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/vault/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
const OPENCODE_CONFIG_PATHS = [
|
|
5
|
+
path.join(os.homedir(), ".config/opencode/opencode.json"),
|
|
6
|
+
path.join(os.homedir(), ".config/opencode/.opencode.json"),
|
|
7
|
+
];
|
|
8
|
+
function findOpencodeConfig() {
|
|
9
|
+
for (const p of OPENCODE_CONFIG_PATHS) {
|
|
10
|
+
if (fs.existsSync(p))
|
|
11
|
+
return p;
|
|
12
|
+
}
|
|
13
|
+
// Default to primary path if none exists yet
|
|
14
|
+
return OPENCODE_CONFIG_PATHS[0];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Merge a preset's MCP servers into the global OpenCode config.
|
|
18
|
+
* Preserves existing entries — only adds servers not already configured.
|
|
19
|
+
*/
|
|
20
|
+
export async function configureMcp(presetConfig) {
|
|
21
|
+
const mcpServers = presetConfig.mcpServers;
|
|
22
|
+
if (!mcpServers || Object.keys(mcpServers).length === 0) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const configPath = findOpencodeConfig();
|
|
26
|
+
await fs.ensureDir(path.dirname(configPath));
|
|
27
|
+
let config = {};
|
|
28
|
+
if (await fs.pathExists(configPath)) {
|
|
29
|
+
try {
|
|
30
|
+
config = await fs.readJson(configPath);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Invalid JSON — start fresh
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const existingMcp = config.mcp || {};
|
|
37
|
+
const serversAdded = [];
|
|
38
|
+
const serversSkipped = [];
|
|
39
|
+
for (const [name, serverConfig] of Object.entries(mcpServers)) {
|
|
40
|
+
if (existingMcp[name]) {
|
|
41
|
+
serversSkipped.push(name);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
existingMcp[name] = serverConfig;
|
|
45
|
+
serversAdded.push(name);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (serversAdded.length > 0) {
|
|
49
|
+
config.mcp = existingMcp;
|
|
50
|
+
await fs.writeJson(configPath, config, { spaces: 2 });
|
|
51
|
+
}
|
|
52
|
+
return { configPath, serversAdded, serversSkipped };
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/vault/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,MAAM,qBAAqB,GAAG;IAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gCAAgC,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,iCAAiC,CAAC;CAC3D,CAAC;AAEF,SAAS,kBAAkB;IACzB,KAAK,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC;QACtC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,6CAA6C;IAC7C,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAQD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,YAA0B;IAE1B,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;IAC3C,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IACxC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAE7C,IAAI,MAAM,GAA4B,EAAE,CAAC;IACzC,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAI,MAAM,CAAC,GAA+B,IAAI,EAAE,CAAC;IAClE,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,KAAK,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC;QACzB,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { execSync } from "node:child_process";
|
|
4
|
+
const BRAT_PLUGIN_ID = "obsidian42-brat";
|
|
5
|
+
const BRAT_REPO = "TfTHacker/obsidian42-brat";
|
|
6
|
+
const REQUIRED_ASSETS = ["main.js", "manifest.json"];
|
|
7
|
+
const OPTIONAL_ASSETS = ["styles.css"];
|
|
8
|
+
const FETCH_TIMEOUT_MS = 30_000;
|
|
9
|
+
function getHeaders() {
|
|
10
|
+
const headers = {
|
|
11
|
+
Accept: "application/vnd.github.v3+json",
|
|
12
|
+
};
|
|
13
|
+
const token = process.env.GITHUB_TOKEN;
|
|
14
|
+
if (token) {
|
|
15
|
+
headers.Authorization = `token ${token}`;
|
|
16
|
+
}
|
|
17
|
+
return headers;
|
|
18
|
+
}
|
|
19
|
+
function getReleaseUrl(repo, version) {
|
|
20
|
+
if (version === "latest") {
|
|
21
|
+
return `https://api.github.com/repos/${repo}/releases/latest`;
|
|
22
|
+
}
|
|
23
|
+
return `https://api.github.com/repos/${repo}/releases/tags/${version}`;
|
|
24
|
+
}
|
|
25
|
+
async function fetchWithTimeout(url, options = {}) {
|
|
26
|
+
const controller = new AbortController();
|
|
27
|
+
const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
28
|
+
try {
|
|
29
|
+
return await fetch(url, { ...options, signal: controller.signal });
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
clearTimeout(timeout);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolve command names to absolute paths in plugin config.
|
|
37
|
+
* Obsidian GUI apps don't inherit terminal PATH, so commands like "opencode"
|
|
38
|
+
* must be resolved to their full path (e.g., "/Users/jay/.opencode/bin/opencode").
|
|
39
|
+
*/
|
|
40
|
+
function resolveCommandPaths(config) {
|
|
41
|
+
const result = { ...config };
|
|
42
|
+
// Resolve command in customAgents array
|
|
43
|
+
if (Array.isArray(result.customAgents)) {
|
|
44
|
+
result.customAgents = result.customAgents.map((agent) => {
|
|
45
|
+
if (typeof agent.command === "string" && !agent.command.startsWith("/")) {
|
|
46
|
+
try {
|
|
47
|
+
const resolved = execSync(`which ${agent.command}`, { encoding: "utf-8" }).trim();
|
|
48
|
+
if (resolved) {
|
|
49
|
+
return { ...agent, command: resolved };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Command not found — leave as-is
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return agent;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Download a plugin from GitHub Releases into .obsidian/plugins/<id>/.
|
|
63
|
+
* Caller must check if plugin already exists before calling.
|
|
64
|
+
* Throws on failure.
|
|
65
|
+
*/
|
|
66
|
+
async function downloadPlugin(pluginId, repo, version, pluginsDir, config) {
|
|
67
|
+
const headers = getHeaders();
|
|
68
|
+
// 1. Fetch release metadata
|
|
69
|
+
const releaseUrl = getReleaseUrl(repo, version);
|
|
70
|
+
const releaseRes = await fetchWithTimeout(releaseUrl, { headers });
|
|
71
|
+
if (!releaseRes.ok) {
|
|
72
|
+
const msg = releaseRes.status === 403
|
|
73
|
+
? "GitHub API rate limited — try setting GITHUB_TOKEN env var"
|
|
74
|
+
: `GitHub API error: ${releaseRes.status} ${releaseRes.statusText}`;
|
|
75
|
+
throw new Error(msg);
|
|
76
|
+
}
|
|
77
|
+
const release = (await releaseRes.json());
|
|
78
|
+
// 2. Validate required assets
|
|
79
|
+
const assetMap = new Map(release.assets.map((a) => [a.name, a.browser_download_url]));
|
|
80
|
+
const missingRequired = REQUIRED_ASSETS.filter((name) => !assetMap.has(name));
|
|
81
|
+
if (missingRequired.length > 0) {
|
|
82
|
+
throw new Error(`Plugin release missing required assets: ${missingRequired.join(", ")}`);
|
|
83
|
+
}
|
|
84
|
+
// 3. Download assets
|
|
85
|
+
const pluginDir = path.join(pluginsDir, pluginId);
|
|
86
|
+
await fs.ensureDir(pluginDir);
|
|
87
|
+
const allAssets = [...REQUIRED_ASSETS, ...OPTIONAL_ASSETS];
|
|
88
|
+
for (const assetName of allAssets) {
|
|
89
|
+
const url = assetMap.get(assetName);
|
|
90
|
+
if (!url)
|
|
91
|
+
continue;
|
|
92
|
+
const assetRes = await fetchWithTimeout(url, { headers });
|
|
93
|
+
if (assetRes.ok) {
|
|
94
|
+
const content = await assetRes.text();
|
|
95
|
+
await fs.writeFile(path.join(pluginDir, assetName), content);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// 4. Write plugin config if provided, resolving command paths to absolute
|
|
99
|
+
if (config) {
|
|
100
|
+
const resolved = resolveCommandPaths(config);
|
|
101
|
+
await fs.writeJson(path.join(pluginDir, "data.json"), resolved, { spaces: 2 });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Download and configure Obsidian community plugins from a preset.
|
|
106
|
+
* Three-step install: BRAT → plugins → BRAT registration.
|
|
107
|
+
*/
|
|
108
|
+
export async function configureObsidianPlugins(vaultPath, presetConfig) {
|
|
109
|
+
const obsidianPlugins = presetConfig.obsidianPlugins;
|
|
110
|
+
if (!obsidianPlugins || Object.keys(obsidianPlugins).length === 0) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const pluginsDir = path.join(vaultPath, ".obsidian", "plugins");
|
|
114
|
+
await fs.ensureDir(pluginsDir);
|
|
115
|
+
let bratNewlyInstalled = false;
|
|
116
|
+
const pluginsAdded = [];
|
|
117
|
+
const pluginsSkipped = [];
|
|
118
|
+
const errors = [];
|
|
119
|
+
// Step 1: Install BRAT if not present
|
|
120
|
+
const bratMainJs = path.join(pluginsDir, BRAT_PLUGIN_ID, "main.js");
|
|
121
|
+
if (!(await fs.pathExists(bratMainJs))) {
|
|
122
|
+
try {
|
|
123
|
+
await downloadPlugin(BRAT_PLUGIN_ID, BRAT_REPO, "latest", pluginsDir);
|
|
124
|
+
bratNewlyInstalled = true;
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
errors.push({
|
|
128
|
+
pluginId: BRAT_PLUGIN_ID,
|
|
129
|
+
error: err instanceof Error ? err.message : String(err),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Step 2: Install each preset plugin
|
|
134
|
+
for (const [pluginId, pluginDef] of Object.entries(obsidianPlugins)) {
|
|
135
|
+
const pluginMainJs = path.join(pluginsDir, pluginId, "main.js");
|
|
136
|
+
if (await fs.pathExists(pluginMainJs)) {
|
|
137
|
+
pluginsSkipped.push(pluginId);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
await downloadPlugin(pluginId, pluginDef.repo, pluginDef.version ?? "latest", pluginsDir, pluginDef.config);
|
|
142
|
+
pluginsAdded.push(pluginId);
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
errors.push({
|
|
146
|
+
pluginId,
|
|
147
|
+
error: err instanceof Error ? err.message : String(err),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Update community-plugins.json
|
|
152
|
+
const communityPluginsPath = path.join(vaultPath, ".obsidian", "community-plugins.json");
|
|
153
|
+
let communityPlugins = [];
|
|
154
|
+
if (await fs.pathExists(communityPluginsPath)) {
|
|
155
|
+
try {
|
|
156
|
+
communityPlugins = await fs.readJson(communityPluginsPath);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// Invalid JSON — start fresh
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Always ensure BRAT is in community-plugins.json when plugins are declared
|
|
163
|
+
// (handles edge case where BRAT dir exists but was removed from JSON)
|
|
164
|
+
const bratDirExists = await fs.pathExists(path.join(pluginsDir, BRAT_PLUGIN_ID));
|
|
165
|
+
const allPluginIds = [
|
|
166
|
+
...(bratNewlyInstalled || bratDirExists ? [BRAT_PLUGIN_ID] : []),
|
|
167
|
+
...pluginsAdded,
|
|
168
|
+
];
|
|
169
|
+
for (const id of allPluginIds) {
|
|
170
|
+
if (!communityPlugins.includes(id)) {
|
|
171
|
+
communityPlugins.push(id);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (allPluginIds.length > 0) {
|
|
175
|
+
await fs.writeJson(communityPluginsPath, communityPlugins, { spaces: 2 });
|
|
176
|
+
}
|
|
177
|
+
// Step 3: Register plugins in BRAT config
|
|
178
|
+
const bratDataPath = path.join(pluginsDir, BRAT_PLUGIN_ID, "data.json");
|
|
179
|
+
if (pluginsAdded.length > 0 && await fs.pathExists(path.join(pluginsDir, BRAT_PLUGIN_ID))) {
|
|
180
|
+
let bratData = {
|
|
181
|
+
pluginList: [],
|
|
182
|
+
pluginSubListFrozenVersion: [],
|
|
183
|
+
themesList: [],
|
|
184
|
+
updateAtStartup: true,
|
|
185
|
+
updateThemesAtStartup: false,
|
|
186
|
+
ribbonIconEnabled: true,
|
|
187
|
+
loggingEnabled: false,
|
|
188
|
+
};
|
|
189
|
+
if (await fs.pathExists(bratDataPath)) {
|
|
190
|
+
try {
|
|
191
|
+
bratData = { ...bratData, ...(await fs.readJson(bratDataPath)) };
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// Invalid JSON — use defaults
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const pluginList = bratData.pluginList || [];
|
|
198
|
+
for (const pluginId of pluginsAdded) {
|
|
199
|
+
const repo = obsidianPlugins[pluginId]?.repo;
|
|
200
|
+
if (repo && !pluginList.includes(repo)) {
|
|
201
|
+
pluginList.push(repo);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
bratData.pluginList = pluginList;
|
|
205
|
+
await fs.writeJson(bratDataPath, bratData, { spaces: 2 });
|
|
206
|
+
}
|
|
207
|
+
return { bratNewlyInstalled, pluginsAdded, pluginsSkipped, errors };
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=obsidian-plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidian-plugins.js","sourceRoot":"","sources":["../../src/vault/obsidian-plugins.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jayjiang/byoao",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Build Your Own AI OS — Obsidian + AI Agent",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=18.0.0"
|
|
8
|
+
},
|
|
6
9
|
"main": "dist/index.js",
|
|
7
10
|
"types": "dist/index.d.ts",
|
|
8
11
|
"bin": {
|
|
@@ -11,6 +14,7 @@
|
|
|
11
14
|
"scripts": {
|
|
12
15
|
"build": "tsc",
|
|
13
16
|
"dev": "node --import tsx src/cli/cli-program.ts",
|
|
17
|
+
"test": "vitest run",
|
|
14
18
|
"typecheck": "tsc --noEmit",
|
|
15
19
|
"prepublishOnly": "npm run build"
|
|
16
20
|
},
|
|
@@ -53,6 +57,7 @@
|
|
|
53
57
|
"@types/inquirer": "^9.0.0",
|
|
54
58
|
"@types/node": "^20.0.0",
|
|
55
59
|
"tsx": "^4.21.0",
|
|
56
|
-
"typescript": "^5.4.0"
|
|
60
|
+
"typescript": "^5.4.0",
|
|
61
|
+
"vitest": "^4.1.0"
|
|
57
62
|
}
|
|
58
63
|
}
|
|
@@ -8,5 +8,29 @@
|
|
|
8
8
|
"project": ["jira", "stakeholders", "priority"],
|
|
9
9
|
"sprint": ["sprint-dates", "jira-board"]
|
|
10
10
|
},
|
|
11
|
-
"templates": ["Feature Doc.md", "Sprint Handoff.md"]
|
|
11
|
+
"templates": ["Feature Doc.md", "Sprint Handoff.md"],
|
|
12
|
+
"mcpServers": {
|
|
13
|
+
"atlassian": {
|
|
14
|
+
"type": "remote",
|
|
15
|
+
"url": "https://mcp.atlassian.com/v1/sse"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"obsidianPlugins": {
|
|
19
|
+
"agent-client": {
|
|
20
|
+
"repo": "RAIT-09/obsidian-agent-client",
|
|
21
|
+
"version": "latest",
|
|
22
|
+
"config": {
|
|
23
|
+
"defaultAgentId": "opencode-acp",
|
|
24
|
+
"customAgents": [
|
|
25
|
+
{
|
|
26
|
+
"id": "opencode-acp",
|
|
27
|
+
"displayName": "OpenCode",
|
|
28
|
+
"command": "opencode",
|
|
29
|
+
"args": ["acp"],
|
|
30
|
+
"env": []
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
12
36
|
}
|