bikky 0.1.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/LICENSE +661 -0
- package/README.md +323 -0
- package/bin/bikky.js +6 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +51 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +59 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +141 -0
- package/dist/config.js.map +1 -0
- package/dist/config.test.d.ts +8 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +449 -0
- package/dist/config.test.js.map +1 -0
- package/dist/daemon/consolidation.d.ts +60 -0
- package/dist/daemon/consolidation.d.ts.map +1 -0
- package/dist/daemon/consolidation.js +448 -0
- package/dist/daemon/consolidation.js.map +1 -0
- package/dist/daemon/extraction.d.ts +17 -0
- package/dist/daemon/extraction.d.ts.map +1 -0
- package/dist/daemon/extraction.js +465 -0
- package/dist/daemon/extraction.js.map +1 -0
- package/dist/daemon/index.d.ts +3 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +3 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/loop.d.ts +3 -0
- package/dist/daemon/loop.d.ts.map +1 -0
- package/dist/daemon/loop.js +93 -0
- package/dist/daemon/loop.js.map +1 -0
- package/dist/daemon/qdrant.d.ts +103 -0
- package/dist/daemon/qdrant.d.ts.map +1 -0
- package/dist/daemon/qdrant.js +273 -0
- package/dist/daemon/qdrant.js.map +1 -0
- package/dist/daemon/qdrant.test.d.ts +8 -0
- package/dist/daemon/qdrant.test.d.ts.map +1 -0
- package/dist/daemon/qdrant.test.js +209 -0
- package/dist/daemon/qdrant.test.js.map +1 -0
- package/dist/daemon/relations.d.ts +54 -0
- package/dist/daemon/relations.d.ts.map +1 -0
- package/dist/daemon/relations.js +290 -0
- package/dist/daemon/relations.js.map +1 -0
- package/dist/daemon/staleness.d.ts +24 -0
- package/dist/daemon/staleness.d.ts.map +1 -0
- package/dist/daemon/staleness.js +63 -0
- package/dist/daemon/staleness.js.map +1 -0
- package/dist/daemon/watcher.d.ts +11 -0
- package/dist/daemon/watcher.d.ts.map +1 -0
- package/dist/daemon/watcher.js +38 -0
- package/dist/daemon/watcher.js.map +1 -0
- package/dist/daemon/watcher.test.d.ts +8 -0
- package/dist/daemon/watcher.test.d.ts.map +1 -0
- package/dist/daemon/watcher.test.js +214 -0
- package/dist/daemon/watcher.test.js.map +1 -0
- package/dist/install.d.ts +5 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +49 -0
- package/dist/install.js.map +1 -0
- package/dist/install.test.d.ts +9 -0
- package/dist/install.test.d.ts.map +1 -0
- package/dist/install.test.js +126 -0
- package/dist/install.test.js.map +1 -0
- package/dist/llm/embedding.d.ts +13 -0
- package/dist/llm/embedding.d.ts.map +1 -0
- package/dist/llm/embedding.js +127 -0
- package/dist/llm/embedding.js.map +1 -0
- package/dist/llm/embedding.test.d.ts +8 -0
- package/dist/llm/embedding.test.d.ts.map +1 -0
- package/dist/llm/embedding.test.js +117 -0
- package/dist/llm/embedding.test.js.map +1 -0
- package/dist/llm/index.d.ts +4 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +3 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/inference.d.ts +12 -0
- package/dist/llm/inference.d.ts.map +1 -0
- package/dist/llm/inference.js +146 -0
- package/dist/llm/inference.js.map +1 -0
- package/dist/llm/inference.test.d.ts +8 -0
- package/dist/llm/inference.test.d.ts.map +1 -0
- package/dist/llm/inference.test.js +117 -0
- package/dist/llm/inference.test.js.map +1 -0
- package/dist/llm/types.d.ts +41 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +5 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/logger.d.ts +13 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +41 -0
- package/dist/logger.js.map +1 -0
- package/dist/mcp/api.d.ts +30 -0
- package/dist/mcp/api.d.ts.map +1 -0
- package/dist/mcp/api.js +150 -0
- package/dist/mcp/api.js.map +1 -0
- package/dist/mcp/helpers.d.ts +35 -0
- package/dist/mcp/helpers.d.ts.map +1 -0
- package/dist/mcp/helpers.js +152 -0
- package/dist/mcp/helpers.js.map +1 -0
- package/dist/mcp/helpers.test.d.ts +5 -0
- package/dist/mcp/helpers.test.d.ts.map +1 -0
- package/dist/mcp/helpers.test.js +487 -0
- package/dist/mcp/helpers.test.js.map +1 -0
- package/dist/mcp/index.d.ts +9 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +67 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/taxonomy.d.ts +38 -0
- package/dist/mcp/taxonomy.d.ts.map +1 -0
- package/dist/mcp/taxonomy.js +223 -0
- package/dist/mcp/taxonomy.js.map +1 -0
- package/dist/mcp/taxonomy.test.d.ts +5 -0
- package/dist/mcp/taxonomy.test.d.ts.map +1 -0
- package/dist/mcp/taxonomy.test.js +341 -0
- package/dist/mcp/taxonomy.test.js.map +1 -0
- package/dist/mcp/tools.d.ts +6 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +958 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +118 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +5 -0
- package/dist/mcp/types.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Taxonomy — Single source of truth for all classification axes.
|
|
3
|
+
*
|
|
4
|
+
* Four orthogonal axes classify every fact:
|
|
5
|
+
* category — topic/subject matter (what the fact is about)
|
|
6
|
+
* domain — life scope (work vs personal context)
|
|
7
|
+
* kind — epistemic type (how the knowledge exists)
|
|
8
|
+
* source — provenance (who/what created this fact)
|
|
9
|
+
*/
|
|
10
|
+
// ─── Category: topic/subject matter ─────────────────────────────────────────
|
|
11
|
+
export const CATEGORIES = {
|
|
12
|
+
infrastructure: {
|
|
13
|
+
description: "Services, ports, configs, databases, deployments, environments",
|
|
14
|
+
extractionHint: "Look for: service names, ports, hosts, connection strings, database engines, cluster details, deployment targets, environment variables, config values",
|
|
15
|
+
examples: [
|
|
16
|
+
{ content: "ClickHouse runs on port 8123 in production clusters", entities: ["clickhouse"], confidence: 0.95, importance: 0.8 },
|
|
17
|
+
{ content: "The dbt project uses ReplacingMergeTree engine for dedup tables", entities: ["dbt", "clickhouse"], confidence: 0.9, importance: 0.7 },
|
|
18
|
+
{ content: "Redis cache is on redis-prod.internal:6379 with 30-min TTL", entities: ["redis"], confidence: 0.9, importance: 0.8 },
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
decisions: {
|
|
22
|
+
description: "Architectural decisions, technology choices, trade-offs, with who decided and why",
|
|
23
|
+
extractionHint: "Look for: 'decided', 'chose', 'went with', 'instead of', 'because', trade-off discussions, architecture choices, technology selections",
|
|
24
|
+
examples: [
|
|
25
|
+
{ content: "Team decided to use JWT for service-to-service auth instead of mTLS", entities: ["auth", "jwt"], confidence: 0.9, importance: 0.85 },
|
|
26
|
+
{ content: "Team chose Qdrant over Pinecone for vector storage due to self-hosting option", entities: ["qdrant", "pinecone"], confidence: 0.95, importance: 0.8 },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
observation: {
|
|
30
|
+
description: "Errors encountered, quirks, workarounds, debugging findings, gotchas, behavioral patterns",
|
|
31
|
+
extractionHint: "Look for: error messages, debugging steps, 'turns out', 'the issue was', workarounds, unexpected behavior, gotchas, caveats",
|
|
32
|
+
examples: [
|
|
33
|
+
{ content: "ClickHouse OPTIMIZE FINAL is slow on large tables — use OPTIMIZE DEDUPLICATE instead", entities: ["clickhouse"], confidence: 0.9, importance: 0.7 },
|
|
34
|
+
{ content: "Node 25 fetch() doesn't support AbortSignal.timeout() in some edge cases", entities: ["node"], confidence: 0.7, importance: 0.5 },
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
preferences: {
|
|
38
|
+
description: "User/team preferences, working style, conventions, opinions, personal tastes",
|
|
39
|
+
extractionHint: "Look for: 'prefer', 'like', 'want', 'always use', conventions, style guides, opinions, personal choices, hobbies, interests",
|
|
40
|
+
examples: [
|
|
41
|
+
{ content: "User prefers dark mode and concise responses under 3 sentences", entities: ["user"], confidence: 0.85, importance: 0.3 },
|
|
42
|
+
{ content: "Code style: kebab-case for file names, camelCase for JS variables", entities: [], confidence: 0.8, importance: 0.4 },
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
projects: {
|
|
46
|
+
description: "What's in progress, blocked, completed, project structure, goals, personal endeavors",
|
|
47
|
+
extractionHint: "Look for: task progress, blockers, completions, branch names, deployment status, milestones, goals, project structure, hobbies, personal projects",
|
|
48
|
+
examples: [
|
|
49
|
+
{ content: "The memory extraction daemon pipeline is being built", entities: ["bikky", "daemon"], confidence: 0.95, importance: 0.6 },
|
|
50
|
+
{ content: "User is growing tomatoes and herbs in the backyard garden", entities: ["user", "garden"], confidence: 0.85, importance: 0.4 },
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
team: {
|
|
54
|
+
description: "People, roles, relationships, organizational structure, contacts",
|
|
55
|
+
extractionHint: "Look for: names, titles, roles, reporting lines, team membership, expertise areas, contact details, who owns what",
|
|
56
|
+
examples: [
|
|
57
|
+
{ content: "Alice is the lead engineer on the platform team", entities: ["alice", "platform"], confidence: 0.95, importance: 0.7 },
|
|
58
|
+
{ content: "Alex handles DevOps and Kubernetes cluster management", entities: ["alex", "devops", "kubernetes"], confidence: 0.9, importance: 0.6 },
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
// ─── Domain: life scope ─────────────────────────────────────────────────────
|
|
63
|
+
export const DOMAINS = {
|
|
64
|
+
work: { description: "Engineering, company, professional context" },
|
|
65
|
+
personal: { description: "Life, hobbies, health, family, personal projects" },
|
|
66
|
+
};
|
|
67
|
+
export const DEFAULT_DOMAIN = "work";
|
|
68
|
+
// ─── Kind: epistemic type ───────────────────────────────────────────────────
|
|
69
|
+
export const KINDS = {
|
|
70
|
+
fact: { description: "Atomic declarative assertion — the default" },
|
|
71
|
+
summary: { description: "Compressed narrative of a session or time period" },
|
|
72
|
+
distilled: { description: "Second-order pattern derived from multiple summaries" },
|
|
73
|
+
relation: { description: "Typed edge between two entities (from → type → to)" },
|
|
74
|
+
};
|
|
75
|
+
export const DEFAULT_KIND = "fact";
|
|
76
|
+
// ─── Source: provenance ─────────────────────────────────────────────────────
|
|
77
|
+
export const SOURCES = {
|
|
78
|
+
agent: { description: "Stored by an agent via MCP memory_store tool" },
|
|
79
|
+
daemon: { description: "Extracted by the background daemon pipeline" },
|
|
80
|
+
system: { description: "Generated by system processes (distillation, session summaries)" },
|
|
81
|
+
user: { description: "Explicitly requested by the user (manual corrections, direct input)" },
|
|
82
|
+
docs: { description: "Indexed from documentation (knowledge base)" },
|
|
83
|
+
};
|
|
84
|
+
export const DEFAULT_SOURCE = "agent";
|
|
85
|
+
// ─── Decay configuration ────────────────────────────────────────────────────
|
|
86
|
+
const FACT_DECAY = {
|
|
87
|
+
"observation.work": 45,
|
|
88
|
+
"observation.personal": 180,
|
|
89
|
+
"infrastructure.work": 60,
|
|
90
|
+
"infrastructure.personal": 180,
|
|
91
|
+
"decisions.*": 120,
|
|
92
|
+
"preferences.*": 365,
|
|
93
|
+
"projects.work": 90,
|
|
94
|
+
"projects.personal": 180,
|
|
95
|
+
"team.*": 365,
|
|
96
|
+
};
|
|
97
|
+
export const DECAY_DEFAULT_HALF_LIFE = 90;
|
|
98
|
+
export function getDecayHalfLife(opts = {}) {
|
|
99
|
+
const { kind, category, domain } = opts;
|
|
100
|
+
if (kind === "summary" || kind === "distilled")
|
|
101
|
+
return null;
|
|
102
|
+
if (kind === "relation")
|
|
103
|
+
return 180;
|
|
104
|
+
const key = `${category ?? "observation"}.${domain ?? DEFAULT_DOMAIN}`;
|
|
105
|
+
const keyVal = FACT_DECAY[key];
|
|
106
|
+
if (keyVal !== undefined)
|
|
107
|
+
return keyVal;
|
|
108
|
+
const catKey = `${category ?? "observation"}.*`;
|
|
109
|
+
const catVal = FACT_DECAY[catKey];
|
|
110
|
+
if (catVal !== undefined)
|
|
111
|
+
return catVal;
|
|
112
|
+
return DECAY_DEFAULT_HALF_LIFE;
|
|
113
|
+
}
|
|
114
|
+
// Legacy flat map for old code paths
|
|
115
|
+
export const DECAY_HALF_LIFE = {
|
|
116
|
+
infrastructure: 60,
|
|
117
|
+
projects: 90,
|
|
118
|
+
decisions: 120,
|
|
119
|
+
observation: 45,
|
|
120
|
+
personal: 365,
|
|
121
|
+
preferences: 365,
|
|
122
|
+
team: 365,
|
|
123
|
+
relation: 180,
|
|
124
|
+
session_summary: null,
|
|
125
|
+
distilled: null,
|
|
126
|
+
};
|
|
127
|
+
// ─── Staleness ──────────────────────────────────────────────────────────────
|
|
128
|
+
export const STALENESS_DAYS = 30;
|
|
129
|
+
// ─── Similarity thresholds ──────────────────────────────────────────────────
|
|
130
|
+
export const THRESHOLD_DUPLICATE = 0.92;
|
|
131
|
+
export const THRESHOLD_RELATED = 0.80;
|
|
132
|
+
// ─── Qdrant indexes ────────────────────────────────────────────────────────
|
|
133
|
+
export const QDRANT_INDEXES = [
|
|
134
|
+
{ field_name: "category", field_schema: "keyword" },
|
|
135
|
+
{ field_name: "domain", field_schema: "keyword" },
|
|
136
|
+
{ field_name: "kind", field_schema: "keyword" },
|
|
137
|
+
{ field_name: "source", field_schema: "keyword" },
|
|
138
|
+
{ field_name: "entities", field_schema: "keyword" },
|
|
139
|
+
{ field_name: "content_hash", field_schema: "keyword" },
|
|
140
|
+
{ field_name: "from_entity", field_schema: "keyword" },
|
|
141
|
+
{ field_name: "to_entity", field_schema: "keyword" },
|
|
142
|
+
{ field_name: "relation_type", field_schema: "keyword" },
|
|
143
|
+
{ field_name: "superseded_by", field_schema: "keyword" },
|
|
144
|
+
{ field_name: "session_id", field_schema: "keyword" },
|
|
145
|
+
{ field_name: "last_reinforced_at", field_schema: "datetime" },
|
|
146
|
+
{ field_name: "last_verified_at", field_schema: "datetime" },
|
|
147
|
+
];
|
|
148
|
+
// ─── Source value migration (old → new) ─────────────────────────────────────
|
|
149
|
+
export const SOURCE_MIGRATION = {
|
|
150
|
+
conversation: "agent",
|
|
151
|
+
task: "agent",
|
|
152
|
+
observation: "agent",
|
|
153
|
+
manual: "user",
|
|
154
|
+
cortex: "daemon",
|
|
155
|
+
};
|
|
156
|
+
// ─── Normalization helpers ──────────────────────────────────────────────────
|
|
157
|
+
export function normalizeCategory(cat) {
|
|
158
|
+
const lower = String(cat).toLowerCase().trim();
|
|
159
|
+
if (lower in CATEGORIES)
|
|
160
|
+
return lower;
|
|
161
|
+
if (lower === "personal")
|
|
162
|
+
return "preferences";
|
|
163
|
+
if (lower === "session_summary")
|
|
164
|
+
return "projects";
|
|
165
|
+
if (lower === "distilled")
|
|
166
|
+
return "observation";
|
|
167
|
+
if (lower === "relation")
|
|
168
|
+
return "team";
|
|
169
|
+
if (lower.includes("infra"))
|
|
170
|
+
return "infrastructure";
|
|
171
|
+
if (lower.includes("decision"))
|
|
172
|
+
return "decisions";
|
|
173
|
+
if (lower.includes("observ") || lower.includes("error"))
|
|
174
|
+
return "observation";
|
|
175
|
+
if (lower.includes("prefer"))
|
|
176
|
+
return "preferences";
|
|
177
|
+
if (lower.includes("project"))
|
|
178
|
+
return "projects";
|
|
179
|
+
if (lower.includes("team") || lower.includes("people"))
|
|
180
|
+
return "team";
|
|
181
|
+
return "observation";
|
|
182
|
+
}
|
|
183
|
+
export function normalizeDomain(d) {
|
|
184
|
+
if (!d)
|
|
185
|
+
return DEFAULT_DOMAIN;
|
|
186
|
+
const lower = String(d).toLowerCase().trim();
|
|
187
|
+
if (lower in DOMAINS)
|
|
188
|
+
return lower;
|
|
189
|
+
if (lower.includes("personal") || lower.includes("life") || lower.includes("home"))
|
|
190
|
+
return "personal";
|
|
191
|
+
return DEFAULT_DOMAIN;
|
|
192
|
+
}
|
|
193
|
+
export function normalizeKind(k) {
|
|
194
|
+
if (!k)
|
|
195
|
+
return DEFAULT_KIND;
|
|
196
|
+
const lower = String(k).toLowerCase().trim();
|
|
197
|
+
if (lower in KINDS)
|
|
198
|
+
return lower;
|
|
199
|
+
if (lower.includes("summar"))
|
|
200
|
+
return "summary";
|
|
201
|
+
if (lower.includes("distil"))
|
|
202
|
+
return "distilled";
|
|
203
|
+
if (lower.includes("relat") || lower.includes("edge"))
|
|
204
|
+
return "relation";
|
|
205
|
+
return DEFAULT_KIND;
|
|
206
|
+
}
|
|
207
|
+
export function normalizeSource(s) {
|
|
208
|
+
if (!s)
|
|
209
|
+
return DEFAULT_SOURCE;
|
|
210
|
+
const lower = String(s).toLowerCase().trim();
|
|
211
|
+
if (lower in SOURCES)
|
|
212
|
+
return lower;
|
|
213
|
+
const migrated = SOURCE_MIGRATION[lower];
|
|
214
|
+
if (migrated)
|
|
215
|
+
return migrated;
|
|
216
|
+
return DEFAULT_SOURCE;
|
|
217
|
+
}
|
|
218
|
+
// ─── Value arrays for z.enum consumption ────────────────────────────────────
|
|
219
|
+
export const categoryValues = () => Object.keys(CATEGORIES);
|
|
220
|
+
export const domainValues = () => Object.keys(DOMAINS);
|
|
221
|
+
export const kindValues = () => Object.keys(KINDS);
|
|
222
|
+
export const sourceValues = () => Object.keys(SOURCES);
|
|
223
|
+
//# sourceMappingURL=taxonomy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxonomy.js","sourceRoot":"","sources":["../../src/mcp/taxonomy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxonomy.test.d.ts","sourceRoot":"","sources":["../../src/mcp/taxonomy.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the taxonomy module — classification axes, decay, staleness.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it } from "node:test";
|
|
5
|
+
import assert from "node:assert/strict";
|
|
6
|
+
import { CATEGORIES, DOMAINS, KINDS, SOURCES, DECAY_HALF_LIFE, DECAY_DEFAULT_HALF_LIFE, STALENESS_DAYS, THRESHOLD_DUPLICATE, THRESHOLD_RELATED, QDRANT_INDEXES, SOURCE_MIGRATION, DEFAULT_DOMAIN, DEFAULT_KIND, DEFAULT_SOURCE, categoryValues, domainValues, kindValues, sourceValues, normalizeCategory, normalizeDomain, normalizeKind, normalizeSource, getDecayHalfLife, } from "./taxonomy.js";
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Value arrays
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
describe("categoryValues", () => {
|
|
11
|
+
it("returns array with expected categories", () => {
|
|
12
|
+
const vals = categoryValues();
|
|
13
|
+
assert.ok(Array.isArray(vals));
|
|
14
|
+
assert.ok(vals.includes("infrastructure"));
|
|
15
|
+
assert.ok(vals.includes("decisions"));
|
|
16
|
+
assert.ok(vals.includes("observation"));
|
|
17
|
+
assert.ok(vals.includes("preferences"));
|
|
18
|
+
assert.ok(vals.includes("projects"));
|
|
19
|
+
assert.ok(vals.includes("team"));
|
|
20
|
+
});
|
|
21
|
+
it("has exactly 6 categories", () => {
|
|
22
|
+
assert.strictEqual(categoryValues().length, 6);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe("domainValues", () => {
|
|
26
|
+
it("returns array with work and personal", () => {
|
|
27
|
+
const vals = domainValues();
|
|
28
|
+
assert.ok(vals.includes("work"));
|
|
29
|
+
assert.ok(vals.includes("personal"));
|
|
30
|
+
});
|
|
31
|
+
it("has exactly 2 domains", () => {
|
|
32
|
+
assert.strictEqual(domainValues().length, 2);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe("kindValues", () => {
|
|
36
|
+
it("returns expected kinds", () => {
|
|
37
|
+
const vals = kindValues();
|
|
38
|
+
assert.ok(vals.includes("fact"));
|
|
39
|
+
assert.ok(vals.includes("summary"));
|
|
40
|
+
assert.ok(vals.includes("distilled"));
|
|
41
|
+
assert.ok(vals.includes("relation"));
|
|
42
|
+
});
|
|
43
|
+
it("has exactly 4 kinds", () => {
|
|
44
|
+
assert.strictEqual(kindValues().length, 4);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe("sourceValues", () => {
|
|
48
|
+
it("returns expected sources", () => {
|
|
49
|
+
const vals = sourceValues();
|
|
50
|
+
assert.ok(vals.includes("agent"));
|
|
51
|
+
assert.ok(vals.includes("daemon"));
|
|
52
|
+
assert.ok(vals.includes("system"));
|
|
53
|
+
assert.ok(vals.includes("user"));
|
|
54
|
+
assert.ok(vals.includes("docs"));
|
|
55
|
+
});
|
|
56
|
+
it("has exactly 5 sources", () => {
|
|
57
|
+
assert.strictEqual(sourceValues().length, 5);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Record objects
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
describe("CATEGORIES", () => {
|
|
64
|
+
it("has description and extractionHint for each category", () => {
|
|
65
|
+
for (const [key, def] of Object.entries(CATEGORIES)) {
|
|
66
|
+
assert.ok(def.description, `${key} missing description`);
|
|
67
|
+
assert.ok(def.extractionHint, `${key} missing extractionHint`);
|
|
68
|
+
assert.ok(Array.isArray(def.examples), `${key} missing examples`);
|
|
69
|
+
assert.ok(def.examples.length > 0, `${key} has no examples`);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
it("examples have required fields", () => {
|
|
73
|
+
for (const [key, def] of Object.entries(CATEGORIES)) {
|
|
74
|
+
for (const ex of def.examples) {
|
|
75
|
+
assert.ok(typeof ex.content === "string", `${key} example missing content`);
|
|
76
|
+
assert.ok(Array.isArray(ex.entities), `${key} example missing entities`);
|
|
77
|
+
assert.ok(typeof ex.confidence === "number", `${key} example missing confidence`);
|
|
78
|
+
assert.ok(typeof ex.importance === "number", `${key} example missing importance`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
describe("DOMAINS", () => {
|
|
84
|
+
it("has description for each domain", () => {
|
|
85
|
+
for (const [key, def] of Object.entries(DOMAINS)) {
|
|
86
|
+
assert.ok(def.description, `${key} missing description`);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe("KINDS", () => {
|
|
91
|
+
it("has description for each kind", () => {
|
|
92
|
+
for (const [key, def] of Object.entries(KINDS)) {
|
|
93
|
+
assert.ok(def.description, `${key} missing description`);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe("SOURCES", () => {
|
|
98
|
+
it("has description for each source", () => {
|
|
99
|
+
for (const [key, def] of Object.entries(SOURCES)) {
|
|
100
|
+
assert.ok(def.description, `${key} missing description`);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// Defaults
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
describe("defaults", () => {
|
|
108
|
+
it("DEFAULT_DOMAIN is 'work'", () => {
|
|
109
|
+
assert.strictEqual(DEFAULT_DOMAIN, "work");
|
|
110
|
+
});
|
|
111
|
+
it("DEFAULT_KIND is 'fact'", () => {
|
|
112
|
+
assert.strictEqual(DEFAULT_KIND, "fact");
|
|
113
|
+
});
|
|
114
|
+
it("DEFAULT_SOURCE is 'agent'", () => {
|
|
115
|
+
assert.strictEqual(DEFAULT_SOURCE, "agent");
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
// STALENESS_DAYS
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
describe("STALENESS_DAYS", () => {
|
|
122
|
+
it("is a positive number", () => {
|
|
123
|
+
assert.ok(typeof STALENESS_DAYS === "number");
|
|
124
|
+
assert.ok(STALENESS_DAYS > 0);
|
|
125
|
+
});
|
|
126
|
+
it("is 30", () => {
|
|
127
|
+
assert.strictEqual(STALENESS_DAYS, 30);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
// DECAY_HALF_LIFE
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
describe("DECAY_HALF_LIFE", () => {
|
|
134
|
+
it("has entries for major categories", () => {
|
|
135
|
+
assert.ok("infrastructure" in DECAY_HALF_LIFE);
|
|
136
|
+
assert.ok("projects" in DECAY_HALF_LIFE);
|
|
137
|
+
assert.ok("decisions" in DECAY_HALF_LIFE);
|
|
138
|
+
assert.ok("observation" in DECAY_HALF_LIFE);
|
|
139
|
+
assert.ok("preferences" in DECAY_HALF_LIFE);
|
|
140
|
+
assert.ok("team" in DECAY_HALF_LIFE);
|
|
141
|
+
});
|
|
142
|
+
it("session_summary has null half-life (no decay)", () => {
|
|
143
|
+
assert.strictEqual(DECAY_HALF_LIFE.session_summary, null);
|
|
144
|
+
});
|
|
145
|
+
it("distilled has null half-life (no decay)", () => {
|
|
146
|
+
assert.strictEqual(DECAY_HALF_LIFE.distilled, null);
|
|
147
|
+
});
|
|
148
|
+
it("all numeric values are positive", () => {
|
|
149
|
+
for (const [key, val] of Object.entries(DECAY_HALF_LIFE)) {
|
|
150
|
+
if (val !== null) {
|
|
151
|
+
assert.ok(val > 0, `${key} has non-positive half-life: ${val}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
describe("DECAY_DEFAULT_HALF_LIFE", () => {
|
|
157
|
+
it("is a reasonable positive number", () => {
|
|
158
|
+
assert.ok(typeof DECAY_DEFAULT_HALF_LIFE === "number");
|
|
159
|
+
assert.ok(DECAY_DEFAULT_HALF_LIFE > 0);
|
|
160
|
+
assert.strictEqual(DECAY_DEFAULT_HALF_LIFE, 90);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
// getDecayHalfLife
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
describe("getDecayHalfLife", () => {
|
|
167
|
+
it("returns null for summary kind (no decay)", () => {
|
|
168
|
+
assert.strictEqual(getDecayHalfLife({ kind: "summary" }), null);
|
|
169
|
+
});
|
|
170
|
+
it("returns null for distilled kind (no decay)", () => {
|
|
171
|
+
assert.strictEqual(getDecayHalfLife({ kind: "distilled" }), null);
|
|
172
|
+
});
|
|
173
|
+
it("returns 180 for relation kind", () => {
|
|
174
|
+
assert.strictEqual(getDecayHalfLife({ kind: "relation" }), 180);
|
|
175
|
+
});
|
|
176
|
+
it("returns specific value for category+domain combo", () => {
|
|
177
|
+
assert.strictEqual(getDecayHalfLife({ category: "observation", domain: "work" }), 45);
|
|
178
|
+
assert.strictEqual(getDecayHalfLife({ category: "observation", domain: "personal" }), 180);
|
|
179
|
+
assert.strictEqual(getDecayHalfLife({ category: "infrastructure", domain: "work" }), 60);
|
|
180
|
+
});
|
|
181
|
+
it("returns wildcard category value when domain match not found", () => {
|
|
182
|
+
assert.strictEqual(getDecayHalfLife({ category: "decisions", domain: "work" }), 120);
|
|
183
|
+
assert.strictEqual(getDecayHalfLife({ category: "decisions", domain: "personal" }), 120);
|
|
184
|
+
});
|
|
185
|
+
it("returns default when no match", () => {
|
|
186
|
+
assert.strictEqual(getDecayHalfLife({ category: "unknown_cat" }), DECAY_DEFAULT_HALF_LIFE);
|
|
187
|
+
});
|
|
188
|
+
it("returns default with no args", () => {
|
|
189
|
+
// defaults to category=observation, domain=work → 45
|
|
190
|
+
assert.strictEqual(getDecayHalfLife(), 45);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
// Thresholds
|
|
195
|
+
// ---------------------------------------------------------------------------
|
|
196
|
+
describe("thresholds", () => {
|
|
197
|
+
it("THRESHOLD_DUPLICATE is between 0 and 1", () => {
|
|
198
|
+
assert.ok(THRESHOLD_DUPLICATE > 0 && THRESHOLD_DUPLICATE < 1);
|
|
199
|
+
assert.strictEqual(THRESHOLD_DUPLICATE, 0.92);
|
|
200
|
+
});
|
|
201
|
+
it("THRESHOLD_RELATED is between 0 and 1", () => {
|
|
202
|
+
assert.ok(THRESHOLD_RELATED > 0 && THRESHOLD_RELATED < 1);
|
|
203
|
+
assert.strictEqual(THRESHOLD_RELATED, 0.80);
|
|
204
|
+
});
|
|
205
|
+
it("THRESHOLD_DUPLICATE > THRESHOLD_RELATED", () => {
|
|
206
|
+
assert.ok(THRESHOLD_DUPLICATE > THRESHOLD_RELATED);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
// ---------------------------------------------------------------------------
|
|
210
|
+
// QDRANT_INDEXES
|
|
211
|
+
// ---------------------------------------------------------------------------
|
|
212
|
+
describe("QDRANT_INDEXES", () => {
|
|
213
|
+
it("is a non-empty array", () => {
|
|
214
|
+
assert.ok(Array.isArray(QDRANT_INDEXES));
|
|
215
|
+
assert.ok(QDRANT_INDEXES.length > 0);
|
|
216
|
+
});
|
|
217
|
+
it("each index has field_name and field_schema", () => {
|
|
218
|
+
for (const idx of QDRANT_INDEXES) {
|
|
219
|
+
assert.ok(typeof idx.field_name === "string");
|
|
220
|
+
assert.ok(typeof idx.field_schema === "string");
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
it("includes key payload indexes", () => {
|
|
224
|
+
const fieldNames = QDRANT_INDEXES.map((i) => i.field_name);
|
|
225
|
+
assert.ok(fieldNames.includes("category"));
|
|
226
|
+
assert.ok(fieldNames.includes("domain"));
|
|
227
|
+
assert.ok(fieldNames.includes("kind"));
|
|
228
|
+
assert.ok(fieldNames.includes("source"));
|
|
229
|
+
assert.ok(fieldNames.includes("entities"));
|
|
230
|
+
assert.ok(fieldNames.includes("content_hash"));
|
|
231
|
+
assert.ok(fieldNames.includes("superseded_by"));
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
// ---------------------------------------------------------------------------
|
|
235
|
+
// SOURCE_MIGRATION
|
|
236
|
+
// ---------------------------------------------------------------------------
|
|
237
|
+
describe("SOURCE_MIGRATION", () => {
|
|
238
|
+
it("maps old source values to new ones", () => {
|
|
239
|
+
assert.strictEqual(SOURCE_MIGRATION.conversation, "agent");
|
|
240
|
+
assert.strictEqual(SOURCE_MIGRATION.task, "agent");
|
|
241
|
+
assert.strictEqual(SOURCE_MIGRATION.observation, "agent");
|
|
242
|
+
assert.strictEqual(SOURCE_MIGRATION.manual, "user");
|
|
243
|
+
assert.strictEqual(SOURCE_MIGRATION.cortex, "daemon");
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
// Normalization functions
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
describe("normalizeCategory", () => {
|
|
250
|
+
it("returns valid category as-is (lowercase)", () => {
|
|
251
|
+
assert.strictEqual(normalizeCategory("infrastructure"), "infrastructure");
|
|
252
|
+
assert.strictEqual(normalizeCategory("decisions"), "decisions");
|
|
253
|
+
assert.strictEqual(normalizeCategory("team"), "team");
|
|
254
|
+
});
|
|
255
|
+
it("is case-insensitive", () => {
|
|
256
|
+
assert.strictEqual(normalizeCategory("Infrastructure"), "infrastructure");
|
|
257
|
+
assert.strictEqual(normalizeCategory("DECISIONS"), "decisions");
|
|
258
|
+
});
|
|
259
|
+
it("maps 'personal' to 'preferences'", () => {
|
|
260
|
+
assert.strictEqual(normalizeCategory("personal"), "preferences");
|
|
261
|
+
});
|
|
262
|
+
it("maps 'session_summary' to 'projects'", () => {
|
|
263
|
+
assert.strictEqual(normalizeCategory("session_summary"), "projects");
|
|
264
|
+
});
|
|
265
|
+
it("maps 'distilled' to 'observation'", () => {
|
|
266
|
+
assert.strictEqual(normalizeCategory("distilled"), "observation");
|
|
267
|
+
});
|
|
268
|
+
it("maps 'relation' to 'team'", () => {
|
|
269
|
+
assert.strictEqual(normalizeCategory("relation"), "team");
|
|
270
|
+
});
|
|
271
|
+
it("fuzzy matches 'infra' to 'infrastructure'", () => {
|
|
272
|
+
assert.strictEqual(normalizeCategory("infra-stuff"), "infrastructure");
|
|
273
|
+
});
|
|
274
|
+
it("fuzzy matches 'decision' to 'decisions'", () => {
|
|
275
|
+
assert.strictEqual(normalizeCategory("a decision"), "decisions");
|
|
276
|
+
});
|
|
277
|
+
it("defaults to 'observation' for unknown", () => {
|
|
278
|
+
assert.strictEqual(normalizeCategory("something_random"), "observation");
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
describe("normalizeDomain", () => {
|
|
282
|
+
it("returns valid domains as-is", () => {
|
|
283
|
+
assert.strictEqual(normalizeDomain("work"), "work");
|
|
284
|
+
assert.strictEqual(normalizeDomain("personal"), "personal");
|
|
285
|
+
});
|
|
286
|
+
it("defaults to 'work' for undefined", () => {
|
|
287
|
+
assert.strictEqual(normalizeDomain(undefined), "work");
|
|
288
|
+
});
|
|
289
|
+
it("defaults to 'work' for unknown values", () => {
|
|
290
|
+
assert.strictEqual(normalizeDomain("unknown"), "work");
|
|
291
|
+
});
|
|
292
|
+
it("fuzzy matches 'personal'", () => {
|
|
293
|
+
assert.strictEqual(normalizeDomain("personal-stuff"), "personal");
|
|
294
|
+
});
|
|
295
|
+
it("fuzzy matches 'life' and 'home'", () => {
|
|
296
|
+
assert.strictEqual(normalizeDomain("life"), "personal");
|
|
297
|
+
assert.strictEqual(normalizeDomain("home"), "personal");
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
describe("normalizeKind", () => {
|
|
301
|
+
it("returns valid kinds as-is", () => {
|
|
302
|
+
assert.strictEqual(normalizeKind("fact"), "fact");
|
|
303
|
+
assert.strictEqual(normalizeKind("summary"), "summary");
|
|
304
|
+
assert.strictEqual(normalizeKind("distilled"), "distilled");
|
|
305
|
+
assert.strictEqual(normalizeKind("relation"), "relation");
|
|
306
|
+
});
|
|
307
|
+
it("defaults to 'fact' for undefined", () => {
|
|
308
|
+
assert.strictEqual(normalizeKind(undefined), "fact");
|
|
309
|
+
});
|
|
310
|
+
it("defaults to 'fact' for unknown", () => {
|
|
311
|
+
assert.strictEqual(normalizeKind("unknown"), "fact");
|
|
312
|
+
});
|
|
313
|
+
it("fuzzy matches partial strings", () => {
|
|
314
|
+
assert.strictEqual(normalizeKind("summarized"), "summary");
|
|
315
|
+
assert.strictEqual(normalizeKind("distillation"), "distilled");
|
|
316
|
+
assert.strictEqual(normalizeKind("relationship"), "relation");
|
|
317
|
+
assert.strictEqual(normalizeKind("edge"), "relation");
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
describe("normalizeSource", () => {
|
|
321
|
+
it("returns valid sources as-is", () => {
|
|
322
|
+
assert.strictEqual(normalizeSource("agent"), "agent");
|
|
323
|
+
assert.strictEqual(normalizeSource("cortex"), "daemon");
|
|
324
|
+
assert.strictEqual(normalizeSource("system"), "system");
|
|
325
|
+
assert.strictEqual(normalizeSource("user"), "user");
|
|
326
|
+
assert.strictEqual(normalizeSource("docs"), "docs");
|
|
327
|
+
});
|
|
328
|
+
it("defaults to 'agent' for undefined", () => {
|
|
329
|
+
assert.strictEqual(normalizeSource(undefined), "agent");
|
|
330
|
+
});
|
|
331
|
+
it("migrates old source values", () => {
|
|
332
|
+
assert.strictEqual(normalizeSource("conversation"), "agent");
|
|
333
|
+
assert.strictEqual(normalizeSource("task"), "agent");
|
|
334
|
+
assert.strictEqual(normalizeSource("observation"), "agent");
|
|
335
|
+
assert.strictEqual(normalizeSource("manual"), "user");
|
|
336
|
+
});
|
|
337
|
+
it("defaults to 'agent' for unknown", () => {
|
|
338
|
+
assert.strictEqual(normalizeSource("unknown"), "agent");
|
|
339
|
+
});
|
|
340
|
+
});
|
|
341
|
+
//# sourceMappingURL=taxonomy.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxonomy.test.js","sourceRoot":"","sources":["../../src/mcp/taxonomy.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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;AAgLzE,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAw9BlD"}
|