bikky 0.3.3 → 0.3.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.
Files changed (126) hide show
  1. package/README.md +16 -3
  2. package/dist/config.d.ts +1 -0
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +6 -1
  5. package/dist/config.js.map +1 -1
  6. package/dist/config.test.d.ts +3 -2
  7. package/dist/config.test.d.ts.map +1 -1
  8. package/dist/config.test.js +12 -6
  9. package/dist/config.test.js.map +1 -1
  10. package/dist/daemon/capture-policy.d.ts +4 -4
  11. package/dist/daemon/capture-policy.d.ts.map +1 -1
  12. package/dist/daemon/capture-policy.js +8 -17
  13. package/dist/daemon/capture-policy.js.map +1 -1
  14. package/dist/daemon/capture-policy.test.js +2 -2
  15. package/dist/daemon/capture-policy.test.js.map +1 -1
  16. package/dist/daemon/entity-typing.d.ts +20 -0
  17. package/dist/daemon/entity-typing.d.ts.map +1 -0
  18. package/dist/daemon/entity-typing.js +166 -0
  19. package/dist/daemon/entity-typing.js.map +1 -0
  20. package/dist/daemon/episode-summary.d.ts +3 -0
  21. package/dist/daemon/episode-summary.d.ts.map +1 -1
  22. package/dist/daemon/episode-summary.js +19 -2
  23. package/dist/daemon/episode-summary.js.map +1 -1
  24. package/dist/daemon/episode-summary.test.js +5 -5
  25. package/dist/daemon/episode-summary.test.js.map +1 -1
  26. package/dist/daemon/extraction-quality.test.d.ts +2 -0
  27. package/dist/daemon/extraction-quality.test.d.ts.map +1 -0
  28. package/dist/daemon/extraction-quality.test.js +283 -0
  29. package/dist/daemon/extraction-quality.test.js.map +1 -0
  30. package/dist/daemon/extraction-rules.d.ts +131 -0
  31. package/dist/daemon/extraction-rules.d.ts.map +1 -0
  32. package/dist/daemon/extraction-rules.js +321 -0
  33. package/dist/daemon/extraction-rules.js.map +1 -0
  34. package/dist/daemon/extraction-rules.test.d.ts +2 -0
  35. package/dist/daemon/extraction-rules.test.d.ts.map +1 -0
  36. package/dist/daemon/extraction-rules.test.js +183 -0
  37. package/dist/daemon/extraction-rules.test.js.map +1 -0
  38. package/dist/daemon/extraction.d.ts +19 -1
  39. package/dist/daemon/extraction.d.ts.map +1 -1
  40. package/dist/daemon/extraction.js +169 -21
  41. package/dist/daemon/extraction.js.map +1 -1
  42. package/dist/daemon/extraction.test.js +96 -2
  43. package/dist/daemon/extraction.test.js.map +1 -1
  44. package/dist/daemon/loop.d.ts.map +1 -1
  45. package/dist/daemon/loop.js +14 -0
  46. package/dist/daemon/loop.js.map +1 -1
  47. package/dist/daemon/qdrant.d.ts +15 -1
  48. package/dist/daemon/qdrant.d.ts.map +1 -1
  49. package/dist/daemon/qdrant.js +45 -2
  50. package/dist/daemon/qdrant.js.map +1 -1
  51. package/dist/daemon/relations-vocab.d.ts +44 -0
  52. package/dist/daemon/relations-vocab.d.ts.map +1 -0
  53. package/dist/daemon/relations-vocab.js +168 -0
  54. package/dist/daemon/relations-vocab.js.map +1 -0
  55. package/dist/daemon/relations-vocab.test.d.ts +2 -0
  56. package/dist/daemon/relations-vocab.test.d.ts.map +1 -0
  57. package/dist/daemon/relations-vocab.test.js +69 -0
  58. package/dist/daemon/relations-vocab.test.js.map +1 -0
  59. package/dist/daemon/relations.d.ts +2 -0
  60. package/dist/daemon/relations.d.ts.map +1 -1
  61. package/dist/daemon/relations.js +15 -5
  62. package/dist/daemon/relations.js.map +1 -1
  63. package/dist/daemon/session-index.test.js +1 -1
  64. package/dist/daemon/session-index.test.js.map +1 -1
  65. package/dist/daemon/watcher-health.d.ts +20 -0
  66. package/dist/daemon/watcher-health.d.ts.map +1 -0
  67. package/dist/daemon/watcher-health.js +78 -0
  68. package/dist/daemon/watcher-health.js.map +1 -0
  69. package/dist/daemon/watcher-health.test.d.ts +5 -0
  70. package/dist/daemon/watcher-health.test.d.ts.map +1 -0
  71. package/dist/daemon/watcher-health.test.js +96 -0
  72. package/dist/daemon/watcher-health.test.js.map +1 -0
  73. package/dist/daemon/watcher.test.d.ts +3 -2
  74. package/dist/daemon/watcher.test.d.ts.map +1 -1
  75. package/dist/daemon/watcher.test.js +9 -19
  76. package/dist/daemon/watcher.test.js.map +1 -1
  77. package/dist/daemon/workstream-resolver.d.ts +76 -0
  78. package/dist/daemon/workstream-resolver.d.ts.map +1 -0
  79. package/dist/daemon/workstream-resolver.js +180 -0
  80. package/dist/daemon/workstream-resolver.js.map +1 -0
  81. package/dist/daemon/workstream-resolver.test.d.ts +2 -0
  82. package/dist/daemon/workstream-resolver.test.d.ts.map +1 -0
  83. package/dist/daemon/workstream-resolver.test.js +128 -0
  84. package/dist/daemon/workstream-resolver.test.js.map +1 -0
  85. package/dist/daemon/workstream-summary.test.js +4 -4
  86. package/dist/daemon/workstream-summary.test.js.map +1 -1
  87. package/dist/mcp/helpers.d.ts.map +1 -1
  88. package/dist/mcp/helpers.js +17 -2
  89. package/dist/mcp/helpers.js.map +1 -1
  90. package/dist/mcp/taxonomy.d.ts +6 -18
  91. package/dist/mcp/taxonomy.d.ts.map +1 -1
  92. package/dist/mcp/taxonomy.js +5 -25
  93. package/dist/mcp/taxonomy.js.map +1 -1
  94. package/dist/mcp/taxonomy.test.js +10 -5
  95. package/dist/mcp/taxonomy.test.js.map +1 -1
  96. package/dist/mcp/tools.d.ts.map +1 -1
  97. package/dist/mcp/tools.js +337 -2
  98. package/dist/mcp/tools.js.map +1 -1
  99. package/dist/mcp/tools.test.js +209 -0
  100. package/dist/mcp/tools.test.js.map +1 -1
  101. package/dist/prompts/distill.d.ts.map +1 -1
  102. package/dist/prompts/distill.js +3 -2
  103. package/dist/prompts/distill.js.map +1 -1
  104. package/dist/prompts/entity-typing.d.ts +18 -0
  105. package/dist/prompts/entity-typing.d.ts.map +1 -0
  106. package/dist/prompts/entity-typing.js +60 -0
  107. package/dist/prompts/entity-typing.js.map +1 -0
  108. package/dist/prompts/episode-summary.d.ts.map +1 -1
  109. package/dist/prompts/episode-summary.js +17 -3
  110. package/dist/prompts/episode-summary.js.map +1 -1
  111. package/dist/prompts/extraction.d.ts.map +1 -1
  112. package/dist/prompts/extraction.js +114 -5
  113. package/dist/prompts/extraction.js.map +1 -1
  114. package/dist/prompts/index.d.ts +1 -0
  115. package/dist/prompts/index.d.ts.map +1 -1
  116. package/dist/prompts/index.js +1 -0
  117. package/dist/prompts/index.js.map +1 -1
  118. package/dist/prompts/relations.d.ts.map +1 -1
  119. package/dist/prompts/relations.js +26 -4
  120. package/dist/prompts/relations.js.map +1 -1
  121. package/dist/render.d.ts.map +1 -1
  122. package/dist/render.js +7 -1
  123. package/dist/render.js.map +1 -1
  124. package/dist/render.test.js +3 -2
  125. package/dist/render.test.js.map +1 -1
  126. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"taxonomy.test.js","sourceRoot":"","sources":["../../src/mcp/taxonomy.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taxonomy.test.js","sourceRoot":"","sources":["../../src/mcp/taxonomy.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0PzE,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CA4iClD"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4PzE,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAi6ClD"}
package/dist/mcp/tools.js CHANGED
@@ -6,7 +6,9 @@ import { z } from "zod";
6
6
  import { STALENESS_DAYS, THRESHOLD_DUPLICATE, THRESHOLD_RELATED, QDRANT_INDEXES, categoryValues, categoryEnumDescription, domainValues, domainEnumDescription, kindValues, kindEnumDescription, memorySubtypeValues, memorySubtypeEnumDescription, sourceValues, sourceEnumDescription, DEFAULT_CATEGORY, DEFAULT_DOMAIN, DEFAULT_KIND, DEFAULT_SOURCE, categoryForMemorySubtype, layerForMemorySubtype, normalizeCategory, normalizeDomain, normalizeKind, validateMemorySubtype, } from "./taxonomy.js";
7
7
  import { contentHash, daysSince, lastActivityDate, computeCombinedScore, buildFilter, formatFact, MEMORY_RECALL_EXCLUDED_KINDS, } from "./helpers.js";
8
8
  import { ready, qdrantUrl, qdrantApiKey, setupError, setQdrantUrl, setQdrantApiKey, setReady, getCollection, log, embed, getEmbeddingConfig, qdrantReq, ensureCollection, qdrantUpsert, qdrantSearch, qdrantScroll, qdrantSetPayload, qdrantGetPoints, } from "./api.js";
9
- import { saveConfig, loadConfig } from "../config.js";
9
+ import { saveConfig, loadConfig, EXTRACTION_HEALTH_PATH } from "../config.js";
10
+ import { existsSync, readFileSync } from "node:fs";
11
+ import { inspectWatcherPaths, formatIssue } from "../daemon/watcher-health.js";
10
12
  // ---------------------------------------------------------------------------
11
13
  // Runtime state
12
14
  // ---------------------------------------------------------------------------
@@ -199,6 +201,44 @@ export function registerTools(mcp) {
199
201
  status["embedding_connected"] = true;
200
202
  }
201
203
  catch { /* ignore */ }
204
+ // Watcher / extraction health (issue #58)
205
+ const warnings = [];
206
+ try {
207
+ const cfg = loadConfig();
208
+ status["watcher_path"] = cfg.watchers.copilot.path;
209
+ for (const issue of inspectWatcherPaths(cfg)) {
210
+ warnings.push(formatIssue(issue));
211
+ }
212
+ }
213
+ catch { /* ignore */ }
214
+ try {
215
+ if (existsSync(EXTRACTION_HEALTH_PATH)) {
216
+ const health = JSON.parse(readFileSync(EXTRACTION_HEALTH_PATH, "utf-8"));
217
+ status["extraction_last_tick_at"] = health.last_tick_at ?? null;
218
+ status["extraction_last_active_session_at"] = health.last_active_session_at ?? null;
219
+ status["extraction_active_session_count"] = health.active_session_count ?? 0;
220
+ if (health.last_active_session_at) {
221
+ const hours = (Date.now() - Date.parse(health.last_active_session_at)) / 3_600_000;
222
+ status["extraction_hours_since_active_session"] = Math.round(hours * 10) / 10;
223
+ if (hours > 6) {
224
+ warnings.push(`Watcher has not seen any active Copilot sessions for ${Math.round(hours)}h — ` +
225
+ `check watcher_path (${health.watcher_path ?? "unknown"}) and that the daemon is running.`);
226
+ }
227
+ }
228
+ else {
229
+ status["extraction_hours_since_active_session"] = null;
230
+ warnings.push("Daemon has never observed an active Copilot session — extraction may be stalled.");
231
+ }
232
+ }
233
+ else {
234
+ status["extraction_last_tick_at"] = null;
235
+ status["extraction_last_active_session_at"] = null;
236
+ status["extraction_hours_since_active_session"] = null;
237
+ }
238
+ }
239
+ catch { /* ignore */ }
240
+ if (warnings.length > 0)
241
+ status["warnings"] = warnings;
202
242
  if (!status["ready"] && missing.length > 0) {
203
243
  status["setup_instructions"] =
204
244
  "Run `bikky setup` or guide the user. Pick one Qdrant option:\n" +
@@ -669,6 +709,22 @@ export function registerTools(mcp) {
669
709
  return guard;
670
710
  const entityName = name.toLowerCase();
671
711
  const scope = resolveScope(workspace_id, include_legacy_workspace);
712
+ // Look up the daemon-classified entity type, if any.
713
+ let entityType = null;
714
+ try {
715
+ const typeFilter = scopedFilter(scope) ?? { must: [] };
716
+ typeFilter.must.push({ key: "kind", match: { value: "entity_type" } });
717
+ typeFilter.must.push({ key: "entity_name", match: { value: entityName } });
718
+ const typePoints = await qdrantScroll(typeFilter, 1);
719
+ const typePoint = typePoints.result?.points?.[0];
720
+ const payload = typePoint?.payload;
721
+ if (payload?.entity_type) {
722
+ entityType = String(payload.entity_type);
723
+ }
724
+ }
725
+ catch {
726
+ // Type lookup is best-effort — never fails the request.
727
+ }
672
728
  const factsFilter = scopedFilter(scope) ?? { must: [] };
673
729
  factsFilter.must.push({ key: "entities", match: { value: entityName } });
674
730
  const facts = await qdrantScroll(factsFilter, limit ?? 20);
@@ -681,13 +737,19 @@ export function registerTools(mcp) {
681
737
  const output = [];
682
738
  const factPoints = facts.result?.points ?? [];
683
739
  if (factPoints.length > 0) {
684
- output.push(`## Facts about ${name} (${factPoints.length})`);
740
+ const header = entityType
741
+ ? `## Facts about ${name} [type: ${entityType}] (${factPoints.length})`
742
+ : `## Facts about ${name} (${factPoints.length})`;
743
+ output.push(header);
685
744
  for (const p of factPoints) {
686
745
  if (p.payload.category !== "relation") {
687
746
  output.push(`- ${formatFact(p)}`);
688
747
  }
689
748
  }
690
749
  }
750
+ else if (entityType) {
751
+ output.push(`## ${name} [type: ${entityType}]`);
752
+ }
691
753
  const allRelations = [
692
754
  ...(relationsFrom.result?.points ?? []),
693
755
  ...(relationsTo.result?.points ?? []),
@@ -787,6 +849,13 @@ export function registerTools(mcp) {
787
849
  superseded_by: `forgotten:${redactedReason.text}`,
788
850
  superseded_at: now,
789
851
  updated_at: now,
852
+ // Mark this fact's vector as a bad-exemplar centroid: future
853
+ // candidates with high cosine similarity will be auto-flagged
854
+ // for review. Forgotten facts keep their original vector — the
855
+ // is_bad_exemplar payload flag opts them into the centroid set
856
+ // without requiring a new point.
857
+ is_bad_exemplar: true,
858
+ bad_exemplar_reason: redactedReason.text,
790
859
  });
791
860
  return { content: [{ type: "text", text: JSON.stringify({
792
861
  status: "forgotten",
@@ -843,6 +912,272 @@ export function registerTools(mcp) {
843
912
  return { content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : String(e)}` }] };
844
913
  }
845
914
  });
915
+ // ── memory_mark_useful ──────────────────────────────────────────────────
916
+ mcp.tool("memory_mark_useful", [
917
+ "Report that a previously recalled fact actually helped you answer the user's question or complete a task.",
918
+ "Bumps a 'useful_count' counter on the fact and writes a telemetry feedback_event row that future ranking work can aggregate.",
919
+ "Call this AFTER you used a fact from memory_recall / memory_entity and confirmed it was helpful — not for every recalled fact. If the fact was wrong or misleading, use memory_report_outcome with outcome='wrong' or 'misleading' instead.",
920
+ ].join(" "), {
921
+ fact_id: z.string().describe("ID of the fact that was useful (from memory_recall or memory_entity)."),
922
+ note: z.string().optional().describe("Optional short note about how the fact was useful (e.g. 'unblocked auth debug'). Stored on the telemetry event for future analysis."),
923
+ workspace_id: z.string().optional().describe("Workspace namespace. Omit to use the default from config."),
924
+ }, async ({ fact_id, note, workspace_id }) => {
925
+ const guard = requireReady();
926
+ if (guard)
927
+ return guard;
928
+ const now = nowISO();
929
+ try {
930
+ const scope = resolveScope(workspace_id);
931
+ const writable = await getPointForWorkspaceWrite(fact_id, scope);
932
+ if (writable.error) {
933
+ return { content: [{ type: "text", text: JSON.stringify(writable.error, null, 2) }], isError: true };
934
+ }
935
+ const existingPt = writable.point;
936
+ const currentCount = existingPt?.payload.useful_count ?? 0;
937
+ const newCount = currentCount + 1;
938
+ await qdrantSetPayload([fact_id], {
939
+ useful_count: newCount,
940
+ last_useful_at: now,
941
+ updated_at: now,
942
+ });
943
+ // Write a telemetry feedback_event row so the signal is also visible
944
+ // to aggregations and review tooling.
945
+ const eventId = newId();
946
+ const eventContent = note
947
+ ? `Fact ${fact_id} marked useful: ${note}`
948
+ : `Fact ${fact_id} marked useful.`;
949
+ const eventPayload = {
950
+ content: eventContent,
951
+ category: "observations",
952
+ domain: "software_engineering",
953
+ kind: "telemetry",
954
+ memory_subtype: "feedback_event",
955
+ layer: "memory_object",
956
+ entities: [],
957
+ source: "agent",
958
+ confidence: 1.0,
959
+ importance: 0.3,
960
+ content_hash: contentHash("feedback_event", `${fact_id}:useful:${now}`),
961
+ target_fact_id: fact_id,
962
+ feedback_kind: "useful",
963
+ created_at: now,
964
+ updated_at: now,
965
+ };
966
+ addWorkspacePayload(eventPayload, scope);
967
+ try {
968
+ const eventVector = await embed(eventContent);
969
+ await qdrantUpsert(eventId, eventVector, eventPayload);
970
+ }
971
+ catch (e) {
972
+ log("WARN", `Failed to record feedback_event: ${e instanceof Error ? e.message : String(e)}`);
973
+ }
974
+ return {
975
+ content: [{ type: "text", text: JSON.stringify({
976
+ status: "marked_useful",
977
+ fact_id,
978
+ useful_count: newCount,
979
+ event_id: eventId,
980
+ }) }],
981
+ };
982
+ }
983
+ catch (e) {
984
+ return { content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : String(e)}` }] };
985
+ }
986
+ });
987
+ // ── memory_report_outcome ───────────────────────────────────────────────
988
+ mcp.tool("memory_report_outcome", [
989
+ "Report the downstream outcome of using a recalled fact — useful, misleading, irrelevant, or wrong.",
990
+ "Writes a telemetry outcome_event row that future ranking and review work can aggregate. Unlike memory_mark_useful (positive-only, bumps a counter), this records a richer signal including negative outcomes and optional notes.",
991
+ "Use this when you can confidently judge whether a fact actually helped: 'useful' = helped you complete the task; 'misleading' = pointed in a wrong direction; 'irrelevant' = matched semantically but didn't help; 'wrong' = factually incorrect (also consider memory_forget for clearly wrong facts).",
992
+ ].join(" "), {
993
+ fact_id: z.string().describe("ID of the fact whose outcome you are reporting."),
994
+ outcome: z.enum(["useful", "misleading", "irrelevant", "wrong"]).describe("How the fact actually played out. 'useful' = helped you finish the task; 'misleading' = sent you the wrong way; 'irrelevant' = semantically matched but didn't help; 'wrong' = factually incorrect."),
995
+ notes: z.string().optional().describe("Optional short context for the outcome (e.g. 'API moved in v2', 'wrong port number'). Stored on the telemetry event for future analysis."),
996
+ workspace_id: z.string().optional().describe("Workspace namespace. Omit to use the default from config."),
997
+ }, async ({ fact_id, outcome, notes, workspace_id }) => {
998
+ const guard = requireReady();
999
+ if (guard)
1000
+ return guard;
1001
+ const now = nowISO();
1002
+ try {
1003
+ const scope = resolveScope(workspace_id);
1004
+ const target = await getPointForWorkspaceWrite(fact_id, scope);
1005
+ if (target.error) {
1006
+ return { content: [{ type: "text", text: JSON.stringify(target.error, null, 2) }], isError: true };
1007
+ }
1008
+ const eventId = newId();
1009
+ const eventContent = notes
1010
+ ? `Fact ${fact_id} outcome=${outcome}: ${notes}`
1011
+ : `Fact ${fact_id} outcome=${outcome}.`;
1012
+ const eventPayload = {
1013
+ content: eventContent,
1014
+ category: "observations",
1015
+ domain: "software_engineering",
1016
+ kind: "telemetry",
1017
+ memory_subtype: "outcome_event",
1018
+ layer: "memory_object",
1019
+ entities: [],
1020
+ source: "agent",
1021
+ confidence: 1.0,
1022
+ importance: outcome === "wrong" || outcome === "misleading" ? 0.6 : 0.3,
1023
+ content_hash: contentHash("outcome_event", `${fact_id}:${outcome}:${now}`),
1024
+ target_fact_id: fact_id,
1025
+ outcome,
1026
+ created_at: now,
1027
+ updated_at: now,
1028
+ };
1029
+ addWorkspacePayload(eventPayload, scope);
1030
+ const eventVector = await embed(eventContent);
1031
+ await qdrantUpsert(eventId, eventVector, eventPayload);
1032
+ return {
1033
+ content: [{ type: "text", text: JSON.stringify({
1034
+ status: "outcome_recorded",
1035
+ fact_id,
1036
+ outcome,
1037
+ event_id: eventId,
1038
+ }) }],
1039
+ };
1040
+ }
1041
+ catch (e) {
1042
+ return { content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : String(e)}` }] };
1043
+ }
1044
+ });
1045
+ // ── memory_session_summary ──────────────────────────────────────────────
1046
+ mcp.tool("memory_session_summary", [
1047
+ "Persist a compact summary of the current session — what got done, what decisions were made, what's still open.",
1048
+ "Stored as kind='summary', memory_subtype='session_index', source='agent'. Keep it short (target 30-80 words). Future sessions retrieve these via memory_recall to bootstrap context faster than re-reading the original transcript.",
1049
+ "Call this near session close (or at major milestone boundaries) when the work is meaningful enough to want a future agent to inherit. Skip for trivial single-question sessions.",
1050
+ ].join(" "), {
1051
+ content: z.string().describe("The summary text. Atomic, self-contained, 30-80 words ideally. Should answer: what was the goal, what did we do, what remains?"),
1052
+ entities: z.array(z.string()).optional().describe("Lowercase entity names mentioned by the summary (services, repos, people, concepts). Used for entity-scoped recall later."),
1053
+ episode_id: z.string().optional().describe("Coherent activity-segment ID for grouping with related captures."),
1054
+ workstream_key: z.string().optional().describe("Durable continuity key for a long-running objective (survives across sessions)."),
1055
+ task_key: z.string().optional().describe("Task or issue key (e.g. GitHub issue number, JIRA key)."),
1056
+ repo: z.string().optional().describe("Repository or project surface this summary relates to."),
1057
+ workspace_id: z.string().optional().describe("Workspace namespace. Omit to use the default from config."),
1058
+ }, async ({ content, entities, episode_id, workstream_key, task_key, repo, workspace_id }) => {
1059
+ const guard = requireReady();
1060
+ if (guard)
1061
+ return guard;
1062
+ lastStoreTime = Date.now();
1063
+ const now = nowISO();
1064
+ try {
1065
+ const scope = resolveScope(workspace_id);
1066
+ const normalizedEntities = (entities ?? []).map((e) => e.trim().toLowerCase()).filter(Boolean);
1067
+ const summaryId = newId();
1068
+ const vector = await embed(content);
1069
+ const payload = {
1070
+ content,
1071
+ category: categoryForMemorySubtype("session_index") ?? "projects",
1072
+ domain: "software_engineering",
1073
+ kind: "summary",
1074
+ memory_subtype: "session_index",
1075
+ layer: layerForMemorySubtype("session_index") ?? "episode",
1076
+ entities: normalizedEntities,
1077
+ source: "agent",
1078
+ confidence: 0.9,
1079
+ importance: 0.6,
1080
+ content_hash: contentHash("summary", content),
1081
+ reinforcement_count: 1,
1082
+ last_reinforced_at: now,
1083
+ superseded_by: null,
1084
+ superseded_at: null,
1085
+ created_at: now,
1086
+ updated_at: now,
1087
+ };
1088
+ if (episode_id)
1089
+ payload["episode_id"] = episode_id;
1090
+ if (workstream_key)
1091
+ payload["workstream_key"] = workstream_key;
1092
+ if (task_key)
1093
+ payload["task_key"] = task_key;
1094
+ if (repo)
1095
+ payload["repo"] = repo;
1096
+ addWorkspacePayload(payload, scope);
1097
+ await qdrantUpsert(summaryId, vector, payload);
1098
+ return {
1099
+ content: [{ type: "text", text: JSON.stringify({
1100
+ status: "summary_stored",
1101
+ summary_id: summaryId,
1102
+ workspace_id: scope.workspaceId,
1103
+ }) }],
1104
+ };
1105
+ }
1106
+ catch (e) {
1107
+ return { content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : String(e)}` }] };
1108
+ }
1109
+ });
1110
+ // ── memory_distill ──────────────────────────────────────────────────────
1111
+ mcp.tool("memory_distill", [
1112
+ "Persist a distilled convention — a reusable learning, pattern, or runbook synthesized from multiple prior memories.",
1113
+ "Stored as kind='distilled', memory_subtype='convention', source='agent'. Use this when you've noticed a pattern across several prior facts/sessions that's worth surfacing as its own atomic learning. The new memory will rank above raw facts in semantic recall because distilled patterns are higher-signal.",
1114
+ "Provide 'supersedes' if this distillation replaces an earlier convention. The original stays in storage but is excluded from recall.",
1115
+ ].join(" "), {
1116
+ content: z.string().describe("One-sentence reusable convention or pattern. Should be self-contained and applicable beyond a single situation."),
1117
+ entities: z.array(z.string()).describe("Lowercase entity names this distillation applies to (services, tools, concepts)."),
1118
+ supersedes: z.string().optional().describe("ID of an earlier distilled fact that this one replaces. Old fact is marked superseded and excluded from recall."),
1119
+ task_key: z.string().optional().describe("Task or issue key associated with this learning, if relevant."),
1120
+ repo: z.string().optional().describe("Repository or project surface this learning applies to."),
1121
+ workspace_id: z.string().optional().describe("Workspace namespace. Omit to use the default from config."),
1122
+ }, async ({ content, entities, supersedes, task_key, repo, workspace_id }) => {
1123
+ const guard = requireReady();
1124
+ if (guard)
1125
+ return guard;
1126
+ lastStoreTime = Date.now();
1127
+ const now = nowISO();
1128
+ try {
1129
+ const scope = resolveScope(workspace_id);
1130
+ const normalizedEntities = entities.map((e) => e.trim().toLowerCase()).filter(Boolean);
1131
+ const distilledId = newId();
1132
+ const vector = await embed(content);
1133
+ if (supersedes) {
1134
+ const existing = await getPointForWorkspaceWrite(supersedes, scope);
1135
+ if (existing.error) {
1136
+ return { content: [{ type: "text", text: JSON.stringify(existing.error, null, 2) }], isError: true };
1137
+ }
1138
+ await qdrantSetPayload([supersedes], {
1139
+ superseded_by: distilledId,
1140
+ superseded_at: now,
1141
+ });
1142
+ }
1143
+ const payload = {
1144
+ content,
1145
+ category: categoryForMemorySubtype("convention") ?? "observations",
1146
+ domain: "software_engineering",
1147
+ kind: "distilled",
1148
+ memory_subtype: "convention",
1149
+ layer: layerForMemorySubtype("convention") ?? "domain",
1150
+ entities: normalizedEntities,
1151
+ source: "agent",
1152
+ confidence: 0.9,
1153
+ importance: 0.7,
1154
+ content_hash: contentHash("distilled", content),
1155
+ reinforcement_count: 1,
1156
+ last_reinforced_at: now,
1157
+ superseded_by: null,
1158
+ superseded_at: null,
1159
+ created_at: now,
1160
+ updated_at: now,
1161
+ };
1162
+ if (task_key)
1163
+ payload["task_key"] = task_key;
1164
+ if (repo)
1165
+ payload["repo"] = repo;
1166
+ addWorkspacePayload(payload, scope);
1167
+ await qdrantUpsert(distilledId, vector, payload);
1168
+ return {
1169
+ content: [{ type: "text", text: JSON.stringify({
1170
+ status: "distilled_stored",
1171
+ distilled_id: distilledId,
1172
+ supersedes: supersedes ?? null,
1173
+ workspace_id: scope.workspaceId,
1174
+ }) }],
1175
+ };
1176
+ }
1177
+ catch (e) {
1178
+ return { content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : String(e)}` }] };
1179
+ }
1180
+ });
846
1181
  // ── memory_review ───────────────────────────────────────────────────────
847
1182
  mcp.tool("memory_review", [
848
1183
  "Triage facts that were extracted automatically by the bikky daemon (source='daemon').",