prjct-cli 3.89.0 → 3.91.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.
Files changed (88) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/bin/hook-chunks/{agent-switch-FBQDHWAO.mjs → agent-switch-IQ5KSRKD.mjs} +1 -1
  3. package/dist/bin/hook-chunks/{analysis-NRRZYJ6G.mjs → analysis-LBYZSJKT.mjs} +2 -2
  4. package/dist/bin/hook-chunks/{auto-flush-D3X3U4CP.mjs → auto-flush-GW3FP763.mjs} +1 -1
  5. package/dist/bin/hook-chunks/{capture-gate-BFOABO2Y.mjs → capture-gate-BQCNMHUC.mjs} +1 -1
  6. package/dist/bin/hook-chunks/{chunk-5T5PZKHW.mjs → chunk-3WKDMAS7.mjs} +1 -1
  7. package/dist/bin/hook-chunks/{chunk-YGHIPTJN.mjs → chunk-6AFM6WRB.mjs} +2 -2
  8. package/dist/bin/hook-chunks/{chunk-JQLJM4BK.mjs → chunk-A5MUSARI.mjs} +1 -1
  9. package/dist/bin/hook-chunks/{chunk-GHBGBP2M.mjs → chunk-AEYONUUY.mjs} +1 -1
  10. package/dist/bin/hook-chunks/{chunk-H6KVNDQD.mjs → chunk-B7GMU46T.mjs} +3 -3
  11. package/dist/bin/hook-chunks/{chunk-HE5RSIHG.mjs → chunk-D4S3IRD3.mjs} +1 -1
  12. package/dist/bin/hook-chunks/{chunk-SN224ILI.mjs → chunk-D6KT763C.mjs} +1 -1
  13. package/dist/bin/hook-chunks/{chunk-3HDIQJ55.mjs → chunk-DGQYQSUK.mjs} +2 -2
  14. package/dist/bin/hook-chunks/{chunk-SNISJ7HR.mjs → chunk-EHBEHLYN.mjs} +1 -1
  15. package/dist/bin/hook-chunks/{chunk-F652GI4F.mjs → chunk-FEH4IPIC.mjs} +1 -1
  16. package/dist/bin/hook-chunks/{chunk-YORSHLFH.mjs → chunk-HBLR7BVG.mjs} +1 -1
  17. package/dist/bin/hook-chunks/{chunk-VAXQ5IDD.mjs → chunk-IKUGYUAI.mjs} +1 -1
  18. package/dist/bin/hook-chunks/{chunk-PTVXWPQH.mjs → chunk-LGJUQEAU.mjs} +1 -1
  19. package/dist/bin/hook-chunks/{chunk-NN65WGGN.mjs → chunk-LJLUP4FF.mjs} +1 -1
  20. package/dist/bin/hook-chunks/{chunk-GJFWVCTS.mjs → chunk-LPB3HUJ2.mjs} +1 -1
  21. package/dist/bin/hook-chunks/{chunk-OVR6RUUZ.mjs → chunk-M3ZOJVPA.mjs} +2 -2
  22. package/dist/bin/hook-chunks/{chunk-GSMDQ7VM.mjs → chunk-OIEZAHLC.mjs} +1 -1
  23. package/dist/bin/hook-chunks/{chunk-GVJZPOG2.mjs → chunk-PSP56GGF.mjs} +1 -1
  24. package/dist/bin/hook-chunks/{chunk-R77TXXPP.mjs → chunk-PXJKXBTM.mjs} +1 -1
  25. package/dist/bin/hook-chunks/{chunk-MECJJJ7R.mjs → chunk-QZSJSXJV.mjs} +1 -1
  26. package/dist/bin/hook-chunks/{chunk-A4OFZ2SK.mjs → chunk-RAHFKGM6.mjs} +1 -1
  27. package/dist/bin/hook-chunks/{chunk-2H57GV2T.mjs → chunk-RJ2BRRMH.mjs} +2 -2
  28. package/dist/bin/hook-chunks/{chunk-DAOC3T5G.mjs → chunk-RRWPDRYR.mjs} +2 -2
  29. package/dist/bin/hook-chunks/{chunk-XGYCAVB2.mjs → chunk-TFGJVT6F.mjs} +1 -1
  30. package/dist/bin/hook-chunks/{chunk-RNCLLUMK.mjs → chunk-UHW35BPE.mjs} +4 -4
  31. package/dist/bin/hook-chunks/{chunk-OFVLGJ76.mjs → chunk-UQVJQME2.mjs} +1 -1
  32. package/dist/bin/hook-chunks/{chunk-HZXDF2TQ.mjs → chunk-W5OWBOLH.mjs} +1 -1
  33. package/dist/bin/hook-chunks/{chunk-UDUUEZD3.mjs → chunk-XEFIIDHM.mjs} +1 -1
  34. package/dist/bin/hook-chunks/{chunk-CULYIJJZ.mjs → chunk-YG7KBQYJ.mjs} +1 -1
  35. package/dist/bin/hook-chunks/{chunk-P43HDWI5.mjs → chunk-YKMJI6TF.mjs} +2 -2
  36. package/dist/bin/hook-chunks/{codex-skill-MNY46575.mjs → codex-skill-7IURPY6B.mjs} +1 -1
  37. package/dist/bin/hook-chunks/{command-installer-ZOQQLRCI.mjs → command-installer-BVHQUSL4.mjs} +1 -1
  38. package/dist/bin/hook-chunks/{config-manager-KJCMN7PV.mjs → config-manager-KYC7WUOS.mjs} +1 -1
  39. package/dist/bin/hook-chunks/{cwd-changed-KXOCN55N.mjs → cwd-changed-56X7BNS6.mjs} +1 -1
  40. package/dist/bin/hook-chunks/{distill-R477XZE3.mjs → distill-6C6YIFOE.mjs} +1 -1
  41. package/dist/bin/hook-chunks/{enriched-recall-65X44HBM.mjs → enriched-recall-6ZZNKAJZ.mjs} +1 -1
  42. package/dist/bin/hook-chunks/{format-UF2TLTKX.mjs → format-YOYMJSLY.mjs} +1 -1
  43. package/dist/bin/hook-chunks/{judgment-receipt-NXL5Q4CE.mjs → judgment-receipt-2U7D6HS4.mjs} +1 -1
  44. package/dist/bin/hook-chunks/{land-cue-SRIIDHMN.mjs → land-cue-SS23JBAX.mjs} +1 -1
  45. package/dist/bin/hook-chunks/{land-synthesis-ANVOY7AM.mjs → land-synthesis-OATL5BNP.mjs} +1 -1
  46. package/dist/bin/hook-chunks/{legacy-crew-sweep-PSJCO5UP.mjs → legacy-crew-sweep-NH5EWEXF.mjs} +2 -2
  47. package/dist/bin/hook-chunks/{memory-index-7LM2BMWZ.mjs → memory-index-677MUBCZ.mjs} +1 -1
  48. package/dist/bin/hook-chunks/{notification-2TZO3WRM.mjs → notification-S2IJJ6JW.mjs} +1 -1
  49. package/dist/bin/hook-chunks/{pack-integrity-6VKUAISJ.mjs → pack-integrity-L3BL7CGO.mjs} +1 -1
  50. package/dist/bin/hook-chunks/{pack-manager-KQBNP6XR.mjs → pack-manager-SU53HCKK.mjs} +1 -1
  51. package/dist/bin/hook-chunks/{planning-ZQNNDOEL.mjs → planning-ZYFCFU7N.mjs} +2 -2
  52. package/dist/bin/hook-chunks/{post-edit-AEFFZFPO.mjs → post-edit-JD7YFEBZ.mjs} +1 -1
  53. package/dist/bin/hook-chunks/{pre-bash-3FACZOB5.mjs → pre-bash-VIABNO5E.mjs} +1 -1
  54. package/dist/bin/hook-chunks/{pre-commit-MDFDQ5QZ.mjs → pre-commit-NVQVXHZQ.mjs} +1 -1
  55. package/dist/bin/hook-chunks/{pre-edit-ORX656T5.mjs → pre-edit-V4RD45C4.mjs} +1 -1
  56. package/dist/bin/hook-chunks/{pre-package-ITHMLNGN.mjs → pre-package-KFJZXI5T.mjs} +1 -1
  57. package/dist/bin/hook-chunks/{pre-search-UFS2Z5VJ.mjs → pre-search-7KRU5D2O.mjs} +1 -1
  58. package/dist/bin/hook-chunks/{prjct-md-IKUVPUGT.mjs → prjct-md-FMCPUMQT.mjs} +1 -1
  59. package/dist/bin/hook-chunks/{project-agent-surfaces-VCOI4GHT.mjs → project-agent-surfaces-TD7BHI25.mjs} +1 -1
  60. package/dist/bin/hook-chunks/{project-memory-KRA3BH7A.mjs → project-memory-ZVZSLPB5.mjs} +1 -1
  61. package/dist/bin/hook-chunks/{project-style-evolution-363CLE32.mjs → project-style-evolution-7JS75AUP.mjs} +1 -1
  62. package/dist/bin/hook-chunks/{prompt-6L7B546V.mjs → prompt-S4MMIXH5.mjs} +2 -2
  63. package/dist/bin/hook-chunks/{purge-IPK4NJN6.mjs → purge-BDREPWEE.mjs} +1 -1
  64. package/dist/bin/hook-chunks/{retention-S2GGTVY2.mjs → retention-D2MVQLOF.mjs} +1 -1
  65. package/dist/bin/hook-chunks/{sdd-JIPV7QJP.mjs → sdd-ZO4DP23G.mjs} +1 -1
  66. package/dist/bin/hook-chunks/{session-continuity-DABISZYM.mjs → session-continuity-FNNUMOXB.mjs} +1 -1
  67. package/dist/bin/hook-chunks/{session-start-GJPAQ3GL.mjs → session-start-HA7IRBFX.mjs} +1 -1
  68. package/dist/bin/hook-chunks/{setup-TG5O5TKD.mjs → setup-7L3NXNRH.mjs} +2 -2
  69. package/dist/bin/hook-chunks/{shipping-VCLQS7GP.mjs → shipping-GX4HFYJ3.mjs} +4 -4
  70. package/dist/bin/hook-chunks/{spec-context-inference-MOOQL2VC.mjs → spec-context-inference-KER2R3F3.mjs} +1 -1
  71. package/dist/bin/hook-chunks/{spec-service-33UDKWXT.mjs → spec-service-G3RLCJ2G.mjs} +2 -2
  72. package/dist/bin/hook-chunks/{spec-task-breakdown-FES465AB.mjs → spec-task-breakdown-YPJ76OWR.mjs} +1 -1
  73. package/dist/bin/hook-chunks/{stop-IWI5SQG6.mjs → stop-HPZCLDPM.mjs} +2 -2
  74. package/dist/bin/hook-chunks/{subagent-start-NJZOWV2P.mjs → subagent-start-7KZUTKV5.mjs} +1 -1
  75. package/dist/bin/hook-chunks/{subagent-stop-R6HIIVWQ.mjs → subagent-stop-7C72RWGO.mjs} +1 -1
  76. package/dist/bin/hook-chunks/{surface-attribution-JYE6VDZR.mjs → surface-attribution-PDYR6DVA.mjs} +1 -1
  77. package/dist/bin/hook-chunks/{task-service-NSS5SVJE.mjs → task-service-RRFG5P7N.mjs} +1 -1
  78. package/dist/bin/hook-chunks/{tdd-AKXWUK2Y.mjs → tdd-XQUU4C23.mjs} +1 -1
  79. package/dist/bin/hook-chunks/{template-loader-KLKEG7XM.mjs → template-loader-4QMIMOBY.mjs} +1 -1
  80. package/dist/bin/hook-chunks/{weak-model-mode-JQ23PTXN.mjs → weak-model-mode-M6D23IIM.mjs} +1 -1
  81. package/dist/bin/hook-chunks/{work-scope-C7BJX6QE.mjs → work-scope-6FG6PSAV.mjs} +1 -1
  82. package/dist/bin/hook-fast-darwin-arm64 +0 -0
  83. package/dist/bin/hook-fast-darwin-x64 +0 -0
  84. package/dist/bin/prjct-core.mjs +2 -2
  85. package/dist/bin/prjct-hooks.mjs +1 -1
  86. package/dist/daemon/entry.mjs +1 -1
  87. package/dist/mcp/server.mjs +1 -1
  88. package/package.json +1 -1
@@ -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
- import{a as se,b as v,d as G}from"./chunk-PW3KYKVS.mjs";import{b as re}from"./chunk-45I2C2UB.mjs";import{a as P}from"./chunk-EM6ZDJAK.mjs";import{c as ne}from"./chunk-L4COZ7ZH.mjs";import{b as te}from"./chunk-2UC4DTDO.mjs";import{a as B}from"./chunk-FGQZ62ZP.mjs";import{a as Z,b as ee}from"./chunk-TRMBRDKH.mjs";import"./chunk-TPESWBA7.mjs";import{b as Q}from"./chunk-ODWWIFSN.mjs";import{c as L}from"./chunk-ZZ65CN5F.mjs";import{c as V}from"./chunk-OVR6RUUZ.mjs";import"./chunk-Y5NQV46G.mjs";import{a as g}from"./chunk-DAOC3T5G.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-OFVLGJ76.mjs";import{g as Ve,h as Qe}from"./chunk-UUULLTQV.mjs";import{a as Y,c as U}from"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import{b as S}from"./chunk-HZXDF2TQ.mjs";import"./chunk-MEQS4VPO.mjs";import{a as K,b as Ye,e as b,f as I,g as R}from"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import{b as q,e as ze,s as z,t as Ke}from"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import{e as A,g as D,l as C,o as X}from"./chunk-CTWZQ7YI.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-HE5RSIHG.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import{a as c,b as M,e as T}from"./chunk-E66B27AL.mjs";import k from"node:fs/promises";import We from"node:path";import Ze from"node:crypto";import et from"node:fs/promises";var ce="friction-detector",ie="friction-promote",oe=5,ae=400,ue=160,tt=[/^\s*no[,.!\s]/i,/^\s*nope\b/i,/^\s*stop\b/i,/^\s*wait\b/i,/^\s*cancel\b/i],rt=[/\bshould be\b/i,/\brather than\b/i,/\binstead\b/i],nt=[/\bdoesn'?t work\b/i,/\bbroken\b/i,/\bagain\b.*\bsame\b/i];async function le(r,e,t,s={}){let n=s.preloadedLines?s.preloadedLines:await et.readFile(e,"utf-8").then(st).catch(()=>null);if(!n)return{signalsRecorded:0,signalsSkipped:0,failures:[]};let i=it(n);if(i.length===0)return{signalsRecorded:0,signalsSkipped:0,failures:[]};let o=i.slice(0,oe).map(p=>({category:p.category,expectedBehavior:"Follow the user constraint without requiring correction.",observedBehavior:`The assistant response triggered user ${p.category}.`,relatedRuleId:null})),a=pt(r),u=fe(r)??void 0;return{...await i.slice(0,oe).reduce(async(p,m)=>{let d=await p,y=de(m.excerpt).slice(0,12);if(a.has(y))return await ut(r,u,m).catch(()=>{}),{...d,signalsSkipped:d.signalsSkipped+1};try{return await g.remember(r,{type:"improvement-signal",content:ct(m),tags:{source:ce,category:m.category,...s.runtime?{runtime:s.runtime}:{},...s.model?{model:s.model}:{},...t?{session:t}:{},key:y},provenance:"extracted",projectId:u}),a.add(y),{...d,signalsRecorded:d.signalsRecorded+1}}catch{return{...d,signalsSkipped:d.signalsSkipped+1}}},Promise.resolve({signalsRecorded:0,signalsSkipped:0})),failures:o}}c(le,"detectFriction");function st(r){return v(r)}c(st,"parseJsonl");function it(r){let e={signals:[],lastAssistantText:""};for(let t of r){let s=t.role??t.message?.role,n=at(t.content??t.message?.content);if(!n)continue;if(s==="assistant"){e.lastAssistantText=n;continue}if(s!=="user")continue;let i=ot(n.slice(0,300));i&&e.signals.push({excerpt:n.slice(0,ae).trim(),category:i,precedingAssistantPreview:e.lastAssistantText.slice(0,ae).trim()})}return e.signals}c(it,"extractSignals");function ot(r){return nt.some(e=>e.test(r))?"complaint":tt.some(e=>e.test(r))?"negation":rt.some(e=>e.test(r))?"correction":null}c(ot,"classify");function at(r){return typeof r=="string"?r:Array.isArray(r)?r.map(e=>{if(typeof e=="string")return e;if(e&&typeof e=="object"&&"text"in e){let t=e.text;return typeof t=="string"?t:""}return""}).join(`
8
+ import{a as se,b as v,d as G}from"./chunk-PW3KYKVS.mjs";import{b as re}from"./chunk-45I2C2UB.mjs";import{a as P}from"./chunk-EM6ZDJAK.mjs";import{c as ne}from"./chunk-L4COZ7ZH.mjs";import{b as te}from"./chunk-2UC4DTDO.mjs";import{a as B}from"./chunk-FGQZ62ZP.mjs";import{a as Z,b as ee}from"./chunk-TRMBRDKH.mjs";import"./chunk-TPESWBA7.mjs";import{b as Q}from"./chunk-ODWWIFSN.mjs";import{c as L}from"./chunk-ZZ65CN5F.mjs";import{c as V}from"./chunk-M3ZOJVPA.mjs";import"./chunk-Y5NQV46G.mjs";import{a as g}from"./chunk-RRWPDRYR.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-UQVJQME2.mjs";import{g as Ve,h as Qe}from"./chunk-UUULLTQV.mjs";import{a as Y,c as U}from"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import{b as S}from"./chunk-W5OWBOLH.mjs";import"./chunk-MEQS4VPO.mjs";import{a as K,b as Ye,e as b,f as I,g as R}from"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import{b as q,e as ze,s as z,t as Ke}from"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import{e as A,g as D,l as C,o as X}from"./chunk-CTWZQ7YI.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-D4S3IRD3.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import{a as c,b as M,e as T}from"./chunk-E66B27AL.mjs";import k from"node:fs/promises";import We from"node:path";import Ze from"node:crypto";import et from"node:fs/promises";var ce="friction-detector",ie="friction-promote",oe=5,ae=400,ue=160,tt=[/^\s*no[,.!\s]/i,/^\s*nope\b/i,/^\s*stop\b/i,/^\s*wait\b/i,/^\s*cancel\b/i],rt=[/\bshould be\b/i,/\brather than\b/i,/\binstead\b/i],nt=[/\bdoesn'?t work\b/i,/\bbroken\b/i,/\bagain\b.*\bsame\b/i];async function le(r,e,t,s={}){let n=s.preloadedLines?s.preloadedLines:await et.readFile(e,"utf-8").then(st).catch(()=>null);if(!n)return{signalsRecorded:0,signalsSkipped:0,failures:[]};let i=it(n);if(i.length===0)return{signalsRecorded:0,signalsSkipped:0,failures:[]};let o=i.slice(0,oe).map(p=>({category:p.category,expectedBehavior:"Follow the user constraint without requiring correction.",observedBehavior:`The assistant response triggered user ${p.category}.`,relatedRuleId:null})),a=pt(r),u=fe(r)??void 0;return{...await i.slice(0,oe).reduce(async(p,m)=>{let d=await p,y=de(m.excerpt).slice(0,12);if(a.has(y))return await ut(r,u,m).catch(()=>{}),{...d,signalsSkipped:d.signalsSkipped+1};try{return await g.remember(r,{type:"improvement-signal",content:ct(m),tags:{source:ce,category:m.category,...s.runtime?{runtime:s.runtime}:{},...s.model?{model:s.model}:{},...t?{session:t}:{},key:y},provenance:"extracted",projectId:u}),a.add(y),{...d,signalsRecorded:d.signalsRecorded+1}}catch{return{...d,signalsSkipped:d.signalsSkipped+1}}},Promise.resolve({signalsRecorded:0,signalsSkipped:0})),failures:o}}c(le,"detectFriction");function st(r){return v(r)}c(st,"parseJsonl");function it(r){let e={signals:[],lastAssistantText:""};for(let t of r){let s=t.role??t.message?.role,n=at(t.content??t.message?.content);if(!n)continue;if(s==="assistant"){e.lastAssistantText=n;continue}if(s!=="user")continue;let i=ot(n.slice(0,300));i&&e.signals.push({excerpt:n.slice(0,ae).trim(),category:i,precedingAssistantPreview:e.lastAssistantText.slice(0,ae).trim()})}return e.signals}c(it,"extractSignals");function ot(r){return nt.some(e=>e.test(r))?"complaint":tt.some(e=>e.test(r))?"negation":rt.some(e=>e.test(r))?"correction":null}c(ot,"classify");function at(r){return typeof r=="string"?r:Array.isArray(r)?r.map(e=>{if(typeof e=="string")return e;if(e&&typeof e=="object"&&"text"in e){let t=e.text;return typeof t=="string"?t:""}return""}).join(`
9
9
  `).trim():""}c(at,"textOf");function ct(r){let e=lt(r.category),t=pe(r.excerpt),s=t?`Obey developer constraint: ${t}`:e.lesson,n=t?`Always: ${t}`:e.nextAction;return[`[${r.category}] Lesson: ${s}`,"What happened: The user pushed back after the assistant response.",`Why it mattered: ${e.why}`,`Pattern: ${e.pattern}`,`Anti-pattern: ${e.antiPattern}`,`Next action: ${n}`].join(`
10
10
  `)}c(ct,"formatSignal");function pe(r){let e=r.replace(/\s+/g," ").trim();if(!e)return null;let t=e.replace(/^\s*(?:nope|no|stop|wait|cancel)[,.!\s:—-]*/i,"").trim(),s=t.match(/\bshould be\b\s+(.+?)$/i);if(s?.[1])return E(`Prefer ${s[1]}`);let n=t.match(/^(.+?)\s+rather than\s+(.+?)$/i);if(n?.[1]&&n[2])return E(`Prefer ${n[1].trim()} rather than ${n[2].trim()}`);let i=t.match(/\b(?:use|prefer|do|run|ship|write|keep)\s+(.+?)\s+instead(?:\s+of\s+(.+))?$/i);if(i?.[1]){let l=i[2]?` instead of ${i[2].trim()}`:" instead";return E(`Use ${i[1].trim()}${l}`)}let o=t.match(/\binstead of\b\s+(.+?)$/i);if(o?.[1])return E(`Avoid ${o[1].trim()}`);let a=t.match(/\b(?:don'?t|do not|never)\s+(.+?)$/i);if(a?.[1])return E(`Never ${a[1].trim()}`);let u=t.match(/\balways\s+(.+?)$/i);if(u?.[1])return E(`Always ${u[1].trim()}`);if(t.length>=12&&t.length<=ue&&/^(?:run|use|do|ship|write|keep|add|fix|remove|prefer|test|check|verify|read|ask|stop|start)\b/i.test(t)){let l=t.charAt(0).toUpperCase()+t.slice(1);return E(l.replace(/[.!?]+$/,""))}return null}c(pe,"extractSpecificConstraint");function E(r){let e=r.replace(/\s+/g," ").trim().replace(/^[-*•]\s+/,"").replace(/[.!?]+$/,"").slice(0,ue);return e.length<12||/^(?:nope|no|stop|wait|cancel)\b/i.test(e)?null:e}c(E,"cleanConstraint");async function ut(r,e,t){if(!e)return;let s=pe(t.excerpt);if(!s)return;let n=`Always: ${s}`,i=`fp:${de(s).slice(0,12)}`;try{if(g.recall(e,{types:["feedback"],tags:{source:ie,key:i},limit:1,dedupeByKey:!1}).length>0)return;await g.remember(r,{type:"feedback",content:n,tags:{source:ie,key:i,category:t.category,from:"recurring-friction"},provenance:"extracted",projectId:e})}catch{}}c(ut,"maybePromoteStandingPreference");function lt(r){return r==="complaint"?{lesson:"Treat explicit failure complaints as evidence that the last result needs diagnosis, not repetition.",why:"The user reported that the delivered behavior or command did not work.",pattern:"User names a broken or non-working result after an assistant action.",antiPattern:"Retrying the same path or moving on without isolating the failure.",nextAction:"Stop, inspect the failing output or assumption, and propose the smallest verifiable fix."}:r==="correction"?{lesson:"Update the working assumption when the user corrects the intended direction.",why:"The assistant was using an assumption that did not match what the user wanted.",pattern:"User redirects the implementation or workflow with a correction.",antiPattern:"Continuing with the original plan after the user clarified a different target.",nextAction:"Restate the corrected target as an actionable rule before continuing."}:{lesson:"Recalibrate before continuing when the user rejects the assistant\u2019s last step.",why:"The assistant likely violated sequencing, scope, or approval expectations.",pattern:"User immediately rejects an assistant action or proposed next step.",antiPattern:"Treating the rejected action as acceptable and continuing without changing course.",nextAction:"Pause, convert the pushback into a workflow constraint, and adjust the next tool use."}}c(lt,"lessonTemplate");function de(r){let e=r.toLowerCase().replace(/\s+/g," ").trim();return Ze.createHash("sha256").update(e).digest("hex")}c(de,"hashSignal");function pt(r){try{let e=fe(r);if(!e)return new Set;let t=g.recall(e,{types:["improvement-signal"],tags:{source:ce},limit:100,dedupeByKey:!1}),s=new Set;for(let n of t){let i=n.tags.key;i&&s.add(i)}return s}catch{return new Set}}c(pt,"projectMemoryHashes");function fe(r){try{let e=M("node:fs"),s=M("node:path").join(r,".prjct","prjct.config.json"),n=e.readFileSync(s,"utf-8");return JSON.parse(n).projectId??null}catch{return null}}c(fe,"projectIdFromPath");var dt=32;function ge(r={}){let t=(r.hookHost===void 0?process.env.PRJCT_HOOK_HOST:r.hookHost)?.trim().toLowerCase().slice(0,dt);return t&&Z.has(t)?t:r.detectedRuntime??ee()}c(ge,"resolveInstructionRuntime");X();var he="lean-detector",ft="lean-debt-growth",gt=3,me=["off","lite","full","ultra"];function mt(r){let e=r?.lean?.mode;if(e&&me.includes(e))return e;let t=process.env.PRJCT_LEAN_MODE?.toLowerCase();return t&&me.includes(t)?t:"off"}c(mt,"effectiveMode");async function ye(r,e){let t={active:!1,total:0,previous:0,persisted:!1},s=e!==void 0?e:await S.readConfig(r).catch(()=>null);if(!s?.projectId||mt(s)==="off")return t;t.active=!0;try{let n=await ht(r);if(t.total=n,n===0)return t;let i=yt(s.projectId);t.previous=i;let o=n-i;i>0&&o>=gt&&(await g.remember(r,{type:"lean-debt",content:`Lean debt growing: \`lean:\` markers rose by ${o} (now ${n}, was ${i}). Deferred simplifications are accumulating \u2014 consider a leaning pass via \`prjct lean debt\`.`,tags:{source:he,pattern:ft,total:String(n),previous:String(i),delta:String(o)},provenance:"inferred",projectId:s.projectId}),t.persisted=!0)}catch{}return t}c(ye,"detectAndPersistLeanDebt");async function ht(r){let e=await A(["grep","-cI","-e","lean:"],{cwd:r,maxBuffer:16777216});if(!e.ok){if(D(e,1))return 0;C(e)}return e.stdout.split(`
11
11
  `).reduce((t,s)=>{let n=s.lastIndexOf(":");if(n<=0)return t;let i=Number.parseInt(s.slice(n+1),10);return Number.isFinite(i)?t+i:t},0)}c(ht,"measureLeanMarkers");function yt(r){try{let{prjctDb:e}=(R(),T(I)),t=e.query(r,"SELECT data FROM events WHERE type = 'memory.remember.lean-debt' ORDER BY id DESC LIMIT 50");for(let s of t){let n=(()=>{try{return JSON.parse(s.data)}catch{return null}})();if(!n||typeof n!="object")continue;let i=n.tags;if(!i||i.source!==he)continue;let o=typeof i.total=="string"?Number.parseInt(i.total,10):0;if(Number.isFinite(o))return o}}catch{}return 0}c(yt,"collectPreviousSnapshot");import wt from"node:path";X();var bt="hot-file",we="pattern-detector-auto",kt="recurring-bug",be="pattern-detector-recurring",Rt="tech-debt-growth",ke="pattern-detector-debt",O=7,St=3,N=30,vt=2,Tt=5,Et=[/^package(-lock)?\.json$/,/^bun\.lock(b)?$/,/^pnpm-lock\.yaml$/,/^yarn\.lock$/,/^CHANGELOG\.md$/,/^\.gitignore$/,/\.snap$/,/^dist\//,/^node_modules\//];async function Re(r,e){let t={scanned:0,hotFiles:[],persisted:0,skipped:[],errors:[]},s=e!==void 0?e:await S.readConfig(r).catch(()=>null);if(!s?.projectId)return t.errors.push("no project config"),t;try{let n=await _t(r);if(t.scanned+=n.length,t.hotFiles=n,n.length>0){let i=Mt(s.projectId);for(let o of n){if(i.has(o.path)){t.skipped.push({reason:"already-marked-this-window",file:o.path});continue}try{await g.remember(r,{type:"learning",content:`Hot file: \`${o.path}\` \u2014 ${o.touches} touches in the last ${O} days. Worth a refactor pass or a deliberate decision about why it churns this often.`,tags:{source:we,pattern:bt,file:o.path,touches:String(o.touches),window_days:String(O)},provenance:"inferred"}),t.persisted+=1}catch(a){t.errors.push(`remember failed for ${o.path}: ${a.message}`)}}}}catch(n){t.errors.push(`hot-file detection failed: ${n.message}`)}try{let n=At(s.projectId);if(n.length>0){let i=Dt(s.projectId);for(let o of n){if(i.has(o.topic)){t.skipped.push({reason:"recurring-bug-already-marked",file:o.topic});continue}try{await g.remember(r,{type:"learning",content:`Recurring bug pattern: gotchas tagged \`topic:${o.topic}\` reported ${o.occurrences} times in the last ${N} days. Likely a real underlying issue \u2014 consider a focused investigation before patching the next instance.`,tags:{source:be,pattern:kt,topic:o.topic,occurrences:String(o.occurrences),window_days:String(N)},provenance:"inferred"}),t.persisted+=1}catch(a){t.errors.push(`remember failed for recurring ${o.topic}: ${a.message}`)}}}}catch(n){t.errors.push(`recurring-bug detection failed: ${n.message}`)}try{let n=await Ct(r);if(n.totalCount>0){let i=xt(s.projectId),o=n.totalCount-i;if(i>0&&o>=Tt)try{await g.remember(r,{type:"learning",content:`Tech debt growing: TODO/FIXME/XXX count rose by ${o} (now ${n.totalCount}, was ${i}). Consider a focused debt-reduction pass before adding more features.`,tags:{source:ke,pattern:Rt,total:String(n.totalCount),previous:String(i),delta:String(o)},provenance:"inferred"}),t.persisted+=1}catch(a){t.errors.push(`remember failed for tech-debt: ${a.message}`)}}}catch(n){t.errors.push(`tech-debt detection failed: ${n.message}`)}return t}c(Re,"detectAndPersistPatterns");async function _t(r){let e=await A(["log",`--since=${O}.days.ago`,"--name-only","--pretty=format:","-z"],{cwd:r,maxBuffer:16777216,timeoutMs:15e3});if(!e.ok){if(e.kind==="exit")return[];C(e)}let t=new Map;for(let n of e.stdout.split("\0")){let i=n.trim();i&&(It(i)||t.set(i,(t.get(i)??0)+1))}let s=[];for(let[n,i]of t)i<St||s.push({path:n,touches:i});return s.sort((n,i)=>i.touches-n.touches),s}c(_t,"detectHotFiles");function It(r){let e=wt.basename(r);for(let t of Et)if(t.test(r)||t.test(e))return!0;return!1}c(It,"isIgnored");function At(r){try{let{prjctDb:e}=(R(),T(I)),t=new Date(Date.now()-N*24*60*60*1e3).toISOString(),s=e.query(r,"SELECT data, timestamp FROM events WHERE type = 'memory.remember.gotcha' AND timestamp >= ? ORDER BY id DESC LIMIT 500",t),n=new Map;for(let o of s){let a=(()=>{try{return JSON.parse(o.data)}catch{return null}})();if(!a||typeof a!="object")continue;let u=a.tags;if(!u||u.source==="transcript-auto")continue;let l=typeof u.topic=="string"?u.topic:void 0,p=typeof u.area=="string"?u.area:void 0,m=l??p;m&&n.set(m,(n.get(m)??0)+1)}let i=[];for(let[o,a]of n)a<vt||i.push({topic:o,occurrences:a});return i.sort((o,a)=>a.occurrences-o.occurrences),i}catch{return[]}}c(At,"detectRecurringBugs");async function Ct(r){let e=await A(["grep","-cE","\\b(TODO|FIXME|XXX)\\b"],{cwd:r,maxBuffer:16777216});if(!e.ok){if(D(e,1))return{totalCount:0};C(e)}return{totalCount:e.stdout.split(`
@@ -14,4 +14,4 @@ import{a as se,b as v,d as G}from"./chunk-PW3KYKVS.mjs";import{b as re}from"./ch
14
14
  `).trim():""}c(Kt,"textOf");function Ce(r){let e=new Set;for(let t of r.toLowerCase().split(/[^a-z0-9]+/))t.length<De||Le.has(t)||e.add(t);return e}c(Ce,"tokenize");function Yt(r){let e=[...r].filter(s=>s.length>=Wt);if(e.length>0)return new Set(e);let t=[...r].sort((s,n)=>n.length-s.length||s.localeCompare(n))[0]??"";return t?new Set([t]):new Set}c(Yt,"signatureOf");function j(r){let e=new Set;for(let t of r)for(let s of t.split("/")){let n=s.replace(/\.[a-z0-9]+$/i,"").toLowerCase();n.length>=De&&!Le.has(n)&&e.add(n)}return e}c(j,"fileStems");function xe(r,e){let t=j([r]);for(let s of j([e]))if(t.has(s))return!0;return!1}c(xe,"sharesStem");function Vt(r){let e=r.evidenceFile!==""?`touched \`${r.evidenceFile}\``:"worked the same area";return[`[skill-miss] Unused project knowledge (${r.memType}, ${r.memId}): "${r.excerpt}"`,`This session ${e} but never referenced it. Apply it, or supersede it via: prjct remember decision "<resolution>" --tags resolves:skill-miss,relates:${r.memId}`].join(`
15
15
  `)}c(Vt,"formatSkillMiss");function Qt(r,e){let t=`${r}::${e.toLowerCase().replace(/\s+/g," ").trim()}`;return jt.createHash("sha256").update(t).digest("hex")}c(Qt,"hashKey");function Zt(r,e){let t=g.recall(r,{types:[...Ut],limit:120}),s=Date.now()-Bt,n=[];for(let i of t)i.provenance!=="inferred"&&(Date.parse(i.rememberedAt)>s||e&&i.tags.session===e||n.push({id:i.id,type:i.type,content:i.content,fileTag:i.tags.file??"",rememberedAt:i.rememberedAt,provenance:i.provenance,session:i.tags.session??""}));return n}c(Zt,"recallCandidates");function er(r){try{let e=g.recall(r,{types:["improvement-signal"],tags:{source:Me},limit:100,dedupeByKey:!1}),t=new Set;for(let s of e)s.tags.key&&t.add(s.tags.key);return t}catch{return new Set}}c(er,"existingSkillMissKeys");function tr(r){try{let e=M("node:fs"),s=M("node:path").join(r,".prjct","prjct.config.json");return JSON.parse(e.readFileSync(s,"utf-8")).projectId??null}catch{return null}}c(tr,"projectIdFromPath");import rr from"node:crypto";import nr from"node:fs/promises";var $e="transcript-auto",sr="v2",je=80,He=20,H=1500,ir=12,Oe=4,or=[{phrase:"decided to",type:"decision"},{phrase:"we chose",type:"decision"},{phrase:"going with",type:"decision"},{phrase:"the right call",type:"decision"},{phrase:"best approach is",type:"decision"},{phrase:"we will use",type:"decision"},{phrase:"shipping with",type:"decision"},{phrase:"turns out that",type:"learning"},{phrase:"now i understand",type:"learning"},{phrase:"the key insight",type:"learning"},{phrase:"i learned that",type:"learning"},{phrase:"discovered that",type:"learning"},{phrase:"root cause is",type:"learning"},{phrase:"root cause was",type:"learning"},{phrase:"the fix is",type:"learning"},{phrase:"gotcha:",type:"gotcha"},{phrase:"bug:",type:"gotcha"},{phrase:"fails when",type:"gotcha"},{phrase:"breaks when",type:"gotcha"},{phrase:"be careful",type:"gotcha"},{phrase:"never do this",type:"gotcha"},{phrase:"trap:",type:"gotcha"},{phrase:"important:",type:"fact"},{phrase:"always use",type:"fact"},{phrase:"never write",type:"fact"},{phrase:"the pattern is",type:"pattern"},{phrase:"anti-pattern:",type:"anti-pattern"},{phrase:"antipattern:",type:"anti-pattern"}],Fe=[{re:/^(?:[-*•]\s+)?(?:\*\*)?decision(?:\*\*)?\s*[:—-]\s+/i,type:"decision",phrase:"label:decision"},{re:/^(?:[-*•]\s+)?(?:\*\*)?(learning|insight)(?:\*\*)?\s*[:—-]\s+/i,type:"learning",phrase:"label:learning"},{re:/^(?:[-*•]\s+)?(?:\*\*)?(gotcha|trap|warning)(?:\*\*)?\s*[:—-]\s+/i,type:"gotcha",phrase:"label:gotcha"},{re:/^(?:[-*•]\s+)?(?:\*\*)?(fact|note)(?:\*\*)?\s*[:—-]\s+/i,type:"fact",phrase:"label:fact"},{re:/^(?:[-*•]\s+)?(?:\*\*)?root\s*cause(?:\*\*)?\s*[:—-]\s+/i,type:"learning",phrase:"label:root-cause"},{re:/^(?:[-*•]\s+)?(?:\*\*)?pattern(?:\*\*)?\s*[:—-]\s+/i,type:"pattern",phrase:"label:pattern"},{re:/^(?:[-*•]\s+)?(?:\*\*)?anti[- ]?pattern(?:\*\*)?\s*[:—-]\s+/i,type:"anti-pattern",phrase:"label:anti-pattern"}];async function Ue(r,e,t,s={}){let n={scanned:0,ingested:0,skipped:[],errors:[]},i=s.preloadedConfig!==void 0?s.preloadedConfig:await S.readConfig(r).catch(()=>null);if(!i?.projectId)return n.errors.push("no project config"),n;let o=await(async()=>{if(s.preloadedLines)return s.preloadedLines;try{return v(await nr.readFile(e,"utf-8"))}catch(d){return n.errors.push(`transcript read failed: ${d.message}`),null}})();if(o===null)return n;let a=ar(o),u=cr(o);if(n.scanned=a.length+u.length,a.length===0&&u.length===0)return n;let l=[...dr(a),...lr(u)];if(l.length===0)return n;let p=gr(i.projectId),m=t?t.slice(0,12):"unknown";for(let d of l){if(p.has(d.hash)){n.skipped.push({reason:"duplicate",phrase:d.matchedPhrase});continue}try{await g.remember(r,{type:d.type,content:d.content,tags:{source:$e,capture:sr,session:m,hash:d.hash,phrase:d.matchedPhrase},provenance:"inferred",projectId:i.projectId}),n.ingested+=1}catch(y){n.errors.push(`remember failed: ${y.message}`)}}return n}c(Ue,"ingestTranscript");function ar(r){let e=[];for(let t of r){let s=Be(t);if(s!=="assistant")continue;let n=Ge(t);!n||n.length<je||e.push({role:s,text:n})}return e}c(ar,"projectMessages");function cr(r){let e=[];for(let t of r){let s=Be(t);if(s!=="user")continue;let n=Ge(t);!n||n.length<He||e.push({role:s,text:n})}return e}c(cr,"projectUserMessages");var ur=[{re:/^(?:please\s+)?always\b/i,phrase:"user:always"},{re:/^(?:please\s+)?never\b/i,phrase:"user:never"},{re:/\bi (?:always|never|prefer)\b/i,phrase:"user:i-prefer"},{re:/^(?:rule|preference)\s*[:—-]/i,phrase:"user:rule"},{re:/\bno more\s+(?:features?|feature\s+creep)\b/i,phrase:"user:no-more-features"},{re:/\bdon'?t add (?:more )?(?:features?|surface)\b/i,phrase:"user:dont-add-features"}];function lr(r){let e=[],t=new Set;for(let s of r){if(e.length>=Oe)break;let n=s.text.split(/\n/).map(o=>o.replace(/^[-*•]\s+/,"").trim()).filter(o=>o.length>=He),i=n.length>0?n:[s.text.trim()];for(let o of i){if(e.length>=Oe)break;let a=ur.find(p=>p.re.test(o));if(!a)continue;let u=o.length>H?`${o.slice(0,H)}\u2026`:o,l=Je(u);t.has(l)||(t.add(l),e.push({type:"feedback",content:u,hash:l,matchedPhrase:a.phrase}))}}return e}c(lr,"extractUserPreferenceCandidates");function Be(r){let e=r.role;if(typeof e=="string")return Ne(e);let t=r.message;if(t&&typeof t=="object"&&"role"in t){let n=t.role;if(typeof n=="string")return Ne(n)}let s=r.type;return s==="assistant"||s==="user"||s==="system"?s:null}c(Be,"inferRole");function Ne(r){let e=r.toLowerCase();return e==="assistant"||e==="user"||e==="system"?e:null}c(Ne,"normalizeRole");function Ge(r){let e=r.content===void 0&&r.message&&typeof r.message=="object"?r.message.content:r.content;if(typeof e=="string")return e.trim();if(Array.isArray(e)){let t=[];for(let s of e){if(!s||typeof s!="object")continue;let n=s;n.type==="text"&&typeof n.text=="string"&&t.push(n.text)}return t.join(`
16
16
  `).trim()}return""}c(Ge,"extractText");function pr(r){let e=r.trim();if(e.length<je)return null;for(let n of Fe)if(n.re.test(e))return{type:n.type,matchedPhrase:n.phrase};let t=e.toLowerCase(),s=or.find(n=>t.includes(n.phrase));return s?{type:s.type,matchedPhrase:s.phrase}:null}c(pr,"classifyCaptureParagraph");function dr(r){let e=[],t=new Set;for(let s of r){let n=fr(s.text);for(let i of n){if(e.length>=ir)return e;let o=pr(i);if(!o)continue;let a=i.length>H?`${i.slice(0,H)}\u2026`:i,u=Je(a);t.has(u)||(t.add(u),e.push({type:o.type,content:a,hash:u,matchedPhrase:o.matchedPhrase}))}}return e}c(dr,"extractCandidates");function fr(r){let e=r.split(/\n\s*\n/).map(s=>s.trim()).filter(Boolean),t=[];for(let s of e){let n=s.split(`
17
- `).map(o=>o.trim()).filter(Boolean);if(n.some(o=>Fe.some(a=>a.re.test(o)))&&n.length>1)for(let o of n)t.push(o);else t.push(s)}return t}c(fr,"splitParagraphs");function Je(r){return rr.createHash("sha256").update(r.toLowerCase().trim()).digest("hex").slice(0,16)}c(Je,"hashContent");function gr(r){let e=new Set;try{let{prjctDb:t}=(R(),T(I)),{REMEMBER_EVENT_RANGE:s}=(Qe(),T(Ve)),n=t.query(r,"SELECT data FROM events WHERE type >= ? AND type < ? ORDER BY id DESC LIMIT 500",...s);for(let i of n){let o=(()=>{try{return JSON.parse(i.data)}catch{return null}})();if(!o||typeof o!="object")continue;let a=o.tags;if(!a||a.source!==$e)continue;let u=a.hash;typeof u=="string"&&e.add(u)}}catch{}return e}c(gr,"collectExistingAutoHashes");var F=600*1e3,_=new Map;function mr(r){let e=r.replace(/[^a-zA-Z0-9._-]/g,"_");return We.join(te.runDir(),`stop-heavy-${e}.stamp`)}c(mr,"heavyStepStampPath");async function Xe(r,e,t=!0){if(await k.stat(r).then(i=>e-i.mtimeMs<F).catch(()=>!1))return!1;let n=`${r}.lock`;try{await k.mkdir(n)}catch(i){if(i.code!=="EEXIST")throw i;return!await k.stat(n).then(a=>e-a.mtimeMs>=F).catch(()=>!1)||!t?!1:(await k.rmdir(n).catch(()=>{}),Xe(r,e,!1))}try{return await k.stat(r).then(o=>e-o.mtimeMs<F).catch(()=>!1)?!1:(await k.writeFile(r,String(e)),!0)}finally{await k.rmdir(n).catch(()=>{})}}c(Xe,"claimHeavyStep");async function hr(r){let e=Date.now(),t=_.get(r)??0;if(e-t<F)return!1;try{let s=mr(r);await k.mkdir(We.dirname(s),{recursive:!0});let n=await Xe(s,e);return _.size>32&&_.clear(),_.set(r,e),n}catch{}return _.size>32&&_.clear(),_.set(r,e),!0}c(hr,"heavyStepsDue");function Ln(r=process.cwd(),e){return ne({event:"Stop",projectPath:r,afterEmit:c(async(t,s)=>{let n=await S.readConfig(s).catch(()=>null);if(!n?.projectId)return;let i=ge(),o=await hr(n.projectId),a={};if(o&&t.transcript_path){let l=await k.readFile(t.transcript_path,"utf-8").catch(()=>null);l!==null&&(a.transcriptLines=v(l))}let u=se(a.transcriptLines??[]);if(o)try{let{collectActiveTasks:l}=await import("./task-overview-6ZQKJGSH.mjs"),p=await l(n.projectId,s);a.activeTaskId=p.current?.id,a.activeTaskDescription=p.current?.description,a.activeTaskStartedAt=p.current?.startedAt}catch{}if(a.transcriptLines&&a.transcriptLines.length>0)try{if(a.transcriptUsage=G(a.transcriptLines),a.transcriptUsage.tokensIn+a.transcriptUsage.tokensOut>0){let l=a.activeTaskStartedAt?{sinceIso:a.activeTaskStartedAt}:void 0,p=G(a.transcriptLines,l);if(a.activeTaskId&&p.tokensIn+p.tokensOut>0){B(n.projectId,a.activeTaskId,p.tokensIn,p.tokensOut,{description:a.activeTaskDescription,agent:i,source:`${i}-transcript`});try{let{sumTranscriptUsageByModel:m}=await import("./transcript-jsonl-6X4DDD6R.mjs");for(let[d,y]of m(a.transcriptLines,l))y.tokensIn+y.tokensOut<=0||B(n.projectId,a.activeTaskId,y.tokensIn,y.tokensOut,{model:d,agent:i,source:`${i}-transcript:${d}`})}catch{}}}}catch{}if(re({projectId:n.projectId,sessionId:t.session_id,directory:s,taskId:a.activeTaskId,goal:a.activeTaskDescription,tokensIn:a.transcriptUsage?.tokensIn,tokensOut:a.transcriptUsage?.tokensOut,agent:i,model:u}),o&&t.transcript_path)try{await Ue(s,t.transcript_path,t.session_id??null,{preloadedConfig:n,preloadedLines:a.transcriptLines})}catch{}if(o){try{await Re(s,n)}catch{}try{await ye(s,n)}catch{}try{let l=await ve(n.projectId);await Te(n.projectId,l),P.pruneRetained(n.projectId)}catch{}}if(o&&t.transcript_path)try{let l=await le(s,t.transcript_path,t.session_id??null,{preloadedLines:a.transcriptLines,runtime:i,model:u});for(let p of l.failures)try{P.record(n.projectId,{source:"friction-detector",runtime:i,model:u,sessionId:t.session_id??null,taskId:a.activeTaskId??null,...p})}catch{}l.signalsRecorded>0&&a.activeTaskId&&L.penalizeSurfaced(n.projectId,a.activeTaskId)}catch{}if(o&&t.transcript_path)try{let l=await Pe(s,t.transcript_path,t.session_id??null,{preloadedLines:a.transcriptLines,runtime:i,model:u});for(let p of l.failures)try{P.record(n.projectId,{source:"skill-miss-detector",runtime:i,model:u,sessionId:t.session_id??null,taskId:a.activeTaskId??null,...p})}catch{}}catch{}if(o)try{await V.backfill(n.projectId,n,new Date().toISOString())}catch{}if(o&&a.activeTaskId){try{let{synthesizeLandHandoff:l}=await import("./land-synthesis-ANVOY7AM.mjs");await l({projectId:n.projectId,projectPath:s,cycleDescription:a.activeTaskDescription??null,cycleId:a.activeTaskId,tokensIn:a.transcriptUsage?.tokensIn,tokensOut:a.transcriptUsage?.tokensOut,model:u})}catch{}try{let{synthesizeJudgmentReceipt:l}=await import("./judgment-receipt-NXL5Q4CE.mjs");await l({projectId:n.projectId,projectPath:s,cycleDescription:a.activeTaskDescription??null,cycleId:a.activeTaskId,tokensIn:a.transcriptUsage?.tokensIn,tokensOut:a.transcriptUsage?.tokensOut,model:u})}catch{}}try{let{flushIfLinked:l}=await import("./auto-flush-D3X3U4CP.mjs");await l(s,n)}catch{}},"afterEmit")},e)}c(Ln,"runStopHook");export{mr as heavyStepStampPath,hr as heavyStepsDue,Ln as runStopHook};
17
+ `).map(o=>o.trim()).filter(Boolean);if(n.some(o=>Fe.some(a=>a.re.test(o)))&&n.length>1)for(let o of n)t.push(o);else t.push(s)}return t}c(fr,"splitParagraphs");function Je(r){return rr.createHash("sha256").update(r.toLowerCase().trim()).digest("hex").slice(0,16)}c(Je,"hashContent");function gr(r){let e=new Set;try{let{prjctDb:t}=(R(),T(I)),{REMEMBER_EVENT_RANGE:s}=(Qe(),T(Ve)),n=t.query(r,"SELECT data FROM events WHERE type >= ? AND type < ? ORDER BY id DESC LIMIT 500",...s);for(let i of n){let o=(()=>{try{return JSON.parse(i.data)}catch{return null}})();if(!o||typeof o!="object")continue;let a=o.tags;if(!a||a.source!==$e)continue;let u=a.hash;typeof u=="string"&&e.add(u)}}catch{}return e}c(gr,"collectExistingAutoHashes");var F=600*1e3,_=new Map;function mr(r){let e=r.replace(/[^a-zA-Z0-9._-]/g,"_");return We.join(te.runDir(),`stop-heavy-${e}.stamp`)}c(mr,"heavyStepStampPath");async function Xe(r,e,t=!0){if(await k.stat(r).then(i=>e-i.mtimeMs<F).catch(()=>!1))return!1;let n=`${r}.lock`;try{await k.mkdir(n)}catch(i){if(i.code!=="EEXIST")throw i;return!await k.stat(n).then(a=>e-a.mtimeMs>=F).catch(()=>!1)||!t?!1:(await k.rmdir(n).catch(()=>{}),Xe(r,e,!1))}try{return await k.stat(r).then(o=>e-o.mtimeMs<F).catch(()=>!1)?!1:(await k.writeFile(r,String(e)),!0)}finally{await k.rmdir(n).catch(()=>{})}}c(Xe,"claimHeavyStep");async function hr(r){let e=Date.now(),t=_.get(r)??0;if(e-t<F)return!1;try{let s=mr(r);await k.mkdir(We.dirname(s),{recursive:!0});let n=await Xe(s,e);return _.size>32&&_.clear(),_.set(r,e),n}catch{}return _.size>32&&_.clear(),_.set(r,e),!0}c(hr,"heavyStepsDue");function Ln(r=process.cwd(),e){return ne({event:"Stop",projectPath:r,afterEmit:c(async(t,s)=>{let n=await S.readConfig(s).catch(()=>null);if(!n?.projectId)return;let i=ge(),o=await hr(n.projectId),a={};if(o&&t.transcript_path){let l=await k.readFile(t.transcript_path,"utf-8").catch(()=>null);l!==null&&(a.transcriptLines=v(l))}let u=se(a.transcriptLines??[]);if(o)try{let{collectActiveTasks:l}=await import("./task-overview-6ZQKJGSH.mjs"),p=await l(n.projectId,s);a.activeTaskId=p.current?.id,a.activeTaskDescription=p.current?.description,a.activeTaskStartedAt=p.current?.startedAt}catch{}if(a.transcriptLines&&a.transcriptLines.length>0)try{if(a.transcriptUsage=G(a.transcriptLines),a.transcriptUsage.tokensIn+a.transcriptUsage.tokensOut>0){let l=a.activeTaskStartedAt?{sinceIso:a.activeTaskStartedAt}:void 0,p=G(a.transcriptLines,l);if(a.activeTaskId&&p.tokensIn+p.tokensOut>0){B(n.projectId,a.activeTaskId,p.tokensIn,p.tokensOut,{description:a.activeTaskDescription,agent:i,source:`${i}-transcript`});try{let{sumTranscriptUsageByModel:m}=await import("./transcript-jsonl-6X4DDD6R.mjs");for(let[d,y]of m(a.transcriptLines,l))y.tokensIn+y.tokensOut<=0||B(n.projectId,a.activeTaskId,y.tokensIn,y.tokensOut,{model:d,agent:i,source:`${i}-transcript:${d}`})}catch{}}}}catch{}if(re({projectId:n.projectId,sessionId:t.session_id,directory:s,taskId:a.activeTaskId,goal:a.activeTaskDescription,tokensIn:a.transcriptUsage?.tokensIn,tokensOut:a.transcriptUsage?.tokensOut,agent:i,model:u}),o&&t.transcript_path)try{await Ue(s,t.transcript_path,t.session_id??null,{preloadedConfig:n,preloadedLines:a.transcriptLines})}catch{}if(o){try{await Re(s,n)}catch{}try{await ye(s,n)}catch{}try{let l=await ve(n.projectId);await Te(n.projectId,l),P.pruneRetained(n.projectId)}catch{}}if(o&&t.transcript_path)try{let l=await le(s,t.transcript_path,t.session_id??null,{preloadedLines:a.transcriptLines,runtime:i,model:u});for(let p of l.failures)try{P.record(n.projectId,{source:"friction-detector",runtime:i,model:u,sessionId:t.session_id??null,taskId:a.activeTaskId??null,...p})}catch{}l.signalsRecorded>0&&a.activeTaskId&&L.penalizeSurfaced(n.projectId,a.activeTaskId)}catch{}if(o&&t.transcript_path)try{let l=await Pe(s,t.transcript_path,t.session_id??null,{preloadedLines:a.transcriptLines,runtime:i,model:u});for(let p of l.failures)try{P.record(n.projectId,{source:"skill-miss-detector",runtime:i,model:u,sessionId:t.session_id??null,taskId:a.activeTaskId??null,...p})}catch{}}catch{}if(o)try{await V.backfill(n.projectId,n,new Date().toISOString())}catch{}if(o&&a.activeTaskId){try{let{synthesizeLandHandoff:l}=await import("./land-synthesis-OATL5BNP.mjs");await l({projectId:n.projectId,projectPath:s,cycleDescription:a.activeTaskDescription??null,cycleId:a.activeTaskId,tokensIn:a.transcriptUsage?.tokensIn,tokensOut:a.transcriptUsage?.tokensOut,model:u})}catch{}try{let{synthesizeJudgmentReceipt:l}=await import("./judgment-receipt-2U7D6HS4.mjs");await l({projectId:n.projectId,projectPath:s,cycleDescription:a.activeTaskDescription??null,cycleId:a.activeTaskId,tokensIn:a.transcriptUsage?.tokensIn,tokensOut:a.transcriptUsage?.tokensOut,model:u})}catch{}}try{let{flushIfLinked:l}=await import("./auto-flush-GW3FP763.mjs");await l(s,n)}catch{}},"afterEmit")},e)}c(Ln,"runStopHook");export{mr as heavyStepStampPath,hr as heavyStepsDue,Ln as runStopHook};
@@ -5,4 +5,4 @@ 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
- import{b as a}from"./chunk-RNCLLUMK.mjs";import"./chunk-45I2C2UB.mjs";import{c as i}from"./chunk-L4COZ7ZH.mjs";import"./chunk-4KY2EHXS.mjs";import"./chunk-GJFWVCTS.mjs";import"./chunk-7OZDWT6C.mjs";import"./chunk-YJMWY4Y6.mjs";import"./chunk-NJAMZSHM.mjs";import"./chunk-54LH63LM.mjs";import"./chunk-ZZ65CN5F.mjs";import"./chunk-JQLJM4BK.mjs";import"./chunk-OVR6RUUZ.mjs";import"./chunk-Y5NQV46G.mjs";import"./chunk-DXQMKW2B.mjs";import"./chunk-DAOC3T5G.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-OFVLGJ76.mjs";import"./chunk-UUULLTQV.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import"./chunk-GVNMXVVA.mjs";import{b as n}from"./chunk-HZXDF2TQ.mjs";import"./chunk-MEQS4VPO.mjs";import{d as e,g as m}from"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-HE5RSIHG.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import{a as o}from"./chunk-E66B27AL.mjs";m();function l(c=process.cwd(),p){return i({event:"SubagentStart",projectPath:c,build:o((u,t)=>a(t),"build"),afterEmit:o(async(u,t)=>{try{let r=await n.readConfig(t);if(!r?.projectId)return;let{collectActiveTasks:s}=await import("./task-overview-6ZQKJGSH.mjs"),d=await s(r.projectId,t);e.appendEvent(r.projectId,"subagent.spawned",{taskId:d.current?.id??null})}catch{}},"afterEmit")},p)}o(l,"runSubagentStartHook");export{l as runSubagentStartHook};
8
+ import{b as a}from"./chunk-UHW35BPE.mjs";import"./chunk-45I2C2UB.mjs";import{c as i}from"./chunk-L4COZ7ZH.mjs";import"./chunk-4KY2EHXS.mjs";import"./chunk-LPB3HUJ2.mjs";import"./chunk-7OZDWT6C.mjs";import"./chunk-YJMWY4Y6.mjs";import"./chunk-NJAMZSHM.mjs";import"./chunk-54LH63LM.mjs";import"./chunk-ZZ65CN5F.mjs";import"./chunk-A5MUSARI.mjs";import"./chunk-M3ZOJVPA.mjs";import"./chunk-Y5NQV46G.mjs";import"./chunk-DXQMKW2B.mjs";import"./chunk-RRWPDRYR.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-UQVJQME2.mjs";import"./chunk-UUULLTQV.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import"./chunk-GVNMXVVA.mjs";import{b as n}from"./chunk-W5OWBOLH.mjs";import"./chunk-MEQS4VPO.mjs";import{d as e,g as m}from"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-D4S3IRD3.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import{a as o}from"./chunk-E66B27AL.mjs";m();function l(c=process.cwd(),p){return i({event:"SubagentStart",projectPath:c,build:o((u,t)=>a(t),"build"),afterEmit:o(async(u,t)=>{try{let r=await n.readConfig(t);if(!r?.projectId)return;let{collectActiveTasks:s}=await import("./task-overview-6ZQKJGSH.mjs"),d=await s(r.projectId,t);e.appendEvent(r.projectId,"subagent.spawned",{taskId:d.current?.id??null})}catch{}},"afterEmit")},p)}o(l,"runSubagentStartHook");export{l as runSubagentStartHook};
@@ -5,4 +5,4 @@ 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
- import{a as f,b as p}from"./chunk-X5RDLFPM.mjs";import{c as s}from"./chunk-L4COZ7ZH.mjs";import{a}from"./chunk-ZX2KFQV5.mjs";import{b as c}from"./chunk-NWY5M34K.mjs";import"./chunk-CREPUNOS.mjs";import"./chunk-QDQ7DTDV.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-BISPGBNN.mjs";import"./chunk-LT5WSSQO.mjs";import"./chunk-HJ4HEI45.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import{b as r}from"./chunk-HZXDF2TQ.mjs";import"./chunk-MEQS4VPO.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-HE5RSIHG.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import{a as i}from"./chunk-E66B27AL.mjs";function w(u=process.cwd(),g){return s({event:"SubagentStop",projectPath:u,afterEmit:i(async(d,n)=>{let o=await r.readConfig(n).catch(()=>null);if(!o?.projectId||f(o)==="off")return;let e=[];try{let t=await a(o.projectId,n);t.current&&e.push(`active: ${t.current.description}`)}catch{}try{let t=await c.getActiveTasks(o.projectId);t.length>0&&e.push(`pending: ${t.length}`)}catch{}await p("prjct \u2014 subagent finished",e.join(" \xB7 ")||"A subagent finished")},"afterEmit")},g)}i(w,"runSubagentStopHook");export{w as runSubagentStopHook};
8
+ import{a as f,b as p}from"./chunk-X5RDLFPM.mjs";import{c as s}from"./chunk-L4COZ7ZH.mjs";import{a}from"./chunk-ZX2KFQV5.mjs";import{b as c}from"./chunk-NWY5M34K.mjs";import"./chunk-CREPUNOS.mjs";import"./chunk-QDQ7DTDV.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-BISPGBNN.mjs";import"./chunk-LT5WSSQO.mjs";import"./chunk-HJ4HEI45.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import{b as r}from"./chunk-W5OWBOLH.mjs";import"./chunk-MEQS4VPO.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-D4S3IRD3.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import{a as i}from"./chunk-E66B27AL.mjs";function w(u=process.cwd(),g){return s({event:"SubagentStop",projectPath:u,afterEmit:i(async(d,n)=>{let o=await r.readConfig(n).catch(()=>null);if(!o?.projectId||f(o)==="off")return;let e=[];try{let t=await a(o.projectId,n);t.current&&e.push(`active: ${t.current.description}`)}catch{}try{let t=await c.getActiveTasks(o.projectId);t.length>0&&e.push(`pending: ${t.length}`)}catch{}await p("prjct \u2014 subagent finished",e.join(" \xB7 ")||"A subagent finished")},"afterEmit")},g)}i(w,"runSubagentStopHook");export{w as runSubagentStopHook};
@@ -5,4 +5,4 @@ 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
- import{a}from"./chunk-XGYCAVB2.mjs";import"./chunk-ZZ65CN5F.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-BUDZL4DW.mjs";import"./chunk-E66B27AL.mjs";export{a as recordSurfacedForActiveTask};
8
+ import{a}from"./chunk-TFGJVT6F.mjs";import"./chunk-ZZ65CN5F.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-BUDZL4DW.mjs";import"./chunk-E66B27AL.mjs";export{a as recordSurfacedForActiveTask};
@@ -5,4 +5,4 @@ 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
- import{b as a,c as b,d as c,e as d,f as e,g as f,h as g,i as h,j as i}from"./chunk-H6KVNDQD.mjs";import"./chunk-NN65WGGN.mjs";import"./chunk-Q5I2UPD6.mjs";import"./chunk-PSSR7LSW.mjs";import"./chunk-YGHIPTJN.mjs";import"./chunk-CREPUNOS.mjs";import"./chunk-D7TRY3CO.mjs";import"./chunk-TPESWBA7.mjs";import"./chunk-ODWWIFSN.mjs";import"./chunk-P43HDWI5.mjs";import"./chunk-LLQUB6YR.mjs";import"./chunk-NLG2EW6M.mjs";import"./chunk-6IKHMK2U.mjs";import"./chunk-QSAA6LZF.mjs";import"./chunk-75UJIVMO.mjs";import"./chunk-QDQ7DTDV.mjs";import"./chunk-2OU2MKNS.mjs";import"./chunk-YJMWY4Y6.mjs";import"./chunk-NJAMZSHM.mjs";import"./chunk-6EWGHM32.mjs";import"./chunk-SJ75V4WG.mjs";import"./chunk-4DDCWMI6.mjs";import"./chunk-JQLJM4BK.mjs";import"./chunk-OVR6RUUZ.mjs";import"./chunk-Y5NQV46G.mjs";import"./chunk-DXQMKW2B.mjs";import"./chunk-DAOC3T5G.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-OFVLGJ76.mjs";import"./chunk-UUULLTQV.mjs";import"./chunk-3FBCOCPD.mjs";import"./chunk-BISPGBNN.mjs";import"./chunk-LT5WSSQO.mjs";import"./chunk-HJ4HEI45.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import"./chunk-GVNMXVVA.mjs";import"./chunk-HZXDF2TQ.mjs";import"./chunk-MEQS4VPO.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-HE5RSIHG.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import"./chunk-E66B27AL.mjs";export{e as TASK_CONTEXT_PROMPT,h as completeActiveTask,a as formatRelatedContextForAgent,b as formatRiskForAgent,i as readLastStatus,d as recallRisksForFiles,g as resolveActiveTask,f as setTaskStatus,c as startTask};
8
+ import{b as a,c as b,d as c,e as d,f as e,g as f,h as g,i as h,j as i}from"./chunk-B7GMU46T.mjs";import"./chunk-LJLUP4FF.mjs";import"./chunk-Q5I2UPD6.mjs";import"./chunk-PSSR7LSW.mjs";import"./chunk-6AFM6WRB.mjs";import"./chunk-CREPUNOS.mjs";import"./chunk-D7TRY3CO.mjs";import"./chunk-TPESWBA7.mjs";import"./chunk-ODWWIFSN.mjs";import"./chunk-YKMJI6TF.mjs";import"./chunk-LLQUB6YR.mjs";import"./chunk-NLG2EW6M.mjs";import"./chunk-6IKHMK2U.mjs";import"./chunk-QSAA6LZF.mjs";import"./chunk-75UJIVMO.mjs";import"./chunk-QDQ7DTDV.mjs";import"./chunk-2OU2MKNS.mjs";import"./chunk-YJMWY4Y6.mjs";import"./chunk-NJAMZSHM.mjs";import"./chunk-6EWGHM32.mjs";import"./chunk-SJ75V4WG.mjs";import"./chunk-4DDCWMI6.mjs";import"./chunk-A5MUSARI.mjs";import"./chunk-M3ZOJVPA.mjs";import"./chunk-Y5NQV46G.mjs";import"./chunk-DXQMKW2B.mjs";import"./chunk-RRWPDRYR.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-UQVJQME2.mjs";import"./chunk-UUULLTQV.mjs";import"./chunk-3FBCOCPD.mjs";import"./chunk-BISPGBNN.mjs";import"./chunk-LT5WSSQO.mjs";import"./chunk-HJ4HEI45.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import"./chunk-GVNMXVVA.mjs";import"./chunk-W5OWBOLH.mjs";import"./chunk-MEQS4VPO.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-D4S3IRD3.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import"./chunk-E66B27AL.mjs";export{e as TASK_CONTEXT_PROMPT,h as completeActiveTask,a as formatRelatedContextForAgent,b as formatRiskForAgent,i as readLastStatus,d as recallRisksForFiles,g as resolveActiveTask,f as setTaskStatus,c as startTask};
@@ -5,6 +5,6 @@ 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
- import{a as c}from"./chunk-5T5PZKHW.mjs";import{a as D,b as l,d as T}from"./chunk-R77TXXPP.mjs";import{a as u}from"./chunk-PSSR7LSW.mjs";import{a as d}from"./chunk-YGHIPTJN.mjs";import"./chunk-OFVLGJ76.mjs";import"./chunk-UUULLTQV.mjs";import"./chunk-3FBCOCPD.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import{b as a}from"./chunk-HZXDF2TQ.mjs";import"./chunk-MEQS4VPO.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import{a as h,o as y}from"./chunk-CTWZQ7YI.mjs";import"./chunk-HE5RSIHG.mjs";import"./chunk-PKDYFXMI.mjs";import{e as f,f as w}from"./chunk-BUDZL4DW.mjs";import{a as m}from"./chunk-E66B27AL.mjs";w();y();var i=["off","assist","strict"],C=class extends T{static{m(this,"TddCommands")}async tdd(s=null,e=process.cwd(),r={}){let t=((s??"").trim().split(/\s+/).filter(Boolean)[0]??"").toLowerCase();return!t||t==="status"||t==="show"?this.showStatus(e,r):i.includes(t)?this.setMode(t,e,r):t==="check"?this.check(e,r):D(`Unknown tdd subcommand "${t}". Use: check, or ${i.join("|")}.`,r)}async showStatus(s,e){let r=await a.readConfig(s).catch(()=>null);if(!r?.projectId)return l("No prjct project here \u2014 run `prjct init` first.",e);let o=M(r),n=(await u(s).catch(()=>null))?.test?.command??null,g=[`Mode: ${o}${o==="off"?" (guidance + ship TDD gate dormant)":""}`,`Test command: ${n??"none detected (add tests to enable the gate)"}`,"Set: prjct tdd off|assist|strict","Check: prjct tdd check \u2014 run the test command now (red/green)"];return e.md?console.log(c("## TDD",`> **Mode**: \`${o}\``,`- Test command: \`${n??"none detected"}\``,g.slice(2).join(`
8
+ import{a as c}from"./chunk-3WKDMAS7.mjs";import{a as D,b as l,d as T}from"./chunk-PXJKXBTM.mjs";import{a as u}from"./chunk-PSSR7LSW.mjs";import{a as d}from"./chunk-6AFM6WRB.mjs";import"./chunk-UQVJQME2.mjs";import"./chunk-UUULLTQV.mjs";import"./chunk-3FBCOCPD.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import{b as a}from"./chunk-W5OWBOLH.mjs";import"./chunk-MEQS4VPO.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import{a as h,o as y}from"./chunk-CTWZQ7YI.mjs";import"./chunk-D4S3IRD3.mjs";import"./chunk-PKDYFXMI.mjs";import{e as f,f as w}from"./chunk-BUDZL4DW.mjs";import{a as m}from"./chunk-E66B27AL.mjs";w();y();var i=["off","assist","strict"],C=class extends T{static{m(this,"TddCommands")}async tdd(s=null,e=process.cwd(),r={}){let t=((s??"").trim().split(/\s+/).filter(Boolean)[0]??"").toLowerCase();return!t||t==="status"||t==="show"?this.showStatus(e,r):i.includes(t)?this.setMode(t,e,r):t==="check"?this.check(e,r):D(`Unknown tdd subcommand "${t}". Use: check, or ${i.join("|")}.`,r)}async showStatus(s,e){let r=await a.readConfig(s).catch(()=>null);if(!r?.projectId)return l("No prjct project here \u2014 run `prjct init` first.",e);let o=M(r),n=(await u(s).catch(()=>null))?.test?.command??null,g=[`Mode: ${o}${o==="off"?" (guidance + ship TDD gate dormant)":""}`,`Test command: ${n??"none detected (add tests to enable the gate)"}`,"Set: prjct tdd off|assist|strict","Check: prjct tdd check \u2014 run the test command now (red/green)"];return e.md?console.log(c("## TDD",`> **Mode**: \`${o}\``,`- Test command: \`${n??"none detected"}\``,g.slice(2).join(`
9
9
  `))):d.info(`TDD \u2014 ${g.join(`
10
10
  `)}`),{success:!0,mode:o,testCommand:n}}async setMode(s,e,r){let o=await a.readConfig(e).catch(()=>null);if(!o?.projectId)return l("No prjct project here \u2014 run `prjct init` first.",r);o.tdd={mode:s},await a.writeConfig(e,o);let t=s==="off"?"TDD mode off \u2014 test-first guidance and the ship TDD gate are dormant.":s==="assist"?"TDD mode \u2192 assist. Guidance biases test-first (red\u2192green\u2192refactor); `ship` reminds.":"TDD mode \u2192 strict. Test-first expected; `ship` surfaces a hard gate \u2014 run `prjct tdd check` and don't ship on red.";return r.md?console.log(c("## TDD",`> ${t}`)):d.done(t),{success:!0,mode:s}}async check(s,e){let o=(await u(s).catch(()=>null))?.test?.command;if(!o){let t="tdd check: no test command detected for this stack. Add a test script first.";return console.log(e.md?c("## TDD check",`> ${t}`):t),{success:!1,reason:"no_test_command"}}try{await h(o,{cwd:s,maxBuffer:32*1024*1024});let t=`tdd check: GREEN \u2014 \`${o}\` passed.`;return console.log(e.md?c("## TDD check",`> \u2705 ${t}`):t),{success:!0,green:!0,testCommand:o}}catch(t){let n=`tdd check: RED \u2014 \`${o}\` failed. Fix before shipping.`;return e.md?console.log(c("## TDD check",`> \u274C ${n}`,f(t))):(d.fail(n),d.info(f(t))),{success:!1,green:!1,testCommand:o}}}};function M(p){let s=p?.tdd?.mode;if(s&&i.includes(s))return s;let e=process.env.PRJCT_TDD_MODE?.toLowerCase();return e&&i.includes(e)?e:"off"}m(M,"effectiveTddMode");var _={effectiveTddMode:M,TDD_MODES:i};export{C as TddCommands,_ as _internal,M as effectiveTddMode};
@@ -5,4 +5,4 @@ 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
- import{b as a,c as b,d as c,e as d}from"./chunk-GSMDQ7VM.mjs";import"./chunk-SYHDEUVU.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-HE5RSIHG.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import"./chunk-E66B27AL.mjs";export{d as default,b as getTemplateContent,c as listTemplates,a as resetBundle};
8
+ import{b as a,c as b,d as c,e as d}from"./chunk-OIEZAHLC.mjs";import"./chunk-SYHDEUVU.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-D4S3IRD3.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import"./chunk-E66B27AL.mjs";export{d as default,b as getTemplateContent,c as listTemplates,a as resetBundle};
@@ -5,4 +5,4 @@ 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
- import{h as a,i as b,j as c,k as d,l as e}from"./chunk-A4OFZ2SK.mjs";import"./chunk-DAOC3T5G.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-OFVLGJ76.mjs";import"./chunk-UUULLTQV.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import"./chunk-HZXDF2TQ.mjs";import"./chunk-MEQS4VPO.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-HE5RSIHG.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import"./chunk-E66B27AL.mjs";export{b as conflictModeWithWeakModel,a as effectiveWeakModelMode,c as qualityFloorWithWeakModel,d as weakModelBanner,e as weakModelOneLiner};
8
+ import{h as a,i as b,j as c,k as d,l as e}from"./chunk-RAHFKGM6.mjs";import"./chunk-RRWPDRYR.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-UQVJQME2.mjs";import"./chunk-UUULLTQV.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import"./chunk-W5OWBOLH.mjs";import"./chunk-MEQS4VPO.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-D4S3IRD3.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import"./chunk-E66B27AL.mjs";export{b as conflictModeWithWeakModel,a as effectiveWeakModelMode,c as qualityFloorWithWeakModel,d as weakModelBanner,e as weakModelOneLiner};
@@ -5,4 +5,4 @@ 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
- import{c as a,d as b,e as c,f as d,g as e,h as f}from"./chunk-P43HDWI5.mjs";import"./chunk-2OU2MKNS.mjs";import"./chunk-YJMWY4Y6.mjs";import"./chunk-NJAMZSHM.mjs";import"./chunk-4DDCWMI6.mjs";import"./chunk-DAOC3T5G.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-OFVLGJ76.mjs";import"./chunk-UUULLTQV.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import"./chunk-HZXDF2TQ.mjs";import"./chunk-MEQS4VPO.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-HE5RSIHG.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import"./chunk-E66B27AL.mjs";export{c as extractFilePathsFromEntries,d as formatWorkScopeBlock,f as isUsefulScopePath,b as resolveWorkScope,a as resolveWorkScopeSync,e as toLikelyFileHits};
8
+ import{c as a,d as b,e as c,f as d,g as e,h as f}from"./chunk-YKMJI6TF.mjs";import"./chunk-2OU2MKNS.mjs";import"./chunk-YJMWY4Y6.mjs";import"./chunk-NJAMZSHM.mjs";import"./chunk-4DDCWMI6.mjs";import"./chunk-RRWPDRYR.mjs";import"./chunk-GAOQHD5S.mjs";import"./chunk-UQVJQME2.mjs";import"./chunk-UUULLTQV.mjs";import"./chunk-3LG3ACQV.mjs";import"./chunk-AOPJ4Z6O.mjs";import"./chunk-AUUWQH3S.mjs";import"./chunk-W5OWBOLH.mjs";import"./chunk-MEQS4VPO.mjs";import"./chunk-HDHVBB6Q.mjs";import"./chunk-CE4RCNC7.mjs";import"./chunk-AKIN5WSQ.mjs";import"./chunk-HDSS6UB3.mjs";import"./chunk-JQE2F2RK.mjs";import"./chunk-WUHGODSQ.mjs";import"./chunk-SVZHJZ5T.mjs";import"./chunk-CTWZQ7YI.mjs";import"./chunk-GCKILEXJ.mjs";import"./chunk-D4S3IRD3.mjs";import"./chunk-PKDYFXMI.mjs";import"./chunk-BUDZL4DW.mjs";import"./chunk-E66B27AL.mjs";export{c as extractFilePathsFromEntries,d as formatWorkScopeBlock,f as isUsefulScopePath,b as resolveWorkScope,a as resolveWorkScopeSync,e as toLikelyFileHits};
Binary file
Binary file
@@ -16,7 +16,7 @@ ${e}`,action:"appended"};let o=t.substring(0,t.indexOf(n)),i=t.substring(t.index
16
16
  `}function _z(t){return`${["---",t,"---","",Sz,Bn,"","**Auto-managed by prjct-cli** | https://prjct.app",Ez].join(`
17
17
  `)}
18
18
  `}function lI(t){return cI[t]?.()??null}var vz,iI,Sz,Ez,En,Tz,Cz,xz,Rz,Az,cI,wme,mb=k(()=>{"use strict";Wr();io();vz=ab.join("/"),iI="Generated with [p/](https://www.prjct.app/)",Sz="<!-- prjct:start - DO NOT REMOVE THIS MARKER -->",Ez="<!-- prjct:end - DO NOT REMOVE THIS MARKER -->",En={rag:"prjct is a RAG-backed project memory harness; do not preload project history.",entrypoint:'Tasks \u2192 `prjct work "\u2026"`. Known cmds (`sync`/`search`/`remember`/\u2026) \u2192 `prjct <cmd>` \u2014 never work-wrap.',pull:"Pull only what surfaces: `prjct search` / `context memory` / `guard` / MCP \u2014 not something to load wholesale.",remember:'Save synthesized memory in English: `prjct remember <decision|learning|gotcha|context> "<text>"`.',kb:`KB (\`${vz}\`): \`remember <facet>\` / \`context memory <facet>\` \u2014 on demand, never injected here.`,ship:"Ship only after user OKs: `prjct ship --md`.",loop:"Loop: land; H2+ intent; tip\u2192user SoT; close.",identity:"L0 portable; id=cwd."};a(Zm,"buildCompactSkill");Tz=Zm,Cz=Zm;a(aI,"buildGlobalConfig");xz=a(()=>aI("Gemini"),"buildGeminiConfig"),Rz=a(()=>aI("Antigravity"),"buildAntigravityConfig");a(_z,"buildIdePointer");Az=a(()=>_z(`description: "prjct \u2014 pull project memory + workflow on demand"
19
- alwaysApply: true`),"buildCursorRule"),cI={"codex/SKILL.md":Tz,"antigravity/SKILL.md":Cz,"global/GEMINI.md":xz,"global/ANTIGRAVITY.md":Rz,"global/CURSOR.mdc":Az},wme=Object.freeze(Object.keys(cI));a(lI,"buildEditorSurface")});var lu={};R(lu,{PACKAGE_ROOT:()=>er,VERSION:()=>Ee,getPackageRoot:()=>gb,getVersion:()=>ai,resetPackageRoot:()=>hb});import fb from"node:fs";import ef from"node:path";function gb(){if(Zn.packageRoot)return Zn.packageRoot;let t=a((e,n)=>{if(n>=5)return null;let r=ef.join(e,"package.json");if(fb.existsSync(r))try{if(JSON.parse(fb.readFileSync(r,"utf-8")).name==="prjct-cli")return e}catch{}return t(ef.dirname(e),n+1)},"findPackageRoot");return Zn.packageRoot=t(__dirname,0)??ef.join(__dirname,"..","..",".."),Zn.packageRoot}function ai(){if(Zn.version)return Zn.version;let t="3.89.0";if(t&&/^\d+\.\d+\.\d+/.test(t))return Zn.version=t,Zn.version;try{let e=ef.join(gb(),"package.json"),n=JSON.parse(fb.readFileSync(e,"utf-8"));return Zn.version=n.version,Zn.version}catch(e){return process.env.PRJCT_DEBUG==="1"&&console.error("Failed to read version from package.json:",C(e)),"0.0.0"}}function hb(t){Zn.packageRoot=t,Zn.version=null}var Zn,Ee,er,ct=k(()=>{"use strict";V();Zn={version:null,packageRoot:null};a(gb,"getPackageRoot");a(ai,"getVersion");a(hb,"resetPackageRoot");Ee=ai(),er=gb()});var nf={};R(nf,{default:()=>Lz,getTemplateContent:()=>lt,listTemplates:()=>mI,resetBundle:()=>Mz});import yb from"node:fs";import Pz from"node:fs/promises";import tf from"node:path";function kb(){if(ci.loaded)return ci.templates;ci.loaded=!0;let t=tf.join(er,"dist","templates.json");try{let e=yb.readFileSync(t,"utf-8");return ci.templates=JSON.parse(e),ci.templates}catch{return null}}function Iz(t){let e=li.indexOf(t);e>-1&&li.splice(e,1),li.push(t)}function $z(){for(;Ja.size>=jz&&li.length>0;){let t=li.shift();t&&Ja.delete(t)}}function uI(t){let e=/^---\n([\s\S]+?)\n---\n([\s\S]*)$/,n=t.match(e);if(!n)return{frontmatter:{},content:t.trim()};let[,r,s]=n,o={};return r.split(`
19
+ alwaysApply: true`),"buildCursorRule"),cI={"codex/SKILL.md":Tz,"antigravity/SKILL.md":Cz,"global/GEMINI.md":xz,"global/ANTIGRAVITY.md":Rz,"global/CURSOR.mdc":Az},wme=Object.freeze(Object.keys(cI));a(lI,"buildEditorSurface")});var lu={};R(lu,{PACKAGE_ROOT:()=>er,VERSION:()=>Ee,getPackageRoot:()=>gb,getVersion:()=>ai,resetPackageRoot:()=>hb});import fb from"node:fs";import ef from"node:path";function gb(){if(Zn.packageRoot)return Zn.packageRoot;let t=a((e,n)=>{if(n>=5)return null;let r=ef.join(e,"package.json");if(fb.existsSync(r))try{if(JSON.parse(fb.readFileSync(r,"utf-8")).name==="prjct-cli")return e}catch{}return t(ef.dirname(e),n+1)},"findPackageRoot");return Zn.packageRoot=t(__dirname,0)??ef.join(__dirname,"..","..",".."),Zn.packageRoot}function ai(){if(Zn.version)return Zn.version;let t="3.91.0";if(t&&/^\d+\.\d+\.\d+/.test(t))return Zn.version=t,Zn.version;try{let e=ef.join(gb(),"package.json"),n=JSON.parse(fb.readFileSync(e,"utf-8"));return Zn.version=n.version,Zn.version}catch(e){return process.env.PRJCT_DEBUG==="1"&&console.error("Failed to read version from package.json:",C(e)),"0.0.0"}}function hb(t){Zn.packageRoot=t,Zn.version=null}var Zn,Ee,er,ct=k(()=>{"use strict";V();Zn={version:null,packageRoot:null};a(gb,"getPackageRoot");a(ai,"getVersion");a(hb,"resetPackageRoot");Ee=ai(),er=gb()});var nf={};R(nf,{default:()=>Lz,getTemplateContent:()=>lt,listTemplates:()=>mI,resetBundle:()=>Mz});import yb from"node:fs";import Pz from"node:fs/promises";import tf from"node:path";function kb(){if(ci.loaded)return ci.templates;ci.loaded=!0;let t=tf.join(er,"dist","templates.json");try{let e=yb.readFileSync(t,"utf-8");return ci.templates=JSON.parse(e),ci.templates}catch{return null}}function Iz(t){let e=li.indexOf(t);e>-1&&li.splice(e,1),li.push(t)}function $z(){for(;Ja.size>=jz&&li.length>0;){let t=li.shift();t&&Ja.delete(t)}}function uI(t){let e=/^---\n([\s\S]+?)\n---\n([\s\S]*)$/,n=t.match(e);if(!n)return{frontmatter:{},content:t.trim()};let[,r,s]=n,o={};return r.split(`
20
20
  `).forEach(i=>{let[c,...l]=i.split(":");if(c&&l.length>0){let u=l.join(":").trim();u.startsWith("[")&&u.endsWith("]")?o[c.trim()]=u.slice(1,-1).split(",").map(d=>d.trim()):o[c.trim()]=u.replace(/^["']|["']$/g,"")}}),{frontmatter:o,content:s.trim()}}async function dI(t){if(Ja.has(t))return Iz(t),Ja.get(t);let r=kb()?.[`commands/${t}.md`]??await Pz.readFile(tf.join(er,"templates","commands",`${t}.md`),"utf-8").catch(()=>{throw Km.notFound(t)}),s=uI(r);return $z(),Ja.set(t,s),li.push(t),s}async function Nz(t){return(await dI(t)).frontmatter["allowed-tools"]||[]}function pI(){Ja.clear(),li.length=0}function Mz(){ci.templates=null,ci.loaded=!1,pI()}function lt(t){let e=kb();if(e?.[t])return e[t];let n=lI(t);if(n)return n;let r=tf.join(er,"templates",t);try{return yb.readFileSync(r,"utf-8")}catch{return null}}function mI(t){let e=kb();if(e)return Object.keys(e).filter(r=>r.startsWith(t));let n=tf.join(er,"templates",t);try{return yb.readdirSync(n).map(s=>`${t}${s}`)}catch{return[]}}var jz,Ja,li,ci,Oz,Lz,Wn=k(()=>{"use strict";bs();mb();ct();jz=50,Ja=new Map,li=[],ci={templates:null,loaded:!1};a(kb,"loadBundle");a(Iz,"updateLruOrder");a($z,"evictLru");a(uI,"parseFrontmatter");a(dI,"load");a(Nz,"getAllowedTools");a(pI,"clearCache");a(Mz,"resetBundle");a(lt,"getTemplateContent");a(mI,"listTemplates");Oz={load:dI,parseFrontmatter:uI,getAllowedTools:Nz,clearCache:pI,getTemplateContent:lt,listTemplates:mI},Lz=Oz});var rf=k(()=>{"use strict"});var gI={};R(gI,{resolveUserHome:()=>Gr,resolveUserPath:()=>ge});import Dz from"node:os";import fI from"node:path";function Gr(){let t=process.env.HOME?.trim()||process.env.USERPROFILE?.trim();return t?fI.resolve(t):Dz.homedir()}function ge(...t){return fI.join(Gr(),...t)}var Yt=k(()=>{"use strict";a(Gr,"resolveUserHome");a(ge,"resolveUserPath")});var hI,sf,yI,of=k(()=>{"use strict";hI=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"]),sf=["",".ts",".tsx",".js",".jsx","/index.ts","/index.js"],yI=/(?:import|from)\s+['"]([^'"]+)['"]/g});import bI from"node:fs/promises";async function vI(t,e){let n=await bI.readFile(t,"utf-8").catch(o=>{if(de(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 kI(t,n),wI(t,"Malformed JSON"),null;let s=e.safeParse(r);return s.success?r:(await kI(t,n),wI(t,Fz(s.error)),null)}async function kI(t,e){let n=`${t}.backup`;try{await bI.writeFile(n,e,{encoding:"utf-8",flag:"wx"})}catch{}}function wI(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 Fz(t){return t.issues.slice(0,3).map(e=>`${e.path.join(".")}: ${e.message}`).join("; ")}var SI=k(()=>{"use strict";V();a(vI,"safeRead");a(kI,"createBackup");a(wI,"logCorruption");a(Fz,"formatZodError")});var nr={};R(nr,{batchProcess:()=>tr,dirExists:()=>yt,ensureDir:()=>Cn,fileExists:()=>j,listFiles:()=>Ss,readFile:()=>pn,readJson:()=>et,walkDir:()=>Gn,writeFile:()=>vs,writeFileAtomic:()=>du,writeJson:()=>Xe});import Tn from"node:fs/promises";import uu from"node:path";async function wb(t,e,n){try{return await n()}catch(r){throw db(r)||ub(r)?new Error(Xa(r,t,e)):r}}async function Gn(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 Tn.readdir(i,{withFileTypes:!0}).catch(()=>[]);for(let l of c){if(n.length>=r)break;let u=String(l.name);if(hI.has(u)||e.skipDotfiles&&u.startsWith(".")&&(!s||!s.has(u)))continue;let d=uu.join(i,u);l.isDirectory()?await o(d):l.isFile()&&n.push(uu.relative(t,d))}}return a(o,"walk"),await o(t),n}async function tr(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 et(t,e=null,n){if(n)return await vI(t,n)??e;try{let r=await Tn.readFile(t,"utf-8");return JSON.parse(r)}catch(r){if(de(r))return e;throw r}}async function Xe(t,e,n=2){await wb(t,"config",async()=>{let r=uu.dirname(t);await Tn.mkdir(r,{recursive:!0});let s=`${JSON.stringify(e,null,n)}
21
21
  `;await Tn.writeFile(t,s,"utf-8")})}async function pn(t,e=""){try{return await Tn.readFile(t,"utf-8")}catch(n){if(de(n))return e;throw n}}async function vs(t,e){await wb(t,"file",async()=>{let n=uu.dirname(t);await Tn.mkdir(n,{recursive:!0}),await Tn.writeFile(t,e,"utf-8")})}async function du(t,e){await wb(t,"file",async()=>{let n=uu.dirname(t);await Tn.mkdir(n,{recursive:!0});let r=`${t}.tmp`;await Tn.writeFile(r,e,"utf-8"),await Tn.rename(r,t)})}async function j(t){try{return await Tn.access(t),!0}catch(e){if(de(e))return!1;throw e}}async function yt(t){try{return(await Tn.stat(t)).isDirectory()}catch(e){if(de(e))return!1;throw e}}async function Cn(t){await Tn.mkdir(t,{recursive:!0})}async function Ss(t,e={}){try{return(await Tn.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(de(n))return[];throw n}}var ce=k(()=>{"use strict";of();SI();V();a(wb,"withWriteErrorContext");a(Gn,"walkDir");a(tr,"batchProcess");a(et,"readJson");a(Xe,"writeJson");a(pn,"readFile");a(vs,"writeFile");a(du,"writeFileAtomic");a(j,"fileExists");a(yt,"dirExists");a(Cn,"ensureDir");a(Ss,"listFiles")});var bb,EI=k(()=>{"use strict";bb="mcp-remote@0.1.38"});import ui from"node:fs";import Hz from"node:fs/promises";import vb from"node:os";import Rt from"node:path";function Uz(){let t=Bz();if(t)return t;if(process.env.PRJCT_MCP_ALLOW_LOCAL==="1"){let e=Wz();if(e)return{command:e,args:["mcp-server"],description:Sb}}return{command:"npx",args:["-y","prjct-cli@latest","mcp-server"],description:Sb}}function TI(t){let e=t.replace(/\\/g,"/");return!!(e.includes("/.worktrees/")||e.includes("/prjct-cli/bin/prjct")&&!e.includes("/node_modules/prjct-cli/"))}function Bz(){let t=[];try{t.push(Rt.dirname(Hn.resolve("prjct-cli/package.json")))}catch{}let e=vb.homedir();for(let n of[process.env.NVM_BIN?Rt.resolve(process.env.NVM_BIN,".."):"",Rt.join(e,".nvm","versions","node",process.version,"lib"),"/opt/homebrew/lib","/usr/local/lib"].filter(Boolean))t.push(Rt.join(n,"node_modules","prjct-cli"));for(let n of t){if(TI(n))continue;let r=Rt.join(n,"bin","prjct.cjs"),s=ui.existsSync(Rt.join(n,"dist","bin","prjct.mjs"))||ui.existsSync(Rt.join(n,"dist","bin","prjct-core.mjs"));if(!ui.existsSync(r)||!s)continue;let i=[process.execPath,Rt.join(Rt.dirname(process.execPath),"node"),Rt.join(n,"..","..","bin","node")].find(u=>u&&ui.existsSync(u)),c=Rt.resolve(n,"..","..","..","bin","node"),l=ui.existsSync(c)?c:i??process.execPath;return{command:l,args:[r,"mcp-server"],env:{PATH:`${Rt.dirname(l)}${Rt.delimiter}/usr/bin${Rt.delimiter}/bin`},description:Sb}}return null}function Wz(){let t=process.argv[1],e=[t?Rt.resolve(Rt.dirname(t),"prjct"):"",t?Rt.resolve(Rt.dirname(t),"..","bin","prjct"):"",Rt.resolve(process.cwd(),"bin","prjct")].filter(Boolean);for(let n of e){if(!ui.existsSync(n))continue;let r=(()=>{try{return ui.realpathSync(n)}catch{return n}})();if(!TI(r))return r}return null}function Ka(){return process.env.PRJCT_TEST_MODE==="1"?Rt.join(vb.tmpdir(),"prjct-context7-test","mcp.json"):Rt.join(vb.homedir(),".claude","mcp.json")}async function CI(t=Ka()){try{let e=await Hz.readFile(t,"utf-8");return JSON.parse(e)}catch(e){let n=C(e).toLowerCase();if(n.includes("no such file")||n.includes("enoent"))return{};throw new Error(`Failed to read MCP config at ${t}: ${C(e)}`)}}async function Gz(t,e=Ka()){await Xe(e,t)}async function pu(t,e,n=Ka()){let r=await CI(n),s={...r.mcpServers||{}},o=s[t];s[t]=e,r.mcpServers=s;let i=JSON.stringify(o)!==JSON.stringify(e);return await Gz(r,n),{path:n,changed:i}}async function xI(t,e=Ka()){return!!(await CI(e)).mcpServers?.[t]}var Sb,Qt,ao=k(()=>{"use strict";V();ce();EI();Sb="prjct: agentic harness with project memory, workflow gates, intent briefs, and performance context. Use prjct_task_start as the MCP entrypoint for a work cycle; prjct retrieves focused context, persists evidence stations, and keeps humans in the loop for risky gates. Agents resume from prjct_task_status/workflow output, create or link reviewed intent/spec briefs when required, and persist synthesized learning instead of raw transcript fragments.";a(Uz,"getPrjctMcpConfig");a(TI,"isNonProductionPrjctPath");a(Bz,"resolvePublishedPrjctMcpConfig");a(Wz,"resolveLocalPrjctBin");Qt={context7:{command:"npx",args:["-y","@upstash/context7-mcp@latest"],description:"Library documentation lookup"},prjct:Uz(),linear:{command:"npx",args:["-y",bb,"https://mcp.linear.app/mcp"],description:"Linear MCP server (OAuth)"},jira:{command:"npx",args:["-y",bb,"https://mcp.atlassian.com/v1/mcp"],description:"Atlassian MCP server for Jira (OAuth)"}};a(Ka,"getClaudeMcpConfigPath");a(CI,"readMcpConfig");a(Gz,"writeMcpConfig");a(pu,"upsertMcpServer");a(xI,"hasMcpServer")});var OI={};R(OI,{buildCodexStatusLineToml:()=>MI,buildContext7McpTomlBlock:()=>$I,buildPrjctMcpTomlBlock:()=>af,codexHasContext7Server:()=>Tb,ensureCodexContext7Server:()=>gu,ensureCodexMcpServer:()=>fu,getCodexConfigTomlPath:()=>Er});import di from"node:fs/promises";import Eb from"node:path";function Er(){return process.env.PRJCT_TEST_MODE==="1"?Eb.join(ge(".prjct-tests"),"codex","config.toml"):ge(".codex","config.toml")}function mu(t){return`"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function II(t,e,n,r){let s=(e.args??[]).map(mu).join(", "),o=[n,`[mcp_servers.${t}]`,`command = ${mu(e.command)}`,`args = [${s}]`];if(e.env&&Object.keys(e.env).length>0){let i=Object.entries(e.env).map(([c,l])=>`${c} = ${mu(l)}`).join(", ");o.push(`env = { ${i} }`)}return o.push(r,""),o.join(`
22
22
  `)}function af(t=Qt.prjct){return II("prjct",t,RI,_I)}function $I(t=Qt.context7){return II("context7",t,AI,PI)}function NI(t,e,n,r,s){let o=t.indexOf(n),i=t.indexOf(r);if(o!==-1&&i!==-1&&i>o){let c=t.slice(0,o),l=t.slice(i+r.length),u=l.startsWith(`
@@ -3235,7 +3235,7 @@ ${Na.dim("Providers:")}`}var cpe,T0=k(()=>{"use strict";cpe={ready:Na.green("\u2
3235
3235
  ${s.dim("Run 'prjct start' to configure global/runtime adapters")}
3236
3236
  ${s.dim("Run 'prjct init' or 'prjct sync' to refresh AGENTS.md and project-level rules")}
3237
3237
  ${s.cyan("https://prjct.app")}
3238
- `)}else return!1;return!0}var IK=k(()=>{"use strict";a(lpe,"runBinCommand")});var $K=VK((W6e,upe)=>{upe.exports={name:"prjct-cli",version:"3.89.0",description:"The agentic harness for AI coding agents \u2014 work cycles, bounded RAG context, persistent memory, guardrails, and performance evals.",main:"dist/bin/prjct.mjs",bin:{prjct:"bin/prjct.cjs"},publishConfig:{access:"public",registry:"https://registry.npmjs.org"},scripts:{build:"node scripts/build.js","build:node":"node scripts/build.js",release:"node scripts/release.js","release:patch":"node scripts/release.js patch","release:minor":"node scripts/release.js minor","release:major":"node scripts/release.js major",prepare:"lefthook install","update-commands":`bun -e "const installer = require('./core/infrastructure/command-installer'); installer.syncCommands().then(r => console.log('Commands updated:', r)).catch(e => console.error('Error:', e.message))"`,"install-global":"./scripts/install.sh",update:"./scripts/update.sh",test:"bun test","test:unit":"bun test --path-ignore-patterns='**/e2e/**'","test:fast":"bun test --path-ignore-patterns='**/e2e/**' --dots","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:"bun run lint:no-let && biome lint .","lint:no-let":"bun scripts/check-no-let.ts","lint:fix":"biome lint --write .",knip:"knip","lint:meta":"bun core/cli/lint-meta-commentary.ts",format:"biome format --write .","format:check":"biome format .",check:"bun run lint:no-let && biome check .","check:fix":"biome check --write .","test:e2e":"bun test core/__tests__/e2e/","bench:ab":"bun scripts/bench-ab.ts","bench:weak-model":"bun scripts/bench-weak-model.ts","demo:weak-vs-frontier":"bun scripts/demo-weak-vs-frontier.ts","harness:score":"bun bin/prjct.ts harness score --md","gate:dominance":"bun test core/__tests__/services/weak-model-bench.test.ts core/__tests__/services/weak-frontier-demo.test.ts core/__tests__/services/harness-score.test.ts core/__tests__/services/dynasty-outcomes.test.ts core/__tests__/services/content-bound-stamp.test.ts core/__tests__/services/sot-bind.test.ts core/__tests__/services/trap-surface-slo.test.ts core/__tests__/services/impact-ready.test.ts core/__tests__/services/delivery-geometry.test.ts core/__tests__/services/cycle-budget-card.test.ts core/__tests__/services/land-rho.test.ts core/__tests__/services/one-breath-install.test.ts core/__tests__/services/doctor-heal.test.ts && bun run bench:weak-model && bun run demo:weak-vs-frontier"},keywords:["claude-code","gemini-cli","ai-agents","context-layer","developer-tools","ai-assistant","productivity","mcp","llm","coding-agents"],author:{name:"Juan Jos\xE9 L\xF3pez Lira",email:"jlopezlira@gmail.com",url:"https://prjct.app"},contributors:[{name:"prjct.app contributors"}],license:"MIT",licenses:[{type:"MIT",url:"https://opensource.org/licenses/MIT"}],dependencies:{"@clack/prompts":"1.0.0","@modelcontextprotocol/server":"2.0.0",chalk:"4.1.2",chokidar:"5.0.0","jsonc-parser":"3.3.1",zod:"4.3.6"},overrides:{"path-to-regexp":"8.4.0","brace-expansion":"5.0.5","fast-uri":">=3.1.2",hono:"4.12.27","ip-address":">=10.1.1",qs:"6.15.2"},devDependencies:{"@biomejs/biome":"2.3.13","@modelcontextprotocol/client":"2.0.0","@types/bun":"latest","@types/chokidar":"2.1.7","@types/node":"^22",esbuild:"0.28.1",knip:"6.3.1",lefthook:"2.1.0",typescript:"5.9.3"},repository:{type:"git",url:"git+https://github.com/prjct-app/cli.git"},bugs:{url:"https://github.com/prjct-app/cli/issues"},homepage:"https://prjct.app",packageManager:"bun@1.2.23",engines:{bun:">=1.0.0",node:">=22.5.0"},files:["assets/","bin/prjct","bin/prjct.cjs","dist/","templates/","scripts/install.sh","LICENSE","NOTICE","README.md","CHANGELOG.md"],prepublishOnly:"node scripts/build.js"}});var hpe={};import NK from"node:os";import Hw from"node:path";import Ma from"chalk";async function dpe(){let[t,...e]=process.argv.slice(2);if(["-v","--version","version"].includes(t)){let i=await Promise.resolve().then(()=>JK($K()));await fpe(i.version),process.exit(0)}if(["-h","--help",void 0].includes(t)&&(gpe(),process.exit(0)),t&&qp(t)&&!Bt.getByName(t)){let i=Gp[t];i&&(g.failWithHint({message:`'prjct ${t}' was removed in v2. ${i.note}`,hint:`Use: ${i.replacement}`}),process.exit(1))}let n=!!t&&!Bt.getByName(t)&&!(e.length===0&&$m(t)!==null),r=n?"capture":t,s=n?[[t,...e.filter(i=>!i.startsWith("-"))].join(" "),...e.filter(i=>i.startsWith("-"))]:e,o=s.includes("--md");o||g.start();try{let i=Bt.getByName(r);if(!i){let y=$m(r),w=y?`Did you mean 'prjct ${y}'? Run 'prjct --help' for all commands`:"Run 'prjct --help' to see available commands";g.failWithHint(yu("UNKNOWN_COMMAND",{message:`Unknown command: ${r}`,hint:w})),o||g.end(),process.exit(1)}if(i.deprecated){let y=i.replacedBy?`Use 'prjct ${i.replacedBy}' instead`:"Run 'prjct --help' to see available commands";g.failWithHint({message:`Command '${r}' is deprecated`,hint:y}),o||g.end(),process.exit(1)}i.implemented||(g.failWithHint({message:`Command '${r}' is not yet implemented`,hint:"Run 'prjct --help' to see available commands",docs:"https://github.com/prjct-app/cli"}),o||g.end(),process.exit(1));let{parsedArgs:c,options:l}=mpe(i,s),u=!process.stdin.isTTY||l.md===!0||l.json===!0;i.requiresLlm&&!u&&(g.failWithHint({message:`'prjct ${r}' requires an AI agent to process its output`,hint:`Use 'p. ${r}' inside Claude/Cursor, or add --md flag`}),o||g.end(),process.exit(1));let d=ppe(i,c);d&&(g.failWithHint(d),o||g.end(),process.exit(1));let p=Date.now(),m=await(async()=>{try{let y=await A.getProjectId(process.cwd());return y&&(await aa.expireIfStale(y),await aa.touch(y)),y}catch{return null}})(),f=new xa,h=await(async()=>{if(r==="analyze")return f.analyze(l);if(r==="setup")return f.setup(l);if(r==="update"||r==="upgrade")return f.update(l);let y=c.join(" ")||null,w=l.md===!0,b=Bt.getByName(r);if(b?.optionSchema)return Bt.executeWithOptions(r,y,process.cwd(),Nw(l,b.optionSchema));{let _={spec:a(v=>Nm(f,(v??"").trim().split(/\s+/).filter(Boolean),l,process.cwd()),"spec"),intent:a(v=>Nm(f,(v??"").trim().split(/\s+/).filter(Boolean),l,process.cwd()),"intent"),"audit-spec":a(v=>v?f.specAudit(v,process.cwd(),{md:w,lenses:l.lenses?String(l.lenses):void 0}):Promise.resolve({success:!1,error:"audit-spec requires a spec id"}),"audit-spec"),init:a(v=>f.init({idea:v,yes:l.yes===!0,pack:l.pack?String(l.pack):void 0,persona:l.persona?String(l.persona):void 0}),"init"),sync:a(()=>f.sync(process.cwd(),{preview:l.preview===!0||l["dry-run"]===!0,yes:l.yes===!0,json:l.json===!0,md:w,package:l.package?String(l.package):void 0,full:l.full===!0}),"sync"),"analysis-save-llm":a(v=>v?f.saveLlmAnalysis(v,process.cwd(),{md:w}):Promise.resolve({success:!1,error:"analysis-save-llm requires analysis text, JSON, or a file path"}),"analysis-save-llm"),start:a(()=>f.start(),"start"),login:a(()=>f.login({md:w}),"login"),logout:a(()=>f.logout(),"logout"),auth:a(v=>f.auth(v,{md:w}),"auth")}[r];if(_)return _(y);throw new Error(`Command '${r}' has no handler`)}})();if(m){let y=Date.now()-p;try{await aa.trackCommand(m,r,y)}catch{}try{await Xp.recordTiming(m,"command_duration",y,{command:r});let w=globalThis.__perfStartNs;if(w){let b=Number(process.hrtime.bigint()-w)/1e6;await Xp.recordTiming(m,"startup_time",b)}await Xp.recordMemory(m,{command:r})}catch{}}h?.message?console.log(h.message):h?.error&&console.error(h.error),o||g.end(),process.exit(h?.success?0:1)}catch(i){console.error("Error:",C(i)),process.env.DEBUG&&console.error(pb(i)),o||g.end(),process.exit(1)}}function ppe(t,e){if(!t.params)return null;let r=t.params.replace(/\[[^\]]*\]/g,"").match(/<[^>]+>/g);if(!r||r.length===0)return null;if(e.length<r.length){let s=r.map(i=>i.slice(1,-1)).join(", "),o=t.usage.terminal||`prjct ${t.name} ${t.params}`;return yu("MISSING_PARAM",{message:`Missing required parameter: ${s}`,hint:`Usage: ${o}`})}return null}function mpe(t,e){let n=[],r={},s=a(o=>{if(o>=e.length)return;let i=e[o];if(i.startsWith("--")){let c=i.slice(2);o+1<e.length&&!e[o+1].startsWith("--")?(r[c]=e[o+1],s(o+2)):(r[c]=!0,s(o+1))}else n.push(i),s(o+1)},"parseAt");return s(0),{parsedArgs:n,options:r}}async function fpe(t){let e=await mi(),n=Hw.join(NK.homedir(),".claude","commands","p.md"),r=Hw.join(NK.homedir(),".gemini","commands","p.toml"),[s,o,i,c]=await Promise.all([j(n),j(r),j(Hw.join(process.cwd(),".cursor","commands","sync.md")),j(Hw.join(process.cwd(),".cursor"))]),l=await Su();console.log(E0(t)),console.log(Ql("Claude Code",e.claude.installed?s?"ready":"installed":"missing",e.claude.version?Ma.dim(` (v${e.claude.version})`):"")),console.log(Ql("Gemini CLI",e.gemini.installed?o?"ready":"installed":"missing",e.gemini.version?Ma.dim(` (v${e.gemini.version})`):"")),console.log(Ql("Antigravity",l.installed?l.skillInstalled?"ready":"detected":"missing",l.installed&&!l.skillInstalled?` ${Ma.dim("(run prjct start)")}`:"")),console.log(Ql("Cursor IDE",i?"ready":c?"detected":"missing",i?` ${Ma.dim("(use prjct router)")}`:c?` ${Ma.dim("(run prjct init)")}`:"","\u25CB no .cursor/ folder")),console.log(`
3238
+ `)}else return!1;return!0}var IK=k(()=>{"use strict";a(lpe,"runBinCommand")});var $K=VK((W6e,upe)=>{upe.exports={name:"prjct-cli",version:"3.91.0",description:"The agentic harness for AI coding agents \u2014 work cycles, bounded RAG context, persistent memory, guardrails, and performance evals.",main:"dist/bin/prjct.mjs",bin:{prjct:"bin/prjct.cjs"},publishConfig:{access:"public",registry:"https://registry.npmjs.org"},scripts:{build:"node scripts/build.js","build:node":"node scripts/build.js",release:"node scripts/release.js","release:patch":"node scripts/release.js patch","release:minor":"node scripts/release.js minor","release:major":"node scripts/release.js major",prepare:"lefthook install","update-commands":`bun -e "const installer = require('./core/infrastructure/command-installer'); installer.syncCommands().then(r => console.log('Commands updated:', r)).catch(e => console.error('Error:', e.message))"`,"install-global":"./scripts/install.sh",update:"./scripts/update.sh",test:"bun test","test:unit":"bun test --path-ignore-patterns='**/e2e/**'","test:fast":"bun test --path-ignore-patterns='**/e2e/**' --dots","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:"bun run lint:no-let && biome lint .","lint:no-let":"bun scripts/check-no-let.ts","lint:fix":"biome lint --write .",knip:"knip","lint:meta":"bun core/cli/lint-meta-commentary.ts",format:"biome format --write .","format:check":"biome format .",check:"bun run lint:no-let && biome check .","check:fix":"biome check --write .","test:e2e":"bun test core/__tests__/e2e/","bench:ab":"bun scripts/bench-ab.ts","bench:weak-model":"bun scripts/bench-weak-model.ts","demo:weak-vs-frontier":"bun scripts/demo-weak-vs-frontier.ts","harness:score":"bun bin/prjct.ts harness score --md","gate:dominance":"bun test core/__tests__/services/weak-model-bench.test.ts core/__tests__/services/weak-frontier-demo.test.ts core/__tests__/services/harness-score.test.ts core/__tests__/services/dynasty-outcomes.test.ts core/__tests__/services/content-bound-stamp.test.ts core/__tests__/services/sot-bind.test.ts core/__tests__/services/trap-surface-slo.test.ts core/__tests__/services/impact-ready.test.ts core/__tests__/services/delivery-geometry.test.ts core/__tests__/services/cycle-budget-card.test.ts core/__tests__/services/land-rho.test.ts core/__tests__/services/one-breath-install.test.ts core/__tests__/services/doctor-heal.test.ts && bun run bench:weak-model && bun run demo:weak-vs-frontier"},keywords:["claude-code","gemini-cli","ai-agents","context-layer","developer-tools","ai-assistant","productivity","mcp","llm","coding-agents"],author:{name:"Juan Jos\xE9 L\xF3pez Lira",email:"jlopezlira@gmail.com",url:"https://prjct.app"},contributors:[{name:"prjct.app contributors"}],license:"MIT",licenses:[{type:"MIT",url:"https://opensource.org/licenses/MIT"}],dependencies:{"@clack/prompts":"1.0.0","@modelcontextprotocol/server":"2.0.0",chalk:"4.1.2",chokidar:"5.0.0","jsonc-parser":"3.3.1",zod:"4.3.6"},overrides:{"path-to-regexp":"8.4.0","brace-expansion":"5.0.5","fast-uri":">=3.1.2",hono:"4.12.27","ip-address":">=10.1.1",qs:"6.15.2"},devDependencies:{"@biomejs/biome":"2.3.13","@modelcontextprotocol/client":"2.0.0","@types/bun":"latest","@types/chokidar":"2.1.7","@types/node":"^22",esbuild:"0.28.1",knip:"6.3.1",lefthook:"2.1.0",typescript:"5.9.3"},repository:{type:"git",url:"git+https://github.com/prjct-app/cli.git"},bugs:{url:"https://github.com/prjct-app/cli/issues"},homepage:"https://prjct.app",packageManager:"bun@1.2.23",engines:{bun:">=1.0.0",node:">=22.5.0"},files:["assets/","bin/prjct","bin/prjct.cjs","dist/","templates/","scripts/install.sh","LICENSE","NOTICE","README.md","CHANGELOG.md"],prepublishOnly:"node scripts/build.js"}});var hpe={};import NK from"node:os";import Hw from"node:path";import Ma from"chalk";async function dpe(){let[t,...e]=process.argv.slice(2);if(["-v","--version","version"].includes(t)){let i=await Promise.resolve().then(()=>JK($K()));await fpe(i.version),process.exit(0)}if(["-h","--help",void 0].includes(t)&&(gpe(),process.exit(0)),t&&qp(t)&&!Bt.getByName(t)){let i=Gp[t];i&&(g.failWithHint({message:`'prjct ${t}' was removed in v2. ${i.note}`,hint:`Use: ${i.replacement}`}),process.exit(1))}let n=!!t&&!Bt.getByName(t)&&!(e.length===0&&$m(t)!==null),r=n?"capture":t,s=n?[[t,...e.filter(i=>!i.startsWith("-"))].join(" "),...e.filter(i=>i.startsWith("-"))]:e,o=s.includes("--md");o||g.start();try{let i=Bt.getByName(r);if(!i){let y=$m(r),w=y?`Did you mean 'prjct ${y}'? Run 'prjct --help' for all commands`:"Run 'prjct --help' to see available commands";g.failWithHint(yu("UNKNOWN_COMMAND",{message:`Unknown command: ${r}`,hint:w})),o||g.end(),process.exit(1)}if(i.deprecated){let y=i.replacedBy?`Use 'prjct ${i.replacedBy}' instead`:"Run 'prjct --help' to see available commands";g.failWithHint({message:`Command '${r}' is deprecated`,hint:y}),o||g.end(),process.exit(1)}i.implemented||(g.failWithHint({message:`Command '${r}' is not yet implemented`,hint:"Run 'prjct --help' to see available commands",docs:"https://github.com/prjct-app/cli"}),o||g.end(),process.exit(1));let{parsedArgs:c,options:l}=mpe(i,s),u=!process.stdin.isTTY||l.md===!0||l.json===!0;i.requiresLlm&&!u&&(g.failWithHint({message:`'prjct ${r}' requires an AI agent to process its output`,hint:`Use 'p. ${r}' inside Claude/Cursor, or add --md flag`}),o||g.end(),process.exit(1));let d=ppe(i,c);d&&(g.failWithHint(d),o||g.end(),process.exit(1));let p=Date.now(),m=await(async()=>{try{let y=await A.getProjectId(process.cwd());return y&&(await aa.expireIfStale(y),await aa.touch(y)),y}catch{return null}})(),f=new xa,h=await(async()=>{if(r==="analyze")return f.analyze(l);if(r==="setup")return f.setup(l);if(r==="update"||r==="upgrade")return f.update(l);let y=c.join(" ")||null,w=l.md===!0,b=Bt.getByName(r);if(b?.optionSchema)return Bt.executeWithOptions(r,y,process.cwd(),Nw(l,b.optionSchema));{let _={spec:a(v=>Nm(f,(v??"").trim().split(/\s+/).filter(Boolean),l,process.cwd()),"spec"),intent:a(v=>Nm(f,(v??"").trim().split(/\s+/).filter(Boolean),l,process.cwd()),"intent"),"audit-spec":a(v=>v?f.specAudit(v,process.cwd(),{md:w,lenses:l.lenses?String(l.lenses):void 0}):Promise.resolve({success:!1,error:"audit-spec requires a spec id"}),"audit-spec"),init:a(v=>f.init({idea:v,yes:l.yes===!0,pack:l.pack?String(l.pack):void 0,persona:l.persona?String(l.persona):void 0}),"init"),sync:a(()=>f.sync(process.cwd(),{preview:l.preview===!0||l["dry-run"]===!0,yes:l.yes===!0,json:l.json===!0,md:w,package:l.package?String(l.package):void 0,full:l.full===!0}),"sync"),"analysis-save-llm":a(v=>v?f.saveLlmAnalysis(v,process.cwd(),{md:w}):Promise.resolve({success:!1,error:"analysis-save-llm requires analysis text, JSON, or a file path"}),"analysis-save-llm"),start:a(()=>f.start(),"start"),login:a(()=>f.login({md:w}),"login"),logout:a(()=>f.logout(),"logout"),auth:a(v=>f.auth(v,{md:w}),"auth")}[r];if(_)return _(y);throw new Error(`Command '${r}' has no handler`)}})();if(m){let y=Date.now()-p;try{await aa.trackCommand(m,r,y)}catch{}try{await Xp.recordTiming(m,"command_duration",y,{command:r});let w=globalThis.__perfStartNs;if(w){let b=Number(process.hrtime.bigint()-w)/1e6;await Xp.recordTiming(m,"startup_time",b)}await Xp.recordMemory(m,{command:r})}catch{}}h?.message?console.log(h.message):h?.error&&console.error(h.error),o||g.end(),process.exit(h?.success?0:1)}catch(i){console.error("Error:",C(i)),process.env.DEBUG&&console.error(pb(i)),o||g.end(),process.exit(1)}}function ppe(t,e){if(!t.params)return null;let r=t.params.replace(/\[[^\]]*\]/g,"").match(/<[^>]+>/g);if(!r||r.length===0)return null;if(e.length<r.length){let s=r.map(i=>i.slice(1,-1)).join(", "),o=t.usage.terminal||`prjct ${t.name} ${t.params}`;return yu("MISSING_PARAM",{message:`Missing required parameter: ${s}`,hint:`Usage: ${o}`})}return null}function mpe(t,e){let n=[],r={},s=a(o=>{if(o>=e.length)return;let i=e[o];if(i.startsWith("--")){let c=i.slice(2);o+1<e.length&&!e[o+1].startsWith("--")?(r[c]=e[o+1],s(o+2)):(r[c]=!0,s(o+1))}else n.push(i),s(o+1)},"parseAt");return s(0),{parsedArgs:n,options:r}}async function fpe(t){let e=await mi(),n=Hw.join(NK.homedir(),".claude","commands","p.md"),r=Hw.join(NK.homedir(),".gemini","commands","p.toml"),[s,o,i,c]=await Promise.all([j(n),j(r),j(Hw.join(process.cwd(),".cursor","commands","sync.md")),j(Hw.join(process.cwd(),".cursor"))]),l=await Su();console.log(E0(t)),console.log(Ql("Claude Code",e.claude.installed?s?"ready":"installed":"missing",e.claude.version?Ma.dim(` (v${e.claude.version})`):"")),console.log(Ql("Gemini CLI",e.gemini.installed?o?"ready":"installed":"missing",e.gemini.version?Ma.dim(` (v${e.gemini.version})`):"")),console.log(Ql("Antigravity",l.installed?l.skillInstalled?"ready":"detected":"missing",l.installed&&!l.skillInstalled?` ${Ma.dim("(run prjct start)")}`:"")),console.log(Ql("Cursor IDE",i?"ready":c?"detected":"missing",i?` ${Ma.dim("(use prjct router)")}`:c?` ${Ma.dim("(run prjct init)")}`:"","\u25CB no .cursor/ folder")),console.log(`
3239
3239
  ${Ma.dim("Run 'prjct start' for Claude/Gemini, 'prjct init' for Cursor")}
3240
3240
  ${Ma.cyan("https://prjct.app")}
3241
3241
  `)}function gpe(){console.log(`
@@ -5,6 +5,6 @@ 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
- import{a as o}from"./hook-chunks/chunk-E66B27AL.mjs";import{spawn as l}from"node:child_process";import{readSync as H}from"node:fs";import{isatty as h}from"node:tty";var p={"session-start":{load:o(()=>import("./hook-chunks/session-start-GJPAQ3GL.mjs"),"load"),exportName:"runSessionStartHook"},prompt:{load:o(()=>import("./hook-chunks/prompt-6L7B546V.mjs"),"load"),exportName:"runPromptHook"},"pre-bash":{load:o(()=>import("./hook-chunks/pre-bash-3FACZOB5.mjs"),"load"),exportName:"runPreBashHook"},"pre-commit":{load:o(()=>import("./hook-chunks/pre-commit-MDFDQ5QZ.mjs"),"load"),exportName:"runPreCommitHook"},"pre-secrets":{load:o(()=>import("./hook-chunks/pre-secrets-IE5NX5X5.mjs"),"load"),exportName:"runPreSecretsHook"},"pre-package":{load:o(()=>import("./hook-chunks/pre-package-ITHMLNGN.mjs"),"load"),exportName:"runPrePackageHook"},"pre-edit":{load:o(()=>import("./hook-chunks/pre-edit-ORX656T5.mjs"),"load"),exportName:"runPreEditHook"},"pre-search":{load:o(()=>import("./hook-chunks/pre-search-UFS2Z5VJ.mjs"),"load"),exportName:"runPreSearchHook"},"post-edit":{load:o(()=>import("./hook-chunks/post-edit-AEFFZFPO.mjs"),"load"),exportName:"runPostEditHook"},stop:{load:o(()=>import("./hook-chunks/stop-IWI5SQG6.mjs"),"load"),exportName:"runStopHook"},"subagent-start":{load:o(()=>import("./hook-chunks/subagent-start-NJZOWV2P.mjs"),"load"),exportName:"runSubagentStartHook"},"subagent-stop":{load:o(()=>import("./hook-chunks/subagent-stop-R6HIIVWQ.mjs"),"load"),exportName:"runSubagentStopHook"},notification:{load:o(()=>import("./hook-chunks/notification-2TZO3WRM.mjs"),"load"),exportName:"runNotificationHook"},"cwd-changed":{load:o(()=>import("./hook-chunks/cwd-changed-KXOCN55N.mjs"),"load"),exportName:"runCwdChangedHook"}},d=new Map;async function k(r){let n=d.get(r);if(n)return n;let e=p[r];if(!e)return;let s=(await e.load())[e.exportName];if(typeof s=="function")return d.set(r,s),s}o(k,"resolveRunner");var g=Object.fromEntries(Object.keys(p).map(r=>[r,async(n,e)=>{let t=await k(r);if(!t)throw new Error(`Hook runner missing export for '${r}'`);return t(n,e)}]));function u(r){return r&&p[r]?g[r]:void 0}o(u,"getHookRunner");var f="PRJCT_HOOK_AFTER_EMIT";function x(r){if(h(0))return"";try{process.stdin.fd}catch{}let n=Date.now()+r,e=new Int32Array(new SharedArrayBuffer(4)),t=Buffer.alloc(65536),s=[];for(;;)try{let i=H(0,t,0,t.length,null);if(i===0)break;s.push(Buffer.from(t.subarray(0,i)))}catch(i){if(i.code==="EAGAIN"&&Date.now()<n){Atomics.wait(e,0,0,1);continue}break}return Buffer.concat(s).toString("utf-8")}o(x,"readStdinSync");function w(r,n){let e=process.argv[1];if(!e||!r)return!1;try{let t=l(process.execPath,[e,"hook",r],{detached:!0,stdio:["pipe","ignore","ignore"],cwd:process.cwd(),env:{...process.env,[f]:"1",PRJCT_NO_DAEMON:"1"},shell:!1});return t.stdin?.write(n),t.stdin?.end(),t.unref(),!0}catch{return!1}}o(w,"trySpawnAfterEmitWorker");async function N(){let n=process.argv.slice(2)[1],e=process.env[f]==="1";try{let t=u(n);t||(e||process.stdout.write(`{}
8
+ import{a as o}from"./hook-chunks/chunk-E66B27AL.mjs";import{spawn as l}from"node:child_process";import{readSync as H}from"node:fs";import{isatty as h}from"node:tty";var p={"session-start":{load:o(()=>import("./hook-chunks/session-start-HA7IRBFX.mjs"),"load"),exportName:"runSessionStartHook"},prompt:{load:o(()=>import("./hook-chunks/prompt-S4MMIXH5.mjs"),"load"),exportName:"runPromptHook"},"pre-bash":{load:o(()=>import("./hook-chunks/pre-bash-VIABNO5E.mjs"),"load"),exportName:"runPreBashHook"},"pre-commit":{load:o(()=>import("./hook-chunks/pre-commit-NVQVXHZQ.mjs"),"load"),exportName:"runPreCommitHook"},"pre-secrets":{load:o(()=>import("./hook-chunks/pre-secrets-IE5NX5X5.mjs"),"load"),exportName:"runPreSecretsHook"},"pre-package":{load:o(()=>import("./hook-chunks/pre-package-KFJZXI5T.mjs"),"load"),exportName:"runPrePackageHook"},"pre-edit":{load:o(()=>import("./hook-chunks/pre-edit-V4RD45C4.mjs"),"load"),exportName:"runPreEditHook"},"pre-search":{load:o(()=>import("./hook-chunks/pre-search-7KRU5D2O.mjs"),"load"),exportName:"runPreSearchHook"},"post-edit":{load:o(()=>import("./hook-chunks/post-edit-JD7YFEBZ.mjs"),"load"),exportName:"runPostEditHook"},stop:{load:o(()=>import("./hook-chunks/stop-HPZCLDPM.mjs"),"load"),exportName:"runStopHook"},"subagent-start":{load:o(()=>import("./hook-chunks/subagent-start-7KZUTKV5.mjs"),"load"),exportName:"runSubagentStartHook"},"subagent-stop":{load:o(()=>import("./hook-chunks/subagent-stop-7C72RWGO.mjs"),"load"),exportName:"runSubagentStopHook"},notification:{load:o(()=>import("./hook-chunks/notification-S2IJJ6JW.mjs"),"load"),exportName:"runNotificationHook"},"cwd-changed":{load:o(()=>import("./hook-chunks/cwd-changed-56X7BNS6.mjs"),"load"),exportName:"runCwdChangedHook"}},d=new Map;async function k(r){let n=d.get(r);if(n)return n;let e=p[r];if(!e)return;let s=(await e.load())[e.exportName];if(typeof s=="function")return d.set(r,s),s}o(k,"resolveRunner");var g=Object.fromEntries(Object.keys(p).map(r=>[r,async(n,e)=>{let t=await k(r);if(!t)throw new Error(`Hook runner missing export for '${r}'`);return t(n,e)}]));function u(r){return r&&p[r]?g[r]:void 0}o(u,"getHookRunner");var f="PRJCT_HOOK_AFTER_EMIT";function x(r){if(h(0))return"";try{process.stdin.fd}catch{}let n=Date.now()+r,e=new Int32Array(new SharedArrayBuffer(4)),t=Buffer.alloc(65536),s=[];for(;;)try{let i=H(0,t,0,t.length,null);if(i===0)break;s.push(Buffer.from(t.subarray(0,i)))}catch(i){if(i.code==="EAGAIN"&&Date.now()<n){Atomics.wait(e,0,0,1);continue}break}return Buffer.concat(s).toString("utf-8")}o(x,"readStdinSync");function w(r,n){let e=process.argv[1];if(!e||!r)return!1;try{let t=l(process.execPath,[e,"hook",r],{detached:!0,stdio:["pipe","ignore","ignore"],cwd:process.cwd(),env:{...process.env,[f]:"1",PRJCT_NO_DAEMON:"1"},shell:!1});return t.stdin?.write(n),t.stdin?.end(),t.unref(),!0}catch{return!1}}o(w,"trySpawnAfterEmitWorker");async function N(){let n=process.argv.slice(2)[1],e=process.env[f]==="1";try{let t=u(n);t||(e||process.stdout.write(`{}
9
9
  `),process.exit(0));let s=x(1e3),i=(()=>{try{return s?JSON.parse(s):{}}catch{return{}}})(),c=[];if(await t(process.cwd(),{afterEmitOnly:e,input:i,sink:o(a=>{e||process.stdout.write(a)},"sink"),detachAfterEmit:o(a=>{c.push(a)},"detachAfterEmit")}),e){for(let a of c)await a().catch(()=>{});process.exit(0)}if(c.length>0&&(process.env.PRJCT_HOOK_BENCH==="1"&&process.exit(0),!w(n,s)))for(let m of c)await m().catch(()=>{});process.exit(0)}catch{e||process.stdout.write(`{}
10
10
  `),process.exit(0)}}o(N,"main");N();
@@ -1282,7 +1282,7 @@ CREATE TABLE velocity_sprints (
1282
1282
  FROM code_symbol_edges AS edge
1283
1283
  JOIN code_symbols AS target ON target.id = edge.dst
1284
1284
  WHERE edge.edge_type = 'CALLS'
1285
- GROUP BY target.file`);return new Map(e.map(n=>[n.file,n.caller_count]))}catch{return new Map}}function Tk(t,e,n=2){let r=new Set(e),{reverse:s}=Sk(t,"CALLS"),o=new Set;for(let l of e)for(let u of Po(t,l))o.add(u.id);let i=new Set,c=new Set(o);return Array.from({length:n}).reduce(l=>{let u=[];for(let d of l)for(let p of s.get(d)??[])if(!c.has(p))if(c.add(p),u.push(p),p.startsWith("file:")){let m=p.slice(5);r.has(m)||i.add(m)}else{let m=wP(t,p);m&&!r.has(m.file)&&i.add(m.file)}return u},[...o]),[...i]}var kk,sJ,oJ,iJ,An=k(()=>{"use strict";rp();U();ke();kk="symbol-graph",sJ=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".py",".go",".rs",".java"]),oJ=new Set(["if","for","while","switch","catch","function","class","return","typeof","new","throw","await","void","super","this","import","require","console","Math","JSON","Object","Array","Promise","Map","Set","Date","Error","Buffer","process","describe","it","test","expect","beforeEach","afterEach","beforeAll","afterAll"]),iJ=new Set(["if","for","while","switch","catch","return","await","typeof","new","throw","else","case","from","import","export","class","function","const","let","var","get","set","constructor","async","static","public","private","protected","readonly","abstract","extends","implements","interface","type","enum","default","as","of","in","do","try","finally","yield","with"]);a(hn,"lineOf");a(aJ,"symbolId");a(dP,"qnameOf");a(Ep,"isSourceFile");a(ma,"stripNoise");a(pP,"emptyExtract");a(mP,"finalizeCalls");a(cJ,"extractTsJs");a(lJ,"extractPython");a(uJ,"extractGo");a(dJ,"extractRust");a(pJ,"extractJava");a(fP,"extractFile");a(mJ,"loadTsPathMap");a(fJ,"applyTsPath");a(gJ,"resolveSpecifierToFile");a(hJ,"resolveImportsForExtract");a(uP,"matchFileToMod");a(gP,"enclosingSymbol");a(hP,"resolveCallTargets");a(yP,"buildFromExtracts");a(kP,"extractProject");a(yJ,"persistGraph");a(kJ,"patchGraph");a(fa,"indexSymbols");a(wk,"updateSymbols");a(Je,"hasSymbolIndex");a(sn,"loadMeta");a(ml,"rowToSymbol");a(Wn,"listAllSymbols");a(Bn,"searchSymbols");a(bk,"scoreFilesFromQuery");a(Po,"symbolsInFile");a(Sk,"loadEdges");a(wP,"symbolById");a(fl,"tracePath");a(vk,"fileFanIn");a(Ek,"fileFanInByFile");a(Tk,"filesCallingInto")});function Tp(t){if(t.length===0)return[];let e=t[0]?.score||1;return t.map(n=>({path:n.path,score:n.score/e}))}var gl,bP=k(()=>{"use strict";ua();da();Vr();An();a(Tp,"normalize");gl=[{name:"bm25",kind:"query",defaultWeight:.45,hasIndex:a(t=>nP(t),"hasIndex"),scoreFromQuery:a((t,e,n)=>Tp(wp(t,e,n)),"scoreFromQuery")},{name:"symbols",kind:"query",defaultWeight:.2,hasIndex:a(t=>Je(t),"hasIndex"),scoreFromQuery:a((t,e,n)=>Tp(bk(t,e,n)),"scoreFromQuery")},{name:"imports",kind:"seed",defaultWeight:.2,hasIndex:a(t=>Mt(t)!==null,"hasIndex"),scoreFromSeeds:a((t,e,n)=>{let r=Mt(t);return r?Tp(pa(e,r,n.importDepth)):[]},"scoreFromSeeds")},{name:"cochange",kind:"seed",defaultWeight:.15,hasIndex:a(t=>Un(t)!==null,"hasIndex"),scoreFromSeeds:a((t,e)=>{let n=Un(t);return n?Tp(_o(e,n)):[]},"scoreFromSeeds")}]});function vP(t,e,n={}){let r={...wJ,...n},s={bm25:r.bm25Weight,symbols:r.symbolsWeight,imports:r.importWeight,cochange:r.cochangeWeight},o=gl.filter(m=>m.kind==="query"),i=gl.filter(m=>m.kind==="seed"),c=new Map,l=new Map;for(let m of o){let f=m.scoreFromQuery(t,e,r.topN*3);if(f.length!==0){c.set(m.name,new Map(f.map(g=>[g.path,g.score])));for(let g of f.slice(0,SP))l.set(g.path,Math.max(l.get(g.path)??0,g.score))}}if(c.size===0)return[];let u=[...l.entries()].sort((m,f)=>f[1]-m[1]).slice(0,SP).map(([m])=>m);for(let m of i){let f=m.scoreFromSeeds(t,u,{importDepth:r.importDepth});f.length!==0&&c.set(m.name,new Map(f.map(g=>[g.path,g.score])))}let d=new Set;for(let m of c.values())for(let f of m.keys())d.add(f);let p=[];for(let m of d){let f=[...c].reduce((g,[h,w])=>{let b=w.get(m)??0,C=s[h]??gl.find(_=>_.name===h)?.defaultWeight??0;return g+b*C},0);p.push({path:m,finalScore:f,signals:{bm25:c.get("bm25")?.get(m)??0,imports:c.get("imports")?.get(m)??0,cochange:c.get("cochange")?.get(m)??0,symbols:c.get("symbols")?.get(m)??0}})}return p.sort((m,f)=>f.finalScore-m.finalScore),p.slice(0,r.topN)}function EP(t){let e={};for(let n of gl)e[n.name]=n.hasIndex(t);return{bm25:e.bm25??!1,imports:e.imports??!1,cochange:e.cochange??!1,symbols:e.symbols??!1}}var wJ,SP,TP=k(()=>{"use strict";bP();wJ={bm25Weight:.45,importWeight:.2,cochangeWeight:.15,symbolsWeight:.2,topN:15,importDepth:2},SP=10;a(vP,"rankFiles");a(EP,"hasIndexes")});function bJ(t){return t instanceof ga}function dt(t){return bJ(t)||t instanceof Error?t.message:typeof t=="string"?t:"Unknown error"}var ga,Cp,xp,hl,Kr=k(()=>{"use strict";ga=class extends Error{static{a(this,"PrjctError")}code;isOperational;constructor(e,n="PRJCT_ERROR"){super(e),this.name="PrjctError",this.code=n,this.isOperational=!0,Error.captureStackTrace?.(this,this.constructor)}},Cp=class t extends ga{static{a(this,"ProjectError")}constructor(e,n="PROJECT_ERROR"){super(e,n),this.name="ProjectError"}static notInitialized(){return new t("Project not initialized. Run p. init first.","PROJECT_NOT_INIT")}static notFound(e){return new t(`Project not found: ${e}`,"PROJECT_NOT_FOUND")}static invalidId(e){return new t(`Invalid project ID: ${e}`,"PROJECT_INVALID_ID")}},xp=class t extends ga{static{a(this,"TemplateError")}constructor(e,n="TEMPLATE_ERROR"){super(e,n),this.name="TemplateError"}static notFound(e){return new t(`Template not found: ${e}.md`,"TEMPLATE_NOT_FOUND")}static parseFailed(e){return new t(`Failed to parse template: ${e}`,"TEMPLATE_PARSE_ERROR")}},hl=class t extends ga{static{a(this,"AgentError")}constructor(e,n="AGENT_ERROR"){super(e,n),this.name="AgentError"}static notSupported(e){return new t(`Unsupported agent type: ${e}`,"AGENT_NOT_SUPPORTED")}static initFailed(e){return new t(`Agent initialization failed: ${e}`,"AGENT_INIT_FAILED")}};a(bJ,"isPrjctError");a(dt,"getErrorMessage")});function CP(t){let e=t.toLowerCase();return e.includes("github")?"github":e.includes("gitlab")?"gitlab":e.includes("bitbucket")?"bitbucket":"other"}function xk(t){let e=t.trim();if(!e)return{};let n=e.match(/^[^/@]+@([^:/]+):(.+?)(?:\.git)?\/?$/);if(n)return{provider:CP(n[1]),repoSlug:n[2]};try{let r=new URL(e),s=r.pathname.replace(/^\/+/,"").replace(/\.git$/,"").replace(/\/+$/,"");return!r.host||!s?{}:{provider:CP(r.host),repoSlug:s}}catch{return{}}}async function SJ(t){try{let{stdout:e}=await J("git",["remote","get-url","origin"],{cwd:t});return e.trim()||void 0}catch{return}}async function vJ(t){try{let{stdout:e}=await J("git",["symbolic-ref","--short","refs/remotes/origin/HEAD"],{cwd:t});return e.trim().replace(/^origin\//,"")||void 0}catch{return}}function Io(t){return typeof t=="string"&&t.length>0?t:void 0}function xP(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function EJ(t){return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function _p(t){let e=v.getDoc(t,"project")||{},n=Io(e.repoPath),{provider:r,repoSlug:s}=n?xk(await SJ(n)||""):{},o=n?await vJ(n):void 0,i=Array.isArray(e.techStack)?e.techStack.filter(c=>typeof c=="string"):void 0;return EJ({provider:r,repoSlug:s,currentBranch:Io(e.currentBranch),defaultBranch:o,stack:Io(e.stack),techStack:i&&i.length>0?i:void 0,version:Io(e.version),commitCount:xP(e.commitCount),fileCount:xP(e.fileCount),lastCommit:Io(e.lastSyncCommit),hasUncommitted:typeof e.hasUncommittedChanges=="boolean"?e.hasUncommittedChanges:void 0,cliVersion:Io(e.cliVersion),syncedAt:Io(e.lastSync)})}var Rp=k(()=>{"use strict";U();de();a(CP,"providerForHost");a(xk,"parseRemote");a(SJ,"gitRemoteUrl");a(vJ,"gitDefaultBranch");a(Io,"str");a(xP,"num");a(EJ,"compact");a(_p,"buildProjectMeta")});import TJ from"node:crypto";function xJ(t,e=CJ){let n=Buffer.from(e.replace(/-/g,""),"hex"),s=TJ.createHash("sha1").update(n).update(t,"utf8").digest().subarray(0,16);s[6]=s[6]&15|80,s[8]=s[8]&63|128;let o=s.toString("hex");return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20,32)}`}async function _J(t){let e=await J("git",["remote","get-url","origin"],{cwd:t}).then(({stdout:s})=>s.trim()||null).catch(()=>null);if(!e)return null;let{provider:n,repoSlug:r}=xk(e);return!n||!r?null:`${n}:${r}`.toLowerCase()}async function _P(t){let e=await _J(t);return e?xJ(e):null}var CJ,RP=k(()=>{"use strict";de();Rp();CJ="6f9b2c1a-3d4e-5f60-8a7b-1c2d3e4f5a6b";a(xJ,"uuidv5");a(_J,"repoKey");a(_P,"deriveProjectId")});var AP={};R(AP,{PACKAGE_ROOT:()=>zr,VERSION:()=>Ze,getPackageRoot:()=>Rk,getVersion:()=>jo,resetPackageRoot:()=>Ak});import _k from"node:fs";import Ap from"node:path";function Rk(){if(Gn.packageRoot)return Gn.packageRoot;let t=a((e,n)=>{if(n>=5)return null;let r=Ap.join(e,"package.json");if(_k.existsSync(r))try{if(JSON.parse(_k.readFileSync(r,"utf-8")).name==="prjct-cli")return e}catch{}return t(Ap.dirname(e),n+1)},"findPackageRoot");return Gn.packageRoot=t(__dirname,0)??Ap.join(__dirname,"..","..",".."),Gn.packageRoot}function jo(){if(Gn.version)return Gn.version;let t="3.89.0";if(t&&/^\d+\.\d+\.\d+/.test(t))return Gn.version=t,Gn.version;try{let e=Ap.join(Rk(),"package.json"),n=JSON.parse(_k.readFileSync(e,"utf-8"));return Gn.version=n.version,Gn.version}catch(e){return process.env.PRJCT_DEBUG==="1"&&console.error("Failed to read version from package.json:",x(e)),"0.0.0"}}function Ak(t){Gn.packageRoot=t,Gn.version=null}var Gn,Ze,zr,Wt=k(()=>{"use strict";Z();Gn={version:null,packageRoot:null};a(Rk,"getPackageRoot");a(jo,"getVersion");a(Ak,"resetPackageRoot");Ze=jo(),zr=Rk()});async function Pp(t){try{let{stdout:e}=await ue(t,{timeout:5e3});return{success:!0,output:e.trim()}}catch{return{success:!1,output:""}}}async function RJ(){let t=await Pp("gh api user --jq .login");if(t.success&&t.output)return t.output;let e=await Pp("git config --global github.user");return e.success&&e.output?e.output:null}async function AJ(){let t=await Pp("git config user.name");return t.success&&t.output?t.output:null}async function PJ(){let t=await Pp("git config user.email");return t.success&&t.output?t.output:null}async function ha(){let[t,e,n]=await Promise.all([RJ(),AJ(),PJ()]);return{github:t,email:n,name:e||t||"Unknown"}}var Ip=k(()=>{"use strict";de();a(Pp,"execCommand");a(RJ,"detectGitHubUsername");a(AJ,"detectGitName");a(PJ,"detectGitEmail");a(ha,"detect")});var jp={};R(jp,{worktreeService:()=>IJ});import Ik from"node:fs/promises";import Tr from"node:path";var PP,jk,IJ,Np=k(()=>{"use strict";de();ke();PP=".worktrees",jk=class{static{a(this,"WorktreeService")}async create(e,n,r={}){let s=await this.getMainWorktree(e),o=Tr.join(s,PP,n),i=r.branch||`feat/${n}`;await Ik.mkdir(Tr.join(s,PP),{recursive:!0});let c=r.baseBranch?` ${r.baseBranch}`:"";await ue(`git worktree add "${o}" -b "${i}"${c}`,{cwd:s});let{stdout:l}=await ue("git rev-parse HEAD",{cwd:o});return{path:o,branch:i,commit:l.trim(),isMain:!1,slug:n}}async remove(e,n=!1){let r=await this.getMainWorktree(e),s=n?await ue("git rev-parse --abbrev-ref HEAD",{cwd:e}).then(({stdout:o})=>o.trim()).catch(()=>{}):void 0;if(await ue(`git worktree remove "${e}" --force`,{cwd:r}),n&&s&&s!=="main"&&s!=="master")try{await ue(`git branch -D "${s}"`,{cwd:r})}catch{}}async list(e){let n=await this.getMainWorktree(e),{stdout:r}=await ue("git worktree list --porcelain",{cwd:n});return this.parsePorcelainOutput(r,n)}async detect(e){try{let{stdout:n}=await ue("git rev-parse --git-common-dir",{cwd:e}),{stdout:r}=await ue("git rev-parse --git-dir",{cwd:e}),s=Tr.resolve(e,n.trim()),o=Tr.resolve(e,r.trim());if(s!==o){let{stdout:i}=await ue("git rev-parse --abbrev-ref HEAD",{cwd:e}),{stdout:c}=await ue("git rev-parse HEAD",{cwd:e}),{stdout:l}=await ue("git rev-parse --show-toplevel",{cwd:e}),u=l.trim(),d=Tr.basename(u);return{path:u,branch:i.trim(),commit:c.trim(),isMain:!1,slug:d}}return null}catch{return null}}async getMainWorktree(e){try{let{stdout:r}=await ue("git worktree list --porcelain",{cwd:e}),s=r.split(`
1285
+ GROUP BY target.file`);return new Map(e.map(n=>[n.file,n.caller_count]))}catch{return new Map}}function Tk(t,e,n=2){let r=new Set(e),{reverse:s}=Sk(t,"CALLS"),o=new Set;for(let l of e)for(let u of Po(t,l))o.add(u.id);let i=new Set,c=new Set(o);return Array.from({length:n}).reduce(l=>{let u=[];for(let d of l)for(let p of s.get(d)??[])if(!c.has(p))if(c.add(p),u.push(p),p.startsWith("file:")){let m=p.slice(5);r.has(m)||i.add(m)}else{let m=wP(t,p);m&&!r.has(m.file)&&i.add(m.file)}return u},[...o]),[...i]}var kk,sJ,oJ,iJ,An=k(()=>{"use strict";rp();U();ke();kk="symbol-graph",sJ=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".py",".go",".rs",".java"]),oJ=new Set(["if","for","while","switch","catch","function","class","return","typeof","new","throw","await","void","super","this","import","require","console","Math","JSON","Object","Array","Promise","Map","Set","Date","Error","Buffer","process","describe","it","test","expect","beforeEach","afterEach","beforeAll","afterAll"]),iJ=new Set(["if","for","while","switch","catch","return","await","typeof","new","throw","else","case","from","import","export","class","function","const","let","var","get","set","constructor","async","static","public","private","protected","readonly","abstract","extends","implements","interface","type","enum","default","as","of","in","do","try","finally","yield","with"]);a(hn,"lineOf");a(aJ,"symbolId");a(dP,"qnameOf");a(Ep,"isSourceFile");a(ma,"stripNoise");a(pP,"emptyExtract");a(mP,"finalizeCalls");a(cJ,"extractTsJs");a(lJ,"extractPython");a(uJ,"extractGo");a(dJ,"extractRust");a(pJ,"extractJava");a(fP,"extractFile");a(mJ,"loadTsPathMap");a(fJ,"applyTsPath");a(gJ,"resolveSpecifierToFile");a(hJ,"resolveImportsForExtract");a(uP,"matchFileToMod");a(gP,"enclosingSymbol");a(hP,"resolveCallTargets");a(yP,"buildFromExtracts");a(kP,"extractProject");a(yJ,"persistGraph");a(kJ,"patchGraph");a(fa,"indexSymbols");a(wk,"updateSymbols");a(Je,"hasSymbolIndex");a(sn,"loadMeta");a(ml,"rowToSymbol");a(Wn,"listAllSymbols");a(Bn,"searchSymbols");a(bk,"scoreFilesFromQuery");a(Po,"symbolsInFile");a(Sk,"loadEdges");a(wP,"symbolById");a(fl,"tracePath");a(vk,"fileFanIn");a(Ek,"fileFanInByFile");a(Tk,"filesCallingInto")});function Tp(t){if(t.length===0)return[];let e=t[0]?.score||1;return t.map(n=>({path:n.path,score:n.score/e}))}var gl,bP=k(()=>{"use strict";ua();da();Vr();An();a(Tp,"normalize");gl=[{name:"bm25",kind:"query",defaultWeight:.45,hasIndex:a(t=>nP(t),"hasIndex"),scoreFromQuery:a((t,e,n)=>Tp(wp(t,e,n)),"scoreFromQuery")},{name:"symbols",kind:"query",defaultWeight:.2,hasIndex:a(t=>Je(t),"hasIndex"),scoreFromQuery:a((t,e,n)=>Tp(bk(t,e,n)),"scoreFromQuery")},{name:"imports",kind:"seed",defaultWeight:.2,hasIndex:a(t=>Mt(t)!==null,"hasIndex"),scoreFromSeeds:a((t,e,n)=>{let r=Mt(t);return r?Tp(pa(e,r,n.importDepth)):[]},"scoreFromSeeds")},{name:"cochange",kind:"seed",defaultWeight:.15,hasIndex:a(t=>Un(t)!==null,"hasIndex"),scoreFromSeeds:a((t,e)=>{let n=Un(t);return n?Tp(_o(e,n)):[]},"scoreFromSeeds")}]});function vP(t,e,n={}){let r={...wJ,...n},s={bm25:r.bm25Weight,symbols:r.symbolsWeight,imports:r.importWeight,cochange:r.cochangeWeight},o=gl.filter(m=>m.kind==="query"),i=gl.filter(m=>m.kind==="seed"),c=new Map,l=new Map;for(let m of o){let f=m.scoreFromQuery(t,e,r.topN*3);if(f.length!==0){c.set(m.name,new Map(f.map(g=>[g.path,g.score])));for(let g of f.slice(0,SP))l.set(g.path,Math.max(l.get(g.path)??0,g.score))}}if(c.size===0)return[];let u=[...l.entries()].sort((m,f)=>f[1]-m[1]).slice(0,SP).map(([m])=>m);for(let m of i){let f=m.scoreFromSeeds(t,u,{importDepth:r.importDepth});f.length!==0&&c.set(m.name,new Map(f.map(g=>[g.path,g.score])))}let d=new Set;for(let m of c.values())for(let f of m.keys())d.add(f);let p=[];for(let m of d){let f=[...c].reduce((g,[h,w])=>{let b=w.get(m)??0,C=s[h]??gl.find(_=>_.name===h)?.defaultWeight??0;return g+b*C},0);p.push({path:m,finalScore:f,signals:{bm25:c.get("bm25")?.get(m)??0,imports:c.get("imports")?.get(m)??0,cochange:c.get("cochange")?.get(m)??0,symbols:c.get("symbols")?.get(m)??0}})}return p.sort((m,f)=>f.finalScore-m.finalScore),p.slice(0,r.topN)}function EP(t){let e={};for(let n of gl)e[n.name]=n.hasIndex(t);return{bm25:e.bm25??!1,imports:e.imports??!1,cochange:e.cochange??!1,symbols:e.symbols??!1}}var wJ,SP,TP=k(()=>{"use strict";bP();wJ={bm25Weight:.45,importWeight:.2,cochangeWeight:.15,symbolsWeight:.2,topN:15,importDepth:2},SP=10;a(vP,"rankFiles");a(EP,"hasIndexes")});function bJ(t){return t instanceof ga}function dt(t){return bJ(t)||t instanceof Error?t.message:typeof t=="string"?t:"Unknown error"}var ga,Cp,xp,hl,Kr=k(()=>{"use strict";ga=class extends Error{static{a(this,"PrjctError")}code;isOperational;constructor(e,n="PRJCT_ERROR"){super(e),this.name="PrjctError",this.code=n,this.isOperational=!0,Error.captureStackTrace?.(this,this.constructor)}},Cp=class t extends ga{static{a(this,"ProjectError")}constructor(e,n="PROJECT_ERROR"){super(e,n),this.name="ProjectError"}static notInitialized(){return new t("Project not initialized. Run p. init first.","PROJECT_NOT_INIT")}static notFound(e){return new t(`Project not found: ${e}`,"PROJECT_NOT_FOUND")}static invalidId(e){return new t(`Invalid project ID: ${e}`,"PROJECT_INVALID_ID")}},xp=class t extends ga{static{a(this,"TemplateError")}constructor(e,n="TEMPLATE_ERROR"){super(e,n),this.name="TemplateError"}static notFound(e){return new t(`Template not found: ${e}.md`,"TEMPLATE_NOT_FOUND")}static parseFailed(e){return new t(`Failed to parse template: ${e}`,"TEMPLATE_PARSE_ERROR")}},hl=class t extends ga{static{a(this,"AgentError")}constructor(e,n="AGENT_ERROR"){super(e,n),this.name="AgentError"}static notSupported(e){return new t(`Unsupported agent type: ${e}`,"AGENT_NOT_SUPPORTED")}static initFailed(e){return new t(`Agent initialization failed: ${e}`,"AGENT_INIT_FAILED")}};a(bJ,"isPrjctError");a(dt,"getErrorMessage")});function CP(t){let e=t.toLowerCase();return e.includes("github")?"github":e.includes("gitlab")?"gitlab":e.includes("bitbucket")?"bitbucket":"other"}function xk(t){let e=t.trim();if(!e)return{};let n=e.match(/^[^/@]+@([^:/]+):(.+?)(?:\.git)?\/?$/);if(n)return{provider:CP(n[1]),repoSlug:n[2]};try{let r=new URL(e),s=r.pathname.replace(/^\/+/,"").replace(/\.git$/,"").replace(/\/+$/,"");return!r.host||!s?{}:{provider:CP(r.host),repoSlug:s}}catch{return{}}}async function SJ(t){try{let{stdout:e}=await J("git",["remote","get-url","origin"],{cwd:t});return e.trim()||void 0}catch{return}}async function vJ(t){try{let{stdout:e}=await J("git",["symbolic-ref","--short","refs/remotes/origin/HEAD"],{cwd:t});return e.trim().replace(/^origin\//,"")||void 0}catch{return}}function Io(t){return typeof t=="string"&&t.length>0?t:void 0}function xP(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function EJ(t){return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function _p(t){let e=v.getDoc(t,"project")||{},n=Io(e.repoPath),{provider:r,repoSlug:s}=n?xk(await SJ(n)||""):{},o=n?await vJ(n):void 0,i=Array.isArray(e.techStack)?e.techStack.filter(c=>typeof c=="string"):void 0;return EJ({provider:r,repoSlug:s,currentBranch:Io(e.currentBranch),defaultBranch:o,stack:Io(e.stack),techStack:i&&i.length>0?i:void 0,version:Io(e.version),commitCount:xP(e.commitCount),fileCount:xP(e.fileCount),lastCommit:Io(e.lastSyncCommit),hasUncommitted:typeof e.hasUncommittedChanges=="boolean"?e.hasUncommittedChanges:void 0,cliVersion:Io(e.cliVersion),syncedAt:Io(e.lastSync)})}var Rp=k(()=>{"use strict";U();de();a(CP,"providerForHost");a(xk,"parseRemote");a(SJ,"gitRemoteUrl");a(vJ,"gitDefaultBranch");a(Io,"str");a(xP,"num");a(EJ,"compact");a(_p,"buildProjectMeta")});import TJ from"node:crypto";function xJ(t,e=CJ){let n=Buffer.from(e.replace(/-/g,""),"hex"),s=TJ.createHash("sha1").update(n).update(t,"utf8").digest().subarray(0,16);s[6]=s[6]&15|80,s[8]=s[8]&63|128;let o=s.toString("hex");return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20,32)}`}async function _J(t){let e=await J("git",["remote","get-url","origin"],{cwd:t}).then(({stdout:s})=>s.trim()||null).catch(()=>null);if(!e)return null;let{provider:n,repoSlug:r}=xk(e);return!n||!r?null:`${n}:${r}`.toLowerCase()}async function _P(t){let e=await _J(t);return e?xJ(e):null}var CJ,RP=k(()=>{"use strict";de();Rp();CJ="6f9b2c1a-3d4e-5f60-8a7b-1c2d3e4f5a6b";a(xJ,"uuidv5");a(_J,"repoKey");a(_P,"deriveProjectId")});var AP={};R(AP,{PACKAGE_ROOT:()=>zr,VERSION:()=>Ze,getPackageRoot:()=>Rk,getVersion:()=>jo,resetPackageRoot:()=>Ak});import _k from"node:fs";import Ap from"node:path";function Rk(){if(Gn.packageRoot)return Gn.packageRoot;let t=a((e,n)=>{if(n>=5)return null;let r=Ap.join(e,"package.json");if(_k.existsSync(r))try{if(JSON.parse(_k.readFileSync(r,"utf-8")).name==="prjct-cli")return e}catch{}return t(Ap.dirname(e),n+1)},"findPackageRoot");return Gn.packageRoot=t(__dirname,0)??Ap.join(__dirname,"..","..",".."),Gn.packageRoot}function jo(){if(Gn.version)return Gn.version;let t="3.91.0";if(t&&/^\d+\.\d+\.\d+/.test(t))return Gn.version=t,Gn.version;try{let e=Ap.join(Rk(),"package.json"),n=JSON.parse(_k.readFileSync(e,"utf-8"));return Gn.version=n.version,Gn.version}catch(e){return process.env.PRJCT_DEBUG==="1"&&console.error("Failed to read version from package.json:",x(e)),"0.0.0"}}function Ak(t){Gn.packageRoot=t,Gn.version=null}var Gn,Ze,zr,Wt=k(()=>{"use strict";Z();Gn={version:null,packageRoot:null};a(Rk,"getPackageRoot");a(jo,"getVersion");a(Ak,"resetPackageRoot");Ze=jo(),zr=Rk()});async function Pp(t){try{let{stdout:e}=await ue(t,{timeout:5e3});return{success:!0,output:e.trim()}}catch{return{success:!1,output:""}}}async function RJ(){let t=await Pp("gh api user --jq .login");if(t.success&&t.output)return t.output;let e=await Pp("git config --global github.user");return e.success&&e.output?e.output:null}async function AJ(){let t=await Pp("git config user.name");return t.success&&t.output?t.output:null}async function PJ(){let t=await Pp("git config user.email");return t.success&&t.output?t.output:null}async function ha(){let[t,e,n]=await Promise.all([RJ(),AJ(),PJ()]);return{github:t,email:n,name:e||t||"Unknown"}}var Ip=k(()=>{"use strict";de();a(Pp,"execCommand");a(RJ,"detectGitHubUsername");a(AJ,"detectGitName");a(PJ,"detectGitEmail");a(ha,"detect")});var jp={};R(jp,{worktreeService:()=>IJ});import Ik from"node:fs/promises";import Tr from"node:path";var PP,jk,IJ,Np=k(()=>{"use strict";de();ke();PP=".worktrees",jk=class{static{a(this,"WorktreeService")}async create(e,n,r={}){let s=await this.getMainWorktree(e),o=Tr.join(s,PP,n),i=r.branch||`feat/${n}`;await Ik.mkdir(Tr.join(s,PP),{recursive:!0});let c=r.baseBranch?` ${r.baseBranch}`:"";await ue(`git worktree add "${o}" -b "${i}"${c}`,{cwd:s});let{stdout:l}=await ue("git rev-parse HEAD",{cwd:o});return{path:o,branch:i,commit:l.trim(),isMain:!1,slug:n}}async remove(e,n=!1){let r=await this.getMainWorktree(e),s=n?await ue("git rev-parse --abbrev-ref HEAD",{cwd:e}).then(({stdout:o})=>o.trim()).catch(()=>{}):void 0;if(await ue(`git worktree remove "${e}" --force`,{cwd:r}),n&&s&&s!=="main"&&s!=="master")try{await ue(`git branch -D "${s}"`,{cwd:r})}catch{}}async list(e){let n=await this.getMainWorktree(e),{stdout:r}=await ue("git worktree list --porcelain",{cwd:n});return this.parsePorcelainOutput(r,n)}async detect(e){try{let{stdout:n}=await ue("git rev-parse --git-common-dir",{cwd:e}),{stdout:r}=await ue("git rev-parse --git-dir",{cwd:e}),s=Tr.resolve(e,n.trim()),o=Tr.resolve(e,r.trim());if(s!==o){let{stdout:i}=await ue("git rev-parse --abbrev-ref HEAD",{cwd:e}),{stdout:c}=await ue("git rev-parse HEAD",{cwd:e}),{stdout:l}=await ue("git rev-parse --show-toplevel",{cwd:e}),u=l.trim(),d=Tr.basename(u);return{path:u,branch:i.trim(),commit:c.trim(),isMain:!1,slug:d}}return null}catch{return null}}async getMainWorktree(e){try{let{stdout:r}=await ue("git worktree list --porcelain",{cwd:e}),s=r.split(`
1286
1286
  `)[0];if(s?.startsWith("worktree "))return s.replace("worktree ","").trim()}catch{}let{stdout:n}=await ue("git rev-parse --show-toplevel",{cwd:e});return n.trim()}async setup(e,n){let r=Tr.join(n,".env");await D(r)&&await Ik.copyFile(r,Tr.join(e,".env"));let s=Tr.join(n,".prjct"),o=Tr.join(e,".prjct");await D(s)&&!await D(o)&&await Ik.symlink(s,o,"dir")}async teardown(e){}async clean(e){let n=await this.list(e),r=[],s=await this.getMainWorktree(e);await ue("git worktree prune",{cwd:s});for(let o of n)o.isMain||await D(o.path)||r.push(o.slug);return r}parsePorcelainOutput(e,n){let r=[],s=e.trim().split(`
1287
1287
 
1288
1288
  `);for(let o of s){if(!o.trim())continue;let i=o.trim().split(`
@@ -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 VC=Object.getOwnPropertyDescriptor;var JC=Object.getOwnPropertyNames;var KC=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})},YC=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of JC(e))!KC.call(t,s)&&s!==n&&Mi(t,s,{get:()=>e[s],enumerable:!(r=VC(e,s))||r.enumerable});return t};var ro=t=>YC(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:()=>zC});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.89.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 zC(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(zC,"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 hW,oe=y(()=>{"use strict";a(fh,"formatDate");a(hh,"getYearMonthDay");a(x,"getTimestamp");a(Gr,"getDaysAgo");a(yh,"formatDuration");hW=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,QC(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 QC(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(QC,"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)}
8
+ var Mi=Object.defineProperty;var VC=Object.getOwnPropertyDescriptor;var JC=Object.getOwnPropertyNames;var KC=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})},YC=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of JC(e))!KC.call(t,s)&&s!==n&&Mi(t,s,{get:()=>e[s],enumerable:!(r=VC(e,s))||r.enumerable});return t};var ro=t=>YC(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:()=>zC});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.91.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 zC(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(zC,"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 hW,oe=y(()=>{"use strict";a(fh,"formatDate");a(hh,"getYearMonthDay");a(x,"getTimestamp");a(Gr,"getDaysAgo");a(yh,"formatDuration");hW=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,QC(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 QC(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(QC,"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 ZC 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(ZC.homedir(),".prjct-cli")}var so=y(()=>{"use strict";a(Pn,"resolveCliHome")});import eA 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=tA(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 tA,xh=y(()=>{"use strict";ue();tA=eA.globSync;a(Vl,"detectMonorepo");a(Jl,"discoverMonorepoPackages");a(_h,"findContainingPackage");a(Kl,"findMonorepoRoot")});import nA 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):nA.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 rA(t){return t==="frontier"?"max":"decent"}function Nh(t){return{model:Xi[t][0],effort:rA(t)}}function Vi(t){return Nh(Ah(t))}function oA(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 sA[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 iA(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=iA(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=oA(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,BW,sA,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(rA,"effortForClass");a(Nh,"policyForClass");a(Vi,"getAgentModelPolicy");BW=Object.fromEntries(Object.keys(Ch).map(t=>[t,Vi(t)])),sA={opus:Xi.frontier,sonnet:Xi.balanced,haiku:Xi.fast};a(oA,"resolveAgentModel");a(iA,"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:()=>mA,gitInfraErrorOf:()=>zl,gitStdout:()=>tr,isProcInfra:()=>pA,matchProc:()=>gA,procErrorOf:()=>Uh,runGit:()=>et,runProc:()=>Fh,sanitizeProcEnvelope:()=>Ji,throwProc:()=>Ln});import{exec as aA,execFile as cA,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 dA(t){let e=t.code;return typeof e=="string"?e:void 0}function Fh(t,e,n={}){let r=n.timeoutMs??lA,s=n.maxBuffer??uA,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:dA(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 pA(t){return!t.ok&&(t.kind==="timeout"||t.kind==="spawn"||t.kind==="overflow")}function mA(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 gA(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,lA,uA,$h,qe,pe=y(()=>{"use strict";Y=Mh(aA),z=Mh(cA),lA=1e4,uA=1024*1024,$h=240;a(Dh,"killProcessTree");a(jh,"joinChunks");a(dA,"nodeErrorCode");a(Fh,"runProc");a(et,"runGit");a(pA,"isProcInfra");a(mA,"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(gA,"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 fA from"node:fs/promises";import hA from"node:path";async function Bh(){try{let t=await fA.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,yA)?null:e.detection}catch{return null}}async function Gh(t){let e={timestamp:new Date().toISOString(),detection:t};await Xe(Wh(),e)}var Wh,yA,Xh=y(()=>{"use strict";ct();Ql();ue();Wh=a(()=>hA.join(ie.getCachePath(),"providers.json"),"cacheFile"),yA=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:()=>wA,detectCodex:()=>On,detectKimi:()=>iu,detectProvider:()=>tu,getActiveProvider:()=>jn,getProviderBranding:()=>Qi,selectProvider:()=>TA,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 kA(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 kA(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 wA(){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 TA(){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(kA,"getCliVersion");a(tu,"detectProvider");a(Yh,"validateCliVersion");a(ou,"detectAllProviders");a(jn,"getActiveProvider");a(Qi,"getProviderBranding");a(wA,"detectAntigravity");a(On,"detectCodex");a(iu,"detectKimi");a(TA,"selectProvider")});var zh={};L(zh,{default:()=>ie});import SA from"node:crypto";import Zi from"node:fs/promises";import be from"node:path";var au,bA,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 SA.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)}},bA=new au,ie=bA});import vA from"node:crypto";function Pe(t){let e=t.toLowerCase().replace(/\s+/g," ").trim();return vA.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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prjct-cli",
3
- "version": "3.89.0",
3
+ "version": "3.91.0",
4
4
  "description": "The agentic harness for AI coding agents — work cycles, bounded RAG context, persistent memory, guardrails, and performance evals.",
5
5
  "main": "dist/bin/prjct.mjs",
6
6
  "bin": {