agent-discover 1.0.19 → 1.0.22
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/agent-desk-plugin.json +1 -1
- package/dist/index.js +18 -110
- package/dist/index.js.map +1 -1
- package/dist/storage/database.d.ts +2 -9
- package/dist/storage/database.d.ts.map +1 -1
- package/dist/storage/database.js +103 -95
- package/dist/storage/database.js.map +1 -1
- package/package.json +2 -2
package/agent-desk-plugin.json
CHANGED
package/dist/index.js
CHANGED
|
@@ -2,23 +2,23 @@
|
|
|
2
2
|
// =============================================================================
|
|
3
3
|
// agent-discover — MCP server entry point (stdio transport)
|
|
4
4
|
//
|
|
5
|
-
// Communicates via JSON-RPC over stdin/stdout.
|
|
6
|
-
//
|
|
5
|
+
// Communicates via JSON-RPC over stdin/stdout via agent-common's startMcpServer.
|
|
6
|
+
// Dynamic tool list (regenerated per request so proxied child-server tools
|
|
7
|
+
// stay current), auto-starts dashboard on initialize, and emits
|
|
8
|
+
// `notifications/tools/list_changed` after tool calls that alter active
|
|
9
|
+
// servers (activate/deactivate/uninstall).
|
|
7
10
|
// =============================================================================
|
|
8
|
-
import {
|
|
11
|
+
import { startMcpServer } from 'agent-common';
|
|
9
12
|
import { createContext } from './context.js';
|
|
10
13
|
import { readPackageMeta } from './package-meta.js';
|
|
11
14
|
import { createToolHandler, getToolList } from './transport/mcp.js';
|
|
12
15
|
import { startDashboard } from './server.js';
|
|
13
|
-
import { RegistryError } from './types.js';
|
|
14
16
|
const SERVER_INFO = readPackageMeta();
|
|
15
|
-
const CAPABILITIES = { tools: { listChanged: true } };
|
|
16
17
|
const DASHBOARD_PORT = parseInt(process.env.AGENT_DISCOVER_PORT ?? '3424', 10);
|
|
17
18
|
const appContext = createContext();
|
|
18
19
|
const handleTool = createToolHandler(appContext);
|
|
19
20
|
let dashboard = null;
|
|
20
21
|
let dashboardAttempted = false;
|
|
21
|
-
let toolsChanged = false;
|
|
22
22
|
function tryStartDashboard() {
|
|
23
23
|
if (dashboard || dashboardAttempted)
|
|
24
24
|
return;
|
|
@@ -31,111 +31,19 @@ function tryStartDashboard() {
|
|
|
31
31
|
process.stderr.write(`[agent-discover] Dashboard port ${DASHBOARD_PORT} in use — another instance is serving.\n`);
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
async function handleRequest(request) {
|
|
47
|
-
const { method, params, id } = request;
|
|
48
|
-
switch (method) {
|
|
49
|
-
case 'initialize':
|
|
50
|
-
tryStartDashboard();
|
|
51
|
-
return {
|
|
52
|
-
jsonrpc: '2.0',
|
|
53
|
-
id,
|
|
54
|
-
result: {
|
|
55
|
-
protocolVersion: '2024-11-05',
|
|
56
|
-
serverInfo: SERVER_INFO,
|
|
57
|
-
capabilities: CAPABILITIES,
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
case 'notifications/initialized':
|
|
61
|
-
return null;
|
|
62
|
-
case 'tools/list':
|
|
63
|
-
return { jsonrpc: '2.0', id, result: { tools: getToolList(appContext) } };
|
|
64
|
-
case 'tools/call': {
|
|
65
|
-
const toolName = String(params?.name ?? '');
|
|
66
|
-
const rawArgs = params?.arguments;
|
|
67
|
-
const toolArgs = typeof rawArgs === 'object' && rawArgs !== null && !Array.isArray(rawArgs)
|
|
68
|
-
? rawArgs
|
|
69
|
-
: {};
|
|
70
|
-
try {
|
|
71
|
-
const result = await handleTool(toolName, toolArgs);
|
|
72
|
-
if (toolName === 'registry' &&
|
|
73
|
-
(toolArgs.action === 'activate' ||
|
|
74
|
-
toolArgs.action === 'deactivate' ||
|
|
75
|
-
toolArgs.action === 'uninstall')) {
|
|
76
|
-
toolsChanged = true;
|
|
77
|
-
}
|
|
78
|
-
const response = {
|
|
79
|
-
jsonrpc: '2.0',
|
|
80
|
-
id,
|
|
81
|
-
result: {
|
|
82
|
-
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
return response;
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
89
|
-
const code = err instanceof RegistryError ? err.code : 'UNKNOWN_ERROR';
|
|
90
|
-
return {
|
|
91
|
-
jsonrpc: '2.0',
|
|
92
|
-
id,
|
|
93
|
-
result: {
|
|
94
|
-
content: [{ type: 'text', text: `Error [${code}]: ${message}` }],
|
|
95
|
-
isError: true,
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
}
|
|
34
|
+
startMcpServer({
|
|
35
|
+
serverInfo: SERVER_INFO,
|
|
36
|
+
tools: () => getToolList(appContext),
|
|
37
|
+
handleTool,
|
|
38
|
+
onInitialize: tryStartDashboard,
|
|
39
|
+
capabilities: { tools: { listChanged: true } },
|
|
40
|
+
onToolCalled: (name, args, notify) => {
|
|
41
|
+
if (name === 'registry' &&
|
|
42
|
+
(args.action === 'activate' || args.action === 'deactivate' || args.action === 'uninstall')) {
|
|
43
|
+
notify('notifications/tools/list_changed');
|
|
99
44
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
default:
|
|
103
|
-
return {
|
|
104
|
-
jsonrpc: '2.0',
|
|
105
|
-
id,
|
|
106
|
-
error: { code: -32601, message: `Method not found: ${method}` },
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
const stdioReadline = createInterface({ input: process.stdin, terminal: false });
|
|
111
|
-
stdioReadline.on('line', (line) => {
|
|
112
|
-
if (!line.trim())
|
|
113
|
-
return;
|
|
114
|
-
try {
|
|
115
|
-
const request = JSON.parse(line);
|
|
116
|
-
handleRequest(request)
|
|
117
|
-
.then((response) => {
|
|
118
|
-
if (response) {
|
|
119
|
-
writeJsonRpcResponse(response);
|
|
120
|
-
sendToolsChangedNotification();
|
|
121
|
-
}
|
|
122
|
-
})
|
|
123
|
-
.catch((err) => {
|
|
124
|
-
process.stderr.write('[agent-discover] Handler error: ' +
|
|
125
|
-
(err instanceof Error ? err.message : String(err)) +
|
|
126
|
-
'\n');
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
catch (err) {
|
|
130
|
-
process.stderr.write('[agent-discover] JSON-RPC parse error: ' +
|
|
131
|
-
(err instanceof Error ? err.message : String(err)) +
|
|
132
|
-
'\n');
|
|
133
|
-
writeJsonRpcResponse({
|
|
134
|
-
jsonrpc: '2.0',
|
|
135
|
-
id: null,
|
|
136
|
-
error: { code: -32700, message: 'Parse error' },
|
|
137
|
-
});
|
|
138
|
-
}
|
|
45
|
+
},
|
|
46
|
+
logLabel: 'agent-discover',
|
|
139
47
|
});
|
|
140
48
|
function cleanup() {
|
|
141
49
|
if (dashboard) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,gFAAgF;AAChF,4DAA4D;AAC5D,EAAE;AACF
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,gFAAgF;AAChF,4DAA4D;AAC5D,EAAE;AACF,iFAAiF;AACjF,2EAA2E;AAC3E,gEAAgE;AAChE,wEAAwE;AACxE,2CAA2C;AAC3C,gFAAgF;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAEnE,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;AACtC,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAE/E,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;AACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAEjD,IAAI,SAAS,GAA2B,IAAI,CAAC;AAC7C,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAE/B,SAAS,iBAAiB;IACxB,IAAI,SAAS,IAAI,kBAAkB;QAAE,OAAO;IAC5C,kBAAkB,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC;SACvC,IAAI,CAAC,CAAC,eAAe,EAAE,EAAE;QACxB,SAAS,GAAG,eAAe,CAAC;IAC9B,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,cAAc,0CAA0C,CAC5F,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,cAAc,CAAC;IACb,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;IACpC,UAAU;IACV,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;IAC9C,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QACnC,IACE,IAAI,KAAK,UAAU;YACnB,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,EAC3F,CAAC;YACD,MAAM,CAAC,kCAAkC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,QAAQ,EAAE,gBAAgB;CAC3B,CAAC,CAAC;AAEH,SAAS,OAAO;IACd,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
|
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type Db } from 'agent-common';
|
|
2
|
+
export type { Db } from 'agent-common';
|
|
2
3
|
export interface DbOptions {
|
|
3
4
|
/** Use ':memory:' for tests, or a file path. Defaults to ~/.claude/agent-discover.db */
|
|
4
5
|
path?: string;
|
|
5
6
|
/** Enable verbose logging to stderr */
|
|
6
7
|
verbose?: boolean;
|
|
7
8
|
}
|
|
8
|
-
export interface Db {
|
|
9
|
-
readonly raw: Database.Database;
|
|
10
|
-
run(sql: string, params?: unknown[]): Database.RunResult;
|
|
11
|
-
queryAll<T>(sql: string, params?: unknown[]): T[];
|
|
12
|
-
queryOne<T>(sql: string, params?: unknown[]): T | null;
|
|
13
|
-
transaction<T>(fn: () => T): T;
|
|
14
|
-
close(): void;
|
|
15
|
-
}
|
|
16
9
|
export declare function createDb(options?: DbOptions): Db;
|
|
17
10
|
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAeA,OAAO,EAA2B,KAAK,EAAE,EAAkB,MAAM,cAAc,CAAC;AAEhF,YAAY,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,WAAW,SAAS;IACxB,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,QAAQ,CAAC,OAAO,GAAE,SAAc,GAAG,EAAE,CAIpD"}
|
package/dist/storage/database.js
CHANGED
|
@@ -1,51 +1,22 @@
|
|
|
1
1
|
// =============================================================================
|
|
2
2
|
// agent-discover — Storage layer
|
|
3
3
|
//
|
|
4
|
-
// Thin wrapper around
|
|
5
|
-
//
|
|
4
|
+
// Thin wrapper around agent-common's createDb. Pre-migration shim seeds the
|
|
5
|
+
// `_meta.schema_version` row from the legacy `pragma user_version` value so
|
|
6
|
+
// existing installations migrate cleanly to agent-common's _meta-table runner
|
|
7
|
+
// without re-running migrations against tables that already have the columns.
|
|
8
|
+
// All ALTER TABLE statements in v2/v3 use PRAGMA table_info guards to stay
|
|
9
|
+
// idempotent on partially-migrated DBs.
|
|
6
10
|
// =============================================================================
|
|
7
11
|
import Database from 'better-sqlite3';
|
|
8
12
|
import { homedir } from 'os';
|
|
9
13
|
import { join } from 'path';
|
|
10
14
|
import { mkdirSync } from 'fs';
|
|
11
|
-
|
|
15
|
+
import { createDb as createKitDb } from 'agent-common';
|
|
12
16
|
export function createDb(options = {}) {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
});
|
|
17
|
-
raw.pragma('journal_mode = WAL');
|
|
18
|
-
raw.pragma('busy_timeout = 5000');
|
|
19
|
-
raw.pragma('synchronous = NORMAL');
|
|
20
|
-
raw.pragma('foreign_keys = ON');
|
|
21
|
-
applySchema(raw);
|
|
22
|
-
return {
|
|
23
|
-
raw,
|
|
24
|
-
run(sql, params) {
|
|
25
|
-
const stmt = raw.prepare(sql);
|
|
26
|
-
return params?.length ? stmt.run(...params) : stmt.run();
|
|
27
|
-
},
|
|
28
|
-
queryAll(sql, params) {
|
|
29
|
-
const stmt = raw.prepare(sql);
|
|
30
|
-
return (params?.length ? stmt.all(...params) : stmt.all());
|
|
31
|
-
},
|
|
32
|
-
queryOne(sql, params) {
|
|
33
|
-
const stmt = raw.prepare(sql);
|
|
34
|
-
const row = params?.length ? stmt.get(...params) : stmt.get();
|
|
35
|
-
return row ?? null;
|
|
36
|
-
},
|
|
37
|
-
transaction(fn) {
|
|
38
|
-
return raw.transaction(fn)();
|
|
39
|
-
},
|
|
40
|
-
close() {
|
|
41
|
-
try {
|
|
42
|
-
raw.close();
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
/* ignore */
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
};
|
|
17
|
+
const path = resolveDbPath(options.path);
|
|
18
|
+
seedMetaFromUserVersion(path);
|
|
19
|
+
return createKitDb({ path, migrations, verbose: options.verbose });
|
|
49
20
|
}
|
|
50
21
|
function resolveDbPath(path) {
|
|
51
22
|
if (path)
|
|
@@ -57,13 +28,46 @@ function resolveDbPath(path) {
|
|
|
57
28
|
mkdirSync(dir, { recursive: true });
|
|
58
29
|
return join(dir, 'agent-discover.db');
|
|
59
30
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Bridge legacy pragma user_version DBs into agent-common's _meta table.
|
|
33
|
+
* Opens the DB once, copies user_version → _meta.schema_version (if _meta is
|
|
34
|
+
* empty), then closes. Safe on fresh DBs (both values are 0). Skipped for
|
|
35
|
+
* in-memory DBs.
|
|
36
|
+
*/
|
|
37
|
+
function seedMetaFromUserVersion(path) {
|
|
38
|
+
if (path === ':memory:')
|
|
63
39
|
return;
|
|
64
|
-
raw
|
|
65
|
-
|
|
66
|
-
|
|
40
|
+
const raw = new Database(path);
|
|
41
|
+
try {
|
|
42
|
+
raw.exec(`CREATE TABLE IF NOT EXISTS _meta (key TEXT PRIMARY KEY, value TEXT NOT NULL)`);
|
|
43
|
+
const existing = raw.prepare(`SELECT value FROM _meta WHERE key = 'schema_version'`).get();
|
|
44
|
+
if (existing)
|
|
45
|
+
return;
|
|
46
|
+
const userVersion = raw.pragma('user_version', { simple: true });
|
|
47
|
+
if (userVersion > 0) {
|
|
48
|
+
raw
|
|
49
|
+
.prepare(`INSERT INTO _meta (key, value) VALUES ('schema_version', ?)`)
|
|
50
|
+
.run(String(userVersion));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
raw.close();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Migrations — version-ordered, applied by agent-common's runner.
|
|
59
|
+
// All ALTER TABLE statements are guarded so they're safe to re-run on DBs
|
|
60
|
+
// that legacy pragma-user_version code already touched.
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
function hasColumn(db, table, column) {
|
|
63
|
+
const cols = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
64
|
+
return cols.some((c) => c.name === column);
|
|
65
|
+
}
|
|
66
|
+
const migrations = [
|
|
67
|
+
{
|
|
68
|
+
version: 1,
|
|
69
|
+
up: (db) => {
|
|
70
|
+
db.exec(`
|
|
67
71
|
CREATE TABLE IF NOT EXISTS servers (
|
|
68
72
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
69
73
|
name TEXT NOT NULL UNIQUE,
|
|
@@ -98,7 +102,6 @@ function applySchema(raw) {
|
|
|
98
102
|
content=servers, content_rowid=id
|
|
99
103
|
);
|
|
100
104
|
|
|
101
|
-
-- FTS triggers
|
|
102
105
|
CREATE TRIGGER IF NOT EXISTS servers_ai AFTER INSERT ON servers BEGIN
|
|
103
106
|
INSERT INTO servers_fts(rowid, name, description, tags)
|
|
104
107
|
VALUES (new.id, new.name, new.description, new.tags);
|
|
@@ -116,53 +119,58 @@ function applySchema(raw) {
|
|
|
116
119
|
VALUES (new.id, new.name, new.description, new.tags);
|
|
117
120
|
END;
|
|
118
121
|
`);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
version: 2,
|
|
126
|
+
up: (db) => {
|
|
127
|
+
if (!hasColumn(db, 'servers', 'approval_status')) {
|
|
128
|
+
db.exec(`ALTER TABLE servers ADD COLUMN approval_status TEXT DEFAULT 'experimental'`);
|
|
129
|
+
}
|
|
130
|
+
if (!hasColumn(db, 'servers', 'latest_version')) {
|
|
131
|
+
db.exec(`ALTER TABLE servers ADD COLUMN latest_version TEXT`);
|
|
132
|
+
}
|
|
133
|
+
if (!hasColumn(db, 'servers', 'last_health_check')) {
|
|
134
|
+
db.exec(`ALTER TABLE servers ADD COLUMN last_health_check TEXT`);
|
|
135
|
+
}
|
|
136
|
+
if (!hasColumn(db, 'servers', 'health_status')) {
|
|
137
|
+
db.exec(`ALTER TABLE servers ADD COLUMN health_status TEXT DEFAULT 'unknown'`);
|
|
138
|
+
}
|
|
139
|
+
if (!hasColumn(db, 'servers', 'error_count')) {
|
|
140
|
+
db.exec(`ALTER TABLE servers ADD COLUMN error_count INTEGER DEFAULT 0`);
|
|
141
|
+
}
|
|
142
|
+
db.exec(`
|
|
143
|
+
CREATE TABLE IF NOT EXISTS server_secrets (
|
|
144
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
145
|
+
server_id INTEGER NOT NULL REFERENCES servers(id) ON DELETE CASCADE,
|
|
146
|
+
key TEXT NOT NULL,
|
|
147
|
+
value TEXT NOT NULL,
|
|
148
|
+
masked BOOLEAN DEFAULT 1,
|
|
149
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
150
|
+
updated_at TEXT DEFAULT (datetime('now')),
|
|
151
|
+
UNIQUE(server_id, key)
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
CREATE TABLE IF NOT EXISTS server_metrics (
|
|
155
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
156
|
+
server_id INTEGER NOT NULL REFERENCES servers(id) ON DELETE CASCADE,
|
|
157
|
+
tool_name TEXT NOT NULL,
|
|
158
|
+
call_count INTEGER DEFAULT 0,
|
|
159
|
+
error_count INTEGER DEFAULT 0,
|
|
160
|
+
total_latency_ms INTEGER DEFAULT 0,
|
|
161
|
+
last_called_at TEXT,
|
|
162
|
+
UNIQUE(server_id, tool_name)
|
|
163
|
+
);
|
|
164
|
+
`);
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
version: 3,
|
|
169
|
+
up: (db) => {
|
|
170
|
+
if (hasColumn(db, 'servers', 'approval_status')) {
|
|
171
|
+
db.exec(`ALTER TABLE servers DROP COLUMN approval_status`);
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
];
|
|
168
176
|
//# sourceMappingURL=database.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,iCAAiC;AACjC,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-discover",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.22",
|
|
4
4
|
"mcpName": "io.github.keshrath/agent-discover",
|
|
5
5
|
"description": "MCP server registry and marketplace — discover, install, activate, and manage MCP tools on demand",
|
|
6
6
|
"type": "module",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
52
|
-
"agent-common": "^1.0.
|
|
52
|
+
"agent-common": "^1.0.3",
|
|
53
53
|
"better-sqlite3": "12.8.0",
|
|
54
54
|
"morphdom": "^2.7.8",
|
|
55
55
|
"ws": "8.20.0"
|