@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.
- package/README.md +136 -160
- package/SKILL.md +7 -7
- 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/index.js +0 -0
- package/dist/src/cli/setup.d.ts.map +1 -1
- package/dist/src/cli/setup.js +34 -12
- package/dist/src/cli/setup.js.map +1 -1
- package/dist/src/cli/utils/env.d.ts +7 -2
- package/dist/src/cli/utils/env.d.ts.map +1 -1
- package/dist/src/cli/utils/env.js +37 -6
- package/dist/src/cli/utils/env.js.map +1 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +41 -28
- 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 +1 -2
- package/dist/src/lib/storage/export.d.ts.map +1 -1
- package/dist/src/lib/storage/export.js +46 -33
- 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 +52 -11
- package/dist/src/tools/capture-footprint.js.map +1 -1
- package/dist/src/tools/delete-footprints.d.ts +18 -1
- package/dist/src/tools/delete-footprints.d.ts.map +1 -1
- package/dist/src/tools/delete-footprints.js +53 -5
- package/dist/src/tools/delete-footprints.js.map +1 -1
- package/dist/src/tools/export-footprints.d.ts +11 -3
- package/dist/src/tools/export-footprints.d.ts.map +1 -1
- package/dist/src/tools/export-footprints.js +48 -9
- 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 +7 -3
- 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 +1 -15
- package/dist/src/tools/list-footprints.d.ts.map +1 -1
- package/dist/src/tools/list-footprints.js +17 -6
- 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 +2 -16
- package/dist/src/tools/search-footprints.d.ts.map +1 -1
- package/dist/src/tools/search-footprints.js +23 -7
- 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 +11 -8
- 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 +1 -1
- package/dist/src/ui/register.js.map +1 -1
- package/dist/ui/dashboard.html +80 -67
- package/dist/ui/detail.html +62 -49
- package/dist/ui/export.html +64 -51
- package/package.json +18 -13
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-footprints.d.ts","sourceRoot":"","sources":["../../../src/tools/delete-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":"delete-footprints.d.ts","sourceRoot":"","sources":["../../../src/tools/delete-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;CA+BlC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;CAIpC,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,gBAAgB;iBAIhC,MAAM,EAAE;oBAAkB,OAAO;;;;;;;;;;;;;IA2DlE"}
|
|
@@ -6,28 +6,76 @@ export const deleteFootprintsSchema = {
|
|
|
6
6
|
evidenceIds: z
|
|
7
7
|
.array(z.string())
|
|
8
8
|
.min(1)
|
|
9
|
-
.
|
|
9
|
+
.max(100, "Maximum 100 IDs per delete operation")
|
|
10
|
+
.describe("Array of footprint IDs to delete. Always verify IDs first with search-footprints or list-footprints."),
|
|
11
|
+
confirmDelete: z
|
|
12
|
+
.boolean()
|
|
13
|
+
.optional()
|
|
14
|
+
.default(false)
|
|
15
|
+
.describe("Set to true to confirm deletion. Without this, returns a preview of records to be deleted without actually deleting them. Two-step pattern: first call without confirmDelete to preview, then call with confirmDelete: true to execute."),
|
|
10
16
|
},
|
|
11
17
|
outputSchema: {
|
|
12
18
|
deletedCount: z.number(),
|
|
19
|
+
previewed: z
|
|
20
|
+
.array(z.object({
|
|
21
|
+
id: z.string(),
|
|
22
|
+
conversationId: z.string(),
|
|
23
|
+
timestamp: z.string(),
|
|
24
|
+
}))
|
|
25
|
+
.optional(),
|
|
26
|
+
notFoundIds: z.array(z.string()).optional(),
|
|
13
27
|
success: z.boolean(),
|
|
14
28
|
},
|
|
15
29
|
};
|
|
16
30
|
export const deleteFootprintsMetadata = {
|
|
17
31
|
title: "Delete Footprints",
|
|
18
|
-
description: "Permanently delete one or more footprint records",
|
|
32
|
+
description: "Permanently delete one or more footprint records. WARNING: Irreversible operation. Uses two-step confirmation: first call previews records, second call with confirmDelete: true performs deletion.",
|
|
19
33
|
};
|
|
20
34
|
export function createDeleteFootprintsHandler(db) {
|
|
21
35
|
return wrapToolHandler("delete-footprints", "Verify the footprint IDs exist.", async (params) => {
|
|
22
36
|
if (!params.evidenceIds || params.evidenceIds.length === 0) {
|
|
23
37
|
throw new Error("At least one evidence ID is required");
|
|
24
38
|
}
|
|
25
|
-
|
|
39
|
+
if (params.evidenceIds.length > 100) {
|
|
40
|
+
throw new Error(`Too many IDs (${params.evidenceIds.length}). Maximum 100 per delete operation.`);
|
|
41
|
+
}
|
|
42
|
+
// Preview mode: show what would be deleted without actually deleting
|
|
43
|
+
if (!params.confirmDelete) {
|
|
44
|
+
const previewed = params.evidenceIds
|
|
45
|
+
.map((id) => db.findById(id))
|
|
46
|
+
.filter((e) => e !== null)
|
|
47
|
+
.map((e) => ({
|
|
48
|
+
id: e.id,
|
|
49
|
+
conversationId: e.conversationId,
|
|
50
|
+
timestamp: e.timestamp,
|
|
51
|
+
}));
|
|
52
|
+
const resultText = previewed.length > 0
|
|
53
|
+
? `⚠️ Preview: ${previewed.length} record(s) would be deleted:\n${previewed.map((p) => ` - ${p.id} (${p.conversationId})`).join("\n")}\n\nTo confirm, call again with confirmDelete: true`
|
|
54
|
+
: `⚠️ No records found with the provided IDs`;
|
|
55
|
+
return createToolResponse(resultText, {
|
|
56
|
+
deletedCount: 0,
|
|
57
|
+
previewed,
|
|
58
|
+
success: false,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Check which IDs exist before deletion (Set for O(1) lookup)
|
|
62
|
+
const existingIds = params.evidenceIds.filter((id) => db.findById(id));
|
|
63
|
+
const existingSet = new Set(existingIds);
|
|
64
|
+
const notFoundIds = params.evidenceIds.filter((id) => !existingSet.has(id));
|
|
65
|
+
// Actual deletion
|
|
66
|
+
const deletedCount = db.deleteMany(existingIds);
|
|
26
67
|
const success = deletedCount > 0;
|
|
27
|
-
|
|
68
|
+
let resultText = success
|
|
28
69
|
? `🗑️ Successfully deleted ${deletedCount} footprint record${deletedCount > 1 ? "s" : ""}`
|
|
29
70
|
: `⚠️ No footprint records found with the provided IDs`;
|
|
30
|
-
|
|
71
|
+
if (notFoundIds.length > 0) {
|
|
72
|
+
resultText += `\n⚠️ IDs not found: ${notFoundIds.join(", ")}`;
|
|
73
|
+
}
|
|
74
|
+
return createToolResponse(resultText, {
|
|
75
|
+
deletedCount,
|
|
76
|
+
notFoundIds,
|
|
77
|
+
success,
|
|
78
|
+
});
|
|
31
79
|
});
|
|
32
80
|
}
|
|
33
81
|
//# sourceMappingURL=delete-footprints.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-footprints.js","sourceRoot":"","sources":["../../../src/tools/delete-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,WAAW,EAAE;QACX,WAAW,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"delete-footprints.js","sourceRoot":"","sources":["../../../src/tools/delete-footprints.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,17 @@ import * as z from "zod";
|
|
|
2
2
|
import type { EvidenceDatabase } from "../lib/storage/index.js";
|
|
3
3
|
export declare const exportFootprintsSchema: {
|
|
4
4
|
inputSchema: {
|
|
5
|
-
evidenceIds: z.ZodOptional<z.ZodArray<z.ZodString
|
|
5
|
+
evidenceIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
6
6
|
includeGitInfo: z.ZodOptional<z.ZodBoolean>;
|
|
7
|
+
outputMode: z.ZodDefault<z.ZodEnum<{
|
|
8
|
+
base64: "base64";
|
|
9
|
+
file: "file";
|
|
10
|
+
both: "both";
|
|
11
|
+
}>>;
|
|
7
12
|
};
|
|
8
13
|
outputSchema: {
|
|
9
|
-
filename: z.ZodString
|
|
14
|
+
filename: z.ZodOptional<z.ZodString>;
|
|
15
|
+
base64Data: z.ZodOptional<z.ZodString>;
|
|
10
16
|
checksum: z.ZodString;
|
|
11
17
|
evidenceCount: z.ZodNumber;
|
|
12
18
|
success: z.ZodBoolean;
|
|
@@ -24,10 +30,12 @@ export declare const exportFootprintsMetadata: {
|
|
|
24
30
|
export declare function createExportFootprintsHandler(db: EvidenceDatabase): (params: {
|
|
25
31
|
evidenceIds?: string[];
|
|
26
32
|
includeGitInfo?: boolean;
|
|
33
|
+
outputMode?: "file" | "base64" | "both";
|
|
27
34
|
}) => Promise<import("../lib/tool-response.js").ToolResponse<{
|
|
28
|
-
filename: string;
|
|
29
35
|
checksum: string;
|
|
30
36
|
evidenceCount: number;
|
|
31
37
|
success: boolean;
|
|
38
|
+
base64Data?: string | undefined;
|
|
39
|
+
filename?: string | undefined;
|
|
32
40
|
}>>;
|
|
33
41
|
//# sourceMappingURL=export-footprints.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-footprints.d.ts","sourceRoot":"","sources":["../../../src/tools/export-footprints.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"export-footprints.d.ts","sourceRoot":"","sources":["../../../src/tools/export-footprints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;CA0BlC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;CASpC,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,gBAAgB;kBAK9C,MAAM,EAAE;qBACL,OAAO;iBACX,MAAM,GAAG,QAAQ,GAAG,MAAM;;;;;;;IAmE5C"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* global Buffer, process */
|
|
1
2
|
import * as z from "zod";
|
|
2
3
|
import { wrapToolHandler } from "../lib/tool-wrapper.js";
|
|
3
4
|
import { formatSuccessResponse } from "../lib/tool-response.js";
|
|
@@ -6,11 +7,19 @@ export const exportFootprintsSchema = {
|
|
|
6
7
|
evidenceIds: z
|
|
7
8
|
.array(z.string())
|
|
8
9
|
.optional()
|
|
9
|
-
.describe("Specific IDs
|
|
10
|
-
includeGitInfo: z
|
|
10
|
+
.describe("Specific evidence IDs to export. If omitted, exports all evidence."),
|
|
11
|
+
includeGitInfo: z
|
|
12
|
+
.boolean()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("Include Git commit hash and timestamp in export metadata"),
|
|
15
|
+
outputMode: z
|
|
16
|
+
.enum(["file", "base64", "both"])
|
|
17
|
+
.default("both")
|
|
18
|
+
.describe("Output mode: 'file' writes ZIP to disk, 'base64' returns ZIP as base64 string (for Claude Desktop/MCP clients), 'both' does both (default, backward compatible)."),
|
|
11
19
|
},
|
|
12
20
|
outputSchema: {
|
|
13
|
-
filename: z.string(),
|
|
21
|
+
filename: z.string().optional(),
|
|
22
|
+
base64Data: z.string().optional(),
|
|
14
23
|
checksum: z.string(),
|
|
15
24
|
evidenceCount: z.number(),
|
|
16
25
|
success: z.boolean(),
|
|
@@ -18,7 +27,7 @@ export const exportFootprintsSchema = {
|
|
|
18
27
|
};
|
|
19
28
|
export const exportFootprintsMetadata = {
|
|
20
29
|
title: "Export Footprints",
|
|
21
|
-
description: "Export footprints to encrypted ZIP archive",
|
|
30
|
+
description: "Export footprints to encrypted ZIP archive. Supports file output (write to disk), base64 output (for MCP clients like Claude Desktop), or both. Default is 'both' for backward compatibility.",
|
|
22
31
|
_meta: {
|
|
23
32
|
ui: {
|
|
24
33
|
resourceUri: "ui://footprint/export.html",
|
|
@@ -29,18 +38,48 @@ export function createExportFootprintsHandler(db) {
|
|
|
29
38
|
return wrapToolHandler("export-footprints", "Check evidenceIds exist and filesystem has write permissions.", async (params) => {
|
|
30
39
|
const { exportEvidences } = await import("../lib/storage/index.js");
|
|
31
40
|
const fs = await import("fs");
|
|
41
|
+
const outputMode = params.outputMode || "both";
|
|
32
42
|
const result = await exportEvidences(db, {
|
|
33
43
|
evidenceIds: params.evidenceIds,
|
|
34
44
|
includeGitInfo: params.includeGitInfo ?? false,
|
|
35
45
|
});
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
// Enforce size limit for base64 mode (base64 adds ~33% overhead)
|
|
47
|
+
const MAX_BASE64_SIZE = 75 * 1024 * 1024; // 75MB
|
|
48
|
+
if ((outputMode === "base64" || outputMode === "both") &&
|
|
49
|
+
result.zipData.length > MAX_BASE64_SIZE) {
|
|
50
|
+
throw new Error(`Export too large for base64 mode (${(result.zipData.length / (1024 * 1024)).toFixed(1)}MB). ` +
|
|
51
|
+
`Use outputMode="file" or export fewer records.`);
|
|
52
|
+
}
|
|
53
|
+
let filename;
|
|
54
|
+
let base64Data;
|
|
55
|
+
// Write to disk if file or both mode
|
|
56
|
+
if (outputMode === "file" || outputMode === "both") {
|
|
57
|
+
const os = await import("os");
|
|
58
|
+
const path = await import("path");
|
|
59
|
+
const outputDir = process.env.FOOTPRINT_DATA_DIR ||
|
|
60
|
+
process.env.FOOTPRINT_EXPORT_DIR ||
|
|
61
|
+
os.tmpdir();
|
|
62
|
+
const outputPath = path.join(outputDir, result.filename);
|
|
63
|
+
fs.writeFileSync(outputPath, result.zipData);
|
|
64
|
+
filename = outputPath;
|
|
65
|
+
}
|
|
66
|
+
// Generate base64 if base64 or both mode
|
|
67
|
+
if (outputMode === "base64" || outputMode === "both") {
|
|
68
|
+
base64Data = Buffer.from(result.zipData).toString("base64");
|
|
69
|
+
}
|
|
70
|
+
const details = {
|
|
38
71
|
"Footprint Count": result.evidenceCount,
|
|
39
|
-
Filename: result.filename,
|
|
40
72
|
Checksum: result.checksum,
|
|
41
73
|
"Git Info": params.includeGitInfo ? "Included" : "Excluded",
|
|
42
|
-
|
|
43
|
-
|
|
74
|
+
"Output Mode": outputMode,
|
|
75
|
+
};
|
|
76
|
+
if (filename)
|
|
77
|
+
details.Filename = filename;
|
|
78
|
+
if (base64Data)
|
|
79
|
+
details["Base64 Size"] = `${Math.round(base64Data.length / 1024)}KB`;
|
|
80
|
+
return formatSuccessResponse("Export completed successfully", details, {
|
|
81
|
+
...(filename && { filename }),
|
|
82
|
+
...(base64Data && { base64Data }),
|
|
44
83
|
checksum: result.checksum,
|
|
45
84
|
evidenceCount: result.evidenceCount,
|
|
46
85
|
success: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-footprints.js","sourceRoot":"","sources":["../../../src/tools/export-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,WAAW,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,
|
|
1
|
+
{"version":3,"file":"export-footprints.js","sourceRoot":"","sources":["../../../src/tools/export-footprints.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,13 +14,7 @@ export declare const getFootprintSchema: {
|
|
|
14
14
|
gitInfo: z.ZodNullable<z.ZodObject<{
|
|
15
15
|
commitHash: z.ZodString;
|
|
16
16
|
timestamp: z.ZodString;
|
|
17
|
-
},
|
|
18
|
-
timestamp: string;
|
|
19
|
-
commitHash: string;
|
|
20
|
-
}, {
|
|
21
|
-
timestamp: string;
|
|
22
|
-
commitHash: string;
|
|
23
|
-
}>>;
|
|
17
|
+
}, z.core.$strip>>;
|
|
24
18
|
tags: z.ZodNullable<z.ZodString>;
|
|
25
19
|
};
|
|
26
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-footprint.d.ts","sourceRoot":"","sources":["../../../src/tools/get-footprint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"get-footprint.d.ts","sourceRoot":"","sources":["../../../src/tools/get-footprint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;CAuB9B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;CAShC,CAAC;AAEF,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,gBAAgB,EACpB,aAAa,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC;QAKjB,MAAM;;;;;;;;;;;;;IA0C9B"}
|
|
@@ -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",
|
|
@@ -50,7 +52,9 @@ export function createGetFootprintHandler(db, getDerivedKey) {
|
|
|
50
52
|
Timestamp: evidence.timestamp,
|
|
51
53
|
Provider: evidence.llmProvider,
|
|
52
54
|
"Message Count": evidence.messageCount,
|
|
53
|
-
"Content Preview":
|
|
55
|
+
"Content Preview": decrypted.length > 100
|
|
56
|
+
? `${decrypted.substring(0, 100)}...`
|
|
57
|
+
: decrypted,
|
|
54
58
|
}, {
|
|
55
59
|
id: evidence.id,
|
|
56
60
|
timestamp: evidence.timestamp,
|
|
@@ -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"}
|
|
@@ -13,21 +13,7 @@ export declare const listFootprintsSchema: {
|
|
|
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
|
};
|
|
@@ -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,8 +3,18 @@ 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({
|
|
@@ -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",
|
|
@@ -47,11 +57,12 @@ export function createListFootprintsHandler(db) {
|
|
|
47
57
|
messageCount: e.messageCount,
|
|
48
58
|
tags: e.tags,
|
|
49
59
|
}));
|
|
60
|
+
const total = db.getTotalCount();
|
|
50
61
|
return formatSuccessResponse("Footprint list retrieved successfully", {
|
|
51
62
|
Count: `${evidences.length} footprint(s)`,
|
|
52
|
-
Limit: params.limit
|
|
53
|
-
Offset: params.offset
|
|
54
|
-
}, { evidences: mappedEvidences, total
|
|
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":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW,EAAE;QACX,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;aACnC,QAAQ,CACP,2JAA2J,CAC5J;QACH,GAAG,EAAE,CAAC;aACH,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,oDAAoD,CAAC;QACjE,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,4DAA4D,CAAC;QACzE,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,8CAA8C,CAAC;KAC5D;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,CAAC;aACJ,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;YACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SAClB,CAAC,CACH;aACA,QAAQ,EAAE;QACb,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,KAAK,EAAE,aAAa;IACpB,WAAW,EACT,8MAA8M;CACjN,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,EAAoB;IAC1D,OAAO,eAAe,CACpB,aAAa,EACb,qFAAqF,EACrF,KAAK,EAAE,MAKN,EAAE,EAAE;QACH,gFAAgF;QAChF,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,mBAAmB,MAAM,CAAC,MAAgB,wCAAwC,CACnF,CAAC;QACJ,CAAC;QAED,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;qBACzC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;qBACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;gBAErC,MAAM,UAAU,GACd,IAAI,CAAC,MAAM,GAAG,CAAC;oBACb,CAAC,CAAC,uBAAuB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACjF,CAAC,CAAC,2CAA2C,CAAC;gBAElD,OAAO,kBAAkB,CAAC,UAAU,EAAE;oBACpC,MAAM,EAAE,OAAO;oBACf,IAAI;oBACJ,SAAS,EAAE,IAAI,CAAC,MAAM;oBACtB,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBACrC,MAAM,IAAI,KAAK,CACb,uDAAuD,CACxD,CAAC;gBACJ,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,CAAC;gBACD,4CAA4C;gBAC5C,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtC,MAAM,IAAI,KAAK,CACb,wBAAwB,MAAM,CAAC,MAAM,yDAAyD,CAC/F,CAAC;gBACJ,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBACtC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBACvD,CAAC;gBAED,MAAM,YAAY,GAAG,EAAE,CAAC,SAAS,CAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EACpB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CACrB,CAAC;gBACF,MAAM,OAAO,GAAG,YAAY,GAAG,CAAC,CAAC;gBAEjC,MAAM,UAAU,GAAG,OAAO;oBACxB,CAAC,CAAC,oBAAoB,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,QAAQ,YAAY,UAAU,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACpH,CAAC,CAAC,iCAAiC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAEtD,OAAO,kBAAkB,CAAC,UAAU,EAAE;oBACpC,MAAM,EAAE,QAAQ;oBAChB,YAAY;oBACZ,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBACvD,CAAC;gBAED,MAAM,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,YAAY,GAAG,CAAC,CAAC;gBAEjC,MAAM,UAAU,GAAG,OAAO;oBACxB,CAAC,CAAC,oBAAoB,MAAM,CAAC,GAAG,UAAU,YAAY,UAAU,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC7F,CAAC,CAAC,iCAAiC,MAAM,CAAC,GAAG,GAAG,CAAC;gBAEnD,OAAO,kBAAkB,CAAC,UAAU,EAAE;oBACpC,MAAM,EAAE,QAAQ;oBAChB,YAAY;oBACZ,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YAED;gBACE,MAAM,IAAI,KAAK,CACb,mBAAmB,MAAM,CAAC,MAAM,wCAAwC,CACzE,CAAC;QACN,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|