@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.
Files changed (349) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +215 -137
  3. package/SKILL.md +77 -33
  4. package/bin/footprint.js +16 -0
  5. package/dist/src/adapters/claude.d.ts +2 -0
  6. package/dist/src/adapters/claude.d.ts.map +1 -0
  7. package/dist/src/adapters/claude.js +7 -0
  8. package/dist/src/adapters/claude.js.map +1 -0
  9. package/dist/src/adapters/codex.d.ts +2 -0
  10. package/dist/src/adapters/codex.d.ts.map +1 -0
  11. package/dist/src/adapters/codex.js +7 -0
  12. package/dist/src/adapters/codex.js.map +1 -0
  13. package/dist/src/adapters/gemini.d.ts +2 -0
  14. package/dist/src/adapters/gemini.d.ts.map +1 -0
  15. package/dist/src/adapters/gemini.js +7 -0
  16. package/dist/src/adapters/gemini.js.map +1 -0
  17. package/dist/src/adapters/index.d.ts +5 -0
  18. package/dist/src/adapters/index.d.ts.map +1 -0
  19. package/dist/src/adapters/index.js +12 -0
  20. package/dist/src/adapters/index.js.map +1 -0
  21. package/dist/src/adapters/structured-prefix.d.ts +10 -0
  22. package/dist/src/adapters/structured-prefix.d.ts.map +1 -0
  23. package/dist/src/adapters/structured-prefix.js +59 -0
  24. package/dist/src/adapters/structured-prefix.js.map +1 -0
  25. package/dist/src/adapters/types.d.ts +32 -0
  26. package/dist/src/adapters/types.d.ts.map +1 -0
  27. package/dist/src/adapters/types.js +2 -0
  28. package/dist/src/adapters/types.js.map +1 -0
  29. package/dist/src/analyzers/content-analyzer.d.ts.map +1 -1
  30. package/dist/src/analyzers/content-analyzer.js +20 -4
  31. package/dist/src/analyzers/content-analyzer.js.map +1 -1
  32. package/dist/src/cli/context-flow.d.ts +92 -0
  33. package/dist/src/cli/context-flow.d.ts.map +1 -0
  34. package/dist/src/cli/context-flow.js +724 -0
  35. package/dist/src/cli/context-flow.js.map +1 -0
  36. package/dist/src/cli/history-display.d.ts +27 -0
  37. package/dist/src/cli/history-display.d.ts.map +1 -0
  38. package/dist/src/cli/history-display.js +167 -0
  39. package/dist/src/cli/history-display.js.map +1 -0
  40. package/dist/src/cli/index.js +924 -0
  41. package/dist/src/cli/index.js.map +1 -1
  42. package/dist/src/cli/launch-spec.d.ts +31 -0
  43. package/dist/src/cli/launch-spec.d.ts.map +1 -0
  44. package/dist/src/cli/launch-spec.js +182 -0
  45. package/dist/src/cli/launch-spec.js.map +1 -0
  46. package/dist/src/cli/live-demo.d.ts +34 -0
  47. package/dist/src/cli/live-demo.d.ts.map +1 -0
  48. package/dist/src/cli/live-demo.js +254 -0
  49. package/dist/src/cli/live-demo.js.map +1 -0
  50. package/dist/src/cli/pty-transcript.d.ts +34 -0
  51. package/dist/src/cli/pty-transcript.d.ts.map +1 -0
  52. package/dist/src/cli/pty-transcript.js +174 -0
  53. package/dist/src/cli/pty-transcript.js.map +1 -0
  54. package/dist/src/cli/session-display.d.ts +74 -0
  55. package/dist/src/cli/session-display.d.ts.map +1 -0
  56. package/dist/src/cli/session-display.js +922 -0
  57. package/dist/src/cli/session-display.js.map +1 -0
  58. package/dist/src/cli/session-execution.d.ts +55 -0
  59. package/dist/src/cli/session-execution.d.ts.map +1 -0
  60. package/dist/src/cli/session-execution.js +817 -0
  61. package/dist/src/cli/session-execution.js.map +1 -0
  62. package/dist/src/cli/session-runtime.d.ts +5 -0
  63. package/dist/src/cli/session-runtime.d.ts.map +1 -0
  64. package/dist/src/cli/session-runtime.js +11 -0
  65. package/dist/src/cli/session-runtime.js.map +1 -0
  66. package/dist/src/cli/setup.d.ts.map +1 -1
  67. package/dist/src/cli/setup.js +36 -12
  68. package/dist/src/cli/setup.js.map +1 -1
  69. package/dist/src/cli/utils/env.d.ts +7 -2
  70. package/dist/src/cli/utils/env.d.ts.map +1 -1
  71. package/dist/src/cli/utils/env.js +37 -6
  72. package/dist/src/cli/utils/env.js.map +1 -1
  73. package/dist/src/index.d.ts +4 -1
  74. package/dist/src/index.d.ts.map +1 -1
  75. package/dist/src/index.js +187 -33
  76. package/dist/src/index.js.map +1 -1
  77. package/dist/src/ingestion/deterministic.d.ts +3 -0
  78. package/dist/src/ingestion/deterministic.d.ts.map +1 -0
  79. package/dist/src/ingestion/deterministic.js +862 -0
  80. package/dist/src/ingestion/deterministic.js.map +1 -0
  81. package/dist/src/ingestion/index.d.ts +5 -0
  82. package/dist/src/ingestion/index.d.ts.map +1 -0
  83. package/dist/src/ingestion/index.js +27 -0
  84. package/dist/src/ingestion/index.js.map +1 -0
  85. package/dist/src/ingestion/semantic.d.ts +6 -0
  86. package/dist/src/ingestion/semantic.d.ts.map +1 -0
  87. package/dist/src/ingestion/semantic.js +627 -0
  88. package/dist/src/ingestion/semantic.js.map +1 -0
  89. package/dist/src/ingestion/types.d.ts +10 -0
  90. package/dist/src/ingestion/types.d.ts.map +1 -0
  91. package/dist/src/ingestion/types.js +2 -0
  92. package/dist/src/ingestion/types.js.map +1 -0
  93. package/dist/src/lib/context-memory.d.ts +140 -0
  94. package/dist/src/lib/context-memory.d.ts.map +1 -0
  95. package/dist/src/lib/context-memory.js +974 -0
  96. package/dist/src/lib/context-memory.js.map +1 -0
  97. package/dist/src/lib/crypto/decrypt.d.ts.map +1 -1
  98. package/dist/src/lib/crypto/decrypt.js +12 -8
  99. package/dist/src/lib/crypto/decrypt.js.map +1 -1
  100. package/dist/src/lib/crypto/encrypt.d.ts.map +1 -1
  101. package/dist/src/lib/crypto/encrypt.js +6 -3
  102. package/dist/src/lib/crypto/encrypt.js.map +1 -1
  103. package/dist/src/lib/crypto/key-derivation.d.ts +1 -1
  104. package/dist/src/lib/crypto/key-derivation.d.ts.map +1 -1
  105. package/dist/src/lib/crypto/key-derivation.js +11 -11
  106. package/dist/src/lib/crypto/key-derivation.js.map +1 -1
  107. package/dist/src/lib/history-handoff.d.ts +43 -0
  108. package/dist/src/lib/history-handoff.d.ts.map +1 -0
  109. package/dist/src/lib/history-handoff.js +179 -0
  110. package/dist/src/lib/history-handoff.js.map +1 -0
  111. package/dist/src/lib/observability.d.ts +3 -0
  112. package/dist/src/lib/observability.d.ts.map +1 -0
  113. package/dist/src/lib/observability.js +63 -0
  114. package/dist/src/lib/observability.js.map +1 -0
  115. package/dist/src/lib/session-artifacts.d.ts +51 -0
  116. package/dist/src/lib/session-artifacts.d.ts.map +1 -0
  117. package/dist/src/lib/session-artifacts.js +132 -0
  118. package/dist/src/lib/session-artifacts.js.map +1 -0
  119. package/dist/src/lib/session-filters.d.ts +11 -0
  120. package/dist/src/lib/session-filters.d.ts.map +1 -0
  121. package/dist/src/lib/session-filters.js +16 -0
  122. package/dist/src/lib/session-filters.js.map +1 -0
  123. package/dist/src/lib/session-history.d.ts +50 -0
  124. package/dist/src/lib/session-history.d.ts.map +1 -0
  125. package/dist/src/lib/session-history.js +73 -0
  126. package/dist/src/lib/session-history.js.map +1 -0
  127. package/dist/src/lib/session-trends.d.ts +129 -0
  128. package/dist/src/lib/session-trends.d.ts.map +1 -0
  129. package/dist/src/lib/session-trends.js +361 -0
  130. package/dist/src/lib/session-trends.js.map +1 -0
  131. package/dist/src/lib/storage/database.d.ts +257 -3
  132. package/dist/src/lib/storage/database.d.ts.map +1 -1
  133. package/dist/src/lib/storage/database.js +1836 -161
  134. package/dist/src/lib/storage/database.js.map +1 -1
  135. package/dist/src/lib/storage/export-sessions.d.ts +33 -0
  136. package/dist/src/lib/storage/export-sessions.d.ts.map +1 -0
  137. package/dist/src/lib/storage/export-sessions.js +525 -0
  138. package/dist/src/lib/storage/export-sessions.js.map +1 -0
  139. package/dist/src/lib/storage/export.d.ts +1 -2
  140. package/dist/src/lib/storage/export.d.ts.map +1 -1
  141. package/dist/src/lib/storage/export.js +46 -33
  142. package/dist/src/lib/storage/export.js.map +1 -1
  143. package/dist/src/lib/storage/index.d.ts +7 -6
  144. package/dist/src/lib/storage/index.d.ts.map +1 -1
  145. package/dist/src/lib/storage/index.js +6 -5
  146. package/dist/src/lib/storage/index.js.map +1 -1
  147. package/dist/src/lib/storage/salt-storage.d.ts +1 -1
  148. package/dist/src/lib/storage/salt-storage.d.ts.map +1 -1
  149. package/dist/src/lib/storage/salt-storage.js +26 -18
  150. package/dist/src/lib/storage/salt-storage.js.map +1 -1
  151. package/dist/src/lib/storage/schema.d.ts +7 -2
  152. package/dist/src/lib/storage/schema.d.ts.map +1 -1
  153. package/dist/src/lib/storage/schema.js +357 -40
  154. package/dist/src/lib/storage/schema.js.map +1 -1
  155. package/dist/src/lib/storage/types.d.ts +122 -0
  156. package/dist/src/lib/storage/types.d.ts.map +1 -1
  157. package/dist/src/lib/tool-wrapper.d.ts.map +1 -1
  158. package/dist/src/lib/tool-wrapper.js +2 -2
  159. package/dist/src/lib/tool-wrapper.js.map +1 -1
  160. package/dist/src/prompts/skill-prompt.d.ts +6 -0
  161. package/dist/src/prompts/skill-prompt.d.ts.map +1 -0
  162. package/dist/src/prompts/skill-prompt.js +138 -0
  163. package/dist/src/prompts/skill-prompt.js.map +1 -0
  164. package/dist/src/tools/capture-footprint.d.ts +2 -2
  165. package/dist/src/tools/capture-footprint.d.ts.map +1 -1
  166. package/dist/src/tools/capture-footprint.js +52 -11
  167. package/dist/src/tools/capture-footprint.js.map +1 -1
  168. package/dist/src/tools/confirm-context-link.d.ts +62 -0
  169. package/dist/src/tools/confirm-context-link.d.ts.map +1 -0
  170. package/dist/src/tools/confirm-context-link.js +36 -0
  171. package/dist/src/tools/confirm-context-link.js.map +1 -0
  172. package/dist/src/tools/context-schemas.d.ts +694 -0
  173. package/dist/src/tools/context-schemas.d.ts.map +1 -0
  174. package/dist/src/tools/context-schemas.js +171 -0
  175. package/dist/src/tools/context-schemas.js.map +1 -0
  176. package/dist/src/tools/delete-footprints.d.ts +18 -1
  177. package/dist/src/tools/delete-footprints.d.ts.map +1 -1
  178. package/dist/src/tools/delete-footprints.js +53 -5
  179. package/dist/src/tools/delete-footprints.js.map +1 -1
  180. package/dist/src/tools/export-footprints.d.ts +11 -3
  181. package/dist/src/tools/export-footprints.d.ts.map +1 -1
  182. package/dist/src/tools/export-footprints.js +48 -9
  183. package/dist/src/tools/export-footprints.js.map +1 -1
  184. package/dist/src/tools/export-sessions.d.ts +111 -0
  185. package/dist/src/tools/export-sessions.d.ts.map +1 -0
  186. package/dist/src/tools/export-sessions.js +136 -0
  187. package/dist/src/tools/export-sessions.js.map +1 -0
  188. package/dist/src/tools/get-context.d.ts +208 -0
  189. package/dist/src/tools/get-context.d.ts.map +1 -0
  190. package/dist/src/tools/get-context.js +27 -0
  191. package/dist/src/tools/get-context.js.map +1 -0
  192. package/dist/src/tools/get-footprint.d.ts +1 -7
  193. package/dist/src/tools/get-footprint.d.ts.map +1 -1
  194. package/dist/src/tools/get-footprint.js +7 -3
  195. package/dist/src/tools/get-footprint.js.map +1 -1
  196. package/dist/src/tools/get-history-handoff.d.ts +109 -0
  197. package/dist/src/tools/get-history-handoff.d.ts.map +1 -0
  198. package/dist/src/tools/get-history-handoff.js +85 -0
  199. package/dist/src/tools/get-history-handoff.js.map +1 -0
  200. package/dist/src/tools/get-history-trends.d.ts +155 -0
  201. package/dist/src/tools/get-history-trends.d.ts.map +1 -0
  202. package/dist/src/tools/get-history-trends.js +123 -0
  203. package/dist/src/tools/get-history-trends.js.map +1 -0
  204. package/dist/src/tools/get-session-artifacts.d.ts +151 -0
  205. package/dist/src/tools/get-session-artifacts.d.ts.map +1 -0
  206. package/dist/src/tools/get-session-artifacts.js +184 -0
  207. package/dist/src/tools/get-session-artifacts.js.map +1 -0
  208. package/dist/src/tools/get-session-decisions.d.ts +69 -0
  209. package/dist/src/tools/get-session-decisions.d.ts.map +1 -0
  210. package/dist/src/tools/get-session-decisions.js +99 -0
  211. package/dist/src/tools/get-session-decisions.js.map +1 -0
  212. package/dist/src/tools/get-session-messages.d.ts +55 -0
  213. package/dist/src/tools/get-session-messages.d.ts.map +1 -0
  214. package/dist/src/tools/get-session-messages.js +89 -0
  215. package/dist/src/tools/get-session-messages.js.map +1 -0
  216. package/dist/src/tools/get-session-narrative.d.ts +72 -0
  217. package/dist/src/tools/get-session-narrative.d.ts.map +1 -0
  218. package/dist/src/tools/get-session-narrative.js +106 -0
  219. package/dist/src/tools/get-session-narrative.js.map +1 -0
  220. package/dist/src/tools/get-session-timeline.d.ts +55 -0
  221. package/dist/src/tools/get-session-timeline.d.ts.map +1 -0
  222. package/dist/src/tools/get-session-timeline.js +93 -0
  223. package/dist/src/tools/get-session-timeline.js.map +1 -0
  224. package/dist/src/tools/get-session-trends.d.ts +108 -0
  225. package/dist/src/tools/get-session-trends.d.ts.map +1 -0
  226. package/dist/src/tools/get-session-trends.js +130 -0
  227. package/dist/src/tools/get-session-trends.js.map +1 -0
  228. package/dist/src/tools/get-session.d.ts +251 -0
  229. package/dist/src/tools/get-session.d.ts.map +1 -0
  230. package/dist/src/tools/get-session.js +290 -0
  231. package/dist/src/tools/get-session.js.map +1 -0
  232. package/dist/src/tools/index.d.ts +23 -3
  233. package/dist/src/tools/index.d.ts.map +1 -1
  234. package/dist/src/tools/index.js +23 -3
  235. package/dist/src/tools/index.js.map +1 -1
  236. package/dist/src/tools/list-contexts.d.ts +50 -0
  237. package/dist/src/tools/list-contexts.d.ts.map +1 -0
  238. package/dist/src/tools/list-contexts.js +28 -0
  239. package/dist/src/tools/list-contexts.js.map +1 -0
  240. package/dist/src/tools/list-footprints.d.ts +1 -15
  241. package/dist/src/tools/list-footprints.d.ts.map +1 -1
  242. package/dist/src/tools/list-footprints.js +17 -6
  243. package/dist/src/tools/list-footprints.js.map +1 -1
  244. package/dist/src/tools/list-sessions.d.ts +86 -0
  245. package/dist/src/tools/list-sessions.d.ts.map +1 -0
  246. package/dist/src/tools/list-sessions.js +97 -0
  247. package/dist/src/tools/list-sessions.js.map +1 -0
  248. package/dist/src/tools/manage-tags.d.ts +47 -0
  249. package/dist/src/tools/manage-tags.d.ts.map +1 -0
  250. package/dist/src/tools/manage-tags.js +109 -0
  251. package/dist/src/tools/manage-tags.js.map +1 -0
  252. package/dist/src/tools/merge-contexts.d.ts +58 -0
  253. package/dist/src/tools/merge-contexts.d.ts.map +1 -0
  254. package/dist/src/tools/merge-contexts.js +27 -0
  255. package/dist/src/tools/merge-contexts.js.map +1 -0
  256. package/dist/src/tools/move-session-context.d.ts +62 -0
  257. package/dist/src/tools/move-session-context.d.ts.map +1 -0
  258. package/dist/src/tools/move-session-context.js +33 -0
  259. package/dist/src/tools/move-session-context.js.map +1 -0
  260. package/dist/src/tools/reingest-session.d.ts +31 -0
  261. package/dist/src/tools/reingest-session.d.ts.map +1 -0
  262. package/dist/src/tools/reingest-session.js +43 -0
  263. package/dist/src/tools/reingest-session.js.map +1 -0
  264. package/dist/src/tools/reject-context-link.d.ts +58 -0
  265. package/dist/src/tools/reject-context-link.d.ts.map +1 -0
  266. package/dist/src/tools/reject-context-link.js +26 -0
  267. package/dist/src/tools/reject-context-link.js.map +1 -0
  268. package/dist/src/tools/resolve-context.d.ts +287 -0
  269. package/dist/src/tools/resolve-context.d.ts.map +1 -0
  270. package/dist/src/tools/resolve-context.js +35 -0
  271. package/dist/src/tools/resolve-context.js.map +1 -0
  272. package/dist/src/tools/search-footprints.d.ts +2 -16
  273. package/dist/src/tools/search-footprints.d.ts.map +1 -1
  274. package/dist/src/tools/search-footprints.js +23 -7
  275. package/dist/src/tools/search-footprints.js.map +1 -1
  276. package/dist/src/tools/search-history.d.ts +86 -0
  277. package/dist/src/tools/search-history.d.ts.map +1 -0
  278. package/dist/src/tools/search-history.js +103 -0
  279. package/dist/src/tools/search-history.js.map +1 -0
  280. package/dist/src/tools/session-ui-metadata.d.ts +15 -0
  281. package/dist/src/tools/session-ui-metadata.d.ts.map +1 -0
  282. package/dist/src/tools/session-ui-metadata.js +15 -0
  283. package/dist/src/tools/session-ui-metadata.js.map +1 -0
  284. package/dist/src/tools/set-active-context.d.ts +58 -0
  285. package/dist/src/tools/set-active-context.d.ts.map +1 -0
  286. package/dist/src/tools/set-active-context.js +26 -0
  287. package/dist/src/tools/set-active-context.js.map +1 -0
  288. package/dist/src/tools/split-context.d.ts +62 -0
  289. package/dist/src/tools/split-context.d.ts.map +1 -0
  290. package/dist/src/tools/split-context.js +36 -0
  291. package/dist/src/tools/split-context.js.map +1 -0
  292. package/dist/src/tools/suggest-capture.d.ts +1 -1
  293. package/dist/src/tools/suggest-capture.d.ts.map +1 -1
  294. package/dist/src/tools/suggest-capture.js +6 -2
  295. package/dist/src/tools/suggest-capture.js.map +1 -1
  296. package/dist/src/tools/verify-footprint.d.ts +7 -54
  297. package/dist/src/tools/verify-footprint.d.ts.map +1 -1
  298. package/dist/src/tools/verify-footprint.js +11 -8
  299. package/dist/src/tools/verify-footprint.js.map +1 -1
  300. package/dist/src/types.d.ts +6 -4
  301. package/dist/src/types.d.ts.map +1 -1
  302. package/dist/src/ui/register.d.ts +6 -1
  303. package/dist/src/ui/register.d.ts.map +1 -1
  304. package/dist/src/ui/register.js +60 -16
  305. package/dist/src/ui/register.js.map +1 -1
  306. package/dist/ui/dashboard.html +259 -875
  307. package/dist/ui/detail.html +124 -252
  308. package/dist/ui/export.html +133 -303
  309. package/dist/ui/session-dashboard-live.html +264 -0
  310. package/dist/ui/session-dashboard.html +329 -0
  311. package/dist/ui/session-detail-live.html +336 -0
  312. package/dist/ui/session-detail.html +355 -0
  313. package/package.json +61 -16
  314. package/dist/src/lib/errors/base-error.d.ts +0 -15
  315. package/dist/src/lib/errors/base-error.d.ts.map +0 -1
  316. package/dist/src/lib/errors/base-error.js +0 -34
  317. package/dist/src/lib/errors/base-error.js.map +0 -1
  318. package/dist/src/lib/errors/crypto-error.d.ts +0 -29
  319. package/dist/src/lib/errors/crypto-error.d.ts.map +0 -1
  320. package/dist/src/lib/errors/crypto-error.js +0 -43
  321. package/dist/src/lib/errors/crypto-error.js.map +0 -1
  322. package/dist/src/lib/errors/index.d.ts +0 -26
  323. package/dist/src/lib/errors/index.d.ts.map +0 -1
  324. package/dist/src/lib/errors/index.js +0 -26
  325. package/dist/src/lib/errors/index.js.map +0 -1
  326. package/dist/src/lib/errors/storage-error.d.ts +0 -25
  327. package/dist/src/lib/errors/storage-error.d.ts.map +0 -1
  328. package/dist/src/lib/errors/storage-error.js +0 -38
  329. package/dist/src/lib/errors/storage-error.js.map +0 -1
  330. package/dist/src/lib/errors/validation-error.d.ts +0 -21
  331. package/dist/src/lib/errors/validation-error.d.ts.map +0 -1
  332. package/dist/src/lib/errors/validation-error.js +0 -29
  333. package/dist/src/lib/errors/validation-error.js.map +0 -1
  334. package/dist/src/test-helpers.d.ts +0 -33
  335. package/dist/src/test-helpers.d.ts.map +0 -1
  336. package/dist/src/test-helpers.js +0 -108
  337. package/dist/src/test-helpers.js.map +0 -1
  338. package/dist/src/tools/get-tag-stats.d.ts +0 -30
  339. package/dist/src/tools/get-tag-stats.d.ts.map +0 -1
  340. package/dist/src/tools/get-tag-stats.js +0 -33
  341. package/dist/src/tools/get-tag-stats.js.map +0 -1
  342. package/dist/src/tools/remove-tag.d.ts +0 -22
  343. package/dist/src/tools/remove-tag.d.ts.map +0 -1
  344. package/dist/src/tools/remove-tag.js +0 -30
  345. package/dist/src/tools/remove-tag.js.map +0 -1
  346. package/dist/src/tools/rename-tag.d.ts +0 -24
  347. package/dist/src/tools/rename-tag.d.ts.map +0 -1
  348. package/dist/src/tools/rename-tag.js +0 -34
  349. 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
  [![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
+ Project site: [footprint.memesh.ai](https://footprint.memesh.ai/)
7
7
 
8
- ## Why Footprint?
8
+ `@pcircle/footprint` is a local-first MCP server for AI-assisted work continuity. It gives you one place to:
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
+ - 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
- **One command to set up everything:**
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
- The interactive wizard will:
37
+ If you want the CLI installed for repeated use:
24
38
 
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
39
+ ```bash
40
+ npm install -g @pcircle/footprint
41
+ footprint setup
42
+ ```
30
43
 
31
- **That's it!** Restart Claude Desktop and your conversations are being captured.
44
+ If you want to start recording live CLI work immediately:
32
45
 
33
- ### Advanced Installation
46
+ ```bash
47
+ footprint run claude -- <args...>
48
+ footprint run gemini -- <args...>
49
+ footprint run codex -- <args...>
50
+ ```
34
51
 
35
- For manual setup or custom configurations, see the [full installation guide](https://github.com/PCIRCLE-AI/footprint-mcp#installation).
52
+ If you want Footprint to suggest the right context before a run begins:
36
53
 
37
- ## Features
54
+ ```bash
55
+ footprint run codex --prepare-context -- <args...>
56
+ ```
38
57
 
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
58
+ ### Install And Configure
47
59
 
48
- ## Architecture
60
+ ```bash
61
+ npx @pcircle/footprint setup
62
+ ```
49
63
 
50
- The Footprint MCP server follows a modular, layered architecture:
64
+ Persistent install:
51
65
 
52
- ```
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
66
+ ```bash
67
+ npm install -g @pcircle/footprint
68
+ footprint setup
75
69
  ```
76
70
 
77
- ### Design Principles
71
+ The setup wizard:
78
72
 
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
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
- ## MCP Tools
78
+ Node.js `>=22` is required.
86
79
 
87
- ### Core Tools
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
- #### capture-footprint
82
+ ### Open The Local Live Product
90
83
 
91
- Captures and encrypts an LLM conversation as evidence.
92
-
93
- **Parameters:**
84
+ ```bash
85
+ npx @pcircle/footprint demo
86
+ ```
94
87
 
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
88
+ If you installed the CLI globally, use `footprint demo` or `footprint demo --open`.
100
89
 
101
- #### list-footprints
90
+ This starts a local browser-facing surface for the current Footprint database and prints a localhost URL for:
102
91
 
103
- Lists all captured evidence with pagination support.
92
+ - the session dashboard
93
+ - deep-linked session detail pages
94
+ - context review and correction flows
95
+ - export and handoff interactions
104
96
 
105
- **Parameters:**
97
+ Optional flags:
106
98
 
107
- - `limit` (optional) - Maximum results per page
108
- - `offset` (optional) - Pagination offset
99
+ ```bash
100
+ footprint demo --host 127.0.0.1 --port 4310
101
+ footprint demo --open
102
+ ```
109
103
 
110
- #### get-footprint
104
+ Recorder inspection commands:
111
105
 
112
- Retrieves and decrypts specific evidence by ID.
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
- **Parameters:**
122
+ Context memory commands:
115
123
 
116
- - `id` - Evidence ID
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
- #### export-footprints
138
+ Add `--json` to the query commands above when you want scriptable output.
119
139
 
120
- Exports evidence to tamper-proof encrypted ZIP archive.
140
+ ### Run As An MCP Server
121
141
 
122
- **Parameters:**
142
+ When invoked without a CLI subcommand, Footprint starts the MCP server on stdio.
123
143
 
124
- - `evidenceIds` - Array of evidence IDs to export
125
- - `includeGitInfo` (optional) - Include git metadata
144
+ ### Manual MCP Configuration
126
145
 
127
- ### Search & Discovery
146
+ Claude Desktop example:
128
147
 
129
- #### search-footprints
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
- Search and filter evidence by query, tags, or date range.
163
+ For Claude Code, use the same server definition in `~/.claude/mcp_settings.json`.
132
164
 
133
- **Parameters:**
165
+ ## Product Surfaces
134
166
 
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
167
+ ### Session History And Context Memory
141
168
 
142
- #### suggest-capture
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
- Analyze conversation content and suggest whether to capture it as evidence.
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
- **Parameters:**
182
+ Primary MCP tools:
147
183
 
148
- - `summary` - Conversation summary or key content to analyze
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
- **Returns:**
207
+ Primary UI resources:
151
208
 
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)
209
+ - `ui://footprint/session-dashboard.html`
210
+ - `ui://footprint/session-detail.html`
157
211
 
158
- ### Verification
212
+ ### Encrypted Evidence
159
213
 
160
- #### verify-footprint
214
+ Use the evidence flow when you need a discrete preserved record of a conversation.
161
215
 
162
- Verify the integrity and authenticity of captured evidence.
216
+ Primary MCP tools:
163
217
 
164
- **Parameters:**
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
- - `id` - Evidence ID to verify
228
+ Primary UI resources:
167
229
 
168
- **Returns:**
230
+ - `ui://footprint/dashboard.html`
231
+ - `ui://footprint/detail.html`
232
+ - `ui://footprint/export.html`
169
233
 
170
- - `verified` - Overall verification status
171
- - `checks` - Detailed checks (content integrity, git timestamp, encryption)
172
- - `legalReadiness` - Whether evidence meets legal standards
234
+ ## Storage Model
173
235
 
174
- ### Management
236
+ Footprint uses one local SQLite database with three logical models:
175
237
 
176
- #### delete-footprints
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
- Delete evidence records permanently.
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
- **Parameters:**
244
+ ## Security
181
245
 
182
- - `evidenceIds` - Array of evidence IDs to delete
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
- #### rename-tag
251
+ > **Store your password securely** — loss means permanent data loss.
185
252
 
186
- Rename a tag across all evidence.
253
+ ## Architecture
187
254
 
188
- **Parameters:**
255
+ Key runtime components:
189
256
 
190
- - `oldTag` - Current tag name
191
- - `newTag` - New tag name
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
- #### remove-tag
264
+ See [ARCHITECTURE.md](./ARCHITECTURE.md) for further reading.
194
265
 
195
- Remove a tag from all evidence.
266
+ ## Prompts
196
267
 
197
- **Parameters:**
268
+ Footprint registers three prompts for MCP clients:
198
269
 
199
- - `tag` - Tag name to remove
270
+ - `footprint-skill`
271
+ - `footprint-quick-ref`
272
+ - `footprint-should-capture`
200
273
 
201
- #### get-tag-stats
274
+ ## Development
202
275
 
203
- Get statistics about tag usage.
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
- **Returns:**
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
- - Tag names and their usage counts
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
- ## Security
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
- - **Encryption**: XChaCha20-Poly1305 (256-bit)
212
- - **Key Derivation**: Argon2id (OWASP recommended)
213
- - **Storage**: Local SQLite with encrypted BLOBs
290
+ ## Links
214
291
 
215
- ⚠️ **Store your password securely** - Loss means permanent data loss.
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
- ## Support
297
+ ## License
218
298
 
219
- - [Documentation](https://github.com/PCIRCLE-AI/footprint#readme)
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.