faf 6.11.0 → 6.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -210,7 +210,7 @@ Rendered on-demand from your current <strong>${C0(U)}</strong><br>
210
210
  </div>
211
211
  </body>
212
212
  </html>
213
- `}function GJ($,Z,U,z="project.faf"){ZJ(UJ($,"project.html"),U8(Z,U,z),"utf-8")}import{writeFileSync as YJ}from"fs";import{join as BJ}from"path";var z8="application/vnd.faf+yaml",VJ="https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",WJ=/^[a-zA-Z0-9.-]+\/[a-zA-Z0-9._-]+$/;function Q8($){let Z=String($.project?.name??"project").trim();if(Z.includes("/")&&WJ.test(Z))return Z;let U=$.project?.homepage??$.project?.website??$.project?.url,z="local";if(U)try{z=new URL(U).hostname.replace(/^www\./,"").split(".").reverse().join(".")}catch{}let X=Z.replace(/[^a-zA-Z0-9._-]/g,"-").replace(/^-+|-+$/g,"")||"project";return`${z}/${X}`}function LJ($){let Z=String($.project?.goal??$.context??$.project?.name??"MCP server").replace(/\s+/g," ").trim();if(!Z)return"MCP server";return Z.length<=100?Z:Z.slice(0,97).trimEnd()+"..."}function K2($,Z={}){return{faf:Z.fafPointer??"./project.faf",mediaType:z8,iana:`https://www.iana.org/assignments/media-types/${z8}`,deterministic:!0,generated:$.generated??Z.now??new Date().toISOString()}}function J8($,Z={}){let U={$schema:VJ,name:Q8($),version:String($.project?.version??"0.1.0"),description:LJ($)},z=$.project?.name;if(z&&z.length<=100)U.title=z;let X=$.project?.homepage??$.project?.website??$.project?.url;if(X)U.websiteUrl=X;if(Z.remoteUrl)U.remotes=[{type:"streamable-http",url:Z.remoteUrl}];return U._meta={"one.faf/context":K2($,Z)},U}var q8="io.modelcontextprotocol.registry/publisher-provided",X8=4096;function OJ($,Z={}){let U={"one.faf/context":K2($,Z)},z=new TextEncoder().encode(JSON.stringify(U)).length;if(z>X8)throw Error(`publisher-provided _meta is ${z}B — exceeds the registry ${X8}B cap`);return{[q8]:U}}function DJ($){return Q8($)}function _J($,Z,U={}){let z=J8(Z,U),X=BJ($,"server-card");return YJ(X,JSON.stringify(z,null,2)+`
213
+ `}function GJ($,Z,U,z="project.faf"){ZJ(UJ($,"project.html"),U8(Z,U,z),"utf-8")}import{writeFileSync as YJ}from"fs";import{join as BJ}from"path";var z8="application/vnd.faf+yaml",VJ="https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",WJ=/^[a-zA-Z0-9.-]+\/[a-zA-Z0-9._-]+$/;function Q8($){let Z=String($.project?.name??"project").trim();if(Z.includes("/")&&WJ.test(Z))return Z;let U=$.project?.homepage??$.project?.website??$.project?.url,z="local";if(U)try{z=new URL(U).hostname.replace(/^www\./,"").split(".").reverse().join(".")}catch{}let X=Z.replace(/[^a-zA-Z0-9._-]/g,"-").replace(/^-+|-+$/g,"")||"project";return`${z}/${X}`}function LJ($){let Z=String($.project?.goal??$.context??$.project?.name??"MCP server").replace(/\s+/g," ").trim();if(!Z)return"MCP server";return Z.length<=100?Z:Z.slice(0,97).trimEnd()+"..."}function K2($,Z={}){return{faf:Z.fafPointer??"./project.faf",mediaType:z8,iana:`https://www.iana.org/assignments/media-types/${z8}`,deterministic:!0,...Z.scoreEndpoint?{scoreEndpoint:Z.scoreEndpoint}:{},generated:$.generated??Z.now??new Date().toISOString()}}function J8($,Z={}){let U={$schema:VJ,name:Q8($),version:String($.project?.version??"0.1.0"),description:LJ($)},z=$.project?.name;if(z&&z.length<=100)U.title=z;let X=$.project?.homepage??$.project?.website??$.project?.url;if(X)U.websiteUrl=X;if(Z.remoteUrl)U.remotes=[{type:"streamable-http",url:Z.remoteUrl}];return U._meta={"one.faf/context":K2($,Z)},U}var q8="io.modelcontextprotocol.registry/publisher-provided",X8=4096;function OJ($,Z={}){let U={"one.faf/context":K2($,Z)},z=new TextEncoder().encode(JSON.stringify(U)).length;if(z>X8)throw Error(`publisher-provided _meta is ${z}B — exceeds the registry ${X8}B cap`);return{[q8]:U}}function DJ($){return Q8($)}function _J($,Z,U={}){let z=J8(Z,U),X=BJ($,"server-card");return YJ(X,JSON.stringify(z,null,2)+`
214
214
  `,"utf-8"),X}var V8="faf-interview/1",j0="(terse — 3-4 words)",A2=[{path:"project.name",question:"What is the name of this project?",header:"Name",type:"text",required:!0},{path:"project.goal",question:"What does this project do? (one sentence)",header:"Goal",type:"text",required:!0},{path:"human_context.who",question:`Who is this for? ${j0}`,header:"Who",type:"text",required:!0},{path:"human_context.what",question:`What are they building? ${j0}`,header:"What",type:"text",required:!0},{path:"human_context.why",question:`Why does it exist? ${j0}`,header:"Why",type:"text",required:!0},{path:"human_context.where",question:`Where does it run or ship? ${j0}`,header:"Where",type:"text",required:!0},{path:"human_context.when",question:`When — timeline or stage? ${j0}`,header:"When",type:"text",required:!0},{path:"human_context.how",question:`How is it built or used? ${j0}`,header:"How",type:"text",required:!0}],W8=[{path:"project.main_language",question:"What is the primary programming language?",header:"Language",type:"select",required:!0,options:[{label:"TypeScript",value:"TypeScript",description:"JavaScript with types"},{label:"JavaScript",value:"JavaScript",description:"Vanilla JS or Node.js"},{label:"Python",value:"Python",description:"Python 3.x"},{label:"Rust",value:"Rust",description:"Systems programming"},{label:"Go",value:"Go",description:"Golang"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.frontend",question:"What frontend framework does it use?",header:"Frontend",type:"select",required:!1,options:[{label:"React",value:"React",description:"React.js"},{label:"Vue",value:"Vue",description:"Vue.js"},{label:"Svelte",value:"Svelte",description:"Svelte/SvelteKit"},{label:"Next.js",value:"Next.js",description:"React framework"},{label:"None",value:"None",description:"No frontend"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.backend",question:"What backend framework does it use?",header:"Backend",type:"select",required:!1,options:[{label:"Express",value:"Express",description:"Node.js Express"},{label:"Fastify",value:"Fastify",description:"Node.js Fastify"},{label:"Django",value:"Django",description:"Python Django"},{label:"FastAPI",value:"FastAPI",description:"Python FastAPI"},{label:"None",value:"None",description:"No backend"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.database",question:"What database does it use?",header:"Database",type:"select",required:!1,options:[{label:"PostgreSQL",value:"PostgreSQL",description:"Postgres"},{label:"MySQL",value:"MySQL",description:"MySQL/MariaDB"},{label:"SQLite",value:"SQLite",description:"Embedded SQL"},{label:"MongoDB",value:"MongoDB",description:"Document store"},{label:"None",value:"None",description:"No database"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.runtime",question:"What runtime does it run on?",header:"Runtime",type:"text",required:!1},{path:"stack.hosting",question:"Where is it hosted or distributed?",header:"Hosting",type:"text",required:!1},{path:"stack.build",question:"What is the build tool?",header:"Build",type:"text",required:!1},{path:"stack.cicd",question:"What CI/CD does it use?",header:"CI/CD",type:"text",required:!1}],z9=[...A2,...W8],L8=new Map(z9.map(($)=>[$.path,$])),IJ=Object.fromEntries(z9.map(($)=>[$.path,$]));function RJ($){let Z=L8.get($);if(Z)return Z.question;let U=J9.get($)??f.find((z)=>z.canonical===$);return U?`${U.description}?`.replace(/\?\?$/,"?"):`${$}?`}function MJ($,Z){return z9.filter((U)=>{let z=U.path.split("."),X=$;for(let Q of z)if(X&&typeof X==="object"&&Q in X)X=X[Q];else{X=void 0;break}if(X==="slotignored")return!1;return Z(X)})}var PJ=new Set(["developers","development teams","development team","teams","development","cloud platform","web platform","platform","best practices","improve development efficiency","development efficiency","modern development practices","modern development","test-driven development","production/stable","production","stable","app","project","tool"]),TJ=[["npm",/\bnpm\b/i],["PyPI",/\bpypi\b/i],["crates.io",/\bcrates\.io\b/i],["Homebrew",/\bhomebrew\b/i],["Docker",/\bdocker\b/i],["Cloudflare",/\bcloudflare\b/i],["Vercel",/\bvercel\b/i],["Netlify",/\bnetlify\b/i],["AWS",/\baws\b/i],["Cloud Run",/\bcloud run\b/i],["edge",/\bedge\b/i],["browser",/\bbrowser\b/i],["WASM",/\bwasm\b/i],["GitHub",/\bgithub\b/i],["MCP Registry",/\bmcp registry\b/i],["Chrome Web Store",/\bchrome web store\b/i],["Smithery",/\bsmithery\b/i]],H8=($)=>PJ.has($.toLowerCase().trim()),FJ=/^(?:with|and|or|using|for|to|that|who|whom|whose|the|a|an|in|on|of|via|by|&)$/i;function G8($,Z=5){let U=$.trim().split(/\s+/).filter(Boolean).slice(0,Z);while(U.length&&FJ.test(U[U.length-1].replace(/[.,;:]+$/,"")))U.pop();return U.join(" ")}function O8($){let Z={};if(!$||typeof $!=="string")return Z;let U=$.trim(),z=U.replace(/^[^A-Za-z0-9]+/,"").split(/\s+(?:for|that|which|to)\s+|\s+[—–]\s+|\s-\s|:\s|\.\s|,\s/)[0].trim(),X=G8(z);if(X.split(/\s+/).filter(Boolean).length>=2&&!H8(X))Z.what=X;let Q=TJ.filter(([,H])=>H.test(U)).map(([H])=>H);if(Q.length)Z.where=Q.slice(0,4).join(", ");let J=U.match(/\bfor ((?:[A-Za-z][\w./+-]* )?(?:any |all )?(?:developers?|teams?|engineers?|builders?|users?|integrators?)\b[^.,;:—]*)/i),q=G8((J?.[1]||"").trim().replace(/\s+/g," "));if(q&&!H8(q))Z.who=q;return Z}function Y8($,Z){let U=$;for(let z of Z.split("."))if(U&&typeof U==="object"&&z in U)U=U[z];else return;return U}function B8($){if(typeof $!=="string")return!1;let Z=$.trim();if(!Z||Z==="slotignored")return!1;return!y0(Z)}function KJ($,Z={}){let U=$&&typeof $==="object"?$:{},z=Y8(U,"project.goal"),X=(B8(z)?String(z).trim():"")||(Z.goal??"").trim(),Q=O8(X),J={"project.goal":X||void 0,"human_context.what":Q.what,"human_context.where":Q.where,"human_context.who":Q.who},q=A2.map((Y,B)=>{let O={n:B+1,path:Y.path,header:Y.header,question:Y.question},D=Y8(U,Y.path);if(B8(D))return{...O,value:String(D).trim(),status:"filled",seeded:!1};let V=J[Y.path];if(V)return{...O,value:V,status:"seeded",seeded:!0};return{...O,value:"",status:"empty",seeded:!1}}),H=q.filter((Y)=>Y.status==="filled").length,G=q.filter((Y)=>Y.status==="seeded").length,W=q.filter((Y)=>Y.status==="empty").length;return{version:V8,rows:q,filledCount:H,seededCount:G,emptyCount:W,complete:W===0}}import{createHash as _8}from"crypto";var N2="faf-bench/1",AJ={"project.name":"What is the project's name?","project.goal":"What is the project's goal — what is it for?","project.main_language":"What is the primary programming language?","human_context.who":"Who is this project for?","human_context.what":"What are they building?","human_context.why":"Why does this project exist?","human_context.where":"Where does it run or get distributed?","human_context.when":"When — what is the project's timeline or stage?","human_context.how":"How is it built or used?"};function NJ($,Z){return AJ[$]??`What is the project's ${Z.replace(/\s*\(.*\)$/,"").toLowerCase()}?`}var I8=[["typescript","ts"],["javascript","js"],["python","py","python3"],["node","nodejs","node js","node.js"],["github actions","gh actions","actions"],["postgresql","postgres","pg"],["kubernetes","k8s"],["npm","npm registry"],["cloudflare workers","cf workers","workers"],["google cloud run","cloud run","gcp cloud run"]],G$=new Map;I8.forEach(($,Z)=>$.forEach((U)=>G$.set(U,Z)));var wJ=new Set(["a","an","the","and","or","of","for","to","in","on","with","is","it","its","their","your","via","by","using","use","used"]);function X9($){return $.toLowerCase().replace(/[^a-z0-9\s.+#-]/g," ").replace(/\.(?=\s|$)/g," ").replace(/\s+/g," ").trim()}function D8($){return X9($).split(" ").filter((Z)=>Z&&!wJ.has(Z))}function R8($,Z){let U=X9($),z=X9(Z);if(!U||!z)return!1;if(U===z)return!0;let X=G$.get(U);if(X!==void 0&&G$.get(z)===X)return!0;let Q=D8($);if(Q.length===0)return!1;let J=new Set(D8(Z));return Q.every((q)=>{if(J.has(q))return!0;let H=G$.get(q);return H!==void 0&&[...J].some((G)=>G$.get(G)===H)})}function bJ($){let Z=V9($),U=H$($),z=[],X={},Q=0;for(let H of f){if(Z.slots[H.path]!=="populated")continue;let G=h2(U,H);if(typeof G!=="string")continue;let W=G.trim();if(!W||V$.has(W.toLowerCase()))continue;Q+=1,z.push({n:Q,path:H.path,question:NJ(H.path,H.description)}),X[Q]=W}let J=JSON.stringify({v:N2,q:z.map((H)=>[H.path,H.question])}),q=_8("sha256").update(J).digest("hex").slice(0,12);return{version:N2,qsetHash:q,questions:z,answers:X}}function CJ($){return{version:$.version,qsetHash:$.qsetHash,questions:$.questions}}function jJ($,Z){let U=$.questions.map((X)=>{let Q=Z[String(X.n)]??Z[X.path]??"";return{n:X.n,path:X.path,ok:typeof Q==="string"&&Q.trim()!==""&&R8($.answers[X.n],Q)}}),z=$.questions.filter((X)=>!U[X.n-1].ok);return{correct:U.filter((X)=>X.ok).length,total:$.questions.length,misses:z,perQuestion:U}}function SJ($,Z){let U=JSON.stringify({v:$.version,repo:Z??null,qset:$.qsetHash,protocol:$.protocol,cold:$.cold??null,faf:$.faf??null});return{projection:U,hash:_8("sha256").update(U).digest("hex")}}import{existsSync as EJ,readdirSync as M8,readFileSync as gJ}from"fs";import{join as b2,dirname as yJ,extname as fJ,resolve as xJ}from"path";var w2={"package.json":{frameworks:["Node.js","JavaScript","TypeScript"],slots:{packageManager:"npm/yarn/pnpm",mainLanguage:"JavaScript/TypeScript"},priority:35,intelligence:"ultra-high"},"README.md":{frameworks:[],slots:{targetUser:"developers",coreProblem:"understanding project",missionPurpose:"project documentation"},priority:25,intelligence:"high"},"requirements.txt":{frameworks:["Python"],slots:{packageManager:"pip",mainLanguage:"Python"},priority:35,intelligence:"ultra-high"},Pipfile:{frameworks:["Python"],slots:{packageManager:"pipenv",mainLanguage:"Python"},priority:35,intelligence:"ultra-high"},"pyproject.toml":{frameworks:["Python"],slots:{mainLanguage:"Python",runtime:"Python",backend:"Python"},priority:36,intelligence:"ultra-high"},Gemfile:{frameworks:["Ruby","Rails"],slots:{packageManager:"bundler",mainLanguage:"Ruby"},priority:35,intelligence:"ultra-high"},"composer.json":{frameworks:["PHP","Laravel","Symfony"],slots:{packageManager:"composer",mainLanguage:"PHP"},priority:35,intelligence:"ultra-high"},"Cargo.toml":{frameworks:["Rust"],slots:{packageManager:"cargo",mainLanguage:"Rust",buildTool:"cargo"},priority:36,intelligence:"ultra-high"},"go.mod":{frameworks:["Go"],slots:{packageManager:"go modules",mainLanguage:"Go",buildTool:"go build"},priority:36,intelligence:"ultra-high"},"pubspec.yaml":{frameworks:["Flutter","Dart"],slots:{packageManager:"pub",mainLanguage:"Dart",framework:"Flutter"},priority:35,intelligence:"ultra-high"},"pom.xml":{frameworks:["Java","Spring","Maven"],slots:{packageManager:"maven",mainLanguage:"Java",buildTool:"maven"},priority:35,intelligence:"ultra-high"},"build.gradle":{frameworks:["Java","Kotlin","Spring","Gradle"],slots:{packageManager:"gradle",mainLanguage:"Java/Kotlin",buildTool:"gradle"},priority:35,intelligence:"ultra-high"},"next.config.js":{frameworks:["Next.js"],slots:{framework:"Next.js",runtime:"Node.js",buildTool:"Next.js",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"next.config.mjs":{frameworks:["Next.js"],slots:{framework:"Next.js",runtime:"Node.js",buildTool:"Next.js",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"next.config.ts":{frameworks:["Next.js 13+"],slots:{framework:"Next.js 13+",runtime:"Node.js",buildTool:"Next.js",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"nuxt.config.js":{frameworks:["Nuxt 2"],slots:{framework:"Nuxt 2",runtime:"Node.js",buildTool:"Nuxt",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"nuxt.config.ts":{frameworks:["Nuxt 3"],slots:{framework:"Nuxt 3",runtime:"Node.js",buildTool:"Nuxt",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"svelte.config.js":{frameworks:["SvelteKit"],slots:{framework:"SvelteKit",buildTool:"Vite",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"angular.json":{frameworks:["Angular"],slots:{framework:"Angular",buildTool:"Angular CLI",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"manifest.json":{frameworks:["Chrome Extension","Browser Extension"],slots:{framework:"Chrome Extension",runtime:"Chrome/Browser",mainLanguage:"JavaScript",hosting:"Chrome Web Store",apiType:"Chrome APIs"},priority:35,intelligence:"ultra-high",confirmWith:["popup.html","background.js","content.js"]},"vue.config.js":{frameworks:["Vue"],slots:{framework:"Vue",buildTool:"Vue CLI",mainLanguage:"JavaScript"},priority:30,intelligence:"high"},"remix.config.js":{frameworks:["Remix"],slots:{framework:"Remix",runtime:"Node.js",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"gatsby-config.js":{frameworks:["Gatsby"],slots:{framework:"Gatsby",buildTool:"Gatsby",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"gatsby-config.ts":{frameworks:["Gatsby"],slots:{framework:"Gatsby",buildTool:"Gatsby",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"astro.config.mjs":{frameworks:["Astro"],slots:{framework:"Astro",buildTool:"Vite",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"redwood.toml":{frameworks:["RedwoodJS"],slots:{framework:"RedwoodJS",buildTool:"Webpack",mainLanguage:"JavaScript/TypeScript",server:"Node.js",database:"Prisma"},priority:30,intelligence:"high"},"blitz.config.ts":{frameworks:["Blitz.js"],slots:{framework:"Blitz.js",buildTool:"Next.js",mainLanguage:"TypeScript",server:"Node.js",database:"Prisma"},priority:30,intelligence:"high"},"qwik.config.ts":{frameworks:["Qwik"],slots:{framework:"Qwik",buildTool:"Vite",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"manage.py":{frameworks:["Django"],slots:{framework:"Django",backend:"Django",mainLanguage:"Python",server:"Django",apiType:"Django Views"},priority:30,intelligence:"high"},artisan:{frameworks:["Laravel"],slots:{framework:"Laravel",backend:"Laravel",mainLanguage:"PHP",server:"PHP",apiType:"Laravel Routes"},priority:30,intelligence:"high"},"mix.exs":{frameworks:["Phoenix","Elixir"],slots:{framework:"Phoenix",backend:"Phoenix",mainLanguage:"Elixir",server:"BEAM"},priority:30,intelligence:"high"},"nest-cli.json":{frameworks:["NestJS"],slots:{framework:"NestJS",backend:"NestJS",mainLanguage:"TypeScript",server:"Node.js",apiType:"REST API"},priority:30,intelligence:"high"},"strapi.config.js":{frameworks:["Strapi"],slots:{backend:"Strapi",apiType:"REST API",database:"Required",server:"Node.js"},priority:30,intelligence:"high"},Dockerfile:{frameworks:["Docker"],slots:{hosting:"Docker",connection:"Containerized"},priority:30,intelligence:"high"},"docker-compose.yml":{frameworks:["Docker Compose"],slots:{hosting:"Docker",connection:"Multi-container"},priority:30,intelligence:"high"},"docker-compose.yaml":{frameworks:["Docker Compose"],slots:{hosting:"Docker",connection:"Multi-container"},priority:30,intelligence:"high"},"kubernetes.yml":{frameworks:["Kubernetes"],slots:{hosting:"Kubernetes",connection:"Orchestrated"},priority:30,intelligence:"high"},"k8s.yaml":{frameworks:["Kubernetes"],slots:{hosting:"Kubernetes",connection:"Orchestrated"},priority:30,intelligence:"high"},"vercel.json":{frameworks:["Vercel"],slots:{hosting:"Vercel",cicd:"Vercel"},priority:30,intelligence:"high"},"netlify.toml":{frameworks:["Netlify"],slots:{hosting:"Netlify",cicd:"Netlify"},priority:30,intelligence:"high"},"render.yaml":{frameworks:["Render"],slots:{hosting:"Render",cicd:"Render"},priority:30,intelligence:"high"},"fly.toml":{frameworks:["Fly.io"],slots:{hosting:"Fly.io",cicd:"Fly.io"},priority:30,intelligence:"high"},"railway.json":{frameworks:["Railway"],slots:{hosting:"Railway",cicd:"Railway"},priority:30,intelligence:"high"},"railway.toml":{frameworks:["Railway"],slots:{hosting:"Railway",cicd:"Railway"},priority:30,intelligence:"high"},"app.yaml":{frameworks:["Google App Engine"],slots:{hosting:"Google Cloud",cicd:"Google Cloud"},priority:30,intelligence:"high"},Procfile:{frameworks:["Heroku"],slots:{hosting:"Heroku",cicd:"Heroku"},priority:30,intelligence:"high"},"vite.config.js":{frameworks:["Vite"],slots:{buildTool:"Vite"},priority:25,intelligence:"medium"},"vite.config.ts":{frameworks:["Vite"],slots:{buildTool:"Vite",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"webpack.config.js":{frameworks:["Webpack"],slots:{buildTool:"Webpack"},priority:25,intelligence:"medium"},"rollup.config.js":{frameworks:["Rollup"],slots:{buildTool:"Rollup"},priority:25,intelligence:"medium"},"esbuild.config.js":{frameworks:["esbuild"],slots:{buildTool:"esbuild"},priority:25,intelligence:"medium"},"parcel.config.js":{frameworks:["Parcel"],slots:{buildTool:"Parcel"},priority:25,intelligence:"medium"},"snowpack.config.js":{frameworks:["Snowpack"],slots:{buildTool:"Snowpack"},priority:25,intelligence:"medium"},"tsconfig.json":{frameworks:["TypeScript"],slots:{mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"jsconfig.json":{frameworks:["JavaScript"],slots:{mainLanguage:"JavaScript"},priority:20,intelligence:"medium"},"babel.config.js":{frameworks:["Babel"],slots:{buildTool:"Babel"},priority:20,intelligence:"medium"},".babelrc":{frameworks:["Babel"],slots:{buildTool:"Babel"},priority:20,intelligence:"medium"},"jest.config.js":{frameworks:["Jest"],slots:{cicd:"Jest"},priority:25,intelligence:"medium"},"jest.config.ts":{frameworks:["Jest"],slots:{cicd:"Jest",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"vitest.config.ts":{frameworks:["Vitest"],slots:{cicd:"Vitest",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"cypress.config.js":{frameworks:["Cypress"],slots:{cicd:"Cypress"},priority:25,intelligence:"medium"},"playwright.config.ts":{frameworks:["Playwright"],slots:{cicd:"Playwright",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"karma.conf.js":{frameworks:["Karma"],slots:{cicd:"Karma"},priority:20,intelligence:"medium"},"mocha.opts":{frameworks:["Mocha"],slots:{cicd:"Mocha"},priority:20,intelligence:"medium"},".rspec":{frameworks:["RSpec"],slots:{cicd:"RSpec",mainLanguage:"Ruby"},priority:25,intelligence:"medium"},"pytest.ini":{frameworks:["Pytest"],slots:{cicd:"Pytest",mainLanguage:"Python"},priority:25,intelligence:"medium"},"phpunit.xml":{frameworks:["PHPUnit"],slots:{cicd:"PHPUnit",mainLanguage:"PHP"},priority:25,intelligence:"medium"},"schema.prisma":{frameworks:["Prisma"],slots:{database:"Prisma ORM",connection:"Prisma"},priority:25,intelligence:"medium"},"drizzle.config.ts":{frameworks:["Drizzle"],slots:{database:"Drizzle ORM",connection:"Drizzle",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"ormconfig.js":{frameworks:["TypeORM"],slots:{database:"TypeORM",connection:"TypeORM"},priority:25,intelligence:"medium"},"knexfile.js":{frameworks:["Knex.js"],slots:{database:"Knex.js",connection:"Knex.js"},priority:25,intelligence:"medium"},"sequelize.config.js":{frameworks:["Sequelize"],slots:{database:"Sequelize",connection:"Sequelize"},priority:25,intelligence:"medium"},"alembic.ini":{frameworks:["Alembic"],slots:{database:"Alembic",mainLanguage:"Python"},priority:25,intelligence:"medium"},".github/workflows":{frameworks:["GitHub Actions"],slots:{cicd:"GitHub Actions"},priority:25,intelligence:"medium"},".gitlab-ci.yml":{frameworks:["GitLab CI"],slots:{cicd:"GitLab CI"},priority:25,intelligence:"medium"},Jenkinsfile:{frameworks:["Jenkins"],slots:{cicd:"Jenkins"},priority:25,intelligence:"medium"},".circleci/config.yml":{frameworks:["CircleCI"],slots:{cicd:"CircleCI"},priority:25,intelligence:"medium"},".travis.yml":{frameworks:["Travis CI"],slots:{cicd:"Travis CI"},priority:25,intelligence:"medium"},"azure-pipelines.yml":{frameworks:["Azure DevOps"],slots:{cicd:"Azure DevOps"},priority:25,intelligence:"medium"},"bitbucket-pipelines.yml":{frameworks:["Bitbucket Pipelines"],slots:{cicd:"Bitbucket Pipelines"},priority:25,intelligence:"medium"},"tailwind.config.js":{frameworks:["Tailwind CSS"],slots:{cssFramework:"Tailwind CSS"},priority:20,intelligence:"medium"},"tailwind.config.ts":{frameworks:["Tailwind CSS"],slots:{cssFramework:"Tailwind CSS",mainLanguage:"TypeScript"},priority:20,intelligence:"medium"},"postcss.config.js":{frameworks:["PostCSS"],slots:{cssFramework:"PostCSS"},priority:20,intelligence:"medium"},"uno.config.ts":{frameworks:["UnoCSS"],slots:{cssFramework:"UnoCSS",mainLanguage:"TypeScript"},priority:20,intelligence:"medium"},"styled-components.config.js":{frameworks:["styled-components"],slots:{cssFramework:"styled-components",uiLibrary:"styled-components"},priority:20,intelligence:"medium"},"emotion.config.js":{frameworks:["Emotion"],slots:{cssFramework:"Emotion",uiLibrary:"Emotion"},priority:20,intelligence:"medium"},"metro.config.js":{frameworks:["React Native"],slots:{framework:"React Native",mainLanguage:"JavaScript"},priority:25,intelligence:"medium"},"expo.config.js":{frameworks:["Expo"],slots:{framework:"React Native",buildTool:"Expo"},priority:25,intelligence:"medium"},"app.json":{frameworks:["React Native","Expo"],slots:{framework:"React Native"},priority:20,intelligence:"medium",confirmWith:["expo"]},"capacitor.config.ts":{frameworks:["Capacitor"],slots:{framework:"Capacitor",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"ionic.config.json":{frameworks:["Ionic"],slots:{framework:"Ionic",uiLibrary:"Ionic"},priority:25,intelligence:"medium"},"nx.json":{frameworks:["Nx"],slots:{buildTool:"Nx"},priority:25,intelligence:"medium"},"turbo.json":{frameworks:["Turborepo"],slots:{buildTool:"Turborepo"},priority:25,intelligence:"medium"},"lerna.json":{frameworks:["Lerna"],slots:{buildTool:"Lerna"},priority:25,intelligence:"medium"},"rush.json":{frameworks:["Rush"],slots:{buildTool:"Rush"},priority:25,intelligence:"medium"},"pnpm-workspace.yaml":{frameworks:["pnpm workspaces"],slots:{packageManager:"pnpm",buildTool:"pnpm workspaces"},priority:25,intelligence:"medium"},"*.svelte":{frameworks:["Svelte","SvelteKit"],slots:{framework:"Svelte"},priority:15,intelligence:"low"},"*.vue":{frameworks:["Vue"],slots:{framework:"Vue"},priority:15,intelligence:"low"},"*.jsx":{frameworks:["React"],slots:{framework:"React",mainLanguage:"JavaScript"},priority:15,intelligence:"low"},"*.ts":{frameworks:["TypeScript"],slots:{mainLanguage:"TypeScript"},priority:15,intelligence:"low"},"*.tsx":{frameworks:["React","TypeScript"],slots:{framework:"React",mainLanguage:"TypeScript"},priority:15,intelligence:"low"},"*.py":{frameworks:["Python"],slots:{mainLanguage:"Python"},priority:15,intelligence:"low"},"*.rb":{frameworks:["Ruby"],slots:{mainLanguage:"Ruby"},priority:15,intelligence:"low"},"*.php":{frameworks:["PHP"],slots:{mainLanguage:"PHP"},priority:15,intelligence:"low"},"*.java":{frameworks:["Java"],slots:{mainLanguage:"Java"},priority:15,intelligence:"low"},"*.kt":{frameworks:["Kotlin"],slots:{mainLanguage:"Kotlin"},priority:15,intelligence:"low"},"*.swift":{frameworks:["Swift"],slots:{mainLanguage:"Swift"},priority:15,intelligence:"low"},"*.go":{frameworks:["Go"],slots:{mainLanguage:"Go"},priority:15,intelligence:"low"},"*.rs":{frameworks:["Rust"],slots:{mainLanguage:"Rust"},priority:15,intelligence:"low"},"*.dart":{frameworks:["Flutter","Dart"],slots:{mainLanguage:"Dart"},priority:15,intelligence:"low"},"*.ex":{frameworks:["Elixir"],slots:{mainLanguage:"Elixir"},priority:15,intelligence:"low"},"*.exs":{frameworks:["Elixir"],slots:{mainLanguage:"Elixir"},priority:15,intelligence:"low"},"*.scala":{frameworks:["Scala"],slots:{mainLanguage:"Scala"},priority:15,intelligence:"low"},"*.clj":{frameworks:["Clojure"],slots:{mainLanguage:"Clojure"},priority:15,intelligence:"low"},"*.lua":{frameworks:["Lua"],slots:{mainLanguage:"Lua"},priority:15,intelligence:"low"},"*.r":{frameworks:["R"],slots:{mainLanguage:"R"},priority:15,intelligence:"low"},"*.R":{frameworks:["R"],slots:{mainLanguage:"R"},priority:15,intelligence:"low"},"*.jl":{frameworks:["Julia"],slots:{mainLanguage:"Julia"},priority:15,intelligence:"low"},"*.nim":{frameworks:["Nim"],slots:{mainLanguage:"Nim"},priority:15,intelligence:"low"},"*.zig":{frameworks:["Zig"],slots:{mainLanguage:"Zig"},priority:15,intelligence:"low"},"build.zig":{frameworks:["Zig"],slots:{packageManager:"Zig Package Manager",mainLanguage:"Zig",buildTool:"zig build",framework:"Zig",build:"zig build"},priority:35,intelligence:"ultra-high"},"openapi.json":{frameworks:["OpenAPI"],slots:{apiType:"REST API",backend:"API Server"},priority:30,intelligence:"high"},"openapi.yaml":{frameworks:["OpenAPI"],slots:{apiType:"REST API",backend:"API Server"},priority:30,intelligence:"high"},"swagger.json":{frameworks:["Swagger"],slots:{apiType:"REST API",backend:"API Server"},priority:30,intelligence:"high"},"graphql.schema":{frameworks:["GraphQL"],slots:{apiType:"GraphQL",backend:"GraphQL Server"},priority:30,intelligence:"high"},"schema.graphql":{frameworks:["GraphQL"],slots:{apiType:"GraphQL",backend:"GraphQL Server"},priority:30,intelligence:"high"},".graphqlconfig":{frameworks:["GraphQL"],slots:{apiType:"GraphQL"},priority:25,intelligence:"medium"},"redux.config.js":{frameworks:["Redux"],slots:{stateManagement:"Redux"},priority:20,intelligence:"medium"},"mobx.config.js":{frameworks:["MobX"],slots:{stateManagement:"MobX"},priority:20,intelligence:"medium"},"vuex.config.js":{frameworks:["Vuex"],slots:{stateManagement:"Vuex",framework:"Vue"},priority:20,intelligence:"medium"},"pinia.config.js":{frameworks:["Pinia"],slots:{stateManagement:"Pinia",framework:"Vue"},priority:20,intelligence:"medium"},"zustand.config.js":{frameworks:["Zustand"],slots:{stateManagement:"Zustand"},priority:20,intelligence:"medium"},".eslintrc.js":{frameworks:["ESLint"],slots:{},priority:15,intelligence:"low"},".eslintrc.json":{frameworks:["ESLint"],slots:{},priority:15,intelligence:"low"},".prettierrc":{frameworks:["Prettier"],slots:{},priority:15,intelligence:"low"},".prettierrc.json":{frameworks:["Prettier"],slots:{},priority:15,intelligence:"low"},"biome.json":{frameworks:["Biome"],slots:{},priority:15,intelligence:"low"},".editorconfig":{frameworks:["EditorConfig"],slots:{},priority:10,intelligence:"low"},"serverless.yml":{frameworks:["Serverless Framework"],slots:{hosting:"AWS Lambda/Azure/GCP",backend:"Serverless",apiType:"API Gateway"},priority:30,intelligence:"high"},"serverless.yaml":{frameworks:["Serverless Framework"],slots:{hosting:"AWS Lambda/Azure/GCP",backend:"Serverless",apiType:"API Gateway"},priority:30,intelligence:"high"},"sam.yaml":{frameworks:["AWS SAM"],slots:{hosting:"AWS Lambda",backend:"AWS SAM",cicd:"AWS SAM CLI"},priority:30,intelligence:"high"},"template.yaml":{frameworks:["AWS SAM","CloudFormation"],slots:{hosting:"AWS",backend:"AWS SAM/CloudFormation",cicd:"AWS"},priority:25,intelligence:"medium",confirmWith:["samconfig.toml"]},"amplify.yml":{frameworks:["AWS Amplify"],slots:{hosting:"AWS Amplify",backend:"AWS Amplify",cicd:"AWS Amplify"},priority:30,intelligence:"high"},Podfile:{frameworks:["CocoaPods","iOS"],slots:{packageManager:"CocoaPods",mainLanguage:"Swift/Objective-C",framework:"iOS Native"},priority:30,intelligence:"high"},"build.gradle.kts":{frameworks:["Gradle Kotlin DSL","Android","Kotlin"],slots:{packageManager:"Gradle",mainLanguage:"Kotlin",buildTool:"Gradle Kotlin DSL",framework:"Android"},priority:30,intelligence:"high"},"*.ipynb":{frameworks:["Jupyter","Python"],slots:{mainLanguage:"Python",framework:"Jupyter Notebook"},priority:30,intelligence:"high"},MLproject:{frameworks:["MLflow"],slots:{mainLanguage:"Python",framework:"MLflow",backend:"MLflow",cicd:"MLflow"},priority:30,intelligence:"high"},"dvc.yaml":{frameworks:["DVC","Data Version Control"],slots:{mainLanguage:"Python",framework:"DVC",cicd:"DVC Pipelines"},priority:30,intelligence:"high"},"dvc.lock":{frameworks:["DVC"],slots:{framework:"DVC"},priority:20,intelligence:"medium"},"wrangler.toml":{frameworks:["Cloudflare Workers","Cloudflare"],slots:{hosting:"Cloudflare Workers",backend:"Cloudflare Workers",runtime:"V8 Isolates"},priority:30,intelligence:"high"},"deno.json":{frameworks:["Deno"],slots:{runtime:"Deno",mainLanguage:"TypeScript",packageManager:"Deno"},priority:30,intelligence:"high"},"bun.lockb":{frameworks:["Bun"],slots:{runtime:"Bun",packageManager:"Bun",mainLanguage:"TypeScript/JavaScript"},priority:30,intelligence:"high"},"codecov.yml":{frameworks:["Codecov"],slots:{cicd:"Codecov"},priority:25,intelligence:"high"},"dependabot.yml":{frameworks:["Dependabot","GitHub"],slots:{cicd:"Dependabot"},priority:25,intelligence:"high"},"renovate.json":{frameworks:["Renovate"],slots:{cicd:"Renovate"},priority:25,intelligence:"high"},Makefile:{frameworks:["Make","GNU Make"],slots:{buildTool:"Make"},priority:30,intelligence:"high"},"CMakeLists.txt":{frameworks:["CMake","C","C++"],slots:{buildTool:"CMake",mainLanguage:"C/C++"},priority:30,intelligence:"high"},"meson.build":{frameworks:["Meson","C","C++"],slots:{buildTool:"Meson",mainLanguage:"C/C++"},priority:30,intelligence:"high"},"*.c":{frameworks:["C"],slots:{mainLanguage:"C"},priority:30,intelligence:"high"},"*.cpp":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:30,intelligence:"high"},"*.cc":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:30,intelligence:"high"},"*.cxx":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:25,intelligence:"high"},"*.h":{frameworks:["C","C++"],slots:{mainLanguage:"C/C++"},priority:25,intelligence:"high"},"*.hpp":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:25,intelligence:"high"},"*.hxx":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:20,intelligence:"medium"},".env":{frameworks:[],slots:{},priority:20,intelligence:"medium"},".env.example":{frameworks:[],slots:{},priority:25,intelligence:"high"},".env.local":{frameworks:[],slots:{},priority:20,intelligence:"medium"},".env.development":{frameworks:[],slots:{},priority:20,intelligence:"medium"},".env.production":{frameworks:[],slots:{},priority:20,intelligence:"medium"},"skaffold.yaml":{frameworks:["Skaffold","Kubernetes"],slots:{hosting:"Kubernetes",cicd:"Skaffold"},priority:30,intelligence:"high"},"Chart.yaml":{frameworks:["Helm","Kubernetes"],slots:{hosting:"Kubernetes",backend:"Helm"},priority:30,intelligence:"high"},"values.yaml":{frameworks:["Helm","Kubernetes"],slots:{hosting:"Kubernetes"},priority:25,intelligence:"high",confirmWith:["Chart.yaml"]},"pulumi.yaml":{frameworks:["Pulumi"],slots:{hosting:"Cloud",cicd:"Pulumi"},priority:30,intelligence:"high"},"Pulumi.yaml":{frameworks:["Pulumi"],slots:{hosting:"Cloud",cicd:"Pulumi"},priority:30,intelligence:"high"},"terragrunt.hcl":{frameworks:["Terragrunt","Terraform"],slots:{hosting:"Cloud",cicd:"Terragrunt"},priority:30,intelligence:"high"},"ansible.yml":{frameworks:["Ansible"],slots:{cicd:"Ansible"},priority:30,intelligence:"high"},"playbook.yml":{frameworks:["Ansible"],slots:{cicd:"Ansible"},priority:25,intelligence:"high"},"*.cs":{frameworks:["C#",".NET","Unity"],slots:{mainLanguage:"C#"},priority:30,intelligence:"high"},"*.m":{frameworks:["Objective-C","iOS"],slots:{mainLanguage:"Objective-C"},priority:25,intelligence:"high"},".nvmrc":{frameworks:["Node.js","nvm"],slots:{runtime:"Node.js"},priority:25,intelligence:"high"},".tool-versions":{frameworks:["asdf"],slots:{},priority:25,intelligence:"high"},".ruby-version":{frameworks:["Ruby","rbenv"],slots:{mainLanguage:"Ruby",runtime:"Ruby"},priority:25,intelligence:"high"},".python-version":{frameworks:["Python","pyenv"],slots:{mainLanguage:"Python",runtime:"Python"},priority:25,intelligence:"high"},".dockerignore":{frameworks:["Docker"],slots:{},priority:20,intelligence:"medium"},".gitattributes":{frameworks:["Git"],slots:{},priority:15,intelligence:"low"},".npmrc":{frameworks:["npm","Node.js"],slots:{packageManager:"npm"},priority:20,intelligence:"medium"},"sonar-project.properties":{frameworks:["SonarQube","SonarCloud"],slots:{cicd:"SonarQube"},priority:25,intelligence:"high"},"*.fs":{frameworks:["F#",".NET"],slots:{mainLanguage:"F#"},priority:25,intelligence:"high"},"*.mm":{frameworks:["Objective-C++","iOS","macOS"],slots:{mainLanguage:"Objective-C++"},priority:25,intelligence:"high"},"build.zig.zon":{frameworks:["Zig"],slots:{mainLanguage:"Zig",packageManager:"Zig Package Manager",buildTool:"zig build"},priority:35,intelligence:"ultra-high"},"gleam.toml":{frameworks:["Gleam","BEAM","Erlang"],slots:{mainLanguage:"Gleam",runtime:"BEAM",packageManager:"Gleam"},priority:30,intelligence:"high"},"bunfig.toml":{frameworks:["Bun"],slots:{runtime:"Bun",packageManager:"Bun",buildTool:"Bun"},priority:30,intelligence:"high"},"mise.toml":{frameworks:["mise"],slots:{},priority:25,intelligence:"high"},".mise.toml":{frameworks:["mise"],slots:{},priority:25,intelligence:"high"},"manifest.toml":{frameworks:["Flox","Nix"],slots:{},priority:25,intelligence:"high",confirmWith:[".flox"]},justfile:{frameworks:["Just"],slots:{buildTool:"Just"},priority:25,intelligence:"high"},".pre-commit-config.yaml":{frameworks:["pre-commit"],slots:{cicd:"pre-commit"},priority:25,intelligence:"high"},"CLAUDE.md":{frameworks:["Claude Code"],slots:{},priority:30,intelligence:"high",confirmWith:[".claude"]}};var hJ=new Set(["node_modules",".git","dist","build","venv",".venv","__pycache__","target","coverage",".next",".svelte-kit","vendor"]),uJ=new Set([".py",".ts",".tsx",".js",".jsx",".svelte",".vue",".rb",".go",".rs",".php",".java",".kt",".swift"]),kJ={mainLanguage:["project","main_language"],main_language:["project","main_language"],framework:["stack","frontend"],cssFramework:["stack","css_framework"],css:["stack","css_framework"],uiLibrary:["stack","ui_library"],ui_library:["stack","ui_library"],stateManagement:["stack","state_management"],state:["stack","state_management"],backend:["stack","backend"],apiType:["stack","api_type"],api:["stack","api_type"],runtime:["stack","runtime"],database:["stack","database"],db:["stack","database"],connection:["stack","connection"],hosting:["stack","hosting"],buildTool:["stack","build"],build_tool:["stack","build"],build:["stack","build"],packageManager:["stack","package_manager"],pkg_manager:["stack","package_manager"],cicd:["stack","cicd"]},vJ=[["packageManager","package-manager"],["pkg_manager","package-manager"],["mainLanguage","language"],["main_language","language"],["framework","framework"],["backend","backend"],["database","database"],["db","database"],["cicd","ci-cd"],["hosting","hosting"],["buildTool","build"],["build_tool","build"],["build","build"],["runtime","runtime"],["cssFramework","css"],["css","css"],["uiLibrary","ui-library"],["stateManagement","state-management"],["apiType","api"],["api","api"]];function mJ($,Z){for(let[U,z]of vJ)if(U in $)return z;return Z.length>0?"framework":"config"}function pJ($){try{let Z=JSON.parse(gJ($,"utf-8")),U=["background","content_scripts","action","browser_action","permissions"].some((z)=>(z in Z));if(typeof Z.manifest_version==="number"&&U)return"chrome";return"other"}catch{return"other"}}function lJ($){let Z=[],U=xJ($),z=EJ(b2($,".git"));for(let X=0;X<10;X++){let Q;try{Q=M8(U)}catch{break}for(let q of Q){let H=w2[q];if(!H)continue;if(q==="manifest.json"&&pJ(b2(U,q))!=="chrome")continue;Z.push({slots:H.slots||{},priority:H.priority,frameworks:H.frameworks,fileName:q})}if(z&&X===0)break;let J=yJ(U);if(J===U)break;U=J}return Z}function dJ($){let Z=[];for(let U of T8($,2,{count:0})){let z=w2[`*${U}`],X=z?.slots?.mainLanguage;if(X)Z.push({slots:{mainLanguage:X},priority:z.priority,frameworks:z.frameworks})}return Z}function P8($){let Z=[...lJ($),...dJ($)],U={},z={},X=new Set;for(let G of Z){G.frameworks.forEach((W)=>X.add(W));for(let[W,Y]of Object.entries(G.slots))if(Y&&!Y.includes("/")&&(!(W in U)||G.priority>z[W]))U[W]=Y,z[W]=G.priority}let Q=new Map;for(let G of Z){if(!G.fileName)continue;if(!Q.has(G.fileName))Q.set(G.fileName,{fileName:G.fileName,category:mJ(G.slots,G.frameworks),priority:G.priority})}let J=[...Q.values()].sort((G,W)=>W.priority-G.priority||G.fileName.localeCompare(W.fileName)),q=[];if(U.mainLanguage)q.push(U.mainLanguage.toLowerCase());if(U.framework)q.push(U.framework.toLowerCase());let H=q.length>0?q.join("-"):"unknown-stack";return{slotFills:U,frameworks:[...X],confirmedCount:Z.length,discoveredFormats:J,stackSignature:H}}function C2($){let{slotFills:Z}=P8($),U={};for(let[z,X]of Object.entries(Z)){let Q=kJ[z];if(!Q||!X)continue;let[J,q]=Q;if(J==="project")(U.project??={})[q]=X;else(U.stack??={})[q]=X}return U}function T8($,Z,U){let z=new Set;if(Z<0||U.count>400)return z;let X;try{X=M8($,{withFileTypes:!0})}catch{return z}for(let Q of X){if(U.count++>400)break;if(!Q.isDirectory()){let J=fJ(Q.name);if(uJ.has(J))z.add(J);continue}if(hJ.has(Q.name)||Q.name.startsWith("."))continue;for(let J of T8(b2($,Q.name),Z-1,U))z.add(J)}return z}import{existsSync as F8,readFileSync as K8}from"fs";import{join as A8}from"path";function j2($){let Z=cJ($),U=aJ($),z={},X=(Q,J)=>{if(J)z[Q]=J};return X("what",sJ(Z,U)),X("who",iJ(U)),X("why",rJ(U)),X("where",nJ(Z,U)),X("when",oJ(U)),X("how",tJ(Z,U)),z}function cJ($){let Z=A8($,"package.json");if(!F8(Z))return null;try{return JSON.parse(K8(Z,"utf-8"))}catch{return null}}function aJ($){let Z=A8($,"README.md");if(!F8(Z))return"";let U;try{U=K8(Z,"utf-8")}catch{return""}return U.split(`
215
215
  `).filter((z)=>!/^\s*\[!\[/.test(z)&&!/^\s*!\[/.test(z)).join(`
216
216
  `).replace(/<[^>]+>/g,"").replace(/!\[[^\]]*\]\([^)]*\)/g,"").trim()}function W0($){return $.replace(/\s+/g," ").replace(/[#*`>]/g,"").trim().slice(0,280)}function S0($,Z){let U=new RegExp(`##?\\s+(?:${Z})\\s*\\n+([\\s\\S]+?)(?:\\n\\n|\\n##?|$)`,"i"),z=$.match(U);return z&&z[1]&&z[1].trim().length>20?W0(z[1]):null}function Y$($,Z,U=30){for(let z of Z){let X=$.match(z);if(X&&X[1]&&X[1].trim().length>=U)return W0(X[1])}return null}function sJ($,Z){if($?.description&&$.description.length>20)return W0($.description);let U=S0(Z,"Purpose|What|About|Overview|Description");if(U)return U;let z=Z.split(/\n\s*\n/).map((X)=>X.trim()).find((X)=>X.length>30&&!X.startsWith("#"));if(z)return W0(z);return Y$(Z,[/(?:core|main|primary)\s+(?:problem|challenge)(?:\s+is)?\s*:?\s*([^.\n]{30,})/i,/solves?\s+(?:the\s+)?(?:problem\s+of\s+)?([^.\n]{30,})/i])}function iJ($){let Z=S0($,"Audience|Who|Who is this for|Who it.s for");if(Z)return Z;return Y$($,[/\b(?:designed|built|made)\s+for\s+((?:developers?|teams?|engineers?|builders?|founders?)[^.\n]{0,80})/i,/\bfor\s+((?:developers?|teams?|engineers?|builders?|founders?)[^.\n]{0,80})/i],8)}function rJ($){let Z=S0($,"Why|Mission|Motivation|Rationale|Vision");if(Z)return Z;return Y$($,[/(?:our\s+)?(?:mission|purpose|goal)(?:\s+is)?\s*:?\s*([^.\n]{30,})/i,/(?:built|created|designed)\s+(?:because|to)\s+([^.\n]{30,})/i])}function nJ($,Z){let U=typeof $?.repository==="string"?$.repository:$?.repository?.url;if(U)return W0(U.replace(/^git\+/,"").replace(/\.git$/,""));if($?.homepage)return W0($.homepage);return Y$(Z,[/\b(?:deployed|hosted|available|published)\s+(?:on|at|via)\s+([^.\n]{4,80})/i],4)}function oJ($){let Z=S0($,"Timeline|Status|Release|Roadmap");if(Z)return Z;return Y$($,[/\b(production\s+since\s+[^.\n]{4,60})/i,/\b((?:in\s+)?(?:production|beta|alpha|development)\s+since\s+[^.\n]{4,60})/i,/\bsince\s+((?:[A-Z][a-z]+\s+)?\d{4}[^.\n]{0,40})/],4)}function tJ($,Z){let U=$?.scripts?Object.keys($.scripts):[],z=["start","dev","build"].filter((Q)=>U.includes(Q));if(z.length)return W0(z.map((Q)=>`npm run ${Q}`).join(", "));let X=S0(Z,"Usage|Getting Started|Install|Installation|Quick Start");if(X)return X;return S0(Z,"Architecture|Approach|How it works|Methodology|How")}import{existsSync as M,readFileSync as r,readdirSync as w8}from"fs";import{join as I}from"path";var N8=[{name:"Next.js",slug:"nextjs",category:"frontend",signals:[{type:"dependency",key:"next"},{type:"file",pattern:"next.config.*"}]},{name:"React",slug:"react",category:"frontend",signals:[{type:"dependency",key:"react"}]},{name:"SvelteKit",slug:"sveltekit",category:"frontend",signals:[{type:"dependency",key:"@sveltejs/kit"},{type:"file",pattern:"svelte.config.*"}]},{name:"Svelte",slug:"svelte",category:"frontend",signals:[{type:"dependency",key:"svelte"},{type:"devDependency",key:"svelte"}]},{name:"Vue.js",slug:"vue",category:"frontend",signals:[{type:"dependency",key:"vue"}]},{name:"Nuxt",slug:"nuxt",category:"frontend",signals:[{type:"dependency",key:"nuxt"},{type:"file",pattern:"nuxt.config.*"}]},{name:"Angular",slug:"angular",category:"frontend",signals:[{type:"dependency",key:"@angular/core"},{type:"file",pattern:"angular.json"}]},{name:"Astro",slug:"astro",category:"frontend",signals:[{type:"dependency",key:"astro"},{type:"file",pattern:"astro.config.*"}]},{name:"Solid",slug:"solid",category:"frontend",signals:[{type:"dependency",key:"solid-js"}]},{name:"Remix",slug:"remix",category:"frontend",signals:[{type:"dependency",key:"@remix-run/react"}]},{name:"Gatsby",slug:"gatsby",category:"frontend",signals:[{type:"dependency",key:"gatsby"},{type:"file",pattern:"gatsby-config.*"}]},{name:"Qwik",slug:"qwik",category:"frontend",signals:[{type:"dependency",key:"@builder.io/qwik"}]},{name:"Vercel (SvelteKit)",slug:"adapter-vercel",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-vercel"},{type:"devDependency",key:"@sveltejs/adapter-vercel"}]},{name:"Node (SvelteKit)",slug:"adapter-node",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-node"},{type:"devDependency",key:"@sveltejs/adapter-node"}]},{name:"Static (SvelteKit)",slug:"adapter-static",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-static"},{type:"devDependency",key:"@sveltejs/adapter-static"}]},{name:"Cloudflare (SvelteKit)",slug:"adapter-cloudflare",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-cloudflare"},{type:"devDependency",key:"@sveltejs/adapter-cloudflare"}]},{name:"Netlify (SvelteKit)",slug:"adapter-netlify",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-netlify"},{type:"devDependency",key:"@sveltejs/adapter-netlify"}]},{name:"Tailwind CSS",slug:"tailwind",category:"css",signals:[{type:"dependency",key:"tailwindcss"},{type:"devDependency",key:"tailwindcss"},{type:"file",pattern:"tailwind.config.*"}]},{name:"Bootstrap",slug:"bootstrap",category:"css",signals:[{type:"dependency",key:"bootstrap"}]},{name:"Styled Components",slug:"styled-components",category:"css",signals:[{type:"dependency",key:"styled-components"}]},{name:"shadcn/ui",slug:"shadcn",category:"ui",signals:[{type:"file",pattern:"components.json"},{type:"dependency",key:"@radix-ui/react-dialog"}]},{name:"Material UI",slug:"mui",category:"ui",signals:[{type:"dependency",key:"@mui/material"}]},{name:"Chakra UI",slug:"chakra",category:"ui",signals:[{type:"dependency",key:"@chakra-ui/react"}]},{name:"Ant Design",slug:"antd",category:"ui",signals:[{type:"dependency",key:"antd"}]},{name:"Redux",slug:"redux",category:"state",signals:[{type:"dependency",key:"@reduxjs/toolkit"}]},{name:"Zustand",slug:"zustand",category:"state",signals:[{type:"dependency",key:"zustand"}]},{name:"Jotai",slug:"jotai",category:"state",signals:[{type:"dependency",key:"jotai"}]},{name:"Pinia",slug:"pinia",category:"state",signals:[{type:"dependency",key:"pinia"}]},{name:"Express",slug:"express",category:"backend",signals:[{type:"dependency",key:"express"}]},{name:"Fastify",slug:"fastify",category:"backend",signals:[{type:"dependency",key:"fastify"}]},{name:"Hono",slug:"hono",category:"backend",signals:[{type:"dependency",key:"hono"}]},{name:"Elysia",slug:"elysia",category:"backend",signals:[{type:"dependency",key:"elysia"}]},{name:"NestJS",slug:"nestjs",category:"backend",signals:[{type:"dependency",key:"@nestjs/core"}]},{name:"Koa",slug:"koa",category:"backend",signals:[{type:"dependency",key:"koa"}]},{name:"Django",slug:"django",category:"backend",signals:[{type:"file",pattern:"manage.py"},{type:"file",pattern:"settings.py"}]},{name:"Flask",slug:"flask",category:"backend",signals:[{type:"file",pattern:"app.py"}]},{name:"FastAPI",slug:"fastapi",category:"backend",signals:[{type:"file",pattern:"main.py"}]},{name:"Rails",slug:"rails",category:"backend",signals:[{type:"file",pattern:"Gemfile"},{type:"file",pattern:"config/routes.rb"}]},{name:"Spring Boot",slug:"spring",category:"backend",signals:[{type:"file",pattern:"pom.xml"},{type:"file",pattern:"build.gradle"}]},{name:"Prisma",slug:"prisma",category:"database",signals:[{type:"dependency",key:"prisma"},{type:"devDependency",key:"prisma"},{type:"file",pattern:"prisma/schema.prisma"}]},{name:"Drizzle",slug:"drizzle",category:"database",signals:[{type:"dependency",key:"drizzle-orm"},{type:"file",pattern:"drizzle.config.*"}]},{name:"TypeORM",slug:"typeorm",category:"database",signals:[{type:"dependency",key:"typeorm"}]},{name:"Mongoose",slug:"mongoose",category:"database",signals:[{type:"dependency",key:"mongoose"}]},{name:"Vite",slug:"vite",category:"build",signals:[{type:"dependency",key:"vite"},{type:"devDependency",key:"vite"},{type:"file",pattern:"vite.config.*"}]},{name:"webpack",slug:"webpack",category:"build",signals:[{type:"dependency",key:"webpack"},{type:"devDependency",key:"webpack"},{type:"file",pattern:"webpack.config.*"}]},{name:"esbuild",slug:"esbuild",category:"build",signals:[{type:"dependency",key:"esbuild"},{type:"devDependency",key:"esbuild"}]},{name:"Turbopack",slug:"turbopack",category:"build",signals:[{type:"file",pattern:"turbo.json"}]},{name:"Jest",slug:"jest",category:"testing",signals:[{type:"devDependency",key:"jest"},{type:"file",pattern:"jest.config.*"}]},{name:"Vitest",slug:"vitest",category:"testing",signals:[{type:"devDependency",key:"vitest"}]},{name:"Playwright",slug:"playwright",category:"testing",signals:[{type:"devDependency",key:"@playwright/test"},{type:"file",pattern:"playwright.config.*"}]},{name:"Cypress",slug:"cypress",category:"testing",signals:[{type:"devDependency",key:"cypress"},{type:"file",pattern:"cypress.config.*"}]},{name:"Turborepo",slug:"turborepo",category:"monorepo",signals:[{type:"devDependency",key:"turbo"},{type:"file",pattern:"turbo.json"}]},{name:"Nx",slug:"nx",category:"monorepo",signals:[{type:"devDependency",key:"nx"},{type:"file",pattern:"nx.json"}]},{name:"Lerna",slug:"lerna",category:"monorepo",signals:[{type:"devDependency",key:"lerna"},{type:"file",pattern:"lerna.json"}]},{name:"MCP SDK",slug:"mcp",category:"ai",signals:[{type:"dependency",key:"@modelcontextprotocol/sdk"}]},{name:"Anthropic SDK",slug:"anthropic",category:"ai",signals:[{type:"dependency",key:"@anthropic-ai/sdk"}]},{name:"OpenAI SDK",slug:"openai",category:"ai",signals:[{type:"dependency",key:"openai"}]},{name:"LangChain",slug:"langchain",category:"ai",signals:[{type:"dependency",key:"langchain"}]},{name:"Vercel",slug:"vercel",category:"hosting",signals:[{type:"file",pattern:"vercel.json"}]},{name:"Netlify",slug:"netlify",category:"hosting",signals:[{type:"file",pattern:"netlify.toml"}]},{name:"Docker",slug:"docker",category:"hosting",signals:[{type:"file",pattern:"Dockerfile"},{type:"file",pattern:"docker-compose.yml"}]},{name:"Cloudflare Workers",slug:"cloudflare",category:"hosting",signals:[{type:"file",pattern:"wrangler.toml"},{type:"dependency",key:"wrangler"}]},{name:"GitHub Actions",slug:"github-actions",category:"cicd",signals:[{type:"file",pattern:".github/workflows/*.yml"}]},{name:"Commander.js",slug:"commander",category:"cli",signals:[{type:"dependency",key:"commander"}]}];function eJ($){let Z=I($,"Cargo.toml");if(!M(Z))return null;try{let z=r(Z,"utf-8").match(/^\s*\[package\][\s\S]*?^\s*name\s*=\s*"([^"]+)"/m);return z?z[1]:null}catch{return null}}function $q($){let Z=I($,"Cargo.toml");if(!M(Z))return!1;try{let U=r(Z,"utf-8");return/^\s*\[\[bin\]\]/m.test(U)}catch{return!1}}function Zq($,Z){if(Z?.keywords?.some((z)=>/^sdk(?:\s|-|$)|\-sdk$/i.test(z)))return'package.json keywords contains "sdk"';if(Z?.name&&/(?:^|[-_/])sdk(?:[-_/]|$)/i.test(Z.name))return`package.json name "${Z.name}" → sdk`;let U=eJ($);if(U&&/(?:^|[-_])sdk(?:[-_]|$)/i.test(U))return`Cargo.toml name "${U}" → sdk`;return null}function Uq($){let Z=["manifest.json","public/manifest.json","src/manifest.json","app/manifest.json","extension/manifest.json","dist/manifest.json"];for(let U of Z){let z=I($,U);if(!M(z))continue;try{let X=JSON.parse(r(z,"utf-8"));if(typeof X.manifest_version==="number")return`${U} manifest_version ${X.manifest_version} (browser extension)`}catch{}}return null}function zq($){let Z=/(numpy|pandas|jupyter|scikit-learn|sklearn|pytorch|tensorflow|matplotlib|scipy)/i,U=I($,"pyproject.toml");if(M(U))try{let Q=r(U,"utf-8").match(Z);if(Q)return`pyproject.toml depends on ${Q[1]}`}catch{}let z=I($,"requirements.txt");if(M(z))try{let Q=r(z,"utf-8").match(Z);if(Q)return`requirements.txt contains ${Q[1]}`}catch{}return null}function Xq($,Z){let U=["react-native","expo","@capacitor/core","@ionic/core"];if(Z){for(let z of U)if(Z.dependencies?.[z]||Z.devDependencies?.[z])return`${z} dependency`}if(M(I($,"pubspec.yaml")))return"pubspec.yaml (Flutter)";if(M(I($,"ios"))&&M(I($,"android")))return"ios/ + android/ dirs";return null}function Qq($,Z){let U=I($,"Cargo.toml");if(M(U))try{let X=r(U,"utf-8");if(/crate-type\s*=\s*\[[^\]]*"cdylib"/.test(X))return'Cargo.toml crate-type = ["cdylib"]';if(/wasm-bindgen|wasm-pack/i.test(X))return"Cargo.toml wasm-bindgen/wasm-pack"}catch{}let z=I($,"build.zig");if(M(z))try{let X=r(z,"utf-8");if(/\.wasm\b|wasm32|setOutputFormat\(\.wasm/i.test(X))return"build.zig wasm target"}catch{}if(Z?.keywords?.some((X)=>/^wasm(?:-|$)|webassembly/i.test(X)))return'package.json keywords contains "wasm"';return null}function Jq($,Z){if(!M(I($,"index.html")))return null;if(Z?.dependencies||Z?.devDependencies){let U={...Z.dependencies??{},...Z.devDependencies??{}};if(["react","vue","svelte","@sveltejs/kit","next","nuxt","astro","gatsby","solid-js","qwik"].some((X)=>U[X]))return null}return"index.html (vanilla, no frontend framework)"}function qq($,Z){if(Z?.name&&/specification|^@.*\/spec/i.test(Z.name))return`package name "${Z.name}" → documentation`;if(Z?.keywords?.some((U)=>/^(specification|format-spec|standard)$/i.test(U)))return'package keywords contains "specification"';if(Z?.files&&Z.files.length>0){let U=/^(dist|src|lib|build|bin)\/|\.(js|ts|tsx|jsx|mjs|cjs|py|rs|go)$/,z=Z.files.some((Q)=>U.test(Q)),X=Z.files.some((Q)=>/\.(md|MD)|examples?\//.test(Q));if(!z&&X)return"package.json files = docs/examples only (no source)"}return null}function Hq($,Z,U){let z=U.find((X)=>X.slug==="astro"||X.slug==="gatsby");if(z)return`${z.name} (static-site framework)`;if(Z?.keywords?.some((X)=>/^(website|marketing|landing|brochure|portfolio)$/i.test(X)))return'package keywords contains "website"/"marketing"/"landing"';return null}function Gq($,Z){if(!Z)return null;let U={...Z.dependencies??{},...Z.devDependencies??{}},z=["@clerk/nextjs","@clerk/clerk-react","next-auth","@auth/core","auth0","@auth0/nextjs-auth0"],X=["stripe","@stripe/stripe-js","lemonsqueezy"],Q=z.some((q)=>U[q]),J=X.some((q)=>U[q]);if(Q&&J)return"auth + payment dependencies";return null}function Yq($,Z,U){if(Z?.keywords?.some((Q)=>/mcpaas/i.test(Q)))return'package keywords contains "mcpaas"';if(Z?.name&&/mcpaas/i.test(Z.name))return`package name "${Z.name}" → mcpaas`;let z=U.some((Q)=>Q.slug==="mcp"),X=U.some((Q)=>Q.category==="database");if(z&&X&&Z?.dependencies&&Object.keys(Z.dependencies).length>10)return"MCP + database + complex deps (platform shape)";return null}function Bq($,Z){if(!Z?.private)return null;if(!(!!Z.workspaces||M(I($,"pnpm-workspace.yaml"))))return null;return"private workspace + multi-package"}function L0($){let Z=I($,"package.json");if(!M(Z))return null;try{return JSON.parse(r(Z,"utf-8"))}catch{return null}}function Vq($,Z){if(!Z.includes("*"))return M(I($,Z));let U=Z.split("/");if(U.length===1){let q=Z.split("*")[0];try{return w8($).some((H)=>H.startsWith(q))}catch{return!1}}let z=I($,...U.slice(0,-1)),X=U[U.length-1],Q=X.split("*")[0],J=X.split("*")[1]||"";try{return w8(z).some((q)=>q.startsWith(Q)&&q.endsWith(J))}catch{return!1}}function Wq($,Z,U){switch($.type){case"dependency":return!!Z?.dependencies?.[$.key];case"devDependency":return!!Z?.devDependencies?.[$.key];case"file":return Vq(U,$.pattern);default:return!1}}function S2($){let Z=L0($);return N8.map((U)=>{let X=U.signals.filter((Q)=>Wq(Q,Z,$)).length/U.signals.length;return{name:U.name,slug:U.slug,category:U.category,confidence:X}}).filter((U)=>U.confidence>0).sort((U,z)=>z.confidence-U.confidence)}function b8($){let Z=L0($);if(Z?.devDependencies?.typescript||Z?.dependencies?.typescript)return"TypeScript";if(M(I($,"tsconfig.json")))return"TypeScript";if(M(I($,"Cargo.toml")))return"Rust";if(M(I($,"go.mod")))return"Go";if(M(I($,"pyproject.toml"))||M(I($,"setup.py")))return"Python";if(M(I($,"Gemfile")))return"Ruby";if(M(I($,"pom.xml"))||M(I($,"build.gradle")))return"Java";if(M(I($,"Package.swift")))return"Swift";if(M(I($,"build.zig")))return"Zig";if(Z)return"JavaScript";return"Unknown"}function C8($){let Z=L0($),U=S2($),z=[],X=qq($,Z);if(X)return z.push(X),{type:"documentation",found:z};let Q=Zq($,Z);if(Q)return z.push(Q),{type:"sdk",found:z};let J=Uq($);if(J)return z.push(J),{type:"extension",found:z};let q=Yq($,Z,U);if(q)return z.push(q),{type:"mcpaas",found:z};let H=Gq($,Z);if(H)return z.push(H),{type:"saas",found:z};let G=Qq($,Z);if(G)return z.push(G),{type:"wasm",found:z};let W=Xq($,Z);if(W)return z.push(W),{type:"mobile",found:z};if(U.some((w)=>w.slug==="mcp"))return z.push("MCP SDK signal"),{type:"mcp",found:z};if(Z?.bin)return z.push("package.json bin"),{type:"cli",found:z};if($q($))return z.push("Cargo.toml [[bin]]"),{type:"cli",found:z};if(M(I($,"build.zig"))){if(z.push("build.zig"),M(I($,"src/main.zig")))return z.push("src/main.zig"),{type:"cli",found:z};if(M(I($,"src/root.zig")))return z.push("src/root.zig"),{type:"library",found:z}}let B=U.some((w)=>w.slug==="svelte"||w.slug==="sveltekit");if(Z?.private===!0&&(M(I($,"pnpm-workspace.yaml"))||Z?.workspaces!==void 0)&&B)return z.push("private workspace","Svelte"),{type:"framework",found:z};if(B)return z.push("Svelte/SvelteKit"),{type:"svelte",found:z};let D=U.some((w)=>w.category==="frontend"),V=U.some((w)=>w.category==="backend");if(Z?.private&&(Z.workspaces||M(I($,"pnpm-workspace.yaml")))&&D&&V)return z.push("private workspace + frontend + backend frameworks"),{type:"enterprise",found:z};let L=Bq($,Z);if(L)return z.push(L),{type:"monorepo-root",found:z};let R=Hq($,Z,U);if(R)return z.push(R),{type:"website",found:z};if(U.some((w)=>w.slug==="nextjs"||w.slug==="nuxt"))return z.push(U.find((w)=>w.slug==="nextjs")?"Next.js":"Nuxt"),{type:"fullstack",found:z};let K=U.some((w)=>w.category==="frontend"),A=U.some((w)=>w.category==="backend");if(K&&A)return z.push("frontend framework","backend framework"),{type:"fullstack",found:z};if(K)return z.push("frontend framework"),{type:"frontend",found:z};if(A)return z.push("backend framework"),{type:"backend",found:z};let F=zq($);if(F)return z.push(F),{type:"data-science",found:z};let N=Jq($,Z);if(N)return z.push(N),{type:"html",found:z};if(Z?.main&&!Z?.bin)return z.push("package.json main (no bin)"),{type:"library",found:z};return z.push("no classifying signals — fallback"),{type:"library",found:z}}function j8($){if(M(I($,"bunfig.toml")))return"Bun";if(M(I($,"deno.json"))||M(I($,"deno.jsonc")))return"Deno";if(L0($))return"Node.js";if(M(I($,"Cargo.toml")))return"Rust";if(M(I($,"go.mod")))return"Go";return"Unknown"}function S8($){if(M(I($,"bun.lockb"))||M(I($,"bun.lock")))return"bun";if(M(I($,"pnpm-lock.yaml")))return"pnpm";if(M(I($,"yarn.lock")))return"yarn";if(M(I($,"package-lock.json")))return"npm";return"npm"}function E8($){if(M(I($,".github/workflows")))return"GitHub Actions";if(M(I($,".gitlab-ci.yml")))return"GitLab CI";if(M(I($,".circleci")))return"CircleCI";if(M(I($,"Jenkinsfile")))return"Jenkins";return null}function g8($){if(M(I($,"vercel.json")))return"Vercel";if(M(I($,"netlify.toml")))return"Netlify";if(M(I($,"wrangler.toml")))return"Cloudflare";if(M(I($,"Dockerfile")))return"Docker";if(M(I($,"fly.toml")))return"Fly.io";if(M(I($,"render.yaml")))return"Render";return null}function y8($){let Z=I($,"svelte.config.js");if(!M(Z))return null;try{let z=r(Z,"utf-8").match(/@sveltejs\/adapter-(\w+)/);if(z){let X=z[1];switch(X){case"vercel":return"Vercel";case"node":return"Node";case"static":return"Static";case"cloudflare":return"Cloudflare";case"netlify":return"Netlify";case"auto":return"Auto";default:return X}}return null}catch{return null}}function f8($){let Z=L0($);if(Z?.devDependencies?.vite||Z?.dependencies?.vite)return"Vite";if(Z?.devDependencies?.webpack||Z?.dependencies?.webpack)return"webpack";if(Z?.devDependencies?.esbuild||Z?.dependencies?.esbuild)return"esbuild";if(M(I($,"tsconfig.json"))&&Z?.devDependencies?.typescript)return"TypeScript (tsc)";return null}function x8($){return["package.json","Cargo.toml","pyproject.toml","go.mod","build.zig","build.zig.zon","src/index.ts","src/index.js","src/main.ts","src/cli.ts","src/main.rs","src/lib.rs","src/main.zig","src/root.zig","src/__init__.py","main.py","__main__.py","main.go","cmd/main.go","README.md","SPECIFICATION.md","BINARY-FORMAT.md","tsconfig.json","wrangler.toml","vercel.json"].filter((U)=>M(I($,U)))}function h8($,Z){let U={};if(Z?.scripts){for(let z of["build","test","lint","dev","start"])if(Z.scripts[z]){let X=M(I($,"bun.lock"))||M(I($,"bun.lockb"))?"bun run":"npm run";U[z]=`${X} ${z}`}}if(M(I($,"Cargo.toml"))){if(!U.build)U.build="cargo build --release";if(!U.test)U.test="cargo test";if(!U.lint)U.lint="cargo clippy"}if(M(I($,"build.zig"))){if(!U.build)U.build="zig build";if(!U.test)U.test="zig build test"}if(M(I($,"go.mod"))){if(!U.build)U.build="go build ./...";if(!U.test)U.test="go test ./..."}if(M(I($,"pyproject.toml"))||M(I($,"pytest.ini"))){if(!U.test)U.test="pytest"}return U}function u8($,Z,U,z){let X=[];if(z&&z!=="Unknown")X.push(z);let Q=new Set(["frontend","backend","database","build","css","state","monorepo"]);for(let J of U)if(Q.has(J.category))X.push(J.name);if(M(I($,"bunfig.toml")))X.push("Bun");else if(M(I($,"deno.json"))||M(I($,"deno.jsonc")))X.push("Deno");if(X.length<3&&Z?.dependencies){let J=Object.keys(Z.dependencies).slice(0,5);for(let q of J)if(!X.some((H)=>H.toLowerCase().includes(q.toLowerCase())))X.push(q)}return X}function k8($){let Z=L0($),U=S2($),z=b8($),X=C8($),Q=X.type,J=j8($),q=S8($),H=E8($),G=g8($),W=f8($),Y=U.find((j)=>j.category==="frontend"),B=U.find((j)=>j.category==="css"),O=U.find((j)=>j.category==="ui"),D=U.find((j)=>j.category==="state"),V=U.find((j)=>j.category==="backend"),L=U.find((j)=>j.category==="database"),R=D0[Q]||D0.library,T=Q==="framework",K=U.some((j)=>j.slug==="svelte"||j.slug==="sveltekit"),A=T&&K?"svelte":T?null:null,F=Q==="svelte"||A==="svelte",N=F?y8($):null,w=F&&U.some((j)=>j.slug==="sveltekit"),P=new Set(["css_framework","ui_library","database","connection","hosting"]),b={},p=f.filter((j)=>j.path.startsWith("stack."));for(let j of p){let S=j.path.replace("stack.","");if(!R.includes(j.category)){b[S]="slotignored";continue}if(T&&P.has(S)){b[S]="slotignored";continue}switch(S){case"frontend":b[S]=Y?.name??(Q==="cli"?"CLI":"");break;case"css_framework":b[S]=B?.name??"";break;case"ui_library":b[S]=O?.name??"";break;case"state_management":b[S]=F?D?.name??"Runes":D?.name??"";break;case"backend":b[S]=F?w?"SvelteKit":V?.name??"":V?.name??"";break;case"api_type":b[S]=w?"Server Routes":"";break;case"runtime":b[S]=J!=="Unknown"?J:"";break;case"database":b[S]=L?.name??"";break;case"connection":b[S]=L?.name??"";break;case"hosting":if(F&&N)b[S]=N;else b[S]=G??"";break;case"build":b[S]=F?"Vite":W??"";break;case"cicd":b[S]=H??"";break;case"package_manager":b[S]=q;break;default:b[S]="";break}}let l={},E=f.filter((j)=>j.path.startsWith("monorepo."));for(let j of E){let S=j.path.replace("monorepo.","");if(!R.includes(j.category))l[S]="slotignored";else l[S]=""}let E0={name:Z?.name??$.split("/").pop()??"project",goal:Z?.description??"",main_language:z,type:Q};if(T&&A)E0.framework=A;let y2=u8($,Z,U,z),f2=x8($),x2=h8($,Z),B$={faf_version:"2.5.0",project:E0,stack:b,human_context:{who:"",what:Z?.description??"",why:"",where:"",when:"",how:""},monorepo:l,_meta:{found:X.found}};if(y2.length>0)B$.tech_stack=y2;if(f2.length>0)B$.key_files=f2;if(Object.keys(x2).length>0)B$.commands=x2;return B$}import{existsSync as Oq,readFileSync as Dq}from"fs";import{join as _q}from"path";var v8={MIN_LENGTH:8,MAX_LENGTH:280},Lq=[/^(see|see\s+the?)\s+readme/i,/^(tbd|todo|fixme|coming\s+soon)\b/i,/^(software|application|app|project|tool|library|framework)\.?$/i,/^(for\s+users|for\s+developers)\.?$/i,/^(description|goal|name|title)\.?$/i,/^lorem\s+ipsum/i,/^example(\s+\w+)?\.?$/i];function m($){let Z=$.trim();if(Z.length<v8.MIN_LENGTH)return!1;if(Z.length>v8.MAX_LENGTH)return!1;if(Lq.some((U)=>U.test(Z)))return!1;if(/^[\s|\-*+]/.test(Z))return!1;if(Z.split(`
@@ -221,5 +221,5 @@ Rendered on-demand from your current <strong>${C0(U)}</strong><br>
221
221
  `),z=0;while(z<U.length){let Q=U[z].trim().match(/^(#{1,6})\s+(.+)$/);if(Q&&Z.test(Q[2])){let J=Q[1].length,q=[];z++;while(z<U.length){let H=U[z].trim(),G=H.match(/^(#{1,6})\s+/);if(G&&G[1].length<=J)break;if(H===""){if(q.length>0)break;z++;continue}if(/^(>|```|---|\||\s*[-*+]\s|\d+\.\s)/.test(H))break;q.push(H),z++}if(q.length===0)return null;return q.join(" ").trim()}z++}return null}function Mq($){let Z=O0($,/^(use\s+cases?|goal)\b/i);if(Z&&m(Z))return Z;let U=Rq($);if(U&&m(U))return U;return}function Pq($){let Z=O0($,/^(about|description|overview|what(\s+is\s+this)?)\b/i);if(Z&&m(Z))return Z;return}function Tq($){let Z=O0($,/^(audience|users?|for\s+whom|who(\s+is\s+this\s+for)?)\b/i);if(Z&&m(Z))return Z;return}function Fq($){let Z=O0($,/^(why|motivation|problem|rationale)\b/i);if(Z&&m(Z))return Z;return}function Kq($){let Z=O0($,/^(deployment|where(\s+it\s+runs)?|hosting)\b/i);if(Z&&m(Z))return Z;return}function Aq($){let Z=O0($,/^(status|history|timeline|since|launched)\b/i);if(Z&&m(Z))return Z;return}function Nq($){let Z=O0($,/^(architecture|how(\s+it\s+works)?|approach|design)\b/i);if(Z&&m(Z))return Z;return}function E2($){let Z=["README.md","README.MD","Readme.md","readme.md"],U=null;for(let O of Z){let D=_q($,O);if(Oq(D)){U=D;break}}if(!U)return{};let z;try{z=Dq(U,"utf-8")}catch{return{}}let X={},Q=Mq(z);if(Q)X.project={goal:Q};let J={},q=Pq(z);if(q)J.what=q;let H=Tq(z);if(H)J.who=H;let G=Fq(z);if(G)J.why=G;let W=Kq(z);if(W)J.where=W;let Y=Aq(z);if(Y)J.when=Y;let B=Nq(z);if(B)J.how=B;if(Object.keys(J).length>0)X.human_context=J;return X}import{existsSync as wq,readFileSync as bq}from"fs";import{join as Cq}from"path";function jq($,Z){let U=$.split(`
222
222
  `),z=!1;for(let X of U){let Q=X.trim();if(/^\[/.test(Q)){z=Q==="[package]";continue}if(!z)continue;let J=Q.match(new RegExp(`^${Z}\\s*=\\s*(.+)$`));if(J){let q=J[1].trim();q=q.replace(/\s*#.*$/,"").trim();let H=q.match(/^"((?:[^"\\]|\\.)*)"$/)||q.match(/^'((?:[^'\\]|\\.)*)'$/);if(H)return H[1];return q}}return null}function g2($){let Z=Cq($,"Cargo.toml");if(!wq(Z))return{};let U;try{U=bq(Z,"utf-8")}catch{return{}}let z=jq(U,"description");if(z&&m(z))return{project:{goal:z}};return{}}function Sq($,Z){let U={project:{...Z.project??{},...$.project??{}},human_context:{...Z.human_context??{},...$.human_context??{}}};if(U.project&&Object.keys(U.project).length===0)delete U.project;if(U.human_context&&Object.keys(U.human_context).length===0)delete U.human_context;return U}function m8($){return Sq(E2($),g2($))}function Eq($){let Z=k8($),U=m8($),z=Q9(Z,U);gq(z);let X=Q9(z,C2($));return Q9(X,{human_context:j2($)})}function gq($){let Z=$.project?.type??"library",U=D0[Z]||D0.library;for(let z of f){if(U.includes(z.category))continue;let[X,Q]=z.path.split(".");if(X==="stack"&&$.stack)$.stack[Q]="slotignored";if(X==="monorepo"&&$.monorepo)$.monorepo[Q]="slotignored"}}function Q9($,Z){let U={...$};for(let[z,X]of Object.entries(Z)){let Q=U[z];if(y0(Q))U[z]=X;else if(typeof X==="object"&&X!==null&&!Array.isArray(X)&&typeof Q==="object"&&Q!==null&&!Array.isArray(Q))U[z]=Q9(Q,X)}return U}export{_J as writeServerCard,GJ as writeProjectHtml,XZ as validateFaf,C2 as turboCatSlots,P8 as turboCatScan,s8 as slotsByCategory,O8 as seedSixWsFromGoal,V9 as scoreFafYaml,j2 as relentlessContext,DJ as registryName,OJ as registryMeta,o6 as readFafRaw,$J as readFaf,RJ as questionForSlot,CJ as publicQuestions,X9 as normalizeAnswer,B9 as kernel,y0 as isPlaceholder,MJ as interviewForMissing,jJ as gradeAnswers,h0 as getTier,n8 as getNextTier,J8 as generateServerCard,U8 as generateProjectHtml,t6 as findFafFile,K2 as fafContextBlock,u2 as enrichScore,bJ as deriveQuestionSet,KJ as buildTableOf8,SJ as buildReceipt,Eq as assembleFreshFaf,R8 as answersMatch,a as TIERS,W8 as STACK_INTERVIEW,J9 as SLOT_BY_PATH,f as SLOTS,A2 as SIX_WS_INTERVIEW,q8 as REGISTRY_PUBLISHER_KEY,V$ as PLACEHOLDERS,V8 as INTERVIEW_VERSION,IJ as INTERVIEW_PATHS,L8 as INTERVIEW_BY_PATH,z9 as INTERVIEW,x0 as FAF_HEX,r8 as ENTERPRISE_SLOTS,N2 as BENCH_VERSION,i8 as BASE_SLOTS,I8 as ALIAS_GROUPS};
223
223
 
224
- //# debugId=6CB7EF0DFD3B512064756E2164756E21
224
+ //# debugId=E2F3369D5D8791B464756E2164756E21
225
225
  //# sourceMappingURL=index.js.map