lexic-mcp 0.1.0 → 0.1.2
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/README.md +10 -1
- package/dist/bundle.cjs +49 -0
- package/dist/index.js +5 -8
- package/package.json +6 -5
- package/dist/client/lexic-api.d.ts +0 -65
- package/dist/client/lexic-api.d.ts.map +0 -1
- package/dist/client/lexic-api.js +0 -253
- package/dist/client/lexic-api.js.map +0 -1
- package/dist/config.d.ts +0 -14
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -30
- package/dist/config.js.map +0 -1
- package/dist/core/admin.d.ts +0 -74
- package/dist/core/admin.d.ts.map +0 -1
- package/dist/core/admin.js +0 -103
- package/dist/core/admin.js.map +0 -1
- package/dist/core/context.d.ts +0 -28
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js +0 -76
- package/dist/core/context.js.map +0 -1
- package/dist/core/index.d.ts +0 -17
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -50
- package/dist/core/index.js.map +0 -1
- package/dist/core/query.d.ts +0 -47
- package/dist/core/query.d.ts.map +0 -1
- package/dist/core/query.js +0 -55
- package/dist/core/query.js.map +0 -1
- package/dist/core/store.d.ts +0 -35
- package/dist/core/store.d.ts.map +0 -1
- package/dist/core/store.js +0 -55
- package/dist/core/store.js.map +0 -1
- package/dist/core/types.d.ts +0 -57
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -7
- package/dist/core/types.js.map +0 -1
- package/dist/domains/development/index.d.ts +0 -8
- package/dist/domains/development/index.d.ts.map +0 -1
- package/dist/domains/development/index.js +0 -18
- package/dist/domains/development/index.js.map +0 -1
- package/dist/domains/development/tools.d.ts +0 -97
- package/dist/domains/development/tools.d.ts.map +0 -1
- package/dist/domains/development/tools.js +0 -140
- package/dist/domains/development/tools.js.map +0 -1
- package/dist/domains/index.d.ts +0 -9
- package/dist/domains/index.d.ts.map +0 -1
- package/dist/domains/index.js +0 -8
- package/dist/domains/index.js.map +0 -1
- package/dist/domains/loader.d.ts +0 -34
- package/dist/domains/loader.d.ts.map +0 -1
- package/dist/domains/loader.js +0 -74
- package/dist/domains/loader.js.map +0 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -27
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -48
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -20
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -63
- package/dist/utils/logger.js.map +0 -1
- package/templates/README.md +0 -12
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Lexic MCP Server Entry Point
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Thin client - forwards tool calls to Lexic API
|
|
6
6
|
*/
|
|
7
7
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
8
8
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
@@ -15,7 +15,7 @@ import { createQueryTool } from './core/query.js';
|
|
|
15
15
|
import { createStoreTool } from './core/store.js';
|
|
16
16
|
import { createContextTool } from './core/context.js';
|
|
17
17
|
import { createCreateProjectTool, createListProjectsTool, createGetProjectInfoTool } from './core/admin.js';
|
|
18
|
-
import { loadDomains
|
|
18
|
+
import { loadDomains } from './domains/index.js';
|
|
19
19
|
import { logger } from './utils/logger.js';
|
|
20
20
|
// ============================================================================
|
|
21
21
|
// MAIN
|
|
@@ -41,26 +41,25 @@ async function main() {
|
|
|
41
41
|
const server = new Server({ name: 'lexic-mcp', version: '0.1.0' }, { capabilities: { tools: {} } });
|
|
42
42
|
// Build tool registry
|
|
43
43
|
const tools = new Map();
|
|
44
|
-
// Register core
|
|
44
|
+
// Register core tools
|
|
45
45
|
const queryTool = createQueryTool(lexicClient);
|
|
46
46
|
const storeTool = createStoreTool(lexicClient);
|
|
47
47
|
const contextTool = createContextTool(lexicClient);
|
|
48
48
|
tools.set(queryTool.name, queryTool);
|
|
49
49
|
tools.set(storeTool.name, storeTool);
|
|
50
50
|
tools.set(contextTool.name, contextTool);
|
|
51
|
-
logger.debug('Registered core
|
|
51
|
+
logger.debug('Registered core tools', {
|
|
52
52
|
tools: [queryTool.name, storeTool.name, contextTool.name]
|
|
53
53
|
});
|
|
54
54
|
// Load domains
|
|
55
55
|
const domains = await loadDomains(config.domainsPath, config.domains);
|
|
56
|
-
const seeders = buildSeederMap(domains);
|
|
57
56
|
logger.info('Loaded domains', {
|
|
58
57
|
count: domains.length,
|
|
59
58
|
names: domains.map(d => d.name)
|
|
60
59
|
});
|
|
61
60
|
// Register admin tools (only if PAT is user-scoped)
|
|
62
61
|
if (lexicClient.isUserScoped()) {
|
|
63
|
-
const createProjectTool = createCreateProjectTool(lexicClient
|
|
62
|
+
const createProjectTool = createCreateProjectTool(lexicClient);
|
|
64
63
|
const listProjectsTool = createListProjectsTool(lexicClient);
|
|
65
64
|
const getProjectInfoTool = createGetProjectInfoTool(lexicClient);
|
|
66
65
|
tools.set(createProjectTool.name, createProjectTool);
|
|
@@ -79,8 +78,6 @@ async function main() {
|
|
|
79
78
|
const domainTools = [];
|
|
80
79
|
// Directly import and register domain tools
|
|
81
80
|
if (typeof module.registerTools === 'function') {
|
|
82
|
-
// The domain registerTools expects to wire into the server
|
|
83
|
-
// We need to extract tools differently - let's directly import them
|
|
84
81
|
const toolsPath = path.resolve(config.domainsPath, name, 'tools.js');
|
|
85
82
|
const toolsUrl = pathToFileURL(toolsPath).href;
|
|
86
83
|
const domainToolCreators = await import(toolsUrl);
|
package/package.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lexic-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "MCP server connecting Claude Code to Lexic knowledge management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
8
|
-
"lexic-mcp": "dist/
|
|
8
|
+
"lexic-mcp": "./dist/bundle.cjs"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc && npm run build:domains",
|
|
12
12
|
"build:domains": "tsc -p domains/tsconfig.json",
|
|
13
|
+
"bundle": "npm run build && esbuild dist/index.js --bundle --platform=node --target=node18 --outfile=dist/bundle.cjs --format=cjs --minify",
|
|
13
14
|
"dev": "tsc --watch",
|
|
14
15
|
"start": "node dist/index.js",
|
|
15
16
|
"test": "vitest",
|
|
@@ -19,7 +20,7 @@
|
|
|
19
20
|
"lint:fix": "eslint src --ext .ts --fix",
|
|
20
21
|
"format": "prettier --write \"src/**/*.ts\"",
|
|
21
22
|
"clean": "rimraf dist",
|
|
22
|
-
"prepublishOnly": "npm run
|
|
23
|
+
"prepublishOnly": "npm run bundle"
|
|
23
24
|
},
|
|
24
25
|
"keywords": [
|
|
25
26
|
"mcp",
|
|
@@ -37,6 +38,7 @@
|
|
|
37
38
|
"@types/node": "^20.10.0",
|
|
38
39
|
"@typescript-eslint/eslint-plugin": "^6.13.0",
|
|
39
40
|
"@typescript-eslint/parser": "^6.13.0",
|
|
41
|
+
"esbuild": "^0.20.0",
|
|
40
42
|
"eslint": "^8.55.0",
|
|
41
43
|
"prettier": "^3.1.0",
|
|
42
44
|
"rimraf": "^5.0.0",
|
|
@@ -47,7 +49,6 @@
|
|
|
47
49
|
"node": ">=18.0.0"
|
|
48
50
|
},
|
|
49
51
|
"files": [
|
|
50
|
-
"dist"
|
|
51
|
-
"templates"
|
|
52
|
+
"dist/bundle.cjs"
|
|
52
53
|
]
|
|
53
54
|
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lexic API Client
|
|
3
|
-
*
|
|
4
|
-
* See .claude/specs/IMPLEMENTATION.md Section 3
|
|
5
|
-
*/
|
|
6
|
-
import type { Config } from '../config.js';
|
|
7
|
-
export interface LexicClient {
|
|
8
|
-
createNote(content: string, title?: string): Promise<CreateNoteResult>;
|
|
9
|
-
searchNotes(query: string, limit?: number): Promise<SearchResult[]>;
|
|
10
|
-
getNote(id: string): Promise<Note>;
|
|
11
|
-
updateNote(id: string, content: string): Promise<Note>;
|
|
12
|
-
semanticSearch(query: string, limit?: number): Promise<SearchResult[]>;
|
|
13
|
-
createLexicon(name: string, description?: string): Promise<CreateLexiconResult>;
|
|
14
|
-
listLexicons(): Promise<ListLexiconsResult>;
|
|
15
|
-
getCurrentLexiconInfo(): Promise<LexiconInfo>;
|
|
16
|
-
createNoteInLexicon(lexiconId: string, content: string, title?: string): Promise<CreateNoteResult>;
|
|
17
|
-
validateConnection(): Promise<ConnectionValidation>;
|
|
18
|
-
isUserScoped(): boolean;
|
|
19
|
-
getCurrentLexiconId(): string | undefined;
|
|
20
|
-
}
|
|
21
|
-
export interface CreateNoteResult {
|
|
22
|
-
success: boolean;
|
|
23
|
-
noteId?: string;
|
|
24
|
-
error?: string;
|
|
25
|
-
}
|
|
26
|
-
export interface SearchResult {
|
|
27
|
-
noteId: string;
|
|
28
|
-
title?: string;
|
|
29
|
-
content: string;
|
|
30
|
-
score: number;
|
|
31
|
-
createdAt: string;
|
|
32
|
-
updatedAt: string;
|
|
33
|
-
}
|
|
34
|
-
export interface Note {
|
|
35
|
-
id: string;
|
|
36
|
-
title?: string;
|
|
37
|
-
content: string;
|
|
38
|
-
createdAt: string;
|
|
39
|
-
updatedAt: string;
|
|
40
|
-
}
|
|
41
|
-
export interface CreateLexiconResult {
|
|
42
|
-
success: boolean;
|
|
43
|
-
lexiconId?: string;
|
|
44
|
-
error?: string;
|
|
45
|
-
}
|
|
46
|
-
export interface LexiconInfo {
|
|
47
|
-
id: string;
|
|
48
|
-
name: string;
|
|
49
|
-
description?: string;
|
|
50
|
-
noteCount: number;
|
|
51
|
-
createdAt: string;
|
|
52
|
-
updatedAt: string;
|
|
53
|
-
}
|
|
54
|
-
export interface ListLexiconsResult {
|
|
55
|
-
lexicons: LexiconInfo[];
|
|
56
|
-
}
|
|
57
|
-
export interface ConnectionValidation {
|
|
58
|
-
valid: boolean;
|
|
59
|
-
lexiconId?: string;
|
|
60
|
-
userId?: string;
|
|
61
|
-
isUserScoped: boolean;
|
|
62
|
-
error?: string;
|
|
63
|
-
}
|
|
64
|
-
export declare function createLexicClient(config: Config): LexicClient;
|
|
65
|
-
//# sourceMappingURL=lexic-api.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lexic-api.d.ts","sourceRoot":"","sources":["../../src/client/lexic-api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAe3C,MAAM,WAAW,WAAW;IAE1B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGvD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAGvE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChF,YAAY,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAG9C,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAGnG,kBAAkB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAGpD,YAAY,IAAI,OAAO,CAAC;IACxB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAcD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CA8R7D"}
|
package/dist/client/lexic-api.js
DELETED
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lexic API Client
|
|
3
|
-
*
|
|
4
|
-
* See .claude/specs/IMPLEMENTATION.md Section 3
|
|
5
|
-
*/
|
|
6
|
-
import { logger } from '../utils/logger.js';
|
|
7
|
-
import { LexicApiError, AuthenticationError, AuthorizationError, NotFoundError, RateLimitError, ServerError } from '../utils/errors.js';
|
|
8
|
-
// ============================================================================
|
|
9
|
-
// CONSTANTS
|
|
10
|
-
// ============================================================================
|
|
11
|
-
const REQUEST_TIMEOUT_MS = 30000;
|
|
12
|
-
const MAX_RETRIES = 1;
|
|
13
|
-
const INITIAL_RETRY_DELAY_MS = 1000;
|
|
14
|
-
// ============================================================================
|
|
15
|
-
// IMPLEMENTATION
|
|
16
|
-
// ============================================================================
|
|
17
|
-
export function createLexicClient(config) {
|
|
18
|
-
const { apiUrl, pat } = config;
|
|
19
|
-
// Track connection state
|
|
20
|
-
let connectionState = null;
|
|
21
|
-
// Helper to build headers
|
|
22
|
-
function getHeaders() {
|
|
23
|
-
return {
|
|
24
|
-
'Authorization': `Bearer ${pat}`,
|
|
25
|
-
'Content-Type': 'application/json'
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
// Helper to handle errors
|
|
29
|
-
function handleError(status, errorMessage, correlationId) {
|
|
30
|
-
switch (status) {
|
|
31
|
-
case 401:
|
|
32
|
-
throw new AuthenticationError(errorMessage, correlationId);
|
|
33
|
-
case 403:
|
|
34
|
-
throw new AuthorizationError(errorMessage, correlationId);
|
|
35
|
-
case 404:
|
|
36
|
-
throw new NotFoundError(errorMessage, correlationId);
|
|
37
|
-
case 429:
|
|
38
|
-
throw new RateLimitError(errorMessage, correlationId);
|
|
39
|
-
default:
|
|
40
|
-
if (status >= 500) {
|
|
41
|
-
throw new ServerError(errorMessage, status, correlationId);
|
|
42
|
-
}
|
|
43
|
-
throw new LexicApiError(errorMessage, status, correlationId);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
// Core fetch with timeout, retry, and error handling
|
|
47
|
-
async function fetchWithRetry(url, options, retries = MAX_RETRIES) {
|
|
48
|
-
const controller = new AbortController();
|
|
49
|
-
const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
50
|
-
try {
|
|
51
|
-
const response = await fetch(url, {
|
|
52
|
-
...options,
|
|
53
|
-
signal: controller.signal,
|
|
54
|
-
headers: {
|
|
55
|
-
...getHeaders(),
|
|
56
|
-
...options.headers
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
clearTimeout(timeoutId);
|
|
60
|
-
// Retry on 5xx errors
|
|
61
|
-
if (response.status >= 500 && retries > 0) {
|
|
62
|
-
const delay = INITIAL_RETRY_DELAY_MS * Math.pow(2, MAX_RETRIES - retries);
|
|
63
|
-
logger.debug('Retrying request after server error', {
|
|
64
|
-
url,
|
|
65
|
-
status: response.status,
|
|
66
|
-
delay,
|
|
67
|
-
retriesLeft: retries - 1
|
|
68
|
-
});
|
|
69
|
-
await sleep(delay);
|
|
70
|
-
return fetchWithRetry(url, options, retries - 1);
|
|
71
|
-
}
|
|
72
|
-
return response;
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
clearTimeout(timeoutId);
|
|
76
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
77
|
-
throw new LexicApiError('Request timeout', 408);
|
|
78
|
-
}
|
|
79
|
-
throw error;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// Parse response and handle errors
|
|
83
|
-
async function parseResponse(response) {
|
|
84
|
-
const correlationId = response.headers.get('x-correlation-id') || undefined;
|
|
85
|
-
const body = await response.json();
|
|
86
|
-
if (!response.ok) {
|
|
87
|
-
const errorMessage = body.error || `Request failed with status ${response.status}`;
|
|
88
|
-
handleError(response.status, errorMessage, correlationId);
|
|
89
|
-
}
|
|
90
|
-
return body;
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
// ========================================================================
|
|
94
|
-
// CONNECTION VALIDATION
|
|
95
|
-
// ========================================================================
|
|
96
|
-
async validateConnection() {
|
|
97
|
-
try {
|
|
98
|
-
const response = await fetch(`${apiUrl}/auth/validate`, {
|
|
99
|
-
method: 'GET',
|
|
100
|
-
headers: getHeaders()
|
|
101
|
-
});
|
|
102
|
-
const body = await response.json();
|
|
103
|
-
if (!response.ok) {
|
|
104
|
-
connectionState = {
|
|
105
|
-
valid: false,
|
|
106
|
-
isUserScoped: false,
|
|
107
|
-
error: body.error || 'Authentication failed'
|
|
108
|
-
};
|
|
109
|
-
return connectionState;
|
|
110
|
-
}
|
|
111
|
-
connectionState = {
|
|
112
|
-
valid: body.valid ?? true,
|
|
113
|
-
lexiconId: body.lexiconId,
|
|
114
|
-
userId: body.userId,
|
|
115
|
-
isUserScoped: body.isUserScoped ?? !body.lexiconId
|
|
116
|
-
};
|
|
117
|
-
return connectionState;
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
connectionState = {
|
|
121
|
-
valid: false,
|
|
122
|
-
isUserScoped: false,
|
|
123
|
-
error: `Network error: ${error instanceof Error ? error.message : String(error)}`
|
|
124
|
-
};
|
|
125
|
-
return connectionState;
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
// ========================================================================
|
|
129
|
-
// NOTES API
|
|
130
|
-
// ========================================================================
|
|
131
|
-
async createNote(content, title) {
|
|
132
|
-
try {
|
|
133
|
-
const response = await fetchWithRetry(`${apiUrl}/notes`, {
|
|
134
|
-
method: 'POST',
|
|
135
|
-
body: JSON.stringify({ content, title })
|
|
136
|
-
});
|
|
137
|
-
const body = await response.json();
|
|
138
|
-
if (!response.ok) {
|
|
139
|
-
return { success: false, error: body.error || 'Failed to create note' };
|
|
140
|
-
}
|
|
141
|
-
logger.debug('Note created', { noteId: body.id });
|
|
142
|
-
return { success: true, noteId: body.id };
|
|
143
|
-
}
|
|
144
|
-
catch (error) {
|
|
145
|
-
logger.error('Failed to create note', { error: error instanceof Error ? error.message : String(error) });
|
|
146
|
-
return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
async searchNotes(query, limit = 10) {
|
|
150
|
-
const url = `${apiUrl}/notes/search?q=${encodeURIComponent(query)}&limit=${limit}`;
|
|
151
|
-
const response = await fetchWithRetry(url, { method: 'GET' });
|
|
152
|
-
const body = await parseResponse(response);
|
|
153
|
-
return body.results.map(r => ({
|
|
154
|
-
noteId: r.id,
|
|
155
|
-
title: r.title,
|
|
156
|
-
content: r.content,
|
|
157
|
-
score: r.score,
|
|
158
|
-
createdAt: r.createdAt,
|
|
159
|
-
updatedAt: r.updatedAt
|
|
160
|
-
}));
|
|
161
|
-
},
|
|
162
|
-
async getNote(id) {
|
|
163
|
-
const url = `${apiUrl}/notes/${encodeURIComponent(id)}`;
|
|
164
|
-
const response = await fetchWithRetry(url, { method: 'GET' });
|
|
165
|
-
return parseResponse(response);
|
|
166
|
-
},
|
|
167
|
-
async updateNote(id, content) {
|
|
168
|
-
const url = `${apiUrl}/notes/${encodeURIComponent(id)}`;
|
|
169
|
-
const response = await fetchWithRetry(url, {
|
|
170
|
-
method: 'PATCH',
|
|
171
|
-
body: JSON.stringify({ content })
|
|
172
|
-
});
|
|
173
|
-
return parseResponse(response);
|
|
174
|
-
},
|
|
175
|
-
// ========================================================================
|
|
176
|
-
// SEMANTIC SEARCH
|
|
177
|
-
// ========================================================================
|
|
178
|
-
async semanticSearch(query, limit = 10) {
|
|
179
|
-
const url = `${apiUrl}/search?q=${encodeURIComponent(query)}&limit=${limit}&type=semantic`;
|
|
180
|
-
const response = await fetchWithRetry(url, { method: 'GET' });
|
|
181
|
-
const body = await parseResponse(response);
|
|
182
|
-
return body.results.map(r => ({
|
|
183
|
-
noteId: r.id,
|
|
184
|
-
title: r.title,
|
|
185
|
-
content: r.content,
|
|
186
|
-
score: r.score,
|
|
187
|
-
createdAt: r.createdAt,
|
|
188
|
-
updatedAt: r.updatedAt
|
|
189
|
-
}));
|
|
190
|
-
},
|
|
191
|
-
// ========================================================================
|
|
192
|
-
// LEXICON MANAGEMENT (user-scoped PAT only)
|
|
193
|
-
// ========================================================================
|
|
194
|
-
async createLexicon(name, description) {
|
|
195
|
-
try {
|
|
196
|
-
const response = await fetchWithRetry(`${apiUrl}/lexicons`, {
|
|
197
|
-
method: 'POST',
|
|
198
|
-
body: JSON.stringify({ name, description })
|
|
199
|
-
});
|
|
200
|
-
const body = await response.json();
|
|
201
|
-
if (!response.ok) {
|
|
202
|
-
return { success: false, error: body.error || 'Failed to create lexicon' };
|
|
203
|
-
}
|
|
204
|
-
logger.debug('Lexicon created', { lexiconId: body.id });
|
|
205
|
-
return { success: true, lexiconId: body.id };
|
|
206
|
-
}
|
|
207
|
-
catch (error) {
|
|
208
|
-
return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
|
|
209
|
-
}
|
|
210
|
-
},
|
|
211
|
-
async listLexicons() {
|
|
212
|
-
const response = await fetchWithRetry(`${apiUrl}/lexicons`, { method: 'GET' });
|
|
213
|
-
const body = await parseResponse(response);
|
|
214
|
-
return body;
|
|
215
|
-
},
|
|
216
|
-
async getCurrentLexiconInfo() {
|
|
217
|
-
const response = await fetchWithRetry(`${apiUrl}/lexicons/current`, { method: 'GET' });
|
|
218
|
-
return parseResponse(response);
|
|
219
|
-
},
|
|
220
|
-
async createNoteInLexicon(lexiconId, content, title) {
|
|
221
|
-
try {
|
|
222
|
-
const response = await fetchWithRetry(`${apiUrl}/lexicons/${encodeURIComponent(lexiconId)}/notes`, {
|
|
223
|
-
method: 'POST',
|
|
224
|
-
body: JSON.stringify({ content, title })
|
|
225
|
-
});
|
|
226
|
-
const body = await response.json();
|
|
227
|
-
if (!response.ok) {
|
|
228
|
-
return { success: false, error: body.error || 'Failed to create note' };
|
|
229
|
-
}
|
|
230
|
-
return { success: true, noteId: body.id };
|
|
231
|
-
}
|
|
232
|
-
catch (error) {
|
|
233
|
-
return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
|
|
234
|
-
}
|
|
235
|
-
},
|
|
236
|
-
// ========================================================================
|
|
237
|
-
// CONTEXT HELPERS
|
|
238
|
-
// ========================================================================
|
|
239
|
-
isUserScoped() {
|
|
240
|
-
return connectionState?.isUserScoped ?? false;
|
|
241
|
-
},
|
|
242
|
-
getCurrentLexiconId() {
|
|
243
|
-
return connectionState?.lexiconId;
|
|
244
|
-
}
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
// ============================================================================
|
|
248
|
-
// HELPERS
|
|
249
|
-
// ============================================================================
|
|
250
|
-
function sleep(ms) {
|
|
251
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
252
|
-
}
|
|
253
|
-
//# sourceMappingURL=lexic-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lexic-api.js","sourceRoot":"","sources":["../../src/client/lexic-api.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration Loading
|
|
3
|
-
*
|
|
4
|
-
* See .claude/specs/IMPLEMENTATION.md Section 2
|
|
5
|
-
*/
|
|
6
|
-
export interface Config {
|
|
7
|
-
apiUrl: string;
|
|
8
|
-
pat: string;
|
|
9
|
-
domainsPath: string;
|
|
10
|
-
domains: string[];
|
|
11
|
-
logLevel: 'debug' | 'info' | 'warn' | 'error';
|
|
12
|
-
}
|
|
13
|
-
export declare function loadConfig(): Config;
|
|
14
|
-
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC/C;AAED,wBAAgB,UAAU,IAAI,MAAM,CAuBnC"}
|
package/dist/config.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration Loading
|
|
3
|
-
*
|
|
4
|
-
* See .claude/specs/IMPLEMENTATION.md Section 2
|
|
5
|
-
*/
|
|
6
|
-
import path from 'path';
|
|
7
|
-
export function loadConfig() {
|
|
8
|
-
const apiUrl = process.env.LEXIC_API_URL;
|
|
9
|
-
const pat = process.env.LEXIC_PAT;
|
|
10
|
-
if (!apiUrl)
|
|
11
|
-
throw new Error('LEXIC_API_URL is required');
|
|
12
|
-
if (!pat)
|
|
13
|
-
throw new Error('LEXIC_PAT is required');
|
|
14
|
-
if (!pat.startsWith('pat_'))
|
|
15
|
-
throw new Error('LEXIC_PAT must start with pat_');
|
|
16
|
-
// Parse domains list
|
|
17
|
-
const domainsEnv = process.env.LEXIC_DOMAINS || 'development';
|
|
18
|
-
const domains = domainsEnv.split(',').map(d => d.trim()).filter(Boolean);
|
|
19
|
-
// Resolve domains path (default: ./domains relative to package root)
|
|
20
|
-
const domainsPath = process.env.LEXIC_DOMAINS_PATH ||
|
|
21
|
-
path.resolve(process.cwd(), 'domains');
|
|
22
|
-
return {
|
|
23
|
-
apiUrl,
|
|
24
|
-
pat,
|
|
25
|
-
domainsPath,
|
|
26
|
-
domains,
|
|
27
|
-
logLevel: process.env.LOG_LEVEL || 'info'
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAUxB,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAElC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC1D,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAE/E,qBAAqB;IACrB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,aAAa,CAAC;IAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzE,qEAAqE;IACrE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAChD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAEzC,OAAO;QACL,MAAM;QACN,GAAG;QACH,WAAW;QACX,OAAO;QACP,QAAQ,EAAG,OAAO,CAAC,GAAG,CAAC,SAAgC,IAAI,MAAM;KAClE,CAAC;AACJ,CAAC"}
|
package/dist/core/admin.d.ts
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lexic Admin Tools
|
|
3
|
-
*
|
|
4
|
-
* Manage lexicons (projects). Only available with user-scoped PATs.
|
|
5
|
-
*/
|
|
6
|
-
import type { LexicClient } from '../client/lexic-api.js';
|
|
7
|
-
export interface CreateProjectParams {
|
|
8
|
-
name: string;
|
|
9
|
-
description?: string;
|
|
10
|
-
domain?: string;
|
|
11
|
-
}
|
|
12
|
-
export interface CreateProjectResult {
|
|
13
|
-
success: boolean;
|
|
14
|
-
projectId: string;
|
|
15
|
-
name: string;
|
|
16
|
-
seededNotes?: number;
|
|
17
|
-
message: string;
|
|
18
|
-
}
|
|
19
|
-
export interface ProjectInfo {
|
|
20
|
-
id: string;
|
|
21
|
-
name: string;
|
|
22
|
-
description?: string;
|
|
23
|
-
noteCount: number;
|
|
24
|
-
createdAt: string;
|
|
25
|
-
updatedAt: string;
|
|
26
|
-
}
|
|
27
|
-
export interface ListProjectsResult {
|
|
28
|
-
projects: ProjectInfo[];
|
|
29
|
-
total: number;
|
|
30
|
-
}
|
|
31
|
-
export declare function createCreateProjectTool(client: LexicClient, seeders: Map<string, (client: LexicClient, lexiconId: string) => Promise<number>>): {
|
|
32
|
-
name: string;
|
|
33
|
-
description: string;
|
|
34
|
-
inputSchema: {
|
|
35
|
-
type: "object";
|
|
36
|
-
properties: {
|
|
37
|
-
name: {
|
|
38
|
-
type: string;
|
|
39
|
-
description: string;
|
|
40
|
-
};
|
|
41
|
-
description: {
|
|
42
|
-
type: string;
|
|
43
|
-
description: string;
|
|
44
|
-
};
|
|
45
|
-
domain: {
|
|
46
|
-
type: string;
|
|
47
|
-
description: string;
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
required: string[];
|
|
51
|
-
};
|
|
52
|
-
handler: (params: CreateProjectParams) => Promise<CreateProjectResult>;
|
|
53
|
-
};
|
|
54
|
-
export declare function createListProjectsTool(client: LexicClient): {
|
|
55
|
-
name: string;
|
|
56
|
-
description: string;
|
|
57
|
-
inputSchema: {
|
|
58
|
-
type: "object";
|
|
59
|
-
properties: {};
|
|
60
|
-
required: never[];
|
|
61
|
-
};
|
|
62
|
-
handler: () => Promise<ListProjectsResult>;
|
|
63
|
-
};
|
|
64
|
-
export declare function createGetProjectInfoTool(client: LexicClient): {
|
|
65
|
-
name: string;
|
|
66
|
-
description: string;
|
|
67
|
-
inputSchema: {
|
|
68
|
-
type: "object";
|
|
69
|
-
properties: {};
|
|
70
|
-
required: never[];
|
|
71
|
-
};
|
|
72
|
-
handler: () => Promise<ProjectInfo>;
|
|
73
|
-
};
|
|
74
|
-
//# sourceMappingURL=admin.d.ts.map
|
package/dist/core/admin.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/core/admin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAM1D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;sBAuBvD,mBAAmB,KAAG,OAAO,CAAC,mBAAmB,CAAC;EA6B7E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW;;;;;;;;mBASnC,OAAO,CAAC,kBAAkB,CAAC;EAgBjD;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW;;;;;;;;mBASrC,OAAO,CAAC,WAAW,CAAC;EAa1C"}
|