prjct-cli 1.42.0 → 1.42.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
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.42.1] - 2026-02-15
4
+
5
+ ### Bug Fixes
6
+
7
+ - daemon commands ignore request.cwd causing cross-project contamination (#199)
8
+ - pass request.cwd to analyze/cleanup/design in daemon
9
+
10
+
11
+ ## [1.42.1] - 2026-02-15
12
+
13
+ ### Bug Fixes
14
+ - fix: daemon analyze/cleanup/design commands ignore request.cwd causing cross-project contamination
15
+
3
16
  ## [1.42.0] - 2026-02-15
4
17
 
5
18
  ### Features
@@ -8,7 +21,6 @@
8
21
  - add task estimation service
9
22
  - onboarding tours + help tooltips + stats grid redesign
10
23
 
11
-
12
24
  ## [1.41.1] - 2026-02-15
13
25
 
14
26
  ### 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.1",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
 
@@ -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.1",
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": {