prjct-cli 1.42.1 → 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 +12 -0
- package/dist/bin/prjct-core.mjs +2 -2
- package/dist/bin/prjct.mjs +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
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
|
+
|
|
3
15
|
## [1.42.1] - 2026-02-15
|
|
4
16
|
|
|
5
17
|
### Bug Fixes
|
package/dist/bin/prjct-core.mjs
CHANGED
|
@@ -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.
|
|
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
|
|
package/dist/bin/prjct.mjs
CHANGED
|
@@ -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)}}
|