prjct-cli 1.42.0 → 1.42.2

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
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.42.2] - 2026-02-15
4
+
5
+ ### Bug Fixes
6
+
7
+ - add update to daemon bypass commands (#200)
8
+
9
+
10
+ ## [1.42.3] - 2026-02-15
11
+
12
+ ### Bug Fixes
13
+ - fix: `prjct update` bypasses daemon so it runs with current binary code
14
+
15
+ ## [1.42.1] - 2026-02-15
16
+
17
+ ### Bug Fixes
18
+
19
+ - daemon commands ignore request.cwd causing cross-project contamination (#199)
20
+ - pass request.cwd to analyze/cleanup/design in daemon
21
+
22
+
23
+ ## [1.42.1] - 2026-02-15
24
+
25
+ ### Bug Fixes
26
+ - fix: daemon analyze/cleanup/design commands ignore request.cwd causing cross-project contamination
27
+
3
28
  ## [1.42.0] - 2026-02-15
4
29
 
5
30
  ### Features
@@ -8,7 +33,6 @@
8
33
  - add task estimation service
9
34
  - onboarding tours + help tooltips + stats grid redesign
10
35
 
11
-
12
36
  ## [1.41.1] - 2026-02-15
13
37
 
14
38
  ### Added
@@ -1549,7 +1549,7 @@ Uninstall cancelled.`)),{success:!1,message:"Uninstall cancelled by user"};conso
1549
1549
  ${a.length} errors:`));for(let c of a)console.log(De.red(` - ${c}`))}return console.log(""),console.log(De.green("prjct has been uninstalled.")),console.log(De.dim("Thanks for using prjct! We hope to see you again.")),console.log(""),{success:a.length===0,message:`Removed ${i.length} items`,deleted:i,errors:a.length>0?a:void 0}}var uc,qo,Ko,yp=y(()=>{"use strict";jn();Te();_();Ie();St();uc="<!-- prjct:start - DO NOT REMOVE THIS MARKER -->",qo="<!-- prjct:end - DO NOT REMOVE THIS MARKER -->";l(Mw,"getDirectorySize");l($w,"formatSize");l(EI,"countDirectoryItems");l(AI,"detectInstallation");l(II,"gatherUninstallItems");l(jI,"removePrjctSection");l(RI,"createBackup");l(Ow,"copyDirectory");l(DI,"performUninstall");l($I,"promptConfirmation");l(Fw,"uninstall");Ko=class extends Re{static{l(this,"UninstallCommands")}async uninstall(e={},t=process.cwd()){return Fw(e,t)}}});function UI(){for(let[s,e]of Object.entries(Jo))z.registerCategory(s,e)}function Uw(){if(z.has("work"))return;UI();let s=l(e=>Nr.find(t=>t.name===e),"getMeta");z.registerMethod("task",Ls,"now",s("task")),z.registerMethod("done",Ls,"done",s("done")),z.registerMethod("next",Ls,"next",s("next")),z.registerMethod("pause",Ls,"pause",s("pause")),z.registerMethod("resume",Ls,"resume",s("resume")),z.registerMethod("workflow",Ls,"workflow",s("workflow")),z.registerMethod("sessions",Ls,"sessions",s("sessions")),z.registerMethod("init",dc,"init",s("init")),z.registerMethod("bug",dc,"bug",s("bug")),z.registerMethod("idea",dc,"idea",s("idea")),z.registerMethod("spec",dc,"spec",s("spec")),z.registerMethod("ship",MI,"ship",s("ship")),z.registerMethod("dash",_w,"dash",s("dash")),z.registerMethod("help",_w,"help",s("help")),z.registerMethod("perf",OI,"perf",s("perf")),z.registerMethod("velocity",NI,"velocity",s("velocity")),z.registerMethod("cleanup",_r,"cleanup",s("cleanup")),z.registerMethod("design",_r,"design",s("design")),z.registerMethod("recover",_r,"recover",s("recover")),z.registerMethod("undo",_r,"undo",s("undo")),z.registerMethod("redo",_r,"redo",s("redo")),z.registerMethod("history",_r,"history",s("history")),z.registerMethod("analyze",Lr,"analyze",s("analyze")),z.registerMethod("sync",Lr,"sync",s("sync")),z.registerMethod("stats",Lr,"stats",s("stats")),z.registerMethod("status",Lr,"status",s("status")),z.registerMethod("seal",Lr,"seal",s("seal")),z.registerMethod("verify",Lr,"verify",s("verify")),z.registerMethod("start",Lw,"start",s("start")),z.registerMethod("setup",Lw,"setup",s("setup")),z.registerMethod("uninstall",_I,"uninstall",s("uninstall")),z.registerMethod("update",LI,"update",s("update")),z.registerMethod("context",FI,"context",s("context"))}var Ls,dc,MI,_w,OI,_r,Lr,Lw,FI,NI,_I,LI,pc=y(()=>{"use strict";Ra();Ld();hp();Ud();Xd();Yd();ja();xr();Zd();np();yp();sp();rp();fp();Ls=new Fr,dc=new Rs,MI=new jr,_w=new Pr,OI=new Ar,_r=new Er,Lr=new Ns,Lw=new Ir,FI=new _s,NI=new Dr,_I=new Ko,LI=new Rr;l(UI,"registerCategories");l(Uw,"registerAllCommands");Uw()});var wp=y(()=>{"use strict";el();Dw();pc();xr()});var Ww={};xe(Ww,{shutdown:()=>Us,startDaemon:()=>GI});import rt from"node:fs";import{createServer as HI}from"node:net";async function GI(s){let e=Ge.socket(),t=Ge.pid(),n=Ge.runDir();if(rt.mkdirSync(n,{recursive:!0}),rt.existsSync(t)){let i=parseInt(rt.readFileSync(t,"utf-8").trim(),10);JI(i)&&(console.error(`Daemon already running (PID ${i})`),process.exit(1)),rt.unlinkSync(t)}rt.existsSync(e)&&rt.unlinkSync(e);let r=qI(),o=null;if(r)try{o=rt.statSync(r).mtimeMs}catch{}if(Oe={startedAt:Date.now(),commandsServed:0,lastActivity:Date.now(),idleTimeoutMs:wc,idleTimer:null,entryPath:r,entryMtime:o},be=new Nn,Ur=HI(i=>WI(i)),Ur.listen(e,()=>{rt.chmodSync(e,384),rt.writeFileSync(t,String(process.pid)),console.log(`prjct daemon started (PID ${process.pid})`),console.log(` Socket: ${e}`),r&&console.log(` Watching: ${r}`),Hw()}),Ur.on("error",i=>{console.error("Daemon socket error:",i.message),Us(1)}),!s.noHttp)try{let i=process.cwd(),a=await M.getProjectId(i);if(a){let c=s.port||ji;Xo=Ii({port:c,projectId:a,projectPath:i,enableLogging:!1}),await Xo.start()}}catch{}if(process.on("SIGTERM",()=>Us(0)),process.on("SIGINT",()=>Us(0)),process.on("SIGHUP",()=>{be=new Nn,console.log("Daemon reloaded (SIGHUP)")}),!s.foreground)try{process.stdin?.unref?.()}catch{}}function WI(s){let e="";s.on("data",async t=>{e+=t.toString();let n;for(;(n=e.indexOf(`
1550
1550
  `))!==-1;){let r=e.slice(0,n);if(e=e.slice(n+1),!!r.trim())try{let o=JSON.parse(r),i=await zI(o);s.write(Hs(i))}catch(o){let i={id:"unknown",success:!1,exitCode:1,stderr:`Protocol error: ${o.message}`};s.write(Hs(i))}}}),s.on("error",()=>{})}async function zI(s){if(!Oe||!be)return{id:s.id,success:!1,exitCode:1,stderr:"Daemon not initialized"};if(Hw(),Oe.commandsServed++,Oe.lastActivity=Date.now(),Gw()&&(console.log("Build changed detected \u2014 daemon will restart after this request"),setTimeout(()=>{console.log("Daemon shutting down for code reload..."),Us(0)},200)),s.command==="daemon")return BI(s);if(s.command==="__ping")return{id:s.id,success:!0,exitCode:0,result:{pong:!0,pid:process.pid}};try{let e=[],t=[],n=console.log,r=console.error;console.log=(...o)=>e.push(o.map(String).join(" ")),console.error=(...o)=>t.push(o.map(String).join(" "));try{let o=await VI(s);return{id:s.id,success:o.success,exitCode:o.success?0:1,stdout:e.join(`
1551
1551
  `)||o.message||void 0,stderr:t.join(`
1552
- `)||o.error||void 0,result:o}}finally{console.log=n,console.error=r}}catch(e){return{id:s.id,success:!1,exitCode:1,stderr:e.message}}}async function VI(s){let e=s.args.join(" ")||null,t=s.options,n=t.md===!0;switch(s.command){case"sync":return be.sync(s.cwd,{aiTools:t.agents?String(t.agents).split(","):void 0,preview:t.preview===!0||t["dry-run"]===!0,yes:t.yes===!0,json:t.json===!0,md:n,package:t.package?String(t.package):void 0,full:t.full===!0});case"status":return be.status(s.cwd,{json:t.json===!0,md:n});case"stats":return be.stats(s.cwd,{json:t.json===!0,export:t.export===!0});case"diff":return be.diff(s.cwd,{json:t.json===!0,md:n});case"seal":return be.seal(s.cwd,{json:t.json===!0});case"rollback":return be.rollback(s.cwd,{json:t.json===!0,md:n});case"verify":return be.verify(s.cwd,{json:t.json===!0,semantic:t.semantic===!0});case"task":return be.task(e,s.cwd,{md:n});case"done":return be.done(s.cwd,{md:n});case"next":return be.next(s.cwd,{md:n});case"pause":return be.pause(e||"",s.cwd,{md:n});case"resume":return be.resume(e,s.cwd,{md:n});case"bug":return be.bug(e||"",s.cwd,{md:n});case"idea":return be.idea(e||"",s.cwd,{md:n});case"ship":return be.ship(e,s.cwd,{md:n});case"dash":return be.dash(e||"default",s.cwd,{md:n});case"workflow":return be.workflowPrefs(e,s.cwd,{md:n});case"sessions":return be.sessions(s.cwd,{md:n,cleanup:t.cleanup===!0});case"design":return be.design(e||"",t);case"analysis-payload":return be.analysisPayload(s.cwd,{json:t.json===!0,md:n});case"analysis-save-llm":return be.saveLlmAnalysis(e||"",s.cwd,{md:n});case"analysis-llm":return be.getLlmAnalysis(s.cwd,{json:t.json===!0,md:n});case"analyze":return be.analyze(t);case"cleanup":return be.cleanup(t);default:return z.execute(s.command,e,s.cwd)}}function BI(s){let e=s.args[0];if(e==="status")return{id:s.id,success:!0,exitCode:0,result:{running:!0,pid:process.pid,socketPath:Ge.socket(),uptime:Oe?Date.now()-Oe.startedAt:0,commandsServed:Oe?.commandsServed??0,lastActivity:Oe?new Date(Oe.lastActivity).toISOString():null,registeredCommands:z.list().length,stale:Gw()}};if(e==="stop"){let t={id:s.id,success:!0,exitCode:0,stdout:"Daemon stopping..."};return setTimeout(()=>Us(0),100),t}return{id:s.id,success:!1,exitCode:1,stderr:`Unknown daemon command: ${e}. Use: status, stop`}}function Hw(){Oe&&(Oe.idleTimer&&clearTimeout(Oe.idleTimer),Oe.idleTimer=setTimeout(()=>{console.log(`Daemon idle for ${Oe.idleTimeoutMs/1e3/60} minutes, shutting down`),Us(0)},Oe.idleTimeoutMs),Oe.idleTimer.unref&&Oe.idleTimer.unref())}function Us(s){console.log("Daemon shutting down..."),Oe?.idleTimer&&clearTimeout(Oe.idleTimer),Xo&&(Xo.stop(),Xo=null),Ur&&(Ur.close(),Ur=null);let e=Ge.socket(),t=Ge.pid();try{rt.existsSync(e)&&rt.unlinkSync(e)}catch{}try{rt.existsSync(t)&&rt.unlinkSync(t)}catch{}process.exit(s)}function JI(s){try{return process.kill(s,0),!0}catch{return!1}}function qI(){let s=Un("node:path"),e=__dirname;for(let r=0;r<5;r++){if(rt.existsSync(s.join(e,"package.json"))){let o=s.join(e,"dist","daemon","entry.mjs");if(rt.existsSync(o))return o;break}e=s.dirname(e)}let t=[s.join(__dirname,"..","daemon","entry.mjs"),s.join(__dirname,"..","dist","daemon","entry.mjs")];for(let r of t)if(rt.existsSync(r))return r;let n=process.argv[1];return n&&rt.existsSync(n)?n:null}function Gw(){if(!Oe?.entryPath||Oe.entryMtime===null)return!1;try{return rt.statSync(Oe.entryPath).mtimeMs!==Oe.entryMtime}catch{return!1}}var Ur,Xo,be,Oe,zw=y(()=>{"use strict";wp();xr();pc();it();dl();Yo();Ur=null,Xo=null,be=null,Oe=null;l(GI,"startDaemon");l(WI,"handleConnection");l(zI,"handleRequest");l(VI,"executeCommand");l(BI,"handleDaemonCommand");l(Hw,"resetIdleTimer");l(Us,"shutdown");l(JI,"isProcessRunning");l(qI,"resolveEntryPath");l(Gw,"isCodeStale")});var Jw={};xe(Jw,{runStart:()=>rj});import Bt from"node:fs/promises";import Vw from"node:os";import cn from"node:path";import K from"chalk";function YI(){console.clear(),console.log(KI),console.log(XI)}function Bw(s,e){console.log(`
1552
+ `)||o.error||void 0,result:o}}finally{console.log=n,console.error=r}}catch(e){return{id:s.id,success:!1,exitCode:1,stderr:e.message}}}async function VI(s){let e=s.args.join(" ")||null,t=s.options,n=t.md===!0;switch(s.command){case"sync":return be.sync(s.cwd,{aiTools:t.agents?String(t.agents).split(","):void 0,preview:t.preview===!0||t["dry-run"]===!0,yes:t.yes===!0,json:t.json===!0,md:n,package:t.package?String(t.package):void 0,full:t.full===!0});case"status":return be.status(s.cwd,{json:t.json===!0,md:n});case"stats":return be.stats(s.cwd,{json:t.json===!0,export:t.export===!0});case"diff":return be.diff(s.cwd,{json:t.json===!0,md:n});case"seal":return be.seal(s.cwd,{json:t.json===!0});case"rollback":return be.rollback(s.cwd,{json:t.json===!0,md:n});case"verify":return be.verify(s.cwd,{json:t.json===!0,semantic:t.semantic===!0});case"task":return be.task(e,s.cwd,{md:n});case"done":return be.done(s.cwd,{md:n});case"next":return be.next(s.cwd,{md:n});case"pause":return be.pause(e||"",s.cwd,{md:n});case"resume":return be.resume(e,s.cwd,{md:n});case"bug":return be.bug(e||"",s.cwd,{md:n});case"idea":return be.idea(e||"",s.cwd,{md:n});case"ship":return be.ship(e,s.cwd,{md:n});case"dash":return be.dash(e||"default",s.cwd,{md:n});case"workflow":return be.workflowPrefs(e,s.cwd,{md:n});case"sessions":return be.sessions(s.cwd,{md:n,cleanup:t.cleanup===!0});case"design":return be.design(e||"",t,s.cwd);case"analysis-payload":return be.analysisPayload(s.cwd,{json:t.json===!0,md:n});case"analysis-save-llm":return be.saveLlmAnalysis(e||"",s.cwd,{md:n});case"analysis-llm":return be.getLlmAnalysis(s.cwd,{json:t.json===!0,md:n});case"analyze":return be.analyze(t,s.cwd);case"cleanup":return be.cleanup(t,s.cwd);default:return z.execute(s.command,e,s.cwd)}}function BI(s){let e=s.args[0];if(e==="status")return{id:s.id,success:!0,exitCode:0,result:{running:!0,pid:process.pid,socketPath:Ge.socket(),uptime:Oe?Date.now()-Oe.startedAt:0,commandsServed:Oe?.commandsServed??0,lastActivity:Oe?new Date(Oe.lastActivity).toISOString():null,registeredCommands:z.list().length,stale:Gw()}};if(e==="stop"){let t={id:s.id,success:!0,exitCode:0,stdout:"Daemon stopping..."};return setTimeout(()=>Us(0),100),t}return{id:s.id,success:!1,exitCode:1,stderr:`Unknown daemon command: ${e}. Use: status, stop`}}function Hw(){Oe&&(Oe.idleTimer&&clearTimeout(Oe.idleTimer),Oe.idleTimer=setTimeout(()=>{console.log(`Daemon idle for ${Oe.idleTimeoutMs/1e3/60} minutes, shutting down`),Us(0)},Oe.idleTimeoutMs),Oe.idleTimer.unref&&Oe.idleTimer.unref())}function Us(s){console.log("Daemon shutting down..."),Oe?.idleTimer&&clearTimeout(Oe.idleTimer),Xo&&(Xo.stop(),Xo=null),Ur&&(Ur.close(),Ur=null);let e=Ge.socket(),t=Ge.pid();try{rt.existsSync(e)&&rt.unlinkSync(e)}catch{}try{rt.existsSync(t)&&rt.unlinkSync(t)}catch{}process.exit(s)}function JI(s){try{return process.kill(s,0),!0}catch{return!1}}function qI(){let s=Un("node:path"),e=__dirname;for(let r=0;r<5;r++){if(rt.existsSync(s.join(e,"package.json"))){let o=s.join(e,"dist","daemon","entry.mjs");if(rt.existsSync(o))return o;break}e=s.dirname(e)}let t=[s.join(__dirname,"..","daemon","entry.mjs"),s.join(__dirname,"..","dist","daemon","entry.mjs")];for(let r of t)if(rt.existsSync(r))return r;let n=process.argv[1];return n&&rt.existsSync(n)?n:null}function Gw(){if(!Oe?.entryPath||Oe.entryMtime===null)return!1;try{return rt.statSync(Oe.entryPath).mtimeMs!==Oe.entryMtime}catch{return!1}}var Ur,Xo,be,Oe,zw=y(()=>{"use strict";wp();xr();pc();it();dl();Yo();Ur=null,Xo=null,be=null,Oe=null;l(GI,"startDaemon");l(WI,"handleConnection");l(zI,"handleRequest");l(VI,"executeCommand");l(BI,"handleDaemonCommand");l(Hw,"resetIdleTimer");l(Us,"shutdown");l(JI,"isProcessRunning");l(qI,"resolveEntryPath");l(Gw,"isCodeStale")});var Jw={};xe(Jw,{runStart:()=>rj});import Bt from"node:fs/promises";import Vw from"node:os";import cn from"node:path";import K from"chalk";function YI(){console.clear(),console.log(KI),console.log(XI)}function Bw(s,e){console.log(`
1553
1553
  ${K.bold(" Select AI providers to configure:")}
1554
1554
  `),console.log(` ${K.dim("(Use arrow keys to navigate, space to toggle, enter to confirm)")}
1555
1555
  `),s.forEach((t,n)=>{let r=n===e?K.cyan("\u276F"):" ",o=t.selected?K.green("[\u2713]"):K.dim("[ ]"),i=t.installed?K.green("(installed)"):K.yellow("(will install)"),a=n===e?K.bold(t.displayName):t.displayName;console.log(` ${r} ${o} ${a} ${i}`)}),console.log("")}async function QI(){let s=await En(),e=[{name:"claude",displayName:"Claude Code",installed:s.claude.installed,selected:s.claude.installed},{name:"gemini",displayName:"Gemini CLI",installed:s.gemini.installed,selected:s.gemini.installed},{name:"codex",displayName:"OpenAI Codex",installed:s.codex.installed,selected:s.codex.installed}];return e.some(t=>t.selected)||(e[0].selected=!0),process.stdin.isTTY?new Promise(t=>{let n=0,r=l(()=>{process.stdout.write("\x1B[8A"),process.stdout.write("\x1B[0J"),Bw(e,n)},"render");Bw(e,n),process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.setEncoding("utf8");let o=l(()=>{process.stdin.setRawMode(!1),process.stdin.removeListener("data",i),process.stdin.pause()},"cleanup"),i=l(a=>{if(a===""&&(o(),console.log(`
@@ -1745,7 +1745,7 @@ ${Q.yellow(`Command '${s}' not found.`)}
1745
1745
 
1746
1746
  Run 'prjct help' to see all available commands.
1747
1747
  `}function bk(){let s=[];s.push(""),s.push(Q.cyan.bold("All Commands")),s.push("");let e=Object.entries(Jo).sort((t,n)=>t[1].order-n[1].order);for(let[t,n]of e){let r=Nr.filter(o=>o.group===t);if(r.length!==0){s.push(`${Q.bold(n.title)} ${Q.dim(`(${r.length} commands)`)}`),s.push(Q.dim(n.description)),s.push("");for(let o of r){let i=`p. ${o.name}`.padEnd(18),a=o.description.length>45?`${o.description.slice(0,42)}...`:o.description;s.push(` ${i} ${a}`)}s.push("")}}return s.push(Q.dim("Run 'prjct help <command>' for detailed help on a specific command.")),s.push(""),s.join(`
1748
- `)}function Wj(s){return s?s==="commands"||s==="all"?bk():Sk(s):yk()}var hk,Gj,Ck=y(()=>{"use strict";hp();ot();hk=[{name:"start",description:"First-time setup wizard",example:"prjct start"},{name:"init",description:"Initialize project in current directory",example:"prjct init"},{name:"sync",description:"Sync project state and update context files",example:"prjct sync"},{name:"watch",description:"Auto-sync on file changes",example:"prjct watch",options:["--verbose","--debounce=<ms>","--interval=<sec>"]},{name:"hooks",description:"Manage git hooks for auto-sync",example:"prjct hooks install",subcommands:["install","uninstall","status"]},{name:"doctor",description:"Check system health and dependencies",example:"prjct doctor"},{name:"serve",description:"Start web dashboard server",example:"prjct serve [port]"},{name:"context",description:"Smart context filtering tools for AI",example:'prjct context files "add auth"',subcommands:["files","signatures","imports","recent","summary"]},{name:"linear",description:"Linear issue tracker CLI",example:"prjct linear list",subcommands:["list","get","create","update"]},{name:"stop",description:"Stop the background daemon",example:"prjct stop",options:["--force"]},{name:"restart",description:"Restart the background daemon",example:"prjct restart"},{name:"uninstall",description:"Complete system removal of prjct",example:"prjct uninstall --backup",options:["--force","--backup","--dry-run","--keep-package"]}],Gj=[{flag:"-q, --quiet",description:"Suppress all output (errors to stderr only)"},{flag:"-v, --version",description:"Show version and provider status"},{flag:"-h, --help",description:"Show this help message"}];l(yk,"formatMainHelp");l(wk,"formatTerminalCommandHelp");l(kk,"formatAgentCommandHelp");l(Sk,"formatCommandHelp");l(bk,"formatCommandList");l(Wj,"getHelp")});var xk=Ok((E3,zj)=>{zj.exports={name:"prjct-cli",version:"1.42.0",description:"Context layer for AI agents. Project context for Claude Code, Gemini CLI, and more.",main:"dist/bin/prjct.mjs",bin:{prjct:"bin/prjct"},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",postinstall:"node scripts/postinstall.js",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 .","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 ."},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","@hono/node-server":"^1.13.7","@linear/sdk":"^29.0.0","better-sqlite3":"^12.6.2",chalk:"^4.1.2",chokidar:"^5.0.0","date-fns":"^4.1.0",glob:"^13.0.1",hono:"^4.11.3","jsonc-parser":"^3.3.1",zod:"^3.24.1"},devDependencies:{"@biomejs/biome":"^2.3.13","@types/better-sqlite3":"^7.6.13","@types/bun":"latest","@types/chokidar":"^2.1.7",esbuild:"^0.25.0",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://prjct.app",packageManager:"bun@1.2.23",engines:{node:">=18.0.0",bun:">=1.0.0"},files:["assets/","bin/prjct","dist/","scripts/postinstall.js","scripts/install.sh","LICENSE","README.md","CHANGELOG.md"],prepublishOnly:"node scripts/build.js",trustedDependencies:["chalk"]}});var Qj={};import Pk from"node:os";import hc from"node:path";import He from"chalk";async function Vj(){let[s,...e]=process.argv.slice(2);if(["-v","--version","version"].includes(s)){let t=await Promise.resolve().then(()=>Fk(xk()));await Xj(t.version),process.exit(0)}["-h","--help",void 0].includes(s)&&(Yj(),process.exit(0)),f.start();try{let t=z.getByName(s);if(!t){let m=Jj(s),p=m?`Did you mean 'prjct ${m}'? Run 'prjct --help' for all commands`:"Run 'prjct --help' to see available commands";f.failWithHint(ps("UNKNOWN_COMMAND",{message:`Unknown command: ${s}`,hint:p})),f.end(),process.exit(1)}if(t.deprecated){let m=t.replacedBy?`Use 'prjct ${t.replacedBy}' instead`:"Run 'prjct --help' to see available commands";f.failWithHint({message:`Command '${s}' is deprecated`,hint:m}),f.end(),process.exit(1)}t.implemented||(f.failWithHint({message:`Command '${s}' is not yet implemented`,hint:"Run 'prjct --help' to see available commands",docs:"https://github.com/jlopezlira/prjct-cli"}),f.end(),process.exit(1));let{parsedArgs:n,options:r}=Kj(t,e),o=!process.stdin.isTTY||r.md===!0||r.json===!0;t.requiresLlm&&!o&&(f.failWithHint({message:`'prjct ${s}' requires an AI agent to process its output`,hint:`Use 'p. ${s}' inside Claude/Cursor, or add --md flag`}),f.end(),process.exit(1));let i=Bj(t,n);i&&(f.failWithHint(i),f.end(),process.exit(1));let a=null,c=Date.now();try{a=await M.getProjectId(process.cwd()),a&&(await Xn.expireIfStale(a),await Xn.touch(a))}catch{}let u=new Nn,d;if(s==="design"){let m=n.join(" ");d=await u.design(m,r)}else if(s==="analyze")d=await u.analyze(r);else if(s==="cleanup")d=await u.cleanup(r);else if(s==="setup")d=await u.setup(r);else if(s==="update")d=await u.update(r);else{let m=n.join(" ")||null,p=r.md===!0,h={task:l(k=>u.task(k,process.cwd(),{md:p}),"task"),done:l(()=>u.done(process.cwd(),{md:p}),"done"),next:l(()=>u.next(process.cwd(),{md:p}),"next"),pause:l(k=>u.pause(k||"",process.cwd(),{md:p}),"pause"),resume:l(k=>u.resume(k,process.cwd(),{md:p}),"resume"),init:l(k=>u.init(k),"init"),bug:l(k=>u.bug(k||"",process.cwd(),{md:p}),"bug"),idea:l(k=>u.idea(k||"",process.cwd(),{md:p}),"idea"),spec:l(k=>u.spec(k),"spec"),ship:l(k=>u.ship(k,process.cwd(),{md:p}),"ship"),workflow:l(k=>u.workflowPrefs(k,process.cwd(),{md:p}),"workflow"),sessions:l(()=>u.sessions(process.cwd(),{md:p,cleanup:r.cleanup===!0}),"sessions"),dash:l(k=>u.dash(k||"default",process.cwd(),{md:p}),"dash"),stats:l(()=>u.stats(process.cwd(),{json:r.json===!0,export:r.export===!0}),"stats"),status:l(()=>u.status(process.cwd(),{json:r.json===!0,md:p}),"status"),help:l(k=>u.help(k||""),"help"),perf:l(k=>u.perf(k||"7"),"perf"),velocity:l(k=>u.velocity(k||"0"),"velocity"),recover:l(()=>u.recover(),"recover"),undo:l(()=>u.undo(),"undo"),redo:l(()=>u.redo(),"redo"),history:l(()=>u.history(),"history"),sync:l(()=>u.sync(process.cwd(),{aiTools:r.agents?String(r.agents).split(","):void 0,preview:r.preview===!0||r["dry-run"]===!0,yes:r.yes===!0,json:r.json===!0,md:p,package:r.package?String(r.package):void 0,full:r.full===!0}),"sync"),diff:l(()=>u.diff(process.cwd(),{json:r.json===!0,md:p}),"diff"),seal:l(()=>u.seal(process.cwd(),{json:r.json===!0}),"seal"),rollback:l(()=>u.rollback(process.cwd(),{json:r.json===!0,md:p}),"rollback"),verify:l(()=>u.verify(process.cwd(),{json:r.json===!0,semantic:r.semantic===!0}),"verify"),"analysis-payload":l(()=>u.analysisPayload(process.cwd(),{json:r.json===!0,md:p}),"analysis-payload"),"analysis-save-llm":l(k=>u.saveLlmAnalysis(k||"",process.cwd(),{md:p}),"analysis-save-llm"),"analysis-llm":l(()=>u.getLlmAnalysis(process.cwd(),{json:r.json===!0,md:p}),"analysis-llm"),start:l(()=>u.start(),"start"),context:l(k=>u.context(k),"context")}[s];if(h)d=await h(m);else throw new Error(`Command '${s}' has no handler`)}if(a){let m=Date.now()-c;try{await Xn.trackCommand(a,s,m)}catch{}try{await ms.recordTiming(a,"command_duration",m,{command:s});let p=globalThis.__perfStartNs;if(p){let g=Number(process.hrtime.bigint()-p)/1e6;await ms.recordTiming(a,"startup_time",g)}await ms.recordMemory(a,{command:s})}catch{}}d?.message&&console.log(d.message),f.end(),process.exit(d?.success?0:1)}catch(t){console.error("Error:",w(t)),process.env.DEBUG&&console.error(Zo(t)),f.end(),process.exit(1)}}function Bj(s,e){if(!s.params)return null;let t=s.params.match(/<[^>]+>/g);if(!t||t.length===0)return null;if(e.length<t.length){let n=t.map(o=>o.slice(1,-1)).join(", "),r=s.usage.terminal||`prjct ${s.name} ${s.params}`;return ps("MISSING_PARAM",{message:`Missing required parameter: ${n}`,hint:`Usage: ${r}`})}return null}function Jj(s){let e=z.getAll().map(r=>r.name),t=null,n=1/0;for(let r of e){let o=qj(s.toLowerCase(),r.toLowerCase());o<n&&(n=o,t=r)}return n<=2?t:null}function qj(s,e){let t=s.length,n=e.length,r=Array.from({length:t+1},()=>Array(n+1).fill(0));for(let o=0;o<=t;o++)r[o][0]=o;for(let o=0;o<=n;o++)r[0][o]=o;for(let o=1;o<=t;o++)for(let i=1;i<=n;i++)r[o][i]=s[o-1]===e[i-1]?r[o-1][i-1]:1+Math.min(r[o-1][i],r[o][i-1],r[o-1][i-1]);return r[t][n]}function Kj(s,e){let t=[],n={};for(let r=0;r<e.length;r++){let o=e[r];if(o.startsWith("--")){let i=o.slice(2);r+1<e.length&&!e[r+1].startsWith("--")?n[i]=e[++r]:n[i]=!0}else t.push(o)}return{parsedArgs:t,options:n}}async function Xj(s){let e=await En(),t=hc.join(Pk.homedir(),".claude","commands","p.md"),n=hc.join(Pk.homedir(),".gemini","commands","p.toml"),[r,o,i,a]=await Promise.all([P(t),P(n),P(hc.join(process.cwd(),".cursor","commands","sync.md")),P(hc.join(process.cwd(),".cursor"))]),c=await Ws();if(console.log(`
1748
+ `)}function Wj(s){return s?s==="commands"||s==="all"?bk():Sk(s):yk()}var hk,Gj,Ck=y(()=>{"use strict";hp();ot();hk=[{name:"start",description:"First-time setup wizard",example:"prjct start"},{name:"init",description:"Initialize project in current directory",example:"prjct init"},{name:"sync",description:"Sync project state and update context files",example:"prjct sync"},{name:"watch",description:"Auto-sync on file changes",example:"prjct watch",options:["--verbose","--debounce=<ms>","--interval=<sec>"]},{name:"hooks",description:"Manage git hooks for auto-sync",example:"prjct hooks install",subcommands:["install","uninstall","status"]},{name:"doctor",description:"Check system health and dependencies",example:"prjct doctor"},{name:"serve",description:"Start web dashboard server",example:"prjct serve [port]"},{name:"context",description:"Smart context filtering tools for AI",example:'prjct context files "add auth"',subcommands:["files","signatures","imports","recent","summary"]},{name:"linear",description:"Linear issue tracker CLI",example:"prjct linear list",subcommands:["list","get","create","update"]},{name:"stop",description:"Stop the background daemon",example:"prjct stop",options:["--force"]},{name:"restart",description:"Restart the background daemon",example:"prjct restart"},{name:"uninstall",description:"Complete system removal of prjct",example:"prjct uninstall --backup",options:["--force","--backup","--dry-run","--keep-package"]}],Gj=[{flag:"-q, --quiet",description:"Suppress all output (errors to stderr only)"},{flag:"-v, --version",description:"Show version and provider status"},{flag:"-h, --help",description:"Show this help message"}];l(yk,"formatMainHelp");l(wk,"formatTerminalCommandHelp");l(kk,"formatAgentCommandHelp");l(Sk,"formatCommandHelp");l(bk,"formatCommandList");l(Wj,"getHelp")});var xk=Ok((E3,zj)=>{zj.exports={name:"prjct-cli",version:"1.42.2",description:"Context layer for AI agents. Project context for Claude Code, Gemini CLI, and more.",main:"dist/bin/prjct.mjs",bin:{prjct:"bin/prjct"},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",postinstall:"node scripts/postinstall.js",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 .","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 ."},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","@hono/node-server":"^1.13.7","@linear/sdk":"^29.0.0","better-sqlite3":"^12.6.2",chalk:"^4.1.2",chokidar:"^5.0.0","date-fns":"^4.1.0",glob:"^13.0.1",hono:"^4.11.3","jsonc-parser":"^3.3.1",zod:"^3.24.1"},devDependencies:{"@biomejs/biome":"^2.3.13","@types/better-sqlite3":"^7.6.13","@types/bun":"latest","@types/chokidar":"^2.1.7",esbuild:"^0.25.0",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://prjct.app",packageManager:"bun@1.2.23",engines:{node:">=18.0.0",bun:">=1.0.0"},files:["assets/","bin/prjct","dist/","scripts/postinstall.js","scripts/install.sh","LICENSE","README.md","CHANGELOG.md"],prepublishOnly:"node scripts/build.js",trustedDependencies:["chalk"]}});var Qj={};import Pk from"node:os";import hc from"node:path";import He from"chalk";async function Vj(){let[s,...e]=process.argv.slice(2);if(["-v","--version","version"].includes(s)){let t=await Promise.resolve().then(()=>Fk(xk()));await Xj(t.version),process.exit(0)}["-h","--help",void 0].includes(s)&&(Yj(),process.exit(0)),f.start();try{let t=z.getByName(s);if(!t){let m=Jj(s),p=m?`Did you mean 'prjct ${m}'? Run 'prjct --help' for all commands`:"Run 'prjct --help' to see available commands";f.failWithHint(ps("UNKNOWN_COMMAND",{message:`Unknown command: ${s}`,hint:p})),f.end(),process.exit(1)}if(t.deprecated){let m=t.replacedBy?`Use 'prjct ${t.replacedBy}' instead`:"Run 'prjct --help' to see available commands";f.failWithHint({message:`Command '${s}' is deprecated`,hint:m}),f.end(),process.exit(1)}t.implemented||(f.failWithHint({message:`Command '${s}' is not yet implemented`,hint:"Run 'prjct --help' to see available commands",docs:"https://github.com/jlopezlira/prjct-cli"}),f.end(),process.exit(1));let{parsedArgs:n,options:r}=Kj(t,e),o=!process.stdin.isTTY||r.md===!0||r.json===!0;t.requiresLlm&&!o&&(f.failWithHint({message:`'prjct ${s}' requires an AI agent to process its output`,hint:`Use 'p. ${s}' inside Claude/Cursor, or add --md flag`}),f.end(),process.exit(1));let i=Bj(t,n);i&&(f.failWithHint(i),f.end(),process.exit(1));let a=null,c=Date.now();try{a=await M.getProjectId(process.cwd()),a&&(await Xn.expireIfStale(a),await Xn.touch(a))}catch{}let u=new Nn,d;if(s==="design"){let m=n.join(" ");d=await u.design(m,r)}else if(s==="analyze")d=await u.analyze(r);else if(s==="cleanup")d=await u.cleanup(r);else if(s==="setup")d=await u.setup(r);else if(s==="update")d=await u.update(r);else{let m=n.join(" ")||null,p=r.md===!0,h={task:l(k=>u.task(k,process.cwd(),{md:p}),"task"),done:l(()=>u.done(process.cwd(),{md:p}),"done"),next:l(()=>u.next(process.cwd(),{md:p}),"next"),pause:l(k=>u.pause(k||"",process.cwd(),{md:p}),"pause"),resume:l(k=>u.resume(k,process.cwd(),{md:p}),"resume"),init:l(k=>u.init(k),"init"),bug:l(k=>u.bug(k||"",process.cwd(),{md:p}),"bug"),idea:l(k=>u.idea(k||"",process.cwd(),{md:p}),"idea"),spec:l(k=>u.spec(k),"spec"),ship:l(k=>u.ship(k,process.cwd(),{md:p}),"ship"),workflow:l(k=>u.workflowPrefs(k,process.cwd(),{md:p}),"workflow"),sessions:l(()=>u.sessions(process.cwd(),{md:p,cleanup:r.cleanup===!0}),"sessions"),dash:l(k=>u.dash(k||"default",process.cwd(),{md:p}),"dash"),stats:l(()=>u.stats(process.cwd(),{json:r.json===!0,export:r.export===!0}),"stats"),status:l(()=>u.status(process.cwd(),{json:r.json===!0,md:p}),"status"),help:l(k=>u.help(k||""),"help"),perf:l(k=>u.perf(k||"7"),"perf"),velocity:l(k=>u.velocity(k||"0"),"velocity"),recover:l(()=>u.recover(),"recover"),undo:l(()=>u.undo(),"undo"),redo:l(()=>u.redo(),"redo"),history:l(()=>u.history(),"history"),sync:l(()=>u.sync(process.cwd(),{aiTools:r.agents?String(r.agents).split(","):void 0,preview:r.preview===!0||r["dry-run"]===!0,yes:r.yes===!0,json:r.json===!0,md:p,package:r.package?String(r.package):void 0,full:r.full===!0}),"sync"),diff:l(()=>u.diff(process.cwd(),{json:r.json===!0,md:p}),"diff"),seal:l(()=>u.seal(process.cwd(),{json:r.json===!0}),"seal"),rollback:l(()=>u.rollback(process.cwd(),{json:r.json===!0,md:p}),"rollback"),verify:l(()=>u.verify(process.cwd(),{json:r.json===!0,semantic:r.semantic===!0}),"verify"),"analysis-payload":l(()=>u.analysisPayload(process.cwd(),{json:r.json===!0,md:p}),"analysis-payload"),"analysis-save-llm":l(k=>u.saveLlmAnalysis(k||"",process.cwd(),{md:p}),"analysis-save-llm"),"analysis-llm":l(()=>u.getLlmAnalysis(process.cwd(),{json:r.json===!0,md:p}),"analysis-llm"),start:l(()=>u.start(),"start"),context:l(k=>u.context(k),"context")}[s];if(h)d=await h(m);else throw new Error(`Command '${s}' has no handler`)}if(a){let m=Date.now()-c;try{await Xn.trackCommand(a,s,m)}catch{}try{await ms.recordTiming(a,"command_duration",m,{command:s});let p=globalThis.__perfStartNs;if(p){let g=Number(process.hrtime.bigint()-p)/1e6;await ms.recordTiming(a,"startup_time",g)}await ms.recordMemory(a,{command:s})}catch{}}d?.message&&console.log(d.message),f.end(),process.exit(d?.success?0:1)}catch(t){console.error("Error:",w(t)),process.env.DEBUG&&console.error(Zo(t)),f.end(),process.exit(1)}}function Bj(s,e){if(!s.params)return null;let t=s.params.match(/<[^>]+>/g);if(!t||t.length===0)return null;if(e.length<t.length){let n=t.map(o=>o.slice(1,-1)).join(", "),r=s.usage.terminal||`prjct ${s.name} ${s.params}`;return ps("MISSING_PARAM",{message:`Missing required parameter: ${n}`,hint:`Usage: ${r}`})}return null}function Jj(s){let e=z.getAll().map(r=>r.name),t=null,n=1/0;for(let r of e){let o=qj(s.toLowerCase(),r.toLowerCase());o<n&&(n=o,t=r)}return n<=2?t:null}function qj(s,e){let t=s.length,n=e.length,r=Array.from({length:t+1},()=>Array(n+1).fill(0));for(let o=0;o<=t;o++)r[o][0]=o;for(let o=0;o<=n;o++)r[0][o]=o;for(let o=1;o<=t;o++)for(let i=1;i<=n;i++)r[o][i]=s[o-1]===e[i-1]?r[o-1][i-1]:1+Math.min(r[o-1][i],r[o][i-1],r[o-1][i-1]);return r[t][n]}function Kj(s,e){let t=[],n={};for(let r=0;r<e.length;r++){let o=e[r];if(o.startsWith("--")){let i=o.slice(2);r+1<e.length&&!e[r+1].startsWith("--")?n[i]=e[++r]:n[i]=!0}else t.push(o)}return{parsedArgs:t,options:n}}async function Xj(s){let e=await En(),t=hc.join(Pk.homedir(),".claude","commands","p.md"),n=hc.join(Pk.homedir(),".gemini","commands","p.toml"),[r,o,i,a]=await Promise.all([P(t),P(n),P(hc.join(process.cwd(),".cursor","commands","sync.md")),P(hc.join(process.cwd(),".cursor"))]),c=await Ws();if(console.log(`
1749
1749
  ${He.cyan("p/")} prjct v${s}
1750
1750
  ${He.dim("Context layer for AI coding agents")}
1751
1751
 
@@ -1811,7 +1811,7 @@ MORE INFO
1811
1811
  ---------
1812
1812
  Documentation: https://prjct.app
1813
1813
  GitHub: https://github.com/jlopezlira/prjct-cli
1814
- `)}var Tk=y(()=>{"use strict";wp();xr();pc();ze();it();Mi();$i();_();co();Ie();Yt();l(Vj,"main");l(Bj,"validateCommandParams");l(Jj,"findClosestCommand");l(qj,"editDistance");l(Kj,"parseCommandArgs");l(Xj,"displayVersion");l(Yj,"displayHelp");Vj().catch(s=>{console.error("Fatal error:",w(s)),process.env.DEBUG&&console.error(Zo(s)),process.exit(1)})});globalThis.__perfStartNs=process.hrtime.bigint();var Jr=process.argv.slice(2),xp=Jr.find(s=>!s.startsWith("--")&&!s.startsWith("-")),Zj=new Set(["daemon","stop","restart","start","setup","dev","web","serve","context","hooks","doctor","uninstall","watch","linear","help","-h","--help","version","-v","--version"]);if(xp&&!Zj.has(xp)&&process.env.PRJCT_NO_DAEMON!=="1"){let s=await import("node:fs"),{DAEMON_PATHS:e}=await Promise.resolve().then(()=>(Yo(),Ap)),t=e.socket();if(s.existsSync(t)){let{sendRequest:n}=await Promise.resolve().then(()=>(Pn(),xn)),r=await import("node:crypto"),o=[],i={};for(let a=0;a<Jr.length;a++){let c=Jr[a];if(c.startsWith("--")){let u=c.slice(2);if(u.includes("=")){let d=u.indexOf("=");i[u.slice(0,d)]=u.slice(d+1)}else a+1<Jr.length&&!Jr[a+1].startsWith("--")?i[u]=Jr[++a]:i[u]=!0}else c.startsWith("-")&&c.length===2?i[c.slice(1)]=!0:a>0&&o.push(c)}try{let a=await n({id:r.randomUUID(),command:xp,args:o,options:i,cwd:process.cwd(),perfStartNs:globalThis.__perfStartNs?.toString()});a.stdout&&console.log(a.stdout),a.stderr&&console.error(a.stderr),process.exit(a.exitCode)}catch{}}}async function eR(){let s=await import("node:os"),e=await import("node:path"),t=(await import("chalk")).default,{detectAllProviders:n}=await Promise.resolve().then(()=>(ze(),ht)),r=(await Promise.resolve().then(()=>(it(),Qp))).default,o=(await Promise.resolve().then(()=>(_c(),em))).default,{DEFAULT_PORT:i,startServer:a}=await Promise.resolve().then(()=>(dl(),Qm)),{fileExists:c}=await Promise.resolve().then(()=>(Ie(),Pe)),{invalidateProviderCache:u}=await Promise.resolve().then(()=>(Cc(),Up)),{VERSION:d}=await Promise.resolve().then(()=>(ot(),li));async function m(){let b=s.homedir(),$=await n();if($.claude.installed){let O=e.join(b,".claude","commands","p.md");if(!await c(O))return!1}if($.gemini.installed){let O=e.join(b,".gemini","commands","p.toml");if(!await c(O))return!1}return!$.claude.installed&&!$.gemini.installed,!0}l(m,"checkRoutersInstalled");let p=process.argv.slice(2),g=p.findIndex(b=>b==="--quiet"||b==="-q"),h=g!==-1;if(h){p.splice(g,1);let{setQuietMode:b}=await Promise.resolve().then(()=>(Yt(),ng));b(!0)}let k=p.indexOf("--refresh"),S=k!==-1;S&&(p.splice(k,1),await u());async function R(b){let $=Date.now();try{let O=await r.getProjectId(process.cwd());if(O){let{sessionTracker:X}=await Promise.resolve().then(()=>($i(),og));return await X.expireIfStale(O),await X.touch(O),()=>{let q=Date.now()-$;X.trackCommand(O,b,q).catch(()=>{}),Promise.resolve().then(()=>(Mi(),ag)).then(({performanceTracker:v})=>{v.recordTiming(O,"command_duration",q,{command:b}).catch(()=>{}),v.recordMemory(O,{command:b}).catch(()=>{})}).catch(()=>{})}}}catch{}return()=>{}}if(l(R,"trackSession"),p[0]==="daemon"){let b=p[1]||"status";if(b==="start"){let{isDaemonRunning:$,spawnDaemon:O}=await Promise.resolve().then(()=>(Pn(),xn));if(await $())console.log("Daemon is already running."),process.exitCode=0;else if(p.includes("--foreground")||p.includes("-f")){let{startDaemon:q}=await Promise.resolve().then(()=>(zw(),Ww)),v=parseInt(p.find(ne=>ne.startsWith("--port="))?.split("=")[1]||"",10)||void 0,D=p.includes("--no-http");await q({port:v,noHttp:D,foreground:!0})}else await O()?console.log("Daemon started."):(console.error("Failed to start daemon."),process.exitCode=1)}else if(b==="stop"){let{isDaemonRunning:$,stopDaemon:O}=await Promise.resolve().then(()=>(Pn(),xn));if(await $()){let X=await O();console.log(X?"Daemon stopped.":"Failed to stop daemon."),process.exitCode=X?0:1}else console.log("Daemon is not running."),process.exitCode=0}else if(b==="status"){let{getDaemonStatus:$}=await Promise.resolve().then(()=>(Pn(),xn)),O=await $();if(O.running){let X=O.uptime?Math.round(O.uptime/1e3):0,q=O.stale;console.log(`Daemon running (PID ${O.pid})${q?" \u26A0 STALE":""}`),console.log(` Uptime: ${X}s`),console.log(` Commands served: ${O.commandsServed??0}`),O.lastActivity&&console.log(` Last activity: ${O.lastActivity}`),q&&console.log(` ${t.yellow("\u26A0 Code changed since daemon started. Run: prjct restart")}`)}else console.log("Daemon is not running.");process.exitCode=0}else console.error(`Unknown daemon command: ${b}. Use: start, stop, status`),process.exitCode=1}else if(p[0]==="stop"){let{isDaemonRunning:b,stopDaemon:$,forceKillDaemon:O}=await Promise.resolve().then(()=>(Pn(),xn));if(p.includes("--force")||p.includes("-f")){let q=O();console.log(q?"Daemon force-killed.":"Daemon is not running."),process.exitCode=0}else await b()?await $()?(console.log("Daemon stopped."),process.exitCode=0):(console.log("Graceful stop failed, force-killing..."),O(),console.log("Daemon force-killed."),process.exitCode=0):(O(),console.log("Daemon is not running (cleaned up stale files)."),process.exitCode=0)}else if(p[0]==="restart"){let{isDaemonRunning:b,stopDaemon:$,forceKillDaemon:O,spawnDaemon:X}=await Promise.resolve().then(()=>(Pn(),xn));await b()?(await $()||O(),await new Promise(D=>setTimeout(D,300))):O(),await X()?(console.log("Daemon restarted."),process.exitCode=0):(console.error("Failed to restart daemon."),process.exitCode=1)}else if(p[0]==="start"||p[0]==="setup"){let{runStart:b}=await Promise.resolve().then(()=>(qw(),Jw));await b()}else if(p[0]==="dev")console.log("Dev mode is not yet implemented."),console.log('Use "prjct serve" to start the web server.'),process.exitCode=0;else if(p[0]==="web"||p[0]==="serve")try{let b=process.cwd(),$=await r.getProjectId(b);if(!$)console.error('No prjct project found. Run "prjct init" first.'),process.exitCode=1;else{let O=parseInt(p[1],10)||i;await a($,b,O)}}catch(b){console.error("Server error:",b.message),process.exitCode=1}else if(p[0]==="context"){let b=process.cwd(),$=await r.getProjectId(b);if(!$)console.error('No prjct project found. Run "prjct init" first.'),process.exitCode=1;else{let O=await R("context"),{runContextTool:X}=await Promise.resolve().then(()=>(rk(),sk)),q=await X(p.slice(1),$,b);console.log(JSON.stringify(q,null,2)),process.exitCode=q.tool==="error"?1:0,O()}}else if(p[0]==="hooks"){let b=await R("hooks"),{hooksService:$}=await Promise.resolve().then(()=>(lk(),ck)),O=p[1]||"status",X=await $.run(process.cwd(),O);process.exitCode=X,b()}else if(p[0]==="doctor"){let b=await R("doctor"),{doctorService:$}=await Promise.resolve().then(()=>(mk(),pk)),O=await $.run(process.cwd());process.exitCode=O,b()}else if(p[0]==="uninstall"){let{uninstall:b}=await Promise.resolve().then(()=>(yp(),Nw)),$=p.includes("--force")||p.includes("-f"),O=p.includes("--backup")||p.includes("-b"),X=p.includes("--dry-run")||p.includes("-n"),q=p.includes("--keep-package"),v=await b({force:$,backup:O,dryRun:X,keepPackage:q});process.exitCode=v.success?0:1}else if(p[0]==="watch"){let b=process.cwd();if(!await r.getProjectId(b))console.error('No prjct project found. Run "prjct init" first.'),process.exitCode=1;else{let{watchService:O}=await Promise.resolve().then(()=>(fk(),gk)),X=p.includes("--verbose")||p.includes("-v"),q=p.find(Xe=>Xe.startsWith("--debounce=")),v=q?parseInt(q.split("=")[1],10):void 0,D=p.find(Xe=>Xe.startsWith("--interval=")),ne=D?parseInt(D.split("=")[1],10)*1e3:void 0,gt=await O.start(b,{verbose:X,quiet:h,debounceMs:v,minIntervalMs:ne});gt.success||(console.error(gt.error),process.exitCode=1)}}else if(p[0]==="linear"){let{spawn:b}=await import("node:child_process"),$=await import("node:fs"),O=process.cwd(),X=await r.getProjectId(O);if(!X)console.error('No prjct project found. Run "prjct init" first.'),process.exitCode=1;else{let q=e.join(__dirname,"..","core","cli","linear.ts"),v=e.join(__dirname,"..","dist","cli","linear.mjs"),D=e.join(__dirname,"..","cli","linear.mjs"),ne,gt;if($.existsSync(q)?(ne=q,gt="bun"):$.existsSync(D)?(ne=D,gt="node"):$.existsSync(v)?(ne=v,gt="node"):(console.error('Linear CLI not found. Run "npm run build" first.'),process.exitCode=1,ne="",gt=""),ne){let Xe=["--project",X,...p.slice(1)];b(gt,[ne,...Xe],{stdio:"inherit",cwd:O}).on("close",qr=>{process.exitCode=qr||0})}}}else if(p[0]==="help"||p[0]==="-h"||p[0]==="--help"){let{getHelp:b}=await Promise.resolve().then(()=>(Ck(),vk)),$=p[1];console.log(b($)),process.exitCode=0}else if(p[0]==="version"||p[0]==="-v"||p[0]==="--version"){let b=await n(S),$=s.homedir(),O=process.cwd(),[X,q,v,D,ne,gt]=await Promise.all([c(e.join($,".claude","commands","p.md")),c(e.join($,".gemini","commands","p.toml")),c(e.join(O,".cursor")),c(e.join(O,".cursor","rules","prjct.mdc")),c(e.join(O,".windsurf")),c(e.join(O,".windsurf","rules","prjct.md"))]);if(console.log(`
1814
+ `)}var Tk=y(()=>{"use strict";wp();xr();pc();ze();it();Mi();$i();_();co();Ie();Yt();l(Vj,"main");l(Bj,"validateCommandParams");l(Jj,"findClosestCommand");l(qj,"editDistance");l(Kj,"parseCommandArgs");l(Xj,"displayVersion");l(Yj,"displayHelp");Vj().catch(s=>{console.error("Fatal error:",w(s)),process.env.DEBUG&&console.error(Zo(s)),process.exit(1)})});globalThis.__perfStartNs=process.hrtime.bigint();var Jr=process.argv.slice(2),xp=Jr.find(s=>!s.startsWith("--")&&!s.startsWith("-")),Zj=new Set(["daemon","stop","restart","start","setup","update","dev","web","serve","context","hooks","doctor","uninstall","watch","linear","help","-h","--help","version","-v","--version"]);if(xp&&!Zj.has(xp)&&process.env.PRJCT_NO_DAEMON!=="1"){let s=await import("node:fs"),{DAEMON_PATHS:e}=await Promise.resolve().then(()=>(Yo(),Ap)),t=e.socket();if(s.existsSync(t)){let{sendRequest:n}=await Promise.resolve().then(()=>(Pn(),xn)),r=await import("node:crypto"),o=[],i={};for(let a=0;a<Jr.length;a++){let c=Jr[a];if(c.startsWith("--")){let u=c.slice(2);if(u.includes("=")){let d=u.indexOf("=");i[u.slice(0,d)]=u.slice(d+1)}else a+1<Jr.length&&!Jr[a+1].startsWith("--")?i[u]=Jr[++a]:i[u]=!0}else c.startsWith("-")&&c.length===2?i[c.slice(1)]=!0:a>0&&o.push(c)}try{let a=await n({id:r.randomUUID(),command:xp,args:o,options:i,cwd:process.cwd(),perfStartNs:globalThis.__perfStartNs?.toString()});a.stdout&&console.log(a.stdout),a.stderr&&console.error(a.stderr),process.exit(a.exitCode)}catch{}}}async function eR(){let s=await import("node:os"),e=await import("node:path"),t=(await import("chalk")).default,{detectAllProviders:n}=await Promise.resolve().then(()=>(ze(),ht)),r=(await Promise.resolve().then(()=>(it(),Qp))).default,o=(await Promise.resolve().then(()=>(_c(),em))).default,{DEFAULT_PORT:i,startServer:a}=await Promise.resolve().then(()=>(dl(),Qm)),{fileExists:c}=await Promise.resolve().then(()=>(Ie(),Pe)),{invalidateProviderCache:u}=await Promise.resolve().then(()=>(Cc(),Up)),{VERSION:d}=await Promise.resolve().then(()=>(ot(),li));async function m(){let b=s.homedir(),$=await n();if($.claude.installed){let O=e.join(b,".claude","commands","p.md");if(!await c(O))return!1}if($.gemini.installed){let O=e.join(b,".gemini","commands","p.toml");if(!await c(O))return!1}return!$.claude.installed&&!$.gemini.installed,!0}l(m,"checkRoutersInstalled");let p=process.argv.slice(2),g=p.findIndex(b=>b==="--quiet"||b==="-q"),h=g!==-1;if(h){p.splice(g,1);let{setQuietMode:b}=await Promise.resolve().then(()=>(Yt(),ng));b(!0)}let k=p.indexOf("--refresh"),S=k!==-1;S&&(p.splice(k,1),await u());async function R(b){let $=Date.now();try{let O=await r.getProjectId(process.cwd());if(O){let{sessionTracker:X}=await Promise.resolve().then(()=>($i(),og));return await X.expireIfStale(O),await X.touch(O),()=>{let q=Date.now()-$;X.trackCommand(O,b,q).catch(()=>{}),Promise.resolve().then(()=>(Mi(),ag)).then(({performanceTracker:v})=>{v.recordTiming(O,"command_duration",q,{command:b}).catch(()=>{}),v.recordMemory(O,{command:b}).catch(()=>{})}).catch(()=>{})}}}catch{}return()=>{}}if(l(R,"trackSession"),p[0]==="daemon"){let b=p[1]||"status";if(b==="start"){let{isDaemonRunning:$,spawnDaemon:O}=await Promise.resolve().then(()=>(Pn(),xn));if(await $())console.log("Daemon is already running."),process.exitCode=0;else if(p.includes("--foreground")||p.includes("-f")){let{startDaemon:q}=await Promise.resolve().then(()=>(zw(),Ww)),v=parseInt(p.find(ne=>ne.startsWith("--port="))?.split("=")[1]||"",10)||void 0,D=p.includes("--no-http");await q({port:v,noHttp:D,foreground:!0})}else await O()?console.log("Daemon started."):(console.error("Failed to start daemon."),process.exitCode=1)}else if(b==="stop"){let{isDaemonRunning:$,stopDaemon:O}=await Promise.resolve().then(()=>(Pn(),xn));if(await $()){let X=await O();console.log(X?"Daemon stopped.":"Failed to stop daemon."),process.exitCode=X?0:1}else console.log("Daemon is not running."),process.exitCode=0}else if(b==="status"){let{getDaemonStatus:$}=await Promise.resolve().then(()=>(Pn(),xn)),O=await $();if(O.running){let X=O.uptime?Math.round(O.uptime/1e3):0,q=O.stale;console.log(`Daemon running (PID ${O.pid})${q?" \u26A0 STALE":""}`),console.log(` Uptime: ${X}s`),console.log(` Commands served: ${O.commandsServed??0}`),O.lastActivity&&console.log(` Last activity: ${O.lastActivity}`),q&&console.log(` ${t.yellow("\u26A0 Code changed since daemon started. Run: prjct restart")}`)}else console.log("Daemon is not running.");process.exitCode=0}else console.error(`Unknown daemon command: ${b}. Use: start, stop, status`),process.exitCode=1}else if(p[0]==="stop"){let{isDaemonRunning:b,stopDaemon:$,forceKillDaemon:O}=await Promise.resolve().then(()=>(Pn(),xn));if(p.includes("--force")||p.includes("-f")){let q=O();console.log(q?"Daemon force-killed.":"Daemon is not running."),process.exitCode=0}else await b()?await $()?(console.log("Daemon stopped."),process.exitCode=0):(console.log("Graceful stop failed, force-killing..."),O(),console.log("Daemon force-killed."),process.exitCode=0):(O(),console.log("Daemon is not running (cleaned up stale files)."),process.exitCode=0)}else if(p[0]==="restart"){let{isDaemonRunning:b,stopDaemon:$,forceKillDaemon:O,spawnDaemon:X}=await Promise.resolve().then(()=>(Pn(),xn));await b()?(await $()||O(),await new Promise(D=>setTimeout(D,300))):O(),await X()?(console.log("Daemon restarted."),process.exitCode=0):(console.error("Failed to restart daemon."),process.exitCode=1)}else if(p[0]==="start"||p[0]==="setup"){let{runStart:b}=await Promise.resolve().then(()=>(qw(),Jw));await b()}else if(p[0]==="dev")console.log("Dev mode is not yet implemented."),console.log('Use "prjct serve" to start the web server.'),process.exitCode=0;else if(p[0]==="web"||p[0]==="serve")try{let b=process.cwd(),$=await r.getProjectId(b);if(!$)console.error('No prjct project found. Run "prjct init" first.'),process.exitCode=1;else{let O=parseInt(p[1],10)||i;await a($,b,O)}}catch(b){console.error("Server error:",b.message),process.exitCode=1}else if(p[0]==="context"){let b=process.cwd(),$=await r.getProjectId(b);if(!$)console.error('No prjct project found. Run "prjct init" first.'),process.exitCode=1;else{let O=await R("context"),{runContextTool:X}=await Promise.resolve().then(()=>(rk(),sk)),q=await X(p.slice(1),$,b);console.log(JSON.stringify(q,null,2)),process.exitCode=q.tool==="error"?1:0,O()}}else if(p[0]==="hooks"){let b=await R("hooks"),{hooksService:$}=await Promise.resolve().then(()=>(lk(),ck)),O=p[1]||"status",X=await $.run(process.cwd(),O);process.exitCode=X,b()}else if(p[0]==="doctor"){let b=await R("doctor"),{doctorService:$}=await Promise.resolve().then(()=>(mk(),pk)),O=await $.run(process.cwd());process.exitCode=O,b()}else if(p[0]==="uninstall"){let{uninstall:b}=await Promise.resolve().then(()=>(yp(),Nw)),$=p.includes("--force")||p.includes("-f"),O=p.includes("--backup")||p.includes("-b"),X=p.includes("--dry-run")||p.includes("-n"),q=p.includes("--keep-package"),v=await b({force:$,backup:O,dryRun:X,keepPackage:q});process.exitCode=v.success?0:1}else if(p[0]==="watch"){let b=process.cwd();if(!await r.getProjectId(b))console.error('No prjct project found. Run "prjct init" first.'),process.exitCode=1;else{let{watchService:O}=await Promise.resolve().then(()=>(fk(),gk)),X=p.includes("--verbose")||p.includes("-v"),q=p.find(Xe=>Xe.startsWith("--debounce=")),v=q?parseInt(q.split("=")[1],10):void 0,D=p.find(Xe=>Xe.startsWith("--interval=")),ne=D?parseInt(D.split("=")[1],10)*1e3:void 0,gt=await O.start(b,{verbose:X,quiet:h,debounceMs:v,minIntervalMs:ne});gt.success||(console.error(gt.error),process.exitCode=1)}}else if(p[0]==="linear"){let{spawn:b}=await import("node:child_process"),$=await import("node:fs"),O=process.cwd(),X=await r.getProjectId(O);if(!X)console.error('No prjct project found. Run "prjct init" first.'),process.exitCode=1;else{let q=e.join(__dirname,"..","core","cli","linear.ts"),v=e.join(__dirname,"..","dist","cli","linear.mjs"),D=e.join(__dirname,"..","cli","linear.mjs"),ne,gt;if($.existsSync(q)?(ne=q,gt="bun"):$.existsSync(D)?(ne=D,gt="node"):$.existsSync(v)?(ne=v,gt="node"):(console.error('Linear CLI not found. Run "npm run build" first.'),process.exitCode=1,ne="",gt=""),ne){let Xe=["--project",X,...p.slice(1)];b(gt,[ne,...Xe],{stdio:"inherit",cwd:O}).on("close",qr=>{process.exitCode=qr||0})}}}else if(p[0]==="help"||p[0]==="-h"||p[0]==="--help"){let{getHelp:b}=await Promise.resolve().then(()=>(Ck(),vk)),$=p[1];console.log(b($)),process.exitCode=0}else if(p[0]==="version"||p[0]==="-v"||p[0]==="--version"){let b=await n(S),$=s.homedir(),O=process.cwd(),[X,q,v,D,ne,gt]=await Promise.all([c(e.join($,".claude","commands","p.md")),c(e.join($,".gemini","commands","p.toml")),c(e.join(O,".cursor")),c(e.join(O,".cursor","rules","prjct.mdc")),c(e.join(O,".windsurf")),c(e.join(O,".windsurf","rules","prjct.md"))]);if(console.log(`
1815
1815
  ${t.cyan("p/")} prjct v${d}
1816
1816
  ${t.dim("Context layer for AI coding agents")}
1817
1817
 
@@ -3,7 +3,7 @@ import{connect}from"node:net";import{existsSync}from"node:fs";import{randomUUID}
3
3
  const sockPath=homedir()+"/.prjct-cli/run/daemon.sock";
4
4
  const args=process.argv.slice(2);
5
5
  const cmd=args.find(a=>!a.startsWith("-"));
6
- const skip=new Set(["daemon","start","setup","dev","web","serve","context","hooks","doctor","uninstall","watch","linear","help","-h","--help","version","-v","--version"]);
6
+ const skip=new Set(["daemon","start","setup","update","dev","web","serve","context","hooks","doctor","uninstall","watch","linear","help","-h","--help","version","-v","--version"]);
7
7
  if(cmd&&!skip.has(cmd)&&process.env.PRJCT_NO_DAEMON!=="1"&&existsSync(sockPath)){
8
8
  const cArgs=[],cOpts={};
9
9
  for(let i=0;i<args.length;i++){const a=args[i];if(a.startsWith("--")){const r=a.slice(2);if(r.includes("=")){const e=r.indexOf("=");cOpts[r.slice(0,e)]=r.slice(e+1)}else if(i+1<args.length&&!args[i+1].startsWith("--")){cOpts[r]=args[++i]}else{cOpts[r]=true}}else if(a.startsWith("-")&&a.length===2){cOpts[a.slice(1)]=true}else if(i>0){cArgs.push(a)}}
@@ -1544,4 +1544,4 @@ Uninstall cancelled.`)),{success:!1,message:"Uninstall cancelled by user"};conso
1544
1544
  ${a.length} errors:`));for(let c of a)console.log(Ce.red(` - ${c}`))}return console.log(""),console.log(Ce.green("prjct has been uninstalled.")),console.log(Ce.dim("Thanks for using prjct! We hope to see you again.")),console.log(""),{success:a.length===0,message:`Removed ${i.length} items`,deleted:i,errors:a.length>0?a:void 0}}l(QT,"uninstall");var ua=class extends Pe{static{l(this,"UninstallCommands")}async uninstall(e={},t=process.cwd()){return QT(e,t)}};var ps=new er,da=new ss,ZT=new qs,ty=new zs,eE=new Bs,tr=new Vs,nr=new ls,ny=new Js,tE=new us,nE=new Xs,sE=new ua,rE=new Ks;function oE(){for(let[r,e]of Object.entries(Xh))B.registerCategory(r,e)}l(oE,"registerCategories");function sy(){if(B.has("work"))return;oE();let r=l(e=>Yh.find(t=>t.name===e),"getMeta");B.registerMethod("task",ps,"now",r("task")),B.registerMethod("done",ps,"done",r("done")),B.registerMethod("next",ps,"next",r("next")),B.registerMethod("pause",ps,"pause",r("pause")),B.registerMethod("resume",ps,"resume",r("resume")),B.registerMethod("workflow",ps,"workflow",r("workflow")),B.registerMethod("sessions",ps,"sessions",r("sessions")),B.registerMethod("init",da,"init",r("init")),B.registerMethod("bug",da,"bug",r("bug")),B.registerMethod("idea",da,"idea",r("idea")),B.registerMethod("spec",da,"spec",r("spec")),B.registerMethod("ship",ZT,"ship",r("ship")),B.registerMethod("dash",ty,"dash",r("dash")),B.registerMethod("help",ty,"help",r("help")),B.registerMethod("perf",eE,"perf",r("perf")),B.registerMethod("velocity",nE,"velocity",r("velocity")),B.registerMethod("cleanup",tr,"cleanup",r("cleanup")),B.registerMethod("design",tr,"design",r("design")),B.registerMethod("recover",tr,"recover",r("recover")),B.registerMethod("undo",tr,"undo",r("undo")),B.registerMethod("redo",tr,"redo",r("redo")),B.registerMethod("history",tr,"history",r("history")),B.registerMethod("analyze",nr,"analyze",r("analyze")),B.registerMethod("sync",nr,"sync",r("sync")),B.registerMethod("stats",nr,"stats",r("stats")),B.registerMethod("status",nr,"status",r("status")),B.registerMethod("seal",nr,"seal",r("seal")),B.registerMethod("verify",nr,"verify",r("verify")),B.registerMethod("start",ny,"start",r("start")),B.registerMethod("setup",ny,"setup",r("setup")),B.registerMethod("uninstall",sE,"uninstall",r("uninstall")),B.registerMethod("update",rE,"update",r("update")),B.registerMethod("context",tE,"context",r("context"))}l(sy,"registerAllCommands");sy();Et();Ea();Ft();import{Hono as hE}from"hono";import{cors as yE}from"hono/cors";import{logger as wE}from"hono/logger";Se();te();Dr();Is();$r();Ds();_();An();import iE from"node:fs/promises";import aE from"node:path";import{Hono as cE}from"hono";function lE(r){return x.getGlobalProjectPath(r)}l(lE,"getProjectDataPath");function ry(r,e){let t=new cE,n=lE(r);return t.get("/state",async s=>{let o=await N.read(r);return s.json(o)}),t.get("/queue",async s=>{let o=await ye.read(r);return s.json(o)}),t.get("/ideas",async s=>{let o=await Ye.read(r);return s.json(o)}),t.get("/roadmap",async s=>{let o=A.getDoc(r,"roadmap");return o?s.json(o):s.json({features:[],backlog:[],lastUpdated:""})}),t.get("/shipped",async s=>{let o=await ht.read(r);return s.json(o)}),t.get("/dashboard",async s=>{let[o,i,a,c]=await Promise.all([N.read(r),ye.read(r),Ye.read(r),ht.read(r)]),u=A.getDoc(r,"roadmap");return s.json({projectId:r,state:o,queue:i,ideas:a,roadmap:u||{features:[],backlog:[],lastUpdated:""},shipped:c,timestamp:new Date().toISOString()})}),t.post("/state",async s=>{try{let o=await s.req.json();return await N.write(r,o),s.json({success:!0})}catch(o){return s.json({success:!1,error:String(o)},400)}}),t.get("/context/:name",async s=>{let o=s.req.param("name");if(!["now","next","ideas","shipped"].includes(o))return s.json({error:"Invalid context file"},400);try{let a=aE.join(n,"context",`${o}.md`),c=await iE.readFile(a,"utf-8");return s.text(c,200,{"Content-Type":"text/markdown"})}catch(a){return C(a)||U.error(`Context read error: ${y(a)}`),s.text("",200,{"Content-Type":"text/markdown"})}}),t}l(ry,"createRoutes");Se();te();Dr();Is();$r();Ds();import sr from"node:fs/promises";import uE from"node:path";import{Hono as dE}from"hono";var pE=x.getGlobalBasePath(),rr=uE.join(pE,"projects");function pa(r){return A.getDoc(r,"project")}l(pa,"getProjectConfig");async function Ju(r){if(!r)return"";let e=new Date(r),n=new Date().getTime()-e.getTime(),s=Math.floor(n/(1e3*60*60)),o=Math.floor(n%(1e3*60*60)/(1e3*60));return s>0?`${s}h ${o}m`:`${o}m`}l(Ju,"calculateDuration");function oy(){let r=new dE;return r.get("/projects",async e=>{try{await sr.mkdir(rr,{recursive:!0});let n=(await sr.readdir(rr,{withFileTypes:!0})).filter(o=>o.isDirectory()).map(o=>o.name),s=await Promise.all(n.map(async o=>{let i=pa(o),a=await N.read(o),c=await ye.read(o),u=await Ye.read(o),d=await ht.read(o),m=a?.currentTask,p=await Ju(m?.startedAt);return{id:o,name:i?.name||o.slice(0,8),path:i?.path||null,currentTask:m?{...m,duration:p}:null,pausedTask:a?.previousTask||null,stats:{queueCount:c?.tasks?.filter(g=>!g.completed)?.length||0,ideasCount:u?.ideas?.filter(g=>g.status==="pending")?.length||0,shippedCount:d?.shipped?.length||0}}}));return s.sort((o,i)=>o.currentTask&&!i.currentTask?-1:!o.currentTask&&i.currentTask?1:(o.name||"").localeCompare(i.name||"")),e.json({projects:s})}catch(t){return e.json({projects:[],error:String(t)},500)}}),r.get("/projects/:id/full",async e=>{let t=e.req.param("id");try{let[n,s,o,i,a]=await Promise.all([Promise.resolve(pa(t)),N.read(t),ye.read(t),Ye.read(t),ht.read(t)]),c=A.getDoc(t,"roadmap");s?.currentTask?.startedAt&&(s.currentTask.duration=await Ju(s.currentTask.startedAt));let u=new Date,d=new Date(u.getFullYear(),u.getMonth(),u.getDate()),m=new Date(d);m.setDate(m.getDate()-m.getDay());let p=o?.tasks?.filter(f=>!f.completed||!f.completedAt?!1:new Date(f.completedAt)>=d)?.length||0,g=o?.tasks?.filter(f=>!f.completed||!f.completedAt?!1:new Date(f.completedAt)>=m)?.length||0;return e.json({id:t,name:n?.name||t,path:n?.path,state:s||{currentTask:null,previousTask:null,lastUpdated:""},queue:o||{tasks:[],lastUpdated:""},ideas:i||{ideas:[],lastUpdated:""},shipped:a||{shipped:[],lastUpdated:""},roadmap:c||{features:[],backlog:[],lastUpdated:""},stats:{tasksToday:p,tasksThisWeek:g,queueCount:o?.tasks?.filter(f=>!f.completed)?.length||0,ideasCount:i?.ideas?.filter(f=>f.status==="pending")?.length||0,shippedCount:a?.shipped?.length||0},timestamp:new Date().toISOString()})}catch(n){return e.json({error:String(n)},500)}}),r.post("/projects/:id/task/complete",async e=>{let t=e.req.param("id");try{let n=await N.read(t);if(!n?.currentTask)return e.json({success:!1,error:"No active task"},400);let s=n.currentTask,o={currentTask:null,previousTask:null,lastUpdated:new Date().toISOString()};return await N.write(t,o),e.json({success:!0,completedTask:s,message:`Completed: ${s.description}`})}catch(n){return e.json({success:!1,error:String(n)},500)}}),r.post("/projects/:id/task/pause",async e=>{let t=e.req.param("id");try{let s=(await e.req.json().catch(()=>({}))).reason,o=await N.read(t);if(!o?.currentTask)return e.json({success:!1,error:"No active task"},400);let i={id:o.currentTask.id,description:o.currentTask.description,status:"paused",startedAt:o.currentTask.startedAt,pausedAt:new Date().toISOString(),pauseReason:s},a={currentTask:null,previousTask:i,lastUpdated:new Date().toISOString()};return await N.write(t,a),e.json({success:!0,pausedTask:i,message:`Paused: ${i.description}`})}catch(n){return e.json({success:!1,error:String(n)},500)}}),r.post("/projects/:id/task/resume",async e=>{let t=e.req.param("id");try{let n=await N.read(t);if(!n?.previousTask)return e.json({success:!1,error:"No paused task"},400);let s={id:n.previousTask.id,description:n.previousTask.description,status:"active",startedAt:new Date().toISOString(),sessionId:`sess_${Date.now().toString(36)}`},o={currentTask:s,previousTask:null,lastUpdated:new Date().toISOString()};return await N.write(t,o),e.json({success:!0,resumedTask:s,message:`Resumed: ${s.description}`})}catch(n){return e.json({success:!1,error:String(n)},500)}}),r.post("/projects/:id/queue/start",async e=>{let t=e.req.param("id");try{let n=await e.req.json(),{taskId:s}=n;if(!s)return e.json({success:!1,error:"taskId required"},400);let[o,i]=await Promise.all([N.read(t),ye.read(t)]);if(o?.currentTask)return e.json({success:!1,error:"Complete or pause current task first"},400);let a=i?.tasks?.find(d=>d.id===s);if(!a)return e.json({success:!1,error:"Task not found in queue"},404);let c={id:a.id,description:a.description,status:"active",startedAt:new Date().toISOString(),sessionId:`sess_${Date.now().toString(36)}`,featureId:a.featureId},u={currentTask:c,previousTask:null,lastUpdated:new Date().toISOString()};return await N.write(t,u),e.json({success:!0,task:c,message:`Started: ${c.description}`})}catch(n){return e.json({success:!1,error:String(n)},500)}}),r.post("/projects/:id/ideas",async e=>{let t=e.req.param("id");try{let n=await e.req.json(),{text:s,priority:o="medium",tags:i=[]}=n;if(!s)return e.json({success:!1,error:"text required"},400);let a=await Ye.addIdea(t,s,{priority:o||"medium",tags:i});return e.json({success:!0,idea:a,message:`Captured: ${s.slice(0,50)}...`})}catch(n){return e.json({success:!1,error:String(n)},500)}}),r.get("/stats/global",async e=>{try{await sr.mkdir(rr,{recursive:!0});let n=(await sr.readdir(rr,{withFileTypes:!0})).filter(c=>c.isDirectory()).map(c=>c.name),s=0,o=0,i=0,a=0;for(let c of n){let u=await N.read(c),d=await ye.read(c),m=await Ye.read(c),p=await ht.read(c);u?.currentTask&&a++,s+=d?.tasks?.filter(g=>!g.completed)?.length||0,o+=m?.ideas?.filter(g=>g.status==="pending")?.length||0,i+=p?.shipped?.length||0}return e.json({totalProjects:n.length,activeProjects:a,totalTasks:s,totalIdeas:o,totalShipped:i,timestamp:new Date().toISOString()})}catch(t){return e.json({error:String(t)},500)}}),r.get("/status-bar/compact",async e=>{try{let t=e.req.query("cwd");await sr.mkdir(rr,{recursive:!0});let s=(await sr.readdir(rr,{withFileTypes:!0})).filter(d=>d.isDirectory()).map(d=>d.name),o=null;if(t)for(let d of s){let m=pa(d),p=m?.repoPath||m?.path;if(p&&t.startsWith(p)){o=d;break}}let i=null,a=null,c=null,u=o?[o]:s;for(let d of u){let m=await N.read(d),p=pa(d);if(m?.currentTask){i={id:d,name:p?.name||d,path:p?.repoPath||p?.path},a={...m.currentTask,duration:await Ju(m.currentTask.startedAt)};break}m?.previousTask&&!c&&(i={id:d,name:p?.name||d,path:p?.repoPath||p?.path},c=m.previousTask)}return e.json({hasActiveTask:!!a,hasPausedTask:!!c,activeProject:i,activeTask:a,pausedTask:c,totalProjects:s.length,filtered:!!o,cwd:t||null,timestamp:new Date().toISOString()})}catch(t){return e.json({error:String(t)},500)}}),r}l(oy,"createExtendedRoutes");ha();import{streamSSE as mE}from"hono/streaming";var iy=3600*1e3,gE=300*1e3,fE=3e4;function ay(){let r=new Map,e=null;function t(o){let i=r.get(o);i&&(clearInterval(i.heartbeatInterval),clearTimeout(i.ttlTimeout),i.abortController.abort(),r.delete(o))}l(t,"removeClient");function n(){e||(e=setInterval(()=>{let o=Date.now();for(let[i,a]of r)o-new Date(a.client.connectedAt).getTime()>iy&&t(i)},gE),e&&typeof e=="object"&&"unref"in e&&e.unref())}l(n,"startReaper");function s(){e&&(clearInterval(e),e=null)}return l(s,"stopReaper"),n(),{handleConnection(o){return mE(o,async i=>{let a=crypto.randomUUID(),c=new Date().toISOString(),u=new AbortController,d={id:a,connectedAt:c,send:l((g,f)=>{i.writeSSE({event:g,data:JSON.stringify(f)})},"send"),close:l(()=>{t(a)},"close")},m=setInterval(async()=>{try{await i.writeSSE({event:"heartbeat",data:JSON.stringify({timestamp:new Date().toISOString()})})}catch{t(a)}},fE),p=setTimeout(()=>{t(a)},iy);typeof m=="object"&&"unref"in m&&m.unref(),typeof p=="object"&&"unref"in p&&p.unref(),r.set(a,{client:d,heartbeatInterval:m,ttlTimeout:p,abortController:u}),await i.writeSSE({event:"connected",data:JSON.stringify({clientId:a,timestamp:c,message:"Connected to prjct-cli server"})}),i.onAbort(()=>{t(a)}),await new Promise(g=>{u.signal.addEventListener("abort",()=>g(),{once:!0})})})},broadcast(o,i){let a={event:o,data:i,timestamp:new Date().toISOString()};for(let[c,u]of r)try{u.client.send(o,a)}catch{t(c)}},getClientCount(){return r.size},shutdown(){s();for(let o of[...r.keys()])t(o)}}}l(ay,"createSSEManager");function cy(r){let e=new hE,t=ay();r.enableCors!==!1&&e.use("*",yE({origin:"*",allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization"]})),r.enableLogging!==!1&&e.use("*",wE()),e.get("/health",i=>i.json({status:"ok",timestamp:new Date().toISOString()})),e.get("/",i=>i.json({name:"prjct-cli",version:Fe,projectId:r.projectId,endpoints:{health:"/health",state:"/api/state",queue:"/api/queue",ideas:"/api/ideas",roadmap:"/api/roadmap",shipped:"/api/shipped",events:"/api/events",projects:"/api/projects",projectFull:"/api/projects/:id/full",statusBarCompact:"/api/status-bar/compact",globalStats:"/api/stats/global"}}));let n=ry(r.projectId,r.projectPath);e.route("/api",n);let s=oy();e.route("/api",s),e.get("/api/events",i=>t.handleConnection(i));let o=null;return{app:e,async start(){let i=r.port,a=r.host||"0.0.0.0";if(mr())o=Bun.serve({port:i,hostname:a,fetch:e.fetch});else{let{serve:c}=await import("@hono/node-server"),u=c({fetch:e.fetch,port:i,hostname:a});o={stop:l(()=>u.close(),"stop")}}console.log(`\u{1F680} prjct server running at http://${a}:${i}`),console.log(` Project: ${r.projectId}`),console.log(` Runtime: ${mr()?"Bun":"Node.js"}`),console.log(` Dashboard: http://localhost:${i}`)},stop(){t.shutdown(),o&&(o.stop(),o=null,console.log("Server stopped"))},broadcast(i,a){t.broadcast(i,a)}}}l(cy,"createServer");var ly=3478;Lu();var or=null,so=null,ge=null,Te=null;async function uy(r){let e=Le.socket(),t=Le.pid(),n=Le.runDir();if(Ke.mkdirSync(n,{recursive:!0}),Ke.existsSync(t)){let i=parseInt(Ke.readFileSync(t,"utf-8").trim(),10);vE(i)&&(console.error(`Daemon already running (PID ${i})`),process.exit(1)),Ke.unlinkSync(t)}Ke.existsSync(e)&&Ke.unlinkSync(e);let s=xE(),o=null;if(s)try{o=Ke.statSync(s).mtimeMs}catch{}if(Te={startedAt:Date.now(),commandsServed:0,lastActivity:Date.now(),idleTimeoutMs:Nh,idleTimer:null,entryPath:s,entryMtime:o},ge=new ds,or=kE(i=>SE(i)),or.listen(e,()=>{Ke.chmodSync(e,384),Ke.writeFileSync(t,String(process.pid)),console.log(`prjct daemon started (PID ${process.pid})`),console.log(` Socket: ${e}`),s&&console.log(` Watching: ${s}`),dy()}),or.on("error",i=>{console.error("Daemon socket error:",i.message),ir(1)}),!r.noHttp)try{let i=process.cwd(),a=await $.getProjectId(i);if(a){let c=r.port||ly;so=cy({port:c,projectId:a,projectPath:i,enableLogging:!1}),await so.start()}}catch{}if(process.on("SIGTERM",()=>ir(0)),process.on("SIGINT",()=>ir(0)),process.on("SIGHUP",()=>{ge=new ds,console.log("Daemon reloaded (SIGHUP)")}),!r.foreground)try{process.stdin?.unref?.()}catch{}}l(uy,"startDaemon");function SE(r){let e="";r.on("data",async t=>{e+=t.toString();let n;for(;(n=e.indexOf(`
1545
1545
  `))!==-1;){let s=e.slice(0,n);if(e=e.slice(n+1),!!s.trim())try{let o=JSON.parse(s),i=await bE(o);r.write(Qr(i))}catch(o){let i={id:"unknown",success:!1,exitCode:1,stderr:`Protocol error: ${o.message}`};r.write(Qr(i))}}}),r.on("error",()=>{})}l(SE,"handleConnection");async function bE(r){if(!Te||!ge)return{id:r.id,success:!1,exitCode:1,stderr:"Daemon not initialized"};if(dy(),Te.commandsServed++,Te.lastActivity=Date.now(),py()&&(console.log("Build changed detected \u2014 daemon will restart after this request"),setTimeout(()=>{console.log("Daemon shutting down for code reload..."),ir(0)},200)),r.command==="daemon")return CE(r);if(r.command==="__ping")return{id:r.id,success:!0,exitCode:0,result:{pong:!0,pid:process.pid}};try{let e=[],t=[],n=console.log,s=console.error;console.log=(...o)=>e.push(o.map(String).join(" ")),console.error=(...o)=>t.push(o.map(String).join(" "));try{let o=await PE(r);return{id:r.id,success:o.success,exitCode:o.success?0:1,stdout:e.join(`
1546
1546
  `)||o.message||void 0,stderr:t.join(`
1547
- `)||o.error||void 0,result:o}}finally{console.log=n,console.error=s}}catch(e){return{id:r.id,success:!1,exitCode:1,stderr:e.message}}}l(bE,"handleRequest");async function PE(r){let e=r.args.join(" ")||null,t=r.options,n=t.md===!0;switch(r.command){case"sync":return ge.sync(r.cwd,{aiTools:t.agents?String(t.agents).split(","):void 0,preview:t.preview===!0||t["dry-run"]===!0,yes:t.yes===!0,json:t.json===!0,md:n,package:t.package?String(t.package):void 0,full:t.full===!0});case"status":return ge.status(r.cwd,{json:t.json===!0,md:n});case"stats":return ge.stats(r.cwd,{json:t.json===!0,export:t.export===!0});case"diff":return ge.diff(r.cwd,{json:t.json===!0,md:n});case"seal":return ge.seal(r.cwd,{json:t.json===!0});case"rollback":return ge.rollback(r.cwd,{json:t.json===!0,md:n});case"verify":return ge.verify(r.cwd,{json:t.json===!0,semantic:t.semantic===!0});case"task":return ge.task(e,r.cwd,{md:n});case"done":return ge.done(r.cwd,{md:n});case"next":return ge.next(r.cwd,{md:n});case"pause":return ge.pause(e||"",r.cwd,{md:n});case"resume":return ge.resume(e,r.cwd,{md:n});case"bug":return ge.bug(e||"",r.cwd,{md:n});case"idea":return ge.idea(e||"",r.cwd,{md:n});case"ship":return ge.ship(e,r.cwd,{md:n});case"dash":return ge.dash(e||"default",r.cwd,{md:n});case"workflow":return ge.workflowPrefs(e,r.cwd,{md:n});case"sessions":return ge.sessions(r.cwd,{md:n,cleanup:t.cleanup===!0});case"design":return ge.design(e||"",t);case"analysis-payload":return ge.analysisPayload(r.cwd,{json:t.json===!0,md:n});case"analysis-save-llm":return ge.saveLlmAnalysis(e||"",r.cwd,{md:n});case"analysis-llm":return ge.getLlmAnalysis(r.cwd,{json:t.json===!0,md:n});case"analyze":return ge.analyze(t);case"cleanup":return ge.cleanup(t);default:return B.execute(r.command,e,r.cwd)}}l(PE,"executeCommand");function CE(r){let e=r.args[0];if(e==="status")return{id:r.id,success:!0,exitCode:0,result:{running:!0,pid:process.pid,socketPath:Le.socket(),uptime:Te?Date.now()-Te.startedAt:0,commandsServed:Te?.commandsServed??0,lastActivity:Te?new Date(Te.lastActivity).toISOString():null,registeredCommands:B.list().length,stale:py()}};if(e==="stop"){let t={id:r.id,success:!0,exitCode:0,stdout:"Daemon stopping..."};return setTimeout(()=>ir(0),100),t}return{id:r.id,success:!1,exitCode:1,stderr:`Unknown daemon command: ${e}. Use: status, stop`}}l(CE,"handleDaemonCommand");function dy(){Te&&(Te.idleTimer&&clearTimeout(Te.idleTimer),Te.idleTimer=setTimeout(()=>{console.log(`Daemon idle for ${Te.idleTimeoutMs/1e3/60} minutes, shutting down`),ir(0)},Te.idleTimeoutMs),Te.idleTimer.unref&&Te.idleTimer.unref())}l(dy,"resetIdleTimer");function ir(r){console.log("Daemon shutting down..."),Te?.idleTimer&&clearTimeout(Te.idleTimer),so&&(so.stop(),so=null),or&&(or.close(),or=null);let e=Le.socket(),t=Le.pid();try{Ke.existsSync(e)&&Ke.unlinkSync(e)}catch{}try{Ke.existsSync(t)&&Ke.unlinkSync(t)}catch{}process.exit(r)}l(ir,"shutdown");function vE(r){try{return process.kill(r,0),!0}catch{return!1}}l(vE,"isProcessRunning");function xE(){let r=hn("node:path"),e=__dirname;for(let s=0;s<5;s++){if(Ke.existsSync(r.join(e,"package.json"))){let o=r.join(e,"dist","daemon","entry.mjs");if(Ke.existsSync(o))return o;break}e=r.dirname(e)}let t=[r.join(__dirname,"..","daemon","entry.mjs"),r.join(__dirname,"..","dist","daemon","entry.mjs")];for(let s of t)if(Ke.existsSync(s))return s;let n=process.argv[1];return n&&Ke.existsSync(n)?n:null}l(xE,"resolveEntryPath");function py(){if(!Te?.entryPath||Te.entryMtime===null)return!1;try{return Ke.statSync(Te.entryPath).mtimeMs!==Te.entryMtime}catch{return!1}}l(py,"isCodeStale");var qu=process.argv.slice(2),TE=parseInt(qu.find(r=>r.startsWith("--port="))?.split("=")[1]||"",10)||void 0,EE=qu.includes("--no-http"),AE=qu.includes("--foreground");uy({port:TE,noHttp:EE,foreground:AE}).catch(r=>{console.error("Failed to start daemon:",r.message),process.exit(1)});
1547
+ `)||o.error||void 0,result:o}}finally{console.log=n,console.error=s}}catch(e){return{id:r.id,success:!1,exitCode:1,stderr:e.message}}}l(bE,"handleRequest");async function PE(r){let e=r.args.join(" ")||null,t=r.options,n=t.md===!0;switch(r.command){case"sync":return ge.sync(r.cwd,{aiTools:t.agents?String(t.agents).split(","):void 0,preview:t.preview===!0||t["dry-run"]===!0,yes:t.yes===!0,json:t.json===!0,md:n,package:t.package?String(t.package):void 0,full:t.full===!0});case"status":return ge.status(r.cwd,{json:t.json===!0,md:n});case"stats":return ge.stats(r.cwd,{json:t.json===!0,export:t.export===!0});case"diff":return ge.diff(r.cwd,{json:t.json===!0,md:n});case"seal":return ge.seal(r.cwd,{json:t.json===!0});case"rollback":return ge.rollback(r.cwd,{json:t.json===!0,md:n});case"verify":return ge.verify(r.cwd,{json:t.json===!0,semantic:t.semantic===!0});case"task":return ge.task(e,r.cwd,{md:n});case"done":return ge.done(r.cwd,{md:n});case"next":return ge.next(r.cwd,{md:n});case"pause":return ge.pause(e||"",r.cwd,{md:n});case"resume":return ge.resume(e,r.cwd,{md:n});case"bug":return ge.bug(e||"",r.cwd,{md:n});case"idea":return ge.idea(e||"",r.cwd,{md:n});case"ship":return ge.ship(e,r.cwd,{md:n});case"dash":return ge.dash(e||"default",r.cwd,{md:n});case"workflow":return ge.workflowPrefs(e,r.cwd,{md:n});case"sessions":return ge.sessions(r.cwd,{md:n,cleanup:t.cleanup===!0});case"design":return ge.design(e||"",t,r.cwd);case"analysis-payload":return ge.analysisPayload(r.cwd,{json:t.json===!0,md:n});case"analysis-save-llm":return ge.saveLlmAnalysis(e||"",r.cwd,{md:n});case"analysis-llm":return ge.getLlmAnalysis(r.cwd,{json:t.json===!0,md:n});case"analyze":return ge.analyze(t,r.cwd);case"cleanup":return ge.cleanup(t,r.cwd);default:return B.execute(r.command,e,r.cwd)}}l(PE,"executeCommand");function CE(r){let e=r.args[0];if(e==="status")return{id:r.id,success:!0,exitCode:0,result:{running:!0,pid:process.pid,socketPath:Le.socket(),uptime:Te?Date.now()-Te.startedAt:0,commandsServed:Te?.commandsServed??0,lastActivity:Te?new Date(Te.lastActivity).toISOString():null,registeredCommands:B.list().length,stale:py()}};if(e==="stop"){let t={id:r.id,success:!0,exitCode:0,stdout:"Daemon stopping..."};return setTimeout(()=>ir(0),100),t}return{id:r.id,success:!1,exitCode:1,stderr:`Unknown daemon command: ${e}. Use: status, stop`}}l(CE,"handleDaemonCommand");function dy(){Te&&(Te.idleTimer&&clearTimeout(Te.idleTimer),Te.idleTimer=setTimeout(()=>{console.log(`Daemon idle for ${Te.idleTimeoutMs/1e3/60} minutes, shutting down`),ir(0)},Te.idleTimeoutMs),Te.idleTimer.unref&&Te.idleTimer.unref())}l(dy,"resetIdleTimer");function ir(r){console.log("Daemon shutting down..."),Te?.idleTimer&&clearTimeout(Te.idleTimer),so&&(so.stop(),so=null),or&&(or.close(),or=null);let e=Le.socket(),t=Le.pid();try{Ke.existsSync(e)&&Ke.unlinkSync(e)}catch{}try{Ke.existsSync(t)&&Ke.unlinkSync(t)}catch{}process.exit(r)}l(ir,"shutdown");function vE(r){try{return process.kill(r,0),!0}catch{return!1}}l(vE,"isProcessRunning");function xE(){let r=hn("node:path"),e=__dirname;for(let s=0;s<5;s++){if(Ke.existsSync(r.join(e,"package.json"))){let o=r.join(e,"dist","daemon","entry.mjs");if(Ke.existsSync(o))return o;break}e=r.dirname(e)}let t=[r.join(__dirname,"..","daemon","entry.mjs"),r.join(__dirname,"..","dist","daemon","entry.mjs")];for(let s of t)if(Ke.existsSync(s))return s;let n=process.argv[1];return n&&Ke.existsSync(n)?n:null}l(xE,"resolveEntryPath");function py(){if(!Te?.entryPath||Te.entryMtime===null)return!1;try{return Ke.statSync(Te.entryPath).mtimeMs!==Te.entryMtime}catch{return!1}}l(py,"isCodeStale");var qu=process.argv.slice(2),TE=parseInt(qu.find(r=>r.startsWith("--port="))?.split("=")[1]||"",10)||void 0,EE=qu.includes("--no-http"),AE=qu.includes("--foreground");uy({port:TE,noHttp:EE,foreground:AE}).catch(r=>{console.error("Failed to start daemon:",r.message),process.exit(1)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prjct-cli",
3
- "version": "1.42.0",
3
+ "version": "1.42.2",
4
4
  "description": "Context layer for AI agents. Project context for Claude Code, Gemini CLI, and more.",
5
5
  "main": "dist/bin/prjct.mjs",
6
6
  "bin": {