@pcircle/footprint 1.3.0 → 1.6.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 +215 -137
- package/SKILL.md +77 -33
- package/bin/footprint.js +16 -0
- package/dist/src/adapters/claude.d.ts +2 -0
- package/dist/src/adapters/claude.d.ts.map +1 -0
- package/dist/src/adapters/claude.js +7 -0
- package/dist/src/adapters/claude.js.map +1 -0
- package/dist/src/adapters/codex.d.ts +2 -0
- package/dist/src/adapters/codex.d.ts.map +1 -0
- package/dist/src/adapters/codex.js +7 -0
- package/dist/src/adapters/codex.js.map +1 -0
- package/dist/src/adapters/gemini.d.ts +2 -0
- package/dist/src/adapters/gemini.d.ts.map +1 -0
- package/dist/src/adapters/gemini.js +7 -0
- package/dist/src/adapters/gemini.js.map +1 -0
- package/dist/src/adapters/index.d.ts +5 -0
- package/dist/src/adapters/index.d.ts.map +1 -0
- package/dist/src/adapters/index.js +12 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/adapters/structured-prefix.d.ts +10 -0
- package/dist/src/adapters/structured-prefix.d.ts.map +1 -0
- package/dist/src/adapters/structured-prefix.js +59 -0
- package/dist/src/adapters/structured-prefix.js.map +1 -0
- package/dist/src/adapters/types.d.ts +32 -0
- package/dist/src/adapters/types.d.ts.map +1 -0
- package/dist/src/adapters/types.js +2 -0
- package/dist/src/adapters/types.js.map +1 -0
- package/dist/src/analyzers/content-analyzer.d.ts.map +1 -1
- package/dist/src/analyzers/content-analyzer.js +20 -4
- package/dist/src/analyzers/content-analyzer.js.map +1 -1
- package/dist/src/cli/context-flow.d.ts +92 -0
- package/dist/src/cli/context-flow.d.ts.map +1 -0
- package/dist/src/cli/context-flow.js +724 -0
- package/dist/src/cli/context-flow.js.map +1 -0
- package/dist/src/cli/history-display.d.ts +27 -0
- package/dist/src/cli/history-display.d.ts.map +1 -0
- package/dist/src/cli/history-display.js +167 -0
- package/dist/src/cli/history-display.js.map +1 -0
- package/dist/src/cli/index.js +924 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/launch-spec.d.ts +31 -0
- package/dist/src/cli/launch-spec.d.ts.map +1 -0
- package/dist/src/cli/launch-spec.js +182 -0
- package/dist/src/cli/launch-spec.js.map +1 -0
- package/dist/src/cli/live-demo.d.ts +34 -0
- package/dist/src/cli/live-demo.d.ts.map +1 -0
- package/dist/src/cli/live-demo.js +254 -0
- package/dist/src/cli/live-demo.js.map +1 -0
- package/dist/src/cli/pty-transcript.d.ts +34 -0
- package/dist/src/cli/pty-transcript.d.ts.map +1 -0
- package/dist/src/cli/pty-transcript.js +174 -0
- package/dist/src/cli/pty-transcript.js.map +1 -0
- package/dist/src/cli/session-display.d.ts +74 -0
- package/dist/src/cli/session-display.d.ts.map +1 -0
- package/dist/src/cli/session-display.js +922 -0
- package/dist/src/cli/session-display.js.map +1 -0
- package/dist/src/cli/session-execution.d.ts +55 -0
- package/dist/src/cli/session-execution.d.ts.map +1 -0
- package/dist/src/cli/session-execution.js +817 -0
- package/dist/src/cli/session-execution.js.map +1 -0
- package/dist/src/cli/session-runtime.d.ts +5 -0
- package/dist/src/cli/session-runtime.d.ts.map +1 -0
- package/dist/src/cli/session-runtime.js +11 -0
- package/dist/src/cli/session-runtime.js.map +1 -0
- package/dist/src/cli/setup.d.ts.map +1 -1
- package/dist/src/cli/setup.js +36 -12
- package/dist/src/cli/setup.js.map +1 -1
- package/dist/src/cli/utils/env.d.ts +7 -2
- package/dist/src/cli/utils/env.d.ts.map +1 -1
- package/dist/src/cli/utils/env.js +37 -6
- package/dist/src/cli/utils/env.js.map +1 -1
- package/dist/src/index.d.ts +4 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +187 -33
- package/dist/src/index.js.map +1 -1
- package/dist/src/ingestion/deterministic.d.ts +3 -0
- package/dist/src/ingestion/deterministic.d.ts.map +1 -0
- package/dist/src/ingestion/deterministic.js +862 -0
- package/dist/src/ingestion/deterministic.js.map +1 -0
- package/dist/src/ingestion/index.d.ts +5 -0
- package/dist/src/ingestion/index.d.ts.map +1 -0
- package/dist/src/ingestion/index.js +27 -0
- package/dist/src/ingestion/index.js.map +1 -0
- package/dist/src/ingestion/semantic.d.ts +6 -0
- package/dist/src/ingestion/semantic.d.ts.map +1 -0
- package/dist/src/ingestion/semantic.js +627 -0
- package/dist/src/ingestion/semantic.js.map +1 -0
- package/dist/src/ingestion/types.d.ts +10 -0
- package/dist/src/ingestion/types.d.ts.map +1 -0
- package/dist/src/ingestion/types.js +2 -0
- package/dist/src/ingestion/types.js.map +1 -0
- package/dist/src/lib/context-memory.d.ts +140 -0
- package/dist/src/lib/context-memory.d.ts.map +1 -0
- package/dist/src/lib/context-memory.js +974 -0
- package/dist/src/lib/context-memory.js.map +1 -0
- package/dist/src/lib/crypto/decrypt.d.ts.map +1 -1
- package/dist/src/lib/crypto/decrypt.js +12 -8
- package/dist/src/lib/crypto/decrypt.js.map +1 -1
- package/dist/src/lib/crypto/encrypt.d.ts.map +1 -1
- package/dist/src/lib/crypto/encrypt.js +6 -3
- package/dist/src/lib/crypto/encrypt.js.map +1 -1
- package/dist/src/lib/crypto/key-derivation.d.ts +1 -1
- package/dist/src/lib/crypto/key-derivation.d.ts.map +1 -1
- package/dist/src/lib/crypto/key-derivation.js +11 -11
- package/dist/src/lib/crypto/key-derivation.js.map +1 -1
- package/dist/src/lib/history-handoff.d.ts +43 -0
- package/dist/src/lib/history-handoff.d.ts.map +1 -0
- package/dist/src/lib/history-handoff.js +179 -0
- package/dist/src/lib/history-handoff.js.map +1 -0
- package/dist/src/lib/observability.d.ts +3 -0
- package/dist/src/lib/observability.d.ts.map +1 -0
- package/dist/src/lib/observability.js +63 -0
- package/dist/src/lib/observability.js.map +1 -0
- package/dist/src/lib/session-artifacts.d.ts +51 -0
- package/dist/src/lib/session-artifacts.d.ts.map +1 -0
- package/dist/src/lib/session-artifacts.js +132 -0
- package/dist/src/lib/session-artifacts.js.map +1 -0
- package/dist/src/lib/session-filters.d.ts +11 -0
- package/dist/src/lib/session-filters.d.ts.map +1 -0
- package/dist/src/lib/session-filters.js +16 -0
- package/dist/src/lib/session-filters.js.map +1 -0
- package/dist/src/lib/session-history.d.ts +50 -0
- package/dist/src/lib/session-history.d.ts.map +1 -0
- package/dist/src/lib/session-history.js +73 -0
- package/dist/src/lib/session-history.js.map +1 -0
- package/dist/src/lib/session-trends.d.ts +129 -0
- package/dist/src/lib/session-trends.d.ts.map +1 -0
- package/dist/src/lib/session-trends.js +361 -0
- package/dist/src/lib/session-trends.js.map +1 -0
- package/dist/src/lib/storage/database.d.ts +257 -3
- package/dist/src/lib/storage/database.d.ts.map +1 -1
- package/dist/src/lib/storage/database.js +1836 -161
- package/dist/src/lib/storage/database.js.map +1 -1
- package/dist/src/lib/storage/export-sessions.d.ts +33 -0
- package/dist/src/lib/storage/export-sessions.d.ts.map +1 -0
- package/dist/src/lib/storage/export-sessions.js +525 -0
- package/dist/src/lib/storage/export-sessions.js.map +1 -0
- package/dist/src/lib/storage/export.d.ts +1 -2
- package/dist/src/lib/storage/export.d.ts.map +1 -1
- package/dist/src/lib/storage/export.js +46 -33
- package/dist/src/lib/storage/export.js.map +1 -1
- package/dist/src/lib/storage/index.d.ts +7 -6
- package/dist/src/lib/storage/index.d.ts.map +1 -1
- package/dist/src/lib/storage/index.js +6 -5
- package/dist/src/lib/storage/index.js.map +1 -1
- package/dist/src/lib/storage/salt-storage.d.ts +1 -1
- package/dist/src/lib/storage/salt-storage.d.ts.map +1 -1
- package/dist/src/lib/storage/salt-storage.js +26 -18
- package/dist/src/lib/storage/salt-storage.js.map +1 -1
- package/dist/src/lib/storage/schema.d.ts +7 -2
- package/dist/src/lib/storage/schema.d.ts.map +1 -1
- package/dist/src/lib/storage/schema.js +357 -40
- package/dist/src/lib/storage/schema.js.map +1 -1
- package/dist/src/lib/storage/types.d.ts +122 -0
- package/dist/src/lib/storage/types.d.ts.map +1 -1
- package/dist/src/lib/tool-wrapper.d.ts.map +1 -1
- package/dist/src/lib/tool-wrapper.js +2 -2
- package/dist/src/lib/tool-wrapper.js.map +1 -1
- package/dist/src/prompts/skill-prompt.d.ts +6 -0
- package/dist/src/prompts/skill-prompt.d.ts.map +1 -0
- package/dist/src/prompts/skill-prompt.js +138 -0
- package/dist/src/prompts/skill-prompt.js.map +1 -0
- package/dist/src/tools/capture-footprint.d.ts +2 -2
- package/dist/src/tools/capture-footprint.d.ts.map +1 -1
- package/dist/src/tools/capture-footprint.js +52 -11
- package/dist/src/tools/capture-footprint.js.map +1 -1
- package/dist/src/tools/confirm-context-link.d.ts +62 -0
- package/dist/src/tools/confirm-context-link.d.ts.map +1 -0
- package/dist/src/tools/confirm-context-link.js +36 -0
- package/dist/src/tools/confirm-context-link.js.map +1 -0
- package/dist/src/tools/context-schemas.d.ts +694 -0
- package/dist/src/tools/context-schemas.d.ts.map +1 -0
- package/dist/src/tools/context-schemas.js +171 -0
- package/dist/src/tools/context-schemas.js.map +1 -0
- package/dist/src/tools/delete-footprints.d.ts +18 -1
- package/dist/src/tools/delete-footprints.d.ts.map +1 -1
- package/dist/src/tools/delete-footprints.js +53 -5
- package/dist/src/tools/delete-footprints.js.map +1 -1
- package/dist/src/tools/export-footprints.d.ts +11 -3
- package/dist/src/tools/export-footprints.d.ts.map +1 -1
- package/dist/src/tools/export-footprints.js +48 -9
- package/dist/src/tools/export-footprints.js.map +1 -1
- package/dist/src/tools/export-sessions.d.ts +111 -0
- package/dist/src/tools/export-sessions.d.ts.map +1 -0
- package/dist/src/tools/export-sessions.js +136 -0
- package/dist/src/tools/export-sessions.js.map +1 -0
- package/dist/src/tools/get-context.d.ts +208 -0
- package/dist/src/tools/get-context.d.ts.map +1 -0
- package/dist/src/tools/get-context.js +27 -0
- package/dist/src/tools/get-context.js.map +1 -0
- package/dist/src/tools/get-footprint.d.ts +1 -7
- package/dist/src/tools/get-footprint.d.ts.map +1 -1
- package/dist/src/tools/get-footprint.js +7 -3
- package/dist/src/tools/get-footprint.js.map +1 -1
- package/dist/src/tools/get-history-handoff.d.ts +109 -0
- package/dist/src/tools/get-history-handoff.d.ts.map +1 -0
- package/dist/src/tools/get-history-handoff.js +85 -0
- package/dist/src/tools/get-history-handoff.js.map +1 -0
- package/dist/src/tools/get-history-trends.d.ts +155 -0
- package/dist/src/tools/get-history-trends.d.ts.map +1 -0
- package/dist/src/tools/get-history-trends.js +123 -0
- package/dist/src/tools/get-history-trends.js.map +1 -0
- package/dist/src/tools/get-session-artifacts.d.ts +151 -0
- package/dist/src/tools/get-session-artifacts.d.ts.map +1 -0
- package/dist/src/tools/get-session-artifacts.js +184 -0
- package/dist/src/tools/get-session-artifacts.js.map +1 -0
- package/dist/src/tools/get-session-decisions.d.ts +69 -0
- package/dist/src/tools/get-session-decisions.d.ts.map +1 -0
- package/dist/src/tools/get-session-decisions.js +99 -0
- package/dist/src/tools/get-session-decisions.js.map +1 -0
- package/dist/src/tools/get-session-messages.d.ts +55 -0
- package/dist/src/tools/get-session-messages.d.ts.map +1 -0
- package/dist/src/tools/get-session-messages.js +89 -0
- package/dist/src/tools/get-session-messages.js.map +1 -0
- package/dist/src/tools/get-session-narrative.d.ts +72 -0
- package/dist/src/tools/get-session-narrative.d.ts.map +1 -0
- package/dist/src/tools/get-session-narrative.js +106 -0
- package/dist/src/tools/get-session-narrative.js.map +1 -0
- package/dist/src/tools/get-session-timeline.d.ts +55 -0
- package/dist/src/tools/get-session-timeline.d.ts.map +1 -0
- package/dist/src/tools/get-session-timeline.js +93 -0
- package/dist/src/tools/get-session-timeline.js.map +1 -0
- package/dist/src/tools/get-session-trends.d.ts +108 -0
- package/dist/src/tools/get-session-trends.d.ts.map +1 -0
- package/dist/src/tools/get-session-trends.js +130 -0
- package/dist/src/tools/get-session-trends.js.map +1 -0
- package/dist/src/tools/get-session.d.ts +251 -0
- package/dist/src/tools/get-session.d.ts.map +1 -0
- package/dist/src/tools/get-session.js +290 -0
- package/dist/src/tools/get-session.js.map +1 -0
- package/dist/src/tools/index.d.ts +23 -3
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +23 -3
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/list-contexts.d.ts +50 -0
- package/dist/src/tools/list-contexts.d.ts.map +1 -0
- package/dist/src/tools/list-contexts.js +28 -0
- package/dist/src/tools/list-contexts.js.map +1 -0
- package/dist/src/tools/list-footprints.d.ts +1 -15
- package/dist/src/tools/list-footprints.d.ts.map +1 -1
- package/dist/src/tools/list-footprints.js +17 -6
- package/dist/src/tools/list-footprints.js.map +1 -1
- package/dist/src/tools/list-sessions.d.ts +86 -0
- package/dist/src/tools/list-sessions.d.ts.map +1 -0
- package/dist/src/tools/list-sessions.js +97 -0
- package/dist/src/tools/list-sessions.js.map +1 -0
- package/dist/src/tools/manage-tags.d.ts +47 -0
- package/dist/src/tools/manage-tags.d.ts.map +1 -0
- package/dist/src/tools/manage-tags.js +109 -0
- package/dist/src/tools/manage-tags.js.map +1 -0
- package/dist/src/tools/merge-contexts.d.ts +58 -0
- package/dist/src/tools/merge-contexts.d.ts.map +1 -0
- package/dist/src/tools/merge-contexts.js +27 -0
- package/dist/src/tools/merge-contexts.js.map +1 -0
- package/dist/src/tools/move-session-context.d.ts +62 -0
- package/dist/src/tools/move-session-context.d.ts.map +1 -0
- package/dist/src/tools/move-session-context.js +33 -0
- package/dist/src/tools/move-session-context.js.map +1 -0
- package/dist/src/tools/reingest-session.d.ts +31 -0
- package/dist/src/tools/reingest-session.d.ts.map +1 -0
- package/dist/src/tools/reingest-session.js +43 -0
- package/dist/src/tools/reingest-session.js.map +1 -0
- package/dist/src/tools/reject-context-link.d.ts +58 -0
- package/dist/src/tools/reject-context-link.d.ts.map +1 -0
- package/dist/src/tools/reject-context-link.js +26 -0
- package/dist/src/tools/reject-context-link.js.map +1 -0
- package/dist/src/tools/resolve-context.d.ts +287 -0
- package/dist/src/tools/resolve-context.d.ts.map +1 -0
- package/dist/src/tools/resolve-context.js +35 -0
- package/dist/src/tools/resolve-context.js.map +1 -0
- package/dist/src/tools/search-footprints.d.ts +2 -16
- package/dist/src/tools/search-footprints.d.ts.map +1 -1
- package/dist/src/tools/search-footprints.js +23 -7
- package/dist/src/tools/search-footprints.js.map +1 -1
- package/dist/src/tools/search-history.d.ts +86 -0
- package/dist/src/tools/search-history.d.ts.map +1 -0
- package/dist/src/tools/search-history.js +103 -0
- package/dist/src/tools/search-history.js.map +1 -0
- package/dist/src/tools/session-ui-metadata.d.ts +15 -0
- package/dist/src/tools/session-ui-metadata.d.ts.map +1 -0
- package/dist/src/tools/session-ui-metadata.js +15 -0
- package/dist/src/tools/session-ui-metadata.js.map +1 -0
- package/dist/src/tools/set-active-context.d.ts +58 -0
- package/dist/src/tools/set-active-context.d.ts.map +1 -0
- package/dist/src/tools/set-active-context.js +26 -0
- package/dist/src/tools/set-active-context.js.map +1 -0
- package/dist/src/tools/split-context.d.ts +62 -0
- package/dist/src/tools/split-context.d.ts.map +1 -0
- package/dist/src/tools/split-context.js +36 -0
- package/dist/src/tools/split-context.js.map +1 -0
- package/dist/src/tools/suggest-capture.d.ts +1 -1
- package/dist/src/tools/suggest-capture.d.ts.map +1 -1
- package/dist/src/tools/suggest-capture.js +6 -2
- package/dist/src/tools/suggest-capture.js.map +1 -1
- package/dist/src/tools/verify-footprint.d.ts +7 -54
- package/dist/src/tools/verify-footprint.d.ts.map +1 -1
- package/dist/src/tools/verify-footprint.js +11 -8
- package/dist/src/tools/verify-footprint.js.map +1 -1
- package/dist/src/types.d.ts +6 -4
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/ui/register.d.ts +6 -1
- package/dist/src/ui/register.d.ts.map +1 -1
- package/dist/src/ui/register.js +60 -16
- package/dist/src/ui/register.js.map +1 -1
- package/dist/ui/dashboard.html +259 -875
- package/dist/ui/detail.html +124 -252
- package/dist/ui/export.html +133 -303
- package/dist/ui/session-dashboard-live.html +264 -0
- package/dist/ui/session-dashboard.html +329 -0
- package/dist/ui/session-detail-live.html +336 -0
- package/dist/ui/session-detail.html +355 -0
- package/package.json +61 -16
- package/dist/src/lib/errors/base-error.d.ts +0 -15
- package/dist/src/lib/errors/base-error.d.ts.map +0 -1
- package/dist/src/lib/errors/base-error.js +0 -34
- package/dist/src/lib/errors/base-error.js.map +0 -1
- package/dist/src/lib/errors/crypto-error.d.ts +0 -29
- package/dist/src/lib/errors/crypto-error.d.ts.map +0 -1
- package/dist/src/lib/errors/crypto-error.js +0 -43
- package/dist/src/lib/errors/crypto-error.js.map +0 -1
- package/dist/src/lib/errors/index.d.ts +0 -26
- package/dist/src/lib/errors/index.d.ts.map +0 -1
- package/dist/src/lib/errors/index.js +0 -26
- package/dist/src/lib/errors/index.js.map +0 -1
- package/dist/src/lib/errors/storage-error.d.ts +0 -25
- package/dist/src/lib/errors/storage-error.d.ts.map +0 -1
- package/dist/src/lib/errors/storage-error.js +0 -38
- package/dist/src/lib/errors/storage-error.js.map +0 -1
- package/dist/src/lib/errors/validation-error.d.ts +0 -21
- package/dist/src/lib/errors/validation-error.d.ts.map +0 -1
- package/dist/src/lib/errors/validation-error.js +0 -29
- package/dist/src/lib/errors/validation-error.js.map +0 -1
- package/dist/src/test-helpers.d.ts +0 -33
- package/dist/src/test-helpers.d.ts.map +0 -1
- package/dist/src/test-helpers.js +0 -108
- package/dist/src/test-helpers.js.map +0 -1
- package/dist/src/tools/get-tag-stats.d.ts +0 -30
- package/dist/src/tools/get-tag-stats.d.ts.map +0 -1
- package/dist/src/tools/get-tag-stats.js +0 -33
- package/dist/src/tools/get-tag-stats.js.map +0 -1
- package/dist/src/tools/remove-tag.d.ts +0 -22
- package/dist/src/tools/remove-tag.d.ts.map +0 -1
- package/dist/src/tools/remove-tag.js +0 -30
- package/dist/src/tools/remove-tag.js.map +0 -1
- package/dist/src/tools/rename-tag.d.ts +0 -24
- package/dist/src/tools/rename-tag.d.ts.map +0 -1
- package/dist/src/tools/rename-tag.js +0 -34
- package/dist/src/tools/rename-tag.js.map +0 -1
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,219 +3,297 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@pcircle/footprint)
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
Project site: [footprint.memesh.ai](https://footprint.memesh.ai/)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
`@pcircle/footprint` is a local-first MCP server for AI-assisted work continuity. It gives you one place to:
|
|
9
9
|
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
- keep a usable history of ongoing AI-assisted work, including context memory and handoff-friendly summaries
|
|
11
|
+
- preserve specific conversations as encrypted evidence when they need verification and export
|
|
12
|
+
|
|
13
|
+
It is open source. No seats, no usage pricing, and no hosted-memory lock-in.
|
|
14
|
+
|
|
15
|
+
The session recorder preserves raw transcript and timeline data first, then derives artifacts, narratives, decisions, and user-correctable context threads from that source history.
|
|
16
|
+
|
|
17
|
+
Interactive sessions use `script`-backed PTY transport on BSD/macOS and Linux. BSD/macOS replays native `script -r` transcripts, while Linux replays util-linux advanced timing logs so transcript attribution stays consistent across platforms.
|
|
18
|
+
|
|
19
|
+
## Start Here
|
|
20
|
+
|
|
21
|
+
If you are new to Footprint, use this order:
|
|
22
|
+
|
|
23
|
+
1. [Open the project site](https://footprint.memesh.ai/) and look at the product screenshots first.
|
|
24
|
+
2. Run `npx @pcircle/footprint setup` to try it quickly, or install the CLI with `npm install -g @pcircle/footprint`.
|
|
25
|
+
3. If you are still using the quick `npx` path, open the local product with `npx @pcircle/footprint demo --open`. If you installed the CLI, use `footprint demo --open`.
|
|
26
|
+
4. Start recording real work with `footprint run ...`.
|
|
14
27
|
|
|
15
28
|
## Quick Start
|
|
16
29
|
|
|
17
|
-
|
|
30
|
+
If you only want to see the product locally first:
|
|
18
31
|
|
|
19
32
|
```bash
|
|
20
33
|
npx @pcircle/footprint setup
|
|
34
|
+
npx @pcircle/footprint demo --open
|
|
21
35
|
```
|
|
22
36
|
|
|
23
|
-
|
|
37
|
+
If you want the CLI installed for repeated use:
|
|
24
38
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
- ✅ Create backup of existing config
|
|
39
|
+
```bash
|
|
40
|
+
npm install -g @pcircle/footprint
|
|
41
|
+
footprint setup
|
|
42
|
+
```
|
|
30
43
|
|
|
31
|
-
|
|
44
|
+
If you want to start recording live CLI work immediately:
|
|
32
45
|
|
|
33
|
-
|
|
46
|
+
```bash
|
|
47
|
+
footprint run claude -- <args...>
|
|
48
|
+
footprint run gemini -- <args...>
|
|
49
|
+
footprint run codex -- <args...>
|
|
50
|
+
```
|
|
34
51
|
|
|
35
|
-
|
|
52
|
+
If you want Footprint to suggest the right context before a run begins:
|
|
36
53
|
|
|
37
|
-
|
|
54
|
+
```bash
|
|
55
|
+
footprint run codex --prepare-context -- <args...>
|
|
56
|
+
```
|
|
38
57
|
|
|
39
|
-
|
|
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
|
|
58
|
+
### Install And Configure
|
|
47
59
|
|
|
48
|
-
|
|
60
|
+
```bash
|
|
61
|
+
npx @pcircle/footprint setup
|
|
62
|
+
```
|
|
49
63
|
|
|
50
|
-
|
|
64
|
+
Persistent install:
|
|
51
65
|
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
66
|
+
```bash
|
|
67
|
+
npm install -g @pcircle/footprint
|
|
68
|
+
footprint setup
|
|
75
69
|
```
|
|
76
70
|
|
|
77
|
-
|
|
71
|
+
The setup wizard:
|
|
78
72
|
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
- **Maintainable**: Clear separation of concerns across layers
|
|
73
|
+
- creates the local data directory
|
|
74
|
+
- validates the passphrase
|
|
75
|
+
- configures Claude Desktop when available
|
|
76
|
+
- optionally appends environment variables to the active shell rc file
|
|
84
77
|
|
|
85
|
-
|
|
78
|
+
Node.js `>=22` is required.
|
|
86
79
|
|
|
87
|
-
|
|
80
|
+
If you stay on the quick `npx` path, use `npx @pcircle/footprint ...` for later commands too. The bare `footprint` command is only available after a global install.
|
|
88
81
|
|
|
89
|
-
|
|
82
|
+
### Open The Local Live Product
|
|
90
83
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
84
|
+
```bash
|
|
85
|
+
npx @pcircle/footprint demo
|
|
86
|
+
```
|
|
94
87
|
|
|
95
|
-
|
|
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
|
|
88
|
+
If you installed the CLI globally, use `footprint demo` or `footprint demo --open`.
|
|
100
89
|
|
|
101
|
-
|
|
90
|
+
This starts a local browser-facing surface for the current Footprint database and prints a localhost URL for:
|
|
102
91
|
|
|
103
|
-
|
|
92
|
+
- the session dashboard
|
|
93
|
+
- deep-linked session detail pages
|
|
94
|
+
- context review and correction flows
|
|
95
|
+
- export and handoff interactions
|
|
104
96
|
|
|
105
|
-
|
|
97
|
+
Optional flags:
|
|
106
98
|
|
|
107
|
-
|
|
108
|
-
|
|
99
|
+
```bash
|
|
100
|
+
footprint demo --host 127.0.0.1 --port 4310
|
|
101
|
+
footprint demo --open
|
|
102
|
+
```
|
|
109
103
|
|
|
110
|
-
|
|
104
|
+
Recorder inspection commands:
|
|
111
105
|
|
|
112
|
-
|
|
106
|
+
```bash
|
|
107
|
+
footprint sessions list [--query "<text>"] [--issue-key "<issue-key>"] [--host <claude|gemini|codex>] [--status <running|completed|failed|interrupted>]
|
|
108
|
+
footprint session show <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>]
|
|
109
|
+
footprint session ingest <session-id>
|
|
110
|
+
footprint session export <session-id> [--group-by <issue|family>]
|
|
111
|
+
footprint session messages <session-id> [--limit <n>] [--offset <n>]
|
|
112
|
+
footprint session trends <session-id> [--limit <n>] [--offset <n>]
|
|
113
|
+
footprint session timeline <session-id> [--limit <n>] [--offset <n>]
|
|
114
|
+
footprint session artifacts <session-id> [--limit <n>] [--offset <n>]
|
|
115
|
+
footprint session narratives <session-id> [--kind <journal|project-summary|handoff>] [--limit <n>] [--offset <n>]
|
|
116
|
+
footprint session decisions <session-id> [--limit <n>] [--offset <n>]
|
|
117
|
+
footprint history search "<query>" [--host <claude|gemini|codex>] [--status <running|completed|failed|interrupted>]
|
|
118
|
+
footprint history trends [--query "<text>"] [--issue-key "<issue-key>"] [--host <claude|gemini|codex>] [--status <running|completed|failed|interrupted>] [--group-by <issue|family>]
|
|
119
|
+
footprint history handoff [--query "<text>"] [--issue-key "<issue-key>"] [--host <claude|gemini|codex>] [--status <running|completed|failed|interrupted>] [--group-by <issue|family>]
|
|
120
|
+
```
|
|
113
121
|
|
|
114
|
-
|
|
122
|
+
Context memory commands:
|
|
115
123
|
|
|
116
|
-
|
|
124
|
+
```bash
|
|
125
|
+
footprint contexts list
|
|
126
|
+
footprint context resolve [--session <session-id>] [--cwd <path>] [--title "<text>"] [--host <claude|gemini|codex>]
|
|
127
|
+
footprint context prepare [--session <session-id>] [--cwd <path>] [--title "<text>"] [--host <claude|gemini|codex>] [--interactive] [--json]
|
|
128
|
+
footprint context show <context-id>
|
|
129
|
+
footprint context confirm <session-id> [<session-id> ...] [--context <context-id>] [--label "<label>"] [--set-preferred]
|
|
130
|
+
footprint context reject <session-id> --context <context-id>
|
|
131
|
+
footprint context move <session-id> [--context <context-id>] [--label "<label>"] [--set-preferred]
|
|
132
|
+
footprint context merge <source-context-id> <target-context-id>
|
|
133
|
+
footprint context split <context-id> --sessions <session-id,session-id,...> [--label "<label>"] [--set-preferred]
|
|
134
|
+
footprint context activate <context-id> [--cwd <path>]
|
|
135
|
+
footprint demo [--host <address>] [--port <number>] [--open]
|
|
136
|
+
```
|
|
117
137
|
|
|
118
|
-
|
|
138
|
+
Add `--json` to the query commands above when you want scriptable output.
|
|
119
139
|
|
|
120
|
-
|
|
140
|
+
### Run As An MCP Server
|
|
121
141
|
|
|
122
|
-
|
|
142
|
+
When invoked without a CLI subcommand, Footprint starts the MCP server on stdio.
|
|
123
143
|
|
|
124
|
-
|
|
125
|
-
- `includeGitInfo` (optional) - Include git metadata
|
|
144
|
+
### Manual MCP Configuration
|
|
126
145
|
|
|
127
|
-
|
|
146
|
+
Claude Desktop example:
|
|
128
147
|
|
|
129
|
-
|
|
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
|
+
```
|
|
130
162
|
|
|
131
|
-
|
|
163
|
+
For Claude Code, use the same server definition in `~/.claude/mcp_settings.json`.
|
|
132
164
|
|
|
133
|
-
|
|
165
|
+
## Product Surfaces
|
|
134
166
|
|
|
135
|
-
|
|
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
|
|
167
|
+
### Session History And Context Memory
|
|
141
168
|
|
|
142
|
-
|
|
169
|
+
Use the recorder when you care about staying in the right line of work, seeing what happened, and handing it off cleanly:
|
|
143
170
|
|
|
144
|
-
|
|
171
|
+
- ordered user and assistant transcript
|
|
172
|
+
- wrapper and adapter timeline events
|
|
173
|
+
- command and test activity with richer command intent classification
|
|
174
|
+
- file and git changes
|
|
175
|
+
- conservative context-thread suggestions for new or resumed sessions
|
|
176
|
+
- canonical context briefings with current truth, blockers, open questions, active decisions, and superseded decisions
|
|
177
|
+
- correction operations so users can confirm, reject, move, merge, split, and prefer contexts instead of accepting black-box auto-linking
|
|
178
|
+
- cross-session issue trends built from execution-backed retries and failures, with optional broader failure-family grouping
|
|
179
|
+
- derived narratives and decisions, including retry-aware handoff summaries and clustered issue rollups
|
|
180
|
+
- downloadable ZIP handoff bundles with raw and derived session state
|
|
145
181
|
|
|
146
|
-
|
|
182
|
+
Primary MCP tools:
|
|
147
183
|
|
|
148
|
-
- `
|
|
184
|
+
- `list-sessions`
|
|
185
|
+
- `list-contexts`
|
|
186
|
+
- `get-context`
|
|
187
|
+
- `resolve-context`
|
|
188
|
+
- `confirm-context-link`
|
|
189
|
+
- `reject-context-link`
|
|
190
|
+
- `move-session-context`
|
|
191
|
+
- `merge-contexts`
|
|
192
|
+
- `split-context`
|
|
193
|
+
- `set-active-context`
|
|
194
|
+
- `get-session`
|
|
195
|
+
- `export-sessions`
|
|
196
|
+
- `get-session-messages`
|
|
197
|
+
- `get-session-trends`
|
|
198
|
+
- `get-session-timeline`
|
|
199
|
+
- `get-session-artifacts`
|
|
200
|
+
- `get-session-narrative`
|
|
201
|
+
- `get-session-decisions`
|
|
202
|
+
- `search-history`
|
|
203
|
+
- `get-history-trends`
|
|
204
|
+
- `get-history-handoff`
|
|
205
|
+
- `reingest-session`
|
|
149
206
|
|
|
150
|
-
|
|
207
|
+
Primary UI resources:
|
|
151
208
|
|
|
152
|
-
- `
|
|
153
|
-
- `
|
|
154
|
-
- `suggestedTags` - Recommended tags
|
|
155
|
-
- `suggestedConversationId` - Recommended ID
|
|
156
|
-
- `confidence` - Confidence score (0-1)
|
|
209
|
+
- `ui://footprint/session-dashboard.html`
|
|
210
|
+
- `ui://footprint/session-detail.html`
|
|
157
211
|
|
|
158
|
-
###
|
|
212
|
+
### Encrypted Evidence
|
|
159
213
|
|
|
160
|
-
|
|
214
|
+
Use the evidence flow when you need a discrete preserved record of a conversation.
|
|
161
215
|
|
|
162
|
-
|
|
216
|
+
Primary MCP tools:
|
|
163
217
|
|
|
164
|
-
|
|
218
|
+
- `capture-footprint`
|
|
219
|
+
- `list-footprints`
|
|
220
|
+
- `get-footprint`
|
|
221
|
+
- `search-footprints`
|
|
222
|
+
- `export-footprints`
|
|
223
|
+
- `verify-footprint`
|
|
224
|
+
- `delete-footprints`
|
|
225
|
+
- `manage-tags`
|
|
226
|
+
- `suggest-capture`
|
|
165
227
|
|
|
166
|
-
|
|
228
|
+
Primary UI resources:
|
|
167
229
|
|
|
168
|
-
|
|
230
|
+
- `ui://footprint/dashboard.html`
|
|
231
|
+
- `ui://footprint/detail.html`
|
|
232
|
+
- `ui://footprint/export.html`
|
|
169
233
|
|
|
170
|
-
|
|
171
|
-
- `checks` - Detailed checks (content integrity, git timestamp, encryption)
|
|
172
|
-
- `legalReadiness` - Whether evidence meets legal standards
|
|
234
|
+
## Storage Model
|
|
173
235
|
|
|
174
|
-
|
|
236
|
+
Footprint uses one local SQLite database with three logical models:
|
|
175
237
|
|
|
176
|
-
|
|
238
|
+
- evidence tables for encrypted conversation capture
|
|
239
|
+
- session-history tables for recorder transcript, events, artifacts, narratives, and decisions
|
|
240
|
+
- context tables for canonical context threads, explicit corrections, and workspace preferences
|
|
177
241
|
|
|
178
|
-
|
|
242
|
+
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.
|
|
179
243
|
|
|
180
|
-
|
|
244
|
+
## Security
|
|
181
245
|
|
|
182
|
-
-
|
|
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**
|
|
183
250
|
|
|
184
|
-
|
|
251
|
+
> **Store your password securely** — loss means permanent data loss.
|
|
185
252
|
|
|
186
|
-
|
|
253
|
+
## Architecture
|
|
187
254
|
|
|
188
|
-
|
|
255
|
+
Key runtime components:
|
|
189
256
|
|
|
190
|
-
-
|
|
191
|
-
-
|
|
257
|
+
- MCP server registration in `src/index.ts`
|
|
258
|
+
- CLI setup and recorder runtime in `src/cli/`
|
|
259
|
+
- host adapters in `src/adapters/`
|
|
260
|
+
- deterministic and semantic ingestion in `src/ingestion/`
|
|
261
|
+
- SQLite schema and persistence in `src/lib/storage/`
|
|
262
|
+
- MCP app resource registration in `src/ui/register.ts`
|
|
192
263
|
|
|
193
|
-
|
|
264
|
+
See [ARCHITECTURE.md](./ARCHITECTURE.md) for further reading.
|
|
194
265
|
|
|
195
|
-
|
|
266
|
+
## Prompts
|
|
196
267
|
|
|
197
|
-
|
|
268
|
+
Footprint registers three prompts for MCP clients:
|
|
198
269
|
|
|
199
|
-
- `
|
|
270
|
+
- `footprint-skill`
|
|
271
|
+
- `footprint-quick-ref`
|
|
272
|
+
- `footprint-should-capture`
|
|
200
273
|
|
|
201
|
-
|
|
274
|
+
## Development
|
|
202
275
|
|
|
203
|
-
|
|
276
|
+
```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
|
|
282
|
+
```
|
|
204
283
|
|
|
205
|
-
|
|
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.
|
|
206
285
|
|
|
207
|
-
-
|
|
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.
|
|
208
287
|
|
|
209
|
-
|
|
288
|
+
Set `FOOTPRINT_DEBUG_PERF=1` when you want lightweight timing traces for reingest, history query, and export paths while debugging large session sets.
|
|
210
289
|
|
|
211
|
-
|
|
212
|
-
- **Key Derivation**: Argon2id (OWASP recommended)
|
|
213
|
-
- **Storage**: Local SQLite with encrypted BLOBs
|
|
290
|
+
## Links
|
|
214
291
|
|
|
215
|
-
|
|
292
|
+
- Repository: <https://github.com/PCIRCLE-AI/footprint-mcp>
|
|
293
|
+
- Package: <https://www.npmjs.com/package/@pcircle/footprint>
|
|
294
|
+
- Project site: <https://footprint.memesh.ai/>
|
|
295
|
+
- Issues: <https://github.com/PCIRCLE-AI/footprint-mcp/issues>
|
|
216
296
|
|
|
217
|
-
##
|
|
297
|
+
## License
|
|
218
298
|
|
|
219
|
-
|
|
220
|
-
- [Issues](https://github.com/PCIRCLE-AI/footprint/issues)
|
|
221
|
-
- [License](https://github.com/PCIRCLE-AI/footprint/blob/main/LICENSE)
|
|
299
|
+
MIT License — see [LICENSE](./LICENSE) for details.
|