From 64ddbd950f2da045c21cc9cdd702d44a5879ccf9 Mon Sep 17 00:00:00 2001 From: Mikael Hugo Date: Mon, 11 May 2026 08:28:49 +0200 Subject: [PATCH] refactor(extensions): consolidate duplicate code into canonical modules - Delete ghost package packages/pi-agent-core (no dist, no consumers, TS build errors; JS source sf-db.js had 3 commits not mirrored in TS) - Remove build:pi-agent-core from root package.json build:pi pipeline - Merge all models from MODEL_COST_PER_1K_INPUT into BUNDLED_COST_TABLE (model-cost-table.js is now the single canonical cost source) - Remove duplicate MODEL_COST_PER_1K_INPUT object and getModelCost() from model-router.js; use lookupModelCost() from model-cost-table.js - Replace hand-rolled isTransientNetworkError in preferences-models.js with delegation to classifyError() in error-classifier.js Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .sf/backups/db/sf.db.2026-05-09T22-17-48-976Z | Bin 2371584 -> 0 bytes .sf/backups/db/sf.db.2026-05-11T02-27-37-024Z | Bin 0 -> 1163264 bytes .sf/metrics.db | Bin 2134016 -> 2232320 bytes .sf/metrics.db-shm | Bin 32768 -> 0 bytes .sf/metrics.db-wal | Bin 4008792 -> 0 bytes FEATURES.md | 1 - package.json | 3 +- packages/pi-agent-core/package.json | 25 - packages/pi-agent-core/src/db/errors.ts | 26 - .../pi-agent-core/src/db/gate-registry.ts | 231 - packages/pi-agent-core/src/db/index.ts | 5 - packages/pi-agent-core/src/db/sf-db.ts | 9261 ----------------- .../pi-agent-core/src/db/task-frontmatter.ts | 495 - .../pi-agent-core/src/db/uok/trace-writer.ts | 69 - .../pi-agent-core/src/db/workflow-logger.ts | 94 - packages/pi-agent-core/src/index.ts | 1 - packages/pi-agent-core/tsconfig.json | 32 - sf-worker/go.mod | 49 + sf-worker/go.sum | 90 + sf-worker/main.go | 100 + sf-worker/server.go | 215 + sf-worker/session.go | 199 + .../extensions/sf/model-cost-table.js | 192 + src/resources/extensions/sf/model-router.js | 106 +- .../extensions/sf/preferences-models.js | 13 +- tsconfig.extensions.json | 1 - vitest.config.ts | 1 - 27 files changed, 859 insertions(+), 10350 deletions(-) delete mode 100644 .sf/backups/db/sf.db.2026-05-09T22-17-48-976Z create mode 100644 .sf/backups/db/sf.db.2026-05-11T02-27-37-024Z delete mode 100644 .sf/metrics.db-shm delete mode 100644 .sf/metrics.db-wal delete mode 100644 packages/pi-agent-core/package.json delete mode 100644 packages/pi-agent-core/src/db/errors.ts delete mode 100644 packages/pi-agent-core/src/db/gate-registry.ts delete mode 100644 packages/pi-agent-core/src/db/index.ts delete mode 100644 packages/pi-agent-core/src/db/sf-db.ts delete mode 100644 packages/pi-agent-core/src/db/task-frontmatter.ts delete mode 100644 packages/pi-agent-core/src/db/uok/trace-writer.ts delete mode 100644 packages/pi-agent-core/src/db/workflow-logger.ts delete mode 100644 packages/pi-agent-core/src/index.ts delete mode 100644 packages/pi-agent-core/tsconfig.json create mode 100644 sf-worker/go.mod create mode 100644 sf-worker/go.sum create mode 100644 sf-worker/main.go create mode 100644 sf-worker/server.go create mode 100644 sf-worker/session.go diff --git a/.sf/backups/db/sf.db.2026-05-09T22-17-48-976Z b/.sf/backups/db/sf.db.2026-05-09T22-17-48-976Z deleted file mode 100644 index 0a1848c6309e691fb0f589870da19a6a6ef7e56a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2371584 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

7E{O_<G^vu+#XA`Z4wXp^Gxz;Z2?3!>4n{ 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

4nn}aLYiMD_N4z64$@F)YP z!wcEzj_~COR{T)9r*n{jaEI?-3LhJ!2D ziPal9xON?_KAwYX*U{?RFmO7&kgg+qM-HxCM;E^v2iLA6d~Xh}T}LPE`*CpXI%<`8 zAP3j3Bm7Vfu3bkP_`~3MoDO}|#n;zcn|Fue4>)#qEOf+Ai|-r{#2$|g#rBS^5`80j zU34HiA?l$H0Ov(IBO8Z5rT%|E5APXXDfC+Cn$S_9){ras$KWr5hXywcd>ptvFc{c9 zu!8?p|5g5J{${_!_n0s5JJ`3r_e1Xj@5$a>y<>Gc^ci{yB~39-3PhXb$#Hv z#dV@iBO zpEbF!uq&Xf;}#8AYU`|E9S^JJVKqE#OCC0khi$>bHs@iR@vu#K*d{z|V;;5<58IH3 zZNS6U=V9yduyqm4ZuT>YhwaD1+IU!khwaP5_TgcB^RT^m*q%IW4<5EV58I80?aIS; z;bA-Tu$_3=jy!A!9=1IX+m45A%fq(eVG}WIaeK0(c-V9vHjRh%^RPZ1b|eowf`|3; zupS=P&BLbhuqiz3a2}TAVTbXs$vmu!hjsF>4jy(W4?Bd19n8Zl#%8oZ9f8nhG{~XV z2}pgN730wA0EE_FfkEr@52D9%Xm$KS^qL%6oqiC#F71i^^vWFh#Oy|#_2T{iE{=O0 z@qGN?`1-LAV+&#@$99d4iM|}Yg8KhAM!t_c63IpmimV&{Abd;s#PH7Hc<9B@{Lm4h z`rx<0g~4?2fZ*DJ_X0Ns<^*;OMEx)LFZ1{KYkgn)9`p_Q+I?$z-}U~^dz^QBZ`iZQ zbBSlFXG`~&?)%+y-TS%MaJ}uik@^8{>k2xbbzVf%0Jd;^;kXw#0YFrXVqV($*I0o! zdDt5~>~$XY8V~ym4||n|y~4v@=3y`KuorpQpLy5|JnVTMwupy4$HSiGVbAcer+L_) zc-T`2W;arHu&}@nJnVZO_8kxVmWO@A!@lNWU-7UndDy>s*cUwPa~}3D9`+dz`zH_k zl!tx7!#?I=AMvmcdDuUA*atl9eFU>xzpuf=R_9@>@vv2S*jOI63J+VEhpoiJR^(wT z@UZ21*ccwR91n~0uow@E@~{XG3-hoL4-4|J01xx?Fdu^1d*l`#*3842cvvHX**js` z|L>=<|F5wJzhr@%Re)u9Sel2Wc-RmRJBNqOg9(Dr{yPk(#$HT7WVb}1mt9jT}JnTvy zb_EZ+oQKWlVZY*Gm+`PmdDta9>|!2v5f7Wk!!G1u7x1w2dDwXXMs;S3hwDAc!ye&b z5A(2vJnSJJ_8<>?fQQ}B!|vl@_wulNc-S9!*xfwrE*^F#54(eh-Oj^q<6#SU*sVP5 z79Msp54#D$?2Y{20IbHIpxW`%dH+vS59HH<-v1*kP+nx671#>- zL~U#W4;#p)g0<3{|OX_)89S^JJVKqE#OCC0khi$>b zHs@iR@vu#K*d{z|V;;5<58DvI>|x*s@~{JV*#11Morg{0Vf*p0HXfGXVf*s1eR$a3 zJZvu>wkHqUgNN*HZZ@~|U#ST7Ij;bGl8Y$^|%!ov>dVM!i#7!RAw!@3a6-U&y4Li>Mt zSW?s4VEK_FH5!&cJ93F3M`{Haa->#(AxCNj7;>amfFVa}G(u6{k|xXlcf@u!_AU>5 zhljn*!=NKITiaiGtG&g;-sE9#@UYi;*lRrOFFfp39`*_kdzpv5#KT_XVSnafFYvJE zdDtQz_8bp;7Qtlpb4_cj74YydHxG01FeeXlurU7*JnVZO_8kxVmWO@A!@lNWU-7Un zdDy>s*cUwPa~}3D9`+dz`zH_kl!tx7!#?I=A0e2%Ls*-K{fvjL#lzO*VQcWP)p^)z zJZx1SHkOC2!oybPVJq>l6?xbSJZyO$Him~S$HU?XW^ZZl{;BN$X;OyF|Cby2(vQ@N zu+opzim=j;)QYgukJO5=(vQ@Nu+opzim=j;)QYgukJO5=(vQ>#liANTt@W1w7bSl; zim-EeSe}RFcvzN)Wq4Schm~H+QuF}~@m4#Bht1_-XY;VLc-Wad>|`ExQpuPcNxb-=`gc6+w><1d9`+j^_G=z?0}s2Nhh4|RuH|9Z@UW|S z*i}62N*;Cv54)U)&F5ji;$fHZuuFN^B|Pk69(EBAn}=ZbHs%Q)_D3G}I1hV_hds)} z9^qjR^RR_H>>(cZAP;+hhuzP^?&D$i^00eK#)@`SNB)HN|1w9urnScMmwu#1H_OIK zKT<2gNJZvHl+nR@M#lt4>u<<;sm4~(Pux1|C#KRhSSOX8M=V5g`td@t> z@USg;*f<`x1rOVthi%5gHbpR*{VY#q58+`4^Dv8t9mK;9E;hI}e-0!}jB0 zZ9FW&!}jH2`|z;6dDvb&Y)>Ax2M^nwhwaA0cI9Ea@UWc`%zo>5EDt+|haJtsX7jLF zJZvTp8{lCxc-T=qY&s8{#>4s%%-+(j_7mFws}${)X3JOlks9snY^?MnwIZzaBef!| z^dq$*tn?$bBCPZywIZzaBef!|^dq$*tn?$bBCPZywIU2UQnOw12jrV*V|VkgyLi~0 z2&S^1TUssOKX}*&JnVfQ_8t%WI}dx8hrPqY-sWL{<6(d0VQ=xUH+k3_JnVHI_8JfS z3lDphhrPnXUglvh@vs+p*q?dW3kW8&pKDrcEq{QA`FWU+hk1FJhlja&n2U!wd6>D2TH4poWhkePz{>{U_;9;Nhuz&He&v@8B5zO8YuFu2P<6-Oa zuyuIY+C1!MJZvo2ybbye8`bn0fro@6=2AbS^BYD^nJgk?8_3*H69yS%g zXc()=er{>Bd>8Pr^Lf~LJnWY|>=!)jTppI^VL2X_?|I3CJ#G#DPUB%e=V7NJn96=`X|jB`@UWYC*iAg__dM)(JnXkT>_#5;8y@y+ z9(Dr{yPk(#$HT7WVb}1mt9jT}JnTvyb_EZ+oQKWlVZY*Gm+`Pm5zOATKF!1a#KWHA zVNdd~CwSN&0jyxxaqLfM|F3ebo9X@khRDsbu?=__a-`N^uZA3{6=2AbS^u&sI6Ry=G14;#<$c%tJMVGc z?Y&{oBF`nBsh%y}U%Kyi&vozTUc>da>qgfxu5DdG=d;d>oQFHNaD3somoBN)KZt5| ze$-rVd66Tv29^CRutmsfHufA3dzObi!^4mxwSrrM9H|vx$dOtBh8(FCV91eL0R|nZ z*&p}gybs_p9`+~?dxVEQ%)=J)u!nfqgFNg39(F$uyN`$6%fs$LFqQq>+-P|};b9;1 zu#b4yhdk^bJnRD=_C61LkB9x8hrP?g-r-?y^RU11u)p%Kw|Ll_JnRh~_Bs!Hjfee( zhrP}+0-hGG5boc!p z-?PfBHC^w$6MNge=)DuYjJow+w;BYA5(E)MkLb~f7A**Z2qJp)2!aTL2*O!=X6`6^ z-JjpbzOHkwbI!x{{Pn!vOV+(+@88VtyJkjJM5|Ic@C@X&`eyd zFa6ivWMKZ%VQ(@pf9bF{8JNFx*qaQ@Upnkf2Iemv_9g@Kuu%WwW{i8fy}{%5(qUbb zcUYI?9o9K{hjmKcVI7lqScl{t*8WWn3-dp2#;)~ECa7UA4ttXc>Pv?WNZv{IPu^ku zl6P3&*0d50yu$zh3KTyLzCab9(F@(vr7yu(H&@30ZcJM6>c9ri);4jZ1l!-l=t zVPTOW5s8o6l;j;YIeCYDn!Lj%CGW6Ll6Tm|;yu+3z@31eEci58T9kw`mhb>CpVGEOY z*n-6U{|AtLAAA5Ru>UyF*8Qo9a7u>tt3*DpLo!vFvVeT}pzl`?;Y;(6s^Ti_@;L7~k2^OxXF7*C7Dc%dZ?aSd#Ih(wi@pv z7_PO|Dr@g(ZtGp^G3!R_4C`QPOKUl6KC4Z=r5;w-s#DbdY7@1jnp0JjYsvv-g)&j; ztu#>Llq~Xd`Leu6ULuc`yUDfXNIAXqSUM-|kmgGxrH)c{sfd)y^1yP+vc)pTGSt$_ zQr@@>|K(3sxrFrZ3?;T+xN*1F7^8%Rghz&ZgFb*d9O^KrL$k;wEdTAl`@RW=`c5h$ z#ybSzV1$DZzK3vNQZzQ8Fy=oe z)E!|rgk2GKLD<;@qyKY4oe*|J*a2aCgzZc)%6~%9-nIzaAZ(4W6~cHEjQr0PYKgD~ z!sZB@A#7@b5&t=%CJ4O<8zXFlu%QWt|K}lVfUrKodI;+xtYd=y)jA@|TN`05gzqA( ziLizV23G1QZ*_##5LQK41!3jaF+A~~OZBbP(cVf3D1OqE|gf{|VIKnW5p$LnZ zU|^+=@P;4^Mpzi(I|vJzU|^+=^cF-|0AYTF`4Hwc!N5u#;mw0EH^N*9b0W-Pf`OGf z!kZmoHiTIbWKQZzoj?OUlMylD}pL6{n0DugLbFtAdG zds86vAao;iA#|ExV5N@mIuP0s+7RjpH4_Z1)W*l45UM5^SW-j1#)kIQy`b@%`!C8S z7+Cwlyi#Vlgze>Bq;cfGn7IFc-;yoJv)i-CGuqS1Q{5BdN#VZdK4yFpV48cNyQ#aR zJBM3xU2*MoEpd%8J`+&W73xamyze|=?EPmr2RWNNOFMHp6~|S_KF3nWI7c@}El0Q` zjs2nVIf2dgS@t3JmiDstJa((?y6u2%x$%jC9>&f;(w0ttq@U5Z>T~p=dMo3z1Nn4a zyP+M_R%#QqURpgZTFYR3ir}nuyLGO0xV4S7qP2k4ZtVLH8J{PZq$a2h)L1o>@>Dsm z>`>+@9~z%5sH_xHobqk?h`d&wEccZg$wiIN7(A0MO1q>5#;(7ER8=Z0xh;2$PaCYW zOttj4crC>(**us3%eFr#>Fzwj|Fabt=e0;sEhg&!F^G)yTFn0De>LbiIyUGT)PJBp zHBtXhQDlra=n2%vQ2&Pd2i-E%JgbLLA3(hi^-rkxOw|AU9U1Knx(oFV)IXr! zhWfjS`k%xT&*~P`n^12+{SE4M6AetrqP#)Zpk9UgE7U7ce=$-2(|O{xx(xLa)QeCr zKs}#S!~M_ck;b(;2lXt}pP`K3iU^* zN1z@y(ZK3${9GM^`UBL1P``(Iz(fOUyK$}dL){1UJE(i1?lIB8+HPE{-B7=Ux(n(~ zs5?yb#oGQ2)a_8WLEQ>O`m$ppG}uz}jw{)yGiBK^+Tq4AhTIG_bZCkKkyiqo9t2IwGmQw1<`7 z?*Hlie_Xv#VH0tit$-I)`eOJYHbq@tnJ}mOD(AHLahn4 z2Gr^%8d%$nv#JKQD%2`aD?_bhqJgzN%xkF#wF1=gP|HCrn^Xh$#-fa~Dg(7N)KXAO zLM>sUfwkRu1dBs02DK>EIH<8E8d%$nYZU`E8fp~ONT?Ae8d%$nYZVSP3~DIUB2Yt2 zG_bZC*D4rlVW{swEd;foi3Zkoa5A|AdL(K&>C)6BJvzusO zZ8y#;8`P{&vp~%ZHIs=3)^_6&%m_6D)bvo(K}~C-fwkSZR%xK7hMEd$N~kH4YJ`7| z7G<232dW#Y3#t>U!$bpXyKz=_s5YoNR1K=tL<4g)<1V%Oiu!k{f!|PL2lT<){r{Wo z|HJ){cXWhTl9FE8m(&6^$VB~*S+w!Y_Z;dosQ*BH3iXMJ`k#-D|Gk#SQ2&Pd21v92h`h8e}{U@ME$?*i9c62q27S{8`SGi zubHU-`8e^cu0s74>J_NJK)r0D{^#Swv$_QJBGd~|&qFQ5#bSf7ovItukis7Ih4hI+_E18ckSI`0Rl2cdos^#IiU zCK_1Vjn^*wpneB+FVsCycbjNnuVuV;`4;Lfs5_zVfclMz2KHLUS#5{94eC~?TcB<> z(ZDM?IA6cp?++lfwkSZ zr#lYnSg2#5egt*2iN4sSkAgZ9>WHNJ(k}Jw{eS-b|GwEtRAkYp(2$t$D6cd;>6MK# z9YzdTE4a2xK_oW7KIuI zH5O`&i3Zm8NUszPH417Z)Cj2ICK_1Vjk5}a8Va=t)DWn_CK_1VjeA0cp}qsP5Y&QD z3z%qNZ4dWK`Jv{6nipywsJTtl*lWdw#6}p8U@oXRq2_>^9cnfc4csF!R)(xlvp~%Z zH51f~CK|X$VqB{XP}4(A2Q@9!G$tCjM`HZ6r-qseYD%anpn6O+Fh?`a$_>>8)d|%B z)t*!XpX*G#TWo`>L)D;Kp{hysr9JH1`~PpW{|_sgc-Jc;Br-bGD@(6m*;mv8H3+Hn z+(doP$1xGcWZ@aqf1o~v`UL7@6ZJhG$3z&Dg}6OeS58#@HnsZE7U7c ze}Q@#>LnBP?X`SobrI?XsOO=cgL>9PeS0n6&(+UR&pH(Q1?RJ z19dmlZ%y>Y+P(|wPN+Meegk#8iN09dw?W+sbqmzZP`@_O7i;?_s2ibffVv*)Iui}7 z?Xh0zE2wLsu7SE5>M9crtnJ2Gt%SM)>T;;dpe{90|JojIoYj|5mq1+%brIBsChA|? z!;L#P3!u)2IuGg>Q0Km`#wi8XcH^u*hdKx9Y^bxK&NR`$+HRcH45-tgPJ{Xx)Tt)w zU)vKO!6{HDL;V!$B&eU5sDEt_HzuJIp-zB09_q(X$C;>qZBIO_u~5fA{Rrx4sH05u z#eL|JP)EG3uk2Fa-v58Y{lD>@i&5br(Z(kX<>5)M>`OY#M2*KR@mOPaFcj+hP=`Pr z40Vu+8qddp|3&XX9SC&*)c#QWnW*u69Jp3}q4t5A0JS&NUM6Zh9~)<7eEXx^6KW5r z-Jy1a+SNpjC%?d1b%EL$YA2{2p>{~BiTAY<&nng{w};veYFnsnptd$q1BFj4>7o_MXw zLoEljEYvbkOPgq5Z8xq}DX1l(mVjCuYB3WHtnJ3NDhf3YYAngw#)ND|*nrL8cH_j>x)XY#bLCpv?gNX*#cHcXs zv{2JPO>LrqwcWT@si3BWngXf^s@p_gtnDtSPN)v3cBnQJ4Xo|qURj5#LA63vlj=*m z)VKHl-)R3IUex%9-V>ksj8DBP((70D6}3POLMlIp`Yfp?-q-S_-h+A<>K&+mn5h5xIPrZYx1s(H^%m5d zP;Z#1|M@uatbT)f9qKixSE2rDqJcS@F@?DT^%tm@p(_V3F=X(Kbok2Z8yFdR6YXrFw{d( ze}H=Mbu})Oe{D~^R^LNC0ChjqeNewM(ZC$dIIF!-_dwkZ^;@XBOw_-&CtjSm~4L)~Pefjb$-S#5;60qT0F>!5yRqJg#Dcm&r%T?2JB z)KySdnrL8cH_mDW)a6i@L0t;K9Pw zLjBxC18aMfSDpiPHq=>AXF{EkR1-hfX}oSXzMWT|4s{yT&!A3)I>kf-YkP!Oo(%O< zsFR?60(GK^2G(|CH!%U~c&Hyk9S3!+i3Zko{;YqLTOF9hdP!kR8wIaRB`%s5K9Sn64)b~u(|9otG zf<+k!bpX`iLv3cFfjOFS zR!yNcf$D|Y7-}OE4b0JuvuX&n0o3|X>p`t+qJj0Vw?2DPY(2G(}ttm2@?LXCkM4K>O{U)&>!gc<=g9BLTU(4=a7a`QiTZi+w+ff@|8 zFw}QU^xu0VN+GBPp%#FeA8I}m4Xo|P&sAQid7$QonhR=96Ai5G##!ZnnjLC3s9B+A zG10)h1#&_vO$9PrgwJZCo zTA&6YRi2xu@lOx>|GUaFsQ*BH3iS!p$4S+gU;gK;{)YMp>R(VFLVaMOvHzaceW-sz zy$AI!)H@~`^Y2;x0rfW2-=W@udecOs|2?Z4P=AAZ9qKixS4}j^e^zl`W@&5m}ubn z*mx8ULp=ob2dD?3es7|Iy_RvU4nW-xbsyC4pzckof%{s~#)HmF-oG_cn)uGJQ(o1uOUbraN$CK}jl89!GWpst6y4(eA>*P3Wx zuNC7})<9hibrsZ=P*<2}V6SC7g3F;UgSr&zmr$3OXkf2poYi8ei=Zxqx&Z2Y6AkRO zj7M-D)GwgUh59+vIVKud+l{lD4RsdOnNVjyoo=FmwcR+YX;43dIu+^^sFRaw;B%eP z(O%_KsFR?60(BzP2__ntqZwy49_q(X$3Yznb&QDy)^_7=@kdZcLmdTmB-9bF>8rcc zxA*_wX#a0~cY^=5cx;?k9sc^2eMN^s9crTfSL(4*UiE#bL!b_ZItc1}PzORC0JT5V zeo*^D?E^IdYHt(u&skz4ylO9~J)!o1+8t^)s9m9Uf!Y~rC#W5vc7WO*YP+Ore4Zt7 zu4L>U)wWREKy3}R71VgBEupr6+8k;#s7;|Zf$D|Y*hKwvw8TfD5!8lI8$hiOwVsLk z=V*y%RTpXxcH6_#(P(4uHCi?H)7u5yT3Dp7B4%KF& zf%`hfy<{D#2Gt5xeO+JKrM|uY|Aza2ag%K8E@?)JIVNg8I-zBmIwpF)Mih^*+=;q27af7wR3Te?Ywr^>?VZpx%Uf1L|*3 zuS2~C^(xd~pRzaOpzenHE!165cS79(^&6<$ zP1Ja&Oya8oUyZ_pne5)Ez~toS3_L|btTjlP?tkp z26ZXaFQG1hx)|yrs0*PkfI1)QyrdcyQ#33#BrMvPN_+uzF4WJV&Vf1`>MW=;q0TT- zW8H`hiAcPgI34OVsGmWd3Uvz9$xuIqItl70P$xp20Chank4@Egx5;=E#z7qmbqv&x zppJ$*3hGFxBa-S%yVSS$|KD)`9~J6*rZ?`=TZfxm**L#Odac8t4u$$Y)FDs@LmdS5 zJ*Wer4uIMpYCoubq4t5A0JS&NUQl~N?E$qr)NW9_LhS;zGt^E{J3{RMwLR2!CK~Ji zJqq($+d^#vwKddMP~)MtgxUgXbEwUrHig;*suyZwsEwdDgxUaVeW>-I)`eOJYHg^s zpuP*WCe#{Gt3#~@wW^64ucs6DrLkUX6{wY=R)Sg)Y6Ym}p_YSM7HS!&rJB_bA3|4Tf46>N`*iK`jWi z0Mz_Y^FhrEH4oI>P;)`e2{i}Q>`=2o%?dRO)XY#bLCpv?1Jv|T(?LxOH4W6%P*a)c zi@T>Op{9W9f$E0pg6f3ofNF*?cAk3szj>QSgaLOlZYFw{d(e}H-r>i19&K-~{@AJp%l?uEJs>Tamt zLfr**C)6EKzk#|P>Ncobp>Bb?*+dinG3SubSmWJ@UqjslbtBXbP}f6U2lXqcYoV@z zx*F;#s4JnafVv#&GN?RhOwL!D!yFYfBihB^!C zOsF%UPKP=T>Ss`=LY)G2GSp9@PJ;Rg)QM0hKphYDW2obxj)gh~>PJvVLmdTmB-9Zm z`eK**_Wu8y?*ILF_~RnH+HjLA`$C679SZe*s6$NDf4?*?(yI-IItc1}PzORC0JT5V zeo*^D?E^IdYHz5$p!S5?18R4u-Jo`b+68K7sGXp8gxUdWd#LT8wuRaTYHO&iOw@nB zH1W4P9%@UdEuc1s+6-z_s7;`Hp*Duv2x>#94WQPCS`TVnsCA&$hFS~iyHIOFtpT+< z)M`+xLahR|GSo^?E1IbPera5|SE~TEJk)Yf%R(&!wKUXHP)kBB0kt^PVo-}hje{Bs zH3n)l)F`NtP$Qs*Lk)u(3bhE-5U9aW3qySeY9SN#-!F{|^=bv77J!-`YCfoWq2_^_ z8)`17Iico&njLC3s9B+Aftnd=Ca4*qW`LR=YC5QCp{9YF8fq%2DWRr->VfJu(HA>j z7gQ%y2UI&$8&n;t2Gt5xHPIKl)VKHl-)R4Dd|`wC4scwYSC?MDvahHGY7kQGIn-xR z|AG1x>JzAsq5ci^5!An+K7{%J>V2qxLcIs|F4Q|v|A2biME&d#QmKs^oh6x5SYPe45m^%&Hj zpdK|*|NYX$Iq8p3k3c;P^$^q_pdN(!J=6nG_e0$W^*gA0q3(gY8|t@EcR}3=bqCaM zpl*k{4eC~?TcB=+`Zd%|P&Y!|V50u}rHQ{s>!GfL`W4i*P}e|R4RsaNl~7keT@G~_ z)TL0rgt`RkVyKItE`+)O>U^m4pnd^$F4WJV&Vf1`>MW=;q0V?+jem6D#ZGKG)M-#Z zgE|%J6sVJ-ehPIG)K8#JggOE0c&Hyk9S3zR)G<&$f;t-ND5xW$j(A;P*`>a{|No}@ zf8U+JX@dp$>xj9@K#*>bqYW78>Q%2SDu)wI9^JQ2Rhl zfZ7{sFQ`4C_JG~1V8EPk}9ieuB+8$~ff@oe7;0gt??5dCwII|2Q1e60XQICQrD36=UOg|=JWz8(%>^|l z)ErQ=L(K*?E7UAdGegY;H6zpvP}4(A2Q@9!G*DARO$9Y2)D%!XP~A{nP@Pa6Q0*rA z;%>1Gst#3yYK5wr=!;$I2X@cppdprQL7v^7MV`@~PM+$X5KjvCJ@+y92KO}gKzCDj zNp}vnssO(`ziZo`z-qqdrNy+dmg*hcHMTsw%j(}*27lE7HLbTKhn?WTlG2mP`#C2UeBlN z+70cXwo;p@_0sBT(OL%UW9wP#cI#a0aBCZDMQZ`8UA?6qQdg^!)C9GG8mnefo+{^+ z9m+iAL#3TkSt+DA<=gTRd96HI?khKvi^^G~XVOJ!m$X0{DRq#lN`)o2<&Nd3Wu0ZJ zrN6~%dBgp`@$df`pSTMP3-j8fq*wMOwLlF*sy~PN4C+5npF({C^)b}Hp+1887u1JP zA3(hi^-rkxpx%Xg2kIYCZ$teZ>Mf`@q24f2-~H0CFynQ=Z&0s8y$1Cv)L)@qf%*&7 z%TO;ty$JOJ)bmi!K|KrgXQ*eOo`!k~>Pe_4pdN>M4C+r%k3#(s>Jg}ip&l|(-~H0C zP~%-=KR`VQ^?RrXpzepd59)VN_d?wRbvM*+q3(jZ6Y37A-$30CbsN;JP`5zc4E1ZM zo1kulx&i8XsOzA91$AvwHU3@L#8+RTFQ0GGZ9O@jXv!Tv{Iuq&)sMDcNgZdfNsV4ej2RH@lWT>A)odoq0 zs1u=1fI1%P$56*X9Sd~~)Q_N!hB^xBNT?%%f`YPzhlWQ7heid5#?=cqHn1=Du)h2M zy`%*}p3DFLPXLT7@%GREgI6Hw&v#f<(Wuyv2xDJr>jO0bYHz5$p!S5?18R4u-Jo`b z+68K7sGXp8gxUdWd#LT8wuRaTYHO&ipvFUO3AF{(=1`kKZ3?vsRIjP}rkUYhTVtq= zpf-fs0BU`x^`O>;S_f)vsI{QJ3$-TH8c?f4tp>F!)GAObL#+h0BGd{{%R?;(wJg*! zP)kEC1+}D!`tO&98NWv*pcaQ(3~EuRaZqES#z2jR8U-~HY6R49s9{h;p%#G}0yP+F zVW{swEd;e7)B;fRL(K;@FVs9xb3@H#qQ3j3VPO$oTTZAspk{}f4Qf`XS)gWynh9z~ zs2QN9hnfy*TBvEDriPjdYD%anpn9OXp}L?tp*o=2q1vG8P&KGl6MeD6SD`9)V?Wp; z=s=L?lxLM^q^FrD(&KPnc7N@j=x%S^`A_S*<@(k&!`0JO*_GY-(D{RNf%83Q9cMvj zkmICdrDKGnsUyN+w_mbvvQMzLvzM@^vE8)ovQ0Pc@mI2C(;w&u_4)chy|!LJd#;_( zR%jn;O|)>$X1!?LXdQ2DYb|a~t=>>~s?*f&YDG1xa$ou0xSKyfsiowXpUKDN4LOD`dDfs6_Zj~ezWYbd}irpsbI+x^rvz9#-9RmeM?wOWV`t2c5Q=OMYe7g z9NDf_o8Y*Z&^Eylv0-7YT8BqOMMbo3!G_J*uo)XRWy2oHmuKv z_1Lg38`fdN+H6>h4c}$Mnrv8u4Xd+ZH8!luhE>?GG8DykhEZ%7$%YYZ7|w=aY#7RhMc6Qe4TIUR zFdM$ZhK1O$AR887!~ATRj}7y(VIDTj&4#(yFee-4V8iTen2imyvSAiB%*=+F*f1j- zW?;kgY?zJ>)3RY2HcZWisn{?j8>V1G4;#AK(8Y#MHgvF|oegblsI#HQhE_II*-&9a znGL1eC=^5c^>WT2!-Iv^(+!NgG+$G#;TsK|2T+>}WT$Nne zoDZA_o%5Xoowc0>9M2sm94j0jI+_^o^|#qC*w@>~+T-mpc9-oJ+t;=Uwzjrnwv_rc zeVhKN-cc{5r`2w1JGIZWu39-QqxBE#9_vhNPirM>R`pMHzxuh_N3EvjRQ^(aQ05!E z|96$V@)P+-d9gfLt}7Rmo=eB2WzsOIp%g61meZD1mJyaFmN1KEoce$NQ&6riF&80d z8(nUt%Pn-dnJ&Mk%T08-kuEpT<$AhYN0(pG!q{|g_xtuPS(dAOQ z{E{x0(B)#fTtt@(>2d*G&Zo2eNT&Zf&*bUBkQXVB$zx|~LrpV8%1 zx|~9nlj-tPx|~FppU~w*x|~3l)KU5=#75p?+>U4B59 z!|8GuT@GbmS-;PQL)dUI8xCT__t8lUsO zVc%h&YVTrv#y^AYwr#gw|qAiPlPv2*Jwm(6ys^`!i8lUT*r}furYI%&$^dGS< zvJSG=u@+FDsmIi%>QLje{DoCXIi;*LKF9A>LKUlg*7ywnXt}u@Dcg*fz=u)Oji7qX48N`-B&*}0RUH(ItPwDar zT|TDEzv=Q3UH(Ov59#s&UEZh5Kk4!wUEZb3J9PO6UEZe4-|6xeUEZY28+7>_U0$cl zYjk;)E`O!VD|Gn_U0$ZkOLTdWE-%pKdAdADmuKnnXSzH?m#69S6kVRA%M)~YoGy>i z&<#%+smoE3vm(}UA8eLYU%PMqPnJz2QWktHIK$qp|vK(EOrOPsO zS(+|O(Pc@xEJ2sW>9QDI7NyHLx{RgE7`lw6%P6{xq{|4p45!O5x(ubuB6Jx-m%(&d zm@eO;%R+QnkS+_*Wq!KMN0)i&G7nwmrpsJ(nUgMa&}DYI%tn`4=`ssl_Itbke{KIy z&mb-I4AMf+AT9I^(n8N5E%Xf1LeC&A^bFEM&mb-I4AMf+AT9I^(n8N5E%Xf1LeC&A z^bFEM&mb-I4AMf+AT9I^(!$Rmx6`ZDHoDwOms{v^GhKd7mz(HvBVBHw%k^}*jxN8V z%e8d5hAvmrI=ozF$&mbjw1}V`qNQs_7O7sj;qGym2J%g0!8Kgwd zASHSRDbX`XiJn19^bAs>XOI#-gOunQq?DOmt)xtJnUO9t&}DkMOh=b#=`synrl!kO zbeWPaQ_!V{F5PtLqDv=TI_T0)mo~c8=~AOhD_yE|snDfNml9oC=rV{cEzjxl8D0KE zmrv>P30*#>%fIRJ5ncX8mk;Uk0bSmw%RlMz9$nt0%R6-W2VLH#%irnp7G2(?%Nun0 z8(m(f%WHIbl`em!%PVyG3te8O%S&{5kuERL<$1b1N0(>m@@Kj{Lzk!N@)TX3q{|a* zDTTe=|G&2Xr)Q87J%g0!8KgwdASHSRDbX`XiJn19^bAs>XOI#-gOunQq(sjkC3*%a z(KASio9Pe~HmA#GblH?H zo6x0~E*sNjBf4xzmksE$K3&$M%er(~hc0W=Wi7gVmo974WevKlPM6i_vMOCxq07p2 zS&1$y(q#p@EKir^=&~$bmZ8hibXkfnOVVWtx-3qY#ptpqUB=O6EM3OXWi(wz(PboE zM$qN>xBLIs_W$$@Qle*&5

I=ozF$&mbjw1}V`qNQs_7O7sj;qGym2J%g0!8Kgwd zASHSRDbX`XiJn19^bAs>XOI#-gOunQq{Po4kJGEwF}nPTE|1dXk92v2E)Ub?A-ep5 zE)UY>_jGxHF89;rKDzvlF89*q9=hC3m*3LmF1p-Fmpkb48@k+1m)q!aD_w4(%guE8 zHC=9^%Z+rofiBn6iGe45iB=bQwaI!E{-e zF5jWcLUdV>E(_3Qe!9#@mwD+j4_)S_%UpDslP+`6Wp=vEMweOXG7DX1rprupnUO9t z&}DkMOh=b#=`synrl!kObeWPaQ_!V{F5PtLqDv=TI_T0)mo~c8=~AOhD_yE|snDfN zml9oC=rV{crRQ|{j4uD7%cpetgf1V`<==Gqh%W!4%ZGINfG+RT<)3tUk1p@hIgOuqRq)g8sWqJlF(=$k!o`5|3?K$pYmau{6>rOWr}atK`xrprNe`5s*kq{{(x*`F@^(Pdw{ z>_e9cblICOd(mZ2y6i!h-RZI$U3R6*E_B(ME<4d>N4o4lm+k4Y9bLAi%Qke`nl4+> zWjtNBq{|j`*_3F6+`|9lESdm$m5fUAnAE zmo@0JI$c(y%c^v_@a_Kp)&0Lh&ma|g1}W1sNSU5N%Jd9Ure}~cJ%g0#8Kg|lAZ2<6 zDbq7ZnVvz)^bAs_XOJ>IgOuqRq)g8sWqJlF(=$k!o_U0$cl zYjk;)E`O!VD|Gn_U0$ZkOLTdWE-%pKdAdADmuKnnXSzH?m#69S6kVRA%M)~YoGy>i z&<#%+smoE3v1(B*2nTt$~F>2d{K zE~m?7bh(r+zog40bh(%<73uB%|F!);J%d!}8KgqbAQgHBsn9b>g`Pnw^bAs=XOId# zgH-4lq(aXi6?z7#&@)JdozU53zQFkKd=%XjFq5M36e%K~(npDy#!WnQ|>LzlVfG8bLuq{|$1nVl}P z(PdV;%tDu$=`s^tW~9pubeWzm)6r#Gx=cftsp&EmU8bbV6m;pKOE+D*=+a4-4!X3{ zrHw9iy42{>N|!2KDs9QYP_NB`{beTYxz3H+SUG}8Q9(38AF1yiXSGw#%m!0Xd6J2(s%MNte zo-W(bWm~#zLzk`TvK3v%)8*FxN&Ek($aZbwVq1p>$4AA)2S>)lM+V16hQ|fRhebt3 zhK0w(#YDGLeX~-k^vz1C(l;xmO5d!MDt)t3s`SlDsnRzqrAptdlq!9*QmXXLN~zK} zE2T=`tduH!vr?+`%}S}#H!Gz|->j4>eX~-k^vz1C(l;xmO5d!MDt)t3s`SlDsnRzq zrAptdlq!9*QmT{_S5>N%=+Z)$L2Ri!r^{z_`43$_rOPLD`Is*Mrprfk`4?S2q{|0% zd7m!-q|1ABd6zEl(B&U=d7CbOr^{P(d6O=0(B*G*d7Un=(dAXT{FN@R(B&_5d6_OR z(d9+Dyg--d>GB+1o~6s5>GBL+o=z;oVj|ncN4IMm+$yqltKi6Xt=a^~#e}|gpX?Z2 z{zR8Y>GDUqJVKX;>GBX={y>)p>GFHJJV2NG>2e=ken*#k>2eQU?xxFc>2eoc?xf2d zbomWkZci+!SE^ax?*Cug|NCa8)V1@?N~zK}E2T=`tduH!vr?+`%}S}#H!Gz|->j4> zeX~-k^vz1C(l;xmO5d!MDt)t3s`SlDsnRzqrAptdlq!9*QmXXLN~zK}E2T=`tduH! zvr?+`%}S}#H!Gz|->j4>eX~-kY)P-GE$Fg2T{ff3rgYhaF1>Wwm@XU9Wkb4bK$rFD zvL0R5rOP^WS(`3v(dD~zS(7en&}DVHtVWkr>9Pu4R;J5JbXk!uE6`t zQBKk2$;6VH^G>JBX>|D+T~4LTDReoRETkkH6jjzqg;eRA7gD8fUPzU`c_CH$=7m)0n-@~0Z(c~1zIh>4`sRgH>6;f)rEgwHmA-i) zRr=4`sRgH>6;f)rEgwHmA-i)Rr=`Rw@=rVyWd(&kvy6j1pJ?OGKU3R0(u5{UjE<4j@C%WuNmmTP` zJzch=%eHjchAvyvWh=Ujr^}Xf*@7;c(`7TdY)Y3+=+aA9Pb}7N^T%bXk-xoJp56=yEz;PNU1u=yEDuPNB=mbonV=PNK_C=C!=$cDl6DrB0U`U0Uf zmrv;OFk4mk;RjK3)Dvm-p!ME?wTC%RlJyHd|^{-tPZj+yB!uNR6IB zYV-_Jqi2vBJ%iNf8Kg$fAT@dhsnIh?jh;bj^bAs?XOJ2_gVg95q(;vmHF^fA(KASm zoG@&mdY zPM5>zawuKCPnSdJaxh&EqRaQ_av)s}pv(Sr*^e&!(q$jIOrXo&blHn8d(veOy6jGu z-RQC_U3Q_%&UD#{E<4g?2fA!em+k1XEnT*u%hq(+iZ0{nvL#)%pv&fT*^Dlm(q$96 z^wMQxx@<(34e7E0UDl_|dURQrF6+=`ZMv*Qm+#VLO}eZ>m(}UA8eJ}WyZ?W6|F6?C zNS&TR>hug!qi2vBJ%iNf8Kg$fAT@dhsnIh?jh;bj^bAs?XOJ2_gVg95q(;vmHF^fA z(KASmoU7n}Qb98x@E`O%WGjw^HE>F?rNxD2im&fVy7+wBEmq+RHN4h*hmxt-{5MBO2 zmj~(cd%8S8m;32*A6GDguT*8*R{C5BU z+Ww!OLF)7jQm1E-Iz5Bb=^3O>&meVr2C36CNS&TR>hug!r)Q8lJ%iNg8Kh3nAa!~M zsnat^ot{DJ^bAs`XOKEQgVgC6q+XR?t*X#vWxA|Hmlf%<0$rA;%W`yCmM+WCWof!B zMVBS%vIJcgr^{k=S(Gm0=rWcrW9TxPE~Dr&k}f0YGMp~M=rWWpi_m2VT?W%-VY+;W zE(_6RLAoqJm-*>3A6@39%RF?Mn=W(FWlp-xL6_O-G8rPk1qStWgogs zpv&HL*^4fF(q#|2>`s^6=&~zacA?A8blHh6JJMwbx@=FE?dY;CUACdi)^yp5F1Nki z|G&Ebx6w058$E-x(KARJJ%hB-Ge{dfgS62zNEd)!&8D0KEmrv>P z30*#>%fIRJ5ncX8mk;Uk0bSmw%RlMz9$nt0%R6-W2VLH#%irnp7G2(?%Nun08(m(f z%WHIbl`em!%PVyG3te8O%S&{5kuERL<$1b1N0(>m@@Kj{Lzk!N@)TX3q{|a@d7Lhf z(dAEcd6X`Hq{}08d6+H_(d7?xd5|u@r^^F$xt}ig(dBn^xtA{Y(B*Er{FW|v(dACM z+(DP$u%#{2|D^qY+vu41xVYHx;F!3$cEOR+VX?vSVUf|nVX^TM@vURSTSvEwQ|NWg z)`z~z^bFEQ&me8|4AMr=AZ_#v(nil9ZS)M%M$aH^^bFEQ&me8|4AMr=AZ_#v(nil9 zZS)M%M$aH^^bFEQ&me8|4AK@){~ooZ%NBImoGzQuWmCFrLYH2;Y)qGp=&~VQHlWM; zbXkus>(XT%x~xr?wdnF)x~xf;HR!TBT~?#Zs&rX}E-TYzCAzFgmlf!;JYANf%d&J? zhAvCfWhuHWNtY$)vN&B9qsyXn8Aq3~bQwdJ(R3L_myvWCL6_ll8Ag|(bXkNhL+CP? zE(_D;J9JryE(_9S0lLgjm-*;2FJ0!L%iMICi!O80We&Q`PM6u}GAmtXNi3<|?uo?x z|A&@5L7pp~eV*l>iJk;cBTsQp4v*r#?mp;V?VjxJ?{4ZY?at%YUAJ6ET?T+@7wn3Y&4boa@ zWwpGTZoO$eWL;yOZ0%?DT1!}SSY`F9x?f$cPEdQP_0?E4v+_*2r0iA}D`S+dN-ZTq zNhkj;pOwFn=gA}F4sta)L{2H)mrhEXrPMe2_5^kZPB`WpKb}#41`kY;gtri0LwFhCIfSPW{)F%l!u<$$Bm4&8W`yezu12^F;Ua`z zAe@EpGlY{6evEK5!Vfab#Vr42?=S?|0ALBgx&!M3tSzvXz?uMS0IW8!>cA=iD+{ay zuvlObz(Rl(1eOO_c3_!+r3ID(m?Lrj|AD1okY}&wOV2n@cTXKplqZAxiTk{Jr+a~W zl)IC=hC9@q+V#+N+O^g7xofzqt*f%@9hcjA*Llpj(K*98*xAxq&Y90?bKG(qcC2+w zarAdIag=oAbSU;~_5=16_KEi1_6GJidluVs+hyAx+Y;MYTQ^&6Tcj<${#ZY!@6hM# zBlV7Yb-jq5N_(K4(za-Gv|(Bst&&zqb6M|Lf3j|{PPY!Swy>79=C$hTP4$qvMxCto zQ@v^lHHRuISC#$Ba%F|&5pp`|Z|SV`jWkahA$5?d zNg+~7%YDm9%Vx`L%TP;eOGQgT&o3sM|Ns2Iz;C%4g)kK1I|%b3%!x1y!t@AJA#@?s z5y}9SX9)jBcpu>(2yY<#72z?2hY=n?xCh}5gj*19K)43sa)gT!&OwK zBZMC!d>`RJgnbb9K-d{!JB0BFn<8w8unxi+2rDBjhp;5VIE0Z1iy$n7FfYO!2s0y0 zhcG2VCqfOO1W^75;Uk29BD{_8H-uLZUO;#T;c@=hAXXe2~EV3A~rUy9&I6z*`HvxxgC>yq>_{6?j#F zR}gq-yTHE|_&R~F68KVqFBJG(fzK59RDpjY@NohkCGg?dr>E?0}!IIf?ft4i3X#(4IHWc zju7qLwDssnG=0(rqa))HRzO$~A==_w?}8((#}R&wa5lnW2-_m8f-o3iN`UGEgr^a1 zLx_G7)N$xYbl*qqg^om*Pet=N70u^VG@nz^qoS5K?qFyAFKmKTEX}t44hdao1(Y3=h*EQ65-+yUW4p)%#qH~9Hu5+ky z=fAWwhcn1=(XqoZ*D=)5(ox!x!x3b^Xy0LR_?H4-An?xxJ_Eb_yWQ9d_X~O$^#AexKfC3b<(y@!Wu|4IrLiT}l0N8R z4!Oe1_e9!t>C?MIi#C0F#V2&^-mOK~-uXm9PEn9W6r>jgsYHQG6zHPBDhd=)Ab5Rk zOTa&WHo^0&t+?QL!T!Xi;Nx|{d`B0oKl*CH-!FLmruP>dFWCR;r3J_55xC&_O}mAU z*97|mZJprwX#yW4@RkA>ynfOO2#$ARx84!>F@X!7U#znP#}5^F8-Z6AcwvF3z^>jG z_$h&J6}aH%M;$9Teu%&Y`x8}geO1AHN)^nfRKa{o6+C{bU_PY^=2NO*KBYzquAg8& zr3&U#s$f2)3f6yBFrQKd^C?v@pHc@IMKIz`zp5jh$*L8=xQ@ZZB4!M@Q#<)7TD!THxB;)@7cIPbTKxZRov@?z4p5usP zrDL3x!EGh|$vcjT-u!t2F5yB!wSQHc%d4xrF zVUbB#q!kt^goQ&`ScQc}R9K!0i@$`$Jz?>?u(&QPei0Vug~e%MaZFeo78VDD#U5d? zLs)DP78``c8ey?qSS%J6^Mu80VKGfud@3x)3yY70#fQS;ePJxdu4sJkzhu1o zf4ggzYoM!kt+g0LtpEQ$$>Xkig1 zED8&Y{K6uau*fPbG6;**!on>qY{Ehj74mao@mN?q5EgfY#Z6&xRajgS7H5UUNnvqR zSo|O?_6dt`g~fJZ@wKp6CoEP8i>1P1p|F@MEM^LeslwtDVKGivj1m^Zg~ecD(O+2f z78c!vMMq)LMp(2E7G7adUs%)<7S)7BMPX4!SQHl)F~TBTSOg1;0>UD-R?-DePXg(#H@kH|x(R`Ro zu9EbF3$L8>`{HDvIO!u!dWe(G;-sB8i5DkL#YsbPQb(NB5GR$zNjY&+Qk=wzlSpw= zM4S{7Cwaw54snuMoTL*cDaDCXoM_@i6(@2|xr*(j_h0$nbM(qDtZ0q431@D$2ExCi zsIU;eqO}R{*XhD3gML7C9{NgQA$$(k`wIUK;l4^QDf~Nxvo75#`a856!b12;Qd=wh zJA}J?ZJ_Y)Xf7iHRzFY*pdJL={d0dR!FY#6%HJOcde7 zM7beDmKR zrZMkie+rzgbFurJfRM-1Wb1{HuO*3!?E7O?{%NMKsljrXtalA)4Yu6GJrNL=#Lj1&Ag$(PSfeI5p16_Lz1{z}Fu5nE zd@sIs%HIFg-n~cJSTBAYpS}0+Q2zzdz18XU;#Z*6TfcIeR9b+24J6 zgl3h{EEAf=LNiZjJ`|dnLi3K$Ock2fgl3}9j1iiVLNiQgo)MaXLep1ho)DUDLeoiT z+6qlep=l;GO@yX_(9{u{nnF`mXetU#IiV>jG{uCbkkH&FG`WQ)htOmdnq;A|LKC@u z6S*QZ7lr1W(3}>U<3jVD&>R$+JwmfXXtoH=Mxj|RG^>SXxzJN?(&2XW4R%iwZO+TUOB{bcICRJ$K2~CR7JSH?vg{Gm<)D@chg{GR& zR1%uo?BkYmfiCBpgeK@BO!V1wdgh?Cx_j+zD=)TgNTnTy=Ik z3!SmStNv>RZ^^wJ*%_G^85K#5)Ck`7e=)p0JSRLN_{6`;;q1Zl{~JQnLxV%jLZw5| z;Q!SB{jXr8{y)FeKmEz{-W|HP>eI7#=k6U^rFUr8BdvXU!g8s~kgEAoHAkvuN!4_z zdQ++)(zQ9+TTIgxe9$UhO#HcKQg7@VLU>E8LE7eq`P2-;ViFXoTO5%*Vp*2#;dVL-jqrDZE1WgB!dZhWoHe+@_uUoF8eHM5!4=LL+)~1QD4aF8!dZhW zoHe+@e!0R~gDadhxWZY3EBqbh3TF+DaMs`mXARD;*Z+Pw!dZhOoHaPYS%Y&(`12eP znteheobNl|3b(WK+T;I@340Ub3*w{WsqyOZ+_Ceq&9T|Bp|O-$g;>_)lgaCnrv;z= z*EG3AvW*^&E{jfz_Kenz7D&31v@2;|@TvbDld2`<3O@I5Q}EjVA&D&#%O_^>kNa!= zseXUIv0ps+#Q%eKiJcgH=3i}_KX~Q;4l~z`H0@0llhZrvZS-aYpZ4F}E9=FA&-+{L zPI3DNulq0RI?jG4!x`^%3m*073qI+8dt^>zMDSUEl_S~1XTlqTSN#tTHw%{zM?=R# zD?^imPx)^UDiR7O?2YgK^I^a8XfeE0suoGr$5QoyRJ|uvZ%fr1QuV4-O^~Y5QuTsV z4V9{=rD}jw^^vNcQq@(eI!aX=scIork4jZzsj4qkwWX?tR8^6xd!(wYRNW<2MWw2s zROOSZTcj$xRNWv|QK>Rg6;`UyA5!(3RQ)1Vr=;pfsX8iE2c&AZRDB~=o2BYYsahvh ztE6g~R4taOc~bSERLzvCccf~nRJ|ru6Qyd5RE?CXVN&&sR1K7>zEbssRCSZ8PEyrY zs#;1_GpTAKRSl%7j#Sl@s;W{|QL4&GRY|ETCRK%`>Ncs$Emb+BDyvi_OO=(Xh*Bk7 zk*bSQbxx{IOVx3y`cA42O4S~z+96e2q-vv7tyik>%K!Gq|IP~KesVsMss&Q@kyOo= zs&}PonpC|mRgTh}RcEPcFIBCis<~7>ELDx9>OrZh zB~|xHRb{EVTdGP+)typRM5=C=s=QKlvsB$ERdK0Glqy%M5|k?PyHuT*s-LCmq*Q$` zRfnZ&pH%IVs%=uWNvgh(snsu5E4 zoKy{#swbtYw^a3zsxDI1L8@9y)#Fn2h*Ui!RrRFm0ja7kRrg9&1*s|{RVAeA4yh_2 zRkuo2E~&ans2WUyLsIN=diQZnc<9Zx;XWMYyM@4oDE(Fuqg6s zWI&`vq)H@TBpf~(UKgGj9vSWyZV+7eFKg&rXh$d`cs;{>>g4!816}1y;8`RdQ ztx!`?TcWl=eH>Lf6Y`~VFaJ?xfBZ^PCH+R_OV3Cw3TQu%XP=_J=qkZ!A=R7sB! zY*p#Dr1K?fl-n{Vq)PhD#mtv(OM29621>WpN~&r|Rbi=;ei!#nE4Srsld8p1^}19& zEmiHLN_uqZ6_ai&u2k+XQngd6mP(cMv+9nNZcBOw!|f^Emh>HRr4t8NI&pBN69-rN znQ)~O2Uj|AaHSImw~TbJN+%AkbmHJjCl0Q(kFIp$;7TVBu5{wyN`K3_(uspBoj5qs ziGy=N`93<*iGw4ZI5^UYgL6dsb8VHXuYy;>+iO>z!r%C&UVHxk=}_K;_}ci4_=tFy z;0gdG;#p#6W7}hkf@=T_h_#4SiRFuhgR20nOP-lLGPzrFgWx&#B1-> z3a$;1=$>>pxpUp|!PNmCaVrGZ1iT!)Phh3K zQZbS{d?kD^ygGQl!0>QtxNf+3I2L?Pz}C=$(45U;jz>omU>U z9BNtAGN`3dOQDuTy$iJjY7x}JsD)4qq832C9W_7dZK(NBZ$-_Eng=yE>Mf|bP;W-f ziJAj7JL*lSH=<@k&59aDO+rmX^-(RVLG@5wR0lPJ8b%GFCXl*UQLmu>fqEJBchpO$ z7g2vhy?}Zi^$hB1)KjQGp`JuNfqESEN7NrszehcW`W@;~)FY_;T*D#!+JmSEQ1_$m zL*0wI2X!~5ZbtnYbrb4Ws2fqgMBRY;1?uOh>rvOCeulahbq(rj)K#b} zQ9ngpftrE37U7k1 zP~S#<3w0W)cX#IF|G)kCA6LY~74dLIJX{eESH!~=@o+^vToDgf#KRTwa78>^5f4|y z!xiyxMLb*)4_Cy)74eqie|5`Hm!d8~#TD^zMLb*)4_Cy)74dLIJX{eESH!~=@o+^v zToDgf#KRTwa78>^5f4|y!xiyxMLb*)4_CzF6?qeXCa0pliuwxbB-EEtC!$V39gjK= zbu8)_)X}J;P+vlQ5p^W$3#cPdpGO^zIt+Cv>T{?=PzRw7L>+*Nuln-(?Tgw6 zwKr-yYA@6$PsNhx#CDUDTSWHBhUg-iKNZwJK^A)O%4YqgFz# zhYb>?QH!A#MJ<4OJ8FK^+fehN-in$RH4kcT)LT$28?nm8+x)*g1>Tc9;QFo#4BsFQ7 z&;S43=l^XI-Lp0k6<5UKidb9`iz{MrMGUTp!4)yMA_iB);EEVr5rZpYa77HRh`|*x zxFQBu#Ndh;ToLm#{al$dsHag+q2h`dToHpSVsJ$au86@EF}NZISH$3o7+ev9D`Id( z46ca56*0IX23N%3iWpvz9r%;;4eEB(ZKzvOH==%tx&ieI)X!1Zqpm~!40SE)8r0RO zt58>>eu}yRbvf!X)TO9PP(MM8S6ZzK!}8>NM0hQKzE5fjR~Cb=1kI6HzCijz=AbIu>;d>S)was4tK%u zxFQx;#NvurToH>aVsS+*u874IvA7}@SH!-CKclarzJfXl6<5UKidb9`iz{MrMJ%p} z#TBu*A{JM~;)+;Y5sNEgaYZbyh{YALxFQx;#NvurToL;e{#*@09f&#r6<5UKidb9` ziz{MzMS9?$ISsWtYB$ubs9jJyqo$&ELhXp!0ku79JJhzQZBSdIwn9xoZHD?N>LaKR zqc%ltg4!7MA=E~w4N)7Q)<>;}`XFju)HRzj_adJk#^ z)Vop3qn1N0i&_S?G-@f-lBjo~mO#A|wK!@q)S{?&pcX+bj9LgaAL^~Bc~SGA=0?2* zH5cm5s5wz{pk_zC3H3(QY^YgLZ$Qn08b^(xzMB|)_}$>l&;R@L1^<8fC*5~Gu84mh zer+|>s;E^^aYcMw5g%8?#})B$MSNTlA6LZ374dOJd|VM9SH#B^@o`0bToE5v#K#r! zaYcMw5g%8?FNi-^1yFBC&5w#J;^T_=xFSBTh>t7cd&ZWP*0SolhQ8%G}j=COo9qMPOYf;yru0~yjx)SwM)D@`9QJ0}EMO}jW z32FxFV$?;b3sD!K&PSbx`T^?usIyULq0U5oFL+3s_u6#;{?)bb{2JGu|1Xl%C?S6M z|Mv<2e|aFC`LCJxK;}J=c@JdX1DW?g<~@*k4`kj0nfJhd3`)J~`!QSnt&etZ1dcBpMp@l{lQYy8?)s41u|QCpxsj@lfxDQXkc#;6aW iHbQNP+5ojaYCY5kQR|}CL9LDY0BS8%d=-^n^M3%!j&a}s diff --git a/.sf/backups/db/sf.db.2026-05-11T02-27-37-024Z b/.sf/backups/db/sf.db.2026-05-11T02-27-37-024Z new file mode 100644 index 0000000000000000000000000000000000000000..f984667e380e797547d07fb07b88efe07e6d483b GIT binary patch literal 1163264 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%0AV#~bA=BzRv6kw)a|)PUxpFm5 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ΞQKBbKdflihGrrU?O0q*B{ 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

#ny`EvgD1xhuf`(G?{n({$Nbelx#h2Vk@yQ} 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 z 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%0Av~) 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%0Dkw&Cb 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 n3DsDJm;0 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 diff --git a/FEATURES.md b/FEATURES.md index 2c23f4fb8..3791cd5af 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -399,7 +399,6 @@ Generated from `src/resources/extensions/*/extension-manifest.json`. - `slash-commands` — [extension-manifest.json](src/resources/extensions/slash-commands/extension-manifest.json) - `ttsr` — [extension-manifest.json](src/resources/extensions/ttsr/extension-manifest.json) - `universal-config` — [extension-manifest.json](src/resources/extensions/universal-config/extension-manifest.json) -- `vectordrive` — [extension-manifest.json](src/resources/extensions/vectordrive/extension-manifest.json) - `voice` — [extension-manifest.json](src/resources/extensions/voice/extension-manifest.json) ### Search Providers diff --git a/package.json b/package.json index fa9641cb1..7365dbb01 100644 --- a/package.json +++ b/package.json @@ -44,12 +44,11 @@ "scripts": { "build:pi-tui": "npm --workspace @singularity-forge/tui run build", "build:pi-ai": "npm --workspace @singularity-forge/ai run build", - "build:pi-agent-core": "npm --workspace @singularity-forge/agent-core run build", "build:pi-coding-agent": "npm --workspace @singularity-forge/coding-agent run build", "build:native-pkg": "npm --workspace @singularity-forge/native run build", "build:rpc-client": "npm --workspace @singularity-forge/rpc-client run build", "build:google-gemini-cli-provider": "npm --workspace @singularity-forge/google-gemini-cli-provider run build", - "build:pi": "npm run build:native-pkg && npm run build:pi-tui && npm run build:google-gemini-cli-provider && npm run build:pi-ai && npm run build:pi-agent-core && npm run build:pi-coding-agent", + "build:pi": "npm run build:native-pkg && npm run build:pi-tui && npm run build:google-gemini-cli-provider && npm run build:pi-ai && npm run build:pi-coding-agent", "build:daemon": "npm --workspace @singularity-forge/daemon run build", "build:core": "npm run build:pi && npm run build:rpc-client && npm run build:daemon && npm run check:versioned-json && tsgo && npm run copy-resources && npm run copy-themes && npm run copy-export-html", "build": "npm run build:core && node scripts/build-web-if-stale.cjs", diff --git a/packages/pi-agent-core/package.json b/packages/pi-agent-core/package.json deleted file mode 100644 index 4995b66cb..000000000 --- a/packages/pi-agent-core/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "@singularity-forge/pi-agent-core", - "version": "2.75.3", - "description": "SF database abstraction layer and agent-core primitives (TypeScript)", - "type": "module", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - }, - "./db/sf-db": { - "types": "./dist/db/sf-db.d.ts", - "import": "./dist/db/sf-db.js" - } - }, - "scripts": { - "build": "tsc -p tsconfig.json" - }, - "dependencies": {}, - "engines": { - "node": ">=26.1.0" - } -} diff --git a/packages/pi-agent-core/src/db/errors.ts b/packages/pi-agent-core/src/db/errors.ts deleted file mode 100644 index 3eb2bdf61..000000000 --- a/packages/pi-agent-core/src/db/errors.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * SF Error Types — Typed error hierarchy for diagnostics and crash recovery. - * - * All SF-specific errors extend SFError, which carries a stable `code` - * string suitable for programmatic matching. Error codes are defined as - * constants so callers can switch on them without string-matching. - */ - -// ─── Error Codes ────────────────────────────────────────────────────────────── -export const SF_STALE_STATE = "SF_STALE_STATE"; -export const SF_LOCK_HELD = "SF_LOCK_HELD"; -export const SF_ARTIFACT_MISSING = "SF_ARTIFACT_MISSING"; -export const SF_GIT_ERROR = "SF_GIT_ERROR"; -export const SF_MERGE_CONFLICT = "SF_MERGE_CONFLICT"; -export const SF_PARSE_ERROR = "SF_PARSE_ERROR"; -export const SF_IO_ERROR = "SF_IO_ERROR"; - -// ─── Base Error ─────────────────────────────────────────────────────────────── -export class SFError extends Error { - code: string; - constructor(code: string, message: string, options?: ErrorOptions) { - super(message, options); - this.name = "SFError"; - this.code = code; - } -} diff --git a/packages/pi-agent-core/src/db/gate-registry.ts b/packages/pi-agent-core/src/db/gate-registry.ts deleted file mode 100644 index 71457da7d..000000000 --- a/packages/pi-agent-core/src/db/gate-registry.ts +++ /dev/null @@ -1,231 +0,0 @@ -/** - * SF Gate Registry — single source of truth for quality-gate ownership. - * - * Each gate declares which workflow turn owns it, the scope at which it is - * persisted in the `quality_gates` table, and the question/guidance text used - * in the prompt that turn sends. - */ -import { SF_PARSE_ERROR, SFError } from "./errors.js"; - -export type GateId = - | "Q3" - | "Q4" - | "Q5" - | "Q6" - | "Q7" - | "Q8" - | "MV01" - | "MV02" - | "MV03" - | "MV04"; - -export interface GateDefinition { - id: GateId; - scope: "slice" | "task" | "milestone"; - ownerTurn: string; - question: string; - guidance: string; - promptSection: string; - minOmissionWords: number; -} - -export const GATE_REGISTRY: Record = { - Q3: { - id: "Q3", - scope: "slice", - ownerTurn: "gate-evaluate", - question: "How can this be exploited?", - guidance: [ - "Identify abuse scenarios: parameter tampering, replay attacks, privilege escalation.", - "Map data exposure risks: PII, tokens, secrets accessible through this slice.", - "Define input trust boundaries: untrusted user input reaching DB, API, or filesystem.", - "If none apply, return verdict 'omitted' with rationale explaining why.", - ].join("\n"), - promptSection: "Abuse Surface", - minOmissionWords: 20, - }, - Q4: { - id: "Q4", - scope: "slice", - ownerTurn: "gate-evaluate", - question: "What existing promises does this break?", - guidance: [ - "List which existing requirements (R001, R003, etc.) are touched by this slice.", - "Identify what must be re-tested after shipping.", - "Flag decisions that should be revisited given the new scope.", - "If no existing requirements are affected, return verdict 'omitted'.", - ].join("\n"), - promptSection: "Broken Promises", - minOmissionWords: 0, - }, - Q5: { - id: "Q5", - scope: "task", - ownerTurn: "execute-task", - question: "What breaks when dependencies fail?", - guidance: [ - "Enumerate the task's external dependencies (APIs, filesystem, network, subprocesses).", - "Describe the failure path for each: timeout, malformed response, connection loss.", - "Verify the implementation handles each failure or explicitly bubbles the error.", - "Return verdict 'omitted' only if the task has no external dependencies.", - ].join("\n"), - promptSection: "Failure Modes", - minOmissionWords: 15, - }, - Q6: { - id: "Q6", - scope: "task", - ownerTurn: "execute-task", - question: "What is the 10x load breakpoint?", - guidance: [ - "Identify the resource that saturates first at 10x the expected load.", - "Describe the protection applied (pool sizing, rate limiting, pagination, caching).", - "Return verdict 'omitted' if the task has no runtime load dimension.", - ].join("\n"), - promptSection: "Load Profile", - minOmissionWords: 10, - }, - Q7: { - id: "Q7", - scope: "task", - ownerTurn: "execute-task", - question: "What negative tests protect this task?", - guidance: [ - "List malformed inputs, error paths, and boundary conditions the tests cover.", - "Point to the specific test files or cases that assert each negative scenario.", - "Return verdict 'omitted' only if the task has no meaningful negative surface.", - ].join("\n"), - promptSection: "Negative Tests", - minOmissionWords: 15, - }, - Q8: { - id: "Q8", - scope: "slice", - ownerTurn: "complete-slice", - question: "How will ops know this slice is healthy or broken?", - guidance: [ - "Describe the health signal (metric, log line, dashboard) that proves the slice works.", - "Describe the failure signal that triggers an alert or paging.", - "Document the recovery procedure and any monitoring gaps.", - "Return verdict 'omitted' only for slices with no runtime behavior at all.", - ].join("\n"), - promptSection: "Operational Readiness", - minOmissionWords: 0, - }, - MV01: { - id: "MV01", - scope: "milestone", - ownerTurn: "validate-milestone", - question: "Is every success criterion in the milestone roadmap satisfied?", - guidance: [ - "Walk the success-criteria checklist from the milestone roadmap.", - "For each criterion, point to the slice / assessment / verification evidence that proves it.", - "Return verdict 'flag' if any criterion is unmet or unverifiable.", - ].join("\n"), - promptSection: "Success Criteria Checklist", - minOmissionWords: 0, - }, - MV02: { - id: "MV02", - scope: "milestone", - ownerTurn: "validate-milestone", - question: "Does every slice have a SUMMARY.md and a passing assessment?", - guidance: [ - "Confirm every slice listed in the roadmap has a SUMMARY.md.", - "Confirm each slice has an ASSESSMENT verdict of 'pass' (or justified 'omitted').", - "Flag missing artifacts and slices with outstanding follow-ups or known limitations.", - ].join("\n"), - promptSection: "Slice Delivery Audit", - minOmissionWords: 0, - }, - MV03: { - id: "MV03", - scope: "milestone", - ownerTurn: "validate-milestone", - question: "Do the slices integrate end-to-end?", - guidance: [ - "Trace at least one cross-slice flow proving the pieces compose.", - "Flag gaps where two slices were built in isolation with no integration evidence.", - ].join("\n"), - promptSection: "Cross-Slice Integration", - minOmissionWords: 0, - }, - MV04: { - id: "MV04", - scope: "milestone", - ownerTurn: "validate-milestone", - question: "Are all touched requirements covered and still coherent?", - guidance: [ - "For each requirement advanced, validated, surfaced, or invalidated across the milestone's slices, confirm the milestone-level evidence matches.", - "Flag requirements that slices claim to advance but no artifact proves.", - ].join("\n"), - promptSection: "Requirement Coverage", - minOmissionWords: 0, - }, -}; - -const ORDERED_GATES = Object.values(GATE_REGISTRY); - -export function getGatesForTurn(turn: string): GateDefinition[] { - return ORDERED_GATES.filter((g) => g.ownerTurn === turn); -} - -export function getGateIdsForTurn(turn: string): Set { - return new Set(getGatesForTurn(turn).map((g) => g.id)); -} - -export function getGateDefinition(id: string): GateDefinition | undefined { - return GATE_REGISTRY[id as GateId]; -} - -export function getOwnerTurn(id: string): string { - const def = GATE_REGISTRY[id as GateId]; - if (!def) { - throw new SFError(SF_PARSE_ERROR, `gate-registry: unknown gate id "${id}"`); - } - return def.ownerTurn; -} - -export interface PendingGateRow { - gate_id: string; - [key: string]: unknown; -} - -export function assertGateCoverage( - pending: PendingGateRow[], - turn: string, - options: { requireAll?: boolean } = {}, -): void { - const requireAll = options.requireAll ?? true; - const expected = getGateIdsForTurn(turn); - const pendingIds = new Set(pending.map((g) => g.gate_id)); - const unknown: string[] = []; - for (const id of pendingIds) { - const def = getGateDefinition(id); - if (!def) { - unknown.push(id); - continue; - } - if (def.ownerTurn !== turn) { - unknown.push(`${id} (owned by ${def.ownerTurn}, not ${turn})`); - } - } - if (unknown.length > 0) { - throw new SFError( - SF_PARSE_ERROR, - `assertGateCoverage: turn "${turn}" received pending gates it does not own: ${unknown.join(", ")}`, - ); - } - if (requireAll) { - const missing: string[] = []; - for (const id of expected) { - if (!pendingIds.has(id)) missing.push(id); - } - if (missing.length > 0) { - throw new SFError( - SF_PARSE_ERROR, - `assertGateCoverage: turn "${turn}" is missing required gates: ${missing.join(", ")}`, - ); - } - } -} diff --git a/packages/pi-agent-core/src/db/index.ts b/packages/pi-agent-core/src/db/index.ts deleted file mode 100644 index 5906c3fe8..000000000 --- a/packages/pi-agent-core/src/db/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./errors.js"; -export * from "./gate-registry.js"; -export * from "./sf-db.js"; -export * from "./task-frontmatter.js"; -export * from "./workflow-logger.js"; diff --git a/packages/pi-agent-core/src/db/sf-db.ts b/packages/pi-agent-core/src/db/sf-db.ts deleted file mode 100644 index 9011007fa..000000000 --- a/packages/pi-agent-core/src/db/sf-db.ts +++ /dev/null @@ -1,9261 +0,0 @@ -// ─── Type declarations ───────────────────────────────────────────────────── - -/** Generic DB row returned by prepared statement queries. */ -export type DbRow = Record; - -/** Wrapper around node:sqlite prepared statements. */ -export interface DbStatement { - run(...params: unknown[]): { - changes?: number; - lastInsertRowid?: number | bigint; - }; - get(...params: unknown[]): DbRow | undefined; - all(...params: unknown[]): DbRow[]; -} - -/** Adapter wrapping a DatabaseSync instance with a statement cache. */ -export interface DbAdapter { - exec(sql: string): void; - prepare(sql: string): DbStatement; - close(): void; -} - -// ─── Input interfaces ─────────────────────────────────────────────────────── - -export interface DecisionInput { - id: string; - when_context?: string; - scope?: string; - decision?: string; - choice?: string; - rationale?: string; - revisable?: string; - made_by?: string; - superseded_by?: string | null; - [key: string]: unknown; -} - -export interface RequirementInput { - id: string; - class?: string; - status?: string; - description?: string; - why?: string; - source?: string; - primary_owner?: string; - supporting_slices?: string; - validation?: string; - notes?: string; - full_content?: string; - [key: string]: unknown; -} - -export interface ArtifactInput { - path: string; - artifact_type?: string; - milestone_id?: string | null; - slice_id?: string | null; - task_id?: string | null; - full_content?: string; - [key: string]: unknown; -} - -export interface PlanningPayload { - vision?: string; - successCriteria?: unknown[]; - keyRisks?: unknown[]; - proofStrategy?: unknown[]; - verificationContract?: string; - verificationIntegration?: string; - verificationOperational?: string; - verificationUat?: string; - definitionOfDone?: unknown[]; - requirementCoverage?: string; - boundaryMapMarkdown?: string; - visionMeeting?: unknown; - productResearch?: unknown; - [key: string]: unknown; -} - -export interface SlicePlanningPayload { - goal?: string; - successCriteria?: string; - proofLevel?: string; - integrationClosure?: string; - observabilityImpact?: string; - adversarialReview?: { - partner?: string; - combatant?: string; - architect?: string; - }; - planningMeeting?: unknown; - [key: string]: unknown; -} - -export interface MilestoneInput { - id: string; - title?: string; - status?: string; - vision?: string; - created_at?: string; - planning?: PlanningPayload; - depends_on?: string[]; - sequence?: number; - [key: string]: unknown; -} - -export interface SliceInput { - milestone_id: string; - id: string; - title?: string; - status?: string; - created_at?: string; - planning?: SlicePlanningPayload; - risk?: string; - depends?: string[]; - demo?: string; - sequence?: number; - isSketch?: boolean; - sketchScope?: string; - [key: string]: unknown; -} - -export interface TaskPlanningPayload { - description?: string; - estimate?: string; - files?: unknown[]; - verify?: string; - inputs?: unknown[]; - expectedOutput?: string; - observabilityImpact?: string; - specIntent?: string; - [key: string]: unknown; -} - -export interface TaskInput { - milestone_id: string; - slice_id: string; - id: string; - title?: string; - status?: string; - created_at?: string; - planning?: TaskPlanningPayload; - [key: string]: unknown; -} - -export interface VerificationEvidenceInput { - task_id: string; - slice_id: string; - milestone_id: string; - command: string; - exit_code?: number; - verdict: string; - duration_ms?: number; - created_at: string; - [key: string]: unknown; -} - -export interface QualityGateInput { - milestone_id: string; - slice_id: string; - gate_id: string; - scope?: string; - task_id?: string; - status?: string; - verdict?: string; - rationale?: string; - findings?: string; - evaluated_at?: string | null; - [key: string]: unknown; -} - -// SF Database Abstraction Layer -// Provides a SQLite database via node:sqlite (Node >= 26 built-in). -// -// Exposes a unified sync API for decisions and requirements storage. -// Schema is initialized on first open with WAL mode for file-backed DBs. -// -// ─── Single-writer invariant ───────────────────────────────────────────── -// This file is the ONLY place in the codebase that issues write SQL -// (INSERT / UPDATE / DELETE / REPLACE / BEGIN-COMMIT transactions) against -// the engine database at `.sf/sf.db`. All other modules must call the -// typed wrappers exported here. The structural test -// `tests/single-writer-invariant.test.ts` fails CI if a new bypass appears. -// -// `_getAdapter()` is retained for read-only SELECTs in query modules -// (context-store, memory-store queries, doctor checks, projections). -// Do NOT use it for writes — add a wrapper here instead. -// -// The separate `.sf/unit-claims.db` managed by `unit-ownership.ts` is an -// intentionally independent store for cross-worktree claim races and is -// excluded from this invariant. -import { - copyFileSync, - existsSync, - mkdirSync, - readdirSync, - readFileSync, - realpathSync, - statSync, - unlinkSync, - writeFileSync, -} from "node:fs"; -import { dirname, join } from "node:path"; -import { DatabaseSync } from "node:sqlite"; -import { SF_STALE_STATE, SFError } from "./errors.js"; -import { getGateIdsForTurn } from "./gate-registry.js"; -import { - normalizeSchedulerStatus, - normalizeTaskStatus, - taskFrontmatterFromRecord, - withTaskFrontmatter, -} from "./task-frontmatter.js"; -import { readTraceEvents } from "./uok/trace-writer.js"; -import { logError, logWarning } from "./workflow-logger.js"; - -let loadAttempted = false; -function loadProvider(): void { - if (loadAttempted) return; - loadAttempted = true; - // node:sqlite is built-in in Node >= 26 -} -function normalizeRow(row: unknown): Record | undefined { - if (row == null) return undefined; - if (Object.getPrototypeOf(row) === null) { - return { ...(row as Record) }; - } - return row as Record; -} -function normalizeRows(rows: unknown[]): Record[] { - return rows - .map((r) => normalizeRow(r)) - .filter((r): r is Record => r != null); -} -const DB_QUERY_TIMEOUT_MS = 30_000; -const DB_BACKUP_MIN_INTERVAL_MS = 15 * 60 * 1000; -const DB_BACKUP_RETENTION = 24; -const DB_FULL_VACUUM_MIN_INTERVAL_MS = 6 * 60 * 60 * 1000; - -function createAdapter(rawDb: import("node:sqlite").DatabaseSync): DbAdapter { - const db: import("node:sqlite").DatabaseSync = rawDb; - const stmtCache = new Map(); - function wrapStmt(raw: import("node:sqlite").StatementSync): DbStatement { - return { - run(...params: unknown[]) { - return raw.run(...params); - }, - get(...params: unknown[]) { - return normalizeRow(raw.get(...params)); - }, - all(...params: unknown[]) { - return normalizeRows(raw.all(...params) as unknown[]); - }, - }; - } - return { - exec(sql) { - db.exec(sql); - }, - prepare(sql) { - let cached = stmtCache.get(sql); - if (cached) return cached; - cached = wrapStmt(db.prepare(sql)); - stmtCache.set(sql, cached); - return cached; - }, - close() { - stmtCache.clear(); - db.close(); - }, - }; -} - -/** - * Execute a database query with timeout protection. - * Falls back to empty result if query exceeds timeout. - * - * Purpose: Prevent hanging reads from blocking autonomous dispatch. - * - * Consumer: memory-repository.js, context-store.js, and any read query - * that needs a safety ceiling. - */ -export function withQueryTimeout( - operation: () => T, - fallbackValue: T, - timeoutMs = DB_QUERY_TIMEOUT_MS, -): T { - try { - return operation(); - } catch (err) { - const errMsg = (err as Error)?.message; - if (errMsg?.includes("timeout") || errMsg?.includes("busy")) { - logWarning( - "sf-db", - `Query timed out after ${timeoutMs}ms, returning fallback`, - ); - return fallbackValue; - } - throw err; - } -} -function openRawDb(path: string): import("node:sqlite").DatabaseSync { - loadProvider(); - return new DatabaseSync(path); -} -function sqliteStringLiteral(value: string | number): string { - return `'${String(value).replaceAll("'", "''")}'`; -} -function databaseBackupDir(path: string): string { - return join(dirname(path), "backups", "db"); -} -function latestDatabaseBackupMtime(dir: string): number { - if (!existsSync(dir)) return 0; - let latest = 0; - for (const entry of readdirSync(dir)) { - if (!entry.startsWith("sf.db.")) continue; - const file = join(dir, entry); - try { - const stat = statSync(file); - if (stat.isFile() && stat.mtimeMs > latest) latest = stat.mtimeMs; - } catch { - // Ignore files that disappear during pruning. - } - } - return latest; -} -function pruneDatabaseBackups(dir: string): void { - if (!existsSync(dir)) return; - const backups = []; - for (const entry of readdirSync(dir)) { - if (!entry.startsWith("sf.db.")) continue; - const file = join(dir, entry); - try { - const stat = statSync(file); - if (stat.isFile()) backups.push({ file, mtimeMs: stat.mtimeMs }); - } catch { - // Ignore files that disappear during pruning. - } - } - backups.sort((a, b) => b.mtimeMs - a.mtimeMs); - for (const backup of backups.slice(DB_BACKUP_RETENTION)) { - try { - unlinkSync(backup.file); - } catch { - // Best-effort retention; never block DB open on pruning. - } - } -} -function databaseMaintenancePath(path: string): string { - return join(databaseBackupDir(path), "maintenance.json"); -} -function readDatabaseMaintenanceState(path: string): Record { - try { - return JSON.parse(readFileSync(databaseMaintenancePath(path), "utf-8")); - } catch { - return {}; - } -} -function writeDatabaseMaintenanceState( - path: string, - state: Record, -): void { - try { - writeFileSync( - databaseMaintenancePath(path), - JSON.stringify(state, null, 2) + "\n", - "utf-8", - ); - } catch { - // Best-effort maintenance metadata. - } -} -function createDatabaseSnapshot( - rawDb: import("node:sqlite").DatabaseSync, - path: string, -): void { - if (path === ":memory:" || process.env.SF_DB_BACKUP_DISABLE === "1") return; - const dir = databaseBackupDir(path); - try { - mkdirSync(dir, { recursive: true }); - const latest = latestDatabaseBackupMtime(dir); - if (latest > 0 && Date.now() - latest < DB_BACKUP_MIN_INTERVAL_MS) return; - const stamp = new Date().toISOString().replace(/[:.]/g, "-"); - const backupPath = join(dir, `sf.db.${stamp}`); - rawDb.exec(`VACUUM INTO ${sqliteStringLiteral(backupPath)}`); - pruneDatabaseBackups(dir); - } catch (err) { - logWarning( - "sf-db", - `database snapshot failed: ${err instanceof Error ? err.message : String(err)}`, - ); - } -} -function performDatabaseMaintenance( - rawDb: import("node:sqlite").DatabaseSync, - path: string, -): void { - if (path === ":memory:" || process.env.SF_DB_MAINTENANCE_DISABLE === "1") - return; - try { - const quickCheck = rawDb.prepare("PRAGMA quick_check").get(); - if (quickCheck?.quick_check !== "ok") { - logWarning("sf-db", "database quick_check failed; skipping maintenance"); - return; - } - rawDb.exec("PRAGMA wal_checkpoint(PASSIVE)"); - rawDb.exec("PRAGMA optimize"); - rawDb.exec("PRAGMA incremental_vacuum(128)"); - - const state = readDatabaseMaintenanceState(path); - const lastFullVacuumAt = - typeof state.lastFullVacuumAt === "string" - ? Date.parse(state.lastFullVacuumAt) - : 0; - if ( - !Number.isFinite(lastFullVacuumAt) || - Date.now() - lastFullVacuumAt >= DB_FULL_VACUUM_MIN_INTERVAL_MS - ) { - rawDb.exec("VACUUM"); - writeDatabaseMaintenanceState(path, { - ...state, - lastFullVacuumAt: new Date().toISOString(), - }); - } - } catch (err) { - logWarning( - "sf-db", - `database maintenance failed: ${err instanceof Error ? err.message : String(err)}`, - ); - } -} -const SCHEMA_VERSION = 58; -function indexExists(db: DbAdapter, name: string): boolean { - return !!db - .prepare( - "SELECT 1 as present FROM sqlite_master WHERE type = 'index' AND name = ?", - ) - .get(name); -} -function dedupeVerificationEvidenceRows(db: DbAdapter): void { - db.exec(` - DELETE FROM verification_evidence - WHERE rowid NOT IN ( - SELECT MIN(rowid) - FROM verification_evidence - GROUP BY task_id, slice_id, milestone_id, command, verdict - ) - `); -} -function ensureVerificationEvidenceDedupIndex(db: DbAdapter) { - if (indexExists(db, "idx_verification_evidence_dedup")) return; - dedupeVerificationEvidenceRows(db); - db.exec( - "CREATE UNIQUE INDEX IF NOT EXISTS idx_verification_evidence_dedup ON verification_evidence(task_id, slice_id, milestone_id, command, verdict)", - ); -} -function ensureRepoProfileTables(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS repo_profiles ( - profile_id TEXT PRIMARY KEY, - project_hash TEXT NOT NULL, - project_root TEXT NOT NULL DEFAULT '', - head TEXT DEFAULT NULL, - branch TEXT DEFAULT NULL, - remote_hash TEXT DEFAULT NULL, - dirty INTEGER NOT NULL DEFAULT 0, - profile_json TEXT NOT NULL DEFAULT '{}', - created_at TEXT NOT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS repo_file_observations ( - path TEXT PRIMARY KEY, - latest_profile_id TEXT NOT NULL, - git_status TEXT NOT NULL, - ownership TEXT NOT NULL, - language TEXT DEFAULT NULL, - size_bytes INTEGER NOT NULL DEFAULT 0, - content_hash TEXT DEFAULT NULL, - summary TEXT DEFAULT NULL, - first_seen_at TEXT NOT NULL, - last_seen_at TEXT NOT NULL, - adopted_at TEXT DEFAULT NULL, - adoption_unit_id TEXT DEFAULT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_repo_profiles_created ON repo_profiles(created_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_repo_file_observations_status ON repo_file_observations(git_status, ownership)", - ); -} -function ensureBacklogTables(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS backlog_items ( - id TEXT PRIMARY KEY, - title TEXT NOT NULL, - status TEXT NOT NULL DEFAULT 'pending', - note TEXT NOT NULL DEFAULT '', - source TEXT NOT NULL DEFAULT '', - triage_run_id TEXT DEFAULT NULL, - sequence INTEGER NOT NULL DEFAULT 0, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - promoted_at TEXT DEFAULT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_backlog_items_status_sequence ON backlog_items(status, sequence, id)", - ); -} -function ensureScheduleTables(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS schedule_entries ( - seq INTEGER PRIMARY KEY AUTOINCREMENT, - scope TEXT NOT NULL DEFAULT 'project', - id TEXT NOT NULL, - schema_version INTEGER NOT NULL DEFAULT 1, - kind TEXT NOT NULL DEFAULT 'reminder', - status TEXT NOT NULL DEFAULT 'pending', - due_at TEXT NOT NULL DEFAULT '', - created_at TEXT NOT NULL DEFAULT '', - snoozed_at TEXT DEFAULT NULL, - payload_json TEXT NOT NULL DEFAULT '{}', - created_by TEXT NOT NULL DEFAULT 'user', - autonomous_dispatch INTEGER NOT NULL DEFAULT 0, - full_json TEXT NOT NULL DEFAULT '{}', - imported_from TEXT DEFAULT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_schedule_entries_scope_id_created ON schedule_entries(scope, id, created_at DESC, seq DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_schedule_entries_scope_due ON schedule_entries(scope, status, due_at)", - ); - ensureColumn( - db, - "schedule_entries", - "autonomous_dispatch", - "ALTER TABLE schedule_entries ADD COLUMN autonomous_dispatch INTEGER NOT NULL DEFAULT 0", - ); -} -function ensureSolverEvalTables(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS solver_eval_runs ( - run_id TEXT PRIMARY KEY, - suite_source TEXT NOT NULL DEFAULT '', - cases_count INTEGER NOT NULL DEFAULT 0, - summary_json TEXT NOT NULL DEFAULT '{}', - report_path TEXT NOT NULL DEFAULT '', - results_path TEXT NOT NULL DEFAULT '', - db_recorded INTEGER NOT NULL DEFAULT 1, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS solver_eval_case_results ( - run_id TEXT NOT NULL, - case_id TEXT NOT NULL, - title TEXT NOT NULL DEFAULT '', - mode TEXT NOT NULL, - passed INTEGER NOT NULL DEFAULT 0, - false_complete INTEGER NOT NULL DEFAULT 0, - duration_ms INTEGER DEFAULT NULL, - command_status INTEGER DEFAULT NULL, - solver_outcome TEXT DEFAULT NULL, - pdd_complete INTEGER DEFAULT NULL, - result_json TEXT NOT NULL DEFAULT '{}', - created_at TEXT NOT NULL, - PRIMARY KEY (run_id, case_id, mode), - FOREIGN KEY (run_id) REFERENCES solver_eval_runs(run_id) ON DELETE CASCADE - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_solver_eval_runs_created ON solver_eval_runs(created_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_solver_eval_case_lookup ON solver_eval_case_results(run_id, case_id)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_solver_eval_case_false_complete ON solver_eval_case_results(false_complete, mode)", - ); -} -function ensureSessionTables(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS sessions ( - session_id TEXT PRIMARY KEY, - trace_id TEXT DEFAULT NULL, - mode TEXT NOT NULL DEFAULT 'interactive', - cwd TEXT NOT NULL DEFAULT '', - repo TEXT DEFAULT NULL, - branch TEXT DEFAULT NULL, - summary TEXT DEFAULT NULL, - summary_count INTEGER NOT NULL DEFAULT 0, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS turns ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - session_id TEXT NOT NULL REFERENCES sessions(session_id) ON DELETE CASCADE, - turn_index INTEGER NOT NULL, - user_message TEXT, - assistant_response TEXT, - ts TEXT NOT NULL, - UNIQUE(session_id, turn_index) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS session_file_touches ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - session_id TEXT NOT NULL REFERENCES sessions(session_id) ON DELETE CASCADE, - path TEXT NOT NULL, - tool_name TEXT DEFAULT NULL, - turn_id INTEGER DEFAULT NULL REFERENCES turns(id), - first_seen_at TEXT NOT NULL, - UNIQUE(session_id, path) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS session_refs ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - session_id TEXT NOT NULL REFERENCES sessions(session_id) ON DELETE CASCADE, - ref_type TEXT NOT NULL, - ref_value TEXT NOT NULL, - turn_id INTEGER DEFAULT NULL REFERENCES turns(id), - created_at TEXT NOT NULL, - UNIQUE(session_id, ref_type, ref_value) - ) - `); - // FTS5 external-content table over turns for keyword recall. - // content_rowid links to turns.id; triggers below keep it in sync. - db.exec(` - CREATE VIRTUAL TABLE IF NOT EXISTS turns_fts USING fts5( - user_message, - assistant_response, - content='turns', - content_rowid='id' - ) - `); - db.exec(` - CREATE TRIGGER IF NOT EXISTS turns_fts_insert AFTER INSERT ON turns BEGIN - INSERT INTO turns_fts(rowid, user_message, assistant_response) - VALUES (new.id, new.user_message, new.assistant_response); - END - `); - db.exec(` - CREATE TRIGGER IF NOT EXISTS turns_fts_update AFTER UPDATE ON turns BEGIN - INSERT INTO turns_fts(turns_fts, rowid, user_message, assistant_response) - VALUES ('delete', old.id, old.user_message, old.assistant_response); - INSERT INTO turns_fts(rowid, user_message, assistant_response) - VALUES (new.id, new.user_message, new.assistant_response); - END - `); - db.exec(` - CREATE TRIGGER IF NOT EXISTS turns_fts_delete AFTER DELETE ON turns BEGIN - INSERT INTO turns_fts(turns_fts, rowid, user_message, assistant_response) - VALUES ('delete', old.id, old.user_message, old.assistant_response); - END - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_sessions_created ON sessions(created_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_sessions_repo ON sessions(repo, created_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_turns_session ON turns(session_id, turn_index)", - ); - db.exec("CREATE INDEX IF NOT EXISTS idx_turns_ts ON turns(ts DESC)"); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_session_file_touches_session ON session_file_touches(session_id, first_seen_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_session_file_touches_path ON session_file_touches(path, session_id)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_session_refs_session ON session_refs(session_id, created_at DESC)", - ); -} -function ensureSessionSnapshotTable(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS session_snapshots ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - -- Session that triggered this checkpoint. FK to sessions(session_id). - session_id TEXT NOT NULL, - -- Zero-based counter within the session (first snapshot = 0). - snapshot_index INTEGER NOT NULL DEFAULT 0, - -- Optional git stash ref so the snapshot can be restored exactly. - -- NULL when the working tree had no changes to stash. - git_stash_ref TEXT, - -- Free-text label for the snapshot (e.g. "before migration deploy"). - label TEXT, - ts TEXT NOT NULL, - UNIQUE(session_id, snapshot_index) - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_session_snapshots_session ON session_snapshots(session_id, snapshot_index)", - ); -} -function ensureHeadlessRunTables(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS headless_runs ( - run_id TEXT PRIMARY KEY, - command TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT '', - exit_code INTEGER NOT NULL DEFAULT 0, - timed_out INTEGER NOT NULL DEFAULT 0, - interrupted INTEGER NOT NULL DEFAULT 0, - restart_count INTEGER NOT NULL DEFAULT 0, - max_restarts INTEGER NOT NULL DEFAULT 0, - duration_ms INTEGER NOT NULL DEFAULT 0, - total_events INTEGER NOT NULL DEFAULT 0, - tool_calls INTEGER NOT NULL DEFAULT 0, - solver_eval_run_id TEXT DEFAULT NULL, - solver_eval_report_path TEXT DEFAULT NULL, - details_json TEXT NOT NULL DEFAULT '{}', - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_headless_runs_created ON headless_runs(created_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_headless_runs_status ON headless_runs(status, created_at DESC)", - ); -} -function ensureUokMessageTables(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS uok_messages ( - id TEXT PRIMARY KEY, - from_agent TEXT NOT NULL, - to_agent TEXT NOT NULL, - body TEXT NOT NULL DEFAULT '', - metadata_json TEXT NOT NULL DEFAULT '{}', - sent_at TEXT NOT NULL DEFAULT '', - delivered_at TEXT DEFAULT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS uok_message_reads ( - message_id TEXT NOT NULL, - agent_id TEXT NOT NULL, - read_at TEXT NOT NULL DEFAULT '', - PRIMARY KEY (message_id, agent_id), - FOREIGN KEY (message_id) REFERENCES uok_messages(id) ON DELETE CASCADE - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_uok_messages_to ON uok_messages(to_agent, sent_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_uok_messages_conversation ON uok_messages(from_agent, to_agent, sent_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_uok_messages_sent ON uok_messages(sent_at DESC)", - ); -} -function ensureDeployTables(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS deploy_runs ( - id TEXT PRIMARY KEY, - milestone_id TEXT NOT NULL, - target TEXT NOT NULL, - command TEXT NOT NULL, - status TEXT NOT NULL DEFAULT 'pending', - exit_code INTEGER DEFAULT NULL, - output TEXT DEFAULT NULL, - deployed_url TEXT DEFAULT NULL, - created_at TEXT NOT NULL, - finished_at TEXT DEFAULT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS smoke_results ( - id TEXT PRIMARY KEY, - deploy_run_id TEXT NOT NULL, - milestone_id TEXT NOT NULL, - url TEXT NOT NULL, - status TEXT NOT NULL DEFAULT 'pending', - verdict TEXT DEFAULT NULL, - checks_json TEXT NOT NULL DEFAULT '[]', - created_at TEXT NOT NULL, - finished_at TEXT DEFAULT NULL, - FOREIGN KEY (deploy_run_id) REFERENCES deploy_runs(id) ON DELETE CASCADE - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS release_records ( - id TEXT PRIMARY KEY, - milestone_id TEXT NOT NULL, - version TEXT NOT NULL, - prev_version TEXT DEFAULT NULL, - changelog_entry TEXT DEFAULT NULL, - git_tag TEXT DEFAULT NULL, - published INTEGER NOT NULL DEFAULT 0, - created_at TEXT NOT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS rollback_runs ( - id TEXT PRIMARY KEY, - deploy_run_id TEXT NOT NULL, - milestone_id TEXT NOT NULL, - reason TEXT NOT NULL, - status TEXT NOT NULL DEFAULT 'pending', - output TEXT DEFAULT NULL, - created_at TEXT NOT NULL, - finished_at TEXT DEFAULT NULL, - FOREIGN KEY (deploy_run_id) REFERENCES deploy_runs(id) ON DELETE CASCADE - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_deploy_runs_milestone ON deploy_runs(milestone_id, created_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_smoke_results_deploy ON smoke_results(deploy_run_id)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_release_records_milestone ON release_records(milestone_id, created_at DESC)", - ); -} -function ensureSleeptimeQueueTable(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS sleeptime_consolidation_queue ( - id TEXT PRIMARY KEY, - conversation_agent TEXT NOT NULL, - memory_agent TEXT NOT NULL, - content TEXT NOT NULL, - status TEXT NOT NULL DEFAULT 'pending', - created_at TEXT NOT NULL, - processed_at TEXT DEFAULT NULL, - result TEXT DEFAULT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_sleeptime_queue_status ON sleeptime_consolidation_queue(status, created_at ASC)", - ); -} -function ensureSelfFeedbackTables(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS self_feedback ( - id TEXT PRIMARY KEY, - ts TEXT NOT NULL, - kind TEXT NOT NULL, - severity TEXT NOT NULL, - blocking INTEGER NOT NULL DEFAULT 0, - repo_identity TEXT NOT NULL DEFAULT '', - sf_version TEXT NOT NULL DEFAULT '', - base_path TEXT NOT NULL DEFAULT '', - unit_type TEXT DEFAULT NULL, - milestone_id TEXT DEFAULT NULL, - slice_id TEXT DEFAULT NULL, - task_id TEXT DEFAULT NULL, - summary TEXT NOT NULL DEFAULT '', - evidence TEXT NOT NULL DEFAULT '', - suggested_fix TEXT NOT NULL DEFAULT '', - full_json TEXT NOT NULL, - resolved_at TEXT DEFAULT NULL, - resolved_reason TEXT DEFAULT NULL, - resolved_by_sf_version TEXT DEFAULT NULL, - resolved_evidence_json TEXT DEFAULT NULL, - resolved_criteria_json TEXT DEFAULT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_self_feedback_open ON self_feedback(resolved_at, severity, ts)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_self_feedback_kind ON self_feedback(kind, ts)", - ); -} -function ensureRetrievalEvidenceTables(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS retrieval_evidence ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - backend TEXT NOT NULL, - source_kind TEXT NOT NULL DEFAULT 'code', - query TEXT NOT NULL DEFAULT '', - strategy TEXT NOT NULL DEFAULT '', - scope TEXT NOT NULL DEFAULT '', - project_root TEXT NOT NULL DEFAULT '', - git_head TEXT DEFAULT NULL, - git_branch TEXT DEFAULT NULL, - worktree_dirty INTEGER NOT NULL DEFAULT 0, - freshness TEXT NOT NULL DEFAULT 'unknown', - status TEXT NOT NULL DEFAULT 'ok', - hit_count INTEGER NOT NULL DEFAULT 0, - elapsed_ms INTEGER NOT NULL DEFAULT 0, - cache_path TEXT DEFAULT NULL, - error TEXT DEFAULT NULL, - result_json TEXT NOT NULL DEFAULT '{}', - recorded_at TEXT NOT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_retrieval_evidence_backend_recorded ON retrieval_evidence(backend, recorded_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_retrieval_evidence_scope_recorded ON retrieval_evidence(scope, recorded_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_retrieval_evidence_status_recorded ON retrieval_evidence(status, recorded_at DESC)", - ); -} -function ensureTriageTables(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS triage_runs ( - id TEXT PRIMARY KEY, - source_file TEXT, - status TEXT NOT NULL DEFAULT 'complete', - result_summary_json TEXT, - created_at TEXT NOT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS triage_evals ( - id TEXT PRIMARY KEY, - run_id TEXT NOT NULL REFERENCES triage_runs(id), - task_input TEXT NOT NULL, - expected_behavior TEXT, - evidence TEXT, - failure_mode TEXT, - status TEXT NOT NULL DEFAULT 'pending', - created_at TEXT NOT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS triage_items ( - id TEXT PRIMARY KEY, - run_id TEXT NOT NULL REFERENCES triage_runs(id), - kind TEXT NOT NULL, - content TEXT NOT NULL, - evidence TEXT, - status TEXT NOT NULL DEFAULT 'pending', - created_at TEXT NOT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS triage_skills ( - id TEXT PRIMARY KEY, - run_id TEXT NOT NULL REFERENCES triage_runs(id), - name TEXT, - description TEXT, - trigger TEXT, - raw_json TEXT, - status TEXT NOT NULL DEFAULT 'pending', - created_at TEXT NOT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_triage_evals_run ON triage_evals(run_id)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_triage_items_run_kind ON triage_items(run_id, kind)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_triage_skills_run ON triage_skills(run_id)", - ); -} -function ensureRuntimeCounterTable(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS runtime_counters ( - key TEXT PRIMARY KEY, - value INTEGER NOT NULL DEFAULT 0, - updated_at TEXT NOT NULL - ) - `); -} -function ensureValidationAttentionMarkersTable(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS validation_attention_markers ( - milestone_id TEXT PRIMARY KEY, - created_at TEXT NOT NULL, - source TEXT, - remediation_round INTEGER, - revalidation_round INTEGER, - revalidation_requested_at TEXT - ) - `); -} -function ensureSpecSchemaTables(db: DbAdapter) { - // Tier 1.3: Spec/Runtime/Evidence schema separation - // Creates 9 normalized tables for milestone, slice, task entities - // Each entity type has: _specs (immutable intent), (runtime state), _evidence (audit trail) - - // ── Milestone Spec Table (immutable record of intent) ─────────── - db.exec(` - CREATE TABLE IF NOT EXISTS milestone_specs ( - id TEXT NOT NULL, - vision TEXT NOT NULL DEFAULT '', - success_criteria TEXT DEFAULT '', - key_risks TEXT DEFAULT '', - proof_strategy TEXT DEFAULT '', - verification_contract TEXT DEFAULT '', - verification_integration TEXT DEFAULT '', - verification_operational TEXT DEFAULT '', - verification_uat TEXT DEFAULT '', - definition_of_done TEXT DEFAULT '', - requirement_coverage TEXT DEFAULT '', - boundary_map_markdown TEXT DEFAULT '', - vision_meeting_json TEXT DEFAULT '', - product_research_json TEXT DEFAULT '', - spec_version INTEGER NOT NULL DEFAULT 1, - created_at TEXT NOT NULL, - PRIMARY KEY (id), - FOREIGN KEY (id) REFERENCES milestones(id) - ) - `); - - // ── Slice Spec Table (immutable record of intent) ─────────── - db.exec(` - CREATE TABLE IF NOT EXISTS slice_specs ( - milestone_id TEXT NOT NULL, - slice_id TEXT NOT NULL, - goal TEXT NOT NULL DEFAULT '', - success_criteria TEXT DEFAULT '', - proof_level TEXT DEFAULT '', - integration_closure TEXT DEFAULT '', - observability_impact TEXT DEFAULT '', - adversarial_partner TEXT DEFAULT '', - adversarial_combatant TEXT DEFAULT '', - adversarial_architect TEXT DEFAULT '', - planning_meeting_json TEXT DEFAULT '', - spec_version INTEGER NOT NULL DEFAULT 1, - created_at TEXT NOT NULL, - PRIMARY KEY (milestone_id, slice_id), - FOREIGN KEY (milestone_id) REFERENCES milestones(id), - FOREIGN KEY (milestone_id, slice_id) REFERENCES slices(milestone_id, id) - ) - `); - - // ── Task Spec Table (immutable record of intent) ─────────── - db.exec(` - CREATE TABLE IF NOT EXISTS task_specs ( - milestone_id TEXT NOT NULL, - slice_id TEXT NOT NULL, - task_id TEXT NOT NULL, - verify TEXT NOT NULL DEFAULT '', - inputs TEXT DEFAULT '', - expected_output TEXT DEFAULT '', - risk TEXT NOT NULL DEFAULT 'low', - mutation_scope TEXT NOT NULL DEFAULT 'isolated', - verification_type TEXT NOT NULL DEFAULT 'self-check', - plan_approval TEXT NOT NULL DEFAULT 'not-required', - estimated_effort INTEGER DEFAULT NULL, - dependencies TEXT NOT NULL DEFAULT '[]', - blocks_parallel INTEGER NOT NULL DEFAULT 0, - requires_user_input INTEGER NOT NULL DEFAULT 0, - auto_retry INTEGER NOT NULL DEFAULT 1, - max_retries INTEGER NOT NULL DEFAULT 2, - spec_version INTEGER NOT NULL DEFAULT 1, - created_at TEXT NOT NULL, - PRIMARY KEY (milestone_id, slice_id, task_id), - FOREIGN KEY (milestone_id, slice_id) REFERENCES slices(milestone_id, id), - FOREIGN KEY (milestone_id, slice_id, task_id) REFERENCES tasks(milestone_id, slice_id, id) - ) - `); - - // ── Milestone Evidence Table (append-only audit trail) ─────────── - db.exec(` - CREATE TABLE IF NOT EXISTS milestone_evidence ( - milestone_id TEXT NOT NULL, - evidence_type TEXT NOT NULL, - content TEXT NOT NULL, - recorded_at TEXT NOT NULL, - phase_name TEXT DEFAULT '', - recorded_by TEXT DEFAULT '', - evidence_id TEXT NOT NULL DEFAULT (lower(hex(randomblob(16)))), - PRIMARY KEY (milestone_id, evidence_id), - FOREIGN KEY (milestone_id) REFERENCES milestones(id) - ) - `); - - // ── Slice Evidence Table (append-only audit trail) ─────────── - db.exec(` - CREATE TABLE IF NOT EXISTS slice_evidence ( - milestone_id TEXT NOT NULL, - slice_id TEXT NOT NULL, - evidence_type TEXT NOT NULL, - content TEXT NOT NULL, - recorded_at TEXT NOT NULL, - phase_name TEXT DEFAULT '', - recorded_by TEXT DEFAULT '', - evidence_id TEXT NOT NULL DEFAULT (lower(hex(randomblob(16)))), - PRIMARY KEY (milestone_id, slice_id, evidence_id), - FOREIGN KEY (milestone_id, slice_id) REFERENCES slices(milestone_id, id) - ) - `); - - // ── Task Evidence Table (append-only audit trail) ─────────── - db.exec(` - CREATE TABLE IF NOT EXISTS task_evidence ( - milestone_id TEXT NOT NULL, - slice_id TEXT NOT NULL, - task_id TEXT NOT NULL, - evidence_type TEXT NOT NULL, - content TEXT NOT NULL, - recorded_at TEXT NOT NULL, - phase_name TEXT DEFAULT '', - recorded_by TEXT DEFAULT '', - evidence_id TEXT NOT NULL DEFAULT (lower(hex(randomblob(16)))), - PRIMARY KEY (milestone_id, slice_id, task_id, evidence_id), - FOREIGN KEY (milestone_id, slice_id, task_id) REFERENCES tasks(milestone_id, slice_id, id) - ) - `); - - // Indices for efficient querying of evidence trails - db.exec(` - CREATE INDEX IF NOT EXISTS idx_milestone_evidence_type - ON milestone_evidence(milestone_id, evidence_type, recorded_at DESC) - `); - db.exec(` - CREATE INDEX IF NOT EXISTS idx_slice_evidence_type - ON slice_evidence(milestone_id, slice_id, evidence_type, recorded_at DESC) - `); - db.exec(` - CREATE INDEX IF NOT EXISTS idx_task_evidence_type - ON task_evidence(milestone_id, slice_id, task_id, evidence_type, recorded_at DESC) - `); -} -function initSchema(db: DbAdapter, fileBacked: boolean): void { - if (fileBacked) db.exec("PRAGMA journal_mode=WAL"); - if (fileBacked) db.exec("PRAGMA busy_timeout = 5000"); - if (fileBacked) db.exec("PRAGMA synchronous = NORMAL"); - // Disable SQLite's automatic WAL checkpoint (default: every 1000 pages). - // Auto-checkpoint fires at unpredictable times — if the process is killed - // mid-checkpoint (e.g., OOM), the main DB is partially written with an - // empty WAL and cannot be recovered. Explicit checkpoints are issued at - // safe loop boundaries instead (post-unit finalize, close). - if (fileBacked) db.exec("PRAGMA wal_autocheckpoint=0"); - if (fileBacked) db.exec("PRAGMA auto_vacuum = INCREMENTAL"); - if (fileBacked) db.exec("PRAGMA cache_size = -8000"); // 8 MB page cache - if (fileBacked && process.platform !== "darwin") - db.exec("PRAGMA mmap_size = 67108864"); // 64 MB mmap - db.exec("PRAGMA temp_store = MEMORY"); - db.exec("PRAGMA foreign_keys = ON"); - db.exec("BEGIN"); - try { - db.exec(` - CREATE TABLE IF NOT EXISTS schema_version ( - version INTEGER NOT NULL, - applied_at TEXT NOT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS decisions ( - seq INTEGER PRIMARY KEY AUTOINCREMENT, - id TEXT NOT NULL UNIQUE, - when_context TEXT NOT NULL DEFAULT '', - scope TEXT NOT NULL DEFAULT '', - decision TEXT NOT NULL DEFAULT '', - choice TEXT NOT NULL DEFAULT '', - rationale TEXT NOT NULL DEFAULT '', - revisable TEXT NOT NULL DEFAULT '', - made_by TEXT NOT NULL DEFAULT 'agent', - superseded_by TEXT DEFAULT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS requirements ( - id TEXT PRIMARY KEY, - class TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT '', - description TEXT NOT NULL DEFAULT '', - why TEXT NOT NULL DEFAULT '', - source TEXT NOT NULL DEFAULT '', - primary_owner TEXT NOT NULL DEFAULT '', - supporting_slices TEXT NOT NULL DEFAULT '', - validation TEXT NOT NULL DEFAULT '', - notes TEXT NOT NULL DEFAULT '', - full_content TEXT NOT NULL DEFAULT '', - superseded_by TEXT DEFAULT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS artifacts ( - path TEXT PRIMARY KEY, - artifact_type TEXT NOT NULL DEFAULT '', - milestone_id TEXT DEFAULT NULL, - slice_id TEXT DEFAULT NULL, - task_id TEXT DEFAULT NULL, - full_content TEXT NOT NULL DEFAULT '', - imported_at TEXT NOT NULL DEFAULT '' - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS memories ( - seq INTEGER PRIMARY KEY AUTOINCREMENT, - id TEXT NOT NULL UNIQUE, - category TEXT NOT NULL, - content TEXT NOT NULL, - confidence REAL NOT NULL DEFAULT 0.8, - source_unit_type TEXT, - source_unit_id TEXT, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - superseded_by TEXT DEFAULT NULL, - hit_count INTEGER NOT NULL DEFAULT 0, - tags TEXT NOT NULL DEFAULT '[]' - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS memory_processed_units ( - unit_key TEXT PRIMARY KEY, - activity_file TEXT, - processed_at TEXT NOT NULL - ) - `); - // memory_embeddings, memory_relations, memory_sources used to be referenced - // by helper functions and queries (memory-embeddings.ts, memory-relations.ts, - // memory-ingest.ts) without a corresponding CREATE TABLE — any actual write - // would have failed with "no such table". Creating them as IF NOT EXISTS so - // existing DBs that somehow have them survive, and fresh DBs work. - db.exec(` - CREATE TABLE IF NOT EXISTS memory_embeddings ( - memory_id TEXT PRIMARY KEY, - model TEXT NOT NULL, - dim INTEGER NOT NULL, - vector BLOB NOT NULL, - updated_at TEXT NOT NULL, - FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS memory_relations ( - from_id TEXT NOT NULL, - to_id TEXT NOT NULL, - rel TEXT NOT NULL, - confidence REAL NOT NULL DEFAULT 0.8, - created_at TEXT NOT NULL, - PRIMARY KEY (from_id, to_id, rel), - FOREIGN KEY (from_id) REFERENCES memories(id) ON DELETE CASCADE, - FOREIGN KEY (to_id) REFERENCES memories(id) ON DELETE CASCADE - ) - `); - // PK covers from_id as leading column already; reverse lookups - // (memory-relations.ts queries WHERE to_id = ?) need their own index - // to avoid a full table scan as the relation count grows. - db.exec( - "CREATE INDEX IF NOT EXISTS idx_memory_relations_to ON memory_relations(to_id)", - ); - db.exec(` - CREATE TABLE IF NOT EXISTS memory_sources ( - id TEXT PRIMARY KEY, - kind TEXT NOT NULL, - uri TEXT, - title TEXT, - content TEXT NOT NULL, - content_hash TEXT NOT NULL, - imported_at TEXT NOT NULL, - scope TEXT NOT NULL DEFAULT 'project', - tags TEXT NOT NULL DEFAULT '[]' - ) - `); - // content_hash is queried on every insert for deduplication; without an - // index the lookup becomes a full table scan as ingestion volume grows. - db.exec( - "CREATE INDEX IF NOT EXISTS idx_memory_sources_content_hash ON memory_sources(content_hash)", - ); - // Category GROUP BY queries (e.g. /memory stats) need a covering - // index that filters active memories and groups by category. - db.exec( - "CREATE INDEX IF NOT EXISTS idx_memories_category ON memories(superseded_by, category)", - ); - db.exec(` - CREATE TABLE IF NOT EXISTS judgments ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - unit_id TEXT NOT NULL, - decision TEXT NOT NULL DEFAULT '', - alternatives_json TEXT NOT NULL DEFAULT '[]', - reasoning TEXT NOT NULL DEFAULT '', - confidence TEXT NOT NULL DEFAULT 'medium', - ts TEXT NOT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_judgments_unit_id ON judgments(unit_id, ts DESC)", - ); - db.exec(` - CREATE TABLE IF NOT EXISTS milestones ( - id TEXT PRIMARY KEY, - title TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT 'active', - depends_on TEXT NOT NULL DEFAULT '[]', - created_at TEXT NOT NULL DEFAULT '', - completed_at TEXT DEFAULT NULL, - vision TEXT NOT NULL DEFAULT '', - success_criteria TEXT NOT NULL DEFAULT '[]', - key_risks TEXT NOT NULL DEFAULT '[]', - proof_strategy TEXT NOT NULL DEFAULT '[]', - verification_contract TEXT NOT NULL DEFAULT '', - verification_integration TEXT NOT NULL DEFAULT '', - verification_operational TEXT NOT NULL DEFAULT '', - verification_uat TEXT NOT NULL DEFAULT '', - definition_of_done TEXT NOT NULL DEFAULT '[]', - requirement_coverage TEXT NOT NULL DEFAULT '', - boundary_map_markdown TEXT NOT NULL DEFAULT '', - vision_meeting_json TEXT NOT NULL DEFAULT '', - product_research_json TEXT NOT NULL DEFAULT '', - sequence INTEGER DEFAULT 0 - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS slices ( - milestone_id TEXT NOT NULL, - id TEXT NOT NULL, - title TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT 'pending', - risk TEXT NOT NULL DEFAULT 'medium', - depends TEXT NOT NULL DEFAULT '[]', - demo TEXT NOT NULL DEFAULT '', - created_at TEXT NOT NULL DEFAULT '', - completed_at TEXT DEFAULT NULL, - full_summary_md TEXT NOT NULL DEFAULT '', - full_uat_md TEXT NOT NULL DEFAULT '', - goal TEXT NOT NULL DEFAULT '', - success_criteria TEXT NOT NULL DEFAULT '', - proof_level TEXT NOT NULL DEFAULT '', - integration_closure TEXT NOT NULL DEFAULT '', - observability_impact TEXT NOT NULL DEFAULT '', - adversarial_partner TEXT NOT NULL DEFAULT '', - adversarial_combatant TEXT NOT NULL DEFAULT '', - adversarial_architect TEXT NOT NULL DEFAULT '', - planning_meeting_json TEXT NOT NULL DEFAULT '', - sequence INTEGER DEFAULT 0, -- Ordering hint: tools may set this to control execution order - replan_triggered_at TEXT DEFAULT NULL, - is_sketch INTEGER NOT NULL DEFAULT 0, -- SF ADR-011: 1 = slice is a sketch awaiting refine-slice - sketch_scope TEXT NOT NULL DEFAULT '', -- SF ADR-011: 2-3 sentence scope hint from plan-milestone - PRIMARY KEY (milestone_id, id), - FOREIGN KEY (milestone_id) REFERENCES milestones(id) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS tasks ( - milestone_id TEXT NOT NULL, - slice_id TEXT NOT NULL, - id TEXT NOT NULL, - title TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT 'pending', - one_liner TEXT NOT NULL DEFAULT '', - narrative TEXT NOT NULL DEFAULT '', - verification_result TEXT NOT NULL DEFAULT '', - duration TEXT NOT NULL DEFAULT '', - completed_at TEXT DEFAULT NULL, - blocker_discovered INTEGER DEFAULT 0, - deviations TEXT NOT NULL DEFAULT '', - known_issues TEXT NOT NULL DEFAULT '', - key_files TEXT NOT NULL DEFAULT '[]', - key_decisions TEXT NOT NULL DEFAULT '[]', - full_summary_md TEXT NOT NULL DEFAULT '', - description TEXT NOT NULL DEFAULT '', - estimate TEXT NOT NULL DEFAULT '', - files TEXT NOT NULL DEFAULT '[]', - verify TEXT NOT NULL DEFAULT '', - inputs TEXT NOT NULL DEFAULT '[]', - expected_output TEXT NOT NULL DEFAULT '[]', - observability_impact TEXT NOT NULL DEFAULT '', - full_plan_md TEXT NOT NULL DEFAULT '', - created_at TEXT NOT NULL DEFAULT '', - verification_status TEXT NOT NULL DEFAULT '', - risk TEXT NOT NULL DEFAULT 'low', - mutation_scope TEXT NOT NULL DEFAULT 'isolated', - verification_type TEXT NOT NULL DEFAULT 'self-check', - plan_approval TEXT NOT NULL DEFAULT 'not-required', - task_status TEXT NOT NULL DEFAULT 'todo', - estimated_effort INTEGER DEFAULT NULL, - dependencies TEXT NOT NULL DEFAULT '[]', - blocks_parallel INTEGER NOT NULL DEFAULT 0, - requires_user_input INTEGER NOT NULL DEFAULT 0, - auto_retry INTEGER NOT NULL DEFAULT 1, - max_retries INTEGER NOT NULL DEFAULT 2, - sequence INTEGER DEFAULT 0, -- Ordering hint: tools may set this to control execution order - escalation_pending INTEGER NOT NULL DEFAULT 0, -- ADR-011 P2 (SF): pause-on-escalation flag - escalation_awaiting_review INTEGER NOT NULL DEFAULT 0, -- ADR-011 P2 (SF): continueWithDefault=true marker (no pause) - escalation_override_applied INTEGER NOT NULL DEFAULT 0, -- SF ADR-011 P2: 1 once carry-forward injected into a downstream prompt - escalation_artifact_path TEXT DEFAULT NULL, -- ADR-011 P2 (SF): path to T##-ESCALATION.json - PRIMARY KEY (milestone_id, slice_id, id), - FOREIGN KEY (milestone_id, slice_id) REFERENCES slices(milestone_id, id) - ) - `); - ensureTaskSchedulerTable(db); - if (columnExists(db, "tasks", "escalation_pending")) { - db.exec(` - CREATE INDEX IF NOT EXISTS idx_tasks_escalation_pending ON tasks(milestone_id, slice_id, escalation_pending) - `); - } - db.exec(` - CREATE TABLE IF NOT EXISTS verification_evidence ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - task_id TEXT NOT NULL DEFAULT '', - slice_id TEXT NOT NULL DEFAULT '', - milestone_id TEXT NOT NULL DEFAULT '', - command TEXT NOT NULL DEFAULT '', - exit_code INTEGER DEFAULT 0, - verdict TEXT NOT NULL DEFAULT '', - duration_ms INTEGER DEFAULT 0, - created_at TEXT NOT NULL DEFAULT '', - FOREIGN KEY (milestone_id, slice_id, task_id) REFERENCES tasks(milestone_id, slice_id, id) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS replan_history ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - milestone_id TEXT NOT NULL DEFAULT '', - slice_id TEXT DEFAULT NULL, - task_id TEXT DEFAULT NULL, - summary TEXT NOT NULL DEFAULT '', - previous_artifact_path TEXT DEFAULT NULL, - replacement_artifact_path TEXT DEFAULT NULL, - created_at TEXT NOT NULL DEFAULT '', - FOREIGN KEY (milestone_id) REFERENCES milestones(id) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS assessments ( - path TEXT PRIMARY KEY, - milestone_id TEXT NOT NULL DEFAULT '', - slice_id TEXT DEFAULT NULL, - task_id TEXT DEFAULT NULL, - status TEXT NOT NULL DEFAULT '', - scope TEXT NOT NULL DEFAULT '', - full_content TEXT NOT NULL DEFAULT '', - created_at TEXT NOT NULL DEFAULT '', - FOREIGN KEY (milestone_id) REFERENCES milestones(id) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS quality_gates ( - milestone_id TEXT NOT NULL, - slice_id TEXT NOT NULL, - gate_id TEXT NOT NULL, - scope TEXT NOT NULL DEFAULT 'slice', - task_id TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT 'pending', - verdict TEXT NOT NULL DEFAULT '', - rationale TEXT NOT NULL DEFAULT '', - findings TEXT NOT NULL DEFAULT '', - evaluated_at TEXT DEFAULT NULL, - PRIMARY KEY (milestone_id, slice_id, gate_id, task_id), - FOREIGN KEY (milestone_id, slice_id) REFERENCES slices(milestone_id, id) - ) - `); - // Slice dependency junction table (v14) - db.exec(` - CREATE TABLE IF NOT EXISTS slice_dependencies ( - milestone_id TEXT NOT NULL, - slice_id TEXT NOT NULL, - depends_on_slice_id TEXT NOT NULL, - PRIMARY KEY (milestone_id, slice_id, depends_on_slice_id), - FOREIGN KEY (milestone_id, slice_id) REFERENCES slices(milestone_id, id), - FOREIGN KEY (milestone_id, depends_on_slice_id) REFERENCES slices(milestone_id, id) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS gate_circuit_breakers ( - gate_id TEXT PRIMARY KEY, - state TEXT NOT NULL DEFAULT 'closed', - failure_streak INTEGER NOT NULL DEFAULT 0, - last_failure_at TEXT DEFAULT NULL, - opened_at TEXT DEFAULT NULL, - half_open_attempts INTEGER NOT NULL DEFAULT 0, - updated_at TEXT NOT NULL DEFAULT '' - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS audit_turn_index ( - trace_id TEXT NOT NULL, - turn_id TEXT NOT NULL, - first_ts TEXT NOT NULL, - last_ts TEXT NOT NULL, - event_count INTEGER NOT NULL DEFAULT 0, - PRIMARY KEY (trace_id, turn_id) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS llm_task_outcomes ( - model_id TEXT NOT NULL, - provider TEXT NOT NULL, - unit_type TEXT NOT NULL, - unit_id TEXT NOT NULL, - succeeded INTEGER NOT NULL DEFAULT 0, - retries INTEGER NOT NULL DEFAULT 0, - escalated INTEGER NOT NULL DEFAULT 0, - verification_passed INTEGER DEFAULT NULL, - blocker_discovered INTEGER NOT NULL DEFAULT 0, - duration_ms INTEGER DEFAULT NULL, - tokens_total INTEGER DEFAULT NULL, - cost_usd REAL DEFAULT NULL, - recorded_at INTEGER NOT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS uok_runs ( - run_id TEXT PRIMARY KEY, - session_id TEXT DEFAULT NULL, - path TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT 'started', - started_at TEXT NOT NULL, - ended_at TEXT DEFAULT NULL, - error TEXT DEFAULT NULL, - flags_json TEXT NOT NULL DEFAULT '{}', - updated_at TEXT NOT NULL - ) - `); - ensureSelfFeedbackTables(db); - ensureSolverEvalTables(db); - ensureRetrievalEvidenceTables(db); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_memories_active ON memories(superseded_by)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_replan_history_milestone ON replan_history(milestone_id, created_at)", - ); - // v13 indexes — hot-path dispatch queries - db.exec( - "CREATE INDEX IF NOT EXISTS idx_tasks_active ON tasks(milestone_id, slice_id, status)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_slices_active ON slices(milestone_id, status)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_milestones_status ON milestones(status)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_quality_gates_pending ON quality_gates(milestone_id, slice_id, status)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_verification_evidence_task ON verification_evidence(milestone_id, slice_id, task_id)", - ); - ensureVerificationEvidenceDedupIndex(db); - // v14 index — slice dependency lookups - db.exec( - "CREATE INDEX IF NOT EXISTS idx_slice_deps_target ON slice_dependencies(milestone_id, depends_on_slice_id)", - ); - db.exec( - "CREATE UNIQUE INDEX IF NOT EXISTS idx_llm_task_outcomes_identity ON llm_task_outcomes(unit_type, unit_id, recorded_at)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_llm_task_outcomes_model_unit ON llm_task_outcomes(model_id, unit_type, recorded_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_llm_task_outcomes_unit ON llm_task_outcomes(unit_type, recorded_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_llm_task_outcomes_provider ON llm_task_outcomes(provider, recorded_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_uok_runs_status_started ON uok_runs(status, started_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_uok_runs_session ON uok_runs(session_id, started_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_self_feedback_open ON self_feedback(resolved_at, severity, ts)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_self_feedback_kind ON self_feedback(kind, ts)", - ); - ensureRepoProfileTables(db); - ensureBacklogTables(db); - ensureScheduleTables(db); - ensureSolverEvalTables(db); - ensureHeadlessRunTables(db); - ensureSessionTables(db); - ensureSessionSnapshotTable(db); - ensureUokMessageTables(db); - ensureDeployTables(db); - ensureSleeptimeQueueTable(db); - ensureSpecSchemaTables(db); - ensureTaskFrontmatterColumns(db); - ensureRetrievalEvidenceTables(db); - ensureTriageTables(db); - ensureRuntimeCounterTable(db); - ensureValidationAttentionMarkersTable(db); - db.exec( - `CREATE VIEW IF NOT EXISTS active_decisions AS SELECT * FROM decisions WHERE superseded_by IS NULL`, - ); - db.exec( - `CREATE VIEW IF NOT EXISTS active_requirements AS SELECT * FROM requirements WHERE superseded_by IS NULL`, - ); - db.exec( - `CREATE VIEW IF NOT EXISTS active_memories AS SELECT * FROM memories WHERE superseded_by IS NULL`, - ); - db.exec( - `CREATE VIEW IF NOT EXISTS active_tasks AS SELECT * FROM tasks WHERE status NOT IN ('done','complete','completed','cancelled')`, - ); - db.exec(` - CREATE VIEW IF NOT EXISTS v_task_full AS - SELECT t.*, ts.spec_version, ts.verify AS spec_verify, - ts.inputs AS spec_inputs, ts.expected_output AS spec_expected_output - FROM tasks t - LEFT JOIN task_specs ts - ON t.milestone_id = ts.milestone_id - AND t.slice_id = ts.slice_id - AND t.id = ts.task_id - `); - const existing = db - .prepare("SELECT count(*) as cnt FROM schema_version") - .get(); - if (existing && existing["cnt"] === 0) { - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": SCHEMA_VERSION, - ":applied_at": new Date().toISOString(), - }); - } - db.exec("COMMIT"); - } catch (err) { - db.exec("ROLLBACK"); - throw err; - } - migrateSchema(db); -} -function columnExists(db: DbAdapter, table: string, column: string): boolean { - const rows = db.prepare(`PRAGMA table_info(${table})`).all(); - return rows.some((row) => row["name"] === column); -} -function tableExists(db: DbAdapter, table: string): boolean { - const row = db - .prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name=?`) - .get(table); - return row != null; -} -function ensureColumn( - db: DbAdapter, - table: string, - column: string, - ddl: string, -): void { - if (!columnExists(db, table, column)) db.exec(ddl); -} -function hasPlanningPayload(planning: Record = {}): boolean { - return ( - Boolean(planning.vision) || - ((planning.successCriteria as unknown[])?.length ?? 0) > 0 || - ((planning.keyRisks as unknown[])?.length ?? 0) > 0 || - ((planning.proofStrategy as unknown[])?.length ?? 0) > 0 || - Boolean(planning.verificationContract) || - Boolean(planning.verificationIntegration) || - Boolean(planning.verificationOperational) || - Boolean(planning.verificationUat) || - ((planning.definitionOfDone as unknown[])?.length ?? 0) > 0 || - Boolean(planning.requirementCoverage) || - Boolean(planning.boundaryMapMarkdown) || - Boolean(planning.visionMeeting) || - Boolean(planning.productResearch) - ); -} -function parseJsonOrFallback(raw: unknown, fallback: unknown): unknown { - if (typeof raw !== "string" || raw.trim().length === 0) return fallback; - try { - return JSON.parse(raw); - } catch { - return fallback; - } -} -function isEmptyMilestoneSpec(row: Record): boolean { - if (!row) return true; - return ( - (row["vision"] ?? "") === "" && - (parseJsonOrFallback(row["success_criteria"], []) as unknown[]).length === - 0 && - (parseJsonOrFallback(row["key_risks"], []) as unknown[]).length === 0 && - (parseJsonOrFallback(row["proof_strategy"], []) as unknown[]).length === - 0 && - (row["verification_contract"] ?? "") === "" && - (row["verification_integration"] ?? "") === "" && - (row["verification_operational"] ?? "") === "" && - (row["verification_uat"] ?? "") === "" && - (parseJsonOrFallback(row["definition_of_done"], []) as unknown[]).length === - 0 && - (row["requirement_coverage"] ?? "") === "" && - (row["boundary_map_markdown"] ?? "") === "" && - (row["vision_meeting_json"] ?? "") === "" && - (row["product_research_json"] ?? "") === "" - ); -} -function ensureTaskCreatedAtColumn(db: DbAdapter) { - ensureColumn( - db, - "tasks", - "created_at", - `ALTER TABLE tasks ADD COLUMN created_at TEXT NOT NULL DEFAULT ''`, - ); -} -function ensureTaskFrontmatterColumns(db: DbAdapter) { - ensureColumn( - db, - "tasks", - "risk", - `ALTER TABLE tasks ADD COLUMN risk TEXT NOT NULL DEFAULT 'low'`, - ); - ensureColumn( - db, - "tasks", - "mutation_scope", - `ALTER TABLE tasks ADD COLUMN mutation_scope TEXT NOT NULL DEFAULT 'isolated'`, - ); - ensureColumn( - db, - "tasks", - "verification_type", - `ALTER TABLE tasks ADD COLUMN verification_type TEXT NOT NULL DEFAULT 'self-check'`, - ); - ensureColumn( - db, - "tasks", - "plan_approval", - `ALTER TABLE tasks ADD COLUMN plan_approval TEXT NOT NULL DEFAULT 'not-required'`, - ); - ensureColumn( - db, - "tasks", - "task_status", - `ALTER TABLE tasks ADD COLUMN task_status TEXT NOT NULL DEFAULT 'todo'`, - ); - ensureColumn( - db, - "tasks", - "estimated_effort", - `ALTER TABLE tasks ADD COLUMN estimated_effort INTEGER DEFAULT NULL`, - ); - ensureColumn( - db, - "tasks", - "dependencies", - `ALTER TABLE tasks ADD COLUMN dependencies TEXT NOT NULL DEFAULT '[]'`, - ); - ensureColumn( - db, - "tasks", - "blocks_parallel", - `ALTER TABLE tasks ADD COLUMN blocks_parallel INTEGER NOT NULL DEFAULT 0`, - ); - ensureColumn( - db, - "tasks", - "requires_user_input", - `ALTER TABLE tasks ADD COLUMN requires_user_input INTEGER NOT NULL DEFAULT 0`, - ); - ensureColumn( - db, - "tasks", - "auto_retry", - `ALTER TABLE tasks ADD COLUMN auto_retry INTEGER NOT NULL DEFAULT 1`, - ); - ensureColumn( - db, - "tasks", - "max_retries", - `ALTER TABLE tasks ADD COLUMN max_retries INTEGER NOT NULL DEFAULT 2`, - ); - for (const table of ["task_specs"]) { - ensureColumn( - db, - table, - "risk", - `ALTER TABLE ${table} ADD COLUMN risk TEXT NOT NULL DEFAULT 'low'`, - ); - ensureColumn( - db, - table, - "mutation_scope", - `ALTER TABLE ${table} ADD COLUMN mutation_scope TEXT NOT NULL DEFAULT 'isolated'`, - ); - ensureColumn( - db, - table, - "verification_type", - `ALTER TABLE ${table} ADD COLUMN verification_type TEXT NOT NULL DEFAULT 'self-check'`, - ); - ensureColumn( - db, - table, - "plan_approval", - `ALTER TABLE ${table} ADD COLUMN plan_approval TEXT NOT NULL DEFAULT 'not-required'`, - ); - ensureColumn( - db, - table, - "estimated_effort", - `ALTER TABLE ${table} ADD COLUMN estimated_effort INTEGER DEFAULT NULL`, - ); - ensureColumn( - db, - table, - "dependencies", - `ALTER TABLE ${table} ADD COLUMN dependencies TEXT NOT NULL DEFAULT '[]'`, - ); - ensureColumn( - db, - table, - "blocks_parallel", - `ALTER TABLE ${table} ADD COLUMN blocks_parallel INTEGER NOT NULL DEFAULT 0`, - ); - ensureColumn( - db, - table, - "requires_user_input", - `ALTER TABLE ${table} ADD COLUMN requires_user_input INTEGER NOT NULL DEFAULT 0`, - ); - ensureColumn( - db, - table, - "auto_retry", - `ALTER TABLE ${table} ADD COLUMN auto_retry INTEGER NOT NULL DEFAULT 1`, - ); - ensureColumn( - db, - table, - "max_retries", - `ALTER TABLE ${table} ADD COLUMN max_retries INTEGER NOT NULL DEFAULT 2`, - ); - } -} -function ensureTaskSchedulerTable(db: DbAdapter) { - db.exec(` - CREATE TABLE IF NOT EXISTS task_scheduler ( - milestone_id TEXT NOT NULL, - slice_id TEXT NOT NULL, - task_id TEXT NOT NULL, - status TEXT NOT NULL DEFAULT 'queued', - due_at TEXT DEFAULT NULL, - claimed_by TEXT DEFAULT NULL, - dispatched_at TEXT DEFAULT NULL, - consumed_at TEXT DEFAULT NULL, - expires_at TEXT DEFAULT NULL, - updated_at TEXT NOT NULL DEFAULT '', - PRIMARY KEY (milestone_id, slice_id, task_id), - FOREIGN KEY (milestone_id, slice_id, task_id) REFERENCES tasks(milestone_id, slice_id, id) - ) - `); - db.exec(` - CREATE INDEX IF NOT EXISTS idx_task_scheduler_status - ON task_scheduler(status, due_at) - `); -} -function migrateCostUsdToMicroUsd(db: DbAdapter): void { - // Tier 2.7: Migrate cost_usd REAL to cost_micro_usd INTEGER - // Converts floating-point USD values to integer micro-USD (multiply by 1,000,000) - // Benefits: eliminates float drift on accumulated costs, easier reasoning about totals - // Purpose: Enable accurate cost tracking at scale without rounding errors - // Consumer: gate_runs cost tracking, cost analytics, budget checks - - // Guard: gate_runs may not exist in minimal legacy DBs (it will be dropped in v58) - if (!tableExists(db, "gate_runs")) return; - - // Add cost_micro_usd column if it doesn't exist - if (!columnExists(db, "gate_runs", "cost_micro_usd")) { - db.exec( - `ALTER TABLE gate_runs ADD COLUMN cost_micro_usd INTEGER DEFAULT NULL`, - ); - } - - // Migrate data: convert cost_usd to cost_micro_usd - // NULL values stay NULL; non-NULL values are multiplied by 1,000,000 - if (columnExists(db, "gate_runs", "cost_usd")) { - db.prepare(` - UPDATE gate_runs - SET cost_micro_usd = CAST(ROUND(cost_usd * 1000000) AS INTEGER) - WHERE cost_usd IS NOT NULL - AND cost_micro_usd IS NULL - `).run(); - } - - // Drop old cost_usd column (SQLite ALTER TABLE DROP is only available in 3.35.0+) - // For safety, we keep the old column as deprecated but unused - // Future: drop after confirming all queries use cost_micro_usd -} -function populateSpecTablesFromExisting(db: DbAdapter): void { - // Tier 1.3 Phase 2: Migrate existing spec data to new spec tables - // This populates milestone_specs, slice_specs, task_specs from existing columns - // Evidence tables are left empty; they populate as tools create new evidence. - - const now = new Date().toISOString(); - - // Migrate milestone specs - db.prepare(` - INSERT OR IGNORE INTO milestone_specs ( - id, vision, success_criteria, key_risks, proof_strategy, - verification_contract, verification_integration, verification_operational, verification_uat, - definition_of_done, requirement_coverage, boundary_map_markdown, vision_meeting_json, product_research_json, - spec_version, created_at - ) - SELECT - id, vision, success_criteria, key_risks, proof_strategy, - verification_contract, verification_integration, verification_operational, verification_uat, - definition_of_done, requirement_coverage, boundary_map_markdown, vision_meeting_json, '', - 1, COALESCE(created_at, ?) - FROM milestones - WHERE id NOT IN (SELECT id FROM milestone_specs) - `).run(now); - - // Migrate slice specs - db.prepare(` - INSERT OR IGNORE INTO slice_specs ( - milestone_id, slice_id, goal, success_criteria, proof_level, - integration_closure, observability_impact, - adversarial_partner, adversarial_combatant, adversarial_architect, - planning_meeting_json, spec_version, created_at - ) - SELECT - milestone_id, id, goal, success_criteria, proof_level, - integration_closure, observability_impact, - adversarial_partner, adversarial_combatant, adversarial_architect, - planning_meeting_json, 1, COALESCE(created_at, ?) - FROM slices - WHERE (milestone_id, id) NOT IN (SELECT milestone_id, slice_id FROM slice_specs) - `).run(now); - - // Migrate task specs - db.prepare(` - INSERT OR IGNORE INTO task_specs ( - milestone_id, slice_id, task_id, verify, inputs, expected_output, - spec_version, created_at - ) - SELECT - milestone_id, slice_id, id, verify, inputs, expected_output, - 1, COALESCE(created_at, ?) - FROM tasks - WHERE (milestone_id, slice_id, id) NOT IN (SELECT milestone_id, slice_id, task_id FROM task_specs) - `).run(now); -} -function migrateSchema(db: DbAdapter): void { - const row = withQueryTimeout( - () => db.prepare("SELECT MAX(version) as v FROM schema_version").get(), - null, - ); - const currentVersion: number = row ? (row["v"] as number) : 0; - if (currentVersion >= SCHEMA_VERSION) return; - // Backup database before migration so a mid-migration crash doesn't - // leave a partially-migrated DB with no recovery path. - // WAL-safe: checkpoint first to flush WAL into the main DB file, then copy. - if (currentPath && currentPath !== ":memory:" && existsSync(currentPath)) { - try { - const backupPath = `${currentPath}.backup-v${currentVersion}`; - if (!existsSync(backupPath)) { - // Flush WAL to main DB file before copying — without this, the backup - // may be missing committed data that only exists in the -wal file. - try { - db.exec("PRAGMA wal_checkpoint(TRUNCATE)"); - } catch { - /* checkpoint is best-effort */ - } - copyFileSync(currentPath, backupPath); - } - } catch (backupErr) { - // Log but proceed — blocking migration leaves the DB stuck at an old - // schema version permanently on read-only or full filesystems. - logWarning( - "db", - `Pre-migration backup failed: ${backupErr instanceof Error ? backupErr.message : String(backupErr)}`, - ); - } - } - db.exec("BEGIN"); - try { - if (currentVersion < 2) { - db.exec(` - CREATE TABLE IF NOT EXISTS artifacts ( - path TEXT PRIMARY KEY, - artifact_type TEXT NOT NULL DEFAULT '', - milestone_id TEXT DEFAULT NULL, - slice_id TEXT DEFAULT NULL, - task_id TEXT DEFAULT NULL, - full_content TEXT NOT NULL DEFAULT '', - imported_at TEXT NOT NULL DEFAULT '' - ) - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 2, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 3) { - db.exec(` - CREATE TABLE IF NOT EXISTS memories ( - seq INTEGER PRIMARY KEY AUTOINCREMENT, - id TEXT NOT NULL UNIQUE, - category TEXT NOT NULL, - content TEXT NOT NULL, - confidence REAL NOT NULL DEFAULT 0.8, - source_unit_type TEXT, - source_unit_id TEXT, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - superseded_by TEXT DEFAULT NULL, - hit_count INTEGER NOT NULL DEFAULT 0 - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS memory_processed_units ( - unit_key TEXT PRIMARY KEY, - activity_file TEXT, - processed_at TEXT NOT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_memories_active ON memories(superseded_by)", - ); - db.exec("DROP VIEW IF EXISTS active_memories"); - db.exec( - "CREATE VIEW active_memories AS SELECT * FROM memories WHERE superseded_by IS NULL", - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 3, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 4) { - ensureColumn( - db, - "decisions", - "made_by", - `ALTER TABLE decisions ADD COLUMN made_by TEXT NOT NULL DEFAULT 'agent'`, - ); - db.exec("DROP VIEW IF EXISTS active_decisions"); - db.exec( - "CREATE VIEW active_decisions AS SELECT * FROM decisions WHERE superseded_by IS NULL", - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 4, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 5) { - db.exec(` - CREATE TABLE IF NOT EXISTS milestones ( - id TEXT PRIMARY KEY, - title TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT 'active', - created_at TEXT NOT NULL, - completed_at TEXT DEFAULT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS slices ( - milestone_id TEXT NOT NULL, - id TEXT NOT NULL, - title TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT 'pending', - risk TEXT NOT NULL DEFAULT 'medium', - created_at TEXT NOT NULL DEFAULT '', - completed_at TEXT DEFAULT NULL, - PRIMARY KEY (milestone_id, id), - FOREIGN KEY (milestone_id) REFERENCES milestones(id) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS tasks ( - milestone_id TEXT NOT NULL, - slice_id TEXT NOT NULL, - id TEXT NOT NULL, - title TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT 'pending', - one_liner TEXT NOT NULL DEFAULT '', - narrative TEXT NOT NULL DEFAULT '', - verification_result TEXT NOT NULL DEFAULT '', - duration TEXT NOT NULL DEFAULT '', - completed_at TEXT DEFAULT NULL, - blocker_discovered INTEGER DEFAULT 0, - deviations TEXT NOT NULL DEFAULT '', - known_issues TEXT NOT NULL DEFAULT '', - key_files TEXT NOT NULL DEFAULT '[]', - key_decisions TEXT NOT NULL DEFAULT '[]', - full_summary_md TEXT NOT NULL DEFAULT '', - PRIMARY KEY (milestone_id, slice_id, id), - FOREIGN KEY (milestone_id, slice_id) REFERENCES slices(milestone_id, id) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS verification_evidence ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - task_id TEXT NOT NULL DEFAULT '', - slice_id TEXT NOT NULL DEFAULT '', - milestone_id TEXT NOT NULL DEFAULT '', - command TEXT NOT NULL DEFAULT '', - exit_code INTEGER DEFAULT 0, - verdict TEXT NOT NULL DEFAULT '', - duration_ms INTEGER DEFAULT 0, - created_at TEXT NOT NULL DEFAULT '', - FOREIGN KEY (milestone_id, slice_id, task_id) REFERENCES tasks(milestone_id, slice_id, id) - ) - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 5, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 6) { - ensureColumn( - db, - "slices", - "full_summary_md", - `ALTER TABLE slices ADD COLUMN full_summary_md TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "slices", - "full_uat_md", - `ALTER TABLE slices ADD COLUMN full_uat_md TEXT NOT NULL DEFAULT ''`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 6, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 7) { - ensureColumn( - db, - "slices", - "depends", - `ALTER TABLE slices ADD COLUMN depends TEXT NOT NULL DEFAULT '[]'`, - ); - ensureColumn( - db, - "slices", - "demo", - `ALTER TABLE slices ADD COLUMN demo TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "milestones", - "depends_on", - `ALTER TABLE milestones ADD COLUMN depends_on TEXT NOT NULL DEFAULT '[]'`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 7, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 8) { - ensureColumn( - db, - "milestones", - "vision", - `ALTER TABLE milestones ADD COLUMN vision TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "milestones", - "success_criteria", - `ALTER TABLE milestones ADD COLUMN success_criteria TEXT NOT NULL DEFAULT '[]'`, - ); - ensureColumn( - db, - "milestones", - "key_risks", - `ALTER TABLE milestones ADD COLUMN key_risks TEXT NOT NULL DEFAULT '[]'`, - ); - ensureColumn( - db, - "milestones", - "proof_strategy", - `ALTER TABLE milestones ADD COLUMN proof_strategy TEXT NOT NULL DEFAULT '[]'`, - ); - ensureColumn( - db, - "milestones", - "verification_contract", - `ALTER TABLE milestones ADD COLUMN verification_contract TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "milestones", - "verification_integration", - `ALTER TABLE milestones ADD COLUMN verification_integration TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "milestones", - "verification_operational", - `ALTER TABLE milestones ADD COLUMN verification_operational TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "milestones", - "verification_uat", - `ALTER TABLE milestones ADD COLUMN verification_uat TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "milestones", - "definition_of_done", - `ALTER TABLE milestones ADD COLUMN definition_of_done TEXT NOT NULL DEFAULT '[]'`, - ); - ensureColumn( - db, - "milestones", - "requirement_coverage", - `ALTER TABLE milestones ADD COLUMN requirement_coverage TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "milestones", - "boundary_map_markdown", - `ALTER TABLE milestones ADD COLUMN boundary_map_markdown TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "slices", - "goal", - `ALTER TABLE slices ADD COLUMN goal TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "slices", - "success_criteria", - `ALTER TABLE slices ADD COLUMN success_criteria TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "slices", - "proof_level", - `ALTER TABLE slices ADD COLUMN proof_level TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "slices", - "integration_closure", - `ALTER TABLE slices ADD COLUMN integration_closure TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "slices", - "observability_impact", - `ALTER TABLE slices ADD COLUMN observability_impact TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "slices", - "uat_verdict", - `ALTER TABLE slices ADD COLUMN uat_verdict TEXT DEFAULT NULL`, - ); - ensureColumn( - db, - "tasks", - "description", - `ALTER TABLE tasks ADD COLUMN description TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "tasks", - "estimate", - `ALTER TABLE tasks ADD COLUMN estimate TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "tasks", - "files", - `ALTER TABLE tasks ADD COLUMN files TEXT NOT NULL DEFAULT '[]'`, - ); - ensureColumn( - db, - "tasks", - "verify", - `ALTER TABLE tasks ADD COLUMN verify TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "tasks", - "inputs", - `ALTER TABLE tasks ADD COLUMN inputs TEXT NOT NULL DEFAULT '[]'`, - ); - ensureColumn( - db, - "tasks", - "expected_output", - `ALTER TABLE tasks ADD COLUMN expected_output TEXT NOT NULL DEFAULT '[]'`, - ); - ensureColumn( - db, - "tasks", - "observability_impact", - `ALTER TABLE tasks ADD COLUMN observability_impact TEXT NOT NULL DEFAULT ''`, - ); - db.exec(` - CREATE TABLE IF NOT EXISTS replan_history ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - milestone_id TEXT NOT NULL DEFAULT '', - slice_id TEXT DEFAULT NULL, - task_id TEXT DEFAULT NULL, - summary TEXT NOT NULL DEFAULT '', - previous_artifact_path TEXT DEFAULT NULL, - replacement_artifact_path TEXT DEFAULT NULL, - created_at TEXT NOT NULL DEFAULT '', - FOREIGN KEY (milestone_id) REFERENCES milestones(id) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS assessments ( - path TEXT PRIMARY KEY, - milestone_id TEXT NOT NULL DEFAULT '', - slice_id TEXT DEFAULT NULL, - task_id TEXT DEFAULT NULL, - status TEXT NOT NULL DEFAULT '', - scope TEXT NOT NULL DEFAULT '', - full_content TEXT NOT NULL DEFAULT '', - created_at TEXT NOT NULL DEFAULT '', - FOREIGN KEY (milestone_id) REFERENCES milestones(id) - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_replan_history_milestone ON replan_history(milestone_id, created_at)", - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 8, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 9) { - ensureColumn( - db, - "slices", - "sequence", - `ALTER TABLE slices ADD COLUMN sequence INTEGER DEFAULT 0`, - ); - ensureColumn( - db, - "tasks", - "sequence", - `ALTER TABLE tasks ADD COLUMN sequence INTEGER DEFAULT 0`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 9, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 10) { - ensureColumn( - db, - "slices", - "replan_triggered_at", - `ALTER TABLE slices ADD COLUMN replan_triggered_at TEXT DEFAULT NULL`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 10, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 11) { - ensureColumn( - db, - "tasks", - "full_plan_md", - `ALTER TABLE tasks ADD COLUMN full_plan_md TEXT NOT NULL DEFAULT ''`, - ); - // Add unique constraint to replan_history for idempotency: - // one replan record per blocker task per slice per milestone. - db.exec(` - CREATE UNIQUE INDEX IF NOT EXISTS idx_replan_history_unique - ON replan_history(milestone_id, slice_id, task_id) - WHERE slice_id IS NOT NULL AND task_id IS NOT NULL - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 11, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 12) { - db.exec(` - CREATE TABLE IF NOT EXISTS quality_gates ( - milestone_id TEXT NOT NULL, - slice_id TEXT NOT NULL, - gate_id TEXT NOT NULL, - scope TEXT NOT NULL DEFAULT 'slice', - task_id TEXT DEFAULT NULL, - status TEXT NOT NULL DEFAULT 'pending', - verdict TEXT NOT NULL DEFAULT '', - rationale TEXT NOT NULL DEFAULT '', - findings TEXT NOT NULL DEFAULT '', - evaluated_at TEXT DEFAULT NULL, - PRIMARY KEY (milestone_id, slice_id, gate_id, COALESCE(task_id, '')), - FOREIGN KEY (milestone_id, slice_id) REFERENCES slices(milestone_id, id) - ) - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 12, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 13) { - // Hot-path indexes for auto-loop dispatch queries - db.exec( - "CREATE INDEX IF NOT EXISTS idx_tasks_active ON tasks(milestone_id, slice_id, status)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_slices_active ON slices(milestone_id, status)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_milestones_status ON milestones(status)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_quality_gates_pending ON quality_gates(milestone_id, slice_id, status)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_verification_evidence_task ON verification_evidence(milestone_id, slice_id, task_id)", - ); - ensureVerificationEvidenceDedupIndex(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 13, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 14) { - db.exec(` - CREATE TABLE IF NOT EXISTS slice_dependencies ( - milestone_id TEXT NOT NULL, - slice_id TEXT NOT NULL, - depends_on_slice_id TEXT NOT NULL, - PRIMARY KEY (milestone_id, slice_id, depends_on_slice_id), - FOREIGN KEY (milestone_id, slice_id) REFERENCES slices(milestone_id, id), - FOREIGN KEY (milestone_id, depends_on_slice_id) REFERENCES slices(milestone_id, id) - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_slice_deps_target ON slice_dependencies(milestone_id, depends_on_slice_id)", - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 14, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 15) { - db.exec(` - CREATE TABLE IF NOT EXISTS gate_runs ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - trace_id TEXT NOT NULL, - turn_id TEXT NOT NULL, - gate_id TEXT NOT NULL, - gate_type TEXT NOT NULL DEFAULT '', - unit_type TEXT DEFAULT NULL, - unit_id TEXT DEFAULT NULL, - milestone_id TEXT DEFAULT NULL, - slice_id TEXT DEFAULT NULL, - task_id TEXT DEFAULT NULL, - outcome TEXT NOT NULL DEFAULT 'pass', - failure_class TEXT NOT NULL DEFAULT 'none', - rationale TEXT NOT NULL DEFAULT '', - findings TEXT NOT NULL DEFAULT '', - attempt INTEGER NOT NULL DEFAULT 1, - max_attempts INTEGER NOT NULL DEFAULT 1, - retryable INTEGER NOT NULL DEFAULT 0, - evaluated_at TEXT NOT NULL DEFAULT '', - duration_ms INTEGER DEFAULT NULL, - cost_micro_usd INTEGER DEFAULT NULL - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS turn_git_transactions ( - trace_id TEXT NOT NULL, - turn_id TEXT NOT NULL, - unit_type TEXT DEFAULT NULL, - unit_id TEXT DEFAULT NULL, - stage TEXT NOT NULL DEFAULT 'turn-start', - action TEXT NOT NULL DEFAULT 'status-only', - push INTEGER NOT NULL DEFAULT 0, - status TEXT NOT NULL DEFAULT 'ok', - error TEXT DEFAULT NULL, - metadata_json TEXT NOT NULL DEFAULT '{}', - updated_at TEXT NOT NULL DEFAULT '', - PRIMARY KEY (trace_id, turn_id, stage) - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS audit_events ( - event_id TEXT PRIMARY KEY, - trace_id TEXT NOT NULL, - turn_id TEXT DEFAULT NULL, - caused_by TEXT DEFAULT NULL, - category TEXT NOT NULL, - type TEXT NOT NULL, - ts TEXT NOT NULL, - payload_json TEXT NOT NULL DEFAULT '{}' - ) - `); - db.exec(` - CREATE TABLE IF NOT EXISTS audit_turn_index ( - trace_id TEXT NOT NULL, - turn_id TEXT NOT NULL, - first_ts TEXT NOT NULL, - last_ts TEXT NOT NULL, - event_count INTEGER NOT NULL DEFAULT 0, - PRIMARY KEY (trace_id, turn_id) - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_gate_runs_turn ON gate_runs(trace_id, turn_id)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_gate_runs_lookup ON gate_runs(milestone_id, slice_id, task_id, gate_id)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_turn_git_tx_turn ON turn_git_transactions(trace_id, turn_id)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_audit_events_trace ON audit_events(trace_id, ts)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_audit_events_turn ON audit_events(trace_id, turn_id, ts)", - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 15, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 16) { - db.exec(` - CREATE TABLE IF NOT EXISTS llm_task_outcomes ( - model_id TEXT NOT NULL, - provider TEXT NOT NULL, - unit_type TEXT NOT NULL, - unit_id TEXT NOT NULL, - succeeded INTEGER NOT NULL DEFAULT 0, - retries INTEGER NOT NULL DEFAULT 0, - escalated INTEGER NOT NULL DEFAULT 0, - verification_passed INTEGER DEFAULT NULL, - blocker_discovered INTEGER NOT NULL DEFAULT 0, - duration_ms INTEGER DEFAULT NULL, - tokens_total INTEGER DEFAULT NULL, - cost_usd REAL DEFAULT NULL, - recorded_at INTEGER NOT NULL - ) - `); - db.exec( - "CREATE UNIQUE INDEX IF NOT EXISTS idx_llm_task_outcomes_identity ON llm_task_outcomes(unit_type, unit_id, recorded_at)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_llm_task_outcomes_model_unit ON llm_task_outcomes(model_id, unit_type, recorded_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_llm_task_outcomes_unit ON llm_task_outcomes(unit_type, recorded_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_llm_task_outcomes_provider ON llm_task_outcomes(provider, recorded_at DESC)", - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 16, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 17) { - ensureColumn( - db, - "tasks", - "verification_status", - `ALTER TABLE tasks ADD COLUMN verification_status TEXT NOT NULL DEFAULT ''`, - ); - // Backfill verification_status from existing verification_evidence rows so the - // prior-task guard works on databases upgraded mid-project (not just new ones). - db.exec(` - UPDATE tasks - SET verification_status = CASE - WHEN (SELECT COUNT(*) FROM verification_evidence ve - WHERE ve.milestone_id = tasks.milestone_id - AND ve.slice_id = tasks.slice_id - AND ve.task_id = tasks.id) = 0 - THEN '' - WHEN (SELECT COUNT(*) FROM verification_evidence ve - WHERE ve.milestone_id = tasks.milestone_id - AND ve.slice_id = tasks.slice_id - AND ve.task_id = tasks.id - AND ve.exit_code != 0) = 0 - THEN 'all_pass' - WHEN (SELECT COUNT(*) FROM verification_evidence ve - WHERE ve.milestone_id = tasks.milestone_id - AND ve.slice_id = tasks.slice_id - AND ve.task_id = tasks.id - AND ve.exit_code = 0) > 0 - THEN 'partial' - ELSE 'all_fail' - END - WHERE tasks.status IN ('complete', 'done') - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 17, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 18) { - ensureColumn( - db, - "slices", - "adversarial_partner", - `ALTER TABLE slices ADD COLUMN adversarial_partner TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "slices", - "adversarial_combatant", - `ALTER TABLE slices ADD COLUMN adversarial_combatant TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "slices", - "adversarial_architect", - `ALTER TABLE slices ADD COLUMN adversarial_architect TEXT NOT NULL DEFAULT ''`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 18, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 19) { - ensureColumn( - db, - "slices", - "planning_meeting_json", - `ALTER TABLE slices ADD COLUMN planning_meeting_json TEXT NOT NULL DEFAULT ''`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 19, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 20) { - ensureColumn( - db, - "milestones", - "vision_meeting_json", - `ALTER TABLE milestones ADD COLUMN vision_meeting_json TEXT NOT NULL DEFAULT ''`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 20, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 21) { - ensureRepoProfileTables(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 21, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 22) { - // SF ADR-011: progressive planning. is_sketch=1 means the slice is a 2-3 - // sentence sketch awaiting refine-slice expansion; refine fills in the - // real plan and clears the flag. sketch_scope holds the milestone - // planner's stored scope hint that refine treats as a hard boundary. - ensureColumn( - db, - "slices", - "is_sketch", - `ALTER TABLE slices ADD COLUMN is_sketch INTEGER NOT NULL DEFAULT 0`, - ); - ensureColumn( - db, - "slices", - "sketch_scope", - `ALTER TABLE slices ADD COLUMN sketch_scope TEXT NOT NULL DEFAULT ''`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 22, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 23) { - // ADR-011 Phase 2 (SF ADR): mid-execution escalation. escalation_pending=1 - // marks a task that paused for a user decision; escalation_artifact_path - // points to the T##-ESCALATION.json file containing options + recommendation. - // State derivation will emit phase='escalating-task' when any task in the - // active slice has escalation_pending=1; dispatch returns 'stop' so the - // loop never bypasses a pending decision. - ensureColumn( - db, - "tasks", - "escalation_pending", - `ALTER TABLE tasks ADD COLUMN escalation_pending INTEGER NOT NULL DEFAULT 0`, - ); - ensureColumn( - db, - "tasks", - "escalation_artifact_path", - `ALTER TABLE tasks ADD COLUMN escalation_artifact_path TEXT DEFAULT NULL`, - ); - try { - db.exec( - "CREATE INDEX IF NOT EXISTS idx_tasks_escalation_pending ON tasks(milestone_id, slice_id, escalation_pending)", - ); - } catch { - /* index creation is opportunistic — fall through if backend lacks it */ - } - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 23, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 24) { - // ADR-011 P2 (SF ADR): the third escalation flag for the - // continueWithDefault=true case — an artifact is recorded for human - // review later, but the loop is NOT paused. Mutually exclusive with - // escalation_pending (the writer flips one or the other). - ensureColumn( - db, - "tasks", - "escalation_awaiting_review", - `ALTER TABLE tasks ADD COLUMN escalation_awaiting_review INTEGER NOT NULL DEFAULT 0`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 24, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 25) { - // SF ADR-011 P2 carry-forward: when an escalation is resolved, the user's - // choice should be visible to the next execute-task agent in the same - // slice. escalation_override_applied=0 marks "resolved but not yet - // injected into a downstream prompt"; the prompt builder calls - // claimEscalationOverride which atomically flips it to 1 (idempotent - // race-safe claim). Per-task granularity so multi-task slices can - // carry multiple resolved escalations forward independently. - ensureColumn( - db, - "tasks", - "escalation_override_applied", - `ALTER TABLE tasks ADD COLUMN escalation_override_applied INTEGER NOT NULL DEFAULT 0`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 25, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 26) { - db.exec(` - CREATE TABLE IF NOT EXISTS uok_runs ( - run_id TEXT PRIMARY KEY, - session_id TEXT DEFAULT NULL, - path TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT 'started', - started_at TEXT NOT NULL, - ended_at TEXT DEFAULT NULL, - error TEXT DEFAULT NULL, - flags_json TEXT NOT NULL DEFAULT '{}', - updated_at TEXT NOT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_uok_runs_status_started ON uok_runs(status, started_at DESC)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_uok_runs_session ON uok_runs(session_id, started_at DESC)", - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 26, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 27) { - ensureSolverEvalTables(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 27, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 28) { - // UOK observability: gate execution latency - // Guard: gate_runs table may not exist in minimal legacy DBs (it will be dropped in v58) - if (tableExists(db, "gate_runs")) { - ensureColumn( - db, - "gate_runs", - "duration_ms", - "ALTER TABLE gate_runs ADD COLUMN duration_ms INTEGER DEFAULT NULL", - ); - } - // UOK circuit breaker state - db.exec(` - CREATE TABLE IF NOT EXISTS gate_circuit_breakers ( - gate_id TEXT PRIMARY KEY, - state TEXT NOT NULL DEFAULT 'closed', - failure_streak INTEGER NOT NULL DEFAULT 0, - last_failure_at TEXT DEFAULT NULL, - opened_at TEXT DEFAULT NULL, - half_open_attempts INTEGER NOT NULL DEFAULT 0, - updated_at TEXT NOT NULL DEFAULT '' - ) - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 28, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 29) { - ensureHeadlessRunTables(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 29, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 30) { - ensureSelfFeedbackTables(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 30, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 31) { - ensureUokMessageTables(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 31, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 32) { - ensureTaskCreatedAtColumn(db); - ensureSpecSchemaTables(db); - // Populate spec tables from existing spec columns in runtime tables - populateSpecTablesFromExisting(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 32, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 33) { - ensureColumn( - db, - "milestones", - "sequence", - `ALTER TABLE milestones ADD COLUMN sequence INTEGER DEFAULT 0`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 33, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 34) { - ensureTaskCreatedAtColumn(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 34, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 35) { - ensureBacklogTables(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 35, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 36) { - migrateCostUsdToMicroUsd(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 36, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 37) { - ensureScheduleTables(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 37, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 38) { - try { - db.exec( - "ALTER TABLE memories ADD COLUMN tags TEXT NOT NULL DEFAULT '[]'", - ); - } catch { - // Column may already exist on fresh DBs - } - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 38, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 39) { - db.exec( - "CREATE INDEX IF NOT EXISTS idx_memory_sources_content_hash ON memory_sources(content_hash)", - ); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_memories_category ON memories(superseded_by, category)", - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 39, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 40) { - db.exec(` - CREATE TABLE IF NOT EXISTS judgments ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - unit_id TEXT NOT NULL, - decision TEXT NOT NULL DEFAULT '', - alternatives_json TEXT NOT NULL DEFAULT '[]', - reasoning TEXT NOT NULL DEFAULT '', - confidence TEXT NOT NULL DEFAULT 'medium', - ts TEXT NOT NULL - ) - `); - db.exec( - "CREATE INDEX IF NOT EXISTS idx_judgments_unit_id ON judgments(unit_id, ts DESC)", - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 40, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 41) { - ensureRetrievalEvidenceTables(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 41, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 42) { - ensureColumn( - db, - "milestones", - "product_research_json", - `ALTER TABLE milestones ADD COLUMN product_research_json TEXT NOT NULL DEFAULT ''`, - ); - ensureColumn( - db, - "milestone_specs", - "product_research_json", - `ALTER TABLE milestone_specs ADD COLUMN product_research_json TEXT DEFAULT ''`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 42, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 43) { - db.exec(` - CREATE TABLE IF NOT EXISTS session_mode_state ( - id INTEGER PRIMARY KEY CHECK (id = 1), - work_mode TEXT NOT NULL DEFAULT 'chat', - run_control TEXT NOT NULL DEFAULT 'manual', - permission_profile TEXT NOT NULL DEFAULT 'restricted', - model_mode TEXT NOT NULL DEFAULT 'smart', - surface TEXT NOT NULL DEFAULT 'tui', - updated_at TEXT NOT NULL DEFAULT '' - ) - `); - db.exec(` - INSERT OR IGNORE INTO session_mode_state (id, work_mode, run_control, permission_profile, model_mode, surface, updated_at) - VALUES (1, 'chat', 'manual', 'restricted', 'smart', 'tui', datetime('now')) - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 43, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 44) { - ensureSpecSchemaTables(db); - ensureTaskFrontmatterColumns(db); - db.exec(` - UPDATE tasks - SET task_status = CASE status - WHEN 'complete' THEN 'done' - WHEN 'completed' THEN 'done' - WHEN 'done' THEN 'done' - WHEN 'running' THEN 'running' - WHEN 'in_progress' THEN 'running' - WHEN 'blocked' THEN 'blocked' - WHEN 'failed' THEN 'failed' - WHEN 'cancelled' THEN 'cancelled' - ELSE COALESCE(NULLIF(task_status, ''), 'todo') - END - `); - db.exec(` - UPDATE task_specs - SET risk = COALESCE((SELECT tasks.risk FROM tasks - WHERE tasks.milestone_id = task_specs.milestone_id - AND tasks.slice_id = task_specs.slice_id - AND tasks.id = task_specs.task_id), risk), - mutation_scope = COALESCE((SELECT tasks.mutation_scope FROM tasks - WHERE tasks.milestone_id = task_specs.milestone_id - AND tasks.slice_id = task_specs.slice_id - AND tasks.id = task_specs.task_id), mutation_scope), - verification_type = COALESCE((SELECT tasks.verification_type FROM tasks - WHERE tasks.milestone_id = task_specs.milestone_id - AND tasks.slice_id = task_specs.slice_id - AND tasks.id = task_specs.task_id), verification_type), - plan_approval = COALESCE((SELECT tasks.plan_approval FROM tasks - WHERE tasks.milestone_id = task_specs.milestone_id - AND tasks.slice_id = task_specs.slice_id - AND tasks.id = task_specs.task_id), plan_approval), - estimated_effort = COALESCE((SELECT tasks.estimated_effort FROM tasks - WHERE tasks.milestone_id = task_specs.milestone_id - AND tasks.slice_id = task_specs.slice_id - AND tasks.id = task_specs.task_id), estimated_effort), - dependencies = COALESCE((SELECT tasks.dependencies FROM tasks - WHERE tasks.milestone_id = task_specs.milestone_id - AND tasks.slice_id = task_specs.slice_id - AND tasks.id = task_specs.task_id), dependencies), - blocks_parallel = COALESCE((SELECT tasks.blocks_parallel FROM tasks - WHERE tasks.milestone_id = task_specs.milestone_id - AND tasks.slice_id = task_specs.slice_id - AND tasks.id = task_specs.task_id), blocks_parallel), - requires_user_input = COALESCE((SELECT tasks.requires_user_input FROM tasks - WHERE tasks.milestone_id = task_specs.milestone_id - AND tasks.slice_id = task_specs.slice_id - AND tasks.id = task_specs.task_id), requires_user_input), - auto_retry = COALESCE((SELECT tasks.auto_retry FROM tasks - WHERE tasks.milestone_id = task_specs.milestone_id - AND tasks.slice_id = task_specs.slice_id - AND tasks.id = task_specs.task_id), auto_retry), - max_retries = COALESCE((SELECT tasks.max_retries FROM tasks - WHERE tasks.milestone_id = task_specs.milestone_id - AND tasks.slice_id = task_specs.slice_id - AND tasks.id = task_specs.task_id), max_retries) - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 44, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 45) { - ensureTaskSchedulerTable(db); - db.exec(` - INSERT OR IGNORE INTO task_scheduler ( - milestone_id, slice_id, task_id, status, updated_at - ) - SELECT milestone_id, slice_id, id, 'queued', datetime('now') - FROM tasks - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 45, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 46) { - // validation_runs: mirrors droid's validation-contract.md + validation-state.json - // pattern. Each run stores the contract spec inline and its execution state. - db.exec(` - CREATE TABLE IF NOT EXISTS validation_runs ( - run_id TEXT PRIMARY KEY, - milestone_id TEXT NOT NULL, - slice_id TEXT, - task_id TEXT, - contract TEXT NOT NULL DEFAULT '', - status TEXT NOT NULL DEFAULT 'pending', - verdict TEXT NOT NULL DEFAULT '', - rationale TEXT NOT NULL DEFAULT '', - findings TEXT NOT NULL DEFAULT '', - started_at TEXT, - completed_at TEXT, - created_at TEXT NOT NULL, - FOREIGN KEY (milestone_id) REFERENCES milestones(id) - ) - `); - db.exec(` - CREATE INDEX IF NOT EXISTS idx_validation_runs_scope - ON validation_runs(milestone_id, slice_id, task_id) - `); - db.exec(` - CREATE VIEW IF NOT EXISTS latest_validation_state AS - SELECT vr.* - FROM validation_runs vr - WHERE vr.rowid = ( - SELECT MAX(v2.rowid) - FROM validation_runs v2 - WHERE v2.milestone_id = vr.milestone_id - AND v2.slice_id IS vr.slice_id - AND v2.task_id IS vr.task_id - ) - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 46, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 47) { - // Drop unused superseded_by column from validation_runs. - // The column was never written or queried — dead schema from v46. - const cols = db - .prepare("PRAGMA table_info(validation_runs)") - .all() - .map((c) => c.name); - if (cols.includes("superseded_by")) { - db.exec("ALTER TABLE validation_runs DROP COLUMN superseded_by"); - } - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 47, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 48) { - // Session layer: create tables, backfill from existing headless_runs and - // audit_turn_index so historical data is queryable from day one. - // Message text will be NULL for backfilled turns — it was never stored. - ensureSessionTables(db); - // Backfill: one session per headless run. - db.exec(` - INSERT OR IGNORE INTO sessions (session_id, trace_id, mode, cwd, created_at, updated_at) - SELECT run_id, NULL, 'headless', '', created_at, updated_at - FROM headless_runs - `); - // Backfill: one session per distinct trace_id in audit_turn_index. - // Reconstruct created_at/updated_at from the min/max timestamps. - db.exec(` - INSERT OR IGNORE INTO sessions (session_id, trace_id, mode, cwd, created_at, updated_at) - SELECT trace_id, trace_id, 'interactive', - '', MIN(first_ts), MAX(last_ts) - FROM audit_turn_index - GROUP BY trace_id - `); - // Backfill: one turn row per (trace_id, turn_id) in audit_turn_index. - // turn_index derived from row order within trace; message text is NULL. - db.exec(` - INSERT OR IGNORE INTO turns (session_id, turn_index, user_message, assistant_response, ts) - SELECT - trace_id, - ROW_NUMBER() OVER (PARTITION BY trace_id ORDER BY first_ts) - 1, - NULL, NULL, - first_ts - FROM audit_turn_index - `); - // Rebuild FTS index from any turns that have text. - // None from backfill yet, but required so the FTS table is consistent. - db.exec(`INSERT INTO turns_fts(turns_fts) VALUES ('rebuild')`); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 48, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 49) { - // Add session_snapshots table — checkpoints before irreversible ops. - // Safe to call on fresh DBs too (CREATE TABLE IF NOT EXISTS). - ensureSessionSnapshotTable(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 49, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 50) { - // Add sleeptime_consolidation_queue — decouples memory consolidation - // from the conversation turn so the daemon can drain it asynchronously. - ensureSleeptimeQueueTable(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 50, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 51) { - // Add deploy/smoke/release/rollback tables — closes the vision→production loop. - // deploy_runs tracks each deployment attempt; smoke_results tracks live verification; - // release_records tracks version bumps and publishes; rollback_runs tracks reversions. - ensureDeployTables(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 51, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 52) { - // Add triage_runs/evals/items/skills, runtime_counters, and - // validation_attention_markers tables — migrate JSONL structured state to DB. - ensureTriageTables(db); - ensureRuntimeCounterTable(db); - ensureValidationAttentionMarkersTable(db); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 52, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 53) { - // Add routing_history and routing_feedback tables — migrate file-based - // routing history to DB-first storage. - db.exec(` - CREATE TABLE IF NOT EXISTS routing_history ( - pattern TEXT NOT NULL, - tier TEXT NOT NULL, - success_count INTEGER NOT NULL DEFAULT 0, - fail_count INTEGER NOT NULL DEFAULT 0, - updated_at TEXT NOT NULL, - PRIMARY KEY (pattern, tier) - ); - CREATE TABLE IF NOT EXISTS routing_feedback ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - pattern TEXT NOT NULL, - tier TEXT NOT NULL, - feedback TEXT NOT NULL, - recorded_at TEXT NOT NULL - ); - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 53, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 54) { - // Migrate metrics ledger from .sf/runtime/metrics.json to DB-first - // unit_metrics and project_metrics_meta tables. - db.exec(` - CREATE TABLE IF NOT EXISTS unit_metrics ( - type TEXT NOT NULL, - id TEXT NOT NULL, - started_at INTEGER NOT NULL, - finished_at INTEGER NOT NULL, - model TEXT NOT NULL, - auto_session_key TEXT, - tokens_input INTEGER NOT NULL DEFAULT 0, - tokens_output INTEGER NOT NULL DEFAULT 0, - tokens_cache_read INTEGER NOT NULL DEFAULT 0, - tokens_cache_write INTEGER NOT NULL DEFAULT 0, - tokens_total INTEGER NOT NULL DEFAULT 0, - cost REAL NOT NULL DEFAULT 0, - tool_calls INTEGER NOT NULL DEFAULT 0, - assistant_messages INTEGER NOT NULL DEFAULT 0, - user_messages INTEGER NOT NULL DEFAULT 0, - api_requests INTEGER NOT NULL DEFAULT 0, - tier TEXT, - model_downgraded INTEGER, - context_window_tokens INTEGER, - truncation_sections INTEGER, - continue_here_fired INTEGER, - prompt_char_count INTEGER, - baseline_char_count INTEGER, - cache_hit_rate INTEGER, - skills TEXT, - PRIMARY KEY (type, id, started_at) - ); - CREATE TABLE IF NOT EXISTS project_metrics_meta ( - key TEXT PRIMARY KEY, - value TEXT NOT NULL - ); - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 54, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 55) { - // Schema v55: composite index for audit_events + task access-pattern views - // Guard: audit_events may not exist in minimal legacy DBs (it will be dropped in v58) - if (tableExists(db, "audit_events")) { - db.exec( - `CREATE INDEX IF NOT EXISTS idx_audit_events_category ON audit_events(category, type, ts DESC)`, - ); - } - db.exec( - `CREATE VIEW IF NOT EXISTS active_tasks AS SELECT * FROM tasks WHERE status NOT IN ('done','complete','completed','cancelled')`, - ); - db.exec(` - CREATE VIEW IF NOT EXISTS v_task_full AS - SELECT t.*, ts.spec_version, ts.verify AS spec_verify, - ts.inputs AS spec_inputs, ts.expected_output AS spec_expected_output - FROM tasks t - LEFT JOIN task_specs ts - ON t.milestone_id = ts.milestone_id - AND t.slice_id = ts.slice_id - AND t.id = ts.task_id - `); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 55, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 56) { - // Schema v56: move metrics table to dedicated metrics.db — drop from main DB - // to eliminate WAL pressure from high-frequency telemetry writes. - db.exec(`DROP TABLE IF EXISTS metrics`); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 56, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 57) { - // Schema v57: add archived_at to sessions for soft-delete / archive support. - db.exec(`ALTER TABLE sessions ADD COLUMN archived_at TEXT DEFAULT NULL`); - db.exec( - `CREATE INDEX IF NOT EXISTS idx_sessions_archived ON sessions(archived_at) WHERE archived_at IS NOT NULL`, - ); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 57, - ":applied_at": new Date().toISOString(), - }); - } - if (currentVersion < 58) { - // Schema v58: move trace data to JSONL files — drop gate_runs, turn_git_transactions, audit_events - db.exec("DROP TABLE IF EXISTS gate_runs"); - db.exec("DROP TABLE IF EXISTS turn_git_transactions"); - db.exec("DROP TABLE IF EXISTS audit_events"); - db.prepare( - "INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)", - ).run({ - ":version": 58, - ":applied_at": new Date().toISOString(), - }); - } - db.exec("COMMIT"); - } catch (err) { - db.exec("ROLLBACK"); - throw err; - } -} -let currentDb: DbAdapter | null = null; -let currentPath: string | null = null; -let currentPid = 0; -let _exitHandlerRegistered = false; -let _dbOpenAttempted = false; -/** - * Get the name of the SQLite provider currently loaded (or null if unavailable). - */ -export function getDbProvider(): string { - loadProvider(); - return "node:sqlite"; -} -/** - * Check if the database is currently open and available for queries. - */ -export function isDbAvailable(): boolean { - return currentDb !== null; -} -/** - * Returns true if openDatabase() has been called at least once this session. - * Used to distinguish "DB not yet initialized" from "DB genuinely unavailable" - * so that early callers (e.g. before_agent_start context injection) don't - * trigger a false degraded-mode warning. - */ -export function wasDbOpenAttempted(): boolean { - return _dbOpenAttempted; -} -/** - * Get the current database adapter, or null if the database is not open. - */ -export function getDatabase(): DbAdapter | null { - return currentDb; -} -/** - * Open the database at the specified path. Returns true if successful. - */ -export function openDatabase(path: string): boolean { - _dbOpenAttempted = true; - if (currentDb && currentPath !== path) closeDatabase(); - if (currentDb && currentPath === path) return true; - const rawDb = openRawDb(path); - if (!rawDb) return false; - const adapter = createAdapter(rawDb); - const fileBacked = path !== ":memory:"; - try { - initSchema(adapter, fileBacked); - createDatabaseSnapshot(rawDb, path); - performDatabaseMaintenance(rawDb, path); - } catch (err) { - // Corrupt freelist: DDL fails with "malformed" but VACUUM can rebuild. - // Attempt VACUUM recovery before giving up (see #2519). - if ( - fileBacked && - err instanceof Error && - err.message?.includes("malformed") - ) { - try { - adapter.exec("VACUUM"); - initSchema(adapter, fileBacked); - process.stderr.write("sf-db: recovered corrupt database via VACUUM\n"); - } catch (retryErr) { - try { - adapter.close(); - } catch (e) { - logWarning( - "db", - `close after VACUUM failed: ${(e as Error)?.message}`, - ); - } - throw retryErr; - } - } else { - try { - adapter.close(); - } catch (e) { - logWarning("db", `close after VACUUM failed: ${(e as Error)?.message}`); - } - throw err; - } - } - currentDb = adapter; - currentPath = path; - currentPid = process.pid; - if (!_exitHandlerRegistered) { - _exitHandlerRegistered = true; - process.on("exit", () => { - try { - closeDatabase(); - } catch (e) { - logWarning("db", `exit handler close failed: ${(e as Error)?.message}`); - } - }); - } - return true; -} -/** - * Flush the WAL to the main DB file using a PASSIVE checkpoint. - * - * Purpose: safely persist all committed transactions to the main DB file at - * controlled loop boundaries (post-unit finalize). With wal_autocheckpoint=0, - * this is the only way WAL pages are flushed — keeping the checkpoint window - * predictable and crash-safe (no mid-operation checkpoint that an OOM kill - * could interrupt). - * - * PASSIVE is used (not TRUNCATE) so concurrent readers are not blocked. The - * WAL is truncated on close via closeDatabase(). - * - * Consumer: runFinalize() in auto/phases.js after each successful unit. - */ -export function checkpointWal(): void { - if (!currentDb) return; - try { - currentDb.exec("PRAGMA wal_checkpoint(PASSIVE)"); - } catch (e) { - logWarning( - "db", - `WAL checkpoint failed: ${e instanceof Error ? e.message : String(e)}`, - ); - } -} - -/** - * Close the database connection. - */ -export function closeDatabase(): void { - if (currentDb) { - try { - currentDb.exec("PRAGMA wal_checkpoint(TRUNCATE)"); - } catch (e) { - logWarning("db", `WAL checkpoint failed: ${(e as Error)?.message}`); - } - try { - // Incremental vacuum to reclaim space without blocking - currentDb.exec("PRAGMA incremental_vacuum(64)"); - } catch (e) { - logWarning("db", `incremental vacuum failed: ${(e as Error)?.message}`); - } - try { - currentDb.close(); - } catch (e) { - logWarning("db", `database close failed: ${(e as Error)?.message}`); - } - currentDb = null; - currentPath = null; - currentPid = 0; - _dbOpenAttempted = false; - } -} -/** Run a full VACUUM — call sparingly (e.g. after milestone completion). */ -/** - * Vacuum the database to reclaim disk space and optimize. - */ -export function vacuumDatabase(): void { - if (!currentDb) return; - try { - currentDb.exec("VACUUM"); - } catch (e) { - logWarning("db", `VACUUM failed: ${(e as Error)?.message}`); - } -} -let _txDepth = 0; -/** - * Execute a callback within a database transaction (BEGIN...COMMIT or ROLLBACK). - */ -export function transaction(fn: () => T): T { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - // Re-entrant: if already inside a transaction, just run fn() without - // starting a new one. SQLite does not support nested BEGIN/COMMIT. - if (_txDepth > 0) { - _txDepth++; - try { - return fn(); - } finally { - _txDepth--; - } - } - _txDepth++; - currentDb.exec("BEGIN"); - try { - const result = fn(); - currentDb.exec("COMMIT"); - return result; - } catch (err) { - currentDb.exec("ROLLBACK"); - throw err; - } finally { - _txDepth--; - } -} -/** - * Wrap a block of reads in a DEFERRED transaction so that all SELECTs observe - * a consistent snapshot of the DB even if a concurrent writer commits between - * them. Use this for multi-query read flows (e.g. tool executors that query - * milestone + slices + counts and want one snapshot). Re-entrant — if already - * inside a transaction, runs fn() without starting a nested one. - */ -/** - * Execute a callback within a read-only database transaction. - */ -export function readTransaction(fn: () => T): T { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - if (_txDepth > 0) { - _txDepth++; - try { - return fn(); - } finally { - _txDepth--; - } - } - _txDepth++; - currentDb.exec("BEGIN DEFERRED"); - try { - const result = fn(); - currentDb.exec("COMMIT"); - return result; - } catch (err) { - try { - currentDb.exec("ROLLBACK"); - } catch (rollbackErr) { - // A failed ROLLBACK after a failed read is a split-brain signal — - // the transaction is in an indeterminate state. Surface it via the - // logger instead of swallowing it. - logError("db", "snapshotState ROLLBACK failed", { - error: rollbackErr.message, - }); - } - throw err; - } finally { - _txDepth--; - } -} -export function insertDecision(d: DecisionInput): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT INTO decisions (id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by) - VALUES (:id, :when_context, :scope, :decision, :choice, :rationale, :revisable, :made_by, :superseded_by)`) - .run({ - ":id": d.id, - ":when_context": d.when_context, - ":scope": d.scope, - ":decision": d.decision, - ":choice": d.choice, - ":rationale": d.rationale, - ":revisable": d.revisable, - ":made_by": d.made_by ?? "agent", - ":superseded_by": d.superseded_by, - }); -} -export function getDecisionById(id: string): DbRow | undefined { - if (!currentDb) return undefined; - const row = currentDb.prepare("SELECT * FROM decisions WHERE id = ?").get(id); - if (!row) return undefined; - return { - seq: row["seq"], - id: row["id"], - when_context: row["when_context"], - scope: row["scope"], - decision: row["decision"], - choice: row["choice"], - rationale: row["rationale"], - revisable: row["revisable"], - made_by: row["made_by"] ?? "agent", - superseded_by: row["superseded_by"] ?? null, - }; -} -export function getActiveDecisions(): DbRow[] { - if (!currentDb) return []; - const rows = currentDb.prepare("SELECT * FROM active_decisions").all(); - return rows.map((row) => ({ - seq: row["seq"], - id: row["id"], - when_context: row["when_context"], - scope: row["scope"], - decision: row["decision"], - choice: row["choice"], - rationale: row["rationale"], - revisable: row["revisable"], - made_by: row["made_by"] ?? "agent", - superseded_by: null, - })); -} -export function insertRequirement(r: RequirementInput): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT INTO requirements (id, class, status, description, why, source, primary_owner, supporting_slices, validation, notes, full_content, superseded_by) - VALUES (:id, :class, :status, :description, :why, :source, :primary_owner, :supporting_slices, :validation, :notes, :full_content, :superseded_by)`) - .run({ - ":id": r.id, - ":class": r.class, - ":status": r.status, - ":description": r.description, - ":why": r.why, - ":source": r.source, - ":primary_owner": r.primary_owner, - ":supporting_slices": r.supporting_slices, - ":validation": r.validation, - ":notes": r.notes, - ":full_content": r.full_content, - ":superseded_by": r.superseded_by, - }); -} -export function getRequirementById(id: string): DbRow | undefined { - if (!currentDb) return undefined; - const row = currentDb - .prepare("SELECT * FROM requirements WHERE id = ?") - .get(id); - if (!row) return undefined; - return { - id: row["id"], - class: row["class"], - status: row["status"], - description: row["description"], - why: row["why"], - source: row["source"], - primary_owner: row["primary_owner"], - supporting_slices: row["supporting_slices"], - validation: row["validation"], - notes: row["notes"], - full_content: row["full_content"], - superseded_by: row["superseded_by"] ?? null, - }; -} -export function getActiveRequirements(): DbRow[] { - if (!currentDb) return []; - const rows = currentDb.prepare("SELECT * FROM active_requirements").all(); - return rows.map((row) => ({ - id: row["id"], - class: row["class"], - status: row["status"], - description: row["description"], - why: row["why"], - source: row["source"], - primary_owner: row["primary_owner"], - supporting_slices: row["supporting_slices"], - validation: row["validation"], - notes: row["notes"], - full_content: row["full_content"], - superseded_by: null, - })); -} -export function getDbOwnerPid(): number { - return currentPid; -} -export function getDbPath(): string | null { - return currentPath; -} - -/** - * Load persisted session mode state from DB. - * - * Purpose: restore mode state across session restarts. - * - * Consumer: AutoSession initialization. - */ -export function loadSessionModeState(): Record | null { - if (!currentDb) return null; - try { - const row = currentDb - .prepare("SELECT * FROM session_mode_state WHERE id = 1") - .get(); - if (!row) return null; - return { - workMode: row["work_mode"] ?? "chat", - runControl: row["run_control"] ?? "manual", - permissionProfile: row["permission_profile"] ?? "restricted", - modelMode: row["model_mode"] ?? "smart", - surface: row["surface"] ?? "tui", - updatedAt: row["updated_at"] ?? null, - }; - } catch { - return null; - } -} - -/** - * Persist the current session mode into the project database. - * - * Purpose: keep work mode, run control, permission profile, and model mode - * stable across reload/resume without letting command handlers write SQL. - * - * Consumer: AutoSession.setMode() after validated mode transitions. - */ -export function saveSessionModeState(mode: Record): boolean { - if (!currentDb) return; - currentDb - .prepare(` - INSERT INTO session_mode_state (id, work_mode, run_control, permission_profile, model_mode, surface, updated_at) - VALUES (1, :workMode, :runControl, :permissionProfile, :modelMode, :surface, :updatedAt) - ON CONFLICT(id) DO UPDATE SET - work_mode = excluded.work_mode, - run_control = excluded.run_control, - permission_profile = excluded.permission_profile, - model_mode = excluded.model_mode, - surface = excluded.surface, - updated_at = excluded.updated_at - `) - .run({ - ":workMode": mode.workMode, - ":runControl": mode.runControl, - ":permissionProfile": mode.permissionProfile, - ":modelMode": mode.modelMode, - ":surface": mode.surface ?? "tui", - ":updatedAt": mode.updatedAt ?? new Date().toISOString(), - }); -} - -export function _getAdapter(): DbAdapter | null { - return currentDb; -} -export function _resetProvider(): void { - loadAttempted = false; -} -export function upsertDecision(d: DecisionInput): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - // Use ON CONFLICT DO UPDATE instead of INSERT OR REPLACE to preserve the - // seq column. INSERT OR REPLACE deletes then reinserts, resetting seq and - // corrupting decision ordering in DECISIONS.md after reconcile replay. - currentDb - .prepare(`INSERT INTO decisions (id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by) - VALUES (:id, :when_context, :scope, :decision, :choice, :rationale, :revisable, :made_by, :superseded_by) - ON CONFLICT(id) DO UPDATE SET - when_context = excluded.when_context, - scope = excluded.scope, - decision = excluded.decision, - choice = excluded.choice, - rationale = excluded.rationale, - revisable = excluded.revisable, - made_by = excluded.made_by, - superseded_by = excluded.superseded_by`) - .run({ - ":id": d.id, - ":when_context": d.when_context, - ":scope": d.scope, - ":decision": d.decision, - ":choice": d.choice, - ":rationale": d.rationale, - ":revisable": d.revisable, - ":made_by": d.made_by ?? "agent", - ":superseded_by": d.superseded_by ?? null, - }); -} -export function upsertRequirement(r: RequirementInput): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT OR REPLACE INTO requirements (id, class, status, description, why, source, primary_owner, supporting_slices, validation, notes, full_content, superseded_by) - VALUES (:id, :class, :status, :description, :why, :source, :primary_owner, :supporting_slices, :validation, :notes, :full_content, :superseded_by)`) - .run({ - ":id": r.id, - ":class": r.class, - ":status": r.status, - ":description": r.description, - ":why": r.why, - ":source": r.source, - ":primary_owner": r.primary_owner, - ":supporting_slices": r.supporting_slices, - ":validation": r.validation, - ":notes": r.notes, - ":full_content": r.full_content, - ":superseded_by": r.superseded_by ?? null, - }); -} -export function clearArtifacts(): void { - if (!currentDb) return; - try { - currentDb.exec("DELETE FROM artifacts"); - } catch (e) { - logWarning("db", `clearArtifacts failed: ${(e as Error)?.message}`); - } -} -export function insertArtifact(a: ArtifactInput): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT OR REPLACE INTO artifacts (path, artifact_type, milestone_id, slice_id, task_id, full_content, imported_at) - VALUES (:path, :artifact_type, :milestone_id, :slice_id, :task_id, :full_content, :imported_at)`) - .run({ - ":path": a.path, - ":artifact_type": a.artifact_type, - ":milestone_id": a.milestone_id, - ":slice_id": a.slice_id, - ":task_id": a.task_id, - ":full_content": a.full_content, - ":imported_at": new Date().toISOString(), - }); -} -export function insertMilestone(m: MilestoneInput): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT OR IGNORE INTO milestones ( - id, title, status, depends_on, created_at, - vision, success_criteria, key_risks, proof_strategy, - verification_contract, verification_integration, verification_operational, verification_uat, - definition_of_done, requirement_coverage, boundary_map_markdown, vision_meeting_json, product_research_json, sequence - ) VALUES ( - :id, :title, :status, :depends_on, :created_at, - :vision, :success_criteria, :key_risks, :proof_strategy, - :verification_contract, :verification_integration, :verification_operational, :verification_uat, - :definition_of_done, :requirement_coverage, :boundary_map_markdown, :vision_meeting_json, :product_research_json, :sequence - )`) - .run({ - ":id": m.id, - ":title": m.title ?? "", - // Default to "queued" — never auto-create milestones as "active" (#3380). - // Callers that need "active" must pass it explicitly. - ":status": m.status ?? "queued", - ":depends_on": JSON.stringify(m.depends_on ?? []), - ":created_at": new Date().toISOString(), - ":vision": m.planning?.vision ?? "", - ":success_criteria": JSON.stringify(m.planning?.successCriteria ?? []), - ":key_risks": JSON.stringify(m.planning?.keyRisks ?? []), - ":proof_strategy": JSON.stringify(m.planning?.proofStrategy ?? []), - ":verification_contract": m.planning?.verificationContract ?? "", - ":verification_integration": m.planning?.verificationIntegration ?? "", - ":verification_operational": m.planning?.verificationOperational ?? "", - ":verification_uat": m.planning?.verificationUat ?? "", - ":definition_of_done": JSON.stringify(m.planning?.definitionOfDone ?? []), - ":requirement_coverage": m.planning?.requirementCoverage ?? "", - ":boundary_map_markdown": m.planning?.boundaryMapMarkdown ?? "", - ":vision_meeting_json": m.planning?.visionMeeting - ? JSON.stringify(m.planning.visionMeeting) - : "", - ":product_research_json": m.planning?.productResearch - ? JSON.stringify(m.planning.productResearch) - : "", - ":sequence": m.sequence ?? 0, - }); - if (hasPlanningPayload(m.planning as Record)) { - insertMilestoneSpecIfAbsent( - m.id, - (m.planning ?? {}) as Record, - ); - } -} -function insertMilestoneSpecIfAbsent( - milestoneId: string, - planning: Record = {}, -): void { - if (!hasPlanningPayload(planning)) return; - const existing = (currentDb as DbAdapter) - .prepare("SELECT * FROM milestone_specs WHERE id = ?") - .get(milestoneId); - if (existing && !isEmptyMilestoneSpec(existing)) return; - const params = { - ":id": milestoneId, - ":vision": planning.vision ?? "", - ":success_criteria": JSON.stringify(planning.successCriteria ?? []), - ":key_risks": JSON.stringify(planning.keyRisks ?? []), - ":proof_strategy": JSON.stringify(planning.proofStrategy ?? []), - ":verification_contract": planning.verificationContract ?? "", - ":verification_integration": planning.verificationIntegration ?? "", - ":verification_operational": planning.verificationOperational ?? "", - ":verification_uat": planning.verificationUat ?? "", - ":definition_of_done": JSON.stringify(planning.definitionOfDone ?? []), - ":requirement_coverage": planning.requirementCoverage ?? "", - ":boundary_map_markdown": planning.boundaryMapMarkdown ?? "", - ":vision_meeting_json": planning.visionMeeting - ? JSON.stringify(planning.visionMeeting) - : "", - ":product_research_json": planning.productResearch - ? JSON.stringify(planning.productResearch) - : "", - ":created_at": new Date().toISOString(), - }; - if (existing) { - currentDb - .prepare(`UPDATE milestone_specs SET - vision = :vision, - success_criteria = :success_criteria, - key_risks = :key_risks, - proof_strategy = :proof_strategy, - verification_contract = :verification_contract, - verification_integration = :verification_integration, - verification_operational = :verification_operational, - verification_uat = :verification_uat, - definition_of_done = :definition_of_done, - requirement_coverage = :requirement_coverage, - boundary_map_markdown = :boundary_map_markdown, - vision_meeting_json = :vision_meeting_json, - product_research_json = :product_research_json - WHERE id = :id`) - .run(params); - return; - } - currentDb - .prepare(`INSERT OR IGNORE INTO milestone_specs ( - id, vision, success_criteria, key_risks, proof_strategy, - verification_contract, verification_integration, verification_operational, verification_uat, - definition_of_done, requirement_coverage, boundary_map_markdown, vision_meeting_json, product_research_json, - spec_version, created_at - ) VALUES ( - :id, :vision, :success_criteria, :key_risks, :proof_strategy, - :verification_contract, :verification_integration, :verification_operational, :verification_uat, - :definition_of_done, :requirement_coverage, :boundary_map_markdown, :vision_meeting_json, :product_research_json, - 1, :created_at - )`) - .run(params); -} -export function upsertMilestonePlanning( - milestoneId: string, - planning: Record, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - insertMilestoneSpecIfAbsent(milestoneId, planning); - currentDb - .prepare(`UPDATE milestones SET - title = COALESCE(NULLIF(:title, ''), title), - status = COALESCE(NULLIF(:status, ''), status), - vision = COALESCE(:vision, vision), - success_criteria = COALESCE(:success_criteria, success_criteria), - key_risks = COALESCE(:key_risks, key_risks), - proof_strategy = COALESCE(:proof_strategy, proof_strategy), - verification_contract = COALESCE(:verification_contract, verification_contract), - verification_integration = COALESCE(:verification_integration, verification_integration), - verification_operational = COALESCE(:verification_operational, verification_operational), - verification_uat = COALESCE(:verification_uat, verification_uat), - definition_of_done = COALESCE(:definition_of_done, definition_of_done), - requirement_coverage = COALESCE(:requirement_coverage, requirement_coverage), - boundary_map_markdown = COALESCE(:boundary_map_markdown, boundary_map_markdown), - vision_meeting_json = COALESCE(:vision_meeting_json, vision_meeting_json), - product_research_json = COALESCE(:product_research_json, product_research_json) - WHERE id = :id`) - .run({ - ":id": milestoneId, - ":title": planning.title ?? "", - ":status": planning.status ?? "", - ":vision": planning.vision ?? null, - ":success_criteria": planning.successCriteria - ? JSON.stringify(planning.successCriteria) - : null, - ":key_risks": planning.keyRisks - ? JSON.stringify(planning.keyRisks) - : null, - ":proof_strategy": planning.proofStrategy - ? JSON.stringify(planning.proofStrategy) - : null, - ":verification_contract": planning.verificationContract ?? null, - ":verification_integration": planning.verificationIntegration ?? null, - ":verification_operational": planning.verificationOperational ?? null, - ":verification_uat": planning.verificationUat ?? null, - ":definition_of_done": planning.definitionOfDone - ? JSON.stringify(planning.definitionOfDone) - : null, - ":requirement_coverage": planning.requirementCoverage ?? null, - ":boundary_map_markdown": planning.boundaryMapMarkdown ?? null, - ":vision_meeting_json": planning.visionMeeting - ? JSON.stringify(planning.visionMeeting) - : null, - ":product_research_json": planning.productResearch - ? JSON.stringify(planning.productResearch) - : null, - }); -} -export function insertSlice(s: SliceInput): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT INTO slices ( - milestone_id, id, title, status, risk, depends, demo, created_at, - goal, success_criteria, proof_level, integration_closure, observability_impact, - adversarial_partner, adversarial_combatant, adversarial_architect, planning_meeting_json, sequence, - is_sketch, sketch_scope - ) VALUES ( - :milestone_id, :id, :title, :status, :risk, :depends, :demo, :created_at, - :goal, :success_criteria, :proof_level, :integration_closure, :observability_impact, - :adversarial_partner, :adversarial_combatant, :adversarial_architect, :planning_meeting_json, :sequence, - :is_sketch, :sketch_scope - ) - ON CONFLICT (milestone_id, id) DO UPDATE SET - title = CASE WHEN :raw_title IS NOT NULL THEN excluded.title ELSE slices.title END, - status = CASE WHEN slices.status IN ('complete', 'done') THEN slices.status ELSE excluded.status END, - risk = CASE WHEN :raw_risk IS NOT NULL THEN excluded.risk ELSE slices.risk END, - depends = excluded.depends, - demo = CASE WHEN :raw_demo IS NOT NULL THEN excluded.demo ELSE slices.demo END, - goal = CASE WHEN :raw_goal IS NOT NULL THEN excluded.goal ELSE slices.goal END, - success_criteria = CASE WHEN :raw_success_criteria IS NOT NULL THEN excluded.success_criteria ELSE slices.success_criteria END, - proof_level = CASE WHEN :raw_proof_level IS NOT NULL THEN excluded.proof_level ELSE slices.proof_level END, - integration_closure = CASE WHEN :raw_integration_closure IS NOT NULL THEN excluded.integration_closure ELSE slices.integration_closure END, - observability_impact = CASE WHEN :raw_observability_impact IS NOT NULL THEN excluded.observability_impact ELSE slices.observability_impact END, - adversarial_partner = CASE WHEN :raw_adversarial_partner IS NOT NULL THEN excluded.adversarial_partner ELSE slices.adversarial_partner END, - adversarial_combatant = CASE WHEN :raw_adversarial_combatant IS NOT NULL THEN excluded.adversarial_combatant ELSE slices.adversarial_combatant END, - adversarial_architect = CASE WHEN :raw_adversarial_architect IS NOT NULL THEN excluded.adversarial_architect ELSE slices.adversarial_architect END, - planning_meeting_json = CASE WHEN :raw_planning_meeting_json IS NOT NULL THEN excluded.planning_meeting_json ELSE slices.planning_meeting_json END, - sequence = CASE WHEN :raw_sequence IS NOT NULL THEN excluded.sequence ELSE slices.sequence END, - is_sketch = CASE WHEN :raw_is_sketch IS NOT NULL THEN excluded.is_sketch ELSE slices.is_sketch END, - sketch_scope = CASE WHEN :raw_sketch_scope IS NOT NULL THEN excluded.sketch_scope ELSE slices.sketch_scope END`) - .run({ - ":milestone_id": s.milestoneId, - ":id": s.id, - ":title": s.title ?? "", - ":status": s.status ?? "pending", - ":risk": s.risk ?? "medium", - ":depends": JSON.stringify(s.depends ?? []), - ":demo": s.demo ?? "", - ":created_at": new Date().toISOString(), - ":goal": s.planning?.goal ?? "", - ":success_criteria": s.planning?.successCriteria ?? "", - ":proof_level": s.planning?.proofLevel ?? "", - ":integration_closure": s.planning?.integrationClosure ?? "", - ":observability_impact": s.planning?.observabilityImpact ?? "", - ":adversarial_partner": s.planning?.adversarialReview?.partner ?? "", - ":adversarial_combatant": s.planning?.adversarialReview?.combatant ?? "", - ":adversarial_architect": s.planning?.adversarialReview?.architect ?? "", - ":planning_meeting_json": s.planning?.planningMeeting - ? JSON.stringify(s.planning.planningMeeting) - : "", - ":sequence": s.sequence ?? 0, - ":is_sketch": s.isSketch === true ? 1 : 0, - ":sketch_scope": s.sketchScope ?? "", - // Raw sentinel params: NULL when caller omitted the field, used in ON CONFLICT guards - ":raw_title": s.title ?? null, - ":raw_risk": s.risk ?? null, - ":raw_demo": s.demo ?? null, - ":raw_goal": s.planning?.goal ?? null, - ":raw_success_criteria": s.planning?.successCriteria ?? null, - ":raw_proof_level": s.planning?.proofLevel ?? null, - ":raw_integration_closure": s.planning?.integrationClosure ?? null, - ":raw_observability_impact": s.planning?.observabilityImpact ?? null, - ":raw_adversarial_partner": - s.planning?.adversarialReview?.partner ?? null, - ":raw_adversarial_combatant": - s.planning?.adversarialReview?.combatant ?? null, - ":raw_adversarial_architect": - s.planning?.adversarialReview?.architect ?? null, - ":raw_planning_meeting_json": s.planning?.planningMeeting - ? JSON.stringify(s.planning.planningMeeting) - : null, - ":raw_sequence": s.sequence ?? null, - ":raw_is_sketch": s.isSketch === undefined ? null : s.isSketch ? 1 : 0, - ":raw_sketch_scope": s.sketchScope === undefined ? null : s.sketchScope, - }); - insertSliceSpecIfAbsent(s.milestoneId, s.id, s.planning ?? {}); -} -function insertSliceSpecIfAbsent( - milestoneId: string, - sliceId: string, - planning: Record = {}, -): void { - currentDb - .prepare(`INSERT OR IGNORE INTO slice_specs ( - milestone_id, slice_id, goal, success_criteria, proof_level, - integration_closure, observability_impact, - adversarial_partner, adversarial_combatant, adversarial_architect, - planning_meeting_json, spec_version, created_at - ) VALUES ( - :milestone_id, :slice_id, :goal, :success_criteria, :proof_level, - :integration_closure, :observability_impact, - :adversarial_partner, :adversarial_combatant, :adversarial_architect, - :planning_meeting_json, 1, :created_at - )`) - .run({ - ":milestone_id": milestoneId, - ":slice_id": sliceId, - ":goal": planning.goal ?? "", - ":success_criteria": planning.successCriteria ?? "", - ":proof_level": planning.proofLevel ?? "", - ":integration_closure": planning.integrationClosure ?? "", - ":observability_impact": planning.observabilityImpact ?? "", - ":adversarial_partner": planning.adversarialReview?.partner ?? "", - ":adversarial_combatant": planning.adversarialReview?.combatant ?? "", - ":adversarial_architect": planning.adversarialReview?.architect ?? "", - ":planning_meeting_json": planning.planningMeeting - ? JSON.stringify(planning.planningMeeting) - : "", - ":created_at": new Date().toISOString(), - }); -} -/** - * SF ADR-011: clear the is_sketch flag after refine-slice fills in the full plan. - * Idempotent — safe to call on already-refined slices. - */ -export function clearSliceSketch(milestoneId: string, sliceId: string): void { - setSliceSketchFlag(milestoneId, sliceId, false); -} -/** - * SF ADR-011: generalized sketch-flag setter — flip true or false. - * Idempotent. Use this instead of clearSliceSketch when you also need to - * mark a slice as a sketch (e.g., a re-plan flow that wants to revert to - * sketch-then-refine). - */ -export function setSliceSketchFlag( - milestoneId: string, - sliceId: string, - isSketch: boolean, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `UPDATE slices SET is_sketch = :is_sketch WHERE milestone_id = :mid AND id = :sid`, - ) - .run({ - ":is_sketch": isSketch ? 1 : 0, - ":mid": milestoneId, - ":sid": sliceId, - }); -} -/** - * SF ADR-011 auto-heal: reconcile stale is_sketch=1 rows whose PLAN file already - * exists on disk. The caller passes a predicate that uses the canonical path - * resolver so path logic stays in one place. Safe to call repeatedly — only - * flips rows that meet the predicate. - */ -export function autoHealSketchFlags( - milestoneId: string, - hasPlanFile: (sliceId: string) => boolean, -): void { - if (!currentDb) return; - const rows = currentDb - .prepare( - `SELECT id FROM slices WHERE milestone_id = :mid AND is_sketch = 1`, - ) - .all({ ":mid": milestoneId }); - for (const row of rows) { - if (hasPlanFile(row["id"] as string)) { - setSliceSketchFlag(milestoneId, row["id"] as string, false); - } - } -} -/** - * SF ADR-011 P2: list tasks across a milestone that have an - * escalation artifact path. By default returns only ACTIVE escalations - * (pending OR awaiting_review); pass includeResolved=true to also return - * resolved-but-still-recorded entries (audit trail). - * - * Used by `/escalate list` to enumerate cross-slice escalations. - */ -export function listEscalationArtifacts( - milestoneId: string, - includeResolved = false, -): DbRow[] { - if (!currentDb) return []; - const filter = includeResolved - ? "escalation_artifact_path IS NOT NULL" - : "(escalation_pending = 1 OR escalation_awaiting_review = 1) AND escalation_artifact_path IS NOT NULL"; - const rows = currentDb - .prepare( - `SELECT * FROM tasks WHERE milestone_id = :mid AND ${filter} ORDER BY slice_id, sequence, id`, - ) - .all({ ":mid": milestoneId }); - return rows.map(rowToTask); -} -export function upsertSlicePlanning( - milestoneId: string, - sliceId: string, - planning: Record, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - insertSliceSpecIfAbsent(milestoneId, sliceId, planning); - currentDb - .prepare(`UPDATE slices SET - goal = COALESCE(:goal, goal), - success_criteria = COALESCE(:success_criteria, success_criteria), - proof_level = COALESCE(:proof_level, proof_level), - integration_closure = COALESCE(:integration_closure, integration_closure), - observability_impact = COALESCE(:observability_impact, observability_impact), - adversarial_partner = COALESCE(:adversarial_partner, adversarial_partner), - adversarial_combatant = COALESCE(:adversarial_combatant, adversarial_combatant), - adversarial_architect = COALESCE(:adversarial_architect, adversarial_architect), - planning_meeting_json = COALESCE(:planning_meeting_json, planning_meeting_json) - WHERE milestone_id = :milestone_id AND id = :id`) - .run({ - ":milestone_id": milestoneId, - ":id": sliceId, - ":goal": planning.goal ?? null, - ":success_criteria": planning.successCriteria ?? null, - ":proof_level": planning.proofLevel ?? null, - ":integration_closure": planning.integrationClosure ?? null, - ":observability_impact": planning.observabilityImpact ?? null, - ":adversarial_partner": planning.adversarialReview?.partner ?? null, - ":adversarial_combatant": planning.adversarialReview?.combatant ?? null, - ":adversarial_architect": planning.adversarialReview?.architect ?? null, - ":planning_meeting_json": planning.planningMeeting - ? JSON.stringify(planning.planningMeeting) - : null, - }); -} -export function insertTask(t: TaskInput): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT INTO tasks ( - milestone_id, slice_id, id, title, status, task_status, one_liner, narrative, - verification_result, verification_status, duration, completed_at, blocker_discovered, - deviations, known_issues, key_files, key_decisions, full_summary_md, - description, estimate, files, verify, inputs, expected_output, observability_impact, sequence - ) VALUES ( - :milestone_id, :slice_id, :id, :title, :status, :task_status, :one_liner, :narrative, - :verification_result, :verification_status, :duration, :completed_at, :blocker_discovered, - :deviations, :known_issues, :key_files, :key_decisions, :full_summary_md, - :description, :estimate, :files, :verify, :inputs, :expected_output, :observability_impact, :sequence - ) - ON CONFLICT(milestone_id, slice_id, id) DO UPDATE SET - title = CASE WHEN NULLIF(:title, '') IS NOT NULL THEN :title ELSE tasks.title END, - status = :status, - task_status = :task_status, - one_liner = :one_liner, - narrative = :narrative, - verification_result = :verification_result, - verification_status = :verification_status, - duration = :duration, - completed_at = :completed_at, - blocker_discovered = :blocker_discovered, - deviations = :deviations, - known_issues = :known_issues, - key_files = :key_files, - key_decisions = :key_decisions, - full_summary_md = :full_summary_md, - description = CASE WHEN NULLIF(:description, '') IS NOT NULL THEN :description ELSE tasks.description END, - estimate = CASE WHEN NULLIF(:estimate, '') IS NOT NULL THEN :estimate ELSE tasks.estimate END, - files = CASE WHEN NULLIF(:files, '[]') IS NOT NULL THEN :files ELSE tasks.files END, - verify = CASE WHEN NULLIF(:verify, '') IS NOT NULL THEN :verify ELSE tasks.verify END, - inputs = CASE WHEN NULLIF(:inputs, '[]') IS NOT NULL THEN :inputs ELSE tasks.inputs END, - expected_output = CASE WHEN NULLIF(:expected_output, '[]') IS NOT NULL THEN :expected_output ELSE tasks.expected_output END, - observability_impact = CASE WHEN NULLIF(:observability_impact, '') IS NOT NULL THEN :observability_impact ELSE tasks.observability_impact END, - sequence = :sequence`) - .run({ - ":milestone_id": t.milestoneId, - ":slice_id": t.sliceId, - ":id": t.id, - ":title": t.title ?? "", - ":status": t.status ?? "pending", - ":task_status": normalizeTaskStatus(t.taskStatus ?? t.status) ?? "todo", - ":one_liner": t.oneLiner ?? "", - ":narrative": t.narrative ?? "", - ":verification_result": t.verificationResult ?? "", - ":verification_status": t.verificationStatus ?? "", - ":duration": t.duration ?? "", - ":completed_at": - t.status === "done" || t.status === "complete" - ? new Date().toISOString() - : null, - ":blocker_discovered": t.blockerDiscovered ? 1 : 0, - ":deviations": t.deviations ?? "", - ":known_issues": t.knownIssues ?? "", - ":key_files": JSON.stringify(t.keyFiles ?? []), - ":key_decisions": JSON.stringify(t.keyDecisions ?? []), - ":full_summary_md": t.fullSummaryMd ?? "", - ":description": t.planning?.description ?? "", - ":estimate": t.planning?.estimate ?? "", - ":files": JSON.stringify(t.planning?.files ?? []), - ":verify": t.planning?.verify ?? "", - ":inputs": JSON.stringify(t.planning?.inputs ?? []), - ":expected_output": JSON.stringify(t.planning?.expectedOutput ?? []), - ":observability_impact": t.planning?.observabilityImpact ?? "", - ":sequence": t.sequence ?? 0, - }); - if (hasTaskSpecIntent(t.planning)) { - insertTaskSpecIfAbsent(t.milestoneId, t.sliceId, t.id, t.planning ?? {}); - } - insertTaskSchedulerIfAbsent(t.milestoneId, t.sliceId, t.id); -} -function hasTaskSpecIntent(planning: Record = {}): boolean { - if (!planning || typeof planning !== "object") return false; - if (typeof planning.verify === "string" && planning.verify.trim()) - return true; - if (Array.isArray(planning.inputs) && planning.inputs.length > 0) return true; - if ( - Array.isArray(planning.expectedOutput) && - planning.expectedOutput.length > 0 - ) { - return true; - } - for (const key of [ - "risk", - "mutationScope", - "mutation_scope", - "verification", - "verificationType", - "verification_type", - "planApproval", - "plan_approval", - "estimatedEffort", - "estimated_effort", - "dependencies", - "blocksParallel", - "blocks_parallel", - "requiresUserInput", - "requires_user_input", - "autoRetry", - "auto_retry", - "maxRetries", - "max_retries", - ]) { - if (planning[key] !== undefined) return true; - } - return false; -} -function insertTaskSpecIfAbsent( - milestoneId: string, - sliceId: string, - taskId: string, - planning: Record = {}, -): void { - if (!hasTaskSpecIntent(planning)) return; - const { normalized: frontmatter, errors } = - taskFrontmatterFromRecord(planning); - if (errors?.length) - logWarning( - "sf-db:insertTaskSpec", - `frontmatter validation errors for ${milestoneId}/${sliceId}/${taskId}: ${errors.join(", ")}`, - ); - currentDb - .prepare(`INSERT OR IGNORE INTO task_specs ( - milestone_id, slice_id, task_id, verify, inputs, expected_output, - risk, mutation_scope, verification_type, plan_approval, estimated_effort, - dependencies, blocks_parallel, requires_user_input, auto_retry, max_retries, - spec_version, created_at - ) VALUES ( - :milestone_id, :slice_id, :task_id, :verify, :inputs, :expected_output, - :risk, :mutation_scope, :verification_type, :plan_approval, :estimated_effort, - :dependencies, :blocks_parallel, :requires_user_input, :auto_retry, :max_retries, - 1, :created_at - )`) - .run({ - ":milestone_id": milestoneId, - ":slice_id": sliceId, - ":task_id": taskId, - ":verify": planning.verify ?? "", - ":inputs": JSON.stringify(planning.inputs ?? []), - ":expected_output": JSON.stringify(planning.expectedOutput ?? []), - ":risk": frontmatter.risk, - ":mutation_scope": frontmatter.mutationScope, - ":verification_type": frontmatter.verification, - ":plan_approval": frontmatter.planApproval, - ":estimated_effort": frontmatter.estimatedEffort, - ":dependencies": JSON.stringify(frontmatter.dependencies), - ":blocks_parallel": frontmatter.blocksParallel ? 1 : 0, - ":requires_user_input": frontmatter.requiresUserInput ? 1 : 0, - ":auto_retry": frontmatter.autoRetry ? 1 : 0, - ":max_retries": frontmatter.maxRetries, - ":created_at": new Date().toISOString(), - }); -} -function insertTaskSchedulerIfAbsent( - milestoneId: string, - sliceId: string, - taskId: string, -): void { - upsertTaskSchedulerStatus(milestoneId, sliceId, taskId, "queued", { - onlyIfAbsent: true, - }); -} -/** - * Upsert a task scheduler row without changing the task lifecycle row. - * - * Purpose: keep due/claimed/dispatched/consumed scheduling separate from - * task_status so automation level and timing do not overwrite work progress. - * - * Consumer: task scheduling/dispatch surfaces and task planning row creation. - */ -export function upsertTaskSchedulerStatus( - milestoneId: string, - sliceId: string, - taskId: string, - status = "queued", - { onlyIfAbsent = false }: { onlyIfAbsent?: boolean } = {}, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const schedulerStatus = normalizeSchedulerStatus(status) ?? "queued"; - const sql = onlyIfAbsent - ? `INSERT OR IGNORE INTO task_scheduler ( - milestone_id, slice_id, task_id, status, updated_at - ) VALUES ( - :milestone_id, :slice_id, :task_id, :status, :updated_at - )` - : `INSERT INTO task_scheduler ( - milestone_id, slice_id, task_id, status, updated_at - ) VALUES ( - :milestone_id, :slice_id, :task_id, :status, :updated_at - ) - ON CONFLICT(milestone_id, slice_id, task_id) DO UPDATE SET - status = excluded.status, - updated_at = excluded.updated_at`; - currentDb.prepare(sql).run({ - ":milestone_id": milestoneId, - ":slice_id": sliceId, - ":task_id": taskId, - ":status": schedulerStatus, - ":updated_at": new Date().toISOString(), - }); -} -export function updateTaskStatus( - milestoneId: string, - sliceId: string, - taskId: string, - status: string, - completedAt: string | null = null, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const taskStatus = normalizeTaskStatus(status) ?? "todo"; - currentDb - .prepare(`UPDATE tasks SET - status = :status, - completed_at = :completed_at, - task_status = :task_status - WHERE milestone_id = :milestone_id AND slice_id = :slice_id AND id = :id`) - .run({ - ":status": status, - ":completed_at": completedAt ?? null, - ":task_status": taskStatus, - ":milestone_id": milestoneId, - ":slice_id": sliceId, - ":id": taskId, - }); -} -/** SF ADR-011 P2: set pause-on-escalation state on a task. The two flags are - * mutually exclusive — pending=1 forces awaiting_review=0. */ -export function setTaskEscalationPending( - milestoneId, - sliceId, - taskId, - artifactPath, -) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`UPDATE tasks - SET escalation_pending = 1, - escalation_awaiting_review = 0, - escalation_artifact_path = :path - WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`) - .run({ - ":path": artifactPath, - ":mid": milestoneId, - ":sid": sliceId, - ":tid": taskId, - }); -} -/** SF ADR-011 P2: continueWithDefault=true marker — artifact exists but no pause. - * Mutually exclusive with escalation_pending. */ -export function setTaskEscalationAwaitingReview( - milestoneId, - sliceId, - taskId, - artifactPath, -) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`UPDATE tasks - SET escalation_awaiting_review = 1, - escalation_pending = 0, - escalation_artifact_path = :path - WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`) - .run({ - ":path": artifactPath, - ":mid": milestoneId, - ":sid": sliceId, - ":tid": taskId, - }); -} -/** SF ADR-011 P2: clear both escalation flags (called when an escalation is - * resolved or its artifact is removed). Leaves escalation_artifact_path so - * the resolution audit trail survives. */ -export function clearTaskEscalationFlags( - milestoneId: string, - sliceId: string, - taskId: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`UPDATE tasks - SET escalation_pending = 0, - escalation_awaiting_review = 0 - WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`) - .run({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId }); -} -/** SF ADR-011 P2 carry-forward: find a task in this slice that has a resolved - * escalation override that has NOT yet been injected into a downstream - * prompt. Returns the first match by sequence (lowest first), or null when - * no carry-forward is pending. - * - * The match criterion: escalation_artifact_path IS NOT NULL AND - * escalation_pending=0 AND escalation_awaiting_review=0 AND - * escalation_override_applied=0. The artifact's respondedAt is checked by - * the caller (claimOverrideForInjection in escalation.ts) — keeping artifact - * schema knowledge out of the DB layer. */ -export function findUnappliedEscalationOverride( - milestoneId: string, - sliceId: string, -): DbRow | undefined { - if (!currentDb) return null; - const row = currentDb - .prepare(`SELECT id, escalation_artifact_path - FROM tasks - WHERE milestone_id = :mid - AND slice_id = :sid - AND escalation_artifact_path IS NOT NULL - AND escalation_pending = 0 - AND escalation_awaiting_review = 0 - AND escalation_override_applied = 0 - ORDER BY sequence ASC, id ASC - LIMIT 1`) - .get({ ":mid": milestoneId, ":sid": sliceId }); - if (!row || !row.escalation_artifact_path) return null; - return { taskId: row.id, artifactPath: row.escalation_artifact_path }; -} -/** SF ADR-011 P2 carry-forward: atomically claim the override for injection. - * Returns true when this caller successfully flipped 0→1 (race winner) or - * false when another caller claimed it first (race loser). Use this to - * guarantee the override is injected exactly once. */ -export function claimEscalationOverride( - milestoneId: string, - sliceId: string, - taskId: string, -): boolean { - if (!currentDb) return; - const result = currentDb - .prepare(`UPDATE tasks - SET escalation_override_applied = 1 - WHERE milestone_id = :mid - AND slice_id = :sid - AND id = :tid - AND escalation_override_applied = 0`) - .run({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId }); - return (result?.changes ?? 0) > 0; -} -export function setTaskBlockerDiscovered( - milestoneId, - sliceId, - taskId, - discovered, -) { - if (!currentDb) return; - currentDb - .prepare( - `UPDATE tasks SET blocker_discovered = :discovered WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`, - ) - .run({ - ":discovered": discovered ? 1 : 0, - ":mid": milestoneId, - ":sid": sliceId, - ":tid": taskId, - }); -} -export function upsertTaskPlanning( - milestoneId: string, - sliceId: string, - taskId: string, - planning: Record, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - insertTaskSpecIfAbsent(milestoneId, sliceId, taskId, planning); - const { normalized: frontmatter, errors: fmErrors } = - taskFrontmatterFromRecord(planning); - if (fmErrors?.length) - logWarning( - "sf-db:upsertTaskPlanning", - `frontmatter validation errors for ${milestoneId}/${sliceId}/${taskId}: ${fmErrors.join(", ")}`, - ); - const hasTaskStatus = - planning.taskStatus !== undefined || - planning.task_status !== undefined || - planning.status !== undefined; - currentDb - .prepare(`UPDATE tasks SET - title = COALESCE(:title, title), - description = COALESCE(:description, description), - estimate = COALESCE(:estimate, estimate), - files = COALESCE(:files, files), - verify = COALESCE(:verify, verify), - inputs = COALESCE(:inputs, inputs), - expected_output = COALESCE(:expected_output, expected_output), - observability_impact = COALESCE(:observability_impact, observability_impact), - full_plan_md = COALESCE(:full_plan_md, full_plan_md), - risk = :risk, - mutation_scope = :mutation_scope, - verification_type = :verification_type, - plan_approval = :plan_approval, - task_status = CASE WHEN :has_task_status = 1 THEN :task_status ELSE task_status END, - estimated_effort = :estimated_effort, - dependencies = :dependencies, - blocks_parallel = :blocks_parallel, - requires_user_input = :requires_user_input, - auto_retry = :auto_retry, - max_retries = :max_retries - WHERE milestone_id = :milestone_id AND slice_id = :slice_id AND id = :id`) - .run({ - ":milestone_id": milestoneId, - ":slice_id": sliceId, - ":id": taskId, - ":title": planning.title ?? null, - ":description": planning.description ?? null, - ":estimate": planning.estimate ?? null, - ":files": planning.files ? JSON.stringify(planning.files) : null, - ":verify": planning.verify ?? null, - ":inputs": planning.inputs ? JSON.stringify(planning.inputs) : null, - ":expected_output": planning.expectedOutput - ? JSON.stringify(planning.expectedOutput) - : null, - ":observability_impact": planning.observabilityImpact ?? null, - ":full_plan_md": planning.fullPlanMd ?? null, - ":risk": frontmatter.risk, - ":mutation_scope": frontmatter.mutationScope, - ":verification_type": frontmatter.verification, - ":plan_approval": frontmatter.planApproval, - ":task_status": frontmatter.taskStatus, - ":has_task_status": hasTaskStatus ? 1 : 0, - ":estimated_effort": frontmatter.estimatedEffort, - ":dependencies": JSON.stringify(frontmatter.dependencies), - ":blocks_parallel": frontmatter.blocksParallel ? 1 : 0, - ":requires_user_input": frontmatter.requiresUserInput ? 1 : 0, - ":auto_retry": frontmatter.autoRetry ? 1 : 0, - ":max_retries": frontmatter.maxRetries, - }); - if ( - planning.schedulerStatus !== undefined || - planning.scheduler_status !== undefined - ) { - upsertTaskSchedulerStatus( - milestoneId, - sliceId, - taskId, - frontmatter.schedulerStatus, - ); - } else { - insertTaskSchedulerIfAbsent(milestoneId, sliceId, taskId); - } -} -function parsePlanningMeeting(raw: unknown): Record { - if (typeof raw !== "string" || raw.trim() === "") return null; - try { - return JSON.parse(raw); - } catch { - return null; - } -} -function rowToSlice(row: Record): Record { - return { - milestone_id: row["milestone_id"], - id: row["id"], - title: row["title"], - status: row["status"], - risk: row["risk"], - depends: safeParseJsonArray(row["depends"]), - demo: row["demo"] ?? "", - created_at: row["created_at"], - completed_at: row["completed_at"] ?? null, - full_summary_md: row["full_summary_md"] ?? "", - full_uat_md: row["full_uat_md"] ?? "", - goal: row["goal"] ?? "", - success_criteria: row["success_criteria"] ?? "", - proof_level: row["proof_level"] ?? "", - integration_closure: row["integration_closure"] ?? "", - observability_impact: row["observability_impact"] ?? "", - adversarial_partner: row["adversarial_partner"] ?? "", - adversarial_combatant: row["adversarial_combatant"] ?? "", - adversarial_architect: row["adversarial_architect"] ?? "", - planning_meeting: parsePlanningMeeting(row["planning_meeting_json"]), - sequence: row["sequence"] ?? 0, - replan_triggered_at: row["replan_triggered_at"] ?? null, - sketch_scope: row["sketch_scope"] ?? "", - is_sketch: row["is_sketch"] ?? 0, - }; -} -export function getSlice( - milestoneId: string, - sliceId: string, -): DbRow | undefined { - if (!currentDb) return null; - const row = currentDb - .prepare("SELECT * FROM slices WHERE milestone_id = :mid AND id = :sid") - .get({ ":mid": milestoneId, ":sid": sliceId }); - if (!row) return null; - return rowToSlice(row); -} -export function updateSliceStatus( - milestoneId: string, - sliceId: string, - status: string, - completedAt: string | null, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`UPDATE slices SET status = :status, completed_at = :completed_at - WHERE milestone_id = :milestone_id AND id = :id`) - .run({ - ":status": status, - ":completed_at": completedAt ?? null, - ":milestone_id": milestoneId, - ":id": sliceId, - }); -} -/** - * Store the UAT verdict for a slice. Called when an ASSESSMENT or UAT_RESULT - * file is written so the DB is the canonical source for verdict checks. - */ -export function setSliceUatVerdict( - milestoneId: string, - sliceId: string, - verdict: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `UPDATE slices SET uat_verdict = :verdict WHERE milestone_id = :mid AND id = :sid`, - ) - .run({ ":mid": milestoneId, ":sid": sliceId, ":verdict": verdict }); -} -/** - * Returns the stored UAT verdict for a slice, or null if not yet recorded. - */ -export function getSliceUatVerdict( - milestoneId: string, - sliceId: string, -): string | null { - if (!currentDb) return null; - const row = currentDb - .prepare( - `SELECT uat_verdict FROM slices WHERE milestone_id = :mid AND id = :sid`, - ) - .get({ ":mid": milestoneId, ":sid": sliceId }); - return row?.uat_verdict ?? null; -} -/** - * Scan existing ASSESSMENT/UAT_RESULT files on disk and populate uat_verdict - * for slices that have no verdict recorded in the DB yet. - * - * Purpose: one-time migration path so that repos with pre-existing verdict - * files work without file fallbacks in checkNeedsRunUat — the DB becomes the - * sole source of truth immediately after open. - * - * Consumer: ensureDbOpen (dynamic-tools.js) after openDatabase succeeds. - */ -export function backfillUatVerdicts(basePath: string): void { - if (!currentDb) return; - // Find all slices that have no verdict yet - const rows = currentDb - .prepare(`SELECT milestone_id, id FROM slices WHERE uat_verdict IS NULL`) - .all(); - if (!rows.length) return; - // Extract verdict from content — inline to avoid cross-module import at db layer - function parseVerdictFromContent(content) { - const fmMatch = content.match(/^---\n([\s\S]*?)\n---/); - if (fmMatch) { - const m = fmMatch[1].match(/verdict:\s*([\w-]+)/i); - if (m) { - let v = m[1].toLowerCase(); - if (v === "passed") v = "pass"; - return v; - } - return null; - } - const bodyMatch = content.match( - /\*\*Verdict:?\*\*\s*(?:✅\s*)?(\w[\w-]*)/i, - ); - if (bodyMatch) { - let v = bodyMatch[1].toLowerCase(); - if (v === "passed") v = "pass"; - return v; - } - return null; - } - const stmt = currentDb.prepare( - `UPDATE slices SET uat_verdict = :verdict WHERE milestone_id = :mid AND id = :sid`, - ); - for (const row of rows) { - const mid = row["milestone_id"]; - const sid = row["id"]; - const sliceDir = join(basePath, ".sf", "milestones", mid, "slices", sid); - const candidates = [ - join(sliceDir, `${sid}-ASSESSMENT.md`), - join(sliceDir, `${sid}-UAT_RESULT.md`), - ]; - for (const candidatePath of candidates) { - if (!existsSync(candidatePath)) continue; - try { - const content = readFileSync(candidatePath, "utf8"); - const verdict = parseVerdictFromContent(content); - if (verdict) { - stmt.run({ ":mid": mid, ":sid": sid, ":verdict": verdict }); - break; - } - } catch { - // Skip unreadable files - } - } - } -} -export function setTaskSummaryMd( - milestoneId: string, - sliceId: string, - taskId: string, - md: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `UPDATE tasks SET full_summary_md = :md WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`, - ) - .run({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId, ":md": md }); -} -export function setSliceSummaryMd( - milestoneId: string, - sliceId: string, - summaryMd: string, - uatMd: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `UPDATE slices SET full_summary_md = :summary_md, full_uat_md = :uat_md WHERE milestone_id = :mid AND id = :sid`, - ) - .run({ - ":mid": milestoneId, - ":sid": sliceId, - ":summary_md": summaryMd, - ":uat_md": uatMd, - }); -} -function safeParseJsonArray(raw, fallback = []) { - if (typeof raw !== "string" || raw.trim() === "") return fallback; - try { - const parsed = JSON.parse(raw); - return Array.isArray(parsed) ? parsed : fallback; - } catch { - return fallback; - } -} -function parseTaskArrayColumn(raw) { - if (typeof raw !== "string" || raw.trim() === "") return []; - try { - const parsed = JSON.parse(raw); - if (Array.isArray(parsed)) return parsed.map((value) => String(value)); - if (parsed === null || parsed === undefined || parsed === "") return []; - return [String(parsed)]; - } catch { - // Older/corrupt rows may contain comma-separated strings instead of JSON. - return raw - .split(",") - .map((value) => value.trim()) - .filter(Boolean); - } -} -function rowToTask(row) { - const parseTaskArray = (value) => { - if (Array.isArray(value)) { - return value.filter((entry) => typeof entry === "string"); - } - if (typeof value !== "string") return []; - const trimmed = value.trim(); - if (!trimmed) return []; - try { - const parsed = JSON.parse(trimmed); - if (Array.isArray(parsed)) { - return parsed.filter((entry) => typeof entry === "string"); - } - if (typeof parsed === "string" && parsed.trim()) { - return [parsed.trim()]; - } - } catch { - // Older/corrupt DB rows may contain raw comma-separated paths instead of JSON arrays. - } - return trimmed - .split(",") - .map((entry) => entry.trim()) - .filter(Boolean); - }; - return withTaskFrontmatter({ - milestone_id: row["milestone_id"], - slice_id: row["slice_id"], - id: row["id"], - title: row["title"], - status: row["status"], - one_liner: row["one_liner"], - narrative: row["narrative"], - verification_result: row["verification_result"], - duration: row["duration"], - completed_at: row["completed_at"] ?? null, - blocker_discovered: row["blocker_discovered"] === 1, - deviations: row["deviations"], - known_issues: row["known_issues"], - key_files: parseTaskArrayColumn(row["key_files"]), - key_decisions: parseTaskArrayColumn(row["key_decisions"]), - full_summary_md: row["full_summary_md"], - description: row["description"] ?? "", - estimate: row["estimate"] ?? "", - files: parseTaskArray(row["files"]), - verify: row["verify"] ?? "", - inputs: parseTaskArray(row["inputs"]), - expected_output: parseTaskArray(row["expected_output"]), - observability_impact: row["observability_impact"] ?? "", - full_plan_md: row["full_plan_md"] ?? "", - sequence: row["sequence"] ?? 0, - verification_status: row["verification_status"] ?? "", - risk: row["risk"] ?? "low", - mutation_scope: row["mutation_scope"] ?? "isolated", - verification_type: row["verification_type"] ?? "self-check", - plan_approval: row["plan_approval"] ?? "not-required", - task_status: row["task_status"] ?? row["status"] ?? "todo", - scheduler_status: row["scheduler_status"] ?? "queued", - estimated_effort: row["estimated_effort"] ?? null, - dependencies: parseTaskArray(row["dependencies"]), - blocks_parallel: row["blocks_parallel"] ?? 0, - requires_user_input: row["requires_user_input"] ?? 0, - auto_retry: row["auto_retry"] ?? 1, - max_retries: row["max_retries"] ?? 2, - escalation_pending: row["escalation_pending"] ?? 0, - escalation_awaiting_review: row["escalation_awaiting_review"] ?? 0, - escalation_override_applied: row["escalation_override_applied"] ?? 0, - escalation_artifact_path: row["escalation_artifact_path"] ?? null, - }); -} -export function getTask( - milestoneId: string, - sliceId: string, - taskId: string, -): DbRow | undefined { - if (!currentDb) return null; - const row = currentDb - .prepare( - `SELECT t.*, ts.status AS scheduler_status - FROM tasks t - LEFT JOIN task_scheduler ts - ON t.milestone_id = ts.milestone_id - AND t.slice_id = ts.slice_id - AND t.id = ts.task_id - WHERE t.milestone_id = :mid AND t.slice_id = :sid AND t.id = :tid`, - ) - .get({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId }); - if (!row) return null; - return rowToTask(row); -} -export function getSliceTasks(milestoneId: string, sliceId: string): DbRow[] { - if (!currentDb) return []; - const rows = currentDb - .prepare( - `SELECT t.*, ts.status AS scheduler_status - FROM tasks t - LEFT JOIN task_scheduler ts - ON t.milestone_id = ts.milestone_id - AND t.slice_id = ts.slice_id - AND t.id = ts.task_id - WHERE t.milestone_id = :mid AND t.slice_id = :sid - ORDER BY t.sequence, t.id`, - ) - .all({ ":mid": milestoneId, ":sid": sliceId }); - return rows.map(rowToTask); -} -export function insertVerificationEvidence(e: VerificationEvidenceInput): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT OR IGNORE INTO verification_evidence (task_id, slice_id, milestone_id, command, exit_code, verdict, duration_ms, created_at) - VALUES (:task_id, :slice_id, :milestone_id, :command, :exit_code, :verdict, :duration_ms, :created_at)`) - .run({ - ":task_id": e.taskId, - ":slice_id": e.sliceId, - ":milestone_id": e.milestoneId, - ":command": e.command, - ":exit_code": e.exitCode, - ":verdict": e.verdict, - ":duration_ms": e.durationMs, - ":created_at": new Date().toISOString(), - }); -} -export function getVerificationEvidence( - milestoneId: string, - sliceId: string, - taskId: string, -): DbRow[] { - if (!currentDb) return []; - const rows = currentDb - .prepare( - "SELECT * FROM verification_evidence WHERE milestone_id = :mid AND slice_id = :sid AND task_id = :tid ORDER BY id", - ) - .all({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId }); - return rows; -} -function rowToSelfFeedback(row) { - try { - const parsed = JSON.parse(row["full_json"]); - return { - ...parsed, - resolvedAt: row["resolved_at"] ?? parsed.resolvedAt, - resolvedReason: row["resolved_reason"] ?? parsed.resolvedReason, - resolvedBySfVersion: - row["resolved_by_sf_version"] ?? parsed.resolvedBySfVersion, - resolvedEvidence: row["resolved_evidence_json"] - ? JSON.parse(row["resolved_evidence_json"]) - : parsed.resolvedEvidence, - resolvedCriteriaMet: row["resolved_criteria_json"] - ? JSON.parse(row["resolved_criteria_json"]) - : parsed.resolvedCriteriaMet, - }; - } catch { - return { - id: row["id"], - ts: row["ts"], - kind: row["kind"], - severity: row["severity"], - blocking: row["blocking"] === 1, - repoIdentity: row["repo_identity"], - sfVersion: row["sf_version"], - basePath: row["base_path"], - occurredIn: { - unitType: row["unit_type"] ?? undefined, - milestone: row["milestone_id"] ?? undefined, - slice: row["slice_id"] ?? undefined, - task: row["task_id"] ?? undefined, - }, - summary: row["summary"], - evidence: row["evidence"], - suggestedFix: row["suggested_fix"], - resolvedAt: row["resolved_at"] ?? undefined, - resolvedReason: row["resolved_reason"] ?? undefined, - resolvedBySfVersion: row["resolved_by_sf_version"] ?? undefined, - resolvedEvidence: row["resolved_evidence_json"] - ? JSON.parse(row["resolved_evidence_json"]) - : undefined, - resolvedCriteriaMet: row["resolved_criteria_json"] - ? JSON.parse(row["resolved_criteria_json"]) - : undefined, - }; - } -} -export function insertSelfFeedbackEntry(entry: Record): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const occurred = entry.occurredIn ?? {}; - currentDb - .prepare(`INSERT INTO self_feedback ( - id, ts, kind, severity, blocking, repo_identity, sf_version, base_path, - unit_type, milestone_id, slice_id, task_id, summary, evidence, suggested_fix, full_json, - resolved_at, resolved_reason, resolved_by_sf_version, resolved_evidence_json, resolved_criteria_json - ) VALUES ( - :id, :ts, :kind, :severity, :blocking, :repo_identity, :sf_version, :base_path, - :unit_type, :milestone_id, :slice_id, :task_id, :summary, :evidence, :suggested_fix, :full_json, - :resolved_at, :resolved_reason, :resolved_by_sf_version, :resolved_evidence_json, :resolved_criteria_json - ) - ON CONFLICT(id) DO NOTHING`) - .run({ - ":id": entry.id, - ":ts": entry.ts, - ":kind": entry.kind, - ":severity": entry.severity, - ":blocking": entry.blocking ? 1 : 0, - ":repo_identity": entry.repoIdentity ?? "", - ":sf_version": entry.sfVersion ?? "", - ":base_path": entry.basePath ?? "", - ":unit_type": occurred.unitType ?? null, - ":milestone_id": occurred.milestone ?? null, - ":slice_id": occurred.slice ?? null, - ":task_id": occurred.task ?? null, - ":summary": entry.summary ?? "", - ":evidence": entry.evidence ?? "", - ":suggested_fix": entry.suggestedFix ?? "", - ":full_json": JSON.stringify(entry), - ":resolved_at": entry.resolvedAt ?? null, - ":resolved_reason": entry.resolvedReason ?? null, - ":resolved_by_sf_version": entry.resolvedBySfVersion ?? null, - ":resolved_evidence_json": entry.resolvedEvidence - ? JSON.stringify(entry.resolvedEvidence) - : null, - ":resolved_criteria_json": entry.resolvedCriteriaMet - ? JSON.stringify(entry.resolvedCriteriaMet) - : null, - }); -} -export function listSelfFeedbackEntries(): DbRow[] { - if (!currentDb) return []; - const rows = currentDb - .prepare("SELECT * FROM self_feedback ORDER BY ts ASC, id ASC") - .all(); - return rows.map(rowToSelfFeedback); -} -export function resolveSelfFeedbackEntry( - entryId: string, - resolution: Record, -): boolean { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const existing = currentDb - .prepare("SELECT * FROM self_feedback WHERE id = :id") - .get({ ":id": entryId }); - if (!existing || existing["resolved_at"]) return false; - const resolvedAt = resolution.resolvedAt ?? new Date().toISOString(); - const entry = { - ...rowToSelfFeedback(existing), - resolvedAt, - resolvedReason: resolution.reason, - resolvedBySfVersion: resolution.resolvedBySfVersion ?? "", - resolvedEvidence: resolution.evidence, - }; - if (resolution.criteriaMet) - entry.resolvedCriteriaMet = resolution.criteriaMet; - const result = currentDb - .prepare(`UPDATE self_feedback SET - full_json = :full_json, - resolved_at = :resolved_at, - resolved_reason = :resolved_reason, - resolved_by_sf_version = :resolved_by_sf_version, - resolved_evidence_json = :resolved_evidence_json, - resolved_criteria_json = :resolved_criteria_json - WHERE id = :id AND resolved_at IS NULL`) - .run({ - ":id": entryId, - ":full_json": JSON.stringify(entry), - ":resolved_at": resolvedAt, - ":resolved_reason": resolution.reason ?? "", - ":resolved_by_sf_version": resolution.resolvedBySfVersion ?? "", - ":resolved_evidence_json": resolution.evidence - ? JSON.stringify(resolution.evidence) - : null, - ":resolved_criteria_json": resolution.criteriaMet - ? JSON.stringify(resolution.criteriaMet) - : null, - }); - return result.changes > 0; -} -function parseVisionMeeting(raw) { - if (typeof raw !== "string" || raw.trim().length === 0) return null; - try { - return JSON.parse(raw); - } catch { - return null; - } -} -function parseProductResearch(raw) { - if (typeof raw !== "string" || raw.trim().length === 0) return null; - try { - return JSON.parse(raw); - } catch { - return null; - } -} -function rowToMilestone(row) { - return { - id: row["id"], - title: row["title"], - status: row["status"], - depends_on: safeParseJsonArray(row["depends_on"]), - created_at: row["created_at"], - completed_at: row["completed_at"] ?? null, - vision: row["vision"] ?? "", - success_criteria: safeParseJsonArray(row["success_criteria"]), - key_risks: safeParseJsonArray(row["key_risks"]), - proof_strategy: safeParseJsonArray(row["proof_strategy"]), - verification_contract: row["verification_contract"] ?? "", - verification_integration: row["verification_integration"] ?? "", - verification_operational: row["verification_operational"] ?? "", - verification_uat: row["verification_uat"] ?? "", - definition_of_done: safeParseJsonArray(row["definition_of_done"]), - requirement_coverage: row["requirement_coverage"] ?? "", - boundary_map_markdown: row["boundary_map_markdown"] ?? "", - vision_meeting: parseVisionMeeting(row["vision_meeting_json"]), - product_research: parseProductResearch(row["product_research_json"]), - sequence: row["sequence"] ?? 0, - }; -} -function rowToArtifact(row) { - return { - path: row["path"], - artifact_type: row["artifact_type"], - milestone_id: row["milestone_id"] ?? null, - slice_id: row["slice_id"] ?? null, - task_id: row["task_id"] ?? null, - full_content: row["full_content"], - imported_at: row["imported_at"], - }; -} -export function getAllMilestones(): DbRow[] { - if (!currentDb) return []; - const rows = currentDb - .prepare( - "SELECT * FROM milestones ORDER BY CASE WHEN sequence > 0 THEN 0 ELSE 1 END, sequence, id", - ) - .all(); - return rows.map(rowToMilestone); -} -export function getMilestone(id: string): DbRow | undefined { - if (!currentDb) return null; - const row = currentDb - .prepare("SELECT * FROM milestones WHERE id = :id") - .get({ ":id": id }); - if (!row) return null; - return rowToMilestone(row); -} -function rowToBacklogItem(row) { - return { - id: row["id"], - title: row["title"], - status: row["status"], - note: row["note"] ?? "", - source: row["source"] ?? "", - triageRunId: row["triage_run_id"] ?? null, - sequence: row["sequence"] ?? 0, - createdAt: row["created_at"], - updatedAt: row["updated_at"], - promotedAt: row["promoted_at"] ?? null, - }; -} -export function listBacklogItems(): DbRow[] { - if (!currentDb) return []; - return currentDb - .prepare( - "SELECT * FROM backlog_items ORDER BY CASE WHEN sequence > 0 THEN 0 ELSE 1 END, sequence, id", - ) - .all() - .map(rowToBacklogItem); -} -export function nextBacklogItemId(): string { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const row = currentDb - .prepare( - "SELECT id FROM backlog_items WHERE id LIKE '999.%' ORDER BY CAST(substr(id, 5) AS INTEGER) DESC LIMIT 1", - ) - .get(); - const next = row?.id ? Number.parseInt(String(row.id).slice(4), 10) + 1 : 1; - return `999.${Number.isFinite(next) ? next : 1}`; -} -export function addBacklogItem({ - id, - title, - note = "", - source = "manual", - triageRunId = null, - status = "pending", -}) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const itemId = id ?? nextBacklogItemId(); - const now = new Date().toISOString(); - const sequenceRow = currentDb - .prepare( - "SELECT COALESCE(MAX(sequence), 0) + 1 AS sequence FROM backlog_items", - ) - .get(); - currentDb - .prepare(`INSERT INTO backlog_items ( - id, title, status, note, source, triage_run_id, sequence, created_at, updated_at, promoted_at - ) VALUES ( - :id, :title, :status, :note, :source, :triage_run_id, :sequence, :created_at, :updated_at, :promoted_at - ) - ON CONFLICT(id) DO UPDATE SET - title = excluded.title, - status = excluded.status, - note = excluded.note, - source = excluded.source, - triage_run_id = excluded.triage_run_id, - updated_at = excluded.updated_at, - promoted_at = excluded.promoted_at`) - .run({ - ":id": itemId, - ":title": title, - ":status": status, - ":note": note, - ":source": source, - ":triage_run_id": triageRunId, - ":sequence": sequenceRow?.sequence ?? 1, - ":created_at": now, - ":updated_at": now, - ":promoted_at": status === "promoted" ? now : null, - }); - return itemId; -} -export function updateBacklogItemStatus( - id: string, - status: string, - note = "", -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const now = new Date().toISOString(); - const result = currentDb - .prepare(`UPDATE backlog_items - SET status = :status, - note = :note, - updated_at = :updated_at, - promoted_at = CASE WHEN :status = 'promoted' THEN :updated_at ELSE promoted_at END - WHERE id = :id`) - .run({ - ":id": id, - ":status": status, - ":note": note, - ":updated_at": now, - }); - void ((result?.changes ?? 0) > 0); -} -export function removeBacklogItem(id: string): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare("DELETE FROM backlog_items WHERE id = :id") - .run({ ":id": id }); -} -/** - * Update a milestone's status in the database. - * Used by park/unpark to keep the DB in sync with the filesystem marker. - * See: https://github.com/singularity-forge/sf-run/issues/2694 - */ -export function updateMilestoneStatus( - milestoneId: string, - status: string, - completedAt: string | null, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `UPDATE milestones SET status = :status, completed_at = :completed_at WHERE id = :id`, - ) - .run({ - ":status": status, - ":completed_at": completedAt ?? null, - ":id": milestoneId, - }); -} -/** - * Persist explicit milestone execution order in the structured runtime DB. - * - * Purpose: make roadmap priority/order queryable and schema-owned instead of - * relying on `.sf/QUEUE-ORDER.json` as a peer source of truth. - * - * Consumer: queue-order.js when `/queue` or rethink reorders milestones. - */ -export function updateMilestoneQueueOrder(order: string[]): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - transaction(() => { - const stmt = currentDb.prepare( - "UPDATE milestones SET sequence = :sequence WHERE id = :id", - ); - for (let i = 0; i < order.length; i++) { - stmt.run({ ":sequence": i + 1, ":id": order[i] }); - } - }); -} -export function getActiveMilestoneFromDb(): DbRow | undefined { - if (!currentDb) return null; - const row = currentDb - .prepare( - "SELECT * FROM milestones WHERE status NOT IN ('complete', 'parked') ORDER BY CASE WHEN sequence > 0 THEN 0 ELSE 1 END, sequence, id LIMIT 1", - ) - .get(); - if (!row) return null; - return rowToMilestone(row); -} -export function getActiveSliceFromDb(milestoneId: string): DbRow | undefined { - if (!currentDb) return null; - // Find the first non-complete slice whose dependencies are all satisfied. - // Uses the slice_dependencies junction table (kept in sync by syncSliceDependencies). - const row = currentDb - .prepare(`SELECT s.* FROM slices s - WHERE s.milestone_id = :mid - AND s.status NOT IN ('complete', 'done', 'skipped') - AND NOT EXISTS ( - SELECT 1 FROM slice_dependencies d - WHERE d.milestone_id = :mid - AND d.slice_id = s.id - AND d.depends_on_slice_id NOT IN ( - SELECT id FROM slices WHERE milestone_id = :mid AND status IN ('complete', 'done', 'skipped') - ) - ) - ORDER BY s.sequence, s.id - LIMIT 1`) - .get({ ":mid": milestoneId }); - if (!row) return null; - return rowToSlice(row); -} -export function getActiveTaskFromDb( - milestoneId: string, - sliceId: string, -): DbRow | undefined { - if (!currentDb) return null; - const row = currentDb - .prepare( - "SELECT * FROM tasks WHERE milestone_id = :mid AND slice_id = :sid AND status NOT IN ('complete', 'done') ORDER BY sequence, id LIMIT 1", - ) - .get({ ":mid": milestoneId, ":sid": sliceId }); - if (!row) return null; - return rowToTask(row); -} -export function getMilestoneSlices(milestoneId: string): DbRow[] { - if (!currentDb) return []; - const rows = currentDb - .prepare( - "SELECT * FROM slices WHERE milestone_id = :mid ORDER BY sequence, id", - ) - .all({ ":mid": milestoneId }); - return rows.map(rowToSlice); -} -export function getArtifact(path: string): DbRow | undefined { - if (!currentDb) return null; - const row = currentDb - .prepare("SELECT * FROM artifacts WHERE path = :path") - .get({ ":path": path }); - if (!row) return null; - return rowToArtifact(row); -} -// ─── Lightweight Query Variants (hot-path optimized) ───────────────────── -/** Fast milestone status check — avoids deserializing JSON planning fields. */ -export function getActiveMilestoneIdFromDb(): string | null { - if (!currentDb) return null; - const row = currentDb - .prepare( - "SELECT id, status FROM milestones WHERE status NOT IN ('complete', 'parked') ORDER BY id LIMIT 1", - ) - .get(); - if (!row) return null; - return { id: row["id"], status: row["status"] }; -} -/** Fast slice status check — avoids deserializing JSON depends/planning fields. */ -export function getSliceStatusSummary(milestoneId: string): DbRow[] { - if (!currentDb) return []; - return currentDb - .prepare( - "SELECT id, status FROM slices WHERE milestone_id = :mid ORDER BY sequence, id", - ) - .all({ ":mid": milestoneId }) - .map((r) => ({ id: r["id"], status: r["status"] })); -} -/** Fast task status check — avoids deserializing JSON arrays and large text fields. */ -export function getActiveTaskIdFromDb( - milestoneId: string, - sliceId: string, -): string | null { - if (!currentDb) return null; - const row = currentDb - .prepare( - "SELECT id, status, title FROM tasks WHERE milestone_id = :mid AND slice_id = :sid AND status NOT IN ('complete', 'done') ORDER BY sequence, id LIMIT 1", - ) - .get({ ":mid": milestoneId, ":sid": sliceId }); - if (!row) return null; - return { - id: row["id"], - status: row["status"], - title: row["title"], - }; -} -/** Count tasks by status for a slice — useful for progress reporting without full row load. */ -export function getSliceTaskCounts( - milestoneId: string, - sliceId: string, -): DbRow | undefined { - if (!currentDb) return { total: 0, done: 0, pending: 0 }; - const row = currentDb - .prepare(`SELECT - COUNT(*) as total, - SUM(CASE WHEN status IN ('complete', 'done') THEN 1 ELSE 0 END) as done, - SUM(CASE WHEN status NOT IN ('complete', 'done') THEN 1 ELSE 0 END) as pending - FROM tasks WHERE milestone_id = :mid AND slice_id = :sid`) - .get({ ":mid": milestoneId, ":sid": sliceId }); - if (!row) return { total: 0, done: 0, pending: 0 }; - return { - total: row["total"] ?? 0, - done: row["done"] ?? 0, - pending: row["pending"] ?? 0, - }; -} -// ─── Slice Dependencies (junction table) ───────────────────────────────── -/** Sync the slice_dependencies junction table from a slice's JSON depends array. */ -export function syncSliceDependencies( - milestoneId: string, - sliceId: string, - depends: string[], -): void { - if (!currentDb) return; - currentDb - .prepare( - "DELETE FROM slice_dependencies WHERE milestone_id = :mid AND slice_id = :sid", - ) - .run({ ":mid": milestoneId, ":sid": sliceId }); - for (const dep of depends) { - currentDb - .prepare( - "INSERT OR IGNORE INTO slice_dependencies (milestone_id, slice_id, depends_on_slice_id) VALUES (:mid, :sid, :dep)", - ) - .run({ ":mid": milestoneId, ":sid": sliceId, ":dep": dep }); - } -} -/** Get all slices that depend on a given slice. */ -export function getDependentSlices( - milestoneId: string, - sliceId: string, -): DbRow[] { - if (!currentDb) return []; - return currentDb - .prepare( - "SELECT slice_id FROM slice_dependencies WHERE milestone_id = :mid AND depends_on_slice_id = :sid", - ) - .all({ ":mid": milestoneId, ":sid": sliceId }) - .map((r) => r["slice_id"]); -} -// ─── Worktree DB Helpers ────────────────────────────────────────────────── -export function copyWorktreeDb(srcDbPath: string, destDbPath: string): boolean { - try { - if (!existsSync(srcDbPath)) return false; - const destDir = dirname(destDbPath); - mkdirSync(destDir, { recursive: true }); - copyFileSync(srcDbPath, destDbPath); - return true; - } catch (err) { - logError("db", "failed to copy DB to worktree", { - error: err.message, - }); - return false; - } -} -export function reconcileWorktreeDb(mainDbPath, worktreeDbPath) { - const zero = { - decisions: 0, - requirements: 0, - artifacts: 0, - milestones: 0, - slices: 0, - tasks: 0, - memories: 0, - verification_evidence: 0, - conflicts: [], - }; - if (!existsSync(worktreeDbPath)) return zero; - // Guard: bail when both paths resolve to the same physical file. - // ATTACHing a WAL-mode DB to itself corrupts the WAL (#2823). - try { - if (realpathSync(mainDbPath) === realpathSync(worktreeDbPath)) return zero; - } catch (e) { - logWarning("db", `realpathSync failed: ${(e as Error)?.message}`); - } - // Sanitize path: reject any characters that could break ATTACH syntax. - // ATTACH DATABASE doesn't support parameterized paths in all providers, - // so we use strict allowlist validation instead. - if (/['";\x00]/.test(worktreeDbPath)) { - logError( - "db", - "worktree DB reconciliation failed: path contains unsafe characters", - ); - return zero; - } - if (!currentDb) { - const opened = openDatabase(mainDbPath); - if (!opened) { - logError("db", "worktree DB reconciliation failed: cannot open main DB"); - return zero; - } - } - const adapter = currentDb; - const conflicts = []; - try { - adapter.exec(`ATTACH DATABASE '${worktreeDbPath}' AS wt`); - try { - const wtInfo = adapter.prepare("PRAGMA wt.table_info('decisions')").all(); - const hasMadeBy = wtInfo.some((col) => col["name"] === "made_by"); - const wtMilestoneInfo = adapter - .prepare("PRAGMA wt.table_info('milestones')") - .all(); - const hasProductResearch = wtMilestoneInfo.some( - (col) => col["name"] === "product_research_json", - ); - const decConf = adapter - .prepare( - `SELECT m.id FROM decisions m INNER JOIN wt.decisions w ON m.id = w.id WHERE m.decision != w.decision OR m.choice != w.choice OR m.rationale != w.rationale OR ${hasMadeBy ? "m.made_by != w.made_by" : "'agent' != 'agent'"} OR m.superseded_by IS NOT w.superseded_by`, - ) - .all(); - for (const row of decConf) - conflicts.push(`decision ${row["id"]}: modified in both`); - const reqConf = adapter - .prepare( - `SELECT m.id FROM requirements m INNER JOIN wt.requirements w ON m.id = w.id WHERE m.description != w.description OR m.status != w.status OR m.notes != w.notes OR m.superseded_by IS NOT w.superseded_by`, - ) - .all(); - for (const row of reqConf) - conflicts.push(`requirement ${row["id"]}: modified in both`); - const merged = { - decisions: 0, - requirements: 0, - artifacts: 0, - milestones: 0, - slices: 0, - tasks: 0, - memories: 0, - verification_evidence: 0, - }; - function countChanges(result) { - return typeof result === "object" && result !== null - ? (result.changes ?? 0) - : 0; - } - adapter.exec("BEGIN"); - try { - merged.decisions = countChanges( - adapter - .prepare(` - INSERT OR REPLACE INTO decisions ( - id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by - ) - SELECT id, when_context, scope, decision, choice, rationale, revisable, ${hasMadeBy ? "made_by" : "'agent'"}, superseded_by FROM wt.decisions - `) - .run(), - ); - merged.requirements = countChanges( - adapter - .prepare(` - INSERT OR REPLACE INTO requirements ( - id, class, status, description, why, source, primary_owner, - supporting_slices, validation, notes, full_content, superseded_by - ) - SELECT id, class, status, description, why, source, primary_owner, - supporting_slices, validation, notes, full_content, superseded_by - FROM wt.requirements - `) - .run(), - ); - merged.artifacts = countChanges( - adapter - .prepare(` - INSERT OR REPLACE INTO artifacts ( - path, artifact_type, milestone_id, slice_id, task_id, full_content, imported_at - ) - SELECT path, artifact_type, milestone_id, slice_id, task_id, full_content, imported_at - FROM wt.artifacts - `) - .run(), - ); - // Merge milestones — worktree may have updated status/planning fields - merged.milestones = countChanges( - adapter - .prepare(` - INSERT OR REPLACE INTO milestones ( - id, title, status, depends_on, created_at, completed_at, - vision, success_criteria, key_risks, proof_strategy, - verification_contract, verification_integration, verification_operational, verification_uat, - definition_of_done, requirement_coverage, boundary_map_markdown, vision_meeting_json, product_research_json - ) - SELECT id, title, status, depends_on, created_at, completed_at, - vision, success_criteria, key_risks, proof_strategy, - verification_contract, verification_integration, verification_operational, verification_uat, - definition_of_done, requirement_coverage, boundary_map_markdown, vision_meeting_json, ${hasProductResearch ? "product_research_json" : "''"} - FROM wt.milestones - `) - .run(), - ); - // Merge slices — preserve worktree progress but never downgrade completed status (#2558). - // Uses INSERT OR REPLACE with a subquery that picks the best status — if the main DB - // already has a completed slice, keep that status even if the worktree copy is stale. - merged.slices = countChanges( - adapter - .prepare(` - INSERT OR REPLACE INTO slices ( - milestone_id, id, title, status, risk, depends, demo, created_at, completed_at, - full_summary_md, full_uat_md, goal, success_criteria, proof_level, - integration_closure, observability_impact, adversarial_partner, adversarial_combatant, - adversarial_architect, planning_meeting_json, sequence, replan_triggered_at - ) - SELECT w.milestone_id, w.id, w.title, - CASE - WHEN m.status IN ('complete', 'done') AND w.status NOT IN ('complete', 'done') - THEN m.status ELSE w.status - END, - w.risk, w.depends, w.demo, w.created_at, - CASE - WHEN m.status IN ('complete', 'done') AND w.status NOT IN ('complete', 'done') - THEN m.completed_at ELSE w.completed_at - END, - w.full_summary_md, w.full_uat_md, w.goal, w.success_criteria, w.proof_level, - w.integration_closure, w.observability_impact, w.adversarial_partner, w.adversarial_combatant, - w.adversarial_architect, w.planning_meeting_json, w.sequence, w.replan_triggered_at - FROM wt.slices w - LEFT JOIN slices m ON m.milestone_id = w.milestone_id AND m.id = w.id - `) - .run(), - ); - // Merge tasks — preserve execution results, never downgrade completed status (#2558) - merged.tasks = countChanges( - adapter - .prepare(` - INSERT OR REPLACE INTO tasks ( - milestone_id, slice_id, id, title, status, one_liner, narrative, - verification_result, duration, completed_at, blocker_discovered, - deviations, known_issues, key_files, key_decisions, full_summary_md, - description, estimate, files, verify, inputs, expected_output, - observability_impact, full_plan_md, sequence - ) - SELECT w.milestone_id, w.slice_id, w.id, w.title, - CASE - WHEN m.status IN ('complete', 'done') AND w.status NOT IN ('complete', 'done') - THEN m.status ELSE w.status - END, - w.one_liner, w.narrative, - w.verification_result, w.duration, - CASE - WHEN m.status IN ('complete', 'done') AND w.status NOT IN ('complete', 'done') - THEN m.completed_at ELSE w.completed_at - END, - w.blocker_discovered, - w.deviations, w.known_issues, w.key_files, w.key_decisions, w.full_summary_md, - w.description, w.estimate, w.files, w.verify, w.inputs, w.expected_output, - w.observability_impact, w.full_plan_md, w.sequence - FROM wt.tasks w - LEFT JOIN tasks m ON m.milestone_id = w.milestone_id AND m.slice_id = w.slice_id AND m.id = w.id - `) - .run(), - ); - // Merge memories — keep worktree-learned insights - merged.memories = countChanges( - adapter - .prepare(` - INSERT OR REPLACE INTO memories ( - seq, id, category, content, confidence, source_unit_type, source_unit_id, - created_at, updated_at, superseded_by, hit_count - ) - SELECT seq, id, category, content, confidence, source_unit_type, source_unit_id, - created_at, updated_at, superseded_by, hit_count - FROM wt.memories - `) - .run(), - ); - // Merge verification evidence — append-only, use INSERT OR IGNORE to avoid duplicates - merged.verification_evidence = countChanges( - adapter - .prepare(` - INSERT OR IGNORE INTO verification_evidence ( - task_id, slice_id, milestone_id, command, exit_code, verdict, duration_ms, created_at - ) - SELECT task_id, slice_id, milestone_id, command, exit_code, verdict, duration_ms, created_at - FROM wt.verification_evidence - `) - .run(), - ); - adapter.exec("COMMIT"); - } catch (txErr) { - try { - adapter.exec("ROLLBACK"); - } catch (e) { - logWarning("db", `rollback failed: ${(e as Error)?.message}`); - } - throw txErr; - } - return { ...merged, conflicts }; - } finally { - try { - adapter.exec("DETACH DATABASE wt"); - } catch (e) { - logWarning("db", `detach worktree DB failed: ${(e as Error)?.message}`); - } - } - } catch (err) { - logError("db", "worktree DB reconciliation failed", { - error: err.message, - }); - return { ...zero, conflicts }; - } -} -// ─── Replan & Assessment Helpers ────────────────────────────────────────── -export function insertReplanHistory(entry) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - // INSERT OR REPLACE: idempotent on (milestone_id, slice_id, task_id) via schema v11 unique index. - // Retrying the same replan silently updates summary instead of accumulating duplicate rows. - currentDb - .prepare(`INSERT OR REPLACE INTO replan_history (milestone_id, slice_id, task_id, summary, previous_artifact_path, replacement_artifact_path, created_at) - VALUES (:milestone_id, :slice_id, :task_id, :summary, :previous_artifact_path, :replacement_artifact_path, :created_at)`) - .run({ - ":milestone_id": entry.milestoneId, - ":slice_id": entry.sliceId ?? null, - ":task_id": entry.taskId ?? null, - ":summary": entry.summary, - ":previous_artifact_path": entry.previousArtifactPath ?? null, - ":replacement_artifact_path": entry.replacementArtifactPath ?? null, - ":created_at": new Date().toISOString(), - }); -} -export function insertAssessment(entry) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT OR REPLACE INTO assessments (path, milestone_id, slice_id, task_id, status, scope, full_content, created_at) - VALUES (:path, :milestone_id, :slice_id, :task_id, :status, :scope, :full_content, :created_at)`) - .run({ - ":path": entry.path, - ":milestone_id": entry.milestoneId, - ":slice_id": entry.sliceId ?? null, - ":task_id": entry.taskId ?? null, - ":status": entry.status, - ":scope": entry.scope, - ":full_content": entry.fullContent, - ":created_at": new Date().toISOString(), - }); -} -export function deleteAssessmentByScope(milestoneId, scope) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `DELETE FROM assessments WHERE milestone_id = :mid AND scope = :scope`, - ) - .run({ ":mid": milestoneId, ":scope": scope }); -} -export function deleteVerificationEvidence(milestoneId, sliceId, taskId) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `DELETE FROM verification_evidence WHERE milestone_id = :mid AND slice_id = :sid AND task_id = :tid`, - ) - .run({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId }); -} -export function deleteTask(milestoneId, sliceId, taskId) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - transaction(() => { - // Must delete verification_evidence first (FK constraint) - currentDb - .prepare( - `DELETE FROM verification_evidence WHERE milestone_id = :mid AND slice_id = :sid AND task_id = :tid`, - ) - .run({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId }); - currentDb - .prepare( - `DELETE FROM tasks WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`, - ) - .run({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId }); - }); -} -export function deleteSlice(milestoneId, sliceId) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - transaction(() => { - // Cascade-style manual deletion: evidence → tasks → dependencies → slice - currentDb - .prepare( - `DELETE FROM verification_evidence WHERE milestone_id = :mid AND slice_id = :sid`, - ) - .run({ ":mid": milestoneId, ":sid": sliceId }); - currentDb - .prepare( - `DELETE FROM tasks WHERE milestone_id = :mid AND slice_id = :sid`, - ) - .run({ ":mid": milestoneId, ":sid": sliceId }); - currentDb - .prepare( - `DELETE FROM slice_dependencies WHERE milestone_id = :mid AND slice_id = :sid`, - ) - .run({ ":mid": milestoneId, ":sid": sliceId }); - currentDb - .prepare( - `DELETE FROM slice_dependencies WHERE milestone_id = :mid AND depends_on_slice_id = :sid`, - ) - .run({ ":mid": milestoneId, ":sid": sliceId }); - currentDb - .prepare(`DELETE FROM slices WHERE milestone_id = :mid AND id = :sid`) - .run({ ":mid": milestoneId, ":sid": sliceId }); - }); -} -export function deleteMilestone(milestoneId) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - transaction(() => { - currentDb - .prepare(`DELETE FROM verification_evidence WHERE milestone_id = :mid`) - .run({ ":mid": milestoneId }); - currentDb - .prepare(`DELETE FROM quality_gates WHERE milestone_id = :mid`) - .run({ ":mid": milestoneId }); - currentDb - .prepare(`DELETE FROM tasks WHERE milestone_id = :mid`) - .run({ ":mid": milestoneId }); - currentDb - .prepare(`DELETE FROM slice_dependencies WHERE milestone_id = :mid`) - .run({ ":mid": milestoneId }); - currentDb - .prepare(`DELETE FROM slices WHERE milestone_id = :mid`) - .run({ ":mid": milestoneId }); - currentDb - .prepare(`DELETE FROM replan_history WHERE milestone_id = :mid`) - .run({ ":mid": milestoneId }); - currentDb - .prepare(`DELETE FROM assessments WHERE milestone_id = :mid`) - .run({ ":mid": milestoneId }); - currentDb - .prepare(`DELETE FROM artifacts WHERE milestone_id = :mid`) - .run({ ":mid": milestoneId }); - currentDb - .prepare(`DELETE FROM milestones WHERE id = :mid`) - .run({ ":mid": milestoneId }); - }); -} -export function updateSliceFields(milestoneId, sliceId, fields) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`UPDATE slices SET - title = COALESCE(:title, title), - risk = COALESCE(:risk, risk), - depends = COALESCE(:depends, depends), - demo = COALESCE(:demo, demo) - WHERE milestone_id = :milestone_id AND id = :id`) - .run({ - ":milestone_id": milestoneId, - ":id": sliceId, - ":title": fields.title ?? null, - ":risk": fields.risk ?? null, - ":depends": fields.depends ? JSON.stringify(fields.depends) : null, - ":demo": fields.demo ?? null, - }); -} -export function getReplanHistory(milestoneId, sliceId) { - if (!currentDb) return []; - if (sliceId) { - return currentDb - .prepare( - `SELECT * FROM replan_history WHERE milestone_id = :mid AND slice_id = :sid ORDER BY created_at DESC`, - ) - .all({ ":mid": milestoneId, ":sid": sliceId }); - } - return currentDb - .prepare( - `SELECT * FROM replan_history WHERE milestone_id = :mid ORDER BY created_at DESC`, - ) - .all({ ":mid": milestoneId }); -} -export function getAssessment(path) { - if (!currentDb) return null; - const row = currentDb - .prepare(`SELECT * FROM assessments WHERE path = :path`) - .get({ ":path": path }); - return row ?? null; -} -export function getAssessmentByScope(milestoneId, scope) { - if (!currentDb) return null; - const row = currentDb - .prepare( - `SELECT * FROM assessments - WHERE milestone_id = :mid AND scope = :scope - ORDER BY created_at DESC - LIMIT 1`, - ) - .get({ ":mid": milestoneId, ":scope": scope }); - return row ?? null; -} -export function getMilestoneValidationAssessment(milestoneId) { - return getAssessmentByScope(milestoneId, "milestone-validation"); -} -// ─── Quality Gates ─────────────────────────────────────────────────────── -function rowToGate(row) { - return { - milestone_id: row["milestone_id"], - slice_id: row["slice_id"], - gate_id: row["gate_id"], - scope: row["scope"], - task_id: row["task_id"] ?? "", - status: row["status"], - verdict: row["verdict"] || "", - rationale: row["rationale"] || "", - findings: row["findings"] || "", - evaluated_at: row["evaluated_at"] ?? null, - }; -} -export function insertGateRow(g) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT OR IGNORE INTO quality_gates (milestone_id, slice_id, gate_id, scope, task_id, status) - VALUES (:mid, :sid, :gid, :scope, :tid, :status)`) - .run({ - ":mid": g.milestoneId, - ":sid": g.sliceId, - ":gid": g.gateId, - ":scope": g.scope, - ":tid": g.taskId ?? "", - ":status": g.status ?? "pending", - }); -} -export function saveGateResult(g) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`UPDATE quality_gates - SET status = 'complete', verdict = :verdict, rationale = :rationale, - findings = :findings, evaluated_at = :evaluated_at - WHERE milestone_id = :mid AND slice_id = :sid AND gate_id = :gid - AND task_id = :tid`) - .run({ - ":mid": g.milestoneId, - ":sid": g.sliceId, - ":gid": g.gateId, - ":tid": g.taskId ?? "", - ":verdict": g.verdict, - ":rationale": g.rationale, - ":findings": g.findings, - ":evaluated_at": new Date().toISOString(), - }); - const outcome = - g.verdict === "pass" - ? "pass" - : g.verdict === "omitted" - ? "manual-attention" - : "fail"; - insertGateRun({ - traceId: `quality-gate:${g.milestoneId}:${g.sliceId}`, - turnId: `gate:${g.gateId}:${g.taskId ?? "slice"}`, - gateId: g.gateId, - gateType: "quality-gate", - milestoneId: g.milestoneId, - sliceId: g.sliceId, - taskId: g.taskId ?? undefined, - outcome, - failureClass: - outcome === "fail" - ? "verification" - : outcome === "manual-attention" - ? "manual-attention" - : "none", - rationale: g.rationale, - findings: g.findings, - attempt: 1, - maxAttempts: 1, - retryable: false, - evaluatedAt: new Date().toISOString(), - }); -} -export function getPendingGates(milestoneId, sliceId, scope) { - if (!currentDb) return []; - const sql = scope - ? `SELECT * FROM quality_gates WHERE milestone_id = :mid AND slice_id = :sid AND scope = :scope AND status = 'pending'` - : `SELECT * FROM quality_gates WHERE milestone_id = :mid AND slice_id = :sid AND status = 'pending'`; - const params = { - ":mid": milestoneId, - ":sid": sliceId, - }; - if (scope) params[":scope"] = scope; - return currentDb.prepare(sql).all(params).map(rowToGate); -} -export function getGateResults(milestoneId, sliceId, scope) { - if (!currentDb) return []; - const sql = scope - ? `SELECT * FROM quality_gates WHERE milestone_id = :mid AND slice_id = :sid AND scope = :scope` - : `SELECT * FROM quality_gates WHERE milestone_id = :mid AND slice_id = :sid`; - const params = { - ":mid": milestoneId, - ":sid": sliceId, - }; - if (scope) params[":scope"] = scope; - return currentDb.prepare(sql).all(params).map(rowToGate); -} -export function markAllGatesOmitted(milestoneId, sliceId) { - if (!currentDb) return; - currentDb - .prepare(`UPDATE quality_gates SET status = 'omitted', verdict = 'omitted', evaluated_at = :now - WHERE milestone_id = :mid AND slice_id = :sid AND status = 'pending'`) - .run({ - ":mid": milestoneId, - ":sid": sliceId, - ":now": new Date().toISOString(), - }); -} -export function getPendingSliceGateCount(milestoneId, sliceId) { - if (!currentDb) return 0; - const row = currentDb - .prepare(`SELECT COUNT(*) as cnt FROM quality_gates - WHERE milestone_id = :mid AND slice_id = :sid AND scope = 'slice' AND status = 'pending'`) - .get({ ":mid": milestoneId, ":sid": sliceId }); - return row ? row["cnt"] : 0; -} -/** - * Return pending gate rows owned by a specific workflow turn. - * - * Unlike `getPendingGates(..., scope)`, this filters by the registry's - * `ownerTurn` metadata so callers can distinguish Q3/Q4 (owned by - * gate-evaluate) from Q8 (owned by complete-slice) even though both are - * scope:"slice". Pass `taskId` to narrow task-scoped results to one task. - */ -export function getPendingGatesForTurn(milestoneId, sliceId, turn, taskId) { - if (!currentDb) return []; - const ids = getGateIdsForTurn(turn); - if (ids.size === 0) return []; - const idList = [...ids]; - const placeholders = idList.map((_, i) => `:gid${i}`).join(","); - const params = { - ":mid": milestoneId, - ":sid": sliceId, - }; - idList.forEach((id, i) => { - params[`:gid${i}`] = id; - }); - let sql = `SELECT * FROM quality_gates - WHERE milestone_id = :mid AND slice_id = :sid - AND status = 'pending' - AND gate_id IN (${placeholders})`; - if (taskId !== undefined) { - sql += ` AND task_id = :tid`; - params[":tid"] = taskId; - } - return currentDb.prepare(sql).all(params).map(rowToGate); -} -/** - * Count pending gates for a turn. Convenience wrapper used by state - * derivation to decide whether a phase transition should pause. - */ -export function getPendingGateCountForTurn(milestoneId, sliceId, turn) { - return getPendingGatesForTurn(milestoneId, sliceId, turn).length; -} -/** @deprecated Gate runs are now written to JSONL trace files via appendTraceEvent(). This is a no-op kept for import compatibility. */ -export function insertGateRun(_entry) { - // no-op: gate runs now written to JSONL trace files -} -/** @deprecated Turn git transactions are now written to JSONL audit events. This is a no-op kept for import compatibility. */ -export function upsertTurnGitTransaction(_entry) { - // no-op: turn git transactions now written to JSONL audit events -} -export function recordUokRunStart(entry) { - if (!currentDb) return; - const now = entry.startedAt ?? new Date().toISOString(); - currentDb - .prepare(`INSERT INTO uok_runs ( - run_id, session_id, path, status, started_at, ended_at, error, flags_json, updated_at - ) VALUES ( - :run_id, :session_id, :path, 'started', :started_at, NULL, NULL, :flags_json, :updated_at - ) - ON CONFLICT(run_id) DO UPDATE SET - session_id = excluded.session_id, - path = excluded.path, - status = 'started', - started_at = excluded.started_at, - ended_at = NULL, - error = NULL, - flags_json = excluded.flags_json, - updated_at = excluded.updated_at`) - .run({ - ":run_id": entry.runId, - ":session_id": entry.sessionId ?? null, - ":path": entry.path ?? "", - ":started_at": now, - ":flags_json": JSON.stringify(entry.flags ?? {}), - ":updated_at": now, - }); -} -const MAX_ERROR_STORED_BYTES = 4096; -function capErrorForStorage(error, runId) { - if (!error || error.length <= MAX_ERROR_STORED_BYTES) return error; - try { - const errDir = join(dirname(currentPath), "runtime", "errors"); - mkdirSync(errDir, { recursive: true }); - writeFileSync(join(errDir, `${runId}.txt`), error, "utf-8"); - } catch { - // non-fatal — best-effort spill - } - const head = error.slice(0, 2048); - const tail = error.slice(-2048); - const dropped = error.length - MAX_ERROR_STORED_BYTES; - return `${head}\n\n[...${dropped} chars truncated — full error in .sf/runtime/errors/${runId}.txt]\n\n${tail}`; -} -export function recordUokRunExit(entry) { - if (!currentDb) return; - const now = entry.endedAt ?? new Date().toISOString(); - currentDb - .prepare(`INSERT INTO uok_runs ( - run_id, session_id, path, status, started_at, ended_at, error, flags_json, updated_at - ) VALUES ( - :run_id, :session_id, :path, :status, :started_at, :ended_at, :error, :flags_json, :updated_at - ) - ON CONFLICT(run_id) DO UPDATE SET - session_id = COALESCE(excluded.session_id, uok_runs.session_id), - path = CASE WHEN excluded.path = '' THEN uok_runs.path ELSE excluded.path END, - status = excluded.status, - ended_at = excluded.ended_at, - error = excluded.error, - flags_json = CASE WHEN excluded.flags_json = '{}' THEN uok_runs.flags_json ELSE excluded.flags_json END, - updated_at = excluded.updated_at`) - .run({ - ":run_id": entry.runId, - ":session_id": entry.sessionId ?? null, - ":path": entry.path ?? "", - ":status": entry.status ?? "ok", - ":started_at": entry.startedAt ?? now, - ":ended_at": now, - ":error": entry.error - ? capErrorForStorage(entry.error, entry.runId) - : null, - ":flags_json": JSON.stringify(entry.flags ?? {}), - ":updated_at": now, - }); -} -export function getUokRuns(limit = 500) { - if (!currentDb) return []; - return currentDb - .prepare( - `SELECT run_id, session_id, path, status, started_at, ended_at, error, flags_json, updated_at - FROM uok_runs - ORDER BY started_at DESC - LIMIT :limit`, - ) - .all({ ":limit": limit }) - .map((row) => ({ - runId: row.run_id, - sessionId: row.session_id, - path: row.path, - status: row.status, - startedAt: row.started_at, - endedAt: row.ended_at, - error: row.error, - flags: (() => { - try { - return JSON.parse(row.flags_json || "{}"); - } catch { - return {}; - } - })(), - updatedAt: row.updated_at, - })); -} -/** @deprecated Audit events are now written exclusively to JSONL files via emitUokAuditEvent(). This is a no-op kept for import compatibility. */ -export function insertAuditEvent(_entry) { - // no-op: audit events now written exclusively to JSONL files -} -// ─── Single-writer bypass wrappers ─────────────────────────────────────── -// These wrappers exist so modules outside this file never need to call -// `_getAdapter()` for writes. Each one is a byte-equivalent replacement for -// a raw prepare/run previously issued from another module. Keep them -// minimal and direct — they exist to hold SQL text in one place, not to -// add new behavior. -/** Delete a decision row by id. Used by db-writer.ts rollback on disk-write failure. */ -export function deleteDecisionById(id) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb.prepare("DELETE FROM decisions WHERE id = :id").run({ ":id": id }); -} -/** Delete a requirement row by id. Used by db-writer.ts rollback on disk-write failure. */ -export function deleteRequirementById(id) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare("DELETE FROM requirements WHERE id = :id") - .run({ ":id": id }); -} -/** Delete an artifact row by path. Used by db-writer.ts rollback on disk-write failure. */ -export function deleteArtifactByPath(path) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare("DELETE FROM artifacts WHERE path = :path") - .run({ ":path": path }); -} -/** - * Drop all rows from tasks/slices/milestones in dependency order inside a - * transaction. Used by `sf recover` to rebuild engine state from markdown. - */ -export function clearEngineHierarchy() { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - transaction(() => { - currentDb.exec("DELETE FROM tasks"); - currentDb.exec("DELETE FROM slices"); - currentDb.exec("DELETE FROM milestones"); - }); -} -/** - * INSERT OR IGNORE a slice during event replay (workflow-reconcile.ts). - * Strict insert-or-ignore semantics are required here to avoid the - * `insertSlice` ON CONFLICT path that could downgrade an already-completed - * slice back to 'pending'. - */ -export function insertOrIgnoreSlice(args) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT OR IGNORE INTO slices (milestone_id, id, title, status, created_at) - VALUES (:mid, :sid, :title, 'pending', :ts)`) - .run({ - ":mid": args.milestoneId, - ":sid": args.sliceId, - ":title": args.title, - ":ts": args.createdAt, - }); -} -/** - * INSERT OR IGNORE a task during event replay (workflow-reconcile.ts). - * Same rationale as `insertOrIgnoreSlice`. - */ -export function insertOrIgnoreTask(args) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT OR IGNORE INTO tasks (milestone_id, slice_id, id, title, status, created_at) - VALUES (:mid, :sid, :tid, :title, 'pending', :ts)`) - .run({ - ":mid": args.milestoneId, - ":sid": args.sliceId, - ":tid": args.taskId, - ":title": args.title, - ":ts": args.createdAt, - }); -} -/** - * Stamp the `replan_triggered_at` column on a slice. Used by triage-resolution - * when a user capture requests a replan so the dispatcher can detect the - * trigger via DB in addition to the on-disk REPLAN-TRIGGER.md marker. - */ -export function setSliceReplanTriggeredAt(milestoneId, sliceId, ts) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - "UPDATE slices SET replan_triggered_at = :ts WHERE milestone_id = :mid AND id = :sid", - ) - .run({ ":ts": ts, ":mid": milestoneId, ":sid": sliceId }); -} -function boolToInt(value) { - if (value === null || value === undefined) return null; - return value ? 1 : 0; -} -export function insertLlmTaskOutcome(input) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - try { - currentDb - .prepare(`INSERT INTO llm_task_outcomes ( - model_id, - provider, - unit_type, - unit_id, - succeeded, - retries, - escalated, - verification_passed, - blocker_discovered, - duration_ms, - tokens_total, - cost_usd, - recorded_at - ) VALUES ( - :model_id, - :provider, - :unit_type, - :unit_id, - :succeeded, - :retries, - :escalated, - :verification_passed, - :blocker_discovered, - :duration_ms, - :tokens_total, - :cost_usd, - :recorded_at - ) - ON CONFLICT(unit_type, unit_id, recorded_at) DO UPDATE SET - model_id = excluded.model_id, - provider = excluded.provider, - succeeded = excluded.succeeded, - retries = excluded.retries, - escalated = excluded.escalated, - verification_passed = excluded.verification_passed, - blocker_discovered = excluded.blocker_discovered, - duration_ms = excluded.duration_ms, - tokens_total = excluded.tokens_total, - cost_usd = excluded.cost_usd`) - .run({ - ":model_id": input.modelId, - ":provider": input.provider, - ":unit_type": input.unitType, - ":unit_id": input.unitId, - ":succeeded": boolToInt(input.succeeded), - ":retries": input.retries ?? 0, - ":escalated": boolToInt(input.escalated ?? false), - ":verification_passed": boolToInt(input.verification_passed ?? null), - ":blocker_discovered": boolToInt(input.blocker_discovered ?? false), - ":duration_ms": input.duration_ms ?? null, - ":tokens_total": input.tokens_total ?? null, - ":cost_usd": input.cost_usd ?? null, - ":recorded_at": input.recorded_at ?? Date.now(), - }); - return true; - } catch { - return false; - } -} - -/** - * Query LLM task outcomes for a specific unit. - * - * Purpose: enable outcome-learning and cost-guard gates to inspect - * historical performance of a unit type + id combination. - * - * Consumer: uok/outcome-learning-gate.js, uok/cost-guard-gate.js. - */ -export function getLlmTaskOutcomesByUnit(unitType, unitId, limit = 20) { - if (!currentDb) return []; - try { - return currentDb - .prepare( - `SELECT - model_id, - provider, - unit_type, - unit_id, - succeeded, - retries, - escalated, - verification_passed, - blocker_discovered, - duration_ms, - tokens_total, - cost_usd, - recorded_at - FROM llm_task_outcomes - WHERE unit_type = :unit_type - AND unit_id = :unit_id - ORDER BY recorded_at DESC - LIMIT :limit`, - ) - .all({ - ":unit_type": unitType, - ":unit_id": unitId, - ":limit": limit, - }); - } catch { - return []; - } -} -/** - * Query LLM task outcomes for a specific model. - * - * Purpose: enable cost-guard to detect models with high failure rates - * or excessive cumulative spend. - * - * Consumer: uok/cost-guard-gate.js. - */ -export function getLlmTaskOutcomesByModel(modelId, limit = 50) { - if (!currentDb) return []; - try { - return currentDb - .prepare( - `SELECT - model_id, - provider, - unit_type, - unit_id, - succeeded, - retries, - escalated, - verification_passed, - blocker_discovered, - duration_ms, - tokens_total, - cost_usd, - recorded_at - FROM llm_task_outcomes - WHERE model_id = :model_id - ORDER BY recorded_at DESC - LIMIT :limit`, - ) - .all({ - ":model_id": modelId, - ":limit": limit, - }); - } catch { - return []; - } -} -/** - * Query recent LLM task outcomes across all units. - * - * Purpose: provide a rolling window of outcomes for system-wide - * health and spend analysis. - * - * Consumer: uok/diagnostic-synthesis.js, uok/cost-guard-gate.js. - */ -export function getRecentLlmTaskOutcomes(hours = 24, limit = 100): DbRow[] { - if (!currentDb) return []; - const cutoff = Date.now() - hours * 60 * 60 * 1000; - try { - return currentDb - .prepare( - `SELECT - model_id, - provider, - unit_type, - unit_id, - succeeded, - retries, - escalated, - verification_passed, - blocker_discovered, - duration_ms, - tokens_total, - cost_usd, - recorded_at - FROM llm_task_outcomes - WHERE recorded_at >= :cutoff - ORDER BY recorded_at DESC - LIMIT :limit`, - ) - .all({ - ":cutoff": cutoff, - ":limit": limit, - }); - } catch { - return []; - } -} -/** - * Aggregate LLM task outcome statistics for a model over a time window. - * - * Returns { total, succeeded, failed, totalCostUsd, totalTokens, avgDurationMs }. - * - * Consumer: uok/cost-guard-gate.js, uok/outcome-learning-gate.js. - */ -export function getLlmTaskOutcomeStats( - modelId: string, - windowHours = 24, -): DbRow[] { - if (!currentDb) { - return { - total: 0, - succeeded: 0, - failed: 0, - totalCostUsd: 0, - totalTokens: 0, - avgDurationMs: 0, - }; - } - const cutoff = Date.now() - windowHours * 60 * 60 * 1000; - try { - const row = currentDb - .prepare( - `SELECT - COUNT(*) AS total, - COALESCE(SUM(CASE WHEN succeeded = 1 THEN 1 ELSE 0 END), 0) AS succeeded, - COALESCE(SUM(CASE WHEN succeeded = 0 THEN 1 ELSE 0 END), 0) AS failed, - COALESCE(SUM(cost_usd), 0) AS totalCostUsd, - COALESCE(SUM(tokens_total), 0) AS totalTokens, - COALESCE(AVG(duration_ms), 0) AS avgDurationMs - FROM llm_task_outcomes - WHERE model_id = :model_id - AND recorded_at >= :cutoff`, - ) - .get({ ":model_id": modelId, ":cutoff": cutoff }); - if (!row) { - return { - total: 0, - succeeded: 0, - failed: 0, - totalCostUsd: 0, - totalTokens: 0, - avgDurationMs: 0, - }; - } - return { - total: row.total ?? 0, - succeeded: row.succeeded ?? 0, - failed: row.failed ?? 0, - totalCostUsd: row.totalCostUsd ?? 0, - totalTokens: row.totalTokens ?? 0, - avgDurationMs: row.avgDurationMs ?? 0, - }; - } catch { - return { - total: 0, - succeeded: 0, - failed: 0, - totalCostUsd: 0, - totalTokens: 0, - avgDurationMs: 0, - }; - } -} -/** - * Aggregate gate run statistics for a specific gate over a time window. - * - * Returns { total, pass, fail, retry, manualAttention, lastEvaluatedAt }. - * - * Consumer: uok/diagnostic-synthesis.js, uok/gate-runner.js health checks. - */ -export function getGateRunStats( - gateId: string, - windowHours = 24, -): DbRow | undefined { - try { - const basePath = - currentPath && currentPath !== ":memory:" - ? dirname(dirname(currentPath)) - : process.cwd(); - const events = readTraceEvents(basePath, "gate_run", windowHours).filter( - (e) => e.gateId === gateId, - ); - const stats = { - total: events.length, - pass: 0, - fail: 0, - retry: 0, - manualAttention: 0, - lastEvaluatedAt: null, - }; - for (const e of events) { - if (e.outcome === "pass") stats.pass++; - else if (e.outcome === "fail") stats.fail++; - else if (e.outcome === "retry") stats.retry++; - else if (e.outcome === "manual-attention") stats.manualAttention++; - if ( - !stats.lastEvaluatedAt || - (e.evaluatedAt ?? e.ts) > stats.lastEvaluatedAt - ) - stats.lastEvaluatedAt = e.evaluatedAt ?? e.ts; - } - return stats; - } catch { - return { - total: 0, - pass: 0, - fail: 0, - retry: 0, - manualAttention: 0, - lastEvaluatedAt: null, - }; - } -} - -/** - * Read the circuit breaker state for a specific gate. - * - * Returns { gateId, state, failureStreak, lastFailureAt, openedAt, halfOpenAttempts, updatedAt }. - * If no record exists, returns a default closed state. - * - * Consumer: uok/gate-runner.js before executing a gate. - */ -export function getGateCircuitBreaker(gateId: string): DbRow | undefined { - if (!currentDb) { - return { - gateId, - state: "closed", - failureStreak: 0, - lastFailureAt: null, - openedAt: null, - halfOpenAttempts: 0, - updatedAt: null, - }; - } - try { - const row = currentDb - .prepare( - `SELECT gate_id, state, failure_streak, last_failure_at, opened_at, half_open_attempts, updated_at - FROM gate_circuit_breakers - WHERE gate_id = :gate_id`, - ) - .get({ ":gate_id": gateId }); - if (!row) { - return { - gateId, - state: "closed", - failureStreak: 0, - lastFailureAt: null, - openedAt: null, - halfOpenAttempts: 0, - updatedAt: null, - }; - } - return { - gateId: row.gate_id, - state: row.state, - failureStreak: row.failure_streak ?? 0, - lastFailureAt: row.last_failure_at ?? null, - openedAt: row.opened_at ?? null, - halfOpenAttempts: row.half_open_attempts ?? 0, - updatedAt: row.updated_at ?? null, - }; - } catch { - return { - gateId, - state: "closed", - failureStreak: 0, - lastFailureAt: null, - openedAt: null, - halfOpenAttempts: 0, - updatedAt: null, - }; - } -} -/** - * Update the circuit breaker state for a specific gate. - * - * Consumer: uok/gate-runner.js after executing a gate. - */ -export function updateGateCircuitBreaker( - gateId: string, - updates: Record, -): void { - if (!currentDb) return; - currentDb - .prepare( - `INSERT INTO gate_circuit_breakers ( - gate_id, state, failure_streak, last_failure_at, opened_at, half_open_attempts, updated_at - ) VALUES ( - :gate_id, :state, :failure_streak, :last_failure_at, :opened_at, :half_open_attempts, :updated_at - ) - ON CONFLICT(gate_id) DO UPDATE SET - state = excluded.state, - failure_streak = excluded.failure_streak, - last_failure_at = COALESCE(excluded.last_failure_at, gate_circuit_breakers.last_failure_at), - opened_at = COALESCE(excluded.opened_at, gate_circuit_breakers.opened_at), - half_open_attempts = excluded.half_open_attempts, - updated_at = excluded.updated_at`, - ) - .run({ - ":gate_id": gateId, - ":state": updates.state ?? "closed", - ":failure_streak": updates.failureStreak ?? 0, - ":last_failure_at": updates.lastFailureAt ?? null, - ":opened_at": updates.openedAt ?? null, - ":half_open_attempts": updates.halfOpenAttempts ?? 0, - ":updated_at": new Date().toISOString(), - }); -} -export function getGateLatencyStats(gateId: string, windowHours = 24): DbRow[] { - try { - const basePath = - currentPath && currentPath !== ":memory:" - ? dirname(dirname(currentPath)) - : process.cwd(); - const durations = readTraceEvents(basePath, "gate_run", windowHours) - .filter((e) => e.gateId === gateId && typeof e.durationMs === "number") - .map((e) => e.durationMs) - .sort((a, b) => a - b); - if (durations.length === 0) - return { - p50: null, - p95: null, - count: 0, - total: 0, - avgMs: 0, - p50Ms: 0, - p95Ms: 0, - maxMs: 0, - }; - const p50Ms = durations[Math.floor(durations.length * 0.5)] ?? 0; - const p95Ms = durations[Math.floor(durations.length * 0.95)] ?? 0; - const maxMs = durations[durations.length - 1] ?? 0; - const avgMs = Math.round( - durations.reduce((s, v) => s + v, 0) / durations.length, - ); - return { - p50: p50Ms, - p95: p95Ms, - count: durations.length, - total: durations.length, - avgMs, - p50Ms, - p95Ms, - maxMs, - }; - } catch { - return { - p50: null, - p95: null, - count: 0, - total: 0, - avgMs: 0, - p50Ms: 0, - p95Ms: 0, - maxMs: 0, - }; - } -} -export function getDistinctGateIds(): string[] { - try { - const basePath = - currentPath && currentPath !== ":memory:" - ? dirname(dirname(currentPath)) - : process.cwd(); - const events = readTraceEvents(basePath, "gate_run", 24 * 30); // 30 days - return [...new Set(events.map((e) => e.gateId).filter(Boolean))]; - } catch { - return []; - } -} -export function insertUokMessage(msg: Record): void { - if (!currentDb) return; - currentDb - .prepare( - `INSERT OR IGNORE INTO uok_messages (id, from_agent, to_agent, body, metadata_json, sent_at, delivered_at) - VALUES (:id, :from_agent, :to_agent, :body, :metadata_json, :sent_at, :delivered_at)`, - ) - .run({ - ":id": msg.id, - ":from_agent": msg.from, - ":to_agent": msg.to, - ":body": msg.body ?? "", - ":metadata_json": JSON.stringify(msg.metadata ?? {}), - ":sent_at": msg.sentAt, - ":delivered_at": msg.deliveredAt ?? null, - }); -} -export function getUokMessagesForAgent( - agentId, - limit = 1000, - unreadOnly = false, -) { - if (!currentDb) return []; - try { - let sql = `SELECT m.id, m.from_agent AS "from", m.to_agent AS "to", m.body, m.metadata_json AS metadataJson, m.sent_at AS sentAt, m.delivered_at AS deliveredAt, - CASE WHEN r.agent_id IS NOT NULL THEN 1 ELSE 0 END AS read - FROM uok_messages m - LEFT JOIN uok_message_reads r ON r.message_id = m.id AND r.agent_id = :agent_id - WHERE m.to_agent = :agent_id`; - if (unreadOnly) { - sql += " AND r.agent_id IS NULL"; - } - sql += " ORDER BY m.sent_at ASC LIMIT :limit"; - const rows = currentDb.prepare(sql).all({ - ":agent_id": agentId, - ":limit": Math.max(1, Math.min(10_000, Number(limit) || 1000)), - }); - return rows.map((r) => ({ - id: r.id, - from: r.from, - to: r.to, - body: r.body, - metadata: parseJsonObject(r.metadataJson, {}), - sentAt: r.sentAt, - deliveredAt: r.deliveredAt, - read: !!r.read, - })); - } catch { - return []; - } -} -export function getUokConversation( - agentA: string, - agentB: string, - limit = 1000, -): DbRow[] { - if (!currentDb) return []; - try { - const rows = currentDb - .prepare( - `SELECT id, from_agent AS "from", to_agent AS "to", body, metadata_json AS metadataJson, sent_at AS sentAt, delivered_at AS deliveredAt - FROM uok_messages - WHERE (from_agent = :a AND to_agent = :b) OR (from_agent = :b AND to_agent = :a) - ORDER BY sent_at DESC - LIMIT :limit`, - ) - .all({ ":a": agentA, ":b": agentB, ":limit": limit }); - return rows.map((r) => ({ - id: r.id, - from: r.from, - to: r.to, - body: r.body, - metadata: parseJsonObject(r.metadataJson, {}), - sentAt: r.sentAt, - deliveredAt: r.deliveredAt, - })); - } catch { - return []; - } -} -export function markUokMessageRead(messageId: string, agentId: string): void { - if (!currentDb) return; - try { - currentDb - .prepare( - `INSERT OR IGNORE INTO uok_message_reads (message_id, agent_id, read_at) VALUES (:message_id, :agent_id, :read_at)`, - ) - .run({ - ":message_id": messageId, - ":agent_id": agentId, - ":read_at": new Date().toISOString(), - }); - } catch { - // best-effort - } -} -export function getUokMessageUnreadCount(agentId: string): number { - if (!currentDb) return 0; - try { - const row = currentDb - .prepare( - `SELECT COUNT(*) AS cnt FROM uok_messages m - WHERE m.to_agent = :agent_id - AND NOT EXISTS ( - SELECT 1 FROM uok_message_reads r - WHERE r.message_id = m.id AND r.agent_id = :agent_id - )`, - ) - .get({ ":agent_id": agentId }); - return row?.cnt ?? 0; - } catch { - return 0; - } -} -export function compactUokMessages(retentionDays: number): { - before: number; - after: number; -} { - if (!currentDb) return { before: 0, after: 0 }; - try { - const cutoff = new Date( - Date.now() - retentionDays * 24 * 60 * 60 * 1000, - ).toISOString(); - const beforeRow = currentDb - .prepare("SELECT COUNT(*) AS cnt FROM uok_messages") - .get(); - currentDb - .prepare("DELETE FROM uok_messages WHERE sent_at < :cutoff") - .run({ ":cutoff": cutoff }); - const afterRow = currentDb - .prepare("SELECT COUNT(*) AS cnt FROM uok_messages") - .get(); - return { before: beforeRow?.cnt ?? 0, after: afterRow?.cnt ?? 0 }; - } catch { - return { before: 0, after: 0 }; - } -} -export function getUokMessageReadIds(agentId: string): string[] { - if (!currentDb) return []; - try { - const rows = currentDb - .prepare( - "SELECT message_id FROM uok_message_reads WHERE agent_id = :agent_id", - ) - .all({ ":agent_id": agentId }); - return rows.map((r) => r.message_id); - } catch { - return []; - } -} -export function getUokMessageBusMetrics(): DbRow | undefined { - if (!currentDb) { - return { - totalMessages: 0, - totalUnread: 0, - uniqueAgents: 0, - uniqueConversations: 0, - }; - } - try { - const totalRow = currentDb - .prepare("SELECT COUNT(*) AS cnt FROM uok_messages") - .get(); - const unreadRow = currentDb - .prepare( - `SELECT COUNT(*) AS cnt FROM uok_messages m - WHERE NOT EXISTS ( - SELECT 1 FROM uok_message_reads r - WHERE r.message_id = m.id - AND r.agent_id = m.to_agent - )`, - ) - .get(); - const agentsRow = currentDb - .prepare(`SELECT COUNT(DISTINCT to_agent) AS cnt FROM uok_messages`) - .get(); - const convRow = currentDb - .prepare( - `SELECT COUNT(DISTINCT from_agent || ':' || to_agent) AS cnt FROM uok_messages`, - ) - .get(); - return { - totalMessages: totalRow?.cnt ?? 0, - totalUnread: unreadRow?.cnt ?? 0, - uniqueAgents: agentsRow?.cnt ?? 0, - uniqueConversations: convRow?.cnt ?? 0, - }; - } catch { - return { - totalMessages: 0, - totalUnread: 0, - uniqueAgents: 0, - uniqueConversations: 0, - }; - } -} -function normalizeScheduleScope(scope: unknown): string { - return scope === "global" ? "global" : "project"; -} -function scheduleEntryFromRow( - row: Record, -): Record { - if (!row) return null; - const full = parseJsonObject(row.full_json, {}); - return { - ...full, - schemaVersion: row.schema_version ?? full.schemaVersion ?? 1, - id: row.id, - kind: row.kind, - status: row.status, - due_at: row.due_at, - created_at: row.created_at, - snoozed_at: row.snoozed_at ?? full.snoozed_at, - payload: parseJsonObject(row.payload_json, full.payload ?? {}), - created_by: row.created_by, - autonomous_dispatch: !!row.autonomous_dispatch, - }; -} -/** - * Append a schedule entry to the DB-backed schedule ledger. - * - * Purpose: keep time-bound reminders in structured SQLite state so status, - * due-date, and scope queries are schema-owned instead of JSONL-owned. - * - * Consumer: schedule-store.js for /schedule and launch/auto due-item checks. - */ -export function insertScheduleEntry( - scope: string, - entry: Record, - importedFrom: string | null = null, -): void { - if (!currentDb) return; - const normalizedScope = normalizeScheduleScope(scope); - const schemaVersion = entry.schemaVersion ?? 1; - const full = { schemaVersion, ...entry }; - currentDb - .prepare( - `INSERT INTO schedule_entries ( - scope, id, schema_version, kind, status, due_at, created_at, - snoozed_at, payload_json, created_by, autonomous_dispatch, full_json, - imported_from - ) VALUES ( - :scope, :id, :schema_version, :kind, :status, :due_at, :created_at, - :snoozed_at, :payload_json, :created_by, :autonomous_dispatch, :full_json, - :imported_from - )`, - ) - .run({ - ":scope": normalizedScope, - ":id": entry.id, - ":schema_version": schemaVersion, - ":kind": entry.kind ?? "reminder", - ":status": entry.status ?? "pending", - ":due_at": entry.due_at ?? "", - ":created_at": entry.created_at ?? "", - ":snoozed_at": entry.snoozed_at ?? null, - ":payload_json": JSON.stringify(entry.payload ?? {}), - ":created_by": entry.created_by ?? "user", - ":autonomous_dispatch": entry.autonomous_dispatch ? 1 : 0, - ":full_json": JSON.stringify(full), - ":imported_from": importedFrom, - }); -} -/** - * Return latest schedule entries per id for a scope. - * - * Purpose: preserve append-ledger semantics while serving queries from SQLite. - * - * Consumer: schedule-store.js readEntries/findDue/findUpcoming. - */ -export function getScheduleEntries(scope: string): DbRow[] { - if (!currentDb) return []; - const normalizedScope = normalizeScheduleScope(scope); - try { - const rows = currentDb - .prepare( - `SELECT s.* - FROM schedule_entries s - JOIN ( - SELECT id, MAX(seq) AS max_seq - FROM schedule_entries - WHERE scope = :scope - GROUP BY id - ) latest ON latest.id = s.id AND latest.max_seq = s.seq - WHERE s.scope = :scope - ORDER BY s.due_at ASC, s.created_at ASC, s.seq ASC`, - ) - .all({ ":scope": normalizedScope }); - return rows.map(scheduleEntryFromRow).filter(Boolean); - } catch { - return []; - } -} -export function countScheduleEntries(scope: string): number { - if (!currentDb) return 0; - const normalizedScope = normalizeScheduleScope(scope); - try { - const row = currentDb - .prepare( - "SELECT COUNT(*) AS cnt FROM schedule_entries WHERE scope = :scope", - ) - .get({ ":scope": normalizedScope }); - return row?.cnt ?? 0; - } catch { - return 0; - } -} -function asStringOrNull(value: unknown): string | null { - return typeof value === "string" && value.length > 0 ? value : null; -} -/** - * Persist a repository profile snapshot and update current file observations. - * - * Purpose: make harness evolution's read-only repo facts queryable across - * sessions while preserving first-seen timestamps for untracked observations. - * - * Consumer: `/harness profile` and future pre-plan profile snapshots. - */ -export function recordRepoProfile(profile: Record): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - transaction(() => { - currentDb - .prepare(`INSERT OR REPLACE INTO repo_profiles ( - profile_id, project_hash, project_root, head, branch, remote_hash, - dirty, profile_json, created_at - ) VALUES ( - :profile_id, :project_hash, :project_root, :head, :branch, :remote_hash, - :dirty, :profile_json, :created_at - )`) - .run({ - ":profile_id": profile.profileId, - ":project_hash": profile.projectHash, - ":project_root": profile.projectRoot, - ":head": profile.git.head, - ":branch": profile.git.branch, - ":remote_hash": profile.git.remoteHash, - ":dirty": profile.git.dirty ? 1 : 0, - ":profile_json": JSON.stringify(profile), - ":created_at": profile.createdAt, - }); - const stmt = currentDb.prepare(`INSERT INTO repo_file_observations ( - path, latest_profile_id, git_status, ownership, language, size_bytes, - content_hash, summary, first_seen_at, last_seen_at, adopted_at, - adoption_unit_id - ) VALUES ( - :path, :latest_profile_id, :git_status, :ownership, :language, :size_bytes, - :content_hash, :summary, :first_seen_at, :last_seen_at, :adopted_at, - :adoption_unit_id - ) - ON CONFLICT(path) DO UPDATE SET - latest_profile_id = excluded.latest_profile_id, - git_status = excluded.git_status, - ownership = CASE - WHEN repo_file_observations.ownership = 'sf_generated' - THEN repo_file_observations.ownership - WHEN repo_file_observations.ownership = 'candidate_harness' - THEN repo_file_observations.ownership - ELSE excluded.ownership - END, - language = excluded.language, - size_bytes = excluded.size_bytes, - content_hash = excluded.content_hash, - summary = excluded.summary, - first_seen_at = repo_file_observations.first_seen_at, - last_seen_at = excluded.last_seen_at, - adopted_at = COALESCE(repo_file_observations.adopted_at, excluded.adopted_at), - adoption_unit_id = COALESCE(repo_file_observations.adoption_unit_id, excluded.adoption_unit_id)`); - for (const file of profile.git.changedFiles) { - stmt.run({ - ":path": file.path, - ":latest_profile_id": profile.profileId, - ":git_status": file.gitStatus, - ":ownership": file.ownership, - ":language": file.language, - ":size_bytes": file.sizeBytes, - ":content_hash": file.contentHash, - ":summary": file.summary, - ":first_seen_at": file.firstSeenAt, - ":last_seen_at": file.lastSeenAt, - ":adopted_at": file.adoptedAt, - ":adoption_unit_id": file.adoptionUnitId, - }); - } - }); -} -/** - * Return the most recently recorded repository profile. - * - * Purpose: let harness planning and diagnostics inspect the latest factual - * repo snapshot without re-running the profiler. - * - * Consumer: harness status commands and future plan-phase coverage checks. - */ -export function getLatestRepoProfile(): DbRow | undefined { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const row = currentDb - .prepare(`SELECT profile_id, project_hash, project_root, head, branch, remote_hash, - dirty, profile_json, created_at - FROM repo_profiles - ORDER BY created_at DESC, profile_id DESC - LIMIT 1`) - .get(); - if (!row) return null; - return { - profileId: row["profile_id"], - projectHash: row["project_hash"], - projectRoot: row["project_root"], - head: asStringOrNull(row["head"]), - branch: asStringOrNull(row["branch"]), - remoteHash: asStringOrNull(row["remote_hash"]), - dirty: row["dirty"] === 1, - profileJson: row["profile_json"] ?? "{}", - createdAt: row["created_at"], - }; -} -/** - * Return the current file observations accumulated by repo profiling. - * - * Purpose: keep untracked and modified file awareness queryable without - * treating those paths as SF-owned artifacts. - * - * Consumer: harness planning, diagnostics, and future drift detection. - */ -export function getRepoFileObservations(): DbRow[] { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - return currentDb - .prepare(`SELECT path, latest_profile_id, git_status, ownership, language, - size_bytes, content_hash, summary, first_seen_at, last_seen_at, - adopted_at, adoption_unit_id - FROM repo_file_observations - ORDER BY path ASC`) - .all() - .map((row) => ({ - path: row["path"], - latestProfileId: row["latest_profile_id"], - gitStatus: row["git_status"], - ownership: row["ownership"], - language: asStringOrNull(row["language"]), - sizeBytes: row["size_bytes"] ?? 0, - contentHash: asStringOrNull(row["content_hash"]), - summary: asStringOrNull(row["summary"]), - firstSeenAt: row["first_seen_at"], - lastSeenAt: row["last_seen_at"], - adoptedAt: asStringOrNull(row["adopted_at"]), - adoptionUnitId: asStringOrNull(row["adoption_unit_id"]), - })); -} -function intBool(value: unknown): boolean { - return value ? 1 : 0; -} -function parseJsonObject( - raw: unknown, - fallback: Record = {}, -): Record { - try { - return JSON.parse(raw); - } catch { - return fallback; - } -} -function solverEvalRunFromRow( - row: Record, -): Record { - return { - runId: row["run_id"], - suiteSource: row["suite_source"], - casesCount: row["cases_count"] ?? 0, - summary: parseJsonObject(row["summary_json"], {}), - reportPath: row["report_path"], - resultsPath: row["results_path"], - dbRecorded: row["db_recorded"] === 1, - createdAt: row["created_at"], - updatedAt: row["updated_at"], - }; -} -function solverEvalCaseFromRow( - row: Record, -): Record { - return { - runId: row["run_id"], - caseId: row["case_id"], - title: row["title"], - mode: row["mode"], - passed: row["passed"] === 1, - falseComplete: row["false_complete"] === 1, - durationMs: row["duration_ms"], - commandStatus: row["command_status"], - solverOutcome: asStringOrNull(row["solver_outcome"]), - pddComplete: - row["pdd_complete"] === null || row["pdd_complete"] === undefined - ? null - : row["pdd_complete"] === 1, - result: parseJsonObject(row["result_json"], {}), - createdAt: row["created_at"], - }; -} -function headlessRunFromRow( - row: Record, -): Record { - return { - runId: row["run_id"], - command: row["command"], - status: row["status"], - exitCode: row["exit_code"], - timedOut: row["timed_out"] === 1, - interrupted: row["interrupted"] === 1, - restartCount: row["restart_count"] ?? 0, - maxRestarts: row["max_restarts"] ?? 0, - durationMs: row["duration_ms"] ?? 0, - totalEvents: row["total_events"] ?? 0, - toolCalls: row["tool_calls"] ?? 0, - solverEvalRunId: asStringOrNull(row["solver_eval_run_id"]), - solverEvalReportPath: asStringOrNull(row["solver_eval_report_path"]), - details: parseJsonObject(row["details_json"], {}), - createdAt: row["created_at"], - updatedAt: row["updated_at"], - }; -} -/** - * Persist an autonomous solver eval run and its per-mode case results. - * - * Purpose: make solver-loop benchmark evidence queryable by SF commands, - * harness flows, UOK, and future memory retention instead of treating ignored - * `.sf/evals` JSON/JSONL evidence files as project state. - * - * Consumer: `/solver-eval` after each run completes. - */ -export function recordSolverEvalRun(report: Record): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const now = new Date().toISOString(); - transaction(() => { - currentDb - .prepare(`INSERT INTO solver_eval_runs ( - run_id, suite_source, cases_count, summary_json, report_path, - results_path, db_recorded, created_at, updated_at - ) VALUES ( - :run_id, :suite_source, :cases_count, :summary_json, :report_path, - :results_path, 1, :created_at, :updated_at - ) - ON CONFLICT(run_id) DO UPDATE SET - suite_source = excluded.suite_source, - cases_count = excluded.cases_count, - summary_json = excluded.summary_json, - report_path = excluded.report_path, - results_path = excluded.results_path, - db_recorded = 1, - updated_at = excluded.updated_at`) - .run({ - ":run_id": report.runId, - ":suite_source": report.suiteSource ?? "", - ":cases_count": report.summary?.cases ?? report.results?.length ?? 0, - ":summary_json": JSON.stringify(report.summary ?? {}), - ":report_path": report.reportPath ?? "", - ":results_path": report.resultsPath ?? "", - ":created_at": report.createdAt ?? now, - ":updated_at": now, - }); - const stmt = currentDb.prepare(`INSERT INTO solver_eval_case_results ( - run_id, case_id, title, mode, passed, false_complete, duration_ms, - command_status, solver_outcome, pdd_complete, result_json, created_at - ) VALUES ( - :run_id, :case_id, :title, :mode, :passed, :false_complete, :duration_ms, - :command_status, :solver_outcome, :pdd_complete, :result_json, :created_at - ) - ON CONFLICT(run_id, case_id, mode) DO UPDATE SET - title = excluded.title, - passed = excluded.passed, - false_complete = excluded.false_complete, - duration_ms = excluded.duration_ms, - command_status = excluded.command_status, - solver_outcome = excluded.solver_outcome, - pdd_complete = excluded.pdd_complete, - result_json = excluded.result_json, - created_at = excluded.created_at`); - for (const result of report.results ?? []) { - stmt.run({ - ":run_id": report.runId, - ":case_id": result.caseId, - ":title": result.title ?? "", - ":mode": result.mode, - ":passed": intBool(result.passed), - ":false_complete": intBool(result.falseComplete), - ":duration_ms": result.command?.durationMs ?? null, - ":command_status": result.command?.status ?? null, - ":solver_outcome": result.solverSignals?.outcome ?? null, - ":pdd_complete": - result.solverSignals?.pddComplete === undefined - ? null - : intBool(result.solverSignals.pddComplete), - ":result_json": JSON.stringify(result), - ":created_at": report.createdAt ?? now, - }); - } - }); -} -/** - * List recent autonomous solver eval runs. - * - * Purpose: let operators inspect benchmark history without scraping generated - * report files. - * - * Consumer: `/solver-eval history`. - */ -export function listSolverEvalRuns(limit = 10): DbRow[] { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - return currentDb - .prepare(`SELECT run_id, suite_source, cases_count, summary_json, - report_path, results_path, db_recorded, created_at, updated_at - FROM solver_eval_runs - ORDER BY created_at DESC, run_id DESC - LIMIT :limit`) - .all({ ":limit": Math.max(1, Math.min(100, Number(limit) || 10)) }) - .map(solverEvalRunFromRow); -} -/** - * Read one autonomous solver eval run by id. - * - * Purpose: support `/solver-eval show ` and future evidence - * promotion without parsing JSON artifacts. - * - * Consumer: solver eval command handlers. - */ -export function getSolverEvalRun(runId: string): DbRow | undefined { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const row = currentDb - .prepare(`SELECT run_id, suite_source, cases_count, summary_json, - report_path, results_path, db_recorded, created_at, updated_at - FROM solver_eval_runs - WHERE run_id = :run_id`) - .get({ ":run_id": runId }); - return row ? solverEvalRunFromRow(row) : null; -} -/** - * Read per-case results for one autonomous solver eval run. - * - * Purpose: show raw-vs-SF comparisons from DB evidence. - * - * Consumer: `/solver-eval show `. - */ -export function getSolverEvalCaseResults(runId: string): DbRow[] { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - return currentDb - .prepare(`SELECT run_id, case_id, title, mode, passed, false_complete, - duration_ms, command_status, solver_outcome, pdd_complete, - result_json, created_at - FROM solver_eval_case_results - WHERE run_id = :run_id - ORDER BY case_id ASC, mode ASC`) - .all({ ":run_id": runId }) - .map(solverEvalCaseFromRow); -} -/** - * Persist one headless session outcome. - * - * Purpose: make headless lifecycle evidence queryable from `sf.db` so timeout, - * restart, and operator-bounded run behavior does not live only in stderr or - * generated JSON artifacts. - * - * Consumer: headless.ts after every session exits. - */ -export function recordHeadlessRun(entry: Record): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const now = new Date().toISOString(); - currentDb - .prepare(`INSERT INTO headless_runs ( - run_id, command, status, exit_code, timed_out, interrupted, - restart_count, max_restarts, duration_ms, total_events, tool_calls, - solver_eval_run_id, solver_eval_report_path, details_json, - created_at, updated_at - ) VALUES ( - :run_id, :command, :status, :exit_code, :timed_out, :interrupted, - :restart_count, :max_restarts, :duration_ms, :total_events, :tool_calls, - :solver_eval_run_id, :solver_eval_report_path, :details_json, - :created_at, :updated_at - ) - ON CONFLICT(run_id) DO UPDATE SET - command = excluded.command, - status = excluded.status, - exit_code = excluded.exit_code, - timed_out = excluded.timed_out, - interrupted = excluded.interrupted, - restart_count = excluded.restart_count, - max_restarts = excluded.max_restarts, - duration_ms = excluded.duration_ms, - total_events = excluded.total_events, - tool_calls = excluded.tool_calls, - solver_eval_run_id = excluded.solver_eval_run_id, - solver_eval_report_path = excluded.solver_eval_report_path, - details_json = excluded.details_json, - updated_at = excluded.updated_at`) - .run({ - ":run_id": entry.runId, - ":command": entry.command ?? "", - ":status": entry.status ?? "", - ":exit_code": Number(entry.exitCode ?? 0), - ":timed_out": intBool(entry.timedOut), - ":interrupted": intBool(entry.interrupted), - ":restart_count": Number(entry.restartCount ?? 0), - ":max_restarts": Number(entry.maxRestarts ?? 0), - ":duration_ms": Number(entry.durationMs ?? 0), - ":total_events": Number(entry.totalEvents ?? 0), - ":tool_calls": Number(entry.toolCalls ?? 0), - ":solver_eval_run_id": entry.solverEvalRunId ?? null, - ":solver_eval_report_path": entry.solverEvalReportPath ?? null, - ":details_json": JSON.stringify(entry.details ?? {}), - ":created_at": entry.createdAt ?? now, - ":updated_at": now, - }); -} -/** - * List recent headless session outcomes. - * - * Purpose: support status/doctor/query surfaces that need durable headless - * lifecycle evidence without parsing stderr logs. - * - * Consumer: tests now; headless query and doctor follow-on surfaces later. - */ -export function listHeadlessRuns(limit = 20): DbRow[] { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - return currentDb - .prepare(`SELECT run_id, command, status, exit_code, timed_out, - interrupted, restart_count, max_restarts, duration_ms, - total_events, tool_calls, solver_eval_run_id, - solver_eval_report_path, details_json, created_at, updated_at - FROM headless_runs - ORDER BY created_at DESC, run_id DESC - LIMIT :limit`) - .all({ ":limit": Math.max(1, Math.min(100, Number(limit) || 20)) }) - .map(headlessRunFromRow); -} -/** - * Upsert a session row. Creates on first call; updates updated_at, branch, - * repo, and summary on subsequent calls. Safe to call on every session_start - * and again when context becomes available (e.g. after git detection). - * - * Purpose: establish the session entity that all turns, file-touches, and - * refs hang off — the missing structural layer for cross-session learning. - * - * Consumer: session-recorder.js on session_start and session_shutdown hooks. - */ -export function upsertSession(entry: Record): void { - if (!currentDb) return; - const now = new Date().toISOString(); - currentDb - .prepare(`INSERT INTO sessions - (session_id, trace_id, mode, cwd, repo, branch, summary, summary_count, created_at, updated_at) - VALUES (:session_id, :trace_id, :mode, :cwd, :repo, :branch, :summary, 0, :now, :now) - ON CONFLICT(session_id) DO UPDATE SET - trace_id = COALESCE(excluded.trace_id, sessions.trace_id), - repo = COALESCE(excluded.repo, sessions.repo), - branch = COALESCE(excluded.branch, sessions.branch), - summary = COALESCE(excluded.summary, sessions.summary), - summary_count = CASE WHEN excluded.summary IS NOT NULL - THEN sessions.summary_count + 1 - ELSE sessions.summary_count END, - updated_at = excluded.updated_at`) - .run({ - ":session_id": entry.sessionId, - ":trace_id": entry.traceId ?? null, - ":mode": entry.mode ?? "interactive", - ":cwd": entry.cwd ?? "", - ":repo": entry.repo ?? null, - ":branch": entry.branch ?? null, - ":summary": entry.summary ?? null, - ":now": now, - }); -} - -/** - * Mark a session as archived. Archived sessions are hidden from default - * session listings but retained for search and audit. - * - * Purpose: soft-delete sessions without losing their turn history or refs. - * Consumer: /sf sessions --archive , autonomous cleanup. - */ -export function archiveSession(sessionId: string): void { - if (!currentDb) return; - currentDb - .prepare( - `UPDATE sessions SET archived_at = :now, updated_at = :now WHERE session_id = :session_id`, - ) - .run({ ":session_id": sessionId, ":now": new Date().toISOString() }); -} - -/** - * Restore an archived session to active status. - * - * Purpose: undo an accidental archive without data loss. - * Consumer: /sf sessions --unarchive . - */ -export function unarchiveSession(sessionId: string): void { - if (!currentDb) return; - currentDb - .prepare( - `UPDATE sessions SET archived_at = NULL, updated_at = :now WHERE session_id = :session_id`, - ) - .run({ ":session_id": sessionId, ":now": new Date().toISOString() }); -} - -/** - * Insert a turn row for a session. Returns the new turn's integer id so the - * caller can link subsequent file-touches and refs to it. - * - * Purpose: record every user↔assistant exchange so turn text is searchable - * via turns_fts and promotable into the memory pipeline. - * - * Consumer: session-recorder.js on before_agent_start (user_message) and - * agent_end (assistant_response patch). - */ -export function insertSessionTurn( - entry: Record, -): bigint | null { - if (!currentDb) return null; - const result = currentDb - .prepare(`INSERT INTO turns - (session_id, turn_index, user_message, assistant_response, ts) - VALUES (:session_id, :turn_index, :user_message, :assistant_response, :ts) - ON CONFLICT(session_id, turn_index) DO UPDATE SET - user_message = COALESCE(excluded.user_message, turns.user_message), - assistant_response = COALESCE(excluded.assistant_response, turns.assistant_response)`) - .run({ - ":session_id": entry.sessionId, - ":turn_index": entry.turnIndex, - ":user_message": entry.userMessage ?? null, - ":assistant_response": entry.assistantResponse ?? null, - ":ts": entry.ts ?? new Date().toISOString(), - }); - return result.lastInsertRowid ?? null; -} -/** - * Patch the assistant_response on an existing turn row. Called from agent_end - * after the model finishes so the full response is stored alongside the prompt. - * - * Purpose: complete the turn record so both halves of the exchange are - * searchable and promotable as a unit. - * - * Consumer: session-recorder.js on agent_end. - */ -export function patchTurnResponse( - sessionId: string, - turnIndex: number, - assistantResponse: string, -): void { - if (!currentDb) return; - currentDb - .prepare(`UPDATE turns SET assistant_response = :resp - WHERE session_id = :sid AND turn_index = :idx AND assistant_response IS NULL`) - .run({ - ":resp": assistantResponse, - ":sid": sessionId, - ":idx": turnIndex, - }); -} -/** - * Record that a file path was touched in a session. UNIQUE(session_id, path) - * means repeated touches in one session are collapsed to a single row — - * only first_seen_at and tool_name (of the first touch) are retained. - * - * Purpose: enable "which files did I touch last session?" and cross-session - * file-history queries without storing a full audit log per touch. - * - * Consumer: session-recorder.js on tool_call for write-class tools. - */ -export function recordSessionFileTouch(entry: Record): void { - if (!currentDb) return; - currentDb - .prepare(`INSERT OR IGNORE INTO session_file_touches - (session_id, path, tool_name, turn_id, first_seen_at) - VALUES (:session_id, :path, :tool_name, :turn_id, :first_seen_at)`) - .run({ - ":session_id": entry.sessionId, - ":path": entry.path, - ":tool_name": entry.toolName ?? null, - ":turn_id": entry.turnId ?? null, - ":first_seen_at": entry.firstSeenAt ?? new Date().toISOString(), - }); -} -/** - * Record a PR / issue / commit / branch ref mentioned in a session. Idempotent - * via UNIQUE(session_id, ref_type, ref_value). - * - * Purpose: make sessions queryable by the work items they touched so - * "what session created PR #42?" is a single indexed lookup. - * - * Consumer: session-recorder.js when refs are detected in turn text. - */ -export function recordSessionRef(entry: Record): void { - if (!currentDb) return; - currentDb - .prepare(`INSERT OR IGNORE INTO session_refs - (session_id, ref_type, ref_value, turn_id, created_at) - VALUES (:session_id, :ref_type, :ref_value, :turn_id, :created_at)`) - .run({ - ":session_id": entry.sessionId, - ":ref_type": entry.refType, - ":ref_value": entry.refValue, - ":turn_id": entry.turnId ?? null, - ":created_at": entry.createdAt ?? new Date().toISOString(), - }); -} -/** - * Full-text search across turns via the FTS5 turns_fts virtual table. - * Returns matching turns with their session metadata ordered by relevance. - * - * Purpose: power cross-session keyword recall — "what did I ask about auth?", - * "find sessions where I worked on retry handling". - * - * Consumer: sf memory search, context-injection, and /session search command. - */ -export function searchSessionTurns(query: string, limit = 20): DbRow[] { - if (!currentDb) return []; - return currentDb - .prepare(`SELECT t.id, t.session_id, t.turn_index, t.ts, - t.user_message, t.assistant_response, - s.mode, s.cwd, s.repo, s.branch - FROM turns_fts - JOIN turns t ON turns_fts.rowid = t.id - JOIN sessions s ON t.session_id = s.session_id - WHERE turns_fts MATCH :query - ORDER BY rank - LIMIT :limit`) - .all({ ":query": query, ":limit": Math.max(1, Math.min(100, limit)) }); -} -/** - * List recent sessions with their turn count and last-touched file count. - * Useful for /session list and for memory-pipeline ingestion sweeps. - * - * Consumer: trajectory-command, memory-ingest, doctor checks. - */ -export function listRecentSessions(limit = 20): DbRow[] { - if (!currentDb) return []; - return currentDb - .prepare(`SELECT s.session_id, s.mode, s.cwd, s.repo, s.branch, - s.summary, s.created_at, s.updated_at, - COUNT(DISTINCT t.id) AS turn_count, - COUNT(DISTINCT f.id) AS file_count - FROM sessions s - LEFT JOIN turns t ON t.session_id = s.session_id - LEFT JOIN session_file_touches f ON f.session_id = s.session_id - GROUP BY s.session_id - ORDER BY s.updated_at DESC - LIMIT :limit`) - .all({ ":limit": Math.max(1, Math.min(100, limit)) }); -} -/** - * Record a snapshot checkpoint before an irreversible operation. Idempotent - * within a session: the snapshot_index is auto-incremented from the current - * max so callers can create multiple checkpoints per session without - * coordination. - * - * Purpose: give session_snapshots a first-class row so recovery paths and - * irreversible-ops gates can reference the stash ref and label without - * parsing free-text. - * - * Consumer: irreversible-ops safety gate (session_before_compact, future - * verify steps that call git stash before destructive actions). - * - * @param {{ sessionId: string, gitStashRef?: string|null, label?: string|null, ts?: string }} args - * @returns {number} The row id of the inserted snapshot (or 0 on failure). - */ -export function insertSessionSnapshot(args: Record): number { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const nextIndex = (() => { - const row = currentDb - .prepare( - "SELECT COALESCE(MAX(snapshot_index), -1) + 1 AS nxt FROM session_snapshots WHERE session_id = :sid", - ) - .get({ ":sid": args.sessionId }); - return row ? Number(row["nxt"]) : 0; - })(); - currentDb - .prepare(`INSERT INTO session_snapshots - (session_id, snapshot_index, git_stash_ref, label, ts) - VALUES (:sid, :idx, :ref, :label, :ts)`) - .run({ - ":sid": args.sessionId, - ":idx": nextIndex, - ":ref": args.gitStashRef ?? null, - ":label": args.label ?? null, - ":ts": args.ts ?? new Date().toISOString(), - }); - const row = currentDb - .prepare( - "SELECT id FROM session_snapshots WHERE session_id = :sid AND snapshot_index = :idx", - ) - .get({ ":sid": args.sessionId, ":idx": nextIndex }); - return row ? Number(row["id"]) : 0; -} -/** - * List all snapshots for a session, ordered by snapshot_index ascending. - * - * Purpose: let recovery tooling enumerate available restore points for a - * session and present them to the operator before a rollback. - * - * Consumer: future /session snapshots command and irreversible-ops skill. - * - * @param {string} sessionId - * @returns {Array<{id:number, session_id:string, snapshot_index:number, git_stash_ref:string|null, label:string|null, ts:string}>} - */ -export function listSessionSnapshots(sessionId: string): DbRow[] { - if (!currentDb) return []; - return currentDb - .prepare( - "SELECT * FROM session_snapshots WHERE session_id = :sid ORDER BY snapshot_index ASC", - ) - .all({ ":sid": sessionId }); -} - -/** - * INSERT OR REPLACE a quality_gates row. Used by milestone-validation-gates.ts - * to persist milestone-level (MV*) gate outcomes after validate-milestone runs. - */ -export function upsertQualityGate(g: QualityGateInput): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT OR REPLACE INTO quality_gates - (milestone_id, slice_id, gate_id, scope, task_id, status, verdict, rationale, findings, evaluated_at) - VALUES (:mid, :sid, :gid, :scope, :tid, :status, :verdict, :rationale, :findings, :evaluated_at)`) - .run({ - ":mid": g.milestoneId, - ":sid": g.sliceId, - ":gid": g.gateId, - ":scope": g.scope, - ":tid": g.taskId, - ":status": g.status, - ":verdict": g.verdict, - ":rationale": g.rationale, - ":findings": g.findings, - ":evaluated_at": g.evaluatedAt, - }); -} -/** - * Atomically replace all workflow state from a manifest. Lifted verbatim from - * workflow-manifest.ts so the single-writer invariant holds. Only touches - * engine tables + decisions. Does NOT modify artifacts or memories. - */ -export function restoreManifest(manifest: Record): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const db = currentDb; - transaction(() => { - // Clear engine tables (order matters for foreign-key-like consistency) - db.exec("DELETE FROM verification_evidence"); - db.exec("DELETE FROM tasks"); - db.exec("DELETE FROM slices"); - db.exec("DELETE FROM milestones"); - db.exec("DELETE FROM decisions WHERE 1=1"); - // Restore milestones - const msStmt = - db.prepare(`INSERT INTO milestones (id, title, status, depends_on, created_at, completed_at, - vision, success_criteria, key_risks, proof_strategy, - verification_contract, verification_integration, verification_operational, verification_uat, - definition_of_done, requirement_coverage, boundary_map_markdown, vision_meeting_json, product_research_json) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`); - for (const m of manifest.milestones) { - msStmt.run( - m.id, - m.title, - m.status, - JSON.stringify(m.depends_on), - m.created_at, - m.completed_at, - m.vision, - JSON.stringify(m.success_criteria), - JSON.stringify(m.key_risks), - JSON.stringify(m.proof_strategy), - m.verification_contract, - m.verification_integration, - m.verification_operational, - m.verification_uat, - JSON.stringify(m.definition_of_done), - m.requirement_coverage, - m.boundary_map_markdown, - m.vision_meeting ? JSON.stringify(m.vision_meeting) : "", - m.product_research ? JSON.stringify(m.product_research) : "", - ); - } - // Restore slices - const slStmt = - db.prepare(`INSERT INTO slices (milestone_id, id, title, status, risk, depends, demo, - created_at, completed_at, full_summary_md, full_uat_md, - goal, success_criteria, proof_level, integration_closure, observability_impact, - adversarial_partner, adversarial_combatant, adversarial_architect, planning_meeting_json, - sequence, replan_triggered_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`); - for (const s of manifest.slices) { - slStmt.run( - s.milestone_id, - s.id, - s.title, - s.status, - s.risk, - JSON.stringify(s.depends), - s.demo, - s.created_at, - s.completed_at, - s.full_summary_md, - s.full_uat_md, - s.goal, - s.success_criteria, - s.proof_level, - s.integration_closure, - s.observability_impact, - s.adversarial_partner ?? "", - s.adversarial_combatant ?? "", - s.adversarial_architect ?? "", - s.planning_meeting ? JSON.stringify(s.planning_meeting) : "", - s.sequence, - s.replan_triggered_at, - ); - } - // Restore tasks - const tkStmt = - db.prepare(`INSERT INTO tasks (milestone_id, slice_id, id, title, status, - one_liner, narrative, verification_result, duration, completed_at, - blocker_discovered, deviations, known_issues, key_files, key_decisions, - full_summary_md, description, estimate, files, verify, - inputs, expected_output, observability_impact, full_plan_md, sequence) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`); - for (const t of manifest.tasks) { - tkStmt.run( - t.milestone_id, - t.slice_id, - t.id, - t.title, - t.status, - t.one_liner, - t.narrative, - t.verification_result, - t.duration, - t.completed_at, - t.blocker_discovered ? 1 : 0, - t.deviations, - t.known_issues, - JSON.stringify(t.key_files), - JSON.stringify(t.key_decisions), - t.full_summary_md, - t.description, - t.estimate, - JSON.stringify(t.files), - t.verify, - JSON.stringify(t.inputs), - JSON.stringify(t.expected_output), - t.observability_impact, - t.full_plan_md, - t.sequence, - ); - } - // Restore decisions - const dcStmt = - db.prepare(`INSERT INTO decisions (seq, id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`); - for (const d of manifest.decisions) { - dcStmt.run( - d.seq, - d.id, - d.when_context, - d.scope, - d.decision, - d.choice, - d.rationale, - d.revisable, - d.made_by, - d.superseded_by, - ); - } - // Restore verification evidence - const evStmt = - db.prepare(`INSERT INTO verification_evidence (task_id, slice_id, milestone_id, command, exit_code, verdict, duration_ms, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?)`); - for (const e of manifest.verification_evidence) { - evStmt.run( - e.task_id, - e.slice_id, - e.milestone_id, - e.command, - e.exit_code, - e.verdict, - e.duration_ms, - e.created_at, - ); - } - }); -} -/** - * Bulk delete + insert a legacy milestone hierarchy for markdown → DB migration. - * Used by workflow-migration.ts to populate engine tables from parsed ROADMAP/PLAN - * files. All operations run inside a single transaction. - */ -export function bulkInsertLegacyHierarchy( - payload: Record, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const db = currentDb; - const { milestones, slices, tasks, clearMilestoneIds, createdAt } = payload; - if (clearMilestoneIds.length === 0) return; - const placeholders = clearMilestoneIds.map(() => "?").join(","); - transaction(() => { - db.prepare(`DELETE FROM tasks WHERE milestone_id IN (${placeholders})`).run( - ...clearMilestoneIds, - ); - db.prepare( - `DELETE FROM slices WHERE milestone_id IN (${placeholders})`, - ).run(...clearMilestoneIds); - db.prepare(`DELETE FROM milestones WHERE id IN (${placeholders})`).run( - ...clearMilestoneIds, - ); - const insertMilestone = db.prepare( - "INSERT INTO milestones (id, title, status, created_at) VALUES (?, ?, ?, ?)", - ); - for (const m of milestones) { - insertMilestone.run(m.id, m.title, m.status, createdAt); - } - const insertSliceStmt = db.prepare( - "INSERT INTO slices (id, milestone_id, title, status, risk, depends, sequence, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", - ); - for (const s of slices) { - insertSliceStmt.run( - s.id, - s.milestoneId, - s.title, - s.status, - s.risk, - "[]", - s.sequence, - createdAt, - ); - } - const insertTaskStmt = db.prepare( - "INSERT INTO tasks (id, slice_id, milestone_id, title, description, status, estimate, files, sequence) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", - ); - for (const t of tasks) { - insertTaskStmt.run( - t.id, - t.sliceId, - t.milestoneId, - t.title, - "", - t.status, - "", - "[]", - t.sequence, - ); - } - }); -} -// ─── Memory store writers ──────────────────────────────────────────────── -// All memory writes go through sf-db.ts so the single-writer invariant -// holds. These are direct pass-throughs to the SQL previously in -// memory-store.ts — same bindings, same behavior. -export function getActiveMemories({ - category, - limit = 200, -}: { - category?: string; - limit?: number; -} = {}): DbRow[] { - if (!currentDb) return []; - const rows = category - ? currentDb - .prepare( - "SELECT * FROM active_memories WHERE category = ? ORDER BY updated_at DESC LIMIT ?", - ) - .all(category, limit) - : currentDb - .prepare( - "SELECT * FROM active_memories ORDER BY updated_at DESC LIMIT ?", - ) - .all(limit); - return rows.map((r) => ({ - id: r["id"], - category: r["category"], - content: r["content"], - confidence: r["confidence"], - sourceUnitId: r["source_unit_id"], - tags: (() => { - try { - return JSON.parse(r["tags"] ?? "[]"); - } catch { - return []; - } - })(), - createdAt: r["created_at"], - updatedAt: r["updated_at"], - })); -} -export function insertMemoryRow(args: Record): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT INTO memories (id, category, content, confidence, source_unit_type, source_unit_id, created_at, updated_at, tags) - VALUES (:id, :category, :content, :confidence, :source_unit_type, :source_unit_id, :created_at, :updated_at, :tags)`) - .run({ - ":id": args.id, - ":category": args.category, - ":content": args.content, - ":confidence": args.confidence, - ":source_unit_type": args.sourceUnitType, - ":source_unit_id": args.sourceUnitId, - ":created_at": args.createdAt, - ":updated_at": args.updatedAt, - ":tags": JSON.stringify(args.tags ?? []), - }); -} -export function rewriteMemoryId(placeholderId: string, realId: string): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare("UPDATE memories SET id = :real_id WHERE id = :placeholder") - .run({ - ":real_id": realId, - ":placeholder": placeholderId, - }); -} -export function updateMemoryContentRow( - id: string, - content: string, - confidence: number, - updatedAt: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - if (confidence != null) { - currentDb - .prepare( - "UPDATE memories SET content = :content, confidence = :confidence, updated_at = :updated_at WHERE id = :id", - ) - .run({ - ":content": content, - ":confidence": confidence, - ":updated_at": updatedAt, - ":id": id, - }); - } else { - currentDb - .prepare( - "UPDATE memories SET content = :content, updated_at = :updated_at WHERE id = :id", - ) - .run({ ":content": content, ":updated_at": updatedAt, ":id": id }); - } -} -export function incrementMemoryHitCount(id: string, updatedAt: string): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - "UPDATE memories SET hit_count = hit_count + 1, updated_at = :updated_at WHERE id = :id", - ) - .run({ ":updated_at": updatedAt, ":id": id }); -} -export function supersedeMemoryRow( - oldId: string, - newId: string, - updatedAt: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - "UPDATE memories SET superseded_by = :new_id, updated_at = :updated_at WHERE id = :old_id", - ) - .run({ ":new_id": newId, ":updated_at": updatedAt, ":old_id": oldId }); -} -export function markMemoryUnitProcessed( - unitKey: string, - activityFile: string | null, - processedAt: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT OR IGNORE INTO memory_processed_units (unit_key, activity_file, processed_at) - VALUES (:key, :file, :at)`) - .run({ ":key": unitKey, ":file": activityFile, ":at": processedAt }); -} -export function decayMemoriesBefore(cutoffTs: string, now: string): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`UPDATE memories - SET confidence = MAX(0.1, confidence - 0.1), updated_at = :now - WHERE superseded_by IS NULL AND updated_at < :cutoff AND confidence > 0.1`) - .run({ ":now": now, ":cutoff": cutoffTs }); -} -/** - * Supersede memories that have exceeded their TTL. - * - * Purpose: prevent stale memories from silently poisoning future sessions. - * Mirrors Copilot Memory's 28-day TTL model — memories that were never - * accessed expire sooner; memories actively used get a longer lease. - * - * Rules: - * - Never accessed (hit_count = 0) + older than unstartedTtlDays → expire - * - Any memory older than maxTtlDays → expire regardless of hit_count - * - * Consumer: called at autonomous mode startup from auto-start.js. - * Returns the number of memories superseded. - */ -export function expireStaleMemories( - unstartedTtlDays = 28, - maxTtlDays = 90, -): number { - if (!currentDb) return 0; - const now = new Date().toISOString(); - const cutoffUnstarted = new Date( - Date.now() - unstartedTtlDays * 86_400_000, - ).toISOString(); - const cutoffMax = new Date( - Date.now() - maxTtlDays * 86_400_000, - ).toISOString(); - const result = currentDb - .prepare(`UPDATE memories SET superseded_by = 'ttl-expired', updated_at = :now - WHERE superseded_by IS NULL - AND ( - (hit_count = 0 AND updated_at < :cutoff_unstarted) - OR updated_at < :cutoff_max - )`) - .run({ - ":now": now, - ":cutoff_unstarted": cutoffUnstarted, - ":cutoff_max": cutoffMax, - }); - return result.changes ?? 0; -} -export function supersedeLowestRankedMemories( - limit: number, - now: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`UPDATE memories SET superseded_by = 'CAP_EXCEEDED', updated_at = :now - WHERE id IN ( - SELECT id FROM memories - WHERE superseded_by IS NULL - ORDER BY (confidence * (1.0 + hit_count * 0.1)) ASC - LIMIT :limit - )`) - .run({ ":now": now, ":limit": limit }); -} -// ─── Memory Sources ────────────────────────────────────────────────────────── -export function insertMemorySourceRow(args: Record): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT OR IGNORE INTO memory_sources (id, kind, uri, title, content, content_hash, imported_at, scope, tags) - VALUES (:id, :kind, :uri, :title, :content, :content_hash, :imported_at, :scope, :tags)`) - .run({ - ":id": args.id, - ":kind": args.kind, - ":uri": args.uri, - ":title": args.title, - ":content": args.content, - ":content_hash": args.contentHash, - ":imported_at": args.importedAt, - ":scope": args.scope ?? "project", - ":tags": JSON.stringify(args.tags ?? []), - }); -} -export function deleteMemorySourceRow(id: string): boolean { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const res = currentDb - .prepare("DELETE FROM memory_sources WHERE id = :id") - .run({ ":id": id }); - return (res?.changes ?? 0) > 0; -} -// ─── Judgments ─────────────────────────────────────────────────────────────── -export function insertJudgment(entry: Record): void { - if (!currentDb) return; - try { - currentDb - .prepare(`INSERT INTO judgments (unit_id, decision, alternatives_json, reasoning, confidence, ts) - VALUES (:unit_id, :decision, :alternatives_json, :reasoning, :confidence, :ts)`) - .run({ - ":unit_id": entry.unitId ?? "", - ":decision": entry.decision ?? "", - ":alternatives_json": JSON.stringify(entry.alternatives ?? []), - ":reasoning": entry.reasoning ?? "", - ":confidence": entry.confidence ?? "medium", - ":ts": entry.ts ?? new Date().toISOString(), - }); - } catch { - // Judgment logging is best-effort - } -} -export function getJudgmentsForUnit( - unitIdPrefix: string, - limit = 1000, -): DbRow[] { - if (!currentDb) return []; - try { - const rows = currentDb - .prepare( - `SELECT id, unit_id AS unitId, decision, alternatives_json AS alternativesJson, reasoning, confidence, ts - FROM judgments - WHERE unit_id LIKE :prefix - ORDER BY ts DESC - LIMIT :limit`, - ) - .all({ - ":prefix": `${unitIdPrefix}%`, - ":limit": limit, - }); - return rows.map((r) => ({ - id: r.id, - unitId: r.unitId, - decision: r.decision, - alternatives: parseJsonObject(r.alternativesJson, []), - reasoning: r.reasoning, - confidence: r.confidence, - ts: r.ts, - })); - } catch { - return []; - } -} -// ─── Retrieval Evidence ───────────────────────────────────────────────────── - -/** - * Record a retrieval lookup with source provenance. - * Purpose: let SF compare live code, semantic, docs, and web context by the same - * freshness and scope contract before planning or implementation trusts it. - * Consumer: Sift/codebase search tools and future Context7/web retrieval bridges. - */ -export function insertRetrievalEvidence(args: Record): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const now = args.recordedAt ?? new Date().toISOString(); - currentDb - .prepare(`INSERT INTO retrieval_evidence ( - backend, source_kind, query, strategy, scope, project_root, - git_head, git_branch, worktree_dirty, freshness, status, - hit_count, elapsed_ms, cache_path, error, result_json, recorded_at - ) VALUES ( - :backend, :source_kind, :query, :strategy, :scope, :project_root, - :git_head, :git_branch, :worktree_dirty, :freshness, :status, - :hit_count, :elapsed_ms, :cache_path, :error, :result_json, :recorded_at - )`) - .run({ - ":backend": args.backend, - ":source_kind": args.sourceKind ?? "code", - ":query": args.query ?? "", - ":strategy": args.strategy ?? "", - ":scope": args.scope ?? "", - ":project_root": args.projectRoot ?? "", - ":git_head": args.gitHead ?? null, - ":git_branch": args.gitBranch ?? null, - ":worktree_dirty": intBool(args.worktreeDirty), - ":freshness": args.freshness ?? "unknown", - ":status": args.status ?? "ok", - ":hit_count": args.hitCount ?? 0, - ":elapsed_ms": args.elapsedMs ?? 0, - ":cache_path": args.cachePath ?? null, - ":error": args.error ?? null, - ":result_json": JSON.stringify(args.result ?? {}), - ":recorded_at": now, - }); -} - -/** - * Return recent retrieval evidence rows. - * Purpose: support audits that need to distinguish live source evidence from - * stale indexed or prose-only context. - * Consumer: inspect/doctor tooling and tests for retrieval provenance. - */ -export function getRetrievalEvidence(limit = 100): DbRow[] { - if (!currentDb) return []; - const rows = currentDb - .prepare(`SELECT - id, backend, source_kind AS sourceKind, query, strategy, scope, - project_root AS projectRoot, git_head AS gitHead, - git_branch AS gitBranch, worktree_dirty AS worktreeDirty, - freshness, status, hit_count AS hitCount, elapsed_ms AS elapsedMs, - cache_path AS cachePath, error, result_json AS resultJson, recorded_at AS recordedAt - FROM retrieval_evidence - ORDER BY recorded_at DESC, id DESC - LIMIT :limit`) - .all({ ":limit": limit }); - return rows.map((row) => ({ - ...row, - worktreeDirty: row.worktreeDirty === 1, - result: parseJsonObject(row.resultJson, {}), - })); -} -// ─── Memory Embeddings ─────────────────────────────────────────────────────── -export function upsertMemoryEmbedding(args: Record): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT INTO memory_embeddings (memory_id, model, dim, vector, updated_at) - VALUES (:memory_id, :model, :dim, :vector, :updated_at) - ON CONFLICT(memory_id) DO UPDATE SET - model = excluded.model, - dim = excluded.dim, - vector = excluded.vector, - updated_at = excluded.updated_at`) - .run({ - ":memory_id": args.memoryId, - ":model": args.model, - ":dim": args.dim, - ":vector": args.vector, - ":updated_at": args.updatedAt, - }); -} -export function deleteMemoryEmbedding(memoryId: string): boolean { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const res = currentDb - .prepare("DELETE FROM memory_embeddings WHERE memory_id = :id") - .run({ ":id": memoryId }); - return (res?.changes ?? 0) > 0; -} -// ─── Tier 1.3: Spec/Runtime/Evidence Schema ────────────────────────────────── -// Functions for managing evidence in the new spec schema (v32+) - -/** - * Record evidence for a milestone. Appends to milestone_evidence table. - * Purpose: Create audit trail of decisions, verifications, and incidents. - * Consumer: complete-milestone, reassess-milestone, and other tools. - */ -export function insertMilestoneEvidence( - milestoneId, - evidenceType, - content, - phaseName, - recordedBy, -) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT INTO milestone_evidence (milestone_id, evidence_type, content, recorded_at, phase_name, recorded_by) - VALUES (?, ?, ?, ?, ?, ?)`) - .run( - milestoneId, - evidenceType, - content, - new Date().toISOString(), - phaseName || "", - recordedBy || "", - ); -} - -/** - * Record evidence for a slice. Appends to slice_evidence table. - * Purpose: Create audit trail of slice decisions, verifications, and incidents. - * Consumer: complete-slice, execute-slice, and other tools. - */ -export function insertSliceEvidence( - milestoneId, - sliceId, - evidenceType, - content, - phaseName, - recordedBy, -) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT INTO slice_evidence (milestone_id, slice_id, evidence_type, content, recorded_at, phase_name, recorded_by) - VALUES (?, ?, ?, ?, ?, ?, ?)`) - .run( - milestoneId, - sliceId, - evidenceType, - content, - new Date().toISOString(), - phaseName || "", - recordedBy || "", - ); -} - -/** - * Record evidence for a task. Appends to task_evidence table. - * Purpose: Create audit trail of task decisions, verifications, and incidents. - * Consumer: complete-task, execute-task, and other tools. - */ -export function insertTaskEvidence( - milestoneId, - sliceId, - taskId, - evidenceType, - content, - phaseName, - recordedBy, -) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare(`INSERT INTO task_evidence (milestone_id, slice_id, task_id, evidence_type, content, recorded_at, phase_name, recorded_by) - VALUES (?, ?, ?, ?, ?, ?, ?, ?)`) - .run( - milestoneId, - sliceId, - taskId, - evidenceType, - content, - new Date().toISOString(), - phaseName || "", - recordedBy || "", - ); -} - -/** - * Query milestone audit trail (spec + evidence). Returns rows with spec intent and evidence history. - * Purpose: Support data archaeology and decision-tree reconstruction. - * Consumer: forensics tools, doctor checks, audit/compliance queries. - */ -export function getMilestoneAuditTrail(milestoneId: string): DbRow[] { - if (!currentDb) return []; - return currentDb - .prepare(` - SELECT - r.id, r.title, r.status, - s.vision, s.spec_version, - e.evidence_type, e.content, e.recorded_at, e.phase_name, e.recorded_by - FROM milestones r - LEFT JOIN milestone_specs s ON r.id = s.id - LEFT JOIN milestone_evidence e ON r.id = e.milestone_id - WHERE r.id = ? - ORDER BY e.recorded_at ASC - `) - .all(milestoneId); -} - -/** - * Query slice audit trail (spec + evidence). - * Purpose: Support data archaeology and decision-tree reconstruction. - * Consumer: forensics tools, doctor checks, audit/compliance queries. - */ -export function getSliceAuditTrail( - milestoneId: string, - sliceId: string, -): DbRow[] { - if (!currentDb) return []; - return currentDb - .prepare(` - SELECT - r.id, r.title, r.status, - s.goal, s.spec_version, - e.evidence_type, e.content, e.recorded_at, e.phase_name, e.recorded_by - FROM slices r - LEFT JOIN slice_specs s ON r.milestone_id = s.milestone_id AND r.id = s.slice_id - LEFT JOIN slice_evidence e ON r.milestone_id = e.milestone_id AND r.id = e.slice_id - WHERE r.milestone_id = ? AND r.id = ? - ORDER BY e.recorded_at ASC - `) - .all(milestoneId, sliceId); -} - -/** - * Query task audit trail (spec + evidence). - * Purpose: Support data archaeology and decision-tree reconstruction. - * Consumer: forensics tools, doctor checks, audit/compliance queries. - */ -export function getTaskAuditTrail( - milestoneId: string, - sliceId: string, - taskId: string, -): DbRow[] { - if (!currentDb) return []; - return currentDb - .prepare(` - SELECT - r.id, r.title, r.status, - s.verify, s.spec_version, - e.evidence_type, e.content, e.recorded_at, e.phase_name, e.recorded_by - FROM tasks r - LEFT JOIN task_specs s ON r.milestone_id = s.milestone_id AND r.slice_id = s.slice_id AND r.id = s.task_id - LEFT JOIN task_evidence e ON r.milestone_id = e.milestone_id AND r.slice_id = e.slice_id AND r.id = e.task_id - WHERE r.milestone_id = ? AND r.slice_id = ? AND r.id = ? - ORDER BY e.recorded_at ASC - `) - .all(milestoneId, sliceId, taskId); -} - -/** - * Get milestone spec only (immutable intent, no runtime state). - * Purpose: Retrieve spec intent for re-planning or spec validation. - * Consumer: plan-milestone and spec validation tools. - */ -export function getMilestoneSpec(milestoneId: string): DbRow | undefined { - if (!currentDb) return null; - return currentDb - .prepare("SELECT * FROM milestone_specs WHERE id = ?") - .get(milestoneId); -} - -/** - * Get slice spec only (immutable intent, no runtime state). - * Purpose: Retrieve spec intent for re-planning or spec validation. - * Consumer: plan-slice and spec validation tools. - */ -export function getSliceSpec( - milestoneId: string, - sliceId: string, -): DbRow | undefined { - if (!currentDb) return null; - return currentDb - .prepare( - "SELECT * FROM slice_specs WHERE milestone_id = ? AND slice_id = ?", - ) - .get(milestoneId, sliceId); -} - -/** - * Get task spec only (immutable intent, no runtime state). - * Purpose: Retrieve spec intent for re-planning or spec validation. - * Consumer: plan-task and spec validation tools. - */ -export function getTaskSpec( - milestoneId: string, - sliceId: string, - taskId: string, -): DbRow | undefined { - if (!currentDb) return null; - return currentDb - .prepare( - "SELECT * FROM task_specs WHERE milestone_id = ? AND slice_id = ? AND task_id = ?", - ) - .get(milestoneId, sliceId, taskId); -} - -// ─── Validation Runs ─────────────────────────────────────────────────────────── - -/** - * Start a validation run for a milestone, slice, or task. - * Mirrors droid's validation-state.json creation from validation-contract.md. - * - * Purpose: Track explicit validation contracts and their execution state in the - * DB so any surface (CLI, TUI, headless) can answer "what are we validating and - * where are we" with a single query. - * - * Consumer: autonomous-solver, plan-slice, quality gates, eval runners. - */ -export function startValidationRun({ - milestoneId, - sliceId, - taskId, - contract, -}: { - milestoneId: string; - sliceId: string; - taskId: string; - contract: string; -}): string { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const runId = crypto.randomUUID(); - currentDb - .prepare( - `INSERT INTO validation_runs - (run_id, milestone_id, slice_id, task_id, contract, status, started_at, created_at) - VALUES (:run_id, :milestone_id, :slice_id, :task_id, :contract, 'running', datetime('now'), datetime('now'))`, - ) - .run({ - ":run_id": runId, - ":milestone_id": milestoneId, - ":slice_id": sliceId ?? null, - ":task_id": taskId ?? null, - ":contract": contract ?? "", - }); - return runId; -} - -/** - * Complete a validation run with verdict and findings. - * Mirrors droid's update of validation-state.json after run finishes. - * - * Consumer: autonomous-solver after eval execution, quality gate evaluators. - */ -export function completeValidationRun({ - runId, - verdict, - rationale = "", - findings = "", -}) { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const status = - verdict === "pass" ? "pass" : verdict === "fail" ? "fail" : "error"; - const result = currentDb - .prepare( - `UPDATE validation_runs SET - status = :status, - verdict = :verdict, - rationale = :rationale, - findings = :findings, - completed_at = datetime('now') - WHERE run_id = :run_id AND status = 'running'`, - ) - .run({ - ":run_id": runId, - ":status": status, - ":verdict": verdict ?? "", - ":rationale": rationale ?? "", - ":findings": findings ?? "", - }); - if (result.changes === 0) { - throw new SFError( - SF_STALE_STATE, - `sf-db: completeValidationRun: no running validation run found for run_id=${runId}`, - ); - } -} - -/** - * Get the latest validation state for a scope (milestone, slice, or task). - * Returns the most recent run — mirrors droid's validation-state.json read. - * - * Consumer: any surface that needs "are we passing?" for a milestone/slice/task. - */ -export function getLatestValidationState( - milestoneId: string, - sliceId: string, - taskId: string, -): DbRow | undefined { - if (!currentDb) return null; - const rows = currentDb - .prepare( - `SELECT * FROM validation_runs - WHERE milestone_id = :milestone_id - AND slice_id IS :slice_id - AND task_id IS :task_id - ORDER BY created_at DESC, run_id DESC - LIMIT 1`, - ) - .all({ - ":milestone_id": milestoneId, - ":slice_id": sliceId ?? null, - ":task_id": taskId ?? null, - }); - return rows[0] ?? null; -} - -/** - * Get validation run history for a scope. - * Mirrors droid's historical validation-state.json files. - * - * Consumer: forensics, eval review, audit trail queries. - */ -export function getValidationHistory( - milestoneId: string, - sliceId: string, - taskId: string, - limit = 20, -): DbRow[] { - if (!currentDb) return []; - return currentDb - .prepare( - `SELECT * FROM validation_runs - WHERE milestone_id = :milestone_id - AND slice_id IS :slice_id - AND task_id IS :task_id - ORDER BY created_at DESC, run_id DESC - LIMIT :limit`, - ) - .all({ - ":milestone_id": milestoneId, - ":slice_id": sliceId ?? null, - ":task_id": taskId ?? null, - ":limit": limit, - }); -} - -// ─── Triage DB CRUD ─────────────────────────────────────────────────────────── - -/** - * Insert a triage run record. - * Purpose: replace .sf/triage/evals|inbox|skills JSONL files with queryable DB rows. - * Consumer: commands-todo.js triageTodoDump after successful triage. - */ -export function insertTriageRun( - id: string, - sourceFile: string | null, - createdAt: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `INSERT INTO triage_runs (id, source_file, status, created_at) - VALUES (:id, :source_file, 'complete', :created_at) - ON CONFLICT(id) DO NOTHING`, - ) - .run({ - ":id": id, - ":source_file": sourceFile ?? null, - ":created_at": createdAt ?? new Date().toISOString(), - }); -} - -/** - * Insert a triage eval candidate row. - * Purpose: store eval candidates in DB instead of .evals.jsonl. - * Consumer: commands-todo.js triageTodoDump. - */ -export function insertTriageEval( - id: string, - runId: string, - data: Record, - createdAt: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `INSERT INTO triage_evals (id, run_id, task_input, expected_behavior, evidence, failure_mode, status, created_at) - VALUES (:id, :run_id, :task_input, :expected_behavior, :evidence, :failure_mode, 'pending', :created_at) - ON CONFLICT(id) DO NOTHING`, - ) - .run({ - ":id": id, - ":run_id": runId, - ":task_input": data.task_input ?? "", - ":expected_behavior": data.expected_behavior ?? "", - ":evidence": data.evidence ?? null, - ":failure_mode": data.failure_mode ?? null, - ":created_at": createdAt ?? new Date().toISOString(), - }); -} - -/** - * Insert a normalized triage inbox item row. - * Purpose: store triage inbox items (eval_candidate, implementation_task, etc.) in DB. - * Consumer: commands-todo.js triageTodoDump. - */ -export function insertTriageItem( - id: string, - runId: string, - kind: string, - content: string, - evidence: string | null, - createdAt: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `INSERT INTO triage_items (id, run_id, kind, content, evidence, status, created_at) - VALUES (:id, :run_id, :kind, :content, :evidence, 'pending', :created_at) - ON CONFLICT(id) DO NOTHING`, - ) - .run({ - ":id": id, - ":run_id": runId, - ":kind": kind, - ":content": content, - ":evidence": evidence ?? null, - ":created_at": createdAt ?? new Date().toISOString(), - }); -} - -/** - * Insert a triage skill proposal row. - * Purpose: store skill proposals in DB instead of .skills.jsonl. - * Consumer: commands-todo.js triageTodoDump. - */ -export function insertTriageSkill( - id: string, - runId: string, - data: Record, - createdAt: string, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `INSERT INTO triage_skills (id, run_id, name, description, trigger, raw_json, status, created_at) - VALUES (:id, :run_id, :name, :description, :trigger, :raw_json, 'pending', :created_at) - ON CONFLICT(id) DO NOTHING`, - ) - .run({ - ":id": id, - ":run_id": runId, - ":name": data.title ?? data.name ?? null, - ":description": data.description ?? null, - ":trigger": data.trigger_pattern ?? data.trigger ?? null, - ":raw_json": JSON.stringify(data), - ":created_at": createdAt ?? new Date().toISOString(), - }); -} - -// ─── Runtime Counters ───────────────────────────────────────────────────────── - -/** - * Get a runtime counter value by key. Returns 0 if the key does not exist. - * Purpose: replace per-key JSON files in .sf/runtime/ with queryable DB rows. - * Consumer: auto-dispatch.js rewrite-count and uat-count logic. - */ -export function getRuntimeCounter(key: string): number { - if (!currentDb) return 0; - const row = currentDb - .prepare("SELECT value FROM runtime_counters WHERE key = ?") - .get(key); - return typeof row?.value === "number" ? row.value : 0; -} - -/** - * Set a runtime counter to an explicit value. - * Purpose: replace JSON file writes for named counters. - * Consumer: auto-dispatch.js setRewriteCount. - */ -export function setRuntimeCounter(key: string, value: number): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `INSERT INTO runtime_counters (key, value, updated_at) - VALUES (:key, :value, :updated_at) - ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`, - ) - .run({ - ":key": key, - ":value": value, - ":updated_at": new Date().toISOString(), - }); -} - -/** - * Atomically increment a runtime counter and return the new value. - * Purpose: replace read-modify-write JSON file pattern for counters. - * Consumer: auto-dispatch.js incrementUatCount. - */ -export function incrementRuntimeCounter(key: string): number { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - currentDb - .prepare( - `INSERT INTO runtime_counters (key, value, updated_at) - VALUES (:key, 1, :updated_at) - ON CONFLICT(key) DO UPDATE SET value = value + 1, updated_at = excluded.updated_at`, - ) - .run({ ":key": key, ":updated_at": new Date().toISOString() }); - const row = currentDb - .prepare("SELECT value FROM runtime_counters WHERE key = ?") - .get(key); - return typeof row?.value === "number" ? row.value : 1; -} - -// ─── Validation Attention Markers ───────────────────────────────────────────── - -/** - * Get a validation attention marker for a milestone, or null if absent. - * Purpose: replace .sf/runtime/validation-attention/{mid}.json reads. - * Consumer: auto-dispatch.js hasActiveValidationAttentionMarker. - */ -export function getValidationAttentionMarker( - milestoneId: string, -): DbRow | undefined { - if (!currentDb) return null; - return ( - currentDb - .prepare( - "SELECT * FROM validation_attention_markers WHERE milestone_id = ?", - ) - .get(milestoneId) ?? null - ); -} - -/** - * Upsert a validation attention marker for a milestone. - * Purpose: replace .sf/runtime/validation-attention/{mid}.json writes. - * Consumer: auto-dispatch.js writeValidationAttentionMarker. - */ -export function upsertValidationAttentionMarker( - milestoneId: string, - marker: Record, -): void { - if (!currentDb) throw new SFError(SF_STALE_STATE, "sf-db: No database open"); - const now = new Date().toISOString(); - currentDb - .prepare( - `INSERT INTO validation_attention_markers - (milestone_id, created_at, source, remediation_round, revalidation_round, revalidation_requested_at) - VALUES (:milestone_id, :created_at, :source, :remediation_round, :revalidation_round, :revalidation_requested_at) - ON CONFLICT(milestone_id) DO UPDATE SET - source = excluded.source, - remediation_round = excluded.remediation_round, - revalidation_round = excluded.revalidation_round, - revalidation_requested_at = excluded.revalidation_requested_at`, - ) - .run({ - ":milestone_id": milestoneId, - ":created_at": marker.createdAt ?? now, - ":source": marker.source ?? null, - ":remediation_round": marker.remediationRound ?? null, - ":revalidation_round": marker.revalidationRound ?? null, - ":revalidation_requested_at": marker.revalidationRequestedAt ?? null, - }); -} - -// ─── Routing History ────────────────────────────────────────────────────────── - -/** - * Upsert a routing outcome for a pattern/tier pair, incrementing success or fail count. - * Purpose: persist adaptive tier learning to DB so routing decisions survive restarts. - * Consumer: routing-history.js recordOutcome. - */ -export function upsertRoutingOutcome( - db: DbAdapter, - pattern: string, - tier: string, - success: boolean, -): void { - db.prepare( - `INSERT INTO routing_history (pattern, tier, success_count, fail_count, updated_at) - VALUES (:pattern, :tier, :success_count, :fail_count, :updated_at) - ON CONFLICT(pattern, tier) DO UPDATE SET - success_count = success_count + excluded.success_count, - fail_count = fail_count + excluded.fail_count, - updated_at = excluded.updated_at`, - ).run({ - ":pattern": pattern, - ":tier": tier, - ":success_count": success ? 1 : 0, - ":fail_count": success ? 0 : 1, - ":updated_at": new Date().toISOString(), - }); -} - -/** - * Get all routing history rows. - * Purpose: load full routing state into memory on init. - * Consumer: routing-history.js initRoutingHistory. - */ -export function getAllRoutingHistory(db: DbAdapter): DbRow[] { - return db - .prepare( - "SELECT pattern, tier, success_count, fail_count, updated_at FROM routing_history", - ) - .all(); -} - -/** - * Get routing history rows for a specific pattern. - * Purpose: targeted pattern lookup for adaptive tier queries. - * Consumer: routing-history.js getRoutingHistoryForPattern. - */ -export function getRoutingHistoryForPattern( - db: DbAdapter, - pattern: string, -): DbRow[] { - return db - .prepare( - "SELECT tier, success_count, fail_count FROM routing_history WHERE pattern = ?", - ) - .all(pattern); -} - -/** - * Insert a routing feedback signal into the audit table. - * Purpose: persist user feedback for later analysis and weighted outcome application. - * Consumer: routing-history.js recordFeedback. - */ -export function insertRoutingFeedback( - db: DbAdapter, - pattern: string, - tier: string, - feedback: string, -): void { - db.prepare( - `INSERT INTO routing_feedback (pattern, tier, feedback, recorded_at) - VALUES (:pattern, :tier, :feedback, :recorded_at)`, - ).run({ - ":pattern": pattern, - ":tier": tier, - ":feedback": feedback, - ":recorded_at": new Date().toISOString(), - }); -} - -/** - * Clear all routing history and feedback rows. - * Purpose: full reset of adaptive learning state on user request. - * Consumer: routing-history.js clearRoutingHistory. - */ -export function clearRoutingHistory(db: DbAdapter): void { - db.prepare("DELETE FROM routing_history").run(); - db.prepare("DELETE FROM routing_feedback").run(); -} - -// ─── Unit Metrics CRUD ──────────────────────────────────────────────────────── - -function rowToUnitMetrics( - row: Record, -): Record { - const unit = { - type: row["type"], - id: row["id"], - model: row["model"], - startedAt: row["started_at"], - finishedAt: row["finished_at"], - tokens: { - input: row["tokens_input"], - output: row["tokens_output"], - cacheRead: row["tokens_cache_read"], - cacheWrite: row["tokens_cache_write"], - total: row["tokens_total"], - }, - cost: row["cost"], - toolCalls: row["tool_calls"], - assistantMessages: row["assistant_messages"], - userMessages: row["user_messages"], - apiRequests: row["api_requests"], - }; - if (row["auto_session_key"] != null) - unit.autoSessionKey = row["auto_session_key"]; - if (row["tier"] != null) unit.tier = row["tier"]; - if (row["model_downgraded"] != null) - unit.modelDowngraded = row["model_downgraded"] === 1; - if (row["context_window_tokens"] != null) - unit.contextWindowTokens = row["context_window_tokens"]; - if (row["truncation_sections"] != null) - unit.truncationSections = row["truncation_sections"]; - if (row["continue_here_fired"] != null) - unit.continueHereFired = row["continue_here_fired"] === 1; - if (row["prompt_char_count"] != null) - unit.promptCharCount = row["prompt_char_count"]; - if (row["baseline_char_count"] != null) - unit.baselineCharCount = row["baseline_char_count"]; - if (row["cache_hit_rate"] != null) unit.cacheHitRate = row["cache_hit_rate"]; - if (row["skills"] != null) unit.skills = JSON.parse(row["skills"]); - return unit; -} - -/** - * Upsert a single unit metrics record into the DB. - * - * Purpose: persist per-unit token/cost telemetry from autonomous mode so - * history, cost, and export commands can read from the canonical DB store - * instead of a fragile JSON file on disk. - * - * Consumer: metrics.js saveLedger (called after every unit snapshot). - */ -export function upsertUnitMetrics( - db: DbAdapter, - unit: Record, -): void { - db.prepare( - `INSERT OR REPLACE INTO unit_metrics ( - type, id, started_at, finished_at, model, auto_session_key, - tokens_input, tokens_output, tokens_cache_read, tokens_cache_write, tokens_total, - cost, tool_calls, assistant_messages, user_messages, api_requests, - tier, model_downgraded, context_window_tokens, truncation_sections, - continue_here_fired, prompt_char_count, baseline_char_count, cache_hit_rate, skills - ) VALUES ( - :type, :id, :started_at, :finished_at, :model, :auto_session_key, - :tokens_input, :tokens_output, :tokens_cache_read, :tokens_cache_write, :tokens_total, - :cost, :tool_calls, :assistant_messages, :user_messages, :api_requests, - :tier, :model_downgraded, :context_window_tokens, :truncation_sections, - :continue_here_fired, :prompt_char_count, :baseline_char_count, :cache_hit_rate, :skills - )`, - ).run({ - ":type": unit.type, - ":id": unit.id, - ":started_at": unit.startedAt, - ":finished_at": unit.finishedAt, - ":model": unit.model, - ":auto_session_key": unit.autoSessionKey ?? null, - ":tokens_input": unit.tokens.input, - ":tokens_output": unit.tokens.output, - ":tokens_cache_read": unit.tokens.cacheRead, - ":tokens_cache_write": unit.tokens.cacheWrite, - ":tokens_total": unit.tokens.total, - ":cost": unit.cost, - ":tool_calls": unit.toolCalls, - ":assistant_messages": unit.assistantMessages, - ":user_messages": unit.userMessages, - ":api_requests": unit.apiRequests ?? unit.assistantMessages, - ":tier": unit.tier ?? null, - ":model_downgraded": - unit.modelDowngraded != null ? (unit.modelDowngraded ? 1 : 0) : null, - ":context_window_tokens": unit.contextWindowTokens ?? null, - ":truncation_sections": unit.truncationSections ?? null, - ":continue_here_fired": - unit.continueHereFired != null ? (unit.continueHereFired ? 1 : 0) : null, - ":prompt_char_count": unit.promptCharCount ?? null, - ":baseline_char_count": unit.baselineCharCount ?? null, - ":cache_hit_rate": unit.cacheHitRate ?? null, - ":skills": unit.skills != null ? JSON.stringify(unit.skills) : null, - }); -} - -/** - * Load all unit metrics ordered by started_at ASC (oldest first). - * - * Purpose: reconstruct the in-memory ledger from the canonical DB store - * on session init or on demand from history/cost commands. - * - * Consumer: metrics.js loadLedgerFromDisk and loadLedger. - */ -export function getAllUnitMetrics(db: DbAdapter): DbRow[] { - return db - .prepare("SELECT * FROM unit_metrics ORDER BY started_at ASC") - .all() - .map(rowToUnitMetrics); -} - -/** - * Delete oldest unit_metrics rows keeping only the N most recent by finished_at. - * - * Purpose: enforce a max-ledger-size cap so the DB doesn't bloat over long - * autonomous runs. Called by the doctor when the ledger exceeds its threshold. - * - * Consumer: metrics.js pruneMetricsLedger. - */ -export function pruneUnitMetrics(db: DbAdapter, keepCount: number): void { - db.prepare( - `DELETE FROM unit_metrics WHERE rowid NOT IN ( - SELECT rowid FROM unit_metrics ORDER BY finished_at DESC LIMIT :keepCount - )`, - ).run({ ":keepCount": keepCount }); -} - -/** - * Get the project start timestamp stored in project_metrics_meta. - * - * Purpose: surface when the autonomous run started for elapsed-time display. - * - * Consumer: metrics.js loadLedger and loadLedgerFromDisk. - */ -export function getProjectStartedAt(db: DbAdapter): string | null { - const row = db - .prepare( - "SELECT value FROM project_metrics_meta WHERE key = 'projectStartedAt'", - ) - .get(); - if (!row) return null; - const ts = Number(row["value"]); - return Number.isFinite(ts) ? ts : null; -} - -/** - * Persist the project start timestamp in project_metrics_meta. - * - * Purpose: survive process restarts so the dashboard shows wall-clock elapsed - * time for the full autonomous session, not just the current process lifetime. - * - * Consumer: metrics.js initMetrics (via loadLedger → defaultLedger path). - */ -export function setProjectStartedAt(db: DbAdapter, ts: string): void { - db.prepare( - `INSERT INTO project_metrics_meta (key, value) VALUES ('projectStartedAt', :value) - ON CONFLICT(key) DO UPDATE SET value = excluded.value`, - ).run({ ":value": String(ts) }); -} diff --git a/packages/pi-agent-core/src/db/task-frontmatter.ts b/packages/pi-agent-core/src/db/task-frontmatter.ts deleted file mode 100644 index a7e5f3161..000000000 --- a/packages/pi-agent-core/src/db/task-frontmatter.ts +++ /dev/null @@ -1,495 +0,0 @@ -/** - * Task Frontmatter - schema-backed task metadata - * - * Purpose: add structured fields to task records for risk assessment, - * mutation scope declaration, verification requirements, plan approval, and - * task lifecycle status while keeping scheduler status as a separate view field. - * - * Consumer: plan-v2 task creation, UOK gate runner, parallel orchestrator, - * sf-db row mapping, and task state machine. - */ - -export const RISK_LEVELS = [ - "none", - "low", - "medium", - "high", - "critical", -] as const; -export type RiskLevel = (typeof RISK_LEVELS)[number]; - -export const MUTATION_SCOPES = [ - "none", - "docs-only", - "config", - "test-only", - "isolated", - "bounded", - "cross-cutting", - "systemic", -] as const; -export type MutationScope = (typeof MUTATION_SCOPES)[number]; - -export const VERIFICATION_TYPES = [ - "none", - "self-check", - "review", - "test", - "integration", - "manual-qa", -] as const; -export type VerificationType = (typeof VERIFICATION_TYPES)[number]; - -export const PLAN_APPROVAL_STATES = [ - "not-required", - "pending", - "approved", - "rejected", - "auto-approved", -] as const; -export type PlanApprovalState = (typeof PLAN_APPROVAL_STATES)[number]; - -export const TASK_STATUSES = [ - "todo", - "running", - "verifying", - "reviewing", - "done", - "blocked", - "paused", - "failed", - "cancelled", - "retrying", -] as const; -export type TaskStatus = (typeof TASK_STATUSES)[number]; - -export const SCHEDULER_STATUSES = [ - "queued", - "due", - "claimed", - "dispatched", - "consumed", - "expired", -] as const; -export type SchedulerStatus = (typeof SCHEDULER_STATUSES)[number]; - -export interface TaskFrontmatter { - risk: RiskLevel; - mutationScope: MutationScope; - verification: VerificationType; - planApproval: PlanApprovalState; - taskStatus: TaskStatus; - schedulerStatus: SchedulerStatus; - estimatedEffort: number | null; - keyFiles: string[]; - dependencies: string[]; - blocksParallel: boolean; - requiresUserInput: boolean; - autoRetry: boolean; - maxRetries: number; -} - -const TASK_STATUS_ALIASES: Record = { - complete: "done", - completed: "done", - in_progress: "running", - "manual-attention": "reviewing", - manual_attention: "reviewing", - pending: "todo", - review: "reviewing", -}; - -const SCHEDULER_STATUS_ALIASES: Record = { - completed: "consumed", - done: "consumed", - pending: "queued", -}; - -export const DEFAULT_TASK_FRONTMATTER: TaskFrontmatter = { - risk: "low", - mutationScope: "isolated", - verification: "self-check", - planApproval: "not-required", - taskStatus: "todo", - schedulerStatus: "queued", - estimatedEffort: null, - keyFiles: [], - dependencies: [], - blocksParallel: false, - requiresUserInput: false, - autoRetry: true, - maxRetries: 2, -}; - -export function normalizeTaskStatus(value: unknown): string | null { - if (typeof value !== "string" || value.trim() === "") return "todo"; - const status = value.trim().toLowerCase(); - if ((TASK_STATUSES as readonly string[]).includes(status)) return status; - return TASK_STATUS_ALIASES[status] ?? null; -} - -export function normalizeSchedulerStatus(value: unknown): string | null { - if (typeof value !== "string" || value.trim() === "") return "queued"; - const status = value.trim().toLowerCase(); - if ((SCHEDULER_STATUSES as readonly string[]).includes(status)) return status; - return SCHEDULER_STATUS_ALIASES[status] ?? null; -} - -function normalizeArray(value: unknown): string[] { - if (Array.isArray(value)) return value.filter((v) => typeof v === "string"); - if (typeof value !== "string" || value.trim() === "") return []; - try { - const parsed = JSON.parse(value); - if (Array.isArray(parsed)) - return parsed.filter((v) => typeof v === "string"); - return []; - } catch { - return value - .split(",") - .map((v) => v.trim()) - .filter(Boolean); - } -} - -function normalizeBoolean(value: unknown): boolean { - if (value === true || value === 1) return true; - if (value === false || value === 0 || value == null) return false; - if (typeof value === "string") { - const normalized = value.trim().toLowerCase(); - if (["1", "true", "yes", "y"].includes(normalized)) return true; - if (["0", "false", "no", "n", ""].includes(normalized)) return false; - } - return Boolean(value); -} - -function validateChoice( - field: string, - value: unknown, - allowed: readonly string[], - normalized: Record, - errors: string[], -): void { - if (value === undefined || value === null || value === "") return; - if (typeof value === "string" && allowed.includes(value)) { - normalized[field] = value; - return; - } - errors.push( - `Invalid ${field} "${String(value)}". Must be one of: ${allowed.join(", ")}`, - ); -} - -export interface FrontmatterInput { - risk?: unknown; - mutationScope?: unknown; - verification?: unknown; - planApproval?: unknown; - taskStatus?: unknown; - schedulerStatus?: unknown; - estimatedEffort?: unknown; - keyFiles?: unknown; - dependencies?: unknown; - blocksParallel?: unknown; - requiresUserInput?: unknown; - autoRetry?: unknown; - maxRetries?: unknown; - [key: string]: unknown; -} - -export interface ValidationResult { - valid: boolean; - errors: string[]; - normalized: TaskFrontmatter; -} - -export function validateTaskFrontmatter( - frontmatter: FrontmatterInput = {}, -): ValidationResult { - const errors: string[] = []; - const normalized: Record = { - ...DEFAULT_TASK_FRONTMATTER, - keyFiles: [], - dependencies: [], - }; - - validateChoice("risk", frontmatter.risk, RISK_LEVELS, normalized, errors); - validateChoice( - "mutationScope", - frontmatter.mutationScope, - MUTATION_SCOPES, - normalized, - errors, - ); - validateChoice( - "verification", - frontmatter.verification, - VERIFICATION_TYPES, - normalized, - errors, - ); - validateChoice( - "planApproval", - frontmatter.planApproval, - PLAN_APPROVAL_STATES, - normalized, - errors, - ); - - if (frontmatter.taskStatus !== undefined) { - const status = normalizeTaskStatus(frontmatter.taskStatus); - if (status) { - normalized.taskStatus = status; - } else { - errors.push( - `Invalid taskStatus "${String(frontmatter.taskStatus)}". Must be one of: ${TASK_STATUSES.join(", ")}`, - ); - } - } - - if (frontmatter.schedulerStatus !== undefined) { - const status = normalizeSchedulerStatus(frontmatter.schedulerStatus); - if (status) { - normalized.schedulerStatus = status; - } else { - errors.push( - `Invalid schedulerStatus "${String(frontmatter.schedulerStatus)}". Must be one of: ${SCHEDULER_STATUSES.join(", ")}`, - ); - } - } - - if (frontmatter.estimatedEffort !== undefined) { - const effort = Number(frontmatter.estimatedEffort); - if (!Number.isNaN(effort) && effort >= 0) { - normalized.estimatedEffort = effort; - } else if (frontmatter.estimatedEffort !== null) { - errors.push( - `Invalid estimatedEffort "${String(frontmatter.estimatedEffort)}". Must be a non-negative number or null.`, - ); - } - } - - if (frontmatter.keyFiles !== undefined) { - normalized.keyFiles = normalizeArray(frontmatter.keyFiles); - } - if (frontmatter.dependencies !== undefined) { - normalized.dependencies = normalizeArray(frontmatter.dependencies); - } - - for (const field of ["blocksParallel", "requiresUserInput", "autoRetry"]) { - if (frontmatter[field] !== undefined) { - normalized[field] = normalizeBoolean(frontmatter[field]); - } - } - - if (frontmatter.maxRetries !== undefined) { - const retries = Number(frontmatter.maxRetries); - if (Number.isInteger(retries) && retries >= 0 && retries <= 10) { - normalized.maxRetries = retries; - } else { - errors.push( - `Invalid maxRetries "${String(frontmatter.maxRetries)}". Must be an integer 0-10.`, - ); - } - } - - return { - valid: errors.length === 0, - errors, - normalized: normalized as unknown as TaskFrontmatter, - }; -} - -export interface TaskRecord { - risk?: unknown; - mutation_scope?: unknown; - mutationScope?: unknown; - verification_type?: unknown; - verificationType?: unknown; - verification?: unknown; - plan_approval?: unknown; - planApproval?: unknown; - task_status?: unknown; - taskStatus?: unknown; - status?: unknown; - scheduler_status?: unknown; - schedulerStatus?: unknown; - estimated_effort?: unknown; - estimatedEffort?: unknown; - frontmatter_key_files?: unknown; - frontmatterKeyFiles?: unknown; - files?: unknown; - key_files?: unknown; - keyFiles?: unknown; - dependencies?: unknown; - depends_on?: unknown; - dependsOn?: unknown; - depends?: unknown; - blocks_parallel?: unknown; - blocksParallel?: unknown; - requires_user_input?: unknown; - requiresUserInput?: unknown; - auto_retry?: unknown; - autoRetry?: unknown; - max_retries?: unknown; - maxRetries?: unknown; - frontmatter?: TaskFrontmatter; - [key: string]: unknown; -} - -export function taskFrontmatterFromRecord( - task: TaskRecord = {}, - overrides: Partial = {}, -): ValidationResult { - const rawFrontmatter: FrontmatterInput = { - risk: task.risk, - mutationScope: task.mutation_scope ?? task.mutationScope, - verification: - task.verification_type ?? task.verificationType ?? task.verification, - planApproval: task.plan_approval ?? task.planApproval, - taskStatus: task.task_status ?? task.taskStatus ?? task.status, - schedulerStatus: task.scheduler_status ?? task.schedulerStatus, - estimatedEffort: task.estimated_effort ?? task.estimatedEffort, - keyFiles: - task.frontmatter_key_files ?? - task.frontmatterKeyFiles ?? - task.files ?? - task.key_files ?? - task.keyFiles ?? - [], - dependencies: - task.dependencies ?? - task.depends_on ?? - task.dependsOn ?? - task.depends ?? - [], - blocksParallel: task.blocks_parallel ?? task.blocksParallel, - requiresUserInput: task.requires_user_input ?? task.requiresUserInput, - autoRetry: task.auto_retry ?? task.autoRetry, - maxRetries: task.max_retries ?? task.maxRetries, - ...overrides, - }; - - return validateTaskFrontmatter(rawFrontmatter); -} - -export interface BuiltTaskRecord extends TaskRecord { - frontmatter: TaskFrontmatter; - frontmatterValid: boolean; - frontmatterErrors: string[]; -} - -export function buildTaskRecord( - task: TaskRecord = {}, - overrides: Partial = {}, -): BuiltTaskRecord { - const validation = taskFrontmatterFromRecord(task, overrides); - return { - ...task, - frontmatter: validation.normalized, - frontmatterValid: validation.valid, - frontmatterErrors: validation.errors, - }; -} - -export function withTaskFrontmatter( - task: TaskRecord = {}, - overrides: Partial = {}, -): BuiltTaskRecord { - return buildTaskRecord(task, overrides); -} - -export interface ParallelCheckResult { - canParallel: boolean; - reason?: string; -} - -export function canRunInParallel( - taskA: TaskRecord, - taskB: TaskRecord, -): ParallelCheckResult { - if ( - !taskA || - !taskB || - typeof taskA !== "object" || - typeof taskB !== "object" - ) { - return { canParallel: false, reason: "Invalid task input" }; - } - const fmA = taskA.frontmatter ?? buildTaskRecord(taskA).frontmatter; - const fmB = taskB.frontmatter ?? buildTaskRecord(taskB).frontmatter; - - if (fmA.blocksParallel || fmB.blocksParallel) { - return { - canParallel: false, - reason: "One or both tasks block parallel execution", - }; - } - - if (fmA.mutationScope === "systemic" || fmB.mutationScope === "systemic") { - return { - canParallel: false, - reason: "One or both tasks have systemic mutation scope", - }; - } - - const highRisk = ["high", "critical"]; - if (highRisk.includes(fmA.risk) && highRisk.includes(fmB.risk)) { - return { canParallel: false, reason: "Both tasks are high/critical risk" }; - } - - if (fmA.keyFiles.length > 0 && fmB.keyFiles.length > 0) { - const filesB = new Set(fmB.keyFiles); - const overlap = fmA.keyFiles.filter((file) => filesB.has(file)); - if (overlap.length > 0) { - return { - canParallel: false, - reason: `File overlap: ${overlap.join(", ")}`, - }; - } - } - - return { canParallel: true }; -} - -export function canTasksRunInParallel( - taskA: TaskRecord, - taskB: TaskRecord, -): ParallelCheckResult { - return canRunInParallel(taskA, taskB); -} - -export function computeTaskPriority(task: TaskRecord): number { - const fm = task.frontmatter ?? buildTaskRecord(task).frontmatter; - let score = 50; - - const riskScores: Record = { - none: 0, - low: 5, - medium: 15, - high: 30, - critical: 50, - }; - score += riskScores[fm.risk] ?? 0; - - const scopeScores: Record = { - none: 0, - "docs-only": 2, - config: 5, - "test-only": 3, - isolated: 5, - bounded: 10, - "cross-cutting": 25, - systemic: 40, - }; - score += scopeScores[fm.mutationScope] ?? 0; - - if (fm.blocksParallel) score += 20; - if (fm.requiresUserInput) score += 10; - if (fm.planApproval === "pending") score += 10; - - return Math.min(100, score); -} - -export function scoreTaskFrontmatterPriority(task: TaskRecord): number { - return computeTaskPriority(task); -} diff --git a/packages/pi-agent-core/src/db/uok/trace-writer.ts b/packages/pi-agent-core/src/db/uok/trace-writer.ts deleted file mode 100644 index 3f86b9362..000000000 --- a/packages/pi-agent-core/src/db/uok/trace-writer.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Trace event reader for .sf/traces/ directory. - * - * Purpose: read typed trace events from JSONL files for gate statistics - * and performance analysis. Uses a minimal sfRoot implementation (fast path: - * basePath/.sf) to avoid pulling in the full paths.js dependency chain. - * - * Consumer: sf-db.ts gate statistics functions (getGateStats, etc.) - */ -import { existsSync, readdirSync, readFileSync, statSync } from "node:fs"; -import { join } from "node:path"; - -function sfRoot(basePath: string): string { - return join(basePath, ".sf"); -} - -function tracesDir(basePath: string): string { - return join(sfRoot(basePath), "traces"); -} - -export function appendTraceEvent( - basePath: string, - traceId: string, - event: Record, -): void { - if (!basePath || !traceId) return; - // No-op in pi-agent-core — writes are handled by the sf extension. - void event; -} - -export function readTraceEvents( - basePath: string, - type: string, - windowHours = 24, -): Record[] { - const dir = tracesDir(basePath); - if (!existsSync(dir)) return []; - const cutoff = Date.now() - windowHours * 60 * 60 * 1000; - const results: Record[] = []; - let files: string[]; - try { - files = readdirSync(dir).filter( - (f) => f.endsWith(".jsonl") && f !== "latest", - ); - } catch { - return []; - } - for (const file of files) { - try { - const filePath = join(dir, file); - if (statSync(filePath).mtimeMs < cutoff) continue; - const lines = readFileSync(filePath, "utf-8").split("\n").filter(Boolean); - for (const line of lines) { - try { - const ev = JSON.parse(line) as Record; - if (!type || ev["type"] === type) { - const tsMs = ev["ts"] ? new Date(ev["ts"] as string).getTime() : 0; - if (!ev["ts"] || tsMs >= cutoff) results.push(ev); - } - } catch { - /* skip malformed lines */ - } - } - } catch { - /* skip unreadable files */ - } - } - return results; -} diff --git a/packages/pi-agent-core/src/db/workflow-logger.ts b/packages/pi-agent-core/src/db/workflow-logger.ts deleted file mode 100644 index 7a0a21d20..000000000 --- a/packages/pi-agent-core/src/db/workflow-logger.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - * SF Workflow Logger — minimal adapter for pi-agent-core. - * - * Purpose: provide logWarning/logError without pulling in the full - * workflow-logger dependency chain (file-lock, notification-store, paths). - * The sf extension's own workflow-logger handles the full audit/notification - * pipeline; this module is used only by sf-db.ts in pi-agent-core context. - * - * Consumer: sf-db.ts in pi-agent-core for operational warnings and errors. - */ - -export interface LogEntry { - ts: string; - severity: "warn" | "error"; - component: string; - message: string; - context?: Record; -} - -const MAX_BUFFER = 100; -let _buffer: LogEntry[] = []; -let _stderrEnabled = true; - -export function setStderrLoggingEnabled(enabled: boolean): boolean { - const previous = _stderrEnabled; - _stderrEnabled = enabled; - return previous; -} - -export function logWarning( - component: string, - message: string, - context?: Record, -): void { - _push("warn", component, message, context); -} - -export function logError( - component: string, - message: string, - context?: Record, -): void { - _push("error", component, message, context); -} - -export function drainLogs(): LogEntry[] { - const entries = _buffer; - _buffer = []; - return entries; -} - -export function peekLogs(): LogEntry[] { - return _buffer; -} - -export function hasErrors(): boolean { - return _buffer.some((e) => e.severity === "error"); -} - -export function hasWarnings(): boolean { - return _buffer.some((e) => e.severity === "warn"); -} - -export function hasAnyIssues(): boolean { - return _buffer.length > 0; -} - -export function _resetLogs(): void { - _buffer = []; -} - -function _push( - severity: "warn" | "error", - component: string, - message: string, - context?: Record, -): void { - const entry: LogEntry = { - ts: new Date().toISOString(), - severity, - component, - message, - ...(context ? { context } : {}), - }; - const prefix = severity === "error" ? "ERROR" : "WARN"; - const ctxStr = context ? ` ${JSON.stringify(context)}` : ""; - if (_stderrEnabled) { - process.stderr.write(`[sf:${component}] ${prefix}: ${message}${ctxStr}\n`); - } - _buffer.push(entry); - if (_buffer.length > MAX_BUFFER) { - _buffer.shift(); - } -} diff --git a/packages/pi-agent-core/src/index.ts b/packages/pi-agent-core/src/index.ts deleted file mode 100644 index fc0bdcad7..000000000 --- a/packages/pi-agent-core/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./db/index.js"; diff --git a/packages/pi-agent-core/tsconfig.json b/packages/pi-agent-core/tsconfig.json deleted file mode 100644 index 24f67372f..000000000 --- a/packages/pi-agent-core/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2024", - "module": "Node16", - "lib": ["ES2024"], - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "incremental": true, - "forceConsistentCasingInFileNames": true, - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "inlineSources": true, - "inlineSourceMap": false, - "moduleResolution": "Node16", - "resolveJsonModule": true, - "allowImportingTsExtensions": false, - "useDefineForClassFields": false, - "types": ["node"], - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*.ts"], - "exclude": [ - "node_modules", - "dist", - "**/*.d.ts", - "src/**/*.d.ts", - "src/**/*.test.ts" - ] -} diff --git a/sf-worker/go.mod b/sf-worker/go.mod new file mode 100644 index 000000000..e0f55e7ce --- /dev/null +++ b/sf-worker/go.mod @@ -0,0 +1,49 @@ +module github.com/singularity-ng/singularity-forge/sf-worker + +go 1.26.2 + +require ( + github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/charmbracelet/bubbletea v1.3.4 // indirect + github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect + github.com/charmbracelet/keygen v0.5.3 // indirect + github.com/charmbracelet/lipgloss v1.1.0 // indirect + github.com/charmbracelet/log v1.0.0 // indirect + github.com/charmbracelet/ssh v0.0.0-20250128164007-98fd5ae11894 // indirect + github.com/charmbracelet/wish v1.4.7 // indirect + github.com/charmbracelet/x/ansi v0.8.0 // indirect + github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect + github.com/charmbracelet/x/conpty v0.1.0 // indirect + github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 // indirect + github.com/charmbracelet/x/input v0.3.4 // indirect + github.com/charmbracelet/x/term v0.2.1 // indirect + github.com/charmbracelet/x/termios v0.1.0 // indirect + github.com/charmbracelet/x/windows v0.2.0 // indirect + github.com/creack/pty v1.1.24 // indirect + github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect + github.com/go-logfmt/logfmt v0.6.1 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-localereader v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/muesli/termenv v0.16.0 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/prometheus/client_golang v1.23.2 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.66.1 // indirect + github.com/prometheus/procfs v0.16.1 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + go.yaml.in/yaml/v2 v2.4.2 // indirect + golang.org/x/crypto v0.51.0 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.44.0 // indirect + golang.org/x/text v0.37.0 // indirect + google.golang.org/protobuf v1.36.8 // indirect +) diff --git a/sf-worker/go.sum b/sf-worker/go.sum new file mode 100644 index 000000000..4eb9b3f40 --- /dev/null +++ b/sf-worker/go.sum @@ -0,0 +1,90 @@ +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charmbracelet/bubbletea v1.3.4 h1:kCg7B+jSCFPLYRA52SDZjr51kG/fMUEoPoZrkaDHyoI= +github.com/charmbracelet/bubbletea v1.3.4/go.mod h1:dtcUCyCGEX3g9tosuYiut3MXgY/Jsv9nKVdibKKRRXo= +github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs= +github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk= +github.com/charmbracelet/keygen v0.5.3 h1:2MSDC62OUbDy6VmjIE2jM24LuXUvKywLCmaJDmr/Z/4= +github.com/charmbracelet/keygen v0.5.3/go.mod h1:TcpNoMAO5GSmhx3SgcEMqCrtn8BahKhB8AlwnLjRUpk= +github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= +github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= +github.com/charmbracelet/log v1.0.0 h1:HVVVMmfOorfj3BA9i8X8UL69Hoz9lI0PYwXfJvOdRc4= +github.com/charmbracelet/log v1.0.0/go.mod h1:uYgY3SmLpwJWxmlrPwXvzVYujxis1vAKRV/0VQB7yWA= +github.com/charmbracelet/ssh v0.0.0-20250128164007-98fd5ae11894 h1:Ffon9TbltLGBsT6XE//YvNuu4OAaThXioqalhH11xEw= +github.com/charmbracelet/ssh v0.0.0-20250128164007-98fd5ae11894/go.mod h1:hg+I6gvlMl16nS9ZzQNgBIrrCasGwEw0QiLsDcP01Ko= +github.com/charmbracelet/wish v1.4.7 h1:O+jdLac3s6GaqkOHHSwezejNK04vl6VjO1A+hl8J8Yc= +github.com/charmbracelet/wish v1.4.7/go.mod h1:OBZ8vC62JC5cvbxJLh+bIWtG7Ctmct+ewziuUWK+G14= +github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE= +github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q= +github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8= +github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= +github.com/charmbracelet/x/conpty v0.1.0 h1:4zc8KaIcbiL4mghEON8D72agYtSeIgq8FSThSPQIb+U= +github.com/charmbracelet/x/conpty v0.1.0/go.mod h1:rMFsDJoDwVmiYM10aD4bH2XiRgwI7NYJtQgl5yskjEQ= +github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 h1:JSt3B+U9iqk37QUU2Rvb6DSBYRLtWqFqfxf8l5hOZUA= +github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0= +github.com/charmbracelet/x/input v0.3.4 h1:Mujmnv/4DaitU0p+kIsrlfZl/UlmeLKw1wAP3e1fMN0= +github.com/charmbracelet/x/input v0.3.4/go.mod h1:JI8RcvdZWQIhn09VzeK3hdp4lTz7+yhiEdpEQtZN+2c= +github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= +github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= +github.com/charmbracelet/x/termios v0.1.0 h1:y4rjAHeFksBAfGbkRDmVinMg7x7DELIGAFbdNvxg97k= +github.com/charmbracelet/x/termios v0.1.0/go.mod h1:H/EVv/KRnrYjz+fCYa9bsKdqF3S8ouDK0AZEbG7r+/U= +github.com/charmbracelet/x/windows v0.2.0 h1:ilXA1GJjTNkgOm94CLPeSz7rar54jtFatdmoiONPuEw= +github.com/charmbracelet/x/windows v0.2.0/go.mod h1:ZibNFR49ZFqCXgP76sYanisxRyC+EYrBE7TTknD8s1s= +github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= +github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= +github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= +github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= +github.com/go-logfmt/logfmt v0.6.1 h1:4hvbpePJKnIzH1B+8OR/JPbTx37NktoI9LE2QZBBkvE= +github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/z6CO0XAk= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= +github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= +github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= +github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= +github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs= +github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= +go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= +golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= +golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= +golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/sf-worker/main.go b/sf-worker/main.go new file mode 100644 index 000000000..3df0d607f --- /dev/null +++ b/sf-worker/main.go @@ -0,0 +1,100 @@ +// sf-worker — SSH PTY daemon that executes sf headless runs on behalf of a remote orchestrator. +// +// Purpose: allow the SF orchestrator to dispatch autonomous unit attempts to remote hosts +// (GPU boxes, Windows machines, parallel workers) over SSH without requiring a full SF +// installation on the controlling machine. +// +// Usage: +// +// sf-worker [flags] +// --addr SSH listen address (default ":2222") +// --metrics-addr Prometheus /metrics address (default ":9100") +// --host-key Path to SSH host key (default "~/.sf/worker_host_key") +// --authorized-keys Path to authorized_keys file (default "~/.sf/worker_authorized_keys") +// --sf-bin Path to sf binary (default: resolved from $PATH) +// --max-sessions Maximum concurrent sessions (default 16) +package main + +import ( + "context" + "flag" + "fmt" + "net/http" + "os" + "os/signal" + "path/filepath" + "syscall" + "time" + + "github.com/charmbracelet/log" + "github.com/prometheus/client_golang/prometheus/promhttp" +) + +func defaultPath(rel string) string { + home, err := os.UserHomeDir() + if err != nil { + return rel + } + return filepath.Join(home, ".sf", rel) +} + +func main() { + addr := flag.String("addr", ":2222", "SSH listen address") + metricsAddr := flag.String("metrics-addr", ":9100", "Prometheus metrics address") + hostKeyPath := flag.String("host-key", defaultPath("worker_host_key"), "SSH host key path (RSA/Ed25519 PEM)") + authorizedKeysPath := flag.String("authorized-keys", defaultPath("worker_authorized_keys"), "authorized_keys path") + sfBin := flag.String("sf-bin", "", "Path to sf binary (default: resolved from $PATH)") + maxSessions := flag.Int("max-sessions", 16, "Maximum concurrent sessions") + flag.Parse() + + logger := log.NewWithOptions(os.Stderr, log.Options{ + ReportTimestamp: true, + TimeFormat: time.RFC3339, + Level: log.InfoLevel, + }) + + srv, err := NewServer(ServerConfig{ + Addr: *addr, + HostKeyPath: *hostKeyPath, + AuthorizedKeysPath: *authorizedKeysPath, + SFBin: *sfBin, + MaxSessions: *maxSessions, + Logger: logger, + }) + if err != nil { + logger.Error("failed to create server", "err", err) + os.Exit(1) + } + + // Prometheus metrics endpoint. + metricsMux := http.NewServeMux() + metricsMux.Handle("/metrics", promhttp.Handler()) + metricsMux.HandleFunc("/health", func(w http.ResponseWriter, _ *http.Request) { + fmt.Fprintln(w, "ok") + }) + metricsServer := &http.Server{ + Addr: *metricsAddr, + Handler: metricsMux, + } + go func() { + logger.Info("metrics server listening", "addr", *metricsAddr) + if err := metricsServer.ListenAndServe(); err != nil && err != http.ErrServerClosed { + logger.Error("metrics server error", "err", err) + } + }() + + ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) + defer cancel() + + logger.Info("sf-worker starting", "addr", *addr) + if err := srv.ListenAndServe(ctx); err != nil { + logger.Error("server error", "err", err) + os.Exit(1) + } + + shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 10*time.Second) + defer shutdownCancel() + _ = metricsServer.Shutdown(shutdownCtx) + + logger.Info("sf-worker stopped") +} diff --git a/sf-worker/server.go b/sf-worker/server.go new file mode 100644 index 000000000..5ce2db158 --- /dev/null +++ b/sf-worker/server.go @@ -0,0 +1,215 @@ +// server.go — SSH server setup and connection acceptance. +// +// Purpose: accept SSH connections from the SF orchestrator, enforce key-based auth, +// and hand each session off to runSession for PTY execution. +package main + +import ( + "bufio" + "context" + "fmt" + "net" + "os" + "os/exec" + "strings" + "sync" + "sync/atomic" + "time" + + "github.com/charmbracelet/log" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + "golang.org/x/crypto/ssh" +) + +var ( + metricActiveSessions = promauto.NewGauge(prometheus.GaugeOpts{ + Name: "sfworker_active_sessions", + Help: "Currently active SSH sessions.", + }) + metricSessionsTotal = promauto.NewCounterVec(prometheus.CounterOpts{ + Name: "sfworker_sessions_total", + Help: "Total SSH sessions by outcome.", + }, []string{"outcome"}) + metricSessionDuration = promauto.NewHistogram(prometheus.HistogramOpts{ + Name: "sfworker_session_duration_seconds", + Help: "Session duration in seconds.", + Buckets: prometheus.ExponentialBuckets(1, 2, 12), + }) +) + +// ServerConfig holds the sf-worker SSH server configuration. +type ServerConfig struct { + Addr string + HostKeyPath string + AuthorizedKeysPath string + // SFBin is the path to the sf binary. If empty, resolved from $PATH. + SFBin string + MaxSessions int + Logger *log.Logger +} + +// Server is the sf-worker SSH server. +type Server struct { + cfg ServerConfig + sshConfig *ssh.ServerConfig + sfBin string + activeSess atomic.Int32 + logger *log.Logger +} + +// NewServer constructs and configures the SSH server. +func NewServer(cfg ServerConfig) (*Server, error) { + if cfg.MaxSessions <= 0 { + cfg.MaxSessions = 16 + } + + sfBin := cfg.SFBin + if sfBin == "" { + var err error + sfBin, err = exec.LookPath("sf") + if err != nil { + return nil, fmt.Errorf("sf binary not found in PATH (set --sf-bin): %w", err) + } + } + + hostKey, err := loadOrGenerateHostKey(cfg.HostKeyPath) + if err != nil { + return nil, fmt.Errorf("host key: %w", err) + } + + authorizedKeys, err := loadAuthorizedKeys(cfg.AuthorizedKeysPath) + if err != nil { + return nil, fmt.Errorf("authorized keys: %w", err) + } + + sshConfig := &ssh.ServerConfig{ + PublicKeyCallback: func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) { + fp := ssh.FingerprintSHA256(key) + if _, ok := authorizedKeys[fp]; ok { + return &ssh.Permissions{Extensions: map[string]string{"fp": fp}}, nil + } + return nil, fmt.Errorf("key not authorized: %s", fp) + }, + } + sshConfig.AddHostKey(hostKey) + + return &Server{ + cfg: cfg, + sshConfig: sshConfig, + sfBin: sfBin, + logger: cfg.Logger, + }, nil +} + +// ListenAndServe starts accepting SSH connections until ctx is cancelled. +func (s *Server) ListenAndServe(ctx context.Context) error { + ln, err := net.Listen("tcp", s.cfg.Addr) + if err != nil { + return fmt.Errorf("listen %s: %w", s.cfg.Addr, err) + } + s.logger.Info("SSH server listening", "addr", s.cfg.Addr, "sf-bin", s.sfBin) + + var wg sync.WaitGroup + go func() { + <-ctx.Done() + _ = ln.Close() + }() + + for { + conn, err := ln.Accept() + if err != nil { + if ctx.Err() != nil { + break + } + s.logger.Warn("accept error", "err", err) + continue + } + + if int(s.activeSess.Load()) >= s.cfg.MaxSessions { + s.logger.Warn("max sessions reached, rejecting connection", "remote", conn.RemoteAddr()) + _ = conn.Close() + continue + } + + wg.Add(1) + go func(c net.Conn) { + defer wg.Done() + s.handleConn(ctx, c) + }(conn) + } + + wg.Wait() + return nil +} + +func (s *Server) handleConn(ctx context.Context, conn net.Conn) { + defer conn.Close() + start := time.Now() + remote := conn.RemoteAddr().String() + + sshConn, chans, reqs, err := ssh.NewServerConn(conn, s.sshConfig) + if err != nil { + s.logger.Warn("SSH handshake failed", "remote", remote, "err", err) + metricSessionsTotal.WithLabelValues("auth_failed").Inc() + return + } + defer sshConn.Close() + + fp := sshConn.Permissions.Extensions["fp"] + s.logger.Info("new connection", "remote", remote, "fp", fp) + s.activeSess.Add(1) + metricActiveSessions.Inc() + defer func() { + s.activeSess.Add(-1) + metricActiveSessions.Dec() + metricSessionDuration.Observe(time.Since(start).Seconds()) + }() + + // Discard global requests. + go ssh.DiscardRequests(reqs) + + for newChan := range chans { + if newChan.ChannelType() != "session" { + _ = newChan.Reject(ssh.UnknownChannelType, "only session channels accepted") + continue + } + ch, requests, err := newChan.Accept() + if err != nil { + s.logger.Warn("channel accept error", "err", err) + metricSessionsTotal.WithLabelValues("error").Inc() + return + } + + outcome := s.runSession(ctx, ch, requests, remote, fp) + metricSessionsTotal.WithLabelValues(outcome).Inc() + s.logger.Info("session ended", "remote", remote, "outcome", outcome, "duration", time.Since(start).Round(time.Millisecond)) + } +} + +// loadAuthorizedKeys parses an OpenSSH authorized_keys file into a fingerprint→key map. +func loadAuthorizedKeys(path string) (map[string]ssh.PublicKey, error) { + f, err := os.Open(path) + if os.IsNotExist(err) { + return map[string]ssh.PublicKey{}, nil // empty = no keys authorized (warn at connection time) + } + if err != nil { + return nil, err + } + defer f.Close() + + keys := map[string]ssh.PublicKey{} + scanner := bufio.NewScanner(f) + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + pub, _, _, _, err := ssh.ParseAuthorizedKey([]byte(line)) + if err != nil { + continue // skip malformed lines + } + keys[ssh.FingerprintSHA256(pub)] = pub + } + return keys, scanner.Err() +} diff --git a/sf-worker/session.go b/sf-worker/session.go new file mode 100644 index 000000000..a4aaacada --- /dev/null +++ b/sf-worker/session.go @@ -0,0 +1,199 @@ +// session.go — per-SSH-session PTY execution of sf headless. +// +// Purpose: spawn `sf headless ` in a real PTY for each authorized SSH session, +// wire the PTY I/O to the SSH channel, handle window-resize requests, and clean up +// on disconnect. +package main + +import ( + "context" + "fmt" + "io" + "os" + "os/exec" + "strings" + "sync" + + "github.com/creack/pty" + "golang.org/x/crypto/ssh" +) + +// allowedSubcommands are the sf subcommands a worker session may execute. +// Restricting to headless prevents the orchestrator key from being used for arbitrary execution. +var allowedSubcommands = map[string]bool{ + "headless": true, + "version": true, + "--version": true, +} + +// runSession handles a single SSH session channel: waits for an exec request, +// validates the command, spawns it in a PTY, and streams I/O until completion. +// Returns an outcome label for metrics: "ok", "rejected", "error". +func (s *Server) runSession(ctx context.Context, ch ssh.Channel, requests <-chan *ssh.Request, remote, fp string) string { + defer ch.Close() + + type execReq struct { + cmd string + ptyW uint32 + ptyH uint32 + hasPTY bool + } + + var pending execReq + + // Collect session requests until we get "exec" or the channel closes. + for req := range requests { + switch req.Type { + case "pty-req": + // https://datatracker.ietf.org/doc/html/rfc4254#section-6.2 + if len(req.Payload) < 4 { + _ = req.Reply(false, nil) + continue + } + // term string length prefix + termLen := int(req.Payload[0])<<24 | int(req.Payload[1])<<16 | int(req.Payload[2])<<8 | int(req.Payload[3]) + offset := 4 + termLen + if len(req.Payload) < offset+8 { + _ = req.Reply(false, nil) + continue + } + pending.ptyW = uint32(req.Payload[offset])<<24 | uint32(req.Payload[offset+1])<<16 | uint32(req.Payload[offset+2])<<8 | uint32(req.Payload[offset+3]) + pending.ptyH = uint32(req.Payload[offset+4])<<24 | uint32(req.Payload[offset+5])<<16 | uint32(req.Payload[offset+6])<<8 | uint32(req.Payload[offset+7]) + pending.hasPTY = true + _ = req.Reply(true, nil) + + case "window-change": + // Handled after PTY is started (ignore if no PTY yet). + _ = req.Reply(false, nil) + + case "exec": + if len(req.Payload) < 4 { + _ = req.Reply(false, nil) + return "rejected" + } + cmdLen := int(req.Payload[0])<<24 | int(req.Payload[1])<<16 | int(req.Payload[2])<<8 | int(req.Payload[3]) + if len(req.Payload) < 4+cmdLen { + _ = req.Reply(false, nil) + return "rejected" + } + pending.cmd = string(req.Payload[4 : 4+cmdLen]) + _ = req.Reply(true, nil) + + outcome := s.execCommand(ctx, ch, requests, pending.cmd, pending.ptyW, pending.ptyH, remote, fp) + return outcome + + case "shell": + // No interactive shell — reject. + _ = req.Reply(false, nil) + sendExitStatus(ch, 1) + return "rejected" + + default: + if req.WantReply { + _ = req.Reply(false, nil) + } + } + } + return "ok" +} + +// execCommand validates and executes the requested command in a PTY. +func (s *Server) execCommand(ctx context.Context, ch ssh.Channel, requests <-chan *ssh.Request, cmdStr string, ptyW, ptyH uint32, remote, fp string) string { + args := strings.Fields(cmdStr) + if len(args) == 0 { + sendExitStatus(ch, 1) + return "rejected" + } + + // Validate: first arg must be "sf" (or the sf-bin basename), second must be an allowed subcommand. + sfBase := s.sfBin + for i := len(sfBase) - 1; i >= 0; i-- { + if sfBase[i] == '/' || sfBase[i] == '\\' { + sfBase = sfBase[i+1:] + break + } + } + + start := 0 + if args[0] == sfBase || args[0] == "sf" { + start = 1 + } + if start >= len(args) || !allowedSubcommands[args[start]] { + s.logger.Warn("rejected command", "remote", remote, "cmd", cmdStr) + fmt.Fprintf(ch, "sf-worker: command not allowed: %q\r\n", cmdStr) + sendExitStatus(ch, 1) + return "rejected" + } + + // Build the actual command: replace the leading "sf" with the real binary path. + execArgs := append([]string{s.sfBin}, args[start:]...) + cmd := exec.CommandContext(ctx, execArgs[0], execArgs[1:]...) + cmd.Env = append(os.Environ(), "SF_WORKER=1", fmt.Sprintf("SF_WORKER_CLIENT_FP=%s", fp)) + + s.logger.Info("exec", "remote", remote, "cmd", execArgs) + + // Start with PTY. + ptmx, err := pty.StartWithSize(cmd, &pty.Winsize{ + Cols: uint16(ptyW), + Rows: uint16(ptyH), + }) + if err != nil { + s.logger.Error("pty start failed", "err", err) + fmt.Fprintf(ch, "sf-worker: failed to start: %v\r\n", err) + sendExitStatus(ch, 1) + return "error" + } + defer func() { + _ = ptmx.Close() + }() + + // Handle subsequent window-change requests in background. + go func() { + for req := range requests { + if req.Type == "window-change" && len(req.Payload) >= 8 { + w := uint32(req.Payload[0])<<24 | uint32(req.Payload[1])<<16 | uint32(req.Payload[2])<<8 | uint32(req.Payload[3]) + h := uint32(req.Payload[4])<<24 | uint32(req.Payload[5])<<16 | uint32(req.Payload[6])<<8 | uint32(req.Payload[7]) + _ = pty.Setsize(ptmx, &pty.Winsize{Cols: uint16(w), Rows: uint16(h)}) + } + if req.WantReply { + _ = req.Reply(false, nil) + } + } + }() + + // Bidirectional copy: PTY ↔ SSH channel. + var wg sync.WaitGroup + wg.Add(2) + go func() { + defer wg.Done() + _, _ = io.Copy(ptmx, ch) + }() + go func() { + defer wg.Done() + _, _ = io.Copy(ch, ptmx) + }() + + err = cmd.Wait() + wg.Wait() + + exitCode := 0 + if err != nil { + if exitErr, ok := err.(*exec.ExitError); ok { + exitCode = exitErr.ExitCode() + } else { + exitCode = 1 + } + } + sendExitStatus(ch, uint32(exitCode)) + + if exitCode != 0 { + return "error" + } + return "ok" +} + +// sendExitStatus sends an SSH exit-status request to the channel. +func sendExitStatus(ch ssh.Channel, code uint32) { + payload := []byte{byte(code >> 24), byte(code >> 16), byte(code >> 8), byte(code)} + _, _ = ch.SendRequest("exit-status", false, payload) +} diff --git a/src/resources/extensions/sf/model-cost-table.js b/src/resources/extensions/sf/model-cost-table.js index 5a44a37b2..f1a4eb245 100644 --- a/src/resources/extensions/sf/model-cost-table.js +++ b/src/resources/extensions/sf/model-cost-table.js @@ -308,6 +308,198 @@ export const BUNDLED_COST_TABLE = [ outputPer1k: 0.00028, updatedAt: "2025-03-15", }, + // Gemini preview / future models + { + id: "gemini-3.1-pro-preview", + inputPer1k: 0.00125, + outputPer1k: 0.005, + updatedAt: "2026-05-01", + }, + { + id: "gemini-3.1-flash-lite-preview", + inputPer1k: 0.0001, + outputPer1k: 0.0004, + updatedAt: "2026-05-01", + }, + { + id: "gemini-3-pro-preview", + inputPer1k: 0.00125, + outputPer1k: 0.005, + updatedAt: "2026-05-01", + }, + { + id: "gemini-3-flash-preview", + inputPer1k: 0.0001, + outputPer1k: 0.0004, + updatedAt: "2026-05-01", + }, + { + id: "gemini-2.5-flash", + inputPer1k: 0.0001, + outputPer1k: 0.0004, + updatedAt: "2026-05-01", + }, + { + id: "gemini-2.5-flash-lite", + inputPer1k: 0.00005, + outputPer1k: 0.0002, + updatedAt: "2026-05-01", + }, + // GLM (ZhipuAI) + { + id: "glm-4.7", + inputPer1k: 0.0006, + outputPer1k: 0.0024, + updatedAt: "2026-05-01", + }, + { + id: "glm-4.7-flash", + inputPer1k: 0, + outputPer1k: 0, + updatedAt: "2026-05-01", + }, + { + id: "glm-4.7-flashx", + inputPer1k: 0.00007, + outputPer1k: 0.00028, + updatedAt: "2026-05-01", + }, + { + id: "glm-5", + inputPer1k: 0.001, + outputPer1k: 0.004, + updatedAt: "2026-05-01", + }, + { + id: "glm-5-turbo", + inputPer1k: 0.0012, + outputPer1k: 0.0048, + updatedAt: "2026-05-01", + }, + { + id: "glm-5.1", + inputPer1k: 0.0014, + outputPer1k: 0.0056, + updatedAt: "2026-05-01", + }, + { + id: "glm-5v-turbo", + inputPer1k: 0.0012, + outputPer1k: 0.0048, + updatedAt: "2026-05-01", + }, + // Qwen (Alibaba) + { + id: "qwen3-coder:480b", + inputPer1k: 0.0004, + outputPer1k: 0.0016, + updatedAt: "2026-05-01", + }, + { + id: "qwen3-coder-next", + inputPer1k: 0.0004, + outputPer1k: 0.0016, + updatedAt: "2026-05-01", + }, + { + id: "qwen3-next:80b", + inputPer1k: 0.0002, + outputPer1k: 0.0008, + updatedAt: "2026-05-01", + }, + // Kimi (Moonshot) + { + id: "kimi-k2.6", + inputPer1k: 0.0006, + outputPer1k: 0.0024, + updatedAt: "2026-05-01", + }, + { + id: "kimi-for-coding", + inputPer1k: 0.0006, + outputPer1k: 0.0024, + updatedAt: "2026-05-01", + }, + { + id: "kimi-k2-thinking", + inputPer1k: 0.001, + outputPer1k: 0.004, + updatedAt: "2026-05-01", + }, + // MiniMax + { + id: "MiniMax-M2.7", + inputPer1k: 0.0006, + outputPer1k: 0.0024, + updatedAt: "2026-05-01", + }, + { + id: "MiniMax-M2.7-highspeed", + inputPer1k: 0.0006, + outputPer1k: 0.0024, + updatedAt: "2026-05-01", + }, + // Mistral versioned variants + { + id: "devstral-medium-2507", + inputPer1k: 0.0004, + outputPer1k: 0.002, + updatedAt: "2026-05-01", + }, + { + id: "devstral-small-2505", + inputPer1k: 0.0001, + outputPer1k: 0.0003, + updatedAt: "2026-05-01", + }, + { + id: "labs-devstral-small-2512", + inputPer1k: 0.0001, + outputPer1k: 0.0003, + updatedAt: "2026-05-01", + }, + { + id: "mistral-large-2411", + inputPer1k: 0.002, + outputPer1k: 0.006, + updatedAt: "2026-05-01", + }, + { + id: "mistral-medium-2505", + inputPer1k: 0.0004, + outputPer1k: 0.002, + updatedAt: "2026-05-01", + }, + { + id: "mistral-medium-2508", + inputPer1k: 0.0004, + outputPer1k: 0.002, + updatedAt: "2026-05-01", + }, + { + id: "mistral-small-2506", + inputPer1k: 0.0001, + outputPer1k: 0.0006, + updatedAt: "2026-05-01", + }, + { + id: "open-mistral-7b", + inputPer1k: 0.00025, + outputPer1k: 0.00025, + updatedAt: "2026-05-01", + }, + { + id: "open-mixtral-8x22b", + inputPer1k: 0.002, + outputPer1k: 0.006, + updatedAt: "2026-05-01", + }, + { + id: "open-mixtral-8x7b", + inputPer1k: 0.0007, + outputPer1k: 0.0007, + updatedAt: "2026-05-01", + }, ]; /** * Lookup cost for a model ID. Returns undefined if not found. diff --git a/src/resources/extensions/sf/model-router.js b/src/resources/extensions/sf/model-router.js index e247980a8..df54025d1 100644 --- a/src/resources/extensions/sf/model-router.js +++ b/src/resources/extensions/sf/model-router.js @@ -4,6 +4,7 @@ import { getProviderCapabilities } from "@singularity-forge/ai"; import { getToolCompatibility } from "@singularity-forge/coding-agent"; import { tierOrdinal } from "./complexity-classifier.js"; +import { lookupModelCost } from "./model-cost-table.js"; // ─── Known Model Tiers ─────────────────────────────────────────────────────── // Maps known model IDs to their capability tier. Used when tier_models is not // explicitly configured to pick the best available model for each tier. @@ -93,87 +94,6 @@ export const MODEL_CAPABILITY_TIER = { "open-mixtral-8x22b": "heavy", "pixtral-large-latest": "heavy", }; -// ─── Cost Table (per 1K input tokens, approximate USD) ─────────────────────── -// Used for cross-provider cost comparison when multiple providers offer -// the same capability tier. -const MODEL_COST_PER_1K_INPUT = { - "claude-haiku-4-5": 0.0008, - "claude-3-5-haiku-latest": 0.0008, - "claude-sonnet-4-6": 0.003, - "claude-sonnet-4-5-20250514": 0.003, - "claude-opus-4-6": 0.015, - "gpt-4o-mini": 0.00015, - "gpt-4o": 0.0025, - "gpt-4.1": 0.002, - "gpt-4.1-mini": 0.0004, - "gpt-4.1-nano": 0.0001, - "gpt-5": 0.01, - "gpt-5-mini": 0.0003, - "gpt-5-nano": 0.0001, - "gpt-5-pro": 0.015, - "gpt-5.1": 0.005, - "gpt-5.1-codex-max": 0.003, - "gpt-5.1-codex-mini": 0.0003, - "gpt-5.2": 0.005, - "gpt-5.2-codex": 0.005, - "gpt-5.3-codex": 0.005, - "gpt-5.3-codex-spark": 0.0003, - "gpt-5.4": 0.005, - "gpt-5.4-mini": 0.00075, - "gpt-5.5": 0.005, - "o4-mini": 0.005, - "o4-mini-deep-research": 0.005, - "gemini-2.0-flash": 0.0001, - "gemini-2.5-pro": 0.00125, - "gemini-3.1-pro-preview": 0.00125, - "gemini-3.1-flash-lite-preview": 0.0001, - "gemini-3-pro-preview": 0.00125, - "gemini-3-flash-preview": 0.0001, - "gemini-2.5-flash": 0.0001, - "gemini-2.5-flash-lite": 0.00005, - "deepseek-chat": 0.00014, - "glm-4.7": 0.0006, - "glm-4.7-flash": 0, - "glm-4.7-flashx": 0.00007, - "glm-5": 0.001, - "glm-5-turbo": 0.0012, - "glm-5.1": 0.0014, - "glm-5v-turbo": 0.0012, - "qwen3-coder:480b": 0.0004, - "qwen3-coder-next": 0.0004, - "qwen3-next:80b": 0.0002, - "kimi-k2.6": 0.0006, - "kimi-for-coding": 0.0006, - "kimi-k2-thinking": 0.001, - "MiniMax-M2.7": 0.0006, - "MiniMax-M2.7-highspeed": 0.0006, - "codestral-latest": 0.0003, - "devstral-2512": 0.0004, - "devstral-medium-2507": 0.0004, - "devstral-medium-latest": 0.0004, - "devstral-small-2505": 0.0001, - "devstral-small-2507": 0.0001, - "labs-devstral-small-2512": 0.0001, - "magistral-medium-latest": 0.002, - "magistral-small": 0.0005, - "ministral-3b-latest": 0.00004, - "ministral-8b-latest": 0.0001, - "mistral-large-2411": 0.002, - "mistral-large-2512": 0.0005, - "mistral-large-latest": 0.0005, - "mistral-medium-2505": 0.0004, - "mistral-medium-2508": 0.0004, - "mistral-medium-latest": 0.0004, - "mistral-nemo": 0.00015, - "mistral-small-2506": 0.0001, - "mistral-small-2603": 0.00015, - "mistral-small-latest": 0.00015, - "open-mistral-7b": 0.00025, - "open-mixtral-8x22b": 0.002, - "open-mixtral-8x7b": 0.0007, - "pixtral-12b": 0.00015, - "pixtral-large-latest": 0.002, -}; // ─── Capability Profiles Data Table ────────────────────────────────────────── // Per-model capability profiles (0–100 scale). Used for capability-aware // model selection within an eligible tier set. @@ -1067,8 +987,8 @@ export function scoreEligibleModels( scored.sort((a, b) => { const scoreDiff = b.score - a.score; if (Math.abs(scoreDiff) > 2) return scoreDiff; - const costA = MODEL_COST_PER_1K_INPUT[a.modelId] ?? Infinity; - const costB = MODEL_COST_PER_1K_INPUT[b.modelId] ?? Infinity; + const costA = lookupModelCost(a.modelId)?.inputPer1k ?? Infinity; + const costB = lookupModelCost(b.modelId)?.inputPer1k ?? Infinity; if (costA !== costB) return costA - costB; return a.modelId.localeCompare(b.modelId); }); @@ -1121,8 +1041,10 @@ export function getEligibleModels(tier, availableModelIds, routingConfig) { return availableModelIds .filter((id) => getModelTier(id) === tier) .sort((a, b) => { - const costA = getModelCost(a); - const costB = getModelCost(b); + const costA = + lookupModelCost(canonicalCapabilityModelId(a))?.inputPer1k ?? 999; + const costB = + lookupModelCost(canonicalCapabilityModelId(b))?.inputPer1k ?? 999; return costA - costB; }); } @@ -1341,20 +1263,6 @@ function isKnownModel(modelId) { } return false; } -function getModelCost(modelId) { - const canonicalId = canonicalCapabilityModelId(modelId); - if (MODEL_COST_PER_1K_INPUT[canonicalId] !== undefined) { - return MODEL_COST_PER_1K_INPUT[canonicalId]; - } - // Check partial matches - for (const [knownId, cost] of Object.entries(MODEL_COST_PER_1K_INPUT)) { - if (canonicalId.includes(knownId) || knownId.includes(canonicalId)) { - return cost; - } - } - // Unknown cost — assume expensive to avoid routing to unknown cheap models - return 999; -} // ─── Tool Compatibility Filter (ADR-005 Phase 3) ─────────────────────────── /** * Check if a tool is compatible with a provider's capabilities. diff --git a/src/resources/extensions/sf/preferences-models.js b/src/resources/extensions/sf/preferences-models.js index 198381031..5c7f26d97 100644 --- a/src/resources/extensions/sf/preferences-models.js +++ b/src/resources/extensions/sf/preferences-models.js @@ -10,6 +10,7 @@ import { homedir } from "node:os"; import { join } from "node:path"; import { getModels, getProviders } from "@singularity-forge/ai"; import { selectByBenchmarks } from "./benchmark-selector.js"; +import { classifyError } from "./error-classifier.js"; import { defaultRoutingConfig, MODEL_CAPABILITY_TIER } from "./model-router.js"; import { DEFAULT_RUNAWAY_CHANGED_FILES_WARNING, @@ -582,16 +583,14 @@ export function getNextFallbackModel(currentModelId, modelConfig) { * Detect whether an error message indicates a transient network error * (worth retrying the same model) vs a permanent provider error * (auth failure, quota exceeded, etc. -- should fall back immediately). + * + * Delegates to error-classifier for consistent classification across the + * extension. error-classifier is the single source of truth for error triage. */ export function isTransientNetworkError(errorMsg) { if (!errorMsg) return false; - const hasNetworkSignal = - /network|ECONNRESET|ETIMEDOUT|ECONNREFUSED|socket hang up|fetch failed|connection.*reset|dns/i.test( - errorMsg, - ); - const hasPermanentSignal = - /auth|unauthorized|forbidden|invalid.*key|quota|billing/i.test(errorMsg); - return hasNetworkSignal && !hasPermanentSignal; + const { kind } = classifyError(errorMsg); + return kind === "network" || kind === "connection" || kind === "stream"; } /** * Validate a model ID string. diff --git a/tsconfig.extensions.json b/tsconfig.extensions.json index 0960890f5..c2dc924ab 100644 --- a/tsconfig.extensions.json +++ b/tsconfig.extensions.json @@ -24,7 +24,6 @@ }, "include": ["src/resources/extensions", "src/types.d.ts"], "exclude": [ - "src/resources/extensions/vectordrive/tests/**/*.ts", "src/resources/extensions/**/tests/**/*.ts", "src/resources/extensions/**/tests/**/*.mjs", "src/tests/**/*.ts", diff --git a/vitest.config.ts b/vitest.config.ts index c90cfa21f..5929463f1 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -171,7 +171,6 @@ export default defineConfig({ "src/resources/extensions/github-sync/tests/**/*.test.ts", "src/resources/extensions/universal-config/tests/**/*.test.ts", "src/resources/extensions/voice/tests/**/*.test.ts", - "src/resources/extensions/vectordrive/tests/**/*.test.ts", "src/resources/extensions/mcp-client/tests/**/*.test.ts", "src/resources/extensions/async-jobs/*.test.ts", "src/resources/extensions/browser-tools/tests/*.test.mjs",

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 EKZ`Ca7ytkO literal 0 HcmV?d00001 diff --git a/.sf/metrics.db b/.sf/metrics.db index 9d6f2fb4bd4f774bc6efb10d2d161cc86837dd4d..01193a490475095d9ebd47a31c44eeb84d29e997 100644 GIT binary patch delta 28280 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 EAOGwo0RR91 diff --git a/.sf/metrics.db-wal b/.sf/metrics.db-wal deleted file mode 100644 index 857ff205cf6009d3d5270e4b8f3b78eae9e1f59e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4008792 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