@pcircle/footprint 1.2.2 → 1.5.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 +1 -1
- package/README.md +125 -161
- package/SKILL.md +50 -50
- package/dist/src/analyzers/content-analyzer.d.ts.map +1 -1
- package/dist/src/analyzers/content-analyzer.js +20 -4
- package/dist/src/analyzers/content-analyzer.js.map +1 -1
- package/dist/src/cli/constants.d.ts +20 -0
- package/dist/src/cli/constants.d.ts.map +1 -0
- package/dist/src/cli/constants.js +25 -0
- package/dist/src/cli/constants.js.map +1 -0
- package/dist/src/cli/index.d.ts +3 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +25 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/setup.d.ts +6 -0
- package/dist/src/cli/setup.d.ts.map +1 -0
- package/dist/src/cli/setup.js +356 -0
- package/dist/src/cli/setup.js.map +1 -0
- package/dist/src/cli/types.d.ts +38 -0
- package/dist/src/cli/types.d.ts.map +1 -0
- package/dist/src/cli/types.js +5 -0
- package/dist/src/cli/types.js.map +1 -0
- package/dist/src/cli/utils/config.d.ts +19 -0
- package/dist/src/cli/utils/config.d.ts.map +1 -0
- package/dist/src/cli/utils/config.js +86 -0
- package/dist/src/cli/utils/config.js.map +1 -0
- package/dist/src/cli/utils/detect.d.ts +14 -0
- package/dist/src/cli/utils/detect.d.ts.map +1 -0
- package/dist/src/cli/utils/detect.js +57 -0
- package/dist/src/cli/utils/detect.js.map +1 -0
- package/dist/src/cli/utils/env.d.ts +15 -0
- package/dist/src/cli/utils/env.d.ts.map +1 -0
- package/dist/src/cli/utils/env.js +85 -0
- package/dist/src/cli/utils/env.js.map +1 -0
- package/dist/src/cli/utils/validation.d.ts +17 -0
- package/dist/src/cli/utils/validation.d.ts.map +1 -0
- package/dist/src/cli/utils/validation.js +77 -0
- package/dist/src/cli/utils/validation.js.map +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +53 -38
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/crypto/decrypt.d.ts.map +1 -1
- package/dist/src/lib/crypto/decrypt.js +12 -8
- package/dist/src/lib/crypto/decrypt.js.map +1 -1
- package/dist/src/lib/crypto/encrypt.d.ts.map +1 -1
- package/dist/src/lib/crypto/encrypt.js +6 -3
- package/dist/src/lib/crypto/encrypt.js.map +1 -1
- package/dist/src/lib/crypto/key-derivation.d.ts +1 -1
- package/dist/src/lib/crypto/key-derivation.d.ts.map +1 -1
- package/dist/src/lib/crypto/key-derivation.js +11 -11
- package/dist/src/lib/crypto/key-derivation.js.map +1 -1
- package/dist/src/lib/storage/database.d.ts +46 -3
- package/dist/src/lib/storage/database.d.ts.map +1 -1
- package/dist/src/lib/storage/database.js +175 -80
- package/dist/src/lib/storage/database.js.map +1 -1
- package/dist/src/lib/storage/export.d.ts +3 -4
- package/dist/src/lib/storage/export.d.ts.map +1 -1
- package/dist/src/lib/storage/export.js +75 -62
- package/dist/src/lib/storage/export.js.map +1 -1
- package/dist/src/lib/storage/salt-storage.d.ts +1 -1
- package/dist/src/lib/storage/salt-storage.d.ts.map +1 -1
- package/dist/src/lib/storage/salt-storage.js +26 -18
- package/dist/src/lib/storage/salt-storage.js.map +1 -1
- package/dist/src/lib/storage/schema.d.ts +1 -1
- package/dist/src/lib/storage/schema.d.ts.map +1 -1
- package/dist/src/lib/storage/schema.js +29 -47
- package/dist/src/lib/storage/schema.js.map +1 -1
- package/dist/src/lib/tool-wrapper.d.ts.map +1 -1
- package/dist/src/lib/tool-wrapper.js +2 -2
- package/dist/src/lib/tool-wrapper.js.map +1 -1
- package/dist/src/prompts/skill-prompt.d.ts +6 -0
- package/dist/src/prompts/skill-prompt.d.ts.map +1 -0
- package/dist/src/prompts/skill-prompt.js +125 -0
- package/dist/src/prompts/skill-prompt.js.map +1 -0
- package/dist/src/tools/capture-footprint.d.ts +2 -2
- package/dist/src/tools/capture-footprint.d.ts.map +1 -1
- package/dist/src/tools/capture-footprint.js +53 -12
- package/dist/src/tools/capture-footprint.js.map +1 -1
- package/dist/src/tools/delete-footprints.d.ts +19 -2
- package/dist/src/tools/delete-footprints.d.ts.map +1 -1
- package/dist/src/tools/delete-footprints.js +56 -8
- package/dist/src/tools/delete-footprints.js.map +1 -1
- package/dist/src/tools/export-footprints.d.ts +14 -6
- package/dist/src/tools/export-footprints.d.ts.map +1 -1
- package/dist/src/tools/export-footprints.js +54 -15
- package/dist/src/tools/export-footprints.js.map +1 -1
- package/dist/src/tools/get-footprint.d.ts +1 -7
- package/dist/src/tools/get-footprint.d.ts.map +1 -1
- package/dist/src/tools/get-footprint.js +26 -22
- package/dist/src/tools/get-footprint.js.map +1 -1
- package/dist/src/tools/index.d.ts +1 -3
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +1 -3
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/list-footprints.d.ts +3 -17
- package/dist/src/tools/list-footprints.d.ts.map +1 -1
- package/dist/src/tools/list-footprints.js +27 -16
- package/dist/src/tools/list-footprints.js.map +1 -1
- package/dist/src/tools/manage-tags.d.ts +47 -0
- package/dist/src/tools/manage-tags.d.ts.map +1 -0
- package/dist/src/tools/manage-tags.js +109 -0
- package/dist/src/tools/manage-tags.js.map +1 -0
- package/dist/src/tools/search-footprints.d.ts +4 -18
- package/dist/src/tools/search-footprints.d.ts.map +1 -1
- package/dist/src/tools/search-footprints.js +32 -16
- package/dist/src/tools/search-footprints.js.map +1 -1
- package/dist/src/tools/suggest-capture.d.ts +1 -1
- package/dist/src/tools/suggest-capture.d.ts.map +1 -1
- package/dist/src/tools/suggest-capture.js +6 -2
- package/dist/src/tools/suggest-capture.js.map +1 -1
- package/dist/src/tools/verify-footprint.d.ts +7 -54
- package/dist/src/tools/verify-footprint.d.ts.map +1 -1
- package/dist/src/tools/verify-footprint.js +22 -19
- package/dist/src/tools/verify-footprint.js.map +1 -1
- package/dist/src/types.d.ts +4 -4
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/ui/register.js +3 -3
- package/dist/src/ui/register.js.map +1 -1
- package/dist/ui/dashboard.html +78 -65
- package/dist/ui/detail.html +69 -56
- package/dist/ui/export.html +72 -59
- package/package.json +28 -16
- package/dist/src/lib/errors/base-error.d.ts +0 -15
- package/dist/src/lib/errors/base-error.d.ts.map +0 -1
- package/dist/src/lib/errors/base-error.js +0 -34
- package/dist/src/lib/errors/base-error.js.map +0 -1
- package/dist/src/lib/errors/crypto-error.d.ts +0 -29
- package/dist/src/lib/errors/crypto-error.d.ts.map +0 -1
- package/dist/src/lib/errors/crypto-error.js +0 -43
- package/dist/src/lib/errors/crypto-error.js.map +0 -1
- package/dist/src/lib/errors/index.d.ts +0 -26
- package/dist/src/lib/errors/index.d.ts.map +0 -1
- package/dist/src/lib/errors/index.js +0 -26
- package/dist/src/lib/errors/index.js.map +0 -1
- package/dist/src/lib/errors/storage-error.d.ts +0 -25
- package/dist/src/lib/errors/storage-error.d.ts.map +0 -1
- package/dist/src/lib/errors/storage-error.js +0 -38
- package/dist/src/lib/errors/storage-error.js.map +0 -1
- package/dist/src/lib/errors/validation-error.d.ts +0 -21
- package/dist/src/lib/errors/validation-error.d.ts.map +0 -1
- package/dist/src/lib/errors/validation-error.js +0 -29
- package/dist/src/lib/errors/validation-error.js.map +0 -1
- package/dist/src/test-helpers.d.ts +0 -33
- package/dist/src/test-helpers.d.ts.map +0 -1
- package/dist/src/test-helpers.js +0 -108
- package/dist/src/test-helpers.js.map +0 -1
- package/dist/src/tools/get-tag-stats.d.ts +0 -30
- package/dist/src/tools/get-tag-stats.d.ts.map +0 -1
- package/dist/src/tools/get-tag-stats.js +0 -33
- package/dist/src/tools/get-tag-stats.js.map +0 -1
- package/dist/src/tools/remove-tag.d.ts +0 -22
- package/dist/src/tools/remove-tag.d.ts.map +0 -1
- package/dist/src/tools/remove-tag.js +0 -30
- package/dist/src/tools/remove-tag.js.map +0 -1
- package/dist/src/tools/rename-tag.d.ts +0 -24
- package/dist/src/tools/rename-tag.d.ts.map +0 -1
- package/dist/src/tools/rename-tag.js +0 -34
- package/dist/src/tools/rename-tag.js.map +0 -1
- package/dist/tests/error-handling.test.d.ts +0 -2
- package/dist/tests/error-handling.test.d.ts.map +0 -1
- package/dist/tests/error-handling.test.js +0 -114
- package/dist/tests/error-handling.test.js.map +0 -1
- package/dist/tests/fixtures.d.ts +0 -87
- package/dist/tests/fixtures.d.ts.map +0 -1
- package/dist/tests/fixtures.js +0 -130
- package/dist/tests/fixtures.js.map +0 -1
- package/dist/tests/integration.test.d.ts +0 -2
- package/dist/tests/integration.test.d.ts.map +0 -1
- package/dist/tests/integration.test.js +0 -115
- package/dist/tests/integration.test.js.map +0 -1
- package/dist/tests/resources.test.d.ts +0 -2
- package/dist/tests/resources.test.d.ts.map +0 -1
- package/dist/tests/resources.test.js +0 -73
- package/dist/tests/resources.test.js.map +0 -1
- package/dist/tests/setup.d.ts +0 -8
- package/dist/tests/setup.d.ts.map +0 -1
- package/dist/tests/setup.js +0 -8
- package/dist/tests/setup.js.map +0 -1
- package/dist/tests/tools.test.d.ts +0 -2
- package/dist/tests/tools.test.d.ts.map +0 -1
- package/dist/tests/tools.test.js +0 -224
- package/dist/tests/tools.test.js.map +0 -1
- package/dist/ui-tmp/ui/export.html +0 -409
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/* global console, NodeJS */
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
/** Secure file permissions: owner read/write only */
|
|
5
|
+
const SECURE_FILE_MODE = 0o600;
|
|
6
|
+
/** Secure directory permissions: owner read/write/execute only */
|
|
7
|
+
const SECURE_DIR_MODE = 0o700;
|
|
8
|
+
/**
|
|
9
|
+
* Safely set file permissions with warning on failure
|
|
10
|
+
*/
|
|
11
|
+
function setSecurePermissions(filePath, showManualHint = false) {
|
|
12
|
+
try {
|
|
13
|
+
fs.chmodSync(filePath, SECURE_FILE_MODE);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
17
|
+
console.warn(`Warning: Could not set secure permissions on ${filePath}: ${message}`);
|
|
18
|
+
if (showManualHint) {
|
|
19
|
+
console.warn(" Please manually restrict access to this file (chmod 600 on Unix).");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Read Claude Desktop config file
|
|
25
|
+
*/
|
|
26
|
+
export function readClaudeConfig(configPath) {
|
|
27
|
+
try {
|
|
28
|
+
if (!fs.existsSync(configPath)) {
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
return JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
const nodeError = error;
|
|
35
|
+
if (nodeError.code === "ENOENT") {
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
39
|
+
throw new Error(`Failed to read config at ${configPath}: ${message}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Write Claude Desktop config file with secure permissions (0o600)
|
|
44
|
+
* CRITICAL: Config contains passphrase, must be owner-only readable
|
|
45
|
+
*/
|
|
46
|
+
export function writeClaudeConfig(configPath, config) {
|
|
47
|
+
const dir = path.dirname(configPath);
|
|
48
|
+
if (!fs.existsSync(dir)) {
|
|
49
|
+
fs.mkdirSync(dir, { recursive: true, mode: SECURE_DIR_MODE });
|
|
50
|
+
}
|
|
51
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
52
|
+
setSecurePermissions(configPath, true);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Backup existing config file with secure permissions (0o600)
|
|
56
|
+
*/
|
|
57
|
+
export function backupConfig(configPath) {
|
|
58
|
+
if (!fs.existsSync(configPath)) {
|
|
59
|
+
throw new Error("Config file does not exist");
|
|
60
|
+
}
|
|
61
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
62
|
+
const backupPath = `${configPath}.backup-${timestamp}`;
|
|
63
|
+
fs.copyFileSync(configPath, backupPath);
|
|
64
|
+
setSecurePermissions(backupPath);
|
|
65
|
+
return backupPath;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Add Footprint to Claude config
|
|
69
|
+
*/
|
|
70
|
+
export function addFootprintToConfig(config, dataDir, passphrase) {
|
|
71
|
+
return {
|
|
72
|
+
...config,
|
|
73
|
+
mcpServers: {
|
|
74
|
+
...config.mcpServers,
|
|
75
|
+
footprint: {
|
|
76
|
+
command: "npx",
|
|
77
|
+
args: ["@pcircle/footprint"],
|
|
78
|
+
env: {
|
|
79
|
+
FOOTPRINT_DATA_DIR: dataDir,
|
|
80
|
+
FOOTPRINT_PASSPHRASE: passphrase,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/cli/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SystemInfo } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Detect current operating system and environment
|
|
4
|
+
*/
|
|
5
|
+
export declare function detectSystem(): SystemInfo;
|
|
6
|
+
/**
|
|
7
|
+
* Detect user's default shell
|
|
8
|
+
*/
|
|
9
|
+
export declare function detectShell(): SystemInfo['shell'];
|
|
10
|
+
/**
|
|
11
|
+
* Find Claude Desktop config file path
|
|
12
|
+
*/
|
|
13
|
+
export declare function findClaudeConfig(): string | null;
|
|
14
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/detect.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C;;GAEG;AACH,wBAAgB,YAAY,IAAI,UAAU,CAczC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,UAAU,CAAC,OAAO,CAAC,CASjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAOhD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as os from 'os';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { CLAUDE_CONFIG_PATHS, SHELL_RC_FILES } from '../constants.js';
|
|
5
|
+
/**
|
|
6
|
+
* Detect current operating system and environment
|
|
7
|
+
*/
|
|
8
|
+
export function detectSystem() {
|
|
9
|
+
const platform = os.platform();
|
|
10
|
+
const shell = detectShell();
|
|
11
|
+
const homeDir = os.homedir();
|
|
12
|
+
const claudeConfigPath = findClaudeConfig();
|
|
13
|
+
const shellRcPath = findShellRcPath(shell, homeDir);
|
|
14
|
+
return {
|
|
15
|
+
platform,
|
|
16
|
+
shell,
|
|
17
|
+
claudeConfigPath,
|
|
18
|
+
homeDir,
|
|
19
|
+
shellRcPath,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Detect user's default shell
|
|
24
|
+
*/
|
|
25
|
+
export function detectShell() {
|
|
26
|
+
const shellEnv = process.env.SHELL || '';
|
|
27
|
+
if (shellEnv.includes('zsh'))
|
|
28
|
+
return 'zsh';
|
|
29
|
+
if (shellEnv.includes('bash'))
|
|
30
|
+
return 'bash';
|
|
31
|
+
if (shellEnv.includes('fish'))
|
|
32
|
+
return 'fish';
|
|
33
|
+
if (process.platform === 'win32')
|
|
34
|
+
return 'powershell';
|
|
35
|
+
return 'bash'; // Default fallback
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Find Claude Desktop config file path
|
|
39
|
+
*/
|
|
40
|
+
export function findClaudeConfig() {
|
|
41
|
+
const platform = os.platform();
|
|
42
|
+
const configPath = CLAUDE_CONFIG_PATHS[platform];
|
|
43
|
+
if (!configPath)
|
|
44
|
+
return null;
|
|
45
|
+
return fs.existsSync(configPath) ? configPath : null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Find shell RC file path
|
|
49
|
+
*/
|
|
50
|
+
function findShellRcPath(shell, homeDir) {
|
|
51
|
+
const rcFile = SHELL_RC_FILES[shell];
|
|
52
|
+
if (!rcFile)
|
|
53
|
+
return null;
|
|
54
|
+
const rcPath = path.join(homeDir, rcFile);
|
|
55
|
+
return fs.existsSync(rcPath) ? rcPath : null;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../../../src/cli/utils/detect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtE;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAA4B,CAAC;IACzD,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEpD,OAAO;QACL,QAAQ;QACR,KAAK;QACL,gBAAgB;QAChB,OAAO;QACP,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAEzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7C,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,YAAY,CAAC;IAEtD,OAAO,MAAM,CAAC,CAAC,mBAAmB;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAsC,CAAC;IACnE,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAEjD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,OAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAa,EAAE,OAAe;IACrD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAoC,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate environment variable export statement with proper escaping
|
|
3
|
+
* Supports POSIX shells (bash/zsh) and fish shell syntax
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateEnvExport(shell: string, dataDir: string, passphrase: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Append environment variables to shell RC file with secure permissions (0o600)
|
|
8
|
+
*/
|
|
9
|
+
export declare function appendToShellRc(rcPath: string, content: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* Remove Footprint environment block from shell RC file (used for rollback)
|
|
12
|
+
* Returns true if block was found and removed
|
|
13
|
+
*/
|
|
14
|
+
export declare function removeFootprintFromRc(rcPath: string): boolean;
|
|
15
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/env.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,MAAM,CAkBR;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA8BrE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAY7D"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* global console */
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
/**
|
|
4
|
+
* Escape string for safe use in shell single quotes
|
|
5
|
+
* Prevents shell injection attacks by properly escaping special characters
|
|
6
|
+
* POSIX shells (bash/zsh): end quote, escaped quote, restart quote
|
|
7
|
+
* Fish shell: backslash-escaped single quote inside single quotes
|
|
8
|
+
*/
|
|
9
|
+
function escapeShellString(str, shell) {
|
|
10
|
+
if (shell === "fish") {
|
|
11
|
+
// Fish supports backslash escapes inside single quotes
|
|
12
|
+
return `'${str.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`;
|
|
13
|
+
}
|
|
14
|
+
// POSIX shells (bash/zsh)
|
|
15
|
+
return `'${str.replace(/'/g, "'\\''")}'`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generate environment variable export statement with proper escaping
|
|
19
|
+
* Supports POSIX shells (bash/zsh) and fish shell syntax
|
|
20
|
+
*/
|
|
21
|
+
export function generateEnvExport(shell, dataDir, passphrase) {
|
|
22
|
+
if (shell === "fish") {
|
|
23
|
+
return [
|
|
24
|
+
"",
|
|
25
|
+
"# Footprint MCP Server Environment Variables",
|
|
26
|
+
`set -gx FOOTPRINT_DATA_DIR ${escapeShellString(dataDir, "fish")}`,
|
|
27
|
+
`set -gx FOOTPRINT_PASSPHRASE ${escapeShellString(passphrase, "fish")}`,
|
|
28
|
+
"",
|
|
29
|
+
].join("\n");
|
|
30
|
+
}
|
|
31
|
+
return [
|
|
32
|
+
"",
|
|
33
|
+
"# Footprint MCP Server Environment Variables",
|
|
34
|
+
`export FOOTPRINT_DATA_DIR=${escapeShellString(dataDir)}`,
|
|
35
|
+
`export FOOTPRINT_PASSPHRASE=${escapeShellString(passphrase)}`,
|
|
36
|
+
"",
|
|
37
|
+
].join("\n");
|
|
38
|
+
}
|
|
39
|
+
const FOOTPRINT_HEADER = "# Footprint MCP Server";
|
|
40
|
+
const FOOTPRINT_BLOCK_REGEX = /\n?# Footprint MCP Server[^\n]*\n(?:(?:export |set -gx )FOOTPRINT_[^\n]*\n?)+/;
|
|
41
|
+
/**
|
|
42
|
+
* Append environment variables to shell RC file with secure permissions (0o600)
|
|
43
|
+
*/
|
|
44
|
+
export function appendToShellRc(rcPath, content) {
|
|
45
|
+
if (!fs.existsSync(rcPath)) {
|
|
46
|
+
throw new Error(`Shell RC file not found: ${rcPath}`);
|
|
47
|
+
}
|
|
48
|
+
const existing = fs.readFileSync(rcPath, "utf-8");
|
|
49
|
+
if (FOOTPRINT_BLOCK_REGEX.test(existing)) {
|
|
50
|
+
throw new Error("Footprint already configured in shell RC file. " +
|
|
51
|
+
"Please remove existing configuration before re-running setup, " +
|
|
52
|
+
"or manually update the existing configuration.");
|
|
53
|
+
}
|
|
54
|
+
// Add header if content doesn't already include it (defensive)
|
|
55
|
+
const wrappedContent = content.includes(FOOTPRINT_HEADER)
|
|
56
|
+
? content
|
|
57
|
+
: `\n${FOOTPRINT_HEADER}\n${content}`;
|
|
58
|
+
fs.appendFileSync(rcPath, wrappedContent, "utf-8");
|
|
59
|
+
// Set restrictive permissions (owner read/write only)
|
|
60
|
+
try {
|
|
61
|
+
fs.chmodSync(rcPath, 0o600);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
65
|
+
console.warn(`Warning: Could not set secure permissions on ${rcPath}: ${message}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Remove Footprint environment block from shell RC file (used for rollback)
|
|
70
|
+
* Returns true if block was found and removed
|
|
71
|
+
*/
|
|
72
|
+
export function removeFootprintFromRc(rcPath) {
|
|
73
|
+
if (!fs.existsSync(rcPath))
|
|
74
|
+
return false;
|
|
75
|
+
const stat = fs.statSync(rcPath);
|
|
76
|
+
const content = fs.readFileSync(rcPath, "utf-8");
|
|
77
|
+
if (!FOOTPRINT_BLOCK_REGEX.test(content))
|
|
78
|
+
return false;
|
|
79
|
+
const cleaned = content.replace(FOOTPRINT_BLOCK_REGEX, "");
|
|
80
|
+
fs.writeFileSync(rcPath, cleaned, "utf-8");
|
|
81
|
+
// Restore original file permissions
|
|
82
|
+
fs.chmodSync(rcPath, stat.mode);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../../src/cli/utils/env.ts"],"names":[],"mappings":"AAAA,oBAAoB;AAEpB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,GAAW,EAAE,KAAc;IACpD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,uDAAuD;QACvD,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IAChE,CAAC;IACD,0BAA0B;IAC1B,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,OAAe,EACf,UAAkB;IAElB,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO;YACL,EAAE;YACF,8CAA8C;YAC9C,8BAA8B,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;YAClE,gCAAgC,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE;YACvE,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,OAAO;QACL,EAAE;QACF,8CAA8C;QAC9C,6BAA6B,iBAAiB,CAAC,OAAO,CAAC,EAAE;QACzD,+BAA+B,iBAAiB,CAAC,UAAU,CAAC,EAAE;QAC9D,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAClD,MAAM,qBAAqB,GACzB,+EAA+E,CAAC;AAElF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,OAAe;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,iDAAiD;YAC/C,gEAAgE;YAChE,gDAAgD,CACnD,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACvD,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,KAAK,gBAAgB,KAAK,OAAO,EAAE,CAAC;IAExC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAEnD,sDAAsD;IACtD,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CACV,gDAAgD,MAAM,KAAK,OAAO,EAAE,CACrE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAEzC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAEvD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC3D,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,oCAAoC;IACpC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ValidationResult } from "../types.js";
|
|
2
|
+
export type PathValidationResult = ValidationResult & {
|
|
3
|
+
normalizedPath?: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Validate password strength using zxcvbn
|
|
7
|
+
*/
|
|
8
|
+
export declare function validatePassword(password: string): ValidationResult;
|
|
9
|
+
/**
|
|
10
|
+
* Validate and normalize file path with security checks:
|
|
11
|
+
* - Rejects dangerous shell characters
|
|
12
|
+
* - Expands tilde (~) to home directory
|
|
13
|
+
* - Ensures path is absolute and within home directory
|
|
14
|
+
* - Rejects symbolic links (could point outside allowed directories)
|
|
15
|
+
*/
|
|
16
|
+
export declare function validatePath(inputPath: string): PathValidationResult;
|
|
17
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/validation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMpD,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAkBnE;AASD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,CA+CpE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import zxcvbn from "zxcvbn";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import * as os from "os";
|
|
4
|
+
import * as fs from "fs";
|
|
5
|
+
import { MIN_PASSWORD_SCORE, MIN_PASSWORD_LENGTH } from "../constants.js";
|
|
6
|
+
/** Characters not allowed in paths (shell injection prevention) */
|
|
7
|
+
const DANGEROUS_PATH_CHARS = /[;&|`$()]/g;
|
|
8
|
+
/**
|
|
9
|
+
* Validate password strength using zxcvbn
|
|
10
|
+
*/
|
|
11
|
+
export function validatePassword(password) {
|
|
12
|
+
if (password.length < MIN_PASSWORD_LENGTH) {
|
|
13
|
+
return {
|
|
14
|
+
valid: false,
|
|
15
|
+
message: `Password must be at least ${MIN_PASSWORD_LENGTH} characters`,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const result = zxcvbn(password);
|
|
19
|
+
if (result.score < MIN_PASSWORD_SCORE) {
|
|
20
|
+
return {
|
|
21
|
+
valid: false,
|
|
22
|
+
message: `Password is too weak. ${result.feedback.suggestions.join(" ")}`,
|
|
23
|
+
score: result.score,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return { valid: true, score: result.score };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Helper to create invalid result
|
|
30
|
+
*/
|
|
31
|
+
function invalid(message) {
|
|
32
|
+
return { valid: false, message };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Validate and normalize file path with security checks:
|
|
36
|
+
* - Rejects dangerous shell characters
|
|
37
|
+
* - Expands tilde (~) to home directory
|
|
38
|
+
* - Ensures path is absolute and within home directory
|
|
39
|
+
* - Rejects symbolic links (could point outside allowed directories)
|
|
40
|
+
*/
|
|
41
|
+
export function validatePath(inputPath) {
|
|
42
|
+
if (!inputPath || typeof inputPath !== "string") {
|
|
43
|
+
return invalid("Path must be a non-empty string");
|
|
44
|
+
}
|
|
45
|
+
// Security: Reject dangerous shell characters
|
|
46
|
+
if (DANGEROUS_PATH_CHARS.test(inputPath)) {
|
|
47
|
+
return invalid("Path contains invalid characters. Special shell characters are not allowed.");
|
|
48
|
+
}
|
|
49
|
+
// Expand tilde to home directory
|
|
50
|
+
const homeDir = os.homedir();
|
|
51
|
+
const expanded = inputPath.startsWith("~")
|
|
52
|
+
? path.join(homeDir, inputPath.slice(1))
|
|
53
|
+
: inputPath;
|
|
54
|
+
if (!path.isAbsolute(expanded)) {
|
|
55
|
+
return invalid("Path must be absolute (e.g., /Users/name/data or ~/.footprint)");
|
|
56
|
+
}
|
|
57
|
+
// Normalize to prevent path traversal attacks (../)
|
|
58
|
+
const normalized = path.resolve(path.normalize(expanded));
|
|
59
|
+
// Security: Ensure path is within user's home directory
|
|
60
|
+
if (!normalized.startsWith(homeDir)) {
|
|
61
|
+
return invalid(`Path must be within your home directory (${homeDir})`);
|
|
62
|
+
}
|
|
63
|
+
// Security: Reject symbolic links (could point outside allowed directories)
|
|
64
|
+
if (fs.existsSync(normalized)) {
|
|
65
|
+
try {
|
|
66
|
+
if (fs.lstatSync(normalized).isSymbolicLink()) {
|
|
67
|
+
return invalid("Symbolic links are not allowed for security reasons. Please use a real directory path.");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
72
|
+
return invalid(`Failed to validate path: ${message}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { valid: true, normalizedPath: normalized };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/cli/utils/validation.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAoBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAkC/C;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,oBAAoB,CAAoC;gBAEpD,MAAM,EAAE,YAAY;IA8BhC;;;;;;;OAOG;YACW,aAAa;IAsC3B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,aAAa;IAqGrB,OAAO,CAAC,iBAAiB;IAwCnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;OAGG;IACH,KAAK,IAAI,IAAI;CAId;AAGD,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAkD1C"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
/* global console, process */
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { realpathSync } from "node:fs";
|
|
2
6
|
import { McpServer, ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
7
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
8
|
import { EvidenceDatabase, storeSalt, retrieveSalt, } from "./lib/storage/index.js";
|
|
@@ -6,8 +10,9 @@ import { deriveKey, rederiveKey } from "./lib/crypto/index.js";
|
|
|
6
10
|
import { registerUIResources } from "./ui/register.js";
|
|
7
11
|
import { getErrorMessage } from "./lib/tool-wrapper.js";
|
|
8
12
|
import { decrypt } from "./lib/crypto/index.js";
|
|
13
|
+
import { registerSkillPrompts } from "./prompts/skill-prompt.js";
|
|
9
14
|
// Import all tool handlers
|
|
10
|
-
import { captureFootprintSchema, captureFootprintMetadata, createCaptureFootprintHandler, listFootprintsSchema, listFootprintsMetadata, createListFootprintsHandler, exportFootprintsSchema, exportFootprintsMetadata, createExportFootprintsHandler, getFootprintSchema, getFootprintMetadata, createGetFootprintHandler, searchFootprintsSchema, searchFootprintsMetadata, createSearchFootprintsHandler, verifyFootprintSchema, verifyFootprintMetadata, createVerifyFootprintHandler, suggestCaptureSchema, suggestCaptureMetadata, createSuggestCaptureHandler, deleteFootprintsSchema, deleteFootprintsMetadata, createDeleteFootprintsHandler,
|
|
15
|
+
import { captureFootprintSchema, captureFootprintMetadata, createCaptureFootprintHandler, listFootprintsSchema, listFootprintsMetadata, createListFootprintsHandler, exportFootprintsSchema, exportFootprintsMetadata, createExportFootprintsHandler, getFootprintSchema, getFootprintMetadata, createGetFootprintHandler, searchFootprintsSchema, searchFootprintsMetadata, createSearchFootprintsHandler, verifyFootprintSchema, verifyFootprintMetadata, createVerifyFootprintHandler, suggestCaptureSchema, suggestCaptureMetadata, createSuggestCaptureHandler, deleteFootprintsSchema, deleteFootprintsMetadata, createDeleteFootprintsHandler, manageTagsSchema, manageTagsMetadata, createManageTagsHandler, } from "./tools/index.js";
|
|
11
16
|
/**
|
|
12
17
|
* Footprint Server - Captures LLM conversations as encrypted evidence
|
|
13
18
|
* with Git timestamps and export capabilities.
|
|
@@ -27,13 +32,19 @@ export class FootprintServer {
|
|
|
27
32
|
throw new Error(`Failed to initialize database: ${getErrorMessage(error)}`);
|
|
28
33
|
}
|
|
29
34
|
this.server = new McpServer({
|
|
30
|
-
name: config.name || "
|
|
31
|
-
version: config.version || "
|
|
35
|
+
name: config.name || "footprint",
|
|
36
|
+
version: config.version || "1.5.0",
|
|
32
37
|
});
|
|
33
38
|
// Register UI resources for MCP Apps
|
|
34
39
|
registerUIResources(this.server);
|
|
35
40
|
this.registerTools();
|
|
36
41
|
this.registerResources();
|
|
42
|
+
try {
|
|
43
|
+
registerSkillPrompts(this.server);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
throw new Error(`Failed to register skill prompts: ${getErrorMessage(error)}`);
|
|
47
|
+
}
|
|
37
48
|
}
|
|
38
49
|
/**
|
|
39
50
|
* Get or derive encryption key using stored salt (thread-safe)
|
|
@@ -137,38 +148,29 @@ export class FootprintServer {
|
|
|
137
148
|
inputSchema: deleteFootprintsSchema.inputSchema,
|
|
138
149
|
outputSchema: deleteFootprintsSchema.outputSchema,
|
|
139
150
|
}, createDeleteFootprintsHandler(this.db));
|
|
140
|
-
//
|
|
141
|
-
this.server.registerTool("
|
|
142
|
-
...
|
|
143
|
-
inputSchema:
|
|
144
|
-
outputSchema:
|
|
145
|
-
},
|
|
146
|
-
// Remove tag tool
|
|
147
|
-
this.server.registerTool("remove-tag", {
|
|
148
|
-
...removeTagMetadata,
|
|
149
|
-
inputSchema: removeTagSchema.inputSchema,
|
|
150
|
-
outputSchema: removeTagSchema.outputSchema,
|
|
151
|
-
}, createRemoveTagHandler(this.db));
|
|
152
|
-
// Get tag statistics tool
|
|
153
|
-
this.server.registerTool("get-tag-stats", {
|
|
154
|
-
...getTagStatsMetadata,
|
|
155
|
-
inputSchema: getTagStatsSchema.inputSchema,
|
|
156
|
-
outputSchema: getTagStatsSchema.outputSchema,
|
|
157
|
-
}, createGetTagStatsHandler(this.db));
|
|
151
|
+
// Unified tag management tool (replaces rename-tag, remove-tag, get-tag-stats)
|
|
152
|
+
this.server.registerTool("manage-tags", {
|
|
153
|
+
...manageTagsMetadata,
|
|
154
|
+
inputSchema: manageTagsSchema.inputSchema,
|
|
155
|
+
outputSchema: manageTagsSchema.outputSchema,
|
|
156
|
+
}, createManageTagsHandler(this.db));
|
|
158
157
|
}
|
|
159
158
|
registerResources() {
|
|
160
|
-
this.server.registerResource("
|
|
161
|
-
title: "
|
|
159
|
+
this.server.registerResource("evidence", new ResourceTemplate("evidence://{id}", { list: undefined }), {
|
|
160
|
+
title: "Evidence Content",
|
|
162
161
|
description: "Access encrypted footprint record by ID",
|
|
163
162
|
mimeType: "text/plain",
|
|
164
163
|
}, async (uri, { id }) => {
|
|
165
164
|
try {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
165
|
+
if (!id || typeof id !== "string" || !/^[a-zA-Z0-9_-]+$/.test(id)) {
|
|
166
|
+
throw new Error("Invalid evidence ID format");
|
|
167
|
+
}
|
|
168
|
+
const evidence = this.db.findById(id);
|
|
169
|
+
if (!evidence) {
|
|
170
|
+
throw new Error(`Evidence with ID ${id} not found`);
|
|
169
171
|
}
|
|
170
172
|
const key = await this.getDerivedKey();
|
|
171
|
-
const decrypted = decrypt(
|
|
173
|
+
const decrypted = decrypt(evidence.encryptedContent, evidence.nonce, key);
|
|
172
174
|
return {
|
|
173
175
|
contents: [
|
|
174
176
|
{ uri: uri.href, mimeType: "text/plain", text: decrypted },
|
|
@@ -176,7 +178,7 @@ export class FootprintServer {
|
|
|
176
178
|
};
|
|
177
179
|
}
|
|
178
180
|
catch (error) {
|
|
179
|
-
throw new Error(`Failed to access
|
|
181
|
+
throw new Error(`Failed to access evidence resource: ${getErrorMessage(error)}`);
|
|
180
182
|
}
|
|
181
183
|
});
|
|
182
184
|
}
|
|
@@ -193,18 +195,25 @@ export class FootprintServer {
|
|
|
193
195
|
this.db.close();
|
|
194
196
|
}
|
|
195
197
|
}
|
|
196
|
-
|
|
198
|
+
// Export main as named function
|
|
199
|
+
export async function main() {
|
|
197
200
|
const config = {
|
|
198
|
-
dbPath: process.env.
|
|
199
|
-
|
|
201
|
+
dbPath: process.env.FOOTPRINT_DATA_DIR
|
|
202
|
+
? path.join(process.env.FOOTPRINT_DATA_DIR, "footprint.db")
|
|
203
|
+
: process.env.FOOTPRINT_DB_PATH || "./evidence.db",
|
|
204
|
+
password: process.env.FOOTPRINT_PASSPHRASE || process.env.FOOTPRINT_PASSWORD || "",
|
|
200
205
|
};
|
|
201
206
|
if (!config.password) {
|
|
202
|
-
console.error("Error:
|
|
207
|
+
console.error("Error: FOOTPRINT_PASSPHRASE environment variable required");
|
|
203
208
|
process.exit(1);
|
|
204
209
|
}
|
|
205
210
|
const server = new FootprintServer(config);
|
|
206
211
|
// Setup cleanup handlers for graceful shutdown
|
|
212
|
+
let cleanedUp = false;
|
|
207
213
|
const cleanup = () => {
|
|
214
|
+
if (cleanedUp)
|
|
215
|
+
return;
|
|
216
|
+
cleanedUp = true;
|
|
208
217
|
server.close();
|
|
209
218
|
};
|
|
210
219
|
// Handle uncaught exceptions and promise rejections
|
|
@@ -229,15 +238,21 @@ async function main() {
|
|
|
229
238
|
process.on("exit", cleanup);
|
|
230
239
|
await server.start();
|
|
231
240
|
}
|
|
232
|
-
//
|
|
233
|
-
const isMainModule =
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
241
|
+
// Only run if this is the main module (not imported by CLI)
|
|
242
|
+
const isMainModule = (() => {
|
|
243
|
+
try {
|
|
244
|
+
const thisFile = fileURLToPath(import.meta.url);
|
|
245
|
+
const mainFile = realpathSync(process.argv[1] ?? "");
|
|
246
|
+
return thisFile === mainFile;
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
})();
|
|
252
|
+
if (isMainModule && !process.argv.includes("setup")) {
|
|
237
253
|
main().catch((error) => {
|
|
238
254
|
console.error("Server error:", error);
|
|
239
255
|
process.exit(1);
|
|
240
256
|
});
|
|
241
257
|
}
|
|
242
|
-
export { FootprintTestHelpers } from "./test-helpers.js";
|
|
243
258
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/decrypt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/decrypt.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,GACd,MAAM,CA8BR"}
|