@goondocks/myco 0.6.4 → 0.6.5
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/dist/{chunk-YIQLYIHW.js → chunk-4B5RO2YV.js} +4 -4
- package/dist/{chunk-7WHF2OIZ.js → chunk-4DYD4HHG.js} +25 -7
- package/dist/chunk-4DYD4HHG.js.map +1 -0
- package/dist/{chunk-NLUE6CYG.js → chunk-54WVLTKD.js} +3 -3
- package/dist/{chunk-NL6WQO56.js → chunk-5LMRZDH3.js} +2 -2
- package/dist/{chunk-O6PERU7U.js → chunk-AHZN4Z34.js} +2 -2
- package/dist/{chunk-J4D4CROB.js → chunk-DYDBF5W6.js} +5 -1
- package/dist/chunk-DYDBF5W6.js.map +1 -0
- package/dist/{chunk-Z74SDEKE.js → chunk-F7GAYVWF.js} +2 -2
- package/dist/{chunk-H7PRCVGQ.js → chunk-F7PGDD2X.js} +2 -2
- package/dist/{chunk-2ZIBCEYO.js → chunk-LEK6DEAE.js} +3 -3
- package/dist/{chunk-QLUE3BUL.js → chunk-O6TBHGVO.js} +9 -2
- package/dist/chunk-O6TBHGVO.js.map +1 -0
- package/dist/{chunk-FPRXMJLT.js → chunk-OEGZ5YTJ.js} +2 -2
- package/dist/{chunk-4XVKZ3WA.js → chunk-TK7A4RX7.js} +10 -3
- package/dist/chunk-TK7A4RX7.js.map +1 -0
- package/dist/{chunk-UP4P4OAA.js → chunk-V6BJVYNH.js} +2 -2
- package/dist/{chunk-QN4W3JUA.js → chunk-XH34FX4C.js} +2 -2
- package/dist/{chunk-YTFXA4RX.js → chunk-YRIIBPJD.js} +3 -3
- package/dist/{cli-IHILSS6N.js → cli-OJYHLO4Y.js} +20 -20
- package/dist/{client-AGFNR2S4.js → client-SS3C5MF6.js} +5 -5
- package/dist/{curate-3D4GHKJH.js → curate-4CKEMOPV.js} +6 -6
- package/dist/{detect-providers-XEP4QA3R.js → detect-providers-LFIVJYQO.js} +3 -3
- package/dist/{digest-7HLJXL77.js → digest-ZLARHLLY.js} +8 -8
- package/dist/{init-ARQ53JOR.js → init-3LVKVQ4L.js} +5 -5
- package/dist/{logs-IENORIYR.js → logs-6CWVP574.js} +3 -3
- package/dist/{main-6AGPIMH2.js → main-RB727YRP.js} +149 -28
- package/dist/main-RB727YRP.js.map +1 -0
- package/dist/{rebuild-Q2ACEB6F.js → rebuild-QWVVCBCZ.js} +6 -6
- package/dist/{reprocess-CDEFGQOV.js → reprocess-YG3WLUI2.js} +8 -8
- package/dist/{restart-XCMILOL5.js → restart-UIP7US4U.js} +6 -6
- package/dist/{search-7W25SKCB.js → search-BQLBW5CS.js} +4 -4
- package/dist/{server-6UDN35QN.js → server-43KSJ65Q.js} +77 -29
- package/dist/{server-6UDN35QN.js.map → server-43KSJ65Q.js.map} +1 -1
- package/dist/{session-start-K6IGAC7H.js → session-start-6SHGT2AW.js} +6 -6
- package/dist/{setup-digest-X5PN27F4.js → setup-digest-X735EZSD.js} +5 -5
- package/dist/{setup-llm-S5OHQJXK.js → setup-llm-QBSTQO7N.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/{stats-TTSDXGJV.js → stats-QBLIEFWL.js} +6 -6
- package/dist/ui/assets/index-CjWGVHhF.css +1 -0
- package/dist/ui/assets/{index-CMSMi4Jb.js → index-Cq-H7wgE.js} +20 -20
- package/dist/ui/index.html +2 -2
- package/dist/{verify-TOWQHPBX.js → verify-X272WGBD.js} +4 -4
- package/dist/{version-36RVCQA6.js → version-XE4GYTBV.js} +4 -4
- package/package.json +1 -1
- package/dist/chunk-4XVKZ3WA.js.map +0 -1
- package/dist/chunk-7WHF2OIZ.js.map +0 -1
- package/dist/chunk-J4D4CROB.js.map +0 -1
- package/dist/chunk-QLUE3BUL.js.map +0 -1
- package/dist/main-6AGPIMH2.js.map +0 -1
- package/dist/ui/assets/index-08wKT7wS.css +0 -1
- /package/dist/{chunk-YIQLYIHW.js.map → chunk-4B5RO2YV.js.map} +0 -0
- /package/dist/{chunk-NLUE6CYG.js.map → chunk-54WVLTKD.js.map} +0 -0
- /package/dist/{chunk-NL6WQO56.js.map → chunk-5LMRZDH3.js.map} +0 -0
- /package/dist/{chunk-O6PERU7U.js.map → chunk-AHZN4Z34.js.map} +0 -0
- /package/dist/{chunk-Z74SDEKE.js.map → chunk-F7GAYVWF.js.map} +0 -0
- /package/dist/{chunk-H7PRCVGQ.js.map → chunk-F7PGDD2X.js.map} +0 -0
- /package/dist/{chunk-2ZIBCEYO.js.map → chunk-LEK6DEAE.js.map} +0 -0
- /package/dist/{chunk-FPRXMJLT.js.map → chunk-OEGZ5YTJ.js.map} +0 -0
- /package/dist/{chunk-UP4P4OAA.js.map → chunk-V6BJVYNH.js.map} +0 -0
- /package/dist/{chunk-QN4W3JUA.js.map → chunk-XH34FX4C.js.map} +0 -0
- /package/dist/{chunk-YTFXA4RX.js.map → chunk-YRIIBPJD.js.map} +0 -0
- /package/dist/{cli-IHILSS6N.js.map → cli-OJYHLO4Y.js.map} +0 -0
- /package/dist/{client-AGFNR2S4.js.map → client-SS3C5MF6.js.map} +0 -0
- /package/dist/{curate-3D4GHKJH.js.map → curate-4CKEMOPV.js.map} +0 -0
- /package/dist/{detect-providers-XEP4QA3R.js.map → detect-providers-LFIVJYQO.js.map} +0 -0
- /package/dist/{digest-7HLJXL77.js.map → digest-ZLARHLLY.js.map} +0 -0
- /package/dist/{init-ARQ53JOR.js.map → init-3LVKVQ4L.js.map} +0 -0
- /package/dist/{logs-IENORIYR.js.map → logs-6CWVP574.js.map} +0 -0
- /package/dist/{rebuild-Q2ACEB6F.js.map → rebuild-QWVVCBCZ.js.map} +0 -0
- /package/dist/{reprocess-CDEFGQOV.js.map → reprocess-YG3WLUI2.js.map} +0 -0
- /package/dist/{restart-XCMILOL5.js.map → restart-UIP7US4U.js.map} +0 -0
- /package/dist/{search-7W25SKCB.js.map → search-BQLBW5CS.js.map} +0 -0
- /package/dist/{session-start-K6IGAC7H.js.map → session-start-6SHGT2AW.js.map} +0 -0
- /package/dist/{setup-digest-X5PN27F4.js.map → setup-digest-X735EZSD.js.map} +0 -0
- /package/dist/{setup-llm-S5OHQJXK.js.map → setup-llm-QBSTQO7N.js.map} +0 -0
- /package/dist/{stats-TTSDXGJV.js.map → stats-QBLIEFWL.js.map} +0 -0
- /package/dist/{verify-TOWQHPBX.js.map → verify-X272WGBD.js.map} +0 -0
- /package/dist/{version-36RVCQA6.js.map → version-XE4GYTBV.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
gatherStats
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-5LMRZDH3.js";
|
|
5
5
|
import {
|
|
6
6
|
BufferProcessor,
|
|
7
7
|
DigestEngine,
|
|
@@ -16,14 +16,14 @@ import {
|
|
|
16
16
|
runReprocess,
|
|
17
17
|
updateTitleAndSummary,
|
|
18
18
|
writeObservationNotes
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-TK7A4RX7.js";
|
|
20
20
|
import {
|
|
21
21
|
consolidateSpores,
|
|
22
22
|
handleMycoContext
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-LEK6DEAE.js";
|
|
24
24
|
import {
|
|
25
25
|
DaemonLogger
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-O6TBHGVO.js";
|
|
27
27
|
import {
|
|
28
28
|
VectorIndex
|
|
29
29
|
} from "./chunk-4RMSHZE4.js";
|
|
@@ -45,14 +45,14 @@ import {
|
|
|
45
45
|
sessionWikilink,
|
|
46
46
|
stripReasoningTokens,
|
|
47
47
|
walkMarkdownFiles
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-V6BJVYNH.js";
|
|
49
49
|
import {
|
|
50
50
|
generateEmbedding
|
|
51
51
|
} from "./chunk-RGVBGTD6.js";
|
|
52
52
|
import {
|
|
53
53
|
createEmbeddingProvider,
|
|
54
54
|
createLlmProvider
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-54WVLTKD.js";
|
|
56
56
|
import {
|
|
57
57
|
stripFrontmatter
|
|
58
58
|
} from "./chunk-GENQ5QGP.js";
|
|
@@ -62,12 +62,12 @@ import {
|
|
|
62
62
|
import {
|
|
63
63
|
MycoIndex
|
|
64
64
|
} from "./chunk-TWSTAVLO.js";
|
|
65
|
-
import "./chunk-
|
|
65
|
+
import "./chunk-YRIIBPJD.js";
|
|
66
66
|
import "./chunk-SAKJMNSR.js";
|
|
67
67
|
import {
|
|
68
68
|
LmStudioBackend,
|
|
69
69
|
OllamaBackend
|
|
70
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-4DYD4HHG.js";
|
|
71
71
|
import {
|
|
72
72
|
CONFIG_FILENAME,
|
|
73
73
|
loadConfig,
|
|
@@ -83,13 +83,13 @@ import {
|
|
|
83
83
|
} from "./chunk-HIN3UVOG.js";
|
|
84
84
|
import {
|
|
85
85
|
getPluginVersion
|
|
86
|
-
} from "./chunk-
|
|
86
|
+
} from "./chunk-XH34FX4C.js";
|
|
87
87
|
import {
|
|
88
88
|
AgentRegistry,
|
|
89
89
|
claudeCodeAdapter,
|
|
90
90
|
createPerProjectAdapter,
|
|
91
91
|
extensionForMimeType
|
|
92
|
-
} from "./chunk-
|
|
92
|
+
} from "./chunk-F7GAYVWF.js";
|
|
93
93
|
import {
|
|
94
94
|
CONSOLIDATION_MAX_TOKENS,
|
|
95
95
|
CONSOLIDATION_MIN_CLUSTER_SIZE,
|
|
@@ -103,6 +103,8 @@ import {
|
|
|
103
103
|
ITEM_STAGE_MAP,
|
|
104
104
|
LINEAGE_RECENT_SESSIONS_LIMIT,
|
|
105
105
|
LLM_REASONING_MODE,
|
|
106
|
+
LOG_MESSAGE_PREVIEW_CHARS,
|
|
107
|
+
LOG_PROMPT_PREVIEW_CHARS,
|
|
106
108
|
MAX_SLUG_LENGTH,
|
|
107
109
|
MS_PER_DAY,
|
|
108
110
|
PIPELINE_BACKOFF_MULTIPLIER,
|
|
@@ -120,7 +122,7 @@ import {
|
|
|
120
122
|
STAGE_PROVIDER_MAP,
|
|
121
123
|
STALE_BUFFER_MAX_AGE_MS,
|
|
122
124
|
estimateTokens
|
|
123
|
-
} from "./chunk-
|
|
125
|
+
} from "./chunk-DYDBF5W6.js";
|
|
124
126
|
import {
|
|
125
127
|
__toESM
|
|
126
128
|
} from "./chunk-PZUWP5VK.js";
|
|
@@ -2555,6 +2557,10 @@ var ConsolidationEngine = class {
|
|
|
2555
2557
|
continue;
|
|
2556
2558
|
}
|
|
2557
2559
|
clustersFound++;
|
|
2560
|
+
this.log("debug", "Consolidation groups formed", {
|
|
2561
|
+
group_count: clustersFound,
|
|
2562
|
+
total_notes: cluster.length
|
|
2563
|
+
});
|
|
2558
2564
|
const candidatesText = formatNotesForPrompt(cluster);
|
|
2559
2565
|
const prompt = template.replace("{{count}}", String(cluster.length)).replace("{{observation_type}}", observationType ?? "unknown").replace("{{candidates}}", candidatesText).replace("{{maxTokens}}", String(this.maxTokens));
|
|
2560
2566
|
let responseText;
|
|
@@ -2629,10 +2635,11 @@ var ConsolidationEngine = class {
|
|
|
2629
2635
|
);
|
|
2630
2636
|
consolidated++;
|
|
2631
2637
|
sporesSuperseded += consolidateResult.sources_archived;
|
|
2632
|
-
this.log("info", "
|
|
2638
|
+
this.log("info", "Notes consolidated", {
|
|
2633
2639
|
wisdomId: consolidateResult.wisdom_id,
|
|
2634
2640
|
sourcesArchived: consolidateResult.sources_archived,
|
|
2635
|
-
clusterSize: cluster.length
|
|
2641
|
+
clusterSize: cluster.length,
|
|
2642
|
+
similarity: vectorResults[0]?.similarity ?? 0
|
|
2636
2643
|
});
|
|
2637
2644
|
} catch (err) {
|
|
2638
2645
|
this.log("warn", "ConsolidationEngine: consolidateSpores failed", {
|
|
@@ -2642,6 +2649,9 @@ var ConsolidationEngine = class {
|
|
|
2642
2649
|
}
|
|
2643
2650
|
cluster.forEach((n) => processedIds.add(n.id));
|
|
2644
2651
|
}
|
|
2652
|
+
if (clustersFound === 0) {
|
|
2653
|
+
this.log("debug", "Consolidation: no groups above threshold");
|
|
2654
|
+
}
|
|
2645
2655
|
const passTimestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
2646
2656
|
const durationMs = Date.now() - startTime;
|
|
2647
2657
|
const passResult = {
|
|
@@ -2899,10 +2909,11 @@ async function handleGetLogs(ringBuffer, query) {
|
|
|
2899
2909
|
const since = query.since || null;
|
|
2900
2910
|
const level = query.level;
|
|
2901
2911
|
const limit = query.limit ? parseInt(query.limit, 10) : void 0;
|
|
2902
|
-
const
|
|
2912
|
+
const component = query.category || void 0;
|
|
2913
|
+
const result = ringBuffer.since(since, { level, component, limit: isNaN(limit) ? void 0 : limit });
|
|
2903
2914
|
const entries = result.entries.map((entry) => {
|
|
2904
|
-
const { component, ...rest } = entry;
|
|
2905
|
-
return { ...rest, category:
|
|
2915
|
+
const { component: component2, ...rest } = entry;
|
|
2916
|
+
return { ...rest, category: component2 };
|
|
2906
2917
|
});
|
|
2907
2918
|
return {
|
|
2908
2919
|
body: {
|
|
@@ -3119,6 +3130,13 @@ async function handleDigest(deps, body) {
|
|
|
3119
3130
|
tiers: result.tiersGenerated,
|
|
3120
3131
|
duration: result.durationMs
|
|
3121
3132
|
});
|
|
3133
|
+
} else if (options?.full && deps.onForceDigest) {
|
|
3134
|
+
deps.onForceDigest();
|
|
3135
|
+
deps.progressTracker.update(token, {
|
|
3136
|
+
status: "completed",
|
|
3137
|
+
percent: PROGRESS_COMPLETE,
|
|
3138
|
+
message: "Full cycle queued \u2014 items reset to pending"
|
|
3139
|
+
});
|
|
3122
3140
|
} else {
|
|
3123
3141
|
deps.progressTracker.update(token, {
|
|
3124
3142
|
status: "completed",
|
|
@@ -4790,6 +4808,12 @@ async function main() {
|
|
|
4790
4808
|
level: config.daemon.log_level,
|
|
4791
4809
|
maxSize: config.daemon.max_log_size
|
|
4792
4810
|
});
|
|
4811
|
+
logger.info("daemon", "Config loaded", {
|
|
4812
|
+
vault: vaultDir,
|
|
4813
|
+
digest_enabled: config.digest.enabled,
|
|
4814
|
+
intelligence_provider: config.intelligence.llm.provider,
|
|
4815
|
+
embedding_provider: config.intelligence.embedding.provider
|
|
4816
|
+
});
|
|
4793
4817
|
let uiDir = null;
|
|
4794
4818
|
{
|
|
4795
4819
|
let dir = path11.dirname(new URL(import.meta.url).pathname);
|
|
@@ -4904,6 +4928,10 @@ ${updatedBody}`, "utf-8");
|
|
|
4904
4928
|
observations: written.length,
|
|
4905
4929
|
title
|
|
4906
4930
|
});
|
|
4931
|
+
logger.debug("pipeline", "Extraction detail", {
|
|
4932
|
+
session_id: itemId,
|
|
4933
|
+
types: written.map((n) => n.observation.type)
|
|
4934
|
+
});
|
|
4907
4935
|
return {
|
|
4908
4936
|
observations: written.length,
|
|
4909
4937
|
observation_ids: written.map((n) => n.id),
|
|
@@ -4943,6 +4971,7 @@ ${body}`.trim();
|
|
|
4943
4971
|
logger.debug("pipeline", "No embeddable content, skipping", { id: itemId, type: itemType });
|
|
4944
4972
|
return;
|
|
4945
4973
|
}
|
|
4974
|
+
const embeddingStart = Date.now();
|
|
4946
4975
|
const result = await generateEmbedding(
|
|
4947
4976
|
embeddingProvider,
|
|
4948
4977
|
embeddableText.slice(0, EMBEDDING_INPUT_LIMIT)
|
|
@@ -4962,7 +4991,8 @@ ${body}`.trim();
|
|
|
4962
4991
|
logger.info("pipeline", "Embedding stored", {
|
|
4963
4992
|
id: itemId,
|
|
4964
4993
|
type: itemType,
|
|
4965
|
-
dimensions: result.dimensions
|
|
4994
|
+
dimensions: result.dimensions,
|
|
4995
|
+
duration_ms: Date.now() - embeddingStart
|
|
4966
4996
|
});
|
|
4967
4997
|
return {
|
|
4968
4998
|
model: result.model,
|
|
@@ -5013,6 +5043,7 @@ ${body}`.trim();
|
|
|
5013
5043
|
const sessionBuffers = /* @__PURE__ */ new Map();
|
|
5014
5044
|
const sessionFilePaths = /* @__PURE__ */ new Map();
|
|
5015
5045
|
const capturedArtifactPaths = /* @__PURE__ */ new Map();
|
|
5046
|
+
let startupCleanedCount = 0;
|
|
5016
5047
|
if (fs8.existsSync(bufferDir)) {
|
|
5017
5048
|
const cutoff = Date.now() - STALE_BUFFER_MAX_AGE_MS;
|
|
5018
5049
|
for (const file of fs8.readdirSync(bufferDir)) {
|
|
@@ -5020,10 +5051,16 @@ ${body}`.trim();
|
|
|
5020
5051
|
const stat4 = fs8.statSync(filePath);
|
|
5021
5052
|
if (stat4.mtimeMs < cutoff) {
|
|
5022
5053
|
fs8.unlinkSync(filePath);
|
|
5054
|
+
startupCleanedCount++;
|
|
5023
5055
|
logger.debug("daemon", "Cleaned stale buffer", { file });
|
|
5024
5056
|
}
|
|
5025
5057
|
}
|
|
5026
5058
|
}
|
|
5059
|
+
if (startupCleanedCount > 0) {
|
|
5060
|
+
logger.info("daemon", "Buffer cleanup complete", {
|
|
5061
|
+
stale_removed: startupCleanedCount
|
|
5062
|
+
});
|
|
5063
|
+
}
|
|
5027
5064
|
const needsMigrationReindex = index.query({ type: "memory" }).length > 0;
|
|
5028
5065
|
const migrated = migrateSporeFiles(vaultDir);
|
|
5029
5066
|
if (migrated > 0) {
|
|
@@ -5088,6 +5125,7 @@ ${content}`,
|
|
|
5088
5125
|
};
|
|
5089
5126
|
const digestLlm = config.digest.intelligence.model || config.digest.intelligence.provider ? createLlmProvider(digestLlmConfig) : llmProvider;
|
|
5090
5127
|
let metabolism = null;
|
|
5128
|
+
let triggerForceDigest;
|
|
5091
5129
|
if (config.digest.enabled) {
|
|
5092
5130
|
logger.debug("digest", "Digest LLM config", digestLlmConfig);
|
|
5093
5131
|
logger.debug("digest", `Using ${digestLlm.name} provider for digest`);
|
|
@@ -5113,6 +5151,9 @@ ${content}`,
|
|
|
5113
5151
|
metabolism = new Metabolism(config.digest.metabolism);
|
|
5114
5152
|
let digestReady = true;
|
|
5115
5153
|
let forceDigest = false;
|
|
5154
|
+
triggerForceDigest = () => {
|
|
5155
|
+
forceDigest = true;
|
|
5156
|
+
};
|
|
5116
5157
|
metabolism.start(async () => {
|
|
5117
5158
|
digestReady = true;
|
|
5118
5159
|
});
|
|
@@ -5225,7 +5266,7 @@ ${content}`,
|
|
|
5225
5266
|
logger.debug("lineage", "Heuristic detection failed", { error: err.message });
|
|
5226
5267
|
}
|
|
5227
5268
|
metabolism?.activate();
|
|
5228
|
-
logger.info("lifecycle", "Session registered", { session_id, branch });
|
|
5269
|
+
logger.info("lifecycle", "Session registered", { session_id, branch, started_at: started_at ?? null });
|
|
5229
5270
|
return { body: { ok: true, sessions: registry.sessions } };
|
|
5230
5271
|
});
|
|
5231
5272
|
server.registerRoute("POST", "/sessions/unregister", async (req) => {
|
|
@@ -5257,6 +5298,15 @@ ${content}`,
|
|
|
5257
5298
|
const validated = EventBody.parse(req.body);
|
|
5258
5299
|
const event = { ...validated, timestamp: validated.timestamp ?? (/* @__PURE__ */ new Date()).toISOString() };
|
|
5259
5300
|
logger.debug("hooks", "Event received", { type: event.type, session_id: event.session_id });
|
|
5301
|
+
if (validated.type === "user_prompt") {
|
|
5302
|
+
const v = validated;
|
|
5303
|
+
const promptText = String(v.prompt ?? "");
|
|
5304
|
+
logger.info("hooks", "User prompt received", {
|
|
5305
|
+
session_id: validated.session_id,
|
|
5306
|
+
prompt_preview: promptText.slice(0, LOG_PROMPT_PREVIEW_CHARS),
|
|
5307
|
+
prompt_length: promptText.length
|
|
5308
|
+
});
|
|
5309
|
+
}
|
|
5260
5310
|
if (!registry.getSession(event.session_id)) {
|
|
5261
5311
|
registry.register(event.session_id, { started_at: event.timestamp });
|
|
5262
5312
|
logger.debug("lifecycle", "Auto-registered session from event", { session_id: event.session_id });
|
|
@@ -5268,6 +5318,10 @@ ${content}`,
|
|
|
5268
5318
|
batchManager.addEvent(event);
|
|
5269
5319
|
if (validated.type === "tool_use") {
|
|
5270
5320
|
const v = validated;
|
|
5321
|
+
logger.debug("hooks", "Tool use event", {
|
|
5322
|
+
session_id: validated.session_id,
|
|
5323
|
+
tool_name: String(v.tool_name ?? "")
|
|
5324
|
+
});
|
|
5271
5325
|
planWatcher.checkToolEvent({ tool_name: String(v.tool_name ?? ""), tool_input: v.tool_input, session_id: validated.session_id });
|
|
5272
5326
|
const toolName = String(v.tool_name ?? "");
|
|
5273
5327
|
if (toolName === "Write" || toolName === "Edit") {
|
|
@@ -5290,7 +5344,16 @@ ${content}`,
|
|
|
5290
5344
|
logger.debug("lifecycle", "Auto-registered session from stop event", { session_id: sessionId });
|
|
5291
5345
|
}
|
|
5292
5346
|
const sessionMeta = registry.getSession(sessionId);
|
|
5293
|
-
logger.info("hooks", "Stop received", {
|
|
5347
|
+
logger.info("hooks", "Stop received", {
|
|
5348
|
+
session_id: sessionId,
|
|
5349
|
+
has_transcript_path: !!hookTranscriptPath,
|
|
5350
|
+
has_response: !!lastAssistantMessage
|
|
5351
|
+
});
|
|
5352
|
+
logger.debug("hooks", "Stop event detail", {
|
|
5353
|
+
session_id: sessionId,
|
|
5354
|
+
transcript_path: hookTranscriptPath ?? null,
|
|
5355
|
+
last_message_preview: lastAssistantMessage?.slice(0, LOG_MESSAGE_PREVIEW_CHARS) ?? null
|
|
5356
|
+
});
|
|
5294
5357
|
const run = () => processStopEvent(sessionId, user, sessionMeta, hookTranscriptPath, lastAssistantMessage).catch((err) => {
|
|
5295
5358
|
logger.error("processor", "Stop processing failed", { session_id: sessionId, error: err.message });
|
|
5296
5359
|
});
|
|
@@ -5360,6 +5423,12 @@ ${content}`,
|
|
|
5360
5423
|
}
|
|
5361
5424
|
}
|
|
5362
5425
|
enrichTurnsWithToolMetadata(allTurns, bufferEvents);
|
|
5426
|
+
const imageCount = allTurns.reduce((sum, t) => sum + (t.images?.length ?? 0), 0);
|
|
5427
|
+
logger.debug("processor", "Transcript parsed", {
|
|
5428
|
+
session_id: sessionId,
|
|
5429
|
+
turn_count: allTurns.length,
|
|
5430
|
+
image_count: imageCount
|
|
5431
|
+
});
|
|
5363
5432
|
const ended = (/* @__PURE__ */ new Date()).toISOString();
|
|
5364
5433
|
let started = allTurns.length > 0 && allTurns[0].timestamp ? allTurns[0].timestamp : ended;
|
|
5365
5434
|
const sessionsDir = path11.join(vaultDir, "sessions");
|
|
@@ -5484,7 +5553,7 @@ ${content}`,
|
|
|
5484
5553
|
});
|
|
5485
5554
|
const parentId = lineageGraph.getParent(sessionId);
|
|
5486
5555
|
const parentLink = parentId ? lineageGraph.getLinks().find((l) => l.child === sessionId) : void 0;
|
|
5487
|
-
vault.writeSession({
|
|
5556
|
+
const notePath = vault.writeSession({
|
|
5488
5557
|
id: sessionId,
|
|
5489
5558
|
user,
|
|
5490
5559
|
started,
|
|
@@ -5497,6 +5566,11 @@ ${content}`,
|
|
|
5497
5566
|
transcript_path: hookTranscriptPath,
|
|
5498
5567
|
summary
|
|
5499
5568
|
});
|
|
5569
|
+
logger.debug("processor", "Session note written", {
|
|
5570
|
+
session_id: sessionId,
|
|
5571
|
+
path: notePath,
|
|
5572
|
+
content_length: summary.length
|
|
5573
|
+
});
|
|
5500
5574
|
if (existingExtractionFields) {
|
|
5501
5575
|
vault.updateNoteFrontmatter(relativePath, existingExtractionFields);
|
|
5502
5576
|
}
|
|
@@ -5517,16 +5591,23 @@ ${content}`,
|
|
|
5517
5591
|
if (branch) meta.push(`
|
|
5518
5592
|
Branch:: \`${branch}\``);
|
|
5519
5593
|
meta.push(`Session:: \`${session_id}\``);
|
|
5520
|
-
logger.
|
|
5594
|
+
logger.info("context", "Session context injected", {
|
|
5595
|
+
session_id,
|
|
5596
|
+
source: "digest",
|
|
5597
|
+
tier: result.tier,
|
|
5598
|
+
fallback: result.fallback
|
|
5599
|
+
});
|
|
5521
5600
|
return { body: { text: meta.join("\n\n"), source: "digest", tier: result.tier } };
|
|
5522
5601
|
}
|
|
5523
5602
|
}
|
|
5524
5603
|
const parts = [];
|
|
5604
|
+
const layerCounts = { plans: 0, parent_session: false, branch: !!branch };
|
|
5525
5605
|
const plans = index.query({ type: "plan" });
|
|
5526
5606
|
const activePlans = plans.filter((p) => {
|
|
5527
5607
|
const status = p.frontmatter.status;
|
|
5528
5608
|
return status === "active" || status === "in_progress";
|
|
5529
5609
|
});
|
|
5610
|
+
layerCounts.plans = activePlans.length;
|
|
5530
5611
|
if (activePlans.length > 0) {
|
|
5531
5612
|
const planLines = activePlans.slice(0, SESSION_CONTEXT_MAX_PLANS).map((p) => {
|
|
5532
5613
|
const status = p.frontmatter.status;
|
|
@@ -5535,11 +5616,13 @@ Branch:: \`${branch}\``);
|
|
|
5535
5616
|
parts.push(`### Active Plans
|
|
5536
5617
|
${planLines.join("\n")}`);
|
|
5537
5618
|
}
|
|
5619
|
+
let parentId;
|
|
5538
5620
|
if (session_id) {
|
|
5539
|
-
|
|
5621
|
+
parentId = lineageGraph.getParent(session_id);
|
|
5540
5622
|
if (parentId) {
|
|
5541
5623
|
const parentNotes = index.queryByIds([sessionNoteId(parentId)]);
|
|
5542
5624
|
if (parentNotes.length > 0) {
|
|
5625
|
+
layerCounts.parent_session = true;
|
|
5543
5626
|
const parent = parentNotes[0];
|
|
5544
5627
|
parts.push(`### Previous Session
|
|
5545
5628
|
- **${parent.title}**: ${parent.content.slice(0, CONTEXT_SESSION_PREVIEW_CHARS)} \`[${parent.id}]\``);
|
|
@@ -5551,6 +5634,17 @@ ${planLines.join("\n")}`);
|
|
|
5551
5634
|
}
|
|
5552
5635
|
parts.push(`Session:: \`${session_id}\``);
|
|
5553
5636
|
if (parts.length > 0) {
|
|
5637
|
+
logger.info("context", "Session context injected", {
|
|
5638
|
+
session_id,
|
|
5639
|
+
source: "layers",
|
|
5640
|
+
...layerCounts,
|
|
5641
|
+
parts: parts.length
|
|
5642
|
+
});
|
|
5643
|
+
logger.debug("context", "Session context layer detail", {
|
|
5644
|
+
session_id,
|
|
5645
|
+
plan_titles: activePlans.slice(0, 5).map((p) => p.title),
|
|
5646
|
+
parent_id: parentId ?? null
|
|
5647
|
+
});
|
|
5554
5648
|
return { body: { text: parts.join("\n\n") } };
|
|
5555
5649
|
}
|
|
5556
5650
|
return { body: { text: "" } };
|
|
@@ -5568,6 +5662,7 @@ ${planLines.join("\n")}`);
|
|
|
5568
5662
|
if (!prompt || prompt.length < PROMPT_CONTEXT_MIN_LENGTH || !vectorIndex) {
|
|
5569
5663
|
return { body: { text: "" } };
|
|
5570
5664
|
}
|
|
5665
|
+
const searchStart = Date.now();
|
|
5571
5666
|
try {
|
|
5572
5667
|
const emb = await generateEmbedding(embeddingProvider, prompt.slice(0, EMBEDDING_INPUT_LIMIT));
|
|
5573
5668
|
const results = vectorIndex.search(emb.embedding, {
|
|
@@ -5575,7 +5670,14 @@ ${planLines.join("\n")}`);
|
|
|
5575
5670
|
type: "spore",
|
|
5576
5671
|
relativeThreshold: PROMPT_CONTEXT_MIN_SIMILARITY
|
|
5577
5672
|
});
|
|
5578
|
-
if (results.length === 0)
|
|
5673
|
+
if (results.length === 0) {
|
|
5674
|
+
logger.debug("context", "No matching spores for prompt", {
|
|
5675
|
+
session_id,
|
|
5676
|
+
prompt_preview: prompt.slice(0, LOG_PROMPT_PREVIEW_CHARS),
|
|
5677
|
+
search_duration_ms: Date.now() - searchStart
|
|
5678
|
+
});
|
|
5679
|
+
return { body: { text: "" } };
|
|
5680
|
+
}
|
|
5579
5681
|
const noteMap = new Map(
|
|
5580
5682
|
index.queryByIds(results.map((r) => r.id)).map((n) => [n.id, n])
|
|
5581
5683
|
);
|
|
@@ -5591,10 +5693,18 @@ ${planLines.join("\n")}`);
|
|
|
5591
5693
|
if (lines.length === 0) return { body: { text: "" } };
|
|
5592
5694
|
const injected = `**Relevant spores for this task:**
|
|
5593
5695
|
${lines.join("\n")}`;
|
|
5594
|
-
logger.
|
|
5696
|
+
logger.info("context", "Prompt context injected", {
|
|
5595
5697
|
session_id,
|
|
5596
5698
|
spores: lines.length,
|
|
5597
|
-
prompt_preview: prompt.slice(0,
|
|
5699
|
+
prompt_preview: prompt.slice(0, LOG_PROMPT_PREVIEW_CHARS)
|
|
5700
|
+
});
|
|
5701
|
+
logger.debug("context", "Prompt context spore details", {
|
|
5702
|
+
session_id,
|
|
5703
|
+
spore_ids: results.map((r) => r.id),
|
|
5704
|
+
similarities: results.map((r) => r.similarity.toFixed(3)),
|
|
5705
|
+
prompt_length: prompt.length,
|
|
5706
|
+
context_chars: injected.length,
|
|
5707
|
+
search_duration_ms: Date.now() - searchStart
|
|
5598
5708
|
});
|
|
5599
5709
|
return { body: { text: injected } };
|
|
5600
5710
|
} catch (err) {
|
|
@@ -5622,6 +5732,17 @@ ${lines.join("\n")}`;
|
|
|
5622
5732
|
metabolism
|
|
5623
5733
|
}));
|
|
5624
5734
|
server.registerRoute("GET", "/api/logs", async (req) => handleGetLogs(logger.getRingBuffer(), req.query));
|
|
5735
|
+
const ExternalLogBody = external_exports.object({
|
|
5736
|
+
level: external_exports.enum(["debug", "info", "warn", "error"]),
|
|
5737
|
+
component: external_exports.string(),
|
|
5738
|
+
message: external_exports.string(),
|
|
5739
|
+
data: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
5740
|
+
});
|
|
5741
|
+
server.registerRoute("POST", "/api/log", async (req) => {
|
|
5742
|
+
const { level, component, message, data } = ExternalLogBody.parse(req.body);
|
|
5743
|
+
logger.log(level, component, message, data);
|
|
5744
|
+
return { body: { ok: true } };
|
|
5745
|
+
});
|
|
5625
5746
|
server.registerRoute("GET", "/api/models", async (req) => handleGetModels(req));
|
|
5626
5747
|
server.registerRoute("POST", "/api/restart", async (req) => handleRestart({ vaultDir, progressTracker }, req.body));
|
|
5627
5748
|
server.registerRoute("GET", "/api/progress/:token", async (req) => handleGetProgress(progressTracker, req.params.token));
|
|
@@ -5635,9 +5756,9 @@ ${lines.join("\n")}`;
|
|
|
5635
5756
|
embeddingProvider,
|
|
5636
5757
|
progressTracker,
|
|
5637
5758
|
pipeline,
|
|
5759
|
+
onForceDigest: triggerForceDigest,
|
|
5638
5760
|
log: (level, message, data) => {
|
|
5639
|
-
|
|
5640
|
-
if (typeof fn === "function") fn.call(logger, "operations", message, data);
|
|
5761
|
+
logger.log(level, "operations", message, data);
|
|
5641
5762
|
}
|
|
5642
5763
|
};
|
|
5643
5764
|
server.registerRoute("POST", "/api/rebuild", async () => handleRebuild(operationDeps));
|
|
@@ -5712,4 +5833,4 @@ export {
|
|
|
5712
5833
|
chokidar/index.js:
|
|
5713
5834
|
(*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) *)
|
|
5714
5835
|
*/
|
|
5715
|
-
//# sourceMappingURL=main-
|
|
5836
|
+
//# sourceMappingURL=main-RB727YRP.js.map
|