@jayjiang/byoao 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/cli/cli-program.js +241 -0
  2. package/dist/cli/cli-program.js.map +1 -0
  3. package/dist/cli/installer.js +226 -0
  4. package/dist/cli/installer.js.map +1 -0
  5. package/dist/cli/ui.js +157 -0
  6. package/dist/cli/ui.js.map +1 -0
  7. package/dist/hooks/idle-suggestions.js +14 -0
  8. package/dist/hooks/idle-suggestions.js.map +1 -0
  9. package/dist/hooks/system-transform.js +34 -0
  10. package/dist/hooks/system-transform.js.map +1 -0
  11. package/dist/index.js +43 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/plugin-config.js +57 -0
  14. package/dist/plugin-config.js.map +1 -0
  15. package/dist/tools/add-glossary-term.js +19 -0
  16. package/dist/tools/add-glossary-term.js.map +1 -0
  17. package/dist/tools/add-member.js +21 -0
  18. package/dist/tools/add-member.js.map +1 -0
  19. package/dist/tools/add-project.js +24 -0
  20. package/dist/tools/add-project.js.map +1 -0
  21. package/dist/tools/init-vault.js +82 -0
  22. package/dist/tools/init-vault.js.map +1 -0
  23. package/dist/tools/vault-doctor.js +38 -0
  24. package/dist/tools/vault-doctor.js.map +1 -0
  25. package/dist/tools/vault-status.js +18 -0
  26. package/dist/tools/vault-status.js.map +1 -0
  27. package/dist/vault/create.js +230 -0
  28. package/dist/vault/create.js.map +1 -0
  29. package/dist/vault/doctor.js +148 -0
  30. package/dist/vault/doctor.js.map +1 -0
  31. package/dist/vault/glossary.js +33 -0
  32. package/dist/vault/glossary.js.map +1 -0
  33. package/dist/vault/member.js +67 -0
  34. package/dist/vault/member.js.map +1 -0
  35. package/dist/vault/obsidian-check.js +125 -0
  36. package/dist/vault/obsidian-check.js.map +1 -0
  37. package/dist/vault/obsidian-cli.js +47 -0
  38. package/dist/vault/obsidian-cli.js.map +1 -0
  39. package/dist/vault/opencode-check.js +65 -0
  40. package/dist/vault/opencode-check.js.map +1 -0
  41. package/dist/vault/preset.js +48 -0
  42. package/dist/vault/preset.js.map +1 -0
  43. package/dist/vault/project.js +68 -0
  44. package/dist/vault/project.js.map +1 -0
  45. package/dist/vault/status.js +135 -0
  46. package/dist/vault/status.js.map +1 -0
  47. package/dist/vault/template.js +14 -0
  48. package/dist/vault/template.js.map +1 -0
  49. package/package.json +58 -0
  50. package/src/assets/obsidian-skills/defuddle.md +41 -0
  51. package/src/assets/obsidian-skills/json-canvas.md +244 -0
  52. package/src/assets/obsidian-skills/obsidian-bases.md +497 -0
  53. package/src/assets/obsidian-skills/obsidian-cli.md +106 -0
  54. package/src/assets/obsidian-skills/obsidian-markdown.md +196 -0
  55. package/src/assets/presets/common/AGENT.md.hbs +29 -0
  56. package/src/assets/presets/common/Glossary.md.hbs +44 -0
  57. package/src/assets/presets/common/Start Here.md.hbs +95 -0
  58. package/src/assets/presets/common/obsidian/core-plugins.json +33 -0
  59. package/src/assets/presets/common/obsidian/daily-notes.json +5 -0
  60. package/src/assets/presets/common/obsidian/templates.json +3 -0
  61. package/src/assets/presets/common/templates/Daily Note.md +19 -0
  62. package/src/assets/presets/common/templates/Decision Record.md +32 -0
  63. package/src/assets/presets/common/templates/Investigation.md +34 -0
  64. package/src/assets/presets/common/templates/Meeting Notes.md +25 -0
  65. package/src/assets/presets/pm-tpm/agent-section.hbs +15 -0
  66. package/src/assets/presets/pm-tpm/preset.json +12 -0
  67. package/src/assets/presets/pm-tpm/templates/Feature Doc.md +45 -0
  68. package/src/assets/presets/pm-tpm/templates/Sprint Handoff.md +38 -0
  69. package/src/assets/web-clipper/confluence-page.json +63 -0
  70. package/src/assets/web-clipper/general-article.json +53 -0
  71. package/src/assets/web-clipper/jira-issue.json +68 -0
  72. package/src/assets/web-clipper/meeting-notes.json +53 -0
  73. package/src/skills/enrich-document.md +52 -0
  74. package/src/skills/init-knowledge-base.md +85 -0
  75. package/src/skills/system-explainer.md +58 -0
  76. package/src/skills/vault-doctor.md +73 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Returns a suggestion string for BYOAO commands.
3
+ * MVP: simple rotation. Future: context-aware.
4
+ */
5
+ export function getIdleSuggestion() {
6
+ const suggestions = [
7
+ "Tip: run /vault-doctor to check vault health",
8
+ "Tip: run /enrich-document to add frontmatter and wikilinks to a note",
9
+ "Tip: run /system-explainer to document a codebase system in your vault",
10
+ ];
11
+ const idx = new Date().getMinutes() % suggestions.length;
12
+ return suggestions[idx];
13
+ }
14
+ //# sourceMappingURL=idle-suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idle-suggestions.js","sourceRoot":"","sources":["../../src/hooks/idle-suggestions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG;QAClB,8CAA8C;QAC9C,sEAAsE;QACtE,wEAAwE;KACzE,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;IACzD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,34 @@
1
+ import fs from "fs-extra";
2
+ import path from "node:path";
3
+ /**
4
+ * Read AGENT.md from the current working directory.
5
+ * Returns the content if found, null otherwise.
6
+ */
7
+ export function readAgentMdFromCwd() {
8
+ const candidates = [
9
+ path.join(process.cwd(), "AGENT.md"),
10
+ path.join(process.cwd(), "..", "AGENT.md"),
11
+ ];
12
+ for (const candidate of candidates) {
13
+ if (fs.existsSync(candidate)) {
14
+ try {
15
+ return fs.readFileSync(candidate, "utf-8");
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ }
22
+ return null;
23
+ }
24
+ /**
25
+ * Hook: inject AGENT.md into system prompt.
26
+ * Mutating pattern — modifies output.system in place.
27
+ */
28
+ export async function systemTransformHook(_input, output) {
29
+ const agentMd = readAgentMdFromCwd();
30
+ if (agentMd) {
31
+ output.system.push(`\n---\n## BYOAO Vault Context (from AGENT.md)\n\n${agentMd}`);
32
+ }
33
+ }
34
+ //# sourceMappingURL=system-transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-transform.js","sourceRoot":"","sources":["../../src/hooks/system-transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC;KAC3C,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA8C,EAC9C,MAA4B;IAE5B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,oDAAoD,OAAO,EAAE,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ // BYOAO — Build Your Own AI OS — plugin for OpenCode
2
+ // NOTE: Do NOT export other functions from this file!
3
+ // OpenCode treats ALL exports as plugin instances and calls them.
4
+ import { byoao_init_vault } from "./tools/init-vault.js";
5
+ import { byoao_add_member } from "./tools/add-member.js";
6
+ import { byoao_add_project } from "./tools/add-project.js";
7
+ import { byoao_add_glossary_term } from "./tools/add-glossary-term.js";
8
+ import { byoao_vault_status } from "./tools/vault-status.js";
9
+ import { byoao_vault_doctor } from "./tools/vault-doctor.js";
10
+ import { systemTransformHook } from "./hooks/system-transform.js";
11
+ import { getIdleSuggestion } from "./hooks/idle-suggestions.js";
12
+ const BYOAOPlugin = async (ctx) => {
13
+ // Capture client from plugin context for use in hooks via closure
14
+ const { client } = ctx;
15
+ return {
16
+ tool: {
17
+ byoao_init_vault,
18
+ byoao_add_member,
19
+ byoao_add_project,
20
+ byoao_add_glossary_term,
21
+ byoao_vault_status,
22
+ byoao_vault_doctor,
23
+ },
24
+ "experimental.chat.system.transform": systemTransformHook,
25
+ event: async ({ event }) => {
26
+ if (event.type === "session.idle") {
27
+ const suggestion = getIdleSuggestion();
28
+ if (suggestion) {
29
+ client.tui.showToast({
30
+ body: {
31
+ title: "BYOAO",
32
+ message: suggestion,
33
+ variant: "info",
34
+ duration: 5000,
35
+ },
36
+ });
37
+ }
38
+ }
39
+ },
40
+ };
41
+ };
42
+ export default BYOAOPlugin;
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kEAAkE;AAGlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,WAAW,GAAW,KAAK,EAAE,GAAG,EAAE,EAAE;IACxC,kEAAkE;IAClE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,OAAO;QACL,IAAI,EAAE;YACJ,gBAAgB;YAChB,gBAAgB;YAChB,iBAAiB;YACjB,uBAAuB;YACvB,kBAAkB;YAClB,kBAAkB;SACnB;QACD,oCAAoC,EAAE,mBAAmB;QACzD,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACzB,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;gBACvC,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;wBACnB,IAAI,EAAE;4BACJ,KAAK,EAAE,OAAO;4BACd,OAAO,EAAE,UAAU;4BACnB,OAAO,EAAE,MAAM;4BACf,QAAQ,EAAE,IAAI;yBACf;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { z } from "zod";
2
+ export const MemberSchema = z.object({
3
+ name: z.string(),
4
+ role: z.string().default(""),
5
+ });
6
+ export const ProjectSchema = z.object({
7
+ name: z.string(),
8
+ description: z.string().default(""),
9
+ });
10
+ export const GlossaryEntrySchema = z.object({
11
+ term: z.string(),
12
+ definition: z.string(),
13
+ });
14
+ export const VaultConfigSchema = z.object({
15
+ teamName: z.string().min(1),
16
+ vaultPath: z.string(),
17
+ members: z.array(MemberSchema).default([]),
18
+ projects: z.array(ProjectSchema).default([]),
19
+ glossaryEntries: z.array(GlossaryEntrySchema).default([]),
20
+ jiraHost: z.string().default(""),
21
+ jiraProject: z.string().default(""),
22
+ preset: z.string().default("pm-tpm"),
23
+ });
24
+ export const AddMemberSchema = z.object({
25
+ vaultPath: z.string(),
26
+ name: z.string(),
27
+ role: z.string().default(""),
28
+ team: z.string().default(""),
29
+ });
30
+ export const AddProjectSchema = z.object({
31
+ vaultPath: z.string(),
32
+ name: z.string(),
33
+ description: z.string().default(""),
34
+ team: z.string().default(""),
35
+ });
36
+ export const AddGlossaryTermSchema = z.object({
37
+ vaultPath: z.string(),
38
+ term: z.string(),
39
+ definition: z.string(),
40
+ });
41
+ export const VaultStatusSchema = z.object({
42
+ vaultPath: z.string(),
43
+ });
44
+ // --- Preset System ---
45
+ export const PresetConfigSchema = z.object({
46
+ name: z.string().min(1),
47
+ displayName: z.string().min(1),
48
+ description: z.string(),
49
+ directories: z.array(z.string()).default([]),
50
+ agentDescription: z.string(),
51
+ frontmatterExtras: z.record(z.string(), z.array(z.string())).default({}),
52
+ templates: z.array(z.string()).default([]),
53
+ });
54
+ export const VaultDoctorSchema = z.object({
55
+ vaultPath: z.string(),
56
+ });
57
+ //# sourceMappingURL=plugin-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-config.js","sourceRoot":"","sources":["../src/plugin-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5C,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACzD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;CACrC,CAAC,CAAC;AAOH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,wBAAwB;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5C,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACxE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { tool } from "@opencode-ai/plugin/tool";
2
+ import { addGlossaryTerm } from "../vault/glossary.js";
3
+ export const byoao_add_glossary_term = tool({
4
+ description: "Add a new term to the vault's Glossary.md. Appends a row to the Core Terms table.",
5
+ args: {
6
+ vaultPath: tool.schema.string().describe("Path to the Obsidian vault"),
7
+ term: tool.schema.string().describe("The domain term to add"),
8
+ definition: tool.schema.string().describe("Brief definition (1-2 sentences)"),
9
+ },
10
+ async execute(args) {
11
+ const result = await addGlossaryTerm({
12
+ vaultPath: args.vaultPath,
13
+ term: args.term,
14
+ definition: args.definition,
15
+ });
16
+ return `✓ Added glossary term: ${result.termAdded}\n File: ${result.glossaryPath}`;
17
+ },
18
+ });
19
+ //# sourceMappingURL=add-glossary-term.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-glossary-term.js","sourceRoot":"","sources":["../../src/tools/add-glossary-term.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;IAC1C,WAAW,EACT,mFAAmF;IACrF,IAAI,EAAE;QACJ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACtE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC7D,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KAC9E;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;QAEH,OAAO,0BAA0B,MAAM,CAAC,SAAS,aAAa,MAAM,CAAC,YAAY,EAAE,CAAC;IACtF,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { tool } from "@opencode-ai/plugin/tool";
2
+ import { addMember } from "../vault/member.js";
3
+ export const byoao_add_member = tool({
4
+ description: "Add a new team member note to an existing vault. Creates a person note in 40-People/ and updates the team index and AGENT.md wikilinks.",
5
+ args: {
6
+ vaultPath: tool.schema.string().describe("Path to the Obsidian vault"),
7
+ name: tool.schema.string().describe("Person's full name"),
8
+ role: tool.schema.string().optional().describe("Person's role/title"),
9
+ team: tool.schema.string().optional().describe("Team name"),
10
+ },
11
+ async execute(args) {
12
+ const result = await addMember({
13
+ vaultPath: args.vaultPath,
14
+ name: args.name,
15
+ role: args.role || "",
16
+ team: args.team || "",
17
+ });
18
+ return `✓ Added member: ${args.name}\n File: ${result.filePath}\n Wikilinks updated: ${result.wikilinksAdded}`;
19
+ },
20
+ });
21
+ //# sourceMappingURL=add-member.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-member.js","sourceRoot":"","sources":["../../src/tools/add-member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;IACnC,WAAW,EACT,yIAAyI;IAC3I,IAAI,EAAE;QACJ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACtE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACzD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACrE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC5D;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QAEH,OAAO,mBAAmB,IAAI,CAAC,IAAI,aAAa,MAAM,CAAC,QAAQ,0BAA0B,MAAM,CAAC,cAAc,EAAE,CAAC;IACnH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { tool } from "@opencode-ai/plugin/tool";
2
+ import { addProject } from "../vault/project.js";
3
+ export const byoao_add_project = tool({
4
+ description: "Add a new project note to an existing vault. Creates a project note in 10-Projects/ and updates the team index and AGENT.md wikilinks.",
5
+ args: {
6
+ vaultPath: tool.schema.string().describe("Path to the Obsidian vault"),
7
+ name: tool.schema.string().describe("Project name"),
8
+ description: tool.schema
9
+ .string()
10
+ .optional()
11
+ .describe("One-line project description"),
12
+ team: tool.schema.string().optional().describe("Team name"),
13
+ },
14
+ async execute(args) {
15
+ const result = await addProject({
16
+ vaultPath: args.vaultPath,
17
+ name: args.name,
18
+ description: args.description || "",
19
+ team: args.team || "",
20
+ });
21
+ return `✓ Added project: ${args.name}\n File: ${result.filePath}\n Wikilinks updated: ${result.wikilinksAdded}`;
22
+ },
23
+ });
24
+ //# sourceMappingURL=add-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-project.js","sourceRoot":"","sources":["../../src/tools/add-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;IACpC,WAAW,EACT,wIAAwI;IAC1I,IAAI,EAAE;QACJ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACtE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACnD,WAAW,EAAE,IAAI,CAAC,MAAM;aACrB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,8BAA8B,CAAC;QAC3C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC5D;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;YACnC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QAEH,OAAO,oBAAoB,IAAI,CAAC,IAAI,aAAa,MAAM,CAAC,QAAQ,0BAA0B,MAAM,CAAC,cAAc,EAAE,CAAC;IACpH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { tool } from "@opencode-ai/plugin/tool";
2
+ import { createVault } from "../vault/create.js";
3
+ import { checkObsidian, formatObsidianStatus } from "../vault/obsidian-check.js";
4
+ import { VaultConfigSchema } from "../plugin-config.js";
5
+ import path from "node:path";
6
+ import os from "node:os";
7
+ export const byoao_init_vault = tool({
8
+ description: "Create a fully configured Obsidian vault for any team. Creates directory structure, templates, glossary, agent routing file, and optional people/project notes with wikilinks. Checks that Obsidian is installed first.",
9
+ args: {
10
+ teamName: tool.schema.string().describe("Team name (e.g. 'HDR Operations')"),
11
+ vaultPath: tool.schema
12
+ .string()
13
+ .optional()
14
+ .describe("Where to create the vault. Defaults to ~/Documents/{teamName} Workspace"),
15
+ members: tool.schema
16
+ .array(tool.schema.object({
17
+ name: tool.schema.string().describe("Person's name"),
18
+ role: tool.schema.string().optional().describe("Person's role"),
19
+ }))
20
+ .optional()
21
+ .describe("Team members to create people notes for"),
22
+ projects: tool.schema
23
+ .array(tool.schema.object({
24
+ name: tool.schema.string().describe("Project name"),
25
+ description: tool.schema.string().optional().describe("One-line description"),
26
+ }))
27
+ .optional()
28
+ .describe("Active projects to create project notes for"),
29
+ glossaryEntries: tool.schema
30
+ .array(tool.schema.object({
31
+ term: tool.schema.string().describe("Domain term"),
32
+ definition: tool.schema.string().describe("Brief definition"),
33
+ }))
34
+ .optional()
35
+ .describe("Domain terms to add to the glossary"),
36
+ jiraHost: tool.schema
37
+ .string()
38
+ .optional()
39
+ .describe("JIRA host (e.g. 'mycompany.atlassian.net')"),
40
+ jiraProject: tool.schema
41
+ .string()
42
+ .optional()
43
+ .describe("JIRA project key (e.g. 'HDR')"),
44
+ preset: tool.schema
45
+ .string()
46
+ .optional()
47
+ .describe("Role preset (default: 'pm-tpm')"),
48
+ },
49
+ async execute(args) {
50
+ // Check Obsidian first
51
+ const obsidianStatus = checkObsidian();
52
+ if (!obsidianStatus.installed) {
53
+ return `${formatObsidianStatus(obsidianStatus)}\n\nPlease install Obsidian first, then try again.`;
54
+ }
55
+ const resolvedPath = args.vaultPath ||
56
+ path.join(os.homedir(), "Documents", `${args.teamName} Workspace`);
57
+ const config = VaultConfigSchema.parse({
58
+ teamName: args.teamName,
59
+ vaultPath: resolvedPath,
60
+ members: args.members || [],
61
+ projects: args.projects || [],
62
+ glossaryEntries: args.glossaryEntries || [],
63
+ jiraHost: args.jiraHost || "",
64
+ jiraProject: args.jiraProject || "",
65
+ preset: args.preset || "pm-tpm",
66
+ });
67
+ const result = await createVault(config);
68
+ let output = `✓ Vault created at: ${result.vaultPath}\n`;
69
+ output += ` Files created: ${result.filesCreated}\n`;
70
+ output += ` Wikilinks: ${result.wikilinksCreated}\n`;
71
+ output += ` Directories: ${result.directories.length}`;
72
+ if (!obsidianStatus.running) {
73
+ output += `\n\n${formatObsidianStatus(obsidianStatus)}`;
74
+ output += `\n\nAfter opening Obsidian, use "Open folder as vault" → select "${result.vaultPath}"`;
75
+ }
76
+ else {
77
+ output += `\n\nOpen in Obsidian: "Open folder as vault" → select "${result.vaultPath}"`;
78
+ }
79
+ return output;
80
+ },
81
+ });
82
+ //# sourceMappingURL=init-vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-vault.js","sourceRoot":"","sources":["../../src/tools/init-vault.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;IACnC,WAAW,EACT,yNAAyN;IAC3N,IAAI,EAAE;QACJ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC5E,SAAS,EAAE,IAAI,CAAC,MAAM;aACnB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,yEAAyE,CAC1E;QACH,OAAO,EAAE,IAAI,CAAC,MAAM;aACjB,KAAK,CACJ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACpD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;SAChE,CAAC,CACH;aACA,QAAQ,EAAE;aACV,QAAQ,CAAC,yCAAyC,CAAC;QACtD,QAAQ,EAAE,IAAI,CAAC,MAAM;aAClB,KAAK,CACJ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;YACnD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;SAC9E,CAAC,CACH;aACA,QAAQ,EAAE;aACV,QAAQ,CAAC,6CAA6C,CAAC;QAC1D,eAAe,EAAE,IAAI,CAAC,MAAM;aACzB,KAAK,CACJ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YAClD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SAC9D,CAAC,CACH;aACA,QAAQ,EAAE;aACV,QAAQ,CAAC,qCAAqC,CAAC;QAClD,QAAQ,EAAE,IAAI,CAAC,MAAM;aAClB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4CAA4C,CAAC;QACzD,WAAW,EAAE,IAAI,CAAC,MAAM;aACrB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,+BAA+B,CAAC;QAC5C,MAAM,EAAE,IAAI,CAAC,MAAM;aAChB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,iCAAiC,CAAC;KAC/C;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,uBAAuB;QACvB,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YAC9B,OAAO,GAAG,oBAAoB,CAAC,cAAc,CAAC,oDAAoD,CAAC;QACrG,CAAC;QAED,MAAM,YAAY,GAChB,IAAI,CAAC,SAAS;YACd,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,YAAY,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE;YAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ;SAChC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAEzC,IAAI,MAAM,GAAG,uBAAuB,MAAM,CAAC,SAAS,IAAI,CAAC;QACzD,MAAM,IAAI,oBAAoB,MAAM,CAAC,YAAY,IAAI,CAAC;QACtD,MAAM,IAAI,gBAAgB,MAAM,CAAC,gBAAgB,IAAI,CAAC;QACtD,MAAM,IAAI,kBAAkB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QAExD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,OAAO,oBAAoB,CAAC,cAAc,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,oEAAoE,MAAM,CAAC,SAAS,GAAG,CAAC;QACpG,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,0DAA0D,MAAM,CAAC,SAAS,GAAG,CAAC;QAC1F,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { tool } from "@opencode-ai/plugin/tool";
2
+ import { getVaultDiagnosis } from "../vault/doctor.js";
3
+ export const byoao_vault_doctor = tool({
4
+ description: "Scan an Obsidian vault and produce a diagnostic report. Checks: missing frontmatter, missing type/tags, AGENT.md drift, orphan notes, broken wikilinks.",
5
+ args: {
6
+ vaultPath: tool.schema.string().describe("Absolute path to the Obsidian vault"),
7
+ },
8
+ async execute(args) {
9
+ const report = await getVaultDiagnosis(args.vaultPath);
10
+ const lines = [];
11
+ lines.push(`Vault Diagnosis: ${report.summary.totalNotes} notes, ${report.summary.issueCount} issues`);
12
+ lines.push("");
13
+ // Group by category
14
+ const byCategory = new Map();
15
+ for (const issue of report.issues) {
16
+ const cat = byCategory.get(issue.category) || [];
17
+ cat.push(issue);
18
+ byCategory.set(issue.category, cat);
19
+ }
20
+ for (const [category, categoryIssues] of byCategory) {
21
+ const icon = categoryIssues[0].severity === "warning" ? "⚠" : "ℹ";
22
+ lines.push(`${icon} ${category} (${categoryIssues.length})`);
23
+ for (const issue of categoryIssues.slice(0, 10)) {
24
+ const file = issue.file ? ` — ${issue.file}` : "";
25
+ lines.push(` ${issue.message}${file}`);
26
+ }
27
+ if (categoryIssues.length > 10) {
28
+ lines.push(` ... and ${categoryIssues.length - 10} more`);
29
+ }
30
+ lines.push("");
31
+ }
32
+ if (report.issues.length === 0) {
33
+ lines.push("✓ No issues found — vault is healthy!");
34
+ }
35
+ return lines.join("\n");
36
+ },
37
+ });
38
+ //# sourceMappingURL=vault-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-doctor.js","sourceRoot":"","sources":["../../src/tools/vault-doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;IACrC,WAAW,EACT,yJAAyJ;IAC3J,IAAI,EAAE;QACJ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAChF;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,OAAO,CAAC,UAAU,WAAW,MAAM,CAAC,OAAO,CAAC,UAAU,SAAS,CAAC,CAAC;QACvG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,oBAAoB;QACpB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAgC,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,UAAU,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,QAAQ,KAAK,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7D,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,cAAc,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,aAAa,cAAc,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7D,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { tool } from "@opencode-ai/plugin/tool";
2
+ import { getVaultStatus, formatVaultStatus } from "../vault/status.js";
3
+ import { checkObsidian, formatObsidianStatus } from "../vault/obsidian-check.js";
4
+ export const byoao_vault_status = tool({
5
+ description: "Check the health of an Obsidian vault — note count, wikilink count, broken links, directory breakdown, and Obsidian installation status.",
6
+ args: {
7
+ vaultPath: tool.schema.string().describe("Path to the Obsidian vault"),
8
+ },
9
+ async execute(args) {
10
+ const obsidianStatus = checkObsidian();
11
+ const vaultStatus = await getVaultStatus(args.vaultPath);
12
+ let output = formatVaultStatus(vaultStatus);
13
+ output += "\n\n--- Obsidian Status ---\n";
14
+ output += formatObsidianStatus(obsidianStatus);
15
+ return output;
16
+ },
17
+ });
18
+ //# sourceMappingURL=vault-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-status.js","sourceRoot":"","sources":["../../src/tools/vault-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;IACrC,WAAW,EACT,0IAA0I;IAC5I,IAAI,EAAE;QACJ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KACvE;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,IAAI,+BAA+B,CAAC;QAC1C,MAAM,IAAI,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAE/C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}