@goondocks/myco 0.4.4 → 0.5.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.
Files changed (84) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +5 -1
  4. package/dist/{chunk-TK2ZYIAL.js → chunk-7KQB22DP.js} +2 -2
  5. package/dist/{chunk-TDLQBGKA.js → chunk-B6WVNDA5.js} +10 -2
  6. package/dist/{chunk-TDLQBGKA.js.map → chunk-B6WVNDA5.js.map} +1 -1
  7. package/dist/chunk-FIA5NTRH.js +159 -0
  8. package/dist/chunk-FIA5NTRH.js.map +1 -0
  9. package/dist/{chunk-5FIIK27E.js → chunk-FIRMTYFH.js} +3 -3
  10. package/dist/{chunk-6CAKKNGD.js → chunk-HJG7Z6SJ.js} +2 -2
  11. package/dist/{chunk-3F63SFZZ.js → chunk-HL2S5QZG.js} +8 -4
  12. package/dist/chunk-HL2S5QZG.js.map +1 -0
  13. package/dist/{chunk-42R7KVAW.js → chunk-IURC35BF.js} +2 -2
  14. package/dist/{chunk-OPO47BVS.js → chunk-JI6M2L2W.js} +2 -2
  15. package/dist/{chunk-PD7LV22R.js → chunk-KYL67SKZ.js} +50 -50
  16. package/dist/chunk-KYL67SKZ.js.map +1 -0
  17. package/dist/{chunk-XIIVIMFC.js → chunk-ND4VK6C7.js} +2 -2
  18. package/dist/{chunk-DKHYIA2V.js → chunk-R6LQT3U7.js} +11 -11
  19. package/dist/{chunk-OSZRLHIJ.js → chunk-RCV2I4AI.js} +3 -3
  20. package/dist/{chunk-EQVQEFOA.js → chunk-X6TKHO22.js} +2 -2
  21. package/dist/{chunk-KDWBZSOB.js → chunk-ZWUFTOG3.js} +4 -4
  22. package/dist/{cli-WOM4Z2Z4.js → cli-BLYNNKGJ.js} +21 -18
  23. package/dist/cli-BLYNNKGJ.js.map +1 -0
  24. package/dist/{client-XCNF6NFT.js → client-5GB4WVXE.js} +5 -5
  25. package/dist/curate-S4HOYWXA.js +231 -0
  26. package/dist/curate-S4HOYWXA.js.map +1 -0
  27. package/dist/{detect-providers-CQSPTW2B.js → detect-providers-BIHYFK5M.js} +3 -3
  28. package/dist/{digest-WTS6S4XP.js → digest-7NKYXM6G.js} +8 -8
  29. package/dist/{init-VPLUEULI.js → init-HPQ77WWF.js} +5 -5
  30. package/dist/{main-OGXH6XWO.js → main-NFQ4II75.js} +36 -14
  31. package/dist/main-NFQ4II75.js.map +1 -0
  32. package/dist/{rebuild-Z4YUY6HT.js → rebuild-KQ6G2GZM.js} +4 -4
  33. package/dist/{reprocess-DMGPZTLC.js → reprocess-ZL4HKTSC.js} +13 -13
  34. package/dist/{restart-QCQQ55KX.js → restart-FYW662DR.js} +6 -6
  35. package/dist/{search-ACEFQOUW.js → search-E5JQMTXV.js} +4 -4
  36. package/dist/{server-BQ3DWKZ6.js → server-TV3D35HZ.js} +30 -9
  37. package/dist/{server-BQ3DWKZ6.js.map → server-TV3D35HZ.js.map} +1 -1
  38. package/dist/{session-start-BXRTKS4X.js → session-start-5MFEOVQ5.js} +6 -6
  39. package/dist/{setup-digest-EJXSQGZ5.js → setup-digest-DZAFIBEF.js} +5 -5
  40. package/dist/{setup-llm-P3MLWUDR.js → setup-llm-4BZM33YT.js} +5 -5
  41. package/dist/src/cli.js +4 -4
  42. package/dist/src/daemon/main.js +4 -4
  43. package/dist/src/hooks/post-tool-use.js +5 -5
  44. package/dist/src/hooks/session-end.js +5 -5
  45. package/dist/src/hooks/session-start.js +4 -4
  46. package/dist/src/hooks/stop.js +5 -5
  47. package/dist/src/hooks/user-prompt-submit.js +5 -5
  48. package/dist/src/mcp/server.js +4 -4
  49. package/dist/src/prompts/supersession.md +32 -0
  50. package/dist/{stats-3FAP5FKV.js → stats-ZIIJ2GB3.js} +5 -5
  51. package/dist/{verify-3FTCOULE.js → verify-RACBFT2P.js} +4 -4
  52. package/dist/{version-AL67JH7X.js → version-HJTVNPOO.js} +4 -4
  53. package/package.json +1 -1
  54. package/skills/myco/SKILL.md +20 -1
  55. package/skills/myco/references/cli-usage.md +48 -0
  56. package/skills/myco/references/wisdom.md +11 -1
  57. package/dist/chunk-3F63SFZZ.js.map +0 -1
  58. package/dist/chunk-PD7LV22R.js.map +0 -1
  59. package/dist/cli-WOM4Z2Z4.js.map +0 -1
  60. package/dist/main-OGXH6XWO.js.map +0 -1
  61. /package/dist/{chunk-TK2ZYIAL.js.map → chunk-7KQB22DP.js.map} +0 -0
  62. /package/dist/{chunk-5FIIK27E.js.map → chunk-FIRMTYFH.js.map} +0 -0
  63. /package/dist/{chunk-6CAKKNGD.js.map → chunk-HJG7Z6SJ.js.map} +0 -0
  64. /package/dist/{chunk-42R7KVAW.js.map → chunk-IURC35BF.js.map} +0 -0
  65. /package/dist/{chunk-OPO47BVS.js.map → chunk-JI6M2L2W.js.map} +0 -0
  66. /package/dist/{chunk-XIIVIMFC.js.map → chunk-ND4VK6C7.js.map} +0 -0
  67. /package/dist/{chunk-DKHYIA2V.js.map → chunk-R6LQT3U7.js.map} +0 -0
  68. /package/dist/{chunk-OSZRLHIJ.js.map → chunk-RCV2I4AI.js.map} +0 -0
  69. /package/dist/{chunk-EQVQEFOA.js.map → chunk-X6TKHO22.js.map} +0 -0
  70. /package/dist/{chunk-KDWBZSOB.js.map → chunk-ZWUFTOG3.js.map} +0 -0
  71. /package/dist/{client-XCNF6NFT.js.map → client-5GB4WVXE.js.map} +0 -0
  72. /package/dist/{detect-providers-CQSPTW2B.js.map → detect-providers-BIHYFK5M.js.map} +0 -0
  73. /package/dist/{digest-WTS6S4XP.js.map → digest-7NKYXM6G.js.map} +0 -0
  74. /package/dist/{init-VPLUEULI.js.map → init-HPQ77WWF.js.map} +0 -0
  75. /package/dist/{rebuild-Z4YUY6HT.js.map → rebuild-KQ6G2GZM.js.map} +0 -0
  76. /package/dist/{reprocess-DMGPZTLC.js.map → reprocess-ZL4HKTSC.js.map} +0 -0
  77. /package/dist/{restart-QCQQ55KX.js.map → restart-FYW662DR.js.map} +0 -0
  78. /package/dist/{search-ACEFQOUW.js.map → search-E5JQMTXV.js.map} +0 -0
  79. /package/dist/{session-start-BXRTKS4X.js.map → session-start-5MFEOVQ5.js.map} +0 -0
  80. /package/dist/{setup-digest-EJXSQGZ5.js.map → setup-digest-DZAFIBEF.js.map} +0 -0
  81. /package/dist/{setup-llm-P3MLWUDR.js.map → setup-llm-4BZM33YT.js.map} +0 -0
  82. /package/dist/{stats-3FAP5FKV.js.map → stats-ZIIJ2GB3.js.map} +0 -0
  83. /package/dist/{verify-3FTCOULE.js.map → verify-RACBFT2P.js.map} +0 -0
  84. /package/dist/{version-AL67JH7X.js.map → version-HJTVNPOO.js.map} +0 -0
@@ -1,12 +1,4 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
- import {
3
- buildClassificationPrompt,
4
- buildExtractionPrompt,
5
- buildSummaryPrompt,
6
- buildTitlePrompt,
7
- extractJson,
8
- stripReasoningTokens
9
- } from "./chunk-PD7LV22R.js";
10
2
  import {
11
3
  formatSporeBody,
12
4
  sessionNoteId
@@ -14,6 +6,14 @@ import {
14
6
  import {
15
7
  indexNote
16
8
  } from "./chunk-JJL6AMDA.js";
9
+ import {
10
+ buildClassificationPrompt,
11
+ buildExtractionPrompt,
12
+ buildSummaryPrompt,
13
+ buildTitlePrompt,
14
+ extractJson,
15
+ stripReasoningTokens
16
+ } from "./chunk-KYL67SKZ.js";
17
17
  import {
18
18
  ARTIFACT_TYPES
19
19
  } from "./chunk-2AMAOSRF.js";
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-6UJWI4IW.js";
23
23
  import {
24
24
  AgentRegistry
25
- } from "./chunk-EQVQEFOA.js";
25
+ } from "./chunk-X6TKHO22.js";
26
26
  import {
27
27
  AI_RESPONSE_PREVIEW_CHARS,
28
28
  CHARS_PER_TOKEN,
@@ -30,7 +30,7 @@ import {
30
30
  LLM_REASONING_MODE,
31
31
  PROMPT_PREVIEW_CHARS,
32
32
  estimateTokens
33
- } from "./chunk-TDLQBGKA.js";
33
+ } from "./chunk-B6WVNDA5.js";
34
34
 
35
35
  // src/daemon/processor.ts
36
36
  var SUMMARIZATION_FAILED_MARKER = "summarization failed";
@@ -251,4 +251,4 @@ export {
251
251
  extractTurnsFromBuffer,
252
252
  writeObservationNotes
253
253
  };
254
- //# sourceMappingURL=chunk-DKHYIA2V.js.map
254
+ //# sourceMappingURL=chunk-R6LQT3U7.js.map
@@ -2,10 +2,10 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
2
2
  import {
3
3
  LmStudioBackend,
4
4
  OllamaBackend
5
- } from "./chunk-OPO47BVS.js";
5
+ } from "./chunk-JI6M2L2W.js";
6
6
  import {
7
7
  LLM_REQUEST_TIMEOUT_MS
8
- } from "./chunk-TDLQBGKA.js";
8
+ } from "./chunk-B6WVNDA5.js";
9
9
 
10
10
  // node_modules/@anthropic-ai/sdk/internal/tslib.mjs
11
11
  function __classPrivateFieldSet(receiver, state, value, kind, f) {
@@ -4911,4 +4911,4 @@ export {
4911
4911
  createLlmProvider,
4912
4912
  createEmbeddingProvider
4913
4913
  };
4914
- //# sourceMappingURL=chunk-OSZRLHIJ.js.map
4914
+ //# sourceMappingURL=chunk-RCV2I4AI.js.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  PROMPT_PREVIEW_CHARS
4
- } from "./chunk-TDLQBGKA.js";
4
+ } from "./chunk-B6WVNDA5.js";
5
5
 
6
6
  // src/agents/adapter.ts
7
7
  import fs from "fs";
@@ -351,4 +351,4 @@ export {
351
351
  claudeCodeAdapter,
352
352
  AgentRegistry
353
353
  };
354
- //# sourceMappingURL=chunk-EQVQEFOA.js.map
354
+ //# sourceMappingURL=chunk-X6TKHO22.js.map
@@ -1,16 +1,16 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  getPluginVersion
4
- } from "./chunk-TK2ZYIAL.js";
4
+ } from "./chunk-7KQB22DP.js";
5
5
  import {
6
6
  AgentRegistry
7
- } from "./chunk-EQVQEFOA.js";
7
+ } from "./chunk-X6TKHO22.js";
8
8
  import {
9
9
  DAEMON_CLIENT_TIMEOUT_MS,
10
10
  DAEMON_HEALTH_CHECK_TIMEOUT_MS,
11
11
  DAEMON_HEALTH_RETRY_DELAYS,
12
12
  DAEMON_STALE_GRACE_PERIOD_MS
13
- } from "./chunk-TDLQBGKA.js";
13
+ } from "./chunk-B6WVNDA5.js";
14
14
 
15
15
  // src/hooks/client.ts
16
16
  import fs from "fs";
@@ -178,4 +178,4 @@ var DaemonClient = class {
178
178
  export {
179
179
  DaemonClient
180
180
  };
181
- //# sourceMappingURL=chunk-KDWBZSOB.js.map
181
+ //# sourceMappingURL=chunk-ZWUFTOG3.js.map
@@ -2,14 +2,14 @@
2
2
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
3
3
  import {
4
4
  loadEnv
5
- } from "./chunk-5FIIK27E.js";
5
+ } from "./chunk-FIRMTYFH.js";
6
6
  import "./chunk-SAKJMNSR.js";
7
- import "./chunk-OPO47BVS.js";
7
+ import "./chunk-JI6M2L2W.js";
8
8
  import {
9
9
  resolveVaultDir
10
10
  } from "./chunk-N33KUCFP.js";
11
- import "./chunk-EQVQEFOA.js";
12
- import "./chunk-TDLQBGKA.js";
11
+ import "./chunk-X6TKHO22.js";
12
+ import "./chunk-B6WVNDA5.js";
13
13
  import "./chunk-PZUWP5VK.js";
14
14
 
15
15
  // src/cli.ts
@@ -21,6 +21,7 @@ var USAGE = `Usage: myco <command> [args]
21
21
  Commands:
22
22
  init [options] Initialize a new vault
23
23
  config <get|set> [args] Get or set vault config values
24
+ curate [options] Scan vault and supersede stale spores (--dry-run)
24
25
  detect-providers Detect available LLM/embedding providers (JSON)
25
26
  verify Test LLM and embedding connectivity
26
27
  stats Vault health, index counts, vector count
@@ -42,10 +43,10 @@ async function main() {
42
43
  process.stdout.write(USAGE);
43
44
  return;
44
45
  }
45
- if (cmd === "init") return (await import("./init-VPLUEULI.js")).run(args);
46
- if (cmd === "detect-providers") return (await import("./detect-providers-CQSPTW2B.js")).run(args);
46
+ if (cmd === "init") return (await import("./init-HPQ77WWF.js")).run(args);
47
+ if (cmd === "detect-providers") return (await import("./detect-providers-BIHYFK5M.js")).run(args);
47
48
  if (cmd === "version" || cmd === "--version" || cmd === "-v") {
48
- const { getPluginVersion } = await import("./version-AL67JH7X.js");
49
+ const { getPluginVersion } = await import("./version-HJTVNPOO.js");
49
50
  console.log(getPluginVersion());
50
51
  return;
51
52
  }
@@ -57,28 +58,30 @@ async function main() {
57
58
  switch (cmd) {
58
59
  case "config":
59
60
  return (await import("./config-5FGLQGCW.js")).run(args, vaultDir);
61
+ case "curate":
62
+ return (await import("./curate-S4HOYWXA.js")).run(args, vaultDir);
60
63
  case "verify":
61
- return (await import("./verify-3FTCOULE.js")).run(args, vaultDir);
64
+ return (await import("./verify-RACBFT2P.js")).run(args, vaultDir);
62
65
  case "stats":
63
- return (await import("./stats-3FAP5FKV.js")).run(args, vaultDir);
66
+ return (await import("./stats-ZIIJ2GB3.js")).run(args, vaultDir);
64
67
  case "search":
65
- return (await import("./search-ACEFQOUW.js")).run(args, vaultDir);
68
+ return (await import("./search-E5JQMTXV.js")).run(args, vaultDir);
66
69
  case "vectors":
67
- return (await import("./search-ACEFQOUW.js")).runVectors(args, vaultDir);
70
+ return (await import("./search-E5JQMTXV.js")).runVectors(args, vaultDir);
68
71
  case "session":
69
72
  return (await import("./session-QF6MILAC.js")).run(args, vaultDir);
70
73
  case "setup-llm":
71
- return (await import("./setup-llm-P3MLWUDR.js")).run(args, vaultDir);
74
+ return (await import("./setup-llm-4BZM33YT.js")).run(args, vaultDir);
72
75
  case "setup-digest":
73
- return (await import("./setup-digest-EJXSQGZ5.js")).run(args, vaultDir);
76
+ return (await import("./setup-digest-DZAFIBEF.js")).run(args, vaultDir);
74
77
  case "digest":
75
- return (await import("./digest-WTS6S4XP.js")).run(args, vaultDir);
78
+ return (await import("./digest-7NKYXM6G.js")).run(args, vaultDir);
76
79
  case "restart":
77
- return (await import("./restart-QCQQ55KX.js")).run(args, vaultDir);
80
+ return (await import("./restart-FYW662DR.js")).run(args, vaultDir);
78
81
  case "rebuild":
79
- return (await import("./rebuild-Z4YUY6HT.js")).run(args, vaultDir);
82
+ return (await import("./rebuild-KQ6G2GZM.js")).run(args, vaultDir);
80
83
  case "reprocess":
81
- return (await import("./reprocess-DMGPZTLC.js")).run(args, vaultDir);
84
+ return (await import("./reprocess-ZL4HKTSC.js")).run(args, vaultDir);
82
85
  case "logs":
83
86
  return (await import("./logs-BSTBZHDR.js")).run(args, vaultDir);
84
87
  default:
@@ -91,4 +94,4 @@ main().catch((err) => {
91
94
  console.error(`myco: ${err.message}`);
92
95
  process.exit(1);
93
96
  });
94
- //# sourceMappingURL=cli-WOM4Z2Z4.js.map
97
+ //# sourceMappingURL=cli-BLYNNKGJ.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 curate [options] Scan vault and supersede stale spores (--dry-run)\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 setup-llm [options] Configure LLM and embedding providers\n setup-digest [options] Configure digest and capture settings\n digest [options] Run a digest cycle (--tier N, --full)\n restart Restart the daemon\n rebuild Reindex the entire vault\n reprocess [options] Re-extract observations, regenerate summaries, re-index\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 'curate': return (await import('./cli/curate.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 'setup-llm': return (await import('./cli/setup-llm.js')).run(args, vaultDir);\n case 'setup-digest': return (await import('./cli/setup-digest.js')).run(args, vaultDir);\n case 'digest': return (await import('./cli/digest.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;AAAA;AAAA;AAAA;AAAA;AAsBd,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;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;AAAa,cAAQ,MAAM,OAAO,yBAAoB,GAAG,IAAI,MAAM,QAAQ;AAAA,IAChF,KAAK;AAAgB,cAAQ,MAAM,OAAO,4BAAuB,GAAG,IAAI,MAAM,QAAQ;AAAA,IACtF,KAAK;AAAU,cAAQ,MAAM,OAAO,sBAAiB,GAAG,IAAI,MAAM,QAAQ;AAAA,IAC1E,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,12 +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-KDWBZSOB.js";
5
- import "./chunk-TK2ZYIAL.js";
6
- import "./chunk-EQVQEFOA.js";
7
- import "./chunk-TDLQBGKA.js";
4
+ } from "./chunk-ZWUFTOG3.js";
5
+ import "./chunk-7KQB22DP.js";
6
+ import "./chunk-X6TKHO22.js";
7
+ import "./chunk-B6WVNDA5.js";
8
8
  import "./chunk-PZUWP5VK.js";
9
9
  export {
10
10
  DaemonClient
11
11
  };
12
- //# sourceMappingURL=client-XCNF6NFT.js.map
12
+ //# sourceMappingURL=client-5GB4WVXE.js.map
@@ -0,0 +1,231 @@
1
+ import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ isActiveSpore,
4
+ supersedeSpore,
5
+ supersededIdsSchema
6
+ } from "./chunk-FIA5NTRH.js";
7
+ import "./chunk-JJL6AMDA.js";
8
+ import {
9
+ generateEmbedding
10
+ } from "./chunk-RGVBGTD6.js";
11
+ import {
12
+ VectorIndex
13
+ } from "./chunk-XQXXF6MU.js";
14
+ import {
15
+ loadPrompt,
16
+ stripReasoningTokens
17
+ } from "./chunk-KYL67SKZ.js";
18
+ import "./chunk-2AMAOSRF.js";
19
+ import {
20
+ createEmbeddingProvider,
21
+ createLlmProvider
22
+ } from "./chunk-RCV2I4AI.js";
23
+ import {
24
+ MycoIndex
25
+ } from "./chunk-AK6GNLPV.js";
26
+ import "./chunk-JI6M2L2W.js";
27
+ import {
28
+ loadConfig
29
+ } from "./chunk-TBRZAJ7W.js";
30
+ import "./chunk-6UJWI4IW.js";
31
+ import {
32
+ CURATION_CLUSTER_SIMILARITY,
33
+ EMBEDDING_INPUT_LIMIT,
34
+ LLM_REASONING_MODE,
35
+ SUPERSESSION_MAX_TOKENS
36
+ } from "./chunk-B6WVNDA5.js";
37
+ import "./chunk-PZUWP5VK.js";
38
+
39
+ // src/cli/curate.ts
40
+ import path from "path";
41
+ var EMBEDDING_BATCH_SIZE = 10;
42
+ function cosineSimilarity(a, b) {
43
+ let dot = 0, normA = 0, normB = 0;
44
+ for (let i = 0; i < a.length; i++) {
45
+ dot += a[i] * b[i];
46
+ normA += a[i] * a[i];
47
+ normB += b[i] * b[i];
48
+ }
49
+ return dot / (Math.sqrt(normA) * Math.sqrt(normB));
50
+ }
51
+ function updateCentroid(spores) {
52
+ if (spores.length === 0) return [];
53
+ const dim = spores[0].embedding.length;
54
+ const centroid = new Array(dim).fill(0);
55
+ for (const s of spores) {
56
+ for (let i = 0; i < dim; i++) {
57
+ centroid[i] += s.embedding[i];
58
+ }
59
+ }
60
+ for (let i = 0; i < dim; i++) {
61
+ centroid[i] /= spores.length;
62
+ }
63
+ return centroid;
64
+ }
65
+ function clusterSpores(spores) {
66
+ const clusters = [];
67
+ for (const spore of spores) {
68
+ let bestCluster = null;
69
+ let bestSimilarity = -1;
70
+ for (const cluster of clusters) {
71
+ const sim = cosineSimilarity(spore.embedding, cluster.centroid);
72
+ if (sim > bestSimilarity) {
73
+ bestSimilarity = sim;
74
+ bestCluster = cluster;
75
+ }
76
+ }
77
+ if (bestCluster !== null && bestSimilarity >= CURATION_CLUSTER_SIMILARITY) {
78
+ bestCluster.spores.push(spore);
79
+ bestCluster.centroid = updateCentroid(bestCluster.spores);
80
+ } else {
81
+ clusters.push({ spores: [spore], centroid: [...spore.embedding] });
82
+ }
83
+ }
84
+ return clusters;
85
+ }
86
+ async function run(args, vaultDir) {
87
+ const isDryRun = args.includes("--dry-run");
88
+ const config = loadConfig(vaultDir);
89
+ const index = new MycoIndex(path.join(vaultDir, "index.db"));
90
+ const llmProvider = createLlmProvider(config.intelligence.llm);
91
+ const embeddingProvider = createEmbeddingProvider(config.intelligence.embedding);
92
+ let vectorIndex = null;
93
+ try {
94
+ const testEmbed = await embeddingProvider.embed("test");
95
+ vectorIndex = new VectorIndex(path.join(vaultDir, "vectors.db"), testEmbed.dimensions);
96
+ } catch (e) {
97
+ console.error(`Vector index unavailable: ${e.message}`);
98
+ console.error("Curate requires a working embedding provider.");
99
+ index.close();
100
+ process.exit(1);
101
+ }
102
+ try {
103
+ if (isDryRun) {
104
+ console.log("Dry run \u2014 no changes will be written.\n");
105
+ }
106
+ const allSpores = index.query({ type: "spore" });
107
+ const activeSpores = allSpores.filter((n) => isActiveSpore(n.frontmatter));
108
+ console.log(`Scanning ${activeSpores.length} active spores...`);
109
+ if (activeSpores.length === 0) {
110
+ console.log("No active spores found.");
111
+ return;
112
+ }
113
+ const sporesWithEmbeddings = [];
114
+ let embedFailures = 0;
115
+ for (let i = 0; i < activeSpores.length; i += EMBEDDING_BATCH_SIZE) {
116
+ const batch = activeSpores.slice(i, i + EMBEDDING_BATCH_SIZE);
117
+ const results = await Promise.allSettled(
118
+ batch.map(async (spore) => {
119
+ const text = spore.content.slice(0, EMBEDDING_INPUT_LIMIT);
120
+ const result = await generateEmbedding(embeddingProvider, text);
121
+ return { spore, embedding: result.embedding };
122
+ })
123
+ );
124
+ for (const result of results) {
125
+ if (result.status === "fulfilled") {
126
+ const { spore, embedding } = result.value;
127
+ sporesWithEmbeddings.push({
128
+ id: spore.id,
129
+ path: spore.path,
130
+ title: spore.title,
131
+ content: spore.content,
132
+ created: spore.created,
133
+ frontmatter: spore.frontmatter,
134
+ embedding
135
+ });
136
+ } else {
137
+ embedFailures++;
138
+ }
139
+ }
140
+ }
141
+ if (embedFailures > 0) {
142
+ console.log(`Warning: ${embedFailures} spore(s) could not be embedded and were skipped.`);
143
+ }
144
+ const byType = /* @__PURE__ */ new Map();
145
+ for (const spore of sporesWithEmbeddings) {
146
+ const obsType = spore.frontmatter["observation_type"] ?? "unknown";
147
+ if (!byType.has(obsType)) byType.set(obsType, []);
148
+ byType.get(obsType).push(spore);
149
+ }
150
+ const template = loadPrompt("supersession");
151
+ let totalClusters = 0;
152
+ let totalSuperseded = 0;
153
+ for (const [obsType, typeSpores] of byType) {
154
+ const clusters = clusterSpores(typeSpores);
155
+ const multiSpore = clusters.filter((c) => c.spores.length >= 2);
156
+ if (multiSpore.length === 0) continue;
157
+ console.log(`
158
+ Type: ${obsType} \u2014 ${typeSpores.length} spores, ${multiSpore.length} cluster(s) to evaluate`);
159
+ totalClusters += multiSpore.length;
160
+ for (const cluster of multiSpore) {
161
+ const sorted = [...cluster.spores].sort((a, b) => a.created.localeCompare(b.created));
162
+ const newest = sorted[sorted.length - 1];
163
+ const candidates = sorted.slice(0, sorted.length - 1);
164
+ const newSporeText = `[${newest.id}] ${newest.title}
165
+ ${newest.content}`;
166
+ const candidatesText = candidates.map((c) => `[${c.id}] ${c.title}
167
+ ${c.content}`).join("\n\n");
168
+ const prompt = template.replace("{{new_spore}}", newSporeText).replace("{{candidates}}", candidatesText);
169
+ let responseText;
170
+ try {
171
+ const response = await llmProvider.summarize(prompt, {
172
+ maxTokens: SUPERSESSION_MAX_TOKENS,
173
+ reasoning: LLM_REASONING_MODE
174
+ });
175
+ responseText = stripReasoningTokens(response.text);
176
+ } catch (err) {
177
+ console.log(` Warning: LLM call failed for cluster in ${obsType}: ${String(err)}`);
178
+ continue;
179
+ }
180
+ let rawIds;
181
+ try {
182
+ rawIds = JSON.parse(responseText);
183
+ } catch {
184
+ console.log(` Warning: Could not parse LLM response for cluster in ${obsType}`);
185
+ continue;
186
+ }
187
+ const parsed = supersededIdsSchema.safeParse(rawIds);
188
+ if (!parsed.success) {
189
+ console.log(` Warning: LLM response schema invalid for cluster in ${obsType}`);
190
+ continue;
191
+ }
192
+ const candidateMap = new Map(candidates.map((c) => [c.id, c]));
193
+ const validIds = parsed.data.filter((id) => candidateMap.has(id));
194
+ if (validIds.length === 0) continue;
195
+ for (const id of validIds) {
196
+ const candidate = candidateMap.get(id);
197
+ if (isDryRun) {
198
+ console.log(` [dry-run] Would supersede: ${candidate.title} (${id})`);
199
+ console.log(` Superseded by: ${newest.title} (${newest.id})`);
200
+ totalSuperseded++;
201
+ continue;
202
+ }
203
+ const wrote = supersedeSpore(id, newest.id, candidate.path, { index, vectorIndex, vaultDir });
204
+ if (!wrote) {
205
+ console.log(` Warning: file not found for ${id}, skipping write`);
206
+ continue;
207
+ }
208
+ console.log(` Superseded: ${candidate.title} (${id})`);
209
+ console.log(` By: ${newest.title} (${newest.id})`);
210
+ totalSuperseded++;
211
+ }
212
+ }
213
+ }
214
+ console.log(`
215
+ Curation complete:`);
216
+ console.log(` Scanned: ${activeSpores.length} active spores`);
217
+ console.log(` Clusters evaluated: ${totalClusters}`);
218
+ if (isDryRun) {
219
+ console.log(` Would supersede: ${totalSuperseded}`);
220
+ } else {
221
+ console.log(` Superseded: ${totalSuperseded}`);
222
+ }
223
+ } finally {
224
+ index.close();
225
+ vectorIndex?.close();
226
+ }
227
+ }
228
+ export {
229
+ run
230
+ };
231
+ //# sourceMappingURL=curate-S4HOYWXA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/curate.ts"],"sourcesContent":["/**\n * myco curate — scan the vault for stale spores and supersede them.\n *\n * Usage:\n * myco curate Scan and supersede stale spores\n * myco curate --dry-run Show what would be superseded without writing\n *\n * Algorithm:\n * 1. Load all active spores from the index\n * 2. Group by observation_type\n * 3. Within each group, embed spores and cluster by cosine similarity\n * 4. For each cluster with 2+ members, ask the LLM which are outdated\n * 5. Mark superseded: update frontmatter, append notice, re-index, remove vector\n */\nimport path from 'node:path';\nimport { loadConfig } from '../config/loader.js';\nimport { MycoIndex } from '../index/sqlite.js';\nimport { VectorIndex } from '../index/vectors.js';\nimport { createLlmProvider, createEmbeddingProvider } from '../intelligence/llm.js';\nimport { generateEmbedding } from '../intelligence/embeddings.js';\nimport { stripReasoningTokens } from '../intelligence/response.js';\nimport { loadPrompt } from '../prompts/index.js';\nimport { supersedeSpore, supersededIdsSchema, isActiveSpore } from '../vault/curation.js';\nimport {\n CURATION_CLUSTER_SIMILARITY,\n EMBEDDING_INPUT_LIMIT,\n SUPERSESSION_MAX_TOKENS,\n LLM_REASONING_MODE,\n} from '../constants.js';\n\n/** Max concurrent embedding requests to avoid overwhelming the provider. */\nconst EMBEDDING_BATCH_SIZE = 10;\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n let dot = 0, normA = 0, normB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n return dot / (Math.sqrt(normA) * Math.sqrt(normB));\n}\n\ninterface SporeWithEmbedding {\n id: string;\n path: string;\n title: string;\n content: string;\n created: string;\n frontmatter: Record<string, unknown>;\n embedding: number[];\n}\n\ninterface Cluster {\n spores: SporeWithEmbedding[];\n centroid: number[];\n}\n\nfunction updateCentroid(spores: SporeWithEmbedding[]): number[] {\n if (spores.length === 0) return [];\n const dim = spores[0].embedding.length;\n const centroid = new Array<number>(dim).fill(0);\n for (const s of spores) {\n for (let i = 0; i < dim; i++) {\n centroid[i] += s.embedding[i];\n }\n }\n for (let i = 0; i < dim; i++) {\n centroid[i] /= spores.length;\n }\n return centroid;\n}\n\nfunction clusterSpores(spores: SporeWithEmbedding[]): Cluster[] {\n const clusters: Cluster[] = [];\n\n for (const spore of spores) {\n let bestCluster: Cluster | null = null;\n let bestSimilarity = -1;\n\n for (const cluster of clusters) {\n const sim = cosineSimilarity(spore.embedding, cluster.centroid);\n if (sim > bestSimilarity) {\n bestSimilarity = sim;\n bestCluster = cluster;\n }\n }\n\n if (bestCluster !== null && bestSimilarity >= CURATION_CLUSTER_SIMILARITY) {\n bestCluster.spores.push(spore);\n bestCluster.centroid = updateCentroid(bestCluster.spores);\n } else {\n clusters.push({ spores: [spore], centroid: [...spore.embedding] });\n }\n }\n\n return clusters;\n}\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const isDryRun = args.includes('--dry-run');\n\n const config = loadConfig(vaultDir);\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n\n const llmProvider = createLlmProvider(config.intelligence.llm);\n const embeddingProvider = createEmbeddingProvider(config.intelligence.embedding);\n\n let vectorIndex: VectorIndex | null = null;\n try {\n const testEmbed = await embeddingProvider.embed('test');\n vectorIndex = new VectorIndex(path.join(vaultDir, 'vectors.db'), testEmbed.dimensions);\n } catch (e) {\n console.error(`Vector index unavailable: ${(e as Error).message}`);\n console.error('Curate requires a working embedding provider.');\n index.close();\n process.exit(1);\n }\n\n try {\n if (isDryRun) {\n console.log('Dry run — no changes will be written.\\n');\n }\n\n // 1. Query all spores and filter for active ones\n const allSpores = index.query({ type: 'spore' });\n const activeSpores = allSpores.filter((n) => isActiveSpore(n.frontmatter));\n\n console.log(`Scanning ${activeSpores.length} active spores...`);\n\n if (activeSpores.length === 0) {\n console.log('No active spores found.');\n return;\n }\n\n // 2. Embed all active spores (batched for concurrency)\n const sporesWithEmbeddings: SporeWithEmbedding[] = [];\n let embedFailures = 0;\n\n for (let i = 0; i < activeSpores.length; i += EMBEDDING_BATCH_SIZE) {\n const batch = activeSpores.slice(i, i + EMBEDDING_BATCH_SIZE);\n const results = await Promise.allSettled(\n batch.map(async (spore) => {\n const text = spore.content.slice(0, EMBEDDING_INPUT_LIMIT);\n const result = await generateEmbedding(embeddingProvider, text);\n return { spore, embedding: result.embedding };\n }),\n );\n\n for (const result of results) {\n if (result.status === 'fulfilled') {\n const { spore, embedding } = result.value;\n sporesWithEmbeddings.push({\n id: spore.id,\n path: spore.path,\n title: spore.title,\n content: spore.content,\n created: spore.created,\n frontmatter: spore.frontmatter,\n embedding,\n });\n } else {\n embedFailures++;\n }\n }\n }\n\n if (embedFailures > 0) {\n console.log(`Warning: ${embedFailures} spore(s) could not be embedded and were skipped.`);\n }\n\n // 3. Group by observation_type\n const byType = new Map<string, SporeWithEmbedding[]>();\n for (const spore of sporesWithEmbeddings) {\n const obsType = (spore.frontmatter['observation_type'] as string | undefined) ?? 'unknown';\n if (!byType.has(obsType)) byType.set(obsType, []);\n byType.get(obsType)!.push(spore);\n }\n\n // 4. Cluster within each type group\n const template = loadPrompt('supersession');\n let totalClusters = 0;\n let totalSuperseded = 0;\n\n for (const [obsType, typeSpores] of byType) {\n const clusters = clusterSpores(typeSpores);\n const multiSpore = clusters.filter((c) => c.spores.length >= 2);\n\n if (multiSpore.length === 0) continue;\n\n console.log(`\\nType: ${obsType} — ${typeSpores.length} spores, ${multiSpore.length} cluster(s) to evaluate`);\n totalClusters += multiSpore.length;\n\n for (const cluster of multiSpore) {\n // Sort by created date ascending; newest is last\n const sorted = [...cluster.spores].sort((a, b) => a.created.localeCompare(b.created));\n const newest = sorted[sorted.length - 1];\n const candidates = sorted.slice(0, sorted.length - 1);\n\n // 5. Build supersession prompt\n const newSporeText = `[${newest.id}] ${newest.title}\\n${newest.content}`;\n const candidatesText = candidates\n .map((c) => `[${c.id}] ${c.title}\\n${c.content}`)\n .join('\\n\\n');\n\n const prompt = template\n .replace('{{new_spore}}', newSporeText)\n .replace('{{candidates}}', candidatesText);\n\n // 6. Ask LLM which candidates are outdated\n let responseText: string;\n try {\n const response = await llmProvider.summarize(prompt, {\n maxTokens: SUPERSESSION_MAX_TOKENS,\n reasoning: LLM_REASONING_MODE,\n });\n responseText = stripReasoningTokens(response.text);\n } catch (err) {\n console.log(` Warning: LLM call failed for cluster in ${obsType}: ${String(err)}`);\n continue;\n }\n\n // Parse response\n let rawIds: unknown;\n try {\n rawIds = JSON.parse(responseText);\n } catch {\n console.log(` Warning: Could not parse LLM response for cluster in ${obsType}`);\n continue;\n }\n\n const parsed = supersededIdsSchema.safeParse(rawIds);\n if (!parsed.success) {\n console.log(` Warning: LLM response schema invalid for cluster in ${obsType}`);\n continue;\n }\n\n // Validate IDs against actual candidates\n const candidateMap = new Map(candidates.map((c) => [c.id, c]));\n const validIds = parsed.data.filter((id) => candidateMap.has(id));\n\n if (validIds.length === 0) continue;\n\n for (const id of validIds) {\n const candidate = candidateMap.get(id)!;\n\n if (isDryRun) {\n console.log(` [dry-run] Would supersede: ${candidate.title} (${id})`);\n console.log(` Superseded by: ${newest.title} (${newest.id})`);\n totalSuperseded++;\n continue;\n }\n\n const wrote = supersedeSpore(id, newest.id, candidate.path, { index, vectorIndex, vaultDir });\n\n if (!wrote) {\n console.log(` Warning: file not found for ${id}, skipping write`);\n continue;\n }\n\n console.log(` Superseded: ${candidate.title} (${id})`);\n console.log(` By: ${newest.title} (${newest.id})`);\n totalSuperseded++;\n }\n }\n }\n\n // 8. Summary\n console.log(`\\nCuration complete:`);\n console.log(` Scanned: ${activeSpores.length} active spores`);\n console.log(` Clusters evaluated: ${totalClusters}`);\n if (isDryRun) {\n console.log(` Would supersede: ${totalSuperseded}`);\n } else {\n console.log(` Superseded: ${totalSuperseded}`);\n }\n } finally {\n index.close();\n vectorIndex?.close();\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,10 +2,10 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
2
2
  import {
3
3
  LmStudioBackend,
4
4
  OllamaBackend
5
- } from "./chunk-OPO47BVS.js";
5
+ } from "./chunk-JI6M2L2W.js";
6
6
  import {
7
7
  PROVIDER_DETECT_TIMEOUT_MS
8
- } from "./chunk-TDLQBGKA.js";
8
+ } from "./chunk-B6WVNDA5.js";
9
9
  import "./chunk-PZUWP5VK.js";
10
10
 
11
11
  // src/cli/detect-providers.ts
@@ -32,4 +32,4 @@ async function run(_args) {
32
32
  export {
33
33
  run
34
34
  };
35
- //# sourceMappingURL=detect-providers-CQSPTW2B.js.map
35
+ //# sourceMappingURL=detect-providers-BIHYFK5M.js.map
@@ -1,27 +1,27 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  DigestEngine
4
- } from "./chunk-3F63SFZZ.js";
5
- import "./chunk-PD7LV22R.js";
4
+ } from "./chunk-HL2S5QZG.js";
5
+ import "./chunk-KYL67SKZ.js";
6
6
  import "./chunk-2AMAOSRF.js";
7
7
  import {
8
8
  createLlmProvider
9
- } from "./chunk-OSZRLHIJ.js";
9
+ } from "./chunk-RCV2I4AI.js";
10
10
  import "./chunk-MIU3DKLN.js";
11
11
  import {
12
12
  MycoIndex
13
13
  } from "./chunk-AK6GNLPV.js";
14
- import "./chunk-5FIIK27E.js";
14
+ import "./chunk-FIRMTYFH.js";
15
15
  import {
16
16
  parseIntFlag
17
17
  } from "./chunk-SAKJMNSR.js";
18
- import "./chunk-OPO47BVS.js";
18
+ import "./chunk-JI6M2L2W.js";
19
19
  import {
20
20
  loadConfig
21
21
  } from "./chunk-TBRZAJ7W.js";
22
22
  import "./chunk-6UJWI4IW.js";
23
- import "./chunk-EQVQEFOA.js";
24
- import "./chunk-TDLQBGKA.js";
23
+ import "./chunk-X6TKHO22.js";
24
+ import "./chunk-B6WVNDA5.js";
25
25
  import "./chunk-PZUWP5VK.js";
26
26
 
27
27
  // src/cli/digest.ts
@@ -93,4 +93,4 @@ Digest cycle complete:`);
93
93
  export {
94
94
  run
95
95
  };
96
- //# sourceMappingURL=digest-WTS6S4XP.js.map
96
+ //# sourceMappingURL=digest-7NKYXM6G.js.map
@@ -15,11 +15,11 @@ import {
15
15
  DASHBOARD_CONTENT,
16
16
  VAULT_GITIGNORE,
17
17
  configureVaultEnv
18
- } from "./chunk-5FIIK27E.js";
18
+ } from "./chunk-FIRMTYFH.js";
19
19
  import {
20
20
  parseStringFlag
21
21
  } from "./chunk-SAKJMNSR.js";
22
- import "./chunk-OPO47BVS.js";
22
+ import "./chunk-JI6M2L2W.js";
23
23
  import {
24
24
  MycoConfigSchema,
25
25
  require_dist
@@ -27,8 +27,8 @@ import {
27
27
  import {
28
28
  resolveVaultDir
29
29
  } from "./chunk-N33KUCFP.js";
30
- import "./chunk-EQVQEFOA.js";
31
- import "./chunk-TDLQBGKA.js";
30
+ import "./chunk-X6TKHO22.js";
31
+ import "./chunk-B6WVNDA5.js";
32
32
  import {
33
33
  __toESM
34
34
  } from "./chunk-PZUWP5VK.js";
@@ -108,4 +108,4 @@ async function run3(args) {
108
108
  export {
109
109
  run3 as run
110
110
  };
111
- //# sourceMappingURL=init-VPLUEULI.js.map
111
+ //# sourceMappingURL=init-HPQ77WWF.js.map