@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
|
@@ -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
|
|
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
|
|
36
|
-
const
|
|
37
|
-
if (!
|
|
38
|
-
throw new Error(`
|
|
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(
|
|
42
|
-
const gitInfo =
|
|
43
|
+
const decrypted = decrypt(evidence.encryptedContent, evidence.nonce, key);
|
|
44
|
+
const gitInfo = evidence.gitCommitHash && evidence.gitTimestamp
|
|
43
45
|
? {
|
|
44
|
-
commitHash:
|
|
45
|
-
timestamp:
|
|
46
|
+
commitHash: evidence.gitCommitHash,
|
|
47
|
+
timestamp: evidence.gitTimestamp,
|
|
46
48
|
}
|
|
47
49
|
: null;
|
|
48
|
-
return formatSuccessResponse("
|
|
49
|
-
ID:
|
|
50
|
-
Timestamp:
|
|
51
|
-
Provider:
|
|
52
|
-
"Message Count":
|
|
53
|
-
"Content Preview":
|
|
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:
|
|
56
|
-
timestamp:
|
|
57
|
-
conversationId:
|
|
58
|
-
llmProvider:
|
|
59
|
+
id: evidence.id,
|
|
60
|
+
timestamp: evidence.timestamp,
|
|
61
|
+
conversationId: evidence.conversationId,
|
|
62
|
+
llmProvider: evidence.llmProvider,
|
|
59
63
|
content: decrypted,
|
|
60
|
-
messageCount:
|
|
64
|
+
messageCount: evidence.messageCount,
|
|
61
65
|
gitInfo,
|
|
62
|
-
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,
|
|
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 {
|
|
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,
|
|
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"}
|
package/dist/src/tools/index.js
CHANGED
|
@@ -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 {
|
|
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,
|
|
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
|
-
|
|
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
|
-
},
|
|
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
|
-
|
|
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
|
|
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
|
|
7
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
48
|
+
const evidences = db.list({
|
|
39
49
|
limit: params.limit,
|
|
40
50
|
offset: params.offset,
|
|
41
51
|
});
|
|
42
|
-
const
|
|
43
|
-
id:
|
|
44
|
-
timestamp:
|
|
45
|
-
conversationId:
|
|
46
|
-
llmProvider:
|
|
47
|
-
messageCount:
|
|
48
|
-
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: `${
|
|
52
|
-
Limit: params.limit
|
|
53
|
-
Offset: params.offset
|
|
54
|
-
}, {
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
-
},
|
|
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
|
-
|
|
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
|
|
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
|
|
10
|
-
tags: z
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
63
|
-
id:
|
|
64
|
-
timestamp:
|
|
65
|
-
conversationId:
|
|
66
|
-
llmProvider:
|
|
67
|
-
messageCount:
|
|
68
|
-
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: `${
|
|
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
|
-
}, {
|
|
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":"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,sBAAsB,GAAG;IACpC,WAAW,EAAE;QACX,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,
|
|
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
|
|
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;;;;;;;;;;;
|
|
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
|
-
.
|
|
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: "
|
|
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
|