@pcircle/footprint 1.2.2 → 1.3.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 (96) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +31 -43
  3. package/SKILL.md +45 -45
  4. package/dist/src/cli/constants.d.ts +20 -0
  5. package/dist/src/cli/constants.d.ts.map +1 -0
  6. package/dist/src/cli/constants.js +25 -0
  7. package/dist/src/cli/constants.js.map +1 -0
  8. package/dist/src/cli/index.d.ts +3 -0
  9. package/dist/src/cli/index.d.ts.map +1 -0
  10. package/dist/src/cli/index.js +25 -0
  11. package/dist/src/cli/index.js.map +1 -0
  12. package/dist/src/cli/setup.d.ts +6 -0
  13. package/dist/src/cli/setup.d.ts.map +1 -0
  14. package/dist/src/cli/setup.js +334 -0
  15. package/dist/src/cli/setup.js.map +1 -0
  16. package/dist/src/cli/types.d.ts +38 -0
  17. package/dist/src/cli/types.d.ts.map +1 -0
  18. package/dist/src/cli/types.js +5 -0
  19. package/dist/src/cli/types.js.map +1 -0
  20. package/dist/src/cli/utils/config.d.ts +19 -0
  21. package/dist/src/cli/utils/config.d.ts.map +1 -0
  22. package/dist/src/cli/utils/config.js +86 -0
  23. package/dist/src/cli/utils/config.js.map +1 -0
  24. package/dist/src/cli/utils/detect.d.ts +14 -0
  25. package/dist/src/cli/utils/detect.d.ts.map +1 -0
  26. package/dist/src/cli/utils/detect.js +57 -0
  27. package/dist/src/cli/utils/detect.js.map +1 -0
  28. package/dist/src/cli/utils/env.d.ts +10 -0
  29. package/dist/src/cli/utils/env.d.ts.map +1 -0
  30. package/dist/src/cli/utils/env.js +54 -0
  31. package/dist/src/cli/utils/env.js.map +1 -0
  32. package/dist/src/cli/utils/validation.d.ts +17 -0
  33. package/dist/src/cli/utils/validation.d.ts.map +1 -0
  34. package/dist/src/cli/utils/validation.js +77 -0
  35. package/dist/src/cli/utils/validation.js.map +1 -0
  36. package/dist/src/index.d.ts +1 -0
  37. package/dist/src/index.d.ts.map +1 -1
  38. package/dist/src/index.js +13 -11
  39. package/dist/src/index.js.map +1 -1
  40. package/dist/src/lib/storage/export.d.ts +2 -2
  41. package/dist/src/lib/storage/export.d.ts.map +1 -1
  42. package/dist/src/lib/storage/export.js +39 -39
  43. package/dist/src/lib/storage/export.js.map +1 -1
  44. package/dist/src/tools/capture-footprint.js +1 -1
  45. package/dist/src/tools/capture-footprint.js.map +1 -1
  46. package/dist/src/tools/delete-footprints.d.ts +2 -2
  47. package/dist/src/tools/delete-footprints.d.ts.map +1 -1
  48. package/dist/src/tools/delete-footprints.js +4 -4
  49. package/dist/src/tools/delete-footprints.js.map +1 -1
  50. package/dist/src/tools/export-footprints.d.ts +4 -4
  51. package/dist/src/tools/export-footprints.d.ts.map +1 -1
  52. package/dist/src/tools/export-footprints.js +6 -6
  53. package/dist/src/tools/export-footprints.js.map +1 -1
  54. package/dist/src/tools/get-footprint.js +19 -19
  55. package/dist/src/tools/get-footprint.js.map +1 -1
  56. package/dist/src/tools/list-footprints.d.ts +2 -2
  57. package/dist/src/tools/list-footprints.js +11 -11
  58. package/dist/src/tools/list-footprints.js.map +1 -1
  59. package/dist/src/tools/search-footprints.d.ts +2 -2
  60. package/dist/src/tools/search-footprints.js +11 -11
  61. package/dist/src/tools/search-footprints.js.map +1 -1
  62. package/dist/src/tools/suggest-capture.js +1 -1
  63. package/dist/src/tools/suggest-capture.js.map +1 -1
  64. package/dist/src/tools/verify-footprint.js +11 -11
  65. package/dist/src/tools/verify-footprint.js.map +1 -1
  66. package/dist/src/ui/register.js +2 -2
  67. package/dist/src/ui/register.js.map +1 -1
  68. package/dist/ui/dashboard.html +49 -49
  69. package/dist/ui/detail.html +9 -9
  70. package/dist/ui/export.html +17 -17
  71. package/package.json +13 -6
  72. package/dist/tests/error-handling.test.d.ts +0 -2
  73. package/dist/tests/error-handling.test.d.ts.map +0 -1
  74. package/dist/tests/error-handling.test.js +0 -114
  75. package/dist/tests/error-handling.test.js.map +0 -1
  76. package/dist/tests/fixtures.d.ts +0 -87
  77. package/dist/tests/fixtures.d.ts.map +0 -1
  78. package/dist/tests/fixtures.js +0 -130
  79. package/dist/tests/fixtures.js.map +0 -1
  80. package/dist/tests/integration.test.d.ts +0 -2
  81. package/dist/tests/integration.test.d.ts.map +0 -1
  82. package/dist/tests/integration.test.js +0 -115
  83. package/dist/tests/integration.test.js.map +0 -1
  84. package/dist/tests/resources.test.d.ts +0 -2
  85. package/dist/tests/resources.test.d.ts.map +0 -1
  86. package/dist/tests/resources.test.js +0 -73
  87. package/dist/tests/resources.test.js.map +0 -1
  88. package/dist/tests/setup.d.ts +0 -8
  89. package/dist/tests/setup.d.ts.map +0 -1
  90. package/dist/tests/setup.js +0 -8
  91. package/dist/tests/setup.js.map +0 -1
  92. package/dist/tests/tools.test.d.ts +0 -2
  93. package/dist/tests/tools.test.d.ts.map +0 -1
  94. package/dist/tests/tools.test.js +0 -224
  95. package/dist/tests/tools.test.js.map +0 -1
  96. package/dist/ui-tmp/ui/export.html +0 -409
@@ -261,7 +261,7 @@ container holding the app. Specify either width or maxWidth, and either height o
261
261
  <div class="error">
262
262
  ❌ Error: ${e}
263
263
  </div>
264
- `)}function eo(){const e=document.getElementById("loading"),t=document.getElementById("detail-container");e&&(e.style.display="none"),t&&(t.style.display="block")}function Jo(e){try{return new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"short"})}catch{return e}}function dI(e){return e?e.split(",").map(n=>n.trim()).filter(n=>n.length>0).map(n=>`<span class="tag">${n}</span>`).join(""):"None"}function mI(e){be=e;const t={"footprint-id":e.id,"footprint-timestamp":Jo(e.timestamp),"conversation-id":e.conversationId,"llm-provider":e.llmProvider,"message-count":e.messageCount.toString()};Object.entries(t).forEach(([r,o])=>{const s=document.getElementById(r);s&&(s.textContent=o)});const n=document.getElementById("footprint-tags");n&&(n.innerHTML=dI(e.tags));const a=document.getElementById("git-info-container");a&&(e.gitInfo?a.innerHTML=`
264
+ `)}function eo(){const e=document.getElementById("loading"),t=document.getElementById("detail-container");e&&(e.style.display="none"),t&&(t.style.display="block")}function Jo(e){try{return new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"short"})}catch{return e}}function dI(e){return e?e.split(",").map(n=>n.trim()).filter(n=>n.length>0).map(n=>`<span class="tag">${n}</span>`).join(""):"None"}function mI(e){be=e;const t={"evidence-id":e.id,"evidence-timestamp":Jo(e.timestamp),"conversation-id":e.conversationId,"llm-provider":e.llmProvider,"message-count":e.messageCount.toString()};Object.entries(t).forEach(([r,o])=>{const s=document.getElementById(r);s&&(s.textContent=o)});const n=document.getElementById("evidence-tags");n&&(n.innerHTML=dI(e.tags));const a=document.getElementById("git-info-container");a&&(e.gitInfo?a.innerHTML=`
265
265
  <div class="git-info">
266
266
  <div style="margin-bottom: 0.5rem;">
267
267
  <span class="label">Git Commit:</span>
@@ -272,7 +272,7 @@ container holding the app. Specify either width or maxWidth, and either height o
272
272
  <span class="value">${Jo(e.gitInfo.timestamp)}</span>
273
273
  </div>
274
274
  </div>
275
- `:a.innerHTML="");const i=document.getElementById("footprint-content");i&&(i.textContent=e.content),eo()}Pe.ontoolresult=e=>{console.log("Received tool result:",e);try{if(!e.content?.find(a=>a.type==="text")?.text)throw new Error("No text content in tool result");let n;if(e.structuredContent&&typeof e.structuredContent=="object")n=e.structuredContent;else throw new Error("get-footprint tool should provide structured content");console.log("Parsed footprint data:",n),mI(n)}catch(t){console.error("Failed to parse tool result:",t),we(`Failed to load footprint details: ${t instanceof Error?t.message:"Unknown error"}`),eo()}};window.goBack=()=>{Pe.callServerTool({name:"list-footprints",arguments:{}}).catch(e=>{console.error("Failed to go back to dashboard:",e),we("Failed to navigate back to dashboard")})};window.exportFootprint=async()=>{if(!be){we("No footprint loaded");return}try{const e=await Pe.callServerTool({name:"export-footprints",arguments:{ids:[be.id],includeGitInfo:!0}});await Pe.updateModelContext({content:[{type:"text",text:`User exported footprint ${be.id} from detail view`}]}),console.log("Export result:",e)}catch(e){console.error("Export failed:",e),we(`Export failed: ${e instanceof Error?e.message:"Unknown error"}`)}};window.verifyFootprint=async()=>{if(!be){we("No footprint loaded");return}try{const e=await Pe.callServerTool({name:"verify-footprint",arguments:{id:be.id}});await Pe.updateModelContext({content:[{type:"text",text:`User verified footprint ${be.id} from detail view`}]}),console.log("Verification result:",e)}catch(e){console.error("Verification failed:",e),we(`Verification failed: ${e instanceof Error?e.message:"Unknown error"}`)}};window.copyToClipboard=async()=>{if(!be){we("No footprint content to copy");return}try{await navigator.clipboard.writeText(be.content);const e=document.querySelector('button[onclick="copyToClipboard()"]');if(e){const t=e.innerHTML;e.innerHTML="✓ Copied!",e.disabled=!0,setTimeout(()=>{e.innerHTML=t,e.disabled=!1},2e3)}await Pe.updateModelContext({content:[{type:"text",text:`User copied content of footprint ${be.id} to clipboard`}]})}catch(e){console.error("Copy failed:",e),we("Failed to copy content to clipboard")}};console.log("Connecting detail view to MCP host...");Pe.connect().then(()=>{console.log("Detail view connected to MCP host successfully")}).catch(e=>{console.error("Failed to connect to MCP host:",e),we("Failed to connect to MCP server"),eo()});</script>
275
+ `:a.innerHTML="");const i=document.getElementById("evidence-content");i&&(i.textContent=e.content),eo()}Pe.ontoolresult=e=>{console.log("Received tool result:",e);try{if(!e.content?.find(a=>a.type==="text")?.text)throw new Error("No text content in tool result");let n;if(e.structuredContent&&typeof e.structuredContent=="object")n=e.structuredContent;else throw new Error("get-evidence tool should provide structured content");console.log("Parsed evidence data:",n),mI(n)}catch(t){console.error("Failed to parse tool result:",t),we(`Failed to load evidence details: ${t instanceof Error?t.message:"Unknown error"}`),eo()}};window.goBack=()=>{Pe.callServerTool({name:"list-evidences",arguments:{}}).catch(e=>{console.error("Failed to go back to dashboard:",e),we("Failed to navigate back to dashboard")})};window.exportEvidence=async()=>{if(!be){we("No evidence loaded");return}try{const e=await Pe.callServerTool({name:"export-evidences",arguments:{evidenceIds:[be.id],includeGitInfo:!0}});await Pe.updateModelContext({content:[{type:"text",text:`User exported evidence ${be.id} from detail view`}]}),console.log("Export result:",e)}catch(e){console.error("Export failed:",e),we(`Export failed: ${e instanceof Error?e.message:"Unknown error"}`)}};window.verifyEvidence=async()=>{if(!be){we("No evidence loaded");return}try{const e=await Pe.callServerTool({name:"verify-evidence",arguments:{id:be.id}});await Pe.updateModelContext({content:[{type:"text",text:`User verified evidence ${be.id} from detail view`}]}),console.log("Verification result:",e)}catch(e){console.error("Verification failed:",e),we(`Verification failed: ${e instanceof Error?e.message:"Unknown error"}`)}};window.copyToClipboard=async()=>{if(!be){we("No evidence content to copy");return}try{await navigator.clipboard.writeText(be.content);const e=document.querySelector('button[onclick="copyToClipboard()"]');if(e){const t=e.innerHTML;e.innerHTML="✓ Copied!",e.disabled=!0,setTimeout(()=>{e.innerHTML=t,e.disabled=!1},2e3)}await Pe.updateModelContext({content:[{type:"text",text:`User copied content of evidence ${be.id} to clipboard`}]})}catch(e){console.error("Copy failed:",e),we("Failed to copy content to clipboard")}};console.log("Connecting detail view to MCP host...");Pe.connect().then(()=>{console.log("Detail view connected to MCP host successfully")}).catch(e=>{console.error("Failed to connect to MCP host:",e),we("Failed to connect to MCP server"),eo()});</script>
276
276
  </head>
277
277
  <body>
278
278
  <div class="container">
@@ -292,11 +292,11 @@ container holding the app. Specify either width or maxWidth, and either height o
292
292
  <div class="metadata-grid">
293
293
  <div class="metadata-card">
294
294
  <div class="metadata-label">Record ID</div>
295
- <div class="metadata-value" id="footprint-id">-</div>
295
+ <div class="metadata-value" id="evidence-id">-</div>
296
296
  </div>
297
297
  <div class="metadata-card">
298
298
  <div class="metadata-label">Timestamp</div>
299
- <div class="metadata-value" id="footprint-timestamp">-</div>
299
+ <div class="metadata-value" id="evidence-timestamp">-</div>
300
300
  </div>
301
301
  <div class="metadata-card">
302
302
  <div class="metadata-label">Conversation ID</div>
@@ -312,7 +312,7 @@ container holding the app. Specify either width or maxWidth, and either height o
312
312
  </div>
313
313
  <div class="metadata-card">
314
314
  <div class="metadata-label">Tags</div>
315
- <div class="metadata-value" id="footprint-tags">-</div>
315
+ <div class="metadata-value" id="evidence-tags">-</div>
316
316
  </div>
317
317
  </div>
318
318
 
@@ -325,16 +325,16 @@ container holding the app. Specify either width or maxWidth, and either height o
325
325
  <h3 style="margin: 0;">Decrypted Content</h3>
326
326
  </div>
327
327
  <div class="content-body">
328
- <div class="content-text" id="footprint-content"></div>
328
+ <div class="content-text" id="evidence-content"></div>
329
329
  </div>
330
330
  </div>
331
331
 
332
332
  <!-- Actions -->
333
333
  <div class="actions">
334
- <button class="btn btn-primary" onclick="exportFootprint()">
335
- <svg class="icon" viewBox="0 0 24 24"><path d="m7.5 4.27 9 5.15"/><path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"/><path d="m3.3 7 8.7 5 8.7-5"/><path d="M12 22V12"/></svg> Export This Footprint
334
+ <button class="btn btn-primary" onclick="exportEvidence()">
335
+ <svg class="icon" viewBox="0 0 24 24"><path d="m7.5 4.27 9 5.15"/><path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"/><path d="m3.3 7 8.7 5 8.7-5"/><path d="M12 22V12"/></svg> Export This Evidence
336
336
  </button>
337
- <button class="btn btn-secondary" onclick="verifyFootprint()">
337
+ <button class="btn btn-secondary" onclick="verifyEvidence()">
338
338
  <svg class="icon" viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></svg> Verify Integrity
339
339
  </button>
340
340
  <button class="btn btn-secondary" onclick="copyToClipboard()">