@pcircle/footprint 1.6.0 → 1.7.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 +111 -44
- package/dist/ui/dashboard.html +7 -7
- package/dist/ui/detail.html +1 -1
- package/dist/ui/export.html +1 -1
- package/dist/ui/session-dashboard-live.html +1 -1
- package/dist/ui/session-dashboard.html +1 -1
- package/dist/ui/session-detail-live.html +1 -1
- package/dist/ui/session-detail.html +1 -1
- package/package.json +1 -16
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,7 +3,15 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@pcircle/footprint)
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
Read in:
|
|
7
|
+
[English](../../README.md)
|
|
8
|
+
|
|
|
9
|
+
[繁體中文](../../README.zh-TW.md)
|
|
10
|
+
|
|
|
11
|
+
[日本語](../../README.ja.md)
|
|
12
|
+
|
|
13
|
+
Project site:
|
|
14
|
+
[footprint.memesh.ai](https://footprint.memesh.ai/)
|
|
7
15
|
|
|
8
16
|
`@pcircle/footprint` is a local-first MCP server for AI-assisted work continuity. It gives you one place to:
|
|
9
17
|
|
|
@@ -55,6 +63,17 @@ If you want Footprint to suggest the right context before a run begins:
|
|
|
55
63
|
footprint run codex --prepare-context -- <args...>
|
|
56
64
|
```
|
|
57
65
|
|
|
66
|
+
### Choose Your Next Read
|
|
67
|
+
|
|
68
|
+
- Install and first-run setup:
|
|
69
|
+
[Getting Started](../../docs/getting-started.md)
|
|
70
|
+
- Environment and deployment details:
|
|
71
|
+
[Configuration](../../docs/configuration.md)
|
|
72
|
+
- MCP tool walkthrough:
|
|
73
|
+
[MCP Tools Overview](../../docs/mcp-tools.md)
|
|
74
|
+
- Full docs map:
|
|
75
|
+
[Docs Index](../../docs/README.md)
|
|
76
|
+
|
|
58
77
|
### Install And Configure
|
|
59
78
|
|
|
60
79
|
```bash
|
|
@@ -101,6 +120,12 @@ footprint demo --host 127.0.0.1 --port 4310
|
|
|
101
120
|
footprint demo --open
|
|
102
121
|
```
|
|
103
122
|
|
|
123
|
+
Repo-local shortcut:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
pnpm --dir packages/mcp-server demo:live
|
|
127
|
+
```
|
|
128
|
+
|
|
104
129
|
Recorder inspection commands:
|
|
105
130
|
|
|
106
131
|
```bash
|
|
@@ -135,33 +160,39 @@ footprint context activate <context-id> [--cwd <path>]
|
|
|
135
160
|
footprint demo [--host <address>] [--port <number>] [--open]
|
|
136
161
|
```
|
|
137
162
|
|
|
163
|
+
Compatibility aliases:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
footprint list-sessions [--query "<text>"] [--issue-key "<issue-key>"] [--host <claude|gemini|codex>] [--status <running|completed|failed|interrupted>]
|
|
167
|
+
footprint get-session <session-id> [--message-limit <n>] [--message-offset <n>] [--trend-limit <n>] [--trend-offset <n>] [--timeline-limit <n>] [--timeline-offset <n>] [--artifact-limit <n>] [--artifact-offset <n>] [--narrative-limit <n>] [--narrative-offset <n>] [--decision-limit <n>] [--decision-offset <n>]
|
|
168
|
+
footprint export-sessions [<session-id> ...] [--query "<text>"] [--issue-key "<issue-key>"] [--host <claude|gemini|codex>] [--status <running|completed|failed|interrupted>] [--group-by <issue|family>]
|
|
169
|
+
footprint get-session-messages <session-id> [--limit <n>] [--offset <n>]
|
|
170
|
+
footprint get-session-trends <session-id> [--limit <n>] [--offset <n>]
|
|
171
|
+
footprint get-session-timeline <session-id> [--limit <n>] [--offset <n>]
|
|
172
|
+
footprint get-session-artifacts <session-id> [--limit <n>] [--offset <n>]
|
|
173
|
+
footprint get-session-narrative <session-id> [--kind <journal|project-summary|handoff>] [--limit <n>] [--offset <n>]
|
|
174
|
+
footprint get-session-decisions <session-id> [--limit <n>] [--offset <n>]
|
|
175
|
+
footprint search-history "<query>" [--host <claude|gemini|codex>] [--status <running|completed|failed|interrupted>]
|
|
176
|
+
footprint get-history-trends [--query "<text>"] [--issue-key "<issue-key>"] [--host <claude|gemini|codex>] [--status <running|completed|failed|interrupted>] [--group-by <issue|family>]
|
|
177
|
+
footprint get-history-handoff [--query "<text>"] [--issue-key "<issue-key>"] [--host <claude|gemini|codex>] [--status <running|completed|failed|interrupted>] [--group-by <issue|family>]
|
|
178
|
+
footprint list-contexts
|
|
179
|
+
footprint get-context <context-id>
|
|
180
|
+
footprint resolve-context [--session <session-id>] [--cwd <path>] [--title "<text>"] [--host <claude|gemini|codex>]
|
|
181
|
+
footprint prepare-context [--session <session-id>] [--cwd <path>] [--title "<text>"] [--host <claude|gemini|codex>] [--interactive] [--json]
|
|
182
|
+
footprint confirm-context-link <session-id> [<session-id> ...] [--context <context-id>] [--label "<label>"] [--set-preferred]
|
|
183
|
+
footprint reject-context-link <session-id> --context <context-id>
|
|
184
|
+
footprint move-session-context <session-id> [--context <context-id>] [--label "<label>"] [--set-preferred]
|
|
185
|
+
footprint merge-contexts <source-context-id> <target-context-id>
|
|
186
|
+
footprint split-context <context-id> --sessions <session-id,session-id,...> [--label "<label>"] [--set-preferred]
|
|
187
|
+
footprint set-active-context <context-id> [--cwd <path>]
|
|
188
|
+
```
|
|
189
|
+
|
|
138
190
|
Add `--json` to the query commands above when you want scriptable output.
|
|
139
191
|
|
|
140
192
|
### Run As An MCP Server
|
|
141
193
|
|
|
142
194
|
When invoked without a CLI subcommand, Footprint starts the MCP server on stdio.
|
|
143
195
|
|
|
144
|
-
### Manual MCP Configuration
|
|
145
|
-
|
|
146
|
-
Claude Desktop example:
|
|
147
|
-
|
|
148
|
-
```json
|
|
149
|
-
{
|
|
150
|
-
"mcpServers": {
|
|
151
|
-
"footprint": {
|
|
152
|
-
"command": "npx",
|
|
153
|
-
"args": ["@pcircle/footprint"],
|
|
154
|
-
"env": {
|
|
155
|
-
"FOOTPRINT_DATA_DIR": "/path/to/footprint-data",
|
|
156
|
-
"FOOTPRINT_PASSPHRASE": "your-secure-passphrase"
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
For Claude Code, use the same server definition in `~/.claude/mcp_settings.json`.
|
|
164
|
-
|
|
165
196
|
## Product Surfaces
|
|
166
197
|
|
|
167
198
|
### Session History And Context Memory
|
|
@@ -209,6 +240,8 @@ Primary UI resources:
|
|
|
209
240
|
- `ui://footprint/session-dashboard.html`
|
|
210
241
|
- `ui://footprint/session-detail.html`
|
|
211
242
|
|
|
243
|
+
The session dashboard now combines recent sessions, confirmed canonical contexts, a handoff-oriented scope summary, pinned `search-history` matches, and recurring execution-backed issue trends. It supports interactive query, issue key, host, status, and trend-grouping filters; search, handoff, trend, and context cards can drill directly into session detail or tighten the current dashboard investigation scope. The dashboard now also paginates recent sessions, search matches, and recurring trends with server-backed `limit` / `offset` calls instead of truncating large histories in the client. Those query and search surfaces are now backed by cached SQLite history indexes, so large histories do not require a full JavaScript detail scan just to filter, count, or aggregate matching sessions. The dashboard can also export the current filtered session set directly as a ZIP bundle. The session detail surface now renders recurring trend context for the current session, including the latest related sessions for each recurring issue so investigators can jump across retries without going back to the dashboard, and `footprint session show --json` / `get-session` include the same server-backed trend summary. Trend and handoff surfaces now carry blocker state plus remediation tracking, so repeated failures can be distinguished from recovered or regressed clusters instead of only reporting the latest outcome string. `get-session` now returns paginated transcript, recurring-trend, and timeline slices with page metadata, while `get-session-messages`, `get-session-trends`, `get-session-timeline`, `get-session-artifacts`, `get-session-narrative`, `get-session-decisions`, and the matching CLI commands support `--limit` / `--offset` for large-session inspection. `footprint session show` / `footprint get-session` also expose trend, artifact, narrative, and decision preview pagination through `--trend-*`, `--artifact-*`, `--narrative-*`, and `--decision-*` flags so the condensed CLI view does not need to materialize full derived histories just to render a handoff preview. Deterministic artifact metadata now also carries dependency actions, dependency names, failure signatures, lint rule IDs, test suite/case identifiers, and manifest or lockfile scope so CLI, MCP, UI, and export flows can expose richer execution context without reparsing raw transcript text. Semantic project summaries and handoff narratives now consume that metadata directly, so recurring clusters and dependency changes are described with concrete lint rules, failing test cases, dependency install targets, and manifest/lockfile updates instead of only generic command labels. The human-readable `footprint session show` output is now a condensed handoff/debug report with recurring trend, artifact, decision, and transcript/timeline previews instead of a raw full-session dump. From that detail surface, investigators can now load cross-session issue or family handoff summaries, review the currently linked canonical context, confirm or reject suggested context candidates, move a session into another context, set the preferred workspace context, load more trend/artifact/transcript/timeline/narrative/decision slices on demand, and export either the current session or the selected scope directly as a ZIP archive. The new context-memory layer uses that same session history to suggest likely canonical contexts, but it never auto-links canonical membership without an explicit confirm action. `resolve-context` returns candidates, confidence, reasons, and `confirmationRequired` so an agent host or interactive CLI can ask the user when evidence is ambiguous. `footprint context prepare --interactive` and `footprint run ... --prepare-context` are the shell-side bridge for that contract: they prompt before the session continues, confirm the chosen context, and then record `context.resolved` / `context.updated` timeline events without requiring the MCP server itself to block on user input. Once confirmed, `get-context` returns the latest valid direction for that context plus blockers, open questions, active decisions, superseded decisions, and the recent session trail. `get-history-handoff` / `footprint history handoff` summarize blockers, recoveries, follow-ups, and recent sessions for the current scope while following the same `issue` vs `family` grouping mode as `get-history-trends`; both surfaces now aggregate from materialized trend-attempt rows instead of rebuilding each session’s derived tree on demand. `get-history-trends` and `footprint history trends` now support `groupBy=family` / `--group-by family` when exact issue keys are too fine-grained. Export bundles now include machine-readable JSON snapshots, top-level recurring trend and history-handoff summaries, human-readable `history-handoff.md`, per-session `handoff.md` / `transcript.md` files, the selected `historyGrouping`, and manifest selection metadata when the export was created from filters.
|
|
244
|
+
|
|
212
245
|
### Encrypted Evidence
|
|
213
246
|
|
|
214
247
|
Use the evidence flow when you need a discrete preserved record of a conversation.
|
|
@@ -231,6 +264,27 @@ Primary UI resources:
|
|
|
231
264
|
- `ui://footprint/detail.html`
|
|
232
265
|
- `ui://footprint/export.html`
|
|
233
266
|
|
|
267
|
+
## Manual MCP Configuration
|
|
268
|
+
|
|
269
|
+
Claude Desktop example:
|
|
270
|
+
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"mcpServers": {
|
|
274
|
+
"footprint": {
|
|
275
|
+
"command": "npx",
|
|
276
|
+
"args": ["@pcircle/footprint"],
|
|
277
|
+
"env": {
|
|
278
|
+
"FOOTPRINT_DATA_DIR": "/path/to/footprint-data",
|
|
279
|
+
"FOOTPRINT_PASSPHRASE": "your-secure-passphrase"
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
For Claude Code, use the same server definition in `~/.claude/mcp_settings.json`.
|
|
287
|
+
|
|
234
288
|
## Storage Model
|
|
235
289
|
|
|
236
290
|
Footprint uses one local SQLite database with three logical models:
|
|
@@ -241,15 +295,6 @@ Footprint uses one local SQLite database with three logical models:
|
|
|
241
295
|
|
|
242
296
|
Evidence content is encrypted at rest. Session history is preserved as raw transcript plus raw timeline, derived views can be regenerated through `reingest-session`, and session exports package both raw and derived views into a portable ZIP archive. Context threading is suggestion-first and correction-driven: unresolved sessions stay isolated until the user confirms a canonical link. Cross-session filtering is backed by cached session-history text and exact issue-key rows inside SQLite so search and list surfaces stay incremental as histories grow.
|
|
243
297
|
|
|
244
|
-
## Security
|
|
245
|
-
|
|
246
|
-
- **Encryption**: XChaCha20-Poly1305 (256-bit)
|
|
247
|
-
- **Key Derivation**: Argon2id (OWASP recommended)
|
|
248
|
-
- **Storage**: Local SQLite with encrypted BLOBs
|
|
249
|
-
- **No cloud, no tracking, no data collection**
|
|
250
|
-
|
|
251
|
-
> **Store your password securely** — loss means permanent data loss.
|
|
252
|
-
|
|
253
298
|
## Architecture
|
|
254
299
|
|
|
255
300
|
Key runtime components:
|
|
@@ -261,11 +306,14 @@ Key runtime components:
|
|
|
261
306
|
- SQLite schema and persistence in `src/lib/storage/`
|
|
262
307
|
- MCP app resource registration in `src/ui/register.ts`
|
|
263
308
|
|
|
264
|
-
|
|
309
|
+
Further reading:
|
|
310
|
+
|
|
311
|
+
- [Architecture](./ARCHITECTURE.md)
|
|
312
|
+
- [Docs Index](../../docs/README.md)
|
|
265
313
|
|
|
266
314
|
## Prompts
|
|
267
315
|
|
|
268
|
-
Footprint registers three prompts for MCP clients:
|
|
316
|
+
Footprint also registers three prompts for MCP clients:
|
|
269
317
|
|
|
270
318
|
- `footprint-skill`
|
|
271
319
|
- `footprint-quick-ref`
|
|
@@ -273,17 +321,39 @@ Footprint registers three prompts for MCP clients:
|
|
|
273
321
|
|
|
274
322
|
## Development
|
|
275
323
|
|
|
324
|
+
Build and test:
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
pnpm --dir packages/mcp-server build
|
|
328
|
+
pnpm --dir packages/mcp-server demo:live
|
|
329
|
+
pnpm --dir packages/mcp-server test:pack-smoke
|
|
330
|
+
pnpm --dir packages/mcp-server test:publish-gate
|
|
331
|
+
pnpm --dir packages/mcp-server test:real-host-smoke
|
|
332
|
+
# macOS only, requires python3 on PATH
|
|
333
|
+
pnpm --dir packages/mcp-server test:macos-smoke
|
|
334
|
+
pnpm --dir packages/mcp-server test:run
|
|
335
|
+
pnpm --dir packages/mcp-server test:linux-smoke
|
|
336
|
+
pnpm --dir packages/mcp-server test:browser
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
UI-only build:
|
|
340
|
+
|
|
276
341
|
```bash
|
|
277
|
-
|
|
278
|
-
cd footprint-mcp
|
|
279
|
-
pnpm install
|
|
280
|
-
pnpm build
|
|
281
|
-
pnpm test:run
|
|
342
|
+
pnpm --dir packages/mcp-server build:ui
|
|
282
343
|
```
|
|
283
344
|
|
|
284
|
-
Repository CI runs Ubuntu and macOS jobs: Ubuntu covers install, lint, tarball install smoke, the default Vitest suite, the Linux PTY smoke path, browser-mode session UI tests, and the package publish gate; macOS covers recorder-focused PTY tests plus a real BSD `script -r` smoke path.
|
|
345
|
+
Repository CI now runs Ubuntu and macOS jobs: Ubuntu covers install, lint, tarball install smoke, the default Vitest suite, the Linux PTY smoke path, browser-mode session UI tests, and the package publish gate; macOS covers recorder-focused PTY tests plus a real BSD `script -r` smoke path.
|
|
346
|
+
|
|
347
|
+
`pnpm --dir packages/mcp-server test:publish-gate` is the package-level release check. It runs audit, build, the package Vitest suite, and the tarball install smoke so `prepublishOnly` blocks releases that are not installable from the packed artifact.
|
|
348
|
+
|
|
349
|
+
Releases now have two supported paths:
|
|
285
350
|
|
|
286
|
-
|
|
351
|
+
- local maintainer publish with `npm login` then `pnpm release:npm`
|
|
352
|
+
- GitHub Actions publish through `.github/workflows/npm-publish.yml`
|
|
353
|
+
|
|
354
|
+
Schema upgrades are exercised through legacy `v3` / `v4` / `v6` database fixtures, and older databases now backfill materialized history caches and trend-attempt rows during upgrade instead of waiting for the first query to discover missing rows.
|
|
355
|
+
|
|
356
|
+
`pnpm --dir packages/mcp-server test:real-host-smoke` is an optional manual validation pass. It discovers installed `claude`, `gemini`, and `codex` binaries, skips hosts that are missing, and for hosts that are present it records a real `--version` session and verifies the stored transcript and recorder metadata.
|
|
287
357
|
|
|
288
358
|
Set `FOOTPRINT_DEBUG_PERF=1` when you want lightweight timing traces for reingest, history query, and export paths while debugging large session sets.
|
|
289
359
|
|
|
@@ -292,8 +362,5 @@ Set `FOOTPRINT_DEBUG_PERF=1` when you want lightweight timing traces for reinges
|
|
|
292
362
|
- Repository: <https://github.com/PCIRCLE-AI/footprint-mcp>
|
|
293
363
|
- Package: <https://www.npmjs.com/package/@pcircle/footprint>
|
|
294
364
|
- Project site: <https://footprint.memesh.ai/>
|
|
365
|
+
- Homepage: <https://footprint.memesh.ai>
|
|
295
366
|
- Issues: <https://github.com/PCIRCLE-AI/footprint-mcp/issues>
|
|
296
|
-
|
|
297
|
-
## License
|
|
298
|
-
|
|
299
|
-
MIT License — see [LICENSE](./LICENSE) for details.
|