prjct-cli 2.67.0 → 2.67.1

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
+ ## [2.67.1] - 2026-06-23
6
+
7
+ ### Fixed
8
+ - command routing fallback
9
+
5
10
  ## [2.67.0] - 2026-06-23
6
11
 
7
12
  ### Added
@@ -1929,7 +1929,7 @@ ${Gs.dim("Providers:")}`}var XW,Tw=h(()=>{"use strict";XW={ready:Gs.green("\u271
1929
1929
  ${s.dim("Run 'prjct start' to configure global/runtime adapters")}
1930
1930
  ${s.dim("Run 'prjct init' or 'prjct sync' to refresh AGENTS.md and project-level rules")}
1931
1931
  ${s.cyan("https://prjct.app")}
1932
- `)}else return!1;return!0}var p_=h(()=>{"use strict";a(u_,"readOptionValue");a(zW,"runBinCommand")});var m_=R_((Kfe,KW)=>{KW.exports={name:"prjct-cli",version:"2.67.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 nB={};import f_ from"node:os";import dd from"node:path";import Ws from"chalk";async function YW(){let[n,...e]=process.argv.slice(2);if(["-v","--version","version"].includes(n)){let r=await Promise.resolve().then(()=>x_(m_()));await eB(r.version),process.exit(0)}if(["-h","--help",void 0].includes(n)&&(tB(),process.exit(0)),n&&ha(n)&&!Ke.getByName(n)){let r=ga[n];r&&(g.failWithHint({message:`'prjct ${n}' was removed in v2. ${r.note}`,hint:`Use: ${r.replacement}`}),process.exit(1))}if(n&&!Ke.getByName(n)&&!(e.length===0&&Ia(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=Ke.getByName(n);if(!r){let m=Ia(n),f=m?`Did you mean 'prjct ${m}'? Run 'prjct --help' for all commands`:"Run 'prjct --help' to see available commands";g.failWithHint(di("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}=ZW(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=QW(r,s);c&&(g.failWithHint(c),t||g.end(),process.exit(1));let l=null,u=Date.now();try{l=await C.getProjectId(process.cwd()),l&&(await ya.expireIfStale(l),await ya.touch(l))}catch{}let d=new Os,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=Ke.getByName(n);if(y?.optionSchema)p=await Ke.executeWithOptions(n,m,process.cwd(),sd(o,y.optionSchema));else{let k={spec:a(v=>od(d,(v??"").trim().split(/\s+/).filter(Boolean),o,process.cwd()),"spec"),"audit-spec":a(v=>v?d.specAudit(v,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(v=>d.init({idea:v,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(v=>v?d.saveLlmAnalysis(v,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,url:o.url?String(o.url):void 0}),"login"),logout:a(()=>d.logout(),"logout"),auth:a(v=>d.auth(v,{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 ya.trackCommand(l,n,m)}catch{}try{await wa.recordTiming(l,"command_duration",m,{command:n});let f=globalThis.__perfStartNs;if(f){let y=Number(process.hrtime.bigint()-f)/1e6;await wa.recordTiming(l,"startup_time",y)}await wa.recordMemory(l,{command:n})}catch{}}p?.message&&console.log(p.message),t||g.end(),process.exit(p?.success?0:1)}catch(r){console.error("Error:",w(r)),process.env.DEBUG&&console.error(Td(r)),t||g.end(),process.exit(1)}}function QW(n,e){if(!n.params)return null;let t=n.params.match(/<[^>]+>/g);if(!t||t.length===0)return null;if(e.length<t.length){let r=t.map(o=>o.slice(1,-1)).join(", "),s=n.usage.terminal||`prjct ${n.name} ${n.params}`;return di("MISSING_PARAM",{message:`Missing required parameter: ${r}`,hint:`Usage: ${s}`})}return null}function ZW(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 eB(n){let e=await ls(),t=dd.join(f_.homedir(),".claude","commands","p.md"),r=dd.join(f_.homedir(),".gemini","commands","p.toml"),[s,o,i,c]=await Promise.all([E(t),E(r),E(dd.join(process.cwd(),".cursor","commands","sync.md")),E(dd.join(process.cwd(),".cursor"))]),l=await mi();console.log(Ew(n)),console.log(Zo("Claude Code",e.claude.installed?s?"ready":"installed":"missing",e.claude.version?Ws.dim(` (v${e.claude.version})`):"")),console.log(Zo("Gemini CLI",e.gemini.installed?o?"ready":"installed":"missing",e.gemini.version?Ws.dim(` (v${e.gemini.version})`):"")),console.log(Zo("Antigravity",l.installed?l.skillInstalled?"ready":"detected":"missing",l.installed&&!l.skillInstalled?` ${Ws.dim("(run prjct start)")}`:"")),console.log(Zo("Cursor IDE",i?"ready":c?"detected":"missing",i?` ${Ws.dim("(use prjct router)")}`:c?` ${Ws.dim("(run prjct init)")}`:"","\u25CB no .cursor/ folder")),console.log(`
1932
+ `)}else return!1;return!0}var p_=h(()=>{"use strict";a(u_,"readOptionValue");a(zW,"runBinCommand")});var m_=R_((Kfe,KW)=>{KW.exports={name:"prjct-cli",version:"2.67.1",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 nB={};import f_ from"node:os";import dd from"node:path";import Ws from"chalk";async function YW(){let[n,...e]=process.argv.slice(2);if(["-v","--version","version"].includes(n)){let r=await Promise.resolve().then(()=>x_(m_()));await eB(r.version),process.exit(0)}if(["-h","--help",void 0].includes(n)&&(tB(),process.exit(0)),n&&ha(n)&&!Ke.getByName(n)){let r=ga[n];r&&(g.failWithHint({message:`'prjct ${n}' was removed in v2. ${r.note}`,hint:`Use: ${r.replacement}`}),process.exit(1))}if(n&&!Ke.getByName(n)&&!(e.length===0&&Ia(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=Ke.getByName(n);if(!r){let m=Ia(n),f=m?`Did you mean 'prjct ${m}'? Run 'prjct --help' for all commands`:"Run 'prjct --help' to see available commands";g.failWithHint(di("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}=ZW(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=QW(r,s);c&&(g.failWithHint(c),t||g.end(),process.exit(1));let l=null,u=Date.now();try{l=await C.getProjectId(process.cwd()),l&&(await ya.expireIfStale(l),await ya.touch(l))}catch{}let d=new Os,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=Ke.getByName(n);if(y?.optionSchema)p=await Ke.executeWithOptions(n,m,process.cwd(),sd(o,y.optionSchema));else{let k={spec:a(v=>od(d,(v??"").trim().split(/\s+/).filter(Boolean),o,process.cwd()),"spec"),"audit-spec":a(v=>v?d.specAudit(v,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(v=>d.init({idea:v,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(v=>v?d.saveLlmAnalysis(v,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,url:o.url?String(o.url):void 0}),"login"),logout:a(()=>d.logout(),"logout"),auth:a(v=>d.auth(v,{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 ya.trackCommand(l,n,m)}catch{}try{await wa.recordTiming(l,"command_duration",m,{command:n});let f=globalThis.__perfStartNs;if(f){let y=Number(process.hrtime.bigint()-f)/1e6;await wa.recordTiming(l,"startup_time",y)}await wa.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(Td(r)),t||g.end(),process.exit(1)}}function QW(n,e){if(!n.params)return null;let t=n.params.match(/<[^>]+>/g);if(!t||t.length===0)return null;if(e.length<t.length){let r=t.map(o=>o.slice(1,-1)).join(", "),s=n.usage.terminal||`prjct ${n.name} ${n.params}`;return di("MISSING_PARAM",{message:`Missing required parameter: ${r}`,hint:`Usage: ${s}`})}return null}function ZW(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 eB(n){let e=await ls(),t=dd.join(f_.homedir(),".claude","commands","p.md"),r=dd.join(f_.homedir(),".gemini","commands","p.toml"),[s,o,i,c]=await Promise.all([E(t),E(r),E(dd.join(process.cwd(),".cursor","commands","sync.md")),E(dd.join(process.cwd(),".cursor"))]),l=await mi();console.log(Ew(n)),console.log(Zo("Claude Code",e.claude.installed?s?"ready":"installed":"missing",e.claude.version?Ws.dim(` (v${e.claude.version})`):"")),console.log(Zo("Gemini CLI",e.gemini.installed?o?"ready":"installed":"missing",e.gemini.version?Ws.dim(` (v${e.gemini.version})`):"")),console.log(Zo("Antigravity",l.installed?l.skillInstalled?"ready":"detected":"missing",l.installed&&!l.skillInstalled?` ${Ws.dim("(run prjct start)")}`:"")),console.log(Zo("Cursor IDE",i?"ready":c?"detected":"missing",i?` ${Ws.dim("(use prjct router)")}`:c?` ${Ws.dim("(run prjct init)")}`:"","\u25CB no .cursor/ folder")),console.log(`
1933
1933
  ${Ws.dim("Run 'prjct start' for Claude/Gemini, 'prjct init' for Cursor")}
1934
1934
  ${Ws.cyan("https://prjct.app")}
1935
1935
  `)}function tB(){console.log(`
@@ -1994,8 +1994,8 @@ MORE INFO
1994
1994
  GitHub: https://github.com/jlopezlira/prjct-cli
1995
1995
  `)}var g_=h(()=>{"use strict";zy();Ry();Ky();Bo();Xy();Du();Yy();ut();z();xh();Ch();F();oc();K();ie();Tw();a(YW,"main");a(QW,"validateCommandParams");a(ZW,"parseCommandArgs");a(eB,"displayVersion");a(tB,"displayHelp");YW().catch(n=>{console.error("Fatal error:",w(n)),process.env.DEBUG&&console.error(Td(n)),process.exit(1)})});globalThis.__perfStartNs=process.hrtime.bigint();var Et=process.argv.slice(2),At=Et.find(n=>!n.startsWith("--")&&!n.startsWith("-"));if(At==="__internal-auto-update"){let n=Et[1]??"";try{let{runBackgroundCheck:e}=await Promise.resolve().then(()=>(Ed(),Sd));await e(n)}catch{}process.exit(0)}if(At==="__post-upgrade"){try{let{run:n}=await Promise.resolve().then(()=>(gp(),fp));await n()}catch{}process.exit(0)}async function rB(n){return process.stdin.isTTY?"":new Promise(e=>{let t=[],r=!1,s=a(()=>{r||(r=!0,e(Buffer.concat(t).toString("utf-8")))},"finish");process.stdin.on("data",o=>t.push(Buffer.from(o))),process.stdin.on("end",s),process.stdin.on("error",s),setTimeout(s,n)})}a(rB,"readAllStdin");if(At==="hook"&&process.env.PRJCT_NO_DAEMON!=="1"){let n=await import("node:fs"),{DAEMON_PATHS:e,isDaemonNamedPipe:t}=await Promise.resolve().then(()=>(ps(),Cc)),r=e.socket();if(t(r)||n.existsSync(r)){let s=Et[1],o=await rB(1e3);try{let{sendRequest:i}=await Promise.resolve().then(()=>(on(),sn)),c=await import("node:crypto"),l=await i({id:c.randomUUID(),command:"hook",args:s?[s]:[],options:{},cwd:process.cwd(),stdin:o});l.retry||(l.stdout&&process.stdout.write(l.stdout),process.exit(l.exitCode??0))}catch{}try{let{getHookRunner:i}=await Promise.resolve().then(()=>(Sh(),iP)),c=i(s);c||(process.stdout.write(`{}
1996
1996
  `),process.exit(0));let l={};try{l=o?JSON.parse(o):{}}catch{l={}}let u=[];await c(process.cwd(),{input:l,sink:a(d=>{process.stdout.write(d)},"sink"),detachAfterEmit:a(d=>{u.push(d)},"detachAfterEmit")});for(let d of u)await d().catch(()=>{});process.exit(0)}catch{process.stdout.write(`{}
1997
- `),process.exit(0)}}}var{REGISTERED_VERBS_SET:sB,BIN_COMMANDS_SET:oB}=await Promise.resolve().then(()=>(lP(),cP)),{isRemovedVerb:h_}=await Promise.resolve().then(()=>(Du(),uP)),y_=oB;if(At&&!y_.has(At)&&!sB.has(At)&&!h_(At)){let n=Et.filter(r=>!r.startsWith("-")),e=n.join(" "),t=Et.filter(r=>r.startsWith("-"));n.length===1&&/^[a-z][a-z0-9:-]+$/.test(n[0])&&!h_(n[0])&&process.stderr.write(`prjct: '${n[0]}' is not a known command in this install \u2014 saving it to the inbox instead. If you meant the command, this prjct may be stale: run \`prjct update\`.
1998
- `),At="capture",Et=["capture",e,...t]}var iB=new Set(["update","upgrade","daemon","hook","version","-v","--version"]);if(At&&!iB.has(At)&&process.stderr.isTTY&&!Et.includes("--md")&&!Et.includes("--json")&&!Et.includes("--quiet")&&!Et.includes("-q")&&process.env.PRJCT_NO_UPDATE_NOTICE!=="1"){let{triggerBackgroundRefreshIfStale:n,getUpdateNotificationSync:e}=await Promise.resolve().then(()=>(Cl(),EE)),t=await import("node:fs"),r=await import("node:path"),s="";try{let o=r.resolve(r.dirname(new URL(import.meta.url).pathname),"..","package.json");s=JSON.parse(t.readFileSync(o,"utf-8")).version??""}catch{}try{n()}catch{}s&&process.on("exit",()=>{try{let o=e(s);o&&process.stderr.write(o)}catch{}})}if(At&&!y_.has(At)&&process.env.PRJCT_NO_DAEMON!=="1"){let n=await import("node:fs"),{DAEMON_PATHS:e,isDaemonNamedPipe:t}=await Promise.resolve().then(()=>(ps(),Cc)),r=e.socket();if(t(r)||n.existsSync(r)){let{sendRequest:s}=await Promise.resolve().then(()=>(on(),sn)),o=await import("node:crypto"),i=[],c={};for(let l=0;l<Et.length;l++){let u=Et[l];if(u.startsWith("--")){let d=u.slice(2);if(d.includes("=")){let p=d.indexOf("=");c[d.slice(0,p)]=d.slice(p+1)}else l+1<Et.length&&!Et[l+1].startsWith("--")?c[d]=Et[++l]:c[d]=!0}else u.startsWith("-")&&u.length===2?c[u.slice(1)]=!0:l>0&&i.push(u)}try{let l=await s({id:o.randomUUID(),command:At,args:i,options:c,cwd:process.cwd(),perfStartNs:globalThis.__perfStartNs?.toString()});l.retry||(l.stdout&&console.log(l.stdout),l.stderr&&console.error(l.stderr),process.exit(l.exitCode))}catch(l){let u=l?.message??"",d=l?.code??"";d==="ECONNREFUSED"||d==="ENOENT"||u.includes("ECONNREFUSED")||u.includes("ENOENT")||(console.error(`prjct: daemon dropped the request (${u}). Retry: \`prjct ${Et.join(" ")}\``),process.exit(1))}}}var aB=new Set(["daemon","update","upgrade","version","-v","--version","hook"]);if(At&&!aB.has(At)&&process.env.PRJCT_NO_SELF_SYNC!=="1")try{let{VERSION:n}=await Promise.resolve().then(()=>(Me(),rs));if(n){let{isSyncCurrent:e,runSelfHeal:t}=await Promise.resolve().then(()=>(Ic(),Op));e(n)||await t(n)}}catch{}async function cB(){let n=await import("node:os"),e=await import("node:path"),t=(await import("chalk")).default,{detectAllProviders:r}=await Promise.resolve().then(()=>(ut(),Nn)),s=(await Promise.resolve().then(()=>(z(),yn))).default,o=(await Promise.resolve().then(()=>(ki(),pp))).default,{fileExists:i}=await Promise.resolve().then(()=>(K(),nn)),{invalidateProviderCache:c}=await Promise.resolve().then(()=>(zd(),xk)),{VERSION:l}=await Promise.resolve().then(()=>(Me(),rs));async function u(){let T=n.homedir(),M=await r();if(M.claude.installed){let V=e.join(T,".claude","CLAUDE.md");try{if(!(await import("node:fs/promises").then(J=>J.readFile(V,"utf-8"))).includes("prjct:start"))return!1}catch{return!1}}if(M.gemini.installed){let V=e.join(T,".gemini","GEMINI.md");try{if(!(await import("node:fs/promises").then(J=>J.readFile(V,"utf-8"))).includes("prjct:start"))return!1}catch{return!1}}return!M.claude.installed&&!M.gemini.installed,!0}a(u,"checkRoutersInstalled");let d=process.argv.slice(2),p=d.findIndex(T=>T==="--quiet"||T==="-q"),m=p!==-1;if(m){d.splice(p,1);let{setQuietMode:T}=await Promise.resolve().then(()=>(ie(),aE));T(!0)}let f=m||d.includes("--md")||d.includes("--json")||!process.stdout.isTTY,y=d.indexOf("--refresh"),b=y!==-1;b&&(d.splice(y,1),await c());async function k(T){let M=Date.now();try{let V=await s.getProjectId(process.cwd());if(V){let{sessionTracker:ne}=await Promise.resolve().then(()=>(Ch(),mP));return await ne.expireIfStale(V),await ne.touch(V),()=>{let J=Date.now()-M;ne.trackCommand(V,T,J).catch(()=>{}),Promise.resolve().then(()=>(xh(),gP)).then(({performanceTracker:Y})=>{Y.recordTiming(V,"command_duration",J,{command:T}).catch(()=>{}),Y.recordMemory(V,{command:T}).catch(()=>{})}).catch(()=>{})}}}catch{}return()=>{}}a(k,"trackSession");let{runBinCommand:v}=await Promise.resolve().then(()=>(p_(),d_));if(!await v(d,{isQuietMode:m,isRefresh:b,trackSession:k})){let{default:T}=await Promise.resolve().then(()=>(ke(),np)),M=e.join(T.globalConfigDir,"installed-editors.json"),V=await u();if(!new Set(["auth","login","logout","init","eval"]).has(d[0])&&(!await i(M)||!V))console.log(`
1997
+ `),process.exit(0)}}}var{REGISTERED_VERBS_SET:sB,BIN_COMMANDS_SET:oB}=await Promise.resolve().then(()=>(lP(),cP)),{isRemovedVerb:h_}=await Promise.resolve().then(()=>(Du(),uP)),y_=oB;if(At&&!y_.has(At)&&!sB.has(At)&&!h_(At)){let n=Et.filter(r=>!r.startsWith("-")),e=n.join(" "),t=Et.filter(r=>r.startsWith("-"));n.length===1&&/^[a-z][a-z0-9:-]+$/.test(n[0])&&!h_(n[0])&&(process.stderr.write(`prjct: '${n[0]}' is not a known command in this install. If you meant a command, upgrade prjct with \`prjct upgrade\` (or \`prjct update\` on older installs).
1998
+ `),process.exit(1)),At="capture",Et=["capture",e,...t]}var iB=new Set(["update","upgrade","daemon","hook","version","-v","--version"]);if(At&&!iB.has(At)&&process.stderr.isTTY&&!Et.includes("--md")&&!Et.includes("--json")&&!Et.includes("--quiet")&&!Et.includes("-q")&&process.env.PRJCT_NO_UPDATE_NOTICE!=="1"){let{triggerBackgroundRefreshIfStale:n,getUpdateNotificationSync:e}=await Promise.resolve().then(()=>(Cl(),EE)),t=await import("node:fs"),r=await import("node:path"),s="";try{let o=r.resolve(r.dirname(new URL(import.meta.url).pathname),"..","package.json");s=JSON.parse(t.readFileSync(o,"utf-8")).version??""}catch{}try{n()}catch{}s&&process.on("exit",()=>{try{let o=e(s);o&&process.stderr.write(o)}catch{}})}if(At&&!y_.has(At)&&process.env.PRJCT_NO_DAEMON!=="1"){let n=await import("node:fs"),{DAEMON_PATHS:e,isDaemonNamedPipe:t}=await Promise.resolve().then(()=>(ps(),Cc)),r=e.socket();if(t(r)||n.existsSync(r)){let{sendRequest:s}=await Promise.resolve().then(()=>(on(),sn)),o=await import("node:crypto"),i=[],c={};for(let l=0;l<Et.length;l++){let u=Et[l];if(u.startsWith("--")){let d=u.slice(2);if(d.includes("=")){let p=d.indexOf("=");c[d.slice(0,p)]=d.slice(p+1)}else l+1<Et.length&&!Et[l+1].startsWith("--")?c[d]=Et[++l]:c[d]=!0}else u.startsWith("-")&&u.length===2?c[u.slice(1)]=!0:l>0&&i.push(u)}try{let l=await s({id:o.randomUUID(),command:At,args:i,options:c,cwd:process.cwd(),perfStartNs:globalThis.__perfStartNs?.toString()});l.retry||(l.stdout&&console.log(l.stdout),l.stderr&&console.error(l.stderr),process.exit(l.exitCode))}catch(l){let u=l?.message??"",d=l?.code??"";d==="ECONNREFUSED"||d==="ENOENT"||d==="EACCES"||d==="EPERM"||u.includes("ECONNREFUSED")||u.includes("ENOENT")||u.includes("EACCES")||u.includes("EPERM")||(console.error(`prjct: daemon dropped the request (${u}). Retry: \`prjct ${Et.join(" ")}\``),process.exit(1))}}}var aB=new Set(["daemon","update","upgrade","version","-v","--version","hook"]);if(At&&!aB.has(At)&&process.env.PRJCT_NO_SELF_SYNC!=="1")try{let{VERSION:n}=await Promise.resolve().then(()=>(Me(),rs));if(n){let{isSyncCurrent:e,runSelfHeal:t}=await Promise.resolve().then(()=>(Ic(),Op));e(n)||await t(n)}}catch{}async function cB(){let n=await import("node:os"),e=await import("node:path"),t=(await import("chalk")).default,{detectAllProviders:r}=await Promise.resolve().then(()=>(ut(),Nn)),s=(await Promise.resolve().then(()=>(z(),yn))).default,o=(await Promise.resolve().then(()=>(ki(),pp))).default,{fileExists:i}=await Promise.resolve().then(()=>(K(),nn)),{invalidateProviderCache:c}=await Promise.resolve().then(()=>(zd(),xk)),{VERSION:l}=await Promise.resolve().then(()=>(Me(),rs));async function u(){let T=n.homedir(),M=await r();if(M.claude.installed){let V=e.join(T,".claude","CLAUDE.md");try{if(!(await import("node:fs/promises").then(J=>J.readFile(V,"utf-8"))).includes("prjct:start"))return!1}catch{return!1}}if(M.gemini.installed){let V=e.join(T,".gemini","GEMINI.md");try{if(!(await import("node:fs/promises").then(J=>J.readFile(V,"utf-8"))).includes("prjct:start"))return!1}catch{return!1}}return!M.claude.installed&&!M.gemini.installed,!0}a(u,"checkRoutersInstalled");let d=process.argv.slice(2),p=d.findIndex(T=>T==="--quiet"||T==="-q"),m=p!==-1;if(m){d.splice(p,1);let{setQuietMode:T}=await Promise.resolve().then(()=>(ie(),aE));T(!0)}let f=m||d.includes("--md")||d.includes("--json")||!process.stdout.isTTY,y=d.indexOf("--refresh"),b=y!==-1;b&&(d.splice(y,1),await c());async function k(T){let M=Date.now();try{let V=await s.getProjectId(process.cwd());if(V){let{sessionTracker:ne}=await Promise.resolve().then(()=>(Ch(),mP));return await ne.expireIfStale(V),await ne.touch(V),()=>{let J=Date.now()-M;ne.trackCommand(V,T,J).catch(()=>{}),Promise.resolve().then(()=>(xh(),gP)).then(({performanceTracker:Y})=>{Y.recordTiming(V,"command_duration",J,{command:T}).catch(()=>{}),Y.recordMemory(V,{command:T}).catch(()=>{})}).catch(()=>{})}}}catch{}return()=>{}}a(k,"trackSession");let{runBinCommand:v}=await Promise.resolve().then(()=>(p_(),d_));if(!await v(d,{isQuietMode:m,isRefresh:b,trackSession:k})){let{default:T}=await Promise.resolve().then(()=>(ke(),np)),M=e.join(T.globalConfigDir,"installed-editors.json"),V=await u();if(!new Set(["auth","login","logout","init","eval","analysis-save-llm"]).has(d[0])&&(!await i(M)||!V))console.log(`
1999
1999
  ${t.cyan.bold(" Welcome to prjct!")}
2000
2000
 
2001
2001
  Run ${t.bold("prjct start")} to configure your AI providers.
@@ -8,7 +8,7 @@ const args=process.argv.slice(2);
8
8
  const cmd=args.find(a=>!a.startsWith("-"));
9
9
  const skip=new Set(["seed","mcp","install","help","start","setup","context","update","uninstall","daemon","stop","restart","upgrade","hook","hooks","claude","crew","doctor","watch","version","prefs","retro","health","skill-adherence","review-risk","context-save","context-restore","-h","--help","-v","--version","spec","audit-spec","dev","web","serve","__internal-auto-update","__post-upgrade"]);
10
10
  function refuse(m){console.error("prjct: daemon dropped the request ("+m+"). Retry: prjct "+args.join(" "));process.exit(1)}
11
- function isSafeRetry(e){const c=e&&e.code||"",m=e&&e.message||"";return c==="ECONNREFUSED"||c==="ENOENT"||m.includes("ECONNREFUSED")||m.includes("ENOENT")}
11
+ function isSafeRetry(e){const c=e&&e.code||"",m=e&&e.message||"";return c==="ECONNREFUSED"||c==="ENOENT"||c==="EACCES"||c==="EPERM"||m.includes("ECONNREFUSED")||m.includes("ENOENT")||m.includes("EACCES")||m.includes("EPERM")}
12
12
  // Hook fast path: forward the event (stdin) to the warm daemon and write its
13
13
  // response raw. Hooks must never disturb the host session, so ANY failure
14
14
  // (connect error, timeout, closed socket) degrades to the empty no-op {} and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prjct-cli",
3
- "version": "2.67.0",
3
+ "version": "2.67.1",
4
4
  "description": "Project memory and workflow context for AI coding agents.",
5
5
  "main": "dist/bin/prjct.mjs",
6
6
  "bin": {