@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.
Files changed (184) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +125 -161
  3. package/SKILL.md +50 -50
  4. package/dist/src/analyzers/content-analyzer.d.ts.map +1 -1
  5. package/dist/src/analyzers/content-analyzer.js +20 -4
  6. package/dist/src/analyzers/content-analyzer.js.map +1 -1
  7. package/dist/src/cli/constants.d.ts +20 -0
  8. package/dist/src/cli/constants.d.ts.map +1 -0
  9. package/dist/src/cli/constants.js +25 -0
  10. package/dist/src/cli/constants.js.map +1 -0
  11. package/dist/src/cli/index.d.ts +3 -0
  12. package/dist/src/cli/index.d.ts.map +1 -0
  13. package/dist/src/cli/index.js +25 -0
  14. package/dist/src/cli/index.js.map +1 -0
  15. package/dist/src/cli/setup.d.ts +6 -0
  16. package/dist/src/cli/setup.d.ts.map +1 -0
  17. package/dist/src/cli/setup.js +356 -0
  18. package/dist/src/cli/setup.js.map +1 -0
  19. package/dist/src/cli/types.d.ts +38 -0
  20. package/dist/src/cli/types.d.ts.map +1 -0
  21. package/dist/src/cli/types.js +5 -0
  22. package/dist/src/cli/types.js.map +1 -0
  23. package/dist/src/cli/utils/config.d.ts +19 -0
  24. package/dist/src/cli/utils/config.d.ts.map +1 -0
  25. package/dist/src/cli/utils/config.js +86 -0
  26. package/dist/src/cli/utils/config.js.map +1 -0
  27. package/dist/src/cli/utils/detect.d.ts +14 -0
  28. package/dist/src/cli/utils/detect.d.ts.map +1 -0
  29. package/dist/src/cli/utils/detect.js +57 -0
  30. package/dist/src/cli/utils/detect.js.map +1 -0
  31. package/dist/src/cli/utils/env.d.ts +15 -0
  32. package/dist/src/cli/utils/env.d.ts.map +1 -0
  33. package/dist/src/cli/utils/env.js +85 -0
  34. package/dist/src/cli/utils/env.js.map +1 -0
  35. package/dist/src/cli/utils/validation.d.ts +17 -0
  36. package/dist/src/cli/utils/validation.d.ts.map +1 -0
  37. package/dist/src/cli/utils/validation.js +77 -0
  38. package/dist/src/cli/utils/validation.js.map +1 -0
  39. package/dist/src/index.d.ts +1 -1
  40. package/dist/src/index.d.ts.map +1 -1
  41. package/dist/src/index.js +53 -38
  42. package/dist/src/index.js.map +1 -1
  43. package/dist/src/lib/crypto/decrypt.d.ts.map +1 -1
  44. package/dist/src/lib/crypto/decrypt.js +12 -8
  45. package/dist/src/lib/crypto/decrypt.js.map +1 -1
  46. package/dist/src/lib/crypto/encrypt.d.ts.map +1 -1
  47. package/dist/src/lib/crypto/encrypt.js +6 -3
  48. package/dist/src/lib/crypto/encrypt.js.map +1 -1
  49. package/dist/src/lib/crypto/key-derivation.d.ts +1 -1
  50. package/dist/src/lib/crypto/key-derivation.d.ts.map +1 -1
  51. package/dist/src/lib/crypto/key-derivation.js +11 -11
  52. package/dist/src/lib/crypto/key-derivation.js.map +1 -1
  53. package/dist/src/lib/storage/database.d.ts +46 -3
  54. package/dist/src/lib/storage/database.d.ts.map +1 -1
  55. package/dist/src/lib/storage/database.js +175 -80
  56. package/dist/src/lib/storage/database.js.map +1 -1
  57. package/dist/src/lib/storage/export.d.ts +3 -4
  58. package/dist/src/lib/storage/export.d.ts.map +1 -1
  59. package/dist/src/lib/storage/export.js +75 -62
  60. package/dist/src/lib/storage/export.js.map +1 -1
  61. package/dist/src/lib/storage/salt-storage.d.ts +1 -1
  62. package/dist/src/lib/storage/salt-storage.d.ts.map +1 -1
  63. package/dist/src/lib/storage/salt-storage.js +26 -18
  64. package/dist/src/lib/storage/salt-storage.js.map +1 -1
  65. package/dist/src/lib/storage/schema.d.ts +1 -1
  66. package/dist/src/lib/storage/schema.d.ts.map +1 -1
  67. package/dist/src/lib/storage/schema.js +29 -47
  68. package/dist/src/lib/storage/schema.js.map +1 -1
  69. package/dist/src/lib/tool-wrapper.d.ts.map +1 -1
  70. package/dist/src/lib/tool-wrapper.js +2 -2
  71. package/dist/src/lib/tool-wrapper.js.map +1 -1
  72. package/dist/src/prompts/skill-prompt.d.ts +6 -0
  73. package/dist/src/prompts/skill-prompt.d.ts.map +1 -0
  74. package/dist/src/prompts/skill-prompt.js +125 -0
  75. package/dist/src/prompts/skill-prompt.js.map +1 -0
  76. package/dist/src/tools/capture-footprint.d.ts +2 -2
  77. package/dist/src/tools/capture-footprint.d.ts.map +1 -1
  78. package/dist/src/tools/capture-footprint.js +53 -12
  79. package/dist/src/tools/capture-footprint.js.map +1 -1
  80. package/dist/src/tools/delete-footprints.d.ts +19 -2
  81. package/dist/src/tools/delete-footprints.d.ts.map +1 -1
  82. package/dist/src/tools/delete-footprints.js +56 -8
  83. package/dist/src/tools/delete-footprints.js.map +1 -1
  84. package/dist/src/tools/export-footprints.d.ts +14 -6
  85. package/dist/src/tools/export-footprints.d.ts.map +1 -1
  86. package/dist/src/tools/export-footprints.js +54 -15
  87. package/dist/src/tools/export-footprints.js.map +1 -1
  88. package/dist/src/tools/get-footprint.d.ts +1 -7
  89. package/dist/src/tools/get-footprint.d.ts.map +1 -1
  90. package/dist/src/tools/get-footprint.js +26 -22
  91. package/dist/src/tools/get-footprint.js.map +1 -1
  92. package/dist/src/tools/index.d.ts +1 -3
  93. package/dist/src/tools/index.d.ts.map +1 -1
  94. package/dist/src/tools/index.js +1 -3
  95. package/dist/src/tools/index.js.map +1 -1
  96. package/dist/src/tools/list-footprints.d.ts +3 -17
  97. package/dist/src/tools/list-footprints.d.ts.map +1 -1
  98. package/dist/src/tools/list-footprints.js +27 -16
  99. package/dist/src/tools/list-footprints.js.map +1 -1
  100. package/dist/src/tools/manage-tags.d.ts +47 -0
  101. package/dist/src/tools/manage-tags.d.ts.map +1 -0
  102. package/dist/src/tools/manage-tags.js +109 -0
  103. package/dist/src/tools/manage-tags.js.map +1 -0
  104. package/dist/src/tools/search-footprints.d.ts +4 -18
  105. package/dist/src/tools/search-footprints.d.ts.map +1 -1
  106. package/dist/src/tools/search-footprints.js +32 -16
  107. package/dist/src/tools/search-footprints.js.map +1 -1
  108. package/dist/src/tools/suggest-capture.d.ts +1 -1
  109. package/dist/src/tools/suggest-capture.d.ts.map +1 -1
  110. package/dist/src/tools/suggest-capture.js +6 -2
  111. package/dist/src/tools/suggest-capture.js.map +1 -1
  112. package/dist/src/tools/verify-footprint.d.ts +7 -54
  113. package/dist/src/tools/verify-footprint.d.ts.map +1 -1
  114. package/dist/src/tools/verify-footprint.js +22 -19
  115. package/dist/src/tools/verify-footprint.js.map +1 -1
  116. package/dist/src/types.d.ts +4 -4
  117. package/dist/src/types.d.ts.map +1 -1
  118. package/dist/src/ui/register.js +3 -3
  119. package/dist/src/ui/register.js.map +1 -1
  120. package/dist/ui/dashboard.html +78 -65
  121. package/dist/ui/detail.html +69 -56
  122. package/dist/ui/export.html +72 -59
  123. package/package.json +28 -16
  124. package/dist/src/lib/errors/base-error.d.ts +0 -15
  125. package/dist/src/lib/errors/base-error.d.ts.map +0 -1
  126. package/dist/src/lib/errors/base-error.js +0 -34
  127. package/dist/src/lib/errors/base-error.js.map +0 -1
  128. package/dist/src/lib/errors/crypto-error.d.ts +0 -29
  129. package/dist/src/lib/errors/crypto-error.d.ts.map +0 -1
  130. package/dist/src/lib/errors/crypto-error.js +0 -43
  131. package/dist/src/lib/errors/crypto-error.js.map +0 -1
  132. package/dist/src/lib/errors/index.d.ts +0 -26
  133. package/dist/src/lib/errors/index.d.ts.map +0 -1
  134. package/dist/src/lib/errors/index.js +0 -26
  135. package/dist/src/lib/errors/index.js.map +0 -1
  136. package/dist/src/lib/errors/storage-error.d.ts +0 -25
  137. package/dist/src/lib/errors/storage-error.d.ts.map +0 -1
  138. package/dist/src/lib/errors/storage-error.js +0 -38
  139. package/dist/src/lib/errors/storage-error.js.map +0 -1
  140. package/dist/src/lib/errors/validation-error.d.ts +0 -21
  141. package/dist/src/lib/errors/validation-error.d.ts.map +0 -1
  142. package/dist/src/lib/errors/validation-error.js +0 -29
  143. package/dist/src/lib/errors/validation-error.js.map +0 -1
  144. package/dist/src/test-helpers.d.ts +0 -33
  145. package/dist/src/test-helpers.d.ts.map +0 -1
  146. package/dist/src/test-helpers.js +0 -108
  147. package/dist/src/test-helpers.js.map +0 -1
  148. package/dist/src/tools/get-tag-stats.d.ts +0 -30
  149. package/dist/src/tools/get-tag-stats.d.ts.map +0 -1
  150. package/dist/src/tools/get-tag-stats.js +0 -33
  151. package/dist/src/tools/get-tag-stats.js.map +0 -1
  152. package/dist/src/tools/remove-tag.d.ts +0 -22
  153. package/dist/src/tools/remove-tag.d.ts.map +0 -1
  154. package/dist/src/tools/remove-tag.js +0 -30
  155. package/dist/src/tools/remove-tag.js.map +0 -1
  156. package/dist/src/tools/rename-tag.d.ts +0 -24
  157. package/dist/src/tools/rename-tag.d.ts.map +0 -1
  158. package/dist/src/tools/rename-tag.js +0 -34
  159. package/dist/src/tools/rename-tag.js.map +0 -1
  160. package/dist/tests/error-handling.test.d.ts +0 -2
  161. package/dist/tests/error-handling.test.d.ts.map +0 -1
  162. package/dist/tests/error-handling.test.js +0 -114
  163. package/dist/tests/error-handling.test.js.map +0 -1
  164. package/dist/tests/fixtures.d.ts +0 -87
  165. package/dist/tests/fixtures.d.ts.map +0 -1
  166. package/dist/tests/fixtures.js +0 -130
  167. package/dist/tests/fixtures.js.map +0 -1
  168. package/dist/tests/integration.test.d.ts +0 -2
  169. package/dist/tests/integration.test.d.ts.map +0 -1
  170. package/dist/tests/integration.test.js +0 -115
  171. package/dist/tests/integration.test.js.map +0 -1
  172. package/dist/tests/resources.test.d.ts +0 -2
  173. package/dist/tests/resources.test.d.ts.map +0 -1
  174. package/dist/tests/resources.test.js +0 -73
  175. package/dist/tests/resources.test.js.map +0 -1
  176. package/dist/tests/setup.d.ts +0 -8
  177. package/dist/tests/setup.d.ts.map +0 -1
  178. package/dist/tests/setup.js +0 -8
  179. package/dist/tests/setup.js.map +0 -1
  180. package/dist/tests/tools.test.d.ts +0 -2
  181. package/dist/tests/tools.test.d.ts.map +0 -1
  182. package/dist/tests/tools.test.js +0 -224
  183. package/dist/tests/tools.test.js.map +0 -1
  184. package/dist/ui-tmp/ui/export.html +0 -409
@@ -4,7 +4,9 @@ import { formatSuccessResponse } from "../lib/tool-response.js";
4
4
  import { decrypt } from "../lib/crypto/index.js";
5
5
  export const getFootprintSchema = {
6
6
  inputSchema: {
7
- id: z.string().describe("Footprint ID"),
7
+ id: z
8
+ .string()
9
+ .describe("UUID of the footprint to retrieve. Use list-footprints or search-footprints to find IDs."),
8
10
  },
9
11
  outputSchema: {
10
12
  id: z.string(),
@@ -24,7 +26,7 @@ export const getFootprintSchema = {
24
26
  };
25
27
  export const getFootprintMetadata = {
26
28
  title: "Get Footprint",
27
- description: "Retrieve and decrypt specific footprint by ID",
29
+ description: "Retrieve and decrypt a specific footprint by ID. Returns full conversation content (decrypted), metadata, and Git timestamp info. Requires the correct encryption password (set via FOOTPRINT_PASSPHRASE env var).",
28
30
  _meta: {
29
31
  ui: {
30
32
  resourceUri: "ui://footprint/detail.html",
@@ -32,34 +34,36 @@ export const getFootprintMetadata = {
32
34
  },
33
35
  };
34
36
  export function createGetFootprintHandler(db, getDerivedKey) {
35
- return wrapToolHandler("get-footprint", "Verify the footprint ID exists and password is correct.", async (params) => {
36
- const fp = db.findById(params.id);
37
- if (!fp) {
38
- throw new Error(`Footprint not found: ${params.id}`);
37
+ return wrapToolHandler("get-footprint", "Verify the evidence ID exists and password is correct.", async (params) => {
38
+ const evidence = db.findById(params.id);
39
+ if (!evidence) {
40
+ throw new Error(`Evidence not found: ${params.id}`);
39
41
  }
40
42
  const key = await getDerivedKey();
41
- const decrypted = decrypt(fp.encryptedContent, fp.nonce, key);
42
- const gitInfo = fp.gitCommitHash && fp.gitTimestamp
43
+ const decrypted = decrypt(evidence.encryptedContent, evidence.nonce, key);
44
+ const gitInfo = evidence.gitCommitHash && evidence.gitTimestamp
43
45
  ? {
44
- commitHash: fp.gitCommitHash,
45
- timestamp: fp.gitTimestamp,
46
+ commitHash: evidence.gitCommitHash,
47
+ timestamp: evidence.gitTimestamp,
46
48
  }
47
49
  : null;
48
- return formatSuccessResponse("Footprint retrieved successfully", {
49
- ID: fp.id,
50
- Timestamp: fp.timestamp,
51
- Provider: fp.llmProvider,
52
- "Message Count": fp.messageCount,
53
- "Content Preview": `${decrypted.substring(0, 100)}...`,
50
+ return formatSuccessResponse("Evidence retrieved successfully", {
51
+ ID: evidence.id,
52
+ Timestamp: evidence.timestamp,
53
+ Provider: evidence.llmProvider,
54
+ "Message Count": evidence.messageCount,
55
+ "Content Preview": decrypted.length > 100
56
+ ? `${decrypted.substring(0, 100)}...`
57
+ : decrypted,
54
58
  }, {
55
- id: fp.id,
56
- timestamp: fp.timestamp,
57
- conversationId: fp.conversationId,
58
- llmProvider: fp.llmProvider,
59
+ id: evidence.id,
60
+ timestamp: evidence.timestamp,
61
+ conversationId: evidence.conversationId,
62
+ llmProvider: evidence.llmProvider,
59
63
  content: decrypted,
60
- messageCount: fp.messageCount,
64
+ messageCount: evidence.messageCount,
61
65
  gitInfo,
62
- tags: fp.tags,
66
+ tags: evidence.tags,
63
67
  });
64
68
  });
65
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-footprint.js","sourceRoot":"","sources":["../../../src/tools/get-footprint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGjD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW,EAAE;QACX,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KACxC;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;QAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,CAAC;aACP,MAAM,CAAC;YACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;YACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;SACtB,CAAC;aACD,QAAQ,EAAE;QACb,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,eAAe;IACtB,WAAW,EAAE,+CAA+C;IAC5D,KAAK,EAAE;QACL,EAAE,EAAE;YACF,WAAW,EAAE,4BAA4B;SAC1C;KACF;CACF,CAAC;AAEF,MAAM,UAAU,yBAAyB,CACvC,EAAoB,EACpB,aAAwC;IAExC,OAAO,eAAe,CACpB,eAAe,EACf,yDAAyD,EACzD,KAAK,EAAE,MAAsB,EAAE,EAAE;QAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE9D,MAAM,OAAO,GACX,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,YAAY;YACjC,CAAC,CAAC;gBACE,UAAU,EAAE,EAAE,CAAC,aAAa;gBAC5B,SAAS,EAAE,EAAE,CAAC,YAAY;aAC3B;YACH,CAAC,CAAC,IAAI,CAAC;QAEX,OAAO,qBAAqB,CAC1B,kCAAkC,EAClC;YACE,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,QAAQ,EAAE,EAAE,CAAC,WAAW;YACxB,eAAe,EAAE,EAAE,CAAC,YAAY;YAChC,iBAAiB,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK;SACvD,EACD;YACE,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,cAAc,EAAE,EAAE,CAAC,cAAc;YACjC,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,OAAO,EAAE,SAAS;YAClB,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,OAAO;YACP,IAAI,EAAE,EAAE,CAAC,IAAI;SACd,CACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get-footprint.js","sourceRoot":"","sources":["../../../src/tools/get-footprint.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,5 @@ export { searchFootprintsSchema, searchFootprintsMetadata, createSearchFootprint
10
10
  export { verifyFootprintSchema, verifyFootprintMetadata, createVerifyFootprintHandler, } from "./verify-footprint.js";
11
11
  export { suggestCaptureSchema, suggestCaptureMetadata, createSuggestCaptureHandler, } from "./suggest-capture.js";
12
12
  export { deleteFootprintsSchema, deleteFootprintsMetadata, createDeleteFootprintsHandler, } from "./delete-footprints.js";
13
- export { renameTagSchema, renameTagMetadata, createRenameTagHandler, } from "./rename-tag.js";
14
- export { removeTagSchema, removeTagMetadata, createRemoveTagHandler, } from "./remove-tag.js";
15
- export { getTagStatsSchema, getTagStatsMetadata, createGetTagStatsHandler, } from "./get-tag-stats.js";
13
+ export { manageTagsSchema, manageTagsMetadata, createManageTagsHandler, } from "./manage-tags.js";
16
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC"}
@@ -10,7 +10,5 @@ export { searchFootprintsSchema, searchFootprintsMetadata, createSearchFootprint
10
10
  export { verifyFootprintSchema, verifyFootprintMetadata, createVerifyFootprintHandler, } from "./verify-footprint.js";
11
11
  export { suggestCaptureSchema, suggestCaptureMetadata, createSuggestCaptureHandler, } from "./suggest-capture.js";
12
12
  export { deleteFootprintsSchema, deleteFootprintsMetadata, createDeleteFootprintsHandler, } from "./delete-footprints.js";
13
- export { renameTagSchema, renameTagMetadata, createRenameTagHandler, } from "./rename-tag.js";
14
- export { removeTagSchema, removeTagMetadata, createRemoveTagHandler, } from "./remove-tag.js";
15
- export { getTagStatsSchema, getTagStatsMetadata, createGetTagStatsHandler, } from "./get-tag-stats.js";
13
+ export { manageTagsSchema, manageTagsMetadata, createManageTagsHandler, } from "./manage-tags.js";
16
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC"}
@@ -6,28 +6,14 @@ export declare const listFootprintsSchema: {
6
6
  offset: z.ZodOptional<z.ZodNumber>;
7
7
  };
8
8
  outputSchema: {
9
- footprints: z.ZodArray<z.ZodObject<{
9
+ evidences: z.ZodArray<z.ZodObject<{
10
10
  id: z.ZodString;
11
11
  timestamp: z.ZodString;
12
12
  conversationId: z.ZodString;
13
13
  llmProvider: z.ZodString;
14
14
  messageCount: z.ZodNumber;
15
15
  tags: z.ZodNullable<z.ZodString>;
16
- }, "strip", z.ZodTypeAny, {
17
- id: string;
18
- timestamp: string;
19
- messageCount: number;
20
- conversationId: string;
21
- llmProvider: string;
22
- tags: string | null;
23
- }, {
24
- id: string;
25
- timestamp: string;
26
- messageCount: number;
27
- conversationId: string;
28
- llmProvider: string;
29
- tags: string | null;
30
- }>, "many">;
16
+ }, z.core.$strip>>;
31
17
  total: z.ZodNumber;
32
18
  };
33
19
  };
@@ -44,7 +30,7 @@ export declare function createListFootprintsHandler(db: EvidenceDatabase): (para
44
30
  limit?: number;
45
31
  offset?: number;
46
32
  }) => Promise<import("../lib/tool-response.js").ToolResponse<{
47
- footprints: {
33
+ evidences: {
48
34
  id: string;
49
35
  timestamp: string;
50
36
  conversationId: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"list-footprints.d.ts","sourceRoot":"","sources":["../../../src/tools/list-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBhC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;CAQlC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,gBAAgB;YAInC,MAAM;aAAW,MAAM;;;;;;;;;;;IAgCnD"}
1
+ {"version":3,"file":"list-footprints.d.ts","sourceRoot":"","sources":["../../../src/tools/list-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;CA4BhC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;CASlC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,gBAAgB;YAInC,MAAM;aAAW,MAAM;;;;;;;;;;;IAkCnD"}
@@ -3,11 +3,21 @@ import { wrapToolHandler } from "../lib/tool-wrapper.js";
3
3
  import { formatSuccessResponse } from "../lib/tool-response.js";
4
4
  export const listFootprintsSchema = {
5
5
  inputSchema: {
6
- limit: z.number().int().positive().optional().describe("Maximum results"),
7
- offset: z.number().int().min(0).optional().describe("Pagination offset"),
6
+ limit: z
7
+ .number()
8
+ .int()
9
+ .positive()
10
+ .optional()
11
+ .describe("Maximum number of results to return per page"),
12
+ offset: z
13
+ .number()
14
+ .int()
15
+ .min(0)
16
+ .optional()
17
+ .describe("Number of results to skip for pagination (0-based)"),
8
18
  },
9
19
  outputSchema: {
10
- footprints: z.array(z.object({
20
+ evidences: z.array(z.object({
11
21
  id: z.string(),
12
22
  timestamp: z.string(),
13
23
  conversationId: z.string(),
@@ -20,7 +30,7 @@ export const listFootprintsSchema = {
20
30
  };
21
31
  export const listFootprintsMetadata = {
22
32
  title: "List Footprints",
23
- description: "List all captured footprint with pagination",
33
+ description: "List all captured footprints with pagination. Returns metadata only (IDs, timestamps, tags, message counts) — use get-footprint to retrieve full decrypted content. Use search-footprints for filtered queries.",
24
34
  _meta: {
25
35
  ui: {
26
36
  resourceUri: "ui://footprint/dashboard.html",
@@ -35,23 +45,24 @@ export function createListFootprintsHandler(db) {
35
45
  if (params.offset !== undefined && params.offset < 0) {
36
46
  throw new Error("Offset cannot be negative");
37
47
  }
38
- const footprints = db.list({
48
+ const evidences = db.list({
39
49
  limit: params.limit,
40
50
  offset: params.offset,
41
51
  });
42
- const mappedFootprints = footprints.map((fp) => ({
43
- id: fp.id,
44
- timestamp: fp.timestamp,
45
- conversationId: fp.conversationId,
46
- llmProvider: fp.llmProvider,
47
- messageCount: fp.messageCount,
48
- tags: fp.tags,
52
+ const mappedEvidences = evidences.map((e) => ({
53
+ id: e.id,
54
+ timestamp: e.timestamp,
55
+ conversationId: e.conversationId,
56
+ llmProvider: e.llmProvider,
57
+ messageCount: e.messageCount,
58
+ tags: e.tags,
49
59
  }));
60
+ const total = db.getTotalCount();
50
61
  return formatSuccessResponse("Footprint list retrieved successfully", {
51
- Count: `${footprints.length} footprint(s)`,
52
- Limit: params.limit || "No limit",
53
- Offset: params.offset || 0,
54
- }, { footprints: mappedFootprints, total: footprints.length });
62
+ Count: `${evidences.length} footprint(s)`,
63
+ Limit: params.limit ?? "No limit",
64
+ Offset: params.offset ?? 0,
65
+ }, { evidences: mappedEvidences, total });
55
66
  });
56
67
  }
57
68
  //# sourceMappingURL=list-footprints.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-footprints.js","sourceRoot":"","sources":["../../../src/tools/list-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,WAAW,EAAE;QACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACzE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KACzE;IACD,YAAY,EAAE;QACZ,UAAU,EAAE,CAAC,CAAC,KAAK,CACjB,CAAC,CAAC,MAAM,CAAC;YACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;YACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;YAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;YACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;YACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC5B,CAAC,CACH;QACD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;KAClB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,KAAK,EAAE,iBAAiB;IACxB,WAAW,EAAE,6CAA6C;IAC1D,KAAK,EAAE;QACL,EAAE,EAAE;YACF,WAAW,EAAE,+BAA+B;SAC7C;KACF;CACF,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,EAAoB;IAC9D,OAAO,eAAe,CACpB,iBAAiB,EACjB,sDAAsD,EACtD,KAAK,EAAE,MAA2C,EAAE,EAAE;QACpD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,CAAC;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/C,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,cAAc,EAAE,EAAE,CAAC,cAAc;YACjC,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,IAAI,EAAE,EAAE,CAAC,IAAI;SACd,CAAC,CAAC,CAAC;QAEJ,OAAO,qBAAqB,CAC1B,uCAAuC,EACvC;YACE,KAAK,EAAE,GAAG,UAAU,CAAC,MAAM,eAAe;YAC1C,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,UAAU;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;SAC3B,EACD,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAC3D,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"list-footprints.js","sourceRoot":"","sources":["../../../src/tools/list-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,WAAW,EAAE;QACX,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,8CAA8C,CAAC;QAC3D,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,oDAAoD,CAAC;KAClE;IACD,YAAY,EAAE;QACZ,SAAS,EAAE,CAAC,CAAC,KAAK,CAChB,CAAC,CAAC,MAAM,CAAC;YACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;YACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;YAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;YACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;YACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC5B,CAAC,CACH;QACD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;KAClB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,KAAK,EAAE,iBAAiB;IACxB,WAAW,EACT,iNAAiN;IACnN,KAAK,EAAE;QACL,EAAE,EAAE;YACF,WAAW,EAAE,+BAA+B;SAC7C;KACF;CACF,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,EAAoB;IAC9D,OAAO,eAAe,CACpB,iBAAiB,EACjB,sDAAsD,EACtD,KAAK,EAAE,MAA2C,EAAE,EAAE;QACpD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC;YACxB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC,CAAC;QAEJ,MAAM,KAAK,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;QAEjC,OAAO,qBAAqB,CAC1B,uCAAuC,EACvC;YACE,KAAK,EAAE,GAAG,SAAS,CAAC,MAAM,eAAe;YACzC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,UAAU;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;SAC3B,EACD,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,CACtC,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,47 @@
1
+ import * as z from "zod";
2
+ import type { EvidenceDatabase } from "../lib/storage/index.js";
3
+ export declare const manageTagsSchema: {
4
+ inputSchema: {
5
+ action: z.ZodEnum<{
6
+ stats: "stats";
7
+ rename: "rename";
8
+ remove: "remove";
9
+ }>;
10
+ tag: z.ZodOptional<z.ZodString>;
11
+ oldTag: z.ZodOptional<z.ZodString>;
12
+ newTag: z.ZodOptional<z.ZodString>;
13
+ };
14
+ outputSchema: {
15
+ action: z.ZodString;
16
+ tags: z.ZodOptional<z.ZodArray<z.ZodObject<{
17
+ tag: z.ZodString;
18
+ count: z.ZodNumber;
19
+ }, z.core.$strip>>>;
20
+ totalTags: z.ZodOptional<z.ZodNumber>;
21
+ updatedCount: z.ZodOptional<z.ZodNumber>;
22
+ success: z.ZodBoolean;
23
+ };
24
+ };
25
+ export declare const manageTagsMetadata: {
26
+ title: string;
27
+ description: string;
28
+ };
29
+ export declare function createManageTagsHandler(db: EvidenceDatabase): (params: {
30
+ action: "stats" | "rename" | "remove";
31
+ tag?: string;
32
+ oldTag?: string;
33
+ newTag?: string;
34
+ }) => Promise<import("../lib/tool-response.js").ToolResponse<{
35
+ action: string;
36
+ tags: {
37
+ tag: string;
38
+ count: number;
39
+ }[];
40
+ totalTags: number;
41
+ success: boolean;
42
+ }> | import("../lib/tool-response.js").ToolResponse<{
43
+ action: string;
44
+ updatedCount: number;
45
+ success: boolean;
46
+ }>>;
47
+ //# sourceMappingURL=manage-tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-tags.d.ts","sourceRoot":"","sources":["../../../src/tools/manage-tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;CAqC5B,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;CAI9B,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,gBAAgB;YAK9C,OAAO,GAAG,QAAQ,GAAG,QAAQ;UAC/B,MAAM;aACH,MAAM;aACN,MAAM;;;;;;;;;;;;;IA2FpB"}
@@ -0,0 +1,109 @@
1
+ import * as z from "zod";
2
+ import { wrapToolHandler } from "../lib/tool-wrapper.js";
3
+ import { createToolResponse } from "../lib/tool-response.js";
4
+ export const manageTagsSchema = {
5
+ inputSchema: {
6
+ action: z
7
+ .enum(["stats", "rename", "remove"])
8
+ .describe("Tag operation to perform: 'stats' returns all tags with usage counts, 'rename' renames a tag across all records, 'remove' deletes a tag from all records."),
9
+ tag: z
10
+ .string()
11
+ .min(1)
12
+ .optional()
13
+ .describe("Tag name to remove (required when action='remove')"),
14
+ oldTag: z
15
+ .string()
16
+ .min(1)
17
+ .optional()
18
+ .describe("Current tag name to rename (required when action='rename')"),
19
+ newTag: z
20
+ .string()
21
+ .min(1)
22
+ .optional()
23
+ .describe("New tag name (required when action='rename')"),
24
+ },
25
+ outputSchema: {
26
+ action: z.string(),
27
+ tags: z
28
+ .array(z.object({
29
+ tag: z.string(),
30
+ count: z.number(),
31
+ }))
32
+ .optional(),
33
+ totalTags: z.number().optional(),
34
+ updatedCount: z.number().optional(),
35
+ success: z.boolean(),
36
+ },
37
+ };
38
+ export const manageTagsMetadata = {
39
+ title: "Manage Tags",
40
+ description: "Unified tag management: get tag statistics, rename tags across all records, or remove tags. Replaces individual tag tools for lower cognitive load. All rename/remove operations are atomic (transactional).",
41
+ };
42
+ export function createManageTagsHandler(db) {
43
+ return wrapToolHandler("manage-tags", "Ensure action is valid, and required parameters are provided for the chosen action.", async (params) => {
44
+ // Runtime validation for direct callers (Zod enum only applies through MCP SDK)
45
+ if (!["stats", "rename", "remove"].includes(params.action)) {
46
+ throw new Error(`Unknown action: ${params.action}. Valid actions: stats, rename, remove`);
47
+ }
48
+ switch (params.action) {
49
+ case "stats": {
50
+ const tagCounts = db.getTagCounts();
51
+ const tags = Array.from(tagCounts.entries())
52
+ .map(([tag, count]) => ({ tag, count }))
53
+ .sort((a, b) => b.count - a.count);
54
+ const resultText = tags.length > 0
55
+ ? `📊 Tag Statistics:\n${tags.map((t) => ` • ${t.tag}: ${t.count}`).join("\n")}`
56
+ : `📊 No tags found in any footprint records`;
57
+ return createToolResponse(resultText, {
58
+ action: "stats",
59
+ tags,
60
+ totalTags: tags.length,
61
+ success: true,
62
+ });
63
+ }
64
+ case "rename": {
65
+ if (!params.oldTag || !params.newTag) {
66
+ throw new Error("Both oldTag and newTag are required for rename action");
67
+ }
68
+ if (params.oldTag.trim() === params.newTag.trim()) {
69
+ throw new Error("New tag must be different from old tag");
70
+ }
71
+ // eslint-disable-next-line no-control-regex
72
+ if (/[\x00\n\r,]/.test(params.newTag)) {
73
+ throw new Error(`Invalid tag format: "${params.newTag}". Tags cannot contain null bytes, newlines, or commas.`);
74
+ }
75
+ if (params.newTag.trim().length > 100) {
76
+ throw new Error("Tag too long (max 100 characters)");
77
+ }
78
+ const updatedCount = db.renameTag(params.oldTag.trim(), params.newTag.trim());
79
+ const success = updatedCount > 0;
80
+ const resultText = success
81
+ ? `🏷️ Renamed tag "${params.oldTag}" to "${params.newTag}" in ${updatedCount} record${updatedCount > 1 ? "s" : ""}`
82
+ : `⚠️ No records found with tag "${params.oldTag}"`;
83
+ return createToolResponse(resultText, {
84
+ action: "rename",
85
+ updatedCount,
86
+ success,
87
+ });
88
+ }
89
+ case "remove": {
90
+ if (!params.tag) {
91
+ throw new Error("tag is required for remove action");
92
+ }
93
+ const updatedCount = db.removeTag(params.tag.trim());
94
+ const success = updatedCount > 0;
95
+ const resultText = success
96
+ ? `🗑️ Removed tag "${params.tag}" from ${updatedCount} record${updatedCount > 1 ? "s" : ""}`
97
+ : `⚠️ No records found with tag "${params.tag}"`;
98
+ return createToolResponse(resultText, {
99
+ action: "remove",
100
+ updatedCount,
101
+ success,
102
+ });
103
+ }
104
+ default:
105
+ throw new Error(`Unknown action: ${params.action}. Valid actions: stats, rename, remove`);
106
+ }
107
+ });
108
+ }
109
+ //# sourceMappingURL=manage-tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-tags.js","sourceRoot":"","sources":["../../../src/tools/manage-tags.ts"],"names":[],"mappings":"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"}
@@ -3,35 +3,21 @@ import type { EvidenceDatabase } from "../lib/storage/index.js";
3
3
  export declare const searchFootprintsSchema: {
4
4
  inputSchema: {
5
5
  query: z.ZodOptional<z.ZodString>;
6
- tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
6
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
7
7
  dateFrom: z.ZodOptional<z.ZodString>;
8
8
  dateTo: z.ZodOptional<z.ZodString>;
9
9
  limit: z.ZodOptional<z.ZodNumber>;
10
10
  offset: z.ZodOptional<z.ZodNumber>;
11
11
  };
12
12
  outputSchema: {
13
- footprints: z.ZodArray<z.ZodObject<{
13
+ evidences: z.ZodArray<z.ZodObject<{
14
14
  id: z.ZodString;
15
15
  timestamp: z.ZodString;
16
16
  conversationId: z.ZodString;
17
17
  llmProvider: z.ZodString;
18
18
  messageCount: z.ZodNumber;
19
19
  tags: z.ZodNullable<z.ZodString>;
20
- }, "strip", z.ZodTypeAny, {
21
- id: string;
22
- timestamp: string;
23
- messageCount: number;
24
- conversationId: string;
25
- llmProvider: string;
26
- tags: string | null;
27
- }, {
28
- id: string;
29
- timestamp: string;
30
- messageCount: number;
31
- conversationId: string;
32
- llmProvider: string;
33
- tags: string | null;
34
- }>, "many">;
20
+ }, z.core.$strip>>;
35
21
  total: z.ZodNumber;
36
22
  };
37
23
  };
@@ -47,7 +33,7 @@ export declare function createSearchFootprintsHandler(db: EvidenceDatabase): (pa
47
33
  limit?: number;
48
34
  offset?: number;
49
35
  }) => Promise<import("../lib/tool-response.js").ToolResponse<{
50
- footprints: {
36
+ evidences: {
51
37
  id: string;
52
38
  timestamp: string;
53
39
  conversationId: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"search-footprints.d.ts","sourceRoot":"","sources":["../../../src/tools/search-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBlC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;CAGpC,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,gBAAgB;YAKpD,MAAM;WACP,MAAM,EAAE;eACJ,MAAM;aACR,MAAM;YACP,MAAM;aACL,MAAM;;;;;;;;;;;IAsDpB"}
1
+ {"version":3,"file":"search-footprints.d.ts","sourceRoot":"","sources":["../../../src/tools/search-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;CA0ClC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;CAIpC,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,gBAAgB;YAKpD,MAAM;WACP,MAAM,EAAE;eACJ,MAAM;aACR,MAAM;YACP,MAAM;aACL,MAAM;;;;;;;;;;;IA8DpB"}
@@ -6,15 +6,24 @@ export const searchFootprintsSchema = {
6
6
  query: z
7
7
  .string()
8
8
  .optional()
9
- .describe("Search text (matches conversationId, tags)"),
10
- tags: z.array(z.string()).optional().describe("Filter by tags"),
11
- dateFrom: z.string().optional().describe("Start date (ISO format)"),
12
- dateTo: z.string().optional().describe("End date (ISO format)"),
9
+ .describe("Search text (matches conversationId and tags via LIKE). Combine with tags for precise filtering."),
10
+ tags: z
11
+ .array(z.string())
12
+ .optional()
13
+ .describe("Filter by tags (AND logic — all specified tags must be present)"),
14
+ dateFrom: z
15
+ .string()
16
+ .optional()
17
+ .describe("Start date filter (ISO 8601 format, e.g., 2026-01-01T00:00:00Z)"),
18
+ dateTo: z
19
+ .string()
20
+ .optional()
21
+ .describe("End date filter (ISO 8601 format, e.g., 2026-12-31T23:59:59Z)"),
13
22
  limit: z.number().int().positive().optional().describe("Maximum results"),
14
23
  offset: z.number().int().min(0).optional().describe("Pagination offset"),
15
24
  },
16
25
  outputSchema: {
17
- footprints: z.array(z.object({
26
+ evidences: z.array(z.object({
18
27
  id: z.string(),
19
28
  timestamp: z.string(),
20
29
  conversationId: z.string(),
@@ -27,7 +36,7 @@ export const searchFootprintsSchema = {
27
36
  };
28
37
  export const searchFootprintsMetadata = {
29
38
  title: "Search Footprints",
30
- description: "Search and filter footprints by query, tags, or date range",
39
+ description: "Search and filter footprints by query, tags, or date range. Query matches conversationId and tags (LIKE). Tags filter uses AND logic — all specified tags must be present. Query + tags combined with AND. Returns paginated results with total matching count.",
31
40
  };
32
41
  export function createSearchFootprintsHandler(db) {
33
42
  return wrapToolHandler("search-footprints", "Check date format (ISO 8601), limit > 0, and offset >= 0.", async (params) => {
@@ -51,7 +60,14 @@ export function createSearchFootprintsHandler(db) {
51
60
  throw new Error("dateTo must be a valid ISO date string");
52
61
  }
53
62
  }
54
- const footprints = db.search({
63
+ // Cross-validate date range using parsed dates (handles timezone offsets correctly)
64
+ if (params.dateFrom && params.dateTo) {
65
+ if (new Date(params.dateFrom) > new Date(params.dateTo)) {
66
+ throw new Error("dateFrom must be before dateTo");
67
+ }
68
+ }
69
+ // Single combined query for results + count (avoids duplicate WHERE clause)
70
+ const { evidences, total } = db.searchWithCount({
55
71
  query: params.query,
56
72
  tags: params.tags,
57
73
  dateFrom: params.dateFrom,
@@ -59,20 +75,20 @@ export function createSearchFootprintsHandler(db) {
59
75
  limit: params.limit,
60
76
  offset: params.offset,
61
77
  });
62
- const mappedFootprints = footprints.map((fp) => ({
63
- id: fp.id,
64
- timestamp: fp.timestamp,
65
- conversationId: fp.conversationId,
66
- llmProvider: fp.llmProvider,
67
- messageCount: fp.messageCount,
68
- tags: fp.tags,
78
+ const mappedEvidences = evidences.map((e) => ({
79
+ id: e.id,
80
+ timestamp: e.timestamp,
81
+ conversationId: e.conversationId,
82
+ llmProvider: e.llmProvider,
83
+ messageCount: e.messageCount,
84
+ tags: e.tags,
69
85
  }));
70
86
  return formatSuccessResponse("Search completed successfully", {
71
- Results: `${footprints.length} footprint(s) found`,
87
+ Results: `${evidences.length} footprint(s) found`,
72
88
  Query: params.query || "None",
73
89
  Tags: params.tags?.join(", ") || "None",
74
90
  "Date Range": `${params.dateFrom || "Start"} to ${params.dateTo || "End"}`,
75
- }, { footprints: mappedFootprints, total: footprints.length });
91
+ }, { evidences: mappedEvidences, total });
76
92
  });
77
93
  }
78
94
  //# sourceMappingURL=search-footprints.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-footprints.js","sourceRoot":"","sources":["../../../src/tools/search-footprints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-footprints.js","sourceRoot":"","sources":["../../../src/tools/search-footprints.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export declare const suggestCaptureSchema: {
6
6
  outputSchema: {
7
7
  shouldCapture: z.ZodBoolean;
8
8
  reason: z.ZodString;
9
- suggestedTags: z.ZodArray<z.ZodString, "many">;
9
+ suggestedTags: z.ZodArray<z.ZodString>;
10
10
  suggestedConversationId: z.ZodString;
11
11
  confidence: z.ZodNumber;
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"suggest-capture.d.ts","sourceRoot":"","sources":["../../../src/tools/suggest-capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAKzB,eAAO,MAAM,oBAAoB;;;;;;;;;;;CAahC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;CAIlC,CAAC;AAEF,wBAAgB,2BAA2B;aAIb,MAAM;yHAgBnC"}
1
+ {"version":3,"file":"suggest-capture.d.ts","sourceRoot":"","sources":["../../../src/tools/suggest-capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAKzB,eAAO,MAAM,oBAAoB;;;;;;;;;;;CAgBhC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;CAIlC,CAAC;AAEF,wBAAgB,2BAA2B;aAIb,MAAM;yHAmBnC"}
@@ -6,7 +6,8 @@ export const suggestCaptureSchema = {
6
6
  inputSchema: {
7
7
  summary: z
8
8
  .string()
9
- .describe("Conversation summary or key content to analyze"),
9
+ .max(1_000_000, "Summary too long (max ~1MB)")
10
+ .describe("Brief conversation summary or key content to analyze for capture-worthy signals (IP, legal, business decisions, research, compliance)."),
10
11
  },
11
12
  outputSchema: {
12
13
  shouldCapture: z.boolean(),
@@ -18,13 +19,16 @@ export const suggestCaptureSchema = {
18
19
  };
19
20
  export const suggestCaptureMetadata = {
20
21
  title: "Suggest Capture",
21
- description: "Analyze conversation content and suggest whether to capture it as a footprint",
22
+ description: "Lightweight keyword-based pre-filter that analyzes conversation content and suggests whether to capture it as evidence. For deeper semantic analysis, use the 'footprint-should-capture' prompt instead.",
22
23
  };
23
24
  export function createSuggestCaptureHandler() {
24
25
  return wrapToolHandler("suggest-capture", "Ensure summary is not empty.", async (params) => {
25
26
  if (!params.summary || params.summary.trim().length === 0) {
26
27
  throw new Error("Summary cannot be empty");
27
28
  }
29
+ if (params.summary.length > 1_000_000) {
30
+ throw new Error("Summary too long (max ~1MB)");
31
+ }
28
32
  // Analyze content using content analyzer
29
33
  const analysis = analyzeContent(params.summary);
30
34
  // Format result text