@goondocks/myco 0.4.4 → 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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +5 -1
- package/dist/{chunk-TK2ZYIAL.js → chunk-7KQB22DP.js} +2 -2
- package/dist/{chunk-TDLQBGKA.js → chunk-B6WVNDA5.js} +10 -2
- package/dist/{chunk-TDLQBGKA.js.map → chunk-B6WVNDA5.js.map} +1 -1
- package/dist/chunk-FIA5NTRH.js +159 -0
- package/dist/chunk-FIA5NTRH.js.map +1 -0
- package/dist/{chunk-5FIIK27E.js → chunk-FIRMTYFH.js} +3 -3
- package/dist/{chunk-6CAKKNGD.js → chunk-HJG7Z6SJ.js} +2 -2
- package/dist/{chunk-3F63SFZZ.js → chunk-HL2S5QZG.js} +8 -4
- package/dist/chunk-HL2S5QZG.js.map +1 -0
- package/dist/{chunk-42R7KVAW.js → chunk-IURC35BF.js} +2 -2
- package/dist/{chunk-OPO47BVS.js → chunk-JI6M2L2W.js} +2 -2
- package/dist/{chunk-PD7LV22R.js → chunk-KYL67SKZ.js} +50 -50
- package/dist/chunk-KYL67SKZ.js.map +1 -0
- package/dist/{chunk-XIIVIMFC.js → chunk-ND4VK6C7.js} +2 -2
- package/dist/{chunk-DKHYIA2V.js → chunk-R6LQT3U7.js} +11 -11
- package/dist/{chunk-OSZRLHIJ.js → chunk-RCV2I4AI.js} +3 -3
- package/dist/{chunk-EQVQEFOA.js → chunk-X6TKHO22.js} +2 -2
- package/dist/{chunk-KDWBZSOB.js → chunk-ZWUFTOG3.js} +4 -4
- package/dist/{cli-WOM4Z2Z4.js → cli-BLYNNKGJ.js} +21 -18
- package/dist/cli-BLYNNKGJ.js.map +1 -0
- package/dist/{client-XCNF6NFT.js → client-5GB4WVXE.js} +5 -5
- package/dist/curate-S4HOYWXA.js +231 -0
- package/dist/curate-S4HOYWXA.js.map +1 -0
- package/dist/{detect-providers-CQSPTW2B.js → detect-providers-BIHYFK5M.js} +3 -3
- package/dist/{digest-WTS6S4XP.js → digest-7NKYXM6G.js} +8 -8
- package/dist/{init-VPLUEULI.js → init-HPQ77WWF.js} +5 -5
- package/dist/{main-OGXH6XWO.js → main-NFQ4II75.js} +36 -14
- package/dist/main-NFQ4II75.js.map +1 -0
- package/dist/{rebuild-Z4YUY6HT.js → rebuild-KQ6G2GZM.js} +4 -4
- package/dist/{reprocess-DMGPZTLC.js → reprocess-ZL4HKTSC.js} +13 -13
- package/dist/{restart-QCQQ55KX.js → restart-FYW662DR.js} +6 -6
- package/dist/{search-ACEFQOUW.js → search-E5JQMTXV.js} +4 -4
- package/dist/{server-BQ3DWKZ6.js → server-TV3D35HZ.js} +30 -9
- package/dist/{server-BQ3DWKZ6.js.map → server-TV3D35HZ.js.map} +1 -1
- package/dist/{session-start-BXRTKS4X.js → session-start-5MFEOVQ5.js} +6 -6
- package/dist/{setup-digest-EJXSQGZ5.js → setup-digest-DZAFIBEF.js} +5 -5
- package/dist/{setup-llm-P3MLWUDR.js → setup-llm-4BZM33YT.js} +5 -5
- package/dist/src/cli.js +4 -4
- package/dist/src/daemon/main.js +4 -4
- package/dist/src/hooks/post-tool-use.js +5 -5
- package/dist/src/hooks/session-end.js +5 -5
- package/dist/src/hooks/session-start.js +4 -4
- package/dist/src/hooks/stop.js +5 -5
- package/dist/src/hooks/user-prompt-submit.js +5 -5
- package/dist/src/mcp/server.js +4 -4
- package/dist/src/prompts/supersession.md +32 -0
- package/dist/{stats-3FAP5FKV.js → stats-ZIIJ2GB3.js} +5 -5
- package/dist/{verify-3FTCOULE.js → verify-RACBFT2P.js} +4 -4
- package/dist/{version-AL67JH7X.js → version-HJTVNPOO.js} +4 -4
- package/package.json +1 -1
- package/dist/chunk-3F63SFZZ.js.map +0 -1
- package/dist/chunk-PD7LV22R.js.map +0 -1
- package/dist/cli-WOM4Z2Z4.js.map +0 -1
- package/dist/main-OGXH6XWO.js.map +0 -1
- /package/dist/{chunk-TK2ZYIAL.js.map → chunk-7KQB22DP.js.map} +0 -0
- /package/dist/{chunk-5FIIK27E.js.map → chunk-FIRMTYFH.js.map} +0 -0
- /package/dist/{chunk-6CAKKNGD.js.map → chunk-HJG7Z6SJ.js.map} +0 -0
- /package/dist/{chunk-42R7KVAW.js.map → chunk-IURC35BF.js.map} +0 -0
- /package/dist/{chunk-OPO47BVS.js.map → chunk-JI6M2L2W.js.map} +0 -0
- /package/dist/{chunk-XIIVIMFC.js.map → chunk-ND4VK6C7.js.map} +0 -0
- /package/dist/{chunk-DKHYIA2V.js.map → chunk-R6LQT3U7.js.map} +0 -0
- /package/dist/{chunk-OSZRLHIJ.js.map → chunk-RCV2I4AI.js.map} +0 -0
- /package/dist/{chunk-EQVQEFOA.js.map → chunk-X6TKHO22.js.map} +0 -0
- /package/dist/{chunk-KDWBZSOB.js.map → chunk-ZWUFTOG3.js.map} +0 -0
- /package/dist/{client-XCNF6NFT.js.map → client-5GB4WVXE.js.map} +0 -0
- /package/dist/{detect-providers-CQSPTW2B.js.map → detect-providers-BIHYFK5M.js.map} +0 -0
- /package/dist/{digest-WTS6S4XP.js.map → digest-7NKYXM6G.js.map} +0 -0
- /package/dist/{init-VPLUEULI.js.map → init-HPQ77WWF.js.map} +0 -0
- /package/dist/{rebuild-Z4YUY6HT.js.map → rebuild-KQ6G2GZM.js.map} +0 -0
- /package/dist/{reprocess-DMGPZTLC.js.map → reprocess-ZL4HKTSC.js.map} +0 -0
- /package/dist/{restart-QCQQ55KX.js.map → restart-FYW662DR.js.map} +0 -0
- /package/dist/{search-ACEFQOUW.js.map → search-E5JQMTXV.js.map} +0 -0
- /package/dist/{session-start-BXRTKS4X.js.map → session-start-5MFEOVQ5.js.map} +0 -0
- /package/dist/{setup-digest-EJXSQGZ5.js.map → setup-digest-DZAFIBEF.js.map} +0 -0
- /package/dist/{setup-llm-P3MLWUDR.js.map → setup-llm-4BZM33YT.js.map} +0 -0
- /package/dist/{stats-3FAP5FKV.js.map → stats-ZIIJ2GB3.js.map} +0 -0
- /package/dist/{verify-3FTCOULE.js.map → verify-RACBFT2P.js.map} +0 -0
- /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-
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
+
} from "./chunk-JI6M2L2W.js";
|
|
6
6
|
import {
|
|
7
7
|
LLM_REQUEST_TIMEOUT_MS
|
|
8
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
4
|
+
} from "./chunk-7KQB22DP.js";
|
|
5
5
|
import {
|
|
6
6
|
AgentRegistry
|
|
7
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
+
} from "./chunk-FIRMTYFH.js";
|
|
6
6
|
import "./chunk-SAKJMNSR.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-JI6M2L2W.js";
|
|
8
8
|
import {
|
|
9
9
|
resolveVaultDir
|
|
10
10
|
} from "./chunk-N33KUCFP.js";
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
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-
|
|
46
|
-
if (cmd === "detect-providers") return (await import("./detect-providers-
|
|
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-
|
|
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-
|
|
64
|
+
return (await import("./verify-RACBFT2P.js")).run(args, vaultDir);
|
|
62
65
|
case "stats":
|
|
63
|
-
return (await import("./stats-
|
|
66
|
+
return (await import("./stats-ZIIJ2GB3.js")).run(args, vaultDir);
|
|
64
67
|
case "search":
|
|
65
|
-
return (await import("./search-
|
|
68
|
+
return (await import("./search-E5JQMTXV.js")).run(args, vaultDir);
|
|
66
69
|
case "vectors":
|
|
67
|
-
return (await import("./search-
|
|
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-
|
|
74
|
+
return (await import("./setup-llm-4BZM33YT.js")).run(args, vaultDir);
|
|
72
75
|
case "setup-digest":
|
|
73
|
-
return (await import("./setup-digest-
|
|
76
|
+
return (await import("./setup-digest-DZAFIBEF.js")).run(args, vaultDir);
|
|
74
77
|
case "digest":
|
|
75
|
-
return (await import("./digest-
|
|
78
|
+
return (await import("./digest-7NKYXM6G.js")).run(args, vaultDir);
|
|
76
79
|
case "restart":
|
|
77
|
-
return (await import("./restart-
|
|
80
|
+
return (await import("./restart-FYW662DR.js")).run(args, vaultDir);
|
|
78
81
|
case "rebuild":
|
|
79
|
-
return (await import("./rebuild-
|
|
82
|
+
return (await import("./rebuild-KQ6G2GZM.js")).run(args, vaultDir);
|
|
80
83
|
case "reprocess":
|
|
81
|
-
return (await import("./reprocess-
|
|
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-
|
|
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-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
5
|
+
} from "./chunk-JI6M2L2W.js";
|
|
6
6
|
import {
|
|
7
7
|
PROVIDER_DETECT_TIMEOUT_MS
|
|
8
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
5
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
14
|
+
import "./chunk-FIRMTYFH.js";
|
|
15
15
|
import {
|
|
16
16
|
parseIntFlag
|
|
17
17
|
} from "./chunk-SAKJMNSR.js";
|
|
18
|
-
import "./chunk-
|
|
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-
|
|
24
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
18
|
+
} from "./chunk-FIRMTYFH.js";
|
|
19
19
|
import {
|
|
20
20
|
parseStringFlag
|
|
21
21
|
} from "./chunk-SAKJMNSR.js";
|
|
22
|
-
import "./chunk-
|
|
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-
|
|
31
|
-
import "./chunk-
|
|
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-
|
|
111
|
+
//# sourceMappingURL=init-HPQ77WWF.js.map
|