@goondocks/myco 0.3.1 → 0.3.2

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 (45) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/dist/chunk-2UEJVXXE.js +33 -0
  4. package/dist/chunk-2UEJVXXE.js.map +1 -0
  5. package/dist/{chunk-NTYYYC32.js → chunk-5BGQJOJN.js} +47 -4
  6. package/dist/chunk-5BGQJOJN.js.map +1 -0
  7. package/dist/{cli-ERAS5H43.js → cli-4RR3QBYK.js} +13 -7
  8. package/dist/cli-4RR3QBYK.js.map +1 -0
  9. package/dist/{client-HORA3CC4.js → client-43ML4EHJ.js} +3 -2
  10. package/dist/{init-LLLHUNSY.js → init-HTKEL3YT.js} +4 -4
  11. package/dist/{main-D4X6XWRT.js → main-DTWU4OAH.js} +13 -7
  12. package/dist/main-DTWU4OAH.js.map +1 -0
  13. package/dist/{rebuild-3367GP5R.js → rebuild-TXMFYBOU.js} +7 -7
  14. package/dist/{reprocess-EM5RIRH4.js → reprocess-ARKHGDWF.js} +13 -13
  15. package/dist/{restart-NH5MX45I.js → restart-C5BCVG3A.js} +2 -2
  16. package/dist/{search-W3ECVSTH.js → search-YCKNX2WS.js} +7 -7
  17. package/dist/{server-I7MRMIOP.js → server-EBKMQISL.js} +15 -27
  18. package/dist/{server-I7MRMIOP.js.map → server-EBKMQISL.js.map} +1 -1
  19. package/dist/{session-start-DECLNJDI.js → session-start-ADZLL2YI.js} +3 -2
  20. package/dist/{session-start-DECLNJDI.js.map → session-start-ADZLL2YI.js.map} +1 -1
  21. package/dist/src/cli.js +1 -1
  22. package/dist/src/daemon/main.js +1 -1
  23. package/dist/src/hooks/post-tool-use.js +2 -1
  24. package/dist/src/hooks/post-tool-use.js.map +1 -1
  25. package/dist/src/hooks/session-end.js +2 -1
  26. package/dist/src/hooks/session-end.js.map +1 -1
  27. package/dist/src/hooks/session-start.js +1 -1
  28. package/dist/src/hooks/stop.js +2 -1
  29. package/dist/src/hooks/stop.js.map +1 -1
  30. package/dist/src/hooks/user-prompt-submit.js +2 -1
  31. package/dist/src/hooks/user-prompt-submit.js.map +1 -1
  32. package/dist/src/mcp/server.js +1 -1
  33. package/dist/version-N55WTRG5.js +11 -0
  34. package/dist/version-N55WTRG5.js.map +1 -0
  35. package/package.json +1 -1
  36. package/skills/myco/SKILL.md +15 -14
  37. package/dist/chunk-NTYYYC32.js.map +0 -1
  38. package/dist/cli-ERAS5H43.js.map +0 -1
  39. package/dist/main-D4X6XWRT.js.map +0 -1
  40. /package/dist/{client-HORA3CC4.js.map → client-43ML4EHJ.js.map} +0 -0
  41. /package/dist/{init-LLLHUNSY.js.map → init-HTKEL3YT.js.map} +0 -0
  42. /package/dist/{rebuild-3367GP5R.js.map → rebuild-TXMFYBOU.js.map} +0 -0
  43. /package/dist/{reprocess-EM5RIRH4.js.map → reprocess-ARKHGDWF.js.map} +0 -0
  44. /package/dist/{restart-NH5MX45I.js.map → restart-C5BCVG3A.js.map} +0 -0
  45. /package/dist/{search-W3ECVSTH.js.map → search-YCKNX2WS.js.map} +0 -0
@@ -12,7 +12,7 @@
12
12
  "source": {
13
13
  "source": "npm",
14
14
  "package": "@goondocks/myco",
15
- "version": "0.3.0"
15
+ "version": "0.3.1"
16
16
  },
17
17
  "description": "Collective agent intelligence — captures session knowledge and serves it back via MCP",
18
18
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myco",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Collective agent intelligence — captures session knowledge and serves it back to your team via MCP",
5
5
  "author": {
6
6
  "name": "goondocks-co",
@@ -0,0 +1,33 @@
1
+ import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ AgentRegistry
4
+ } from "./chunk-2QEJKG7R.js";
5
+
6
+ // src/version.ts
7
+ import fs from "fs";
8
+ import path from "path";
9
+ var cached;
10
+ function getPluginVersion() {
11
+ if (cached) return cached;
12
+ const pluginRoot = new AgentRegistry().resolvePluginRoot();
13
+ if (pluginRoot) {
14
+ cached = readVersionFrom(pluginRoot);
15
+ if (cached) return cached;
16
+ }
17
+ cached = readVersionFrom(process.cwd()) ?? "0.0.0";
18
+ return cached;
19
+ }
20
+ function readVersionFrom(dir) {
21
+ const pkgPath = path.join(dir, "package.json");
22
+ try {
23
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
24
+ return pkg.version;
25
+ } catch {
26
+ return void 0;
27
+ }
28
+ }
29
+
30
+ export {
31
+ getPluginVersion
32
+ };
33
+ //# sourceMappingURL=chunk-2UEJVXXE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/version.ts"],"sourcesContent":["/**\n * Resolve the plugin's package version from package.json.\n * Uses the agent registry to find the plugin root, then reads package.json.\n */\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { AgentRegistry } from './agents/registry.js';\n\nlet cached: string | undefined;\n\nexport function getPluginVersion(): string {\n if (cached) return cached;\n\n // Primary: resolve via agent env var (CLAUDE_PLUGIN_ROOT, etc.)\n const pluginRoot = new AgentRegistry().resolvePluginRoot();\n if (pluginRoot) {\n cached = readVersionFrom(pluginRoot);\n if (cached) return cached;\n }\n\n // Fallback: walk up from cwd\n cached = readVersionFrom(process.cwd()) ?? '0.0.0';\n return cached;\n}\n\nfunction readVersionFrom(dir: string): string | undefined {\n const pkgPath = path.join(dir, 'package.json');\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n return pkg.version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":";;;;;;AAIA,OAAO,QAAQ;AACf,OAAO,UAAU;AAGjB,IAAI;AAEG,SAAS,mBAA2B;AACzC,MAAI,OAAQ,QAAO;AAGnB,QAAM,aAAa,IAAI,cAAc,EAAE,kBAAkB;AACzD,MAAI,YAAY;AACd,aAAS,gBAAgB,UAAU;AACnC,QAAI,OAAQ,QAAO;AAAA,EACrB;AAGA,WAAS,gBAAgB,QAAQ,IAAI,CAAC,KAAK;AAC3C,SAAO;AACT;AAEA,SAAS,gBAAgB,KAAiC;AACxD,QAAM,UAAU,KAAK,KAAK,KAAK,cAAc;AAC7C,MAAI;AACF,UAAM,MAAM,KAAK,MAAM,GAAG,aAAa,SAAS,OAAO,CAAC;AACxD,WAAO,IAAI;AAAA,EACb,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,4 +1,7 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ getPluginVersion
4
+ } from "./chunk-2UEJVXXE.js";
2
5
  import {
3
6
  AgentRegistry
4
7
  } from "./chunk-2QEJKG7R.js";
@@ -63,11 +66,51 @@ var DaemonClient = class {
63
66
  }
64
67
  }
65
68
  /**
66
- * Ensure the daemon is running. Spawns it if unhealthy and waits for it
67
- * to become ready. Returns true if the daemon is healthy after this call.
69
+ * Check if the daemon is running a stale version.
70
+ * Returns true if the daemon's version doesn't match the current plugin version.
71
+ */
72
+ async isStale() {
73
+ try {
74
+ const info = this.readDaemonJson();
75
+ if (!info) return false;
76
+ const res = await fetch(`http://127.0.0.1:${info.port}/health`, {
77
+ signal: AbortSignal.timeout(DAEMON_HEALTH_CHECK_TIMEOUT_MS)
78
+ });
79
+ if (!res.ok) return false;
80
+ const data = await res.json();
81
+ if (!data.myco) return false;
82
+ if (!data.version) return true;
83
+ return data.version !== getPluginVersion();
84
+ } catch {
85
+ return false;
86
+ }
87
+ }
88
+ /**
89
+ * Kill the running daemon process.
90
+ */
91
+ killDaemon() {
92
+ try {
93
+ const info = this.readDaemonJson();
94
+ if (!info) return;
95
+ process.kill(info.pid, "SIGTERM");
96
+ } catch {
97
+ }
98
+ try {
99
+ fs.unlinkSync(path.join(this.vaultDir, "daemon.json"));
100
+ } catch {
101
+ }
102
+ }
103
+ /**
104
+ * Ensure the daemon is running the current version. Spawns it if unhealthy
105
+ * or restarts it if the version is stale. Returns true if healthy after this call.
68
106
  */
69
107
  async ensureRunning() {
70
- if (await this.isHealthy()) return true;
108
+ if (await this.isStale()) {
109
+ this.killDaemon();
110
+ await new Promise((r) => setTimeout(r, 200));
111
+ } else if (await this.isHealthy()) {
112
+ return true;
113
+ }
71
114
  this.spawnDaemon();
72
115
  for (const delay of DAEMON_HEALTH_RETRY_DELAYS) {
73
116
  await new Promise((r) => setTimeout(r, delay));
@@ -101,4 +144,4 @@ var DaemonClient = class {
101
144
  export {
102
145
  DaemonClient
103
146
  };
104
- //# sourceMappingURL=chunk-NTYYYC32.js.map
147
+ //# sourceMappingURL=chunk-5BGQJOJN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/client.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { spawn } from 'node:child_process';\nimport { DAEMON_CLIENT_TIMEOUT_MS, DAEMON_HEALTH_CHECK_TIMEOUT_MS, DAEMON_HEALTH_RETRY_DELAYS } from '../constants.js';\nimport { AgentRegistry } from '../agents/registry.js';\nimport { getPluginVersion } from '../version.js';\n\ninterface DaemonInfo {\n pid: number;\n port: number;\n}\n\ninterface HealthResponse {\n myco: boolean;\n version?: string;\n}\n\ninterface ClientResult {\n ok: boolean;\n data?: any;\n}\n\nexport class DaemonClient {\n private vaultDir: string;\n\n constructor(vaultDir: string) {\n this.vaultDir = vaultDir;\n }\n\n async post(endpoint: string, body: unknown): Promise<ClientResult> {\n try {\n const info = this.readDaemonJson();\n if (!info) return { ok: false };\n\n const res = await fetch(`http://127.0.0.1:${info.port}${endpoint}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(DAEMON_CLIENT_TIMEOUT_MS),\n });\n\n if (!res.ok) return { ok: false };\n const data = await res.json();\n return { ok: true, data };\n } catch {\n return { ok: false };\n }\n }\n\n async get(endpoint: string): Promise<ClientResult> {\n try {\n const info = this.readDaemonJson();\n if (!info) return { ok: false };\n\n const res = await fetch(`http://127.0.0.1:${info.port}${endpoint}`, {\n signal: AbortSignal.timeout(DAEMON_CLIENT_TIMEOUT_MS),\n });\n\n if (!res.ok) return { ok: false };\n const data = await res.json();\n return { ok: true, data };\n } catch {\n return { ok: false };\n }\n }\n\n async isHealthy(): Promise<boolean> {\n try {\n const info = this.readDaemonJson();\n if (!info) return false;\n\n const res = await fetch(`http://127.0.0.1:${info.port}/health`, {\n signal: AbortSignal.timeout(DAEMON_HEALTH_CHECK_TIMEOUT_MS),\n });\n if (!res.ok) return false;\n const data = await res.json() as HealthResponse;\n return data.myco === true;\n } catch {\n return false;\n }\n }\n\n /**\n * Check if the daemon is running a stale version.\n * Returns true if the daemon's version doesn't match the current plugin version.\n */\n private async isStale(): Promise<boolean> {\n try {\n const info = this.readDaemonJson();\n if (!info) return false;\n\n const res = await fetch(`http://127.0.0.1:${info.port}/health`, {\n signal: AbortSignal.timeout(DAEMON_HEALTH_CHECK_TIMEOUT_MS),\n });\n if (!res.ok) return false;\n const data = await res.json() as HealthResponse;\n if (!data.myco) return false;\n\n // No version in response = old daemon that predates this check\n if (!data.version) return true;\n\n return data.version !== getPluginVersion();\n } catch {\n return false;\n }\n }\n\n /**\n * Kill the running daemon process.\n */\n private killDaemon(): void {\n try {\n const info = this.readDaemonJson();\n if (!info) return;\n process.kill(info.pid, 'SIGTERM');\n } catch { /* already dead */ }\n try {\n fs.unlinkSync(path.join(this.vaultDir, 'daemon.json'));\n } catch { /* already gone */ }\n }\n\n /**\n * Ensure the daemon is running the current version. Spawns it if unhealthy\n * or restarts it if the version is stale. Returns true if healthy after this call.\n */\n async ensureRunning(): Promise<boolean> {\n // Check if daemon is running but stale (version mismatch)\n if (await this.isStale()) {\n this.killDaemon();\n // Brief pause for port release\n await new Promise((r) => setTimeout(r, 200));\n } else if (await this.isHealthy()) {\n return true;\n }\n\n this.spawnDaemon();\n\n for (const delay of DAEMON_HEALTH_RETRY_DELAYS) {\n await new Promise((r) => setTimeout(r, delay));\n if (await this.isHealthy()) return true;\n }\n return false;\n }\n\n spawnDaemon(): void {\n const pluginRoot = new AgentRegistry().resolvePluginRoot();\n const daemonScript = pluginRoot\n ? path.join(pluginRoot, 'dist', 'src', 'daemon', 'main.js')\n : path.resolve(import.meta.dirname, '..', 'daemon', 'main.js');\n if (!fs.existsSync(daemonScript)) return;\n\n const child = spawn('node', [daemonScript, '--vault', this.vaultDir], {\n detached: true,\n stdio: 'ignore',\n });\n child.unref();\n }\n\n private readDaemonJson(): DaemonInfo | null {\n try {\n const jsonPath = path.join(this.vaultDir, 'daemon.json');\n const content = fs.readFileSync(jsonPath, 'utf-8');\n const info = JSON.parse(content);\n if (typeof info.port !== 'number') return null;\n return info as DaemonInfo;\n } catch {\n return null;\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -31,6 +31,7 @@ Commands:
31
31
  restart Restart the daemon
32
32
  rebuild Reindex the entire vault
33
33
  reprocess [options] Re-extract observations and re-index sessions
34
+ version Show plugin version
34
35
  `;
35
36
  async function main() {
36
37
  const [cmd, ...args] = process.argv.slice(2);
@@ -38,8 +39,13 @@ async function main() {
38
39
  process.stdout.write(USAGE);
39
40
  return;
40
41
  }
41
- if (cmd === "init") return (await import("./init-LLLHUNSY.js")).run(args);
42
+ if (cmd === "init") return (await import("./init-HTKEL3YT.js")).run(args);
42
43
  if (cmd === "detect-providers") return (await import("./detect-providers-6RQCQZOI.js")).run(args);
44
+ if (cmd === "version" || cmd === "--version" || cmd === "-v") {
45
+ const { getPluginVersion } = await import("./version-N55WTRG5.js");
46
+ console.log(getPluginVersion());
47
+ return;
48
+ }
43
49
  const vaultDir = resolveVaultDir();
44
50
  if (!fs.existsSync(path.join(vaultDir, "myco.yaml"))) {
45
51
  console.error(`No myco.yaml found in ${vaultDir}. Run 'myco init' first.`);
@@ -53,17 +59,17 @@ async function main() {
53
59
  case "stats":
54
60
  return (await import("./stats-7VEZN2WF.js")).run(args, vaultDir);
55
61
  case "search":
56
- return (await import("./search-W3ECVSTH.js")).run(args, vaultDir);
62
+ return (await import("./search-YCKNX2WS.js")).run(args, vaultDir);
57
63
  case "vectors":
58
- return (await import("./search-W3ECVSTH.js")).runVectors(args, vaultDir);
64
+ return (await import("./search-YCKNX2WS.js")).runVectors(args, vaultDir);
59
65
  case "session":
60
66
  return (await import("./session-5GI2YU6R.js")).run(args, vaultDir);
61
67
  case "restart":
62
- return (await import("./restart-NH5MX45I.js")).run(args, vaultDir);
68
+ return (await import("./restart-C5BCVG3A.js")).run(args, vaultDir);
63
69
  case "rebuild":
64
- return (await import("./rebuild-3367GP5R.js")).run(args, vaultDir);
70
+ return (await import("./rebuild-TXMFYBOU.js")).run(args, vaultDir);
65
71
  case "reprocess":
66
- return (await import("./reprocess-EM5RIRH4.js")).run(args, vaultDir);
72
+ return (await import("./reprocess-ARKHGDWF.js")).run(args, vaultDir);
67
73
  case "logs":
68
74
  return (await import("./logs-BSTBZHDR.js")).run(args, vaultDir);
69
75
  default:
@@ -76,4 +82,4 @@ main().catch((err) => {
76
82
  console.error(`myco: ${err.message}`);
77
83
  process.exit(1);
78
84
  });
79
- //# sourceMappingURL=cli-ERAS5H43.js.map
85
+ //# sourceMappingURL=cli-4RR3QBYK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { loadEnv } from './cli/shared.js';\nimport { resolveVaultDir } from './vault/resolve.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nloadEnv();\n\nconst USAGE = `Usage: myco <command> [args]\n\nCommands:\n init [options] Initialize a new vault\n config <get|set> [args] Get or set vault config values\n detect-providers Detect available LLM/embedding providers (JSON)\n verify Test LLM and embedding connectivity\n stats Vault health, index counts, vector count\n search <query> Combined FTS + vector search with scores\n vectors <query> Raw vector search with similarity scores\n session [id|latest] Show a session note\n logs [options] View daemon logs\n restart Restart the daemon\n rebuild Reindex the entire vault\n reprocess [options] Re-extract observations and re-index sessions\n version Show plugin version\n`;\n\nasync function main(): Promise<void> {\n const [cmd, ...args] = process.argv.slice(2);\n if (!cmd || cmd === '--help' || cmd === '-h') {\n process.stdout.write(USAGE);\n return;\n }\n\n if (cmd === 'init') return (await import('./cli/init.js')).run(args);\n if (cmd === 'detect-providers') return (await import('./cli/detect-providers.js')).run(args);\n if (cmd === 'version' || cmd === '--version' || cmd === '-v') {\n const { getPluginVersion } = await import('./version.js');\n console.log(getPluginVersion());\n return;\n }\n\n const vaultDir = resolveVaultDir();\n if (!fs.existsSync(path.join(vaultDir, 'myco.yaml'))) {\n console.error(`No myco.yaml found in ${vaultDir}. Run 'myco init' first.`);\n process.exit(1);\n }\n\n switch (cmd) {\n case 'config': return (await import('./cli/config.js')).run(args, vaultDir);\n case 'verify': return (await import('./cli/verify.js')).run(args, vaultDir);\n case 'stats': return (await import('./cli/stats.js')).run(args, vaultDir);\n case 'search': return (await import('./cli/search.js')).run(args, vaultDir);\n case 'vectors': return (await import('./cli/search.js')).runVectors(args, vaultDir);\n case 'session': return (await import('./cli/session.js')).run(args, vaultDir);\n case 'restart': return (await import('./cli/restart.js')).run(args, vaultDir);\n case 'rebuild': return (await import('./cli/rebuild.js')).run(args, vaultDir);\n case 'reprocess': return (await import('./cli/reprocess.js')).run(args, vaultDir);\n case 'logs': return (await import('./cli/logs.js')).run(args, vaultDir);\n default:\n console.error(`Unknown command: ${cmd}`);\n process.stdout.write(USAGE);\n process.exit(1);\n }\n}\n\nmain().catch((err) => {\n console.error(`myco: ${(err as Error).message}`);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;;;;;;;;AAGA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,QAAQ;AAER,IAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBd,eAAe,OAAsB;AACnC,QAAM,CAAC,KAAK,GAAG,IAAI,IAAI,QAAQ,KAAK,MAAM,CAAC;AAC3C,MAAI,CAAC,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC5C,YAAQ,OAAO,MAAM,KAAK;AAC1B;AAAA,EACF;AAEA,MAAI,QAAQ,OAAQ,SAAQ,MAAM,OAAO,oBAAe,GAAG,IAAI,IAAI;AACnE,MAAI,QAAQ,mBAAoB,SAAQ,MAAM,OAAO,gCAA2B,GAAG,IAAI,IAAI;AAC3F,MAAI,QAAQ,aAAa,QAAQ,eAAe,QAAQ,MAAM;AAC5D,UAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,uBAAc;AACxD,YAAQ,IAAI,iBAAiB,CAAC;AAC9B;AAAA,EACF;AAEA,QAAM,WAAW,gBAAgB;AACjC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,UAAU,WAAW,CAAC,GAAG;AACpD,YAAQ,MAAM,yBAAyB,QAAQ,0BAA0B;AACzE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,KAAK;AAAA,IACX,KAAK;AAAU,cAAQ,MAAM,OAAO,sBAAiB,GAAG,IAAI,MAAM,QAAQ;AAAA,IAC1E,KAAK;AAAU,cAAQ,MAAM,OAAO,sBAAiB,GAAG,IAAI,MAAM,QAAQ;AAAA,IAC1E,KAAK;AAAS,cAAQ,MAAM,OAAO,qBAAgB,GAAG,IAAI,MAAM,QAAQ;AAAA,IACxE,KAAK;AAAU,cAAQ,MAAM,OAAO,sBAAiB,GAAG,IAAI,MAAM,QAAQ;AAAA,IAC1E,KAAK;AAAW,cAAQ,MAAM,OAAO,sBAAiB,GAAG,WAAW,MAAM,QAAQ;AAAA,IAClF,KAAK;AAAW,cAAQ,MAAM,OAAO,uBAAkB,GAAG,IAAI,MAAM,QAAQ;AAAA,IAC5E,KAAK;AAAW,cAAQ,MAAM,OAAO,uBAAkB,GAAG,IAAI,MAAM,QAAQ;AAAA,IAC5E,KAAK;AAAW,cAAQ,MAAM,OAAO,uBAAkB,GAAG,IAAI,MAAM,QAAQ;AAAA,IAC5E,KAAK;AAAa,cAAQ,MAAM,OAAO,yBAAoB,GAAG,IAAI,MAAM,QAAQ;AAAA,IAChF,KAAK;AAAQ,cAAQ,MAAM,OAAO,oBAAe,GAAG,IAAI,MAAM,QAAQ;AAAA,IACtE;AACE,cAAQ,MAAM,oBAAoB,GAAG,EAAE;AACvC,cAAQ,OAAO,MAAM,KAAK;AAC1B,cAAQ,KAAK,CAAC;AAAA,EAClB;AACF;AAEA,KAAK,EAAE,MAAM,CAAC,QAAQ;AACpB,UAAQ,MAAM,SAAU,IAAc,OAAO,EAAE;AAC/C,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}
@@ -1,11 +1,12 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  DaemonClient
4
- } from "./chunk-NTYYYC32.js";
4
+ } from "./chunk-5BGQJOJN.js";
5
+ import "./chunk-2UEJVXXE.js";
5
6
  import "./chunk-2QEJKG7R.js";
6
7
  import "./chunk-Q7BEFSOV.js";
7
8
  import "./chunk-PZUWP5VK.js";
8
9
  export {
9
10
  DaemonClient
10
11
  };
11
- //# sourceMappingURL=client-HORA3CC4.js.map
12
+ //# sourceMappingURL=client-43ML4EHJ.js.map
@@ -1,7 +1,4 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
- import {
3
- initFts
4
- } from "./chunk-6FQISQNA.js";
5
2
  import {
6
3
  DASHBOARD_CONTENT,
7
4
  PROVIDER_DEFAULTS,
@@ -11,6 +8,9 @@ import {
11
8
  import {
12
9
  parseStringFlag
13
10
  } from "./chunk-SAKJMNSR.js";
11
+ import {
12
+ initFts
13
+ } from "./chunk-6FQISQNA.js";
14
14
  import {
15
15
  MycoIndex
16
16
  } from "./chunk-PA3VMINE.js";
@@ -117,4 +117,4 @@ async function run(args) {
117
117
  export {
118
118
  run
119
119
  };
120
- //# sourceMappingURL=init-LLLHUNSY.js.map
120
+ //# sourceMappingURL=init-HTKEL3YT.js.map
@@ -22,22 +22,22 @@ import {
22
22
  import {
23
23
  generateEmbedding
24
24
  } from "./chunk-RGVBGTD6.js";
25
+ import {
26
+ VectorIndex
27
+ } from "./chunk-XQXXF6MU.js";
25
28
  import {
26
29
  DaemonLogger
27
30
  } from "./chunk-5EZ7QF6J.js";
28
31
  import {
29
32
  initFts
30
33
  } from "./chunk-6FQISQNA.js";
34
+ import {
35
+ MycoIndex
36
+ } from "./chunk-PA3VMINE.js";
31
37
  import {
32
38
  createEmbeddingProvider,
33
39
  createLlmProvider
34
40
  } from "./chunk-N6IAW33G.js";
35
- import {
36
- VectorIndex
37
- } from "./chunk-XQXXF6MU.js";
38
- import {
39
- MycoIndex
40
- } from "./chunk-PA3VMINE.js";
41
41
  import "./chunk-XW3OL55U.js";
42
42
  import {
43
43
  external_exports,
@@ -49,6 +49,9 @@ import {
49
49
  import {
50
50
  EventBuffer
51
51
  } from "./chunk-I7PMGO6S.js";
52
+ import {
53
+ getPluginVersion
54
+ } from "./chunk-2UEJVXXE.js";
52
55
  import {
53
56
  claudeCodeAdapter,
54
57
  createPerProjectAdapter,
@@ -79,6 +82,7 @@ import fs from "fs";
79
82
  import path from "path";
80
83
  var DaemonServer = class {
81
84
  port = 0;
85
+ version;
82
86
  server = null;
83
87
  vaultDir;
84
88
  logger;
@@ -86,6 +90,7 @@ var DaemonServer = class {
86
90
  constructor(config) {
87
91
  this.vaultDir = config.vaultDir;
88
92
  this.logger = config.logger;
93
+ this.version = getPluginVersion();
89
94
  this.registerDefaultRoutes();
90
95
  }
91
96
  registerRoute(method, routePath, handler) {
@@ -120,6 +125,7 @@ var DaemonServer = class {
120
125
  registerDefaultRoutes() {
121
126
  this.registerRoute("GET", "/health", async () => ({
122
127
  myco: true,
128
+ version: this.version,
123
129
  pid: process.pid,
124
130
  uptime: process.uptime()
125
131
  }));
@@ -2940,4 +2946,4 @@ export {
2940
2946
  chokidar/index.js:
2941
2947
  (*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) *)
2942
2948
  */
2943
- //# sourceMappingURL=main-D4X6XWRT.js.map
2949
+ //# sourceMappingURL=main-DTWU4OAH.js.map