@pcircle/footprint 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +136 -160
  2. package/SKILL.md +7 -7
  3. package/dist/src/analyzers/content-analyzer.d.ts.map +1 -1
  4. package/dist/src/analyzers/content-analyzer.js +20 -4
  5. package/dist/src/analyzers/content-analyzer.js.map +1 -1
  6. package/dist/src/cli/index.js +0 -0
  7. package/dist/src/cli/setup.d.ts.map +1 -1
  8. package/dist/src/cli/setup.js +34 -12
  9. package/dist/src/cli/setup.js.map +1 -1
  10. package/dist/src/cli/utils/env.d.ts +7 -2
  11. package/dist/src/cli/utils/env.d.ts.map +1 -1
  12. package/dist/src/cli/utils/env.js +37 -6
  13. package/dist/src/cli/utils/env.js.map +1 -1
  14. package/dist/src/index.d.ts +0 -1
  15. package/dist/src/index.d.ts.map +1 -1
  16. package/dist/src/index.js +41 -28
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/lib/crypto/decrypt.d.ts.map +1 -1
  19. package/dist/src/lib/crypto/decrypt.js +12 -8
  20. package/dist/src/lib/crypto/decrypt.js.map +1 -1
  21. package/dist/src/lib/crypto/encrypt.d.ts.map +1 -1
  22. package/dist/src/lib/crypto/encrypt.js +6 -3
  23. package/dist/src/lib/crypto/encrypt.js.map +1 -1
  24. package/dist/src/lib/crypto/key-derivation.d.ts +1 -1
  25. package/dist/src/lib/crypto/key-derivation.d.ts.map +1 -1
  26. package/dist/src/lib/crypto/key-derivation.js +11 -11
  27. package/dist/src/lib/crypto/key-derivation.js.map +1 -1
  28. package/dist/src/lib/storage/database.d.ts +46 -3
  29. package/dist/src/lib/storage/database.d.ts.map +1 -1
  30. package/dist/src/lib/storage/database.js +175 -80
  31. package/dist/src/lib/storage/database.js.map +1 -1
  32. package/dist/src/lib/storage/export.d.ts +1 -2
  33. package/dist/src/lib/storage/export.d.ts.map +1 -1
  34. package/dist/src/lib/storage/export.js +46 -33
  35. package/dist/src/lib/storage/export.js.map +1 -1
  36. package/dist/src/lib/storage/salt-storage.d.ts +1 -1
  37. package/dist/src/lib/storage/salt-storage.d.ts.map +1 -1
  38. package/dist/src/lib/storage/salt-storage.js +26 -18
  39. package/dist/src/lib/storage/salt-storage.js.map +1 -1
  40. package/dist/src/lib/storage/schema.d.ts +1 -1
  41. package/dist/src/lib/storage/schema.d.ts.map +1 -1
  42. package/dist/src/lib/storage/schema.js +29 -47
  43. package/dist/src/lib/storage/schema.js.map +1 -1
  44. package/dist/src/lib/tool-wrapper.d.ts.map +1 -1
  45. package/dist/src/lib/tool-wrapper.js +2 -2
  46. package/dist/src/lib/tool-wrapper.js.map +1 -1
  47. package/dist/src/prompts/skill-prompt.d.ts +6 -0
  48. package/dist/src/prompts/skill-prompt.d.ts.map +1 -0
  49. package/dist/src/prompts/skill-prompt.js +125 -0
  50. package/dist/src/prompts/skill-prompt.js.map +1 -0
  51. package/dist/src/tools/capture-footprint.d.ts +2 -2
  52. package/dist/src/tools/capture-footprint.d.ts.map +1 -1
  53. package/dist/src/tools/capture-footprint.js +52 -11
  54. package/dist/src/tools/capture-footprint.js.map +1 -1
  55. package/dist/src/tools/delete-footprints.d.ts +18 -1
  56. package/dist/src/tools/delete-footprints.d.ts.map +1 -1
  57. package/dist/src/tools/delete-footprints.js +53 -5
  58. package/dist/src/tools/delete-footprints.js.map +1 -1
  59. package/dist/src/tools/export-footprints.d.ts +11 -3
  60. package/dist/src/tools/export-footprints.d.ts.map +1 -1
  61. package/dist/src/tools/export-footprints.js +48 -9
  62. package/dist/src/tools/export-footprints.js.map +1 -1
  63. package/dist/src/tools/get-footprint.d.ts +1 -7
  64. package/dist/src/tools/get-footprint.d.ts.map +1 -1
  65. package/dist/src/tools/get-footprint.js +7 -3
  66. package/dist/src/tools/get-footprint.js.map +1 -1
  67. package/dist/src/tools/index.d.ts +1 -3
  68. package/dist/src/tools/index.d.ts.map +1 -1
  69. package/dist/src/tools/index.js +1 -3
  70. package/dist/src/tools/index.js.map +1 -1
  71. package/dist/src/tools/list-footprints.d.ts +1 -15
  72. package/dist/src/tools/list-footprints.d.ts.map +1 -1
  73. package/dist/src/tools/list-footprints.js +17 -6
  74. package/dist/src/tools/list-footprints.js.map +1 -1
  75. package/dist/src/tools/manage-tags.d.ts +47 -0
  76. package/dist/src/tools/manage-tags.d.ts.map +1 -0
  77. package/dist/src/tools/manage-tags.js +109 -0
  78. package/dist/src/tools/manage-tags.js.map +1 -0
  79. package/dist/src/tools/search-footprints.d.ts +2 -16
  80. package/dist/src/tools/search-footprints.d.ts.map +1 -1
  81. package/dist/src/tools/search-footprints.js +23 -7
  82. package/dist/src/tools/search-footprints.js.map +1 -1
  83. package/dist/src/tools/suggest-capture.d.ts +1 -1
  84. package/dist/src/tools/suggest-capture.d.ts.map +1 -1
  85. package/dist/src/tools/suggest-capture.js +6 -2
  86. package/dist/src/tools/suggest-capture.js.map +1 -1
  87. package/dist/src/tools/verify-footprint.d.ts +7 -54
  88. package/dist/src/tools/verify-footprint.d.ts.map +1 -1
  89. package/dist/src/tools/verify-footprint.js +11 -8
  90. package/dist/src/tools/verify-footprint.js.map +1 -1
  91. package/dist/src/types.d.ts +4 -4
  92. package/dist/src/types.d.ts.map +1 -1
  93. package/dist/src/ui/register.js +1 -1
  94. package/dist/src/ui/register.js.map +1 -1
  95. package/dist/ui/dashboard.html +80 -67
  96. package/dist/ui/detail.html +62 -49
  97. package/dist/ui/export.html +64 -51
  98. package/package.json +18 -13
  99. package/dist/src/lib/errors/base-error.d.ts +0 -15
  100. package/dist/src/lib/errors/base-error.d.ts.map +0 -1
  101. package/dist/src/lib/errors/base-error.js +0 -34
  102. package/dist/src/lib/errors/base-error.js.map +0 -1
  103. package/dist/src/lib/errors/crypto-error.d.ts +0 -29
  104. package/dist/src/lib/errors/crypto-error.d.ts.map +0 -1
  105. package/dist/src/lib/errors/crypto-error.js +0 -43
  106. package/dist/src/lib/errors/crypto-error.js.map +0 -1
  107. package/dist/src/lib/errors/index.d.ts +0 -26
  108. package/dist/src/lib/errors/index.d.ts.map +0 -1
  109. package/dist/src/lib/errors/index.js +0 -26
  110. package/dist/src/lib/errors/index.js.map +0 -1
  111. package/dist/src/lib/errors/storage-error.d.ts +0 -25
  112. package/dist/src/lib/errors/storage-error.d.ts.map +0 -1
  113. package/dist/src/lib/errors/storage-error.js +0 -38
  114. package/dist/src/lib/errors/storage-error.js.map +0 -1
  115. package/dist/src/lib/errors/validation-error.d.ts +0 -21
  116. package/dist/src/lib/errors/validation-error.d.ts.map +0 -1
  117. package/dist/src/lib/errors/validation-error.js +0 -29
  118. package/dist/src/lib/errors/validation-error.js.map +0 -1
  119. package/dist/src/test-helpers.d.ts +0 -33
  120. package/dist/src/test-helpers.d.ts.map +0 -1
  121. package/dist/src/test-helpers.js +0 -108
  122. package/dist/src/test-helpers.js.map +0 -1
  123. package/dist/src/tools/get-tag-stats.d.ts +0 -30
  124. package/dist/src/tools/get-tag-stats.d.ts.map +0 -1
  125. package/dist/src/tools/get-tag-stats.js +0 -33
  126. package/dist/src/tools/get-tag-stats.js.map +0 -1
  127. package/dist/src/tools/remove-tag.d.ts +0 -22
  128. package/dist/src/tools/remove-tag.d.ts.map +0 -1
  129. package/dist/src/tools/remove-tag.js +0 -30
  130. package/dist/src/tools/remove-tag.js.map +0 -1
  131. package/dist/src/tools/rename-tag.d.ts +0 -24
  132. package/dist/src/tools/rename-tag.d.ts.map +0 -1
  133. package/dist/src/tools/rename-tag.js +0 -34
  134. package/dist/src/tools/rename-tag.js.map +0 -1
package/README.md CHANGED
@@ -3,219 +3,195 @@
3
3
  [![npm version](https://img.shields.io/npm/v/@pcircle/footprint)](https://www.npmjs.com/package/@pcircle/footprint)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
5
5
 
6
- Model Context Protocol (MCP) server that automatically captures and encrypts LLM conversations as legal evidence.
6
+ MCP server that automatically captures and encrypts AI conversations as verifiable records with Git timestamps and end-to-end encryption.
7
7
 
8
8
  ## Why Footprint?
9
9
 
10
- - **Prove IP Ownership** - Timestamped evidence of LLM-assisted work
11
- - **Zero Effort** - Automatic capture via MCP protocol
12
- - **Privacy First** - End-to-end encrypted, locally stored
13
- - **Legally Valid** - Git timestamps + SHA-256 checksums
10
+ - **Prove IP Ownership** Timestamped evidence of AI-assisted work
11
+ - **Zero Effort** Automatic capture via MCP protocol
12
+ - **Privacy First** End-to-end encrypted, locally stored
13
+ - **Legally Valid** Git timestamps + SHA-256 checksums
14
14
 
15
15
  ## Quick Start
16
16
 
17
- **One command to set up everything:**
18
-
19
17
  ```bash
20
18
  npx @pcircle/footprint setup
21
19
  ```
22
20
 
23
- The interactive wizard will:
24
-
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
30
-
31
- **That's it!** Restart Claude Desktop and your conversations are being captured.
32
-
33
- ### Advanced Installation
34
-
35
- For manual setup or custom configurations, see the [full installation guide](https://github.com/PCIRCLE-AI/footprint-mcp#installation).
36
-
37
- ## Features
38
-
39
- - 🔐 XChaCha20-Poly1305 encryption
40
- - 🕒 Git commit timestamps
41
- - 📦 Tamper-proof ZIP exports
42
- - 🔍 Search and retrieve evidence
43
- - 🤖 AI-powered capture suggestions
44
- - ✅ Integrity verification
45
- - 🏷️ Tag management
46
- - 📊 Interactive UI dashboard
47
-
48
- ## Architecture
49
-
50
- The Footprint MCP server follows a modular, layered architecture:
51
-
21
+ The interactive wizard auto-detects your system, validates your encryption password, and configures Claude Desktop automatically.
22
+
23
+ ### Manual Configuration
24
+
25
+ Add to Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):
26
+
27
+ ```json
28
+ {
29
+ "mcpServers": {
30
+ "footprint": {
31
+ "command": "npx",
32
+ "args": ["@pcircle/footprint"],
33
+ "env": {
34
+ "FOOTPRINT_DATA_DIR": "/path/to/footprint-data",
35
+ "FOOTPRINT_PASSPHRASE": "your-secure-passphrase"
36
+ }
37
+ }
38
+ }
39
+ }
52
40
  ```
53
- src/
54
- ├── index.ts # Main MCP server
55
- ├── tools/ # MCP tool handlers (11 tools)
56
- │ ├── capture-footprint.ts
57
- │ ├── list-footprints.ts
58
- │ ├── get-footprint.ts
59
- │ ├── export-footprints.ts
60
- │ ├── search-footprints.ts
61
- │ ├── verify-footprint.ts
62
- │ ├── suggest-capture.ts
63
- │ ├── delete-footprints.ts
64
- │ ├── rename-tag.ts
65
- │ ├── remove-tag.ts
66
- │ └── get-tag-stats.ts
67
- ├── analyzers/ # Content analysis modules
68
- │ └── content-analyzer.ts
69
- ├── lib/
70
- │ ├── crypto/ # Encryption & key derivation
71
- │ ├── storage/ # Database & export
72
- │ ├── tool-wrapper.ts # Error handling wrapper
73
- │ └── tool-response.ts # Response formatters
74
- └── ui/ # Interactive dashboards
75
- ```
76
-
77
- ### Design Principles
78
-
79
- - **Modular**: Each tool is self-contained with schema, metadata, and handler
80
- - **Type-Safe**: Full TypeScript with Zod schema validation
81
- - **Testable**: Dependency injection enables isolated testing
82
- - **Secure**: Encrypted storage with integrity verification
83
- - **Maintainable**: Clear separation of concerns across layers
84
-
85
- ## MCP Tools
86
-
87
- ### Core Tools
88
-
89
- #### capture-footprint
90
-
91
- Captures and encrypts an LLM conversation as evidence.
92
-
93
- **Parameters:**
94
-
95
- - `conversationId` - Unique identifier for the conversation
96
- - `llmProvider` - LLM provider name (e.g., "Claude Sonnet 4.5")
97
- - `content` - Full conversation content
98
- - `messageCount` - Number of messages in conversation
99
- - `tags` (optional) - Comma-separated tags
100
-
101
- #### list-footprints
102
41
 
103
- Lists all captured evidence with pagination support.
42
+ For Claude Code, add to `~/.claude/mcp_settings.json` with the same structure.
104
43
 
105
- **Parameters:**
44
+ ## MCP Tools (9 tools)
106
45
 
107
- - `limit` (optional) - Maximum results per page
108
- - `offset` (optional) - Pagination offset
46
+ ### capture-footprint
109
47
 
110
- #### get-footprint
48
+ Capture and encrypt an LLM conversation. Use when: user explicitly asks to save, or high-value content (IP, legal, business, research, compliance).
111
49
 
112
- Retrieves and decrypts specific evidence by ID.
50
+ | Parameter | Required | Description |
51
+ | ---------------- | -------- | ------------------------------------------------------------------ |
52
+ | `conversationId` | Yes | Unique ID, format: `{topic}-{descriptor}-{YYYY-MM-DD}` |
53
+ | `content` | Yes | Full conversation text including both human and assistant messages |
54
+ | `tags` | No | Comma-separated tags |
55
+ | `llmProvider` | No | Provider name (default: `"unknown"`) |
56
+ | `messageCount` | No | Number of messages (auto-calculated from content if omitted) |
113
57
 
114
- **Parameters:**
58
+ ### list-footprints
115
59
 
116
- - `id` - Evidence ID
60
+ List all captured evidence with pagination.
117
61
 
118
- #### export-footprints
62
+ | Parameter | Required | Description |
63
+ | --------- | -------- | ------------------------------ |
64
+ | `limit` | No | Results per page (default: 10) |
65
+ | `offset` | No | Pagination offset |
66
+ | `tags` | No | Filter by tags |
119
67
 
120
- Exports evidence to tamper-proof encrypted ZIP archive.
68
+ ### get-footprint
121
69
 
122
- **Parameters:**
70
+ Retrieve and decrypt specific evidence by ID.
123
71
 
124
- - `evidenceIds` - Array of evidence IDs to export
125
- - `includeGitInfo` (optional) - Include git metadata
72
+ | Parameter | Required | Description |
73
+ | --------- | -------- | ----------- |
74
+ | `id` | Yes | Evidence ID |
126
75
 
127
- ### Search & Discovery
76
+ ### search-footprints
128
77
 
129
- #### search-footprints
78
+ Search conversations by query, tags, and date range. Query matches conversationId and tags (LIKE). Tags filter uses AND logic.
130
79
 
131
- Search and filter evidence by query, tags, or date range.
80
+ | Parameter | Required | Description |
81
+ | ---------- | -------- | ------------------------------ |
82
+ | `query` | No | Search text |
83
+ | `tags` | No | Array of tags (AND logic) |
84
+ | `dateFrom` | No | Start date (ISO 8601) |
85
+ | `dateTo` | No | End date (ISO 8601) |
86
+ | `limit` | No | Results per page (default: 10) |
87
+ | `offset` | No | Pagination offset |
132
88
 
133
- **Parameters:**
89
+ ### export-footprints
134
90
 
135
- - `query` (optional) - Search text (matches conversationId, tags)
136
- - `tags` (optional) - Array of tags to filter by
137
- - `dateFrom` (optional) - Start date (ISO format)
138
- - `dateTo` (optional) - End date (ISO format)
139
- - `limit` (optional) - Maximum results
140
- - `offset` (optional) - Pagination offset
91
+ Export evidence to encrypted ZIP archive.
141
92
 
142
- #### suggest-capture
93
+ | Parameter | Required | Description |
94
+ | ------------- | -------- | ----------------------------------------------------- |
95
+ | `evidenceIds` | No | Specific IDs to export (all if omitted) |
96
+ | `outputMode` | No | `"file"`, `"base64"`, or `"both"` (default: `"both"`) |
143
97
 
144
- Analyze conversation content and suggest whether to capture it as evidence.
98
+ ### verify-footprint
145
99
 
146
- **Parameters:**
100
+ Verify evidence integrity using stored checksums and Git timestamps.
147
101
 
148
- - `summary` - Conversation summary or key content to analyze
102
+ | Parameter | Required | Description |
103
+ | --------- | -------- | ----------- |
104
+ | `id` | Yes | Evidence ID |
149
105
 
150
- **Returns:**
106
+ Returns: `integrityVerified`, `checksumValid`, `gitTimestamp`
151
107
 
152
- - `shouldCapture` - Whether to capture (based on keyword analysis)
153
- - `reason` - Human-readable explanation
154
- - `suggestedTags` - Recommended tags
155
- - `suggestedConversationId` - Recommended ID
156
- - `confidence` - Confidence score (0-1)
108
+ ### delete-footprints
157
109
 
158
- ### Verification
110
+ Permanently delete evidence records. Uses two-step confirmation.
159
111
 
160
- #### verify-footprint
112
+ | Parameter | Required | Description |
113
+ | --------------- | -------- | ---------------------------------------------------- |
114
+ | `evidenceIds` | Yes | Array of evidence IDs |
115
+ | `confirmDelete` | No | Set `true` to confirm (default: `false` for preview) |
161
116
 
162
- Verify the integrity and authenticity of captured evidence.
117
+ ### suggest-capture
163
118
 
164
- **Parameters:**
119
+ AI-powered capture suggestion based on keyword analysis.
165
120
 
166
- - `id` - Evidence ID to verify
121
+ | Parameter | Required | Description |
122
+ | --------- | -------- | ------------------------------- |
123
+ | `content` | Yes | Conversation content to analyze |
167
124
 
168
- **Returns:**
125
+ ### manage-tags
169
126
 
170
- - `verified` - Overall verification status
171
- - `checks` - Detailed checks (content integrity, git timestamp, encryption)
172
- - `legalReadiness` - Whether evidence meets legal standards
127
+ Unified tag management with three actions: `stats`, `rename`, `remove`.
173
128
 
174
- ### Management
129
+ | Parameter | Required | Description |
130
+ | --------- | ---------- | ------------------------------------- |
131
+ | `action` | Yes | `"stats"` \| `"rename"` \| `"remove"` |
132
+ | `tag` | For remove | Tag to remove |
133
+ | `oldTag` | For rename | Current tag name |
134
+ | `newTag` | For rename | New tag name |
175
135
 
176
- #### delete-footprints
136
+ ## MCP Prompts (3 prompts)
177
137
 
178
- Delete evidence records permanently.
138
+ - **`footprint-skill`** Full agent behavior guide (decision tree, triggers, workflows, error recovery)
139
+ - **`footprint-quick-ref`** — Condensed quick reference for tool selection and tag conventions
140
+ - **`footprint-should-capture`** — Semantic decision framework for evaluating capture worthiness (takes `conversationSummary` argument)
179
141
 
180
- **Parameters:**
181
-
182
- - `evidenceIds` - Array of evidence IDs to delete
183
-
184
- #### rename-tag
185
-
186
- Rename a tag across all evidence.
187
-
188
- **Parameters:**
189
-
190
- - `oldTag` - Current tag name
191
- - `newTag` - New tag name
192
-
193
- #### remove-tag
194
-
195
- Remove a tag from all evidence.
196
-
197
- **Parameters:**
198
-
199
- - `tag` - Tag name to remove
200
-
201
- #### get-tag-stats
202
-
203
- Get statistics about tag usage.
204
-
205
- **Returns:**
142
+ ## Architecture
206
143
 
207
- - Tag names and their usage counts
144
+ ```
145
+ packages/mcp-server/
146
+ ├── src/
147
+ │ ├── index.ts # Main MCP server
148
+ │ ├── prompts/ # MCP prompt handlers
149
+ │ │ └── skill-prompt.ts
150
+ │ ├── tools/ # MCP tool handlers (9 tools)
151
+ │ │ ├── capture-footprint.ts
152
+ │ │ ├── list-footprints.ts
153
+ │ │ ├── get-footprint.ts
154
+ │ │ ├── search-footprints.ts
155
+ │ │ ├── export-footprints.ts
156
+ │ │ ├── verify-footprint.ts
157
+ │ │ ├── delete-footprints.ts
158
+ │ │ ├── suggest-capture.ts
159
+ │ │ └── manage-tags.ts
160
+ │ ├── analyzers/ # Content analysis
161
+ │ ├── cli/ # Setup wizard
162
+ │ ├── lib/
163
+ │ │ ├── crypto/ # XChaCha20-Poly1305 + Argon2id
164
+ │ │ └── storage/ # SQLite + Git timestamps
165
+ │ └── ui/ # Interactive dashboards
166
+ └── tests/
167
+ ```
208
168
 
209
169
  ## Security
210
170
 
211
171
  - **Encryption**: XChaCha20-Poly1305 (256-bit)
212
172
  - **Key Derivation**: Argon2id (OWASP recommended)
213
173
  - **Storage**: Local SQLite with encrypted BLOBs
174
+ - **No cloud, no tracking, no data collection**
175
+
176
+ > **Store your password securely** — loss means permanent data loss.
214
177
 
215
- ⚠️ **Store your password securely** - Loss means permanent data loss.
178
+ ## Development
179
+
180
+ ```bash
181
+ git clone https://github.com/PCIRCLE-AI/footprint.git
182
+ cd footprint
183
+ pnpm install
184
+ pnpm build
185
+ pnpm test
186
+ ```
216
187
 
217
188
  ## Support
218
189
 
219
- - [Documentation](https://github.com/PCIRCLE-AI/footprint#readme)
190
+ - [GitHub](https://github.com/PCIRCLE-AI/footprint)
220
191
  - [Issues](https://github.com/PCIRCLE-AI/footprint/issues)
221
- - [License](https://github.com/PCIRCLE-AI/footprint/blob/main/LICENSE)
192
+ - [npm](https://www.npmjs.com/package/@pcircle/footprint)
193
+ - [Website](https://footprint.memesh.ai)
194
+
195
+ ## License
196
+
197
+ MIT License — see [LICENSE](./LICENSE) for details.
package/SKILL.md CHANGED
@@ -287,10 +287,10 @@ Tags: {tags}
287
287
 
288
288
  | Error | Likely Cause | Recovery Action |
289
289
  |-------|--------------|-----------------|
290
- | "Password required" | FOOTPRINT_PASSWORD not set | 1. Check env config<br>2. Restart MCP server<br>3. Verify password in env |
290
+ | "Password required" | FOOTPRINT_PASSPHRASE not set | 1. Check env config<br>2. Restart MCP server<br>3. Verify passphrase in env |
291
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
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
- | "Database error" | DB path/permissions issues | 1. Check FOOTPRINT_DB_PATH exists<br>2. Verify file permissions<br>3. Create directory if missing |
293
+ | "Database error" | DB path/permissions issues | 1. Check FOOTPRINT_DATA_DIR exists<br>2. Verify file permissions<br>3. Create directory if missing |
294
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
 
@@ -347,7 +347,7 @@ Agent:
347
347
 
348
348
  ## Security & Verification
349
349
 
350
- - **Password**: Set via `FOOTPRINT_PASSWORD` env var (never ask user in chat)
350
+ - **Password**: Set via `FOOTPRINT_PASSPHRASE` env var (never ask user in chat)
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
@@ -389,8 +389,8 @@ npx @pcircle/footprint
389
389
  "command": "npx",
390
390
  "args": ["@pcircle/footprint"],
391
391
  "env": {
392
- "FOOTPRINT_DB_PATH": "/path/to/evidence.db",
393
- "FOOTPRINT_PASSWORD": "your-secure-password-here"
392
+ "FOOTPRINT_DATA_DIR": "/path/to/data",
393
+ "FOOTPRINT_PASSPHRASE": "your-secure-password-here"
394
394
  }
395
395
  }
396
396
  }
@@ -398,8 +398,8 @@ npx @pcircle/footprint
398
398
  ```
399
399
 
400
400
  **Environment Variables:**
401
- - `FOOTPRINT_PASSWORD` (required): Encryption passphrase
402
- - `FOOTPRINT_DB_PATH` (optional): Path to SQLite database (default: `./evidence.db` in current directory)
401
+ - `FOOTPRINT_PASSPHRASE` (required): Encryption passphrase
402
+ - `FOOTPRINT_DATA_DIR` (optional): Directory for data storage (default: `~/.footprint`)
403
403
 
404
404
  ## Performance Notes
405
405
 
@@ -1 +1 @@
1
- {"version":3,"file":"content-analyzer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/content-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAkLD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAuB9D"}
1
+ {"version":3,"file":"content-analyzer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/content-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAsMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAwB9D"}
@@ -55,11 +55,26 @@ const KEYWORD_CATEGORIES = {
55
55
  "requirement",
56
56
  ],
57
57
  };
58
+ /**
59
+ * Pre-compiled word-boundary regexes for each keyword to avoid
60
+ * creating RegExp objects on every call to matchesWord.
61
+ */
62
+ const WORD_PATTERNS = new Map();
63
+ for (const keywords of Object.values(KEYWORD_CATEGORIES)) {
64
+ for (const word of keywords) {
65
+ WORD_PATTERNS.set(word, new RegExp(`\\b${word.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`, "i"));
66
+ }
67
+ }
58
68
  /**
59
69
  * Match whole words only to avoid false positives
60
70
  * (e.g., "logarithm" should not match "algorithm")
61
71
  */
62
72
  function matchesWord(text, word) {
73
+ const cached = WORD_PATTERNS.get(word);
74
+ if (cached) {
75
+ return cached.test(text);
76
+ }
77
+ // Fallback for dynamic words not in KEYWORD_CATEGORIES
63
78
  const regex = new RegExp(`\\b${word.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`, "i");
64
79
  return regex.test(text);
65
80
  }
@@ -127,8 +142,9 @@ function generateTags(matches) {
127
142
  */
128
143
  function generateConversationId(matches) {
129
144
  const currentDate = new Date().toISOString().slice(0, 10);
145
+ const suffix = Math.random().toString(36).slice(2, 6);
130
146
  if (matches.length === 0) {
131
- return `conversation-${currentDate}`;
147
+ return `conversation-${currentDate}-${suffix}`;
132
148
  }
133
149
  // Extract key terms for ID generation
134
150
  const primaryKeywords = matches[0].keywords.slice(0, 2);
@@ -136,9 +152,9 @@ function generateConversationId(matches) {
136
152
  .map((k) => k.replace(/\s+/g, "-").replace(/[^a-z0-9-]/g, ""))
137
153
  .filter((k) => k.length > 0);
138
154
  if (cleanKeywords.length > 0) {
139
- return `${cleanKeywords.join("-")}-${currentDate}`;
155
+ return `${cleanKeywords.join("-")}-${currentDate}-${suffix}`;
140
156
  }
141
- return `${matches[0].category}-discussion-${currentDate}`;
157
+ return `${matches[0].category}-discussion-${currentDate}-${suffix}`;
142
158
  }
143
159
  /**
144
160
  * Analyze conversation content and determine if it should be captured as evidence
@@ -148,7 +164,7 @@ function generateConversationId(matches) {
148
164
  */
149
165
  export function analyzeContent(summary) {
150
166
  const normalizedText = summary.toLowerCase();
151
- const wordCount = normalizedText.split(/\s+/).length;
167
+ const wordCount = normalizedText.split(/\s+/).filter((w) => w.length > 0).length || 1;
152
168
  // Find keyword matches
153
169
  const matches = findKeywordMatches(normalizedText);
154
170
  const shouldCapture = matches.length > 0;
@@ -1 +1 @@
1
- {"version":3,"file":"content-analyzer.js","sourceRoot":"","sources":["../../../src/analyzers/content-analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-analyzer.js","sourceRoot":"","sources":["../../../src/analyzers/content-analyzer.ts"],"names":[],"mappings":"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"}
File without changes
@@ -1 +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"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/setup.ts"],"names":[],"mappings":";AAqZA;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA4E9C"}
@@ -8,7 +8,7 @@ import * as path from "path";
8
8
  import { detectSystem } from "./utils/detect.js";
9
9
  import { validatePassword, validatePath } from "./utils/validation.js";
10
10
  import { readClaudeConfig, writeClaudeConfig, backupConfig, addFootprintToConfig, } from "./utils/config.js";
11
- import { generateEnvExport, appendToShellRc } from "./utils/env.js";
11
+ import { generateEnvExport, appendToShellRc, removeFootprintFromRc, } from "./utils/env.js";
12
12
  import { DEFAULT_DATA_DIR } from "./constants.js";
13
13
  import * as fs from "fs";
14
14
  /**
@@ -21,12 +21,14 @@ function getErrorMessage(error) {
21
21
  * Timing-safe string comparison to prevent timing attacks
22
22
  */
23
23
  function safeCompare(a, b) {
24
- if (a.length !== b.length)
25
- return false;
26
- // Convert strings to buffers for timing-safe comparison
27
- const bufA = Buffer.from(a, "utf-8");
28
- const bufB = Buffer.from(b, "utf-8");
29
- return timingSafeEqual(bufA, bufB);
24
+ const bufA = Buffer.from(a);
25
+ const bufB = Buffer.from(b);
26
+ const maxLen = Math.max(bufA.length, bufB.length);
27
+ const paddedA = Buffer.alloc(maxLen);
28
+ const paddedB = Buffer.alloc(maxLen);
29
+ bufA.copy(paddedA);
30
+ bufB.copy(paddedB);
31
+ return bufA.length === bufB.length && timingSafeEqual(paddedA, paddedB);
30
32
  }
31
33
  /**
32
34
  * Welcome message
@@ -143,7 +145,7 @@ async function setupEnvironment(system, config) {
143
145
  if (!system.shellRcPath) {
144
146
  console.log(chalk.yellow("\n⚠️ Shell RC file not found. Manual setup required:"));
145
147
  console.log(chalk.gray(generateEnvExport(system.shell, config.dataDir, config.passphrase)));
146
- return;
148
+ return false;
147
149
  }
148
150
  const { setupEnv } = await prompts({
149
151
  type: "confirm",
@@ -152,12 +154,13 @@ async function setupEnvironment(system, config) {
152
154
  initial: true,
153
155
  });
154
156
  if (!setupEnv)
155
- return;
157
+ return false;
156
158
  const spinner = ora("Setting up environment variables...").start();
157
159
  try {
158
160
  const envExport = generateEnvExport(system.shell, config.dataDir, config.passphrase);
159
161
  appendToShellRc(system.shellRcPath, envExport);
160
162
  spinner.succeed(chalk.green("Environment variables configured!"));
163
+ return true;
161
164
  }
162
165
  catch (error) {
163
166
  spinner.fail(chalk.red(`Failed to setup environment: ${getErrorMessage(error)}`));
@@ -254,6 +257,21 @@ function createConfigRollback(backupPath, configPath) {
254
257
  }
255
258
  };
256
259
  }
260
+ /**
261
+ * Create rollback action for shell RC file modification
262
+ */
263
+ function createShellRcRollback(rcPath) {
264
+ return () => {
265
+ try {
266
+ if (removeFootprintFromRc(rcPath)) {
267
+ console.log(chalk.gray(` Rolled back: Removed Footprint config from ${rcPath}`));
268
+ }
269
+ }
270
+ catch (error) {
271
+ console.warn(chalk.yellow(` Warning: Failed to clean ${rcPath}: ${getErrorMessage(error)}`));
272
+ }
273
+ };
274
+ }
257
275
  /**
258
276
  * Find the most recent backup file for a config
259
277
  */
@@ -262,7 +280,8 @@ function findLatestBackup(configPath) {
262
280
  const basename = path.basename(configPath);
263
281
  const backupFiles = fs
264
282
  .readdirSync(dir)
265
- .filter((f) => f.startsWith(`${basename}.backup`));
283
+ .filter((f) => f.startsWith(`${basename}.backup`))
284
+ .sort();
266
285
  if (backupFiles.length === 0)
267
286
  return null;
268
287
  return path.join(dir, backupFiles[backupFiles.length - 1]);
@@ -303,8 +322,11 @@ export async function runSetup() {
303
322
  else if (!system.claudeConfigPath) {
304
323
  printManualConfigInstructions(config);
305
324
  }
306
- // Setup environment variables (tracked for rollback)
307
- await setupEnvironment(system, config);
325
+ // Setup environment variables (tracked for rollback only if modified)
326
+ const envModified = await setupEnvironment(system, config);
327
+ if (envModified && system.shellRcPath) {
328
+ rollbackActions.push(createShellRcRollback(system.shellRcPath));
329
+ }
308
330
  // If we get here, setup succeeded - discard rollback actions
309
331
  rollbackActions.length = 0;
310
332
  printNextSteps(config);
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/setup.ts"],"names":[],"mappings":"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"}