@pcircle/footprint 1.0.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 +21 -0
- package/README.md +80 -0
- package/SKILL.md +355 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +690 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/crypto/decrypt.d.ts +11 -0
- package/dist/lib/crypto/decrypt.d.ts.map +1 -0
- package/dist/lib/crypto/decrypt.js +30 -0
- package/dist/lib/crypto/decrypt.js.map +1 -0
- package/dist/lib/crypto/encrypt.d.ts +13 -0
- package/dist/lib/crypto/encrypt.d.ts.map +1 -0
- package/dist/lib/crypto/encrypt.js +24 -0
- package/dist/lib/crypto/encrypt.js.map +1 -0
- package/dist/lib/crypto/index.d.ts +6 -0
- package/dist/lib/crypto/index.d.ts.map +1 -0
- package/dist/lib/crypto/index.js +5 -0
- package/dist/lib/crypto/index.js.map +1 -0
- package/dist/lib/crypto/key-derivation.d.ts +30 -0
- package/dist/lib/crypto/key-derivation.d.ts.map +1 -0
- package/dist/lib/crypto/key-derivation.js +63 -0
- package/dist/lib/crypto/key-derivation.js.map +1 -0
- package/dist/lib/crypto/types.d.ts +22 -0
- package/dist/lib/crypto/types.d.ts.map +1 -0
- package/dist/lib/crypto/types.js +10 -0
- package/dist/lib/crypto/types.js.map +1 -0
- package/dist/lib/storage/database.d.ts +116 -0
- package/dist/lib/storage/database.d.ts.map +1 -0
- package/dist/lib/storage/database.js +390 -0
- package/dist/lib/storage/database.js.map +1 -0
- package/dist/lib/storage/export.d.ts +26 -0
- package/dist/lib/storage/export.d.ts.map +1 -0
- package/dist/lib/storage/export.js +113 -0
- package/dist/lib/storage/export.js.map +1 -0
- package/dist/lib/storage/git.d.ts +16 -0
- package/dist/lib/storage/git.d.ts.map +1 -0
- package/dist/lib/storage/git.js +55 -0
- package/dist/lib/storage/git.js.map +1 -0
- package/dist/lib/storage/index.d.ts +6 -0
- package/dist/lib/storage/index.d.ts.map +1 -0
- package/dist/lib/storage/index.js +5 -0
- package/dist/lib/storage/index.js.map +1 -0
- package/dist/lib/storage/schema.d.ts +17 -0
- package/dist/lib/storage/schema.d.ts.map +1 -0
- package/dist/lib/storage/schema.js +103 -0
- package/dist/lib/storage/schema.js.map +1 -0
- package/dist/lib/storage/types.d.ts +26 -0
- package/dist/lib/storage/types.d.ts.map +1 -0
- package/dist/lib/storage/types.js +2 -0
- package/dist/lib/storage/types.js.map +1 -0
- package/dist/test-helpers.d.ts +33 -0
- package/dist/test-helpers.d.ts.map +1 -0
- package/dist/test-helpers.js +108 -0
- package/dist/test-helpers.js.map +1 -0
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/dashboard.html +965 -0
- package/dist/ui/detail.html +348 -0
- package/dist/ui/export.html +409 -0
- package/dist/ui/register.d.ts +7 -0
- package/dist/ui/register.d.ts.map +1 -0
- package/dist/ui/register.js +154 -0
- package/dist/ui/register.js.map +1 -0
- package/dist/ui-tmp/ui/export.html +409 -0
- package/package.json +78 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the database schema (tables and indexes)
|
|
4
|
+
* This function is idempotent - safe to run multiple times
|
|
5
|
+
*
|
|
6
|
+
* @param db - SQLite database instance
|
|
7
|
+
*/
|
|
8
|
+
export declare function createSchema(db: Database.Database): void;
|
|
9
|
+
/**
|
|
10
|
+
* Verifies that the database schema is valid
|
|
11
|
+
* Checks for existence of required tables
|
|
12
|
+
*
|
|
13
|
+
* @param db - SQLite database instance
|
|
14
|
+
* @returns true if schema is valid, false otherwise
|
|
15
|
+
*/
|
|
16
|
+
export declare function verifySchema(db: Database.Database): boolean;
|
|
17
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/lib/storage/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAO3C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAqDxD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAqC3D"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Current schema version
|
|
3
|
+
*/
|
|
4
|
+
const SCHEMA_VERSION = '1';
|
|
5
|
+
/**
|
|
6
|
+
* Creates the database schema (tables and indexes)
|
|
7
|
+
* This function is idempotent - safe to run multiple times
|
|
8
|
+
*
|
|
9
|
+
* @param db - SQLite database instance
|
|
10
|
+
*/
|
|
11
|
+
export function createSchema(db) {
|
|
12
|
+
try {
|
|
13
|
+
// Create evidences table
|
|
14
|
+
db.exec(`
|
|
15
|
+
CREATE TABLE IF NOT EXISTS evidences (
|
|
16
|
+
id TEXT PRIMARY KEY,
|
|
17
|
+
timestamp TEXT NOT NULL,
|
|
18
|
+
conversationId TEXT NOT NULL,
|
|
19
|
+
llmProvider TEXT NOT NULL,
|
|
20
|
+
encryptedContent BLOB NOT NULL,
|
|
21
|
+
nonce BLOB NOT NULL,
|
|
22
|
+
contentHash TEXT NOT NULL,
|
|
23
|
+
messageCount INTEGER NOT NULL DEFAULT 0,
|
|
24
|
+
gitCommitHash TEXT,
|
|
25
|
+
gitTimestamp TEXT,
|
|
26
|
+
tags TEXT,
|
|
27
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
28
|
+
updatedAt TEXT NOT NULL DEFAULT (datetime('now'))
|
|
29
|
+
);
|
|
30
|
+
`);
|
|
31
|
+
// Create metadata table for schema versioning
|
|
32
|
+
db.exec(`
|
|
33
|
+
CREATE TABLE IF NOT EXISTS metadata (
|
|
34
|
+
key TEXT PRIMARY KEY,
|
|
35
|
+
value TEXT NOT NULL
|
|
36
|
+
);
|
|
37
|
+
`);
|
|
38
|
+
// Create indexes for common queries
|
|
39
|
+
db.exec(`
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_timestamp ON evidences(timestamp);
|
|
41
|
+
`);
|
|
42
|
+
db.exec(`
|
|
43
|
+
CREATE INDEX IF NOT EXISTS idx_conversation_id ON evidences(conversationId);
|
|
44
|
+
`);
|
|
45
|
+
db.exec(`
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_content_hash ON evidences(contentHash);
|
|
47
|
+
`);
|
|
48
|
+
// Set schema version (use INSERT OR IGNORE to make it idempotent)
|
|
49
|
+
const stmt = db.prepare(`
|
|
50
|
+
INSERT OR IGNORE INTO metadata (key, value)
|
|
51
|
+
VALUES ('schema_version', ?)
|
|
52
|
+
`);
|
|
53
|
+
stmt.run(SCHEMA_VERSION);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
// Clean up database connection on failure to prevent resource leaks
|
|
57
|
+
db.close();
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Verifies that the database schema is valid
|
|
63
|
+
* Checks for existence of required tables
|
|
64
|
+
*
|
|
65
|
+
* @param db - SQLite database instance
|
|
66
|
+
* @returns true if schema is valid, false otherwise
|
|
67
|
+
*/
|
|
68
|
+
export function verifySchema(db) {
|
|
69
|
+
try {
|
|
70
|
+
// Check if evidences table exists
|
|
71
|
+
const evidencesTableInfo = db.pragma('table_info(evidences)');
|
|
72
|
+
if (!evidencesTableInfo || evidencesTableInfo.length === 0) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
// Check if metadata table exists
|
|
76
|
+
const metadataTableInfo = db.pragma('table_info(metadata)');
|
|
77
|
+
if (!metadataTableInfo || metadataTableInfo.length === 0) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
// Verify required columns exist in evidences table
|
|
81
|
+
const evidencesColumns = evidencesTableInfo.map((col) => col.name);
|
|
82
|
+
const requiredColumns = [
|
|
83
|
+
'id',
|
|
84
|
+
'timestamp',
|
|
85
|
+
'encryptedContent',
|
|
86
|
+
'nonce',
|
|
87
|
+
'contentHash',
|
|
88
|
+
'messageCount',
|
|
89
|
+
'createdAt',
|
|
90
|
+
'updatedAt'
|
|
91
|
+
];
|
|
92
|
+
for (const col of requiredColumns) {
|
|
93
|
+
if (!evidencesColumns.includes(col)) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/lib/storage/schema.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,EAAqB;IAChD,IAAI,CAAC;QACH,yBAAyB;QACzB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;KAgBP,CAAC,CAAC;QAEH,8CAA8C;QAC9C,EAAE,CAAC,IAAI,CAAC;;;;;KAKP,CAAC,CAAC;QAEH,oCAAoC;QACpC,EAAE,CAAC,IAAI,CAAC;;KAEP,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC;;KAEP,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC;;KAEP,CAAC,CAAC;QAEH,kEAAkE;QAClE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAGvB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,oEAAoE;QACpE,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,EAAqB;IAChD,IAAI,CAAC;QACH,kCAAkC;QAClC,MAAM,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAA0C,CAAC;QACvG,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iCAAiC;QACjC,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAA0C,CAAC;QACrG,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mDAAmD;QACnD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,eAAe,GAAG;YACtB,IAAI;YACJ,WAAW;YACX,kBAAkB;YAClB,OAAO;YACP,aAAa;YACb,cAAc;YACd,WAAW;YACX,WAAW;SACZ,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YAClC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evidence record stored in the database
|
|
3
|
+
*/
|
|
4
|
+
export interface Evidence {
|
|
5
|
+
id: string;
|
|
6
|
+
timestamp: string;
|
|
7
|
+
conversationId: string | null;
|
|
8
|
+
llmProvider: string | null;
|
|
9
|
+
encryptedContent: Uint8Array;
|
|
10
|
+
nonce: Uint8Array;
|
|
11
|
+
contentHash: string;
|
|
12
|
+
messageCount: number;
|
|
13
|
+
gitCommitHash: string | null;
|
|
14
|
+
gitTimestamp: string | null;
|
|
15
|
+
tags: string | null;
|
|
16
|
+
createdAt: string;
|
|
17
|
+
updatedAt: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Metadata key-value pairs for schema versioning and other system data
|
|
21
|
+
*/
|
|
22
|
+
export interface Metadata {
|
|
23
|
+
key: string;
|
|
24
|
+
value: string;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/storage/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,UAAU,CAAC;IAC7B,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/storage/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Helper Utilities for EvidenceMCP Server
|
|
3
|
+
*/
|
|
4
|
+
import type { EvidenceMCPServer } from './index.js';
|
|
5
|
+
export interface ToolInfo {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ResourceInfo {
|
|
10
|
+
name: string;
|
|
11
|
+
uriTemplate: string;
|
|
12
|
+
description: string;
|
|
13
|
+
mimeType: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class EvidenceMCPTestHelpers {
|
|
16
|
+
private server;
|
|
17
|
+
constructor(server: EvidenceMCPServer);
|
|
18
|
+
private getServerInternal;
|
|
19
|
+
getTools(): Promise<ToolInfo[]>;
|
|
20
|
+
getResources(): Promise<ResourceInfo[]>;
|
|
21
|
+
readResource(uri: string): Promise<{
|
|
22
|
+
contents: Array<{
|
|
23
|
+
uri: string;
|
|
24
|
+
mimeType: string;
|
|
25
|
+
text: string;
|
|
26
|
+
}>;
|
|
27
|
+
}>;
|
|
28
|
+
executeTool(toolName: string, params: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
29
|
+
callTool(name: string, params: Record<string, unknown>): Promise<{
|
|
30
|
+
structuredContent: Record<string, unknown>;
|
|
31
|
+
}>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=test-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAuDD,qBAAa,sBAAsB;IACrB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,iBAAiB;IAE7C,OAAO,CAAC,iBAAiB;IAInB,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAS/B,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAiBvC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IA0BxG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAmBhG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAAE,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CAIvH"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Helper Utilities for EvidenceMCP Server
|
|
3
|
+
*/
|
|
4
|
+
function getFromRegistry(registry, finder) {
|
|
5
|
+
if (!registry)
|
|
6
|
+
return null;
|
|
7
|
+
if (registry instanceof Map) {
|
|
8
|
+
for (const [key, value] of registry.entries()) {
|
|
9
|
+
const result = finder(key, value);
|
|
10
|
+
if (result)
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
else if (Array.isArray(registry)) {
|
|
15
|
+
for (const item of registry) {
|
|
16
|
+
const result = finder(item.name, item);
|
|
17
|
+
if (result)
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else if (typeof registry === 'object') {
|
|
22
|
+
for (const [key, value] of Object.entries(registry)) {
|
|
23
|
+
const result = finder(key, value);
|
|
24
|
+
if (result)
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
function mapRegistry(registry, mapper) {
|
|
31
|
+
if (!registry)
|
|
32
|
+
return [];
|
|
33
|
+
if (registry instanceof Map) {
|
|
34
|
+
return Array.from(registry.entries()).map(([key, value]) => mapper(key, value));
|
|
35
|
+
}
|
|
36
|
+
if (Array.isArray(registry)) {
|
|
37
|
+
return registry.map((item) => mapper(item.name, item));
|
|
38
|
+
}
|
|
39
|
+
if (typeof registry === 'object') {
|
|
40
|
+
return Object.entries(registry).map(([key, value]) => mapper(key, value));
|
|
41
|
+
}
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
export class EvidenceMCPTestHelpers {
|
|
45
|
+
server;
|
|
46
|
+
constructor(server) {
|
|
47
|
+
this.server = server;
|
|
48
|
+
}
|
|
49
|
+
getServerInternal() {
|
|
50
|
+
return this.server;
|
|
51
|
+
}
|
|
52
|
+
async getTools() {
|
|
53
|
+
const tools = Reflect.get(this.getServerInternal().server, '_registeredTools');
|
|
54
|
+
return mapRegistry(tools, (name, tool) => ({
|
|
55
|
+
name,
|
|
56
|
+
description: (tool.description || tool.title)
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
async getResources() {
|
|
60
|
+
const templates = Reflect.get(this.getServerInternal().server, '_registeredResourceTemplates');
|
|
61
|
+
return mapRegistry(templates, (name, template) => ({
|
|
62
|
+
name,
|
|
63
|
+
uriTemplate: template.resourceTemplate?._uriTemplate?.template
|
|
64
|
+
|| template.uriTemplate
|
|
65
|
+
|| '',
|
|
66
|
+
description: template.metadata?.description
|
|
67
|
+
|| template.description
|
|
68
|
+
|| '',
|
|
69
|
+
mimeType: template.metadata?.mimeType
|
|
70
|
+
|| template.mimeType
|
|
71
|
+
|| 'text/plain'
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
async readResource(uri) {
|
|
75
|
+
const templates = Reflect.get(this.getServerInternal().server, '_registeredResourceTemplates');
|
|
76
|
+
const match = uri.match(/^(\w+):\/\/(.+)$/);
|
|
77
|
+
if (!match) {
|
|
78
|
+
throw new Error('Unknown resource');
|
|
79
|
+
}
|
|
80
|
+
const [, resourceName, id] = match;
|
|
81
|
+
const handler = getFromRegistry(templates, (key, value) => key === resourceName ? value : null);
|
|
82
|
+
if (!handler) {
|
|
83
|
+
throw new Error('Unknown resource');
|
|
84
|
+
}
|
|
85
|
+
const handlerFn = handler.readCallback || handler.handler;
|
|
86
|
+
if (!handlerFn || typeof handlerFn !== 'function') {
|
|
87
|
+
throw new Error('Unknown resource');
|
|
88
|
+
}
|
|
89
|
+
return handlerFn({ href: uri }, { id });
|
|
90
|
+
}
|
|
91
|
+
async executeTool(toolName, params) {
|
|
92
|
+
const tools = Reflect.get(this.getServerInternal().server, '_registeredTools');
|
|
93
|
+
if (!tools) {
|
|
94
|
+
throw new Error('No tools registered');
|
|
95
|
+
}
|
|
96
|
+
const tool = getFromRegistry(tools, (key, value) => key === toolName ? value : null);
|
|
97
|
+
if (!tool || !tool.handler || typeof tool.handler !== 'function') {
|
|
98
|
+
throw new Error(`Tool ${toolName} not found`);
|
|
99
|
+
}
|
|
100
|
+
const result = await tool.handler(params);
|
|
101
|
+
return (result.structuredContent || result);
|
|
102
|
+
}
|
|
103
|
+
async callTool(name, params) {
|
|
104
|
+
const result = await this.executeTool(name, params);
|
|
105
|
+
return { structuredContent: result };
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=test-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for EvidenceMCP Server
|
|
3
|
+
*/
|
|
4
|
+
export interface ServerConfig {
|
|
5
|
+
/** Path to encrypted evidence database */
|
|
6
|
+
dbPath: string;
|
|
7
|
+
/** Password for encrypting/decrypting evidence */
|
|
8
|
+
password: string;
|
|
9
|
+
/** Server name (for MCP protocol) */
|
|
10
|
+
name?: string;
|
|
11
|
+
/** Server version */
|
|
12
|
+
version?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Evidence capture request parameters
|
|
16
|
+
*/
|
|
17
|
+
export interface CaptureEvidenceParams {
|
|
18
|
+
/** Conversation ID (e.g., Claude session ID) */
|
|
19
|
+
conversationId: string;
|
|
20
|
+
/** LLM provider name */
|
|
21
|
+
llmProvider: string;
|
|
22
|
+
/** Conversation content (messages, prompts, responses) */
|
|
23
|
+
content: string;
|
|
24
|
+
/** Number of messages in conversation */
|
|
25
|
+
messageCount: number;
|
|
26
|
+
/** Optional tags for categorization */
|
|
27
|
+
tags?: string;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IAEjB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IAEvB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IAEpB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAEhB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IAErB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|