@jayjiang/byoao 0.2.3 → 0.3.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.
- 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 +198 -11
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/installer.js +39 -30
- 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/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin-config.js +11 -0
- package/dist/plugin-config.js.map +1 -1
- package/dist/tools/init-vault.js +56 -0
- package/dist/tools/init-vault.js.map +1 -1
- package/dist/tools/switch-provider.js +34 -0
- package/dist/tools/switch-provider.js.map +1 -0
- package/dist/vault/__tests__/create.test.js +130 -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__/provider.test.js +82 -0
- package/dist/vault/__tests__/provider.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 +128 -18
- package/dist/vault/create.js.map +1 -1
- package/dist/vault/mcp.js +31 -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/dist/vault/opencode-config.js +36 -0
- package/dist/vault/opencode-config.js.map +1 -0
- package/dist/vault/provider.js +67 -0
- package/dist/vault/provider.js.map +1 -0
- package/package.json +7 -2
- package/src/assets/presets/pm-tpm/preset.json +25 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
let tmpDir;
|
|
6
|
+
let configPath;
|
|
7
|
+
beforeEach(async () => {
|
|
8
|
+
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "byoao-provider-"));
|
|
9
|
+
configPath = path.join(tmpDir, ".config/opencode/opencode.json");
|
|
10
|
+
await fs.ensureDir(path.dirname(configPath));
|
|
11
|
+
vi.spyOn(os, "homedir").mockReturnValue(tmpDir);
|
|
12
|
+
});
|
|
13
|
+
afterEach(async () => {
|
|
14
|
+
vi.restoreAllMocks();
|
|
15
|
+
vi.resetModules();
|
|
16
|
+
await fs.remove(tmpDir);
|
|
17
|
+
});
|
|
18
|
+
async function loadConfigureProvider() {
|
|
19
|
+
const mod = await import("../provider.js");
|
|
20
|
+
return mod.configureProvider;
|
|
21
|
+
}
|
|
22
|
+
describe("configureProvider", () => {
|
|
23
|
+
it("returns no-op result for copilot (no config changes needed)", async () => {
|
|
24
|
+
const configureProvider = await loadConfigureProvider();
|
|
25
|
+
const result = await configureProvider("copilot");
|
|
26
|
+
expect(result).not.toBeNull();
|
|
27
|
+
expect(result.provider).toBe("copilot");
|
|
28
|
+
expect(result.pluginAdded).toBe(false);
|
|
29
|
+
expect(result.projectIdSet).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
it("adds gemini plugin and projectId to empty config", async () => {
|
|
32
|
+
const configureProvider = await loadConfigureProvider();
|
|
33
|
+
const result = await configureProvider("gemini", "wonder-sandbox");
|
|
34
|
+
expect(result).not.toBeNull();
|
|
35
|
+
expect(result.provider).toBe("gemini");
|
|
36
|
+
expect(result.pluginAdded).toBe(true);
|
|
37
|
+
expect(result.projectIdSet).toBe(true);
|
|
38
|
+
const written = await fs.readJson(configPath);
|
|
39
|
+
expect(written.plugin).toContain("opencode-gemini-auth");
|
|
40
|
+
expect(written.provider.google.options.projectId).toBe("wonder-sandbox");
|
|
41
|
+
});
|
|
42
|
+
it("skips gemini plugin if already present (idempotent)", async () => {
|
|
43
|
+
await fs.writeJson(configPath, {
|
|
44
|
+
plugin: ["opencode-gemini-auth"],
|
|
45
|
+
provider: { google: { options: { projectId: "existing-project" } } },
|
|
46
|
+
});
|
|
47
|
+
const configureProvider = await loadConfigureProvider();
|
|
48
|
+
const result = await configureProvider("gemini", "new-project");
|
|
49
|
+
expect(result.pluginSkipped).toBe(true);
|
|
50
|
+
expect(result.projectIdSkipped).toBe(true);
|
|
51
|
+
// Original projectId preserved
|
|
52
|
+
const written = await fs.readJson(configPath);
|
|
53
|
+
expect(written.provider.google.options.projectId).toBe("existing-project");
|
|
54
|
+
});
|
|
55
|
+
it("preserves other config fields when writing", async () => {
|
|
56
|
+
await fs.writeJson(configPath, {
|
|
57
|
+
theme: "dark",
|
|
58
|
+
mcp: { atlassian: { type: "remote", url: "https://example.com" } },
|
|
59
|
+
});
|
|
60
|
+
const configureProvider = await loadConfigureProvider();
|
|
61
|
+
await configureProvider("gemini", "wonder-sandbox");
|
|
62
|
+
const written = await fs.readJson(configPath);
|
|
63
|
+
expect(written.theme).toBe("dark");
|
|
64
|
+
expect(written.mcp.atlassian.url).toBe("https://example.com");
|
|
65
|
+
expect(written.provider.google.options.projectId).toBe("wonder-sandbox");
|
|
66
|
+
});
|
|
67
|
+
it("throws if gemini selected without projectId", async () => {
|
|
68
|
+
const configureProvider = await loadConfigureProvider();
|
|
69
|
+
await expect(configureProvider("gemini")).rejects.toThrow("GCP Project ID is required");
|
|
70
|
+
});
|
|
71
|
+
it("adds gemini plugin to existing plugin array", async () => {
|
|
72
|
+
await fs.writeJson(configPath, {
|
|
73
|
+
plugin: ["superpowers@git+https://github.com/obra/superpowers.git"],
|
|
74
|
+
});
|
|
75
|
+
const configureProvider = await loadConfigureProvider();
|
|
76
|
+
await configureProvider("gemini", "wonder-sandbox");
|
|
77
|
+
const written = await fs.readJson(configPath);
|
|
78
|
+
expect(written.plugin).toContain("opencode-gemini-auth");
|
|
79
|
+
expect(written.plugin).toContain("superpowers@git+https://github.com/obra/superpowers.git");
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=provider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.test.js","sourceRoot":"","sources":["../../../src/vault/__tests__/provider.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import { getVaultStatus, formatVaultStatus } from "../status.js";
|
|
6
|
+
let tmpDir;
|
|
7
|
+
beforeEach(async () => {
|
|
8
|
+
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "byoao-status-"));
|
|
9
|
+
});
|
|
10
|
+
afterEach(async () => {
|
|
11
|
+
await fs.remove(tmpDir);
|
|
12
|
+
});
|
|
13
|
+
describe("getVaultStatus", () => {
|
|
14
|
+
it("returns exists: false for non-existent path", async () => {
|
|
15
|
+
const status = await getVaultStatus("/nonexistent/path");
|
|
16
|
+
expect(status.exists).toBe(false);
|
|
17
|
+
expect(status.noteCount).toBe(0);
|
|
18
|
+
});
|
|
19
|
+
it("counts markdown files", async () => {
|
|
20
|
+
await fs.ensureDir(path.join(tmpDir, "People"));
|
|
21
|
+
await fs.writeFile(path.join(tmpDir, "note1.md"), "# Note 1");
|
|
22
|
+
await fs.writeFile(path.join(tmpDir, "People/alice.md"), "# Alice");
|
|
23
|
+
await fs.writeFile(path.join(tmpDir, "readme.txt"), "not markdown");
|
|
24
|
+
const status = await getVaultStatus(tmpDir);
|
|
25
|
+
expect(status.noteCount).toBe(2);
|
|
26
|
+
});
|
|
27
|
+
it("counts wikilinks and detects broken ones", async () => {
|
|
28
|
+
await fs.ensureDir(path.join(tmpDir, "People"));
|
|
29
|
+
await fs.writeFile(path.join(tmpDir, "note1.md"), "See [[Alice]] and [[Bob]]");
|
|
30
|
+
await fs.writeFile(path.join(tmpDir, "People/Alice.md"), "# Alice");
|
|
31
|
+
const status = await getVaultStatus(tmpDir);
|
|
32
|
+
expect(status.wikilinkCount).toBe(2);
|
|
33
|
+
expect(status.brokenLinks).toContain("Bob");
|
|
34
|
+
expect(status.brokenLinks).not.toContain("Alice");
|
|
35
|
+
});
|
|
36
|
+
it("extracts aliased wikilinks", async () => {
|
|
37
|
+
await fs.writeFile(path.join(tmpDir, "note.md"), "See [[Alice|team lead]]");
|
|
38
|
+
const status = await getVaultStatus(tmpDir);
|
|
39
|
+
expect(status.wikilinkCount).toBe(1);
|
|
40
|
+
expect(status.brokenLinks).toContain("Alice");
|
|
41
|
+
});
|
|
42
|
+
it("ignores wikilinks inside code blocks", async () => {
|
|
43
|
+
const content = [
|
|
44
|
+
"Real link: [[Alice]]",
|
|
45
|
+
"```",
|
|
46
|
+
"[[InCodeBlock]]",
|
|
47
|
+
"```",
|
|
48
|
+
"Inline: `[[InlineCode]]`",
|
|
49
|
+
].join("\n");
|
|
50
|
+
await fs.writeFile(path.join(tmpDir, "note.md"), content);
|
|
51
|
+
const status = await getVaultStatus(tmpDir);
|
|
52
|
+
expect(status.wikilinkCount).toBe(1);
|
|
53
|
+
expect(status.brokenLinks).toEqual(["Alice"]);
|
|
54
|
+
});
|
|
55
|
+
it("reports directory breakdown for known dirs", async () => {
|
|
56
|
+
await fs.ensureDir(path.join(tmpDir, "People"));
|
|
57
|
+
await fs.ensureDir(path.join(tmpDir, "Projects"));
|
|
58
|
+
await fs.writeFile(path.join(tmpDir, "People/a.md"), "# A");
|
|
59
|
+
await fs.writeFile(path.join(tmpDir, "People/b.md"), "# B");
|
|
60
|
+
await fs.writeFile(path.join(tmpDir, "Projects/x.md"), "# X");
|
|
61
|
+
const status = await getVaultStatus(tmpDir);
|
|
62
|
+
expect(status.directories["People"]).toBe(2);
|
|
63
|
+
expect(status.directories["Projects"]).toBe(1);
|
|
64
|
+
});
|
|
65
|
+
it("detects config files", async () => {
|
|
66
|
+
await fs.ensureDir(path.join(tmpDir, ".obsidian"));
|
|
67
|
+
await fs.ensureDir(path.join(tmpDir, "Knowledge"));
|
|
68
|
+
await fs.writeFile(path.join(tmpDir, "AGENT.md"), "# Agent");
|
|
69
|
+
await fs.writeFile(path.join(tmpDir, "Knowledge/Glossary.md"), "# Glossary");
|
|
70
|
+
const status = await getVaultStatus(tmpDir);
|
|
71
|
+
expect(status.hasObsidianConfig).toBe(true);
|
|
72
|
+
expect(status.hasAgentMd).toBe(true);
|
|
73
|
+
expect(status.hasGlossary).toBe(true);
|
|
74
|
+
});
|
|
75
|
+
it("reports false for missing config files", async () => {
|
|
76
|
+
await fs.writeFile(path.join(tmpDir, "note.md"), "# Note");
|
|
77
|
+
const status = await getVaultStatus(tmpDir);
|
|
78
|
+
expect(status.hasObsidianConfig).toBe(false);
|
|
79
|
+
expect(status.hasAgentMd).toBe(false);
|
|
80
|
+
expect(status.hasGlossary).toBe(false);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
describe("formatVaultStatus", () => {
|
|
84
|
+
it("formats non-existent vault", () => {
|
|
85
|
+
const status = {
|
|
86
|
+
exists: false,
|
|
87
|
+
vaultPath: "/fake/path",
|
|
88
|
+
noteCount: 0,
|
|
89
|
+
wikilinkCount: 0,
|
|
90
|
+
brokenLinks: [],
|
|
91
|
+
directories: {},
|
|
92
|
+
hasObsidianConfig: false,
|
|
93
|
+
hasAgentMd: false,
|
|
94
|
+
hasGlossary: false,
|
|
95
|
+
};
|
|
96
|
+
expect(formatVaultStatus(status)).toContain("not found");
|
|
97
|
+
});
|
|
98
|
+
it("formats existing vault with stats", () => {
|
|
99
|
+
const status = {
|
|
100
|
+
exists: true,
|
|
101
|
+
vaultPath: "/my/vault",
|
|
102
|
+
noteCount: 10,
|
|
103
|
+
wikilinkCount: 25,
|
|
104
|
+
brokenLinks: [],
|
|
105
|
+
directories: { People: 3, Projects: 2 },
|
|
106
|
+
hasObsidianConfig: true,
|
|
107
|
+
hasAgentMd: true,
|
|
108
|
+
hasGlossary: false,
|
|
109
|
+
};
|
|
110
|
+
const output = formatVaultStatus(status);
|
|
111
|
+
expect(output).toContain("Notes: 10");
|
|
112
|
+
expect(output).toContain("Wikilinks: 25");
|
|
113
|
+
expect(output).toContain("People: 3 notes");
|
|
114
|
+
expect(output).toContain("✓");
|
|
115
|
+
expect(output).toContain("No broken links");
|
|
116
|
+
});
|
|
117
|
+
it("formats broken links section", () => {
|
|
118
|
+
const status = {
|
|
119
|
+
exists: true,
|
|
120
|
+
vaultPath: "/my/vault",
|
|
121
|
+
noteCount: 5,
|
|
122
|
+
wikilinkCount: 10,
|
|
123
|
+
brokenLinks: ["Missing1", "Missing2"],
|
|
124
|
+
directories: {},
|
|
125
|
+
hasObsidianConfig: false,
|
|
126
|
+
hasAgentMd: false,
|
|
127
|
+
hasGlossary: false,
|
|
128
|
+
};
|
|
129
|
+
const output = formatVaultStatus(status);
|
|
130
|
+
expect(output).toContain("Broken links (2)");
|
|
131
|
+
expect(output).toContain("[[Missing1]]");
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=status.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.test.js","sourceRoot":"","sources":["../../../src/vault/__tests__/status.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { renderTemplate, today } from "../template.js";
|
|
3
|
+
describe("renderTemplate", () => {
|
|
4
|
+
it("renders simple variables", () => {
|
|
5
|
+
expect(renderTemplate("Hello {{name}}", { name: "World" })).toBe("Hello World");
|
|
6
|
+
});
|
|
7
|
+
it("leaves missing variables as empty string", () => {
|
|
8
|
+
expect(renderTemplate("Hello {{name}}", {})).toBe("Hello ");
|
|
9
|
+
});
|
|
10
|
+
it("renders conditionals", () => {
|
|
11
|
+
const tpl = "{{#if show}}visible{{/if}}";
|
|
12
|
+
expect(renderTemplate(tpl, { show: true })).toBe("visible");
|
|
13
|
+
expect(renderTemplate(tpl, { show: false })).toBe("");
|
|
14
|
+
});
|
|
15
|
+
it("does not escape HTML (noEscape mode)", () => {
|
|
16
|
+
expect(renderTemplate("{{val}}", { val: "<b>bold</b>" })).toBe("<b>bold</b>");
|
|
17
|
+
});
|
|
18
|
+
it("renders each blocks", () => {
|
|
19
|
+
const tpl = "{{#each items}}{{this}}\n{{/each}}";
|
|
20
|
+
expect(renderTemplate(tpl, { items: ["a", "b"] })).toBe("a\nb\n");
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe("today", () => {
|
|
24
|
+
it("returns YYYY-MM-DD format", () => {
|
|
25
|
+
const result = today();
|
|
26
|
+
expect(result).toMatch(/^\d{4}-\d{2}-\d{2}$/);
|
|
27
|
+
});
|
|
28
|
+
it("returns today's date", () => {
|
|
29
|
+
const expected = new Date().toISOString().slice(0, 10);
|
|
30
|
+
expect(today()).toBe(expected);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=template.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.test.js","sourceRoot":"","sources":["../../../src/vault/__tests__/template.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAC9D,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,GAAG,GAAG,4BAA4B,CAAC;QACzC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAC5D,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,GAAG,GAAG,oCAAoC,CAAC;QACjD,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/vault/create.js
CHANGED
|
@@ -2,6 +2,16 @@ 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
|
+
import { configureProvider } from "./provider.js";
|
|
8
|
+
function countWikilinks(content) {
|
|
9
|
+
const stripped = content
|
|
10
|
+
.replace(/```[\s\S]*?```/g, "")
|
|
11
|
+
.replace(/`[^`]+`/g, "");
|
|
12
|
+
const matches = stripped.match(/\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g);
|
|
13
|
+
return matches ? matches.length : 0;
|
|
14
|
+
}
|
|
5
15
|
// Common directories shared by all presets
|
|
6
16
|
const COMMON_DIRECTORIES = [
|
|
7
17
|
"Inbox",
|
|
@@ -20,7 +30,6 @@ export async function createVault(config) {
|
|
|
20
30
|
const commonDir = getCommonDir();
|
|
21
31
|
const presetDir = path.join(presetsDir, presetName);
|
|
22
32
|
let filesCreated = 0;
|
|
23
|
-
let wikilinksCreated = 0;
|
|
24
33
|
// Merge directories: common + preset-specific
|
|
25
34
|
const allDirectories = [...COMMON_DIRECTORIES, ...presetConfig.directories];
|
|
26
35
|
// 1. Create directories
|
|
@@ -70,13 +79,19 @@ export async function createVault(config) {
|
|
|
70
79
|
date: today(),
|
|
71
80
|
GLOSSARY_ENTRIES: glossaryRows,
|
|
72
81
|
});
|
|
73
|
-
|
|
74
|
-
|
|
82
|
+
const glossaryPath = path.join(vaultPath, "Knowledge/Glossary.md");
|
|
83
|
+
if (!(await fs.pathExists(glossaryPath))) {
|
|
84
|
+
await fs.writeFile(glossaryPath, glossaryContent);
|
|
85
|
+
filesCreated++;
|
|
86
|
+
}
|
|
75
87
|
// 5. Generate Start Here.md
|
|
76
88
|
const startHereTemplate = await fs.readFile(path.join(commonDir, "Start Here.md.hbs"), "utf-8");
|
|
77
89
|
const startHereContent = renderTemplate(startHereTemplate, { TEAM_NAME: teamName });
|
|
78
|
-
|
|
79
|
-
|
|
90
|
+
const startHerePath = path.join(vaultPath, "Start Here.md");
|
|
91
|
+
if (!(await fs.pathExists(startHerePath))) {
|
|
92
|
+
await fs.writeFile(startHerePath, startHereContent);
|
|
93
|
+
filesCreated++;
|
|
94
|
+
}
|
|
80
95
|
// 6. Generate AGENT.md (two-layer: common skeleton + preset section)
|
|
81
96
|
const agentSkeletonTemplate = await fs.readFile(path.join(commonDir, "AGENT.md.hbs"), "utf-8");
|
|
82
97
|
// Render preset agent-section
|
|
@@ -89,7 +104,6 @@ export async function createVault(config) {
|
|
|
89
104
|
projectsList = projects
|
|
90
105
|
.map((p) => `- [[${p.name}]] — ${p.description}`)
|
|
91
106
|
.join("\n");
|
|
92
|
-
wikilinksCreated += projects.length;
|
|
93
107
|
}
|
|
94
108
|
else {
|
|
95
109
|
projectsList = "(No projects added yet — create notes in Projects/)";
|
|
@@ -106,7 +120,6 @@ export async function createVault(config) {
|
|
|
106
120
|
if (members.length > 0) {
|
|
107
121
|
const rows = members.map((m) => `| [[${m.name}]] | ${m.role} |`).join("\n");
|
|
108
122
|
teamTable = `| Name | Role |\n|------|------|\n${rows}`;
|
|
109
|
-
wikilinksCreated += members.length;
|
|
110
123
|
}
|
|
111
124
|
else {
|
|
112
125
|
teamTable = "(No members added yet — create notes in People/)";
|
|
@@ -120,9 +133,16 @@ export async function createVault(config) {
|
|
|
120
133
|
TEAM_TABLE: teamTable,
|
|
121
134
|
TEMPLATE_LIST: templateList,
|
|
122
135
|
});
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
136
|
+
const agentMdPath = path.join(vaultPath, "AGENT.md");
|
|
137
|
+
const claudeMdPath = path.join(vaultPath, "CLAUDE.md");
|
|
138
|
+
if (!(await fs.pathExists(agentMdPath))) {
|
|
139
|
+
await fs.writeFile(agentMdPath, agentContent);
|
|
140
|
+
filesCreated++;
|
|
141
|
+
}
|
|
142
|
+
if (!(await fs.pathExists(claudeMdPath))) {
|
|
143
|
+
await fs.writeFile(claudeMdPath, agentContent);
|
|
144
|
+
filesCreated++;
|
|
145
|
+
}
|
|
126
146
|
// 7. Create people notes
|
|
127
147
|
for (const member of members) {
|
|
128
148
|
const content = `---
|
|
@@ -139,8 +159,11 @@ tags: [person]
|
|
|
139
159
|
**Role**: ${member.role}
|
|
140
160
|
**Team**: ${teamName}
|
|
141
161
|
`;
|
|
142
|
-
|
|
143
|
-
|
|
162
|
+
const memberPath = path.join(vaultPath, `People/${member.name}.md`);
|
|
163
|
+
if (!(await fs.pathExists(memberPath))) {
|
|
164
|
+
await fs.writeFile(memberPath, content);
|
|
165
|
+
filesCreated++;
|
|
166
|
+
}
|
|
144
167
|
}
|
|
145
168
|
// 8. Create project notes
|
|
146
169
|
for (const project of projects) {
|
|
@@ -160,8 +183,11 @@ tags: [project]
|
|
|
160
183
|
|
|
161
184
|
${project.description}
|
|
162
185
|
`;
|
|
163
|
-
|
|
164
|
-
|
|
186
|
+
const projectPath = path.join(vaultPath, `Projects/${project.name}.md`);
|
|
187
|
+
if (!(await fs.pathExists(projectPath))) {
|
|
188
|
+
await fs.writeFile(projectPath, content);
|
|
189
|
+
filesCreated++;
|
|
190
|
+
}
|
|
165
191
|
}
|
|
166
192
|
// 9. Create team index (always, since Start Here.md links to it)
|
|
167
193
|
{
|
|
@@ -180,7 +206,6 @@ tags: [team]
|
|
|
180
206
|
if (members.length > 0) {
|
|
181
207
|
teamIndexContent += "| Name | Role |\n|------|------|\n";
|
|
182
208
|
teamIndexContent += members.map((m) => `| [[${m.name}]] | ${m.role} |`).join("\n");
|
|
183
|
-
wikilinksCreated += members.length;
|
|
184
209
|
}
|
|
185
210
|
else {
|
|
186
211
|
teamIndexContent += "(No members added yet)";
|
|
@@ -190,14 +215,16 @@ tags: [team]
|
|
|
190
215
|
teamIndexContent += projects
|
|
191
216
|
.map((p) => `- [[${p.name}]] — ${p.description}`)
|
|
192
217
|
.join("\n");
|
|
193
|
-
wikilinksCreated += projects.length;
|
|
194
218
|
}
|
|
195
219
|
else {
|
|
196
220
|
teamIndexContent += "(No projects added yet)";
|
|
197
221
|
}
|
|
198
222
|
teamIndexContent += "\n";
|
|
199
|
-
|
|
200
|
-
|
|
223
|
+
const teamIndexPath = path.join(vaultPath, `People/${teamName} Team.md`);
|
|
224
|
+
if (!(await fs.pathExists(teamIndexPath))) {
|
|
225
|
+
await fs.writeFile(teamIndexPath, teamIndexContent);
|
|
226
|
+
filesCreated++;
|
|
227
|
+
}
|
|
201
228
|
}
|
|
202
229
|
// 10. Create .gitkeep in empty directories
|
|
203
230
|
const dirsNeedingGitkeep = [
|
|
@@ -220,11 +247,94 @@ tags: [team]
|
|
|
220
247
|
}
|
|
221
248
|
}
|
|
222
249
|
}
|
|
250
|
+
// 11. Configure vault as OpenCode project (plugin + skills + commands)
|
|
251
|
+
await configureOpenCodeProject(vaultPath);
|
|
252
|
+
// 12. Configure MCP servers in global OpenCode config
|
|
253
|
+
const mcpResult = await configureMcp(presetConfig);
|
|
254
|
+
// 13. Install Obsidian community plugins from preset
|
|
255
|
+
const pluginsResult = await configureObsidianPlugins(vaultPath, presetConfig);
|
|
256
|
+
// 14. Configure AI provider in global OpenCode config
|
|
257
|
+
let providerResult = null;
|
|
258
|
+
if (config.provider && config.provider !== "skip") {
|
|
259
|
+
providerResult = await configureProvider(config.provider, config.provider === "gemini" ? config.gcpProjectId : undefined);
|
|
260
|
+
}
|
|
261
|
+
// 15. Count wikilinks from all generated markdown files
|
|
262
|
+
let wikilinksCreated = 0;
|
|
263
|
+
const entries = await fs.readdir(vaultPath, { recursive: true });
|
|
264
|
+
for (const entry of entries) {
|
|
265
|
+
const entryStr = String(entry);
|
|
266
|
+
if (entryStr.endsWith(".md") && !entryStr.startsWith(".obsidian")) {
|
|
267
|
+
const content = await fs.readFile(path.join(vaultPath, entryStr), "utf-8");
|
|
268
|
+
wikilinksCreated += countWikilinks(content);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
223
271
|
return {
|
|
224
272
|
vaultPath,
|
|
225
273
|
filesCreated,
|
|
226
274
|
wikilinksCreated,
|
|
227
275
|
directories: allDirectories,
|
|
276
|
+
mcpResult,
|
|
277
|
+
pluginsResult,
|
|
278
|
+
providerResult,
|
|
228
279
|
};
|
|
229
280
|
}
|
|
281
|
+
/**
|
|
282
|
+
* Configure the vault directory as an OpenCode project.
|
|
283
|
+
* Creates .opencode.json with BYOAO plugin registered,
|
|
284
|
+
* and copies skills + commands so BYOAO tools work when
|
|
285
|
+
* OpenCode is launched from the vault (including via Agent Client).
|
|
286
|
+
*/
|
|
287
|
+
async function configureOpenCodeProject(vaultPath) {
|
|
288
|
+
// 1. Write .opencode.json with BYOAO plugin
|
|
289
|
+
const configPath = path.join(vaultPath, ".opencode.json");
|
|
290
|
+
let config = {};
|
|
291
|
+
if (await fs.pathExists(configPath)) {
|
|
292
|
+
try {
|
|
293
|
+
config = await fs.readJson(configPath);
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
// Invalid JSON — start fresh
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
const plugins = config.plugin || [];
|
|
300
|
+
if (!plugins.includes("byoao")) {
|
|
301
|
+
plugins.push("byoao");
|
|
302
|
+
config.plugin = plugins;
|
|
303
|
+
}
|
|
304
|
+
await fs.writeJson(configPath, config, { spaces: 2 });
|
|
305
|
+
// 2. Copy Obsidian Skills
|
|
306
|
+
const assetsDir = resolveAssetsDir();
|
|
307
|
+
const obsidianSkillsSrc = path.join(assetsDir, "obsidian-skills");
|
|
308
|
+
const skillsDest = path.join(vaultPath, ".opencode", "skills");
|
|
309
|
+
if (await fs.pathExists(obsidianSkillsSrc)) {
|
|
310
|
+
await fs.ensureDir(skillsDest);
|
|
311
|
+
const files = await fs.readdir(obsidianSkillsSrc);
|
|
312
|
+
for (const file of files) {
|
|
313
|
+
if (file.endsWith(".md")) {
|
|
314
|
+
await fs.copy(path.join(obsidianSkillsSrc, file), path.join(skillsDest, file), { overwrite: true });
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// 3. Copy BYOAO commands
|
|
319
|
+
const byoaoSkillsSrc = path.join(assetsDir, "..", "skills");
|
|
320
|
+
const commandsDest = path.join(vaultPath, ".opencode", "commands");
|
|
321
|
+
if (await fs.pathExists(byoaoSkillsSrc)) {
|
|
322
|
+
await fs.ensureDir(commandsDest);
|
|
323
|
+
const files = await fs.readdir(byoaoSkillsSrc);
|
|
324
|
+
for (const file of files) {
|
|
325
|
+
if (file.endsWith(".md")) {
|
|
326
|
+
await fs.copy(path.join(byoaoSkillsSrc, file), path.join(commandsDest, file), { overwrite: true });
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
function resolveAssetsDir() {
|
|
332
|
+
const srcAssets = path.resolve(import.meta.dirname, "..", "assets");
|
|
333
|
+
const distAssets = path.resolve(import.meta.dirname, "..", "..", "src", "assets");
|
|
334
|
+
if (fs.existsSync(srcAssets))
|
|
335
|
+
return srcAssets;
|
|
336
|
+
if (fs.existsSync(distAssets))
|
|
337
|
+
return distAssets;
|
|
338
|
+
return srcAssets;
|
|
339
|
+
}
|
|
230
340
|
//# 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,31 @@
|
|
|
1
|
+
import { findOpencodeConfig, readOpencodeConfig, writeOpencodeConfig, } from "./opencode-config.js";
|
|
2
|
+
/**
|
|
3
|
+
* Merge a preset's MCP servers into the global OpenCode config.
|
|
4
|
+
* Preserves existing entries — only adds servers not already configured.
|
|
5
|
+
*/
|
|
6
|
+
export async function configureMcp(presetConfig) {
|
|
7
|
+
const mcpServers = presetConfig.mcpServers;
|
|
8
|
+
if (!mcpServers || Object.keys(mcpServers).length === 0) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const configPath = findOpencodeConfig();
|
|
12
|
+
const config = await readOpencodeConfig();
|
|
13
|
+
const existingMcp = config.mcp || {};
|
|
14
|
+
const serversAdded = [];
|
|
15
|
+
const serversSkipped = [];
|
|
16
|
+
for (const [name, serverConfig] of Object.entries(mcpServers)) {
|
|
17
|
+
if (existingMcp[name]) {
|
|
18
|
+
serversSkipped.push(name);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
existingMcp[name] = serverConfig;
|
|
22
|
+
serversAdded.push(name);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (serversAdded.length > 0) {
|
|
26
|
+
config.mcp = existingMcp;
|
|
27
|
+
await writeOpencodeConfig(config);
|
|
28
|
+
}
|
|
29
|
+
return { configPath, serversAdded, serversSkipped };
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/vault/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAQ9B;;;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,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE1C,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,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AACtD,CAAC"}
|