@hubium/hubium-mcp 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/README.md +15 -0
- package/dist/cli.d.ts +22 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +270 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.test.d.ts +2 -0
- package/dist/cli.test.d.ts.map +1 -0
- package/dist/cli.test.js +191 -0
- package/dist/cli.test.js.map +1 -0
- package/dist/context/contextManager.d.ts +24 -0
- package/dist/context/contextManager.d.ts.map +1 -0
- package/dist/context/contextManager.js +129 -0
- package/dist/context/contextManager.js.map +1 -0
- package/dist/context/contextManager.test.d.ts +2 -0
- package/dist/context/contextManager.test.d.ts.map +1 -0
- package/dist/context/contextManager.test.js +101 -0
- package/dist/context/contextManager.test.js.map +1 -0
- package/dist/context/contextStore.d.ts +11 -0
- package/dist/context/contextStore.d.ts.map +1 -0
- package/dist/context/contextStore.js +116 -0
- package/dist/context/contextStore.js.map +1 -0
- package/dist/context/index.d.ts +5 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +4 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/paths.d.ts +3 -0
- package/dist/context/paths.d.ts.map +1 -0
- package/dist/context/paths.js +23 -0
- package/dist/context/paths.js.map +1 -0
- package/dist/context/types.d.ts +9 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +2 -0
- package/dist/context/types.js.map +1 -0
- package/dist/doctor/doctor.d.ts +84 -0
- package/dist/doctor/doctor.d.ts.map +1 -0
- package/dist/doctor/doctor.js +338 -0
- package/dist/doctor/doctor.js.map +1 -0
- package/dist/doctor/doctor.test.d.ts +5 -0
- package/dist/doctor/doctor.test.d.ts.map +1 -0
- package/dist/doctor/doctor.test.js +264 -0
- package/dist/doctor/doctor.test.js.map +1 -0
- package/dist/install/cursorInstaller.d.ts +15 -0
- package/dist/install/cursorInstaller.d.ts.map +1 -0
- package/dist/install/cursorInstaller.js +110 -0
- package/dist/install/cursorInstaller.js.map +1 -0
- package/dist/install/cursorInstaller.test.d.ts +2 -0
- package/dist/install/cursorInstaller.test.d.ts.map +1 -0
- package/dist/install/cursorInstaller.test.js +120 -0
- package/dist/install/cursorInstaller.test.js.map +1 -0
- package/dist/server.d.ts +72 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +809 -0
- package/dist/server.js.map +1 -0
- package/dist/server.test.d.ts +2 -0
- package/dist/server.test.d.ts.map +1 -0
- package/dist/server.test.js +9 -0
- package/dist/server.test.js.map +1 -0
- package/dist/server.tools.test.d.ts +2 -0
- package/dist/server.tools.test.d.ts.map +1 -0
- package/dist/server.tools.test.js +991 -0
- package/dist/server.tools.test.js.map +1 -0
- package/dist/token/index.d.ts +5 -0
- package/dist/token/index.d.ts.map +1 -0
- package/dist/token/index.js +4 -0
- package/dist/token/index.js.map +1 -0
- package/dist/token/keychain.d.ts +4 -0
- package/dist/token/keychain.d.ts.map +1 -0
- package/dist/token/keychain.js +11 -0
- package/dist/token/keychain.js.map +1 -0
- package/dist/token/redactor.d.ts +8 -0
- package/dist/token/redactor.d.ts.map +1 -0
- package/dist/token/redactor.js +88 -0
- package/dist/token/redactor.js.map +1 -0
- package/dist/token/tokenStore.d.ts +17 -0
- package/dist/token/tokenStore.d.ts.map +1 -0
- package/dist/token/tokenStore.js +98 -0
- package/dist/token/tokenStore.js.map +1 -0
- package/dist/token/tokenStore.test.d.ts +2 -0
- package/dist/token/tokenStore.test.d.ts.map +1 -0
- package/dist/token/tokenStore.test.js +89 -0
- package/dist/token/tokenStore.test.js.map +1 -0
- package/dist/trustBanner.d.ts +7 -0
- package/dist/trustBanner.d.ts.map +1 -0
- package/dist/trustBanner.js +14 -0
- package/dist/trustBanner.js.map +1 -0
- package/dist/trustBanner.test.d.ts +2 -0
- package/dist/trustBanner.test.d.ts.map +1 -0
- package/dist/trustBanner.test.js +12 -0
- package/dist/trustBanner.test.js.map +1 -0
- package/package.json +27 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type CursorInstallResult = {
|
|
2
|
+
ok: true;
|
|
3
|
+
path: string;
|
|
4
|
+
backupPath: string;
|
|
5
|
+
changed: boolean;
|
|
6
|
+
} | {
|
|
7
|
+
ok: false;
|
|
8
|
+
reason: 'not_found' | 'invalid_json';
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function getCursorConfigPaths(): string[];
|
|
12
|
+
export declare function buildCursorConfigSnippet(): Record<string, unknown>;
|
|
13
|
+
export declare function getCursorConfigSnippetJson(): string;
|
|
14
|
+
export declare function installCursorConfig(): Promise<CursorInstallResult>;
|
|
15
|
+
//# sourceMappingURL=cursorInstaller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursorInstaller.d.ts","sourceRoot":"","sources":["../../src/install/cursorInstaller.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAChE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAgB/C;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYlE;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAgCxE"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
export function getCursorConfigPaths() {
|
|
5
|
+
const override = process.env.HUBIUM_CURSOR_CONFIG_DIR;
|
|
6
|
+
if (override && override.trim().length > 0) {
|
|
7
|
+
return [path.join(override, 'settings.json')];
|
|
8
|
+
}
|
|
9
|
+
const home = os.homedir();
|
|
10
|
+
const appData = process.env.APPDATA || path.join(home, 'AppData', 'Roaming');
|
|
11
|
+
const candidates = [
|
|
12
|
+
path.join(home, 'Library', 'Application Support', 'Cursor', 'User', 'settings.json'),
|
|
13
|
+
path.join(home, 'Library', 'Application Support', 'Cursor', 'settings.json'),
|
|
14
|
+
path.join(appData, 'Cursor', 'User', 'settings.json'),
|
|
15
|
+
path.join(appData, 'Cursor', 'settings.json'),
|
|
16
|
+
path.join(home, '.config', 'Cursor', 'User', 'settings.json'),
|
|
17
|
+
path.join(home, '.config', 'Cursor', 'settings.json'),
|
|
18
|
+
];
|
|
19
|
+
return candidates;
|
|
20
|
+
}
|
|
21
|
+
export function buildCursorConfigSnippet() {
|
|
22
|
+
return {
|
|
23
|
+
mcpServers: {
|
|
24
|
+
hubium: {
|
|
25
|
+
command: 'npx',
|
|
26
|
+
args: ['-y', 'hubium-mcp@^1', 'serve'],
|
|
27
|
+
env: {
|
|
28
|
+
HUBIUM_BASE_URL: 'https://hubium.dev',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function getCursorConfigSnippetJson() {
|
|
35
|
+
return JSON.stringify(buildCursorConfigSnippet(), null, 2);
|
|
36
|
+
}
|
|
37
|
+
export async function installCursorConfig() {
|
|
38
|
+
const pathFound = await findExistingConfigPath();
|
|
39
|
+
if (!pathFound) {
|
|
40
|
+
return {
|
|
41
|
+
ok: false,
|
|
42
|
+
reason: 'not_found',
|
|
43
|
+
message: 'Cursor settings.json not found. Add the snippet manually.',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const raw = await fs.readFile(pathFound, 'utf8');
|
|
47
|
+
let parsed;
|
|
48
|
+
try {
|
|
49
|
+
parsed = JSON.parse(raw);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return {
|
|
53
|
+
ok: false,
|
|
54
|
+
reason: 'invalid_json',
|
|
55
|
+
message: 'Cursor settings.json is not valid JSON. Fix it before installing.',
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const updated = applyCursorConfig(parsed);
|
|
59
|
+
const changed = JSON.stringify(parsed) !== JSON.stringify(updated);
|
|
60
|
+
const backupPath = `${pathFound}.bak`;
|
|
61
|
+
if (!(await exists(backupPath))) {
|
|
62
|
+
await fs.writeFile(backupPath, raw, 'utf8');
|
|
63
|
+
}
|
|
64
|
+
if (changed) {
|
|
65
|
+
await fs.writeFile(pathFound, JSON.stringify(updated, null, 2) + '\n', 'utf8');
|
|
66
|
+
}
|
|
67
|
+
return { ok: true, path: pathFound, backupPath, changed };
|
|
68
|
+
}
|
|
69
|
+
function applyCursorConfig(input) {
|
|
70
|
+
const output = { ...input };
|
|
71
|
+
const mcpServers = (output.mcpServers && typeof output.mcpServers === 'object')
|
|
72
|
+
? { ...output.mcpServers }
|
|
73
|
+
: {};
|
|
74
|
+
const existing = (mcpServers.hubium && typeof mcpServers.hubium === 'object')
|
|
75
|
+
? mcpServers.hubium
|
|
76
|
+
: {};
|
|
77
|
+
const env = (existing.env && typeof existing.env === 'object')
|
|
78
|
+
? { ...existing.env }
|
|
79
|
+
: {};
|
|
80
|
+
if (!('HUBIUM_BASE_URL' in env)) {
|
|
81
|
+
env.HUBIUM_BASE_URL = 'https://hubium.dev';
|
|
82
|
+
}
|
|
83
|
+
mcpServers.hubium = {
|
|
84
|
+
...existing,
|
|
85
|
+
command: 'npx',
|
|
86
|
+
args: ['-y', 'hubium-mcp@^1', 'serve'],
|
|
87
|
+
env,
|
|
88
|
+
};
|
|
89
|
+
output.mcpServers = mcpServers;
|
|
90
|
+
return output;
|
|
91
|
+
}
|
|
92
|
+
async function findExistingConfigPath() {
|
|
93
|
+
const candidates = getCursorConfigPaths();
|
|
94
|
+
for (const candidate of candidates) {
|
|
95
|
+
if (await exists(candidate)) {
|
|
96
|
+
return candidate;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
async function exists(filePath) {
|
|
102
|
+
try {
|
|
103
|
+
await fs.access(filePath);
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=cursorInstaller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursorInstaller.js","sourceRoot":"","sources":["../../src/install/cursorInstaller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursorInstaller.test.d.ts","sourceRoot":"","sources":["../../src/install/cursorInstaller.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
5
|
+
import { buildCursorConfigSnippet, getCursorConfigSnippetJson, getCursorConfigPaths, installCursorConfig, } from './cursorInstaller.js';
|
|
6
|
+
const originalEnv = { ...process.env };
|
|
7
|
+
let tempDir = '';
|
|
8
|
+
beforeEach(async () => {
|
|
9
|
+
tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'hubium-mcp-install-'));
|
|
10
|
+
process.env = {
|
|
11
|
+
...originalEnv,
|
|
12
|
+
HOME: tempDir,
|
|
13
|
+
APPDATA: path.join(tempDir, 'AppData', 'Roaming'),
|
|
14
|
+
HUBIUM_CURSOR_CONFIG_DIR: tempDir,
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
afterEach(async () => {
|
|
18
|
+
process.env = { ...originalEnv };
|
|
19
|
+
if (tempDir) {
|
|
20
|
+
await fs.rm(tempDir, { recursive: true, force: true });
|
|
21
|
+
}
|
|
22
|
+
vi.restoreAllMocks();
|
|
23
|
+
});
|
|
24
|
+
function cursorSettingsPath() {
|
|
25
|
+
return path.join(tempDir, 'settings.json');
|
|
26
|
+
}
|
|
27
|
+
describe('cursorInstaller', () => {
|
|
28
|
+
it('print-config output is valid JSON and includes major pin', () => {
|
|
29
|
+
const json = getCursorConfigSnippetJson();
|
|
30
|
+
const parsed = JSON.parse(json);
|
|
31
|
+
const snippet = buildCursorConfigSnippet();
|
|
32
|
+
expect(parsed).toEqual(snippet);
|
|
33
|
+
expect(json).toContain('hubium-mcp@^1');
|
|
34
|
+
expect(json).toContain('"serve"');
|
|
35
|
+
});
|
|
36
|
+
it('print-config output does not contain raw tokens', () => {
|
|
37
|
+
const json = getCursorConfigSnippetJson();
|
|
38
|
+
expect(json).not.toMatch(/Bearer\s+[A-Za-z0-9_.-]+/);
|
|
39
|
+
expect(json).not.toMatch(/hb_[A-Za-z0-9_-]+/);
|
|
40
|
+
expect(json).not.toContain('HUBIUM_TOKEN');
|
|
41
|
+
});
|
|
42
|
+
it('install writes config and creates backup', async () => {
|
|
43
|
+
const settingsPath = cursorSettingsPath();
|
|
44
|
+
await fs.mkdir(path.dirname(settingsPath), { recursive: true });
|
|
45
|
+
await fs.writeFile(settingsPath, JSON.stringify({ foo: 'bar' }), 'utf8');
|
|
46
|
+
const result = await installCursorConfig();
|
|
47
|
+
expect(result.ok).toBe(true);
|
|
48
|
+
if (result.ok) {
|
|
49
|
+
const updated = JSON.parse(await fs.readFile(settingsPath, 'utf8'));
|
|
50
|
+
expect(updated.mcpServers).toBeDefined();
|
|
51
|
+
expect(await fs.readFile(`${settingsPath}.bak`, 'utf8')).toContain('"foo":"bar"');
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
it('install is idempotent and does not create multiple backups', async () => {
|
|
55
|
+
const settingsPath = cursorSettingsPath();
|
|
56
|
+
await fs.mkdir(path.dirname(settingsPath), { recursive: true });
|
|
57
|
+
await fs.writeFile(settingsPath, JSON.stringify({ mcpServers: {} }), 'utf8');
|
|
58
|
+
const first = await installCursorConfig();
|
|
59
|
+
const firstContents = await fs.readFile(settingsPath, 'utf8');
|
|
60
|
+
const second = await installCursorConfig();
|
|
61
|
+
const secondContents = await fs.readFile(settingsPath, 'utf8');
|
|
62
|
+
expect(first.ok).toBe(true);
|
|
63
|
+
expect(second.ok).toBe(true);
|
|
64
|
+
const backup = await fs.readFile(`${settingsPath}.bak`, 'utf8');
|
|
65
|
+
expect(backup).toContain('mcpServers');
|
|
66
|
+
expect(secondContents).toBe(firstContents);
|
|
67
|
+
});
|
|
68
|
+
it('install never writes token from env', async () => {
|
|
69
|
+
process.env.HUBIUM_TOKEN = 'SECRET';
|
|
70
|
+
const settingsPath = cursorSettingsPath();
|
|
71
|
+
await fs.mkdir(path.dirname(settingsPath), { recursive: true });
|
|
72
|
+
await fs.writeFile(settingsPath, JSON.stringify({}), 'utf8');
|
|
73
|
+
const result = await installCursorConfig();
|
|
74
|
+
expect(result.ok).toBe(true);
|
|
75
|
+
const updated = await fs.readFile(settingsPath, 'utf8');
|
|
76
|
+
expect(updated).not.toContain('SECRET');
|
|
77
|
+
expect(updated).not.toContain('HUBIUM_TOKEN');
|
|
78
|
+
});
|
|
79
|
+
it('install preserves existing servers and settings', async () => {
|
|
80
|
+
const settingsPath = cursorSettingsPath();
|
|
81
|
+
await fs.mkdir(path.dirname(settingsPath), { recursive: true });
|
|
82
|
+
await fs.writeFile(settingsPath, JSON.stringify({
|
|
83
|
+
mcpServers: { other: { command: 'node' } },
|
|
84
|
+
editor: { fontSize: 12 },
|
|
85
|
+
}), 'utf8');
|
|
86
|
+
const result = await installCursorConfig();
|
|
87
|
+
expect(result.ok).toBe(true);
|
|
88
|
+
const updated = JSON.parse(await fs.readFile(settingsPath, 'utf8'));
|
|
89
|
+
expect(updated.mcpServers.other).toBeDefined();
|
|
90
|
+
expect(updated.editor).toEqual({ fontSize: 12 });
|
|
91
|
+
});
|
|
92
|
+
it('uses most likely Cursor path', () => {
|
|
93
|
+
const original = process.env.HUBIUM_CURSOR_CONFIG_DIR;
|
|
94
|
+
delete process.env.HUBIUM_CURSOR_CONFIG_DIR;
|
|
95
|
+
const paths = getCursorConfigPaths();
|
|
96
|
+
process.env.HUBIUM_CURSOR_CONFIG_DIR = original;
|
|
97
|
+
expect(paths[0]).toContain(path.join('Cursor', 'User', 'settings.json'));
|
|
98
|
+
});
|
|
99
|
+
it('returns not_found when config missing', async () => {
|
|
100
|
+
const result = await installCursorConfig();
|
|
101
|
+
expect(result.ok).toBe(false);
|
|
102
|
+
if (!result.ok) {
|
|
103
|
+
expect(result.reason).toBe('not_found');
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
it('returns invalid_json and does not write backup', async () => {
|
|
107
|
+
const settingsPath = cursorSettingsPath();
|
|
108
|
+
await fs.mkdir(path.dirname(settingsPath), { recursive: true });
|
|
109
|
+
await fs.writeFile(settingsPath, '{not json', 'utf8');
|
|
110
|
+
const result = await installCursorConfig();
|
|
111
|
+
expect(result.ok).toBe(false);
|
|
112
|
+
if (!result.ok) {
|
|
113
|
+
expect(result.reason).toBe('invalid_json');
|
|
114
|
+
}
|
|
115
|
+
await expect(fs.readFile(`${settingsPath}.bak`, 'utf8')).rejects.toThrow();
|
|
116
|
+
const raw = await fs.readFile(settingsPath, 'utf8');
|
|
117
|
+
expect(raw).toBe('{not json');
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=cursorInstaller.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursorInstaller.test.js","sourceRoot":"","sources":["../../src/install/cursorInstaller.test.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import { type CallToolRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { ContextManager } from './context/contextManager.js';
|
|
4
|
+
import { TokenStore } from './token/tokenStore.js';
|
|
5
|
+
import type { HubiumCreateCaseRequest, HubiumCreateCaseResponse, HubiumFeedbackRequest, HubiumFeedbackResponse, HubiumGetCaseResponse, HubiumSearchResponse, HubiumWhoamiResponse } from '@hubium/client';
|
|
6
|
+
export type RateLimitResult = {
|
|
7
|
+
ok: true;
|
|
8
|
+
} | {
|
|
9
|
+
ok: false;
|
|
10
|
+
retryAfterMs: number;
|
|
11
|
+
};
|
|
12
|
+
export type RateLimiter = {
|
|
13
|
+
allow: () => RateLimitResult;
|
|
14
|
+
};
|
|
15
|
+
export type ToolDeps = {
|
|
16
|
+
contextManager: ContextManager;
|
|
17
|
+
tokenStore: Pick<TokenStore, 'getToken' | 'getFollowupToken' | 'setFollowupToken' | 'clearFollowupToken'>;
|
|
18
|
+
fetchImpl?: typeof fetch;
|
|
19
|
+
hubiumClientFactory: (input: {
|
|
20
|
+
baseUrl: string;
|
|
21
|
+
token?: string;
|
|
22
|
+
}) => {
|
|
23
|
+
whoami: () => Promise<HubiumWhoamiResponse>;
|
|
24
|
+
search: (params: {
|
|
25
|
+
query?: string;
|
|
26
|
+
q?: string;
|
|
27
|
+
limit?: number;
|
|
28
|
+
offset?: number;
|
|
29
|
+
workspace_id?: string;
|
|
30
|
+
workspace_ids?: string[];
|
|
31
|
+
}, options?: {
|
|
32
|
+
followupToken?: string;
|
|
33
|
+
}) => Promise<HubiumSearchResponse>;
|
|
34
|
+
getCase: (caseId: string, options?: {
|
|
35
|
+
workspace_id?: string;
|
|
36
|
+
workspace_ids?: string[];
|
|
37
|
+
}) => Promise<HubiumGetCaseResponse>;
|
|
38
|
+
createCase: (payload: HubiumCreateCaseRequest, options?: {
|
|
39
|
+
idempotencyKey?: string;
|
|
40
|
+
}) => Promise<HubiumCreateCaseResponse>;
|
|
41
|
+
addFeedback: (caseId: string, payload: HubiumFeedbackRequest, options?: {
|
|
42
|
+
idempotencyKey?: string;
|
|
43
|
+
}) => Promise<HubiumFeedbackResponse>;
|
|
44
|
+
};
|
|
45
|
+
safeMode: boolean;
|
|
46
|
+
rateLimiter: RateLimiter;
|
|
47
|
+
};
|
|
48
|
+
export declare function createServer(deps?: Partial<ToolDeps>): Server;
|
|
49
|
+
export declare function runServerStdio(options?: {
|
|
50
|
+
safeMode?: boolean;
|
|
51
|
+
}): Promise<void>;
|
|
52
|
+
export declare function registerTools(server: Server, deps: ToolDeps): void;
|
|
53
|
+
export declare function buildToolHandlers(deps: ToolDeps): {
|
|
54
|
+
listTools: () => Promise<{
|
|
55
|
+
tools: Array<Record<string, unknown>>;
|
|
56
|
+
}>;
|
|
57
|
+
callTool: (request: CallToolRequest) => Promise<{
|
|
58
|
+
content: Array<{
|
|
59
|
+
type: 'text';
|
|
60
|
+
text: string;
|
|
61
|
+
}>;
|
|
62
|
+
}>;
|
|
63
|
+
};
|
|
64
|
+
export declare function createRateLimiterFromEnv(): RateLimiter;
|
|
65
|
+
export declare class LocalRateLimiter implements RateLimiter {
|
|
66
|
+
private readonly limit;
|
|
67
|
+
private readonly windowMs;
|
|
68
|
+
private readonly timestamps;
|
|
69
|
+
constructor(limit: number, windowMs: number);
|
|
70
|
+
allow(): RateLimitResult;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|