@pcircle/footprint 1.3.0 → 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.
Files changed (134) hide show
  1. package/README.md +136 -160
  2. package/SKILL.md +7 -7
  3. package/dist/src/analyzers/content-analyzer.d.ts.map +1 -1
  4. package/dist/src/analyzers/content-analyzer.js +20 -4
  5. package/dist/src/analyzers/content-analyzer.js.map +1 -1
  6. package/dist/src/cli/index.js +0 -0
  7. package/dist/src/cli/setup.d.ts.map +1 -1
  8. package/dist/src/cli/setup.js +34 -12
  9. package/dist/src/cli/setup.js.map +1 -1
  10. package/dist/src/cli/utils/env.d.ts +7 -2
  11. package/dist/src/cli/utils/env.d.ts.map +1 -1
  12. package/dist/src/cli/utils/env.js +37 -6
  13. package/dist/src/cli/utils/env.js.map +1 -1
  14. package/dist/src/index.d.ts +0 -1
  15. package/dist/src/index.d.ts.map +1 -1
  16. package/dist/src/index.js +41 -28
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/lib/crypto/decrypt.d.ts.map +1 -1
  19. package/dist/src/lib/crypto/decrypt.js +12 -8
  20. package/dist/src/lib/crypto/decrypt.js.map +1 -1
  21. package/dist/src/lib/crypto/encrypt.d.ts.map +1 -1
  22. package/dist/src/lib/crypto/encrypt.js +6 -3
  23. package/dist/src/lib/crypto/encrypt.js.map +1 -1
  24. package/dist/src/lib/crypto/key-derivation.d.ts +1 -1
  25. package/dist/src/lib/crypto/key-derivation.d.ts.map +1 -1
  26. package/dist/src/lib/crypto/key-derivation.js +11 -11
  27. package/dist/src/lib/crypto/key-derivation.js.map +1 -1
  28. package/dist/src/lib/storage/database.d.ts +46 -3
  29. package/dist/src/lib/storage/database.d.ts.map +1 -1
  30. package/dist/src/lib/storage/database.js +175 -80
  31. package/dist/src/lib/storage/database.js.map +1 -1
  32. package/dist/src/lib/storage/export.d.ts +1 -2
  33. package/dist/src/lib/storage/export.d.ts.map +1 -1
  34. package/dist/src/lib/storage/export.js +46 -33
  35. package/dist/src/lib/storage/export.js.map +1 -1
  36. package/dist/src/lib/storage/salt-storage.d.ts +1 -1
  37. package/dist/src/lib/storage/salt-storage.d.ts.map +1 -1
  38. package/dist/src/lib/storage/salt-storage.js +26 -18
  39. package/dist/src/lib/storage/salt-storage.js.map +1 -1
  40. package/dist/src/lib/storage/schema.d.ts +1 -1
  41. package/dist/src/lib/storage/schema.d.ts.map +1 -1
  42. package/dist/src/lib/storage/schema.js +29 -47
  43. package/dist/src/lib/storage/schema.js.map +1 -1
  44. package/dist/src/lib/tool-wrapper.d.ts.map +1 -1
  45. package/dist/src/lib/tool-wrapper.js +2 -2
  46. package/dist/src/lib/tool-wrapper.js.map +1 -1
  47. package/dist/src/prompts/skill-prompt.d.ts +6 -0
  48. package/dist/src/prompts/skill-prompt.d.ts.map +1 -0
  49. package/dist/src/prompts/skill-prompt.js +125 -0
  50. package/dist/src/prompts/skill-prompt.js.map +1 -0
  51. package/dist/src/tools/capture-footprint.d.ts +2 -2
  52. package/dist/src/tools/capture-footprint.d.ts.map +1 -1
  53. package/dist/src/tools/capture-footprint.js +52 -11
  54. package/dist/src/tools/capture-footprint.js.map +1 -1
  55. package/dist/src/tools/delete-footprints.d.ts +18 -1
  56. package/dist/src/tools/delete-footprints.d.ts.map +1 -1
  57. package/dist/src/tools/delete-footprints.js +53 -5
  58. package/dist/src/tools/delete-footprints.js.map +1 -1
  59. package/dist/src/tools/export-footprints.d.ts +11 -3
  60. package/dist/src/tools/export-footprints.d.ts.map +1 -1
  61. package/dist/src/tools/export-footprints.js +48 -9
  62. package/dist/src/tools/export-footprints.js.map +1 -1
  63. package/dist/src/tools/get-footprint.d.ts +1 -7
  64. package/dist/src/tools/get-footprint.d.ts.map +1 -1
  65. package/dist/src/tools/get-footprint.js +7 -3
  66. package/dist/src/tools/get-footprint.js.map +1 -1
  67. package/dist/src/tools/index.d.ts +1 -3
  68. package/dist/src/tools/index.d.ts.map +1 -1
  69. package/dist/src/tools/index.js +1 -3
  70. package/dist/src/tools/index.js.map +1 -1
  71. package/dist/src/tools/list-footprints.d.ts +1 -15
  72. package/dist/src/tools/list-footprints.d.ts.map +1 -1
  73. package/dist/src/tools/list-footprints.js +17 -6
  74. package/dist/src/tools/list-footprints.js.map +1 -1
  75. package/dist/src/tools/manage-tags.d.ts +47 -0
  76. package/dist/src/tools/manage-tags.d.ts.map +1 -0
  77. package/dist/src/tools/manage-tags.js +109 -0
  78. package/dist/src/tools/manage-tags.js.map +1 -0
  79. package/dist/src/tools/search-footprints.d.ts +2 -16
  80. package/dist/src/tools/search-footprints.d.ts.map +1 -1
  81. package/dist/src/tools/search-footprints.js +23 -7
  82. package/dist/src/tools/search-footprints.js.map +1 -1
  83. package/dist/src/tools/suggest-capture.d.ts +1 -1
  84. package/dist/src/tools/suggest-capture.d.ts.map +1 -1
  85. package/dist/src/tools/suggest-capture.js +6 -2
  86. package/dist/src/tools/suggest-capture.js.map +1 -1
  87. package/dist/src/tools/verify-footprint.d.ts +7 -54
  88. package/dist/src/tools/verify-footprint.d.ts.map +1 -1
  89. package/dist/src/tools/verify-footprint.js +11 -8
  90. package/dist/src/tools/verify-footprint.js.map +1 -1
  91. package/dist/src/types.d.ts +4 -4
  92. package/dist/src/types.d.ts.map +1 -1
  93. package/dist/src/ui/register.js +1 -1
  94. package/dist/src/ui/register.js.map +1 -1
  95. package/dist/ui/dashboard.html +80 -67
  96. package/dist/ui/detail.html +62 -49
  97. package/dist/ui/export.html +64 -51
  98. package/package.json +18 -13
  99. package/dist/src/lib/errors/base-error.d.ts +0 -15
  100. package/dist/src/lib/errors/base-error.d.ts.map +0 -1
  101. package/dist/src/lib/errors/base-error.js +0 -34
  102. package/dist/src/lib/errors/base-error.js.map +0 -1
  103. package/dist/src/lib/errors/crypto-error.d.ts +0 -29
  104. package/dist/src/lib/errors/crypto-error.d.ts.map +0 -1
  105. package/dist/src/lib/errors/crypto-error.js +0 -43
  106. package/dist/src/lib/errors/crypto-error.js.map +0 -1
  107. package/dist/src/lib/errors/index.d.ts +0 -26
  108. package/dist/src/lib/errors/index.d.ts.map +0 -1
  109. package/dist/src/lib/errors/index.js +0 -26
  110. package/dist/src/lib/errors/index.js.map +0 -1
  111. package/dist/src/lib/errors/storage-error.d.ts +0 -25
  112. package/dist/src/lib/errors/storage-error.d.ts.map +0 -1
  113. package/dist/src/lib/errors/storage-error.js +0 -38
  114. package/dist/src/lib/errors/storage-error.js.map +0 -1
  115. package/dist/src/lib/errors/validation-error.d.ts +0 -21
  116. package/dist/src/lib/errors/validation-error.d.ts.map +0 -1
  117. package/dist/src/lib/errors/validation-error.js +0 -29
  118. package/dist/src/lib/errors/validation-error.js.map +0 -1
  119. package/dist/src/test-helpers.d.ts +0 -33
  120. package/dist/src/test-helpers.d.ts.map +0 -1
  121. package/dist/src/test-helpers.js +0 -108
  122. package/dist/src/test-helpers.js.map +0 -1
  123. package/dist/src/tools/get-tag-stats.d.ts +0 -30
  124. package/dist/src/tools/get-tag-stats.d.ts.map +0 -1
  125. package/dist/src/tools/get-tag-stats.js +0 -33
  126. package/dist/src/tools/get-tag-stats.js.map +0 -1
  127. package/dist/src/tools/remove-tag.d.ts +0 -22
  128. package/dist/src/tools/remove-tag.d.ts.map +0 -1
  129. package/dist/src/tools/remove-tag.js +0 -30
  130. package/dist/src/tools/remove-tag.js.map +0 -1
  131. package/dist/src/tools/rename-tag.d.ts +0 -24
  132. package/dist/src/tools/rename-tag.d.ts.map +0 -1
  133. package/dist/src/tools/rename-tag.js +0 -34
  134. package/dist/src/tools/rename-tag.js.map +0 -1
@@ -1,10 +1,15 @@
1
1
  /**
2
2
  * Generate environment variable export statement with proper escaping
3
- * Note: _shell parameter reserved for future shell-specific syntax (e.g., fish)
3
+ * Supports POSIX shells (bash/zsh) and fish shell syntax
4
4
  */
5
- export declare function generateEnvExport(_shell: string, dataDir: string, passphrase: string): string;
5
+ export declare function generateEnvExport(shell: string, dataDir: string, passphrase: string): string;
6
6
  /**
7
7
  * Append environment variables to shell RC file with secure permissions (0o600)
8
8
  */
9
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;
10
15
  //# sourceMappingURL=env.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/env.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,MAAM,CAQR;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA8BrE"}
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"}
@@ -3,17 +3,31 @@ import * as fs from "fs";
3
3
  /**
4
4
  * Escape string for safe use in shell single quotes
5
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
6
8
  */
7
- function escapeShellString(str) {
8
- // In single quotes, only single quote needs escaping
9
- // We escape it by ending the quote, adding an escaped quote, and starting a new quote
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)
10
15
  return `'${str.replace(/'/g, "'\\''")}'`;
11
16
  }
12
17
  /**
13
18
  * Generate environment variable export statement with proper escaping
14
- * Note: _shell parameter reserved for future shell-specific syntax (e.g., fish)
19
+ * Supports POSIX shells (bash/zsh) and fish shell syntax
15
20
  */
16
- export function generateEnvExport(_shell, dataDir, passphrase) {
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
+ }
17
31
  return [
18
32
  "",
19
33
  "# Footprint MCP Server Environment Variables",
@@ -23,7 +37,7 @@ export function generateEnvExport(_shell, dataDir, passphrase) {
23
37
  ].join("\n");
24
38
  }
25
39
  const FOOTPRINT_HEADER = "# Footprint MCP Server";
26
- const FOOTPRINT_BLOCK_REGEX = /# Footprint MCP Server[\s\S]*?export FOOTPRINT_PASSPHRASE/;
40
+ const FOOTPRINT_BLOCK_REGEX = /\n?# Footprint MCP Server[^\n]*\n(?:(?:export |set -gx )FOOTPRINT_[^\n]*\n?)+/;
27
41
  /**
28
42
  * Append environment variables to shell RC file with secure permissions (0o600)
29
43
  */
@@ -51,4 +65,21 @@ export function appendToShellRc(rcPath, content) {
51
65
  console.warn(`Warning: Could not set secure permissions on ${rcPath}: ${message}`);
52
66
  }
53
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
+ }
54
85
  //# sourceMappingURL=env.js.map
@@ -1 +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;;;GAGG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,qDAAqD;IACrD,sFAAsF;IACtF,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAc,EACd,OAAe,EACf,UAAkB;IAElB,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,2DAA2D,CAAC;AAE9D;;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"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../../src/cli/utils/env.ts"],"names":[],"mappings":"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"}
@@ -35,5 +35,4 @@ export declare class FootprintServer {
35
35
  close(): void;
36
36
  }
37
37
  export declare function main(): Promise<void>;
38
- export { FootprintTestHelpers } from "./test-helpers.js";
39
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAuC/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;IAuBhC;;;;;;;OAOG;YACW,aAAa;IAsC3B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,aAAa;IA2HrB,OAAO,CAAC,iBAAiB;IAqCnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;OAGG;IACH,KAAK,IAAI,IAAI;CAId;AAGD,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA4C1C;AAeD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
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,5 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  /* global console, process */
3
+ import * as path from "path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { realpathSync } from "node:fs";
3
6
  import { McpServer, ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
4
7
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
8
  import { EvidenceDatabase, storeSalt, retrieveSalt, } from "./lib/storage/index.js";
@@ -7,8 +10,9 @@ import { deriveKey, rederiveKey } from "./lib/crypto/index.js";
7
10
  import { registerUIResources } from "./ui/register.js";
8
11
  import { getErrorMessage } from "./lib/tool-wrapper.js";
9
12
  import { decrypt } from "./lib/crypto/index.js";
13
+ import { registerSkillPrompts } from "./prompts/skill-prompt.js";
10
14
  // Import all tool handlers
11
- 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, renameTagSchema, renameTagMetadata, createRenameTagHandler, removeTagSchema, removeTagMetadata, createRemoveTagHandler, getTagStatsSchema, getTagStatsMetadata, createGetTagStatsHandler, } from "./tools/index.js";
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";
12
16
  /**
13
17
  * Footprint Server - Captures LLM conversations as encrypted evidence
14
18
  * with Git timestamps and export capabilities.
@@ -28,13 +32,19 @@ export class FootprintServer {
28
32
  throw new Error(`Failed to initialize database: ${getErrorMessage(error)}`);
29
33
  }
30
34
  this.server = new McpServer({
31
- name: config.name || "traceguard-mcp",
32
- version: config.version || "0.1.0",
35
+ name: config.name || "footprint",
36
+ version: config.version || "1.5.0",
33
37
  });
34
38
  // Register UI resources for MCP Apps
35
39
  registerUIResources(this.server);
36
40
  this.registerTools();
37
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
+ }
38
48
  }
39
49
  /**
40
50
  * Get or derive encryption key using stored salt (thread-safe)
@@ -138,24 +148,12 @@ export class FootprintServer {
138
148
  inputSchema: deleteFootprintsSchema.inputSchema,
139
149
  outputSchema: deleteFootprintsSchema.outputSchema,
140
150
  }, createDeleteFootprintsHandler(this.db));
141
- // Rename tag tool
142
- this.server.registerTool("rename-tag", {
143
- ...renameTagMetadata,
144
- inputSchema: renameTagSchema.inputSchema,
145
- outputSchema: renameTagSchema.outputSchema,
146
- }, createRenameTagHandler(this.db));
147
- // Remove tag tool
148
- this.server.registerTool("remove-tag", {
149
- ...removeTagMetadata,
150
- inputSchema: removeTagSchema.inputSchema,
151
- outputSchema: removeTagSchema.outputSchema,
152
- }, createRemoveTagHandler(this.db));
153
- // Get tag statistics tool
154
- this.server.registerTool("get-tag-stats", {
155
- ...getTagStatsMetadata,
156
- inputSchema: getTagStatsSchema.inputSchema,
157
- outputSchema: getTagStatsSchema.outputSchema,
158
- }, 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));
159
157
  }
160
158
  registerResources() {
161
159
  this.server.registerResource("evidence", new ResourceTemplate("evidence://{id}", { list: undefined }), {
@@ -164,6 +162,9 @@ export class FootprintServer {
164
162
  mimeType: "text/plain",
165
163
  }, async (uri, { id }) => {
166
164
  try {
165
+ if (!id || typeof id !== "string" || !/^[a-zA-Z0-9_-]+$/.test(id)) {
166
+ throw new Error("Invalid evidence ID format");
167
+ }
167
168
  const evidence = this.db.findById(id);
168
169
  if (!evidence) {
169
170
  throw new Error(`Evidence with ID ${id} not found`);
@@ -197,16 +198,22 @@ export class FootprintServer {
197
198
  // Export main as named function
198
199
  export async function main() {
199
200
  const config = {
200
- dbPath: process.env.FOOTPRINT_DB_PATH || "./evidence.db",
201
- password: process.env.FOOTPRINT_PASSWORD || "",
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 || "",
202
205
  };
203
206
  if (!config.password) {
204
- console.error("Error: FOOTPRINT_PASSWORD environment variable required");
207
+ console.error("Error: FOOTPRINT_PASSPHRASE environment variable required");
205
208
  process.exit(1);
206
209
  }
207
210
  const server = new FootprintServer(config);
208
211
  // Setup cleanup handlers for graceful shutdown
212
+ let cleanedUp = false;
209
213
  const cleanup = () => {
214
+ if (cleanedUp)
215
+ return;
216
+ cleanedUp = true;
210
217
  server.close();
211
218
  };
212
219
  // Handle uncaught exceptions and promise rejections
@@ -232,14 +239,20 @@ export async function main() {
232
239
  await server.start();
233
240
  }
234
241
  // Only run if this is the main module (not imported by CLI)
235
- const isMainModule = import.meta.url === `file://${process.argv[1]}` ||
236
- process.argv[1]?.endsWith("/footprint") ||
237
- process.argv[1]?.endsWith("/dist/index.js");
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
+ })();
238
252
  if (isMainModule && !process.argv.includes("setup")) {
239
253
  main().catch((error) => {
240
254
  console.error("Server error:", error);
241
255
  process.exit(1);
242
256
  });
243
257
  }
244
- export { FootprintTestHelpers } from "./test-helpers.js";
245
258
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
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":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,GACd,MAAM,CA0BR"}
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"}
@@ -1,4 +1,5 @@
1
- import { xchacha20poly1305 } from '@noble/ciphers/chacha';
1
+ /* global TextDecoder */
2
+ import { xchacha20poly1305 } from "@noble/ciphers/chacha.js";
2
3
  /**
3
4
  * Decrypt ciphertext using XChaCha20-Poly1305 AEAD
4
5
  *
@@ -10,10 +11,10 @@ import { xchacha20poly1305 } from '@noble/ciphers/chacha';
10
11
  */
11
12
  export function decrypt(ciphertext, nonce, key) {
12
13
  if (key.length !== 32) {
13
- throw new Error('Key must be 32 bytes');
14
+ throw new Error("Key must be 32 bytes");
14
15
  }
15
16
  if (nonce.length !== 24) {
16
- throw new Error('Nonce must be 24 bytes');
17
+ throw new Error("Nonce must be 24 bytes");
17
18
  }
18
19
  // Create cipher instance
19
20
  const cipher = xchacha20poly1305(key, nonce);
@@ -21,14 +22,17 @@ export function decrypt(ciphertext, nonce, key) {
21
22
  // Decrypt and verify authentication tag
22
23
  const plaintextBytes = cipher.decrypt(ciphertext);
23
24
  // Convert bytes back to string
24
- return new TextDecoder().decode(plaintextBytes);
25
+ const result = new TextDecoder().decode(plaintextBytes);
26
+ // Zero decrypted bytes from memory (defense-in-depth)
27
+ plaintextBytes.fill(0);
28
+ return result;
25
29
  }
26
30
  catch (error) {
27
- // Log detailed error for debugging (server-side only, never exposed to client)
28
- const originalError = error instanceof Error ? error.message : String(error);
29
- console.error('[Decrypt] Decryption failed:', originalError);
30
31
  // User-facing error remains generic (security best practice)
31
- throw new Error('Decryption failed: invalid key or tampered data');
32
+ // Original error preserved in cause chain for debugging
33
+ throw new Error("Decryption failed: invalid key or tampered data", {
34
+ cause: error,
35
+ });
32
36
  }
33
37
  }
34
38
  //# sourceMappingURL=decrypt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../../../src/lib/crypto/decrypt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CACrB,UAAsB,EACtB,KAAiB,EACjB,GAAe;IAEf,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,yBAAyB;IACzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,wCAAwC;QACxC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAElD,+BAA+B;QAC/B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+EAA+E;QAC/E,MAAM,aAAa,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7E,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,aAAa,CAAC,CAAC;QAE7D,6DAA6D;QAC7D,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../../../src/lib/crypto/decrypt.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CACrB,UAAsB,EACtB,KAAiB,EACjB,GAAe;IAEf,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,yBAAyB;IACzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,wCAAwC;QACxC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAElD,+BAA+B;QAC/B,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAExD,sDAAsD;QACtD,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,6DAA6D;QAC7D,wDAAwD;QACxD,MAAM,IAAI,KAAK,CAAC,iDAAiD,EAAE;YACjE,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/encrypt.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,aAAa,CAkBzE"}
1
+ {"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/encrypt.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,aAAa,CAqBzE"}
@@ -1,5 +1,6 @@
1
- import { xchacha20poly1305 } from '@noble/ciphers/chacha';
2
- import { randomBytes } from '@noble/hashes/utils';
1
+ /* global TextEncoder */
2
+ import { xchacha20poly1305 } from "@noble/ciphers/chacha.js";
3
+ import { randomBytes } from "@noble/hashes/utils.js";
3
4
  /**
4
5
  * Encrypt plaintext using XChaCha20-Poly1305 AEAD
5
6
  *
@@ -9,7 +10,7 @@ import { randomBytes } from '@noble/hashes/utils';
9
10
  */
10
11
  export function encrypt(plaintext, key) {
11
12
  if (key.length !== 32) {
12
- throw new Error('Key must be 32 bytes');
13
+ throw new Error("Key must be 32 bytes");
13
14
  }
14
15
  // Generate random 24-byte nonce (XChaCha20 extended nonce)
15
16
  const nonce = randomBytes(24);
@@ -19,6 +20,8 @@ export function encrypt(plaintext, key) {
19
20
  const cipher = xchacha20poly1305(key, nonce);
20
21
  // Encrypt with authentication
21
22
  const ciphertext = cipher.encrypt(plaintextBytes);
23
+ // Zero plaintext bytes from memory (defense-in-depth)
24
+ plaintextBytes.fill(0);
22
25
  return { ciphertext, nonce };
23
26
  }
24
27
  //# sourceMappingURL=encrypt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../../../../src/lib/crypto/encrypt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAOlD;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,SAAiB,EAAE,GAAe;IACxD,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,2DAA2D;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAE9B,6BAA6B;IAC7B,MAAM,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE3D,yBAAyB;IACzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAE7C,8BAA8B;IAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAElD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../../../../src/lib/crypto/encrypt.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAOrD;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,SAAiB,EAAE,GAAe;IACxD,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,2DAA2D;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAE9B,6BAA6B;IAC7B,MAAM,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE3D,yBAAyB;IACzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAE7C,8BAA8B;IAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAElD,sDAAsD;IACtD,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEvB,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { DerivedKey, KeyDerivationParams } from './types.js';
1
+ import type { DerivedKey, KeyDerivationParams } from "./types.js";
2
2
  /**
3
3
  * Derive encryption key from password using Argon2id
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"key-derivation.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/key-derivation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGlE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,GACxC,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,GACxC,OAAO,CAAC,UAAU,CAAC,CAwBrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,UAAU,EACvB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,GACxC,OAAO,CAAC,OAAO,CAAC,CAkClB"}
1
+ {"version":3,"file":"key-derivation.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/key-derivation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGlE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,GACxC,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,GACxC,OAAO,CAAC,UAAU,CAAC,CAoBrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,UAAU,EACvB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,GACxC,OAAO,CAAC,OAAO,CAAC,CA8BlB"}
@@ -1,7 +1,7 @@
1
- import { argon2id } from '@noble/hashes/argon2';
2
- import { randomBytes } from '@noble/hashes/utils';
3
- import { timingSafeEqual } from 'node:crypto';
4
- import { DEFAULT_KDF_PARAMS } from './types.js';
1
+ import { argon2id } from "@noble/hashes/argon2.js";
2
+ import { randomBytes } from "@noble/hashes/utils.js";
3
+ import { timingSafeEqual } from "node:crypto";
4
+ import { DEFAULT_KDF_PARAMS } from "./types.js";
5
5
  /**
6
6
  * Derive encryption key from password using Argon2id
7
7
  *
@@ -22,7 +22,7 @@ import { DEFAULT_KDF_PARAMS } from './types.js';
22
22
  */
23
23
  export async function deriveKey(password, params = {}) {
24
24
  if (!password || password.length === 0) {
25
- throw new Error('Password cannot be empty');
25
+ throw new Error("Password cannot be empty");
26
26
  }
27
27
  const kdfParams = { ...DEFAULT_KDF_PARAMS, ...params };
28
28
  // Generate random salt (16 bytes)
@@ -47,11 +47,11 @@ export async function deriveKey(password, params = {}) {
47
47
  */
48
48
  export async function rederiveKey(password, salt, params = {}) {
49
49
  if (!password || password.length === 0) {
50
- throw new Error('Password cannot be empty');
50
+ throw new Error("Password cannot be empty");
51
51
  }
52
52
  const kdfParams = { ...DEFAULT_KDF_PARAMS, ...params };
53
53
  if (salt.length !== 16) {
54
- throw new Error('Salt must be 16 bytes');
54
+ throw new Error("Salt must be 16 bytes");
55
55
  }
56
56
  // Re-derive key using same salt
57
57
  const key = argon2id(password, salt, {
@@ -76,13 +76,13 @@ export async function rederiveKey(password, salt, params = {}) {
76
76
  */
77
77
  export async function verifyKey(password, salt, expectedKey, params = {}) {
78
78
  if (!password || password.length === 0) {
79
- throw new Error('Password cannot be empty');
79
+ throw new Error("Password cannot be empty");
80
80
  }
81
81
  if (salt.length !== 16) {
82
- throw new Error('Salt must be 16 bytes');
82
+ throw new Error("Salt must be 16 bytes");
83
83
  }
84
84
  if (expectedKey.length !== 32) {
85
- throw new Error('Expected key must be 32 bytes');
85
+ throw new Error("Expected key must be 32 bytes");
86
86
  }
87
87
  const kdfParams = { ...DEFAULT_KDF_PARAMS, ...params };
88
88
  // Re-derive key using same salt
@@ -94,7 +94,7 @@ export async function verifyKey(password, salt, expectedKey, params = {}) {
94
94
  });
95
95
  // Constant-time comparison to prevent timing attacks
96
96
  try {
97
- return timingSafeEqual(Buffer.from(derivedKey), Buffer.from(expectedKey));
97
+ return timingSafeEqual(derivedKey, expectedKey);
98
98
  }
99
99
  catch {
100
100
  // timingSafeEqual throws if lengths don't match
@@ -1 +1 @@
1
- {"version":3,"file":"key-derivation.js","sourceRoot":"","sources":["../../../../src/lib/crypto/key-derivation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"key-derivation.js","sourceRoot":"","sources":["../../../../src/lib/crypto/key-derivation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,SAAuC,EAAE;IAEzC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,MAAM,EAAE,CAAC;IAEvD,kCAAkC;IAClC,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAE7B,4BAA4B;IAC5B,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE;QACnC,CAAC,EAAE,SAAS,CAAC,MAAM;QACnB,CAAC,EAAE,SAAS,CAAC,UAAU;QACvB,CAAC,EAAE,SAAS,CAAC,WAAW;QACxB,KAAK,EAAE,SAAS,CAAC,SAAS;KAC3B,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,IAAgB,EAChB,SAAuC,EAAE;IAEzC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,MAAM,EAAE,CAAC;IAEvD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,gCAAgC;IAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE;QACnC,CAAC,EAAE,SAAS,CAAC,MAAM;QACnB,CAAC,EAAE,SAAS,CAAC,UAAU;QACvB,CAAC,EAAE,SAAS,CAAC,WAAW;QACxB,KAAK,EAAE,SAAS,CAAC,SAAS;KAC3B,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,IAAgB,EAChB,WAAuB,EACvB,SAAuC,EAAE;IAEzC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,MAAM,EAAE,CAAC;IAEvD,gCAAgC;IAChC,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE;QAC1C,CAAC,EAAE,SAAS,CAAC,MAAM;QACnB,CAAC,EAAE,SAAS,CAAC,UAAU;QACvB,CAAC,EAAE,SAAS,CAAC,WAAW;QACxB,KAAK,EAAE,SAAS,CAAC,SAAS;KAC3B,CAAC,CAAC;IAEH,qDAAqD;IACrD,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
- import Database from 'better-sqlite3';
2
- import type { Evidence } from './types.js';
1
+ import Database from "better-sqlite3";
2
+ import type { Evidence } from "./types.js";
3
3
  /**
4
4
  * Evidence database with CRUD operations
5
5
  * Manages encrypted evidence storage with SQLite backend
@@ -17,7 +17,7 @@ export declare class EvidenceDatabase {
17
17
  * @param evidence - Evidence data without id, createdAt, updatedAt
18
18
  * @returns UUID of created evidence
19
19
  */
20
- create(evidence: Omit<Evidence, 'id' | 'createdAt' | 'updatedAt'>): string;
20
+ create(evidence: Omit<Evidence, "id" | "createdAt" | "updatedAt">): string;
21
21
  /**
22
22
  * Finds evidence by ID
23
23
  * @param id - Evidence UUID
@@ -53,6 +53,38 @@ export declare class EvidenceDatabase {
53
53
  * @throws Error if tags array is empty or all tags are whitespace
54
54
  */
55
55
  addTags(id: string, tags: string[]): void;
56
+ /**
57
+ * Builds a WHERE clause from search/filter options
58
+ * @param options - Filter criteria
59
+ * @returns SQL WHERE clause string and parameter values
60
+ */
61
+ private buildWhereClause;
62
+ /**
63
+ * Gets count of evidences matching filter criteria
64
+ * @param options - Filter criteria (query, tags, date range)
65
+ * @returns Number of matching evidences
66
+ */
67
+ getFilteredCount(options: {
68
+ query?: string;
69
+ tags?: string[];
70
+ dateFrom?: string;
71
+ dateTo?: string;
72
+ }): number;
73
+ /**
74
+ * Search evidences and return both paginated results and total matching count
75
+ * in a single pass (builds WHERE clause once instead of twice)
76
+ */
77
+ searchWithCount(options: {
78
+ query?: string;
79
+ tags?: string[];
80
+ dateFrom?: string;
81
+ dateTo?: string;
82
+ limit?: number;
83
+ offset?: number;
84
+ }): {
85
+ evidences: Evidence[];
86
+ total: number;
87
+ };
56
88
  /**
57
89
  * Search and filter evidences by various criteria
58
90
  * @param options - Search and filter options
@@ -105,6 +137,17 @@ export declare class EvidenceDatabase {
105
137
  * @returns Map of tag to count
106
138
  */
107
139
  getTagCounts(): Map<string, number>;
140
+ /**
141
+ * Gets total count of all evidence records
142
+ * @returns Total number of evidences in the database
143
+ */
144
+ getTotalCount(): number;
145
+ /**
146
+ * Gets count of evidence records matching a search query
147
+ * @param query - Search text to match against conversationId and tags
148
+ * @returns Number of matching evidences
149
+ */
150
+ getSearchCount(query: string): number;
108
151
  /**
109
152
  * Get the underlying database instance
110
153
  * Used for salt storage and other low-level operations
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../../src/lib/storage/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAqB3C;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAoB;IAE9B;;;;OAIG;gBACS,MAAM,EAAE,MAAM;IAW1B;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,MAAM;IAmC1E;;;;OAIG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAkBrC;;;;OAIG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ,EAAE;IAiBxD;;;;OAIG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,QAAQ,EAAE;IA4B/D;;;;;OAKG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAoB5E;;;;;OAKG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAwCzC;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,QAAQ,EAAE;IAqEd;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAU3B;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM;IAajC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAepD;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IA4BjD;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IA4B9B;;;OAGG;IACH,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAmBnC;;;;;OAKG;IACH,KAAK,IAAI,QAAQ,CAAC,QAAQ;IAI1B;;;OAGG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;OAKG;IACH,OAAO,CAAC,aAAa;CAiBtB"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../../src/lib/storage/database.ts"],"names":[],"mappings":"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"}