prjct-cli 3.92.0 → 3.94.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/bin/hook-chunks/{agent-switch-XMFUTNNV.mjs → agent-switch-2U2LOBGR.mjs} +1 -1
- package/dist/bin/hook-chunks/analysis-N4NYGIG3.mjs +42 -0
- package/dist/bin/hook-chunks/{auth-config-WNUARXTJ.mjs → auth-config-SP4PBALR.mjs} +1 -1
- package/dist/bin/hook-chunks/auto-flush-BN6L6QHO.mjs +8 -0
- package/dist/bin/hook-chunks/{auto-updater-EHRRMCYY.mjs → auto-updater-4TIXYSEX.mjs} +1 -1
- package/dist/bin/hook-chunks/capture-gate-FRF2G3IG.mjs +8 -0
- package/dist/bin/hook-chunks/{chunk-DGBDMUBL.mjs → chunk-27XFSCOE.mjs} +4 -4
- package/dist/bin/hook-chunks/chunk-2HB2JHQE.mjs +69 -0
- package/dist/bin/hook-chunks/{chunk-MAHTF6JG.mjs → chunk-3VWBNLBC.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-V37VTXDW.mjs → chunk-4KVPAHFV.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-2HTDCLZD.mjs → chunk-4O4D6DV7.mjs} +2 -2
- package/dist/bin/hook-chunks/chunk-4SKJWNKE.mjs +11 -0
- package/dist/bin/hook-chunks/{chunk-3LG3ACQV.mjs → chunk-5EQLQ7GF.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-HZIORCPO.mjs → chunk-66GE3IHX.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-MEQS4VPO.mjs → chunk-6RLCUGGG.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-BISPGBNN.mjs → chunk-6UH244CC.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-7GNWHWOO.mjs +26 -0
- package/dist/bin/hook-chunks/chunk-7JEKBJAP.mjs +9 -0
- package/dist/bin/hook-chunks/{chunk-LLQUB6YR.mjs → chunk-7O6OMD4X.mjs} +2 -2
- package/dist/bin/hook-chunks/chunk-7YT2FGO7.mjs +8 -0
- package/dist/bin/hook-chunks/{chunk-XHDNPEAN.mjs → chunk-AVRNHROK.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-AZHE4VOM.mjs +8 -0
- package/dist/bin/hook-chunks/{chunk-7OZDWT6C.mjs → chunk-AZYQFRPJ.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-BCAHWZH7.mjs +8 -0
- package/dist/bin/hook-chunks/{chunk-Q5I2UPD6.mjs → chunk-C3W2HLJT.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-ZX2KFQV5.mjs → chunk-D6IONKRA.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-DRGI5UHQ.mjs +10 -0
- package/dist/bin/hook-chunks/{chunk-7SI6X3Z7.mjs → chunk-EHEQOF6Z.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-ZX6BC2EB.mjs → chunk-EMTCZG5I.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-ZNQXFWSI.mjs → chunk-EQ5KNMLG.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-S4TB2OFJ.mjs → chunk-F4T7IAA7.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-ODWWIFSN.mjs → chunk-FEFP6JOL.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-2OU2MKNS.mjs → chunk-FX6VHIKB.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-2WPR5GFT.mjs → chunk-GFY4GY3Z.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-PSSR7LSW.mjs → chunk-H4CA3XZ6.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-HHIGNKDO.mjs +8 -0
- package/dist/bin/hook-chunks/chunk-HNEKXKOI.mjs +16 -0
- package/dist/bin/hook-chunks/{chunk-45I2C2UB.mjs → chunk-HRWXMF7P.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-AWD2AQVJ.mjs → chunk-IHECXD2M.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-IKIB42F7.mjs +31 -0
- package/dist/bin/hook-chunks/chunk-INXNK57E.mjs +8 -0
- package/dist/bin/hook-chunks/{chunk-WDGDFXSB.mjs → chunk-J6TAD3OZ.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-JAMSIKDE.mjs +9 -0
- package/dist/bin/hook-chunks/{chunk-CREPUNOS.mjs → chunk-JCYXFHQZ.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-JMCMTX6U.mjs +8 -0
- package/dist/bin/hook-chunks/{chunk-D7TRY3CO.mjs → chunk-JPSJWCFD.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-QDQ7DTDV.mjs → chunk-JR542RI2.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-JUZ5LNDI.mjs +14 -0
- package/dist/bin/hook-chunks/{chunk-HDHVBB6Q.mjs → chunk-KG7Z6OMK.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-OGOCHZ3S.mjs → chunk-KOCROTRM.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-75UJIVMO.mjs → chunk-KOGZCFBC.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-ZTZTVBAZ.mjs → chunk-LNB2GLYI.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-M5E2YOZ4.mjs +8 -0
- package/dist/bin/hook-chunks/{chunk-BZ5UR7G3.mjs → chunk-MHQTGU45.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-OL6ITIAZ.mjs → chunk-MI3JEFON.mjs} +2 -2
- package/dist/bin/hook-chunks/chunk-NBKEOLDH.mjs +18 -0
- package/dist/bin/hook-chunks/{chunk-EM6ZDJAK.mjs → chunk-NCOOKPXX.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-NHIWYDQD.mjs +8 -0
- package/dist/bin/hook-chunks/chunk-NUJASVHN.mjs +18 -0
- package/dist/bin/hook-chunks/chunk-NWIQNII6.mjs +11 -0
- package/dist/bin/hook-chunks/{chunk-OP467HW6.mjs → chunk-NWZEBCTC.mjs} +2 -2
- package/dist/bin/hook-chunks/{chunk-6EWGHM32.mjs → chunk-OENWCYLF.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-3JUE6MNF.mjs → chunk-OIU4Y5WL.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-OUAS3LZ3.mjs +8 -0
- package/dist/bin/hook-chunks/{chunk-X5RDLFPM.mjs → chunk-OWOPA2O7.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-NLG2EW6M.mjs → chunk-OZJ6UKKP.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-PUHX3ECX.mjs +11 -0
- package/dist/bin/hook-chunks/chunk-Q3EYM4GJ.mjs +19 -0
- package/dist/bin/hook-chunks/{chunk-I5BDN25C.mjs → chunk-Q3Z53QTH.mjs} +3 -3
- package/dist/bin/hook-chunks/{chunk-ZZ65CN5F.mjs → chunk-QPRNRLG6.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-QWQFF2UG.mjs +10 -0
- package/dist/bin/hook-chunks/{chunk-DMXFGLZE.mjs → chunk-QYEASMFV.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-R4ILCXKE.mjs +8 -0
- package/dist/bin/hook-chunks/{chunk-4WHS7CO7.mjs → chunk-S7HQQILD.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-SDUS2AT7.mjs +8 -0
- package/dist/bin/hook-chunks/chunk-T2FCU3ZS.mjs +12 -0
- package/dist/bin/hook-chunks/{chunk-A5RNWWTH.mjs → chunk-TFCLMTJ5.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-AUUWQH3S.mjs → chunk-TG5CQJD5.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-CQUG6SO2.mjs → chunk-TKWAFYF7.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-YUOTOCKK.mjs → chunk-TYEAIX3X.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-AOPJ4Z6O.mjs → chunk-UA4Z5TGG.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-UH4MD3F3.mjs +9 -0
- package/dist/bin/hook-chunks/chunk-V2BSS7HW.mjs +36 -0
- package/dist/bin/hook-chunks/{chunk-MQVVNX63.mjs → chunk-VWOIUTAX.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-NLDL3N6R.mjs → chunk-X2AGNDGD.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-5PEHJEFE.mjs → chunk-XE4MJNBQ.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-2NMSEZTQ.mjs → chunk-XFQ7NNLN.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-SOPRYWUY.mjs → chunk-XS45K7ZQ.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-Y3J7UUMR.mjs +47 -0
- package/dist/bin/hook-chunks/{chunk-HIFIDMH5.mjs → chunk-Y4DUB7UN.mjs} +2 -2
- package/dist/bin/hook-chunks/{chunk-6IKHMK2U.mjs → chunk-YQ55MHKL.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-DVBBB5BS.mjs → chunk-YUKGWWL7.mjs} +1 -1
- package/dist/bin/hook-chunks/chunk-ZJXH76Q5.mjs +11 -0
- package/dist/bin/hook-chunks/{chunk-TBM7736J.mjs → chunk-ZMKTR2IO.mjs} +1 -1
- package/dist/bin/hook-chunks/{chunk-54LH63LM.mjs → chunk-ZMLA5SKR.mjs} +1 -0
- package/dist/bin/hook-chunks/client-ERZ5CM3D.mjs +10 -0
- package/dist/bin/hook-chunks/code-graph-cloud-4GRWQSUK.mjs +8 -0
- package/dist/bin/hook-chunks/{codex-skill-2N6656SR.mjs → codex-skill-6DYQMPDJ.mjs} +1 -1
- package/dist/bin/hook-chunks/{command-installer-XSKQS3IS.mjs → command-installer-MF4KUM3X.mjs} +1 -1
- package/dist/bin/hook-chunks/{config-manager-YZANYLPV.mjs → config-manager-2VZPHUDG.mjs} +1 -1
- package/dist/bin/hook-chunks/{content-bound-stamp-72EQVZLP.mjs → content-bound-stamp-OG2KKN3L.mjs} +1 -1
- package/dist/bin/hook-chunks/{context7-service-4C6VNJUS.mjs → context7-service-V7CIDF3Q.mjs} +1 -1
- package/dist/bin/hook-chunks/custom-workflow-storage-UOBQXY42.mjs +8 -0
- package/dist/bin/hook-chunks/cwd-changed-J6O46KS7.mjs +8 -0
- package/dist/bin/hook-chunks/{database-SLDTQXWG.mjs → database-XYKQF3KR.mjs} +1 -1
- package/dist/bin/hook-chunks/{delivery-geometry-VHCURJ7E.mjs → delivery-geometry-WYOEMKMO.mjs} +1 -1
- package/dist/bin/hook-chunks/detect-changes-DFRJOOB3.mjs +19 -0
- package/dist/bin/hook-chunks/{detection-MEYHME4X.mjs → detection-QRVSNMKL.mjs} +1 -1
- package/dist/bin/hook-chunks/developer-evolution-SLC34HUU.mjs +12 -0
- package/dist/bin/hook-chunks/distill-U2LJGUG3.mjs +8 -0
- package/dist/bin/hook-chunks/{editors-config-3N6VREZR.mjs → editors-config-6XFYIOE6.mjs} +1 -1
- package/dist/bin/hook-chunks/enriched-recall-X6RDNNIE.mjs +8 -0
- package/dist/bin/hook-chunks/exec-2P5VOBHM.mjs +8 -0
- package/dist/bin/hook-chunks/format-ALUX4QSI.mjs +8 -0
- package/dist/bin/hook-chunks/{git-helpers-6JLP2OJZ.mjs → git-helpers-HELM6DXJ.mjs} +1 -1
- package/dist/bin/hook-chunks/{judgment-ledger-storage-UKROWRVA.mjs → judgment-ledger-storage-SCGU3URM.mjs} +1 -1
- package/dist/bin/hook-chunks/{judgment-orchestrator-UFGNBTEK.mjs → judgment-orchestrator-BYPG65RS.mjs} +1 -1
- package/dist/bin/hook-chunks/judgment-receipt-GWSSCLAB.mjs +8 -0
- package/dist/bin/hook-chunks/land-cue-MMISX2BI.mjs +9 -0
- package/dist/bin/hook-chunks/land-synthesis-WG5JAS7B.mjs +8 -0
- package/dist/bin/hook-chunks/legacy-crew-sweep-2WSO5KEB.mjs +24 -0
- package/dist/bin/hook-chunks/memory-index-QK5QJOFJ.mjs +8 -0
- package/dist/bin/hook-chunks/notification-MPVWVV52.mjs +8 -0
- package/dist/bin/hook-chunks/{pack-integrity-BKLDNYE5.mjs → pack-integrity-XRYOROK5.mjs} +1 -1
- package/dist/bin/hook-chunks/{pack-manager-ASWLKYGP.mjs → pack-manager-WWGQNJDQ.mjs} +1 -1
- package/dist/bin/hook-chunks/{package-legitimacy-HXC4L73B.mjs → package-legitimacy-MIR3VZSF.mjs} +1 -1
- package/dist/bin/hook-chunks/{path-manager-F2HE2GGK.mjs → path-manager-ZR5RAKTK.mjs} +1 -1
- package/dist/bin/hook-chunks/{planning-QBSY272P.mjs → planning-S55KBPN2.mjs} +2 -2
- package/dist/bin/hook-chunks/post-edit-QMHSZHDN.mjs +8 -0
- package/dist/bin/hook-chunks/{pr-convention-7UGI7TFA.mjs → pr-convention-5NPXQJ2R.mjs} +1 -1
- package/dist/bin/hook-chunks/pre-bash-RAM6L3G4.mjs +11 -0
- package/dist/bin/hook-chunks/pre-commit-736ZLMDL.mjs +8 -0
- package/dist/bin/hook-chunks/pre-edit-GZ4QJ2MU.mjs +11 -0
- package/dist/bin/hook-chunks/pre-package-LCIAWWGK.mjs +8 -0
- package/dist/bin/hook-chunks/pre-search-J5EOFMYN.mjs +9 -0
- package/dist/bin/hook-chunks/pre-secrets-TSUMTXHH.mjs +8 -0
- package/dist/bin/hook-chunks/{precision-judgment-WPTCNTGV.mjs → precision-judgment-TT3DRNAX.mjs} +1 -1
- package/dist/bin/hook-chunks/{prjct-md-WE6WFVL3.mjs → prjct-md-T2DG236Y.mjs} +1 -1
- package/dist/bin/hook-chunks/{project-agent-surfaces-A6HGZPAL.mjs → project-agent-surfaces-VRY22I66.mjs} +1 -1
- package/dist/bin/hook-chunks/{project-file-inventory-ZAPKPKY6.mjs → project-file-inventory-5DEN5VLF.mjs} +1 -1
- package/dist/bin/hook-chunks/project-memory-KKEMTEMP.mjs +8 -0
- package/dist/bin/hook-chunks/project-style-evolution-7MAUSED2.mjs +8 -0
- package/dist/bin/hook-chunks/{prompt-JIOMJCGV.mjs → prompt-DVF6V2X2.mjs} +7 -7
- package/dist/bin/hook-chunks/{velocity-storage-UPW6TLK6.mjs → publish-helper-G54XQV5K.mjs} +1 -1
- package/dist/bin/hook-chunks/purge-MC5LFSAO.mjs +8 -0
- package/dist/bin/hook-chunks/retention-LWETHQX3.mjs +8 -0
- package/dist/bin/hook-chunks/sdd-5UCVX43H.mjs +10 -0
- package/dist/bin/hook-chunks/session-continuity-RKNAJJHR.mjs +11 -0
- package/dist/bin/hook-chunks/session-start-MFMFKUPK.mjs +8 -0
- package/dist/bin/hook-chunks/setup-WQRJ6TQL.mjs +141 -0
- package/dist/bin/hook-chunks/{shipping-LVTFVSWJ.mjs → shipping-5D5LTJ3P.mjs} +5 -5
- package/dist/bin/hook-chunks/{skill-index-OOVAXHYJ.mjs → skill-index-RAVJMC4P.mjs} +1 -1
- package/dist/bin/hook-chunks/{spec-context-inference-U6BGGB2Q.mjs → spec-context-inference-7DDSTRTV.mjs} +1 -1
- package/dist/bin/hook-chunks/{spec-service-2DVDFOR7.mjs → spec-service-LAO5Z2M5.mjs} +2 -2
- package/dist/bin/hook-chunks/spec-task-breakdown-K3GMQKGH.mjs +8 -0
- package/dist/bin/hook-chunks/state-storage-EIFGUO7X.mjs +8 -0
- package/dist/bin/hook-chunks/stop-RYLI4FGF.mjs +16 -0
- package/dist/bin/hook-chunks/subagent-start-CCUPSANT.mjs +8 -0
- package/dist/bin/hook-chunks/subagent-stop-RBD2OILE.mjs +8 -0
- package/dist/bin/hook-chunks/{surface-attribution-BDKFYUOJ.mjs → surface-attribution-K37N2NK7.mjs} +1 -1
- package/dist/bin/hook-chunks/symbol-graph-BKQIMFRG.mjs +8 -0
- package/dist/bin/hook-chunks/{sync-analyzer-FKC57RTV.mjs → sync-analyzer-6U5GHYV3.mjs} +1 -1
- package/dist/bin/hook-chunks/{sync-client-DJWOG2ZQ.mjs → sync-client-EGBMWF3J.mjs} +1 -1
- package/dist/bin/hook-chunks/{sync-cursor-storage-2VKG757H.mjs → sync-cursor-storage-E3LMZISA.mjs} +1 -1
- package/dist/bin/hook-chunks/{task-orchestration-MLOCR7GA.mjs → task-orchestration-2ZYE5M6J.mjs} +1 -1
- package/dist/bin/hook-chunks/{task-overview-6ZQKJGSH.mjs → task-overview-ITY5OSHX.mjs} +1 -1
- package/dist/bin/hook-chunks/task-service-XREJLWEF.mjs +8 -0
- package/dist/bin/hook-chunks/tdd-7S55S5C3.mjs +10 -0
- package/dist/bin/hook-chunks/{template-loader-BFTLPG2W.mjs → template-loader-SCM4C2A3.mjs} +1 -1
- package/dist/bin/hook-chunks/{trust-boundary-ERMDF2C5.mjs → trust-boundary-EX65SUYR.mjs} +1 -1
- package/dist/bin/hook-chunks/{usefulness-253CZLNY.mjs → usefulness-SCH5ARGV.mjs} +1 -1
- package/dist/bin/hook-chunks/{vault-retire-notice-GRT3QRLZ.mjs → vault-retire-notice-HT756AND.mjs} +1 -1
- package/dist/bin/hook-chunks/velocity-storage-47CF3XWZ.mjs +8 -0
- package/dist/bin/hook-chunks/weak-model-mode-FLCEQ2BV.mjs +8 -0
- package/dist/bin/hook-chunks/work-graph-JQHVVXIZ.mjs +49 -0
- package/dist/bin/hook-chunks/work-scope-CDLSZ4U5.mjs +8 -0
- package/dist/bin/hook-chunks/{workspace-occupancy-UVIRHY5Z.mjs → workspace-occupancy-UUW4UGGB.mjs} +1 -1
- package/dist/bin/hook-chunks/{worktree-service-XGRN5TTE.mjs → worktree-service-AS7JVBK5.mjs} +1 -1
- package/dist/bin/prjct-core.mjs +736 -746
- package/dist/bin/prjct-hooks.mjs +2 -2
- package/dist/daemon/entry.mjs +625 -632
- package/dist/mcp/server.mjs +323 -323
- package/package.json +1 -1
- package/dist/bin/hook-chunks/analysis-PFGKPYWQ.mjs +0 -42
- package/dist/bin/hook-chunks/auto-flush-QZ3YIQP6.mjs +0 -8
- package/dist/bin/hook-chunks/capture-gate-2FXYVHNF.mjs +0 -8
- package/dist/bin/hook-chunks/chunk-3X7TBM4A.mjs +0 -19
- package/dist/bin/hook-chunks/chunk-4DDCWMI6.mjs +0 -8
- package/dist/bin/hook-chunks/chunk-4KY2EHXS.mjs +0 -9
- package/dist/bin/hook-chunks/chunk-7JE6VTLN.mjs +0 -71
- package/dist/bin/hook-chunks/chunk-AKIN5WSQ.mjs +0 -9
- package/dist/bin/hook-chunks/chunk-CDCCAU22.mjs +0 -11
- package/dist/bin/hook-chunks/chunk-CPHUFXD2.mjs +0 -14
- package/dist/bin/hook-chunks/chunk-CQHPIYNM.mjs +0 -8
- package/dist/bin/hook-chunks/chunk-CTWZQ7YI.mjs +0 -8
- package/dist/bin/hook-chunks/chunk-FGQZ62ZP.mjs +0 -47
- package/dist/bin/hook-chunks/chunk-GELCZWKW.mjs +0 -11
- package/dist/bin/hook-chunks/chunk-HJ4HEI45.mjs +0 -8
- package/dist/bin/hook-chunks/chunk-HX42HFII.mjs +0 -18
- package/dist/bin/hook-chunks/chunk-J6JZ4PQA.mjs +0 -18
- package/dist/bin/hook-chunks/chunk-KB3P6XTL.mjs +0 -38
- package/dist/bin/hook-chunks/chunk-L4COZ7ZH.mjs +0 -13
- package/dist/bin/hook-chunks/chunk-LT5WSSQO.mjs +0 -8
- package/dist/bin/hook-chunks/chunk-N5WOHG36.mjs +0 -8
- package/dist/bin/hook-chunks/chunk-NJAMZSHM.mjs +0 -26
- package/dist/bin/hook-chunks/chunk-NWY5M34K.mjs +0 -12
- package/dist/bin/hook-chunks/chunk-OLKNK2HB.mjs +0 -8
- package/dist/bin/hook-chunks/chunk-SVZHJZ5T.mjs +0 -9
- package/dist/bin/hook-chunks/chunk-SY2FRLJF.mjs +0 -31
- package/dist/bin/hook-chunks/chunk-WSFHSXBZ.mjs +0 -9
- package/dist/bin/hook-chunks/chunk-Y7CKMFNW.mjs +0 -16
- package/dist/bin/hook-chunks/chunk-YJMWY4Y6.mjs +0 -8
- package/dist/bin/hook-chunks/client-SKFMAUI5.mjs +0 -10
- package/dist/bin/hook-chunks/code-graph-cloud-65GCWNII.mjs +0 -8
- package/dist/bin/hook-chunks/custom-workflow-storage-M77INP6Z.mjs +0 -8
- package/dist/bin/hook-chunks/cwd-changed-NJ6RYVOJ.mjs +0 -8
- package/dist/bin/hook-chunks/detect-changes-6N4DCWXQ.mjs +0 -17
- package/dist/bin/hook-chunks/developer-evolution-R5BXQH6G.mjs +0 -12
- package/dist/bin/hook-chunks/distill-IABVRW2U.mjs +0 -8
- package/dist/bin/hook-chunks/enriched-recall-NDASPZXZ.mjs +0 -8
- package/dist/bin/hook-chunks/exec-I7XE7NMD.mjs +0 -8
- package/dist/bin/hook-chunks/format-NIBVWBGR.mjs +0 -8
- package/dist/bin/hook-chunks/judgment-receipt-HTNEOJLT.mjs +0 -8
- package/dist/bin/hook-chunks/land-cue-FNLP4IAB.mjs +0 -9
- package/dist/bin/hook-chunks/land-synthesis-HBPIXP5S.mjs +0 -8
- package/dist/bin/hook-chunks/legacy-crew-sweep-2MLYPNQR.mjs +0 -24
- package/dist/bin/hook-chunks/memory-index-MQCHZFUE.mjs +0 -10
- package/dist/bin/hook-chunks/notification-VQM2AMNS.mjs +0 -8
- package/dist/bin/hook-chunks/post-edit-VTLDHWI3.mjs +0 -8
- package/dist/bin/hook-chunks/pre-bash-JR6257XO.mjs +0 -11
- package/dist/bin/hook-chunks/pre-commit-BYUFDN2N.mjs +0 -8
- package/dist/bin/hook-chunks/pre-edit-MHROFDS3.mjs +0 -11
- package/dist/bin/hook-chunks/pre-package-P7CLTJJV.mjs +0 -8
- package/dist/bin/hook-chunks/pre-search-BCQHPE46.mjs +0 -9
- package/dist/bin/hook-chunks/pre-secrets-IE5NX5X5.mjs +0 -8
- package/dist/bin/hook-chunks/project-memory-ON54KZEM.mjs +0 -8
- package/dist/bin/hook-chunks/project-style-evolution-T27I5N65.mjs +0 -8
- package/dist/bin/hook-chunks/publish-helper-I37V4L7U.mjs +0 -8
- package/dist/bin/hook-chunks/purge-QQ6XILZD.mjs +0 -8
- package/dist/bin/hook-chunks/retention-E7WGFL47.mjs +0 -8
- package/dist/bin/hook-chunks/sdd-PV6KWXE4.mjs +0 -10
- package/dist/bin/hook-chunks/session-continuity-5CLT5YBL.mjs +0 -11
- package/dist/bin/hook-chunks/session-start-ATYLOUKB.mjs +0 -8
- package/dist/bin/hook-chunks/setup-VL7YXVE5.mjs +0 -142
- package/dist/bin/hook-chunks/spec-task-breakdown-MPNRRTNZ.mjs +0 -8
- package/dist/bin/hook-chunks/state-storage-KNGP2CQV.mjs +0 -8
- package/dist/bin/hook-chunks/stop-GBUGB5OE.mjs +0 -17
- package/dist/bin/hook-chunks/subagent-start-HURF2GI7.mjs +0 -8
- package/dist/bin/hook-chunks/subagent-stop-WJECHEXI.mjs +0 -8
- package/dist/bin/hook-chunks/symbol-graph-LZM4RZXZ.mjs +0 -8
- package/dist/bin/hook-chunks/task-service-BM2JQXMS.mjs +0 -8
- package/dist/bin/hook-chunks/tdd-UJDJUJ3E.mjs +0 -10
- package/dist/bin/hook-chunks/weak-model-mode-GLXXHG32.mjs +0 -8
- package/dist/bin/hook-chunks/work-graph-QJGNBVIP.mjs +0 -49
- package/dist/bin/hook-chunks/work-scope-VTF6SKLY.mjs +0 -8
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __createRequire } from 'module';
|
|
3
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
4
|
+
import { dirname as __pathDirname } from 'path';
|
|
5
|
+
const require = __createRequire(import.meta.url);
|
|
6
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = __pathDirname(__filename);
|
|
8
|
+
import{d as n,g as o}from"./chunk-KG7Z6OMK.mjs";import{a as i}from"./chunk-E66B27AL.mjs";o();function u(r,e){try{return e?n.query(r,"SELECT content FROM task_log WHERE task_id = ? ORDER BY id DESC LIMIT 5",e).map(t=>t.content):n.query(r,"SELECT content FROM task_log ORDER BY id DESC LIMIT 5").map(t=>t.content)}catch{return[]}}i(u,"recentJournal");export{u as a};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __createRequire } from 'module';
|
|
3
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
4
|
+
import { dirname as __pathDirname } from 'path';
|
|
5
|
+
const require = __createRequire(import.meta.url);
|
|
6
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = __pathDirname(__filename);
|
|
8
|
+
import{a as f}from"./chunk-R4ILCXKE.mjs";import{c as _}from"./chunk-OUAS3LZ3.mjs";import{a as k}from"./chunk-INXNK57E.mjs";import{a as d,b as E,c as y}from"./chunk-5EQLQ7GF.mjs";import{d as r,g as R}from"./chunk-KG7Z6OMK.mjs";import{b as a,c as T,h as A}from"./chunk-JAMSIKDE.mjs";import{a as c}from"./chunk-E66B27AL.mjs";A();R();function o(s){let e={id:s.id,description:s.description,priority:s.priority??"medium",type:s.type??"feature",section:s.section??"backlog",completed:s.completed===1,createdAt:s.created_at};return s.completed_at!=null&&(e.completedAt=s.completed_at),s.feature_id!=null&&(e.featureId=s.feature_id),s.feature_name!=null&&(e.originFeature=s.feature_name),s.body!=null&&(e.body=s.body),s.agent!=null&&(e.agent=s.agent),s.group_name!=null&&(e.groupName=s.group_name),s.group_id!=null&&(e.groupId=s.group_id),e}c(o,"rowToTask");var p=`INSERT INTO queue_tasks
|
|
9
|
+
(id, description, type, priority, section, created_at, completed, completed_at,
|
|
10
|
+
feature_id, feature_name, body, agent, group_name, group_id)
|
|
11
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`;function m(s){return[s.id,s.description,s.type??null,s.priority??null,s.section??"backlog",s.createdAt,s.completed?1:0,s.completedAt??null,s.featureId??null,s.originFeature??null,s.body??null,s.agent??null,s.groupName??null,s.groupId??null]}c(m,"insertParams");var g=class extends k{static{c(this,"QueueStorage")}constructor(){super("queue.json",_)}getDefault(){return{tasks:[],lastUpdated:""}}getEventType(e){return`queue.${e}d`}async getTasks(e){return r.query(e,"SELECT * FROM queue_tasks ORDER BY created_at ASC").map(o)}async getActiveTasks(e){return r.query(e,"SELECT * FROM queue_tasks WHERE section = 'active' AND completed = 0 ORDER BY created_at ASC").map(o)}async getBacklog(e){return r.query(e,"SELECT * FROM queue_tasks WHERE section = 'backlog' AND completed = 0 ORDER BY created_at ASC").map(o)}async getNextTask(e){let t=await this.getActiveTasks(e);return f(t)[0]||null}async addTask(e,t){let i={...t,id:d(),createdAt:a(),completed:!1};return r.run(e,p,...m(i)),await this.publishEvent(e,"queue.task_added",{taskId:i.id,description:i.description,priority:i.priority,section:i.section,created_at:i.createdAt}),i}async addTasks(e,t){let i=a(),u=t.map(n=>({...n,id:d(),createdAt:i,completed:!1}));for(let n of u)r.run(e,p,...m(n));return await this.publishEvent(e,"queue.tasks_added",{count:u.length,tasks:u.map(n=>({id:n.id,description:n.description,created_at:n.createdAt}))}),u}async upsertTask(e,t){let i=await this.getTask(e,t.id);if(i){let n={...i};for(let l of["description","type","priority","section"])t[l]!==void 0&&(n[l]=t[l]);r.run(e,`UPDATE queue_tasks SET description = ?, type = ?, priority = ?, section = ?
|
|
12
|
+
WHERE id = ?`,n.description,n.type??null,n.priority??null,n.section??"backlog",t.id);return}let u={...t,id:t.id,description:t.description,priority:t.priority??"medium",type:t.type??"feature",section:t.section??"backlog",completed:t.completed??!1,createdAt:t.createdAt??a()};r.run(e,p,...m(u))}async removeTask(e,t){r.run(e,"DELETE FROM queue_tasks WHERE id = ?",t),await this.publishEvent(e,"queue.task_removed",{taskId:t})}async deleteByFeatureId(e,t){let u=r.run(e,"DELETE FROM queue_tasks WHERE feature_id = ?",t).changes;return u>0&&await this.publishEvent(e,"queue.tasks_removed_by_feature",{featureId:t,count:u}),u}async completeTask(e,t){let i=a();if(r.run(e,"UPDATE queue_tasks SET completed = 1, completed_at = ? WHERE id = ? AND completed = 0",i,t).changes===0)return null;let n=await this.getTask(e,t);return n&&await this.publishEvent(e,"queue.task_completed",{taskId:t,description:n.description,completedAt:n.completedAt}),n}async moveToSection(e,t,i){r.run(e,"UPDATE queue_tasks SET section = ? WHERE id = ?",i,t)}async setPriority(e,t,i){r.run(e,"UPDATE queue_tasks SET priority = ? WHERE id = ?",i,t)}async getTask(e,t){let i=r.get(e,"SELECT * FROM queue_tasks WHERE id = ?",t);return i?o(i):null}async updateTask(e,t,i){let u=await this.getTask(e,t);if(!u)return null;let n={...u,...i};return r.run(e,"UPDATE queue_tasks SET description = ?, body = ?, type = ?, priority = ?, section = ? WHERE id = ?",n.description,n.body??null,n.type??null,n.priority??null,n.section??"backlog",t),await this.publishEvent(e,"queue.task_updated",{taskId:t}),n}async clearCompleted(e){return r.run(e,"DELETE FROM queue_tasks WHERE completed = 1").changes}async removeStaleCompleted(e){let t=T(E.QUEUE_COMPLETED_DAYS).toISOString(),i=r.query(e,"SELECT * FROM queue_tasks WHERE completed = 1 AND completed_at IS NOT NULL AND completed_at < ?",t).map(o);return i.length===0?0:(y.archiveMany(e,i.map(u=>({entityType:"queue_task",entityId:u.id,entityData:u,summary:u.description,reason:"age"}))),r.run(e,"DELETE FROM queue_tasks WHERE completed = 1 AND completed_at IS NOT NULL AND completed_at < ?",t),await this.publishEvent(e,"queue.stale_removed",{count:i.length}),i.length)}},D=new g;export{D as a};
|
|
@@ -5,5 +5,5 @@ 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 i,b as g,c,d as p,e as m,f as u,i as l}from"./chunk-
|
|
8
|
+
import{a as i,b as g,c,d as p,e as m,f as u,i as l}from"./chunk-NBKEOLDH.mjs";import{r as d,s as f,u as M}from"./chunk-JAMSIKDE.mjs";import{b as s,c as j}from"./chunk-JQE2F2RK.mjs";import{e as n,f as y}from"./chunk-BUDZL4DW.mjs";import{a as r}from"./chunk-E66B27AL.mjs";M();y();j();function v(){return process.env.PRJCT_TEST_MODE==="1"?s(".prjct-tests","kimi","mcp.json"):s(".kimi","mcp.json")}r(v,"getKimiMcpConfigPath");async function C(t=v()){let e=await c("context7",i.context7,t),o=await c("prjct",i.prjct,t);return{path:t,changed:e.changed||o.changed}}r(C,"ensureKimiMcpServer");var h=[{name:"prjct",ready:"\u2705 prjct MCP already configured",added:"\u2705 prjct MCP added to mcp.json",failed:"prjct MCP setup failed",manual:" Run `prjct start` again to retry."}];async function b(t={}){t.silent||console.log(`
|
|
9
9
|
\u{1F50C} Configuring MCP servers...`);try{await l.install();let e=t.verifyContext7===!1?null:await l.verify();t.silent||(e?.verified?console.log("\u2705 Context7 MCP ready (framework API lookups)"):(console.log(`\u26A0\uFE0F Context7 configured but not yet verified: ${e?.message||""}`),console.log(" It will activate on the next time you open your AI client.")))}catch(e){t.silent||(console.log(`\u26A0\uFE0F Context7 MCP setup failed: ${n(e)}`),console.log(" Run `prjct start` again to retry."))}for(let e of h)try{let o=g(),a=await p(e.name,o),x=await c(e.name,i[e.name],o);a&&!x.changed?t.silent||console.log(e.ready):t.silent||console.log(e.added)}catch(o){t.silent||(console.log(`\u26A0\uFE0F ${e.failed}: ${n(o)}`),console.log(e.manual))}try{if((await d()).installed){let o=await m(),a=await u();t.silent||(o.skipped==="user-managed"?console.log("\u2705 prjct Codex config ready (MCP user-managed)"):o.changed||a.changed?console.log("\u2705 prjct Codex config updated in ~/.codex/config.toml"):console.log("\u2705 prjct Codex config already ready"))}}catch(e){t.silent||(console.log(`\u26A0\uFE0F Codex config setup failed: ${n(e)}`),console.log(" Run `prjct start` again to retry."))}try{if((await f()).installed){let o=await C();t.silent||console.log(o.changed?"\u2705 prjct Kimi config updated in ~/.kimi/mcp.json":"\u2705 prjct Kimi config already ready")}}catch(e){t.silent||(console.log(`\u26A0\uFE0F Kimi config setup failed: ${n(e)}`),console.log(" Run `prjct start` again to retry."))}}r(b,"setupMcpServers");export{b as a};
|
|
@@ -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{e as r,g as S}from"./chunk-
|
|
8
|
+
import{e as r,g as S}from"./chunk-KG7Z6OMK.mjs";import{b as o,h as p,v as a,w as _}from"./chunk-JAMSIKDE.mjs";import{f as g,g as l,o as m}from"./chunk-UH4MD3F3.mjs";import{a as s}from"./chunk-E66B27AL.mjs";_();p();S();var c=class{static{s(this,"SyncPendingStorage")}append(n,e){let t=o(),u=JSON.stringify(e);return e.entityType&&e.entityId&&e.contentHash&&r.run(n,`DELETE FROM sync_pending
|
|
9
9
|
WHERE project_id = ?
|
|
10
10
|
AND entity_type = ?
|
|
11
11
|
AND entity_id = ?
|
|
@@ -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{d as p}from"./chunk-
|
|
8
|
+
import{d as p}from"./chunk-7JEKBJAP.mjs";import{e as f}from"./chunk-NWZEBCTC.mjs";import{a as g}from"./chunk-27XFSCOE.mjs";import{e as m,g as _}from"./chunk-KG7Z6OMK.mjs";import{a as l}from"./chunk-E66B27AL.mjs";_();var S=8,y=140;function h(d,r){if(r.length===0)return 0;let n=[];try{m.transaction(d,s=>{let i=s.prepare("DELETE FROM memory_embeddings WHERE memory_id = ?"),c=s.prepare("DELETE FROM memory_entries WHERE id = ?"),t=s.prepare("DELETE FROM events WHERE id = ? AND type LIKE 'memory.remember.%'");for(let e of r){try{i.run(e)}catch{}c.run(e).changes&&n.push(e);let a=e.match(/^mem_(\d+)$/);if(a)try{t.run(Number(a[1]))}catch{}}})}catch{return n.length}return n.length}l(h,"hardDeleteEntries");function w(d,r,n){let s=new Map;for(let e of r)s.set(e.type,(s.get(e.type)??0)+1);let i=[...s.entries()].sort((e,o)=>o[1]-e[1]).map(([e,o])=>`${e}\xD7${o}`).join(", "),c=r.map(e=>p(e).replace(/\s+/g," ").trim()).filter(e=>e.length>20).slice(0,S).map(e=>`- ${e.length>y?`${e.slice(0,y-1)}\u2026`:e}`),t=[`Distill of discarded auto-history (${d}).`,`Context synthesis: ${r.length} low-value rows collapsed \u2014 raw history deleted; only this digest remains for the project model.`,`Key data: source=retention-distill; discarded=${r.length}; types=${i}; at=${n}`,"What happened: purged auto-generated / redundant captures that added no excess vs the reference model.","Why it mattered: prevent vault bloat; agents must not re-read detector noise.",`Outcome: ${r.length} raw entries hard-deleted after distillation.`,"Next implication: prefer high-excess judgment; re-run detectors only when code/model changes."];return c.length>0&&t.push(`Sample cues (not full bodies):
|
|
9
9
|
${c.join(`
|
|
10
10
|
`)}`),t.join(" ")}l(w,"buildDistillContent");async function A(d,r,n,s,i){if(s.length<=i)return{discarded:0,digested:!1};let t=[...s].sort((u,b)=>b.rememberedAt.localeCompare(u.rememberedAt)).slice(i);if(t.length===0)return{discarded:0,digested:!1};let e=new Date().toISOString(),o=`auto-distill:${n}`,a=w(n,t,e),E=await g.remember(d,{type:"learning",content:a,tags:{source:"retention-distill",topic:o,capture:"distill-discard-v1",context_schema:"living-v2",synthesis:"deterministic",discarded_count:String(t.length),auto_source:n},provenance:"inferred",projectId:r}).then(()=>!0).catch(()=>!1),D=t.map(u=>u.id);return{discarded:h(r,D),digested:E,digestTopic:o}}l(A,"distillAndDiscardAutoSource");async function v(d,r,n){let s=g.allEntriesForIndex(r),i=new Map;for(let t of s){let e=t.tags?.source;if(!f(e)||e==="retention-distill"||t.tags?.source==="retention-distill")continue;let o=i.get(e)??[];o.push(t),i.set(e,o)}let c=[];for(let[t,e]of i){if(e.length<=n)continue;let o=await A(d,r,t,e,n);c.push(o)}return{discarded:c.reduce((t,e)=>t+e.discarded,0),digests:c.filter(t=>t.digested).length}}l(v,"distillAndDiscardAllAutoSources");function x(d,r,n=1e3){let s=Date.now()-r*864e5;try{let i=m.query(d,`SELECT id, type, content FROM memory_entries
|
|
11
11
|
WHERE deleted_at IS NOT NULL AND deleted_at < ?
|
|
@@ -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{
|
|
8
|
+
import{m as _,n as z,v as M,w as J}from"./chunk-JAMSIKDE.mjs";import{f as y,g as m,m as C,o as F}from"./chunk-UH4MD3F3.mjs";import{b as o,p as $}from"./chunk-QWQFF2UG.mjs";import{a as e}from"./chunk-E66B27AL.mjs";J();F();import ot from"node:crypto";import b from"node:fs/promises";import R from"node:os";import H from"node:path";$();z();import{spawn as Y}from"node:child_process";var P="prjct-cli-auth",c="prjct-cloud",A="app.prjct.cli.auth",E="prjct-cli-auth",u={cached:void 0,testStore:null};function d(){return process.platform==="darwin"}e(d,"isDarwin");function h(){return process.platform==="linux"}e(h,"isLinux");function p(){return process.platform==="win32"}e(p,"isWindows");function B(r,t,a){return new Promise((n,i)=>{let s=Y(r,t,{stdio:["pipe","pipe","pipe"]}),f=[],U=[];s.stdout.setEncoding("utf8"),s.stderr.setEncoding("utf8"),s.stdout.on("data",l=>{f.push(String(l))}),s.stderr.on("data",l=>{U.push(String(l))}),s.on("error",i),s.on("close",l=>{if(l===0){n(f.join(""));return}i(new Error(U.join("").trim()||`${r} exited with code ${l}`))}),s.stdin.end(a)})}e(B,"runWithStdin");async function K(){try{let{stdout:r}=await o("security",["find-generic-password","-a",c,"-s",P,"-w"]);return r.trim()||null}catch{return null}}e(K,"readMacosKeychain");async function q(r){await o("security",["add-generic-password","-U","-a",c,"-s",P,"-w",r])}e(q,"writeMacosKeychain");async function V(){try{await o("security",["delete-generic-password","-a",c,"-s",P])}catch{}}e(V,"clearMacosKeychain");async function W(){try{let{stdout:r}=await o("secret-tool",["lookup","service",A,"account",c]);return r.trim()||null}catch{return null}}e(W,"readLinuxSecretService");async function X(r){await B("secret-tool",["store","--label","prjct Cloud token","service",A,"account",c],r)}e(X,"writeLinuxSecretService");async function Z(){try{await o("secret-tool",["clear","service",A,"account",c])}catch{}}e(Z,"clearLinuxSecretService");var w=`
|
|
9
9
|
using System;
|
|
10
10
|
using System.Runtime.InteropServices;
|
|
11
11
|
using System.Text;
|
|
@@ -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 r}from"./chunk-
|
|
8
|
+
import{a as r}from"./chunk-TG5CQJD5.mjs";import{c as d}from"./chunk-M5E2YOZ4.mjs";import{a as i}from"./chunk-E66B27AL.mjs";var u={upsert:"updated",delete:"deleted"},o={value:null};async function p(){if(o.value)return o.value;try{let{default:e}=await import("./auth-config-SP4PBALR.mjs"),t=e;if(typeof t.getDeviceId=="function"){let n=await t.getDeviceId();return o.value=n,n}return"unknown-device"}catch{return"unknown-device"}}i(p,"resolveDeviceId");async function v(e){try{let t=await p(),n=d(e.data),c={type:`${e.entityType}.${u[e.eventType]}`,path:[e.entityType,e.entityId],data:e.data,timestamp:new Date().toISOString(),projectId:e.projectId,entityType:e.entityType,entityId:e.entityId,eventType:e.eventType,contentHash:n,deviceId:t,originDeviceId:e.originDeviceId??t,revisionCount:e.revisionCount??1};await r.publish(c)}catch{}}i(v,"publishCRUD");function a(e){v(e)}i(a,"publishCRUDSync");export{v as a,a as b};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __createRequire } from 'module';
|
|
3
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
4
|
+
import { dirname as __pathDirname } from 'path';
|
|
5
|
+
const require = __createRequire(import.meta.url);
|
|
6
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = __pathDirname(__filename);
|
|
8
|
+
import{a as c,b as w,c as y,d as x,f as h}from"./chunk-BUDZL4DW.mjs";import{a as i,c as d}from"./chunk-E66B27AL.mjs";var j,R,_,v=d(()=>{"use strict";j=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"]),R=["",".ts",".tsx",".js",".jsx","/index.ts","/index.js"],_=/(?:import|from)\s+['"]([^'"]+)['"]/g});import E from"node:fs/promises";async function S(r,t){let e=await E.readFile(r,"utf-8").catch(a=>{if(c(a))return null;throw a});if(e===null)return null;let n=(()=>{try{return JSON.parse(e)}catch{return null}})();if(n===null)return await F(r,e),k(r,"Malformed JSON"),null;let o=t.safeParse(n);return o.success?n:(await F(r,e),k(r,O(o.error)),null)}async function F(r,t){let e=`${r}.backup`;try{await E.writeFile(e,t,{encoding:"utf-8",flag:"wx"})}catch{}}function k(r,t){console.error(`[prjct] Warning: Corrupted storage file: ${r}`),console.error(`[prjct] Reason: ${t}`),console.error("[prjct] A .backup file has been created. Returning defaults.")}function O(r){return r.issues.slice(0,3).map(t=>`${t.path.join(".")}: ${t.message}`).join("; ")}var b=d(()=>{"use strict";h();i(S,"safeRead");i(F,"createBackup");i(k,"logCorruption");i(O,"formatZodError")});import s from"node:fs/promises";import m from"node:path";async function T(r,t,e){try{return await e()}catch(n){throw y(n)||w(n)?new Error(x(n,r,t)):n}}async function M(r,t={}){let e=[],n=t.maxFiles??1/0,o=t.dotfileAllowlist?new Set(t.dotfileAllowlist):null;async function a(l){if(e.length>=n)return;let u=await s.readdir(l,{withFileTypes:!0}).catch(()=>[]);for(let p of u){if(e.length>=n)break;let f=String(p.name);if(j.has(f)||t.skipDotfiles&&f.startsWith(".")&&(!o||!o.has(f)))continue;let g=m.join(l,f);p.isDirectory()?await a(g):p.isFile()&&e.push(m.relative(r,g))}}return i(a,"walk"),await a(r),e}async function Z(r,t,e){let n=[],o=Array.from({length:Math.ceil(r.length/t)},(a,l)=>l*t);for(let a of o){let l=await Promise.all(r.slice(a,a+t).map(e));for(let u of l)u!==null&&n.push(u)}return n}async function G(r,t=null,e){if(e)return await S(r,e)??t;try{let n=await s.readFile(r,"utf-8");return JSON.parse(n)}catch(n){if(c(n))return t;throw n}}async function K(r,t,e=2){await T(r,"config",async()=>{let n=m.dirname(r);await s.mkdir(n,{recursive:!0});let o=`${JSON.stringify(t,null,e)}
|
|
9
|
+
`;await s.writeFile(r,o,"utf-8")})}async function X(r,t=""){try{return await s.readFile(r,"utf-8")}catch(e){if(c(e))return t;throw e}}async function q(r){return s.readFile(r,"utf-8").then(t=>({content:t,exists:!0})).catch(t=>{if(c(t))return{content:"",exists:!1};throw t})}async function B(r,t){await T(r,"file",async()=>{let e=m.dirname(r);await s.mkdir(e,{recursive:!0}),await s.writeFile(r,t,"utf-8")})}async function H(r){try{return await s.access(r),!0}catch(t){if(c(t))return!1;throw t}}async function Q(r){try{return(await s.stat(r)).isDirectory()}catch(t){if(c(t))return!1;throw t}}async function U(r){await s.mkdir(r,{recursive:!0})}async function Y(r,t={}){try{return(await s.readdir(r,{withFileTypes:!0})).filter(o=>!t.filesOnly||o.isFile()).filter(o=>!t.dirsOnly||o.isDirectory()).filter(o=>!t.extension||o.name.endsWith(t.extension)).map(o=>o.name)}catch(e){if(c(e))return[];throw e}}var P=d(()=>{"use strict";v();b();h();i(T,"withWriteErrorContext");i(M,"walkDir");i(Z,"batchProcess");i(G,"readJson");i(K,"writeJson");i(X,"readFile");i(q,"readExistingFileOrEmpty");i(B,"writeFile");i(H,"fileExists");i(Q,"dirExists");i(U,"ensureDir");i(Y,"listFiles")});export{R as a,_ as b,v as c,M as d,Z as e,G as f,K as g,X as h,q as i,B as j,H as k,Q as l,U as m,Y as n,P as o};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __createRequire } from 'module';
|
|
3
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
4
|
+
import { dirname as __pathDirname } from 'path';
|
|
5
|
+
const require = __createRequire(import.meta.url);
|
|
6
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = __pathDirname(__filename);
|
|
8
|
+
import{b as jt}from"./chunk-Y3J7UUMR.mjs";import{a as St,b as wt,c as kt,d as vt,e as bt}from"./chunk-TXJT3G53.mjs";import{a as ft}from"./chunk-TFCLMTJ5.mjs";import{a as Ke}from"./chunk-66GE3IHX.mjs";import{a as qe}from"./chunk-J6TAD3OZ.mjs";import{a as Ye}from"./chunk-T2FCU3ZS.mjs";import{a as Qe,b as At}from"./chunk-4O4D6DV7.mjs";import{a as gt,b as ht}from"./chunk-JUZ5LNDI.mjs";import{d as yt}from"./chunk-NWIQNII6.mjs";import{a as Pt,b as Ct,c as xt,d as Dt}from"./chunk-LNB2GLYI.mjs";import{a as p}from"./chunk-DYHYDHCW.mjs";import{a as ut}from"./chunk-JR542RI2.mjs";import{b as q,c as st,d as nt}from"./chunk-HHIGNKDO.mjs";import{a as at,b as ot,e as it,f as ct,g as ae,h as lt,i as dt}from"./chunk-7GNWHWOO.mjs";import{a as mt}from"./chunk-VWOIUTAX.mjs";import{i as pt}from"./chunk-NBKEOLDH.mjs";import{a as rt}from"./chunk-GFY4GY3Z.mjs";import{b as Ze,c as et,d as tt}from"./chunk-JMCMTX6U.mjs";import{b as se}from"./chunk-R4ILCXKE.mjs";import{a as Xe}from"./chunk-YUKGWWL7.mjs";import{a as ne,b as I}from"./chunk-6UH244CC.mjs";import{a as Be}from"./chunk-INXNK57E.mjs";import{c as Je}from"./chunk-5EQLQ7GF.mjs";import{b as Ve}from"./chunk-UA4Z5TGG.mjs";import{a as We,b as Ue}from"./chunk-M5E2YOZ4.mjs";import{b as M}from"./chunk-AZHE4VOM.mjs";import{d as b,e as T,g as B}from"./chunk-KG7Z6OMK.mjs";import{d as re}from"./chunk-4SKJWNKE.mjs";import{b as v,h as te,p as He,r as Le,u as Ar,v as J,w as Ge}from"./chunk-JAMSIKDE.mjs";import{b as Ne,f as jr}from"./chunk-HDSS6UB3.mjs";import{d as _e,e as $e,f as Oe,k as N,o as V}from"./chunk-UH4MD3F3.mjs";import{a as Me,p as Dr}from"./chunk-QWQFF2UG.mjs";import{a as ze}from"./chunk-EQ5KNMLG.mjs";import{d as w}from"./chunk-PKDYFXMI.mjs";import{a as R,d as Fe,e as k,f as $}from"./chunk-BUDZL4DW.mjs";import{a as i}from"./chunk-E66B27AL.mjs";function It(r,e){let t=[];H("Languages",r.languages,e.languages,t),H("Frameworks",r.frameworks,e.frameworks,t),(r.packageManager??"")!==(e.packageManager??"")&&t.push({field:"Package manager",type:"changed",before:r.packageManager??"(none)",after:e.packageManager??"(none)"}),(r.sourceDir??"")!==(e.sourceDir??"")&&t.push({field:"Source directory",type:"changed",before:r.sourceDir??"(none)",after:e.sourceDir??"(none)"}),(r.testDir??"")!==(e.testDir??"")&&t.push({field:"Test directory",type:"changed",before:r.testDir??"(none)",after:e.testDir??"(none)"}),H("Config files",r.configFiles,e.configFiles,t),r.fileCount!==e.fileCount&&t.push({field:"File count",type:"changed",before:String(r.fileCount),after:String(e.fileCount)});let s=r.patterns.map(c=>c.name),a=e.patterns.map(c=>c.name);H("Patterns",s,a,t);let o=r.antiPatterns.map(c=>c.issue),n=e.antiPatterns.map(c=>c.issue);return H("Anti-patterns",o,n,t),ut(t,r.commitHash??null,e.commitHash??null)}i(It,"generateAnalysisDiff");function vs(r){if(!r.hasChanges)return`## Analysis Diff
|
|
9
|
+
|
|
10
|
+
No changes between runs.`;let e=[];e.push("## Analysis Diff"),(r.beforeCommit||r.afterCommit)&&e.push(`> \`${r.beforeCommit?.substring(0,7)??"(none)"}\` \u2192 \`${r.afterCommit?.substring(0,7)??"(none)"}\``),e.push(""),e.push("| Change | Field | Detail |"),e.push("|--------|-------|--------|");for(let s of r.items){let a=s.type==="added"?"+":s.type==="removed"?"-":"~",o=s.type==="changed"?`${s.before} \u2192 ${s.after}`:s.after??s.before??"";e.push(`| ${a} | ${s.field} | ${o} |`)}e.push("");let t=[];return r.summary.added>0&&t.push(`${r.summary.added} added`),r.summary.removed>0&&t.push(`${r.summary.removed} removed`),r.summary.changed>0&&t.push(`${r.summary.changed} changed`),e.push(`**Summary**: ${t.join(", ")}`),e.join(`
|
|
11
|
+
`)}i(vs,"formatAnalysisDiffMd");function bs(r){if(!r.hasChanges)return"No changes between analysis runs.";let e=[];(r.beforeCommit||r.afterCommit)&&(e.push(` ${r.beforeCommit?.substring(0,7)??"(none)"} \u2192 ${r.afterCommit?.substring(0,7)??"(none)"}`),e.push(""));for(let t of r.items)t.type==="added"?e.push(` + ${t.field}: ${t.after}`):t.type==="removed"?e.push(` - ${t.field}: ${t.before}`):e.push(` ~ ${t.field}: ${t.before} \u2192 ${t.after}`);return e.join(`
|
|
12
|
+
`)}i(bs,"formatAnalysisDiffText");function H(r,e,t,s){let a=new Set(e),o=new Set(t);for(let n of t)a.has(n)||s.push({field:r,type:"added",after:n});for(let n of e)o.has(n)||s.push({field:r,type:"removed",before:n})}i(H,"diffStringArray");$();V();import oe from"node:fs/promises";import E from"node:path";import{z as f}from"zod";function K(r,e){let t=r.filter(a=>!a.passed).length,s=r.filter(a=>a.passed).length;return{passed:t===0,checks:r,totalMs:Date.now()-e,failedCount:t,passedCount:s}}i(K,"summarizeChecks");jr();var Ir=f.enum(["draft","verified","sealed"]),Et=f.object({severity:f.enum(["low","medium","high"]).optional(),language:f.string().optional(),framework:f.string().optional(),source:f.enum(["baseline","repo","context7","feedback"]).optional(),confidence:f.number().min(0).max(1).optional()}),Er=f.object({name:f.string(),description:f.string(),location:f.string().optional()}).extend(Et.shape),Rr=f.object({issue:f.string(),file:f.string(),suggestion:f.string()}).extend(Et.shape),ie=f.object({projectId:f.string(),languages:f.array(f.string()),frameworks:f.array(f.string()),packageManager:f.string().optional(),sourceDir:f.string().optional(),testDir:f.string().optional(),configFiles:f.array(f.string()),fileCount:f.number(),patterns:f.array(Er),antiPatterns:f.array(Rr),analyzedAt:f.string(),modelMetadata:Ne.optional(),status:Ir.default("draft"),commitHash:f.string().optional(),signature:f.string().optional(),sealedAt:f.string().optional(),verifiedAt:f.string().optional()});var Tr={TypeScript:[".ts",".tsx",".mts",".cts"],JavaScript:[".js",".jsx",".mjs",".cjs"],Python:[".py",".pyw"],Java:[".java"],Go:[".go"],Rust:[".rs"],Ruby:[".rb"],PHP:[".php"],Swift:[".swift"],Kotlin:[".kt",".kts"],"C++":[".cpp",".cc",".cxx",".hpp",".h"],C:[".c",".h"],"C#":[".cs"],Elixir:[".ex",".exs"],Scala:[".scala"]};async function Mr(r,e){let t=Date.now();if(r.frameworks.length===0)return{name:"Framework verification",passed:!0,output:"No frameworks declared (skipped)",durationMs:Date.now()-t};try{let s=E.join(e,"package.json"),a=await oe.readFile(s,"utf-8"),o=JSON.parse(a),n={...o.dependencies,...o.devDependencies},c=[],l=[];for(let d of r.frameworks){let m=d.toLowerCase();Object.keys(n).some(y=>y.toLowerCase().includes(m))?l.push(d):c.push(d)}return c.length===0?{name:"Framework verification",passed:!0,output:`${l.length} framework(s) verified in dependencies`,durationMs:Date.now()-t}:{name:"Framework verification",passed:!1,error:`Frameworks not found in dependencies: ${c.join(", ")}`,durationMs:Date.now()-t}}catch(s){return R(s)?{name:"Framework verification",passed:!1,error:"package.json not found (cannot verify frameworks)",durationMs:Date.now()-t}:{name:"Framework verification",passed:!1,error:`Failed to read package.json: ${s instanceof Error?s.message:"unknown error"}`,durationMs:Date.now()-t}}}i(Mr,"verifyFrameworks");async function Fr(r,e){let t=Date.now();if(r.languages.length===0)return{name:"Language verification",passed:!0,output:"No languages declared (skipped)",durationMs:Date.now()-t};try{let s=await Nr(e),a=new Set(s),o=[],n=[];for(let c of r.languages){let l=Tr[c];if(!l)continue;l.some(m=>a.has(m))?o.push(c):n.push(c)}return n.length===0?{name:"Language verification",passed:!0,output:`${o.length} language(s) verified with matching files`,durationMs:Date.now()-t}:{name:"Language verification",passed:!1,error:`Languages without matching files: ${n.join(", ")}`,durationMs:Date.now()-t}}catch(s){return{name:"Language verification",passed:!1,error:`Failed to scan project files: ${s instanceof Error?s.message:"unknown error"}`,durationMs:Date.now()-t}}}i(Fr,"verifyLanguages");async function _r(r,e){let t=Date.now(),s=r.patterns.filter(n=>n.location);if(s.length===0)return{name:"Pattern location verification",passed:!0,output:"No pattern locations specified (skipped)",durationMs:Date.now()-t};let a=[],o=[];for(let n of s){let c=n.location,l=E.join(e,c);await N(l)?o.push(c):a.push(`${n.name} (${c})`)}return a.length===0?{name:"Pattern location verification",passed:!0,output:`${o.length} pattern location(s) verified`,durationMs:Date.now()-t}:{name:"Pattern location verification",passed:!1,error:`Pattern locations not found: ${a.join(", ")}`,durationMs:Date.now()-t}}i(_r,"verifyPatternLocations");async function $r(r,e){let t=Date.now();try{let s=await Hr(e),a=r.fileCount,o=.1,n=Math.abs(s-a),c=a*o;return n<=c?{name:"File count verification",passed:!0,output:`File count accurate (declared: ${a}, actual: ${s})`,durationMs:Date.now()-t}:{name:"File count verification",passed:!1,error:`File count mismatch: declared ${a}, actual ${s} (diff: ${n})`,durationMs:Date.now()-t}}catch(s){return{name:"File count verification",passed:!1,error:`Failed to count files: ${s instanceof Error?s.message:"unknown error"}`,durationMs:Date.now()-t}}}i($r,"verifyFileCount");async function Or(r,e){let t=Date.now();if(r.antiPatterns.length===0)return{name:"Anti-pattern file verification",passed:!0,output:"No anti-patterns declared (skipped)",durationMs:Date.now()-t};let s=[],a=[];for(let o of r.antiPatterns){let n=E.join(e,o.file);await N(n)?a.push(o.file):s.push(`${o.issue} (${o.file})`)}return s.length===0?{name:"Anti-pattern file verification",passed:!0,output:`${a.length} anti-pattern file(s) verified`,durationMs:Date.now()-t}:{name:"Anti-pattern file verification",passed:!1,error:`Anti-pattern files not found: ${s.join(", ")}`,durationMs:Date.now()-t}}i(Or,"verifyAntiPatternFiles");async function Rt(r,e){let t=Date.now(),s=await Promise.all([Mr(r,e),Fr(r,e),_r(r,e),$r(r,e),Or(r,e)]);return K(s,t)}i(Rt,"semanticVerify");async function Nr(r){let e=new Set,t=[/node_modules/,/\.git/,/dist/,/build/,/\.next/,/\.turbo/,/coverage/];async function s(a){try{let o=await oe.readdir(a,{withFileTypes:!0});for(let n of o){let c=E.join(a,n.name),l=E.relative(r,c);if(!t.some(d=>d.test(l))){if(n.isDirectory())await s(c);else if(n.isFile()){let d=E.extname(n.name);d&&e.add(d)}}}}catch{}}return i(s,"scanDir"),await s(r),Array.from(e)}i(Nr,"getProjectExtensions");async function Hr(r){let e=[/node_modules/,/\.git/,/dist/,/build/,/\.next/,/\.turbo/,/coverage/];async function t(s){try{let a=await oe.readdir(s,{withFileTypes:!0});return(await Promise.all(a.map(async n=>{let c=E.join(s,n.name),l=E.relative(r,c);return e.some(d=>d.test(l))?0:n.isDirectory()?t(c):n.isFile()?1:0}))).reduce((n,c)=>n+c,0)}catch{return 0}}return i(t,"scanDir"),t(r)}i(Hr,"countProjectFiles");te();var ce=class extends Be{static{i(this,"AnalysisStorage")}constructor(){super("analysis.json")}getDefault(){return{draft:null,sealed:null,previousSealed:null,lastUpdated:""}}getEventType(e){return`analysis.${e}d`}async saveDraft(e,t){let s={...t,status:"draft"};ie.parse(s),await this.update(e,a=>({...a,draft:s,lastUpdated:v()})),this.publishAnalysis(e,s)}publishAnalysis(e,t){Ve({projectId:e,entityType:"analysis",entityId:e,eventType:"upsert",data:{...t,id:e}})}async seal(e){let t=await this.read(e);if(!t.draft)return{success:!1,error:"No draft analysis to seal. Run `p. sync` first."};if(t.draft.status==="sealed")return{success:!1,error:"Draft is already sealed."};let s=this.computeSignature(t.draft),a=v(),o={...t.draft,status:"sealed",signature:s,sealedAt:a};return ie.parse(o),await this.write(e,{draft:null,sealed:o,previousSealed:t.sealed,lastUpdated:a}),this.publishAnalysis(e,o),{success:!0,signature:s}}async getSealed(e){return(await this.read(e)).sealed}async getDraft(e){return(await this.read(e)).draft}async getActive(e){let t=await this.read(e);return t.sealed??t.draft}async getStatus(e){let t=await this.read(e);return{hasSealed:t.sealed!==null,hasDraft:t.draft!==null,hasPreviousSealed:t.previousSealed!==null,sealedCommit:t.sealed?.commitHash??null,draftCommit:t.draft?.commitHash??null,previousSealedCommit:t.previousSealed?.commitHash??null,sealedAt:t.sealed?.sealedAt??null}}async rollback(e){let t=await this.read(e);if(!t.previousSealed)return{success:!1,error:"No previous sealed version to rollback to."};let s=v();return await this.write(e,{draft:t.sealed,sealed:t.previousSealed,previousSealed:null,lastUpdated:s}),this.publishAnalysis(e,t.previousSealed),{success:!0,restoredSignature:t.previousSealed.signature}}async diff(e){let t=await this.read(e);return!t.sealed||!t.draft?null:It(t.sealed,t.draft)}checkStaleness(e,t){return e?t?e!==t?{isStale:!0,sealedCommit:e,currentCommit:t,message:`Analysis is stale: sealed at ${e}, HEAD is ${t}. Run \`p. sync\` + \`p. seal\` to update.`}:{isStale:!1,sealedCommit:e,currentCommit:t,message:"Analysis is current."}:{isStale:!0,sealedCommit:e,currentCommit:null,message:"Cannot determine current commit. Analysis may be stale."}:{isStale:!1,sealedCommit:null,currentCommit:t,message:"No sealed analysis. Run `p. sync` then `p. seal`."}}async verify(e){let t=await this.read(e);if(!t.sealed)return{valid:!1,message:"No sealed analysis to verify."};if(!t.sealed.signature)return{valid:!1,message:"Sealed analysis has no signature."};let s=this.computeSignature({...t.sealed,signature:void 0,sealedAt:void 0});return s===t.sealed.signature?{valid:!0,message:"Signature verified. Analysis integrity confirmed."}:{valid:!1,message:`Signature mismatch. Expected ${s}, got ${t.sealed.signature}. Analysis may have been modified.`}}async semanticVerify(e,t){let s=await this.read(e),a=s.sealed??s.draft;return a?await Rt(a,t):{passed:!1,checks:[{name:"Analysis availability",passed:!1,error:"No analysis available. Run `p. sync` to generate.",durationMs:0}],totalMs:0,failedCount:1,passedCount:0}}computeSignature(e){let t={projectId:e.projectId,languages:e.languages,frameworks:e.frameworks,packageManager:e.packageManager,sourceDir:e.sourceDir,testDir:e.testDir,configFiles:e.configFiles,fileCount:e.fileCount,patterns:e.patterns,antiPatterns:e.antiPatterns,analyzedAt:e.analyzedAt,commitHash:e.commitHash};return We(JSON.stringify(t))}},Y=new ce;import hs from"node:fs/promises";import Z from"node:path";Ar();Ge();V();import le from"node:fs/promises";import Tt from"node:path";import{gunzipSync as Lr,gzipSync as Gr}from"node:zlib";Ge();B();var zr="code-graph.json.gz";function Mt(r){return Tt.join(J.getGlobalProjectPath(r),zr)}i(Mt,"artifactPath");async function Wr(r){if(!ae(r))return null;let e=dt(r),t=ot(r),s=lt(r)??{symbolCount:e.length,edgeCount:t.length,fileCount:new Set(e.map(l=>l.file)).size,builtAt:new Date().toISOString()},a={version:1,projectId:r,exportedAt:new Date().toISOString(),meta:s,symbols:e,edges:t},o=Buffer.from(JSON.stringify(a),"utf-8"),n=Gr(o,{level:6}),c=Mt(r);return await le.mkdir(Tt.dirname(c),{recursive:!0}),await le.writeFile(c,n),{path:c,bytes:n.length,symbols:e.length,edges:t.length}}i(Wr,"exportCodeGraphArtifact");async function Ur(r){let e=Mt(r),t=await le.readFile(e).catch(()=>null);if(!t)return{imported:!1,symbols:0,edges:0,reason:"no per-project artifact"};let s=(()=>{try{let o=Lr(t).toString("utf-8");return{payload:JSON.parse(o)}}catch(o){return{error:`corrupt artifact: ${o instanceof Error?o.message:String(o)}`}}})();if("error"in s)return{imported:!1,symbols:0,edges:0,reason:s.error};let a=s.payload;return a.version!==1||!Array.isArray(a.symbols)?{imported:!1,symbols:0,edges:0,reason:"unsupported artifact version"}:a.projectId&&a.projectId!==r?{imported:!1,symbols:0,edges:0,reason:`artifact projectId mismatch (got ${a.projectId}, expected ${r})`}:(at(r,{symbols:a.symbols,edges:a.edges}),T.setDoc(r,"symbol-graph",{...a.meta,builtAt:a.meta.builtAt??a.exportedAt}),{imported:!0,symbols:a.symbols.length,edges:a.edges.length})}i(Ur,"importCodeGraphArtifact");async function Ft(r){if(ae(r))return{bootstrapped:!1,detail:"local index already present"};let e=await Ur(r);return e.imported?{bootstrapped:!0,detail:`imported ${e.symbols} symbols / ${e.edges} edges from per-project cache`}:{bootstrapped:!1,detail:e.reason??"import failed"}}i(Ft,"bootstrapCodeGraphFromArtifact");function _t(r){return r?.cloud?.enabled===!0&&r.cloud.paused!==!0}i(_t,"shouldAutoUploadCodeGraph");async function $t(r,e){try{await Wr(r)}catch{}if(e.uploadToCloud)try{await Vr(r,e.uploadDependencies)}catch{}}i($t,"maybeExportAfterIndex");async function Vr(r,e={}){let t=await import("./code-graph-cloud-4GRWQSUK.mjs"),s=(e.buildSnapshot??t.buildCloudCodeGraphSnapshot)(r);if(!t.isUploadableGraph(s))return{uploaded:!1,reason:"no symbol index or empty graph"};try{let o=await(e.upload??(async(n,c)=>{let{default:l}=await import("./sync-client-EGBMWF3J.mjs");return l.uploadCodeGraph(n,c)}))(r,s);return o.ok?{uploaded:!0,nodes:o.nodes??s.nodes.length,links:o.links??s.links.length}:{uploaded:!1,reason:o.reason??"upload failed or unauthenticated",nodes:s.nodes.length,links:s.links.length}}catch(a){return{uploaded:!1,reason:a instanceof Error?a.message:String(a)}}}i(Vr,"maybeUploadCodeGraphToCloud");import F from"node:fs/promises";import Jr from"node:os";import x from"node:path";var de=[{name:"prjct",description:St,allowedTools:[...wt],body:i(()=>vt(),"body"),reference:i(()=>bt(),"reference"),referenceFile:kt}];function Br(r){let e=r.userInvocable!==!1;return`---
|
|
13
|
+
description: "${r.description}"
|
|
14
|
+
allowed-tools: [${r.allowedTools.map(t=>`"${t}"`).join(", ")}]
|
|
15
|
+
user-invocable: ${e}
|
|
16
|
+
---`}i(Br,"buildFrontmatter");function qr(r){return`${Br(r)}
|
|
17
|
+
|
|
18
|
+
${r.body()}`}i(qr,"buildSkillContent");function Ot(){return process.env.HOME||Jr.homedir()}i(Ot,"homeDir");function Kr(){return x.join(Ot(),".claude","skills")}i(Kr,"claudeSkillsRoot");function Yr(){let r=Ot();return[x.join(r,".codex","skills"),x.join(r,".gemini","skills"),x.join(r,".gemini","antigravity","global_skills")]}i(Yr,"compactSkillRoots");function Qr(r){return!!(/^# [^\n]+\n[^\n]*\|\s*\d+\s+files\s*\|/m.test(r)||/## Recent Deliveries/m.test(r)||/## Velocity/m.test(r)&&/pts\/sprint/m.test(r))}i(Qr,"skillBodyHasProjectStamp");var ue=class{static{i(this,"SkillGenerator")}async generateAndInstall(){let e={generated:[],skipped:[]},t=Kr();for(let o of de)try{let n=qr(o);if(Qr(n))throw new Error("refusing to install project-stamped skill body (isolation guard)");let c=x.join(t,o.name),l=x.join(c,"SKILL.md");await F.mkdir(c,{recursive:!0}),await F.writeFile(l,n,"utf-8"),o.reference&&o.referenceFile&&await F.writeFile(x.join(c,o.referenceFile),o.reference(),"utf-8"),e.generated.push({name:o.name,path:l})}catch(n){p.debug(`Failed to generate skill ${o.name}`,{error:w(n)}),e.skipped.push({name:o.name,reason:w(n)})}let s=ze();for(let o of Yr())try{let n=x.join(o,"prjct"),c=x.join(n,"SKILL.md");await F.mkdir(n,{recursive:!0}),await F.writeFile(c,s,"utf-8"),e.generated.push({name:"prjct-compact",path:c})}catch(n){p.debug("Compact skill install skipped",{root:o,error:w(n)})}let a=new Set(de.map(o=>o.name));try{let o=await F.readdir(t,{withFileTypes:!0}).catch(()=>[]);for(let n of o)n.isDirectory()&&n.name.startsWith("prjct-")&&!a.has(n.name)&&await F.rm(x.join(t,n.name),{recursive:!0,force:!0}).catch(()=>{})}catch{}return e.generated.length>0&&p.info("Generated portable multi-host skills",{count:e.generated.length,skills:e.generated.map(o=>o.name)}),e}getDefinitions(){return de}},Nt=new ue;function me(){return{branch:"main",commits:0,contributors:0,hasChanges:!1,stagedFiles:[],modifiedFiles:[],untrackedFiles:[],recentCommits:[],weeklyCommits:0}}i(me,"emptyGitData");function pe(){return{fileCount:0,version:"0.0.0",name:"unknown",ecosystem:"unknown",projectType:"simple",languages:[],frameworks:[]}}i(pe,"emptyStats");function fe(){return{install:"npm install",run:"npm run",test:"npm test",build:"npm run build",dev:"npm run dev",lint:"npm run lint",format:"npm run format"}}i(fe,"emptyCommands");function ge(){return{hasFrontend:!1,hasBackend:!1,hasDatabase:!1,hasDocker:!1,hasTesting:!1,frontendType:null,frameworks:[]}}i(ge,"emptyStack");function Ht(r,e){let t=[...r.added,...r.modified],s=new Set(t),a=new Set,o=q(e);if(o)for(let l of t){let d=o.reverse[l];if(d)for(let m of d)s.has(m)||a.add(m)}let n=Array.from(a),c=[...t,...n];return{directlyChanged:t,affectedByImports:n,deleted:r.deleted,allAffected:c}}i(Ht,"propagateChanges");function Lt(r){let e=new Set;for(let t of r){let s=t.toLowerCase();(s.endsWith(".tsx")||s.endsWith(".jsx")||s.endsWith(".css")||s.endsWith(".scss")||s.endsWith(".vue")||s.endsWith(".svelte")||s.includes("/components/")||s.includes("/pages/")||s.includes("/app/"))&&(e.add("frontend"),e.add("uxui")),(s.includes(".test.")||s.includes(".spec.")||s.includes("__tests__")||s.includes("/test/"))&&e.add("testing"),(s.includes("dockerfile")||s.includes("docker-compose")||s.includes(".dockerignore")||s.includes(".github/")||s.includes("ci/")||s.includes("cd/"))&&e.add("devops"),(s.endsWith(".sql")||s.includes("prisma")||s.includes("drizzle")||s.includes("migration")||s.includes("/db/"))&&e.add("database"),(s.endsWith(".ts")||s.endsWith(".js"))&&!s.includes(".test.")&&!s.includes(".spec.")&&!s.endsWith(".d.ts")&&e.add("backend")}return e}i(Lt,"affectedDomains");B();V();import Gt from"node:fs/promises";import Xr from"node:path";function Zr(r){return typeof Bun<"u"&&Bun.hash?`xxh64:${Bun.hash(r).toString(36)}`:`fnv1a:${([...r].reduce((t,s)=>Math.imul(t^s.charCodeAt(0),16777619),2166136261)>>>0).toString(36)}`}i(Zr,"hashContent");async function es(r,e={}){let t=await _e(r,{skipDotfiles:!0,dotfileAllowlist:[".env.example"]}),s=new Map,a=e.changedFilesHint?.length?new Set(e.changedFilesHint):null,o=await $e(t,100,async n=>{try{let c=Xr.join(r,n),l=await Gt.stat(c),d=l.mtime.toISOString(),m=e.storedHashes?.get(n),h=a?.has(n)??!1;if(m&&!h&&m.size===l.size&&m.mtime===d&&m.hash)return{path:n,hash:m.hash,size:l.size,mtime:d};let y=await Gt.readFile(c,"utf-8");return{path:n,hash:Zr(y),size:l.size,mtime:d}}catch{return null}});for(let n of o)s.set(n.path,n);return s}i(es,"computeHashes");function ts(r,e){let t=[],s=[],a=[];for(let[n,c]of r){let l=e.get(n);l?l.hash!==c.hash?s.push(n):a.push(n):t.push(n)}let o=[];for(let n of e.keys())r.has(n)||o.push(n);return{added:t,modified:s,deleted:o,unchanged:a}}i(ts,"diffHashes");function he(r,e){let t=T.getDb(r);t.transaction(()=>{t.prepare("DELETE FROM index_checksums").run();let s=t.prepare("INSERT INTO index_checksums (path, checksum, size, mtime) VALUES (?, ?, ?, ?)");for(let[,a]of e)s.run(a.path,a.hash,a.size,a.mtime)})(),T.setDoc(r,"file-hashes-meta",{fileCount:e.size,builtAt:new Date().toISOString()})}i(he,"saveHashes");function rs(r){let e=new Map;try{let t=T.query(r,"SELECT path, checksum, size, mtime FROM index_checksums");for(let s of t)e.set(s.path,{path:s.path,hash:s.checksum,size:s.size||0,mtime:s.mtime||""})}catch{}return e}i(rs,"loadHashes");async function ye(r,e,t){let s=rs(e),a=await es(r,{storedHashes:s,changedFilesHint:t});return{diff:ts(a,s),currentHashes:a}}i(ye,"detectChanges");function zt(r){return T.hasDoc(r,"file-hashes-meta")}i(zt,"hasHashRegistry");$();var ss=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs"]);async function Wt(r){let{projectId:e,projectPath:t,isFullSync:s,changedFilesHint:a}=r,o={shouldRebuildIndexes:!0,changedDomains:new Set,incrementalInfo:void 0,changedSourceFiles:[],deletedSourceFiles:[]};if(!s&&zt(e)){try{let{diff:n,currentHashes:c}=await ye(t,e,a),l=n.added.length+n.modified.length+n.deleted.length,d=(()=>{if(l===0&&!a?.length)return{shouldRebuildIndexes:!1,changedDomains:new Set,incrementalInfo:{isIncremental:!0,filesChanged:0,filesUnchanged:n.unchanged.length,indexesRebuilt:!1,affectedDomains:[]},changedSourceFiles:[],deletedSourceFiles:[]};let m=Ht(n,e),h=Lt(m.allAffected),y=m.allAffected.some(Se);return{shouldRebuildIndexes:y,changedDomains:h,incrementalInfo:{isIncremental:!0,filesChanged:l,filesUnchanged:n.unchanged.length,indexesRebuilt:y,affectedDomains:Array.from(h)},changedSourceFiles:[...n.added,...n.modified].filter(Se),deletedSourceFiles:n.deleted.filter(Se)}})();return he(e,c),d}catch(n){p.debug("Incremental detection failed, falling back to full sync",{error:k(n)})}return o}try{let{currentHashes:n}=await ye(t,e,a);he(e,n)}catch(n){p.debug("Hash computation failed (non-critical)",{error:k(n)})}return o}i(Wt,"detectIncrementalChanges");function Se(r){let e=r.substring(r.lastIndexOf("."));return ss.has(e)}i(Se,"isSourceFile");import{z as D}from"zod";var jn=D.object({date:D.string(),tokensSaved:D.number(),syncs:D.number(),avgCompressionRate:D.number(),totalDuration:D.number()}),An=D.object({agentName:D.string(),usageCount:D.number(),tokensSaved:D.number()}),Ut={"claude-opus-4.5":.005,"claude-sonnet-4.5":.003,"claude-haiku-4.5":.001,"claude-opus-4":.015,"claude-sonnet-4":.003,"gpt-4o":.0025,"gemini-pro":.00125,default:.003};function Vt(r,e="default"){let t=Ut[e]||Ut.default;return r/1e3*t}i(Vt,"estimateCostSaved");function In(r){return r<.01?`$${(r*100).toFixed(2)}\xA2`:`$${r.toFixed(2)}`}i(In,"formatCost");B();var ns=i(r=>({date:r.date,tokensSaved:r.tokens_saved,syncs:r.syncs,avgCompressionRate:r.avg_compression_rate,totalDuration:r.total_duration}),"rowToDaily"),Q=i(r=>{let e=new Date;return e.setDate(e.getDate()-r),e.toISOString().split("T")[0]},"dayCutoff"),we=class{static{i(this,"MetricsStorage")}async recordSync(e,t){let s=Math.max(0,t.originalSize-t.filteredSize),a=t.originalSize>0?s/t.originalSize:0,o=new Date().toISOString().split("T")[0];if(b.run(e,`INSERT INTO metrics_daily (date, tokens_saved, syncs, avg_compression_rate, total_duration)
|
|
19
|
+
VALUES (?, ?, 1, ?, ?)
|
|
20
|
+
ON CONFLICT(date) DO UPDATE SET
|
|
21
|
+
tokens_saved = metrics_daily.tokens_saved + excluded.tokens_saved,
|
|
22
|
+
avg_compression_rate =
|
|
23
|
+
(metrics_daily.avg_compression_rate * metrics_daily.syncs + excluded.avg_compression_rate)
|
|
24
|
+
/ (metrics_daily.syncs + 1),
|
|
25
|
+
syncs = metrics_daily.syncs + 1,
|
|
26
|
+
total_duration = metrics_daily.total_duration + excluded.total_duration`,o,s,a,t.duration),t.agents?.length){let n=Math.floor(s/t.agents.length);for(let c of t.agents)b.run(e,`INSERT INTO metrics_agent_usage (agent_name, usage_count, tokens_saved)
|
|
27
|
+
VALUES (?, 1, ?)
|
|
28
|
+
ON CONFLICT(agent_name) DO UPDATE SET
|
|
29
|
+
usage_count = metrics_agent_usage.usage_count + 1,
|
|
30
|
+
tokens_saved = metrics_agent_usage.tokens_saved + excluded.tokens_saved`,c,n)}}async getSummary(e){let t=b.get(e,`SELECT COALESCE(SUM(tokens_saved), 0) AS tokens,
|
|
31
|
+
COALESCE(SUM(syncs), 0) AS syncs,
|
|
32
|
+
COALESCE(SUM(total_duration), 0) AS duration,
|
|
33
|
+
COALESCE(SUM(avg_compression_rate * syncs), 0) AS weighted_rate
|
|
34
|
+
FROM metrics_daily`),s=t?.syncs??0,a=t?.tokens??0,o=i((m,h)=>b.get(e,h?"SELECT COALESCE(SUM(tokens_saved), 0) AS t FROM metrics_daily WHERE date >= ? AND date < ?":"SELECT COALESCE(SUM(tokens_saved), 0) AS t FROM metrics_daily WHERE date >= ?",...h?[m,h]:[m])?.t??0,"rangeTokens"),n=o(Q(30)),c=o(Q(60),Q(30)),l=c>0?(n-c)/c*100:0,d=b.query(e,"SELECT * FROM metrics_agent_usage ORDER BY usage_count DESC LIMIT 5").map(m=>({agentName:m.agent_name,usageCount:m.usage_count,tokensSaved:m.tokens_saved}));return{totalTokensSaved:a,estimatedCostSaved:Vt(a),compressionRate:s>0?(t?.weighted_rate??0)/s:0,syncCount:s,avgSyncDuration:s>0?(t?.duration??0)/s:0,topAgents:d,last30DaysTokens:n,trend:l}}async getDailyStats(e,t=30){return b.query(e,"SELECT * FROM metrics_daily WHERE date >= ? ORDER BY date ASC",Q(t)).map(ns)}async getFirstSyncDate(e){return b.get(e,"SELECT MIN(date) AS d FROM metrics_daily")?.d??""}},Jt=new we;$();te();import as from"node:path";function os(r){return Ue(as.resolve(r))}i(os,"repoHash");function L(r){return r.toLowerCase().replace(/[^a-z0-9]+/g,"")}i(L,"normalizeKey");function is(r){return se(r,e=>`${L(e.name)}::${L(e.source)}`)}i(is,"dedupePatterns");function cs(r){return se(r,e=>`${L(e.issue)}::${L(e.file)}::${L(e.source)}`)}i(cs,"dedupeAntiPatterns");var ke=class{static{i(this,"PatternExtractor")}async extract(e){let t=os(e.projectPath),s=[];if(e.context7Verified)for(let l of e.frameworks)s.push({name:`${l} API validation via Context7`,description:`Validate ${l} APIs against current documentation through Context7 before implementation.`,framework:l,source:"context7",confidence:.7});let a=(e.feedback?.patternsDiscovered||[]).map(l=>({name:l,description:`Confirmed during completed tasks: ${l}`,source:"feedback",confidence:.75})),o=(e.feedback?.knownGotchas||[]).map(l=>({issue:l,file:"multiple",suggestion:`Recurring gotcha. Prevent this pattern during implementation: ${l}`,source:"feedback",severity:"medium",confidence:.7})),n=is([...s,...a]),c=cs([...o]);return{patterns:n,antiPatterns:c,repoPathHash:t}}},ls=new ke,Bt=ls;var qt=200;async function Kt(r,e,t){let{bm25Index:s,originalSize:a}=(()=>{try{let d=Ze(r),m=d?Object.values(d.documents).reduce((h,y)=>h+y.length,0):0;return{bm25Index:d,originalSize:m||e.fileCount*qt}}catch(d){return p.debug("Could not load BM25 index for metrics",{error:k(d)}),{bm25Index:null,originalSize:e.fileCount*qt}}})(),o=0,n=a>0?Math.max(0,(a-o)/a):0;try{await Jt.recordSync(r,{originalSize:a,filteredSize:o,duration:t,isWatch:!1})}catch(d){p.debug("Failed to record sync metrics",{error:k(d)})}try{let{velocityStorage:d}=await import("./velocity-storage-47CF3XWZ.mjs");await d.recompute(r)}catch(d){p.debug("Failed to recompute velocity",{error:k(d)})}let c=await import("./developer-evolution-SLC34HUU.mjs").then(({captureDeveloperSnapshot:d})=>d(r)).catch(d=>(p.debug("Failed to capture dev snapshot",{error:k(d)}),!1)),l={};try{let d=s;d&&(l.bm25Files=d.totalDocs,l.bm25AvgTokens=Math.round(d.avgDocLength),l.bm25VocabSize=Object.keys(d.invertedIndex).length);let m=q(r);m&&(l.importEdges=m.edgeCount,l.importFiles=m.fileCount);let h=gt(r);h&&(l.cochangeCommits=h.commitsAnalyzed,l.cochangeFiles=h.filesAnalyzed)}catch(d){p.debug("Could not load index stats",{error:k(d)})}return{duration:t,originalSize:a,filteredSize:o,compressionRate:n,indexes:l,developerSnapshotCaptured:c}}i(Kt,"recordSyncMetrics");async function Yt(r,e,t,s,a,o){try{let n=t.recentCommits[0]?.hash||null,c=await I.getAggregatedFeedback(r).catch(()=>{});try{let{refreshSkillIndex:d}=await import("./skill-index-RAVJMC4P.mjs");await d(r,e)}catch{}let l=await Bt.extract({projectId:r,projectPath:e,languages:s.languages,frameworks:Array.from(new Set([...s.frameworks,...a.frameworks])),feedback:c,context7Verified:o});await Y.saveDraft(r,{projectId:r,languages:s.languages,frameworks:s.frameworks,configFiles:[],fileCount:s.fileCount,patterns:l.patterns,antiPatterns:l.antiPatterns,analyzedAt:v(),status:"draft",commitHash:n??void 0})}catch(n){p.debug("Failed to save draft analysis (non-critical)",{error:k(n)})}}i(Yt,"saveDraftAnalysis");async function Qt(r){try{let[e,t,s,a,o]=await Promise.all([qe.archiveOldShipped(r).catch(()=>0),Ke.markDormantIdeas(r).catch(()=>0),Ye.removeStaleCompleted(r).catch(()=>0),I.archiveStalePausedTasks(r).catch(()=>[]),Xe.capEntries(r).catch(()=>0)]),n=e+t+s+a.length+o;if(n>0){p.info("Archived stale data",{shipped:e,dormant:t,staleQueue:s,stalePaused:a.length,memoryCapped:o,total:n});let c=Je.getStats(r);p.debug("Archive stats",c)}}catch(e){p.debug("Archival failed (non-critical)",{error:k(e)})}}i(Qt,"archiveStaleData");var us=6e4,ve=class extends Error{static{i(this,"SyncPhaseTimeoutError")}phase;timeoutMs;constructor(e,t){super(`sync phase '${e}' timed out after ${t}ms. Set PRJCT_SYNC_PHASE_TIMEOUT_MS to tune this guard, or run \`prjct sync --full --md\` if incremental state looks stale.`),this.name="SyncPhaseTimeoutError",this.phase=e,this.timeoutMs=t}};function ms(){return Number(process.env.PRJCT_SYNC_PHASE_TIMEOUT_MS)||us}i(ms,"syncPhaseTimeoutMs");function Xt(r,e){let t=ms(),s=(()=>{let a=Promise.withResolvers(),o=setTimeout(()=>a.reject(new ve(e,t)),t);return{promise:a.promise,cancel:i(()=>clearTimeout(o),"cancel")}})();return Promise.race([r,s.promise]).finally(s.cancel)}i(Xt,"withPhaseTimeout");async function Zt(r,e,t){let s=Date.now();p.debug("sync phase start",{phase:r});try{let a=await e(),o=Date.now()-s;return p.debug("sync phase done",{phase:r,ms:o}),t?.push({phase:r,ms:o}),a}catch(a){let o=Date.now()-s;throw p.debug("sync phase failed",{phase:r,ms:o,error:w(a)}),t?.push({phase:r,ms:o}),a}}i(Zt,"runSyncPhase");function er(r,e={}){let t=e.now??Date.now,s=t(),o=(()=>{try{return r().then(()=>({}),n=>({error:n}))}catch(n){return Promise.resolve({error:n})}})().then(n=>{try{e.onComplete?.({totalMs:t()-s,...n})}catch{}});return{async settle(){await o}}}i(er,"startPostIndexWork");B();import ps from"node:fs/promises";import fs from"node:path";$();te();$();V();import be from"node:fs/promises";import X from"node:path";var Pe=".prjct/.prjct-state.md",Ce=class{static{i(this,"LocalStateGenerator")}async generate(e,t){let s=X.join(e,Pe);await be.mkdir(X.dirname(s),{recursive:!0});let a=this.toMarkdown(t);await be.writeFile(s,a,"utf-8")}async remove(e){try{await be.unlink(X.join(e,Pe))}catch(t){if(!R(t))throw t}}async exists(e){let t=X.join(e,Pe);return N(t)}toMarkdown(e){let t=["<!-- Auto-generated by prjct - DO NOT EDIT -->","<!-- This file provides local state persistence for AI tools -->","","# prjct State",""];if(e.currentTask){let s=e.currentTask;if(t.push("## Current Work Cycle"),t.push(""),t.push(`**${s.description}**`),t.push(""),t.push(`- Started: ${s.startedAt}`),s.linearId&&t.push(`- Linear: ${s.linearId}`),s.branch&&t.push(`- Branch: ${s.branch}`),t.push(`- Status: ${s.status||"active"}`),t.push(""),s.subtasks&&s.subtasks.length>0){t.push("### Subtasks"),t.push(""),s.subtasks.forEach((c,l)=>{let d=c.status==="completed"?"\u2705":c.status==="in_progress"?"\u25B6\uFE0F":"\u23F3",m=l===s.currentSubtaskIndex?" \u2190 **Active**":"";t.push(`${l+1}. ${d} ${c.description}${m}`)}),t.push("");let a=s.subtasks.filter(c=>c.status==="completed").length,o=s.subtasks.length,n=Math.round(a/o*100);t.push(`**Progress**: ${a}/${o} (${n}%)`),t.push("")}}else t.push("*No active work cycle*"),t.push(""),t.push('Start work with `p. work "intent"`'),t.push("");if(e.previousTask){let s=e.previousTask;t.push("---"),t.push(""),t.push("## Previous Work Cycle"),t.push(""),t.push(`**${s.description}**`),t.push(""),t.push(`- Status: ${s.status}`),s.prUrl&&t.push(`- PR: ${s.prUrl}`),t.push("")}return t.push("---"),t.push(`*Last updated: ${e.lastUpdated||new Date().toISOString()}*`),t.push(""),t.join(`
|
|
35
|
+
`)}},tr=new Ce;var gs=["storage","context","memory","analysis","config","sync"];async function rr(r){try{await Promise.all(gs.map(e=>ps.mkdir(fs.join(r,e),{recursive:!0})))}catch(e){throw new Error(Fe(e,r,"project directories"))}}i(rr,"ensureProjectDirectories");async function sr(r){let{projectId:e,projectPath:t,cliVersion:s,git:a,stats:o}=r,n=b.getDoc(e,"project")||{},c={...n,projectId:e,repoPath:t,name:o.name,version:o.version,cliVersion:s,techStack:o.frameworks,fileCount:o.fileCount,commitCount:a.commits,stack:o.ecosystem,currentBranch:a.branch,hasUncommittedChanges:a.hasChanges,createdAt:n.createdAt||v(),lastSync:v(),lastSyncCommit:a.recentCommits[0]?.hash||null,lastSyncBranch:a.branch};b.setDoc(e,"project",c)}i(sr,"updateProjectDoc");async function nr(r){let{projectId:e,projectPath:t,stats:s,stack:a}=r,n={...await I.read(e)};n.projectId=e,n.stack={language:s.languages[0]||"Unknown",framework:s.frameworks[0]||null},n.domains={hasFrontend:a.hasFrontend,hasBackend:a.hasBackend,hasDatabase:a.hasDatabase,hasTesting:a.hasTesting,hasDocker:a.hasDocker},n.projectType=s.projectType,n.metrics={totalFiles:s.fileCount},n.lastSync=v(),n.lastUpdated=v(),n.context={...n.context||{},lastSession:v(),lastAction:"Synced project",nextAction:'Run `p. work "intent"` to start a work cycle'},await I.write(e,n);try{await tr.remove(t)}catch(c){p.debug("Legacy local state cleanup failed (optional)",{error:k(c)})}}i(nr,"updateStateDoc");function ar(r,e,t){b.appendEvent(r,"sync",{branch:e.branch,uncommitted:e.hasChanges,fileCount:t.fileCount,commitCount:e.commits})}i(ar,"logSyncEvent");import or from"node:fs/promises";import xe from"node:path";$();Dr();var ir={async jsonFilesValid(r){let e=Date.now(),t=[],s=xe.basename(r);try{await I.read(s)}catch(a){R(a)||t.push(`state: ${k(a)}`)}return{name:"State data valid",passed:t.length===0,output:t.length===0?"1 store validated":void 0,error:t.length>0?t.join("; "):void 0,durationMs:Date.now()-e}},async noSensitiveData(r){let e=Date.now(),t=xe.join(r,"context"),s=[/(?:api[_-]?key|apikey)\s*[:=]\s*['"][^'"]{10,}/i,/(?:password|passwd|pwd)\s*[:=]\s*['"][^'"]{4,}/i,/(?:secret|token)\s*[:=]\s*['"][^'"]{10,}/i],a=[];try{let o=await or.readdir(t);for(let n of o){if(!n.endsWith(".md"))continue;let c=await or.readFile(xe.join(t,n),"utf-8");for(let l of s)if(l.test(c)){a.push(`${n}: potential sensitive data detected`);break}}}catch(o){if(!R(o))return{name:"No sensitive data",passed:!1,error:`Could not scan: ${k(o)}`,durationMs:Date.now()-e}}return{name:"No sensitive data",passed:a.length===0,output:a.length===0?"No sensitive patterns found":void 0,error:a.length>0?a.join("; "):void 0,durationMs:Date.now()-e}}},De=class{static{i(this,"SyncVerifier")}async verify(e,t,s){let a=Date.now(),o=[],n=s?.failFast??!1,c=[],l=[ir.jsonFilesValid(t),ir.noSensitiveData(t)];for(let m of l){let h=await m;if(o.push(h),!h.passed&&n){c.push(...s?.checks?.filter(y=>y.enabled!==!1).map(y=>y.name)??[]);break}}if((!n||o.every(m=>m.passed))&&s?.checks)for(let m of s.checks){if(m.enabled===!1){c.push(m.name);continue}let h=await this.runCustomCheck(m,e);if(o.push(h),!h.passed&&n){let y=s.checks.slice(s.checks.indexOf(m)+1);c.push(...y.filter(P=>P.enabled!==!1).map(P=>P.name));break}}return{...K(o,a),skippedCount:c.length}}async runCustomCheck(e,t){let s=Date.now(),a=e.command||(e.script?`sh ${e.script}`:null);if(!a)return{name:e.name,passed:!1,error:"No command or script specified",durationMs:Date.now()-s};try{let{stdout:o,stderr:n}=await Me(a,{cwd:t,timeout:3e4});return{name:e.name,passed:!0,output:(o.trim()||n.trim()).slice(0,200)||void 0,durationMs:Date.now()-s}}catch(o){let n=o;return{name:e.name,passed:!1,error:(n.stderr?.trim()||n.message).slice(0,200),durationMs:Date.now()-s}}}},cr=new De;var je=class{static{i(this,"SyncService")}projectPath;projectId=null;globalPath="";cliVersion="0.0.0";constructor(){this.projectPath=process.cwd()}async sync(e=process.cwd(),t={}){this.projectPath=e;let s=Date.now(),a=[],o=i((l,d)=>Zt(l,d,a),"phase"),n={installed:!1,verified:!1,configPath:"",message:""},c=[];try{if(this.projectId=await M.getProjectId(e),!this.projectId)return{success:!1,projectId:"",cliVersion:"",git:me(),stats:pe(),commands:fe(),stack:ge(),context7:{installed:!1,verified:!1},error:"No prjct project. Run p. init first."};if(this.globalPath=J.getGlobalProjectPath(this.projectId),this.cliVersion=await this.getCliVersion(),await hs.rm(Z.join(this.globalPath,"agents"),{recursive:!0,force:!0}).catch(()=>{}),(await Le()).installed){let u=await yt({autoRepair:!0});u.verified||p.warn(`Codex p. router not ready: ${u.message||"verification failed"}`)}await o("mcp-defaults",()=>ft({silent:!0,verifyContext7:!1}));let m=(await He().catch(()=>null))?.name??"claude";try{Object.assign(n,await o("context7",()=>pt.ensureReady(m)))}catch(u){let g=w(u);p.warn(`Context7 MCP not ready (continuing sync): ${g}`),Object.assign(n,{verified:!1,message:g})}await rr(this.globalPath),process.env.PRJCT_SKIP_CREW_SWEEP!=="1"&&await o("legacy-crew-sweep",async()=>{try{let{legacyCrewSweep:u}=await import("./legacy-crew-sweep-2WSO5KEB.mjs"),g=await u(this.projectPath,this.projectId);(g.checkpointsMigrated||g.teamMigrated||g.checkpointsHandEditWarned||g.teamHandEditWarned||g.ghostDirsPurged.length>0||g.agentFilesRepaired.length>0||g.clientPrjctJunkPurged.length>0||g.errors.length>0)&&p.info("Legacy crew sweep ran",{checkpointsMigrated:g.checkpointsMigrated,teamMigrated:g.teamMigrated,checkpointsHandEditWarned:g.checkpointsHandEditWarned,teamHandEditWarned:g.teamHandEditWarned,ghostDirsPurged:g.ghostDirsPurged,agentFilesRepaired:g.agentFilesRepaired,ghostFilesIngested:g.ghostFilesIngested,clientPrjctJunkPurged:g.clientPrjctJunkPurged,errors:g.errors.length})}catch(u){p.debug("Legacy crew sweep failed (non-critical)",{error:w(u)})}});let[y,P,Ee,G]=await o("gather",()=>Xt(Promise.all([Pt(this.projectPath),Ct(this.projectPath),xt(this.projectPath),Dt(this.projectPath)]),"gather")),{shouldRebuildIndexes:ur,changedDomains:ws,incrementalInfo:Re,changedSourceFiles:z,deletedSourceFiles:W}=await o("incremental",()=>Wt({projectId:this.projectId,projectPath:this.projectPath,isFullSync:t.full===!0,changedFilesHint:t.changedFiles}));try{let{refreshFileInventory:u}=await import("./project-file-inventory-5DEN5VLF.mjs");await u(this.projectId,this.projectPath)}catch{}try{await Ft(this.projectId)}catch{}ur&&await o("index",async()=>{try{let u=Re?.isIncremental&&(z.length>0||W.length>0);await Promise.all([u?tt(this.projectPath,this.projectId,z,W):et(this.projectPath,this.projectId),u?nt(this.projectPath,this.projectId,z,W):st(this.projectPath,this.projectId),u?ct(this.projectPath,this.projectId,z,W):it(this.projectPath,this.projectId),ht(this.projectPath,this.projectId)]);let g=this.projectId,S=this.projectPath,O=await M.readConfig(S).catch(()=>null),A=_t(O);c.push(er(()=>$t(g,{uploadToCloud:A}),{onComplete:i(({totalMs:C,error:U})=>{p.debug("sync post-index work settled",{projectId:g,uploadToCloud:A,totalMs:C,...U===void 0?{}:{error:w(U)}})},"onComplete")}))}catch(u){p.debug("File ranking index build failed (non-critical)",{error:w(u)})}});let mr=Date.now();p.debug("sync phase start",{phase:"skills"});let pr=await Nt.generateAndInstall().catch(u=>{p.debug("Native skill generation failed (non-critical)",{error:w(u)})});p.debug("sync phase done",{phase:"skills",ms:Date.now()-mr}),await o("update-files",()=>Promise.all([sr({projectId:this.projectId,projectPath:this.projectPath,cliVersion:this.cliVersion,git:y,stats:P}),nr({projectId:this.projectId,projectPath:this.projectPath,stats:P,stack:G}),Promise.resolve(ar(this.projectId,y,P)),Yt(this.projectId,this.projectPath,y,P,G,n.verified)]));let ee=await Y.getActive(this.projectId),fr={patterns:ee?.patterns?.length||0,antiPatterns:ee?.antiPatterns?.length||0,criticalAntiPatterns:ee?.antiPatterns?.filter(u=>u.severity==="high").length||0},gr=Date.now()-s,Te=await o("metrics",()=>Kt(this.projectId,P,gr)),hr=Te.developerSnapshotCaptured===!0,yr=await(async()=>{try{let{recomputeProjectStyle:u,formatProjectStyleForSync:g}=await import("./project-style-evolution-7MAUSED2.mjs"),S=await o("project-style",()=>u({projectId:this.projectId,projectPath:this.projectPath,stats:P,stack:G,commands:Ee,commitHash:y.recentCommits[0]?.hash??null,source:"sync-mechanical"})),O=g(S),A=S.snapshot.payload.metrics.styleCoverage;return{summary:S.snapshot.summary,evolutionMd:O.evolutionMd,patternCount:S.snapshot.patternCount,antiPatternCount:S.snapshot.antiPatternCount,conventionCount:S.snapshot.conventionCount,styleCoverage:typeof A=="number"?A:Number(A)||0,isFirst:S.isFirst,hasChanges:S.delta.hasChanges}}catch(u){p.debug("Project style recompute failed (non-critical)",{error:w(u)});return}})(),Sr=await o("work-cost",()=>jt(this.projectId));await o("archive",()=>Qt(this.projectId));let wr=await o("context-quality",()=>rt(this.projectPath,this.projectId)),kr=await o("retention",async()=>{try{let u=await M.readConfig(this.projectPath).catch(()=>null),g=u?.retention?.mode??"apply";if(g==="off")return;let S=g==="dry-run",{applyRetention:O,triageInbox:A}=await import("./retention-LWETHQX3.mjs"),C=O(this.projectId,{dryRun:S,maxArchive:u?.retention?.maxArchive,maxDelete:u?.retention?.maxDelete}),{inboxMerged:U,inboxArchived:br}=S?{inboxMerged:0,inboxArchived:0}:(()=>{let j=A(this.projectId);return{inboxMerged:j.merged,inboxArchived:j.archived}})(),{runVaultPurge:Pr,vaultHealth:Cr}=await import("./purge-MC5LFSAO.mjs"),_=await Pr(this.projectId,{projectPath:this.projectPath,dryRun:S,softDeletedPurgeDays:u?.retention?.softDeletedPurgeDays,archivePruneDays:u?.retention?.archivePruneDays,autoSourceMaxLive:u?.retention?.autoSourceMaxLive}),xr=Cr(this.projectId);return{evaluated:C.evaluated,active:C.active,archive:C.wouldArchive,delete:C.wouldDelete,archived:C.archived,deleted:C.deleted,inboxMerged:U,inboxArchived:br,dryRun:S,samples:C.samples.map(j=>({id:j.id,type:j.type,verdict:j.verdict,score:j.score,reasons:j.reasons,excess:j.excess})),referenceSize:C.referenceSize,vault:{...xr,softDeletedPurged:_.softDeletedPurged,orphanEventsPurged:_.orphanEventsPurged,archivesPruned:_.archivesPruned,autoSourceTrimmed:_.autoSourceTrimmed,distilledDiscarded:_.distilledDiscarded,digestsWritten:_.digestsWritten}}}catch(u){p.debug("retention phase failed",{error:w(u)});return}});await o("install-global",async()=>{await re.installGlobalConfig(),await re.syncCommands()}),await o("install-agent-surfaces",async()=>{let{detectInstalledAgents:u}=await import("./detection-QRVSNMKL.mjs"),g=await u(this.projectPath).catch(()=>[]);await mt(this.projectPath,{refreshIfAdopted:!0,agents:g})});let vr=await o("verify",async()=>{try{let u=await M.readConfig(this.projectPath);return await cr.verify(this.projectPath,this.globalPath,u?.verification)}catch(u){p.debug("Verification failed (non-critical)",{error:w(u)});return}});if(process.env.PRJCT_WORLD_MODEL_REFRESH==="1"||process.env.PRJCT_DRIFT_REFRESH==="1")try{let u=await import("node:os"),{markDriftRefreshApplied:g}=await import("./drift-refresh-TD3PYPJN.mjs"),S=process.env.PRJCT_CLI_HOME?Z.resolve(process.env.PRJCT_CLI_HOME):Z.join(u.homedir(),".prjct-cli");g(S)}catch{}return await Promise.all(c.map(u=>u.settle())),{success:!0,projectId:this.projectId,cliVersion:this.cliVersion,git:y,stats:P,commands:Ee,stack:G,context7:{installed:n.installed,verified:n.verified,message:n.message},analysisSummary:fr,contextQuality:wr,retentionDryRun:kr,syncMetrics:Te,workCost:Sr,verification:vr,incremental:Re,projectStyle:yr,developerSnapshotCaptured:hr,generatedSkills:pr,phaseTimings:a}}catch(l){return{success:!1,projectId:this.projectId||"",cliVersion:this.cliVersion,git:me(),stats:pe(),commands:fe(),stack:ge(),context7:{installed:n.installed,verified:n.verified,message:n.message},error:w(l)}}}async getCliVersion(){try{let e=Z.join(__dirname,"..","..","package.json");return(await Oe(e))?.version||"0.0.0"}catch(e){return p.debug("Failed to read CLI version",{error:w(e)}),"0.0.0"}}},co=new je;import Ae from"chalk";var lr={task:"Start new work cycle",done:"Complete current work",pause:"Pause and switch context",resume:"Continue paused task",ship:"Ship the feature",reopen:"Reopen for rework",next:"View task queue",sync:"Analyze project",bug:"Report a bug",idea:"Capture an idea"},ys={task:"work"};function Ie(r){return ys[r]??r}i(Ie,"publicCommand");var dr={task:"working",done:"completed","done-subtask":"working",pause:"paused",resume:"working",ship:"shipped",reopen:"working",next:"idle",sync:"idle",init:"idle",bug:"working",idea:"idle"};function fo(r,e={}){if(e.quiet)return;let t=dr[r]||"idle",s=ne.getValidCommands(t);if(s.length===0)return;let a=s.map(o=>({cmd:`p. ${Ie(o)}`,desc:lr[o]||o}));console.log(Ae.dim(`
|
|
36
|
+
Next:`));for(let o of a){let n=Ae.cyan(o.cmd.padEnd(12));console.log(Ae.dim(` ${n} \u2192 ${o.desc}`))}}i(fo,"showNextSteps");function go(r,e=!1){let t=dr[r]||"idle";return ne.getValidCommands(t).map(a=>({cmd:e?`prjct ${Ie(a)} --md`:`p. ${Ie(a)}`,desc:lr[a]||a}))}i(go,"getNextSteps");async function Ss(r,e={}){let t=await M.getProjectId(r);return t?{ok:!0,value:t}:(e.md?console.log("> No project ID found. Run `prjct init` first."):Qe.failWithHint("NO_PROJECT_ID"),{ok:!1,result:{success:!1,error:"No project ID found"}})}i(Ss,"requireProjectId");async function Io(r,e={}){let t=await At.ensureInit(r);return t.success?Ss(r,e):{ok:!1,result:t}}i(Io,"requireProject");export{vs as a,bs as b,Y as c,In as d,Jt as e,co as f,fo as g,go as h,Io as i};
|
|
@@ -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{c as j}from"./chunk-
|
|
8
|
+
import{c as j}from"./chunk-IHECXD2M.mjs";import{n as w}from"./chunk-JAMSIKDE.mjs";import{c as C}from"./chunk-JQE2F2RK.mjs";import{k as r,o as u}from"./chunk-UH4MD3F3.mjs";import{c as A}from"./chunk-EQ5KNMLG.mjs";import{b as l,c,d as h,e as d}from"./chunk-SYHDEUVU.mjs";import{c as R,e as G}from"./chunk-EMTCZG5I.mjs";import{a as s}from"./chunk-E66B27AL.mjs";u();import a from"node:path";var b=`${h}
|
|
9
9
|
- project facts (stack/commands): see \`PRJCT.md\``,P=`${l}
|
|
10
10
|
${b}
|
|
11
11
|
${c}
|
|
@@ -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 u,e as c}from"./chunk-
|
|
8
|
+
import{a as u,e as c}from"./chunk-EMTCZG5I.mjs";import{a as r}from"./chunk-E66B27AL.mjs";c();function g(){return"---"}r(g,"mdHeader");function a(){return`---
|
|
9
9
|
prjct v${u()}`}r(a,"mdFooter");function f(...n){return m(g(),...n.filter(Boolean),a())}r(f,"mdOutput");function d(n,t){let i=`| ${n.join(" | ")} |`,e=`|${n.map(()=>"---").join("|")}|`,o=t.map(s=>`| ${s.join(" | ")} |`);return[i,e,...o].join(`
|
|
10
10
|
`)}r(d,"mdTable");function l(n,t,i=3){return`### ${n}
|
|
11
11
|
${t}`}r(l,"mdSection");function $(n,t=!1){return n.map((i,e)=>t?`${e+1}. ${i}`:`- ${i}`).join(`
|
|
@@ -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 r,g as o}from"./chunk-
|
|
8
|
+
import{c as r,g as o}from"./chunk-JUZ5LNDI.mjs";import{a as i}from"./chunk-E66B27AL.mjs";var s=8;function g(t,e,n=s){return o(r(t,e,n).files)}i(g,"rankLikelyFiles");function u(t,e){let n=r(t,e,s);return n.files.length===0?null:n.agentBlock||null}i(u,"buildIndexedFileCue");export{g as a,u as b};
|
|
@@ -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{
|
|
8
|
+
import{k as c,l as r,o as d}from"./chunk-UH4MD3F3.mjs";import{a as u}from"./chunk-E66B27AL.mjs";d();import p from"node:fs/promises";import l from"node:os";import n from"node:path";var k=[{value:"web-app",title:"Web Application",description:"React, Vue, Angular, Next.js, etc."},{value:"api-backend",title:"API / Backend Service",description:"Express, Hono, FastAPI, etc."},{value:"fullstack",title:"Full-Stack (Monorepo)",description:"Frontend + Backend in one repo"},{value:"cli-tool",title:"CLI Tool",description:"Command-line application"},{value:"library",title:"Library / Package",description:"Reusable npm/pip/cargo package"},{value:"monorepo",title:"Monorepo (Multiple Projects)",description:"Turborepo, Nx, Lerna, etc."}],h=[{value:"claude",title:"Claude Code",description:"Anthropic's Claude in VS Code/CLI"},{value:"cursor",title:"Cursor",description:"AI-first code editor"},{value:"copilot",title:"GitHub Copilot",description:"GitHub's AI pair programmer"},{value:"gemini",title:"Gemini CLI",description:"Google's Gemini in terminal"},{value:"codex",title:"OpenAI Codex",description:"OpenAI's coding agent in terminal"},{value:"opencode",title:"OpenCode",description:"Open-source terminal coding agent"},{value:"pi",title:"Pi",description:"Minimal terminal coding harness (skills + AGENTS.md)"},{value:"qwen-code",title:"Qwen Code",description:"Qwen-family coding runtime"},{value:"goose",title:"Goose",description:"Open-source coding agent with extensions"},{value:"aider",title:"Aider",description:"Terminal pair-programming agent"},{value:"cline",title:"Cline",description:"VS Code coding agent"},{value:"roo-code",title:"Roo Code",description:"VS Code coding agent with MCP"},{value:"continue",title:"Continue",description:"IDE assistant with MCP config"},{value:"kiro",title:"Kiro",description:"Agentic IDE with steering docs"},{value:"zed",title:"Zed",description:"Editor agent with ACP support"}];async function y(t){try{let e=await p.readdir(t);if(e.includes("turbo.json")||e.includes("lerna.json")||e.includes("nx.json"))return"monorepo";if(e.includes("package.json")){let a=n.join(t,"package.json"),s=JSON.parse(await p.readFile(a,"utf-8")),i={...s.dependencies,...s.devDependencies};if(s.bin)return"cli-tool";if(s.main&&!i.react&&!i.vue&&!i.angular&&!i.express&&!i.hono)return"library";if((i.react||i.vue)&&(i.express||i.hono||i.fastify))return"fullstack";if(i.react||i.vue||i["@angular/core"]||i.next||i.nuxt)return"web-app";if(i.express||i.hono||i.fastify||i.koa||i.nestjs)return"api-backend"}return e.includes("pyproject.toml")||e.includes("setup.py")?e.some(s=>["main.py","app.py","server.py"].includes(s))?"api-backend":"library":e.includes("go.mod")?e.includes("main.go")?"cli-tool":"library":e.includes("Cargo.toml")?"cli-tool":"unknown"}catch{return"unknown"}}u(y,"detectProjectType");async function v(t){let e=[];await r(n.join(l.homedir(),".claude"))&&e.push("claude"),await c(n.join(t,".cursorrules"))&&e.push("cursor"),await c(n.join(t,".github","copilot-instructions.md"))&&e.push("copilot"),await r(n.join(l.homedir(),".gemini"))&&e.push("gemini"),await r(n.join(l.homedir(),".gemini","antigravity"))&&e.push("antigravity"),await r(n.join(t,".opencode"))&&e.push("opencode"),(await r(n.join(t,".pi"))||await r(n.join(l.homedir(),".pi")))&&e.push("pi"),await r(n.join(t,".qwen"))&&e.push("qwen-code"),await r(n.join(t,".goose"))&&e.push("goose"),(await c(n.join(t,".aider.conf.yml"))||await c(n.join(t,".aider.conf.yaml")))&&e.push("aider"),(await r(n.join(t,".cline"))||await r(n.join(t,".clinerules"))||await c(n.join(t,".clinerules")))&&e.push("cline"),await r(n.join(t,".roo"))&&e.push("roo-code"),await r(n.join(t,".continue"))&&e.push("continue"),await r(n.join(t,".kiro"))&&e.push("kiro"),await r(n.join(t,".zed"))&&e.push("zed");try{let{execAsync:a}=await import("./exec-2P5VOBHM.mjs");await a("which codex"),e.push("codex")}catch{await r(n.join(l.homedir(),".codex"))&&e.push("codex")}return e}u(v,"detectInstalledAgents");async function x(t){let e={language:"Unknown",technologies:[]};try{let a=await p.readdir(t);if(a.includes("package.json")){let s=n.join(t,"package.json"),i=JSON.parse(await p.readFile(s,"utf-8")),o={...i.dependencies,...i.devDependencies};e.language=o.typescript?"TypeScript":"JavaScript",o.next?e.framework="Next.js":o.nuxt?e.framework="Nuxt":o.react?e.framework="React":o.vue?e.framework="Vue":o["@angular/core"]?e.framework="Angular":o.express?e.framework="Express":o.hono?e.framework="Hono":o.fastify?e.framework="Fastify":(o.nestjs||o["@nestjs/core"])&&(e.framework="NestJS"),o.bun||o["@types/bun"]||i.engines?.bun?e.runtime="Bun":e.runtime="Node.js",a.includes("bun.lockb")?e.packageManager="Bun":a.includes("pnpm-lock.yaml")?e.packageManager="pnpm":a.includes("yarn.lock")?e.packageManager="Yarn":a.includes("package-lock.json")&&(e.packageManager="npm"),(o.prisma||o["@prisma/client"])&&e.technologies.push("Prisma"),(o.drizzle||o["drizzle-orm"])&&e.technologies.push("Drizzle"),o.tailwindcss&&e.technologies.push("Tailwind CSS"),o.zod&&e.technologies.push("Zod"),(o.trpc||o["@trpc/server"])&&e.technologies.push("tRPC")}else a.includes("pyproject.toml")||a.includes("requirements.txt")?e.language="Python":a.includes("go.mod")?e.language="Go":a.includes("Cargo.toml")?e.language="Rust":(a.includes("pom.xml")||a.includes("build.gradle"))&&(e.language="Java");return e}catch{return e}}u(x,"detectStack");export{k as a,h as b,y as c,v as d,x as e};
|
|
@@ -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 h}from"./chunk-GVNMXVVA.mjs";import{b as k}from"./chunk-
|
|
8
|
+
import{a as h}from"./chunk-GVNMXVVA.mjs";import{b as k}from"./chunk-4KVPAHFV.mjs";import{a as i}from"./chunk-E66B27AL.mjs";var _=[{name:"sk-\u2026 token",re:/\bsk-[A-Za-z0-9_-]{16,}/},{name:"prjct live token",re:/\bprjct_sk_(?:live|test)_[A-Za-z0-9_-]{8,}/},{name:"GitHub PAT",re:/\bghp_[A-Za-z0-9]{30,}/},{name:"GitHub server PAT",re:/\bghs_[A-Za-z0-9]{30,}/},{name:"GitHub fine-grained PAT",re:/\bgithub_pat_[A-Za-z0-9_]{20,}/},{name:"AWS access key",re:/\bAKIA[0-9A-Z]{16}\b/},{name:"Slack token",re:/\bxox[abps]-[A-Za-z0-9-]{10,}/},{name:"Supabase access token",re:/\bsbp_[A-Za-z0-9]{20,}/},{name:"OpenAI project key",re:/\bsk-proj-[A-Za-z0-9_-]{20,}/},{name:"bearer JWT-ish",re:/\beyJ[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}\b/},{name:"PEM private key",re:/-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----/}];function p(n){if(!n)return[];let o=[];for(let{name:e,re:s}of _)s.test(n)&&o.push(e);return o}i(p,"scanForSecrets");function A(n,o=2e5){let e=Math.max(0,o),s=Math.ceil(e/2),r=Math.floor(e/2),t={head:"",tail:"",full:"",totalChars:0,hasPart:!1},c=i(a=>{if(!a||e===0)return;let l=`${t.hasPart?`
|
|
9
9
|
`:""}${a}`;t.hasPart=!0,t.totalChars+=l.length,t.full!==null&&(t.totalChars<=e?t.full+=l:t.full=null),t.head.length<s&&(t.head+=l.slice(0,s-t.head.length)),r>0&&(t.tail=l.length>=r?l.slice(-r):`${t.tail}${l}`.slice(-r))},"push"),u=i((a,l)=>{if(!(l>8)){if(typeof a=="string"){c(a);return}if(Array.isArray(a)){for(let f of a)u(f,l+1);return}if(a&&typeof a=="object")for(let[f,d]of Object.entries(a))/token|secret|password|api[_-]?key|authorization/i.test(f)&&typeof d=="string"?c(`${f}=${d}`):u(d,l+1)}},"walk");return u(n,0),t.full!==null?t.full:t.totalChars>e?`${t.head}
|
|
10
10
|
${t.tail}`:t.head}i(A,"flattenToolInputText");var m=64*1024,T=512;function y(n,o){if(!n)return;if(n.length<=2e5){for(let r of p(A(n)))o.add(r);return}let e=m-T,s=Array.from({length:Math.ceil(n.length/e)},(r,t)=>t*e);for(let r of s){let t=Math.min(n.length,r+m);for(let c of p(n.slice(r,t)))o.add(c);if(t===n.length)break}}i(y,"addSecretHits");function b(n,o){let e=[n],s=new WeakSet;for(;e.length>0;){let r=e.pop();if(typeof r=="string"){y(r,o);continue}if(!r||typeof r!="object"||s.has(r))continue;if(s.add(r),Array.isArray(r)){for(let c of[...r].reverse())e.push(c);continue}let t=Object.entries(r);for(let[c,u]of t.reverse())/token|secret|password|api[_-]?key|authorization/i.test(c)&&typeof u=="string"?e.push(`${c}=${u}`):e.push(u)}}i(b,"scanUnknownStrings");function w(n){if(n==null)return[];let o=n,e=o.tool_input??o.toolInput??o.parameters??n,s=new Set;b(e,s);for(let r of[o.command,o.prompt,o.content])typeof r=="string"&&y(r,s);return[...s]}i(w,"scanHookToolInput");var g={allow:!0};function x(n,o={}){let e=n??"";if(!e.trim())return{allow:!1,kind:"memory_content",reason:"empty content",hits:[],denyMessage:"refusing empty memory content"};if(o.force)return g;let s=p(e);if(s.length>0){let t=s.join(", ");return{allow:!1,kind:"secrets",reason:"secret-like content",hits:s,denyMessage:`refusing to store memory that looks like a secret (${t}). Re-run with --force if intentional.`}}let r=h(e);if(r.length>0){let t=r.join(", ");return{allow:!1,kind:"prompt_injection",reason:"prompt-injection-like content",hits:r,denyMessage:`refusing to store memory that looks like prompt injection (${t}). Entries are inlined into LLM context \u2014 re-run with --force if intentional.`}}return g}i(x,"evaluateMemoryContent");function $(n){let o=w(n);if(o.length===0)return g;let e=o.join(", ");return{allow:!1,kind:"secrets",reason:"secret pattern in tool input",hits:o,denyMessage:`\u26D4 prjct credential guard: tool input matches secret pattern(s): ${e}. Refusing to run this tool so credentials are not exposed. Remove the secret from the command/content and retry. (This MUST runs on every host \u2014 no PPID / host-env dependency.)`}}i($,"evaluateToolInputSecrets");function M(n,o){let e=k(n,o);return!e.risky||!e.message?{allow:!0,decision:e}:{allow:!1,kind:"package_install",reason:"unknown new packages",hits:e.newPackages,denyMessage:`\u26D4 ${e.message}
|
|
11
11
|
Install denied (strict pack). Verify packages before adding them.`,decision:e}}i(M,"evaluatePackageInstallTrust");function E(n,o){if(n==="imported"){let e=o?.trim()||"workflow rule";return{allow:!1,kind:"workflow_rule",reason:"imported trust_source",hits:["imported"],denyMessage:`Refusing to run imported rule without approval: ${e}. Re-create the rule locally if you trust it.`}}return g}i(E,"evaluateWorkflowRuleExecutable");function Z(n){return n==="imported"}i(Z,"isImportedWorkflowTrust");export{x as a,$ as b,M as c,E as d,Z as e};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __createRequire } from 'module';
|
|
3
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
4
|
+
import { dirname as __pathDirname } from 'path';
|
|
5
|
+
const require = __createRequire(import.meta.url);
|
|
6
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = __pathDirname(__filename);
|
|
8
|
+
import{a as q}from"./chunk-UA4Z5TGG.mjs";import{e as p,g as P}from"./chunk-KG7Z6OMK.mjs";import{d as H,e as g,f as B,h as Q}from"./chunk-JAMSIKDE.mjs";import{a as c}from"./chunk-E66B27AL.mjs";P();P();function l(t,s,...e){try{return Number(p.get(t,s,...e)?.value??0)}catch{return 0}}c(l,"count");function E(t,s,...e){try{return p.query(t,s,...e)}catch{return[]}}c(E,"query");Q();var j="memory.task_tokens",_=1e7;function pt(t,s,e,r,n){if(!s||e+r<=0)return;let i=5e7;if(e>i||r>i)return;let a=e>_||r>_,u=Math.min(Math.round(e),_),d=Math.min(Math.round(r),_);a&&(n={...n,isEstimated:!0});try{p.appendEvent(t,j,{taskId:s,tokensIn:u,tokensOut:d,...n?.description?{description:n.description}:{},...n?.agent?{agent:n.agent}:{},...n?.model?{model:n.model}:{},...n?.runtime?{runtime:n.runtime}:{},...n?.isEstimated!==void 0?{isEstimated:n.isEstimated}:{},...n?.source?{source:n.source}:{}},s)}catch{}if(u>=0&&u<=_&&d>=0&&d<=_)try{p.run(t,"UPDATE tasks SET tokens_in = ?, tokens_out = ? WHERE id = ?",u,d,s)}catch{}try{let C=n?.source??"cli",S=`${s}:${C}`,h=Date.now();p.run(t,`INSERT INTO token_usage
|
|
9
|
+
(id, work_cycle_id, event_key, source, is_estimated, input_tokens, output_tokens, model_id, description, measured_at, created_at)
|
|
10
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
11
|
+
ON CONFLICT(event_key) DO UPDATE SET
|
|
12
|
+
input_tokens = excluded.input_tokens,
|
|
13
|
+
output_tokens = excluded.output_tokens,
|
|
14
|
+
is_estimated = excluded.is_estimated,
|
|
15
|
+
model_id = excluded.model_id,
|
|
16
|
+
description = COALESCE(excluded.description, token_usage.description),
|
|
17
|
+
measured_at = excluded.measured_at`,S,s,S,C,n?.isEstimated?1:0,u,d,n?.model??null,n?.description??null,h,h)}catch{}}c(pt,"recordTaskTokenUsage");function I(t,s){let e=Date.parse(s),r=E(t,`SELECT work_cycle_id, input_tokens, output_tokens, is_estimated, description
|
|
18
|
+
FROM token_usage
|
|
19
|
+
WHERE measured_at >= ?
|
|
20
|
+
ORDER BY measured_at DESC`,Number.isFinite(e)?e:0),n=new Map;for(let i of r){let a=i.work_cycle_id;if(!a||n.has(a))continue;let u=g(i.input_tokens)??0,d=g(i.output_tokens)??0;u+d<=0||n.set(a,{id:a,description:i.description??a,status:i.is_estimated?"estimated":"measured",tokensIn:u,tokensOut:d,tokensTotal:u+d,minutes:null})}return n}c(I,"measuredCyclesFromTokenUsage");function tt(t,s){let e=H(s),r=new Date().toISOString(),n=E(t,`SELECT id, description, status, started_at, completed_at, shipped_at, tokens_in, tokens_out
|
|
21
|
+
FROM tasks
|
|
22
|
+
WHERE COALESCE(completed_at, shipped_at, started_at) >= ?
|
|
23
|
+
ORDER BY COALESCE(completed_at, shipped_at, started_at) DESC`,e),i=new Map;for(let o of n.map(nt))o&&i.set(o.id,o);for(let[o,m]of I(t,e)){let b=i.get(o);i.set(o,{...m,description:b?.description??m.description,minutes:b?.minutes??m.minutes})}let a=[...i.values()].sort((o,m)=>m.tokensTotal-o.tokensTotal),u=T(t,"memory.task_started",e),d=T(t,"memory.status.changed",e),R=T(t,"memory.feature_shipped",e),C=T(t,"sync",e),S=l(t,"SELECT COUNT(*) AS value FROM events WHERE type >= ? AND type < ? AND timestamp >= ?","memory.","memory/",e),h=T(t,"memory.post_edit",e),Y=l(t,"SELECT COUNT(*) AS value FROM agent_sessions WHERE started_at >= ?",e),$=(()=>{try{return l(t,"SELECT COUNT(*) AS value FROM cli_sessions WHERE created_at >= ?",e)}catch{return 0}})(),A=Y+$,w=l(t,"SELECT COUNT(DISTINCT memory_id) AS value FROM memory_surface_log WHERE created_at >= ?",e),z=l(t,`SELECT COUNT(DISTINCT s.memory_id) AS value
|
|
24
|
+
FROM memory_surface_log s
|
|
25
|
+
INNER JOIN memory_usefulness u ON u.memory_id = s.memory_id
|
|
26
|
+
WHERE s.created_at >= ?
|
|
27
|
+
AND u.score > 0`,e),J=(()=>{try{return l(t,`SELECT COUNT(DISTINCT t.id) AS value
|
|
28
|
+
FROM tasks t
|
|
29
|
+
INNER JOIN agent_sessions a ON a.task_id = t.id
|
|
30
|
+
WHERE (t.completed_at IS NOT NULL OR t.shipped_at IS NOT NULL)
|
|
31
|
+
AND COALESCE(t.completed_at, t.shipped_at, t.started_at) >= ?`,e)}catch{return 0}})(),V=l(t,"SELECT COUNT(*) AS value FROM context_zone_events WHERE timestamp >= ?",e),G=l(t,"SELECT COUNT(*) AS value FROM context_compactions WHERE timestamp >= ?",e),D=K(t,"command_duration",e),x=K(t,"startup_time",e),N=st(t,e),W=a.reduce((o,m)=>o+m.tokensIn,0),L=a.reduce((o,m)=>o+m.tokensOut,0),f=Math.max(n.length,u,R),y=n.filter(o=>o.completed_at||o.shipped_at),v=new Set(I(t,e).keys()),X=(()=>{try{return new Set(p.query(t,`SELECT DISTINCT task_id AS task_id FROM agent_sessions
|
|
32
|
+
WHERE task_id IS NOT NULL AND started_at >= ?`,e).map(o=>o.task_id).filter(Boolean))}catch{return new Set}})(),O=y.filter(o=>{let m=Number(o.tokens_in??0),b=Number(o.tokens_out??0);return m+b>0||v.has(o.id)}).length,U=y.filter(o=>Number(o.tokens_in??0)+Number(o.tokens_out??0)>0||v.has(o.id)||X.has(o.id)).length,M=U>0?U:y.length>0?y.length:n.length>0?n.length:f,F=Math.max(O,a.length),k=[];f===0?k.push("No work cycles were found in tasks or historical events for this window."):n.length===0&&k.push("Work history was rescued from events, but normalized task rows are missing."),M>0&&O===0&&F===0&&k.push("Work cycles exist, but none have exact token totals. Capture exact or estimated usage at task close."),A===0&&k.push("No agent sessions were recorded. Session-level model/runtime/cost cannot be attributed yet."),w===0&&k.push("No surfaced context was logged in this window, so reuse and re-exploration waste cannot be proven.");let Z=(()=>{try{return p.query(t,`SELECT COALESCE(model_id, 'unknown') AS model,
|
|
33
|
+
SUM(input_tokens) AS t_in, SUM(output_tokens) AS t_out
|
|
34
|
+
FROM token_usage
|
|
35
|
+
WHERE model_id IS NOT NULL AND measured_at >= ?
|
|
36
|
+
GROUP BY COALESCE(model_id, 'unknown')
|
|
37
|
+
ORDER BY t_in + t_out DESC`,Date.parse(e)).map(o=>({model:o.model,tokensIn:o.t_in,tokensOut:o.t_out}))}catch{return[]}})();return{id:`work-cost-${s}d`,windowDays:s,generatedAt:r,workCycles:n.length>0?n.length:f,knownTokenCycles:F,tokensIn:W,tokensOut:L,tokensTotal:W+L,tokenCoveragePercent:M===0?0:Math.min(100,Math.round(Math.max(O,a.filter(o=>v.has(o.id)||o.tokensTotal>0).length)/M*100)),measuredSessions:Math.max(A,J),surfacedContext:w,usefulContext:z,contextZoneEvents:V,compactions:G,commandSamples:D.samples,commandMs:Math.round(D.total??0),avgStartupMs:x.average===null?null:Math.round(x.average),mostExpensive:a.slice(0,8),byModel:Z,historicalRescue:{inferredWorkCycles:f,taskTableCycles:n.length,eventWorkStarts:u,eventStatusChanges:d,eventShips:R,syncRuns:C,memoryEvents:S,postEditEvents:h,declaredTokenMentions:N.length,declaredTokensTotal:N.reduce((o,m)=>o+m.tokens,0),topDeclaredTokenMentions:N.slice(0,5)},gaps:k}}c(tt,"buildWorkCostSnapshot");async function kt(t,s=[7,30,90]){let e=s.map(r=>tt(t,r));for(let r of e)await q({projectId:t,entityType:"work_cost_snapshots",entityId:r.id,eventType:"upsert",data:et(r)});return e}c(kt,"publishWorkCostSnapshots");function et(t){return{...t,mostExpensive:t.mostExpensive.map(s=>({...s,description:"[redacted]"})),historicalRescue:{...t.historicalRescue,topDeclaredTokenMentions:t.historicalRescue.topDeclaredTokenMentions.map(s=>({tokens:s.tokens,sourceType:s.sourceType,occurredAt:s.occurredAt,summary:"[redacted]"}))}}}c(et,"redactSnapshotForCloud");function nt(t){let s=g(t.tokens_in)??0,e=g(t.tokens_out)??0,r=s+e;return r<=0?null:{id:t.id,description:t.description,status:t.status,tokensIn:s,tokensOut:e,tokensTotal:r,minutes:B(t.started_at,t.completed_at??t.shipped_at)}}c(nt,"toCostTask");function st(t,s){let e=E(t,`SELECT type, data, timestamp
|
|
38
|
+
FROM events
|
|
39
|
+
WHERE timestamp >= ?
|
|
40
|
+
AND type >= ?
|
|
41
|
+
AND type < ?
|
|
42
|
+
AND json_valid(data)
|
|
43
|
+
AND json_extract(data, '$.content') LIKE '%token%'
|
|
44
|
+
ORDER BY timestamp DESC
|
|
45
|
+
LIMIT 200`,s,"memory.remember.","memory.remember/"),r=[];for(let n of e){let i=(()=>{try{let u=JSON.parse(n.data);return typeof u.content=="string"?u.content:""}catch{return""}})();if(!i)continue;let a=ot(i);for(let u of a)r.push({tokens:u,sourceType:n.type,occurredAt:n.timestamp,summary:rt(i)})}return r.sort((n,i)=>i.tokens-n.tokens)}c(st,"declaredTokenMentions");function ot(t){let s=[],e=/\b(\d+(?:\.\d+)?)\s*([kKmM])?\s*(?:tokens?|tok)\b/g;for(let r of t.matchAll(e)){let n=Number.parseFloat(r[1]??"0"),i=r[2]?.toLowerCase();if(!Number.isFinite(n)||n<=0)continue;let a=i==="m"?1e6:i==="k"?1e3:1;s.push(Math.round(n*a))}return s}c(ot,"extractTokenCounts");function rt(t){let s=t.replace(/\s+/g," ").trim();return s.length<=140?s:`${s.slice(0,137)}...`}c(rt,"summarize");function T(t,s,e){return l(t,"SELECT COUNT(*) AS value FROM events WHERE type = ? AND timestamp >= ?",s,e)}c(T,"eventCount");function K(t,s,e){return E(t,`SELECT COUNT(*) AS samples, COALESCE(SUM(value), 0) AS total, AVG(value) AS average
|
|
46
|
+
FROM perf_samples
|
|
47
|
+
WHERE metric = ? AND timestamp >= ?`,s,e)[0]??{samples:0,total:0,average:null}}c(K,"aggregatePerf");export{pt as a,kt as b};
|
|
@@ -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 O}from"./chunk-
|
|
8
|
+
import{a as O}from"./chunk-66GE3IHX.mjs";import{a as A}from"./chunk-J6TAD3OZ.mjs";import{a as h}from"./chunk-T2FCU3ZS.mjs";import{c as I}from"./chunk-KOCROTRM.mjs";import{a as P,h as tt}from"./chunk-UUULLTQV.mjs";import{a as w,b,c as S}from"./chunk-OIU4Y5WL.mjs";import{c as E}from"./chunk-TYEAIX3X.mjs";import{b as R}from"./chunk-6UH244CC.mjs";import{a as m}from"./chunk-TG5CQJD5.mjs";import{c as x}from"./chunk-M5E2YOZ4.mjs";import{b as N}from"./chunk-6RLCUGGG.mjs";import{a as T,b as j,e as p,g as _}from"./chunk-KG7Z6OMK.mjs";import{b as D,h as Z}from"./chunk-JAMSIKDE.mjs";import{a as d}from"./chunk-E66B27AL.mjs";_();function g(e,t,n){return e[t]??e[n]??""}d(g,"str");var L={async upsert(e,t){let n=g(t,"id","id"),r=g(t,"entity_type","entityType"),s=g(t,"entity_id","entityId");if(!n||!r||!s||p.get(e,"SELECT id FROM archives WHERE entity_type = ? AND entity_id = ? LIMIT 1",r,s))return;let c=typeof t.entity_data=="string"?t.entity_data:t.entity_data!=null?JSON.stringify(t.entity_data):"{}",o=g(t,"archived_at","archivedAt")||g(t,"created_at","createdAt")||new Date().toISOString(),a=t.summary??null,u=g(t,"reason","reason")||"sync";try{p.run(e,`INSERT OR IGNORE INTO archives
|
|
9
9
|
(id, entity_type, entity_id, entity_data, summary, archived_at, reason)
|
|
10
10
|
VALUES (?, ?, ?, ?, ?, ?, ?)`,n,r,s,c,a,o,u)}catch{}},async delete(e,t){}};_();var C={async upsert(e,t){let n=t.name||"";if(!n)return;let r=t.description??null,s=et(t.metadata),i=new Date().toISOString(),c=p.get(e,"SELECT id, is_builtin FROM custom_workflows WHERE name = ?",n);if(c){if(c.is_builtin===1)return;p.run(e,"UPDATE custom_workflows SET description = ?, metadata = ?, updated_at = ? WHERE name = ? AND is_builtin = 0",r,s,i,n);return}p.run(e,`INSERT INTO custom_workflows (name, description, created_at, updated_at, is_builtin, enabled, metadata)
|
|
11
11
|
VALUES (?, ?, ?, ?, 0, 0, ?)`,n,r,t.created_at||i,i,s)},async delete(e,t){}};function et(e){if(e==null)return null;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return null}}d(et,"serializeMetadata");var M={async upsert(e,t){let n=t.id||"";if(!n)return;let r=t.title||t.text||"";if(!r.trim())return;let s=t.priority||"medium",i=t.status||"active";await O.upsertIdea(e,{id:n,text:r,priority:s,status:i==="archived"?"archived":"pending",addedAt:t.created_at??t.addedAt??new Date().toISOString()})},async delete(e,t){}};j();tt();_();function nt(e){if(!e)return{};if(typeof e=="string")try{return JSON.parse(e)}catch{return{}}return typeof e=="object"?e:{}}d(nt,"asTags");function f(e,t,n){return e[t]??e[n]??""}d(f,"field");var W={async upsert(e,t){let n=f(t,"content","content"),r=f(t,"type","type");if(!n||!r)return;let s=nt(t.tags),i=f(t,"provenance","provenance")||"declared",c=t.source??null,o=T(n);if(p.get(e,"SELECT id FROM memory_entries WHERE content_hash = ? AND type = ? AND deleted_at IS NULL LIMIT 1",o,r))return;let u=t.created_at||t.createdAt||new Date().toISOString();p.appendEvent(e,`memory.${P}${r}`,{content:n,tags:s,source:c,provenance:i,content_hash:o,project_id:e,created_at:u})},async delete(e,t){let n=f(t,"id","id"),r=f(t,"content","content"),s=f(t,"type","type"),i=[];if(/^mem_\d+$/.test(n)&&i.push(n),r&&s){let o=T(r),a=p.query(e,"SELECT id FROM memory_entries WHERE content_hash = ? AND type = ? AND deleted_at IS NULL",o,s);i.push(...a.map(u=>u.id))}let c=[...new Set(i)];for(let o of c){let a=o.match(/^mem_(\d+)$/)?.[1];a&&p.run(e,"UPDATE events SET type = ? WHERE id = ?","memory.deleted.context-quality",Number(a)),p.run(e,"UPDATE memory_entries SET deleted_at = ? WHERE id = ?",Date.now(),o),p.run(e,"DELETE FROM memory_embeddings WHERE memory_id = ?",o)}}};var F={async upsert(e,t){let n=t.description||"";if(!n.trim())return;let r=t.id||"";if(!r){await h.addTask(e,{description:n,priority:t.priority||"medium",type:t.type||"feature",section:t.section||"backlog"});return}await h.upsertTask(e,{id:r,description:n,...t.priority?{priority:t.priority}:{},...t.type?{type:t.type}:{},...t.section?{section:t.section}:{}})},async delete(e,t){}};var k={async upsert(e,t){await A.addShipped(e,{name:t.name||t.title||"",version:t.version||"",description:t.description||""},t.created_at||t.shippedAt||t.shipped_at)},async delete(e,t){}};var U={async upsert(e,t){let n=t.id||"";n&&I.applyRemote(e,{id:n,title:t.title,status:t.status,content:t.content??{},tags:t.tags,created_at:t.created_at,updated_at:t.updated_at})},async delete(e,t){}};var $={async upsert(e,t){let n=t.id||"";if(!n)return;let r=t.status||"";if(r==="completed"||r==="shipped"){await R.update(e,s=>s.currentTask?.id===n?{...s,currentTask:null}:s);return}if(r==="active"||t.started_at||t.startedAt){await R.update(e,s=>({...s,currentTask:{id:n,description:t.description,startedAt:t.started_at||t.startedAt||new Date().toISOString(),sessionId:t.session_id||t.sessionId||""}}));return}(t.description||"").trim()&&await h.upsertTask(e,{id:n,description:t.description,...t.priority?{priority:t.priority}:{},...t.type?{type:t.type}:{}})},async delete(e,t){}};_();var q={async upsert(e,t){let n=Number(t.id);if(!Number.isSafeInteger(n)||n<=0)return;let r=-n;p.transaction(e,s=>{s.prepare(`INSERT INTO workflow_rules
|
|
@@ -28,4 +28,4 @@ import{a as O}from"./chunk-HZIORCPO.mjs";import{a as A}from"./chunk-WDGDFXSB.mjs
|
|
|
28
28
|
ON CONFLICT(entity_type, entity_id) DO UPDATE SET
|
|
29
29
|
content_hash = excluded.content_hash,
|
|
30
30
|
applied_at = excluded.applied_at,
|
|
31
|
-
created_at = COALESCE(excluded.created_at, sync_applied_hashes.created_at)`,t,n,r,D(),s??null)}catch{}}d(B,"recordApplied");function V(e,t,n){if(!(!t||!n))try{p.run(e,"DELETE FROM sync_applied_hashes WHERE entity_type = ? AND entity_id = ?",t,n)}catch{}}d(V,"clearApplied");var G=new Set;function rt(e){if(G.has(e))return;G.add(e);let n=Y.has(e)?"CLI does not track this entity locally yet \u2014 see Phase 2 spec":"no local handler registered";console.warn(`[sync] apply skipped: entity_type='${e}' (${n}). code=no_local_handler`)}d(rt,"warnNoLocalHandler");var J=new Set;function st(e){J.has(e)||(J.add(e),console.warn(`[sync] inbound '${e}' event has no created_at \u2014 origin chronology cannot be preserved. The producer should include created_at in its payload. code=missing_origin_created_at`))}d(st,"warnMissingCreatedAt");function it(e){let t=e.data??{},n=e.content_hash??e.contentHash;if(e.entity_type){let c=(e.event_type||"upsert")==="delete"?"delete":"upsert";return{entityType:e.entity_type,eventType:c,data:t,contentHash:n}}if(e.entityType){let c=e.eventType||"upsert";return{entityType:e.entityType,eventType:c==="delete"?"delete":"upsert",data:t,contentHash:n}}let[r,s]=(e.type||"").split("."),i=s==="deleted"||s==="archived"||s==="removed";return{entityType:w(r)||r||"unknown",eventType:i?"delete":"upsert",data:t,contentHash:n}}d(it,"normalizeEventShape");function K(e){return e instanceof Error?e.message:e&&typeof e=="object"&&"message"in e?String(e.message):"Unknown error"}d(K,"errorMessage");function X(e){if(e&&typeof e=="object"&&"code"in e)return e.code}d(X,"errorCode");var H=class{static{d(this,"SyncManager")}async hasAuth(){return await E.hasAuth()}async getStatus(t){if(!await this.hasAuth())return null;try{return await S.getStatus(t)}catch{return null}}async sync(t,n){if(!await this.hasAuth())return{success:!0,skipped:!0,reason:"no_auth"};let r={success:!0,skipped:!1};try{await A.republishShips(t)}catch{}let s=await this.push(t,n);s.success&&!s.skipped&&(r.pushed={count:s.count||0,syncedAt:s.syncedAt||new Date().toISOString()});let i=await this.pull(t);return i.success&&!i.skipped&&(r.pulled={count:i.count||0,syncedAt:i.syncedAt||new Date().toISOString()}),(!s.success||!i.success)&&(r.success=!1,r.error=s.error||i.error,r.code=s.code||i.code),r}async push(t,n){if(!await this.hasAuth())return{success:!0,skipped:!0,reason:"no_auth"};try{let r=await m.getPending(t),s=n?.include?r.filter(a=>{let u=w(a.entityType)??w(a.type?.split(".")[0]);return u?b(u,n.include):!0}):r;if(s.length===0)return{success:!0,skipped:!0,reason:"no_pending"};let i=await this.createProjectLinkEvent(t),c=i?[i,...s]:s,o=await S.pushEvents(t,c);if(o.success)return await m.clearPending(t),await m.updateLastSync(t),{success:!0,skipped:!1,count:o.processed,syncedAt:o.syncedAt};{let a=o.processed,u=o.errors.length,l=o.errors.map(y=>y.error).join(", ");return{success:!1,skipped:!1,count:a,syncedAt:o.syncedAt,error:`${u} events failed: ${l}`}}}catch(r){return{success:!1,skipped:!1,reason:"error",error:K(r),code:X(r)}}}async pull(t){if(!await this.hasAuth())return{success:!0,skipped:!0,reason:"no_auth"};try{let{syncCursorStorage:n}=await import("./sync-cursor-storage-
|
|
31
|
+
created_at = COALESCE(excluded.created_at, sync_applied_hashes.created_at)`,t,n,r,D(),s??null)}catch{}}d(B,"recordApplied");function V(e,t,n){if(!(!t||!n))try{p.run(e,"DELETE FROM sync_applied_hashes WHERE entity_type = ? AND entity_id = ?",t,n)}catch{}}d(V,"clearApplied");var G=new Set;function rt(e){if(G.has(e))return;G.add(e);let n=Y.has(e)?"CLI does not track this entity locally yet \u2014 see Phase 2 spec":"no local handler registered";console.warn(`[sync] apply skipped: entity_type='${e}' (${n}). code=no_local_handler`)}d(rt,"warnNoLocalHandler");var J=new Set;function st(e){J.has(e)||(J.add(e),console.warn(`[sync] inbound '${e}' event has no created_at \u2014 origin chronology cannot be preserved. The producer should include created_at in its payload. code=missing_origin_created_at`))}d(st,"warnMissingCreatedAt");function it(e){let t=e.data??{},n=e.content_hash??e.contentHash;if(e.entity_type){let c=(e.event_type||"upsert")==="delete"?"delete":"upsert";return{entityType:e.entity_type,eventType:c,data:t,contentHash:n}}if(e.entityType){let c=e.eventType||"upsert";return{entityType:e.entityType,eventType:c==="delete"?"delete":"upsert",data:t,contentHash:n}}let[r,s]=(e.type||"").split("."),i=s==="deleted"||s==="archived"||s==="removed";return{entityType:w(r)||r||"unknown",eventType:i?"delete":"upsert",data:t,contentHash:n}}d(it,"normalizeEventShape");function K(e){return e instanceof Error?e.message:e&&typeof e=="object"&&"message"in e?String(e.message):"Unknown error"}d(K,"errorMessage");function X(e){if(e&&typeof e=="object"&&"code"in e)return e.code}d(X,"errorCode");var H=class{static{d(this,"SyncManager")}async hasAuth(){return await E.hasAuth()}async getStatus(t){if(!await this.hasAuth())return null;try{return await S.getStatus(t)}catch{return null}}async sync(t,n){if(!await this.hasAuth())return{success:!0,skipped:!0,reason:"no_auth"};let r={success:!0,skipped:!1};try{await A.republishShips(t)}catch{}let s=await this.push(t,n);s.success&&!s.skipped&&(r.pushed={count:s.count||0,syncedAt:s.syncedAt||new Date().toISOString()});let i=await this.pull(t);return i.success&&!i.skipped&&(r.pulled={count:i.count||0,syncedAt:i.syncedAt||new Date().toISOString()}),(!s.success||!i.success)&&(r.success=!1,r.error=s.error||i.error,r.code=s.code||i.code),r}async push(t,n){if(!await this.hasAuth())return{success:!0,skipped:!0,reason:"no_auth"};try{let r=await m.getPending(t),s=n?.include?r.filter(a=>{let u=w(a.entityType)??w(a.type?.split(".")[0]);return u?b(u,n.include):!0}):r;if(s.length===0)return{success:!0,skipped:!0,reason:"no_pending"};let i=await this.createProjectLinkEvent(t),c=i?[i,...s]:s,o=await S.pushEvents(t,c);if(o.success)return await m.clearPending(t),await m.updateLastSync(t),{success:!0,skipped:!1,count:o.processed,syncedAt:o.syncedAt};{let a=o.processed,u=o.errors.length,l=o.errors.map(y=>y.error).join(", ");return{success:!1,skipped:!1,count:a,syncedAt:o.syncedAt,error:`${u} events failed: ${l}`}}}catch(r){return{success:!1,skipped:!1,reason:"error",error:K(r),code:X(r)}}}async pull(t){if(!await this.hasAuth())return{success:!0,skipped:!0,reason:"no_auth"};try{let{syncCursorStorage:n}=await import("./sync-cursor-storage-E3LMZISA.mjs"),r=await E.read(),s=r.deviceId??null,i=r.userId??null,o=(s?n.get(t,i,s):null)?.lastEventId??0,a=await S.pullEvents(t,o);if(a.events.length===0)return await m.updateLastSync(t),{success:!0,skipped:!1,count:0,applied:0,syncedAt:a.syncedAt};let u=await this.applyPulledEvents(t,a.events),l=a.events.flatMap(y=>[y.event_id,y.eventId]).filter(y=>typeof y=="number").reduce((y,Q)=>Math.max(y,Q),o);return s&&l>o&&n.advance(t,l,{userId:i,deviceId:s}),await m.updateLastSync(t),{success:!0,skipped:!1,count:a.events.length,applied:u,syncedAt:a.syncedAt}}catch(n){return{success:!1,skipped:!1,reason:"error",error:K(n),code:X(n)}}}async applyPulledEvents(t,n){let r=[];for(let s of n)try{await this.applyEvent(t,s),r.push(s)}catch(i){let c=s.entity_type||s.type||"unknown";console.error(`Failed to apply event ${c}:`,i)}return r.length}async applyRealtimeEvent(t,n){try{let r=await E.read(),s=r.deviceId??null,i=n.origin_device_id??n.originDeviceId;if(s&&i&&i===s)return!1;await this.applyEvent(t,n);let c=typeof n.event_id=="number"?n.event_id:typeof n.eventId=="number"?n.eventId:null;if(c!==null){let{syncCursorStorage:o}=await import("./sync-cursor-storage-E3LMZISA.mjs"),a=r.userId??null,u=r.deviceId??null;if(u){let l=o.get(t,a,u);(!l||c>l.lastEventId)&&o.advance(t,c,{userId:a,deviceId:u})}}return!0}catch(r){return console.error("[realtime] apply failed:",r instanceof Error?r.message:r),!1}}async applyEvent(t,n){let{entityType:r,eventType:s,data:i,contentHash:c}=it(n),o=i.id??"",a=v[r];if(!a){rt(r);return}if(s==="delete"){await a.delete(t,i),o&&V(t,r,o);return}if(!(c&&this.alreadyApplied(t,r,o,c))&&(await a.upsert(t,i),o)){let u=i.created_at??i.createdAt??null;u||st(r);let l=c??x(i);B(t,r,o,l,u)}}alreadyApplied(t,n,r,s){if(!r)return!1;let i=z(t,n,r);return i!==null&&i===s}async createProjectLinkEvent(t){try{let n=await N(t).catch(()=>({}));return{type:"project.updated",path:["project"],data:{id:t,cli_project_id:t,meta:n},timestamp:new Date().toISOString(),projectId:t}}catch{return null}}},ot=new H,ee=ot;export{ee as a};
|
|
@@ -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 y}from"./chunk-QSAA6LZF.mjs";import{e as O}from"./chunk-
|
|
8
|
+
import{a as y}from"./chunk-QSAA6LZF.mjs";import{e as O}from"./chunk-KOGZCFBC.mjs";import{a as s}from"./chunk-E66B27AL.mjs";var q=/(^|\/)(auth|security|crypto|migration|migrations|password|oauth|payment|billing|secret|token|session|rbac|acl)(\/|\.|$)/i;function T(e){return e?.length?e.some(n=>q.test(n)):!1}s(T,"isHotPath");function X(e,n={}){return n.harnessLevel==="H3"||n.harnessKind==="security"||T(n.paths)?"full":e==="trivial"?"skip":e==="normal"?"standard":"full"}s(X,"routeIntensity");function ge(e,n={}){let t=O(e);return{tier:t,intensity:X(t,n)}}s(ge,"intensityFromChangeset");function b(e){let n=e.title.toLowerCase().replace(/[^a-z0-9\s]/g," ").replace(/\s+/g," ").trim().slice(0,120),t=(e.file??"").toLowerCase().replace(/\\/g,"/"),i=e.line&&e.line>0?String(Math.floor(e.line/5)*5):"";return`dna:${Y(`${n}|${t}|${i}`)}`}s(b,"findingDna");function Y(e){return(e.split("").reduce((t,i)=>Math.imul(t^i.charCodeAt(0),16777619),2166136261)>>>0).toString(16).padStart(8,"0")}s(Y,"hash32");function F(e){let n=!!e.file?.trim(),t=typeof e.line=="number"&&e.line>0,i=!!(e.evidence&&e.evidence.trim().length>=12);return n&&t&&i?3:n&&t?2:n?1:0}s(F,"evidenceScore");function _(e){let n=F(e),t=e.severity,i=t==="blocker"&&n<2?"critical":t==="critical"&&n===0?"warning":t,r=i==="warning"||i==="suggestion"?"info":e.status==="info"?"candidate":e.status;return{...e,severity:i,status:r,evidenceScore:n,dna:e.dna??b(e),blast:e.blast??S({...e,severity:i,evidenceScore:n})}}s(_,"applyEvidenceTax");var Q=/\b(prefer[- ]const|use const|should be const|can be const|const instead|instead of let|never reassigned|not reassigned|let\s*→\s*const|change let to const|let is unnecessary|why let|por qu[eé] let)\b/i;function Z(e){return Q.test(e)}s(Z,"isPreferConstClaim");function fe(e){let n=`${e.title}
|
|
9
9
|
${e.evidence??""}`;if(!Z(n))return e;if(F(e)<3){let i="[CONST-ONLY TAX: include file:line + snippet and propose an immutable rewrite; title-only findings are noise]";return _({...e,severity:"suggestion",status:"info",evidence:e.evidence?`${e.evidence}
|
|
10
10
|
${i}`:i})}return e}s(fe,"applyMechanicalStyleRefute");var R={blocker:100,critical:70,warning:20,suggestion:5};function S(e){return(R[e.severity]??0)+(e.evidenceScore??0)*5+(e.file&&T([e.file])?25:0)+(e.status==="stands"?10:0)+(e.status==="open"?15:0)}s(S,"blastRank");function N(e,n){return[...e].filter(t=>f(t.severity)&&(t.status==="stands"||t.status==="candidate"||t.status==="open"||t.status==="fixed")&&A(t.file,n)).sort((t,i)=>(i.blast??S(i))-(t.blast??S(t)))}s(N,"rankFindingsForFix");function f(e){return e==="blocker"||e==="critical"}s(f,"isActionableSeverity");function j(e){let n=_(e);return f(n.severity)?n.status==="info"?{...n,status:"candidate"}:n:{...n,status:"info"}}s(j,"applySeverityFloor");function pe(e){return e.map(j)}s(pe,"applySeverityFloorAll");function ee(e,n,t,i){let r=n.dna;return r?{ghosts:(e.ghosts.find(d=>d.dna===r)?e.ghosts.map(d=>d.dna===r?{...d,times:d.times+1,lastSeenAt:t,lastReason:i??d.lastReason,title:n.title||d.title}:d):[...e.ghosts,{dna:r,title:n.title,times:1,lastSeenAt:t,lastReason:i}]).sort((d,p)=>p.times-d.times).slice(0,200),updatedAt:t}:e}s(ee,"markGhost");function me(e,n,t){return n.reduce((i,r)=>r.status==="refuted"&&r.dna?ee(i,r,t,"refuted by panel"):i,e)}s(me,"recordRefutedAsGhosts");function he(e,n){if(!n?.ghosts.length)return e;let t=new Map(n.ghosts.map(i=>[i.dna,i]));return e.map(i=>{let r=i.dna??b(i),o=t.get(r);return o?{...i,dna:r,knownFalsePositive:!0,evidence:i.evidence?`${i.evidence} [GHOST: refuted ${o.times}\xD7 in this project]`:`[GHOST: refuted ${o.times}\xD7 here \u2014 challenge hard]`}:{...i,dna:r}})}s(he,"applyGhostFilter");function ve(e,n,t=se){let i=new Map,r=s(c=>{for(let m of c.findings){let h=b(m),v=i.get(h)??[];v.push({role:c.role,raw:m}),i.set(h,v)}},"ingest");r({...e,role:"red"}),r({...n,role:"blue"});let o=[...i].map(([c,m])=>{let h=new Set(m.map(l=>l.role)),v=h.has("red"),P=h.has("blue"),H=m.filter(l=>l.role==="red"),V=m.filter(l=>l.role==="blue"),x=[...m].sort((l,B)=>{let W=R[l.raw.severity]+F(l.raw)*5;return R[B.raw.severity]+F(B.raw)*5-W})[0].raw,z=[...h],M=H.some(l=>f(l.raw.severity)),U=V.some(l=>f(l.raw.severity)),K=v&&P?M!==U?"contradicted":"agreed":v?"onlyRed":"onlyBlue";return{finding:j({id:t(),severity:x.severity,status:"candidate",title:x.title,file:x.file,line:x.line,evidence:x.evidence,judge:x.judge??[...h].join("+"),role:v&&P?void 0:v?"red":"blue",dna:c,agreedBy:z}),outcome:K}}),a=o.map(({finding:c})=>c),u=o.filter(({outcome:c})=>c==="agreed").length,d=o.filter(({outcome:c})=>c==="onlyRed").length,p=o.filter(({outcome:c})=>c==="onlyBlue").length,g=o.filter(({outcome:c})=>c==="contradicted").length,C=g>0;return{findings:a,agreed:u,onlyRed:d,onlyBlue:p,contradicted:g,shouldEscalate:C,escalateReason:C?`${g} dual-blind contradiction(s): red says actionable, blue says not (or reverse). Do not tie-break \u2014 escalate to user.`:""}}s(ve,"mergeDualJudges");function D(e){return e==="full"?3:1}s(D,"refutePanelSize");function te(e,n){let t=e??[];if(t.length===0)return"stands";if(n===1)return t[0]==="refuted"?"refuted":"stands";let i=[...t];for(;i.length<3;)i.push("stands");return i.slice(0,3).filter(o=>o==="refuted").length>=2?"refuted":"stands"}s(te,"resolveRefuteVotes");function xe(e,n,t){let i=D(t);return e.map(r=>{if(r.status==="info"||r.status==="refuted"||r.status==="verified")return r;if(!f(r.severity))return{...r,status:"info"};if(r.status!=="candidate"&&r.status!=="stands")return r;let o=n[r.id],a=te(o,i);return{...r,status:a,refuteVotes:o??r.refuteVotes}})}s(xe,"applyBatchRefutation");function k(e){return e.filter(n=>f(n.severity)&&(n.status==="stands"||n.status==="candidate"||n.status==="open"))}s(k,"actionableOpen");function ye(e){return k(e.findings).length===0?{ok:!1,reason:"no actionable open findings"}:e.fixRound>=e.maxFixRounds?{ok:!1,reason:`convergence budget exhausted (${e.fixRound}/${e.maxFixRounds}) \u2014 leftover stays open; do not start round 3`}:{ok:!0,reason:""}}s(ye,"canStartFixRound");function be(e,n){let t=e.fixRound+1;return t>e.maxFixRounds?ne(e,n):{...e,fixRound:t,updatedAt:n,verdict:"in_progress"}}s(be,"advanceFixRound");function ne(e,n){let t=e.findings.map(r=>f(r.severity)&&(r.status==="stands"||r.status==="candidate")?{...r,status:"open"}:r),i=k(t).length>0||t.some(r=>r.status==="open");return{...e,findings:t,fixRound:e.maxFixRounds,updatedAt:n,verdict:i?"blocked":"approved",precisionHint:E(t)}}s(ne,"markLeftoversOpen");function Re(e,n,t,i){let r=new Set(n),o=e.findings.map(a=>!r.has(a.id)||(t==="fixed"||t==="verified")&&!G(a,e.scopePaths)?a:{...a,status:t});return{...e,findings:o,updatedAt:i,precisionHint:E(o)}}s(Re,"markFindings");function Fe(e,n,t){if(t!=="fixed"&&t!=="verified")return[];let i=new Set(n);return e.findings.filter(r=>i.has(r.id)&&!G(r,e.scopePaths)).map(r=>r.id)}s(Fe,"markFindingsSkippedByScope");function E(e){let n=e.filter(r=>r.status==="verified").length,t=e.filter(r=>r.status==="refuted").length,i=n+t;if(i!==0)return Math.round(n/i*1e3)/1e3}s(E,"computePrecisionHint");function L(e){if(e.verdict==="escalated")return"escalated";if(e.verdict==="approved")return"approved";if(e.findings.length===0)return"in_progress";let n=k(e.findings),t=e.findings.some(r=>r.status==="open");return n.length>0||t?"blocked":e.findings.some(r=>f(r.severity)&&r.status==="candidate")?"in_progress":"approved"}s(L,"computeVerdict");function je(e,n){let t=L(e);return{...e,verdict:t,updatedAt:n,precisionHint:E(e.findings)}}s(je,"finalizeLedger");function ke(e){let t=N(e.findings.filter(i=>f(i.severity)&&(i.status==="fixed"||i.status==="stands"||i.status==="open")),e.scopePaths).map(({id:i,severity:r,status:o,title:a,file:u,line:d,blast:p,dna:g})=>({id:i,severity:r,status:o,title:a,file:u,line:d,blast:p,dna:g}));return{intensity:e.intensity,fixRound:e.fixRound,maxFixRounds:e.maxFixRounds,findings:t,fixOrder:t.map(i=>i.id),scope:(()=>{let i=e.scopePaths??[];return`Re-judge ONLY the persisted ledger findings below plus the fix-diff for those items. Confirm each fixed finding is actually resolved; report regressions on those lines only. Fix order is blast-ranked \u2014 do not reorder by preference.${i.length>0?` Frozen scope (${i.length} paths): ${i.slice(0,12).join(", ")}${i.length>12?"\u2026":""}.`:""}`})(),outOfScope:"Do NOT reopen the original full PR diff. Do NOT invent new WARNING/SUGGESTION loops. Findings whose file is outside the frozen git scope are follow-up only (info) \u2014 they do not enter fix loops. New BLOCKER/CRITICAL on in-scope fix-diff may be added as candidates (evidence tax + severity floor + challenge still apply)."}}s(ke,"buildReReviewBrief");var w="RED (attack): assume the change is hostile. Hunt production killers \u2014 races, auth holes, data loss, silent fail. Prefer over-calling; blue + refuters will kill FPs. Output severity + file:line + 1-line repro. Enforce const-only bindings with a concrete immutable rewrite when reassignment exists.",J="BLUE (defense): assume the author is competent. Only report defects you can reproduce from the code. Challenge red overclaims. Same schema: severity + file:line + evidence. For const-only findings, require a viable immutable rewrite rather than a keyword-only suggestion.";function Se(e,n){if(n==="skip"&&!e)return{kind:"skip_ship",directive:"Intensity skip \u2014 ship without judgment tax.",steps:["prjct ship"],intensity:n,fixRound:0,maxFixRounds:0,counts:$(),rankedFixIds:[]};if(!e)return{kind:"open_ledger",directive:`Open a judgment ledger (intensity=${n}).`,steps:["prjct judgment open","prjct judgment next"],intensity:n,fixRound:0,maxFixRounds:y,counts:$(),rankedFixIds:[],judgeCharters:n==="full"?{red:w,blue:J}:void 0};let t=ie(e.findings),i=N(e.findings),r={intensity:e.intensity,fixRound:e.fixRound,maxFixRounds:e.maxFixRounds,counts:t,rankedFixIds:i.map(o=>o.id),judgeCharters:e.intensity==="full"?{red:w,blue:J}:void 0};if(e.verdict==="escalated")return{...r,kind:"escalate",directive:`ESCALATED: ${e.escalateReason??"judges contradict"}. Surface to user.`,steps:["Present both judge verdicts to the user","Do not ship"]};if(e.verdict==="approved")return{...r,kind:"approve",directive:"Ledger APPROVED \u2014 ship is clear for judgment gate.",steps:["prjct ship"]};if(e.findings.length===0)return{...r,kind:"dispatch_reviewers",directive:e.intensity==="full"?"Dispatch RED + BLUE judges in parallel (blind). Then prjct judgment merge. If both find nothing: prjct judgment approve.":"Dispatch ONE focused reviewer. Record findings with prjct judgment add (or approve if truly clean).",steps:e.intensity==="full"?["Spawn RED judge (attack charter) + BLUE judge (defense charter) in parallel","prjct judgment merge --red '[...]' --blue '[...]'","prjct judgment next"]:["Spawn one fresh-context reviewer (model: sonnet)","prjct judgment add --severity \u2026 --title \u2026 --file \u2026 --line \u2026","prjct judgment challenge --verdicts \u2026"]};if(t.candidates>0&&t.stands===0&&t.fixed===0)return{...r,kind:"dispatch_refuters",directive:`Batch-challenge ${t.candidates} candidate(s). Ceiling: ${D(e.intensity)} vote(s) total \u2014 never per-finding tasks.`,steps:["Spawn ONE batched refuter (or 3-lens panel on full) over ALL candidates","prjct judgment challenge --verdicts id:stands|refuted[,\u2026]","prjct judgment next"]};if(t.stands>0||t.open>0){if(e.fixRound>=e.maxFixRounds)return{...r,kind:"blocked_budget",directive:"Convergence budget exhausted with leftovers \u2014 report open, no round 3.",steps:["prjct judgment fix-round # marks leftovers open","Surface open findings to user or escalate"]};let o=i.slice(0,5).map(a=>`${a.id}(${a.severity})`).join(", ");return{...r,kind:"fix_ranked",directive:`Fix blast-ranked stands (${t.stands} open). Top: ${o||"\u2014"}`,steps:["prjct judgment fix-round",`Implementer fixes ONLY stands \u2014 order: ${r.rankedFixIds.join(" \u2192 ")||"\u2014"}`,`prjct judgment fixed ${r.rankedFixIds.join(" ")}`,"prjct judgment brief # scoped re-judge",`prjct judgment verify ${r.rankedFixIds.join(" ")}`]}}return t.fixed>0?{...r,kind:"rejudge_scoped",directive:`Re-judge ${t.fixed} fixed finding(s) with scoped brief only.`,steps:["prjct judgment brief","Fresh judge on ledger+fix-diff only","prjct judgment verify <ids>","prjct judgment approve"]}:L(e)==="approved"?{...r,kind:"approve",directive:"Clean ledger \u2014 approve and ship.",steps:["prjct judgment approve","prjct ship"]}:{...r,kind:"idle",directive:"Ledger in progress \u2014 run prjct judgment status.",steps:["prjct judgment status","prjct judgment next"]}}s(Se,"buildNextAction");function $(){return{candidates:0,stands:0,refuted:0,fixed:0,verified:0,info:0,open:0,ghosts:0}}s($,"emptyCounts");function ie(e){let n=$();for(let t of e)t.status==="candidate"?n.candidates++:t.status==="stands"?n.stands++:t.status==="refuted"?n.refuted++:t.status==="fixed"?n.fixed++:t.status==="verified"?n.verified++:t.status==="info"?n.info++:t.status==="open"&&n.open++,t.knownFalsePositive&&n.ghosts++;return n}s(ie,"countStatuses");function we(e){switch(e){case"skip":return{intensity:e,reviewers:"none \u2014 trivial/docs-only changeset",refuters:"none",severityFloor:"n/a",evidenceTax:"n/a",maxFixRounds:0,shipExpectation:"ship without judgment ledger"};case"standard":return{intensity:e,reviewers:"exactly ONE focused review pass (fresh-context subagent)",refuters:"exactly ONE batched refuter over all BLOCKER/CRITICAL candidates",severityFloor:"only verified BLOCKER/CRITICAL enter fix loops; WARNING/SUGGESTION = info once",evidenceTax:"blocker without file:line demoted to critical; title-only critical \u2192 info",maxFixRounds:y,shipExpectation:"ledger verdict approved (or --no-spec-gate override)"};case"full":return{intensity:e,reviewers:"dual-blind RED (attack) + BLUE (defense) in parallel \u2014 merge via prjct judgment merge",refuters:"exactly THREE batched refuter votes (correctness/impact/repro); 2-of-3 kills; fail-closed stands",severityFloor:"only verified BLOCKER/CRITICAL enter fix loops; WARNING/SUGGESTION = info once",evidenceTax:"blocker without file:line demoted to critical; title-only critical \u2192 info",maxFixRounds:y,shipExpectation:"ledger verdict approved after \u22642 fix rounds (or escalate)",redCharter:w,blueCharter:J}}}s(we,"intensityProtocol");function Je(e){let{codeStrict:n,intensity:t,ledger:i,override:r}=e;if(r)return{blocked:!1,mode:"none",message:"",reason:"override"};if(t==="skip")return{blocked:!1,mode:"none",message:"",reason:"skip-intensity"};if(!i){let d=`Precision judgment required (intensity=${t}): run \`prjct judgment plan\` \u2192 \`prjct judgment open\` \u2192 follow \`prjct judgment next\`.${t==="full"?" Dual-blind RED+BLUE required (code-strict default).":""} Override only with explicit consent: \`prjct ship --no-judgment-gate\`.`;return n?{blocked:!0,mode:"hard",message:d,reason:"missing-ledger"}:{blocked:!1,mode:"soft",message:`\u2696\uFE0F ${d}`,reason:"soft-reminder"}}let o=L(i);if(o==="approved"){let u=i.precisionHint!==void 0?`, precision\u2248${Math.round(i.precisionHint*100)}%`:"";return{blocked:!1,mode:"none",message:`\u2696\uFE0F judgment ${i.id.slice(0,8)} \u2192 APPROVED (intensity=${i.intensity}, rounds=${i.fixRound}/${i.maxFixRounds}${u})`,reason:"approved"}}if(o==="escalated"){let u=`Judgment escalated: ${i.escalateReason??"judges contradict"}. Resolve with the user before ship.`;return n?{blocked:!0,mode:"hard",message:u,reason:"escalated"}:{blocked:!1,mode:"soft",message:`\u2696\uFE0F ${u}`,reason:"escalated"}}if(o==="blocked"){let u=[...k(i.findings),...i.findings.filter(g=>g.status==="open")],d=u.slice(0,5).map(g=>`${g.severity}:${g.title}`).join("; "),p=`Judgment blocked \u2014 open actionable (${u.length}): ${d||"see ledger"}. Fix blast-ranked + re-judge (\u2264${y} rounds) or escalate. \u2192 \`prjct judgment next\``;return n?{blocked:!0,mode:"hard",message:p,reason:"blocked-findings"}:{blocked:!1,mode:"soft",message:`\u2696\uFE0F ${p}`,reason:"blocked-findings"}}let a=`Judgment in progress (round ${i.fixRound}/${i.maxFixRounds}, ${i.findings.length} findings). \u2192 \`prjct judgment next\``;return n?{blocked:!0,mode:"hard",message:a,reason:"in-progress"}:{blocked:!1,mode:"soft",message:`\u2696\uFE0F ${a}`,reason:"in-progress"}}s(Je,"judgmentShipVerdict");function $e(e,n){let t=j(n),i=t.dna??b(t),r=e.findIndex(d=>(d.dna??b(d))===i);if(r<0){let d={...t,dna:i};return{findings:[...e,d],finding:d,deduped:!1}}let o=e[r],a=j({...o,severity:R[t.severity]>R[o.severity]?t.severity:o.severity,title:t.title.length>=o.title.length?t.title:o.title,file:t.file??o.file,line:t.line??o.line,evidence:(t.evidence?.length??0)>(o.evidence?.length??0)?t.evidence:o.evidence,judge:[o.judge,t.judge].filter(Boolean).join("+")||o.judge,agreedBy:[...new Set([...o.agreedBy??[],...t.agreedBy??[],t.judge].filter(Boolean))],dna:i}),u=[...e];return u[r]=a,{findings:u,finding:a,deduped:!0}}s($e,"upsertFinding");function I(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+/g,"/").replace(/\/$/,"").trim()}s(I,"normalizeScopePath");function A(e,n){if(!n||n.length===0||!e||!e.trim())return!0;let t=I(e);if(!t)return!0;for(let i of n){let r=I(i);if(r&&(t===r||t.startsWith(`${r}/`)))return!0}return!1}s(A,"pathInScope");function re(e,n){return A(e.file,n)||e.status==="info"||e.status==="refuted"?e:{...e,status:"info",evidence:(e.evidence?`${e.evidence} \xB7 `:"")+"out of frozen review scope (follow-up only; does not enter fix loops or block ship)"}}s(re,"applyScopeFreeze");function Ie(e,n){return e.map(t=>re(t,n))}s(Ie,"applyScopeFreezeAll");function G(e,n){return e.status==="info"||e.status==="refuted"?!1:A(e.file,n)}s(G,"findingInFixScope");function se(){return`jf_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}s(se,"newFindingId");function oe(){return`jl_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}s(oe,"newLedgerId");function Ee(e){let n=e.scopePaths&&e.scopePaths.length>0?[...new Set(e.scopePaths.map(I).filter(Boolean))]:void 0;return{id:oe(),target:e.target,intensity:e.intensity,maxFixRounds:y,fixRound:0,findings:[],verdict:"in_progress",createdAt:e.now,updatedAt:e.now,baseSha:e.baseSha,headSha:e.headSha,deliveryTier:e.deliveryTier,scopePaths:n,scopeFrozenAt:n?e.now:void 0}}s(Ee,"createLedger");export{q as a,T as b,X as c,ge as d,b as e,F as f,_ as g,Q as h,Z as i,fe as j,S as k,N as l,f as m,j as n,pe as o,ee as p,me as q,he as r,ve as s,D as t,te as u,xe as v,k as w,ye as x,be as y,ne as z,Re as A,Fe as B,E as C,L as D,je as E,ke as F,Se as G,we as H,Je as I,$e as J,I as K,A as L,re as M,Ie as N,G as O,se as P,oe as Q,Ee as R};
|