@vpxa/aikit 0.1.305 → 0.1.306

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 (60) hide show
  1. package/package.json +1 -1
  2. package/packages/analyzers/dist/index.js +7 -7
  3. package/packages/blocks-core/dist/index.mjs +3 -2
  4. package/packages/cli/dist/index.js +19 -19
  5. package/packages/indexer/dist/index.js +1 -1
  6. package/packages/present/dist/index.html +3 -2
  7. package/packages/server/dist/auth-7LFAZQBu.js +1 -0
  8. package/packages/server/dist/auth-bEP-6uqy.js +2 -0
  9. package/packages/server/dist/bin.js +6 -6
  10. package/packages/server/dist/config-B-wvmMyo.js +1 -0
  11. package/packages/server/dist/config-Bx85fwRX.js +2 -0
  12. package/packages/server/dist/{curated-manager-i5QA4c79.js → curated-manager-BrgM_znO.js} +4 -4
  13. package/packages/server/dist/dashboard-static-Dw7Nsq4f.js +1 -0
  14. package/packages/server/dist/dashboard-static-dPnij4uF.js +2 -0
  15. package/packages/server/dist/index.d.ts +97 -88
  16. package/packages/server/dist/index.js +1 -1
  17. package/packages/server/dist/{promotion-DmwIVl0c.js → promotion-BGWhzk_I.js} +2 -2
  18. package/packages/server/dist/{promotion-bQutAIz-.js → promotion-RbjKfC88.js} +2 -2
  19. package/packages/server/dist/proxy.js +1 -1
  20. package/packages/server/dist/resolve-sibling-BmZ7AxaA.js +1 -0
  21. package/packages/server/dist/resolve-sibling-DrGKPpb0.js +2 -0
  22. package/packages/server/dist/{routes-1wkXLxXe.js → routes-C7bDyCOW.js} +2 -2
  23. package/packages/server/dist/{routes-KC-D2U8n.js → routes-CfG5gdSR.js} +2 -2
  24. package/packages/server/dist/{server-0bgaP0Re.js → server-B_KbLM43.js} +177 -175
  25. package/packages/server/dist/server-http-B-TDT3t-.js +2 -0
  26. package/packages/server/dist/server-http-BbuuthEP.js +1 -0
  27. package/packages/server/dist/server-stdio-BUb39kqq.js +2 -0
  28. package/packages/server/dist/server-stdio-Ch7yAxNk.js +1 -0
  29. package/packages/server/dist/{server-DQvOpYNO.js → server-utMi-Qu3.js} +177 -175
  30. package/packages/server/dist/server-utils-De-aZNQa.js +1 -0
  31. package/packages/server/dist/settings-static-BpQgaMRs.js +1 -0
  32. package/packages/server/dist/settings-static-MepJZjer.js +2 -0
  33. package/packages/server/dist/startup-maintenance-D0Uhpi3k.js +1 -0
  34. package/packages/server/dist/startup-maintenance-L9NUOBVy.js +2 -0
  35. package/packages/server/dist/version-check-6qDKknz4.js +1 -0
  36. package/packages/server/dist/version-check-DSWaugPC.js +2 -0
  37. package/packages/server/dist/workspace-bootstrap-BPWA6BVf.js +1 -0
  38. package/packages/server/viewers/canvas.html +3 -2
  39. package/packages/server/viewers/report-template.html +3 -2
  40. package/packages/server/viewers/tour-viewer.html +3 -2
  41. package/packages/store/dist/index.d.ts +3 -1
  42. package/packages/store/dist/index.js +24 -24
  43. package/scaffold/dist/adapters/hermes-agent.mjs +56 -0
  44. package/scaffold/dist/definitions/models.mjs +1 -1
  45. package/scaffold/dist/definitions/skills/c4-architecture.mjs +1 -1
  46. package/scaffold/dist/definitions/skills/docs.mjs +1 -1
  47. package/scaffold/dist/definitions/skills/present.mjs +1 -1
  48. package/scaffold/dist/generated/block-docs.mjs +13 -2
  49. package/packages/server/dist/auth-Bz5dmZgR.js +0 -1
  50. package/packages/server/dist/auth-lzZKfxlV.js +0 -2
  51. package/packages/server/dist/config-CaJwUDXI.js +0 -2
  52. package/packages/server/dist/config-_gMeJYrz.js +0 -1
  53. package/packages/server/dist/dashboard-static-CRfR1yKU.js +0 -2
  54. package/packages/server/dist/dashboard-static-FmfoS46e.js +0 -1
  55. package/packages/server/dist/resolve-sibling-1oDoO-Re.js +0 -1
  56. package/packages/server/dist/resolve-sibling-ByoHo7Tp.js +0 -2
  57. package/packages/server/dist/settings-static-B3lnYvcb.js +0 -2
  58. package/packages/server/dist/settings-static-BtvyIrza.js +0 -1
  59. package/packages/server/dist/version-check-CJK1Fwmy.js +0 -2
  60. package/packages/server/dist/version-check-yzdUDXHC.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vpxa/aikit",
3
- "version": "0.1.305",
3
+ "version": "0.1.306",
4
4
  "type": "module",
5
5
  "description": "Local-first AI developer toolkit — knowledge base, code analysis, context management, and developer tools for LLM agents",
6
6
  "license": "MIT",
@@ -1,19 +1,19 @@
1
- import{access as e,readFile as t,readdir as n,stat as r}from"node:fs/promises";import{basename as i,dirname as a,extname as o,join as s,relative as c,resolve as l}from"node:path";import{SUPPORTED_EXTENSIONS as u,WasmRuntime as d,detectEntryPoints as f,detectPatterns as p,extractCalls as m,extractImports as h,extractSymbols as g}from"../../chunker/dist/index.js";import{existsSync as _,readFileSync as v,readdirSync as y}from"node:fs";const ee=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`,`.py`,`.java`,`.go`,`.cs`,`.kt`,`.scala`,`.rb`,`.rs`,`.php`,`.swift`]),te=[{regex:/import\s+(?:(?:type\s+)?(?:(?:\{[^}]*\}|[\w*]+)\s+from\s+)?)['"]([^'"]+)['"]/g,confidence:`high`},{regex:/import\(\s*['"]([^'"]+)['"]\s*\)/g,confidence:`medium`},{regex:/require\(\s*['"]([^'"]+)['"]\s*\)/g,confidence:`medium`},{regex:/^from\s+([\w.]+)\s+import\b/gm,confidence:`high`,lang:`python`},{regex:/^import\s+([\w.]+)\s*$/gm,confidence:`high`,lang:`python`},{regex:/^import\s+(?:static\s+)?([\w.]+(?:\.\*)?)\s*;/gm,confidence:`high`,lang:`java`},{regex:/(?:^import\s+|^\s+)[""]([^""]+)[""]/gm,confidence:`high`,lang:`go`},{regex:/^using\s+(?:static\s+)?([\w.]+)\s*;/gm,confidence:`high`,lang:`csharp`},{regex:/^use\s+([\w:]+(?:::\w+)*)/gm,confidence:`high`,lang:`rust`},{regex:/^use\s+([\w\\]+)\s*;/gm,confidence:`high`,lang:`php`},{regex:/require(?:_relative)?\s+['"]([^'"]+)['"]/g,confidence:`medium`,lang:`ruby`},{regex:/^import\s+(\w+)\s*$/gm,confidence:`high`,lang:`swift`}],b=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`]),ne=[/\.(test|spec)\.[jt]sx?$/,/\/__tests__\//,/\/test\//,/\/tests\//],x={".ts":`js`,".tsx":`js`,".js":`js`,".jsx":`js`,".mjs":`js`,".cjs":`js`,".py":`python`,".java":`java`,".kt":`java`,".scala":`java`,".go":`go`,".cs":`csharp`,".rs":`rust`,".php":`php`,".rb":`ruby`,".swift":`swift`};function re(e,t){return!t||t===`js`?!e.startsWith(`.`)&&!e.startsWith(`/`):t===`python`?!e.startsWith(`.`):t===`java`?!e.startsWith(`com.`)||e.startsWith(`com.amazonaws`)||e.startsWith(`com.google`)||e.startsWith(`com.fasterxml`):t===`go`?e.includes(`.`)&&!e.startsWith(`.`):t===`csharp`?e.startsWith(`System`)||e.startsWith(`Microsoft`)||e.startsWith(`Newtonsoft`)||e.startsWith(`Amazon`):t===`rust`?!e.startsWith(`crate::`)&&!e.startsWith(`self::`)&&!e.startsWith(`super::`):!0}function S(e){return ne.some(t=>t.test(e))}var C=class{name=`dependencies`;workspacePackages=new Map;async analyze(e,n={}){let{format:r=`markdown`}=n,i=Date.now();this.workspacePackages=await this.buildWorkspaceMap(e);let a=!1;try{await d.ensure(),a=!0}catch{}let s=await this.collectFiles(e),l=[];for(let n of s){let r=await t(n,`utf-8`),i=o(n).toLowerCase(),s=c(e,n).replace(/\\/g,`/`);if(a&&u.has(i)){let t=await h(r,i,s);if(t.length>0)l.push(...t);else{let t=this.extractImportsRegex(r,n,e);l.push(...t)}}else{let t=this.extractImportsRegex(r,n,e);l.push(...t)}}let f=this.groupExternalDeps(l),p=this.groupInternalDeps(l,e),m=this.buildReverseGraph(l,e),g=this.buildTestCoverage(l,e);return{output:r===`json`?JSON.stringify({external:f,internal:p,reverseGraph:m,testCoverage:g},null,2):r===`mermaid`?this.formatMermaid(p):this.formatMarkdown(f,p,e,g),data:{external:f,internal:p,reverseGraph:m,testCoverage:g,totalImports:l.length},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:s.length,durationMs:Date.now()-i}}}async collectFiles(e){let t=[],i=async e=>{if(!(await r(e).catch(()=>null))?.isDirectory())return;let a=await n(e,{withFileTypes:!0});for(let n of a){if(b.has(n.name)||n.name.startsWith(`.`))continue;let r=s(e,n.name);n.isDirectory()?await i(r):ee.has(o(n.name))&&t.push(r)}};return await i(e),t}extractImportsRegex(e,t,n){let r=[],i=x[o(t).toLowerCase()];for(let a of te){if(a.lang&&a.lang!==i||!a.lang&&i&&i!==`js`)continue;let o=new RegExp(a.regex.source,a.regex.flags),s;for(;(s=o.exec(e))!==null;){let e=s[1],o=re(e,i);r.push({source:e,specifiers:[],filePath:c(n,t).replace(/\\/g,`/`),isExternal:o,confidence:a.confidence})}}return r}groupExternalDeps(e){let t={};for(let n of e){if(!n.isExternal)continue;let e=x[o(n.filePath).toLowerCase()],r;if(e===`java`){let e=n.source.split(`.`);for(;e.length>1;){let t=e[e.length-1];if(t===`*`||/^[A-Z]/.test(t))e.pop();else break}r=e.length>=2?e.slice(0,2).join(`.`):e.join(`.`)}else if(e===`python`)r=n.source.split(`.`)[0];else if(e===`go`)r=n.source;else if(e===`csharp`){let e=n.source.split(`.`);r=e.length>=2?e.slice(0,2).join(`.`):n.source}else r=n.source.startsWith(`@`)?n.source.split(`/`).slice(0,2).join(`/`):n.source.split(`/`)[0];t[r]||(t[r]={count:0,confidence:n.confidence,usedBy:new Set}),t[r].count++,t[r].usedBy.add(n.filePath),n.confidence===`high`?t[r].confidence=`high`:n.confidence===`medium`&&t[r].confidence===`low`&&(t[r].confidence=`medium`)}let n={};for(let[e,r]of Object.entries(t))n[e]={count:r.count,confidence:r.confidence,usedBy:[...r.usedBy]};return n}groupInternalDeps(e,t){let n={};for(let t of e)t.isExternal||(n[t.filePath]||(n[t.filePath]=new Set),n[t.filePath].add(t.source));let r={};for(let[e,t]of Object.entries(n))r[e]=[...t];return r}buildReverseGraph(e,t){let n={};for(let t of e){let e=a(t.filePath),r=this.resolveImportPath(t.source,e);r&&(n[r]||(n[r]=new Set),n[r].add(t.filePath))}let r={};for(let[e,t]of Object.entries(n))r[e]=[...t];return r}buildTestCoverage(e,t){let n={};for(let t of e){if(!S(t.filePath))continue;let e=a(t.filePath),r=this.resolveImportPath(t.source,e);!r||S(r)||(n[r]||(n[r]=new Set),n[r].add(t.filePath))}let r={};for(let[e,t]of Object.entries(n))r[e]=[...t];return r}resolveImportPath(e,t){if(e.startsWith(`.`))return s(t,e).replace(/\\/g,`/`).replace(/\.[jt]sx?$/,``);let n=e.startsWith(`@`)?e.split(`/`).slice(0,2).join(`/`):e.split(`/`)[0],r=this.workspacePackages.get(n);return r?r.replace(/\.[jt]sx?$/,``):null}async buildWorkspaceMap(e){let r=new Map;for(let i of[`packages`,`functions`,`libs`,`apps`,`cdk`]){let a=s(e,i);try{let i=await n(a,{withFileTypes:!0});for(let n of i)if(!(!n.isDirectory()||b.has(n.name)))try{let i=s(a,n.name,`package.json`),o=JSON.parse(await t(i,`utf-8`));if(o.name){let t=o.main??o.exports?.[`.`]??`src/index.ts`,i=c(e,l(a,n.name,t)).replace(/\\/g,`/`);r.set(o.name,i)}}catch{}}catch{}}return r}formatMarkdown(e,t,n,r){let i=[];i.push(`## Dependencies: ${n}\n`);let a=Object.entries(e).sort((e,t)=>t[1].count-e[1].count),o=a.length,s=a.reduce((e,[,t])=>e+t.count,0),c=a.slice(0,5).map(([e])=>e);i.push(`**${o} external packages**, **${s} total imports**, **${Object.keys(t).length} files** with internal imports.\n`),c.length>0&&i.push(`**Top dependencies**: ${c.join(`, `)}\n`),i.push(`### External Dependencies
2
- `),i.push(`| Package | Imports | Used By |`),i.push(`|---------|---------|---------|`);for(let[e,t]of a)i.push(`| ${e} | ${t.count} | ${t.usedBy.length} ${t.usedBy.length===1?`file`:`files`} |`);if(r&&Object.keys(r).length>0){let e=Object.keys(r).length,n=Object.keys(t).filter(e=>!S(e)&&!r[e.replace(/\\.[jt]sx?$/,``)]);i.push(`
1
+ import{access as e,readFile as t,readdir as n,stat as r}from"node:fs/promises";import{basename as i,dirname as a,extname as o,join as s,relative as c,resolve as l}from"node:path";import{SUPPORTED_EXTENSIONS as u,WasmRuntime as d,detectEntryPoints as f,detectPatterns as p,extractCalls as m,extractImports as h,extractSymbols as g}from"../../chunker/dist/index.js";import{existsSync as _,readFileSync as v,readdirSync as y}from"node:fs";const ee=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`,`.py`,`.java`,`.go`,`.cs`,`.kt`,`.scala`,`.rb`,`.rs`,`.php`,`.swift`]),b=[{regex:/import\s+(?:(?:type\s+)?(?:(?:\{[^}]*\}|[\w*]+)\s+from\s+)?)['"]([^'"]+)['"]/g,confidence:`high`},{regex:/import\(\s*['"]([^'"]+)['"]\s*\)/g,confidence:`medium`},{regex:/require\(\s*['"]([^'"]+)['"]\s*\)/g,confidence:`medium`},{regex:/^from\s+([\w.]+)\s+import\b/gm,confidence:`high`,lang:`python`},{regex:/^import\s+([\w.]+)\s*$/gm,confidence:`high`,lang:`python`},{regex:/^import\s+(?:static\s+)?([\w.]+(?:\.\*)?)\s*;/gm,confidence:`high`,lang:`java`},{regex:/(?:^import\s+|^\s+)[""]([^""]+)[""]/gm,confidence:`high`,lang:`go`},{regex:/^using\s+(?:static\s+)?([\w.]+)\s*;/gm,confidence:`high`,lang:`csharp`},{regex:/^use\s+([\w:]+(?:::\w+)*)/gm,confidence:`high`,lang:`rust`},{regex:/^use\s+([\w\\]+)\s*;/gm,confidence:`high`,lang:`php`},{regex:/require(?:_relative)?\s+['"]([^'"]+)['"]/g,confidence:`medium`,lang:`ruby`},{regex:/^import\s+(\w+)\s*$/gm,confidence:`high`,lang:`swift`}],x=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`]),te=[/\.(test|spec)\.[jt]sx?$/,/\/__tests__\//,/\/test\//,/\/tests\//],S={".ts":`js`,".tsx":`js`,".js":`js`,".jsx":`js`,".mjs":`js`,".cjs":`js`,".py":`python`,".java":`java`,".kt":`java`,".scala":`java`,".go":`go`,".cs":`csharp`,".rs":`rust`,".php":`php`,".rb":`ruby`,".swift":`swift`};function ne(e,t){return!t||t===`js`?!e.startsWith(`.`)&&!e.startsWith(`/`):t===`python`?!e.startsWith(`.`):t===`java`?!e.startsWith(`com.`)||e.startsWith(`com.amazonaws`)||e.startsWith(`com.google`)||e.startsWith(`com.fasterxml`):t===`go`?e.includes(`.`)&&!e.startsWith(`.`):t===`csharp`?e.startsWith(`System`)||e.startsWith(`Microsoft`)||e.startsWith(`Newtonsoft`)||e.startsWith(`Amazon`):t===`rust`?!e.startsWith(`crate::`)&&!e.startsWith(`self::`)&&!e.startsWith(`super::`):!0}function C(e){return te.some(t=>t.test(e))}var w=class{name=`dependencies`;workspacePackages=new Map;async analyze(e,n={}){let{format:r=`markdown`}=n,i=Date.now();this.workspacePackages=await this.buildWorkspaceMap(e);let a=!1;try{await d.ensure(),a=!0}catch{}let s=await this.collectFiles(e),l=[];for(let n of s){let r=await t(n,`utf-8`),i=o(n).toLowerCase(),s=c(e,n).replace(/\\/g,`/`);if(a&&u.has(i)){let t=await h(r,i,s);if(t.length>0)l.push(...t);else{let t=this.extractImportsRegex(r,n,e);l.push(...t)}}else{let t=this.extractImportsRegex(r,n,e);l.push(...t)}}let f=this.groupExternalDeps(l),p=this.groupInternalDeps(l,e),m=this.buildReverseGraph(l,e),g=this.buildTestCoverage(l,e);return{output:r===`json`?JSON.stringify({external:f,internal:p,reverseGraph:m,testCoverage:g},null,2):r===`mermaid`?this.formatMermaid(p):this.formatMarkdown(f,p,e,g),data:{external:f,internal:p,reverseGraph:m,testCoverage:g,totalImports:l.length},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:s.length,durationMs:Date.now()-i}}}async collectFiles(e){let t=[],i=async e=>{if(!(await r(e).catch(()=>null))?.isDirectory())return;let a=await n(e,{withFileTypes:!0});for(let n of a){if(x.has(n.name)||n.name.startsWith(`.`))continue;let r=s(e,n.name);n.isDirectory()?await i(r):ee.has(o(n.name))&&t.push(r)}};return await i(e),t}extractImportsRegex(e,t,n){let r=[],i=S[o(t).toLowerCase()];for(let a of b){if(a.lang&&a.lang!==i||!a.lang&&i&&i!==`js`)continue;let o=new RegExp(a.regex.source,a.regex.flags),s;for(;(s=o.exec(e))!==null;){let e=s[1],o=ne(e,i);r.push({source:e,specifiers:[],filePath:c(n,t).replace(/\\/g,`/`),isExternal:o,confidence:a.confidence})}}return r}groupExternalDeps(e){let t={};for(let n of e){if(!n.isExternal)continue;let e=S[o(n.filePath).toLowerCase()],r;if(e===`java`){let e=n.source.split(`.`);for(;e.length>1;){let t=e[e.length-1];if(t===`*`||/^[A-Z]/.test(t))e.pop();else break}r=e.length>=2?e.slice(0,2).join(`.`):e.join(`.`)}else if(e===`python`)r=n.source.split(`.`)[0];else if(e===`go`)r=n.source;else if(e===`csharp`){let e=n.source.split(`.`);r=e.length>=2?e.slice(0,2).join(`.`):n.source}else r=n.source.startsWith(`@`)?n.source.split(`/`).slice(0,2).join(`/`):n.source.split(`/`)[0];t[r]||(t[r]={count:0,confidence:n.confidence,usedBy:new Set}),t[r].count++,t[r].usedBy.add(n.filePath),n.confidence===`high`?t[r].confidence=`high`:n.confidence===`medium`&&t[r].confidence===`low`&&(t[r].confidence=`medium`)}let n={};for(let[e,r]of Object.entries(t))n[e]={count:r.count,confidence:r.confidence,usedBy:[...r.usedBy]};return n}groupInternalDeps(e,t){let n={};for(let t of e)t.isExternal||(n[t.filePath]||(n[t.filePath]=new Set),n[t.filePath].add(t.source));let r={};for(let[e,t]of Object.entries(n))r[e]=[...t];return r}buildReverseGraph(e,t){let n={};for(let t of e){let e=a(t.filePath),r=this.resolveImportPath(t.source,e);r&&(n[r]||(n[r]=new Set),n[r].add(t.filePath))}let r={};for(let[e,t]of Object.entries(n))r[e]=[...t];return r}buildTestCoverage(e,t){let n={};for(let t of e){if(!C(t.filePath))continue;let e=a(t.filePath),r=this.resolveImportPath(t.source,e);!r||C(r)||(n[r]||(n[r]=new Set),n[r].add(t.filePath))}let r={};for(let[e,t]of Object.entries(n))r[e]=[...t];return r}resolveImportPath(e,t){if(e.startsWith(`.`))return s(t,e).replace(/\\/g,`/`).replace(/\.[jt]sx?$/,``);let n=e.startsWith(`@`)?e.split(`/`).slice(0,2).join(`/`):e.split(`/`)[0],r=this.workspacePackages.get(n);return r?r.replace(/\.[jt]sx?$/,``):null}async buildWorkspaceMap(e){let r=new Map;for(let i of[`packages`,`functions`,`libs`,`apps`,`cdk`]){let a=s(e,i);try{let i=await n(a,{withFileTypes:!0});for(let n of i)if(!(!n.isDirectory()||x.has(n.name)))try{let i=s(a,n.name,`package.json`),o=JSON.parse(await t(i,`utf-8`));if(o.name){let t=o.main??o.exports?.[`.`]??`src/index.ts`,i=c(e,l(a,n.name,t)).replace(/\\/g,`/`);r.set(o.name,i)}}catch{}}catch{}}return r}formatMarkdown(e,t,n,r){let i=[];i.push(`## Dependencies: ${n}\n`);let a=Object.entries(e).sort((e,t)=>t[1].count-e[1].count),o=a.length,s=a.reduce((e,[,t])=>e+t.count,0),c=a.slice(0,5).map(([e])=>e);i.push(`**${o} external packages**, **${s} total imports**, **${Object.keys(t).length} files** with internal imports.\n`),c.length>0&&i.push(`**Top dependencies**: ${c.join(`, `)}\n`),i.push(`### External Dependencies
2
+ `),i.push(`| Package | Imports | Used By |`),i.push(`|---------|---------|---------|`);for(let[e,t]of a)i.push(`| ${e} | ${t.count} | ${t.usedBy.length} ${t.usedBy.length===1?`file`:`files`} |`);if(r&&Object.keys(r).length>0){let e=Object.keys(r).length,n=Object.keys(t).filter(e=>!C(e)&&!r[e.replace(/\\.[jt]sx?$/,``)]);i.push(`
3
3
  ### Test Coverage Summary
4
4
  `),i.push(`**${e} source modules** with test coverage.`),n.length>0&&i.push(`**${n.length} source files** with no detected test coverage.`);let a=Object.entries(r).sort((e,t)=>t[1].length-e[1].length);i.push(`
5
5
  **Most-tested modules:**
6
6
  `);for(let[e,t]of a.slice(0,10)){let n=e.replace(/\/dist\/[^/]*$/,`/src/index`).replace(/\.mjs$/,`.ts`);i.push(`- ${n} (${t.length} ${t.length===1?`test`:`tests`})`)}}return i.join(`
7
7
  `)}formatMermaid(e){let t=[`graph LR`],n=e=>e.replace(/[^a-zA-Z0-9]/g,`_`);for(let[r,i]of Object.entries(e).slice(0,40)){let e=n(r);for(let a of i){let i=n(a);t.push(` ${e}["${r}"] --> ${i}["${a}"]`)}}return t.join(`
8
- `)}},ie=class{name=`blast-radius`;depAnalyzer=new C;async analyze(e,t){let{files:n,maxDepth:r=5,format:i=`markdown`}=t,a=Date.now(),o=(await this.depAnalyzer.analyze(e,{format:`json`})).data,s=o.reverseGraph??{},c=o.testCoverage??{},l=new Map,u=[];for(let e of n){l.set(e,{path:e,reason:`changed`,depth:0});let t=e.replace(/\.[jt]sx?$/,``);u.push({path:t,depth:0})}for(;u.length>0;){let e=u.shift();if(!e)break;let{path:t,depth:n}=e;if(n>=r)continue;let i=s[t]??[];for(let e of i){if(l.has(e))continue;let t=n===0?`direct-importer`:`transitive-importer`;l.set(e,{path:e,reason:t,depth:n+1});let r=e.replace(/\.[jt]sx?$/,``);u.push({path:r,depth:n+1})}}let d=new Set;for(let[e]of l){let t=c[e.replace(/\.[jt]sx?$/,``)]??[];for(let e of t)l.has(e)||(d.add(e),l.set(e,{path:e,reason:`test`,depth:999}))}let f=[...l.values()].sort((e,t)=>e.depth-t.depth);return{output:i===`json`?JSON.stringify({changedFiles:n,affected:f},null,2):this.formatMarkdown(n,f,s),data:{changedFiles:n,affected:f},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:f.length,durationMs:Date.now()-a}}}formatMarkdown(e,t,n){let r=[];r.push(`## Blast Radius Analysis
8
+ `)}},re=class{name=`blast-radius`;depAnalyzer=new w;async analyze(e,t){let{files:n,maxDepth:r=5,format:i=`markdown`}=t,a=Date.now(),o=(await this.depAnalyzer.analyze(e,{format:`json`})).data,s=o.reverseGraph??{},c=o.testCoverage??{},l=new Map,u=[];for(let e of n){l.set(e,{path:e,reason:`changed`,depth:0});let t=e.replace(/\.[jt]sx?$/,``);u.push({path:t,depth:0})}for(;u.length>0;){let e=u.shift();if(!e)break;let{path:t,depth:n}=e;if(n>=r)continue;let i=s[t]??[];for(let e of i){if(l.has(e))continue;let t=n===0?`direct-importer`:`transitive-importer`;l.set(e,{path:e,reason:t,depth:n+1});let r=e.replace(/\.[jt]sx?$/,``);u.push({path:r,depth:n+1})}}let d=new Set;for(let[e]of l){let t=c[e.replace(/\.[jt]sx?$/,``)]??[];for(let e of t)l.has(e)||(d.add(e),l.set(e,{path:e,reason:`test`,depth:999}))}let f=[...l.values()].sort((e,t)=>e.depth-t.depth);return{output:i===`json`?JSON.stringify({changedFiles:n,affected:f},null,2):this.formatMarkdown(n,f,s),data:{changedFiles:n,affected:f},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:f.length,durationMs:Date.now()-a}}}formatMarkdown(e,t,n){let r=[];r.push(`## Blast Radius Analysis
9
9
  `),r.push(`**Changed files:** ${e.length}`),r.push(`**Total affected:** ${t.length}\n`);let i=t.filter(e=>e.reason===`changed`);if(i.length>0){r.push(`### Changed Files
10
10
  `);for(let e of i)r.push(`- \`${e.path}\``)}let a=t.filter(e=>e.reason===`direct-importer`);if(a.length>0){r.push(`\n### Direct Importers (${a.length} files)\n`);for(let e of a)r.push(`- \`${e.path}\``)}let o=t.filter(e=>e.reason===`transitive-importer`);if(o.length>0){r.push(`\n### Transitive Importers (${o.length} files)\n`);for(let e of o.slice(0,20))r.push(`- \`${e.path}\` (depth ${e.depth})`);o.length>20&&r.push(`- ... and ${o.length-20} more`)}let s=t.filter(e=>e.reason===`test`);if(s.length>0){r.push(`\n### Affected Tests (${s.length} files)\n`);for(let e of s)r.push(`- \`${e.path}\``)}return r.push(`
11
11
  ### Review Summary
12
12
  `),r.push(`| Category | Count |`),r.push(`|----------|-------|`),r.push(`| Changed | ${i.length} |`),r.push(`| Direct importers | ${a.length} |`),r.push(`| Transitive importers | ${o.length} |`),r.push(`| Affected tests | ${s.length} |`),r.push(`| **Total review scope** | **${t.length}** |`),r.join(`
13
- `)}};const ae={src:`Application source`,lib:`Library code`,dist:`Build output`,build:`Build output`,test:`Tests`,tests:`Tests`,spec:`Tests`,__tests__:`Tests`,docs:`Documentation`,scripts:`Build/utility scripts`,config:`Configuration`,handlers:`Entry point handlers`,controllers:`HTTP controllers`,routes:`API routes`,middleware:`Middleware`,services:`Business logic services`,domain:`Domain/business logic`,infrastructure:`External integrations`,adapters:`Adapter implementations`,ports:`Port interfaces`,models:`Data models`,entities:`Domain entities`,repositories:`Data access`,utils:`Utilities`,helpers:`Helper functions`,types:`Type definitions`,interfaces:`Interface definitions`,constants:`Constants`,cdk:`CDK infrastructure`,stacks:`CDK stacks`,constructs:`CDK constructs`,lambdas:`Lambda functions`,components:`UI components`,hooks:`React hooks`,pages:`Page components`,layouts:`Layout components`,store:`State management`,assets:`Static assets`,styles:`Stylesheets`,fixtures:`Test fixtures`,mocks:`Test mocks`,migrations:`Database migrations`},oe={".ts":`TypeScript`,".tsx":`React TSX`,".js":`JavaScript`,".jsx":`React JSX`,".mjs":`ES Module`,".cjs":`CommonJS`,".json":`JSON`,".yaml":`YAML`,".yml":`YAML`,".md":`Markdown`,".mdx":`MDX`,".py":`Python`,".go":`Go`,".rs":`Rust`,".java":`Java`,".sh":`Shell`,".ps1":`PowerShell`,".css":`CSS`,".scss":`SCSS`,".html":`HTML`,".sql":`SQL`,".graphql":`GraphQL`,".proto":`Protocol Buffers`,".toml":`TOML`,".env":`Environment`},w=new Set([`node_modules`,`.git`,`dist`,`build`,`.next`,`.nuxt`,`coverage`,`.turbo`,`.cache`,`__pycache__`,`.venv`,`.terraform`,`cdk.out`]),T=new Set(`.ts,.tsx,.js,.jsx,.mjs,.cjs,.java,.kt,.kts,.scala,.py,.go,.rs,.rb,.php,.swift,.cs,.c,.cpp,.h,.hpp,.sh,.bash,.ps1,.sql,.graphql,.gql,.proto,.json,.yaml,.yml,.toml,.env,.ini,.cfg,.xml,.pom,.gradle,.tf,.hcl,.lock,.mjs`.split(`,`)),E=new Set([`__tests__`,`test`,`tests`,`spec`,`__mocks__`,`__fixtures__`,`fixtures`,`mocks`]);var D=class{name=`structure`;async analyze(e,t={}){let{format:n=`markdown`,maxDepth:r=6,sourceOnly:i=!1,maxTokens:a}=t,o=Date.now(),s=await this.buildTree(e,0,r,i),c=this.computeStats(s);return{output:n===`json`?JSON.stringify({tree:s,stats:c},null,2):this.formatMarkdownWithBudget(s,c,e,a),data:{tree:s,stats:c},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:c.totalFiles,durationMs:Date.now()-o}}}async buildTree(e,t,a,c){if(!(await r(e)).isDirectory())return{name:i(e),type:`file`,children:[]};let l=await n(e,{withFileTypes:!0}),u=[];for(let n of l.sort((e,t)=>e.name.localeCompare(t.name))){if(w.has(n.name)||n.name.startsWith(`.`)&&n.name!==`.env.example`)continue;let i=s(e,n.name);if(n.isDirectory()&&t<a){let e=await this.buildTree(i,t+1,a,c);if(c&&(!e.children||e.children.length===0))continue;u.push(e)}else if(n.isFile()){let e=o(n.name).toLowerCase();if(c&&e&&!T.has(e)||c&&!e)continue;let t=await r(i);u.push({name:n.name,type:`file`,language:oe[e]??(e||`unknown`),size:t.size})}}let d=e.split(/[/\\]/).pop()??e;return{name:d,type:`directory`,purpose:ae[d.toLowerCase()],children:u}}computeStats(e){let t={},n=0,r=0,i=e=>{if(e.type===`file`){n++,r+=e.size??0;let i=e.language??`unknown`;t[i]=(t[i]??0)+1}e.children?.forEach(i)};return i(e),{totalFiles:n,totalSize:r,languages:t}}formatMarkdownWithBudget(e,t,n,r){let i=this.formatMarkdown(e,t,n,1);if(!r||this.estimateTokens(i)<=r)return i;let a=this.formatMarkdown(e,t,n,2);return this.estimateTokens(a)<=r?`${a}\n\n> _Tree pruned to Level 2: leaf directories collapsed to fit token budget._`:this.formatMarkdown(e,t,n,3)+`
13
+ `)}};const ie={src:`Application source`,lib:`Library code`,dist:`Build output`,build:`Build output`,test:`Tests`,tests:`Tests`,spec:`Tests`,__tests__:`Tests`,docs:`Documentation`,scripts:`Build/utility scripts`,config:`Configuration`,handlers:`Entry point handlers`,controllers:`HTTP controllers`,routes:`API routes`,middleware:`Middleware`,services:`Business logic services`,domain:`Domain/business logic`,infrastructure:`External integrations`,adapters:`Adapter implementations`,ports:`Port interfaces`,models:`Data models`,entities:`Domain entities`,repositories:`Data access`,utils:`Utilities`,helpers:`Helper functions`,types:`Type definitions`,interfaces:`Interface definitions`,constants:`Constants`,cdk:`CDK infrastructure`,stacks:`CDK stacks`,constructs:`CDK constructs`,lambdas:`Lambda functions`,components:`UI components`,hooks:`React hooks`,pages:`Page components`,layouts:`Layout components`,store:`State management`,assets:`Static assets`,styles:`Stylesheets`,fixtures:`Test fixtures`,mocks:`Test mocks`,migrations:`Database migrations`},T={".ts":`TypeScript`,".tsx":`React TSX`,".js":`JavaScript`,".jsx":`React JSX`,".mjs":`ES Module`,".cjs":`CommonJS`,".json":`JSON`,".yaml":`YAML`,".yml":`YAML`,".md":`Markdown`,".mdx":`MDX`,".py":`Python`,".go":`Go`,".rs":`Rust`,".java":`Java`,".sh":`Shell`,".ps1":`PowerShell`,".css":`CSS`,".scss":`SCSS`,".html":`HTML`,".sql":`SQL`,".graphql":`GraphQL`,".proto":`Protocol Buffers`,".toml":`TOML`,".env":`Environment`},E=new Set([`node_modules`,`.git`,`dist`,`build`,`.next`,`.nuxt`,`coverage`,`.turbo`,`.cache`,`__pycache__`,`.venv`,`.terraform`,`cdk.out`]),ae=new Set(`.ts,.tsx,.js,.jsx,.mjs,.cjs,.java,.kt,.kts,.scala,.py,.go,.rs,.rb,.php,.swift,.cs,.c,.cpp,.h,.hpp,.sh,.bash,.ps1,.sql,.graphql,.gql,.proto,.json,.yaml,.yml,.toml,.env,.ini,.cfg,.xml,.pom,.gradle,.tf,.hcl,.lock,.mjs`.split(`,`)),oe=new Set([`__tests__`,`test`,`tests`,`spec`,`__mocks__`,`__fixtures__`,`fixtures`,`mocks`]);var D=class{name=`structure`;async analyze(e,t={}){let{format:n=`markdown`,maxDepth:r=6,sourceOnly:i=!1,maxTokens:a}=t,o=Date.now(),s=await this.buildTree(e,0,r,i),c=this.computeStats(s);return{output:n===`json`?JSON.stringify({tree:s,stats:c},null,2):this.formatMarkdownWithBudget(s,c,e,a),data:{tree:s,stats:c},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:c.totalFiles,durationMs:Date.now()-o}}}async buildTree(e,t,a,c){if(!(await r(e)).isDirectory())return{name:i(e),type:`file`,children:[]};let l=await n(e,{withFileTypes:!0}),u=[];for(let n of l.sort((e,t)=>e.name.localeCompare(t.name))){if(E.has(n.name)||n.name.startsWith(`.`)&&n.name!==`.env.example`)continue;let i=s(e,n.name);if(n.isDirectory()&&t<a){let e=await this.buildTree(i,t+1,a,c);if(c&&(!e.children||e.children.length===0))continue;u.push(e)}else if(n.isFile()){let e=o(n.name).toLowerCase();if(c&&e&&!ae.has(e)||c&&!e)continue;let t=await r(i);u.push({name:n.name,type:`file`,language:T[e]??(e||`unknown`),size:t.size})}}let d=e.split(/[/\\]/).pop()??e;return{name:d,type:`directory`,purpose:ie[d.toLowerCase()],children:u}}computeStats(e){let t={},n=0,r=0,i=e=>{if(e.type===`file`){n++,r+=e.size??0;let i=e.language??`unknown`;t[i]=(t[i]??0)+1}e.children?.forEach(i)};return i(e),{totalFiles:n,totalSize:r,languages:t}}formatMarkdownWithBudget(e,t,n,r){let i=this.formatMarkdown(e,t,n,1);if(!r||this.estimateTokens(i)<=r)return i;let a=this.formatMarkdown(e,t,n,2);return this.estimateTokens(a)<=r?`${a}\n\n> _Tree pruned to Level 2: leaf directories collapsed to fit token budget._`:this.formatMarkdown(e,t,n,3)+`
14
14
 
15
15
  > _Tree pruned to Level 3: top-level directories only to fit token budget._`}formatMarkdown(e,t,n,r=1){let i=[];return i.push(`## Project Structure: ${n}\n`),i.push(`**${t.totalFiles} files** | Languages: ${Object.entries(t.languages).map(([e,t])=>`${e} (${t})`).join(`, `)}\n`),i.push("```"),r===3?this.renderTreeLevel3(e,i):this.renderTree(e,``,i,r),i.push("```"),i.join(`
16
- `)}renderTree(e,t,n,r=1){let i=e.purpose?` ── ${e.purpose}`:``;if(e.type===`directory`){let a=e.name.toLowerCase();if(E.has(a)&&e.children){let r=this.countFiles(e);n.push(`${t}${e.name}/${i} (${r} files)`);return}if(r>=2&&this.isLeafDir(e)){n.push(`${t}${e.name}/${i} (${this.leafDirSummary(e)})`);return}n.push(`${t}${e.name}/${i}`),e.children?.forEach((i,a)=>{let o=a===(e.children?.length??0)-1,s=o?`└── `:`├── `,c=t+(o?` `:`│ `);i.type===`directory`?this.renderTree(i,c,n,r):n.push(`${t}${s}${i.name}`)})}else n.push(`${t}${e.name}`)}renderTreeLevel3(e,t){for(let n of e.children??[]){let e=n.purpose?` ── ${n.purpose}`:``;if(n.type===`directory`){let r=this.countFiles(n);t.push(`${n.name}/${e} (${r} files)`)}else t.push(n.name)}}estimateTokens(e){return Math.ceil(e.length/4)}isLeafDir(e){return e.type===`directory`&&(e.children??[]).every(e=>e.type===`file`)}leafDirSummary(e){let t={};for(let n of e.children??[]){let e=n.language??`unknown`;t[e]=(t[e]??0)+1}return`${Object.values(t).reduce((e,t)=>e+t,0)} files — ${Object.entries(t).map(([e,t])=>`${e} (${t})`).join(`, `)}`}countFiles(e){return e.type===`file`?1:(e.children??[]).reduce((e,t)=>e+this.countFiles(t),0)}},se=class{name=`diagrams`;structureAnalyzer=new D;dependencyAnalyzer=new C;async analyze(e,t={}){let{diagramType:n=`architecture`}=t,r=Date.now(),i;switch(n){case`dependencies`:i=await this.generateDependencyDiagram(e);break;default:i=await this.generateArchitectureDiagram(e);break}return{output:i,data:{diagramType:n},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:0,durationMs:Date.now()-r}}}async generateArchitectureDiagram(e){let t=(await this.structureAnalyzer.analyze(e,{format:`json`,maxDepth:4})).data.tree,n=await this.dependencyAnalyzer.analyze(e,{format:`json`}),r=n.data,i=["```mermaid",`graph TB`],a=(t.children??[]).filter(e=>e.type===`directory`).slice(0,15);for(let e of a){let t=e.name.replace(/[^a-zA-Z0-9]/g,`_`),n=(e.children??[]).filter(e=>e.type===`directory`);if(n.length>0){i.push(` subgraph ${t}["${e.name}/"]`);for(let e of n.slice(0,12)){let n=`${t}_${e.name.replace(/[^a-zA-Z0-9]/g,`_`)}`,r=Array.isArray(e.children)?e.children.length:0;i.push(` ${n}["${e.name}/ (${r})"]`)}i.push(` end`)}else{let n=Array.isArray(e.children)?e.children.length:0;i.push(` ${t}["${e.name}/ (${n} files)"]`)}}let o=new Set;if(r.internal)for(let[e,t]of Object.entries(r.internal)){let n=e.split(`/`)[0]?.replace(/[^a-zA-Z0-9]/g,`_`);for(let e of t){if(e.startsWith(`.`))continue;let t=e.split(`/`)[0]?.replace(/[^a-zA-Z0-9]/g,`_`);if(n&&t&&n!==t){let e=`${n}->${t}`;o.has(e)||(o.add(e),i.push(` ${n} --> ${t}`))}}}let c=n.data;if(c.external){let t=new Map;for(let n of[`packages`,`apps`,`libs`,`services`,`functions`])try{for(let r of y(s(e,n),{withFileTypes:!0}))if(r.isDirectory())try{let i=JSON.parse(v(s(e,n,r.name,`package.json`),`utf-8`));i.name&&t.set(i.name,`${n}/${r.name}`)}catch{}}catch{}for(let[e,n]of Object.entries(c.external)){let r=t.get(e);if(!r)continue;let a=r.split(`/`)[0]?.replace(/[^a-zA-Z0-9]/g,`_`),s=Array.isArray(n)?n:n.usedBy;for(let e of s??[]){let t=e.split(`/`)[0]?.replace(/[^a-zA-Z0-9]/g,`_`);if(t&&a&&t!==a){let e=`${t}->${a}`;o.has(e)||(o.add(e),i.push(` ${t} --> ${a}`))}}}}return i.push("```"),i.join(`
16
+ `)}renderTree(e,t,n,r=1){let i=e.purpose?` ── ${e.purpose}`:``;if(e.type===`directory`){let a=e.name.toLowerCase();if(oe.has(a)&&e.children){let r=this.countFiles(e);n.push(`${t}${e.name}/${i} (${r} files)`);return}if(r>=2&&this.isLeafDir(e)){n.push(`${t}${e.name}/${i} (${this.leafDirSummary(e)})`);return}n.push(`${t}${e.name}/${i}`),e.children?.forEach((i,a)=>{let o=a===(e.children?.length??0)-1,s=o?`└── `:`├── `,c=t+(o?` `:`│ `);i.type===`directory`?this.renderTree(i,c,n,r):n.push(`${t}${s}${i.name}`)})}else n.push(`${t}${e.name}`)}renderTreeLevel3(e,t){for(let n of e.children??[]){let e=n.purpose?` ── ${n.purpose}`:``;if(n.type===`directory`){let r=this.countFiles(n);t.push(`${n.name}/${e} (${r} files)`)}else t.push(n.name)}}estimateTokens(e){return Math.ceil(e.length/4)}isLeafDir(e){return e.type===`directory`&&(e.children??[]).every(e=>e.type===`file`)}leafDirSummary(e){let t={};for(let n of e.children??[]){let e=n.language??`unknown`;t[e]=(t[e]??0)+1}return`${Object.values(t).reduce((e,t)=>e+t,0)} files — ${Object.entries(t).map(([e,t])=>`${e} (${t})`).join(`, `)}`}countFiles(e){return e.type===`file`?1:(e.children??[]).reduce((e,t)=>e+this.countFiles(t),0)}},se=class{name=`diagrams`;structureAnalyzer=new D;dependencyAnalyzer=new w;async analyze(e,t={}){let{diagramType:n=`architecture`}=t,r=Date.now(),i;switch(n){case`dependencies`:i=await this.generateDependencyDiagram(e);break;default:i=await this.generateArchitectureDiagram(e);break}return{output:i,data:{diagramType:n},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:0,durationMs:Date.now()-r}}}async generateArchitectureDiagram(e){let t=(await this.structureAnalyzer.analyze(e,{format:`json`,maxDepth:4})).data.tree,n=await this.dependencyAnalyzer.analyze(e,{format:`json`}),r=n.data,i=["```mermaid",`graph TB`],a=(t.children??[]).filter(e=>e.type===`directory`).slice(0,15);for(let e of a){let t=e.name.replace(/[^a-zA-Z0-9]/g,`_`),n=(e.children??[]).filter(e=>e.type===`directory`);if(n.length>0){i.push(` subgraph ${t}["${e.name}/"]`);for(let e of n.slice(0,12)){let n=`${t}_${e.name.replace(/[^a-zA-Z0-9]/g,`_`)}`,r=Array.isArray(e.children)?e.children.length:0;i.push(` ${n}["${e.name}/ (${r})"]`)}i.push(` end`)}else{let n=Array.isArray(e.children)?e.children.length:0;i.push(` ${t}["${e.name}/ (${n} files)"]`)}}let o=new Set;if(r.internal)for(let[e,t]of Object.entries(r.internal)){let n=e.split(`/`)[0]?.replace(/[^a-zA-Z0-9]/g,`_`);for(let e of t){if(e.startsWith(`.`))continue;let t=e.split(`/`)[0]?.replace(/[^a-zA-Z0-9]/g,`_`);if(n&&t&&n!==t){let e=`${n}->${t}`;o.has(e)||(o.add(e),i.push(` ${n} --> ${t}`))}}}let c=n.data;if(c.external){let t=new Map;for(let n of[`packages`,`apps`,`libs`,`services`,`functions`])try{for(let r of y(s(e,n),{withFileTypes:!0}))if(r.isDirectory())try{let i=JSON.parse(v(s(e,n,r.name,`package.json`),`utf-8`));i.name&&t.set(i.name,`${n}/${r.name}`)}catch{}}catch{}for(let[e,n]of Object.entries(c.external)){let r=t.get(e);if(!r)continue;let a=r.split(`/`)[0]?.replace(/[^a-zA-Z0-9]/g,`_`),s=Array.isArray(n)?n:n.usedBy;for(let e of s??[]){let t=e.split(`/`)[0]?.replace(/[^a-zA-Z0-9]/g,`_`);if(t&&a&&t!==a){let e=`${t}->${a}`;o.has(e)||(o.add(e),i.push(` ${t} --> ${a}`))}}}}return i.push("```"),i.join(`
17
17
  `)}async generateDependencyDiagram(e){return`\`\`\`mermaid\n${(await this.dependencyAnalyzer.analyze(e,{format:`mermaid`})).output}\n\`\`\``}};const O=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`__pycache__`,`.venv`,`target`,`bin`,`obj`,`.gradle`,`venv`,`env`]),ce=new Set([`test`,`tests`,`__tests__`,`spec`,`specs`,`test-utils`]),le=[/export\s+const\s+(handler|main)\s*(?::[^=]*)?\s*=/,/export\s+(?:async\s+)?function\s+(handler|main)\s*\(/,/export\s+const\s+(\w+Handler)\s*(?::[^=]*)?\s*=/,/export\s+default\s+app/,/^app\s*=\s*(?:Flask|FastAPI)\s*\(/m,/^urlpatterns\s*=\s*\[/m,/^if\s+__name__\s*==\s*['"]__main__['"]:/m,/public\s+static\s+void\s+main\s*\(\s*String/,/@SpringBootApplication/,/^func\s+main\s*\(\s*\)/m],ue=/export\s+(?:default\s+)?class\s+(\w+)\s+extends\s+(?:Construct|Stack|NestedStack|Stage)/,de=[/from\s+['"]vitest['"]/,/from\s+['"]jest['"]/,/from\s+['"]mocha['"]/,/import\s+.*['"]@jest\/globals['"]/,/require\s*\(\s*['"](?:vitest|jest|mocha)['"]\s*\)/],fe=[{regex:/SqsEventSource|SQSEvent|sqs/i,trigger:`SQS`},{regex:/SnsEventSource|SNSEvent|sns/i,trigger:`SNS`},{regex:/ApiGateway|APIGatewayEvent|httpApi|restApi/i,trigger:`API Gateway`},{regex:/ScheduleExpression|EventBridgeRule|schedule/i,trigger:`EventBridge Schedule`},{regex:/S3EventSource|S3Event|s3/i,trigger:`S3`},{regex:/DynamoEventSource|DynamoDBStream/i,trigger:`DynamoDB Stream`},{regex:/@RequestMapping|@GetMapping|@PostMapping/i,trigger:`HTTP Endpoint`},{regex:/http\.ListenAndServe|gin\.Default|echo\.New/i,trigger:`HTTP Server`},{regex:/app\.route\(|@app\.get|@app\.post|@router\./i,trigger:`HTTP Route`}];var pe=class{name=`entry-points`;async analyze(e,t={}){let n=Date.now(),r=[],i=await this.findWorkspacePackages(e);if(i.length>0)for(let t of i){let n=await this.fromPackageJson(t,e);r.push(...n)}else{let t=await this.fromPackageJson(e,e);r.push(...t)}let a=await this.fromHandlerExports(e);return r.push(...a),{output:this.formatMarkdown(r,e),data:{entryPoints:r,total:r.length},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:r.length,durationMs:Date.now()-n}}}async fromPackageJson(n,r){let i=[],a=c(r,n).replace(/\\/g,`/`)||`.`;try{let r=s(n,`package.json`);await e(r);let o=JSON.parse(await t(r,`utf-8`)),c=a===`.`?``:`${a}/`;if(o.main&&i.push({name:o.name?`${o.name}:main`:`main`,type:`main`,filePath:`${c}${o.main}`}),o.bin){let e=typeof o.bin==`string`?{[o.name??`cli`]:o.bin}:o.bin;for(let[t,n]of Object.entries(e))i.push({name:t,type:`cli`,filePath:`${c}${n}`})}if(o.exports){let e=this.parseExportsField(o.exports,o.name??a,c);i.push(...e)}o.scripts?.start&&i.push({name:o.name?`${o.name}:start`:`start`,type:`server`,filePath:o.scripts.start,trigger:`npm start`})}catch{}return i}parseExportsField(e,t,n){let r=[];if(typeof e==`string`)return r.push({name:t,type:`main`,filePath:`${n}${e}`}),r;if(typeof e!=`object`||!e)return r;for(let[i,a]of Object.entries(e)){if(!i.startsWith(`.`))continue;let e=i===`.`?t:`${t}/${i.slice(2)}`,o=this.resolveExportValue(a);o&&r.push({name:e,type:`main`,filePath:`${n}${o}`})}return r}resolveExportValue(e){if(typeof e==`string`)return e;if(typeof e!=`object`||!e)return;let t=e;for(let e of[`import`,`default`,`require`])if(typeof t[e]==`string`)return t[e];for(let e of Object.values(t))if(typeof e==`string`)return e}async findWorkspacePackages(n){let r=[];try{let i=s(n,`pnpm-workspace.yaml`);await e(i);let a=await t(i,`utf-8`),o=this.parsePnpmWorkspaceYaml(a);for(let e of o){let t=await this.expandWorkspaceGlob(n,e);r.push(...t)}if(r.length>0)return r}catch{}try{let e=s(n,`package.json`),i=JSON.parse(await t(e,`utf-8`)),a=Array.isArray(i.workspaces)?i.workspaces:i.workspaces?.packages??[];for(let e of a){let t=await this.expandWorkspaceGlob(n,e);r.push(...t)}}catch{}return r}parsePnpmWorkspaceYaml(e){let t=[],n=!1;for(let r of e.split(`
18
18
  `)){let e=r.trim();if(e===`packages:`){n=!0;continue}if(n){if(e.startsWith(`- `))t.push(e.slice(2).replace(/^['"]|['"]$/g,``));else if(e&&!e.startsWith(`#`))break}}return t}async expandWorkspaceGlob(t,r){let i=[],a=r.indexOf(`*`);if(a===-1){let n=l(t,r);try{await e(s(n,`package.json`)),i.push(n)}catch{}return i}let o=l(t,r.slice(0,a));try{let t=await n(o,{withFileTypes:!0});for(let n of t){if(!n.isDirectory()||O.has(n.name))continue;let t=s(o,n.name);try{await e(s(t,`package.json`)),i.push(t)}catch{}}}catch{}return i}async fromHandlerExports(e){let n=[],r=await this.collectFiles(e),i=!1;try{await d.ensure(),i=!0}catch{}for(let a of r)try{let r=await t(a,`utf-8`),s=c(e,a).replace(/\\/g,`/`),l=o(a);if(!s.split(`/`).some(e=>ce.has(e))){let e=!1;if(i&&u.has(l)){let t=await f(r,l,s);for(let i of t)i.trigger||(i.type===`cdk-construct`?i.trigger=`CDK Construct`:i.trigger=this.detectTrigger(r)),n.push(i),e=!0}if(!e)for(let t of le){let i=r.match(t);if(i){let t=i[1]??this.inferNameFromFile(s);(t===`handler`||t===`main`)&&(t=this.deriveContextualName(s)??t);let a=/@SpringBootApplication/.test(r)?`HTTP Server`:this.detectTrigger(r);n.push({name:t,type:this.inferEntryType(i[1]??t,s),filePath:s,trigger:a}),e=!0;break}}if(!e){let e=r.match(ue);e&&n.push({name:e[1],type:`cdk-construct`,filePath:s,trigger:`CDK Construct`})}}this.isTestFile(s,r)&&n.push({name:this.inferNameFromFile(s),type:`test`,filePath:s,trigger:`Test Suite`})}catch{}return n}isTestFile(e,t){return/\.(test|spec)\.[jt]sx?$/.test(e)?de.some(e=>e.test(t)):!1}inferNameFromFile(e){return(e.split(/[/\\]/).pop()??`default`).replace(/\.\w+$/,``)}deriveContextualName(e){let t=e.split(`/`).filter(e=>e!==`src`&&e!==`lib`);if(t.pop(),t.length===0)return;let n=t.filter(e=>![`services`,`functions`,`lambdas`,`handlers`,`packages`,`apps`].includes(e));if(n.length===0)return;let r=n.slice(-2);return r.length===2&&r[1].startsWith(r[0])?r[1]:r.join(`-`)}inferEntryType(e,t){return e===`handler`||e===`main`||t.includes(`handler`)||/functions[/]/.test(t)||e.endsWith(`Handler`)?`lambda-handler`:(t.endsWith(`.py`)||t.endsWith(`.go`)||t.endsWith(`.java`),`main`)}detectTrigger(e){for(let t of fe)if(t.regex.test(e))return t.trigger}async collectFiles(e){let t=[],i=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.java`,`.py`,`.go`,`.cs`,`.kt`,`.rb`,`.rs`,`.php`,`.swift`]),a=async(e,c)=>{if(c>10||!(await r(e).catch(()=>null))?.isDirectory())return;let l=await n(e,{withFileTypes:!0});for(let n of l){if(O.has(n.name)||n.name.startsWith(`.`))continue;let r=s(e,n.name);n.isDirectory()?await a(r,c+1):i.has(o(n.name))&&t.push(r)}};return await a(e,0),t}formatMarkdown(e,t){let n=[];if(n.push(`## Entry Points: ${t}\n`),n.push(`**${e.length} entry ${e.length===1?`point`:`points`}** found\n`),e.length===0)return n.push(`No entry points detected.`),n.join(`
19
19
  `);let r=new Map;for(let t of e){let e=r.get(t.type)??[];e.push(t),r.set(t.type,e)}let i=[`lambda-handler`,`main`,`server`,`cli`,`bin`,`cdk-construct`,`test`],a=[...r.entries()].sort((e,t)=>i.indexOf(e[0])-i.indexOf(t[0]));n.push(`| Name | Type | File | Trigger |`),n.push(`|------|------|------|---------|`);for(let[,e]of a)for(let t of e)n.push(`| ${t.name} | ${t.type} | ${t.filePath} | ${t.trigger??`—`} |`);return n.join(`
@@ -43,7 +43,7 @@ import{access as e,readFile as t,readdir as n,stat as r}from"node:fs/promises";i
43
43
  - Testing patterns
44
44
  `),n.push('Store each as a separate `aikit_knowledge` call with `action: "remember"` and a descriptive title.\n'),n.join(`
45
45
  `)}buildCrossReferences(e){let t=[],n=new Set;if(e.symbols?.output)for(let t of e.symbols.output.matchAll(/`(\w+)`\s*\((?:function|class|interface|type|const|enum)\)/g))n.add(t[1]);let r=new Set;if(e.entryPoints?.output)for(let t of e.entryPoints.output.matchAll(/`(\w+)`.*?(?:handler|main|server|cli|test|construct)/gi))r.add(t[1]);for(let e of r)n.has(e)&&t.push(`Entry point \`${e}\` is also listed in symbols — check its call graph for downstream dependencies`);if(e.patterns?.output&&n.size>0){for(let r of[`Singleton`,`Factory`,`Observer`,`Builder`,`Strategy`,`Middleware`,`Repository`])if(e.patterns.output.includes(r)){let i=e.patterns.output.split(r)[1]?.slice(0,200)??``;for(let e of n)if(i.includes(e)){t.push(`Symbol \`${e}\` uses the ${r} pattern`);break}}}return t}};const M=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`__pycache__`,`.venv`,`target`,`bin`,`obj`,`.gradle`,`venv`,`env`]),N=[{dirs:[`adapters`,`ports`],pattern:`Hexagonal Architecture`,description:`Ports & adapters (hexagonal) separation`},{dirs:[`domain`,`infrastructure`,`application`],pattern:`Clean Architecture`,description:`Layered with domain/infrastructure separation`},{dirs:[`controllers`,`models`],pattern:`MVC Pattern`,description:`Model-View-Controller structure`},{dirs:[`repositories`],pattern:`Repository Pattern`,description:`Data access abstraction via repositories`},{dirs:[`factories`],pattern:`Factory Pattern`,description:`Object creation via factories`},{dirs:[`handlers`],pattern:`Handler Pattern`,description:`Event/request handler separation`},{dirs:[`middleware`],pattern:`Middleware Pattern`,description:`Request pipeline middleware`},{dirs:[`hooks`],pattern:`React Hooks`,description:`Custom React hooks for logic reuse`},{dirs:[`components`],pattern:`Component Architecture`,description:`UI component-based structure`},{dirs:[`stacks`,`constructs`],pattern:`CDK IaC`,description:`AWS CDK infrastructure as code`},{dirs:[`lambdas`,`functions`],pattern:`Serverless`,description:`Serverless function architecture`}];function P(e){if(e.length<=3)return e;let t=new Map;for(let n of e){let e=n.split(`/`),r=e.length>1?e.slice(0,-1).join(`/`):`.`,i=t.get(r);i?i.push(n):t.set(r,[n])}let n=[];for(let[e,r]of t)r.length>=3?n.push(`${e}/ (${r.length} files)`):n.push(...r);return n.slice(0,5)}const F=[{regex:/container\.register|@injectable|@inject/i,pattern:`Dependency Injection`,description:`IoC container or DI decorators`},{regex:/\.pipe\(|Observable|BehaviorSubject/i,pattern:`Reactive (RxJS)`,description:`Reactive programming with observables`,lang:`js`},{regex:/createContext|useContext/i,pattern:`React Context`,description:`React Context API for state sharing`,lang:`js`},{regex:/createSlice|configureStore/i,pattern:`Redux Toolkit`,description:`Redux state management`,lang:`js`},{regex:/defineStore|usePinia/i,pattern:`Pinia Store`,description:`Vue Pinia state management`,lang:`js`},{regex:/\.(test|spec)\.[jt]sx?|describe\s*\(|\bit\s*\([\s'"]/i,pattern:`Test Suite`,description:`Unit/integration test files`},{regex:/@SpringBootApplication|@EnableAutoConfiguration/,pattern:`Spring Boot`,description:`Spring Boot application framework`,lang:`java`,definitive:!0},{regex:/@Autowired|@Component|@Service|@Repository|@Controller/,pattern:`Spring DI`,description:`Spring dependency injection`,lang:`java`},{regex:/@RestController|@RequestMapping|@GetMapping|@PostMapping/,pattern:`Spring REST`,description:`Spring REST API controllers`,lang:`java`},{regex:/app\s*=\s*Flask\s*\(|@app\.route/,pattern:`Flask`,description:`Flask web framework`,lang:`python`},{regex:/app\s*=\s*FastAPI\s*\(|@app\.get|@app\.post/,pattern:`FastAPI`,description:`FastAPI web framework`,lang:`python`},{regex:/func\s+main\s*\(\s*\)|http\.ListenAndServe/,pattern:`Go Application`,description:`Go main application`,lang:`go`},{regex:/export\s+(?:async\s+)?function\s+create[A-Z]\w+/,pattern:`Factory`,description:`Object creation via create*() functions`,lang:`js`},{regex:/(?:export\s+)?function\s+wrap[A-Z]\w+/,pattern:`Wrapper/Decorator`,description:`Higher-order function wrapping`,lang:`js`},{regex:/(?:const|let)\s+\w+\s*=\s*new\s+(?:Map|WeakMap)\s*[<(]/,pattern:`Singleton Cache`,description:`Module-level cache with lazy initialization`,lang:`js`},{regex:/Record<string,\s*(?:\w+)?Handler>|\.(?:get|post|put|delete)\s*\(/,pattern:`Router/Dispatcher`,description:`Request routing/dispatch table`,lang:`js`},{regex:/export\s+(?:default\s+)?class\s+\w+\s+extends\s+(?:Construct|Stack|NestedStack|Stage)/,pattern:`CDK Construct`,description:`AWS CDK infrastructure construct`,lang:`js`,definitive:!0}];var I=class{name=`patterns`;async analyze(e,t={}){let n=Date.now(),r=await this.collectDirectories(e),i=this.detectDirectoryPatterns(r,e),a=await this.collectCodeFiles(e),o=await this.detectCodePatterns(a,e),s=[...i,...o],c=await this.detectConfigPatterns(e),l=c.find(e=>e.pattern===`Maven`||e.pattern===`Gradle`||e.pattern===`Gradle (Kotlin DSL)`||e.pattern===`Node.js Project`||e.pattern===`Go Module`||e.pattern===`Rust (Cargo)`),u=new Set([`Ruby (Bundler)`,`PHP (Composer)`,`Swift Package`,`SBT`]);for(let e of c)l&&u.has(e.pattern)||s.push(e);return{output:this.formatMarkdown(s,e),data:{patterns:s,total:s.length},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:a.length,durationMs:Date.now()-n}}}async collectDirectories(e){let t=[],i=async(e,a)=>{if(a>5||!(await r(e).catch(()=>null))?.isDirectory())return;let o=await n(e,{withFileTypes:!0});for(let n of o){if(!n.isDirectory()||M.has(n.name)||n.name.startsWith(`.`))continue;let r=s(e,n.name);t.push(n.name),await i(r,a+1)}};return await i(e,0),t}async collectCodeFiles(e){let t=[],r=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.java`,`.py`,`.go`,`.cs`,`.kt`,`.scala`,`.rb`,`.rs`,`.php`,`.swift`]),i=async e=>{let a=await n(e,{withFileTypes:!0});for(let n of a){if(M.has(n.name)||n.name.startsWith(`.`))continue;let a=s(e,n.name);n.isDirectory()?await i(a):r.has(o(n.name))&&t.push(a)}};return await i(e),t}detectDirectoryPatterns(e,t){let n=new Set(e.map(e=>e.toLowerCase())),r=[];for(let e of N){let t=e.dirs.filter(e=>n.has(e));t.length!==0&&(e.dirs.length>1&&t.length<2||r.push({pattern:e.pattern,description:e.description,locations:t.map(e=>`${e}/`),confidence:t.length===e.dirs.length?`high`:`medium`}))}return r}async detectCodePatterns(e,n){let r=[],i={},a=!1;try{await d.ensure(),a=!0}catch{}let s=e.filter(e=>/Application\.\w+$|Main\.\w+$|app\.\w+$|main\.\w+$/i.test(e)||/Controller|Service|Handler|Router/i.test(e)),l=e.filter(e=>!s.includes(e)),f=[...s.slice(0,50),...l.slice(0,150)];for(let e of f)try{let r=await t(e,`utf-8`),s=o(e).toLowerCase(),l=c(n,e).replace(/\\/g,`/`);if(/analyzers\/src\//.test(l))continue;if(a&&u.has(s)){let e=await p(r,s,l);for(let t of e){i[t.pattern]||(i[t.pattern]=new Set);for(let e of t.locations)i[t.pattern].add(e)}}let d=s===`.java`||s===`.kt`||s===`.scala`?`java`:s===`.py`?`python`:s===`.go`?`go`:`js`;for(let e of F)e.lang&&e.lang!==d||e.regex.test(r)&&(i[e.pattern]||(i[e.pattern]=new Set),i[e.pattern].add(l))}catch{}for(let e of F){let t=i[e.pattern];if(t&&t.size>0){let n=P([...t]);r.push({pattern:e.pattern,description:e.description,locations:n,confidence:e.definitive||t.size>=3?`high`:t.size>=2?`medium`:`low`})}}let m=new Set(F.map(e=>e.pattern));for(let[e,t]of Object.entries(i)){if(m.has(e)||t.size===0)continue;let n=P([...t]);r.push({pattern:e,description:`Detected via AST analysis`,locations:n,confidence:t.size>=3?`high`:t.size>=2?`medium`:`low`})}return r}async detectConfigPatterns(t){let n=[];for(let r of[{file:`Dockerfile`,pattern:`Docker`,description:`Containerized application`},{file:`docker-compose.yml`,pattern:`Docker Compose`,description:`Container orchestration`},{file:`cdk.json`,pattern:`AWS CDK`,description:`AWS CDK infrastructure as code`},{file:`terraform.tf`,pattern:`Terraform`,description:`Terraform IaC`},{file:`main.tf`,pattern:`Terraform`,description:`Terraform IaC`}])try{await e(s(t,r.file)),n.push({pattern:r.pattern,description:r.description,locations:[r.file],confidence:`high`})}catch{}return n}formatMarkdown(e,t){let n=[];n.push(`## Patterns Detected: ${t}\n`),n.push(`**${e.length} patterns** found\n`);let r={high:[],medium:[],low:[]};for(let t of e)r[t.confidence].push(t);for(let[e,t]of Object.entries(r))if(t.length!==0){n.push(`### ${e.charAt(0).toUpperCase()+e.slice(1)} Confidence\n`);for(let e of t)n.push(`- **${e.pattern}**: ${e.description}`),n.push(` Locations: ${e.locations.slice(0,5).join(`, `)}`);n.push(``)}return n.join(`
46
- `)}};const L=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`.venv`,`venv`,`__pycache__`,`target`,`vendor`,`bin`,`obj`]),R=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.java`,`.py`,`.go`,`.cs`,`.kt`,`.scala`,`.rs`,`.rb`,`.php`,`.swift`]);async function z(e){let t=Date.now(),n=ve(e);if(n.length===0)return null;let r=n.slice(0,800),i=new Map,a=new Map;for(let t of r){let n=c(e,t).replace(/\\/g,`/`),r=v(t,`utf-8`),s=o(t).toLowerCase(),l=B(r,s);i.set(n,l);let u=me(r,s);a.set(n,u)}let l=ge(r,e),u=ye(e),d=new Map;for(let[t,n]of i){if(G(t))continue;let r=he(v(s(e,t),`utf-8`),o(t));for(let e of n){if(!e.isRelative){let n=be(e.source,u,l);if(!n)continue;let i=n;if(G(i)||t===i)continue;let a;if(a=e.symbols.length>0?e.symbols.filter(e=>RegExp(`\\b${H(e)}\\b`).test(r)):[`*`],a.length===0)continue;let o=`${t}|${i}`,s=d.get(o);if(s)for(let e of a)s.add(e);else d.set(o,new Set(a));continue}let n=_e(t,e.source,l,o(t));if(n.length===0)continue;let i=n[0];if(G(i)||t===i)continue;let a;if(a=e.symbols.length>0?e.symbols.filter(e=>RegExp(`\\b${H(e)}\\b`).test(r)):[`*`],a.length===0)continue;let s=`${t}|${i}`,c=d.get(s);if(c)for(let e of a)c.add(e);else d.set(s,new Set(a))}}let f=[];for(let[e,t]of d){let[n,r]=e.split(`|`);f.push({from:n,to:r,symbols:[...t].sort().slice(0,10)})}return f.sort((e,t)=>t.symbols.length-e.symbols.length),{edges:f,fileCount:r.length,edgeCount:f.length,durationMs:Date.now()-t}}function B(e,t){let n=[];switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{let t=/import\s+(?:type\s+)?\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/g,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`,`).map(e=>{let t=e.trim().split(/\s+as\s+/);return(t[t.length-1]||``).trim()}).filter(Boolean);n.push({source:r[2],symbols:e,isRelative:r[2].startsWith(`.`)})}let i=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g;for(;(r=i.exec(e))!==null;)r[1]!==`type`&&n.push({source:r[2],symbols:[r[1]],isRelative:r[2].startsWith(`.`)});let a=/(?:const|let|var)\s+\{([^}]+)\}\s*=\s*require\(\s*['"]([^'"]+)['"]\s*\)/g;for(;(r=a.exec(e))!==null;){let e=r[1].split(`,`).map(e=>e.trim().split(`:`)[0].trim()).filter(Boolean);n.push({source:r[2],symbols:e,isRelative:r[2].startsWith(`.`)})}break}case`.java`:case`.kt`:case`.scala`:{let t=/^import\s+(?:static\s+)?([\w.]+)\s*;/gm,r;for(;(r=t.exec(e))!==null;){let t=r[1].split(`.`),i=t[t.length-1];i===`*`?n.push({source:r[1],symbols:[],isRelative:V(r[1],e)}):n.push({source:r[1],symbols:[i],isRelative:V(r[1],e)})}break}case`.py`:{let t=/^from\s+([\w.]+)\s+import\s+(.+)$/gm,r;for(;(r=t.exec(e))!==null;){let e=r[2].split(`,`).map(e=>{let t=e.trim().split(/\s+as\s+/);return(t[t.length-1]||``).trim()}).filter(e=>e&&e!==`(`);n.push({source:r[1],symbols:e,isRelative:r[1].startsWith(`.`)})}let i=/^import\s+([\w.]+)(?:\s+as\s+(\w+))?\s*$/gm;for(;(r=i.exec(e))!==null;){let e=r[1].split(`.`),t=r[2]||e[e.length-1];n.push({source:r[1],symbols:[t],isRelative:r[1].startsWith(`.`)})}break}case`.go`:{let t=/import\s+(?:(\w+)\s+)?[""]([^""]+)[""]/g,r;for(;(r=t.exec(e))!==null;){let e=r[2].split(`/`),t=r[1]||e[e.length-1];n.push({source:r[2],symbols:[t],isRelative:!r[2].includes(`.`)&&!r[2].startsWith(`github.com`)})}let i=/import\s*\(([\s\S]*?)\)/g;for(;(r=i.exec(e))!==null;){let e=r[1],t=/(?:(\w+)\s+)?[""]([^""]+)[""]/g,i;for(;(i=t.exec(e))!==null;){let e=i[2].split(`/`),t=i[1]||e[e.length-1];n.push({source:i[2],symbols:[t],isRelative:!i[2].includes(`.`)&&!i[2].startsWith(`github.com`)})}}break}case`.cs`:{let t=/^using\s+(?:static\s+)?([\w.]+)\s*;/gm,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`.`);n.push({source:r[1],symbols:[e[e.length-1]],isRelative:!0})}break}case`.rs`:{let t=/^use\s+([\w:]+(?:::\w+)*)/gm,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`::`),t=e[e.length-1];n.push({source:r[1],symbols:t===`*`?[]:[t],isRelative:r[1].startsWith(`crate`)||r[1].startsWith(`super`)})}break}}return n}function me(e,t){let n=new Set;switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{let t=/export\s+(?:default\s+)?(?:abstract\s+)?(?:async\s+)?(?:function|class|const|let|var|type|interface|enum)\s+(\w+)/g,r;for(;(r=t.exec(e))!==null;)n.add(r[1]);break}case`.java`:case`.kt`:case`.scala`:{let t=/(?:public|protected)\s+(?:static\s+)?(?:abstract\s+)?(?:final\s+)?(?:class|interface|enum|record|@interface)\s+(\w+)/g,r;for(;(r=t.exec(e))!==null;)n.add(r[1]);let i=/(?:public|protected)\s+(?:static\s+)?(?:abstract\s+)?(?:final\s+)?\w+(?:<[^>]+>)?\s+(\w+)\s*\(/g;for(;(r=i.exec(e))!==null;)[`if`,`for`,`while`,`switch`,`catch`,`return`,`class`,`interface`,`enum`,`new`].includes(r[1])||n.add(r[1]);break}case`.py`:{let t=/^(?:def|class)\s+([A-Z_]\w*)/gm,r;for(;(r=t.exec(e))!==null;)r[1].startsWith(`_`)||n.add(r[1]);break}case`.go`:{let t=/^(?:func|type|var|const)\s+(\(?[A-Z]\w*)/gm,r;for(;(r=t.exec(e))!==null;)n.add(r[1].replace(`(`,``));break}}return n}function V(e,t){let n=t.match(/^package\s+([\w.]+)\s*;/m);if(!n)return!1;let r=n[1].split(`.`),i=e.split(`.`);return r.length>=2&&i.length>=2&&r[0]===i[0]&&r[1]===i[1]}function H(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function he(e,t){switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:return e.replace(/^import\s+.+$/gm,``).replace(/^const\s+.+=\s*require\(.+$/gm,``);case`.java`:case`.kt`:case`.scala`:return e.replace(/^import\s+.+;$/gm,``);case`.py`:return e.replace(/^(?:from\s+.+import\s+.+|import\s+.+)$/gm,``);case`.go`:return e.replace(/^import\s+.+$/gm,``).replace(/import\s*\([\s\S]*?\)/g,``);case`.cs`:return e.replace(/^using\s+.+;$/gm,``);case`.rs`:return e.replace(/^use\s+.+;$/gm,``);default:return e}}function ge(e,t){let n=new Map;for(let r of e){let e=c(t,r).replace(/\\/g,`/`),i=e.replace(/\.[^.]+$/,``);U(n,i,e);let a=i.split(`/`),o=a[a.length-1];U(n,o,e)}return n}function U(e,t,n){let r=e.get(t);r?r.push(n):e.set(t,[n])}function _e(e,t,n,r){switch(r){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{if(!t.startsWith(`.`))return[];let r=e.split(`/`).slice(0,-1).join(`/`),i=W(r?`${r}/${t}`:t);for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`,`/index.ts`,`/index.js`]){let t=n.get(i+e)||n.get((i+e).replace(/\.[^.]+$/,``));if(t&&t.length>0)return[t[0]]}let a=n.get(i.replace(/\.[^.]+$/,``));return a?[a[0]]:[]}case`.java`:case`.kt`:case`.scala`:{let e=t.split(`.`),r=e[e.length-1];if(r===`*`)return[];let i=n.get(r);return i?[i[0]]:[]}case`.py`:{if(t.startsWith(`.`)){let r=e.split(`/`).slice(0,-1).join(`/`),i=t.replace(/^\.+/,``).replace(/\./g,`/`),a=r?`${r}/${i}`:i,o=a.split(`/`),s=n.get(a)||n.get(o[o.length-1]);if(s)return[s[0]]}let r=t.replace(/\./g,`/`),i=n.get(r);return i?[i[0]]:[]}case`.go`:{let e=t.split(`/`),r=e[e.length-1],i=n.get(r);return i?[i[0]]:[]}default:return[]}}function W(e){let t=e.split(`/`),n=[];for(let e of t)if(!(e===`.`||e===``)){if(e===`..`){n.pop();continue}n.push(e)}return n.join(`/`)}function G(e){return e.split(`/`).some(e=>e===`test`||e===`tests`||e===`__tests__`||e===`spec`||e===`test_`||e===`__test__`)||/\.(test|spec)\.[^.]+$/.test(e)}function ve(e){let t=[],n=(r,i)=>{if(!(i>10))try{for(let a of y(r,{withFileTypes:!0})){if(L.has(a.name)||a.name.startsWith(`.`))continue;let l=s(r,a.name);if(a.isDirectory())n(l,i+1);else{let n=o(a.name).toLowerCase();if(!R.has(n)||a.name.endsWith(`.d.ts`)||/\.(test|spec)\.[^.]+$/.test(a.name)||c(e,r).replace(/\\/g,`/`).split(`/`).some(e=>e===`test`||e===`tests`||e===`__tests__`||e===`spec`))continue;t.push(l)}}}catch{}};return n(e,0),t}function ye(e){let t=new Map;for(let n of[`packages`,`apps`,`libs`,`services`,`functions`]){let r=s(e,n),i;try{i=y(r,{withFileTypes:!0})}catch{continue}for(let e of i){if(!e.isDirectory())continue;let i=s(r,e.name,`package.json`);try{let r=JSON.parse(v(i,`utf-8`));if(r.name){let i=r.exports?.[`.`]?.import??r.exports?.[`.`]?.default??r.main??`src/index.ts`,a=s(n,e.name,i).replace(/\\/g,`/`);t.set(r.name,a)}}catch{}}}return t}function be(e,t,n){if(t.has(e))return t.get(e)??null;let r=e.startsWith(`@`)?e.split(`/`):[];if(r.length>=2){let e=`${r[0]}/${r[1]}`,i=t.get(e);if(i){if(r.length===2)return i;let e=i.replace(/\/src\/index\.\w+$/,``).replace(/\/dist\/.*$/,``),t=r.slice(2).join(`/`),a=[`${e}/src/${t}`,`${e}/${t}`];for(let e of a){let t=e.replace(/\.\w+$/,``),r=n.get(t);if(r?.[0])return r[0]}return i}}return null}const K=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.java`,`.py`,`.go`,`.cs`,`.rb`,`.kt`,`.scala`,`.rs`,`.php`,`.swift`]),xe=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`__pycache__`,`.venv`,`target`,`bin`,`obj`,`.gradle`,`venv`,`env`]),q={exported:[{pattern:/^export\s+(?:async\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^export\s+(?:default\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^export\s+interface\s+(\w+)/gm,kind:`interface`},{pattern:/^export\s+type\s+(\w+)/gm,kind:`type`},{pattern:/^export\s+(?:const|let)\s+(\w+)/gm,kind:`const`},{pattern:/^export\s+enum\s+(\w+)/gm,kind:`enum`}],local:[{pattern:/^(?:async\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^class\s+(\w+)/gm,kind:`class`},{pattern:/^interface\s+(\w+)/gm,kind:`interface`},{pattern:/^type\s+(\w+)/gm,kind:`type`},{pattern:/^(?:const|let)\s+(\w+)\s*=/gm,kind:`const`},{pattern:/^enum\s+(\w+)/gm,kind:`enum`}]},Se={exported:[{pattern:/^[ \t]*public\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*public\s+(?:static\s+)?interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*public\s+(?:static\s+)?(?:synchronized\s+)?(?:final\s+)?(?:abstract\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])*)\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:synchronized\s+)?(?:final\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])*)\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:final\s+)?(?:\w+(?:<[^>]*>)?)\s+(\w+)\s*[;=]/gm,kind:`variable`}],skipIndentFilter:!0},Ce={exported:[{pattern:/^def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^async\s+def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^class\s+(\w+)/gm,kind:`class`}],local:[{pattern:/^[ \t]+def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^[ \t]+async\s+def\s+(\w+)\s*\(/gm,kind:`function`}],skipIndentFilter:!0},we={exported:[{pattern:/^func\s+([A-Z]\w*)\s*\(/gm,kind:`function`},{pattern:/^func\s+\([^)]+\)\s+([A-Z]\w*)\s*\(/gm,kind:`function`},{pattern:/^type\s+([A-Z]\w*)\s+struct\b/gm,kind:`class`},{pattern:/^type\s+([A-Z]\w*)\s+interface\b/gm,kind:`interface`},{pattern:/^type\s+([A-Z]\w*)\s+/gm,kind:`type`}],local:[{pattern:/^func\s+([a-z]\w*)\s*\(/gm,kind:`function`},{pattern:/^func\s+\([^)]+\)\s+([a-z]\w*)\s*\(/gm,kind:`function`},{pattern:/^type\s+([a-z]\w*)\s+struct\b/gm,kind:`class`},{pattern:/^type\s+([a-z]\w*)\s+/gm,kind:`type`}],skipIndentFilter:!0},Te={exported:[{pattern:/^[ \t]*public\s+(?:static\s+)?(?:partial\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*public\s+(?:static\s+)?interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*public\s+(?:static\s+)?(?:virtual\s+)?(?:override\s+)?(?:async\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])?)\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected|internal)\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:private|protected|internal)\s+(?:static\s+)?(?:async\s+)?(?:\w+(?:<[^>]*>)?)\s+(\w+)\s*\(/gm,kind:`function`}],skipIndentFilter:!0},Ee={exported:[{pattern:/^(?:open\s+|data\s+|sealed\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^(?:fun|suspend\s+fun)\s+(\w+)\s*[(<]/gm,kind:`function`},{pattern:/^interface\s+(\w+)/gm,kind:`interface`},{pattern:/^object\s+(\w+)/gm,kind:`class`},{pattern:/^enum\s+class\s+(\w+)/gm,kind:`enum`}],local:[{pattern:/^[ \t]+(?:private|internal)\s+(?:fun|suspend\s+fun)\s+(\w+)/gm,kind:`function`},{pattern:/^[ \t]+(?:private|internal)\s+(?:val|var)\s+(\w+)/gm,kind:`variable`}],skipIndentFilter:!0},De={exported:[{pattern:/^class\s+(\w+)/gm,kind:`class`},{pattern:/^module\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]+def\s+self\.(\w+)/gm,kind:`function`}],local:[{pattern:/^[ \t]+def\s+(\w+)/gm,kind:`function`}],skipIndentFilter:!0},Oe={exported:[{pattern:/^pub\s+(?:async\s+)?fn\s+(\w+)/gm,kind:`function`},{pattern:/^pub\s+struct\s+(\w+)/gm,kind:`class`},{pattern:/^pub\s+trait\s+(\w+)/gm,kind:`interface`},{pattern:/^pub\s+enum\s+(\w+)/gm,kind:`enum`},{pattern:/^pub\s+type\s+(\w+)/gm,kind:`type`}],local:[{pattern:/^(?:async\s+)?fn\s+(\w+)/gm,kind:`function`},{pattern:/^struct\s+(\w+)/gm,kind:`class`},{pattern:/^trait\s+(\w+)/gm,kind:`interface`},{pattern:/^enum\s+(\w+)/gm,kind:`enum`}],skipIndentFilter:!0},ke={exported:[{pattern:/^[ \t]*(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^function\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?function\s+(\w+)/gm,kind:`function`}],skipIndentFilter:!0},Ae={exported:[{pattern:/^[ \t]*(?:open|public)\s+class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:open|public)\s+struct\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:open|public)\s+protocol\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*(?:open|public)\s+enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*(?:open|public)\s+func\s+(\w+)/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|fileprivate|internal)\s+func\s+(\w+)/gm,kind:`function`},{pattern:/^[ \t]*(?:private|fileprivate|internal)\s+class\s+(\w+)/gm,kind:`class`}],skipIndentFilter:!0},je={exported:[{pattern:/^[ \t]*(?:case\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*object\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*trait\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*def\s+(\w+)/gm,kind:`function`}],local:[],skipIndentFilter:!0};function Me(e){switch(e){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:return q;case`.java`:return Se;case`.py`:return Ce;case`.go`:return we;case`.cs`:return Te;case`.kt`:return Ee;case`.rb`:return De;case`.rs`:return Oe;case`.php`:return ke;case`.swift`:return Ae;case`.scala`:return je;default:return q}}function J(e,t){let n=``,r=0,i=!1;for(let a=t;a<Math.min(t+5,e.length);a++){let t=e[a].trim();n+=(n?` `:``)+t;for(let e of t)e===`(`&&(r++,i=!0),e===`)`&&r--;if(i&&r<=0)return n.replace(/\s*\{.*$/,``).replace(/\s*:\s*$/,``).trim()}return n.trim()||void 0}function Y(e,t){let n=J(e,t);if(!n)return;let r=n.match(/\)\s*:\s*([^{=]+)/);if(r)return r[1].trim().slice(0,200)||void 0;let i=n.match(/=>\s*([^{]+)/);if(i)return i[1].trim().slice(0,200)||void 0}function X(e,t){for(let n=t-1;n>=Math.max(0,t-10);n--){let t=e[n].trim();if(t!==``){if(t.endsWith(`*/`)){for(let t=n;t>=Math.max(0,n-20);t--)if(e[t].trim().startsWith(`/**`)||e[t].trim().startsWith(`/*`)){for(let r=t;r<=n;r++){let t=e[r].replace(/^\s*\/\*\*?\s*/,``).replace(/\s*\*\/\s*$/,``).replace(/^\s*\*\s?/,``).trim();if(t.length>0&&!t.startsWith(`@`))return t.slice(0,200)}return}}if(t.startsWith(`//`))return t.replace(/^\/\/\s*/,``).slice(0,200)||void 0;break}}}function Z(e,t){let n=``,r=0,i=!1;for(let a=t;a<Math.min(t+30,e.length);a++){let t=e[a];n+=` ${t.trim()}`;for(let e of t)e===`{`&&(r++,i=!0),e===`}`&&r--;if(i&&r<=0){let e=n.match(/\{([\s\S]*)\}/);if(e){let t=`{ ${e[1].replace(/\n\s*/g,` `).replace(/\s+/g,` `).trim()} }`;return t.length>500?`${t.slice(0,500)}…`:t}return}}}var Ne=class{name=`symbols`;async analyze(e,n={}){let{format:r=`markdown`,filter:i}=n,s=Date.now(),l=await this.collectFiles(e),f=l.length===1&&l[0]===e?a(e):e,p=[],h=[],_=!1;try{await d.ensure(),_=!0}catch{}for(let e of l){let n=await t(e,`utf-8`),r=c(f,e).replace(/\\/g,`/`),i=o(e);if(_&&u.has(i)){let e=await g(n,i,r);if(e.length>0){p.push(...e);let t=await m(n,i,r);h.push(...t)}else{let e=this.extractSymbolsRegex(n,r);p.push(...e)}}else{let e=this.extractSymbolsRegex(n,r);p.push(...e)}}if(i){let e=i.toLowerCase();p=p.filter(t=>t.name.toLowerCase().includes(e))}return{output:r===`json`?JSON.stringify(p,null,2):this.formatMarkdown(p,f,h),data:{symbols:p,byKind:this.groupByKind(p),exportedCount:p.filter(e=>e.exported).length,totalCount:p.length,callEdges:h},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:l.length,durationMs:Date.now()-s}}}async collectFiles(e){let t=[],i;try{i=await r(e)}catch{throw Error(`Path does not exist: ${e}`)}if(i.isFile()){if(K.has(o(e)))return[e];throw Error(`Not a recognized source file: ${e}`)}if(!i.isDirectory())throw Error(`Not a file or directory: ${e}`);let a=async e=>{let r=await n(e,{withFileTypes:!0});for(let n of r){if(xe.has(n.name)||n.name.startsWith(`.`))continue;let r=s(e,n.name);n.isDirectory()?await a(r):K.has(o(n.name))&&t.push(r)}};return await a(e),t}extractSymbolsRegex(e,t){let n=[],r=e.split(`
46
+ `)}};const L=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`.venv`,`venv`,`__pycache__`,`target`,`vendor`,`bin`,`obj`]),R=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.java`,`.py`,`.go`,`.cs`,`.kt`,`.scala`,`.rs`,`.rb`,`.php`,`.swift`]);async function z(e){let n=Date.now(),r=G(e);if(r.length===0)return null;r.length>800&&console.warn(`regex-call-graph: file count ${r.length} exceeds cap of 800 — truncating to 800 files`);let i=r.slice(0,800),a=new Map,s=new Map,l=new Map;for(let n=0;n<i.length;n+=16){let r=i.slice(n,n+16),u=await Promise.all(r.map(e=>t(e,`utf-8`).catch(t=>(console.warn(`regex-call-graph: failed to read file`,e,String(t)),``))));for(let t=0;t<r.length;t++){let n=r[t],i=u[t];if(!i)continue;let d=c(e,n).replace(/\\/g,`/`),f=o(n).toLowerCase();l.set(d,i),a.set(d,B(i,f)),s.set(d,me(i,f))}await new Promise(e=>setImmediate(e))}let u=ge(i,e),d=await ye(e),f=new Map;for(let[e,t]of a){if(W(e))continue;let n=l.get(e);if(!n)continue;let r=he(n,o(e));for(let n of t){if(!n.isRelative){let t=be(n.source,d,u);if(!t)continue;let i=t;if(W(i)||e===i)continue;let a;if(a=n.symbols.length>0?n.symbols.filter(e=>RegExp(`\\b${H(e)}\\b`).test(r)):[`*`],a.length===0)continue;let o=`${e}|${i}`,s=f.get(o);if(s)for(let e of a)s.add(e);else f.set(o,new Set(a));continue}let t=_e(e,n.source,u,o(e));if(t.length===0)continue;let i=t[0];if(W(i)||e===i)continue;let a;if(a=n.symbols.length>0?n.symbols.filter(e=>RegExp(`\\b${H(e)}\\b`).test(r)):[`*`],a.length===0)continue;let s=`${e}|${i}`,c=f.get(s);if(c)for(let e of a)c.add(e);else f.set(s,new Set(a))}}let p=[];for(let[e,t]of f){let[n,r]=e.split(`|`);p.push({from:n,to:r,symbols:[...t].sort().slice(0,10)})}return p.sort((e,t)=>t.symbols.length-e.symbols.length),{edges:p,fileCount:i.length,edgeCount:p.length,durationMs:Date.now()-n}}function B(e,t){let n=[];switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{let t=/import\s+(?:type\s+)?\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/g,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`,`).map(e=>{let t=e.trim().split(/\s+as\s+/);return(t[t.length-1]||``).trim()}).filter(Boolean);n.push({source:r[2],symbols:e,isRelative:r[2].startsWith(`.`)})}let i=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g;for(;(r=i.exec(e))!==null;)r[1]!==`type`&&n.push({source:r[2],symbols:[r[1]],isRelative:r[2].startsWith(`.`)});let a=/(?:const|let|var)\s+\{([^}]+)\}\s*=\s*require\(\s*['"]([^'"]+)['"]\s*\)/g;for(;(r=a.exec(e))!==null;){let e=r[1].split(`,`).map(e=>e.trim().split(`:`)[0].trim()).filter(Boolean);n.push({source:r[2],symbols:e,isRelative:r[2].startsWith(`.`)})}break}case`.java`:case`.kt`:case`.scala`:{let t=/^import\s+(?:static\s+)?([\w.]+)\s*;/gm,r;for(;(r=t.exec(e))!==null;){let t=r[1].split(`.`),i=t[t.length-1];i===`*`?n.push({source:r[1],symbols:[],isRelative:V(r[1],e)}):n.push({source:r[1],symbols:[i],isRelative:V(r[1],e)})}break}case`.py`:{let t=/^from\s+([\w.]+)\s+import\s+(.+)$/gm,r;for(;(r=t.exec(e))!==null;){let e=r[2].split(`,`).map(e=>{let t=e.trim().split(/\s+as\s+/);return(t[t.length-1]||``).trim()}).filter(e=>e&&e!==`(`);n.push({source:r[1],symbols:e,isRelative:r[1].startsWith(`.`)})}let i=/^import\s+([\w.]+)(?:\s+as\s+(\w+))?\s*$/gm;for(;(r=i.exec(e))!==null;){let e=r[1].split(`.`),t=r[2]||e[e.length-1];n.push({source:r[1],symbols:[t],isRelative:r[1].startsWith(`.`)})}break}case`.go`:{let t=/import\s+(?:(\w+)\s+)?[""]([^""]+)[""]/g,r;for(;(r=t.exec(e))!==null;){let e=r[2].split(`/`),t=r[1]||e[e.length-1];n.push({source:r[2],symbols:[t],isRelative:!r[2].includes(`.`)&&!r[2].startsWith(`github.com`)})}let i=/import\s*\(([\s\S]*?)\)/g;for(;(r=i.exec(e))!==null;){let e=r[1],t=/(?:(\w+)\s+)?[""]([^""]+)[""]/g,i;for(;(i=t.exec(e))!==null;){let e=i[2].split(`/`),t=i[1]||e[e.length-1];n.push({source:i[2],symbols:[t],isRelative:!i[2].includes(`.`)&&!i[2].startsWith(`github.com`)})}}break}case`.cs`:{let t=/^using\s+(?:static\s+)?([\w.]+)\s*;/gm,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`.`);n.push({source:r[1],symbols:[e[e.length-1]],isRelative:!0})}break}case`.rs`:{let t=/^use\s+([\w:]+(?:::\w+)*)/gm,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`::`),t=e[e.length-1];n.push({source:r[1],symbols:t===`*`?[]:[t],isRelative:r[1].startsWith(`crate`)||r[1].startsWith(`super`)})}break}}return n}function me(e,t){let n=new Set;switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{let t=/export\s+(?:default\s+)?(?:abstract\s+)?(?:async\s+)?(?:function|class|const|let|var|type|interface|enum)\s+(\w+)/g,r;for(;(r=t.exec(e))!==null;)n.add(r[1]);break}case`.java`:case`.kt`:case`.scala`:{let t=/(?:public|protected)\s+(?:static\s+)?(?:abstract\s+)?(?:final\s+)?(?:class|interface|enum|record|@interface)\s+(\w+)/g,r;for(;(r=t.exec(e))!==null;)n.add(r[1]);let i=/(?:public|protected)\s+(?:static\s+)?(?:abstract\s+)?(?:final\s+)?\w+(?:<[^>]+>)?\s+(\w+)\s*\(/g;for(;(r=i.exec(e))!==null;)[`if`,`for`,`while`,`switch`,`catch`,`return`,`class`,`interface`,`enum`,`new`].includes(r[1])||n.add(r[1]);break}case`.py`:{let t=/^(?:def|class)\s+([A-Z_]\w*)/gm,r;for(;(r=t.exec(e))!==null;)r[1].startsWith(`_`)||n.add(r[1]);break}case`.go`:{let t=/^(?:func|type|var|const)\s+(\(?[A-Z]\w*)/gm,r;for(;(r=t.exec(e))!==null;)n.add(r[1].replace(`(`,``));break}}return n}function V(e,t){let n=t.match(/^package\s+([\w.]+)\s*;/m);if(!n)return!1;let r=n[1].split(`.`),i=e.split(`.`);return r.length>=2&&i.length>=2&&r[0]===i[0]&&r[1]===i[1]}function H(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function he(e,t){switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:return e.replace(/^import\s+.+$/gm,``).replace(/^const\s+.+=\s*require\(.+$/gm,``);case`.java`:case`.kt`:case`.scala`:return e.replace(/^import\s+.+;$/gm,``);case`.py`:return e.replace(/^(?:from\s+.+import\s+.+|import\s+.+)$/gm,``);case`.go`:return e.replace(/^import\s+.+$/gm,``).replace(/import\s*\([\s\S]*?\)/g,``);case`.cs`:return e.replace(/^using\s+.+;$/gm,``);case`.rs`:return e.replace(/^use\s+.+;$/gm,``);default:return e}}function ge(e,t){let n=new Map;for(let r of e){let e=c(t,r).replace(/\\/g,`/`),i=e.replace(/\.[^.]+$/,``);U(n,i,e);let a=i.split(`/`),o=a[a.length-1];U(n,o,e)}return n}function U(e,t,n){let r=e.get(t);r?r.push(n):e.set(t,[n])}function _e(e,t,n,r){switch(r){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{if(!t.startsWith(`.`))return[];let r=e.split(`/`).slice(0,-1).join(`/`),i=ve(r?`${r}/${t}`:t);for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`,`/index.ts`,`/index.js`]){let t=n.get(i+e)||n.get((i+e).replace(/\.[^.]+$/,``));if(t&&t.length>0)return[t[0]]}let a=n.get(i.replace(/\.[^.]+$/,``));return a?[a[0]]:[]}case`.java`:case`.kt`:case`.scala`:{let e=t.split(`.`),r=e[e.length-1];if(r===`*`)return[];let i=n.get(r);return i?[i[0]]:[]}case`.py`:{if(t.startsWith(`.`)){let r=e.split(`/`).slice(0,-1).join(`/`),i=t.replace(/^\.+/,``).replace(/\./g,`/`),a=r?`${r}/${i}`:i,o=a.split(`/`),s=n.get(a)||n.get(o[o.length-1]);if(s)return[s[0]]}let r=t.replace(/\./g,`/`),i=n.get(r);return i?[i[0]]:[]}case`.go`:{let e=t.split(`/`),r=e[e.length-1],i=n.get(r);return i?[i[0]]:[]}default:return[]}}function ve(e){let t=e.split(`/`),n=[];for(let e of t)if(!(e===`.`||e===``)){if(e===`..`){n.pop();continue}n.push(e)}return n.join(`/`)}function W(e){return e.split(`/`).some(e=>e===`test`||e===`tests`||e===`__tests__`||e===`spec`||e===`test_`||e===`__test__`)||/\.(test|spec)\.[^.]+$/.test(e)}function G(e){let t=[],n=(r,i)=>{if(!(i>10))try{for(let a of y(r,{withFileTypes:!0})){if(L.has(a.name)||a.name.startsWith(`.`))continue;let l=s(r,a.name);if(a.isDirectory())n(l,i+1);else{let n=o(a.name).toLowerCase();if(!R.has(n)||a.name.endsWith(`.d.ts`)||/\.(test|spec)\.[^.]+$/.test(a.name)||c(e,r).replace(/\\/g,`/`).split(`/`).some(e=>e===`test`||e===`tests`||e===`__tests__`||e===`spec`))continue;t.push(l)}}}catch{}};return n(e,0),t}async function ye(e){let n=new Map;for(let r of[`packages`,`apps`,`libs`,`services`,`functions`]){let i=s(e,r),a;try{a=y(i,{withFileTypes:!0})}catch{continue}for(let e of a){if(!e.isDirectory())continue;let a=s(i,e.name,`package.json`);try{let i=await t(a,`utf-8`),o=JSON.parse(i);if(o.name){let t=o.exports?.[`.`]?.import??o.exports?.[`.`]?.default??o.main??`src/index.ts`,i=s(r,e.name,t).replace(/\\/g,`/`);n.set(o.name,i)}}catch{}}}return n}function be(e,t,n){if(t.has(e))return t.get(e)??null;let r=e.startsWith(`@`)?e.split(`/`):[];if(r.length>=2){let e=`${r[0]}/${r[1]}`,i=t.get(e);if(i){if(r.length===2)return i;let e=i.replace(/\/src\/index\.\w+$/,``).replace(/\/dist\/.*$/,``),t=r.slice(2).join(`/`),a=[`${e}/src/${t}`,`${e}/${t}`];for(let e of a){let t=e.replace(/\.\w+$/,``),r=n.get(t);if(r?.[0])return r[0]}return i}}return null}const K=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.java`,`.py`,`.go`,`.cs`,`.rb`,`.kt`,`.scala`,`.rs`,`.php`,`.swift`]),xe=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`__pycache__`,`.venv`,`target`,`bin`,`obj`,`.gradle`,`venv`,`env`]),q={exported:[{pattern:/^export\s+(?:async\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^export\s+(?:default\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^export\s+interface\s+(\w+)/gm,kind:`interface`},{pattern:/^export\s+type\s+(\w+)/gm,kind:`type`},{pattern:/^export\s+(?:const|let)\s+(\w+)/gm,kind:`const`},{pattern:/^export\s+enum\s+(\w+)/gm,kind:`enum`}],local:[{pattern:/^(?:async\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^class\s+(\w+)/gm,kind:`class`},{pattern:/^interface\s+(\w+)/gm,kind:`interface`},{pattern:/^type\s+(\w+)/gm,kind:`type`},{pattern:/^(?:const|let)\s+(\w+)\s*=/gm,kind:`const`},{pattern:/^enum\s+(\w+)/gm,kind:`enum`}]},Se={exported:[{pattern:/^[ \t]*public\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*public\s+(?:static\s+)?interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*public\s+(?:static\s+)?(?:synchronized\s+)?(?:final\s+)?(?:abstract\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])*)\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:synchronized\s+)?(?:final\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])*)\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:final\s+)?(?:\w+(?:<[^>]*>)?)\s+(\w+)\s*[;=]/gm,kind:`variable`}],skipIndentFilter:!0},Ce={exported:[{pattern:/^def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^async\s+def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^class\s+(\w+)/gm,kind:`class`}],local:[{pattern:/^[ \t]+def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^[ \t]+async\s+def\s+(\w+)\s*\(/gm,kind:`function`}],skipIndentFilter:!0},we={exported:[{pattern:/^func\s+([A-Z]\w*)\s*\(/gm,kind:`function`},{pattern:/^func\s+\([^)]+\)\s+([A-Z]\w*)\s*\(/gm,kind:`function`},{pattern:/^type\s+([A-Z]\w*)\s+struct\b/gm,kind:`class`},{pattern:/^type\s+([A-Z]\w*)\s+interface\b/gm,kind:`interface`},{pattern:/^type\s+([A-Z]\w*)\s+/gm,kind:`type`}],local:[{pattern:/^func\s+([a-z]\w*)\s*\(/gm,kind:`function`},{pattern:/^func\s+\([^)]+\)\s+([a-z]\w*)\s*\(/gm,kind:`function`},{pattern:/^type\s+([a-z]\w*)\s+struct\b/gm,kind:`class`},{pattern:/^type\s+([a-z]\w*)\s+/gm,kind:`type`}],skipIndentFilter:!0},Te={exported:[{pattern:/^[ \t]*public\s+(?:static\s+)?(?:partial\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*public\s+(?:static\s+)?interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*public\s+(?:static\s+)?(?:virtual\s+)?(?:override\s+)?(?:async\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])?)\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected|internal)\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:private|protected|internal)\s+(?:static\s+)?(?:async\s+)?(?:\w+(?:<[^>]*>)?)\s+(\w+)\s*\(/gm,kind:`function`}],skipIndentFilter:!0},Ee={exported:[{pattern:/^(?:open\s+|data\s+|sealed\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^(?:fun|suspend\s+fun)\s+(\w+)\s*[(<]/gm,kind:`function`},{pattern:/^interface\s+(\w+)/gm,kind:`interface`},{pattern:/^object\s+(\w+)/gm,kind:`class`},{pattern:/^enum\s+class\s+(\w+)/gm,kind:`enum`}],local:[{pattern:/^[ \t]+(?:private|internal)\s+(?:fun|suspend\s+fun)\s+(\w+)/gm,kind:`function`},{pattern:/^[ \t]+(?:private|internal)\s+(?:val|var)\s+(\w+)/gm,kind:`variable`}],skipIndentFilter:!0},De={exported:[{pattern:/^class\s+(\w+)/gm,kind:`class`},{pattern:/^module\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]+def\s+self\.(\w+)/gm,kind:`function`}],local:[{pattern:/^[ \t]+def\s+(\w+)/gm,kind:`function`}],skipIndentFilter:!0},Oe={exported:[{pattern:/^pub\s+(?:async\s+)?fn\s+(\w+)/gm,kind:`function`},{pattern:/^pub\s+struct\s+(\w+)/gm,kind:`class`},{pattern:/^pub\s+trait\s+(\w+)/gm,kind:`interface`},{pattern:/^pub\s+enum\s+(\w+)/gm,kind:`enum`},{pattern:/^pub\s+type\s+(\w+)/gm,kind:`type`}],local:[{pattern:/^(?:async\s+)?fn\s+(\w+)/gm,kind:`function`},{pattern:/^struct\s+(\w+)/gm,kind:`class`},{pattern:/^trait\s+(\w+)/gm,kind:`interface`},{pattern:/^enum\s+(\w+)/gm,kind:`enum`}],skipIndentFilter:!0},ke={exported:[{pattern:/^[ \t]*(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^function\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?function\s+(\w+)/gm,kind:`function`}],skipIndentFilter:!0},Ae={exported:[{pattern:/^[ \t]*(?:open|public)\s+class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:open|public)\s+struct\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:open|public)\s+protocol\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*(?:open|public)\s+enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*(?:open|public)\s+func\s+(\w+)/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|fileprivate|internal)\s+func\s+(\w+)/gm,kind:`function`},{pattern:/^[ \t]*(?:private|fileprivate|internal)\s+class\s+(\w+)/gm,kind:`class`}],skipIndentFilter:!0},je={exported:[{pattern:/^[ \t]*(?:case\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*object\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*trait\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*def\s+(\w+)/gm,kind:`function`}],local:[],skipIndentFilter:!0};function Me(e){switch(e){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:return q;case`.java`:return Se;case`.py`:return Ce;case`.go`:return we;case`.cs`:return Te;case`.kt`:return Ee;case`.rb`:return De;case`.rs`:return Oe;case`.php`:return ke;case`.swift`:return Ae;case`.scala`:return je;default:return q}}function J(e,t){let n=``,r=0,i=!1;for(let a=t;a<Math.min(t+5,e.length);a++){let t=e[a].trim();n+=(n?` `:``)+t;for(let e of t)e===`(`&&(r++,i=!0),e===`)`&&r--;if(i&&r<=0)return n.replace(/\s*\{.*$/,``).replace(/\s*:\s*$/,``).trim()}return n.trim()||void 0}function Y(e,t){let n=J(e,t);if(!n)return;let r=n.match(/\)\s*:\s*([^{=]+)/);if(r)return r[1].trim().slice(0,200)||void 0;let i=n.match(/=>\s*([^{]+)/);if(i)return i[1].trim().slice(0,200)||void 0}function X(e,t){for(let n=t-1;n>=Math.max(0,t-10);n--){let t=e[n].trim();if(t!==``){if(t.endsWith(`*/`)){for(let t=n;t>=Math.max(0,n-20);t--)if(e[t].trim().startsWith(`/**`)||e[t].trim().startsWith(`/*`)){for(let r=t;r<=n;r++){let t=e[r].replace(/^\s*\/\*\*?\s*/,``).replace(/\s*\*\/\s*$/,``).replace(/^\s*\*\s?/,``).trim();if(t.length>0&&!t.startsWith(`@`))return t.slice(0,200)}return}}if(t.startsWith(`//`))return t.replace(/^\/\/\s*/,``).slice(0,200)||void 0;break}}}function Z(e,t){let n=``,r=0,i=!1;for(let a=t;a<Math.min(t+30,e.length);a++){let t=e[a];n+=` ${t.trim()}`;for(let e of t)e===`{`&&(r++,i=!0),e===`}`&&r--;if(i&&r<=0){let e=n.match(/\{([\s\S]*)\}/);if(e){let t=`{ ${e[1].replace(/\n\s*/g,` `).replace(/\s+/g,` `).trim()} }`;return t.length>500?`${t.slice(0,500)}…`:t}return}}}var Ne=class{name=`symbols`;async analyze(e,n={}){let{format:r=`markdown`,filter:i}=n,s=Date.now(),l=await this.collectFiles(e),f=l.length===1&&l[0]===e?a(e):e,p=[],h=[],_=!1;try{await d.ensure(),_=!0}catch{}for(let e of l){let n=await t(e,`utf-8`),r=c(f,e).replace(/\\/g,`/`),i=o(e);if(_&&u.has(i)){let e=await g(n,i,r);if(e.length>0){p.push(...e);let t=await m(n,i,r);h.push(...t)}else{let e=this.extractSymbolsRegex(n,r);p.push(...e)}}else{let e=this.extractSymbolsRegex(n,r);p.push(...e)}}if(i){let e=i.toLowerCase();p=p.filter(t=>t.name.toLowerCase().includes(e))}return{output:r===`json`?JSON.stringify(p,null,2):this.formatMarkdown(p,f,h),data:{symbols:p,byKind:this.groupByKind(p),exportedCount:p.filter(e=>e.exported).length,totalCount:p.length,callEdges:h},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:l.length,durationMs:Date.now()-s}}}async collectFiles(e){let t=[],i;try{i=await r(e)}catch{throw Error(`Path does not exist: ${e}`)}if(i.isFile()){if(K.has(o(e)))return[e];throw Error(`Not a recognized source file: ${e}`)}if(!i.isDirectory())throw Error(`Not a file or directory: ${e}`);let a=async e=>{let r=await n(e,{withFileTypes:!0});for(let n of r){if(xe.has(n.name)||n.name.startsWith(`.`))continue;let r=s(e,n.name);n.isDirectory()?await a(r):K.has(o(n.name))&&t.push(r)}};return await a(e),t}extractSymbolsRegex(e,t){let n=[],r=e.split(`
47
47
  `),i=new Set,a=Me(o(t));for(let{pattern:o,kind:s}of a.exported){let a=new RegExp(o.source,o.flags),c;for(;(c=a.exec(e))!==null;){let a=c[1];i.add(a);let o=e.slice(0,c.index).split(`
48
48
  `).length,l=s===`function`||s===`method`?J(r,o-1):void 0,u=s===`function`||s===`method`?Y(r,o-1):void 0,d=X(r,o-1),f=s===`interface`||s===`type`?Z(r,o-1):void 0;n.push({name:a,kind:s,exported:!0,filePath:t,line:o,signature:l,returnType:u,jsdoc:d,typeBody:f})}}for(let{pattern:o,kind:s}of a.local){let c=new RegExp(o.source,o.flags),l;for(;(l=c.exec(e))!==null;){let o=l[1];if(i.has(o))continue;if(!a.skipIndentFilter){let t=r[e.slice(0,l.index).split(`
49
49
  `).length-1]??``;if(t.startsWith(` `)||t.startsWith(` `))continue}let c=e.slice(0,l.index).split(`
@@ -51,4 +51,4 @@ import{access as e,readFile as t,readdir as n,stat as r}from"node:fs/promises";i
51
51
  `);if(c+=o.length,c>81920){r.push(`\n_Output truncated at 80KB. ${Object.keys(s).length-r.filter(e=>e.startsWith(`### `)).length} files omitted._`);break}r.push(o)}return n.length>0&&r.push(this.formatCallGraph(n)),r.join(`
52
52
  `)}formatCallGraph(e){let t=new Map;for(let n of e){if(n.callerName===`<module>`)continue;let e=`${n.callerFile}:${n.callerName}->${n.calleeName}`,r=t.get(e);r?r.count++:t.set(e,{callerFile:n.callerFile,callerName:n.callerName,calleeName:n.calleeName,count:1})}if(t.size===0)return``;let n=[];n.push(`### Call Graph Summary
53
53
  `),n.push(`**${e.length} call edges** across analyzed files\n`);let r=new Map;for(let e of t.values()){let t=`${e.callerFile}#${e.callerName}`;r.has(t)||r.set(t,[]),r.get(t)?.push(e.calleeName)}let i=[...r.entries()].sort((e,t)=>t[1].length-e[1].length).slice(0,30);for(let[e,t]of i){let[r,i]=e.split(`#`);n.push(`- **${i}** (${r}) → ${t.join(`, `)}`)}return n.push(``),n.join(`
54
- `)}};const Q=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`]);async function Pe(e){let t=Date.now();if(!Fe(e))return null;let n;try{n=await import(`typescript`)}catch{return null}let r=Le(e);if(r.length===0)return null;let i=r.slice(0,800),a=Ie(n,e),o=n.createProgram(i,{...a,noEmit:!0,skipLibCheck:!0,allowJs:!0,target:n.ScriptTarget.ESNext,module:n.ModuleKind.ESNext,moduleResolution:n.ModuleResolutionKind.Bundler}),s=o.getTypeChecker(),l=new Map;for(let t of o.getSourceFiles()){let r=t.fileName;if(t.isDeclarationFile||r.includes(`node_modules`))continue;let i=c(e,r).replace(/\\/g,`/`);i.startsWith(`..`)||$(n,t,t,s,e,i,l)}let u=[];for(let[e,t]of l){let[n,r]=e.split(`|`);u.push({from:n,to:r,symbols:[...t].sort().slice(0,10)})}return u.sort((e,t)=>t.symbols.length-e.symbols.length),{edges:u,fileCount:i.length,edgeCount:u.length,durationMs:Date.now()-t}}function Fe(e){if(_(s(e,`tsconfig.json`))||_(s(e,`tsconfig.build.json`)))return!0;try{for(let t of y(e,{withFileTypes:!0}))if(t.isDirectory()&&!Q.has(t.name)&&!t.name.startsWith(`.`)&&_(s(e,t.name,`tsconfig.json`)))return!0}catch{}return!1}function Ie(e,t){let n=s(t,`tsconfig.json`);if(!_(n))return{};try{let r=e.readConfigFile(n,e=>v(e,`utf-8`));return r.error?{}:e.parseJsonConfigFileContent(r.config,e.sys,t).options}catch{return{}}}function Le(e){let t=[],n=new Set([`.ts`,`.tsx`]),r=(i,a)=>{if(!(a>10))try{for(let l of y(i,{withFileTypes:!0})){if(Q.has(l.name)||l.name.startsWith(`.`))continue;let u=s(i,l.name);if(l.isDirectory())r(u,a+1);else if(n.has(o(l.name))){if(l.name.endsWith(`.d.ts`)||/\.(test|spec)\.[jt]sx?$/.test(l.name)||c(e,i).replace(/\\/g,`/`).split(`/`).some(e=>e===`test`||e===`tests`||e===`__tests__`||e===`spec`))continue;t.push(u)}}}catch{}};return r(e,0),t}function $(e,t,n,r,i,a,o){if(e.isCallExpression(t)||e.isNewExpression(t)){let n=t.expression;ze(e,n,r,i,a,o)}e.forEachChild(t,t=>{$(e,t,n,r,i,a,o)})}function Re(e){let t=e.match(/^(.+?)\/dist\/(.+)$/);if(!t)return e;let[,n,r]=t;return`${n}/src/${r.replace(/\.d\.(m?ts|cts)$/,`.ts`)}`}function ze(e,t,n,r,i,a){try{let o,s;if(e.isIdentifier(t)?(o=n.getSymbolAtLocation(t),s=t.text):e.isPropertyAccessExpression(t)&&(o=n.getSymbolAtLocation(t.name),s=t.name.text),!o||!s)return;o.flags&e.SymbolFlags.Alias&&(o=n.getAliasedSymbol(o));let l=o.getDeclarations();if(!l||l.length===0)return;let u=l[0].getSourceFile().fileName;if(u.includes(`node_modules`))return;let d=c(r,u).replace(/\\/g,`/`);if(d=Re(d),d===i||d.startsWith(`..`))return;let f=`${i}|${d}`,p=a.get(f);p?p.add(s):a.set(f,new Set([s]))}catch{}}export{ie as BlastRadiusAnalyzer,C as DependencyAnalyzer,se as DiagramGenerator,pe as EntryPointAnalyzer,j as KnowledgeProducer,I as PatternAnalyzer,D as StructureAnalyzer,Ne as SymbolAnalyzer,z as extractRegexCallGraph,Pe as extractTsCallGraph};
54
+ `)}};const Q=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`]);async function Pe(e){let t=Date.now();if(!Fe(e))return null;let n;try{n=await import(`typescript`)}catch{return null}let r=Le(e);if(r.length===0)return null;let i=r.slice(0,800),a=Ie(n,e),o=n.createProgram(i,{...a,noEmit:!0,skipLibCheck:!0,allowJs:!0,target:n.ScriptTarget.ESNext,module:n.ModuleKind.ESNext,moduleResolution:n.ModuleResolutionKind.Bundler}),s=o.getTypeChecker(),l=new Map;for(let t of o.getSourceFiles()){let r=t.fileName;if(t.isDeclarationFile||r.includes(`node_modules`))continue;let i=c(e,r).replace(/\\/g,`/`);i.startsWith(`..`)||$(n,t,t,s,e,i,l)}let u=[];for(let[e,t]of l){let[n,r]=e.split(`|`);u.push({from:n,to:r,symbols:[...t].sort().slice(0,10)})}return u.sort((e,t)=>t.symbols.length-e.symbols.length),{edges:u,fileCount:i.length,edgeCount:u.length,durationMs:Date.now()-t}}function Fe(e){if(_(s(e,`tsconfig.json`))||_(s(e,`tsconfig.build.json`)))return!0;try{for(let t of y(e,{withFileTypes:!0}))if(t.isDirectory()&&!Q.has(t.name)&&!t.name.startsWith(`.`)&&_(s(e,t.name,`tsconfig.json`)))return!0}catch{}return!1}function Ie(e,t){let n=s(t,`tsconfig.json`);if(!_(n))return{};try{let r=e.readConfigFile(n,e=>v(e,`utf-8`));return r.error?{}:e.parseJsonConfigFileContent(r.config,e.sys,t).options}catch{return{}}}function Le(e){let t=[],n=new Set([`.ts`,`.tsx`]),r=(i,a)=>{if(!(a>10))try{for(let l of y(i,{withFileTypes:!0})){if(Q.has(l.name)||l.name.startsWith(`.`))continue;let u=s(i,l.name);if(l.isDirectory())r(u,a+1);else if(n.has(o(l.name))){if(l.name.endsWith(`.d.ts`)||/\.(test|spec)\.[jt]sx?$/.test(l.name)||c(e,i).replace(/\\/g,`/`).split(`/`).some(e=>e===`test`||e===`tests`||e===`__tests__`||e===`spec`))continue;t.push(u)}}}catch{}};return r(e,0),t}function $(e,t,n,r,i,a,o){if(e.isCallExpression(t)||e.isNewExpression(t)){let n=t.expression;ze(e,n,r,i,a,o)}e.forEachChild(t,t=>{$(e,t,n,r,i,a,o)})}function Re(e){let t=e.match(/^(.+?)\/dist\/(.+)$/);if(!t)return e;let[,n,r]=t;return`${n}/src/${r.replace(/\.d\.(m?ts|cts)$/,`.ts`)}`}function ze(e,t,n,r,i,a){try{let o,s;if(e.isIdentifier(t)?(o=n.getSymbolAtLocation(t),s=t.text):e.isPropertyAccessExpression(t)&&(o=n.getSymbolAtLocation(t.name),s=t.name.text),!o||!s)return;o.flags&e.SymbolFlags.Alias&&(o=n.getAliasedSymbol(o));let l=o.getDeclarations();if(!l||l.length===0)return;let u=l[0].getSourceFile().fileName;if(u.includes(`node_modules`))return;let d=c(r,u).replace(/\\/g,`/`);if(d=Re(d),d===i||d.startsWith(`..`))return;let f=`${i}|${d}`,p=a.get(f);p?p.add(s):a.set(f,new Set([s]))}catch{}}export{re as BlastRadiusAnalyzer,w as DependencyAnalyzer,se as DiagramGenerator,pe as EntryPointAnalyzer,j as KnowledgeProducer,I as PatternAnalyzer,D as StructureAnalyzer,Ne as SymbolAnalyzer,z as extractRegexCallGraph,Pe as extractTsCallGraph};
@@ -1,4 +1,4 @@
1
- function e(e){return e.kind===`result`}function t(e){return e.kind===`error`}function n(e){return String(e??``).replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function r(e){let t=String(e??``).trim();return/^(https?:|mailto:|#)/i.test(t)?t:`#`}function i(e){return String(e??``).replace(/[^a-zA-Z0-9_-]/g,`_`)}function a(e){if(e==null)return``;if(Array.isArray(e))return e.map(a).join(`, `);if(typeof e==`object`)try{return JSON.stringify(e)}catch{return String(e)}return String(e)}function o(e){if(typeof e!=`string`)return e;let t=e.trim();if(t.startsWith(`[`)&&t.endsWith(`]`)||t.startsWith(`{`)&&t.endsWith(`}`))try{return JSON.parse(t)}catch{return e}return e}function s(e){return n(String(e??``)).replace(/\*\*(.+?)\*\*/g,`<strong>$1</strong>`).replace(/`(.+?)`/g,`<code>$1</code>`).replace(/\[([^\]]+)\]\(([^)]+)\)/g,(e,t,n)=>`<a href="${r(n)}">${t}</a>`)}const c={ok:`success`,pass:`success`,passed:`success`,good:`success`,error:`danger`,fail:`danger`,failed:`danger`,critical:`danger`,high:`danger`,warn:`warning`,caution:`warning`,medium:`warning`,info:`accent`,low:`accent`,note:`accent`},l=new Set([`success`,`danger`,`warning`,`accent`]);function u(e){if(!e)return`accent`;let t=String(e).toLowerCase(),n=c[t]??t;return l.has(n)?n:`accent`}function d(e,t=`fg`){return`var(--dt-${u(e)}-${t})`}function f(e){let t=e.value;return Array.isArray(t)?t:t&&typeof t==`object`&&`items`in t&&Array.isArray(t.items)?t.items:[]}function p(e){let t=o(e);return Array.isArray(t)?t:[]}function m(e,t){return`<div class="bk-actions">${p(e.value).map(e=>{let t=i(e.id);if(e.type===`select`){let r=(e.options??[]).map(e=>{let t=typeof e==`string`?e:e.value,r=typeof e==`string`?e:e.label;return`<option value="${n(t)}">${n(r)}</option>`}).join(``);return`<label class="bk-select-wrap"><span class="bk-visually-hidden">${n(e.label)}</span><select class="bk-select" data-action-id="${t}"><option value="" selected disabled>${n(e.label)}</option>${r}</select></label>`}if(e.type===`text-submit`)return`<div class="bk-text-submit" data-action-id="${t}"><input type="text" class="bk-input" placeholder="${n(e.label)}" data-action-id="${t}" /><button type="button" class="bk-action bk-action--primary" data-action-id="${t}">Send</button></div>`;if(e.type===`form-submit`&&e.schema){let r=e.schema;return`<form class="bk-form" data-action-id="${t}"><fieldset>${Object.entries(r).map(([e,t])=>{let r=t.description??e,i=t.type===`number`?`number`:`text`;return`<label class="bk-form-field"><span class="bk-form-label">${n(r)}</span><input type="${i}" class="bk-input" name="${n(e)}" placeholder="${n(r)}" /></label>`}).join(``)}<button type="submit" class="bk-action bk-action--primary">${n(e.label)}</button></fieldset></form>`}return`<button type="button" class="bk-action bk-action--${n(e.variant??`default`)}" data-action-id="${t}">${n(e.label)}</button>`}).join(``)}</div>`}function ee(e,t){return`<div class="bk-cards">${f(e).map(e=>{let t=e.badge?`<span class="bk-card-badge">${n(e.badge)}</span>`:``,r=e.body?`<div class="bk-card-body">${n(e.body)}</div>`:``,i=e.description?`<div class="bk-card-description">${n(e.description)}</div>`:``;return`<article class="bk-card" data-tone="${u(e.status)}"><div class="bk-card-header"><div class="bk-card-title">${n(e.title)}</div>${t}</div>${r}${i}</article>`}).join(``)}</div>`}const h=[`#3b82f6`,`#10b981`,`#f59e0b`,`#ef4444`,`#8b5cf6`,`#ec4899`,`#06b6d4`,`#84cc16`],te=new Set([`line`,`area`,`bar`,`horizontal-bar`,`pie`,`donut`,`sparkline`,`heatmap`]);function ne(e,t){let n=re(e),r=ue(n.headers,n.data);if(n.data.length===0||!te.has(n.chartType))return _(n.note,r);let i=ie(n);if(!i)return _(n.note,r);let a=n.chartType===`pie`||n.chartType===`donut`?[]:n.yKeys;return`<div class="bk-chart"><div class="bk-chart-surface">${i}</div>${a.length>1?fe(a):``}${de(r)}</div>`}function re(e){let t=o(e.value),r=Array.isArray(t?.data)?t.data:[],i=String(t?.chartType??e.chartType??`bar`),a=te.has(i)?i:`bar`,s=n(i),c=pe(r,String(t?.xKey??`label`)),l=Array.isArray(t?.yKeys)?t.yKeys.filter(e=>typeof e==`string`):[],u=l.length>0?l:[`value`];if(l.length===0&&r.length>0&&r[0]!=null){let e=r[0];if(!(`value`in e&&typeof e.value==`number`)){let t=Object.keys(e).filter(t=>t!==c&&typeof e[t]==`number`);t.length>0&&(u=t)}}let d=[c,...u.filter((e,t)=>e!==c&&u.indexOf(e)===t)];return{chartType:a,data:r,xKey:c,yKeys:u,headers:d,note:s}}function ie(e){switch(e.chartType){case`line`:case`area`:return ae(e,e.chartType===`area`);case`bar`:return oe(e);case`horizontal-bar`:return se(e);case`pie`:return g(e,!1);case`donut`:return g(e,!0);case`sparkline`:return ce(e);case`heatmap`:return le(e);default:return``}}function ae(e,t){let r=v(e.data,e.xKey,e.yKeys),i=r.flatMap(e=>e.values).filter(Number.isFinite);if(i.length===0)return``;let a=b(i),o=y(500,300,{left:60,right:20,top:20,bottom:40}),s=r.map((e,t)=>ye(t,r.length,o.left,o.right)),c=e.yKeys.map((e,n)=>{let i=h[n%h.length],c=r.map((e,t)=>{let r=s[t],i=x(e.values[n],a,o.bottom,o.top);return`${E(r)},${E(i)}`}),l=r.map((e,t)=>{let r=s[t],c=x(e.values[n],a,o.bottom,o.top);return`<circle cx="${E(r)}" cy="${E(c)}" r="3" fill="${i}" />`}).join(``),u=`<polyline fill="none" stroke="${i}" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round" points="${c.join(` `)}" />`;return t?`<polygon fill="${i}" fill-opacity="0.16" points="${[`${E(s[0])},${E(o.bottom)}`,...c,`${E(s[s.length-1])},${E(o.bottom)}`].join(` `)}" />${u}${l}`:`${u}${l}`}).join(``);return`<svg class="bk-chart-svg" viewBox="0 0 500 300" width="100%" preserveAspectRatio="xMidYMid meet" role="img" aria-label="${n(`${e.chartType} chart`)}">${he(o,a)}${_e(o)}${ve(r,s,o.bottom+18)}${c}</svg>`}function oe(e){let t=v(e.data,e.xKey,e.yKeys),n=t.flatMap(e=>e.values).filter(Number.isFinite);if(n.length===0)return``;let r=b(n,{includeZero:!0}),i=y(500,300,{left:60,right:20,top:20,bottom:40}),a=i.width/t.length,o=Math.max(4,Math.min(28,(a-12-4*(e.yKeys.length-1))/e.yKeys.length)),s=e.yKeys.length*o+(e.yKeys.length-1)*4,c=x(0,r,i.bottom,i.top),l=t.map((e,t)=>{let n=i.left+t*a+(a-s)/2;return e.values.map((e,t)=>{let a=h[t%h.length],s=n+t*(o+4),l=x(e,r,i.bottom,i.top),u=Math.min(l,c),d=Math.max(1,Math.abs(c-l));return`<rect x="${E(s)}" y="${E(u)}" width="${E(o)}" height="${E(d)}" rx="3" fill="${a}" />`}).join(``)}).join(``),u=t.map((e,t)=>i.left+t*a+a/2);return`<svg class="bk-chart-svg" viewBox="0 0 500 300" width="100%" preserveAspectRatio="xMidYMid meet" role="img" aria-label="bar chart">${he(i,r)}${_e(i)}${ve(t,u,i.bottom+18)}${l}</svg>`}function se(e){let t=v(e.data,e.xKey,e.yKeys),r=t.flatMap(e=>e.values).filter(Number.isFinite);if(r.length===0)return``;let i=b(r,{includeZero:!0}),a=y(500,300,{left:110,right:20,top:20,bottom:36}),o=a.height/t.length,s=Math.max(4,Math.min(18,(o-8-4*(e.yKeys.length-1))/e.yKeys.length)),c=e.yKeys.length*s+(e.yKeys.length-1)*4,l=x(0,i,a.left,a.right),u=t.map((e,t)=>{let r=a.top+t*o+(o-c)/2,u=a.top+t*o+o/2+4;return`${`<text class="bk-chart-label" x="${E(a.left-8)}" y="${E(u)}" text-anchor="end">${n(e.label)}</text>`}${e.values.map((e,t)=>{let n=h[t%h.length],o=r+t*(s+4),c=x(e,i,a.left,a.right),u=Math.min(l,c),d=Math.max(1,Math.abs(c-l));return`<rect x="${E(u)}" y="${E(o)}" width="${E(d)}" height="${E(s)}" rx="3" fill="${n}" />`}).join(``)}`}).join(``);return`<svg class="bk-chart-svg" viewBox="0 0 500 300" width="100%" preserveAspectRatio="xMidYMid meet" role="img" aria-label="horizontal bar chart">${ge(a,i)}<line class="bk-chart-axis" x1="${E(l)}" y1="${E(a.top)}" x2="${E(l)}" y2="${E(a.bottom)}" />${u}</svg>`}function g(e,t){let r=me(e.data,e.xKey,e.yKeys),i=e.data.map(t=>({label:C(t[e.xKey]),value:w(t[r])})).filter(e=>e.value>0);if(i.length===0)return``;let a=i.reduce((e,t)=>e+t.value,0);if(a<=0)return``;let o=t?88*.6:0,s=-90,c=[],l=[];i.forEach((e,r)=>{let i=h[r%h.length],u=e.value/a*360,d=s+u,f=e.value/a*100,p=t?xe(150,140,88,o,s,d):be(150,140,88,s,d);c.push(`${p?`<path d="${p}" fill="${i}" stroke="var(--dt-bg-secondary)" stroke-width="2" />`:`<circle cx="150" cy="140" r="88" fill="${i}" />`}`);let m=S(150,140,108,s+u/2);l.push(`<text class="bk-chart-slice-label" x="${E(m.x)}" y="${E(m.y)}" text-anchor="${m.x>=150?`start`:`end`}">${n(e.label)} ${n(T(f))}%</text>`),s=d});let u=t?`<circle cx="150" cy="140" r="${E(o-1)}" fill="var(--dt-bg-secondary)" />`:``;return`<svg class="bk-chart-svg" viewBox="0 0 300 300" width="100%" preserveAspectRatio="xMidYMid meet" role="img" aria-label="${t?`donut chart`:`pie chart`}">${c.join(``)}${u}${l.join(``)}</svg>`}function ce(e){let t=me(e.data,e.xKey,e.yKeys),n=e.data.map(e=>w(e[t]));if(n.every(e=>e===0))return``;let r=b(n),i=n.map((e,t)=>{let i=ye(t,n.length,0,100),a=x(e,r,28,2);return`${E(i)},${E(a)}`});return`<svg class="bk-chart-svg" viewBox="0 0 100 30" width="100%" height="30" preserveAspectRatio="none" role="img" aria-label="sparkline"><polyline fill="none" stroke="${h[0]}" stroke-width="2.25" stroke-linejoin="round" stroke-linecap="round" points="${i.join(` `)}" /></svg>`}function le(e){let t=e.data.map(t=>({label:C(t[e.xKey]),values:e.yKeys.map(e=>w(t[e]))})),r=t.flatMap(e=>e.values).filter(Number.isFinite);if(r.length===0)return``;let i=b(r),a=y(500,300,{left:80,right:20,top:42,bottom:20}),o=a.width/e.yKeys.length,s=a.height/t.length;return`<svg class="bk-chart-svg" viewBox="0 0 500 300" width="100%" preserveAspectRatio="xMidYMid meet" role="img" aria-label="heatmap chart">${e.yKeys.map((e,t)=>`<text class="bk-chart-label" x="${E(a.left+t*o+o/2)}" y="28" text-anchor="middle">${n(e)}</text>`).join(``)}${t.map((e,t)=>{let r=a.top+t*s+s/2+4;return`<text class="bk-chart-label" x="${E(a.left-8)}" y="${E(r)}" text-anchor="end">${n(e.label)}</text>`}).join(``)}${t.map((e,t)=>e.values.map((e,n)=>{let r=a.left+n*o,c=a.top+t*s;return`<rect x="${E(r)}" y="${E(c)}" width="${E(o-4)}" height="${E(s-4)}" rx="4" stroke="var(--dt-border-muted)" style="fill: ${Se(e,i)}" />`}).join(``)).join(``)}</svg>`}function ue(e,t){return`<div class="bk-chart-table-wrap"><table class="bk-chart-table"><thead><tr>${e.map(e=>`<th>${n(e)}</th>`).join(``)}</tr></thead><tbody>${t.map(t=>`<tr>${e.map(e=>`<td>${n(a(t[e]))}</td>`).join(``)}</tr>`).join(``)}</tbody></table></div>`}function _(e,t){return`<div class="bk-chart"><div class="bk-chart-note">Chart fallback (${e}) rendered as a data table.</div>${t}</div>`}function de(e){return`<details class="bk-chart-details"><summary>Show data</summary>${e}</details>`}function fe(e){return`<div class="bk-chart-legend">${e.map((e,t)=>`<span class="bk-chart-legend-item"><span class="bk-chart-legend-swatch" style="background:${h[t%h.length]}"></span>${n(e)}</span>`).join(``)}</div>`}function pe(e,t){if(e.length===0||t in e[0])return t;for(let t of e){let e=Object.keys(t).find(e=>typeof t[e]==`string`);if(e)return e}return t}function me(e,t,n){let r=n.find(n=>n!==t&&e.some(e=>Ce(e[n])));if(r)return r;for(let n of e){let e=Object.keys(n).find(e=>e!==t&&Ce(n[e]));if(e)return e}return n[0]??`value`}function v(e,t,n){return e.map(e=>({label:C(e[t]),values:n.map(t=>w(e[t]))}))}function he(e,t){return Array.from({length:5},(r,i)=>{let a=i/4,o=t.max-a*(t.max-t.min),s=e.top+a*e.height;return`<line class="bk-chart-grid" x1="${E(e.left)}" y1="${E(s)}" x2="${E(e.right)}" y2="${E(s)}" /><text class="bk-chart-label" x="${E(e.left-8)}" y="${E(s+4)}" text-anchor="end">${n(T(o))}</text>`}).join(``)}function ge(e,t){return Array.from({length:5},(r,i)=>{let a=i/4,o=t.min+a*(t.max-t.min),s=e.left+a*e.width;return`<line class="bk-chart-grid" x1="${E(s)}" y1="${E(e.top)}" x2="${E(s)}" y2="${E(e.bottom)}" /><text class="bk-chart-label" x="${E(s)}" y="${E(e.bottom+18)}" text-anchor="middle">${n(T(o))}</text>`}).join(``)}function _e(e){return`<line class="bk-chart-axis" x1="${E(e.left)}" y1="${E(e.top)}" x2="${E(e.left)}" y2="${E(e.bottom)}" /><line class="bk-chart-axis" x1="${E(e.left)}" y1="${E(e.bottom)}" x2="${E(e.right)}" y2="${E(e.bottom)}" />`}function ve(e,t,r){return e.map((e,i)=>`<text class="bk-chart-label" x="${E(t[i])}" y="${E(r)}" text-anchor="middle">${n(e.label)}</text>`).join(``)}function y(e,t,n){return{left:n.left,top:n.top,right:e-n.right,bottom:t-n.bottom,width:e-n.left-n.right,height:t-n.top-n.bottom}}function b(e,t){let n=Math.min(...e),r=Math.max(...e);if(t?.includeZero&&(n=Math.min(n,0),r=Math.max(r,0)),n===r){let e=n===0?1:Math.abs(n)*.1||1;n-=e,r+=e}return{min:n,max:r}}function ye(e,t,n,r){return t<=1?(n+r)/2:n+e/(t-1)*(r-n)}function x(e,t,n,r){return n+(e-t.min)/(t.max-t.min)*(r-n)}function be(e,t,n,r,i){if(Math.abs(i-r)>=359.999)return``;let a=S(e,t,n,r),o=S(e,t,n,i),s=+(i-r>180);return`M ${E(e)} ${E(t)} L ${E(a.x)} ${E(a.y)} A ${E(n)} ${E(n)} 0 ${s} 1 ${E(o.x)} ${E(o.y)} Z`}function xe(e,t,n,r,i,a){if(Math.abs(a-i)>=359.999)return``;let o=S(e,t,n,i),s=S(e,t,n,a),c=S(e,t,r,a),l=S(e,t,r,i),u=+(a-i>180);return[`M ${E(o.x)} ${E(o.y)}`,`A ${E(n)} ${E(n)} 0 ${u} 1 ${E(s.x)} ${E(s.y)}`,`L ${E(c.x)} ${E(c.y)}`,`A ${E(r)} ${E(r)} 0 ${u} 0 ${E(l.x)} ${E(l.y)}`,`Z`].join(` `)}function S(e,t,n,r){let i=(r-90)*Math.PI/180;return{x:e+n*Math.cos(i),y:t+n*Math.sin(i)}}function Se(e,t){let n=18+Math.max(0,Math.min(1,(e-t.min)/(t.max-t.min)))*64;return`color-mix(in srgb, var(--dt-bg-secondary) ${E(100-n)}%, var(--dt-accent-fg) ${E(n)}%)`}function C(e){return e==null?``:String(a(e))}function w(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`&&e.trim()!==``){let t=Number(e);if(Number.isFinite(t))return t}return 0}function Ce(e){return typeof e==`number`?Number.isFinite(e):typeof e==`string`&&e.trim()!==``&&Number.isFinite(Number(e))}function T(e){return String(a(Number(e.toFixed(2))))}function E(e){return Number(e.toFixed(2)).toString()}function we(e,t){return`<ul class="bk-checklist">${f(e).map(e=>{let t=!!e.checked;return`<li class="bk-checklist-item" data-checked="${String(t)}"><span class="bk-checklist-icon">${t?`✓`:`×`}</span><span class="bk-checklist-label">${n(e.label)}</span></li>`}).join(``)}</ul>`}function Te(e,t){let r=e.language?` language-${i(String(e.language))}`:``,a=e.value??``,o=typeof a==`object`&&a?JSON.stringify(a,null,2):String(a);return`<pre class="bk-code"><code class="${r.trim()}">${n(o)}</code></pre>`}function Ee(e){let t=o(e);return Array.isArray(t)?t:t&&typeof t==`object`&&Array.isArray(t.columns)?t.columns:[]}function De(e,t){return`<div class="bk-comparison">${Ee(e.value).map(e=>{let t=e.items.map(e=>`<li>${n(e)}</li>`).join(``);return`<section class="bk-comparison-column"><div class="bk-comparison-title">${n(e.title)}</div><ul class="bk-comparison-items">${t}</ul></section>`}).join(``)}</div>`}function Oe(e){let t=o(e);if(t&&typeof t==`object`){let e=t;return{name:typeof e.name==`string`?e.name:`Untitled component`,description:typeof e.description==`string`?e.description:void 0,type:typeof e.type==`string`?e.type:void 0,technology:typeof e.technology==`string`?e.technology:void 0,responsibilities:Array.isArray(e.responsibilities)?e.responsibilities.map(String).filter(Boolean):[],interfaces:Array.isArray(e.interfaces)?e.interfaces:[],dependencies:Array.isArray(e.dependencies)?e.dependencies:[],metrics:e.metrics&&typeof e.metrics==`object`?e.metrics:void 0,codeLinks:Array.isArray(e.codeLinks)?e.codeLinks:[]}}return{name:`Untitled component`}}function ke(e){return e.length===0?``:`<details class="bk-component-detail-section" open><summary class="bk-component-detail-summary">Responsibilities</summary><ul class="bk-component-detail-list">${e.map(e=>`<li>${n(e)}</li>`).join(``)}</ul></details>`}function Ae(e){return e.length===0?``:`<details class="bk-component-detail-section" open><summary class="bk-component-detail-summary">Interfaces</summary><div class="bk-component-detail-table-wrap"><table class="bk-component-detail-table"><thead><tr><th>Name</th><th>Type</th><th>Description</th></tr></thead><tbody>${e.map(e=>`<tr><td class="bk-component-detail-code">${n(e.name)}</td><td class="bk-component-detail-code">${n(e.type)}</td><td>${n(e.description??``)}</td></tr>`).join(``)}</tbody></table></div></details>`}function je(e){return e.length===0?``:`<details class="bk-component-detail-section" open><summary class="bk-component-detail-summary">Dependencies</summary><ul class="bk-component-detail-dependencies">${e.map(e=>`<li class="bk-component-detail-dependency"><span class="bk-component-detail-dependency-name">${n(e.name)}</span>${e.relationship?`<span class="bk-component-detail-dependency-relationship">${n(e.relationship)}</span>`:``}</li>`).join(``)}</ul></details>`}function Me(e){let t=Object.entries(e??{});return t.length===0?``:`<details class="bk-component-detail-section" open><summary class="bk-component-detail-summary">Metrics</summary><div class="bk-component-detail-metrics">${t.map(([e,t])=>`<div class="bk-component-detail-metric"><span class="bk-component-detail-metric-label">${n(e)}</span><strong class="bk-component-detail-metric-value">${n(String(t))}</strong></div>`).join(``)}</div></details>`}function Ne(e){let t=Array.isArray(e.codeLinks)?e.codeLinks:[];return t.length===0?``:`<details class="bk-component-detail-section" open><summary class="bk-component-detail-summary">Code Links</summary><div class="bk-component-detail-links">${t.map(e=>`<a class="bk-component-detail-link" href="${r(e.href)}">${n(e.label)}</a>`).join(``)}</div></details>`}function Pe(e,t){let r=Oe(e.value),i=r.description?`<p class="bk-component-detail-description">${n(r.description)}</p>`:``,a=r.type?`<span class="bk-component-detail-badge">${n(r.type)}</span>`:``,o=r.technology?`<span class="bk-component-detail-tech">${n(r.technology)}</span>`:``,s=[ke(r.responsibilities??[]),Ae(r.interfaces??[]),je(r.dependencies??[]),Me(r.metrics),Ne(r)].join(``);return`<article class="bk-component-detail"><header class="bk-component-detail-header"><div class="bk-component-detail-heading"><h4 class="bk-component-detail-name">${n(r.name)}</h4>${a}${o}</div>${i}</header><div class="bk-component-detail-body">${s}</div></article>`}function Fe(e){let t=o(e);if(t&&typeof t==`object`){let e=t;return{name:typeof e.name==`string`?e.name:`unnamed_schema`,description:typeof e.description==`string`?e.description:void 0,fields:Array.isArray(e.fields)?e.fields:[],indexes:Array.isArray(e.indexes)?e.indexes:[]}}return{name:`unnamed_schema`,fields:[]}}function Ie(e){return Array.isArray(e.constraints)&&e.constraints.includes(`primary-key`)}function Le(e){return e.startsWith(`foreign-key:`)?`<a class="bk-data-table-schema-badge bk-data-table-schema-badge--link" href="${r(`#${i(e.slice(12).replace(/\./g,`_`))}`)}">${n(e)}</a>`:`<span class="bk-data-table-schema-badge${e===`primary-key`?` bk-data-table-schema-badge--primary`:``}">${n(e)}</span>`}function Re(e){return e.length===0?``:`<section class="bk-data-table-schema-indexes"><h5 class="bk-data-table-schema-subtitle">Indexes</h5><div class="bk-data-table-schema-index-grid">${e.map(e=>`<article class="bk-data-table-schema-index"><div class="bk-data-table-schema-index-name">${n(e.name)}</div><div class="bk-data-table-schema-index-columns">${n(e.columns.join(`, `))}</div><div class="bk-data-table-schema-index-meta">${e.unique?`Unique`:`Standard`}</div></article>`).join(``)}</div></section>`}function ze(e,t){let r=Fe(e.value),a=r.description?`<p class="bk-data-table-schema-description">${n(r.description)}</p>`:``;if(!Array.isArray(r.fields)||r.fields.length===0)return`<section class="bk-data-table-schema"><header class="bk-data-table-schema-header"><h4 class="bk-data-table-schema-title">${n(r.name)}</h4>${a}</header><p class="bk-data-table-schema-empty">No schema fields available.</p></section>`;let o=r.fields.map(e=>{let t=Array.isArray(e.constraints)?e.constraints:[],a=t.length>0?t.map(e=>Le(e)).join(``):`<span class="bk-data-table-schema-badge">none</span>`;return`<tr class="bk-data-table-schema-row${Ie(e)?` bk-data-table-schema-row--primary`:``}" id="${i(`${r.name}_${e.name}`)}"><td class="bk-data-table-schema-code">${n(e.name)}</td><td class="bk-data-table-schema-code">${n(e.type)}</td><td class="bk-data-table-schema-required">${e.required?`✓`:`—`}</td><td><div class="bk-data-table-schema-constraints">${a}</div></td><td class="bk-data-table-schema-code">${n(e.default??`—`)}</td><td>${n(e.description??``)}</td></tr>`}).join(``);return`<section class="bk-data-table-schema"><header class="bk-data-table-schema-header"><h4 class="bk-data-table-schema-title">${n(r.name)}</h4>${a}</header><div class="bk-data-table-schema-wrap"><table class="bk-data-table-schema-table"><thead><tr><th>Field Name</th><th>Type</th><th>Required</th><th>Constraints</th><th>Default</th><th>Description</th></tr></thead><tbody>${o}</tbody></table></div>${Re(r.indexes??[])}</section>`}function Be(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`){let t=e;if(typeof t.content==`string`)return t.content;if(typeof t.before==`string`&&typeof t.after==`string`)return Ve(t.before,t.after)}return``}function Ve(e,t){let n=e.split(`
1
+ function e(e){return e.kind===`result`}function t(e){return e.kind===`error`}function n(e){return String(e??``).replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function r(e){let t=String(e??``).trim();return/^(https?:|mailto:|#)/i.test(t)?t:`#`}function i(e){return String(e??``).replace(/[^a-zA-Z0-9_-]/g,`_`)}function a(e){if(e==null)return``;if(Array.isArray(e))return e.map(a).join(`, `);if(typeof e==`object`)try{return JSON.stringify(e)}catch{return String(e)}return String(e)}function o(e){if(typeof e!=`string`)return e;let t=e.trim();if(t.startsWith(`[`)&&t.endsWith(`]`)||t.startsWith(`{`)&&t.endsWith(`}`))try{return JSON.parse(t)}catch{return e}return e}function s(e){return n(String(e??``)).replace(/\*\*(.+?)\*\*/g,`<strong>$1</strong>`).replace(/`(.+?)`/g,`<code>$1</code>`).replace(/\[([^\]]+)\]\(([^)]+)\)/g,(e,t,n)=>`<a href="${r(n)}">${t}</a>`)}const c={ok:`success`,pass:`success`,passed:`success`,good:`success`,error:`danger`,fail:`danger`,failed:`danger`,critical:`danger`,high:`danger`,warn:`warning`,caution:`warning`,medium:`warning`,info:`accent`,low:`accent`,note:`accent`},l=new Set([`success`,`danger`,`warning`,`accent`]);function u(e){if(!e)return`accent`;let t=String(e).toLowerCase(),n=c[t]??t;return l.has(n)?n:`accent`}function d(e,t=`fg`){return`var(--dt-${u(e)}-${t})`}function f(e){let t=e.value;return Array.isArray(t)?t:t&&typeof t==`object`&&`items`in t&&Array.isArray(t.items)?t.items:[]}function p(e){let t=o(e);return Array.isArray(t)?t:[]}function m(e,t){return`<div class="bk-actions">${p(e.value).map(e=>{let t=i(e.id);if(e.type===`select`){let r=(e.options??[]).map(e=>{let t=typeof e==`string`?e:e.value,r=typeof e==`string`?e:e.label;return`<option value="${n(t)}">${n(r)}</option>`}).join(``);return`<label class="bk-select-wrap"><span class="bk-visually-hidden">${n(e.label)}</span><select class="bk-select" data-action-id="${t}"><option value="" selected disabled>${n(e.label)}</option>${r}</select></label>`}if(e.type===`text-submit`)return`<div class="bk-text-submit" data-action-id="${t}"><input type="text" class="bk-input" placeholder="${n(e.label)}" data-action-id="${t}" /><button type="button" class="bk-action bk-action--primary" data-action-id="${t}">Send</button></div>`;if(e.type===`form-submit`&&e.schema){let r=e.schema;return`<form class="bk-form" data-action-id="${t}"><fieldset>${Object.entries(r).map(([e,t])=>{let r=t.description??e,i=t.type===`number`?`number`:`text`;return`<label class="bk-form-field"><span class="bk-form-label">${n(r)}</span><input type="${i}" class="bk-input" name="${n(e)}" placeholder="${n(r)}" /></label>`}).join(``)}<button type="submit" class="bk-action bk-action--primary">${n(e.label)}</button></fieldset></form>`}return`<button type="button" class="bk-action bk-action--${n(e.variant??`default`)}" data-action-id="${t}">${n(e.label)}</button>`}).join(``)}<div class="bk-action-feedback" style="display:none;font-size:0.875rem;color:var(--dt-text-secondary);padding:var(--dt-space-2) 0;" data-feedback-state="pending">💬 Feedback sent</div></div>`}function ee(e,t){return`<div class="bk-cards">${f(e).map(e=>{let t=e.badge?`<span class="bk-card-badge">${n(e.badge)}</span>`:``,r=e.body?`<div class="bk-card-body">${n(e.body)}</div>`:``,i=e.description?`<div class="bk-card-description">${n(e.description)}</div>`:``;return`<article class="bk-card" data-tone="${u(e.status)}"><div class="bk-card-header"><div class="bk-card-title">${n(e.title)}</div>${t}</div>${r}${i}</article>`}).join(``)}</div>`}const h=[`#3b82f6`,`#10b981`,`#f59e0b`,`#ef4444`,`#8b5cf6`,`#ec4899`,`#06b6d4`,`#84cc16`],te=new Set([`line`,`area`,`bar`,`horizontal-bar`,`pie`,`donut`,`sparkline`,`heatmap`]);function ne(e,t){let n=re(e),r=ue(n.headers,n.data);if(n.data.length===0||!te.has(n.chartType))return _(n.note,r);let i=ie(n);if(!i)return _(n.note,r);let a=n.chartType===`pie`||n.chartType===`donut`?[]:n.yKeys;return`<div class="bk-chart"><div class="bk-chart-surface">${i}</div>${a.length>1?fe(a):``}${de(r)}</div>`}function re(e){let t=o(e.value),r=Array.isArray(t?.data)?t.data:[],i=String(t?.chartType??e.chartType??`bar`),a=te.has(i)?i:`bar`,s=n(i),c=pe(r,String(t?.xKey??`label`)),l=Array.isArray(t?.yKeys)?t.yKeys.filter(e=>typeof e==`string`):[],u=l.length>0?l:[`value`];if(l.length===0&&r.length>0&&r[0]!=null){let e=r[0];if(!(`value`in e&&typeof e.value==`number`)){let t=Object.keys(e).filter(t=>t!==c&&typeof e[t]==`number`);t.length>0&&(u=t)}}let d=[c,...u.filter((e,t)=>e!==c&&u.indexOf(e)===t)];return{chartType:a,data:r,xKey:c,yKeys:u,headers:d,note:s}}function ie(e){switch(e.chartType){case`line`:case`area`:return ae(e,e.chartType===`area`);case`bar`:return oe(e);case`horizontal-bar`:return se(e);case`pie`:return g(e,!1);case`donut`:return g(e,!0);case`sparkline`:return ce(e);case`heatmap`:return le(e);default:return``}}function ae(e,t){let r=v(e.data,e.xKey,e.yKeys),i=r.flatMap(e=>e.values).filter(Number.isFinite);if(i.length===0)return``;let a=b(i),o=y(500,300,{left:60,right:20,top:20,bottom:40}),s=r.map((e,t)=>ye(t,r.length,o.left,o.right)),c=e.yKeys.map((e,n)=>{let i=h[n%h.length],c=r.map((e,t)=>{let r=s[t],i=x(e.values[n],a,o.bottom,o.top);return`${E(r)},${E(i)}`}),l=r.map((e,t)=>{let r=s[t],c=x(e.values[n],a,o.bottom,o.top);return`<circle cx="${E(r)}" cy="${E(c)}" r="3" fill="${i}" />`}).join(``),u=`<polyline fill="none" stroke="${i}" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round" points="${c.join(` `)}" />`;return t?`<polygon fill="${i}" fill-opacity="0.16" points="${[`${E(s[0])},${E(o.bottom)}`,...c,`${E(s[s.length-1])},${E(o.bottom)}`].join(` `)}" />${u}${l}`:`${u}${l}`}).join(``);return`<svg class="bk-chart-svg" viewBox="0 0 500 300" width="100%" preserveAspectRatio="xMidYMid meet" role="img" aria-label="${n(`${e.chartType} chart`)}">${he(o,a)}${_e(o)}${ve(r,s,o.bottom+18)}${c}</svg>`}function oe(e){let t=v(e.data,e.xKey,e.yKeys),n=t.flatMap(e=>e.values).filter(Number.isFinite);if(n.length===0)return``;let r=b(n,{includeZero:!0}),i=y(500,300,{left:60,right:20,top:20,bottom:40}),a=i.width/t.length,o=Math.max(4,Math.min(28,(a-12-4*(e.yKeys.length-1))/e.yKeys.length)),s=e.yKeys.length*o+(e.yKeys.length-1)*4,c=x(0,r,i.bottom,i.top),l=t.map((e,t)=>{let n=i.left+t*a+(a-s)/2;return e.values.map((e,t)=>{let a=h[t%h.length],s=n+t*(o+4),l=x(e,r,i.bottom,i.top),u=Math.min(l,c),d=Math.max(1,Math.abs(c-l));return`<rect x="${E(s)}" y="${E(u)}" width="${E(o)}" height="${E(d)}" rx="3" fill="${a}" />`}).join(``)}).join(``),u=t.map((e,t)=>i.left+t*a+a/2);return`<svg class="bk-chart-svg" viewBox="0 0 500 300" width="100%" preserveAspectRatio="xMidYMid meet" role="img" aria-label="bar chart">${he(i,r)}${_e(i)}${ve(t,u,i.bottom+18)}${l}</svg>`}function se(e){let t=v(e.data,e.xKey,e.yKeys),r=t.flatMap(e=>e.values).filter(Number.isFinite);if(r.length===0)return``;let i=b(r,{includeZero:!0}),a=y(500,300,{left:110,right:20,top:20,bottom:36}),o=a.height/t.length,s=Math.max(4,Math.min(18,(o-8-4*(e.yKeys.length-1))/e.yKeys.length)),c=e.yKeys.length*s+(e.yKeys.length-1)*4,l=x(0,i,a.left,a.right),u=t.map((e,t)=>{let r=a.top+t*o+(o-c)/2,u=a.top+t*o+o/2+4;return`${`<text class="bk-chart-label" x="${E(a.left-8)}" y="${E(u)}" text-anchor="end">${n(e.label)}</text>`}${e.values.map((e,t)=>{let n=h[t%h.length],o=r+t*(s+4),c=x(e,i,a.left,a.right),u=Math.min(l,c),d=Math.max(1,Math.abs(c-l));return`<rect x="${E(u)}" y="${E(o)}" width="${E(d)}" height="${E(s)}" rx="3" fill="${n}" />`}).join(``)}`}).join(``);return`<svg class="bk-chart-svg" viewBox="0 0 500 300" width="100%" preserveAspectRatio="xMidYMid meet" role="img" aria-label="horizontal bar chart">${ge(a,i)}<line class="bk-chart-axis" x1="${E(l)}" y1="${E(a.top)}" x2="${E(l)}" y2="${E(a.bottom)}" />${u}</svg>`}function g(e,t){let r=me(e.data,e.xKey,e.yKeys),i=e.data.map(t=>({label:C(t[e.xKey]),value:w(t[r])})).filter(e=>e.value>0);if(i.length===0)return``;let a=i.reduce((e,t)=>e+t.value,0);if(a<=0)return``;let o=t?88*.6:0,s=-90,c=[],l=[];i.forEach((e,r)=>{let i=h[r%h.length],u=e.value/a*360,d=s+u,f=e.value/a*100,p=t?xe(150,140,88,o,s,d):be(150,140,88,s,d);c.push(`${p?`<path d="${p}" fill="${i}" stroke="var(--dt-bg-secondary)" stroke-width="2" />`:`<circle cx="150" cy="140" r="88" fill="${i}" />`}`);let m=S(150,140,108,s+u/2);l.push(`<text class="bk-chart-slice-label" x="${E(m.x)}" y="${E(m.y)}" text-anchor="${m.x>=150?`start`:`end`}">${n(e.label)} ${n(T(f))}%</text>`),s=d});let u=t?`<circle cx="150" cy="140" r="${E(o-1)}" fill="var(--dt-bg-secondary)" />`:``;return`<svg class="bk-chart-svg" viewBox="0 0 300 300" width="100%" preserveAspectRatio="xMidYMid meet" role="img" aria-label="${t?`donut chart`:`pie chart`}">${c.join(``)}${u}${l.join(``)}</svg>`}function ce(e){let t=me(e.data,e.xKey,e.yKeys),n=e.data.map(e=>w(e[t]));if(n.every(e=>e===0))return``;let r=b(n),i=n.map((e,t)=>{let i=ye(t,n.length,0,100),a=x(e,r,28,2);return`${E(i)},${E(a)}`});return`<svg class="bk-chart-svg" viewBox="0 0 100 30" width="100%" height="30" preserveAspectRatio="none" role="img" aria-label="sparkline"><polyline fill="none" stroke="${h[0]}" stroke-width="2.25" stroke-linejoin="round" stroke-linecap="round" points="${i.join(` `)}" /></svg>`}function le(e){let t=e.data.map(t=>({label:C(t[e.xKey]),values:e.yKeys.map(e=>w(t[e]))})),r=t.flatMap(e=>e.values).filter(Number.isFinite);if(r.length===0)return``;let i=b(r),a=y(500,300,{left:80,right:20,top:42,bottom:20}),o=a.width/e.yKeys.length,s=a.height/t.length;return`<svg class="bk-chart-svg" viewBox="0 0 500 300" width="100%" preserveAspectRatio="xMidYMid meet" role="img" aria-label="heatmap chart">${e.yKeys.map((e,t)=>`<text class="bk-chart-label" x="${E(a.left+t*o+o/2)}" y="28" text-anchor="middle">${n(e)}</text>`).join(``)}${t.map((e,t)=>{let r=a.top+t*s+s/2+4;return`<text class="bk-chart-label" x="${E(a.left-8)}" y="${E(r)}" text-anchor="end">${n(e.label)}</text>`}).join(``)}${t.map((e,t)=>e.values.map((e,n)=>{let r=a.left+n*o,c=a.top+t*s;return`<rect x="${E(r)}" y="${E(c)}" width="${E(o-4)}" height="${E(s-4)}" rx="4" stroke="var(--dt-border-muted)" style="fill: ${Se(e,i)}" />`}).join(``)).join(``)}</svg>`}function ue(e,t){return`<div class="bk-chart-table-wrap"><table class="bk-chart-table"><thead><tr>${e.map(e=>`<th>${n(e)}</th>`).join(``)}</tr></thead><tbody>${t.map(t=>`<tr>${e.map(e=>`<td>${n(a(t[e]))}</td>`).join(``)}</tr>`).join(``)}</tbody></table></div>`}function _(e,t){return`<div class="bk-chart"><div class="bk-chart-note">Chart fallback (${e}) rendered as a data table.</div>${t}</div>`}function de(e){return`<details class="bk-chart-details"><summary>Show data</summary>${e}</details>`}function fe(e){return`<div class="bk-chart-legend">${e.map((e,t)=>`<span class="bk-chart-legend-item"><span class="bk-chart-legend-swatch" style="background:${h[t%h.length]}"></span>${n(e)}</span>`).join(``)}</div>`}function pe(e,t){if(e.length===0||t in e[0])return t;for(let t of e){let e=Object.keys(t).find(e=>typeof t[e]==`string`);if(e)return e}return t}function me(e,t,n){let r=n.find(n=>n!==t&&e.some(e=>Ce(e[n])));if(r)return r;for(let n of e){let e=Object.keys(n).find(e=>e!==t&&Ce(n[e]));if(e)return e}return n[0]??`value`}function v(e,t,n){return e.map(e=>({label:C(e[t]),values:n.map(t=>w(e[t]))}))}function he(e,t){return Array.from({length:5},(r,i)=>{let a=i/4,o=t.max-a*(t.max-t.min),s=e.top+a*e.height;return`<line class="bk-chart-grid" x1="${E(e.left)}" y1="${E(s)}" x2="${E(e.right)}" y2="${E(s)}" /><text class="bk-chart-label" x="${E(e.left-8)}" y="${E(s+4)}" text-anchor="end">${n(T(o))}</text>`}).join(``)}function ge(e,t){return Array.from({length:5},(r,i)=>{let a=i/4,o=t.min+a*(t.max-t.min),s=e.left+a*e.width;return`<line class="bk-chart-grid" x1="${E(s)}" y1="${E(e.top)}" x2="${E(s)}" y2="${E(e.bottom)}" /><text class="bk-chart-label" x="${E(s)}" y="${E(e.bottom+18)}" text-anchor="middle">${n(T(o))}</text>`}).join(``)}function _e(e){return`<line class="bk-chart-axis" x1="${E(e.left)}" y1="${E(e.top)}" x2="${E(e.left)}" y2="${E(e.bottom)}" /><line class="bk-chart-axis" x1="${E(e.left)}" y1="${E(e.bottom)}" x2="${E(e.right)}" y2="${E(e.bottom)}" />`}function ve(e,t,r){return e.map((e,i)=>`<text class="bk-chart-label" x="${E(t[i])}" y="${E(r)}" text-anchor="middle">${n(e.label)}</text>`).join(``)}function y(e,t,n){return{left:n.left,top:n.top,right:e-n.right,bottom:t-n.bottom,width:e-n.left-n.right,height:t-n.top-n.bottom}}function b(e,t){let n=Math.min(...e),r=Math.max(...e);if(t?.includeZero&&(n=Math.min(n,0),r=Math.max(r,0)),n===r){let e=n===0?1:Math.abs(n)*.1||1;n-=e,r+=e}return{min:n,max:r}}function ye(e,t,n,r){return t<=1?(n+r)/2:n+e/(t-1)*(r-n)}function x(e,t,n,r){return n+(e-t.min)/(t.max-t.min)*(r-n)}function be(e,t,n,r,i){if(Math.abs(i-r)>=359.999)return``;let a=S(e,t,n,r),o=S(e,t,n,i),s=+(i-r>180);return`M ${E(e)} ${E(t)} L ${E(a.x)} ${E(a.y)} A ${E(n)} ${E(n)} 0 ${s} 1 ${E(o.x)} ${E(o.y)} Z`}function xe(e,t,n,r,i,a){if(Math.abs(a-i)>=359.999)return``;let o=S(e,t,n,i),s=S(e,t,n,a),c=S(e,t,r,a),l=S(e,t,r,i),u=+(a-i>180);return[`M ${E(o.x)} ${E(o.y)}`,`A ${E(n)} ${E(n)} 0 ${u} 1 ${E(s.x)} ${E(s.y)}`,`L ${E(c.x)} ${E(c.y)}`,`A ${E(r)} ${E(r)} 0 ${u} 0 ${E(l.x)} ${E(l.y)}`,`Z`].join(` `)}function S(e,t,n,r){let i=(r-90)*Math.PI/180;return{x:e+n*Math.cos(i),y:t+n*Math.sin(i)}}function Se(e,t){let n=18+Math.max(0,Math.min(1,(e-t.min)/(t.max-t.min)))*64;return`color-mix(in srgb, var(--dt-bg-secondary) ${E(100-n)}%, var(--dt-accent-fg) ${E(n)}%)`}function C(e){return e==null?``:String(a(e))}function w(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`&&e.trim()!==``){let t=Number(e);if(Number.isFinite(t))return t}return 0}function Ce(e){return typeof e==`number`?Number.isFinite(e):typeof e==`string`&&e.trim()!==``&&Number.isFinite(Number(e))}function T(e){return String(a(Number(e.toFixed(2))))}function E(e){return Number(e.toFixed(2)).toString()}function we(e,t){return`<ul class="bk-checklist">${f(e).map(e=>{let t=!!e.checked;return`<li class="bk-checklist-item" data-checked="${String(t)}"><span class="bk-checklist-icon">${t?`✓`:`×`}</span><span class="bk-checklist-label">${n(e.label)}</span></li>`}).join(``)}</ul>`}function Te(e,t){let r=e.language?` language-${i(String(e.language))}`:``,a=e.value??``,o=typeof a==`object`&&a?JSON.stringify(a,null,2):String(a);return`<pre class="bk-code"><code class="${r.trim()}">${n(o)}</code></pre>`}function Ee(e){let t=o(e);return Array.isArray(t)?t:t&&typeof t==`object`&&Array.isArray(t.columns)?t.columns:[]}function De(e,t){return`<div class="bk-comparison">${Ee(e.value).map(e=>{let t=e.items.map(e=>`<li>${n(e)}</li>`).join(``);return`<section class="bk-comparison-column"><div class="bk-comparison-title">${n(e.title)}</div><ul class="bk-comparison-items">${t}</ul></section>`}).join(``)}</div>`}function Oe(e){let t=o(e);if(t&&typeof t==`object`){let e=t;return{name:typeof e.name==`string`?e.name:`Untitled component`,description:typeof e.description==`string`?e.description:void 0,type:typeof e.type==`string`?e.type:void 0,technology:typeof e.technology==`string`?e.technology:void 0,responsibilities:Array.isArray(e.responsibilities)?e.responsibilities.map(String).filter(Boolean):[],interfaces:Array.isArray(e.interfaces)?e.interfaces:[],dependencies:Array.isArray(e.dependencies)?e.dependencies:[],metrics:e.metrics&&typeof e.metrics==`object`?e.metrics:void 0,codeLinks:Array.isArray(e.codeLinks)?e.codeLinks:[]}}return{name:`Untitled component`}}function ke(e){return e.length===0?``:`<details class="bk-component-detail-section" open><summary class="bk-component-detail-summary">Responsibilities</summary><ul class="bk-component-detail-list">${e.map(e=>`<li>${n(e)}</li>`).join(``)}</ul></details>`}function Ae(e){return e.length===0?``:`<details class="bk-component-detail-section" open><summary class="bk-component-detail-summary">Interfaces</summary><div class="bk-component-detail-table-wrap"><table class="bk-component-detail-table"><thead><tr><th>Name</th><th>Type</th><th>Description</th></tr></thead><tbody>${e.map(e=>`<tr><td class="bk-component-detail-code">${n(e.name)}</td><td class="bk-component-detail-code">${n(e.type)}</td><td>${n(e.description??``)}</td></tr>`).join(``)}</tbody></table></div></details>`}function je(e){return e.length===0?``:`<details class="bk-component-detail-section" open><summary class="bk-component-detail-summary">Dependencies</summary><ul class="bk-component-detail-dependencies">${e.map(e=>`<li class="bk-component-detail-dependency"><span class="bk-component-detail-dependency-name">${n(e.name)}</span>${e.relationship?`<span class="bk-component-detail-dependency-relationship">${n(e.relationship)}</span>`:``}</li>`).join(``)}</ul></details>`}function Me(e){let t=Object.entries(e??{});return t.length===0?``:`<details class="bk-component-detail-section" open><summary class="bk-component-detail-summary">Metrics</summary><div class="bk-component-detail-metrics">${t.map(([e,t])=>`<div class="bk-component-detail-metric"><span class="bk-component-detail-metric-label">${n(e)}</span><strong class="bk-component-detail-metric-value">${n(String(t))}</strong></div>`).join(``)}</div></details>`}function Ne(e){let t=Array.isArray(e.codeLinks)?e.codeLinks:[];return t.length===0?``:`<details class="bk-component-detail-section" open><summary class="bk-component-detail-summary">Code Links</summary><div class="bk-component-detail-links">${t.map(e=>`<a class="bk-component-detail-link" href="${r(e.href)}">${n(e.label)}</a>`).join(``)}</div></details>`}function Pe(e,t){let r=Oe(e.value),i=r.description?`<p class="bk-component-detail-description">${n(r.description)}</p>`:``,a=r.type?`<span class="bk-component-detail-badge">${n(r.type)}</span>`:``,o=r.technology?`<span class="bk-component-detail-tech">${n(r.technology)}</span>`:``,s=[ke(r.responsibilities??[]),Ae(r.interfaces??[]),je(r.dependencies??[]),Me(r.metrics),Ne(r)].join(``);return`<article class="bk-component-detail"><header class="bk-component-detail-header"><div class="bk-component-detail-heading"><h4 class="bk-component-detail-name">${n(r.name)}</h4>${a}${o}</div>${i}</header><div class="bk-component-detail-body">${s}</div></article>`}function Fe(e){let t=o(e);if(t&&typeof t==`object`){let e=t;return{name:typeof e.name==`string`?e.name:`unnamed_schema`,description:typeof e.description==`string`?e.description:void 0,fields:Array.isArray(e.fields)?e.fields:[],indexes:Array.isArray(e.indexes)?e.indexes:[]}}return{name:`unnamed_schema`,fields:[]}}function Ie(e){return Array.isArray(e.constraints)&&e.constraints.includes(`primary-key`)}function Le(e){return e.startsWith(`foreign-key:`)?`<a class="bk-data-table-schema-badge bk-data-table-schema-badge--link" href="${r(`#${i(e.slice(12).replace(/\./g,`_`))}`)}">${n(e)}</a>`:`<span class="bk-data-table-schema-badge${e===`primary-key`?` bk-data-table-schema-badge--primary`:``}">${n(e)}</span>`}function Re(e){return e.length===0?``:`<section class="bk-data-table-schema-indexes"><h5 class="bk-data-table-schema-subtitle">Indexes</h5><div class="bk-data-table-schema-index-grid">${e.map(e=>`<article class="bk-data-table-schema-index"><div class="bk-data-table-schema-index-name">${n(e.name)}</div><div class="bk-data-table-schema-index-columns">${n(e.columns.join(`, `))}</div><div class="bk-data-table-schema-index-meta">${e.unique?`Unique`:`Standard`}</div></article>`).join(``)}</div></section>`}function ze(e,t){let r=Fe(e.value),a=r.description?`<p class="bk-data-table-schema-description">${n(r.description)}</p>`:``;if(!Array.isArray(r.fields)||r.fields.length===0)return`<section class="bk-data-table-schema"><header class="bk-data-table-schema-header"><h4 class="bk-data-table-schema-title">${n(r.name)}</h4>${a}</header><p class="bk-data-table-schema-empty">No schema fields available.</p></section>`;let o=r.fields.map(e=>{let t=Array.isArray(e.constraints)?e.constraints:[],a=t.length>0?t.map(e=>Le(e)).join(``):`<span class="bk-data-table-schema-badge">none</span>`;return`<tr class="bk-data-table-schema-row${Ie(e)?` bk-data-table-schema-row--primary`:``}" id="${i(`${r.name}_${e.name}`)}"><td class="bk-data-table-schema-code">${n(e.name)}</td><td class="bk-data-table-schema-code">${n(e.type)}</td><td class="bk-data-table-schema-required">${e.required?`✓`:`—`}</td><td><div class="bk-data-table-schema-constraints">${a}</div></td><td class="bk-data-table-schema-code">${n(e.default??`—`)}</td><td>${n(e.description??``)}</td></tr>`}).join(``);return`<section class="bk-data-table-schema"><header class="bk-data-table-schema-header"><h4 class="bk-data-table-schema-title">${n(r.name)}</h4>${a}</header><div class="bk-data-table-schema-wrap"><table class="bk-data-table-schema-table"><thead><tr><th>Field Name</th><th>Type</th><th>Required</th><th>Constraints</th><th>Default</th><th>Description</th></tr></thead><tbody>${o}</tbody></table></div>${Re(r.indexes??[])}</section>`}function Be(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`){let t=e;if(typeof t.content==`string`)return t.content;if(typeof t.before==`string`&&typeof t.after==`string`)return Ve(t.before,t.after)}return``}function Ve(e,t){let n=e.split(`
2
2
  `),r=t.split(`
3
3
  `),i=[`@@ -1,${n.length} +1,${r.length} @@`];for(let e of n)i.push(`-${e}`);for(let e of r)i.push(`+${e}`);return i.join(`
4
4
  `)}function He(e,t){let r=Be(e.value);if(!r)return`<div class="bk-diff"></div>`;let i=r.split(`
@@ -76,7 +76,8 @@ ${O}
76
76
  .bk-form fieldset { border: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: var(--dt-space-3); }
77
77
  .bk-form-field { display: flex; flex-direction: column; gap: var(--dt-space-1); }
78
78
  .bk-form-label { font-size: 0.875rem; font-weight: 500; color: var(--dt-text-secondary); }
79
-
79
+ .bk-action-feedback { font-size: 0.875rem; color: var(--dt-text-secondary); padding: var(--dt-space-2) 0; }
80
+ .bk-action-feedback[data-feedback-state="sent"] { color: var(--dt-success-fg, #16a34a); }
80
81
  `,cards:`
81
82
  .bk-cards {
82
83
  display: grid;