prjct-cli 3.87.0 → 3.88.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/bin/prjct +9 -2
- package/dist/bin/prjct-core.mjs +489 -489
- package/dist/bin/prjct-hooks.mjs +261 -261
- package/dist/daemon/entry.mjs +445 -445
- package/dist/mcp/server.mjs +1 -1
- package/package.json +1 -1
package/dist/mcp/server.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { dirname as __pathDirname } from 'path';
|
|
|
5
5
|
const require = __createRequire(import.meta.url);
|
|
6
6
|
const __filename = __fileURLToPath(import.meta.url);
|
|
7
7
|
const __dirname = __pathDirname(__filename);
|
|
8
|
-
var Mi=Object.defineProperty;var qC=Object.getOwnPropertyDescriptor;var VC=Object.getOwnPropertyNames;var JC=Object.prototype.hasOwnProperty;var a=(t,e)=>Mi(t,"name",{value:e,configurable:!0}),$i=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var y=(t,e,n)=>()=>{if(n)throw n[0];try{return t&&(e=t(t=0)),e}catch(r){throw n=[r],r}};var L=(t,e)=>{for(var n in e)Mi(t,n,{get:e[n],enumerable:!0})},KC=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of VC(e))!JC.call(t,s)&&s!==n&&Mi(t,s,{get:()=>e[s],enumerable:!(r=qC(e,s))||r.enumerable});return t};var ro=t=>KC(Mi({},"__esModule",{value:!0}),t);function Fi(t){return t instanceof Error&&"code"in t}function K(t){return Fi(t)&&t.code==="ENOENT"}function Bl(t){return Fi(t)&&(t.code==="EACCES"||t.code==="EPERM")}function Gl(t){let e=Fi(t)?t.code:void 0;return e==="EROFS"||e==="SQLITE_READONLY"?!0:/readonly|read-only/i.test(N(t))}function Wr(t,e,n="file"){let r=N(t);if(Gl(t)||Bl(t)){let s=Fi(t)&&t.code||"read-only";return`prjct can't write its ${n} at ${e} (${s}). This usually means a sandboxed or read-only environment. Re-run with write access to that path \u2014 some agents (e.g. Codex) run commands in a restricted sandbox, so approve filesystem/write access for prjct.`}return`Failed to write ${n} at ${e}: ${r}`}function N(t){return t instanceof Error?t.message:typeof t=="string"?t:"Unknown error"}var de=y(()=>{"use strict";a(Fi,"isNodeError");a(K,"isNotFoundError");a(Bl,"isPermissionError");a(Gl,"isReadonlyError");a(Wr,"describeFsWriteError");a(N,"getErrorMessage")});var ph={};L(ph,{PACKAGE_ROOT:()=>Br,VERSION:()=>pn,getPackageRoot:()=>ql,getVersion:()=>Hi,resetPackageRoot:()=>YC});import Xl from"node:fs";import Ui from"node:path";function ql(){if(Tt.packageRoot)return Tt.packageRoot;let t=a((e,n)=>{if(n>=5)return null;let r=Ui.join(e,"package.json");if(Xl.existsSync(r))try{if(JSON.parse(Xl.readFileSync(r,"utf-8")).name==="prjct-cli")return e}catch{}return t(Ui.dirname(e),n+1)},"findPackageRoot");return Tt.packageRoot=t(__dirname,0)??Ui.join(__dirname,"..","..",".."),Tt.packageRoot}function Hi(){if(Tt.version)return Tt.version;let t="3.
|
|
8
|
+
var Mi=Object.defineProperty;var qC=Object.getOwnPropertyDescriptor;var VC=Object.getOwnPropertyNames;var JC=Object.prototype.hasOwnProperty;var a=(t,e)=>Mi(t,"name",{value:e,configurable:!0}),$i=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var y=(t,e,n)=>()=>{if(n)throw n[0];try{return t&&(e=t(t=0)),e}catch(r){throw n=[r],r}};var L=(t,e)=>{for(var n in e)Mi(t,n,{get:e[n],enumerable:!0})},KC=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of VC(e))!JC.call(t,s)&&s!==n&&Mi(t,s,{get:()=>e[s],enumerable:!(r=qC(e,s))||r.enumerable});return t};var ro=t=>KC(Mi({},"__esModule",{value:!0}),t);function Fi(t){return t instanceof Error&&"code"in t}function K(t){return Fi(t)&&t.code==="ENOENT"}function Bl(t){return Fi(t)&&(t.code==="EACCES"||t.code==="EPERM")}function Gl(t){let e=Fi(t)?t.code:void 0;return e==="EROFS"||e==="SQLITE_READONLY"?!0:/readonly|read-only/i.test(N(t))}function Wr(t,e,n="file"){let r=N(t);if(Gl(t)||Bl(t)){let s=Fi(t)&&t.code||"read-only";return`prjct can't write its ${n} at ${e} (${s}). This usually means a sandboxed or read-only environment. Re-run with write access to that path \u2014 some agents (e.g. Codex) run commands in a restricted sandbox, so approve filesystem/write access for prjct.`}return`Failed to write ${n} at ${e}: ${r}`}function N(t){return t instanceof Error?t.message:typeof t=="string"?t:"Unknown error"}var de=y(()=>{"use strict";a(Fi,"isNodeError");a(K,"isNotFoundError");a(Bl,"isPermissionError");a(Gl,"isReadonlyError");a(Wr,"describeFsWriteError");a(N,"getErrorMessage")});var ph={};L(ph,{PACKAGE_ROOT:()=>Br,VERSION:()=>pn,getPackageRoot:()=>ql,getVersion:()=>Hi,resetPackageRoot:()=>YC});import Xl from"node:fs";import Ui from"node:path";function ql(){if(Tt.packageRoot)return Tt.packageRoot;let t=a((e,n)=>{if(n>=5)return null;let r=Ui.join(e,"package.json");if(Xl.existsSync(r))try{if(JSON.parse(Xl.readFileSync(r,"utf-8")).name==="prjct-cli")return e}catch{}return t(Ui.dirname(e),n+1)},"findPackageRoot");return Tt.packageRoot=t(__dirname,0)??Ui.join(__dirname,"..","..",".."),Tt.packageRoot}function Hi(){if(Tt.version)return Tt.version;let t="3.88.0";if(t&&/^\d+\.\d+\.\d+/.test(t))return Tt.version=t,Tt.version;try{let e=Ui.join(ql(),"package.json"),n=JSON.parse(Xl.readFileSync(e,"utf-8"));return Tt.version=n.version,Tt.version}catch(e){return process.env.PRJCT_DEBUG==="1"&&console.error("Failed to read version from package.json:",N(e)),"0.0.0"}}function YC(t){Tt.packageRoot=t,Tt.version=null}var Tt,pn,Br,Rn=y(()=>{"use strict";de();Tt={version:null,packageRoot:null};a(ql,"getPackageRoot");a(Hi,"getVersion");a(YC,"resetPackageRoot");pn=Hi(),Br=ql()});var mh,Wi,gh,Bi=y(()=>{"use strict";mh=new Set(["node_modules",".git","dist","build","out",".next",".nuxt","coverage",".cache",".turbo",".vercel",".parcel-cache","__pycache__",".pytest_cache","target","vendor",".venv","venv","eggs","*.egg-info",".prjct",".worktrees"]),Wi=["",".ts",".tsx",".js",".jsx","/index.ts","/index.js"],gh=/(?:import|from)\s+['"]([^'"]+)['"]/g});function fh(t){let e=t.getFullYear(),n=(t.getMonth()+1).toString().padStart(2,"0"),r=t.getDate().toString().padStart(2,"0");return`${e}-${n}-${r}`}function hh(t){return{year:t.getFullYear().toString(),month:(t.getMonth()+1).toString().padStart(2,"0"),day:t.getDate().toString().padStart(2,"0")}}function x(){return new Date().toISOString()}function Gr(t){let e=new Date;return e.setDate(e.getDate()-t),e}function yh(t){let e=Math.floor(t/1e3),n=Math.floor(e/60),r=Math.floor(n/60),s=Math.floor(r/24);return s>0?`${s}d ${r%24}h`:r>0?`${r}h ${n%60}m`:n>0?`${n}m`:`${e}s`}var gW,oe=y(()=>{"use strict";a(fh,"formatDate");a(hh,"getYearMonthDay");a(x,"getTimestamp");a(Gr,"getDaysAgo");a(yh,"formatDuration");gW=new Intl.RelativeTimeFormat("en",{numeric:"always"})});import wh from"node:fs/promises";async function Th(t,e){let n=await wh.readFile(t,"utf-8").catch(o=>{if(K(o))return null;throw o});if(n===null)return null;let r=(()=>{try{return JSON.parse(n)}catch{return null}})();if(r===null)return await Eh(t,n),kh(t,"Malformed JSON"),null;let s=e.safeParse(r);return s.success?r:(await Eh(t,n),kh(t,zC(s.error)),null)}async function Eh(t,e){let n=`${t}.backup`;try{await wh.writeFile(n,e,{encoding:"utf-8",flag:"wx"})}catch{}}function kh(t,e){console.error(`[prjct] Warning: Corrupted storage file: ${t}`),console.error(`[prjct] Reason: ${e}`),console.error("[prjct] A .backup file has been created. Returning defaults.")}function zC(t){return t.issues.slice(0,3).map(e=>`${e.path.join(".")}: ${e.message}`).join("; ")}var Sh=y(()=>{"use strict";de();a(Th,"safeRead");a(Eh,"createBackup");a(kh,"logCorruption");a(zC,"formatZodError")});import Pt from"node:fs/promises";import Gi from"node:path";async function bh(t,e,n){try{return await n()}catch(r){throw Gl(r)||Bl(r)?new Error(Wr(r,t,e)):r}}async function St(t,e={}){let n=[],r=e.maxFiles??1/0,s=e.dotfileAllowlist?new Set(e.dotfileAllowlist):null;async function o(i){if(n.length>=r)return;let c=await Pt.readdir(i,{withFileTypes:!0}).catch(()=>[]);for(let l of c){if(n.length>=r)break;let u=String(l.name);if(mh.has(u)||e.skipDotfiles&&u.startsWith(".")&&(!s||!s.has(u)))continue;let p=Gi.join(i,u);l.isDirectory()?await o(p):l.isFile()&&n.push(Gi.relative(t,p))}}return a(o,"walk"),await o(t),n}async function Lt(t,e,n){let r=[],s=Array.from({length:Math.ceil(t.length/e)},(o,i)=>i*e);for(let o of s){let i=await Promise.all(t.slice(o,o+e).map(n));for(let c of i)c!==null&&r.push(c)}return r}async function Je(t,e=null,n){if(n)return await Th(t,n)??e;try{let r=await Pt.readFile(t,"utf-8");return JSON.parse(r)}catch(r){if(K(r))return e;throw r}}async function Xe(t,e,n=2){await bh(t,"config",async()=>{let r=Gi.dirname(t);await Pt.mkdir(r,{recursive:!0});let s=`${JSON.stringify(e,null,n)}
|
|
9
9
|
`;await Pt.writeFile(t,s,"utf-8")})}async function at(t,e=""){try{return await Pt.readFile(t,"utf-8")}catch(n){if(K(n))return e;throw n}}async function An(t,e){await bh(t,"file",async()=>{let n=Gi.dirname(t);await Pt.mkdir(n,{recursive:!0}),await Pt.writeFile(t,e,"utf-8")})}async function P(t){try{return await Pt.access(t),!0}catch(e){if(K(e))return!1;throw e}}async function je(t){try{return(await Pt.stat(t)).isDirectory()}catch(e){if(K(e))return!1;throw e}}async function Gt(t){await Pt.mkdir(t,{recursive:!0})}async function Nn(t,e={}){try{return(await Pt.readdir(t,{withFileTypes:!0})).filter(s=>!e.filesOnly||s.isFile()).filter(s=>!e.dirsOnly||s.isDirectory()).filter(s=>!e.extension||s.name.endsWith(e.extension)).map(s=>s.name)}catch(n){if(K(n))return[];throw n}}var ue=y(()=>{"use strict";Bi();Sh();de();a(bh,"withWriteErrorContext");a(St,"walkDir");a(Lt,"batchProcess");a(Je,"readJson");a(Xe,"writeJson");a(at,"readFile");a(An,"writeFile");a(P,"fileExists");a(je,"dirExists");a(Gt,"ensureDir");a(Nn,"listFiles")});import QC from"node:os";import vh from"node:path";function Pn(){let t=process.env.PRJCT_CLI_HOME?.trim();return t?vh.resolve(t):vh.join(QC.homedir(),".prjct-cli")}var so=y(()=>{"use strict";a(Pn,"resolveCliHome")});import ZC from"node:fs";import Xr from"node:fs/promises";import Ze from"node:path";async function Vl(t){let e={isMonorepo:!1,type:null,rootPath:t,packages:[]},n=[{file:"pnpm-workspace.yaml",type:"pnpm"},{file:"lerna.json",type:"lerna"},{file:"nx.json",type:"nx"},{file:"rush.json",type:"rush"},{file:"turbo.json",type:"turborepo"}];for(let r of n)if(await P(Ze.join(t,r.file))){e.isMonorepo=!0,e.type=r.type;break}if(!e.isMonorepo){let r=Ze.join(t,"package.json");if(await P(r))try{JSON.parse(await Xr.readFile(r,"utf-8")).workspaces&&(e.isMonorepo=!0,e.type="npm")}catch{}}return e.isMonorepo&&(e.packages=await Jl(t,e.type)),e}async function Jl(t,e){let n=[];try{let r=await(async()=>{if(e==="pnpm"){let i=(await Xr.readFile(Ze.join(t,"pnpm-workspace.yaml"),"utf-8")).match(/packages:\s*\n((?:\s*-\s*.+\n?)+)/);return i?i[1].split(`
|
|
10
10
|
`).map(c=>c.replace(/^\s*-\s*['"]?|['"]?\s*$/g,"")).filter(Boolean):[]}if(e==="npm"||e==="lerna"){let o=Ze.join(t,"package.json"),i=JSON.parse(await Xr.readFile(o,"utf-8")),c=Array.isArray(i.workspaces)?i.workspaces:i.workspaces?.packages??[];if(e==="lerna"){let l=Ze.join(t,"lerna.json");if(await P(l)){let u=JSON.parse(await Xr.readFile(l,"utf-8"));if(u.packages)return u.packages}}return c}if(e==="nx")return["apps/*","libs/*","packages/*"];if(e==="turborepo"){let o=JSON.parse(await Xr.readFile(Ze.join(t,"package.json"),"utf-8"));return Array.isArray(o.workspaces)?o.workspaces:[]}return[]})(),s=r.length>0?r:["packages/*","apps/*","libs/*"];for(let o of s){if(o.startsWith("!"))continue;let i=eA(o,{cwd:t});for(let c of i){let l=Ze.join(t,c),u=Ze.join(l,"package.json");if(await P(u))try{let p=JSON.parse(await Xr.readFile(u,"utf-8")),d=Ze.join(l,"PRJCT.md");n.push({name:p.name||Ze.basename(c),path:l,relativePath:c,hasPrjctMd:await P(d)})}catch{}}}}catch{}return n}async function _h(t,e){if(!e.isMonorepo)return null;let n=Ze.resolve(t);for(let r of e.packages){let s=Ze.resolve(r.path);if(n.startsWith(s))return r}return null}async function Kl(t){let e=Ze.resolve(t),n=Ze.parse(e).root;return e===n?null:(await Vl(e)).isMonorepo?e:Kl(Ze.dirname(e))}var eA,xh=y(()=>{"use strict";ue();eA=ZC.globSync;a(Vl,"detectMonorepo");a(Jl,"discoverMonorepoPackages");a(_h,"findContainingPackage");a(Kl,"findMonorepoRoot")});import tA from"node:os";import Rh from"node:path";function qr(){let t=process.env.HOME?.trim()||process.env.USERPROFILE?.trim();return t?Rh.resolve(t):tA.homedir()}function $e(...t){return Rh.join(qr(),...t)}var er=y(()=>{"use strict";a(qr,"resolveUserHome");a($e,"resolveUserPath")});var Yl=y(()=>{"use strict"});import{z as oo}from"zod";function Ah(t){return Ch[t]??"balanced"}function nA(t){return t==="frontier"?"max":"decent"}function Nh(t){return{model:Xi[t][0],effort:nA(t)}}function Vi(t){return Nh(Ah(t))}function sA(t,e,n){let r=n?Nh(n):Vi(t);if(!e||e.size===0)return{...r,preferred:r.model,degraded:!1};for(let s of rA[r.model])if(e.has(s))return{...r,model:s,preferred:r.model,degraded:s!==r.model};return{...r,preferred:r.model,degraded:!1}}function oA(t,e,n,r){let s=r??Ah(t),o=qi[e]?.[s];if(!o||o.length===0)return{provider:e,model:null,capability:s,degraded:!1};let i=o[0];if(!n||n.size===0)return{provider:e,model:i,capability:s,degraded:!1};for(let c of o)if(n.has(c))return{provider:e,model:c,capability:s,degraded:c!==i};return{provider:e,model:i,capability:s,degraded:!1}}function Ih(t,e,n,r){let s=oA(t,e,n,r);if(s.model===null){let i=s.capability==="frontier"?"your strongest model":s.capability==="fast"?"a fast, cheap model":"a balanced mid-tier model";return`Dispatch this ${t} as a ${s.capability}-class task \u2014 select ${i} on this rig (${e}).`}let o=s.degraded?` (preferred ${s.capability} model unavailable \u2014 degraded to "${s.model}")`:"";return`Dispatch this ${t} on ${e} with model "${s.model}" \u2014 a ${s.capability}-class task${o}.`}function Ph(t,e,n){let r=sA(t,e,n),s=r.preferred==="opus"&&r.effort==="max";if(s&&!r.degraded)return'Dispatch with the Agent tool using `model: "opus"` and full reasoning effort \u2014 this is the IMPLEMENTER; it writes code and needs the best model.';if(s)return`Dispatch with the Agent tool using \`model: "${r.model}"\` \u2014 this is the IMPLEMENTER, but its preferred tier \`opus\` is unavailable/throttled, so it is degraded to \`${r.model}\` at full effort. Compensate by leaning harder on verification (\`verify:\` gates) before ship.`;let o=`Dispatch with the Agent tool using \`model: "${r.model}"\` (NOT the parent's max model). Apply ${r.effort}, not exhaustive, effort \u2014 this is an orchestration/review role: return the verdict, don't over-deliberate. A smaller model at decent effort is correct here and far faster.`;return r.degraded?`${o} (Preferred tier \`${r.preferred}\` is unavailable/throttled \u2014 degraded to \`${r.model}\`.)`:o}function Vr(t){let e=qi[t];return e?[...new Set([...e.frontier,...e.balanced,...e.fast])]:[]}function Jr(t){return qi[t]?.balanced[0]??null}function Lh(t,e){let n=t.split(".").map(Number),r=e.split(".").map(Number);for(let s of[0,1,2]){let o=n[s]??0,i=r[s]??0;if(o<i)return-1;if(o>i)return 1}return 0}var qi,Ch,Xi,HW,rA,io,Kr=y(()=>{"use strict";qi={claude:{frontier:["opus","sonnet","haiku"],balanced:["sonnet","haiku","opus"],fast:["haiku","sonnet","opus"]},gemini:{frontier:["3.1-pro","2.5-pro","2.5-flash","2.0-flash"],balanced:["2.5-flash","3.1-pro","2.5-pro","2.0-flash"],fast:["2.0-flash","2.5-flash","2.5-pro","3.1-pro"]},openai:{frontier:["gpt-5.5","o3","gpt-4.1","gpt-4o"],balanced:["gpt-4.1","gpt-5.5","gpt-4o","gpt-4.1-mini"],fast:["gpt-4.1-mini","gpt-4o-mini","gpt-4o","gpt-4.1"]},codex:{frontier:["gpt-5.5","o3","gpt-4.1","gpt-4o"],balanced:["gpt-4.1","gpt-5.5","gpt-4o","gpt-4.1-mini"],fast:["gpt-4.1-mini","gpt-4o-mini","gpt-4o","gpt-4.1"]},xai:{frontier:["grok-4","grok-3","grok-2","grok-2-mini"],balanced:["grok-3","grok-4","grok-2","grok-2-mini"],fast:["grok-2-mini","grok-2","grok-3","grok-4"]},grok:{frontier:["grok-4","grok-3","grok-2","grok-2-mini"],balanced:["grok-3","grok-4","grok-2","grok-2-mini"],fast:["grok-2-mini","grok-2","grok-3","grok-4"]},kimi:{frontier:["kimi-k2","kimi-latest","moonshot-v1-128k"],balanced:["kimi-latest","moonshot-v1-128k","moonshot-v1-32k"],fast:["moonshot-v1-32k","moonshot-v1-128k","kimi-latest"]},opencode:{frontier:[],balanced:[],fast:[]},cline:{frontier:[],balanced:[],fast:[]},aider:{frontier:[],balanced:[],fast:[]}},Ch={implementer:"frontier",orchestrator:"fast","strategic-review":"balanced","architecture-review":"balanced","design-review":"balanced","spec-review":"balanced",review:"balanced",security:"balanced",investigate:"balanced",reviewer:"balanced"};a(Ah,"capabilityClassForRole");Xi=qi.claude;a(nA,"effortForClass");a(Nh,"policyForClass");a(Vi,"getAgentModelPolicy");HW=Object.fromEntries(Object.keys(Ch).map(t=>[t,Vi(t)])),rA={opus:Xi.frontier,sonnet:Xi.balanced,haiku:Xi.fast};a(sA,"resolveAgentModel");a(oA,"resolveProviderModel");a(Ih,"renderModelDirectiveForProvider");a(Ph,"renderModelDirective");io=oo.object({provider:oo.string(),model:oo.string(),cliVersion:oo.string().optional(),recordedAt:oo.string()});a(Vr,"getSupportedModels");a(Jr,"getDefaultModel");a(Lh,"compareSemver")});var Ki={};L(Ki,{GitInfraError:()=>qe,PROC_ENVELOPE_MAX:()=>$h,execAsync:()=>Y,execFileAsync:()=>z,exitCodeMeans:()=>pA,gitInfraErrorOf:()=>zl,gitStdout:()=>tr,isProcInfra:()=>dA,matchProc:()=>mA,procErrorOf:()=>Uh,runGit:()=>et,runProc:()=>Fh,sanitizeProcEnvelope:()=>Ji,throwProc:()=>Ln});import{exec as iA,execFile as aA,spawn as Oh}from"node:child_process";import{promisify as Mh}from"node:util";function Dh(t){try{process.platform==="win32"?t.pid!==void 0&&Oh("taskkill",["/pid",String(t.pid),"/T","/F"],{stdio:"ignore"}).unref():t.pid!==void 0&&process.kill(-t.pid,"SIGKILL")}catch{}try{t.kill("SIGKILL")}catch{}}function jh(t,e){if(t.length===0)return"";let n=Buffer.concat(t);return(n.length>e?n.subarray(0,e):n).toString("utf8")}function uA(t){let e=t.code;return typeof e=="string"?e:void 0}function Fh(t,e,n={}){let r=n.timeoutMs??cA,s=n.maxBuffer??lA,o=s,i=n.spawnFn??Oh,c=[t,...e],l=Date.now(),u=a(()=>Date.now()-l,"duration");return n.signal?.aborted?Promise.resolve({ok:!1,kind:"timeout",budgetMs:0,budgetSource:"abort",args:c,stdout:"",stderr:"",durationMs:0}):new Promise(p=>{let d=[],m=[],g={settled:!1,overflow:!1,outBytes:0,errBytes:0},h=i(t,e,{cwd:n.cwd,env:n.env,detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),f=a(R=>{g.settled||(g.settled=!0,clearTimeout(C),n.signal?.removeEventListener("abort",E),p(R))},"finish"),T=a(()=>({stdout:jh(d,o),stderr:jh(m,o)}),"partials"),S=a((R,$)=>{Dh(h);let{stdout:B,stderr:te}=T();f({ok:!1,kind:"timeout",budgetMs:$,budgetSource:R,args:c,stdout:B,stderr:te,durationMs:u()})},"finishTimeout"),_=a(()=>{Dh(h);let{stdout:R,stderr:$}=T();f({ok:!1,kind:"overflow",maxBuffer:s,args:c,stdout:R,stderr:$||`maxBuffer exceeded (${s} bytes)`,durationMs:u()})},"finishOverflow"),C=setTimeout(()=>S("timeout",r),r),E=a(()=>S("abort",r),"onAbort");n.signal?.addEventListener("abort",E,{once:!0});let b=a((R,$)=>{g.settled||($?(m.push(R),g.errBytes+=R.length):(d.push(R),g.outBytes+=R.length),!g.overflow&&g.outBytes+g.errBytes>s&&(g.overflow=!0,_()))},"onChunk");h.stdout?.on("data",R=>b(R,!1)),h.stderr?.on("data",R=>b(R,!0)),h.on("error",R=>{f({ok:!1,kind:"spawn",cause:R,code:uA(R),args:c,durationMs:u()})}),h.on("close",(R,$)=>{if(g.settled)return;let{stdout:B,stderr:te}=T();f(R===0?{ok:!0,stdout:B,stderr:te,durationMs:u()}:{ok:!1,kind:"exit",code:R??-1,signal:$,stdout:B,stderr:te.trim(),args:c,durationMs:u()})})})}function et(t,e={}){return Fh("git",t,e)}function dA(t){return!t.ok&&(t.kind==="timeout"||t.kind==="spawn"||t.kind==="overflow")}function pA(t,e){return!Number.isInteger(e)||e<0?!1:!t.ok&&t.kind==="exit"&&t.code===e}function Ji(t,e=$h){let r=t.replace(/[\r\n\t]+/g," ").replace(/\s+/g," ").trim().replace(/(?:[A-Za-z]:)?(?:\/|\\)(?:Users|home|tmp|var|private|Users)(?:\/|\\)[^\s]*/gi,"\u2026").replace(/\/(?:Users|home|tmp|var|private)\/[^\s]*/gi,"\u2026");return r.length<=e?r:`${r.slice(0,Math.max(0,e-1))}\u2026`}function zl(t){return t.ok||t.kind==="exit"?null:t.kind==="timeout"?new qe("timeout",t.args,t.budgetSource==="abort"?"aborted by caller signal":`exceeded ${t.budgetMs}ms`,{budgetSource:t.budgetSource}):t.kind==="overflow"?new qe("overflow",t.args,`maxBuffer ${t.maxBuffer} bytes`):new qe("spawn",t.args,t.cause.message)}function Uh(t){if(t.ok)return null;if(t.kind==="exit"){let e=t.stderr?` \u2014 ${Ji(t.stderr,120)}`:"",n=t.signal?` signal=${t.signal}`:"";return new Error(Ji(`command failed (exit ${t.code}${n}): ${t.args.join(" ")}${e}`))}return zl(t)}function Ln(t){throw t.ok?new Error("throwProc called on ok result"):Uh(t)??new Error(`process failed (${t.kind})`)}function mA(t,e){if(t.ok)return e.ok(t);switch(t.kind){case"exit":return e.exit(t);case"timeout":return e.timeout(t);case"spawn":return e.spawn(t);case"overflow":return e.overflow(t);default:return t}}async function tr(t,e,n={}){let r=await et(e,{...n,cwd:t});if(r.ok)return r.stdout.trim();let s=zl(r);if(s)throw s;return null}var Y,z,cA,lA,$h,qe,pe=y(()=>{"use strict";Y=Mh(iA),z=Mh(aA),cA=1e4,lA=1024*1024,$h=240;a(Dh,"killProcessTree");a(jh,"joinChunks");a(uA,"nodeErrorCode");a(Fh,"runProc");a(et,"runGit");a(dA,"isProcInfra");a(pA,"exitCodeMeans");a(Ji,"sanitizeProcEnvelope");qe=class extends Error{static{a(this,"GitInfraError")}kind;args;detail;budgetSource;constructor(e,n,r,s){super(Ji(`git ${e} failure (${n.join(" ")}): ${r}`)),this.name="GitInfraError",this.kind=e,this.args=n,this.detail=r,this.budgetSource=s?.budgetSource}};a(zl,"gitInfraErrorOf");a(Uh,"procErrorOf");a(Ln,"throwProc");a(mA,"matchProc");a(tr,"gitStdout")});function Hh(t,e){let n=typeof t=="string"?new Date(t).getTime():t;return Date.now()-n>e}var Yi,Ql=y(()=>{"use strict";a(Hh,"isExpired");Yi=class{static{a(this,"TTLCache")}cache=new Map;ttl;maxSize;constructor(e={}){this.ttl=e.ttl??5e3,this.maxSize=e.maxSize??50}isValid(e){let n=this.cache.get(e);return n?Date.now()-n.timestamp<this.ttl:!1}get(e){let n=this.cache.get(e);return n?this.isValid(e)?n.data:(this.cache.delete(e),null):null}set(e,n){this.cache.set(e,{data:n,timestamp:Date.now()}),this.evictOldEntries()}delete(e){this.cache.delete(e)}clear(){this.cache.clear()}has(e){return this.cache.has(e)}get size(){return this.cache.size}evictOldEntries(){if(this.cache.size<=this.maxSize)return;let n=Array.from(this.cache.entries()).sort((r,s)=>r[1].timestamp-s[1].timestamp).slice(0,this.cache.size-this.maxSize);for(let[r]of n)this.cache.delete(r)}stats(){return{size:this.cache.size,maxSize:this.maxSize,ttl:this.ttl}}prune(){let e=[...this.cache.keys()].filter(n=>!this.isValid(n));for(let n of e)this.cache.delete(n);return e.length}}});import gA from"node:fs/promises";import fA from"node:path";async function Bh(){try{let t=await gA.readFile(Wh(),"utf-8"),e=JSON.parse(t);return!e.timestamp||!e.detection||!e.detection.claude||!e.detection.gemini||!e.detection.codex||Hh(e.timestamp,hA)?null:e.detection}catch{return null}}async function Gh(t){let e={timestamp:new Date().toISOString(),detection:t};await Xe(Wh(),e)}var Wh,hA,Xh=y(()=>{"use strict";ct();Ql();ue();Wh=a(()=>fA.join(ie.getCachePath(),"providers.json"),"cacheFile"),hA=600*1e3;a(Bh,"readProviderCache");a(Gh,"writeProviderCache")});import{execFileSync as Zl}from"node:child_process";function ao(t){for(let e of t.split(/\r?\n/)){let n=e.trim();if(n)return n}return null}function qh(t){if(!t||t.includes("\0"))return null;try{if(process.platform==="win32"){let e=Zl("where.exe",[t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0});return ao(e)}try{let e=Zl("which",[t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return ao(e)}catch{let e=Zl("/bin/sh",["-c",`command -v ${JSON.stringify(t)}`],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return ao(e)}}catch{return null}}async function co(t){if(!t||t.includes("\0"))return null;try{if(process.platform==="win32"){let{stdout:e}=await z("where.exe",[t],{encoding:"utf-8",windowsHide:!0});return ao(String(e))}try{let{stdout:e}=await z("which",[t]);return ao(String(e))}catch{return qh(t)}}catch{return null}}function Vh(t){return qh(t)!==null}var lo=y(()=>{"use strict";pe();a(ao,"firstNonEmptyLine");a(qh,"whichSync");a(co,"whichAsync");a(Vh,"commandOnPath")});var uo={};L(uo,{ClaudeProvider:()=>zi,CursorProvider:()=>Kh,GeminiProvider:()=>nu,Providers:()=>Dn,detectAllProviders:()=>ou,detectAntigravity:()=>kA,detectCodex:()=>On,detectKimi:()=>iu,detectProvider:()=>tu,getActiveProvider:()=>jn,getProviderBranding:()=>Qi,selectProvider:()=>wA,validateCliVersion:()=>Yh});import eu from"node:path";async function su(t){let e=await co(t);return e||(process.platform==="win32"?co(`${t}.cmd`):null)}async function EA(t){try{let{stdout:e}=await Y(`${t} --version`,{timeout:2e3}),n=e.match(/\d+\.\d+\.\d+/);return n?n[0]:e.trim()}catch{return null}}async function tu(t){let e=Dn[t];if(!e.cliCommand)return{installed:!1};let n=await su(e.cliCommand);if(!n)return{installed:!1};let r=await EA(e.cliCommand),s=Yh(t,r||void 0);return{installed:!0,version:r||void 0,path:n,versionWarning:s||void 0}}function Yh(t,e){let n=Dn[t];return!n.minCliVersion||!e?null:Lh(e,n.minCliVersion)<0?`\u26A0\uFE0F ${n.displayName} v${e} is below minimum v${n.minCliVersion}. Some features may not work correctly.`:null}async function ou(t=!1){if(!t){let i=await Bh();if(i)return i}let[e,n,r]=await Promise.all([tu("claude"),tu("gemini"),On()]),s={installed:r.installed},o={claude:e,gemini:n,codex:s};return await Gh(o).catch(()=>{}),o}async function jn(t){if(t&&Dn[t])return Dn[t];let e=await ou(),n=[e.claude.installed?"claude":null,e.gemini.installed?"gemini":null,e.codex.installed?"codex":null].filter(Boolean);return n.length===1?Dn[n[0]]:e.claude.installed?zi:e.gemini.installed?nu:e.codex.installed?ru:zi}function Qi(t){return{commitFooter:"Generated with [p/](https://www.prjct.app/)",signature:{claude:"\u26A1 prjct + Claude",gemini:"\u26A1 prjct + Gemini",cursor:"\u26A1 prjct + Cursor",antigravity:"\u26A1 prjct + Antigravity",codex:"\u26A1 prjct + Codex"}[t]||"\u26A1 prjct"}}async function kA(){let t=Jh.configDir;if(!t)return{installed:!1,skillInstalled:!1};let e=eu.join(t,"skills","prjct","SKILL.md"),[n,r]=await Promise.all([P(t),P(e)]);return{installed:n,skillInstalled:r,configPath:n?t:void 0}}async function On(){let t=ru.configDir;if(!t)return{installed:!1,skillInstalled:!1};let e=await su("codex"),n=eu.join(t,"skills","prjct","SKILL.md"),r=await P(n),s=!!e||await P(eu.join(t,"auth.json"));return{installed:s,skillInstalled:r,configPath:s?t:void 0}}async function iu(){let t=$e(".kimi"),[e,n]=await Promise.all([su("kimi"),P(t)]),r=!!e||n;return{installed:r,configPath:r?t:void 0}}async function wA(){let t=await ou();return{provider:t.claude.installed?"claude":t.gemini.installed?"gemini":t.codex.installed?"codex":"claude",detection:t}}var zi,nu,Jh,Kh,ru,Dn,bt=y(()=>{"use strict";Yl();Kr();pe();ue();Xh();lo();er();zi={name:"claude",displayName:"Claude Code",cliCommand:"claude",get configDir(){return $e(".claude")},contextFile:"CLAUDE.md",get skillsDir(){return $e(".claude","skills")},commandsDir:".claude/commands",commandFormat:"md",settingsFile:"settings.json",projectSettingsFile:"settings.local.json",ignoreFile:".claudeignore",websiteUrl:"https://www.anthropic.com/claude",docsUrl:"https://docs.anthropic.com/claude-code",get defaultModel(){return Jr(this.name)},get supportedModels(){return Vr(this.name)},minCliVersion:"1.0.0"},nu={name:"gemini",displayName:"Gemini CLI",cliCommand:"gemini",get configDir(){return $e(".gemini")},contextFile:"GEMINI.md",get skillsDir(){return $e(".gemini","skills")},commandsDir:".gemini/commands",commandFormat:"toml",settingsFile:"settings.json",projectSettingsFile:"settings.json",ignoreFile:".geminiignore",websiteUrl:"https://geminicli.com",docsUrl:"https://geminicli.com/docs",get defaultModel(){return Jr(this.name)},get supportedModels(){return Vr(this.name)},minCliVersion:"1.0.0"},Jh={name:"antigravity",displayName:"Google Antigravity",cliCommand:null,get configDir(){return $e(".gemini","antigravity")},contextFile:"ANTIGRAVITY.md",get skillsDir(){return $e(".gemini","antigravity","global_skills")},commandsDir:".agent/skills",commandFormat:"md",settingsFile:"mcp_config.json",projectSettingsFile:null,ignoreFile:".agentignore",websiteUrl:"https://gemini.google.com/app/antigravity",docsUrl:"https://gemini.google.com/app/antigravity",get defaultModel(){return Jr(this.name)},get supportedModels(){return Vr(this.name)},minCliVersion:null},Kh={name:"cursor",displayName:"Cursor IDE",cliCommand:null,configDir:null,contextFile:"prjct.mdc",skillsDir:null,commandsDir:".cursor/commands",rulesDir:".cursor/rules",commandFormat:"md",settingsFile:null,projectSettingsFile:null,ignoreFile:".cursorignore",isProjectLevel:!0,websiteUrl:"https://cursor.com",docsUrl:"https://cursor.com/docs",get defaultModel(){return Jr(this.name)},get supportedModels(){return Vr(this.name)},minCliVersion:null},ru={name:"codex",displayName:"OpenAI Codex",cliCommand:"codex",get configDir(){return $e(".codex")},contextFile:"AGENTS.md",get skillsDir(){return $e(".codex","skills")},commandsDir:".agents/skills",commandFormat:"md",settingsFile:null,projectSettingsFile:null,ignoreFile:".codexignore",websiteUrl:"https://openai.com/codex",docsUrl:"https://github.com/openai/codex",get defaultModel(){return Jr(this.name)},get supportedModels(){return Vr(this.name)},minCliVersion:null},Dn={claude:zi,gemini:nu,cursor:Kh,antigravity:Jh,codex:ru};a(su,"whichCommand");a(EA,"getCliVersion");a(tu,"detectProvider");a(Yh,"validateCliVersion");a(ou,"detectAllProviders");a(jn,"getActiveProvider");a(Qi,"getProviderBranding");a(kA,"detectAntigravity");a(On,"detectCodex");a(iu,"detectKimi");a(wA,"selectProvider")});var zh={};L(zh,{default:()=>ie});import TA from"node:crypto";import Zi from"node:fs/promises";import be from"node:path";var au,SA,ie,ct=y(()=>{"use strict";oe();ue();so();xh();er();au=class{static{a(this,"PathManager")}globalBaseDir;globalConfigDir;constructor(){this.globalBaseDir=Pn(),this.globalConfigDir=be.join(this.globalBaseDir,"config")}get globalProjectsDir(){let e=process.env.PRJCT_PROJECTS_DIR;return e?be.resolve(e):be.join(this.globalBaseDir,"projects")}setGlobalBaseDir(e){this.globalBaseDir=be.resolve(e),this.globalConfigDir=be.join(this.globalBaseDir,"config")}generateProjectId(e){return TA.randomUUID()}getGlobalBasePath(){return this.globalBaseDir}getGlobalProjectPath(e){return be.join(this.globalProjectsDir,e)}getLocalConfigPath(e){return be.join(e,".prjct","prjct.config.json")}getGlobalProjectConfigPath(e){return be.join(this.getGlobalProjectPath(e),"project.json")}getLegacyPrjctPath(e){return be.join(e,".prjct")}async hasLegacyStructure(e){return await je(this.getLegacyPrjctPath(e))}async hasConfig(e){return await P(this.getLocalConfigPath(e))}async ensureGlobalStructure(){await Gt(this.globalBaseDir),await Gt(this.globalProjectsDir),await Gt(this.globalConfigDir)}async ensureProjectStructure(e){await this.ensureGlobalStructure();let n=this.getGlobalProjectPath(e),r=["analysis","memory"];for(let s of r)await Gt(be.join(n,s));return await Gt(be.join(n,"sessions")),n}getSessionPath(e,n=new Date){let{year:r,month:s,day:o}=hh(n);return be.join(this.getGlobalProjectPath(e),"sessions",r,s,o)}getCurrentSessionPath(e){return this.getSessionPath(e,new Date)}async ensureSessionPath(e,n=new Date){let r=this.getSessionPath(e,n);return await Gt(r),r}async listSessions(e,n=null,r=null){let s=be.join(this.getGlobalProjectPath(e),"sessions"),o=[];try{let i=await Zi.readdir(s,{withFileTypes:!0});for(let c of i){if(!c.isDirectory()||n&&c.name!==n.toString())continue;let l=be.join(s,c.name),u=await Zi.readdir(l,{withFileTypes:!0});for(let p of u){if(!p.isDirectory()||r&&p.name!==r.toString().padStart(2,"0"))continue;let d=be.join(l,p.name),m=await Zi.readdir(d,{withFileTypes:!0});for(let g of m)g.isDirectory()&&o.push({year:c.name,month:p.name,day:g.name,path:be.join(d,g.name),date:new Date(`${c.name}-${p.name}-${g.name}`)})}}return o.sort((c,l)=>l.date.getTime()-c.date.getTime()),o}catch{return[]}}async getSessionsInRange(e,n,r=new Date){return(await this.listSessions(e)).filter(o=>o.date>=n&&o.date<=r)}getFilePath(e,n,r){return be.join(this.getGlobalProjectPath(e),n,r)}async listProjects(){try{return await this.ensureGlobalStructure(),(await Zi.readdir(this.globalProjectsDir,{withFileTypes:!0})).filter(n=>n.isDirectory()).map(n=>n.name)}catch{return[]}}async projectExists(e){return await je(this.getGlobalProjectPath(e))}getDisplayPath(e){let n=qr();return e.startsWith(n)?e.replace(n,"~"):e}getAuthConfigPath(){return be.join(this.globalConfigDir,"auth.json")}getSyncPendingPath(e){return be.join(this.getGlobalProjectPath(e),"sync","pending.json")}getLastSyncPath(e){return be.join(this.getGlobalProjectPath(e),"sync","last-sync.json")}getRunningStatusPath(){return be.join(this.globalBaseDir,".running")}getCachePath(){return be.join(this.globalBaseDir,"cache")}getStatePath(){return be.join(this.globalBaseDir,"state")}getStatusLinePath(){return be.join(this.globalBaseDir,"statusline")}async getAgentDir(){return(await(bt(),ro(uo)).getActiveProvider()).configDir}async getAgentSettingsPath(){let e=await(bt(),ro(uo)).getActiveProvider();return(bt(),ro(uo)).getGlobalSettingsPath(e.name)}getClaudeDir(){return $e(".claude")}getClaudeSettingsPath(){return be.join(this.getClaudeDir(),"settings.json")}getStoragePath(e,n){return be.join(this.getGlobalProjectPath(e),"storage",n)}getContextPath(e){return be.join(this.getGlobalProjectPath(e),"context")}async detectMonorepo(e){return Vl(e)}async discoverMonorepoPackages(e,n){return Jl(e,n)}async findContainingPackage(e,n){return _h(e,n)}async findMonorepoRoot(e){return Kl(e)}},SA=new au,ie=SA});import bA from"node:crypto";function Pe(t){let e=t.toLowerCase().replace(/\s+/g," ").trim();return bA.createHash("sha256").update(e).digest("hex")}var Mn=y(()=>{"use strict";a(Pe,"memoryFingerprint")});var Qh,Zh=y(()=>{"use strict";Qh=`
|
|
11
11
|
-- =======================================================================
|
package/package.json
CHANGED