@pcircle/footprint 1.2.2 → 1.3.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 +31 -43
- package/SKILL.md +45 -45
- 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 +334 -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 +10 -0
- package/dist/src/cli/utils/env.d.ts.map +1 -0
- package/dist/src/cli/utils/env.js +54 -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 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +13 -11
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/storage/export.d.ts +2 -2
- package/dist/src/lib/storage/export.d.ts.map +1 -1
- package/dist/src/lib/storage/export.js +39 -39
- package/dist/src/lib/storage/export.js.map +1 -1
- package/dist/src/tools/capture-footprint.js +1 -1
- package/dist/src/tools/capture-footprint.js.map +1 -1
- package/dist/src/tools/delete-footprints.d.ts +2 -2
- package/dist/src/tools/delete-footprints.d.ts.map +1 -1
- package/dist/src/tools/delete-footprints.js +4 -4
- package/dist/src/tools/delete-footprints.js.map +1 -1
- package/dist/src/tools/export-footprints.d.ts +4 -4
- package/dist/src/tools/export-footprints.d.ts.map +1 -1
- package/dist/src/tools/export-footprints.js +6 -6
- package/dist/src/tools/export-footprints.js.map +1 -1
- package/dist/src/tools/get-footprint.js +19 -19
- package/dist/src/tools/get-footprint.js.map +1 -1
- package/dist/src/tools/list-footprints.d.ts +2 -2
- package/dist/src/tools/list-footprints.js +11 -11
- package/dist/src/tools/list-footprints.js.map +1 -1
- package/dist/src/tools/search-footprints.d.ts +2 -2
- package/dist/src/tools/search-footprints.js +11 -11
- package/dist/src/tools/search-footprints.js.map +1 -1
- package/dist/src/tools/suggest-capture.js +1 -1
- package/dist/src/tools/suggest-capture.js.map +1 -1
- package/dist/src/tools/verify-footprint.js +11 -11
- package/dist/src/tools/verify-footprint.js.map +1 -1
- package/dist/src/ui/register.js +2 -2
- package/dist/src/ui/register.js.map +1 -1
- package/dist/ui/dashboard.html +49 -49
- package/dist/ui/detail.html +9 -9
- package/dist/ui/export.html +17 -17
- package/package.json +13 -6
- 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
package/LICENSE
CHANGED
|
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
18
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -3,55 +3,43 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@pcircle/footprint)
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
|
|
6
|
-
Model Context Protocol (MCP) server that automatically captures and encrypts LLM conversations as
|
|
6
|
+
Model Context Protocol (MCP) server that automatically captures and encrypts LLM conversations as legal evidence.
|
|
7
7
|
|
|
8
8
|
## Why Footprint?
|
|
9
9
|
|
|
10
|
-
- **Prove IP Ownership** - Timestamped
|
|
10
|
+
- **Prove IP Ownership** - Timestamped evidence of LLM-assisted work
|
|
11
11
|
- **Zero Effort** - Automatic capture via MCP protocol
|
|
12
12
|
- **Privacy First** - End-to-end encrypted, locally stored
|
|
13
13
|
- **Legally Valid** - Git timestamps + SHA-256 checksums
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
**One command to set up everything:**
|
|
16
18
|
|
|
17
19
|
```bash
|
|
18
|
-
|
|
20
|
+
npx @pcircle/footprint setup
|
|
19
21
|
```
|
|
20
22
|
|
|
21
|
-
|
|
23
|
+
The interactive wizard will:
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
- ✅ Auto-detect your system (OS, shell, Claude Desktop config)
|
|
26
|
+
- ✅ Validate your encryption password strength
|
|
27
|
+
- ✅ Configure Claude Desktop automatically
|
|
28
|
+
- ✅ Set up environment variables in your shell
|
|
29
|
+
- ✅ Create backup of existing config
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
export FOOTPRINT_DB_PATH="./footprints.db"
|
|
27
|
-
export FOOTPRINT_PASSWORD="your-secure-password"
|
|
28
|
-
```
|
|
31
|
+
**That's it!** Restart Claude Desktop and your conversations are being captured.
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
```json
|
|
33
|
-
{
|
|
34
|
-
"mcpServers": {
|
|
35
|
-
"footprint": {
|
|
36
|
-
"command": "npx",
|
|
37
|
-
"args": ["footprint"],
|
|
38
|
-
"env": {
|
|
39
|
-
"FOOTPRINT_DB_PATH": "/path/to/footprints.db",
|
|
40
|
-
"FOOTPRINT_PASSWORD": "your-password"
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
```
|
|
33
|
+
### Advanced Installation
|
|
46
34
|
|
|
47
|
-
|
|
35
|
+
For manual setup or custom configurations, see the [full installation guide](https://github.com/PCIRCLE-AI/footprint-mcp#installation).
|
|
48
36
|
|
|
49
37
|
## Features
|
|
50
38
|
|
|
51
39
|
- 🔐 XChaCha20-Poly1305 encryption
|
|
52
40
|
- 🕒 Git commit timestamps
|
|
53
41
|
- 📦 Tamper-proof ZIP exports
|
|
54
|
-
- 🔍 Search and retrieve
|
|
42
|
+
- 🔍 Search and retrieve evidence
|
|
55
43
|
- 🤖 AI-powered capture suggestions
|
|
56
44
|
- ✅ Integrity verification
|
|
57
45
|
- 🏷️ Tag management
|
|
@@ -100,7 +88,7 @@ src/
|
|
|
100
88
|
|
|
101
89
|
#### capture-footprint
|
|
102
90
|
|
|
103
|
-
Captures and encrypts an LLM conversation as
|
|
91
|
+
Captures and encrypts an LLM conversation as evidence.
|
|
104
92
|
|
|
105
93
|
**Parameters:**
|
|
106
94
|
|
|
@@ -112,7 +100,7 @@ Captures and encrypts an LLM conversation as a footprint.
|
|
|
112
100
|
|
|
113
101
|
#### list-footprints
|
|
114
102
|
|
|
115
|
-
Lists all captured
|
|
103
|
+
Lists all captured evidence with pagination support.
|
|
116
104
|
|
|
117
105
|
**Parameters:**
|
|
118
106
|
|
|
@@ -121,26 +109,26 @@ Lists all captured footprints with pagination support.
|
|
|
121
109
|
|
|
122
110
|
#### get-footprint
|
|
123
111
|
|
|
124
|
-
Retrieves and decrypts
|
|
112
|
+
Retrieves and decrypts specific evidence by ID.
|
|
125
113
|
|
|
126
114
|
**Parameters:**
|
|
127
115
|
|
|
128
|
-
- `id` -
|
|
116
|
+
- `id` - Evidence ID
|
|
129
117
|
|
|
130
118
|
#### export-footprints
|
|
131
119
|
|
|
132
|
-
Exports
|
|
120
|
+
Exports evidence to tamper-proof encrypted ZIP archive.
|
|
133
121
|
|
|
134
122
|
**Parameters:**
|
|
135
123
|
|
|
136
|
-
- `
|
|
124
|
+
- `evidenceIds` - Array of evidence IDs to export
|
|
137
125
|
- `includeGitInfo` (optional) - Include git metadata
|
|
138
126
|
|
|
139
127
|
### Search & Discovery
|
|
140
128
|
|
|
141
129
|
#### search-footprints
|
|
142
130
|
|
|
143
|
-
Search and filter
|
|
131
|
+
Search and filter evidence by query, tags, or date range.
|
|
144
132
|
|
|
145
133
|
**Parameters:**
|
|
146
134
|
|
|
@@ -153,7 +141,7 @@ Search and filter footprints by query, tags, or date range.
|
|
|
153
141
|
|
|
154
142
|
#### suggest-capture
|
|
155
143
|
|
|
156
|
-
Analyze conversation content and suggest whether to capture it as
|
|
144
|
+
Analyze conversation content and suggest whether to capture it as evidence.
|
|
157
145
|
|
|
158
146
|
**Parameters:**
|
|
159
147
|
|
|
@@ -171,31 +159,31 @@ Analyze conversation content and suggest whether to capture it as a footprint.
|
|
|
171
159
|
|
|
172
160
|
#### verify-footprint
|
|
173
161
|
|
|
174
|
-
Verify the integrity and authenticity of
|
|
162
|
+
Verify the integrity and authenticity of captured evidence.
|
|
175
163
|
|
|
176
164
|
**Parameters:**
|
|
177
165
|
|
|
178
|
-
- `id` -
|
|
166
|
+
- `id` - Evidence ID to verify
|
|
179
167
|
|
|
180
168
|
**Returns:**
|
|
181
169
|
|
|
182
170
|
- `verified` - Overall verification status
|
|
183
171
|
- `checks` - Detailed checks (content integrity, git timestamp, encryption)
|
|
184
|
-
- `legalReadiness` - Whether
|
|
172
|
+
- `legalReadiness` - Whether evidence meets legal standards
|
|
185
173
|
|
|
186
174
|
### Management
|
|
187
175
|
|
|
188
176
|
#### delete-footprints
|
|
189
177
|
|
|
190
|
-
Delete
|
|
178
|
+
Delete evidence records permanently.
|
|
191
179
|
|
|
192
180
|
**Parameters:**
|
|
193
181
|
|
|
194
|
-
- `
|
|
182
|
+
- `evidenceIds` - Array of evidence IDs to delete
|
|
195
183
|
|
|
196
184
|
#### rename-tag
|
|
197
185
|
|
|
198
|
-
Rename a tag across all
|
|
186
|
+
Rename a tag across all evidence.
|
|
199
187
|
|
|
200
188
|
**Parameters:**
|
|
201
189
|
|
|
@@ -204,7 +192,7 @@ Rename a tag across all footprints.
|
|
|
204
192
|
|
|
205
193
|
#### remove-tag
|
|
206
194
|
|
|
207
|
-
Remove a tag from all
|
|
195
|
+
Remove a tag from all evidence.
|
|
208
196
|
|
|
209
197
|
**Parameters:**
|
|
210
198
|
|
package/SKILL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> MCP server for capturing and encrypting AI conversations as verifiable records with Git timestamps.
|
|
4
4
|
|
|
5
|
-
**Package:** `@pcircle/footprint` (v1.
|
|
5
|
+
**Package:** `@pcircle/footprint` (v1.1.1)
|
|
6
6
|
**Protocol:** Model Context Protocol (MCP)
|
|
7
7
|
**License:** MIT
|
|
8
8
|
|
|
@@ -26,7 +26,7 @@ Should I capture this conversation?
|
|
|
26
26
|
│ ├─ Basic troubleshooting
|
|
27
27
|
│ └─ Draft/brainstorming sessions (unless finalized)
|
|
28
28
|
└─ Uncertain content → ASK user
|
|
29
|
-
└─ "Would you like me to save this conversation as
|
|
29
|
+
└─ "Would you like me to save this conversation as evidence?"
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
## Specific Trigger Patterns
|
|
@@ -53,7 +53,7 @@ Should I capture this conversation?
|
|
|
53
53
|
## Available Tools
|
|
54
54
|
|
|
55
55
|
### 1. `capture-footprint`
|
|
56
|
-
Save a conversation as encrypted
|
|
56
|
+
Save a conversation as encrypted evidence.
|
|
57
57
|
|
|
58
58
|
**Input Parameters:**
|
|
59
59
|
```json
|
|
@@ -68,22 +68,22 @@ Save a conversation as encrypted footprint.
|
|
|
68
68
|
|
|
69
69
|
**Expected Output (text):**
|
|
70
70
|
```
|
|
71
|
-
✅
|
|
72
|
-
-
|
|
71
|
+
✅ Evidence captured successfully
|
|
72
|
+
- Evidence ID: `550e8400-e29b-41d4-a716-446655440000`
|
|
73
73
|
- Conversation ID: `api-auth-decision-2026-01-28`
|
|
74
74
|
- Messages: 15
|
|
75
75
|
- Tags: api,oauth,security,decision,approved
|
|
76
76
|
- Git hash: `a1b2c3d4e5f6789...`
|
|
77
77
|
- Created: 2026-01-28T14:30:45Z
|
|
78
78
|
|
|
79
|
-
Keep this
|
|
79
|
+
Keep this Evidence ID safe for future reference.
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
**Expected Output (structuredContent):**
|
|
83
83
|
```json
|
|
84
84
|
{
|
|
85
|
-
"type": "
|
|
86
|
-
"
|
|
85
|
+
"type": "evidence_created",
|
|
86
|
+
"evidenceId": "550e8400-e29b-41d4-a716-446655440000",
|
|
87
87
|
"conversationId": "api-auth-decision-2026-01-28",
|
|
88
88
|
"messageCount": 15,
|
|
89
89
|
"tags": ["api", "oauth", "security", "decision", "approved"],
|
|
@@ -94,7 +94,7 @@ Keep this Footprint ID safe for future reference.
|
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
### 2. `list-footprints`
|
|
97
|
-
List all captured
|
|
97
|
+
List all captured evidence (metadata only).
|
|
98
98
|
|
|
99
99
|
**Input Parameters:**
|
|
100
100
|
```json
|
|
@@ -106,7 +106,7 @@ List all captured footprints (metadata only).
|
|
|
106
106
|
|
|
107
107
|
**Expected Output (text):**
|
|
108
108
|
```
|
|
109
|
-
📋
|
|
109
|
+
📋 Evidence Archive (10 most recent)
|
|
110
110
|
1. api-auth-decision-2026-01-28 | 15 msgs | api,oauth,security
|
|
111
111
|
2. patent-algorithm-2026-01-27 | 32 msgs | ip,patent,algorithm
|
|
112
112
|
3. contract-review-2026-01-26 | 8 msgs | legal,contract
|
|
@@ -116,9 +116,9 @@ List all captured footprints (metadata only).
|
|
|
116
116
|
**Expected Output (structuredContent):**
|
|
117
117
|
```json
|
|
118
118
|
{
|
|
119
|
-
"type": "
|
|
119
|
+
"type": "evidence_list",
|
|
120
120
|
"total": 25,
|
|
121
|
-
"
|
|
121
|
+
"evidences": [
|
|
122
122
|
{
|
|
123
123
|
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
124
124
|
"conversationId": "api-auth-decision-2026-01-28",
|
|
@@ -131,7 +131,7 @@ List all captured footprints (metadata only).
|
|
|
131
131
|
```
|
|
132
132
|
|
|
133
133
|
### 3. `get-footprint`
|
|
134
|
-
Retrieve and decrypt
|
|
134
|
+
Retrieve and decrypt specific evidence.
|
|
135
135
|
|
|
136
136
|
**Input Parameters:**
|
|
137
137
|
```json
|
|
@@ -142,7 +142,7 @@ Retrieve and decrypt a specific footprint.
|
|
|
142
142
|
|
|
143
143
|
**Expected Output (text):**
|
|
144
144
|
```
|
|
145
|
-
📄
|
|
145
|
+
📄 Evidence Retrieved
|
|
146
146
|
- ID: 550e8400-e29b-41d4-a716-446655440000
|
|
147
147
|
- Created: 2026-01-28T14:30:45Z
|
|
148
148
|
- Provider: Claude Sonnet 4.5
|
|
@@ -154,7 +154,7 @@ Assistant: I recommend using PKCE flow...
|
|
|
154
154
|
```
|
|
155
155
|
|
|
156
156
|
### 4. `search-footprints`
|
|
157
|
-
Find
|
|
157
|
+
Find evidence by content or tags.
|
|
158
158
|
|
|
159
159
|
**Input Parameters:**
|
|
160
160
|
```json
|
|
@@ -166,7 +166,7 @@ Find footprints by content or tags.
|
|
|
166
166
|
```
|
|
167
167
|
|
|
168
168
|
### 5. `export-footprints`
|
|
169
|
-
Export
|
|
169
|
+
Export evidence as encrypted archive.
|
|
170
170
|
|
|
171
171
|
**Input Parameters:**
|
|
172
172
|
```json
|
|
@@ -179,8 +179,8 @@ Export footprints as encrypted archive.
|
|
|
179
179
|
**Expected Output (structuredContent):**
|
|
180
180
|
```json
|
|
181
181
|
{
|
|
182
|
-
"type": "
|
|
183
|
-
"filename": "
|
|
182
|
+
"type": "evidence_export",
|
|
183
|
+
"filename": "evidence-550e8400-export.zip",
|
|
184
184
|
"base64Data": "UEsDBBQAAAAIAL...",
|
|
185
185
|
"size": 2048,
|
|
186
186
|
"checksum": "sha256:a1b2c3d4..."
|
|
@@ -188,7 +188,7 @@ Export footprints as encrypted archive.
|
|
|
188
188
|
```
|
|
189
189
|
|
|
190
190
|
### 6. `verify-footprint`
|
|
191
|
-
Verify
|
|
191
|
+
Verify evidence integrity (checksum + Git timestamp).
|
|
192
192
|
|
|
193
193
|
**Input Parameters:**
|
|
194
194
|
```json
|
|
@@ -199,7 +199,7 @@ Verify footprint integrity (checksum + Git timestamp).
|
|
|
199
199
|
|
|
200
200
|
**Expected Output (text):**
|
|
201
201
|
```
|
|
202
|
-
🔐
|
|
202
|
+
🔐 Evidence Verification Report
|
|
203
203
|
- ID: 550e8400-e29b-41d4-a716-446655440000
|
|
204
204
|
- Content Hash: ✅ Valid (SHA-256 matches)
|
|
205
205
|
- Git Timestamp: ✅ Verified (2026-01-28T14:30:45Z)
|
|
@@ -252,29 +252,29 @@ Verify footprint integrity (checksum + Git timestamp).
|
|
|
252
252
|
|
|
253
253
|
### When to Use Each Tool
|
|
254
254
|
- **capture-footprint**: Primary tool for saving conversations
|
|
255
|
-
- **list-footprints**: Browse/overview existing
|
|
256
|
-
- **search-footprints**: Find specific content across
|
|
257
|
-
- **get-footprint**: Retrieve full content of
|
|
255
|
+
- **list-footprints**: Browse/overview existing evidence
|
|
256
|
+
- **search-footprints**: Find specific content across evidence
|
|
257
|
+
- **get-footprint**: Retrieve full content of specific evidence
|
|
258
258
|
- **export-footprints**: Legal/audit export needs
|
|
259
|
-
- **verify-footprint**: Verify
|
|
259
|
+
- **verify-footprint**: Verify evidence integrity and checksums
|
|
260
260
|
|
|
261
261
|
## Token-Efficient Agent Responses
|
|
262
262
|
|
|
263
|
-
**After capturing
|
|
263
|
+
**After capturing evidence (keep it brief):**
|
|
264
264
|
```
|
|
265
|
-
✅
|
|
265
|
+
✅ Evidence saved as `{conversationId}`
|
|
266
266
|
ID: `{first-8-chars-of-id}`...
|
|
267
267
|
Tags: {tags}
|
|
268
268
|
```
|
|
269
269
|
|
|
270
270
|
**When suggesting capture:**
|
|
271
271
|
```
|
|
272
|
-
💡 This looks like valuable
|
|
272
|
+
💡 This looks like valuable evidence (contains {trigger}). Save it?
|
|
273
273
|
```
|
|
274
274
|
|
|
275
275
|
**When declining to capture:**
|
|
276
276
|
```
|
|
277
|
-
ℹ️ Skipping
|
|
277
|
+
ℹ️ Skipping evidence capture (casual conversation)
|
|
278
278
|
```
|
|
279
279
|
|
|
280
280
|
**For retrieval:**
|
|
@@ -288,10 +288,10 @@ Tags: {tags}
|
|
|
288
288
|
| Error | Likely Cause | Recovery Action |
|
|
289
289
|
|-------|--------------|-----------------|
|
|
290
290
|
| "Password required" | FOOTPRINT_PASSWORD not set | 1. Check env config<br>2. Restart MCP server<br>3. Verify password in env |
|
|
291
|
-
| "
|
|
292
|
-
| "Decryption failed" | Password changed/wrong | 1. Verify current password matches<br>2. Check if
|
|
291
|
+
| "Evidence not found" | Invalid/wrong ID | 1. Use `list-footprints` to find correct ID<br>2. Search by conversationId<br>3. Check if user meant different evidence |
|
|
292
|
+
| "Decryption failed" | Password changed/wrong | 1. Verify current password matches<br>2. Check if evidence pre-dates password change<br>3. Try with backup password if available |
|
|
293
293
|
| "Database error" | DB path/permissions issues | 1. Check FOOTPRINT_DB_PATH exists<br>2. Verify file permissions<br>3. Create directory if missing |
|
|
294
|
-
| "Git repository error" | Git not initialized | 1. Initialize git in
|
|
294
|
+
| "Git repository error" | Git not initialized | 1. Initialize git in evidence directory<br>2. Set git user.name/user.email<br>3. Make initial commit |
|
|
295
295
|
| "Capture timeout" | Large conversation size | 1. Split into smaller chunks<br>2. Reduce messageCount<br>3. Compress content before capture |
|
|
296
296
|
|
|
297
297
|
**Agent Recovery Protocol:**
|
|
@@ -311,7 +311,7 @@ Agent:
|
|
|
311
311
|
1. ✅ Capture immediately (explicit request)
|
|
312
312
|
2. Use conversationId: "api-design-discussion-2026-01-28"
|
|
313
313
|
3. Tags: "api,design,architecture"
|
|
314
|
-
4. Report success with
|
|
314
|
+
4. Report success with Evidence ID
|
|
315
315
|
```
|
|
316
316
|
|
|
317
317
|
### 2. High-Value Content Detection
|
|
@@ -320,27 +320,27 @@ User: "We've decided to patent this algorithm approach."
|
|
|
320
320
|
|
|
321
321
|
Agent:
|
|
322
322
|
1. 🔍 Detect trigger: "patent" + "decided"
|
|
323
|
-
2. 💡 Suggest: "This looks like valuable
|
|
323
|
+
2. 💡 Suggest: "This looks like valuable evidence (contains patent decision). Save it?"
|
|
324
324
|
3. ✅ If user agrees, capture with tags: "patent,algorithm,decision,ip"
|
|
325
325
|
```
|
|
326
326
|
|
|
327
|
-
### 3.
|
|
327
|
+
### 3. Evidence Retrieval
|
|
328
328
|
```
|
|
329
329
|
User: "Find the conversation about OAuth implementation"
|
|
330
330
|
|
|
331
331
|
Agent:
|
|
332
|
-
1. 🔍 Search: list-footprints or search-
|
|
332
|
+
1. 🔍 Search: list-footprints or search-evidence with "OAuth"
|
|
333
333
|
2. 📄 Present matches with conversationId and brief summary
|
|
334
334
|
3. 🎯 If user selects one, get-footprint to show full content
|
|
335
335
|
```
|
|
336
336
|
|
|
337
337
|
### 4. Legal Export
|
|
338
338
|
```
|
|
339
|
-
User: "Export the patent
|
|
339
|
+
User: "Export the patent evidence for filing"
|
|
340
340
|
|
|
341
|
-
Agent:
|
|
342
|
-
1. 🔍 Help identify relevant
|
|
343
|
-
2. 📦 Export each
|
|
341
|
+
Agent:
|
|
342
|
+
1. 🔍 Help identify relevant evidence (search by "patent" tag)
|
|
343
|
+
2. 📦 Export each evidence as encrypted ZIP
|
|
344
344
|
3. ✅ Provide files with verification instructions
|
|
345
345
|
4. 📋 Remind about Git hash verification for legal proof
|
|
346
346
|
```
|
|
@@ -351,11 +351,11 @@ Agent:
|
|
|
351
351
|
- **Encryption**: XChaCha20-Poly1305 (256-bit) with Argon2id key derivation
|
|
352
352
|
- **Git Timestamps**: Cryptographic proof of creation time
|
|
353
353
|
- **SHA-256 Checksums**: Detect any content tampering
|
|
354
|
-
- **
|
|
354
|
+
- **Evidence Chain**: Each capture creates immutable Git commit
|
|
355
355
|
- **Storage**: Local SQLite with encrypted BLOBs (no cloud, no tracking)
|
|
356
356
|
|
|
357
357
|
**For legal proceedings:**
|
|
358
|
-
1. Export
|
|
358
|
+
1. Export evidence with `export-evidence`
|
|
359
359
|
2. Verify Git hash against repository
|
|
360
360
|
3. Check SHA-256 checksum matches
|
|
361
361
|
4. Git log shows creation timestamp
|
|
@@ -389,7 +389,7 @@ npx @pcircle/footprint
|
|
|
389
389
|
"command": "npx",
|
|
390
390
|
"args": ["@pcircle/footprint"],
|
|
391
391
|
"env": {
|
|
392
|
-
"FOOTPRINT_DB_PATH": "/path/to/
|
|
392
|
+
"FOOTPRINT_DB_PATH": "/path/to/evidence.db",
|
|
393
393
|
"FOOTPRINT_PASSWORD": "your-secure-password-here"
|
|
394
394
|
}
|
|
395
395
|
}
|
|
@@ -399,14 +399,14 @@ npx @pcircle/footprint
|
|
|
399
399
|
|
|
400
400
|
**Environment Variables:**
|
|
401
401
|
- `FOOTPRINT_PASSWORD` (required): Encryption passphrase
|
|
402
|
-
- `FOOTPRINT_DB_PATH` (optional): Path to SQLite database (default: `./
|
|
402
|
+
- `FOOTPRINT_DB_PATH` (optional): Path to SQLite database (default: `./evidence.db` in current directory)
|
|
403
403
|
|
|
404
404
|
## Performance Notes
|
|
405
405
|
|
|
406
406
|
- **Capture time**: ~1-3 seconds per conversation
|
|
407
407
|
- **Database size**: ~1KB per message on average
|
|
408
|
-
- **Git overhead**: ~100 bytes per
|
|
409
|
-
- **Search speed**: Sub-second for <1000
|
|
408
|
+
- **Git overhead**: ~100 bytes per evidence commit
|
|
409
|
+
- **Search speed**: Sub-second for <1000 evidence records
|
|
410
410
|
- **Export time**: ~5-15 seconds depending on content size
|
|
411
411
|
|
|
412
412
|
Large conversations (>100 messages) may take longer to encrypt and commit.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const DEFAULT_DATA_DIR: string;
|
|
2
|
+
export declare const CLAUDE_CONFIG_PATHS: {
|
|
3
|
+
darwin: string;
|
|
4
|
+
linux: string;
|
|
5
|
+
win32: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const SHELL_RC_FILES: {
|
|
8
|
+
bash: string;
|
|
9
|
+
zsh: string;
|
|
10
|
+
fish: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const MIN_PASSWORD_SCORE = 2;
|
|
13
|
+
export declare const MIN_PASSWORD_LENGTH = 12;
|
|
14
|
+
export declare const COLORS: {
|
|
15
|
+
success: string;
|
|
16
|
+
error: string;
|
|
17
|
+
warning: string;
|
|
18
|
+
info: string;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/cli/constants.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,QAAwC,CAAC;AAEtE,eAAO,MAAM,mBAAmB;;;;CAU/B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;CAI1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,eAAO,MAAM,MAAM;;;;;CAKlB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI constants for setup process
|
|
3
|
+
*/
|
|
4
|
+
import * as os from "os";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
export const DEFAULT_DATA_DIR = path.join(os.homedir(), ".footprint");
|
|
7
|
+
export const CLAUDE_CONFIG_PATHS = {
|
|
8
|
+
darwin: path.join(os.homedir(), "Library/Application Support/Claude/claude_desktop_config.json"),
|
|
9
|
+
linux: path.join(os.homedir(), ".config/Claude/claude_desktop_config.json"),
|
|
10
|
+
win32: path.join(os.homedir(), "AppData/Roaming/Claude/claude_desktop_config.json"),
|
|
11
|
+
};
|
|
12
|
+
export const SHELL_RC_FILES = {
|
|
13
|
+
bash: ".bashrc",
|
|
14
|
+
zsh: ".zshrc",
|
|
15
|
+
fish: ".config/fish/config.fish",
|
|
16
|
+
};
|
|
17
|
+
export const MIN_PASSWORD_SCORE = 2; // zxcvbn score (0-4)
|
|
18
|
+
export const MIN_PASSWORD_LENGTH = 12;
|
|
19
|
+
export const COLORS = {
|
|
20
|
+
success: "#00FF00",
|
|
21
|
+
error: "#FF0000",
|
|
22
|
+
warning: "#FFA500",
|
|
23
|
+
info: "#00BFFF",
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/cli/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,IAAI,CAAC,IAAI,CACf,EAAE,CAAC,OAAO,EAAE,EACZ,+DAA+D,CAChE;IACD,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,2CAA2C,CAAC;IAC3E,KAAK,EAAE,IAAI,CAAC,IAAI,CACd,EAAE,CAAC,OAAO,EAAE,EACZ,mDAAmD,CACpD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,QAAQ;IACb,IAAI,EAAE,0BAA0B;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,CAAC,qBAAqB;AAC1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;CAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/* global console, process */
|
|
3
|
+
import { runSetup } from "./setup.js";
|
|
4
|
+
const args = process.argv.slice(2);
|
|
5
|
+
const command = args[0];
|
|
6
|
+
async function main() {
|
|
7
|
+
switch (command) {
|
|
8
|
+
case "setup": {
|
|
9
|
+
await runSetup();
|
|
10
|
+
break;
|
|
11
|
+
}
|
|
12
|
+
default: {
|
|
13
|
+
// No command or unknown command - start MCP server
|
|
14
|
+
// Import and run server
|
|
15
|
+
const { main: startServer } = await import("../index.js");
|
|
16
|
+
await startServer();
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
main().catch((error) => {
|
|
22
|
+
console.error("Error:", error);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";AACA,6BAA6B;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,QAAQ,EAAE,CAAC;YACjB,MAAM;QACR,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,mDAAmD;YACnD,wBAAwB;YACxB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1D,MAAM,WAAW,EAAE,CAAC;YACpB,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/setup.ts"],"names":[],"mappings":";AAuXA;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAyE9C"}
|