faf-cli 6.4.1 → 6.5.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
@@ -1,7 +1,7 @@
1
- import{createRequire as O}from"node:module";var E=Object.defineProperty;var I=(x)=>x;function J(x,P){this[x]=I.bind(null,P)}var L=(x,P)=>{for(var S in P)E(x,S,{get:P[S],enumerable:!0,configurable:!0,set:J.bind(P,S)})};var Q=O(import.meta.url);var p=[{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"}],T=new Map(p.map((x)=>[x.path,x]));function U(x){return p.filter((P)=>P.category===x)}var X=p.filter((x)=>x.index<=21),Z=p,A=new Set(["describe your project goal","development teams","cloud platform","null","none","unknown","n/a","not applicable"]);function $(x){if(x===null||x===void 0||x==="")return!0;if(typeof x==="string")return A.has(x.toLowerCase().trim());if(Array.isArray(x)&&x.length===0)return!0;if(typeof x==="object"&&Object.keys(x).length===0)return!0;return!1}var q=(x)=>(P)=>`\x1B[${x}m${P}\x1B[0m`,w=q("1"),H=q("2"),o=q("3"),B=(x)=>`\x1B[38;2;0;212;212m${x}\x1B[0m`,N=(x)=>`\x1B[38;5;208m${x}\x1B[0m`;var F=[{name:"TROPHY",indicator:`${N("\uD83C\uDFC6")} ${N("TROPHY")}`,threshold:100},{name:"GOLD",indicator:`${N(w("★"))} ${N("GOLD")}`,threshold:99},{name:"SILVER",indicator:`${B("◆")} ${B("SILVER")}`,threshold:95},{name:"BRONZE",indicator:`${B("◇")} ${B("BRONZE")}`,threshold:85},{name:"GREEN",indicator:`${w("●")} GREEN`,threshold:70},{name:"YELLOW",indicator:`${H("●")} YELLOW`,threshold:55},{name:"RED",indicator:`${H("○")} RED`,threshold:1},{name:"WHITE",indicator:`${H("♡")}`,threshold:0}];function Y(x){for(let P of F)if(x>=P.threshold)return P;return F[F.length-1]}function h(x){let P=Y(x),S=F.indexOf(P);return S>0?F[S-1]:null}function M(x){return{score:x.score,tier:Y(x.score),populated:x.populated,empty:x.empty,ignored:x.ignored,active:x.active,total:x.total,slots:x.slots}}function R(x){let P=[];if(!x||typeof x!=="object")return P.push("File is not a valid YAML mapping"),{valid:!1,errors:P};let S=x;if(!S.faf_version)P.push("Missing required field: faf_version");if(!S.project?.name)P.push("Missing required field: project.name");return{valid:P.length===0,errors:P}}var D={};L(D,{validate:()=>j,sdkVersion:()=>K,scoreFafb:()=>m,scoreEnterprise:()=>W,score:()=>V,fafbInfo:()=>f,decompile:()=>G,compile:()=>C});var z=null;function _(){if(!z)try{z=Q("faf-scoring-kernel")}catch{throw Error(`faf-scoring-kernel not installed.
1
+ import{createRequire as O}from"node:module";var E=Object.defineProperty;var I=(x)=>x;function J(x,P){this[x]=I.bind(null,P)}var L=(x,P)=>{for(var _ in P)E(x,_,{get:P[_],enumerable:!0,configurable:!0,set:J.bind(P,_)})};var Q=O(import.meta.url);var B=[{index:1,path:"project.name",description:"Project name",category:"project"},{index:2,path:"project.goal",description:"Goal (use case)",category:"project"},{index:3,path:"project.main_language",description:"Primary language",category:"project"},{index:4,path:"human_context.who",description:"Who is this for?",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"}],T=new Map(B.map((x)=>[x.path,x]));function U(x){return B.filter((P)=>P.category===x)}var X=B.filter((x)=>x.index<=21),Z=B,z=new Set(["describe your project goal","development teams","cloud platform","null","none","unknown","n/a","not applicable"]);function $(x){if(x===null||x===void 0||x==="")return!0;if(typeof x==="string")return z.has(x.toLowerCase().trim());if(Array.isArray(x)&&x.length===0)return!0;if(typeof x==="object"&&Object.keys(x).length===0)return!0;return!1}var Y=(x)=>(P)=>`\x1B[${x}m${P}\x1B[0m`,q=Y("1"),A=Y("2"),i=Y("3"),N=(x)=>`\x1B[38;2;0;212;212m${x}\x1B[0m`,S=(x)=>`\x1B[38;5;208m${x}\x1B[0m`;var F=[{name:"TROPHY",indicator:`${S("\uD83C\uDFC6")} ${S("TROPHY")}`,threshold:100},{name:"GOLD",indicator:`${S(q("★"))} ${S("GOLD")}`,threshold:99},{name:"SILVER",indicator:`${N("◆")} ${N("SILVER")}`,threshold:95},{name:"BRONZE",indicator:`${N("◇")} ${N("BRONZE")}`,threshold:85},{name:"GREEN",indicator:`${q("●")} GREEN`,threshold:70},{name:"YELLOW",indicator:`${A("●")} YELLOW`,threshold:55},{name:"RED",indicator:`${A("○")} RED`,threshold:1},{name:"WHITE",indicator:`${A("♡")}`,threshold:0}];function H(x){for(let P of F)if(x>=P.threshold)return P;return F[F.length-1]}function M(x){let P=H(x),_=F.indexOf(P);return _>0?F[_-1]:null}function R(x){return{score:x.score,tier:H(x.score),populated:x.populated,empty:x.empty,ignored:x.ignored,active:x.active,total:x.total,slots:x.slots}}function V(x){let P=[];if(!x||typeof x!=="object")return P.push("File is not a valid YAML mapping"),{valid:!1,errors:P};let _=x;if(!_.faf_version)P.push("Missing required field: faf_version");if(!_.project?.name)P.push("Missing required field: project.name");return{valid:P.length===0,errors:P}}var D={};L(D,{validate:()=>j,sdkVersion:()=>K,scoreFafb:()=>m,scoreEnterprise:()=>h,score:()=>W,fafbInfo:()=>f,decompile:()=>G,compile:()=>C});var w=null;function p(){if(!w)try{w=Q("faf-scoring-kernel")}catch{throw Error(`faf-scoring-kernel not installed.
2
2
 
3
3
  Run: npm install faf-scoring-kernel
4
- `)}return z}function V(x){return JSON.parse(_().score_faf(x))}function W(x){return JSON.parse(_().score_faf_enterprise(x))}function j(x){return _().validate_faf(x)}function C(x){return _().compile_fafb(x)}function G(x){return JSON.parse(_().decompile_fafb(x))}function f(x){return JSON.parse(_().fafb_info(x))}function m(x){return JSON.parse(_().score_fafb(x))}function K(){return _().sdk_version()}export{R as validateFaf,U as slotsByCategory,D as kernel,$ as isPlaceholder,Y as getTier,h as getNextTier,M as enrichScore,F as TIERS,T as SLOT_BY_PATH,p as SLOTS,A as PLACEHOLDERS,Z as ENTERPRISE_SLOTS,X as BASE_SLOTS};
4
+ `)}return w}function W(x){return JSON.parse(p().score_faf(x))}function h(x){return JSON.parse(p().score_faf_enterprise(x))}function j(x){return p().validate_faf(x)}function C(x){return p().compile_fafb(x)}function G(x){return JSON.parse(p().decompile_fafb(x))}function f(x){return JSON.parse(p().fafb_info(x))}function m(x){return JSON.parse(p().score_fafb(x))}function K(){return p().sdk_version()}export{V as validateFaf,U as slotsByCategory,D as kernel,$ as isPlaceholder,H as getTier,M as getNextTier,R as enrichScore,F as TIERS,T as SLOT_BY_PATH,B as SLOTS,z as PLACEHOLDERS,Z as ENTERPRISE_SLOTS,X as BASE_SLOTS};
5
5
 
6
- //# debugId=DC6FDBAB48D1F38D64756E2164756E21
6
+ //# debugId=6974C7914867615464756E2164756E21
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -2,14 +2,14 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/core/slots.ts", "../src/ui/colors.ts", "../src/core/tiers.ts", "../src/core/scorer.ts", "../src/core/schema.ts", "../src/wasm/kernel.ts"],
4
4
  "sourcesContent": [
5
- "import type { SlotDef, SlotCategory } from './types.js';\n\n/** All 33 Mk4 canonical slots */\nexport const SLOTS: SlotDef[] = [\n // Project Meta (3)\n { index: 1, path: 'project.name', description: 'Project name', category: 'project' },\n { index: 2, path: 'project.goal', description: 'What the project does', category: 'project' },\n { index: 3, path: 'project.main_language', description: 'Primary language', category: 'project' },\n\n // Human Context (6)\n { index: 4, path: 'human_context.who', description: 'Who is building this', category: 'human' },\n { index: 5, path: 'human_context.what', description: 'What are they building', category: 'human' },\n { index: 6, path: 'human_context.why', description: 'Why does it exist', category: 'human' },\n { index: 7, path: 'human_context.where', description: 'Where does it run', category: 'human' },\n { index: 8, path: 'human_context.when', description: 'When was it started / timeline', category: 'human' },\n { index: 9, path: 'human_context.how', description: 'How is it built', category: 'human' },\n\n // Frontend Stack (4)\n { index: 10, path: 'stack.frontend', description: 'Framework (React, Svelte, etc.)', category: 'frontend' },\n { index: 11, path: 'stack.css_framework', description: 'CSS framework', category: 'frontend' },\n { index: 12, path: 'stack.ui_library', description: 'UI component library', category: 'frontend' },\n { index: 13, path: 'stack.state_management', description: 'State management', category: 'frontend' },\n\n // Backend Stack (5)\n { index: 14, path: 'stack.backend', description: 'Backend framework', category: 'backend' },\n { index: 15, path: 'stack.api_type', description: 'API style (REST, GraphQL, etc.)', category: 'backend' },\n { index: 16, path: 'stack.runtime', description: 'Runtime (Node, Bun, Python, etc.)', category: 'backend' },\n { index: 17, path: 'stack.database', description: 'Database', category: 'backend' },\n { index: 18, path: 'stack.connection', description: 'Connection method (Prisma, etc.)', category: 'backend' },\n\n // Universal Stack (3)\n { index: 19, path: 'stack.hosting', description: 'Hosting platform', category: 'universal' },\n { index: 20, path: 'stack.build', description: 'Build tool', category: 'universal' },\n { index: 21, path: 'stack.cicd', description: 'CI/CD', category: 'universal' },\n\n // Enterprise Infra (5)\n { index: 22, path: 'stack.monorepo_tool', description: 'Monorepo tool', category: 'enterprise_infra' },\n { index: 23, path: 'stack.package_manager', description: 'Package manager', category: 'enterprise_infra' },\n { index: 24, path: 'stack.workspaces', description: 'Workspace configuration', category: 'enterprise_infra' },\n { index: 25, path: 'monorepo.packages_count', description: 'Number of packages', category: 'enterprise_infra' },\n { index: 26, path: 'monorepo.build_orchestrator', description: 'Build orchestration tool', category: 'enterprise_infra' },\n\n // Enterprise App (4)\n { index: 27, path: 'stack.admin', description: 'Admin panel', category: 'enterprise_app' },\n { index: 28, path: 'stack.cache', description: 'Caching layer', category: 'enterprise_app' },\n { index: 29, path: 'stack.search', description: 'Search engine', category: 'enterprise_app' },\n { index: 30, path: 'stack.storage', description: 'Object storage', category: 'enterprise_app' },\n\n // Enterprise Ops (3)\n { index: 31, path: 'monorepo.versioning_strategy', description: 'Version strategy', category: 'enterprise_ops' },\n { index: 32, path: 'monorepo.shared_configs', description: 'Shared configs', category: 'enterprise_ops' },\n { index: 33, path: 'monorepo.remote_cache', description: 'Remote build cache', category: 'enterprise_ops' },\n];\n\n/** Slot lookup by path */\nexport const SLOT_BY_PATH = new Map(SLOTS.map(s => [s.path, s]));\n\n/** Slots grouped by category */\nexport function slotsByCategory(category: SlotCategory): SlotDef[] {\n return SLOTS.filter(s => s.category === category);\n}\n\n/** Base-tier slots (1-21) — used by score_faf */\nexport const BASE_SLOTS = SLOTS.filter(s => s.index <= 21);\n\n/** Enterprise-tier slots (1-33) — used by score_faf_enterprise */\nexport const ENTERPRISE_SLOTS = SLOTS;\n\n/** Placeholder values treated as Empty */\nexport const PLACEHOLDERS = new Set([\n 'describe your project goal',\n 'development teams',\n 'cloud platform',\n 'null',\n 'none',\n 'unknown',\n 'n/a',\n 'not applicable',\n]);\n\n/** Check if a value is a placeholder (empty) */\nexport function isPlaceholder(value: unknown): boolean {\n if (value === null || value === undefined || value === '') return true;\n if (typeof value === 'string') {\n return PLACEHOLDERS.has(value.toLowerCase().trim());\n }\n if (Array.isArray(value) && value.length === 0) return true;\n if (typeof value === 'object' && Object.keys(value as object).length === 0) return true;\n return false;\n}\n\n/** App-type to active category mapping for faf init */\nexport const APP_TYPE_CATEGORIES: Record<string, SlotCategory[]> = {\n cli: ['project', 'human'],\n library: ['project', 'human'],\n mcp: ['project', 'backend', 'human'],\n backend: ['project', 'backend', 'universal', 'human'],\n 'data-science': ['project', 'backend', 'human'],\n frontend: ['project', 'frontend', 'human'],\n fullstack: ['project', 'frontend', 'backend', 'universal', 'human'],\n svelte: ['project', 'frontend', 'backend', 'universal', 'human'],\n framework: ['project', 'frontend', 'backend', 'universal', 'human'],\n enterprise: ['project', 'frontend', 'backend', 'universal', 'human', 'enterprise_infra', 'enterprise_app', 'enterprise_ops'],\n};\n",
5
+ "import type { SlotDef, SlotCategory } from './types.js';\n\n/** All 33 Mk4 canonical slots */\nexport const SLOTS: SlotDef[] = [\n // Project Meta (3)\n { index: 1, path: 'project.name', description: 'Project name', category: 'project' },\n { index: 2, path: 'project.goal', description: 'Goal (use case)', category: 'project' },\n { index: 3, path: 'project.main_language', description: 'Primary language', category: 'project' },\n\n // Human Context (6)\n { index: 4, path: 'human_context.who', description: 'Who is this for?', category: 'human' },\n { index: 5, path: 'human_context.what', description: 'What are they building', category: 'human' },\n { index: 6, path: 'human_context.why', description: 'Why does it exist', category: 'human' },\n { index: 7, path: 'human_context.where', description: 'Where does it run', category: 'human' },\n { index: 8, path: 'human_context.when', description: 'When was it started / timeline', category: 'human' },\n { index: 9, path: 'human_context.how', description: 'How is it built', category: 'human' },\n\n // Frontend Stack (4)\n { index: 10, path: 'stack.frontend', description: 'Framework (React, Svelte, etc.)', category: 'frontend' },\n { index: 11, path: 'stack.css_framework', description: 'CSS framework', category: 'frontend' },\n { index: 12, path: 'stack.ui_library', description: 'UI component library', category: 'frontend' },\n { index: 13, path: 'stack.state_management', description: 'State management', category: 'frontend' },\n\n // Backend Stack (5)\n { index: 14, path: 'stack.backend', description: 'Backend framework', category: 'backend' },\n { index: 15, path: 'stack.api_type', description: 'API style (REST, GraphQL, etc.)', category: 'backend' },\n { index: 16, path: 'stack.runtime', description: 'Runtime (Node, Bun, Python, etc.)', category: 'backend' },\n { index: 17, path: 'stack.database', description: 'Database', category: 'backend' },\n { index: 18, path: 'stack.connection', description: 'Connection method (Prisma, etc.)', category: 'backend' },\n\n // Universal Stack (3)\n { index: 19, path: 'stack.hosting', description: 'Hosting platform', category: 'universal' },\n { index: 20, path: 'stack.build', description: 'Build tool', category: 'universal' },\n { index: 21, path: 'stack.cicd', description: 'CI/CD', category: 'universal' },\n\n // Enterprise Infra (5)\n { index: 22, path: 'stack.monorepo_tool', description: 'Monorepo tool', category: 'enterprise_infra' },\n { index: 23, path: 'stack.package_manager', description: 'Package manager', category: 'enterprise_infra' },\n { index: 24, path: 'stack.workspaces', description: 'Workspace configuration', category: 'enterprise_infra' },\n { index: 25, path: 'monorepo.packages_count', description: 'Number of packages', category: 'enterprise_infra' },\n { index: 26, path: 'monorepo.build_orchestrator', description: 'Build orchestration tool', category: 'enterprise_infra' },\n\n // Enterprise App (4)\n { index: 27, path: 'stack.admin', description: 'Admin panel', category: 'enterprise_app' },\n { index: 28, path: 'stack.cache', description: 'Caching layer', category: 'enterprise_app' },\n { index: 29, path: 'stack.search', description: 'Search engine', category: 'enterprise_app' },\n { index: 30, path: 'stack.storage', description: 'Object storage', category: 'enterprise_app' },\n\n // Enterprise Ops (3)\n { index: 31, path: 'monorepo.versioning_strategy', description: 'Version strategy', category: 'enterprise_ops' },\n { index: 32, path: 'monorepo.shared_configs', description: 'Shared configs', category: 'enterprise_ops' },\n { index: 33, path: 'monorepo.remote_cache', description: 'Remote build cache', category: 'enterprise_ops' },\n];\n\n/** Slot lookup by path */\nexport const SLOT_BY_PATH = new Map(SLOTS.map(s => [s.path, s]));\n\n/** Slots grouped by category */\nexport function slotsByCategory(category: SlotCategory): SlotDef[] {\n return SLOTS.filter(s => s.category === category);\n}\n\n/** Base-tier slots (1-21) — used by score_faf */\nexport const BASE_SLOTS = SLOTS.filter(s => s.index <= 21);\n\n/** Enterprise-tier slots (1-33) — used by score_faf_enterprise */\nexport const ENTERPRISE_SLOTS = SLOTS;\n\n/** Placeholder values treated as Empty */\nexport const PLACEHOLDERS = new Set([\n 'describe your project goal',\n 'development teams',\n 'cloud platform',\n 'null',\n 'none',\n 'unknown',\n 'n/a',\n 'not applicable',\n]);\n\n/** Check if a value is a placeholder (empty) */\nexport function isPlaceholder(value: unknown): boolean {\n if (value === null || value === undefined || value === '') return true;\n if (typeof value === 'string') {\n return PLACEHOLDERS.has(value.toLowerCase().trim());\n }\n if (Array.isArray(value) && value.length === 0) return true;\n if (typeof value === 'object' && Object.keys(value as object).length === 0) return true;\n return false;\n}\n\n/** App-type to active category mapping. The canonical 19-type ladder\n * (see app-types-canonical-v6.5.md doctrine memory). Sorted ascending by\n * active slot count for readability.\n *\n * v6.5.0 changes vs prior:\n * - Added `universal` to cli / library / mcp / frontend / data-science.\n * These types ship/build/CI somewhere — slotignoring those slots was\n * losing real signal. (cli/library: 9→12; mcp/data-science: 14→17;\n * frontend: 13→16.)\n * - Order is by ascending slot count, not insertion order.\n */\nexport const APP_TYPE_CATEGORIES: Record<string, SlotCategory[]> = {\n // 9 slots — minimal (project meta + human only)\n documentation: ['project', 'human'],\n\n // 12 slots — project + human + universal (build/ci/hosting matters)\n cli: ['project', 'human', 'universal'],\n library: ['project', 'human', 'universal'],\n sdk: ['project', 'human', 'universal'],\n wasm: ['project', 'human', 'universal'],\n html: ['project', 'human', 'universal'],\n\n // 16 slots — project + frontend + human + universal\n frontend: ['project', 'frontend', 'human', 'universal'],\n website: ['project', 'frontend', 'human', 'universal'],\n mobile: ['project', 'frontend', 'human', 'universal'],\n\n // 17 slots — project + backend + universal + human\n mcp: ['project', 'backend', 'human', 'universal'],\n backend: ['project', 'backend', 'universal', 'human'],\n 'data-science': ['project', 'backend', 'human', 'universal'],\n\n // 21 slots — full base ladder\n fullstack: ['project', 'frontend', 'backend', 'universal', 'human'],\n svelte: ['project', 'frontend', 'backend', 'universal', 'human'],\n framework: ['project', 'frontend', 'backend', 'universal', 'human'],\n 'monorepo-root': ['project', 'human', 'enterprise_infra', 'enterprise_app', 'enterprise_ops'],\n\n // 24-25 slots — platform / SaaS shapes (base + selected enterprise)\n mcpaas: ['project', 'backend', 'universal', 'human', 'enterprise_app', 'enterprise_ops'],\n saas: ['project', 'frontend', 'backend', 'universal', 'human', 'enterprise_app'],\n\n // 33 slots — full enterprise\n enterprise: ['project', 'frontend', 'backend', 'universal', 'human', 'enterprise_infra', 'enterprise_app', 'enterprise_ops'],\n};\n",
6
6
  "// ANSI color helpers — zero deps\n// Design: black/white text by default. Cyan + orange are the only brand colors.\nconst esc = (code: string) => (s: string) => `\\x1b[${code}m${s}\\x1b[0m`;\n\nexport const bold = esc('1');\nexport const dim = esc('2');\nexport const italic = esc('3');\n\n// Brand colors only — no red/green/yellow rainbow\nexport const fafCyan = (s: string) => `\\x1b[38;2;0;212;212m${s}\\x1b[0m`; // #00D4D4\nexport const orange = (s: string) => `\\x1b[38;5;208m${s}\\x1b[0m`;\n",
7
7
  "import type { TierInfo } from './types.js';\nimport { bold, dim, fafCyan, orange } from '../ui/colors.js';\n\n/** Tier boundaries — ordered from highest to lowest\n *\n * Indicators:\n * 🏆 trophy (earned at 100%)\n * ★ filled star (gold — orange)\n * ◆ filled diamond (silver — cyan)\n * ◇ open diamond (bronze — cyan)\n * ● filled circle (mid tiers)\n * ○ open circle (low — dim)\n * ♡ heart (empty — good luck)\n */\nexport const TIERS: TierInfo[] = [\n { name: 'TROPHY', indicator: `${orange('🏆')} ${orange('TROPHY')}`, threshold: 100 },\n { name: 'GOLD', indicator: `${orange(bold('★'))} ${orange('GOLD')}`, threshold: 99 },\n { name: 'SILVER', indicator: `${fafCyan('◆')} ${fafCyan('SILVER')}`, threshold: 95 },\n { name: 'BRONZE', indicator: `${fafCyan('◇')} ${fafCyan('BRONZE')}`, threshold: 85 },\n { name: 'GREEN', indicator: `${bold('●')} GREEN`, threshold: 70 },\n { name: 'YELLOW', indicator: `${dim('●')} YELLOW`, threshold: 55 },\n { name: 'RED', indicator: `${dim('○')} RED`, threshold: 1 },\n { name: 'WHITE', indicator: `${dim('♡')}`, threshold: 0 },\n];\n\n/** Get the display badge for a tier */\nexport function tierBadge(tier: TierInfo): string {\n return tier.indicator;\n}\n\n/** Get tier info for a given score */\nexport function getTier(score: number): TierInfo {\n for (const tier of TIERS) {\n if (score >= tier.threshold) return tier;\n }\n return TIERS[TIERS.length - 1]; // White\n}\n\n/** Get the next tier above the current score (for progress display) */\nexport function getNextTier(score: number): TierInfo | null {\n const current = getTier(score);\n const idx = TIERS.indexOf(current);\n return idx > 0 ? TIERS[idx - 1] : null;\n}\n",
8
8
  "import type { KernelScoreResult, ScoreResult } from './types.js';\nimport { getTier } from './tiers.js';\n\n/** Convert kernel result into enriched ScoreResult */\nexport function enrichScore(kernel: KernelScoreResult): ScoreResult {\n return {\n score: kernel.score,\n tier: getTier(kernel.score),\n populated: kernel.populated,\n empty: kernel.empty,\n ignored: kernel.ignored,\n active: kernel.active,\n total: kernel.total,\n slots: kernel.slots,\n };\n}\n",
9
9
  "import type { FafData } from './types.js';\n\n/** Validate a parsed .faf object */\nexport function validateFaf(data: unknown): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!data || typeof data !== 'object') {\n errors.push('File is not a valid YAML mapping');\n return { valid: false, errors };\n }\n\n const faf = data as FafData;\n\n if (!faf.faf_version) {\n errors.push('Missing required field: faf_version');\n }\n\n if (!faf.project?.name) {\n errors.push('Missing required field: project.name');\n }\n\n return { valid: errors.length === 0, errors };\n}\n",
10
10
  "import type { KernelScoreResult, FafbInfo } from '../core/types.js';\n\n// faf-scoring-kernel is CommonJS with synchronous WASM loading\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nlet kernel: typeof import('faf-scoring-kernel') | null = null;\n\nfunction getKernel(): typeof import('faf-scoring-kernel') {\n if (!kernel) {\n try {\n kernel = require('faf-scoring-kernel');\n } catch {\n throw new Error(\n 'faf-scoring-kernel not installed.\\n\\n Run: npm install faf-scoring-kernel\\n'\n );\n }\n }\n return kernel;\n}\n\n/** Score a .faf YAML string (21 base slots) */\nexport function score(yaml: string): KernelScoreResult {\n return JSON.parse(getKernel().score_faf(yaml));\n}\n\n/** Score a .faf YAML string (33 enterprise slots) */\nexport function scoreEnterprise(yaml: string): KernelScoreResult {\n return JSON.parse(getKernel().score_faf_enterprise(yaml));\n}\n\n/** Validate .faf YAML */\nexport function validate(yaml: string): boolean {\n return getKernel().validate_faf(yaml);\n}\n\n/** Compile .faf YAML to FAFb binary */\nexport function compile(yaml: string): Uint8Array {\n return getKernel().compile_fafb(yaml);\n}\n\n/** Decompile FAFb binary to JSON info */\nexport function decompile(bytes: Uint8Array): FafbInfo {\n return JSON.parse(getKernel().decompile_fafb(bytes));\n}\n\n/** Get FAFb file metadata */\nexport function fafbInfo(bytes: Uint8Array): FafbInfo {\n return JSON.parse(getKernel().fafb_info(bytes));\n}\n\n/** Get FAFb binary metadata (name, version, source) */\nexport interface FafbMeta {\n source: string;\n name: string;\n faf_version: string;\n}\n\nexport function scoreFafb(bytes: Uint8Array): FafbMeta {\n return JSON.parse(getKernel().score_fafb(bytes));\n}\n\n/** Get WASM SDK version */\nexport function sdkVersion(): string {\n return getKernel().sdk_version();\n}\n"
11
11
  ],
12
- "mappings": "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",
13
- "debugId": "DC6FDBAB48D1F38D64756E2164756E21",
12
+ "mappings": "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",
13
+ "debugId": "6974C7914867615464756E2164756E21",
14
14
  "names": []
15
15
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "faf-cli",
3
- "version": "6.4.1",
3
+ "version": "6.5.0",
4
4
  "description": "Persistent AI Context Standard — project DNA for AI. IANA-registered. Anthropic-approved.",
5
5
  "type": "module",
6
6
  "icon": "https://faf.one/orange-smiley.svg",
package/project.faf CHANGED
@@ -3,7 +3,7 @@ project:
3
3
  name: faf-cli v6
4
4
  goal: "CLI tool for creating and managing `.faf` files — persistent AI context that versions with your code. IANA-registered media type: `application/vnd.faf+yaml`."
5
5
  main_language: TypeScript
6
- type: cli
6
+ type: cli # found: package.json bin
7
7
  stack:
8
8
  frontend: slotignored
9
9
  css_framework: slotignored