@mneme-ai/xray 2.159.0 → 2.160.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.
@@ -1 +1 @@
1
- {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAgCD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CAuG5G"}
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAgCD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CAiI5G"}
package/dist/pack.js CHANGED
@@ -151,12 +151,38 @@ export function buildContextPack(repoPath, opts = {}) {
151
151
  const coverage = omitted === 0
152
152
  ? `Complete: all ${files.length} source files are included.`
153
153
  : `${full + outl} of ${files.length} files included as content (the highest-signal ones); the remaining ${omitted} are listed in the Structure tree below but their contents were omitted to fit the model. Raise the budget or pack a sub-folder for full contents.`;
154
- const header = `# AI Context Pack ${repoName}
154
+ const header = `SYSTEM / INSTRUCTIONS FOR THE AI ASSISTANTread this first.
155
155
 
156
- > Generated by Mneme X-Ray. **Prioritized** (signal, not a raw dump), **secret-redacted**, and **token-budgeted** to fit your model's window. ~${used.toLocaleString()} tokens.
156
+ You have just been given a complete CONTEXT PACK of a software project named "${repoName}".
157
+ It contains the repo's full structure plus its highest-signal files (FULL = verbatim
158
+ content; OUTLINE = exact function/class SIGNATURES with bodies elided to save space;
159
+ secrets shown as «REDACTED:…»). Treat it as the ground truth for this codebase.
160
+
161
+ YOUR TASK, right now, before anything else:
162
+ 1. Read the whole pack.
163
+ 2. Reply with a 3–4 sentence summary of what this project does and how it's architected.
164
+ 3. List the 3 areas most likely to hold bugs or need refactoring (cite file paths).
165
+ 4. Then ask: "What would you like help with?" and wait for me.
166
+
167
+ RULES: Ground every answer in the files below. If something I ask about isn't in the
168
+ pack, say "that file isn't in the pack" instead of guessing — do not invent code.
169
+
170
+ ═══════════════════════════════════════════════════════════════════════════════
171
+
172
+ # 📦 AI Context Pack — ${repoName}
173
+
174
+ > Built by Mneme X-Ray: **prioritized** by real signals (not a raw dump),
175
+ > **secret-redacted**, and **token-budgeted** to fit your model. ~${used.toLocaleString()} tokens.
157
176
  >
158
177
  > **Coverage:** ${coverage}
159
178
 
179
+ ## 💡 After the AI summarises, try asking:
180
+ - "Explain how <feature> works and which files it lives in."
181
+ - "Find the riskiest code here and suggest concrete fixes."
182
+ - "I want to add <feature> — exactly which files do I change, and how?"
183
+ - "Review <path> for bugs, security and edge cases."
184
+ - "Draw the architecture / data flow of this project."
185
+
160
186
  ## 🧭 Read this first (highest-signal files)
161
187
  ${top}
162
188
 
package/dist/pack.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,EAAQ,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEpD,MAAM,QAAQ,GAAG,0FAA0F,CAAC;AAC5G,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAetD,SAAS,UAAU,CAAC,QAAgB,EAAE,GAAW,EAAE,UAAU,GAAG,GAAG;IACjE,MAAM,CAAC,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACvG,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAAC,IAAI,CAAC;YAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAAC,CAAC;IACpG,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,gBAAgB;QAAE,OAAO,GAAG,CAAC;IACvG,IAAI,yCAAyC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,GAAG,CAAC;IAC/H,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IACjD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5E,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,IAAI,CAAC,IAAc,EAAE,GAAG,GAAG,GAAG;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,OAA0C,EAAE;IAC7F,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEvC,6DAA6D;IAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvG,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAErC,6EAA6E;IAC7E,uDAAuD;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,yCAAyC;IACjF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,wCAAwC;IAC7D,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;YAAC,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAAC,MAAM;QAAC,CAAC;QAClE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,2EAA2E;QAC3E,0DAA0D;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,YAAY,CAAC;QACzE,IAAI,IAAY,EAAE,IAAY,CAAC;QAE/B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;YAAC,IAAI,GAAG,MAAM,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,wDAAwD;YACxD,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,CAAC;gBAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,IAAI,GAAG,EAAE,CAAC;YAAC,CAAC;YACvI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvC,8DAA8D;gBAC9D,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC9F,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;gBAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;gBAAC,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;YACnH,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;gBAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;gBAAC,IAAI,GAAG,SAAS,CAAC;YAC9E,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3D,4EAA4E;QAC5E,2EAA2E;QAC3E,8EAA8E;QAC9E,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1F,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC;QACnI,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,IAAI,GAAG,IAAI,GAAG,aAAa,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YAAC,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAAC,MAAM;QAAC,CAAC;QACpF,IAAI,IAAI,IAAI,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,IAAI,KAAK,MAAM;YAAE,IAAI,EAAE,CAAC;;YAAM,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,0CAA0C;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/H,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC;QAC5B,CAAC,CAAC,iBAAiB,KAAK,CAAC,MAAM,6BAA6B;QAC5D,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,OAAO,KAAK,CAAC,MAAM,uEAAuE,OAAO,oJAAoJ,CAAC;IACxQ,MAAM,MAAM,GACd,uBAAuB,QAAQ;;iJAEkH,IAAI,CAAC,cAAc,EAAE;;kBAEpJ,QAAQ;;;EAGxB,GAAG;;;;EAIH,OAAO;;;;CAIR,CAAC;IAEA,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC3B,aAAa,EAAE,IAAI,GAAG,IAAI;QAC1B,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,OAAO;QACrB,eAAe,EAAE,QAAQ;QACzB,MAAM;QACN,IAAI,EAAE,eAAe,IAAI,GAAG,IAAI,OAAO,KAAK,CAAC,MAAM,gBAAgB,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,mBAAmB,MAAM,CAAC,cAAc,EAAE,MAAM,QAAQ,gFAAgF;KAC7O,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mneme-ai/xray",
3
- "version": "2.159.0",
3
+ "version": "2.160.0",
4
4
  "description": "Mneme Repo X-Ray — a signed, raw-free, deterministic X-Ray of any repo. Every number is reproducible from git/AST/metadata and sealed with an offline-verifiable NOTARY receipt. No source code ever leaves the machine; no LLM guesses anything.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/public/card.js CHANGED
@@ -56,6 +56,10 @@
56
56
  <div><div class="repo">${esc(r.subject.repoName)}</div>
57
57
  <div class="head">${esc(s.headline)} · ${s.signalsRun} signals · @ ${esc(String(r.subject.commitHash).slice(0, 10))}</div></div>
58
58
  </div>
59
+ <div class="trustbar">
60
+ <span class="hgauge"><span class="hdot"></span>0% hallucination risk</span>
61
+ <span class="htext">Every number is computed from git, code &amp; package metadata — <b>no AI guessed anything</b>. ${s.signalsRun} deterministic signals${verified ? ` · <b>signed</b>, verifies offline` : ""}.</span>
62
+ </div>
59
63
  <div class="rows">
60
64
  <div class="row">${kcell("Dependencies")}<div class="v"><span class="big">${dep.total}</span> total · ${dep.byBand.dead + dep.byBand.moribund} dying · ${(lic["strong-copyleft"] + lic["weak-copyleft"])} copyleft<div class="chips">${depChips}${licChips}</div></div></div>
61
65
  <div class="row">${kcell("Secrets")}<div class="v"><span class="big">${sec.totalFindings}</span> in production code · ${sec.filesScanned} files${sec.excludedTestHits ? ` · <span class="muted">+${sec.excludedTestHits} in tests/docs (excluded)</span>` : ""}<div class="chips">${secChips}</div></div></div>
package/public/index.html CHANGED
@@ -22,19 +22,13 @@
22
22
  font-feature-settings:"cv11","ss01";letter-spacing:-0.011em}
23
23
  ::selection{background:var(--a-soft)}
24
24
  .wrap{max-width:720px;margin:0 auto;padding:0 24px;position:relative;z-index:1}
25
- /* decorative cometsonly on wide screens (desktop / iPad landscape) */
25
+ /* grand meteor-impact illustration — wide screens only (desktop / iPad), static */
26
26
  .comet{position:fixed;pointer-events:none;z-index:0;opacity:0;display:none}
27
- .comet-a{top:9%;right:3.5vw}
28
- .comet-b{bottom:7%;left:3vw}
29
- @media (min-width:1180px){
30
- .comet{display:block;animation:cometIn 1.2s ease .3s forwards}
31
- .comet-a{animation:cometIn 1.2s ease .3s forwards, driftA 16s ease-in-out 1.5s infinite alternate}
32
- .comet-b{animation:cometIn 1.2s ease .6s forwards, driftB 19s ease-in-out 2s infinite alternate}
33
- }
34
- @keyframes cometIn{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}
35
- @keyframes driftA{from{transform:translate(0,0) rotate(0deg)}to{transform:translate(-14px,18px) rotate(-3deg)}}
36
- @keyframes driftB{from{transform:translate(0,0) rotate(0deg)}to{transform:translate(16px,-14px) rotate(3deg)}}
37
- @media (prefers-reduced-motion:reduce){.comet{animation:none!important;opacity:1!important}}
27
+ .comet-a{top:7%;right:1.5vw}
28
+ @media (min-width:1180px){ .comet-a{display:block;animation:cometIn 1.1s cubic-bezier(.2,.7,.2,1) .25s forwards} }
29
+ @media (min-width:1500px){ .comet-a{right:4vw} }
30
+ @keyframes cometIn{from{opacity:0;transform:translateY(-12px) scale(.97)}to{opacity:.92;transform:none}}
31
+ @media (prefers-reduced-motion:reduce){.comet{animation:none!important;opacity:.92!important}}
38
32
  /* hero */
39
33
  header{padding:96px 0 40px;text-align:center}
40
34
  .mark{font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--sub);font-weight:600}
@@ -73,6 +67,10 @@
73
67
  .g-F{background:linear-gradient(135deg,#f43f5e,#be123c)}
74
68
  .top .repo{font-size:22px;font-weight:640;letter-spacing:-.02em;color:var(--ink);word-break:break-all;line-height:1.2}
75
69
  .top .head{color:var(--sub);font-size:14px;margin-top:4px}
70
+ .trustbar{display:flex;align-items:center;gap:14px;padding:13px 30px;background:#f0fdf4;border-bottom:1px solid #dcfce7;flex-wrap:wrap}
71
+ .hgauge{display:inline-flex;align-items:center;gap:8px;font-weight:680;color:#15803d;font-size:14px;white-space:nowrap}
72
+ .hdot{width:10px;height:10px;border-radius:50%;background:#16a34a;box-shadow:0 0 0 4px rgba(22,163,74,.16)}
73
+ .htext{font-size:12.5px;color:#3f6b4e;line-height:1.5}.htext b{color:#14532d;font-weight:640}
76
74
  .rows{padding:6px 30px 16px}
77
75
  .row{display:flex;gap:18px;padding:17px 0;border-bottom:1px solid var(--line2);align-items:baseline}
78
76
  .row:last-child{border-bottom:0}
@@ -110,10 +108,11 @@
110
108
  .kstate{align-self:center;color:var(--green);font-size:12.5px;white-space:nowrap}
111
109
  /* board / listview */
112
110
  .board{margin:60px 0 30px}
113
- .tabs{display:flex;gap:8px;margin-bottom:12px}
114
- .tab{background:none;border:0;padding:6px 0;margin-right:20px;font-size:12px;letter-spacing:.14em;
115
- text-transform:uppercase;color:var(--sub);cursor:pointer;border-bottom:2px solid transparent;font-weight:600}
116
- .tab.on{color:var(--ink);border-bottom-color:var(--ink)}
111
+ .tabs{display:inline-flex;gap:6px;margin-bottom:14px;background:var(--soft);border:1px solid var(--line);border-radius:12px;padding:5px}
112
+ .tab{background:none;border:0;padding:9px 18px;border-radius:9px;font-size:13px;letter-spacing:.02em;
113
+ color:var(--sub);cursor:pointer;font-weight:700;transition:background .15s,color .15s;white-space:nowrap}
114
+ .tab:hover{background:#1a1b22;color:#fff}
115
+ .tab.on{background:var(--ink);color:#fff}
117
116
  .listbox{max-height:440px;overflow:auto;border:1px solid var(--line);border-radius:var(--r);background:#fff;box-shadow:var(--sh-sm)}
118
117
  .bitem{display:flex;align-items:center;gap:14px;padding:14px 18px;border-bottom:1px solid var(--line2);font-size:14.5px;cursor:pointer;transition:background .12s}
119
118
  .bitem:last-child{border-bottom:0}
@@ -126,6 +125,8 @@
126
125
  .bitem .arr{color:#c2c6cd}
127
126
  .bitem.muted{cursor:default;color:var(--sub)}.bitem.muted:hover{background:none}
128
127
  .lock{margin-right:4px}
128
+ .signincta{border:1px dashed var(--line);border-radius:var(--r);padding:28px;text-align:center;color:var(--sub);font-size:14px;line-height:1.7;background:var(--soft)}
129
+ .signincta b{color:var(--ink)}
129
130
  .listfoot{display:flex;justify-content:space-between;align-items:center;padding:14px 4px 0;font-size:13px}
130
131
  .moreb{height:38px;padding:0 18px;border:1px solid var(--line);background:#fff;border-radius:10px;cursor:pointer;font-size:13px;font-weight:540;transition:border-color .15s}
131
132
  .moreb:hover{border-color:var(--ink)}
@@ -196,70 +197,50 @@
196
197
  </style>
197
198
  </head>
198
199
  <body>
199
- <!-- decorative comets — desktop / iPad only, hidden on narrow screens -->
200
+ <!-- grand meteor-impact illustration — desktop / iPad only, behind content -->
200
201
  <div class="comet comet-a" aria-hidden="true">
201
- <svg viewBox="0 0 340 360" width="340" height="360">
202
+ <svg viewBox="0 0 360 420" width="360" height="420">
202
203
  <defs>
203
204
  <linearGradient id="mtail" x1="1" y1="0" x2="0" y2="1">
204
- <stop offset="0" stop-color="#0b0b0f" stop-opacity=".68"/><stop offset="1" stop-color="#0b0b0f" stop-opacity="0"/>
205
- </linearGradient>
206
- <radialGradient id="dust"><stop offset="0" stop-color="#0b0b0f" stop-opacity=".2"/><stop offset="1" stop-color="#0b0b0f" stop-opacity="0"/></radialGradient>
205
+ <stop offset="0" stop-color="#0b0b0f" stop-opacity=".55"/><stop offset="1" stop-color="#0b0b0f" stop-opacity="0"/></linearGradient>
206
+ <radialGradient id="dust" cx="50%" cy="60%"><stop offset="0" stop-color="#0b0b0f" stop-opacity=".16"/><stop offset="1" stop-color="#0b0b0f" stop-opacity="0"/></radialGradient>
207
+ <linearGradient id="rock" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#22232b"/><stop offset="1" stop-color="#0b0b0f"/></linearGradient>
207
208
  </defs>
208
- <!-- expanding shockwave ring on impact -->
209
- <circle cx="74" cy="266" r="16" fill="none" stroke="#0b0b0f" stroke-width="2">
210
- <animate attributeName="r" dur="9s" repeatCount="indefinite" values="14;14;120" keyTimes="0;.34;.54"/>
211
- <animate attributeName="opacity" dur="9s" repeatCount="indefinite" values="0;0;.45;0;0" keyTimes="0;.34;.36;.54;1"/>
212
- <animate attributeName="stroke-width" dur="9s" repeatCount="indefinite" values="3;3;.4" keyTimes="0;.34;.54"/>
213
- </circle>
214
- <!-- dust puff -->
215
- <circle cx="74" cy="266" r="46" fill="url(#dust)">
216
- <animate attributeName="opacity" dur="9s" repeatCount="indefinite" values="0;0;1;0" keyTimes="0;.34;.4;.66"/>
217
- </circle>
218
- <!-- the meteor: rocky head + burning tail, streaks in then vanishes at impact -->
219
- <g>
220
- <animate attributeName="opacity" dur="9s" repeatCount="indefinite" values="0;.95;.95;0;0" keyTimes="0;.07;.32;.35;1"/>
221
- <animateTransform attributeName="transform" type="translate" dur="9s" repeatCount="indefinite"
222
- values="190 -150; 0 0; 0 0" keyTimes="0;.34;1" calcMode="spline" keySplines="0.5 0 0.9 1; 0 0 1 1"/>
223
- <path d="M246 40 Q150 110 78 258 Q150 122 236 52 Z" fill="url(#mtail)"/>
224
- <polygon points="250,30 268,42 263,62 243,60 236,42" fill="#0b0b0f"/>
225
- <polygon points="250,30 268,42 256,48" fill="#34343d"/>
209
+ <!-- ground + crater -->
210
+ <path d="M-20 322 Q90 300 150 330 Q175 344 200 330 Q280 300 380 320" fill="none" stroke="#0b0b0f" stroke-width="2" opacity=".5"/>
211
+ <ellipse cx="172" cy="332" rx="78" ry="20" fill="url(#dust)"/>
212
+ <path d="M150 330 Q172 318 196 330 Q176 340 150 330 Z" fill="#0b0b0f" opacity=".55"/>
213
+ <!-- crater cracks -->
214
+ <g stroke="#0b0b0f" stroke-width="1.4" opacity=".4" fill="none">
215
+ <path d="M150 332 L96 352"/><path d="M196 330 L256 350"/><path d="M172 340 L168 372"/><path d="M150 330 L110 318"/>
226
216
  </g>
227
- <!-- debris shards burst out of the impact -->
228
- <g fill="#0b0b0f">
229
- <g opacity="0"><polygon points="0,0 9,2 6,10 -2,8"/>
230
- <animate attributeName="opacity" dur="9s" repeatCount="indefinite" values="0;0;1;0" keyTimes="0;.34;.37;.6"/>
231
- <animateTransform attributeName="transform" type="translate" additive="sum" dur="9s" repeatCount="indefinite" values="74 266;74 266;26 198;20 224" keyTimes="0;.34;.52;.6" calcMode="spline" keySplines="0 0 1 1;0.3 0 0.8 1;0.4 0 1 1"/>
232
- <animateTransform attributeName="transform" type="rotate" additive="sum" dur="9s" repeatCount="indefinite" values="0;0;220" keyTimes="0;.34;.6"/></g>
233
- <g opacity="0"><polygon points="0,0 8,3 5,9 -1,6"/>
234
- <animate attributeName="opacity" dur="9s" repeatCount="indefinite" values="0;0;1;0" keyTimes="0;.34;.37;.62"/>
235
- <animateTransform attributeName="transform" type="translate" additive="sum" dur="9s" repeatCount="indefinite" values="74 266;74 266;58 188;54 214" keyTimes="0;.34;.52;.62" calcMode="spline" keySplines="0 0 1 1;0.3 0 0.8 1;0.4 0 1 1"/>
236
- <animateTransform attributeName="transform" type="rotate" additive="sum" dur="9s" repeatCount="indefinite" values="0;0;-180" keyTimes="0;.34;.62"/></g>
237
- <g opacity="0"><polygon points="0,0 10,2 7,11 -1,8"/>
238
- <animate attributeName="opacity" dur="9s" repeatCount="indefinite" values="0;0;1;0" keyTimes="0;.34;.37;.6"/>
239
- <animateTransform attributeName="transform" type="translate" additive="sum" dur="9s" repeatCount="indefinite" values="74 266;74 266;112 196;120 222" keyTimes="0;.34;.52;.6" calcMode="spline" keySplines="0 0 1 1;0.3 0 0.8 1;0.4 0 1 1"/>
240
- <animateTransform attributeName="transform" type="rotate" additive="sum" dur="9s" repeatCount="indefinite" values="0;0;300" keyTimes="0;.34;.6"/></g>
241
- <g opacity="0"><polygon points="0,0 7,2 5,8 -1,6"/>
242
- <animate attributeName="opacity" dur="9s" repeatCount="indefinite" values="0;0;1;0" keyTimes="0;.34;.37;.64"/>
243
- <animateTransform attributeName="transform" type="translate" additive="sum" dur="9s" repeatCount="indefinite" values="74 266;74 266;146 226;156 248" keyTimes="0;.34;.52;.64" calcMode="spline" keySplines="0 0 1 1;0.3 0 0.8 1;0.4 0 1 1"/>
244
- <animateTransform attributeName="transform" type="rotate" additive="sum" dur="9s" repeatCount="indefinite" values="0;0;160" keyTimes="0;.34;.64"/></g>
245
- <g opacity="0"><polygon points="0,0 8,2 6,10 -2,7"/>
246
- <animate attributeName="opacity" dur="9s" repeatCount="indefinite" values="0;0;1;0" keyTimes="0;.34;.37;.58"/>
247
- <animateTransform attributeName="transform" type="translate" additive="sum" dur="9s" repeatCount="indefinite" values="74 266;74 266;10 244;4 262" keyTimes="0;.34;.52;.58" calcMode="spline" keySplines="0 0 1 1;0.3 0 0.8 1;0.4 0 1 1"/>
248
- <animateTransform attributeName="transform" type="rotate" additive="sum" dur="9s" repeatCount="indefinite" values="0;0;-120" keyTimes="0;.34;.58"/></g>
217
+ <!-- motion streak of the descending meteor -->
218
+ <path d="M300 24 Q236 96 196 250 Q244 110 296 40 Z" fill="url(#mtail)"/>
219
+ <!-- the meteor: a faceted rock, mid-descent -->
220
+ <g transform="translate(196 250)">
221
+ <polygon points="-34,-6 -18,-34 14,-40 36,-18 30,18 2,34 -28,22" fill="url(#rock)"/>
222
+ <g stroke="#3a3b45" stroke-width="1.3" opacity=".7" fill="none">
223
+ <path d="M-18 -34 L2 -6 L36 -18"/><path d="M2 -6 L-28 22"/><path d="M2 -6 L2 34"/><path d="M2 -6 L30 18"/>
224
+ </g>
225
+ <polygon points="-18,-34 14,-40 2,-6" fill="#2c2d36"/>
249
226
  </g>
250
- <!-- settled rubble that lingers a moment at the crater -->
251
- <g fill="#0b0b0f" opacity="0">
252
- <animate attributeName="opacity" dur="9s" repeatCount="indefinite" values="0;0;.5;.5;0" keyTimes="0;.36;.42;.78;.92"/>
253
- <polygon points="60,270 70,266 74,274 62,277"/><polygon points="78,272 88,269 90,277 79,279"/>
227
+ <!-- big angular rock shards flung upward (grand) -->
228
+ <g>
229
+ <polygon points="86,178 110,150 128,170 116,210 92,206" fill="url(#rock)"/>
230
+ <polygon points="86,178 110,150 116,184" fill="#2c2d36"/>
231
+ <polygon points="248,170 276,150 296,184 272,206 250,194" fill="url(#rock)"/>
232
+ <polygon points="248,170 276,150 272,188" fill="#2c2d36"/>
233
+ <polygon points="150,128 168,104 186,124 178,156 154,152" fill="url(#rock)"/>
234
+ <polygon points="150,128 168,104 172,138" fill="#2c2d36"/>
235
+ <polygon points="44,256 64,242 74,266 56,278" fill="#0b0b0f"/>
236
+ <polygon points="300,250 318,238 326,262 306,272" fill="#0b0b0f"/>
237
+ <polygon points="208,150 222,134 234,150 226,170" fill="#0b0b0f" opacity=".82"/>
238
+ </g>
239
+ <!-- small flying debris -->
240
+ <g fill="#0b0b0f" opacity=".7">
241
+ <polygon points="130,96 140,90 142,102 132,104"/><polygon points="232,108 242,102 244,114 234,116"/>
242
+ <polygon points="70,150 79,145 81,156 71,158"/><polygon points="286,138 295,133 297,144 287,146"/>
254
243
  </g>
255
- </svg>
256
- </div>
257
- <div class="comet comet-b" aria-hidden="true">
258
- <svg viewBox="0 0 300 300" width="220" height="220"><defs>
259
- <linearGradient id="tb" x1="0" y1="1" x2="1" y2="0"><stop offset="0" stop-color="#0b0b0f" stop-opacity=".5"/><stop offset="1" stop-color="#0b0b0f" stop-opacity="0"/></linearGradient></defs>
260
- <path d="M38 256 Q150 182 270 48 Q150 168 48 246 Z" fill="url(#tb)"/>
261
- <circle cx="38" cy="256" r="12" fill="#0b0b0f" opacity=".12"/>
262
- <circle cx="38" cy="256" r="6" fill="#0b0b0f"/>
263
244
  </svg>
264
245
  </div>
265
246
  <div class="wrap">
@@ -396,6 +377,12 @@ async function fetchPage(off){
396
377
  async function loadList(reset=true){
397
378
  const el=document.getElementById("board");
398
379
  if(reset){ offset=0; loaded=[]; el.innerHTML='<div class="bitem muted">Loading…</div>'; }
380
+ // My repos needs a key — guide the user instead of showing a blank list
381
+ if(tab==="mine" && !getKey()){
382
+ el.innerHTML=`<div class="signincta"><b>My repos</b> keeps every X-Ray &amp; AI Pack you run.<br/>Create a key to start — it’s just a password you make up.<br/><button class="moreb" id="gokey" style="margin-top:12px">Create a key ↑</button></div>`;
383
+ const g=document.getElementById("gokey"); if(g) g.addEventListener("click",()=>{ const kb=document.querySelector(".keybox"); if(kb) kb.open=true; document.getElementById("key").focus(); window.scrollTo({top:0,behavior:"smooth"}); });
384
+ return;
385
+ }
399
386
  try{
400
387
  const data=await fetchPage(offset);
401
388
  loaded=loaded.concat(data.items||[]);
@@ -483,7 +470,7 @@ function renderPack(p){
483
470
  <button class="sbtn ghost" id="pdl">Download .md</button>
484
471
  <span class="paste-hint">→ paste into <b>any</b> AI chat (ChatGPT · Claude · Grok · Gemini · Copilot…) so it understands your whole codebase</span>
485
472
  </div>
486
- <div class="pwhy">Smarter than a raw repo dump: prioritized by real signals, secret-redacted, and budgeted so it actually fits the model not millions of unusable tokens.</div>
473
+ <div class="pwhy"><b>What you get:</b> paste this into any AI chat and it instantly understands your <b>whole repo</b> the pack even tells the AI what to do, so it replies with a summary + risks and asks how to help. Then ask it to explain code, find bugs, or add a feature. Prioritized · secret-redacted · fits the model (not millions of unusable tokens).</div>
487
474
  <pre class="pre">${esc(md.slice(0,20000))}${md.length>20000?"\n\n… (truncated preview — Copy/Download for the full pack)":""}</pre>
488
475
  </div>`;
489
476
  document.getElementById("pcopy").addEventListener("click",async e=>{try{await navigator.clipboard.writeText(md);e.target.textContent="Copied ✓ — paste into any AI";setTimeout(()=>e.target.textContent="📋 Copy for your AI",1600);}catch{}});
@@ -19,6 +19,10 @@
19
19
  .grade{width:78px;height:78px;border-radius:18px;display:grid;place-items:center;font-size:40px;font-weight:720;color:#fff;flex:none}
20
20
  .g-A{background:var(--green)}.g-B{background:#65a30d}.g-C{background:var(--amber)}.g-D{background:#ea580c}.g-F{background:var(--red)}
21
21
  .top .repo{font-size:21px;font-weight:620;word-break:break-all}.top .head{color:var(--sub);font-size:14.5px;margin-top:2px}
22
+ .trustbar{display:flex;align-items:center;gap:14px;padding:13px 28px;background:#f0fdf4;border-bottom:1px solid #dcfce7;flex-wrap:wrap}
23
+ .hgauge{display:inline-flex;align-items:center;gap:8px;font-weight:680;color:#15803d;font-size:14px}
24
+ .hdot{width:10px;height:10px;border-radius:50%;background:#16a34a;box-shadow:0 0 0 4px rgba(22,163,74,.16)}
25
+ .htext{font-size:12.5px;color:#3f6b4e;line-height:1.5}.htext b{color:#14532d;font-weight:640}
22
26
  .rows{padding:8px 28px 14px}
23
27
  .row{display:flex;gap:14px;padding:15px 0;border-bottom:1px solid var(--soft);align-items:baseline}.row:last-child{border-bottom:0}
24
28
  .row .k{font-size:13px;letter-spacing:.04em;text-transform:uppercase;color:var(--sub);width:140px;flex:none;display:flex;flex-direction:column;gap:3px}