@agent-profile/web 0.3.5 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/build/client/_app/immutable/chunks/Bjy-W4x2.js +81 -0
  2. package/build/client/_app/immutable/chunks/Bjy-W4x2.js.br +0 -0
  3. package/build/client/_app/immutable/chunks/Bjy-W4x2.js.gz +0 -0
  4. package/build/client/_app/immutable/chunks/{BcMnim1Z.js → BmxQso7w.js} +1 -1
  5. package/build/client/_app/immutable/chunks/BmxQso7w.js.br +3 -0
  6. package/build/client/_app/immutable/chunks/BmxQso7w.js.gz +0 -0
  7. package/build/client/_app/immutable/chunks/CY-inT3H.js +3 -0
  8. package/build/client/_app/immutable/chunks/CY-inT3H.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/CY-inT3H.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/{DTBN031P.js → CyEm9M8C.js} +1 -1
  11. package/build/client/_app/immutable/chunks/CyEm9M8C.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/CyEm9M8C.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/DYl5dUZ5.js +1 -0
  14. package/build/client/_app/immutable/chunks/DYl5dUZ5.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/DYl5dUZ5.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/RwRNRscK.js +2 -0
  17. package/build/client/_app/immutable/chunks/RwRNRscK.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/RwRNRscK.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/{D5fBh0I2.js → YBkAuHc6.js} +1 -1
  20. package/build/client/_app/immutable/chunks/YBkAuHc6.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/YBkAuHc6.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/jSRqCab7.js +1 -0
  23. package/build/client/_app/immutable/chunks/jSRqCab7.js.br +2 -0
  24. package/build/client/_app/immutable/chunks/jSRqCab7.js.gz +0 -0
  25. package/build/client/_app/immutable/entry/app.WDp3PboB.js +2 -0
  26. package/build/client/_app/immutable/entry/app.WDp3PboB.js.br +0 -0
  27. package/build/client/_app/immutable/entry/app.WDp3PboB.js.gz +0 -0
  28. package/build/client/_app/immutable/entry/start.Rh_k7Qxe.js +1 -0
  29. package/build/client/_app/immutable/entry/start.Rh_k7Qxe.js.br +0 -0
  30. package/build/client/_app/immutable/entry/start.Rh_k7Qxe.js.gz +0 -0
  31. package/build/client/_app/immutable/nodes/0.-RAEeCLa.js +1 -0
  32. package/build/client/_app/immutable/nodes/0.-RAEeCLa.js.br +0 -0
  33. package/build/client/_app/immutable/nodes/0.-RAEeCLa.js.gz +0 -0
  34. package/build/client/_app/immutable/nodes/1.34MuZTH7.js +1 -0
  35. package/build/client/_app/immutable/nodes/1.34MuZTH7.js.br +0 -0
  36. package/build/client/_app/immutable/nodes/1.34MuZTH7.js.gz +0 -0
  37. package/build/client/_app/immutable/nodes/10.DplzwNzq.js +3 -0
  38. package/build/client/_app/immutable/nodes/10.DplzwNzq.js.br +0 -0
  39. package/build/client/_app/immutable/nodes/10.DplzwNzq.js.gz +0 -0
  40. package/build/client/_app/immutable/nodes/{11.3lkgWYOd.js → 11.DvcCox6n.js} +1 -1
  41. package/build/client/_app/immutable/nodes/11.DvcCox6n.js.br +0 -0
  42. package/build/client/_app/immutable/nodes/11.DvcCox6n.js.gz +0 -0
  43. package/build/client/_app/immutable/nodes/{12.p6ol8gkx.js → 12.Cb49Qjng.js} +1 -1
  44. package/build/client/_app/immutable/nodes/12.Cb49Qjng.js.br +0 -0
  45. package/build/client/_app/immutable/nodes/12.Cb49Qjng.js.gz +0 -0
  46. package/build/client/_app/immutable/nodes/{2.Clary1Ks.js → 2.DNGHCEWB.js} +2 -2
  47. package/build/client/_app/immutable/nodes/2.DNGHCEWB.js.br +0 -0
  48. package/build/client/_app/immutable/nodes/2.DNGHCEWB.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/{3.BBvN4Erf.js → 3.BEdWeod6.js} +1 -1
  50. package/build/client/_app/immutable/nodes/3.BEdWeod6.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/3.BEdWeod6.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/{4.3VL8fZOS.js → 4.C4b1rN7s.js} +1 -1
  53. package/build/client/_app/immutable/nodes/4.C4b1rN7s.js.br +0 -0
  54. package/build/client/_app/immutable/nodes/4.C4b1rN7s.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/5.DrqRX385.js +2 -0
  56. package/build/client/_app/immutable/nodes/5.DrqRX385.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/5.DrqRX385.js.gz +0 -0
  58. package/build/client/_app/immutable/nodes/{6.BRCCYakl.js → 6.BiWHXice.js} +1 -1
  59. package/build/client/_app/immutable/nodes/6.BiWHXice.js.br +0 -0
  60. package/build/client/_app/immutable/nodes/6.BiWHXice.js.gz +0 -0
  61. package/build/client/_app/immutable/nodes/{7._DA-s9Iz.js → 7.BNVGtd7p.js} +1 -1
  62. package/build/client/_app/immutable/nodes/7.BNVGtd7p.js.br +0 -0
  63. package/build/client/_app/immutable/nodes/7.BNVGtd7p.js.gz +0 -0
  64. package/build/client/_app/immutable/nodes/8.jIClO5FX.js +1 -0
  65. package/build/client/_app/immutable/nodes/8.jIClO5FX.js.br +0 -0
  66. package/build/client/_app/immutable/nodes/8.jIClO5FX.js.gz +0 -0
  67. package/build/client/_app/immutable/nodes/9.B7GOogsh.js +9 -0
  68. package/build/client/_app/immutable/nodes/9.B7GOogsh.js.br +0 -0
  69. package/build/client/_app/immutable/nodes/9.B7GOogsh.js.gz +0 -0
  70. package/build/client/_app/version.json +1 -1
  71. package/build/client/_app/version.json.br +0 -0
  72. package/build/client/_app/version.json.gz +0 -0
  73. package/build/env.js +9 -33
  74. package/build/env.js.map +1 -0
  75. package/build/handler.js +15 -1493
  76. package/build/handler.js.map +1 -0
  77. package/build/index.js +25 -231
  78. package/build/index.js.map +1 -0
  79. package/build/server/chunks/{0--J8MXU0r.js → 0-B6UIl8X0.js} +8 -8
  80. package/build/server/chunks/0-B6UIl8X0.js.map +1 -0
  81. package/build/server/chunks/1-Dq90EpGp.js +9 -0
  82. package/build/server/chunks/1-Dq90EpGp.js.map +1 -0
  83. package/build/server/chunks/{10-CX1ex2mH.js → 10-BM8QtjX8.js} +5 -4
  84. package/build/server/chunks/10-BM8QtjX8.js.map +1 -0
  85. package/build/server/chunks/11-FZmITmkZ.js +9 -0
  86. package/build/server/chunks/11-FZmITmkZ.js.map +1 -0
  87. package/build/server/chunks/{12-Dw1Y6Xen.js → 12-BlqEGyqp.js} +4 -4
  88. package/build/server/chunks/12-BlqEGyqp.js.map +1 -0
  89. package/build/server/chunks/{2-iIDfIUc5.js → 2-D9wmJrmC.js} +3 -3
  90. package/build/server/chunks/2-D9wmJrmC.js.map +1 -0
  91. package/build/server/chunks/3-C7b_e-a7.js +9 -0
  92. package/build/server/chunks/3-C7b_e-a7.js.map +1 -0
  93. package/build/server/chunks/{4-CKQYCTZo.js → 4-DC34JtHj.js} +6 -6
  94. package/build/server/chunks/4-DC34JtHj.js.map +1 -0
  95. package/build/server/chunks/5-vZTj2V8e.js +9 -0
  96. package/build/server/chunks/5-vZTj2V8e.js.map +1 -0
  97. package/build/server/chunks/6-ClsuiYR1.js +9 -0
  98. package/build/server/chunks/6-ClsuiYR1.js.map +1 -0
  99. package/build/server/chunks/{7-DT_D0EX1.js → 7-CdnU-whk.js} +6 -6
  100. package/build/server/chunks/7-CdnU-whk.js.map +1 -0
  101. package/build/server/chunks/8-DGCxm3TB.js +9 -0
  102. package/build/server/chunks/8-DGCxm3TB.js.map +1 -0
  103. package/build/server/chunks/{9-BVttRALh.js → 9-BcuWrd-q.js} +5 -5
  104. package/build/server/chunks/9-BcuWrd-q.js.map +1 -0
  105. package/build/server/chunks/{Badge-DCQxSQCS.js → Badge-C73znQSJ.js} +2 -2
  106. package/build/server/chunks/Badge-C73znQSJ.js.map +1 -0
  107. package/build/server/chunks/{SafetyBadge-BxEGojgX.js → SafetyBadge-DbpkfzSa.js} +2 -2
  108. package/build/server/chunks/SafetyBadge-DbpkfzSa.js.map +1 -0
  109. package/build/server/chunks/{_layout.svelte-BPfWfi5Y.js → _layout.svelte-1xu00yiw.js} +4 -6
  110. package/build/server/chunks/{_layout.svelte-BPfWfi5Y.js.map → _layout.svelte-1xu00yiw.js.map} +1 -1
  111. package/build/server/chunks/{_page.svelte-xTZOj1o8.js → _page.svelte-4Xfcj342.js} +3 -3
  112. package/build/server/chunks/_page.svelte-4Xfcj342.js.map +1 -0
  113. package/build/server/chunks/{_page.svelte-qnfxKUje.js → _page.svelte-8auIN7Qo.js} +24 -21
  114. package/build/server/chunks/_page.svelte-8auIN7Qo.js.map +1 -0
  115. package/build/server/chunks/{_page.svelte-wL3fdD1l.js → _page.svelte-BXtL3d0f.js} +4 -4
  116. package/build/server/chunks/_page.svelte-BXtL3d0f.js.map +1 -0
  117. package/build/server/chunks/{_page.svelte-B8jThscg.js → _page.svelte-BaxiAFdk.js} +4 -6
  118. package/build/server/chunks/_page.svelte-BaxiAFdk.js.map +1 -0
  119. package/build/server/chunks/{_page.svelte-D9DhnmQr.js → _page.svelte-BhsBxk6l.js} +3 -5
  120. package/build/server/chunks/_page.svelte-BhsBxk6l.js.map +1 -0
  121. package/build/server/chunks/{_page.svelte-1wUrXGW-.js → _page.svelte-Br7nreH-.js} +4 -5
  122. package/build/server/chunks/_page.svelte-Br7nreH-.js.map +1 -0
  123. package/build/server/chunks/{_page.svelte-B1i4IP2u.js → _page.svelte-C1ssMQqB.js} +4 -6
  124. package/build/server/chunks/_page.svelte-C1ssMQqB.js.map +1 -0
  125. package/build/server/chunks/{_page.svelte-D8ffqrO3.js → _page.svelte-CZMhLclS.js} +5 -7
  126. package/build/server/chunks/_page.svelte-CZMhLclS.js.map +1 -0
  127. package/build/server/chunks/{_page.svelte-NwgcXZfI.js → _page.svelte-DMwgbUjH.js} +6 -7
  128. package/build/server/chunks/_page.svelte-DMwgbUjH.js.map +1 -0
  129. package/build/server/chunks/{_page.svelte-B3CasgD8.js → _page.svelte-iNuDNlPL.js} +3 -3
  130. package/build/server/chunks/_page.svelte-iNuDNlPL.js.map +1 -0
  131. package/build/server/chunks/{_page.svelte-BikYFdJv.js → _page.svelte-pVxceXG3.js} +5 -5
  132. package/build/server/chunks/_page.svelte-pVxceXG3.js.map +1 -0
  133. package/build/server/chunks/{_server.ts-D7iLlRbM.js → _server.ts-B6p7ukMz.js} +4 -5
  134. package/build/server/chunks/_server.ts-B6p7ukMz.js.map +1 -0
  135. package/build/server/chunks/{_server.ts-C49ZrV0a.js → _server.ts-BRZfMXBh.js} +2 -2
  136. package/build/server/chunks/_server.ts-BRZfMXBh.js.map +1 -0
  137. package/build/server/chunks/{_server.ts-BBDD0W6t.js → _server.ts-CCCiUW1c.js} +3 -4
  138. package/build/server/chunks/_server.ts-CCCiUW1c.js.map +1 -0
  139. package/build/server/chunks/{_server.ts-BkOJmVFg.js → _server.ts-CXojCxes.js} +5 -6
  140. package/build/server/chunks/_server.ts-CXojCxes.js.map +1 -0
  141. package/build/server/chunks/{_server.ts-rJ_Ubi9D.js → _server.ts-CqIWzdWh.js} +2 -2
  142. package/build/server/chunks/_server.ts-CqIWzdWh.js.map +1 -0
  143. package/build/server/chunks/{_server.ts-CaVH9FSD.js → _server.ts-DAqw6tHI.js} +4 -5
  144. package/build/server/chunks/_server.ts-DAqw6tHI.js.map +1 -0
  145. package/build/server/chunks/{_server.ts-Dz9oKgWc.js → _server.ts-DFARp0QA.js} +5 -6
  146. package/build/server/chunks/_server.ts-DFARp0QA.js.map +1 -0
  147. package/build/server/chunks/{_server.ts-Dwe99x74.js → _server.ts-DcfqVMUN.js} +2 -2
  148. package/build/server/chunks/_server.ts-DcfqVMUN.js.map +1 -0
  149. package/build/server/chunks/{_server.ts-DPqZOGG_.js → _server.ts-DqBabNbA.js} +4 -5
  150. package/build/server/chunks/_server.ts-DqBabNbA.js.map +1 -0
  151. package/build/server/chunks/{_server.ts-C2WpZqPW.js → _server.ts-DrY2Ctqv.js} +4 -5
  152. package/build/server/chunks/_server.ts-DrY2Ctqv.js.map +1 -0
  153. package/build/server/chunks/client-C6wXHlmK.js +24 -0
  154. package/build/server/chunks/client-C6wXHlmK.js.map +1 -0
  155. package/build/server/chunks/{doctorSummary-BOtGdd9z.js → doctorSummary-De2PTQoD.js} +3 -3
  156. package/build/server/chunks/doctorSummary-De2PTQoD.js.map +1 -0
  157. package/build/server/chunks/{error.svelte-DWPum81Y.js → error.svelte-CcYVAQ1W.js} +3 -5
  158. package/build/server/chunks/error.svelte-CcYVAQ1W.js.map +1 -0
  159. package/build/server/chunks/handler-Hnwc-LvR.js +1473 -0
  160. package/build/server/chunks/handler-Hnwc-LvR.js.map +1 -0
  161. package/build/server/chunks/{hooks.server-Dva4z7fv.js → hooks.server-CB4nMIz1.js} +4 -5
  162. package/build/server/chunks/hooks.server-CB4nMIz1.js.map +1 -0
  163. package/build/server/chunks/index.js-BISNf3Ne.js +11542 -0
  164. package/build/server/chunks/index.js-BISNf3Ne.js.map +1 -0
  165. package/build/server/{manifest.js → chunks/manifest.js-C1tyaqvp.js} +26 -30
  166. package/build/server/chunks/manifest.js-C1tyaqvp.js.map +1 -0
  167. package/build/server/chunks/{marketingSeo-DqH0vHQa.js → marketingSeo-D0c8diM4.js} +2 -2
  168. package/build/server/chunks/marketingSeo-D0c8diM4.js.map +1 -0
  169. package/build/server/chunks/{migrationReport-f6NoxAVZ.js → migrationReport-BfHleN7g.js} +2 -2
  170. package/build/server/chunks/migrationReport-BfHleN7g.js.map +1 -0
  171. package/build/server/chunks/{profileApiHelpers-DCoI7zMU.js → profileApiHelpers-CKY0z-TD.js} +2 -2
  172. package/build/server/chunks/profileApiHelpers-CKY0z-TD.js.map +1 -0
  173. package/build/server/chunks/{projectContext-B1D-bieW.js → projectContext-BtPm3MFR.js} +1098 -53
  174. package/build/server/chunks/projectContext-BtPm3MFR.js.map +1 -0
  175. package/build/server/chunks/{src2-BtraGDB1.js → src2-DwXcz8UE.js} +2 -2
  176. package/build/server/chunks/src2-DwXcz8UE.js.map +1 -0
  177. package/build/server/chunks/{src3-BXch_OaJ.js → src3-DeQh3O0_.js} +379 -6
  178. package/build/server/chunks/src3-DeQh3O0_.js.map +1 -0
  179. package/build/server/chunks/tokenStore-CTHhmHsk.js.map +1 -1
  180. package/build/shims.js +1 -0
  181. package/build/shims.js.map +1 -0
  182. package/package.json +6 -6
  183. package/build/client/_app/immutable/chunks/BcMnim1Z.js.br +0 -0
  184. package/build/client/_app/immutable/chunks/BcMnim1Z.js.gz +0 -0
  185. package/build/client/_app/immutable/chunks/BqIBYAbW.js +0 -3
  186. package/build/client/_app/immutable/chunks/BqIBYAbW.js.br +0 -0
  187. package/build/client/_app/immutable/chunks/BqIBYAbW.js.gz +0 -0
  188. package/build/client/_app/immutable/chunks/CC808Z2X.js +0 -1
  189. package/build/client/_app/immutable/chunks/CC808Z2X.js.br +0 -2
  190. package/build/client/_app/immutable/chunks/CC808Z2X.js.gz +0 -0
  191. package/build/client/_app/immutable/chunks/D5fBh0I2.js.br +0 -2
  192. package/build/client/_app/immutable/chunks/D5fBh0I2.js.gz +0 -0
  193. package/build/client/_app/immutable/chunks/DJ5W1vn7.js +0 -3
  194. package/build/client/_app/immutable/chunks/DJ5W1vn7.js.br +0 -0
  195. package/build/client/_app/immutable/chunks/DJ5W1vn7.js.gz +0 -0
  196. package/build/client/_app/immutable/chunks/DTBN031P.js.br +0 -2
  197. package/build/client/_app/immutable/chunks/DTBN031P.js.gz +0 -0
  198. package/build/client/_app/immutable/chunks/O6-aNYLC.js +0 -1
  199. package/build/client/_app/immutable/chunks/O6-aNYLC.js.br +0 -0
  200. package/build/client/_app/immutable/chunks/O6-aNYLC.js.gz +0 -0
  201. package/build/client/_app/immutable/entry/app.Drm5SkSR.js +0 -2
  202. package/build/client/_app/immutable/entry/app.Drm5SkSR.js.br +0 -0
  203. package/build/client/_app/immutable/entry/app.Drm5SkSR.js.gz +0 -0
  204. package/build/client/_app/immutable/entry/start.BbRC1ryX.js +0 -1
  205. package/build/client/_app/immutable/entry/start.BbRC1ryX.js.br +0 -0
  206. package/build/client/_app/immutable/entry/start.BbRC1ryX.js.gz +0 -0
  207. package/build/client/_app/immutable/nodes/0.BP1kFxFY.js +0 -1
  208. package/build/client/_app/immutable/nodes/0.BP1kFxFY.js.br +0 -0
  209. package/build/client/_app/immutable/nodes/0.BP1kFxFY.js.gz +0 -0
  210. package/build/client/_app/immutable/nodes/1.CSvicVYN.js +0 -1
  211. package/build/client/_app/immutable/nodes/1.CSvicVYN.js.br +0 -0
  212. package/build/client/_app/immutable/nodes/1.CSvicVYN.js.gz +0 -0
  213. package/build/client/_app/immutable/nodes/10.LJrHMplF.js +0 -3
  214. package/build/client/_app/immutable/nodes/10.LJrHMplF.js.br +0 -0
  215. package/build/client/_app/immutable/nodes/10.LJrHMplF.js.gz +0 -0
  216. package/build/client/_app/immutable/nodes/11.3lkgWYOd.js.br +0 -0
  217. package/build/client/_app/immutable/nodes/11.3lkgWYOd.js.gz +0 -0
  218. package/build/client/_app/immutable/nodes/12.p6ol8gkx.js.br +0 -0
  219. package/build/client/_app/immutable/nodes/12.p6ol8gkx.js.gz +0 -0
  220. package/build/client/_app/immutable/nodes/2.Clary1Ks.js.br +0 -0
  221. package/build/client/_app/immutable/nodes/2.Clary1Ks.js.gz +0 -0
  222. package/build/client/_app/immutable/nodes/3.BBvN4Erf.js.br +0 -0
  223. package/build/client/_app/immutable/nodes/3.BBvN4Erf.js.gz +0 -0
  224. package/build/client/_app/immutable/nodes/4.3VL8fZOS.js.br +0 -0
  225. package/build/client/_app/immutable/nodes/4.3VL8fZOS.js.gz +0 -0
  226. package/build/client/_app/immutable/nodes/5.CiNtblYV.js +0 -2
  227. package/build/client/_app/immutable/nodes/5.CiNtblYV.js.br +0 -0
  228. package/build/client/_app/immutable/nodes/5.CiNtblYV.js.gz +0 -0
  229. package/build/client/_app/immutable/nodes/6.BRCCYakl.js.br +0 -0
  230. package/build/client/_app/immutable/nodes/6.BRCCYakl.js.gz +0 -0
  231. package/build/client/_app/immutable/nodes/7._DA-s9Iz.js.br +0 -0
  232. package/build/client/_app/immutable/nodes/7._DA-s9Iz.js.gz +0 -0
  233. package/build/client/_app/immutable/nodes/8.D0vCT-mT.js +0 -1
  234. package/build/client/_app/immutable/nodes/8.D0vCT-mT.js.br +0 -2
  235. package/build/client/_app/immutable/nodes/8.D0vCT-mT.js.gz +0 -0
  236. package/build/client/_app/immutable/nodes/9.DTFYsfKM.js +0 -9
  237. package/build/client/_app/immutable/nodes/9.DTFYsfKM.js.br +0 -0
  238. package/build/client/_app/immutable/nodes/9.DTFYsfKM.js.gz +0 -0
  239. package/build/server/chunks/0--J8MXU0r.js.map +0 -1
  240. package/build/server/chunks/1-BImzM_Nb.js +0 -9
  241. package/build/server/chunks/1-BImzM_Nb.js.map +0 -1
  242. package/build/server/chunks/10-CX1ex2mH.js.map +0 -1
  243. package/build/server/chunks/11-mzYblRmm.js +0 -9
  244. package/build/server/chunks/11-mzYblRmm.js.map +0 -1
  245. package/build/server/chunks/12-Dw1Y6Xen.js.map +0 -1
  246. package/build/server/chunks/2-iIDfIUc5.js.map +0 -1
  247. package/build/server/chunks/3-DjAsck26.js +0 -9
  248. package/build/server/chunks/3-DjAsck26.js.map +0 -1
  249. package/build/server/chunks/4-CKQYCTZo.js.map +0 -1
  250. package/build/server/chunks/5-BDp1sX0Q.js +0 -9
  251. package/build/server/chunks/5-BDp1sX0Q.js.map +0 -1
  252. package/build/server/chunks/6-CUIuzy6O.js +0 -9
  253. package/build/server/chunks/6-CUIuzy6O.js.map +0 -1
  254. package/build/server/chunks/7-DT_D0EX1.js.map +0 -1
  255. package/build/server/chunks/8-DK1BCf-b.js +0 -9
  256. package/build/server/chunks/8-DK1BCf-b.js.map +0 -1
  257. package/build/server/chunks/9-BVttRALh.js.map +0 -1
  258. package/build/server/chunks/Badge-DCQxSQCS.js.map +0 -1
  259. package/build/server/chunks/SafetyBadge-BxEGojgX.js.map +0 -1
  260. package/build/server/chunks/_page.svelte-1wUrXGW-.js.map +0 -1
  261. package/build/server/chunks/_page.svelte-B1i4IP2u.js.map +0 -1
  262. package/build/server/chunks/_page.svelte-B3CasgD8.js.map +0 -1
  263. package/build/server/chunks/_page.svelte-B8jThscg.js.map +0 -1
  264. package/build/server/chunks/_page.svelte-BikYFdJv.js.map +0 -1
  265. package/build/server/chunks/_page.svelte-D8ffqrO3.js.map +0 -1
  266. package/build/server/chunks/_page.svelte-D9DhnmQr.js.map +0 -1
  267. package/build/server/chunks/_page.svelte-NwgcXZfI.js.map +0 -1
  268. package/build/server/chunks/_page.svelte-qnfxKUje.js.map +0 -1
  269. package/build/server/chunks/_page.svelte-wL3fdD1l.js.map +0 -1
  270. package/build/server/chunks/_page.svelte-xTZOj1o8.js.map +0 -1
  271. package/build/server/chunks/_server.ts-BBDD0W6t.js.map +0 -1
  272. package/build/server/chunks/_server.ts-BkOJmVFg.js.map +0 -1
  273. package/build/server/chunks/_server.ts-C2WpZqPW.js.map +0 -1
  274. package/build/server/chunks/_server.ts-C49ZrV0a.js.map +0 -1
  275. package/build/server/chunks/_server.ts-CaVH9FSD.js.map +0 -1
  276. package/build/server/chunks/_server.ts-D7iLlRbM.js.map +0 -1
  277. package/build/server/chunks/_server.ts-DPqZOGG_.js.map +0 -1
  278. package/build/server/chunks/_server.ts-Dwe99x74.js.map +0 -1
  279. package/build/server/chunks/_server.ts-Dz9oKgWc.js.map +0 -1
  280. package/build/server/chunks/_server.ts-rJ_Ubi9D.js.map +0 -1
  281. package/build/server/chunks/client-BagBHERz.js +0 -23
  282. package/build/server/chunks/client-BagBHERz.js.map +0 -1
  283. package/build/server/chunks/dev-BdIdjvaY.js +0 -4692
  284. package/build/server/chunks/dev-BdIdjvaY.js.map +0 -1
  285. package/build/server/chunks/doctorSummary-BOtGdd9z.js.map +0 -1
  286. package/build/server/chunks/error.svelte-DWPum81Y.js.map +0 -1
  287. package/build/server/chunks/hooks.server-Dva4z7fv.js.map +0 -1
  288. package/build/server/chunks/index-CLnuRv4X.js +0 -134
  289. package/build/server/chunks/index-CLnuRv4X.js.map +0 -1
  290. package/build/server/chunks/index-DBqjc0Yf.js +0 -77
  291. package/build/server/chunks/index-DBqjc0Yf.js.map +0 -1
  292. package/build/server/chunks/internal-sR_8mnoa.js +0 -1998
  293. package/build/server/chunks/internal-sR_8mnoa.js.map +0 -1
  294. package/build/server/chunks/marketingSeo-DqH0vHQa.js.map +0 -1
  295. package/build/server/chunks/migrationReport-f6NoxAVZ.js.map +0 -1
  296. package/build/server/chunks/profileApiHelpers-DCoI7zMU.js.map +0 -1
  297. package/build/server/chunks/projectContext-B1D-bieW.js.map +0 -1
  298. package/build/server/chunks/src2-BtraGDB1.js.map +0 -1
  299. package/build/server/chunks/src3-BXch_OaJ.js.map +0 -1
  300. package/build/server/index.js +0 -4593
  301. package/build/server/index.js.map +0 -1
  302. package/build/server/manifest.js.map +0 -1
  303. /package/build/client/_app/immutable/chunks/{CP97kCR3.js → xihTtKlq.js} +0 -0
  304. /package/build/client/_app/immutable/chunks/{CP97kCR3.js.br → xihTtKlq.js.br} +0 -0
  305. /package/build/client/_app/immutable/chunks/{CP97kCR3.js.gz → xihTtKlq.js.gz} +0 -0
@@ -16226,17 +16226,40 @@ var ai_profile_schema_default = {
16226
16226
  "codeReview": { "type": "boolean" },
16227
16227
  "refactoring": { "type": "boolean" },
16228
16228
  "documentation": { "type": "boolean" },
16229
+ "memoryGuidance": { "type": "boolean" },
16230
+ "loggingGuidance": { "type": "boolean" },
16229
16231
  "subagentDrivenDevelopment": { "type": "boolean" }
16230
16232
  }
16231
16233
  },
16232
16234
  "capabilities": {
16233
16235
  "type": "object",
16234
16236
  "additionalProperties": false,
16235
- "properties": { "delegation": {
16236
- "type": "object",
16237
- "additionalProperties": false,
16238
- "properties": { "subagents": { "$ref": "#/definitions/subagents" } }
16239
- } }
16237
+ "properties": {
16238
+ "skills": {
16239
+ "type": "object",
16240
+ "additionalProperties": false,
16241
+ "properties": { "packs": {
16242
+ "type": "array",
16243
+ "uniqueItems": true,
16244
+ "items": {
16245
+ "type": "string",
16246
+ "enum": [
16247
+ "base",
16248
+ "review",
16249
+ "advanced-review",
16250
+ "automation",
16251
+ "mcp-recommendations"
16252
+ ]
16253
+ }
16254
+ } }
16255
+ },
16256
+ "delegation": {
16257
+ "type": "object",
16258
+ "additionalProperties": false,
16259
+ "properties": { "subagents": { "$ref": "#/definitions/subagents" } }
16260
+ },
16261
+ "hooks": { "$ref": "#/definitions/hooks" }
16262
+ }
16240
16263
  },
16241
16264
  "permissions": {
16242
16265
  "type": "object",
@@ -16324,6 +16347,34 @@ var ai_profile_schema_default = {
16324
16347
  "uniqueItems": true,
16325
16348
  "items": { "$ref": "#/definitions/slug" }
16326
16349
  },
16350
+ "hooks": {
16351
+ "type": "object",
16352
+ "additionalProperties": false,
16353
+ "required": ["enabled"],
16354
+ "properties": {
16355
+ "enabled": { "type": "boolean" },
16356
+ "advisory": {
16357
+ "type": "array",
16358
+ "uniqueItems": true,
16359
+ "items": {
16360
+ "type": "string",
16361
+ "enum": [
16362
+ "final-review-reminder",
16363
+ "context-injection",
16364
+ "pre-compact-checkpoint"
16365
+ ]
16366
+ }
16367
+ }
16368
+ },
16369
+ "if": {
16370
+ "properties": { "enabled": { "const": false } },
16371
+ "required": ["enabled"]
16372
+ },
16373
+ "then": { "properties": { "advisory": {
16374
+ "type": "array",
16375
+ "maxItems": 0
16376
+ } } }
16377
+ },
16327
16378
  "subagents": {
16328
16379
  "type": "object",
16329
16380
  "additionalProperties": false,
@@ -16347,20 +16398,37 @@ var ai_profile_schema_default = {
16347
16398
  "agents": {
16348
16399
  "type": "array",
16349
16400
  "items": { "$ref": "#/definitions/subagent" }
16401
+ },
16402
+ "packs": {
16403
+ "type": "array",
16404
+ "uniqueItems": true,
16405
+ "items": {
16406
+ "type": "string",
16407
+ "enum": ["reviewer-subagents"]
16408
+ }
16350
16409
  }
16351
16410
  },
16352
16411
  "if": {
16353
16412
  "properties": { "enabled": { "const": true } },
16354
16413
  "required": ["enabled"]
16355
16414
  },
16356
- "then": {
16415
+ "then": { "anyOf": [{
16357
16416
  "required": ["agents"],
16358
16417
  "properties": { "agents": {
16359
16418
  "type": "array",
16360
- "minItems": 1,
16361
- "items": { "$ref": "#/definitions/subagent" }
16419
+ "minItems": 1
16362
16420
  } }
16363
- }
16421
+ }, {
16422
+ "required": ["packs"],
16423
+ "properties": { "packs": {
16424
+ "type": "array",
16425
+ "minItems": 1
16426
+ } }
16427
+ }] },
16428
+ "else": { "properties": { "packs": {
16429
+ "type": "array",
16430
+ "maxItems": 0
16431
+ } } }
16364
16432
  },
16365
16433
  "subagent": { "oneOf": [{ "$ref": "#/definitions/subagentTemplateRef" }, { "$ref": "#/definitions/subagentInline" }] },
16366
16434
  "subagentTemplateRef": {
@@ -16449,12 +16517,75 @@ var ai_profile_schema_default = {
16449
16517
  }
16450
16518
  };
16451
16519
  //#endregion
16520
+ //#region ../../packages/core/src/reviewer-definitions.ts
16521
+ var REVIEWER_DEFINITIONS = [
16522
+ {
16523
+ skillId: "security-review",
16524
+ reviewerId: "security-reviewer",
16525
+ title: "Security Review",
16526
+ description: "Review exploit paths, secret exposure, unsafe permissions, injection, authentication and authorization, supply-chain risk, and data leakage.",
16527
+ focus: [
16528
+ "Exploit paths and trust-boundary violations.",
16529
+ "Secret exposure, unsafe permissions, and data leakage.",
16530
+ "Injection and authentication or authorization failures.",
16531
+ "Supply-chain and dependency risk introduced by the change."
16532
+ ]
16533
+ },
16534
+ {
16535
+ skillId: "readability-review",
16536
+ reviewerId: "readability-reviewer",
16537
+ title: "Readability Review",
16538
+ description: "Review naming, decomposition, control flow, duplication, comments, error-handling clarity, and unnecessary abstraction.",
16539
+ focus: [
16540
+ "Names that communicate intent and domain meaning.",
16541
+ "Decomposition, control flow, and error-handling clarity.",
16542
+ "Duplication and comments that obscure rather than explain.",
16543
+ "Unnecessary abstraction or indirection."
16544
+ ]
16545
+ },
16546
+ {
16547
+ skillId: "test-review",
16548
+ reviewerId: "test-reviewer",
16549
+ title: "Test Review",
16550
+ description: "Review missing cases, regression coverage, flaky patterns, fixture quality, edge cases, and behavior-versus-implementation testing.",
16551
+ focus: [
16552
+ "Missing regression and edge-case coverage.",
16553
+ "Flaky patterns and weak fixture quality.",
16554
+ "Assertions on observable behavior rather than implementation details.",
16555
+ "Negative paths, validation order, and failure contracts."
16556
+ ]
16557
+ },
16558
+ {
16559
+ skillId: "architecture-review",
16560
+ reviewerId: "architecture-reviewer",
16561
+ title: "Architecture Review",
16562
+ description: "Review module boundaries, dependency direction, contracts, migration risk, and fit to the product architecture.",
16563
+ focus: [
16564
+ "Module boundaries and dependency direction.",
16565
+ "Public contracts and compatibility impact.",
16566
+ "Migration, rollout, and generated-artifact risk.",
16567
+ "Fit with the documented product architecture."
16568
+ ]
16569
+ }
16570
+ ];
16571
+ //#endregion
16452
16572
  //#region ../../packages/core/src/profile.ts
16453
16573
  var SUBAGENT_TEMPLATE_NAMES = [
16454
16574
  "implementer",
16455
16575
  "spec-reviewer",
16456
16576
  "code-quality-reviewer"
16457
16577
  ];
16578
+ var ADVISORY_HOOK_ROLE_IDS = [
16579
+ "final-review-reminder",
16580
+ "context-injection",
16581
+ "pre-compact-checkpoint"
16582
+ ];
16583
+ function getSelectedAdvisoryHookRoles(profile) {
16584
+ const block = profile.capabilities?.hooks;
16585
+ if (!block || block.enabled !== true) return [];
16586
+ const selected = new Set(block.advisory ?? []);
16587
+ return ADVISORY_HOOK_ROLE_IDS.filter((role) => selected.has(role));
16588
+ }
16458
16589
  function isSubagentTemplateRef(entry) {
16459
16590
  return typeof entry.useTemplate === "string";
16460
16591
  }
@@ -16615,9 +16746,21 @@ function getSubagentDefaults(profile) {
16615
16746
  function getEnabledSubagents(profile) {
16616
16747
  const block = profile.capabilities?.delegation?.subagents;
16617
16748
  if (!block || block.enabled !== true) return [];
16618
- return (block.agents ?? []).map((entry) => expandSubagentEntry(entry));
16749
+ const agents = (block.agents ?? []).map((entry) => expandSubagentEntry(entry));
16750
+ if (block.packs?.includes("reviewer-subagents")) agents.push(...REVIEWER_DEFINITIONS.map((definition) => ({
16751
+ name: definition.reviewerId,
16752
+ description: definition.description,
16753
+ purpose: `Perform a focused ${definition.title.toLowerCase()} of the requested change.`,
16754
+ prompt: `Review the requested change as a ${definition.title.toLowerCase()} specialist.\n\nFocus on:\n${definition.focus.map((item) => `- ${item}`).join("\n")}\n\nDo not edit files, run commands, install dependencies, read secrets, contact production systems, or upload source.\n\nReport exactly:\n- Status: CLEAR | FINDINGS | NEEDS_CONTEXT\n- Findings grouped by severity with evidence and affected path or contract\n- Missing evidence or context\n- Recommendation`,
16755
+ toolScope: "read-only",
16756
+ modelPreference: "capable",
16757
+ maxTurns: 10,
16758
+ timeoutMinutes: 8,
16759
+ mcpServers: []
16760
+ })));
16761
+ return agents;
16619
16762
  }
16620
- var SUBAGENT_BUILTIN_NAMES_NORMALIZED = new Set([
16763
+ var SUBAGENT_BUILTIN_NAMES_NORMALIZED = /* @__PURE__ */ new Set([
16621
16764
  "default",
16622
16765
  "worker",
16623
16766
  "explorer",
@@ -16739,8 +16882,16 @@ function validateSubagentSemantics(profile) {
16739
16882
  const issues = [];
16740
16883
  const seenRaw = /* @__PURE__ */ new Map();
16741
16884
  const seenNormalized = /* @__PURE__ */ new Map();
16885
+ const packNames = subagents.packs?.includes("reviewer-subagents") ? new Set(REVIEWER_DEFINITIONS.map((definition) => normalizeSubagentName(definition.reviewerId))) : /* @__PURE__ */ new Set();
16742
16886
  entries.forEach((entry, index) => {
16743
16887
  const name = expandSubagentEntry(entry).name;
16888
+ if (packNames.has(normalizeSubagentName(name))) issues.push({
16889
+ code: "schema_validation_error",
16890
+ path: `/capabilities/delegation/subagents/agents/${index}/name`,
16891
+ expected: "name distinct from expanded subagent packs",
16892
+ actual: "collision with reviewer-subagents",
16893
+ message: `/capabilities/delegation/subagents/agents/${index}/name collides with a subagent generated by the reviewer-subagents pack.`
16894
+ });
16744
16895
  const rawIndex = seenRaw.get(name);
16745
16896
  if (rawIndex !== void 0) issues.push({
16746
16897
  code: "schema_validation_error",
@@ -16811,6 +16962,8 @@ function renderProfileYaml(profile) {
16811
16962
  if (profile.workflow.codeReview !== void 0) workflow["codeReview"] = profile.workflow.codeReview;
16812
16963
  if (profile.workflow.refactoring !== void 0) workflow["refactoring"] = profile.workflow.refactoring;
16813
16964
  if (profile.workflow.documentation !== void 0) workflow["documentation"] = profile.workflow.documentation;
16965
+ if (profile.workflow.memoryGuidance !== void 0) workflow["memoryGuidance"] = profile.workflow.memoryGuidance;
16966
+ if (profile.workflow.loggingGuidance !== void 0) workflow["loggingGuidance"] = profile.workflow.loggingGuidance;
16814
16967
  if (profile.workflow.subagentDrivenDevelopment !== void 0) workflow["subagentDrivenDevelopment"] = profile.workflow.subagentDrivenDevelopment;
16815
16968
  doc["workflow"] = workflow;
16816
16969
  if (profile.capabilities !== void 0) doc["capabilities"] = buildCapabilitiesDoc(profile.capabilities);
@@ -16823,6 +16976,11 @@ function renderProfileYaml(profile) {
16823
16976
  }
16824
16977
  function buildCapabilitiesDoc(capabilities) {
16825
16978
  const doc = {};
16979
+ if (capabilities.skills !== void 0) {
16980
+ const skills = {};
16981
+ if (capabilities.skills.packs !== void 0) skills["packs"] = capabilities.skills.packs;
16982
+ doc["skills"] = skills;
16983
+ }
16826
16984
  if (capabilities.delegation !== void 0) {
16827
16985
  const delegation = {};
16828
16986
  const subagents = capabilities.delegation.subagents;
@@ -16835,10 +16993,16 @@ function buildCapabilitiesDoc(capabilities) {
16835
16993
  if (Object.keys(defaults).length > 0) block["defaults"] = defaults;
16836
16994
  }
16837
16995
  if (subagents.agents !== void 0) block["agents"] = subagents.agents.map((entry) => isSubagentTemplateRef(entry) ? { useTemplate: entry.useTemplate } : buildSubagentDoc(entry));
16996
+ if (subagents.packs !== void 0) block["packs"] = subagents.packs;
16838
16997
  delegation["subagents"] = block;
16839
16998
  }
16840
16999
  if (Object.keys(delegation).length > 0) doc["delegation"] = delegation;
16841
17000
  }
17001
+ if (capabilities.hooks !== void 0) {
17002
+ const hooks = { enabled: capabilities.hooks.enabled };
17003
+ if (capabilities.hooks.advisory !== void 0) hooks["advisory"] = capabilities.hooks.advisory;
17004
+ doc["hooks"] = hooks;
17005
+ }
16842
17006
  return doc;
16843
17007
  }
16844
17008
  function buildSubagentDoc(agent) {
@@ -17050,6 +17214,7 @@ function getDefaultTargetIds() {
17050
17214
  "tabnine-mcp-config",
17051
17215
  "tabnine-subagents",
17052
17216
  "codex-config",
17217
+ "codex-hooks",
17053
17218
  "codex-workflow-skills",
17054
17219
  "codex-subagents",
17055
17220
  "claude-settings",
@@ -17091,7 +17256,7 @@ function compareText(left, right) {
17091
17256
  }
17092
17257
  //#endregion
17093
17258
  //#region ../../packages/compiler/src/lockfile.ts
17094
- var SUPPORTED_VERSIONS = new Set([1, 2]);
17259
+ var SUPPORTED_VERSIONS = /* @__PURE__ */ new Set([1, 2]);
17095
17260
  function buildLockfile(input) {
17096
17261
  const profilePath = safeOutputPath(input.profilePath ?? "ai-profile.yaml");
17097
17262
  const mixedByPath = new Map((input.mixedOutputs ?? []).map((entry) => [safeOutputPath(entry.path), entry]));
@@ -17959,6 +18124,73 @@ var DOCUMENTATION_TOPIC = {
17959
18124
  tabnineChecklistReference: "See `90-final-review.md` for the shared final-review checklist.",
17960
18125
  agentsMdChecklistReference: "See the `## Completion Checklist` section for shared review steps."
17961
18126
  };
18127
+ var MEMORY_GUIDANCE_TOPIC = {
18128
+ tabnineTitle: "Memory Guidance",
18129
+ agentsMdTitle: "Memory Guidance",
18130
+ intro: "Use these rules to decide what belongs in agent memory and where each enabled client persists it.",
18131
+ subsections: [
18132
+ {
18133
+ heading: "Where Memory Lives",
18134
+ bullets: [
18135
+ "Claude Code keeps durable project instructions in `CLAUDE.md` and its auto-memory surface.",
18136
+ "Codex keeps durable project instructions in `AGENTS.md` and its Memories surface.",
18137
+ "Tabnine uses project guidelines for durable instructions; no project-local memory contract is verified, so treat Tabnine memory as unverified rather than assumed.",
18138
+ "Precedence between these surfaces is target-specific; do not assume one client's ordering applies to another."
18139
+ ]
18140
+ },
18141
+ {
18142
+ heading: "Never Store In Memory",
18143
+ bullets: ["Never store secrets, tokens, credentials, private keys, production access, personal/customer data, or one-time debugging context in memory."]
18144
+ },
18145
+ {
18146
+ heading: "Keep Memory Durable",
18147
+ bullets: ["Store durable decisions and conventions, not session-specific or volatile state.", "Delete a wrong memory instead of adding a second memory to correct around it."]
18148
+ }
18149
+ ],
18150
+ tabnineChecklistReference: "See `90-final-review.md` for the shared final-review checklist.",
18151
+ agentsMdChecklistReference: "See the `## Completion Checklist` section for shared review steps."
18152
+ };
18153
+ var LOGGING_GUIDANCE_TOPIC = {
18154
+ tabnineTitle: "Logging Guidance",
18155
+ agentsMdTitle: "Logging Guidance",
18156
+ intro: "Use these rules to decide what to log, how to name it, and how to keep diagnostics safe and separate from product output.",
18157
+ subsections: [
18158
+ {
18159
+ heading: "Debug vs Observability",
18160
+ bullets: [
18161
+ "Separate throwaway debug output from durable observability: debug prints exist only to diagnose a failure in progress.",
18162
+ "Remove debug output before marking work done; leftover debug prints are a defect, not a feature.",
18163
+ "Prefer a narrower failing test over debug prints to isolate a problem."
18164
+ ]
18165
+ },
18166
+ {
18167
+ heading: "Project Convention Precedence",
18168
+ bullets: ["Follow the project's existing logging convention when one exists; do not invent an ad hoc format alongside it.", "When no convention exists, propose one as an ADR candidate before adopting it; never invent a convention ad hoc."]
18169
+ },
18170
+ {
18171
+ heading: "Stable Event Codes",
18172
+ bullets: ["Attach a stable event code to each new error path instead of free text.", "Keep codes stable so support and tooling can rely on them; free-text messages are not a substitute."]
18173
+ },
18174
+ {
18175
+ heading: "Redaction Rule",
18176
+ bullets: ["Never log secrets, tokens, credentials, environment variable values, user file contents, or personal or production data. Log by allowlist: only values explicitly known to be safe."]
18177
+ },
18178
+ {
18179
+ heading: "Channel Separation",
18180
+ bullets: ["Keep diagnostics on the diagnostic channel so they never contaminate machine or product output (stderr vs stdout, or the platform equivalent)."]
18181
+ },
18182
+ {
18183
+ heading: "Logs and Tests",
18184
+ bullets: ["Treat support-relied logs as observable behavior that deserves tests.", "Never assert on incidental debug logs."]
18185
+ },
18186
+ {
18187
+ heading: "Priority Order",
18188
+ bullets: ["When these rules conflict, apply them in this order: redaction > convention > codes (redaction beats project convention beats event codes)."]
18189
+ }
18190
+ ],
18191
+ tabnineChecklistReference: "See `90-final-review.md` for the shared final-review checklist.",
18192
+ agentsMdChecklistReference: "See the `## Completion Checklist` section for shared review steps."
18193
+ };
17962
18194
  function renderTopicAsTabnineGuideline(topic) {
17963
18195
  const sections = topic.subsections.map((subsection) => `## ${subsection.heading}\n\n${subsection.bullets.map((bullet) => `- ${bullet}`).join("\n")}\n`).join("\n");
17964
18196
  return `<!-- Generated by Agent Profile Compiler. Do not edit by hand. -->
@@ -17983,33 +18215,507 @@ ${topic.agentsMdChecklistReference}
17983
18215
  `;
17984
18216
  }
17985
18217
  //#endregion
17986
- //#region ../../packages/compiler/src/compiler.ts
17987
- var WORKFLOW_SKILLS = [
17988
- {
17989
- id: "grill-change",
17990
- workflowFlag: "sdd"
18218
+ //#region ../../packages/compiler/src/phase12-skill-content.ts
18219
+ function renderBullets(items) {
18220
+ return items.map((item) => `- ${item}`).join("\n");
18221
+ }
18222
+ function renderReviewChangeSkill(selectedSkills) {
18223
+ const sections = CODE_REVIEW_TOPIC.subsections.map((section) => `## ${section.heading}\n\n${renderBullets(section.bullets)}`).join("\n\n");
18224
+ const specialists = REVIEWER_DEFINITIONS.filter((definition) => selectedSkills.has(definition.skillId));
18225
+ const specialistSection = specialists.length === 0 ? "" : `\n\n## Specialist Reviews\n\n${specialists.map((definition) => `- For a deeper pass, run \`${definition.skillId}\`.`).join("\n")}`;
18226
+ return `---
18227
+ name: review-change
18228
+ description: Use to review a proposed change for correctness, security-sensitive behavior, readability, tests, performance when relevant, architecture and contract impact, and generated-file drift.
18229
+ ---
18230
+
18231
+ <!-- Generated by Agent Profile Compiler. Do not edit by hand. -->
18232
+
18233
+ # Review Change
18234
+
18235
+ ${CODE_REVIEW_TOPIC.intro}
18236
+
18237
+ ${sections}${specialistSection}
18238
+
18239
+ ## Safety
18240
+
18241
+ - Review only; do not rewrite or apply patches unless the user asks.
18242
+ - Do not upload source code or read or print secrets.
18243
+ - Do not install dependencies, contact production systems, or broaden permissions.
18244
+ `;
18245
+ }
18246
+ function renderSpecialistSkill(definition) {
18247
+ return `---
18248
+ name: ${definition.skillId}
18249
+ description: ${definition.description}
18250
+ ---
18251
+
18252
+ <!-- Generated by Agent Profile Compiler. Do not edit by hand. -->
18253
+
18254
+ # ${definition.title}
18255
+
18256
+ ## Focus
18257
+
18258
+ ${renderBullets(definition.focus)}
18259
+
18260
+ ## Output Discipline
18261
+
18262
+ - Lead with prioritized findings and concrete evidence.
18263
+ - Cite the affected file, symbol, or contract when available.
18264
+ - Distinguish confirmed defects from risks or missing evidence.
18265
+ - Do not edit or rewrite the change unless the user asks.
18266
+
18267
+ ## Safety
18268
+
18269
+ - Review only; do not run scanners, install tools, or broaden permissions.
18270
+ - Do not upload source code or read or print secrets.
18271
+ - Do not contact production systems or external services.
18272
+ `;
18273
+ }
18274
+ function renderSpecialistReviewSkill(skill) {
18275
+ const definition = REVIEWER_DEFINITIONS.find((candidate) => candidate.skillId === skill);
18276
+ return definition === void 0 ? void 0 : renderSpecialistSkill(definition);
18277
+ }
18278
+ function renderMcpFitCheckSkill() {
18279
+ return `---
18280
+ name: mcp-fit-check
18281
+ description: Use to assess whether current documentation through an MCP, docs, or search integration may help with a dependency that may be newer than the client's knowledge.
18282
+ ---
18283
+
18284
+ <!-- Generated by Agent Profile Compiler. Do not edit by hand. -->
18285
+
18286
+ # MCP Fit Check
18287
+
18288
+ ## Assessment
18289
+
18290
+ 1. Identify the dependency, framework, runtime, or SDK whose current behavior matters.
18291
+ 2. Explain why it may be newer than the client's knowledge; never claim the model definitely lacks that knowledge.
18292
+ 3. Recommend only the type of current documentation integration that may help and explain its risk.
18293
+ 4. Keep the result informational and defer every install or configuration decision to the user.
18294
+
18295
+ ## Boundaries
18296
+
18297
+ - Never install or configure an MCP server, documentation connector, or search integration.
18298
+ - Do not generate MCP configuration, server commands, install commands, environment variable names, tokens, or arbitrary MCP ids.
18299
+ - Do not make network calls, execute commands, or change files.
18300
+ - Do not read or print secrets.
18301
+
18302
+ ## Output
18303
+
18304
+ Report the dependency, why current docs may help, the recommended integration category, its risk, and the explicit next decision for the user.
18305
+ `;
18306
+ }
18307
+ //#endregion
18308
+ //#region ../../packages/compiler/src/skill-selection.ts
18309
+ var SKILL_ORDER = [
18310
+ "grill-change",
18311
+ "request-to-spec-issues",
18312
+ "sdd-change",
18313
+ "tdd-change",
18314
+ "final-review",
18315
+ "subagent-driven-change",
18316
+ "implement-next",
18317
+ "review-change",
18318
+ "security-review",
18319
+ "readability-review",
18320
+ "test-review",
18321
+ "architecture-review",
18322
+ "loop-implement-test-fix",
18323
+ "loop-review-patch-retest",
18324
+ "loop-security-patch-retest",
18325
+ "loop-docs-update",
18326
+ "loop-sdd-cycle",
18327
+ "mcp-fit-check"
18328
+ ];
18329
+ var LOOP_SKILL_IDS = [
18330
+ "loop-implement-test-fix",
18331
+ "loop-review-patch-retest",
18332
+ "loop-security-patch-retest",
18333
+ "loop-docs-update",
18334
+ "loop-sdd-cycle"
18335
+ ];
18336
+ function isLoopSkillId(skill) {
18337
+ return LOOP_SKILL_IDS.includes(skill);
18338
+ }
18339
+ var MODEL_INVOCATION_ENTRY_POINTS = [
18340
+ "grill-change",
18341
+ "request-to-spec-issues",
18342
+ "implement-next",
18343
+ ...LOOP_SKILL_IDS
18344
+ ];
18345
+ var DISABLE_MODEL_INVOCATION_TARGETS = ["claude-workflow-skills"];
18346
+ function isModelInvocationEntryPoint(skill) {
18347
+ return MODEL_INVOCATION_ENTRY_POINTS.includes(skill);
18348
+ }
18349
+ /**
18350
+ * The closed policy function: emit `disable-model-invocation: true` iff the
18351
+ * skill is an entry point AND the target verifiably supports the flag.
18352
+ * Unverified target support means the flag is omitted (skill still emitted).
18353
+ */
18354
+ function disablesModelInvocation(skill, target) {
18355
+ return isModelInvocationEntryPoint(skill) && DISABLE_MODEL_INVOCATION_TARGETS.includes(target);
18356
+ }
18357
+ var PACK_SKILLS = {
18358
+ base: [
18359
+ "sdd-change",
18360
+ "tdd-change",
18361
+ "final-review"
18362
+ ],
18363
+ review: ["review-change"],
18364
+ "advanced-review": [
18365
+ "security-review",
18366
+ "readability-review",
18367
+ "test-review",
18368
+ "architecture-review"
18369
+ ],
18370
+ automation: [
18371
+ "loop-implement-test-fix",
18372
+ "loop-review-patch-retest",
18373
+ "loop-security-patch-retest",
18374
+ "loop-docs-update",
18375
+ "loop-sdd-cycle"
18376
+ ],
18377
+ "mcp-recommendations": ["mcp-fit-check"]
18378
+ };
18379
+ function resolveSkillPacks(packs) {
18380
+ const selected = /* @__PURE__ */ new Set();
18381
+ for (const pack of packs) for (const skill of PACK_SKILLS[pack]) selected.add(skill);
18382
+ return SKILL_ORDER.filter((skill) => selected.has(skill));
18383
+ }
18384
+ /**
18385
+ * Phase 24 (I4): `implement-next` dispatches one ready ledger task through the
18386
+ * subagent-driven cycle. It is emitted only when both prerequisites it consumes
18387
+ * are also emitted - `request-to-spec-issues` (from `sdd`) for the persisted
18388
+ * brief/ledger format, and `subagent-driven-change` (from
18389
+ * `subagentDrivenDevelopment`) for the implementer -> spec-reviewer ->
18390
+ * code-quality-reviewer chain. The workflow-skill targets (Codex and Claude)
18391
+ * are both `confirmed-official` for that chain; Tabnine is a missing-capability
18392
+ * target and gets an informational note instead (see the compiler).
18393
+ */
18394
+ function emitsImplementNext(workflow) {
18395
+ return workflow.sdd === true && workflow.subagentDrivenDevelopment === true;
18396
+ }
18397
+ function resolveSkills(input) {
18398
+ const selected = /* @__PURE__ */ new Set();
18399
+ if (input.workflow.sdd) {
18400
+ selected.add("grill-change");
18401
+ selected.add("request-to-spec-issues");
18402
+ selected.add("sdd-change");
18403
+ }
18404
+ if (input.workflow.tdd) selected.add("tdd-change");
18405
+ if (input.workflow.finalReview) selected.add("final-review");
18406
+ if (input.workflow.subagentDrivenDevelopment === true) selected.add("subagent-driven-change");
18407
+ if (emitsImplementNext(input.workflow)) selected.add("implement-next");
18408
+ if (input.workflow.codeReview === true) selected.add("review-change");
18409
+ for (const skill of resolveSkillPacks(input.packs)) selected.add(skill);
18410
+ return SKILL_ORDER.filter((skill) => selected.has(skill));
18411
+ }
18412
+ function resolveSelectedSkills(profile) {
18413
+ return resolveSkills({
18414
+ workflow: profile.workflow,
18415
+ packs: profile.capabilities?.skills?.packs ?? []
18416
+ });
18417
+ }
18418
+ //#endregion
18419
+ //#region ../../packages/compiler/src/loop-skill-content.ts
18420
+ var MAX_ITERATIONS = 3;
18421
+ var LOOP_SKILL_DEFINITIONS = {
18422
+ "loop-implement-test-fix": {
18423
+ description: "Use to run a bounded implement, test, and fix loop that stops on green, on no diff, or on a repeated identical failure.",
18424
+ title: "Loop: Implement, Test, Fix",
18425
+ intro: "Drive a small implementation to green through a bounded number of iterations. Each iteration makes one focused change, runs the relevant checks, and reacts to the result.",
18426
+ steps: [
18427
+ "Implement the smallest change that moves the task toward its acceptance criteria.",
18428
+ {
18429
+ skill: "tdd-change",
18430
+ pointer: "Prove the change with a focused test first; run `tdd-change` for the red/green discipline.",
18431
+ inline: "Prove the change with a focused failing test first, then make it pass."
18432
+ },
18433
+ "Run the narrowest relevant test or check command and read the result.",
18434
+ "If it fails, apply one focused fix and continue to the next iteration."
18435
+ ]
17991
18436
  },
17992
- {
17993
- id: "request-to-spec-issues",
17994
- workflowFlag: "sdd"
18437
+ "loop-review-patch-retest": {
18438
+ description: "Use to run a bounded review, patch, and retest loop that stops on green, on no diff, or on a repeated identical finding.",
18439
+ title: "Loop: Review, Patch, Retest",
18440
+ intro: "Iterate on review findings for a change until the review is clean, bounded by a hard iteration cap. Each iteration reviews, patches one finding cluster, and retests.",
18441
+ steps: [
18442
+ {
18443
+ skill: "review-change",
18444
+ pointer: "Review the change for correctness and contract impact; run `review-change` for the full pass.",
18445
+ inline: "Review the change for correctness, tests, and contract impact."
18446
+ },
18447
+ "Patch the highest-priority findings with a focused change.",
18448
+ "Rerun the relevant tests and checks and confirm the finding is resolved."
18449
+ ]
17995
18450
  },
17996
- {
17997
- id: "sdd-change",
17998
- workflowFlag: "sdd"
18451
+ "loop-security-patch-retest": {
18452
+ description: "Use to run a bounded security-review, patch, and retest loop that stops on green, on no diff, or on a repeated identical finding.",
18453
+ title: "Loop: Security Review, Patch, Retest",
18454
+ intro: "Iterate on security-sensitive findings for a change until they are resolved, bounded by a hard iteration cap. Each iteration reviews for security risk, patches, and retests.",
18455
+ steps: [
18456
+ {
18457
+ skill: "security-review",
18458
+ pointer: "Review the change for security-sensitive behavior; run `security-review` for the focused pass.",
18459
+ inline: "Review the change for security-sensitive behavior and injection, secret-handling, and permission risks."
18460
+ },
18461
+ "Patch the highest-severity finding with a focused, minimal change.",
18462
+ "Rerun the relevant tests and checks and confirm the risk is resolved without regressions."
18463
+ ]
18464
+ },
18465
+ "loop-docs-update": {
18466
+ description: "Use to run a bounded documentation drift scan, update, and re-verify loop that stops when docs match the code, on no diff, or on a repeated identical mismatch.",
18467
+ title: "Loop: Documentation Update",
18468
+ intro: "Bring documentation back in sync with the code through a bounded number of iterations. Each iteration scans for drift, updates one area, and re-verifies against the source.",
18469
+ steps: [
18470
+ "Scan the docs for statements that no longer match the current code or contracts.",
18471
+ "Update one drifted area to match the code, keeping the change focused.",
18472
+ "Re-verify the updated docs against the source and note any remaining drift."
18473
+ ]
17999
18474
  },
18475
+ "loop-sdd-cycle": {
18476
+ description: "Use to run a bounded spec, tests, implementation, and verify cycle that stops on green, on no diff, or on a repeated identical failure.",
18477
+ title: "Loop: SDD Cycle",
18478
+ intro: "Advance one approved spec slice through spec, tests, implementation, and verification in bounded iterations. Each iteration takes the smallest slice that keeps the spec and its tests in step.",
18479
+ steps: [
18480
+ {
18481
+ skill: "sdd-change",
18482
+ pointer: "Confirm the slice against the approved spec; run `sdd-change` for the spec-first discipline.",
18483
+ inline: "Confirm the slice against the approved spec before changing behavior."
18484
+ },
18485
+ {
18486
+ skill: "tdd-change",
18487
+ pointer: "Add or update a focused failing test for the slice; run `tdd-change` for the red/green discipline.",
18488
+ inline: "Add or update a focused failing test for the slice before implementing."
18489
+ },
18490
+ "Implement the smallest change that satisfies the failing test and the spec.",
18491
+ {
18492
+ skill: "final-review",
18493
+ pointer: "Verify the slice against the spec and acceptance criteria; run `final-review` before handoff.",
18494
+ inline: "Verify the slice against the spec and its acceptance criteria before handoff."
18495
+ }
18496
+ ]
18497
+ }
18498
+ };
18499
+ function renderStep(step, index, selectedSkills) {
18500
+ const text = typeof step === "string" ? step : selectedSkills.has(step.skill) ? step.pointer : step.inline;
18501
+ return `${index + 1}. ${text}`;
18502
+ }
18503
+ function renderLoopSkill(skill, selectedSkills) {
18504
+ const definition = LOOP_SKILL_DEFINITIONS[skill];
18505
+ const steps = definition.steps.map((step, index) => renderStep(step, index, selectedSkills)).join("\n");
18506
+ return `---
18507
+ name: ${skill}
18508
+ description: ${definition.description}
18509
+ ---
18510
+
18511
+ <!-- Generated by Agent Profile Compiler. Do not edit by hand. -->
18512
+
18513
+ # ${definition.title}
18514
+
18515
+ ${definition.intro}
18516
+
18517
+ ## Loop Steps
18518
+
18519
+ ${steps}
18520
+
18521
+ ## Max Iterations
18522
+
18523
+ The loop runs at most ${MAX_ITERATIONS} iterations. When it reaches ${MAX_ITERATIONS} iterations without meeting a stop condition, it stops unconditionally and reports the unfinished state and the outstanding work; it never raises the bound to keep going.
18524
+
18525
+ ## Stop Conditions
18526
+
18527
+ Stop the loop as soon as any of these holds:
18528
+
18529
+ - The relevant tests and checks are green.
18530
+ - An iteration produces no diff.
18531
+ - The same failure repeats identically across two consecutive iterations.
18532
+
18533
+ ## Approval Gate
18534
+
18535
+ - Get explicit human approval before any write, commit, or destructive step in each iteration.
18536
+ - The loop never self-approves, never continues past the iteration bound, and never runs destructive commands on its own authority.
18537
+ - Pause and surface the state whenever approval is missing.
18538
+
18539
+ ## Safety
18540
+
18541
+ - Do not upload source code.
18542
+ - Do not read or print secrets.
18543
+ - APC does not run this loop; a human or agent follows these instructions and remains in control.
18544
+ `;
18545
+ }
18546
+ function renderLoopSkillContent(skill, selectedSkills = /* @__PURE__ */ new Set()) {
18547
+ return LOOP_SKILL_IDS.includes(skill) ? renderLoopSkill(skill, selectedSkills) : void 0;
18548
+ }
18549
+ /**
18550
+ * Not-supported note for the automation pack on a Tabnine-including target set
18551
+ * (never silence). Loop skills are skills-capable-client artifacts only;
18552
+ * Tabnine gets an explicit informational note, consistent with the
18553
+ * unsupported-target rule.
18554
+ */
18555
+ function automationTabnineNote(path) {
18556
+ return {
18557
+ code: "automation_target_not_generated",
18558
+ path,
18559
+ expected: "skills-capable client (Claude or Codex)",
18560
+ actual: "Tabnine has no loop skill surface",
18561
+ message: "capabilities.skills.packs automation loop skills are not generated for Tabnine: loop skills target skills-capable clients (Claude and Codex) only."
18562
+ };
18563
+ }
18564
+ //#endregion
18565
+ //#region ../../packages/compiler/src/hooks.ts
18566
+ var VERIFIED_CLAUDE_HOOK_EVENTS = [
18567
+ "SessionStart",
18568
+ "Setup",
18569
+ "InstructionsLoaded",
18570
+ "UserPromptSubmit",
18571
+ "UserPromptExpansion",
18572
+ "MessageDisplay",
18573
+ "PreToolUse",
18574
+ "PermissionRequest",
18575
+ "PostToolUse",
18576
+ "PostToolUseFailure",
18577
+ "PostToolBatch",
18578
+ "PermissionDenied",
18579
+ "Notification",
18580
+ "SubagentStart",
18581
+ "SubagentStop",
18582
+ "TaskCreated",
18583
+ "TaskCompleted",
18584
+ "Stop",
18585
+ "StopFailure",
18586
+ "TeammateIdle",
18587
+ "ConfigChange",
18588
+ "CwdChanged",
18589
+ "FileChanged",
18590
+ "WorktreeCreate",
18591
+ "WorktreeRemove",
18592
+ "PreCompact",
18593
+ "PostCompact",
18594
+ "SessionEnd",
18595
+ "Elicitation",
18596
+ "ElicitationResult"
18597
+ ];
18598
+ var VERIFIED_CODEX_HOOK_EVENTS = [
18599
+ "SessionStart",
18600
+ "UserPromptSubmit",
18601
+ "PreToolUse",
18602
+ "PermissionRequest",
18603
+ "PostToolUse",
18604
+ "SubagentStart",
18605
+ "SubagentStop",
18606
+ "Stop",
18607
+ "PreCompact",
18608
+ "PostCompact"
18609
+ ];
18610
+ var TEMPLATES_BY_ROLE = new Map([
18000
18611
  {
18001
- id: "tdd-change",
18002
- workflowFlag: "tdd"
18612
+ role: "final-review-reminder",
18613
+ events: ["Stop", "SubagentStop"],
18614
+ claudeCommand: "echo \"Reminder: run the final-review skill before handing off.\"",
18615
+ codexCommand: "echo '{\"systemMessage\":\"Reminder: run the final-review skill before handing off.\"}'",
18616
+ codexCommandWindows: "cmd /c echo {\"systemMessage\":\"Reminder: run the final-review skill before handing off.\"}"
18003
18617
  },
18004
18618
  {
18005
- id: "final-review",
18006
- workflowFlag: "finalReview"
18619
+ role: "context-injection",
18620
+ events: ["UserPromptSubmit"],
18621
+ claudeCommand: "git status --short --branch; exit 0",
18622
+ codexCommand: "git status --short --branch; exit 0",
18623
+ codexCommandWindows: "cmd /c \"git status --short --branch || exit 0\""
18007
18624
  },
18008
18625
  {
18009
- id: "subagent-driven-change",
18010
- workflowFlag: "subagentDrivenDevelopment"
18626
+ role: "pre-compact-checkpoint",
18627
+ events: ["PreCompact"],
18628
+ claudeCommand: "echo \"Reminder: checkpoint in-progress work before compaction.\"",
18629
+ codexCommand: "echo '{\"systemMessage\":\"Reminder: checkpoint in-progress work before compaction.\"}'",
18630
+ codexCommandWindows: "cmd /c echo {\"systemMessage\":\"Reminder: checkpoint in-progress work before compaction.\"}"
18631
+ }
18632
+ ].map((template) => [template.role, template]));
18633
+ function getAdvisoryHookTemplate(role) {
18634
+ const template = TEMPLATES_BY_ROLE.get(role);
18635
+ if (!template) throw new Error(`Unknown advisory hook role ${role}.`);
18636
+ return template;
18637
+ }
18638
+ function getAdvisoryHookTemplateId(role) {
18639
+ return `targets/claude-hooks/${role}@1`;
18640
+ }
18641
+ function getCodexHookTemplateId(role) {
18642
+ return `targets/codex-hooks/${role}@1`;
18643
+ }
18644
+ function renderAdvisoryHookTemplateSource(role) {
18645
+ const template = getAdvisoryHookTemplate(role);
18646
+ return `${JSON.stringify({
18647
+ role: template.role,
18648
+ events: template.events,
18649
+ command: template.claudeCommand
18650
+ }, null, 2)}\n`;
18651
+ }
18652
+ function renderCodexHookTemplateSource(role) {
18653
+ const template = getAdvisoryHookTemplate(role);
18654
+ return `${JSON.stringify({
18655
+ role: template.role,
18656
+ events: template.events,
18657
+ command: template.codexCommand,
18658
+ commandWindows: template.codexCommandWindows
18659
+ }, null, 2)}\n`;
18660
+ }
18661
+ function buildHooksValue(roles, toHandler) {
18662
+ const selected = new Set(roles);
18663
+ const value = {};
18664
+ for (const role of ADVISORY_HOOK_ROLE_IDS) {
18665
+ if (!selected.has(role)) continue;
18666
+ const template = getAdvisoryHookTemplate(role);
18667
+ for (const event of template.events) {
18668
+ const entries = value[event] ?? [];
18669
+ entries.push({ hooks: [toHandler(template)] });
18670
+ value[event] = entries;
18671
+ }
18011
18672
  }
18012
- ];
18673
+ return value;
18674
+ }
18675
+ /**
18676
+ * Build the value of the `hooks` key for the generated `.claude/settings.json`.
18677
+ * Event order is canonical (template-table order), independent of the order
18678
+ * roles appear in the profile.
18679
+ */
18680
+ function buildClaudeAdvisoryHooksValue(roles) {
18681
+ return buildHooksValue(roles, (template) => ({
18682
+ type: "command",
18683
+ command: template.claudeCommand
18684
+ }));
18685
+ }
18686
+ /**
18687
+ * Build the full generated `.codex/hooks.json` document. Codex documents
18688
+ * `commandWindows` as the Windows-only command override, so both platform
18689
+ * variants live in the one deterministic artifact.
18690
+ */
18691
+ function renderCodexHooksJson(roles) {
18692
+ const hooks = buildHooksValue(roles, (template) => ({
18693
+ type: "command",
18694
+ command: template.codexCommand,
18695
+ commandWindows: template.codexCommandWindows
18696
+ }));
18697
+ return `${JSON.stringify({ hooks }, null, 2)}\n`;
18698
+ }
18699
+ /**
18700
+ * Not-supported notes for hook-incapable targets (never silence). Claude and
18701
+ * Codex advisory hooks are generated (both confirmed-official with verified
18702
+ * event lists); Tabnine hook support remains unknown in the capability
18703
+ * matrix, so Tabnine-including profiles get an explicit note.
18704
+ */
18705
+ function getAdvisoryHookNotes(profile) {
18706
+ if (getSelectedAdvisoryHookRoles(profile).length === 0) return [];
18707
+ const notes = [];
18708
+ if (profile.clients.tabnine.enabled) notes.push({
18709
+ code: "hooks_target_not_generated",
18710
+ path: "/capabilities/hooks",
18711
+ expected: "confirmed-official hook support",
18712
+ actual: "unknown Tabnine hook support",
18713
+ message: "capabilities.hooks advisory roles are not generated for Tabnine: hook support is not confirmed-official in the capability matrix."
18714
+ });
18715
+ return notes;
18716
+ }
18717
+ //#endregion
18718
+ //#region ../../packages/compiler/src/compiler.ts
18013
18719
  var TEMPLATE_SOURCES = [
18014
18720
  {
18015
18721
  id: "targets/agents-md@1",
@@ -18021,6 +18727,8 @@ var TEMPLATE_SOURCES = [
18021
18727
  agentsMdTopicTemplateSource("targets/agents-md/60-code-review@1", CODE_REVIEW_TOPIC),
18022
18728
  agentsMdTopicTemplateSource("targets/agents-md/70-refactoring@1", REFACTORING_TOPIC),
18023
18729
  agentsMdTopicTemplateSource("targets/agents-md/80-documentation@1", DOCUMENTATION_TOPIC),
18730
+ agentsMdTopicTemplateSource("targets/agents-md/85-memory-guidance@1", MEMORY_GUIDANCE_TOPIC),
18731
+ agentsMdTopicTemplateSource("targets/agents-md/86-logging-guidance@1", LOGGING_GUIDANCE_TOPIC),
18024
18732
  {
18025
18733
  id: "targets/lockfile@1",
18026
18734
  target: "lockfile",
@@ -18038,6 +18746,8 @@ var TEMPLATE_SOURCES = [
18038
18746
  guidelineTemplateSource("targets/tabnine-guidelines/60-code-review@1", renderCodeReviewGuideline),
18039
18747
  guidelineTemplateSource("targets/tabnine-guidelines/70-refactoring@1", renderRefactoringGuideline),
18040
18748
  guidelineTemplateSource("targets/tabnine-guidelines/80-documentation@1", renderDocumentationGuideline),
18749
+ guidelineTemplateSource("targets/tabnine-guidelines/85-memory-guidance@1", renderMemoryGuidanceGuideline),
18750
+ guidelineTemplateSource("targets/tabnine-guidelines/86-logging-guidance@1", renderLoggingGuidanceGuideline),
18041
18751
  guidelineTemplateSource("targets/tabnine-guidelines/90-final-review@1", renderFinalReviewGuideline),
18042
18752
  {
18043
18753
  id: "targets/tabnine-mcp-config@1",
@@ -18051,18 +18761,38 @@ var TEMPLATE_SOURCES = [
18051
18761
  version: "1",
18052
18762
  source: renderCodexConfigToml()
18053
18763
  },
18764
+ {
18765
+ id: "targets/codex-hooks@1",
18766
+ target: "codex-hooks",
18767
+ version: "1",
18768
+ source: renderCodexHooksJson(ADVISORY_HOOK_ROLE_IDS)
18769
+ },
18770
+ ...ADVISORY_HOOK_ROLE_IDS.map((role) => codexHookTemplateSource(role)),
18054
18771
  workflowSkillTemplateSource("targets/codex-workflow-skills/grill-change@1", "codex-workflow-skills", "grill-change"),
18055
18772
  workflowSkillTemplateSource("targets/codex-workflow-skills/request-to-spec-issues@1", "codex-workflow-skills", "request-to-spec-issues"),
18056
18773
  workflowSkillTemplateSource("targets/codex-workflow-skills/sdd-change@1", "codex-workflow-skills", "sdd-change"),
18057
18774
  workflowSkillTemplateSource("targets/codex-workflow-skills/tdd-change@2", "codex-workflow-skills", "tdd-change"),
18058
18775
  workflowSkillTemplateSource("targets/codex-workflow-skills/final-review@1", "codex-workflow-skills", "final-review"),
18059
18776
  workflowSkillTemplateSource("targets/codex-workflow-skills/subagent-driven-change@1", "codex-workflow-skills", "subagent-driven-change"),
18777
+ workflowSkillTemplateSource("targets/codex-workflow-skills/implement-next@1", "codex-workflow-skills", "implement-next"),
18778
+ workflowSkillTemplateSource("targets/codex-workflow-skills/review-change@1", "codex-workflow-skills", "review-change"),
18779
+ workflowSkillTemplateSource("targets/codex-workflow-skills/security-review@1", "codex-workflow-skills", "security-review"),
18780
+ workflowSkillTemplateSource("targets/codex-workflow-skills/readability-review@1", "codex-workflow-skills", "readability-review"),
18781
+ workflowSkillTemplateSource("targets/codex-workflow-skills/test-review@1", "codex-workflow-skills", "test-review"),
18782
+ workflowSkillTemplateSource("targets/codex-workflow-skills/architecture-review@1", "codex-workflow-skills", "architecture-review"),
18783
+ workflowSkillTemplateSource("targets/codex-workflow-skills/loop-implement-test-fix@1", "codex-workflow-skills", "loop-implement-test-fix"),
18784
+ workflowSkillTemplateSource("targets/codex-workflow-skills/loop-review-patch-retest@1", "codex-workflow-skills", "loop-review-patch-retest"),
18785
+ workflowSkillTemplateSource("targets/codex-workflow-skills/loop-security-patch-retest@1", "codex-workflow-skills", "loop-security-patch-retest"),
18786
+ workflowSkillTemplateSource("targets/codex-workflow-skills/loop-docs-update@1", "codex-workflow-skills", "loop-docs-update"),
18787
+ workflowSkillTemplateSource("targets/codex-workflow-skills/loop-sdd-cycle@1", "codex-workflow-skills", "loop-sdd-cycle"),
18788
+ workflowSkillTemplateSource("targets/codex-workflow-skills/mcp-fit-check@1", "codex-workflow-skills", "mcp-fit-check"),
18060
18789
  {
18061
18790
  id: "targets/claude-settings@1",
18062
18791
  target: "claude-settings",
18063
18792
  version: "1",
18064
18793
  source: renderClaudeSettingsJson()
18065
18794
  },
18795
+ ...ADVISORY_HOOK_ROLE_IDS.map((role) => advisoryHookTemplateSource(role)),
18066
18796
  {
18067
18797
  id: "targets/claude-mcp@1",
18068
18798
  target: "claude-mcp",
@@ -18080,7 +18810,19 @@ var TEMPLATE_SOURCES = [
18080
18810
  workflowSkillTemplateSource("targets/claude-workflow-skills/sdd-change@1", "claude-workflow-skills", "sdd-change"),
18081
18811
  workflowSkillTemplateSource("targets/claude-workflow-skills/tdd-change@2", "claude-workflow-skills", "tdd-change"),
18082
18812
  workflowSkillTemplateSource("targets/claude-workflow-skills/final-review@1", "claude-workflow-skills", "final-review"),
18083
- workflowSkillTemplateSource("targets/claude-workflow-skills/subagent-driven-change@1", "claude-workflow-skills", "subagent-driven-change")
18813
+ workflowSkillTemplateSource("targets/claude-workflow-skills/subagent-driven-change@1", "claude-workflow-skills", "subagent-driven-change"),
18814
+ workflowSkillTemplateSource("targets/claude-workflow-skills/implement-next@1", "claude-workflow-skills", "implement-next"),
18815
+ workflowSkillTemplateSource("targets/claude-workflow-skills/review-change@1", "claude-workflow-skills", "review-change"),
18816
+ workflowSkillTemplateSource("targets/claude-workflow-skills/security-review@1", "claude-workflow-skills", "security-review"),
18817
+ workflowSkillTemplateSource("targets/claude-workflow-skills/readability-review@1", "claude-workflow-skills", "readability-review"),
18818
+ workflowSkillTemplateSource("targets/claude-workflow-skills/test-review@1", "claude-workflow-skills", "test-review"),
18819
+ workflowSkillTemplateSource("targets/claude-workflow-skills/architecture-review@1", "claude-workflow-skills", "architecture-review"),
18820
+ workflowSkillTemplateSource("targets/claude-workflow-skills/loop-implement-test-fix@1", "claude-workflow-skills", "loop-implement-test-fix"),
18821
+ workflowSkillTemplateSource("targets/claude-workflow-skills/loop-review-patch-retest@1", "claude-workflow-skills", "loop-review-patch-retest"),
18822
+ workflowSkillTemplateSource("targets/claude-workflow-skills/loop-security-patch-retest@1", "claude-workflow-skills", "loop-security-patch-retest"),
18823
+ workflowSkillTemplateSource("targets/claude-workflow-skills/loop-docs-update@1", "claude-workflow-skills", "loop-docs-update"),
18824
+ workflowSkillTemplateSource("targets/claude-workflow-skills/loop-sdd-cycle@1", "claude-workflow-skills", "loop-sdd-cycle"),
18825
+ workflowSkillTemplateSource("targets/claude-workflow-skills/mcp-fit-check@1", "claude-workflow-skills", "mcp-fit-check")
18084
18826
  ];
18085
18827
  function getDefaultTemplates() {
18086
18828
  return TEMPLATE_SOURCES.map(({ id, target, version, source }) => ({
@@ -18100,12 +18842,45 @@ function compileProfile(request) {
18100
18842
  };
18101
18843
  const files = targets.flatMap((target) => renderTarget(target, request.profile));
18102
18844
  const requiredTemplateIds = getRequiredTemplateIdSet(targets, request.profile);
18845
+ const notes = [
18846
+ ...getAdvisoryHookNotes(request.profile),
18847
+ ...getAutomationPackNotes(request.profile),
18848
+ ...getImplementNextNotes(request.profile)
18849
+ ];
18103
18850
  return {
18104
18851
  ok: true,
18105
18852
  files: files.sort(compareGeneratedFiles),
18106
- templates: templates.filter((template) => requiredTemplateIds.has(template.id)).sort(compareTemplates)
18853
+ templates: templates.filter((template) => requiredTemplateIds.has(template.id)).sort(compareTemplates),
18854
+ ...notes.length > 0 ? { notes } : {}
18107
18855
  };
18108
18856
  }
18857
+ /**
18858
+ * Not-supported notes for the automation pack on a Tabnine-including target set
18859
+ * (never silence). Loop skills emit only for Claude and Codex; a profile that
18860
+ * selects `automation` with Tabnine enabled gets an explicit informational
18861
+ * note instead of silent omission.
18862
+ */
18863
+ function getAutomationPackNotes(profile) {
18864
+ if (!(profile.capabilities?.skills?.packs ?? []).includes("automation") || !profile.clients.tabnine.enabled) return [];
18865
+ return [automationTabnineNote("/capabilities/skills/packs")];
18866
+ }
18867
+ /**
18868
+ * Phase 24 (I4): `implement-next` never silences a missing-capability target.
18869
+ * When its prerequisites are met but Tabnine is enabled, emit an informational
18870
+ * note (mirroring the WS6 automation-pack pattern): Tabnine is not
18871
+ * `confirmed-official` for the subagent chain the dispatcher drives, so the
18872
+ * skill is generated for Claude and Codex only.
18873
+ */
18874
+ function getImplementNextNotes(profile) {
18875
+ if (!emitsImplementNext(profile.workflow) || !profile.clients.tabnine.enabled) return [];
18876
+ return [{
18877
+ code: "implement_next_target_not_generated",
18878
+ path: "/workflow/subagentDrivenDevelopment",
18879
+ expected: "skills-capable client with a confirmed-official subagent chain (Claude or Codex)",
18880
+ actual: "Tabnine has no implement-next dispatcher surface",
18881
+ message: "implement-next is not generated for Tabnine: the ledger dispatcher targets skills-capable clients with a confirmed-official subagent chain (Claude and Codex) only."
18882
+ }];
18883
+ }
18109
18884
  function mergeTemplates(base, extra) {
18110
18885
  const seen = new Set(base.map((template) => template.id));
18111
18886
  const result = [...base];
@@ -18132,7 +18907,7 @@ function getSubagentTemplates(profile) {
18132
18907
  version: "1",
18133
18908
  sha256: sha256Hex(normalizeGeneratedText(renderCodexSubagent(agent, effective)))
18134
18909
  });
18135
- if (profile.clients.tabnine.enabled) for (const agent of agents) {
18910
+ if (profile.clients.tabnine.enabled) for (const agent of getTabnineSubagents(profile)) {
18136
18911
  if (agent.toolScope !== "read-only") continue;
18137
18912
  templates.push({
18138
18913
  id: `targets/tabnine-subagents/${agent.name}@1`,
@@ -18147,9 +18922,11 @@ function renderAgentsMd(profile) {
18147
18922
  const effectivePermissions = deriveEffectivePermissions(profile);
18148
18923
  const enabledClients = renderEnabledClients(profile);
18149
18924
  const reactSection = profile.stack.frameworks.includes("react") ? `\n${renderTopicAsAgentsMdSection(REACT_STACK_TOPIC)}` : "";
18150
- const codeReviewSection = profile.workflow.codeReview === true ? `\n${renderTopicAsAgentsMdSection(CODE_REVIEW_TOPIC)}` : "";
18925
+ const codeReviewSection = profile.workflow.codeReview === true && !profile.clients.codex.enabled && !profile.clients.claude.enabled ? `\n${renderTopicAsAgentsMdSection(CODE_REVIEW_TOPIC)}` : "";
18151
18926
  const refactoringSection = profile.workflow.refactoring === true ? `\n${renderTopicAsAgentsMdSection(REFACTORING_TOPIC)}` : "";
18152
18927
  const documentationSection = profile.workflow.documentation === true ? `\n${renderTopicAsAgentsMdSection(DOCUMENTATION_TOPIC)}` : "";
18928
+ const memoryGuidanceSection = profile.workflow.memoryGuidance === true ? `\n${renderTopicAsAgentsMdSection(MEMORY_GUIDANCE_TOPIC)}` : "";
18929
+ const loggingGuidanceSection = profile.workflow.loggingGuidance === true ? `\n${renderTopicAsAgentsMdSection(LOGGING_GUIDANCE_TOPIC)}` : "";
18153
18930
  return normalizeGeneratedText(`# AGENTS.md
18154
18931
 
18155
18932
  ## Instruction Precedence
@@ -18178,7 +18955,7 @@ ${enabledClients}
18178
18955
  - SDD: ${renderRequired(profile.workflow.sdd)}
18179
18956
  - TDD: ${renderRequired(profile.workflow.tdd)}
18180
18957
  - Final implementation review: ${renderRequired(profile.workflow.finalReview)}
18181
- ${codeReviewSection}${refactoringSection}${documentationSection}
18958
+ ${codeReviewSection}${refactoringSection}${documentationSection}${memoryGuidanceSection}${loggingGuidanceSection}
18182
18959
  ## Permissions
18183
18960
 
18184
18961
  | Permission | Mode |
@@ -18251,11 +19028,16 @@ function renderTarget(target, profile) {
18251
19028
  case "lockfile": return [];
18252
19029
  case "tabnine-mcp-config": return [createGeneratedTextFile(".tabnine/mcp_servers.json", "tabnine-mcp-config", "targets/tabnine-mcp-config@1", JSON.stringify({ mcpServers: {} }, null, 2))];
18253
19030
  case "codex-config": return [createGeneratedTextFile(".codex/config.toml", "codex-config", "targets/codex-config@1", renderCodexConfigToml(profile))];
19031
+ case "codex-hooks": {
19032
+ const roles = getSelectedAdvisoryHookRoles(profile);
19033
+ if (roles.length === 0) return [];
19034
+ return [createGeneratedTextFile(".codex/hooks.json", "codex-hooks", "targets/codex-hooks@1", renderCodexHooksJson(roles))];
19035
+ }
18254
19036
  case "codex-subagents": return renderCodexSubagentFiles(profile);
18255
19037
  case "claude-subagents": return renderClaudeSubagentFiles(profile);
18256
19038
  case "tabnine-subagents": return renderTabnineSubagentFiles(profile);
18257
19039
  case "codex-workflow-skills": return renderWorkflowSkillFiles(profile, "codex-workflow-skills", ".agents/skills");
18258
- case "claude-settings": return [createGeneratedTextFile(".claude/settings.json", "claude-settings", "targets/claude-settings@1", renderClaudeSettingsJson())];
19040
+ case "claude-settings": return [createGeneratedTextFile(".claude/settings.json", "claude-settings", "targets/claude-settings@1", renderClaudeSettingsJson(profile))];
18259
19041
  case "claude-mcp": return [createGeneratedTextFile(".mcp.json", "claude-mcp", "targets/claude-mcp@1", JSON.stringify({ mcpServers: {} }, null, 2))];
18260
19042
  case "claude-md": return [createGeneratedTextFile("CLAUDE.md", "claude-md", "targets/claude-md@1", renderClaudeMd())];
18261
19043
  case "claude-workflow-skills": return renderWorkflowSkillFiles(profile, "claude-workflow-skills", ".claude/skills");
@@ -18273,19 +19055,38 @@ function renderTabnineGuidelines(profile) {
18273
19055
  if (hasStack(profile, "frameworks", "react")) files.push(createGeneratedTextFile(".tabnine/guidelines/30-stack-typescript-react.md", common.target, "targets/tabnine-guidelines/30-stack-typescript-react@1", renderTypeScriptReactGuideline()));
18274
19056
  if (hasStack(profile, "languages", "java") && hasStack(profile, "frameworks", "spring-boot")) files.push(createGeneratedTextFile(".tabnine/guidelines/40-stack-java-spring.md", common.target, "targets/tabnine-guidelines/40-stack-java-spring@1", renderJavaSpringGuideline()));
18275
19057
  if (hasAnyStack(profile, "testing", ["playwright", "junit"])) files.push(createGeneratedTextFile(".tabnine/guidelines/50-testing-playwright-junit.md", common.target, "targets/tabnine-guidelines/50-testing-playwright-junit@1", renderPlaywrightJunitGuideline()));
18276
- if (profile.workflow.codeReview === true) files.push(createGeneratedTextFile(".tabnine/guidelines/60-code-review.md", common.target, "targets/tabnine-guidelines/60-code-review@1", renderCodeReviewGuideline()));
19058
+ if (resolveSelectedSkills(profile).includes("review-change")) files.push(createGeneratedTextFile(".tabnine/guidelines/60-code-review.md", common.target, "targets/tabnine-guidelines/60-code-review@1", renderCodeReviewGuideline()));
18277
19059
  if (profile.workflow.refactoring === true) files.push(createGeneratedTextFile(".tabnine/guidelines/70-refactoring.md", common.target, "targets/tabnine-guidelines/70-refactoring@1", renderRefactoringGuideline()));
18278
19060
  if (profile.workflow.documentation === true) files.push(createGeneratedTextFile(".tabnine/guidelines/80-documentation.md", common.target, "targets/tabnine-guidelines/80-documentation@1", renderDocumentationGuideline()));
19061
+ if (profile.workflow.memoryGuidance === true) files.push(createGeneratedTextFile(".tabnine/guidelines/85-memory-guidance.md", common.target, "targets/tabnine-guidelines/85-memory-guidance@1", renderMemoryGuidanceGuideline()));
19062
+ if (profile.workflow.loggingGuidance === true) files.push(createGeneratedTextFile(".tabnine/guidelines/86-logging-guidance.md", common.target, "targets/tabnine-guidelines/86-logging-guidance@1", renderLoggingGuidanceGuideline()));
18279
19063
  if (profile.workflow.finalReview) files.push(createGeneratedTextFile(".tabnine/guidelines/90-final-review.md", common.target, "targets/tabnine-guidelines/90-final-review@1", renderFinalReviewGuideline()));
18280
19064
  return files;
18281
19065
  }
18282
19066
  function renderWorkflowSkillFiles(profile, target, rootPath) {
18283
- return WORKFLOW_SKILLS.filter((skill) => profile.workflow[skill.workflowFlag]).map((skill) => createGeneratedTextFile(`${rootPath}/${skill.id}/SKILL.md`, target, getWorkflowSkillTemplateId(target, skill.id), renderWorkflowSkill(skill.id)));
19067
+ const selected = resolveSelectedSkills(profile);
19068
+ const selectedSet = new Set(selected);
19069
+ const loggingOn = profile.workflow.loggingGuidance === true;
19070
+ return selected.map((skill) => createGeneratedTextFile(`${rootPath}/${skill}/SKILL.md`, target, getWorkflowSkillTemplateId(target, skill), applyModelInvocationPolicy(applyLoggingEnforcementToSkill(renderWorkflowSkill(skill, selectedSet), skill, loggingOn), skill, target)));
19071
+ }
19072
+ /**
19073
+ * Phase 24 (I1): inject the `disable-model-invocation: true` frontmatter line
19074
+ * for entry-point skills on targets that verifiably support it (see
19075
+ * `disablesModelInvocation`). The flag is appended as the last frontmatter key,
19076
+ * just before the closing `---`, keeping `name`/`description` first.
19077
+ */
19078
+ function applyModelInvocationPolicy(source, skill, target) {
19079
+ if (!disablesModelInvocation(skill, target)) return source;
19080
+ const lines = source.split("\n");
19081
+ const closeIndex = lines.indexOf("---", 1);
19082
+ if (closeIndex === -1) return source;
19083
+ lines.splice(closeIndex, 0, "disable-model-invocation: true");
19084
+ return lines.join("\n");
18284
19085
  }
18285
19086
  function getWorkflowSkillTemplateId(target, skill) {
18286
19087
  return `targets/${target}/${skill}@${skill === "tdd-change" ? "2" : "1"}`;
18287
19088
  }
18288
- function renderWorkflowSkill(skill) {
19089
+ function renderWorkflowSkill(skill, selectedSkills = /* @__PURE__ */ new Set()) {
18289
19090
  switch (skill) {
18290
19091
  case "grill-change": return `---
18291
19092
  name: grill-change
@@ -18319,6 +19120,20 @@ Question: \`<one decision or missing fact>\`
18319
19120
  Recommended answer: \`<the default direction you would choose>\`
18320
19121
  Why: \`<short reason based on product intent, safety, contracts, or repo evidence>\`
18321
19122
 
19123
+ ## Design-it-Twice
19124
+
19125
+ For a hard-to-reverse choice, present it as a Design-it-Twice question: sketch two genuinely different paths before recommending one.
19126
+
19127
+ Path A: \`<approach>\` - interface: \`<the shape callers see>\`; risks: \`<what could go wrong>\`.
19128
+ Path B: \`<a genuinely different approach>\` - interface: \`<the shape callers see>\`; risks: \`<what could go wrong>\`.
19129
+ Recommendation: \`<the path you would choose and why>\`.
19130
+
19131
+ Do not offer two variations of the same path. Reserve this form for choices that are expensive to change later; a routine choice needs one recommended answer, not two paths.
19132
+
19133
+ ## ADR Candidates
19134
+
19135
+ Capture a decision as an ADR candidate when it is hard to reverse, surprising without context, or carries real trade-offs. Record the decision, the alternatives considered, and the reason as an agreement-record note only. Do not write an ADR file during the grill; synthesis persists it after approval.
19136
+
18322
19137
  ## Decision Checks
18323
19138
 
18324
19139
  Before ending the grill, confirm:
@@ -18344,6 +19159,7 @@ When the user agrees the grill is complete, return:
18344
19159
  - Decisions made
18345
19160
  - Durable terms and hard-to-reverse decisions
18346
19161
  - Decision rules for implementation tradeoffs
19162
+ - ADR candidates that meet the threshold
18347
19163
  - Open questions or risks
18348
19164
  - Confirmation that post-grill synthesis can run next
18349
19165
 
@@ -18422,6 +19238,31 @@ Include these sections:
18422
19238
  \`TDD Strategy\` complements \`Tests\`; it must not replace the required \`Tests\`
18423
19239
  section from \`docs/specs/SPEC_TEMPLATE.md\`.
18424
19240
 
19241
+ ## Seam & Interface Design
19242
+
19243
+ Decide the test seam and mock boundary now, under this human gate, so the TDD loop runs without new architecture decisions.
19244
+
19245
+ Classify each slice:
19246
+
19247
+ - computation: pure input to output; the seam is the function's return value.
19248
+ - orchestration: coordinates other units; the seam is the observable effect at the boundary it drives.
19249
+ - deterministic generator: input profile to emitted artifacts; the seam is the generated output compared as a fixture.
19250
+
19251
+ Seam rules:
19252
+
19253
+ - Pick the highest boundary that keeps tests fast and deterministic; prefer fewer, higher seams over many low ones.
19254
+ - Prefer an existing seam over inventing a new one.
19255
+ - Declare the allowed mock boundary as unmanaged dependencies only, such as network, clock, or filesystem you do not own; never mock the code under test.
19256
+ - Sizing rule: one slice = one seam = one observable outcome = one RED.
19257
+
19258
+ Human-gate checklist to confirm before writing briefs:
19259
+
19260
+ 1. Is the seam at the highest fast, deterministic boundary?
19261
+ 2. Is the unit under test treated as a black box?
19262
+ 3. Do inputs and outputs cross an explicit interface?
19263
+ 4. Are the names drawn from the glossary?
19264
+ 5. Does an abstraction exist only for the test?
19265
+
18425
19266
  ## Issue Brief Format
18426
19267
 
18427
19268
  Each issue brief must include:
@@ -18434,6 +19275,8 @@ Each issue brief must include:
18434
19275
  - Acceptance criteria
18435
19276
  - Expected RED proof
18436
19277
  - Expected GREEN proof
19278
+ - Seam under test
19279
+ - Allowed mock boundary
18437
19280
  - Test command guidance
18438
19281
  - Likely file ownership
18439
19282
  - Dependencies
@@ -18454,6 +19297,15 @@ Use these states:
18454
19297
  - \`sequenced\`
18455
19298
  - \`human-gate\`
18456
19299
 
19300
+ ## Persisted Artifacts
19301
+
19302
+ After the user approves the synthesis, persist workflow state in one write step. All writes go through the client's write-approval flow.
19303
+
19304
+ - \`TASKS.md\`: an index-only ledger. Each row links to a brief and carries one state from the closed set \`ready | blocked | sequenced | parallel-safe | human-gate | in-progress | done\`. Keep task content in the briefs, not the ledger.
19305
+ - \`docs/specs/<spec-dir>/issues/NNN-slug.md\`: one brief per slice, using the Issue Brief Format above.
19306
+ - \`CONTEXT.md\`: a glossary only, created lazily when the first durable term appears. Each definition is at most two sentences; add an \`Avoid:\` line for terms that must not be used. No implementation details or decisions.
19307
+ - ADRs: record a decision that meets all three criteria - hard to reverse, surprising without context, real trade-offs. Write to the existing project ADR directory if present, otherwise \`docs/adr/\`.
19308
+
18457
19309
  ## Output
18458
19310
 
18459
19311
  Return:
@@ -18520,12 +19372,26 @@ description: Use when changing behavior where a focused failing test or golden f
18520
19372
 
18521
19373
  ## Testing Anti-Patterns
18522
19374
 
19375
+ - Do not write a tautological test: expected values must come from an independent source, never recomputed the way the code under test computes them.
18523
19376
  - Do not assert on mock elements or mock call counts when a real behavior assertion is possible.
18524
19377
  - Do not add production methods, flags, or exports that exist only for tests.
18525
19378
  - Do not mock a dependency until you understand the side effects the test needs.
18526
19379
  - Keep test doubles structurally complete enough to match the real data shape consumed by the code.
18527
19380
  - If mock setup is larger than the behavior under test, consider a narrower integration test or a simpler production boundary.
18528
19381
 
19382
+ ## Mock Boundary
19383
+
19384
+ - Mock only unmanaged external dependencies, such as network, clock, or filesystem you do not own.
19385
+ - Prefer a fake over a stub, and a stub over a mock or spy.
19386
+ - Use a spy only where outbound communication is itself the tested contract.
19387
+ - Never introduce an abstraction that exists only for a test.
19388
+
19389
+ ## Seam Discipline
19390
+
19391
+ - Read \`CONTEXT.md\` when it exists; test names and interface names must match its glossary terms.
19392
+ - Test only at the seam declared in the issue brief; do not re-decide the seam inside the loop.
19393
+ - If implementation shows the declared seam is wrong, stop and report \`BLOCKED\` with the reason. Never silently move or redesign the seam.
19394
+
18529
19395
  ## Output
18530
19396
 
18531
19397
  Report the RED command and expected failure, the GREEN command and passing result, any refactor rerun, and any TDD exception that required human approval.
@@ -18607,6 +19473,76 @@ Code-quality reviewer status values: \`ACCEPTABLE\`, \`ISSUES_FOUND\`, \`NEEDS_C
18607
19473
 
18608
19474
  Final handoff must list what changed, tests run, contract impact, security impact, remaining risks or TODOs, and whether the spec acceptance criteria are fully met.
18609
19475
  `;
19476
+ case "implement-next": return `---
19477
+ name: implement-next
19478
+ description: Use after synthesis to dispatch the next ready task from the TASKS.md ledger through one subagent-driven implementation cycle, one task per invocation.
19479
+ ---
19480
+
19481
+ <!-- Generated by Agent Profile Compiler. Do not edit by hand. -->
19482
+
19483
+ # Implement Next
19484
+
19485
+ ## Purpose
19486
+
19487
+ Advance exactly one ready task from the \`TASKS.md\` ledger through a single implementation cycle, using its persisted issue brief as context. One invocation advances at most one task; it never iterates. Repeat the command for the next task.
19488
+
19489
+ ## Preconditions
19490
+
19491
+ - \`TASKS.md\` exists and is an index-only ledger whose rows link to issue briefs.
19492
+ - If \`TASKS.md\` is missing or contains no \`ready\` task, stop and report the ledger state; do not invent work.
19493
+
19494
+ ## Flow
19495
+
19496
+ 1. Read \`TASKS.md\` and select the first task in state \`ready\`.
19497
+ - Stop at a \`human-gate\` task and explain the approval it needs; do not proceed past it.
19498
+ - Skip \`blocked\` and \`sequenced\` tasks; they are not ready.
19499
+ - If no \`ready\` task exists, stop and report.
19500
+ 2. Mark the selected task \`in-progress\` in \`TASKS.md\` through the client's write-approval flow.
19501
+ 3. Load the linked issue brief and run \`subagent-driven-change\` with the brief as Fresh Context: \`implementer\`, then \`spec-reviewer\`, then \`code-quality-reviewer\`.
19502
+ 4. When reviews pass and the required tests run green, mark the task \`done\` and stop. The next task requires a new invocation.
19503
+
19504
+ ## Failure Path
19505
+
19506
+ Stop and report \`BLOCKED\` when any of these holds:
19507
+
19508
+ - \`implementer\` returns \`BLOCKED\` or \`NEEDS_CONTEXT\`,
19509
+ - a review finding cannot be resolved within the brief's scope,
19510
+ - GREEN is unreachable within the brief's declared seam.
19511
+
19512
+ On failure, mark the task \`blocked\` in \`TASKS.md\` with a one-line reason; if the declared seam was wrong, include why it failed. Then stop. Do not touch the next task, do not edit the brief, and do not continue to another task. A human decides whether to edit the brief, re-grill, or split the task, and flips the state back to \`ready\`.
19513
+
19514
+ ## Output
19515
+
19516
+ Report the selected task, the state transitions applied, the subagent results, the tests run, and the final state (\`done\` or \`blocked\` with its one-line reason).
19517
+
19518
+ ## Safety
19519
+
19520
+ - Do not upload source code.
19521
+ - Do not read or print secrets.
19522
+ - Do not iterate across tasks; one invocation advances at most one task.
19523
+ - Do not self-approve; all writes, commits, and destructive steps go through the client's write-approval flow.
19524
+ - Do not edit issue briefs or advance a task that failed.
19525
+ - Do not propose \`bypassPermissions\`, tool pre-approval, dependency auto-installation, hosted execution, or remote MCP behavior.
19526
+ `;
19527
+ case "review-change": return renderReviewChangeSkill(selectedSkills);
19528
+ case "security-review":
19529
+ case "readability-review":
19530
+ case "test-review":
19531
+ case "architecture-review": {
19532
+ const rendered = renderSpecialistReviewSkill(skill);
19533
+ if (rendered === void 0) throw new Error(`Missing specialist review content for ${skill}.`);
19534
+ return rendered;
19535
+ }
19536
+ case "loop-implement-test-fix":
19537
+ case "loop-review-patch-retest":
19538
+ case "loop-security-patch-retest":
19539
+ case "loop-docs-update":
19540
+ case "loop-sdd-cycle": {
19541
+ const rendered = renderLoopSkillContent(skill, selectedSkills);
19542
+ if (rendered === void 0) throw new Error(`Missing loop skill content for ${skill}.`);
19543
+ return rendered;
19544
+ }
19545
+ case "mcp-fit-check": return renderMcpFitCheckSkill();
18610
19546
  }
18611
19547
  }
18612
19548
  function renderGeneralAgentBehaviorGuideline(profile) {
@@ -18700,6 +19636,66 @@ function renderRefactoringGuideline() {
18700
19636
  function renderDocumentationGuideline() {
18701
19637
  return renderTopicAsTabnineGuideline(DOCUMENTATION_TOPIC);
18702
19638
  }
19639
+ function renderMemoryGuidanceGuideline() {
19640
+ return renderTopicAsTabnineGuideline(MEMORY_GUIDANCE_TOPIC);
19641
+ }
19642
+ function renderLoggingGuidanceGuideline() {
19643
+ return renderTopicAsTabnineGuideline(LOGGING_GUIDANCE_TOPIC);
19644
+ }
19645
+ /**
19646
+ * Phase 25 (I2): flag-conditional logging-enforcement text. These lines
19647
+ * REFERENCE the Logging Guidance convention (emitted into AGENTS.md/CLAUDE.md
19648
+ * by I1); they never restate the verbatim redaction rule (single source of
19649
+ * truth, ADR 0008). They are injected at emission time, gated on
19650
+ * `workflow.loggingGuidance`, mirroring `applyModelInvocationPolicy`. Tabnine
19651
+ * is documentation-only (ADR 0007) and never receives these lines.
19652
+ */
19653
+ var LOGGING_ENFORCEMENT_BY_AGENT = {
19654
+ implementer: "Follow the project's logging convention (the Logging Guidance section in AGENTS.md). If debug or diagnostic output you added is still present when you would otherwise report DONE, report DONE_WITH_CONCERNS and name the leftover output instead.",
19655
+ "code-quality-reviewer": "Check logging discipline in the change: stray print/console output left in production code, new error paths lacking a stable event code, and any log that violates the redaction rule in the project's Logging Guidance convention. Reference that rule; do not restate it."
19656
+ };
19657
+ var LOGGING_ENFORCEMENT_FINAL_REVIEW = "Confirm debug output added during the change was removed and any new error paths carry a stable event code, per the project's Logging Guidance convention.";
19658
+ /**
19659
+ * Append the flag-conditional logging-enforcement paragraph to the emitted
19660
+ * prompt for the agents in `LOGGING_ENFORCEMENT_BY_AGENT`. Returns the prompt
19661
+ * unchanged for any other agent or when the flag is off. The appended text is
19662
+ * plain prose with no `"""`, so the Codex renderer's triple-quote guard is
19663
+ * preserved.
19664
+ */
19665
+ function applyLoggingEnforcementToPrompt(prompt, agentName, loggingOn) {
19666
+ if (!loggingOn) return prompt;
19667
+ const enforcement = LOGGING_ENFORCEMENT_BY_AGENT[agentName];
19668
+ if (enforcement === void 0) return prompt;
19669
+ return `${prompt.trimEnd()}\n\n${enforcement}`;
19670
+ }
19671
+ /**
19672
+ * Insert the flag-conditional logging checklist item into the `final-review`
19673
+ * skill's `## Instructions` numbered list, just before the following section.
19674
+ * Returns the source unchanged for any other skill or when the flag is off.
19675
+ *
19676
+ * Assumes the Instructions list is flat and monotonically numbered (1..N with
19677
+ * no nesting); the appended item is numbered N+1. A template change that
19678
+ * breaks this assumption shifts the emitted bytes and fails the golden
19679
+ * fixtures, so it cannot ship silently.
19680
+ */
19681
+ function applyLoggingEnforcementToSkill(source, skill, loggingOn) {
19682
+ if (!loggingOn || skill !== "final-review") return source;
19683
+ const lines = source.split("\n");
19684
+ const instructionsIndex = lines.indexOf("## Instructions");
19685
+ if (instructionsIndex === -1) return source;
19686
+ let lastItemIndex = -1;
19687
+ for (let i = instructionsIndex + 1; i < lines.length; i += 1) {
19688
+ const line = lines[i];
19689
+ if (line !== void 0 && line.startsWith("## ")) break;
19690
+ if (line !== void 0 && /^\d+\.\s/u.test(line)) lastItemIndex = i;
19691
+ }
19692
+ if (lastItemIndex === -1) return source;
19693
+ const match = lines[lastItemIndex]?.match(/^(\d+)\.\s/u);
19694
+ if (!match || match[1] === void 0) return source;
19695
+ const nextNumber = Number.parseInt(match[1], 10) + 1;
19696
+ lines.splice(lastItemIndex + 1, 0, `${nextNumber}. ${LOGGING_ENFORCEMENT_FINAL_REVIEW}`);
19697
+ return lines.join("\n");
19698
+ }
18703
19699
  function renderTypeScriptSvelteGuideline() {
18704
19700
  return `<!-- Generated by Agent Profile Compiler. Do not edit by hand. -->
18705
19701
 
@@ -18777,15 +19773,36 @@ max_depth = ${defaults.maxDepth}
18777
19773
  function renderClaudeSubagentFiles(profile) {
18778
19774
  const agents = getEnabledSubagents(profile);
18779
19775
  const effective = deriveEffectivePermissions(profile);
18780
- return agents.map((agent) => createGeneratedTextFile(`.claude/agents/${agent.name}.md`, "claude-subagents", `targets/claude-subagents/${agent.name}@1`, renderClaudeSubagent(agent, effective)));
19776
+ const loggingOn = profile.workflow.loggingGuidance === true;
19777
+ return agents.map((agent) => createGeneratedTextFile(`.claude/agents/${agent.name}.md`, "claude-subagents", `targets/claude-subagents/${agent.name}@1`, renderClaudeSubagent(withLoggingEnforcement(agent, loggingOn), effective)));
18781
19778
  }
18782
19779
  function renderCodexSubagentFiles(profile) {
18783
19780
  const agents = getEnabledSubagents(profile);
18784
19781
  const effective = deriveEffectivePermissions(profile);
18785
- return agents.map((agent) => createGeneratedTextFile(`.codex/agents/${agent.name}.toml`, "codex-subagents", `targets/codex-subagents/${agent.name}@1`, renderCodexSubagent(agent, effective)));
19782
+ const loggingOn = profile.workflow.loggingGuidance === true;
19783
+ return agents.map((agent) => createGeneratedTextFile(`.codex/agents/${agent.name}.toml`, "codex-subagents", `targets/codex-subagents/${agent.name}@1`, renderCodexSubagent(withLoggingEnforcement(agent, loggingOn), effective)));
19784
+ }
19785
+ /**
19786
+ * Return `agent` with the flag-conditional logging-enforcement paragraph
19787
+ * appended to its prompt when applicable. The transform touches only the
19788
+ * emitted prompt; the canonical template prompt is left unchanged.
19789
+ */
19790
+ function withLoggingEnforcement(agent, loggingOn) {
19791
+ const prompt = applyLoggingEnforcementToPrompt(agent.prompt, agent.name, loggingOn);
19792
+ if (prompt === agent.prompt) return agent;
19793
+ return {
19794
+ ...agent,
19795
+ prompt
19796
+ };
18786
19797
  }
18787
19798
  function renderTabnineSubagentFiles(profile) {
18788
- return getEnabledSubagents(profile).filter((agent) => agent.toolScope === "read-only").map((agent) => createGeneratedTextFile(`.tabnine/agent/agents/${agent.name}.md`, "tabnine-subagents", `targets/tabnine-subagents/${agent.name}@1`, renderTabnineSubagent(agent)));
19799
+ return getTabnineSubagents(profile).filter((agent) => agent.toolScope === "read-only").map((agent) => createGeneratedTextFile(`.tabnine/agent/agents/${agent.name}.md`, "tabnine-subagents", `targets/tabnine-subagents/${agent.name}@1`, renderTabnineSubagent(agent)));
19800
+ }
19801
+ var REVIEWER_SUBAGENT_NAMES = new Set(REVIEWER_DEFINITIONS.map((definition) => definition.reviewerId));
19802
+ function getTabnineSubagents(profile) {
19803
+ const agents = getEnabledSubagents(profile);
19804
+ if (!(profile.capabilities?.delegation?.subagents?.packs?.includes("reviewer-subagents") === true)) return agents;
19805
+ return agents.filter((agent) => !REVIEWER_SUBAGENT_NAMES.has(agent.name));
18789
19806
  }
18790
19807
  function titleCaseFromKebab(name) {
18791
19808
  return name.split("-").filter((part) => part.length > 0).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
@@ -18913,12 +19930,28 @@ function agentsMdTopicTemplateSource(id, topic) {
18913
19930
  source: renderTopicAsAgentsMdSection(topic)
18914
19931
  };
18915
19932
  }
19933
+ function advisoryHookTemplateSource(role) {
19934
+ return {
19935
+ id: getAdvisoryHookTemplateId(role),
19936
+ target: "claude-settings",
19937
+ version: "1",
19938
+ source: renderAdvisoryHookTemplateSource(role)
19939
+ };
19940
+ }
19941
+ function codexHookTemplateSource(role) {
19942
+ return {
19943
+ id: getCodexHookTemplateId(role),
19944
+ target: "codex-hooks",
19945
+ version: "1",
19946
+ source: renderCodexHookTemplateSource(role)
19947
+ };
19948
+ }
18916
19949
  function workflowSkillTemplateSource(id, target, skill) {
18917
19950
  return {
18918
19951
  id,
18919
19952
  target,
18920
19953
  version: "1",
18921
- source: renderWorkflowSkill(skill)
19954
+ source: applyModelInvocationPolicy(renderWorkflowSkill(skill), skill, target)
18922
19955
  };
18923
19956
  }
18924
19957
  function hasStack(profile, field, value) {
@@ -18927,8 +19960,8 @@ function hasStack(profile, field, value) {
18927
19960
  function hasAnyStack(profile, field, values) {
18928
19961
  return values.some((value) => hasStack(profile, field, value));
18929
19962
  }
18930
- function renderClaudeSettingsJson() {
18931
- return `{
19963
+ function renderClaudeSettingsJson(profile) {
19964
+ const base = `{
18932
19965
  "permissions": {
18933
19966
  "defaultMode": "default",
18934
19967
  "allow": [],
@@ -18948,16 +19981,22 @@ function renderClaudeSettingsJson() {
18948
19981
  "autoAllowBashIfSandboxed": false
18949
19982
  }
18950
19983
  }`;
19984
+ const roles = profile ? getSelectedAdvisoryHookRoles(profile) : [];
19985
+ if (roles.length === 0) return base;
19986
+ const hooksJson = JSON.stringify(buildClaudeAdvisoryHooksValue(roles), null, 2).split("\n").map((line, index) => index === 0 ? line : ` ${line}`).join("\n");
19987
+ return base.replace(/\n\}$/u, `,\n "hooks": ${hooksJson}\n}`);
18951
19988
  }
18952
19989
  function getEnabledTargetIds(profile) {
18953
19990
  const targets = ["agents-md"];
18954
19991
  const subagentsEnabled = getEnabledSubagents(profile).length > 0;
19992
+ const tabnineSubagentsEnabled = getTabnineSubagents(profile).length > 0;
18955
19993
  if (profile.clients.tabnine.enabled) {
18956
19994
  targets.push("tabnine-guidelines", "tabnine-mcp-config");
18957
- if (subagentsEnabled) targets.push("tabnine-subagents");
19995
+ if (tabnineSubagentsEnabled) targets.push("tabnine-subagents");
18958
19996
  }
18959
19997
  if (profile.clients.codex.enabled) {
18960
19998
  targets.push("codex-config", "codex-workflow-skills");
19999
+ if (getSelectedAdvisoryHookRoles(profile).length > 0) targets.push("codex-hooks");
18961
20000
  if (subagentsEnabled) targets.push("codex-subagents");
18962
20001
  }
18963
20002
  if (profile.clients.claude.enabled) {
@@ -18983,7 +20022,7 @@ function validateTargets(profile, targets, templates) {
18983
20022
  });
18984
20023
  }
18985
20024
  if (targets.includes("tabnine-subagents")) {
18986
- const writeAgents = getEnabledSubagents(profile).filter((agent) => agent.toolScope === "workspace-write");
20025
+ const writeAgents = getTabnineSubagents(profile).filter((agent) => agent.toolScope === "workspace-write");
18987
20026
  for (const agent of writeAgents) issues.push({
18988
20027
  code: "unsafe_generated_content",
18989
20028
  path: `.tabnine/agent/agents/${agent.name}.md`,
@@ -19063,16 +20102,20 @@ function getRequiredTemplateIds(target, profile) {
19063
20102
  case "claude-workflow-skills": return getRequiredWorkflowSkillTemplateIds(profile, "claude-workflow-skills");
19064
20103
  case "claude-subagents": return getEnabledSubagents(profile).map((agent) => `targets/claude-subagents/${agent.name}@1`);
19065
20104
  case "codex-subagents": return getEnabledSubagents(profile).map((agent) => `targets/codex-subagents/${agent.name}@1`);
19066
- case "tabnine-subagents": return getEnabledSubagents(profile).filter((agent) => agent.toolScope === "read-only").map((agent) => `targets/tabnine-subagents/${agent.name}@1`);
20105
+ case "tabnine-subagents": return getTabnineSubagents(profile).filter((agent) => agent.toolScope === "read-only").map((agent) => `targets/tabnine-subagents/${agent.name}@1`);
20106
+ case "claude-settings": return ["targets/claude-settings@1", ...getSelectedAdvisoryHookRoles(profile).map((role) => getAdvisoryHookTemplateId(role))];
20107
+ case "codex-hooks": return ["targets/codex-hooks@1", ...getSelectedAdvisoryHookRoles(profile).map((role) => getCodexHookTemplateId(role))];
19067
20108
  default: return TEMPLATE_SOURCES.filter((template) => template.target === target).map((template) => template.id);
19068
20109
  }
19069
20110
  }
19070
20111
  function getRequiredAgentsMdTopicTemplateIds(profile) {
19071
20112
  const ids = [];
19072
20113
  if (hasStack(profile, "frameworks", "react")) ids.push("targets/agents-md/30-stack-typescript-react@1");
19073
- if (profile.workflow.codeReview === true) ids.push("targets/agents-md/60-code-review@1");
20114
+ if (profile.workflow.codeReview === true && !profile.clients.codex.enabled && !profile.clients.claude.enabled) ids.push("targets/agents-md/60-code-review@1");
19074
20115
  if (profile.workflow.refactoring === true) ids.push("targets/agents-md/70-refactoring@1");
19075
20116
  if (profile.workflow.documentation === true) ids.push("targets/agents-md/80-documentation@1");
20117
+ if (profile.workflow.memoryGuidance === true) ids.push("targets/agents-md/85-memory-guidance@1");
20118
+ if (profile.workflow.loggingGuidance === true) ids.push("targets/agents-md/86-logging-guidance@1");
19076
20119
  return ids;
19077
20120
  }
19078
20121
  function getRequiredTabnineGuidelineTemplateIds(profile) {
@@ -19086,14 +20129,16 @@ function getRequiredTabnineGuidelineTemplateIds(profile) {
19086
20129
  if (hasStack(profile, "frameworks", "react")) ids.push("targets/tabnine-guidelines/30-stack-typescript-react@1");
19087
20130
  if (hasStack(profile, "languages", "java") && hasStack(profile, "frameworks", "spring-boot")) ids.push("targets/tabnine-guidelines/40-stack-java-spring@1");
19088
20131
  if (hasAnyStack(profile, "testing", ["playwright", "junit"])) ids.push("targets/tabnine-guidelines/50-testing-playwright-junit@1");
19089
- if (profile.workflow.codeReview === true) ids.push("targets/tabnine-guidelines/60-code-review@1");
20132
+ if (resolveSelectedSkills(profile).includes("review-change")) ids.push("targets/tabnine-guidelines/60-code-review@1");
19090
20133
  if (profile.workflow.refactoring === true) ids.push("targets/tabnine-guidelines/70-refactoring@1");
19091
20134
  if (profile.workflow.documentation === true) ids.push("targets/tabnine-guidelines/80-documentation@1");
20135
+ if (profile.workflow.memoryGuidance === true) ids.push("targets/tabnine-guidelines/85-memory-guidance@1");
20136
+ if (profile.workflow.loggingGuidance === true) ids.push("targets/tabnine-guidelines/86-logging-guidance@1");
19092
20137
  if (profile.workflow.finalReview) ids.push("targets/tabnine-guidelines/90-final-review@1");
19093
20138
  return ids;
19094
20139
  }
19095
20140
  function getRequiredWorkflowSkillTemplateIds(profile, target) {
19096
- return WORKFLOW_SKILLS.filter((skill) => profile.workflow[skill.workflowFlag]).map((skill) => getWorkflowSkillTemplateId(target, skill.id));
20141
+ return resolveSelectedSkills(profile).map((skill) => getWorkflowSkillTemplateId(target, skill));
19097
20142
  }
19098
20143
  function uniqueTargets(targets) {
19099
20144
  return Array.from(new Set(targets));
@@ -19984,5 +21029,5 @@ function truncatePreview(text, capBytes = 256 * 1024) {
19984
21029
  };
19985
21030
  }
19986
21031
 
19987
- export { writeProfileAtomic as A, ProfileWriteError as B, computeFileEtag as C, validateProfileValue as D, renderProfileYaml as E, truncatePreview as F, PHASE_14_SUPPORTED_PATHS as P, REGION_AWARE_ROOT_PATHS as R, applyWritePlan as a, buildPhase14ImportReport as b, compileProfile as c, deriveEffectivePermissions as d, containsSecretLikeLiteral as e, hasAnyRegionMarker as f, parseMixedFile as g, hasAllRegionMarkers as h, hasLegacyGeneratedMarker as i, createLockfileFile as j, sha256Hex as k, getEnabledSubagents as l, isSubagentBuiltinNameCollision as m, normalizeSafety as n, readLockfileForRegions as o, parseProfileYaml as p, planRootInstructionsAdoption as q, resolveProjectRoot as r, safeOutputPath as s, toLockfileV2View as t, planWrites as u, validateLockfileText as v, readRegionAwareFile as w, redactIfSecretLike as x, PHASE_14_SCAN_DIRS as y, loadProjectContext as z };
19988
- //# sourceMappingURL=projectContext-B1D-bieW.js.map
21032
+ export { readRegionAwareFile as A, redactIfSecretLike as B, PHASE_14_SCAN_DIRS as C, loadProjectContext as D, writeProfileAtomic as E, ProfileWriteError as F, computeFileEtag as G, validateProfileValue as H, renderProfileYaml as I, truncatePreview as J, PHASE_14_SUPPORTED_PATHS as P, REGION_AWARE_ROOT_PATHS as R, VERIFIED_CLAUDE_HOOK_EVENTS as V, applyWritePlan as a, buildPhase14ImportReport as b, compileProfile as c, deriveEffectivePermissions as d, containsSecretLikeLiteral as e, hasAnyRegionMarker as f, parseMixedFile as g, hasAllRegionMarkers as h, isLoopSkillId as i, hasLegacyGeneratedMarker as j, createLockfileFile as k, sha256Hex as l, getEnabledSubagents as m, normalizeSafety as n, isSubagentBuiltinNameCollision as o, parseProfileYaml as p, getSelectedAdvisoryHookRoles as q, resolveProjectRoot as r, safeOutputPath as s, toLockfileV2View as t, getAdvisoryHookTemplate as u, validateLockfileText as v, VERIFIED_CODEX_HOOK_EVENTS as w, readLockfileForRegions as x, planRootInstructionsAdoption as y, planWrites as z };
21033
+ //# sourceMappingURL=projectContext-BtPm3MFR.js.map