@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 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
  [![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
- Project site: [footprint.memesh.ai](https://footprint.memesh.ai/)
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
- See [ARCHITECTURE.md](./ARCHITECTURE.md) for further reading.
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
- git clone https://github.com/PCIRCLE-AI/footprint-mcp.git
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
- `pnpm 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.
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.