faf-cli 6.0.11 → 6.0.12
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/README.md +8 -3
- package/dist/cli.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -36,11 +36,16 @@ project/
|
|
|
36
36
|
## Install
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
bunx faf
|
|
40
|
-
npx faf
|
|
41
|
-
brew install faf-cli && faf
|
|
39
|
+
bunx faf # That's it. FAF is all you need.
|
|
40
|
+
npx faf # Also works.
|
|
41
|
+
brew install faf-cli && faf # Homebrew
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
+
Three letters. Auto-detects your project, creates `.faf`, scores it, tells you what's next.
|
|
45
|
+
|
|
46
|
+
**Before:** `bunx faf-cli auto` — 18 characters, you had to know the command.
|
|
47
|
+
**Now:** `bunx faf` — 8 characters, does everything automatically.
|
|
48
|
+
|
|
44
49
|
---
|
|
45
50
|
|
|
46
51
|
## Nelly Never Forgets
|
package/dist/cli.js
CHANGED
|
@@ -167,7 +167,7 @@ ${Z.comment}`:Z.comment}this.doc.range[2]=Z.offset;break}default:this.errors.pus
|
|
|
167
167
|
Run: npm install faf-scoring-kernel
|
|
168
168
|
`)}return E5}function t($){return JSON.parse(d6().score_faf($))}function kz($){return d6().validate_faf($)}function yz($){return d6().compile_fafb($)}function fz($){return JSON.parse(d6().decompile_fafb($))}function gz(){return d6().sdk_version()}var E5=null;var hz={};QZ(hz,{orange:()=>$$,italic:()=>GK,fafCyan:()=>O,dim:()=>N,bold:()=>b});var S5=($)=>(Z)=>`\x1B[${$}m${Z}\x1B[0m`,b,N,GK,O=($)=>`\x1B[38;2;0;212;212m${$}\x1B[0m`,$$=($)=>`\x1B[38;5;208m${$}\x1B[0m`;var l=_(()=>{b=S5("1"),N=S5("2"),GK=S5("3")});function M2($){return $.indicator}function vz($){for(let Z of j5)if($>=Z.threshold)return Z;return j5[j5.length-1]}var j5;var O2=_(()=>{l();j5=[{name:"TROPHY",indicator:`${$$("\uD83C\uDFC6")} ${$$("TROPHY")}`,threshold:100},{name:"GOLD",indicator:`${$$(b("★"))} ${$$("GOLD")}`,threshold:99},{name:"SILVER",indicator:`${O("◆")} ${O("SILVER")}`,threshold:95},{name:"BRONZE",indicator:`${O("◇")} ${O("BRONZE")}`,threshold:85},{name:"GREEN",indicator:`${b("●")} GREEN`,threshold:70},{name:"YELLOW",indicator:`${N("●")} YELLOW`,threshold:55},{name:"RED",indicator:`${N("○")} RED`,threshold:1},{name:"WHITE",indicator:`${N("♡")}`,threshold:0}]});function e($){return{score:$.score,tier:vz($.score),populated:$.populated,empty:$.empty,ignored:$.ignored,active:$.active,total:$.total,slots:$.slots}}var P0=_(()=>{O2()});function J0($,Z,X=!1){let z=M2($.tier),J=b(`${$.score}%`);if(console.log(`${z} ${J} ${N(`${$.populated}/${$.active} slots`)} ${N("—")} ${Z}`),$.tier.name!=="TROPHY"&&$.empty>0)console.log(N(` ${$.empty} empty`));if(X)console.log(""),UK($)}function UK($){for(let[Z,X]of Object.entries($.slots)){let z=X==="populated"?O("●"):X==="slotignored"?N("—"):N("○");console.log(` ${z} ${X==="slotignored"?N(Z):Z}`)}}var b0=_(()=>{O2();l()});function d$($){if($===null||$===void 0||$==="")return!0;if(typeof $==="string")return WK.has($.toLowerCase().trim());if(Array.isArray($)&&$.length===0)return!0;if(typeof $==="object"&&Object.keys($).length===0)return!0;return!1}var H0,IN,TN,WK,c$;var h0=_(()=>{H0=[{index:1,path:"project.name",description:"Project name",category:"project"},{index:2,path:"project.goal",description:"What the project does",category:"project"},{index:3,path:"project.main_language",description:"Primary language",category:"project"},{index:4,path:"human_context.who",description:"Who is building this",category:"human"},{index:5,path:"human_context.what",description:"What are they building",category:"human"},{index:6,path:"human_context.why",description:"Why does it exist",category:"human"},{index:7,path:"human_context.where",description:"Where does it run",category:"human"},{index:8,path:"human_context.when",description:"When was it started / timeline",category:"human"},{index:9,path:"human_context.how",description:"How is it built",category:"human"},{index:10,path:"stack.frontend",description:"Framework (React, Svelte, etc.)",category:"frontend"},{index:11,path:"stack.css_framework",description:"CSS framework",category:"frontend"},{index:12,path:"stack.ui_library",description:"UI component library",category:"frontend"},{index:13,path:"stack.state_management",description:"State management",category:"frontend"},{index:14,path:"stack.backend",description:"Backend framework",category:"backend"},{index:15,path:"stack.api_type",description:"API style (REST, GraphQL, etc.)",category:"backend"},{index:16,path:"stack.runtime",description:"Runtime (Node, Bun, Python, etc.)",category:"backend"},{index:17,path:"stack.database",description:"Database",category:"backend"},{index:18,path:"stack.connection",description:"Connection method (Prisma, etc.)",category:"backend"},{index:19,path:"stack.hosting",description:"Hosting platform",category:"universal"},{index:20,path:"stack.build",description:"Build tool",category:"universal"},{index:21,path:"stack.cicd",description:"CI/CD",category:"universal"},{index:22,path:"stack.monorepo_tool",description:"Monorepo tool",category:"enterprise_infra"},{index:23,path:"stack.package_manager",description:"Package manager",category:"enterprise_infra"},{index:24,path:"stack.workspaces",description:"Workspace configuration",category:"enterprise_infra"},{index:25,path:"monorepo.packages_count",description:"Number of packages",category:"enterprise_infra"},{index:26,path:"monorepo.build_orchestrator",description:"Build orchestration tool",category:"enterprise_infra"},{index:27,path:"stack.admin",description:"Admin panel",category:"enterprise_app"},{index:28,path:"stack.cache",description:"Caching layer",category:"enterprise_app"},{index:29,path:"stack.search",description:"Search engine",category:"enterprise_app"},{index:30,path:"stack.storage",description:"Object storage",category:"enterprise_app"},{index:31,path:"monorepo.versioning_strategy",description:"Version strategy",category:"enterprise_ops"},{index:32,path:"monorepo.shared_configs",description:"Shared configs",category:"enterprise_ops"},{index:33,path:"monorepo.remote_cache",description:"Remote build cache",category:"enterprise_ops"}],IN=new Map(H0.map(($)=>[$.path,$])),TN=H0.filter(($)=>$.index<=21),WK=new Set(["describe your project goal","development teams","cloud platform","null","none","unknown","n/a","not applicable"]);c$={cli:["project","human"],library:["project","human"],mcp:["project","backend","universal","human"],backend:["project","backend","universal","human"],"data-science":["project","backend","human"],frontend:["project","frontend","human"],fullstack:["project","frontend","backend","universal","human"],svelte:["project","frontend","backend","universal","human"],framework:["project","frontend","backend","universal","human"],enterprise:["project","frontend","backend","universal","human","enterprise_infra","enterprise_app","enterprise_ops"]}});var uz;var mz=_(()=>{uz=[{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:"FastAPI",slug:"fastapi",category:"backend",signals:[{type:"dependency",key:"fastapi"}]},{name:"Django",slug:"django",category:"backend",signals:[{type:"dependency",key:"django"},{type:"file",pattern:"manage.py"}]},{name:"Flask",slug:"flask",category:"backend",signals:[{type:"dependency",key:"flask"},{type:"file",pattern:"app.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:"SQLAlchemy",slug:"sqlalchemy",category:"database",signals:[{type:"dependency",key:"sqlalchemy"}]},{name:"Tortoise ORM",slug:"tortoise",category:"database",signals:[{type:"dependency",key:"tortoise-orm"}]},{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 (TS)",slug:"mcp-sdk-ts",category:"mcp",signals:[{type:"dependency",key:"@modelcontextprotocol/sdk"}]},{name:"FastMCP",slug:"fastmcp",category:"mcp",signals:[{type:"dependency",key:"fastmcp"}]},{name:"MCP SDK (Python)",slug:"mcp-sdk-py",category:"mcp",signals:[{type:"dependency",key:"mcp"}]},{name:"rmcp",slug:"rmcp",category:"mcp",signals:[{type:"dependency",key:"rmcp"}]},{name:"MCP Go",slug:"mcp-go",category:"mcp",signals:[{type:"dependency",key:"github.com/mark3labs/mcp-go"}]},{name:"MCP .NET",slug:"mcp-dotnet",category:"mcp",signals:[{type:"dependency",key:"ModelContextProtocol"}]},{name:"FastMCP (TS)",slug:"fastmcp-ts",category:"mcp",signals:[{type:"dependency",key:"@fastmcp/server"}]},{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"}]}]});import{existsSync as k,readFileSync as p$,readdirSync as dz}from"fs";import{join as x}from"path";function Z$($){let Z=x($,"package.json");if(!k(Z))return null;try{return JSON.parse(p$(Z,"utf-8"))}catch{return null}}function cz($){let Z=Z$($);if(Z?.name)return{name:Z.name,description:Z.description};let X=x($,"pyproject.toml");if(k(X))try{let J=p$(X,"utf-8"),q=J.match(/^\s*name\s*=\s*"([^"]+)"/m),Q=J.match(/^\s*description\s*=\s*"([^"]+)"/m);if(q)return{name:q[1],description:Q?.[1]}}catch{}let z=x($,"Cargo.toml");if(k(z))try{let J=p$(z,"utf-8"),q=J.match(/^\s*name\s*=\s*"([^"]+)"/m),Q=J.match(/^\s*description\s*=\s*"([^"]+)"/m);if(q)return{name:q[1],description:Q?.[1]}}catch{}return null}function HK($,Z){if(!Z.includes("*"))return k(x($,Z));let X=Z.split("/");if(X.length===1){let Y=Z.split("*")[0];try{return dz($).some((G)=>G.startsWith(Y))}catch{return!1}}let z=x($,...X.slice(0,-1)),J=X[X.length-1],q=J.split("*")[0],Q=J.split("*")[1]||"";try{return dz(z).some((Y)=>Y.startsWith(q)&&Y.endsWith(Q))}catch{return!1}}function VK($,Z,X){switch($.type){case"dependency":return!!Z?.dependencies?.[$.key];case"devDependency":return!!Z?.devDependencies?.[$.key];case"file":return HK(X,$.pattern);default:return!1}}function KK($){let Z=x($,"pyproject.toml");if(!k(Z))return{};try{let X=p$(Z,"utf-8"),z={},J=X.match(/dependencies\s*=\s*\[([\s\S]*)\]/);if(J){let q=J[1].match(/"([^"]+)"/g)||[];for(let Q of q){let Y=Q.replace(/"/g,"").replace(/\[.*/,"").split(/[>=<]/)[0].trim().toLowerCase();if(Y)z[Y]="*"}}return z}catch{return{}}}function BK($){let Z=x($,"Cargo.toml");if(!k(Z))return{};try{let X=p$(Z,"utf-8"),z={},J=X.match(/\[dependencies\]([\s\S]*?)(?:\[|$)/);if(J){let q=J[1].split(`
|
|
169
169
|
`);for(let Q of q){let Y=Q.match(/^\s*([a-zA-Z_-]+)\s*=/);if(Y)z[Y[1].toLowerCase()]="*"}}return z}catch{return{}}}function x5($){let Z=Z$($),X=KK($),z=BK($),J={...X,...z},q=Z?{...Z,dependencies:{...Z.dependencies,...J}}:Object.keys(J).length>0?{dependencies:J}:null,Q=uz.map((U)=>{let V=U.signals.filter((H)=>VK(H,q,$)).length/U.signals.length;return{name:U.name,slug:U.slug,category:U.category,confidence:V}}).filter((U)=>U.confidence>0).sort((U,W)=>W.confidence-U.confidence),Y=new Set(Q.map((U)=>U.slug)),G=new Set;if(Y.has("nextjs"))G.add("react");if(Y.has("nuxt"))G.add("vue");if(Y.has("sveltekit"))G.add("svelte");return Q.filter((U)=>!G.has(U.slug))}function pz($){let Z=Z$($);if(Z?.devDependencies?.typescript||Z?.dependencies?.typescript)return"TypeScript";if(k(x($,"tsconfig.json")))return"TypeScript";if(k(x($,"Cargo.toml")))return"Rust";if(k(x($,"go.mod")))return"Go";if(k(x($,"pyproject.toml"))||k(x($,"setup.py")))return"Python";if(k(x($,"Gemfile")))return"Ruby";if(k(x($,"pom.xml"))||k(x($,"build.gradle")))return"Java";if(k(x($,"Package.swift")))return"Swift";if(k(x($,"build.zig")))return"Zig";if(Z)return"JavaScript";return"Unknown"}function lz($){let Z=Z$($),X=x5($);if(X.some((U)=>U.category==="mcp"))return"mcp";if(Z?.bin)return"cli";let J=X.some((U)=>U.slug==="svelte"||U.slug==="sveltekit");if(Z?.private===!0&&(k(x($,"pnpm-workspace.yaml"))||Z?.workspaces!==void 0)&&J)return"framework";if(J)return"svelte";if(X.some((U)=>U.slug==="nextjs"||U.slug==="nuxt"))return"fullstack";let Y=X.some((U)=>U.category==="frontend"),G=X.some((U)=>U.category==="backend");if(Y&&G)return"fullstack";if(Y)return"frontend";if(G)return"backend";if(Z?.main&&!Z?.bin)return"library";return"library"}function iz($){if(k(x($,"bunfig.toml")))return"Bun";if(k(x($,"deno.json"))||k(x($,"deno.jsonc")))return"Deno";if(Z$($))return"Node.js";if(k(x($,"Cargo.toml")))return"Rust";if(k(x($,"go.mod")))return"Go";return"Unknown"}function nz($){if(k(x($,"bun.lockb"))||k(x($,"bun.lock")))return"bun";if(k(x($,"pnpm-lock.yaml")))return"pnpm";if(k(x($,"yarn.lock")))return"yarn";if(k(x($,"package-lock.json")))return"npm";return"npm"}function sz($){if(k(x($,".github/workflows")))return"GitHub Actions";if(k(x($,".gitlab-ci.yml")))return"GitLab CI";if(k(x($,".circleci")))return"CircleCI";if(k(x($,"Jenkinsfile")))return"Jenkins";return null}function rz($){if(k(x($,"vercel.json")))return"Vercel";if(k(x($,"netlify.toml")))return"Netlify";if(k(x($,"wrangler.toml")))return"Cloudflare";if(k(x($,"Dockerfile")))return"Docker";if(k(x($,"fly.toml")))return"Fly.io";if(k(x($,"render.yaml")))return"Render";return null}function az($){let Z=x($,"svelte.config.js");if(!k(Z))return null;try{let z=p$(Z,"utf-8").match(/@sveltejs\/adapter-(\w+)/);if(z){let J=z[1];switch(J){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 J}}return null}catch{return null}}function oz($){let Z=Z$($);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(k(x($,"tsconfig.json"))&&Z?.devDependencies?.typescript)return"TypeScript (tsc)";return null}var tz=_(()=>{mz()});function l$($){let Z=Z$($),X=x5($),z=pz($),J=lz($),q=iz($),Q=nz($),Y=sz($),G=rz($),U=oz($),W=X.find((p)=>p.category==="frontend"),V=X.find((p)=>p.category==="css"),H=X.find((p)=>p.category==="ui"),D=X.find((p)=>p.category==="state"),T=X.find((p)=>p.category==="backend"),B=X.find((p)=>p.category==="database"),L=c$[J]||c$.library,w=J==="framework",A=X.some((p)=>p.slug==="svelte"||p.slug==="sveltekit"),P=w&&A?"svelte":w?null:null,C=J==="mcp",S=C?X.find((p)=>p.category==="mcp"):null,E=S?.slug??null,h=J==="svelte"||P==="svelte",R=h?az($):null,o=h&&X.some((p)=>p.slug==="sveltekit"),C0=new Set(["css_framework","ui_library","database","connection","hosting"]),d={},$0=H0.filter((p)=>p.path.startsWith("stack."));for(let p of $0){let i=p.path.replace("stack.","");if(!L.includes(p.category)){d[i]="slotignored";continue}if(w&&C0.has(i)){d[i]="slotignored";continue}switch(i){case"frontend":d[i]=W?.name??(J==="cli"?"CLI":"");break;case"css_framework":d[i]=V?.name??"";break;case"ui_library":d[i]=H?.name??"";break;case"state_management":d[i]=h?D?.name??"Runes":D?.name??"";break;case"backend":if(C&&S)d[i]=S.name;else if(h)d[i]=o?"SvelteKit":T?.name??"";else d[i]=T?.name??"";break;case"api_type":if(C)d[i]="MCP (stdio/SSE)";else if(o)d[i]="Server Routes";else d[i]="";break;case"runtime":d[i]=q!=="Unknown"?q:"";break;case"database":d[i]=B?.name??"";break;case"connection":d[i]=B?.name??"";break;case"hosting":if(h&&R)d[i]=R;else d[i]=G??"";break;case"build":d[i]=h?"Vite":U??"";break;case"cicd":d[i]=Y??"";break;case"package_manager":d[i]=Q;break;default:d[i]="";break}}let C$={},$q=H0.filter((p)=>p.path.startsWith("monorepo."));for(let p of $q){let i=p.path.replace("monorepo.","");if(!L.includes(p.category))C$[i]="slotignored";else C$[i]=""}let Z7=cz($),JZ={name:Z7?.name??$.split("/").pop()??"project",goal:Z7?.description??"",main_language:z,type:J};if(w&&P)JZ.framework=P;if(C&&E)JZ.framework=E;return{faf_version:"3.0",project:JZ,stack:d,human_context:{who:"",what:Z?.description??"",why:"",where:"",when:"",how:""},monorepo:C$}}var w2=_(()=>{h0();tz()});var Z9={};QZ(Z9,{autoCommand:()=>y5});import{existsSync as LK}from"fs";import{join as NK}from"path";function y5(){let $=process.cwd(),Z=NK($,"project.faf"),X=l$($);if(LK(Z)){let q=c(Z),Q=$9(q,X);s(Z,Q),console.log(`${O("updated")} ${Z}`)}else{let q=X.project?.type??"library",Q=c$[q]||c$.library;for(let Y of H0)if(!Q.includes(Y.category)){let[G,U]=Y.path.split(".");if(G==="stack"&&X.stack)X.stack[U]="slotignored";if(G==="monorepo"&&X.monorepo)X.monorepo[U]="slotignored"}s(Z,X),console.log(`${O("created")} ${Z}`)}let z=m(Z),J=e(t(z));if(J0(J,Z),J.score<100)console.log(N(`
|
|
170
|
-
run ${b("'faf go'")} to reach 100%`))}function $9($,Z){let X={...$};for(let[z,J]of Object.entries(Z))if(!(z in X)||X[z]===null||X[z]===void 0)X[z]=J;else if(typeof J==="object"&&J!==null&&!Array.isArray(J))X[z]=$9(X[z]??{},J);return X}var f5=_(()=>{w2();Z0();P0();b0();l();h0()});var I9=I((zT,mK)=>{mK.exports={name:"faf-cli",version:"6.0.11",description:"Persistent AI Context Standard — project DNA for AI. IANA-registered. Anthropic-approved.",type:"module",icon:"https://faf.one/orange-smiley.svg",logo:"https://faf.one/orange-smiley.svg",main:"dist/index.js",bin:{faf:"dist/cli.js","faf-cli":"dist/cli.js"},exports:{".":{bun:"./src/index.ts",default:"./dist/index.js"}},files:["dist/**/*","README.md","LICENSE","project.faf"],scripts:{dev:"bun src/cli.ts",build:"bun build src/cli.ts --outfile dist/cli.js --target=node --minify && bun build src/index.ts --outfile dist/index.js --target=node --minify",compile:"bun build src/cli.ts --compile --bytecode --minify --outfile faf","compile:all":"bun build src/cli.ts --compile --target=bun-darwin-arm64 --outfile faf-darwin-arm64 && bun build src/cli.ts --compile --target=bun-darwin-x64 --outfile faf-darwin-x64 && bun build src/cli.ts --compile --target=bun-linux-x64 --outfile faf-linux-x64 && bun build src/cli.ts --compile --target=bun-windows-x64 --outfile faf-windows-x64.exe",test:"bun test","test:watch":"bun test --watch",lint:"eslint src/**/*.ts",format:"prettier --write 'src/**/*.ts'",prepublishOnly:"bun run build"},keywords:["faf","ai-context","project-dna","bi-sync","cli","claude","gemini","cursor","mcp","model-context-protocol","persistent-context","ai-readiness","foundational"],author:"wolfejam <wolfejam@faf.one>",license:"MIT",repository:{type:"git",url:"https://github.com/Wolfe-Jam/faf-cli.git"},homepage:"https://faf.one",bugs:{url:"https://github.com/Wolfe-Jam/faf-cli/issues"},dependencies:{commander:"^14.0.1","faf-scoring-kernel":"^2.0.3",open:"8.4.2",yaml:"^2.4.1"},optionalDependencies:{"@anthropic-ai/sdk":"^0.74.0"},devDependencies:{"@types/node":"^22.15.0","@typescript-eslint/eslint-plugin":"^8.41.0","@typescript-eslint/parser":"^8.41.0",eslint:"^9.39.2",prettier:"^3.2.5",typescript:"^5.3.3","typescript-eslint":"^8.57.2"},engines:{node:">=18.0.0"},publishConfig:{access:"public"}}});var i5=I((mT,S9)=>{var E9=G0("fs"),l5;function aK(){try{return E9.statSync("/.dockerenv"),!0}catch($){return!1}}function oK(){try{return E9.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch($){return!1}}S9.exports=()=>{if(l5===void 0)l5=aK()||oK();return l5}});var x9=I((dT,n5)=>{var tK=G0("os"),eK=G0("fs"),j9=i5(),b9=()=>{if(process.platform!=="linux")return!1;if(tK.release().toLowerCase().includes("microsoft")){if(j9())return!1;return!0}try{return eK.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!j9():!1}catch($){return!1}};if(process.env.__IS_WSL_TEST__)n5.exports=b9;else n5.exports=b9()});var y9=I((cT,k9)=>{k9.exports=($,Z,X)=>{let z=(J)=>Object.defineProperty($,Z,{value:J,enumerable:!0,writable:!0});return Object.defineProperty($,Z,{configurable:!0,enumerable:!0,get(){let J=X();return z(J),J},set(J){z(J)}}),$}});var d9=I((pT,m9)=>{var __dirname="/Users/wolfejam/FAF/cli/node_modules/open",$B=G0("path"),ZB=G0("child_process"),{promises:_2,constants:u9}=G0("fs"),P2=x9(),XB=i5(),r5=y9(),f9=$B.join(__dirname,"xdg-open"),{platform:n$,arch:g9}=process,zB=()=>{try{return _2.statSync("/run/.containerenv"),!0}catch{return!1}},s5;function JB(){if(s5===void 0)s5=zB()||XB();return s5}var qB=(()=>{let Z;return async function(){if(Z)return Z;let X="/etc/wsl.conf",z=!1;try{await _2.access(X,u9.F_OK),z=!0}catch{}if(!z)return"/mnt/";let J=await _2.readFile(X,{encoding:"utf8"}),q=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(J);if(!q)return"/mnt/";return Z=q.groups.mountPoint.trim(),Z=Z.endsWith("/")?Z:`${Z}/`,Z}})(),h9=async($,Z)=>{let X;for(let z of $)try{return await Z(z)}catch(J){X=J}throw X},C2=async($)=>{if($={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...$},Array.isArray($.app))return h9($.app,(Y)=>C2({...$,app:Y}));let{name:Z,arguments:X=[]}=$.app||{};if(X=[...X],Array.isArray(Z))return h9(Z,(Y)=>C2({...$,app:{name:Y,arguments:X}}));let z,J=[],q={};if(n$==="darwin"){if(z="open",$.wait)J.push("--wait-apps");if($.background)J.push("--background");if($.newInstance)J.push("--new");if(Z)J.push("-a",Z)}else if(n$==="win32"||P2&&!JB()&&!Z){let Y=await qB();if(z=P2?`${Y}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:`${process.env.SYSTEMROOT}\\System32\\WindowsPowerShell\\v1.0\\powershell`,J.push("-NoProfile","-NonInteractive","–ExecutionPolicy","Bypass","-EncodedCommand"),!P2)q.windowsVerbatimArguments=!0;let G=["Start"];if($.wait)G.push("-Wait");if(Z){if(G.push(`"\`"${Z}\`""`,"-ArgumentList"),$.target)X.unshift($.target)}else if($.target)G.push(`"${$.target}"`);if(X.length>0)X=X.map((U)=>`"\`"${U}\`""`),G.push(X.join(","));$.target=Buffer.from(G.join(" "),"utf16le").toString("base64")}else{if(Z)z=Z;else{let Y=!__dirname||__dirname==="/",G=!1;try{await _2.access(f9,u9.X_OK),G=!0}catch{}z=process.versions.electron||n$==="android"||Y||!G?"xdg-open":f9}if(X.length>0)J.push(...X);if(!$.wait)q.stdio="ignore",q.detached=!0}if($.target)J.push($.target);if(n$==="darwin"&&X.length>0)J.push("--args",...X);let Q=ZB.spawn(z,J,q);if($.wait)return new Promise((Y,G)=>{Q.once("error",G),Q.once("close",(U)=>{if(!$.allowNonzeroExitCode&&U>0){G(Error(`Exited with code ${U}`));return}Y(Q)})});return Q.unref(),Q},a5=($,Z)=>{if(typeof $!=="string")throw TypeError("Expected a `target`");return C2({...Z,target:$})},QB=($,Z)=>{if(typeof $!=="string")throw TypeError("Expected a `name`");let{arguments:X=[]}=Z||{};if(X!==void 0&&X!==null&&!Array.isArray(X))throw TypeError("Expected `appArguments` as Array type");return C2({...Z,app:{name:$,arguments:X}})};function v9($){if(typeof $==="string"||Array.isArray($))return $;let{[g9]:Z}=$;if(!Z)throw Error(`${g9} is not supported`);return Z}function o5({[n$]:$},{wsl:Z}){if(Z&&P2)return v9(Z);if(!$)throw Error(`${n$} is not supported`);return v9($)}var E2={};r5(E2,"chrome",()=>o5({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));r5(E2,"firefox",()=>o5({darwin:"firefox",win32:"C:\\Program Files\\Mozilla Firefox\\firefox.exe",linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));r5(E2,"edge",()=>o5({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));a5.apps=E2;a5.openApp=QB;m9.exports=a5});function M($,Z,X,z,J){if(z==="m")throw TypeError("Private method is not writable");if(z==="a"&&!J)throw TypeError("Private accessor was defined without a setter");if(typeof Z==="function"?$!==Z||!J:!Z.has($))throw TypeError("Cannot write private member to an object whose class did not declare it");return z==="a"?J.call($,X):J?J.value=X:Z.set($,X),X}function K($,Z,X,z){if(X==="a"&&!z)throw TypeError("Private accessor was defined without a getter");if(typeof Z==="function"?$!==Z||!z:!Z.has($))throw TypeError("Cannot read private member from an object whose class did not declare it");return X==="m"?z:X==="a"?z.call($):z?z.value:Z.get($)}var v0=()=>{};var t5=function(){let{crypto:$}=globalThis;if($?.randomUUID)return t5=$.randomUUID.bind($),$.randomUUID();let Z=new Uint8Array(1),X=$?()=>$.getRandomValues(Z)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(z)=>(+z^X()&15>>+z/4).toString(16))};function u0($){return typeof $==="object"&&$!==null&&(("name"in $)&&$.name==="AbortError"||("message"in $)&&String($.message).includes("FetchRequestCanceledException"))}var n6=($)=>{if($ instanceof Error)return $;if(typeof $==="object"&&$!==null){try{if(Object.prototype.toString.call($)==="[object Error]"){let Z=Error($.message,$.cause?{cause:$.cause}:{});if($.stack)Z.stack=$.stack;if($.cause&&!Z.cause)Z.cause=$.cause;if($.name)Z.name=$.name;return Z}}catch{}try{return Error(JSON.stringify($))}catch{}}return Error($)};var F,q0,W0,z$,s$,r$,a$,o$,t$,e$,$6,Z6,X6;var B0=_(()=>{F=class F extends Error{};q0=class q0 extends F{constructor($,Z,X,z){super(`${q0.makeMessage($,Z,X)}`);this.status=$,this.headers=z,this.requestID=z?.get("request-id"),this.error=Z}static makeMessage($,Z,X){let z=Z?.message?typeof Z.message==="string"?Z.message:JSON.stringify(Z.message):Z?JSON.stringify(Z):X;if($&&z)return`${$} ${z}`;if($)return`${$} status code (no body)`;if(z)return z;return"(no status code or body)"}static generate($,Z,X,z){if(!$||!z)return new z$({message:X,cause:n6(Z)});let J=Z;if($===400)return new r$($,J,X,z);if($===401)return new a$($,J,X,z);if($===403)return new o$($,J,X,z);if($===404)return new t$($,J,X,z);if($===409)return new e$($,J,X,z);if($===422)return new $6($,J,X,z);if($===429)return new Z6($,J,X,z);if($>=500)return new X6($,J,X,z);return new q0($,J,X,z)}};W0=class W0 extends q0{constructor({message:$}={}){super(void 0,void 0,$||"Request was aborted.",void 0)}};z$=class z$ extends q0{constructor({message:$,cause:Z}){super(void 0,void 0,$||"Connection error.",void 0);if(Z)this.cause=Z}};s$=class s$ extends z${constructor({message:$}={}){super({message:$??"Request timed out."})}};r$=class r$ extends q0{};a$=class a$ extends q0{};o$=class o$ extends q0{};t$=class t$ extends q0{};e$=class e$ extends q0{};$6=class $6 extends q0{};Z6=class Z6 extends q0{};X6=class X6 extends q0{}});function S2($){if(typeof $!=="object")return{};return $??{}}function t9($){if(!$)return!0;for(let Z in $)return!1;return!0}function e9($,Z){return Object.prototype.hasOwnProperty.call($,Z)}var AB,o9=($)=>{return AB.test($)},e5=($)=>(e5=Array.isArray,e5($)),$4,$J=($,Z)=>{if(typeof Z!=="number"||!Number.isInteger(Z))throw new F(`${$} must be an integer`);if(Z<0)throw new F(`${$} must be a positive integer`);return Z},j2=($)=>{try{return JSON.parse($)}catch(Z){return}};var w$=_(()=>{B0();AB=/^[a-z][a-z0-9+.-]*:/i,$4=e5});var ZJ=($)=>new Promise((Z)=>setTimeout(Z,$));var J$="0.74.0";function PB(){if(typeof Deno<"u"&&Deno.build!=null)return"deno";if(typeof EdgeRuntime<"u")return"edge";if(Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]")return"node";return"unknown"}function CB(){if(typeof navigator>"u"||!navigator)return null;let $=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:Z,pattern:X}of $){let z=X.exec(navigator.userAgent);if(z){let J=z[1]||0,q=z[2]||0,Q=z[3]||0;return{browser:Z,version:`${J}.${q}.${Q}`}}}return null}var qJ=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},_B=()=>{let $=PB();if($==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J$,"X-Stainless-OS":zJ(Deno.build.os),"X-Stainless-Arch":XJ(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J$,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if($==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J$,"X-Stainless-OS":zJ(globalThis.process.platform??"unknown"),"X-Stainless-Arch":XJ(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Z=CB();if(Z)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J$,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${Z.browser}`,"X-Stainless-Runtime-Version":Z.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J$,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},XJ=($)=>{if($==="x32")return"x32";if($==="x86_64"||$==="x64")return"x64";if($==="arm")return"arm";if($==="aarch64"||$==="arm64")return"arm64";if($)return`other:${$}`;return"unknown"},zJ=($)=>{if($=$.toLowerCase(),$.includes("ios"))return"iOS";if($==="android")return"Android";if($==="darwin")return"MacOS";if($==="win32")return"Windows";if($==="freebsd")return"FreeBSD";if($==="openbsd")return"OpenBSD";if($==="linux")return"Linux";if($)return`Other:${$}`;return"Unknown"},JJ,QJ=()=>{return JJ??(JJ=_B())};var Z4=()=>{};function YJ(){if(typeof fetch<"u")return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function X4(...$){let Z=globalThis.ReadableStream;if(typeof Z>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new Z(...$)}function b2($){let Z=Symbol.asyncIterator in $?$[Symbol.asyncIterator]():$[Symbol.iterator]();return X4({start(){},async pull(X){let{done:z,value:J}=await Z.next();if(z)X.close();else X.enqueue(J)},async cancel(){await Z.return?.()}})}function s6($){if($[Symbol.asyncIterator])return $;let Z=$.getReader();return{async next(){try{let X=await Z.read();if(X?.done)Z.releaseLock();return X}catch(X){throw Z.releaseLock(),X}},async return(){let X=Z.cancel();return Z.releaseLock(),await X,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function GJ($){if($===null||typeof $!=="object")return;if($[Symbol.asyncIterator]){await $[Symbol.asyncIterator]().return?.();return}let Z=$.getReader(),X=Z.cancel();Z.releaseLock(),await X}var UJ=({headers:$,body:Z})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Z)}};function VJ($){let Z=0;for(let J of $)Z+=J.length;let X=new Uint8Array(Z),z=0;for(let J of $)X.set(J,z),z+=J.length;return X}function r6($){let Z;return(WJ??(Z=new globalThis.TextEncoder,WJ=Z.encode.bind(Z)))($)}function z4($){let Z;return(HJ??(Z=new globalThis.TextDecoder,HJ=Z.decode.bind(Z)))($)}var WJ,HJ;class q${constructor(){D0.set(this,void 0),L0.set(this,void 0),M(this,D0,new Uint8Array,"f"),M(this,L0,null,"f")}decode($){if($==null)return[];let Z=$ instanceof ArrayBuffer?new Uint8Array($):typeof $==="string"?r6($):$;M(this,D0,VJ([K(this,D0,"f"),Z]),"f");let X=[],z;while((z=jB(K(this,D0,"f"),K(this,L0,"f")))!=null){if(z.carriage&&K(this,L0,"f")==null){M(this,L0,z.index,"f");continue}if(K(this,L0,"f")!=null&&(z.index!==K(this,L0,"f")+1||z.carriage)){X.push(z4(K(this,D0,"f").subarray(0,K(this,L0,"f")-1))),M(this,D0,K(this,D0,"f").subarray(K(this,L0,"f")),"f"),M(this,L0,null,"f");continue}let J=K(this,L0,"f")!==null?z.preceding-1:z.preceding,q=z4(K(this,D0,"f").subarray(0,J));X.push(q),M(this,D0,K(this,D0,"f").subarray(z.index),"f"),M(this,L0,null,"f")}return X}flush(){if(!K(this,D0,"f").length)return[];return this.decode(`
|
|
170
|
+
run ${b("'faf go'")} to reach 100%`))}function $9($,Z){let X={...$};for(let[z,J]of Object.entries(Z))if(!(z in X)||X[z]===null||X[z]===void 0)X[z]=J;else if(typeof J==="object"&&J!==null&&!Array.isArray(J))X[z]=$9(X[z]??{},J);return X}var f5=_(()=>{w2();Z0();P0();b0();l();h0()});var I9=I((zT,mK)=>{mK.exports={name:"faf-cli",version:"6.0.12",description:"Persistent AI Context Standard — project DNA for AI. IANA-registered. Anthropic-approved.",type:"module",icon:"https://faf.one/orange-smiley.svg",logo:"https://faf.one/orange-smiley.svg",main:"dist/index.js",bin:{faf:"dist/cli.js","faf-cli":"dist/cli.js"},exports:{".":{bun:"./src/index.ts",default:"./dist/index.js"}},files:["dist/**/*","README.md","LICENSE","project.faf"],scripts:{dev:"bun src/cli.ts",build:"bun build src/cli.ts --outfile dist/cli.js --target=node --minify && bun build src/index.ts --outfile dist/index.js --target=node --minify",compile:"bun build src/cli.ts --compile --bytecode --minify --outfile faf","compile:all":"bun build src/cli.ts --compile --target=bun-darwin-arm64 --outfile faf-darwin-arm64 && bun build src/cli.ts --compile --target=bun-darwin-x64 --outfile faf-darwin-x64 && bun build src/cli.ts --compile --target=bun-linux-x64 --outfile faf-linux-x64 && bun build src/cli.ts --compile --target=bun-windows-x64 --outfile faf-windows-x64.exe",test:"bun test","test:watch":"bun test --watch",lint:"eslint src/**/*.ts",format:"prettier --write 'src/**/*.ts'",prepublishOnly:"bun run build"},keywords:["faf","ai-context","project-dna","bi-sync","cli","claude","gemini","cursor","mcp","model-context-protocol","persistent-context","ai-readiness","foundational"],author:"wolfejam <wolfejam@faf.one>",license:"MIT",repository:{type:"git",url:"https://github.com/Wolfe-Jam/faf-cli.git"},homepage:"https://faf.one",bugs:{url:"https://github.com/Wolfe-Jam/faf-cli/issues"},dependencies:{commander:"^14.0.1","faf-scoring-kernel":"^2.0.3",open:"8.4.2",yaml:"^2.4.1"},optionalDependencies:{"@anthropic-ai/sdk":"^0.74.0"},devDependencies:{"@types/node":"^22.15.0","@typescript-eslint/eslint-plugin":"^8.41.0","@typescript-eslint/parser":"^8.41.0",eslint:"^9.39.2",prettier:"^3.2.5",typescript:"^5.3.3","typescript-eslint":"^8.57.2"},engines:{node:">=18.0.0"},publishConfig:{access:"public"}}});var i5=I((mT,S9)=>{var E9=G0("fs"),l5;function aK(){try{return E9.statSync("/.dockerenv"),!0}catch($){return!1}}function oK(){try{return E9.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch($){return!1}}S9.exports=()=>{if(l5===void 0)l5=aK()||oK();return l5}});var x9=I((dT,n5)=>{var tK=G0("os"),eK=G0("fs"),j9=i5(),b9=()=>{if(process.platform!=="linux")return!1;if(tK.release().toLowerCase().includes("microsoft")){if(j9())return!1;return!0}try{return eK.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!j9():!1}catch($){return!1}};if(process.env.__IS_WSL_TEST__)n5.exports=b9;else n5.exports=b9()});var y9=I((cT,k9)=>{k9.exports=($,Z,X)=>{let z=(J)=>Object.defineProperty($,Z,{value:J,enumerable:!0,writable:!0});return Object.defineProperty($,Z,{configurable:!0,enumerable:!0,get(){let J=X();return z(J),J},set(J){z(J)}}),$}});var d9=I((pT,m9)=>{var __dirname="/Users/wolfejam/FAF/cli/node_modules/open",$B=G0("path"),ZB=G0("child_process"),{promises:_2,constants:u9}=G0("fs"),P2=x9(),XB=i5(),r5=y9(),f9=$B.join(__dirname,"xdg-open"),{platform:n$,arch:g9}=process,zB=()=>{try{return _2.statSync("/run/.containerenv"),!0}catch{return!1}},s5;function JB(){if(s5===void 0)s5=zB()||XB();return s5}var qB=(()=>{let Z;return async function(){if(Z)return Z;let X="/etc/wsl.conf",z=!1;try{await _2.access(X,u9.F_OK),z=!0}catch{}if(!z)return"/mnt/";let J=await _2.readFile(X,{encoding:"utf8"}),q=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(J);if(!q)return"/mnt/";return Z=q.groups.mountPoint.trim(),Z=Z.endsWith("/")?Z:`${Z}/`,Z}})(),h9=async($,Z)=>{let X;for(let z of $)try{return await Z(z)}catch(J){X=J}throw X},C2=async($)=>{if($={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...$},Array.isArray($.app))return h9($.app,(Y)=>C2({...$,app:Y}));let{name:Z,arguments:X=[]}=$.app||{};if(X=[...X],Array.isArray(Z))return h9(Z,(Y)=>C2({...$,app:{name:Y,arguments:X}}));let z,J=[],q={};if(n$==="darwin"){if(z="open",$.wait)J.push("--wait-apps");if($.background)J.push("--background");if($.newInstance)J.push("--new");if(Z)J.push("-a",Z)}else if(n$==="win32"||P2&&!JB()&&!Z){let Y=await qB();if(z=P2?`${Y}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:`${process.env.SYSTEMROOT}\\System32\\WindowsPowerShell\\v1.0\\powershell`,J.push("-NoProfile","-NonInteractive","–ExecutionPolicy","Bypass","-EncodedCommand"),!P2)q.windowsVerbatimArguments=!0;let G=["Start"];if($.wait)G.push("-Wait");if(Z){if(G.push(`"\`"${Z}\`""`,"-ArgumentList"),$.target)X.unshift($.target)}else if($.target)G.push(`"${$.target}"`);if(X.length>0)X=X.map((U)=>`"\`"${U}\`""`),G.push(X.join(","));$.target=Buffer.from(G.join(" "),"utf16le").toString("base64")}else{if(Z)z=Z;else{let Y=!__dirname||__dirname==="/",G=!1;try{await _2.access(f9,u9.X_OK),G=!0}catch{}z=process.versions.electron||n$==="android"||Y||!G?"xdg-open":f9}if(X.length>0)J.push(...X);if(!$.wait)q.stdio="ignore",q.detached=!0}if($.target)J.push($.target);if(n$==="darwin"&&X.length>0)J.push("--args",...X);let Q=ZB.spawn(z,J,q);if($.wait)return new Promise((Y,G)=>{Q.once("error",G),Q.once("close",(U)=>{if(!$.allowNonzeroExitCode&&U>0){G(Error(`Exited with code ${U}`));return}Y(Q)})});return Q.unref(),Q},a5=($,Z)=>{if(typeof $!=="string")throw TypeError("Expected a `target`");return C2({...Z,target:$})},QB=($,Z)=>{if(typeof $!=="string")throw TypeError("Expected a `name`");let{arguments:X=[]}=Z||{};if(X!==void 0&&X!==null&&!Array.isArray(X))throw TypeError("Expected `appArguments` as Array type");return C2({...Z,app:{name:$,arguments:X}})};function v9($){if(typeof $==="string"||Array.isArray($))return $;let{[g9]:Z}=$;if(!Z)throw Error(`${g9} is not supported`);return Z}function o5({[n$]:$},{wsl:Z}){if(Z&&P2)return v9(Z);if(!$)throw Error(`${n$} is not supported`);return v9($)}var E2={};r5(E2,"chrome",()=>o5({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));r5(E2,"firefox",()=>o5({darwin:"firefox",win32:"C:\\Program Files\\Mozilla Firefox\\firefox.exe",linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));r5(E2,"edge",()=>o5({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));a5.apps=E2;a5.openApp=QB;m9.exports=a5});function M($,Z,X,z,J){if(z==="m")throw TypeError("Private method is not writable");if(z==="a"&&!J)throw TypeError("Private accessor was defined without a setter");if(typeof Z==="function"?$!==Z||!J:!Z.has($))throw TypeError("Cannot write private member to an object whose class did not declare it");return z==="a"?J.call($,X):J?J.value=X:Z.set($,X),X}function K($,Z,X,z){if(X==="a"&&!z)throw TypeError("Private accessor was defined without a getter");if(typeof Z==="function"?$!==Z||!z:!Z.has($))throw TypeError("Cannot read private member from an object whose class did not declare it");return X==="m"?z:X==="a"?z.call($):z?z.value:Z.get($)}var v0=()=>{};var t5=function(){let{crypto:$}=globalThis;if($?.randomUUID)return t5=$.randomUUID.bind($),$.randomUUID();let Z=new Uint8Array(1),X=$?()=>$.getRandomValues(Z)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(z)=>(+z^X()&15>>+z/4).toString(16))};function u0($){return typeof $==="object"&&$!==null&&(("name"in $)&&$.name==="AbortError"||("message"in $)&&String($.message).includes("FetchRequestCanceledException"))}var n6=($)=>{if($ instanceof Error)return $;if(typeof $==="object"&&$!==null){try{if(Object.prototype.toString.call($)==="[object Error]"){let Z=Error($.message,$.cause?{cause:$.cause}:{});if($.stack)Z.stack=$.stack;if($.cause&&!Z.cause)Z.cause=$.cause;if($.name)Z.name=$.name;return Z}}catch{}try{return Error(JSON.stringify($))}catch{}}return Error($)};var F,q0,W0,z$,s$,r$,a$,o$,t$,e$,$6,Z6,X6;var B0=_(()=>{F=class F extends Error{};q0=class q0 extends F{constructor($,Z,X,z){super(`${q0.makeMessage($,Z,X)}`);this.status=$,this.headers=z,this.requestID=z?.get("request-id"),this.error=Z}static makeMessage($,Z,X){let z=Z?.message?typeof Z.message==="string"?Z.message:JSON.stringify(Z.message):Z?JSON.stringify(Z):X;if($&&z)return`${$} ${z}`;if($)return`${$} status code (no body)`;if(z)return z;return"(no status code or body)"}static generate($,Z,X,z){if(!$||!z)return new z$({message:X,cause:n6(Z)});let J=Z;if($===400)return new r$($,J,X,z);if($===401)return new a$($,J,X,z);if($===403)return new o$($,J,X,z);if($===404)return new t$($,J,X,z);if($===409)return new e$($,J,X,z);if($===422)return new $6($,J,X,z);if($===429)return new Z6($,J,X,z);if($>=500)return new X6($,J,X,z);return new q0($,J,X,z)}};W0=class W0 extends q0{constructor({message:$}={}){super(void 0,void 0,$||"Request was aborted.",void 0)}};z$=class z$ extends q0{constructor({message:$,cause:Z}){super(void 0,void 0,$||"Connection error.",void 0);if(Z)this.cause=Z}};s$=class s$ extends z${constructor({message:$}={}){super({message:$??"Request timed out."})}};r$=class r$ extends q0{};a$=class a$ extends q0{};o$=class o$ extends q0{};t$=class t$ extends q0{};e$=class e$ extends q0{};$6=class $6 extends q0{};Z6=class Z6 extends q0{};X6=class X6 extends q0{}});function S2($){if(typeof $!=="object")return{};return $??{}}function t9($){if(!$)return!0;for(let Z in $)return!1;return!0}function e9($,Z){return Object.prototype.hasOwnProperty.call($,Z)}var AB,o9=($)=>{return AB.test($)},e5=($)=>(e5=Array.isArray,e5($)),$4,$J=($,Z)=>{if(typeof Z!=="number"||!Number.isInteger(Z))throw new F(`${$} must be an integer`);if(Z<0)throw new F(`${$} must be a positive integer`);return Z},j2=($)=>{try{return JSON.parse($)}catch(Z){return}};var w$=_(()=>{B0();AB=/^[a-z][a-z0-9+.-]*:/i,$4=e5});var ZJ=($)=>new Promise((Z)=>setTimeout(Z,$));var J$="0.74.0";function PB(){if(typeof Deno<"u"&&Deno.build!=null)return"deno";if(typeof EdgeRuntime<"u")return"edge";if(Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]")return"node";return"unknown"}function CB(){if(typeof navigator>"u"||!navigator)return null;let $=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:Z,pattern:X}of $){let z=X.exec(navigator.userAgent);if(z){let J=z[1]||0,q=z[2]||0,Q=z[3]||0;return{browser:Z,version:`${J}.${q}.${Q}`}}}return null}var qJ=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},_B=()=>{let $=PB();if($==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J$,"X-Stainless-OS":zJ(Deno.build.os),"X-Stainless-Arch":XJ(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J$,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if($==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J$,"X-Stainless-OS":zJ(globalThis.process.platform??"unknown"),"X-Stainless-Arch":XJ(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Z=CB();if(Z)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J$,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${Z.browser}`,"X-Stainless-Runtime-Version":Z.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J$,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},XJ=($)=>{if($==="x32")return"x32";if($==="x86_64"||$==="x64")return"x64";if($==="arm")return"arm";if($==="aarch64"||$==="arm64")return"arm64";if($)return`other:${$}`;return"unknown"},zJ=($)=>{if($=$.toLowerCase(),$.includes("ios"))return"iOS";if($==="android")return"Android";if($==="darwin")return"MacOS";if($==="win32")return"Windows";if($==="freebsd")return"FreeBSD";if($==="openbsd")return"OpenBSD";if($==="linux")return"Linux";if($)return`Other:${$}`;return"Unknown"},JJ,QJ=()=>{return JJ??(JJ=_B())};var Z4=()=>{};function YJ(){if(typeof fetch<"u")return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function X4(...$){let Z=globalThis.ReadableStream;if(typeof Z>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new Z(...$)}function b2($){let Z=Symbol.asyncIterator in $?$[Symbol.asyncIterator]():$[Symbol.iterator]();return X4({start(){},async pull(X){let{done:z,value:J}=await Z.next();if(z)X.close();else X.enqueue(J)},async cancel(){await Z.return?.()}})}function s6($){if($[Symbol.asyncIterator])return $;let Z=$.getReader();return{async next(){try{let X=await Z.read();if(X?.done)Z.releaseLock();return X}catch(X){throw Z.releaseLock(),X}},async return(){let X=Z.cancel();return Z.releaseLock(),await X,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function GJ($){if($===null||typeof $!=="object")return;if($[Symbol.asyncIterator]){await $[Symbol.asyncIterator]().return?.();return}let Z=$.getReader(),X=Z.cancel();Z.releaseLock(),await X}var UJ=({headers:$,body:Z})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Z)}};function VJ($){let Z=0;for(let J of $)Z+=J.length;let X=new Uint8Array(Z),z=0;for(let J of $)X.set(J,z),z+=J.length;return X}function r6($){let Z;return(WJ??(Z=new globalThis.TextEncoder,WJ=Z.encode.bind(Z)))($)}function z4($){let Z;return(HJ??(Z=new globalThis.TextDecoder,HJ=Z.decode.bind(Z)))($)}var WJ,HJ;class q${constructor(){D0.set(this,void 0),L0.set(this,void 0),M(this,D0,new Uint8Array,"f"),M(this,L0,null,"f")}decode($){if($==null)return[];let Z=$ instanceof ArrayBuffer?new Uint8Array($):typeof $==="string"?r6($):$;M(this,D0,VJ([K(this,D0,"f"),Z]),"f");let X=[],z;while((z=jB(K(this,D0,"f"),K(this,L0,"f")))!=null){if(z.carriage&&K(this,L0,"f")==null){M(this,L0,z.index,"f");continue}if(K(this,L0,"f")!=null&&(z.index!==K(this,L0,"f")+1||z.carriage)){X.push(z4(K(this,D0,"f").subarray(0,K(this,L0,"f")-1))),M(this,D0,K(this,D0,"f").subarray(K(this,L0,"f")),"f"),M(this,L0,null,"f");continue}let J=K(this,L0,"f")!==null?z.preceding-1:z.preceding,q=z4(K(this,D0,"f").subarray(0,J));X.push(q),M(this,D0,K(this,D0,"f").subarray(z.index),"f"),M(this,L0,null,"f")}return X}flush(){if(!K(this,D0,"f").length)return[];return this.decode(`
|
|
171
171
|
`)}}function jB($,Z){for(let J=Z??0;J<$.length;J++){if($[J]===10)return{preceding:J,index:J+1,carriage:!1};if($[J]===13)return{preceding:J,index:J+1,carriage:!0}}return null}function KJ($){for(let z=0;z<$.length-1;z++){if($[z]===10&&$[z+1]===10)return z+2;if($[z]===13&&$[z+1]===13)return z+2;if($[z]===13&&$[z+1]===10&&z+3<$.length&&$[z+2]===13&&$[z+3]===10)return z+4}return-1}var D0,L0;var J4=_(()=>{v0();D0=new WeakMap,L0=new WeakMap;q$.NEWLINE_CHARS=new Set([`
|
|
172
172
|
`,"\r"]);q$.NEWLINE_REGEXP=/\r\n|[\n\r]/g});function a6(){}function x2($,Z,X){if(!Z||k2[$]>k2[X])return a6;else return Z[$].bind(Z)}function U0($){let Z=$.logger,X=$.logLevel??"off";if(!Z)return bB;let z=BJ.get(Z);if(z&&z[0]===X)return z[1];let J={error:x2("error",Z,X),warn:x2("warn",Z,X),info:x2("info",Z,X),debug:x2("debug",Z,X)};return BJ.set(Z,[X,J]),J}var k2,q4=($,Z,X)=>{if(!$)return;if(e9(k2,$))return $;U0(X).warn(`${Z} was set to ${JSON.stringify($)}, expected one of ${JSON.stringify(Object.keys(k2))}`);return},bB,BJ,m0=($)=>{if($.options)$.options={...$.options},delete $.options.headers;if($.headers)$.headers=Object.fromEntries(($.headers instanceof Headers?[...$.headers]:Object.entries($.headers)).map(([Z,X])=>[Z,Z.toLowerCase()==="x-api-key"||Z.toLowerCase()==="authorization"||Z.toLowerCase()==="cookie"||Z.toLowerCase()==="set-cookie"?"***":X]));if("retryOfRequestLogID"in $){if($.retryOfRequestLogID)$.retryOf=$.retryOfRequestLogID;delete $.retryOfRequestLogID}return $};var y2=_(()=>{w$();k2={off:0,error:200,warn:300,info:400,debug:500};bB={error:a6,warn:a6,info:a6,debug:a6},BJ=new WeakMap});async function*xB($,Z){if(!$.body){if(Z.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new F("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new F("Attempted to iterate over a response with no body")}let X=new DJ,z=new q$,J=s6($.body);for await(let q of kB(J))for(let Q of z.decode(q)){let Y=X.decode(Q);if(Y)yield Y}for(let q of z.flush()){let Q=X.decode(q);if(Q)yield Q}}async function*kB($){let Z=new Uint8Array;for await(let X of $){if(X==null)continue;let z=X instanceof ArrayBuffer?new Uint8Array(X):typeof X==="string"?r6(X):X,J=new Uint8Array(Z.length+z.length);J.set(Z),J.set(z,Z.length),Z=J;let q;while((q=KJ(Z))!==-1)yield Z.slice(0,q),Z=Z.slice(q)}if(Z.length>0)yield Z}class DJ{constructor(){this.event=null,this.data=[],this.chunks=[]}decode($){if($.endsWith("\r"))$=$.substring(0,$.length-1);if(!$){if(!this.event&&!this.data.length)return null;let J={event:this.event,data:this.data.join(`
|
|
173
173
|
`),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],J}if(this.chunks.push($),$.startsWith(":"))return null;let[Z,X,z]=yB($,":");if(z.startsWith(" "))z=z.substring(1);if(Z==="event")this.event=z;else if(Z==="data")this.data.push(z);return null}}function yB($,Z){let X=$.indexOf(Z);if(X!==-1)return[$.substring(0,X),Z,$.substring(X+Z.length)];return[$,"",""]}var o6,N0;var Q4=_(()=>{v0();B0();J4();w$();y2();B0();N0=class N0{constructor($,Z,X){this.iterator=$,o6.set(this,void 0),this.controller=Z,M(this,o6,X,"f")}static fromSSEResponse($,Z,X){let z=!1,J=X?U0(X):console;async function*q(){if(z)throw new F("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");z=!0;let Q=!1;try{for await(let Y of xB($,Z)){if(Y.event==="completion")try{yield JSON.parse(Y.data)}catch(G){throw J.error("Could not parse message into JSON:",Y.data),J.error("From chunk:",Y.raw),G}if(Y.event==="message_start"||Y.event==="message_delta"||Y.event==="message_stop"||Y.event==="content_block_start"||Y.event==="content_block_delta"||Y.event==="content_block_stop")try{yield JSON.parse(Y.data)}catch(G){throw J.error("Could not parse message into JSON:",Y.data),J.error("From chunk:",Y.raw),G}if(Y.event==="ping")continue;if(Y.event==="error")throw new q0(void 0,j2(Y.data)??Y.data,void 0,$.headers)}Q=!0}catch(Y){if(u0(Y))return;throw Y}finally{if(!Q)Z.abort()}}return new N0(q,Z,X)}static fromReadableStream($,Z,X){let z=!1;async function*J(){let Q=new q$,Y=s6($);for await(let G of Y)for(let U of Q.decode(G))yield U;for(let G of Q.flush())yield G}async function*q(){if(z)throw new F("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");z=!0;let Q=!1;try{for await(let Y of J()){if(Q)continue;if(Y)yield JSON.parse(Y)}Q=!0}catch(Y){if(u0(Y))return;throw Y}finally{if(!Q)Z.abort()}}return new N0(q,Z,X)}[(o6=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let $=[],Z=[],X=this.iterator(),z=(J)=>{return{next:()=>{if(J.length===0){let q=X.next();$.push(q),Z.push(q)}return J.shift()}}};return[new N0(()=>z($),this.controller,K(this,o6,"f")),new N0(()=>z(Z),this.controller,K(this,o6,"f"))]}toReadableStream(){let $=this,Z;return X4({async start(){Z=$[Symbol.asyncIterator]()},async pull(X){try{let{value:z,done:J}=await Z.next();if(J)return X.close();let q=r6(JSON.stringify(z)+`
|
|
@@ -318,4 +318,4 @@ ${Z}
|
|
|
318
318
|
Be concise. One line per suggestion.`}]});console.log(""),console.log(z.content[0].text)}Z0();_5();l();import{existsSync as e4,readFileSync as $7,readdirSync as VD}from"fs";import{join as oJ}from"path";function tJ($,Z){if($==="import")KD(Z);else if($==="export")BD();else console.log(`${O("conductor")} ${N("— conductor integration")}
|
|
319
319
|
`),console.log(` ${b("faf conductor import <path>")} ${N("— import conductor config into .faf")}`),console.log(` ${b("faf conductor export")} ${N("— generate conductor config from .faf")}`)}function KD($){if(!$)console.error("Usage: faf conductor import <path>"),process.exit(2);if(!e4($))console.error(`Error: path not found: ${$}`),process.exit(2);let Z={faf_version:"3.0",project:{}};if(e4($)&&$.endsWith(".json")){let J=JSON.parse($7($,"utf-8"));if(J.name)Z.project.name=J.name;if(J.description)Z.project.goal=J.description;if(J.language)Z.project.main_language=J.language}else if(e4($)&&($.endsWith(".yml")||$.endsWith(".yaml"))){let J=u6($7($,"utf-8"));if(J.name)Z.project.name=J.name;if(J.description)Z.project.goal=J.description;if(J.language)Z.project.main_language=J.language}else try{let J=VD($);for(let q of J){let Q=oJ($,q);if(q.endsWith(".json"))try{let Y=JSON.parse($7(Q,"utf-8"));if(Y.name&&!Z.project.name)Z.project.name=Y.name;if(Y.description&&!Z.project.goal)Z.project.goal=Y.description}catch{}}}catch{console.error(`Error: could not read directory: ${$}`),process.exit(2)}let X=process.cwd(),z=g(X);if(z){let J=c(z);if(!J.project)J.project={};if(Z.project.name&&!J.project.name)J.project.name=Z.project.name;if(Z.project.goal&&!J.project.goal)J.project.goal=Z.project.goal;if(Z.project.main_language&&!J.project.main_language)J.project.main_language=Z.project.main_language;s(z,J),console.log(`${O("◆")} conductor import merged into ${z}`)}else{let J=oJ(X,"project.faf");s(J,Z),console.log(`${O("◆")} conductor import created ${J}`)}}function BD(){let $=g();if(!$)console.error(`Error: project.faf not found
|
|
320
320
|
|
|
321
|
-
Run 'faf init' to create one.`),process.exit(2);let Z=c($),X={name:Z.project?.name??"",description:Z.project?.goal??"",language:Z.project?.main_language??"",stack:Z.stack??{}};console.log(JSON.stringify(X,null,2))}var eJ="6.0.11",y=new T7;y.name("faf").description("Foundational AI-Context Format — project DNA for any AI").version(eJ,"-v, --version");y.command("init").description("Create .faf from your project").option("--yolo","Quick init with sensible defaults").option("--quick","Alias for --yolo").option("--force","Overwrite existing project.faf").option("--output <path>","Output path").action(($)=>k5($));y.command("auto").description("Zero to 100% in one command").action(()=>y5());y.command("go").description("Guided interview to gold code").option("--resume","Resume previous session").action(($)=>a9($));y.command("score [file]").description("Score a .faf file").option("--verbose","Show slot breakdown").option("--status","Compact one-liner output").option("--json","Output as JSON").action(($,Z)=>b5($,Z));y.command("sync").description(".faf ↔ CLAUDE.md (bi-sync, mtime auto-direction)").option("--watch","Watch for changes").option("--direction <dir>","Force direction: auto|push|pull","auto").action(($)=>u5($));y.command("compile [file]").description("Compile .faf to .fafb binary").option("--output <path>","Output path").action(($,Z)=>W9($,Z));y.command("decompile <file>").description("Decompile .fafb to JSON").option("--output <path>","Output path").action(($,Z)=>H9($,Z));y.command("git <url>").description("Instant .faf from any GitHub repo").action(($)=>N9($));y.command("export").description("Export context files from .faf").option("--agents","Generate AGENTS.md").option("--cursor","Generate .cursorrules").option("--gemini","Generate GEMINI.md").option("--conductor","Generate conductor config").option("--all","Generate all formats").action(($)=>c6($));y.command("check [file]").description("Validate .faf file").option("--strict","Require 100% score").option("--fix","Auto-fix issues").option("--doctor","Full diagnostic").option("--trust","Verify trust chain").action(($,Z)=>d5($,Z));y.command("info").description("Show version and system info").option("--version","Show version").option("--faq","Show FAQ").option("--index","Show command index").option("--stacks","Show supported stacks").action(($)=>T9($));y.command("formats").description("Show supported formats").action(()=>M9());y.command("clear").description("Clear cached data").action(()=>O9());y.command("convert").description("Convert .faf to other formats").option("--json","Output as JSON").action(($)=>w9($));y.command("context").description("Generate context output").action(()=>R9());y.command("drift").description("Check context drift").action(()=>A9());y.command("edit <path> <value>").description("Edit .faf fields").action(($,Z)=>P9($,Z));y.command("recover").description("Recover .faf from context files").action(()=>_9());y.command("migrate").description("Migrate .faf to latest version").option("--dry-run","Preview changes without writing").action(($)=>C9($));y.command("pro [subcommand]").description("Pro features & licensing").action(($)=>c9($));y.command("share").description("Share .faf via URL").option("--copy","Copy to clipboard").option("--raw","Output encoded string only").action(($)=>p9($));y.command("demo").description("Demo walkthrough").action(()=>i9());y.command("search <query>").description("Search slots and formats").option("--slots","Search slots only").option("--formats","Search formats only").action(($,Z)=>n9($,Z));y.command("taf").description("Test Archive Format receipt").option("--output <path>","Write receipt to file").action(($)=>s9($));y.command("ai [subcommand]").description("AI-powered features (enhance|analyze)").action(($)=>rJ($));y.command("conductor [subcommand] [path]").description("Conductor integration").action(($,Z)=>tJ($,Z));y.command("bi-sync",{hidden:!0}).action(()=>u5());y.command("status",{hidden:!0}).action(()=>b5(void 0,{status:!0}));y.command("agents",{hidden:!0}).action(()=>c6({agents:!0}));y.command("cursor",{hidden:!0}).action(()=>c6({cursor:!0}));y.command("gemini",{hidden:!0}).action(()=>c6({gemini:!0}));y.command("validate",{hidden:!0}).action(($)=>d5($));y.command("yolo",{hidden:!0}).action(()=>k5({yolo:!0}));if(process.argv.length<=2){let{bold:$,dim:Z,fafCyan:X}=await Promise.resolve().then(() => (l(),hz)),{autoCommand:z}=await Promise.resolve().then(() => (f5(),Z9)),J=process.cwd().replace(process.env.HOME??"","~"),q="\x1B[38;2;150;150;150m",Q="\x1B[48;2;150;150;150m",Y="\x1B[38;2;29;29;29m",G="\x1B[48;2;29;29;29m",U="\x1B[0m";console.log(""),console.log(`\x1B[48;2;29;29;29m ${"\x1B[38;2;150;150;150m"}▄${"\x1B[48;2;150;150;150m"}███████${"\x1B[48;2;29;29;29m"}${"\x1B[38;2;150;150;150m"}▄${"\x1B[0m"}`),console.log(`\x1B[48;2;29;29;29m \x1B[48;2;150;150;150m${"\x1B[38;2;150;150;150m"}█${"\x1B[48;2;29;29;29m"}${"\x1B[38;2;150;150;150m"}▀${"\x1B[48;2;150;150;150m"}███████${"\x1B[0m"} ${X($("faf"))} ${Z(`v${eJ}`)}`);let W="\x1B[38;2;39;174;96m";console.log(`\x1B[48;2;29;29;29m${"\x1B[38;2;150;150;150m"}▀${"\x1B[48;2;150;150;150m"}${"\x1B[38;2;29;29;29m"}▄${"\x1B[48;2;29;29;29m"}
|
|
321
|
+
Run 'faf init' to create one.`),process.exit(2);let Z=c($),X={name:Z.project?.name??"",description:Z.project?.goal??"",language:Z.project?.main_language??"",stack:Z.stack??{}};console.log(JSON.stringify(X,null,2))}var eJ="6.0.11",y=new T7;y.name("faf").description("Foundational AI-Context Format — project DNA for any AI").version(eJ,"-v, --version");y.command("init").description("Create .faf from your project").option("--yolo","Quick init with sensible defaults").option("--quick","Alias for --yolo").option("--force","Overwrite existing project.faf").option("--output <path>","Output path").action(($)=>k5($));y.command("auto").description("Zero to 100% in one command").action(()=>y5());y.command("go").description("Guided interview to gold code").option("--resume","Resume previous session").action(($)=>a9($));y.command("score [file]").description("Score a .faf file").option("--verbose","Show slot breakdown").option("--status","Compact one-liner output").option("--json","Output as JSON").action(($,Z)=>b5($,Z));y.command("sync").description(".faf ↔ CLAUDE.md (bi-sync, mtime auto-direction)").option("--watch","Watch for changes").option("--direction <dir>","Force direction: auto|push|pull","auto").action(($)=>u5($));y.command("compile [file]").description("Compile .faf to .fafb binary").option("--output <path>","Output path").action(($,Z)=>W9($,Z));y.command("decompile <file>").description("Decompile .fafb to JSON").option("--output <path>","Output path").action(($,Z)=>H9($,Z));y.command("git <url>").description("Instant .faf from any GitHub repo").action(($)=>N9($));y.command("export").description("Export context files from .faf").option("--agents","Generate AGENTS.md").option("--cursor","Generate .cursorrules").option("--gemini","Generate GEMINI.md").option("--conductor","Generate conductor config").option("--all","Generate all formats").action(($)=>c6($));y.command("check [file]").description("Validate .faf file").option("--strict","Require 100% score").option("--fix","Auto-fix issues").option("--doctor","Full diagnostic").option("--trust","Verify trust chain").action(($,Z)=>d5($,Z));y.command("info").description("Show version and system info").option("--version","Show version").option("--faq","Show FAQ").option("--index","Show command index").option("--stacks","Show supported stacks").action(($)=>T9($));y.command("formats").description("Show supported formats").action(()=>M9());y.command("clear").description("Clear cached data").action(()=>O9());y.command("convert").description("Convert .faf to other formats").option("--json","Output as JSON").action(($)=>w9($));y.command("context").description("Generate context output").action(()=>R9());y.command("drift").description("Check context drift").action(()=>A9());y.command("edit <path> <value>").description("Edit .faf fields").action(($,Z)=>P9($,Z));y.command("recover").description("Recover .faf from context files").action(()=>_9());y.command("migrate").description("Migrate .faf to latest version").option("--dry-run","Preview changes without writing").action(($)=>C9($));y.command("pro [subcommand]").description("Pro features & licensing").action(($)=>c9($));y.command("share").description("Share .faf via URL").option("--copy","Copy to clipboard").option("--raw","Output encoded string only").action(($)=>p9($));y.command("demo").description("Demo walkthrough").action(()=>i9());y.command("search <query>").description("Search slots and formats").option("--slots","Search slots only").option("--formats","Search formats only").action(($,Z)=>n9($,Z));y.command("taf").description("Test Archive Format receipt").option("--output <path>","Write receipt to file").action(($)=>s9($));y.command("ai [subcommand]").description("AI-powered features (enhance|analyze)").action(($)=>rJ($));y.command("conductor [subcommand] [path]").description("Conductor integration").action(($,Z)=>tJ($,Z));y.command("bi-sync",{hidden:!0}).action(()=>u5());y.command("status",{hidden:!0}).action(()=>b5(void 0,{status:!0}));y.command("agents",{hidden:!0}).action(()=>c6({agents:!0}));y.command("cursor",{hidden:!0}).action(()=>c6({cursor:!0}));y.command("gemini",{hidden:!0}).action(()=>c6({gemini:!0}));y.command("validate",{hidden:!0}).action(($)=>d5($));y.command("yolo",{hidden:!0}).action(()=>k5({yolo:!0}));if(process.argv.length<=2){let{bold:$,dim:Z,fafCyan:X}=await Promise.resolve().then(() => (l(),hz)),{autoCommand:z}=await Promise.resolve().then(() => (f5(),Z9)),J=process.cwd().replace(process.env.HOME??"","~"),q="\x1B[38;2;150;150;150m",Q="\x1B[48;2;150;150;150m",Y="\x1B[38;2;29;29;29m",G="\x1B[48;2;29;29;29m",U="\x1B[0m";console.log(""),console.log(`\x1B[48;2;29;29;29m ${"\x1B[38;2;150;150;150m"}▄${"\x1B[48;2;150;150;150m"}███████${"\x1B[48;2;29;29;29m"}${"\x1B[38;2;150;150;150m"}▄${"\x1B[0m"}`),console.log(`\x1B[48;2;29;29;29m \x1B[48;2;150;150;150m${"\x1B[38;2;150;150;150m"}█${"\x1B[48;2;29;29;29m"}${"\x1B[38;2;150;150;150m"}▀${"\x1B[48;2;150;150;150m"}███████${"\x1B[0m"} ${X($("faf"))} ${Z(`v${eJ}`)}`);let W="\x1B[38;2;39;174;96m";console.log(`\x1B[48;2;29;29;29m${"\x1B[38;2;150;150;150m"}▀${"\x1B[48;2;150;150;150m"}${"\x1B[38;2;29;29;29m"}▄${"\x1B[48;2;29;29;29m"} \x1B[48;2;150;150;150m${"\x1B[38;2;150;150;150m"}██${"\x1B[48;2;29;29;29m"} \x1B[48;2;150;150;150m${"\x1B[38;2;150;150;150m"}██${"\x1B[48;2;29;29;29m"} \x1B[0m ${Z("Nelly Never Forgets")}`),console.log(`${W}▔▔▔▔▔▔▔▔▔▔▔▔${"\x1B[0m"}`),console.log(`${Z(` ${J}`)}`),console.log(""),z(),console.log(""),console.log(` ${Z("Run")} ${X("faf --help")} ${Z("for commands")}`),console.log(` ${Z("Like it?")} ${X("github.com/Wolfe-Jam/faf-cli")} ${Z("— a")} ⭐ ${Z("goes a long way")}`)}else y.parse(process.argv);
|
package/package.json
CHANGED