@convertcom/mcp-server 0.0.1-beta.10

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 (54) hide show
  1. package/.assets/logo-dark.svg +20 -0
  2. package/.assets/logo-light.svg +20 -0
  3. package/README.md +277 -0
  4. package/build/api-config.d.ts +4 -0
  5. package/build/api-config.js +139 -0
  6. package/build/api-config.js.map +1 -0
  7. package/build/debug-log.d.ts +6 -0
  8. package/build/debug-log.js +46 -0
  9. package/build/debug-log.js.map +1 -0
  10. package/build/executor.d.ts +13 -0
  11. package/build/executor.js +783 -0
  12. package/build/executor.js.map +1 -0
  13. package/build/index.d.ts +10 -0
  14. package/build/index.js +453 -0
  15. package/build/index.js.map +1 -0
  16. package/build/kb-hybrid.d.ts +20 -0
  17. package/build/kb-hybrid.js +70 -0
  18. package/build/kb-hybrid.js.map +1 -0
  19. package/build/kb-search.d.ts +18 -0
  20. package/build/kb-search.js +77 -0
  21. package/build/kb-search.js.map +1 -0
  22. package/build/kb-semantic.d.ts +20 -0
  23. package/build/kb-semantic.js +135 -0
  24. package/build/kb-semantic.js.map +1 -0
  25. package/build/namespaced.d.ts +10 -0
  26. package/build/namespaced.js +927 -0
  27. package/build/namespaced.js.map +1 -0
  28. package/build/operator.d.ts +17 -0
  29. package/build/operator.js +1320 -0
  30. package/build/operator.js.map +1 -0
  31. package/build/prompts.d.ts +13 -0
  32. package/build/prompts.js +201 -0
  33. package/build/prompts.js.map +1 -0
  34. package/build/shared.d.ts +6 -0
  35. package/build/shared.js +14 -0
  36. package/build/shared.js.map +1 -0
  37. package/build/tools.d.ts +19 -0
  38. package/build/tools.js +1293 -0
  39. package/build/tools.js.map +1 -0
  40. package/data/convert-kb.json +28882 -0
  41. package/data/kb-vectors/0/embedding.index.3.proxima +0 -0
  42. package/data/kb-vectors/0/scalar.0.ipc +0 -0
  43. package/data/kb-vectors/LOCK +0 -0
  44. package/data/kb-vectors/del.0 +0 -0
  45. package/data/kb-vectors/idmap.0/000008.sst +0 -0
  46. package/data/kb-vectors/idmap.0/CURRENT +1 -0
  47. package/data/kb-vectors/idmap.0/IDENTITY +1 -0
  48. package/data/kb-vectors/idmap.0/LOCK +0 -0
  49. package/data/kb-vectors/idmap.0/LOG +0 -0
  50. package/data/kb-vectors/idmap.0/MANIFEST-000005 +0 -0
  51. package/data/kb-vectors/idmap.0/OPTIONS-000007 +199 -0
  52. package/data/kb-vectors/manifest.3 +9 -0
  53. package/package.json +71 -0
  54. package/server.json +17 -0
@@ -0,0 +1,18 @@
1
+ export interface KbChunk {
2
+ title: string;
3
+ url: string;
4
+ content: string;
5
+ }
6
+ export interface SearchResult {
7
+ id: string;
8
+ chunk: KbChunk;
9
+ score: number;
10
+ snippet: string;
11
+ }
12
+ export declare class KbSearchService {
13
+ private readonly index;
14
+ private readonly chunkMap;
15
+ constructor(kbPath: string);
16
+ getById(id: string): KbChunk | null;
17
+ search(query: string, limit?: number): SearchResult[];
18
+ }
@@ -0,0 +1,77 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import MiniSearch from 'minisearch';
3
+ const DEFAULT_SEARCH_OPTIONS = {
4
+ prefix: true,
5
+ fuzzy: 0.2,
6
+ boost: { title: 2, content: 1 }
7
+ };
8
+ export class KbSearchService {
9
+ index;
10
+ chunkMap = new Map();
11
+ constructor(kbPath) {
12
+ const raw = readFileSync(kbPath, 'utf8');
13
+ const chunks = JSON.parse(raw);
14
+ const indexedChunks = chunks.map((chunk, idx) => {
15
+ const id = String(idx);
16
+ this.chunkMap.set(id, chunk);
17
+ return { id, ...chunk };
18
+ });
19
+ this.index = new MiniSearch({
20
+ fields: ['title', 'content'],
21
+ storeFields: ['title', 'url', 'content'],
22
+ searchOptions: DEFAULT_SEARCH_OPTIONS
23
+ });
24
+ this.index.addAll(indexedChunks);
25
+ console.error(`[KbSearchService] Indexed ${indexedChunks.length} chunks for MiniSearch-based lookup.`);
26
+ }
27
+ getById(id) {
28
+ return this.chunkMap.get(id) ?? null;
29
+ }
30
+ search(query, limit = 5) {
31
+ if (!query || !query.trim()) {
32
+ return [];
33
+ }
34
+ const cleanedQuery = query.trim();
35
+ const results = this.index.search(cleanedQuery, DEFAULT_SEARCH_OPTIONS).slice(0, limit);
36
+ const topScore = results.length > 0 && typeof results[0].score === 'number' ? results[0].score : 0;
37
+ return results.map((result) => {
38
+ const chunk = this.chunkMap.get(result.id) ?? {
39
+ title: result.title,
40
+ url: result.url,
41
+ content: result.content
42
+ };
43
+ const snippet = buildSnippet(chunk.content, cleanedQuery);
44
+ const normalizedScore = topScore > 0 && typeof result.score === 'number'
45
+ ? Number((result.score / topScore).toFixed(4))
46
+ : 0;
47
+ return {
48
+ id: result.id,
49
+ chunk,
50
+ score: normalizedScore,
51
+ snippet
52
+ };
53
+ });
54
+ }
55
+ }
56
+ function buildSnippet(content, query, radius = 180) {
57
+ if (!content)
58
+ return '';
59
+ const lowerContent = content.toLowerCase();
60
+ const tokens = query.toLowerCase().split(/\s+/).filter(Boolean);
61
+ let firstIndex = -1;
62
+ for (const token of tokens) {
63
+ const idx = lowerContent.indexOf(token);
64
+ if (idx !== -1 && (firstIndex === -1 || idx < firstIndex)) {
65
+ firstIndex = idx;
66
+ }
67
+ }
68
+ if (firstIndex === -1) {
69
+ return content.length > radius * 2 ? `${content.slice(0, radius * 2)}...` : content;
70
+ }
71
+ const start = Math.max(0, firstIndex - radius);
72
+ const end = Math.min(content.length, firstIndex + tokens[0].length + radius);
73
+ const prefix = start > 0 ? '...' : '';
74
+ const suffix = end < content.length ? '...' : '';
75
+ return `${prefix}${content.slice(start, end)}${suffix}`;
76
+ }
77
+ //# sourceMappingURL=kb-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kb-search.js","sourceRoot":"","sources":["../src/kb-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { SearchResult } from './kb-search.js';
2
+ export declare class SemanticKbSearchService {
3
+ private _isReady;
4
+ private _initPromise;
5
+ private _collection;
6
+ private _extractor;
7
+ private _chunks;
8
+ private _hasLoadedNativeRuntime;
9
+ private _runtimeVectorsDir;
10
+ constructor(kbJsonPath: string, vectorsDir: string);
11
+ isReady(): boolean;
12
+ waitReady(): Promise<boolean>;
13
+ hasNativeRuntimeLoaded(): boolean;
14
+ search(query: string, limit?: number): Promise<SearchResult[]>;
15
+ close(): void;
16
+ private _init;
17
+ private _openCollectionWithLockFallback;
18
+ }
19
+ export declare function isZvecLockError(error: unknown): boolean;
20
+ export declare function isSemanticKbDisabled(): boolean;
@@ -0,0 +1,135 @@
1
+ import { cpSync, existsSync, mkdtempSync, readFileSync, rmSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { tmpdir } from 'node:os';
4
+ const MODEL_ID = 'Xenova/all-MiniLM-L6-v2';
5
+ const EMBEDDING_DIM = 384;
6
+ export class SemanticKbSearchService {
7
+ _isReady = false;
8
+ _initPromise;
9
+ _collection = null;
10
+ _extractor = null;
11
+ _chunks = [];
12
+ _hasLoadedNativeRuntime = false;
13
+ _runtimeVectorsDir = null;
14
+ constructor(kbJsonPath, vectorsDir) {
15
+ this._initPromise = this._init(kbJsonPath, vectorsDir);
16
+ }
17
+ isReady() {
18
+ return this._isReady;
19
+ }
20
+ waitReady() {
21
+ return this._initPromise;
22
+ }
23
+ hasNativeRuntimeLoaded() {
24
+ return this._hasLoadedNativeRuntime;
25
+ }
26
+ async search(query, limit = 5) {
27
+ if (!this._isReady || !this._collection || !this._extractor) {
28
+ return [];
29
+ }
30
+ try {
31
+ const output = await this._extractor(query, { pooling: 'mean', normalize: true });
32
+ const queryVec = new Float32Array(output.data);
33
+ if (queryVec.length !== EMBEDDING_DIM) {
34
+ console.error(`[SemanticKbSearch] Unexpected embedding dimension: ${queryVec.length}, expected ${EMBEDDING_DIM}`);
35
+ return [];
36
+ }
37
+ const docs = this._collection.querySync({
38
+ fieldName: 'embedding',
39
+ vector: queryVec,
40
+ topk: limit,
41
+ outputFields: ['chunk_id'],
42
+ });
43
+ return docs.map((doc) => {
44
+ const chunkId = Number(doc.fields.chunk_id);
45
+ const chunk = this._chunks[chunkId];
46
+ if (!chunk)
47
+ return null;
48
+ const snippet = chunk.content.length > 360
49
+ ? chunk.content.slice(0, 360) + '...'
50
+ : chunk.content;
51
+ return {
52
+ id: String(chunkId),
53
+ chunk,
54
+ score: doc.score,
55
+ snippet,
56
+ };
57
+ }).filter((r) => r !== null);
58
+ }
59
+ catch (err) {
60
+ console.error('[SemanticKbSearch] Query error:', err instanceof Error ? err.message : err);
61
+ return [];
62
+ }
63
+ }
64
+ close() {
65
+ this._collection = null;
66
+ this._extractor = null;
67
+ this._isReady = false;
68
+ if (this._runtimeVectorsDir) {
69
+ rmSync(this._runtimeVectorsDir, { recursive: true, force: true });
70
+ this._runtimeVectorsDir = null;
71
+ }
72
+ }
73
+ async _init(kbJsonPath, vectorsDir) {
74
+ try {
75
+ if (isSemanticKbDisabled()) {
76
+ console.error('[SemanticKbSearch] Disabled by CONVERT_DISABLE_SEMANTIC_KB; using keyword-only search.');
77
+ return false;
78
+ }
79
+ if (!existsSync(vectorsDir)) {
80
+ console.error(`[SemanticKbSearch] Vectors directory not found: ${vectorsDir} — falling back to keyword-only search.`);
81
+ return false;
82
+ }
83
+ // Load chunks for content lookup by chunk_id
84
+ const raw = readFileSync(kbJsonPath, 'utf8');
85
+ this._chunks = JSON.parse(raw);
86
+ // Dynamic imports — missing packages throw catchable errors.
87
+ // Zvec is CJS, so dynamic import yields { default: { ZVecOpen, ... } }.
88
+ const [hf, zvecMod] = await Promise.all([
89
+ import('@huggingface/transformers'),
90
+ import('@zvec/zvec'),
91
+ ]);
92
+ this._hasLoadedNativeRuntime = true;
93
+ const { ZVecOpen } = zvecMod.default ?? zvecMod;
94
+ this._extractor = await hf.pipeline('feature-extraction', MODEL_ID, {
95
+ dtype: 'fp32',
96
+ });
97
+ this._collection = this._openCollectionWithLockFallback(ZVecOpen, vectorsDir);
98
+ this._isReady = true;
99
+ console.error(`[SemanticKbSearch] Ready — ${this._chunks.length} chunks, model: ${MODEL_ID}`);
100
+ return true;
101
+ }
102
+ catch (err) {
103
+ console.error('[SemanticKbSearch] Init failed (keyword-only fallback):', err instanceof Error ? err.message : err);
104
+ this._isReady = false;
105
+ return false;
106
+ }
107
+ }
108
+ _openCollectionWithLockFallback(openCollection, vectorsDir) {
109
+ const runtimeParent = process.env.CONVERT_KB_VECTOR_TMPDIR || tmpdir();
110
+ const runtimeDir = mkdtempSync(join(runtimeParent, 'convert-mcp-kb-vectors-'));
111
+ cpSync(vectorsDir, runtimeDir, { recursive: true });
112
+ this._runtimeVectorsDir = runtimeDir;
113
+ try {
114
+ console.error(`[SemanticKbSearch] Using read-only runtime vector copy: ${runtimeDir}`);
115
+ return openCollection(runtimeDir, { readOnly: true });
116
+ }
117
+ catch (error) {
118
+ rmSync(runtimeDir, { recursive: true, force: true });
119
+ this._runtimeVectorsDir = null;
120
+ if (!isZvecLockError(error))
121
+ throw error;
122
+ throw new Error(`Packaged vector store could not be opened from runtime copy: ${error instanceof Error ? error.message : String(error)}`, {
123
+ cause: error,
124
+ });
125
+ }
126
+ }
127
+ }
128
+ export function isZvecLockError(error) {
129
+ const message = error instanceof Error ? error.message : String(error);
130
+ return /\b(lock|locked|locking)\b/i.test(message);
131
+ }
132
+ export function isSemanticKbDisabled() {
133
+ return /^(1|true|yes)$/i.test(process.env.CONVERT_DISABLE_SEMANTIC_KB || '');
134
+ }
135
+ //# sourceMappingURL=kb-semantic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kb-semantic.js","sourceRoot":"","sources":["../src/kb-semantic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAYjC,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAC3C,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,MAAM,OAAO,uBAAuB;IAC1B,QAAQ,GAAG,KAAK,CAAC;IACjB,YAAY,CAAmB;IAC/B,WAAW,GAA0B,IAAI,CAAC;IAC1C,UAAU,GAAqB,IAAI,CAAC;IACpC,OAAO,GAAc,EAAE,CAAC;IACxB,uBAAuB,GAAG,KAAK,CAAC;IAChC,kBAAkB,GAAkB,IAAI,CAAC;IAEjD,YAAY,UAAkB,EAAE,UAAkB;QAChD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,sBAAsB;QACpB,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClF,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,IAAyB,CAAC,CAAC;YAEpE,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBACtC,OAAO,CAAC,KAAK,CAAC,sDAAsD,QAAQ,CAAC,MAAM,cAAc,aAAa,EAAE,CAAC,CAAC;gBAClH,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;gBACtC,SAAS,EAAE,WAAW;gBACtB,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,KAAK;gBACX,YAAY,EAAE,CAAC,UAAU,CAAC;aAC3B,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACtB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpC,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC;gBAExB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG;oBACxC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;oBACrC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;gBAElB,OAAO;oBACL,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC;oBACnB,KAAK;oBACL,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,OAAO;iBACR,CAAC;YACJ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3F,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,UAAkB;QACxD,IAAI,CAAC;YACH,IAAI,oBAAoB,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,wFAAwF,CAAC,CAAC;gBACxG,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,mDAAmD,UAAU,yCAAyC,CAAC,CAAC;gBACtH,OAAO,KAAK,CAAC;YACf,CAAC;YAED,6CAA6C;YAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;YAE5C,6DAA6D;YAC7D,wEAAwE;YACxE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACtC,MAAM,CAAC,2BAA2B,CAAC;gBACnC,MAAM,CAAC,YAAY,CAAC;aACrB,CAAC,CAAC;YACH,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;YACpC,MAAM,EAAE,QAAQ,EAAE,GAAI,OAAe,CAAC,OAAO,IAAI,OAAO,CAAC;YAEzD,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,EAAE;gBAClE,KAAK,EAAE,MAAM;aACd,CAAyB,CAAC;YAE3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,+BAA+B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAE9E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,OAAO,CAAC,MAAM,mBAAmB,QAAQ,EAAE,CAAC,CAAC;YAC9F,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yDAAyD,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnH,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,+BAA+B,CACrC,cAA4F,EAC5F,UAAkB;QAElB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,MAAM,EAAE,CAAC;QACvE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;QAErC,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,2DAA2D,UAAU,EAAE,CAAC,CAAC;YACvF,OAAO,cAAc,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,gEAAgE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;gBACxI,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Tool, CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ /**
3
+ * Per-action agent guidance. Appended to generated descriptions as "Agent Notes:".
4
+ * Keys are "namespace.action" strings matching REGISTRY entries.
5
+ * This map survives `yarn generate` — it's hand-curated like REGISTRY.
6
+ */
7
+ export declare const ACTION_NOTES: Record<string, string>;
8
+ export declare function getNamespacedTools(toolSet: string): Tool[];
9
+ export declare function executeNamespacedTool(namespace: string, args: any): Promise<CallToolResult>;
10
+ export declare function isNamespace(name: string): boolean;