@goondocks/myco 0.4.3 → 0.5.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 (96) 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-2AMAOSRF.js +105 -0
  5. package/dist/chunk-2AMAOSRF.js.map +1 -0
  6. package/dist/{chunk-I7PNZEBO.js → chunk-6LTNFMXO.js} +12 -1
  7. package/dist/{chunk-I7PNZEBO.js.map → chunk-6LTNFMXO.js.map} +1 -1
  8. package/dist/{chunk-2GJFTIWX.js → chunk-7KQB22DP.js} +2 -2
  9. package/dist/{chunk-JBD5KP5G.js → chunk-B6WVNDA5.js} +14 -2
  10. package/dist/chunk-B6WVNDA5.js.map +1 -0
  11. package/dist/chunk-FIA5NTRH.js +159 -0
  12. package/dist/chunk-FIA5NTRH.js.map +1 -0
  13. package/dist/{chunk-GFBG73P4.js → chunk-FIRMTYFH.js} +3 -3
  14. package/dist/{chunk-XCPQHC4X.js → chunk-HJG7Z6SJ.js} +2 -2
  15. package/dist/chunk-HL2S5QZG.js +385 -0
  16. package/dist/chunk-HL2S5QZG.js.map +1 -0
  17. package/dist/{chunk-WBT5DWGC.js → chunk-IURC35BF.js} +2 -2
  18. package/dist/{chunk-67R6EMYD.js → chunk-JI6M2L2W.js} +31 -52
  19. package/dist/chunk-JI6M2L2W.js.map +1 -0
  20. package/dist/{chunk-FPEDTLQ6.js → chunk-JJL6AMDA.js} +3 -101
  21. package/dist/chunk-JJL6AMDA.js.map +1 -0
  22. package/dist/chunk-KYL67SKZ.js +150 -0
  23. package/dist/chunk-KYL67SKZ.js.map +1 -0
  24. package/dist/{chunk-ZCBL5HER.js → chunk-ND4VK6C7.js} +2 -2
  25. package/dist/{chunk-V2OWD2VV.js → chunk-R6LQT3U7.js} +24 -146
  26. package/dist/chunk-R6LQT3U7.js.map +1 -0
  27. package/dist/{chunk-IYFKPSRP.js → chunk-RCV2I4AI.js} +3 -3
  28. package/dist/{chunk-BNIYWCST.js → chunk-X6TKHO22.js} +2 -2
  29. package/dist/{chunk-OUFSLZTX.js → chunk-ZWUFTOG3.js} +21 -9
  30. package/dist/chunk-ZWUFTOG3.js.map +1 -0
  31. package/dist/{cli-PMOFCZQL.js → cli-BLYNNKGJ.js} +24 -18
  32. package/dist/cli-BLYNNKGJ.js.map +1 -0
  33. package/dist/{client-5SUO2UYH.js → client-5GB4WVXE.js} +5 -5
  34. package/dist/curate-S4HOYWXA.js +231 -0
  35. package/dist/curate-S4HOYWXA.js.map +1 -0
  36. package/dist/{detect-providers-IRL2TTLK.js → detect-providers-BIHYFK5M.js} +3 -3
  37. package/dist/digest-7NKYXM6G.js +96 -0
  38. package/dist/digest-7NKYXM6G.js.map +1 -0
  39. package/dist/{init-NUF5UBUJ.js → init-HPQ77WWF.js} +5 -5
  40. package/dist/{main-2XEBVUR6.js → main-NFQ4II75.js} +253 -576
  41. package/dist/main-NFQ4II75.js.map +1 -0
  42. package/dist/{rebuild-E6YFIRYZ.js → rebuild-KQ6G2GZM.js} +8 -7
  43. package/dist/{rebuild-E6YFIRYZ.js.map → rebuild-KQ6G2GZM.js.map} +1 -1
  44. package/dist/{reprocess-7G7KQWCN.js → reprocess-ZL4HKTSC.js} +95 -24
  45. package/dist/reprocess-ZL4HKTSC.js.map +1 -0
  46. package/dist/{restart-ABW4ZK3P.js → restart-FYW662DR.js} +6 -6
  47. package/dist/{search-MPD7SFK6.js → search-E5JQMTXV.js} +6 -6
  48. package/dist/{server-NZLZRITH.js → server-TV3D35HZ.js} +38 -15
  49. package/dist/{server-NZLZRITH.js.map → server-TV3D35HZ.js.map} +1 -1
  50. package/dist/{session-start-YB4A4PZB.js → session-start-5MFEOVQ5.js} +6 -6
  51. package/dist/{setup-digest-K732MGOJ.js → setup-digest-DZAFIBEF.js} +5 -5
  52. package/dist/{setup-llm-XCCH5LYD.js → setup-llm-4BZM33YT.js} +5 -5
  53. package/dist/src/cli.js +4 -4
  54. package/dist/src/daemon/main.js +4 -4
  55. package/dist/src/hooks/post-tool-use.js +5 -5
  56. package/dist/src/hooks/session-end.js +5 -5
  57. package/dist/src/hooks/session-start.js +4 -4
  58. package/dist/src/hooks/stop.js +6 -6
  59. package/dist/src/hooks/stop.js.map +1 -1
  60. package/dist/src/hooks/user-prompt-submit.js +5 -5
  61. package/dist/src/mcp/server.js +4 -4
  62. package/dist/src/prompts/extraction.md +1 -1
  63. package/dist/src/prompts/summary.md +1 -11
  64. package/dist/src/prompts/supersession.md +32 -0
  65. package/dist/{stats-6G7SN5YZ.js → stats-ZIIJ2GB3.js} +5 -5
  66. package/dist/{verify-JFHQH55Z.js → verify-RACBFT2P.js} +4 -4
  67. package/dist/{version-5B2TWXQJ.js → version-HJTVNPOO.js} +4 -4
  68. package/package.json +1 -1
  69. package/skills/setup/SKILL.md +56 -28
  70. package/skills/setup/references/model-recommendations.md +49 -43
  71. package/dist/chunk-67R6EMYD.js.map +0 -1
  72. package/dist/chunk-FPEDTLQ6.js.map +0 -1
  73. package/dist/chunk-JBD5KP5G.js.map +0 -1
  74. package/dist/chunk-OUFSLZTX.js.map +0 -1
  75. package/dist/chunk-V2OWD2VV.js.map +0 -1
  76. package/dist/cli-PMOFCZQL.js.map +0 -1
  77. package/dist/main-2XEBVUR6.js.map +0 -1
  78. package/dist/reprocess-7G7KQWCN.js.map +0 -1
  79. /package/dist/{chunk-2GJFTIWX.js.map → chunk-7KQB22DP.js.map} +0 -0
  80. /package/dist/{chunk-GFBG73P4.js.map → chunk-FIRMTYFH.js.map} +0 -0
  81. /package/dist/{chunk-XCPQHC4X.js.map → chunk-HJG7Z6SJ.js.map} +0 -0
  82. /package/dist/{chunk-WBT5DWGC.js.map → chunk-IURC35BF.js.map} +0 -0
  83. /package/dist/{chunk-ZCBL5HER.js.map → chunk-ND4VK6C7.js.map} +0 -0
  84. /package/dist/{chunk-IYFKPSRP.js.map → chunk-RCV2I4AI.js.map} +0 -0
  85. /package/dist/{chunk-BNIYWCST.js.map → chunk-X6TKHO22.js.map} +0 -0
  86. /package/dist/{client-5SUO2UYH.js.map → client-5GB4WVXE.js.map} +0 -0
  87. /package/dist/{detect-providers-IRL2TTLK.js.map → detect-providers-BIHYFK5M.js.map} +0 -0
  88. /package/dist/{init-NUF5UBUJ.js.map → init-HPQ77WWF.js.map} +0 -0
  89. /package/dist/{restart-ABW4ZK3P.js.map → restart-FYW662DR.js.map} +0 -0
  90. /package/dist/{search-MPD7SFK6.js.map → search-E5JQMTXV.js.map} +0 -0
  91. /package/dist/{session-start-YB4A4PZB.js.map → session-start-5MFEOVQ5.js.map} +0 -0
  92. /package/dist/{setup-digest-K732MGOJ.js.map → setup-digest-DZAFIBEF.js.map} +0 -0
  93. /package/dist/{setup-llm-XCCH5LYD.js.map → setup-llm-4BZM33YT.js.map} +0 -0
  94. /package/dist/{stats-6G7SN5YZ.js.map → stats-ZIIJ2GB3.js.map} +0 -0
  95. /package/dist/{verify-JFHQH55Z.js.map → verify-RACBFT2P.js.map} +0 -0
  96. /package/dist/{version-5B2TWXQJ.js.map → version-HJTVNPOO.js.map} +0 -0
@@ -1,44 +1,49 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
- import {
3
- BufferProcessor,
4
- TranscriptMiner,
5
- writeObservationNotes
6
- } from "./chunk-V2OWD2VV.js";
7
2
  import {
8
3
  EMBEDDING_BATCH_CONCURRENCY,
9
4
  LLM_BATCH_CONCURRENCY,
10
5
  batchExecute
11
6
  } from "./chunk-3JCXYLHD.js";
7
+ import {
8
+ BufferProcessor,
9
+ SUMMARIZATION_FAILED_MARKER,
10
+ TranscriptMiner,
11
+ writeObservationNotes
12
+ } from "./chunk-R6LQT3U7.js";
12
13
  import {
13
14
  VaultWriter,
14
15
  bareSessionId,
16
+ callout,
17
+ extractSection,
15
18
  sessionNoteId
16
- } from "./chunk-I7PNZEBO.js";
19
+ } from "./chunk-6LTNFMXO.js";
17
20
  import {
18
21
  indexNote,
19
22
  require_gray_matter
20
- } from "./chunk-FPEDTLQ6.js";
23
+ } from "./chunk-JJL6AMDA.js";
21
24
  import {
22
25
  generateEmbedding
23
26
  } from "./chunk-RGVBGTD6.js";
24
- import {
25
- createEmbeddingProvider,
26
- createLlmProvider
27
- } from "./chunk-IYFKPSRP.js";
28
27
  import {
29
28
  VectorIndex
30
29
  } from "./chunk-XQXXF6MU.js";
30
+ import "./chunk-KYL67SKZ.js";
31
+ import "./chunk-2AMAOSRF.js";
32
+ import {
33
+ createEmbeddingProvider,
34
+ createLlmProvider
35
+ } from "./chunk-RCV2I4AI.js";
31
36
  import {
32
37
  initFts
33
38
  } from "./chunk-6FQISQNA.js";
34
39
  import {
35
40
  MycoIndex
36
41
  } from "./chunk-AK6GNLPV.js";
37
- import "./chunk-GFBG73P4.js";
42
+ import "./chunk-FIRMTYFH.js";
38
43
  import {
39
44
  parseStringFlag
40
45
  } from "./chunk-SAKJMNSR.js";
41
- import "./chunk-67R6EMYD.js";
46
+ import "./chunk-JI6M2L2W.js";
42
47
  import {
43
48
  loadConfig
44
49
  } from "./chunk-TBRZAJ7W.js";
@@ -46,10 +51,10 @@ import "./chunk-6UJWI4IW.js";
46
51
  import {
47
52
  claudeCodeAdapter,
48
53
  createPerProjectAdapter
49
- } from "./chunk-BNIYWCST.js";
54
+ } from "./chunk-X6TKHO22.js";
50
55
  import {
51
56
  EMBEDDING_INPUT_LIMIT
52
- } from "./chunk-JBD5KP5G.js";
57
+ } from "./chunk-B6WVNDA5.js";
53
58
  import {
54
59
  __toESM
55
60
  } from "./chunk-PZUWP5VK.js";
@@ -58,8 +63,17 @@ import {
58
63
  import fs from "fs";
59
64
  import path from "path";
60
65
  var import_gray_matter = __toESM(require_gray_matter(), 1);
66
+ var CONVERSATION_HEADING = "## Conversation";
67
+ function updateTitleAndSummary(body, newTitle, newNarrative) {
68
+ let updated = body.replace(/^# .*/m, `# ${newTitle}`);
69
+ const summaryCallout = callout("abstract", "Summary", newNarrative);
70
+ updated = updated.replace(/> \[!abstract\] Summary\n(?:> .*\n?)*/m, summaryCallout + "\n");
71
+ return updated;
72
+ }
61
73
  async function run(args, vaultDir) {
62
74
  const sessionFilter = parseStringFlag(args, "--session");
75
+ const dateFilter = parseStringFlag(args, "--date");
76
+ const failedOnly = args.includes("--failed");
63
77
  const skipLlm = args.includes("--index-only");
64
78
  const config = loadConfig(vaultDir);
65
79
  const index = new MycoIndex(path.join(vaultDir, "index.db"));
@@ -73,7 +87,7 @@ async function run(args, vaultDir) {
73
87
  } catch (e) {
74
88
  console.log(`Vector index unavailable: ${e.message}`);
75
89
  }
76
- const processor = llmProvider ? new BufferProcessor(llmProvider, config.intelligence.llm.context_window) : null;
90
+ const processor = llmProvider ? new BufferProcessor(llmProvider, config.intelligence.llm.context_window, config.capture) : null;
77
91
  const writer = new VaultWriter(vaultDir);
78
92
  const miner = new TranscriptMiner({
79
93
  additionalAdapters: config.capture.transcript_paths.map(
@@ -89,6 +103,7 @@ async function run(args, vaultDir) {
89
103
  }
90
104
  const sessionFiles = [];
91
105
  for (const dateDir of fs.readdirSync(sessionsDir)) {
106
+ if (dateFilter && dateDir !== dateFilter) continue;
92
107
  const datePath = path.join(sessionsDir, dateDir);
93
108
  if (!fs.statSync(datePath).isDirectory()) continue;
94
109
  for (const file of fs.readdirSync(datePath)) {
@@ -102,16 +117,23 @@ async function run(args, vaultDir) {
102
117
  }
103
118
  }
104
119
  if (sessionFiles.length === 0) {
105
- console.log(sessionFilter ? `No sessions matching "${sessionFilter}" found.` : "No sessions found.");
120
+ const filters = [sessionFilter && `session="${sessionFilter}"`, dateFilter && `date="${dateFilter}"`].filter(Boolean);
121
+ console.log(filters.length ? `No sessions matching ${filters.join(", ")} found.` : "No sessions found.");
106
122
  index.close();
107
123
  vectorIndex?.close();
108
124
  return;
109
125
  }
110
- const tasks = sessionFiles.map(({ relativePath, sessionId }) => {
111
- const raw = fs.readFileSync(path.join(vaultDir, relativePath), "utf-8");
112
- const { data: frontmatter } = (0, import_gray_matter.default)(raw);
126
+ let tasks = [];
127
+ for (const { relativePath, sessionId } of sessionFiles) {
128
+ const rawContent = fs.readFileSync(path.join(vaultDir, relativePath), "utf-8");
129
+ const { data: frontmatter, content: body } = (0, import_gray_matter.default)(rawContent);
130
+ const hasFailed = body.includes(SUMMARIZATION_FAILED_MARKER);
131
+ if (failedOnly && !hasFailed) continue;
113
132
  const bare = bareSessionId(sessionId);
114
133
  const turnsResult = miner.getAllTurnsWithSource(bare);
134
+ const conversationSection = extractSection(body, CONVERSATION_HEADING);
135
+ const fmEnd = rawContent.indexOf("---", 4);
136
+ const frontmatterBlock = rawContent.slice(0, fmEnd + 3);
115
137
  const batchEvents = turnsResult && turnsResult.turns.length > 0 ? turnsResult.turns.map((t) => ({
116
138
  type: "turn",
117
139
  prompt: t.prompt,
@@ -119,8 +141,19 @@ async function run(args, vaultDir) {
119
141
  response: t.aiResponse ?? "",
120
142
  timestamp: t.timestamp
121
143
  })) : null;
122
- return { relativePath, sessionId, bare, frontmatter, batchEvents, turnCount: turnsResult?.turns.length ?? 0 };
123
- });
144
+ tasks.push({ relativePath, sessionId, bare, frontmatter, frontmatterBlock, body, conversationSection, batchEvents, turnCount: turnsResult?.turns.length ?? 0, hasFailed });
145
+ }
146
+ if (failedOnly) {
147
+ console.log(`Found ${tasks.length} failed session(s) out of ${sessionFiles.length} checked.
148
+ `);
149
+ }
150
+ if (tasks.length === 0) {
151
+ const filters = [sessionFilter && `session="${sessionFilter}"`, dateFilter && `date="${dateFilter}"`, failedOnly && "failed"].filter(Boolean);
152
+ console.log(filters.length ? `No sessions matching ${filters.join(", ")} found.` : "No sessions found.");
153
+ index.close();
154
+ vectorIndex?.close();
155
+ return;
156
+ }
124
157
  console.log(`Reprocessing ${tasks.length} session(s)...
125
158
  `);
126
159
  const embedJobs = [];
@@ -170,6 +203,44 @@ Extraction complete: ${done} sessions processed.`);
170
203
  for (const r of extractionResult.results) {
171
204
  if (r.status === "fulfilled") totalObservations += r.value;
172
205
  }
206
+ let summarized = 0;
207
+ if (processor) {
208
+ const summarizableTasks = tasks.filter((t) => t.conversationSection);
209
+ if (summarizableTasks.length > 0) {
210
+ console.log(`
211
+ Regenerating summaries...`);
212
+ const summaryResult = await batchExecute(
213
+ summarizableTasks,
214
+ async (task) => {
215
+ process.stdout.write(` ${task.sessionId.slice(0, 12)}...`);
216
+ const user = typeof task.frontmatter.user === "string" ? task.frontmatter.user : void 0;
217
+ const result = await processor.summarizeSession(task.conversationSection, task.bare, user);
218
+ if (result.summary.includes(SUMMARIZATION_FAILED_MARKER)) {
219
+ process.stdout.write(` summarization failed again, skipped
220
+ `);
221
+ return false;
222
+ }
223
+ const updatedBody = updateTitleAndSummary(task.body, result.title, result.summary);
224
+ fs.writeFileSync(path.join(vaultDir, task.relativePath), task.frontmatterBlock + updatedBody);
225
+ indexNote(index, vaultDir, task.relativePath);
226
+ process.stdout.write(` \u2192 "${result.title}"
227
+ `);
228
+ return true;
229
+ },
230
+ {
231
+ concurrency: LLM_BATCH_CONCURRENCY,
232
+ onProgress: (done, total) => {
233
+ if (done === total) console.log(`
234
+ Summarization complete.`);
235
+ }
236
+ }
237
+ );
238
+ for (const r of summaryResult.results) {
239
+ if (r.status === "fulfilled" && r.value) summarized++;
240
+ }
241
+ }
242
+ console.log(`${summarized}/${tasks.length} sessions updated.`);
243
+ }
173
244
  if (vectorIndex && embedJobs.length > 0) {
174
245
  console.log(`Embedding ${embedJobs.length} notes (concurrency: ${EMBEDDING_BATCH_CONCURRENCY})...`);
175
246
  const embResult = await batchExecute(
@@ -189,11 +260,11 @@ Extraction complete: ${done} sessions processed.`);
189
260
  }
190
261
  }
191
262
  console.log(`
192
- Done: ${tasks.length} sessions reprocessed, ${totalObservations} observations extracted.`);
263
+ Done: ${tasks.length} sessions reprocessed, ${totalObservations} observations extracted, ${summarized} summaries regenerated.`);
193
264
  index.close();
194
265
  vectorIndex?.close();
195
266
  }
196
267
  export {
197
268
  run
198
269
  };
199
- //# sourceMappingURL=reprocess-7G7KQWCN.js.map
270
+ //# sourceMappingURL=reprocess-ZL4HKTSC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/reprocess.ts"],"sourcesContent":["/**\n * myco reprocess — re-run the observation extraction and summarization pipeline\n * for existing sessions. Useful after bugs or when the LLM backend changes.\n *\n * Reads transcripts (the source of truth), re-extracts observations, regenerates\n * summaries/titles, and re-indexes everything. Existing spore files from those\n * sessions are preserved — new observations are additive.\n *\n * Flags:\n * --session <id> Filter to sessions matching this substring\n * --date <YYYY-MM-DD> Filter to sessions from a specific date\n * --failed Only reprocess sessions with failed summaries\n * --index-only Skip all LLM calls (re-index only)\n */\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { MycoIndex } from '../index/sqlite.js';\nimport { VectorIndex } from '../index/vectors.js';\nimport { initFts } from '../index/fts.js';\nimport { indexNote } from '../index/rebuild.js';\nimport { loadConfig } from '../config/loader.js';\nimport { createLlmProvider, createEmbeddingProvider } from '../intelligence/llm.js';\nimport { generateEmbedding } from '../intelligence/embeddings.js';\nimport { batchExecute, LLM_BATCH_CONCURRENCY, EMBEDDING_BATCH_CONCURRENCY } from '../intelligence/batch.js';\nimport { BufferProcessor, SUMMARIZATION_FAILED_MARKER } from '../daemon/processor.js';\nimport { TranscriptMiner } from '../capture/transcript-miner.js';\nimport { VaultWriter } from '../vault/writer.js';\nimport { writeObservationNotes } from '../vault/observations.js';\nimport { createPerProjectAdapter } from '../agents/adapter.js';\nimport { claudeCodeAdapter } from '../agents/claude-code.js';\nimport { sessionNoteId, bareSessionId } from '../vault/session-id.js';\nimport { EMBEDDING_INPUT_LIMIT } from '../constants.js';\nimport { callout, extractSection } from '../obsidian/formatter.js';\nimport { parseStringFlag } from './shared.js';\nimport matter from 'gray-matter';\n\n\ninterface EmbedJob {\n id: string;\n text: string;\n metadata: Record<string, string>;\n}\n\ninterface SessionTask {\n relativePath: string;\n sessionId: string;\n bare: string;\n frontmatter: Record<string, unknown>;\n /** Raw frontmatter block (---\\n...\\n---) preserved verbatim to avoid YAML re-serialization bugs. */\n frontmatterBlock: string;\n /** Session note body after frontmatter. */\n body: string;\n conversationSection: string;\n batchEvents: Array<Record<string, unknown>> | null;\n turnCount: number;\n hasFailed: boolean;\n}\n\n/** Section heading for conversation content in session notes. */\nconst CONVERSATION_HEADING = '## Conversation';\n\n/**\n * Replace the title (first `# ` line) and summary callout in a session note body.\n */\nfunction updateTitleAndSummary(body: string, newTitle: string, newNarrative: string): string {\n // Replace the title line (first occurrence of `# ...`)\n let updated = body.replace(/^# .*/m, `# ${newTitle}`);\n\n // Replace the summary callout block: from `> [!abstract]` through consecutive `> ` lines\n const summaryCallout = callout('abstract', 'Summary', newNarrative);\n updated = updated.replace(/> \\[!abstract\\] Summary\\n(?:> .*\\n?)*/m, summaryCallout + '\\n');\n\n return updated;\n}\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const sessionFilter = parseStringFlag(args, '--session');\n const dateFilter = parseStringFlag(args, '--date');\n const failedOnly = args.includes('--failed');\n const skipLlm = args.includes('--index-only');\n\n const config = loadConfig(vaultDir);\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n initFts(index);\n\n const llmProvider = skipLlm ? null : 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.log(`Vector index unavailable: ${(e as Error).message}`);\n }\n\n const processor = llmProvider\n ? new BufferProcessor(llmProvider, config.intelligence.llm.context_window, config.capture)\n : null;\n const writer = new VaultWriter(vaultDir);\n const miner = new TranscriptMiner({\n additionalAdapters: config.capture.transcript_paths.map((p: string) =>\n createPerProjectAdapter(p, claudeCodeAdapter.parseTurns),\n ),\n });\n\n // Find sessions to reprocess\n const sessionsDir = path.join(vaultDir, 'sessions');\n if (!fs.existsSync(sessionsDir)) {\n console.log('No sessions directory found.');\n index.close();\n vectorIndex?.close();\n return;\n }\n\n const sessionFiles: Array<{ relativePath: string; sessionId: string }> = [];\n for (const dateDir of fs.readdirSync(sessionsDir)) {\n if (dateFilter && dateDir !== dateFilter) continue;\n const datePath = path.join(sessionsDir, dateDir);\n if (!fs.statSync(datePath).isDirectory()) continue;\n for (const file of fs.readdirSync(datePath)) {\n if (!file.startsWith('session-') || !file.endsWith('.md')) continue;\n const sessionId = file.replace('session-', '').replace('.md', '');\n if (sessionFilter && !sessionId.includes(sessionFilter)) continue;\n sessionFiles.push({\n relativePath: path.join('sessions', dateDir, file),\n sessionId,\n });\n }\n }\n\n if (sessionFiles.length === 0) {\n const filters = [sessionFilter && `session=\"${sessionFilter}\"`, dateFilter && `date=\"${dateFilter}\"`].filter(Boolean);\n console.log(filters.length ? `No sessions matching ${filters.join(', ')} found.` : 'No sessions found.');\n index.close();\n vectorIndex?.close();\n return;\n }\n\n // Prepare tasks: read transcripts and session content, build extraction inputs.\n // When --failed is set, check the marker before building expensive task fields.\n let tasks: SessionTask[] = [];\n for (const { relativePath, sessionId } of sessionFiles) {\n const rawContent = fs.readFileSync(path.join(vaultDir, relativePath), 'utf-8');\n const { data: frontmatter, content: body } = matter(rawContent);\n const hasFailed = body.includes(SUMMARIZATION_FAILED_MARKER);\n\n // Early skip: when --failed is set, don't build task for sessions that succeeded\n if (failedOnly && !hasFailed) continue;\n\n const bare = bareSessionId(sessionId);\n const turnsResult = miner.getAllTurnsWithSource(bare);\n const conversationSection = extractSection(body, CONVERSATION_HEADING);\n\n // Preserve raw frontmatter block verbatim (matter.stringify corrupts YAML values)\n const fmEnd = rawContent.indexOf('---', 4);\n const frontmatterBlock = rawContent.slice(0, fmEnd + 3);\n\n const batchEvents = turnsResult && turnsResult.turns.length > 0\n ? turnsResult.turns.map((t) => ({\n type: 'turn' as const,\n prompt: t.prompt,\n tool_count: t.toolCount,\n response: t.aiResponse ?? '',\n timestamp: t.timestamp,\n }))\n : null;\n\n tasks.push({ relativePath, sessionId, bare, frontmatter, frontmatterBlock, body, conversationSection, batchEvents, turnCount: turnsResult?.turns.length ?? 0, hasFailed });\n }\n\n if (failedOnly) {\n console.log(`Found ${tasks.length} failed session(s) out of ${sessionFiles.length} checked.\\n`);\n }\n\n if (tasks.length === 0) {\n const filters = [sessionFilter && `session=\"${sessionFilter}\"`, dateFilter && `date=\"${dateFilter}\"`, failedOnly && 'failed'].filter(Boolean);\n console.log(filters.length ? `No sessions matching ${filters.join(', ')} found.` : 'No sessions found.');\n index.close();\n vectorIndex?.close();\n return;\n }\n\n console.log(`Reprocessing ${tasks.length} session(s)...\\n`);\n\n // Phase 1: LLM extraction (concurrency-limited) + FTS re-indexing\n const embedJobs: EmbedJob[] = [];\n let totalObservations = 0;\n\n const extractionResult = await batchExecute(\n tasks,\n async (task) => {\n let obs = 0;\n process.stdout.write(` ${task.sessionId.slice(0, 12)}... ${task.turnCount} turns`);\n\n if (processor && task.batchEvents) {\n const result = await processor.process(task.batchEvents, task.bare);\n if (result.observations.length > 0) {\n writeObservationNotes(result.observations, task.bare, writer, index, vaultDir);\n obs = result.observations.length;\n process.stdout.write(` → ${obs} observations`);\n\n for (const o of result.observations) {\n embedJobs.push({\n id: `${o.type}-${task.bare.slice(-6)}-${Date.now()}`,\n text: `${o.title}\\n${o.content}`.slice(0, EMBEDDING_INPUT_LIMIT),\n metadata: { type: 'spore', session_id: task.bare },\n });\n }\n }\n }\n\n // FTS re-index (fast, no LLM)\n indexNote(index, vaultDir, task.relativePath);\n\n // Queue session embedding\n const embText = `${task.frontmatter.title ?? ''}\\n${task.frontmatter.summary ?? ''}`.slice(0, EMBEDDING_INPUT_LIMIT);\n if (embText.trim()) {\n embedJobs.push({\n id: sessionNoteId(task.bare),\n text: embText,\n metadata: { type: 'session', session_id: task.bare },\n });\n }\n\n process.stdout.write('\\n');\n return obs;\n },\n {\n concurrency: LLM_BATCH_CONCURRENCY,\n onProgress: (done, total) => {\n if (done === total) console.log(`\\nExtraction complete: ${done} sessions processed.`);\n },\n },\n );\n\n for (const r of extractionResult.results) {\n if (r.status === 'fulfilled') totalObservations += r.value;\n }\n\n // Phase 2: Resummarize sessions (concurrency-limited, consistent with Phase 1)\n let summarized = 0;\n if (processor) {\n const summarizableTasks = tasks.filter((t) => t.conversationSection);\n if (summarizableTasks.length > 0) {\n console.log(`\\nRegenerating summaries...`);\n\n const summaryResult = await batchExecute(\n summarizableTasks,\n async (task) => {\n process.stdout.write(` ${task.sessionId.slice(0, 12)}...`);\n const user = typeof task.frontmatter.user === 'string' ? task.frontmatter.user : undefined;\n const result = await processor.summarizeSession(task.conversationSection, task.bare, user);\n\n if (result.summary.includes(SUMMARIZATION_FAILED_MARKER)) {\n process.stdout.write(` summarization failed again, skipped\\n`);\n return false;\n }\n\n const updatedBody = updateTitleAndSummary(task.body, result.title, result.summary);\n fs.writeFileSync(path.join(vaultDir, task.relativePath), task.frontmatterBlock + updatedBody);\n indexNote(index, vaultDir, task.relativePath);\n process.stdout.write(` → \"${result.title}\"\\n`);\n return true;\n },\n {\n concurrency: LLM_BATCH_CONCURRENCY,\n onProgress: (done, total) => {\n if (done === total) console.log(`\\nSummarization complete.`);\n },\n },\n );\n\n for (const r of summaryResult.results) {\n if (r.status === 'fulfilled' && r.value) summarized++;\n }\n }\n\n console.log(`${summarized}/${tasks.length} sessions updated.`);\n }\n\n // Phase 3: Parallel embeddings\n if (vectorIndex && embedJobs.length > 0) {\n console.log(`Embedding ${embedJobs.length} notes (concurrency: ${EMBEDDING_BATCH_CONCURRENCY})...`);\n\n const embResult = await batchExecute(\n embedJobs,\n async (job) => {\n const emb = await generateEmbedding(embeddingProvider, job.text);\n vectorIndex!.upsert(job.id, emb.embedding, job.metadata);\n },\n {\n concurrency: EMBEDDING_BATCH_CONCURRENCY,\n onProgress: (done, total) => process.stdout.write(`\\r Embedded ${done}/${total}`),\n },\n );\n\n process.stdout.write('\\n');\n if (embResult.failed > 0) {\n console.log(` ${embResult.failed} embedding(s) failed.`);\n }\n }\n\n console.log(`\\nDone: ${tasks.length} sessions reprocessed, ${totalObservations} observations extracted, ${summarized} summaries regenerated.`);\n\n index.close();\n vectorIndex?.close();\n}\n"],"mappings":"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","names":["matter"]}
@@ -1,11 +1,11 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  isProcessAlive
4
- } from "./chunk-GFBG73P4.js";
4
+ } from "./chunk-FIRMTYFH.js";
5
5
  import "./chunk-SAKJMNSR.js";
6
- import "./chunk-67R6EMYD.js";
7
- import "./chunk-BNIYWCST.js";
8
- import "./chunk-JBD5KP5G.js";
6
+ import "./chunk-JI6M2L2W.js";
7
+ import "./chunk-X6TKHO22.js";
8
+ import "./chunk-B6WVNDA5.js";
9
9
  import "./chunk-PZUWP5VK.js";
10
10
 
11
11
  // src/cli/restart.ts
@@ -29,7 +29,7 @@ async function run(_args, vaultDir) {
29
29
  } catch {
30
30
  }
31
31
  }
32
- const { DaemonClient } = await import("./client-5SUO2UYH.js");
32
+ const { DaemonClient } = await import("./client-5GB4WVXE.js");
33
33
  const client = new DaemonClient(vaultDir);
34
34
  console.log("Waiting for health check...");
35
35
  const healthy = await client.ensureRunning();
@@ -47,4 +47,4 @@ async function run(_args, vaultDir) {
47
47
  export {
48
48
  run
49
49
  };
50
- //# sourceMappingURL=restart-ABW4ZK3P.js.map
50
+ //# sourceMappingURL=restart-FYW662DR.js.map
@@ -2,24 +2,24 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
2
2
  import {
3
3
  generateEmbedding
4
4
  } from "./chunk-RGVBGTD6.js";
5
- import {
6
- createEmbeddingProvider
7
- } from "./chunk-IYFKPSRP.js";
8
5
  import {
9
6
  VectorIndex
10
7
  } from "./chunk-XQXXF6MU.js";
8
+ import {
9
+ createEmbeddingProvider
10
+ } from "./chunk-RCV2I4AI.js";
11
11
  import {
12
12
  searchFts
13
13
  } from "./chunk-6FQISQNA.js";
14
14
  import {
15
15
  MycoIndex
16
16
  } from "./chunk-AK6GNLPV.js";
17
- import "./chunk-67R6EMYD.js";
17
+ import "./chunk-JI6M2L2W.js";
18
18
  import {
19
19
  loadConfig
20
20
  } from "./chunk-TBRZAJ7W.js";
21
21
  import "./chunk-6UJWI4IW.js";
22
- import "./chunk-JBD5KP5G.js";
22
+ import "./chunk-B6WVNDA5.js";
23
23
  import "./chunk-PZUWP5VK.js";
24
24
 
25
25
  // src/cli/search.ts
@@ -117,4 +117,4 @@ export {
117
117
  run,
118
118
  runVectors
119
119
  };
120
- //# sourceMappingURL=search-MPD7SFK6.js.map
120
+ //# sourceMappingURL=search-E5JQMTXV.js.map
@@ -4,25 +4,32 @@ import {
4
4
  } from "./chunk-BMJX2IDQ.js";
5
5
  import {
6
6
  handleMycoContext
7
- } from "./chunk-WBT5DWGC.js";
8
- import "./chunk-5EZ7QF6J.js";
7
+ } from "./chunk-IURC35BF.js";
9
8
  import {
10
9
  VaultWriter
11
- } from "./chunk-I7PNZEBO.js";
10
+ } from "./chunk-6LTNFMXO.js";
11
+ import "./chunk-5EZ7QF6J.js";
12
+ import {
13
+ checkSupersession
14
+ } from "./chunk-FIA5NTRH.js";
12
15
  import {
13
- OBSERVATION_TYPES,
14
- PLAN_STATUSES,
15
16
  indexNote
16
- } from "./chunk-FPEDTLQ6.js";
17
+ } from "./chunk-JJL6AMDA.js";
17
18
  import {
18
19
  generateEmbedding
19
20
  } from "./chunk-RGVBGTD6.js";
20
- import {
21
- createEmbeddingProvider
22
- } from "./chunk-IYFKPSRP.js";
23
21
  import {
24
22
  VectorIndex
25
23
  } from "./chunk-XQXXF6MU.js";
24
+ import "./chunk-KYL67SKZ.js";
25
+ import {
26
+ OBSERVATION_TYPES,
27
+ PLAN_STATUSES
28
+ } from "./chunk-2AMAOSRF.js";
29
+ import {
30
+ createEmbeddingProvider,
31
+ createLlmProvider
32
+ } from "./chunk-RCV2I4AI.js";
26
33
  import {
27
34
  planFm,
28
35
  sessionFm,
@@ -35,7 +42,7 @@ import {
35
42
  import {
36
43
  MycoIndex
37
44
  } from "./chunk-AK6GNLPV.js";
38
- import "./chunk-67R6EMYD.js";
45
+ import "./chunk-JI6M2L2W.js";
39
46
  import {
40
47
  loadConfig
41
48
  } from "./chunk-TBRZAJ7W.js";
@@ -65,11 +72,11 @@ import {
65
72
  } from "./chunk-HIN3UVOG.js";
66
73
  import {
67
74
  getPluginVersion
68
- } from "./chunk-2GJFTIWX.js";
75
+ } from "./chunk-7KQB22DP.js";
69
76
  import {
70
77
  resolveVaultDir
71
78
  } from "./chunk-N33KUCFP.js";
72
- import "./chunk-BNIYWCST.js";
79
+ import "./chunk-X6TKHO22.js";
73
80
  import {
74
81
  CONTENT_SNIPPET_CHARS,
75
82
  EMBEDDING_INPUT_LIMIT,
@@ -78,7 +85,7 @@ import {
78
85
  MCP_SESSIONS_DEFAULT_LIMIT,
79
86
  RECALL_SUMMARY_PREVIEW_CHARS,
80
87
  SESSION_SUMMARY_PREVIEW_CHARS
81
- } from "./chunk-JBD5KP5G.js";
88
+ } from "./chunk-B6WVNDA5.js";
82
89
  import {
83
90
  __commonJS,
84
91
  __toESM
@@ -14691,6 +14698,16 @@ function createMycoServer(config2) {
14691
14698
  case TOOL_REMEMBER: {
14692
14699
  const result = await handleMycoRemember(config2.vaultDir, idx, input);
14693
14700
  embedNote(result.id, String(input.content), { type: "spore", observation_type: String(input.type ?? ""), importance: "high" });
14701
+ if (config2.vectorIndex && config2.embeddingProvider && config2.llmProvider) {
14702
+ checkSupersession(result.id, {
14703
+ index: idx,
14704
+ vectorIndex: config2.vectorIndex,
14705
+ embeddingProvider: config2.embeddingProvider,
14706
+ llmProvider: config2.llmProvider,
14707
+ vaultDir: config2.vaultDir
14708
+ }).catch(() => {
14709
+ });
14710
+ }
14694
14711
  logActivity(TOOL_REMEMBER, { id: result.id, observation_type: input.type, path: result.note_path });
14695
14712
  return { content: [{ type: "text", text: JSON.stringify(result) }] };
14696
14713
  }
@@ -14749,6 +14766,7 @@ async function main() {
14749
14766
  const config2 = fs3.existsSync(path5.join(vaultDir, "myco.yaml")) ? loadConfig(vaultDir) : void 0;
14750
14767
  let embeddingProvider;
14751
14768
  let vectorIndex;
14769
+ let llmProvider;
14752
14770
  if (config2) {
14753
14771
  try {
14754
14772
  embeddingProvider = createEmbeddingProvider(config2.intelligence.embedding);
@@ -14756,12 +14774,17 @@ async function main() {
14756
14774
  vectorIndex = new VectorIndex(path5.join(vaultDir, "vectors.db"), testEmbed.dimensions);
14757
14775
  } catch {
14758
14776
  }
14777
+ try {
14778
+ llmProvider = createLlmProvider(config2.intelligence.llm);
14779
+ } catch {
14780
+ }
14759
14781
  }
14760
14782
  const server = createMycoServer({
14761
14783
  vaultDir,
14762
14784
  teamUser: config2?.team?.user,
14763
14785
  embeddingProvider,
14764
- vectorIndex
14786
+ vectorIndex,
14787
+ llmProvider
14765
14788
  });
14766
14789
  await server.start();
14767
14790
  }
@@ -14769,4 +14792,4 @@ export {
14769
14792
  createMycoServer,
14770
14793
  main
14771
14794
  };
14772
- //# sourceMappingURL=server-NZLZRITH.js.map
14795
+ //# sourceMappingURL=server-TV3D35HZ.js.map