@goondocks/myco 0.2.13 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/commands/init.md +33 -22
  4. package/dist/{chunk-BXFS4PCJ.js → chunk-2QEJKG7R.js} +2 -2
  5. package/dist/{chunk-MAFUTKOZ.js → chunk-2TKJPRZL.js} +2 -2
  6. package/dist/chunk-5EZ7QF6J.js +96 -0
  7. package/dist/chunk-5EZ7QF6J.js.map +1 -0
  8. package/dist/chunk-6FQISQNA.js +61 -0
  9. package/dist/chunk-6FQISQNA.js.map +1 -0
  10. package/dist/{chunk-S4WBXXO6.js → chunk-BMJX2IDQ.js} +2 -2
  11. package/dist/chunk-EF4JVH24.js +7299 -0
  12. package/dist/chunk-EF4JVH24.js.map +1 -0
  13. package/dist/{chunk-YXZEP5U6.js → chunk-ISCT2SI6.js} +11 -7301
  14. package/dist/chunk-ISCT2SI6.js.map +1 -0
  15. package/dist/{chunk-6C26YFOA.js → chunk-N6IAW33G.js} +248 -4306
  16. package/dist/chunk-N6IAW33G.js.map +1 -0
  17. package/dist/{chunk-C2YPBQQM.js → chunk-NTYYYC32.js} +3 -3
  18. package/dist/{chunk-NKJIZSPD.js → chunk-P2Q77C5F.js} +3 -3
  19. package/dist/chunk-PAUPHPOC.js +111 -0
  20. package/dist/chunk-PAUPHPOC.js.map +1 -0
  21. package/dist/chunk-PZUWP5VK.js +44 -0
  22. package/dist/{chunk-O5VSPHDL.js → chunk-Q7BEFSOV.js} +3 -40
  23. package/dist/{chunk-O5VSPHDL.js.map → chunk-Q7BEFSOV.js.map} +1 -1
  24. package/dist/chunk-QQWUV3TC.js +3691 -0
  25. package/dist/chunk-QQWUV3TC.js.map +1 -0
  26. package/dist/chunk-RGVBGTD6.js +21 -0
  27. package/dist/chunk-RGVBGTD6.js.map +1 -0
  28. package/dist/chunk-SAKJMNSR.js +50 -0
  29. package/dist/chunk-SAKJMNSR.js.map +1 -0
  30. package/dist/chunk-TJJRIVZ7.js +56 -0
  31. package/dist/chunk-TJJRIVZ7.js.map +1 -0
  32. package/dist/chunk-XQXXF6MU.js +96 -0
  33. package/dist/chunk-XQXXF6MU.js.map +1 -0
  34. package/dist/chunk-XW3OL55U.js +160 -0
  35. package/dist/chunk-XW3OL55U.js.map +1 -0
  36. package/dist/cli-ZHUR53CS.js +76 -0
  37. package/dist/cli-ZHUR53CS.js.map +1 -0
  38. package/dist/client-HORA3CC4.js +11 -0
  39. package/dist/client-HORA3CC4.js.map +1 -0
  40. package/dist/config-MD4XMLUS.js +101 -0
  41. package/dist/config-MD4XMLUS.js.map +1 -0
  42. package/dist/detect-providers-6RQCQZOI.js +35 -0
  43. package/dist/detect-providers-6RQCQZOI.js.map +1 -0
  44. package/dist/init-LLLHUNSY.js +120 -0
  45. package/dist/init-LLLHUNSY.js.map +1 -0
  46. package/dist/logs-BSTBZHDR.js +84 -0
  47. package/dist/logs-BSTBZHDR.js.map +1 -0
  48. package/dist/{main-ORWCEWNJ.js → main-JY6O6ZVH.js} +60 -15
  49. package/dist/{main-ORWCEWNJ.js.map → main-JY6O6ZVH.js.map} +1 -1
  50. package/dist/rebuild-YAN3TPFB.js +78 -0
  51. package/dist/rebuild-YAN3TPFB.js.map +1 -0
  52. package/dist/restart-NH5MX45I.js +50 -0
  53. package/dist/restart-NH5MX45I.js.map +1 -0
  54. package/dist/search-W3ECVSTH.js +120 -0
  55. package/dist/search-W3ECVSTH.js.map +1 -0
  56. package/dist/{server-J3AQ3YFA.js → server-DLBATUNG.js} +29 -16
  57. package/dist/{server-J3AQ3YFA.js.map → server-DLBATUNG.js.map} +1 -1
  58. package/dist/session-5GI2YU6R.js +44 -0
  59. package/dist/session-5GI2YU6R.js.map +1 -0
  60. package/dist/{session-start-BEC4JMNZ.js → session-start-DECLNJDI.js} +8 -6
  61. package/dist/{session-start-BEC4JMNZ.js.map → session-start-DECLNJDI.js.map} +1 -1
  62. package/dist/src/cli.js +8 -1
  63. package/dist/src/cli.js.map +1 -1
  64. package/dist/src/daemon/main.js +8 -1
  65. package/dist/src/daemon/main.js.map +1 -1
  66. package/dist/src/hooks/post-tool-use.js +5 -4
  67. package/dist/src/hooks/post-tool-use.js.map +1 -1
  68. package/dist/src/hooks/session-end.js +5 -4
  69. package/dist/src/hooks/session-end.js.map +1 -1
  70. package/dist/src/hooks/session-start.js +8 -1
  71. package/dist/src/hooks/session-start.js.map +1 -1
  72. package/dist/src/hooks/stop.js +7 -5
  73. package/dist/src/hooks/stop.js.map +1 -1
  74. package/dist/src/hooks/user-prompt-submit.js +5 -4
  75. package/dist/src/hooks/user-prompt-submit.js.map +1 -1
  76. package/dist/src/mcp/server.js +8 -1
  77. package/dist/src/mcp/server.js.map +1 -1
  78. package/dist/stats-7VEZN2WF.js +77 -0
  79. package/dist/stats-7VEZN2WF.js.map +1 -0
  80. package/dist/verify-HN5DWV2H.js +50 -0
  81. package/dist/verify-HN5DWV2H.js.map +1 -0
  82. package/package.json +1 -1
  83. package/dist/chunk-6C26YFOA.js.map +0 -1
  84. package/dist/chunk-YXZEP5U6.js.map +0 -1
  85. package/dist/cli-KMWJFK5Y.js +0 -623
  86. package/dist/cli-KMWJFK5Y.js.map +0 -1
  87. package/dist/client-TEUHXGOY.js +0 -10
  88. /package/dist/{chunk-BXFS4PCJ.js.map → chunk-2QEJKG7R.js.map} +0 -0
  89. /package/dist/{chunk-MAFUTKOZ.js.map → chunk-2TKJPRZL.js.map} +0 -0
  90. /package/dist/{chunk-S4WBXXO6.js.map → chunk-BMJX2IDQ.js.map} +0 -0
  91. /package/dist/{chunk-C2YPBQQM.js.map → chunk-NTYYYC32.js.map} +0 -0
  92. /package/dist/{chunk-NKJIZSPD.js.map → chunk-P2Q77C5F.js.map} +0 -0
  93. /package/dist/{client-TEUHXGOY.js.map → chunk-PZUWP5VK.js.map} +0 -0
@@ -0,0 +1,44 @@
1
+ import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ MycoIndex
4
+ } from "./chunk-PA3VMINE.js";
5
+ import "./chunk-PZUWP5VK.js";
6
+
7
+ // src/cli/session.ts
8
+ import fs from "fs";
9
+ import path from "path";
10
+ function run(args, vaultDir) {
11
+ const idOrLatest = args[0];
12
+ const index = new MycoIndex(path.join(vaultDir, "index.db"));
13
+ const sessions = index.query({ type: "session" });
14
+ if (sessions.length === 0) {
15
+ console.log("No sessions found");
16
+ index.close();
17
+ return;
18
+ }
19
+ let target;
20
+ if (!idOrLatest || idOrLatest === "latest") {
21
+ target = sessions[sessions.length - 1];
22
+ } else {
23
+ target = sessions.find((s) => s.id.includes(idOrLatest));
24
+ }
25
+ if (!target) {
26
+ console.error(`Session not found: ${idOrLatest}`);
27
+ console.log("Available:", sessions.map((s) => s.id).join(", "));
28
+ index.close();
29
+ return;
30
+ }
31
+ const fullPath = path.join(vaultDir, target.path);
32
+ if (fs.existsSync(fullPath)) {
33
+ console.log(fs.readFileSync(fullPath, "utf-8"));
34
+ } else {
35
+ console.log(`Title: ${target.title}`);
36
+ console.log(`Content:
37
+ ${target.content?.slice(0, 2e3)}`);
38
+ }
39
+ index.close();
40
+ }
41
+ export {
42
+ run
43
+ };
44
+ //# sourceMappingURL=session-5GI2YU6R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/session.ts"],"sourcesContent":["import { MycoIndex } from '../index/sqlite.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport function run(args: string[], vaultDir: string): void {\n const idOrLatest = args[0];\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n const sessions = index.query({ type: 'session' });\n\n if (sessions.length === 0) {\n console.log('No sessions found');\n index.close();\n return;\n }\n\n let target;\n if (!idOrLatest || idOrLatest === 'latest') {\n target = sessions[sessions.length - 1];\n } else {\n target = sessions.find((s) => s.id.includes(idOrLatest));\n }\n\n if (!target) {\n console.error(`Session not found: ${idOrLatest}`);\n console.log('Available:', sessions.map((s) => s.id).join(', '));\n index.close();\n return;\n }\n\n // Read the raw markdown file\n const fullPath = path.join(vaultDir, target.path);\n if (fs.existsSync(fullPath)) {\n console.log(fs.readFileSync(fullPath, 'utf-8'));\n } else {\n console.log(`Title: ${target.title}`);\n console.log(`Content:\\n${target.content?.slice(0, 2000)}`);\n }\n\n index.close();\n}\n"],"mappings":";;;;;;;AACA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEV,SAAS,IAAI,MAAgB,UAAwB;AAC1D,QAAM,aAAa,KAAK,CAAC;AACzB,QAAM,QAAQ,IAAI,UAAU,KAAK,KAAK,UAAU,UAAU,CAAC;AAC3D,QAAM,WAAW,MAAM,MAAM,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAI,SAAS,WAAW,GAAG;AACzB,YAAQ,IAAI,mBAAmB;AAC/B,UAAM,MAAM;AACZ;AAAA,EACF;AAEA,MAAI;AACJ,MAAI,CAAC,cAAc,eAAe,UAAU;AAC1C,aAAS,SAAS,SAAS,SAAS,CAAC;AAAA,EACvC,OAAO;AACL,aAAS,SAAS,KAAK,CAAC,MAAM,EAAE,GAAG,SAAS,UAAU,CAAC;AAAA,EACzD;AAEA,MAAI,CAAC,QAAQ;AACX,YAAQ,MAAM,sBAAsB,UAAU,EAAE;AAChD,YAAQ,IAAI,cAAc,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;AAC9D,UAAM,MAAM;AACZ;AAAA,EACF;AAGA,QAAM,WAAW,KAAK,KAAK,UAAU,OAAO,IAAI;AAChD,MAAI,GAAG,WAAW,QAAQ,GAAG;AAC3B,YAAQ,IAAI,GAAG,aAAa,UAAU,OAAO,CAAC;AAAA,EAChD,OAAO;AACL,YAAQ,IAAI,UAAU,OAAO,KAAK,EAAE;AACpC,YAAQ,IAAI;AAAA,EAAa,OAAO,SAAS,MAAM,GAAG,GAAI,CAAC,EAAE;AAAA,EAC3D;AAEA,QAAM,MAAM;AACd;","names":[]}
@@ -8,23 +8,25 @@ import {
8
8
  } from "./chunk-PA3VMINE.js";
9
9
  import {
10
10
  loadConfig
11
- } from "./chunk-YXZEP5U6.js";
11
+ } from "./chunk-ISCT2SI6.js";
12
+ import "./chunk-EF4JVH24.js";
12
13
  import {
13
14
  readStdin
14
- } from "./chunk-MAFUTKOZ.js";
15
+ } from "./chunk-2TKJPRZL.js";
15
16
  import {
16
17
  DaemonClient
17
- } from "./chunk-C2YPBQQM.js";
18
+ } from "./chunk-NTYYYC32.js";
18
19
  import {
19
20
  resolveVaultDir
20
21
  } from "./chunk-N33KUCFP.js";
21
- import "./chunk-BXFS4PCJ.js";
22
+ import "./chunk-2QEJKG7R.js";
22
23
  import {
23
24
  CHARS_PER_TOKEN,
24
25
  CONTEXT_MEMORY_PREVIEW_CHARS,
25
26
  CONTEXT_PLAN_PREVIEW_CHARS,
26
27
  CONTEXT_SESSION_PREVIEW_CHARS
27
- } from "./chunk-O5VSPHDL.js";
28
+ } from "./chunk-Q7BEFSOV.js";
29
+ import "./chunk-PZUWP5VK.js";
28
30
 
29
31
  // src/context/relevance.ts
30
32
  var RECENCY_TIERS = [
@@ -185,4 +187,4 @@ async function main() {
185
187
  }
186
188
  }
187
189
  main();
188
- //# sourceMappingURL=session-start-BEC4JMNZ.js.map
190
+ //# sourceMappingURL=session-start-DECLNJDI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context/relevance.ts","../src/context/injector.ts","../src/hooks/session-start.ts"],"sourcesContent":["import type { IndexedNote } from '../index/sqlite.js';\n\nexport interface ScoredNote {\n note: IndexedNote;\n score: number;\n reason: string;\n}\n\ninterface RelevanceInput {\n branch?: string;\n activePlanIds?: string[];\n}\n\n// --- Recency thresholds (hours) and score weights ---\nconst RECENCY_TIERS = [\n { maxHours: 24, score: 3, label: 'recent (<24h)' },\n { maxHours: 72, score: 2, label: 'recent (<72h)' },\n { maxHours: 168, score: 1, label: 'recent (<1w)' },\n] as const;\n\nconst BRANCH_MATCH_SCORE = 3;\nconst PLAN_MATCH_SCORE = 2;\n\nconst MS_PER_HOUR = 3_600_000;\n\nexport function scoreRelevance(\n notes: IndexedNote[],\n input: RelevanceInput,\n): ScoredNote[] {\n return notes\n .map((note) => {\n let score = 0;\n const reasons: string[] = [];\n\n const fm = note.frontmatter as Record<string, unknown>;\n\n // Recency boost\n const age = Date.now() - new Date(note.created).getTime();\n const hoursOld = age / MS_PER_HOUR;\n for (const tier of RECENCY_TIERS) {\n if (hoursOld < tier.maxHours) {\n score += tier.score;\n reasons.push(tier.label);\n break;\n }\n }\n\n // Branch match\n if (input.branch && fm.branch === input.branch) {\n score += BRANCH_MATCH_SCORE;\n reasons.push('same branch');\n }\n\n // Plan match\n if (input.activePlanIds?.length) {\n const planRef = fm.plan as string | undefined;\n if (planRef && input.activePlanIds.some((id) =>\n planRef === `[[${id}]]` || planRef === id,\n )) {\n score += PLAN_MATCH_SCORE;\n reasons.push('active plan');\n }\n }\n\n return { note, score, reason: reasons.join(', ') };\n })\n .filter((s) => s.score > 0)\n .sort((a, b) => b.score - a.score);\n}\n","import type { MycoIndex } from '../index/sqlite.js';\nimport type { MycoConfig } from '../config/schema.js';\nimport { planFm, memoryFm } from '../vault/frontmatter.js';\nimport { scoreRelevance } from './relevance.js';\nimport { CHARS_PER_TOKEN, CONTEXT_PLAN_PREVIEW_CHARS, CONTEXT_SESSION_PREVIEW_CHARS, CONTEXT_MEMORY_PREVIEW_CHARS } from '../constants.js';\n\ninterface InjectionContext {\n branch?: string;\n}\n\ninterface InjectedContext {\n text: string;\n tokenEstimate: number;\n layers: {\n plans: string;\n sessions: string;\n memories: string;\n team: string;\n };\n}\n\nexport function buildInjectedContext(\n index: MycoIndex,\n config: MycoConfig,\n context: InjectionContext,\n): InjectedContext {\n const budgets = config.context.layers;\n\n // Layer 1: Active plans\n const plans = index.query({ type: 'plan' });\n const activePlans = plans.filter((p) =>\n ['active', 'in_progress'].includes(planFm(p).status ?? ''),\n );\n const plansText = formatLayer(\n 'Active Plans',\n activePlans.map((p) => `- **${p.title}** (${planFm(p).status}): ${p.content.slice(0, CONTEXT_PLAN_PREVIEW_CHARS)}`),\n budgets.plans,\n );\n\n // Layer 2: Recent sessions\n const sessions = index.query({ type: 'session', limit: 10 });\n const activePlanIds = activePlans.map((p) => p.id);\n const scoredSessions = scoreRelevance(sessions, {\n branch: context.branch,\n activePlanIds,\n });\n const sessionsText = formatLayer(\n 'Recent Sessions',\n scoredSessions.slice(0, 5).map((s) =>\n `- **${s.note.title}**: ${s.note.content.slice(0, CONTEXT_SESSION_PREVIEW_CHARS)} (${s.reason})`,\n ),\n budgets.sessions,\n );\n\n // Layer 3: Relevant memories (exclude superseded/archived)\n const memories = index.query({ type: 'memory', limit: 20 })\n .filter((m) => {\n const status = memoryFm(m).status;\n return status !== 'superseded' && status !== 'archived';\n });\n const scoredMemories = scoreRelevance(memories, {\n branch: context.branch,\n activePlanIds,\n });\n const memoriesText = formatLayer(\n 'Relevant Memories',\n scoredMemories.slice(0, 5).map((m) =>\n `- **${m.note.title}** (${memoryFm(m.note).observation_type}): ${m.note.content.slice(0, CONTEXT_MEMORY_PREVIEW_CHARS)}`,\n ),\n budgets.memories,\n );\n\n // Layer 4: Team activity\n const teamText = formatLayer('Team Activity', [], budgets.team);\n\n // Enforce total max_tokens budget\n const allLayers = [plansText, sessionsText, memoriesText, teamText].filter(Boolean);\n const parts: string[] = [];\n let totalTokens = 0;\n\n for (const layer of allLayers) {\n const layerTokens = estimateTokens(layer);\n if (totalTokens + layerTokens > config.context.max_tokens) break;\n parts.push(layer);\n totalTokens += layerTokens;\n }\n\n const fullText = parts.join('\\n\\n');\n\n return {\n text: fullText,\n tokenEstimate: totalTokens,\n layers: {\n plans: plansText,\n sessions: sessionsText,\n memories: memoriesText,\n team: teamText,\n },\n };\n}\n\nfunction formatLayer(heading: string, items: string[], budget: number): string {\n if (items.length === 0) return '';\n\n let text = `### ${heading}\\n`;\n let currentTokens = estimateTokens(text);\n\n for (const item of items) {\n const itemTokens = estimateTokens(item);\n if (currentTokens + itemTokens > budget) break;\n text += item + '\\n';\n currentTokens += itemTokens;\n }\n\n return text.trim();\n}\n\nfunction estimateTokens(text: string): number {\n return Math.ceil(text.length / CHARS_PER_TOKEN);\n}\n","import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { loadConfig } from '../config/loader.js';\nimport { MycoIndex } from '../index/sqlite.js';\nimport { buildInjectedContext } from '../context/injector.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport { execFileSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const config = loadConfig(VAULT_DIR);\n const client = new DaemonClient(VAULT_DIR);\n const healthy = await client.ensureRunning();\n\n const input = JSON.parse(await readStdin());\n const sessionId = input.session_id ?? `s-${Date.now()}`;\n\n let branch: string | undefined;\n try {\n branch = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { encoding: 'utf-8' }).trim();\n } catch { /* not a git repo */ }\n\n if (healthy) {\n await client.post('/sessions/register', {\n session_id: sessionId,\n branch,\n started_at: new Date().toISOString(),\n });\n\n const contextResult = await client.post('/context', { session_id: sessionId, branch });\n\n if (contextResult.ok && contextResult.data?.text) {\n process.stdout.write(contextResult.data.text);\n return;\n }\n }\n\n // Degraded: local FTS context only\n const index = new MycoIndex(path.join(VAULT_DIR, 'index.db'));\n const injected = buildInjectedContext(index, config, { branch });\n if (injected.text) process.stdout.write(injected.text);\n index.close();\n } catch (error) {\n process.stderr.write(`[myco] session-start error: ${(error as Error).message}\\n`);\n }\n}\n\nmain();\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/context/relevance.ts","../src/context/injector.ts","../src/hooks/session-start.ts"],"sourcesContent":["import type { IndexedNote } from '../index/sqlite.js';\n\nexport interface ScoredNote {\n note: IndexedNote;\n score: number;\n reason: string;\n}\n\ninterface RelevanceInput {\n branch?: string;\n activePlanIds?: string[];\n}\n\n// --- Recency thresholds (hours) and score weights ---\nconst RECENCY_TIERS = [\n { maxHours: 24, score: 3, label: 'recent (<24h)' },\n { maxHours: 72, score: 2, label: 'recent (<72h)' },\n { maxHours: 168, score: 1, label: 'recent (<1w)' },\n] as const;\n\nconst BRANCH_MATCH_SCORE = 3;\nconst PLAN_MATCH_SCORE = 2;\n\nconst MS_PER_HOUR = 3_600_000;\n\nexport function scoreRelevance(\n notes: IndexedNote[],\n input: RelevanceInput,\n): ScoredNote[] {\n return notes\n .map((note) => {\n let score = 0;\n const reasons: string[] = [];\n\n const fm = note.frontmatter as Record<string, unknown>;\n\n // Recency boost\n const age = Date.now() - new Date(note.created).getTime();\n const hoursOld = age / MS_PER_HOUR;\n for (const tier of RECENCY_TIERS) {\n if (hoursOld < tier.maxHours) {\n score += tier.score;\n reasons.push(tier.label);\n break;\n }\n }\n\n // Branch match\n if (input.branch && fm.branch === input.branch) {\n score += BRANCH_MATCH_SCORE;\n reasons.push('same branch');\n }\n\n // Plan match\n if (input.activePlanIds?.length) {\n const planRef = fm.plan as string | undefined;\n if (planRef && input.activePlanIds.some((id) =>\n planRef === `[[${id}]]` || planRef === id,\n )) {\n score += PLAN_MATCH_SCORE;\n reasons.push('active plan');\n }\n }\n\n return { note, score, reason: reasons.join(', ') };\n })\n .filter((s) => s.score > 0)\n .sort((a, b) => b.score - a.score);\n}\n","import type { MycoIndex } from '../index/sqlite.js';\nimport type { MycoConfig } from '../config/schema.js';\nimport { planFm, memoryFm } from '../vault/frontmatter.js';\nimport { scoreRelevance } from './relevance.js';\nimport { CHARS_PER_TOKEN, CONTEXT_PLAN_PREVIEW_CHARS, CONTEXT_SESSION_PREVIEW_CHARS, CONTEXT_MEMORY_PREVIEW_CHARS } from '../constants.js';\n\ninterface InjectionContext {\n branch?: string;\n}\n\ninterface InjectedContext {\n text: string;\n tokenEstimate: number;\n layers: {\n plans: string;\n sessions: string;\n memories: string;\n team: string;\n };\n}\n\nexport function buildInjectedContext(\n index: MycoIndex,\n config: MycoConfig,\n context: InjectionContext,\n): InjectedContext {\n const budgets = config.context.layers;\n\n // Layer 1: Active plans\n const plans = index.query({ type: 'plan' });\n const activePlans = plans.filter((p) =>\n ['active', 'in_progress'].includes(planFm(p).status ?? ''),\n );\n const plansText = formatLayer(\n 'Active Plans',\n activePlans.map((p) => `- **${p.title}** (${planFm(p).status}): ${p.content.slice(0, CONTEXT_PLAN_PREVIEW_CHARS)}`),\n budgets.plans,\n );\n\n // Layer 2: Recent sessions\n const sessions = index.query({ type: 'session', limit: 10 });\n const activePlanIds = activePlans.map((p) => p.id);\n const scoredSessions = scoreRelevance(sessions, {\n branch: context.branch,\n activePlanIds,\n });\n const sessionsText = formatLayer(\n 'Recent Sessions',\n scoredSessions.slice(0, 5).map((s) =>\n `- **${s.note.title}**: ${s.note.content.slice(0, CONTEXT_SESSION_PREVIEW_CHARS)} (${s.reason})`,\n ),\n budgets.sessions,\n );\n\n // Layer 3: Relevant memories (exclude superseded/archived)\n const memories = index.query({ type: 'memory', limit: 20 })\n .filter((m) => {\n const status = memoryFm(m).status;\n return status !== 'superseded' && status !== 'archived';\n });\n const scoredMemories = scoreRelevance(memories, {\n branch: context.branch,\n activePlanIds,\n });\n const memoriesText = formatLayer(\n 'Relevant Memories',\n scoredMemories.slice(0, 5).map((m) =>\n `- **${m.note.title}** (${memoryFm(m.note).observation_type}): ${m.note.content.slice(0, CONTEXT_MEMORY_PREVIEW_CHARS)}`,\n ),\n budgets.memories,\n );\n\n // Layer 4: Team activity\n const teamText = formatLayer('Team Activity', [], budgets.team);\n\n // Enforce total max_tokens budget\n const allLayers = [plansText, sessionsText, memoriesText, teamText].filter(Boolean);\n const parts: string[] = [];\n let totalTokens = 0;\n\n for (const layer of allLayers) {\n const layerTokens = estimateTokens(layer);\n if (totalTokens + layerTokens > config.context.max_tokens) break;\n parts.push(layer);\n totalTokens += layerTokens;\n }\n\n const fullText = parts.join('\\n\\n');\n\n return {\n text: fullText,\n tokenEstimate: totalTokens,\n layers: {\n plans: plansText,\n sessions: sessionsText,\n memories: memoriesText,\n team: teamText,\n },\n };\n}\n\nfunction formatLayer(heading: string, items: string[], budget: number): string {\n if (items.length === 0) return '';\n\n let text = `### ${heading}\\n`;\n let currentTokens = estimateTokens(text);\n\n for (const item of items) {\n const itemTokens = estimateTokens(item);\n if (currentTokens + itemTokens > budget) break;\n text += item + '\\n';\n currentTokens += itemTokens;\n }\n\n return text.trim();\n}\n\nfunction estimateTokens(text: string): number {\n return Math.ceil(text.length / CHARS_PER_TOKEN);\n}\n","import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { loadConfig } from '../config/loader.js';\nimport { MycoIndex } from '../index/sqlite.js';\nimport { buildInjectedContext } from '../context/injector.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport { execFileSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const config = loadConfig(VAULT_DIR);\n const client = new DaemonClient(VAULT_DIR);\n const healthy = await client.ensureRunning();\n\n const input = JSON.parse(await readStdin());\n const sessionId = input.session_id ?? `s-${Date.now()}`;\n\n let branch: string | undefined;\n try {\n branch = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { encoding: 'utf-8' }).trim();\n } catch { /* not a git repo */ }\n\n if (healthy) {\n await client.post('/sessions/register', {\n session_id: sessionId,\n branch,\n started_at: new Date().toISOString(),\n });\n\n const contextResult = await client.post('/context', { session_id: sessionId, branch });\n\n if (contextResult.ok && contextResult.data?.text) {\n process.stdout.write(contextResult.data.text);\n return;\n }\n }\n\n // Degraded: local FTS context only\n const index = new MycoIndex(path.join(VAULT_DIR, 'index.db'));\n const injected = buildInjectedContext(index, config, { branch });\n if (injected.text) process.stdout.write(injected.text);\n index.close();\n } catch (error) {\n process.stderr.write(`[myco] session-start error: ${(error as Error).message}\\n`);\n }\n}\n\nmain();\n"],"mappings":"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","names":[]}
package/dist/src/cli.js CHANGED
@@ -1,6 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
3
+ import {
4
+ ensureNativeDeps
5
+ } from "../chunk-TJJRIVZ7.js";
6
+ import "../chunk-2QEJKG7R.js";
7
+ import "../chunk-Q7BEFSOV.js";
8
+ import "../chunk-PZUWP5VK.js";
3
9
 
4
10
  // src/entries/cli.ts
5
- await import("../cli-KMWJFK5Y.js");
11
+ ensureNativeDeps();
12
+ await import("../cli-ZHUR53CS.js");
6
13
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/entries/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nexport {};\nawait import('../cli.js');\n"],"mappings":";;;;AAEA,MAAM,OAAO,oBAAW;","names":[]}
1
+ {"version":3,"sources":["../../src/entries/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { ensureNativeDeps } from '../native-deps.js';\nensureNativeDeps();\nawait import('../cli.js');\n"],"mappings":";;;;;;;;;;AAEA,iBAAiB;AACjB,MAAM,OAAO,oBAAW;","names":[]}
@@ -1,6 +1,13 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ ensureNativeDeps
4
+ } from "../../chunk-TJJRIVZ7.js";
5
+ import "../../chunk-2QEJKG7R.js";
6
+ import "../../chunk-Q7BEFSOV.js";
7
+ import "../../chunk-PZUWP5VK.js";
2
8
 
3
9
  // src/entries/daemon.ts
4
- var { main } = await import("../../main-ORWCEWNJ.js");
10
+ ensureNativeDeps();
11
+ var { main } = await import("../../main-JY6O6ZVH.js");
5
12
  await main();
6
13
  //# sourceMappingURL=main.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/entries/daemon.ts"],"sourcesContent":["export {};\nconst { main } = await import('../daemon/main.js');\nawait main();\n"],"mappings":";;;AACA,IAAM,EAAE,KAAK,IAAI,MAAM,OAAO,wBAAmB;AACjD,MAAM,KAAK;","names":[]}
1
+ {"version":3,"sources":["../../../src/entries/daemon.ts"],"sourcesContent":["import { ensureNativeDeps } from '../native-deps.js';\nensureNativeDeps();\nconst { main } = await import('../daemon/main.js');\nawait main();\n"],"mappings":";;;;;;;;;AACA,iBAAiB;AACjB,IAAM,EAAE,KAAK,IAAI,MAAM,OAAO,wBAAmB;AACjD,MAAM,KAAK;","names":[]}
@@ -4,17 +4,18 @@ import {
4
4
  } from "../../chunk-I7PMGO6S.js";
5
5
  import {
6
6
  readStdin
7
- } from "../../chunk-MAFUTKOZ.js";
7
+ } from "../../chunk-2TKJPRZL.js";
8
8
  import {
9
9
  DaemonClient
10
- } from "../../chunk-C2YPBQQM.js";
10
+ } from "../../chunk-NTYYYC32.js";
11
11
  import {
12
12
  resolveVaultDir
13
13
  } from "../../chunk-N33KUCFP.js";
14
- import "../../chunk-BXFS4PCJ.js";
14
+ import "../../chunk-2QEJKG7R.js";
15
15
  import {
16
16
  TOOL_OUTPUT_PREVIEW_CHARS
17
- } from "../../chunk-O5VSPHDL.js";
17
+ } from "../../chunk-Q7BEFSOV.js";
18
+ import "../../chunk-PZUWP5VK.js";
18
19
 
19
20
  // src/hooks/post-tool-use.ts
20
21
  import fs from "fs";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/post-tool-use.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { EventBuffer } from '../capture/buffer.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport { TOOL_OUTPUT_PREVIEW_CHARS } from '../constants.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const input = JSON.parse(await readStdin());\n const sessionId = input.session_id ?? process.env.MYCO_SESSION_ID ?? `s-${Date.now()}`;\n\n const client = new DaemonClient(VAULT_DIR);\n\n // PostToolUse fires frequently — don't spawn the daemon here.\n // If it's down, buffer to disk. The stop or prompt hook will respawn it.\n const result = await client.post('/events', {\n type: 'tool_use',\n tool_name: input.tool_name,\n tool_input: input.tool_input,\n output_preview: typeof input.tool_output === 'string' ? input.tool_output.slice(0, TOOL_OUTPUT_PREVIEW_CHARS) : undefined,\n session_id: sessionId,\n });\n\n if (!result.ok) {\n const buffer = new EventBuffer(path.join(VAULT_DIR, 'buffer'), sessionId);\n buffer.append({\n type: 'tool_use',\n tool: input.tool_name,\n input: input.tool_input,\n output_preview: typeof input.tool_output === 'string' ? input.tool_output.slice(0, TOOL_OUTPUT_PREVIEW_CHARS) : undefined,\n });\n }\n } catch (error) {\n process.stderr.write(`[myco] post-tool-use error: ${(error as Error).message}\\n`);\n }\n}\n\nmain();\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAKA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,eAAe,OAAO;AACpB,QAAM,YAAY,gBAAgB;AAClC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG;AAEvD,MAAI;AACF,UAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,CAAC;AAC1C,UAAM,YAAY,MAAM,cAAc,QAAQ,IAAI,mBAAmB,KAAK,KAAK,IAAI,CAAC;AAEpF,UAAM,SAAS,IAAI,aAAa,SAAS;AAIzC,UAAM,SAAS,MAAM,OAAO,KAAK,WAAW;AAAA,MAC1C,MAAM;AAAA,MACN,WAAW,MAAM;AAAA,MACjB,YAAY,MAAM;AAAA,MAClB,gBAAgB,OAAO,MAAM,gBAAgB,WAAW,MAAM,YAAY,MAAM,GAAG,yBAAyB,IAAI;AAAA,MAChH,YAAY;AAAA,IACd,CAAC;AAED,QAAI,CAAC,OAAO,IAAI;AACd,YAAM,SAAS,IAAI,YAAY,KAAK,KAAK,WAAW,QAAQ,GAAG,SAAS;AACxE,aAAO,OAAO;AAAA,QACZ,MAAM;AAAA,QACN,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM;AAAA,QACb,gBAAgB,OAAO,MAAM,gBAAgB,WAAW,MAAM,YAAY,MAAM,GAAG,yBAAyB,IAAI;AAAA,MAClH,CAAC;AAAA,IACH;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,+BAAgC,MAAgB,OAAO;AAAA,CAAI;AAAA,EAClF;AACF;AAEA,KAAK;","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/post-tool-use.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { EventBuffer } from '../capture/buffer.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport { TOOL_OUTPUT_PREVIEW_CHARS } from '../constants.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const input = JSON.parse(await readStdin());\n const sessionId = input.session_id ?? process.env.MYCO_SESSION_ID ?? `s-${Date.now()}`;\n\n const client = new DaemonClient(VAULT_DIR);\n\n // PostToolUse fires frequently — don't spawn the daemon here.\n // If it's down, buffer to disk. The stop or prompt hook will respawn it.\n const result = await client.post('/events', {\n type: 'tool_use',\n tool_name: input.tool_name,\n tool_input: input.tool_input,\n output_preview: typeof input.tool_output === 'string' ? input.tool_output.slice(0, TOOL_OUTPUT_PREVIEW_CHARS) : undefined,\n session_id: sessionId,\n });\n\n if (!result.ok) {\n const buffer = new EventBuffer(path.join(VAULT_DIR, 'buffer'), sessionId);\n buffer.append({\n type: 'tool_use',\n tool: input.tool_name,\n input: input.tool_input,\n output_preview: typeof input.tool_output === 'string' ? input.tool_output.slice(0, TOOL_OUTPUT_PREVIEW_CHARS) : undefined,\n });\n }\n } catch (error) {\n process.stderr.write(`[myco] post-tool-use error: ${(error as Error).message}\\n`);\n }\n}\n\nmain();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAKA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,eAAe,OAAO;AACpB,QAAM,YAAY,gBAAgB;AAClC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG;AAEvD,MAAI;AACF,UAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,CAAC;AAC1C,UAAM,YAAY,MAAM,cAAc,QAAQ,IAAI,mBAAmB,KAAK,KAAK,IAAI,CAAC;AAEpF,UAAM,SAAS,IAAI,aAAa,SAAS;AAIzC,UAAM,SAAS,MAAM,OAAO,KAAK,WAAW;AAAA,MAC1C,MAAM;AAAA,MACN,WAAW,MAAM;AAAA,MACjB,YAAY,MAAM;AAAA,MAClB,gBAAgB,OAAO,MAAM,gBAAgB,WAAW,MAAM,YAAY,MAAM,GAAG,yBAAyB,IAAI;AAAA,MAChH,YAAY;AAAA,IACd,CAAC;AAED,QAAI,CAAC,OAAO,IAAI;AACd,YAAM,SAAS,IAAI,YAAY,KAAK,KAAK,WAAW,QAAQ,GAAG,SAAS;AACxE,aAAO,OAAO;AAAA,QACZ,MAAM;AAAA,QACN,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM;AAAA,QACb,gBAAgB,OAAO,MAAM,gBAAgB,WAAW,MAAM,YAAY,MAAM,GAAG,yBAAyB,IAAI;AAAA,MAClH,CAAC;AAAA,IACH;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,+BAAgC,MAAgB,OAAO;AAAA,CAAI;AAAA,EAClF;AACF;AAEA,KAAK;","names":[]}
@@ -1,15 +1,16 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  readStdin
4
- } from "../../chunk-MAFUTKOZ.js";
4
+ } from "../../chunk-2TKJPRZL.js";
5
5
  import {
6
6
  DaemonClient
7
- } from "../../chunk-C2YPBQQM.js";
7
+ } from "../../chunk-NTYYYC32.js";
8
8
  import {
9
9
  resolveVaultDir
10
10
  } from "../../chunk-N33KUCFP.js";
11
- import "../../chunk-BXFS4PCJ.js";
12
- import "../../chunk-O5VSPHDL.js";
11
+ import "../../chunk-2QEJKG7R.js";
12
+ import "../../chunk-Q7BEFSOV.js";
13
+ import "../../chunk-PZUWP5VK.js";
13
14
 
14
15
  // src/hooks/session-end.ts
15
16
  import fs from "fs";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/session-end.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const input = JSON.parse(await readStdin());\n const sessionId = input.session_id ?? process.env.MYCO_SESSION_ID;\n\n const client = new DaemonClient(VAULT_DIR);\n if (sessionId) {\n await client.post('/sessions/unregister', { session_id: sessionId });\n }\n } catch (error) {\n process.stderr.write(`[myco] session-end error: ${(error as Error).message}\\n`);\n }\n}\n\nmain();\n"],"mappings":";;;;;;;;;;;;;;AAGA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,eAAe,OAAO;AACpB,QAAM,YAAY,gBAAgB;AAClC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG;AAEvD,MAAI;AACF,UAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,CAAC;AAC1C,UAAM,YAAY,MAAM,cAAc,QAAQ,IAAI;AAElD,UAAM,SAAS,IAAI,aAAa,SAAS;AACzC,QAAI,WAAW;AACb,YAAM,OAAO,KAAK,wBAAwB,EAAE,YAAY,UAAU,CAAC;AAAA,IACrE;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,6BAA8B,MAAgB,OAAO;AAAA,CAAI;AAAA,EAChF;AACF;AAEA,KAAK;","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/session-end.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const input = JSON.parse(await readStdin());\n const sessionId = input.session_id ?? process.env.MYCO_SESSION_ID;\n\n const client = new DaemonClient(VAULT_DIR);\n if (sessionId) {\n await client.post('/sessions/unregister', { session_id: sessionId });\n }\n } catch (error) {\n process.stderr.write(`[myco] session-end error: ${(error as Error).message}\\n`);\n }\n}\n\nmain();\n"],"mappings":";;;;;;;;;;;;;;;AAGA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,eAAe,OAAO;AACpB,QAAM,YAAY,gBAAgB;AAClC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG;AAEvD,MAAI;AACF,UAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,CAAC;AAC1C,UAAM,YAAY,MAAM,cAAc,QAAQ,IAAI;AAElD,UAAM,SAAS,IAAI,aAAa,SAAS;AACzC,QAAI,WAAW;AACb,YAAM,OAAO,KAAK,wBAAwB,EAAE,YAAY,UAAU,CAAC;AAAA,IACrE;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,6BAA8B,MAAgB,OAAO;AAAA,CAAI;AAAA,EAChF;AACF;AAEA,KAAK;","names":[]}
@@ -1,5 +1,12 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ ensureNativeDeps
4
+ } from "../../chunk-TJJRIVZ7.js";
5
+ import "../../chunk-2QEJKG7R.js";
6
+ import "../../chunk-Q7BEFSOV.js";
7
+ import "../../chunk-PZUWP5VK.js";
2
8
 
3
9
  // src/entries/session-start.ts
4
- await import("../../session-start-BEC4JMNZ.js");
10
+ ensureNativeDeps();
11
+ await import("../../session-start-DECLNJDI.js");
5
12
  //# sourceMappingURL=session-start.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/entries/session-start.ts"],"sourcesContent":["export {};\nawait import('../hooks/session-start.js');\n"],"mappings":";;;AACA,MAAM,OAAO,iCAA2B;","names":[]}
1
+ {"version":3,"sources":["../../../src/entries/session-start.ts"],"sourcesContent":["import { ensureNativeDeps } from '../native-deps.js';\nensureNativeDeps();\nawait import('../hooks/session-start.js');\n"],"mappings":";;;;;;;;;AACA,iBAAiB;AACjB,MAAM,OAAO,iCAA2B;","names":[]}
@@ -1,18 +1,20 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  loadConfig
4
- } from "../../chunk-YXZEP5U6.js";
4
+ } from "../../chunk-ISCT2SI6.js";
5
+ import "../../chunk-EF4JVH24.js";
5
6
  import {
6
7
  readStdin
7
- } from "../../chunk-MAFUTKOZ.js";
8
+ } from "../../chunk-2TKJPRZL.js";
8
9
  import {
9
10
  DaemonClient
10
- } from "../../chunk-C2YPBQQM.js";
11
+ } from "../../chunk-NTYYYC32.js";
11
12
  import {
12
13
  resolveVaultDir
13
14
  } from "../../chunk-N33KUCFP.js";
14
- import "../../chunk-BXFS4PCJ.js";
15
- import "../../chunk-O5VSPHDL.js";
15
+ import "../../chunk-2QEJKG7R.js";
16
+ import "../../chunk-Q7BEFSOV.js";
17
+ import "../../chunk-PZUWP5VK.js";
16
18
 
17
19
  // src/hooks/stop.ts
18
20
  import fs from "fs";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/stop.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { loadConfig } from '../config/loader.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const input = JSON.parse(await readStdin());\n const sessionId = input.session_id ?? process.env.MYCO_SESSION_ID;\n if (!sessionId) return;\n\n const config = loadConfig(VAULT_DIR);\n const client = new DaemonClient(VAULT_DIR);\n\n await client.ensureRunning();\n\n // Pass transcript_path and last_assistant_message from Claude Code.\n // These are provided by the hook system and eliminate the need to\n // scan directories or mine the transcript for the AI response.\n await client.post('/events/stop', {\n session_id: sessionId,\n user: config.team.user || undefined,\n transcript_path: input.transcript_path,\n last_assistant_message: input.last_assistant_message,\n });\n } catch (error) {\n process.stderr.write(`[myco] stop error: ${(error as Error).message}\\n`);\n }\n}\n\nmain();\n"],"mappings":";;;;;;;;;;;;;;;;;AAIA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,eAAe,OAAO;AACpB,QAAM,YAAY,gBAAgB;AAClC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG;AAEvD,MAAI;AACF,UAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,CAAC;AAC1C,UAAM,YAAY,MAAM,cAAc,QAAQ,IAAI;AAClD,QAAI,CAAC,UAAW;AAEhB,UAAM,SAAS,WAAW,SAAS;AACnC,UAAM,SAAS,IAAI,aAAa,SAAS;AAEzC,UAAM,OAAO,cAAc;AAK3B,UAAM,OAAO,KAAK,gBAAgB;AAAA,MAChC,YAAY;AAAA,MACZ,MAAM,OAAO,KAAK,QAAQ;AAAA,MAC1B,iBAAiB,MAAM;AAAA,MACvB,wBAAwB,MAAM;AAAA,IAChC,CAAC;AAAA,EACH,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,sBAAuB,MAAgB,OAAO;AAAA,CAAI;AAAA,EACzE;AACF;AAEA,KAAK;","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/stop.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { loadConfig } from '../config/loader.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const input = JSON.parse(await readStdin());\n const sessionId = input.session_id ?? process.env.MYCO_SESSION_ID;\n if (!sessionId) return;\n\n const config = loadConfig(VAULT_DIR);\n const client = new DaemonClient(VAULT_DIR);\n\n await client.ensureRunning();\n\n // Pass transcript_path and last_assistant_message from Claude Code.\n // These are provided by the hook system and eliminate the need to\n // scan directories or mine the transcript for the AI response.\n await client.post('/events/stop', {\n session_id: sessionId,\n user: config.team.user || undefined,\n transcript_path: input.transcript_path,\n last_assistant_message: input.last_assistant_message,\n });\n } catch (error) {\n process.stderr.write(`[myco] stop error: ${(error as Error).message}\\n`);\n }\n}\n\nmain();\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAIA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,eAAe,OAAO;AACpB,QAAM,YAAY,gBAAgB;AAClC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG;AAEvD,MAAI;AACF,UAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,CAAC;AAC1C,UAAM,YAAY,MAAM,cAAc,QAAQ,IAAI;AAClD,QAAI,CAAC,UAAW;AAEhB,UAAM,SAAS,WAAW,SAAS;AACnC,UAAM,SAAS,IAAI,aAAa,SAAS;AAEzC,UAAM,OAAO,cAAc;AAK3B,UAAM,OAAO,KAAK,gBAAgB;AAAA,MAChC,YAAY;AAAA,MACZ,MAAM,OAAO,KAAK,QAAQ;AAAA,MAC1B,iBAAiB,MAAM;AAAA,MACvB,wBAAwB,MAAM;AAAA,IAChC,CAAC;AAAA,EACH,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,sBAAuB,MAAgB,OAAO;AAAA,CAAI;AAAA,EACzE;AACF;AAEA,KAAK;","names":[]}
@@ -4,15 +4,16 @@ import {
4
4
  } from "../../chunk-I7PMGO6S.js";
5
5
  import {
6
6
  readStdin
7
- } from "../../chunk-MAFUTKOZ.js";
7
+ } from "../../chunk-2TKJPRZL.js";
8
8
  import {
9
9
  DaemonClient
10
- } from "../../chunk-C2YPBQQM.js";
10
+ } from "../../chunk-NTYYYC32.js";
11
11
  import {
12
12
  resolveVaultDir
13
13
  } from "../../chunk-N33KUCFP.js";
14
- import "../../chunk-BXFS4PCJ.js";
15
- import "../../chunk-O5VSPHDL.js";
14
+ import "../../chunk-2QEJKG7R.js";
15
+ import "../../chunk-Q7BEFSOV.js";
16
+ import "../../chunk-PZUWP5VK.js";
16
17
 
17
18
  // src/hooks/user-prompt-submit.ts
18
19
  import fs from "fs";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/user-prompt-submit.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { EventBuffer } from '../capture/buffer.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const input = JSON.parse(await readStdin());\n const prompt = input.prompt ?? '';\n const sessionId = input.session_id ?? `s-${Date.now()}`;\n\n const client = new DaemonClient(VAULT_DIR);\n // Spawn daemon if needed but don't block on full health check backoff.\n // The event POST will fail fast if daemon isn't ready — buffer absorbs it.\n if (!(await client.isHealthy())) {\n client.spawnDaemon();\n }\n\n // Forward prompt as event for capture\n const eventResult = await client.post('/events', {\n type: 'user_prompt', prompt, session_id: sessionId,\n });\n\n if (!eventResult.ok) {\n // Daemon still unreachable — write directly to buffer for later processing\n const buffer = new EventBuffer(path.join(VAULT_DIR, 'buffer'), sessionId);\n buffer.append({ type: 'user_prompt', prompt });\n }\n\n // Search for relevant memories to inject as context for this prompt.\n // The daemon does a vector search against the prompt text and returns\n // any high-relevance memories. This is fast (~20ms) — no LLM call.\n const contextResult = await client.post('/context/prompt', {\n prompt,\n session_id: sessionId,\n });\n\n if (contextResult.ok && contextResult.data?.text) {\n process.stdout.write(contextResult.data.text);\n }\n } catch (error) {\n process.stderr.write(`[myco] user-prompt-submit error: ${(error as Error).message}\\n`);\n }\n}\n\nmain();\n"],"mappings":";;;;;;;;;;;;;;;;;AAIA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,eAAe,OAAO;AACpB,QAAM,YAAY,gBAAgB;AAClC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG;AAEvD,MAAI;AACF,UAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,CAAC;AAC1C,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,YAAY,MAAM,cAAc,KAAK,KAAK,IAAI,CAAC;AAErD,UAAM,SAAS,IAAI,aAAa,SAAS;AAGzC,QAAI,CAAE,MAAM,OAAO,UAAU,GAAI;AAC/B,aAAO,YAAY;AAAA,IACrB;AAGA,UAAM,cAAc,MAAM,OAAO,KAAK,WAAW;AAAA,MAC/C,MAAM;AAAA,MAAe;AAAA,MAAQ,YAAY;AAAA,IAC3C,CAAC;AAED,QAAI,CAAC,YAAY,IAAI;AAEnB,YAAM,SAAS,IAAI,YAAY,KAAK,KAAK,WAAW,QAAQ,GAAG,SAAS;AACxE,aAAO,OAAO,EAAE,MAAM,eAAe,OAAO,CAAC;AAAA,IAC/C;AAKA,UAAM,gBAAgB,MAAM,OAAO,KAAK,mBAAmB;AAAA,MACzD;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAED,QAAI,cAAc,MAAM,cAAc,MAAM,MAAM;AAChD,cAAQ,OAAO,MAAM,cAAc,KAAK,IAAI;AAAA,IAC9C;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,oCAAqC,MAAgB,OAAO;AAAA,CAAI;AAAA,EACvF;AACF;AAEA,KAAK;","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/user-prompt-submit.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { EventBuffer } from '../capture/buffer.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const input = JSON.parse(await readStdin());\n const prompt = input.prompt ?? '';\n const sessionId = input.session_id ?? `s-${Date.now()}`;\n\n const client = new DaemonClient(VAULT_DIR);\n // Spawn daemon if needed but don't block on full health check backoff.\n // The event POST will fail fast if daemon isn't ready — buffer absorbs it.\n if (!(await client.isHealthy())) {\n client.spawnDaemon();\n }\n\n // Forward prompt as event for capture\n const eventResult = await client.post('/events', {\n type: 'user_prompt', prompt, session_id: sessionId,\n });\n\n if (!eventResult.ok) {\n // Daemon still unreachable — write directly to buffer for later processing\n const buffer = new EventBuffer(path.join(VAULT_DIR, 'buffer'), sessionId);\n buffer.append({ type: 'user_prompt', prompt });\n }\n\n // Search for relevant memories to inject as context for this prompt.\n // The daemon does a vector search against the prompt text and returns\n // any high-relevance memories. This is fast (~20ms) — no LLM call.\n const contextResult = await client.post('/context/prompt', {\n prompt,\n session_id: sessionId,\n });\n\n if (contextResult.ok && contextResult.data?.text) {\n process.stdout.write(contextResult.data.text);\n }\n } catch (error) {\n process.stderr.write(`[myco] user-prompt-submit error: ${(error as Error).message}\\n`);\n }\n}\n\nmain();\n"],"mappings":";;;;;;;;;;;;;;;;;;AAIA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,eAAe,OAAO;AACpB,QAAM,YAAY,gBAAgB;AAClC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG;AAEvD,MAAI;AACF,UAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,CAAC;AAC1C,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,YAAY,MAAM,cAAc,KAAK,KAAK,IAAI,CAAC;AAErD,UAAM,SAAS,IAAI,aAAa,SAAS;AAGzC,QAAI,CAAE,MAAM,OAAO,UAAU,GAAI;AAC/B,aAAO,YAAY;AAAA,IACrB;AAGA,UAAM,cAAc,MAAM,OAAO,KAAK,WAAW;AAAA,MAC/C,MAAM;AAAA,MAAe;AAAA,MAAQ,YAAY;AAAA,IAC3C,CAAC;AAED,QAAI,CAAC,YAAY,IAAI;AAEnB,YAAM,SAAS,IAAI,YAAY,KAAK,KAAK,WAAW,QAAQ,GAAG,SAAS;AACxE,aAAO,OAAO,EAAE,MAAM,eAAe,OAAO,CAAC;AAAA,IAC/C;AAKA,UAAM,gBAAgB,MAAM,OAAO,KAAK,mBAAmB;AAAA,MACzD;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAED,QAAI,cAAc,MAAM,cAAc,MAAM,MAAM;AAChD,cAAQ,OAAO,MAAM,cAAc,KAAK,IAAI;AAAA,IAC9C;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,oCAAqC,MAAgB,OAAO;AAAA,CAAI;AAAA,EACvF;AACF;AAEA,KAAK;","names":[]}
@@ -1,6 +1,13 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ ensureNativeDeps
4
+ } from "../../chunk-TJJRIVZ7.js";
5
+ import "../../chunk-2QEJKG7R.js";
6
+ import "../../chunk-Q7BEFSOV.js";
7
+ import "../../chunk-PZUWP5VK.js";
2
8
 
3
9
  // src/entries/mcp-server.ts
4
- var { main } = await import("../../server-J3AQ3YFA.js");
10
+ ensureNativeDeps();
11
+ var { main } = await import("../../server-DLBATUNG.js");
5
12
  await main();
6
13
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/entries/mcp-server.ts"],"sourcesContent":["export {};\nconst { main } = await import('../mcp/server.js');\nawait main();\n"],"mappings":";;;AACA,IAAM,EAAE,KAAK,IAAI,MAAM,OAAO,0BAAkB;AAChD,MAAM,KAAK;","names":[]}
1
+ {"version":3,"sources":["../../../src/entries/mcp-server.ts"],"sourcesContent":["import { ensureNativeDeps } from '../native-deps.js';\nensureNativeDeps();\nconst { main } = await import('../mcp/server.js');\nawait main();\n"],"mappings":";;;;;;;;;AACA,iBAAiB;AACjB,IAAM,EAAE,KAAK,IAAI,MAAM,OAAO,0BAAkB;AAChD,MAAM,KAAK;","names":[]}
@@ -0,0 +1,77 @@
1
+ import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ VectorIndex
4
+ } from "./chunk-XQXXF6MU.js";
5
+ import {
6
+ isProcessAlive
7
+ } from "./chunk-PAUPHPOC.js";
8
+ import "./chunk-SAKJMNSR.js";
9
+ import {
10
+ MycoIndex
11
+ } from "./chunk-PA3VMINE.js";
12
+ import "./chunk-XW3OL55U.js";
13
+ import "./chunk-2QEJKG7R.js";
14
+ import "./chunk-Q7BEFSOV.js";
15
+ import "./chunk-PZUWP5VK.js";
16
+
17
+ // src/cli/stats.ts
18
+ import fs from "fs";
19
+ import path from "path";
20
+ function run(_args, vaultDir) {
21
+ const index = new MycoIndex(path.join(vaultDir, "index.db"));
22
+ const sessions = index.query({ type: "session" });
23
+ const memories = index.query({ type: "memory" });
24
+ const plans = index.query({ type: "plan" });
25
+ console.log("=== Myco Vault ===");
26
+ console.log(`Path: ${vaultDir}`);
27
+ console.log();
28
+ console.log("--- Index ---");
29
+ console.log(`Sessions: ${sessions.length}`);
30
+ console.log(`Memories: ${memories.length}`);
31
+ console.log(`Plans: ${plans.length}`);
32
+ const types = {};
33
+ for (const m of memories) {
34
+ const t = m.frontmatter?.observation_type || "unknown";
35
+ types[t] = (types[t] || 0) + 1;
36
+ }
37
+ if (Object.keys(types).length > 0) {
38
+ console.log("\n--- Memories by Type ---");
39
+ for (const [t, c] of Object.entries(types).sort((a, b) => b[1] - a[1])) {
40
+ console.log(` ${t}: ${c}`);
41
+ }
42
+ }
43
+ const vecDb = path.join(vaultDir, "vectors.db");
44
+ if (fs.existsSync(vecDb)) {
45
+ try {
46
+ const vec = new VectorIndex(vecDb, 1024);
47
+ console.log(`
48
+ --- Vectors ---`);
49
+ console.log(`Embeddings: ${vec.count()}`);
50
+ vec.close();
51
+ } catch (e) {
52
+ console.log(`
53
+ Vectors: error \u2014 ${e.message}`);
54
+ }
55
+ } else {
56
+ console.log("\nVectors: not initialized");
57
+ }
58
+ const daemonPath = path.join(vaultDir, "daemon.json");
59
+ if (fs.existsSync(daemonPath)) {
60
+ try {
61
+ const daemon = JSON.parse(fs.readFileSync(daemonPath, "utf-8"));
62
+ const alive = isProcessAlive(daemon.pid);
63
+ console.log(`
64
+ --- Daemon ---`);
65
+ console.log(`PID: ${daemon.pid} (${alive ? "running" : "dead"})`);
66
+ console.log(`Port: ${daemon.port}`);
67
+ console.log(`Started: ${daemon.started}`);
68
+ console.log(`Sessions: ${(daemon.sessions || []).length}`);
69
+ } catch {
70
+ }
71
+ }
72
+ index.close();
73
+ }
74
+ export {
75
+ run
76
+ };
77
+ //# sourceMappingURL=stats-7VEZN2WF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/stats.ts"],"sourcesContent":["import { MycoIndex } from '../index/sqlite.js';\nimport { VectorIndex } from '../index/vectors.js';\nimport { isProcessAlive } from './shared.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport function run(_args: string[], vaultDir: string): void {\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n\n const sessions = index.query({ type: 'session' });\n const memories = index.query({ type: 'memory' });\n const plans = index.query({ type: 'plan' });\n\n console.log('=== Myco Vault ===');\n console.log(`Path: ${vaultDir}`);\n console.log();\n console.log('--- Index ---');\n console.log(`Sessions: ${sessions.length}`);\n console.log(`Memories: ${memories.length}`);\n console.log(`Plans: ${plans.length}`);\n\n // Memory breakdown by type\n const types: Record<string, number> = {};\n for (const m of memories) {\n const t = (m.frontmatter as Record<string, unknown>)?.observation_type as string || 'unknown';\n types[t] = (types[t] || 0) + 1;\n }\n if (Object.keys(types).length > 0) {\n console.log('\\n--- Memories by Type ---');\n for (const [t, c] of Object.entries(types).sort((a, b) => b[1] - a[1])) {\n console.log(` ${t}: ${c}`);\n }\n }\n\n // Vector index — need dimensions to open; read from daemon config or probe\n const vecDb = path.join(vaultDir, 'vectors.db');\n if (fs.existsSync(vecDb)) {\n try {\n // Use a common dimension; VectorIndex only needs it for CREATE IF NOT EXISTS\n const vec = new VectorIndex(vecDb, 1024);\n console.log(`\\n--- Vectors ---`);\n console.log(`Embeddings: ${vec.count()}`);\n vec.close();\n } catch (e) {\n console.log(`\\nVectors: error — ${(e as Error).message}`);\n }\n } else {\n console.log('\\nVectors: not initialized');\n }\n\n // Daemon\n const daemonPath = path.join(vaultDir, 'daemon.json');\n if (fs.existsSync(daemonPath)) {\n try {\n const daemon = JSON.parse(fs.readFileSync(daemonPath, 'utf-8'));\n const alive = isProcessAlive(daemon.pid);\n console.log(`\\n--- Daemon ---`);\n console.log(`PID: ${daemon.pid} (${alive ? 'running' : 'dead'})`);\n console.log(`Port: ${daemon.port}`);\n console.log(`Started: ${daemon.started}`);\n console.log(`Sessions: ${(daemon.sessions || []).length}`);\n } catch { /* ignore */ }\n }\n\n index.close();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAGA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEV,SAAS,IAAI,OAAiB,UAAwB;AAC3D,QAAM,QAAQ,IAAI,UAAU,KAAK,KAAK,UAAU,UAAU,CAAC;AAE3D,QAAM,WAAW,MAAM,MAAM,EAAE,MAAM,UAAU,CAAC;AAChD,QAAM,WAAW,MAAM,MAAM,EAAE,MAAM,SAAS,CAAC;AAC/C,QAAM,QAAQ,MAAM,MAAM,EAAE,MAAM,OAAO,CAAC;AAE1C,UAAQ,IAAI,oBAAoB;AAChC,UAAQ,IAAI,SAAS,QAAQ,EAAE;AAC/B,UAAQ,IAAI;AACZ,UAAQ,IAAI,eAAe;AAC3B,UAAQ,IAAI,cAAc,SAAS,MAAM,EAAE;AAC3C,UAAQ,IAAI,cAAc,SAAS,MAAM,EAAE;AAC3C,UAAQ,IAAI,cAAc,MAAM,MAAM,EAAE;AAGxC,QAAM,QAAgC,CAAC;AACvC,aAAW,KAAK,UAAU;AACxB,UAAM,IAAK,EAAE,aAAyC,oBAA8B;AACpF,UAAM,CAAC,KAAK,MAAM,CAAC,KAAK,KAAK;AAAA,EAC/B;AACA,MAAI,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG;AACjC,YAAQ,IAAI,4BAA4B;AACxC,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG;AACtE,cAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;AAAA,IAC5B;AAAA,EACF;AAGA,QAAM,QAAQ,KAAK,KAAK,UAAU,YAAY;AAC9C,MAAI,GAAG,WAAW,KAAK,GAAG;AACxB,QAAI;AAEF,YAAM,MAAM,IAAI,YAAY,OAAO,IAAI;AACvC,cAAQ,IAAI;AAAA,gBAAmB;AAC/B,cAAQ,IAAI,eAAe,IAAI,MAAM,CAAC,EAAE;AACxC,UAAI,MAAM;AAAA,IACZ,SAAS,GAAG;AACV,cAAQ,IAAI;AAAA,wBAAuB,EAAY,OAAO,EAAE;AAAA,IAC1D;AAAA,EACF,OAAO;AACL,YAAQ,IAAI,4BAA4B;AAAA,EAC1C;AAGA,QAAM,aAAa,KAAK,KAAK,UAAU,aAAa;AACpD,MAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,GAAG,aAAa,YAAY,OAAO,CAAC;AAC9D,YAAM,QAAQ,eAAe,OAAO,GAAG;AACvC,cAAQ,IAAI;AAAA,eAAkB;AAC9B,cAAQ,IAAI,aAAa,OAAO,GAAG,KAAK,QAAQ,YAAY,MAAM,GAAG;AACrE,cAAQ,IAAI,aAAa,OAAO,IAAI,EAAE;AACtC,cAAQ,IAAI,aAAa,OAAO,OAAO,EAAE;AACzC,cAAQ,IAAI,cAAc,OAAO,YAAY,CAAC,GAAG,MAAM,EAAE;AAAA,IAC3D,QAAQ;AAAA,IAAe;AAAA,EACzB;AAEA,QAAM,MAAM;AACd;","names":[]}
@@ -0,0 +1,50 @@
1
+ import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ createEmbeddingProvider,
4
+ createLlmProvider
5
+ } from "./chunk-N6IAW33G.js";
6
+ import "./chunk-XW3OL55U.js";
7
+ import {
8
+ loadConfig
9
+ } from "./chunk-ISCT2SI6.js";
10
+ import "./chunk-EF4JVH24.js";
11
+ import "./chunk-Q7BEFSOV.js";
12
+ import "./chunk-PZUWP5VK.js";
13
+
14
+ // src/cli/verify.ts
15
+ var VERIFY_LLM_PROMPT = "Respond with OK";
16
+ var VERIFY_EMBEDDING_INPUT = "test";
17
+ async function run(_args, vaultDir) {
18
+ const config = loadConfig(vaultDir);
19
+ const { llm: llmConfig, embedding: embeddingConfig } = config.intelligence;
20
+ let llmOk = false;
21
+ let embeddingOk = false;
22
+ let embeddingDimensions = 0;
23
+ try {
24
+ const llm = createLlmProvider(llmConfig);
25
+ const response = await llm.summarize(VERIFY_LLM_PROMPT);
26
+ llmOk = response.text.length > 0;
27
+ } catch (err) {
28
+ llmOk = false;
29
+ }
30
+ const llmLabel = `LLM (${llmConfig.provider} / ${llmConfig.model}):`;
31
+ console.log(`${llmLabel.padEnd(40)} ${llmOk ? "OK" : "FAIL"}`);
32
+ try {
33
+ const emb = createEmbeddingProvider(embeddingConfig);
34
+ const response = await emb.embed(VERIFY_EMBEDDING_INPUT);
35
+ embeddingDimensions = response.dimensions;
36
+ embeddingOk = embeddingDimensions > 0;
37
+ } catch (err) {
38
+ embeddingOk = false;
39
+ }
40
+ const embLabel = `Embedding (${embeddingConfig.provider} / ${embeddingConfig.model}):`;
41
+ const embStatus = embeddingOk ? `OK (${embeddingDimensions} dimensions)` : "FAIL";
42
+ console.log(`${embLabel.padEnd(40)} ${embStatus}`);
43
+ if (!llmOk || !embeddingOk) {
44
+ process.exit(1);
45
+ }
46
+ }
47
+ export {
48
+ run
49
+ };
50
+ //# sourceMappingURL=verify-HN5DWV2H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/verify.ts"],"sourcesContent":["import { loadConfig } from '../config/loader.js';\nimport { createLlmProvider, createEmbeddingProvider } from '../intelligence/llm.js';\n\nconst VERIFY_LLM_PROMPT = 'Respond with OK';\nconst VERIFY_EMBEDDING_INPUT = 'test';\n\nexport async function run(_args: string[], vaultDir: string): Promise<void> {\n const config = loadConfig(vaultDir);\n const { llm: llmConfig, embedding: embeddingConfig } = config.intelligence;\n\n let llmOk = false;\n let embeddingOk = false;\n let embeddingDimensions = 0;\n\n // Test LLM\n try {\n const llm = createLlmProvider(llmConfig);\n const response = await llm.summarize(VERIFY_LLM_PROMPT);\n llmOk = response.text.length > 0;\n } catch (err) {\n llmOk = false;\n }\n\n const llmLabel = `LLM (${llmConfig.provider} / ${llmConfig.model}):`;\n console.log(`${llmLabel.padEnd(40)} ${llmOk ? 'OK' : 'FAIL'}`);\n\n // Test embedding\n try {\n const emb = createEmbeddingProvider(embeddingConfig);\n const response = await emb.embed(VERIFY_EMBEDDING_INPUT);\n embeddingDimensions = response.dimensions;\n embeddingOk = embeddingDimensions > 0;\n } catch (err) {\n embeddingOk = false;\n }\n\n const embLabel = `Embedding (${embeddingConfig.provider} / ${embeddingConfig.model}):`;\n const embStatus = embeddingOk ? `OK (${embeddingDimensions} dimensions)` : 'FAIL';\n console.log(`${embLabel.padEnd(40)} ${embStatus}`);\n\n if (!llmOk || !embeddingOk) {\n process.exit(1);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAGA,IAAM,oBAAoB;AAC1B,IAAM,yBAAyB;AAE/B,eAAsB,IAAI,OAAiB,UAAiC;AAC1E,QAAM,SAAS,WAAW,QAAQ;AAClC,QAAM,EAAE,KAAK,WAAW,WAAW,gBAAgB,IAAI,OAAO;AAE9D,MAAI,QAAQ;AACZ,MAAI,cAAc;AAClB,MAAI,sBAAsB;AAG1B,MAAI;AACF,UAAM,MAAM,kBAAkB,SAAS;AACvC,UAAM,WAAW,MAAM,IAAI,UAAU,iBAAiB;AACtD,YAAQ,SAAS,KAAK,SAAS;AAAA,EACjC,SAAS,KAAK;AACZ,YAAQ;AAAA,EACV;AAEA,QAAM,WAAW,QAAQ,UAAU,QAAQ,MAAM,UAAU,KAAK;AAChE,UAAQ,IAAI,GAAG,SAAS,OAAO,EAAE,CAAC,IAAI,QAAQ,OAAO,MAAM,EAAE;AAG7D,MAAI;AACF,UAAM,MAAM,wBAAwB,eAAe;AACnD,UAAM,WAAW,MAAM,IAAI,MAAM,sBAAsB;AACvD,0BAAsB,SAAS;AAC/B,kBAAc,sBAAsB;AAAA,EACtC,SAAS,KAAK;AACZ,kBAAc;AAAA,EAChB;AAEA,QAAM,WAAW,cAAc,gBAAgB,QAAQ,MAAM,gBAAgB,KAAK;AAClF,QAAM,YAAY,cAAc,OAAO,mBAAmB,iBAAiB;AAC3E,UAAQ,IAAI,GAAG,SAAS,OAAO,EAAE,CAAC,IAAI,SAAS,EAAE;AAEjD,MAAI,CAAC,SAAS,CAAC,aAAa;AAC1B,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goondocks/myco",
3
- "version": "0.2.13",
3
+ "version": "0.3.0",
4
4
  "description": "Collective agent intelligence — Claude Code plugin",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",