prjct-cli 3.0.0 → 3.1.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/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [3.1.0] - 2026-06-26
6
+
7
+ ### Added
8
+ - cold hook bundle
9
+
5
10
  ## [3.0.0] - 2026-06-26
6
11
 
7
12
  ### Added
@@ -2113,7 +2113,7 @@ ${zs.dim("Providers:")}`}var VV,Ak=h(()=>{"use strict";VV={ready:zs.green("\u271
2113
2113
  ${s.dim("Run 'prjct start' to configure global/runtime adapters")}
2114
2114
  ${s.dim("Run 'prjct init' or 'prjct sync' to refresh AGENTS.md and project-level rules")}
2115
2115
  ${s.cyan("https://prjct.app")}
2116
- `)}else return!1;return!0}var QI=h(()=>{"use strict";a(KI,"readOptionValue");a(JV,"runBinCommand")});var ZI=p$((ake,XV)=>{XV.exports={name:"prjct-cli",version:"3.0.0",description:"Project memory and workflow context for AI coding agents.",main:"dist/bin/prjct.mjs",bin:{prjct:"bin/prjct.cjs"},publishConfig:{access:"public",registry:"https://registry.npmjs.org"},scripts:{build:"node scripts/build.js","build:node":"node scripts/build.js",release:"node scripts/release.js","release:patch":"node scripts/release.js patch","release:minor":"node scripts/release.js minor","release:major":"node scripts/release.js major",prepare:"lefthook install","update-commands":`bun -e "const installer = require('./core/infrastructure/command-installer'); installer.syncCommands().then(r => console.log('Commands updated:', r)).catch(e => console.error('Error:', e.message))"`,"install-global":"./scripts/install.sh",update:"./scripts/update.sh",test:"bun test","test:watch":"bun test --watch","test:coverage":"bun test --coverage",typecheck:"tsc --noEmit -p core/tsconfig.json","typecheck:watch":"tsc --noEmit -p core/tsconfig.json --watch",validate:"bun scripts/validate-commands.js",lint:"biome lint .","lint:fix":"biome lint --write .",knip:"knip","lint:meta":"bun core/cli/lint-meta-commentary.ts",format:"biome format --write .","format:check":"biome format .",check:"biome check .","check:fix":"biome check --write .","test:e2e":"bun test core/__tests__/e2e/"},keywords:["claude-code","gemini-cli","ai-agents","context-layer","developer-tools","ai-assistant","productivity","mcp","llm","coding-agents"],author:"prjct.app",license:"MIT",dependencies:{"@clack/prompts":"1.0.0","@modelcontextprotocol/sdk":"1.29.0",chalk:"4.1.2",chokidar:"5.0.0","jsonc-parser":"3.3.1",zod:"3.25.76"},overrides:{"path-to-regexp":"8.4.0","brace-expansion":"5.0.5","fast-uri":">=3.1.2",hono:"4.12.27","ip-address":">=10.1.1",qs:"6.15.2"},devDependencies:{"@biomejs/biome":"2.3.13","@types/bun":"latest","@types/chokidar":"2.1.7","@types/node":"^22",esbuild:"0.28.1",knip:"6.3.1",lefthook:"2.1.0",typescript:"5.9.3"},repository:{type:"git",url:"git+https://github.com/jlopezlira/prjct-cli.git"},bugs:{url:"https://github.com/jlopezlira/prjct-cli/issues"},homepage:"https://cli.prjct.app",packageManager:"bun@1.2.23",engines:{bun:">=1.0.0",node:">=22.5.0"},files:["assets/","bin/prjct","bin/prjct.cjs","dist/","templates/","scripts/install.sh","LICENSE","README.md","CHANGELOG.md"],prepublishOnly:"node scripts/build.js"}});var e2={};import e$ from"node:os";import Gd from"node:path";import Ks from"chalk";async function zV(){let[n,...e]=process.argv.slice(2);if(["-v","--version","version"].includes(n)){let r=await Promise.resolve().then(()=>m$(ZI()));await QV(r.version),process.exit(0)}if(["-h","--help",void 0].includes(n)&&(ZV(),process.exit(0)),n&&ja(n)&&!Ye.getByName(n)){let r=_a[n];r&&(g.failWithHint({message:`'prjct ${n}' was removed in v2. ${r.note}`,hint:`Use: ${r.replacement}`}),process.exit(1))}if(n&&!Ye.getByName(n)&&!(e.length===0&&Ja(n)!==null)){let s=[n,...e.filter(i=>!i.startsWith("-"))].join(" "),o=e.filter(i=>i.startsWith("-"));n="capture",e=[s,...o]}let t=e.includes("--md");t||g.start();try{let r=Ye.getByName(n);if(!r){let m=Ja(n),f=m?`Did you mean 'prjct ${m}'? Run 'prjct --help' for all commands`:"Run 'prjct --help' to see available commands";g.failWithHint(Ei("UNKNOWN_COMMAND",{message:`Unknown command: ${n}`,hint:f})),t||g.end(),process.exit(1)}if(r.deprecated){let m=r.replacedBy?`Use 'prjct ${r.replacedBy}' instead`:"Run 'prjct --help' to see available commands";g.failWithHint({message:`Command '${n}' is deprecated`,hint:m}),t||g.end(),process.exit(1)}r.implemented||(g.failWithHint({message:`Command '${n}' is not yet implemented`,hint:"Run 'prjct --help' to see available commands",docs:"https://github.com/jlopezlira/prjct-cli"}),t||g.end(),process.exit(1));let{parsedArgs:s,options:o}=YV(r,e),i=!process.stdin.isTTY||o.md===!0||o.json===!0;r.requiresLlm&&!i&&(g.failWithHint({message:`'prjct ${n}' requires an AI agent to process its output`,hint:`Use 'p. ${n}' inside Claude/Cursor, or add --md flag`}),t||g.end(),process.exit(1));let c=KV(r,s);c&&(g.failWithHint(c),t||g.end(),process.exit(1));let l=null,u=Date.now();try{l=await P.getProjectId(process.cwd()),l&&(await Ia.expireIfStale(l),await Ia.touch(l))}catch{}let d=new Bs,p;if(n==="analyze")p=await d.analyze(o);else if(n==="setup")p=await d.setup(o);else if(n==="update"||n==="upgrade")p=await d.update(o);else{let m=s.join(" ")||null,f=o.md===!0,y=Ye.getByName(n);if(y?.optionSchema)p=await Ye.executeWithOptions(n,m,process.cwd(),Nd(o,y.optionSchema));else{let k={spec:a(S=>Xa(d,(S??"").trim().split(/\s+/).filter(Boolean),o,process.cwd()),"spec"),intent:a(S=>Xa(d,(S??"").trim().split(/\s+/).filter(Boolean),o,process.cwd()),"intent"),"audit-spec":a(S=>S?d.specAudit(S,process.cwd(),{md:f,lenses:o.lenses?String(o.lenses):void 0}):Promise.resolve({success:!1,error:"audit-spec requires a spec id"}),"audit-spec"),init:a(S=>d.init({idea:S,yes:o.yes===!0,pack:o.pack?String(o.pack):void 0,persona:o.persona?String(o.persona):void 0}),"init"),sync:a(()=>d.sync(process.cwd(),{preview:o.preview===!0||o["dry-run"]===!0,yes:o.yes===!0,json:o.json===!0,md:f,package:o.package?String(o.package):void 0,full:o.full===!0}),"sync"),"analysis-save-llm":a(S=>S?d.saveLlmAnalysis(S,process.cwd(),{md:f}):Promise.resolve({success:!1,error:"analysis-save-llm requires analysis text, JSON, or a file path"}),"analysis-save-llm"),regen:a(()=>d.regenVault(process.cwd(),{md:f}),"regen"),start:a(()=>d.start(),"start"),login:a(()=>d.login({md:f}),"login"),logout:a(()=>d.logout(),"logout"),auth:a(S=>d.auth(S,{md:f}),"auth")}[n];if(k)p=await k(m);else throw new Error(`Command '${n}' has no handler`)}}if(l){let m=Date.now()-u;try{await Ia.trackCommand(l,n,m)}catch{}try{await $a.recordTiming(l,"command_duration",m,{command:n});let f=globalThis.__perfStartNs;if(f){let y=Number(process.hrtime.bigint()-f)/1e6;await $a.recordTiming(l,"startup_time",y)}await $a.recordMemory(l,{command:n})}catch{}}p?.message?console.log(p.message):p?.error&&console.error(p.error),t||g.end(),process.exit(p?.success?0:1)}catch(r){console.error("Error:",w(r)),process.env.DEBUG&&console.error(tp(r)),t||g.end(),process.exit(1)}}function KV(n,e){if(!n.params)return null;let r=n.params.replace(/\[[^\]]*\]/g,"").match(/<[^>]+>/g);if(!r||r.length===0)return null;if(e.length<r.length){let s=r.map(i=>i.slice(1,-1)).join(", "),o=n.usage.terminal||`prjct ${n.name} ${n.params}`;return Ei("MISSING_PARAM",{message:`Missing required parameter: ${s}`,hint:`Usage: ${o}`})}return null}function YV(n,e){let t=[],r={};for(let s=0;s<e.length;s++){let o=e[s];if(o.startsWith("--")){let i=o.slice(2);s+1<e.length&&!e[s+1].startsWith("--")?r[i]=e[++s]:r[i]=!0}else t.push(o)}return{parsedArgs:t,options:r}}async function QV(n){let e=await hs(),t=Gd.join(e$.homedir(),".claude","commands","p.md"),r=Gd.join(e$.homedir(),".gemini","commands","p.toml"),[s,o,i,c]=await Promise.all([E(t),E(r),E(Gd.join(process.cwd(),".cursor","commands","sync.md")),E(Gd.join(process.cwd(),".cursor"))]),l=await Ci();console.log(Pk(n)),console.log(di("Claude Code",e.claude.installed?s?"ready":"installed":"missing",e.claude.version?Ks.dim(` (v${e.claude.version})`):"")),console.log(di("Gemini CLI",e.gemini.installed?o?"ready":"installed":"missing",e.gemini.version?Ks.dim(` (v${e.gemini.version})`):"")),console.log(di("Antigravity",l.installed?l.skillInstalled?"ready":"detected":"missing",l.installed&&!l.skillInstalled?` ${Ks.dim("(run prjct start)")}`:"")),console.log(di("Cursor IDE",i?"ready":c?"detected":"missing",i?` ${Ks.dim("(use prjct router)")}`:c?` ${Ks.dim("(run prjct init)")}`:"","\u25CB no .cursor/ folder")),console.log(`
2116
+ `)}else return!1;return!0}var QI=h(()=>{"use strict";a(KI,"readOptionValue");a(JV,"runBinCommand")});var ZI=p$((ake,XV)=>{XV.exports={name:"prjct-cli",version:"3.1.0",description:"Project memory and workflow context for AI coding agents.",main:"dist/bin/prjct.mjs",bin:{prjct:"bin/prjct.cjs"},publishConfig:{access:"public",registry:"https://registry.npmjs.org"},scripts:{build:"node scripts/build.js","build:node":"node scripts/build.js",release:"node scripts/release.js","release:patch":"node scripts/release.js patch","release:minor":"node scripts/release.js minor","release:major":"node scripts/release.js major",prepare:"lefthook install","update-commands":`bun -e "const installer = require('./core/infrastructure/command-installer'); installer.syncCommands().then(r => console.log('Commands updated:', r)).catch(e => console.error('Error:', e.message))"`,"install-global":"./scripts/install.sh",update:"./scripts/update.sh",test:"bun test","test:watch":"bun test --watch","test:coverage":"bun test --coverage",typecheck:"tsc --noEmit -p core/tsconfig.json","typecheck:watch":"tsc --noEmit -p core/tsconfig.json --watch",validate:"bun scripts/validate-commands.js",lint:"biome lint .","lint:fix":"biome lint --write .",knip:"knip","lint:meta":"bun core/cli/lint-meta-commentary.ts",format:"biome format --write .","format:check":"biome format .",check:"biome check .","check:fix":"biome check --write .","test:e2e":"bun test core/__tests__/e2e/"},keywords:["claude-code","gemini-cli","ai-agents","context-layer","developer-tools","ai-assistant","productivity","mcp","llm","coding-agents"],author:"prjct.app",license:"MIT",dependencies:{"@clack/prompts":"1.0.0","@modelcontextprotocol/sdk":"1.29.0",chalk:"4.1.2",chokidar:"5.0.0","jsonc-parser":"3.3.1",zod:"3.25.76"},overrides:{"path-to-regexp":"8.4.0","brace-expansion":"5.0.5","fast-uri":">=3.1.2",hono:"4.12.27","ip-address":">=10.1.1",qs:"6.15.2"},devDependencies:{"@biomejs/biome":"2.3.13","@types/bun":"latest","@types/chokidar":"2.1.7","@types/node":"^22",esbuild:"0.28.1",knip:"6.3.1",lefthook:"2.1.0",typescript:"5.9.3"},repository:{type:"git",url:"git+https://github.com/jlopezlira/prjct-cli.git"},bugs:{url:"https://github.com/jlopezlira/prjct-cli/issues"},homepage:"https://cli.prjct.app",packageManager:"bun@1.2.23",engines:{bun:">=1.0.0",node:">=22.5.0"},files:["assets/","bin/prjct","bin/prjct.cjs","dist/","templates/","scripts/install.sh","LICENSE","README.md","CHANGELOG.md"],prepublishOnly:"node scripts/build.js"}});var e2={};import e$ from"node:os";import Gd from"node:path";import Ks from"chalk";async function zV(){let[n,...e]=process.argv.slice(2);if(["-v","--version","version"].includes(n)){let r=await Promise.resolve().then(()=>m$(ZI()));await QV(r.version),process.exit(0)}if(["-h","--help",void 0].includes(n)&&(ZV(),process.exit(0)),n&&ja(n)&&!Ye.getByName(n)){let r=_a[n];r&&(g.failWithHint({message:`'prjct ${n}' was removed in v2. ${r.note}`,hint:`Use: ${r.replacement}`}),process.exit(1))}if(n&&!Ye.getByName(n)&&!(e.length===0&&Ja(n)!==null)){let s=[n,...e.filter(i=>!i.startsWith("-"))].join(" "),o=e.filter(i=>i.startsWith("-"));n="capture",e=[s,...o]}let t=e.includes("--md");t||g.start();try{let r=Ye.getByName(n);if(!r){let m=Ja(n),f=m?`Did you mean 'prjct ${m}'? Run 'prjct --help' for all commands`:"Run 'prjct --help' to see available commands";g.failWithHint(Ei("UNKNOWN_COMMAND",{message:`Unknown command: ${n}`,hint:f})),t||g.end(),process.exit(1)}if(r.deprecated){let m=r.replacedBy?`Use 'prjct ${r.replacedBy}' instead`:"Run 'prjct --help' to see available commands";g.failWithHint({message:`Command '${n}' is deprecated`,hint:m}),t||g.end(),process.exit(1)}r.implemented||(g.failWithHint({message:`Command '${n}' is not yet implemented`,hint:"Run 'prjct --help' to see available commands",docs:"https://github.com/jlopezlira/prjct-cli"}),t||g.end(),process.exit(1));let{parsedArgs:s,options:o}=YV(r,e),i=!process.stdin.isTTY||o.md===!0||o.json===!0;r.requiresLlm&&!i&&(g.failWithHint({message:`'prjct ${n}' requires an AI agent to process its output`,hint:`Use 'p. ${n}' inside Claude/Cursor, or add --md flag`}),t||g.end(),process.exit(1));let c=KV(r,s);c&&(g.failWithHint(c),t||g.end(),process.exit(1));let l=null,u=Date.now();try{l=await P.getProjectId(process.cwd()),l&&(await Ia.expireIfStale(l),await Ia.touch(l))}catch{}let d=new Bs,p;if(n==="analyze")p=await d.analyze(o);else if(n==="setup")p=await d.setup(o);else if(n==="update"||n==="upgrade")p=await d.update(o);else{let m=s.join(" ")||null,f=o.md===!0,y=Ye.getByName(n);if(y?.optionSchema)p=await Ye.executeWithOptions(n,m,process.cwd(),Nd(o,y.optionSchema));else{let k={spec:a(S=>Xa(d,(S??"").trim().split(/\s+/).filter(Boolean),o,process.cwd()),"spec"),intent:a(S=>Xa(d,(S??"").trim().split(/\s+/).filter(Boolean),o,process.cwd()),"intent"),"audit-spec":a(S=>S?d.specAudit(S,process.cwd(),{md:f,lenses:o.lenses?String(o.lenses):void 0}):Promise.resolve({success:!1,error:"audit-spec requires a spec id"}),"audit-spec"),init:a(S=>d.init({idea:S,yes:o.yes===!0,pack:o.pack?String(o.pack):void 0,persona:o.persona?String(o.persona):void 0}),"init"),sync:a(()=>d.sync(process.cwd(),{preview:o.preview===!0||o["dry-run"]===!0,yes:o.yes===!0,json:o.json===!0,md:f,package:o.package?String(o.package):void 0,full:o.full===!0}),"sync"),"analysis-save-llm":a(S=>S?d.saveLlmAnalysis(S,process.cwd(),{md:f}):Promise.resolve({success:!1,error:"analysis-save-llm requires analysis text, JSON, or a file path"}),"analysis-save-llm"),regen:a(()=>d.regenVault(process.cwd(),{md:f}),"regen"),start:a(()=>d.start(),"start"),login:a(()=>d.login({md:f}),"login"),logout:a(()=>d.logout(),"logout"),auth:a(S=>d.auth(S,{md:f}),"auth")}[n];if(k)p=await k(m);else throw new Error(`Command '${n}' has no handler`)}}if(l){let m=Date.now()-u;try{await Ia.trackCommand(l,n,m)}catch{}try{await $a.recordTiming(l,"command_duration",m,{command:n});let f=globalThis.__perfStartNs;if(f){let y=Number(process.hrtime.bigint()-f)/1e6;await $a.recordTiming(l,"startup_time",y)}await $a.recordMemory(l,{command:n})}catch{}}p?.message?console.log(p.message):p?.error&&console.error(p.error),t||g.end(),process.exit(p?.success?0:1)}catch(r){console.error("Error:",w(r)),process.env.DEBUG&&console.error(tp(r)),t||g.end(),process.exit(1)}}function KV(n,e){if(!n.params)return null;let r=n.params.replace(/\[[^\]]*\]/g,"").match(/<[^>]+>/g);if(!r||r.length===0)return null;if(e.length<r.length){let s=r.map(i=>i.slice(1,-1)).join(", "),o=n.usage.terminal||`prjct ${n.name} ${n.params}`;return Ei("MISSING_PARAM",{message:`Missing required parameter: ${s}`,hint:`Usage: ${o}`})}return null}function YV(n,e){let t=[],r={};for(let s=0;s<e.length;s++){let o=e[s];if(o.startsWith("--")){let i=o.slice(2);s+1<e.length&&!e[s+1].startsWith("--")?r[i]=e[++s]:r[i]=!0}else t.push(o)}return{parsedArgs:t,options:r}}async function QV(n){let e=await hs(),t=Gd.join(e$.homedir(),".claude","commands","p.md"),r=Gd.join(e$.homedir(),".gemini","commands","p.toml"),[s,o,i,c]=await Promise.all([E(t),E(r),E(Gd.join(process.cwd(),".cursor","commands","sync.md")),E(Gd.join(process.cwd(),".cursor"))]),l=await Ci();console.log(Pk(n)),console.log(di("Claude Code",e.claude.installed?s?"ready":"installed":"missing",e.claude.version?Ks.dim(` (v${e.claude.version})`):"")),console.log(di("Gemini CLI",e.gemini.installed?o?"ready":"installed":"missing",e.gemini.version?Ks.dim(` (v${e.gemini.version})`):"")),console.log(di("Antigravity",l.installed?l.skillInstalled?"ready":"detected":"missing",l.installed&&!l.skillInstalled?` ${Ks.dim("(run prjct start)")}`:"")),console.log(di("Cursor IDE",i?"ready":c?"detected":"missing",i?` ${Ks.dim("(use prjct router)")}`:c?` ${Ks.dim("(run prjct init)")}`:"","\u25CB no .cursor/ folder")),console.log(`
2117
2117
  ${Ks.dim("Run 'prjct start' for Claude/Gemini, 'prjct init' for Cursor")}
2118
2118
  ${Ks.cyan("https://prjct.app")}
2119
2119
  `)}function ZV(){console.log(`